Как векторизовать с помощью gcc?

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

Ответы

Ответ 1

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

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

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

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

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

Ответ 2

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

Для включения автообсечения (GCC V4.4.0) нам необходимо выполнить следующие шаги:

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

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