【问题标题】:How to set CUDA flags in Visual Studio如何在 Visual Studio 中设置 CUDA 标志
【发布时间】:2013-08-06 09:50:38
【问题描述】:

我正在尝试在 Visual Studio 中测量我的 CUDA 项目中的寄存器溢出。为此,我使用了 –Xptxas –v,–abi=no 标志,因为它写在这里 http://on-demand.gputechconf.com/gtc-express/2011/presentations/register_spilling.pdf

在我的 VS 2010 项目的属性中,我尝试将此标志放入:

  1. 属性/cuda/主机/附加编译标志 - 无效。
  2. 属性/cuda/命令行。编译以 -1 退出。
  3. 属性/c/命令行。编译错误

在 Cuda 属性中,我还设置了 Yes 标志:生成 GPU 调试信息和 Verbose PTXAS 输出。我正在“输出”窗口中寻找输出。 如何正确地做到这一点? 我有 CC = 2.1 的 GPU。

编辑: 因此,将标志作为答案指示的正确位置是属性/cuda/命令行。但我仍然没有得到预期的输出(即使在示例项目中)。下面我展示了我在属性中的其他选项: cuda/设备。

  1. C 在 PTXAS 输出中交错 - 否
  2. 代码生成 - compute_20、sm_21
  3. 生成 GPU 调试信息 - 是
  4. 最大使用寄存器 - 0
  5. 详细的 ptxas 输出(是/否 - 都测试过)。

