Иерархии памяти на примере Nehalem и Opteron

Размер блока играет важную роль в поддержании целостности данных кэш-памяти. Возьмем, к примеру, отслеживание кэш-памяти с размером блока, составляющим восемь слов, где одно из слов попеременно записывается и читается двумя процессорами. Большинство протоколов производят между процессорами обмены целыми блоками, увеличивая таким образом пропускную способность, необходимую для поддержания целостности данных.

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

Когда две несвязанные друг с другом переменные расположены в одном и том же блоке кэш-памяги и между процессорами происходит обмен целым блоком, даже если процессоры обращаются к разным переменным.

Мы делаем следующие два допущения. Во-первых, запись не завершается, пока все процессоры увидят эффект от этой операции записи. Во-вторых, процессор не изменяет порядок любой операции записи относительно любого другого обращения к памяти. Эти два условия означают, что если процессор ведет запись по адресу X, за которым следует адрес Y, любой процессор, который видит новое значение по адресу Y, должен также видеть новое значение по адресу X. Эти ограничения позволяют процессору менять порядок чтения, но заставляют процессор завершить запись порядке выполнения программы.

Реальное оборудование: иерархии памяти AMD Opteron Х4 (Barcelona) и Intel Nehalem

В данном разделе будет рассмотрена иерархия памяти в двух современных микропроцессорах: the AMD Opteron Х4 (Barcelona) и Intel Nehalem. У обоих кристаллов имеется вторичная и третичная кэш-память на главном кристалле процессора. Такая интеграция сокращает время доступа к кэш-памяти низшего уровня, а также сокращает количество выводов на кристалле, поскольку отпадает необходимость в шине к внешней вторичной кэш-памяти. На обоих кристаллах расположены контроллеры памяти, что сокращает латентность обращения к оперативной памяти.

Иерархии памяти Nehalem и Opteron

Сводка размеров адресов и буферов TLB двух процессоров. Следует отметить, что в AMD Opteron Х4 (Barcelona) имеется четыре буфера TLB и что виртуальные и физические адреса не совпадают с размером слова. В Х4 задействуется только 48 из потенциально возможных 64 разрядов его виртуального пространства, и 48 из потенциально возможных 64 разрядов его физического адресного пространства. В Nehalem имеется три буфера TLB, виртуальный адрес состоит из 48 разрядов, а физический адрес – из 44 разрядов.

Каждый процессор в Х4 располагает СВОИМИ собственными устройствами кэш-памяти уровня L1 для инструкций и данных, каждое из которых имеет размер 64 Кбайт, и свое собственное устройство кэш-памяти L2 размером 512 Кбайт. Четыре процессора совместно используют единую кэш память уровня L3 размером 2 Мбайт. У кристалла Nehalem сходная структура, где у каждого процессора имеются свои собственные устройства кэш-памяти уровня L1 для инструкций и данных, каждое размером 32 Кбайт, и свое собственное устройство кэш-памяти уровня 1.2 размером 256 Кбайт, а четыре процессора совместно используют единую кэш-память уровня L3 размером 8 Мбайт.

Аппаратное обеспечение для преобразования адреса и TLB в Intel Nehalem и AMD Opteron Х4. Размер слова устанавливает максимальный размер виртуального адреса, но процессору не нужно использовать все разряды. Оба процессора предоставляют поддержку больших страниц, которые используются, к примеру, операционными системами или системами отображения буфера кадров. Схемы больших страниц избегают большого количества элементов для отображения всегда существующего объекта. Nehalem поддерживает два аппаратно-поддерживаемых потока в каждом ядре.

Технологии уменьшения издержек промахов

Как у Nehalem, так и у Opteron Х4 имеются дополнительные средства оптимизации, позволяющие им уменьшить издержки промахов. Первая из них, как описано в уточнении в разделе «Конструирование системы памяти с поддержкой кэш-памяти, заключается в том, что в случае промаха первым возвращается запрошенное слово. Обе системы позволяют процессору продолжать выполнение инструкций, которые обращаются к кэш-памяти данных во время обработки промаха.

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

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

Существенной трудностью, с которой сталкиваются разработчики кэш-памяти, является поддержка таких процессоров, как Nehalem и Opteron Х4, которые могут выполнять более одной инструкции, обращающейся к памяти за один тактовый цикл. Несколько запросов могут быть поддержаны в кэш-памяти первого уровня с помощью двух разных технологий. У кэш-памяти может быть несколько портов, что позволит одновременно осуществлять более одного обращения к одному и тому же блоку кэш-памяти. Но многопортовые устройства кэш-памяти зачастую обходятся стишком дорого, поскольку RAM-ячейки в многопортовой памяти должны быть намного больше, чем однопортовые ячейки. Альтернативная схема заключается в разбиении кэш-памяти на банки и разрешении множественных, независимых обращений, если они осуществляются к разным банкам. Эта технология похожа на оперативную память с чередованием адресов. Кэш-память данных уровня L1 процессора Opteron Х4 поддерживает два 128-разрядных чтения за один тактовый цикл и имеет восемь банков.

Nehalem и большинство других процессоров в своей иерархии памяти следуют политике включения. Это означает, что копия всех данных в кэш памяти самого верхнего уровня может быть также найдена в устройствах кэш памяти нижних уровней. В отличие от этого, процессоры AMD в устройствах кэш-памяти первого и второго уровней следуют политике исключения, означающей, что блок кэш-памяти может быть найден только в устройствах кэш-памяти первого или второго уровней, но не на обоих уровнях. Следовательно, при промахе во время обращения к кэш памяти уровня L1, когда блок извлекается из L2 в L1, заменяемый блок отправляется обратно в кэш-память уровня L2.

Уточнение. Процессор Opteron Х4 не только не следует политике обычного включения, но кроме этого еще имеет нестандартные взаимоотношения между уровнями «иерархии памяти. Вместо того чтобы снабжать из памяти кэш-память уровня L2, которая в свою очередь снабжает кэш память уровня L1, кэш-памягь уровня L2 содержит только те данные, которые были исключены из кэш-памяти уровня L1. Таким образом, кэш-память уровня L2 может быть названа кэш-памятью «жертвенных» данных, поскольку в ней содержатся только те блоки, которые были перемещены из L1 («жертвы»). Аналогично этому, кэш-память уровня L3 является кэш-памятью «жертвенных данных для L2, состоящей только из блоков, которые были перемещены из L2 Если данные, приведшие к промаху в L1, не будут найдены в L2, но будут найдены в L3, кэш-память уровня L3 поставит данные непосредственно кэш-памяти уровня L1. Следовательно, промах при обращении к L1 может быть обслужен путем попадания в L2, или путем попадания в L3, или из памяти.





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: