
- •Алгоритм выхода из тупиковой ситуации с минимальной ценой
- •Алгоритмы защиты от взаимных блокировок. Классификация алгоритмов защиты.
- •Асинхронные параллельные процессы. Проблема «производитель-потребитель».
- •Асинхронные параллельные процессы. Проблемы синхронизации параллельных процессов.
- •Высокопроизводительный Фортран hpf. Общая характеристика.
- •Задача предотвращения тупиков. Алгоритм банкира.
- •Задача предотвращения тупиков. Алгоритм упорядоченных классов.
- •1. Некоторые процессы бесконечно ожидают освобождения требуемых ресурсов, не производя никакой полезной работы
- •2. Процессы удерживают некоторые ресурсы не выполняя никакой полезной работы, и система без внешнего воздействия не может выйти из этого состояния.
- •Конструктор массивов в языке Фортран 90.
- •Непроцедурный язык Норма. Понятие сетки. Понятие области.
- •Оператор полагать в языке норма.
- •Операторы языка Фортран 90
- •Операции над массивами в языке Фортран 90.
- •Организация ввода и вывода в языке норма.
- •Понятия критического ресурса и критической секции.
- •Проблема «Производитель-потребитель». Общие семафоры.
- •Проблема взаимных блокировок (тупиков).
- •Программирование пространственно-временных структур на языке оккам.
- •Секции массивов в языке фортран 90.
- •19. Система программирования pvm (Parallel Virtual Machine).
- •20. Система параллельного программирования dvm(Distributed Virtual Machine).
- •21. Система параллельного программирования mpi.
- •22. Структура программы на языке норма. Оператор итерация.
- •23. Условные области в языке норма.
- •24. Язык фортран 90. Общая характеристика.
- •25,26. Язык оккам. Общая характеристика. Операторы языка оккам.
20. Система параллельного программирования dvm(Distributed Virtual Machine).
При параллельном программировании разработчик, кроме составления алгоритма решения задачи, должен дополнительно: 1)Определить возможность параллельного выполнения отельных частей программы; 2)Распределить выделенные части алгоритма по отдельным параллельным ветвям с учетом архитектуры ВС; 3)Обеспечить синхронизацию параллельных ветвей алгоритма; 4)Распределить исходные данные и промежуточные результаты между параллельными ветвями алгоритма; 5)Защитить параллельные части программы от взаимных блокировок; 6)На каждом этапе проектирования алгоритма оценивать его эффективность.
Каждая из перечисленных задач очень трудоемка в отдельности, а необходимость их совместного решения является главным тормозом в развитии технологии параллельного программирования. Потому основные усилия разработчиков направлены на создание систем параллельного программирования, максимально автоматизирующие решение вышеперечисленных задач.
Наиболее распространенные системы пар. программирования: PVM, MPI, DVM
DVM Модели параллелизма: 1) по данным; 2) параллелизм задач. Каждый экземпляр программы обрабатывает свое подмножество данных. Такой подход наиболее оправдан при распараллеливании гнездовых циклических алгоритмов.
Преимущества системы DVM: 1)Простота разработки параллельных программ; 2)Мобильность системы; 3)Высокая эффективность выполнения программ; 4)Возможность композиции параллельных приложений из нескольких различных модулей; 5)Единая модель параллелизма для языков: Cи-DVM и Фортран-DVM; 6)В системе DVM имеется возможность на каждом этапе проектирования оценивать эффективность будущей параллельной программы. Для этого в состав системы включен специальный модуль, называемый предиктором (предсказатель).
ГЛАВНОЕ ПРЕИМУЩЕСТВО: Программа на языке Cи-DVM или Фортран-DVM может выполняться и как в обычном (последовательном) режиме, и как параллельная программа → благодаря тому, что все специальные директивы для параллельного выполнения записываются в виде комментариев на соответствующем языке (Си или Фортран), и таким образом, не воспринимаются стандартным компилятором.
При использовании системы DVM программисту предоставляются следующие возможности спецификации параллельного выполнения программы:
-
Распределения элементов массивов между процессорами системы.
-
Распределение витков циклов между процессорами.
-
Спецификация параллельно выполняющихся секций программы (параллелизм задач).
-
Организация эффективного доступа удаленным данным.
-
Организация эффективного выполнения редукционных операций.
Существуют следующие возможности повышения эффективности DVM программ:
1)Использование групповых асинхронных взаимодействий процессоров (одновременное выполнение нескольких редукций для нескольких массивов); 2)Возможность перекрытия простоев процессоров при групповых асинхронных взаимодействиях с вычислениями; 3)Автоматическое изменение порядка выполнения витков цикла для опережающих вычислений и рассылок полученных данных; 4)DVM программа динамически настраивается на параметры приложения, т.е. на количество и размер массивов данных
В состав системы DVM входят следующие компоненты: 1)Компилятор Фортран-DVM; 2)Компилятор Си-DVM; 3)Библиотека Lib-DVM; 4)DVM-отладчик; 5)Предиктор (предсказатель производительности); 6)Анализатор производительности DVM-программы.
Библиотека Lib-DVM поддерживает выполнение DVM-программы, используя коммуникационные системы MPI и PVM. Отладчик обеспечивает выполнение программы в специальном режиме DVM директив и выполнение прог. на пар. ВС в специальном режиме, в котором все промежуточные рез-ты сравниваются с рез-тами последовательного выполнения. Анализатор производительности определяет характеристики эффективности параллельной программы, предоставляя пользователю информацию о производительности всей DVM-системы и отдельных ее частей.
Пример DVM-программы. Решение системы линейных уравнений методом Гаусса.
PROGRAMM GAUSS
C решение системы А*X + B
PARAMETER (N-100)
REAL A(N, N+1), X(N)
C A: матрица коэффициентов (N,N+1)
C вектор правых частей в N+1 столбцах
С X: вектор неизвестных
* DVM$ DISTRIBUTE A(BLOCK, *)
* DVM$ ALIGN X(I) WITH A(I,N+1)
С инициализация
* DVM$ PARALLEL(I) ON A(I,*)
DO 100 I=1,N
DO 100 J=1 ,N +1
IF (I.EQ.N+1) THEN
A(I,J)=2.0
ELSEIF (J.EQ.N+1) THEN
A(I,J)=0.0
ENDIF
ENDIF
100 CONTINUE
C исключение
DO 1 I=1,N
C I-я строка матрицы А буферизутся
С перед обработкой I-го столбца у-ния
С ссылки A(I,K), A(I,J) заменяются
С ссылками на буфер
*DVM$ PARALLEL(Y) ON A(J,*), REMOTE_ACCESS(A(I,:))
DO 5 J=I+1,N
DO 5 K=I+1 ,N +1
A(I,K)=A(I,K)- A (I,J)+A(I,K)/A(I,I)
5 CONTINUE
1 CONTINUE
C сначала вычисляется X(N)
X(N) = A(N,N+1) / A(N,N)
C нахождение X(N-1), X(N-2)
С обратной подстановкой
DO 6 J=N-1,1,-1
C (J+1) эл-т массива X буферизуется
С перед обработкой J-го уровня
*DVM$ PARALLEL(Y) ON A(I,*), REMOTE_ACCESS(X(J+1))
DO 7 I=1,J
A(I,N+1) = A(I,N+1) - A(I,=J+1) * X(J+1)
7 CONTINUE
8 CONTINUE
PRINT *,X
END
Distribute (block, *) – указывает на то, что двум массивам A д.б. равномерно распределено по 1-му измерению на процессоры системы. * указывает на то, что размерность помещается на все процессоры целиком. ALIGN – указывает на необходимость выравнивания X(I) по массиву (I, N+1), те. Соответствующие элементы указанных массивов д.б. размещены в адресном пространстве одного и того же процессора. PARALLEL – указывает на необходимость распределения витков цикла по I между процессорами в соответствии с распределением массива A. REMOTE-ACCESS – указывает на необходимость распределения витков цикла по I между процессорами в соответствии с распределением массива (A (J, *)) причем в цикле будут использованы удаленные переменные, размещенные на другом процессоре, ко-рые перед выполнением цикла перемещаются в специальный буфер.