Разное

Что такое кэш память процессора: Влияние кэш-памяти процессора на быстродействие компьютера

Содержание

Логическая организация кэш-памяти процессора / Хабр

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

Кэш память процессора используется для уменьшения времени простоя процессора при обращении к RAM.

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

Логически кэш-память представляет собой набор кэш-линий. Каждая кэш-линия хранит блок данных определенного размера и дополнительную информацию. Под размером кэш-линии понимают обычно размер блока данных, который в ней хранится. Для архитектуры x86 размер кэш линии составляет 64 байта.

Так вот суть кэширования состоит в разбиении RAM на кэш-линии и отображении их на кэш-линии кэш-памяти. Возможно несколько вариантов такого отображения.

DIRECT MAPPING

Основная идея прямого отображения (direct mapping) RAM на кэш-память состоит в следующем: RAM делится на сегменты, причем размер каждого сегмента равен размеру кэша, а каждый сегмент в свою очередь делится на блоки, размер каждого блока равен размеру кэш-линии.

Блоки RAM из разных сегментов, но с одинаковыми номерами в этих сегментах, всегда будут отображаться на одну и ту же кэш-линию кэша:

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

Таким образом нет необходимости хранить полный адрес кэш-линии, достаточно сохранить только старшую часть адреса. Тэг (tag) каждой кэш-линии как раз и хранит старшую часть адреса первого байта в данной кэш-линии.

b — размер кэш-линии.

m — количество кэш-линий в кэше.

Для адресации b байт внутри каждой кэш-линии потребуется: log2b бит.

Для адресации m кэш-линий внутри каждого сегмента потребуется: log2m бит.

m = Объем кэш-памяти/Размер кэш линии.

Для адресации N сегментов RAM: log2N бит.

N = Объем RAM/Размер сегмента.

Для адресации байта потребуется: log2N + log2m + log2b бит.

Этапы поиска в кэше:

1. Извлекается средняя часть адреса (log2m), определяющая номер кэш-линии в кэше.

2. Тэг кэш-линии с данным номером сравнивается со старшей частью адреса (log2N).

Если было совпадение по одному из тэгов, то произошло кэш-попадание.

Если не было совпадение ни по одному из тэгов, то произошел кэш-промах.

FULLY ASSOCIATIVE MAPPING

Основная идея полностью ассоциативного отображения (fully associative mapping) RAM на кэш-память состоит в следующем: RAM делится на блоки, размер которых равен размеру кэш-линий, а каждый блок RAM может сохраняться в любой кэш-линии кэша:

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

Тэг (tag) каждой кэш-линии хранит старшую часть адреса первого байта в данной кэш-линии.

b — размер кэш-линии.

m — количество кэш-линий, умещающихся в RAM.

Для адресации b байт внутри каждой кэш-линии потребуется: log2b бит.

Для адресации m кэш-линий: log2m бит.

m = Размер RAM/Размер кэш-линии.

Для адресации байта потребуется: log2m + log2b бит.

Этапы поиска в кэше:

1. Тэги всех кэш-линий сравниваются со старшей частью адреса одновременно.

Если было совпадение по одному из тэгов, то произошло кэш-попадание.

Если не было совпадение ни по одному из тэгов, то произошел кэш-промах.

SET ASSOCIATIVE MAPPING

Основная идея наборно ассоциативного отображения (set associative mapping) RAM на кэш-память состоит в следующем: RAM делится также как и в прямом отображении, а сам кэш состоит из k кэшей (k каналов), использующих прямое отображение.

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

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

Структура адреса байта в точности такая же, как и в прямом отображении: log2N + log2m + log2b бит, но т.к. set представляет собой k различных кэш-линий, то поиск в кэше немного отличается.

Этапы поиска в кэше:

1. Извлекается средняя часть адреса (log2m), определяющая номер сэта в кэше.

2. Тэги всех кэш-линий данного сета сравниваются со старшей частью адреса (log2N) одновременно.

Если было совпадение по одному из тэгов, то произошло кэш-попадание.

Если не было совпадение ни по одному из тэгов, то произошел кэш-промах.

Т.о количество каналов кэша определяет количество одновременно сравниваемых тэгов.

На что влияет кэш процессора L1 L2 L3

Компьютерные процессоры сделали значительный рывок в развитии за последние несколько лет. Размер транзисторов с каждым годом уменьшается, а производительность растет. При этом закон Мура уже становится неактуальным. Что касается производительности процессоров, то следует учитывать, не только количество транзисторов и частоту, но и объем кэша.

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

Содержание статьи:

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

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

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

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

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

Как вы, возможно, уже знаете, программа — это набор инструкций, которые выполняет процессор. Когда вы запускаете программу, компьютеру надо перенести эти инструкции из постоянной памяти в процессору. И здесь вступает в силу иерархия памяти. Сначала данные загружаются в оперативную память, а потом передаются в процессор.

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

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

Уровни кэша процессора — L1, L2 и L3

Веся кэш память процессора разделена на три уровни: L1, L2 и L3. Эта иерархия тоже основана на скорости работы кэша, а также на его объеме.

  • L1 Cache (кэш первого уровня) — это максимально быстрый тип кэша в процессоре. С точки зрения приоритета доступа, этот кэш содержит те данные, которые могут понадобиться программе для выполнения определенной инструкции;
  • L2 Cache (кэш второго уровня процессора) — медленнее, по сравнению L1, но больше по размеру. Его объем может быть от 256 килобайт до восьми мегабайт. Кэш L2 содержит данные, которые, возможно, понадобятся процессору в будущем. В большинстве современных процессоров кэш L1 и L2 присутствуют на самих ядрах процессора, причём каждое ядро получает свой собственный кэш;
  • L3 Cache (кэш третьего уровня) — это самый большой и самый медленный кэш. Его размер может быть в районе от 4 до 50 мегабайт. В современных CPU на кристалле выделяется отдельное место под кэш L3.

На данный момент это все уровни кэша процессора, компания Intel пыталась создать кэш уровня L4, однако, пока эта технология не прижилась.

Для чего нужен кэш в процессоре?

Пришло время ответить на главный вопрос этой статьи, на что влияет кэш процессора? Данные поступают из ОЗУ в кэш L3, затем в L2, а потом в L1. Когда процессору нужны данные для выполнения операции, он пытается их найти в кэше L1 и если находит, то такая ситуация называется попаданием в кэш. В противном случае поиск продолжается в кэше L2 и L3. Если и теперь данные найти не удалось, выполняется запрос к оперативной памяти.

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

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

Как кэш влияет на производительность?

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

Представьте, что процессор загружает данные из кэша L1 100 раз подряд. Если процент попаданий в кэш будет 100%, процессору понадобиться 100 наносекунд чтобы получить эти данные. Однако, как только процент попаданий уменьшится до 99%, процессору нужно будет извлечь данные из кэша L2, а там уже задержка 10 наносекунд. Получится 99 наносекунд на 99 запросов и 10 наносекунд на 1 запрос. Поэтому уменьшение процента попаданий в кэш на 1% снижает производительность процессора 10%.

В реальном времени процент попаданий в кэш находится между 95 и 97%. Но как вы понимаете, разница в производительности между этими показателями не в 2%, а в 14%. Имейте в виду, что в примере, мы предполагаем, что прощенные данные всегда есть в кэше уровня L2, в реальной жизни данные могут быть удалены из кэша, это означает, что их придется получать из оперативной памяти, у которой задержка 80-120 наносекунд. Здесь разница между 95 и 97 процентами ещё более значительная.

