1
1
openmpi/ompi/peruse/peruse.h
George Bosilca 686cc9ef54 First cut of PERUSE. Right now we support all the Peruse definitions from the
version 1.12. As in the 2.0 everything related to windows and files has been removed
I prefer to add the complete files, so I have a trace in the SN for later.

This commit was SVN r9373.
2006-03-23 05:00:55 +00:00

241 строка
7.5 KiB
C

/*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2004-2005 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 (c) 2004-2005 The Regents of the University of California.
* 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 struct _peruse_file_spec_t {
MPI_File file;
void * buf;
int count;
MPI_Datatype datatype;
MPI_Offset offset;
int operation;
} peruse_file_spec_t;
typedef struct _peruse_win_spec_t {
MPI_Win win;
void * o_buf;
int o_count;
MPI_Datatype o_datatype;
void * t_buf;
int t_count;
MPI_Datatype t_datatype;
MPI_Op acc_op;
int peer;
int operation;
} peruse_win_spec_t;
typedef int (peruse_comm_callback_f)(peruse_event_h event_h,
MPI_Aint unique_id, peruse_comm_spec_t * spec, void * param);
typedef int (peruse_file_callback_f)(peruse_event_h event_h,
MPI_Aint unique_id, peruse_file_spec_t * spec, void * param);
typedef int (peruse_win_callback_f)(peruse_event_h event_h,
MPI_Aint unique_id, peruse_win_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_FILE, /* MPI_ERR_FILE class */
PERUSE_ERR_WIN, /* MPI_ERR_WIN 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_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 Devation 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,
PERUSE_PUT,
PERUSE_GET,
PERUSE_ACC,
PERUSE_IO_READ,
PERUSE_IO_WRITE
};
#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);
/* Initialize event associated with an MPI file */
int PERUSE_Event_file_register (
int event,
MPI_File file,
peruse_file_callback_f * callback_fn,
void * param,
peruse_event_h * event_h);
/* Initialize event associated with an MPI window */
int PERUSE_Event_win_register (
int event,
MPI_Win win,
peruse_win_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);
/* Set a new file callback */
int PERUSE_Event_file_callback_set (
peruse_event_h event_h,
peruse_file_callback_f * callback_fn,
void * param);
/* Set a new win callback */
int PERUSE_Event_win_callback_set (
peruse_event_h event_h,
peruse_win_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);
/* Get the current ile callback */
int PERUSE_Event_file_callback_get (
peruse_event_h event_h,
peruse_file_callback_f ** callback_fn,
void ** param);
/* Get the current win callback */
int PERUSE_Event_win_callback_get (
peruse_event_h event_h,
peruse_win_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 */
/* XXX Shouldn't we have 3 different functions to obtain a specific object Comm/File/Win */
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