ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
165
if(!myrank)
{//Это процесс-мастер
//Определяем размер диапазона для каждого процесса:
d_ba=(b-a)/ranksize;
//Оставляем первый диапазон для мастера:
cur_a=a+d_ba;
cur_h=h;
//Рассылаем исходные данные подчиненным процессам:
for(i=1;i<ranksize;i++)
{
cur_b=cur_a+d_ba-h;
MPI_Send(&cur_a, 1, MPI_DOUBLE, i, 98,
MPI_COMM_WORLD);
MPI_Send(&cur_b, 1, MPI_DOUBLE, i, 99,
MPI_COMM_WORLD);
MPI_Send(&cur_h, 1, MPI_DOUBLE, i, 100,
MPI_COMM_WORLD);
cur_a+=d_ba;
}
cur_a=a;cur_b=a+d_ba-h;
}
else
{//Это один из подчиненных процессов
//Получаем исходные данные:
MPI_Recv(&cur_a, 1, MPI_DOUBLE, 0, 98,
MPI_COMM_WORLD,&status);
MPI_Recv(&cur_b, 1, MPI_DOUBLE, 0, 99,
MPI_COMM_WORLD,&status);
MPI_Recv(&cur_h, 1, MPI_DOUBLE, 0, 100,
MPI_COMM_WORLD,&status);
}
//Расчет интеграла в своем диапазоне, выполняют все
//процессы:
double s=0,s1;
printf("Process %d. A=%.4f B=%.4f h=%.10f\n",
myrank,cur_a,cur_b,cur_h);
for(cur_a+=cur_h;cur_a<=cur_b;cur_a+=cur_h)
s+=cur_h*fnc(cur_a);
1...,157,158,159,160,161,162,163,164,165,166 168,169,170,171,172,173,174,175,176,177,...180