2017-08-23 121 views
2

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

如果我有低于该代码例如:

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还是没有必要?我目前失去了这一点。

回答

0

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

Here是clSetKernelArg的文档。此外,搜索几乎任何一块OpenCL sample code

+0

奥克斯,非常感谢你! – juliogg93