繁体   English   中英

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

[英]Parallel operations in array with dependency

我需要帮助解决此问题,我有一个对数组的上一个元素执行操作的代码,我需要使用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;
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM