OpenCL 内核参数

OpenCL kernel parameters

我是 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];
}

在内核中:

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

我可以在内核中做上面"matrix.valor"(值+10)的那个操作吗??或者它只适用于向量和矩阵运算? 我需要 cl_mem 还是不需要?我目前迷失了这个。

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

Here is the documentation for clSetKernelArg. Also, search for just about any piece of OpenCL sample code.