Hi Pol,<div><br></div><div>  The Open Source community has been a great for me regarding collaboration and support.  For me, understanding the nature of OpenCL came from previous work done with CUDA.  It helped me to review free online videos of academic lectures (iTunesU - GPU computing) and articles pertaining to the device architecture (optimization) since this understanding help me organize a plan to implement an algorithm for a specific platform. </div>
<div><br></div><div>  Here is a 32 bit version of the <a href="http://sobel.cl">sobel.cl</a> that should run fine on the GTS 240 (that has also been committed in the repository in place of the old &#39;double&#39; version): </div>
<div><br></div><div><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="1038.35">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px}
span.s1 {text-decoration: underline}
span.Apple-tab-span {white-space:pre}
</style>


<p class="p1"><br></p>
<p class="p1">__kernel void <span class="s1">sobel</span>( __global float* input,</p>
<p class="p1"><span class="Apple-tab-span">        </span>__global float* output,</p>
<p class="p1">     <span class="s1">int</span> width,</p>
<p class="p1">     <span class="s1">int</span> height )</p>
<p class="p1">{  </p>
<p class="p1">    <span class="s1">int</span> x = get_global_id(0);</p>
<p class="p1">    <span class="s1">int</span> y = get_global_id(1);</p>
<p class="p1">    <span class="s1">int</span> offset = y * width + x;</p>
<p class="p2">    </p>
<p class="p1">    float p0, p1, p2, p3, p5, p6, p7, p8 = 0;</p>
<p class="p2">    </p>
<p class="p2">    </p>
<p class="p1"><span class="Apple-tab-span">        </span>if( x &lt; 1 || y &lt; 1 || x &gt; width - 2 || y &gt; height - 2 )</p>
<p class="p1"><span class="Apple-tab-span">        </span>{</p>
<p class="p1"><span class="Apple-tab-span">        </span>  output[offset] = 0; </p>
<p class="p1"><span class="Apple-tab-span">        </span>}</p>
<p class="p1"><span class="Apple-tab-span">        </span>else</p>
<p class="p1"><span class="Apple-tab-span">        </span>{</p>
<p class="p1"><span class="Apple-tab-span">        </span>    p0 = input[offset - width - 1] ;</p>
<p class="p1"><span class="Apple-tab-span">        </span>    p1 = input[offset - width] ;</p>
<p class="p1"><span class="Apple-tab-span">        </span>    p2 = input[offset - width + 1] ;</p>
<p class="p1"><span class="Apple-tab-span">        </span>    p3 = input[offset - 1] ;</p>
<p class="p1"><span class="Apple-tab-span">        </span>    p5 = input[offset + 1] ;</p>
<p class="p1"><span class="Apple-tab-span">        </span>    p6 = input[offset + width - 1] ;</p>
<p class="p1"><span class="Apple-tab-span">        </span>    p7 = input[offset + width] ;</p>
<p class="p1"><span class="Apple-tab-span">        </span>    p8 = input[offset + width + 1] ;</p>
<p class="p2"><span class="Apple-tab-span">        </span></p>
<p class="p1"><span class="Apple-tab-span">        </span>    float sum1 = p0 + 2*p1 + p2 - p6 - 2*p7 - p8;  //GY</p>
<p class="p1"><span class="Apple-tab-span">        </span>    float sum2 = p0 + 2*p3 + p6 - p2 - 2*p5 - p8;  //GX</p>
<p class="p2"><span class="Apple-tab-span">        </span>   </p>
<p class="p1"><span class="Apple-tab-span">        </span>    output[offset] = <span class="s1">sqrt</span>(  sum1*sum1 + sum2*sum2 );</p>
<p class="p1"><span class="Apple-tab-span">        </span>}</p>
<p class="p1">} </p><p class="p1"><br></p><p class="p1">For your last question, you can write OpenCL directly from Java if that is easier for you.  Here is an example from a unit test written by Michael Bien:</p><p class="p1">
<br></p><p class="p1"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="1038.35">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4d6ecd}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #777777}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #a10067}
p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #309473}
p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #5100ff}
span.s1 {text-decoration: underline}
span.s2 {color: #8baecc}
span.s3 {color: #a10067}
span.s4 {color: #000000}
span.s5 {color: #2700ce}
span.s6 {color: #5100ff}
span.s7 {color: #309473}
</style>


</p><p class="p1"><br></p>
<p class="p2">/**</p>
<p class="p2"> * This test was authored by <span class="s1">Michael</span> <span class="s1">Bien</span> to help identify a platform specific bug</p>
<p class="p2"> * identified on OSX (specifically 10.6)</p>
<p class="p2"> * <span class="s2">@author</span> <span class="s1">Michael</span> <span class="s1">Bien</span></p>
<p class="p2"> *</p>
<p class="p2"> */</p>
<p class="p3"><span class="s3">public</span> <span class="s3">class</span> ProgramTest {</p>
<p class="p1"><br></p>
<p class="p4"><span class="s4">    </span>@BeforeClass</p>
<p class="p5"><span class="s4">    </span>public<span class="s4"> </span>synchronized<span class="s4"> </span>static<span class="s4"> </span>void<span class="s4"> setUpClass() </span>throws<span class="s4"> Exception {</span></p>

<p class="p3">        <span class="s5">out</span>.println(<span class="s6">&quot;OS: &quot;</span> + System.getProperty(<span class="s6">&quot;<a href="http://os.name">os.name</a>&quot;</span>));</p>
<p class="p3">        <span class="s5">out</span>.println(<span class="s6">&quot;ARCH: &quot;</span> + System.getProperty(<span class="s6">&quot;os.arch&quot;</span>));</p>
<p class="p3">        <span class="s5">out</span>.println(<span class="s6">&quot;VM: &quot;</span> + System.getProperty(<span class="s6">&quot;<a href="http://java.vm.name">java.vm.name</a>&quot;</span>));</p>
<p class="p3">        <span class="s5">out</span>.println(<span class="s6">&quot;lib path: &quot;</span> + System.getProperty(<span class="s6">&quot;java.library.path&quot;</span>));</p>
<p class="p3">    }</p>
<p class="p1">    // NOTE THE OPENCL PROGRAM SOURCE HAS BEEN ADDED INSIDE THE JAVA CLASS DECLARATION.</p>
<p class="p5"><span class="s4">    </span>private<span class="s4"> </span>final<span class="s4"> </span>static<span class="s4"> String </span><span class="s5">programSource</span><span class="s4"> =</span><span class="s6">&quot;&quot;</span></p>

<p class="p6">//             + &quot; #<span class="s1">pragma</span> OPENCL EXTENSION cl_khr_fp64: enable   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;   __kernel void sobel( __global float* input, __global float* output, int width,  int height ) {     \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;       int x = get_global_id(0);   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;       int y = get_global_id(1);   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;       int offset = y * width + x;   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;                                                               \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;         float p0, p1, p2, p3, p5, p6, p7, p8 = 0;            \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;                                                               \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;                                                               \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;              if( x &lt; 1 || y &lt; 1 || x &gt; width - 2 || y &gt; height - 2 )   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;              {   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;                 output[offset] = 0;   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;              }   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;              else   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;              {   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;                  p0 = input[offset - width - 1] ;   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;                  p1 = input[offset - width] ;   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;                  p2 = input[offset - width + 1] ;   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;                  p3 = input[offset - 1] ;   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;                  p5 = input[offset + 1] ;   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;                  p6 = input[offset + width - 1] ;   \n&quot;<span class="s4"> </span></p>
<p class="p7"><span class="s4">             +</span>&quot;                  p7 = input[offset + width] ;   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;                  p8 = input[offset + width + 1] ;   \n&quot;<span class="s4"> </span></p>
<p class="p3">             +<span class="s6">&quot;   \n&quot;</span></p>
<p class="p7"><span class="s4">             +</span>&quot;                  float sum1 = p0 + 2*p1 + p2 - p6 - 2*p7 - p8;  //GY   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;                  float sum2 = p0 + 2*p3 + p6 - p2 - 2*p5 - p8;  //GX   \n&quot;</p>
<p class="p3">             +<span class="s6">&quot;   \n&quot;</span></p>
<p class="p7"><span class="s4">             +</span>&quot;                  output[offset] = sqrt(  sum1*sum1 + sum2*sum2 );   \n&quot;</p>
<p class="p7"><span class="s4">             +</span>&quot;              }   \n&quot;</p>
<p class="p3">             +<span class="s6">&quot;      }  &quot;</span>; </p>
<p class="p1"><br></p>
<p class="p4"><span class="s4">    </span>@Test</p>
<p class="p3">    <span class="s3">public</span> <span class="s3">synchronized</span> <span class="s3">void</span> buildProgramTest() {</p>
<p class="p1">        </p>
<p class="p3">        CLContext context = CLContext.create();</p>
<p class="p1">        </p>
<p class="p3">        <span class="s3">try</span> {</p>
<p class="p3">            System.<span class="s5">out</span>.println(context);</p>
<p class="p3">            System.<span class="s5">out</span>.println(context.getPlatform().getVersion());</p>
<p class="p1"><br></p>
<p class="p3">            <span class="s3">long</span> contextID = context.<span class="s5">ID</span>;</p>
<p class="p3">            CL cl = CLPlatform.getLowLevelCLInterface();</p>
<p class="p1"><br></p>
<p class="p3">            PointerBuffer buffer = (PointerBuffer) PointerBuffer.allocateDirect(1).put(<span class="s5">programSource</span>.length());</p>
<p class="p3">            String[] srcArray = <span class="s3">new</span> String[]{<span class="s5">programSource</span>};</p>
<p class="p1"><br></p>
<p class="p3">            IntBuffer uploadStatus = Buffers.newDirectIntBuffer(1);</p>
<p class="p3">            <span class="s3">final</span> <span class="s3">long</span> programID = cl.clCreateProgramWithSource(contextID, 1, srcArray, buffer, uploadStatus);</p>
<p class="p3">            checkError(<span class="s6">&quot;on clCreateProgramWithSource&quot;</span>, uploadStatus.get(0));</p>
<p class="p1"><br></p>
<p class="p6"><span class="s4">            </span>// Build the program</p>
<p class="p3">            <span class="s3">int</span> buildStatus = cl.clBuildProgram(programID, 0, <span class="s3">null</span>, <span class="s3">null</span>, <span class="s3">null</span>);</p>
<p class="p1"><br></p>
<p class="p3">            System.<span class="s5">out</span>.println(<span class="s6">&quot;please ignore &quot;</span>+srcArray+ <span class="s6">&quot;&quot;</span> + buffer); <span class="s7">// please ignore, just a artificial reference lock </span></p>

<p class="p1">            </p>
<p class="p3">            System.<span class="s5">out</span>.println(<span class="s6">&quot;src: &quot;</span> + getProgramInfoString(cl, programID, CL.<span class="s5">CL_PROGRAM_SOURCE</span>));</p>
<p class="p1">            </p>
<p class="p3">            checkError(<span class="s6">&quot;on clBuildProgram&quot;</span>, buildStatus);</p>
<p class="p3">        } <span class="s3">finally</span> {</p>
<p class="p3">            context.release();</p>
<p class="p3">            System.<span class="s5">out</span>.println(<span class="s6">&quot;-&gt; success&quot;</span>);</p>
<p class="p3">        }</p>
<p class="p3">    }</p>
<p class="p1">    </p>
<p class="p3">    <span class="s3">private</span> <span class="s3">synchronized</span> String getProgramInfoString(CL cl, <span class="s3">long</span> program, <span class="s3">int</span> flag) {</p>
<p class="p1"><br></p>
<p class="p3">        PointerBuffer size = PointerBuffer.allocateDirect(1);</p>
<p class="p1"><br></p>
<p class="p3">        <span class="s3">int</span> ret = cl.clGetProgramInfo(program, flag, 0, <span class="s3">null</span>, size);</p>
<p class="p3">        checkError(<span class="s6">&quot;on clGetProgramInfo&quot;</span>, ret);</p>
<p class="p1"><br></p>
<p class="p3">        ByteBuffer buffer = Buffers.newDirectByteBuffer((<span class="s3">int</span>)size.get(0));</p>
<p class="p1"><br></p>
<p class="p3">        ret = cl.clGetProgramInfo(program, flag, buffer.capacity(), buffer, <span class="s3">null</span>);</p>
<p class="p3">        checkError(<span class="s6">&quot;on clGetProgramInfo&quot;</span>, ret);</p>
<p class="p1"><br></p>
<p class="p3">        <span class="s3">return</span> CLUtil.clString2JavaString(buffer, (<span class="s3">int</span>)size.get(0));</p>
<p class="p3">    }</p>
<p class="p1"><br></p>
<p class="p3">    <span class="s3">private</span> <span class="s3">synchronized</span> <span class="s3">void</span> checkError(String msg, <span class="s3">int</span> ret) {</p>
<p class="p3">        <span class="s3">if</span>(ret != CL.<span class="s5">CL_SUCCESS</span>)</p>
<p class="p3">            <span class="s3">throw</span> CLException.newException(ret, msg);</p>
<p class="p3">    }</p>
<p class="p3">}</p><p class="p3"><br></p><p class="p3">For me, I prefer to place the OpenCL code in separate files because it is easier for me to reuse them. When I first started using OpenCL from Java - I liked to see the OpenCL inside the Java class.  Over time reusability, use of runtime resource loading, and readability caused me to separate the CL code from the Java code.</p>
<p></p></div><meta charset="utf-8"><div><br></div><div>ImageJ plugins can also access GPU resources in other languages other than OpenCL.  CUDA is specific to NVidia&#39;s hardware and they have produced over 1B devices.  Depending on the users of your ImageJ plugin - one might be preferable CUDA over OpenCL.  For the <a href="http://imagejdev.org">imagejdev.org</a> group, the argument was distilled to performance vs hardware scope - and having more hardware coverage was a higher priority for our users.</div>
<div><br></div><div>Once a GPU implementation has been optimized for a specific hardware - porting between CUDA and OpenCL is relatively easy.  If your interested in working with CUDA through Java, an example of the bindings can be found at <a href="http://www.jcuda.de/ImageJ/ImageJHowTo.html">http://www.jcuda.de/ImageJ/ImageJHowTo.html</a>.  Further you may find discussions like this one interesting in understanding the tradeoffs: <a href="http://stackoverflow.com/questions/2633483/best-approach-for-gpgpu-cuda-opencl-in-java">http://stackoverflow.com/questions/2633483/best-approach-for-gpgpu-cuda-opencl-in-java</a>.</div>
<div><br></div><div>Let me know if you have any problems running the updated float version of sobel filter.</div><div><br></div><div>Sincerely,</div><div><br></div><div>Rick Lentz</div><div><br><div class="gmail_quote">On Fri, Jan 14, 2011 at 2:07 AM, Pol kennel <span dir="ltr">&lt;<a href="mailto:pol.kennel@gmail.com">pol.kennel@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi Rick,<br><br>You perfectly understood what I need, this will lead to apply &quot;heavy&quot; texture features extraction on large image aiming segmentation (the method will be published soon).<br>
I hope to have time in future to create a clear plugin for IJ that could be shared with users and contribuate to IJ community :) So thanks for your help, I&#39;ll try your last tutorial today, with hopes to get started with OpenCL quick... I have a last (at least) question : are we constrained to write gpu code in Cl ? could we use directly java codes ? <br>

<br>Best regards,<br>Pol<br><br><div class="gmail_quote">2011/1/13 Rick Lentz <span dir="ltr">&lt;<a href="mailto:rwlentz@wisc.edu" target="_blank">rwlentz@wisc.edu</a>&gt;</span><div><div></div><div class="h5"><br><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">

Hi Pol,<div><br></div><div>  I am thinking that the material under <a href="http://www.imagejdev.org/OpenCL" target="_blank">http://www.imagejdev.org/OpenCL</a> was not going to be as useful for you as a getting started tutorial.  I have removed the publication related material from our website.  I created a <a href="https://docs.google.com/document/d/12aiL7urwcve7Mi-YyuOtAVlTZ5P6outcay75YiQlqyQ/edit?hl=en" target="_blank">Getting Started with OpenCL in ImageJ Tutorial</a> with the goal of helping ImageJ users get started quickly with OpenCL. </div>


<div><br></div><div> Back to your issues, for the research publication I compiled the jogamp files - but for your application, I do not think you need to do this.  The compilation steps listed were specific to Ubuntu 9.10 and NVidia 3.1.  If I am understanding your ImageJ need correctly, I think you are looking to run a few Java examples that help you get into writing OpenCL plugins for ImageJ.  I hope the attached draft copy of the tutorial will help you get there quickly.</div>


<div><br></div><div> Please let me know if you any troubles with the tutorial - and have any feedback regarding the tutorial.</div><div><br></div><div>Best Regards,</div><div><br></div><div>Rick Lentz<div><div></div><div>

<br><div class="gmail_quote">
<br>Hi Pol,<div><br></div><div>  Can you do a fresh pull from our repository - You should not have to build these unless you really want to.</div><div><br></div><div>  You can download the needed components directly from:</div>



<div>  <a href="http://jogamp.org/deployment/webstart/" target="_blank">http://jogamp.org/deployment/webstart/</a><br><br></div><div>  I have also updated the ImageJ plugin demo source to include the most recent Jogamp OpenCL binaries and native libs.</div>



<div><br></div><div>Sincerely,</div><div><br><font color="#888888">Rick</font><div><div></div><div><br><div class="gmail_quote">On Thu, Jan 13, 2011 at 9:55 AM, Pol kennel <span dir="ltr">&lt;<a href="mailto:pol.kennel@gmail.com" target="_blank">pol.kennel@gmail.com</a>&gt;</span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">In fact my <b>jocl</b> building also crash during Junit tests, with error stacks like :<div>
<br><div><div><div>[junit] Testcase: createContextTest(com.jogamp.opencl.gl.CLGLTest):<span style="white-space:pre-wrap">        </span>Caused an ERROR</div>


<div>    [junit] test timed out after 5000 milliseconds</div><div>    [junit] java.lang.Exception: test timed out after 5000 milliseconds</div><div>    [junit] <span style="white-space:pre-wrap">        </span>at java.lang.Object.wait(Native Method)</div>




<div>    [junit] <span style="white-space:pre-wrap">        </span>at java.lang.Object.wait(Object.java:485)</div><div>    [junit] <span style="white-space:pre-wrap">        </span>at com.jogamp.opengl.impl.SharedResourceRunner.doAndWait(SharedResourceRunner.java:152)</div>




<div>    [junit] <span style="white-space:pre-wrap">        </span>at com.jogamp.opengl.impl.SharedResourceRunner.getOrCreateShared(SharedResourceRunner.java:100)</div><div>    [junit] <span style="white-space:pre-wrap">        </span>at com.jogamp.opengl.impl.x11.glx.X11GLXDrawableFactory.getOrCreateSharedContextImpl(X11GLXDrawableFactory.java:253)</div>




<div>    [junit] <span style="white-space:pre-wrap">        </span>at javax.media.opengl.GLDrawableFactory.getOrCreateSharedContext(GLDrawableFactory.java:275)</div><div>    [junit] <span style="white-space:pre-wrap">        </span>at javax.media.opengl.GLDrawableFactory.getIsSharedContextAvailable(GLDrawableFactory.java:250)</div>




<div>    [junit] <span style="white-space:pre-wrap">        </span>at javax.media.opengl.GLProfile.initProfilesForDeviceImpl(GLProfile.java:1251)</div><div>    [junit] <span style="white-space:pre-wrap">        </span>at javax.media.opengl.GLProfile.initProfilesForDevice(GLProfile.java:1224)</div>




<div>    [junit] <span style="white-space:pre-wrap">        </span>at javax.media.opengl.GLProfile.initProfilesForDefaultDevices(GLProfile.java:1192)</div><div>    [junit] <span style="white-space:pre-wrap">        </span>at javax.media.opengl.GLProfile.access$000(GLProfile.java:66)</div>




<div>    [junit] <span style="white-space:pre-wrap">        </span>at javax.media.opengl.GLProfile$1.run(GLProfile.java:112)</div><div>    [junit] <span style="white-space:pre-wrap">        </span>at java.security.AccessController.doPrivileged(Native Method)</div>




<div>    [junit] <span style="white-space:pre-wrap">        </span>at javax.media.opengl.GLProfile.initSingleton(GLProfile.java:110)</div><div>    [junit] <span style="white-space:pre-wrap">        </span>at com.jogamp.opencl.gl.CLGLTest.init(CLGLTest.java:70)</div>




<div>    [junit] <span style="white-space:pre-wrap">        </span>at com.jogamp.opencl.gl.CLGLTest.createContextTest(CLGLTest.java:102)</div><div><br></div><div>So there is another problem I don t identify...</div>
<div><br></div><div class="gmail_quote">2011/1/13 Pol kennel <span dir="ltr">&lt;<a href="mailto:pol.kennel@gmail.com" target="_blank">pol.kennel@gmail.com</a>&gt;</span><div><div></div><div><br><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">




Hi Rick,<div><br></div><div>Thank a lot for your detailed answers an to pay attention to my problems !</div><div><br></div><div>I finally resolved my problem with the OpenGL lib with your previous mail : a link was not set correctly to the libGL.so file. I now have the same output with <i>ldd /usr/lib/libGL.so </i>command. So I build correctly C and OpenCL project, demos work well.</div>





<div><br></div><div>I also build correctly <b>gluegen</b>, <b>jogl</b>, <b>jocl</b> and <b>jocl-demos</b> projects (note that lines &quot;git clone <a href="http://github.com/sgothel/gluegen.git" target="_blank">http://github.com/sgothel/gluegen.git</a> gluegen&quot; and &quot;git clone <a href="http://github.com/sgothel/jogl-demos.git" target="_blank">http://github.com/sgothel/jogl-demos.git</a> jogl-demos&quot; are missing on the <a href="http://www.imagejdev.org/setting-jocl-jogl-and-gluegen" target="_blank">http://www.imagejdev.org/setting-jocl-jogl-and-gluegen</a> page of your tutorial).</div>





<div><br></div><div>However, I stoped in building <b>joal</b> and <b>jogl-demos. </b>You probably omit to precise the building of the <b>joal </b>project (but it could be intended ?) ; when building <b>joal</b> with <b>ant</b> in the <b>/joal/make/</b> directory I get an error :</div>





<div>&quot;<i>/home/pol/joal/make/build.xml:369: taskdef class com.sun.gluegen.ant.GlueGenTask cannot be found</i></div><div><i> using the classloader AntClassLoader[/home/pol/gluegen/build/gluegen.jar:/home/pol/gluegen/build/antlr.jar:/home/pol/gluegen/make/lib/antlr.jar]</i>&quot;</div>





<div>(gluegen.jar and antlr.jar still in the right directory, is there classpath to set for gluegen ?). In the <b>joal</b> readme file, I found that OpenAL lib are need, so i downloaded  libopenal-dev/openal1 packets from synaptic, and follow instructions saying to copy gluegen.properties and joal.properties and jogl.properties into home directory but don&#39;t know how to set correctly properties into this files.</div>





<div><b>joal</b> building stills crash.</div><div><br></div><div>Regarding to <b>jogl-demos </b>when<b> </b>building with<b> ant </b>in <b>~/jogl-demos/make/</b>  i get 27 errors like :  </div>
<div>[javac] Compiling 169 source files to /home/pol/jogl-demos/build/classes</div><div>[javac] /home/pol/jogl-demos/src/demos/applets/GearsJOALApplet.java:11: package com.jogamp.openal.util does not exist</div><div>[javac] import com.jogamp.openal.util.ALut;&quot;</div>





<div>[...]</div><div>I suppose it s due to joal, OpenAL again....</div><div><br></div><div>(How) Did you install it ?</div><div><br></div><div><br></div><div>On the other side, i have update the decon project from svn.</div>





<div>When running <b>SobelFilterExample.java </b>i get :</div><div><br></div><div><div><i>Retrieving test image...  </i></div><div><i>Starting iteration... 0</i></div><div><i>Local work size dimensions are max array size of</i></div>





<div><i>unavailable functions: [clCreateEventFromGLsyncKHR, clIcdGetPlatformIDsKHR]</i></div><div><i>Discovered NVIDIA CUDA</i></div><div><i>com.jogamp.opencl.CLException$CLInvalidBinaryException: </i></div><div><i>CLDevice [id: 140626625730048 name: GeForce GTS 240 type: GPU profile: FULL_PROFILE] build log:</i></div>





<div><i>ptxas application ptx input, line 104; error   : Instruction &#39;cvt&#39; requires SM 1.3 or higher, or map_f64_to_f32 directive</i></div><div><i>ptxas application ptx input, line 105; error   : Instruction &#39;cvt&#39; requires SM 1.3 or higher, or map_f64_to_f32 directive</i></div>





<div><i>ptxas application ptx input, line 106; error   : Instruction &#39;mul&#39; requires SM 1.3 or higher, or map_f64_to_f32 directive</i></div><div><i>ptxas application ptx input, line 107; error   : Instruction &#39;mul&#39; requires SM 1.3 or higher, or map_f64_to_f32 directive</i></div>





<div><i>ptxas application ptx input, line 108; error   : Instruction &#39;add&#39; requires SM 1.3 or higher, or map_f64_to_f32 directive</i></div><div><i>ptxas application ptx input, line 109; error   : Instruction &#39;sqrt&#39; requires SM 1.3 or higher, or map_f64_to_f32 directive</i></div>





<div><i>ptxas application ptx input, line 110; error   : Instruction &#39;cvt&#39; requires SM 1.3 or higher, or map_f64_to_f32 directive</i></div><div><i>ptxas fatal   : Ptx assembly aborted due to errors</i></div><div>




<i>error   : Ptx compilation failed: gpu=&#39;sm_11&#39;, device code=&#39;cuModuleLoadDataEx_4&#39;</i></div>
<div><i>: Considering profile &#39;compute_11&#39; for gpu=&#39;sm_11&#39; in &#39;cuModuleLoadDataEx_4&#39;</i></div><div><i>: Retrieving binary for &#39;cuModuleLoadDataEx_4&#39;, for gpu=&#39;sm_11&#39;, usage mode=&#39;  &#39;</i></div>





<div><i>: Considering profile &#39;compute_11&#39; for gpu=&#39;sm_11&#39; in &#39;cuModuleLoadDataEx_4&#39;</i></div><div><i>: Control flags for &#39;cuModuleLoadDataEx_4&#39; disable search path</i></div><div><i>: Ptx binary found for &#39;cuModuleLoadDataEx_4&#39;, architecture=&#39;compute_11&#39;</i></div>





<div><i>: Ptx compilation for &#39;cuModuleLoadDataEx_4&#39;, for gpu=&#39;sm_11&#39;, ocg options=&#39;  &#39;</i></div><div><i>ptxas application ptx input, line 104; warning : Double is not supported. Demoting to float</i></div>





<div><i>error: CL_INVALID_BINARY (man page: <a href="http://www.khronos.org/opencl/sdk/1.1/docs/man/xhtml/errors.html" target="_blank">http://www.khronos.org/opencl/sdk/1.1/docs/man/xhtml/errors.html</a>)</i></div><div><i><span style="white-space:pre-wrap">        </span>at com.jogamp.opencl.CLException.newException(CLException.java:49)</i></div>





<div><i><span style="white-space:pre-wrap">        </span>at com.jogamp.opencl.CLProgram.build(CLProgram.java:335)</i></div><div><i><span style="white-space:pre-wrap">        </span>at com.jogamp.opencl.CLProgram.build(CLProgram.java:174)</i></div>





<div><i><span style="white-space:pre-wrap">        </span>at publication.SobelFilterExample.&lt;init&gt;(SobelFilterExample.java:66)</i></div><div><i><span style="white-space:pre-wrap">        </span>at publication.SobelFilterExample.runTest(SobelFilterExample.java:204)</i></div>





<div><i><span style="white-space:pre-wrap">        </span>at publication.SobelFilterExample.main(SobelFilterExample.java:155)</i></div></div><div><br></div><div>So I suppose it s due to miss installation of JOAL.</div>
<div><br></div><div><br></div><div>I&#39;ll be so thankful if you can get me out of this deadlock.... I can already see the light far away :)</div><div><br></div><div>Best regards,</div><div><p class="MsoNormal"><br></p>




<p class="MsoNormal">
Pol</p><p class="MsoNormal"><br></p></div><div><br></div><div>PS : I&#39;m often connected on google chat so if you prefer answer me online please let me know you gmail address.</div><div>
<br></div><div><br></div><br><div class="gmail_quote">2011/1/12 Rick Lentz <span dir="ltr">&lt;<a href="mailto:rwlentz@wisc.edu" target="_blank">rwlentz@wisc.edu</a>&gt;</span><div><div></div><div><br><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">





Hi Pol,<div><br></div><div>  Regarding your first question it is likely that the linker is missing a reference to OpenGL.  My instructions were for a prior major release of Ubuntu as well as a prior minor release of NVidia&#39;s CUDA SDK.  I have updated the setup instructions to reflect the current versions as well as tested against 64bit Mac and Linux OSs.</div>






<div><br></div><div>  With regard to your specific problem, many of NVidia&#39;s examples include use of OpenGL.  NVidia&#39;s documentation indicates that libgl.so is referenced via static link to appear to be located in /usr/lib/libgl.so (per <a href="http://developer.download.nvidia.com/compute/cuda/3_2_prod/drivers/docs/README_Linux.txt" target="_blank">http://developer.download.nvidia.com/compute/cuda/3_2_prod/drivers/docs/README_Linux.txt</a> under Chapter 5, Listing of Installed Components, 4th bullet).  Chapter 5 of NVidia&#39;s documentation goes on to describe the linking process that happens when installing the developer drivers.  Perhaps this linking did not happen when you installed the NVidia development drivers for Linux.  Did you get an error during installation of the developer drivers reporting something in this regard?  Chapter 5 concludes on how to check a Linux dynamic library using the command line tool ldd.  In this case, ldd /usr/lib/libGL.so  <div>







<br></div><div>Here is the output I get when running ldd /usr/lib/libGL.so</div><div><br></div><div>ldd /usr/lib/libGL.so</div><div><span style="white-space:pre-wrap">        </span>linux-vdso.so.1 =&gt;  (0x00007ffff33e6000)</div>







<div><span style="white-space:pre-wrap">        </span>libnvidia-tls.so.260.19.14 =&gt; /usr/lib/tls/libnvidia-tls.so.260.19.14 (0x00007fc82b46b000)</div><div><span style="white-space:pre-wrap">        </span>libnvidia-glcore.so.260.19.14 =&gt; /usr/lib/libnvidia-glcore.so.260.19.14 (0x00007fc82987f000)</div>







<div><span style="white-space:pre-wrap">        </span>libX11.so.6 =&gt; /usr/lib/libX11.so.6 (0x00007fc829549000)</div><div><span style="white-space:pre-wrap">        </span>libXext.so.6 =&gt; /usr/lib/libXext.so.6 (0x00007fc829337000)</div>







<div><span style="white-space:pre-wrap">        </span>libc.so.6 =&gt; /lib/libc.so.6 (0x00007fc828f93000)</div><div><span style="white-space:pre-wrap">        </span>libdl.so.2 =&gt; /lib/libdl.so.2 (0x00007fc828d8f000)</div>
<div><span style="white-space:pre-wrap">        </span>libm.so.6 =&gt; /lib/libm.so.6 (0x00007fc828b0c000)</div><div><span style="white-space:pre-wrap">        </span>libxcb.so.1 =&gt; /usr/lib/libxcb.so.1 (0x00007fc8288ef000)</div>

<div><span style="white-space:pre-wrap">        </span>/lib64/ld-linux-x86-64.so.2 (0x00007fc82b974000)</div><div><span style="white-space:pre-wrap">        </span>libXau.so.6 =&gt; /usr/lib/libXau.so.6 (0x00007fc8286eb000)</div>
<div><span style="white-space:pre-wrap">        </span>libXdmcp.so.6 =&gt; /usr/lib/libXdmcp.so.6 (0x00007fc8284e5000)</div><div><br></div><div><br></div><div>If the libGL.so file is present and linked property, you can double check for inclusion of libGL.so path by ensuring its path in your bash profile under the variable LD_LIBRARY_PATH.  NVidia asks for the installer to add these additions in the Linux install documents.  Here is the line in my .bashrc file that allows the linker to find libGL.so (specifically the &quot;:/usr/lib&quot; portion of this line):</div>







<div><br>export LD_LIBRARY_PATH=&quot;/usr/lib:/usr/local/cuda/lib64:/usr/local/cuda/lib:/usr/lib32:/usr/local/lib&quot;</div><div><br></div><div>I also had issues compiling the most recent version of NVidia&#39;s C samples.  I reflected a work around in the updated web documents (see the bottom of: <a href="http://www.imagejdev.org/setting-host-machine" target="_blank">http://www.imagejdev.org/setting-host-machine</a> ).</div>






<div><br></div><div>Please let me know if you have any more questions or difficulties with the ImageJ OpenCL plugin examples.</div><div><br></div><div>Sincerely,</div><div><br><font color="#888888">Rick Lentz</font></div>





<div><div></div><div><div><br>
</div><br><div class="gmail_quote">On Tue, Jan 11, 2011 at 4:20 AM, Pol kennel <span dir="ltr">&lt;<a href="mailto:pol.kennel@gmail.com" target="_blank">pol.kennel@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">Hello,<div><br></div><div>I am a PhD student working on image segmentation by texture analysis with an application on remote sensing images (Montpellier, France). So i have to process very large images (e.g. 15000*8000). </div>








<div>All methods I developed are formed as plugin under ImageJ API that I really like, but not yet applicable on this sort of image.</div><div>Recently, I tough to use finally my graphic card (Nvidia GTS240) which I think will help me a lot in my process. So after several search on the web, I found <a href="http://imagejdev.org/plugins/opencl-plugin" target="_blank">this</a> (OpenCL plugin you wrote) great ! it&#39;s precisely what i need.</div>








<div><br></div><div>So I decided to follow your tutorial to setup the environment but met some problems... :</div><div><ol><li>When launching makefile in &quot;~/NVIDIA_GPU_Computing_SDK/C/ &quot; and &quot;~/NVIDIA_GPU_Computing_SDK/OpenCL&quot; I had following error &quot;/usr/bin/ld: cannot find -lGL&quot;. Plus, I dont have the same demo files, maybe because of version ? (cudatoolkit_3.2.16_linux_64, gpucomputingsdk_3.2.16 and devdriver_3.2_linux_64_260.19.26 on Ubuntu 10.10). On the other side demos I have work perfectly (ooclDCT8x8, oclHistogram,...)</li>








<li><b>Main problem is that the repository you indicate to get the example project (<a href="http://www.loci.wisc.edu/svn/decon" target="_blank">http://www.loci.wisc.edu/svn/decon</a>) doesn&#39;t work... </b>&quot;<a href="http://dev.loci.wisc.edu/svn/software/branches/maven/projects/opencl-decon" target="_blank">http://dev.loci.wisc.edu/svn/software/branches/maven/projects/opencl-decon</a>&quot; repository works well. Is is the same ?</li>








</ol><div><br></div><div>Thanks a lot if you find time to answer me (and sorry for my english).</div><div><br></div><div>And thanks you for work you are doing on ImageJ.</div><div><br></div><div>Best regards,</div><div><b><br>








</b></div></div><div>-- <br>Pol Kennel<br><br>
</div>
</blockquote></div><br>

</div></div></div>
</blockquote></div></div></div><br><br clear="all"><br>-- <br><font color="#888888">Pol Kennel<br><br>
</font></blockquote></div></div></div><br><br clear="all"><br>-- <br>Pol Kennel<br><br>
</div></div></div>
</blockquote></div><br><br>
</div></div></div>
</div><br><br clear="all"><br></div></div></div></blockquote></div></div></div><br>-- <br><font color="#888888">Pol Kennel<br><br>
</font></blockquote></div><br><br>
</div>