我们正在开始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()
答案 0 :(得分:0)
这很有可能。 CUDA安装(与nVIDIA驱动程序安装相反)只是磁盘上的一堆文件。如果您甚至愿意将它们全部放入一个公共目录中,则实际上是C:\Program Files\CUDA
(或Windows上的默认值)还是C:\thirdparty\cuda
都没关系。
您的“唯一”问题是您的相关环境变量和某些注册表项(不确定,因为我的Linux经验)。环境变量可以(或可以不包括)以下一些变量:CUDA_DIR
,LD_LIBRARY_PATH
,C_INCLUDE_PATH
,LIBRARY_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)。