Wie mit gcc vektorisieren?
-
03-07-2019 - |
Frage
Die v4 Serie des gcc
Compiler automatisch kann vectorize Schleifen mit dem SIMD Prozessor auf einig moderner CPUs, wie der AMD Athlon oder Intel Pentium / Core-Chips. Wie wird das gemacht?
Lösung
Die ursprüngliche Seite bietet Informationen über gcc immer automatisch vectorize Schleifen, darunter einige Beispiele:
http://gcc.gnu.org/projects/tree-ssa /vectorization.html
Während die Beispiele groß sind, ist es die Syntax stellt sich heraus, für diese Optionen Aufruf mit den neuesten GCC ein wenig verändert zu haben scheint, sehen jetzt:
Insgesamt werden die folgenden Optionen mit SSE2 für x86-Chips arbeiten, gibt ein Protokoll der Schleifen, die vektorisiert wurden:
gcc -O2 -ftree-vectorize -msse2 -ftree-vectorizer-verbose=5
Beachten Sie, dass -msse ist auch eine Möglichkeit, aber es wird nur Schleifen vektorisiert mit Schwimmer, nicht verdoppelt oder ints.
Andere Tipps
Es gibt eine Gimple (eine Zwischendarstellung von GCC) passieren pass_vectorize
. Dieser Pass wird Auto-Vektorisierung auf Gimple Ebene ermöglichen.
Zur Aktivierung autovectorization (GCC V4.4.0), müssen wir folgende Schritte:
- Erwähnen Sie die Anzahl der Wörter in einem Vektor gemäß Zielarchitektur. Dies kann durch die Definition des Makro
UNITS_PER_SIMD_WORD
erfolgen. - Die Vektor-Modi, die möglichen Bedürfnisse sind in einer separaten Datei
<target>-modes.def
in der Regel definiert werden. Diese Datei hat in dem Verzeichnis befindet, in den anderen Dateien, die die Maschinenbeschreibungen enthalten, werden mit Wohnsitz auf. (Stand der Konfigurationsskript. Wenn Sie das Skript ändern können Sie die Datei in platzieren können, was auch immer Verzeichnis, das Sie wollen, dass es in sein). -
Die Modi, die für die Vektorisierung als pro Zielarchitektur zu berücksichtigen sind. Wie, 4 Worte bilden einen Vektor oder acht Halbwörtern einen Vektor oder zwei Doppel Worte bilden einen Vektor darstellen. Die Details hierzu muss in der
<target>-modes.def
Datei erwähnt werden. Zum Beispiel:VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI /
VECTOR_MODES (INT, 16); / V16QI V8HI V4SI V2DI /
VECTOR_MODES (FLOAT, 8); / V4HF V2SF */ -
den Hafen bauen. Vektorisierung kann mit dem Befehlszeilenoption
-O2 -ftree-vectorize
aktiviert werden.