ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
106
в памяти компьютера). Каждый процесс выполняет вычисление в своей области (у
каждого своя часть (
n
/nprocs - строк, где
n
– количества разбиений по каждой из пе-
ременных
x, y
; nprocs – общее число процессов) общей матрицы значений функции).
Для этого процессу необходима две строки: одна предыдущего, а другая последую-
щего процесса, которые он и получает посредствам вызова функции MPI_Sendrecv.
Таблица идентификаторов:
A,B - матрицы для вычисления значений функции в каждом процессе;
sendlast - последняя строка вычислений процесса, отправляемая следующему
процессу;
sendfirst - первая строка вычислений процесса, отправляемая предыдущему
процессу;
recvlast - последняя строка вычислений процесса, принимаемая от следующего
процесса;
recvfirst - первая строка вычислений процесса, принимаемая от предыдущего
процесса;
left, right - предыдущий и следующий процессы;
n - количество точек области в каждом направлении;
m - число строк, обрабатываемое каждым процессом;
itmax - максимальное число итераций, если сходимость не будет достигнута;
npmin - минимальное число процессоров для решения задачи;
i,j,k - переменные циклов;
mode_w - режим доступа к файлу;
stream - поток;
result - строка – результат вычисления неизвестной функции;
iam - номер процесса;
nprocs - число процессов;
eps - точность вычислений;
diffnorm, gdiffnorm - переменные, для определения достижения необходимой
точности вычисления;
tag - тег сообщения.
Реализация “С”
#include "stdio.h"
#include <math.h>
#include "mpi.h"
int main(int argc, char* argv[])
{
1...,98,99,100,101,102,103,104,105,106,107 109,110,111,112,113,114,115,116,117,118,...180