Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмы решения систем линейных уравнений с блочно-ленточными матрицами. Монография
.pdf
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 1 11
Рисунок 4. Кольцевая сеть.
Кольцевая сеть бывает однонаправленной и двунаправленной: однона-
правленное кольцо позволяет пересылать данные только в одну сторону, а
двунаправленное — в обе стороны. И та, и другая кольцевая сеть обладает
симметрией, а количество ребер равно количеству вершин. Двунаправленная кольцевая сеть использовалась, например, в суперкомпьютере ПС-2000.
Многомерная решетка (mesh) — это коммуникационная сеть, вершины
которой расположены в узлах многомерной целочисленной декартовой решетки, а связи соединяют соседние узлы по координатным направлениям.
Рисунок 5. Двумерная решетка.
Вершины, находящиеся на границе решетки, во многих случаях попар-
но связываются между собой.
Частный случай многомерной решетки — тор. Тор — это решетка, у
которой противоположные (симметричные относительно координатных
плоскостей) граничные узлы соединяются между собой.

12 Б. Я. Штейнберг, О. Б. Штейнберг
Рисунок 6. Двумерный тор.
Диаметр графа — это наибольшее расстояние между всеми парами вершин. От диаметра коммуникационной сети зависит время пересылки данных.
Диаметр звезды равен 2. Однонаправленная кольцевая сеть имеет диаметр, равный количеству вершин, а двунаправленная — равный половине от количества всех вершин (процессорных элементов). Диаметр
m-мерной решетки размера N = n1*n2 *…* nm равен сумме размерностей
(n1 + n2 + … + nm), а m-мерного тора — половине суммы (n1 + n2 +…+ nm) / 2.
Если все стороны решетки равны, то диаметр m-мерной решетки равен
m*N
1/m
, а диаметр m-мерного тора — m*N
1/m
/ 2. Нетрудно заметить, что
одномерная решетка оказывается кольцом.
Чтобы большой диаметр кольцевой шины сократить (и этим самым
сократить время пересылок данных), можно соединить процессорные элементы еще одним кольцом (или несколькими кольцами). Если вершины
первого кольца занумерованы в порядке их следования (например, по часовой стрелке), то, ввиду естественных требований регулярности (симметрии), второе кольцо должно соединять вершины, разность номеров между
которыми постоянна (по модулю количества всех вершин N).
Рисунок 7. Двойное кольцевое соединение.

Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 1 13
1
7
1 2 3
12
11
2
3
4
9
8
Рисунок 8. Двойное кольцо, изоморфное решетке.
5
6
4 5 6
7 8 9
10 11 12
Рисунок 9. Решетка, изоморфная двойному кольцу.
Рисунок 10. Двумерный и трехмерный кубы.

14 Б. Я. Штейнберг, О. Б. Штейнберг
Рисунок 11. Четырехмерный куб.
Графы малого диаметра — это однородные графы с фиксированным
диаметром и наибольшим количеством вершин. Такие графы интересны в
качестве использования для топологии коммуникационных сетей, поскольку при большом количестве узлов наибольшее расстояние между узлами в
таких графах невелико. Но такие графы часто оказываются не планарными,
что бывает неудобно при их использовании на микросхемах. На следующем
рисунке изображен граф однородный степени 4 диаметра 3 с 17 вершинами.
Рисунок 12. Граф однородный степени 4 диаметра 3 с 17 вершинами.

Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 1 15
Заметим, что не существует графа однородного степени 4 с 17 вер-
шинами диаметра 2 (известная переборная задача для олимпиад старшеклассников).
Несложно показать, что количество вершин у графа однородного степе-
ни k диаметра d не более 1 + k * ((k – 1) d – 1) / (k – 2).
Граф Петерсена и трехмерный куб оба сильно симметричны (группа
автоморфизмов действует на графе транзитивно) и имеют одинаковую степень однородности, но при этом у графа Петерсена вершин больше, а диаметр меньше.
Рисунок 13. Однородный степени 3 граф Петерсена с 10 вершинами и диаметром 2.
Часто возникает практически важная задача переноса программ с од-
них многопроцессорных вычислительных систем на другие с условием
сохранения высокой производительности. Если вычислительные системы
отличаются не только количеством вычислительных устройств, но и коммуникационной системой, то возникает проблема перепрограммирования
пересылок на новую коммуникационную сеть. Если сеть имеет гамильтонов цикл (цикл, проходящий через каждую вершину в точности один раз),
то такой цикл и можно взять в качестве кольцевой сети. Таким образом,
кольцевые пересылки данных можно переносить на ВС со многими коммуникационными сетями: решетки, кубы, графы малого диаметра. В [35] отмечается перспективность кольцевых пересылок на ВС близкого будущего.

