## 10. Повышение эффективности оперативной памяти

Для количественной оценки эффективности оперативной памяти применяется система характеристик, содержащая следующие параметры:

1. тип микросхем памяти;

2. объем памяти;

3. допустимая тактовая частота системной шины;

4. быстродействие микросхем памяти;

5. скорость обмена или производительность;

6. плотность хранения данных;

7. отношение цены к объему – удельная стоимость, или стоимость хранения одного бита данных;

8. надежность или достоверность хранения данных;

Тип микросхемы памяти определяется ее физическим внутренним устройством. От типа микросхемы существенно зависят быстродейтсвие и производительность памяти, которые, в свою очередь, оказывают существенное влияние на общее быстродействие компьютера.

Микросхемы памяти принимают и выдают коды данных на системную шину, которая работает на определенной тактовой частоте. Посокльку все действия микросхем памяти и шины во время такой передачи должны быть строго согласованы, считается, что определяющим фактором для микросхемы памяти является тактовая частота системной шины, которая, таким образом, становится одной из важных характеристик ОП.

Быстродействие памяти определяется временем, затрачиваемым на выполнение операций записи данных в память и считывания из нее. Чем меньше это время, тем быстрее и эффективнее память.

Кроме быстродействия микросхемы памяти характеризуются производительностью, скоростью обмена или пропускной способностью, которая равна объему передаваемых в память или из памяти данных в единицу времени. Скорость обмена измеряется в количестве передаваемых байт в секунду (байт/с) или в кратных единицах – килобайтах в секунду (Кбайт/с), мегабайтах (Мбайт/с) и гигабайтах в секунду (Гбайт/с). Не следует путать быстродействие и производительность – это связанные, но различные характеристики памяти.

Плотность хранения информации измеряется количеством байт, которое может быть сохранено в единице измерения, характерной для устройства памяти: например, для жестких дисков – на единице площади запоминающей поверхности.

### 10.1. Статическая и динамическая память

Статическая память реализуется на триггерах. Для хранения одного бита памяти требуется не менее шести транзисторов. Такая память может сохранять записанные данные неограничено долго без дополнительных действий (при наличии питания). Ее принято обозначать SRAM (Static Random Access Memory – статическая память с произвольным доступом).

Статическая память отличается высоким быстродействием, но в то же время она характеризуется довольно низкой плотностью хранения данных – в одном корпусе микросхемы можно разместить около миллиона байт. При современных требованиях к объемам ОП в компьютере статическая память считается дорогой и громоздкой. Кроме того, такая память отличается высоким энергопотреблением.

В настоящее время биты ОП реализуют с помощью конденсаторов. Считается, что конденсатор с высоким уровнем напряжения между обкладками содержит цифру 1, а с низким – цифру 0. Для обслуживания конденсатора к нему подсоединяется всего один транзистор (сравните с шестью транзисторами триггера). Такая реализация бита имеет значительно более высокую плотность хранения данных – в одном корпусе микросхемы можно поместить десятки миллионов байт. Это значит, что при равных объемах такая память будет занимать гораздо меньшую площадь, чем статическая разновидность. Кроме того, эта память отличается гораздо меньшей стоимостью и более низким потреблением электроэнергии.

Недостатком ОП на конденсаторах являются ее относительно низкие скоростные показатели. Есть еще один негативный фактор – конденсаторы через несколько миллисекунд самопроизвольно теряют заряд. Чтобы находящиеся в ОП данные и программы при этом сохранялись, состояние конденсаторов необходимо периодически восстанавливать до исходного уровня. Для этого осуществляются периодическое считывание хранящихся данных и повторная их запись. Такой процесс называется регенерацией памяти. Регенерацию битов памяти можно совместить с чтением или записью данных. Можно также выполнять ее отдельно, но во время самостоятельной регенерации ОП недоступна для взаимодействия с процессором и другими устройствами компьютера, что может отрицательно сказаться на скорости работы компьютера. Тем не менее самостоятельные циклы регенрации необходимо с определенной периодичностью выполнять, поскольку без них при отсутствии операций чтения/записи занесенные в память коды окажутся утерянными.

ОП, реализованную в виде периодически подзаряжаемых конденсаторов, называют динамической и обозначают DRAM (от Dynamic Random Access Memory – динамическая память с произвольным доступом).

### 10.2. Микросхемы памяти

Конструктивно биты как статической, так и динамической памяти объединяют в микросхемы. Группу битов микросхемы, которые считываются или записываются одновременно, принято называть ячейкой микросхемы. Не следует путать ячейки микросхемы с ячейками (байтами) ОП, которые могут совпадать или не совпадать друг с другом. Количество битов в ячейке микросхемы, т. е. ее разрядность может равняться 2, 4, 8, 16 и т. д. Для обеспечения оптимальных геометрических размеров микросхемы ее ячейки образуют матричную структуру. Индексы строки и столбца, на пересечении которых находится ячейка, образуют ее адрес внутри микросхемы. Обычно применяют квадратные матрицы ячеек микросхемы, хотя существуют и прямоугольные.

