К. Касперски - Техника оптимизации программ, Эффективное использование памяти (1127752), страница 3
Текст из файла (страница 3)
Вся информация уникальна, а многая даже засекречена. Поэтому книга будет читаться как самый настоящий детектив про разведчиков. Предполагаемый срок выхода: на настоящий момент пока не известен. Краткая история создания данной книги Настоящая книга задумывалась отнюдь не ради коммерческого успеха (который вообще сомнителен — ну много ли людей сегодня занимаются оптимизацией?), а писалась исключительно ради собственного удовольствия (как говорится: 02!ЕЕ Р(2ЕС! М25СЕЯЕ (лат.) — соединять приятное с полезными). История ее создания вкратце такова: после сдачи моих первых шести книг, обеспечивших мне более или менее сносное существование, у меня появилась возможность неторопливо, без лишней спешки заняться теми исследованиями, которые меня уже давно волновали.
Вплотную столкнувшись с необходимостью оптимизации еше во времена древних и ныне скоропостижно почивших 8-рязрядных машин, я скорее по привычке, чем по насущной необходимости, сохранил преданность эффективному коду до настоящих дней. А потому, не без оснований считал, что "собаку съел" на оптимизации и искренне надеялся, что писать на эту тему Предисловие мне будет очень легко. Вот только бы выяснить несколько "темных" мест и объяснить некоторые странности поведения процессора, до анализа которых раньше просто не доходили руки... Но уже к концу первого месяца своих изысканий я понял, что если и "съел собаку", то конечно "древнюю как мамонт", ибо за последние несколько лет техника оптимизации кардинально поменялась, а сами процессоры так усложнились, что особенности их поведения, судя по всему, перестали понимать и сами отцы-разработчики.
В общем, вместо трех изначально запланированных на книгу месяцев, работа над ней растянулась более чем на год, причем за это время не было выполнено и десятой части запланированного проекта. Поверьте! Я вовсе не мячик гонял, а каждый день проводил за компьютером как минимум по 12 — 15 часов, благодаря чему ббльшая часть прежде темных мест "вышла" из мрака на свет божий и теперь ярко освещена! Быть может, это и не очень производительный труд (и вообще крайне низкий выход в пересчете на символ в час), тем не менее, проделанной рабой в целом я остался доволен. И не удивительно! Изучать "железки" — зто до жути интересно. Перед вами — черный ящик, и все что вы можете, так это планировать и осуществлять различные эксперименты, пытаясь описать их результаты некоторой математической моделью, проверяя и уточняя ее последующими экспериментами.
И вот так.из черного ящика постепенно начинают проступать его внутренности, и вы уже буквально "чувствуете" как он работает и "дышит"! А какое вселенское удовлетворение наступает, когда бессмысленная и совершенно нелогичная паутина результатов всевозможных замеров наконец-то ложится в стройную картину! Чувство, охватывающее вас при этом, можно сравнить разве что с оргазмом! Следует отметить, что рисунки в книге, к сожалению, черно-белые, но читатель имеет возможность просмотреть все рисунки в цвете на прилагаемом компактдиске.
Рисунки на диске разделены по главам и находятся в каталоге р1с. Там же на диске читатель найдет все необходимые программы н полные исходные коды большинства листингов, помещенных в книге. Соглашения об условных обозначениях и наименованиях расшифровку всех непонятных терминов, если таковые встретятся вам по ходу чтения книги, можно узнать в глоссарии. Но поскольку в глоссарий по обыкновению все равно практически никто не заглядывает, ниже перечис- Г7редисловив лены обозначения, которые с наибольшей степенью вероятности могут вызвать затруднение. !3 Под Рб-процессорами понимаются все процессоры с ядром Рб, построенные по архитектуре Репбшп Рго. К ним принадлежат: сам Реп!!пш Рго, Репгшт-П и Репйшп-!П, а так же процессоры семейства Се!егоп.
!3 Процессоры серии Репбцт здесь сокрашаются до первой буквы "Р" и стоящим за ней суффиксом, уточняюшим какая именно модель имеется в виду. Например, "Р Рго" обозначает "Реп!!цгп Рго", а "Р-4" — "Реп!!огп-4". Кстати, обратите особое внимание, что индексы "1Г и "ПГ записываются римскими цифрами, а "4" — арабскими. Так хочет фирма 1пге! (она уже однажды сделала мне замечание по этому поводу), поэтому не будем ей противоречить.
В конце концов, хозяин — барин. г3 Под "+" в обозначении процессоров, по общепринятому соглашению, понимаются означенная и последуюшие модели процессоров. Например, "Р-1П+" обозначает "Репгшт-П! и Реп!!ит-4". С) Под "МБ УС' или даже просто "УС' подразумевается М!сгозой азов! С++ 6.0, а под "ВС' — Вот!апд С++ 5.5. Соответственно, "%РР" обозначает "%АТСОМ С-~-+ 10.0". П Кабалистическое выражение наподобие "Р-111 733/133/100/1815ЕР" расшифровывается так: "процессор 1пге! Репбцгп-П1 с тактовой частотой 773 МГц, частотой системной шины 133 МГц и частотой памяти 100 МГц, установленный в материнскую плату, базируюшуюся на чипсете 1пге! 815 ЕР".
Соответственно, по аналогии, "АМ!3 Аг!т!оп 1050/100/100/Ч1А КТ 133" обозначает: "процессор АМР Агп!оп с тактовой частотой 1050 МГц, частотой системной шины !00 МГц и частотой работы памяти ГОО МГц, уставленный в материнскую плату, базируюшуюся на чипсете Ч1А КТ !33". С) Да, чуть не забыл сказать. "Сверхоперативная память" — это русский эквивалент американского термина "сас!зе гпепюгу". Здесь он будет использоваться вовсе не из-за самостийной гордости, а просто для того, чтобы избежать излишней тавтологии (частого повторения одних и тех же слов). Введение Рго е$ созга' целесообразности оптимизации Это в наше-то время говорить об оптимизации программ? Бросьте! Не лучше ли сосредоточиться на изучении классов МГС или технологии .)ч)ЕТ? Современные компьютеры так мошны, что даже %)пдоч»з ХР оказывается бессильна затормозить их! Нынешние программисты к оптимизации относятся более чем скептически.
Позволю себе привести несколько типичных высказываний: П "...я применяю относительно медленный и жадный до памяти язык Рег1, поскольку на нем я фантастически продуктивен. В наше время быстрых процессоров и огромной памяти эффективность — другой зверь. Болыиую часть времени я ограничен вводом/выводом и не могу читать данные с диска ьли из сети так быопро, чтобы нагрузить процессор. Раньше, когда контекст был другим, я писал очень быстрые и маленькие программы на С.
Это было важно. Теперь же важнее быстро писать, поскольку оптимизация может привести к столь малому росту быстродействия, что он просто не заметен", — говорит КоЬегг %Иге; !:! "...а стоит ли тратить усилия на оптимизацию и чего этим можно достичь? Дело в том, что чем сильнее вы будете адаптировать вашу программу к заданной архитектуре, тем, с одной стороны, вы достигнете лучших результатов, а, с другой стороны, ваша программа не будет хорошо работать на других платформах. Более того, «глубокая» оптимизация может потребовать значительных усилий. Все это требует от пользователя точного понимания чего он хочет добиться и какой ценой", — пишет в своей книге "Оптимизация программ под архитектуру СОХАХ С" М. П.
Крутиков; гз "Честно говоря, я сам большой любитель «вылиэывания» кода с целью минимизации используемой памяти и повышения быстродействия программ. Наверное, это рудименты времен работы на ЭВМ с оперативной палгятью в 32 Кбайт. С тем болыией уверенностью я отношу «эффективность» лишь на четвертое место в критериях качества программ", — признается Алексей Малинин — автор цикла статей по программированию на %ьца! Вагйс в журнале "Компьютер Пресс". ' Рго ег сопгга (латд — за и против.
— Ред. Введение С приведенными выше тезисами, действительно, невозможно не согласиться. Тем не менее, не стоит бросаться и в другую крайность. Начертавший на своем знамени лозунг "на эффективность — плевать" добьется только того, что плевать (причем дружно) станут не в эффективность, а в него самого. Не стоит переоценивать аппаратные мощности! И сегодня существуют задачи, которым не хватает производительности даже самых современных процессоров. Взять хотя бы моделирование различных физических процессов реального мира, обработку видео-, аудио- и графических изображений, распознавание текста...
Да что угодно, вплоть до элементарного сжатия данных архиватором а 1а Зцрег %1п Х1р! Да, мощности процессоров растут, но ведь параллельно с этим растут и требования к ним. Если раньше считалось нормальным, поставив программу на выполнение, уйти пить пиво, то сегодняшний пользователь хочет, чтобы все операции выполнялись мгновенно, ну если и не мгновенно, то с задержкой, не превышающей нескольких минут. Не стоят на месте и объемы обрабатываемых данных. Признайтесь, доводилось ли вам находить на своем диске файл размером в сотню-другую мегабайт? А ведь буквально вчера емкость целого жесткого диска была на порядок меньше! Цель — определяет средства.
Вот из этого, на протяжении всей книги, мы и будем исходить. Ко всем оптимизирующим алгоритмам будут предъявляться следующие жесткие требования: О оптимизация должна быть максимально машинио-независимой и переноснмой на другие платформы (операционные системы) без дополнительных затрат н существенных потерь эффективности. То есть никаких ассемблерных вставок! Мы должны оставаться исключительно в рамках целевого языка, причем, желательно использовать только стандартные средства и любой ценой избегать специфичных расширений, имеющихся только в одной конкретной версии компилятора; С1 оптимизация не должна увеличивать трудоемкость разработки (в т. ч.
и тестирования) приложения более чем на 10% †1, а в идеале, все критические алгоритмы желательно реализовать в виде отдельной библиотеки, использование которой не увеличивает трудоемкости разработки вообще; (з оптимизирующий алгоритм должен давать выигрыш не менее чем на 20%— 25% в скорости выполнения. Приемы оптимизации, дающие выигрыш менее 20%, в настоящей книге не рассматриваются вообще, т. к. в данном случае "овчинка выделки не стоит".