我在NERSC的Cori的Haswell节点上进行了osu_mbw_mr测试(来自OSU微基准测试)并得到了一些我无法解释的奇怪结果。
该节点有两个插槽,每个插槽都有一个16核Intel Xeon处理器E5-2698 v3。两个处理器通过QPI连接。可以找到节点和CPU的详细信息here和here。
如果我是正确的,节点的最大内存带宽是68GB / s x 2 CPUs = 136GB / s,QPI的最大带宽是 9.6 GT / s x 2链接x 2字节/链接= 38.4 GB / s,双向。我还用STREAM测量了内存带宽。复制带宽约为110GB / s,接近理论值。那很好。
我在一个节点上运行了osu_mbw_mr,其中有32个MPI等级,并将前16个等级放在套接字0上,接下来的16个等级放在套接字1上。
在osu_mbw_mr中,每个等级分配一个发送缓冲区(s_buf)和一个接收缓冲区(r_buf),然后初始化它们(因此我假设缓冲区通过第一次触摸与它们的NUMA域具有亲和性)。对于32个等级,等级0~15将固定数量的消息(窗口大小)背对背地发送到成对的接收等级,即16~31。我用过Cray MPICH。我认为无论MPI如何实现,净效果都是“将数据从s_buf(跨越QPI链接)复制到r_buf”。
以下是我的测试结果。我不明白为什么8K,16K等消息大小的带宽如此之大,并且突然下降到2MB消息。带宽大于QPI带宽,甚至比DRAM带宽还要大。在我的理论中,带宽应该受到QPI带宽的一半(19.2GB / s)的约束,因为我们将数据从套接字0单向发送到1。
有什么问题?感谢。
# OSU MPI Multiple Bandwidth / Message Rate Test v5.4.0
# [ pairs: 16 ] [ window size: 64 ]
# Size MB/s Messages/s
1 47.55 47550478.99
2 94.74 47371180.52
4 192.20 48048858.02
8 389.46 48683010.22
16 767.81 47988126.30
32 1527.34 47729482.30
64 2139.12 33423707.44
128 4010.11 31328973.47
256 7749.86 30272897.24
512 13507.57 26381964.28
1024 15918.48 15545388.20
2048 19846.84 9690838.02
4096 21718.65 5302404.21
8192 146607.66 17896442.75
16384 183905.06 11224674.34
32768 240191.47 7330061.88
65536 280938.91 4286787.57
131072 238150.74 1816945.97
262144 156911.43 598569.60
524288 156919.72 299300.61
1048576 143541.91 136892.24
2097152 28835.20 13749.69
4194304 26170.38 6239.50
正如一条评论提醒我的那样,OSU微基准测试在发送中反复使用相同的发送缓冲区。所以数据基本上都在缓存中。这次我使用了英特尔MPI基准测试,它可以选择发送高速缓存数据。我用
在同一台机器上运行它srun -n 32 -c 2 -m block:block --cpu_bind = cores,verbose ./IMB-MPI1 Uniband -off_cache 40,64
得到这些数字,正如预期的那样低于内存带宽。
#---------------------------------------------------
# Benchmarking Uniband
# #processes = 32
#---------------------------------------------------
#bytes #repetitions Mbytes/sec Msg/sec
0 1000 0.00 56794458
1 1000 49.89 49892748
2 1000 99.96 49980418
4 1000 199.34 49834857
8 1000 399.30 49912461
16 1000 803.53 50220613
32 1000 1598.35 49948450
64 1000 2212.19 34565472
128 1000 4135.43 32308048
256 1000 7715.76 30139698
512 1000 12773.43 24948113
1024 1000 16440.25 16054932
2048 1000 19674.01 9606451
4096 1000 21574.97 5267326
8192 1000 92699.99 11315916
16384 1000 90449.54 5520602
32768 1000 27340.68 834371
65536 640 25626.04 391022
131072 320 25848.76 197210
262144 160 25939.50 98951
524288 80 25939.48 49476
1048576 40 25909.70 24709
2097152 20 25915.54 12357
4194304 10 25949.97 6187