Routines de communication entre processus
La communication entre processus PVM s'effectue par le mode message (message passing). Leur envoi est fait en 3 étapes:
Remarques
call pvmfmkbuf(encoding, bufid) : crée un nouveau buffer vide et définit le codage pour l'envoi des données. La valeur de retour bufid permet d'identifier le buffer créé.
call pvmffreebuf(bufid, info) : libère le buffer bufid
call pvmfinitsend(encoding, bufid) : nettoie le buffer d'envoie et en crée un nouveau dans lequel les messages pourront être compactés. Le codage pour compacter les données est défini par le paramètre encoding
call pvmfgetrbuf(bufid) et call pvmfgetsbuf(bufid) : obtention de l'identificateur du buffer actif bufid, respectivement, en réception et en émission .
call pvmfsetsbuf(bufid, oldbuf) et call pvmfsetrbuf(bufid, oldbuf) : Modification du buffer actif. bufid est le nouveau buffer actif. Les procédures renvoient l'identificateur oldbuf du précédent buffer actif.
call pvmfpack(what,xp,nitem,stride,info) : pvmfpack permet de compacter, dans le buffer actif d'envoi, un tableau de type donné. Un message contenant des données de type différents peut être ainsi construit par appels successifs à la procédure pvmfpack.
call pvmfunpack(what,xp,nitem,stride,info) : symétriquement, pvmfunpack permet d'effectuer le décompactage des informations contenus dans le buffer actif en réception. Les données décompactées sont alors rangées dans le tableau xp.
call pvmfsend(tid, msgtag, info) : libelle le message avec msgtag puis envoie le message au processus tid.
call pvmfmcast(ntask, tids, msgtag, info) : permet de diffuser le message aux ntask processus spécifiés dans le tableau d'entier tids.
call pvmfnrecv(tid, msgtag, bufid) : effectue une réception non bloquante. Si le message de libellé msgtag, en provenance du processus tid, n'est pas arrivé alors bufid=0. Si le message est arrivé alors le message est rangé dans un nouveau buffer bufid créé automatiquement. Si tid=-1 alors le premier message de libellé msgtag en provenance de n'importe lequel des processus sera éligible. Si msgtag =-1 alors le libellé du message est quelconque.
call pvmfrecv(tid, msgtag, bufid) : effectue une réception bloquante.
call pvmfprobe(tid, msgtag, bufid) : si le message n'est pas arrivé alors bufid=0. Sinon un numéro de buffer est retourné mais le message n'est pas reçu.
call pvmfbufinfo(bufid, bytes, msgtag, tid, info) : renvoie les caractéristiques du message identifié par bufid: libellé msgtag, processus source tid, longueur en bytes. pvmfbufinfo est particulièrement utile en conjonction avec pvmfprobe ou lorsque le libellé (ou la source) du message à recevoir n'avait pas été spécifié.