我有一些严重依赖于Eigen的代码。我想用CUDA优化它,但是当我编译时,我得到:
[tcai4@golubh4 Try1]$ nvcc conv_parallel.cu -I /home/tcai4/project-cse/Try1 -lfftw3 -o conv.o
In file included from Eigen/Dense:1,
from Eigen/Eigen:1,
from functions.h:8,
from conv_parallel.cu:10:
Eigen/Core:44:34: error: math_functions.hpp: No such file or directory
我认为math_functions.hpp是来自CUDA的文件。有人能帮我弄清楚为什么nvcc找不到它?
编辑:我正在使用CUDA 5.5和Eigen 3.3,除了链接Eigen和fftw3库之外,我没有使用任何其他标志(从我的代码中可以看到)。
答案 0 :(得分:22)
我在使用Cuda 9.1构建TensorFlow 1.4.1时遇到了这个问题,奇怪的是math_functions.hpp
只存在于include/crt
。
创建从cuda/include/math_functions.hpp
到cuda/include/crt/math_functions.hpp
的符号链接修复了问题:
ln -s /usr/local/cuda/include/crt/math_functions.hpp /usr/local/cuda/include/math_functions.hpp
答案 1 :(得分:3)
nvcc找不到相关文件的原因是因为该文件是CUDA数学库的一部分,CUDA数学库是在CUDA 6中引入的。您的近4年版CUDA早于数学库的发布。您的CUDA版本不包含所述文件。
因此,您应该假设,如果没有先更新到更新版本的CUDA工具包,那么您尝试执行的操作将无法正常工作。
答案 2 :(得分:0)
创建符号链接有时会导致其他并发症。
您可以尝试更换
// We need math_functions.hpp to ensure that that EIGEN_USING_STD_MATH macro
// works properly on the device side
#include <math_functions.hpp>
使用
// We need cuda_runtime.h to ensure that that EIGEN_USING_STD_MATH macro
// works properly on the device side
#include <cuda_runtime.h>
在
/usr/include/eigen3/Eigen/Core
,
对我有用。
答案 3 :(得分:0)
找不到“ math_functions.hpp”的原因是因为“ math_functions.hpp”已重命名为“ math_functions.h”。所以你只需要去
/usr/include/eigen3/Eigen/Core
并将“ math_functions.hpp”更改为“ math_functions.h”