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

11

Улучшенная программа примера http://lusui.ru/64

int main(int argc, char** argv)

{

int rank=-1, total_proc=-1; int n;

double pi, mypi, h, sum, x, t1, t2;

double PI25 = 3.1415926535897932384626433832795; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&total_proc);

//While - создание повторяющегося диалога while (1)

{

if (rank == 0)

{

cout<<“Enter number of intervals(0-exit):"; cin >> n;

//Первая засечка времени на головном процессоре t1 = MPI_Wtime();

}

Лекция 11. И.Г. Захарова, кафедра ПО

12

MPI_Bcast(&n,1, MPI_INT, 0, MPI_COMM_WORLD); if (n == 0)

{break;} else

{

h = 1.0/(double) n; sum = 0.0;

//Каждый процесс вычисляет свою сумму for ( i=rank+1; i<=n; i+=total_proc)

{

x = h*((double)i-0.5); sum+=(4.0/(1.0+x*x));

}

mypi = h*sum; MPI_Reduce(&mypi,&pi,1,MPI_DOUBLE,MPI_SUM,0,

MPI_COMM_WORLD);

Лекция 11. И.Г. Захарова, кафедра ПО

13

if (rank == 0)

{

//Вторая засечка времени на головном процессоре t2 = MPI_Wtime();

cout <<“calc pi is "<<pi<<", error is: “; cout <<fabs(pi-PI25);

cout <<"\n";

cout <<"elapsed time: "<<fabs(t2-t1); cout <<"\n";

}

}//end of else

}//end of while

cout <<"Finalizing MPI on process "<<rank << "\n"; MPI_Finalize();

return 0;

}

Лекция 11. И.Г. Захарова, кафедра ПО

14

MPI. Операции передачи сообщений

Операции, поддерживаемые MPI функциями:

Парные (point-to-point) – для взаимодействия между двумя процессами.

Коллективные (collective) – для одновременного взаимодействия нескольких процессов.

Лекция 11. И.Г. Захарова, кафедра ПО

15

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

int MPI_Send(void *buf, int count, MPI_Datatype type, int dest, int tag, MPI_Comm comm)

buf – буфер с отправляемым сообщением, count – количество элементов в сообщении, type – тип элементов сообщения,

dest – ранг процесса, которому отправляется сообщение,

tag – значение (тэг), используемое для идентификации сообщения и фильтрации сообщений при приеме,

comm - коммуникатор, в рамках которого выполняется операция

Лекция 11. И.Г. Захарова, кафедра ПО

16

Режим отправки – стандартный

(standard)

Вызов функции обеспечивает режим standard:

На время выполнения функции процесс- отправитель сообщения блокируется.

После завершения выполнения функции буфер может использоваться повторно.

Состояние отправленного сообщения может быть различным – сообщение может:

располагаться на процессе-отправителе,

находиться в состоянии передачи,

храниться на процессе-получателе,

быть принято процессом-получателем при помощи

функции MPI_Recv.

Лекция 11. И.Г. Захарова, кафедра ПО

17

Дополнительные режимы передачи сообщений

Синхронный режим (Synchronous)–завершение функции отправки сообщения происходит только при получении от процесса-получателя подтверждения о начале приема отправленного сообщения.

Функция отправки сообщения в синхронном режиме -

MPI_Ssend

Режим передачи по готовности (Ready) –может быть использован только, если операция приема сообщения уже инициирована. Буфер сообщения после завершения функции отправки сообщения может быть повторно использован.

Функция отправки сообщения в режиме по готовности -

MPI_Rsend

Лекция 11. И.Г. Захарова, кафедра ПО

18

Дополнительные режимы передачи сообщений

Буферизованный режим (Buffered) – для копирования отправляемых сообщений используются дополнительные системные буферы.

Функция отправки сообщения завершается сразу же после копирования сообщения в буфер.

Функция отправки сообщения в буферизованном режиме - MPI_Bsend

Лекция 11. И.Г. Захарова, кафедра ПО

– размер буфера.

19

MPI буфер памяти

Для использования буферизованного режима должен быть создан и передан MPI буфер

памяти:

int MPI_Buffer_attach(void *buf, int size),

где

buf – буфер памяти для буферизации сообщений,

size

После завершения работы с буфером он должен быть отключен от MPI при помощи функции:

int MPI_Buffer_detach(void *buf, int *size)

size – возвращаемый размер буфера

Лекция 11. И.Г. Захарова, кафедра ПО

20

Практическое использование режимов передачи

Режим передачи по готовности формально

наиболее быстрый, но сложно гарантировать готовность операции приема используется редко.

Стандартный и буферизованный режимы -

быстрые,

но могут приводить к большим расходам памяти

рекомендуются для передачи коротких сообщений,

Синхронный режим – наиболее медленный, т.к.

требует подтверждения приема.

Но этот режим наиболее надежен рекомендуется для передачи длинных сообщений.

Лекция 11. И.Г. Захарова, кафедра ПО

Соседние файлы в папке Параллельное программирование (лекции)