LAPI_Getv Sous-routine
Objectif
Copie des vecteurs de données d'une tâche distante vers une tâche locale.
Bibliothèque
Bibliothèque de disponibilité (liblapi_r.a)
Syntaxe C
#include <lapi.h>
int LAPI_Getv(hndl, tgt, tgt_vec, org_vec, tgt_cntr, org_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;
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_GETV(hndl, tgt, tgt_vec, org_vec, tgt_cntr, org_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
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)
Cette sous-routine est la version vectorielle de l'appel LAPI_Get . Utilisez LAPI_Getv pour transférer des vecteurs de données de la tâche cible vers la tâche d'origine. Les descriptions de vecteurs d'origine et de cible se trouvent dans l'espace adresse de la tâche d'origine. 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 cible.
Le programme appelant ne peut pas supposer que la mémoire tampon d'origine peut être modifiée ou que le contenu des mémoires tampon d'origine sur la tâche d'origine est prêt à être utilisé lors du retour de la 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 le compteur cible (tgt_cntr) 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 après 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.
- Les types de vecteur org_vec->type_vecteur et Tgt_vec->type_vecteur doivent être identiques.
- Si un vecteur strié est transféré, la taille de chaque bloc ne doit pas être supérieure à la taille de stride en octets.
- La longueur de tout vecteur désigné par tgt_vec doit être égale à la longueur du vecteur désigné par org_vec.
LAPI ne recherche pas les régions qui se chevauchent parmi les vecteurs, que ce soit à l'origine ou à la cible. Si les régions qui se chevauchent existent du côté de l'origine, le contenu de la mémoire tampon d'origine n'est pas défini après l'opération.
Voir LAPI_Amsendv pour plus de détails sur la communication à l'aide de différents types de vecteur LAPI. (LAPI_Getv ne prend pas en charge le type LAPI_GEN_GENERIC .)
Paramètres
- ENTREE
- hndl
- Indique le descripteur LAPI.
- tgt
- Indique l'ID de la tâche cible. La valeur de ce paramètre doit être comprise dans la plage 0 < = tgt < NUM_TASKS.
- v_tg
- Pointe vers la description du 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é une fois que la mémoire tampon de données sur la cible peut être modifiée. Si la valeur de 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 (en FORTRAN). Le compteur d'origine est incrémenté une fois que les données arrivent à l'origine. Si la valeur de ce paramètre est NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN), le compteur d'origine n'est pas mis à jour.
- Sortie
- erreur ierror
- Indique un code retour FORTRAN. Il s'agit toujours du dernier paramètre.
Exemples C
{
/* retrieve a remote data buffer address for data to transfer, */
/* such as through LAPI_Address_init */
/* task that calls LAPI_Getv 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 write to */
/* 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 transfer */
/* from vec->info[i] */
/* For LAPI_GEN_IOVECTOR, num_vecs, vec_type, and len must be */
/* the same */
LAPI_Getv(hndl, tgt, tgt_vec, org_vec, tgt_cntr, org_cntr);
/* tgt_cntr and org_cntr can both be NULL */
/* data will be retrieved as follows: */
/* org_vec->len[0] bytes will be retrieved from */
/* tgt_vec->info[0] and written to org_vec->info[0] */
/* org_vec->len[1] bytes will be retrieved from */
/* tgt_vec->info[1] and written to org_vec->info[1] */
.
.
.
/* org_vec->len[NUM_VECS-1] bytes will be retrieved */
/* from tgt_vec->info[NUM_VECS-1] and written to */
/* org_vec->info[NUM_VECS-1] */
}
Pour des exemples d'autres types de vecteurs, voir LAPI_Amsendv.Valeurs renvoyées
- SUCCÈS_LAPIEU
- 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é).
- NOMBRE_ERREUR_ORG_PÉREMPTION
- 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 bande org_vec est inférieure à la taille de bloc.
- ADRESSE_ORG_ERR_LAPI_ADR
- Indique que certaines org_vec->info[i] sont NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN). mais la longueur correspondante (org_vec->len[i]) n'est pas 0.
- LONGUEUR_VEC_ORG_ERREUR_LAPI_FR
- Indique que la somme totale de toutes les org_vec->len[i] (où [i] est comprise dans la plage 0 < = i < = org_vec->num_vecs) 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).
- TYPE_VEC_ORG_ERREUR_LAPI_
- Indique que le org_vec->type_vecteur n'est pas valide.
- LAPI_ERR_STRIDE_ORG_VEC_ADDR_NULL
- Indique que l'adresse de base du vecteur strié 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).
- LAPI_ERR_TGT
- Indique que le tgt transmis est en dehors de la plage de tâches définie dans le travail.
- ET_ERREUR_LAPI_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é.
- LAPI_ERR_TGT_STRIDE
- Indique que la foulée de tgt_vecest inférieure à sa taille de bloc.
- ADRESSE_VECT_ERR_LAPI_TGT_ADR
- 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.
- LONGUEUR_VECT_ERR_PÉREMPTION
- Indique que la somme de tgt_vec->len est supérieure à la valeur de la constante LAPI LAPI_MAX_MSG_SZ.
- CADRE_ERR_TGT_VEC_NULL
- Indique que tgt_vec est NULL (en C) ou LAPI_ADDR_NULL (en FORTRAN).
- TYPE_VECT_ERR_LAPI_TGT_TYPE
- Indique que le 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[]).
- VEC_ERR_LAPI_NUM_DIFF
- Indique que org_vec et Tgt_vec ont des nombre_vecsdifférents.
- VECT_ERR_VECT_DIFF
- Indique que org_vec et Tgt_vec ont des types de vecteur différents (type_vecteur).
Emplacement
- /usr/lib/liblapi_r.a