OMP用gcc和英特尔编译器(omp with gcc and intel compiler)

2019-10-23 06:30发布

根据这个问题,使用threadprivate使用OpenMP是有问题的。 这里是一个最小值(非)工作的问题的例子:

#include"omp.h"
#include<iostream>

extern const int a;
#pragma omp threadprivate(a)

const int a=2;

void my_call(){
    std::cout<<a<<std::endl;
};

int main(){
#pragma omp parallel for
    for(unsigned int i=0;i<8;i++){
        my_call();
    }
}

此代码编译与英特尔15.0.2.164,但不是用gcc 4.9.2-10。 GCC说:

g++ -std=c++11  -O3 -fopenmp    -O3 -fopenmp  test.cpp   -o test
test.cpp:5:29: error: ‘a’ declared ‘threadprivate’ after first use
#pragma omp threadprivate(a)

我会很高兴找到一种方法,用gcc来编译它。

注:我知道,全局变量是一场噩梦,但这个例子是我没有写代码来来往往,我需要使用......这是> 11000行,我不希望重写的一切。

文章来源: omp with gcc and intel compiler