Организация памяти portal.sscc.ru/arch Иерархия памяти Память служит для хранения команд и данных, представленных в двоичном коде. Она представляет собой множество ячеек, каждая из которых хранит двоичное слово – число, закодированное последовательностью двоичных битов. Количество битов в каждом слове одинаково. Все ячейки памяти пронумерованы по порядку от 0 до N. Номер ячейки называется адресом и служит для ее идентификации. Идея иерархической (многоуровневой) организации памяти заключается в использовании на одном компьютере нескольких уровней памяти. Основой для иерархической организации памяти служит принцип локальности ссылок во времени и в пространстве. Принцип локальности ссылок • Локальность во времени состоит в том, что процессор многократно использует одни и те же команды и данные. • Локальность в пространстве состоит в том, что если программе нужен доступ к слову с адресом A, то скорее всего, следующие ссылки будут к адресам, расположенным по близости с адресом A. Из свойства локальности ссылок следует, что в типичном вычислении обращения к памяти концентрируются вокруг небольшой области адресного пространства и более того, выборка идет по последовательным адресам. Время доступа к иерархически организованной памяти уменьшается благодаря следующему • сокращению количества обращений к ОП, • совмещению обработки текущего фрагмента программы и пересылки данных из основной памяти в буферную память. Схема иерархического построения памяти регистровая память 64 – 256 слов, 1такт кэш 1-го уровня 8 Кслов, 1 – 2 такта кэш 2-го уровня 256 Кслов, 3 - 5 тактов кэш 3-го уровня 1 Мслов, 6 – 11 тактов основная память 4 Гслов, 12 – 55 тактов внешняя память kТслов, от 106 тактов Зависимость времени вычисления некоторой функция от логических регистров для микропроцессора Alpha 21264 1 800 1 600 1 400 время 1 200 1 000 800 600 400 200 0 1 2 3 4 5 6 7 8 9 10 число регистров 11 12 13 14 15 Интерливинг Банк 1 Банк 2 Банк 3 0 1 2 34 2n-1 Адресное пространство Организация кэш-памяти Кэш-память это высокоскоростная память небольшeго размера. Она предназначена для временного хранения фрагментов кода и данных. Кэш-память охватывает все адресное пространство ОП, но в отличие от ОП, она не адресуема и невидима для программиста. Схема построения кэш-памяти • Кэш-память построена на принципе локальности ссылок во времени и в пространстве. • Кэш-контроллер загружает копии программного кода и данных из ОП в кэш-память блоками, равными размеру строки за один цикл чтения. Процессор читает из кэш-памяти по словам. • Кэш-контроллер перехватывает запросы процессора к основной памяти и проверяет, есть ли действительная копия информации в кэш-памяти. Структура кэш-памяти Адреса 0 4 8 a 12 16 20 24 28 32 36 40 44 2n–4 ОЗУ КЭШ MV Тег b c Данные d a b c … № Слота 0 1 d 2 3 K–1 Адрес: … Тег Слот Смещ-е Блок: a b Слово c d Организация кэш-памяти Когда контроллер выполняет поиск данных в памяти? • после фиксации промаха (сквозной просмотр). • одновременно с поиском блока в кэш-памяти, в случае кэш-попадания, обращение к оперативной памяти прерывается (отложенный просмотр). Организация кэш-памяти Когда контроллер помещает данные в кэш- память? • Загрузка по требованию (on demand). • Спекулятивная загрузка (speculative load). Алгоритм предполагает помещать данные в кэш-память задолго до того, как к ним произойдет реальное обращение. У кэшконтроллера есть несколько алгоритмов, которые указывают, какие ячейки памяти потребуются процессору в ближайшее время. Основные вопросы организации кэш-памяти • Алгоритм отображения адресов основной памяти в кэш-память. • Алгоритм записи данных и команд из кэш-памяти в основную память. • Алгоритм замещения строки в кэш-памяти. • Размер кэш-памяти. • Длина строки в кэш-памяти. Алгоритмы отображения • Прямой (direct mapping). • Ассоциативный (full associative mapping). • Множественно-ассоциативный (set-associative mapping). Отображение блока ОП на линию кэш-памяти i = j modulo m, i – номер линии кэш-памяти, j – номер блока ОП, m – линий в кэш-памяти кэш-линия блоки ОП 0 0, m, 2m,… 1 1, m+1, 2m+1,… m-1 m-1, 2m-1, 3m-1,… Пример Block – 4 Bytes MM=16 Mbytes (2 24 ) (4M blocks of 4bytes each) Cache = 64 Kbytes ( 214 lines of 4bytes each) Word – 2 bits, line -14 bits, tag – 8 bits 000000, 010000, …, FF0000 0 000004, 010004, …, FF0004 1 Пример «буксования» кэшпамяти (32 K) (cache trashing) double a[4096], b[4096], c[4096]; for(int i=0; i<4096; i++) c[i] = a[i]+b[i];