c - MPI 和 2 插槽节点非均匀内存访问

标签 c memory mpi hpc

我使用包含多个节点的集群。每个都有 2 个处理器,内部有 8 个核心。我将 Open MPI 与 SLURM 结合使用。

我的测试显示 MPI Send/Recv 数据传输速率如下:在等级 0 的 MPI 进程和 MPI 进程 1 之间约为 9 GB/秒,但在进程 0 和进程 2 之间为 5 GB/秒。我认为发生这种情况是因为我们的进程在不同的处理器上执行。

我想避免非本地内存访问。我找到的推荐here没有帮助。所以问题是,是否可以在同一个处理器上运行 8 个 MPI 进程?如果是 - 我该怎么做?

谢谢。

最佳答案

以下 mpiexec 命令行选项应该可以在 1.7 之前的 Open MPI 版本中实现此目的:

--by-core --bind-to-core --report-bindings

最后一个选项将漂亮地打印每个等级的实际绑定(bind)。绑定(bind)还会激活共享内存 BTL 模块中的一些 NUMA 感知。

从 Open MPI 1.7 开始,进程在可用套接字上循环分配,并默认绑定(bind)到单个内核。要复制上述命令行,应该使用:

--map-by core --bind-to core --report-bindings

关于c - MPI 和 2 插槽节点非均匀内存访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27527046/

相关文章:

memory - 关于 OpenCL 中 cl_mem 的问题

memory - 如何基准测试函数的内存使用情况?

c++ - std::uninitialized_fill() 和 std::get_temporary_buffer()

c++ - boost.mpi 中的自定义 reduce 操作

用于演示 Exit Handler 用法的 c 程序

c - 仅在第 6 个位置将循环值减 2

c - malloc 之后的点初始化结构

mpi - mvapich 会比 openmpi 好得多吗?如何?

c++ - 没有 Boost.Serialization 的序列化

显示输出时编译器自动关闭