桌面CPU上的MPI和OpenMP

时间:2012-06-13 06:32:33

标签: mpi openmp

我只是想知道OpenMP(共享内存)和MPI(分布式内存)如何能够在像i7这样的普通桌面CPU上运行。是否有某种虚拟机可以模拟这些CPU上的共享和分布式内存?我问它是因为当学习OpenMP和MPI时,会显示超级计算机的结构,共享内存或分布式内存的不同节点,每个节点都有自己的处理器和内存。

2 个答案:

答案 0 :(得分:6)

MPI不会假设MPI进程的运行方式和位置。就MPI而言,进程只是具有唯一地址的进程,称为 rank ,MPI使它们能够以消息的形式发送和接收数据 。传输的消息究竟是如何留给实现的。该模型非常通用,MPI可以在任何可以想象的平台上运行。

OpenMP使用线程处理共享内存编程。线程只是可以访问共享内存空间的并发指令流。它们可以在单个CPU内核上以分时方式执行,也可以在单个CPU芯片内的多个内核上执行,也可以通过一些复杂的网络分布在多个CPU之间,这些CPU允许它们访问彼此的内存。

考虑到所有这些,MPI并不要求每个进程在专用CPU内核上执行,或者数百万个内核必须放在与某些高速网络相连的独立板上 - 性能和技术限制。您可以愉快地在单个CPU核心上运行100个进程MPI作业,但性能非常非常糟糕但它仍然可以工作(给定足够的内存可用)。这同样适用于OpenMP - 它不要求每个线程都在专用CPU核心上进行调度,但这样做可以提供最佳性能。

这就是为什么MPI和OpenMP被称为抽象 - 它们足够通用,执行硬件可以变化很大,而源代码保持不变。

答案 1 :(得分:4)

现代基于多核CPU的PC 共享内存计算机。将每个核心视为处理器是一个明智的近似,并且它们都可以同等地访问相同的RAM。这种近似隐藏了处理器和芯片架构的许多细节。

它总是(好吧,也许并非总是如此,但几乎与MPI一样)可以在共享内存计算机上使用消息传递(其中MPI是一个标准),以便您可以运行与真正的分布式内存机器相同的启用MPI的程序。

在应用程序级别,程序员只关心对MPI例程的调用。在系统级别,MPI运行时将这些调用转换为集群或超级计算机上的指令,以通过互连发送内容。在共享内存计算机上,它可以将这些调用转换为通过内部总线发送内容的指令。

这绝不是对您提出的主题的全面介绍,但这就是Google及其所有已发布的来源。