Centos 7.7 上的 Vscode 无法识别 Intel AVX 功能,关于 __mm256i 的错误
Posted
技术标签:
【中文标题】Centos 7.7 上的 Vscode 无法识别 Intel AVX 功能,关于 __mm256i 的错误【英文标题】:Vscode on Centos 7.7 does not recognize Intel AVX functions, errors about __mm256i 【发布时间】:2019-10-07 15:57:44 【问题描述】:我想通过在我的项目中包含<immintrin.h>
库来使用一些avx2
函数;但是,Vscode 似乎无法识别这些功能,因为它显示我的项目包含各种identifier "__m256i" is undefined
错误作为附件图片。我可以顺利编译和运行,但错误确实令人不安。我尝试将这些类型的声明添加到 Vscode 路径中,但没有帮助。
我在 Centos 7.7 中使用最新的 Vscode 版本。
Vscode show errors
Try added the include path, but does not help
【问题讨论】:
可能您忘记使用-march=haswell
或-march=znver1
告诉编译器它可以生成在没有 AVX2 的CPU 上无法运行的代码。如果在编译时未启用 AVX,则标头甚至不会定义 __m256i
类型。 (GCC/clang 只允许您通过目标选项将内在函数用于允许它们发出的指令)此外,GCC4.8 已经很老了。
Compile C++ code with AVX2/AVX512 intrinsics on AVX的可能重复
我刚刚安装了GCC 9.2.0,但是问题没有解决。注意我可以正常编译运行,所以问题可能出在Vscode本身,比如include路径什么的。
我并不是说 gcc9.2 会解决这个问题,只是在修复它后生成质量更好的 asm 是个好主意,尤其是对于使用 AVX 和 AVX2 内在函数的代码。经验法则:使用比您关心的硬件更新的编译器。
【参考方案1】:
__mm256i
是 __m256i
的拼写错误。
类型名称有 2 个下划线和一个 m
,如 __m128i
内部函数名称有一个下划线和两个 em,例如 _mm_add_epi32
我可以顺利编译运行,但是报错真的很烦。
这太难以置信了,你确定你没有在你的源代码中引入这个错误之前运行旧版本的可执行文件吗?这是一个错误,而不是警告; gcc 不会从具有此错误的源文件中生成.o
。硬错误与“顺利”编译相反。
【讨论】:
我的意思是,这并不是真正的错误。它们只是在Vscode中显示为错误ONLY,我可以使用GCC正常编译和运行而没有任何错误。 @thnghh:这没有意义。您在什么情况下使用__mm256i
?如果是__mm256i my_vector
,那就是编译时错误。我对 Vscode 一无所知,但我认为它是在总结 gcc 错误输出。如果不是,那我猜就可以解释了。
@thnghh 这可能是在一个标题中,你实际上没有从任何源文件中包含它?此外,如果此答案不能解决您的问题,您应该提供minimal reproducible example。
@PeterCordes 这是我的错,应该是__m256i
如你所说。【参考方案2】:
我自己通过重启电脑解决了这个问题。我想当时的电脑不知何故无法识别英特尔 AVX 功能的定义。
【讨论】:
以上是关于Centos 7.7 上的 Vscode 无法识别 Intel AVX 功能,关于 __mm256i 的错误的主要内容,如果未能解决你的问题,请参考以下文章
VSCode(Vetur) 无法识别组件中的自定义 Vue 属性
解决CentOS 7.7,/boot目录下所有文件丢失,系统无法启动的解决办法