Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Алгоритм на Си
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Rok
Люди добрые. Вопрос мой может и "простоват", но мне нужно с чего-нить начать.
Поэтому вот здесь и решил спросить. Если ответ простой, то просто тыкните носом туда куда нужно.
Если есть похожая тема на форуме дайте ссылку плиз.

Собственно вопрос:
Предположим, есть у меня какой-то алгоритм вычисления чего-либо, написанный на Си.
Как оценить сколько времени потребуется для его вычисления на ARM процессоре ?
По идее можно засунуть его в ARM компилятор и оттуда вытянуть репорт, так ?
Если да, то какой продукт необходимо поставить ? Есть ли такие компиляторы для линуха ?
Есть ли какие другие пути решения данной задачи ?

Если есть наводящие вопросы прошу задавать.

Спасибо.
kovigor
Цитата(Rok @ May 24 2011, 16:46) *
Есть ли какие другие пути решения данной задачи ?


Проще всего - в начале выполнения вашего алгоритма зажечь светодиод, по окончании - погасить, а затем просто воспользоваться осциллографом для измерения длительности полученного импульса. Лично я всегда так и делаю ...

P.S. Вместо светодиода можно выдать пару символов по тому же UART ...
Homo Sapiens
Юзайте таймер.
Виноват, самого процессора-то у вас нет.

Есть еще путь простого тупого подсчета. В документации должно быть написано, сколько времени выполняется та или иная инструкция. Сумма всех инструкций алгоритма даст вам точную величину. Приходилось делать и так.
Dima_Ag
Не знаю как под Линукс, а вот в IAR это всё можно посмотреть на встроенном симуляторе.
По крайней мере, для Cortex M3 всё чётко сходится с измерениями в реальном устройстве.
aaarrr
Цитата(Homo Sapiens @ May 24 2011, 18:34) *
Сумма всех инструкций алгоритма даст вам точную величину.

Увы, только для сферического процессора в вакууме. Ибо на реальном процессоре это число будет зависеть от конфигурации подсистемы памяти, кэшей/ускорителей флеш, параллельно работающих DMA периферии и прочих вещей, которые данная модель не учитывает вообще, а симулятор лишь частично.
ASN
Rok
Слишком много неизвестных.
Можно оценить примерное минимальное время выполнения реализации алгоритма на ассемблере.
Реальное время будет больше.
Вот тут приведены примеры как С код можно оптимизировать под конкретную платформу.

Как указал уважаемый aaarrr, очень многое будет зависеть от конфигурации подсистемы памяти, кэшей/ускорителей флеш, параллельно работающих DMA периферии, качества конкретного компилятора и учёта особенностей камня.
В моём случает, сильно оптимизированный под конкретную платформу ассемблерный код, работал на 20 % медленнее (из-за прерываний и DMA).
_Pasha
Про Кейловский симулятор (вынь, правда) - забыли. Он ведь времянки хорошо показывает.
Rok
Цитата(Dima_Ag @ May 24 2011, 23:47) *
Не знаю как под Линукс, а вот в IAR это всё можно посмотреть на встроенном симуляторе.
По крайней мере, для Cortex M3 всё чётко сходится с измерениями в реальном устройстве.

Значит, как я понял, можно всё это требуемое хозяйство запустить на симуляторе и проверить время выполнения.
Хорошо, будем значит копать в сторону симуляторов и смотреть с чем их едят.
Я прав ?

Цитата(ASN @ May 25 2011, 00:45) *
Rok
Слишком много неизвестных.
Можно оценить примерное минимальное время выполнения реализации алгоритма на ассемблере.
Реальное время будет больше.
Вот тут приведены примеры как С код можно оптимизировать под конкретную платформу.

Как указал уважаемый aaarrr, очень многое будет зависеть от конфигурации подсистемы памяти, кэшей/ускорителей флеш, параллельно работающих DMA периферии, качества конкретного компилятора и учёта особенностей камня.
В моём случает, сильно оптимизированный под конкретную платформу ассемблерный код, работал на 20 % медленнее (из-за прерываний и DMA).

Т.е. собираем сразу всю систему и только потом можно производить к.либо оценку по времени выполнения. Ясно. Спасибо.
Homo Sapiens
Цитата
Увы, только для сферического процессора в вакууме.

Если вы пишете на голом процессоре, а не под какой-то там операционкой или её куском, то, разумеется, "мой" вариант подсчета корректно работает и для реального процессора. Вошли в алгоритм, вышли из алгоритма. Вся периферия уже учитывается нами, разработчиками ПО для конкретной железяки, в этом самом алгоритме. Другое дело, что сложновато это всё.




Цитата
Т.е. собираем сразу всю систему и только потом можно производить к.либо оценку по времени выполнения. Ясно. Спасибо.

Разумеется, это лучший вариант.
Dima_Ag
Цитата(Rok @ May 25 2011, 10:46) *
Значит, как я понял, можно всё это требуемое хозяйство запустить на симуляторе и проверить время выполнения.


Вы правы, но с некоторыми ограничениями.
Как уже писали выше, надо понимать, что симулятор не всегда полностью корректно симулирует железку.
И чем сложнее процессор, чем больше там всяких кешей, конвейеров и т.п., тем хуже точность у симулятора.
Также в симуляторе крайне непросто учесть загрузку системы прерываниями.
Иными словами - приблизительную оценку получить из симулятора можно.
И чем проще реальный процессор и меньше используются прерывания в реальной железке, тем оценка будет точнее.
MrYuran
Вот ещё вертится на языке слово "профайлер"...
Но утверждать не стану, сам не пользовался.
kikos
Цитата(Rok @ May 24 2011, 17:46) *
Как оценить сколько времени потребуется для его вычисления на ARM процессоре


Без использования таймера на реальном процессоре все оценки будут +- пара литров

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.