【问题标题】:Throughput calculation using cycle count使用循环计数计算吞吐量
【发布时间】:2011-03-05 02:32:23
【问题描述】:

是否可以根据应用程序消耗的周期计数(处理器指令周期)来确定处理器上应用程序的吞吐量?如果是,如何计算?

【问题讨论】:

    标签: c embedded processor rtos throughput


    【解决方案1】:

    简单:

    #include <time.h>
    clock_t c;
    c = clock(); // c holds clock ticks value
    c = c / CLOCKS_PER_SEC; // real time, if you need it
    

    请注意,您获得的值是一个近似值,有关详细信息,请参阅clock() man page

    【讨论】:

      【解决方案2】:

      如果进程完全受 CPU 限制,则将处理器速度除以周期数即可获得吞吐量。

      实际上,很少有进程完全受 CPU 限制,在这种情况下,您必须考虑其他因素(磁盘速度、内存速度、序列化等)。

      【讨论】:

      • 诸如clock()之类的方法可以很好地估计cpu/用户时间时钟的滴答声——不考虑任何其他因素(I/O、切换等...)
      • @Yuval: 对——clock() 还有一个优点是它通常会延迟内存读取等因素,而 CPU 手册中的计数周期不会。
      • 感谢您也强调其他因素的影响。确实,实际上只有少数进程完全受 CPU 限制!
      【解决方案3】:

      某些 CPU 具有内部性能寄存器,可让您收集各种有趣的统计数据,例如指令周期(有时甚至基于每个执行单元)、缓存未命中、缓存/内存数量读/写等。您可以直接访问这些,但根据您使用的 CPU 和操作系统,可能有现有的工具可以通过 GUI 为您管理所有细节。一个好的分析工具通常会支持性能寄存器,并允许您使用它们收集统计数据。

      【讨论】:

        【解决方案4】:

        如果您使用 TI/Luminary Micro 的 Cortex-M3,则可以使用 TI/Luminary Micro 提供的 driverlib。 使用 SysTick 函数,您可以将 SysTickPeriod 设置为 1 个处理器周期:因此您在中断之间有 1 个处理器时钟。通过计算中断的数量,您应该对功能或功能块花费多少时间得到“足够接近的估计”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-25
          • 2012-11-22
          • 1970-01-01
          • 1970-01-01
          • 2015-07-14
          • 2016-10-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多