我正在开发一个ARM cortex M4
评估板,它是一个bare metal
应用程序,没有运行任何操作系统。
现在我想衡量给定流程/算法的CPU
用法,最好的方法是什么?
我应该实施一个操作系统来衡量具有此类需求功能的CPU
用法吗?
答案 0 :(得分:6)
这个问题几乎可以解决问题。当您的裸机应用程序不在该流程/算法中时,它的作用是什么?测量一个或另一个或两者。如果你的裸机应用程序没有完全消耗这个算法中的cpu,那么你已经拥有了一个操作系统,只要你管理这个应用程序/函数的时间。您可以使用循环中相对于计时器的简单计数器中的多种方法来查看算法获取时间片与否时每个循环计数的数量。您可以简单地计算算法本身等等。
我认为当你说CPU意味着整个系统时,你的性能很大程度上取决于你的代码和它所说的内容。如果根据时钟速率从cortex-m4上的闪存运行,您可能正在等待处理器周期等待指令或数据(并且当算法不燃烧时钟时,很容易得到错误的处理器性能概念)。缓存掩盖/操纵该性能,如果您不小心并意识到它们正在做什么,它们很容易对性能产生很大影响。作为一个C ++问题,编译器在性能和代码中扮演着重要角色,只需对命令行或代码进行最少的更改,就可以非常轻松地使代码运行几倍或更慢。
如果算法是isr的一部分,则处理器进入休眠状态,否则,您可以使用gpio引脚和范围techinique来了解运行与睡眠比率。
答案 1 :(得分:4)
实现一个操作系统来测量CPU的空闲时间对我来说似乎有点过分了。据我所知,Cortex-M4包含一个调试单元(DWT),允许您对cycle counter进行快照。但最简单的方法是将一个引脚连接到示波器,并在算法的输入和退出时切换它。
答案 2 :(得分:1)
首先,所有实施操作系统都不实用,甚至不可能只是为了测量性能。因此,一种可能的方法是保留一个计数变量,该变量将记录在该持续时间内发生的滴答数。并在Timer的中断中递增该变量。