<?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 I think this section... in OpenCL* for CPU</title>
    <link>https://community.intel.com/t5/OpenCL-for-CPU/dot-product-kernel-doesn-t-work-on-CPUs/m-p/1124688#M5593</link>
    <description>&lt;P&gt;I think this section...&lt;/P&gt;

&lt;PRE class="brush:cpp;"&gt;    for (int i = get_local_size (0) / 2; i &amp;gt; 0; i /= 2)
    {
      if (cacheIdx &amp;lt; i)
      {
        cache[cacheIdx] += cache[cacheIdx + i];
        barrier (CLK_LOCAL_MEM_FENCE);
      }
    }&lt;/PRE&gt;

&lt;P&gt;... uses a barrier within divergent control flow, which is disallowed.&amp;nbsp; Search the spec for: "If work_group_barrier is inside a conditional statement, then all work-items must enter the conditional if any work-item enters the conditional statement and executes the work_group_barrier."&lt;/P&gt;

&lt;P&gt;Do you get the same incorrect behavior if the barrier is outside of the if block?&lt;/P&gt;

&lt;PRE class="brush:cpp;"&gt;    for (int i = get_local_size (0) / 2; i &amp;gt; 0; i /= 2)
    {
      if (cacheIdx &amp;lt; i)
      {
        cache[cacheIdx] += cache[cacheIdx + i];
      }
      barrier (CLK_LOCAL_MEM_FENCE);
    }&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 04 Jan 2017 15:49:54 GMT</pubDate>
    <dc:creator>Ben_A_Intel</dc:creator>
    <dc:date>2017-01-04T15:49:54Z</dc:date>
    <item>
      <title>dot product kernel doesn't work on CPUs</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/dot-product-kernel-doesn-t-work-on-CPUs/m-p/1124685#M5590</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;

&lt;P&gt;I'm new to OpenCL and I have implemented a program to compute the&lt;BR /&gt;
	dot product. The program works as expected if I use a GPU and it&lt;BR /&gt;
	returns a wrong result if I use a CPU with more than one work-item&lt;BR /&gt;
	in a work-group. I was able to find the reason for the problem&lt;BR /&gt;
	using only two work-items per work-group and one work-group&lt;BR /&gt;
	per NDrange. I have two work-items before and after the reduction&lt;BR /&gt;
	operation if I use a GPU and only one work-item after the&lt;BR /&gt;
	reduction operation if I use a CPU so that the partial sum of the&lt;BR /&gt;
	work-group will not be stored. The program uses libOpenCL.so.1 from&lt;BR /&gt;
	opencl-1.2-sdk-6.3.0.1904, opencl_runtime_16.1.1_x64_sles_6.4.0.25,&lt;BR /&gt;
	and the OpenCL driver from CUDA-8.0. Does somebody know why I have&lt;BR /&gt;
	only one work-item after the reduction operation? Is something&lt;BR /&gt;
	wrong with my kernel (most likely) or have I detected a problem with&lt;BR /&gt;
	the Intel OpenCL implementation for CPUs (very unlikely)?&lt;/P&gt;

&lt;P&gt;loki introduction 230 gcc dot_prod_OpenCL_orig.c errorCodes.c -lOpenCL&lt;BR /&gt;
	loki introduction 231 a.out&lt;/P&gt;

&lt;P&gt;Try to find first GPU on available platforms.&lt;BR /&gt;
	...&lt;BR /&gt;
	&amp;nbsp; ********&amp;nbsp; Using platform 1&amp;nbsp; ********&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; Use device Quadro K2200.&lt;/P&gt;

&lt;P&gt;before reduction: local_id = 0&lt;BR /&gt;
	before reduction: local_id = 1&lt;BR /&gt;
	after reduction:&amp;nbsp; local_id = 0&lt;BR /&gt;
	after reduction:&amp;nbsp; local_id = 1&lt;BR /&gt;
	sum = 6.000000e+01&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	loki introduction 232 gcc dot_prod_OpenCL.c errorCodes.c -lOpenCL&lt;BR /&gt;
	loki introduction 233 a.out&lt;/P&gt;

