共享内存模型和分布式内存模型

时间:2018-12-02 08:28:23

标签: c++ memory parallel-processing shared-memory

假设您的CPU在逻辑门中具有以下当前的硬件架构: enter image description here

说我们有一个共享内存模型和分布式模型: enter image description here

enter image description here

如果我们要实现共享内存模型和并行进程线程,是否正确,我们将需要诸如OpenMP之类的实用程序。共享内存是L3高速缓存还是RAM主内存?要实现分布式内存模型,我们需要一些实用程序,例如MPI和多个计算系统(计算机)吗?

1 个答案:

答案 0 :(得分:0)

是的,直到您开始使用NUMA为止。

所以让我们从头开始。如果您拥有共享相同内存空间的内核,则可以使用线程和库/工具,例如OpenMP或TBB(如果您使用的是C ++,请使用TBB,而不是OpenMP)。您也可以在此处使用MPI。

如果具有互连,则唯一的选择是使用MPI之类的库。

现在,在非均匀内存体系结构之间存在这种情况。例如,如果您有两个套接字,这意味着两个内存空间分别连接到一个套接字,并且仍然可以从另一个套接字访问,并且如果您的一个程序在多套接字节点上运行了多个线程,则会发生这种情况分配在一个插槽上,而另一个插槽的内核可以访问该插槽,这很慢。

在这种情况下人们可以做的是:

  • 每个套接字一个进程(由于NUMA而不是每个节点)
  • 将线程固定到核心,将内存固定到套接字
  • 在套接字上,使用TBB
  • 在一个插槽之外,使用MPI。

我并不是说“经常”,因为许多科学代码仍仅是MPI,并且可能难以引入线程,由于内存共享,这是一种完全不同的方法。