Должен ли я всегда передавать выровненные типы данных как указатели? - PullRequest
1 голос
/ 03 февраля 2012

Я заметил, что при вызове функции printf (с расширением cl_intel_printf) одна и та же переменная типа double (с 8-байтовым выравниванием), напечатанная несколько раз, дает разные значения;один из них правильный, другой фальшивый (считывание 4 байта).Означает ли это, что, как и в c / c ++, выровненные типы данных должны передаваться не по значению, а только по указателям (или по ссылке в c++)?

(В более общем случае, каково соглашение о вызове функциидля OpenCL? Я где-то читал, что все вызовы функций являются встроенными, но OpenCL in Action говорит иначе. Это определяется реализацией?)

1 Ответ

0 голосов
/ 07 февраля 2012

Проблема была вызвана указанием %g вместо %lg для двойных аргументов для printf.При %g некоторые значения были напечатаны неправильно.(Компилятор не имеет средства проверки синтаксиса printf.)

...