Pergunta

A série v4 do compilador gcc pode automaticamente vectorize laços usando o href="http://en.wikipedia.org/wiki/SIMD" rel="nofollow noreferrer"> SIMD processador em algum CPUs modernas, como o AMD Athlon ou chips Intel Pentium / núcleo. Como isso é feito?

Foi útil?

Solução

Os originais detalhes página oferece sobre como obter gcc para automaticamente vectorize loops, incluindo alguns exemplos:

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

Embora os exemplos são grandes, verifica-se a sintaxe para chamar essas opções com as mais recentes GCC parece ter mudado um pouco, vê agora:

Em resumo, as seguintes opções irá trabalhar para x86 chips com SSE2, dando um log de loops que foram vetorizadas:

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

Note que -msse também é uma possibilidade, mas ela só vai vetorizar loops de usando carros alegóricos, não duplica ou ints.

Outras dicas

Há uma Gimple (uma representação intermediária de GCC) passe pass_vectorize. Esta passagem vai permitir auto-vetorização a nível Gimple.

Para habilitar autovectorization (V4.4.0 GCC), precisamos seguintes etapas:

  1. Mencione o número de palavras em um vector de acordo com a arquitetura alvo. Isto pode ser feito através da definição do UNITS_PER_SIMD_WORD macro.
  2. Os modos de vetor que são possíveis necessidades a serem definidas em um arquivo separado normalmente <target>-modes.def. Este arquivo deve residir no diretório onde outros arquivos contendo as descrições de máquinas estão residindo em. (De acordo com o script de configuração. Se você pode mudar o script que você pode colocar o arquivo em qualquer diretório que você quer que ele seja in).
  3. Os modos que devem ser considerados para vetorização de acordo com arquitetura alvo. Como, 4 palavras constituirão um vetor ou oito meias palavras constituirão um vetor ou dois palavras duplas constituirão um vetor. Os detalhes da Isso precisa ser mencionado no arquivo <target>-modes.def. Por exemplo:

    VECTOR_MODES (INT, 8);     /*       V8QI V4HI V2SI /
    VECTOR_MODES (INT, 16);    /
    V16QI V8HI V4SI V2DI /
    VECTOR_MODES (FLOAT, 8);   /
               V4HF V2SF */

  4. Criar a porta. Vetorização pode ser ativado usando as opções de linha de comando -O2 -ftree-vectorize.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top