我想我发现一个问题时,使用有符号整数在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。 –