Важной характеристикой микросхемы является структура, определяющая общий объем микросхемы и разрядность ее ячеек. Структура задается в виде произведения объема на разрядность. При этом первый сомножитель, объем, задают в килобайтах или мегабайтах, а второй, разрядность ячейки, измеряется в битах. Единицы измерения килобайт и мегабайт принято сокращать до первой буквы, например, 64 К х 4. Современные микросхемы памяти имеют разрядность ячеек 8, 16 бит и более, а их объемы достигают десятков мегабайт.

Для повышения быстродействия и согласования с разрядностью шины данных отдельные микросхемы могут быть объединены в так называемые банки памяти. Например, две микросхемы с разрядностью ячейки 8 бит могут объединиться в банк для формирования 16-битового машинного слова. В последнее время в связи с ростом объемов и разрядностей с той же целью внутри одной микросхемы образуют несколько независимых банков.

В информатике банком называется совокупность совместно используемых однотипных элементов, средств и устройств.

Объединение микросхем в банки или разбиение микросхемы на банки производится только на функциональном, логическом уровне. Конструктивно, физически микросхемы ОП располагаются на так называемых платах, которые представляют собой тонкие пластинки обычно прямоугольной формы стандартных унифицированных размеров.

В современных компьютерах микросхемы памяти не крепятся на материнскую плату, а объединяются на отдельных платах, которые принято называть модулями памяти. Платы модулей памяти с помощью краевых разъемов вставляются в слоты материнской платы, и из них в конечном счете набирается вся оперативная память компьютера.

Различают две конструкции модулей памяти: SIMM (Single In Line Memory Modules – однорядные модули памяти) и DIMM (Dual In Line Memory Modules – двухрядные модули памяти). В соответствии с названием в модулях SIMM микросхемы размещены в один ряд, а в модулях DIMM – в два ряда.

Фактический диапазон адресов ОП распределяется между микросхемами модулей в соответствии с их объемами и количеством. Пусть, например, ОП состоит из четырех микросхем. Тогда старшие два бита адреса байта или поля памяти могут использоваться для выбора микросхемы или банка, к которым относится этот адрес (рис. 10.1). Например, адреса, начинающиеся с двух двоичных нулей, 00xxx…x2 (xxx – остальные цифры адреса), закрепляются за микросхемой с номером 0, адреса, имеющие вид 01ххх…х2, – за микросхемой с номером 1 и т. д. Последняя группа адресов, 11ххх…х2, закрепляется за микросхемой 3.

Рис. 10.1

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

### 10.2. Цикл памяти

Работа микросхем ОП во время чтения или записи кодов организована в виде циклически повторяемой последовательности действий.

Циклом памяти называется последовательность действий, которые выполняются в процессе чтения кода из микросхемы памяти или записи в нее нового кода.

Время доступа памяти представляет собой задержку начала получения данных из памяти относительно появления запроса на них.

Время обращения к памяти складывается из следующего.

1. Время выбора микросхемы памяти (CS – Chip Select). Одновременно выставляется сигнал признака операции (Read\Write).

Выбранная микросхема становится активной и затем начинается цикл памяти для выбранной микросхемы.

2. Время выбора строки, сигнал RAS# (Row Address Strobe).

3. Время выбора столбца, сигнал СAS# (Column Address Strobe).

4. Время стабилизации выходных сигналов при чтении или время стабилизации кода на входных линиях.

Для упрощенного описания циклов памяти используются условные схемы, в которых длительность цикла задается в количестве тактов синхронизации центрального процессора. При этом в схеме обычно показывают длительности четырех следующих друг за другом циклов памяти.

Рис. 10.2

В примере на рис. 10.2 в течение одного цикла памяти тактовый генератор выдает 5 синхроимпульсов. Следовательно, в стандартном режиме работы микросхемы такой цикл памяти изображается как условная схема вида 5-5-5-5, что соответствует четырем последовательным операциям обмена, выполненным за 5 тактовых импульсов каждая.

Типичное время доступа для микросхем динамической памяти составляет 40 – 100 нс, а у лучших образцов достигает 5 – 10 нс. Время доступа у микросхем статической памяти исчисляется единицами наносекунд.

Пропускная способность памяти зависит от длины машинного слова и от длительности цикла. Например, при длительности цикла 40 нс за одну секунду совершается 25 000 000 циклов памяти. Пусть разрядность шины данных равна 16 битам, т. е. за один цикл передается 2 байта. Следовательно, за одну секунду передается 50 000 000 байтов. Т. о., скорость обмена составляет 50 000 000 байт/с или примерно 48 Мбайт/с. Необходимо учитывать, что в современных типах микросхем данные выставляются на шину два или более раз за один цикл. Поэтому при расчете производительности микросхемы нужно учитывать еще и этот фактор.

### 10.3.Типы микросхем динамической памяти

У рассмотренных стандартных микросхем DRAM цикл памяти включает в себя все три фазы: адреса, данных и восстановления. Поэтому они отличаются большими значениями времени доступа и длительности цикла памяти. Для повышения эффективности работы микросхем, уменьшения времени доступа и длительности цикла памяти были предложены различные варианты. Далее рассматриваются методы, сыгравшие значительную роль в улучшении характеристик ОП.

#### 10.3.1. Расслоение памяти

Для повышения эффективности несколько микросхем памяти могут быть объединены в один банк, равно как в одной микросхеме может быть организовано несколько банков памяти.

