如果我的所有处理器共享相同的内存,那么使用MPI无论如何都有用,而不是完全使用OpenMP?
答案 0 :(得分:7)
如果您从未打算将应用程序扩展到单个共享内存节点之外,那么与MPI并行化相比,OpenMP并行化可能相对容易实现。相对而言,因为OpenMP的明显简单性是非常误导的。为了充分利用现代共享内存机器的能力,应该最大化数据局部性并使用大量私有数据,有效地将它们(机器)视为分布式内存系统。此外,共享内存编程中最普遍的错误是数据争用,有时甚至可能很难调试,即使使用特殊的线程检查工具。 MPI编程中几乎没有数据竞争,因为进程不共享数据。
也就是说,即使MPI进程使用共享内存进行通信,这仍然比在线程进程中直接访问共享内存要慢。此外,一些算法需要一些全局数据,这需要更多的MPI内存,其中每个进程必须保存该数据的副本。这可以在MPI-3.0中使用共享内存窗口和单面操作来实现,但这在某种程度上很麻烦(虽然是便携式的)。此外,还有研究工作尽可能少地减少节点内通信开销,有些非常成功。