저는 100 개의 요소로 된 배열을 가지고 있는데,이 100 개의 요소를 다른 배열의 n 번째 요소에 복사하고 싶습니다. OpenCL - 배열의 모든 n 요소에 값을 입력하십시오.
새로운 배열 값이 매 n 번째 요소에 복사 하였다 VAL1을 val2 0 0 0 0 0 0 ... val3] 이후의 것라고하자 N 3이었다. 이제 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은 항상 당신이 currentIndex에 사용하는 다음 인덱스를 저장되고 싶지 옳은 일을 이해 그래서 경우 2.
마찬가지로 쉽습니다. 다시 한 번 감사드립니다. 그렇게 시도하지 않았다는 것을 믿을 수 없습니다. 또한, 여러분은 3에 대해 옳았습니다. 저는 질문을 위해서 커널에 대한 다른 불필요한 인수들을 삭제하고 있었고 그 편집을 놓쳤습니다. –