Низкая производительность кэша в процессорах AMD Bulldozer и Piledriver была одной из основных причин, почему они проигрывали процессорам Intel. В этих процессорах кэш L1 разделялся между несколькими ядрами, что делало его очень не эффективным. В современных процессорах Ryzen такой проблемы нет.

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

Выводы

Теперь вы знаете за что отвечает кэш процессора и как он работает. Дизайн кэша постоянно развивается, а память становится быстрее и дешевле. Компании AMD и Intel уже провели множество экспериментов с кэшем, а в Intel даже пытались использовать кэш уровня L4. Рынок процессоров развивается куда быстрее, чем когда-либо. Архитектура кэша будет идти в ногу с постоянно растущей мощностью процессоров.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Что такое кэш-память процессора, понятие кеш памяти

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

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

Для чего процессору нужна кэш-память?

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

Кэш-память хранит только наиболее часто используемые элементы данных?

Нет, кэш-память является довольно интеллектуально продвинутой памятью, в которую помещаются также и те данные, которые, вероятно, будут востребованы в ближайшее время. Продолжая нашу аналогию с библиотекарем, это можно объяснить следующим образом. Когда посетитель просит библиотекаря достать ему первую часть Гарри Поттера, то наш догадливый библиотекарь также берет с полки и вторую часть Гарри Поттера, резонно полагая, что посетитель, прочитав первую часть, в скором времени попросит и вторую. И когда тот ее просит, то она тут же достается из того же ящика стола. Аналогичным образом, когда кэш-память извлекает элементы данных из основной памяти, она также выбирает данные, которые находятся по адресам, рядом с затребованными данными. Эти рядом расположенные блоки данных, которые передаются в кэш, называется строки кэша.

Два уровня кэш-памяти процессора

Большинство жестких дисков и некоторых других компонентов компьютера используют всего один уровень кэш – памяти. В отличие от них, кэш – память процессора является двухуровневой, в которой кэш 1-го уровня (L1) меньше и быстрее, а кэш 2-го уровня немного медленнее первого, но при этом намного быстрее, чем оперативная память. Кэш L1 разделен на две части, а именно, на кэш команд и на кэш данных. В кэше команд хранится набор инструкций, которые необходимы процессору для вычислений, в то время как кэш данных хранит значения, которые необходимы для текущего исполнения. Кэш L2 отвечает за загрузку данных из основной памяти. Опять же, возвращаясь к нашей библиотеке.

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

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

Чем больше кэш, тем лучше?

На этот вопрос можно ответить одновременно и, да и нет. Больший объем кэша позволяет быстро получать данные в случае, если они доступны в любом из уровней L1 и L2. Вернемся к нашему примеру с библиотекой. Если посетитель попросит какую – либо популярную книгу, которая не хранится библиотекарем в ящике стола или в книжном шкафу, то он сначала поищет ее в ящике, а затем перейдет к книжному шкафу. То есть некоторое количество времени будет тратиться впустую, прежде чем книга, наконец, будет извлечена с книжной полки библиотеки. Так же и процессор сначала проверяет кэш первого уровня (L1), затем второго (L2) и только после этого, отправляет запрос в оперативную память. Когда данные обнаруживаются в кэше, то это называется «попаданием», в противоположном случае – «промахом»

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

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


Что такое операционная система? Файловая система NTFS

нужен ли процессорам четвёртый уровень кэширования / Хабр

Разрыв между быстродействием процессоров в общем смысле и быстродействием основной памяти DRAM, также в общем смысле, был проблемой в последние 30 лет – в этот период разрыв начал по-настоящему расти. И стоит честно сказать, что инженеры, разрабатывавшие как оборудование, так и программы, создавшие иерархию кэшей и ПО, способное воспользоваться её преимуществами, поступили просто гениально. Это одна из труднейших в реализации архитектур, когда-либо задуманных человеком.

Однако теперь, когда мы находимся на пороге появления постоянно расширяющейся иерархии памяти, когда начинает появляться энергонезависимая память типа Optane 3D XPoint (вариант памяти с изменением фазового состояния) в формате DIMM и SSD, а также новые протоколы (CXL, OpenCAPI, CCIX, NVLink и Gen-Z), возникает вопрос: не пора ли добавить серверам кэш четвёртого уровня? Поскольку от комплекса CPU зависит работа такого количества устройств – некоторые из которых расположены ближе, другие же дальше – логично задуматься над тем, не нужен ли нам ещё один уровень кэша, маскирующий задержки этих других видов памяти и увеличивающий пропускную способность всей системы.


Чтобы представить открывающиеся возможности, мы покопались в своей собственной памяти, а заодно пообщались с разработчиками архитектуры чипов из IBM, Intel, AMD и Marvell, чтобы понять, что они думают об использовании кэша L4 в серверах. Кэш L4, конечно, не новое слово в быстродействии, однако он и не так уж часто встречается в системных архитектурах.

Однако прежде нам стоит пробежаться по истории вопроса.

Добавление кэша первого уровня к процессорам, у которых в то время было всего одно ядро, в 1980-х стало компромиссом, добавляющим задержки в подсистемы памяти, одновременно снижающим среднюю задержку запросов данных и инструкций процессорами. Кэши L1 изначально находились во внешней SRAM, находившейся на материнских платах и подключавшейся к комплексу CPU-память. Такой кэш L1 находился очень близко к процессору, как в смысле тактовой частоты, так и в смысле физического пространства на плате, и давал возможность повысить загрузку CPU. Потом эти кэши разделили, чтобы в одном блоке можно было хранить часто используемые данные, а во втором – популярные инструкции, и это немного увеличило быстродействие. В какой-то момент увеличения тактовой частоты процессоров и соответствующего разрыва в быстродействии CPU и DRAM, были добавлены более жирные, но и более медленные кэши L2 (зато более дешёвые в пересчёте на пропускную способность), опять-таки сначала находившиеся вне корпуса CPU, а потом интегрированные в него. А когда в CPU начали добавлять всё больше и больше ядер, а также всё больше контроллеров DRAM для их загрузки, к иерархии добавили ещё более крупные блоки кэшей L3.

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

Крис Джианос, инженер чипов и архитектор из Intel, руководившей разработкой многих прошлых поколений процессоров Xeon, объясняет это так: «С каждым уровнем кэша нам обычно нужно, чтобы они выросли достаточно сильно по сравнению с предыдущим уровнем, чтобы всё это имело смысл, поскольку чтобы достичь заметного прироста быстродействия системы, нужно достичь достаточно интересной частоты успешных обращений. Если вы „попадаете“ в кэшированные данные всего в нескольких процентах случаев, это будет сложно заметить. Всё остальное затормаживает ваше быстродействие, и этот прирост будет незаметным. Поэтому требуются относительно большие кэши, и когда речь идёт о более высоких уровнях, нужны реально огромные кэши. Сегодня L2 измеряются мегабайтами, L3 измеряются десятками или сотнями мегабайт. Так что понятно, что если вы начинаете думать о кэше L4, то речь пойдёт уже о сотнях мегабайт, если не о гигабайтах. А такой размер определённо приведёт к их высокой стоимости. Нужно, чтобы сложились определённые условия, чтобы этот вариант стал интересным, и дешёвым он определённо не будет».

Инженеры из компании AMD, с которыми мы беседовали, пожелали остаться неизвестными потому, что они не хотели создать впечатление, что компания собирается добавить кэш L4 в линейку процессоров Epyc – и, если быть точным, AMD ничего такого и не обещала. Однако компания всё же признаёт, что это следующий очевидный шаг для рассмотрения, и, точно так же, как Intel, считает, что все инженеры размышляют о реализации кэша L4. По сути, AMD говорит, что компромиссы, связанные с уровнями кэшей и задержками подробно изучены как в промышленности, так и в научных кругах, и что с каждым новым уровнем, который оказывается больше и медленнее предыдущего, возникает компромисс увеличения общего пути к DRAM. Об этом говорит и Джианос из Intel, рассказывая о необходимости поиска баланса между успешными запросами к КЭШу и его объёмом.

