我该如何在OpenCL中将数组传递给函数?我在代码行时收到了错误信息“..argument of type "_global float *" is incompatible with parameter of type "float *"”。
float FindIndexFromArray(float myArray[], float Key)
{
// simple looping to find the index
for (int i=0;i<sizeof(myArray);i++)
if (myArray[i]==Key)
return i;
}
kernel void ProcessArray(
global read_only float* myArray,
global read_only float* Key,
global write_only float* c )
{
int index = get_global_id(0);
c[index] = FindIndexFromArray(myArray, Key); // How do I pass myArray parameter?
}
我的编辑后的源代码:
float FindIndexFromArray(__global read_only float* myArray[], __global read_only float* Key)
{
// simple looping to find the index
for (int i=0;i<sizeof(myArray);i++)
if (myArray[i]==Key)
return i;
}
kernel void ProcessArray(
__global read_only float* myArray,
__global read_only float* Key,
__global write_only float* c )
{
int index = get_global_id(0);
c[index] = FindIndexFromArray(myArray, Key); // How do I pass myArray parameter?
}
if (myArray[i]==Key)
。我认为我已经将myArray和Key声明为__global类型。我该如何解决这个问题? - Ina Ira[]
,因为它会改变类型。关于sizeof(myArray),它不会给出你malloc的myArray大小。相反,将malloc的大小传递给您的内核,然后传递给设备函数。 - ardiyu07[]
,现在编辑后的源代码产生了我在第一条评论中提到的错误消息。 - Ina Iraint
,那么就把float
改成int
。其次,你必须像我说的那样对sizeof(myArray)
做一些处理。第三,这一行(myArray[i]==Key)
是不正确的,因为你正在将一个float值与指向float的指针进行比较。它应该是(myArray[i]==Key[i])
或(myArray[i]==*Key)
.. - ardiyu07