-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
What steps will reproduce the problem?
1. Create a kernel as an anonymous inner class with a call to a static method
in the containing class
2.
3.
What is the expected output? What do you see instead?
I think this should be detected and and exception thrown rather than generate
bad OpenCL
Please use labels and text to provide additional information.
This is a modification of the squares sample code:
public class Main{
public static int fooBar(int i) {
return i;
}
public static void main(String[] _args) {
final int size = 64;
/** Input float array for which square values need to be computed. */
final float[] values = new float[size];
/** Initialize input array. */
for (int i = 0; i < size; i++) {
values[i] = i;
}
/** Output array which will be populated with square values of corresponding input array elements. */
final float[] squares = new float[size];
/** Aparapi Kernel which computes squares of input array elements and populates them in corresponding elements of
* output array.
**/
Kernel kernel = new Kernel(){
@Override public void run() {
int gid = getGlobalId();
squares[gid] = values[gid] + fooBar(gid);
}
};
// Execute Kernel.
kernel.execute(Range.create(size));
// Report target execution mode: GPU or JTP (Java Thread Pool).
System.out.println("Execution mode=" + kernel.getExecutionMode());
// Display computed square values.
for (int i = 0; i < size; i++) {
System.out.printf("%6.0f %8.0f\n", values[i], squares[i]);
}
// Dispose Kernel resources.
kernel.dispose();
}
}
Results in generating call to non-existant fooBar() with compile failure and
fallback to JTP...
Oct 29, 2012 9:32:18 AM com.amd.aparapi.KernelRunner execute
INFO: typedef struct This_s{
__global float *val$squares;
__global float *val$values;
int passid;
}This;
int get_pass_id(This *this){
return this->passid;
}
__kernel void run(
__global float *val$squares,
__global float *val$values,
int passid
){
This thisStruct;
This* this=&thisStruct;
this->val$squares = val$squares;
this->val$values = val$values;
this->passid = passid;
{
int gid = get_global_id(0);
this->val$squares[gid] = this->val$values[gid] + (float)fooBar(gid);
return;
}
}
clBuildProgram failed
************************************************
"/tmp/OCLDFiZNg.cl", line 21: error: function "fooBar" declared implicitly
this->val$squares[gid] = this->val$values[gid] + (float)fooBar(gid);
^
1 error detected in the compilation of "/tmp/OCLDFiZNg.cl".
Internal error: clc compiler invocation failed.
************************************************
Oct 29, 2012 9:32:18 AM com.amd.aparapi.KernelRunner warnFallBackAndExecute
WARNING: Reverting to Java Thread Pool (JTP) for class
com.amd.aparapi.sample.testStatic.Main$1: OpenCL compile failed
Oct 29, 2012 9:32:18 AM com.amd.aparapi.KernelRunner executeJava
FINE: executeJava: range = global:64 local:(derived)64
null:JTP
Execution mode=JTP
0 0
1 2
2 4
...
Original issue reported on code.google.com by ecasp...@gmail.com on 29 Oct 2012 at 3:32
Reactions are currently unavailable