-1

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

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

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

4

2 回答 2

3

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

于 2019-02-06T19:13:42.280 回答
0

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

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

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

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

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

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

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

于 2019-02-07T04:31:56.400 回答