С помощью соответствующих изменений в работе контроллера памяти соседние циклы чтения/записи для различных банков могут быть частично совмещены во времени. Это означает, что пока в одном из банков идет, например, фаза восстановления текущего цикла памяти, в другом банке памяти в это же самое время может проходить фаза адреса следующего цикла. Такой метод работы памяти принято называть расслоением памяти, чередованием адресов или интерливингом (Interleave Mode – режим прослаивания). Впервые режим расслоения памяти был реализован в компьютере STRETCH в 1961 г.

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

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

В общем случае количество банков k выбирается равным небольшой степени двойки k = 2m, где m = 1, 2, 3, 4, рис. 10.3 б. При обращении к байтам памяти с последовательными адресами время выборки может уменьшиться в k раз по сравнению с базовым вариантом рис. 10.3 а.

Рис. 10.3

#### 10.3.2. Микросхемы FPM DRAM

Ускорить операции выборки из ячеек микросхемы или записи в них можно за счет уменьшения длительности фазы адреса. Если зафиксировать некоторую строку микросхемы (или банка), а затем выбирать ячейки только из этой строки, то можно сэкономить время за счет отказа от формирования адреса строки, одного и того же у всех обрабатываемых ячеек. Выделенную для многократной выборки строку микросхемы принято называть страницей памяти, а микросхемы, работающие по описанному принципу, относят к типу FPM DRAM (Fast Page Mode DRAM – динамическая память с быстрым страничным режимом). Микросхемы такого типа появились в 1982 г.

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

Для микросхем типа FPM DRAM диаграмма имеет вид 5-3-3-3. Длительность первого цикла памяти (5 тактов) больше, чем длительность всех следующих за ним циклов, работающих с той же самой строкой микросхемы (3 такта). Таким образом, если для выборки четырех последовательных ячеек в случае стандартной микросхемы требуется 20 тактов, то для выборки в страничном режиме нужно всего 14.

При случайной адресации эта микросхема никаких преимуществ не дает.

#### 10.3.3. Микросхемы EDO DRAM

В 1995 г. был предложен вариант улучшения эффективности микросхем FPM DRAM. Это улучшение обусловлено совмещением во времени считывания данных с выхода микросхемы и фазы формирования адреса следующего столбца в одном и том же цикле памяти. Для организации такого совмещения на выходе микросхемы был установлен дополнительный регистр-защелка, выполненный на обладающих большой скоростью триггерных вентилях. После выставления сигнала CAS# данные из текущей ячейки с большой скоростью записываются в этот регистр, а затем, пока они со стандартной скоростью передаются из регистра на шину данных, на адресную шину микросхемы выставляется адрес следующего столбца. Таким образом, в цикле памяти фактически организован конвейер, когда разные устройства одновременно выполняют разные этапы в некоторой операции. В данном случае это контроллер памяти, выставляющий адрес следующего столбца, и шина данных, одновременно с контроллером считывающая код из регистра защелки.

Микросхемы, работающие в описанном режиме, относят к типу EDO DRAM (от Extended Data Out DRAM – расширенное время удержания данных на выходе). Иногда этот режим называют гиперстраничным и обозначают -HPM DRAM (Hyper Page Mode DRAM). Цикл памяти этого режима имеет структуру 5-2-2-2, и, таким образом, четыре последовательных считывания требуют всего 11 тактов. В режиме EDO DRAM примерно 15% по сравнению с FPM DRAM ускоряется процесс считывания последовательных элементов массивов. При случайной адресации такая память ничем не отличается от стандартной.

#### 10.3.4. Микросхемы BEDO DRAM

Следующим шагом в повышении эффективности микросхем стало появление так называемого пакетного, или блочного, режима работы, который является усовершенствованием режима EDO DRAM. Блочный режим заключается в том, что во время чтения одной ячейки вместе с ней читаются еще три, расположенных в той же строке, независимо от наличия или отсутствия запроса на них. Такая группа байтов, передаваемых из банка памяти, считается пакетом, или блоком – отсюда название режима работы. Тип микросхем, в которых реализован такой метод, называется BEDO DRAM (Burst EDO DRAM – расширенное время удержания данных на выходе с блочным доступом, т. е. память на основе режима EDO, но работающая не одиночными, а пакетными циклами чтения/записи).

В режиме BEDO адрес столбца устанавливается только для первой ячейки. Далее осуществляется простой переход к следующей ячейке в строке микросхемы. Для формирования нужного количества байт в блоке (пакете) в фазе адреса инициализируется специальный счетчик. Формирование счетчика увеличивает время доступа, но это увеличение с лихвой покрывается общим уменьшением времени при выборке пакета. Цикл памяти этого режима имеет вид 5-1-1-1, а значит, четыре последовательных считывания требуют всего 8 тактов. Характерное время доступа до 70 нс, а длительность цикла в пакете доходит до 15 нс. Допускается тактовая частота до 66 МГц.

#### 10.3.5. Микросхемы SDRAM

