冯·诺依曼为何比哈佛建筑更快

时间:2019-02-06 18:50:55

标签: embedded microcontroller von-neumann harvard-architecture

我了解了这两种类型的体系结构,并且在互联网上某个地方有人说使用冯·诺依曼体系结构的系统比使用哈佛体系结构的系统更快。我试图搜索为什么会这样,但是我还没有找到可以为我澄清事情的解释。

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

因此,如果HV架构可以在一个周期内完成与VN相同的功能,为什么它会变慢?难道一件事用的周期少就意味着它应该比另一件事快吗?请放心,我是嵌入式系统的菜鸟。感谢您阅读我的帖子!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

这完全是学术性的。而且很陈旧。从学术类型的角度来看,哈佛架构可以同时执行数据交易和指令交易,冯·诺依曼一次只能做一个或另一个。

真正的哈佛大学存在您无法实际使用它的问题。您不能拥有引导加载程序,您不能拥有操作系统(用于加载程序),因为您不能使用数据事务将指令放入内存中,然后跳转到这些指令并运行它们,这两个内存系统是分开的。一旦您越过了那条路,它就不再是哈佛,而是经过改良的哈佛或冯·诺依曼。

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

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

从纯粹的意义上说,尽管一次冯·纽曼的指令不能比哈佛快,但它可以并不能赢。哈佛大学有两条可以并行运行的总线,所有其他因素保持不变,这种差异使哈佛大学在性能方面略有优势。所有其他因素(指令集,管道设计,预取等)保持不变。

请注意,没有流水线一次执行一条指令意味着您需要花费多个时钟周期来执行大多数指令,就像您在预高速缓存,流水线前处理器中看到的那样,它们具有需要多少个时钟的表,您可以看一下无论如何,要了解该指令,并了解如何以及为什么需要那么多指令。即使拥有一条管道,哈佛也有一点优势。但是,如果您说的是von neumann总线的宽度是哈佛的两倍,则您一次可以提取两条指令,就可以一次在两个连续的数据位置上执行数据操作,现在您的带宽比哈佛更好,可以绑定或有时打败它。但这不是纯粹的比较。

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