Организация памяти

advertisement
Организация памяти
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];
Download