polmonroig
polmonroig

Reputation: 1017

OpenMP Compilation error: ‘reduction’ is not valid for ‘#pragma omp taskloop’

I'm trying to compile a simple program using OpenMP, but I am getting the following error, even though in the OpenMP specification it says that it is a proper construct.

Error

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

Program

#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;
}

When I output the version with --version I get gcc (GCC) 8.4.0. Altought, the installed version on Arch is 9.3.0

I compiled with

g++ -fopenmp file.cc 

Thanks in advance!

Upvotes: 0

Views: 533

Answers (1)

Remo
Remo

Reputation: 69

What compile do you use?

This code compiles and work with GCC 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;
}

But this code while still compiles will crash on execution.

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;
}

Code on godbolt.org

Upvotes: 1

Related Questions