时钟周期只是驱动处理器逻辑的振荡器的单个周期,处理器在该周期内可能实现的目标取决于处理器架构和其他因素,例如内存速度。
您示例中的代码是高级语言,如果直接翻译,几乎可以肯定会翻译成多个机器级指令。以伪机器码为例:
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。