Стандартные типы микросхем DRAM, а также микросхемы FPM DRAM, EDO DRAM и BEDO DRAM относятся к асинхронным устройствам. Фаза адреса, моменты выдачи управляющих сигналов и обмен данными у них могут начинаться в произвольные моменты времени. Необходимо только точное соблюдение соотношений между действиями и сигналами по их длительности. В эти временные соотношения включены так называемые охранные интервалы, необходимые для стабилизации сигналов и кодов, которые не позволяют достичь теоретически возможного быстродействия памяти.

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

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

Появившиеся к 1997 г. микросхемы памяти, работающие в привязке к тактовым импульсам, называются SDRAM (Synchronous DRAM – синхронизированная динамическая память). Ориентация на тактовые импульсы в синхронизированной памяти позволяет организовать совмещение во времени для значительно большего количества этапов цикла памяти, запустив их конвейерное выполнение, а также увеличить продолжительность совмещений во времени. Помимо синхронного метода чтения/записи в микросхемах SDRAM используется расслоение памяти на независимые банки, что позволяет совмещать выборку из одного банка с установкой адреса в другом банке. Кроме того, SDRAM поддерживает блочный обмен, характерный для микросхем BEDO DRAM, но стандартный пакет банка микросхемы SDRAM длиннее, он состоит из 32 байтов.

Эффективность микросхем SDRAM значительно выше, чем EDO или BEDO. Хотя цикл памяти имеет вид 5-1-1-1, т. е. четыре операции проходят так же, как и у BEDO, за 8 тактов, SDRAM имеет длительность цикла 10 нс.

В некоторых разновидностях маркировки (спецификации) микросхем SDRAM указывается частота системной шины, т. е. частота, на которой микросхемы могут работать. Например, спецификация PC66 означает, что допустимая частота системной шины у данной микросхемы памяти от 66 до 83 МГц, спецификация PC100 соответствует частоте системной шины 100 – 120 МГц, а спецификация PC133 – частоте системной шины до 150 МГц. Время доступа у указанных микросхем составляет 7 – 9 нс. Они обладают скоростью обмена от 256 до 1000 Мбайт/с. А стандартные объемы одной микросхемы памяти типа SDRAM составляют 128, 256, 512 Мбайт.

#### 10.3.6. Микросхемы DDR DRAM и RDRAM

Относительно новый тип микросхем памяти DDR SDRAM (Double Data Rate SDRAM – синхронизированная динамическая память с удвоением данных) появился вследствие улучшений архитектуры SDRAM, поэтому встречается и другое название SDRAM II. Удвоение скорости достигается не только за счет увеличения тактовой частоты, но и за счет передачи данных два раза за один цикл памяти: первый раз передача происходит в начале цикла, а второй – в его конце. Следовательно, за один такт передается двойной объем данных. Время доступа составляет 5 – 6 нс, а допустимая частота системной шины 800 – 1200 МГц. Отметим, что дальнейшим развитием DDR SDRAM является стандарт DDR2 SDRAM, в котором передача данных осуществляется уже четыре раза за цикл.

Потребителя в большей степени интересует пропускная способность микросхем памяти, которая в связи с новым способом работы микросхем стала зависеть от тактовой частоты более сложным образом. Поэтому у микросхем типа DDR SDRAM в маркировку вынесена не тактовая частота, а скорость обмена: например, микросхема PC2100 имеет скорость обмена, равную 2100 Мбайт/с, а PC3200 – 3200 Мбайт/с. В качестве дополнительного параметра маркировки микросхем ОП используется наличие в микросхеме уже упоминавшейся подсистемы контроля и коррекции ошибок ЕСС.

Не так давно появилась еще одна разновидность синхронизированных модулей памяти с названием RDRAM (Rambus DRAM – от названия фирмы-производителя Rambus, Inc.). В микросхемах этого типа динамической памяти, в частности, предусмотрена 16-разрядная шина передачи данных, при этом данные, так же как у микросхемы DDR DRAM, передаются по два пакета за такт. Время доступа составляет 4 нс, а частота системной шины – до 800 МГц. Микросхемы памяти типа RDRAM имеют типичный объем 2 – 4 Гбайт и скорость обмена до 6000 Мбайт/с.

### 10.4. Многоуровневая организация памяти

В разделе «Организация компьютерных систем» (часть 1) было дано представление об организации памяти компьютера как многоуровневой системе.

Запоминающие устройства компьютера различных уровней существенно отличаются друг от друга своими базовыми характеристиками, такими как объем скорость обмена и стоимость.

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

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

Кратко охарактеризуем свойства используемых в настоящее время уровней памяти компьютера.

Регистровая память процессора. Используется для промежуточного хранения данных в процессе их обработки. Энергозависимый вид памяти. Обладает наиболее высоким быстродействием, поскольку работает на тактовых частотах процессора. Время доступа составляет десятые доли наносекунд. Объем регистров – десятки и сотни машинных слов.

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

Оперативная память. Используется для хранения выполняющихся программ и необходимых им данных. Энергозависимый вид памяти. Время доступа составляет десятки наносекунд, а объем – несколько гигабайт. Более дешевая, чем кэш-память, так как реализуется с помощью динамических микросхем. Высокая надежность хранения данных и программ.

Внешняя память – магнитные и оптические диски. Служит информационным складом. Самый медленный уровень памяти, время доступа порядка 30 мс. Самая дешевая и самая емкая – объем современных дисков составляет десятки терабайт.

