首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将gcc升级为8/9触发器“错误:不支持的指令‘`vmovdqu'”而gcc-7运行良好

将gcc升级为8/9触发器“错误:不支持的指令‘`vmovdqu'”而gcc-7运行良好
EN

Stack Overflow用户
提问于 2021-01-14 01:40:14
回答 1查看 250关注 0票数 0

我用https://arrow.apache.org/ 3.15和gcc/g++-7 (7.5.0)编译了Apache (https://arrow.apache.org/),运行良好。但是,当我用相同的CMake版本将gcc/g++升级到8(8.4.0)和9(9.3.0)时,我得到了以下错误:

代码语言:javascript
复制
/tmp/ccrlCxYO.s: Assembler messages:
/tmp/ccrlCxYO.s:5651: Error: unsupported instruction `vmovdqu'
make[2]: *** [src/parquet/CMakeFiles/parquet_objlib.dir/build.make:194: src/parquet/CMakeFiles/parquet_objlib.dir/encoding.cc.o] Error 1

目标文件(encoding.cc)是一个纯C++文件。它使用Intel Intrinsics,但不包含任何组装代码。

这是我第一次看到“汇编程序消息”错误。所以我请求你帮助我理解这意味着什么。我的问题是:

  1. 汇编程序什么时候会抱怨不受支持的指令?我以前在运行时见过不受支持的指令,但没有看到这个“汇编程序消息”。因为这发生在GCC升级之后,我想这是新编译器/汇编程序的一个新特性吧?我找不到任何文档,所以如果有人能向我指出任何解释这一点的文档,我将非常感激。

  1. target_compile_options中添加"-mavx“并不能解决这个问题。有人有解决这个问题的建议吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-14 05:11:52

TLDR:我发现解决方案是在target_compile_options中添加"-mavx512bw“

如果你想了解更多关于根源的细节,以及我是如何发现的,请继续阅读。

在搜索了一下之后,我发现这个网页谈论的是GNU的一个bug。https://www.mail-archive.com/bug-binutils@gnu.org/msg30524.html

该网页报告说,AS不承认"vmovdqu16",这需要AVX512VL+AVX512BW的支持。但是,汇编程序会报告一条错误消息,表示不支持"vmovdqu“。

这提醒我,我可能会遇到同样的问题。AS实际上收到"vmovdqu8/16/32“,但它报告"vmovdqu”。此错误消息非常具有误导性,因为"vmovdqu“和"vmovdqu16”需要不同的指令集支持。前者只需要AVX,而后者则需要AVX512BW+AVX512VL。

我决定尝试将-mavx512bw添加到编译选项中(我以前已经有avx512vl了)。它实际上解决了问题。

所以,我认为整个故事是: GCC的新版本使用了一些新的SIMD指令,而旧GCC并没有使用。

希望这能帮助那些遇到类似问题的人。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65712210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档