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 ierror

Beschreibung

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