一篇关于现代计算机的内存带宽性能,以及如何进行粗略的估算的文章
www.forrestthewoods.com/blog/memory-bandwidth-napkin-math
作者编写了一个 C++ 基准测试程序,测试结果:
* 内存带宽上限: 在作者的系统上,顺序访问内存的带宽上限约为 40 GB/s。
* 随机访问内存非常慢: 单线程 int32 随机访问速度仅为 0.46 GB/s,远低于顺序访问的 11.03 GB/s。
* 缓存速度非常快: 特别是使用 SIMD 指令时,在 L1 缓存中的操作速度可以超过 1000 GB/s。
* 多线程可以提高性能: 但在访问内存时,性能会受到内存带宽的限制。
* 缓存大小的影响: 当数据可以完全放入缓存时,性能显著提高。
* 指针追踪性能很差: 速度比直接访问慢 10 到 20 倍。
作者给出了现代桌面 PC 的内存和缓存性能的粗略估算值(2020年的电脑):
* 内存性能:
* 上限:45 GB/s
* 估算值:5 GB/s
* 下限:1 GB/s
* CPU缓存性能 (每个核心):
* 上限 (使用 SIMD):210 GB/s (L1) / 80 GB/s (L2) / 60 GB/s (L3)
* 估算值:25 GB/s (L1) / 15 GB/s (L2) / 9 GB/s (L3)
* 下限:13 GB/s (L1) / 8 GB/s (L2) / 3.5 GB/s (L3)