1
1

Update PERUSE. Some cleanups, more centralized event management.

This commit was SVN r9568.
Этот коммит содержится в:
George Bosilca 2006-04-07 06:03:32 +00:00
родитель 7055e9765e
Коммит 41ec2f2038
6 изменённых файлов: 86 добавлений и 148 удалений

Просмотреть файл

@ -1,14 +1,9 @@
/* /*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * Copyright (c) 2004-2006 The University of Tennessee and The University
* 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 * of Tennessee Research Foundation. All rights
* reserved. * reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, * Copyright (c) 2004-2006 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved. * University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow

Просмотреть файл

@ -1,14 +1,9 @@
/* /*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * Copyright (c) 2004-2006 The University of Tennessee and The University
* 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 * of Tennessee Research Foundation. All rights
* reserved. * reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, * Copyright (c) 2004-2006 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved. * University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow

Просмотреть файл

@ -1,14 +1,9 @@
/* /*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * Copyright (c) 2004-2006 The University of Tennessee and The University
* 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 * of Tennessee Research Foundation. All rights
* reserved. * reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, * Copyright (c) 2004-2006 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved. * University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow

Просмотреть файл

@ -1,14 +1,9 @@
/* /*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * Copyright (c) 2004-2006 The University of Tennessee and The University
* 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 * of Tennessee Research Foundation. All rights
* reserved. * reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, * Copyright (c) 2004-2006 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved. * University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
@ -33,57 +28,41 @@ OMPI_DECLSPEC extern bool ompi_mpi_param_check;
* Data * Data
*/ */
/* typedef struct {
* This array has to match the array in peruse.h const char* name;
* and the PERUSE_events -array below. const int id;
} peruse_event_associations_t;
/**
* The associations between the peruse event name and id. This array
* should be ended by the tuple {NULL, PERUSE_CUSTOM_EVENT}.
*/ */
const char * PERUSE_event_names[] = { static const peruse_event_associations_t PERUSE_events[] = {
/* Point-to-point request events */ /* Point-to-point request events */
"PERUSE_COMM_REQ_ACTIVATE", { "PERUSE_COMM_REQ_ACTIVATE", PERUSE_COMM_REQ_ACTIVATE },
"PERUSE_COMM_REQ_MATCH_UNEX", { "PERUSE_COMM_REQ_ACTIVATE", PERUSE_COMM_REQ_ACTIVATE },
"PERUSE_COMM_REQ_INSERT_IN_POSTED_Q", { "PERUSE_COMM_REQ_MATCH_UNEX", PERUSE_COMM_REQ_MATCH_UNEX },
"PERUSE_COMM_REQ_REMOVE_FROM_POSTED_Q", { "PERUSE_COMM_REQ_INSERT_IN_POSTED_Q", PERUSE_COMM_REQ_INSERT_IN_POSTED_Q },
"PERUSE_COMM_REQ_XFER_BEGIN", { "PERUSE_COMM_REQ_REMOVE_FROM_POSTED_Q", PERUSE_COMM_REQ_REMOVE_FROM_POSTED_Q },
"PERUSE_COMM_REQ_XFER_CONTINUE", { "PERUSE_COMM_REQ_XFER_BEGIN", PERUSE_COMM_REQ_XFER_BEGIN },
"PERUSE_COMM_REQ_XFER_END", { "PERUSE_COMM_REQ_XFER_CONTINUE", PERUSE_COMM_REQ_XFER_CONTINUE },
"PERUSE_COMM_REQ_COMPLETE", { "PERUSE_COMM_REQ_XFER_END", PERUSE_COMM_REQ_XFER_END },
"PERUSE_COMM_REQ_NOTIFY", { "PERUSE_COMM_REQ_COMPLETE", PERUSE_COMM_REQ_COMPLETE },
"PERUSE_COMM_MSG_ARRIVED", { "PERUSE_COMM_REQ_NOTIFY", PERUSE_COMM_REQ_NOTIFY },
"PERUSE_COMM_MSG_INSERT_IN_UNEX_Q", { "PERUSE_COMM_MSG_ARRIVED", PERUSE_COMM_MSG_ARRIVED },
"PERUSE_COMM_MSG_REMOVE_FROM_UNEX_Q", { "PERUSE_COMM_MSG_INSERT_IN_UNEX_Q", PERUSE_COMM_MSG_INSERT_IN_UNEX_Q },
"PERUSE_COMM_MSG_MATCH_POSTED_REQ", { "PERUSE_COMM_MSG_REMOVE_FROM_UNEX_Q", PERUSE_COMM_MSG_REMOVE_FROM_UNEX_Q },
{ "PERUSE_COMM_MSG_MATCH_POSTED_REQ", PERUSE_COMM_MSG_MATCH_POSTED_REQ },
/* Queue events*/ /* Queue events*/
"PERUSE_COMM_SEARCH_POSTED_Q_BEGIN", { "PERUSE_COMM_SEARCH_POSTED_Q_BEGIN", PERUSE_COMM_SEARCH_POSTED_Q_BEGIN },
"PERUSE_COMM_SEARCH_POSTED_Q_END", { "PERUSE_COMM_SEARCH_POSTED_Q_END", PERUSE_COMM_SEARCH_POSTED_Q_END },
"PERUSE_COMM_SEARCH_UNEX_Q_BEGIN", /* XXX Devation from 1.11 */ { "PERUSE_COMM_SEARCH_UNEX_Q_BEGIN", PERUSE_COMM_SEARCH_UNEX_Q_BEGIN },
"PERUSE_COMM_SEARCH_UNEX_Q_END" { "PERUSE_COMM_SEARCH_UNEX_Q_END", PERUSE_COMM_SEARCH_UNEX_Q_END },
{ NULL, PERUSE_CUSTOM_EVENT }
}; };
const int PERUSE_events[] = { const int PERUSE_num_events = (sizeof(PERUSE_events) / sizeof(peruse_event_associations_t));
/* 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,
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,
PERUSE_COMM_SEARCH_UNEX_Q_END
};
const int PERUSE_num_events = (sizeof (PERUSE_events) / sizeof (PERUSE_events[0]));
/* /*
* PERUSE user-callable function * PERUSE user-callable function
@ -96,10 +75,9 @@ int PERUSE_Init (void)
/* Query all implemented events */ /* Query all implemented events */
int PERUSE_Query_supported_events ( int PERUSE_Query_supported_events( int* num_supported,
int * num_supported, char*** event_names,
char *** event_names, int** events )
int ** events)
{ {
int i; int i;
*num_supported = PERUSE_num_events; *num_supported = PERUSE_num_events;
@ -111,8 +89,8 @@ int PERUSE_Query_supported_events (
*events = (int*) malloc (PERUSE_num_events * sizeof (int)); *events = (int*) malloc (PERUSE_num_events * sizeof (int));
for (i = 0; i < PERUSE_num_events; i++) { for (i = 0; i < PERUSE_num_events; i++) {
(*event_names)[i] = strdup (PERUSE_event_names[i]); (*event_names)[i] = strdup (PERUSE_events[i].name);
(*events)[i] = PERUSE_events[i]; (*events)[i] = PERUSE_events[i].id;
} }
return PERUSE_SUCCESS; return PERUSE_SUCCESS;
@ -120,35 +98,34 @@ int PERUSE_Query_supported_events (
/* Query supported events */ /* Query supported events */
int PERUSE_Query_event (const char * event_name, int *event) int PERUSE_Query_event (const char* event_name, int* event)
{ {
int i; int i;
for (i = 0; i < PERUSE_num_events; i++) {
if (!strcmp (event_name, PERUSE_event_names[i]))
break;
}
if (i == PERUSE_num_events)
return PERUSE_ERR_EVENT;
*event = PERUSE_events[i]; for( i = 0; i < PERUSE_num_events; i++ ) {
return PERUSE_SUCCESS; if( !strcmp (event_name, PERUSE_events[i].name) ) {
*event = PERUSE_events[i].id;
return PERUSE_SUCCESS;
}
}
return PERUSE_ERR_EVENT;
} }
/* Query event name */ /* Query event name */
int PERUSE_Query_event_name (int event, char ** event_name) int PERUSE_Query_event_name (int event, char** event_name)
{ {
if (event < 0 || event > PERUSE_num_events || if (event < 0 || event > PERUSE_num_events ||
NULL == PERUSE_event_names[event]) NULL == PERUSE_events[event].name)
return PERUSE_EVENT_INVALID; return PERUSE_EVENT_INVALID;
*event_name = strdup (PERUSE_event_names[event]); *event_name = strdup(PERUSE_events[event].name);
return PERUSE_SUCCESS; return PERUSE_SUCCESS;
} }
/* Get environment variables that affect MPI library behavior */ /* Get environment variables that affect MPI library behavior */
int PERUSE_Query_environment (int * env_size, char *** env) int PERUSE_Query_environment( int * env_size, char *** env )
{ {
/* XXX tbd */ /* XXX tbd */
return PERUSE_SUCCESS; return PERUSE_SUCCESS;
@ -157,7 +134,7 @@ int PERUSE_Query_environment (int * env_size, char *** env)
/* Query the scope of queue metrics - global or per communicator */ /* Query the scope of queue metrics - global or per communicator */
int PERUSE_Query_queue_event_scope (int * scope) int PERUSE_Query_queue_event_scope (int * scope)
{ {
*scope = PERUSE_PER_COMM; /* XXX; not yet realized */ *scope = PERUSE_PER_COMM;
return PERUSE_SUCCESS; return PERUSE_SUCCESS;
} }
@ -167,20 +144,19 @@ int PERUSE_Query_queue_event_scope (int * scope)
* II. Events, objects initialization and manipulation * II. Events, objects initialization and manipulation
*/ */
/* Initialize event associated with an MPI communicator */ /* Initialize event associated with an MPI communicator */
int PERUSE_Event_comm_register ( int PERUSE_Event_comm_register( int event,
int event, MPI_Comm comm,
MPI_Comm comm, peruse_comm_callback_f * callback_fn,
peruse_comm_callback_f * callback_fn, void * param,
void * param, peruse_event_h * event_h )
peruse_event_h * event_h)
{ {
ompi_peruse_handle_t * handle; ompi_peruse_handle_t * handle;
if (MPI_PARAM_CHECK) { if (MPI_PARAM_CHECK) {
if (event < 0 || event > PERUSE_num_events || if( (event < 0) || (event > PERUSE_num_events) ||
NULL == PERUSE_event_names[event]) (NULL == PERUSE_events[event].name) )
return PERUSE_ERR_EVENT; return PERUSE_ERR_EVENT;
if (MPI_COMM_NULL == comm || ompi_comm_invalid (comm)) if( (MPI_COMM_NULL == comm) || ompi_comm_invalid (comm) )
return PERUSE_ERR_COMM; return PERUSE_ERR_COMM;
if (NULL == callback_fn) if (NULL == callback_fn)
@ -284,10 +260,9 @@ int PERUSE_Event_release (peruse_event_h * event_h)
} \ } \
/* Set a new comm callback */ /* Set a new comm callback */
int PERUSE_Event_comm_callback_set ( int PERUSE_Event_comm_callback_set( peruse_event_h event_h,
peruse_event_h event_h, peruse_comm_callback_f* callback_fn,
peruse_comm_callback_f * callback_fn, void* param )
void * param)
{ {
ompi_peruse_handle_t* handle = (ompi_peruse_handle_t*)event_h; ompi_peruse_handle_t* handle = (ompi_peruse_handle_t*)event_h;
@ -302,10 +277,9 @@ int PERUSE_Event_comm_callback_set (
} }
/* Get the current comm callback */ /* Get the current comm callback */
int PERUSE_Event_comm_callback_get ( int PERUSE_Event_comm_callback_get( peruse_event_h event_h,
peruse_event_h event_h, peruse_comm_callback_f** callback_fn,
peruse_comm_callback_f ** callback_fn, void** param )
void ** param)
{ {
ompi_peruse_handle_t* handle = (ompi_peruse_handle_t*)event_h; ompi_peruse_handle_t* handle = (ompi_peruse_handle_t*)event_h;
@ -320,7 +294,7 @@ int PERUSE_Event_comm_callback_get (
} }
/* Obtain event descriptor from an event handle (reverse lookup) */ /* Obtain event descriptor from an event handle (reverse lookup) */
int PERUSE_Event_get (peruse_event_h event_h, int * event) int PERUSE_Event_get( peruse_event_h event_h, int* event )
{ {
if (MPI_PARAM_CHECK) { if (MPI_PARAM_CHECK) {
if (NULL == event_h) if (NULL == event_h)
@ -336,9 +310,10 @@ int PERUSE_Event_get (peruse_event_h event_h, int * event)
/* Obtain MPI object associated with event handle */ /* Obtain MPI object associated with event handle */
int PERUSE_Event_object_get (peruse_event_h event_h, void ** mpi_object) int PERUSE_Event_object_get( peruse_event_h event_h, void** mpi_object )
{ {
ompi_peruse_handle_t * p = event_h; ompi_peruse_handle_t* p = event_h;
if (MPI_PARAM_CHECK) { if (MPI_PARAM_CHECK) {
if (NULL == event_h) if (NULL == event_h)
return PERUSE_ERR_EVENT_HANDLE; return PERUSE_ERR_EVENT_HANDLE;
@ -347,19 +322,11 @@ int PERUSE_Event_object_get (peruse_event_h event_h, void ** mpi_object)
return PERUSE_ERR_PARAMETER; return PERUSE_ERR_PARAMETER;
} }
switch (p->type) { switch (p->type) {
case PERUSE_TYPE_INVALID:
return PERUSE_ERR_GENERIC;
case PERUSE_TYPE_COMM: case PERUSE_TYPE_COMM:
*mpi_object = p->comm; *mpi_object = p->comm;
break; return PERUSE_SUCCESS;
case PERUSE_TYPE_FILE:
*mpi_object = p->file;
break;
case PERUSE_TYPE_WIN:
*mpi_object = p->win;
break;
} }
return PERUSE_SUCCESS; return PERUSE_ERR_GENERIC;
} }

Просмотреть файл

@ -1,14 +1,9 @@
/* /*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * Copyright (c) 2004-2006 The University of Tennessee and The University
* 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 * of Tennessee Research Foundation. All rights
* reserved. * reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved. * University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow

Просмотреть файл

@ -1,14 +1,9 @@
/* /*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * Copyright (c) 2004-2006 The University of Tennessee and The University
* 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 * of Tennessee Research Foundation. All rights
* reserved. * reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, * Copyright (c) 2004-2006 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved. * University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
@ -25,19 +20,10 @@
#include "class/ompi_pointer_array.h" #include "class/ompi_pointer_array.h"
void ompi_peruse_handle_construct (ompi_peruse_handle_t* p);
void ompi_peruse_handle_destruct (ompi_peruse_handle_t* p);
static opal_list_t peruse_handle_list; static opal_list_t peruse_handle_list;
static int ompi_peruse_initialized = 0; static int ompi_peruse_initialized = 0;
OBJ_CLASS_INSTANCE( static void ompi_peruse_handle_construct (ompi_peruse_handle_t* p)
ompi_peruse_handle_t,
opal_list_item_t,
ompi_peruse_handle_construct,
ompi_peruse_handle_destruct);
void ompi_peruse_handle_construct (ompi_peruse_handle_t* p)
{ {
OBJ_CONSTRUCT (&(p->lock), opal_mutex_t); OBJ_CONSTRUCT (&(p->lock), opal_mutex_t);
p->active = 0; p->active = 0;
@ -54,8 +40,7 @@ void ompi_peruse_handle_construct (ompi_peruse_handle_t* p)
OPAL_THREAD_UNLOCK (&peruse_handle_list_lock); OPAL_THREAD_UNLOCK (&peruse_handle_list_lock);
} }
static void ompi_peruse_handle_destruct (ompi_peruse_handle_t* p)
void ompi_peruse_handle_destruct (ompi_peruse_handle_t* p)
{ {
OPAL_THREAD_LOCK (&peruse_handle_list_lock); OPAL_THREAD_LOCK (&peruse_handle_list_lock);
opal_list_remove_item (&peruse_handle_list, (opal_list_item_t*)p); opal_list_remove_item (&peruse_handle_list, (opal_list_item_t*)p);
@ -64,6 +49,12 @@ void ompi_peruse_handle_destruct (ompi_peruse_handle_t* p)
OBJ_DESTRUCT (&(p->lock)); OBJ_DESTRUCT (&(p->lock));
} }
OBJ_CLASS_INSTANCE(
ompi_peruse_handle_t,
opal_list_item_t,
ompi_peruse_handle_construct,
ompi_peruse_handle_destruct);
int ompi_peruse_init (void) int ompi_peruse_init (void)
{ {