Domanda

La serie v4 del compilatore gcc può vettorializzare automaticamente i loop usando il processore SIMD su alcune CPU moderne, come i chip AMD Athlon o Intel Pentium / Core. Come viene fatto?

È stato utile?

Soluzione

La pagina originale offre dettagli su come far vettorizzare automaticamente gcc loop, inclusi alcuni esempi:

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

Mentre gli esempi sono fantastici, risulta che la sintassi per chiamare quelle opzioni con l'ultimo GCC sembra essere cambiata un po ', vedi ora:

In breve, le seguenti opzioni funzioneranno per i chip x86 con SSE2, dando un registro di loop che sono stati vettorializzati:

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

Nota che -msse è anche una possibilità, ma vettorializzerà solo i loop usando float, non doppi o ints.

Altri suggerimenti

Esiste un pass gimple (una rappresentazione intermedia di GCC) pass_vectorize. Questo passaggio consentirà l'auto-vettorializzazione a livello di gimple.

Per abilitare l'autovectorization (GCC V4.4.0), dobbiamo seguire i seguenti passi:

  1. Indica il numero di parole in un vettore secondo l'architettura di destinazione. Questo può essere fatto definendo la macro UNITS_PER_SIMD_WORD.
  2. Le modalità vettoriali possibili devono essere definite in un file separato in genere <target>-modes.def. Questo file deve risiedere nella directory in cui risiedono altri file contenenti le descrizioni delle macchine. (Come per lo script di configurazione. Se è possibile modificare lo script, è possibile posizionare il file in qualunque directory si desideri che sia).
  3. Le modalità da prendere in considerazione per la vettorializzazione secondo l'architettura di destinazione. Ad esempio, 4 parole costituiranno un vettore o otto mezze parole costituiranno un vettore o due parole doppie costituiranno un vettore. I dettagli di questo devono essere menzionati nel file VECTOR_MODES (INT, 8);     /*       V8QI V4HI V2SI /
    VECTOR_MODES (INT, 16);    /
    V16QI V8HI V4SI V2DI /
    VECTOR_MODES (FLOAT, 8);   /
               V4HF V2SF */
    . Ad esempio:

    -O2 -ftree-vectorize

  4. Crea la porta. La vettorializzazione può essere abilitata usando le opzioni della riga di comando <=>.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top