Постановка задачи
Имеется система линейных уравнений Ax=b. Требуется, используя библиотеку MPI, реализовать
многопоточное приложение, вычисляющее решение данной системы с помощью метода Гаусса.
Метод решения
Метод Гаусса основывается на возможности выполнения 
преобразований линейных уравнений, которые не меняют 
при этом решения рассматриваемой системы (такие преобразования носят 
наименование эквивалентных). К числу таких 
преобразований относятся:
  - 
  умножение любого из уравнений на ненулевую константу; 
  
- 
  перестановка уравнений; 
  
- 
  прибавление к уравнению любого другого уравнения 
  системы.
Метод Гаусса включает последовательное выполнение двух 
этапов. На первом этапе – прямой ход метода 
Гаусса – исходная система линейных уравнений при 
помощи последовательного исключения неизвестных приводится к верхнему 
треугольному виду
Ux=c, 
где матрица коэффициентов получаемой системы имеет вид 
 
 
На обратном ходе метода 
Гаусса (второй этап алгоритма) осуществляется определение значений неизвестных. 
Из последнего уравнения преобразованной системы может быть вычислено значение 
переменной xn-1, после этого из 
предпоследнего уравнения становится возможным определение переменной xn-2 и т.д.
Параллельная схема
При внимательном рассмотрении метода Гаусса можно 
заметить, что все вычисления сводятся к однотипным вычислительным операциям над 
строками матрицы коэффициентов системы линейных 
уравнений. Как результат, в основу параллельной реализации алгоритма Гаусса может быть положен принцип 
распараллеливания по данным. В качестве базовой 
подзадачи можно принять тогда все вычисления, связанные с обработкой 
одной строки матрицы A и соответствующего элемента 
вектора b.
Для выполнения прямого хода метода Гаусса необходимо 
осуществить (n-1) итерацию по исключению неизвестных 
для преобразования матрицы коэффициентов A к 
верхнему треугольному виду. Прежде всего, в самом начале итерации необходимо 
выбрать ведущую строку, которая при использовании метода главных элементов 
определяется поиском строки с наибольшим по абсолютной величине значением среди 
элементов столбца i, соответствующего исключаемой 
переменной xi. Поскольку строки матрицы 
A распределены по подзадачам, для поиска 
максимального значения подзадачи с номерами k, 
ki. После сбора всех необходимых данных в 
каждой подзадаче может быть определено, какая из подзадач содержит ведущую 
строку и какое значение является ведущим элементом.
Далее для продолжения вычислений ведущая подзадача должна разослать 
свою строку матрицы A и соответствующий элемент 
вектора b всем остальным подзадачам с номерами k, ki.
При выполнении обратного хода метода Гаусса подзадачи выполняют 
необходимые вычисления для нахождения значения неизвестных. Как только 
какая-либо подзадача i, 0 ii, 
это значение должно быть разослано всем подзадачам с номерами k, k
ii, 
это значение должно быть разослано всем подзадачам с номерами k, k 
Анализ эффективности
   Оценим трудоемкость рассмотренного параллельного 
варианта метода Гаусса. Пусть n есть порядок решаемой системы линейных 
уравнений, а p, pС учетом выполняемого количества итераций общее число 
операций параллельного варианта прямого хода метода Гаусса определяется 
выражением:   
 
 
Трудоемкость параллельного варианта обратного хода алгоритма Гаусса оценивается как величина:
 
 
Просуммировав полученные выражения, можно получить:
 
 
При выполнении прямого хода на каждой итерации для определения ведущей строки 
процессоры обмениваются локально найденными максимальными значениями в столбце с 
исключаемой переменной. Всего это время занимает:
 
 где,
 где,   – латентность 
сети передачи данных, β – пропускная способность сети, w – размер пересылаемого 
элемента данных. Далее также на каждой итерации прямого хода метода Гаусса 
выполняется рассылка выбранной ведущей строки. Сложность данной операции передачи данных:
 – латентность 
сети передачи данных, β – пропускная способность сети, w – размер пересылаемого 
элемента данных. Далее также на каждой итерации прямого хода метода Гаусса 
выполняется рассылка выбранной ведущей строки. Сложность данной операции передачи данных: 
 Общее время, необходимое для выполнения обратного 
хода, можно оценить как:
 Общее время, необходимое для выполнения обратного 
хода, можно оценить как:
 
 
В итоге, с учетом всех полученных выражений, 
трудоемкость параллельного варианта метода Гаусса составляет:
 
где τ есть время выполнения базовой вычислительной 
операции.
 
 
Демонстрация
 
 
Результаты вычислительных экспериментов
Конфигурация: Intel Core2 T5250 (1.5GHz), 2.00GB RAM. 
  
  
    | Размер системы | Время выполнения(послед)
 | Время выполнения(паралл)
 | Ускорение | Время выполнения(теор) | 
  
    | 250 | 0.109 | 0.156 | 0.698 | 0.031 | 
  
    | 500 | 0.563 | 0.578 | 0.974 | 0.246 | 
  
    | 750 | 1.812 | 1.453 | 1.247 | 0.828 | 
  
    | 1000 | 4.25 | 2.969 | 1.431 | 1.96 | 
  
    | 1250 | 8.253 | 5.313 | 1.553 | 3.824 | 
  
    | 1500 | 14.437 | 8.656 | 1.667 | 6.604 | 
  
    | 2000 | 33.609 | 19.094 | 1.76 | 15.643 | 
  
    | 2500 | 64.985 | 36.297 | 1.79 | 30.538 | 
        
 Теоретическое время выполнения было посчитано с параметрами, которые получены практическим 
путем:
a=3.53*10^(-6);  b=6.45*10^7
Об авторах
  Работу выполнил: Муравьев Александр, группа 8410.