每台机器语言指令执行多长时间?

时间:2012-01-21 00:08:42

标签: assembly cpu machine-instruction machine-language

设置,读取,移动和比较等操作是否需要同时执行?

如果没有:有没有办法找出多长时间。

我的意思是什么名称,某些特定类型cpu执行不同汇编语言指令的速度(移动,读取等)

4 个答案:

答案 0 :(得分:8)

您可能正在寻找的关键术语是:

  • 指令延迟
  • 指令吞吐量

这些应该很容易谷歌。但基本上,指令需要执行一定数量的周期(延迟)。但是你经常可以同时执行多个(吞吐量)。

  

像set,read,move和compare这样的操作需要同时进行   执行?

一般没有。不同的指令具有不同的延迟和吞吐量。例如,添加通常比分割快得多。


如果您对现代处理器上不同装配说明的实际值感兴趣,可以查看Agner Fog's tables


也就是说,影响计算机性能的其他因素还有很多 其中大多数可能比指令延迟/吞吐量更重要:

  • 高速缓存
  • 内存
  • 磁盘
  • 膨胀(这似乎是一个很大的......:D)
  • 等......列表继续......

答案 1 :(得分:3)

流水线和缓存以及cpu本身不再是主要瓶颈已经为你的问题做了两件事。一,今天的CPU通常每个时钟执行一条指令,其次可能需要很多(几十到几百)个时钟来为cpu提供指令。更现代的处理器,即使它们的指令集很旧,也很少提及时钟执行,因为它是一个时钟而且“真正的”执行速度太难以描述。

缓存和管道尝试允许cpu以每个时钟速率的一条指令运行,但是例如从内存中读取,必须等待响应返回。如果这个项目不在高速缓存中,则可能需要数百个时钟周期,因为它必须读取多个位置以填充高速缓存中的一行,然后再用一些时钟将其通过高速缓存返回到处理器。

现在,如果您回到过去,或者在微控制器世界或其他系统中回顾时间,或者至少是一个非常确定的数字(比如两个时钟用于eeprom,一个用于eeprom) ram,那种事情),那么你可以很容易地计算确切的时钟数。像往常一样的处理器会发布每条指令的循环表。例如,两个指令读取将是两个时钟来获取指令,然后是另一个时钟来执行读取,最少3个时钟。有些人实际上需要多个时钟才能执行,因此也会加入。

我强烈建议迈克尔·阿布拉什(Michael Abrash)找到(使用过的)汇编语言禅的副本。它出现时已经过时,但仍然是一项重要的工作。学习如何处理相对简单的8088/86已经足够强大,今天的x86和其他系统相当复杂。

如果运行Windows或Linux或类似的东西试图为你的代码计时,不一定能让你到达你想要的地方。添加或删除一个nop,导致代码在内存中对齐,因为一个字节会对代码的其余部分的性能产生巨大影响,而不是它在ram中的位置没有改变。作为理解问题复杂性的一个简单例子。

您对哪种处理器或系统感兴趣? stm32f4发现板,大约20美元,包含一个带有指令和数据缓存的ARM(cortex-m)处理器。它具有更大系统的复杂性,但同时足够简单(相对于更大的系统)能够进行受控实验。

如果您熟悉微芯片pic世界,他们通常会计算周期以在事件之间执行精确延迟。一个非常确定的环境(只要你不使用中断)。

答案 2 :(得分:2)

  

每种汇编语言指令的速度有多快?设置,读取,移动和比较等操作是否需要同时执行?

您可以在CPU的制造商(例如Intel)的CPU汇编语言手册中找到此信息。每个CPU结构通常都有一两页,它会告诉你执行需要多少“周期”。它将在其他地方定义“周期”。指令可以根据给出的内容执行不同的时间。例如条件跳转可能会也可能不会跳转。乘以零可以(我假设)比乘以7更快。

答案 3 :(得分:0)

答案是MIPS。或每秒IPS百万条指令。既然你在谈论嵌入式系统。