Главная » Просмотр файлов » К. Касперски - Техника оптимизации программ, Эффективное использование памяти

К. Касперски - Техника оптимизации программ, Эффективное использование памяти (1127752), страница 7

Файл №1127752 К. Касперски - Техника оптимизации программ, Эффективное использование памяти (К. Касперски - Техника оптимизации программ, Эффективное использование памяти) 7 страницаК. Касперски - Техника оптимизации программ, Эффективное использование памяти (1127752) страница 72019-05-11СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 7)

Хорошо, будем считать, что наиболее "горячая" функция определена и теперь мы горим желанием ее оптимизировать. А для этого недурно бы узнать картину распределения "температуры" внутри самой функции. К сожалению, профилировщик ргали!е,ехе (и другие подобные ему) не сможет ничем нам помочь, поскольку его разрешаюшая способность ограничивается именно функциями.

Но, на наше счастье существуют и более "продвинутые" профилировшики, уверенно различающие отдельные строки и даже машинные команды! К таким профилировШикам в частности относится ((Типе от !п1е1 (листинг 1.2). Давайте запустим его и заглянем внутрь функции ао р о (подробнее о технике работы с ((Топе см. равд. "Практический сеанс профилировки с 1(Типе" этой евавы).

гг Глава 7 Сус1ев Соопе Ьепрегагьле 1пвегесетопз Ььпе 107 еьн, СИСРС Рта [еьр+Оса] 143 11 ' * * * 107 загрузить в регисзр ЕРХ указатель рвнс] асс] епл, СПОРО Рта [еьр-4] 22 11 ***** 107 " слазить ЕРХ с переменной р 107 меч Вттв Рта [евн], 021Ь 33 11 *** * * 107 " по полученному смел]енин записать значение ол21 [']'] Смотрите! В одной строке исходного текста происходит целых три обращения к памяти! Сначала указатель ра 1 загружается в регистр есх, затем он суммируется с переменной р, которая так же расположена в памяти, и лищь затем по рассчитанному смещению в память благополучно записывается константа '.' (021)]), Тем не менее, все равно остается не ясно, почему загрузка указателя р а занимает столько времени? Может быть, кто-то постоянно вытесняет указатель рз ь] из каша, заставляя процессор обращаться к медленной оперативной памяти? Так ведь нет! Программа работает с небольшим количеством переменных, заведомо умещающихся в каше второго уровня.

Удельное время выполнения Если время выполнения некоторой точки программы не постоянно, а варьируется в тех или иных пределах (например, в зависимости от рода обрабатываемых данных), то трактовка результатов профилировки становится неоднозначной, а сам результат — ненадежным. Для более достоверного анализа требуется: а) определить, действительно ли в программе присутствуют подобные )]лаваюи4иен точки и, если да, то: б) определить время их исполнения в лучшем, худшем и среднем случаях. Очень немногие профилировщики могут похвастаться способностью определять удельное время выполнения машинных команд (иначе называемое растактовкой).

К счастью, профилировщик ЪТцпе это умеет! Обратимся к сгенерированному им протоколу динамического анализа (листинг !.4). Быть может, он поможет нам разрешить загадку "неповоротливости" загрузки указателя р о? Профилировка программ Ьуп-Вептгеыегп Сус1ев Ььпе 1пвтгчсз1опв 107 рвиа]р] 13 ************ 107 иову-у] у«84 109 109 109 109 есх, ОИОВР Р18 ]еЬр-28] 109 109 1 * 109 109 ю ОИОВО Ртх ]еЬР-28], есх 109 109 По х -= к4 ПО 110 1 * ебх, ОИОВО Ртв ]еЬР-38] ПО 5 чЬ 110 2 ПО 110 ебх, ЬИОВО Ртв ]еЬр+Ось] 107 ; " загрузить в ретистр ЕОХ указатель рзиб 107 абб ебх, ЬИОВЬ РТР, ]еЬР-4] 107 4 " словить регистр епх с переиенной р 107 воч ВУТЕ РТВ ]ебх], 021Ь 107 1 " записать в *]рзибар] значение ']' иоч еах, ОИОВО РТВ ]еьр-28] " загрузить в регистр ЕАХ передвинув у вЬ1 еах, 08Ь " сдвинуть ЕАХ на 8 позиции влево загрузить в регистр ЕСХ переиеннуа у ог есх, еах " ЕСХ = ЕСХ ] ЕАХ ]Сво = У ] У] записать полученньа2 ревультат в у хюч ебх, ОИОВЛ РТВ ]еЬр-24] " заПзузить в регистр ЕРХ переиеннуо х " вычесть из регистра ЕРХ переиеннуи Х иоч ОИОВО Ртв ]еЬр-24], ебх " записать полученный результат в Х ]0,7.3,80] *** ° *** Глава Г Ну, вот опять, — все команды как команды, а загрузка указателя р а "разлеглась" прямо как объевшаяся свинья, "сожравшая" целых тринадцать тактов, в то время как остальные свободно укладываются в один-два такта, а некоторые и вовсе занимают ноль, ухитряясь завершиться одновременно с предыдущей инструкцией.

