gcc 标头错误:“_mm256_set_m128d”未在此范围内声明

Posted

技术标签:

【中文标题】gcc 标头错误:“_mm256_set_m128d”未在此范围内声明【英文标题】:gcc header error: '_mm256_set_m128d' was not declared in this scope 【发布时间】:2017-04-26 16:33:29 【问题描述】:

我正在尝试编译使用 icpc 和 mkl 数学库编译的大型代码,而不是使用 gcc。

这是需要 AVX 的代码。

#include <immintrin.h>
#include <stdint.h>
#include <math.h>
.
.

_mm256_set_m128d(  _mm256_extractf128_pd(t2, 0) + _mm256_extractf128_pd(t2, 1),
                                        _mm256_extractf128_pd(t1, 0) + _mm256_extractf128_pd(t1, 1));

我在编译时启用了 -mavx 标志,正如一些帖子中建议的那样,以启用高级矢量化。 _mm256_set_m128d 未在 immintrin.h 或任何其他 gcc 包含文件(版本 5.3)中定义。

我发现它可用于 intel 头文件 - 在 intel 编译器提供的 immintrin.h 头文件中。

有什么建议可以解决这个问题吗? 谢谢!

【问题讨论】:

当您发现类似情况时,请在 gcc 的 bugzilla 中提交错误报告。 gcc.gnu.org/bugzilla/show_bug.cgi?id=80582 【参考方案1】:

您可以像这样定义自己的宏:

#define _mm256_set_m128d(vh, vl) \
        _mm256_insertf128_pd(_mm256_castpd128_pd256(vl), (vh), 1)

将它括在一个合适的#ifdef/#endif 内,这样它当然只为 gcc 定义。

【讨论】:

以上是关于gcc 标头错误:“_mm256_set_m128d”未在此范围内声明的主要内容,如果未能解决你的问题,请参考以下文章

为啥某些 LLVM 标准库标头包含其他标头但 GCC 不 [重复]

在优胜美地的 GCC 编译期间不再可能包含 Carbon 标头?

安装在 /usr/local 以外时 gcc 的默认标头路径

为啥 Windows gcc (cygwin) 不写 ELF 标头?

stl_vector.h 标头中的分段错误

Sun 在 Solaris 11 上提供 GCC 的 _blsr_u64 标头?