我正在與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