execution-time - 处理器指令周期执行时间

标签 execution-time stm32 cortex-m machine-instruction nop

  • 我的猜测是,如果每个__no_operation()在一个时钟周期内执行,则NOP内部(ARM)指令应以1/(168 MHz)执行,我想通过文档进行验证。
  • 是否有标准位置可提供有关处理器的指令周期执行时间的信息?我正在尝试确定STM32f407IGh6处理器需要多长时间才能执行以168 MHz运行的NOP指令。
  • 有些处理器在每个指令周期需要多次振荡,有些在将时钟周期与指令周期进行比较时是一对一的。
  • 在“意法半导体”提供的整个数据表中,甚至在其编程手册(列出处理器的指令集,btw)中,都没有出现“指令周期”一词。但是,8051文档除了其机器周期特性外,还明确定义了其指令周期执行时间。
  • 最佳答案

    所有指令都需要一个以上的时钟周期才能执行。获取,解码,执行。如果您在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/

    相关文章:

    sql - mysql执行时间

    python - 如何在比较两个长二维列表时减少执行时间

    stm32 - 如何在 RTOS 的 Cortex-M3 微 Controller 中以高频(> 100kHz)运行周期性线程?

    c - ARM GCC 中对 posix_memalign 的 undefined reference

    math - 64 位乘法/除法,无需 64 位乘法或除法指令

    c++ - FIO 运行时不同于 gettimeofday()

    mysql - 优化mysql子查询执行时间

    c - 如果不使用 const,RAM 中不需要的分配,尽管放置在 Flash 绝对地址

    debugging - 暂停调试器时 STM32 卡住外围设备

    floating-point - 在 Cortex M0 上,浮点比较与整数比较的开销有多大?