IBM, конечно, добавляла кэш L4 к некоторым своим чипсетам X86 в 2000-х, а в 2010-х добавила L4 к чипсетам NUMA (неравномерный доступ к памяти) на мейнфреймах System z11. У процессора z11 четыре ядра, 64 КБ L1 кэш для инструкций и 128 КБ L1 кэш для данных, плюс 1,5 МБ L2 кэш для каждого из ядер и 24 МБ L3 кэш общего доступа для всех ядер. У чипсета NUMA для z10 было два банка по 96 МБ L4 кэша, то есть, 192 МБ в сумме. Выпустив z12, IBM урезала размер кэша L1 до 98 КБ на ядро, однако увеличила L2 кэш до 2 МБ на ядро, разделив его при этом на две части, для инструкций и для данных, как в случае с L1. Также она удвоила размер кэша L3 до 48 МБ для шести ядер, а размер кэша L4 был увеличен до 384 МБ для пары чипов в чипсете. При смене поколений процессоров System z объёмы кэшей росли, и у процессоров z15, анонсированных в сентябре, пара кэшей L1 будет весить по 128 КБ, пара кэшей L2 – по 4 МБ, а общий кэш L3 будет для 12 ядер иметь объём 256 МБ. Объём кэша L4 в каждом отсеке мейнфрейма составляет 960 МБ, а его общий объём для всей системы, состоящей из пяти отсеков, равняется 4,68 ГБ.

Как мы уже указывали ранее, у процессоров Power8 и Power9 память буферизована, а IBM добавила 16 МБ L4 кэша к каждому буферу Centaur, что составляет 128 МБ L4 кэша на сокет для 32-х планок памяти. У самых дешёвых машин с Power9 нет буфера памяти, а, следовательно, и кэша L4. Архитекторы, разрабатывавшие схему Power10, были заняты разработкой схемы для Power11, и потому не смогли ответить на наши вопросы, но Уильям Старк, управлявший разработкой Power10, нашёл для нас немного времени, и заметил следующее:

«В целом мы пришли к выводу, что кэши последнего уровня большого размера полезны для увеличения быстродействия промышленных систем, — пояснил нам Старк по емейл. – Высокие задержки, связанные с энергонезависимой памятью, в частности, с памятью с изменением фазового состояния, порождают запрос на кэширование – возможно, на кэш типа L4 – в иерархии накопительной памяти».

Именно так мы и думали. И, кстати, мы не утверждаем, что кэш L4 обязательно будет находиться в непосредственной близости от буферизированной памяти будущего DDR5 DIMM. Возможно, его лучше расположить между PCI-Express и кэшем процессора L3, а ещё лучше, в буферах памяти и между PCI-Express и кэшем процессора L3. Возможно, его для этого придётся поместить наверху контроллера I/O и памяти в будущей серверной архитектуре, что немного напоминает технологию Foveros от Intel.

На это возможно взглянуть и с другой точки зрения – допустим, у IBM была возможность менять размеры кристалла, и инженеры решили добавить кэш L4 к шине System z NUMA или к чипу буферизации памяти Power8 и Power9 не ради его самого, а просто потому, что у них оставалась ещё возможность добавить транзисторов после того, как все необходимые функции были реализованы. Иногда нам кажется, что количество ядер в процессорах Intel X86 зависит от размера кэша L3, который они могут себе позволить. Иногда кажется, что Intel назначает максимальный размер кэша L3 на один кристалл, и после этого кристаллы Xeon трёх разных размеров просто изготавливают по этим спецификациям – в последних поколениях у них по 10, 18 или 28 ядер на техпроцессе в 14 нм.

Всё это, конечно, чисто академические вопросы, однако они дают нам возможную мотивацию для IBM и других производителей чипсетов на добавление кэша L4. Это не просто может помочь в каких-то случаях, это просто довольно очевидная вещь. Думаем, что на таком монстре I/O, как мейнфрейм System z, кэш L4 без вопросов находится на своём месте и приносит пользу всем клиентам, увеличивая пропускную способность этих машин и позволяя им работать на 98-99% загрузке процессора, поскольку как количество ядер, так и масштабы NUMA в мейнфреймах в последнее время сильно подросли.

Нет причин для того, чтобы делать кэш L4 исключительно на встроенной DRAM (как делает IBM со своими чипами) или на базе куда как более дорогой SRAM – об этом нам напоминает Рабин Сугумар, архитектор чипов из компаний Cray Research, Sun Microsystems, Oracle, Broadcom, Cavium и Marvell:

«Наши кэши L3 уже достаточно большие, — говорит Сугумар. – Так что L4 в интересующем вас случае нужно делать по другой технологии. Возможно, eDRAM или даже HBM или DRAM. В данном контексте интересным вариантом выглядит реализация кэша L4 на основе HBM, и этот кэш решает не столько проблему задержки, сколько пропускной способности. Поскольку ёмкость HBM ограничена, а пропускная способность велика, мы можем получить определённую прибавку к скорости – и в некоторых специальных случаях мы действительно видим значительное увеличение пропускной способности». Сугумар добавляет, что для довольно большого количества применений наблюдается относительно большое количество «промахов» кэша. Однако нужно подсчитать – будет ли добавление очередного уровня кэша стоить того.

Ещё один возможный вариант использования чего-то наподобие кэша L4, говорит Сугумар, это использовать локальную DRAM в качестве кэша. «У нас не ведётся никаких подобных исследований в лаборатории, но допустим, у нас на чипе есть интерфейс с высокой пропускной способностью, соединенный с общей распределённой памятью где-то на другом конце шлейфа, на расстоянии от 500 нс до 1 мкc. Тогда один из вариантов использования будет создать кэш, перемещающий эти данные из общей распределённой памяти в локальную DRAM. Можно представить работу конечного автомата, управляющего этой памятью, поэтому большую часть времени обращения будут идти к локальной DRAM, и вы сможете минимизировать количество обращений к общей распределённой DRAM».

Нам этот вариант кажется очень интересной разновидностью NUMA. Кстати, Сугумар работал над распределённой памятью для высокоскоростных параллельных систем в Sun Microsystems ещё до того, как появилась энергонезависимая память. И одна из проблем с этими различными вариантами иерархии памяти заключалась в том, что если одна из них потеряется из-за отказа сети или шины, то вся машина упадёт. «В системах с распределённой памятью приходится обрабатывать отказы сети более элегантно, и это порождает множество сложностей при проектировании».

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

«В какой-то момент дополнительный уровень кэша станет неизбежностью, — говорит Джианос. – У нас появился первый уровень кэша, и в какой-то момент появился и второй. А потом мы, в конце концов, добавили третий. И когда-то у нас будет четвёртый. Вопрос только – когда и зачем. И мне кажется, что ваши наблюдения, касающиеся возможностей этого кэша, достаточно интересные. Но в Intel пока не решили, когда или зачем будут обнародовать такие вещи. Другие компании тоже изучают этот вопрос; было бы глупо не исследовать его. Рано или поздно это произойдёт, однако скоро это будет, или не очень – пока неясно».

где находится и для чего нужна?

Опубликовано 21.10.2019 автор — 0 комментариев

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

Где в компьютере находится кэш память

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

Кэш процессора

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

