나는 다음과 같은 매개 변수를 받아들이는 커널이 있습니다OpenCl 커널에서 인덱스를 오프셋하는 방법은 무엇입니까?
1) 글로벌 ID는 지역 ID 16 다음
내가 사용하고있는 커널 아니다하지만 나는 그것을 사용하고 있습니다)
이 1040입니다 내가 구현하고 싶은 것을 보여줍니다. 기본적으로 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];
}
내가 값 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를 확장하는 것은, 옵션이 아니다. 그러므로 : 이것을 달성하기 위해 어쨌든 있습니까?
편집 : 구현하고 싶은 예제를 추가했습니다. 현재로서는 이렇게 작동하지 않습니다. 이게 합법적인가? 내가 가진
배열 요소가 0 인 경우 충돌하지 않아야합니다. 그렇지 않으면 충돌이 발생하지 않고 버퍼의 범위를 벗어납니다. –
@huseyintugrulbuyukisik 제 질문을 편집했습니다. 아마도 더 명확합니다. 내가 게시 한 두 번째 커널은 ...이게 합법적이라면 내 호스트 코드에 문제가 있습니다 – user1816546