Технический форум по робототехнике.
toshas » 10 сен 2007, 19:07
Часто встает вопрос о скорости выполнения программы.
понятно что она однозначно связана с частотой работы чипа, и как-то совсем нетривиально с используемым компилятором, уровнем оптимизации, условия внешней среды...
но все же есть ли способы прикинуть/посчитать сколько будет выполняться программа ?
(что-то типа таблицы соответствия "оператор - число тактов" ?)
кроме того какие наиболее удобные, точные или часто применяемые методы определения скорости уже с обратной стороны, т.е. на почти готовом устройстве.
встраивание в код замеров по таймерам, измерение осциллографом, еще что-то ?
как вы решаете эти задачи ?
спасибо!
avr123.nm.ru » 10 сен 2007, 19:38
так как вы и написали - расчет или измерение.
toshas » 10 сен 2007, 20:04
как выполнить такой расчет с достаточной точностью?
EdGull » 10 сен 2007, 20:33
Батенька вы не поверите!!! Как ни странно прочитать даташит!!!
))
там расписано какая команда сколько тактов занимает, правда это актуально только для ассемблера.
avr123.nm.ru » 10 сен 2007, 20:55
EdGull писал(а):Батенька вы не поверите!!! Как ни странно прочитать даташит!!!
))
там расписано какая команда сколько тактов занимает, правда это актуально только для ассемблера.
Вы не поверите !!! Но он спрашивал про ОПЕРАТОРЫ компилятора а не про АСМ инструкции.
EdGull » 10 сен 2007, 21:05
Ага, ассемблер это уже не компилятор значит...
))
И вообще зря я тут с вами болтаю, у вас у обоих города не заполненые.
Так что для меня здесь эта тема закрыта, пока не исправитесь
))
toshas » 10 сен 2007, 22:14
ok поправил )
-= Александр =- » 10 сен 2007, 23:02
Можно попробовать в симуляторах покрутить... :roll:
avr123.nm.ru » 11 сен 2007, 00:18
EdGull писал(а):Ага, ассемблер это уже не компилятор значит...
))
А какие в асме могут быть УРОВНИ ОПТИМИЗАЦИИ ???
-= Александр =- » 11 сен 2007, 01:18
avr123.nm.ru писал(а):EdGull писал(а):Ага, ассемблер это уже не компилятор значит...
))
А какие в асме могут быть УРОВНИ ОПТИМИЗАЦИИ ???
Там он только один - "оптимизация вручную" :wink:
EdGull » 11 сен 2007, 11:14
Когда мне надо точно замерить скорость выполненя, я выставляю на ноге 1, а после завершения ставлю на ней 0. После этого цифровым осцилоскопом всё сразу видно
Естественно прерывания приходится отключать.
matracc » 12 сен 2007, 22:25
Простите, но я не понял, что такое операторы компилятора...
Если задача стоит понять сколько циклов (у avr цикл это вроде бы один такт?) потребуется для выполнения ассемблерной программы - в datasheet в instruction set reference должно быть указано сколько циклов требуется на каждую отдельную команду (1, ну может 2, редко больше).
Если речь идет о программе на си - надо посмотреть ассемблерный код, в который транслируется ваша программа, при используемых опциях оптимизации, inlining и пр.
И конечно же еще есть профайлер. Если есть))
Измерять осциллографом - как минимум не точно. А иногда это вообще не представляется возможным.
EdGull » 12 сен 2007, 22:33
Измерять осциллографом - как минимум не точно
Это измерение де-факто, а по тактам де-юро. Точней чем по осцилографу не бывает!
avr123.nm.ru » 13 сен 2007, 09:42
EdGull писал(а):Когда мне надо точно замерить скорость выполненя, я выставляю на ноге 1, а после завершения ставлю на ней 0. После этого цифровым осцилоскопом всё сразу видно
По моему нужно вычесть из показаний время выполнения "сделать 1 на ноге".
avr123.nm.ru » 13 сен 2007, 09:45
EdGull писал(а):Точней чем по осцилографу не бывает!
Смотря какой осцил. Большинство аналоговых не имеют кварца вообще ! Так что точность там ни какая в сравнении с симулятором.
ИМХО самое точное измерение в симуляторе - там точность АБСОЛЮТНАЯ математически-даташитная. Такая практически будет и с обычным кварцем.