垂直和水平并行

pee*_*ush 4 parallel-processing mpi openmp

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

did*_*erc 7

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

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

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

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

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

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

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

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