内存带宽
内存带宽计算公式:带宽=内存时钟频率×内存总线位数×倍增系数/8。
STREAM测试及相关说明
STREAM测试工具是由时为美国Delaware大学教授 John McCalpin提出和完成的, 现在随着John McCalpin教授的工作变动, 负责 STREAM 的维护和改进的所有工作人员也转移到了Virginia大学的计算机科学系。
STREAM是一套综合性能测试程序集,通过fortran和C两种高级且高效的语言编写完成,由于这两种语言在数学计算方面的高效率, 使得 STREAM 测试例程可以充分发挥出内存的能力。 STREAM 测试得到的是可持续运行的内存带宽最大值,而并不是一般的硬件厂商提供的理论最大值。
STREAM 是目前业界广为流行的综合性内存带宽实际性能测量工具之一。随着处理器处理核心数量的增多,内存带宽对于提升整个系统性能越发重要,如果某个系统不能够足够迅速地将内存中的数据传输到处理器当中,若干处理核心就会处于等待数据的闲置状态,而这其中所产生的闲置时间不仅会降低系统的效率还会抵消多核心和高主频所带来的性能提升因素。 STREAM 具有良好的空间局部性,是对 TLB 友好、Cache友好的一款测试工具。
STREAM支持Copy 、Scale 、 Add、 Triad四种操作,下面分别介绍四种操作的含义:
- Copy操作最为简单,它先访问一个内存单元读出其中的值,再将值写入到另一个内存单元。
- Scale操作先从内存单元读出其中的值,作一个乘法运算,再将结果写入到另一个内存单元。
- Add操作先从内存单元读出两个值,做加法运算, 再将结果写入到另一个内存单元。
- Triad的中文含义是将三个组合起来,在本测试中表示的意思是将Copy、Scale、Add三种操作组合起来进行测试。具体操作方式是:先从内存单元中读两个值a、b,对其进行乘加混合运算(a + 因子 * b ) ,将运算结果写入到另一个内存单元。
测试结果一般的规律是Add > Triad > Copy > Scale。一次Add操作需要访问三次内存(两个读操作,一个写操作),Triad操作也需要三次访问内存, Copy和Scale操作需要两次访问内存。单位操作内,访问内存次数越多,越能够掩盖访问内存延迟,带宽越大。
测试说明:
编译参数说明:
-mtune=native -march=native
针对CPU指令的优化,由于测试编译机即运行机器,故采用native的优化方法
-O3
编译器编译优化级别
-mcmodel=medium
当单个Memory Array Size 大于2GB时需要设置此参数
-fopenmp
适应多处理器环境;开启后,程序默认线程为CPU线程数,也可以运行时也可以动态指定运行的进程数 :export OMP_NUM_THREADS=12 #12为自定义的要使用的处理器数
-DSTREAM_ARRAY_SIZE
计算方法参考stream.c中的说明 例如本环境中查询cpu资料 L3缓存 35MB其值为 35MB*4*2*1000*1000/8 = 35millions (此值为最小值,可以适当大于此值,增大array size会增加测试时间,也会保证经历20个 clock ticks)注意 double 64bit= 8byte
-DNTIMES=10
执行10次,并从所有结果中取最优