Você está na página 1de 60

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo

Introduo
Computacional
em Computao
MPI Classificao
Paralela
dos Mtodos de paralelizao Prog

Introduo Computao Paralela:


Fundamentos de computao paralela usando MPI

Claudir Oliveira

Email: coliveira@iprj.uerj.br
Prof.: Ricardo Fabbri
Instituto Politcnico, UERJ,
Nova Friburgo, RJ,
Outubro - 2012

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo


Introduo
Computacional
em Computao
MPI Classificao
Paralela
dos Mtodos de paralelizao Prog

Introduo aos conceitos de MPI

Instalao e execuo

MPI e C/C++

Estrutura de cdigo MPI

Classificao dos Mtodos de paralelizao

Comunicao Ponto-a-Ponto

Comunicao Coletiva

Decomposio de dados

Aplicao em restaurao de imagens

10

Comunicao unilateral

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Introduo ao MPI
Fundamentos bsicos

MPI - Message Passing Interface


MPI uma biblioteca para troca de mensagens.
Por que usar?
Padronizao (por consenso)
Oportunidades de desempenho
Funcional (diversas rotinas)
Porttil (sem altetao do fonte para outras plataformas)
Performance
Escalabilidade

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Introduo ao MPI
Livros de referncia

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Introduo ao MPI
Fundamentos Bsicos

MPICH e MPICH2Desenvolvido pela Argonne


Nationa Labs
MPI/LAM - Desenvolvido pela
Indiana, OSC, Notre Dame

As diferentes
implementaes

OpenMPI - MPI-2 - Thread


Safe
MPI/Pro - Produto comercial

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Introduo ao MPI
Fundamentos Bsicos

Compatibilidade de cdigo*;
Similaridade com
vrias
implementaes
Vantagens

Suporte para arquiteturas


paralelas heterogneas;
Clusters, Grupos de estaes de
trabalho, computadores SMP
eGrids;

Comandos para compilar


executar;

Diferena de
vrias
implementaes

Ativao em programa MPI;


Forma paralela: I/O (MPI-2);

Desvantagens

Depurao;

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Introduo ao MPI
Fundamentos Bsicos

Similaridade com
vrias
implementaes
Vantagens

Vantagens: No existem limites


para nmero de processadores;
Cada processador acessa sua
prpria memria rapidamente e
sem interferncia;

Elevado overhead devido


comunicao;

Diferena de
vrias
implementaes

o usurio responsveil pelo


envio e recebimento dos dados;

Desvantagens

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Onde executar ?

Como instalar, compilar e executar ?

3
3

$ sudo apt-get install libcr-dev mpich2 mpich2-doc


$ sudo apt-get install mpi-default-bin mpi-default-dev

Cluster de Alto Desempenho / Alta Performance


NIS -> Network Information Service;
NFS -> Network File System ou NCP (Network Control Program);
RPC -> Remote Procedure Call. Necessrio pelo NFS e NIS;
SSH -> Secure Shell;
nfslock -> Preveni que mais de um usurio modifique o mesmo
arquivo ao mesmo tempo;
Condies de bom funcionamento?

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Onde executar ?

Como instalar, compilar e executar ?

3
3

$ sudo apt-get install libcr-dev mpich2 mpich2-doc


$ sudo apt-get install mpi-default-bin mpi-default-dev

Cluster de Alto Desempenho / Alta Performance


NIS -> Network Information Service;
NFS -> Network File System ou NCP (Network Control Program);
RPC -> Remote Procedure Call. Necessrio pelo NFS e NIS;
SSH -> Secure Shell;
nfslock -> Preveni que mais de um usurio modifique o mesmo
arquivo ao mesmo tempo;
Condies de bom funcionamento?

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Onde executar ?

Como instalar, compilar e executar ?

3
3

$ sudo apt-get install libcr-dev mpich2 mpich2-doc


$ sudo apt-get install mpi-default-bin mpi-default-dev

Cluster de Alto Desempenho / Alta Performance


NIS -> Network Information Service;
NFS -> Network File System ou NCP (Network Control Program);
RPC -> Remote Procedure Call. Necessrio pelo NFS e NIS;
SSH -> Secure Shell;
nfslock -> Preveni que mais de um usurio modifique o mesmo
arquivo ao mesmo tempo;
Condies de bom funcionamento?

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Onde executar ?
Onde executar?
Clusters

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Como executar?
Como executar?

Compilar/Executar com MPI


