【发布时间】:2011-03-05 02:32:23
【问题描述】:
是否可以根据应用程序消耗的周期计数(处理器指令周期)来确定处理器上应用程序的吞吐量?如果是,如何计算?
【问题讨论】:
标签: c embedded processor rtos throughput
是否可以根据应用程序消耗的周期计数(处理器指令周期)来确定处理器上应用程序的吞吐量?如果是,如何计算?
【问题讨论】:
标签: c embedded processor rtos throughput
简单:
#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。
【讨论】:
如果进程完全受 CPU 限制,则将处理器速度除以周期数即可获得吞吐量。
实际上,很少有进程完全受 CPU 限制,在这种情况下,您必须考虑其他因素(磁盘速度、内存速度、序列化等)。
【讨论】:
clock() 还有一个优点是它通常会延迟内存读取等因素,而 CPU 手册中的计数周期不会。
某些 CPU 具有内部性能寄存器,可让您收集各种有趣的统计数据,例如指令周期(有时甚至基于每个执行单元)、缓存未命中、缓存/内存数量读/写等。您可以直接访问这些,但根据您使用的 CPU 和操作系统,可能有现有的工具可以通过 GUI 为您管理所有细节。一个好的分析工具通常会支持性能寄存器,并允许您使用它们收集统计数据。
【讨论】:
如果您使用 TI/Luminary Micro 的 Cortex-M3,则可以使用 TI/Luminary Micro 提供的 driverlib。 使用 SysTick 函数,您可以将 SysTickPeriod 设置为 1 个处理器周期:因此您在中断之间有 1 个处理器时钟。通过计算中断的数量,您应该对功能或功能块花费多少时间得到“足够接近的估计”。
【讨论】: