Написание этого ответа, поскольку я не получил его даже после прочтения других ответов на этот вопрос, нескольких других вопросов и википедии (это более запутанно).
Я думаю, что мы тратим много времени и энергии, чтобы понять терминологию, которая в данном случае немного запутанна/сложна. Мне было легче понять, когда я не обращал внимания на термины «пространственный» и «временной».
Начнем с основ.
Давайте попробуем понять, что такое кэш — место, доступ к которому осуществляется быстрее, чем к основной памяти. Это классно. Но это место ограничено и дорого, поэтому нужно использовать его с умом. Но как бы вы (или ОС) решили, что помещать в кеш, а что нет? Должен быть какой-то способ узнать, что нам понадобится в будущем… ах, предсказания будущего! (Отчет меньшинства! Звоните в колокольчики?).
Должен быть какой-то способ определить, что понадобится программе в будущем. Используя здравый смысл и код, мы можем сказать, что некоторые части кода повторяются по своей природе — например, циклы! Если внутри цикла есть переменная i, вы знаете, что в ближайшем будущем к ней будут обращаться снова и снова. Это принцип временной локальности. я могу быть внесен в кеш, так как он временно локальный.
В другой области, если код использует любую линейную структуру данных (пример: массив) и это тоже в цикле с приращением в индексе, то легко увидеть, что, хотя в настоящее время требуется только 3-е место (например) этой структуры данных, очень скоро также потребуются следующие местоположения, потому что индекс увеличивается на 1 для этой линейной структуры данных. Так что было бы здорово, если бы мы добавили данные и из следующих нескольких местоположений. Это принцип пространственной локальности. Следующие несколько местоположений могут быть помещены в кеш, поскольку они пространственно локальны.
Концепция локальности в основном состоит в том, чтобы идентифицировать данные и инструкции для внесения в кеш, чтобы мы могли уменьшить количество промахов в кеше и эффективно использовать это особое место.
person
Saurabh Patil
schedule
21.07.2018