代码之家  ›  专栏  ›  技术社区  ›  winwaed

突然间,“uuBuiltin_ia32_sqrtsd_round”是未定义的,使用nvcc/gcc

  •  0
  • winwaed  · 技术社区  · 6 年前

    /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月份有一个日期戳。

    gcc和g++都报告为:7.5.0

    运行CUDA10.2(并由nvidia smi确认)。

    构建cuda-10.2/samples/0_Simple/matrixMul示例(使用make),构建时没有错误。

    错误中的标识符在哪里定义?我错过了什么?什么已经改变或被破坏了?

    0 回复  |  直到 6 年前
        1
  •  2
  •   winwaed    6 年前

    我想我已经找到问题了。@马克·格里斯对GDAL的评论是一个很大的线索。我用nvcc编译所有的东西。对于标准C++,这只会将工作传递给G++。我也有同样的include路径。当然,GDAL C++接口(我使用的)不能直接从CUDA调用。从cudanvcc中删除GDAL include路径并重新排列include文件修复了该问题。

    一个好的副作用是,它迫使我大大改善我的include文件卫生!

    要点:随着最新的Linux更新,GDAL includes甚至不喜欢被包含在CUDA代码中。