Архитектура современных ЭВМ Эффективное использование иерархии памяти. Виртуальная память. Маркова Валентина Петровна 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 Сегментный способ управления памятью Сегментно-страничный способ управления памятью