Что такое кэш l1. Галерея эффектов кэшей процессоров. Назначение кеш памяти

Деревья 15.04.2022
Деревья

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

Ряд моделей центральных процессоров (ЦП) обладают собственным кэшем, для того чтобы минимизировать доступ к оперативной памяти (ОЗУ), которая медленнее, чем регистры. Кэш-память может давать значительный выигрыш в производительности, в случае когда тактовая частота ОЗУ значительно меньше тактовой частоты ЦП. Тактовая частота для кэш-памяти обычно ненамного меньше частоты ЦП.

Уровни кэша

Кэш центрального процессора разделён на несколько уровней. В универсальном процессоре в настоящее время число уровней может достигать 3. Кэш-память уровня N+1 как правило больше по размеру и медленнее по скорости доступа и передаче данных, чем кэш-память уровня N.

Самой быстрой памятью является кэш первого уровня -- L1-cache. По сути, она является неотъемлемой частью процессора, поскольку расположена на одном с ним кристалле и входит в состав функциональных блоков. В современных процессорах обычно кэш L1 разделен на два кэша, кэш команд (инструкций) и кэш данных (Гарвардская архитектура). Большинство процессоров без L1 кэша не могут функционировать. L1 кэш работает на частоте процессора, и, в общем случае, обращение к нему может производиться каждый такт. Зачастую является возможным выполнять несколько операций чтения/записи одновременно. Латентность доступа обычно равна 2?4 тактам ядра. Объём обычно невелик -- не более 384 Кбайт.

Вторым по быстродействию является L2-cache -- кэш второго уровня, обычно он расположен на кристалле, как и L1. В старых процессорах -- набор микросхем на системной плате. Объём L2 кэша от 128 Кбайт до 1?12 Мбайт. В современных многоядерных процессорах кэш второго уровня, находясь на том же кристалле, является памятью раздельного пользования -- при общем объёме кэша в nM Мбайт на каждое ядро приходится по nM/nC Мбайта, где nC количество ядер процессора. Обычно латентность L2 кэша, расположенного на кристалле ядра, составляет от 8 до 20 тактов ядра.

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

Иногда существует и 4 уровень кэша, обыкновенно он расположен в отдельной микросхеме. Применение кэша 4 уровня оправдано только для высоко производительных серверов и мейнфреймов.

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

Что такое кэш память процессора

Выполняет примерно ту же функцию, что и оперативная память . Только кэш - это память встроенная в процессор . Кэш-память используется процессором для хранения информации. В ней буферизируются самые часто используемые данные, за счет чего, время очередного обращения к ним значительно сокращается. Если емкость оперативной памяти на новых компьютерах от 1 Гб, то кэш у них около 2-8 Мб. Как видите, разница в объеме памяти ощутимая. Но даже этого объема вполне хватает, чтобы обеспечить нормальное быстродействие всей системы. Сейчас распространены процессоры с двумя уровнями кэш-памяти: L1 (первый уровень) и L2 (второй). Кэш первого уровня намного меньше кэша второго уровня, он обычно около 128 Кб. Используется он для хранения инструкций. А вот второй уровень используется для хранения данных, поэтому он больше. Кэш второго уровня сейчас у большинства процессоров общий. Но не у всех, вот например у AMD Athlon 64 X 2 у каждого ядра по своему кэшу L2. Кампания AMD обещает в скором времени предоставить процессор AMD Phenom с четырьмя ядрами и тремя уровнями кэш-памяти.

Программный кэш

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

Кэш центрального процессора

Функционирование

Диаграмма кэша памяти ЦПУ

Кэш - это память с большей скоростью доступа, предназначенная для ускорения обращения к данным, содержащимся постоянно в памяти с меньшей скоростью доступа (далее «основная память»). Кэширование применяется ЦПУ , жёсткими дисками , браузерами и веб-серверами .

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

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

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

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

При модификации элементов данных в кэше выполняется их обновление в основной памяти. Задержка во времени между модификацией данных в кэше и обновлением основной памяти управляется так называемой политикой записи .

В кэше с немедленной записью каждое изменение вызывает синхронное обновление данных в основной памяти.

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

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

Что такое кэш процессора?

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

Как вы знаете, – это часть оборудования компьютера, которая характеризуется наиболее медленными скоростями обмена данными. Если процессору понадобится какая-то информация, он отправляется за ней к оперативной памяти по одноимённой шине. Получив от процессора запрос, та начинает копаться в своих анналах в поисках нужных процессору данных. По получению ОЗУ пересылает их обратно в процессор по той же шине памяти. Такой круг для обмена данными всегда был длинноват. Потому производители и решили, что можно было бы позволить процессору хранить данные где-нибудь поблизости. Принцип работы кэша основан на простой идее.

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

Зачем же нужен кэш процессору?

