Определим сложность последовательного алгоритма. Если
количество элементов массива n, тогда количество сравнений при слиянии
n . Количество уровней рекурсии
log2n, тогда время выполнения последовательной задачи:
T1 =
t*nlog2n
Определим сложность параллельного алгоритма.
Каждый процесс производит сортировку слиянием блока размером n/p,
где n - количество элементов массива, p - количество
процессов. Получаем оценку:
t1 =
(n/p)*log2(n/p)
Отсортированные блоки сливаются на нулевом процессе, количество
сравнений при каждом слиянии 2*n/p, всего присходит p итерраций слияния,
следовательно
t2 =
p*(2n/p)=2n
Общее время всех выполняемых в ходе сортировки операций передачи
блоков можно оценить при помощи соотношения вида
Tp(comm)=p(a+w(n/p)/b),
где a - латентность, b - пропускная способность
сети передачи данных, w - размер элемента упорядочиваемых данных в
байтах.
Время выполнения параллельного алгоритма сортировки слиянием
определяется суммой
Tp = Tp(comm)+ t1 + t2,
Tp =
p(a+w(n/p)/b)+t((n/p)*log2(n/p) + 2n)
Соответственно ускорение равно:
Sp =
tnlog2n /
[p(a+w(n/p)/b)+t((n/p)*log2(n/p) + 2n)]
Ускорение:
Ep =
tnlog2n /
p[p(a+w(n/p)/b)+t((n/p)*log2(n/p) + 2n)]