ВУЗ:
Составители:
Рубрика:
- 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
Страницы
- « первая
- ‹ предыдущая
- …
- 33
- 34
- 35
- 36
- 37
- …
- следующая ›
- последняя »