gpt4 book ai didi

multithreading - 与任务并行相比,并行流水线有什么优势?

转载 作者:行者123 更新时间:2023-12-03 12:45:34 25 4
gpt4 key购买 nike

我经常读到有关管道模式的文章,认为它是一种在利用并发性方面常见且有用的模式。但我想知道与任务并行模式相比,并行管道模式是否有任何优势。

假设我们在管道中有三个阶段:A、B、C。当需要处理数据时,A 获取数据,处理它并将其交给 B。当下一个数据 block 进来时,同样的事情发生并且A和B同时工作。

所以管道中的不同阶段可以并行执行,但是当我们使用并行工作的三个管道时(如在任务并行模式中),我们得到完全相同的画面。当两个数据 block 依次传入时,第一个 block 由管道 1 获取,下一个 block 由管道 2 获取,两个 block 并发处理。

此外,我可以很容易地想象出并行流水线中的很多问题:阶段之间的缓冲区可能会阻塞(或溢出),一个阶段在处理速度方面占主导地位,因此最慢阶段之前的所有阶段都必须等待等等。 .

Task Parallelism Pattern不存在这些问题。此外,当 block 进入速度快于管道第一阶段可以处理它们(或者它们可以同时获取)时,此模式更加灵活。

那么我为什么要使用并行管道模式呢?

提前感谢您的任何想法!

最佳答案

如果你有一个管道 A=>B=>C 并且没有进一步的限制,那确实是无用的。您可以只使用函数 C(B(A(input)))

如果在流水线阶段允许不同程度的并行,这个概念就会变得更有用。也许步骤 B 访问 SSD,而您最多需要 4 个并发访问。您可以使用信号量实现相同的目的。

如果 A、B 和 C 的并行度限制为 1,则管道也具有值(value):在管道模型中,所有 3 个节点都可以并发执行。由于假定的并行度限制(或者您需要 3 个锁,这相当于管道解决方案),因此使用您所说的“三个管道”是不可能的。

有时,您需要在节点之间进行缓冲。也许,A 很少发出 B 会随着时间处理的高脉冲。缓冲有助于保持 A 工作而不是停止。

有时,它不是管道,而是分支进出(可能连接)的数据流网络。

总而言之,我很少找到数据流网络的用例。通常,仅使用数据并行性并使用适当的锁和信号量会更简单。但这可能是因为我通常工作的领域。YMMV。

关于multithreading - 与任务并行相比,并行流水线有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39119156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com