А теперь представьте, что библиотекарю надоело постоянно носиться туда-сюда с книгами, которые постоянно у неё требуют из года в год, изо дня в день. Он обзавёлся большой тумбой, где хранит наиболее часто запрашиваемые книги и учебники. Остальные, что положены, конечно, так и продолжают храниться на прежних полках. Но эти – всегда под рукой. Сколько же времени он сэкономил этой тумбой и себе, и остальным. Это и есть кэш.

Значит, кэш умеет сохранять только самые требуемые данные?

Да. Но он может большее. Например, уже сохраняя в себе часто требуемые данные, он способен оценить (с помощью процессора) ситуацию и затребовать информацию, которая вот-вот понадобиться. Так, клиент видео проката, затребовавший фильм «Крепкий орешек» с первой частью, скорее всего, попросит вторую. А вот она! Также и с кэшем процессора. Обращаясь к ОЗУ и сохраняя определённые данные, он извлекает и данные из соседних ячеек памяти. Такие куски данных получили название строка кэша.

Что такое двухуровневый кэш?

Современный процессор имеет два уровня. Соответственно, первый и второй. Обозначаются литерой L от английского Level. Первый – L1 – более быстрый, но по объёму невелик. Второй – L2 – чуть больше, но медленнее, но быстрее, нежели оперативная память. Кэш первого уровня делится на кэш инструкций и кэш данных. Кэш инструкций хранит в себе тех их набор, которые необходимы процессору для расчётов. Тогда как в кэше данных сохраняются величины или значения, необходимые для текущего вычисления. А кэш второго уровня используется для подгрузки данных из оперативной памяти компьютера. Принцип работы уровней кэша также можно объяснить с помощью примера школьной библиотеки. Так, заполнив купленную тумбу, библиотекарь понимает, что её уже не хватает на книги, ради которых постоянно приходится бегать по залу. Но список таких книг окончательно оформлен, и нужно купить такую же тумбу. Первую он выбрасывать не стал – жалко – и просто докупил вторую. И теперь, по мере заполняемости первой, библиотекарь начинает заполнять вторую, которая вступает в дело, когда первая заполнена, но нужные книги в неё не поместились. С уровнями кэша то же самое. И по мере развития микропроцессорной техники уровни кэша процессора растут в своих объёмах.

Кэш будет продолжать расти?

Вряд ли. Погоня за частотой процессора тоже продолжалась недолго, и производители нашли другие пути увеличения мощности. Также и с кэшем. Говоря конкретно, объём и количество уровней бесконечно раздувать нельзя. Кэш не должен превращаться в ещё одну планку оперативной памяти с медленной скоростью доступа к ней или превращать размеры процессора до уровня в половину материнской платы. Ведь скорость доступа к данным – это, прежде всего, энергопотребление и затрата производительности самого процессора. Также стали учащаться промахи кэша (в противоположность к попаданию кэша), когда процессор обращается к кэшированной памяти за данными, которых там не оказывается. Данные в кэше постоянно обновляются, используя различные алгоритмы, чтобы вероятность попадания кэша усилить.

Прочитано: 644

Сегодняшняя статья не является самостоятельным материалом - она просто продолжает исследование производительности трех поколений архитектуры Core в равных условиях (начатое в конце прошлого года и продолженное недавно). Правда, сегодня мы сделаем небольшой шаг в сторону - часто́ты ядер и кэш-памяти останутся теми же, что и ранее, а вот емкость последней уменьшится. Зачем это нужно? Мы использовали «полный» Core i7 двух последних поколений для чистоты эксперимента, тестируя его с включенной и отключенной поддержкой технологии Hyper-Threading, поскольку вот уже полтора года как Core i5 снабжаются не 8, а 6 МиБ L3. Понятно, что влияние емкости кэш-памяти на производительность не так уж велико, как иногда принято считать, но оно есть, и никуда от него не деться. К тому же, Core i5 являются более массовыми продуктами, чем Core i7, а в первом поколении по этому параметру их никто «не обижал». Зато раньше их чуть ограничивали по-другому: тактовая частота UnCore в i5 первого поколения составляла всего 2,13 ГГц, так что наш «Nehalem» - это не совсем представитель 700-й линейки на частоте 2,4 ГГц, а немного более быстрый процессор. Однако сильно расширять список участников и переделывать условия тестирования мы сочли излишним - все равно, как мы уже не раз предупреждали, тестирования этой линейки никакой новой практической информации не несут: реальные процессоры работают совсем в других режимах. А вот желающим досконально разобраться во всех тонких моментах, как нам кажется, такое тестирование будет интересно.

Конфигурация тестовых стендов

