150 votes

fichiers d'en-tête pour SIMD intrinsics

Quels fichiers d'en-tête fournissent les éléments intrinsèques des différentes extensions du jeu d'instructions SIMD (MMX, SSE ...)? Il semble impossible de trouver une telle liste en ligne. Corrige moi si je me trompe.

197voto

FredOverflow Points 88201
<mmintrin.h>  MMX

<xmmintrin.h> SSE

<emmintrin.h> SSE2

<pmmintrin.h> SSE3

<tmmintrin.h> SSSE3

<smmintrin.h> SSE4.1

<nmmintrin.h> SSE4.2

<ammintrin.h> SSE4A

<wmmintrin.h> AES

<immintrin.h> AVX

83voto

hirschhornsalz Points 16306

Si vous utilisez juste

 #include <x86intrin.h>
 

il inclura tous les en-têtes SSE / AVX activés en fonction des commutateurs du compilateur, tels que -march=corei7 ou seulement -march=native . De plus, certaines instructions spécifiques à x86 telles que bswap ou ror deviennent disponibles en tant qu'intrinsèques.

59voto

Marat Dukhan Points 4768

Le nom d'en-tête dépend du compilateur et de l'architecture cible.

  • Pour Microsoft C++ (ciblage, x86, x86-64 ou du BRAS) et Intel Compilateur C/C++ pour Windows, utilisez intrin.h
  • Pour gcc/clang/cpi ciblage x86/x86-64 utilisation x86intrin.h
  • Pour gcc/clang/armcc ciblant les BRAS avec des NÉONS utiliser arm_neon.h
  • Pour gcc/clang/armcc ciblage BRAS avec WMMX utiliser mmintrin.h
  • Pour gcc/clang/xlcc ciblage PowerPC avec VMX (aka Altivec) et/ou VSX utiliser altivec.h
  • Pour gcc/clang ciblage PowerPC avec SPE utiliser spe.h

Vous pouvez gérer tous ces cas conditionnelle de prétraitement des directives:

#if defined(_MSC_VER)
     /* Microsoft C/C++-compatible compiler */
     #include <intrin.h>
#elif defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__))
     /* GCC-compatible compiler, targeting x86/x86-64 */
     #include <x86intrin.h>
#elif defined(__GNUC__) && defined(__ARM_NEON__)
     /* GCC-compatible compiler, targeting ARM with NEON */
     #include <arm_neon.h>
#elif defined(__GNUC__) && defined(__IWMMXT__)
     /* GCC-compatible compiler, targeting ARM with WMMX */
     #include <mmintrin.h>
#elif (defined(__GNUC__) || defined(__xlC__)) && (defined(__VEC__) || defined(__ALTIVEC__))
     /* XLC or GCC-compatible compiler, targeting PowerPC with VMX/VSX */
     #include <altivec.h>
#elif defined(__GNUC__) && defined(__SPE__)
     /* GCC-compatible compiler, targeting PowerPC with SPE */
     #include <spe.h>
#endif

3voto

Brett Hale Points 9724

Pour tous ceux qui consultent la question récemment, utilisez <immintrin.h> - cela est promu par gcc, clang, icc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X