OpenCL内核参数

时间:2017-08-23 07:58:15

标签: 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];
}

在内核中:

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

我可以在内核中执行“matrix.valor”(value + 10)以上的操作吗?或者它只适用于向量和矩阵运算? 我需要cl_mem还是没有必要?我现在迷失了。

1 个答案:

答案 0 :(得分:1)

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

Here是clSetKernelArg的文档。此外,搜索几乎所有OpenCL sample code