我使用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. 在NVIDIA GPU上編譯ptx代碼?
- 2. 'nvcc -ptx file.cu'致命錯誤:文件未找到
- 3. 如何配置GCC以將OpenMP 4.5卸載到Nvidia PTX GPGPUs
- 4. 如何禁用與NVCC
- 5. 如何指定使用NVIDIA CUDA nvcc 4.1而不是4.0?
- 6. NVIDIA-SMI失敗。 Could'nt與Nvidia驅動
- 7. 使用nvcc和g ++編譯
- 8. nvcc for Android,手臂
- 9. 無法與nvcc編譯
- 10. Nvidia cuda與位圖
- 11. gstreamer和Qt與ARM上的nvidia
- 12. 如何使用英特爾C++編譯器與CUDA nvcc?
- 13. NVIDIA Parallel Nsight和OpenCL
- 14. cuda 8.0中的nvcc警告
- 15. 對NVCC
- 16. OpenGL ATI與NVIDIA GLSL問題
- 17. 安裝NVIDIA Optix的SDK 3.0.0的Ubuntu 12.04
- 18. Nsight Eclipse Edition找不到nvcc
- 19. 缺少nvcc編譯器 - theano
- 20. nvcc正在挑錯libcudart庫
- 21. NVIDIA GPU和PhysX引擎
- 22. NVCC和NVRTC是否支持尾部呼叫優化?
- 23. 避免在直列PTX
- 24. 如何使用clang編譯OpenCL到ptx代碼?
- 25. xorg.conf與NFS用戶上的NVidia
- 26. 獨家計算模式與OpenCL + NVidia
- 27. 與NVIDIA CUDA 4.1 RC2和Parallel NSight 2.1的奇怪行爲
- 28. 是否存在某種與Boost :: thread()和Nvidia CUDA的不兼容?
- 29. 使用nvcc從CUDA創建DLL
- 30. 有什麼辦法可以將.cubin翻譯爲.ptx
'.cubin'是CUDA二進制文件,'.ptx'是CUDA彙編源代碼(文本),它被傳遞給'ptxas'彙編器 –