О некоторых подходах к построению параллельных программ

Для матриц над областями первого типа алгоритм Штрассена всегда проигрывает стандартному алгоритму.

Для плотных матриц над областями первого типа (начиная, примерно с 50 %) лучший формат хранения - это ЭМ, для матриц средней плотности (примерно 0,5-50 %) лучшим форматом является БМ, а для разреженных матриц (менее 0,5 %) лучший формат - это ОТ.

Для плотных матриц второго типа существует область плотных матриц, в которой алгоритм Штрассена выигрывает у стандартных алгоритмов. При уменьшении плотности матриц начинает выигрывать алгоритм для ЭМ-матриц. Для матриц средней и низкой плотности лучшим форматом является 8М, а для сильно разреженных матриц - ОТ.

Разница во времени вычислений между алгоритмами в ОМ- и БМ-формах уменьшается, когда растет сложность умножения элементов матриц, в этом случае в реальных задачах форматом ОМ можно не пользоваться, заменяя его везде форматом вМ.

ЛИТЕРАТУРА

1. Малашонок Г.И., Красиков А.В. Пакет процедур для работы с биматрицами // Вести. ТГУ. Сер. Естеств. и техн. науки. VII Державинские чтения. Тамбов, 2002. Т. 7. Вып. I. С. 76.

БЛАГОДАРНОСТИ: Работа выполнена при частичной поддержке грантов Минобразования № 02-2.0-98, РФФИ № 04-07-90268-Ь, «Университеты России» № 04.01.051 и «Научный потенциал» № 23-03-24.

О НЕКОТОРЫХ ПОДХОДАХ К ПОСТРОЕНИЮ ПАРАЛЛЕЛЬНЫХ ПРОГРАММ

© Г.И. Малашонок, Ю.Д. Валеев

Обсуждаются некоторые подходы к построению параллельных программ для задач компьютерной алгебры. На основе этих подходов разработаны программы вычисления произведения полиномов в кольце целых чисел и в конечных полях и некоторые матричные алгоритмы. Обсуждаются результаты вычислительных экспериментов с этими программами на 16-процес-сорном кластере.

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

Это такие задачи, в которых вычислительная процедура состоит из многих независимых частей. Классическим примером такой задачи может служить задача поиска шифра на некотором допустимом множестве шифров. Подмножества, полученные разбиением такого множества шифров естественным образом, определяют переборные задачи на независимых вычислительных узлах (процессорах).

Можно выделить четыре этапа при выполнении параллельной программы такого типа.

1. Разделение задачи. Главный процессор, получив основную задачу, делит ее на п подзадач, где п - количество процессоров.

2. Распределение задачи. Одна часть задачи остается на главном процессоре, а остальные части раздаются другим процессорам.

3. Вычисление подзадач. Каждый процессор решает свою подзадачу и посылает результат главному процессору.

4. Сборка результата. Главный процессор принимает результаты вычислений от каждого из процессоров и вычисляет результат задачи.

Вычислительный алгоритм может быть представлен в виде вычислительного графа, если операциям сопоставить вершины графа, а операндам и результатам операций - направленные дуги.

Построение параллельной программы по вычислительному графу сводится к задаче разбиения вычислительного графа на подграфы, каждый из которых определяет вычислительную процедуру на отдельном вычислительном узле (процессоре). Будем называть их узловыми подграфами вычислительного графа. Дуги, связывающие узловые подграфы, обозначают передачу данных между процессорами. Если в вычислительном графе нет направленных путей, соединяющих вершины двух узловых подграфов, то будем говорить, что граф параллельной задачи слабо связный, а задача обладает естественным внутренним параллелизмом. Если существуют направленные пути, соединяющие вершины различных узловых подграфов, то будем говорить, что граф параллельной задачи сильно связный.

Большинство реальных вычислительных задач относится к классу сильно связных задач, то есть они имеют сильно связный вычислительный граф.

Затраты времени на передачу данных между процессорами замедляют вычислительный процесс, так как эти передачи выполняются существенно медленнее, чем передача данных внутри одного процессора. Отсюда возникает требование минимизации числа дуг между узловыми подграфами.

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

является требование разбиения вычислительного графа на равные по числу вершин узловые подграфы.

Таким образом, если задан вычислительный граф и имеются п процессоров, то задача построения параллельной программы сводится к задаче разбиения вычислительного графа на п подграфов с равным числом вершин и минимальным числом связей.

Один из подходов к построению параллельных алгоритмов для матричных и полиномиальных операций состоит в построении вычислительных алгоритмов в виде деревьев.

Рассмотрим задачу распараллеливания древовидной вычислительной схемы. В зависимости от возможностей перестройки вычислительного процесса в ходе вычислений будем различать три типа параллельных программ: статические, динамические и программы распараллеливания на верхнем уровне (РВУ).

1. СТАТИЧЕСКИЕ ПРОГРАММЫ

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

Достоинством таких программ является отсутствие дополнительных расходов времени на перестройку вычислительного процесса. Это самый эффективный способ проведения параллельных вычислений, и поэтому всякую параллельную программу стремятся написать, в первую очередь, в виде статической программы.

Недостатком является жесткость таких программ и требование однородности входных данных. Такие программы мало эффективны, когда входные данные разнородные и разреженные, что характерно для аналитических вычислений.

2. ДИНАМИЧЕСКИЕ ПРОГРАММЫ

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

Примером такой программы является программа с диспетчером. Диспетчер - это специально выделенный вычислительный узел, который управляет процессом назначения узловых подграфов конкретным процессорам. Он хранит список номеров свободных процессоров. Для закрепления некоторого подграфа за конкретным процессором необходимо запросить диспетчер и получить от него номер свободного процессора. После того, как процессор завершил вычисления по конкретному узловому подграфу, он сообщает диспетчеру о том, что он стал свободным процессором и может перейти к вычислению другого узлового подграфа.

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

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

