【发布时间】:2018-10-17 07:10:14
【问题描述】:
在最坏的情况下,我正在尝试评估从主内存到 CPU 的有效内存“带宽”(以字节为单位的数据吞吐量):由于连续地址中的距离很长,RAM 缓存完全低效正在接受治疗。据我了解,这里重要的是 RAM 延迟而不是其带宽(这是传输大连续数据块时的吞吐量)。
场景是这样的(假设您使用 64 位 = 8 字节的值):
- 您在某个地址读取数据
- 进行一些轻量级 CPU 计算(这样 CPU 就不会成为瓶颈)
- 然后您在距离第一个地址很远的新地址读取数据
- 等等
我想了解吞吐量(以字节为单位)。假设 RAM 具有典型 DDR3 13 ns 延迟的简单计算得出的带宽为 8 B/13 ns = 600 MB/s。但这提出了几点:
- 这个推理(至少是示意性的)正确吗?
- 是获取数据的时间正好是 RAM 延迟,还是您必须添加一些与缓存、CPU 或任何中间组件相关的时间?你知道多少钱吗?
- 在多个线程中执行此操作时会发生什么?所有线程的带宽是否为 600 MB?
【问题讨论】:
-
RAM内部组织复杂,访问同一物理RAM行和访问不同行存在差异(en.wikipedia.org/wiki/Memory_timings - 封闭行需要一些R*时序,开放行可以通过CAS访问)。 7-cpu 有一些基准:7-cpu.com;并且 lmbench 有很好的测试 lat_mem_rd:bitmover.com/lmbench/lat_mem_rd.8.html。是的,还有一些额外的时间将数据从内存控制器发送到管道,检查表7-cpu.com/cpu/SandyBridge.html。还有ece.cmu.edu/~safari/thesis/kchang_defense_slides.pdf
标签: multithreading cpu ram bandwidth latency