<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Usage of Wait() in threadpool in Intel® Moderncode for Parallel Architectures</title>
    <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859892#M2247</link>
    <description>&amp;gt; also explain me abt the InterlockedDecrement()..&lt;BR /&gt;&lt;BR /&gt;RTFM first&lt;BR /&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ms684122%28VS.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms684122%28VS.85%29.aspx&lt;/A&gt;&lt;BR /&gt;</description>
    <pubDate>Mon, 29 Mar 2010 06:56:03 GMT</pubDate>
    <dc:creator>Dmitry_Vyukov</dc:creator>
    <dc:date>2010-03-29T06:56:03Z</dc:date>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859886#M2241</link>
      <description>Hi,
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;i want to know the usage of threadpool wait function, that could cause the main() thread to wait till the work done by QUeUserWorkItem() finishes...&lt;/DIV&gt;
&lt;DIV&gt;give me a small xample..&lt;/DIV&gt;</description>
      <pubDate>Mon, 29 Mar 2010 06:00:41 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859886#M2241</guid>
      <dc:creator>coolsandyforyou</dc:creator>
      <dc:date>2010-03-29T06:00:41Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859887#M2242</link>
      <description>Here it is. Main thread creates 3 tasks, and then waits for completion.&lt;BR /&gt;&lt;BR /&gt;
&lt;PRE&gt;[cpp]struct task
{
    long rc;
    HANDLE ev;
};

struct work_item
{
    task* parent;
    int work;
};

DWORD WINAPI func(void* p)
{
    std::auto_ptr&lt;WORK_ITEM&gt; w ((work_item*)p);
    std::cout &amp;lt;&amp;lt; GetTickCount() &amp;lt;&amp;lt; " TASK START" &amp;lt;&amp;lt; std::endl;
    Sleep(w-&amp;gt;work);
    std::cout &amp;lt;&amp;lt; GetTickCount() &amp;lt;&amp;lt; " TASK END" &amp;lt;&amp;lt; std::endl;
    if (InterlockedDecrement(&amp;amp;w-&amp;gt;parent-&amp;gt;rc) == 0)
        SetEvent(w-&amp;gt;parent-&amp;gt;ev);
    return 0;
}

int main()
{
    size_t const work_count = 3;

    std::cout &amp;lt;&amp;lt; GetTickCount() &amp;lt;&amp;lt; " MAIN START" &amp;lt;&amp;lt; std::endl;

    std::auto_ptr&lt;TASK&gt; t (new task);
    t-&amp;gt;rc = work_count;
    t-&amp;gt;ev = CreateEvent(0, 0, 0, 0);

    for (size_t i = 0; i != work_count; i += 1)
    {
        work_item* w = new work_item;
        w-&amp;gt;parent = t.get();
        w-&amp;gt;work = rand() % 2000 + 1000;
        QueueUserWorkItem(func, w, 0);
    }

    WaitForSingleObject(t-&amp;gt;ev, INFINITE);

    std::cout &amp;lt;&amp;lt; GetTickCount() &amp;lt;&amp;lt; " MAIN END" &amp;lt;&amp;lt; std::endl;
}
[/cpp]&lt;/TASK&gt;&lt;/WORK_ITEM&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 29 Mar 2010 06:28:01 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859887#M2242</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-03-29T06:28:01Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859888#M2243</link>
      <description>Here it is. Main thread creates 3 tasks, and then waits for completion.&lt;BR /&gt;&lt;BR /&gt;
&lt;PRE&gt;[cpp]struct task
{
    long rc;
    HANDLE ev;
};

struct work_item
{
    task* parent;
    int work;
};

DWORD WINAPI func(void* p)
{
    std::auto_ptr&lt;WORK_ITEM&gt; w ((work_item*)p);
    std::cout &amp;lt;&amp;lt; GetTickCount() &amp;lt;&amp;lt; " TASK START" &amp;lt;&amp;lt; std::endl;
    Sleep(w-&amp;gt;work);
    std::cout &amp;lt;&amp;lt; GetTickCount() &amp;lt;&amp;lt; " TASK END" &amp;lt;&amp;lt; std::endl;
    if (InterlockedDecrement(&amp;amp;w-&amp;gt;parent-&amp;gt;rc) == 0)
        SetEvent(w-&amp;gt;parent-&amp;gt;ev);
    return 0;
}

