Лабораторная работа №1 Исследование кэш-памяти и обхода памяти Цель Определение размеров кэш-памяти 1. сравнить различные способы обхода данных 2. научиться определять размер кэш-памяти Задание Написать программу, многократно выполняющую чтение элементов массива заданного размера. Элементы массива представляют собой связный список, в котором значение очередного элемента представляет собой номер следующего. Таким образом, способ заполнения элементов массива определяет способ его обхода. Сам обход данных может быть выполнен циклом следующего вида: for (k=0, i=0; i<N; i++) k = x[k]; Определение размеров кэш-памяти Обходы Требуется реализовать три способа обхода массива 1. Прямой 1 2 3 4 5 6 7 0 7 0 1 2 3 4 5 6 2. Обратный 3. Случайный 7 3 4 2 5 0 1 6 Определение размеров кэш-памяти Заполнение массива для случайного обхода Определение размеров кэш-памяти Время чтения элемента, такты Построить графики зависимости среднего времени обращения к элементу массива (в тактах) от размера обрабатываемого массива для трех видов обхода. На графиках должны быть видны размеры всех уровней кэш-памяти. По результатам измерений сделать вывод о скорости различных способов обхода массива, а также о размерах различных уровней кэш-памяти. Сравнить полученные размеры уровней кэш-памяти с реальными значениями. Пример графиков, полученных на процессоре Intel Xeon E5420 (L1: 32 KB, L2: 6 MB): 250 200 150 прямой обратный случайный 100 50 0 1 2 4 8 16 32 64 128 256 512 1 2 4 8 16 32 KB KB KB KB KB KB KB KB KB KB MB MB MB MB MB MB Размер массива Контрольные вопросы 1. Что такое кэш-память? Какую проблему она решает? 2. Какой способ обхода данных в памяти является самым быстрым? Почему? 3. Какой способ обхода данных в памяти является самым медленным? Почему? 4. Приведите пример оптимального и неоптимального алгоритмов умножения двух матриц с точки зрения порядка обхода данных в памяти. Определение степени ассоциативности кэш-памяти множественно-ассоциативная организация кэш-памяти Большинство современных процессоров имеют множественноассоциативную организацию кэш-памяти. При множественноассоциативной организации кэш-память разделена на несколько множеств и на несколько банков ассоциативности. Каждый блок данных из оперативной памяти может быть помещен в одну из некоторого множества строк кэш-памяти. Число строк во множестве определяется числом банков ассоциативности. Например, кэш данных L1 в процессоре Pentium III имеет объем 16 KB, число банков ассоциативности - 4, число множеств - 128, размер строки - 32 Byte. Размер кэш-памяти: 16 KB = 4 × 128 × 32 B. Определение степени ассоциативности кэш-памяти множественно-ассоциативная организация кэш-памяти ОП Кэш 32 B 32 B 128 × 32 В = 4 КВ 32 B … 32 B 32 B 0 0 1 2 3 … 126 127 1 2 3 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B … … … … 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B Номер множества, в которое будет помещен элемент данных из памяти, определяется адресом этого элемента. Какой конкретный элемент множества будет выбран, определяется алгоритмом замещения (циклический, случайный, LRU, псевдо-LRU, …). Число элементов в каждом множестве (равное числу банков кэш-памяти) называется степенью ассоциативности кэш-памяти. Если вычислительная система имеет несколько уровней кэш-памяти, то у каждого уровня может быть своя степень ассоциативности. Определение степени ассоциативности кэш-памяти множественно-ассоциативная организация кэш-памяти 4 КВ 4 КВ 4 КВ 4 КВ ОП Кэш 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B … … … … 32 B 32 B 32 B 32 B 32 B 32 B 32 B 32 B Элементы данных, имеющих одинаковые номера множеств, т.е. отстоящие на определенное расстояние в памяти (4 KB), помещаются в одно и то же множество кэш-строк. На все эти данные приходится всего 4 кэш-строки, т.е. 4 × 32 B = 128 B. Если выполнять обход данных с шагом 4 KB (или кратным 4 KB), то из всех 16 KB кэша L1 будет использоваться всего 128 B, которые будут постоянно перезаписываться (эффект «буксования» кэш-памяти). Производительность подсистемы памяти при этом будет такая же, как при отсутствии кэшпамяти. Определение степени ассоциативности кэш-памяти Цель работы Научиться определять степень ассоциативности кэшпамяти. Определить степени ассоциативности кэш-памяти можно следующим способом. Выполняется обход N фрагментов данных суммарным объемом BlockSize, отстоящих друг от друга на величину Offset: Определение степени ассоциативности кэш-памяти Параметры обхода: BlockSize – суммарный объем данных, к которым происходит обращение. Offset – расстояние между началами соседних блоков. N – число фрагментов (на картинке N = 4). BlockSize должен быть не больше объема исследуемого уровня кэш-памяти. Offset должен быть кратен размеру банка ассоциативности. Как правило, эти размеры являются степенями двоек, так что в качестве Offset можно взять большое заведомо кратное значение (например, 8 MB). Изменяя число частей N, мы увидим, как меняется время обращения к одному элементу. Когда N превысит число банков ассоциативности, время сильно возрастет. Определение степени ассоциативности кэш-памяти Определение степени ассоциативности кэш-памяти Время чтения элмента, такты Написать программу, определяющую степень ассоциативности кэш-памяти. Программа должна многократно выполнять чтение элементов массива в порядке, указанном выше. Элементы массива представляют собой связный список, в котором значение очередного элемента представляет собой номер следующего. Параметры: BlockSize = 1 KB, Offset = 8 MB, N = 1…20. Построить график зависимости среднего времени обращения к элементу массива (в тактах) от N – числа фрагментов. По полученному графику определить степень ассоциативности кэш-памяти. Пример графика, полученного на процессоре Intel Xeon E5420 (L1: 4-way, L2: 8-way): 60 50 40 30 20 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Число фрагментов На графике видно замедление после 4 и после 8 фрагментов, что соответствует степеням ассоциативности кэшей L1 и L2 процессора Intel Xeon E5420. Контрольные вопросы 1. Что такое степень ассоциативности кэшпамяти? 2. Что такое эффект буксования кэш-памяти? Как его вызвать? Как его избежать? 3. Какой график получится в результате исследования кэша данных L1, описанного в теоретической части? Как изменится график, если расстояние между фрагментами взять 1 KB?