Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задания к практическим работам / _пример_оформления.doc
Скачиваний:
25
Добавлен:
20.06.2014
Размер:
291.33 Кб
Скачать

Tlb и кэш-память

В самом начале статьи мы упомянули, что наибольшие отличия процессоров поколения Nehalem от предшественников следует искать не в глубине его ядер, а в интерфейсах и общей структуре. Изменения, произошедшие с кэш-памятью и TLB, полностью это подтверждают. Выглядят они куда более значительными, чем мелкие модификации во внутренних блоках процессорного ядра. В первую очередь, инженеры Intel существенно увеличили размер TLB (Translation-Lookaside Buffer). Напомним, TLB – это высокоскоростной буфер, который используется для установления соответствия между виртуальными и физическими адресами страниц. Увеличение размера TLB, таким образом, позволяет повысить число страниц памяти, которые могут быть одновременно использованы без дополнительных дорогостоящих преобразований по таблицам трансляции адресов, находящимся в обычной памяти. Более того, TLB в процессорах Nehalem стал двухуровневым. Фактически, к унаследованному от процессоров Core 2 TLB Intel просто добавила ещё один буфер второго уровня. При этом новый L2 TLB может похвастать не только высокой вместительностью, позволяющей сохранять до 512 записей, но и сравнительно низкой латентностью. Ещё одна особенность L2 TLB заключается в том, что он унифицирован и способен транслировать адреса страниц любого размера. Очевидно, что изменения в системе TLB сделаны в первую очередь с прицелом на серверные приложения, активно оперирующие большими объёмами памяти. Однако и в «настольных» задачах увеличенное число вхождений TLB может оказать положительное влияние на быстродействие подсистемы памяти. Тем более, что при активации технологии SMT TLB обоих уровней динамически разделяется между виртуальными ядрами, так что возможность сохранять в этом буфере дополнительные записи явно не будет лишней. Ещё одно нововведение, способное поднять скорость работы с подсистемой памяти в процессорах с микроархитектурой Nehalem, заключается в значительном ускорении работы инструкций, оперирующих невыровненными по строкам кэш-памяти данными. Первые робкие шаги в этом направлении были сделаны ещё в ядрах Penryn, но именно в Nehalem инженеры добились превосходного результата. Теперь SSE-инструкции, использующие в качество операндов выровненные 16-байтовые последовательности данных, работают с одинаковой скоростью, вне зависимости от того, какой вариант команды используется: для выровненных или для невыровненных данных. Поскольку большинство компиляторов транслирует код с использованием «невыровненных» версий инструкций, описанное усовершенствование способно положительно повлиять на скорость работы многих приложений, оперирующих медиа-контентом. Однако ускорение работы с невыровненными данными и добавление TLB второго уровня – мелочи по сравнению со сделанной в процессорах Nehalem коренной переделкой системы кэш-памяти. От старой двухуровневой структуры кэш-памяти с общим на каждые два ядра L2 кэшем в новых процессорах остался только кэш первого уровня суммарным объёмом 64 кбайта, который делится на две равные части на области для хранения инструкций и данных. При этом, хотя строение L1 кэша в Nehalem и осталась старым, его латентность по сравнению с L1 кэшем Core 2 увеличилась на 1 такт. Произошло это в связи с внедрением в новых процессорах более агрессивных энергосберегающих режимов и, по мнению Intel, незначительно сказывается на итоговой производительности. Использование же разделяемого L2 кэша, который показал себя очень эффективным решением в двухъядерных процессорах с микроархитектурой Core, оказалось весьма проблематичным при увеличении количества ядер. Поэтому в микроархитектуре Nehalem, предполагающей наличие в процессоре до 8 ядер, кэш второго уровня не является разделяемым. Каждое из ядер получило свой собственный L2 кэш со сравнительно небольшим объёмом 256 кбайт. Зато благодаря своей ограниченной ёмкости, этот кэш может похвастать в полтора раза более низкой латентностью, чем L2 кэш процессоров Core 2. Это отчасти компенсирует возросшую латентность L1 кэша в Nehalem. К двум уровням кэша в Nehalem добавился и L3 кэш, который объединяет ядра между собой и является разделяемым. В результате, L2 кэш выступает буфером при обращениях процессорных ядер в разделяемую кэш-память, имеющую достаточно солидный объём. Так, например, четырёхъядерные процессоры с новой микроархитектурой, ориентированные на настольные компьютеры, будут использовать L3 кэш объёмом 8 Мбайт.

Рис. 10. Структура Кеш-памяти

Использование трёхуровневой кэш-памяти невольно вызывает ассоциации с процессорами AMD с микроархитектурой K10, однако кэш-память Nehalem устроена всё же совершенно по-другому. Во-первых, L3 кэш в Nehalem работает на более высокой частоте, которая для первых представителей этого семейства будет установлена равной 2,66 ГГц. Во-вторых, Intel не стал отказываться от инклюзивности кэш-памяти, то есть от дублирования данных, хранящихся в кэшах первого и второго уровней, в L3 кэше. И это имеет вполне рациональное объяснение. Инклюзивный разделяемый кэш способен обеспечить в многоядерных процессорах более высокую скорость работы подсистемы памяти за счёт избыточного дублирования содержимого L1 и L2 кэшей всех ядер. В частности, при отсутствии в нём запрашиваемых одним из ядер данных, нет необходимости искать их в индивидуальных кэшах других ядер. А благодаря тому, что каждая строка L3 кэша снабжена дополнительными флагами, указывающими владельцев этих данных, не вызывает затруднений и процедура обратного изменения содержимого строки кэша. Так, если какое-то ядро модифицирует данные в L3 кэше, изначально принадлежащие другому (или другим) ядрам, то в этом случае обновляется содержимое L1 и L2 кэшей и этих ядер. Таким путём решается и проблема с избыточным межъядерным трафиком, направленным на поддержание когерентности инклюзивной кэш-памяти. Измерения латентности кэш-памяти процессора Nehalem позволяют говорить о высокой эффективности предложенной схемы.

Таблица 1. Тестирование латентности кешей

L2 кэш процессора Nehalem действительно обеспечивает крайне невысокую латентность. Кэш третьего уровня также способен показать очень хорошее время доступа, несмотря на свой относительно большой размер. К слову, вчетверо меньший эксклюзивный кэш третьего уровня процессоров AMD Phenom X4 по данным той же тестовой утилиты Sandra 2009 показывает примерно такую же латентность – 54 цикла. Однако ввиду более низких тактовых частот процессоров AMD, время доступа L3 кэша у процессоров Phenom оказывается ощутимо больше, чем у Nehalem. Несмотря на кардинальный пересмотр системы кэширования, инженеры Intel не стали менять алгоритмы работы блоков предварительной выборки, они в Nehalem целиком позаимствованы из Core 2. Это означает, что упреждающая выборка данных и инструкций производится только в кэш-память первого и второго уровня. Тем не менее, даже при использовании старых алгоритмов, результативность работы блоков предварительной выборки улучшилась. Объясняется это тем, что L2 кэш в Nehalem индивидуален для каждого ядра, а при такой организации кэш-памяти гораздо легче отслеживать шаблоны в обращениях. Кроме того, благодаря появлению L3 кэша работа блока предварительной выборки не наносит существенного ущерба пропускной способности шины памяти. Именно поэтому в серверных вариантах процессоров Nehalem блоки предварительной выборки больше не будут отключаться, как это делалось в процессорах Xeon, основанных на микроархитектуре Core.

Соседние файлы в папке Задания к практическим работам