Основная причина разделения L1 состоит в том, чтобы распределить необходимые порты чтения / записи (и, следовательно, полосу пропускания) между двумя кешами и разместить их физически близко к частям конвейера загрузки / хранения данных, а не к частям выборки инструкций.
Также для L1d для обработки байтовой загрузки / сохранения (и на некоторых ISA, невыровненных более широких загрузок / хранилищ). На процессорах x86, которые хотят обрабатывать это с максимальной эффективность (не RMW содержащего слова (слов)), Intel L1d может использовать только четность, но не ECC. L1i должен обрабатывать только выборки фиксированной ширины, часто что-то простое, например выровненный 16-байтовый фрагмент, и он всегда чистый, потому что он доступен только для чтения, поэтому ему нужно только обнаруживать ошибки (не правильно), и просто повторите загрузку. Таким образом, у него может быть меньше накладных расходов для каждой строки данных, например, только пара битов четности на 8 или 16 байтов.
См. Почему размер кэша L1 меньше, чем размер кеша L2 в большинстве процессоров? re: невозможно создать один большой унифицированный кеш L1 с удвоенной пропускной способностью, той же задержкой и суммой пропускной способности, как у разделенного L1i / d. (По крайней мере, чрезмерно дороже для питания из-за размера и количества портов чтения / записи, но потенциально фактически невозможно из-за задержки из-за физического расстояния.)
Ни один из этих факторов не важен для L2 (или вообще не существует в случае невыровненных / байтовых хранилищ). Общая емкость, которую можно использовать для кода или данных, наиболее полезна в этом случае и распределяется на конкурсной основе по запросу.
Очень редко для любой рабочей нагрузки будет много промахов L1i и L1d в одном тактовом цикле, потому что частые промахи кода означают, что внешний интерфейс останавливается, а серверная часть будет работать без нагрузки / хранить инструкции для выполнения. (Частые промахи L1i случаются редко, но частые промахи L1d действительно случаются при некоторых обычных рабочих нагрузках, например, при зацикливании массива, который не помещается в L1d, или большой хеш-таблицы, или другой более разрозненной модели доступа.) В любом случае это означает, что данные могут быть получить большую часть общего бюджета полосы пропускания L2 в нормальных условиях, а унифицированному L2 по-прежнему нужен только 1 порт чтения.
Ответ @Hadi, который вы связали, охватывает большинство из этих причин, но я думаю, не повредит написать упрощенный / сводный ответ.
person
Peter Cordes
schedule
03.10.2020