具有依赖项的数组中的并行操作

时间:2019-04-09 19:01:45

标签: c task openmp

我需要帮助来解决此问题,我有一个对数组的前一个元素执行操作的代码,我需要使用openmp任务进行并行化,但是我知道如何消除这种依赖。我的老师说,在这种情况下,使用depend(输入,输出)并不有趣。那我该如何删除呢?

void sum_sequential(float a[N]) {
        a[0] = 1.0;

    for (int i = 1; i < N; i++)
        a[i] = 2 * a[i-1] + 1;
}

1 个答案:

答案 0 :(得分:1)

您完全正确,它存在数据依赖性。每个元素要计算的值都表示为先前为前一个元素计算的值,因此该算法本质上是串行的。对其进行并行化没有任何实际优势,因为成功处理依赖项不会留出任何并发空间。

但是,如果您仔细研究计算,则可以用不具有此类依赖性的代数等效方式重新表达它-一种完全不同的算法,可以产生相同的结果,并且可以并行化。冒着提供太多提示的风险,请尝试手动写下结果的前几个术语,并查看您是否认识到简单的模式。