【问题标题】:Cache bandwidth per tick for modern CPUs现代 CPU 的每刻缓存带宽
【发布时间】:2011-01-22 03:17:13
【问题描述】:

现代 CPU 的缓存访问速度是多少? Intel P4、Core2、Corei7、AMD 在每个处理器时钟周期可以从内存读取或写入多少字节?

如果有的话,请用理论(ld/sd 单元的宽度,其吞吐量以 uOPs/tick 为单位)和实际数字(甚至 memcpy 速度测试或 STREAM 基准测试)来回答。

PS 这是一个问题,与汇编程序中加载/存储指令的最大速率有关。可以有理论上的加载速率(所有指令 Per Tick 都是最宽的加载),但处理器只能给出其中的一部分,即实际的加载限制。

【问题讨论】:

  • @osgx:转移到 serverfault 等,不是编程问题吗?
  • @TFD,不,这是非常编程相关的。
  • 请参阅“分析英特尔酷睿 2 架构上的缓存带宽”,作者是工业大学信息服务和高性能计算中心的 Robert Sch¨one、Wolfgang E. Nagel 和 Stefan Pfl¨uger Dresden, 01062 Dresden, Germany 本文介绍了计算内核和不同缓存之间的测量带宽。 STREAM benchmark1 是科学家用来确定内存带宽的最常用的内核之一。为了更深入地了解 STREAM 基准,我们重新设计了小问题规模的准确值。
  • 那么你想知道“加载/存储指令的最大速率”还是“加载/循环的字节数”的答案?答案是完全不同的。最近的 CPU 更多地受到指令(例如,2 次加载/周期)的限制,而不是字节(因此字节加载和 32 字节加载具有大致相同的成本),至少在靠近内核的缓存级别。对于 DRAM,它更多的是关于缓存行/周期:即,无论您加载整行还是 1 个字节,它的成本都是一样的。

标签: performance caching cpu cpu-architecture cpu-cache


【解决方案1】:

对于 nehalem:rolfed.com/nehalem/nehalemPaper.pdf

Each core in the architecture has a 128-bit write port and a
128-bit read port to the L1 cache. 

128 位 = 16 字节/时钟读取 和 128 位 = 16 字节/时钟写入 (我可以在一个周期中结合读写吗?)

The L2 and L3 caches each have a 256-bit port for reading or writing, 
but the L3 cache must share its port with three other cores on the chip.

L2 和 L3 读写端口可以在单个时钟中使用吗?

Each integrated memory controller has a theoretical bandwidth
peak of 32 Gbps.

延迟(时钟滴答声),一些由 CPU-Z 的 latencytool 或 lmbench 的 lat_mem_rd 测量 - 两者都使用长链表遍历来正确测量现代无序内核,如 Intel Core i7

           L1     L2     L3, cycles;   mem             link
Core 2      3     15     --           66 ns           http://www.anandtech.com/show/2542/5
Core i7-xxx 4     11     39          40c+67ns         http://www.anandtech.com/show/2542/5
Itanium     1     5-6    12-17       130-1000 (cycles)
Itanium2    2     6-10   20          35c+160ns        http://www.7-cpu.com/cpu/Itanium2.html
AMD K8            12                 40-70c +64ns     http://www.anandtech.com/show/2139/3
Intel P4    2     19     43          200-210 (cycles) http://www.arsc.edu/files/arsc/phys693_lectures/Performance_I_Arch.pdf
AthlonXP 3k 3     20                 180 (cycles)     --//--
AthlonFX-51 3     13                 125 (cycles)     --//--
POWER4      4     12-20  ??          hundreds cycles  --//--
Haswell     4     11-12  36          36c+57ns         http://www.realworldtech.com/haswell-cpu/5/    

延迟数据的良好来源是7cpu web-site,例如哈斯韦尔:http://www.7-cpu.com/cpu/Haswell.html

有关 lat_mem_rd 程序的更多信息,请参见其 man pagehere on SO

【讨论】:

  • 回答您自己的问题?你还没有解释你试图用这些信息实现什么。如果你这样做,你可能会得到更好的答案。
  • L2 缓存的 256 位端口是否意味着,在 L1 缓存未命中和 L2 缓存命中时,假设 64 Bytes 缓存块,读取 L2 块并将其写入 L1 缓存会持续 2 cicles?
【解决方案2】:

最宽的读/写是 128 位(16 字节)SSE 加载/存储。 L1/L2/L3 缓存具有不同的带宽和延迟,这些当然是特定于 CPU 的。在现代 CPU 上,典型的 L1 延迟为 2 到 4 个时钟,但通常每个时钟可以发出 1 或 2 个加载指令。

我怀疑这里潜伏着一个更具体的问题——你真正想要实现的是什么?你只是想写尽可能快的 memcpy 吗?

【讨论】:

  • 谢谢。每个时钟可以发出多少个 SSE 负载?我想找到几代 x86 的峰值负载/存储带宽。不仅是 memcpy,还有普通的读写(更接近 STREAM 基准)
  • @osgx - 这取决于 CPU - Core 2 和 Core i7 都可以发出每个时钟 2 个 SSE 负载
  • 关于最快的 memcpy - 是的,这个问题可以重新问为“理论上最快的 memcpy 是什么”(没有实际实现),不仅适用于非常大的数据(像往常一样),也适用于小数据(最大 L1/2 尺寸,最大 L2/2 尺寸,L3/3 尺寸)。
猜你喜欢
  • 2020-11-23
  • 2015-05-07
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 2012-04-28
  • 2010-12-21
  • 1970-01-01
  • 2015-05-26
相关资源
最近更新 更多