非常简单的cuda \$\s*
函数
__device__
在cuda工具包5.5上转换为以下ptx,目标为sm_30:
__device__ __noinline__ int add(int a, int b) {
return a + b;
}
以及针对sm_30的cuda工具包9.0中的以下ptx:
.func (.reg .u32 %rv1) _Z3addii (.reg .u32 %ra1, .reg .u32 %ra2)
{
.reg .u32 %r<4>;
.loc 15 1 0
$LDWbegin__Z3addii:
mov.s32 %r1, %ra1;
mov.s32 %r2, %ra2;
.loc 15 2 0
add.s32 %rv1, %r1, %r2;
ret;
$LDWend__Z3addii:
}
所以我想知道为什么要通过.u32或.b32寄存器而不是直接使用.s32寄存器来获取并返回参数?为什么工具包9.0产生使用.u32寄存器从参数中复制?我期望除.s32外没有其他寄存器。它背后的原理是什么?每种类型的寄存器数量是否有限?