我有一个内核,它接受以下参数:
1)全局ID为1040
2)本地ID为16
下面不是我使用的内核,但我用它来说明我想要实现的东西;A和B的数组输入基本上是1040*10长。
__kernel void vector_add(__global const int *A, __global const int *B, __global int *C, int Offset, int constant) {
// Index of the current element to be processed
int i = get_global_id(0);
// Do the operation
C[i + Offset*constant] = A[i + Offset*constant] + B[i + Offset*constant];
}虽然constant是一个常量,但我希望Offset是一个排序的“数组”,包含值0,1,...,9。我已经尝试过将这些值作为数组传递,但我认为不可能以这种方式使用数组来进行偏移(程序崩溃)。下面是我想要写的示例:
__kernel void vector_add(__global const int *A, __global const int *B, __global int *C, __constant const int *Offset, int constant) {
// Index of the current element to be processed
int i = get_global_id(0);
for (int k = 0; k < 10; k++) {
// Do the operation
C[i + Offset[k]*constant] = A[i + Offset[k]*constant] + B[i + Offset[k]*constant];
}
}请注意:扩展全局ID不是一个选项,因为在我的内核中它需要保持不变。因此:有没有办法实现这一点?
编辑:我添加了一个我想要实现的示例。目前,它不是这样工作的。这合法吗?
发布于 2017-02-23 10:00:07
我得到的错误信息是
无法在命名地址空间中分配
参数
因为constant是保留字。
我尝试通过在变量名的末尾添加'1‘来更改变量名,如下所示:
__kernel void vector_add(__global int *A, __global int *B, __global int *C,
__constant int *Offset,__constant int * constant1) {
int i = get_global_id(0);
int constVar=constant1[0];
for (int k = 0; k < 10; k++) {
C[i + Offset[k]*constVar] = A[i + Offset[k]*constVar] + B[i + Offset[k]*constVar];
}
} 它适用于global=1040,ABC_size=1040*10,local=16,偏移量从0到9的数组和constant1=1040
https://stackoverflow.com/questions/42405253
复制相似问题