Question

La série v4 du compilateur gcc peut vectoriser automatiquement les boucles à l'aide du processeur SIMD . sur certains processeurs modernes, tels que les puces AMD Athlon ou Intel Pentium / Core. Comment cela se fait-il?

Était-ce utile?

La solution

La page d'origine offre des détails sur la manière de vectoriser automatiquement gcc boucles, y compris quelques exemples:

http://gcc.gnu.org/projects/tree-ssa /vectorization.html

Bien que les exemples soient excellents, la syntaxe utilisée pour appeler ces options avec la dernière version de GCC semble avoir un peu changé. Voir maintenant:

En résumé, les options suivantes fonctionneront pour les puces x86 avec SSE2, donnant un journal des boucles vectorisées:

gcc -O2 -ftree-vectorize -msse2 -ftree-vectorizer-verbose=5

Notez que -msse est également une possibilité, mais elle ne vectorisera que les boucles en utilisant des floats, pas des doubles ou des ints.

Autres conseils

Il existe un gimple (une représentation intermédiaire de GCC) pass_vectorize. Cette passe permettra l’auto-vectorisation au niveau du joueur.

Pour activer l'autovectorisation (GCC V4.4.0), nous devons suivre les étapes suivantes:

  1. Mentionnez le nombre de mots dans un vecteur selon l’architecture cible. Cela peut être fait en définissant la macro UNITS_PER_SIMD_WORD.
  2. Les modes vectoriels possibles doivent être définis dans un fichier séparé, généralement <target>-modes.def. Ce fichier doit résider dans le répertoire où résident les autres fichiers contenant les descriptions de la machine. (Selon le script de configuration. Si vous pouvez le modifier, vous pouvez placer le fichier dans le répertoire de votre choix.)
  3. Les modes à prendre en compte pour la vectorisation selon l'architecture cible. De même, 4 mots constitueront un vecteur ou huit demi-mots constitueront un vecteur ou deux mots doubles constitueront un vecteur. Les détails de cette opération doivent être mentionnés dans le fichier VECTOR_MODES (INT, 8);     /*       V8QI V4HI V2SI /
    VECTOR_MODES (INT, 16);    /
    V16QI V8HI V4SI V2DI /
    VECTOR_MODES (FLOAT, 8);   /
               V4HF V2SF */
    . Par exemple:

    -O2 -ftree-vectorize

  4. Construisez le port. La vectorisation peut être activée à l’aide des options de ligne de commande <=>.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top