处理器指令周期执行时间
Posted
技术标签:
【中文标题】处理器指令周期执行时间【英文标题】:Processor Instruction Cycle Execution Time 【发布时间】:2013-08-15 18:25:41 【问题描述】:我的猜测是 __no_operation()
内在 (ARM) 指令应该花费 1/(168 MHz) 来执行,前提是每个 NOP
在一个时钟周期内执行,我想通过文档进行验证.
是否有关于的信息的标准位置?我正在尝试确定 STM32f407IGh6 处理器执行运行在 168 MHz 的 NOP 指令需要多长时间。
有些处理器在每个指令周期需要多次振荡,有些处理器在比较时钟周期和指令周期时是一对一的。
“指令周期”一词甚至没有出现在 STMicro 提供的整个数据表中,也没有出现在他们的编程手册中(顺便说一句,列出了处理器的指令集)。然而,8051 文档清楚地定义了它的指令周期执行时间,以及它的机器周期特性。
【问题讨论】:
【参考方案1】:由于流水线会影响感知的执行时间,因此单个指令的测量方式与同一指令的序列不同。
您可以使用内置的周期计数寄存器来测量您关心的场景的时间,正如您在另一篇文章 here 中所讨论的那样。
同样,您可以尝试使用and reg, reg
而不是nop
,因为使用nop
指令时,Cortex F4 的行为可能与您的预期不同。
【讨论】:
【参考方案2】:每条指令的时钟周期数很重要。
在 avr 上,它(通常)1 条指令/时钟,因此 12Mhz AVR 以大约 12 mips 运行
在 PIC 上,它通常是 1 条指令/4 个时钟,因此 12Mhz PIC 以大约 3 mips 运行
在 8051(原始)上,它的 1 条指令/12 个时钟,因此 12Mhz 8051 以大约 1 mips 的速度运行
要知道你能完成多少,说明/时钟是相关的。这就是为什么 AMD 处理器可以比 Intel 处理器完成更多/Mhz 的工作。
【讨论】:
【参考方案3】:如果您在复位和时钟控制 (RCT) 中仔细配置所有时钟,并且您知道所有时钟,则您可以准确计算大多数指令的指令执行时间,并至少对所有指令进行最坏情况评估.例如,我使用的是 stm32f439Zi 处理器,它是与 stm32f407 兼容的 cortex-m4。如果您查看参考手册,时钟树会显示 PLL 和所有总线预分频器。在我的例子中,我有一个 8 MHz 外部 quarts,其 PLL 配置为提供 84 Mhz 系统时钟 SYSCLK。这意味着一个处理器周期是 1.0/84e6 ~ 12 ns。
要了解一条指令需要多少个周期或 SYSCLK,请使用ARM® Cortex®‑M4 Processor Technical Reference Manual。例如,大多数情况下的 MOV 指令需要一个周期。在大多数情况下,ADD 指令需要一个周期,这意味着在 12 ns 之后,您将加法的结果存储在寄存器中并准备好供其他操作使用。
在许多情况下,您可以使用该信息来调度您的处理器资源,例如周期性中断,而电气和低级嵌入式系统软件开发人员正在谈论这一点,并且在严格的实际情况下正在这样做-时间和安全关键系统。通常,工程师在设计期间处理最坏情况下的执行时间,而忽略流水线以使处理器内部负载快速而粗糙。在实施过程中,您正在使用工具进行精确的时间分析和改进软件。
在设计和实现的过程中,非确定性的东西被减少到可以忽略不计。
【讨论】:
【参考方案4】:所有指令都需要一个以上的时钟周期才能执行。获取、解码、执行。如果您在 stm32 上运行,您可能会因为舞会的缓慢而每次获取几个时钟,如果从 ram 运行谁知道它是否是 168Mhz 或更慢。 arm 总线通常需要多个时钟周期才能完成任何操作。
没有人再谈论指令周期了,因为它们不是确定性的。答案总是“视情况而定”。
制造一辆汽车可能需要 X 小时,但如果您开始制造一辆汽车,然后在 30 秒后开始制造另一辆汽车,并且每 30 秒开始制造另一辆汽车,那么在 X 小时后,您将每 30 秒就有一辆新车。这是否意味着制造一辆汽车需要 30 秒?当然不是。但这确实意味着一旦启动并运行,您可以在该生产线上平均每 30 秒就有一辆新车。
这正是处理器的工作方式,每条指令需要多个时钟才能运行,但是您将主题流水线化,以便同时有许多时钟在管道中,这样如果输入正确的指令,内核的平均值就是一个每个时钟,每个时钟可以完成这些指令。有了分支和缓慢的内存/ROM,你甚至不能指望得到它。
如果你想在你的处理器上做一个实验,那就用几百个 nop 做一个循环
beg = read time
load r0 = 100000
top:
nop
nop
nop
nop
nop
nop
...
nop
nop
nop
r0 = r0 - 1
bne top
end = read timer
如果完成该循环需要几分之一秒,则要么增加 nop 的数量,要么让它运行一个数量级的更多循环。实际上,您希望达到大量的计时器滴答声,不一定是挂钟上的秒或分钟,而是需要大量的计时器滴答声。
然后进行数学运算并计算平均值。
用 ram 而不是 rom 中的程序重复实验
将处理器时钟降低到不需要闪存除数的最快时间,重复从闪存运行。
作为 cortex-m4 打开 I 缓存,使用闪存重复,使用 ram 重复(在 168Mhz)。
如果您使用相同的测试循环从所有这些实验中没有得到一系列不同的结果,那么您可能做错了什么。
【讨论】:
啊,所以当我在 STM32F4 文档中看到“Single-cycle Multiply-Accumulate”时,“cycle”指的是指令周期(例如,获取、解码、执行)? 这意味着如果你连续执行几十个或几百个,平均每条指令需要一个处理器时钟周期。 还应确保您的编译器优化器设置不会优化掉所有的 NOP 指令。检查您的装配清单以确保,否则上面的时序循环建议将产生不切实际的高吞吐量。 如果将来有人想尝试 RAM 与 FLASH 测试,请注意启动程序集文件大部分时间会将所有程序从 FLASH 复制到 RAM。 如果在汇编中编写,那么删除 nop 将是一个糟糕的工具。而且你不能简单地将闪存复制到内存,除非它是 PIC 并且让它工作你必须非常小心。一般来说,您需要手工制作基准。正确编写的简单 nop 循环是的,您可以复制...以上是关于处理器指令周期执行时间的主要内容,如果未能解决你的问题,请参考以下文章
(计算机组成原理)第五章中央处理器-第二节:指令执行过程(取指周期间址周期执行周期和中断周期)