我只是想知道怎么可能像i7这样的普通桌面CPU上运行OpenMP (共享内存)和MPI (分布式内存)。有没有一种虚拟机可以在这些CPU上模拟共享和分布式内存?我之所以这样问,是因为在学习OpenMP和MPI时,会显示超级计算机的结构,它们具有共享内存或用于分布式内存的不同节点,每个节点都有自己的处理器和内存。
发布于 2012-06-13 18:55:39
MPI不假设MPI进程如何运行以及在哪里运行。就MPI而言,进程只是具有称为其等级的唯一地址的实体,MPI赋予它们以消息形式发送和接收数据的能力。消息到底是如何传输的,留给了实现。该模型是如此通用,以至于MPI几乎可以在任何可以想象到的平台上运行。
OpenMP使用线程处理共享内存编程。线程只是可以访问共享内存空间的并发指令流。它们可以在单个CPU核心上以分时方式执行,也可以在单个CPU芯片内的多个核心上执行,或者它们可以分布在通过某种复杂网络连接在一起的多个CPU中,从而允许它们访问彼此的内存。
鉴于此,MPI不要求每个进程都在专用CPU核心上执行,也不要求数百万个核心必须放在与某些高速网络连接的独立主板上-性能确实如此,也没有技术限制。您可以愉快地在单个CPU核心上运行100个进程的MPI作业,尽管性能会非常非常差,但它仍然可以工作(假设有足够的内存可用)。这同样适用于OpenMP -它不要求每个线程都调度在一个专用的CPU核心上,但这样做可以提供最佳的性能。
这就是为什么MPI和OpenMP被称为抽象的原因-它们足够通用,执行硬件可以有很大的变化,而源代码保持不变。
发布于 2012-06-13 16:59:30
基于多核CPU的现代PC是一台共享内存的计算机。将每个核心视为一个处理器,并且它们都可以平等地访问相同的RAM,这是一种合理的近似。这种近似值隐藏了处理器和芯片架构的许多细节。
在共享内存计算机上使用消息传递( MPI是其中的一种标准)一直是可能的(也许不是一直如此,但几乎和MPI出现的时间一样长),这样您就可以像在真正的分布式内存计算机上一样运行支持MPI的程序。
在应用程序级别,程序员只关心对MPI例程的调用。在系统级,MPI运行时将这些调用转换为指令,以便通过互连发送数据。在共享内存的计算机上,它可以将这些调用转换为指令,以便通过内部总线发送数据。
这不是对您提出的主题的全面介绍,但这就是Google和所有已发表的资源的目的。
https://stackoverflow.com/questions/11009371
复制相似问题