lecture03

advertisement
Архитектура
современных ЭВМ
Эффективное
использование иерархии
памяти. Виртуальная
память.
Маркова Валентина Петровна markova@ssd.sscc.ru
Городничев Максим Александрович maxim@ssd.sscc.ru
Кафедра Параллельных вычислительных технологий ФПМИ НГТУ
2016
Эффективное
использование иерархии
памяти
• Объем обрабатываемых данных
• Обход данных
Схема иерархической памяти
Программа:
Оперативная память
(медленная)
int prog()
Кэш-память
{ ...
Активно
(быстрая)
используемые
...
данные
...
...
for (i…)
for (j…)
{a[i][j]…
Все данные
программы
b[j]…
}
L1: 64Кб
...
L2: 2Мб
...
2 Гб
}
Регистры
(сверхбыстрая
память)
32 целочисл.
32 веществ.
Последовательный обход данных
(Си)
2D массив:
float X[N][M];
Размещение массива в памяти:
N
M
Строка 0
Строка 1
…
Строка N-1
for (i=0;i<N;i++)
// цикл по строкам
for (j=0;j<M;j++)
// цикл по столбцам
X[i][j]=expr(i,j);
Последовательный обход данных
(Фортран)
2D массив:
real X(N,M)
Размещение массива в памяти:
N
M
Столбец 1
10
Столбец 2
…
Столбец M
do 10 j=1,M
цикл по столбцам
do 10 i=1,N
цикл по строкам
X(i,j)=expr(i,j)
Пример обхода данных
Умножение матриц: C[Nx][Nz]=A[Nx][Ny]*B[Ny][Nz]
Медленно:
Cik
Cik 
Aij
×
=
Быстрее:
Cik
Bjk
Aij
=
Bjk
×
Ny 1
A B
j 0
ij
jk
for(i=0;i<Nx-1;i++)
for(k=0;k<Nz-1;k++)
for(j=0;j<Ny-1;j++)
C[i][k]+=A[i][j]*B[j][k];
for(i=0;i<Nx-1;i++)
for(j=0;j<Ny-1;j++)
for(k=0;k<Nz-1;k++)
C[i][k]+=A[i][j]*B[j][k];
Результаты теста:
перемножение матриц
Размеры матриц
800*800
120
время, с
100
80
60
40
20
0
Схема программы:
ijk
ikj
jki
for (…)
Порядок вложенности циклов
for (…)
for (…)
C[i][k]+=A[i][j]*B[j][k];
Эффект «буксования» кэша
Оперативная память
32Кб
32Кб
32Кб
511
0 64 байта
1
2
…
510
511
0
1
2
…
510
511
0
1
2
…
510
511
0
Кэш данных 1уровня процессора Alpha 21264
64Кб
0
1
2
…
510
511
64 байта
Параметры:
• Объем: 64 Кб
• 2-канальный множественноассоциативный
32Кб
64 Кб
" Плохой шаг" 
2
 32 Кб
