Как я могу отключить векторизацию при использовании GCC? - PullRequest
7 голосов
/ 15 октября 2011

Я компилирую свой код с помощью следующей команды:

gcc -O3 -ftree-vectorizer-verbose=6 -msse4.1 -ffast-math 

При этом все оптимизации включены.

Но я хочу отключить векторизацию при сохранении других оптимизаций.

Ответы [ 3 ]

11 голосов
/ 15 октября 2011

Большинство переключателей GCC можно использовать с префиксом no, чтобы отключить их поведение. Попробуйте с -fno-tree-vectorize (после -O3 в командной строке).

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

Вы также можете выборочно включать и отключать векторизацию с помощью атрибутов функции оптимизации или прагм

http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

http://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html

например,

__attribute__((optimize("no-tree-vectorize")))
void f(double * restrict a, double * restrict b)
{
    for (int i = 0; i < 256; i++)
        a[i] += b[i];
}
0 голосов
/ 14 ноября 2015

Отлично, теперь, когда gcc стал более агрессивным в векторизации, например,

extern "C" __attribute__((optimize("no-tree-vectorize")))
/* Subroutine */
int s111_ (integer * ntimes, integer * ld, integer * n,
           real * ctime, real * dtime,
           real * __restrict a, real * b, real * c__, real * d__,
           real * e, real * aa, real * bb, real * cc)
{
    ....
    for (i__ = 2; i__ <= i__2; i__ += 2)
        a[i__] = a[i__ - 1] + b[i__];
    ....

В приведенном выше случае удаление restrict использовалось для выполнения работы, но теперь g ++ 6.0 не может быть остановлено векторизацией путем удаления __restrict.

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