int main()
{
    size_t const work_count = 3;

    std::cout &amp;lt;&amp;lt; GetTickCount() &amp;lt;&amp;lt; " MAIN START" &amp;lt;&amp;lt; std::endl;

    std::auto_ptr&lt;TASK&gt; t (new task);
    t-&amp;gt;rc = work_count;
    t-&amp;gt;ev = CreateEvent(0, 0, 0, 0);

    for (size_t i = 0; i != work_count; i += 1)
    {
        work_item* w = new work_item;
        w-&amp;gt;parent = t.get();
        w-&amp;gt;work = rand() % 2000 + 1000;
        QueueUserWorkItem(func, w, 0);
    }

    WaitForSingleObject(t-&amp;gt;ev, INFINITE);

    std::cout &amp;lt;&amp;lt; GetTickCount() &amp;lt;&amp;lt; " MAIN END" &amp;lt;&amp;lt; std::endl;
}
[/cpp]&lt;/TASK&gt;&lt;/WORK_ITEM&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 29 Mar 2010 06:30:28 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859888#M2243</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-03-29T06:30:28Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859889#M2244</link>
      <description>But t-&amp;gt;ev will be set even if one of the thread completes its job ,shouldnt we supposed to wait till the completion of the entire job (all threads completed)?...</description>
      <pubDate>Mon, 29 Mar 2010 06:51:03 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859889#M2244</guid>
      <dc:creator>coolsandyforyou</dc:creator>
      <dc:date>2010-03-29T06:51:03Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859890#M2245</link>
      <description>also explain me abt the InterlockedDecrement()..
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;another thing i executed ur code and observed that the things were not done in parallel they were done one after the other...this is the output that i got..&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV id="_mcePaste"&gt;10639468 MAIN START&lt;/DIV&gt;
&lt;DIV id="_mcePaste"&gt;10639484 TASK START&lt;/DIV&gt;
&lt;DIV id="_mcePaste"&gt;10640515 TASK END&lt;/DIV&gt;
&lt;DIV id="_mcePaste"&gt;10640515 TASK START&lt;/DIV&gt;
&lt;DIV id="_mcePaste"&gt;10641984 TASK END&lt;/DIV&gt;
&lt;DIV id="_mcePaste"&gt;10641984 TASK START&lt;/DIV&gt;
&lt;DIV id="_mcePaste"&gt;10643328 TASK END&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
1&lt;/DIV&gt;</description>
      <pubDate>Mon, 29 Mar 2010 06:53:07 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859890#M2245</guid>
      <dc:creator>coolsandyforyou</dc:creator>
      <dc:date>2010-03-29T06:53:07Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859891#M2246</link>
      <description>Compile and run the program.&lt;BR /&gt;Only the last job will set up the event because of the "if(InterlockedDecrement(&amp;amp;w-&amp;gt;parent-&amp;gt;rc)==0) ".&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Mon, 29 Mar 2010 06:53:40 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859891#M2246</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-03-29T06:53:40Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859892#M2247</link>
      <description>&amp;gt; also explain me abt the InterlockedDecrement()..&lt;BR /&gt;&lt;BR /&gt;RTFM first&lt;BR /&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ms684122%28VS.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms684122%28VS.85%29.aspx&lt;/A&gt;&lt;BR /&gt;</description>
      <pubDate>Mon, 29 Mar 2010 06:56:03 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859892#M2247</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-03-29T06:56:03Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859893#M2248</link>
      <description>&amp;gt; another thing i executed ur code and observed that the things were not  done in parallel they were done one after the other...this is the output  that i got..&lt;BR /&gt;&lt;BR /&gt;Why do you conclude that they were done one after another?&lt;BR /&gt;</description>
      <pubDate>Mon, 29 Mar 2010 07:15:08 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859893#M2248</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-03-29T07:15:08Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859894#M2249</link>
      <description>the timings....after the completion of one task only another one begins...it seems like that seeing the timings of gettickcount() there should be overlapping intervals,this made me think so...
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;also main thread is waiting for infinite time (last statement "MAIN END" is not printed)&lt;/DIV&gt;</description>
      <pubDate>Mon, 29 Mar 2010 09:48:12 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859894#M2249</guid>
      <dc:creator>coolsandyforyou</dc:creator>
      <dc:date>2010-03-29T09:48:12Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859895#M2250</link>
      <description>Output on my machine is:&lt;BR /&gt;666519357 MAIN START&lt;BR /&gt;666519372 TASK START&lt;BR /&gt;666519372 TASK START&lt;BR /&gt;666519372 TASK START&lt;BR /&gt;666520418 TASK END&lt;BR /&gt;666520714 TASK END&lt;BR /&gt;666520839 TASK END&lt;BR /&gt;666520839 MAIN END&lt;BR /&gt;&lt;BR /&gt;Probably you have only 1 hardware thread, or old OS, or something like that. Try to play with flags to QueueUserWorkItem(), especially WT_EXECUTEINIOTHREAD and WT_EXECUTELONGFUNCTION, I think they must help.&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Mon, 29 Mar 2010 09:53:54 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859895#M2250</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-03-29T09:53:54Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859896#M2251</link>
      <description>&lt;DIV&gt;&lt;WINDOWS.H&gt;&lt;STDIO.H&gt;&lt;IOSTREAM&gt;
