Описание алгоритма
На первом шаге алгоритма исходные матрицы A и
B разбиваются на N частей (N - число процессов). Матрица
A разбивается на строки, матрица B - на
столбцы. Разбиение происходит так, чтобы разность количеств строк на любых двух
процессах не превышала 1, проще говоря, матрицы разделяются почти поровну. На
каждом процессе происходит перемножение полученных подматриц (по
последовательному алгоритму) и результат записывается в локальную для каждого
процесса матрицу C', количество строк в которой равно
количеству строк, полученных после рзбиения от матрицы А, а
количество столбцов совпадает с количеством столбцов в В. На
этом шаге получается только часть матрицы C'. После выполнения
умножения подматриц, процессы обмениваются столбцами из матрицы
В. Обмен происходит в соответствии с кольцевой топологией, то
есть процесс p передает данные процессу p+1,
при этом последний передает данные первому. Обмен происходит N раз, после чего
матрицы C' на каждом процессе оказываются вычисленными
полностью и могут быть объединены в результирующую матрицу
C.
|