在跑步的时候格罗马克通过在不同设置(节点内与 Infiniband 连接的 2、3 和 4 个节点)中进行基准测试,我们发现性能严重下降。为了进行研究,我们创建了一个测试程序,用于MPI_Alltoall()
在所有节点之间传输各种大小(4 字节到 2 MB)的数据包。测试程序的内部计时和从 IntelMPII_MPI_STATS
设施收集的统计数据都显示出相同的模式:对于少量数据,产生的带宽是可以接受的,而对于较大的有效负载,行为变得不稳定:一些传输需要非常长的时间(大约 2.15秒),因此平均性能崩溃。这些非常长的延迟似乎是随机发生的,因此它们可能不存在或样本量较小(例如每个有效负载大小 100 次传输)。以下是使用 4 个节点、每个大小 1000 次传输获取的一些示例数据:
# Message size Call count Min time Avr time Max time Total time
Alltoall
1 2097152 1000 5649.09 13420.98 2152225.97 13420980.69
2 1048576 1000 2874.85 13000.87 2151684.05 13000867.13
3 524288 1000 1404.05 8484.15 2149509.91 8484153.99
4 262144 1000 719.07 5308.87 2148617.98 5308866.74
5 131072 1000 364.78 9223.77 2148303.99 9223767.04
6 65536 1000 206.95 5124.41 2147943.97 5124409.44
7 32768 1000 120.88 12562.09 2147678.85 12562089.68
8 16384 1000 36.00 57.03 93.94 57034.25
9 8192 1000 22.89 34.80 103.00 34803.87
我们通过非托管交换机使用 QDR Infiniband 和 IntelMPI 4.0.3。我尝试通过使用 ib_send_bw 设置环形传输(node1 -> node2 -> node3 -> node4 -> node1)来检查 MPI,但没有观察到任何有问题的行为:
#bytes #iterations BW peak[MB/sec] BW average[MB/sec]
16384 10000 1202.93 1202.91
32768 10000 1408.94 1367.46
65536 10000 1196.71 1195.85
131072 10000 1195.68 1180.71
262144 10000 1197.27 1167.45
524288 10000 1162.94 1154.15
1048576 10000 1184.48 1151.31
2097152 10000 1163.39 1143.60
4194304 10000 1157.77 1141.84
8388608 10000 1141.23 1138.36
我的问题:有没有办法更深入地研究这个问题,找出问题的根本原因是什么?我已经浏览过 IntelMPI 参考手册,但除了I_MPI_STATS
.