roboforum.ru

Технический форум по робототехнике.

Ищу кросс-компилятор для АВР... :)

Re: Ищу кросс-компилятор для АВР... :)

Michael_K » 06 июн 2010, 14:30

Сорри, за тупые вопросы,...
- а что есть F23?
- сколькиразрядная у вас виртуальная машина получилась?
- исполняется из флэша или из рама?

Re: Ищу кросс-компилятор для АВР... :)

blindman » 06 июн 2010, 14:31

1. 23-е число Фибоначчи
2. 16 разрядов, только беззнаковые числа
3. Из флэша

Re: Ищу кросс-компилятор для АВР... :)

Michael_K » 06 июн 2010, 15:09

Хм...
по-моему (это совершенно частное имхо) такие алгоритмы вообще не показатель.
Там же достаточно буковку поменять и результат будет сильно различаться.
буквально ифы местами переставляешь и вуаля... нет разве?
А уж если с начальными условиями "поиграться" - так и вообще в разы.

Re: Ищу кросс-компилятор для АВР... :)

blindman » 06 июн 2010, 15:14

Как способ сравнения производительности - очень даже показатель.

Re: Ищу кросс-компилятор для АВР... :)

Michael_K » 06 июн 2010, 15:24

Вот в этом-то я и не уверен.

Я сейчас на ГЦЦ скомпилял для АВРки... буквально от перестановки ифов, смены типа, легкой оптимизации ифов производительность заметно меняется. На одной и той же машине с одни и тем же компилятором. А есть еще ключи компилятора, например. Что уж говорить про разные языки, когда одинаково исходник заведомо разный.

А уж если задать не if(n==0) return 0; if(n==1) return 1; а, что-то вроде if(n<=2) return 1;
так и просто в два раза число итераций уменьшается...

Впрочем это оффтопик... Производительность понятна...
Имхо, есть куда оптимизировать... и сильно.

Re: Ищу кросс-компилятор для АВР... :)

blindman » 06 июн 2010, 15:28

Michael_K писал(а):А уж если задать не if(n==0) return 0; if(n==1) return 1; а, что-то вроде if(n<=2) return 1;
так и просто в два раза число итераций уменьшается...

Этого не может быть, потому что не может быть никогда

Re: Ищу кросс-компилятор для АВР... :)

Michael_K » 06 июн 2010, 15:33

Ну я утрировал, конечно... :) Я думаю, пример понятен - просто начальные условия сдвинули и упростили одновременно. Хотя для n=0 результат неправильный получается, да... ну это ж тривиальный, типа, случай :))

Добавлено спустя 3 минуты 16 секунд:
В реальных прогах вряд ли будет столько коллов на один плюсик и пару сравнений... ;)

Re: Ищу кросс-компилятор для АВР... :)

Duhas » 06 июн 2010, 15:53

тут, имхо важен порядок сраввнений... если в начале проверять на 0,1,2 то при каждом вызове будут тратиться такты впустую...

то есть должно быть
иф эн больше 2 колл ф(эн-1)

а далее уже редкие случаи типа эн = 0,1,2

вапще нужна скорость - асм в руки ))

Re: Ищу кросс-компилятор для АВР... :)

Michael_K » 06 июн 2010, 17:48

Не факт - посчитайте-ка :)

Re: Ищу кросс-компилятор для АВР... :)

blindman » 09 июн 2010, 09:42

Переписал на ассемблере - тупо "в лоб" перевод с С на ассемблер, скорость выросла в 2 раза - F23 за 5,35 с. Вполне неплохо для 8-битного процессора (ATMega64)

Re: Ищу кросс-компилятор для АВР... :)

Michael_K » 09 июн 2010, 10:09

Ну вот это уже похоже на правду... грубо в среднем 25 тактов на команду...
В общем-то даже и неплохо.

Re: Ищу кросс-компилятор для АВР... :)

blindman » 09 июн 2010, 14:18

Скорее ближе к 50. Вот несколько тестов (время в тактах процессора):

Код: Выделить всёРазвернуть
Empty loop (1000 iterations) : 265526
Assign 16-bit constant to global variable : 90
Assign 16-bit constant to local variable : 87
Call empty function : 153
Add 16-bit constant to local var, assign to local var : 178


Добавлено спустя 1 час 37 минут 47 секунд:
Немного ускорил
Код: Выделить всёРазвернуть
Empty loop (1000 iterations) : 205436
Assign 16-bit constant to global variable : 70
Assign 16-bit constant to local variable : 67
Call empty function : 123
Divide global by 16-bit constant, assign to global (worst case - divide by 1) : 479
Add 16-bit constant to local var, assign to local var : 138
Multiply global by 16-bit constant, assign to global : 152

Re: Ищу кросс-компилятор для АВР... :)

blindman » 23 июн 2010, 16:31

Еще потестил, полет нормальный. Начал интегрировать в проект (мега64/128, 2 устройства через уарт, воспроизведение звука, анализ звука с микрофона, анализ состояния входов, управление нагрузками на выходе, логи на карте памяти, простенькая RTOS).

Позже выложу компилятор и исходники виртуальной машины.

Re: Ищу кросс-компилятор для АВР... :)

Michael_K » 23 июн 2010, 16:40

Вах!!! МОЛОДЦА! Супер.


cron
Rambler\'s Top100 Mail.ru counter