Как векторизовать с помощью 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
.