英特尔编译器无法识别来自海湾合作委员会” avxintrin.h标识符

问题描述 投票:1回答:1

我试图让我的项目AVX指令。我可以用gcc构建它(GCC -mavx),但与英特尔的编译器(ICPC -maxv)的失败与以下错误avxintrin.h GCC头:

  • 没有声明“__m256d”标识符
  • “__builtin_ia32_loadupd256”未定义

仅供参考,这里是从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

c++ gcc avx icc
1个回答
3
投票

你为什么要使用从这样一个旧版本的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版本却丢失了。

© www.soinside.com 2019 - 2024. All rights reserved.