C MPI和2插槽节点非均匀内存访问
我使用一个包含多个节点的集群。每个处理器有2个处理器,内部有8个内核。我在SLURM中使用openmpi 我的测试表明,MPI发送/接收数据传输速率如下:秩为0的MPI进程和MPI进程1之间的数据传输速率约为9 GB/秒,但进程0和进程2之间的数据传输速率为5 GB/秒。我假设这是因为我们的进程在不同的处理器上执行 我想避免非本地内存访问。我发现的建议没有帮助。所以问题是,是否可以在同一个处理器上运行8个MPI进程?如果是,我该怎么做C MPI和2插槽节点非均匀内存访问,c,memory,mpi,hpc,C,Memory,Mpi,Hpc,我使用一个包含多个节点的集群。每个处理器有2个处理器,内部有8个内核。我在SLURM中使用openmpi 我的测试表明,MPI发送/接收数据传输速率如下:秩为0的MPI进程和MPI进程1之间的数据传输速率约为9 GB/秒,但进程0和进程2之间的数据传输速率为5 GB/秒。我假设这是因为我们的进程在不同的处理器上执行 我想避免非本地内存访问。我发现的建议没有帮助。所以问题是,是否可以在同一个处理器上运行8个MPI进程?如果是,我该怎么做 谢谢。这似乎是可能的。OpenMPI运行手册页的进程绑定和R
谢谢。这似乎是可能的。OpenMPI运行手册页的进程绑定和Rankfiles部分看起来很有希望。我将尝试使用--report binding选项集显示的一些选项,这样您就可以验证流程放置是否符合您的预期,并查看您是否能从代码中获得预期的性能改进。您应该查看MPI库的hostfile/rankfile文档。openmpi和MPICH都使用不同的格式,但它们都能满足您的需要
请记住,如果您过度订阅处理器,您将遇到性能问题。在8核处理器上运行超过8个列组将导致您失去从本地共享内存中获得的性能优势。以下一组命令行选项可用于
mpiexec
1.7之前的Open MPI版本:
--按核心--绑定到核心--报告绑定
最后一个选项将漂亮地打印每个列组的实际绑定。绑定还激活共享内存BTL模块中的一些NUMA感知
从OpenMPI1.7开始,进程在可用套接字上循环分布,默认情况下绑定到单个核心。要复制上述命令行,应使用:
--按核心映射--绑定到核心--报告绑定
带Slurm,设置:
#SBATCH --ntasks=8
#SBATCH --ntasks-per-socket=8
如果Slurm配置正确,则在同一个插槽(CPU芯片)上分配所有内核。谢谢,这正是我想要的!