You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

异构CPU环境下Simple MS-MPI程序调用MPI_Barrier异常终止问题

Intel与AMD混合MPI集群中MPI_Barrier第四次循环超时终止问题

问题现象

一段循环调用MPI_Barrier的代码在两台Intel CPU服务器组成的集群中可正常运行;但当集群包含一台Intel服务器与一台AMD服务器时,程序可正常完成前3次循环,却在第4次循环时持续出现异常终止,报错连接超时。

代码示例

#include <iostream>
#include <mpi.h>

int main()
{
    int argc = 0;
    MPI_Init(&argc, nullptr);

    const int count = 100;
    for (int i = 0; i < count; ++i)
    {
        std::cout << " Attempting Barrier " << i + 1 << std::endl;
        MPI_Barrier(MPI_COMM_WORLD);
        std::cout << " Completed Barrier " << i + 1 << std::endl;
    }

    MPI_Finalize();
}

执行命令

mpiexec -hosts 2 localhost amd_machine -wdir "\network\path" \path-to-exe

程序输出

[0] Attempting Barrier 1
[1] Attempting Barrier 1
[0] Completed Barrier 1
[0] Attempting Barrier 2
[1] Completed Barrier 1
[0] Completed Barrier 2
[1] Attempting Barrier 2
[0] Attempting Barrier 3
[0] Completed Barrier 3
[0] Attempting Barrier 4
[1] Completed Barrier 2
[1] Attempting Barrier 3
[1] Completed Barrier 3
[1] Attempting Barrier 4

job aborted:
[ranks] message

[0] terminated

[1] fatal error
Fatal error in MPI_Barrier: Other MPI error, error stack:
MPI_Barrier(MPI_COMM_WORLD) failed
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.  (errno 10060)

问题分析

这种跨不同CPU架构的MPI通信异常,核心原因集中在硬件优化兼容性与网络/环境配置不匹配:

  1. MPI硬件优化冲突:不同CPU架构下,MPI库会默认启用各自专属的指令集加速(如Intel AVX、AMD AVX2变体),前几次循环可能处于初始化阶段未触发优化逻辑,第4次循环时优化生效,导致通信协议不兼容,触发连接超时。
  2. 网络/工作目录延迟:使用网络共享目录作为工作目录,可能导致进程同步时出现IO阻塞;两台机器的TCP超时参数、防火墙规则差异,也可能在多次通信后触发超时限制。
  3. MPI版本/编译环境不一致:两台机器的MPI库版本不同,或编译代码时指定了特定CPU架构的优化选项,会导致二进制兼容性问题。

解决方案

1. 禁用MPI硬件特定优化

强制MPI使用通用指令集,避免架构专属优化冲突:

  • 针对OpenMPI:
    export OMPI_MCA_mpi_leave_pinned=0
    export OMPI_MCA_opal_cpu_affinity="none"
    
  • 针对MPICH:
    export MPICH_DISABLE_CPU_AFFINITY=1
    

2. 调整网络通信参数

增大MPI通信超时时间,或开放必要端口:

  • OpenMPI设置超时时间(单位:秒):
    export OMPI_MCA_btl_tcp_timeout=600
    
  • 检查并关闭两台机器的防火墙,或配置规则允许MPI动态分配的端口范围通信。

3. 改用本地工作目录

避免网络共享目录的IO延迟,为每台机器指定本地工作目录:

mpiexec -hosts 2 localhost -wdir "/local/intel/path" "/local/intel/exe" amd_machine -wdir "/local/amd/path" "/local/amd/exe"

4. 统一MPI版本与编译环境

  • 确保两台机器安装完全相同版本的MPI库;
  • 编译代码时使用通用优化选项,去掉特定CPU架构的编译参数:
    mpic++ -mtune=generic -o barrier_test barrier_test.cpp
    

内容的提问来源于stack exchange,提问作者Jeffrey Faust

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 02:07:21