我有一个用 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)
...类似的错误
fatal error: ATen/ATen.h: No such file or directory
意味着您直接编写编译命令时使用的包含路径可能与CMake生成的编译命令使用的路径不同。
正如 @paleonix 所建议的,如果你让 Make 详细说明它的作用,通过在运行 make 时适当地设置
VERBOSE=1
变量,那么你将获得所有已执行命令的列表。识别失败的命令,并比较命令行。
另外,下次请提供有关此类故障的更多详细信息,因为我仅根据错误消息进行部分推测。