Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PP_KR22.doc
Скачиваний:
11
Добавлен:
10.12.2018
Размер:
507.9 Кб
Скачать
  1. Программирование пространственно-временных структур на языке оккам.

Пример 1: Пространственно-временная структура изображается в виде ориентированного графа. «1» передается по каналу С в переменную «а».

CHAN OF INT C:

INT A:

PAR

C ! 1

C ? A

Транслятор отобразит процессы на транспьютер, а тот – на linkи. Данные процессы выполняются параллельно.

Пример 2: →объединение информации, поступающей по каналам в произвольном порядке. Не заботимся о синхронизации.

WHILE TRUE

ALT

LEFT ? X

OUTPUT ! X

RIGHT? X

OUTPUT ! X

Пример 3: («Линейка»)

[4] CHAN OF INT CHANS :

PAR I=0 FOR 3

PIPE.EL( CHANS[I], CHANS[I+1])

Согласование обеспечивается операторами приема и выдачи из канала. Здесь реализована линейная пространственно-временная структура, включающая в себя три процесса и массив из четырех каналов. Параллельные процессы образуются при обращении к процедуре PIPE.EL, к которой в качестве параметров передаются 2 соседние элементы массива каналов.

Пример 4: («Сетка») реализованы двумерная пространственно-временная структура, в которой два двумерных массива каналов X и Y., и параллельная вложенная конструкция PAR, в которой процессы создаются при вызове процедуры.

[3][2] CHAN OF INT X:

[2][3] CHAN OF INT Y:

PAR I=0 FOR 2

PAR J=0 FOR 2

GRID.EL (X[I,J], Y[I,J], X[I+1,J],Y[I,J+1])

  1. Секции массивов в языке фортран 90.

Секция массива - часть элементов исходного массива, выбранная из него по определенному правилу.

Формат секции массива: b (i1, i2, … , in) , где b – имя исходного массива, ik - индексы секции.

Каждый индекс может быть скалярного типа, векторного типа или индексным триплетом. Скалярный индекс – скалярное выражение целого типа.

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

Формат индексного триплета:

[l1] : [l2] : [l3]

где:

l1 – нижняя граница

l2 – верхняя граница

l3 – шаг

Пример использования индексного триплета.

DINSION ROW (N), COL (M)

DINSION Z (M, N)

……………

ROW=Z(3,:)

COL=Z(:,J)

CALL SUB1(Z(M:1:-2,1:N:2))

В этом примере массиву CALL присваивается J-й столбец массива Z. Массиву ROW присваивается 3-я строка массива Z.

Пример использования векторного индекса

INTEGER A(10,10), U(3), U(4)

INTEGER MAT (3,4), VNEW(4)

V=(/1,3,2/)

U=(/2,1,1,3/)

VNEW=A(3,U) à A(3,2), A(3,1), A(3,3)

MAT=A(U,V)

à

A(1,2), A(1,1), A(1,1), A(1,3)

A(3,2), A(3,1), A(3,1), A(3,3)

A(2,2), A(2,1), A(2,1), A(2,3)

Из примера видно, что при использовании векторного индекса могут возникать секции с повторами, в которых один и тот же элемент исходного массива используется несколько раз.

Такие секции не могут использоваться в левой части оператора присваивания.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]