Московский государственный университет путей сообщения
Опубликован: 22.12.2006 | Доступ: свободный | Студентов: 2438 / 569 | Оценка: 4.07 / 4.02 | Длительность: 16:07:00
ISBN: 978-5-9556-0071-0
Специальности: Разработчик аппаратуры
Лекция 12:

SPMD-технология на базе симметричной ВС

< Лекция 11 || Лекция 12: 12345 || Лекция 13 >

Распараллеливание по двумерному опорному массиву

Построим программу умножения матриц C=A x B размерности k, где каждый элемент матрицы-результата C находится:

C_{\mu \nu}=\sum_{\rho=0}^{k-1}a_{\mu\rho}b_{\rho\nu},
где \mu — номер строки матрицы C ; \nu — номер столбца.

Представим множество элементов C одномерным массивом, обусловленным расположением подряд строк этой матрицы:

C = \{c_{00},\ldots,c_{0,k-1},c_{10},\ldots,c_{k-1,k-1}\} = \{c_0^*,\ldots,c_{k^2-1}^*\}.

Пусть каждый процессор П i, i = 0,...,N-1, считает элементы c{i+jN}* этого массива, j = 0,1,....

Для построения подпрограммы нахождения скалярного произведения строки A и столбца B\{ a_{\rho }\} \times\{ b_{\rho }\}, \rho   =0,\dots ,k-1, сформируем дескрипторы с дескрипторными элементами, необходимыми для организации счета только одним процессором:

D1 = {D10, D11, D12, D13, D14} = {a0, 1, k, a0+k-1, a0},

D_{2} = \{ D_{20}, D_{21}, D_{22}, D_{23}, D_{24}\}  = \{ b_{0}, k, \infty , \infty , b_{0}\}.

Указаны начальные значения D{14} и D{24}, а неиспользуемые значения D{22} и D{23} полагаются заведомо большими.

Так как мы условились распределять считаемые элементы массива C между процессорами, то сформируем на каждом процессоре дескриптор подмассива Ci закрепленных за ним элементов:

D_{0} = \{ D_{C0}, D_{C1}, D_{C2}, D_{C3}, D_{C4}\}  = \{ c_{00}+i, N, \infty , c_{00}+k^{2}-1, c_{00}+i\}

(указано начальное значение DC4, значение DC2 не используется).

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

Таблица 12.3.
k КОП I1 A1 I2 A2 I3 A3
0 ЗАГ \alpha D14 D10 D24 D20
1 ЦИКЛ D12
2 x D1 D2
3 + \alpha \alpha
4 КЦ
5 ЗАП \alpha D3
6 В

Использование в командах 2 и 5 адресов дескрипторов, которые, в отличие от адресов модификаторов и дескрипторных элементов, обладают специальным признаком, приводит к автоматической переадресации, производимой при выполнении этих же команд в цикле. Так, при выполнении команды 2, если (D14) не превосходит (D13), а (D24) не превосходит (D23), формируются исполнительные адреса A*1 = A1+(D14), A*2 = A2+(D24), после чего выполняются операции (D14) := (D14)+(D11) ; (D24) := (D24)+(D21). Это обусловило необходимость восстановления значений D14 и D24 по команде 0. Аналогично, при выполнении команды 5 готовится запись при следующем обращении к подпрограмме, (D34) := (D34)+N.

Пусть матрице A соответствует дескриптор массива первых элементов ее строк, то есть дескриптор первого столбца

DA = {DA0, DA1, DA2, DA3, DA4} = {a00, k, k, a00+(k-1)k, a00}

(указано начальное значение D{A4} ). Матрица B представлена дескриптором массива первых элементов ее столбцов, то есть дескриптором первой строки

DB = {DB0,...,DB7} = {b00, 1, k, b00+k-1, b00, b00+i, N, b00+i}

(указаны начальные значения DB4 и DB7 ). Программа умножения матриц (пропущены команды формирования и восстановления дескрипторов) представлена в табл. 12.4.

Таблица 12.4.
k КОП I1 A1 I2 A2 I3 A3
10 ПРАД DB7 017
11 ПРАД DA7 020
12 ЗАГ D10 DA4 D13 DA4 D20 DB7
13 М+ D13 <k-1>
14 БПВ1 000
15 ИЗМАД DB7 017
16 БП 012
17 М- DB7 DB2
18 М+ DA4 DA1
19 БП 010
20 В

По команде 10, выполняющейся первый раз при (DB7) = b00+i, адрес, записанный в DB7, сравнивается с адресом последнего элемента массива, записанным в DB3. Если адрес указывает на принадлежность элемента массиву, выполняется следующая команда. В противном случае управление передается на выполнение команды 17.

По команде 11 производится аналогичная проверка принадлежности элемента используемой строки матрицы A, адрес которого указан в DA4, массиву первых элементов ее строк. Если (DA4) > (DA3), управление передается на выполнение команды 20 — выход из подпрограммы.

По командам 12—13 формируются дескрипторные элементы дескрипторов D1 и D2 для скалярного умножения очередной строки матрицы A на очередной столбец матрицы B — для получения очередного элемента матрицы C.

По команде 14 производится обращение с возвратом в рамках одной задачи (без использования ОС) к процедуре счета скалярного произведения (см. табл. 12.3).

По команде 15 производится изменение адреса начального элемента столбца — переход к следующему столбцу с учетом предполагаемого закрепления элементов матрицы C за процессорами, а именно, производится операция (DB7) := (DB7)+(DB6), где (DB6) = N. Если после изменения адреса новое его значение превышает максимальное, записанное в DB3, осуществляется переход на выполнение команды 17. В~противном случае по команде 16 управление передается на выполнение команды 12 — на подготовку счета и счет очередного элемента C.

Команды 17 и 18 выполняются в случае, если измененный на значение N адрес (DB7) первого элемента столбца B превышает значение (DB3) = b00+k-1. Чтобы получить "координаты" того элемента C, к счету которого необходимо перейти, т.е. чтобы получить адреса первого элемента столбца и первого элемента строки, на пересечении которых он находится, необходимо выполнить следующие действия: последовательно вычитать шаг (DB2), т.е. значение k, из вновь полученного адреса столбца B и прибавлять шаг ( DA1 ), т.е. это же значение k, к ранее использованному адресу первого элемента строки A (первоначально — к значению a00 ) до тех пор, пока значение ( DB7 ) не станет меньше или равно значению ( DB3 ). По данным командам изменяются значения ( DB7 ) и ( DA4 ). Затем по команде 19 управление передается на выполнение команды 10, по которой в случае недостаточности коррекции дескрипторного элемента DB7 управление вновь передается на выполнение команды 17. Если коррекция элемента DB7 произведена успешно, по команде 11 может быть выяснено, что скорректированное значение ( DA4 ) превосходит значение ( DA3 ). Это означает, что следующий элемент матрицы C, к счету которого пытается приступить процессор, принадлежит несуществующей строке, то есть процессор закончил выполнение своей доли работы. По команде 20 производится выход из подпрограммы.

< Лекция 11 || Лекция 12: 12345 || Лекция 13 >