用途:指导智能体进行 MPI(消息传递接口)编程,适用于跨多节点或多插槽并行、实现分布式算法(矩阵分解、FFT)、将 MPI 进程并行与 OpenMP 线程并行结合、通过 Slurm/PBS + mpirun 运行 HPC 作业、调试死锁与消息不匹配、以及使用 MPI-IO 并行文件 I/O。
主要能力与用法:
- 最小程序:调用 MPI_Init、MPI_Comm_rank、MPI_Comm_size、MPI_Finalize;编译与运行命令为 mpicc -o hello hello.c,mpirun -np 4 ./hello 或 mpiexec -n 4 ./hello。
- 点对点:MPI_Send/MPI_Recv,按 tag 与 source 匹配消息。
- 集合通信:MPI_Bcast(一到多)、MPI_Scatter(分发分块)、MPI_Gather(收集分块)、MPI_Allreduce(归约并广播结果)、MPI_Barrier(同步)、MPI_Alltoall(全交换)。
- 非阻塞通信:MPI_Isend、MPI_Irecv、MPI_Wait、MPI_Waitall,用于重叠计算与通信以隐藏延迟。
- 子通信域:MPI_Comm_split 创建分组,配合 MPI_Comm_rank/Size 与 MPI_Comm_free。
- MPI+OpenMP 混合:用 #pragma omp parallel 在线程内处理本 rank 数据分区,再 MPI_Barrier 与 MPI_Allreduce;设置 export OMP_NUM_THREADS=4,用 mpirun -np 8 --bind-to core ./hybrid_app(8 进程×4 线程=32 核),可用 --map-by ppr:2:socket 绑定 rank 到插槽。
- 启动:主机文件示例含 node0 slots=4、node1 slots=4,命令为 mpirun -np 8 --hostfile hosts.txt ./app;Slurm 下用 srun -n 64 ./app 或 mpirun -np $SLURM_NTASKS ./app;调试可用 --tag-output 标记 rank 输出,或 mpirun -np 4 -gdb ./app 逐个 rank 调试。
- MPI-IO:用 MPI_File_open、MPI_File_write_at 写入,集合 I/O 使用 MPI_File_write_at_all 提升性能,最后 MPI_File_close。
- 性能问题:负载不均、rank 0 串行化、过多同步、小消息、大规模进程数下的 Alltoall 是常见瓶颈;可用 mpiP 或 IPM、TAU 等剖析。
常见问题与修复:MPI_Recv 挂起多为 tag/source 不匹配,检查收发配对;死锁常因循环等待,调整通信顺序或改用非阻塞;Allreduce 结果错误多因数据类型/计数不符;扩展性差常因 rank 0 瓶颈;MPI_ERR_TRUNCATE 为接收缓冲区过小;混合模式超订则令 OMP_NUM_THREADS = 核数/rank 数。
限制:资料未提供许可证、价格、平台支持矩阵及书籍/协议版本要求,相关事实暂未提供。