什么是“Visual Studio 配置文件”,为什么 nvcc 寻找它,为什么找不到它,如何修复?

Mat*_*t J 2 cuda visual-studio-2010 nvcc

我正在尝试使用 CUDA 工具包版本 5.0 和 Visual Studio 2010 Professional 编译器从命令行编译 CUDA 代码。针对以下问题,

nvcc -c AddVectors.cu -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息

nvcc : fatal error : Visual Studio configuration file '(null)' could not be found for installation at 'C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/bin/../..'
Run Code Online (Sandbox Code Playgroud)

当我在 VS 2010 IDE 中重建时,我也会收到此错误消息,但当我只是简单构建时,不会收到此错误消息。

我绝不是 Visual Studio 专家,但对我来说,对错误消息感到好奇的是,nvcc 似乎退出了我指定的编译器目录,并从那里向上搜索 VC/bin/../.. 为什么它这样做这?为什么除了 VC/bin/ 中的编译器可执行文件之外还需要其他任何东西?“Visual Studio 配置文件”在这一切中的作用是什么?

最后但并非最不重要的一点是,我该如何解决这个问题?

编辑:我的环境和搜索路径是

ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\mjacobson\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=WAA04087-RD
ComSpec=C:\Windows\system32\cmd.exe
CUDA_BIN_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin
CUDA_INC_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include
CUDA_LIB_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib\x64
CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\
CUDA_PATH_V4_2=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\
CUDA_PATH_V5_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\
C_IA64_REDIST11=C:\Program Files (x86)\Common Files\Intel\Shared Files\cpp\
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\mjacobson
LOCALAPPDATA=C:\Users\mjacobson\AppData\Local
LOGONSERVER=\\SVRAABKP01
NUMBER_OF_PROCESSORS=12
NVCUDASAMPLES5_0_ROOT=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\
NVCUDASAMPLES_ROOT=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\
NVTOOLSEXT_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\nvToolsExt\
OS=Windows_NT
Path=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\libnvvp\;C:\Program Files (x
86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Common Files\Intel\Shared Files\cpp\bin\ia64;C:\Program Files\AccelerEyes\Jacket\engine\bin
64;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;c:\Program Files (x86)\ATI Technologies\ATI.ACE
\Core-Static;C:\Program Files (x86)\NTRU Cryptosystems\NTRU TCG Software Stack\bin\;C:\Program Files\NTRU Cryptosystems\NTRU TCG Software Stack\bin\;C
:\Program Files\Wave Systems Corp\Gemalto\Access Client\v5\;C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files (x86)\Common
Files\Roxio Shared\10.0\DLLShared\;C:\Program Files\MATLAB\R2013b\runtime\win64;C:\Program Files\MATLAB\R2013b\bin;C:\Program Files\MATLAB\R2012b\runt
ime\win64;C:\Program Files\MATLAB\R2012b\bin;C:\Program Files\Microsoft Windows Performance Toolkit\;C:\Program Files (x86)\Common Files\Xoran Technol
ogies;C:\Program Files\MATLAB\MATLAB Compiler Runtime\v81\runtime\win64;C:\Program Files\MATLAB\R2011b\runtime\win64;C:\Program Files\MATLAB\R2011b\bi
n;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Ser
ver\100\DTS\Binn\
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 44 Stepping 2, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=2c02
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
RoxioCentral=C:\Program Files (x86)\Common Files\Roxio Shared\10.0\Roxio Central36\
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\MJACOB~1\AppData\Local\Temp
TMP=C:\Users\MJACOB~1\AppData\Local\Temp

USERNAME=mjacobson
USERPROFILE=C:\Users\mjacobson
VS100COMNTOOLS=c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\
windir=C:\Windows
Run Code Online (Sandbox Code Playgroud)

Mar*_* A. 5

CUDA nvcc只是一个转向编译驱动程序,这意味着nvcc同时使用MSVC编译器和CUDA编译器来执行他的操作。

在 Windows 环境中,在开始编译之前您需要注意几件事,请务必检查所有这些内容:

  • 确保您有足够的权限来运行/写入编译链程序到您的路径中。如果您是家庭个人计算机的管理员,为了调试您的问题,请确保以管理权限运行以下所有命令和程序(如果这解决了问题,就是这样!)

  • 除了驱动程序位置之外,环境变量还用于设置适当的编译器和工具包路径。假设CUDA 5.0 工具包和 MSVC2010 Pro 均已干净且功能齐全的安装,为了使用 x64 版本的 MSVC2010 编译 64 位 CUDA 代码,正确设置所有内容的最佳方法是运行Visual Studio x64 命令提示符。您可以在开始菜单中找到它Visual Studio 2010/Tools/Visual Studio x64 Command Prompt(我想跨平台 x64 也可以用于此)。请记住以管理权限运行它(在下面的屏幕中, Amministratore == Administrator,用我的母语表示)

在此输入图像描述

请注意上面屏幕截图中的“设置环境..”行:这确保了相对于 x64 版本的 MSVC 编译器的所有适当的环境变量。从您发布的日志中应该可以立即找到 nvcc 并能够检测到您提供给它的编译器。

  • 不赞成可执行文件调用其工作文件位于管理权限文件夹内的其他可执行文件的程序可能需要处理:简单来说,防病毒防御程序(例如 Comodo)和主动保护过滤器可能会阻止 nvcc 及其使用的工具获取其工作文件。工作已完成,如果在调试问题时遇到警告/问题,请确保禁用这些。

只是为了澄清其他事情:VC/bin 是 MSVC 编译器的 x86 版本,VC/x64 是您感兴趣的版本(也通常称为 amd64),VC/ia64 用于 IA64 架构(一种适当的64 位架构,x64 系统只是“渲染”64 位的 x86 系统..它们并不是天生的 64 位)。

从 MSVC IDE 编译项目时,请确保管理员权限、没有启用主动保护程序,并且您将 x64 项目类型与目标 CUDA C/C++ 架构正确匹配

在此输入图像描述

确保项目属性和单个 .cu 文件属性没有不匹配。确保(在详细输出处于活动状态时)在 64 位项目中编译内容时没有 -m32 标志(或者至少在您知道自己在做什么的情况下)。