К. Касперски - Техника оптимизации программ, Эффективное использование памяти (1127752), страница 13
Текст из файла (страница 13)
Сложнее найти компромисс, наилучшим образом "вписываюшийся" во все платформы. Вернее, не "сложнее", а вообше иевоаможио. Глава Г Краткий обзор современных профилировщиков Существует не так уж и много профилировщиков, поэтому особой проблемы выбора у программистов и нет.
Если оптимизация — не ваш основной "хлеб", и эффективность для вас не критична, то вам подойдет практически любой профилировщик, например тот, что уже включен в ваш компилятор. Более сложные профилировщики для вас окажутся лишь обузой, и вы все равно не разглядите заложенный в них потенциал, поскольку это требует глубоких знаний архитектуры процессора и всего компьютера в целом. Если же вы всерьез озабочены производительностью и качеством оптимизации ваших программ и планируете посвятить профилировке значительное время, то кроме !пге! ЧТцпе и АМО Соде Апа!уа вам ничто не поможет. Обратите внимание: не "1пге! ЧТцпе или АМ() Соде Апа!уз!", а именно "!ше! Чтцпе и АМР Соде Апа!узг".
Оба этих профилировщика поддерживают процессоры исключительно "своих" фирм и потому использование лишь одного из них — не позволит оптимизировать программу более чем наполовину. Тем не менее, далеко не все читатели знакомы с этими продуктами и потому автор не может удержаться от соблазна, чтобы хотя бы кратко не описать их основные возможности. ЫЕ! ЧТЦПЕ Бесспорно, что ЧТцпе — это самый мощный из когда-либо сугцествовавших профилировщиков, во всяком случае, на 1ВМ РС (рис.
!.3). Собственно, его и профилировщиком язык то называть не поворачивается. ЧТцпе — это высокоинтеллектуальный инструмент, не только выявляющий "горячие" точки, но еше и дающий вполне конкретные советы по их устранению. В дополнение к этому, ЧТцпе содержит весьма не хилый оптимизатор кода, увеличивающий скорость программ, откомпилированных М!сгозой Ч!вца! С++ б.б„в среднем на 20%, — согласитесь, такая прибавка производительности никогда не бывает лишней! В общем, у профилировщика Чтиве столько достоинств, что писать о них становится даже как-то и не интересно. Просто воспринимайте его как безальтернативный профилировщик и все! А в настоящем обзоре мы лучше поговорим о его недостатках (ну, какая же программа обходится без недостатков?). Основной недостаток Чтиве — его чрезмерная "тяжелость" (дистрибутив шестой версии — последней на момент написания этих строк — "весит" аж !50 Мбайт) и весьма впечатляющая стоимость, помноженная на тот факт, что, даже имея деньги, ЧТцпе не так-то просто приобрести в России.
Прав- Профилировка программ да, !иге! предлагает бесплатную полнофункциональную версию, которая ни чем не уступает коммерческой, но работает всего лишь 30 дней. Скачивать такую "тяжесть" рапи какого-то месяца работы? Извините, но зто несерьезно! (Особенно, если у вас б!а)-цр). Рис. 1.3. Логотип профилировщика Липе Другой минус — УТцпе не очень стабилен в работе и частенько "вешает" систему (например, у меня при попытке активизации некоторых счетчиков производительности он загоняет операционную систему в синий экран смерти с надписью "твоа кэт ьяяя ов ясохь" и хорошо, если при этом еше не "грохает" активный рабочий стол!). Впрочем, если не лезть "куда не надо" и вообще перед выполнением каждого действия думать головой, то ужиться с Л'цпе все-таки можно (а что делать — ведь достойной альтернативы все равно нет).
Еще 7Тцпе получает много нареканий за свою ужасающую сложность. Кажется, что вообще невозможно освоить его и досконально во всем разобраться. Один встроенный "хелп", занимающий свыше трех тысяч страниц формата А4 чего стоит! Попробуйте его прочесть (только прочесть) — даже если вы хорошо владеете английским, то это у вас отнимет, по меньшей мере, целый месяц! Но давайте рассмотрим проблему под другим углом. Вам нужен инструмент или бирюлька? Чем мощнее и гибче инструмент — тем он сложнее по определению.
С моей точки зрения, тгТцпе ничуть не сложнее чем тот же т(яца) С++ или 1)е)рЫ, и проблема заключается не в самой сложности, а в отсутствии литературы по профилировке вообще и данному 50 Глава Г продукту в частности. Поэтому в данную книгу включен короткий самоучитель по ЪТцпе, который вы найдете в разд. "Практический сеанс прот)тилировки с гТипе" этной главы, — надеюсь, это вам поможет. АМ0 Соде Апа!уа$ Профилировщик АМР Сот)е Апа1ум (рис. 1.4) на два порядка уступает своему прямому конкуренту тгТцпе, и я бы ни за что не порекомендовал использовать его в качестве вашего основного профилировщика.
Рис. 1.4. Логотип профилировщика АМ0 Соое Апа!увт Опасаясь быть побитым агрессивными поклонниками АМР, я все же позволю перечислить основные недостатки профилировщика Соде Апа1ум. С) Во-первых, Сойе Апа!уы требует обязательно наличия отладочной информации в профилируемой программе. Программу без отладочной информации он просто откажется загружать! Компиляторы же, в подавляющем своем большинстве, никогда не помещают отладочную информацию в оптимизированные программы, Это объясняется тем, что оптимизация, внося значительные изменения в исходный код, уничтожает прямое соответствие между номерами строк программы и сгенерированными машинными инструкциями. Фактически оптимизированная и неоптимизированная программа — это две разные программы, имеющие различные, пусть и пересекающиеся, подмножества "горячих" точек.
Профилировка неоптимизированного варианта программы принципиально не позволяет найти и устранить все узкие места настоящего приложения. (При отключенной оптимизации узкие места могут быть найдены там, где их и нет.) Л Во-вторых, разрешающая способность диаграмм профилировщика Соде Апа1угд ограничивается строками исходного текста программы, но, увы, не машинными командами (как у тгТцпе). И хотя в принципе Соде Апа!ум позволяет определять время выполнения каждой инструк- Лрофилировка программ ции, он не предоставляет никаких механизмов выделения "горячих" точек на этом уровне.
Всю работу по выявлению "тяжеловесных" машинных команд приходится выполнять самостоятельно, "вручную" просматривая столбик цифр колонки СР! (Сус!е рег 1пгдгпсг(оп — Циклов на Инструкцию). Надо ли говорить, что даже в относительно небольшом участке программы количество машинных команд может достигать нескольких тысяч, и подобный "кустарный" анализ их "температур" может растянуться черт знает на сколько времени.
0 В-третьих, Соде Апа1уы не дает никаких советов по ликвидации выявленных узких мест программы, что не очень-то обрадует программистов- новичков (а таковых, как показывает практика, большинство, и лишь очень немногие из нас поднаторели в оптимизации). П В-четвертых, профилировщик Соде Апа!ум просто неудобен в работе. Неразвитая система контекстных меню, крайне неконфигурабельный и вообще аскетичный интерфейс, отсутствие возможности сохранения "хронологии" профилировки — все это придает ему черты незаконченной утилиты, написанной на скорую руку. Тем не менее, Сог(е Апа!уа весьма компактен (его последняя на данный момент версия 1.!.О занимает всего 16 Мбайт, что на порядок меньше 1ГТипе), стабилен и устойчив в работе и главное — он содержит полноценный эмулятор процессоров Кб-П, Ай!оп (с внешним и интегрированным кэшем), 1)цгоп, включая и их мобильные реализации.
Причем, есть возможность вручную выбирать частоту шины и ядра. Это полезно хотя бы для оценки влияния частоты шины на производительность, что особенно актуально для приложений, интенсивно работающих с основной оперативной памятью (жалко, но УТцпе лишен этой "вкусности"). Наконец, Сос)е Апа!ум содержит толковую справку, сжато и внятно описывающую узкие места процессора. И вЂ” самое приятное — он, в отличие от ЪТппе, абсолютно бесплатен (во всяком случае, пока)! В конечном счете, независимо от степени своих симпатий (антипатий) к этому профилировщику, правила хорошего тона программирования обязывают использовать его для оптимизации ваших приложений под процессор Аг)з!оп, который занимает весьма существенную долю рынка, и этим фактом нельзя пренебрегать! Вй(СГОВОП РГОЛ! Е.ЕХЕ Профилировщик М!сгозой ргой!е.ехе настолько прост и незатейлив, что даже не имеет собственного имени и нам на протяжении всей книги придется называть его по имени исполняемого файла (рис, 1.5).
Ргой!е.ехе — чрезвычайно простой и минимально функциональный профилировщик, попадаюгций в этот обзор лишь потому, что он входит в штат- 52 Глава 1 ную поставку компилятора М!сгозой Ч!впа1 С++ (редакции — Ргогезз!опа! и Епгегрг!зе), а потому достается большинству из нас практически даром, в то время как остальные профилировщики приходится где-то искать, скачивать или покупать. Рис. 1.5. "Визитная карточка" профилировщика М~стовои ртов!е.ехе Пишем собственный профилировщик Какой смыл разрабатывать свой собственный профилировщик, если практически с каждым компилятором уже поставляется готовый? А если возможностей штатного профилировщика окажется недостаточно, то — пожалуйста — к вашим услугам АМВ Сот(е Апа!уз! и !иге! ЧТппе.
К сожалению, штатный профилировщик М!сгозой Ч!зпа! Яцг(!о (как и многие другие подобные ему профилировщики) использует для измерений времени системный таймер, "чувствительности" которого явно не хватает для большинства наших целей. Профилировщик !пге1 ЧТцпе слишком "тяжел" и, кроме того, не бесплатен, а АМО Сот(е Апа(ухг не слишком удобен в работе и нет никаких гарантий, что завтра за него не придется платить. Все это препятствует использованию перечисленных выше профилировщиков в качестве основных инструментов данной книги.
Предлагаемый автором ОоСРБ С!ос!к, собственно, и профилировщиком язык назвать не поворачивается. Он не ищет "горячие" точки, не подсчитывает количество вызовов, более того, вообще не умеет работать с исполняемыми файлами. Г)оСР13 С!ос!г представляет собой более чем скромный набор мак- Профилировка программ 53 росов, предназначенных для непосредственного включения в исходный текст программы и определяющих время выполнения профилируемых фрагментов.