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的。

直接double tempSin = sin(x);


From:  OpenMP怎么用才是线程安全的


猜你喜欢

转载自blog.csdn.net/tony2278/article/details/80773523