#c #visual-studio #vectorization #auto-vectorization
#c #visual-studio #векторизация #автоматическая векторизация
Вопрос:
Я пытаюсь протестировать автоматическую векторизацию в цикле for ниже. Я не могу заставить автоматическую векторизацию работать. Код приведен ниже.
float dotproduct(float a[], float b[], int size) {
int x = 0.0;
for (int i = 0; i < size; i ) {
x = x a[i] * b[i];
}
return x;
}
int main() {
const int N = 8;
float a[N] = {2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0};
float b[N] = {9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0};
dotproduct(a, b, N);
cout << dotproduct(a, b, N);
return 0;
}
Я добавил строку /Qvec-report:2 /Qpar-report:2
в раздел дополнительных параметров на странице свойств моего проекта, но я не получил отчета о том, произошла ошибка векторизации или нет.
Комментарии:
1. Вы пытались поместить этот синтаксис `#pragma loop(hint_parallel (8))` над циклом for ?
2. Да, я пытался использовать это, но изменений по-прежнему не было.
Ответ №1:
Отчет о векторизации отсутствует, поскольку вы скомпилированы в режиме отладки ( /Od
), и в этом случае автовекторизация не применяется, поскольку оптимизация отключена. Итак, переключитесь на сборку выпуска.
/O1
и /OS
приведет к появлению отчета с причиной сбоя 1404.
/Ox
и /O2
попытается выполнить автовекторизацию, но с /fp:precise
(который вы установили сейчас) этот цикл с ошибкой векторизации по причине 1105. Указание /fp:fast
заставило бы это работать.