Базируется на небольшой по размерам, но сверхбыстрой памяти типа SDRAM. Как правило, такой компонент реализован на кристалле процессора.

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

Простыми словами, если привести аналогию, этот тип памяти — ящик стола в кабинете важной шишки, в котором лежат печати «Запретить» и «Не пущать». Так как челобитные от посетителей (выполняемые команды), почти всегда отклоняются, поэтому для вердикта хозяину кабинета достаточно открыть этот ящик и взять подходящую печать.

Если в редких случаях выносится положительный вердикт, чиновнику приходится проделать целых 5 шагов к шкафу в дальнем углу кабинета (ОЗУ) и столько же обратно, чтобы взять печать «Одобрить». Вот как-то так.У современных процессоров есть как минимум три уровня кэша — каждый под конкретные данные:

  • Инструкции — ускоряют загрузку машинного кода;
  • Данные — ускоряют запись и чтение информации;
  • Буфер ассоциативной трансляции — преобразует виртуальные адреса в физические.

Многоуровневый кэш в процессорах принято обозначать L1, L2, L3.Их размер влияет на стоимость «камня» — чем они больше, тем этот компонент компьютера обойдется дороже.

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

Сверхпамять — одна из «священных коров» маркетинга: юзерам, которые не сильно разбираются в таких нюансах, можно втюхивать низкопроизводительные процессоры с увеличенным объемом кэша по завышенным ценам.

Палю тему: никакая сверхпамять не заменит тактовой частоты «камня» и количества ядер. Если за те же деньги стоит выбор «или-или», выбирайте более производительный процессор — тот, у которого больше ядер, выше тактовая частота, или лучше все и сразу. Вот!

Еще более детальнее о том, что такое кэш память процессора, читайте здесь.

Кэш жесткого диска

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

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

На эффективность этой опции в том числе влияет и пропускная способность шины: буфер жесткого диска SATA III будет работать несколько быстрее, чем SATA II. Технология хорошо себя проявляет при работе с малыми объемами данных, но при чтении «тяжелых» файлов ее целесообразность под большим сомнением.

Объем кэша в современном винчестере — от 8 до 64 Мб. Иногда попадаются «экзотические» девайсы, у которых 128 или 256 Мб буферной памяти. Стоит он существенно дороже и позиционируется как супер-пупер-топ.

Переплачивать лично я особого смысла не вижу. Хотите шустрый накопитель — ставьте SSD.

Кэш графического ускорителя

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

Еще этот тип называют видеопамятью. Как правило, в современных графических ускорителях используется особый тип ОЗУ — GDDR5. В среднем, ее объем — от 1 до 6 Гб. Такой размер обусловлен тем, что графические файлы, как правило, «тяжелые» — все эти модельки персонажей, техники, локации, текстуры и тому подобное.

Частый «развод» неопытного пользователя заключается в акцентировании внимания на объеме видеопамяти — например, если установлено 4 Гб, то это уже крутая видяха.

Меж тем сегодня можно найти девайсы из бюджетного сегмента, у которых 4 Гб GDDR на борту. Сложно назвать их мощными или производительными. Обращать внимание, в первую очередь, следует не на объем видеопамяти, а на ее частоту и частоту графического процессора.Как это работает? Чтобы не отрендеривать каждый раз повторно одни и те же объекты, они хранятся в памяти видеокарты. Например, сам персонаж (а в шутерах от первого лица достаточно одного ствола) и локация, где он находится.

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

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

Естественно, объем видеопамяти и ее частота влияют на стоимость графического ускорителя. Для лучшего понимания темы советую ознакомиться со статьей «Из чего состоит видеокарта для компьютера».

Вот собственно, и все на сегодня. Если у вас появились дополнительные вопросы — не стесняйтесь и задавайте их в комментариях. Буду признателен всем, кто поделится этой публикацией в социальных сетях. До завтра!

С уважением, автор блога Андрей Андреев.

Объем кэш памяти процессора:влияет ли на производительность и какой выбрать?

Опубликовано 10.11.2019 автор — 0 комментариев

Доброго времени суток уважаемые гости блога! Сегодня обсудим, на что влияет объем кэш памяти процессора, где применяется эта технология, где находится в CPU и можно ли его увеличить.

Что это такое

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

По характеристикам, а точнее скорости работы, самый медленный процессор многократно превосходит ОЗУ. В среднем, он шустрее в 15 раз. Добавьте сюда системную шину, которая может еще больше замедлять обработку данных. Получается совсем некрасивая картина: в таком режиме КПД системы слишком низок.

Хотя назначение MB — связать между собой все компоненты компа, часто рациональнее использовать дополнительную «Приблуду», которая возьмет на себя часть несвойственных функций.

Именно к таким технологиям относится кэш, который еще называют сверхоперативной памятью. Реализован он в виде отдельных микросхем типа SRAM. Благодаря такой особенности все промежуточные данные перезаписываются максимально быстро. Это благоприятно влияет на производительность работы в целом.Главная задача кэша — выравнивание дисбаланса скорости передачи данных. Он имеет небольшой объем, так как промежуточные данные сами по себе в памяти много места не занимают.

Контроллер кэша

Это — один из логических блоков. Он отвечает за обмен данными сверх памяти с ядрами ЦП. При обращении одного из ядер контроллер проверяет, есть ли нужные данные в кэше. При положительной проверке происходит так называемое попадание, а необходимая информация «переваривается» внутри самого CPU.

Задача контроллера — сделать так, чтобы промахи происходили как можно реже, то есть чтобы в кэше всегда были необходимые промежуточные данные для обработки. Но это зависит уже не только от CPU, но и от того, как разработчики приложения оптимизировали код.

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

Сверхпамять

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

  • L1. Память первого уровня. Наименьшая по объему, но самая быстрая микросхема. Как правило, не более пары десятков килобайт. Работает почти без задержек. Используется для хранения наиболее часто используемых данных. Количество микросхем обычно равно количеству ядер, а каждое ядро имеет доступ только к своей микросхеме.
  • L2. Память второго уровня. Чуть более медленный модуль, но больший по объему (несколько сотен килобайт). Хранит реже используемую информацию.
  • L3. Память третьего уровня. Самая медленная, но самая объемная микросхема. Счет уже идет на десятки мегабайт. В отличие от предыдущих, эта память общая для всех ядер. Служит для хранения информации с низкой вероятностью запроса.

Влияние на производительность системы

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

Практика показала, что повышение тактовой частоты влияет лучше на работу системы, чем увеличение кэша. Однако такое решение влечет за собой увеличение стоимости CPU. «Потолок» здесь — 4 ГГц. Дальше каждая десятая доля герца сопряжена с ростом цены в геометрической прогрессии.

Использование трехуровневого кэша увеличивает производительность CPU на 10%. Этот эффект больше всего ощущается при использовании архиваторов (в наше время не самый актуальный софт), при обработке видео и видеоиграх. В «легких» приложениях — например, офисном пакете или интернет-браузере, эффективность кеша чуть более нуля.

Как узнать объем кеша и как его увеличить

Самый простой способ — узнать модель процессора, нажав меню пуск и кликнув ПКМ по значку «Этот компьютер», а затем выбрав пункт «Свойства». Все характеристики «камня» можно найти на официальном сайте производителя.

Увы, но увеличить кеш процессора не получится. Девайс поставляется «как есть» и такому апгрейду не подвергается. Единственный приемлемый способ — купить CPU с большим объемом сверхпамяти.

Также советую почитать «Чем отличается процессор i3 от i5», «Серверный процессор в домашнем компьютере» и «Как устроен процессор внутри». Буду признателен, если вы поделитесь этой публикацией в социальных сетях. До завтра!

