performance - Intel x86 处理器的 L1 内存缓存记录在哪里?

标签 performance intel cpu-architecture cpu-cache

我正在尝试分析和优化算法,我想了解缓存对各种处理器的具体影响。对于最近的 Intel x86 处理器(例如 Q9300),很难找到有关缓存结构的详细信息。特别是,大多数后处理器规范的网站(包括 Intel.com )不包含对 L1 缓存的任何引用。这是因为 L1 缓存不存在,还是由于某种原因该信息被认为不重要?有没有关于消除 L1 缓存的文章或讨论?

[编辑] 在运行各种测试和诊断程序(主要是下面答案中讨论的那些)之后,我得出的结论是我的 Q9300 似乎有 32K L1 数据缓存。我仍然没有找到一个明确的解释来解释为什么这些信息如此难以获得。我目前的工作理论是,L1 缓存的细节现在被英特尔视为商业 secret 。

最佳答案

几乎不可能找到有关英特尔缓存的规范。去年,当我教授缓存类(class)时,我询问了英特尔内部(编译器组)的 friend ,他们找不到规范。

但是等等!!! Jed ,保佑他的灵魂,告诉我们在 Linux 系统上,你可以从内核中挤出大量信息:

grep . /sys/devices/system/cpu/cpu0/cache/index*/*

这将为您提供关联性、集大小和一堆其他信息(但不包括延迟)。 例如,我了解到,尽管 AMD 宣传其 128K L1 缓存,但我的 AMD 机器却拥有各 64K 的分离 I 和 D 缓存。

<小时/>

感谢 Jed,现在有两条建议已基本过时:

  • AMD 发布了更多有关其缓存的信息,因此您至少可以获得一些有关现代缓存的信息。例如,去年的 AMD L1 缓存每个周期(峰值)交付两个字。

  • 开源工具 valgrind内部有各种缓存模型,对于分析和理解缓存行为非常有值(value)。它附带了一个非常好的可视化工具 kcachegrind,它是 KDE SDK 的一部分。

<小时/>

例如:2008 年第三季度,AMD K8/K10 CPU 使用 64 字节缓存行,每个 L1I/L1D 分割缓存为 64kB。 L1D 是 2 路关联且与 L2 互斥,延迟为 3 个周期。 L2 缓存为 16 路关联,延迟约为 12 个周期。

AMD Bulldozer-family CPUs每个集群使用一个带有 16kiB 4 路关联 L1D 的拆分 L1(每个核心 2 个)。

Intel CPU 长期以来一直保持 L1 不变(从 Pentium M 到 Haswell 到 Skylake,大概还有之后的许多代):每个 I 和 D 缓存分割 32kB,L1D 是 8 路关联。 64 字节高速缓存线,与 DDR DRAM 的突发传输大小相匹配。加载使用延迟约为 4 个周期。

另请参阅标记 wiki 以获取更多性能和微架构数据的链接。

关于performance - Intel x86 处理器的 L1 内存缓存记录在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/716145/

相关文章:

c - x86汇编代码混淆

assembly - 具有只写目标并在英特尔的任何端口上运行的 x86 非 mov 指令?

c++ - 为什么某些英特尔的内在函数采用 const immediates,而另一些则采用非常量?

hardware - 多次重新编程周期后 FPGA 性能是否会降低?

c - RISCV 32 位基础和 64 位扩展

Mysql 连接在几秒钟内达到顶峰

javascript - 测试和比较 jQuery 插件的性能

mysql - 如何优化此 IP 到位置查找查询?

sql-server - 为什么 DATEADD 会减慢 SQL 查询速度?

assembly - 从 8086 的 RAM 加载程序