LAPI_Put Subroutine
Zweck
Überträgt Daten von einer lokalen Task an eine ferne Task
Bibliothek
Verfügbarkeitsbibliothek (liblapi_r.a)
C-Syntax
#include <lapi.h>
int LAPI_Put(hndl, tgt, len, tgt_addr, org_addr, tgt_cntr, org_cntr, cmpl_cntr)
lapi_handle_t hndl;
uint tgt;
ulong len;
void *tgt_addr;
void *org_addr;
lapi_cntr_t *tgt_cntr;
lapi_cntr_t *org_cntr;
lapi_cntr_t *cmpl_cntr;FORTRAN-Syntax
include 'lapif.h'
int LAPI_PUT(hndl, tgt, len, tgt_addr, org_addr, tgt_cntr, org_cntr, ierror)
INTEGER hndl
INTEGER tgt
INTEGER (KIND=LAPI_LONG_TYPE) :: len
INTEGER (KIND=LAPI_ADDR_TYPE) :: tgt_addr
INTEGER org_addr
INTEGER (KIND=LAPI_ADDR_TYPE) :: tgt_cntr
TYPE (LAPI_CNTR_T) :: org_cntr
TYPE (LAPI_CNTR_T) :: cmpl_cntr
INTEGER ierrorBeschreibung
Type of call: Punkt-zu-Punkt-Kommunikation (nicht blockierend)
Mit dieser Subroutine können Sie Daten von einer lokalen (Ursprungs-) Task an eine ferne (Ziel-) Task übertragen. Der Ursprungszähler wird in der Ursprungstask nach Verfügbarkeit des Ursprungspuffers erhöht. Der Zielzähler wird auf dem Ziel erhöht und der Abschlusszähler wird bei der ursprünglichen Task nach Abschluss der Nachricht erhöht. Da es keinen Fertigstellungshandler gibt, sind Nachrichtenvervollständigung und Zielpufferverfügbarkeit in diesem Fall identisch.
Dies ist ein nicht blockierender Aufruf. Der Aufrufende kann nicht nimmt an, dass die Datenübertragung nach der Rückgabe der Funktion abgeschlossen wurde. Stattdessen sollten Zähler verwendet werden, um sicherzustellen, dass die oben definierten Pufferzugriffe korrekt sind.
Beachten Sie, dass eine Null-Byte-Nachricht keine Daten überträgt, aber sie hat dieselbe Semantik in Bezug auf Zähler wie jede andere Nachricht.
Parameter
- INPUT
- Hndl
- Gibt die LAPI-Kennung an.
- Tgt
- Gibt die Task-ID der Zieltask an Der Wert dieses Parameters muss im Bereich 0 < = tgt < NUM_TASKSliegen.
- Länge
- Gibt die Anzahl der zu übertragenden Byte an. Dieser Parameter muss im Bereich 0 < = len < = der Wert der LAPI-Konstante LAPI_MAX_MSG_SZliegen.
- Zieladresse
- Gibt die Adresse der Zieltask an, in die Daten kopiert werden sollen Wenn len 0ist, kann der Wert dieses Parameters NULL (in C) oder LAPI_ADDR_NULL (in FORTRAN) sein.
- Organisationsadresse
- Gibt die Adresse der Ursprungstask an, von der Daten kopiert werden. Wenn len 0ist, kann der Wert dieses Parameters NULL (in C) oder LAPI_ADDR_NULL (in FORTRAN) sein.
- Ein-/Ausgabe
- Tgt_cntr
- Gibt die Zielzähleradresse an Der Zielzähler wird nach Abschluss der Nachricht erhöht. Wenn dieser Parameter NULL (in C) oder LAPI_ADDR_NULL (in FORTRAN) ist, wird der Zielzähler nicht aktualisiert.
- Org_cntr
- Gibt die Adresse des Ursprungszählers (in C) oder den Ursprungszähler (in FORTRAN) an. Der Ursprungszähler wird bei Pufferverfügbarkeit erhöht. Wenn dieser Parameter NULL (in C) oder LAPI_ADDR_NULL (in FORTRAN) ist, wird der Ursprungszähler nicht aktualisiert.
- cmpl_cntr
- Gibt die Adresse des Abschlusszählers (in C) oder den Abschlusszähler (in FORTRAN) an, der eine Reflexion von Tgt_cntrist. Der Abschlusszähler wird am Ursprung erhöht, nachdem Tgt_cntr erhöht wurde. Wenn dieser Parameter NULL (in C) oder LAPI_ADDR_NULL (in FORTRAN) ist, wird der Abschlusszähler nicht aktualisiert.
- Ausgabe
- Fehler
- Gibt einen FORTRAN-Rückkehrcode an Dies ist immer der letzte Parameter.
C-Beispiele
{
/* initialize the table buffer for the data addresses */
/* get remote data buffer addresses */
LAPI_Address_init(hndl,(void *)data_buffer,data_buffer_list);
.
.
.
LAPI_Put(hndl, tgt, (ulong) data_len, (void *)(data_buffer_list[tgt]),
(void *) data_buffer, tgt_cntr, org_cntr, compl_cntr);
/* transfer data_len bytes from local address data_buffer. */
/* write the data starting at address data_buffer_list[tgt] on */
/* task tgt. tgt_cntr, org_cntr, and compl_cntr can be NULL. */
}
Rückgabewerte
- LAPI_ERFOLG
- Gibt an, dass der Funktionsaufruf erfolgreich ausgeführt wurde.
- LAPI_ERR_DATA_LEN
- Gibt an, dass der Wert von ' len ' größer als der Wert der LAPI-Konstanten LAPI_MAX_MSG_SZist.
- LAPI_ERR_HNDL_UNGÜLTIG
- Gibt an, dass die übergebene Hndl ungültig ist (nicht initialisiert oder beendet).
- LAPI_ERR_ORG_ADDR_NULL
- Gibt an, dass der übergebene Parameter org_addr NULL (in C) oder LAPI_ADDR_NULL (in FORTRAN) ist, aber len größer als 0ist.
- LAPI_ERR_TGT
- Gibt an, dass die übergebene Tgt außerhalb des im Job definierten Taskbereichs liegt.
- LAPI_ERR_TGT_ADDR_NULL
- Gibt an, dass der übergebene Parameter tgt_addr NULL (in C) oder LAPI_ADDR_NULL (in FORTRAN) ist, aber len größer als 0ist.
- LAPI_ERR_TGT_GELÖSCHT
- Gibt an, dass die Subroutine früh zurückgegeben wurde, weil LAPI_Purge_totask() aufgerufen wurde.
Position
- /usr/lib/liblapi_r.a