File: dpm.h

package info (click to toggle)
openmpi 1.6.5-9.1%2Bdeb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 91,628 kB
  • ctags: 44,305
  • sloc: ansic: 408,966; cpp: 44,454; sh: 27,828; makefile: 10,486; asm: 3,882; python: 1,239; lex: 805; perl: 549; csh: 253; fortran: 232; f90: 126; tcl: 12
file content (200 lines) | stat: -rw-r--r-- 6,864 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
/*
 * Copyright (c) 2004-2008 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$
 */
/**
 * @file
 *
 * Dynamic Process Management Interface
 *
 */

#ifndef OMPI_MCA_DPM_H
#define OMPI_MCA_DPM_H

#include "ompi_config.h"

#include "opal/mca/mca.h"
#include "opal/mca/base/base.h"


#include "ompi/info/info.h"
#include "ompi/communicator/communicator.h"

BEGIN_C_DECLS

/* OMPI port definitions */
/* carry over the INVALID def */
#define OMPI_RML_TAG_INVALID                        ORTE_RML_TAG_INVALID
/* define a starting point to avoid conflicts */
#define OMPI_RML_TAG_BASE                           ORTE_RML_TAG_MAX

#define OMPI_RML_TAG_UDAPL                          OMPI_RML_TAG_BASE+1
#define OMPI_RML_TAG_OPENIB                         OMPI_RML_TAG_BASE+2
#define OMPI_RML_TAG_XOPENIB                        OMPI_RML_TAG_BASE+3
#define OMPI_RML_TAG_COMM_CID_INTRA                 OMPI_RML_TAG_BASE+4
#define OMPI_RML_TAG_XOOB                           OMPI_RML_TAG_BASE+5
#define OMPI_RML_TAG_SM_BACK_FILE_CREATED           OMPI_RML_TAG_BASE+6
#define OMPI_CRCP_COORD_BOOKMARK_TAG                OMPI_RML_TAG_BASE+7
#define OMPI_COMM_JOIN_TAG                          OMPI_RML_TAG_BASE+8

/* support for shared memory collectives */
#define OMPI_RML_TAG_COLL_SM2_BACK_FILE_CREATED     OMPI_RML_TAG_BASE+9

#define OMPI_RML_TAG_DYNAMIC                        OMPI_RML_TAG_BASE+200




/*
 * Initialize a module
 */
typedef int (*ompi_dpm_base_module_init_fn_t)(void);

/*
 * Connect/accept communications
 */
typedef int (*ompi_dpm_base_module_connect_accept_fn_t)(ompi_communicator_t *comm, int root,
                                                        char *port, bool send_first,
                                                        ompi_communicator_t **newcomm);

/**
 * Executes internally a disconnect on all dynamic communicators
 * in case the user did not disconnect them.
 */
typedef void (*ompi_dpm_base_module_disconnect_fn_t)(ompi_communicator_t *comm);

/*
 * Dynamically spawn processes
 */
typedef int (*ompi_dpm_base_module_spawn_fn_t)(int count, char **array_of_commands,
                                               char ***array_of_argv,
                                               int *array_of_maxprocs,
                                               MPI_Info *array_of_info,
                                               char *port_name);

/*
 * This routine checks, whether an application has been spawned
 * by another MPI application, or has been independently started.
 * If it has been spawned, it establishes the parent communicator.
 * Since the routine has to communicate, it should be among the last
 * steps in MPI_Init, to be sure that everything is already set up.
 */
typedef int (*ompi_dpm_base_module_dyn_init_fn_t)(void);

/*
 * Interface for mpi_finalize to call to ensure dynamically spawned procs
 * collectively finalize
 */
typedef int (*ompi_dpm_base_module_dyn_finalize_fn_t)(void);

/* this routine counts the number of different jobids of the processes
   given in a certain communicator. If there is more than one jobid,
   we mark the communicator as 'dynamic'. This is especially relevant
   for the MPI_Comm_disconnect *and* for MPI_Finalize, where we have
   to wait for all still connected processes.
*/
typedef void (*ompi_dpm_base_module_mark_dyncomm_fn_t)(ompi_communicator_t *comm);

/*
 * Open a port to interface to a dynamically spawned job - if the
 * specified tag is valid, then it will be used to form the port. Otherwise,
 * a dynamically assigned tag that is unique to this request will be provided
 */
typedef int (*ompi_dpm_base_module_open_port_fn_t)(char *port_name, orte_rml_tag_t tag);

/*
 * Converts an opaque port string to a RML process nane and tag.
 */
typedef int (*ompi_dpm_base_module_parse_port_name_t)(char *port_name,
                                                      char **hnp_uri, char **rml_uri,
                                                      orte_rml_tag_t *tag);

/* 
 * Update the routed component to make sure that the RML can send messages to
 * the remote port
 */
typedef int (*ompi_dpm_base_module_route_to_port_t)(char *rml_uri, orte_process_name_t *rproc);


/*
 * Close a port
 */
typedef int (*ompi_dpm_base_module_close_port_fn_t)(char *port_name);

/*
 * Finalize a module
 */
typedef int (*ompi_dpm_base_module_finalize_fn_t)(void);

/**
* Structure for DPM modules
 */
struct ompi_dpm_base_module_1_0_0_t {
    /** Initialization Function */
    ompi_dpm_base_module_init_fn_t              init;
    /* connect/accept */
    ompi_dpm_base_module_connect_accept_fn_t    connect_accept;
    /* disconnect */
    ompi_dpm_base_module_disconnect_fn_t        disconnect;
    /* spawn processes */
    ompi_dpm_base_module_spawn_fn_t             spawn;
    /* dyn_init */
    ompi_dpm_base_module_dyn_init_fn_t          dyn_init;
    /* dyn_finalize */
    ompi_dpm_base_module_dyn_finalize_fn_t      dyn_finalize;
    /* mark dyncomm */
    ompi_dpm_base_module_mark_dyncomm_fn_t      mark_dyncomm;
    /* open port */
    ompi_dpm_base_module_open_port_fn_t         open_port;
    /* parse port string */
    ompi_dpm_base_module_parse_port_name_t      parse_port;
    /* update route to a port */
    ompi_dpm_base_module_route_to_port_t        route_to_port;
    /* close port */
    ompi_dpm_base_module_close_port_fn_t        close_port;
    /* finalize */
    ompi_dpm_base_module_finalize_fn_t          finalize;
};
typedef struct ompi_dpm_base_module_1_0_0_t ompi_dpm_base_module_1_0_0_t;
typedef struct ompi_dpm_base_module_1_0_0_t ompi_dpm_base_module_t;

OMPI_DECLSPEC extern ompi_dpm_base_module_t ompi_dpm;


/**
 * Structure for DPM components.
 */
struct ompi_dpm_base_component_2_0_0_t {
    /** MCA base component */
    mca_base_component_t base_version;
    /** MCA base data */
    mca_base_component_data_t base_data;
};
typedef struct ompi_dpm_base_component_2_0_0_t ompi_dpm_base_component_2_0_0_t;
typedef struct ompi_dpm_base_component_2_0_0_t ompi_dpm_base_component_t;

/**
 * Macro for use in components that are of type DPM
 */
#define OMPI_DPM_BASE_VERSION_2_0_0 \
    MCA_BASE_VERSION_2_0_0, \
    "dpm", 2, 0, 0


END_C_DECLS

#endif /* OMPI_MCA_DPM_H */