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. Web服务器处理HTTP压缩之gzip、deflate压缩

    现如今在处理http请求的时候,由于请求的资源较多,如果不启用压缩的话,那么页面请求的流量将会非常大.启用gzip压缩,在一定程度上会大大的提高页面性能.   目录 一.什么是gzip 二.什么是de ...

  2. 记centos7中的network.service启动失败

    查看启动失败的服务: systemctl --failed 然后就发现了一个叫network.service 的服务启动失败了. 后来找到了原因, 是因为配置文件中没有写上网卡的硬件地址 配置文件所在 ...

  3. php防止刷新(流量攻击)的一段代码

    <?php//查询禁止IP$ip =$_SERVER['REMOTE_ADDR'];$fileht=".htaccess2";if(!file_exists($fileht) ...

  4. Bonbo Git Server

    Install This page covers simple Bonobo Git Server installation. Be sure to check prerequisites page ...

  5. Openstack的nova-network的vlan模式扩展2

    接上一篇,上一篇我们使用的是nova-manage命令来创建的网络,这里就有一些知识需要了解 遇到的问题 控制节点的前面的BUG已经按官方解决BUG方式解决了,但是在开发dashboard,使用nov ...

  6. ILOG的一个基本应用——解决运输问题、转运问题

    一.Ilog软件 该软件用来解决优化问题,大部分是线性问题,深一点的其他内容还不清楚.只知道一些基础的应用,网上相关内容很少.接下来就解决一个简单的运输问题 二.运输问题 数学模型 ILOG OPL程 ...

  7. android textView 添加超链接(两种实现方式)

    在textView添加超链接,有两种方式,第一种通过HTML格式化你的网址,一种是设置autolink,让系统自动识别超链接,下面为大家介绍下这两种方法的实现 在textView添加超链接,有两种方式 ...

  8. 161123、ssh scp 复制文件和文件夹

    复制文件或目录命令:  复制文件:  (1)将本地文件拷贝到远程  scp 文件名用户名@计算机IP或者计算机名称:远程路径 本地192.168.80.100客户端  scp /root/instal ...

  9. 关于全站https必要性http流量劫持、dns劫持等相关技术

    关于全站https必要性http流量劫持.dns劫持等相关技术 微信已经要求微信支付,申请退款功能必须12月7号之前必须使用https证书了(其他目前为建议使用https),IOS也是2017年1月1 ...

  10. page指令

    <%@ page 属性1=“value” 属性2=“value2” ......%> page的属性有13种: 1)language  --- 声明所使用的脚本语言的种类.(可省略) va ...