root/ompi/peruse/peruse.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Copyright (c) 2004-2009 The University of Tennessee and The University
   3  *                         of Tennessee Research Foundation.  All rights
   4  *                         reserved.
   5  * Copyright (c) 2004-2007 High Performance Computing Center Stuttgart,
   6  *                         University of Stuttgart.  All rights reserved.
   7  * Copyright (c) 2007      Los Alamos National Security, LLC.  All rights
   8  *                         reserved.
   9  * $COPYRIGHT$
  10  *
  11  * Additional copyrights may follow
  12  *
  13  * $HEADER$
  14  */
  15 
  16 #ifndef _PERUSE_H_
  17 #define _PERUSE_H_
  18 
  19 #include "mpi.h"
  20 
  21 /* PERUSE type declarations */
  22 typedef void* peruse_event_h;    /* Opaque event handle XXX */
  23 
  24 typedef struct _peruse_comm_spec_t {
  25     MPI_Comm      comm;
  26     void *        buf;
  27     int           count;
  28     MPI_Datatype  datatype;
  29     int           peer;
  30     int           tag;
  31     int           operation;
  32 } peruse_comm_spec_t;
  33 
  34 typedef int (peruse_comm_callback_f)(peruse_event_h event_h,
  35               MPI_Aint unique_id, peruse_comm_spec_t * spec, void * param);
  36 
  37 /* PERUSE constants */
  38 enum {
  39     PERUSE_SUCCESS = 0,       /* Success *//* XXX Devation from 1.11 */
  40     PERUSE_ERR_INIT,          /* PERUSE initialization failure */
  41     PERUSE_ERR_GENERIC,       /* Generic unspecified error */
  42     PERUSE_ERR_MALLOC,        /* Memory-related error */
  43     PERUSE_ERR_EVENT,         /* Invalid event descriptor */
  44     PERUSE_ERR_EVENT_HANDLE,  /* Invalid event handle */
  45     PERUSE_ERR_PARAMETER,     /* Invalid input parameter */
  46     PERUSE_ERR_MPI_INIT,      /* MPI has not been initialized */
  47     PERUSE_ERR_COMM,          /* MPI_ERR_COMM class */
  48     PERUSE_ERR_MPI_OBJECT     /* Error with associated MPI object */
  49 };
  50 
  51 enum {
  52     PERUSE_EVENT_INVALID = -1, /* Must differ in value from PERUSE_SUCCESS. Devation from 1.11 */
  53 
  54     /* Point-to-point request events */
  55     PERUSE_COMM_REQ_ACTIVATE,
  56     PERUSE_COMM_REQ_MATCH_UNEX,
  57     PERUSE_COMM_REQ_INSERT_IN_POSTED_Q,
  58     PERUSE_COMM_REQ_REMOVE_FROM_POSTED_Q,
  59     PERUSE_COMM_REQ_XFER_BEGIN,
  60     PERUSE_COMM_REQ_XFER_CONTINUE,      /* Open MPI extension */
  61     PERUSE_COMM_REQ_XFER_END,
  62     PERUSE_COMM_REQ_COMPLETE,
  63     PERUSE_COMM_REQ_NOTIFY,
  64     PERUSE_COMM_MSG_ARRIVED,
  65     PERUSE_COMM_MSG_INSERT_IN_UNEX_Q,
  66     PERUSE_COMM_MSG_REMOVE_FROM_UNEX_Q,
  67     PERUSE_COMM_MSG_MATCH_POSTED_REQ,
  68 
  69     /* Queue events*/
  70     PERUSE_COMM_SEARCH_POSTED_Q_BEGIN,
  71     PERUSE_COMM_SEARCH_POSTED_Q_END,
  72     PERUSE_COMM_SEARCH_UNEX_Q_BEGIN,    /* XXX Deviation from 1.11 */
  73     PERUSE_COMM_SEARCH_UNEX_Q_END,
  74 
  75     /* Collective events */
  76     /* IO events */
  77     /* One-sided events */
  78     PERUSE_CUSTOM_EVENT
  79 };
  80 
  81 /* Scope of message queues */
  82 enum {
  83     PERUSE_PER_COMM=0,                  /* XXX Devation from 1.11 */
  84     PERUSE_GLOBAL
  85 };
  86 
  87 /* Operation values */
  88 enum {
  89     PERUSE_SEND=0,                      /* XXX Devation from 1.11 */
  90     PERUSE_RECV
  91 };
  92 
  93 #define PERUSE_EVENT_HANDLE_NULL ((peruse_event_h)0)
  94 
  95 /*
  96  * I. Environment
  97  */
  98 
  99 /* PERUSE initialization */
 100 OMPI_DECLSPEC int PERUSE_Init( void );
 101 
 102 /* Query all implemented events */
 103 OMPI_DECLSPEC int PERUSE_Query_supported_events( int* num_supported,
 104                                                  char*** event_names,
 105                                                  int** events );
 106 
 107 /* Query supported events */
 108 OMPI_DECLSPEC int PERUSE_Query_event( const char* event_name, int* event );
 109 
 110 /* Query event name */
 111 OMPI_DECLSPEC int PERUSE_Query_event_name( int event, char** event_name );
 112 
 113 /* Get environment variables that affect MPI library behavior */
 114 OMPI_DECLSPEC int PERUSE_Query_environment( int* env_size, char*** env );
 115 
 116 /* Query the scope of queue metrics - global or per communicator */
 117 OMPI_DECLSPEC int PERUSE_Query_queue_event_scope( int* scope );
 118 
 119 /*
 120  * II. Events, objects initialization and manipulation
 121  */
 122 /* Initialize event associated with an MPI communicator */
 123 OMPI_DECLSPEC int PERUSE_Event_comm_register( int                       event,
 124                                               MPI_Comm                  comm,
 125                                               peruse_comm_callback_f *  callback_fn,
 126                                               void *                    param,
 127                                               peruse_event_h *          event_h );
 128 
 129 /* Start collecting data (activate event) */
 130 OMPI_DECLSPEC int PERUSE_Event_activate( peruse_event_h event_h );
 131 
 132 /* Stop collecting data (deactivate event) */
 133 OMPI_DECLSPEC int PERUSE_Event_deactivate( peruse_event_h event_h );
 134 
 135 /* Free event handle */
 136 OMPI_DECLSPEC int PERUSE_Event_release( peruse_event_h* event_h );
 137 
 138 /* Set a new comm callback */
 139 OMPI_DECLSPEC int PERUSE_Event_comm_callback_set( peruse_event_h            event_h,
 140                                                   peruse_comm_callback_f*   callback_fn,
 141                                                   void *                    param);
 142 
 143 /* Get the current comm callback */
 144 OMPI_DECLSPEC int PERUSE_Event_comm_callback_get( peruse_event_h            event_h,
 145                                                   peruse_comm_callback_f**  callback_fn,
 146                                                   void **                   param );
 147 
 148 /* Obtain event descriptor from an event handle (reverse lookup) */
 149 OMPI_DECLSPEC int PERUSE_Event_get( peruse_event_h event_h, int* event );
 150 
 151 /* Obtain MPI object associated with event handle */
 152 OMPI_DECLSPEC int PERUSE_Event_object_get( peruse_event_h event_h, void** mpi_object );
 153 
 154 /* Propagation mode */
 155 OMPI_DECLSPEC int PERUSE_Event_propagate( peruse_event_h event_h, int mode );
 156 
 157 #endif

/* [<][>][^][v][top][bottom][index][help] */