3Executa o fonte .c ou .cpp
$ mpicc -o exec font.c
$ mpic++ -o exec font.cpp
3Iniciar N processos que executam o mesmo programa
$ mpirun -np N ./exec > N = Nmero de processadores
$ mpiexec -n N python program.py [args]
$ man mpirun e man mpiexec (Outras opes)
MPI em Clusters
Para executar programas MPI num cluster usa-se ferramentas de
processamento em lote (Sun Grid Engine / Oracle Grid Engine) para
gerenciamento da execuo remota.

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Como executar?
Como executar?

Compilar/Executar com MPI


3Executa o fonte .c ou .cpp
$ mpicc -o exec font.c
$ mpic++ -o exec font.cpp
3Iniciar N processos que executam o mesmo programa
$ mpirun -np N ./exec > N = Nmero de processadores
$ mpiexec -n N python program.py [args]
$ man mpirun e man mpiexec (Outras opes)
MPI em Clusters
Para executar programas MPI num cluster usa-se ferramentas de
processamento em lote (Sun Grid Engine / Oracle Grid Engine) para
gerenciamento da execuo remota.

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Funes simples de inicializao


MPI e C/C++

Programas C++ podem utilizar as associaes C++


Funo de iniciao: MPI_Init
C: int MPI_Init(int* argc, char*** argv)
C++: void MPI::Init(int& argc, char**& argv)
void MPI::Init()
Similarmente: MPI_Finalize e MPI::Finalize
Qual a diferena?
1

As funes so definidas dentro do namespace MPI.

Os argumentos so declarados com referncias em vez de ponteiros.

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Funes de inicializar e finalizar


Algumas funes basicas de inicializar/finalizar

Primitivas bsicas
3 MPI_Init - Inicializa processos MPI
3 MPI_Initialized - Indica se MPI_Init j foi chamado
3 MPI_Comm_size - Determina o nmero de processos no comunicador
3 MPI_Comm_rank - Determina o rank de um processo no comunicador
3 MPI_Get_processor_name - Determina o nome do processador
3 MPI_Abort - Termina todos os processos MPI dentro de um
comunicador
3 MPI_Wtime - Retorna o wall clock time em segundos
3 MPI_Finalize - Finaliza o ambiente de execuo MPI

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

