Subrotina LAPI_Msgpoll

Propósito

Permite o encadeamento de chamada para verificar o progresso da comunicação.

Biblioteca

Biblioteca de Disponibilidade (liblapi_r.a)

Sintaxe C

#include <lapi.h>
 
int LAPI_Msgpoll(hndl, cnt, info)
lapi_handle_t     hndl;
uint              cnt;
lapi_msg_info_t  *info;

      
typedef struct {
    lapi_msg_state_t  status;      /* Message status returned from LAPI_Msgpoll */
    ulong             reserve[10]; /* Reserved                                  */
} lapi_msg_info_t;

Sintaxe FORTRAN

include 'lapif.h'
 
LAPI_MSGPOLL(hndl, cnt, info, ierror)
INTEGER hndl
INTEGER cnt
TYPE (LAPI_MSG_STATE_T) :: info
INTEGER ierror

Descrição

Type of call: monitor de progresso local (bloqueio)

A subroutine LAPI_Msgpoll permite que o encadeamento de chamada verifique o progresso da comunicação. Com este subroutine, LAPI fornece um meio de executar o despachante várias vezes até que o progresso seja feito ou um número máximo especificado de loops de despachantes tenha executado. Aqui, progresso é definido como a conclusão de uma operação de envio de mensagens ou de uma operação de recebimento de mensagens.

LAPI_Msgpoll destina-se a ser usado quando interruptos são desligados. Se o usuário não tiver desligado explicitamente interrompido, LAPI desativa temporariamente o modo de interrupção enquanto nessa subroutine porque o despachante é chamado, o que processará quaisquer operações de recebimento pendentes. Se o despachante LAPI lota para o número máximo especificado de vezes, a chamada retorna. Se o progresso for feito antes da contagem máxima, a chamada retornará imediatamente. Em qualquer dos dois casos, LAPI reportará status através de uma estrutura de dados que é passada por referência.

A estrutura lapi_msg_info_t contém um campo de bandeiras (status), que é do tipo lapi_msg_state_t. Sinalizadores no campo status são configurados da seguinte forma:
LAPI_DISP_CNTR
Se o despachante tiver loopado cnt vezes sem fazer progresso
LAPI_SEND_COMPLETO
Se uma operação enviar mensagem foi concluída
LAPI_RECV_COMPLETO
Se uma operação receber operação foi concluída
LAPI_BOTH_COMPLETO
Se ambos uma operação enviar operação e uma operação receber operação completaram
LAPI_POLLING_NET
Se outro encadeamento já está pesquisando a rede ou a conclusão de memória compartilhada

Parâmetros

INPUT
hndl
Especifica a alça LAPI.
cnt
Especifica o número máximo de vezes que o despachante deve loop sem nenhum progresso antes de retornar.
informações
Especifica uma estrutura de status que contém o resultado da chamada LAPI_Msgpoll() .
SAÍDA
ierror
Especifica um código de retorno FORTRAN. Este é sempre o último parâmetro.

Exemplos de C

Para loop através do despachante não mais de 1000 vezes, então verifique quais foram os progressos realizados:
{

    lapi_msg_info_t msg_info;
    int cnt = 1000;
    .  
    .
    .
    LAPI_Msgpoll(hndl, cnt, &msg_info);

    if ( msg_info.status & LAPI_BOTH_COMPLETE ) {
        /* both a message receive and a message send have been completed */
    } else if ( msg_info.status & LAPI_RECV_COMPLETE ) {
        /* just a message receive has been completed                     */
    } else if ( msg_info.status & LAPI_SEND_COMPLETE ) {
        /* just a message send has been completed                        */
    } else {
        /* cnt loops and no progress                                     */
    }


}

Valores De Retorno

LAPI_SUCESSO
Indica que a chamada de função foi concluída com sucesso.
LAPI_ERR_HNDL_INVÁLIDA
Indica que o hndl passado em não é válido (não inicializado ou em estado finalizado).
LAPI_ERR_MSG_INFO_NULL
Indica que o ponteiro info é NULL (em C) ou que o valor de info é LAPI_ADDR_NULL (em FORTRAN).

Local

/usr/lib/liblapi_r.a