我想我發現一個問題時,使用有符號整數在CUDA PTX 128位有符號乘法。 這裏是我的示例代碼:Cuda簽名128位乘法錯誤
long long result_lo, result_hi;
asm(" mul.lo.s64 %0, 0, -1; \n\t" // 0 * -1 = 0
" mul.hi.s64 %1, 0, -1; \n\t"
: "=l"(result_lo), "=l"(result_hi));
這將產生的結果result_lo = 0x0, result_hi = 0x0
。然而,這產生了結果:result_lo = 0x0, result_hi = 0xFFFFFFFFFFFFFFFF
這實際上是值2^127 - (2^126 - 1)
如果我沒有弄錯,顯然不是零。
首先,我想確保我的理解是正確的,但更重要的是,有沒有辦法解決這個問題?
更新從Debug
mod更改爲Release
模式修復此問題,仍然想知道這是否是cuda中的錯誤?
更新2 報告這個錯誤給NVIDIA
二手CUDA工具包7.5與Visual Studio 2013年x64 Debug
,sm_52
,compute_52
。
這可能是在調試模式下的一個錯誤的'sm_52'。我可以在'sm_52'調試模式下重現它,但不能在'sm_35'或'sm_20'上重現。請注意,麥克斯韋設備不具有原生64位整數乘法運算;編譯器會產生32位操作數序列。因此[this](http://stackoverflow.com/questions/6162140/128-bit-integer-on-cuda)可能是有趣的。 –
@RobertCrovella由於sm_5x(相對於sm_2x,sm_3x)甚至沒有在硬件中的32位整數乘法器,用於在sm_5x 64位整數乘法仿真序列必然不同於用於sm_2x,sm_3x仿真序列不同。特定於sm_5x的錯誤報告似乎是按順序排列的。 – njuffa
是的,我已經提交了一個bug。 –