Buscar

apresentação MPI

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

MPI
(Message Passing Interface)
O que é MPI?
É um padrão para programação de aplicações paralelas de alto desempenho, suportando plataformas de execução com centenas de milhares de cores.
 Basea-se no paradigma de troca de mensagens. A infraestrutura MPI pode ser utilizada em programas C ou Fortran.
 Fornece rotinas para que os processos se comuniquem.
O paralelismo é explícito (o programador é responsável pela distribuição).
Histórico: 
A maioria dos fabricantes de computadores paralelos participou, de alguma forma, da elaboração do MPI, juntamente com pesquisadores de universidades, laboratórios e autoridades governamentais dos Estados Unidos e Europa. 
O início do processo de padronização aconteceu em 1992.
MPI
(Message Passing Interface)
Histórico: 
O projeto do MPI padrão foi apresentado na conferência Supercomputing 93, do qual se originou a versão oficial do MPI (5 de maio de 1994). 
A sessão do Forum-MPIF de Supercomputing 94 possibilitou a criação do MPI-2, que teve inicio em abril de 1995. No SuperComputing'96 foi apresentada a versão preliminar do MPI-2. Em abril de 1997 o documento MPI-2 foi unanimemente votado e aceito.
MPI
(Message Passing Interface)
Principais Implementações:
LAM: https://www.lam-mpi.org
MPICH: https://www.mcs.anl.gov/mpi/mpich
CHIMP: https://www.epcc.ed.ac.uk/chimp
Como funciona?
Os problemas são divididos em partes;
As partes são distribuídas entre as máquinas, para processamento;
Os resultados são enviados à uma máquina receptora;
A máquina receptora coleta, agrupa e fornece o resultado desejado.
MPI
(Message Passing Interface)
Paralelismo:
MPI
(Message Passing Interface)
SPMD - Single Program Multiple Data
Cada processo roda exatamente o mesmo programa;
Os dados são divididos e distribuídos aos processos participantes;
Através de condições de teste sobre o rank dos processos, diferentes processos executam diferentes partes do programa:
...
if(rank ==0){
//código tarefa 0
 			}...
else if(rank == N){
//código tarefa N
			}...
MPI
(Message Passing Interface)
Outros Modelos:
SPSD - Single Program, Single Data
MPMD - Multiple Program, Multiple Data
MPI não impõe qualquer restrição ao modelo de programação!
MPI
(Message Passing Interface)
Estrutura de código com MPI:
			#include<stdio.h>
			#include ”mpi.h”
			int main(int argc, char *argv[ ])
		 	{
			MPI_Init(&argc, &argv); // Inicializa
		 	MPI
			.
			.
			Código usando rotinas do MPI .
			.
			.
			MPI_Finalize(); //Encerra MPI
			return 0;
			}
MPI
(Message Passing Interface)
Conceitos Básicos:
Processo: cada parte dividida da aplicação. Podem ser executados em uma única máquina ou em várias.
Rank: identificação única atribuída pelo sistema a cada processo quando inicializado. Vai de 0 à N-1, onde N é o número total demprocessos. O rank é utilizado para enviar e receber mensagens.
Mensagem: conteúdo de uma comunicação. Formada por duas partes: 
Endereço: Destino e origem da mensagem;
Dados: a informação a ser transmitida.
Grupo: conjunto de processos que podem se comunicar entre si. Sempre está associado a um comunicador.
MPI
(Message Passing Interface)
MPI
(Message Passing Interface)
Conceitos Básicos
Comunicador: um objeto local que representa o domínio de uma comunicação. Por default, já predefinido como MPI_COMM_WORLD
MPI_COMM_WORLD é o comunicador predefinido que inclui todos os processos definidos pelo usuário numa aplicação MPI.
Comunicação entre Processos:
Buffering: A mensagem a ser enviada é copiada para um buffer local do programa. O processo emissor não fica dependente da sincronização com o processo receptor. Deve-se definir explicitamente o buffer associado.
Síncrona: O envio da mensagem só ocorre quando houver a confirmação de que o receptor está pronto para receber. Até o recebimento da confirmação o processo emissor fica na espera.
MPI
(Message Passing Interface)
Comunicação entre Processos:
Assíncrona: A mensagem é enviada sem nenhuma confirmação do receptor. A mensagem pode ficar pendente no ambiente de execução durante algum tempo.
Bloqueante: A execução do programa é interrompida enquanto a comunicação não acontece.
Não Bloqueante: A execução do programa é independente do sucesso da comunicação.
MPI
(Message Passing Interface)
Principais Rotinas:
Rotinas de Inicialização e Encerramento:
MPI_Init – Inicializa o ambiente MPI.
MPI_Finalize – Finaliza o ambiente MPI.
Rotinas de Grupo:
MPI_Comm_rank – Identifica um processo MPI dentro de um determinado grupo. Retorna um valor inteiro entre 0 e N-1
MPI_Comm_size – Retorna o número de processos dentro do grupo.
Rotinas de Envio/Recebimento de Mensagens:
MPI_Send – Rotina básica para envio de mensagens.
MPI_Recv – Rotina básica para recebimento de mensagens.
MPI
(Message Passing Interface)
Exemplo – Código:
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
#define MASTER 0
int main (int argc, char *argv[]){
int numtasks, taskid, len;
char hostname[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
MPI_Comm_rank(MPI_COMM_WORLD,&taskid);
MPI_Get_processor_name(hostname, &len);
printf ("Hello from task %d on %s!\n", taskid, hostname);
if (taskid == MASTER)
 printf("MASTER: Number of MPI tasks is: %d\n",numtasks);
MPI_Finalize();
}
MPI
(Message Passing Interface)
REFERÊNCIAS
Especificação e Verificação de Protocolos para Programas MPI
 https://www.di.fc.ul.pt/~vv/papers/martins.santos.etal_especificacao-verificacao-MPI.pdf
MPI – The Complete Reference 
 http://www.netlib.org/utk/papers/mpi-book/mpi-book.html 
Computação Paralela http://www.dcc.fc.up.pt/~ricroc/aulas/0607/cp/apontamentos/parteIV.pdf
MPI – Message Passing Interface
 http://www.ufjf.br/ciro_barbosa/files/2012/03/MPI.pdf
MPI
(Message Passing Interface)

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais