私はCUDAカーネルを作成しています。整数除算と定数を使って私の頭を傷つけてしまいます。
私は以下の何が起こるかを説明しましょう:定数の整数分け
#define X 8
#define Y 4
#define K X/Y
...code....
int var = 8;
...code....
printf("K = %d, var = %d, var/K = %d\n", K, var, var/K);
私はどこかのループで終了条件としてVAR/Kを使用しています、と私はそのVARを疑うだろう/ Kは4の値を与えるだろうが、それが与えます代わりに1の値を指定してカーネルを破壊します。私はの#defineからint型のグローバル定数にKを変更すると
K = 2, var = 8, var/K = 1
:ここではprint文の出力がある
__device__ const int K=X/Y;
問題が消える、除算結果は、4を与えます私のカーネルは正しく機能します。私はKをintにキャストしようとしましたが(これは必要ではありません)、それは何も変わりません。
定数の分割にいくつかの制限があるのか、どこかに基本的な誤解があるのだろうかと思います。
プリプロセッサはテキストの置き換えに過ぎないので、あなたの定義は '8/8/var/K'だがなぜそれが '1'になるのだろう? – deamentiaemundi
これはCUDAとはまったく関係がなく、プリプロセッサ独特のものです... – CygnusX1
divisionnの代わりに乗算 –