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 的默认标头路径