Параллельные алгоритмы решения систем линейных алгебраических уравнений

Параллельные алгоритмы решения систем линейных алгебраических уравнений

Кафедра : Э лектронных вычислительных машин

Специальность : Компьютерные системы и сети

Тема выпускной работы :

Параллельные метод ы решения систем линейных алгебраических уравнений на вычислительном кластере

Руководитель : Ладыженский Юрий Валентинович, доцент, к.т.н.


» Параллельные метод ы решения систем линейных алгебраических уравнений на вычислительном кластере «

На сегодняшний день производительность вычислительных систем во многом увеличивается не столько за счет увеличения частоты работы устройств, сколько за счет привлечения параллельной обработки 3. Данный процесс затрагивает как создание аппаратных средств (процессоры с несколькими АЛУ, коммуникационное оборудование для многопроцессорных систем и т.д.), так и разработку эффективных алгоритмов для различных параллельных платформ. Современные параллельные системы весьма дороги и используются для решения задач, требующих больших вычислительных ресурсов: предсказания погоды и климата, построения полупроводниковых приборов, исследования генома человека и т.д.

Как бы то ни было, существует возможность создания достаточно дешевой и относительно эффективной параллельной системы на базе обычных компьютеров, соединенных при помощи коммуникационного оборудования и, таким образом, образующих один вычислительный ресурс. Такие системы называются кластерами и относятся к классу параллельных систем с распределенной памятью [1,3]. Узким местом кластеров является то, что для взаимодействия отдельных узлов привлекается наиболее распространенное и дешевое коммуникационное оборудование (Fast Ethernet), которое использует общую среду передачи данных и обладает не очень большой пропускной способностью (в сравнении со скоростью обработки данных современными процессорами). Поэтому круг задач, решаемых на подобных системах, ограничивается задачами с небольшим числом обменов по сравнению с количеством вычислений. Неоспоримым преимуществом подобных систем является их относительная дешевизна и фактическое наличие больших компьютерных классов во многих учебных заведениях. Для программирования подобных систем применяются системы передачи сообщений, в которых отдельные компьютеры взаимодействуют посредством передачи и приема данных.

На сегодняшний день наиболее популярным стандартом является MPI ( message passing interface — интерфейс передачи сообщений) 2. Конкретные реализации MPI стандарта создаются производителями программного обеспечения и поставляются вместе с оборудованием. Большинство реализаций стандарта MPI называются MPICH . Этот стандарт описывает имена, вызовы и результат работы процедур. Для каждой конкретной параллельной системы с передачей сообщений MPI имеет свою оптимизированную реализацию, а правильно написанная программа переносима между различными MPI системами на уровне исходных кодов. Для написания MPI программ используются современные языки программирования, такие как C/C++ и Fortran.

Исследования в области MPI программирования ведутся в двух направлениях: создание эффективных параллельных алгоритмов и создание эффективных реализаций MPI стандарта для кластерных систем. Параллельные алгоритмы разрабатываются с учетом низкой скорости передачи данных, в связи с этим предпочтение отдается методам с наименьшим числом обменов. Текущая реализация MPI для кластерных систем осуществляет обмены посредством протокола TCP / IP [4], что приводит к невозможности эффективного использования широковещательных обменов, которые в текущей реализации осуществляются посредством парных обменов. Поэтому сегодня ведутся работы по созданию MPI реализации с реальным использованием широковещательных пересылок. Еще одна возможность увеличения производительности MPI программ – совмещение обменов и вычислений, однако для используемой в работе реализации данная техника не приводит к существенным улучшениям.

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

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

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

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

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

В качестве вычислительных узлов кластера используются доступные на рынке одно-, двух- или четырехпроцессорные компьютеры. Каждый узел такой системы работает под управлением своей копии операционной системы, в качестве которой чаще всего используются стандартные операционные системы: Windows, Linux, Solaris и т.п. Состав и мощность узлов кластера может меняться, давая возможность создавать неоднородные системы [1,2].

В качестве коммуникационного протокола в таких системах используются стандартные протоколы ЛВС, характеризуемые низкой стоимостью и низкой скоростью передачи данных. Основные характеристики коммуникационных сетей: латентность – время начальной задержки при посылке сообщения и пропускная способность сети, определяющая скорость передачи информации по каналам связи [1,2]. Наличие латентности определяет тот факт, что максимальная скорость передачи данных по сети не может быть достигнута на сообщениях с небольшой длиной. Чаще всего используется сеть Fast Ethernet, основное достоинство которой – низкая стоимость оборудования. Однако большие накладные расходы на передачу сообщений в рамках Fast Ethernet приводят к серьезным ограничениям на спектр задач, которые можно эффективно решать на таком кластере. Если от кластера требуется большая универсальность, то нужно переходить на более производительные коммуникационные сети, например, SCI, Myrinet и т.п.

