Итак, за основу параллельных вычислений для матричного
умножения при блочном разделении данных принят подход, при котором
базовые подзадачи отвечают за вычисления отдельных блоков матрицы
C и при этом в подзадачах на каждой
итерации расчетов располагается только по одному блоку исходных
матриц A и B. Для нумерации подзадач будем использовать
индексы размещаемых в подзадачах блоков матрицы C, т.е. подзадача (i,j) отвечает за вычисление блока C
ij – тем самым, набор подзадач
образует квадратную решетку, соответствующую структуре блочного
представления матрицы C.
В соответствии с алгоритмом Фокса в ходе вычислений на
каждой базовой подзадаче (i,j)
располагается четыре матричных блока:
- блок Cij матрицы C, вычисляемый подзадачей;
- блок Aij матрицы A, размещаемый в подзадаче перед началом
вычислений;
- блоки A'ij , B'ij матриц A и B,
получаемые подзадачей в ходе выполнения вычислений.
Выполнение параллельного метода включает:
- этап инициализации, на котором каждой подзадаче (i,j) передаются блоки Aij, Bij и обнуляются блоки Cij на всех подзадачах;
- этап вычислений, в рамках которого на каждой итерации l осуществляются следующие
операции:
- для каждой строки i, 0i
ij подзадачи (i,j) пересылается на все подзадачи той же
строки i решетки; индекс j, определяющий положение подзадачи в
строке, вычисляется в соответствии с выражением
j=(i+1)modq где mod есть операция
получения остатка от целочисленного деления;
- полученные в результаты пересылок блоки A'ij, B'ij каждой подзадачи (i,j) перемножаются и прибавляются к блоку
Cij
- блоки B'ij каждой
подзадачи (i,j) пересылаются
подзадачам, являющимся соседями сверху в столбцах решетки подзадач
(блоки подзадач из первой строки решетки пересылаются подзадачам
последней строки решетки).
Масштабирование и распределение подзадач по
процессорам
В рассмотренной схеме параллельных вычислений
количество блоков может варьироваться в зависимости от выбора
размера блоков – эти размеры могут быть подобраны таким образом,
чтобы общее количество базовых подзадач совпадало с числом
процессоров p. Такой способ определения количества
блоков приводит к тому, что объем вычислений в каждой подзадаче
является одинаковым и тем самым достигается полная балансировка
вычислительной нагрузки между процессорами. В более общем случае при
произвольных количестве процессоров и размерах матриц балансировка
вычислений может отличаться от абсолютно одинаковой, но, тем не
менее, при надлежащем выборе параметров может быть распределена
между процессорами равномерно в рамках требуемой точности.
Для эффективного выполнения алгоритма Фокса, в котором
базовые подзадачи представлены в виде квадратной решетки и в ходе
вычислений выполняются операции передачи блоков по строкам и
столбцам решетки подзадач, наиболее адекватным решением является
организация множества имеющихся процессоров также в виде квадратной
решетки. В этом случае можно осуществить непосредственное
отображение набора подзадач на множество процессоров – базовую
подзадачу (i,j) следует располагать на
процессоре Pi,j. Необходимая
структура сети передачи данных может быть обеспечена на физическом
уровне, если топология вычислительной системы имеет вид решетки или
полного графа.