突然得到“__builtin_ia32_sqrtsd_round”是未定义的,用nvcc/gcc
Suddenly getting "__builtin_ia32_sqrtsd_round" is undefined, with nvcc/gcc
我有一个 CUDA NSight 项目,它编译正常,但突然就不行了。上周我确实安装了一些系统更新 (Ubuntu 18.04),这可能是原因(或部分原因)。不幸的是,我不知道到底安装了什么。我不记得在列表中看到任何 CUDA 东西。
总之,Nsight创建的nvcc命令行如下:
/usr/local/cuda-10.2/bin/nvcc -I/usr/include/gdal -O2 --compile --relocatable-device-code=false -gencode arch=compute_37,code=compute_37 -gencode arch=compute_61,code=compute_61 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_61,code=sm_61 -x cu -o "MySource.o" "../MySource.cu"
这给出了一堆非常相似的错误,开始:
/usr/lib/gcc/x86_64-linux-gnu/7/include/avx512fintrin.h(1761): error: identifier "__builtin_ia32_sqrtsd_round" is undefined
/usr/lib/gcc/x86_64-linux-gnu/7/include/avx512fintrin.h(1770): error: identifier "__builtin_ia32_sqrtss_round" is undefined
/usr/lib/gcc/x86_64-linux-gnu/7/include/avx512fintrin.h(2728): error: identifier "__builtin_ia32_scalefsd_round" is undefined
/usr/lib/gcc/x86_64-linux-gnu/7/include/avx512fintrin.h(2737): error: identifier "__builtin_ia32_scalefss_round" is undefined
avx512fintrin.h 确实存在于所引用的位置,并且日期戳可追溯到 12 月。
我是 运行 Ubuntu 18.04 x64。
gcc 和 g++ 都报告为:7.5.0
运行 CUDA 10.2(并由 nvidia-smi 确认)。
nvcc --version 报告版本 10.2 V10.2.89
构建 cuda-10.2/samples/0_Simple/matrixMul 示例(使用 make),构建没有错误。
错误中的标识符在哪里定义?我错过了什么?什么已更改或已损坏?
我相信我已经找到了问题所在。 @Marc Glisse 关于 GDAL 的评论是一个重要线索。我正在使用 nvcc 来编译所有内容。对于标准 C++,这只是将工作传递给 g++。我也有相同的包含路径。 GDAL C++ 接口(我正在使用)当然不能直接从 CUDA 调用。从 CUDA nvcc 中删除 GDAL 包含路径,并重新安排包含文件解决了问题。
一个很好的副作用是它迫使我大大提高了我的包含文件卫生!
要点:随着最新的 Linux 更新,GDAL 包括甚至不喜欢包含在 CUDA 代码中。
我有一个 CUDA NSight 项目,它编译正常,但突然就不行了。上周我确实安装了一些系统更新 (Ubuntu 18.04),这可能是原因(或部分原因)。不幸的是,我不知道到底安装了什么。我不记得在列表中看到任何 CUDA 东西。
总之,Nsight创建的nvcc命令行如下:
/usr/local/cuda-10.2/bin/nvcc -I/usr/include/gdal -O2 --compile --relocatable-device-code=false -gencode arch=compute_37,code=compute_37 -gencode arch=compute_61,code=compute_61 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_61,code=sm_61 -x cu -o "MySource.o" "../MySource.cu"
这给出了一堆非常相似的错误,开始:
/usr/lib/gcc/x86_64-linux-gnu/7/include/avx512fintrin.h(1761): error: identifier "__builtin_ia32_sqrtsd_round" is undefined
/usr/lib/gcc/x86_64-linux-gnu/7/include/avx512fintrin.h(1770): error: identifier "__builtin_ia32_sqrtss_round" is undefined
/usr/lib/gcc/x86_64-linux-gnu/7/include/avx512fintrin.h(2728): error: identifier "__builtin_ia32_scalefsd_round" is undefined
/usr/lib/gcc/x86_64-linux-gnu/7/include/avx512fintrin.h(2737): error: identifier "__builtin_ia32_scalefss_round" is undefined
avx512fintrin.h 确实存在于所引用的位置,并且日期戳可追溯到 12 月。
我是 运行 Ubuntu 18.04 x64。 gcc 和 g++ 都报告为:7.5.0
运行 CUDA 10.2(并由 nvidia-smi 确认)。 nvcc --version 报告版本 10.2 V10.2.89
构建 cuda-10.2/samples/0_Simple/matrixMul 示例(使用 make),构建没有错误。
错误中的标识符在哪里定义?我错过了什么?什么已更改或已损坏?
我相信我已经找到了问题所在。 @Marc Glisse 关于 GDAL 的评论是一个重要线索。我正在使用 nvcc 来编译所有内容。对于标准 C++,这只是将工作传递给 g++。我也有相同的包含路径。 GDAL C++ 接口(我正在使用)当然不能直接从 CUDA 调用。从 CUDA nvcc 中删除 GDAL 包含路径,并重新安排包含文件解决了问题。
一个很好的副作用是它迫使我大大提高了我的包含文件卫生!
要点:随着最新的 Linux 更新,GDAL 包括甚至不喜欢包含在 CUDA 代码中。