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

UptoLike

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

- 35 -
MPI_Finalize();
}
// end of EXAMPLE_01 program
Наиболее интересен анализ последовательности строк выдачи каждой вет-
ви программы:
I am process 0 from 5 and my name is Comp_07 (time: 1110617937.329 sec)
I am process 2 from 5 and my name is Comp_06 (time: 1110617937.329 sec)
I am process 4 from 5 and my name is Comp_11 (time: 1110617939.003 sec)
I am process 1 from 5 and my name is Comp_02 (time: 1110617939.003 sec)
I am process 3 from 5 and my name is Comp_01 (time: 1110617938.997 sec)
Для определения момента времени с точностью 10
-3
сек использована
стандартная C-функция
ftime
(выдает локальное время для каждого процесc-
ора). Функция
MPI_Wtime
возвращает для каждого вызвавшего процесса ло-
кальное астрономическое время в секундах (
double
), прошедшее с некоторого
момента (обычно 01.I.1970) в прошлом; гарантируется, что момент времени,
используемый в качестве точки отсчета, не будет изменен за время сущест-
вования процесса. Функция
MPI_Wtick
возвращает
double
-значение, опреде-
ляющее разрешение таймера (промежуток времени междутиками’) процес-
сора. Без (принудительной) синхронизации часов всех процессоров функции
ftime
и
MPI_Wtime
следует использовать лишь для определения относительных
промежутков (но не для абсолютных моментов) времени. В случае
MPI_WTIME_IS_GLOBAL=1
время процессоров синхронизировано, при =0 –
нет.
Необходимо повторить запуск исполняемого модуля программы несколько
раз с указанием различного числа процессоров; желательно предварительно
попытаться ответить на вопрос о возможной последовательности выдачи
данных (удивительно, но даже при всей вышеприведенной информации о пра-
вилах выполнения параллельных приложений правильный ответ нечаст!).
Часть 2 работы.
Задачей является формальное освоение использования
простейших функций передачи и приема данных (
MPI_Send
и
MPI_Recv
). Эти
функции осуществляют простейшую связь типаточка-точкамежду процес-
сами (одна ветвь вызывает функцию
MPI_Send
для передачи, другая
MPI_Recv
для приема данных) с блокировкой. Обе эти функции (как и другие)
возвращают код ошибки как целое (здесь не используется, успешному окон-
чанию соответствует
MPI_SUCCESS, подробнее см. файл
mpi.h
).
В следующем примере (файл
EXAMP_02.C
) нулевой процесс посылает
(идентифицированную тегом 999) текстовую строку процессу 1 (обменточ-
ка-точка’), там же строка и печатается:
// source code of EXAMP_02.C program
#include "mpi.h"
#include <stdio.h>
                                       - 35 -

MPI_Finalize();

} // end of EXAMPLE_01 program


  Наиболее интересен анализ последовательности строк выдачи каждой вет-
ви программы:

  I am process 0 from 5 and my name is Comp_07 (time: 1110617937.329 sec)
  I am process 2 from 5 and my name is Comp_06 (time: 1110617937.329 sec)
  I am process 4 from 5 and my name is Comp_11 (time: 1110617939.003 sec)
  I am process 1 from 5 and my name is Comp_02 (time: 1110617939.003 sec)
  I am process 3 from 5 and my name is Comp_01 (time: 1110617938.997 sec)

                                                         -3
   Для определения момента времени с точностью 10 сек использована
стандартная C-функция ftime (выдает локальное время для каждого процесc-
ора). Функция MPI_Wtime возвращает для каждого вызвавшего процесса ло-
кальное астрономическое время в секундах (double), прошедшее с некоторого
момента (обычно 01.I.1970) в прошлом; гарантируется, что момент времени,
используемый в качестве точки отсчета, не будет изменен за время сущест-
вования процесса. Функция MPI_Wtick возвращает double-значение, опреде-
ляющее разрешение таймера (промежуток времени между ‘тиками’) процес-
сора. Без (принудительной) синхронизации часов всех процессоров функции
ftime и MPI_Wtime следует использовать лишь для определения относительных
промежутков (но не для абсолютных моментов) времени. В случае
MPI_WTIME_IS_GLOBAL=1 время процессоров синхронизировано, при =0 –
нет.
   Необходимо повторить запуск исполняемого модуля программы несколько
раз с указанием различного числа процессоров; желательно предварительно
попытаться ответить на вопрос о возможной последовательности выдачи
данных (удивительно, но даже при всей вышеприведенной информации о пра-
вилах выполнения параллельных приложений правильный ответ нечаст!).

  Часть 2 работы. Задачей является формальное освоение использования
простейших функций передачи и приема данных (MPI_Send и MPI_Recv). Эти
функции осуществляют простейшую связь типа ‘точка-точка’ между процес-
сами (одна ветвь вызывает функцию MPI_Send для передачи, другая –
MPI_Recv для приема данных) с блокировкой. Обе эти функции (как и другие)
возвращают код ошибки как целое (здесь не используется, успешному окон-
чанию соответствует MPI_SUCCESS, подробнее см. файл mpi.h).
  В следующем примере (файл EXAMP_02.C) нулевой процесс посылает
(идентифицированную тегом 999) текстовую строку процессу 1 (обмен ‘точ-
ка-точка’), там же строка и печатается:

// source code of EXAMP_02.C program
#include "mpi.h"
#include