冯·诺依曼为什么比哈佛架构快

Why is von neumann faster than harvard architecture

我读到了这两种架构,在互联网上的某个地方有人说使用冯·诺依曼架构的系统比使用哈佛架构的系统更快。我试着寻找为什么会这样,但我还没有找到可以为我澄清事情的解释。

据我了解: - 在冯·诺依曼架构中,CPU 一次可以执行一项操作,这意味着它可以在一个周期内获取数据或从内存中获取一条指令。因此,要对数据执行某种操作,需要 2 个周期(一个用于获取数据,一个用于获取指令)。 - 在哈佛架构中,CPU 可以在同一时钟周期内获取数据和指令,因为有 2 个独立的内存块和两组独立的数据地址总线

那么如果 HV 架构可以在一个周期内完成与 VN 相同的事情,为什么它会更慢?用于一件事的周期更少是否意味着它应该比另一件事更快?请对我放轻松,我是嵌入式系统的菜鸟。感谢您阅读我的 post!

在冯·诺依曼架构中,CPU 按顺序运行,例如它确实获取指令、对其解码、获取操作数(数据)、计​​算结果并存储它。所有这些步骤都使用相同的内存通道。
哈佛架构有两个内存通道,一个用于指令,一个用于数据。如果 CPU 支持流水线,它比冯·诺依曼架构有优势,即当已经解码的指令 x 正在通过数据通道获取操作数(数据)时,指令 x+1 在同时通过指令通道。
因此,如果 CPU 是流水线,哈佛架构比冯诺依曼架构更快。

这都是纯学术的。而且非常过时。从学术类型的角度来看,哈佛架构可以同时执行数据事务和指令事务,而冯诺依曼一次只能执行一个或另一个。

真正的哈佛存在你不能真正使用它的问题。你不能有一个引导加载程序你不能有一个操作系统(加载程序)因为你不能使用数据事务将指令放入内存然后分支到这些指令并且运行它们两个内存系统是分开的。一旦你穿过这条路,它就不再是哈佛了,它是一个修改过的哈佛或一个冯·诺依曼。

看看维基百科是如何定义的,你今天看到的现代总线是哈佛修改的,因为你不能用冯诺依曼同时处理数据和指令的定义,但它们使用相同的总线。你会看到一个读地址总线,一个读数据总线,一个写地址总线和一个写数据总线,指令和数据都将穿过读总线,数据穿过写总线。许多事务可以同时发生,多总线宽度大小的指令获取可以在一个时钟周期发生,该时钟周期以读取地址请求开始,下一个时钟周期数据读取地址请求可以在同一总线上开始,一些数量时钟稍后指令地址请求被确认,然后读取地址请求被确认,它们不一定必须以相同的顺序返回取决于设计。然后读取数据总线将传送数据,然后处理器将确认该数据。写入总线也可以同时处理多个传输中的数据事务。独立的读写总线可以同时做事,而不仅仅是同时进行多个交易。

None 这与指令集有什么关系,你可以并且有指令集在它们后面有不同的总线。根据指令集、获取、流水线和缓存的工作方式,您可以让纯教科书冯·诺依曼接近于满足纯教科书哈佛的性能。但是,如果您认为预缓存、预流水线一次一条指令类型的体系结构,那么您可以说 1) 两者都不会获胜,因为指令提取必须等待加载和存储的数据事务(或其他具有内存访问权限的指令)在下一次提取发生之前完成,所以哈佛不能同时处理数据和指令。或者 2) 你可以说哈佛被允许并行做事情而冯诺依曼不允许,哈佛获胜,因为它可以完成一个简单的数据事务并在同一个周期中进行下一次提取,周期性地击败冯诺依曼一个周期。

从纯粹意义上讲,虽然一次一条指令,冯诺依曼不可能比哈佛快,它可以打平但不能赢。哈佛有两条可以并行运行的总线,并且所有其他因素保持不变,这种差异使哈佛在性能方面略有优势。所有其他因素保持不变(指令集、流水线设计、预取等)。

请注意,在没有流水线的情况下一次一条指令意味着需要多个时钟周期来执行大多数指令,正如您在预缓存、流水线前处理器中看到的那样,它们有需要多少时钟的表格,您可以不管怎样,看看指令,看看它是如何以及为什么需要那么多指令的。即使有流水线,哈佛也有一点优势。但是如果你说冯诺依曼总线的宽度是哈佛大学的两倍,你可以一次获取两条指令,你可以一次对两个连续的数据位置执行数据操作,现在你的带宽比哈佛大学更好,可以绑定或有时打败它。但这不是纯粹的比较。

同样,这些概念已经过时了。哈佛处理器的数量非常少,但为了使它们有用,它们实际上是经过修改的哈佛处理器,因为内存系统之间存在差距。