Зачем нам нужно несколько уровней кеш-памяти?


5

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

Мой вопрос: зачем нам нужно несколько уровней кэшей (L1, L2, L3), а не только один?

Я знаю, что L1 - самый быстрый и самый маленький, L2 - немного медленнее, немного больше и так далее ... но почему они создают аппаратное обеспечение таким образом?


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

Ответы:


11

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

Если мы хотим включить большой кеш в единственном числе, он должен находиться на очень коротком расстоянии от MMU, ALU и т. Д. Одновременно. Это делает физическое проектирование процессора довольно сложным, так как большой кэш занимает много места. Чтобы сделать кэш «локальным» для этих подразделений, вы должны пожертвовать местами расположения подразделений друг для друга.

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

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

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


Ницца! Есть ли у вас источники ссылки?
Тор

Один интересный аспект влияния физического размера на большие объемы памяти заключается в том, что разработчик может рассмотреть возможность использования более медленных запоминающих устройств для каждого бита и, тем не менее, увеличить скорость доступа, если более медленные устройства достаточно малы. Это означает, что DRAM может иметь смысл для очень больших кэшей. (Существуют также методы неоднородной архитектуры кэша, в которых более близкие части L2 имеют более низкую задержку. С разделенными кэшами L3 физическая близость [или внутренняя сеть] может использоваться для выбора размещения для повышения производительности.)
Пол А. Клейтон

@Thor Это одно из тех странных знаний, которые я накопил за годы случайного чтения и игры с микропроцессорами, но статья в вики довольно обширна, особенно часть о многоуровневых архитектурах кэша.
Полином
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.