stream测试内存性能

时间:2024-02-20 09:52:33

1、下载安装Stream

tar -xvf stream.tar

参数说明:

首先看下源码中对于编译stream.c的参数介绍:

#ifdef _OPENMP 定义开启多处理器运行环境,
extern int omp_get_num_threads();
#endif


#ifndef STREAM_ARRAY_SIZE 定义计算的数组大小(成员个数)
# define STREAM_ARRAY_SIZE 45000000
#endif
#ifdef NTIMES 定义值非法时,若定义计算次数,10
#if NTIMES<=1
# define NTIMES 10
#endif
#endif
#ifndef NTIMES 若定义计算次数,10
# define NTIMES 10
#endif
#ifndef OFFSET 定义数组偏移量
# define OFFSET 0
#endif

#ifndef STREAM_TYPE 定义数组为双精度,64bit,8Bytes
#define STREAM_TYPE double
#endif
以上参数可以在执行前编译指定具体值

1. -mtune=native -march=native   \\针对CPU指令的优化,由于测试编译机即运行机器,故采用native的优化方法

2. -O3                                           \\优化级别

3. -mcmodel=medium                  \\当单个Memory Array Size 大于2GB时需要设置此参数

4. -fopenmp                                 \\适应多处理器环境;开启后,程序默认线程为CPU线程数,也可以运行时也可以动态指定运行的进程数 。例如:export OMP_NUM_THREADS=12 #12为自定义的要使用的处理器数

5. -DSTREAM_ARRAY_SIZE     \\计算方法参考stream.c中的说明 例如本环境中查询cpu资料 L3缓存 8MB  其值为 8MB*4*2*1000*1000/8 = 8millions (此值为最小值,可以适当大于此值,增大array size会增加测试时间)注意 double 64bit= 8byte

6. -DNTIMES                              \\执行次数,并从所有结果中取最优

7. -DOFFSET=4096                   \\数组的偏移,一般可以不设置

 

 2、使用stream测试内存带宽

单线程编译:

gcc -O -mtune=native -march=native -mcmodel=large -DSTREAM_ARRAY_SIZE=100000000  -DNTIME=30 -DOFFSET=4096  stream.c -o stream.o

单线程测试:./stream.o

 

 

 

 多线程编译:

gcc -O -mtune=native -march=native -mcmodel=large -fopenmp -DSTREAM_ARRAY_SIZE=100000000 -DNTIMES=30 -DOFFSET=4096 stream.c -o stream.o

多线程测试:./stream.o

 

 

 

 

3、测试内存延迟

下载安装英特尔MLC工具:

(在新型的Intel处理器上精确测试内存延迟是非常困难的,因为它有复杂的硬件预取器。Intel MLC在测试延迟时会自动禁用这些预取器,并且在测试完成后自动恢复预取器原状态。预取器控制是通过修改MSR实现(Disclosure of H/W prefetcher control on some Intel processors),在Linux上需要root权限。Windows平台,提供了签名的驱动用于访问MSR)
下载地址:

https://software.intel.com/content/www/us/en/develop/articles/intelr-memory-latency-checker.html

tar -zxvf mlc_xxx.tgz -C mlc

进入mlc / Linux目录下测试

命令行参数:

mlc --latency_matrix

      打印本地和跨插槽内存延迟矩阵

mlc --idle_latency

      打印平台的空闲内存延迟

mlc --loaded_latency

      打印平台的加载内存延迟

mlc --c2c_latency

      打印平台的缓存到缓存传输延迟

mlc -e

      不要修改预取器设置

 

 

 

参考:

https://software.intel.com/content/www/us/en/develop/articles/intelr-memory-latency-checker.html