16 Б. Я. Штейнберг, О. Б. Штейнберг
1.2. Модели параллельных вычислений
Архитектура SIMD (single instruction, multiple data) предполагает воз-
можным одновременное выполнение некоторой операции (например, сложение или умножение) для разных пар операндов.
Примерами компьютеров с такой архитектурой и распределенной памятью являются самый первый суперкомпьютер ILLIAC-4, суперкомпьютер с наибольшим (долгое время) количеством процессоров Connection
Machine 2 (64000 процессорных элемента), советский массовый (выпущено
более 240 штук) суперкомпьютер ПС-2000 и др. [36], очень успешный в свое
время векторный суперкомпьютер Cray1. В последнее время вычислительные архитектуры SIMD выпускаются векторные с общей памятью. К ним
относятся графические карты (GPU-ускорители), SIMD-ускорители SSE и
AVX процессоров Intel, векторные ускорители mali для процессоров архитектуры ARM. На SIMD архитектуру эффективно отображается достаточно
представительный класс алгоритмов, имеющих регулярную структуру информационных зависимостей: задачи линейной алгебры с заполненными
матрицами, некоторые конечно-разностные и конечно-элементные методы
решения уравнений математической физики в прямоугольных областях, некоторые алгоритмы БПФ и др. Поскольку все процессоры в каждый момент
выполняют одинаковые операции, архитектура SIMD синхронная.
Архитектура MIMD (multiple instruction, multiple data — много команд —
много данных) предполагает одновременное выполнение на разных вычислительных устройствах разных независимых алгоритмов. К архитектуре
MIMD относятся высокопроизводительные кластеры (с распределенной
памятью) и многоядерные процессоры (с общей памятью). Вычислительные системы с архитектурой MIMD асинхронные.
Многие современные вычислительные системы содержат одновременно элементы архитектуры MIMD и элементы архитектуры SIMD.
Вычислительные архитектуры последних лет зачастую опираются на
идеи прежних архитектур, но то, что раньше было суперкомпьютером, теперь может стать системой на кристалле.
Многоканальная память позволяет ускорять обращение к памяти пропорционально количеству каналов, если используемые данные лежат в разных модулях памяти, к которым подключены каналы памяти. К сожалению,
многоканальная память управляется процессором и ОС, а программистам
не предоставлены инструменты влияния на такое ускорение. Многоканаль-

Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 1 17
ная оперативная память DDR4 [37; 38] имеет диапазон частот от 2133 МГц
до 4400 МГц.
В последнее время появляются вычислительные архитектуры с локаль-
ной памятью (на микросхеме процессора), которая позволяет хранить данные без обращения к оперативной памяти. Такая локальная память имеет
преимущество по сравнению с кэш-памятью для задач, в которых много
операций записи в память. Программирование микросхем с такой локальной адресуемой памятью может оказаться более сложным.
Впервые локальная адресуемая память появилась, наверное, у процес-
соров IBM Cell [23]. Такая память, общая для всех ядер, работающих по
одной команде в режиме SIMD, используется в графических картах NVidia
и ускорителях Intel Xeon Phi.
В 2021 году появилась система на кристалле с более чем 1000 асин-
хронно работающих RISC ядер, каждое из которых имеет свою локальную
память: процессор Esperanto — 1092 ядра [39]. Следует отметить и отечественную многоядерную систему (16 ядер вычислительных и 5 управляющих) [40].
Быстро растет уровень параллелизма у многоядерных процессоров с об-
щей памятью: например, процессор IBM Power 9 [41] способен обрабатывать одновременно 96 потоков. Для мобильных приложений используются
процессоры с низким энергопотреблением семейства ARM [42], использующие векторные ускорители mali. На процессорах архитектуры ARM создан самый мощный (на текущий момент) суперкомпьютер [43].
При разработке эффективного прикладного ПО используются модели
параллельных вычислений.
Обычно распараллеливаются программные циклы. Под параллельным
выполнением цикла понимается одновременное выполнение его итераций.
Будем рассматривать задачу параллельного выполнения цикла (1). Как
обычно, под распараллеливанием цикла понимаем одновременное выполнение его итераций, но это определение предполагает уточнения.
for (j = 1; j < N; j = j+1) {
Statement1(j);
Statement2(j); (1)
Statement3(j);
}

