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.
我是 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.