Кэш-независимые алгоритмы: анализ алгоритма...

31
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц Чёрная команда Санкт-Петербургский политехнический университет Петра Великого Антон Абрамов <[email protected]> Владислав Бусаров <[email protected]> Сергей Дедков <[email protected]> Семён Мартынов <[email protected]> Николай Патраков <[email protected]> 8 марта 2016 г. Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 1 / 31

Upload: semen-martynov

Post on 14-Jan-2017

149 views

Category:

Software


4 download

TRANSCRIPT

Page 1: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Кэш-независимые алгоритмы:анализ алгоритма перемножения квадратных матриц

Чёрная команда

Санкт-Петербургский политехнический университет Петра Великого

Антон Абрамов <[email protected]>Владислав Бусаров <[email protected]>

Сергей Дедков <[email protected]>Семён Мартынов <[email protected]>

Николай Патраков <[email protected]>

8 марта 2016 г.

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 1 / 31

Page 2: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Содержание1 Введение

2 Идеальный кэш

3 Алгоритмы

Последовательный алгоритм

Базовый параллельный алгоритм умножения матриц

Алгоритм, основанный на ленточном разделении данных

Блочный алгоритм умножения матриц

Кэш-эффективный блочный алгоритм

4 Заключение

5 Источники

6 Вопросы

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 2 / 31

Page 3: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Введение

Кэш-зависимымые алгоритмы (англ. cache-conscious)При разработке учитываются конкретные характеристики кэша нацелевой машине, такие как ассоциативность или размер кэш-блока.

Кэш-независимые алгоритмы (англ. cache-oblivious)При разработке не делается предположений о реальной структуре кэша(а реальная производительность не должна заметно деградировать), ноиспользуется модель "идеального кэша".

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 3 / 31

Page 4: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Введение: разделяй-и-властвуй

Исторически лучшую производительность показывали кэш-зависимыеалгоритмы, однако имеется предположение, что кэш-независимыеалгоритмы так же эффективны как и кэш-зависимые алгоритмы прииспользовании определённых методик, таких как подходразделяй-и-властвуй (divide-and-conquer).

Поскольку алгоритм рекурсивно разбивает подзадачи на более мелкиекуски, то в какой-то момент, подзадача станет умещаться в кэш, апоследующее разбиение обеспечивает умещение подзадачи вкэш-строку.Соответственно прекращаются кэш-промахи для болеемелких подзадач.

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 4 / 31

Page 5: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Идеальный кэш

Рис. 1: Модель идеального кэшаЧёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 5 / 31

Page 6: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Идеальный кэш: допущения

Следующие четыре допущения являются ключевыми в моделиидеального кэша:

1 Оптимальный алгоритм замены: алгоритм выбора блока кэша,который заменяется при кэш-промахе, когда кэш заполнен. Мыиспользуем LRU (Least Recently Used)

2 Два уровня памяти: должны удовлетворять свойству включения(данные не могут находиться на уровне i , если они не представленына уровне памяти i + 1), а размер i-го уровня памяти, строгоменьше размера i + 1 уровня.

3 Полная ассоциативность: если строка была подгружена в кэш изосновной памяти, то она может оказать в любой части кэша.

4 Автоматическая замена: Когда необходимо подгрузить данныеиз основной памяти, это происходит автоматически средствамиоперационной системы или аппаратуры, но не алгоритма.

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 6 / 31

Page 7: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Последовательный алгоритм

Алгоритм является итеративным и ориентирован на последовательноевычисление строк матрицы С.

Рис. 2: Последовательный алгоритм умножения двух квадратных матриц

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 7 / 31

Page 8: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Последовательный алгоритм

Рис. 3: При итерации по i используется строка матрицы A и все столбцыматрицы B. Построчное хранение данных многомерных массивов в языке С,приводит к промахам при обращении столбцам!

Поскольку каждый элемент результирующей матрицы есть скалярноепроизведение строки и столбца исходных матриц, то для вычислениявсех элементов матрицы С размером n×n необходимо выполнитьn2 × (2n − 1) скалярных операций и затратить время

T11 = n2 × (2n − 1)× 𝜏(где 𝜏 время выполнения одной скалярной операции)

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 8 / 31

Page 9: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Последовательный алгоритм

Рис. 4: Графики зависимости времени выполнения оптимизированной инеоптимизированной версий последовательного алгоритма

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 9 / 31

Page 10: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Базовый параллельный алгоритм умножения матриц

Рассмотрим параллельный алгоритм умножения матриц, в основукоторого будет положено разбиение матрицы A на непрерывныепоследовательности строк (горизонтальные полосы).

