LAPI_Putv Sous-routine
Objectif
Transfère les vecteurs de données d'une tâche locale vers une tâche distante.
Bibliothèque
Bibliothèque de disponibilité (liblapi_r.a)
Syntaxe C
#include <lapi.h>
int LAPI_Putv(hndl, tgt, tgt_vec, org_vec, tgt_cntr, org_cntr, cmpl_cntr)
lapi_handle_t hndl;
uint tgt;
lapi_vec_t *tgt_vec;
lapi_vec_t *org_vec;
lapi_cntr_t *tgt_cntr;
lapi_cntr_t *org_cntr;
lapi_cntr_t *cmpl_cntr;
typedef struct {
lapi_vectype_t vec_type; /* operation code */
uint num_vecs; /* number of vectors */
void **info; /* vector of information */
ulong *len; /* vector of lengths */
} lapi_vec_t;Syntaxe FORTRAN
include 'lapif.h'
LAPI_PUTV(hndl, tgt, tgt_vec, org_vec, tgt_cntr, org_cntr , cmpl_cntr, ierror)
INTEGER hndl
INTEGER tgt
INTEGER (KIND=LAPI_ADDR_TYPE) :: tgt_vec
TYPE (LAPI_VEC_T) :: org_vec
INTEGER (KIND=LAPI_ADDR_TYPE) :: tgt_cntr
TYPE (LAPI_CNTR_T) :: org_cntr
TYPE (LAPI_CNTR_T) :: cmpl_cntr
INTEGER ierrorLa version 32 bits du type LAPI_VEC_T est définie comme suit:TYPE LAPI_VEC_T
SEQUENCE
INTEGER(KIND = 4) :: vec_type
INTEGER(KIND = 4) :: num_vecs
INTEGER(KIND = 4) :: info
INTEGER(KIND = 4) :: len
END TYPE LAPI_VEC_TLa version 64 bits du type LAPI_VEC_T est définie comme suit:TYPE LAPI_VEC_T
SEQUENCE
INTEGER(KIND = 4) :: vec_type
INTEGER(KIND = 4) :: num_vecs
INTEGER(KIND = 8) :: info
INTEGER(KIND = 8) :: len
END TYPE LAPI_VEC_TDescriptif
Communication point à point Type of call: (non bloquante)
LAPI_Putv est la version vectorielle de l'appel LAPI_Put . Utilisez cette sous-routine pour transférer des vecteurs de données de la tâche d'origine vers la tâche cible. Les descriptions de vecteurs d'origine et les descriptions de vecteurs cible se trouvent dans l'espace adresse de la tâche origin . Toutefois, les valeurs spécifiées dans le tableau info du vecteur cible doivent être des adresses dans l'espace adresse de la tâche target .
Le programme appelant Impossible suppose que la mémoire tampon d'origine peut être modifiée ou que le contenu des mémoires tampons cible de la tâche cible est prêt à être utilisé lors du retour de fonction. Une fois le compteur d'origine (Org_cntr) incrémenté, les mémoires tampon d'origine peuvent être modifiées par la tâche d'origine. Une fois que le compteur cible (Tgt_cntr) est incrémenté, les mémoires tampon cible peuvent être modifiées par la tâche cible. Si vous fournissez un compteur d'achèvement (Cmpl_cntr), il est incrémenté à l'origine une fois que le compteur cible (Tgt_cntr) a été incrémenté à la cible. Si les valeurs de l'un des compteurs ou des adresses de compteur sont NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN), le transfert de données a lieu, mais les incréments de compteur correspondants n'ont pas lieu.
Si un vecteur strié est transféré, la taille de chaque bloc ne doit pas être supérieure à la taille de segment en octets.
La longueur de n'importe quel vecteur désigné par Org_vec doit être égale à la longueur du vecteur correspondant désigné par Tgt_vec.
LAPI ne vérifie pas les régions qui se chevauchent entre les vecteurs, soit à l'origine, soit à la cible. Si les régions qui se chevauchent existent sur le côté cible, le contenu de la mémoire tampon cible n'est pas défini après l'opération.
Pour plus d'informations sur l'utilisation des différents types de vecteur, voir LAPI_Amsendv . (LAPI_Putv ne prend pas en charge le type LAPI_GEN_GENERIC .)
Paramètres
- ENTREE
- Hndl
- Indique le descripteur LAPI.
- Tgt
- Indique l'ID tâche de la tâche cible. La valeur de ce paramètre doit être comprise dans la plage 0 < = tgt < NUM_TASKS.
- Tgt_vec
- Pointe vers la description de vecteur cible.
- Org_vec
- Pointe vers la description du vecteur d'origine.
- Entrée-sortie
- Tgt_cntr
- Indique l'adresse du compteur cible. Le compteur cible est incrémenté à la fin du message. Si ce paramètre est NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN), le compteur cible n'est pas mis à jour.
- Org_cntr
- Indique l'adresse du compteur d'origine (en C) ou le compteur d'origine (dans FORTRAN). Le compteur d'origine est incrémenté à la disponibilité de la mémoire tampon. Si ce paramètre est NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN), le compteur d'origine n'est pas mis à jour.
- Cmpl_cntr
- Indique l'adresse du compteur d'achèvement (en C) ou le compteur d'achèvement (dans FORTRAN) qui est le reflet de Tgt_cntr. Le compteur d'achèvement est incrémenté à l'origine après l'incrémentation de Tgt_cntr . Si ce paramètre est NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN), le compteur d'achèvement n'est pas mis à jour.
- Sortie
- Ierror
- Indique un code retour FORTRAN. C'est toujours le dernier paramètre.
C Exemples
{
/* retrieve a remote data buffer address for data to transfer, */
/* such as through LAPI_Address_init */
/* task that calls LAPI_Putv sets up both org_vec and tgt_vec */
org_vec->num_vecs = NUM_VECS;
org_vec->vec_type = LAPI_GEN_IOVECTOR;
org_vec->len = (unsigned long *)
malloc(NUM_VECS*sizeof(unsigned long));
org_vec->info = (void **) malloc(NUM_VECS*sizeof(void *));
/* each org_vec->info[i] gets a base address on the origin task */
/* each org_vec->len[i] gets the number of bytes to transfer */
/* from org_vec->info[i] */
tgt_vec->num_vecs = NUM_VECS;
tgt_vec->vec_type = LAPI_GEN_IOVECTOR;
tgt_vec->len = (unsigned long *)
malloc(NUM_VECS*sizeof(unsigned long));
tgt_vec->info = (void **) malloc(NUM_VECS*sizeof(void *));
/* each tgt_vec->info[i] gets a base address on the target task */
/* each tgt_vec->len[i] gets the number of bytes to write to vec->info[i] */
/* For LAPI_GEN_IOVECTOR, num_vecs, vec_type, and len must be the same */
LAPI_Putv(hndl, tgt, tgt_vec, org_vec, tgt_cntr, org_cntr, compl_cntr);
/* tgt_cntr, org_cntr and compl_cntr can all be NULL */
/* data will be transferred as follows: */
/* org_vec->len[0] bytes will be retrieved from */
/* org_vec->info[0] and written to tgt_vec->info[0] */
/* org_vec->len[1] bytes will be retrieved from */
/* org_vec->info[1] and written to tgt_vec->info[1] */
.
.
.
/* org_vec->len[NUM_VECS-1] bytes will be retrieved */
/* from org_vec->info[NUM_VECS-1] and written to */
/* tgt_vec->info[NUM_VECS-1] */
}
Voir l'exemple dans LAPI_Amsendv pour plus d'informations sur les autres types de vecteur.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_ORG_EXTENT
- Indique que l'extension de org_vec(stride * num_vecs) est supérieure à la valeur de la constante LAPI LAPI_MAX_MSG_SZ.
- LAPI_ERR_ORG_STRIDE
- Indique que la segmentation Org_vec est inférieure à bloc.
- ADRESSE_ERR_ORG_ADRESSE_VECTEUR_ORDINATEUR
- Indique que org_vec->info [ i ] est NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN), mais que sa longueur (org_vec->len [ i ]) n'est pas 0.
- LAPI_ERR_ORG_VEC_LEN
- Indique que la somme de org_vec->len est supérieure à la valeur de la constante LAPI LAPI_MAX_MSG_SZ.
- LAPI_ERR_ORG_VEC_NULL
- Indique que org_vec est NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN).
- LAPI_ERR_ORG_VEC_TYPE
- Indique que Org_vec->Type_vecteur n'est pas valide.
- LAPI_ERR_STRIDE_ORG_VEC_ADDR_NULL
- Indique que l'adresse de vecteur segmentée org_vec->info[ 0 ] est NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN).
- LAPI_ERR_STRIDE_TGT_VEC_ADDR_NULL
- Indique que l'adresse de vecteur segmentée tgt_vec->info[ 0 ] est NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN).
- ERR_ERR_TGT
- Indique que le Tgt transmis ne correspond pas à la plage de tâches définie dans le travail.
- LAPI_ERR_TGT_EXTENSION
- Indique que l'étendue de tgt_vec(stride * num_vecs) est supérieure à la valeur de la constante LAPI LAPI_MAX_MSG_SZ.
- LAPI_ERR_TGT_PURGÉ
- Indique que la sous-routine a été renvoyée tôt car LAPI_Purge_totask() a été appelé.
- ERR_ERR_TGT_STRIDE
- Indique que la segmentation Tgt_vec est inférieure à bloc.
- ADRESSE_ERR_TGT_TGT_V
- Indique que tgt_vec->info[ i ] est NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN), mais que sa longueur (tgt_vec->len[ i ]) n'est pas 0.
- LAPI_ERR_TGT_VEC_LEN
- Indique que la somme de tgt_vec->len est supérieure à la valeur de la constante LAPI LAPI_MAX_MSG_SZ.
- LAPI_ERR_TGT_VEC_NULL
- Indique que tgt_vec est NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN).
- LAPI_ERR_TGT_VEC_TYPE
- Indique que Tgt_vec->Type_vecteur n'est pas valide.
- LAPI_ERR_VEC_LEN_DIFF
- Indique que Org_vec et Tgt_vec ont des longueurs différentes (Len [ ]).
- NUMÉRO_ERR_ERR_PORTABLE
- Indique que Org_vec et Tgt_vec ont des Num_vecsdifférents.
- TYPE_ERR_ERR_PORTABLE
- Indique que Org_vec et Tgt_vec ont des types de vecteurs différents (Type_vecteur).
Emplacement
- /usr/lib/liblapi_r.a