← SEARCHABLE ARCHIVE
Computer Science · 2026-07-16

冯诺依曼瓶颈和 CPU 缓存

为什么速度快的CPU要等待内存?

INTERACTIVE READING MODE →

该博客上撰写的文章是出于教学目的而创建的。 另外,文章中的信息可能不正确,请谨慎。

无论CPU计算的速度有多快,如果要计算的指令和数据没有到达,它就什么也做不了。 CPU和内存之间的传输速度限制整体性能的现象称为冯诺依曼瓶颈。

CPU等待内存

在冯·诺依曼架构中,指令和数据使用相同的内存和总线。

CPU请求指令
        ↓
从内存中检索指令
        ↓
CPU请求所需数据
        ↓
从内存中获取数据
        ↓
CPU计算

与CPU的计算速度相比,主存访问速度较慢。 此外,如果命令和数据通过单个通道一起移动,则可能会出现彼此等待的情况。

缓存减少了这种等待

现代 CPU 将常用指令和数据预加载到 CPU 附近的高速缓存中。 L1缓存很小但速度很快,当它走向L2和L3时,它逐渐变慢而不是变大。

CPU → L1 Cache → L2 Cache → L3 Cache → Main Memory
又快又小又慢又大

缓存使用局部性,这意味着程序重复使用附近的数据。

  • 时间局部性:您刚刚使用的值很可能很快会再次使用。
  • 空间局部性:如果您使用一个地址,那么附近的地址很可能也会被使用。

从前面顺序读取数组的代码比跳转读取数组的代码对缓存更有利,这是因为空间局部性。

//由于连续的存储器是按顺序读取的,所以缓存很容易利用。
for (int i = 0; i < count; ++i)
{
    sum += values[i];
}

指令缓存和数据缓存

现代CPU将指令和数据一起保存在主存中,但在L1高速缓存中将指令高速缓存和数据高速缓存分开。 因此,获取下一条指令和访问当前数据可以稍微同时执行。

这就是为什么它被称为改良哈佛结构。 它在必要的层中混合了哈佛结构和冯诺依曼结构的优点。

最终,计算机性能不仅仅由 CPU 执行的计算数量决定。 您还应该查看数据放置的连续程度、缓存命中率是多少以及 CPU 等待内存的时间。