STREAM Benchmark及其操作性能分析

文/raywill

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

[cpp] view plaincopy

 
  1. void tuned_STREAM_Copy()
  2. {
  3. int j;
  4. for (j=0; j<N; j++)
  5. c[j] = a[j];
  6. }
  7. void tuned_STREAM_Scale(double scalar)
  8. {
  9. int j;
  10. for (j=0; j<N; j++)
  11. b[j] = scalar*c[j];
  12. }
  13. void tuned_STREAM_Add()
  14. {
  15. int j;
  16. for (j=0; j<N; j++)
  17. c[j] = a[j]+b[j];
  18. }
  19. void tuned_STREAM_Triad(double scalar)
  20. {
  21. int j;
  22. for (j=0; j<N; j++)
  23. a[j] = b[j]+scalar*c[j];
  24. }

Copy操作最为简单,它先访问一个内存单元读出其中的值,再将值写入到另一个内存单元。 Scale操作先从内存单元读出其中的值,作一个乘法运算,再将结果写入到另一个内存单元。 Add操作先从内存单元读出两个值,做加法运算, 再将结果写入到另一个内存单元。 Triad的中文含义是将三个组合起来,在本测试中表示的意思是将Copy、Scale、Add三种操作组合起来进行测试。具体操作方式是:先从内存单元中中读两个值a、b,对其进行乘加混合运算(a + 因子 * b ) ,将运算结果写入到另一个内存单元。
下面展示用大页面和不用大页面测试STREAM的一组结果,然后再对结果进行简单分析。 测试平台:龙芯3A,主频UNKNOWN,大页面大小16M 测试结果:

首先看小页面模式(i.e. 普通的4K页面大小模式),Add > Copy > Triad > Scale,这是为什么?一次Add操作需要访问三次内存(两个读操作,一个写操作),Triad操作也需要三次访问内存,Copy和Scale操作需要两次访问内存。单位操作内,访问内存次数越多,越能够掩盖访存延迟,带宽越大。单位操作内,操作越复杂,操作完成时间越长,导致整个操作循环完成的时间越长。Add操作简单且访存次数多,故而带宽最大,Scale操作复杂且访存次数少,故而带宽最小。Copy操作简单但访存次数少,Triad操作复杂但访存次数多,考虑到编译器循环展开的作用,Copy操作能够更快地执行,最终导致Copy带宽比Triad略大。 大页面模式下,基本规律一致。由于使用了大页面,每访问16M页面才会出现一次物理缺页,相比每访问4K页面就出现一次缺页来说,访存缺页的概率大大降低。这里需要注意的是,TLB缺失开销在本实验中是无法观测到的。这是因为,本测试中,缺页开销占主导地位,访问过的内存不会被重新访问(时间局部性几乎没有),TLB缺失开销几乎可以不计。
STREAM Benchmark下载地址:http://www.cs.virginia.edu/stream/FTP/Code/

延伸内容: 以上分析基于STREAM1.0,现在已经推出了STREAM2.0测试,总体思想一致,四种操作进行了少许修改:
STREAM2 is an attempt to extend the functionality of the STREAM benchmark in two important ways:

  • STREAM2 measures sustained bandwidth at all levels of the cache hierarchy, and
  • STREAM2 more clearly exposes the performance differences between reads and writes

STREAM2 is based on the same ideas as STREAM, but uses a different set of vector kernels:

  • FILL:        similar to bzero(), but fills with a constant instead of zero
  • COPY:        similar to bcopy(), and the same as STREAM Copy
  • DAXPY:    similar to STREAM Triad, but overwrites one of the input vectors instead of writing results to a third vector
  • SUM:        sum reduction on a single vector -- reads only, no writes

Table 1: Characteristics of the STREAM2 kernels.  The value in parentheses in the "Bytes/iter read" column indicates the number of additional bytes read per iteration on machines with a "write allocate" cache policy.

STREAM2.0 下载地址: http://www.cs.virginia.edu/stream/stream2/