18 Б. Я. Штейнберг, О. Б. Штейнберг
Будем полагать, что цикл (1) удовлетворяет следующим таким ограничениям, которые позволяют его преобразовывать должным образом.
В частности:
1. В теле цикла (1) счетчик цикла j не меняет значения; из цикла есть
только один выход, который выполняется после завершения всех
итераций; переход на следующую итерацию возможен только после
завершения предыдущей (т. е. в теле цикла нет операторов break,
continue и переходов goto за пределы цикла); в теле цикла не ме-
няется правая его граница; в теле цикла не должен меняться его шаг.
2. В цикле только вхождения массивов, индексные выражения которых
имеют вид (j + k), где j — счетчик цикла, k — некоторая константа
или переменная, не меняющая своего значения в теле цикла.
Будем рассматривать две основные модели параллельных вычислений:
SIMD и MIMD.
Модель SIMD выполнения цикла соответствует DO SIM выполнению
из статьи [44]. Параллельное выполнение цикла (1) на SIMD предполагает, что сначала для всех значений счетчика цикла выполняется оператор
Statement1(j), затем для всех значений счетчика цикла выполняется
оператор Statement2(j), затем Statement3(j) и т. д.
Будем считать, что для SIMD распараллеливания в теле цикла (1) имеются только операторы присваивания. В вычислительных системах типа
SIMD при распараллеливании в теле цикла не могут быть условные операторы, логические выражения которых зависят от счетчика цикла, т. к. в этом
случае для одного значения счетчика цикла может возникнуть необходимость выполнять разные операции, что противоречит определению SIMD
модели. Необходимое условие того, что SIMD параллельное выполнение
цикла (1) эквивалентно последовательному выполнению этого цикла — отсутствие дуг графа информационных связей «снизу-вверх» — от операторов с большими номерами к операторам с меньшими номерами [44; 45].
Модель MIMD выполнения цикла соответствует DO CONC выполнению
из той же основополагающей статьи [44]. При MIMD распараллеливании
цикла (1) для каждого значения счетчика цикла тело цикла рассматривается
как самостоятельный процесс или нить (thread). Каждое вычислительное
устройство (процессор или процессорное ядро) выполняет свой процесс
или нить. Отсутствие дуг циклически порожденной зависимости в (1) является необходимым условием эквивалентности распараллеливания на
MIMD архитектуру последовательного цикла.

Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 1 19
Заметим, что всякая дуга графа информационных связей, направленная
«снизу-вверх», соответствует циклически порожденной зависимости. Таким образом, отсутствие циклически порожденных зависимостей необходимо как для SIMD, так и для MIMD параллельных выполнений цикла.
Современные высокопроизводительные вычислительные системы можно
отнести к архитектурам класса GALS (globally asynchronous, locally syn chro-
nous), в которых реализована глобальная асинхронность при передаче между
синхронными вычислительными устройствами [35]. Например, в многоядерном процессоре ядра работают асинхронно, а векторизатор работает синхронно.
В [35] также представлена концепция ВС с программируемой архитек-
турой, в которой множество элементарных машин соединяются распределенной коммуникационной системой, связи которой образуют однородный
граф малого диаметра. Эта концепция, появившаяся несколько десятилетий
назад, пока носит теоретический характер. С помощью ПЛИС реализуются
ВС с архитектурой программируемого конвейера, они дорогие и не ориентированы на решение целевых задач данной работы. В [35] представлены и
другие модели параллельного программирования для ВС близкого будущего экзафлопсной производительности.
1.3. Анализ узких мест
производительности программ
В течение многих десятилетий развития вычислительной техники на-
блюдается опережающий рост производительности процессоров (выполнение операций умножения) по отношению к производительности памяти:
производительность вычислений растет примерно на 30% в год, а рост пропускной способности памяти (скорость чтения/записи данных из оперативной памяти) растет только на 9% [46]. Если ранее основное время работы
компьютера уходило на вычислительные операции, то сейчас — на доступ
к данным. Как следствие, для прогноза времени работы алгоритма стали
рассматривать сложность алгоритма по обращениям к памяти (см., например, [47]).
Последовательность прохождения данных в компьютере с современным
многоядерным процессором, имеющем иерархию памяти, выглядит примерно следующим образом:
RAM => L3-cache => L2-cache => L1-cache => Register => ALU

20 Б. Я. Штейнберг, О. Б. Штейнберг
Распараллеливание (OpenMP) происходит после L3 — у каждого процессорного ядра свой L2-кэш, а векторизация происходит после L1 через
векторные регистры.
Для компьютеров с распределенной памятью добавляется коммуникационная сеть или коммутатор, и это отражается в представленной схеме:
NET => RAM => L3-cache => L2-cache => L1-cache => Register => ALU.
Каждая стрелка означает путь передачи данных: чем стрелка левее, тем
передача дольше.
У разных программ узкое место производительности может быть в разных местах, и зависит это от используемой вычислительной архитектуры.
При этом для разных архитектур используются разные приемы оптимизации. В частности, если в программе наиболее глубоко вложенные циклы
имеют в теле много операций с небольшим объемом данных, то целесообразна оптимизация регистров. Но большинство используемых современных программ имеют много данных, с которыми выполняется относительно немного операций, и для таких программ узким местом является доступ
к памяти.
Одним из наиболее используемых и эффективных преобразований,
уменьшающих количество кэш-промахов, является тайлинг [48].
1.4. Отставание развития оптимизирующих
компиляторов от развития процессоров
Промышленные распараллеливающие компиляторы (GCC, ICC, MSCompiler, LLVM) распараллеливают программы для вычислительных систем только с общей памятью. В [49] приводятся результаты экспериментов,
показывающие, что все эти современные оптимизирующие компиляторы
плохо оптимизируют код, имеют большой неиспользованный потенциал
оптимизирующих преобразований. Можно полагать, что для микросхем с
сотнями вычислительных ядер этот потенциал оптимизаций больше, чем
для процессоров, на которых проводились эксперименты.
Перспективные микросхемы типа «суперкомпьютер на кристалле»
имеют распределенную адресуемую локальную память. В работе [50] отмечается: «Компиляция для параллельной архитектуры с распределенной
памятью считается очень сложной задачей … никакого практического и эффективного решения в настоящее время не существует». В этой же работе
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
