LAPI_Get 子例程

用途

将数据从远程任务复制到本地任务。

可用性库 (liblapi_r.a)

C 语法

#include <lapi.h>
 
int LAPI_Get(hndl, tgt, len, tgt_addr, org_addr, tgt_cntr, org_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;

FORTRAN 语法

include 'lapif.h'
 
LAPI_GET(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 (KIND=LAPI_ADDR_TYPE) :: org_addr
INTEGER (KIND=LAPI_ADDR_TYPE) :: tgt_cntr
TYPE (LAPI_CNTR_T) :: org_cntr
INTEGER ierror

描述

Type of call: 点到点通信 (非阻塞)

使用此子例程将数据从远程 (目标) 任务传输到本地 (源) 任务。 请注意,在此情况下,源任务实际上是数据的 接收器 。 这种传输类型上的差异使计数器行为与发送到目标的正常情况略有不同。

在源缓冲区可用时,源缓冲区仍将在源任务上递增。 但在此情况下,一旦数据传输完成,源缓冲区将变为可用。 同样地,一旦目标缓冲区可用,目标计数器将递增。 在此情况下,目标缓冲区可用性指的是不再需要访问缓冲区中的数据的 LAPI。

这是一个非阻塞的调用。 调用者 不能 假定在返回该函数时已完成数据传输。 相反,应该使用计数器来确保上面定义的正确缓冲区地址。

请注意,零字节消息不会传输数据,但它对于计数器的语义与任何其他消息的语义相同。

参数

INPUT
恩德尔
指定 LAPI 句柄。
特格特
指定目标任务的任务标识,该目标任务是数据的源。 The value of this parameter must be in the range 0 <= 哥特 < NUM_TASKS.
LEN
指定要复制的数据的字节数。 This parameter must be in the range 0 <= <= the value of LAPI constant LAPI_MAX_MSG_SZ.
tgt_addr
指定该数据源的目标缓冲区地址。 如果 len0,那么此参数的值可以是 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
输入/输出
tgt_cntr
指定目标计数器地址。 一旦可修改目标上的数据缓冲区,目标计数器就会递增。 如果此参数的值为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) ,那么不会更新目标计数器。
奥尔格-奇特尔
指定源计数器地址 (以 C 为单位) 或源计数器 (以 FORTRAN 为单位)。 在数据到达源后,源计数器将递增。 如果此参数的值为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) ,那么不会更新源计数器。
输出
奥格阿德尔
指定将接收到的数据复制到的本地缓冲区地址。 如果 len0,那么此参数的值可以是 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
国际错误
指定 FORTRAN 返回码。 这始终是最后一个参数。

C 示例


{
    /* initialize the table buffer for the data addresses */
    
    /* get remote data buffer addresses                   */
    LAPI_Address_init(hndl,(void *)data_buffer,data_buffer_list);
    .    
    . 
    .    
    LAPI_Get(hndl, tgt, (ulong) data_len, (void *) (data_buffer_list[tgt]),
             (void *) data_buffer, tgt_cntr, org_cntr);  

    /* retrieve data_len bytes from address data_buffer_list[tgt] on task tgt. */
    /* write the data starting at address data_buffer. tgt_cntr and org_cntr   */
    /* can be NULL. */ 
}

返回值

LAPI_SUCCESS
指示已成功完成函数调用。
LAPI_ERR_DATA_LEN
指示 udata_len 的值大于 LAPI 常量 LAPI_MAX_MSG_SZ的值。
LAPI_ERR_HNDL_INVALID
指示传入的 恩德尔 无效 (未初始化或处于 "已终止" 状态)。
LAPI_ERROR_ORG_ADDR_NULL
指示传入的 org_addr 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) ,但 len 大于 0
LAPI_ERR_TGT
指示传入的 特格特 在作业中定义的任务范围之外。
LAPI_ERR_TGT_ADDR_NULL
指示传入的 tgt_addr 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) ,但 len 大于 0
已清除 LAPI_ERR_TGT_CLEAR
指示由于调用了 LAPI_Purge_totask() 而提前返回了子例程。

位置

/usr/lib/liblapi_r.a