据我所知,并行处理消息传递接口(interface)和多线程有两种方式。多线程不能用于没有消息传递接口(interface)的分布式内存系统;但消息传递接口(interface)可用于任何系统“共享内存”和“分布式内存”。我的问题是关于与 MPI 并行化并在共享内存系统上运行的代码的性能。这段代码的性能是否与多线程并行的代码在同一范围内?
更新:
我的工作是因为进程之间需要反复通信,通信数组可以是200*200的矩阵
最佳答案
答案是:视情况而定。 MPI 进程主要是独立的操作系统进程,当通信进程在同一共享内存节点上运行时,它们之间的通信通过某种共享内存 IPC 技术发生。作为独立的操作系统进程,MPI 进程通常不共享数据,有时数据必须在每个进程中复制,这导致内存使用率达不到最佳水平。另一方面,线程可以共享大量数据并且可以从缓存重用中获益,尤其是在具有大型共享末级缓存(例如,当前一代 x86 CPU 上的 L3 缓存)的多核 CPU 上。与用于线程间数据交换的更轻量级方法(通常只是同步,因为工作数据已经共享)相结合时,缓存重用可以带来比单独进程实现的性能更好的性能。
但再一次 - 这取决于。
关于c++ - 共享内存系统性能上的消息传递接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10766263/