2012-02-03 1 views
1

printf関数(cl_intel_printfの拡張子)を呼び出すと、同じ値のdouble(8バイト整列)の変数が複数回出力されていることに気付きました。それらのうちの1つは正しいものであり、他の1つは偽である(4バイト離れている)。 c/C++のように、整列されたデータ型は値によって渡されるのではなく、ポインタ(またはc++の参照)によってのみ渡されるべきであることを意味しますか?整列したデータ型を常にポインタとして渡す必要がありますか?

(より一般的には、OpenCLのための規則をcaling機能は何ですか?私はすべての関数呼び出しがインライン化されていることをどこかで読んますが、それ以外OpenCL in Action話す。実装が定義されていることですか?)

+0

(私は答えをATmできないのでコメントしています)printfは一般的に倍精度に問題があるかもしれません。 floatまたはint/int64型の同様の動作を見たことがありますか? float64は通常は拡張機能として利用できますので、使用しているprintfが倍精度に関するバグを持っている可能性があります。同じ8バイトの位置合わせされた値が一貫して印刷されないことは奇妙です。拡張子'cl_khr_byte_addressable_store 'も気になりますが、これは整列していないint値と関係しています。 – mfa

+0

コードサンプルを提供できますか? – vocaro

+0

ありがとう、@ vocaro、私は最後にそれを再現することができませんでした。 anwerの説明。まだ私に知られていない通話規約。 – eudoxos

答えて

0

問題が%gを指定することによって引き起こされましたprintfの二重引数の代わりに%lgの代わりに。 %gでは、一部の値が正しく印刷されませんでした。 (コンパイラはprintf-syntax checkerを持っていないようです。)

関連する問題