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

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

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

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

3.48. Зависимость относительной скорости копирования от адреса начала блока на процессоре Реп11цгп-и 733/1333/100. За 100% принято время копирования блоков памяти, начинающихся с адреса, кратного Ох10 Глава 3 Збб Смотрите — большие блоки памяти (т. е. такие, размер которых значительно превосходит кэш второго уровня), начинающиеся с адресов, кратных четырем, обрабатываются практически в полтора раза быстрее, а блоки умеренного размера (целиком уме~дающиеся в каше второго уровня) — практически втрое быстрее, чем блоки, начинающиеся с адресов, не кратных четырем! И неудивительно — отсутствие выравнивания приводит к тому, что в каждом октете скопированных двойных слов неизбежно будет присутствовать двойное слово, начинающееся в одной кэш-линейке, а заканчивающееся в другой.

Процессоры Репгшщ "шибко" не любят такие "неправильные" слова и взыскивают за их обработку штрафные такты задержки. Поэтому при интенсивном копировании строк (структур, обьектов, массивов) желательно добиться, чтобы они располагались в памяти по адресам, кратным четырем (подробнее об этом см. разд, "Выравнивание данных" этой главы). Однако в некоторых случаях выполнить выравнивание принципиально невозможно. Это бывает в частности тогда, когда адрес копируемого объекта поступает извне, например, возвращается операционной системой. Впрочем, это не повод для расстройства, т. к., увеличив начальный адрес до величины, кратной четырем, мы избежим падения производительности.

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

