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

如何让C代码与SASS和cuobjdump混合使用?,c,cuda,C,Cuda,我不确定我在以错误的方式做什么,本质上我希望得到可读的汇编,混合C调用 下面是一些示例代码: 示例.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*/

我不确定我在以错误的方式做什么,本质上我希望得到可读的汇编,混合C调用

下面是一些示例代码:

示例.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窗口中的调试会话中):


目前不可能使用
cuobjdump
。引用的
cuobjdump
文档/命令行帮助出错。

因此它显然是一个bug。还有其他选择吗?可能是
nvdism
?奇怪的是,nsight没有这样的限制。CUDA 6.5中的
nvdisasm
也可以做到这一点(这是CUDA 6.5 AFAIK中的一项新功能)。您需要将代码编译成一个cubin,然后使用
nvdism-g
转储cubin。它提供行引用,而不是源代码的实际行。我不确定它是否适用于每个
nvcc
选项,我使用
-g-g-lineinfo
编译到cubin,您可以尝试查看编译步骤中是否确实需要这些选项。
nvdism
-g
命令行选项记录在中。感谢您,我还了解到,使用ptx-ptx示例中的
nvcc-g--source.cu
我可以获得与C代码交错的ptx中间程序集,这似乎比SASS记录得更好(参见ptx-ISA)。
cuobjdump -sass --function _Z6kernelv example.cubin
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 */