我正在使用 CUDA GPU 进行并行编程。我用 nvcc 编译器编译了一个 CUDA 版本的矩阵乘法程序。现在需要看一下流程的中间代码,这样才能理解并行化的流程。我怎样才能访问这个?
问问题
820 次
1 回答
4
生成 CUDA PTX 文件 - Visual Studio 说明
如果您需要从您的 Visual Studio CUDA 项目生成 PTX 文件,您可以执行以下操作:
- 访问项目的属性面板。
- 打开 CUDA C/C++ 配置器。
- 将“保留预处理文件”设置为是。
- 在“保留目录”中设置目标目录。
获取 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
是包含一个胖二进制文件的文件,它可能包含一个或多个特定于设备的二进制图像(在这种情况下,特定于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 */
.....................................
于 2013-10-25T16:25:00.290 回答