我正在与CUDA GPU并行编程。我用nvcc编译器编译了一个CUDA版本的矩阵乘法程序。现在我需要查看过程的中间代码,以便了解并行化过程。我怎样才能访问这个?由nvcc编译器为CUDA程序生成的中间代码
-1
A
回答
3
生成CUDA PTX文件 - Visual Studio中的指令
如果您需要从您的Visual Studio的CUDA项目生成PTX文件,你可以按照如下作用:
- 访问的属性面板中你项目。
- 打开CUDA C/C++配置程序。
- 将“保留预处理文件”设置为yes。
- 在“Keep Directory”中设置目的地的目录。
获取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项目的发布文件夹:
\..\Project_Name\Project_Name\Release
和类型:
cuobjdump yourkernel.sm_21.cubin --dump -sass
yourkernel.sm_21.cubin
是包含一个胖二进制文件的文件,它可能包含一个或多个特定于设备的二进制图像(在本例中,特定于sm_21
)为w (可选)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 */
.....................................
相关问题
- 1. cuda - nvcc如何编译__host__代码?
- 2. cuda nvcc交叉编译器
- 3. CUDA编译器(nvcc)宏
- 4. CUDA NVCC编译器错误
- 5. CUDA nvcc编译器设置Ubuntu 12.04
- 6. CUDA编译器NVCC二元变量
- 7. 使用NVIDIA的nvcc编译器编译并生成.cl文件?
- 8. CUDA nvcc慢主机代码
- 9. 如何使用nvcc编译的Cuda共享库来编译OpenCV代码?
- 10. 指定编译器NVCC用于编译主机代码
- 11. 编译器代码生成器验证
- 12. Haskell编译器的代码生成
- 13. javax.annotation.processing.AbstractProcessor:编译器生成的代码
- 14. 为什么编译成中间代码?
- 15. CUDA 4.2 nvcc(cicc)编译sm_21时出错
- 16. 由IBM的企业COBOL编译器生成的查看代码
- 17. 由splat编译器生成的代码的相对性能
- 18. 如何检查由C++编译器生成的代码?
- 19. 编译器如何生成事件处理程序代码?
- 20. 编译时代码生成
- 21. Swift编译器 - 代码生成
- 22. 编译器代码生成比较
- 23. 无法编译CUDA代码
- 24. 编译cuda代码CPU
- 25. 故障编译cuda代码
- 26. 在x86中进行编码 - 编译器代码生成
- 27. 编译由HipHop生成的C++源码
- 28. 为生成的代码编译时间错误?
- 29. 分布式CUDA C应用程序的编译(如distcc的,但对NVCC编译器支持)
- 30. 衍生代码编译器
看一看[生成在Visual Studio CUDA PTX文件(http://www.orangeowlsolutions.com/archives/464)线程执行(PTX)语言和[获取CUDA程序集](http://www.orangeowlsolutions.com/archives/555)用于CUDA程序集,如果您想生成较低级别的代码并更好地了解您的GPU实际上在做什么。 – JackOLantern
@RobertCrovella谢谢,罗伯特。我已将我的评论延伸至答案。 – JackOLantern