1. 下载安装dlib
配置CUDA加速环境:
git clone https://github.com/davisking/dlib.git
cd dlib
mkdir build
cd build
cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1
cmake --build .
过程中出现错误:
(dlib-gpu) [xl@GPU1 build]$ cmake --build .
[ 0%] Building NVCC (Device) object dlib/CMakeFiles/dlib.dir/cuda/dlib_generated_cuda_dlib.cu.o
/home/xl/dlib-gpu/dlib/cuda/cuda_dlib.cu(1762): error: calling a constexpr __host__ function("log1p") from a __device__ function("cuda_log1pexp") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
1 error detected in the compilation of "/tmp/tmpxft_00001c85_00000000-6_cuda_dlib.cpp1.ii".
CMake Error at dlib_generated_cuda_dlib.cu.o.Release.cmake:267 (message):
Error generating file
/home/xl/dlib-gpu/build/dlib/CMakeFiles/dlib.dir/cuda/./dlib_generated_cuda_dlib.cu.o
gmake[2]: *** [dlib/CMakeFiles/dlib.dir/cuda/dlib_generated_cuda_dlib.cu.o] Error 1
gmake[1]: *** [dlib/CMakeFiles/dlib.dir/all] Error 2
gmake: *** [all] Error 2
(dlib-gpu) [xl@GPU1 build]$ cmake --build . --expt-relaxed-constexpr
Unknown argument --expt-relaxed-constexpr
Usage: cmake --build <dir> [options] [-- [native-options]]
Options:
<dir> = Project binary directory to be built.
--target <tgt> = Build <tgt> instead of default targets.
May only be specified once.
--config <cfg> = For multi-configuration tools, choose <cfg>.
--clean-first = Build target 'clean' first, then build.
(To clean only, use --target 'clean'.)
--use-stderr = Ignored. Behavior is default in CMake >= 3.0.
-- = Pass remaining options to the native tool.
(dlib-gpu) [xl@GPU1 build]$
之后按照提示,找到出错的文件:
定位到出现错的代码行:cuda_dlib.cu(1762),即cuda_dlib.cu中的第1762行
1762行的内容如下:
这是一行关于涉及数学计算的代码,查了一下std::exp(x)和std::log1p(x)两个函数的用法:
std::exp(x) :https://zh.cppreference.com/w/cpp/numeric/math/exp
std::log1p(x):https://en.cppreference.com/w/cpp/numeric/math/log1p
也不知为什么将std::log1p()函数替换为std::log1pf()函数后,问题解决了
可能是因为:
重新编译:
(dlib-gpu) [xl@GPU1 build]$ cmake --build .
[ 0%] Building NVCC (Device) object dlib/CMakeFiles/dlib.dir/cuda/dlib_generated_cuda_dlib.cu.o
Scanning dependencies of target dlib
[ 0%] Building CXX object dlib/CMakeFiles/dlib.dir/base64/base64_kernel_1.cpp.o
[ 0%] Building CXX object dlib/CMakeFiles/dlib.dir/bigint/bigint_kernel_1.cpp.o
[ 0%] Building CXX object dlib/CMakeFiles/dlib.dir/bigint/bigint_kernel_2.cpp.o
[ 0%] Building CX