小作业一:MPI 异步通信与带宽测试¶
负责助教:张闰清 zhangrq20@mails.tsinghua.edu.cn
背景¶
在本次作业中,首先会通过osu-micro-benchmarks
对集群的MPI通信带宽和延迟进行测试,且这两种测试会在以太网络和InfiniBand两种网络环境下进行测试。
在课堂上,我们学习了 MPI 的点对点通信原语。其中, MPI_Send
和 MPI_Recv
为阻塞式通信,MPI_Isend
和 MPI_Irecv
为非阻塞式通信。非阻塞通信提供了 计算-通信 重叠的可能性。
本次作业提供的程序模拟了 计算-通信 循环出现的场景。
通过动手测试,你将体会到高速网络在高性能计算中的作用以及 计算-通信 重叠带来的性能提升。
任务¶
实验文件在集群上的位置为 /home/course/hpc/assignments/2024/exp1
。
首先将实验文件 拷贝到自己的目录 ,并进入 exp1
目录:
cp -R /home/course/hpc/assignments/2024/exp1 ~/
cd ~/exp1/
本次作业提供了 mpi_sync.cpp
和 mpi_async.cpp
两份代码,分别使用阻塞/非阻塞通信原语模拟了 计算-通信 循环出现的场景。使用以下方式编译程序:
spack load openmpi
make
应当得到与下面类似的输出:
mpicxx mpi_sync.cpp -O3 -std=c++11 -o mpi_sync
mpicxx mpi_async.cpp -O3 -std=c++11 -o mpi_async
编译得到的 mpi_sync
和 mpi_async
程序有三个输入参数,分别代表 运行轮数、每次通信消息的长度、每次的计算量。
我们将运行轮数固定为 10
。
在消息长度较短的时候,可能性能会有波动,助教在批改时会考虑到此问题。
任务一:网络带宽和延迟测试¶
首先测试Infiniband,运行脚本为osu_latency_ib.sh
和osu_bw_ib.sh
。 使用命令./osu_latency_ib.sh
和./osu_bw_ib.sh
运行。
请补全下列表格:
编号 | 消息长度 | 延迟 (us) | 带宽(MB/s) |
---|---|---|---|
1 | 1 | ||
2 | 2 | ||
3 | 4 | ||
4 | 8 | ||
5 | 16 | ||
6 | 32 | ||
7 | 64 | ||
8 | 128 | ||
9 | 256 | ||
10 | 512 | ||
11 | 1024 | ||
12 | 2048 | ||
13 | 4096 | ||
14 | 8192 | ||
15 | 16384 | ||
16 | 32768 | ||
17 | 65536 | ||
18 | 131072 | ||
19 | 262144 | ||
20 | 524288 | ||
21 | 1048576 | ||
22 | 2097152 | ||
23 | 4194304 |
接下来测试以太网络,运行脚本为osu_latency_ethernet.sh
和osu_bw_ethernet.sh
。 使用命令./osu_latency_ethernet.sh
和./osu_bw_ethernet.sh
运行。
请补全下列表格:
编号 | 消息长度 | 延迟 (us) | 带宽(MB/s) |
---|---|---|---|
1 | 1 | ||
2 | 2 | ||
3 | 4 | ||
4 | 8 | ||
5 | 16 | ||
6 | 32 | ||
7 | 64 | ||
8 | 128 | ||
9 | 256 | ||
10 | 512 | ||
11 | 1024 | ||
12 | 2048 | ||
13 | 4096 | ||
14 | 8192 | ||
15 | 16384 | ||
16 | 32768 | ||
17 | 65536 | ||
18 | 131072 | ||
19 | 262144 | ||
20 | 524288 | ||
21 | 1048576 |
结合测试结果,请回答问题:
- 请描述当消息长度增加时,带宽和延迟分别呈现出什么样的趋势?
- 该趋势在两种网络下有何不同?
- 为什么会有这样的趋势?
- 对比InfiniBand和以太网络下的带宽和延迟,它们之间的差距是多少?
任务二:阻塞与非阻塞的对比¶
本任务的运行脚本为 task2.sh
。使用命令 ./task2.sh
运行。
我们将使用 mpi_sync
和 mpi_async
程序来对比两种通信模式的性能。具体而言,你需要补全以下表格:
编号 | 消息长度 | 计算量 (ms) | mpi_sync 总耗时 (ms) | mpi_async 总耗时 (ms) |
---|---|---|---|---|
1 | 100000000 | 10 | ||
2 | 100000000 | 20 | ||
3 | 100000000 | 40 | ||
4 | 100000000 | 80 | ||
5 | 100000000 | 160 |
并回答问题:
- 通信时间和计算时间满足什么关系时,非阻塞通信程序能完美掩盖通信时间?
- 简述两份代码的不同之处。
实验提交¶
此实验仅需提交实验报告,请在下发的 report.md
模板中填写内容,并将 PDF 文件 提交至网络学堂。