Closed eklavya closed 6 years ago
Class files from the example. classes.zip
Initially it didn't work at all with aparapi and failed with NPE, to fix that NPE and get the above mentioned log I had to change com.aparapi.internal.instruction.Instruction
which needs to have:
final Instruction j = i.getRootExpr().getPrevExpr();
final Instruction startInstruction = j == null ? i : j;
on lines 816-817
Generated OpenCL code in case of scala kernel:
typedef struct This_s{
__global float *result$1;
__global float *inA$1;
__global float *inB$1;
int passid;
}This;
int get_pass_id(This *this){
return this->passid;
}
__kernel void run(
__global float *result$1,
__global float *inA$1,
__global float *inB$1,
int passid
){
This thisStruct;
This* this=&thisStruct;
this->result$1 = result$1;
this->inA$1 = inA$1;
this->inB$1 = inB$1;
this->passid = passid;
{
{
i = get_global_id(0);
this->result$1[i] = (((this->inA$1[i] + this->inB$1[i]) / (this->inA$1[i] / this->inB$1[i])) * ((this->inA$1[i] - this->inB$1[i]) / (this->inA$1[i] * this->inB$1[i]))) - (((this->inB$1[i] - this->inA$1[i]) * (this->inB$1[i] + this->inA$1[i])) * ((this->inB$1[i] - this->inA$1[i]) / (this->inB$1[i] * this->inA$1[i])));
}
return;
}
}
In case of java kernel:
typedef struct This_s{
__global float *val$result;
__global float *val$inA;
__global float *val$inB;
int passid;
}This;
int get_pass_id(This *this){
return this->passid;
}
__kernel void run(
__global float *val$result,
__global float *val$inA,
__global float *val$inB,
int passid
){
This thisStruct;
This* this=&thisStruct;
this->val$result = val$result;
this->val$inA = val$inA;
this->val$inB = val$inB;
this->passid = passid;
{
int i_1 = get_global_id(0);
this->val$result[i_1] = (((this->val$inA[i_1] + this->val$inB[i_1]) / (this->val$inA[i_1] / this->val$inB[i_1])) * ((this->val$inA[i_1] - this->val$inB[i_1]) / (this->val$inA[i_1] * this->val$inB[i_1]))) - (((this->val$inB[i_1] - this->val$inA[i_1]) * (this->val$inB[i_1] + this->val$inA[i_1])) * ((this->val$inB[i_1] - this->val$inA[i_1]) / (this->val$inB[i_1] * this->val$inA[i_1])));
return;
}
}
Scala generated bytecode is not supported yet.
Example project: https://github.com/eklavya/OpenCLWB
https://github.com/eklavya/OpenCLWB/blob/master/src/main/scala/Main.scala#L37-L38 switches between scala and java kernels.
Code:
Log: