OpenCL 内核参数

jul*_*g93 4 kernel opencl

我是 OpenCL 的新手。我想在内核中传递一个 int 类型参数来执行操作,但我不知道如何执行此操作。我只使用过向量和矩阵,但我从未转移过属性。

如果我有下面的代码示例:

typedef struct{
  int fila;
  int columna;
  int value; 
}Matrix;

int main(){

  Matrix matrix;
  matrix.row = 56;
  matrix.column = 64;
  matrix.value = 0;
  float A[matrix.fila][matrix.columna];
}
Run Code Online (Sandbox Code Playgroud)

在内核中:

__kernel void matrix(__global int vue) {
     value = value + 10; //it is only an example
}
Run Code Online (Sandbox Code Playgroud)

我可以在内核中执行上述“matrix.valor”(值 + 10)的操作吗?还是仅用于向量和矩阵运算?我需要 cl_mem 还是不需要?我目前对此迷失了方向。

Dit*_*ter 5

__global从内核参数中删除。然后,在您的 C/C++ 代码中,有一个类型变量cl_int(在 cl.h 中声明)并将其设置为您想要传递到内核的值。在入队内核(与之前clEnqueueNDRangeKernel)调用clSetKernelArg与内核的参数,参数索引(0)的sizeof(cl_int),和您的变量(例如地址,clSetKernelArg(myKernel, 0, sizeof(cl_int), &myVariable)

是 clSetKernelArg 的文档。此外,搜索几乎任何 OpenCL示例代码