Baixe o app para aproveitar ainda mais
Prévia do material em texto
Curso MPI - Módulo 3 Rotinas de Comunicação Carla Osthoff Rotinas de Comunicação básicas. • Existem duas rotinas básicas para fazer a troca de mensagens entre dois processadores, MPI_SEND e MPI_RECV, • Estas rotinas permitem a troca de mensagem de forma bloqueante. Apostila pg.14Apostila pg.14 Rotinas bloqueantes • Não deixam o programa seguir em frente enquanto não obtiverem confirmação do recebimento da mensagem. MPI_Send • Rotina básica para envio de mensagens no MPI, utiliza o modo de comunicação "blocking send" (envio bloqueante). • Após o retorno, libera o "system buffer" e permite o acesso ao "application buffer”. MPI_Send(&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); • 1º: Endereço do dado a ser transmitido • 2º: Número de itens a ser enviado • 3º: Tipo de Dados • 4º: Destino • 5º: Comunicador MPI_Recv • Rotina básica para o recebimento de mensagens no MPI, utiliza o modo de comunicação "blocking recv". • Após o retorno, libera o "system buffer" e permite o acesso ao "application buffer". MPI_Recv(&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat); 1º: Endereço do dado a ser transmitido 2º: Número de itens a ser enviado 3º: Tipo de Dados 4º: Destino 5º: Comunicador 6º: Status da mensagem teste02 • EXEMPLO COM SEND E RECEIVE BLOQUEANTES • Processo 0 envia mensagem para o processo 1 e espera pela mensagem de recebimento. OPERAÇÕES PONTO A PONTO • As operações MPI ponto a ponto geralmente envolvem operações de troca de mensagens entre dois processos distintos. • Enquanto um processo realiza uma operação de envio o outro processo realiza uma operação de recebimento da mensagem. Apostila pg.15Apostila pg.15 • Envio Síncrono • Envio bloqueante /recebimento bloqueante • Envio não-bloqueante / recebimento não-bloqueante. • Enviar com Buffer • Enviar / receber combinado Rotinas envio/recebimento Rotinas envio/recebimento • Qualquer tipo de rotina de envio pode ser emparelhado com qualquer tipo de rotina de recebimento. Rotinas envio/recebimento • MPI também fornece várias rotinas associadas a operações de enviar / receber , tais como as utilizadas para esperar por uma mensagem “probe” ou para descobrir se uma mensagem chegou. Buffering Antes de descrevermos estas rotinas necessitamos definir o conceito de buffering. Problema 1 • Ocorre um envio da operação Send no processo A, antes da operação Recv do processo B estar pronta para receber Problema 2 • Múltiplas mensagens de recebimento chegam a um mesmo processo que só pode receber uma mensagem por vez • As mensagens em estado de espera necessitam ser alocadas em algum lugar do sistema. Buffering Buffer do Sistema Processador 1 Processo A Send Buffer do Sistema Processador 2 Processo B Recv dado dado dado REDE Apostila pg.16Apostila pg.16 Buffering • Observamos que o tratamento do recebimento é realizado pela implementação MPI (e não pelo padrão MPI). • Normalmente, a implementação reserva uma área no buffer do sistema para armazenar os dados em trânsito. Buffer da aplicação • O padrão MPI também permite ao usuário a possibilidade de gerenciar um espaço de buffer dentro da aplicação. MPI_Isend • Identifica uma área na memória para ser utilizada como buffer para o envio das mensagens. • A execução do programa continua sem esperar que a mensagem seja copiada do buffer da aplicação para o sistema. MPI_Isend • A instrução de comunicação devolve uma mensagem com um status pendente. • O programa não deve alterar o buffer até que as rotinas de teste de recebimento tais como a rotina MPI_Wait ou a rotina MPI_Test indiquem o término do envio MPI_Irecv • Identifica uma área na memória para ser utilizada como buffer de recebimento das mensagens. MPI_Irecv • O programa segue o processamento imediatamente após o recebimento da mensagem sem esperar que a mensagem recebida seja copiada para o buffer do aplicativo. MPI_Irecv • A instrução de comunicação devolve uma mensagem com status pendente. • O programa deve utilizar as chamadas para MPI_Wait ou MPI_Test para determinar se a operação foi concluída. MPI_Wait • Fica em estado de espera bloqueante até que a operação seja concluída. • Para o caso de várias operações bloqueantes, o programador pode especificar os parâmetros “nenhum, alguns ou todos”. teste03 • EXEMPLO DE ROTINA COM SEND E RECEIVE NÃO BLOQUEANTES Apostila pg.18Apostila pg.18 Mensagens bloqueantes Versus não-bloqueantes • A maior parte das rotinas MPI ponto a ponto podem ser utilizadas seja no modo bloqueante, seja no modo não bloqueante. Apostila pg.18Apostila pg.18 Mensagens Bloqueantes • Uma rotina bloqueante só irá prosseguir após estar segura de que o buffer da aplicação está livre para ser reutilizado. Mensagens Bloqueantes • Seguro significa que as modificações não afetarão os dados destinados ao processo de recebimento. • Seguro não implica que os dados foram efetivamente recebidos – os dados podem estar armazenados em um buffer do sistema Mensagens Bloqueantes • Um envio bloqueante pode ser sincronizado, o que significa que existe a ocorrência de um handshaking entre o processo de recebimento para confirmar que o envio foi realizado. Mensagens Bloqueantes • Um envio bloqueante pode ser assíncrono se um buffer do sistema for utilizado para armazenar os dados para um eventual envio. Mensagens Bloqueantes • Um recebimento bloqueante só recebe o "retorno" depois que o dado já chegou na aplicação destino e está pronto para ser utilizado pelo programa Mensagens Não Bloqueantes • As rotinas de envios e recebimentos não-bloqueantes se comportam de forma semelhante • Elas retornam quase imediatamente. Mensagens Não Bloqueantes • Elas não esperam pelos eventos de confirmação para prosseguir, tal como a cópia da mensagem do buffer do sistema para o buffer da aplicação ou da chegada da mensagem. Mensagens Não Bloqueantes • Fazem um "pedido" a biblioteca MPI para realizar a operação quando este estiver disponível. • O usuário não pode prever quando isso acontecerá. Mensagens Não Bloqueantes • Não é seguro modificar o buffer da aplicação até que se tenha a confirmação de que a operação foi efetivamente realizado pela biblioteca. • Para isto a biblioteca MPI fornece operações de espera, chamadas de wait. Mensagens Não Bloqueantes • Observamos que as comunicações não-bloqueantes são usadas principalmente para sobrepor comunicação com computação e explorar possíveis ganhos de desempenho Ordenação • MPI garante que as mensagens não irão ultrapassar umas às outras. Apostila pg.19Apostila pg.19 Ordenação • Se um remetente envia duas mensagens (Mensagem 1 e Mensagem 2) sucessivamente para o mesmo destino • A operação irá receber a Mensagem 1 antes de receber a Mensagem 2. Ordenação • Se um receptor recebe duas mensagens ( Recebimento 1 e Recebimento 2), sucessivamente, com o mesmo endereço a mensagem de recebimento 1 será recebida antes da mensagem 2. Equidade • Cabe ao programador evitar uma situação de "starvation", ou seja, uma operação em estado de espera eterno. Apostila pg.19Apostila pg.19 Equidade • No caso de dois processos enviarem uma mensagem concorrente para um terceiro processo, apenas um dos envios será completado, ou seja, chegará ao seu destino final. Curso MPI - Módulo 3 Rotinas de Comunicação básicas. Rotinas bloqueantes MPI_Send Slide Number 5 MPI_Recv Slide Number 7 teste02 OPERAÇÕES PONTO A PONTO Rotinas envio/recebimento Rotinas envio/recebimento Rotinas envio/recebimento Buffering Problema 1 Problema 2 Buffering Buffering Buffer da aplicação MPI_Isend MPI_Isend MPI_Irecv MPI_Irecv MPI_Irecv MPI_Wait teste03 Mensagens bloqueantes Versus não-bloqueantes Mensagens BloqueantesMensagens Bloqueantes Mensagens Bloqueantes Mensagens Bloqueantes Mensagens Bloqueantes Mensagens Não Bloqueantes Mensagens Não Bloqueantes Mensagens Não Bloqueantes Mensagens Não Bloqueantes Mensagens Não Bloqueantes Ordenação Ordenação Ordenação Equidade Equidade
Compartilhar