我在寫一個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,從而打破了我的內核。下面是print語句的輸出:
K = 2, var = 8, var/K = 1
當我使用#define改變K至int類型的全局常量:
__device__ const int K=X/Y;
問題消失,分裂結果給出4,和我的內核正常工作。我已經嘗試將K轉換爲int(這不應該是必須的),並且不會改變任何內容。
我想知道是否有一些限制分割常量或如果我有一個基本的誤解。
預處理器只是文本替換,所以你的定義給出了'8/8/4' var/K'但爲什麼會導致'1'? – deamentiaemundi
這真的與CUDA無關,只是預處理器的怪癖...... – CygnusX1
乘法而不是除法除 –