Будем считать, что количество процессорных элементов p вычислительной системы является степенью числа 4.
Рассмотрим задачу вычисления произведения квадратных матриц X = A*B размерности n на вычислительной системе с n процессорными элементами. Матрицы A и B рассмотрим, как блочные матрицы 2*2 с квадратными блоками размера (n/2) * (n/2). Всего в каждой матрице получается по 4 блока. Обозначим Aij , i,j = 1,2, блоки матрицы A. Аналогично обозначим блоки матрицы B.
Множество всех процессорных элементов разобьем на 4 равных группы с номерами 0, 1, 2, 3. Разместим элементы обоих матриц поблочно – в каждой группе модулей памяти по одному:
Блок Aij , i,j = 1,2, матрицы A разместим в группе модулей памяти с номером (i-1)*2 + j-1.
Блок Bij , i,j = 1,2, матрицы B разместим в группе модулей памяти с номером (j-1)*2 + i-1.
Модуль памяти 0 A11, B11, C11 | Модуль памяти 1 A12, B21, C12 |
Модуль памяти 2 A21, B12, C21 | Модуль памяти 3 A22, B22, C22 |
Рис. 58 Соответствие 4 групп процессорных элементов блокам матрицы.
B11 | B21 |
B12 | B22 |
A11*B11 | A12*B21 |
A21*B12 | A22*B22 |
Рис. 59. Первое перемножение блоков и первая группа пересылок.
A11*B12 | A12*B22 |
A21*B11 | A22*B21 |
A11*B12 | A12*B21 |
A21*B12 | A22*B21 |
Рис. 60. Второе перемножение блоков и вторая группа пересылок.
Модуль памяти 0 C11 = A11*B11 + A12*B21 | Модуль памяти 1 C12 = A12*B22 + A11*B12 |
Модуль памяти 2 C21 = A21*B11 + A22*B21 | Модуль памяти 3 C22 = A21*B12 + A22*B22 |
Рис. 61 Сложение блоков.
Для вычисления произведения матриц в этом случае требуется два перемножения блоков, два сложения блоков и две пересылки блоков.
Перемножения блоков в каждой группе процессорных элементов можно выполнять по такой же схеме рекурсивно. Всего у этого алгоритма log4p шагов. На каждом шаге размерности блоков в два раза уменьшаются, но количество блоков в 4 раза возрастает.
0.0 | 0.1 | 1.0 | 1.1 |
0.2 | 0.3 | 1.2 | 1.3 |
2.0 | 2.1 | 3.0 | 3.1 |
2.2 | 2.3 | 3.2 | 3.3 |
Рис. 62. Разбиение каждой из 4 групп ПЭ еще на 4 группы второго уровня. При двойной нумерации цифра перед точкой означает номер группы ПЭ первого уровня. Цифра после точки – номер группы ПЭ второго уровня.
Количество параллельных шагов с умножениями (скалярными) в данном алгоритме, как и в других известных параллельных алгоритмах, равно n3/p. При наличии p процессорных элементов и при базовом последовательном алгоритме перемножения матриц со сложностью n3 – эта формула, очевидно, не улучшаема.
Для пересылок данных в этом алгоритме удобно использовать полнодоступный коммутатор или (log2p)-мерный куб. Всего в этом алгоритме получается 2*log4p = log2p блочных пересылок.
На каждом шаге пересылается n2 элементов по p штук одновременно. Всего скалярных пересылочных шагов n2/p . Итого, общее количество скалярных пересылочных шагов n2*log2p/p . Если p = n, то количество одновременных скалярных пересылок равно n*log2n – это существенно меньше, чем при размещениях матриц по строкам или столбцам и меньше, чем пересылок в алгоритмах Кэннона и Фокса [35].
Перемножение прямоугольных матриц тоже может быть выполнено блочно-рекурсивным алгоритмом. Действительно, пусть требуется перемножить матрицу A размера n*m на матрицу B размера m*k. Обозначим q = p1/2 . Разобьем матрицу A на блоки размера (n/q)*(m/q) , а матрицу B на блоки размера (m/q)*(k/q). Тогда задача перемножения прямоугольных матриц будет сведена к задаче перемножения квадратных блочных матриц размера q * q , где q = p1/2 .
Блочно-рекурсивное размещение данных предполагает количество процессорных элементов (вычислительных узлов) равным степени четверки. Это жесткое ограничение. Иногда, если количество ПЭ равно степени четверки, умноженной на некоторое число, можно комбинировать блочно-рекурсивное размещение данных с блочно-аффинным. На следующем рисунке изображено такое размещение для случая 12 ПЭ.
Группа ПЭ 0
| Группа ПЭ 1
| ||||||
Группа ПЭ 2
| Группа ПЭ 3
|
Рис. 63. Вычислительная система состоит из 12 ПЭ, которые разбиваются на 4 группы по 3 ПЭ в каждой.
В данном примере матрицы разбиваются на блоки следующим образом:
A = {Aij} i = 1,2, j = 1,…,6 ; B = {Bij} i = 1,2, j = 1,…,6
Дата: 2018-12-21, просмотров: 500.