我经常读到关于管道模式作为利用并发的常见和有用的模式。但是我想知道是否存在与任务并行模式相比并行流水线模式的任何优势。与并行管道相比,并行管道的优势是什么?
假设我们在一个流水线中有三个阶段:A,B,C。当需要处理数据A时,处理它并将它交给B.当下一个数据块进入时,同样的情况发生A和B同时工作。因此,我们可以并行执行不同阶段的流水线,但当我们使用三条流水线并行工作(如任务并行模式)时,我们得到完全相同的图像。当两个数据块一个接一个进入时,第一个块由Pipeline 1占用,下一个块由Pipeline 2占用,两个块同时处理。
此外,我可以很容易地想象并行中的许多问题。流水线:各个阶段之间的缓冲区可能会阻塞(或溢出),一个阶段在处理速度方面占主导地位,所以在最慢阶段之前的所有阶段都必须等待。 ..
这些问题在任务并行模式中不存在。此外,这种模式在块快速到达时比管道的第一阶段可以处理它们更快(或者它们可以同时获取)。
那么我为什么要使用并行流水线模式呢?
在此先感谢您的任何想法!
您不能总是将传入数据拆分为独立的块,例如当一个元素的处理取决于前一个的结果时。单线程的CPU指令以及CPU内核具有并行级流水线的原因就是这种情况。 – Holger