Как векторизовать с GCC? - PullRequest
16 голосов
/ 03 января 2009

Серия v4 компилятора gcc может автоматически векторизовать циклы с использованием процессора SIMD на некоторых современных процессорах, таких как чипы AMD Athlon или Intel Pentium / Core. Как это сделать?

Ответы [ 2 ]

21 голосов
/ 03 января 2009

Исходная страница содержит подробную информацию о получении gcc для автоматической векторизации. циклы, включая несколько примеров:

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

Хотя примеры хороши, оказывается, что синтаксис для вызова этих опций с последним GCC, похоже, немного изменился, смотрите сейчас:

В итоге, следующие опции будут работать для чипов x86 с SSE2, выдача журнала циклов, которые были векторизованы:

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

Обратите внимание, что -msse также возможен, но он будет только векторизовать циклы используя поплавки, а не двойные или целые.

8 голосов
/ 03 ноября 2009

Имеется пропуск (Промежуточное Представление GCC), проход pass_vectorize. Этот проход включит автоматическую векторизацию на уровне gimple.

Чтобы включить автовекторизацию (GCC V4.4.0), нам нужно выполнить следующие шаги:

  1. Укажите количество слов в векторе в соответствии с целевой архитектурой. Это можно сделать, определив макрос UNITS_PER_SIMD_WORD.
  2. Возможные векторные режимы должны быть определены в отдельном файле, обычно <target>-modes.def. Этот файл должен находиться в каталоге, где находятся другие файлы, содержащие описания машин. (Согласно сценарию конфигурации. Если вы можете изменить сценарий, вы можете поместить файл в любой каталог, в котором вы хотите его разместить).
  3. Режимы, которые должны учитываться при векторизации в соответствии с целевой архитектурой. Например, 4 слова будут составлять вектор, или восемь половин слов будут составлять вектор, или два двойных слова будут составлять вектор. Детали этого должны быть упомянуты в файле <target>-modes.def. Например:

    VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI <em>/<br /> VECTOR_MODES (INT, 16); /</em> V16QI V8HI V4SI V2DI <em>/<br /> VECTOR_MODES (FLOAT, 8); /</em> V4HF V2SF */
  4. Построить порт. Векторизация может быть включена с помощью параметров командной строки -O2 -ftree-vectorize.

...