С уважением, автор блога Андрей Андреев.

Мифы о кэше процессора, в которые верят программисты / Хабр

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

Вы можете удивиться: зачем же разработчику ПО думать о механизме кэширования в CPU? Отвечу. С одной стороны, многие понятия из концепции когерентности кэша непосредственно применимы в распределённых системах и на уровнях изоляции СУБД. Например, представление реализации когерентности в аппаратных кэшах помогает лучше понять разницу в моделях согласованности (консистентности) — отличие строгой согласованности (strong consistency) от согласованности в конечном счёте (eventual consistency). У вас могут появиться новые идеи, как лучше обеспечить согласованность в распределённых системах, используя исследования и принципы из аппаратного обеспечения.

С другой стороны, неправильные представления о кэшах часто приводят к ложным утверждениям, особенно когда речь идёт о параллелизме и состоянии гонки. Например, часто говорят о трудности параллельного программирования, потому что «у разных ядер в кэшах могут быть разные/устаревшие значения». Или что квалификатор volatile в языках вроде Java нужен, чтобы «предотвратить локальное кэширование общих данных» и принудительно «читать/записывать только в основную память».


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

Или ещё пример. Если переменные volatile действительно каждый раз пишутся/считываются из основной памяти, то они будут чудовищно медленными — ссылки в основной памяти в 200 раз медленнее, чем в кэше L1. На самом деле volatile-reads (в Java) часто настолько же производительны, как из кэша L1, и это развенчивает миф, будто volatile принуждает читает/записывать только в основную память. Если вы избегали volatile из-за проблем с производительностью, возможно, вы стали жертвой вышеуказанных заблуждений.

Но если у разных ядер собственный кэш, хранящий копии одних и тех же данных, не приведёт ли это к несоответствию записей? Ответ: аппаратные кэши в современных процессорах x86, как у Intel, всегда синхронизируются. Эти кэши не просто тупые блоки памяти, как многие разработчики, похоже, думают. Наоборот, очень сложные протоколы и встроенная логика взаимодействия между кэшами обеспечивает согласованность во всех потоках. И всё это происходит на аппаратном уровне, то есть нам, разработчикам программного обеспечения/компиляторов/систем, не нужно об этом думать.

Кратко объясню, что имеется в виду под «синхронизированными» кэшами. Здесь много нюансов, но в максимальном упрощении: если два разных потока в любом месте системы читают с одного и того же адреса памяти, то они никогда не должны одновременно считывать разные значения.

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

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

  1. Модифицированное состояние (M).
    1. Эти данные модифицированы и отличаются от основной памяти.
    2. Эти данные являются источником истины, а все остальные источники устарели.
  2. Эксклюзивное (E).
    1. Эти данные не модифицированы и синхронизированы с основной памятью.
    2. Ни в одном другом кэше того же уровня нет этих данных.
  3. Общее (S).
    1. Эти данные не модифицированы и синхронизированы.
    2. В других кэшах того же уровня тоже (возможно) есть те же данные.
  4. Недействительное (I).
    1. Эти данные устарели и не должны использоваться.

Если мы применяем и обновляем вышеуказанные состояния, то можно добиться согласованности кэша. Рассмотрим несколько примеров для процессора с четырьмя ядрами, у каждого из которых собственный кэш L1, а также глобальный кэш L2 на кристалле.
Предположим, что поток на core-1 хочет записать в память по адресу 0xabcd. Ниже приведены некоторые возможные последовательности событий.

Попадание в кэш

  1. В L1-1 есть данные в состоянии E или M.
  2. L1-1 производит запись. Всё готово.
    1. Ни в одном другом кэше нет данных, так что немедленная запись будет безопасной.
    2. Состояние строки кэша изменяется на M, поскольку она теперь изменена.

Промах локального кэша, попадание одноуровневого кэша

  1. В L1-1 есть данные в состоянии S.
    1. Это значит, что в другом одноуровневом кэше могут быть эти данные.
    2. Та же последовательность применяется, если в L1-1 вообще нет этих данных.
  2. L1-1 отправляет Request-For-Ownership в кэш L2.
  3. L2 смотрит по своему каталогу и видит, что в L1-2 сейчас есть эти данные в состоянии S.
  4. L2 отправляет snoop-invalidate в L1-2.
  5. L1-2 помечает данные как недействительные (I).
  6. L1-2 отправляет запрос Ack в L2.
  7. L2 отправляет Ack вместе с последними данными в L1-1.
    1. L2 проверяет, что в L1-1 эти данные хранятся в состоянии E.
  8. В L1-1 теперь последние данные, а также разрешение войти в состояние E.
  9. L1-1 осуществляет запись и изменяет состояние этих данных на M.

Теперь предположим, что поток на core-2 хочет считать с адреса 0xabcd. Ниже приведены некоторые возможные последовательности событий.

Попадание кэша

  1. L1-2 имеет данные в состоянии S, E или M.
  2. L1-2 считывает данные и возвращает в поток. Готово.

Промах локального кэша, промах кэша верхнего уровня

  1. L1-2 имеет данные в состоянии I (недействительное), то есть не может их использовать.
  2. L1-2 отправляет запрос Request-for-Share в кэш L2.
  3. В L2 тоже нет данных. Он считывает данные из памяти.
  4. L2 возвращает данные из памяти.
  5. L2 отправляет данные в L1-2 с разрешением войти в состояние S.
    1. L2 проверяет, что в L1-2 эти данные хранятся в состоянии S.
  6. L1-2 получает данные, сохраняет их в кэше и отправляет в поток.

Промах локального кэша, попадание кэша верхнего уровня

  1. В L1-2 есть данные в состоянии I.
  2. L1-2 отправляет запрос Request-for-S в кэш L2.
  3. L2 видит, что в L1-1 данные в состоянии S.
  4. L2 отправляет Ack в L1-2, вместе с данными и разрешением войти в состояние S.
  5. L1-2 получает данные, сохраняет их в кэше и отправляет в поток.

Промах локального кэша, попадание одноуровневого кэша

  1. В L1-2 есть данные в состоянии I.
  2. L1-2 отправляет запрос Request-for-S в кэш L2.
  3. L2 видит, что в L1-1 данные в состоянии E (или M).
  4. L2 отправляет snoop-share в L1-1
  5. L1-1 понижает состояние до S.
  6. L1-1 отправляет Ack в L2 вместе с модифицированными данными, если это применимо.
  7. L2 отправляет Ack в L1-2 вместе с данными и разрешением войти в состояние S.
  8. L1-2 получает данные, сохраняет их в кэше и отправляет в поток.

Выше приведены лишь некоторые из возможных сценариев. На самом деле существует много вариаций и нет двух одинаковых реализаций протокола. Например, в некоторых конструкциях используется состояние O/F. В некоторых есть кэши обратной записи, а другие используют сквозную запись. Некоторые используют snoop-трансляции, а другие — snoop-фильтр. В некоторых инклюзивные кэши, а в других — эксклюзивные. Вариации бесконечны, а мы даже не затронули буферы хранения (store-buffers)!

Кроме того, в приведённом примере рассматривается простой процессор всего с двумя уровнями кэширования. Но обратите внимание, что этот же протокол можно применить рекурсивно. Легко добавляется кэш L3, который, в свою очередь, координирует несколько кэшей L2, используя тот же протокол, что приведён выше. У вас может быть многопроцессорная система с «домашними агентами», которые координируют работу нескольких кэшей L3 на совершенно разных чипах.

