Введение в параллельные вычисления. Технология программирования MPI (день четвертый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.

Slides:



Advertisements
Similar presentations
1 Non-Blocking Communications. 2 #include int main(int argc, char **argv) { int my_rank, ncpus; int left_neighbor, right_neighbor; int data_received=-1;
Advertisements

Asynchronous I/O with MPI Anthony Danalis. Basic Non-Blocking API  MPI_Isend()  MPI_Irecv()  MPI_Wait()  MPI_Waitall()  MPI_Waitany()  MPI_Test()
Parallel Processing1 Parallel Processing (CS 667) Lecture 9: Advanced Point to Point Communication Jeremy R. Johnson *Parts of this lecture was derived.
1 Implementing Master/Slave Algorithms l Many algorithms have one or more master processes that send tasks and receive results from slave processes l Because.
1 Buffers l When you send data, where does it go? One possibility is: Process 0Process 1 User data Local buffer the network User data Local buffer.
MPI Fundamentals—A Quick Overview Shantanu Dutt ECE Dept., UIC.
Введение в параллельные вычисления. Технология программирования MPI (день шестой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
1 Friday, October 13, 2006 The biggest difference between time and space is that you can't reuse time. -M. Furst.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 8 Методы разработки параллельных программ при использования интерфейса передачи.
Введение в параллельные вычисления. Технология программирования MPI (день седьмой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Введение в параллельные вычисления. Технология программирования MPI (день третий) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
CS 240A: Models of parallel programming: Distributed memory and MPI.
 Нужно много различных протоколов связи  Каждый из них может реализовываться на разных платформах Современные сети Много устройств, компьютеров и сетей.
PHP как язык программирования. Типы данных логические величины int, integer – целые числа real, double, float – вещественные числа string – строки array.
Введение в параллельные вычисления. Технология программирования MPI (день второй) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 16 Методы разработки параллельных программ для многопроцессорных систем с общей.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 4 Методы разработки параллельных программ при использования интерфейса передачи.
Distributed Memory Programming with MPI. What is MPI? Message Passing Interface (MPI) is an industry standard message passing system designed to be both.
MPI Collective Communication CS 524 – High-Performance Computing.
Please visit our web site: Point-to-Point Communication.
MPI Majdi Baddourah. Domain Decomposition Communication 160 Cells80 Cells.
MPI Point-to-Point Communication CS 524 – High-Performance Computing.
Using MPI - the Fundamentals University of North Carolina - Chapel Hill ITS - Research Computing Instructor: Mark Reed
Введение в параллельные вычисления. Технология программирования MPI (день пятый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
ВВЕДЕНИЕ В ВЫЧИСЛИТЕЛЬНУЮ МАТЕМАТИКУ Лекция 5 6 октября 2009 ВЫЧИСЛИТЕЛЬНАЯ ЛИНЕЙНАЯ АЛГЕБРА.
2a.1 Message-Passing Computing More MPI routines: Collective routines Synchronous routines Non-blocking routines ITCS 4/5145 Parallel Computing, UNC-Charlotte,
1 MPI: Message-Passing Interface Chapter 2. 2 MPI - (Message Passing Interface) Message passing library standard (MPI) is developed by group of academics.
MA471Fall 2003 Lecture5. More Point To Point Communications in MPI Note: so far we have covered –MPI_Init, MPI_Finalize –MPI_Comm_size, MPI_Comm_rank.
Specialized Sending and Receiving David Monismith CS599 Based upon notes from Chapter 3 of the MPI 3.0 Standard
1 Review –6 Basic MPI Calls –Data Types –Wildcards –Using Status Probing Asynchronous Communication Collective Communications Advanced Topics –"V" operations.
CS 484. Message Passing Based on multi-processor Set of independent processors Connected via some communication net All communication between processes.
Parallel Programming with MPI Prof. Sivarama Dandamudi School of Computer Science Carleton University.
Jonathan Carroll-Nellenback CIRC Summer School MESSAGE PASSING INTERFACE (MPI)
1 MPI Primer Lesson 10 2 What is MPI MPI is the standard for multi- computer and cluster message passing introduced by the Message-Passing Interface.
Plan: I. Introduction: Programming Model II. Basic MPI Command III. Examples IV. Collective Communications V. More on Communication modes VI. References.
Message Passing Programming Model AMANO, Hideharu Textbook pp. 140-147.
Performance Oriented MPI Jeffrey M. Squyres Andrew Lumsdaine NERSC/LBNL and U. Notre Dame.
Summary of MPI commands Luis Basurto. Large scale systems Shared Memory systems – Memory is shared among processors Distributed memory systems – Each.
An Introduction to Parallel Programming with MPI March 22, 24, 29, David Adams
Distributed-Memory (Message-Passing) Paradigm FDI 2004 Track M Day 2 – Morning Session #1 C. J. Ribbens.
MA471Fall 2002 Lecture5. More Point To Point Communications in MPI Note: so far we have covered –MPI_Init, MPI_Finalize –MPI_Comm_size, MPI_Comm_rank.
Lecture 6: Message Passing Interface (MPI). Parallel Programming Models Message Passing Model Used on Distributed memory MIMD architectures Multiple processes.
Its.unc.edu 1 University of North Carolina - Chapel Hill ITS Research Computing Instructor: Mark Reed Point to Point Communication.
Sending large message counts (The MPI_Count issue)
An Introduction to MPI (message passing interface)
1 Using PMPI routines l PMPI allows selective replacement of MPI routines at link time (no need to recompile) l Some libraries already make use of PMPI.
Distributed Processing Systems (InterProcess Communication) (Message Passing) Distributed Processing Systems (InterProcess Communication) (Message Passing)
Message Passing Interface (MPI) 2 Amit Majumdar Scientific Computing Applications Group San Diego Supercomputer Center Tim Kaiser (now at Colorado School.
S an D IEGO S UPERCOMPUTER C ENTER N ATIONAL P ARTNERSHIP FOR A DVANCED C OMPUTATIONAL I NFRASTRUCTURE MPI 2 Part II NPACI Parallel Computing Institute.
Parallel Algorithms & Implementations: Data-Parallelism, Asynchronous Communication and Master/Worker Paradigm FDI 2007 Track Q Day 2 – Morning Session.
MPI Derived Data Types and Collective Communication
Message Passing Interface Using resources from
Lecture 3 Point-to-Point Communications Dr. Muhammad Hanif Durad Department of Computer and Information Sciences Pakistan Institute Engineering and Applied.
An Introduction to Parallel Programming with MPI February 17, 19, 24, David Adams
MPI_Alltoall By: Jason Michalske. What is MPI_Alltoall? Each process sends distinct data to each receiver. The Jth block of process I is received by process.
Introduction to parallel computing concepts and technics
Introduction to MPI Programming
Blocking / Non-Blocking Send and Receive Operations
An Introduction to Parallel Programming with MPI
Точечные взаимодействия
More on MPI Nonblocking point-to-point routines Deadlock
CS 5334/4390 Spring 2017 Rogelio Long
Lecture 14: Inter-process Communication
4. Distributed Programming
Message-Passing Computing More MPI routines: Collective routines Synchronous routines Non-blocking routines ITCS 4/5145 Parallel Computing, UNC-Charlotte,
More on MPI Nonblocking point-to-point routines Deadlock
Send and Receive.
Barriers implementations
Hello, world in MPI #include <stdio.h> #include "mpi.h"
Hello, world in MPI #include <stdio.h> #include "mpi.h"
Presentation transcript:

Введение в параллельные вычисления. Технология программирования MPI (день четвертый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных информационных технологий НИВЦ МГУ

MPI MPI_SEND_INIT(BUF, COUNT, DATATYPE, DEST, MSGTAG, COMM, REQUEST, IERR) BUF(*) INTEGER COUNT, DATATYPE, DEST, MSGTAG, COMM, REQUEST, IERR Формирование отложенного запроса на посылк у сообщения. Сама операция пересылки не начинается!

MPI Модификации функции MPI_SEND_INIT: MPI_BSEND_INIT — формирование запроса на передачу сообщения с буферизацией. MPI_SSEND_INIT — формирование запроса на передачу сообщения с синхронизацией. MPI_RSEND_INIT — формирование запроса на передачу сообщения по готовности.

MPI MPI_RECV_INIT(BUF, COUNT, DATATYPE, SOURCE, MSGTAG, COMM, REQUEST, IERR) BUF(*) INTEGER COUNT, DATATYPE, SOURCE, MSGTAG, COMM, REQUEST, IERR Формирование отложенного запроса на п рием сообщения. Сама операция приема не начинается!

MPI MPI_START(REQUEST, IERR) INTEGER REQUEST, IERR Инициализация отложенного запроса на выполнение операции обмена, соответствующей значению параметра REQUEST. Операция запускается как неблокирующая.

MPI MPI_STARTALL(COUNT, REQUESTS, IERR) INTEGER COUNT, REQUESTS, IERR Инициализация COUNT отложенных запросов на выполнение операций обмена, соответствующих значениям первых COUNT элементов массива REQUESTS. Операции запускаются как неблокирующие.

MPI Сообщение, отправленное при помощи отложенного запроса, может быть принято любой из процедур MPI_RECV и MPI_IRECV, и наоборот. По завершении отложенного запроса значение параметра REQUEST (REQUESTS) сохраняется и может использоваться в дальнейшем!

MPI MPI_REQUEST_FREE(REQUEST, IERR) INTEGER REQUEST, IERR Удаляет структуры данных, связанные с параметром REQUEST. REQUEST устанавливается в значение MPI_REQUEST_NULL. Если операция, связанная с этим запросом, уже выполняется, то она завершится.

MPI prev = rank - 1 next = rank + 1 if (rank.eq. 0) prev = numtasks - 1 if (rank.eq. numtasks - 1) next = 0 call MPI_RECV_INIT(rbuf(1), 1, & MPI_REAL, prev, tag1, & MPI_COMM_WORLD, reqs(1), ierr) call MPI_RECV_INIT(rbuf(2), 1, & MPI_REAL, next, tag2, & MPI_COMM_WORLD, reqs(2), ierr) call MPI_SEND_INIT(sbuf(1), 1, & MPI_REAL, prev, tag2, & MPI_COMM_WORLD, reqs(3), ierr)

MPI call MPI_SEND_INIT(sbuf(2), 1, & MPI_REAL, next, tag1, & MPI_COMM_WORLD, reqs(4), ierr) do i=... sbuf(1)=... sbuf(2)=... call MPI_STARTALL(4, reqs, ierr)... call MPI_WAITALL(4, reqs, stats, & ierr);... end do

MPI Тупиковые ситуации (deadlock): процесс 0: RECV(1) SEND(1) процесс 1: RECV(0) SEND(0) процесс 0: SEND(1) RECV(1) процесс 1: SEND(0) RECV(0)

MPI Разрешение тупиковых ситуаций: 1. процесс 0: SEND(1) RECV(1) процесс 1: RECV(0) SEND(0) 2. Использование неблокирующих операций 3. Использование функции MPI_SENDRECV

MPI MPI_SENDRECV(SBUF, SCOUNT, STYPE, DEST, STAG, RBUF, RCOUNT, RTYPE, SOURCE, RTAG, COMM, STATUS, IERR) SBUF(*), RBUF(*) INTEGER SCOUNT, STYPE, DEST, STAG, RCOUNT, RTYPE, SOURCE, RTAG, COMM, STATUS(MPI_STATUS_SIZE), IERR

MPI Совмещенные прием и передача сообщений с блокировкой. Буферы передачи и приема не должны пересекаться. Тупиковой ситуации не возникает! Сообщение, отправленное операцией MPI_SENDRECV, может быть принято обычным образом, и операция MPI_SENDRECV может принять сообщение, отправленное обычной операцией.

MPI MPI_SENDRECV_REPLACE(BUF, COUNT, DATATYPE, DEST, STAG, SOURCE, RTAG, COMM, STATUS, IERR) BUF(*) INTEGER COUNT, DATATYPE, DEST, STAG, SOURCE, RTAG, COMM, STATUS(MPI_STATUS_SIZE), IERR Совмещенные прием и передача сообщений с блокировкой через общий буфер BUF.

MPI prev = rank - 1 next = rank + 1 if (rank.eq. 0) prev = numtasks - 1 if (rank.eq. numtasks - 1) next = 0 call MPI_SENDRECV( & sbuf(1), 1, MPI_REAL, prev, tag2, & rbuf(1), 1, MPI_REAL, next, tag2, & MPI_COMM_WORLD, status1, ierr) call MPI_SENDRECV( & sbuf(2), 1, MPI_REAL, next, tag1, & rbuf(2), 1, MPI_REAL, prev, tag1, & MPI_COMM_WORLD, status1, ierr)

MPI MPI_BARRIER(COMM, IERR) INTEGER COMM, IERR Работа процессов блокируется до тех пор, пока все оставшиеся процессы коммуникатора COMM не выполнят эту процедуру. Все процессы должны вызвать MPI_BARRIER, хотя реально исполненные вызовы различными процессами коммуникатора могут быть расположены в разных местах программы.

MPI Специальное значение MPI_PROC_NULL для несуществующего процесса. Операции с таким процессом завершаются немедленно с кодом завершения MPI_SUCCESS. next=rank+1 if(rank.EQ. size-1) next=MPI_PROC_NULL call MPI_SEND (buf, 1, MPI_REAL, next, & tag, MPI_COMM_WORLD, ierr)

MPI MPI_GET_PROCESSOR_NAME(NAME, LEN, IERR) CHARACTER*(*) NAME INTEGER LEN, IERR Функция возвращает в строке NAME имя узла, на котором запущен вызвавший процесс. В переменной LEN возвращается количество символов в имени, не превышающее константы MPI_MAX_PROCESSOR_NAME.