Кэш-память
Время выполнения команд процессором, как правило, всегда существенно меньше времени выборки данных из оперативной памяти.
Такое несоответствие в скорости работы приводит к тому, что, когда процессор обращается к памяти, проходит несколько машинных циклов, прежде чем он получит запрошенное слово. Чем медленнее работает память, тем дольше процессору приходится ждать, (простой процессора).
В большей степени эта проблема не технологическая, а экономическая.
Технологически можно создать память, которая работает так же быстро, как процессор. Однако ее приходится помещать прямо на микросхему процессора (поскольку информация через шину поступает существенно медленнее).
Размещение памяти большого объема на микросхеме процессора делает его больше и, следовательно, дороже, и даже если бы стоимость не имела значения, все равно существуют технологические ограничения на размеры создаваемых процессоров.
Таким образом, приходится выбирать между быстрой памятью небольшого объема и медленной памятью большого объема. (Мы, естественно, предпочли бы иметь быструю память большого объема и к тому же дешевую.)
Однако существует способ, объединяющий небольшую и быструю память с большой и медленной памятью.
Это позволяет по разумной цене получить память и с высокой скоростью работы, и с большой емкостью.
Память небольшого объема с высокой скоростью работы называется кэш-памятью.
В английском языке слово «cash получило значение «наличные (карманные) деньги, то есть то, чтo под рукой. А уже из него и образовался термин "кэш", который относят к сверхоперативной памяти.
Основная идея кэш-памяти проста: в ней находятся слова с данными, которые чаще всего используются.
Если процессору нужно какое-нибудь слово, сначала он обращается к кэш-памяти. Только в том случае, если слова там нет (кэш-промах), он обращается к основной памяти. Если значительная часть слов находится в кэш-памяти, среднее время доступа значительно сокращается.
Таким образом, эффективность кэш-памяти определяется тем, какая часть слов находится в кэш-памяти.
Известно, что программы не обращаются к памяти наугад. Если программе нужен доступ к адресу А то скорее всего после этого ей понадобится доступ к адресу, расположенному поблизости от А.
Практически все команды обычной программы (за исключением команд перехода и вызова процедур) вызываются из последовательных областей памяти. Кроме того, большую часть времени программа тратит на циклы, когда ограниченный набор команд выполняется снова и снова.
Высокая вероятность последовательных обращений к ограниченному (локальному) объему памяти в течение некоторого промежутка времени, называется принципом локальности.
Этот принцип лежит в основе всех систем кэш-памяти.
Идея состоит в том, что когда определенное слово вызывается из памяти, оно вместе с соседними словами переносится в кэш-память, что позволяет при очередном запросе быстро обращаться к следующим словам.
Схема подключения процессора, кэш-памяти и основной памяти показана на рисунке.
Если слово считывается или записывается k раз, компьютеру требуется сделать 1 обращение к медленной основной памяти и k - 1 обращений к быстрой кэш-памяти. Чем больше k, тем выше общая производительность.
В некоторых системах обращение к основной памяти может начинаться параллельно с проверкой кэш-памяти, чтобы в случае кэш-промаха цикл обращения к основной памяти уже начался. Однако эта стратегия требует способности останавливать процесс обращения к основной памяти вслучае кэш-попадания, что усложняет разработку подобного компьютера.
Основная память и кэш-память делятся на блоки фиксированного размера с учетом принципа локальности.
Блоки внутри кэш-памяти обычно называют строками кэша(cache lines). При кэш-промахе из основной памяти в кэш-память загружается вся строка, а не только необходимое слово.
Например, если строка состоит из 64 байт, обращение к адресу 260 влечет за собой загрузку в кэш-память всей строки (байты с 256 по 319) на случай, если через некоторое время понадобятся другие слова из этой строки.
Такой путь обращения к памяти более эффективен, чем вызов каждого слова по отдельности, потому что однократный вызов k слов происходит гораздо быстрее, чем вызов одного слова k раз.
Кэш-память очень важна для повышения производительности процессоров. Однако при этом возникают следующие вопросы:
- Какой объем кэш-памяти должен быть? Чем больше объем, тем лучше работает память, но тем дороже она стоит.
- Какой размер должен быть у строки кэш-памяти? Кэш-память объемом 16 Кбайт можно разделить на 1024 строки по 16 байт, или 2048 строк по 8 байт и т. д.
- Какое использовать правило для определения, какие именно слова должны находятся в данный момент в Кеш-памяти?
- Должны ли команды и данные находиться вместе в общей кэш-памяти?
Более простая (и дешевая) объединенная кэш-память (unified cache), в которой охраняться и данные и команды.
В настоящее время существует тенденция к использованию разделенной кэш-памяти (split cache), когда команды хранятся в одной кэш-памяти, а данные — в другой.
Такая архитектура также называется гарвардской (Harvard architecture), поскольку эта идея родилась в Гарвардском университете.
Разделенная кэш-память позволяет осуществлять параллельный доступ к командам и к данным, а объединенная — нет.
К тому же, поскольку команды обычно не меняются во время выполнения программы, содержание кэша-команд не приходится записывать обратно в основную память, в отличие от содержимого кэша-данных.
Какой использовать способ размещения блоков кэш-памяти? В настоящее время блок кэш-память может располагаться:
- прямо на микросхеме процессора - кэш-память первого уровня,
- не на самой микросхеме, но в корпусе процессора - кэш-память второго уровня
- вне корпуса микросхемы процессора — кэш-память третьего уровня.
Дата добавления: 2015-07-24; просмотров: 883;