最近在并行领域工作,我了解到有两个术语“垂直并行”和“水平并行”。有人说openmp(共享内存并行)是垂直并行,而mpi(分布式内存并行)是水平并行。为什么这些术语这么称呼?我不明白原因。这么称呼它们只是术语吗?
这些术语似乎没有被广泛使用,也许是因为进程或系统经常不加区别地使用这两个术语。这些概念非常通用,涵盖的范围远远超出 MPI 或 openmp 的范围。
垂直并行性是系统同时使用多个不同设备的能力。例如,一个程序可能有一个线程执行繁重的计算,而另一个线程正在处理数据库查询,第三个线程正在执行 IO。大多数操作系统自然地暴露了这种能力。
当使用单个设备或对多个相似的数据项执行操作时,就会出现水平并行性。例如,当在同一段代码上运行多个线程但使用不同的数据时,就会发生这种并行性。
在软件世界中,一个有趣的例子实际上是 MapReduce 算法,它同时使用:
类似地,在硬件世界中,超标量流水线 CPU 确实使用这两种变体,其中流水线是垂直并行化的一个特定实例(就像映射/归约阶段,但多了几个步骤)。
使用该术语背后的原因可能与供应链中使用该术语的原因相同:价值是通过链接不同步骤或处理级别来产生的。最终产品可以被视为构造(从下到上)或依赖(从上到下)的抽象树的根,其中每个节点都是中间级别或步骤的结果。您可以在这里轻松看到供应链和计算之间的类比。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)