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

Ina*_*Ira 7 arrays opencl

如何将数组传递给OpenCL中的函数?我得到错误"..argument of type"_global float*"与行c [n] = FindIndexFromArray(a,3)中类型为"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?
}
Run Code Online (Sandbox Code Playgroud)

我编辑的源代码:

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?
}
Run Code Online (Sandbox Code Playgroud)

ard*_*u07 3

正如错误消息中所述。你的myArrayandKey带有类型globaland read-only,因此在将其传递给另一个函数时必须声明相同的类型。简而言之你FindIndexFromArray应该是

FindIndexFromArray(global read_only float* myArray, global read_only float* Key)
Run Code Online (Sandbox Code Playgroud)

  • 好吧..你的代码在这里太混乱了..首先,如果你希望你的函数返回`int`,那么从`float`更改为`int`。其次,你必须像我说的那样对“sizeof(myArray)”做一些事情。第三,行 `(myArray[i]==Key)` 无法完成,因为您正在将浮点值与浮点指针进行比较。它应该是 `(myArray[i]==Key[i])` 或 `(myArray[i]==*Key)`.. (2认同)