<?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 Problems with reduction done in CPU  in OpenCL* for CPU</title>
    <link>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025545#M3453</link>
    <description>&lt;P&gt;Hi all. I have been trying to code reductions for CPU and GPU.&amp;nbsp; The kernels attached below work really&lt;/P&gt;

&lt;P&gt;well for Intel GPU's and Nvidia GPU. But, when I compile for CPU (Intel). The results are not consistent.&lt;/P&gt;

&lt;P&gt;Sometimes, the result is right sometimes the result is wrong. There are two kernels: reduction_vector&lt;/P&gt;

&lt;P&gt;is called many times by the host. When, the global_size is reduced to local_size. I issue complete_vector to finalize&lt;/P&gt;

&lt;P&gt;the reduction.&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__kernel&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; reduction_vector(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__global&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;* data, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__local&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;* partial_sums)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; lid = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_local_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; group_size = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_local_size&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;partial_sums[lid] = data[&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_global_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0)];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;barrier&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(CLK_LOCAL_MEM_FENCE);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;for&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; (&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; i = 1; i &amp;lt; group_size; i &amp;lt;&amp;lt;= 1) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; mask = (i &amp;lt;&amp;lt; 1) - 1;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; ((lid &amp;amp; mask) == 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;partial_sums[lid] += partial_sums[lid + i];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;barrier&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(CLK_LOCAL_MEM_FENCE);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(lid == 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;data[&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_group_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0)] = partial_sums[0];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__kernel&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; reduction_complete(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__global&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;* data, &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__local&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;* partial_sums, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__global&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; *sum) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; lid = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_local_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; group_size = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_local_size&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;partial_sums[lid] = data[&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_local_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0)];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;barrier&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(CLK_LOCAL_MEM_FENCE);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;for&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; (&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; i = 1; i &amp;lt; group_size; i &amp;lt;&amp;lt;= 1) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; mask = (i &amp;lt;&amp;lt; 1) - 1;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; ((lid &amp;amp; mask) == 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;partial_sums[lid] += partial_sums[lid + i];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;barrier&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(CLK_LOCAL_MEM_FENCE);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(lid == 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;*sum = partial_sums[0];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;This is the host code&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;local_size = 128;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Create data buffer */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;data_buffer = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clCreateBuffer&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.context, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;CL_MEM_READ_WRITE&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; | &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;CL_MEM_USE_HOST_PTR&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;)* &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;ARRAY_SIZE&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, data, &amp;amp;err);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;sum_buffer = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clCreateBuffer&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.context, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;CL_MEM_WRITE_ONLY&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &amp;amp;err);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(err &amp;lt; 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;perror(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Couldn't create a buffer"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;exit(1); &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;};&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clEnqueueWriteBuffer&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue, data_buffer, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;CL_TRUE&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;) * &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;ARRAY_SIZE&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, data, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clFinish&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Set arguments for vector kernel */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clSetKernelArg&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(vector_kernel, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_mem&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &amp;amp;data_buffer);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err |= &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clSetKernelArg&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(vector_kernel, 1, local_size * &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Set arguments for complete kernel */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clSetKernelArg&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(complete_kernel, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_mem&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &amp;amp;data_buffer);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err |= &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clSetKernelArg&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(complete_kernel, 1, local_size * &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err |= &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clSetKernelArg&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(complete_kernel, 2, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_mem&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &amp;amp;sum_buffer);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(err &amp;lt; 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;perror(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Couldn't create a kernel argument"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;exit(1); &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Enqueue kernels */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;global_size = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;ARRAY_SIZE&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clEnqueueNDRangeKernel&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue, vector_kernel, 1, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &amp;amp;global_size,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;&amp;amp;local_size, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(err &amp;lt; 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;perror(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Couldn't enqueue the kernel"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;exit(1); &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;printf&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Global size = %lu\n"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, global_size);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Perform successive stages of the reduction */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;while&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(global_size/local_size &amp;gt; local_size) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;global_size = global_size/local_size;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clEnqueueNDRangeKernel&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue, vector_kernel, 1, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &amp;amp;global_size,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;&amp;amp;local_size, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;printf&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Global size = %lu\n"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, global_size);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(err &amp;lt; 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;perror(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Couldn't enqueue the kernel"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;exit(1); &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;global_size = global_size/(local_size);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;local_size = global_size;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clEnqueueNDRangeKernel&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue, complete_kernel, 1, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &amp;amp;global_size,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;&amp;amp;local_size, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;printf&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Global size = %lu\n"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, global_size);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Read the result */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clEnqueueReadBuffer&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue, sum_buffer, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;CL_TRUE&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &amp;amp;sum, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clFinish&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; (err &amp;lt; 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;perror(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Couldn't read the buffer"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;exit(1);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Finish processing the queue and get profiling information */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clFinish&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;It does look to me that this Intel's bug&amp;nbsp;in the CPU runtime. Notice, I tried two runtimes:&lt;/P&gt;

&lt;P&gt;1. &amp;nbsp;Runtime 14.2 x64&lt;/P&gt;

&lt;P&gt;2. Runtime 15.1.x64&lt;/P&gt;

&lt;P&gt;Thanks, for your help....&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;Diego&lt;/P&gt;</description>
    <pubDate>Fri, 29 May 2015 18:29:16 GMT</pubDate>
    <dc:creator>Diego_G_</dc:creator>
    <dc:date>2015-05-29T18:29:16Z</dc:date>
    <item>
      <title>Problems with reduction done in CPU</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025545#M3453</link>
      <description>&lt;P&gt;Hi all. I have been trying to code reductions for CPU and GPU.&amp;nbsp; The kernels attached below work really&lt;/P&gt;

&lt;P&gt;well for Intel GPU's and Nvidia GPU. But, when I compile for CPU (Intel). The results are not consistent.&lt;/P&gt;

&lt;P&gt;Sometimes, the result is right sometimes the result is wrong. There are two kernels: reduction_vector&lt;/P&gt;

&lt;P&gt;is called many times by the host. When, the global_size is reduced to local_size. I issue complete_vector to finalize&lt;/P&gt;

&lt;P&gt;the reduction.&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__kernel&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; reduction_vector(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__global&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;* data, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__local&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;* partial_sums)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; lid = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_local_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; group_size = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_local_size&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;partial_sums[lid] = data[&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_global_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0)];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;barrier&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(CLK_LOCAL_MEM_FENCE);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;for&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; (&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; i = 1; i &amp;lt; group_size; i &amp;lt;&amp;lt;= 1) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; mask = (i &amp;lt;&amp;lt; 1) - 1;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; ((lid &amp;amp; mask) == 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;partial_sums[lid] += partial_sums[lid + i];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;barrier&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(CLK_LOCAL_MEM_FENCE);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(lid == 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;data[&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_group_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0)] = partial_sums[0];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__kernel&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; reduction_complete(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__global&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;* data, &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__local&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;* partial_sums, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__global&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; *sum) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; lid = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_local_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; group_size = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_local_size&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;partial_sums[lid] = data[&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_local_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0)];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;barrier&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(CLK_LOCAL_MEM_FENCE);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;for&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; (&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; i = 1; i &amp;lt; group_size; i &amp;lt;&amp;lt;= 1) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; mask = (i &amp;lt;&amp;lt; 1) - 1;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; ((lid &amp;amp; mask) == 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;partial_sums[lid] += partial_sums[lid + i];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;barrier&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(CLK_LOCAL_MEM_FENCE);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(lid == 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;*sum = partial_sums[0];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;This is the host code&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;local_size = 128;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Create data buffer */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;data_buffer = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clCreateBuffer&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.context, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;CL_MEM_READ_WRITE&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; | &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;CL_MEM_USE_HOST_PTR&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;)* &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;ARRAY_SIZE&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, data, &amp;amp;err);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;sum_buffer = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clCreateBuffer&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.context, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;CL_MEM_WRITE_ONLY&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;,&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &amp;amp;err);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(err &amp;lt; 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;perror(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Couldn't create a buffer"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;exit(1); &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;};&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clEnqueueWriteBuffer&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue, data_buffer, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;CL_TRUE&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;) * &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;ARRAY_SIZE&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, data, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clFinish&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Set arguments for vector kernel */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clSetKernelArg&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(vector_kernel, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_mem&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &amp;amp;data_buffer);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err |= &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clSetKernelArg&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(vector_kernel, 1, local_size * &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Set arguments for complete kernel */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clSetKernelArg&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(complete_kernel, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_mem&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &amp;amp;data_buffer);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err |= &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clSetKernelArg&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(complete_kernel, 1, local_size * &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err |= &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clSetKernelArg&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(complete_kernel, 2, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_mem&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &amp;amp;sum_buffer);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(err &amp;lt; 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;perror(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Couldn't create a kernel argument"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;exit(1); &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Enqueue kernels */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;global_size = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;ARRAY_SIZE&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clEnqueueNDRangeKernel&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue, vector_kernel, 1, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &amp;amp;global_size,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;&amp;amp;local_size, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(err &amp;lt; 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;perror(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Couldn't enqueue the kernel"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;exit(1); &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;printf&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Global size = %lu\n"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, global_size);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Perform successive stages of the reduction */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;while&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(global_size/local_size &amp;gt; local_size) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;global_size = global_size/local_size;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clEnqueueNDRangeKernel&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue, vector_kernel, 1, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &amp;amp;global_size,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;&amp;amp;local_size, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;printf&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Global size = %lu\n"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, global_size);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(err &amp;lt; 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;perror(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Couldn't enqueue the kernel"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;exit(1); &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;global_size = global_size/(local_size);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;local_size = global_size;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clEnqueueNDRangeKernel&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue, complete_kernel, 1, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &amp;amp;global_size,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;&amp;amp;local_size, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;printf&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Global size = %lu\n"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, global_size);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Read the result */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;err = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clEnqueueReadBuffer&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue, sum_buffer, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;CL_TRUE&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;sizeof&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;cl_int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;), &amp;amp;sum, 0, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;&lt;FONT color="#6f008a" face="Lucida Console" size="1"&gt;NULL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clFinish&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; (err &amp;lt; 0) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;perror(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;&lt;FONT color="#a31515" face="Lucida Console" size="1"&gt;"Couldn't read the buffer"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;exit(1);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;/* Finish processing the queue and get profiling information */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;clFinish&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(oclobjects.queue);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;It does look to me that this Intel's bug&amp;nbsp;in the CPU runtime. Notice, I tried two runtimes:&lt;/P&gt;

&lt;P&gt;1. &amp;nbsp;Runtime 14.2 x64&lt;/P&gt;

&lt;P&gt;2. Runtime 15.1.x64&lt;/P&gt;

&lt;P&gt;Thanks, for your help....&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;Diego&lt;/P&gt;</description>
      <pubDate>Fri, 29 May 2015 18:29:16 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025545#M3453</guid>
      <dc:creator>Diego_G_</dc:creator>
      <dc:date>2015-05-29T18:29:16Z</dc:date>
    </item>
    <item>
      <title>Diego,</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025546#M3454</link>
      <description>&lt;P&gt;Diego,&lt;/P&gt;

&lt;P&gt;Could you please provide more details about your system, e.g. processor, OS, graphics and CPU OpenCL driver versions?&lt;/P&gt;

&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Fri, 29 May 2015 23:18:41 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025546#M3454</guid>
      <dc:creator>Robert_I_Intel</dc:creator>
      <dc:date>2015-05-29T23:18:41Z</dc:date>
    </item>
    <item>
      <title>Thank you Robert, this is the</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025547#M3455</link>
      <description>&lt;P&gt;Thank you Robert, this is the system:&lt;/P&gt;

&lt;P&gt;Windows 8.1&lt;BR /&gt;
	Microsoft Visual Studio 2013&lt;BR /&gt;
	Code Builder for OpenCL Applications Version 1.3.0.92&lt;BR /&gt;
	OpenCL runtime for Intel Core and Xeon Processors 5.0.0.57&lt;BR /&gt;
	Intel(R) Core(TM) i3-3220 &lt;A href="mailto:CPU@3.30GHz"&gt;CPU@3.30GHz&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;I have attached the file SumRedux.rar. It has the whole project. Notice, that I use&lt;/P&gt;

&lt;P&gt;Intel OpenCL C++ wrappers. Like,&amp;nbsp; the Intel OpenCL demos. The code runs fine&lt;/P&gt;

&lt;P&gt;with Intel HD Graphics 4400 and Nvidia GPU.&amp;nbsp; Try to run the code multiple times&lt;/P&gt;

&lt;P&gt;sometimes it works sometimes it fails. Larger is the data set&amp;nbsp;bigger instances of failure&lt;/P&gt;

&lt;P&gt;will happen.&amp;nbsp; The code is small...&amp;nbsp; Thank, you for your help....&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 30 May 2015 13:53:03 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025547#M3455</guid>
      <dc:creator>Diego_G_</dc:creator>
      <dc:date>2015-05-30T13:53:03Z</dc:date>
    </item>
    <item>
      <title>Hi Diego,</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025548#M3456</link>
      <description>&lt;P&gt;Hi Diego,&lt;/P&gt;

&lt;P&gt;I was able to reproduce the issue on my end. I suspect there is a subtle race condition that affects CPU part since CPU executes things one work item at a time, but I couldn't find one. Sent to our in-house expert for review.&lt;/P&gt;

&lt;P&gt;One more thing: for some reason, when I split&lt;/P&gt;

&lt;P&gt;if (lid &amp;lt; stride) {&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; partial_sums[lid] += partial_sums[lid + i];&lt;/P&gt;

&lt;P&gt;}&lt;/P&gt;

&lt;P&gt;which does both local reads and local writes in the same statement into two separate pieces (one doing only reads then barrier then only write) - CPU version ALWAYS fails.&lt;/P&gt;</description>
      <pubDate>Mon, 01 Jun 2015 20:44:14 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025548#M3456</guid>
      <dc:creator>Robert_I_Intel</dc:creator>
      <dc:date>2015-06-01T20:44:14Z</dc:date>
    </item>
    <item>
      <title>Thank you Robert, it is a</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025549#M3457</link>
      <description>&lt;P&gt;Thank you Robert, it is a race condition at CPU code generator. Let us &amp;nbsp;wait for the expert, He may have a simple fix.&lt;/P&gt;

&lt;P&gt;By the way, other type of reductions runs fine in the CPU. I tried min and argmin with OpenCL intrinsics (select, isless). It &amp;nbsp;just works fine&lt;/P&gt;

&lt;P&gt;using the same address mode as the accumulator code. &amp;nbsp;&lt;/P&gt;

&lt;P&gt;Best regards,&lt;/P&gt;

&lt;P&gt;Diego&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 01 Jun 2015 21:21:05 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025549#M3457</guid>
      <dc:creator>Diego_G_</dc:creator>
      <dc:date>2015-06-01T21:21:05Z</dc:date>
    </item>
    <item>
      <title>Hi Diego,</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025550#M3458</link>
      <description>&lt;P&gt;Hi Diego,&lt;/P&gt;

&lt;P&gt;What about the following reduction:&lt;/P&gt;

&lt;PRE class="brush:cpp;"&gt;__kernel void 
reduce( __global float* input, __global float* output, __local float* localmem)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; int lid= get_local_id(0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; int gid= get_global_id(0);

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Phase 1: First addition + Load data to local memory
&amp;nbsp;&amp;nbsp;&amp;nbsp; localmem[lid] = input[gid*2] + input[gid*2+1];

&amp;nbsp;&amp;nbsp;&amp;nbsp; barrier(CLK_LOCAL_MEM_FENCE);

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Phases 2,3: repeat reduction in local memory
&amp;nbsp;&amp;nbsp;&amp;nbsp; float tmp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int s = get_local_size(0)/2; s&amp;gt;1; s &amp;gt;&amp;gt;= 1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lid &amp;lt; s)&amp;nbsp; // only do work on “remaining” work items
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp = localmem[lid*2] + localmem[lid*2+1];

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // All threads must reach barrier
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; barrier(CLK_LOCAL_MEM_FENCE);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lid &amp;lt; s)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; localmem[lid] = tmp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // All threads must reach barrier
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; barrier(CLK_LOCAL_MEM_FENCE);&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Phase 4: write result to global memory
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lid == 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output[get_group_id(0)] = localmem[0] + localmem[1];

}
&lt;/PRE&gt;

&lt;P&gt;You might want to modify this one to fit your needs: shouldn't have a race on the CPU.&lt;/P&gt;</description>
      <pubDate>Mon, 01 Jun 2015 21:43:01 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025550#M3458</guid>
      <dc:creator>Robert_I_Intel</dc:creator>
      <dc:date>2015-06-01T21:43:01Z</dc:date>
    </item>
    <item>
      <title>Thanks Robert, I will try</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025551#M3459</link>
      <description>&lt;P&gt;Thanks Robert, I will try your suggestion.&lt;/P&gt;

&lt;P&gt;Diego&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2015 16:21:23 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025551#M3459</guid>
      <dc:creator>Diego_G_</dc:creator>
      <dc:date>2015-06-02T16:21:23Z</dc:date>
    </item>
    <item>
      <title>Hi Diego, your code does have</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025552#M3460</link>
      <description>&lt;P&gt;Hi Diego, your code does have a race and Yuri Kulakov, our OpenCL expert found it. Here is his explanation:&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P style="margin: 0in 0in 0pt;"&gt;&lt;SPAN style="color: rgb(31, 73, 125);"&gt;&lt;FONT face="Calibri" size="3"&gt;The problem is in the kernel code, at line 18:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0in 0in 0pt;"&gt;&lt;SPAN style="color: rgb(31, 73, 125);"&gt;&lt;FONT face="Calibri" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data[get_group_id(0)] = partial_sums[0];&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0in 0in 0pt;"&gt;&lt;SPAN style="color: rgb(31, 73, 125);"&gt;&lt;FONT face="Calibri" size="3"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0in 0in 0pt;"&gt;&lt;SPAN style="color: rgb(31, 73, 125);"&gt;&lt;FONT face="Calibri" size="3"&gt;Basically, this logic expects that work-groups are executed sequentially, but this is not the case (for CPU at least). What happens is that some work-group with a higher index might be executed earlier and so it rewrites the data that has not been processed yet by the lower index (say 0) work-group.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0in 0in 0pt;"&gt;&lt;SPAN style="color: rgb(31, 73, 125);"&gt;&lt;FONT face="Calibri" size="3"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P style="margin: 0in 0in 0pt;"&gt;&lt;SPAN style="color: rgb(31, 73, 125);"&gt;&lt;FONT face="Calibri" size="3"&gt;One obvious solution would be to write temporary reduction sums to indexes above the current global size (of course allocating necessary amount of space first) and adjust offsets for each iteration of reduction.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 03 Jun 2015 15:21:38 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025552#M3460</guid>
      <dc:creator>Robert_I_Intel</dc:creator>
      <dc:date>2015-06-03T15:21:38Z</dc:date>
    </item>
    <item>
      <title>Robert, the explanation from</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025553#M3461</link>
      <description>&lt;P&gt;Robert, the explanation from Yuri makes sense. The GPU always serialize that. I thought that the same would be true for the CPU.&lt;/P&gt;

&lt;P&gt;The deal that I am confused why the attached code always seems to work in any condition.It works in CPU's and GPU's...&lt;/P&gt;

&lt;P&gt;I have coded below a maxredux code&lt;/P&gt;

&lt;P&gt;where, I am trying to find out the max and argmax of the array under study. Notice, that I am doing things in place (destroy original data)&lt;/P&gt;

&lt;P&gt;because, I am dealing with video data (I am a video signal processing guy).&lt;/P&gt;

&lt;P&gt;__kernel void reduction_vector(global float* data, global uint *index, local float* partial_max, local uint* partial_index)&lt;BR /&gt;
	{&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; int greatere_than;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; int lid = get_local_id(0);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; int lid1;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; int gid = get_global_id(0);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; int grid = get_group_id(0);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; int group_size = get_local_size(0);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; int global_size = get_global_size(0);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; partial_max[lid] = data[gid];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; partial_index[lid] = index[gid];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; barrier(CLK_LOCAL_MEM_FENCE);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp; for (int i = group_size &amp;gt;&amp;gt;1; i &amp;gt; 0; i &amp;gt;&amp;gt;= 1) {&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (lid &amp;lt; i) {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; lid1 = lid + i;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; greatere_than = isgreaterequal(partial_max[lid],partial_max[lid1]);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; partial_max[lid] = select(partial_max[lid1], partial_max[lid], greatere_than);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; partial_index[lid] = select(partial_index[lid1], partial_index[lid], greatere_than);&amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Synchronize all work-items so we know all writes to partial's have ocurred&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; barrier(CLK_LOCAL_MEM_FENCE);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; // Write to nth position in global output array n=work_group_id&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; if(lid == 0) {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; data[grid] = partial_max[0];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; index[grid] = partial_index[0];&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;I cannot get this code to fail ! &lt;/EM&gt;&lt;/STRONG&gt;According, to Yuri this should fail. Anyway, because of performance I may decide to this with AVX.&lt;/P&gt;

&lt;P&gt;Sometimes, OpenCL becomes really deceiving. I have attached the project... Thank you so much for your help... Sorry to bother...&lt;/P&gt;

&lt;P&gt;Diego&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 03 Jun 2015 17:12:41 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025553#M3461</guid>
      <dc:creator>Diego_G_</dc:creator>
      <dc:date>2015-06-03T17:12:41Z</dc:date>
    </item>
    <item>
      <title>I would like to thanks Robert</title>
      <link>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025554#M3462</link>
      <description>&lt;P&gt;I would like to thanks Robert &amp;amp; Yuri. My reduction code for argmax and max fails for the CPU (Earlier post). I did a gigantic loop of iterations.&lt;/P&gt;

&lt;P&gt;It sometimes fail. I did follow Yuri comments for the race condition. My solution is to serialize the CPU code in the following way:&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;__kernel&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; reduction_cpu_vector(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;global&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;float8&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;* data, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;global&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;uint8&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; *index, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;local&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;float8&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;* partial_max, &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;local&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;uint8&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;* partial_index)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int8&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; greatere_than;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; lid = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_local_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; lid1;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; gid = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_global_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; grid = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_group_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; group_size = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_local_size&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; global_size = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;get_global_size&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(0);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;partial_max[lid] = data[gid];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;partial_index[lid] = index[gid];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;barrier&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(CLK_LOCAL_MEM_FENCE);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;if&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; (lid == 0)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;{ &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;for&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; (&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt; i = 0; i &amp;lt; group_size; i++) {&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;lid1 = lid + i;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;greatere_than = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;isgreaterequal&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(partial_max[lid],partial_max[lid1]);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;partial_max[lid] = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(partial_max[lid1], partial_max[lid], greatere_than);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;partial_index[lid] = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;&lt;FONT color="#0000ff" face="Lucida Console" size="1"&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;(partial_index[lid1], partial_index[lid], greatere_than); &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;&lt;FONT color="#008000" face="Lucida Console" size="1"&gt;// Write to nth position in global output array n=work_group_id&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;data[grid] = partial_max[0];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;index[grid] = partial_index[0];&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;&lt;FONT face="Lucida Console" size="1"&gt;&lt;FONT face="Lucida Console" size="1"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;

&lt;P&gt;I am using one work-item to perform a max operation within a work-group. I do take advantage of the SIMD side of the story. This works as&lt;/P&gt;

&lt;P&gt;AVX code. It is faster than scalar code. It seems&amp;nbsp;that this is the right way to do it&amp;nbsp;for CPU's....&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;Diego&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 05 Jun 2015 19:21:26 GMT</pubDate>
      <guid>https://community.intel.com/t5/OpenCL-for-CPU/Problems-with-reduction-done-in-CPU/m-p/1025554#M3462</guid>
      <dc:creator>Diego_G_</dc:creator>
      <dc:date>2015-06-05T19:21:26Z</dc:date>
    </item>
  </channel>
</rss>

