首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

OpenMP如何用才是线程安全的

2013-08-16 
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)

这两个变量将在每个线程内被做成一份私有变量。其它线程无法访问。

热点排行