gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:17:53 27 4
gpt4 key购买 nike

我的问题很简单,我正在编写一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com