Что такое кэш l1 l2 l3 в процессоре: Зачем процессорам нужен кэш и чем отличаются уровни L1, L2, L3
Что означает кэш память процессора, в чем отличие L1,L2,L3
При выполнении различных задач в процессор вашего компьютера поступают необходимые блоки информации из оперативной памяти. Обработав их ЦП записывает полученные результаты вычислений в память и получает на обработку последующие блоки данных. Так продолжается до тех пор, пока поставленная задача не будет выполнена.
Вышеупомянутые процессы производятся на очень большой скорости. Однако скорость даже самой быстрой оперативной памяти значительно меньше скорости любого слабого процессора. Каждое действие, будь то запись на неё информации или считывание с неё занимают много времени. Скорость работы оперативной памяти в десятки раз ниже скорости процессора.
Не смотря на такую разницу в скорости обработки информации, процессор ПК не простаивает без дела и не ожидает, когда ОЗУ выдаст и примет данные. Процессор всегда работает и всё благодаря присутствию в нем кэш памяти.
Кэш — особый вид оперативной памяти. Процессор использует память кэша для хранения тех копий информации из основной оперативной памяти компьютера, вероятность обращения к которым в ближайшее время очень велика.
По сути кэш-память выполняет роль быстродействующего буфера памяти хранящего информацию, которая может потребоваться процессору. Таким образом процессор получает необходимые данные в десятки раз быстрее, чем при считывании их из оперативной памяти.
Основным отличием кэш памяти от обычного буфера являются встроенные логические функции. В буфере хранятся случайные данные, которые как правило обрабатываются по схеме » получен первым, выдан первым» либо » получен первым, выдан последним». В кэш памяти содержатся данные, вероятность обращения к которым в ближайшее время очень велика. Поэтому благодаря «умному кэшу» процессор может работать с полной скоростью и не ожидать данные, извлекаемые из более медленной оперативной памяти.
Основные типы и уровни кэш-памяти L1 L2 L3
Кэш память выполнена в виде микросхем статической оперативной памяти (SRAM), которые устанавливаются на системной плате либо встроены в процессор. В сравнении с другими видами памяти, статическая память способна работать на очень больших скоростях.
Скорость кэша зависит от объема конкретной микросхемы, Чем больше объем микросхемы, тем труднее добиться высокой скорости для её работы. Учитывая данную особенность, при изготовлении кэш память процессора выполняют в виде нескольких небольших блоков, именуемых уровнями. Самой распространенной на сегодняшний день считается трехуровневая система кеша L1,L2, L3:
Кэш память первого уровня L1 — самая маленькая по объему (всего несколько десятков килобайт), но самая быстрая по скорости и наиболее важная. Она содержит данные наиболее часто используемые процессором и работает без задержек. Обычно количество микросхем памяти уровня L1 равно количеству ядер процессора, при этом каждое ядро получает доступ только к своей микросхеме L1.
Кэш память уровня L2 по скорости уступает памяти L1, но выигрывает в объеме, который измеряется уже в нескольких сотнях килобайт. Она предназначена для временного хранения важной информации, вероятность обращения к которой ниже, чем у информации хранящейся в кэше L1.
Третий уровень кэш памяти L3 — имеет самый большой объем из трех уровней (может достигать десятков мегабайт), но и обладает самой медленной скоростью, которая всё же значительно выше скорости оперативной памяти. Кэш память L3 служит общей для всех ядер процессора. Уровень памяти L3 предназначен для временного хранения тех важных данных, вероятность обращения к которым чуть ниже, чем у информации которая хранится в первых двух уровнях L1, L2. Она также обеспечивает взаимодействие ядер процессора между собой.
Некоторые модели процессоров выполнены с двумя уровнями кэш памяти, в которых L2 совмещает все функции L2 и L3.
Когда полезен большой объем кэша.
Значительный эффект от большого объема кэша вы ощутите при использовании программ архиваторов, в 3D играх, во время обработки и кодирования видео. В относительно «легких» программах и приложениях разница практически не заметна (офисные программы, плееры и т.п).
Кэш память процессора — насколько важна она
Кэш память (Cache)— массив сверхбыстрой оперативной памяти, являющейся буфером между контроллером системной памяти и процессором. В этом буфере сохраняются блоки данных, с которыми центральный процессор работает в данный момент, тем самым значительно уменьшается количество обращений процессора к медленной системной памяти. Тем самым заметно увеличивается общая производительность процессора.
Различают кэш память 1-, 2- и 3-го уровней (маркируются L1, L2 и L3).
Кэш память первого уровня (L1) — самый быстрый, но по объему меньший, чем у остальных. С ним напрямую работает ядро процессора. Она имеет наименьшую латентность (время доступа).
Кэш память второго уровня (L2) – объем этой памяти значительно больше, чем L1.
Кэш память третьего уровня (L3) – с большим объемом, но более медленная, чем L2.
В классическом варианте существовало 2 уровня кэш-памяти – 1-ий и второй уровень. 3-ий уровень по организации отличается от L2. Если данные не обрабатывались или процессор должен обработать срочные данные, то для освобождения L2 данные перемещаются в кэш память 3-го уровня. L3 больше по размеру, однако, и медленнее, чем L2 (шина между L2 и L3 более узкая, чем шина между L1 и L2), но все же его скорость, намного выше скорость оперативной памяти.
В кэш память 2-ого уровня изначально передаются все данные, для обработки центральным процессором, данные частично декодируются и переходят дальше в ядро.
В L2 из данных строятся цепочка инструкций, а в L1 «зеркально» строятся внутренние команды процессора, которые учитывают особенности процессора, регистры и т.д. Число внутренних команд центрального процессора не слишком много поэтому величина кэша 1-ого уровня не имеет большого значения (в современных процессорах L1 может быть с 64 Кб, 128Кб на каждое из ядер). В отличии от L1, L2 для процессора имеет огромное значение, именно поэтому процессоры с наибольшим объемом кэша 2-ого уровня показывают высокую производительность.
В организации структуры памяти процессоров AMD и Intel существуют отличия. К примеру, AMD процессоры четко разделёны между ядрами кэш памяти, и маркируются соответственно — 512х2 (Athlon 5200 и ниже) или 1024х2 (у Athlon 5200 и выше). А у процессоров Intel Core2Duo кэш строго не поделён, а значит для каждого из ядер можно использовать необходимое количество памяти, это хорошо подходит для систем, не поддерживающих многоядерность. Если использовать все ядра, кэш память разделяется на каждое из ядер динамически, в зависимости от нагрузки каждого из ядер.
Кэш-память L3 как зеркало производительности процессора AMD EPYC Rome
Оценивая быстродействие кэш-памяти третьего уровня, реализованной на кристалле процессора AMD EPYC 7452, мы столкнулись с ситуацией, требующей детального рассмотрения. Прежде чем, заняться ее анализом, изучим особенности организации L3-кэш у семейства процессоров EPYC Rome, разработанных с использованием архитектуры Zen 2.
Собственно, L3 не является составной частью архитектуры процессорного ядра Zen 2. Классический подход к разработке современных процессоров общего назначения ограничивает возможности ядра кэш-памятью первого и второго уровней. Но Zen 2 на третьем уровне для кэширования инструкций и данных формует сущность CCX (Compute Complex), в которую может быть погружено 4 процессорных ядра. Они совместно используют блок кэш-памяти L3 объемом 16 МБ. Пара таких комплексов составляет чиплет CCD — замечательное изобретение AMD. Всего может быть до 8 таких чиплетов, что дает основание говорить о наличии максимум 256 МБ кэш-памяти L3.
В случае 32-ядерного EPYC 7452, в основе которого лежат 4 чиплета CCD, кэш-память третьего уровня ограничена 128 мегабайтами.
Топологическая иерархия AMD Rome
Анализируем CPUID
Исходя из сказанного, чисто теоретически, в распоряжении одного ядра может находиться не более 16 МБ L3, а в условиях реальной эксплуатации — и того меньше. Проверим вышесказанное, с помощью утилиты Java CPUID.
Параметры комплекса CCX согласно результатам выполнения инструкции CPUID, функция 8000001Dh
CPUID функция 8000001Dh позволяет получить информацию о кэш-памяти одного комплекса CCX. Каждое его ядро оснащено L1-кэшем для инструкций и данных объемом по 32 килобайта каждый; объем кэш-памяти L2 составляет 512 килобайт. При этом L1 и L2 являются ресурсами приватными для каждого из ядер. Заметим, что места в L1-кэш для инструкций в процессорах второго поколения AMD EPYC выделено в два раза меньше, чем было в первом поколении этих серверных чипов.
Параметр Max. logical CPUs sharing this cache для L1 и L2 равен двум — это количество логических процессоров, совместно использующих L1 и L2, что с учетом технологии SMT означает: два логических CPU соответствуют одному ядру. Для L3-кэш этот параметр равен 8 — количество ядер, совместно использующих блок L3, равно 4.
Суммарный объем кэш-памяти L3 на одно процессорное гнездо (согласно CPUID функции 80000006h)
Чтобы определить полный объем L3 для процессора, воспользуемся CPUID функцией 80000006h. Эта величина составляет 128 MB — топология L3 представлена восемью кластерами по 16 MB. Данные CPUID функции 8000001Dh говорят о том, что ассоциативность L3 (Ways of associativity) равна 16. На скриншоте функции 80000006h значение L3 Unified Cache Associativity находится в состоянии Reserved, что следует из официальной документации.
Обратим также внимание на параметр L2 data TLB for 4KB pages number of entries, который равен 800h, что в десятичном представлении дает 2048; он нам понадобится позже.
До сих пор считалось, что 16-вариантной ассоциативности соответствует значение битового поля EDX.[15-12], равное 8. В нашем случае CPUID возвращает 9, что может означать или запаздывание в документации, или особое архитектурное решение.
Из маркетинговых материалов AMD следует, что латентность L3 в процессорах семейства EPYC 7002 обусловлена временем, соответствующим 40 процессорным тактам (для предыдущего семейства Naples это значение было несколько ниже — латентность L3-кэш составляла 35 тактов), что хорошо согласуется с данными, полученными в ходе эксперимента.
Измерение латентности в этом эксперименте основано на идее использования прочитанных данных в качестве адреса для следующего чтения. При этом подавляются спекулятивные способности CPU, поскольку невозможно опережающее выполнение следующего чтения, искажающее результат. Процесс связан с доступом к фрагментированным данным с рандомизацией адресов, поэтому каждая следующая операция с высокой вероятностью будет оперировать с новой страницей и потребует загрузки нового дескриптора в TLB. Метрики мы будем получать с помощью своего программного продукта, предназначенного для измерения производительности кэш и оперативной памяти — утилиты NUMA CPU and RAM Benchmark (сокращенно NCRB).
Про страницы, TLB и латентность L3-кэш
Как известно, механизм трансляции страниц (или paging) отображает виртуальное адресное пространство приложения на физическую память платформы. Каждая страница описывается дескриптором Page Table Entry (PTE). За кэширование таких дескрипторов отвечает блок Translation Lookaside Buffer (TLB).
Классическая схема, принятая еще во времена i386, гранулирует оперативную память четырех килобайтными страницами, что хотя и экономно, но связано с серьезными накладными расходами в современных условиях. Сегодня доступен и один из продвинутых способов — гранулярность «большими страницами», размером в 2 МБ. Выгоды от его использования очевидны: в большинстве приложений растет эффективность операций с ОЗУ.
Терминологическое уточнение
В нашем эксперименте ОС предоставляет, а бенчмарк NCRB использует большие страницы, формируемые путем пропуска одного подкаталога страниц (PTE), действующего на последней стадии трансляции линейного адреса в физический. Высвобождаемые при этом адресные биты становятся частью адреса байта внутри страницы. В процессорной архитектуре x64 (а также в IA32 + PAE) это увеличивает размер страницы до 2 MB, в IA32 это увеличивает размер страницы до 4 MB. Как сказано выше, стандартные страницы со времен процессора i386, всегда имеют размер 4 KB.
Буфер ассоциативной трансляции
И хотя польза от «больших страниц» иногда сомнительна, с переходом в режим Large Pages размер адресуемой области увеличивается с 4 KB (Normal Pages) до 2 MB (Large Pages), а количество выделенных для этого дескрипторов пропорционально уменьшается. В результате снижается нагрузка на TLB — один из важнейших уровней кэш-памяти, который смело можно назвать «серым кардиналом» производительности. Рассмотрим влияние буфера ассоциативной трансляции на латентность кэш-памяти L3-уровня в процессоре EPYC 7452.
TLB и латентность L3-кэш
Вернувшись к иллюстрации результатов функции CPUID 80000006h, приведенной в начале статьи, обратим внимание на L2 data TLB for 4KB pages number of entries. Согласно CPUID, объем буфера ассоциативной трансляции, кэширующего дескрипторы страниц, составляет 800h = 2048 элементов. Они позволяют адресовать «нормальными» 4 KB страницами диапазон памяти в 2048 * 4KB = 8192K = 8MB.
Размер кластера L3-кэша, обслуживающего 4 процессорных ядра CCX, вдвое превышает эту границу. Выполним однопоточное тестирование латентности L3, чтобы оценить зависимость этого параметра от способа трансляции страниц оперативной памяти.
На графиках латентности меньшие значения соответствуют бо́льшей производительности
Зависимость латентности однопоточного доступа от объема обрабатываемого блока в окрестности общего пространства L3 = 16MB одного кластера CCX в режиме Normal Pages
Логично предположить, что на графике латентности L3 в режиме 4KB страниц, точка перегиба при X = 8 MB вызвана исчерпанием L2 Data TLB, это приводит к TLB-промахам и необходимости читать дескрипторы из ОЗУ, что, очевидно, займет значительно больше тактов, чем получение их из TLB. Далее, в окрестности X = 16 MB происходит исчерпание объема кластера L3, что также сопровождается точкой перегиба.
Зависимость латентности однопоточного доступа от объема обрабатываемого блока в окрестности общего пространства L3 = 16MB одного кластера CCX в режиме Large Pages
В данном примере использование Large Pages почти нивелирует влияние фактора TLB на результат теста. Что и понятно: «большие страницы» позволяют адресовать диапазон памяти в 2048 * 2MB = 4096MB = 4GB, хотя при этом в исследуемом процессоре количество элементов L2 TLB для обычных и больших страниц совпадает.
В силу особенностей страничной трансляции, при расчетах объемов данных, вызывающих переполнение TLB, ключевое значение имеет не размер собственно дескриптора страницы, а размер диапазона памяти, доступ к которому обеспечивает один дескриптор.
Пропускная способность L3-кэш
В отличие от латентности пропускная способность измеряется на операциях с достаточно большими и непрерывными блокам данных. Здесь, один раз попав на страницу, бенчмарк гарантированно прочитает или запишет (в зависимости от типа теста) весь объем страницы, прежде чем перейти к следующей.
Сказанное означает, что частота промахов TLB в тестах пропускной способности должна быть ниже, чем в тестах латентности, значит, к фактору Large Pages измерения латентности должны быть более чувствительны, чем измерения пропускной способности.
На графиках пропускной способности бо́льшие значения соответствуют бо́льшей производительности
Зависимость однопоточной скорости чтения от объема обрабатываемого блока в окрестности общего пространства L3 = 16MB одного кластера CCX в режиме Normal Pages
Зависимость однопоточной скорости чтения от объема обрабатываемого блока в окрестности общего пространства L3 = 16MB одного кластера CCX в режиме Large Pages
Вместе с тем, опыт продемонстрировал, что оба показателя (латентность и пропускная способность) не лишены влияния фактора TLB. Заметим, что в силу специфики нашего примера читаемый блок помещается в кэш-память исследуемого уровня (объемом 16MB), а картирующий контекст, необходимый для обслуживания операции чтения в режиме 4KB страниц не помещается в TLB (объем которого позволяет адресовать диапазон размером 8MB).
Подводя итоги
В ситуации, когда процессорные ядра достигли частотного порога насыщения, а их количество напрямую не может определять производительность всего вычислительного комплекса, решающее значение имеет оснащение CPU умными алгоритмами, где не последнее место отводится алгоритмам кэширования. В процессорах семейства AMD Rome кроме приватных кэш-ресурсов L1 и L2 на первых ролях агрегирований L3-кэш. Его задача — обеспечить производительность CCX-кластера в частности и всего процессора в целом, а также снизить нагрузку на подсистему DRAM, обслуживаемую отдельным кристаллом I/O Hub.
Проведенный эксперимент продемонстрировал зависимость даже в однопоточном режиме пропускной способности и латентности L3 от механизма трансляции линейного адреса в физический. Стоит предполагать, что при мультипоточном использовании L3 задержки при доступе к этому разделяемому ресурсу быстродействующей памяти будут нарастать.
В основе обнаруженного феномена — зависимость от объема и организации буфера ассоциативной трансляции. Нетрудно заметить, что ситуация, при которой данные обрабатываемого блока помещаются в кэш-памяти, а картирующий контекст, необходимый для трансляции его страниц не помещается в TLB (в режиме 4K страниц), характерна для блоков, объем которых сравним с объемом L3. В этой ситуации роль TLB становится критически важной. Протестированный процессор AMD EPYC 7452 32-Core доказал это.
Как следует из графиков латентности, в режиме Large Pages имеет место полуторакратное снижение величины задержки при доступе к L3 при объеме блока X=16MB. Этот факт заслуживает внимания разработчиков коммерческого программного обеспечения, ответственно относящихся к оптимизации кода — сценарий нашего синтетического теста моделирует доступ к фрагментированным данным. Несмотря на все сложности внедрения «больших страниц», их использование в прикладных задачах (системы управления базами данных и т.п.) выглядит оправдано с точки зрения борьбы за каждую наносекунду процессорного времени.
Небольшое сравнение L3 кэша в играх и приложениях
Этот материал написан посетителем сайта, и за него начислено вознаграждение.
Оказался у меня на руках процессор i5 2400. И так как у меня есть 2600k, у которого L3 кэш 8mb против 6mb у i5 — захотел сравнить их в играх и приложениях. Время было ограничено, поэтому тестов будет не так много. Но чтобы добавить еще больше информации, я поигрался с памятью и смоделировал три ситуации с i5 2400.
1. Конфиг с самой дешевой материнской платой на чипсете с индексом «H», где отсутствует возможность разгона и частота всех ядер будет 3200MHz. Оперативная память будет работать на частоте 1333MHz при таймингах 9:9:9:27
2. Конфиг с материнской платой на чипсете с индексами «P» и «Z» у которых есть возможность поднять множитель процессоров с поддержкой турбобуста на четыре пункта. В моем случае с процессором i5 2400 множитель с 32 можно поднять до 36, тем самым получив частоту в 3600MHz. Разогнав еще и шину, я получил 3800MHz, что на 600MHz больше чем в первом конфиге. Оперативная память в данном случае будет работать на частоте 2252MHz при таймингах 9:9:9:27
3. Конфиг точно такой же как и второй, но с частотой оперативной памяти в 1689MHz на таймингах 9:9:9:27
4. Конфиг с процессором 2600k на частоте 3,80GHz, отключенным HT и оперативной памятью 2252MHz с таймингами 9:9:9:27.
Тестовые комплектующие:
Intel Core i7 2600K
Intel Core i5 2400
Материнская плата: ASUS P8Z77-V Deluxe
Оперативная память: 16GB DDR3 CRUCIAL Ballistix Elite
Видеокарта: GTX 780 Ti 1279|7800 Драйвера: 381.89
Блок питания: APS-850C 850W
Операционная система: Windows 8.1 x64 чистая (35 процессов после запуска системы)
i5 2400 3200MHz DDR3 1333MHz
i5 2400 3800MHz DDR3 1689MHz
i5 2400 3800MHz DDR3 2252MHz
i7 2600k 3800MHz 2252MHz
NVIDIA GTX 780 Ti 1279|7800
_________________________________________________________________________________________________
Результаты тестирования:
3DMark 2013 CPU Score
Прирост как от кэша так и от оперативной памяти минимальный.
_________________________________________________________________________________________________
Cinebench R15
В Cinebench R15 наблюдаем аналогичную картину.
_________________________________________________________________________________________________
LinX 0.6.5 Объем задачи: 25000
В LinX также прирост дает только разгон процессора
_________________________________________________________________________________________________
x264 FHD Benchmark
И снова прирост на уровне погрешности.
_________________________________________________________________________________________________
Winrar v4.20
И вот наконец получаем прирост от кэша порядка 6% и от памяти около 15%
_________________________________________________________________________________________________
Battlefield 1 SinglePlayer
Разрешение:
1280×720
Шкала разрешения:
100%
Качество текстур: низ. / сред. / выс. /
ультра
Фильтрация текстур: низ. / сред. / выс. /
ультра
Качество освещения: низ. / сред. / выс. /
ультра
Качество эффектов: низ. / сред. / выс. /
ультра
Качество постобработки: низ. / сред. / выс. /
ультра
Качество сетки: низ. / сред. / выс. /
ультра
Качество ландшафта: низ. / сред. / выс. /
ультра
Качество травы: низ. / сред. / выс. /
ультра
Качество сглаживания:
нет / FXAA (среднее) / FXAA (высокое) / TAA
Объемный свет: нет / SSAO /
HBAO
Небольшой прирост от L3 кэша есть.
_________________________________________________________________________________________________
Crysis 3 Добро пожаловать в джунгли
Разрешение:
1280×720
Сглаживание:
откл.
Разрешение текстур: низк. / средн. / высок. /
макс.
Эффекты: низк. / средн. / высок. /
макс.
Объект: низк. / средн. / высок. /
макс.
Частицы: низк. / средн. / высок. /
макс.
Постобработка: низк. / средн. / высок. /
макс.
Затенение: низк. / средн. / высок. /
макс.
Тени: низк. / средн. / высок. /
макс.
Вода: низк. / средн. / высок. /
макс.
Анизотропный фильтр: 1x / 2x / 4x / 8x /
16x
Степень размытости:
откл
Блики:
да / нет
Одна из самых требовательных к процессору сцен в игре. Прирост только от частоты процессора. Загрузка 780Ti в этой сцене даже на i7 не превысила 50%
_________________________________________________________________________________________________
Grand Theft Auto V Встроенный бенчмарк (Последняя сцена)
Разрешение:
1280×720
Версия DirectX:
11
Сглаживание FXAA:
выкл / вкл
Сглаживание MSAA:
выкл / x2 / x4 / x8
Населенность города:
max
Разновидность населения:
max
Фокусировочная шкала:
Исследование эффективности совместного использования общего и разделенного L2-кэша современных двухъядерных процессоров
Известно, что достаточно существенным микроархитектурным отличием современных двухъядерных процессоров Intel, основанных на усовершенствованной микроархитектуре «P6+» и новой микроархитектуре Intel Core — процессоров семейства Intel Core Duo/Core Solo и Intel Core 2, по сравнению с решениями конкурентов — двухъядерными процессорами семейства AMD Athlon 64 X2, является наличие общего для обоих ядер L2-кэша, динамически распределяемого по объему между индивидуальными ядрами процессора в зависимости от их потребностей в кэшируемом пространстве памяти. В то же время, двухъядерные процессоры AMD характеризуются наличием индивидуального L2-кэша фиксированного размера у каждого из ядер процессора.
Можно предположить, что «объединенная» архитектура L2-кэша в ряде случаев может оказаться менее выигрышной по сравнению с традиционной архитектурой «выделенных» L2-кэшей для каждого из ядер (при условии равенства их суммарных объемов — например, 2 МБ объединенного L2-кэша против 1+1 МБ выделенного) вследствие использования общей шины данных и общей системы запросов к L2-кэшу обоими ядрами. Очевидно, что, если это действительно так, наиболее эффективным способом выявить подобный недостаток будет создание ситуации максимальной нагрузки на L2-кэш процессора (со стороны обоих ядер), которую намного проще выявить с помощью специального тестового приложения, нежели реальных задач, требовательность которых к L2-кэшу процессора напрямую неизвестна.
Поэтому, чтобы проверить сделанное выше предположение и вообще сравнить эффективность совместного обращения двух ядер процессора к L2-кэшу в случае изолированного (AMD) и объединенного (Intel) L2-кэша, мы именно так и поступили. Для этого мы воспользовались недавно разработанной вспомогательной утилитой RightMark Mutli-Threaded Memory Test, входящей в состав последней официальной версии тестового пакета RightMark Memory Analyzer 3.70.
Напомним, что идея этого теста следующая: создаются два потока, каждый из которых по умолчанию жестко «привязан» к своему ядру (для предотвращения «перекидывания» этих потоков с ядра на ядро операционной системой). Каждый из потоков выделяет себе собственное пространство памяти заданного объема и способен осуществлять следующие операции: чтение, запись, чтение с программной предвыборкой (software prefetch, дистанция предвыборки может варьироваться пользователем) и запись методом прямого сохранения (non-temporal store). Суммарный объем данных, подлежащих чтению и записи, задается пользователем отдельно для каждого из потоков. В программе предусмотрена возможность запуска и остановки каждого из потоков в любой момент времени, а также синхронного запуска и синхронной остановки обоих потоков. Результатом теста, выдаваемым непосредственно в процессе работы, является моментальная (усредненная по секундному интервалу) и средняя (усредненная по всему времени работы теста) пропускная способность, выраженная в МБ/с. В зависимости от выбранного размера данных, приложение позволяет исследовать обращение одного или двух ядер процессора, как к его кэш-памяти, так и к оперативной памяти. При этом очевидно, что для исследования L2-кэша процессора разумно использовать первые два реализованных варианта доступа (чтение и запись), тогда как два последних варианта (чтение с программной предвыборкой и запись методом прямого сохранения данных) могут быть полезны для исследования характеристик подсистемы памяти.
Конфигурации тестовых стендов
Тестовый стенд №1
- Процессор: AMD Athlon 64 X2 3800+, 2.0 ГГц (Manchester rev. E6, CPUID 20F32h, 512+512KB L2)
- Материнская плата: ASUS A8N-E, версия BIOS 1013 от 04.07.2006
- Оперативная память: 2 x 1ГБ Corsair XMS4400PRO, DDR-400, тайминги 2-3-2-5
Тестовый стенд №2
- Процессор: Intel Core 2 Extreme X6800 (Conroe rev. B1, CPUID 6F5h, 4 MB L2)
- Материнская плата: Intel D975XBX rev. 304, версия BIOS BX97510J.86A.1209.2006.0601.1340 от 01.06.2006
- Оперативная память: 2 x 1ГБ Corsair XMS2-6400, DDR2-800, тайминги 5-5-5-15
Изолированный L2-кэш, процессор AMD Athlon 64 X2 3800+
Разработка и отладка приложения RightMark Multi-Threaded Memory Test проводились на процессоре AMD Athlon 64 X2 3800+ (стенд №1) с 512-КБ раздельным L2-кэшем для каждого из ядер, поэтому логично начать изучение поведения именно этого типа L2-кэша на этом процессоре.
Таблица 1. AMD Athlon 64 X2, данные в L2-кэше
Тип обращения | Пропускная способность (ГБ/с), поток 1 | Пропускная способность (ГБ/с), поток 2 | Суммарная пропускная способность (ГБ/с) |
---|---|---|---|
Чтение 512 КБ | 9.67 | — | — |
Запись 512 КБ | 9.34 | — | — |
Чтение 512 КБ + Чтение 512 КБ | 9.66 (99.9%) | 9.66 (99.9%) | — |
Запись 512 КБ + Запись 512 КБ | 9.34 (100.0%) | 9.33 (99.9%) | — |
Чтение 512 КБ + Запись 512 КБ | 9.66 (99.9%) | 9.33 (99.9%) | — |
Результаты исследований с 512-КБ размером блока (максимальным объемом L2-кэша) приведены в таблице 1. С достаточно очевидным подходом, тестирование проводилось в пяти режимах: чтение одним потоком, запись одним потоком, чтение двумя потоками, запись двумя потоками и, наконец, одновременное чтение и запись двумя потоками. В таблице 1 отсутствуют данные о суммарной пропускной способности общего интерфейса данных по той причине, что таковой в данном случае отсутствует — каждый из L2-кэшей ядер имеет собственный, независимый интерфейс.
Заметим, что абсолютные показатели пропускной способности (в ГБ/с) в рамках нашего исследования не столь важны, поскольку зависят от конкретного экземпляра процессора (прежде всего, его тактовой частоты). Нам важны относительные показатели, наблюдаемые при совместном обращении обоих ядер к данным, рассчитанные по отношению к соответствующему одиночному обращению. Легко заметить, что эти относительные показатели во всех трех случаях совместного обращения на данном процессоре (AMD Athlon 64 X2) при выбранном объеме данных (512 КБ) в пределах погрешности измерений составляет 100%. Ничего удивительного здесь нет — это лишь подтверждает полную независимость L2-кэшей ядер процессора.
Ради интереса, изучим поведение общего интерфейса данных для рассматриваемого процессора, каковым является интерфейс общего для обоих ядер интегрированного контроллера памяти процессора и собственно интерфейс оперативной памяти (двухканальной DDR-400). В этой статье мы приводим лишь предварительную информацию по исследованию одновременного обращения двух ядер процессора к оперативной памяти, более подробному изучению данного вопроса будет посвящена наша следующая статья из этого цикла.
Таблица 2. AMD Athlon 64 X2, данные в оперативной памяти
Тип обращения | Пропускная способность, поток 1 (ГБ/с) | Пропускная способность, поток 2 (ГБ/с) | Суммарная пропускная способность (ГБ/с) |
---|---|---|---|
Чтение 32 МБ | 3.28 | — | — |
Запись 32 МБ | 2.23 | — | — |
Чтение 64 МБ | 3.28 | — | — |
Запись 64 МБ | 2.23 | — | — |
Чтение 32 МБ + Чтение 32 МБ | 2.50 (76.2%) | 2.50 (76.2%) | 5.00 (152.4%) |
Запись 32 МБ + Запись 32 МБ | 1.14 (51.1%) | 1.14 (51.1%) | 2.28 (102.2%) |
Чтение 32 МБ + Запись 32 МБ | 1.56 (47.6%) | 1.54 (69.1%) | 3.10 (112.5%) |
В данном случае (см. таблицу 2), общее количество измерений увеличено до семи в связи с увеличением количества «опорных» однопоточных измерений — первые два из них проводились с 32-МБ размером блока данных, а два остальных — с 64-МБ блоком данных. Связано это с тем, что при совместном обращении к общей шине данных общий объем оперируемых данных возрастает вдвое. Для получения относительных величин для каждого из ядер (так сказать, фактора замедления) индивидуальные абсолютные величины необходимо сравнивать с результатами однопоточных обращений в аналогичных условиях (32-МБ блок данных), тогда как для относительной оценки суммарной пропускной способности интерфейса его результат необходимо сравнивать с однопоточным обращением ко всему (удвоенному) объему данных (64-МБ блок). Тем не менее, как бы там ни было, в рассматриваемом случае результаты однопоточного чтения/записи 32-МБ и 64-МБ блоков данных оказались практически идентичными.
Совместное чтение данных из разных областей памяти (см. табл. 2) приводит к некоторому замедлению пропускной способности на одно ядро (76.2% по сравнению с однопоточным доступом), тем не менее, суммарная пропускная способность шины памяти при одновременном доступе двух ядер достигает 152.4% в сравнении с однопоточным доступом.
Совместная запись данных сопровождается гораздо более заметным замедлением скорости доступа к памяти для каждого из ядер — соответствующие относительные величины снижаются до 51.1% по сравнению с однопоточной записью. Вместе с тем, суммарная пропускная способность на запись вновь оказывается не хуже, и даже несколько выше по сравнению с однопоточным обращением (102.2%).
Наиболее интересный случай — одновременное чтение данных из памяти первым ядром и запись данных в память вторым ядром. Он интересен тем, что результирующая пропускная способность памяти на чтение и на запись здесь практически выравниваются (до уровня ~1.55 ГБ/с). Поскольку однопоточное чтение данных характеризуется заметно более высокой пропускной способностью памяти (3.28 ГБ/с) по сравнению с однопоточной записью (2.23 ГБ/с), замедление доступа к памяти оказывается гораздо более выраженным для первого ядра, читающего данные из памяти (снижение пропускной способности до 47.6%), по сравнению со вторым ядром, записывающим данные в память (снижение до 69.1%). Общая пропускная способность в этом режиме составляет 3.1 ГБ/с, что, в пересчете на «усредненную» операцию чтения-записи (3.28 / 2 + 2.23 / 2 = 2.755 ГБ/с) составляет 112.5%, т.е. даже в этом режиме совместная утилизация шины памяти по-прежнему оказывается более эффективной по сравнению с однопоточным обращением.
Объединенный L2-кэш, процессор Intel Core 2 Extreme X6800
Второй процессор, оказавшийся в нашем распоряжении и подлежащий рассмотрению, — Intel Core 2 Extreme X6800 (стенд №2), обладающий сравнительно большим, 4-МБ объединенным L2-кэшем данных. Попытаемся оценить эффективность совместного обращения обоих ядер к данным в условиях достатка L2-кэша (общий объем данных — не более 4 МБ), его частичного недостатка (объем данных 5 МБ, варьируемое соотношение объемов на каждое ядро), а также при обращении к данным, содержащимся в оперативной памяти (размер блока данных 32 МБ).
Таблица 3. Intel Core 2 Extreme, данные в L2-кэше
Тип обращения | Пропускная способность, поток 1 (ГБ/с) | Пропускная способность, поток 2 (ГБ/с) | Суммарная пропускная способность (ГБ/с) |
---|---|---|---|
Чтение 2 МБ | 23.09 | — | — |
Запись 2 МБ | 19.05 | — | — |
Чтение 4 МБ | 22.11 | — | — |
Запись 4 МБ | 17.65 | — | — |
Чтение 2 МБ + Чтение 2 МБ | 19.14 (82.9%) | 19.28 (83.5%) | 38.42 (173.8%) |
Запись 2 МБ + Запись 2 МБ | 10.94 (57.4%) | 11.36 (59.6%) | 22.30 (126.3%) |
Чтение 2 МБ + Запись 2 МБ | 19.91 (86.2%) | 12.17 (63.9%) | 32.08 (161.4%) |
Исследование поведения общего интерфейса объединенного L2-кэша ядер процессора Intel Core 2 Extreme, по существу, аналогично проведенному выше исследованию общего интерфейса данных интегрированного контроллера памяти процессора AMD Athlon 64 X2.
В таблице 3 представлены результаты, полученные в условиях максимальной утилизации L2-кэша процессора, но не выхода за его пределы (суммарный объем данных — 4 МБ, по 2 МБ на каждое ядро). Одновременное чтение данных из L2-кэша приводит к некоторому снижению его пропускной способности, «достающейся» каждому из ядер, но нельзя сказать, что очень значительному (до 82.9% от первоначального уровня, соответствующего одиночному обращению), особенно если учесть, насколько высоки абсолютные показатели пропускной способности L2-кэша даже в этих условиях (порядка 19 ГБ/с на ядро). Вместе с этим, суммарная пропускная способность L2-кэша при таком обращении возрастает значительно и составляет 173.8% по сравнению с «одноядерным» доступом к 4-МБ блоку данных.
Более заметно снижение эффективности L2-кэша в случае совместной записи данных — в этом случае, величины пропускной способности снижаются в среднем до 58% относительно записи 2-МБ блока данных одним ядром процессора. Тем не менее, суммарная пропускная способность на запись также оказывается в 1.26 раз выше по сравнению с записью того же объема данных в L2-кэш лишь одним ядром.
Наиболее «жесткий» режим доступа к общему L2-кэшу представляет собой одновременное чтение и запись данных. Как видно из данных таблицы 3, объединенный L2-кэш процессора Intel Core 2 Extreme справляется с этой задачей весьма эффективно — пропускная способность на чтение снижается лишь до 86.2% от номинала, пропускная способность на запись — до 63.9% (т.е. остается даже выше, чем при одновременной записи данных двумя потоками). Суммарная пропускная способность интерфейса L2-кэша, пересчитанная относительно одной «усредненной» операции чтения-записи, составляет 161.4%.
Таблица 4. Intel Core 2 Extreme, данные в оперативной памяти
Тип обращения | Пропускная способность, поток 1 (ГБ/с) | Пропускная способность, поток 2 (ГБ/с) | Суммарная пропускная способность (ГБ/с) |
---|---|---|---|
Чтение 32 МБ | 6.48 | — | — |
Запись 32 МБ | 1.64 | — | — |
Чтение 64 МБ | 6.48 | — | — |
Запись 64 МБ | 1.64 | — | — |
Чтение 32 МБ + Чтение 32 МБ | 3.56 (54.9%) | 3.59 (55.4%) | 7.15 (110.3%) |
Запись 32 МБ + Запись 32 МБ | 1.04 (63.4%) | 1.07 (65.2%) | 2.11 (128.7%) |
Чтение 32 МБ + Запись 32 МБ | 2.65 (40.9%) | 1.48 (90.2%) | 4.13 (101.7%) |
Рассмотрим теперь вариант совместного доступа исключительно к оперативной памяти посредством ее контроллера, расположенного в северном мосту чипсета, выбрав сравнительно большой размер блока данных (32-64 МБ).
Совместное обращение двух ядер к оперативной памяти по общей системной шине приводит к вполне ощутимому снижению ее пропускной способности на одно ядро — до уровня примерно 55% относительно одноядерного обращения (см. табл. 4). Заметим, что и в этом случае пропускная способность памяти распределяется равномерно между ядрами, а ее общая величина составляет 110% от номинальной величины, полученной при одноядерном обращении, т.е. общий прирост оказывается весьма незначительным.
Что интересно, более высокие результаты наблюдаются при записи данных в память — в этом случае, пропускная способность на одно ядро снижается до уровня примерно 63-65%, а суммарная пропускная способность интерфейса, соответственно, достигает уровня 129% относительно записи данных одним ядром.
При одновременном чтении и записи данных наблюдается несколько иная картина по сравнению с той, которая наблюдалась выше на процессоре AMD Athlon 64 X2. А именно, выравнивания показателей пропускной способности на чтение и на запись в данном случае не наблюдается, хотя снижение пропускной способности на чтение по-прежнему оказывается более выраженным (до уровня 40.9%) по сравнению со снижением пропускной способности на запись (до 90.2% от номинала).
Напоследок, оценим наиболее интересный режим работы объединенного L2-кэша процессоров семейства Intel Core 2, который можно назвать конкуренцией ядер за этот ресурс в условиях его частичной нехватки. Исследование в таком режиме ставит своей целью получение ответов на два вопроса: насколько сильно снижается пропускная способность при совместном доступе двух ядер к L2-кэшу в условиях его частичного «исчерпывания», и насколько эффективно распределяется объем общего L2-кэша между индивидуальными ядрами в зависимости от их реальных потребностей в нем? Чтобы ответить на оба эти вопроса, недостаточно провести лишь одно измерение в условиях равного обращения обоих потоков (например, когда каждый поток требует под свои нужды 2.5 МБ L2-кэша), как мы делали выше. Для этого необходимо провести серию измерений, в каждом из которых общий объем данных остается одинаковым (например, 5 МБ), а доля этого объема, приходящаяся на одно из ядер, постепенно возрастает.
Рис.1. Intel Core 2 Extreme, пропускная способность на чтение, объем данных 5 МБ
Результат такого эксперимента при одновременном чтении данных представлен графически на рисунке 1. Кривая пропускной способности на чтение вторым ядром («Core1 Read»), фактически, представляет собой инвертированную кривую пропускной способности на чтение первым ядром («Core0 Read»), тогда как кривая общей пропускной способности («Full Read») отражает сумму значений пропускной способности первого и второго ядер. Таким образом, эффективность распределения L2-кэша между ядрами процессора и кэширования данных в условиях этого эксперимента легко отследить по любой из этих кривых — например, по кривой пропускной способности на чтение первым ядром («Core0 Read»). Она остается на уровне, типичном для L2-кэша рассматриваемого процессора при объеме данных, приходящихся на первое ядро, порядка 1.0-1.25 МБ. При достижении объема в 1.5 МБ пропускная способность резко снижается, после чего остается на минимальном уровне вплоть до объема в 3.5 МБ — при котором, соответственно, на второе ядро процессора приходится 1.5 МБ. По мере дальнейшего увеличения объема данных, считываемых первым ядром она возрастает до значений, типичных для пропускной способности оперативной памяти.
Рис.2. Intel Core 2 Extreme, пропускная способность на запись, объем данных 5 МБ
Практически аналогичные кривые, с точностью до меньших абсолютных значений пропускной способности, наблюдаются и в случае совместной записи данных общим объемом 5 МБ (рис. 2).
Рис.3. Intel Core 2 Extreme, пропускная способность на чтение+запись, объем данных 5 МБ
Наконец, не является исключением и случай одновременного чтения данных одним ядром и записи данных другим ядром процессора (рис. 3). Характерная особенность этого случая заключается лишь в некоторой несимметричности кривых по оси ординат, связанной с различиями в пропускной способности L2-кэша и оперативной памяти на чтение и на запись данных.
Таким образом, объединенный 4-МБ L2-кэш данных процессоров семейства Intel Core 2 в условиях конкуренции за этот ресурс со стороны двух ядер при любом типе обращения (только чтение, только запись, или одновременное чтение и запись) способен эффективно кэшировать данные, объем которых не превышает всего 1.25 МБ, т.е. примерно четверть объема L2-кэша (!). В этих условиях (когда на одно из ядер приходится указанный объем данных, а остальная, большая часть данных запрашивается вторым ядром) наблюдается максимальная эффективность утилизации как шины данных L2-кэша одним из ядер, так и шины данных оперативной памяти вторым ядром, в результате чего в этой области наблюдается максимум суммарной пропускной способности. В случае же примерно равного распределения объема данных, не помещающихся в L2-кэш, между ядрами процессора, пропускная способность, приходящаяся на каждое из ядер, оказывается ниже даже пропускной способности оперативной памяти при однопоточном обращении. Таким образом, эффективность кэширования данных в этой «конфликтной» области оказывается минимальной — можно сказать, что кэширование данных и вовсе отсутствует.
Выявленный недостаток присущ исключительно архитектуре объединенного L2-кэша, по крайней мере — ее текущей реализации в процессорах семейства Intel Core 2. Идеализированная картина обращения двух потоков к данным суммарным объемом 5 МБ либо при наличии выделенного L2-кэша объемом 2 МБ на каждое ядро, либо при более эффективном распределении общего 4-МБ L2-кэша могла бы выглядеть так, как представлено на рисунке 4.
Рис.4. Идеализированный процессор с 2+2 МБ объемом L2-кэша, пропускная способность на чтение, объем данных 5 МБ
В этом идеальном случае «проблемная область» сведена к минимуму — собственно, ее размер составляет 1 МБ, т.е. тот самый объем данных, который не помещается в L2-кэш процессора. Минимальная эффективность L2-кэша здесь обнаруживается лишь при условии, что оба ядра процессора оперируют с данными, объем которых превышает 2 МБ (либо половину объема объединенного кэша, либо объем индивидуального кэша). Однако при одновременном обращении первым ядром, скажем, к 2-МБ блоку данных и вторым ядром к 3-МБ блоку данных первое ядро будет иметь скорость обмена с данными, равную пропускной способности L2-кэша, тогда как второе ядро выйдет за его пределы и ему заслуженно «достанется» скорость обмена, приближенная к пропускной способности оперативной памяти. В то же время, как можно убедиться по графику, представленному на рис. 1, в текущей реализации объединенного L2-кэша в процессорах семейства Intel Core 2 расклад оказывается совсем иной: и первое, и второе ядро получат вполне посредственную, примерно равную скорость обмена с данными, даже меньшую по сравнению с пропускной способностью оперативной памяти.
Заключение
Проведенные исследования показали полную независимость изолированных L2-кэшей ядер процессора AMD Athlon 64 X2. Снижение пропускной способности L2-кэша при совместном доступе к данным обоими ядрами у этого процессора отсутствует.
Объединенный L2-кэш процессора Intel Core 2 Extreme при совместном доступе в условиях достатка L2-кэша для нужд обоих ядер снижает свою пропускную способность в пересчете на одно ядро до уровня 57-83% от первоначальной, в зависимости от типа операции (наибольшее снижение наблюдается при операциях записи, наименьшее — при чтении данных). Хотя такое снижение может показаться довольно существенным, абсолютные показатели пропускной способности L2-кэша этого процессора в этих условиях остаются на весьма высоком уровне в 10-19 ГБ/с. То есть, если и можно допустить некоторое снижение производительности при одновременном запуске двух реальных однопоточных приложений, объем данных которых целиком помещается в L2-кэш процессора, то лишь в том случае, что эти приложения окажутся чрезвычайно требовательным к пропускной способности L2-кэша (примерно в той же степени, что и наш синтетический тест).
Гораздо хуже обстоит дело в условиях конкуренции ядер за общий L2-кэш процессора, т.е. когда суммарный объем данных, приходящихся на два потока (или два однопоточных приложения) превышает объем объединенного L2-кэша процессора. При этом скорость обмена ядра с данными существенно зависит от самого объема данных, к которому обращается это ядро. Когда объем данных сравнительно невелик и не превышает примерно 1/4 общего объема L2-кэша (1.0 — 1.25 МБ в условиях нашего эксперимента), эффективность обмена ядра с данными остается весьма высокой и сравнима с пропускной способностью L2-кэша при одиночном обращении. Можно сказать, такое приложение просто «не увидит» каких-либо остальных приложений, потенциально конкурирующих за L2-кэш процессора. Резкое снижение скорости обмена данных — до уровня пропускной способности оперативной памяти и ниже — наблюдается при возрастании требовательности потока/приложения к кэшу процессора, т.е. увеличении объема оперируемых данных. В наших условиях, такое наблюдается при объеме данных, приходящихся на один поток, от 1.5 МБ и выше. При этом вполне реалистичной может оказаться следующая ситуация: ни о чем не подозревающее приложение, использующее всего половину объема общего L2-кэша (2 МБ), может значительно потерять в скорости обмена с данными лишь потому, что параллельно оказалось запущенным некое постороннее приложение, пусть и не столь требовательное к пропускной способности, но оперирующее с большим, 3-МБ объемом данных. На процессорах семейства Intel Core 2 с общим L2-кэшем такое «приложение-агрессор» не только будет выполняться неэффективно (т.к. его данные не помещаются в доставшуюся ему часть L2-кэша процессора), но и значительно снизит эффективность первого приложения, которому, казалось бы, своей части L2-кэша должно быть более чем достаточно.
Таким образом, на наш взгляд, система распределения общего L2-кэша в процессорах Intel Core 2 Duo / Core 2 Extreme обладает не самой высокой эффективностью в «конфликтной» области, когда требования каждого из ядер к используемому объему L2-кэша оказываются более-менее сопоставимыми между собой. Собственно, неэффективность заключается в сравнительно большой ширине «конфликтной» области, на которую незаслуженно приходится примерно 2 МБ, т.е. половина объема L2-кэша процессора. Будем надеяться, что последующие реализации объединенного L2-кэша в процессорах Intel будут характеризоваться лучшими показателями эффективности распределения объема L2-кэша процессора между ядрами в зависимости от их потребностей.
В чем разница между кэш-памятью L1, L2 и L3?
По сути, кеши L1, L2 и L3 — это разные пулы памяти, похожие на ОЗУ в компьютере. Они были встроены, чтобы уменьшить время, необходимое процессору для доступа к данным. Это время называется задержкой. Архитектура, по которой они построены, также значительно отличается. Например, Кэш L1 построен с использованием более крупных транзисторов и более широких металлических дорожек, в результате чего пространство и мощность заменяются скоростью. Кэши более высокого уровня более плотно упакованы и используют меньшие транзисторы.
В этой истории есть и другие сложности, такие как тот факт, что другие клерки (процессоры) могут открывать и искать (имеют доступ) шкаф (кэш L3).
Время доступа к данным в этой памяти обычно составляет порядка наносекунд и на самом деле не имеет значения для обычного пользователя. Но для ученых / программистов, которые разрабатывают / используют программы, обрабатывающие большой объем данных, это имеет значение. Они имеют огромное значение — даже в несколько дней или даже месяцев!
Кэш L1 (уровень 1), L2, L3 — это специализированная память, которая работает рука об руку для повышения производительности компьютера.Когда к системе поступает запрос, ЦП должен выполнить некоторый набор инструкций, которые он извлекает из ОЗУ. Таким образом, чтобы сократить задержку, ЦП поддерживает кэш с некоторыми данными, которые, как он ожидает, понадобятся. (L1) Кэш 1-го уровня (2–64 КБ) — В этом кэше сначала выполняется поиск команд. Кэш L1 очень мал по сравнению с другими, что делает его быстрее остальных. (L2) Кэш 2 уровня (256–512 КБ) — Если инструкции отсутствуют в кеш-памяти L1, они просматривают кеш-память L2, которая представляет собой немного больший пул кеш-памяти, что сопровождается некоторой задержкой. (L3) Кэш 3-го уровня (1–8 МБ) — При каждом промахе в кэше происходит переход к кэш-памяти следующего уровня. Это самый большой из всех кеш-памяти, хотя он медленнее, но все же быстрее, чем оперативная память. Теперь вы знаете, что такое кеш и какие существуют разные уровни кеш-памяти. И это значение 6 МБ кэша L3 в вашем микропроцессоре Intel 4700MQ. на самом деле размер памяти этого кеша. Таким образом, Cache улучшает общую производительность ЦП, но эти цифры не следует учитывать при покупке какой-либо системы.Посмотрите на тесты процессора в целом. Процессор с аналогичной архитектурой, но с большим объемом кеша, не принесет заметной разницы. В наши дни технология продвинулась до такой степени, что спецификации процессора просто бессмысленны.
.Кэш
L2 и L3: в чем разница?
Этот сайт может получать партнерские комиссии за ссылки на этой странице. Условия эксплуатации.
Вчера мы обсудили, как работают кеши, в чем разница между L1 и L2, а также различные элементы дизайна, которые определяют, насколько быстрым (и насколько эффективным) является кэш ЦП.Сегодня мы собираемся сделать еще один шаг и изучить разницу между кешами L2 и L3.
На простейшем уровне кэш L3 — это просто большая, более медленная версия кеша L2. Раньше, когда большинство чипов были одноядерными процессорами, в целом это было правдой. Первые кэши L3 были фактически построены на самой материнской плате, подключенной к процессору через заднюю шину. Когда AMD выпустила семейство процессоров K6-III, многие существующие материнские платы K6 / K-2 могли также принять K6-III. Обычно на этих платах было от 512 КБ до 2 МБ кэш-памяти второго уровня — когда был вставлен K6-III со встроенным кешем второго уровня, эти более медленные кеши на базе материнской платы вместо этого стали кэшем L3.
К началу века установка дополнительного кэша L3 на чипе стала простым способом повышения производительности — первым ориентированным на потребителя процессором Pentium 4 Extreme Edition от Intel был перепрофилированный процессор Gallatin Xeon с 2 МБ L3 на кристалле. Добавление этого кэша было достаточным, чтобы купить Pentium 4 EE на 10-20 процентов прироста производительности по сравнению со стандартной линейкой Northwood.
Кэш и многоядерные кривые
По мере того, как многоядерные процессоры стали более распространенными, кэш L3 стал чаще появляться на потребительском оборудовании.Эти чипы, такие как Intel Nehalem и AMD K10 (Barcelona), использовали L3 как нечто большее, чем просто более крупную и медленную опору для L2. В дополнение к этой функции, кэш L3 часто используется совместно всеми процессорами на одном кристалле. В этом отличие от кешей L1 и L2, которые, как правило, являются частными и предназначены для нужд каждого конкретного ядра. (Конструкция AMD Bulldozer является исключением — Bulldozer, Piledriver и Steamroller используют общий кэш инструкций L1 между двумя ядрами в каждом модуле).
Intel Haswell-E, например, имеет восемь отдельных ядер, которые все выполняют резервное копирование в общий кэш L3.
Частные кэши L1 / L2 и общий L3 — вряд ли единственный способ разработать иерархию кешей, но это общий подход, принятый несколькими поставщиками. Предоставление каждому отдельному ядру выделенных L1 и L2 сокращает задержки доступа и снижает вероятность конфликта кешей — это означает, что два разных ядра не будут перезаписывать важные данные, которые другое размещает в одном месте, в пользу своей собственной рабочей нагрузки.Общий кэш L3 медленнее, но намного больше, что означает, что он может хранить данные для всех ядер одновременно. Сложные алгоритмы используются, чтобы гарантировать, что Core 0 стремится хранить информацию ближе всего к себе, в то время как Core 7 через кристалл также помещает необходимые данные ближе к себе.
В отличие от L1 и L2, которые почти всегда ориентированы на ЦП и являются частными, L3 также может использоваться совместно с другими устройствами или возможностями. Процессоры Intel Sandy Bridge использовали кэш L3 объемом 8 МБ совместно с встроенным графическим ядром (Ivy Bridge предоставил графическому процессору собственный выделенный фрагмент кеша L3 вместо всех 8 МБ).
В отличие от кешей L1 и L2, оба из которых обычно являются фиксированными и различаются очень незначительно (и в основном для бюджетных компонентов), AMD и Intel предлагают разные чипы со значительно различающимся объемом L3. Intel обычно продает как минимум несколько процессоров Xeon с меньшим количеством ядер, более высокими частотами и более высоким соотношением кэш-памяти L3 на процессор. Процессоры Intel Core i7 поддерживали 8 МБ L3 с момента дебюта Nehalem в 2008 году (примерно 2 МБ L3 на каждое ядро ЦП), но самые дорогие компоненты обычно привязаны к 2.5 МБ кеш-памяти на каждое ядро процессора.
Сегодня L3 характеризуется как пул быстрой памяти, общей для всех процессоров на SoC. Он часто блокируется независимо от остального ядра ЦП и может быть динамически разделен для баланса скорости доступа, энергопотребления и емкости хранилища. Хотя он и не так быстр, как L1 или L2, он часто более гибкий и играет жизненно важную роль в управлении межъядерным взаимодействием. Поскольку Intel уже добавила L4 в свои чипы Skylake, возможно, мы увидим, что L3 будет играть более упрощенную роль — некоторые из его функций и возможностей будут перенесены на новый, больший пул кеша.
.
изменить и включить L2 и L3 кэшей ЦП
Windows была создана для использования на максимальном количестве машин с различными конфигурациями, и поэтому она обычно не оптимизирована для вашего компьютера и вашего использования. Я также предлагаю вам прочитать другие наши статьи статьи об оптимизации ваших компьютеров, если это уже сделано. А «неоптимизация», это на уровне процессора. У наших процессоров есть кеши, которые позволяют им помещать в память некоторые данные, чтобы ускорить их восстановление в будущем: http: // fr.wikipedia.org/wiki/M%C3%A9moire_cache, в зависимости от процессоров, у вас может быть 2 или 3 уровня () кеша. По умолчанию Windows использует кэш L2 (уровень 2) размером 256 кбайт, что означает, что если ваш ЦП может использовать больше места (что обычно так и будет, пройдет больше времени с учетом продолжающейся эволюции процессоров) ), Windows ограничила возможности вашего процессора! И я даже не говорю о кэше L3, потому что Windows не использует его, как будто у вас нет этой третьей кэш-памяти, которая является самой большой из трех уровней кеширования процессора!
Информация о процессоре:
Первое, что нужно сделать, это узнать возможности ЦП (процессора), для этого:
- Загрузить CPU — Z: http: // www.cpuid.com/softwares/cpu-z.html
- Установите и откройте
- Чтобы увидеть различные уровни кеша, у вас есть 2 возможности: 1-я вкладка, внизу справа или 2-я вкладка
Для увеличения кэша L2 в Windows:
- В меню «Пуск» найдите и откройте «regedit» (база данных реестра) (как и при любых манипуляциях с базой данных реестра, желательно сделать резервную копию своего компьютера в случае возникновения проблем)
- Дважды щелкните HKEY_LOCAL_MACHINE & gt; СИСТЕМА & gt; CurrentControlSet & gt; Контроль & gt; Менеджер сеанса & gt; Управление памятью
- в правом окне, вы должны найти ключ с именем «SecondLevelDataCache», щелкните его правой кнопкой мыши и выберите «Изменить».
- Нажмите «Десятичный»
- И замените на истинную стоимость вашего процессора.В моем случае CPU-Z сообщает мне 2 x 256, поэтому значение, которое нужно указать в моем случае, равно 512.
- Нажмите «ОК»
Чтобы включить кэш L3 в Windows:
- Шаги с 1 по 2 такие же, как для L2, и поэтому поступают в то же окно на шаге 3.
- В свободной области в правом окне щелкните правой кнопкой мыши и выберите «Создать» & gt; «32-битное значение DWORD»
- Переименуйте новый ключ в «ThirdLevelDataCache» (без кавычек)
- Щелкните правой кнопкой мыши этот новый ключ, переименованный, и нажмите «Изменить».
- Нажмите «Десятичный»
- Измените значение на значение вашего процессора, указанное как CPU — Z: в моем случае у меня 3 МБ, поэтому мне нужно сделать 3 x 1024, что означает, что я должен поставить 3072 в качестве значения.
- Нажмите «ОК».
Перезагрузите компьютер. При 1 перезагрузке ваш компьютер может работать немного медленнее, чем обычно, это связано с тем, что Windows необходимо включить эти новые данные, но позже ваш компьютер должен стать быстрее и мощнее! Лично я при 1-й перезагрузке не тормозил, но заметил улучшение скорости работы программ, особенно на уровне многозадачности, несмотря на то, что у кого уже есть SSD на моем ПК! Примечание: этот трюк не относится к разгону, поэтому отсутствует риск перегрева, который может быть обнаружен при разгоне.
.
Athlon II или Phenom II: нужен ли вашему процессору кэш L3?
Кэш
L3: насколько он важен для AMD?
Имеет смысл оснастить многоядерные процессоры выделенной памятью, используемой совместно всеми доступными ядрами. В этой роли быстрый кэш третьего уровня (L3) может ускорить доступ к часто необходимым данным. Ядра не должны возвращаться к более медленной основной памяти (ОЗУ), когда это возможно.
По крайней мере, это теория. Недавний выпуск AMD Athlon II X4, который по сути является Phenom II X4 без L3, подразумевает, что третичный кэш не всегда может быть необходим.Мы решили провести сравнение яблок с яблоками, используя оба варианта, и выяснить это.
Как работает кэш
Прежде чем углубиться в наши тесты, важно понять некоторые основы. Принцип работы кешей довольно прост. Они буферизуют данные как можно ближе к ядру (ядрам) обработки, чтобы избежать необходимости доступа ЦП к данным из более удаленных и медленных источников памяти. Сегодняшняя иерархия кеш-памяти настольных платформ состоит из трех уровней кеш-памяти, прежде чем достигается доступ к системной памяти.Второй и особенно третий уровни предназначены не только для буферизации данных. Их цель также состоит в том, чтобы предотвратить засорение шины ЦП из-за ненужного трафика обмена данными между ядрами.
Попытки / промахи в кэше
Эффективность архитектуры кэширования измеряется по частоте попаданий. Запросы данных, на которые можно ответить в заданном кэше, называются попаданиями. Если этот кеш не содержит искомых данных и должен передать запрос в последующие структуры памяти, это промах.Очевидно, промахи случаются медленно. Они приводят к остановкам в конвейере выполнения и вводят периоды ожидания. С другой стороны, удары помогают поддерживать максимальную производительность.
Записи в кэш, эксклюзивность, когерентность
Политики замены определяют способ создания места в полном кэше для новых записей кэша. Поскольку данные, записанные в кэш, в конечном итоге должны быть доступны в основной памяти, системы могут либо сделать это одновременно (сквозная запись), либо пометить перезаписанные места как «грязные» (обратная запись) и выполнить запись после того, как данные стирается из кеша.
Данные на нескольких уровнях кэша могут храниться исключительно, что означает отсутствие избыточности. Вы не найдете один и тот же фрагмент данных в двух разных структурах кеша. В качестве альтернативы кеши могут работать инклюзивным образом, при этом более низкие уровни гарантированно содержат данные, обнаруженные на более высоких уровнях (ближе к процессору) кеша. AMD Phenom работает с эксклюзивным кешем L3, а Intel следует стратегии инклюзивного кеширования. Протоколы когерентности заботятся о поддержании данных на нескольких уровнях, ядрах и даже процессорах.
Емкость кэша
Кеши большего размера могут буферизовать больше данных, но они также имеют тенденцию к увеличению задержки. Поскольку кэш также потребляет большое количество транзисторов процессора, важно найти разумный баланс между стоимостью транзистора и размером кристалла, потребляемой мощностью и проблемами производительности / задержки.
Ассоциативность
Записи ОЗУ могут быть либо с прямым отображением, что означает, что может быть только одна позиция в кэше для копий основной памяти, либо они могут быть n-сторонними ассоциативными, что означает n возможных положений в кеш для хранения данных.Более высокая ассоциативность (вплоть до полностью ассоциативных кешей) обеспечивает лучшую гибкость кэширования, поскольку существующие данные кеша не нужно перезаписывать. Другими словами, высокая n-сторонняя ассоциативность гарантирует более высокую частоту совпадений, но приводит к большей задержке, поскольку для сравнения всех этих ассоциаций на совпадения требуется больше времени. В конечном счете, имеет смысл реализовать многостороннюю ассоциативность для последнего уровня кэша, потому что он имеет наибольшую доступную емкость, а поиск за пределами этого уровня приведет к перегрузке процессора в более медленную системную память.
Вот несколько примеров: Core i5 и i7 работают с 32 КБ 8-стороннего ассоциативного кэша данных L1 и 32 КБ 4-стороннего ассоциативного кэша инструкций L1. Ясно, что Intel хочет, чтобы инструкции были доступны быстрее, а также максимально увеличивали количество обращений в кэш данных L1. Его кэш L2 также является 8-сторонним ассоциативным по множеству, в то время как кэш Intel L3 еще умнее, реализуя 16-стороннюю ассоциативность для максимизации попаданий в кэш.
Однако AMD следует другой стратегии в отношении Phenom II X4 с двухсторонней ассоциативной ассоциативной кэш-памятью L1, которая обеспечивает более низкие задержки.Чтобы компенсировать возможные промахи, он имеет вдвое больший объем памяти: 64 КБ данных и 64 КБ кэша инструкций. Кэш L2 является 8-позиционным ассоциативным набором, как и в дизайне Intel, но кэш L3 AMD работает с 48-позиционной ассоциативностью набора. Ни о чем из этого нельзя судить, не глядя на всю архитектуру процессора. Естественно, действительно учитываются только результаты тестов, но вся цель этого технического экскурса — показать сложность многоуровневого кэширования.
.