ptxas 抱怨(输入)我悲伤的设备功能

Posted

技术标签:

【中文标题】ptxas 抱怨(输入)我悲伤的设备功能【英文标题】:ptxas complains about (types in) my sad device function 【发布时间】:2020-02-15 22:11:42 【问题描述】:

考虑以下 PTX 代码:

//
// Generated by NVIDIA NVVM Compiler... sort of
//
// Compiler Build ID: CL-25769353
// Cuda compilation tools, release 10.1, V10.1.105
// Based on LLVM 3.4svn
//

.version 6.4
.target sm_30
.address_size 64

.func  (.param .b32 func_retval0) foo(
        .param .b32 foo_param_0,
        .param .b32 foo_param_1,
        .param .b32 foo_param_2
)

        .reg .b16       %rs<3>;
        .reg .b32       %r<3>;


        ld.param.u16    %rs1, [foo_param_0];
        ld.param.u16    %rs2, [foo_param_1];
        ld.param.u32    %r2, [foo_param_2];
        // inline asm
        sad.s16 %r1, %rs1, %rs2, %r2;
        // inline asm
        st.param.b32    [func_retval0+0], %r1;
        ret;

当尝试使用 ptxas (CUDA 10.1) 编译它时,我得到:

ptxas /tmp/a.ptx, line 27; error   : Arguments mismatch for instruction 'sad'
ptxas fatal   : Ptx assembly aborted due to errors

这是为什么呢?这种类型组合有什么问题?

PTX reference 说:

sad.type  d, a, b, c;

.type =  .u16, .u32, .u64,
          .s16, .s32, .s64 ;

似乎dc 始终是u32type 适用于ab。这就是device_functions.h 中的__sad() 函数所具有的。

【问题讨论】:

【参考方案1】:

其实da的类型需要是“bc类型的无符号版本”。所以,这应该工作:

.func  (.param .b32 func_retval0) foo(
        .param .b32 foo_param_0,
        .param .b32 foo_param_1,
        .param .b32 foo_param_2
)

        .reg .b32       %r<5>;


        ld.param.u32    %r4, [foo_param_2];
        ld.param.s16    %r2, [foo_param_0];
        ld.param.s16    %r3, [foo_param_1];
        // inline asm
        sad.s32 %r1, %r2, %r3, %r4;
        // inline asm
        st.param.b32    [func_retval0+0], %r1;
        ret;

【讨论】:

以上是关于ptxas 抱怨(输入)我悲伤的设备功能的主要内容,如果未能解决你的问题,请参考以下文章

输入事件不会使用角度触发Android设备上的功能

CUDA ptxas警告(进入的堆栈大小)

百度输入法使用感受

CUDA ptxas 警告(入口的堆栈大小)

CUDA --ptxas-options="-v" 不显示任何输出

计算机组成原理基础知识-输入输出系统