2016-08-24 2 views
0

Я пытаюсь понять, почему gcc 4.9.0 не будет векторизовать простое добавление массива при использовании gcc 4.9.0, используя -O -ftree-vectorize:cilk plus array notation with gcc 4.9.0

int a[256], b[256], c[256]; 
foo() { 
    int i; 
    a[:] = b[:] + c[:]; 
} 

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

>testvec.c:5: note: ===== analyze_loop_nest ===== 
>testvec.c:5: note: === vect_analyze_loop_form === 
>testvec.c:5: note: not vectorized: control flow in loop. 
>testvec.c:5: note: bad loop form. 

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

ответ

0

Похоже, только последнюю версию GCC (6.1) может векторизации ваш пример:

http://melpon.org/wandbox/permlink/LOIweYNRRLXeJsZf

+0

Спасибо, я установил V 6.1 и он работает отлично.. Удивлен, что для этой работы потребовалась последняя версия. –

Смежные вопросы