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

UptoLike

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

- 34 -
Асинхронным аналогом процедуры
MPI_Send
является
MPI_Isend
(для
MPI_Recv,
естественно,
MPI_Irecv
). Аналогично трем модификациям процеду-
ры
MPI_Send
предусмотрены три дополнительных варианта процедуры
MPI_Isend
:
MPI_Ibsend
- неблокирующая передача сообщения с буферизацией
MPI_Issend
- неблокирующая передача сообщения с синхронизацией
MPI_Irsend
- неблокирующая передача сообщения по готовности
Необходимое оборудованиевычислительный кластер под управлением
UNIX-совместимой ОС, предустановленная поддержка MPI, рабочая консоль
программиста для управления прохождением пользовательских задач.
Порядок проведения работыстудент подготавливает исходные тексты
MPI-программ, компилирует их в исполнимое приложение, запускает на
счет, анализирует выходные данные программы.
Часть 1 работы.
Первой задачей является компиляция простейшей MPI-
программы
EXAMP_01.C
, запуск ее на исполнение на заданном преподавате-
лем числе ВУ и анализ результатов.
// source code of EXAMP_01.C program
#include "mpi.h"
#include <stdio.h>
#include <sys/timeb.h> // for ftime function
int main(int argc, char **argv)
{
int CURR_PROC, ALL_PROC, NAME_LEN;
char PROC_NAME[MPI_MAX_PROCESSOR_NAME];
struct timeb t; // time contain structure
MPI_Init (&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &CURR_PROC); /* current process */
MPI_Comm_size (MPI_COMM_WORLD, &ALL_PROC); /* all process */
// get processor name (really computer name)
MPI_Get_processor_name(PROC_NAME, &NAME_LEN);
ftime(&t); // get current time point
// t.time is time in sec since January 1,1970
// t.millitm is part of time in msec
// ATTENSION ! ftime may by used only after synchronization all processors time
// output to STDIN
printf("I am process %d from %d and my name is %s (time: %.3f sec)\r\n",
CURR_PROC, ALL_PROC, PROC_NAME, (t.time+1e-3*t.millitm));
                                           - 34 -

  Асинхронным аналогом процедуры MPI_Send является MPI_Isend (для
MPI_Recv, естественно, MPI_Irecv). Аналогично трем модификациям процеду-
ры MPI_Send предусмотрены три дополнительных варианта процедуры
MPI_Isend:

  • MPI_Ibsend - неблокирующая передача сообщения с буферизацией
  • MPI_Issend - неблокирующая передача сообщения с синхронизацией
  • MPI_Irsend - неблокирующая передача сообщения по готовности

  Необходимое оборудование – вычислительный кластер под управлением
UNIX-совместимой ОС, предустановленная поддержка MPI, рабочая консоль
программиста для управления прохождением пользовательских задач.

  Порядок проведения работы – студент подготавливает исходные тексты
MPI-программ, компилирует их в исполнимое приложение, запускает на
счет, анализирует выходные данные программы.

  Часть 1 работы. Первой задачей является компиляция простейшей MPI-
программы EXAMP_01.C, запуск ее на исполнение на заданном преподавате-
лем числе ВУ и анализ результатов.

// source code of EXAMP_01.C program
#include "mpi.h"
#include 
#include  // for ftime function

int main(int argc, char **argv)
{
 int CURR_PROC, ALL_PROC, NAME_LEN;
 char PROC_NAME[MPI_MAX_PROCESSOR_NAME];
 struct timeb t; // time contain structure

MPI_Init (&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &CURR_PROC); /* current process */
MPI_Comm_size (MPI_COMM_WORLD, &ALL_PROC); /* all process */

// get processor name (really computer name)
 MPI_Get_processor_name(PROC_NAME, &NAME_LEN);

 ftime(&t); // get current time point
// t.time is time in sec since January 1,1970
// t.millitm is part of time in msec
// ATTENSION ! ftime may by used only after synchronization all processors time

// output to STDIN
 printf("I am process %d from %d and my name is %s (time: %.3f sec)\r\n",
        CURR_PROC, ALL_PROC, PROC_NAME, (t.time+1e-3*t.millitm));