Постановка задачи
  
 
Параллельный алгоритм
Особенностью параллельной реализации метода Якоби в отличие от последовательной версии является разбиение преобразованной матрицы А на части, которые передаются процессам-потомкам от родительского. Каждый процесс-потомок производит расчеты лишь со своей частью матрицы, вычисляя часть вектора xk+1, которая затем передается родительскому процессу с целью проверки критерия останова. Если критерий останова не выполнился, то обновленное приближение решения передается всем процессам-потомкам и они выполняют следующую итерацию алгоритма. Такая схема позволяет более эффективно расходовать системную память и уменьшает количество пересылаемых данных.
Демонстрация работы параллельного алгоритма
Выполнение k+1-ой итерации происходит по следующей схеме:

Анализ эффективности
Время, затраченное на последовательное выполнение алгоритма, выражается следующей формулой:
T = k * (2*n^2 - n), где k – число выполненных итераций, а n – число уравнений.
Время, затраченное на параллельное выполнение алгоритма на p процессорах без учета затрат на передачу данных, выражается формулой:
T(p) = k/p * (2*n^2 - n)
 
Тогда ускорение равно:
S = T(1) / T(p) = p
Эффективность:
E = T1 / p*Tp = 1
Разработанный способ параллельных вычислений позволяет достичь идеальных показателей ускорения и эффективности.
Определим время, затрачиваемое на передачу данных. Для этого используем модель Хокни.
Первоначальная рассылка данных требует следующее время:
Tcomm1 = (p-1) * (4*alfa + (n^2 / p + n) / betta), где alfa - латентность, betta - пропускная способность сети
Передача данных, выполняемая в итерационном процессе, затрачивает следующее время:
Tcomm2 = k * (p-1) * (3*alfa + (n / p + n) / betta), где k - количество выполненных итераций
В итоге общее время передачи данных выражается формулой:
Tcomm = (p-1) * (4*alfa + (n^2 / p + n) / betta) + k * (p-1) * (3*alfa + (n / p + n) / betta)
Это время зависит от числа итераций. Как правило, их количество меньше числа уравнений n. Значит время на передачу данных можно оценить величиной:
 
Tcomm = O(n^2)
В свою очередь и ко времени выполнения алгоритма применима та же оценка:
T = O(n^2)
Если число итераций будет сравнимо с n, то для времени выполнения алгоритма будет справедлива уже другая оценка:
T = O(n^3)
Результаты экспериментов
Эксперименты проводились на следующей конфигурации:
Processor: AMD Turion(tm) X2 Dual-Core Mobile RM-70  2.00GHz
RAM: 3 Gb
OS: Windows 7 Ultimate x86
Время работы алгоритмов и полученные ускорения представлены в таблице 1:
Таблица 1. Ускорение вычислений  
  
   | Размер матрицы | Количество итераций | Последовательный | Параллельный(2 процесса)
 | Ускорение(2 процесса)
 | Параллельный(4 процесcа)
 | Ускорение(4 процесса)
 | 
  
    | 512 * 512 | 10000 | 10.6055 | 7.71639 | 1.37 | 12.0014 | 0.88 | 
  
    | 1024 * 1024 | 10000 | 41.6292 | 29.6758 | 1.4 | 14.4 | 2.18 | 
  
    | 2048 * 2048 | 10000 | 179.711 | 123.396 | 1.46 | 152.437 | 1.18 | 
Из полученных данных видно, что параллельная работа алгоритма дает замедление. Это связано с накладными расходами на передачу данных между процессами. Также при обмене данными требуется синхронизировать работу процессов, что тоже не улучшает производительность.
В таблице 2 приведены теоретическое и экспериментальное время:
 
Таблица 2. Сравнение теоретических оценок и экспериментальных данных.  
  
    | Размер матрицы | Теоретическое время(2 процесса)
 | Экспериментальное время(2 процесса)
 | Теоретическое время(4 процесса)
 | Экспериментальное время(4 процесса)
 | 
  
    | 512 * 512 | 5.3027 | 7.71639 | 2.6513 | 12.0014 | 
  
    | 1024 * 1024 | 20.8146 | 29.6758 | 10.4073 | 43.9385 | 
  
    | 2048 * 2048 | 89.855 | 123.396 | 44.927 | 152.437 | 
Как видно из приведённых результатов при локальных вычислениях (на одном компьютере) с числом процессов, равным числу ядер ЦП (2 ядра), выигрыш во времени происходит практически сразу и ускорение близко к идеальному (идеальное ускорение на двух ядрах = 2). При вычислениях в 4 процесса получаем замедление. Это связано с дополнительными коммуникационными расходами при передаче данных между большим числом процессов. Из полученных данных видно, что параллельная работа алгоритма дает замедление. Это связано с накладными расходами на передачу данных между процессорами и разделением времени ЦП. Также при обмене данными требуется синхронизировать работу процессоров, что тоже не улучшает производительность.
Об авторах
Заикин А., Роменский С., группа 8410.