我使用CUDA 4.0 arch。和Compute_Capability 2.0設備(GTX460)。 'cubin'和'ptx'文件有什麼區別? 我認爲cubin是gpu的本地代碼,所以這是拱門。具體而言,ptx是通過JIT編譯在Fermi設備(例如Geforce GTX 460)上運行的中間語言。當我編譯cu源碼時,我可以在ptx或cubin目標之間進行選擇。如果我需要cubin文件,我選擇「code = sm_20」。但是如果我想要一個ptx文件,我使用「code = compute_20」。 這是正確的嗎?NVIDIA NVCC和CUDA:Cubin與PTX
11
A
回答
17
您已混淆了選項以選擇編譯階段(-ptx
和-cubin
),並帶有控制要將哪些設備定位到的選項(-code
),因此您應該重新訪問該文檔。
NVCC是NVIDIA編譯器驅動程序。 -ptx
和-cubin
選項用於選擇編譯的特定階段,默認情況下,沒有任何階段特定選項,nvcc將嘗試從輸入生成可執行文件。大多數人使用-c
選項來導致nvcc生成一個目標文件,稍後通過默認平臺鏈接器將其鏈接到一個可執行文件中,如果您使用的是驅動程序API,那麼-ptx
和-cubin
選項才真正有用。有關中間階段的更多信息,請查看安裝CUDA Toolkit時安裝的nvcc手冊。
-ptx
的輸出是純文本PTX文件。 PTX是NVIDIA GPU的中間彙編語言,尚未完全優化,稍後將彙編爲設備特定的代碼(例如,不同的設備具有不同的寄存器數量,因此完全優化PTX將是錯誤的)。-cubin
的輸出是一個胖二進制文件,它可能包含一個或多個特定於設備的二進制圖像以及(可選)PTX。
您引用的參數-code
完全有不同的目的。我鼓勵你查看包含幾個例子的nvcc文檔,通常我會建議使用-gencode
選項,因爲它允許更多的控制,並允許你在一個二進制文件中定位多個設備。作爲一個簡單的例子:
-gencode arch=compute_xx,code=\'compute_xx,sm_yy,sm_zz\'
原因NVCC到目標計算能力XX的所有設備(這是arch=
位)和嵌入PTX(code=compute_xx
)以及設備特定的二進制用於sm_yy和sm_zz成最終脂肪二進制。
相關問題
- 1. NVCC使用PTX輸出單獨編譯
- 2. 在NVIDIA GPU上編譯ptx代碼?
- 3. 'nvcc -ptx file.cu'致命錯誤:文件未找到
- 4. NVCC 5.0和OpenACC的
- 5. 如何配置GCC以將OpenMP 4.5卸載到Nvidia PTX GPGPUs
- 6. 如何禁用與NVCC
- 7. 使用NVIDIA的nvcc編譯器編譯並生成.cl文件?
- 8. 如何指定使用NVIDIA CUDA nvcc 4.1而不是4.0?
- 9. NVCC警戒線
- 10. opengl與Nvidia GPU
- 11. NVIDIA-SMI失敗。 Could'nt與Nvidia驅動
- 12. 使用nvcc和g ++編譯
- 13. nvcc for Android,手臂
- 14. rootbeer和Nvidia Optimus
- 15. Nvidia cuda與位圖
- 16. 無法與nvcc編譯
- 17. 使用CMakes CHECK_CXX_COMPILER_FLAG與nvcc/cuda
- 18. CUDA .ptx文件是否可移植?
- 19. gstreamer和Qt與ARM上的nvidia
- 20. 如何使用英特爾C++編譯器與CUDA nvcc?
- 21. Theano失蹤NVCC編譯
- 22. 使用模板特徵類型時,NVIDIA NVCC更改編譯時間常數
- 23. NVIDIA Parallel Nsight和OpenCL
- 24. cuda 8.0中的nvcc警告
- 25. nvcc無法編譯
- 26. 對NVCC
- 27. cuda v6.5 nvcc與VS 2013失敗,神祕msg
- 28. OpenGL ATI與NVIDIA GLSL問題
- 29. CUDA - PTX進行傳播
- 30. sm_10的最新PTX ISA版本
'.cubin'是CUDA二進制文件,'.ptx'是CUDA彙編源代碼(文本),它被傳遞給'ptxas'彙編器 –