Анализируя приведенный список, можно заметить, что уровни памяти компьютера образуют пирамиду, в основании которой находится внешняя память, а на вершине – регистровая память. Уровень, лежащий в основании – самый медленный, но зато обладает огромным объемом. По мере продвижения к вершине пирамиды характерный объем уменьшается, а скорость обмена увеличивается, достигая максимального значения у регистрового уровня.

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

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

Постоянная память (ПЗУ – постоянное запоминающее устройство, или ROM, Read Only Memory – память только для чтения) используется для энергонезависимого хранения важной системной информации. В постоянной памяти всегда находится часть операционной системы, называемая BIOS (Base Input/Output System – базовая система ввода/вывода).

Постоянная память допускает только считывание. Типовое значение объема ПЗУ до 256 Кбайт при невысокой скорости обмена и времени доступа более 100 нс. Для повышения производительности содержимое постоянной памяти копируется в оперативную, и в работе используется только копия BIOS, которую часто называют теневой памятью. В последние годы постоянная память вытесняется другими видами энергонезависимой памяти, такими как флэш-память.

Основными разновидностями постоянной памяти являются:

PROM (Programmable ROM – однократно программируемые ПЗУ). Эта разновидность памяти отличается тем, что для записи программ в микросхемы памяти используется специальное устройство. Как правило программирование осуществляется на стадии изготовления на заводе, также встречается вариант программирования пользователем, основанный на пережигании перемычек.

EPROM (Erasable Programmable ROM – перепрограммируемые ПЗУ). Микросхемы отличаются тем, что можно неоднократно стирать их содержимое и записывать новое. Обычно это осуществляется путем облучения специальной области микросхемы ультрафиолетовым излучением.

EEPROM (Electrically Erasable Programmable ROM – электрически стираемые программируемые ПЗУ). Стирание осуществляется прямо в компьютере с помощью высокого напряжения (порядка 30 В).

FEPROM (Flash EPROM), флэш-память. Объединяет достоинства ROM и RAM, т. е. допускает не только чтение, но и запись в обычном режиме работы компьютера, так же как и микросхемы DRAM, но при выключении электропитания содержимое памяти не уничтожается. В отличие от DRAM потребляет энергию не в течение всего времени работы, а только в периоды чтения/записи.

Полупостоянная память обеспечивает хранение относительно небольшого объема важных параметров конфигурации компьютера (характеристики процессора, системного диска и т. д.) и операционной системы даже при отключенном электропитании. Для поддержания внутреннего состояния такой памяти при отключенном электропитании используется батарейка или аккумулятор. Реализуется полупостоянная память с помощью CMOS-вентилей (Complimentary Metal Oxide Semiconductor – комплементарный металл-оксид-полупроводник, соответствует КМОП). К полупостоянной памяти относится также CMOS RTC (CMOS Real Time Clock – память часов реального времени) и ESCD (Extended Static Configuration Data – расширенные статические данные конфигурации). Память CMOS RTC используется для хранения системных часов и календаря, а память ESCD – для хранения параметров устройств с автоматическим конфигурированием, которые обычно называют PnP-устройствами (Plug and Play).

Под конфигурированием устройства понимается осуществляемый во время его подключения к компьютеру подбор параметров и режимов работы, номера прерываний и т. д., которые обеспечивают нормальное взаимодействие с остальными устройствами компьютера и с операционной системой. Такое конфигурирование, как правило, осуществляется один раз, а затем, выбранные параметры должны сохраняться даже при отключенном электропитании. Объем полупостоянной памяти составляет несколько сотен байт, а время доступа к ней превышает 100 нс.

### 10.5. Кэш-память

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

В 1960-е гг. в составе компьютеров появилась так называемая сверхоперативная память, существенно повысившая общую производительность вычислительных систем. В персональных компьютерах аналогичную функциональную роль стал играть появившийся в 1985 г. высокоскоростной буферный уровень памяти, который назвали кэш-памятью (от cache – запас, тайник, наличные в кармане). Объем кэша значительном меньше, чем объем оперативной памяти, а скорость больше, чем у микросхем динамической памяти, и примерно такая же, как у процессора. В общем случае кэш помещается между оперативной памяти и процессором, рис. 10.4.

Рис. 10.4

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

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

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

Очевидно, что при попадании в кэш происходит существенное ускорение работы системы. Количественно оценить общее ускорение от использования кэша можно следующим образом. Пусть время доступа к микросхемам оперативной памяти равно tо, время доступа к микросхемам кэша – tк, h – доля попаданий в кэш от общего количества обращений к памяти. Тогда доля промахов в общем количестве обращений составляет 1 – h, а среднее время доступа при наличии кэша t = tо(1-h) + tкh. Например, для tо = 10 нс, tк = 1 нс и h = 0,75 получим t = 3,25 нс – более чем в три раза лучше, чем при отсутствии кэша.

Может показаться, что промахи кэша замедляют работу, так как процессор, безрезультатно «заглянув в кэш» делает лишнюю операцию. Однако эту проблему можно обойти, организовав параллельное обращение в оперативную память и в кэш. Если данные в кэше обнаружатся, то выборка из памяти прекращается досрочно. Если же данные в кэше отсутствуют, то выборка из памяти завершается стандартным образом. В любом случае дополнительные временные затраты очень малы.