Рис. 5: Организация вычислений при выполнении параллельного алгоритмаумножения матриц, основанного на разделении матриц по строкам

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 10 / 31

Page 11: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Базовый параллельный алгоритм умножения матриц

Выделенные базовые подзадачи характеризуются одинаковойвычислительной трудоемкостью и равным объемом передаваемыхданных. Если размер матриц n оказывается больше, чем числовычислительных элементов (процессоров и/или ядер) p, базовыеподзадачи можно укрупнить.

Для вычисления одного элемента результирующей матрицы необходимовыполнить скалярное умножение строки матрицы А на столбецматрицы В. Выполнение скалярного умножения включает (2n − 1)вычислительных операций. Каждый поток вычисляет элементыгоризонтальной полосы результирующей матрицы, число элементов вполосе составляет n2/p. Тогда общее время:

Tcalc =n2(2n−1)

p × 𝜏

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 11 / 31

Page 12: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Базовый параллельный алгоритм умножения матриц

Выделенные базовые подзадачи характеризуются одинаковойвычислительной трудоемкостью и равным объемом передаваемыхданных. Если размер матриц n оказывается больше, чем числовычислительных элементов (процессоров и/или ядер) p, базовыеподзадачи можно укрупнить.

Для вычисления одного элемента результирующей матрицы необходимовыполнить скалярное умножение строки матрицы А на столбецматрицы В. Выполнение скалярного умножения включает (2n − 1)вычислительных операций. Каждый поток вычисляет элементыгоризонтальной полосы результирующей матрицы, число элементов вполосе составляет n2/p. Тогда общее время:

Tcalc =n2(2n−1)

p × 𝜏

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 12 / 31

Page 13: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Базовый параллельный алгоритм умножения матриц

Для того, чтобы разработать параллельную программу, реализующуюописанный подход, при помощи технологии OpenMP, необходимо внестиминимальные изменения в функцию умножения матриц.

Рис. 6: Базовый параллельный алгоритм умножения матриц

Данная функция производит умножение строк матрицы А на столбцыматрицы B с использованием нескольких параллельных потоков.Каждый поток выполняет вычисления над несколькими соседнимистроками матрицы A.

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 13 / 31

Page 14: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Базовый параллельный алгоритм умножения матриц

Результаты выполнения паралельного алгоритма:

Рис. 7: Результаты вычислительных экспериментов для параллельногоалгоритма умножения матриц при ленточной схеме разделении данных построкам

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 14 / 31

Page 15: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Алгоритм, основанный на ленточном разделении данных

В рассмотренном ранее алгоритме, только матрица A распределяласьмежду параллельно выполняемыми потоками. Попробуемраспаралелить и матрицу B.

Рис. 8: Организация параллельных вычислений при выполнениипараллельного алгоритма умножения матриц, основанного на ленточномразделении данных, и использованием четырех потоков

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 15 / 31

Page 16: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Алгоритм, основанный на ленточном разделении данных

Для разделения матрицы A на горизонтальные полосы нужно разделитьитерации внешнего цикла, а потом необходимо разделить итерациивнутреннего цикла для разделения матрицы В на вертикальные полосы.

Рис. 9: Алгоритм, основанный на ленточном разделении данных

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 16 / 31

Page 17: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Алгоритм, основанный на ленточном разделении данных

Вычислительные эксперименты для оценки эффективностипараллельного алгоритма умножения матриц при ленточном разделенииданных не показал выигрыша относительно базового параллельногоалгоритма.

Рис. 10: Результаты вычислительных экспериментов для параллельногоалгоритма умножения матриц при ленточной схеме разделения данных

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 17 / 31

Page 18: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Блочный алгоритм умножения матриц

При построении параллельных способов выполнения матричногоумножения наряду с рассмотрением матриц в виде наборов строк истолбцов широко используется блочное представление матриц.

В этом подходе не только результирующая матрица, но иматрицы-аргументы матричного умножения разделяются междупотоками параллельной программы на прямоугольные блоки. Такойподход позволяет добиться большей локализации данных и повыситьэффективность использования кэш!

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 18 / 31

Page 19: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Блочный алгоритм умножения матриц

При построении параллельных способов выполнения матричногоумножения наряду с рассмотрением матриц в виде наборов строк истолбцов широко используется блочное представление матриц.

В этом подходе не только результирующая матрица, но иматрицы-аргументы матричного умножения разделяются междупотоками параллельной программы на прямоугольные блоки. Такойподход позволяет добиться большей локализации данных и повыситьэффективность использования кэш!