&lt;P&gt;Try to find first CPU on available platforms.&lt;BR /&gt;
	&amp;nbsp; ********&amp;nbsp; Using platform 0&amp;nbsp; ********&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; Use device Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz.&lt;/P&gt;

&lt;P&gt;before reduction: local_id = 0&lt;BR /&gt;
	before reduction: local_id = 1&lt;BR /&gt;
	after reduction:&amp;nbsp; local_id = 1&lt;BR /&gt;
	sum = 2.265776e-316&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	loki introduction 234 strace a.out |&amp;amp; grep ocl&lt;BR /&gt;
	open("/usr/local/intel/opencl-1.2-6.4.0.25/lib64/libintelocl.so", O_RDONLY|O_CLOEXEC) = 5&lt;BR /&gt;
	open("/usr/local/intel/opencl-1.2-6.4.0.25/lib64/__ocl_svml_l9.so", O_RDONLY|O_CLOEXEC) = 3&lt;BR /&gt;
	loki introduction 235&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	dot_prod_OpenCL.h&lt;BR /&gt;
	-----------------&lt;/P&gt;

&lt;P&gt;#define&amp;nbsp;&amp;nbsp; &amp;nbsp;VECTOR_SIZE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 10&lt;BR /&gt;
	#define WORK_ITEMS_PER_WORK_GROUP 2&amp;nbsp;&amp;nbsp; &amp;nbsp;/* power of two&amp;nbsp;&amp;nbsp; &amp;nbsp;required&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;BR /&gt;
	#define WORK_GROUPS_PER_NDRANGE&amp;nbsp;&amp;nbsp; 1&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	dotProdKernel.cl&lt;BR /&gt;
	----------------&lt;/P&gt;

&lt;P&gt;#if defined (cl_khr_fp64) || defined (cl_amd_fp64)&lt;BR /&gt;
	&amp;nbsp; #include "dot_prod_OpenCL.h"&lt;/P&gt;

&lt;P&gt;&amp;nbsp; __kernel void dotProdKernel (__global const double * restrict a,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __global const double * restrict b,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __global double * restrict partial_sum)&lt;BR /&gt;
	&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Use local memory to store each work-items running sum.&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; __local double cache[WORK_ITEMS_PER_WORK_GROUP];&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double temp = 0.0;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp; cacheIdx = get_local_id (0);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int tid = get_global_id (0);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; tid &amp;lt; VECTOR_SIZE;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp; tid += get_global_size (0))&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp += a[tid] * b[tid];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; cache[cacheIdx] = temp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Ensure that all work-items have completed, before you add up the&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * partial sums of each work-item to the sum of the work-group&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; barrier (CLK_LOCAL_MEM_FENCE);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Each work-item will add two values and store the result back to&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * "cache". We need "log_2 (WORK_ITEMS_PER_WORK_GROUP)" steps to&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * reduce all partial values to one work-group value.&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * WORK_ITEMS_PER_WORK_GROUP must be a power of two for this&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * reduction.&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("before reduction: local_id = %u\n", get_local_id (0));&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = get_local_size (0) / 2; i &amp;gt; 0; i /= 2)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cacheIdx &amp;lt; i)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;cache[cacheIdx] += cache[cacheIdx + i];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;barrier (CLK_LOCAL_MEM_FENCE);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("after reduction:&amp;nbsp; local_id = %u\n", get_local_id (0));&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* store the partial sum of this work-group&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cacheIdx == 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; partial_sum[get_group_id (0)] = cache[0];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp; }&lt;BR /&gt;
	#else&lt;BR /&gt;
	&amp;nbsp; #error "Double precision floating point not supported."&lt;BR /&gt;
	#endif&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	Thank you very much for any help in advance.&lt;/P&gt;

&lt;P&gt;Kind regards&lt;/P&gt;

