Stream内存性能测试工具是一套综合性能测试程序集,它主要通过Fortran和C两种高级且高效的语言编写而成,这两种语言在数学计算方面的高效率,使得Stream测试能够充分发挥出内存的能力。
Stream测试主要通过四种数组的运算来测试内存带宽的性能,这四种运算分别是:
Copy(数组的复制):先访问一个内存单元读出其中的值,再将值写入到另一个内存单元。
Scale(数组的尺度变换):先从内存单元读出其中的值,作一个乘法运算,再将结果写入到另一个内存单元。
Add(数组的矢量求和):先从内存单元读出两个值,做加法运算,再将结果写入到另一个内存单元。
Triad(数组的复合矢量求和):将Copy、Scale、Add三种操作组合起来进行测试,先从内存单元中读两个值a、b,对其进行乘加混合运算(a+因子×b),将运算结果写入到另一个内存单元。
软件特点
双精度测试:Stream测试采用双精度(8个字节)来进行数组的运算,这样可以更准确地反映出内存带宽的实际性能。
可持续运行:Stream测试得到的是可持续运行的内存带宽最大值,而不是一般的硬件厂商提供的理论最大值。
对CPU计算能力要求小:Stream测试主要测试的是内存带宽,对CPU的计算能力要求很小,这样可以更准确地反映出内存的性能。
接下来我就安装和使用下Stream这个工具,我们需要从源码进行编译安装,源码包可以在这里下载:https://github.com/jeffhammond/STREAM
先安装依赖
apt install gcc build-essential gfortran -y
git clone https://github.com/jeffhammond/STREAM.git
cd STREAM
gcc -O3 -mcmodel=small -fopenmp -DSTREAM_ARRAY_SIZE=20971520 -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
上述编译参数中需要注意的是DSTREAM_ARRAY_SIZE,由于stream.c源码推荐设置至少4倍最高级缓存,且STREAM_ARRAY_SIZE为double类型=8 Byte。所以可以直接使用下面这个公式进行获取需要实际的取值。
DSTREAM_ARRAY_SIZE=(<cpu个数> x <L3 Cache> x 1024 x 1024 x <缓存倍数>)/8
我这里实际就是251658240,通过下面这个公式直接获取。
DSTREAM_ARRAY_SIZE=$((`expr 2 \* $(lscpu | grep L3 | awk '{print $3}') \* 1024 \* 1024 \* 5` / 8))
然后可以执行生成的二进制文件进行测试了
./stream
使用命令指定运行线程数,根据自己的核心数来设置
export OMP_NUM_THREADS=12
./stream
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/1059
评论列表