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.
Réponses
Trop de publicités?
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.
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
Brett Hale
Points
9724