stream测试内存性能
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构