我只是想知道OpenMP(共享内存)和MPI(分布式内存)如何能够在像i7这样的普通桌面CPU上运行.是否有某种虚拟机可以模拟这些CPU上的共享和分布式内存?我问它是因为当学习OpenMP和MPI时,会显示超级计算机的结构,共享内存或分布式内存的不同节点,每个节点都有自己的处理器和内存.
MPI没有假设MPI进程的运行方式和位置.就MPI而言,进程只是具有唯一地址的进程,称为其等级,MPI使它们能够以消息的形式发送和接收数据.传输的消息究竟是如何留给实现的.该模型非常通用,MPI可以在任何可以想象的平台上运行.
OpenMP使用线程处理共享内存编程.线程只是可以访问共享内存空间的并发指令流.它们可以在单个CPU内核上以分时方式执行,也可以在单个CPU芯片内的多个内核上执行,也可以通过一些复杂的网络分布在多个CPU之间,这些CPU允许它们访问彼此的内存.
考虑到这一点,MPI并不要求每个进程在专用CPU内核上执行,或者数百万个内核必须放在与某些高速网络连接的独立板上 - 性能确实以及技术限制.您可以愉快地在单个CPU内核上运行100个进程MPI作业,但性能会非常糟糕但它仍然可以工作(如果有足够的内存可用).这同样适用于OpenMP - 它不要求每个线程都安排在专用CPU内核上,但这样做可以提供最佳性能.
这就是为什么MPI和OpenMP被称为抽象 - 它们足够通用,执行硬件可以变化很大,而源代码保持不变.