Почему загрузка фрагментов данных в кэш процессора является эффективным способом обработки?

453
user3324945

Я знаю, что загрузка инструкций в кеш увеличивает общую скорость обработки. Ответ на вопрос связан с организацией и скоростью?

-1
Можете ли вы уточнить немного, что вы ищете? Потому что это похоже на вопрос программирования, и если это так, вам нужно быть на сайте сети. LPChip 10 лет назад 0
Я не смотрю на тонкости управления кэшем. Я хочу знать ответ на главный вопрос в очень общих чертах user3324945 10 лет назад 0
@ user3324945 - вышеуказанный вопрос не ясен. Я бы также сказал, что на самом деле очень неэффективно обрабатывать порции данных. Ваш актуальный вопрос не так уж и ясен. Ramhound 10 лет назад 0
Мой ответ на вопрос «Почему компьютеры переносят данные и инструкции из основной памяти в кэш-память в блоках, если это означает, что одна ошибка в кэше может много перезаписать»] (http://stackoverflow.com/q/22446371) (закрытый вопрос) может достаточно ответить на ваш вопрос. Paul A. Clayton 9 лет назад 0

1 ответ на вопрос

-1
mrpete

Во-первых, «куски» часть вашего вопроса ...

Обычно управление памятью происходит с помощью кусков памяти. Управлять памятью побайтово не имеет смысла. Это связано с тем, что для управления частью памяти вам нужна структура данных, которая содержит информацию об этом фрагменте памяти. Давайте сделаем дикое предположение и скажем, что эта структура данных имеет длину 24 байта. Вы не будете использовать 24-байтовую структуру данных для управления 1 байтом памяти. Вы хотите "экономию от масштаба". В противном случае вы получите ужасно большое количество накладных расходов. Вместо этого вы управляете 1 КБ / 32 КБ / 1 МБ / независимо от того, за один раз.

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

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

Запись в кеше является примером структуры данных, о которой я упоминал ранее.

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

Проверьте запись в Википедии ниже. У этого есть больше информации.

http://en.wikipedia.org/wiki/CPU_cache

======

А теперь более общий ответ о кеше процессора.

Главным образом, ускорение происходит потому, что когда процессор обращается к кешу, он получает инструкции / данные НАМНОГО! быстрее, чем когда он обращается к основной памяти.

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

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