#### 10.5.1. Механизмы работы кэша

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

10.5.1.1. Кэш прямого отображения

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

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

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

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

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

В качестве примера для обсуждения будем считать, что кэш объемом 4 Кбайт состоит из 128 тридцатидвухбайтовых строк, а физический адрес состоит из 20 битов. Тогда для определения номера байта в строке нужно 5 битов (25 = 32), а для задание строки на странице – 7 битов. Из 20 битов адреса на номер страницы остается 8 битов, с помощью которых можно перенумеровать 256 страниц. Таким образом, рассматриваемый кэш может использоваться для кэширования оперативной памяти объемом 1 Мб.

Рис. 10.5

Распределим разряды физического адреса следующим образом. В пяти младших битах (4 – 0) будем кодировать номер байта в строке, следующие 7 битов (11 – 5) займем номером строки, а последние 8 битов (19 – 12) пусть содержат номер страницы. Допустим, что процессору потребовался байт оперативной памяти с физическим адресом 18А72 = 0001 1000 1010 0111 00102. После выделения контроллером кэша в этом адресе соответствующих участков 00011000|1010011|100102 окажется, что нужный байт расположен на странице оперативной памяти с номером 1816 в строке с номером 5316, а его номер внутри строки 1216. Во время передачи байта из оперативной памяти в процессор вся содержащая его 32-байтная строка попадает и в кэш, контроллер которого запишет ее копию в строку с номером 5316. Номер страницы оперативной памяти (1816), из которой была выбрана строка, заносится в поле тега соответствующего строке элемента памяти тегов.

Если теперь процессору потребуется какой-либо байт из оперативной памяти, то кроме обращения в память процессор направляет запрос и контроллеру кэша. Далее по описанной схеме контроллер находит номер строки кэша, в которой может находится нужный байт. Если тег строки кэша совпадает с номером страницы физического адреса, то обращение в оперативную память прекращается, а нужный байт передается в процессор из кэша – говорят, что имеет место попадание в кэш. Такая ситуация наблюдается, если, например, процессор запросит данные из физического адреса 18А7416. А вот для адреса 20А7216, который обращается к байту в строке с тем же номером 5316, но на другой странице, тег 1816 не совпадает с номером 2016. В этом случае имеет место промах кэша. Тогда процессор осуществляет выборку из оперативной памяти. Кроме того, произойдет замена всей строки кэша с номером 5316, а также соответствующего строке элемента памяти тегов. В таких случаях говорят, что произошло вытеснение (выталкивание) строки из кэша.

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

10.5.1.2. Многовходовой ассоциативный кэш

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

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

Рис. 10.6

На рисунке 10.6 изображен двухвходовый ассоциативный кэш. По сути он представляет собой два экземпляра кэша прямого отображения, которые принято называть банками кэша. Каждый из банков ассоциативного кэша может содержать копию строки с одним и тем же номером, но из разных страниц памяти. Кроме того, допускается независимый и одновременный просмотр тегов из разных банков. В изображенной на рисунке ситуации в кэше находятся копии двух строк с номером 5316: одна из 1816, вторая из 2016-й страницы.

10.5.1.3. Ассоциативная память

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

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

Реализуется ассоциативная память значительно сложнее, чем адресная память, поскольку необходимо организовать аппаратный просмотр некоторого количества полей, занятых ключами. Такой просмотр может быть организован как последовательный, когда коды по очереди сравниваются друг с другом, или как параллельный, когда выполняется поразрядное сравнение сразу для всех ключей. Понятно, что второй способ выполнения поиска гораздо быстрее первого, но микросхемы памяти получаются более дорогими. Ассоциативная память используется в основном для решения задач, требующих быстрого поиск в относительно небольших объемах данных.

10.5.1.4. Управление ассоциативным кэшем

Для выявления наличия нужных данных в ассоциативном кэше уже недостаточно анализа физического адреса и сравнения тега с номером строки. В нем следует просмотреть n элементов памяти тегов в n различных банках кэша, причем лучше организовать их параллельный просмотр. Если тег в одном из банков совпадает с номером страницы из физического адреса, то поиск завершается попаданием в кэш. Если нет совпадения ни в одном из банков, фиксируется промах кэша. Сложности возникают также при определении замещаемой строки в случае, когда нужная строка занята во всех банках. Пусть, например, в изображенной на рис. 10.6 ситуации процессором вызывается строка 5316 из страницы 2116. Оба банка заняты, поэтому нужно решить, какую из копий строк (из 1816 или 2016 страницы) следует заменить копией строки из 2116-й страницы. Во многовходовом ассоциативном кэше кандидатов на вытеснение несколько, и желательно выбрать вытесняемую копию так, чтобы минимизировать количество промахов кэша. Для такого выбора применяется несколько правил, которые обычно называют алгоритмами замещения.

