1
我有一个100个元素的数组,我想要做的就是将这100个元素复制到另一个数组的每个第n个元素中。OpenCL - 在数组的每n个元素中插入值
假设n为3
新的阵列将有[VAL1 0 0 0值2 0 0 VAL3 0 ...]后的值复制到每个第n个元素。现在在opencl中,我尝试创建一个指向当前索引的指针,并且我只是每次将n添加到该值。但是,目前的指数总是保持相同的价值。以下是我的代码。对于CURRENTINDEX部分
__kernel void ddc(__global float *inputArray, __global float *outputArray, __const int interpolateFactor, __global int *currentIndex){
int i = get_global_id(0);
outputArray[currentIndex[0]] = inputArray[i];
currentIndex[0] = currentIndex[0] + (interpolateFactor - 1);
printf("index %i \n", currentIndex[0]);
}
主机代码:
int *index;
index = (int*)malloc(2*sizeof(int));
index[0] = 0;
cl_mem currentIndex;
currentIndex = clCreateBuffer(
context,
CL_MEM_WRITE_ONLY,
2 * sizeof(int),
NULL,
&status);
status = clEnqueueWriteBuffer(
cmdQueue,
currentIndex,
CL_FALSE,
0,
2 * sizeof(int),
index,
0,
NULL,
NULL);
printf("Index enqueueWriteBuffer status: %i \n", status);
status |= clSetKernelArg(
kernel,
4,
sizeof(cl_mem),
¤tIndex);
printf("Kernel Arg currentIndex Factor status: %i \n", status);
如果你想知道为什么我使用数组有两个元素,那是因为我不知道如何只引用一个变量。我只是以输入和输出数组工作的方式实现它。当我运行的3的interpolateFactor内核,CURRENTINDEX总是打印2.
那样容易。再次感谢,不敢相信我没有尝试过这种方式。另外,你说得对3,我只是为了这个问题删除了内核的其他不必要的参数,并且错过了编辑。 –