我想我在使用有符号整数在 cuda PTX 中进行 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
mode 修复了这个问题,仍然想知道这是否是 cuda 中的错误?
更新 2 将此错误报告给 NVIDIA
将 Cuda 工具包 7.5 与 Visual Studio 2013 一起使用。x64 Debug
, sm_52
, compute_52
.