Введение в практику разработки параллельных программ в стандарте MPI. Баканов В.М - 29 стр.

UptoLike

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

- 29 -
Наиболее интересен анализ последовательности строк выдачи каждой вет-
ви программы:
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>
int main (int argc, char **argv)
{
char message[20];
  Наиболее интересен анализ последовательности строк выдачи каждой вет-
ви программы:

  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 
int main (int argc, char **argv)
{
 char message[20];
                                       - 29 -