我是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还是没有必要?我现在迷失了。
答案 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。