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_SZquery 值查询 LAPI 用于 LAPI_Addr_set 子例程的表的大小:
LAPI_Qenv(hndl, LOC_ADDRTBL_SZ, &ret_val);
ret_val 将包含表索引的上限。 随后对 LAPI_Addr_set (hndl, addr, addr_hndl); 的调用可确保 addr_hndl 的值介于 0ret_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_AmsendLAPI_GetLAPI_PutLAPI_SenvLAPI_Xfer