Главным недостатком динамического метода являются большие затраты времени на обращение к диспетчеру.

3. РВУ-ПРОГРАММЫ

Следующий вид параллельных программ - РВУ-программы - сочетает в себе лучшие качества как статических параллельных программ, так и динамических.

Программа работает как обычная статическая программа до тех пор, пока не закончит работу какой-нибудь процессор по предписанному статическим алгоритмом узловому подграфу. Затем вступает в действие динамический режим.

В динамическом режиме на каждом вычислительном узле одновременно работают две части программы: вычислительная и диспетчерская. Обе части работают параллельно. Вычислительная часть предназначена для выполнения основного вычислительного алгоритма, а диспетчерская - для обмена сообщениями с главным диспетчером, роль которого играет диспетчерская часть на некотором выделенном процессоре.

Диспетчер хранит помимо списка свободных процессоров еще и информацию о состоянии каждого процессора, который еще не перешел в свободное состояние. Так как вычислительный граф является деревом, то состояние вычислительного процесса характеризуется уровнем в графе, на котором находится вычислительный процесс. Уровень вершины графа - это число дуг в кратчайшем пути от этой вершины до корневого узла.

Главный диспетчер на запрос от свободного процессора сообщает ему номер того процессора, вычислительный процесс которого находится на самом высоком уровне. Свободный процессор связывается с этим процессором и получает от него часть его узлового подграфа, которая становится узловым подграфом свободного процессора. Эта часть является поддеревом, которое лежит в невычисленной части, и корневая вершина которого лежит на высшем уровне.

Такая динамическая процедура распределения узловых подграфов по отдельным процессорам обеспечивает, очевидно, наименьшее число обращений к главному диспетчеру, так как каждый раз происходит выделение наибольшего вычислительного подграфа среди тех, которые еще не вычислены.

Если данные на входе РВУ-программы являются плотными и однородными, то практически все вычисления выполнятся в статическом режиме. Если же входные данные являются разреженными, то вычисления переключаются в динамический режим, как только появится первый свободный процессор, и это позволит избежать простоя процессоров.

Кроме того, в динамическом режиме определяется фиксированный нижний уровень дерева вычислительного алгоритма (НУ). Это такой уровень, начиная с которого распараллеливание вычислений приводит к замедлению вычислений, так как объем вычислений слишком мал. Поэтому, начиная с уровня НУ, все вы-

числения производятся на том вычислительном узле, на котором достигнут уровень НУ, и дальнейшее распараллеливание не производится.

Достоинством РВУ-программы является то, что в случае плотных данных все вычисления производятся столь же эффективно, как и в статических программах, а при разреженных и неоднородных данных программа дает возможность избежать простоев для освободившихся процессоров, перераспределяя на них части с самых «трудных» участков.

АПРОБИРОВАНИЕ ПАРАЛЛЕЛЬНЫХ ПРОГРАММ

Были разработаны РВУ-программы в среде Рап1ауа ИСП РАН для некоторых алгоритмов компьютерной алгебры. Эксперименты проводились на вычислительном 16-процессорном Муппй кластере ИСП РАН.

Ниже представлены некоторые графики роста скорости вычислений при увеличении числа процессоров участвующих в вычислениях (рис. 1, 2). На этих графиках по горизонтальной шкале откладывается количество процессоров, участвующих в вычислениях, а по вертикальной шкале - величина, обратная времени вычислений. За единицу времени принято 100 с. Верхний луч соответствует 100 % роста скорости (теоретический предел), нижний луч - росту скорости, равному 50 %.

Рис. 1. Скорость вычисления произведения полиномов с целыми коэффициентами

Рис. 2. Скорость вычисления произведения полиномов в конечном поле

Вычислялось произведение полиномов трех переменных, содержащих 17000 мономов. Коэффициенты полиномов - это целые числа, не превосходящие по модулю числа 228.

Вычислялось произведение полиномов трех переменных, содержащих 17000 мономов. Коэффициенты брались из конечного поля, не превосходящего 200 000 000.

Результаты экспериментов демонстрируют достаточно высокую эффективность полученных программ и закладывают основу для разработки аналогичных программ для других задач компьютерной алгебры.

БЛАГОДАРНОСТИ:

1. Работа выполнена при частичной поддержке

грантов Минобразования № 02-2.0-98, РФФИ

№ 04-07-90268-Ь, «Университеты России» № 04.01.051 и «Научный потенциал» № 23-03-24.

2. Авторы выражают глубокую благодарность коллективу ИСП РАН, разработчикам среды Ра^ауа, за плодотворные обсуждения и за проведение многочисленных экспериментов с программами на вычислительном кластере ИСП РАН.

О ПАРАЛЛЕЛЬНЫХ МАТРИЧНЫХ АЛГОРИТМАХ В КОМПЬЮТЕРНОЙ АЛГЕБРЕ

© Г.И. Малашонок, Ю.Д. Валеев, М.С. Зуев

Рассматриваются реализации некоторых матричных алгоритмов, предложенных в [1], в виде статических и динамических параллельных программ (см. [2]). Обсуждаются результаты вычислительных экспериментов.

Были разработаны статические и динамические программы в среде Раг.1ауа ИСП РАН для матричных алгоритмов умножения, вычисления присоединенных и обратных. Эксперименты проводились на вычислительном 16-процессорном Муппе!: кластере ИСП РАН.

1. ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ

Если время вычисления суммы и произведения элементов матриц примерно одинаковое, то применение схемы умножения Штрассена не приводит к ускорению вычислений, при порядке матрицы менее 1287 (см. оценки в [3]).

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