К числу алгоритмов, реализующих описанный подход, относятсяалгоритм Фокса (Fox) и алгоритм Кэннона (Cannon).

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 19 / 31

Page 20: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Блочный алгоритм умножения матриц

Будем предполагать, что все матрицы являются квадратными размераn × n, количество блоков по горизонтали и вертикали являютсяодинаковым и равным q (т.е. размер всех блоков равен k × k , k = n

q ).

Рис. 11: Представление данных операция матричного умножения матриц А иB в блочном виде

Тогда каждый блок Ci ,j матрицы C определяется в соответствии свыражением:

Ci ,j =q−1∑︀s=0

(Ai ,s × Bs,j)

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 20 / 31

Page 21: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Блочный алгоритм умножения матриц

На каждой итерации i алгоритма i-ый блок полосы матрицы Aумножается на i-ый блок полосы матрицы B , результат умноженияблоков прибавляется к блоку результирующей матрицы.

Рис. 12: Представление данных операция матричного умножения матриц А иB в блочном виде

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 21 / 31

Page 22: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Блочный алгоритм умножения матриц

Каждый поток вычисляет элементы блока результирующей матрицы.Для этого каждый поток должен выполнить GridSize итерацийалгоритма, каждая такая итерация есть умножение матричных блоков,итерации выполняются внешним циклом for по переменной iter.

Рис. 13: Блочный алгоритм умножения матрицЧёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 22 / 31

Page 23: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Блочный алгоритм умножения матриц

Результат очень близок к тому, что было получено ранее

Рис. 14: Результаты вычислительных экспериментов для параллельногоблочного алгоритма умножения матриц

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 23 / 31

Page 24: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Кэш-эффективный блочный алгоритм

Значительная доля времени умножения матриц тратится намногократное чтение элементов матриц A и B из оперативной памяти вкэш!

Для вычисления первого элемента строки результирующей матрицынеобходимо прочитать в кэш все элементы первой строки матрицы А ипервого столбца матрицы В, при этом, поскольку матрица В хранится впамяти построчно, то элементы одного столбца располагаются воперативной памяти с некоторым интервалом. Таким образом, в кэшсчитывается не один столбец матрицы В, а сразу несколько столбцов.

Реализуем разделение на блоки таким образом, чтобы размер блокабыл настолько мал, что три блока, участвующие в умножении наданной итерации, возможно было поместить в кэш.

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 24 / 31

Page 25: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Кэш-эффективный блочный алгоритм

Размер матричного блока равен 250. Это обеспечивает одновременноехранение трёх матричных блоков в в кэш объёмом 2 Мб.

Рис. 15: Результаты вычислительных экспериментов для параллельногоблочного алгоритма умножения матриц

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 25 / 31

Page 26: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Кэш-эффективный блочный алгоритм

Размера матричного блока (параметр k) оказывает существенноевлияние на на эффективность параллельного алгоритма.

Рис. 16: Время выполнения параллельного блочного алгоритма умноженияматриц при разных размерах матричных блоков

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 26 / 31

Page 27: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Кэш-эффективный блочный алгоритм

Рис. 17: Время выполнения параллельного алгоритма умножения матриц,ориентированного на эффективное использование кэш-памяти, при разныхразмерах матричных блоков

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 27 / 31

Page 28: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Заключение

Рис. 18: Результаты вычислительных экспериментов для параллельногоблочного алгоритма умножения матриц, ориентированного на эффективноеиспользование кэш-памяти

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 28 / 31

Page 29: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Заключение

Рис. 19: Сводный график всех рассмотренных алгоритмов

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 29 / 31

Page 30: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Источники

Колтон С.Л., Хозяинов И.А.Кэш-независимые алгоритмыСанкт-Петербургский государственный политехнический университет, Институтинформационных технологий и управления, Кафедра компьютерных систем ипрограммных технологий – реферат по дисциплине Вычислительные системы,СПб, 2013.

Лабутина А.А.Параллельные методы матричного умноженияНижегородский государственный университет им. Н.И.Лобачевского –материалы учебного курса Введение в методы параллельногопрограммирования, Нижний Новгород, 2007.

Matteo Frigo, Charles E. Leiserson, Harald Prokop, Sridhar RamachandranCache-Oblivious AlgorithmsMIT Laboratory for Computer Science, 545 Technology Square, Cambridge, MA02139.

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 30 / 31

Page 31: Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц

Вопросы?

Чёрная команда (СПбПУ) Кэш-независимые алгоритмы 8 марта 2016 г. 31 / 31