英特尔CPU缓存策略

7

我有一台配备Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz处理器的笔记本电脑。

我正在使用Ubuntu 12.04 (x86_64)操作系统,并尝试找到有关我的处理器的一些信息。

我能够找到大部分我需要的信息,使用的是:

cat /proc/cpuinfo

并且

lscpu

我想了解的另一个问题是每个缓存级别使用的缓存策略。它是写回还是写直通?

有没有工具可以用来查找这样的信息?

提前感谢。


Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许超级用户Unix&Linux Stack Exchange更适合提问。 - jww
你可以经常在Intel ARK上查找你的CPU规格。这是英特尔产品规格的官方网站。 - jww
此外,它被称为内存类型而不是缓存策略。缓存策略是指读/写是否被缓存,它们是否被分配以及如何驱逐行(替换策略),以及写入是否更新内存和放置策略(直接映射、完全关联和集合关联等)。缓存一致性协议是MESI(F)等。 - Lewis Kelsey
2个回答

9

这不是您可以从CPUID或类似工具中查询的内容,也不能配置您的CPU进行其中一种操作,因此不存在用于查询的工具。您可以查询高速缓存关联性、高速缓存线大小和高速缓存大小等信息,例如通过 /proc/cpuinfo

在过去的10-20年中,所有兼容Intel的CPU都使用写回策略来进行高速缓存(这假定首先获取一个高速缓存行以允许部分写入)。当然,这只是理论,实际情况比这稍微复杂一些。

几乎所有处理器(包括您的型号)都有一种或多种写组合形式(或填充缓冲区,即自Merom起由Intel所称),除了最古老的兼容Intel的CPU支持来自SSE寄存器的无高速缓存写入(这再次使用一种写组合形式)。然后,当然,还有像芯片上高速缓存一致性协议和嗅探过滤器和其他机制,以确保在单个处理器的内核之间和在多处理器系统中的不同处理器之间的高速缓存一致性。
尽管如此——总的高速缓存策略仍然是写回。


谢谢你的回答,Damon。我正在MATLAB上运行一些测试,教授要求我们找到将在测试中运行的CPU的缓存策略,如果可能的话。我进行了一些搜索,但是我没有找到任何东西,这就是为什么我问的原因。 - feugatos
2
AMD Bulldozer系列的CPU 不使用 回写缓存。请查看我的回答。 - Peter Cordes
@PeterCordes:感谢您指出这一点。我正准备购买一台新的笔记本电脑,顺便提到,它搭载了AMD Bulldozer处理器。您所说的是一个让人放弃购买的有力原因。 - Damon
2
更新:Bulldozer系列的L2缓存是写回的。只有L1D是写直通的,带有一个小的写组合缓冲区。在Ryzen中,所有缓存都是写回的,但每个4核心集群都有一个单独的L3缓存。(我刚刚更新了我的答案,加入了一些链接,并指出对于多线程代码而言,缓存层次结构不仅仅是写回与写直通的区别。) - Peter Cordes

8
David Kanter的Intel Sandybridge非常好的文章涵盖了内存子系统和高速缓存架构:L1D是Intel通常使用的写回缓存,每个核心的L2也是写回缓存。 L3也是写回缓存(它是芯片上所有核心共享的大型包容性缓存)。
另请参见Intel Core i7处理器使用哪种高速缓存映射技术?以获取有关各代Intel CPU的更多详细信息。

AMD采用非常不同的方法: 他们的L1缓存是写穿透的,但具有一个微小的4k写组合缓存。 在AMD上不断重写大于4k的缓冲区将会在(慢)L2上形成瓶颈,而不是L1。

Agner博客中的其中一篇帖子中,有人声称BD的L2也是写穿透的,但Paul Clayton对此发表了评论并不同意。(我倾向于相信Paul。)

AMD Ryzen幸运地使用了普通的写回32kiB 8路L1D,带有私有写回512kiB L2。L3是一个共享的8MB牺牲缓存。它是写回缓存,但牺牲缓存意味着数据仅在从L1/L2逐出时才进入其中,而不是直接用于加载/预取。每个4核心的核心集群(CCX模块)都有自己的8MB L3,不同集群之间核心的延迟/带宽很糟糕关于高速缓存层次结构,除了写回与写直通之外还有更多内容需要讲述,虽然对于单线程程序大部分差异并不重要。(除非操作系统的进程调度程序将它们移动到Ryzen的不同集群中,这样就不好了。)
在我的 SnB 系统上:
sudo dmidecode

生成包括以下内容的输出:

Handle 0x0005, DMI type 7, 19 bytes
Cache Information
        Socket Designation: L1-Cache
        Configuration: Enabled, Not Socketed, Level 1
        Operational Mode: Write Back
        Location: Internal
        Installed Size: 32 kB
        Maximum Size: 32 kB
        Supported SRAM Types:
                Other
        Installed SRAM Type: Other
        Speed: Unknown
        Error Correction Type: None
        System Type: Unified
        Associativity: 8-way Set-associative

所以缓存是写回的事实至少在BIOS中有体现,如果这是可信的。我很好奇它在AMD CPU上显示什么,或者BIOS编写者是否倾向于只是"编造一些东西"并有时在那里放置错误的值。

正如这个问题所指出的那样,L2的信息有点虚假:它总结了每个核心私有的256k L2:

Handle 0x0006, DMI type 7, 19 bytes
Cache Information
        Socket Designation: L2-Cache
        Configuration: Enabled, Not Socketed, Level 2
        Operational Mode: Varies With Memory Address
        Location: Internal
        Installed Size: 1024 kB
        Maximum Size: 1024 kB
        Supported SRAM Types:
                Other
        Installed SRAM Type: Other
        Speed: Unknown
        Error Correction Type: None
        System Type: Unified
        Associativity: 8-way Set-associative

Handle 0x0007, DMI type 7, 19 bytes
Cache Information
        Socket Designation: L3-Cache
        Configuration: Enabled, Not Socketed, Level 3
        Operational Mode: Unknown
        Location: Internal
        Installed Size: 6144 kB
        Maximum Size: 6144 kB
        Supported SRAM Types:
                Other
        Installed SRAM Type: Other
        Speed: Unknown
        Error Correction Type: None
        System Type: Unified
        Associativity: Other

这是在一台i5-2500k上(四核心Sandy Bridge处理器,配备6MiB的L3缓存)。


1
Bulldozer L2不是写穿模式,而是写回模式。IBM的zSeries(并没有使用这种处理器的笔记本电脑!)——例如David Kanter描述的z196(http://www.realworldtech.com/z196-mainframe/7/),它具有写穿模式的L2缓存,倾向于积极地使用写穿模式。 - user2467198
更新:Bulldozer的L1d(而不是L2)是写通的,带有一个小的4k写组合缓冲区。 - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接