За исключением команды, загружающей содержимое переменной г в регистр всх, время выполнения всех остальных команд строго постоянно и не меняется от случая к случаю. Наша же "подопечная" в зависимости от еще не выясненных обстоятельств, может "отъедать" даже восемьдесят тактов, что на время делает ее самой "горячей" точкой данного фрагмента программы. Восемьдесят тактов — это вообще полный беспредел! И пускай среднеарифметическое время ее выполнения составляет всего лишь семь тактов, а минимальное — и вовсе ноль, мы не успокоимся пока не выясним: на что и при каких именно обстоятельствах уходит такое количество тактов? Информация о пенальти Уже сам факт существования "горячей" точки говорит о том, что в программе что-то неправильно.

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

Епге хуже, если "хищения" тактов происходят не систематически, а совершаются при строго определенном стечении каких-то неизвестных нам обстоятельств. Возвратимся к предыдущему вопросу; почему указатель р= д загружается так долго? И при каких именло обстоятельствах загрузка переменной г "подскакивает" со своих обычных семи до восьмидесяти тактов? Судя по всему, процессору что-то не понравилось и он обложил эти две машинные команды "штрафом" (репа!гу), на время притормозив их исполнение.

Можем ли мы узнать, когда и за какой "проступок" это произошло? Не прибегая к полной эмуляции процессора — вряд ли (хотя современные процессоры х86 с некоторыми ограничениями позволяют получить эту информапию и так). Гранды компьютерной индустрии — !иге! и АМР— уже давно выпустили свои профилировщики, содержашие полноценные эмуляторы выпускаемых ими процессоров, позволяющие визуализировать нюансы выполнения каждой машинной инструкции.

Просто шелкните по строке то~ ьва, ьаоьр рта !вьр-зз! и профилировщик стопе выдаст всю имеющуюся у него информацию (листинг 1.5). 25 Профилировка программ Минимальное время декодирования — 1 Весобег М1П1шцш 01осгя = 1 такт Эффективное время декодирования — 8,7 Оесобег йчегаое 01осгя = 8.7 тактов максимальное время декодирования — 86 Оесобег Мах1пзлз 01осця = Вб тактов пегггешегг мгп1пвла с1осгз = О, ; минимальное время завершения — 0 тактов пепггешепг йчегаве с1осйя = 7.3 ; эффективное время завершения — 7,3 такта хег1гелшпг махгпздп 01оскя - 80 ; максимальное время завершения — 80 тактов Всего времени исполнения — 80 тактов Тоса1 СУс1ея = 80 )ОО, ббт) М1сго СР5 бог ГЬ15 1п5ггцсс1оп = 1 Ког.-во микроогераций в инструкции — 1 тье гпяггцсггоп ьаб по на1г 0 сус1ея тот 1г'з яоцгсея го ье геабу С'Инструкция ждала 0 тактов гока подготавливагмсь ее операнды, т.