В каждом сценарии каждому кэшу нужно взаимодействовать только с кэшем верхнего уровня (для получения данных/разрешений) и его потомками (для предоставления/отмены данных/разрешений). Всё это происходит невидимо для программного потока. С точки зрения софта подсистема памяти выглядит как единый, консистентный монолит… с очень переменными задержками.

Мы обсудили удивительную мощность и согласованность системы памяти компьютера. Остался один вопрос: если кэши настолько последовательны, то зачем вообще нужны volatile в языках вроде Java?

Это очень сложный вопрос, на который лучше ответить в другом месте. Позвольте только немного намекнуть. Данные в регистрах CPU не синхронизируются с данными в кэше/памяти. Программный компилятор выполняет всевозможные оптимизации, когда дело доходит до загрузки данных в регистры, записи их обратно в кэш и даже переупорядочивания инструкций. Всё это делается при условии, что код будет выполняться в одном потоке. Поэтому любые данные, подверженные риску состояния гонки, следует защищать вручную с помощью параллельных алгоритмов и языковых конструкций вроде atomic и volatile.

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

Насколько важен кэш процессора? | Малый бизнес

На заре компьютерных технологий все работало немного медленнее, чем мы видим сегодня. Это произошло не только потому, что центральные процессоры компьютеров — ЦП — были медленными, но и потому, что производительность во многом зависела от ограниченной памяти.

По мере ускорения работы микропроцессоров память все еще оставалась медленной, поэтому возникла необходимость создать нечто, называемое «кешем», чтобы закрыть этот пробел. Без кеша ваша система работала бы намного медленнее.

Кэш ЦП и Память

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

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

Местоположение ссылки

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

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

Различные уровни кеш-памяти

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

  • Кэш L1 — это основной кэш. Он быстрый, но при этом небольшой, поэтому его объем ограничен.Обычно он встроен в микросхему процессора.
  • Кэш L2 — также известный как вторичный кэш, кэш L2 может быть встроен в чип процессора или в отдельный чип с высокоскоростной шиной, которая соединяет его с процессором. Кэш
  • L3 — Этот кэш процессора представляет собой специализированную память, которая может служить резервной копией для кешей L1 и L2. Возможно, это не так быстро, но это повышает производительность ваших L1 и L2.

Определение производительности кэш-памяти

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

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

Увеличение кэш-памяти

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

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

Другие кэши

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

Современные компьютеры построены таким образом, что оперативная память не обновляется сразу после записи данных в кэш. Эти данные хранятся в кэше процессора, а затем отправляются в ОЗУ через запланированные интервалы. Если данные старые или отсутствуют, оперативная память может получить эти обновления из кеша, чтобы минимизировать риски, но в противном случае они остаются в кеше, чтобы поддерживать максимальную рабочую скорость компьютера.

Отображение кэш-памяти

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

  • Кэш с прямым отображением — В этой конфигурации каждый блок отображается в одно место кэша, указанное заранее.
  • Полностью ассоциативное отображение кэша — Эта конфигурация похожа на структуру кэша с прямым отображением, но блок может быть сопоставлен с любым расположением, а не с конкретным расположением кэша.
  • Установить ассоциативное сопоставление кэша — Это находится между двумя крайностями: прямое сопоставление и полностью ассоциативное сопоставление кэша.Хотя отображение заранее задано, каждый блок отображается на подмножество различных мест кэша, а не только в одно назначенное.

Выключение питания и память

Если вы знаете что-нибудь о памяти с произвольным доступом , или ОЗУ, вы знаете, что она временно хранит информацию. Чем больше оперативной памяти у вашего компьютера, тем меньше работы у вашего процессора для выполнения задач, что предотвращает нежелательные замедления. На компьютере есть два основных типа ОЗУ: динамическое ОЗУ (DRAM) и статическое ОЗУ (SRAM).

Скорее всего, ваша система работает на DRAM, которая является распространенным типом, поскольку SRAM более дорогая. Каждая ячейка памяти в DRAM имеет схему с транзистором и конденсатором, причем конденсатор хранит каждый бит данных. Для хранения данных DRAM должна обновляться каждые несколько миллисекунд, поскольку информация имеет тенденцию к утечке через конденсаторы.

Кэш и основная память

Как и DRAM, кэш процессора теряет свою память при выключении компьютера. Включите его снова, и ваш кеш начнет собирать информацию с нуля.

Между DRAM и кеш-памятью ЦП есть некоторые различия:

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

Кэш против виртуальной памяти

Когда вы слышите о чем-то, что называется «виртуальная память», вы можете спутать это с кешем.Виртуальная память — это то, что операционная система создает для предотвращения потери данных из-за нехватки физической памяти в данный момент. Это отличается от кеша тем, что операционная система перемещает неактивные данные из ОЗУ системы в дисковое хранилище.

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

Ускорение работы существующего компьютера

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

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

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

Покупка нового компьютера

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

Ваш CPU также будет сильно влиять на производительность вашего компьютера. Лучше всего подойдет процессор Intel или AMD . Эксперты рекомендуют процессор Intel 9-го поколения Core, если вы планируете играть, и AMD Ryzen 2000 подойдет, если вы планируете редактировать видео. Если вы просто выполняете стандартные задачи, любая из них, скорее всего, значительно повысит объем кэш-памяти вашего микропроцессора.

Установка дополнительной оперативной памяти

Если вы просто хотите повысить производительность, увеличение объема оперативной памяти — один из самых простых способов поднять настроение вашему компьютеру.Во-первых, вам нужно убедиться, что ваша материнская плата поддерживает скорость и размер оперативной памяти, которую вы будете использовать, а также ее тип. Вы, вероятно, будете в безопасности, если будете использовать оперативную память DDR4 с диапазоном от 2133 МГц до 4700 МГц и . Старые ПК часто идут только до DDR3, поэтому вам может потребоваться вложить средства в более старые модули, если вы хотите остаться с вашей текущей материнской платой.

Вот шаги, которые необходимо предпринять, чтобы установить больше ОЗУ:

  • Выключите систему и отсоедините кабель питания.Отсоедините все остальные кабели от задней панели компьютера.
  • Снимите боковую панель, чтобы вам было легче добраться до разъемов RAM внутри вашего компьютера.
  • Извлечь любую установленную вами оперативную память.
  • Установите новую оперативную память, совместив края со слотами на материнской плате и надавив на них с усилием. Это должно происходить довольно легко. Если нет, возможно, вам нужно перевернуть их на другую сторону.
  • Подвигайте палочки RAM после того, как они защелкнулись, чтобы убедиться, что они вставлены полностью.
  • Установите на место боковую панель и снова вставьте все кабели, включая кабель питания.
  • Загрузите вашу систему. Убедитесь, что система регистрирует новый объем ОЗУ.

.

Как работает кэш ЦП и что такое L1, L2 и L3?

Компьютерные процессоры значительно продвинулись вперед за последние несколько лет, размер транзисторов уменьшается с каждым годом, а достижения достигают точки, когда закон Мура быстро становится ненужным.

Когда дело доходит до процессоров, важны не только транзисторы и частоты, но и кэш.

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

Итак, насколько важен кеш ЦП и как он работает?

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

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

Далее у нас есть оперативная память, обычно известная как ОЗУ.Это намного быстрее, чем основное хранилище.

Наконец, ЦП имеет внутри себя даже более быстрые блоки памяти, которые мы называем кешем.

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

Кэш — это статическая RAM (SRAM) по сравнению с системной RAM, которая является динамической RAM (DRAM).Статическая RAM — это та, которая может хранить данные без необходимости постоянного обновления, в отличие от DRAM, что делает SRAM идеальным для использования для кеширования.

Как работает кэш ЦП?

