1

从命名和这篇文章我觉得答案是否定的,但我不明白为什么。瓶颈是从内存中获取数据的速度。您是否可以同时获取指令似乎并不重要。不是还要等到数据到来吗?假设获取数据需要 100 个 cpu 周期,执行指令需要 1 个,那么提前完成 1 个周期的能力似乎并没有很大的改进。我在这里想念什么?

背景:我看到这篇文章说 Spectre 错误不会因为投机执行而得到修复。我认为投机执行,例如分支预测,对哈佛架构也有意义。我对吗?我知道投机执行对冯诺依曼架构更有利,但有多少呢?谁能给个粗略的数字?我们可以说幽灵会在多大程度上因为冯诺依曼架构而存在?

4

2 回答 2

4

“冯诺依曼瓶颈”一词不仅仅是在谈论哈佛与冯诺依曼架构。它谈论的是约翰·冯·诺依曼发明的存储程序计算机的整个想法。

(根据上下文,有些人可能会用它来表示代码获取和数据访问之间的竞争;这确实会加剧没有拆分缓存的整体内存瓶颈。或者可能混淆了术语和更普遍的处理器内存瓶颈我在这个答案的其余部分讨论不应该被称为冯诺依曼瓶颈,尽管它是一个真实的东西。请参阅Modern Microprocessors A 90-Minute Guide中的内存墙部分! )


冯诺依曼瓶颈同样适用于两种存储程序计算机。甚至对于将数据保存在 RAM 中的固定功能(非存储程序)处理器也是如此。(没有可编程着色器的旧 GPU 基本上是固定功能的,但在访问数据时仍然存在内存瓶颈)。

通常它在循环大数组或基于指针的数据结构(如链表)时最相关,因此代码适合指令缓存,并且无论如何都不必在数据访问期间获取。(甚至连缓存都太旧的计算机速度太慢了,我不想争论即使存在时间和/或空间局部性的缓慢是否是冯诺依曼瓶颈的语义。)

https://whatis.techtarget.com/definition/von-Neumann-bottleneck指出缓存和预取是我们解决冯诺依曼瓶颈的一部分,更快/更宽的总线使瓶颈更宽。但是只有像 Processor-in-Memory / https://en.wikipedia.org/wiki/Computational_RAM这样的东西才能真正解决它,其中 ALU 直接连接到内存单元,因此计算和存储之间没有中心瓶颈,计算容量与存储大小成比例。但是 von Neumann 的 CPU 和单独的 RAM 足以应付大多数不会很快消失的事情(考虑到大型缓存和智能硬件预取,以及乱序执行和/或 SMT 以隐藏内存延迟。)


John von Neumann 是早期计算领域的先驱,他的名字与两个不同的概念有关也就不足为奇了。

哈佛 vs. 冯诺依曼是关于程序内存是否在单独的地址空间(和单独的总线);这是存储程序计算机的实现细节。


Spectre:是的,Spectre 只是关于数据访问和分支预测,而不是将代码作为数据访问,反之亦然。如果您首先可以在哈佛架构中对程序内存进行 Spectre 攻击(例如,通过运行进行系统调用的普通程序),那么它可以像在冯诺依曼上一样运行。

我知道投机执行对冯诺依曼架构更有利,但有多少呢?

什么?不,这里根本没有联系。当然,所有高性能的现代 CPU 都是冯诺依曼。(使用拆分 L1i / L1d 缓存,但程序和数据内存不是分开的,共享相同的地址空间和物理存储。拆分 L1 缓存通常称为“修改后的哈佛”,这在 x86 以外的 L1i 之外的 ISA 上是有意义的t 与数据缓存一致,因此您需要特殊的刷新指令才能将新存储的字节作为代码执行。x86 具有一致的指令缓存,因此它是一个非常详细的实现细节。)

一些嵌入式 CPU 是真正的哈佛,程序存储器连接到闪存,数据地址空间映射到 RAM。但通常这些 CPU 的性能非常低。流水线但有序,并且仅使用分支预测进行指令预取。

但是,如果您确实构建了具有完全独立的程序和数据存储器的高性能 CPU(因此从一个复制到另一个必须通过 CPU),那么与现代高性能 CPU 的差异基本上为零。 L1i 缓存未命中很少见,它们是否与数据访问竞争并不是很重要。

不过,我想您会一直拆分缓存;通常现代 CPU 具有统一的 L2 和 L3 缓存,因此根据工作负载(代码大小与否),或多或少的 L2 和 L3 最终会保留代码。也许您仍然会使用标签中带有一个额外位的统一缓存来区分代码地址和数据地址,从而允许您的大型外部缓存在两个地址空间之间竞争共享。

于 2019-02-27T21:35:47.583 回答
1

哈佛架构,分离的指令和数据存储器,是对冯诺依曼瓶颈的缓解。Backus对瓶颈的原始定义解决了一个比指令或数据获取更普遍的问题,并讨论了 CPU/内存接口。在引用金钱之前的段落中,巴库斯谈到了查看这辆公共汽车上的实际交通情况,

具有讽刺意味的是,大部分流量不是有用的数据,而只是数据的名称,其中大部分由名称以及仅用于计算此类名称的操作和数据组成。

在具有分离 I/D 总线的哈佛架构中,这不会改变。它仍将主要由名称组成。

所以答案是否定的。哈佛架构缓解了冯诺依曼瓶颈,但并没有解决它。坦率地说,这是一个更快的冯诺依曼瓶颈。

于 2019-07-19T16:00:25.347 回答