В качестве средств организации параллельного программирования в кластерах используются различные системы передачи сообщений, посредством которых осуществляется взаимодействие узлов кластера. Наиболее распространенным на сегодняшний день стандартом программирования для систем с передачей сообщений является MPI . Конкретная MPI реализация создается производителями параллельных систем и поставляется вместе с оборудованием.

Кластер кафедры ЭВМ , на котором проводились исследования (рис 1.1)

Рис1. Структура кластера

Структура кластера состоит из :

· 1 главный узел ( head node ) ‏

· 11 вычислительных узлов ( compute nodes ) ‏

· c етевой интерфейс Gigabit Ethernet , 1 Гбит/ c

· кластерное ПО – Microsot Windows Compute Cluster Server 2003

· Языки программирования – С, С++, Fortran

· Параллельное программирование – MPI

Технические характеристики кластера

Характеристики главного и вычислительных узлов

1. Процессор: Intel Pentium Core2 64bit, 1.86 ГГц

2. Оперативная память: 1 Гб

3. Жесткий диск: 80 Гб

4. Сетевой интерфейс: Gigabit Ethernet , 1 Гбит/с

5. Операционная система : Microsoft Windows Server 2003 Enterprise x64 Edition SP2

2.Интерфейс передачи данных (message passing interface – MPI)

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

Подобный способ организации параллельных вычислений получил наименование модели «одна программа множество процессов» (single program multiple processes or SPMP1)).

разработкой параллельных программ с применением MPI 4.

· MPI позволяет в значительной степени снизить остроту проблемы переносимости параллельных программ между разными компьютерными системами – параллельная программа, разработанная на алгоритмическом языке C или FORTRAN с использованием библиотеки MPI, как правило, будет работать на разных вычислительных платформах;

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

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

3.Классификация параллельных методов решения СЛАУ

Метод Гаусса–Зейделя . Пусть решаемая система представлена в виде 1

Итерационная схема Гаусса–Зейделя следует из этого представления системы:

Приведем метод Гаусса–Зейделя к стандартному виду:

Стандартная форма метода позволяет выписать его итерационную матрицу и провести над ней очевидные преобразования:

Представим метод Гаусса–Зейделя в координатной форме для системы общего вида:

Координатная форма метода Гаусса–Зейделя отличается от координатной формы метода Якоби лишь тем, что первая сумма в правой части итерационной формулы содержит компоненты вектора решения не на k-й, а на (k+1)-й итерации.

Параллельный алгоритм метода Гаусса–Зейделя

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

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

void GaussZeidel (double *A, double *X, int size)

/* задана матрица А, начальное приближение вектора Х,

размерность матрицы size, вычисляем новое значение вектора Х */

Sum += A[ind(i,j,size)] * X[j];

Sum += A[ind(i,j,size)] * X[j];

X[i]=(A[ind(i,size,size)] – Sum) / A[ind(i,i,size)];

Рис. 2. Процедура вычисления значений вектора по методу Гаусса-Зейделя

Следующая система уравнений описывает метод Гаусса-Зейделя .

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

Можно предложить следующий модифицированный метод Гаусса–Зейделя для параллельной реализации. Разделим вычисления координат вектора по процессам аналогично методу простой итерации. Будем в каждом процессе вычислять свое количество координат вектора по методу Гаусса Зейделя, используя только вычисленные значения вектора данного процесса. Различие в параллельной реализации по сравнению с методом простой итерации заключается только в процедуре вычисления значений вектора (вместо процедуры Iter_Jacoby используем процедуру Gauss-Seidel ).

void GaussZeidel(int size, int MATR_SIZE, int first)

/* задана матрица А, размерность матрицы MATR_SIZE, количество

вычисляемых элементов вектора в данном процессе size, вычисляем новые

значения вектора Х с номера first, используя значения вектора Х */

Sum += A[ind(i,j,MATR_SIZE)] * X[j];

