垂直和水平并行

时间:2011-04-29 13:47:34

标签: parallel-processing openmp mpi

最近在并行域工作我知道有两个术语“垂直并行”和“水平并行”。有些人认为openmp(共享内存并行性)是垂直的,而mpi(分布式内存并行性)则是水平并行性。为什么这些术语被称为?我没理由。这只是术语吗?

1 个答案:

答案 0 :(得分:7)

这些术语似乎没有被广泛使用,可能是因为过程或系统经常在没有区别的情况下使用这两个术语。这些概念非常通用,涵盖的范围远远超过MPI或openmp。

垂直并行性是系统同时使用多个不同设备的能力。例如,一个程序可能有一个线程正在进行繁重的计算,而另一个程序正在处理数据库查询,而第三个正在执行IO。大多数操作系统自然会暴露这种能力。

当使用单个设备或对几个类似的数据项执行操作时,会发生水平并行。这是一种并行性,例如在同一段代码上运行多个线程但是数据不同时会发生。

在软件世界中,一个有趣的例子实际上是map reduce算法,它使用两者:

  • 水平并行发生在地图阶段,当数据被分割并分散在几个cpu中进行处理时,

  • 垂直并行发生在map和reduce阶段之间,其中数据首先被划分为块,然后由地图线程处理,并由reduce线程累积,

类似地,在硬件世界中,超标量流水线CPU确实使用这两种变体,其中流水线操作是垂直并行化的一个特定实例(就像map / reduce staging一样,但还有几个步骤)。

使用这个术语背后的原因可能与它与供应链一起使用的原因相同:通过链接不同的步骤或处理级别来生成值。最终产品可以看作是抽象构造树(从下到上)或依赖(从上到下)的根,其中每个节点都是中间级别或步骤的结果。您可以在此处轻松查看供应链和计算之间的类比。