Чаще всего используется алгоритм LRU (Least Recently Used, наиболее давно использованный), в соответствии с ним из кэша вытесняется строка, к которой дольше всего не было обращений. Для его реализации может быть, например, составлен связный список копий «одномерных» строк из разных банков. При каждом обращении в кэш этот список модифицируется так, что в его начало попадает наиболее часто (а в конец – наименее часто) используемый элемент. При возникновении необходимости из кэша вытесняется последний элемент списка. Существуют и другие варианты реализации этого алгоритма.

Другой алгоритм – Most Recently Used (MRU), в нем вытесняется последняя использованная запись. Показывает хорошую производительность для случаев, когда высока вероятность доступа к более давним записям.

Least Frequently Used (LFU) – вытесняется запись, используемая реже всех.

Adaptive Replacement Cache (ARC) – комбинация LRU и LFU.

Random Replacement (RR) – случайное вытеснение – вытесняется случайная запись.

10.5.2. Многоуровневый кэш

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

Самый быстродействующий, но при этом самый маленький по объему уровень кэша встраивается в микросхему процессора. Он обозначается L1 и называется внутренним, или первичным кэшем. В настоящее время кэш обычно реализуется в виде двух независимых банков объемом 8 – 32 Кбайт каждый. Один банк внутреннего кэша используется только для хранения данных, а второй – для команд. Такую структуру называют разделенной, или гарвардской, архитектурой кэша. Раздельная структура кэша имеет ряд преимуществ. Во-первых, банки кэша допускают одновременное и независимое выполнение операций считывания/записи через отдельные каналы доступа к ОП. Это примерно вдвое увеличивает пропускную способность кэша. Во-вторых, разделенный кэш допускает упрощенную организацию банка с кодами команд, поскольку во время выполнения программы они обычно не меняются, в то время как находящиеся в кэше коды данных могут изменяться.

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

Следующий уровень кэша обозначается L2 и называется внешним, или вторичным. Он реализуется в виде отдельной микросхемы статической памяти объемом 256 – 512 Кбайт. Если в системе используется всего два уровня кэша, то внешний кэш может иметь объем 2 – 4 Мбайт. Обычно второй уровень кэша содержит одновременно как коды команд, так и коды данных. Такую структуру называют объединенной, или принстонской, архитектурой кэша.

Довольно часто компьютеры имеют еще один внешний кэш – кэш третьего уровня L3. Его объем доходит до 16 – 32 Мбайт, а быстродействие ниже, чем у кэша первого и второго уровней, но все-таки существенно выше, чем у микросхем динамической ОП. Обычно содержимое кэша первого уровня целиком находится в кэше второго уровня. А при наличии кэша третьего уровня содержимое двух верхних уровней целиком помещается в третий.

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

Существует простая и эффективная архитектура многоуровневого кэша. Она носит название кэш жертв (victim cache) и состоит из двух кэшей: большого кэша низкой ассоциативности и маленького кэша высокой ассоциативности. Такая организация позволяет достичь числа промахов, соответствующего кэшу более высокой ассоциативности при меньших издержках. Свое название она получила из-за алгоритма работы: данные сначала попадают в большой кэш, при удалении оттуда, помещаются в маленький кэш. Поиск осуществляется одновременно в обоих кэшах. При попадании в маленький кэш, данные переносятся в большой снова. В любой момент времени данные могут находится только в одном из кэшей. Эффективность: для 4Кб кэша прямого отображения кэш жертв на 4 записи устраняет от 20 – до 95% всех конфликтов.

10.5.3. Когерентность кэша

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

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

Когда исходный код находится в оперативной памяти, а его копия помещена в кэш, возможны два варианта нарушения когерентности. Во-первых, ко многовходовой ОП может обращаться не только процессор. Например, независимо могут выполнять операции записи в память устройства Bus Mastering (жесткие диски по каналам контроллера DMA). В процессе такой записи изменяется только значение кода в ОП, а его копия в кэше остается неизменной. Во-вторых, процессор может изменить значение в кэше, а код в оперативной памяти при этом оставить без изменения. Для регистрации описанных вариантов несоответствия в элементах памяти тегов предусмотрены флаг достоверности V и флаг модификации M. Флаг V принимает значение 1 при записи копии строки в кэш и сбрасывается в 0, если изменился соответствующий код в ОП. Флаг М, наоборот, принимает значение 0 при записи копии строки в кэш, а устанавливается в 1 при изменении значения в кэше.

В связи с введенным уточнением структуры элемента памяти тегов отметим, что для выборки кода из кэша (чтения кода) оказывается недостаточно только совпадения тега и выделенного из физического адреса номера страницы. Дополнительно требуется, чтобы флаг достоверности V был равен 1, сигнализируя о том, что находящийся в кэше код действителен, т.е. совпадает с оригиналом в ОП. Если это не так, процессору следует выбирать код из ОП.

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

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

Еще более сложной является проблема когерентности в многоуровневом кэше, в котором необходимо заботиться сразу о нескольких разноуровневых копиях одного и того же кода, а также в многопроцессорных системах, когда каждый из входящих в систему ЦП имеет собственный кэш и потому может создать собственную копию одной и той же строки из ОП. Любой из ЦП может изменить значение кода в собственном кэше, но копии кода в чужих кэшах ему недоступны. Так возникает ещё одна причина появления некогерентных данных.

10.5.4. Микросхемы кэша

