根据this问题,使用openmp的threadprivate
是
有问题的。以下是问题的最小(非)工作示例:
#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();
}
}
此代码使用intel 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编译它的方法。
注意:我知道全局变量是一场噩梦,但这个例子就是 来自我没有写过的代码,我需要使用...它是&gt; 11000 我不想重写所有内容。