2011-04-06 4 views
1

printf 확장명이 활성화 된 ATI 카드에서 OpenCL을 사용합니다. 나는 변수를 출력하는 함수를 작성했습니다 :함수에 char * 인수가 전달 된 ATI OpenCL printf 확장 문제

void printVar(constant char* name, float var) 
{ 
    printf("%s: %f\r\n", name, var); 
} 

일반 C로 컴파일 할 때 예상대로이 코드는 작동하지만, 내가

printVar("foo", 0.123); 

와 오픈 CL에서 호출하면 그 결과는 항상 어떤 무작위 char 다음에 "foo : 0.123"대신 0.123이옵니다. 필자는 컴파일러가 char * 문자열을 인식하는 데 문제가 있다고 생각합니다. 즉, 함수를 작동시킬 수 있도록 해결 방법이나 수정 사항이 있습니까?

+0

이 동작도 발생합니다. 특히 커널이 내 CPU (AMD APP SDK 2.3 포함)에서 실행되지만 내 HD 5870에서는 실행되지 않는다면 예상대로 작동합니다. GPU에서 printf의 버그 또는 문서화되지 않은 제한 사항이라고 생각합니다. – Quantumboredom

+0

완성을 위해 : 나는 AMD APP SDK 2.4 개발자 릴리스 노트를 읽었으며 printf는 현재 인쇄 문자열을 지원하지 않는다고 명시하고 있습니다. – Quantumboredom

답변

0

내 의견에서 언급했듯이 동일한 동작이 발생하지만 사용 사례에 대한 간단한 해결 방법을 제안 할 수 있습니다. 문자열이 컴파일 타임에 알려졌을 때 정의 문을 대신 사용할 수 있습니다.

#define PRINTVAR(N,X) (printf(N ": %f\r\n", X)) 
+0

완벽하게 작동합니다. 고마워. –