Reputation: 1017
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
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;
}
Upvotes: 1