나는 나의 인덱싱 코드를 명확하게하기 위해 커널 함수 내에서 함수를 정의 할 :OpenCL에서 커널 함수 내에서 함수를 선언하는 방법은 무엇입니까?
kernel void do_something (const int some_offset,
const int other_offset,
global float* buffer)
{
int index(int x, int y)
{
return some_offset+other_offset*x+y;
}
float value = buffer[index(1,2)];
...
}
그렇지 않으면 내가 좋아하는 내 커널과 인덱스 이외의 인덱스 함수를 선언해야 할 것
float value = buffer[index(1,2,some_offset,other_offset)];
그것은 더 추악하게 만들 것입니다. 이것을 할 방법이 있습니까? 컴파일러에서 다음과 같이 오류 메시지를 표시합니다.
OpenCL Compile Error: clBuildProgram failed (CL_BUILD_PROGRAM_FAILURE).
Line 5: error: expected a ";"
동일한 작업을 수행하는 것이 가능한지 또는 다른 방법이 있습니까? 감사합니다.
C에는 어떤 종류의 폐쇄도 없습니다. 나는 OpenCL도 마찬가지라고 생각하지만, 원래 Apple의 것이므로 [블록] (http://en.wikipedia.org/wiki/Blocks_%28C_language_extension%29)을 사용할 수 있는지 확인하십시오. 이 경우,'some_offset'이 범위에 남아 있기 때문에 매크로를 사용할 수있는 것처럼 보입니다. –