2012-02-03 2 views
1

printf 함수 (cl_intel_printf 확장명)를 호출하면 동일한 변수가 double (8 바이트 정렬 됨) 유형으로 여러 번 인쇄된다는 사실이 나타났습니다. 그 중 하나는 정확하고 다른 하나는 가짜입니다 (4 바이트를 읽음). c/C++에서와 같이 정렬 된 데이터 유형이 포인터로 (또는 c++의 참조로) 값으로 전달되어서는 안된다는 의미입니까?정렬 된 데이터 유형을 항상 포인터로 전달해야합니까?

(더 일반적으로, 모든 함수 호출은 인라인되는 OpenCL을 위해? 어디 선가 읽은 규칙을 caling 기능은 무엇인가하지만, 그 OpenCL in Action 말한다. 그게 구현 정의?)

+0

(나는 atm .. 답을 제공 할 수 없기 때문에 주석 달기입니다.) printf는 일반적으로 double에 문제가있을 수 있다고 생각합니다. float 또는 int/int64 유형과 비슷한 동작을 보았습니까? float64는 일반적으로 확장 기능으로 제공되므로 내 생각에 사용하고있는 printf는 double에 관한 버그가있을 수 있습니다. 동일한 8 바이트 정렬 값이 일관되게 인쇄되지 않는 것은 이상합니다. 확장자 'cl_khr_byte_addressable_store'도 염두에 두되, 정렬되지 않은 int 값과 관련이 있습니다. – mfa

+0

코드 샘플을 제공해 주시겠습니까? – vocaro

+0

고마워, @vocaro, 나는 결국 그것을 재현 할 수 없었다. anwer의 설명. 아직도 나에게 알려지지 않은 전화 조약. – eudoxos

답변

0

문제가 %g을 지정하여 발생 된 printf의 double 인수는 %lg 대신에. %g으로 일부 값이 올바르게 인쇄되지 않았습니다. (컴파일러는 printf-syntax 검사기를 가지고 있지 않습니다.)