STREAM Benchmark的更多相关文章

  1. stream benchmark 介绍

    英文原版 https://www.cs.virginia.edu/stream/ref.html FAQ中有关于STREAM_ARRAY_SIZE NTIME OFFSET STREAM_TYPE的设 ...

  2. STREAM Benchmark及其操作性能分析

    STREAM 是业界广为流行的综合性内存带宽实际性能 测量 工具之一.随着处理器处理核心数量的增多,内存带宽对于提升整个系统性能越发重要,如果某个系统不能够足够迅速地将内存中的数据传输到处理器当中,若 ...

  3. 性能工具 stream 最新版本5.10 The STREAM benchmark

    官网下载最新性能工具 stream 最新版本5.10 https://github.com/jeffhammond/STREAM 官网下载最新性能工具 stream 最新版本5.10   http:/ ...

  4. stream benchmark 交叉编译 on psoc

    之前有研究过这个,居然忘记了,看来确实是老了,没有盘过来. 如何下载,见 linux下载网页上的文件夹以及删除文件(stream) 出现了好几个问题 1. error while loading sh ...

  5. Stream使用教程

    现在,计算机CPU运行速度的快速发展已经远远超过了内存的访问速度.越来越多的程序性能被内存带宽所限制,而不是计算机的CPU运行速率. Stream benchmark是一个简单的合成基准测试程序,衡量 ...

  6. Buildroot lmbench使用方法

    /********************************************************************** * Buildroot lmbench使用方法 * 说明 ...

  7. [基准测试]----lmbench

    引言 要评价一个系统的性能,通常有不同的指标,相应的会有不同的测试方法和测试工具,一般来说为了确保测试结果的公平和权威性,会选用比较成熟的商业测试软件.但在特定情形下,只是想要简单比较不同系统或比较一 ...

  8. Intel processor brand names-Xeon,Core,Pentium,Celeron----Xeon

    http://en.wikipedia.org/wiki/Comparison_of_Intel_processors Processor Series Nomenclature Code Name ...

  9. Java8 Stream代码详解+BenchMark测试

    Java8 Stream基础.深入.测试 1.基本介绍 1.创建方式 1.Array的Stream创建 1.直接创建 // main Stream stream = Stream.of("a ...

随机推荐

  1. DDR3简介(一)

    JEDEC成立于1958年,作为电子产业协会联盟(EIA)的一部分,为新兴的半导体产业制定标准.主要功能包括术语定义,产品特征描述,测试方法,固态存储器,DRAM,闪存卡及射频识别标签等的确定与标准化 ...

  2. [CrunchBang]禁止“桌面上鼠标滚轮切换工作区桌面“

    鼠标滚轮切换虚拟桌面相关问题, 编辑 ~/.config/openbox/rc.xml 在   <context name="Desktop">段: <mouse ...

  3. 轻量linux-Crunch bang

    主页地址:http://crunchbang.org crunch bang11昵称 wheezy crunchbang 11 基于 debian7

  4. HTML5 webapp框架

    1.Sencha Touch 注:jQTouch主要用于手机上的web Kit浏览器上实现一些包括动画.列表导航.默认应用样式等各种常见UI效果的 JavaScript 库.支持包括 iPhone.A ...

  5. 【python cookbook】【字符串与文本】3.利用shell通配符做字符串匹配

    问题:当工作在Linux shell下时,使用常见的通配符模式(即,*.py.Dat[0-9]*.csv等)来对文本做匹配 解决方案:fnmatch模块提供的两个函数fnmatch().fnmatch ...

  6. iOS 学习笔记 九 (2015.04.02)IOS8中使用UIAlertController创建警告窗口

    1.IOS8中使用UIAlertController创建警告窗口 #pragma mark - 只能在IOS8中使用的,警告窗口- (void)showOkayCancelAlert{    NSSt ...

  7. Sqoop安装及操作

    一.集群环境: Hostname IP Hadoop版本 Hadoop 功能 系统 node1 192.168.1.151 0.20.0 namenode hive+sqoop rhel5.4X86 ...

  8. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

    MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...

  9. keepalived + nginx双主 实战

    安装nginx nginx 下载地址 http://nginx.org/download/nginx-1.8.0.tar.gz 安装nginx的依赖关系 yum install pcre pcre-d ...

  10. MS Sq l数据类型

    一.nchar : 适用于西文字符,一个字符占一个字节. 二.char: 可以中文,一个字符占两个字节. 三.var :可变. 四.varchar.nvarchar . 所以一般来说,如果含有中文字符 ...