Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Параллельный алгоритм – это описание процесса обработки информации, ориентированного на реализацию с помощью вычислительных систем.
Представление параллельного алгоритма на языке программирования, доступном данной ВС, называется параллельной программой.
Существует 3 способа распараллеливания сложных задач:
1. Локальное. При локальном распараллеливании в выполняемой программе выделяются участки машинных команд, которые могут выполняться параллельно.
2. Глобальное. Глобальное распараллеливание происходит на уровне программных модулей.
3. Смешанное распараллеливание – наиболее эффективное, совмещает 1 и 2.
Приведение схем алгоритмов к виду, удобному для организации параллельных вычислений. При создании параллельных программ будем использовать схемы программ в соответствии с ГОСТ 19.003-80 ЕСПД, ГОСТ 19.701-90 ЕСПД.
Вначале создается схема алгоритма, как это делалось для традиционных вычислительных средств без учета параллельных вычислений. Будем называть такие алгоритмы последовательными. Затем с помощью алгоритма преобразования последовательного алгоритма в параллельный на основе анализа зависимости участков процесса по обрабатываемым переменным выделяются параллельные ветви вычислений. Алгоритмы с выделенными параллельными ветвями и есть параллельные алгоритмы.
Введем несколько ограничений на изображение схем алгоритмов с параллельными ветвями:
1.При параллельном выполнении программ окончание алгоритма зависит от составленного плана решения задачи, поэтому символ «терминатор» конца алгоритма надо исключить.
2.Не ограничивая общности рассуждений, можно считать, что при изображении параллельных алгоритмов можно ограничиться логическим символом с двумя выходами: FALSE и TRUE.
3.Традиционное изображение вводимой информации в указанных ГОСТах более или менее приемлемо для ВС с общей памятью и совсем не приемлемо для ВС с разделяемой памятью, так как в этих ГОСТах вводится достаточно искусственная зависимость программных модулей по данным. Эта зависимость существенно сужает возможности распараллеливания решаемой задачи. При рассмотрении ВС с разделяемой памятью ввод-вывод информации включается в процесс обмена информацией между процессорами и таким образом учитывается в планировании вычислительного процесса.
Аналогично решаем проблему вывода. Выводимая информация также находится в поле общей памяти. Отсутствие символа вывода (например, параллелограмма) можно объяснить тем, что преобразование и вывод информации не включают в план решения параллельных задач. В связи с этим при преобразовании исходного алгоритма в параллельный опускают символы ввода-вывода информации.
Сущность алгоритма преобразования схемы последовательного алгоритма в схему параллельного алгоритма заключается в следующем:
Разобьем последовательный алгоритм на линейные участки, заключенные между логическими операторами. Каждый логический оператор порождает не менее двух линейных участков. Линейный участок, образованный входом в алгоритм и логическим оператором, назовем начальным. Начальный участок может содержать только один оператор. Следующий за начальным участок начинается и заканчивается логическим оператором, т. е. если участок Ui, состоит из множества операторов , то следующий участок и т. д., где — логические операторы, причем , а — некоторые операторы (не логические). Таким образом, последний логический оператор участка Ui, является первым оператором для участка Ui+1. На каждом участке операторы перенумерованы: 1,2, …, Uk. Последние участки — это линейные участки, не имеющие в качестве последнего оператора логический оператор. Пусть в результате такого разбиения образовалось N участков k = 1,..., N, в каждом из которых оказалось Uk операторов.
Назовем связи, входящие в вычислительный или логический блоки, входными; выходящие из этих блоков — выходными. Будем полагать, что в каждый блок может входить и выходить несколько связей. В анализируемом алгоритме для упрощения анализа зависимости рассматриваемого программного модуля от предыдущих принята следующая схема: анализируемый алгоритм представляет собойпоследовательность программных модулей (процедур и/или функций). Обмен данными между ними происходит только через параметры, указанные в списке при вызове модулей. Результаты работы модули передаются через параметры, формируемые как <имя параметра>::=<префикс> <имя модуля>. Очевидно, что предлагаемое упрощение не является принципиальным и в случае необходимости легко можно учесть зависимости программных модулей по данным, осуществляемые с помощью понятий глобальных переменных различных уровней.
Алгоритм: Преобразование последовательного алгоритма в параллельный.
1. Разобьем последовательно алгоритм на N линейных участков: k = 1,..., N, исключив при этом терминаторы начала, конца и ввода-вывода информации. Перенумеруем сначала участок при k=1: Uk= 1,..., . Так как первый блок является входом в алгоритм, то положим МV:= {1} — множество входов в алгоритм.
2. Примем := 1.
3. Вычислим , Flag:= False (переменная Flag фиксирует проведение очередной связи).
4. Если > , то проверим, все ли блоки имеют выходные связи. Если да, то переходим к шагу 7, иначе проведем связи из блоков, не имеющих выходных связей, в блок и перейдем к шагу 7. Если ≤ , то выполняется следующий шах.
5. Если блок использует результаты работы блока , то проведем связь из блока в , положим Flag:= True и перейдем к шагу 3. Иначе выполняется следующий шаг.
6. Вычислим . Если , то переходим к шагу 5, иначе, если k= 1 и Flag:= False, принимаем как еще один вход в алгоритм . Если k > 1 и Flag:= False, то проводим связь из блока в . Переходим к шагу 3.
7. Вычислим k:= k + 1. Если k > N, то определяется коней алгоритма, иначе переходим к шагу 2
Дата публикования: 2015-02-18; Прочитано: 1173 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!