OpenMP如何用才是线程安全的
OpenMP怎么用才是线程安全的?例如如下代码:#pragma omp parallel forfor(i0iNi++){tempSin sin(in[i
OpenMP怎么用才是线程安全的?
例如如下代码:
#pragma omp parallel for
for(i=0;i<N;i++)
{
tempSin = sin(in[i]);
tempCos = cos(in[i]);
out1[i] = data1[i]*tempSin + data2[i]*tempCos;
out2[i] = data1[i]*tempCos + data1[i]*tempSin;
}
因为一次循环中sin值和cos值要使用两次,为了减小运算次数,增加了中间变量,这样sin和cos就只需要计算一次了。这时再并行的话,会出现线程不安全吗?
tempSin和tempCos在不同的线程里用的是同一个地址里的内容吗?
谢谢~!
[解决办法]看你temp声明在外面还是里面。外面的话就线程不安全了。里面的话是thread local的。
[解决办法]#pragma omp parallel for
这句改成
#pragma omp parallel for private(TempSin,TempCos)
这两个变量将在每个线程内被做成一份私有变量。其它线程无法访问。