<?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 Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader in i.MX Processors</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383173#M55369</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi there,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;have you added the CORE_IMAGE_EXTRA_INSTALL += "imx-gpu-viv imx-gpu-viv-dev" in your local.conf ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cheers.&lt;/P&gt;&lt;P&gt;Andre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 09 Apr 2015 16:51:05 GMT</pubDate>
    <dc:creator>andre_silva</dc:creator>
    <dc:date>2015-04-09T16:51:05Z</dc:date>
    <item>
      <title>Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383171#M55367</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;since two weeks I'm trying to get OpenCL working on Sabre SDB Board. (&lt;A href="http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=RDIMX6SABREPLAT" title="http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=RDIMX6SABREPLAT"&gt;SABRE for Smart Devices Reference Design)&lt;/A&gt;&lt;/P&gt;&lt;P&gt;There is one PDF "White Paper | Get started with OpenCL on i.MX6"&amp;nbsp; (&lt;A href="https://www.google.de/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0CCQQFjAA&amp;amp;url=https%3A%2F%2Fcommunity.freescale.com%2Fservlet%2FJiveServlet%2FpreviewBody%2F100694-102-1-15669%2FWhite%2520Paper%2520on%2520get%2520started%2520with%2520OpenCL%2520on%2520iMX6.pdf&amp;amp;ei=4b8jVezqK5PxatPGgIAN&amp;amp;usg=AFQjCNGdY-t_9W7lK2qmmr1cqF4cQDIq7A&amp;amp;sig2=AmONcmQLHqbNTSw-nqvRHA" title="https://www.google.de/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0CCQQFjAA&amp;amp;url=https%3A%2F%2Fcommunity.freescale.com%2Fservlet%2FJiveServlet%2FpreviewBody%2F100694-102-1-15669%2FWhite%2520Paper%2520on%2520get%2520started%2520with%2520OpenCL%2520on%2520iMX6.pdf&amp;amp;ei=4b8jVezqK5PxatPGgIAN&amp;amp;usg=AFQjCNGdY-t_9W7lK2qmmr1cqF4cQDIq7A&amp;amp;sig2=AmONcmQLHqbNTSw-nqvRHA"&gt;https://www.google.de/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0CCQQFjAA&amp;amp;url=https%3A%2F%2Fcommunity.…&lt;/A&gt;)&lt;/P&gt;&lt;P&gt;I tried to get through it: The board support package referenced there seems to be not existent any more and some dependencies are brocken. I took latest BSP instead.&lt;/P&gt;&lt;P&gt;I tried installing ltib on Ubuntu 14.04: After two days and many issues finally get it compiling. Failed at the very end and image building because some kernel files which are supposed to be on freescale server were not existent any more. The ltib script was not able to get them from other server either: they are just not there.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have installed the Vivante SDK on Windows with emulator and can compile and run opencl example there.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a running Yocto on Sabre Board, kernel 3.10.53 and I have another "chroot" environment with gcc,cmake and other build stuff. I can compile and run arbitrary code there as long as it doesn't use OpenCL!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As soon as I include libOpenCL.so it seems to have many dependencies which are not clear: libVIVANTE.so, libGAL.so, and some wayland stuff.&lt;/P&gt;&lt;P&gt;After another couple of days I got the OpenCL "hello world" from white paper compiled&amp;nbsp; (after fixing 5-6 issues there) but if I start it I get error message:&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI&gt;libgc_wayland_protocol.so.0 undefined symbol wl_registry_interface&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My question is rather simple: Is there anybody who could provide complete SDCARD image for the mentioned board with working OpenCL?. A filesystem for chroot using kernel 3.10.53 would also be a great help.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Just for reference here are some md5sum hashcodes of headers and libs I've tried:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ab7cd3a124af4381f3a66d8ac3bacbb0&amp;nbsp; ./media/mmcblk3p1/usr/include/CL/cl.hpp&lt;/P&gt;&lt;P&gt;801cd16dda62704b450865d4e752a9c5&amp;nbsp; ./media/mmcblk1p1/usr/include/CL_orig/cl.hpp&lt;/P&gt;&lt;P&gt;7625c9f38bbca0e97dbf7c272d53c219 ./media/mmcblk1p1/home/data/gpu_viv/opt/fsl/include/CL/cl.hpp&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;698841f89f5e50f942eb34e70b2de929&amp;nbsp; ./media/mmcblk3p1/usr/lib/libOpenCL.so&lt;/P&gt;&lt;P&gt;1fe9a4875d55bf041a0a382234cb77ea ./media/mmcblk1p1/home/data/gpu_viv/opt/fsl/lib/libOpenCL.so&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 07 Apr 2015 11:58:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383171#M55367</guid>
      <dc:creator>alexanderkramer</dc:creator>
      <dc:date>2015-04-07T11:58:06Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383172#M55368</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/AndreSilva"&gt;AndreSilva&lt;/A&gt; do you know if there is any sdcard image with this implementation available?.&lt;/P&gt;&lt;P&gt;thanks and regards&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Apr 2015 14:57:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383172#M55368</guid>
      <dc:creator>Bio_TICFSL</dc:creator>
      <dc:date>2015-04-09T14:57:08Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383173#M55369</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi there,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;have you added the CORE_IMAGE_EXTRA_INSTALL += "imx-gpu-viv imx-gpu-viv-dev" in your local.conf ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cheers.&lt;/P&gt;&lt;P&gt;Andre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Apr 2015 16:51:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383173#M55369</guid>
      <dc:creator>andre_silva</dc:creator>
      <dc:date>2015-04-09T16:51:05Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383174#M55370</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for response. Where the local.conf file is supposed to be? It's not in my ltib folder and is not on my yocto sd card.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Apr 2015 11:48:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383174#M55370</guid>
      <dc:creator>alexanderkramer</dc:creator>
      <dc:date>2015-04-10T11:48:44Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383175#M55371</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;check out this how to in the imxcv blog, you will find the answer:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A class="loading" href="http://imxcv.blogspot.com.br/2014/08/onboard-camera-v4l-wrapper-with-yocto.html" style="font-size: 10pt; line-height: 1.5em;" title="http://imxcv.blogspot.com.br/2014/08/onboard-camera-v4l-wrapper-with-yocto.html"&gt;http://imxcv.blogspot.com.br/2014/08/onboard-camera-v4l-wrapper-with-yocto.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;regards,&lt;/P&gt;&lt;P&gt;Andre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Apr 2015 03:14:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383175#M55371</guid>
      <dc:creator>andre_silva</dc:creator>
      <dc:date>2015-04-15T03:14:50Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383176#M55372</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for Your help. I'm new to kernel compiling so I didn't know what local.conf is for. &lt;/P&gt;&lt;P&gt;At the moment I'm&amp;nbsp; trying another way: After booting I do chroot to the ubuntu oneric image provided by freescale. There I do the compilation of example OpenCL programm directly on the board. &lt;/P&gt;&lt;P&gt;But if I start the application it always crashes with segfault if program tries to enqueue write or read buffers for the opencl shader. I tested it with two different example "hello world" programms and both do this seg fault. &lt;/P&gt;&lt;P&gt;One of the this works perfectly on Windows with VIVANTE SDK and emulator, so the problem is not in the code. I suppose some GPU drivers are missing. Is there a way to check whether GPU drivers are installed? &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Apr 2015 07:22:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383176#M55372</guid>
      <dc:creator>alexanderkramer</dc:creator>
      <dc:date>2015-04-16T07:22:57Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383177#M55373</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The gpu driver should be already installed on kernel (built-in module), if not you can just modprobe galcore, other thing is to check if the CL libraries are in place. so you can check that by ls /usr/lib/*CL.so&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;regards&lt;/P&gt;&lt;P&gt;Andre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Apr 2015 18:32:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383177#M55373</guid>
      <dc:creator>andre_silva</dc:creator>
      <dc:date>2015-04-16T18:32:36Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383178#M55374</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I've got CL working now. I've found another linux system on Sabre board which does not have dependencies to wayland and don't need wayland libraries. This works fine if used with chroot after booting kernel from yocto. The Ubuntu builds or Yocto builds seems to have strange dependencies of OpenCL to wayland and OpenCL crashes (at least on my board).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;By the way I found some strange behaviour of "hello world" example given in the OpenCL white paper. The 2-dimensional buffer is allocated as array of pointers (one for each row) where each then points to column data. The OpenCL kernel seems to expect linear array and computes linear index from x,y. How this works together? In my tests every attempt to change OpenCL kernel ended with crash until I've changed the buffer to linear array.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 Apr 2015 11:29:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383178#M55374</guid>
      <dc:creator>alexanderkramer</dc:creator>
      <dc:date>2015-04-21T11:29:25Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383179#M55375</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;the OpenCL kernel "converts" the two array input in a linear array. It is the easiest way to deal with the data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cheers,&lt;/P&gt;&lt;P&gt;Andre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Apr 2015 01:26:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383179#M55375</guid>
      <dc:creator>andre_silva</dc:creator>
      <dc:date>2015-04-29T01:26:28Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383180#M55376</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;My OpenCl test application works now but I'm really disappointed with the OpenCL performance. I even suppose that GPU is not involved in OpenCL execution. I have low CPU usage if I have trivial OpenCL kernel. But if put more code inside OpenCL kernel my CPU usage is going higher and higher.&lt;/P&gt;&lt;P&gt;Executing the same kernel on CPU (by compiling it like normal C code) gives even better performance with lower CPU usage. This doesn't make sense to me. &lt;/P&gt;&lt;P&gt;Also there is a strange behaviour with OpenCL kernel complexity. Even if I have one thread for OpenCL my CPU can achive 100% utilization of all 4 cores. &lt;/P&gt;&lt;P&gt;For me it's indicator that OpenCL performs kernel execution on CPU.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is there a way to check GPU load? Or clearly identify that GPU is involved in OpenCL kernel execution?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 May 2015 09:46:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383180#M55376</guid>
      <dc:creator>alexanderkramer</dc:creator>
      <dc:date>2015-05-19T09:46:55Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383181#M55377</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Alexander,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;can you past your kernel source ? I want to take a look.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thanks,&lt;/P&gt;&lt;P&gt;Andre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 May 2015 14:36:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383181#M55377</guid>
      <dc:creator>andre_silva</dc:creator>
      <dc:date>2015-05-19T14:36:58Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383182#M55378</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Actually, if possible, share your entire application, I want to take a look and test myself.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cheers,&lt;/P&gt;&lt;P&gt;Andr&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 May 2015 14:38:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383182#M55378</guid>
      <dc:creator>andre_silva</dc:creator>
      <dc:date>2015-05-19T14:38:03Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383183#M55379</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;__kernel void finddots_2 ( &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; int tileSizeBits,&lt;/P&gt;&lt;P&gt; int imgWidth,&lt;/P&gt;&lt;P&gt; int imgHeight,&lt;/P&gt;&lt;P&gt; int outTileSize,&lt;/P&gt;&lt;P&gt; int bg_limit,&lt;/P&gt;&lt;P&gt; int d,&lt;/P&gt;&lt;P&gt;__global uchar *input,&lt;/P&gt;&lt;P&gt;__global ushort *output&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (get_work_dim()!=2) return;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Tile ID &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint tileID = (uint)(get_global_size(0)*get_global_id(1)+get_global_id(0));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#ifdef ECL&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("tileID %d\n",tileID);&lt;/P&gt;&lt;P&gt;#endif&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __global ushort * tileOutPtr=output+(tileID*outTileSize);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint rowPitch=imgWidth;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // we start with 1 because we will store the length in the [0] component&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint valuesStored=1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint limitValuesStored=(outTileSize-sizeof(ushort))/2/sizeof(ushort)-1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int x_begin=max((int)(get_global_id(0)&amp;lt;&amp;lt;tileSizeBits),(int)d);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int y_begin=max((int)(get_global_id(1)&amp;lt;&amp;lt;tileSizeBits),(int)d);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int x_end=min((int)((get_global_id(0)+1)&amp;lt;&amp;lt;tileSizeBits),(int)(imgWidth-d)); &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int y_end=min((int)((get_global_id(1)+1)&amp;lt;&amp;lt;tileSizeBits),(int)(imgHeight-d));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //printf("Range %d-%d,%d-%d\n",x_begin,x_end,y_begin,y_end);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint tileMask=(1&amp;lt;&amp;lt;tileSizeBits)-1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int y=y_begin;y&amp;lt;y_end;y++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int x=x_begin;x&amp;lt;x_end;x++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uchar xy0 = input[rowPitch*y+x];&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool candSearchOk=true;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (xy0&amp;gt;bg_limit)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int yi=y-d;(yi&amp;lt;=y+d) &amp;amp;&amp;amp; candSearchOk;yi++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int xi=x-d;xi&amp;lt;=x+d;xi++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uchar xyi=input[rowPitch*yi+xi];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (xyi&amp;gt;xy0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; candSearchOk=false;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (xyi==xy0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // depends where it is&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!(&amp;nbsp; // same pixel&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((yi==y) &amp;amp;&amp;amp; (xi==x)) ||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // its the direct bottom neighbor or&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ( (yi-y==1) &amp;amp;&amp;amp; (xi==x) ) || &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // one of the three right neighbors&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ( ( (yi-y==-1) || (yi-y==0) || (yi-y==1) ) &amp;amp;&amp;amp; ( xi-x==1) )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; candSearchOk=false;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (candSearchOk)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // pixel found-&amp;gt;refine and store&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // useThisDot=true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // todo: refinement&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int subPixelX=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int subPixelY=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #ifdef ECL&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("&amp;nbsp; candidate at %d,%d \n",x,y);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tileOutPtr[valuesStored] = (ushort)(((x&amp;amp;tileMask)&amp;lt;&amp;lt;((sizeof(ushort)*8)-tileSizeBits))+subPixelX);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tileOutPtr[valuesStored+1] = (ushort)(((y&amp;amp;tileMask)&amp;lt;&amp;lt;((sizeof(ushort)*8)-tileSizeBits))+subPixelY);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; valuesStored+=2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (valuesStored&amp;gt;=limitValuesStored)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x=x_end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y=y_end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // store bytes stored by this work item&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tileOutPtr[0] = (ushort)(valuesStored*sizeof(ushort));&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 May 2015 15:08:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383183#M55379</guid>
      <dc:creator>alexanderkramer</dc:creator>
      <dc:date>2015-05-19T15:08:19Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383184#M55380</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This code search local maxima in a grey image. Each kernel (work item) process a tile of size 64x64 pixels.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Parameters are set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;tileSizeBits=6&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;int tileSize=(1&amp;lt;&amp;lt;tileSizeBits); //64 &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;imgWidth=1280&lt;/P&gt;&lt;P&gt;imgHeight=1024&lt;/P&gt;&lt;P&gt;outTileSize=512&lt;/P&gt;&lt;P&gt;bg_limit=5&lt;/P&gt;&lt;P&gt;d=3&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// intermediate params&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; global[0] = imgWidth/tileSize;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; global[1] = imgHeight/tileSize;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; totalTilesNum=(int)(global[0]*global[1]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; outBufferSize = totalTilesNum*outTileSize*sizeof(short);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;input=pointer to memory of size 1280x1024 bytes (grey image)&lt;/P&gt;&lt;P&gt;output=pointer to memory of size outBufferSize&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 May 2015 15:15:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383184#M55380</guid>
      <dc:creator>alexanderkramer</dc:creator>
      <dc:date>2015-05-19T15:15:00Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383185#M55381</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I suppose my kernel above is not optimal for OpenCL and GPU execution.&lt;/P&gt;&lt;P&gt;I've tested another kernel (see below) and it looks like GPU is involved.&lt;/P&gt;&lt;P&gt;The CPU load is 50% (2 cores out of 4 are full) with OpenCL computation and 100% (all 4 cores are full) with CPU computation.&lt;/P&gt;&lt;P&gt;Power consumption is also different: 19V,320mA with GPU, 250mA with CPU.&lt;/P&gt;&lt;P&gt;Performance depends on number of work items. Sometimes CPU is faster, sometimes GPU.&lt;/P&gt;&lt;P&gt;To run kernel below in GPU 256 times I need about 15 seconds. If running it on CPU then 26 seconds.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;///----------------------------------------&lt;/P&gt;&lt;P&gt;__kernel void finddots ( int tileSizeBits,&lt;/P&gt;&lt;P&gt; int imgWidth,&lt;/P&gt;&lt;P&gt; int imgHeight,&lt;/P&gt;&lt;P&gt; int outTileSize,&lt;/P&gt;&lt;P&gt; int bg_limit,&lt;/P&gt;&lt;P&gt; int d,&lt;/P&gt;&lt;P&gt;__global uchar *input,&lt;/P&gt;&lt;P&gt;__global ushort *output&lt;/P&gt;&lt;P&gt;)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint tileID = (uint)(get_global_size(0)*get_global_id(1)+get_global_id(0));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float4 dd1, dd2, dd3, dd4, dd5; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd2.x=(float)tileID;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd2.y=(float)tileID;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd2.z=(float)tileID;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd2.w=(float)tileID;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd1=dd2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd3=dd2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd4=dd2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd5=dd2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt;10000000;i++) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd3 += dd2*dd5; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd2 += dd1*dd4; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd4 += dd3*dd1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd1 += dd3*dd2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd3 += dd2*dd5; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd2 += dd1*dd4; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd4 += dd3*dd1; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dd1 += dd3*dd2; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((__global float*)output)[tileID]=(dd1.x);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 May 2015 15:37:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383185#M55381</guid>
      <dc:creator>alexanderkramer</dc:creator>
      <dc:date>2015-05-19T15:37:23Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383186#M55382</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Unfortunatelly I can't share the complete source code.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 May 2015 15:39:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383186#M55382</guid>
      <dc:creator>alexanderkramer</dc:creator>
      <dc:date>2015-05-19T15:39:08Z</dc:date>
    </item>
    <item>
      <title>Re: Need Help with SD card image with working gcc, OpenCL and example of using OpenCL shader</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383187#M55383</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Alexander, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As you said the kernel is not optimized for GPU, since it generates a lot of overhead, so this is why you are facing a poor performance. Actually with my experience you need to get rid of all your for or while loops, you need to unroll the loops and take advantage of the paralelism. The limitations in our OpenCL profile is related to atomics, kernel size (number of instructions) and the copy when reading the data back from gpu memory to a buffer. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Andre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 May 2015 18:01:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Need-Help-with-SD-card-image-with-working-gcc-OpenCL-and-example/m-p/383187#M55383</guid>
      <dc:creator>andre_silva</dc:creator>
      <dc:date>2015-05-19T18:01:20Z</dc:date>
    </item>
  </channel>
</rss>

