/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */ /* * (C) 2001 by Argonne National Laboratory. * See COPYRIGHT in top-level directory. * */ #ifndef MPIR_PROCESS_H_INCLUDED #define MPIR_PROCESS_H_INCLUDED #ifdef HAVE_HWLOC #include "hwloc.h" #endif #ifdef USE_PMIX_API #include "pmix.h" #endif #ifdef HAVE_NETLOC #include "netloc_util.h" #endif /* Per process data */ typedef struct PreDefined_attrs { int appnum; /* Application number provided by mpiexec (MPI-2) */ int host; /* host */ int io; /* standard io allowed */ int lastusedcode; /* last used error code (MPI-2) */ int tag_ub; /* Maximum message tag */ int universe; /* Universe size from mpiexec (MPI-2) */ int wtime_is_global; /* Wtime is global over processes in COMM_WORLD */ } PreDefined_attrs; typedef struct MPIR_Process_t { OPA_int_t mpich_state; /* State of MPICH. Use OPA_int_t to make MPI_Initialized() etc. * thread-safe per MPI-3.1. See MPI-Forum ticket 357 */ int do_error_checks; /* runtime error check control */ struct MPIR_Comm *comm_world; /* Easy access to comm_world for * error handler */ struct MPIR_Comm *comm_self; /* Easy access to comm_self */ struct MPIR_Comm *comm_parent; /* Easy access to comm_parent */ struct MPIR_Comm *icomm_world; /* An internal version of comm_world * that is separate from user's * versions */ MPIR_Request *lw_req; /* A pre-allocated, always complete request */ PreDefined_attrs attrs; /* Predefined attribute values */ int tag_bits; /* number of tag bits supported */ #ifdef HAVE_HWLOC hwloc_topology_t hwloc_topology; /* HWLOC topology */ hwloc_cpuset_t bindset; /* process binding */ int bindset_is_valid; /* Flag to indicate if the bind set of the process is valid: * 0 if invalid, 1 if valid */ #endif #ifdef HAVE_NETLOC netloc_topology_t netloc_topology; MPIR_Netloc_network_attributes network_attr; #endif #ifdef USE_PMIX_API pmix_proc_t pmix_proc; pmix_proc_t pmix_wcproc; #endif /* The topology routines dimsCreate is independent of any communicator. * If this pointer is null, the default routine is used */ int (*dimsCreate) (int, int, int *); /* Attribute dup functions. Here for lazy initialization */ int (*attr_dup) (int, MPIR_Attribute *, MPIR_Attribute **); int (*attr_free) (int, MPIR_Attribute **); /* There is no win_attr_dup function because there can be no MPI_Win_dup * function */ /* Routine to get the messages corresponding to dynamically created * error messages */ const char *(*errcode_to_string) (int); #ifdef HAVE_CXX_BINDING /* Routines to call C++ functions from the C implementation of the * MPI reduction and attribute routines */ void (*cxx_call_op_fn) (const void *, void *, int, MPI_Datatype, MPI_User_function *); /* Error handling functions. As for the attribute functions, * we pass the integer file/comm/win, the address of the error code, * and the C function to call (itself a function defined by the * C++ interface and exported to C). The first argument is used * to specify the kind (comm,file,win) */ void (*cxx_call_errfn) (int, int *, int *, void (*)(void)); #endif /* HAVE_CXX_BINDING */ } MPIR_Process_t; extern MPIR_Process_t MPIR_Process; #endif /* MPIR_PROCESS_H_INCLUDED */