Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ALL_otvety_na_ekzamen_PRO.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
473.05 Кб
Скачать

12. Что следует понимать под параллельной программой?

Под параллельной программой следует понимать программу, которая решает некоторую задачу, и имеет участки кода, которые выполняются параллельно.

13. Какой минимальный набор функций mpi позволяет начать разработку параллельных программ?

БАЗОВЫЕ ФУНКЦИИ MPI

Любая прикладная MPI-программа (приложение) должна начинаться с вызова функции инициализации MPI: функции MPI_Init. В результате выполнения этой функции создается группа процессов, в которую помещаются все процессы приложения, и создается область связи, описываемая предопределенным коммуникатором MPI_COMM_WORLD.

Синтаксис функции инициализации MPI_Init:

int MPI_Init(int *argc, char ***argv)

В программах на C каждому процессу при инициализации передаются аргументы функции main, полученные из командной строки. В программах на языке FORTRAN параметр IERROR является выходным и возвращает код ошибки.

Функция завершения MPI программ MPI_Finalize

int MPI_Finalize(void)

Функция закрывает все MPI-процессы и ликвидирует все области связи.

Функция определения числа процессов в области связи MPI_Comm_size

int MPI_Comm_size(MPI_Comm comm, int *size)

comm - коммуникатор;

size - число процессов в области связи коммуникатора comm.

Функция возвращает количество процессов в области связи коммуникатора comm.

Функция определения номера процесса MPI_Comm_rank

int MPI_Comm_rank(MPI_Comm comm, int *rank)

В минимальный набор следует включить также две функции передачи и приема сообщений.

Функция передачи сообщения MPI_Send

int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest,

int tag, MPI_Comm comm)

buf - адрес начала расположения пересылаемых данных;

IN count - число пересылаемых элементов;

IN datatype - тип посылаемых элементов;

IN dest - номер процесса-получателя в группе, связанной с коммуникатором comm;

IN tag - идентификатор сообщения (аналог типа сообщения функций nread и nwrite PSE nCUBE2);

IN comm - коммуникатор области связи.

Функция выполняет посылку count элементов типа datatype сообщения с идентификатором tag процессу dest в области связи коммуникатора comm. Переменная buf - это, как правило, массив или скалярная переменная. В последнем случае значение count = 1.

Функция приема сообщения MPI_Recv

int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source,

int tag, MPI_Comm comm, MPI_Status *status)

buf - адрес начала расположения принимаемого сообщения;

IN count - максимальное число принимаемых элементов;

IN datatype - тип элементов принимаемого сообщения;

IN source - номер процесса-отправителя;

IN tag - идентификатор сообщения;

IN comm - коммуникатор области связи;

OUT status - атрибуты принятого сообщения.

Функция выполняет прием count элементов типа datatype сообщения с идентификатором tag от процесса source в области связи коммуникатора comm.

Функция отсчета времени (таймер) MPI_Wtime

double MPI_Wtime(void)

Функция возвращает астрономическое время в секундах, прошедшее с некоторого момента в прошлом (точки отсчета). Гарантируется, что эта точка отсчета не будет изменена в течение жизни процесса. Для хронометража участка программы вызов функции делается в начале и конце участка и определяется разница между показаниями таймера.

{

double starttime, endtime;

starttime = MPI_Wtime();

... хронометрируемый участок ...

endtime = MPI_Wtime();

printf("Выполнение заняло %f секунд\n", endtime-starttime);

}

Функция MPI_Wtick, имеющая точно такой же синтаксис, возвращает разрешение таймера (минимальное значение кванта времени).

14. Как описываются сообщения, которые передаются?

Сообщение содержит :

  1. идентификатор процесса-отправителя сообщения

  2. адрес;

  3. тип;

  4. количество данных ;

  5. идентификатор процесса;

  6. адрес.

Часть служебной информации составляет "конверт" сообщения:

  1. ранг источника;

  2. ранг адресата;

  3. тег сообщения;

  4. идентификатор коммуникатора, описывающего область взаимодействия, внутри которой происходит обмен.

15. Как можно организовать прием сообщений от конкретных процессов?

В каждой функции MPR_Recv есть параметр, который указывает номер процесса, от которого необходимо получить сообщение. Для того чтобы получить сообщение от любого процесса, используется константа MPI_ANY_SOURCE

16. Как определить время выполнения MPI – программы?

Функция отсчета времени (таймер) MPI_Wtime

double MPI_Wtime(void)

Функция возвращает астрономическое время в секундах, прошедшее с некоторого момента в прошлом (точки отсчета). Гарантируется, что эта точка отсчета не будет изменена в течение жизни процесса. Для хронометража участка программы вызов функции делается в начале и конце участка и определяется разница между показаниями таймера.

{

double starttime, endtime;

starttime = MPI_Wtime();

... хронометрируемый участок ...

endtime = MPI_Wtime();

printf("Выполнение заняло %f секунд\n", endtime-starttime);

}

Функция MPI_Wtick, имеющая точно такой же синтаксис, возвращает разрешение таймера (минимальное значение кванта времени).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]