Параллельное программирование в стандарте MPI. Баканов В.М - 67 стр.

UptoLike

Составители: 

- 67 -
Описанные в основном разделе операции не распараллеливаются и обычно
являются подготовительными для последующих вычислений. Описание кол-
лективной операции может выглядеть так (раздел
PART
содержит процедуру
Pmatrix
):
PART Pmatrix. ! начало раздела Pmatrix
a,b RESULT c ! a,b – входные параметры, свыходной
! тело процедуры Pmatrix
BEGIN
Oi: (i=1..iMAX).
Oj: (j=1..jMAX).
Ok: (k=1..kMAX).
OA: (Oi; Ok).
OB: (Ok; Oj).
OC: (Oi; Oj).
VARIABLE a DEFINED ON OA DOUBLE.
VARIABLE b DEFINED ON OB DOUBLE.
VARIABLE c DEFINED ON OC DOUBLE.
DOMAIN PARAMETERS iMAX=500.
DOMAIN PARAMETERS jMAX=1000.
DOMAIN PARAMETERS kMAX=1000.
DISTRIBUTION INDEX i=1..12, j=1. ! описание топологии многопроцессорной системы
FOR OC ASSUME c=SUM((Ok)a[i,k]
×
b[k,j]). ! коллективная операция вычисления c[i][j]
END PART. ! конец раздела Pmatpix
В начале раздела
Pmatrix
описаны переменные
a,b
как входные параметры
и переменная
c
как выходной (ключевое слово
RESULT
) параметр. Умножае-
мые матрицы имеют размеры
a[i=1..iMAX][k=1..kMAX]
и
b[k=1..kMAX][j=1..jMAX]
,
результирующая матрица
c[i=1..iMAX][j=1..jMAX]
.
Конструкция
FOR OC ASSUME c=SUM((Ok)a[i,k]
×
b[k,j]).
Описывает
коллективную операцию вычисления произведения матриц по формуле
b
kj
kMAXk
1k
a
ik
с
ij
×
=
=
=
для каждого элемента матрицы
c.
Распределение данных и
вычислений на двумерную сетку процессоров в данном случае описано по-
средством
DISTRIBUTION INDEX i=1..12, j=1.
(инструкция
DISTRIBUTION INDEX
бессмысленна в основном разделе); при этом исходные матрицы
распределеляются по процессорам путем разбиения их на горизонтальные
ленты (в соответствие с индексом
i
). Критерий выбора индексных
направлений (в текущей версии НОРМА их допускается два) и их сочетаний
(если имеется возможность выбора из нескольких вариантов) в конструкции
DISTRIBUTION INDEX
с целью синтеза наиболее производительных программ
описан, напр., в
http://pilger.mgapi.edu/metods/1441/norma.zip.
С целью
обеспечения итераций в НОРМА имеется специальная инструкция,
позволяющая организовать итерационный цикл с проверкой выхода на
заданную точность.
Однако для создания текста НОРМА-программы все же требуется про-
граммист, знакомый с правилами языка и формальнонабивающий исход-
                                            - 67 -

  Описанные в основном разделе операции не распараллеливаются и обычно
являются подготовительными для последующих вычислений. Описание кол-
лективной операции может выглядеть так (раздел PART содержит процедуру
Pmatrix):

PART Pmatrix. ! начало раздела Pmatrix
  a,b RESULT c ! a,b – входные параметры, с – выходной
! тело процедуры Pmatrix
BEGIN
  Oi: (i=1..iMAX).
  Oj: (j=1..jMAX).
  Ok: (k=1..kMAX).
  OA: (Oi; Ok).
  OB: (Ok; Oj).
  OC: (Oi; Oj).
  VARIABLE a DEFINED ON OA DOUBLE.
  VARIABLE b DEFINED ON OB DOUBLE.
  VARIABLE c DEFINED ON OC DOUBLE.
  DOMAIN PARAMETERS iMAX=500.
  DOMAIN PARAMETERS jMAX=1000.
  DOMAIN PARAMETERS kMAX=1000.
  DISTRIBUTION INDEX i=1..12, j=1. ! описание топологии многопроцессорной системы
  FOR OC ASSUME c=SUM((Ok)a[i,k] × b[k,j]). ! коллективная операция вычисления c[i][j]
END PART. ! конец раздела Pmatpix

  В начале раздела Pmatrix описаны переменные a,b как входные параметры
и переменная c как выходной (ключевое слово RESULT) параметр. Умножае-
мые матрицы имеют размеры a[i=1..iMAX][k=1..kMAX] и b[k=1..kMAX][j=1..jMAX],
результирующая матрица – c[i=1..iMAX][j=1..jMAX].
  Конструкция       FOR OC ASSUME c=SUM((Ok)a[i,k] × b[k,j]).  Описывает
коллективную операцию вычисления произведения матриц по формуле
         k =kMAX
с ij =       ∑ a ik × b kj для каждого элемента матрицы c. Распределение данных и
            k =1
вычислений на двумерную сетку процессоров в данном случае описано по-
средством DISTRIBUTION INDEX i=1..12, j=1. (инструкция DISTRIBUTION INDEX
бессмысленна в основном разделе); при этом исходные матрицы
распределеляются по процессорам путем разбиения их на горизонтальные
ленты (в соответствие с индексом i). Критерий выбора индексных
направлений (в текущей версии НОРМА их допускается два) и их сочетаний
(если имеется возможность выбора из нескольких вариантов) в конструкции
DISTRIBUTION INDEX с целью синтеза наиболее производительных программ
описан, напр., в http://pilger.mgapi.edu/metods/1441/norma.zip. С целью
обеспечения итераций в НОРМА имеется специальная инструкция,
позволяющая организовать итерационный цикл с проверкой выхода на
заданную точность.
  Однако для создания текста НОРМА-программы все же требуется про-
граммист, знакомый с правилами языка и формально ‘набивающий’ исход-