| Как сделать свою программу быстрой 10.06.2003 Андрей Гапанович
В те далекие времена, когда компьютеры были не быстрее черепахи, многие программисты писали свои творения, буквально вылизывая каждую строку кода, чтобы хоть немного повысить скорость работы программ. С развитием аппаратной части быстродействие компьютеров стремительно росло и за последнее десятилетие увеличилось на порядки. Обычный персональный компьютер сейчас в разы превосходит вычислительной большие ЭВМ советских времен, занимавшие целые комнаты. Такое положение дел разбаловало программистов, особенно начинающих, — ведь типичные приложения зачастую используют менее десяти процентов ресурсов процессора. Может, оптимизация кода и вовсе не нужна? Конечно, приятно сознавать, что твой код совершенен, но если никто, кроме тебя самого, этого не оценит, стоит ли тратить время? Тем более что программист, как правило, работает в жесточайшем цейтноте. Нужна ли оптимизация ради оптимизации, и нельзя ли во многих случаях обойтись без нее? Чтобы определить, нужна ли оптимизация кода, надо протестировать программу на том компьютере, где она будет работать (или на аналогичном по конфигурации). Если на глаз заметны всевозможные задержки, паузы и ожидания, то оптимизация не помешает. Если эти задержки продолжительны, то оптимизация необходима. Если же программа будет работать на большом количестве компьютеров, то для тестирования следует выбрать самый медленный из них. Если программа распространяется среди большого числа пользователей и заранее неизвестно, какие у них компьютеры, я бы советовал узнать минимальную конфигурацию, которую еще можно купить, и ориентироваться на нее. Если человек пользуется устаревшим компьютером, значит, он морально готов к тому, что некоторое программное обеспечение будет работать медленно. В некоторых случаях оптимизация необходима даже без всяких тестирований. К ним можно отнести написание библиотек и драйверов, программ, выполняющих сложные математические преобразования, например mpeg-кодирование, распознавание текста. Необходимость оптимизации библиотек обусловлена тем, что, помимо кода самой библиотеки, нагрузку на процессор будет создавать и программа, использующая эту библиотеку. В этом смысле драйверы немного похожи на библиотеки. Их функции тоже используются другим кодом. Но стоит заметить, что драйверы, как правило, имеют высокий приоритет в операционной системе, и если код драйвера будет работать медленно, это сильно скажется на быстродействии всей системы. Существует много программ, которые занимаются сложными математическими преобразованиями. Даже при нынешних вычислительных возможностях их работа занимает много времени, и ускорение даже на несколько десятков процентов дает ощутимую экономию времени, особенно если эти программы используются часто.
Повысить быстродействие можно и учитывая особенности процессора. Например, используя дополнительные инструкции из наборов MMX, 3DNow, 3DNowEx, SSE, SSE2, можно значительно ускорить обработку мультимедийных данных, распознавание текста и т. п. Так, обнулить регистр можно следующими способами: - sub ax,ax; Третий вариант — самый быстрый, а два других гораздо медленнее. Конечно, если эта инструкция выполняется единожды, разницы никто не заметит. А если это происходит в цикле, который вызывается миллионы раз, то она вполне ощутима, особенно если подобные изменения сделать не в одном месте. К счастью, многие компиляторы сейчас имеют возможность оптимизации, и такие процессорные нюансы учитываются ими автоматически. Хотя думать «по-человечески» никакие автоматические оптимизаторы не умеют, и не помешает глянуть, какой код они генерируют. В некоторых случаях вообще целесообразно отдельные участки писать на ассемблере, так как код получается компактнее и быстрее, чем сгенерированный компилятором.
|