Получение авто-векторизации с GCC? - PullRequest
3 голосов
/ 22 июня 2011

В контексте оценки вероятностей отрицательного логарифма, я должен выполнить кучу операций, которые могут выиграть от векторизации

0) для (i = 1 ... n) {a [i] = 0; } // но это я думаю

std :: fill (a.begin (), a.end (), 0) уже оптимален

1) для (i = 1 ... n) {a [i] + = b * c [i]; }

2) сумма = 0; для (i = 1 .. n) {sum + = a [i] * log (b [i] / c); }

знаете, есть ли надежда заставить gcc 434 сделать автоматическая векторизация, и как я должен кодировать цикл, чтобы помочь ему (например, используя индексы против итераторов, я должен разбить (2) на более простые петли, ...) до сих пор я использую удвоения, должны проверить, могу ли я перейти на плавания в минимум для (1).

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

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

Используйте необходимые опции, -O3 -msse2

Дополнительные параметры см. В документации выше.

0 голосов
/ 11 декабря 2012

для автоматического векторизации сокращений с плавающей запятой, таких как 2), вам нужно включить -funsafe-math-optimizations

на i386-подобных целях, вам также нужно добавить -mfpmath = sse

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...