根据这个问题,使用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行,我不希望重写的一切。