/usr/include/lam/lam-ssi-rpi.h is in lam4-dev 7.1.2-2build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | /*
* Copyright (c) 2001-2003 The Trustees of Indiana University.
* All rights reserved.
* Copyright (c) 1998-2001 University of Notre Dame.
* All rights reserved.
* Copyright (c) 1994-1998 The Ohio State University.
* All rights reserved.
*
* This file is part of the LAM/MPI software package. For license
* information, see the LICENSE file in the top level directory of the
* LAM/MPI source distribution.
*
* $HEADER$
*
* $Id: lam-ssi-rpi.h,v 1.9 2003/11/15 14:54:50 jsquyres Exp $
*
* Function: - SSI RPI interface
*/
#ifndef LAM_SSI_RPI_H
#define LAM_SSI_RPI_H
#include <lam_config.h>
#include <string.h>
#include <mpi.h>
#include <mpisys.h>
#include <rpisys.h>
#include <all_list.h>
#include <lam-ssi.h>
/*
* Types for each function
* Top-level functions
*/
typedef int (*lam_ssi_rpi_query_fn_t)(int *priority, int *thread_min,
int *thread_max);
/*
* Action functions
*/
typedef int (*lam_ssi_rpi_addprocs_fn_t)(struct _proc **procs, int nprocs);
typedef int (*lam_ssi_rpi_advance_fn_t)(MPI_Request, int);
typedef int (*lam_ssi_rpi_alloc_mem_fn_t)(MPI_Aint size, MPI_Info info,
void *baseptr);
typedef int (*lam_ssi_rpi_build_fn_t)(MPI_Request);
typedef int (*lam_ssi_rpi_checkpoint_fn_t)(void);
typedef int (*lam_ssi_rpi_continue_fn_t)(void);
typedef int (*lam_ssi_rpi_destroy_fn_t)(MPI_Request);
typedef int (*lam_ssi_rpi_fastrecv_fn_t)(char *, int, MPI_Datatype, int,
int *, MPI_Comm, MPI_Status *,
int *);
typedef int (*lam_ssi_rpi_fastsend_fn_t)(char *, int, MPI_Datatype, int,
int, MPI_Comm);
typedef int (*lam_ssi_rpi_finalize_fn_t)(struct _proc *);
typedef int (*lam_ssi_rpi_free_mem_fn_t)(void *baseptr);
typedef const struct lam_ssi_rpi_actions_1_0_0 *
(*lam_ssi_rpi_init_1_0_0_fn_t)(struct _proc **procs, int nprocs,
int *max_tag, int *max_cid);
typedef const struct lam_ssi_rpi_actions_1_1_0 *
(*lam_ssi_rpi_init_1_1_0_fn_t)(struct _proc **procs, int nprocs,
int *max_tag, int *max_cid);
typedef int (*lam_ssi_rpi_interrupt_fn_t)(void);
typedef int (*lam_ssi_rpi_iprobe_fn_t)(MPI_Request);
typedef int (*lam_ssi_rpi_restart_fn_t)(void);
typedef int (*lam_ssi_rpi_start_fn_t)(MPI_Request, MPI_Request);
/*
* Struct used to pass RPI SSI information from the each SSI instance
* back to the SSI glue.
*/
typedef struct lam_ssi_rpi_1_0_0 {
lam_ssi_1_0_0_t lsr_meta_info;
/* RPI API function pointers */
lam_ssi_rpi_query_fn_t lsr_query;
lam_ssi_rpi_init_1_0_0_fn_t lsr_init;
} lam_ssi_rpi_1_0_0_t;
typedef struct lam_ssi_rpi_actions_1_0_0 {
/* rpi API function pointers */
lam_ssi_rpi_addprocs_fn_t lsra_addprocs;
lam_ssi_rpi_finalize_fn_t lsra_finalize;
lam_ssi_rpi_build_fn_t lsra_build;
lam_ssi_rpi_start_fn_t lsra_start;
lam_ssi_rpi_advance_fn_t lsra_advance;
lam_ssi_rpi_destroy_fn_t lsra_destroy;
lam_ssi_rpi_iprobe_fn_t lsra_iprobe;
lam_ssi_rpi_fastrecv_fn_t lsra_fastrecv;
lam_ssi_rpi_fastsend_fn_t lsra_fastsend;
lam_ssi_rpi_alloc_mem_fn_t lsra_alloc_mem;
lam_ssi_rpi_free_mem_fn_t lsra_free_mem;
lam_ssi_rpi_checkpoint_fn_t lsra_checkpoint;
lam_ssi_rpi_continue_fn_t lsra_continue;
lam_ssi_rpi_restart_fn_t lsra_restart;
/* Flags */
int lsra_tv_queue_support;
} lam_ssi_rpi_actions_1_0_0_t;
/*
* Ver 1.1.0
* Changes:
*
* - New type for lsr_init (different return type; return new 1_1_0
* actions struct potiner)
* - New lsra_interrupt action function
*/
typedef struct lam_ssi_rpi_1_1_0 {
lam_ssi_1_0_0_t lsr_meta_info;
/* RPI API function pointers */
lam_ssi_rpi_query_fn_t lsr_query;
lam_ssi_rpi_init_1_1_0_fn_t lsr_init;
} lam_ssi_rpi_1_1_0_t;
typedef struct lam_ssi_rpi_actions_1_1_0 {
/* RPI API function pointers */
lam_ssi_rpi_addprocs_fn_t lsra_addprocs;
lam_ssi_rpi_finalize_fn_t lsra_finalize;
lam_ssi_rpi_build_fn_t lsra_build;
lam_ssi_rpi_start_fn_t lsra_start;
lam_ssi_rpi_advance_fn_t lsra_advance;
lam_ssi_rpi_destroy_fn_t lsra_destroy;
lam_ssi_rpi_iprobe_fn_t lsra_iprobe;
lam_ssi_rpi_fastrecv_fn_t lsra_fastrecv;
lam_ssi_rpi_fastsend_fn_t lsra_fastsend;
lam_ssi_rpi_alloc_mem_fn_t lsra_alloc_mem;
lam_ssi_rpi_free_mem_fn_t lsra_free_mem;
lam_ssi_rpi_interrupt_fn_t lsra_interrupt;
lam_ssi_rpi_checkpoint_fn_t lsra_checkpoint;
lam_ssi_rpi_continue_fn_t lsra_continue;
lam_ssi_rpi_restart_fn_t lsra_restart;
/* Flags */
int lsra_tv_queue_support;
} lam_ssi_rpi_actions_1_1_0_t;
/*
* Set the default type to use version 1.1.0 of the SSI RPI struct
*/
typedef lam_ssi_rpi_1_1_0_t lam_ssi_rpi_t;
typedef lam_ssi_rpi_actions_1_1_0_t lam_ssi_rpi_actions_t;
/*
* Global functions for SSI overall RPI open and close
*/
#if defined(c_plusplus) || defined(__cplusplus)
extern "C" {
#endif
int lam_ssi_rpi_base_close(void);
int lam_ssi_rpi_base_open(OPT *aod);
int lam_ssi_rpi_base_query(void);
int lam_ssi_rpi_base_init(void);
#if defined(c_plusplus) || defined(__cplusplus)
}
#endif
/*
* Public variables
*/
extern int lam_ssi_rpi_verbose;
extern int lam_ssi_rpi_did;
extern LIST *lam_ssi_rpi_base_opened;
extern LIST *lam_ssi_rpi_base_available;
/*
* Global instance of array of pointers to lam_ssi_rpi_t. Will
* effectively be filled in by configure.
*/
extern const lam_ssi_t **lam_ssi_rpi_modules;
/*
* Macros for access to RPI functions to allow single-RPI and
* multi-RPI development in the same tree. When we go multi-RPI, some
* of these may turn into loops (e.g., addprocs) or dispatches to
* "glue" functions to decide which RPI to invoke the member function
* on (e.g., allocmem).
*/
/* Single-RPI definitions -- pretty simple */
extern lam_ssi_rpi_actions_t lam_ssi_rpi;
extern lam_ssi_rpi_t lam_ssi_rpi_base_module;
#define RPI_ADDPROCS(new_procs, num_new_procs) \
lam_ssi_rpi.lsra_addprocs((new_procs), (num_new_procs))
#define RPI_ADVANCE(request_top, fl_block) \
lam_ssi_rpi.lsra_advance((request_top), (fl_block))
#define RPI_ALLOC_MEM(size, info, baseptr) \
lam_ssi_rpi.lsra_alloc_mem((size), (info), (baseptr))
#define RPI_BUILD(req) \
lam_ssi_rpi.lsra_build((req))
#define RPI_CHECKPOINT() \
lam_ssi_rpi.lsra_checkpoint()
#define RPI_CONTINUE() \
lam_ssi_rpi.lsra_continue()
#define RPI_DESTROY(req) \
lam_ssi_rpi.lsra_destroy((req))
#define RPI_FASTRECV(buf, count, datatype, dest, tag, comm, status, sequence) \
lam_ssi_rpi.lsra_fastrecv((buf), (count), (datatype), (dest), (tag), \
(comm), (status), (sequence))
#define RPI_FASTSEND(buf, count, datatype, dest, tag, comm) \
lam_ssi_rpi.lsra_fastsend((buf), (count), (datatype), (dest), (tag), (comm))
#define RPI_FINALIZE_PROC(proc) \
lam_ssi_rpi.lsra_finalize((proc))
#define RPI_FINALIZE_ALLPROCS() \
lam_ssi_rpi.lsra_finalize(0)
#define RPI_FREE_MEM(baseptr) \
lam_ssi_rpi.lsra_free_mem((baseptr))
#define RPI_HAS_CHECKPOINT() \
(lam_ssi_rpi.lsra_checkpoint != NULL && \
lam_ssi_rpi.lsra_continue != NULL && \
lam_ssi_rpi.lsra_restart != NULL)
#define RPI_HAS_FASTRECV(comm, source) \
(lam_ssi_rpi.lsra_fastrecv != NULL)
#define RPI_HAS_FASTSEND(comm, dest) \
(lam_ssi_rpi.lsra_fastsend != NULL)
#define RPI_INTERRUPT() \
lam_ssi_rpi.lsra_interrupt()
#define RPI_IPROBE(req) \
lam_ssi_rpi.lsra_iprobe((req))
#define RPI_IS_LAMD() \
(strcmp(lam_ssi_rpi_base_module.lsr_meta_info.ssi_module_name, "lamd") == 0)
#define RPI_RESTART() \
lam_ssi_rpi.lsra_restart()
#define RPI_START(top_request, current_request) \
lam_ssi_rpi.lsra_start((top_request), (current_request))
#define RPI_HAS_TOTALVIEW_QUEUE_SUPPORT() \
(lam_ssi_rpi.lsra_tv_queue_support == 1)
#define RPI_DISABLE_FAST() { \
lam_ssi_rpi.lsra_fastrecv = NULL; \
lam_ssi_rpi.lsra_fastsend = NULL; \
}
#endif /* LAM_SSI_RPI_H */
|