Как вы, возможно, уже знаете, программа представляет собой набор инструкций, выполняемых ЦП.Когда вы запускаете программу, эти инструкции должны пройти из основного хранилища в ЦП. Здесь в игру вступает иерархия памяти.

Данные сначала загружаются в ОЗУ, а затем отправляются в ЦП.В наши дни процессоры способны выполнять огромное количество инструкций в секунду. Чтобы полностью использовать свою мощность, ЦП необходим доступ к сверхбыстрой памяти. Вот тут и пригодится кеш.

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

Затем кеш выполняет обмен данными внутри ЦП.Иерархия памяти также существует внутри кеша.

(Если вам интересно узнать, как работает сам ЦП, ознакомьтесь с нашей статьей, объясняющей основы ЦП.)

what-is-cpu-featured


Что такое ЦП и для чего он нужен?

Аббревиатуры в вычислительной технике сбивают с толку. Что такое ЦП? А мне нужен четырехъядерный или двухъядерный процессор? А как насчет AMD или Intel? Мы здесь, чтобы помочь объяснить разницу!

Уровни кеширования: L1, L2 и L3

Кэш ЦП разделен на три основных «уровня»: L1, L2 и L3.Иерархия здесь снова зависит от скорости и, следовательно, размера кеша.

Кэш L1 (уровень 1) — это самая быстрая память, которая присутствует в компьютерной системе.Что касается приоритета доступа, кэш L1 содержит данные, которые, скорее всего, потребуются ЦП при выполнении определенной задачи.

Что касается размера, кеш L1 обычно достигает 256 КБ.Однако некоторые действительно мощные процессоры теперь используют его почти до 1 МБ. Некоторые серверные чипсеты (например, топовые процессоры Intel Xeon) теперь имеют где-то 1-2 МБ кеш-памяти L1.

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

Intel Skylake cache design Изображение предоставлено: Intel

Кэш L2 (уровень 2) медленнее, чем кеш L1, но больше по размеру.Его размер обычно варьируется от 256 КБ до 8 МБ, хотя более новые и мощные процессоры обычно обходятся без этого. Кэш L2 содержит данные, которые, вероятно, будут доступны ЦП в следующий раз. В большинстве современных ЦП кэши L1 и L2 присутствуют на самих ядрах ЦП, причем каждое ядро ​​получает свой собственный кеш.

Кэш L3 (уровень 3) — это самый большой блок кэш-памяти, а также самый медленный.Он может варьироваться от 4 МБ до 50 МБ. Современные процессоры имеют выделенное место на кристалле процессора для кеш-памяти L3, и он занимает большую часть пространства.

Попадание или промах в кеш и задержка

Данные поступают из ОЗУ в кэш L3, затем в L2 и, наконец, в L1.Когда процессор ищет данные для выполнения операции, он сначала пытается найти их в кэше L1. Если ЦП может его найти, условие называется попаданием в кэш. Затем он переходит к поиску в L2, а затем в L3.

Если он не находит данные, он пытается получить к ним доступ из основной памяти.Это называется промахом в кэше.

Теперь, как мы знаем, кэш предназначен для ускорения обмена информацией между основной памятью и процессором.Время, необходимое для доступа к данным из памяти, называется задержкой. L1 имеет самую низкую задержку, будучи самым быстрым и ближайшим к ядру, а L3 — самым высоким. Задержка значительно увеличивается при промахе в кэше. Это связано с тем, что ЦП должен получать данные из основной памяти.

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

Раньше кеш-память L2 и L3 находилась вне ЦП, что отрицательно сказывалось на задержке.

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

Кэш будущего

Дизайн кэша постоянно развивается, особенно по мере того, как память становится дешевле, быстрее и плотнее.Intel и AMD имели свою долю экспериментов с дизайном кеша, а Intel даже экспериментировала с кешем L4. Рынок процессоров сейчас движется вперед быстрее, чем когда-либо.

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

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

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

edu-email-discounts

18 удивительных скидок, которые вы можете получить с бесплатным адресом электронной почты EDU

An.Адрес электронной почты EDU обеспечивает доступ ко многим преимуществам. Вот наши основные преимущества электронной почты для студентов.

Об авторе

Палаш Вольвоикар
(Опубликовано 10 статей)

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

Ещё от Palash Volvoikar

Подпишитесь на нашу рассылку новостей

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

Еще один шаг…!

Подтвердите свой адрес электронной почты в только что отправленном вам электронном письме.

.

Как работают кэши ЦП L1 и L2 и почему они являются важной частью современных микросхем

Развитие кешей и кеширования — одно из самых значительных событий в истории вычислительной техники. Практически каждое современное ядро ​​процессора, от чипов со сверхнизким энергопотреблением, таких как ARM Cortex-A5, до Intel Core i9 самого высокого уровня, использует кеши.Даже микроконтроллеры более высокого уровня часто имеют небольшие кеши или предлагают их в качестве дополнительных функций — преимущества производительности слишком велики, чтобы их игнорировать, даже в конструкциях со сверхнизким энергопотреблением.

Кэширование было изобретено для решения серьезной проблемы. В первые десятилетия развития вычислений основная память была чрезвычайно медленной и невероятно дорогой, но и процессоры не были особенно быстрыми. Начиная с 1980-х годов разрыв стал быстро увеличиваться. Тактовая частота микропроцессоров резко выросла, но время доступа к памяти улучшилось гораздо менее резко.По мере роста этого разрыва становилось все более очевидным, что для преодоления этого разрыва необходим новый тип быстрой памяти.

Хотя он работает только до 2000 года, растущие несоответствия 1980-х годов привели к разработке первых кешей ЦП.

Как работает кэширование

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

Промах в кэше, с другой стороны, означает, что ЦП должен уйти в поисках данных в другом месте. Здесь в игру вступает кэш L2 — он медленнее, но гораздо больше. Некоторые процессоры используют инклюзивный дизайн кэша (это означает, что данные, хранящиеся в кэше L1, также дублируются в кеше L2), в то время как другие являются эксклюзивными (то есть два кеша никогда не обмениваются данными).Если данные не могут быть найдены в кэше L2, ЦП переходит вниз по цепочке к L3 (обычно все еще на кристалле), затем к L4 (если он существует) и к основной памяти (DRAM).

На этой диаграмме показана взаимосвязь между кешем L1 с постоянной частотой попаданий, но большим кешем L2. Обратите внимание, что общая частота совпадений резко возрастает с увеличением размера L2. Более крупный, медленный и дешевый L2 может обеспечить все преимущества большого L1, но без потери размера кристалла и энергопотребления. Большинство современных коэффициентов попадания в кэш L1 намного выше теоретических 50 процентов, показанных здесь — Intel и AMD обычно используют коэффициент попадания в кэш 95 процентов или выше.

Следующая важная тема — ассоциативность множеств. Каждый ЦП содержит определенный тип ОЗУ, называемый ОЗУ тегов. ОЗУ тегов — это запись всех ячеек памяти, которые могут отображаться в любой заданный блок кеша. Если кеш полностью ассоциативен, это означает, что любой блок данных RAM может храниться в любом блоке кеша. Преимущество такой системы состоит в том, что частота совпадений высока, но время поиска чрезвычайно велико — ЦП должен просмотреть весь свой кеш, чтобы выяснить, присутствуют ли данные, прежде чем выполнять поиск в основной памяти.

