SlideShare a Scribd company logo
1 of 14
Функции передачи сообщений
           MPI
MPI_*Send
int MPI_Send(void * buf, int count, MPI_Datatype
datatype, int dest, int tag, MPI_Comm comm)

[ IN buf] – адрес передаваемых данных
[ IN count] – количество передаваемых данных
[ IN datatype] – тип передаваемых данных
[ IN dest] – ранг процесса-получателя
[ IN tag] – тег передаваемых данных
[ IN comm] – коммуникатор

int MPI_Send – стандартный режим передачи сообщения
int MPI_Bsend – буферизация сообщения перед отправкой
int MPI_Ssend – синхронная отправка сообщения
int MPI_Rsend – отправка «по готовности»
MPI_Recv
int MPI_Recv(void * buf, int count, MPI_Datatype
datatype, int src, int tag, MPI_Comm comm, MPI_Status *
status)

[ OUT buf] – адрес буфера принимаемых данных
[ IN count] – количество принимаемых данных
[ IN datatype] – тип принимаемых данных
[ IN src] – ранг процесса, от которого принимаем
данные или MPI_RANK_ANY
[ IN tag] – тег принимаемых данных или MPI_TAG_ANY
[ IN comm] – коммуникатор
[ OUT status] – описание принятого сообщения
Deadlock

    A                        B

MPI_Send(A)              MPI_Send(B)

MPI_Recv(B)              MPI_Recv(A)



                 ?
Deadlock

     A                         B

MPI_Bsend(A)              MPI_Bsend(B)

MPI_Recv(B)               MPI_Recv(A)



                  OK
Deadlock

     A                         B

MPI_Ssend(A)              MPI_Ssend(B)

MPI_Recv(B)               MPI_Recv(A)



               DEADLOCK
Deadlock

     A                         B

MPI_Rsend(A)              MPI_Rsend(B)

MPI_Recv(B)               MPI_Recv(A)



                 FAIL
MPI_Isend
int MPI_Isend(void * buf, int count, MPI_Datatype
datatype, int dest, int tag, MPI_Comm comm,
MPI_Request * request)

[ IN buf] – адрес передаваемых данных
[ IN count] – количество передаваемых данных
[ IN datatype] – тип передаваемых данных
[ IN dest] – ранг процесса-получателя
[ IN tag] – тег передаваемых данных
[ IN comm] – коммуникатор
[ OUT request] – идентификатор асинхронной
операции
MPI_Irecv
int MPI_Irecv(void * buf, int count, MPI_Datatype datatype,
int src, int tag, MPI_Comm comm, MPI_Request * request)

[ OUT buf] – адрес буфера принимаемых данных
[ IN count] – количество принимаемых данных
[ IN datatype] – тип принимаемых данных
[ IN src] – ранг процесса, от которого принимаем данные
или MPI_RANK_ANY
[ IN tag] – тег принимаемых данных или MPI_TAG_ANY
[ IN comm] – коммуникатор
[ OUT request] – идентификатор асинхронной операции
MPI_Wait
int MPI_Wait(MPI_Request * request,
MPI_Status * status)

[ IN/OUT request] – идентификатор
асинхронной операции
[ OUT status] – статус принятого или
отправленного сообщения

MPI_Send = MPI_Isend + MPI_Wait
MPI_Test
int MPI_Test(MPI_Request * request, int * flag,
MPI_Status * status)

[ IN/OUT request] – идентификатор
асинхронной операции
[ OUT flag] – истина, если асинхронная
операция завершена
[ OUT status] – статус принятого или
отправленного сообщения
Пример использования
    MPI_Isend()




                      flag = 1
  MPI_Test(flag) ?               Next step


           flag = 0


    Some work
MPI_Sendrecv
int MPI_Sendrecv(void * sendbuf, int sendcount, MPI_Datatype sendtype, int
dest, int sendtag, void * recvbuf, int recvcount, MPI_Datatype recvtype, int
source, int recvtag, MPI_Comm comm, MPI_Status * status)

