LAPI_Xfer 子例程
用途
充当 LAPI 数据传输函数的包装程序函数。
库
可用性库 (liblapi_r.a)
C 语法
#include <lapi.h>
int LAPI_Xfer(hndl, xfer_cmd)
lapi_handle_t hndl;
lapi_xfer_t *xfer_cmd;
typedef struct {
uint src; /* Target task ID */
uint reason; /* LAPI return codes */
ulong reserve[6]; /* Reserved */
} lapi_sh_info_t;
typedef void (scompl_hndlr_t)(lapi_handle_t *hndl, void *completion_param,
lapi_sh_info_t *info);
FORTRAN 语法
include 'lapif.h'
LAPI_XFER(hndl, xfer_cmd, ierror)
INTEGER hndl
TYPE (fortran_xfer_type) :: xfer_cmd
INTEGER ierror描述
Type of call: 点到点通信 (非阻塞)
LAPI_Xfer 子例程提供以下子例程功能的超集: LAPI_Amsend, LAPI_Amsendv, LAPI_Put, LAPI_Putv, LAPI_Get, LAPI_Getv和 LAPI_Rmw。 此外, LAPI_Xfer 还提供数据收集/散射程序 (DGSP) 消息传输。
在 C 中, LAPI_Xfer 命令传递一个指向并集的指针。 它检查联合的第一个成员 Xfer_type,以确定传输类型,并确定传递的联合成员。 LAPI_Xfer 期望设置所标识的联合成员的每个字段。 它不会检查或修改所标识的并集成员之外的任何内存。 LAPI_Xfer 将所有联合成员 ( status除外) 视为只读数据。
- 远程地址字段将展开为类型为 lapi_long_t,这对于 64 位地址而言足够长。 这允许一个 32 位任务将数据发送到 64 位地址,这在客户机/服务器程序中可能很重要。
- LAPI_Xfer 允许将源计数器替换为发送完成回调。
- LAPI_Xfer 用于使用 LAPI 的数据收集/散点程序 (DGSP) 接口传输数据。
typedef union {
lapi_xfer_type_t Xfer_type;
lapi_get_t Get;
lapi_am_t Am;
lapi_rmw_t Rmw;
lapi_put_t Put;
lapi_getv_t Getv;
lapi_putv_t Putv;
lapi_amv_t Amv;
lapi_amdgsp_t Dgsp;
} lapi_xfer_t;虽然 lapi_xfer_t 结构仅适用于 LAPI_Xfer的 C 版本,但下表包含 C 数据类型的 FORTRAN 等效项。| Xfer_type 的值 (C 或 FORTRAN) | 由 LAPI_Xfer (C) 解释的联合成员 | fortran_xfer_type 的值 (FORTRAN) |
|---|---|---|
| LAPI_AM_XFER | lapi_am_t | LAPI_AM_T |
| LAPI_AMV_XFER | lapi_amv_t | LAPI_AMV_T |
| LAPI_DGSP_XFER | lapi_amdgsp_t | LAPI_AMDGSP_T |
| LAPI_GET_XFER | lapi_get_t | LAPI_GET_T |
| LAPI_GETV_XFER | lapi_getv_t | LAPI_GETV_T |
| LAPI_PUT_XFER | lapi_put_t | LAPI_PUT_T |
| LAPI_PUTV_XFER | lapi_putv_t | LAPI_PUTV_T |
| LAPI_RMW_XFER | lapi_rmw_t | LAPI_RMW_T |
lapi_am_t 详细信息
| lapi_am_t 字段名称 (C) | lapi_am_t 字段类型 (C) | 等效 FORTRAN 数据类型 | 等效的 LAPI_Amsend 参数 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | 在 C 中隐式 FORTRAN 中的 LAPI_Xfer 值: LAPI_AM_XFER |
| 标志 | int | INTEGER(KIND = 4) | 无 FORTRAN 中的 LAPI_Xfer 参数: flags |
| 特格特 | uint | INTEGER(KIND = 4) | 特格特 |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN 中的 LAPI_Xfer 参数: pad |
| hdr_hdl | lapi_long_t | INTEGER(KIND = 8) | hdr_hdl |
| uhdr_len | uint | INTEGER(KIND = 4) | uhdr_len |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN (64 位) 中的 LAPI_Xfer 参数: pad2 |
| 乌赫德尔 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
乌赫德尔 |
| 乌数据 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
乌数据 |
| 乌德亚伦 | ulong | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
乌德亚伦 |
| 什德尔尔 | scompl_hndlr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: shdlr |
| 信息 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: sinfo |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| 奥尔格-奇特尔 | lapi_cntr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
奥尔格-奇特尔 |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
cmpl_cntr |
lapi_amv_t 详细信息
| lapi_amv_t 字段名称 (C) | lapi_amv_t 字段类型 (C) | 等效 FORTRAN 数据类型 | 等效的 LAPI_Amsendv 参数 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | 在 C 中隐式 FORTRAN 中的 LAPI_Xfer 值: LAPI_AMV_XFER |
| 标志 | int | INTEGER(KIND = 4) | 无 FORTRAN 中的 LAPI_Xfer 参数: flags |
| 特格特 | uint | INTEGER(KIND = 4) | 特格特 |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN 中的 LAPI_Xfer 参数: pad |
| hdr_hdl | lapi_long_t | INTEGER(KIND = 8) | hdr_hdl |
| uhdr_len | uint | INTEGER(KIND = 4) | uhdr_len |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN (64 位) 中的 LAPI_Xfer 参数: pad2 |
| 乌赫德尔 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
乌赫德尔 |
| 什德尔尔 | scompl_hndlr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: shdlr |
| 信息 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: sinfo |
| 奥尔格韦茨 | lapi_vec_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
奥尔格韦茨 |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN (32 位) 中的 LAPI_Xfer 参数: pad2 |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| 奥尔格-奇特尔 | lapi_cntr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
奥尔格-奇特尔 |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
cmpl_cntr |
lapi_amdgsp_t 详细信息
| lapi_amdgsp_t 字段名称 (C) | lapi_amdgsp_t 字段类型 (C) | 等效 FORTRAN 数据类型 | LAPI_Xfer 使用情况 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | LAPI_DGSP_XFER |
| 标志 | int | INTEGER(KIND = 4) | 此字段允许用户对 LAPI 指定伪指令或提示。 如果您不想使用任何伪指令或提示,那么必须将此字段设置为 0。 请参阅 lapi_amdgsp_t 标志字段 以获取更多信息。 |
| 特格特 | uint | INTEGER(KIND = 4) | 目标任务 |
| 无 | 无 | INTEGER(KIND = 4) | 垫 (仅用于 FORTRAN 的填充对齐) |
| hdr_hdl | lapi_long_t | INTEGER(KIND = 8) | 要在目标上调用的头处理程序 |
| uhdr_len | uint | INTEGER(KIND = 4) | 用户头长度 (处理器的双字大小的倍数) |
| 无 | 无 | INTEGER(KIND = 4) | pad2 (仅适用于 64 位 FORTRAN 的填充对齐) |
| 乌赫德尔 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
指向用户头的指针 |
| 乌数据 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
指向用户数据的指针 |
| 乌德亚伦 | ulong | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
用户数据长度 |
| 什德尔尔 | scompl_hndlr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
发送完成处理程序 (可选) |
| 信息 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
要传递到发送完成处理程序的数据指针 (可选) |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | 目标计数器 (可选) |
| 奥尔格-奇特尔 | lapi_cntr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
源计数器 (可选) |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
完成计数器 (可选) |
| 奇普 | lapi_dg_handle_t | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
已注册的 DGSP 的句柄 |
| 状态 | lapi_status_t | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
要返回的状态 (将来使用) |
| 无 | 无 | INTEGER(KIND = 4) | pad3 (仅适用于 64 位 FORTRAN 的填充对齐) |
当可自由修改原始数据缓冲区时,如果 shdlr 不是 NULL 指针 (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) ,那么将使用发送完成数据 (sinfo) 来调用发送完成处理程序 (shdlr)。
请参阅 将 lapi_am_dgsp_t 用于散射端 DGSP 处理 以获取更多信息。
lapi_amdgsp_t 标志字段
可以使用 | (按位或) 运算符设置一个或多个标志。 始终遵循用户伪指令,如果使用不正确,可能会导致不正确的结果。 适当的提示可能会提高性能,但 LAPI 可能会忽略这些提示。 不适当的提示可能会降低性能,但不会导致不正确的结果。
- USE_TGT_VEC_TYPE
- 指示 LAPI 使用目标矢量的矢量类型 (特克特韦茨)。 换言之, tgt_vec 将解释为类型 lapi_vec_t; 否则,将解释为类型 lapi_lvec_t。 lapi_lvec_t 类型使用 lapi_long_t。 lapi_vec_t 类型使用 void * 或 long。 如果使用一种类型代替另一种类型,那么将出现不正确的结果。
- BUFFER_BOTH_CONTIOUS
- 指示 LAPI 将所有要传输的数据视为连续数据,这可以提高性能。 如果在发送非连续数据时设置此标志,那么数据很可能已损坏。
- LAPI_NOT_USE_BULK_XFER
- 指示 LAPI 不使用批量传输,而不与任务的当前设置相关。
- LAPI_USE_BULK_XFER
- 指示 LAPI 使用批量传输,而不依赖于该任务的当前设置。
通信库可能采用这些提示,也可能不采用这些提示。
将 lapi_am_dgsp_t 用于散射端 DGSP 处理
LAPI 允许通过使用 lapi_return_info_t 数据类型从头处理程序返回其他信息。 有关 lapi_return_info_t的更多信息,请参阅 RSCT for AIX 5L: LAPI Programming Guide 。 在传输类型为 lapi_am_dgsp_t的情况下,此机制可用于指示 LAPI 运行用户 DGSP 以将数据分散到接收端。
要使用此机制,请通过用户头处理程序的 msg_len 成员将 lapi_return_info_t * 指针传递回 LAPI。 所传递结构的 dgsp_handle 成员必须指向已在接收端上注册的 DGSP 描述。 请参阅 LAPI_Util 和 RSCT for AIX 5L: LAPI Programming Guide ,以获取有关构建和注册 DGSP 的详细信息。
lapi_get_t 详细信息
| lapi_get_t 字段名称 (C) | lapi_get_t 字段类型 (C) | 等效 FORTRAN 数据类型 | 等效的 LAPI_Get 参数 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | 在 C 中隐式 FORTRAN 中的 LAPI_Xfer 值: LAPI_GET_XFER |
| 标志 | int | INTEGER(KIND = 4) | 无 FORTRAN 中的 LAPI_Xfer 参数: flags |
| 特格特 | uint | INTEGER(KIND = 4) | 特格特 |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN 中的 LAPI_Xfer 参数: pad |
| tgt_addr | lapi_long_t | INTEGER(KIND = 8) | tgt_addr |
| 奥格阿德尔 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
奥格阿德尔 |
| LEN | ulong | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
LEN |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| 奥尔格-奇特尔 | lapi_cntr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
奥尔格-奇特尔 |
| 钦德尔 | compl_hndlr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: 钦德尔 |
| 信息 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: cinfo |
lapi_getv_t 详细信息
| lapi_getv_t 字段名称 (C) | lapi_getv_t 字段类型 (C) | 等效 FORTRAN 数据类型 | 等效的 LAPI_Getv 参数 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | 在 C 中隐式 FORTRAN 中的 LAPI_Xfer 值: LAPI_GETV_XFER |
| 标志 | int | INTEGER(KIND = 4) | 无 FORTRAN 中的 LAPI_Xfer 参数: flags |
| 特格特 | uint | INTEGER(KIND = 4) | 特格特 |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN (64 位) 中的 LAPI_Xfer 参数: pad |
| 奥尔格韦茨 | lapi_vec_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
奥尔格韦茨 |
| 特克特韦茨 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
特克特韦茨 |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN (32 位) 中的 LAPI_Xfer 参数: pad |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| 奥尔格-奇特尔 | lapi_cntr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
奥尔格-奇特尔 |
| 钦德尔 | compl_hndlr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: 钦德尔 |
| 信息 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: cinfo |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN (32 位) 中的 LAPI_Xfer 参数: pad2 |
当源数据缓冲区已完全到达时,如果 chndlr 不是 NULL 指针 (C) 或 LAPI_ADDR_NULL (FORTRAN) ,那么将使用完成数据 (cinfo) 调用指向完成处理程序 (chndlr) 的指针。 否则,行为与 LAPI_Getv的行为相同。
lapi_put_t 详细信息
| lapi_put_t 字段名称 (C) | lapi_put_t 字段类型 (C) | 等效 FORTRAN 数据类型 | 等效的 LAPI_Put 参数 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | 在 C 中隐式 FORTRAN 中的 LAPI_Xfer 值: LAPI_PUT_XFER |
| 标志 | int | INTEGER(KIND = 4) | 无 FORTRAN 中的 LAPI_Xfer 参数: flags |
| 特格特 | uint | INTEGER(KIND = 4) | 特格特 |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN 中的 LAPI_Xfer 参数: pad |
| tgt_addr | lapi_long_t | INTEGER(KIND = 8) | tgt_addr |
| 奥格阿德尔 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
奥格阿德尔 |
| LEN | ulong | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
LEN |
| 什德尔尔 | scompl_hndlr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: shdlr |
| 信息 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: sinfo |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| 奥尔格-奇特尔 | lapi_cntr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
奥尔格-奇特尔 |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
cmpl_cntr |
lapi_putv_t 详细信息
| lapi_putv_t 字段名称 (C) | lapi_putv_t 字段类型 (C) | 等效 FORTRAN 数据类型 | 等效的 LAPI_Putv 参数 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | 在 C 中隐式 FORTRAN 中的 LAPI_Xfer 值: LAPI_PUT_XFER |
| 标志 | int | INTEGER(KIND = 4) | 无 FORTRAN 中的 LAPI_Xfer 参数: flags |
| 特格特 | uint | INTEGER(KIND = 4) | 特格特 |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN (64 位) 中的 LAPI_Xfer 参数: pad |
| 什德尔尔 | scompl_hndlr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: shdlr |
| 信息 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: sinfo |
| 奥尔格韦茨 | lapi_vec_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
奥尔格韦茨 |
| 特克特韦茨 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
特克特韦茨 |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN (32 位) 中的 LAPI_Xfer 参数: pad |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| 奥尔格-奇特尔 | lapi_cntr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
奥尔格-奇特尔 |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
cmpl_cntr |
当可自由修改原始数据缓冲区时,如果 shdlr 不是 NULL 指针 (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) ,那么将使用发送完成数据 (sinfo) 来调用发送完成处理程序 (shdlr) 的指针。 否则,行为与 LAPI_Putv的行为相同。
lapi_rmw_t 详细信息
| lapi_rmw_t 字段名称 (C) | lapi_rmw_t 字段类型 (C) | 等效 FORTRAN 数据类型 | 等效的 LAPI_Rmw 参数 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | 在 C 中隐式 FORTRAN 中的 LAPI_Xfer 值: LAPI_RMW_XFER |
| 操作 | Rmw_ops_t | INTEGER(KIND = 4) | 操作 |
| 特格特 | uint | INTEGER(KIND = 4) | 特格特 |
| 大小 | uint | INTEGER(KIND = 4) | 在 C 中隐式 FORTRAN 中的 LAPI_Xfer 参数: size (必须是 32 或 64) |
| 哥特堡 | lapi_long_t | INTEGER(KIND = 8) | 哥特堡 |
| 内瓦尔 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
内瓦尔 |
| prev_tgt_val | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
prev_tgt_val |
| 奥尔格-奇特尔 | lapi_cntr t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
奥尔格-奇特尔 |
| 什德尔尔 | scompl_hndlr_t * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: shdlr |
| 信息 | void * | INTEGER(KIND = 4) (32 位)
INTEGER(KIND = 8) (64 位) |
无 FORTRAN 中的 LAPI_Xfer 参数: shdlr |
| 无 | 无 | INTEGER(KIND = 4) | FORTRAN (32 位) 中的 LAPI_Xfer 参数: pad |
参数
- INPUT
- 恩德尔
- 指定 LAPI 句柄。
- xfer_cmd
- 指定数据传送函数的名称和参数。
- 输出
- 国际错误
- 指定 FORTRAN 返回码。 这始终是最后一个参数。
返回值
- LAPI_SUCCESS
- 指示已成功完成函数调用。
- LAPI_ERR_DATA_LEN
- 指示 udata_len 或 len 的值大于 LAPI 常量 LAPI_MAX_MSG_SZ的值。
- LAPI_ERR_DGSP
- 指示传入的 DGSP 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) 或不是已注册的 DGSP。
- LAPI_ERR_DGSP_ATOM
- 指示 DGSP 具有小于 0 或大于 MAX_ATOM_SIZE的 atom_size 。
- LAPI_ERR_DGSP_BRANCH
- 指示 DGSP 已尝试在代码数组之外进行分支。
- LAPI_ERR_DGSP_CTL
- 指示在无效上下文 (例如,聚集时原子大小为 0 的聚集侧控制或散射侧控制) 中迂到 DGSP 控制指令。
- LAPI_ERR_DGSP_OPC
- 指示 "DGSP 操作码" 无效。
- LAPI_ERR_DGSP_STACK
- 指示 DGSP 的 GOSUB 深度大于分配的堆栈支持的 GOSUB 深度。 堆栈分配由 dgsp-> 深度成员指定。
- LAPI_ERR_HDR_HNDLR_NULL
- 指示传入的 hdr_hdl 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
- LAPI_ERR_HNDL_INVALID
- 指示传入的 恩德尔 无效 (未初始化或处于 "已终止" 状态)。
- LAPI_ERR_IN_VAL_NULL
- 指示 in_val 指针为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
- 已耗尽 LAPI_ERR_MEMORY_DELETED
- LAPI 无法从系统中获取内存。
- LAPI_ERR_OP_SZ
- 指示 lapi_rmw_t size 字段未设置为 32 或 64。
- LAPI_ERROR_ORG_ADDR_NULL
- 指示传入的 udata 参数为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) 且 udata_len 大于 0,或者传入的 org_addr 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) 且 len 大于 0。
Note: 如果 Xfer_type = LAPI_DGSP_XFER,那么 udata 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) 且 udata_len 大于 0 的情况有效,因此不会返回错误。
- LAPI_ERROR_ORG_EXTENT
- 指示 org_vec的扩展数据块 (stride * num_vecs) 大于 LAPI 常量 LAPI_MAX_MSG_SZ的值。
- LAPI_ERROR_ORG_STRIDE
- 指示 奥尔格韦茨 stride 小于 block。
- LAPI_ERROR_ORG_VEC_ADDR
- 指示 org_vec->info [i] 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) ,但其长度 (org_vec->len [i]) 不是 0。
- LAPI_ERROR_ORG_VEC_LEN
- 指示 org_vec-> len 的总和大于 LAPI 常量 LAPI_MAX_MSG_SZ的值。
- LAPI_ERROR_ORG_VEC_NULL
- 指示 org_vec 值为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
- LAPI_ERROR_ORG_VEC_TYPE
- 指示 " 奥尔格韦茨->向量类型 " 无效。
- LAPI_ERR_RMW_OP
- 表示该操作无效。
- LAPI_ERR_STRIDE_ORG_VEC_ADDR_NULL
- 指示条带化向量地址 org_vec->info[0] 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
- LAPI_ERR_STRIDE_TGT_VEC_ADDR_NULL
- 指示条带化向量地址 tgt_vec->info[0] 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
- LAPI_ERR_TGT
- 指示传入的 特格特 在作业中定义的任务范围之外。
- LAPI_ERR_TGT_ADDR_NULL
- 指示 ret_addr 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
- LAPI_ERR_TGT_EXTENT
- 指示 tgt_vec的扩展数据块 (stride * num_vecs) 大于 LAPI 常量 LAPI_MAX_MSG_SZ的值。
- 已清除 LAPI_ERR_TGT_CLEAR
- 指示由于调用了 LAPI_Purge_totask() 而提前返回了子例程。
- LAPI_ERR_TGT_STRIDE
- 指示 特克特韦茨 stride 小于 block。
- LAPI_ERR_TGT_VAR_NULL
- 指示 tgt_var 地址为 NULL (在 C 中) 或 tgt_var 的值为 LAPI_ADDR_NULL (在 FORTRAN 中)。
- LAPI_ERR_TGT_VEC_ADDR
- 指示 tgt_vec->info[i] 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) ,但其长度 (tgt_vec->len[i]) 不是 0。
- LAPI_ERR_TGT_VEC_LEN
- 指示 tgt_vec->len 的总和大于 LAPI 常量 LAPI_MAX_MSG_SZ的值。
- LAPI_ERR_TGT_VEC_NULL
- 指示 tgt_vec 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
- LAPI_ERR_TGT_VEC_TYPE
- 指示 " 特克特韦茨->向量类型 " 无效。
- LAPI_ERR_UHDR_LEN
- 指示传递的 uhdr_len 值大于 MAX_UHDR_SZ ,或者不是处理器的双字大小的倍数。
- LAPI_ERR_UHDR_NULL
- 指示传入的 uhdr 为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中) ,但 uhdr_len 不是 0。
- LAPI_ERR_VEC_LEN_DIFF
- 指示 奥尔格韦茨 和 特克特韦茨 具有不同的长度 (len [])。
- LAPI_ERR_VEC_NUM_DIFF
- 指示 奥尔格韦茨 和 特克特韦茨 具有不同的 努 _vecs。
- LAPI_ERR_VEC_TYPE_DIFF
- 指示 奥尔格韦茨 和 特克特韦茨 具有不同的向量类型 (向量类型)。
- LAPI_ERR_XFER_CMD
- 指示 Xfer_cmd 是无效的。
C 示例
- 要使用 LAPI_Xfer 界面运行 LAPI_Get 中显示的样本代码:
{ lapi_xfer_t xfer_struct; /* initialize the table buffer for the data addresses */ /* get remote data buffer addresses */ LAPI_Address_init(hndl,(void *)data_buffer,data_buffer_list); . . . /* 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. */ xfer_struct.Get.Xfer_type = LAPI_GET_XFER; xfer_struct.Get.flags = 0; xfer_struct.Get.tgt = tgt; xfer_struct.Get.tgt_addr = data_buffer_list[tgt]; xfer_struct.Get.org_addr = data_buffer; xfer_struct.Get.len = data_len; xfer_struct.Get.tgt_cntr = tgt_cntr; xfer_struct.Get.org_cntr = org_cntr; LAPI_Xfer(hndl, &xfer_struct); } - 要使用 LAPI_Xfer 接口从 LAPI_Amsendv 实现 LAPI_STRIDED_VECTOR 示例:
{ lapi_xfer_t xfer_struct; /* info for LAPI_Xfer call */ lapi_vec_t vec; /* data for data transfer */ . . . vec->num_vecs = NUM_VECS; /* NUM_VECS = number of vectors to transfer */ /* must match that of the target vector */ vec->vec_type = LAPI_GEN_STRIDED_XFER; /* same as target vector */ vec->info[0] = buffer_address; /* starting address for data copy */ vec->info[1] = block_size; /* bytes of data to copy */ vec->info[2] = stride; /* distance from copy block to copy block */ /* data will be copied as follows: */ /* block_size bytes will be copied from buffer_address */ /* block_size bytes will be copied from buffer_address+stride */ /* block_size bytes will be copied from buffer_address+(2*stride) */ /* block_size bytes will be copied from buffer_address+(3*stride) */ . . . /* block_size bytes will be copied from buffer_address+((NUM_VECS-1)*stride) */ . . . xfer_struct.Amv.Xfer_type = LAPI_AMV_XFER; xfer_struct.Amv.flags = 0; xfer_struct.Amv.tgt = tgt; xfer_struct.Amv.hdr_hdl = hdr_hdl_list[tgt]; xfer_struct.Amv.uhdr_len = uhdr_len; /* user header length */ xfer_struct.Amv.uhdr = uhdr; /* LAPI_AMV_XFER allows the use of a send completion handler */ /* If non-null, the shdlr function is invoked at the point */ /* the origin counter would increment. Note that both the */ /* org_cntr and shdlr can be used. */ /* The user's shdlr must be of type scompl_hndlr_t *. */ /* scompl_hndlr_t is defined in /usr/include/lapi.h */ xfer_struct.shdlr = shdlr; /* Use sinfo to pass user-defined data into the send */ /* completion handler, if desired. */ xfer_struct.sinfo = sinfo; /* send completion data */ xfer_struct.org_vec = vec; xfer_struct.tgt_cntr = tgt_cntr; xfer_struct.org_cntr = org_cntr; xfer_struct.cmpl_cntr = cmpl_cntr; LAPI_Xfer(hndl, &xfer_struct); . . . }
位置
- /usr/lib/liblapi_r.a