现在的位置: 首页 > 综合 > 正文

stream benchmark 的使用

2012年06月11日 ⁄ 综合 ⁄ 共 1490字 ⁄ 字号 评论关闭

STREAM 是业界广为流行的综合性内存带宽实际性能 测量 工具之一。随着处理器处理核心数量的增多,内存带宽对于提升整个系统性能越发重要,如果某个系统不能够足够迅速地将内存中的数据传输到处理器当中,若干处理核心就会处于等待数据的闲置状态,而这其中所产生的闲置时间不仅会降低系统的效率还会抵消多核心和高主频所带来的性能提升因素。STREAM 具有良好的空间局部性,是对 TLB 友好、Cache友好的一款测试。STREAM支持Copy 、Scale 、 Add、 Triad四种操作。   

Stream的编译和使用:

下载c源程序stream.c(http://www.streambench.org/)后,在命令终端中通过 -gcc stream.c

重要参数调节(在编译的时候设置):

1.STREAM_ARRAY_SIZE :调节array大小,设置方法100M(注意设置合适的大小,也许你只要10M)的方法:

gcc -O -DSTREAM_ARRAY_SIZE=100000000 stream.c -o stream.100M

2.NTIMES :调节stream在每个kernel的运行次数,输出最好的一次。设置7次的方法。

可通过-DNTIMES=7调节。

3.-DOFFSET设置

4.多核情况下,通过 -O -fopenmp 增加多核OpenMP支持

 

完整示例:

完整示例:
gcc -O -fopenmp -DSTREAM_ARRAY_SIZE=100000000 -DNTIME=20 stream.c -o stream.o
其它更多参数详细见:http://www.cs.virginia.edu/stream/ref.html

指令编译文件stream benchmark,运行命令./ stream.o。出现内存测试的程序的结果:

其中Function中的copy、scale、add、triad分别表示以下4中操作:

Copy操作最为简单,它先访问一个内存单元读出其中的值,再将值写入到另一个内存单元。

Scale操作先从内存单元读出其中的值,作一个乘法运算,再将结果写入到另一个内存单元。

Add操作先从内存单元读出两个值,做加法运算, 再将结果写入到另一个内存单元。

Triad的中文含义是将三个组合起来,在本测试中表示的意思是将Copy、Scale、Add三种操作组合起来进行测试。具体操作方式是:先从内存单元中中读两个值a、b,对其进行乘加混合运算(a + 因子 * b ) ,将运算结果写入到另一个内存单元。

其中Best Rate表示执行不同操作的程序时内存与cpu之间的带宽:

      Add >Triad > Copy > Scale,这是为什么?一次Add操作需要访问三次内存(两个读操作,一个写操作),Triad操作也需要三次访问内存,Copy和Scale操作需要 两次访问内存。单位操作内,访问内存次数越多,越能够掩盖访存延迟,带宽越大。单位操作内,操作越复杂,操作完成时间越长,导致整个操作循环完成的时间越长。Add操作简单且访存次数多,故而带宽最大,Scale操作复杂且访存次数少,故而带宽最小。Copy操作简单但访存次数少,Triad操作复杂但访 存次数多,可能是由于多核的原因,操作复杂的运算时间比操作简单的运算时间多得不多,最终导致Triad带宽比Copy略大。

 

 参考资料:

说明:http://www.cs.virginia.edu/stream/ref.html

源代码:http://www.cs.virginia.edu/stream/FTP/Code/

官网:http://www.streambench.org/

同时感谢其它三位同学的调研

抱歉!评论已关闭.