[ IN sendbuf] – адрес буфера отправляемого сообщения
[ IN sendcount] – количество элементов отправляемого сообщения
[ IN sendtype] – тип элементов отправляемого сообщения
[ IN dest] – ранг процесса-получателя сообщения
[ IN sendtag] – тег отправляемого сообщения
[ OUT recvbuf] – адрес буфера принимаемого сообщения
[ IN recvcount] – количество элементов принимаемого сообщения
[ IN recvtype] – тип элементов принимаемого сообщения
[ IN source] – ранг процесса-отправителя принимаемого сообщения
[ IN recvtag] – тег принимаемого сообщения
[ IN comm] – коммуникатор
[ OUT status] – статус принятого сообщения
MPI_Sendrecv_replace
int MPI_Sendrecv(void * buf, int count, MPI_Datatype
datatype, int dest, int sendtag, int source, int recvtag,
MPI_Comm comm, MPI_Status * status)

[ IN/OUT buf] – адрес буфера отправляемого и
принимаемого сообщения
[ IN count] – количество элементов сообщений
[ IN datatype] – тип элементов сообщений
[ IN dest] – ранг процесса-получателя сообщения
[ IN sendtag] – тег отправляемого сообщения
[ IN source] – ранг процесса-отправителя принимаемого
сообщения
[ IN recvtag] – тег принимаемого сообщения
[ IN comm] – коммуникатор
[ OUT status] – статус принятого сообщения

More Related Content

What's hot

библиотеки программирования
библиотеки программированиябиблиотеки программирования
библиотеки программирования
mcroitor
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Mikhail Kurnosov
 
Common Lisp как второй язык
Common Lisp как второй языкCommon Lisp как второй язык
Common Lisp как второй язык
Valeriy Zamarayev
 

What's hot (19)

Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
 
библиотеки программирования
библиотеки программированиябиблиотеки программирования
библиотеки программирования
 
Optimization of Automata-Based Programs by means of Requirements Transformati...
Optimization of Automata-Based Programs by means of Requirements Transformati...Optimization of Automata-Based Programs by means of Requirements Transformati...
Optimization of Automata-Based Programs by means of Requirements Transformati...
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистов
 
язык програмирования
язык програмированияязык програмирования
язык програмирования
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
 
Ускоряем сборку С++ проектов. Практика использования unity-сборок
Ускоряем сборку С++ проектов. Практика использования unity-сборокУскоряем сборку С++ проектов. Практика использования unity-сборок
Ускоряем сборку С++ проектов. Практика использования unity-сборок
 
Python и Cython
Python и CythonPython и Cython
Python и Cython
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
 
C++ теория
C++ теорияC++ теория
C++ теория
 
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ... Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 
Антон Тюрин "Распределённая система near-realtime агрегации больших объёмов д...
Антон Тюрин "Распределённая система near-realtime агрегации больших объёмов д...Антон Тюрин "Распределённая система near-realtime агрегации больших объёмов д...
Антон Тюрин "Распределённая система near-realtime агрегации больших объёмов д...
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 
Построение компилятора на базе LLVM — Павел Сычев
 Построение компилятора на базе LLVM — Павел Сычев Построение компилятора на базе LLVM — Павел Сычев
Построение компилятора на базе LLVM — Павел Сычев
 
Common Lisp как второй язык
Common Lisp как второй языкCommon Lisp как второй язык
Common Lisp как второй язык
 

Similar to Функции передачи сообщений MPI

Similar to Функции передачи сообщений MPI (7)

Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)
 
Prezent
PrezentPrezent
Prezent
 
Prezent
PrezentPrezent
Prezent
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
 
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
 
