Ошибка компиляции OpenMP: «сокращение» недопустимо для «#pragma omp taskloop» - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь скомпилировать простую программу с использованием OpenMP, но я получаю следующую ошибку, хотя в спецификации OpenMP говорится, что это правильная конструкция.

Ошибка

file.cc: In function ‘int main()’:
file.cc:18:26: error: ‘reduction’ is not valid for ‘#pragma omp taskloop’
     #pragma omp taskloop reduction(+:sum)

Программа

#include <iostream>

#include "omp.h"

int main(){


    int size = 1000;
    int sum = 0;
    #pragma omp parallel 
    #pragma omp taskloop reduction(+:sum)
    for(int i = 0; i < size; ++i){
        sum += 1;
    }

    std::cout << "Sum: " << sum << std::endl;

    return 0;
}

При выводе версии с --version я получаю g cc (G CC) 8,4,0. Altought, установленная версия на Arch 9.3.0

Я скомпилировал с

g++ -fopenmp file.cc 

Заранее спасибо!

1 Ответ

1 голос
/ 21 апреля 2020

Какой компиляцией вы пользуетесь?

Этот код компилируется и работает с G CC 9.3.

int main(){
    int size = 1000;
    int sum = 0;
    #pragma omp parallel for simd reduction(+:sum)
    for(int i = 0; i < size; ++i){
        sum += 1;
    }
    std::cout << "Sum: " << sum << std::endl;
    return 0;
}

Но этот код, пока он все еще компилируется, вызовет sh при выполнении.

int main(){
    int size = 1000;
    int sum = 0;
    #pragma omp parallel 
    #pragma omp taskloop reduction(+:sum)
    for(int i = 0; i < size; ++i){
        sum += 1;
    }
    std::cout << "Sum: " << sum << std::endl;
    return 0;
}

Код на godbolt.org

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