LAPI_Msgpoll Sous-routine

Objectif

Permet à l'unité d'exécution d'appeler de vérifier les progrès de la communication.

Bibliothèque

Bibliothèque de disponibilité (liblapi_r.a)

Syntaxe 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;

Syntaxe FORTRAN

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

Descriptif

Moniteur de progression Type of call: local (blocage)

La sous-routine LAPI_Msgpoll permet à l'unité d'exécution appelante de vérifier la progression de la communication. Avec cette sous-routine, LAPI fournit un moyen d'exécuter le répartiteur plusieurs fois jusqu'à ce qu'une progression soit effectuée ou qu'un nombre maximal spécifié de boucles de répartiteur ait été exécuté. Ici, Progrès est défini comme l'achèvement d'une opération d'envoi de message ou d'une opération de réception de message.

LAPI_Msgpoll est destiné à être utilisé lorsque les interruptions sont désactivées. Si l'utilisateur n'a pas explicitement désactivé les interruptions, LAPI désactive temporairement le mode d'interruption alors qu'il se trouve dans cette sous-routine car le répartiteur est appelé, ce qui traitera les opérations de réception en attente. Si le répartiteur LAPI boucle pour le nombre maximal de fois spécifié, l'appel renvoie. Si la progression est effectuée avant le nombre maximal, l'appel est renvoyé immédiatement. Dans les deux cas, LAPI signalera le statut via une structure de données transmise par référence.

La structure lapi_msg_info_t contient une zone d'indicateurs (status), qui est de type lapi_msg_state_t. Les indicateurs de la zone Statut sont définis comme suit:
LAPI_DISP_CNTR
Si le répartiteur a une boucle Cnt en boucle sans faire de progrès
LAPI_SEND_COMPLETE
Si une opération d'envoi de message est terminée
LAPI_RECV_COMPLETE
Si une opération de réception de message est terminée
LAPI_BOTH_COMPLETE
Si une opération d'envoi de message et une opération de réception de message sont terminées
LAPI_POLLING_NET
Si une autre unité d'exécution est déjà en cours d'interrogation, le réseau ou la mémoire partagée est terminée

Paramètres

ENTREE
Hndl
Indique le descripteur LAPI.
Cnt
Indique le nombre maximal de fois que le répartiteur doit effectuer une boucle sans progression avant de revenir.
Informations
Indique une structure de statut qui contient le résultat de l'appel LAPI_Msgpoll() .
Sortie
Ierror
Indique un code retour FORTRAN. C'est toujours le dernier paramètre.

C Exemples

Pour boucler le répartiteur au plus 1000 fois, vérifiez les progrès réalisés:
{

    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                                     */
    }


}

Valeurs renvoyées

LAPI_SUCCESS
Indique que l'appel de fonction a abouti.
LAPI_ERR_HNDL_INVALID
Indique que le Hndl transmis n'est pas valide (non initialisé ou à l'état arrêté).
LAPI_ERR_MSG_INFO_NULL
Indique que le pointeur info est NULL (en C) ou que la valeur de info est LAPI_ADDR_NULL (en FORTRAN).

Emplacement

/usr/lib/liblapi_r.a