Параллельное программирование в стандарте MPI. Баканов В.М - 42 стр.

UptoLike

Составители: 

- 42 -
for (i=1;i<=n;i++)
{
MPI_Send(message, len, MPI_CHAR, nprocs-1, 99, MPI_COMM_WORLD);
MPI_Recv(message, len, MPI_CHAR, nprocs-1, 99, MPI_COMM_WORLD,
&status);
}
time_finish=MPI_Wtime();
printf( "Time %f rate %f speed %f\n", (float)(time_finish-time_start),
(float)(2*n/(time_finish-time_start)),
(float)(2*n*len/(time_finish-time_start)) );
} /* end if (myid==0) */
else
if (myid == (nprocs-1)) /* I am is last of all processes ! */
{
MPI_Recv(&n,4, MPI_CHAR, 0, 99, MPI_COMM_WORLD,&status);
for (i=1;i<=n;i++)
{
MPI_Recv(message, len, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status);
MPI_Send(message, len, MPI_CHAR, 0, 99, MPI_COMM_WORLD);
}
} /* end if (myid==(nproc-1)) */
fflush( stdout );
MPI_Finalize(); /* deinitialize MPI */
} // end of PROG_MPI program
Для запуска на исполнение применяется команда (запуск на 5 вычисли-
тельных узлах при максимальном времени выполнения 15 мин, последнее
числоразмер сообщений в байтах):
mpirun -np 5 –maxtime 15 prog_mpi 1048576
Образец выдачи (кластер кафедры ИТ-4 МГУПИ, задействованы 2 вычис-
лительных узла):
LAM 7.0.6/MPI 2 C++ - Indiana University
PROGMPI: nprocs=2 myid=0
PROGMPI: nprocs=2 myid=1
length: 1048576
length: 1048576
Time 182.223991 rate 10.975503 speed 11508649.257698
Экспериментальные данные сводятся в табл.3.1, причем принято строить
зависимость пропускной способности сети (столбец
Speed
таблицы,
Мбайт/сек) от длины сообщения (столбец
Len
, kбайт) в логарифмической (по
основанию 2) шкале абсцисс.
                                            - 42 -

 for (i=1;i<=n;i++)
  {
   MPI_Send(message, len, MPI_CHAR, nprocs-1, 99, MPI_COMM_WORLD);
   MPI_Recv(message, len, MPI_CHAR, nprocs-1, 99, MPI_COMM_WORLD,
                                                           &status);
  }
  time_finish=MPI_Wtime();
  printf( "Time %f rate %f speed %f\n", (float)(time_finish-time_start),
                                         (float)(2*n/(time_finish-time_start)),
                                         (float)(2*n*len/(time_finish-time_start)) );
 } /* end if (myid==0) */

 else
 if (myid == (nprocs-1)) /* I am is last of all processes ! */
 {
  MPI_Recv(&n,4, MPI_CHAR, 0, 99, MPI_COMM_WORLD,&status);
  for (i=1;i<=n;i++)
   {
    MPI_Recv(message, len, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status);
    MPI_Send(message, len, MPI_CHAR, 0, 99, MPI_COMM_WORLD);
   }
 } /* end if (myid==(nproc-1)) */

 fflush( stdout );
 MPI_Finalize(); /* deinitialize MPI */
} // end of PROG_MPI program

  Для запуска на исполнение применяется команда (запуск на 5 вычисли-
тельных узлах при максимальном времени выполнения 15 мин, последнее
число – размер сообщений в байтах):

  mpirun -np 5 –maxtime 15 prog_mpi 1048576

  Образец выдачи (кластер кафедры ИТ-4 МГУПИ, задействованы 2 вычис-
лительных узла):

  LAM 7.0.6/MPI 2 C++ - Indiana University

  PROGMPI: nprocs=2 myid=0
  PROGMPI: nprocs=2 myid=1
  length: 1048576
  length: 1048576
  Time 182.223991 rate 10.975503 speed 11508649.257698

  Экспериментальные данные сводятся в табл.3.1, причем принято строить
зависимость пропускной способности сети (столбец Speed таблицы,
Мбайт/сек) от длины сообщения (столбец Len, kбайт) в логарифмической (по
основанию 2) шкале абсцисс.