安装后是否可以移动/分发cuda编译器(nvcc)?

时间:2018-09-24 22:31:40

标签: visual-studio cmake cuda

我们正在开始CUDA / C ++项目。我们正在使用几台运行Windows和Linux的开发机,以及几台CI服务器。我们有一个CMake项目,还有一个用于预先编译的第三方库的预先指定的本地目录(例如C:\thirdparty)。

我的问题是:有什么方法可以将nvcc.exe和相关的二进制文件复制到该第三方目录中?还是每个开发人员和构建机器都需要运行CUDA安装程序?

我一直在关注此博客文章:https://devblogs.nvidia.com/building-cuda-applications-cmake/

在本地安装CUDA之后,他们的解决方案对我有用。但是,您似乎无法将nvcc二进制文件移出其默认安装位置,并且仍然可以构建所有内容。我将C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0复制到C:\thirdparty\CUDA\10.0.,然后在set(CMAKE_CUDA_COMPILER "C:/thirdparty/CUDA/10.0/bin/nvcc.exe")中呼叫CMakeLists.txt。 CMake失败:

  

AddCudaCompileDeps:

     

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ HostX86 \ x64 \ cl.exe   / E / nologo / showIncludes / TP / D__CUDACC__ / DCMAKE_INTDIR =“ Debug”   / DCMAKE_INTDIR =“调试” / D_MBCS / I“ C:\ Program Files \ NVIDIA GPU   计算工具包\ CUDA \ v10.0 \ bin“ / I” C:\ Program Files \ NVIDIA GPU   计算工具包\ CUDA \ v10.0 \ include” / I。/FIcuda_runtime.h / c   C:\ Users \ me \ projects \ cuda-test \ build \ CMakeFiles \ CMakeTmp \ main.cu       C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ VC \ VCTargets \ BuildCustomizations \ CUDA   10.0.targets(536,9):错误: CUDA Toolkit v10.0目录'C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \'不存在   存在。请确认CUDA工具包已正确安装或定义   CudaToolkitDir属性来解决此错误。   [C:\ Users \ me \ projects \ cuda-test \ build \ CMakeFiles \ CMakeTmp \ cmTC_64f0a.vcxproj]       完成的建筑项目“ C:\ Users \ me \ projects \ cuda-test \ build \ CMakeFiles \ CMakeTmp \ cmTC_64f0a.vcxproj”   (默认目标)-失败。

我正在使用CMake 3.12.0运行Windows 10。

这里是CMakeLists.txt供参考:

  

cmake_minimum_required(版本3.8致命错误)

     

set(CMAKE_CUDA_COMPILER“ C:/thirdparty/CUDA/10.0/bin/nvcc.exe”)   项目(cmake_and_cuda语言CXX CUDA)

     

include(CTest)

     

add_library(粒子STATIC randomize.cpp randomize.h
  粒子.cu粒子.h v3.cu v3.h)

     

#请求使用-std = c ++ 11构建粒子   #由于这是一个公共编译功能,因此任何链接到粒子的内容   #也将使用-std = c ++ 11 target_compile_features(particles PUBLIC cxx_std_11)进行构建

     

#我们需要明确声明我们需要粒子中的所有CUDA文件   #库将使用-dc构建,因为成员函数可以由   #其他库和可执行文件set_target_properties(粒子                          开启CUDA_SEPARABLE_COMPILATION                         )

     

如果(BUILD_TESTING)

     

add_executable(particle_test test.cu)

     

set_target_properties(粒子测试属性   CUDA_SEPARABLE_COMPILATION ON)target_link_libraries(particle_test   PRIVATE粒子)

     

add_test(NAME个粒子_10k COMMAND粒子_测试10000)
  add_test(NAME particle_test 256k COMMAND particle_test 256000)

     

如果(苹果)       #我们需要将默认路径作为rpath添加到驱动程序(libcuda.dylib),       #,以便静态cuda运行时可以在运行时找到它。       set_property(TARGET particle_test PROPERTY BUILD_RPATH $ {CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})endif()endif()

2 个答案:

答案 0 :(得分:0)

这很有可能。 CUDA安装(与nVIDIA驱动程序安装相反)只是磁盘上的一堆文件。如果您甚至愿意将它们全部放入一个公共目录中,则实际上是C:\Program Files\CUDA(或Windows上的默认值)还是C:\thirdparty\cuda都没关系。

您的“唯一”问题是您的相关环境变量和某些注册表项(不确定,因为我的Linux经验)。环境变量可以(或可以不包括)以下一些变量:CUDA_DIRLD_LIBRARY_PATHC_INCLUDE_PATHLIBRARY_PATH,{{1} }。环境变量肯定地包括CPLUSINCLUDE_PATH

注意:我只有将CUDA放在Linux上任意位置的经验。

答案 1 :(得分:0)

是的,我在Windows上这样做是因为构建机器没有Nvidia图形卡,因此无法运行CUDA安装程序或驱动程序安装。

我只是从工作PC复制了文件夹,并为以下项添加了环境变量:

CUDA工具包-CUDA_PATH(C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0)

CUDA示例-NVCUDASAMPLES_ROOT(C:\ ProgramData \ NVIDIA Corporation \ CUDA Samples \ v10.0)

(当然,这取决于您在代码项目中的需求,这就是我所需要的)

这对我来说适用于CUDA 9.2(MVS 2015)和10.0(MVS 2017)。