【发布时间】:2018-05-11 23:59:57
【问题描述】:
假设我们有一个 12 核的节点。有什么区别:
- 运行一个 MPI 进程来管理每个内核的 12 个线程。
- 只需为每个内核运行 12 个 MPI 进程。
前者通过共享内存进行通信,后者通过IPC进行通信。那么,哪个更快呢?差异是可忽略的还是显着的?
【问题讨论】:
标签: multithreading parallel-processing mpi ipc
假设我们有一个 12 核的节点。有什么区别:
前者通过共享内存进行通信,后者通过IPC进行通信。那么,哪个更快呢?差异是可忽略的还是显着的?
【问题讨论】:
标签: multithreading parallel-processing mpi ipc
嗯,这取决于...
大多数 MPI 实现使用共享内存(而不是互连甚至 IPC)进行节点内通信。
一般来说,MPI+X 用于混合编程:
OpenMP 通常用作 X。也可以使用 MPI RMA(例如单边通信),并且可以使用更多选项。
从性能的角度来看,再一次,这取决于。 一些应用程序在平面 MPI 中运行得更快(例如,每个内核一个 MPI 进程), 而其他一些应用程序在混合 MPI+OpenMP 中运行得更快。 (请记住,OpenMP 是为共享内存系统设计的,具有对内存的平坦访问权限,因此每个 NUMA 域通常有一个 MPI 任务(例如大多数时间是套接字),而每个节点有一个 MPI 任务。
最后但同样重要的是,MPI+OpenMP 内存开销和连线时间通常低于平面 MPI,这可能是一个重要因素。
【讨论】: