L1/2/3缓存探测
又是一篇cpu硬件探测的博客,这篇是探测L1(数据)/2/3缓存。
测试方法
采取的方式如下:
- 每次读取:32 字节(一条 AVX2 指令)
- 每轮循环:256 字节
- 测试范围:在指定大小内循环(从1KB到32MB)
- 总读取量:1GB
核心代码
listing_0152_cache_test.asm
1 | Read_32x8: |
代码来自 https://github.com/cmuratori/computer_enhance
测试结果
平均带宽数据表
| 测试大小 | 平均带宽 (GB/s) |
|---|---|
| 1KB | 265.157236 |
| 2KB | 208.246211 |
| 4KB | 176.882216 |
| 8KB | 182.609472 |
| 16KB | 187.125108 |
| 32KB | 194.412047 |
| 48KB | 182.274637 |
| 64KB | 102.950966 |
| 128KB | 105.891953 |
| 256KB | 94.867362 |
| 512KB | 93.022204 |
| 1MB | 76.777218 |
| 1.25MB | 95.031215 |
| 2MB | 46.993009 |
| 4MB | 41.088154 |
| 8MB | 26.590511 |
| 16MB | 16.570801 |
| 24MB | 26.213468 |
| 32MB | 11.929584 |
| 64MB | 12.648729 |
| 128MB | 13.018106 |
| 256MB | 13.361990 |
| 512MB | 13.677820 |
性能分析
带宽曲线图

在 48KB、1.25MB、24MB 出现了明显的带宽下降,这就是 L1/L2/L3 的缓存边界。
CPU缓存规格对比

符合 P-CORE 实际数据。
VTune性能分析
VTune的结果证实了程序确实跑在P-CORE上:
1. 指令执行数量
| 核心类型 | INST_RETIRED.ANY | 指令数说明 | 占比 |
|---|---|---|---|
| P-Core | 3,104,943,000,000 | 3.1万亿条指令 | 99.86% |
| E-Core | 4,489,200,000 | 44.9亿条指令 | 0.14% |
P-Core 执行了 99.86% 的指令
2. CPU 时钟周期
| 核心类型 | CPU_CLK_UNHALTED.THREAD | 周期数说明 | 占比 |
|---|---|---|---|
| P-Core | 804,033,700,000 | 8040亿周期 | 99.65% |
| E-Core | 2,836,200,000 | 28.4亿周期 | 0.35% |
P-Core 占用了 99.65% 的 CPU 时间
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.










