474 lines
13 KiB
C
474 lines
13 KiB
C
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
|
/*
|
|
* (C) 2001 by Argonne National Laboratory.
|
|
* See COPYRIGHT in top-level directory.
|
|
*/
|
|
|
|
#ifndef PMI_H_INCLUDED
|
|
#define PMI_H_INCLUDED
|
|
|
|
#ifdef USE_PMI2_API
|
|
#error This header file defines the PMI v1 API, but PMI2 was selected
|
|
#endif
|
|
|
|
/* prototypes for the PMI interface in MPICH */
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*D
|
|
PMI_CONSTANTS - PMI definitions
|
|
|
|
Error Codes:
|
|
+ PMI_SUCCESS - operation completed successfully
|
|
. PMI_FAIL - operation failed
|
|
. PMI_ERR_NOMEM - input buffer not large enough
|
|
. PMI_ERR_INIT - PMI not initialized
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
. PMI_ERR_INVALID_KEY - invalid key argument
|
|
. PMI_ERR_INVALID_KEY_LENGTH - invalid key length argument
|
|
. PMI_ERR_INVALID_VAL - invalid val argument
|
|
. PMI_ERR_INVALID_VAL_LENGTH - invalid val length argument
|
|
. PMI_ERR_INVALID_LENGTH - invalid length argument
|
|
. PMI_ERR_INVALID_NUM_ARGS - invalid number of arguments
|
|
. PMI_ERR_INVALID_ARGS - invalid args argument
|
|
. PMI_ERR_INVALID_NUM_PARSED - invalid num_parsed length argument
|
|
. PMI_ERR_INVALID_KEYVALP - invalid keyvalp argument
|
|
- PMI_ERR_INVALID_SIZE - invalid size argument
|
|
|
|
Booleans:
|
|
+ PMI_TRUE - true
|
|
- PMI_FALSE - false
|
|
|
|
D*/
|
|
#define PMI_SUCCESS 0
|
|
#define PMI_FAIL -1
|
|
#define PMI_ERR_INIT 1
|
|
#define PMI_ERR_NOMEM 2
|
|
#define PMI_ERR_INVALID_ARG 3
|
|
#define PMI_ERR_INVALID_KEY 4
|
|
#define PMI_ERR_INVALID_KEY_LENGTH 5
|
|
#define PMI_ERR_INVALID_VAL 6
|
|
#define PMI_ERR_INVALID_VAL_LENGTH 7
|
|
#define PMI_ERR_INVALID_LENGTH 8
|
|
#define PMI_ERR_INVALID_NUM_ARGS 9
|
|
#define PMI_ERR_INVALID_ARGS 10
|
|
#define PMI_ERR_INVALID_NUM_PARSED 11
|
|
#define PMI_ERR_INVALID_KEYVALP 12
|
|
#define PMI_ERR_INVALID_SIZE 13
|
|
|
|
/* PMI Group functions */
|
|
|
|
/*@
|
|
PMI_Init - initialize the Process Manager Interface
|
|
|
|
Output Parameter:
|
|
. spawned - spawned flag
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - initialization completed successfully
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - initialization failed
|
|
|
|
Notes:
|
|
Initialize PMI for this process group. The value of spawned indicates whether
|
|
this process was created by 'PMI_Spawn_multiple'. 'spawned' will be 'PMI_TRUE' if
|
|
this process group has a parent and 'PMI_FALSE' if it does not.
|
|
|
|
@*/
|
|
int PMI_Init( int *spawned );
|
|
|
|
/*@
|
|
PMI_Initialized - check if PMI has been initialized
|
|
|
|
Output Parameter:
|
|
. initialized - boolean value
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - initialized successfully set
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - unable to set the variable
|
|
|
|
Notes:
|
|
On successful output, initialized will either be 'PMI_TRUE' or 'PMI_FALSE'.
|
|
|
|
+ PMI_TRUE - initialize has been called.
|
|
- PMI_FALSE - initialize has not been called or previously failed.
|
|
|
|
@*/
|
|
int PMI_Initialized( int *initialized );
|
|
|
|
/*@
|
|
PMI_Finalize - finalize the Process Manager Interface
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - finalization completed successfully
|
|
- PMI_FAIL - finalization failed
|
|
|
|
Notes:
|
|
Finalize PMI for this process group.
|
|
|
|
@*/
|
|
int PMI_Finalize( void );
|
|
|
|
/*@
|
|
PMI_Get_size - obtain the size of the process group
|
|
|
|
Output Parameters:
|
|
. size - pointer to an integer that receives the size of the process group
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - size successfully obtained
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - unable to return the size
|
|
|
|
Notes:
|
|
This function returns the size of the process group to which the local process
|
|
belongs.
|
|
|
|
@*/
|
|
int PMI_Get_size( int *size );
|
|
|
|
/*@
|
|
PMI_Get_rank - obtain the rank of the local process in the process group
|
|
|
|
Output Parameters:
|
|
. rank - pointer to an integer that receives the rank in the process group
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - rank successfully obtained
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - unable to return the rank
|
|
|
|
Notes:
|
|
This function returns the rank of the local process in its process group.
|
|
|
|
@*/
|
|
int PMI_Get_rank( int *rank );
|
|
|
|
/*@
|
|
PMI_Get_universe_size - obtain the universe size
|
|
|
|
Output Parameters:
|
|
. size - pointer to an integer that receives the size
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - size successfully obtained
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - unable to return the size
|
|
|
|
|
|
@*/
|
|
int PMI_Get_universe_size( int *size );
|
|
|
|
/*@
|
|
PMI_Get_appnum - obtain the application number
|
|
|
|
Output parameters:
|
|
. appnum - pointer to an integer that receives the appnum
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - appnum successfully obtained
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - unable to return the size
|
|
|
|
|
|
@*/
|
|
int PMI_Get_appnum( int *appnum );
|
|
|
|
/*@
|
|
PMI_Publish_name - publish a name
|
|
|
|
Input parameters:
|
|
. service_name - string representing the service being published
|
|
. port - string representing the port on which to contact the service
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - port for service successfully published
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - unable to publish service
|
|
|
|
|
|
@*/
|
|
int PMI_Publish_name( const char service_name[], const char port[] );
|
|
|
|
/*@
|
|
PMI_Unpublish_name - unpublish a name
|
|
|
|
Input parameters:
|
|
. service_name - string representing the service being unpublished
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - port for service successfully published
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - unable to unpublish service
|
|
|
|
|
|
@*/
|
|
int PMI_Unpublish_name( const char service_name[] );
|
|
|
|
/*@
|
|
PMI_Lookup_name - lookup a service by name
|
|
|
|
Input parameters:
|
|
. service_name - string representing the service being published
|
|
|
|
Output parameters:
|
|
. port - string representing the port on which to contact the service
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - port for service successfully obtained
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - unable to lookup service
|
|
|
|
|
|
@*/
|
|
int PMI_Lookup_name( const char service_name[], char port[] );
|
|
|
|
/*@
|
|
PMI_Barrier - barrier across the process group
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - barrier successfully finished
|
|
- PMI_FAIL - barrier failed
|
|
|
|
Notes:
|
|
This function is a collective call across all processes in the process group
|
|
the local process belongs to. It will not return until all the processes
|
|
have called 'PMI_Barrier()'.
|
|
|
|
@*/
|
|
int PMI_Barrier( void );
|
|
|
|
/*@
|
|
PMI_Abort - abort the process group associated with this process
|
|
|
|
Input Parameters:
|
|
+ exit_code - exit code to be returned by this process
|
|
- error_msg - error message to be printed
|
|
|
|
Return values:
|
|
. none - this function should not return
|
|
@*/
|
|
int PMI_Abort(int exit_code, const char error_msg[]);
|
|
|
|
/* PMI Keymap functions */
|
|
/*@
|
|
PMI_KVS_Get_my_name - obtain the name of the keyval space the local process group has access to
|
|
|
|
Input Parameters:
|
|
. length - length of the kvsname character array
|
|
|
|
Output Parameters:
|
|
. kvsname - a string that receives the keyval space name
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - kvsname successfully obtained
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
. PMI_ERR_INVALID_LENGTH - invalid length argument
|
|
- PMI_FAIL - unable to return the kvsname
|
|
|
|
Notes:
|
|
This function returns the name of the keyval space that this process and all
|
|
other processes in the process group have access to. The output parameter,
|
|
kvsname, must be at least as long as the value returned by
|
|
'PMI_KVS_Get_name_length_max()'.
|
|
|
|
@*/
|
|
int PMI_KVS_Get_my_name( char kvsname[], int length );
|
|
|
|
/*@
|
|
PMI_KVS_Get_name_length_max - obtain the length necessary to store a kvsname
|
|
|
|
Output Parameter:
|
|
. length - maximum length required to hold a keyval space name
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - length successfully set
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - unable to set the length
|
|
|
|
Notes:
|
|
This function returns the string length required to store a keyval space name.
|
|
|
|
A routine is used rather than setting a maximum value in 'pmi.h' to allow
|
|
different implementations of PMI to be used with the same executable. These
|
|
different implementations may allow different maximum lengths; by using a
|
|
routine here, we can interface with a variety of implementations of PMI.
|
|
|
|
@*/
|
|
int PMI_KVS_Get_name_length_max( int *length );
|
|
|
|
/*@
|
|
PMI_KVS_Get_key_length_max - obtain the length necessary to store a key
|
|
|
|
Output Parameter:
|
|
. length - maximum length required to hold a key string.
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - length successfully set
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - unable to set the length
|
|
|
|
Notes:
|
|
This function returns the string length required to store a key.
|
|
|
|
@*/
|
|
int PMI_KVS_Get_key_length_max( int *length );
|
|
|
|
/*@
|
|
PMI_KVS_Get_value_length_max - obtain the length necessary to store a value
|
|
|
|
Output Parameter:
|
|
. length - maximum length required to hold a keyval space value
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - length successfully set
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - unable to set the length
|
|
|
|
Notes:
|
|
This function returns the string length required to store a value from a
|
|
keyval space.
|
|
|
|
@*/
|
|
int PMI_KVS_Get_value_length_max( int *length );
|
|
|
|
/*@
|
|
PMI_KVS_Put - put a key/value pair in a keyval space
|
|
|
|
Input Parameters:
|
|
+ kvsname - keyval space name
|
|
. key - key
|
|
- value - value
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - keyval pair successfully put in keyval space
|
|
. PMI_ERR_INVALID_KVS - invalid kvsname argument
|
|
. PMI_ERR_INVALID_KEY - invalid key argument
|
|
. PMI_ERR_INVALID_VAL - invalid val argument
|
|
- PMI_FAIL - put failed
|
|
|
|
Notes:
|
|
This function puts the key/value pair in the specified keyval space. The
|
|
value is not visible to other processes until 'PMI_KVS_Commit()' is called.
|
|
The function may complete locally. After 'PMI_KVS_Commit()' is called, the
|
|
value may be retrieved by calling 'PMI_KVS_Get()'. All keys put to a keyval
|
|
space must be unique to the keyval space. You may not put more than once
|
|
with the same key.
|
|
|
|
@*/
|
|
int PMI_KVS_Put( const char kvsname[], const char key[], const char value[]);
|
|
|
|
/*@
|
|
PMI_KVS_Commit - commit all previous puts to the keyval space
|
|
|
|
Input Parameters:
|
|
. kvsname - keyval space name
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - commit succeeded
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - commit failed
|
|
|
|
Notes:
|
|
This function commits all previous puts since the last 'PMI_KVS_Commit()' into
|
|
the specified keyval space. It is a process local operation.
|
|
|
|
@*/
|
|
int PMI_KVS_Commit( const char kvsname[] );
|
|
|
|
/*@
|
|
PMI_KVS_Get - get a key/value pair from a keyval space
|
|
|
|
Input Parameters:
|
|
+ kvsname - keyval space name
|
|
. key - key
|
|
- length - length of value character array
|
|
|
|
Output Parameters:
|
|
. value - value
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - get succeeded
|
|
. PMI_ERR_INVALID_KVS - invalid kvsname argument
|
|
. PMI_ERR_INVALID_KEY - invalid key argument
|
|
. PMI_ERR_INVALID_VAL - invalid val argument
|
|
. PMI_ERR_INVALID_LENGTH - invalid length argument
|
|
- PMI_FAIL - get failed
|
|
|
|
Notes:
|
|
This function gets the value of the specified key in the keyval space.
|
|
|
|
@*/
|
|
int PMI_KVS_Get( const char kvsname[], const char key[], char value[], int length);
|
|
|
|
/* PMI Process Creation functions */
|
|
|
|
/*S
|
|
PMI_keyval_t - keyval structure used by PMI_Spawn_mulitiple
|
|
|
|
Fields:
|
|
+ key - name of the key
|
|
- val - value of the key
|
|
|
|
S*/
|
|
typedef struct PMI_keyval_t
|
|
{
|
|
const char * key;
|
|
char * val;
|
|
} PMI_keyval_t;
|
|
|
|
/*@
|
|
PMI_Spawn_multiple - spawn a new set of processes
|
|
|
|
Input Parameters:
|
|
+ count - count of commands
|
|
. cmds - array of command strings
|
|
. argvs - array of argv arrays for each command string
|
|
. maxprocs - array of maximum processes to spawn for each command string
|
|
. info_keyval_sizes - array giving the number of elements in each of the
|
|
'info_keyval_vectors'
|
|
. info_keyval_vectors - array of keyval vector arrays
|
|
. preput_keyval_size - Number of elements in 'preput_keyval_vector'
|
|
- preput_keyval_vector - array of keyvals to be pre-put in the spawned keyval space
|
|
|
|
Output Parameter:
|
|
. errors - array of errors for each command
|
|
|
|
Return values:
|
|
+ PMI_SUCCESS - spawn successful
|
|
. PMI_ERR_INVALID_ARG - invalid argument
|
|
- PMI_FAIL - spawn failed
|
|
|
|
Notes:
|
|
This function spawns a set of processes into a new process group. The 'count'
|
|
field refers to the size of the array parameters - 'cmd', 'argvs', 'maxprocs',
|
|
'info_keyval_sizes' and 'info_keyval_vectors'. The 'preput_keyval_size' refers
|
|
to the size of the 'preput_keyval_vector' array. The 'preput_keyval_vector'
|
|
contains keyval pairs that will be put in the keyval space of the newly
|
|
created process group before the processes are started. The 'maxprocs' array
|
|
specifies the desired number of processes to create for each 'cmd' string.
|
|
The actual number of processes may be less than the numbers specified in
|
|
maxprocs. The acceptable number of processes spawned may be controlled by
|
|
``soft'' keyvals in the info arrays. The ``soft'' option is specified by
|
|
mpiexec in the MPI-2 standard. Environment variables may be passed to the
|
|
spawned processes through PMI implementation specific 'info_keyval' parameters.
|
|
@*/
|
|
int PMI_Spawn_multiple(int count,
|
|
const char * cmds[],
|
|
const char ** argvs[],
|
|
const int maxprocs[],
|
|
const int info_keyval_sizesp[],
|
|
const PMI_keyval_t * info_keyval_vectors[],
|
|
int preput_keyval_size,
|
|
const PMI_keyval_t preput_keyval_vector[],
|
|
int errors[]);
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif
|
|
|
|
#endif
|