Visual studio 2010 如何在Visual Studio中设置CUDA标志

Visual studio 2010 如何在Visual Studio中设置CUDA标志,visual-studio-2010,cuda,compiler-flags,Visual Studio 2010,Cuda,Compiler Flags,我试图在VisualStudio中测量CUDA项目中的寄存器溢出。为了做到这一点,我使用了这里写的标志–Xptxas–v、–abi=no 在属性中的VS 2010项目中,我尝试将此标志置于: properties/cuda/host/其他编译标志-无效 属性/cuda/命令行。编译将以-1退出 属性/c/命令行。编译错误 在Cuda属性中,我还设置了Yes标志:生成GPU调试信息和详细的PTXAS输出。我正在输出窗口中查找输出。 如何做好这件事? 我有CC=2.1的GPU 编辑: 因此,正确的

我试图在VisualStudio中测量CUDA项目中的寄存器溢出。为了做到这一点,我使用了这里写的标志–Xptxas–v、–abi=no

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

  • properties/cuda/host/其他编译标志-无效
  • 属性/cuda/命令行。编译将以-1退出
  • 属性/c/命令行。编译错误
  • 在Cuda属性中,我还设置了Yes标志:生成GPU调试信息和详细的PTXAS输出。我正在输出窗口中查找输出。 如何做好这件事? 我有CC=2.1的GPU

    编辑: 因此,正确的放置标志的位置是properties/cuda/命令行。但我仍然没有得到预期的结果(即使是在示例项目中)。以下是我在属性中的其他选项: cuda/设备

  • C交织在PTXAS输出中-否
  • 代码生成-计算20、sm 21
  • 生成GPU调试信息-是
  • 最大已用寄存器-0
  • 详细的ptxas输出(是/否-测试两者)

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

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

    我唯一需要做的更改是选择Project…Properties…CUDA C/C++…命令行

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

    (如果您无法清晰地看到上述图片,请右键单击图片,然后单击“将图片另存为…”并将其保存到硬盘,然后从硬盘打开。)

    之后,按
    Apply
    OK
    。 然后点击
    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
    选项来查看编译器的溢出结果

    请注意,单个文件选项可以替代项目设置(右键单击其中一个项目源文件,然后单击“属性”),但如果尚未修改其中任何一个,则不应替代项目设置

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

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

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

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

  • 在工具…设置中选择“专家设置”
  • 在项目中…属性…配置属性…CUDA C/C++…设备将ptxas详细信息下拉框更改为“是”(-ptxas选项=-v)”
  • 在工具…选项…项目和解决方案…生成和运行中,将“MSBuild项目生成输出详细信息”设置从“最小”更改为“正常”
  • 然后选择Build…Rebuild Solution,您将在Build output窗口中看到ptxas详细输出
  • 我使用的是
    --ptxas options=-v
    (没有空格),但无可否认,我仍然在使用一些较旧的CUDA版本

    至于放在哪里:

    • Ad 1)properties/cuda/host/additional compilation flags——这将改变cuda源代码的CPU代码编译(标记为
      \uuuuuuuuuuuuuuuuuuuuuuuu
      )。这不是你想挂国旗的地方
    • ad2)properties/cuda/命令行——这将改变您的GPU代码编译。如果编译存在错误,错误消息是什么
    • Ad 3)属性/c/命令行--这将影响您的本机c/c++编译器,它既不理解
      --ptxas选项
      也不理解
      -Xptxas

    不幸的是,在这个干净的示例项目(CUDA 4.2)中,它甚至不起作用(没有期望的输出)。为什么不升级到CUDA 5(或CUDA 5.5)?用一个新的序列编辑了我的答案(编辑2)。CUDA 5.5的安装成功了;)我更改了标志,但和以前一样,它正在编译,但没有所需的输出,即使在示例项目中也是如此。谢谢你的解释