&lt;PRE&gt;[bash]#include &lt;WINDOWS.H&gt;
#include&lt;STDIO.H&gt;
#include&lt;IOSTREAM&gt;
#define _WIN32_WINNT 0x0503
struct task  
{  
    long rc;  
    HANDLE ev;  
};  
  
struct work_item  
{  
    task* parent;  
    int work;  
};  
  
DWORD WINAPI func(void* p)  
{  
    work_item *w =((work_item*)p);  
    std::cout &amp;lt;&amp;lt; GetTickCount() &amp;lt;&amp;lt; " TASK START" &amp;lt;&amp;lt; std::endl;  
    Sleep(w-&amp;gt;work);  
    std::cout &amp;lt;&amp;lt; GetTickCount() &amp;lt;&amp;lt; " TASK END" &amp;lt;&amp;lt; std::endl;  
    if (InterlockedDecrement(&amp;amp;w-&amp;gt;parent-&amp;gt;rc) == 0)  
        SetEvent(w-&amp;gt;parent-&amp;gt;ev);  
    return 0;  
}  
  
int main()  
{  
    size_t const work_count = 3; 
	struct task t;

    std::cout &amp;lt;&amp;lt; GetTickCount() &amp;lt;&amp;lt; " MAIN START" &amp;lt;&amp;lt; std::endl;  
    
    t.rc = work_count;  
    t.ev = CreateEvent(0, 0, 0, 0);  
  
    for (size_t i = 0; i != work_count; i += 1)  
    {  
        work_item* w = new work_item;  
        w-&amp;gt;parent = (struct task *)malloc(sizeof(struct task));  
        w-&amp;gt;work = rand() % 2000 + 1000;  
        QueueUserWorkItem(func, w, WT_EXECUTELONGFUNCTION);  
    }  
  
    WaitForSingleObject(t.ev, INFINITE);  

    std::cout &amp;lt;&amp;lt; GetTickCount() &amp;lt;&amp;lt; "MAIN END" &amp;lt;&amp;lt; std::endl;  
}  
[/bash]&lt;/IOSTREAM&gt;&lt;/STDIO.H&gt;&lt;/WINDOWS.H&gt;&lt;/PRE&gt;
&lt;BR /&gt;&lt;/IOSTREAM&gt;&lt;/STDIO.H&gt;&lt;/WINDOWS.H&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;WINDOWS.H&gt;&lt;STDIO.H&gt;&lt;IOSTREAM&gt;&lt;BR /&gt;&lt;/IOSTREAM&gt;&lt;/STDIO.H&gt;&lt;/WINDOWS.H&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;WINDOWS.H&gt;&lt;STDIO.H&gt;&lt;IOSTREAM&gt;&lt;BR /&gt;&lt;/IOSTREAM&gt;&lt;/STDIO.H&gt;&lt;/WINDOWS.H&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;WINDOWS.H&gt;&lt;STDIO.H&gt;&lt;IOSTREAM&gt;&lt;BR /&gt;&lt;/IOSTREAM&gt;&lt;/STDIO.H&gt;&lt;/WINDOWS.H&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;WINDOWS.H&gt;&lt;STDIO.H&gt;&lt;IOSTREAM&gt;&lt;BR /&gt;&lt;/IOSTREAM&gt;&lt;/STDIO.H&gt;&lt;/WINDOWS.H&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;WINDOWS.H&gt;&lt;STDIO.H&gt;&lt;IOSTREAM&gt; i made small changes in the instantiation of task,work objects in ur code(changed them with C syntaxes),as ur code giving build errors in my machine..  here i am not getting MAIN END in the output..seems the main thread is waiting for infinite time...pls see where things have gone wrong.. thanks in advance..&lt;/IOSTREAM&gt;&lt;/STDIO.H&gt;&lt;/WINDOWS.H&gt;&lt;/DIV&gt;</description>
      <pubDate>Mon, 29 Mar 2010 10:17:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859896#M2251</guid>
      <dc:creator>coolsandyforyou</dc:creator>
      <dc:date>2010-03-29T10:17:00Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859897#M2252</link>
      <description>w-&amp;gt;parent= &amp;amp;t; &lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Mon, 29 Mar 2010 10:29:44 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859897#M2252</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-03-29T10:29:44Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859898#M2253</link>
      <description>Thanks a lot...for replying...knowing these things mean a lot to my M.tech project. I need to apply these technique to my video codec to improve its performance to real time..
