jklincn


系统内存带宽测试


硬件配置

CPU:intel Xeon 8575C(48 核 96 线程,2个 node 节点,320MB L3 Cache,8通道)

内存:512GB(8*三星64GB DDR5 RECC 2Rx4 5600MT/s)

主板:超微 X13SEI-TF(版本 1.01,BIOS 版本 2.5)

软件配置

操作系统:Ubuntu 22.04.5 LTS(5.15.0-160-generic)

测试说明

包含 2 个软件:

硬件检测与理论带宽

这里使用 dmidecode 工具来检测硬件信息

sudo apt install dmidecode
sudo dmidecode -t memory

根据输出可以看到当前通道数,内存频率(Speed)和当前配置的频率(Configured Memory Speed)

理论带宽计算公式(GB/s)= 频率(MT/s)* 通道数 * 通道宽度(Bytes)/ 1000

作者是 8 通道,5600MT/s,那么理论带宽为:5600*8*8/1000 = 358.4 GB/s

具体测试步骤

PCM

编译

git clone --recursive https://github.com/intel/pcm
cd pcm
mkdir build
cd build
cmake ..
cmake --build . --parallel -config Release

在 build/bin 目录下会生成 pcm-memor

stream

编译

git clone https://github.com/jeffhammond/STREAM.git
cd STREAM
gcc -O3 -fopenmp -DSTREAM_ARRAY_SIZE=1000000000 -mcmodel=medium -DNTIMES=10 stream.c -o stream

STREAM_ARRAY_SIZE 的设置可以参考 stream.c 文件中的注释,这里取了一个通用的较大值。

运行

为避免 NUMA 干扰,这里使用了 numactl 来控制内存分配策略,尽量跑出最高的带宽。

sudo pcm-memory 0.1 -csv=stream_bandwidth.csv -- numactl --cpunodebind=0,1 --membind=0,1 env OMP_NUM_THREADS=48 OMP_PLACES=cores OMP_PROC_BIND=spread stream

stream 会输出类似这样的表格,这里选择 Copy 作为测量结果。

-------------------------------------------------------------
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:          267174.4     0.041974     0.041920     0.042078
Scale:         259956.4     0.043536     0.043084     0.046525
Add:           263235.9     0.064184     0.063821     0.065625
Triad:         259668.1     0.064826     0.064698     0.065169
-------------------------------------------------------------
  • Copy:c[j] = a[j]

    1次读取 + 1次写入。最纯粹的数据搬运测试。

  • Scale:b[j] = scalar * c[j]

    1次读取 + 1次写入,外加一次简单的乘法运算。

  • Add:c[j] = a[j] + b[j]

    2次读取 + 1次写入。

  • Triad:a[j] = b[j] + scalar * c[j]

    2次读取 + 1次写入,外加一次乘法和一次加法。

pcm 会把采样数据保存到 stream_bandwidth.csv 文件中,使用以下命令获取硬件采集带宽:

awk -F, 'NR>2 {if($46>max) max=$46} END{print "Max Memory Bandwidth (GB/s):", max/1000}' stream_bandwidth.csv

或者计算前 10 个峰值的最大值

cut -d, -f46 stream_bandwidth.csv | tail -n +3 | sort -nr | head -n 10 | awk '{sum+=$1} END {print "Average of Top 10 Peak Bandwidth (GB/s):", sum/NR/1000}'

测试结果

次数 软件测量结果 PCM 最大值 PCM 最大 10 平均值
1 267.2 270.6 269.0
2 266.7 268.7 267.7
3 266.7 270.5 268.2
4 266.9 270.6 268.4
5 266.8 270.5 268.6
平均 266.7 270.2 268.7

根据理论带宽峰值 358.4 GB/s,达成率在 74%-75% 左右。


本站不记录浏览量,但如果您觉得本内容有帮助,请点个小红心,让我知道您的喜欢。