Более дешевые микросхемы динамической памяти (DRAM) не могут обеспечить необходимых кэшу скоростных характеристик. Поэтому внешний кэш всегда реализуется на более дорогих микросхемах статической памяти (SRAM), основными разновидностями которой являются асинхронная (Asynchronous SRAM), синхронная пакетная (Synchronous Burst SRAM) и синхронная конвейерно-пакетная (Pipeline Burst SRAM) статическая память.

В синхронных видах микросхем пакетной и конвейерно-пакетной памяти передача данных организована так же, как у динамических микросхем BEDO DRAM и SDRAM, - пакетами, что наряду с синхронизацией обеспечивает повышение их эффективности по сравнению с асинхронными микросхемами. В конвейерно-пакетных микросхемах, как и в микросхемах EDO DRAM, введены дополнительные внутренние буферные регистры данных, обеспечивающие конвейерное совмещение во времени действий считывания данных шиной и формирования адреса следующей ячейки. Кроме того, у них, как в микросхемах DDR DRAM, данные передаются на удвоенной скорости. Это обеспечивает время доступа у конвейерно-пакетных микросхем 2-3 нс на частотах более 400 МГц.

10.5.5. Оптимизации кэшей

Время доступа к значениям в памяти при использовании кэша вычисляется по следующей формуле:

Среднее время доступа = доля попаданий * время доступа к кэшу + доля промахов * стоимость промаха;

Исходя из формулы все оптимизации кэшей можно разделить на три категории:

1. Оптимизации, сокращающие долю промахов: увеличение размера строки кэша, увеличение объема кэша, повышение ассоциативности.

2. Оптимизации, сокращающие стоимость промаха: многоуровневые кэши, кэши отдающие чтению более высокий приоритет, чем записи.

3. Оптимизации, сокращающие время при попадании в кэш: механизмы, не использующие трансляцию адреса.

Прежде чем рассматривать пути сокращения доли промахов необходимо определить типы промахов. Выделяют следующие три типа:

1. Вынужденные (compulsory, cold start misses, compulsory line fills). Такие промахи возникают при первом обращении к блоку. В связи с тем, что эти блоки еще не были загружены в кэш, все варианты кэш-систем будут испытывать подобные промахи.

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

3. Промахи из-за конфликтов (collision misses). Они возникают из-за конфликтов прямой функции отображения или многовходовой ассоциативной функции.

Пути сокращения доли промахов:

1. Увеличение размера строки. Важнейший фактор, оказывающий влияния на вынужденные промахи – это размер строки. Увеличение размера строки создает эффект предвыборки по дополнительным адресам, что может оказаться полезным из-за пространственной локализации обращения к памяти программы. Однако после увеличение размера строки больше определенного предела количество промахов начинает расти. Рост отчасти обусловлен тем, что выгружаются из кэша также большие строки, т. е. выгружаются данные, которые в случае меньшего размера строки остались бы в кэше.

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

3. Повышение степени ассоциативности. Повышение степени ассоциативности позволяет сократить количество промахов из-за конфликтов. Однако увеличивает цену и энергопотребление, также может повышаться время доступа. Наблюдения: 8-входовой ассоциативный кэш для практических применений сравним по эффективности с полностью ассоциативным; «2 к 1»: кэш прямого отображения размера N близок по доле промахов с двухвходовым ассоциативным кэшем размера N/2.

4. Аппаратная предвыборка. Потоковый буфер (Stream Buffer) – это аппаратная очередь между L1 и L2. Например, процессор Alpha 21164 загружает сразу два блока инструкций при промахе, дополнительный блок сохраняется в потоковом буфере. При промахе проверяется потоковый буфер. Один буфер позволил избежать 25% промахов из 4 Кб кэша; 4 буфера – 43%. Для 2 64 Кб 4-ассоциативных кэшей 8 буферов устранили от 50 до 70% промахов.

Пути сокращения стоимости промаха:

1. Многоуровневые кэши. В этом случае кэш первого уровня работает со скоростью процессора. Кэш второго уровня имеет большую вместимость, для сокращения стоимости промаха. Проектирование направлено на балансировку быстроты попаданий и доли промахов.

2. Приоритет чтению перед записью. Возможна ситуация, когда кэш удалил запись, но запись ещё находится в буфере записи, а не в памяти. Если в это время будет осуществлен доступ, то может быть считано неверное значение. Решением будет проверка содержимого буфера записи и считывание из него, т. е. приоритет чтению.

Пути сокращения времени при попадании:

Отказ от использования трансляции адреса в ходе определения индекса в кэше. При кэшировании можно избежать трансляции виртуального адреса в физический, если для индексирования использовать смещение на странице (page offset). Недостатки: проблемы с синонимами; размер смещения ограничивает размер кэша.

Кроме аппаратных применяются также и программные методы, позволяющие повысить эффективность кэширования:

1. Использование специальных инструкций предвыборки. Эти инструкции не должны вызывать конфликтов, т. к. это форма спекулятивного выполнения. Особенно эффективно использование совместно с циклами после разворачивания.

2. Объединение массивов для увеличения пространственной локальности.

3. Изменение порядка вложенных циклов.

4. Объединение разных циклов.

5. Разбиение циклов на блоки (введение внутреннего цикла), с целью увеличения локальности.