172
Р А З Д Е Л 3. ПРОГРАММИРОВАНИЕ ПРИЛОЖЕНИЙ
Глава 7. МАТРИЧНЫЕ ЗАДАЧИ
Задача умножения матриц является базовой операцией для многих
приложений. В этой главе рассматриваются различные методы парал-
лельного решения этой задачи [4].
7.1. САМОПЛАНИРУЮЩИЙ АЛГОРИТМ УМНОЖЕНИЯ МАТРИЦ
Рассмотрим задачу вычисления произведения матрицы на вектор,
которая естественным образом обобщается на задачу умножения мат-
риц. Для решения задачи используем самопланирующий алгоритм, в
котором один процесс (главный) является ответственным за коорди-
нацию работы других процессов (подчиненных). Cоответствующая
программа представлена ниже.
Для наглядности единая программа матрично-векторного
умножения разбита на три части: общую часть, код главного процесса
и код подчиненного процесса.
В общей части программы описываются основные объекты задачи:
матрица А, вектор b, результирующий вектор с, определяется число
процессов (не меньше двух). Задача разбивается на две части: главный
процесс (master) и подчиненные процессы.
В задаче умножения матрицы на вектор единица работы, которую
нужно раздать процессам, состоит из скалярного произведения стро-
ки матрицы A на вектор b.
program main
use mpi
integer MAX_ROWS, MAX_COLS, rows, cols
parameter (MAX_ROWS = 1000, MAX_COLS = 1000)
! матрица А, вектор b, результирующий вектор с
double precision a(MAX_ROWS,MAX_COLS), b(MAX_COLS), c(MAX_ROWS)
double precision buffer (MAX_COLS), ans
integer myid, master, numprocs, ierr, status (MPI_STATUS_SIZE)
integer i, j, numsent, sender, anstype, row
call MPI_INIT( ierr )
call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr )
call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr )
! главный процесс – master
master = 0
! количество строк и столбцов матрицы А
rows = 10
cols = 100