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?

War es hilfreich?

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:

  1. 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.
  2. 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).
  3. 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 */

  4. den Hafen bauen. Vektorisierung kann mit dem Befehlszeilenoption -O2 -ftree-vectorize aktiviert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top