为什么编译 CUDA C++ 项目时 nvcc 不起作用而 cmake 起作用?

问题描述 投票:0回答:1

我有一个用 CUDA C++ 编写的代码,我可以使用 CMake 构建这个项目,Make 并像平常一样运行它。但是当我尝试使用 nvcc 来调试它时,它会抛出类似的错误

fatal error: ATen/ATen.h: No such file or directory

我的CUDA版本是:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Mon_Oct_12_20:09:46_PDT_2020
Cuda compilation tools, release 11.1, V11.1.105
Build cuda_11.1.TC455_06.29190527_0

我有一台带有 4 个 GPU 的服务器。
有什么想法可能是什么问题吗?

我尝试了以下代码:

nvcc -o test1 test.cu

所有源文件和头文件(

.cu
文件和
.h
文件)都在一个文件夹中,
src

我在项目文件夹内的文件夹
Build
中构建我的项目。
我的
CMakeLists.txt
文件包含以下代码:

cmake_minimum_required(VERSION 3.10)
project("test1")

set(CMAKE_PREFIX_PATH "/data/extern/libtorch/share/cmake/Torch")
find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")

include_directories(test1 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src) #add header
include_directories("${TORCH_INCLUDE_DIRS}")

find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})

file(GLOB_RECURSE SRC_FILES src/*.cu) #add all source files in the system
add_executable("${PROJECT_NAME}" ${SRC_FILES})
target_link_libraries(test1 ${PYTHON_LIBRARIES})
target_link_libraries(test1 "${TORCH_LIBRARIES}")
set_property(TARGET test1 PROPERTY CXX_STANDARD 14)
if (MSVC)
  file(GLOB TORCH_DLLS "${TORCH_INSTALL_PREFIX}/lib/*.dll")
  add_custom_command(TARGET test1 
                     POST_BUILD
                     COMMAND ${CMAKE_COMMAND} -E copy_if_different
                     ${TORCH_DLLS}
                     $<TARGET_FILE_DIR:test1 >)
endif (MSVC)
debugging cmake cuda nvcc libtorch
1个回答
1
投票

...类似的错误

fatal error: ATen/ATen.h: No such file or directory

意味着您直接编写编译命令时使用的包含路径可能与CMake生成的编译命令使用的路径不同。

正如 @paleonix 所建议的,如果你让 Make 详细说明它的作用,通过在运行 make 时适当地设置

VERBOSE=1
变量,那么你将获得所有已执行命令的列表。识别失败的命令,并比较命令行。

另外,下次请提供有关此类故障的更多详细信息,因为我仅根据错误消息进行部分推测。

© www.soinside.com 2019 - 2024. All rights reserved.