- •Алгоритм выхода из тупиковой ситуации с минимальной ценой
- •Алгоритмы защиты от взаимных блокировок. Классификация алгоритмов защиты.
- •Асинхронные параллельные процессы. Проблема «производитель-потребитель».
- •Асинхронные параллельные процессы. Проблемы синхронизации параллельных процессов.
- •Высокопроизводительный Фортран hpf. Общая характеристика.
- •Задача предотвращения тупиков. Алгоритм банкира.
- •1. Некоторые процессы бесконечно ожидают освобождения требуемых ресурсов, не производя никакой полезной работы
- •2. Процессы удерживают некоторые ресурсы не выполняя никакой полезной работы, и система без внешнего воздействия не может выйти из этого состояния.
- •Задача предотвращения тупиков. Алгоритм упорядоченных классов.
- •1. Некоторые процессы бесконечно ожидают освобождения требуемых ресурсов, не производя никакой полезной работы
- •2. Процессы удерживают некоторые ресурсы не выполняя никакой полезной работы, и система без внешнего воздействия не может выйти из этого состояния.
- •Конструктор массивов в языке Фортран 90.
- •Непроцедурный язык Норма. Понятие сетки. Понятие области.
- •Оператор полагать в языке норма.
- •Операторы языка Фортран 90
- •Операции над массивами в языке Фортран 90.
- •Организация ввода и вывода в языке норма.
- •Понятия критического ресурса и критической секции.
- •Проблема «Производитель-потребитель». Общие семафоры.
- •Проблема взаимных блокировок (тупиков).
- •Программирование пространственно-временных структур на языке оккам.
- •Секции массивов в языке фортран 90.
- •19. Система программирования pvm (Parallel Virtual Machine).
- •20. Система параллельного программирования dvm(Distributed Virtual Machine).
- •21. Система параллельного программирования mpi.
- •22. Структура программы на языке норма. Оператор итерация.
- •23. Условные области в языке норма.
- •24. Язык фортран 90. Общая характеристика.
- •25,26. Язык оккам. Общая характеристика. Операторы языка оккам.
-
Операции над массивами в языке Фортран 90.
Операции над массивами.
Все операции в языке Фортран 90 выполняются над векторами покомпонентно и фактически являются расширениями соответствующих операций над скалярами.
В языке вводятся понятия:
Ранг массива – размерность от 1 до 7. Ранг скаляра считается равным нулю.
Конфигурация массива – это одномерный массив целого типа, размер которого равен рангу исходного массива, а значения элементов равны размерам по каждому направлению исходного массива.
Массивы одинаковой конфигурации называются согласованными. В согласованных массивах элементы, занимающие одинаковое положение относительно первого элемента, называются соответствующими. Скаляр считается, согласованным с массивом любой размерности.
Все операции над массивами требуют согласованности операндов.
Конструктор массивов дает возможность построить одномерный массив (вектор), имеющий следующий формат: (/С1, С2, … Сn/) ,где Ci – элемент конструктора.
В свою очередь элемент конструктора может иметь один из следующих форматов: 1)скалярное выражение, 2)векторное выражение, 3)неявный цикл.
Пример 1 |
(/2, 1, 1, 3, 1/)
|
скалярное выражение |
Пример 2 |
(/A1+A2/)
|
векторное выражение |
Пример 3 |
(/(2.9, С(N), N=1,3), 8.2/) что эквивалентно: (/2.9, С(1), 2.9, С(2), 2.9, С(3), 8.9/)
|
неявный цикл |
Тип конструктора определяется типом входящего в него выражения.
Конструктор можно использовать в качестве: 1)операнда в выражении в качестве; 2)фактического параметра процедуры; 3)элемента списка вывода.
Конструктор не может стоять в левой части оператора присваивания.
В языке имеется возможность преобразовывать массив в массив другой размерности. Например:
INTEGER MAT (3,2)
INTEGER VEC (G)
VEC = (/1,10,100,1000,10000,100000/)
MAT = RESHARE (SHARE=(3,2), SOURCE = VEC)
В этом примере функция RESHARE преобразует исходный вектор VEC в двумерный массив MAT.
Секция массива – часть элементов исходного массива, выбранная из него по определенному правилу. Формат секции массива: 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)
При использовании векторного индекса могут возникать секции с повторами, в которых один и тот же элемент исходного массива используется несколько раз.
Такие секции не могут использоваться в левой части оператора присваивания.
Для ввода/вывода массива можно использовать неявный цикл
DIMENSION A(5), B(3,3)
…
WRITE (6,1) ((B(I,J), J=1,3), I=1,3)
1FORMAT(1X,3F8.3)
Оператор присваивания в среде операций над массивами.
REAL X(10,10), Y(40), Z(-9:10)
…
X(10,:) = 2.9 + Y(2:40:2) + SQR(Z)
X(:,3) = 3.5
Здесь оператор присваивания выполняется над секциями массивов в обычном порядке, т.е. каждому элементу секции слева ставится в соответствие элемент секции, получающийся при вычислении выражения справа. Элементы секции перебираются слева направо. Условием является согласованность секций в левой и правой части.
Пример: REAL X(10) ………… X(1:10)=X(10:1:-1) |
Такой оператор присваивания – встроенный, его особенности: 1)сначала выполняются все операции в правой части над элементами исходных массивов, 2)затем все операции в индексной части слева. После этого → само присваивание. В результате элементы массива X разместятся в обратном порядке. |
Присваивание по маске. Рассмотрим следующий пример
WHERE (Y.NE.0) X(10,:) = 4.1 + Z/Y ELSE WHERE X(10,:) = 0.0 END WHERE |
В этом примере задается маска в виде лог. выражения над массивом Y. Для тех элементов, где оно истинно, над элементами массивов Z, X, Y выполняется первая часть конструкции, а для остальных – вторая часть конструкции. Конструкция WHERE может не содержать вторую часть ELSE WHERE. |
В ФОРТРАН 90 имеются функции, возвращающие в качестве результата массив. Есть возможность использовать традиционные функции в суперскалярном режиме.