我正在使用CUDA GPU进行并行编程。我用nvcc编译器编译了一个矩阵乘法程序的CUDA版本。现在我需要查看进程的中间代码,以便了解并行化过程。我怎样才能访问这个?
答案 0 :(得分:4)
生成CUDA PTX文件 - Visual Studio说明
如果您需要从Visual Studio CUDA项目生成PTX文件,您可以采取以下措施:
获取CUDA程序集 - Visual Studio说明
PTX是一种中间语言,旨在跨多个GPU架构移植,但它不是GPU执行的终极机器代码。 实际上,它由编译器组件PTXAS编译成最终的机器代码,也称为SASS,用于手头的特定架构。 GPU实际执行的最终机器代码可以通过cuobjdump实用程序拆卸来获得。 为此,在Visual Studio Cuda项目中转到:
Project -> Properties -> Configuration Properties -> CUDA C/C++ -> Common -> Keep Preprocessed Files -> choose Yes (--keep)
打开命令窗口,转到VS项目的Release文件夹:
\..\Project_Name\Project_Name\Release
并输入:
cuobjdump yourkernel.sm_21.cubin --dump -sass
yourkernel.sm_21.cubin
是包含fat二进制文件的文件,它可能包含一个或多个特定于设备的二进制映像(在这种情况下,特定于sm_21
)以及(可选)PTX。
在命令窗口中,您将获得类似
的内容Function : _Z11simple_copyPfPKf
.headerflags @"EF_CUDA_SM20 EF_CUDA_PTX_SM(EF_CUDA_SM20)"
/*0000*/ MOV R1, c[0x1][0x100]; /* 0x2800440400005de4 */
/*0008*/ NOP; /* 0x4000000000001de4 */
/*0010*/ MOV R0, c[0x0][0x14]; /* 0x2800400050001de4 */
/*0018*/ S2R R2, SR_CTAID.Y; /* 0x2c00000098009c04 */
/*0020*/ SHL R0, R0, 0x5; /* 0x6000c00014001c03 */
/*0028*/ S2R R3, SR_TID.Y; /* 0x2c0000008800dc04 */
/*0030*/ ISCADD R3, R2, R3, 0x5; /* 0x400000000c20dca3 */
/*0038*/ S2R R4, SR_CTAID.X; /* 0x2c00000094011c04 */
/*0040*/ S2R R5, SR_TID.X; /* 0x2c00000084015c04 */
/*0048*/ ISCADD R2, R4, R5, 0x5; /* 0x4000000014409ca3 */
/*0050*/ IMAD R2, R0, R3, R2; /* 0x200400000c009ca3 */
/*0058*/ ISCADD R0, R2, c[0x0][0x24], 0x2; /* 0x4000400090201c43 */
/*0060*/ ISCADD R2, R2, c[0x0][0x20], 0x2; /* 0x4000400080209c43 */
/*0068*/ LD R0, [R0]; /* 0x8000000000001c85 */
/*0070*/ ST [R2], R0; /* 0x9000000000201c85 */
/*0078*/ EXIT ; /* 0x8000000000001de7 */
.....................................