Comment vectoriser avec gcc?
Le v4 de la série de la gcc
compilateur peut vectoriser automatiquement des boucles en utilisant le SIMD processeur sur certains Processeurs modernes, tels que l'AMD Athlon ou Pentium Intel/Core puces. Comment est-ce fait?
Par "comment c'est fait", entendez-vous comment faire pour activer la gcc est autovectorization de soutien, ou comment le compilateur fait reconnaît vectorizable code et instruments de soutien?
OriginalL'auteur casualcoder | 2009-01-03
Vous devez vous connecter pour publier un commentaire.
Cette page vous propose de détails sur l'obtention de gcc pour vectoriser automatiquement
des boucles, dont voici quelques exemples:
http://gcc.gnu.org/projects/tree-ssa/vectorization.html
En résumé, les options suivantes de travail pour les puces x86 avec SSE2,
donnant un journal de boucles qui ont été vectorisé:
Noter que -msse est également une possibilité, mais il ne vectoriser des boucles
à l'aide de chars, pas de doubles, ou ints.
-ftree-vectorizer-verbose=5
est l'ancienne syntaxe, il faut utiliser la nouvelle syntaxe maintenant seeNe CCG ont plus d'document mis à jour sur la vectorisation?
OriginalL'auteur casualcoder
Il y a un gimple (une Représentation Intermédiaire de GCC) passer
pass_vectorize
. Ce pass permettra d'activer la fonction d'auto-vectorisation à gimple niveau.Pour permettre autovectorization (GCC V4.4.0), nous devons étapes suivantes:
UNITS_PER_SIMD_WORD
.<target>-modes.def
. Ce fichier doit résider dans le même répertoire que les autres fichiers contenant la machine descriptions résident sur le. (Comme par le script de configuration. Si vous pouvez modifier le script, vous pouvez placer le fichier dans n'importe quel répertoire vous souhaitez qu'il soit dans).Les modes de transport qui sont à considérer pour la vectorisation conformément à l'architecture cible. Comme, 4 mots constituera un vecteur ou huit demi-mots constituera un vecteur ou deux mots constituent un vecteur. Les détails de ce qui doit être mentionné dans le
<target>-modes.def
fichier. Par exemple:VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI /
VECTOR_MODES (INT, 16); / V16QI V8HI V4SI V2DI /
VECTOR_MODES (FLOAT, 8); / V4HF V2SF */
La construction du port. La vectorisation peut être activée à l'aide des options de ligne de commande
-O2 -ftree-vectorize
.OriginalL'auteur Ganesh Gopalasubramanian