你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 专家论坛
OpenMP的多核并行程序设计(四)
 

33 迭代相关

为了保证对一个循环进行正确的并行化操作,必须要保证数据两次循环之间不存在数据相关性,数据相关性又称为“数据竞争”,当两个线程对同一个变量进行操作,并且一个操作为写操作时,就说明这两个线程存在数据竞争。此时,读出的数据不一定就是前一次写操作的数据,而写入的数据也可能不是程序所需要的,为了将一个循环并行化,且不影响程序的正确性,需要仔细检查程序,使程序在并行化后,两个线程之间不能够出现数据竞争。

x[0]=0;
y[0]=1;
#pragma omp parallel for private(k)
for(k=1;k<100;k++)
{
     x[k]=y[k-1]+1; //S1
     y[k]=x[k-1]+2; //S2
}

上面的代码中,循环kS1对存储单元x[k]进行写操作,而k+1S2读取该单元,这样就产生了数据相关,多线程代码将不能得到正确结果,要解决此问题可以将循环重写:

x[0]=0;
y[0]=1;
x[49]=74;
y[49]=74;
#pragma omp parallel for private(k)
for(m=0;m<2;m++)
{
     for(k=m*49+1;k<m*50+50;k++)
     {
             x[k]=y[k-1]+1;S1
             y[k]=x[k-1]+2;S2
}
}
  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089