私は100要素の配列を持っています。これらの100要素を別の配列のn番目の要素にコピーします。OpenCL - 配列のn要素ごとに値を挿入する
はさんは言ってみましょうn個の値は、すべてのn番目の要素にコピーされた後に3
新しい配列が[... val1とval2の0 0 0 0 0 0 val3は]を持っているでしょうました。今openclでは、現在のインデックスを指すポインタを作成しようとしましたが、単にこの値にnを追加するだけです。ただし、現在のインデックスは常に同じ値を保持します。以下は私のコードです。
__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]);
}
currentIndex部分のホストコード:
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);
私は2つの要素を持つ配列を使用していますなぜあなたは不思議に思っているならば、私は1つだけを参照する方法がわからなかったので、それはです変数。私は入力と出力の配列を同じように実装しました。私は3のinterpolateFactorでカーネルを実行すると、私はあなたが何をしたいのか、右理解している場合、currentIndexは常に2
そのように簡単です。もう一度ありがとう、私はそれを試していないと信じることはできません。また、あなたは3について正しいです、私は質問のためにカーネルのために他の不要な引数を削除していて、その編集を逃していました。 –