单节点情况下
不显式绑定CPU核心
MPI运行时环境会依赖操作系统来管理MPI进程与CPU核心的映射和调度。操作系统会尝试均匀分配负载,但可能会出现缓存污染、上下文切换开销增加以及 NUMA 访问延迟等问题。
默认调度
- 操作系统的默认调度器会将进程分配到可用的 CPU 核心上,尝试均匀分布负载。
- MPI 进程可能会在不同的时间段运行在不同的核心上(也就是说,进程可能会迁移)。
超线程
- 如果系统支持超线程,每个物理核心可能会有多个逻辑核心。操作系统可能会将 MPI 进程调度到这些逻辑核心上,这可能导致性能下降,因为多个进程共享相同的物理资源。
NUMA(非一致性内存访问)
- 在多插槽系统中,操作系统需要考虑 NUMA 结构。如果进程和它们所使用的内存分配在不同的 NUMA 节点上,可能会导致内存访问延迟增加
显式绑定CPU核心
将 MPI 进程与 CPU 核心绑定(也称为 CPU 亲和性)可以提高性能,因为它减少了上下文切换和缓存失效。
mpirun --bind-to core --map-by core -np 4 ./your_mpi_program
--map-by core
:将 MPI 进程映射到不同的 CPU 核心。其主要目的是确保进程被合理地分布到可用的核心上,尽量避免多个进程同时占用同一个核心。这种映射策略可以优化进程之间的资源使用,减少资源争用。
--bind-to core
:将 MPI 进程绑定到具体的核心上。绑定的目的是确保进程在执行过程中始终运行在同一个核心上,防止操作系统将其迁移到其他核心,从而降低上下文切换的开销并提高缓存命中率。
注:进程绑定只能减低系统原因带来的性能影响,而不解决任何程序本身存在的问题 ,尤其是负载不均衡导致的性能波动(甚至可能在绑核后变得更明显)。此外,绑定仅仅指将进程/线程限制在指定的 CPU 核心上,但仍然可能有其他进程抢占这些资源。即使进程独占了一部分核心,其他核心上的进程 也可能对其性能产生影响(如抢占共享的 cache 或内存带宽)。
标签:操作系统,核心,绑定,调度,MPI,进程,CPU From: https://www.cnblogs.com/tao-gak567/p/18223192