и все кратные
32 Кб = 8192 float (real*4) = 4096 double (real*8)
Пример «буксования» кэша: 2D
массив
X[Ny][Nx];
X[Ny][Nx+d];
Выполняем обход по столбцам в программе
на языке Си
Медленно:
32Кб
Строка: Nx = 32Кб
Nx
Быстрее:
32Кб
32Кб
Строка: Nx+d = 32Кб + d
32Кб
32Кб
32Кб
32Кб
Nx+d
d ≥ размер строки кэш-памяти (для Alpha 21264 – 64 байта)
Результаты теста: решение уравнения
Пуассона в 3D области методом Якоби
Размер массива: N × N × N
7
6
время, с
5
4
3
2
1
139
138
137
136
135
134
133
132
131
130
129
128
127
126
125
124
123
122
121
0
Величина размерностей массива (N)
Размер 2D слоя для N=128: 128*128 = 16384 элементов = 64 Кб
Рекомендации
• Объем активно используемых
данных не должен превосходить
размер кэша.
• По возможности используйте
последовательный обход данных.
• Избегайте одновременного использования данных, расположенных в
памяти на расстоянии 32Кб (и
кратном 32Кб).
Примеры использования
различных ключей оптимизации
Решение уравнения Пуассона в
трехмерной области методом
Зейделя
Вычисление числа Пи
20
400
18
16
300
14
250
12
время, с
время, с
350
200
150
10
8
6
100
4
50
2
0
"-O0" "-O1" "-O2" "-O3" "-O4" "-fast"
Опции компилятора
0
"-O0"
"-O1"
"-O2"
"-O3"
"-O4" "-fast"
Опции компилятора
Организация
виртуальной
памяти
Виртуальная
память – это
механизм управления иерархической
памятью
компьютера,
который позволяет размещать в
памяти и одновременно выполнять несколько процессов.
Управление памятью
объединяет три задачи
• Динамическое распределение памяти.
• Отображение виртуальных
адресов программы на физические адреса.
• Реализация защиты памяти.
Принцип виртуальной памяти
Принцип виртуальной памяти предполагает, что пользователь имеет дело с
кажущейся одноуровневой памятью,
объем которой равен всему АП независимо от объема ОЗУ и объема памяти,
необходимой для других программ,
участвующих в мультипрограммной
обработке. В действительности все
данные, используемые программой,
хранятся на одном или нескольких
разнородных ЗУ, обычно на дисках, и
при необходимости частями отображаются в реальную память.
Физически виртуальная память
представляет собой совокупность всех
ячеек памяти (оперативной и внешней).
Она имеет сквозную нумерацию от
нуля до предельного значения адреса.
Совокупность виртуальных адресов
процесса называется виртуальным
адресным пространством.
Таким
образом, ВП компенсирует недостаток
оперативной памяти наличием свободного дискового пространства, которое
используется в роли ОП.
Графическое
представление ВП
ВИРТУАЛЬНАЯ ПАМЯТЬ ПРОЦЕССА
Редко
используемые
страницы
на диске
Активные
страницы
в ОЗУ
При обращении
страницы
перемещаются в ОЗУ
и наоборот
Как обрабатывается программа в
компьютере с виртуальной
памятью?
• ОC переводит программу на машинный язык
и присваивает переменным и командам
виртуальные адреса.
• Каждый процесс имеет собственное
виртуальное АП. Если виртуальный адрес
команды (данного) принадлежит той части
программы, которая размещена в ОП или
кэш-памяти, то он преобразуется в физический адрес.
• Если соответствующая часть программы
находится на диске, то она сначала загружается в ОП, а затем уже производится
выборка.
Графическое
представление ВП
Виртуальное
адресное
пространство
0
ОЗУ
0
K
Программа
Виртуальные адреса
Физические
адреса
Преобразование
адресов
Жесткий диск
Система
подкачки
N
Программа
Способы управления
виртуальной памятью
• страничный
• сегментный
• странично-сегментный
Страничный способ
управления памятью
Виртуальная память
Активные страницы в ОЗУ
Оперативная
память
Подкачка
страниц
Внешняя
память
Редко используемые
страницы на диске
Что такое страница?
Страница --
часть физической
памяти заданного размера. Она не
имеет прямой связи с логической
структурой данных и программ.
Разбиение памяти
на страницы
выполняется на системном уровне
для
управления
физической
памятью. В любой момент только
часть ВП присутствует в ОЗУ, т.е., та
часть, которая необходима активным задачам.
Виртуальная страница
• Номер страницы п люс смещение
(адрес относительно начала страницы).
• ОС формирует ТС (таблица страниц,
по которой устанавливается соответствие между физической и виртуальной страницей).
• Преобразование виртуального адреса
в физический адрес выполняет УУ
памятью.
Схема преобразования
виртуальных адресов
Схема преобразования
виртуальных адресов
• В ТС по индексу, соответствующему
номеру виртуальной страницы,
извлекается номер физической
страницы.
• Если физическая страница
находится в ОП, то физический
адрес вычисляется, как номер
физической страницы плюс
смещение.
Схема преобразования
виртуальных адресов
• Если номер страницы расположен
в ВЗУ, то нужную страницу нужно
подгрузить в свободную страницу
или по одному из алгоритмов
замещения выбрать страницу, в
которую
записывается нужная
страница. Предварительно информация из замещаемой страницы
выгружается на диск.
Формат адреса в
Itanium®2
• 64-адресное ВП с 16-ю страницами
24
10
• Объем страницы – 260 (
) bytes
• Адрес – номер страницы (virtual page number)
+ смещение (page offset)
0x40000000000003f8 – номер адреса,
4 – номер виртуальной страницы, 0x3f8
– смещение
0x40000000000003f8  4 0x3f8
Страничный способ
управления памятью
Два варианта реализации
таблицы страниц
• Многоуровневая таблица преобразования адресов
• Буфер быстрого преобразования
адресов (буфер ассоциатив-
ной трансляции (TLB))
Таблица преобразования
адресов в Itanium2
Буфер ассоциативной
трансляции (TLB)
• TLB введен для хранения интенсивно используемых строк
таблиц (буферы TLB для данных и команд обычно раздельные).
• Буфер TLB представляет собой
полностью ассоциативную кэшпамять или множественно-ассоциативную кэш-память с высокой степенью ассоциативности.
Буфер ассоциативной
трансляции (TLB)
• В памяти тэгов хранятся номера
виртуальных страниц, в памяти
данных – номера физических
страниц.
• Каждая строка таблицы содержит несколько признаков (достоверности, модификации, права доступа и т.д.)
Translation Lookaside Buffer
(TLB)
Виртуальный адрес
63
Номер виртуальной страницы
вирт. страница
TLB
Биты
0
Смещение
физ. страница
Номер физической страницы
63
Физический адрес
Смещение
0
Механизм преобразования
виртуального адреса в
физический в Itanium
Сегментный способ
управления памятью
Сегментно-страничный
способ управления памятью
Download