从ROM或RAM执行程序哪个更快?


8

我们大多数来自电子领域的人都知道SRAM比DRAM快。但是,当比较RAM和ROM时,我不确定。

我的问题与微控制器有关:“如果代码直接从RAM / ROM执行,则其性能会更好-1)从RAM执行或2)从ROM执行或3)两者将表现相同”

还考虑到ROM被设计为具有更高的读取速度这一事实。而对于RAM,要具有写入功能就必须权衡读取速度。


10
(彻底)阅读数据表是最好的方法。有时,从RAM运行程序比闪存快。某些微型计算机根本无法从RAM运行程序,而其他微型计算机可能以相同的速度运行。
Spehro Pefhany

我还无法添加评论,只是想提供帮助。取决于ROM实际上是否快于您使用的RAM。他们的速度相等吗?
OzzieSpin 2015年

当前的许多ARM Cortex-M部件都是可以从SRAM执行的主要示例,但是这样做较慢,因为无法使用专用的闪存指令路径。相反,对闪存的数据访问可能比对RAM的访问慢
克里斯·斯特拉顿

但是使用稍旧的ARM7芯片(我的经验是使用LPC2106和LPC2148),从RAM执行的速度通常比从FLASH执行的速度更快。这与克里斯的回答一起证明了我们唯一可以说的是“取决于”。
Wouter van Ooijen 2015年

如果您已经有了硬件,最简单的方法就是简单地运行两种情况并进行比较。如果没有,那么数据表是您最好的选择。
罗安2015年

Answers:


16

数据手册应告诉您每条指令要花费多长时间,以及从RAM或ROM执行之间有什么区别(如果有)。

对于提供从RAM执行的选项的微控制器,速度可能更快,这很可能是使用额外的RAM空间从中执行代码的要点。可能还存在一些提取重叠问题。在某些情况下,从ROM执行可能会更快,因为它是单独的内存,并且RAM访问可以同时进行。

再次,了解任何特定微表的唯一方法是阅读数据表


从寄存器执行甚至更快。
2015年

@Joshua您是否有使用寄存器执行的程序的示例?它看起来很聪明,但仅限于相当小的程序大小。我听说过64kB图形演示,但是16寄存器演示?=)
Cort Ammon

3
@CortAmmon:我的桌子上坐着一个带512个寄存器的寄存器,其中400个包含程序代码。RAM慢3倍,而ROM是如此之慢,以至于在启动时被复制到RAM(这需要100毫秒)。我有一个SD卡初始化程序/读取器,可容纳300个寄存器,除GPIO引脚外没有硬件支持。编写者又需要另外100个左右的寄存器,所以整个内容不能放入寄存器中(这不足以做任何有趣的事情),但是我不再需要初始化程序了,所以覆盖一下。
2015年

9

它完全取决于内存和CPU体系结构。根据经验,SRAM比闪存快,尤其是在高速MCU(> 100 MHz)上。SRAM位单元产生(或多或少)逻辑电平输出,而闪存必须经历较慢的电流感测过程。

再快多少(如果有的话)又取决于体系结构-存储器的字大小,每个存储器上的等待状态数,是否存在缓存,CPU指令的大小等。足够低的频率,闪存和RAM上的等待状态可能为零,因此它们可能以相同的速度运行。

该代码也很重要。如果您的代码严格是线性的(无分支),则闪存可以足够快地预取指令,即使在较高频率下,也可以保持CPU饱和。正如Olin所说,当代码和数据位于不同的存储器中时,具有单独的程序和数据读取路径的哈佛体系结构CPU可能会执行不同的操作。

金属ROM(以及其他非易失性存储器,例如FRAM)具有自己的特性,并且可能与SRAM一样快,也可能不与SRAM一样快。写作能力不一定会有所不同;更多有关位单元输出和感应电路的特性。

数据表将为您简要介绍一下速度差异,但是唯一可以确定的方法是分析代码。


1

“运行程序”需要具有同步时钟的CPU。可以通过以足够慢的时钟频率运行整个系统,或通过插入wait states(在获取和解码阶段之间不做任何操作的时钟周期)来容纳慢速存储器,仅在某些地址范围内有效(例如,参见古老的8085)。只要数据在建立/保持间隔内没有变化,CPU指令提取就不会确切知道或关心何时将数据稳定到其最终值。

微控制器通常将其所有内存都放在芯片上,因此,除非另有说明,否则我将假定内存系统均为零等待状态。(但请阅读数据表进行确认)。与台式机相比,典型的微控制器意味着更简单的单芯片解决方案,因此微控制器中的等待状态不太可能。因此,微控制器不太可能与片上存储器速度不匹配。

更快的内存通常会带来额外的费用(更高的电压,更低的电容,更多的需求)。80xx86在L2高速缓存中具有快速SRAM,在L1高速缓存中具有更快的SRAM,并且许多较慢的DRAM片外连接到存储器控制器。这种系统比微控制器复杂得多,并且超出了问题的范围。(但是计算机工程师非常感兴趣!)


1
实际上,没有约束就不可能实现完美匹配的设计。处理器隔离指令和数据存储器,未充分利用非存储器数据指令中的存储器速度,处于等待状态,或使用多端口存储器。
克里斯·斯特拉顿

2
等待状态在高性能微控制器中非常普遍。闪光灯慢。
亚当·豪恩

@AdamHaun:另一方面,许多内部闪存阵列可以一次读取许多单词;如果代码跳到闪存中的任意位置,则可能需要几个周期来获取第一条指令,但是一旦获取到该指令,接下来的几条指令可能会可用,而不会产生进一步的延迟。在许多情况下,访问缓冲区末尾附近的内容将使系统为加载下一组单词做好准备。
超级猫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.