2004-01-10 01:09:51 +03:00
|
|
|
/*
|
2004-11-22 04:38:40 +03:00
|
|
|
* Copyright (c) 2004-2005 The Trustees of Indiana University.
|
|
|
|
* All rights reserved.
|
|
|
|
* Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
|
|
|
|
* All rights reserved.
|
2004-11-28 23:09:25 +03:00
|
|
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
|
|
* University of Stuttgart. All rights reserved.
|
2005-03-24 15:43:37 +03:00
|
|
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
|
|
|
* All rights reserved.
|
2004-11-22 04:38:40 +03:00
|
|
|
* $COPYRIGHT$
|
|
|
|
*
|
|
|
|
* Additional copyrights may follow
|
|
|
|
*
|
2004-01-10 01:09:51 +03:00
|
|
|
* $HEADER$
|
|
|
|
*/
|
|
|
|
|
2004-06-07 19:33:53 +04:00
|
|
|
#ifndef OMPI_PROC
|
|
|
|
#define OMPI_PROC
|
2004-01-10 01:09:51 +03:00
|
|
|
|
2004-03-19 00:35:28 +03:00
|
|
|
#include "include/types.h"
|
2005-07-03 20:22:16 +04:00
|
|
|
#include "opal/class/opal_list.h"
|
2005-03-14 23:57:21 +03:00
|
|
|
#include "dps/dps_types.h"
|
2005-07-04 02:45:48 +04:00
|
|
|
#include "opal/threads/mutex.h"
|
2005-03-14 23:57:21 +03:00
|
|
|
|
|
|
|
#include "mca/ns/ns_types.h"
|
|
|
|
|
2004-10-21 02:31:03 +04:00
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
2005-07-03 20:06:07 +04:00
|
|
|
OMPI_DECLSPEC extern opal_class_t ompi_proc_t_class;
|
2004-01-10 01:09:51 +03:00
|
|
|
|
2004-06-07 19:33:53 +04:00
|
|
|
struct ompi_proc_t {
|
2005-07-03 20:22:16 +04:00
|
|
|
opal_list_item_t super; /* allow proc to be placed on a list */
|
2005-03-14 23:57:21 +03:00
|
|
|
orte_process_name_t proc_name;
|
2004-02-14 01:16:39 +03:00
|
|
|
struct mca_pml_proc_t* proc_pml; /* PML specific proc data */
|
2005-07-03 20:06:07 +04:00
|
|
|
opal_object_t* proc_modex; /* MCA module exchange data */
|
2004-10-13 01:50:25 +04:00
|
|
|
uint32_t proc_arch;
|
2004-11-05 10:52:30 +03:00
|
|
|
struct ompi_convertor_t* proc_convertor;
|
2005-07-04 02:45:48 +04:00
|
|
|
opal_mutex_t proc_lock;
|
2004-01-10 01:09:51 +03:00
|
|
|
|
|
|
|
/* JMS: need to have the following information:
|
|
|
|
- how am i [mpi] connected (bitmap): spawn (parent/child),
|
|
|
|
connect, accept, joint
|
|
|
|
*/
|
|
|
|
};
|
2004-06-07 19:33:53 +04:00
|
|
|
typedef struct ompi_proc_t ompi_proc_t;
|
2004-10-28 22:13:43 +04:00
|
|
|
OMPI_DECLSPEC extern ompi_proc_t* ompi_proc_local_proc;
|
2004-01-10 01:09:51 +03:00
|
|
|
|
|
|
|
|
2004-02-13 16:56:55 +03:00
|
|
|
/**
|
|
|
|
* Query the run-time environment and build list of available proc instances.
|
|
|
|
*/
|
2004-06-07 19:33:53 +04:00
|
|
|
int ompi_proc_init(void);
|
2004-02-13 16:56:55 +03:00
|
|
|
|
2004-12-02 16:28:10 +03:00
|
|
|
/**
|
|
|
|
* Release the processes at the end of the application
|
|
|
|
*/
|
|
|
|
int ompi_proc_finalize(void);
|
|
|
|
|
2004-02-13 16:56:55 +03:00
|
|
|
/**
|
|
|
|
* Returns the list of proc instances associated with this job.
|
|
|
|
*/
|
2004-06-07 19:33:53 +04:00
|
|
|
ompi_proc_t** ompi_proc_world(size_t* size);
|
2004-02-13 16:56:55 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the list of all known proc instances.
|
|
|
|
*/
|
2004-06-07 19:33:53 +04:00
|
|
|
ompi_proc_t** ompi_proc_all(size_t* size);
|
2004-02-13 16:56:55 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns a list (of one) proc instances.
|
|
|
|
*/
|
2004-06-07 19:33:53 +04:00
|
|
|
ompi_proc_t** ompi_proc_self(size_t* size);
|
2004-01-29 18:34:47 +03:00
|
|
|
|
2004-02-13 16:56:55 +03:00
|
|
|
/**
|
|
|
|
* Returns the proc instance corresponding to the local proc.
|
|
|
|
*/
|
2004-06-07 19:33:53 +04:00
|
|
|
static inline ompi_proc_t* ompi_proc_local(void)
|
2004-10-28 22:13:43 +04:00
|
|
|
{
|
|
|
|
extern ompi_proc_t* ompi_proc_local_proc;
|
2004-06-07 19:33:53 +04:00
|
|
|
return ompi_proc_local_proc;
|
2004-01-29 18:34:47 +03:00
|
|
|
}
|
2004-01-10 01:09:51 +03:00
|
|
|
|
2004-05-18 01:28:32 +04:00
|
|
|
/**
|
2004-07-01 18:49:54 +04:00
|
|
|
* Returns the proc instance for a given name
|
2004-05-18 01:28:32 +04:00
|
|
|
*/
|
2005-03-14 23:57:21 +03:00
|
|
|
ompi_proc_t * ompi_proc_find ( const orte_process_name_t* name );
|
2004-05-18 01:28:32 +04:00
|
|
|
|
2004-08-04 21:05:22 +04:00
|
|
|
|
2004-09-17 14:10:24 +04:00
|
|
|
/**
|
|
|
|
* Returns the proc instance for a given name. If process is not known,
|
|
|
|
* we add it to the process list.
|
|
|
|
*/
|
2005-03-14 23:57:21 +03:00
|
|
|
ompi_proc_t * ompi_proc_find_and_add ( const orte_process_name_t* name, bool* isnew );
|
2004-09-17 14:10:24 +04:00
|
|
|
|
2004-08-04 21:05:22 +04:00
|
|
|
/**
|
|
|
|
* INPUT: ompi_proc_t **proclist : list of process pointers
|
|
|
|
* INPUT: int proclistsize : lenght of the proclist array
|
2005-03-14 23:57:21 +03:00
|
|
|
* IN/OUT: orte_buffer_t *buf : an orte_buffer containing the packed names
|
2004-09-16 14:07:14 +04:00
|
|
|
*
|
2004-08-04 21:05:22 +04:00
|
|
|
* The function takes a list of ompi_proc_t pointers (e.g. as given in groups)
|
|
|
|
* and returns a buffer, which contains a list of 'packed' ompi_process_name_t
|
|
|
|
* objects, in the same order as provided in proclist.
|
|
|
|
* By 'packed' we mean, that the buffer should be able to be sent across
|
|
|
|
* heterogeneous environments (e.g. it has to be big endian, ilp32 ).
|
2004-09-16 14:07:14 +04:00
|
|
|
* This buffer could be sent using MPI_Send using MPI_BYTE or OOB_send_packed.
|
2004-08-04 21:05:22 +04:00
|
|
|
*
|
|
|
|
* Return values:
|
|
|
|
* OMPI_SUCCESS on success
|
|
|
|
* OMPI_ERROR: other errors
|
|
|
|
*/
|
2004-09-16 14:07:14 +04:00
|
|
|
int ompi_proc_get_namebuf ( ompi_proc_t **proclist, int proclistsize,
|
2005-03-14 23:57:21 +03:00
|
|
|
orte_buffer_t *buf);
|
2004-08-04 21:05:22 +04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2005-03-14 23:57:21 +03:00
|
|
|
* INPUT: orte_buffer_t *buf : orte_buffer containing the packed names
|
2004-08-04 21:05:22 +04:00
|
|
|
* INPUT: int proclistsize : number of expected proc-pointres
|
|
|
|
* OUTPUT: ompi_proc_t ***proclist : list of process pointers
|
|
|
|
*
|
|
|
|
* This function 'unpacks' the ompi_process_name_t structures and looks
|
|
|
|
* the according ompi_proc_t structure up. If the 'environment' does not
|
|
|
|
* find a proc-structure, it tries to look it up from the name_service or
|
|
|
|
* any other service involved in such an operation (this is required for
|
|
|
|
* the dynamic MPI-2 scenarios). The buffer allocated by
|
|
|
|
* ompi_proc_get_proclist will not be returned to the 'environment'.
|
|
|
|
*
|
|
|
|
* Return value:
|
|
|
|
* OMPI_SUCCESS on success
|
|
|
|
* OMPI_ERROR else
|
|
|
|
*/
|
|
|
|
|
2005-03-14 23:57:21 +03:00
|
|
|
int ompi_proc_get_proclist (orte_buffer_t *buf, int proclistsize, ompi_proc_t ***proclist);
|
2004-08-04 21:05:22 +04:00
|
|
|
|
|
|
|
|
2004-10-21 02:31:03 +04:00
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
|
|
}
|
|
|
|
#endif
|
2004-06-07 19:33:53 +04:00
|
|
|
#endif /* OMPI_PROC */
|
2004-01-10 01:09:51 +03:00
|
|
|
|