2017-04-26 357 views
2

我试图编译一个使用gcc编译icpc和mkl数学库的大代码。gcc头部错误:'_mm256_set_m128d'未在此范围内声明

这是需要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头文件中。

任何建议如何解决这个问题? 谢谢!

+1

请在gcc的bugzilla中提交错误报告,当您发现类似的东西时。 –

+1

https://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定义。