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

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

CHAN OF INT C:

INT A:

PAR

C ! 1

C ? A

«1» передается по каналу С в переменную «а».Транслятор отобразит процессы на транспьютер, а транспьютер на linkи.

Данные процессы выполняются параллельно.

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

WHILE TRUE

ALT

LEFT.CHAN ? X

OUTPUT ! X

RIGHT.CHAN ? 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.CHANS и Y.CHANS, и параллельная вложенная конструкция PAR, в которой процессы создаются при вызове процедуры.

[3][2] CHAN OF INT X.CHANS:

[2][3] CHAN OF INT Y.CHANS:

PAR I=0 FOR 2

PAR J=0 FOR 2

GRID.EL (X.CHANS[I,J], Y.CHANS[I,J], X,CHANS[I+1],J, Y.CHANS[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)

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

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

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