为什么CUDA通过.b32或.u32寄存器获取并返回int参数

时间:2018-07-05 16:01:02

标签: assembly cuda ptx

非常简单的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外没有其他寄存器。它背后的原理是什么?每种类型的寄存器数量是否有限?

0 个答案:

没有答案