LAPI_Put 子例程

用途

将数据从本地任务传输到远程任务。

可用性库 (liblapi_r.a)

C 语法

#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 语法

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

描述

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

使用此子例程将数据从本地 (源) 任务传输到远程 (目标) 任务。 源计数器将根据源缓冲区可用性在源任务上递增。 目标计数器将在目标上递增,而完成消息时,完成计数器将在源任务上递增。 由于没有完成处理程序,因此在此情况下,消息完成和目标缓冲区可用性相同。

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

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

参数

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 中)。
奥格阿德尔
指定要从其复制数据的源任务上的地址。 如果 len0,那么此参数的值可以是 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
输入/输出
tgt_cntr
指定目标计数器地址。 目标计数器将在消息完成时递增。 如果此参数为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) ,那么不会更新目标计数器。
奥尔格-奇特尔
指定源计数器地址 (以 C 为单位) 或源计数器 (以 FORTRAN 为单位)。 在缓冲区可用性时,源计数器将递增。 如果此参数为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) ,那么不会更新源计数器。
cmpl_cntr
指定反映 tgt_cntr的完成计数器地址 (以 C 为单位) 或完成计数器 (以 FORTRAN 为单位)。 在 tgt_cntr 递增后,完成计数器将在源处递增。 如果此参数为 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_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.   */

}

返回值

LAPI_SUCCESS
指示已成功完成函数调用。
LAPI_ERR_DATA_LEN
指示 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