使用stream测试内存带宽性能

以centos7为例


简介:stream由Virginia University提供,通过生成四种不同模式下的内存读写操作,用于测试高性能计算机的内存带宽。 现代计算机中都是用缓存技术,为了保证测试正确反映计算机内存的读写性能,测试中使用的数据量应远大于缓存大小。

Copy为最简单的操作,即从一个内存单元中读取一个数,并复制到另一个内存单元,有2次访存操作。
Scale是乘法操作,从一个内存单元中读取一个数,与常数scale相乘,得到的结果写入另一个内存单元,有2次访存。
Add是加法操作,从两个内存单元中分别读取两个数,将其进行加法操作,得到的结果写入另一个内存单元中,有2次读和1次写共3次访存。
Triad是前面三种的结合,先从内存中读取一个数,与scale相乘得到一个乘积,然后从另一个内存单元中读取一个数与之前的乘积相加,得到的结果再写入内存。所以,有2次读和1次写共3次访存操作。

测试结果一般的规律是Add > Triad > Copy > Scale。一次Add操作需要访问三次内存(两个读操作,一个写操作),Triad操作也需要三次访问内存, Copy和Scale操作需要两次访问内存。单位操作内,访问内存次数越多,越能够掩盖访存延迟,带宽越大。


1.下载并解压stream
直接使用下面的wget下载命令即可

# wget https://asc.llnl.gov/computing_resources/purple/archive/benchmarks/memory/stream.tar

# tar -xvf stream.tar

如果上面链接失效可以直接从下面链接下载
链接:https://pan.baidu.com/s/15ds1TrGKCvG6YMGqjmlY4Q
提取码:kryj

2.编译
单线程编译:

# gcc -mtune=native -march=native -O3 -mcmodel=medium -DSTREAM_ARRAY_SIZE=200000000 -DNTIMES=30 stream.c -o stream.o

多线程编译(一般采用多线程编译):

# gcc -mtune=native -march=native -O3 -mcmodel=medium  -fopenmp -DSTREAM_ARRAY_SIZE=8000000 -DNTIMES=30 stream.c -o stream.o

上述多线程编译参数含义如下
-mtune=native -march=native:针对CPU指令的优化,此处由于编译机即运行机器。故采用native的优化方法。使用-mtune =native将在所选指令集的约束下生成针对本地计算机优化的代码。使用-march =native将启用本地计算机支持的所有指令子集(因此结果可能无法在其他计算机上运行)

-O3:编译器编译优化级别

-mcmodel=medium:当单个Memory Array Size 大于2GB时需要设置此参数(小于2GB时也可保留这个参数,此时这个参数不生效)

-fopenmp:适应多处理器环境;开启后,程序默认线程为CPU线程数

-DSTREAM_ARRAY_SIZE=8000000:这个参数是对测试结果影响最大,也是最需要关注的一个参数,它用来指定计算中a[],b[],c[]数组的大小,它的值不能太大,也不能太小,太大的话,会延长测试时长并影响测试准确性甚至执行测试失败,太小的话,CPU Cache会干扰测试结果,不能测试出真实的内存带宽。要确定合适的size值,首先要使用cat /sys/devices/system/cpu/cpu0/cache/index3/size命令查看测试机的三级缓存,假如测试机配置为4C8G,cpu拓扑为socket=1,core=2,thread=2,查到的三级缓存为16384K也就是16MB,那么size应该设置为(1socket * 16MB/socket * 1000 * 1000) * 4 / 8B = 8000000,乘以4是因为官方建议size是三级缓存的四倍,除以8是因为STREAM_ARRAY_SIZE为double类型,每个double类型占用8Byte。

-DNTIMES=30:执行的次数,并且从这些结果中选最优值

3.编译后执行测试

# ./stream.o 

注:如果重复进行测试,则再次测试前需执行以下命令,用以删除所有类型的IPC对象,包括共享内存段、消息队列和信号量,它会移除系统中的所有IPC对象,并释放相应资源
# ipcrm --all

测试结果如下图
在这里插入图片描述

  • 14
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值