&lt;P&gt;Siegmar&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 03 Jan 2017 10:44:22 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/dot-product-kernel-doesn-t-work-on-CPUs/m-p/1124685#M5590</guid>
      <dc:creator>Siegmar_G_</dc:creator>
      <dc:date>2017-01-03T10:44:22Z</dc:date>
    </item>
    <item>
      <title>Reductions can be tricky to</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/dot-product-kernel-doesn-t-work-on-CPUs/m-p/1124686#M5591</link>
      <description>&lt;P&gt;Reductions can be tricky to implement.&amp;nbsp;&amp;nbsp; For a simple starting point you could make each work item do more multiplies (for example, 4, 8, or 16 of them) then calculate a partial sum for each work item without a barrier.&amp;nbsp;&lt;/P&gt;

&lt;P&gt;Alternately, this implementation looks somewhat close to your algorithm: &lt;A href="http://www.openclblog.com/2012/11/opencl-and-dot-product.html.&amp;nbsp;" target="_blank"&gt;http://www.openclblog.com/2012/11/opencl-and-dot-product.html.&amp;nbsp;&lt;/A&gt;; (Though you may need to limit max local size to something smaller than CL_MAX_WORK_GROUP_SIZE to get this to work on the CPU.&amp;nbsp; I Tried with 256 and results passed the correctness check at the end.)&lt;/P&gt;

&lt;P&gt;As you're developing your own algorithm, the Code Builder tools can help with debugging and with checking the outputs.&lt;/P&gt;

&lt;P&gt;For a peek ahead at "advanced" ways to more deeply optimize the dot product algorithm, take a look at &lt;A href="https://software.intel.com/en-us/articles/sgemm-for-intel-processor-graphics.&amp;nbsp;" target="_blank"&gt;https://software.intel.com/en-us/articles/sgemm-for-intel-processor-graphics.&amp;nbsp;&lt;/A&gt;;&lt;/P&gt;</description>
      <pubDate>Wed, 04 Jan 2017 07:02:44 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/dot-product-kernel-doesn-t-work-on-CPUs/m-p/1124686#M5591</guid>
      <dc:creator>Jeffrey_M_Intel1</dc:creator>
      <dc:date>2017-01-04T07:02:44Z</dc:date>
    </item>
    <item>
      <title>Hi Jeffrey,</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/dot-product-kernel-doesn-t-work-on-CPUs/m-p/1124687#M5592</link>
      <description>&lt;P&gt;Hi Jeffrey,&lt;/P&gt;

&lt;P&gt;thank you very much for your answer. Unfortunately it doesn't address my problem. My reduction works as expected if I use the OpenCL implementation from CUDA-8.0, because I don't lose work-items in the reduction phase. However, I lose work-item 0 in the reduction phase if I use the Intel implementation for my CPU so that the result of the work-group will not be stored in array "partial_sum". For my test case I use only 2 work-items in 1 work-group so that I'm far away from CL_MAX_WORK_GROUP_SIZE. I've added statements to print the values after the reduction.&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp; cacheIdx = get_local_id (0);&lt;/P&gt;

&lt;P&gt;...&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("after reduction:&amp;nbsp; local_id = %u\n", get_local_id (0));&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; WORK_ITEMS_PER_WORK_GROUP; ++i)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("cache[%d] = %e\n", i, cache&lt;I&gt;);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* store the partial sum of this work-group&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cacheIdx == 0)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; partial_sum[get_group_id (0)] = cache[0];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;loki introduction 141 icc dot_prod_OpenCL.c errorCodes.c -lOpenCL&lt;BR /&gt;
	loki introduction 142 a.out&lt;/P&gt;

&lt;P&gt;Found 2 platform(s).&lt;BR /&gt;
	Try to find first CPU on available platforms.&lt;BR /&gt;
	&amp;nbsp; ********&amp;nbsp; Using platform 0&amp;nbsp; ********&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; Use device Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz.&lt;/P&gt;