【问题讨论】:

    标签: visual-studio-2010 cuda compiler-flags


    【解决方案1】:

    我认为这些步骤非常简单。我对 VS2010 Express 进行了全新安装,然后为 Windows 7 安装了 CUDA 5.0。

    我选择了VectorAdd 示例代码,它位于 CUDA 5.0 示例包中。默认情况下,我的项目设置为针对 Win32 和 Debug 进行编译。

    我必须做的唯一更改是选择 Project...Properties...CUDA C/C++...Command Line

    然后我在属性对话框底部的Addtional Options 文本框中添加了-Xptxas -v 选项,如下所示:

    (如果您看不清楚上图,请右键单击该图片,然后单击“将图片另存为...”并将其保存到您的硬盘,然后从那里打开它。)

    之后,按ApplyOK。 然后点击F7 构建项目,您应该会在Output 窗口中看到类似这样的输出(您的输出窗口应该会在您编译时自动显示“构建”输出:

    1>------ Rebuild All started: Project: vectorAdd, Configuration: Debug Win32 -----
    1> 
    1> C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\0_Simple\vectorAdd>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe" -ccbin "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -I"../../common/inc" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -G --keep-dir "Debug" -maxrregcount=0 --machine 32 --compile -Xptxas -v -g -DWIN32 -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MTd " -o "Win32/Debug/vectorAdd.cu.obj" "C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\0_Simple\vectorAdd\vectorAdd.cu" -clean 
    1> Compiling CUDA source file vectorAdd.cu...
    1> 
    1> C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\0_Simple\vectorAdd>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" -gencode=arch=compute_20,code=\"sm_20,compute_20\" -gencode=arch=compute_30,code=\"sm_30,compute_30\" -gencode=arch=compute_35,code=\"sm_35,compute_35\" --use-local-env --cl-version 2010 -ccbin "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -I"../../common/inc" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -G --keep-dir "Debug" -maxrregcount=0 --machine 32 --compile -Xptxas -v -g -DWIN32 -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MTd " -o "Win32/Debug/vectorAdd.cu.obj" "C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\0_Simple\vectorAdd\vectorAdd.cu" 
    1> ptxas : info : 0 bytes gmem
    1> ptxas : info : Compiling entry function '_Z9vectorAddPKfS0_Pfi' for 'sm_10'
    1> ptxas : info : Used 4 registers, 32 bytes smem, 4 bytes cmem[1]
    1> ptxas : info : 0 bytes gmem
    1> ptxas : info : Compiling entry function '_Z9vectorAddPKfS0_Pfi' for 'sm_20'
    1> ptxas : info : Function properties for _Z9vectorAddPKfS0_Pfi
    1> 0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
    1> ptxas : info : Used 8 registers, 48 bytes cmem[0]
    1> ptxas : info : 0 bytes gmem
    1> ptxas : info : Compiling entry function '_Z9vectorAddPKfS0_Pfi' for 'sm_30'
    1> ptxas : info : Function properties for _Z9vectorAddPKfS0_Pfi
    1> 0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
    1> ptxas : info : Used 8 registers, 336 bytes cmem[0]
    1> ptxas : info : 0 bytes gmem
    1> ptxas : info : Compiling entry function '_Z9vectorAddPKfS0_Pfi' for 'sm_35'
    1> ptxas : info : Function properties for _Z9vectorAddPKfS0_Pfi
    1> 0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
    1> ptxas : info : Used 8 registers, 336 bytes cmem[0]
    1> tmpxft_00001438_00000000-39_vectorAdd.compute_10.ii
    1> vectorAdd_vs2010.vcxproj -> C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\0_Simple\vectorAdd\../../bin/win32/Debug/vectorAdd.exe
    ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
    

    请注意,您是否看到任何实际溢出取决于您正在编译的代码。这段代码没有溢出,但如果有,编译器会报告它。

    您不需要-abi=no 选项来查看编译器的溢出结果。

    请注意,单个文件选项可以覆盖项目设置(右键单击您的项目源文件之一,然后单击属性),但如果您没有修改任何这些,它们不应覆盖您的项目设置。

    可能还有其他项目设置也会对此产生干扰,因此我的建议是尝试使用您尚未修改的 CUDA 示例代码之一,并使用上述步骤作为健全性检查来证明您可以先让它在那里工作。然后在你的项目上试试。

    确保您正在修改与您实际构建的项目相对应的设置(例如 Win32/x64、Release/Debug)。

    编辑:上述案例使用 CUDA 5.0。原始问题没有指定 CUDA 版本。我发现在 Visual Studio 中使用早期版本的 CUDA,命令行“附加选项”方法似乎不起作用,但使用选择/下拉框指定 Verbose PTXAS 输出(是)确实有效。

    EDIT2: 好的,我完成了 VS2010 的全新安装,然后是 CUDA 4.2 工具包的全新安装,我能够重现该问题。我使用以下步骤能够看到实际的 ptxas 详细输出:

    1. 在工具...设置中选择“专家设置”
    2. 在 Project...Properties...Configuration Properties...CUDA C/C++...Device 中将 ptxas 详细下拉框更改为“Yes (--ptxas-options=-v)”
    3. 在 Tools...Options...Projects and Solutions...Build and Run 中,将“MSBuild project build output verbosity”设置从“Minimal”更改为“Normal”
    4. 然后选择 Build...Rebuild Solution,您应该会在构建输出窗口中看到 ptxas 详细输出。

    【讨论】:

    • 不幸的是,这个干净的示例项目 (CUDA 4.2) 甚至无法正常工作(没有所需的输出)
    • 为什么不升级到 CUDA 5(或 CUDA 5.5)?
    • 用一个新的序列来编辑我的答案(EDIT 2)。
    • CUDA 5.5 的安装成功了;)
    【解决方案2】:

    我正在使用--ptxas-options=-v(不带空格),但我承认我仍在使用一些较旧的 CUDA 版本。

    至于放在哪里:

    • Ad 1) 属性/cuda/主机/附加编译标志——这将改变你的 CUDA 源代码编译(函数标记为__host__)。这不是您想要放置标志的地方。
    • Ad 2) 属性/cuda/命令行——这应该会改变你的 GPU 代码编译。如果编译存在错误,错误信息是什么?
    • Ad 3) properties / c / command line -- 这将影响你的原生 C/C++ 编译器,它既不理解 --ptxas-options 也不理解 -Xptxas

    【讨论】:

    • 我更改了标志,但和以前一样,它正在编译但没有所需的输出,即使在示例项目中也是如此。谢谢解释
    猜你喜欢
    • 2013-01-02
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2012-05-27
    • 2016-02-25
    • 2010-10-16
    相关资源
    最近更新 更多