2009-10-09 4 views
2

나는 Snow Leopard에서 OpenCL 코드를 개발 중이며 OpenCL의 Just-In-Time 컴파일은 Clang/LLVM에 의해 수행된다는 것을 알고 있습니다. C 전 처리기가 전혀 사용되지 않습니까? 컴파일러로 사전 처리 정의를 설정하는 방법이 있습니까? 어떤 정의가 존재합니까?OpenCL 컴파일러 사전 처리 정의?

코드가 CPU 또는 GPU 용으로 컴파일되었는지 여부를 알고 싶습니다. 예를 들어 디버깅을 위해 printf 문을 사용할 수 있습니다.

답변

5

clBuildProgram API는 컴파일러 인수 (const char * options 매개 변수)를 사용합니다.

-D MYMACRO도 이해되므로, -D MYMACRO=value도 마찬가지이다.

미리 정의 된 매크로에 대해서는 전체 목록 (6.9 절)에 대한 OpenCL 사양을 참조하십시오. 비 완전한 목록 :

  • __FILE__
  • __LINE__
  • __OPENCL_VERSION__
1

또한 (C에서처럼) 정의를 정의하기 위해 OpenCL을 "처리기"를 사용할 수 있습니다 :

#define dot3(x1, y1, z1, x2, y2, z2) ((x1)*(x2) + (y1)*(y2) + (z1)*(z2)) 

(대괄호에주의하십시오. 변수의 표현식과 표현식이 올바르게 평가 됨)

이것은 응용 프로그램의 속도를 향상시키는 데 도움이됩니다.