Stream内存性能测试工具使用指南
创作时间:
作者:
@小白创作中心
Stream内存性能测试工具使用指南
引用
CSDN
1.
https://blog.csdn.net/Micha_Lu/article/details/143211380
Stream内存性能测试工具是一套综合性能测试程序集,主要通过Fortran和C两种高级语言编写,用于测试内存带宽性能。本文将详细介绍Stream测试的原理、特点以及具体的部署和测试步骤,包括软件的安装、编译和运行等。
一、前言
1、介绍说明
Stream内存性能测试工具是一套综合性能测试程序集,它主要通过Fortran和C两种高级且高效的语言编写而成,这两种语言在数学计算方面的高效率,使得Stream测试能够充分发挥出内存的能力。
2、测试原理
Stream测试主要通过四种数组的运算来测试内存带宽的性能,这四种运算分别是:
- Copy(数组的复制):先访问一个内存单元读出其中的值,再将值写入到另一个内存单元。
- Scale(数组的尺度变换):先从内存单元读出其中的值,作一个乘法运算,再将结果写入到另一个内存单元。
- Add(数组的矢量求和):先从内存单元读出两个值,做加法运算,再将结果写入到另一个内存单元。
- Triad(数组的复合矢量求和):将Copy、Scale、Add三种操作组合起来进行测试,先从内存单元中读两个值a、b,对其进行乘加混合运算(a+因子×b),将运算结果写入到另一个内存单元。
3、软件特点
- 双精度测试:Stream测试采用双精度(8个字节)来进行数组的运算,这样可以更准确地反映出内存带宽的实际性能。
- 可持续运行:Stream测试得到的是可持续运行的内存带宽最大值,而不是一般的硬件厂商提供的理论最大值。
- 对CPU计算能力要求小:Stream测试主要测试的是内存带宽,对CPU的计算能力要求很小,这样可以更准确地反映出内存的性能。
二、部署测试
1、安装软件
1.1、安装依赖
- Ubuntu
apt-get update
apt-get install gcc build-essential gfortran -y
1.2、下载源码
下载 stream.c 源码文件
- 方式一
wget http://www.cs.virginia.edu/stream/FTP/Code/stream.c
- 方式二
wget https://github.com/jeffhammond/STREAM/archive/refs/heads/master.zip
unzip master.zip
cd master
1.3、编译可执行文件
设置编译参数,将 stream.c 源码编译为 stream 可执行文件,用于后续内存测试
gcc -O3 -mcmodel=small -fopenmp -DSTREAM_ARRAY_SIZE=117964800 -DNTIMES=3 stream.c -o stream
-O3:用于指定编译器编译优化级别,当前设置参数为最高编译优化级别3-mcmodel=small:当单个Memory Array Size 大于2GB时需要设置此参数-fopenmp:用于启用OpenMP,适用于多核处理环境,一般需要开启,开启后测试默认使用线程数为CPU核数-DSTREAM_ARRAY_SIZE:用于指定测试数组(a[]、b[]、c[])的大小,默认值为10000000,该参数值对测试结果影响很大
该参数值需要远大于CPU最高级缓存(一般为L3 Cache),否则测试的性能就是CPU缓存的吞吐性能,而非内存的吞吐性能-DNTIMES:用于指定执行次数,从所有测试结果中选最优值stream.c:用于指定stream源码文件-o stream:用于指定源码编译输出二进制文件名,示例编译好的二进制文件名为stream
由于stream.c源码推荐设置至少4倍最高级缓存,且STREAM_ARRAY_SIZE为double类型=8 Byte,计算公式如下
DSTREAM_ARRAY_SIZE = (<cpu个数> x <L3 Cache> x 1024 x 1024 x <缓存倍数>)/8
1.4、参考示例
- 查看当前cpu个数为1个,当前CPU最高缓存为L3 cache,缓存大小为3MB
root@node51:~# lscpu | grep "cache"
L1d cache: 256 KiB
L1i cache: 256 KiB
L2 cache: 1 MiB
L3 cache: 3 MiB
- 测试数组大小取值为CPU缓存大小300倍,即(1 x 3 x 1024 x 1024 x 300 )/8=117964800
root@node51:~# gcc -O3 -mcmodel=small -fopenmp -DSTREAM_ARRAY_SIZE=117964800 -DNTIMES=3 stream.c -o stream
2、运行测试
2.1、命令说明
- 使用多线程测试,指定运行线程数为当前CPU核数8
export OMP_NUM_THREADS = 8
- 运行
./stream命令执行内存测试
注:为避免出现误差,通常会执行3次取平均值作为测试结果
./stream
2.2、参考示例
参考示例如下,指定运行线程数为8,重复执行3次测试,取3次 Best Rate MB/s 平均值作为测试结果
root@node51:/var/log/test/stream_5.10# export OMP_NUM_THREADS=8
root@node51:/var/log/test/stream_5.10# ./stream
-------------------------------------------------------------
STREAM version $Revision: 5.10 $
-------------------------------------------------------------
This system uses 8 bytes per array element.
-------------------------------------------------------------
Array size = 117964800 (elements), Offset = 0 (elements)
Memory per array = 900.0 MiB (= 0.9 GiB).
Total memory required = 2700.0 MiB (= 2.6 GiB).
Each kernel will be executed 3 times.
The *best* time for each kernel (excluding the first iteration)
will be used to compute the reported bandwidth.
-------------------------------------------------------------
Number of Threads requested = 8
Number of Threads counted = 8
-------------------------------------------------------------
Your clock granularity/precision appears to be 1 microseconds.
Each test below will take on the order of 132290 microseconds.
(= 132290 clock ticks)
Increase the size of the arrays if this shows that
you are not getting at least 20 clock ticks per test.
-------------------------------------------------------------
WARNING -- The above is only a rough guideline.
For best results, please be sure you know the
precision of your system timer.
-------------------------------------------------------------
Function Best Rate MB/s Avg time Min time Max time
Copy: 16828.8 0.113315 0.112155 0.114476
Scale: 15158.4 0.129523 0.124514 0.134532
Add: 15846.3 0.183065 0.178663 0.187467
Triad: 15743.2 0.184940 0.179834 0.190046
-------------------------------------------------------------
Solution Validates: avg error less than 1.000000e-13 on all three arrays
-------------------------------------------------------------
热门推荐
如何使用数字万用表测量二极管的好坏与极性
C2驾照可以驾驶哪些类型的车辆?
宋朝灭亡的多重因素分析:外侵、腐败与军弱交织的历史考察
3种跑步方法助你提升速度,减少受伤风险
在马来西亚体验“世界年”
芹菜种植最简单方法
教你三招鉴别热咳与寒咳!
急速增高5到8厘米?“增高产品”骗局被揭秘!帮孩子科学长高,记住这几点
颜真卿的《祭侄文稿》,究竟好在哪里?
乡愁归来!北上广不再是唯一,回乡盖房热潮背后的文化坚守
游泳技巧 | 蛙泳换气配合好动作才协调
崩坏星穹铁道三月七新角色深度解析
科普 | 裴秀的地图测图理论及测量工具的发展
常见的 10 大图标设计风格
为什么不能把「办公」写成「办工」?
主板大比拼!哪款才是性价比之王?
牛肉粿条粉,潮汕地方特色美食之一
让我们的生活更美好!小贴士助力卫生环境整治
亲情之歌:温暖心灵的旋律与词句
麦迪科技发布异动公告:与华为合作尚未形成收入,2024年预亏1.9亿-2.5亿元
如何进行电解水制氢?原理简单且操作方便
天津必尝的9家耳朵眼炸糕!香脆软糯,传统美味!
拿破仑·波拿巴:军事天才与其不朽遗产
理解英语阅读中的上下文线索
用人单位支付工资应不低于当地的什么标准
裤子上油漆怎么洗
侵犯消费者权益的行为
拱北口岸综合体,湾仔海鲜街来了!
王者荣耀S25赛季庄周玩法攻略:铭文出装与实战技巧详解
案例教学法在工商管理教学中的应用浅谈