Мы решили ограничиться всего четырьмя процессорами, причем главных участников будет два: оба четырехъядерных Ivy Bridge, но с разной емкостью кэш-памяти третьего уровня. Третий - «Nehalem HT»: в прошлый раз по итоговому баллу он оказался почти идентичен «Ivy Bridge просто». И «просто Nehalem» который, как мы уже сказали, чуть-чуть быстрее настоящего Core i5 первого поколения, работающего на частоте 2,4 ГГц (из-за того, напомним, что в 700-й линейке частота UnCore была немного ниже), но не слишком радикально. Зато и сравнение интересно: с одной стороны - два шага улучшения микроархитекутры, с другой - кэш-память ограничили. Априори можно предположить, что первое в большинстве случаев перевесит, но вот насколько и вообще - как сопоставимы «первые» и «третьи» i5 (с поправкой на частоту UnCore, конечно, хотя если будет много желающих увидеть абсолютно точное сравнение, мы и его потом сделаем) - уже хорошая тема для исследования.

Тестирование

Традиционно, мы разбиваем все тесты на некоторое количество групп и приводим на диаграммах средний результат по группе тестов/приложений (детально с методикой тестирования вы можете ознакомиться в отдельной статье). Результаты на диаграммах приведены в баллах, за 100 баллов принята производительность референсной тестовой системы сайт образца 2011 года. Основывается она на процессоре AMD Athlon II X4 620, ну а объем памяти (8 ГБ) и видеокарта () являются стандартными для всех тестирований «основной линейки» и могут меняться только в рамках специальных исследований. Тем, кто интересуется более подробной информацией, опять-таки традиционно предлагается скачать таблицу в формате Microsoft Excel , в которой все результаты приведены как в преобразованном в баллы, так и в «натуральном» виде.

Интерактивная работа в трёхмерных пакетах

Некоторое влияние емкости кэш-памяти есть, однако оно менее 1%. Соответственно, оба Ivy Bridge можно считать идентичными друг другу, ну а улучшения архитектуры позволяют новым Core i5 спокойно обгонять старые Core i7 точно также, как это делают новые Core i7.

Финальный рендеринг трёхмерных сцен

В данном случае, естественно, никакие усовершенствования не могут скомпенсировать увеличение количества обрабатываемых потоков, но сегодня для нас самым важным является не это, а полное отсутствие влияния емкости кэш-памяти на производительность. Вот Celeron и Pentium, как мы уже установили , разные процессоры, так что программы рендеринга чувствительны к емкости L3, однако лишь тогда, когда последнего мало. А 6 МиБ на четыре ядра, как видим, вполне достаточно.

Упаковка и распаковка

Естественно, эти задачи восприимчивы к емкости кэш-памяти, однако и здесь эффект от ее увеличения с 6 до 8 МиБ достаточно скромный: примерно 3,6%. Более интересно, на самом деле, сравнение с первым поколением - архитектурные улучшения позволяют новым i5 на равных частотах «громить» даже старые i7, но это в общем зачете: благодаря тому, что два теста из четырех однопоточные, а еще один двухпоточный. Сжатие данных силами 7-Zip, естественно, быстрее всего на «Nehalem HT»: восемь потоков всегда быстрее четырех сравнимой производительности. А вот если ограничиться всего четырьмя, то наш «Ivy Bridge 6М» проигрывает не только своему прародителю, но и старичку Nehalem: улучшения микроархитектуры полностью пасуют перед уменьшением емкости кэш-памяти.

Кодирование аудио

Несколько неожиданным оказался не размер разницы между двумя Ivy Bridge, а то, что она вообще есть. Правда настолько копеечная, что ее можно и на особенности округления или погрешности измерения списать.

Компиляция

Важны потоки, но важна и емкость кэш-памяти. Однако, как обычно, не слишком - порядка 1,5%. Более любопытно сравнение с первым поколением Core при отключенном Hyper-Threading: «по очкам» новенький Core i5 даже на равной частоте побеждает, но один из трех компиляторов (производства Microsoft, если быть точным) отработал на обоих процессорах за одинаковое время. Даже с преимуществом в 5 секунд у более старого - притом, что в этой программе у «полнокэшевого» Ivy Bridge результаты на 4 секунды лучше, чем у Nehalem. В общем, и здесь нельзя считать, что уменьшение емкости L3 как-то сильно повлияло на Core i5 второго и третьего поколения, но есть и нюансы.

Математические и инженерные расчёты

Опять менее 1% разницы со «старшим» кристаллом и опять убедительная победа над первым поколением во всех его видах. Что скорее правило, чем исключение для подобных малопоточных тестов, но почему бы в нем в очередной раз не убедиться? Особенно в таком вот рафинированном виде, когда (в отличие от тестов в штатном режиме) не мешает разница в частотах («стандартных» или появляющаяся из-за работы Turbo Boost).

Растровая графика

Но и при более полной утилизации многопоточности картина не всегда меняется. А емкость кэш-памяти не дает вовсе ничего.

