簡體   English   中英

Cuda寄存器編譯器優化

[英]Cuda register compiler optimization

我的問題很簡單,我正在編寫一個 CUDA 應用程序,但是因為我的主計算機是 Windows PC(Visual Studio 2013),所以我在那里開發了我的應用程序。 但是最終應用程序將部署在 *nix 服務器中。

我的問題是:

Visual Studio 2013優化標志/Ox (完全優化)和/Oi (啟用內在函數)設法將我的寄存器使用量壓縮到僅 32regs,從而獲得完全占用。

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\bin\nvcc.exe" -gencode=arch=compute_35,code=\"sm_35,compute_35\" --use-local-env --cl-version 2013 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64"  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include"     --keep-dir x64\Release -maxrregcount=0 --ptxas-options=-v --machine 64 --compile -cudart static     -DWIN32 -DWIN64 -DNDEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Ox /Zi  /MD " -o Simulation.cu.obj "Simulation.cu" 

在使用gcc 4.9.4cuda-8編譯的Ubuntu 上,使用cmakeO3優化級別編譯,寄存器計數約為 49(>32)。

nvcc Simulation.cu -dc -o Simulation.cu.o -ccbin cc -m64 -DNDEBUG -Xcompiler ,\"-std=c++1y\",\"-w\",\"-O3\",\"-g\" -arch=sm_35 -std=c++11 -rdc=true -O3 --ptxas-options=-v -DNVCC

我錯過了任何標志嗎? 而且我不想將任何寄存器溢出到本地內存。

不同版本的工具包(甚至驅動程序,如果您編譯為 PTX)可能會為相同的代碼使用不同數量的寄存器。

使用啟動邊界將特定內核的預期啟動配置和占用目標告知編譯器。 如有必要,它將努力減少寄存器的使用。
這是否需要將寄存器溢出到本地內存不在您的控制范圍內,但編譯器通常會表現得非常合理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM