В настоящее время я пытаюсь использовать автовекторизацию с g ++.
Для этого я использую следующий минимальный пример:
#include <array>
int main()
{
std::array<double, 16> x;
for (unsigned int i = 0; i < 16; i++) x[i] = i;
return x[15];
}
И я собираю с:
g++-4.7 -Wall -Wextra -std=c++11 -O3 -ftree-vectorizer-verbose=9 tests.cpp -o tests
И результат:
Analyzing loop at tests.cpp:5
5: ===== analyze_loop_nest =====
5: === vect_analyze_loop_form ===
5: === get_loop_niters ===
5: ==> get_loop_niters:16
5: === vect_analyze_data_refs ===
5: not vectorized: no vectype for stmt: MEM[(value_type &)&x]._M_instance[i_21] = D.21296_5;
scalar_type: value_type
5: bad data references.
tests.cpp:2: note: vectorized 0 loops in function.
В чем проблема и как ее решить?
РЕДАКТИРОВАТЬ:
и результат одинаков для:
#include <array>
int main()
{
std::array<int, 16> x;
for (int i = 0; i < 16; i++) x[i] = i;
return x[15];
}
Проверьте ваши флаги компиляции no vectype for stmt
означает, что ваша архитектура не поддерживает эти инструкции.
Задавать -march=native
или же -march=corei7
Других решений пока нет …