for (j = i+1+first; j

Sum += A[ind(i,j,MATR_SIZE)] * X[j];

Рис. 1. Процедура вычисления значений вектора по методу Гаусса–Зейделя(параллельная версия)

• Разработка программной системы для параллельного решения СЛАУ на кластере

• Сравнение эффективности различных параллельных методов решения СЛАУ на кластере

1. Программирование для многопроцессорных систем в стандарте MPI: Пособие / Г. И. Ш паковский, Н. В. Серикова. – Мн.: БГУ, 2002. – 323с.

2. Теория и практика параллельных вычислений: учебное пособие/ В.П.Гергель.- М.: Интернет- Университет Информационных технологий; Бином. Лаборатория знаний, 2007.-423с.

3. Компьютерные сети. Принципы, технологии, протоколы / В. Г. Олифер, Н. А. Олифер. – СПб: Питер, 2001. – 672с.

4. Параллельное программирование с использованием Open MP.-М.: Бином. Лаборатория знаний Интуит., 2008.- 118с.

5. Group W, Lusk E, Skjellum A. Using MPI. Portable Parallel Programming with the Message-Passing Interface. — MIT Press, 1994. (http://www.mcs.anl.gov/mpi/index.html)

6. Параллельные информационные технологии: учебное пособие/ А.Б. Барский- M .: Интернет- Университет Информационных технологий; Бином. Лаборатория знаний, 2007.-504с.

7. Корнеев В.Д. Параллельное программирование в MPI. — Москва-Ижевск: Институт компьютерных исследований, 2003. — 304 с.

8 . Миллер Р., Боксер Л. Последовательные и параллельные алгоритмы: Общий подход. — М.: БИНОМ. Лаборатория знаний, 2006. — 406 с.

Основы параллельного программирования

Основы параллельного программирования

Лабораторная работа № 5

Решение систем линейных алгебраических уравнений методом Гаусса

Цель — практическое освоение методов решения систем линейных алгебраических уравнений прямыми методами. В лабораторной работе дано объяснение двух способов параллельного решения СЛАУ методом Гаусса, связанных с разными способами распределения данных по компьютерам. В этом разделе приведена последовательная программа решения СЛАУ методом Гаусса.

Требуется найти решение системы линейных алгебраических уравнений:

a11x1 + a12x2 + … + a1nxn = f1

a21x2 + a22x2 + … + a2nxn = f2

an1x1 + an2x2 + … + annxn = fn

Метод Гаусса основан на последовательном исключении неизвестных. Здесь рассматриваются два алгоритма решения СЛАУ методом Гаусса. Они связаны с разными способами представления данных (матриц коэффициентов и правых частей) в распределенной памяти мультикомпьютера. Схемы распределения данных по компьютерам для обоих примеров приведены ниже. Хотя данные распределены в памяти мультикомпьютера в каждом алгоритме по разному, но оба они реализуются на одной и той же топологии связи компьютеров — «полный граф».

ПРИМЕР 5.1. Решение СЛАУ методом Гаусса. Алгоритм первый

В алгоритме, представленном в данном пункте, исходная матрица коэффициентов A и вектор правых частей F разрезаны горизонтальными полосами, как показано на рис. 5.1. Каждая полоса загружается в соответствующий компьютер: нулевая полоса – в нулевой компьютер, первая полоса – в первый компьютер, и т. д., последняя полоса – в p1-1 компьютер. Здесь, в примере, каждая ветвь генерирует свои части матрицы коэффициентов A и вектор правых частей F.

Рис. 5.1. Разрезание данных для параллельного алгоритма 1 решения СЛАУ методом Гаусса

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

После прямого хода полосы матрицы A в каждом узле будут иметь вид (рис. 5.2)

Рис. 5.2. Вид полос после прямого хода в алгоритме 1 решения СЛАУ методом Гаусса. Пример приведен для четырех узлов; $ – вещественные числа.

Аналогично, последовательно по компьютерам, начиная с последнего по номеру компьютера, осуществляется обратный ход.

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

ПРИМЕР 5.2. Решение СЛАУ методом Гаусса. Алгоритм второй

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

Рис. 5.3. Разрезание данных для параллельного алгоритма 2 решения СЛАУ методом Гаусса

Нулевая строка матрицы помещается в компьютер 0, первая строка – в компьютер 1, и т. д., (p1-1)-я строка в компьютер p1-1 (где p1 количество компьютеров в системе). Затем, p1–я строка, снова помещается в компьютер 0, p1+1-я строка – в компьютер 1, и т. д.

При таком распределении данных, соответствующим этому распределению должен быть и алгоритм. Строку, которая вычитается из всех остальных строк (после предварительного деления на нужные коэффициенты), назовем текущей строкой. Алгоритм прямого хода заключается в следующем. Сначала текущей строкой является строка с индексом 0 в компьютере 0, затем строка с индексом 0 в компьютере 1 (здесь не нужно путать общую нумерацию строк во всей матрице и индексацию строк в каждом компьютере; в каждом компьютере индексация строк в массиве начинается с нуля) и т. д., и наконец, строка с индексом 0 в последнем по номеру компьютере. После чего цикл по компьютерам повторяется и текущей строкой становится строка с индексом 1 в компьютере 0, затем строка с индексом 1 в компьютере 1 и т. д. После прямого хода полосы матрицы в каждом компьютере будут иметь вид, показанный на рис. 5.4. Пример приведен для четырех узлов; $ – вещественные числа.

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

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

Рис. 5.4. Вид полос после прямого хода в алгоритме 2 решения СЛАУ методом Гаусса

Ниже приведена программа решения СЛАУ методом Гаусса для последовательного алгоритма:

double MA[M][M+1], MAD;

/* Переменные для замера времени решения */


источники:

http://pandia.ru/text/78/375/498.php