- •Средства разработки параллельных программ
- •Основные средства разработки параллельных программ
- •1.3. Стандартные языки программирования (Фортран, Си) с использованием параллельных специализированных библиотек. (Пример –
- •Декларативный язык Норма
- •Историческая справка
- •2.1985. Язык Норма. Препринт ИПМ АН СССР.
- •Типичный процесс разработки программы для решения задачи математической физики
- •Свойства языка Норма. Ограничения.
- •Пример класса задач, статические структурные сетки
- •Ключевые понятия языка Норма:
- •Границы области – константные выражения, константы задаются в описании, например:
- •Соотношения позволяют описывать вычисления, которые должны быть реализованы в программе.
- •Язык Норма. Пример программы 1 Решение системы линейных уравнений:
- •Программа решения системы линейных уравнений на языке Норма
- •Язык Норма. Пример программы 2
- •!Итерации по времени
- •!Тело итерации по времени
- •Основные возможности языка
- •Организация вычислений. ASSUME - не форма записи цикла.
- •Обмен информацией между процессорами (модель распараллеливания по данным)
- •Некоторые задачи, решаемые компилятором языка Норма для модели распараллеливания по данным
- •CВычисление параметров циклов в зависимости от номера
- •CТребуются вычисленные значения из процессоров
- •C Используются значения в процессорах с номерами 4..8 IF(IPR.LT.4.OR.IPR.GT.8.OR.JPR.NE.1) GOTO 7
- •Некоторые расчетные задачи, решенные с помощью языка Норма
- •4. Задача об акреции вещества на звезду с дипольным магнитным полем.
- •Ограничения в применении языка Норма
Границы области – константные выражения, константы задаются в описании, например:
DOMAIN PARAMETER Nx=388, MyJ=4, Ny=122
В языке Норма могут быть заданы области разных типов – многомерные, диагональные, условные и т.п., а также определены различные операции над областями.
Например, трехмерная область oijm может быть задана с помощью операции произведения одномерных областей:
oijm: (oi ; oj ; om).
Величины в языке Норма соответствуют расчетным переменным в расчетных формулах.
VARIABLE Velocity DEFINED ON oijm.
Величина Velocity определена на области oijm,
то есть эта величина имеет индексы i, j, m и может принимать значения во всех точках области oijm
Соотношения позволяют описывать вычисления, которые должны быть реализованы в программе.
FOR oijm ASSUME Velocity = 1.0.
Оператор ASSUME в общем виде:
FOR <область> ASSUME <формула> .
и является запросом на вычисление формулы во всех точках области.
Формула имеет вид <левая часть> = <правая часть>.
В результате выполнения оператора ASSUME величина, указанная в <левой части>, получает значения во всех точках <области>, по формуле, указанной в <правой части>.
Каким образом это вычисление реализуется – последовательно, параллельно, в каком порядке – в языке не определяется (декларативность)
Язык Норма. Пример программы 1 Решение системы линейных уравнений:
m |
Ai, j X j bi , |
i 1,...,m |
|
||
j 1 |
|
|
Метод решения
Xi0 X 0, |
|
i 1,..., m |
|
|
|
|
|
||||
Xin 1 |
1 |
(bi Ai, j X nj |
). |
|
|
|
i 1,...,m |
||||
Ai,i |
|||||||||||
|
|
i j |
|
|
|
|
|
||||
Условие выхода |
|
|
X n |
X n 1 |
|
|
|
|
|||
|
|
|
|
||||||||
Программа решения системы линейных уравнений на языке Норма
MAIN PART Linear. BEGIN
Oi: (I=1..M) . Oj : (J=1..M) . Oij : (Oi ; Oj). O1,O2 : Oj / j <> i.
VARIABLE X0,X,b DEFINED ON Oi. VARIABLE A DEFINED ON Oij. VARIABLE E.
DOMAIN PARAMETERS M = 20. DISTRIBUTION INDEX I=1..5.
INPUT X0, b ON Oi, A ON Oij. INPUT E.
OUTPUT X ON Oi.
ITERATION X ON N.
INI T I AL N=0 :
FOR Oi ASSUME X = X0. END INITIAL
FOR Oi ASSUME X = 1/A[j=i] * (b - SUM( (O1)A * X[I=J,N-1]). EXIT WHEN MAX( (Oi) ABS(X[N] - X[N-1] ) ) < E.
END ITERATION N. END PART
Язык Норма. Пример программы 2
PART GOD21. NTEND,HX,DT,GAMMA,PVAC,PRECIT,NITER,P0,R0,U0
RESULT P,R,U
BEGIN
!Описание переменных
VARIABLE NTEND,NITER INTEGER.
VARIABLE DT, HX, GAMMA, PVAC, PRECIT REAL. !Сетка, на которой определены основные переменные GRIDSOL : (I=1..LX).
VARIABLE R, U, P, R0, U0, P0, E DEFINED ON GRIDSOL. !Вспомогательные сетки и переменные GRIDAUX:(I=1..LX1).
VARIABLE PX, RX, UX, EX DEFINED ON GRIDAUX. GRIDIN:(I=2..LX1-1). GRIDL:(I=1). GRIDR:(I=LX+1). GRIDJ(J=1).
DOMAIN PARAMETERS LX=200, LX1=201.
! Распределение для конфигурации (10 х 1) процессоров
DISTRIBUTION INDEX I=1..10, J=1.
!Итерации по времени
ITERATION R, P, U, E, ON NT.
!Начальные значения для итераций по времени
INITIAL NT=0:
FOR GRIDSOL ASSUME P=P0; R=R0; U=U0.
FOR GRIDSOL ASSUME E=P/(R*(GAMMA-1.0)) + U*U*0.5.
END INITIAL
!Тело итерации по времени
!Подпрограмма RIEMANN вычисляет “распадные” параметры
FOR GRIDIN ASSUME
COMPUTE RIEMANN(GAMMA,NITER,PVAC,ITPREC,R[NT-1,I-1],P[NT-1,I-1], U[NT-1,I-1],R[NT-1],P[NT-1],U[NT-1] RESULT RX,PX,UX,EX).
FOR GRIDL ASSUME
COMPUTE RIEMANN(GAMMA,NITER,PVAC,ITPREC,R[NT-1], P[NT-1], U[NT-1],R[NT-1],P[NT-1],U[NT-1] RESULT RX,PX,UX,EX).
FOR GRIDR ASSUME
COMPUTE RIEMANN(GAMMA,NITER,PVAC,ITPREC,R[NT-1,I-1],P[NT-1,I-1], U[NT-1,I-1],R[NT-1,I-1],P[NT-1,I-1],U[NT-1,I-1]
RESULT RX,PX,UX,EX).
FOR GRIDSOL ASSUME
R=R[NT-1]+(DT/HX)*(RX*UX-RX[I+1]*UX[I+1]);
U=(R[NT-1]*U[NT-1]+(DT/HX)*((RX*UX*UX+PX)- (RX[I+1]*UX[I+1]*UX[I+1]+PX[I+1])))/R;
E=(R[NT-1]*E[NT-1]+(DT/HX)*((RX*UX*EX+PX*UX)- (RX[I+1]*UX[I+1]*EX[I+1]+PX[I+1]*UX[I+1])))/R;
P=(GAMMA-1.0)*R*(E-U*U*0.5). ! Условие завершения итерации EXIT WHEN NT=NTEND.
END ITERATION NT.
END PART.
Основные возможности языка
НОРМА
Возможность |
Используется для |
|
представления |
|
понятия |
Области и операции над |
Индексное |
областями |
пространство |
Скалярные переменные |
Вектора, |
и переменные, |
матрицы, |
определенные на |
массивы |
областях |
|
Соотношения |
Расчетные формулы |
Разделы |
Части задачи |
|
(подпрограммы) |
Ввод/Вывод |
Ввод/Вывод данных |
Итерации |
Итеративные |
|
вычисления |
Редукционные функции |
, , min, max |
Стандартные |
sin,cos,sqrt,exp,… |
арифметические |
|
функции |
|
Интерфейс |
Вызов подпрограмм на |
с Фортраном |
Фортране |
Организация вычислений. ASSUME - не форма записи цикла.
j |
i |
X |
Y |
X(i,j)=F(X(i-1,j),Y(i,j)) Y(i,j)=G(X(i,j-1),Y(i+1,j))
! Неверный вариант DO i = 1,…
DO j = 1,… X(i,j)=F(X(i-1,j),Y(i,j)) Y(i,j)=G(X(i,j-1),Y(i+1,j))
ENDDO
ENDOO
Обмен информацией между процессорами (модель распараллеливания по данным)
j
i |
X(i,j)=Y(i-1,j+1) |
|
