Re: Что такое оптимизация на примере.
От: minorlogic Украина  
Дата: 21.11.05 09:50
Оценка: 7 (1) +2
Возникла мысль что некоторые учасники дискусии не вполне разделяют понимание что такое оптимизация.

Попробую привести пример из реальной жизни.
Кратко , есть в сжатии MP3 такой алгоритм , когда надо запихнуть сжатые данные в лимитированный объем(битрейт).

алгоритм
1. Бинарным делением мы находим величину квантизатора дающего ближайший по размеру результат.

2. находим самые искаженные частотные полосы , и для них конкретно уменьшаем величину квантизации.

3. После каждого изменения опять персчитываем сколько же места займет полученная информация.

(не будем заострять внимание что этот подход не эфективен в целом , можно лучше)


Так вот после замеров производительности , стало ясно что самым критичным является непосредственно нелинейная квантизация.

Анализ кода показал , что его разработчики знали об этой проблеме и уже постарались выжать из этого все что можно .

Что делать ? переписать на асемблере ? КОНЕЧНО ! Мне такое предлагали, даже настаивали . Но это ПОСЛЕДНЕЕ что я стал бы делать .

Первое правило оптимизатора какое ?
"Самый быстрый код — это тот который не выполняется"
И я подумал а можно ли сократить количество вызовов квантизатора ? И конечно , сразу понял что в большинстве случаев мы на каждой итерации квантизуем одни и теже данные с тем же самым шагом.

И тут добавление информации что на предыдущам шаге у нас была подобная квантизация и пересчитывать ее не надо дало прирост на порядок (этого шага)!!! И функция квантизации престала быть бутылочным горлышаком.

После этого было пару эвристик чтобы ускорить спуск бинарным поиском и т.д.

Так вот мысль , если бы я пытался оптимизировать квантизатор и переписывать на асемблере это дало бы минимальный прирост . А немного подумав , представив процес в целом пришло замечательное и во многом очевидное решение .

По жизни уже давным давно повторяю как мантру
"оптимизируйте алгоритмы а не код" нет неправильно , правильно так "ОПТИМИЗИРУЙТЕ АЛГОРИТМЫ А НЕ КОД !!!!!!"

Мне кажется что и Максим , когда говорит про "оптимизацию" совсем не имеет ввиду причесывание кода.


К сожалению в приведенном примере , для нахождения такого очевидного решения , пришлось ПОНЯТЬ что именно делает весь код в целом, а для этого надо знать и предметную область и многое другое.
Ищу работу, 3D, SLAM, computer graphics/vision.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.