首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何进行并行双线性插值

如何进行并行双线性插值
EN

Stack Overflow用户
提问于 2021-01-06 12:33:59
回答 1查看 216关注 0票数 2

我尝试过这样做,但我不知道它是否正确,为了计算执行时间,有时它在代码中给出了0。

我首先创建了一个结构来存储要插值的点的所有坐标,我有一个要插值的点的表,所以我使用pragma parallel for执行for部分来插值所有的点。变量R1、R2和P是双变量,并在线程之间共享。

代码语言:javascript
复制
  #pragma omp parallel for
  for(i=0;i<N ; i++)
  {
     R1 =  BilinearInterpolation(Table[i].x1, Table[i].Q11,Table[i].x2, Table[i].Q21,Table[i].x);
     R2 =  BilinearInterpolation(Table[i].x1, Table[i].Q12, Table[i].x2, Table[i].Q22,Table[i].x);
     P =  BilinearInterpolation(Table[i].y1,  R1, Table[i].y2,  R2, Table[i].y);
     TableInter[i] = P;
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-06 13:03:58

代码语言:javascript
复制
 #pragma omp parallel for
 for(i=0;i<N ; i++)
 {
      R1 = BilinearInterpolation(Table[i].x1, Table[i].Q11,Table[i].x2, Table[i].Q21,Table[i].x);
      R2 = BilinearInterpolation(Table[i].x1, Table[i].Q12, Table[i].x2, Table[i].Q22,Table[i].x);
      P =  BilinearInterpolation(Table[i].y1,  R1, Table[i].y2,  R2, Table[i].y);
      TableInter[i] = P;
 }

代码的问题是R1R2P是由多个线程共享和更新的,因此您有一个争用条件。例如,一个线程可能正在更改P,而另一个线程则将P添加到TableInter[i]中。尽管如此,通过将这些变量声明为私有变量(即在并行区域中声明这些变量),或者使用OpenMP的private子句(#pragma omp parallel for private(R1, R2, P),您可以轻松地解决这个争用条件。

代码语言:javascript
复制
 #pragma omp parallel for private(R1, R2)
 for(i=0;i<N ; i++)
 {
      R1 = BilinearInterpolation(Table[i].x1, Table[i].Q11,Table[i].x2, Table[i].Q21,Table[i].x);
      R2 = BilinearInterpolation(Table[i].x1, Table[i].Q12, Table[i].x2, Table[i].Q22,Table[i].x);
      TableInter[i] = BilinearInterpolation(Table[i].y1,  R1, Table[i].y2,  R2, Table[i].y);
 }

只要BilinearInterpolation方法不修改线程之间的共享状态,这段代码就没有种族条件。

计算执行时间--有时它在代码中给我0,

要计算可以使用OpenMP函数wtime的时间,如下所示:

代码语言:javascript
复制
double start = omp_get_wtime();
// the code that you want to measure.
double end = omp_get_wtime();  
printf("%f\n",end-start);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65595876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档