一、文档概述 STREAM是一套综合性能测试程序集,通过fortran和C两种高级且高效的语言编写完成,由于这两种语言在数学计算方面的高效率, 使得 STREAM 测试例程可以充分发挥出内存的能力。 STREAM 测试得到的是可持续运行的内存带宽最大值,而并不是一般的硬件厂商提供的理论最大值。 Stream测试原理: 1.主要有四种数组的运算,测试到内存带宽的性能,分别是:数组的复制(Copy)、数组的尺度变换(Scale)、数组的矢量求和(Add)、数组的复合矢量求和(Triad) 2. 数组的值采用了双精度(8个字节) 二、操作步骤1、下载测试工具file:///C:/Users/Sangfor/AppData/Local/Temp/ksohtml4912/wps1.png 2、安装编译命令:tar -xf stream_5.10.tar.gz 命令:cd stream_5.10 命令:gcc -O3 -mcmodel=small -mtune=native -march=native -fopenmp -DSTREAM_ARRAY_SIZE=200000000 -DNTIMES=30 stream.c -o stream.o 参数解释: -O3 ; 编译器编译优化级别; -mcmodel=small ;当单个Memory Array Size 大于2GB时需要设置此参数。 //新的gcc已经不支持‘-mcmodel=medium’参数了,可以改为“-mcmodel=large”、“-mcmodel=small”、“-mcmodel=tiny” -fopenmp; 适应多处理器环境;开启后,程序默认线程为CPU线程数, 也可以运行时也可以动态指定运行的进程数 : export OMP_NUM_THREADS=12 #12为自定义的要使用的处理器 -DSTREAM_ARRAY_SIZE=20000000;指定计算中a[],b[],c[]数组的大小, //这个参数是对测试结果影响最大,也是最需要关注的一个参数,它用来指定计算中a[],b[],c[]数组的大小,且数组的值采用了双精度(8个字节)。数组的维数 STREAM ARRAY_SIZE 定义时需要注意以下几点: //一、要充分考虑内存容量的需求,粗略估计是 STREAM ARRAY_SIZE × 8(双精度) × 3 (三个数组)<= 0.6*M;M 是用户的可用内存。 //二、要保证测试过程中,使用到的内存容量要大于处理器内的缓存,只有这样才会有内存的操作,而不仅仅是对处理器内缓存的操作。 //三、为了保证测试可以持续一段时间,测试过程中内存带宽可以达到一定的最大值, 从而避免得不到实际最大峰值的情况,如果四项测试中有完成时间小于20微秒的情况,就需要适当的增大测试数组的维度 STREAM ARRAY_SIZE。 -DNTIMES=30 ;执行的次数,并且从这些结果中选最优值。 -DOFFSET=4096 ;数组的偏移,一般可以不定义。 3、运行命令:export OMP_NUM_THREADS=n;(一般设置1线程和满线程)设置线程数 命令:./stream.o | tee stream.log (设置重定向输出到文件,这样便于记录数据) 三、操作影响范围不要在业务机测试 四、注意事项运算类型 线程数(xx cores) 测试项 释义 Copy 数组的复制 Scale 数组的尺度变换 Add 数组的矢量求和 Triad 数组的复合矢量求和 理论值计算方法:内存带宽理论值=内存运行频率×channel总数×64÷8(MB/s) 五、FAQ内存运行频率查看方式:dmidecode -t memory 将测试结果和理论值比较,看是否满足性能要求。 |