c++ - Cuda寄存器编译器优化

标签 c++ cuda 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" 

Ubuntu 上使用 gcc 4.9.4cuda-8cmakeO3 编译优化级别,寄存器数在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)可能会为相同的代码使用不同数量的寄存器。

使用launch bounds通知编译器您针对特定内核的预期启动配置和占用目标。如有必要,它会努力减少寄存器的使用。
这是否需要将寄存器溢出到本地内存是您无法控制的,但编译器通常会表现得非常合理。

关于c++ - Cuda寄存器编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41981106/

相关文章:

c++ - const cast 有什么不同之处?

cuda - cudaMemcpy 可以接受来自设备的变量作为其参数吗?

linux - Yocto for Nvidia Jetson 由于 GCC 7 失败 - 无法计算目标文件的后缀

.net-core - 积极的 F# 编译器优化是否只发生在引用的依赖项 + 发布配置上?

java - 无法理解Java字符串文字是如何实现的

没有指针或引用的c++虚函数调用

c++ - Armadillo C++ :- Efficient access of columns in a cube structure

c++ - push_back std::pair 进入 std::vector 错误

c - 岩浆2.0错误: CUDA driver version is insufficient for CUDA runtime version

objective-c - 启用模块的 Prefix.pch?