686cc9ef54
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.
241 строка
7.5 KiB
C
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
|