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
- 指定要将数据复制到其中的目标任务上的地址。 如果 len 是 0,那么此参数的值可以是 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
- 奥格阿德尔
- 指定要从其复制数据的源任务上的地址。 如果 len 是 0,那么此参数的值可以是 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