Векторная графика

И здесь аналогично. Правда и потоков вычисления нужна всего парочка.

Кодирование видео

В отличие от этой группы, где, тем не менее, даже Hyper-Threading не позволяет Nehalem бороться на равных с последователями более новых поколений. А вот им не слишком мешает уменьшение емкости кэш-памяти. Точнее, практически вообще не мешает, поскольку разница опять менее 1%.

Офисное ПО

Как и следовало ожидать, никакого прироста производительности от увеличения емкости кэш-памяти (точнее, ее падения от уменьшения) нет. Хотя если посмотреть на подробные результаты, то видно, что единственный многопоточный тест этой группы (а именно распознавание текста в FineReader) выполняется примерно на 1,5% быстрее при 8 МиБ L3, нежели на 6 МиБ. Казалось бы - что такое 1,5%? С точки зрения практики - ничто. А вот с исследовательской точки зрения уже интересно: как видим, именно многопоточным тестам чаще всего не хватает кэш-памяти. В результате разница (пусть и небольшая) иногда находится даже там, где ее быть, вроде бы, не должно. Хотя ничего такого уж необъяснимого в этом нет - грубо говоря, в малопоточных тестах мы имеем 3-6 МиБ на поток, а вот в многопоточных там же получается 1,5 МиБ. Первого - много, а вот второго может оказаться и не совсем достаточно.

Java

Впрочем, Java-машина с такой оценкой не согласна, но и это объяснимо: как мы уже не раз писали, она очень хорошо оптимизирована вовсе не под х86-процессоры, а под телефоны и кофеварки, где ядер может быть много, но вот кэш-памяти очень мало. А иногда и ядер, и кэш-памяти мало - дорогие ресурсы как по площади кристалла, так и по энергопотреблению. И, если с ядрами и мегагерцами что-то сделать получается, то вот с кэшом все сложнее: в четырехъядерной Tegra 3 его, к примеру, всего 1 МиБ. Понятно, что JVM может «схрюпать» и больше (как и все системы с байт-кодом), что мы уже видели сравнивая Celeron и Pentium, но более 1,5 МиБ на поток ей если и может пригодиться, то не в тех задачах, которые вошли в SPECjvm 2008.

Игры

На игры у нас были большие надежды, поскольку к емкости кэш-памяти они нередко оказываются более требовательными чем даже архиваторы. Но бывает такое тогда, когда ее совсем мало, а 6 МиБ - как видим, достаточно. Да и, опять же, процессоры уровня четырехъядерных Core любых поколений даже на частоте 2,4 ГГц слишком мощное решение для используемых игровых приложений, так что узким местом явно будут не они, а прочие компоненты системы. Поэтому мы решили стряхнуть пыль с режимов с низким качеством графики - понятно, что для таких систем он слишком уж синтетичен, но у нас и все тестирование синтетическое:)

Когда не мешают всякие там видеокарты и прочее, разница между двумя Ivy Bridge достигает уже «безумных» 3%: и в этом случае можно не обращать внимания на практике, но для теории - немало. Больше вышло как раз только в архиваторах.

Многозадачное окружение

Где-то мы уже такое видели. Ну да - когда тестировали шестиядерные процессоры под LGA2011. И вот ситуация повторяется: нагрузка что ни на есть многопоточная, часть используемых программ до кэш-памяти «жадная», а вот ее увеличение только снижает среднюю производительность. Чем это можно объяснить? Разве что тем, что усложняется арбитраж и увеличивается количество промахов. Причем, заметим, происходит такое только тогда, когда емкость L3 относительно велика и одновременно работающих потоков вычисления не менее четырех - в бюджетном сегменте совсем другая картина. Во всяком случае, как показало наше недавнее тестирование Pentium и Celeron, для двухъядерных процессоров увеличение L3 с 2 до 3 МиБ добавляет 6% производительности. А вот четырех- и шестиядерным не дает, мягко говоря ничего. Даже менее, чем ничего.

Итого

Закономерный общий итог: поскольку нигде существенной разницы между процессорами с разным объемом L3 не обнаружилось, нет ее и в «общем и целом». Таким образом, расстраиваться по поводу уменьшения емкости кэш-памяти во втором и третьем поколении Core i5 поводов нет - предшественники первого поколения им все равно не конкуренты. Да и старые Core i7 в среднем тоже демонстрируют лишь аналогичный уровень производительности (разумеется, в основном за счет отставания в малопоточных приложениях - а так есть сценарии, с которыми в равных условиях они справляются быстрее). Но, как мы уже говорили, на практике реальные процессоры находятся далеко не в равных условиях по частотам, так что практическая разница между поколениями больше, чем можно получить в таких вот исследованиях.

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

Рекомендуем почитать

Наверх