Я работаю над ARM cortex M4
оценочная комиссия, это bare metal
приложение без какой-либо операционной системы на нем.
Теперь я хочу измерить CPU
использование данного процесса / алгоритма, что будет лучшим способом сделать это?
Должен ли я внедрить операционную систему для измерения CPU
использование, которые имеют функциональность для такого спроса?
Вопрос почти отвечает сам. Что делает ваше голое железное приложение, когда оно не в этом процессе / алгоритме? Измерьте одно или другое или оба. Если у вас есть голое железное приложение, которое не полностью использует процессор в этом алгоритме, то у вас уже есть операционная система в той степени, в которой вы управляете временем этого приложения / функции. Вы можете использовать несколько методов из простого счетчика в цикле относительно таймера, чтобы увидеть, сколько счетчиков в цикле, когда алгоритм получает срезы времени, а не нет. Вы можете просто определить время самого алгоритма и т. Д.
Я предполагаю, что когда вы говорите «CPU», вы имеете в виду всю систему, поскольку ваша производительность сильно зависит как от вашего кода, так и от того, с чем он говорит. Если вы работаете с флэш-памяти на Cortex-M4 в зависимости от тактовой частоты, вы можете записывать циклы процессора, просто ожидая инструкций или данных (и можете очень легко получить неверное представление о производительности процессора для алгоритма, если он не является алгоритмом записи часов). Кэши маскируют / манипулируют этой производительностью и могут очень сильно повлиять на производительность, если вы не будете осторожны и не будете знать, что они делают. Будучи вопросом C ++, ваш компилятор играет большую роль как в производительности, так и в коде, конечно, он может очень легко заставить код работать в несколько раз быстрее или медленнее с минимальными изменениями в командной строке или коде.
Если алгоритм является частью isr, то процессор переходит в спящий режим, в противном случае вы можете использовать метод gpio pin и scope, чтобы получить представление о соотношении скорости работы и спящего режима.
Внедрение ОС для измерения времени простоя процессора кажется мне слишком сложным. Насколько мне известно, Cortex-M4 включает в себя блок отладки (DWT), который позволяет снимать счетчик циклов. Но проще всего было бы подключить булавку к осциллографу и переключать ее при входе и выходе из вашего алгоритма.
Во-первых, реализация операционной системы не будет практичной или даже невозможной только для измерения производительности. Один из возможных подходов состоит в том, чтобы сохранить переменную count, которая будет записывать количество тиков, произошедших до этой продолжительности. И увеличить эту переменную в прерывании таймера.