parallel-processing - 多核MPI?

标签 parallel-processing distributed multicore multiprocessing mpi

随着最近多核编程的热潮,任何人都在探索使用 MPI 的可能性。 ?

最佳答案

我已经在具有多核节点的大型集群上广泛使用 MPI。我不确定这对于单个多核盒子是否合适,但是如果您预计代码有一天会比单个芯片大,您可以考虑在 MPI 中实现它。现在,没有什么比 MPI 更大的了。我不确定那些提到 Not Acceptable 开销的海报来自哪里,但我已经尝试在下面概述相关的权衡。继续阅读以了解更多信息。

MPI 是大规模科学计算的事实上的标准,它已经在多核机器上广泛使用。它非常快。看看most recent Top 500 list .在某些情况下,该列表中的顶级机器拥有数十万个处理器,以及多插槽双核和四核节点。这些机器中有许多具有非常快的自定义网络(Torus、Mesh、Tree 等)和优化的 MPI 实现,这些实现可以识别硬件。

如果你想在单芯片多核机器上使用 MPI,它会工作得很好。事实上,最新版本的 Mac OS X 带有 OpenMPI预安装,您可以在普通的多核 Linux 机器上轻松下载安装 OpenMPI。 OpenMPI 正在使用中 Los Alamos在他们的大多数系统上。 Livermore用途 mvapich在他们的 Linux 集群上。在深入研究之前,您应该记住的是,MPI 旨在解决分布式内存系统上的大规模科学问题。您正在处理的多核机器可能具有共享内存。

默认情况下,OpenMPI 和其他实现使用共享内存进行本地消息传递,因此您在将消息传递到本地进程时不必担心网络开销。它非常透明,我不确定其他海报在哪里得到他们对高开销的担忧。需要注意的是,MPI 并不是在单个多核机器上获得并行性的最简单方法。在 MPI 中,所有的消息传递都是显式的。由于这个原因,它被称为并行编程的“汇编语言”。如果您不是经验丰富的人,那么进程之间的显式通信并不容易 HPC人,还有其他更适合共享内存的范式( UPCOpenMP 和不错的语言,如 Erlang 仅举几例),您可以先尝试一下。

我的建议是,如果您预计编写一个可能需要不止一台机器来解决的并行应用程序,请使用 MPI。您将能够使用常规的多核机器进行测试并正常运行,一旦您在那里工作,迁移到集群将非常轻松。如果您正在编写一个只需要一台机器的应用程序,请尝试其他方法。有更简单的方法来利用这种并行性。

最后,如果您真的喜欢冒险,请尝试将 MPI 与线程、OpenMP 或其他一些本地共享内存范例结合使用。您可以使用 MPI 进行分布式消息传递,并使用其他方式进行节点并行。这是大型机器的发展方向; future 拥有数十万个或更多处理器的机器预计将具有可扩展到所有节点但不是所有内核的 MPI 实现,并且 HPC 人员将被迫构建混合应用程序。这不适合胆小的人,在这个领域出现公认的范式之前,还有很多工作要做。

关于parallel-processing - 多核MPI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/147784/

相关文章:

algorithm - Paxos phase 2a 消息丢失

java - 强制多个线程在可用时使用多个 CPU

c# - 并行数据处理混淆了一些信息

php - 如何在每次 'bulk mysql insert' 之后在后台运行 PHP 函数?

algorithm - 是否有用于(EREW PRAM)排序的成本最优并行算法?

c++ - 使用 C++ 扫描多核系统中的 CPU 缓存操作

linux - 如何获取多核 PowerPC 上的 CPU ID?

python - 为什么 numpy 数组看起来并不比标准 python 列表快多少?

user-interface - 最终一致性的 GUI 建议?

algorithm - Paxos 的真实世界示例