OpenMP可能无法直接并行化的代码

时间:2018-07-30 13:54:36

标签: c openmp

OpenMP可能无法直接并行化的代码

研究自动并行器并寻找OpenMP无法直接并行化的基准(“直接并行化”的含义:仅通过指定适当的OpenMP指令即可创建并行可执行文件而无需修改代码)。

关于这个主题,是否可以使用OpenMP并行化以下代码?

1。

double a[ARRAY_DIM], c[ARRAY_DIM];
  .
double ret;
ret = 0.;
for ( i = 0; i < ARRAY_DIM; i++ ) {
  c[i] = exp( ret );
  ret += a[i];
}
return ret;

2。

double a[ARRAY_DIM], c[ARRAY_DIM];
   .
double ret;
ret = 0.;
for ( i = 0; i < ARRAY_DIM; i++ ) {
  if ( a[i] > 0.01 ) {
    ret = c[i];
  }
}
return ret;

1 个答案:

答案 0 :(得分:0)

代码示例1可以使用prefix sum solution与OpenMP并行化。

对于代码示例2,我在下面的代码中有两个解决方案,分别为NaNpd.Series.notnull。函数df = df[df['UID'].notnull()] 更易于实现,但是如果foo1经常为真,则效率可能低得多。例如,如果始终为true,则必须在每次迭代中写入foo2,以终止并行化。对于函数foo1,它只需要按线程顺序而不是按迭代顺序进行写入,并且由于迭代次数远大于线程数目,因此效率更高。

a[i] > 0.01