е. от больших адресов к меньшим), то по завершению копирования начало блока окажется в каше и может быть моментально использовано! Но не спешите "набрасываться" на инструкцию зтп1ьвр ночев, копирующую двойные слова в обратном направлении! Подсистема памяти )ВМ РС оптимизирована именно под прямое копирование, а на обратном теряется до десяти-пятнадцати процентов произволительности. Поэтому приходится изощряться, обрабатывая блок справа налево небольшими "кусочками", копируя каждый из них в прямом направлении. Это можно сделать, например, следующим образом (листинг 3.34): ыу матеру~слав *Сап, паап *вес, 1пп 1еп> уг Размер копируемых "кусочков" ьпс а=атвр щах; Кэш чтите (1еп( // Копировать пака не скопируем все (1еп < а( а=1еп( // Воли оставшийся хвост меньше // размера копируемого "кусочка", О коррекоируем размер последнего бвв — -а: вгс — -а( // Уменьшаем указатели на О требуеьгуш величину шешсру(бвп,вгс,ам // копируем очередной кусочек 1еп=-а: // Уменьшаел~ длину оставшегося блока Единственная проблема — это правильно выбрать размер копируемых кусочков.

С одной стороны: чем кусочки больше — тем лучше, т. к. это уменьшает накладные расходы на "обвязочный" код. А с другой — слишком большой блок может попросту не поместиться в кэш первого уровня (на процессоре Р-4 его всего лишь 8 Кбайт). Учитывая, что в кэше находится и копируемый, и уже скопированный блоки, размер кусочков не должен превышать половины размера самого маленького из кэшей, т. е. 4 Кбайт. Но эта стратегия булет не самой оптимальной для Р-!Н, а для Р-П (Се1егоп) и вовсе окажется проигрышной, т, к. накладные расходы на выполнение обвязочного кода пересилят выигрыш от попадания в кэш. По мнению автора, память выгоднее всего копировать 64 — 128-килобайтовыми кусками.

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

Вот, пожалуй, и все способы оптимизации копирования памяти на млалших моделях процессоров Ре(пшш. Гораздо больше существует популярных способов "пессимизации" копирования памяти. В первую очередь хотелось бы обратить внимание на широко распространенное заблуждение, связанное с машинной инструкцией ночзс. Эта ММХ-команда, которая оперирует 64- битовыми (8-байтовыми) операндами, что делает ее очень привлекательной в глазах множества программистов, наивно полагаюших: чем больше размер операнда, тем быстрее происходит его копирование. На самом же деле это не совсем так.

При обработке больших блоков памяти (т. е. таких, размер Глава 3 звв которых намного превышает размер Б2-каша) на быстрых процессорах (в частности Р-П1) вы получите не худшую производительность, а на Р-П скорость даже снизиться от 1,3 до 1,5 раз! Действительно, производительность инструкции моузо в первую очередь определяется не быстродействием процессора, а временем доступа к памяти, поэтому при копировании больших блоков памяти инструкцией моузс с учетом "обвязочного" кода быстрее никак не будет.

Обработка блоков памяти умеренного размера (целиком умещающихся в Б2- кэше) посредством команды моузо на процессоре Р-П на !0%, а на Р-П1 даже на 40% обгоняет инструкцию моузс! Но при дальнейшем уменьшении размера копируемых блоков ситуация меняется на диаметрально противоположную. Блоки, не "вылезающие" за пределы Б1-каша, с помошью команды ноузо на процессоре Р-П копируются на 40 — 80% медленнее (накладные расходы на обвязочный код дают о себе знать!), а на Р-1П лишь на несколько процентов быстрее, чем копируемые инструкцией ноузо (рис. 3.49). Рис. 3.49. Результаты тестирования функции копирования памяти учетверенными словами на блоках различного размера на процессорах Се!егоп-ЗООА/66/66 и Реп1егп-!П 7333/133/100.

Скорость копирования измеряется в относительных единицах в сравнении со штатной функцией иеисру, производительность которой принята за 100ЬЬ Кэш Вй Оезепрйеп ОМА Тгапз1ег Туре, Туеве Ьдя гвргеяепг !Ьв одгесдоп о1 !Ье ОМА 1гапя1ег. ИГЬеп гле слаппе! !я ргодгагптеб 1ог саясабе тобе, (Ь!!я(7гб) = "11") !Ье !гапя1ег гуре а !гге!екап1 3;2 00 = Нег!(у-ГЧо Ю ог гпепюгу я!гоЬея депега!еб О! = ~йг!!е-Оа!а !гапя!еггеб !гого !Ье РО бегйсея ьо гпеюогу !О = !!еаб-Оа!а !гапя!еггеб !гога гпееогу !о гйе !!О бетйсе 11 = !деда! Таким образом, функцию копирования, базирующуюся на команде нехао, в качестве основной функции переноса памяти использовать нерационально.

Она оправдает себя лишь при многократной обработке блоков порядка 64— 128 Кбайт на момент копирования уже находящихся в кэше. В противном случае будет намного лучше воспользоваться штатной функцией еьесрг. (К тому же следует учитывать, что команда ночяо отсутствует на ранних процессорах Репгшгп без ММХ, парк которых до сих пор еще достаточно широк, так стоит ли отсекать большое количество потенциальных пользователей ради незначительного увеличения скорости работы вашей программы?) Другое распространенное заблуждение гласит, что команда молви вовсе не предел производительности и якобы вручную можно создать супер- оптимизированный цикл, выполняющийся намного быстрее ее.

Действительно, линейки кзш-памяти первого уровня состоят из восьми независимых банков, которые могут обрабатываться параллельно (в частности, процессоры Р-11 способны за олин такт обрабатывать два таких банка) и в правильно организованном цикле за вычетом обвязочного кода теоретически возможно копировать по 8 байт за каждые два такта. Инструкция лег нааяп за зто же время копирует только 4 байта. На практике, однако, двукратного выигрыша достичь не удается, поскольку "львиную' долю прироста производительности "съелает" обвязочный код. Во всяком случае, автору так и не удалось создать цикл, который бы на всех молелях процессоров обгонял инструкцию ляг нохзс хотя бы на десяток- другой процентов. В лучшем случае код выполнялся ие хуже, а зачастую в полтора-два раза медленнее штатной функции рт! А может быть стоит обратиться к контроллеру РМА (про то, что современные операционные системы прикладным приложениям прав доступа к контроллеру просто не дадут, мы скромно промолчим)? Легенда об использовании ВМА для копирования памяти давно уже будоражит умы программистов, но на самом деле она безосновательна.

Тип передачи память > память ни в оригинальной 1ВМ АТ, ни в современных клонах оной — не реализовав. Возьмем, например, описание чипсета 1и!е( 82801 и откроем его на странице 8-25, где содержится описание режимов передачи. Там, среди прочей полезной информации, мы найдем следующее: Глава 3 390 О невозможности использования РМА лля копирования памяти прямо ничего не говорится, но нетрудно догалаться, что за запрешенной комбинацией "1Г' скрыт не кто иной, как несушествуюший тип передачи намять > намять. А раз его нет, то и говорить не о чем! Оптимизация копирования в старших моделях процессоров Рептшш.

Команды управления кэшированием, впервые появившиеся в процессоре Р-1П, это, выражаясь словами известного юмориста, "не только ценный мех", но и превосходное средство ускорить копирование компактных блоков памяти вчетверо, а умеренных и больших — по крайней мере втрое! Этот замечательный результат достигается, как ни странно, использованием всего двух команд: инструкции лредвыборки данных в кэш первого (второго на Р-4) уровня — рхееьььь ьь и инструкции некэшируемой записи восынеричных (!) сгов — ьрь, выгружающей 128-битовые операнды из 81МР-регистра в память. Копируемые данные должны быть выровнены по 16-битовой границе, в противном случае процессор сгенврирует исключение.

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

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

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

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