【问题标题】:Cuda register compiler optimizationCuda 寄存器编译器优化
【发布时间】:2017-02-01 13:32:42
【问题描述】:

我的问题很简单,我正在编写一个 CUDA 应用程序,但是因为我的主计算机是 Windows PC (Visual Studio 2013),所以我在那里开发了我的应用程序。但最终应用程序将部署在 *nix 服务器中。

我的问题是:

Visual Studio 2013 优化标志 /Ox(完全优化)和 /Oi(启用内在函数)设法将我的寄存器使用量压缩到只有 32 个注册,因此可以完全入住。

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-8 通过 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

我是否缺少任何标志?而且我不想将任何寄存器溢出到本地内存。

【问题讨论】:

    标签: c++ cuda compiler-optimization


    【解决方案1】:

    不同版本的工具包(甚至驱动程序,如果您编译为 PTX)可能对相同的代码使用不同数量的寄存器。

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

    【讨论】:

    • 既然我想要 100% 的占用率,为什么我不使用 -maxrregcount 并依赖启动边界,尽管感谢链接,但我不知道它们的存在。我很困惑,因为 ptx 编译不应该是特定于平台的,我希望在两个平台上得到相同的结果
    • 如果每个编译单元(.cu 文件)有一个内核,-maxrregcount 也同样有效。后来添加了每个内核的启动绑定注释,因此每个内核都可以使用它的最佳配置。
    • PTX 编译不一定是特定于平台的,但您使用的是不同版本的工具包。新的编译器版本很可能包括额外的优化和调整后的启发式方法,这些会导致不同的寄存器使用。
    • 事实证明,nix 版本不执行任何寄存器分配,除非被告知这样做,除非指定了 maxrregcount 或启动边界。在我的情况下, maxrregcount 和启动边界都没有将任何内容溢出到本地内存。我被 nvprof --metrics 误导了,因为有时内核的块很少并且不会使卡饱和。感谢您的帮助:)
    • “nix 版本不执行任何寄存器分配,除非...” - 不确定这应该告诉我什么,因为寄存器分配是编译任何代码的重要步骤。但我很高兴能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2011-11-07
    • 2013-11-06
    相关资源
    最近更新 更多