Как включить или использовать автоматическую векторизацию вместе с автоматическим распараллеливанием в Microsoft Visual Studio 2017 или 2019?

#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 в раздел дополнительных параметров на странице свойств моего проекта, но я не получил отчета о том, произошла ошибка векторизации или нет.

Отчет Qvec и Qpar добавлен на страницу свойств проекта

Включена параллельная генерация кода

Комментарии:

1. Вы пытались поместить этот синтаксис `#pragma loop(hint_parallel (8))` над циклом for ?

2. Да, я пытался использовать это, но изменений по-прежнему не было.

Ответ №1:

Отчет о векторизации отсутствует, поскольку вы скомпилированы в режиме отладки ( /Od ), и в этом случае автовекторизация не применяется, поскольку оптимизация отключена. Итак, переключитесь на сборку выпуска.

/O1 и /OS приведет к появлению отчета с причиной сбоя 1404.

/Ox и /O2 попытается выполнить автовекторизацию, но с /fp:precise (который вы установили сейчас) этот цикл с ошибкой векторизации по причине 1105. Указание /fp:fast заставило бы это работать.