内存带宽测试-STREAM的使用

一:STREAM的起源

STREAM测试工具是由时为美国Delaware大学教授 John McCalpin提出和完成的, 现在随着John McCalpin教授的工作变动, 负责 STREAM 的维护和改进的所有工作人员也转移到了Virginia大学的计算机科学系。

二:STREAM的用途

STREAM是一套综合性能测试程序集,通过fortran和C两种高级且高效的语言编写完成,由于这两种语言在数学计算方面的高效率, 使得 STREAM 测试例程可以充分发挥出内存的能力。 STREAM 测试得到的是可持续运行的内存带宽最大值,而并不是一般的硬件厂商提供的理论最大值。

三:软件环境准备

采用最新的内核版本的linux,测试时系统启动到单用户模式,可以通过编辑/etc/inittab文件,把其中的

id:5:initdefault

编辑为

id:3:initdefault

将一些没有必要的系统守护进程去掉,可以运行ntsysv命令,关闭除了irqbalance和messagebus.之外的系统服务进程,也可以节省系统的资源。

四:STREAM的使用方法

1、下载STREAM源程序 stream.tar (http://www.nersc.gov/users/computational-systems/cori/nersc-8-procurement/trinity-nersc-8-rfp/nersc-8-trinity-benchmarks/stream/)

2、解压stream.tar, 进入目录stream;

3、打开Makefile文件(如下图),根据平台修改编译器,以及打开需要的编译选项,例如:使用多线程打开#CFLAGS += -fopenmp编译选项,等。

编译 make ;

4、执行 (结果如下图)

./stream_c.exe

5、执行结果说明

以上测试是默认的单线程测试结果。

主要有四种数组的运算,测试到内存带宽的性能,分别是:

数组的复制(Copy)、数组的尺度变换(Scale)、数组的矢量求和(Add)、数组的复合矢量求和(Triad)。

数组的大小:Array size = 20000000

五:数据维度N定义

其中STREAM ARRAY_SIZE对测试结果影响较大。修改数组的大小,迭代的次数、数组的偏移等在源文件中。其中,数组的偏移最好对齐(如下图)。

其中N指定计算中a[],b[],c[]三个数组的大小,且数组的值采用了双精度(8个字节)。数组的维数 N定义时需要注意以下几点:

一、要充分考虑内存容量的需求,粗略估计是 N× 8(双精度) × 3 (三个数组)<= 0.6*M;M 是用户的可用内存。

二、要保证测试过程中,使用到的内存容量要大于处理器内的缓存,只有这样才会有内存的操作,而不仅仅是对处理器内缓存的操作。

三、为了保证测试可以持续一段时间,测试过程中内存带宽可以达到一定的最大值, 从而避免得不到实际最大峰值的情况,如果四项测试中有完成时间小于20微秒的情况,就需要适当的增大测试数组的维度 N。

另外,需要注意的是:-mcmodel=medium ;当单个Memory
Array Size 大于2GB时需要在编译选项中添加此参数,否则编译出错。

时间: 2024-10-10 02:29:08

内存带宽测试-STREAM的使用的相关文章

Bandwidth内存带宽测试工具

本博文为原创,遵循CC3.0协议,转载请注明出处:http://blog.csdn.net/lux_veritas/article/details/24766015 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Bandwidth内存带宽測试工具

本博文为原创,遵循CC3.0协议,转载请注明出处:http://blog.csdn.net/lux_veritas/article/details/24766015 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------

JavaScript 内存释放测试

JS内部实现垃圾回收机制 无法立即释放 只要数据没有依赖关系 就会在下轮内存回收时清理 ! function () { var array = [] , count = 100*100*100*5 , time = +new Date ; while( count-- ) array.push( document.createElement('el') ) ; console.log( +new Date - time, array.length ) ; count = 100*100*100*

JAVA 大数据内存耗用测试

JAVA 大数据内存耗用测试import java.lang.management.ManagementFactory;import java.lang.management.MemoryMXBean; public class MemoryTest { public static void main(String[] args) throws InterruptedException { int row = 50_000; int column = 20; String[] data = ne

Java内存使用量测试 看看我们天天在用的JVM到底浪费了多少内存资源

JVM内存使用量测试测试各种不同的数据结构在JVM中的内存使用量 1 import it.unimi.dsi.fastutil.ints.IntOpenHashSet; 2 3 import java.lang.management.ManagementFactory; 4 import java.lang.management.MemoryMXBean; 5 import java.lang.management.MemoryUsage; 6 import java.util.HashSet;

Android 内存泄露测试数据处理--procrank,setprop,getprop(转)

1.Android内存测试常用的几个概念. VSS--virtual set size 虚拟耗用内存(包含共享库占用的内存)RSS--Resident set size实际使用的物理内存(包含共享库占用的内存)PSS--Proportional set size 实际使用的物理内存(比例分配共享库占用的内存)USS--Unique Set size:进程独自占用的物理内存(不包含共享库占用的内存)一般来说内存占用大小如下规律:VSS>=RSS>=Pss>=USS 2.Android pr

Psping四大功能介绍:ICMP Ping/TCP Ping/延迟测试/带宽测试

本文主要介绍微软的测试工具Psping,该工具功能主要包括:ICMP Ping.TCP Ping.延迟测试.带宽测试 需要说明一种应用场景:由于Windows Azure数据中心禁ICMP,使用Psping的TCP Ping的功能来测试联通性或者故障排查就非常有用了. 工具下载地址: http://technet.microsoft.com/en-us/sysinternals/jj729731 下载完PSTools.zip包之后,放到任意本地磁盘内,解压之后如下: 使用CMD命令行工具进入PS

Qt 内存泄漏测试

在说Qt的内存测试之前,首先需要说明和肯定的一点是:Qt是绝对没有内存泄漏的,我们必须相信这一点. 接下来,说明一下基于Linux的Qt内存测试工具及其用法和说明: 一.内存测试工具Valgrind 安装就不具体说了,网上一堆堆的 二.用法: 安装完Valgrind之后,打开Qt Creator,打开我们的项目,然后在Qt Creator的菜单中的Analyse=>Valgrind Memory Analyse.注意,需要在Debug模式下才行. 三.Valgrind User Manual 具

使用iperf工具进行带宽测试

本文将介绍如何使用工具iperf进行带宽测试. iperf是一个比较好用网络性能测试工具,可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽.延迟抖动和数据包丢失.本文只介绍如何测试带宽. (工具下载地址:https://pan.baidu.com/s/1c22exDu,密码:qnmg) 下载软件,解压,iperf3.exe就是我们将要使用的工具. 在两端测试PC上安装好工具. 在测试带宽之前,确保两端网络可达,确定可以ping通(如台式机ping不通注