i n t main ( i n t a r g c , c h a r a r g v [ ] ) {
3

i n t rank ,
i n t num_procs ;

// Numero de r a n k do p r o c e s s o
// Numero de p r o c e s s o s

MPI : : I n i t ( a r g c , a r g v ) ;
// i f ( M P I _ I n i t (& a r g c , &a r g v ) != MPI_SUCCESS ) e x i t ( 1 ) ;

MPI : : R e q u e s t r e q u e s t ;
// I d e n t i f i c a d o r de r e q u i s i c a o
MPI : : S t a t u s
s t a t u s R e q ; // S t a t u s de c o m u n i c a c a o MPI

11

// MPI_Comm_size (MPI_COMM_WORLD, &r a n k ) ;


// MPI_Comm_size (MPI_COMM_WORLD, & s i z e ) ;

13

15

r a n k = MPI : :COMM_WORLD. Get_rank ( ) ;


num_procs = MPI : :COMM_WORLD. G e t _ s i z e ( ) ;

17

// CODIGO EM PARALELO ( B c a s t > S c a r t t e r v > G a t t e r v )

19

// M P I _ F i n a l i z e ( ) ;
MPI : : F i n a l i z e ( ) ;

21

23

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Tipos de dados
Tipos de dados

C/C++ datatype

MPI datatype

MPI datatype

char

MPI::CHAR

MPI_CHAR

wchar_t

MPI::WCHAR

MPI_WCHAR

signed short

MPI::SHORT

MPI_SHORT

signed int

MPI::INT

MPI_INT

signed long

MPI::LONG

MPI_LONG

signed char

MPI::SIGNED_CHAR

MPI_SIGNED_CHAR

unsigned char

MPI::UNSIGNED_CHAR

MPI_UNSIGNED_CHAR

unsigned short

MPI::UNSIGNED_SHORT

MPI_UNSIGNED_SHORT

unsigned int

MPI::UNSIGNED

MPI_UNSIGNED

float

MPI::FLOAT

MPI_FLOAT

double

MPI::DOUBLE

MPI_DOUBLE

...outras

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Mtodos de paralelizao
Classsificao dos mtodo

Existem diferentes mtodos ou paradigmas de paralelizao.


Algoritmos podem ser classificados segundo alguns critrios:
Localizao dos dados e do programa executvel: SPMD (Single
Program, Multiple Data)
Single Program: Cada computador executa exatamente o mesmo
programa (embora algumas partes do programa sejam executadas
somente pelo Master).
Multiple Data: Os dados so divididos e distribudos entre os
computadores, ou seja, cada computador recebe informaes
diferentes.

Diviso de trabalho
SPMD-real: O mestre coordena a execuo do programa e o envio e
recebimento de mensagens de e para os slaves.
O Master tambm recebe sua parte dos dados e realiza sua parte dos
clculos.
SPMD-ME (mestre-escravo): O mestre apenas coordena a execuo
do programa e os slaves realizam os clculos pesados.

Espera por mensagens


Operaes Blocking, Nonblocking, Collective
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Mtodos de paralelizao
Classsificao dos mtodo

Existem diferentes mtodos ou paradigmas de paralelizao.


Algoritmos podem ser classificados segundo alguns critrios:
Localizao dos dados e do programa executvel: SPMD (Single
Program, Multiple Data)
Single Program: Cada computador executa exatamente o mesmo
programa (embora algumas partes do programa sejam executadas
somente pelo Master).
Multiple Data: Os dados so divididos e distribudos entre os
computadores, ou seja, cada computador recebe informaes
diferentes.

Diviso de trabalho
SPMD-real: O mestre coordena a execuo do programa e o envio e
recebimento de mensagens de e para os slaves.
O Master tambm recebe sua parte dos dados e realiza sua parte dos
clculos.
SPMD-ME (mestre-escravo): O mestre apenas coordena a execuo
do programa e os slaves realizam os clculos pesados.

Espera por mensagens


Operaes Blocking, Nonblocking, Collective
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Mtodos de paralelizao
Classsificao dos mtodo

Existem diferentes mtodos ou paradigmas de paralelizao.


Algoritmos podem ser classificados segundo alguns critrios:
Localizao dos dados e do programa executvel: SPMD (Single
Program, Multiple Data)
Single Program: Cada computador executa exatamente o mesmo
programa (embora algumas partes do programa sejam executadas
somente pelo Master).
Multiple Data: Os dados so divididos e distribudos entre os
computadores, ou seja, cada computador recebe informaes
diferentes.

Diviso de trabalho
SPMD-real: O mestre coordena a execuo do programa e o envio e
recebimento de mensagens de e para os slaves.
O Master tambm recebe sua parte dos dados e realiza sua parte dos
clculos.
SPMD-ME (mestre-escravo): O mestre apenas coordena a execuo
do programa e os slaves realizam os clculos pesados.

Espera por mensagens


Operaes Blocking, Nonblocking, Collective
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Mtodos de paralelizao
Classsificao dos mtodo

Existem diferentes mtodos ou paradigmas de paralelizao.


Algoritmos podem ser classificados segundo alguns critrios:
Localizao dos dados e do programa executvel: SPMD (Single
Program, Multiple Data)
Single Program: Cada computador executa exatamente o mesmo
programa (embora algumas partes do programa sejam executadas
somente pelo Master).
Multiple Data: Os dados so divididos e distribudos entre os
computadores, ou seja, cada computador recebe informaes
diferentes.

Diviso de trabalho
SPMD-real: O mestre coordena a execuo do programa e o envio e
recebimento de mensagens de e para os slaves.
O Master tambm recebe sua parte dos dados e realiza sua parte dos
clculos.
SPMD-ME (mestre-escravo): O mestre apenas coordena a execuo
do programa e os slaves realizam os clculos pesados.

Espera por mensagens


Operaes Blocking, Nonblocking, Collective
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Mtodos de paralelizao
Classsificao dos mtodo

Existem diferentes mtodos ou paradigmas de paralelizao.


Algoritmos podem ser classificados segundo alguns critrios:
Localizao dos dados e do programa executvel: SPMD (Single
Program, Multiple Data)
Single Program: Cada computador executa exatamente o mesmo
programa (embora algumas partes do programa sejam executadas
somente pelo Master).
Multiple Data: Os dados so divididos e distribudos entre os
computadores, ou seja, cada computador recebe informaes
diferentes.

Diviso de trabalho
SPMD-real: O mestre coordena a execuo do programa e o envio e
recebimento de mensagens de e para os slaves.
O Master tambm recebe sua parte dos dados e realiza sua parte dos
clculos.
SPMD-ME (mestre-escravo): O mestre apenas coordena a execuo
do programa e os slaves realizam os clculos pesados.

Espera por mensagens


Operaes Blocking, Nonblocking, Collective
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Mtodos de paralelizao
Classsificao dos mtodo

Existem diferentes mtodos ou paradigmas de paralelizao.


Algoritmos podem ser classificados segundo alguns critrios:
Localizao dos dados e do programa executvel: SPMD (Single
Program, Multiple Data)
Single Program: Cada computador executa exatamente o mesmo
programa (embora algumas partes do programa sejam executadas
somente pelo Master).
Multiple Data: Os dados so divididos e distribudos entre os
computadores, ou seja, cada computador recebe informaes
diferentes.

Diviso de trabalho
SPMD-real: O mestre coordena a execuo do programa e o envio e
recebimento de mensagens de e para os slaves.
O Master tambm recebe sua parte dos dados e realiza sua parte dos
clculos.
SPMD-ME (mestre-escravo): O mestre apenas coordena a execuo
do programa e os slaves realizam os clculos pesados.

Espera por mensagens


Operaes Blocking, Nonblocking, Collective
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Mtodos de paralelizao
Classsificao dos mtodo

Existem diferentes mtodos ou paradigmas de paralelizao.


Algoritmos podem ser classificados segundo alguns critrios:
Localizao dos dados e do programa executvel: SPMD (Single
Program, Multiple Data)
Single Program: Cada computador executa exatamente o mesmo
programa (embora algumas partes do programa sejam executadas
somente pelo Master).
Multiple Data: Os dados so divididos e distribudos entre os
computadores, ou seja, cada computador recebe informaes
diferentes.

Diviso de trabalho
SPMD-real: O mestre coordena a execuo do programa e o envio e
recebimento de mensagens de e para os slaves.
O Master tambm recebe sua parte dos dados e realiza sua parte dos
clculos.
SPMD-ME (mestre-escravo): O mestre apenas coordena a execuo
do programa e os slaves realizam os clculos pesados.

Espera por mensagens


Operaes Blocking, Nonblocking, Collective
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Mtodos de paralelizao
Classsificao dos mtodo

Existem diferentes mtodos ou paradigmas de paralelizao.


Algoritmos podem ser classificados segundo alguns critrios:
Localizao dos dados e do programa executvel: SPMD (Single
Program, Multiple Data)
Single Program: Cada computador executa exatamente o mesmo
programa (embora algumas partes do programa sejam executadas
somente pelo Master).
Multiple Data: Os dados so divididos e distribudos entre os
computadores, ou seja, cada computador recebe informaes
diferentes.

Diviso de trabalho
SPMD-real: O mestre coordena a execuo do programa e o envio e
recebimento de mensagens de e para os slaves.
O Master tambm recebe sua parte dos dados e realiza sua parte dos
clculos.
SPMD-ME (mestre-escravo): O mestre apenas coordena a execuo
do programa e os slaves realizam os clculos pesados.

Espera por mensagens


Operaes Blocking, Nonblocking, Collective
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Mtodos de paralelizao
Classsificao dos mtodo

Existem diferentes mtodos ou paradigmas de paralelizao.


Algoritmos podem ser classificados segundo alguns critrios:
Localizao dos dados e do programa executvel: SPMD (Single
Program, Multiple Data)
Single Program: Cada computador executa exatamente o mesmo
programa (embora algumas partes do programa sejam executadas
somente pelo Master).
Multiple Data: Os dados so divididos e distribudos entre os
computadores, ou seja, cada computador recebe informaes
diferentes.

Diviso de trabalho
SPMD-real: O mestre coordena a execuo do programa e o envio e
recebimento de mensagens de e para os slaves.
O Master tambm recebe sua parte dos dados e realiza sua parte dos
clculos.
SPMD-ME (mestre-escravo): O mestre apenas coordena a execuo
do programa e os slaves realizam os clculos pesados.

Espera por mensagens


Operaes Blocking, Nonblocking, Collective
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicaao-P-a-P
Comunicao P-a-P: Bloqueante x No-bloqueantes

Send/Receiver - Bloqueante
3

Primitivas Bloqueantes: Geram deadlock


MPI_Send(&buf, count, datatype, dest, tag, comm)
MPI_Recv(&buf, count, datatype, source, tag, comm, &status)

Se no for devidamente implementado, isso pode causar um impasse, uma


situao em que um processador no pode enviar uma mensagem, porque
no pode ser recebido por outro processador. Aqui est um cenrio famoso.

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Primitivas Send/Receiver
Primitiva para envio de dados (blocking)

MPI_Send

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Primitivas Send/Receiver
Primitiva para recebimento de dados (blocking)

MPI_Recv

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

// Send/Recv entre dois processos


// Codigo usando primitivas MPI em C
i n t main ( i n t a r g c , c h a r a r g v [ ] ) {
i n t rank ;
i n t dados = 500;
MPI_Status s t a t u s ;

i f ( M P I _ I n i t (& a r g c , &a r g v ) != MPI_SUCCESS )


e x i t (1) ;

11

MPI_Comm_Rank(MPI_COMM_WORLD, &r a n k ) ;
13

i f ( r a n k == 0 )
MPI_Send(& dados , 1 , MPI_INT , 1 , MPI_ANY_TAG,
MPI_COMM_WORLD) ;

15

e l s e i f ( r a n k == 1 )
MPI_Recv(& dados , 1 , MPI_INT , 0 , MPI_ANY_TAG,
MPI_COMM_WORLD, &s t a t u s ) ;

17

19

MPI_Finalize () ;
21

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicaao-P-a-P
Comunicao P-a-P: Bloqueante x No-bloqueantes

Para que comunicao No-bloqueante?


Evitar os Deadlock
Permitir simultaneidade entre computao e comunicaao;

Message Prefetching: Esconder a latncia da comunicao;


Isend/Ireceiver - No-bloqueante
3

Primitivas No-bloqueantes
MPI_Isend(&buf, count, datatype, dest, tag, comm, &request)
MPI_Irecv(&buf, count, datatype, source, tag, comm, &request)
Ao solicitar, o objeto Request retorna o status de envio ou do
recebimento
Tipo de averiguao do Request:
MPI_Wait: Bloqueia a execuo at o send ou receiver se complete;
MPI_Test: True ou False (Se a operao completou, request retorna
MPI_REQUEST_NULL)
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicaao-P-a-P
Comunicao P-a-P: Bloqueante x No-bloqueantes

Para que comunicao No-bloqueante?


Evitar os Deadlock
Permitir simultaneidade entre computao e comunicaao;

Message Prefetching: Esconder a latncia da comunicao;


Isend/Ireceiver - No-bloqueante
3

Primitivas No-bloqueantes
MPI_Isend(&buf, count, datatype, dest, tag, comm, &request)
MPI_Irecv(&buf, count, datatype, source, tag, comm, &request)
Ao solicitar, o objeto Request retorna o status de envio ou do
recebimento
Tipo de averiguao do Request:
MPI_Wait: Bloqueia a execuo at o send ou receiver se complete;
MPI_Test: True ou False (Se a operao completou, request retorna
MPI_REQUEST_NULL)
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicaao-P-a-P
Comunicao P-a-P: Bloqueante x No-bloqueantes

Para que comunicao No-bloqueante?


Evitar os Deadlock
Permitir simultaneidade entre computao e comunicaao;

Message Prefetching: Esconder a latncia da comunicao;


Isend/Ireceiver - No-bloqueante
3

Primitivas No-bloqueantes
MPI_Isend(&buf, count, datatype, dest, tag, comm, &request)
MPI_Irecv(&buf, count, datatype, source, tag, comm, &request)
Ao solicitar, o objeto Request retorna o status de envio ou do
recebimento
Tipo de averiguao do Request:
MPI_Wait: Bloqueia a execuo at o send ou receiver se complete;
MPI_Test: True ou False (Se a operao completou, request retorna
MPI_REQUEST_NULL)
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicaao-P-a-P
Comunicao P-a-P: Bloqueante x No-bloqueantes

Para que comunicao No-bloqueante?


Evitar os Deadlock
Permitir simultaneidade entre computao e comunicaao;

Message Prefetching: Esconder a latncia da comunicao;


Isend/Ireceiver - No-bloqueante
3

Primitivas No-bloqueantes
MPI_Isend(&buf, count, datatype, dest, tag, comm, &request)
MPI_Irecv(&buf, count, datatype, source, tag, comm, &request)
Ao solicitar, o objeto Request retorna o status de envio ou do
recebimento
Tipo de averiguao do Request:
MPI_Wait: Bloqueia a execuo at o send ou receiver se complete;
MPI_Test: True ou False (Se a operao completou, request retorna
MPI_REQUEST_NULL)
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicaao-P-a-P
Comunicao P-a-P: Bloqueante x No-bloqueantes

Para que comunicao No-bloqueante?


Evitar os Deadlock
Permitir simultaneidade entre computao e comunicaao;

Message Prefetching: Esconder a latncia da comunicao;


Isend/Ireceiver - No-bloqueante
3

Primitivas No-bloqueantes
MPI_Isend(&buf, count, datatype, dest, tag, comm, &request)
MPI_Irecv(&buf, count, datatype, source, tag, comm, &request)
Ao solicitar, o objeto Request retorna o status de envio ou do
recebimento
Tipo de averiguao do Request:
MPI_Wait: Bloqueia a execuo at o send ou receiver se complete;
MPI_Test: True ou False (Se a operao completou, request retorna
MPI_REQUEST_NULL)
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Primitivas Isend/Irecv
Primitiva no-bloqueante para envio de dados (non-blocking)

MPI_Isend

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Primitivas Isend/Irecv
Primitiva no-bloqueante para recebimento de dados (non-blocking)

MPI_Irecv

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Isend/Irecv
Exempo bsico de uso: Isend/ Irecv entre dois processos
1
2

int main ( int argc , char * argv [ ] ) {


int numtasks , workers = 4 , rank , next , prev , buf [ 2 ] , tag1 =1 ,
tag2 =2; // workers = size request

3
4
5
6

MPI :: Init ( argc , argv ) ;


MPI_Request Rq [ 4 ] ; // Identificador de requisicao
MPI :: Status statsRq [ 4 ] ; // Status de comunicacao MPI

7
8
9

rank = MPI :: COMM_WORLD . Get_rank () ;


numtasks = MPI :: COMM_WORLD . Get_size () ;

10
11
12
13

prev = rank -1; next = rank + 1;


if ( rank == 0) prev = numtasks - 1;
if ( rank == ( numtasks - 1) ) next = 0;

14
15
16
17
18

Rq [ 0 ]
Rq [ 1 ]
Rq [ 2 ]
Rq [ 3 ]

=
=
=
=

MPI :: COMM_WORLD . Irecv (& buf [ 0 ] ,1 , MPI :: INT , prev , tag1 ) ;


MPI :: COMM_WORLD . Irecv (& buf [ 1 ] ,1 , MPI :: INT , next , tag2 ) ;
MPI :: COMM_WORLD . Isend (& rank ,1 , MPI :: INT , prev , tag2 ) ;
MPI :: COMM_WORLD . Isend (& rank ,1 , MPI :: INT , next , tag1 ) ;

19
20
21
22

// { do algum_trabalho }
MPI :: Request :: Waitall ( workers , Rq , statsRq ) ;
MPI :: Finalize () ;
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Isend/Irecv
Exempo bsico de uso: Isend/ Irecv entre dois processos

Exemplo prtico: Calcular uma aproximao para a funo seno.


sin(x ) =

(1)n
2n1
(2n1)! x

n=0

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicaao Coletiva
Comunicao Coletiva

Na comunicao coletiva, todos os processadores esto envolvidos


no processo de comunicao.
Caso em que voc precisa de comunicao coletiva: Se um
processador quer dizer a todos os outros processadores que terminou
de computar algo (em vez de escrever um lao com as operaes
Send/Receiver ).
Primitivas
3 Um para vrios: MPI_Bcast, MPI_Scatter

A operao Broadcast consiste no envio de dados a partir de um


processador para os outros.
MPI_Bcast(&buffer, count, datatype, root, comm)
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicaao Coletiva
Comunicao Coletiva

Na comunicao coletiva, todos os processadores esto envolvidos


no processo de comunicao.
Caso em que voc precisa de comunicao coletiva: Se um
processador quer dizer a todos os outros processadores que terminou
de computar algo (em vez de escrever um lao com as operaes
Send/Receiver ).
Primitivas
3 Um para vrios: MPI_Bcast, MPI_Scatter

A operao Broadcast consiste no envio de dados a partir de um


processador para os outros.
MPI_Bcast(&buffer, count, datatype, root, comm)
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicaao Coletiva
Comunicao Coletiva

Na comunicao coletiva, todos os processadores esto envolvidos


no processo de comunicao.
Caso em que voc precisa de comunicao coletiva: Se um
processador quer dizer a todos os outros processadores que terminou
de computar algo (em vez de escrever um lao com as operaes
Send/Receiver ).
Primitivas
3 Um para vrios: MPI_Bcast, MPI_Scatter

A operao Broadcast consiste no envio de dados a partir de um


processador para os outros.
MPI_Bcast(&buffer, count, datatype, root, comm)
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicaao Coletiva
Comunicao Coletiva

Na comunicao coletiva, todos os processadores esto envolvidos


no processo de comunicao.
Caso em que voc precisa de comunicao coletiva: Se um
processador quer dizer a todos os outros processadores que terminou
de computar algo (em vez de escrever um lao com as operaes
Send/Receiver ).
Primitivas
3 Um para vrios: MPI_Bcast, MPI_Scatter

A operao Broadcast consiste no envio de dados a partir de um


processador para os outros.
MPI_Bcast(&buffer, count, datatype, root, comm)
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicaao Coletiva
Comunicao Coletiva

Primitivas
3 MPI_Gather
3 MPI_Reduce
3 Vrios para vrios: MPI_Allreduce, MPI_Allgather
3 Sincronizao: MPI_Barrier (MPI_Barrier(comm))
MPIGather consiste em recolher os dados de um grupo de
processador e fazer algo com eles.
Por exemplo, o processador master pode querer recolher a soluo de
cada processador de coloc-los em uma matriz final.
MPI_Gather(&sendbuf, sendcnt, sendtype, &recvbuf, recvcount,
recvtype, root, comm)

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Exemplo
Exemplo: MPI_Scatter / MPI_Gather

Multiplicao de Matriz
1

MPI MASTER = 0;

2
3
4
5

for ( int i = 0; i < NIterac ; i + + )


{
MPI_Scatter (...) ; // Master faz a distribuicao do trabalho
p / slaves

if ( Rank == MPI_MASTER )
F i l l _ M a t r i x _ A _ W i t h _ N e w _ D a t a () ; // Raiz

7
8
9
10
11
12
13

else
Computer () ; // slaves
// Raiz coleta os resultados dos slaves
MPI_Gather (...) ;

14

if ( Rank == MPI_MASTER )
Write_Results () ;

15
16
17

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Primitiva coletiva MPI_Reduce


Comunicao coletiva MPI_Reduce:

Vrios para um: MPI_Reduce Consiste na coleta de dados dos


processadores e aplica uma operao algbrica (soma, produto, etc
..) sobre esses valores.

Algumas operaes coletivas tipo reduo: MPI_SUM,


MPI_PROD, MPI_MAX, MPI_LAND ...(114 padro)

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

ss

MPI_BARRIER: Todos os processos que as invocam so bloqueados


at que todos os processos do comunicador invoquem a barreira.
MPI_Prob: Chamanda equvoca. Ele aceita a mensagem e
atualiza o status mas no transferir os dados de/para qualquer lugar
16 operaes coletivas

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Exemplo de programa MPI


Exemplos de aplicao das primitivas de comunicao Coletiva

Exemplo prtico: Calcular uma aproximao para a funo seno.


sin(x ) =

(1)n
2n1
(2n1)! x

n=0

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Modeloe de decomposio
Opes de decomposio de dados

Os modelos mais comuns so denominados:


Decomposio funcional : decompe o problema em funo da
computao;
Decomposio de domnio : decompe em grupos e distribui por
entre mltiplos processadores;
Trs opes para decomposio:
Particionamento de bloco em linha ou coluna (Striped Partition)
3 Divide os elementos da matriz em grupo de linhas ou colunas ;
3 Cada processo responsvel por um grupo contnuo de linhas
(m/p) ou ou colunas (n/p) ;
Decomposio de blocos em tabuleiros - 2D
3Matrix dividida em blocos 2D alinhando com a grade (grade
virtual) de r linhas e n colunas;
3Cada processo responsvel por um bloco de matriz contendo, no
mximo, m/r linhas ou n/c colunas;ddd

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Processamento Paralelo
Particionamento de bloco em Coluna: Matriz x vetor
1
2
3
4
5
6
7
8

// Multiplicacao de Matriz e vetor


Entrada : Matriz mat [ m ] [ n ] Vec [ n ]
Saida : out [ m ]
for ( int i = 0; i < m ; i + + ) {
out [ i ] = 0;
for ( int j = 0; j < n ; j + + )
out [ i ] + = mat [ i ] [ j ] * Vec [ j ] ;
}

Suponha que cada tarefa primitiva i tenha coluna i da matriz e


elemento i de entrada e de sada de vetores;

a0,0
a0,1

a0,n1
b0
a1,0

a1,1

a1,n1

b1
A b = c

=
..
..
.
.
..

.
.
a2,n1 ..
am1,0
am1,1 am1,n1
bn1


c0 c1 cn1

c0 =
c1 =
..

a0,0 b0 + a0,1 b1 +

a1,0 b0 + a1,1 b1 +

..
Instituto Politcnico.
Claudir Oliveira
.- RJ

+a0,n1
+a1,n1
..

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Modelos de decomposio
Modelos de decomposio

Casos: Striped Partition e Overlapping Blocks ou Multisplittings

Diviso dos blocos ?


Unidades Homogneas e Heterogneas
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Processamento Paralelo
Aplicao das funes Nonblocking

3 Emprego da funo Nonblocking em processamento de imagens.

Figura: Modelo de decomposio de domnio (Oliveira C., 2011)


Decomposio usada em ambiente paralelo SPMD

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Processamento Paralelo

3 Abordagem computacional que emprega tcnicas de decomposio


de domnio.

Figura: Distribuio da imagens entre os processadores

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Processamento Paralelo
MPE - Jumpshot

3 MPE - Multi - Processing Environment

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

SpeedU

3 Abordagem computacional que emprega tcnicas de decomposio


de domnio.

3.5

3.0

SpeedUP

2.5

2.0

1.5

1.0

Imagem
0.5

Imagem
Imagem
0.0
1

Num. Processadores

Instituto Politcnico - RJ

Claudir Oliveira

256x256
512x512
1024x1024

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicao unilateral
Comunicao unilateral - MPI - 2

Two-sided communication: Comunicao nos dois lados;


Processo envia (send) e recebe (recv) explicitamente;
Grau de sincronizao;
A operao recv no pode ser concluida antes do envio ser iniciado;

Chamada de One-sided communication: Processo envia (ou recebe)


dados do outro sem interferncia explicita do outro;
Pode reduzir a sincronizao e assim melhorar o desempenho;
Pode reduzir a movimentao de dados;
Pode simplificar a programao: Um nico lado define a
comunicao;

Ppotencialmente Eficiente: Usa novas funcionalidades das placas


de comunicao de redes rpidas
RDMA (Remote Direct Memory Access) permite leitura/escrita na
memria sem interromper a CPU

Entretanto gera condies de corrida inesperadas e difceis de


detectar (Acesso simultneo local e remoto mesma posio da
memria)
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicao unilateral
Comunicao unilateral - MPI - 2

Semntica separa comunicao de sincronismo


As semticas bloqueantes MPI_Send e MPI_Recv contm
comunicao e sincronismo
Mas, MPI_Isend e MPI_Irecv realizam comunicao enquanto
MPI_Wait faz sincronizao

Para enviar dados, o processo que emite a comunicao (envio) deve


indicar onde colocar os dados na memria do outro
Para receber dados, o processo que emite a comunicao (recepo)
deveindicar onde retirar os dados da memria do outro

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicao unilateral
Janela de Comunicao

O conceito de janela (window) de memria expe trecho da memria


de um processo a outros
Necessrio para que outros processos possam citar memria alheia
Tambm define quais processos podem acessar a janela
Processos distintos podem expor trechos distintos de memria (cada
processo expe sua janela)

Em operaes de envio/recepo de mensagens, o trecho da


memria alheia especificado por:
target_disp: displacement da posio inicial da janela alheia
target_count: quantos elementos do tipo target_datatype sero
enviados
target_datatype: tipo MPI no destino O trecho de memria alheia
obrigatoriamente est contido na janela exposta pelo processo alvo

O trecho de memria alheia obrigatoriamente est contido na janela


exposta pelo processo alvo;

Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Comunicao unilateral
Primitivas e Exemplo de uso

MPI_Win_Get (...): pode ser usado para agarrar os dados da


memria de um processo remoto
MPI_Win_Put (...)
MPI_Win_Accumulate(...)
_Put() e _Get() e _Accumulate permitem um processo para acessar
um outro espao de endereo, sem qualquer participao explcita;
Chamadas para estas rotinas sao bloqueantes
Significa que eles iniciam a transferncia, mas a transferncia no
precisa completar antes do retorno de chamadas
Necessidade de um mecanismo de sincronizao independente
MPI_Win_fence (). Buffers afetadas no devem ser modificados at
o retorno de chamada de sincronizao.
MPI_Win_free (MPI_Win *win)
MPI_Win_fence (...)
EXEMPLO: Escreva uma um programa que usa MPI_ Get () para
extrair valores de matrizes de processos remotos e armazen-los em
matrizes locais.
Instituto Politcnico - RJ

Claudir Oliveira

Introduo aos conceitos de MPI Formulao do problema MPI e C++ Modelo Computacional MPI Classificao dos Mtodos de paralelizao Prog

Referncias
KE MARTIN BURTSCHER, E. S. J. Reducing communication time
through message pre- fetching. In: Intl. Conf. on parallel and
distributed processing techniques and applications. [S.l.: s.n.], 2005.
p. 62005. .
OLIVEIRA C. Implementao paralela do algoritmo iterativo de
busca do parmetro de regularizao timo para o funcional de
Tikhonov no problema de restaurao de imagens. Dissertao de
Mestrado - Universidade do Estado do Rio de Janeiro - UERJ/IPRJ,
2012.
D. Tompa; Morton, J; Jernigan, E., Perceptually based image
comparison, Vol. 1, N. 1, Proceedings 2000 International Conference
on Image Processing Cat No00CH37101, Ieee, p. 489492, 2000.
Stutz, D. ; A. J. Silva Neto, Fundamentos de Computao Paralela
para a Restaurao de Imagens de Microscopia de Fora Atmica,
Vol. 58, Notas em Matemtica Aplicada, SBMAC, So Carlos, 2011,
ISBN 978-85-86883-52-1 (e-ISBN 978-85-86883-3)
Instituto Politcnico - RJ

Claudir Oliveira

Você também pode gostar