Mpi多机通信环境搭建(2台机器)
🔧 一、安装MPI
在电脑上安装MPI库:
bash
sudo apt install libopenmpi-dev
🏷️ 二、给机器命名
两台机器的IP地址分别是 10.0.62.86
和 10.0.62.87
。为了避免每次输入长串IP地址,我们在hosts文件中为它们起名。
在两台机器上分别执行:
bash
sudo vim /etc/hosts
添加以下内容:
text
10.0.62.86 hostgui 10.0.62.87 hostser
🔑 三、免密通信设置
基本思路: 生成各自的ssh key → 把自己的公钥加入authorized_keys → 用scp把公钥传给另一方 → 对方也把公钥加入authorized_keys并传输回来 → 完成免密
1. 生成SSH密钥对
在hostgui和hostser上分别执行:
bash
ssh-keygen -t rsa
一直按回车即可。生成完毕后,在 ~/.ssh
目录下会生成id_rsa文件。
2. 在hostgui机器上配置
bash
# 在~/.ssh/目录下 cp id_rsa.pub authorized_keys scp authorized_keys root@10.0.62.87:~/.ssh/
3. 在hostser机器上配置
bash
# 在~/.ssh/目录下 cat id_rsa.pub >> authorized_keys scp authorized_keys root@10.0.62.86:~/.ssh
4. 测试免密登录
在hostgui机器上执行:
bash
ssh hostser
在hostser机器上执行:
bash
ssh hostgui
5. 确认当前环境
bash
ifconfig
📁 四、准备测试文件
在hostser机器下,创建测试文件 mpi_work_test.c
:
c
#include <mpi.h> #include <stdio.h> #include <math.h> #include <time.h> #include <unistd.h>int main(int argc, char** argv) {int rank, size;char hostname[256];double start_time, end_time;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD, &rank);MPI_Comm_size(MPI_COMM_WORLD, &size);gethostname(hostname, sizeof(hostname));// 记录开始时间start_time = MPI_Wtime();// 模拟计算工作负载 - 计算圆周率的一部分long long num_steps = 9000000000; // 90亿步double partial_pi = 0.0;double step = 1.0 / (double)num_steps;for (long long i = rank; i < num_steps; i += size) {double x = (i + 0.5) * step;partial_pi += 4.0 / (1.0 + x * x);}partial_pi *= step;// 收集所有结果double global_pi;MPI_Reduce(&partial_pi, &global_pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);end_time = MPI_Wtime();printf("进程 %d (机器 %s) 完成计算,耗时: %.2f 秒\n", rank, hostname, end_time - start_time);if (rank == 0) {printf("\n=== 最终结果: π ≈ %.15f ===\n", global_pi);printf("=== 总计算时间: %.2f 秒 ===\n", end_time - start_time);printf("=== 性能验证: 所有机器协同工作完成计算 ===\n");}MPI_Finalize();return 0; }
编译程序:
bash
cd /home/MpiTest mpicc -o mpi_work_test mpi_work_test.c
📂 五、在两台机器上准备相同的测试文件
在hostser机器上:
bash
pwd # /home/MpiTest scp mpi_work_test root@10.0.62.86:/home/MpiTest
在hostgui机器上验证:
bash
cd /home/MpiTest ls -l # 应该显示: -rwxr-xr-x 1 root root 17192 10月 11 09:45 mpi_work_test
⚙️ 六、准备hostfile文件
创建hostfile文件来为两个节点指定slot数量:
hostfile内容:
text
hostgui slots=3 hostser slots=3
🚀 七、并行计算性能测试
在hostser上执行并行计算:
bash
mpirun --allow-run-as-root -machinefile hostfile -np 6 ./mpi_work_test
📊 八、测试结果监控
在两台机器上分别运行htop来监控进程运行情况:
bash
htop
参考文件:
https://zhuanlan.zhihu.com/p/84642385