К. Касперски - Техника оптимизации программ, Эффективное использование памяти (1127752), страница 70
Текст из файла (страница 70)
Инструкпия р. геесья работает аналогично р 'е ь, но автоматически присваивает загружаемой строке статус модифицируемой. Если строку действительно планируется модифицировать, это сэкономит от 15 до 25 тактов процессорного времени. Если же вы неуверены — будет ли реально модифицировать строка или нет, лучше загрузите ее как иекяючитеяьяую, т. к. выгрузка людифицируеюой, но реально не молифицированной строки в оперативную память обойдется намного дороже. Несмотря на то, что АМ(э позиционирует команлы предвыборки как аппаратно-независимые, они таковыми яе являются, поскольку количество байт, ЗатружаЕМЫХ ИиетрухцИИМИ ркететсв И ягезя~ сха, Оцрсдсдястея раЗМЕрОМ Кэш кэш-линий процессора, а их длина различна: 32 байта для процессора Кб (1()А СЗ) и 64 байта для А()т)опхРцго(ь Кроме того, соответственно, различны оптимальный шаг и минимальная дистанция предвыборки (подробнее см.
разд. "Планирование дистанции предвыборки" этой главы). В связи с этим становится очень интересным следующее высказывание АМР, почерпнутое из руководства по оптимизации пол процессор Аг)йоп: "ТЬе РКЕГЕТСНЫТА/ТО/Т1/Т2 (пз(гис((о(м (п (Ье ММХ ех(епв!опз аге ргосеззог (тр1етеп(айоп дерепдеп(. 1~(Ье дете!орег пее((з (о тат(ат сотрапЬ(1((у (е!(Ь (Ье 25 тгНюп АМХ(-Кбе -2 ап(( АМП-Кб-П1 ргосеззогз а(сеиду зо(((, иве (Ье 30!(ов! РКЕГЕТСН/Вг(пз(гис((о(гз (пз(еай о3" (Ье гамоиз р~е~е(сй (пз(гис((опз (Ьа( аге пев ММХ ех(епз(опз", что в переводе на русский звучит приблизительно так: "Инструкции Р((ЕРЕТСННТА/ТО/Т!/Т2 из ММХ-расширения аппаратно зависимы.
Если вы, господин разработчик, нуждаетесь в совл(естимости с 25 миллионами уже проданных процессоров АМЛ-Кб е -2 и АМ!)-Кб-П1, вл(еппо инструкций предвыборки нового расширения ММХ пользуйтесь командами РКЕРЕТСН/(4г иэ расширения 30(уои!' Вот вам хорошая демонстрация искусства умолчания! Если уж бросать камень в огород )п(е), то нелишне бы отметить, что, во-первых, и собственные инструкции предвыборки аппаратно зависимы, а, во-вторых, процессорами Реп(шш они не поддерживаются. Так что никаких преимуществ у предвыборки, предложенной фирмой АМР, перед )(пе! нет и использовать ее не рекомендуется. Предвыборка в процессорах Р-П! и Р-4 В процессорах Р-)П и Р-4 программная предвыборка осуществляется следующими инструкциями: рге(еьсьпса, рге(еьсьсс, рге(ьесль(, ргь(ессьс2. Суффикс указывает на тип загружаемых данных, что определяет уровень кэш-иерархии, в которую эти данные будут загружены. Так, "НТА" расшифровывается как "Хоп-ТетрогА( (()а(а1" — невременные данные, т.
е, данные, многократное использование которых не планируется. Соответственно "ТО', "ТГ' и "Т2" обозначает временные данные, использовать которые планируется неоднократно. Какой бы командой предвыборка не осуществлялась, кэш-линейкам, загружаемым из основной памяти, всегда присваивается эксклюзивный статус. При предвыборке линеек из кэша второго уровня их прежний статус сохраняется.
Возможность загрузки кэш-линейки с автоматической установкой статуса модифицируемой в процессорах Репбцш не реализована. Однако ввиду многоступенчатой схемы буферизации записи изменение атрибутов кэшлинеек происходит в основном, а не дополнительнол(, как в Кб~А()()оп, цикле обмена, т. е, без ущерба для производительности.
Причем, в отличие от рге(елось(м, инструкции р е(ессь~са((0(ь1(с2 не приказывают, а рекомендуют (или, если уголно, то просят) осуществить пред- Глава 3 выборку. Процессор же отклоняет просьбу и не осуществляет предвыборку, если: П запрошенные данные уже содержатся в каше соответствующей или ближайшей к процессору иерархии; П сведения о странице, к которой приналлежат загружаемые данные, отсутствуют в ПТЬВ (Юага Тгапв(айоп Ьоок аз!де Впйег — буфере ассоциативной трансляции); (з подсистема памяти процессора занята перемещением данных между Ь1- и Ь2-кэшем; П запрошенные данные принадлежат региону некэшируемой памяти (странице с атрибутами ЫС или ()3%С); ьз данные не могут быть загружены из-за ошибки доступа (при этом исключение не вырпбал!ывается); ~3 инструкция предвыборки предваряется префиксом ьоск (в этом случае генерируется исключение "неверный опкод").
Во всех остальных случаях предвыборка выполняется. Алгоритм ее выполнения аппаратно-зависим и сильно варьируется от одной модели процессора к другой, поэтому, поведение "предвыборных" команд на Р-Ш и Р-4 далее рассматривается по отдельности. Ревбшп-1П. Инструкция р~вевесьцв загружает данные в кэш первого уровня, минуя кэш второго. Действительно, данные, повторное обращение к которым не планируется, целесообразно помещать в кэш-память самой ближайшей к процессору иерархии, не "затирая" содержимое остальных, т. к.
оно может еще пригодиться, а вот однократно используемые данные после их вытеснения из Ь1-кэша из Ь2-каша затребованы уж точно не будут. Инструкция р гвссьео загружает данные в кэш иерархии обоих уровней. Данные, обращение к которым происходит многократно, будучи загруженными в 1.2-кэш, окажутся как нельзя кстати, когда будут вытеснены из 1.!-каша. Инструкции р= гвссле! и р вея~~ьез загружают данные в один лишь кэш второго уровня, не помещая их в кэш первого. Поскольку выгрузка буферов записи происходит в кэш второго уровня, минуя первый, то предвыборку соответствующих линеек в Ь1-кэш осуществлять нецелесообразно.
Вот тутто и!!ригодится ртегеесье1)с2! Размер загружаемых данных равен длине кэш-линеек соответствующей иерархии и составляет 32 байта. Ревйшв-4. Ни одна из команд предвыборки процессора Р-4 не позволяет загружать данные в кэш первого уровня. Все — и временные, и невременные данные помещаются лишь в кэш второго уровня, поскольку создатели процессора захотели поступить именно так. Эффективность такой стратегии Кэш дискуссионна, но, как бы там ни было, время доступа к кэшу второго уровня намного меньше времени доступа к оперативной памяти, поэтому даже такая предвыборка все же значительно лучше, чем ничего.
Возникает вопрос — если все команды предвыборки помещают загружаемые данные в кэш второго уровня, то какая между ними разница? Между командами р гчссьез, р чгяеоьез и р= гчголез — действительно, никакой. А вот команла р~егеесьп~а отличается тем, что помещает загружаемые данные не в любой, а исключительно в первый банк кэша второго уровня (восьми- ассоциативный Ь2-кэш процессора Р-4 содержит восемь таких банков), благодаря чему инструкция р гэеоь еэ никогда не вытесняет более )/8 объема каша второго уровня, Однократно используемые данные, как уже говорилось ранее, действительно, не должны вытеснять многократно используемые данные из верхних кэш-иерархий, но в процессоре Р-4 такое вытеснение все же происходит, и прелотвратить его, увы, нельзя.
Причем, вытесняются отнюдь не те ячейки, к которым дольше всего не было обращений, а линейки фиксированного банка, возможно интенсивно обрабатываемые приложением! Словом, в Р-4 программная предвыборка реализована далеко не лучшим образом — непродуманно, что называется "спустя рукава". (Не иначе как дикая конкурентная спешка дает о себе знать.) Размер загружаемых данных равен длине линеек кэша второго уровня, что составляет (28 байт. Различия в реализации предвыборки на процессорах Р-П! и Р-4 существенно затрудняют оптимизацию приложений, поскольку каждый процессор требует к себе особого, индивидуального подхода и одновременно угодить всем им невозможно. Для достижения максимальной эффективности все критические процедуры рекомендуется реализовывать как минимум в двух вариантах — отдельно для Р-П! и отдельно для Р-4. В противном случае, либо Р-П! будет "зверски тормозить", либо Р-4 не раскроет поллинного потенциала своей производительности.
Учитывая существование процессоров К6~А!(з)оп, вариантов реализапии набирается уже четыре. Не слишком ли много головной боли для программистов? Нет, это вовсе не призыв к отказу от предвыборки — в ряде случаев такой отказ просто невозможен. Это всего лишь незлобное ворчание замученного программиста (А программисты, как и комсомольцы, легкими путями не избалованы.) Сводная характеристика инструкций предвыборки различных процессоров Для облегчения ориентирования среди множества команд предвыборки и особенностей их поведения на различных моделях процессоров все основные характеристики собраны в табл.
З.б. Глава 3 358 Таблица 3.8. Сводная характеристика инструкций предвыборхн различных процессоров Характеристика Инструкция Кб СЗ-Ч1А р-ш Р-4 Ат)т!оп Загружает 32 байта в кэш-уровни всех кэш-иерархий и определяет со- стояние строки как исключительное Загружает 64 байта в кэш-уровни всех кэш-иерархий и оп- ределяет состояние строки как исключи- тельное сгетегсь Загружает 32 байта в кэш-уровни всех кэш-иерархий и определяет со- стояние строки как модифицируемое Загружает 64 байта в кэш-уровни всех кэш-иерархий и оп- ределяет состояние строки как модифи- цируемое ргетегсьч Не поддерживается ргегегсьпга Загружает 64 байта в ).1-кэш Загружает 32 байта в ).1-кэш Загружает 128 байт в первый банк ).2-нэша Загружает 64 байта в11- и12-кэш сгегегсьго Не поддерживается Загружает 32 байта в ) 1- и 1.2- кэш Загружает 128 байт в 1 2-кэш Загружает 64 байта в ) 2-кэш Ргегегсьгт Загружает 32 байта в ) 2-кэш ргегегсьг2 Загружает 64 байта в ) 3-кэш (если есть) Аппаратная предвыборка в микропроцессоре Р-4 Сказать, что АМР опередила !гпе! с поддержкой программной прсдвыборки, — означает сказать лишь половину правды.