如何使用cuobjdump将C代码与SASS混合?

时间:2014-08-24 21:15:35

标签: c cuda

我不确定我做错了什么,基本上我想得到可读的汇编,与C调用混合。

以下是一些示例代码:

example.cu

#include <stdio.h>

__global__ void kernel()
{
    unsigned long a, b, c;

    a = 255;
    b = 10;

    c = a + b;
}

int main(void)
{
    cudaFree(0);

    kernel<<<1,1>>>();
    cudaDeviceSynchronize();

    return 0;
}

当我调查cuobjdump -h时(强调我的):

  

--dump-sass-sass
          所有列出的设备功能的转储组件。 Cuda来源是           在指定选项 -G 的情况下,将列出的程序集混合           编译期间nvcc如果仍然可以找到源文件

我用它编译它(因此创建了example.cubin文件):

nvcc -G -cubin -arch=sm_30 --ptxas-options=-v example.cu

然后我跑:

cuobjdump -sass --function _Z6kernelv example.cubin

输出包含汇编指令,但我在任何地方都看不到C代码:

code for sm_30
    Function : _Z6kernelv
.headerflags    @"EF_CUDA_SM30 EF_CUDA_PTX_SM(EF_CUDA_SM30)"
    /*0000*/                   MOV R1, c[0x0][0x44];             /* 0x2800400110005de4 */
    /*0008*/                   ISUB R1, R1, 0x8;                 /* 0x4800c00020105d03 */
    /*0010*/                   S2R R0, SR_LMEMHIOFF;             /* 0x2c000000dc001c04 */
    /*0018*/                   ISETP.GE.AND P0, PT, R1, R0, PT;  /* 0x1b0e00000011dc23 */
    /*0020*/               @P0 BRA 0x30;                         /* 0x40000000200001e7 */
    /*0028*/                   BPT.TRAP 0x1;                     /* 0xd00000000400c007 */
    /*0030*/                   IADD R0, R1, RZ;                  /* 0x48000000fc101c03 */
    /*0038*/                   MOV R2, R0;                       /* 0x2800000000009de4 */
    /*0040*/                   MOV R3, RZ;                       /* 0x28000000fc00dde4 */
    /*0048*/                   MOV R2, R2;                       /* 0x2800000008009de4 */
    /*0050*/                   MOV R3, R3;                       /* 0x280000000c00dde4 */
    /*0058*/                   MOV R4, c[0x0][0x24];             /* 0x2800400090011de4 */
    /*0060*/                   MOV R5, RZ;                       /* 0x28000000fc015de4 */
    /*0068*/                   IADD R2.CC, R2, R4;               /* 0x4801000010209c03 */
    /*0070*/                   IADD.X R3, R3, R5;                /* 0x480000001430dc43 */
    /*0078*/                   MOV32I R4, 0xff;                  /* 0x18000003fc011de2 */
    /*0080*/                   MOV R5, RZ;                       /* 0x28000000fc015de4 */
    /*0088*/                   MOV R4, R4;                       /* 0x2800000010011de4 */

我没有找到明确说明example.cu位于何处的选项(尽管它位于同一目录中)。具有相同代码的OTOH Nsight Eclipse Edition显然能够使用C代码显示SASS(在Dissassembly窗口中的调试会话中):

enter image description here

1 个答案:

答案 0 :(得分:2)

目前无法使用cuobjdump。引用的cuobjdump文档/命令行帮助有误。