реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Алгоритм на Си, время выполнения на ARM
Rok
сообщение May 24 2011, 13:46
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 62
Регистрация: 11-01-05
Из: Беларусь, Минск
Пользователь №: 1 894



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

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

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

Спасибо.
Go to the top of the page
 
+Quote Post
kovigor
сообщение May 24 2011, 14:30
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



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


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

P.S. Вместо светодиода можно выдать пару символов по тому же UART ...
Go to the top of the page
 
+Quote Post
Homo Sapiens
сообщение May 24 2011, 14:34
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 84
Регистрация: 30-04-09
Из: Москва
Пользователь №: 48 473



Юзайте таймер.
Виноват, самого процессора-то у вас нет.

Есть еще путь простого тупого подсчета. В документации должно быть написано, сколько времени выполняется та или иная инструкция. Сумма всех инструкций алгоритма даст вам точную величину. Приходилось делать и так.

Сообщение отредактировал Homo Sapiens - May 24 2011, 14:36
Go to the top of the page
 
+Quote Post
Dima_Ag
сообщение May 24 2011, 14:47
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 12-09-06
Пользователь №: 20 304



Не знаю как под Линукс, а вот в IAR это всё можно посмотреть на встроенном симуляторе.
По крайней мере, для Cortex M3 всё чётко сходится с измерениями в реальном устройстве.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 24 2011, 14:57
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Homo Sapiens @ May 24 2011, 18:34) *
Сумма всех инструкций алгоритма даст вам точную величину.

Увы, только для сферического процессора в вакууме. Ибо на реальном процессоре это число будет зависеть от конфигурации подсистемы памяти, кэшей/ускорителей флеш, параллельно работающих DMA периферии и прочих вещей, которые данная модель не учитывает вообще, а симулятор лишь частично.
Go to the top of the page
 
+Quote Post
ASN
сообщение May 24 2011, 15:45
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



Rok
Слишком много неизвестных.
Можно оценить примерное минимальное время выполнения реализации алгоритма на ассемблере.
Реальное время будет больше.
Вот тут приведены примеры как С код можно оптимизировать под конкретную платформу.

Как указал уважаемый aaarrr, очень многое будет зависеть от конфигурации подсистемы памяти, кэшей/ускорителей флеш, параллельно работающих DMA периферии, качества конкретного компилятора и учёта особенностей камня.
В моём случает, сильно оптимизированный под конкретную платформу ассемблерный код, работал на 20 % медленнее (из-за прерываний и DMA).
Go to the top of the page
 
+Quote Post
_Pasha
сообщение May 25 2011, 01:05
Сообщение #7


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Про Кейловский симулятор (вынь, правда) - забыли. Он ведь времянки хорошо показывает.
Go to the top of the page
 
+Quote Post
Rok
сообщение May 25 2011, 06:46
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 62
Регистрация: 11-01-05
Из: Беларусь, Минск
Пользователь №: 1 894



Цитата(Dima_Ag @ May 24 2011, 23:47) *
Не знаю как под Линукс, а вот в IAR это всё можно посмотреть на встроенном симуляторе.
По крайней мере, для Cortex M3 всё чётко сходится с измерениями в реальном устройстве.

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

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

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

Т.е. собираем сразу всю систему и только потом можно производить к.либо оценку по времени выполнения. Ясно. Спасибо.
Go to the top of the page
 
+Quote Post
Homo Sapiens
сообщение May 25 2011, 07:14
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 84
Регистрация: 30-04-09
Из: Москва
Пользователь №: 48 473



Цитата
Увы, только для сферического процессора в вакууме.

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




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

Разумеется, это лучший вариант.

Сообщение отредактировал Homo Sapiens - May 25 2011, 07:14
Go to the top of the page
 
+Quote Post
Dima_Ag
сообщение May 25 2011, 11:37
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 12-09-06
Пользователь №: 20 304



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


Вы правы, но с некоторыми ограничениями.
Как уже писали выше, надо понимать, что симулятор не всегда полностью корректно симулирует железку.
И чем сложнее процессор, чем больше там всяких кешей, конвейеров и т.п., тем хуже точность у симулятора.
Также в симуляторе крайне непросто учесть загрузку системы прерываниями.
Иными словами - приблизительную оценку получить из симулятора можно.
И чем проще реальный процессор и меньше используются прерывания в реальной железке, тем оценка будет точнее.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 25 2011, 12:06
Сообщение #11


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Вот ещё вертится на языке слово "профайлер"...
Но утверждать не стану, сам не пользовался.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
kikos
сообщение Jul 6 2011, 09:21
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 1-02-11
Пользователь №: 62 608



Цитата(Rok @ May 24 2011, 17:46) *
Как оценить сколько времени потребуется для его вычисления на ARM процессоре


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



Сообщение отредактировал kikos - Jul 6 2011, 09:28
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.0144 секунд с 7
ELECTRONIX ©2004-2016