Stream应用及原理
Stream是业界广为流行的综合性内存带宽实际性能测量工具之一。随着处理器处理核心数量的增多,内存带宽对于提升整性能越发重要,如果某个系统不能够足够迅速地将内存中的数据传输到处理器当中,若干处理核心就会处于等待数据的闲置状态,而这其中所产生的闲置时间不仅会降低系统的效率还会抵消多核心和高主频所带来的性能提升因素。Stream具有良好的空间局部性,是对TLB友好、Cache友好的一款测试。Stream测试包含Copy、Scale、Add、Triad四种操作:
测试结果一般的规律是Add > Triad > Copy > Scale。一次Add操作需要访问三次内存(两个读操作,一个写操作),Triad操作也需要三次访问内存, Copy和Scale操作需要两次访问内存。单位操作内,访问内存次数越多,越能够掩盖访存延迟,带宽越大。另一方面,单位操作内,浮点计算次数越多,操作完成时间越长,导致整个操作循环完成的时间越长,带宽越低。Add操作简单且访存次数多,故而带宽最大,Scale操作复杂且访存次数少,故而带宽最小。
内存带宽理论计算公式: Memory Frequency * Channel * 64bit/8
Stream的官方下载地址 http://www.cs.virginia.edu/stream/FTP/Code/stream.c:目前最新的版本为2013/01/17发布的v5.10。
stream.c由C语言编写,可编译为串行版本进行单线程测试,或者编译成OpenMP版本,进行多线程测试。
内存带宽测试的参数解读:
- STREAM_ARRAY_SIZE
- 调节测试数组的大小&