我试图让我的项目AVX指令。我可以用gcc构建它(GCC -mavx),但与英特尔的编译器(ICPC -maxv)的失败与以下错误avxintrin.h GCC头:
仅供参考,这里是从avxintrin.h的代码:
extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_loadu_pd (double const *__P)
{
return (__m256d) __builtin_ia32_loadupd256 (__P);
}
据我了解,这些标识符已内置在GCC,这就是为什么不被认可ICC功能;我想我应该以某种方式隐藏ICC avxintrin.h头,使其利用自身的内置插件(“内在”)。我是正确的,我怎么能做出独立中文笔会的工作?
GCC 4.4.7,ICPC 17.0
你为什么要使用从这样一个旧版本的GCC与ICC头?在GCC 4.4系列早AVX。 (4.4.7是从2012年开始,但它仍然是比较古老的)。目前GCC 8.2,或7.4旧稳定。 (如果你关心GCC曲调现代CPU,特别是与AVX如何,使用该知道-march=skylake
和-march=znver1
更新的GCC)。
ICC不依赖于GCC头出于某种原因,显然包括immintrin.h
。 IDK为什么ICC没有完全提供自己的定义为英特尔内部函数。
一个工作安装ICC17的不明白,GCC内建的,你#include <immintrin.h>
后。 https://godbolt.org/z/PKumZx。但是,这是一个更近的immintrin.h
,我想。
不像ICC17,ICC19将编译__builtin_ia32_loadupd256(p)
一个double*p
甚至没有任何声明或包括。
如果您声明自己qazxsw POI,除非你把qazxsw POI以正确的顺序,等等无论如何,尝试从一个新的gcc抓头ICC抱怨,你的ICC可能是为GCC太新。
此外,不直接包括__m256d
,包括__attribute__
。
从gcc8.2 avxintrin.h有avxintrin.h
一个IFDEF。也许你的旧的gcc版本却丢失了。