4

我试图完全理解时钟周期是什么,所以我想出了一个测试示例,我希望有人确认或消除并提供更好的理解。如果我有这行简单的代码,一个while循环,在设备上运行

while(true)
{
  int x = 5;
}

命令:int x = 5 每个时钟周期执行一次吗?换句话说,时钟速度是设备在单位时间内读取和执行命令的速度吗?

4

3 回答 3

9

时钟周期只是驱动处理器逻辑的振荡器的单个周期,处理器在该周期中可能实现的目标取决于处理器架构和其他因素,例如内存速度。

您示例中的代码是高级语言,如果直接翻译,几乎可以肯定会翻译成多个机器级指令。以伪机器代码为例:

loop:
   MOV addrx,#5
   JMP loop

这将是每个循环至少两个机器周期。高级代码和生成的机器指令之间几乎没有或没有确定性关系;虽然在这个简单的例子中,它可能看起来如此。

处理器如何实现指令集使问题更加复杂。典型的 RISC 处理器在单个周期内执行一条指令,而在 CISC 处理器上,不同的单独指令根据其复杂性分别占用不同数量的周期。

另一个考虑因素是内存总线延迟。通常,处理器执行指令的速度比它访问内存的速度要快,闪存通常尤其如此。访问较慢内存的指令可能会引入等待状态,在这种状态下,处理器会停止直到数据到达。

一些处理器具有并行执行指令的能力,允许在一个周期内执行多条指令。其他人采用 SIMD(单指令多数据)指令,可以同时对不同的数据执行相同的操作。

影响指令吞吐量的另一种技术是流水线,其中一条指令可能需要多个周期,但可以在每个周期启动一条新指令,因此假设 5 个四周期指令一个接一个地启动,则产生一次结果每个周期。

一些处理器采用哈佛架构,该架构使用单独的总线来允许同时获取数据和指令。

其他技术用于维持指令吞吐量,例如分支预测。高级语言编译器通常会生成代码,最大限度地发挥上述所有技术的潜力。

为特定架构给出的性能度量通常是 MIPS/MHz - 指示通常每个时钟周期执行的指令数量(在多个时钟周期内摊销)。例如,ARM Cortex-M3 管理 1.25 MIPS/MHz,而 Renesas SH-4 达到 1.8 MIPS/MHz。

于 2013-02-12T09:27:54.547 回答
6

我从哪里开始...

任何处理器都有一个“时钟”,可确保电子器件有时间在下一件事发生之前从一种状态转换到另一种状态。在现代设备的速度下,没有什么是“瞬时的”——一个“台阶”变成了一个“斜率”,即使是很短的轨迹也会导致电信号传输的延迟。

根据 CPU 的架构,它可以“在一个时钟周期内”执行某些操作,而其他操作则需要“多个周期”。想想长除法——你做了一系列的减法——移位操作,直到你完成了前一部分的操作,你才知道接下来需要做什么。此外,更容易了解如何在一个周期内完成完整的操作。

当特定的“高级”指令被翻译成机器代码时,生成的代码可能需要一个或多个周期——而一条简单的指令可能需要一个或多个步骤。根据编译器、目标和选择的优化,上述代码中可能会发生以下任何情况:

  • 编译器意识到“while”条件始终为真,并且循环内没有任何变化。它进一步意识到你从不使用 x 的值,它选择根本不执行指令

  • 编译器决定为int变量使用内置寄存器x,并在编译时对其进行初始化。循环执行期间不花费时间

  • 编译器将“5”加载到寄存器中,在表中查找 x 的偏移量,计算指针,并将寄存器复制到偏移地址中。可以是任意数量的周期。

不确定这是否真的对您有所帮助-但问题相当复杂...

于 2013-02-11T20:01:40.763 回答
2

不幸的是,它并不像你建议的那么简单。

您可能想看看相关的维基百科文章http://en.wikipedia.org/wiki/Sequential_logic

试图简单地说,时钟周期是同步操作电路从一个定义的状态切换到下一个定义的状态所需的时间。

事实上,它通常与 CPU 执行指令所需的时间有关。您可能想查看 CPU 的手册,执行时间通常以执行所需指令所需的时钟周期数给出。

不幸的是,实际上它并不是那么简单,因为有些聪明的 CPU 如果满足特殊要求,就能够更快地执行指令。例如,通过指令流水线推送指令,cpu 可能已经开始对下一条指令进行操作,而占用超过一个时钟周期的部分 previos 指令仍在处理中。

如果指令的重新排序没有改变程序流程或指令被提前推测性地计算,那么指令甚至可能被重新排序。

另一方面,一条指令在时钟周期方面可能需要更长的时间,如果必须从内存中获取指令,这将花费更多时间。

于 2013-02-11T20:14:35.013 回答