简介:Stream是业界主流的内存带宽测试程序,测试行为相对简单可控。该程序对CPU的计算能力要求很小,对CPU内存带宽压力很大。stream测试得到的是可持续运行的内存带宽最大值,而并不是一般的硬件厂商提供的理论最大值,具有如下特点:
1、主要有四种数组的运算,测试到内存带宽的性能分别为:
数组的复制(Copy)、数组的尺度变换(Scale)、数组的矢量求和(Add)、数组的复合矢量求和(Triad)。
2、数组的值采用了双精度(8个字节)
下载工具:
git clone https://github.com/jeffhammond/STREAM
安装编译工具gcc:
yum install gcc
编译:
gcc -O3 -mcmodel=medium -mtune=native -march=native -fopenmp -DSTREAM_ARRAY_SIZE=200000000 -DNTIMES=30 stream.c -o stream
如果出现下面的error:
"""stream.c:(.text+0x84): relocation truncated to fit: R_X86_64_PC32 against `.bss'"""
则更换模型参数
-mcmodel=medium #可以选择的参数有large medium small 一般内存大于2G的用medium
执行:
./stream
查看结果:
(base)[root@ci4vyvxi572ysx2s STREAM]# ./stream-------------------------------------------------------------STREAMversion $Revision: 5.10 $-------------------------------------------------------------Thissystem uses 8 bytes per array element.-------------------------------------------------------------Arraysize = 200000000 (elements), Offset = 0 (elements)Memoryper array = 1525.9 MiB (= 1.5 GiB).Totalmemory required = 4577.6 MiB (= 4.5 GiB).Eachkernel will be executed 30 times.The*best* time for each kernel (excluding the first iteration)willbe used to compute the reported bandwidth.-------------------------------------------------------------Numberof Threads requested = 8Numberof Threads counted = 8-------------------------------------------------------------Yourclock granularity/precision appears to be 1 microseconds.Eachtest below will take on the order of 54719 microseconds.(= 54719 clock ticks)Increasethe size of the arrays if this shows thatyouare not getting at least 20 clock ticks per test.-------------------------------------------------------------WARNING-- The above is only a rough guideline.Forbest results, please be sure you know theprecisionof your system timer.-------------------------------------------------------------FunctionBest Rate MB/s Avg time Min time Max timeCopy: 49458.9 0.085377 0.064700 0.093439Scale: 44582.5 0.087781 0.071777 0.094408Add: 47823.5 0.124260 0.100369 0.130012Triad: 49354.8 0.124521 0.097255 0.131659-------------------------------------------------------------SolutionValidates: avg error less than 1.000000e-13 on all three arrays-------------------------------------------------------------
结果参数解析:
Copy:复制操作,即从内存单元中读取一个数,并复制到其他内存单元中,两次访问内存操作Scale:乘法操作,即从内存单元中读取一个数,与常数相乘,得到的记过存到其他内存单元,两次访问内存操作Add:加法操作,从两个内存单元中分别读取两个数,将其进行加法操作后,得到的结果写入另一个内存单元中,3次访问内存操作Triad:前面三种的结合,先从内存中读取一个数,与一个常数相乘得到一个乘积,然后从另一个内存单元中读取一个数与刚才乘积结果相加,得到的结果写入内存。3次访问内存操作
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!