
Пример:
Ниже приведена схема алгоритма Фокса для q = 2 (при этом количество процессов равно 4).
Таблица 2
Номер итерации m |
Номер процесса |
Процесс |
(Исходный блок Аij) ij |
(1) Пересылка одного из блоков A во все процессы строки |
(Блок Вij) ij |
(2) Вычисление очередного слагаемого блока |
(3) Пересылка блока B
|
0 |
1 |
(0,0) |
00 |
Получен А00 |
00 |
A00*B00 |
B послан в (1,0) |
2 |
(0,1) |
01 |
Получен А00 |
01 |
A00*B01 |
B послан в (1,1) |
|
3 |
(1,0) |
10 |
Получен А11 |
10 |
A11*B10 |
B послан в (0,0) |
|
4 |
(1,1) |
11 |
Получен А11 |
11 |
A11*B11 |
B послан в (0,1) |
|
1 |
1 |
(0,0) |
00 |
Получен А01 |
10 |
+ A01*B10 |
|
2 |
(0,1) |
01 |
Получен А01 |
11 |
+ A01*B11 |
|
|
3 |
(1,0) |
10 |
Получен А10 |
00 |
+ A10*B00 |
|
|
4 |
(1,1) |
11 |
Получен А10 |
01 |
+ A10*B01 |
|
Выполним расчёт в соответствии со схемой:
Первая итерация, результаты умножения элементов:
Первый процессор |
Второй процессор |
Третий процессор |
Четвёртый процессор |
|
|
|
|
Вторая итерация, результаты умножения элементов:
Первый процессор |
Второй процессор |
Третий процессор |
Четвёртый процессор |
|
|
|
|
После сложения результат, как и ожидалось:
84 96 55 111
114 66 134 96
100 110 66 68
61 35 67 68
Масштабирование и распределение подзадач по процессорам
В рассмотренной схеме параллельных вычислений количество блоков может варьироваться в зависимости от выбора размера блоков – эти размеры могут быть подобраны таким образом, чтобы общее количество базовых подзадач совпадало с числом процессоров p. Так, например, в наиболее простом случае, когда число процессоров представимо в виде p = b2 (т.е. является полным квадратом), можно выбрать количество блоков в матрицах по вертикали и горизонтали равным b (т.е. q = b ). Такой способ определения количества блоков приводит к тому, что объем вычислений в каждой подзадаче является одинаковым и тем самым достигается полная балансировка вычислительной нагрузки между процессорами. В более общем случае при произвольных количестве процессоров и размерах матриц балансировка вычислений может отличаться от абсолютно одинаковой, но, тем не менее, при надлежащем выборе параметров может быть распределена между процессорами равномерно в рамках требуемой точности.
Для эффективного выполнения алгоритма Фокса, в котором базовые подзадачи представлены в виде квадратной решетки и в ходе вычислений выполняются операции передачи блоков по строкам и столбцам решетки подзадач, наиболее адекватным решением является организация множества имеющихся процессоров также в виде квадратной решетки. В этом случае можно осуществить непосредственное отображение набора подзадач на множество процессоров – базовую подзадачу (i,j) следует располагать на процессоре Pi,j. Необходимая структура сети передачи данных может быть обеспечена на физическом уровне, если топология вычислительной системы имеет вид решетки или полного графа.