如何在Visual Studio中设置CUDA标志

时间:2013-08-05 15:51:17

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

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

在我的VS 2010项目中,我试图将这个标志放在:

  1. properties / cuda / host /其他编译标志 - 无效。
  2. properties / cuda /命令行。编译以-1退出。
  3. properties / c /命令行。编译错误
  4. 在Cuda属性中,我还设置为Yes标志:生成GPU调试信息和详细PTXAS输出。我在输出窗口中寻找输出。 怎么做得好? 我的GPU有CC = 2.1。

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

    1. C在PTXAS输出中交织 - 否
    2. 代码生成 - compute_20,sm_21
    3. 生成GPU调试信息 - 是
    4. max used register - 0
    5. 详细的ptxas输出(是/否 - 经过测试)。

2 个答案:

答案 0 :(得分:9)

我认为这些步骤非常简单。我干净安装了VS2010 Express,然后安装了适用于Windows 7的CUDA 5.0。

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

我唯一要做的就是选择Project ... Properties ... CUDA C / C ++ ...命令行

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

(如果您无法清楚地看到上面的图片,请右键单击图片,然后单击"将图片另存为..."然后将其保存到硬盘中,然后从那里打开。 )

之后,按ApplyOK。 然后点击F7来构建项目,你应该在Output窗口看到这样的输出(你的输出窗口应该自动显示" Build"编译时输出:

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选项以查看编译器的溢出结果。

请注意,单个文件选项可以覆盖项目设置(右键单击其中一个项目源文件,然后单击属性),但如果您尚未修改其中任何一项,则不应覆盖项目设置。 / p>

可能还有其他项目设置可能会干扰这一点,所以我的建议是尝试一个您尚未修改的CUDA示例代码,并使用上述步骤作为完整性检查来证明你可以先在那里工作。然后在你的项目上试一试。

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

编辑:以上案例使用CUDA 5.0。原始问题未指定CUDA版本。我发现在Visual Studio中使用以前版本的CUDA,命令行"其他选项"方法似乎不起作用,但使用选择/下拉框指定详细PTXAS输出(是)确实有效。

EDIT2:好的我干净安装了VS2010,然后彻底安装了CUDA 4.2工具包,我能够重现这个问题。我使用以下步骤来查看实际的ptxas详细输出:

  1. 在工具中...设置选择"专家设置"
  2. 在项目中......属性...配置属性... CUDA C / C ++ ...设备将ptxas详细下拉框更改为"是(--ptxas-options = -v)& #34;
  3. 在工具中...选项...项目和解决方案...构建和运行更改" MSBuild项目构建输出详细程度"设置来自" Minimal"到"正常"
  4. 然后选择Build ... Rebuild Solution,您应该在构建输出窗口中看到ptxas详细输出。

答案 1 :(得分:1)

我正在使用--ptxas-options=-v(没有空格),但不可否认我还在使用一些较旧的CUDA版本。

至于放置位置:

  • Ad 1)properties / cuda / host /其他编译标志 - 这将改变您对CUDA源的CPU代码编译(标记为__host__的功能)。这不是你要放置旗帜的地方。
  • Ad 2)properties / cuda /命令行 - 这应该会改变您的GPU代码编译。如果编译存在错误,那么错误消息是什么?
  • Ad 3)properties / c /命令行 - 这将影响您的本地C / C ++编译器,它既不理解--ptxas-options也不理解-Xptxas
相关问题