Как векторизовать с помощью gcc?
-
03-07-2019 - |
Вопрос
Серия v4 gcc
компилятор может автоматически векторизовать циклы, используя SIMD процессор на некоторых современных процессорах, таких как чипы AMD Athlon или Intel Pentium/Core.Как это делается?
Решение
Оригинальная страница предлагает подробную информацию о том, как GCC для автоматической векторизации циклов, включая несколько примеров:
http://gcc.gnu.org/projects/tree-ssa/vectorization.html
Хотя примеры великолепны, оказывается, что синтаксис вызова этих опций в последней версии GCC, похоже, немного изменился, см. сейчас:
Таким образом, следующие варианты будут работать для чипов x86 с SSE2, предоставляя журнал петель, которые были векторизованы:
gcc -O2 -ftree-vectorize -msse2 -ftree-vectorizer-verbose=5
Обратите внимание, что -MSSE также является возможностью, но он будет векторизировать только петли, используя поплавки, а не удваивание или INT.
Другие советы
Существует пропуск (промежуточное представление GCC). pass_vectorize
.Этот проход включит автоматическую векторизацию на уровне gimple.
Чтобы включить автовекторизацию (GCC V4.4.0), нам необходимо выполнить следующие шаги:
- Укажите количество слов в векторе согласно целевой архитектуре.Это можно сделать, определив макрос
UNITS_PER_SIMD_WORD
. - Возможные векторные режимы обычно необходимо определять в отдельном файле.
<target>-modes.def
.Этот файл должен находиться в каталоге, где находятся другие файлы, содержащие описания компьютеров.(Согласно сценарию конфигурации.Если вы можете изменить сценарий, вы можете поместить файл в любой каталог, в котором хотите, чтобы он находился). Режимы, которые следует учитывать при векторизации в соответствии с целевой архитектурой.Например, 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
.