LAPI_Qenv 子例程
用途
用于查询 LAPI 以获取运行时任务信息。
库
可用性库 (liblapi_r.a)
C 语法
#include <lapif.h>
int LAPI_Qenv(hndl, query, ret_val)
lapi_handle_t hndl;
lapi_query_t query;
int *ret_val; /* ret_val's type varies (see Additional query types) */FORTRAN 语法
include 'lapif.h'
LAPI_QENV(hndl, query, ret_val, ierror)
INTEGER hndl
INTEGER query
INTEGER ret_val /* ret_val's type varies (see Additional query types) */
INTEGER ierror描述
Type of call: 本地查询
使用此子例程从 LAPI 查询运行时设置和统计信息。 LAPI 将一组查询类型定义为 lapi.h for C 中的枚举,并在 32 位和 64 位版本的 lapif.h for FORTRAN 中显式定义。
例如,您可以使用 LOC_ADDRTBL_SZ的 query 值查询 LAPI 用于 LAPI_Addr_set 子例程的表的大小:
LAPI_Qenv(hndl, LOC_ADDRTBL_SZ, &ret_val);ret_val 将包含表索引的上限。 随后对 LAPI_Addr_set
(hndl, addr, addr_hndl); 的调用可确保 addr_hndl 的值介于 0 和 ret_val之间。当用于显示参数的大小,值的比较或值的范围时, LAPI_Qenv 子例程的 query 参数的有效值出现在 SMALL , BOLD 大写字母中。 例如:
NUM_TASKS
LAPI_Qenv(hndl, NUM_TASKS, ret_val)
在 C 中, lapi_query_t 定义 LAPI 查询的有效类型:
typedef enum {
TASK_ID=0, /* Query the task ID of the current task in the job */
NUM_TASKS, /* Query the number of tasks in the job */
MAX_UHDR_SZ, /* Query the maximum user header size for active messaging */
MAX_DATA_SZ, /* Query the maximum data length that can be sent */
ERROR_CHK, /* Query and set parameter checking on (1) or off (0) */
TIMEOUT, /* Query and set the current communication timeout setting */
/* in seconds */
MIN_TIMEOUT, /* Query the minimum communication timeout setting in seconds */
MAX_TIMEOUT, /* Query the maximum communication timeout setting in seconds */
INTERRUPT_SET, /* Query and set interrupt mode on (1) or off (0) */
MAX_PORTS, /* Query the maximum number of available communication ports */
MAX_PKT_SZ, /* This is the payload size of 1 packet */
NUM_REX_BUFS, /* Number of retransmission buffers */
REX_BUF_SZ, /* Size of each retransmission buffer in bytes */
LOC_ADDRTBL_SZ, /* Size of address store table used by LAPI_Addr_set */
EPOCH_NUM, /* No longer used by LAPI (supports legacy code) */
USE_THRESH, /* No longer used by LAPI (supports legacy code) */
RCV_FIFO_SIZE, /* No longer used by LAPI (supports legacy code) */
MAX_ATOM_SIZE,/* Query the maximum atom size for a DGSP accumulate transfer*/
BUF_CP_SIZE, /* Query the size of the message buffer to save (default 128b)*/
MAX_PKTS_OUT, /* Query the maximum number of messages outstanding / */
/* destination */
ACK_THRESHOLD, /* Query and set the threshold of acknowledgments going */
/* back to the source */
QUERY_SHM_ENABLED, /* Query to see if shared memory is enabled */
QUERY_SHM_NUM_TASKS, /* Query to get the number of tasks that use shared */
/* memory */
QUERY_SHM_TASKS, /* Query to get the list of task IDs that make up shared */
/* memory; pass in an array of size QUERY_SHM_NUM_TASKS */
QUERY_STATISTICS, /* Query to get packet statistics from LAPI, as */
/* defined by the lapi_statistics_t structure. For */
/* this query, pass in 'lapi_statistics_t *' rather */
/* than 'int *ret_val'; otherwise, the data will */
/* overflow the buffer. */
PRINT_STATISTICS, /* Query debug print function to print out statistics */
QUERY_SHM_STATISTICS,/* Similar query as QUERY_STATISTICS for shared */
/* memory path. */
QUERY_LOCAL_SEND_STATISTICS ,/* Similar query as QUERY_STATISTICS */
/* for local copy path. */
BULK_XFER, /* Query to see if bulk transfer is enabled (1) or disabled (0) */
BULK_MIN_MSG_SIZE, /* Query the current bulk transfer minimum message size */
LAST_QUERY
} lapi_query_t;
typedef struct {
lapi_long_t Tot_dup_pkt_cnt; /* Total duplicate packet count */
lapi_long_t Tot_retrans_pkt_cnt; /* Total retransmit packet count */
lapi_long_t Tot_gho_pkt_cnt; /* Total Ghost packet count */
lapi_long_t Tot_pkt_sent_cnt; /* Total packet sent count */
lapi_long_t Tot_pkt_recv_cnt; /* Total packet receive count */
lapi_long_t Tot_data_sent; /* Total data sent */
lapi_long_t Tot_data_recv; /* Total data receive */
} lapi_statistics_t;
在 FORTRAN 中,在 lapif.h 中定义了 LAPI 查询的有效类型,如下所示:
integer TASK_ID,NUM_TASKS,MAX_UHDR_SZ,MAX_DATA_SZ,ERROR_CHK
integer TIMEOUT,MIN_TIMEOUT,MAX_TIMEOUT
integer INTERRUPT_SET,MAX_PORTS,MAX_PKT_SZ,NUM_REX_BUFS
integer REX_BUF_SZ,LOC_ADDRTBL_SZ,EPOCH_NUM,USE_THRESH
integer RCV_FIFO_SIZE,MAX_ATOM_SIZE,BUF_CP_SIZE
integer MAX_PKTS_OUT,ACK_THRESHOLD,QUERY_SHM_ENABLED
integer QUERY_SHM_NUM_TASKS,QUERY_SHM_TASKS
integer QUERY_STATISTICS,PRINT_STATISTICS
integer QUERY_SHM_STATISTICS,QUERY_LOCAL_SEND_STATISTICS
integer BULK_XFER,BULK_MIN_MSG_SIZE,
integer LAST_QUERY
parameter (TASK_ID=0,NUM_TASKS=1,MAX_UHDR_SZ=2,MAX_DATA_SZ=3)
parameter (ERROR_CHK=4,TIMEOUT=5,MIN_TIMEOUT=6)
parameter (MAX_TIMEOUT=7,INTERRUPT_SET=8,MAX_PORTS=9)
parameter (MAX_PKT_SZ=10,NUM_REX_BUFS=11,REX_BUF_SZ=12)
parameter (LOC_ADDRTBL_SZ=13,EPOCH_NUM=14,USE_THRESH=15)
parameter (RCV_FIFO_SIZE=16,MAX_ATOM_SIZE=17,BUF_CP_SIZE=18)
parameter (MAX_PKTS_OUT=19,ACK_THRESHOLD=20)
parameter (QUERY_SHM_ENABLED=21,QUERY_SHM_NUM_TASKS=22)
parameter (QUERY_SHM_TASKS=23,QUERY_STATISTICS=24)
parameter (PRINT_STATISTICS=25)
parameter (QUERY_SHM_STATISTICS=26,QUERY_LOCAL_SEND_STATISTICS=27)
parameter (BULK_XFER=28,BULK_MIN_MSG_SIZE=29)
parameter (LAST_QUERY=30)
其他查询类型
LAPI 提供了其他查询类型,对于这些查询类型, LAPI_Qenv 的行为略有不同:
- PRINT_STATISTICS
- 传递此查询类型时, LAPI 会将数据传输统计信息发送到标准输出。 在这种情况下, ret_val 不受影响。 但是,对于所有 LAPI_Qenv 类型 (包括 PRINT_STATISTICS) , LAPI 的错误检查要求 ret_val 的值不是 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
- QUERY_LOCAL_SEND_STATISTICS
- 传递此查询类型时, LAPI_Qenv 会将 ret_val 解释为指向类型 lapi_statistics_t的指针。 函数返回时,结构的字段包含 LAPI 通过任务内本地副本传输的数据的数据传输统计信息。 包计数将为 0。
- QUERY_SHM_STATISTICS
- 传递此查询类型时, LAPI_Qenv 会将 ret_val 解释为指向类型 lapi_statistics_t的指针。 函数返回时,结构的字段包含 LAPI 通过共享内存传输的数据的数据传输统计信息。
- QUERY_SHM_TASKS
- 传递此查询类型时, LAPI_Qenv 将返回此任务可使用共享内存进行通信的任务标识的列表。 ret_val 必须是具有足够空间来容纳 NUM_TASKS 整数的 int * 。 对于每个任务 i,如果可以使用共享内存, ret_val[i] 将包含共享内存任务标识。 如果无法使用共享内存,那么 ret_val[i] 将包含 -1。
- QUERY_STATISTICS
- 传递此查询类型时, LAPI_Qenv 会将 ret_val 解释为指向类型 lapi_statistics_t的指针。 函数返回时,结构的字段包含使用用户空间 (US) 协议或 UDP/IP传输的数据的 LAPI 数据传输统计信息。
参数
- INPUT
- hndl
- 指定 LAPI 句柄。
- 查询
- 指定要请求的查询类型。 在 C 中, 查询 的值由 lapi.h中的 lapi_query_t 枚举定义。 在 FORTRAN 中,这些值是在 lapif.h的 32 位版本和 64 位版本中显式定义的。
- 输出
- ret_val
- 指定要存储为查询结果的 LAPI 的引用参数。 此参数的值不能为 NULL (在 C 中) 或 LAPI_ADDR_NULL (在 FORTRAN 中)。
- ierror
- 指定 FORTRAN 返回码。 这始终是最后一个参数。
返回值
- 成功 (LAPI_SUCCESS)
- 指示函数调用已成功完成。
- LAPI_ERR_HNDL_INVALID
- 指示传入的 hndl 无效 (未初始化或处于终止状态)。
- LAPI_ERR_QUERY_TYPE
- 指示传入的查询无效。
- LAPI_ERR_RET_PTR_NULL
- 指示 ret_val 指针的值为 NULL (C) 或 ret_val 的值为 LAPI_ADDR_NULL (FORTRAN)。
C 示例
要从 LAPI 查询运行时值,请执行以下操作:
{
int task_id;
lapi_statistics_t stats;
.
.
.
LAPI_Qenv(hndl, TASK_ID, &task_id);
/* task_id now contains the task ID */
.
.
.
LAPI_Qenv(hndl, QUERY_STATISTICS, (int *)&stats);
/* the fields of the stats structure are now
filled in with runtime values */
.
.
.
}位置
- /usr/lib/liblapi_r.a
相关信息
子例程: LAPI_Amsend, LAPI_Get, LAPI_Put, LAPI_Senv, LAPI_Xfer