Иван Пузыревский — Введение в асинхронное программирование
Иван Пузыревский — Введение в асинхронное программированиеИван Пузыревский — Введение в асинхронное программирование
Иван Пузыревский — Введение в асинхронное программирование
 

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

  • 2. MPI_*Send int MPI_Send(void * buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) [ IN buf] – адрес передаваемых данных [ IN count] – количество передаваемых данных [ IN datatype] – тип передаваемых данных [ IN dest] – ранг процесса-получателя [ IN tag] – тег передаваемых данных [ IN comm] – коммуникатор int MPI_Send – стандартный режим передачи сообщения int MPI_Bsend – буферизация сообщения перед отправкой int MPI_Ssend – синхронная отправка сообщения int MPI_Rsend – отправка «по готовности»
  • 3. MPI_Recv int MPI_Recv(void * buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Status * status) [ OUT buf] – адрес буфера принимаемых данных [ IN count] – количество принимаемых данных [ IN datatype] – тип принимаемых данных [ IN src] – ранг процесса, от которого принимаем данные или MPI_RANK_ANY [ IN tag] – тег принимаемых данных или MPI_TAG_ANY [ IN comm] – коммуникатор [ OUT status] – описание принятого сообщения
  • 4. Deadlock A B MPI_Send(A) MPI_Send(B) MPI_Recv(B) MPI_Recv(A) ?
  • 5. Deadlock A B MPI_Bsend(A) MPI_Bsend(B) MPI_Recv(B) MPI_Recv(A) OK
  • 6. Deadlock A B MPI_Ssend(A) MPI_Ssend(B) MPI_Recv(B) MPI_Recv(A) DEADLOCK
  • 7. Deadlock A B MPI_Rsend(A) MPI_Rsend(B) MPI_Recv(B) MPI_Recv(A) FAIL
  • 8. MPI_Isend int MPI_Isend(void * buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request * request) [ IN buf] – адрес передаваемых данных [ IN count] – количество передаваемых данных [ IN datatype] – тип передаваемых данных [ IN dest] – ранг процесса-получателя [ IN tag] – тег передаваемых данных [ IN comm] – коммуникатор [ OUT request] – идентификатор асинхронной операции
  • 9. MPI_Irecv int MPI_Irecv(void * buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Request * request) [ OUT buf] – адрес буфера принимаемых данных [ IN count] – количество принимаемых данных [ IN datatype] – тип принимаемых данных [ IN src] – ранг процесса, от которого принимаем данные или MPI_RANK_ANY [ IN tag] – тег принимаемых данных или MPI_TAG_ANY [ IN comm] – коммуникатор [ OUT request] – идентификатор асинхронной операции
  • 10. MPI_Wait int MPI_Wait(MPI_Request * request, MPI_Status * status) [ IN/OUT request] – идентификатор асинхронной операции [ OUT status] – статус принятого или отправленного сообщения MPI_Send = MPI_Isend + MPI_Wait
  • 11. MPI_Test int MPI_Test(MPI_Request * request, int * flag, MPI_Status * status) [ IN/OUT request] – идентификатор асинхронной операции [ OUT flag] – истина, если асинхронная операция завершена [ OUT status] – статус принятого или отправленного сообщения
  • 12. Пример использования MPI_Isend() flag = 1 MPI_Test(flag) ? Next step flag = 0 Some work
  • 13. MPI_Sendrecv int MPI_Sendrecv(void * sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void * recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm comm, MPI_Status * status) [ IN sendbuf] – адрес буфера отправляемого сообщения [ IN sendcount] – количество элементов отправляемого сообщения [ IN sendtype] – тип элементов отправляемого сообщения [ IN dest] – ранг процесса-получателя сообщения [ IN sendtag] – тег отправляемого сообщения [ OUT recvbuf] – адрес буфера принимаемого сообщения [ IN recvcount] – количество элементов принимаемого сообщения [ IN recvtype] – тип элементов принимаемого сообщения [ IN source] – ранг процесса-отправителя принимаемого сообщения [ IN recvtag] – тег принимаемого сообщения [ IN comm] – коммуникатор [ OUT status] – статус принятого сообщения
  • 14. MPI_Sendrecv_replace int MPI_Sendrecv(void * buf, int count, MPI_Datatype datatype, int dest, int sendtag, int source, int recvtag, MPI_Comm comm, MPI_Status * status) [ IN/OUT buf] – адрес буфера отправляемого и принимаемого сообщения [ IN count] – количество элементов сообщений [ IN datatype] – тип элементов сообщений [ IN dest] – ранг процесса-получателя сообщения [ IN sendtag] – тег отправляемого сообщения [ IN source] – ранг процесса-отправителя принимаемого сообщения [ IN recvtag] – тег принимаемого сообщения [ IN comm] – коммуникатор [ OUT status] – статус принятого сообщения