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;
答案 0 :(得分:0)
代码示例1可以使用prefix sum solution与OpenMP并行化。
对于代码示例2,我在下面的代码中有两个解决方案,分别为NaN
和pd.Series.notnull
。函数df = df[df['UID'].notnull()]
更易于实现,但是如果foo1
经常为真,则效率可能低得多。例如,如果始终为true,则必须在每次迭代中写入foo2
,以终止并行化。对于函数foo1
,它只需要按线程顺序而不是按迭代顺序进行写入,并且由于迭代次数远大于线程数目,因此效率更高。
a[i] > 0.01