最近在并行领域工作,我知道有两个术语“垂直并行”和“水平并行”。有人说 openmp(共享内存并行)是垂直的,而 mpi(分布式内存并行)是水平的并行。为什么这样称呼这些术语?我不明白原因。这么称呼它们只是术语吗?
最佳答案
这些术语似乎并没有被广泛使用,也许是因为进程或系统经常没有区别地同时使用这两个术语。这些概念非常通用,涵盖的范围远不止 MPI 或 openmp 的领域。
垂直并行性是系统同时使用多个不同设备的能力。例如,一个程序可能有一个线程在做大量计算,而另一个线程在处理数据库查询,第三个线程在做 IO。大多数操作系统自然地暴露了这种能力。
当使用单个设备或对几个相似的数据项执行操作时,就会发生水平并行。例如,当在同一段代码上运行多个线程但数据不同时,就会发生这种并行性。
在软件世界中,一个有趣的例子实际上是 map reduce 算法,它同时使用:
类似地,在硬件世界中,超标量流水线 CPU 确实使用这两种变体,其中流水线是垂直并行化的一个特定实例(就像 map/reduce staging,但有更多的步骤)。
使用这个术语的原因可能与它用于供应链的原因相同:值(value)是通过链接不同的步骤或处理级别来产生的。最终产品可以看作是一个抽象的结构树(从下到上)或依赖(从上到下)的根,其中每个节点都是中间级别或步骤的结果。您可以在这里轻松看到供应链和计算之间的类比。
关于parallel-processing - 垂直和水平平行度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5832895/