940dbff0fa
standard). This macro allow us to specify the length of the fragment. Now we are able to know how the message is fragmented between the network devices or inside the communication protocol. This commit was SVN r10508.
156 строки
5.0 KiB
C
156 строки
5.0 KiB
C
/*
|
|
* Copyright (c) 2004-2006 The University of Tennessee and The University
|
|
* of Tennessee Research Foundation. All rights
|
|
* reserved.
|
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
* University of Stuttgart. All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
|
|
#ifndef _PERUSE_H_
|
|
#define _PERUSE_H_
|
|
|
|
#include "mpi.h"
|
|
|
|
/* PERUSE type declarations */
|
|
typedef void* peruse_event_h; /* Opaque event handle XXX */
|
|
|
|
typedef struct _peruse_comm_spec_t {
|
|
MPI_Comm comm;
|
|
void * buf;
|
|
int count;
|
|
MPI_Datatype datatype;
|
|
int peer;
|
|
int tag;
|
|
int operation;
|
|
} peruse_comm_spec_t;
|
|
|
|
typedef int (peruse_comm_callback_f)(peruse_event_h event_h,
|
|
MPI_Aint unique_id, peruse_comm_spec_t * spec, void * param);
|
|
|
|
/* PERUSE constants */
|
|
enum {
|
|
PERUSE_SUCCESS = 0, /* Success *//* XXX Devation from 1.11 */
|
|
PERUSE_ERR_INIT, /* PERUSE initialization failure */
|
|
PERUSE_ERR_GENERIC, /* Generic unspecified error */
|
|
PERUSE_ERR_MALLOC, /* Memory-related error */
|
|
PERUSE_ERR_EVENT, /* Invalid event descriptor */
|
|
PERUSE_ERR_EVENT_HANDLE, /* Invalid event handle */
|
|
PERUSE_ERR_PARAMETER, /* Invalid input parameter */
|
|
PERUSE_ERR_MPI_INIT, /* MPI has not been initialized */
|
|
PERUSE_ERR_COMM, /* MPI_ERR_COMM class */
|
|
PERUSE_ERR_MPI_OBJECT /* Error with associated MPI object */
|
|
};
|
|
|
|
enum {
|
|
PERUSE_EVENT_INVALID = -1, /* Must differ in value from PERUSE_SUCCESS. Devation from 1.11 */
|
|
|
|
/* Point-to-point request events */
|
|
PERUSE_COMM_REQ_ACTIVATE,
|
|
PERUSE_COMM_REQ_MATCH_UNEX,
|
|
PERUSE_COMM_REQ_INSERT_IN_POSTED_Q,
|
|
PERUSE_COMM_REQ_REMOVE_FROM_POSTED_Q,
|
|
PERUSE_COMM_REQ_XFER_BEGIN,
|
|
PERUSE_COMM_REQ_XFER_CONTINUE, /* Open MPI extension */
|
|
PERUSE_COMM_REQ_XFER_END,
|
|
PERUSE_COMM_REQ_COMPLETE,
|
|
PERUSE_COMM_REQ_NOTIFY,
|
|
PERUSE_COMM_MSG_ARRIVED,
|
|
PERUSE_COMM_MSG_INSERT_IN_UNEX_Q,
|
|
PERUSE_COMM_MSG_REMOVE_FROM_UNEX_Q,
|
|
PERUSE_COMM_MSG_MATCH_POSTED_REQ,
|
|
|
|
/* Queue events*/
|
|
PERUSE_COMM_SEARCH_POSTED_Q_BEGIN,
|
|
PERUSE_COMM_SEARCH_POSTED_Q_END,
|
|
PERUSE_COMM_SEARCH_UNEX_Q_BEGIN, /* XXX Deviation from 1.11 */
|
|
PERUSE_COMM_SEARCH_UNEX_Q_END,
|
|
|
|
/* Collective events */
|
|
/* IO events */
|
|
/* One-sided events */
|
|
PERUSE_CUSTOM_EVENT
|
|
};
|
|
|
|
/* Scope of message queues */
|
|
enum {
|
|
PERUSE_PER_COMM=0, /* XXX Devation from 1.11 */
|
|
PERUSE_GLOBAL
|
|
};
|
|
|
|
/* Operation values */
|
|
enum {
|
|
PERUSE_SEND=0, /* XXX Devation from 1.11 */
|
|
PERUSE_RECV
|
|
};
|
|
|
|
#define PERUSE_EVENT_HANDLE_NULL ((peruse_event_h)0)
|
|
|
|
/*
|
|
* I. Environment
|
|
*/
|
|
|
|
/* PERUSE initialization */
|
|
int PERUSE_Init( void );
|
|
|
|
/* Query all implemented events */
|
|
int PERUSE_Query_supported_events( int* num_supported,
|
|
char*** event_names,
|
|
int** events );
|
|
|
|
/* Query supported events */
|
|
int PERUSE_Query_event( const char* event_name, int* event );
|
|
|
|
/* Query event name */
|
|
int PERUSE_Query_event_name( int event, char** event_name );
|
|
|
|
/* Get environment variables that affect MPI library behavior */
|
|
int PERUSE_Query_environment( int* env_size, char*** env );
|
|
|
|
/* Query the scope of queue metrics - global or per communicator */
|
|
int PERUSE_Query_queue_event_scope( int* scope );
|
|
|
|
/*
|
|
* II. Events, objects initialization and manipulation
|
|
*/
|
|
/* Initialize event associated with an MPI communicator */
|
|
int PERUSE_Event_comm_register( int event,
|
|
MPI_Comm comm,
|
|
peruse_comm_callback_f * callback_fn,
|
|
void * param,
|
|
peruse_event_h * event_h );
|
|
|
|
/* Start collecting data (activate event) */
|
|
int PERUSE_Event_activate( peruse_event_h event_h );
|
|
|
|
/* Stop collecting data (deactivate event) */
|
|
int PERUSE_Event_deactivate( peruse_event_h event_h );
|
|
|
|
/* Free event handle */
|
|
int PERUSE_Event_release( peruse_event_h* event_h );
|
|
|
|
/* Set a new comm callback */
|
|
int PERUSE_Event_comm_callback_set( peruse_event_h event_h,
|
|
peruse_comm_callback_f* callback_fn,
|
|
void * param);
|
|
|
|
/* Get the current comm callback */
|
|
int PERUSE_Event_comm_callback_get( peruse_event_h event_h,
|
|
peruse_comm_callback_f** callback_fn,
|
|
void ** param );
|
|
|
|
/* Obtain event descriptor from an event handle (reverse lookup) */
|
|
int PERUSE_Event_get( peruse_event_h event_h, int* event );
|
|
|
|
/* Obtain MPI object associated with event handle */
|
|
int PERUSE_Event_object_get( peruse_event_h event_h, void** mpi_object );
|
|
|
|
/* Propagaiont mode */
|
|
int PERUSE_Event_propagate( peruse_event_h event_h, int mode );
|
|
|
|
#endif
|