е. попросту она их не жцала совсем") ХС 3й155 Тпе гпясгцссгоп нав пес 1п ГЬе гпясгпссгоп сасце, яо ГЬе ргосеяяог 1оабя ГЬе ясгцсг1оп Тгош ГЬе 12 сасЬе ог шаги шелогу. )"Инструкция отсутствовала в кодовом кэше, и процессор был вынукцен загружать ее из кэша второго уровня или основной оперативной памяти" ) Такое случалось 1 раз Оссцгапсея = 1 Оушаш1с РепаЗ.Пу: 121пзцг ш155 тье 1пябгцсг1оп ная пог гп гье 12 сасье, яо гье ргосеяяог 1оабя гье гпяггцсс1оп гхош ша1п шепоту. )"инструкция отсутствовала в кэше второго уровня, и процессор был вьзтукден загружать ее из основной оперативной памяти" ) Такое случалось 1 раз Оссцгапсея = 1 Пупазпс Репв1зу: Вцогв асЫг цп)гповп тье 1оаб 1пяцгцсгфоп зга115 бце го гье аббгеяя са1сц1апгоп от цье ргетфоця япоге 1П5ГГЦСГ1ОП. )"Загружаювшя инструкция простаивала по той причине, что адрес источника рассчиты- вался предыдупей инструкцией записи" ) Такое случалось 10 раз Осспгапсея = 10 Глава г Так, кажется, наше расследование превращается в самый настоящий детектив, еще более запутанный, чем у Агаты Кристи.

Если приложить к полученному результату даже самый скромный арифметический аппарат, получится полная чепуха и полное расхождение "дебита с кредитом". Судите сами. Полное время выполнения инструкции — 80 тактов, причем, известно, что она выполнялась 11 раз (см. В листинге 1.3 колонку соапь огчста профилировщика).

А наихудшее время выполнения инструкции составило 80 тактов! А наихудшее время декодирования и вовсе — 8б! То есть худшее время декодирования инструкции превышает обгиее время ее исполнения и при этом в десяти итерациях она еще ухитряется простаивагь как минимум один такт за каждую итерацию по причине занятости блока расчета адресов. Да, тут есть от чего "поехать крышей"! Причина такого несоответствия заключаегся в относительности самого понятия времени. Вы думаете время относительно только у Эйнштейна? Отнюдь! В конвейерных процессорах (в частности процессорах Реп!!цпз и АМО Кб/Арв!оп) понятие "времени выполнения инструкции" вообще не существует в принципе (слс раэд. "Конвейериэт<ня или пропускная спосогэность ив латентность" этой главы).

В силу того, что несколько инструкций могу~ выполняться параллельно, простое алгебраическое суммирование времени их исполнения даст значительно больший результат, нежели исполнение занимает в действительности. Ладно, оставим разборки с относигельносгью до более поздних времен, а пока обратим внимание на тот факт, что в силу отсутствия нашей инструкции в каше (она как раз находится на границе двух кзш-линеек) и вытекаюгцей отсюда необходимости загружать ее из основной памяти, в первой итерации цикла она выполняется значительно медленнее, чем во всех последующих.

Отсюда, собственно, и берутся зти пресловутые восемьдесят тактов. При большом количестве итераций (а при "живом" исполнении программы оно и впрямь велико) временем начальной загрузки можно и пренебречь, но... Стоп! Ведь профилировщик исполнил тело данного цикла всего 11 раз, в результате чего среднее время выполнения этой инструкции составило 7,3 тактов, что совершенно не соответствует реальной действительности! Ой! Оказывается, зто вовсе не "горячая" точка! И тут совершенного нечего оптимизировать. Если мы увеличим количество прогонов профилировщика хотя бы в четыре раза, среднее время выполнения нашей инструкции понизится до 1,8 тактов и она окажется одним из самых "холодных" мест программы! Точнее — зто вообще абсолютный ноль, поскольку эффективное время исполнения данной инструкции — ноль тактов (т.

е. она завершаегся одновременно с предыдущей машинной командой). Словом, мы "промахнулись" по полной программе. Профилировка программ 27 Отсюда правило: прежде чем приступать к оптимизации, убедитесь, что количество прогонов программы достаточно велико для маскировки накладных расходов первоначальной загрузки. Короткое лирическое отступление на тему: почему же все так произошло. По умолчанию вгТцпе прогоняет профилируемый фрагмент 1000 раз. Много? Не спешите с ответом. Наш хитрый цикл устроен так, что его тело получает управление лишь каждые - ~ = Ох59 итераций (см. листинг 1.2). Таким образом, за все время анализа тело цикла булет исполнено всего лишь 1000/39 = 11 раз! Причем, ни в коем случае нельзя сказать, что это надуманный пример.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6384
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее