Технический форум по робототехнике.
Michael_K » 06 июн 2010, 14:30
Сорри, за тупые вопросы,...
- а что есть F23?
- сколькиразрядная у вас виртуальная машина получилась?
- исполняется из флэша или из рама?
blindman » 06 июн 2010, 14:31
1. 23-е число Фибоначчи
2. 16 разрядов, только беззнаковые числа
3. Из флэша
Michael_K » 06 июн 2010, 15:09
Хм...
по-моему (это совершенно частное имхо) такие алгоритмы вообще не показатель.
Там же достаточно буковку поменять и результат будет сильно различаться.
буквально ифы местами переставляешь и вуаля... нет разве?
А уж если с начальными условиями "поиграться" - так и вообще в разы.
blindman » 06 июн 2010, 15:14
Как способ сравнения производительности - очень даже показатель.
Michael_K » 06 июн 2010, 15:24
Вот в этом-то я и не уверен.
Я сейчас на ГЦЦ скомпилял для АВРки... буквально от перестановки ифов, смены типа, легкой оптимизации ифов производительность заметно меняется. На одной и той же машине с одни и тем же компилятором. А есть еще ключи компилятора, например. Что уж говорить про разные языки, когда одинаково исходник заведомо разный.
А уж если задать не if(n==0) return 0; if(n==1) return 1; а, что-то вроде if(n<=2) return 1;
так и просто в два раза число итераций уменьшается...
Впрочем это оффтопик... Производительность понятна...
Имхо, есть куда оптимизировать... и сильно.
blindman » 06 июн 2010, 15:28
Michael_K писал(а):А уж если задать не if(n==0) return 0; if(n==1) return 1; а, что-то вроде if(n<=2) return 1;
так и просто в два раза число итераций уменьшается...
Этого не может быть, потому что не может быть никогда
Michael_K » 06 июн 2010, 15:33
Ну я утрировал, конечно...

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

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

Duhas » 06 июн 2010, 15:53
тут, имхо важен порядок сраввнений... если в начале проверять на 0,1,2 то при каждом вызове будут тратиться такты впустую...
то есть должно быть
иф эн больше 2 колл ф(эн-1)
а далее уже редкие случаи типа эн = 0,1,2
вапще нужна скорость - асм в руки ))
Michael_K » 06 июн 2010, 17:48
Не факт - посчитайте-ка

blindman » 09 июн 2010, 09:42
Переписал на ассемблере - тупо "в лоб" перевод с С на ассемблер, скорость выросла в 2 раза - F23 за 5,35 с. Вполне неплохо для 8-битного процессора (ATMega64)
Michael_K » 09 июн 2010, 10:09
Ну вот это уже похоже на правду... грубо в среднем 25 тактов на команду...
В общем-то даже и неплохо.
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
blindman » 23 июн 2010, 16:31
Еще потестил, полет нормальный. Начал интегрировать в проект (мега64/128, 2 устройства через уарт, воспроизведение звука, анализ звука с микрофона, анализ состояния входов, управление нагрузками на выходе, логи на карте памяти, простенькая RTOS).
Позже выложу компилятор и исходники виртуальной машины.
Michael_K » 23 июн 2010, 16:40
Вах!!! МОЛОДЦА! Супер.