&lt;DIV&gt;thanks again..&lt;/DIV&gt;</description>
      <pubDate>Tue, 30 Mar 2010 04:36:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859898#M2253</guid>
      <dc:creator>coolsandyforyou</dc:creator>
      <dc:date>2010-03-30T04:36:00Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859899#M2254</link>
      <description>Hi Dmitriv,&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;    as i said earlier i need to apply this technique to my video codec project..and i have done that succesfully..results were also same with and without threading,i observed tht the threads were created and each slice of a frame is being encoded parallely...&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;    But here is my issue..i run this project on a core2duo machine...But im not seeing any speed improvement infact the proj with threading is running bit slowly....I can send you both of the projects (with and without threading)please give me feedback where the things going wrong..&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;    The tasks to which i applied threading are inherently independent in nature..i dont see a reason why i dont deserve a double performance..&lt;/DIV&gt;&lt;DIV&gt;    pls reply..&lt;/DIV&gt;</description>
      <pubDate>Fri, 02 Apr 2010 04:42:36 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859899#M2254</guid>
      <dc:creator>coolsandyforyou</dc:creator>
      <dc:date>2010-04-02T04:42:36Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859900#M2255</link>
      <description>Ideally, provided perfect parallelization one has: 2x consumed CPU time + 2x more useful work done.&lt;BR /&gt;There are 2 possible scenarios wrt your application: (1) No 2x consumed CPU time, but maybe only 1.1x; or (2) 2x consumed CPU time, but still only 1.1 useful work done.&lt;BR /&gt;Try to identify with a profiler (or other tools) what scenario you have. If (1) then you do not expose enough parallelism to get 2x speedup. If (2) then there is some problem in your implementation, profiler can show in what function the problem is.&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Fri, 02 Apr 2010 06:14:18 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859900#M2255</guid>
      <dc:creator>Dmitry_Vyukov</dc:creator>
      <dc:date>2010-04-02T06:14:18Z</dc:date>
    </item>
    <item>
      <title>Usage of Wait() in threadpool</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859901#M2256</link>
      <description>are there any thread pool kind of functions for linux?</description>
      <pubDate>Sun, 18 Apr 2010 05:31:31 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Usage-of-Wait-in-threadpool/m-p/859901#M2256</guid>
      <dc:creator>coolsandyforyou</dc:creator>
      <dc:date>2010-04-18T05:31:31Z</dc:date>
    </item>
  </channel>
</rss>

