__no_operation()
在一个时钟周期内执行,则NOP
内部(ARM)指令应以1/(168 MHz)执行,我想通过文档进行验证。 最佳答案
所有指令都需要一个以上的时钟周期才能执行。获取,解码,执行。如果您在stm32上运行,则可能是由于舞会的缓慢而导致每次获取占用多个时钟,如果是从知道168Mhz或更慢的ram运行的话。 ARM 总线通常需要多个时钟周期才能执行任何操作。
没有人再谈论指令周期了,因为它们不是确定性的。答案始终是“取决于”。
build 一辆汽车可能需要X个小时,但是如果您开始 build 一辆汽车,则在30秒后开始 build 另一辆汽车,每30秒开始 build 另一辆汽车,那么在X个小时之后,您将每30秒拥有一辆新汽车。这是否意味着制造汽车需要30秒?当然不是。但这确实意味着一旦启动并运行,您就可以在该生产线上每30秒平均获得一辆新车。
这正是处理器的工作方式,每条指令需要花费多个时钟才能运行,但是您可以通过流水线化主题,使许多指令一次进入管道中,这样就可以使平均值达到这样的水平:如果每个时钟向正确的指令馈送正确的指令,那么内核就可以了,可以每个时钟完成一次这些指令。有了分支和缓慢的内存/ROM,您甚至无法期望得到它。
如果您想在处理器上进行实验,那么请进行几百次循环的循环
beg = read time
load r0 = 100000
top:
nop
nop
nop
nop
nop
nop
...
nop
nop
nop
r0 = r0 - 1
bne top
end = read timer
如果要花几分之一秒才能完成该循环,则可以增加点的数量,或者使它运行一个数量级以上的循环。实际上,您想要击打大量的计时器刻度,而不必在墙上的时钟上击中秒或分钟,而是要用适当数量的计时器刻度来达到目的。
然后进行数学运算并计算平均值。
使用位于ram而不是rom中的程序重复实验
将处理器时钟降低至不需要闪存除数的最快时间,请从闪存重复运行。
是cortex-m4时,打开I缓存,使用Flash重复,使用ram重复(在168Mhz)。
如果使用相同的测试循环从所有这些实验中均未获得一系列不同的结果,则可能是您做错了什么。
关于execution-time - 处理器指令周期执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18220928/