在OpenCL中将数组传递给函数参数

8
我该如何在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?
}
1个回答

3

正如错误信息所述,你的myArrayKey具有globalread-only类型,因此在将它们传递给另一个函数时,必须声明相同的类型。简而言之,你的FindIndexFromArray应该是

FindIndexFromArray(global read_only float* myArray, global read_only float* Key)

我仍然收到几个警告,但这是错误信息:“操作数类型不兼容(“float”和“__global float *”)”在这一行中if (myArray[i]==Key)。我认为我已经将myArray和Key声明为__global类型。我该如何解决这个问题? - Ina Ira
在myArray中消除[],因为它会改变类型。关于sizeof(myArray),它不会给出你malloc的myArray大小。相反,将malloc的大小传递给您的内核,然后传递给设备函数。 - ardiyu07
1
抱歉我忘记删除 [],现在编辑后的源代码产生了我在第一条评论中提到的错误消息。 - Ina Ira
2
好的..你的代码有些混乱..首先,如果你想让函数返回int,那么就把float改成int。其次,你必须像我说的那样对sizeof(myArray)做一些处理。第三,这一行(myArray[i]==Key)是不正确的,因为你正在将一个float值与指向float的指针进行比较。它应该是(myArray[i]==Key[i])(myArray[i]==*Key).. - ardiyu07
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/12589/discussion-between-ina-ira-and-ardiyu07 - Ina Ira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接