&lt;P&gt;before reduction: local_id = 0&lt;BR /&gt;
	before reduction: local_id = 1&lt;BR /&gt;
	after reduction:&amp;nbsp; local_id = 1&lt;BR /&gt;
	cache[0] = 6.000000e+01&lt;BR /&gt;
	cache[1] = 3.000000e+01&lt;BR /&gt;
	sum = 1.151084e-316&lt;BR /&gt;
	loki introduction 143&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	"cache[0]" holds the correct value, but "local_id 0" isn't available so that the value will not be stored in "partial_sum[get_group_id (0)]" and therefore gets lost. I'm working with SuSE Linux Enterprise Server and don't have Code Builder, because "mono" isn't available.&lt;/P&gt;

&lt;P&gt;loki introduction 144 CodeBuilder&lt;BR /&gt;
	/usr/bin/CodeBuilder: line 9: exec: mono: not found&lt;BR /&gt;
	loki introduction 145&lt;/P&gt;

&lt;P&gt;Do you have any suggestions how I can nevertheless find out why work-item 0 isn't available after the reduction operation? I've added my files so that you can possibly find out if you have the same problem on your machine.&lt;/P&gt;

&lt;P&gt;Thank you very much for any further help in advance.&lt;/P&gt;

&lt;P&gt;Kind regards&lt;/P&gt;

&lt;P&gt;Siegmar&lt;/P&gt;</description>
      <pubDate>Wed, 04 Jan 2017 12:47:02 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/dot-product-kernel-doesn-t-work-on-CPUs/m-p/1124687#M5592</guid>
      <dc:creator>Siegmar_G_</dc:creator>
      <dc:date>2017-01-04T12:47:02Z</dc:date>
    </item>
    <item>
      <title>I think this section...</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/dot-product-kernel-doesn-t-work-on-CPUs/m-p/1124688#M5593</link>
      <description>&lt;P&gt;I think this section...&lt;/P&gt;

&lt;PRE class="brush:cpp;"&gt;    for (int i = get_local_size (0) / 2; i &amp;gt; 0; i /= 2)
    {
      if (cacheIdx &amp;lt; i)
      {
        cache[cacheIdx] += cache[cacheIdx + i];
        barrier (CLK_LOCAL_MEM_FENCE);
      }
    }&lt;/PRE&gt;

&lt;P&gt;... uses a barrier within divergent control flow, which is disallowed.&amp;nbsp; Search the spec for: "If work_group_barrier is inside a conditional statement, then all work-items must enter the conditional if any work-item enters the conditional statement and executes the work_group_barrier."&lt;/P&gt;

&lt;P&gt;Do you get the same incorrect behavior if the barrier is outside of the if block?&lt;/P&gt;

&lt;PRE class="brush:cpp;"&gt;    for (int i = get_local_size (0) / 2; i &amp;gt; 0; i /= 2)
    {
      if (cacheIdx &amp;lt; i)
      {
        cache[cacheIdx] += cache[cacheIdx + i];
      }
      barrier (CLK_LOCAL_MEM_FENCE);
    }&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 04 Jan 2017 15:49:54 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/dot-product-kernel-doesn-t-work-on-CPUs/m-p/1124688#M5593</guid>
      <dc:creator>Ben_A_Intel</dc:creator>
      <dc:date>2017-01-04T15:49:54Z</dc:date>
    </item>
    <item>
      <title>Hi Ben,</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/dot-product-kernel-doesn-t-work-on-CPUs/m-p/1124689#M5594</link>
      <description>&lt;P&gt;Hi Ben,&lt;/P&gt;

&lt;P&gt;thank you very much for your answer. It solves my problem and I should have seen your solution myself.&lt;/P&gt;

&lt;P&gt;Kind regards and thank you once more&lt;/P&gt;

&lt;P&gt;Siegmar&lt;/P&gt;</description>
      <pubDate>Wed, 04 Jan 2017 16:05:53 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/dot-product-kernel-doesn-t-work-on-CPUs/m-p/1124689#M5594</guid>
      <dc:creator>Siegmar_G_</dc:creator>
      <dc:date>2017-01-04T16:05:53Z</dc:date>
    </item>
  </channel>
</rss>

