Re: jocl.CLProgram.create() line 74
Posted by
Michael Bien on
Jan 14, 2011; 1:19pm
URL: https://forum.jogamp.org/jocl-CLProgram-create-line-74-tp2250272p2255397.html
Rick,
please run the attached test. I slightly modified the kernel to use
floats to make it portable across implementations. I did a few tests
on linux and windows with amd, intel and nv CL implementations and
it passed all the time.
You mentioned that its working on ubuntu, so its only reproducible
on your mac?
I have a few exams next week, I am not sure how much time i will be
able to spend for this bug the next few days..
regards,
michael
On 01/14/2011 04:41 AM, Rick Lentz @ imagejdev.org [via jogamp]
wrote:
Michael,
Thank you for your excellent work on JOCL and for your response
to my question. :-)
Here is the snippet that I tried:
long context = this.context.ID;
IntBuffer intBuffer = Buffers.newDirectIntBuffer(1);
CL cl = CLPlatform.getLowLevelCLInterface();
PointerBuffer pointBuffer =
(PointerBuffer)PointerBuffer.allocateDirect(1).put(
openCLCodeString.length() );
String[] srcArray = new String[] { openCLCodeString };
final long programLong = cl.clCreateProgramWithSource(
context, 1, srcArray, pointBuffer, intBuffer );
checkError("on clCreateProgramWithSource",
intBuffer.get(0) );
// Build the program
int ret = cl.clBuildProgram( programLong, 0, null, null,
null );
// Print out the point buffer and the srcArray variable
(as a String)
String outSourceString = "";
for(String sourceString : srcArray )
outSourceString += sourceString;
System.out.println( "Result value is " + ret + "
pointBuffer is " + pointBuffer + " the input OpenCL code is " +
outSourceString ); // please ignore, just a artificial reference
lock
checkError("on clBuildProgram", ret);
And the results are for the uncommented println() version is:
Starting iteration... 0
Result value is -11 pointBuffer is
PointerBuffer:AbstractBuffer[capacity 1, position 1, elementSize
8, ByteBuffer.capacity 8] the input OpenCL code is #pragma OPENCL
EXTENSION cl_khr_fp64: enable
__kernel void sobel( __global float* input,
__global float* output,
int width,
int height )
{
int x = get_global_id(0);
int y = get_global_id(1);
int offset = y * width + x;
float p0, p1, p2, p3, p5, p6, p7, p8 = 0;
if( x < 1 || y < 1 || x > width - 2 || y >
height - 2 )
{
output[offset] = 0;
}
else
{
p0 = input[offset - width - 1] ;
p1 = input[offset - width] ;
p2 = input[offset - width + 1] ;
p3 = input[offset - 1] ;
p5 = input[offset + 1] ;
p6 = input[offset + width - 1] ;
p7 = input[offset + width] ;
p8 = input[offset + width + 1] ;
double sum1 = p0 + 2*p1 + p2 - p6 - 2*p7 - p8; //GY
double sum2 = p0 + 2*p3 + p6 - p2 - 2*p5 - p8; //GX
output[offset] = sqrt( sum1*sum1 + sum2*sum2 );
}
}
The average OpenCL set up time is 0
The average OpenCL IO transfer time is 0
The average OpenCL execution time is 0
The average Java execution time is 0
com.jogamp.opencl.CLException$CLBuildProgramFailureException: on
clBuildProgram [error: CL_BUILD_PROGRAM_FAILURE]
at
com.jogamp.opencl.CLException.newException(CLException.java:78)
at
demos.SobelFilterExample.checkError(SobelFilterExample.java:62)
at
demos.SobelFilterExample.init(SobelFilterExample.java:96)
at
demos.SobelFilterExample.runTest(SobelFilterExample.java:275)
at
demos.SobelFilterExample.main(SobelFilterExample.java:228)
The result for the comment version is:
Starting iteration... 0
com.jogamp.opencl.CLException$CLBuildProgramFailureException: on
clBuildProgram [error: CL_BUILD_PROGRAM_FAILURE]
The average OpenCL set up time is 0
The average OpenCL IO transfer time is 0
The average OpenCL execution time is 0
The average Java execution time is 0
at
com.jogamp.opencl.CLException.newException(CLException.java:78)
at
demos.SobelFilterExample.checkError(SobelFilterExample.java:66)
at
demos.SobelFilterExample.init(SobelFilterExample.java:100)
at
demos.SobelFilterExample.runTest(SobelFilterExample.java:275)
at
demos.SobelFilterExample.main(SobelFilterExample.java:228)
I am stuck on what might be causing the compile error. Thank you
for sharing your insight.
Best regards,
Rick Lentz
--
http://michael-bien.com/