Date Modified Tags nvidia / cuda

之前记录的一些cuda的用法中也有关于cuda汇编的一些介绍。本文主要记录了带源代码行信息的cuda汇编文件的获取。主要内容参考CUDA Binary Utilities

程序编译时需要添加的参数

在makefile或者cmakelist文件中,添加如下内容到nvccflag或者手动添加到nvcc编译的参数中去。

-g -lineinfo

重新编译自己的程序。

获得cubins

以vectorAdd程序为例,使用cuobjdump获得在二进制文件中的所有cubins。

cuobjdump -xelf all ./vectorAdd

如果在makefile或者cmakelist中指定了生成多个架构的代码(sm_50, sm60, sm70 etc.),则执行完上述命令后,会生成多个cubins,比如vectorAdd.sm_75.cubin等。

根据自己的目标架构选择将要解析的cubin。

反编译出sass

SASS是cuda的汇编格式,使用nvdisasm可以从cubin文件中获得。

nvdisasm -g ./vectorAdd.sm_75.cubin > vectorAdd.sm_75.sass

分析sass

Z9vectorAddPKfS0_Pfi:
.text._Z9vectorAddPKfS0_Pfi:
    //## File "/home/findhao/NVIDIA_CUDA-11.2_Samples/0_Simple/vectorAdd/vectorAdd.cu", line 33
        /*0000*/                   MOV R1, c[0x0][0x28] ;
    //## File "/home/findhao/NVIDIA_CUDA-11.2_Samples/0_Simple/vectorAdd/vectorAdd.cu", line 35
        /*0010*/                   S2R R6, SR_CTAID.X ;
        /*0020*/                   S2R R3, SR_TID.X ;
        /*0030*/                   IMAD R6, R6, c[0x0][0x0], R3 ;
    //## File "/home/findhao/NVIDIA_CUDA-11.2_Samples/0_Simple/vectorAdd/vectorAdd.cu", line 37
        /*0040*/                   ISETP.GE.AND P0, PT, R6, c[0x0][0x178], PT ;
        /*0050*/               @P0 EXIT ;
    //## File "/home/findhao/NVIDIA_CUDA-11.2_Samples/0_Simple/vectorAdd/vectorAdd.cu", line 39
        /*0060*/                   MOV R7, 0x4 ;
        /*0070*/                   IMAD.WIDE R4, R6, R7, c[0x0][0x168] ;
        /*0080*/                   IMAD.WIDE R2, R6, R7, c[0x0][0x160] ;
        /*0090*/                   LDG.E.SYS R4, [R4] ;
        /*00a0*/                   LDG.E.SYS R3, [R2] ;
        /*00b0*/                   IMAD.WIDE R6, R6, R7, c[0x0][0x170] ;
        /*00c0*/                   FADD R9, R4, R3 ;
        /*00d0*/                   STG.E.SYS [R6], R9 ;
    //## File "/home/findhao/NVIDIA_CUDA-11.2_Samples/0_Simple/vectorAdd/vectorAdd.cu", line 41
        /*00e0*/                   EXIT ;
.L_1:
        /*00f0*/                   BRA `(.L_1);
.L_26:

上述sass code中,//## File行为源码行信息,该行之下的行为对应的sass code。


文章版权归 FindHao 所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明作者 FindHao 和本文原始地址:
https://findhao.net/academic/2575.html

Comments