На противоположном конце спектра у нас есть кэши с прямым отображением. Кэш с прямым отображением — это кэш, в котором каждый блок кеша может содержать один и только один блок основной памяти. Этот тип кэша можно искать очень быстро, но, поскольку он отображает 1: 1 в ячейки памяти, у него низкий процент попаданий. Между этими двумя крайностями находятся ассоциативные кэши n- пути. Двухсторонний ассоциативный кеш (L1 Piledriver является двусторонним) означает, что каждый блок основной памяти может отображаться в один из двух блоков кеша.Восьмисторонний ассоциативный кэш означает, что каждый блок основной памяти может находиться в одном из восьми блоков кеша. Кэш инструкций L1 Ryzen является четырехсторонним ассоциативным, а кэш данных L1 — восьмисторонним ассоциативным.

Следующие два слайда показывают, как повышается процент попаданий с помощью ассоциативности набора. Имейте в виду, что такие вещи, как частота попаданий, очень специфичны — разные приложения будут иметь разные показатели.

Почему кеши ЦП становятся все больше

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

Эта диаграмма из обзора Haswell компании Anandtech полезна, поскольку она показывает влияние на производительность добавления огромного (128 МБ) кэша L4, а также обычных структур L1 / L2 / L3. Каждая ступенька представляет собой новый уровень кеша. Красная линия — это чип с L4 — обратите внимание, что для файлов большого размера он все равно почти в два раза быстрее, чем два других чипа Intel.

Тогда может показаться логичным выделять огромное количество ресурсов на кристалле для кэширования, но оказывается, что от этого предельная отдача уменьшается.Кеши большего размера работают медленнее и дороже. При шести транзисторах на бит SRAM (6T) кэш также стоит дорого (с точки зрения размера кристалла и, следовательно, стоимости в долларах). После определенного момента имеет смысл потратить бюджет мощности чипа и количество транзисторов на большее количество исполнительных блоков, лучшее предсказание ветвлений или дополнительные ядра. Вверху истории вы можете увидеть изображение чипа Pentium M (Centrino / Dothan); вся левая сторона кристалла отведена под массивный кэш L2. Так было в последние дни однопоточных ЦП, теперь, когда у нас есть многоядерные чипы и встроенные графические процессоры, во многих случаях меньший процент от общего ЦП выделяется для кеширования.

Как дизайн кэша влияет на производительность

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

Представьте, что ЦП должен загрузить данные из кэша L1 100 раз подряд. Кэш L1 имеет задержку доступа 1 нс и 100-процентную частоту совпадений. Следовательно, для выполнения этой операции нашему ЦП требуется 100 наносекунд.

Кадр Haswell-E (щелкните, чтобы увеличить). Повторяющиеся структуры в середине чипа составляют 20 МБ общей кэш-памяти третьего уровня.

Теперь предположим, что коэффициент попадания в кэш составляет 99 процентов, но данные, которые фактически необходимы ЦП для его сотого доступа, находятся в L2 с задержкой доступа 10 циклов (10 нс). Это означает, что процессору требуется 99 наносекунд для выполнения первых 99 операций чтения и 10 наносекунд для выполнения сотого. Снижение частоты обращений на 1 процент только что замедлило работу ЦП на 10 процентов.

В реальном мире кэш L1 обычно имеет процент попаданий от 95 до 97 процентов, но влияние на производительность этих двух значений в нашем простом примере составляет не 2 процента — это 14 процентов. Имейте в виду, мы предполагаем, что пропущенные данные всегда находятся в кэше L2. Если данные были исключены из кеша и находятся в основной памяти с задержкой доступа 80–120 нс, разница в производительности между 95 и 97 процентами совпадений может почти удвоить общее время, необходимое для выполнения кода.

В те времена, когда семейство AMD Bulldozer сравнивали с процессорами Intel, тема дизайна кэша и влияния на производительность стала очень актуальной. Неясно, насколько низкая производительность Bulldozer может быть связана с его относительно медленной подсистемой кеширования — помимо относительно высоких задержек, семейство Bulldozer также пострадало от большого количества конфликтов с кешем . Каждый модуль Bulldozer / Piledriver / Steamroller совместно использует свой кэш инструкций L1, как показано ниже:

Кэш используется, когда два разных потока записывают и перезаписывают данные в одном и том же пространстве памяти.Это вредит производительности обоих потоков — каждое ядро ​​вынуждено тратить время на запись своих собственных предпочтительных данных в L1, только для того, чтобы другое ядро ​​быстро перезаписало эту информацию. AMD СТАРЫЙ Steamroller по-прежнему сталкивается с этой проблемой, хотя AMD увеличила кэш кода L1 до 96 КБ и сделала его трехсторонним ассоциативным вместо двух. Более поздние процессоры Ryzen не разделяют кеш таким образом и не страдают от этой проблемы.

Изображение Anandtech

На этом графике показано, как снизилась частота совпадений Opteron 6276 (оригинальный процессор Bulldozer), когда оба ядра были активны, по крайней мере, в некоторых тестах.Ясно, однако, что конкуренция за кэш — не единственная проблема: 6276 исторически изо всех сил пытался превзойти 6174, даже когда оба процессора имели одинаковую частоту совпадений.

Zen 2 сегодня не имеет подобных недостатков, а общая производительность кеш-памяти и памяти Zen и Zen 2 намного лучше, чем у более старой архитектуры Piledriver.

Современные процессоры также часто имеют очень маленький кэш L0, который часто составляет всего несколько килобайт и используется для хранения микроопераций. AMD и Intel используют такой кэш; У Zen кеш-память 2048 µOP, а у Zen 2 — 4096 µOP.Эти крошечные пулы кеш-памяти работают по тем же общим принципам, что и L1 и L2, но представляют собой пул памяти еще меньшего размера, к которому ЦП может обращаться с еще более низкой задержкой, чем L1. Часто компании адаптируют эти возможности друг к другу. Zen 1 и Zen + (APU Ryzen 1xxx, 2xxx, 3xxx) имеют кэш инструкций L1 объемом 64 КБ, который имеет 4-сторонний ассоциативный набор, и кэш L0 2048 µOP. Zen 2 (процессоры Ryzen 3xxx для настольных ПК, Ryzen Mobile 4xxx) имеет кэш-память L1 размером 32 КБ с 8-позиционным ассоциативным набором и 4096 µOP кэш-памяти.Удвоение ассоциативности набора и размера кеш-памяти µOP позволило AMD вдвое сократить размер кеш-памяти L1. Подобные компромиссы обычны в конструкции ЦП.

Caching Out

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

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

Сейчас читаем:

Также ознакомьтесь с нашей серией ExtremeTech Explains для более глубокого освещения самых горячих современных технических тем.

.

Что такое кэш?

Обновлено: 11.10.2017 компанией Computer Hope

Кэш может относиться к любому из следующего:

1. Произносится как физическая форма денег, cache — это область высокоскоростного доступа, которая представляет собой зарезервированный раздел основной памяти или область на устройстве хранения. Двумя основными типами кеш-памяти являются кэш памяти и дисковый кэш .

Кэш памяти — это часть высокоскоростной SRAM (статической памяти с произвольным доступом), которая эффективна, поскольку большинство программ повторно обращаются к одним и тем же данным или инструкциям.Сохраняя как можно больше этой информации в SRAM, компьютер избегает доступа к более медленной DRAM, заставляя компьютер работать быстрее и эффективнее. Сегодня большинство компьютеров поставляются с кешем L3 или L2, в то время как старые компьютеры включают только кэш L1. Ниже приведен пример процессора Intel i7 и его общей кэш-памяти третьего уровня.

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

Совет

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

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

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

Буфер, условия базы данных, условия оборудования, история, L1, L2, L3, условия памяти, прокси-сервер, сервер, файл подкачки, тег, условия веб-дизайна, кэш обратной записи

.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *