From 903bb5d1bfd00a86a5a0c0b7ab22c46e99341d8e Mon Sep 17 00:00:00 2001 From: David Bigagli <snowflake.schedmd.com> Date: Tue, 18 Jun 2013 14:05:16 -0700 Subject: [PATCH] Renamed pmi2_api.h to pmi2.h. --- contribs/pmi2/pmi2_api.h | 704 --------------------------------------- 1 file changed, 704 deletions(-) delete mode 100644 contribs/pmi2/pmi2_api.h diff --git a/contribs/pmi2/pmi2_api.h b/contribs/pmi2/pmi2_api.h deleted file mode 100644 index e72a985ff67..00000000000 --- a/contribs/pmi2/pmi2_api.h +++ /dev/null @@ -1,704 +0,0 @@ -/* -*- Mode: C; c-basic-offset:4 ; -*- */ -/* - * (C) 2007 by Argonne National Laboratory. - * See COPYRIGHT in top-level directory. - */ - -#ifndef PMI2_H_INCLUDED -#define PMI2_H_INCLUDED - -#ifndef USE_PMI2_API -/*#error This header file defines the PMI2 API, but PMI2 was not selected*/ -#endif - -#define PMI2_MAX_KEYLEN 64 -#define PMI2_MAX_VALLEN 1024 -#define PMI2_MAX_ATTRVALUE 1024 -#define PMI2_ID_NULL -1 - -#define PMII_COMMANDLEN_SIZE 6 -#define PMII_MAX_COMMAND_LEN (64*1024) - -#if defined(__cplusplus) -extern "C" { -#endif - -static const char FULLINIT_CMD[] = "fullinit"; -static const char FULLINITRESP_CMD[] = "fullinit-response"; -static const char FINALIZE_CMD[] = "finalize"; -static const char FINALIZERESP_CMD[] = "finalize-response"; -static const char ABORT_CMD[] = "abort"; -static const char JOBGETID_CMD[] = "job-getid"; -static const char JOBGETIDRESP_CMD[] = "job-getid-response"; -static const char JOBCONNECT_CMD[] = "job-connect"; -static const char JOBCONNECTRESP_CMD[] = "job-connect-response"; -static const char JOBDISCONNECT_CMD[] = "job-disconnect"; -static const char JOBDISCONNECTRESP_CMD[] = "job-disconnect-response"; -static const char KVSPUT_CMD[] = "kvs-put"; -static const char KVSPUTRESP_CMD[] = "kvs-put-response"; -static const char KVSFENCE_CMD[] = "kvs-fence"; -static const char KVSFENCERESP_CMD[] = "kvs-fence-response"; -static const char KVSGET_CMD[] = "kvs-get"; -static const char KVSGETRESP_CMD[] = "kvs-get-response"; -static const char GETNODEATTR_CMD[] = "info-getnodeattr"; -static const char GETNODEATTRRESP_CMD[] = "info-getnodeattr-response"; -static const char PUTNODEATTR_CMD[] = "info-putnodeattr"; -static const char PUTNODEATTRRESP_CMD[] = "info-putnodeattr-response"; -static const char GETJOBATTR_CMD[] = "info-getjobattr"; -static const char GETJOBATTRRESP_CMD[] = "info-getjobattr-response"; -static const char NAMEPUBLISH_CMD[] = "name-publish"; -static const char NAMEPUBLISHRESP_CMD[] = "name-publish-response"; -static const char NAMEUNPUBLISH_CMD[] = "name-unpublish"; -static const char NAMEUNPUBLISHRESP_CMD[] = "name-unpublish-response"; -static const char NAMELOOKUP_CMD[] = "name-lookup"; -static const char NAMELOOKUPRESP_CMD[] = "name-lookup-response"; - -static const char PMIJOBID_KEY[] = "pmijobid"; -static const char PMIRANK_KEY[] = "pmirank"; -static const char SRCID_KEY[] = "srcid"; -static const char THREADED_KEY[] = "threaded"; -static const char RC_KEY[] = "rc"; -static const char ERRMSG_KEY[] = "errmsg"; -static const char PMIVERSION_KEY[] = "pmi-version"; -static const char PMISUBVER_KEY[] = "pmi-subversion"; -static const char RANK_KEY[] = "rank"; -static const char SIZE_KEY[] = "size"; -static const char APPNUM_KEY[] = "appnum"; -static const char SPAWNERJOBID_KEY[] = "spawner-jobid"; -static const char DEBUGGED_KEY[] = "debugged"; -static const char PMIVERBOSE_KEY[] = "pmiverbose"; -static const char ISWORLD_KEY[] = "isworld"; -static const char MSG_KEY[] = "msg"; -static const char JOBID_KEY[] = "jobid"; -static const char KVSCOPY_KEY[] = "kvscopy"; -static const char KEY_KEY[] = "key"; -static const char VALUE_KEY[] = "value"; -static const char FOUND_KEY[] = "found"; -static const char WAIT_KEY[] = "wait"; -static const char NAME_KEY[] = "name"; -static const char PORT_KEY[] = "port"; -static const char THRID_KEY[] = "thrid"; -static const char INFOKEYCOUNT_KEY[] = "infokeycount"; -static const char INFOKEY_KEY[] = "infokey%d"; -static const char INFOVAL_KEY[] = "infoval%d"; - -static const char TRUE_VAL[] = "TRUE"; -static const char FALSE_VAL[] = "FALSE"; - -/* Local types */ - -/* Parse commands are in this structure. Fields in this structure are - dynamically allocated as necessary */ -typedef struct PMI2_Keyvalpair { - const char *key; - const char *value; - int valueLen; /* Length of a value (values may contain nulls, so - we need this) */ - int isCopy; /* The value is a copy (and will need to be freed) - if this is true, otherwise, - it is a null-terminated string in the original - buffer */ -} PMI2_Keyvalpair; - -typedef struct PMI2_Command { - int nPairs; /* Number of key=value pairs */ - char *command; /* Overall command buffer */ - PMI2_Keyvalpair **pairs; /* Array of pointers to pairs */ - int complete; -} PMI2_Command; - - -/*D -PMI2_CONSTANTS - PMI2 definitions - -Error Codes: -+ PMI2_SUCCESS - operation completed successfully -. PMI2_FAIL - operation failed -. PMI2_ERR_NOMEM - input buffer not large enough -. PMI2_ERR_INIT - PMI not initialized -. PMI2_ERR_INVALID_ARG - invalid argument -. PMI2_ERR_INVALID_KEY - invalid key argument -. PMI2_ERR_INVALID_KEY_LENGTH - invalid key length argument -. PMI2_ERR_INVALID_VAL - invalid val argument -. PMI2_ERR_INVALID_VAL_LENGTH - invalid val length argument -. PMI2_ERR_INVALID_LENGTH - invalid length argument -. PMI2_ERR_INVALID_NUM_ARGS - invalid number of arguments -. PMI2_ERR_INVALID_ARGS - invalid args argument -. PMI2_ERR_INVALID_NUM_PARSED - invalid num_parsed length argument -. PMI2_ERR_INVALID_KEYVALP - invalid keyvalp argument -. PMI2_ERR_INVALID_SIZE - invalid size argument -- PMI2_ERR_OTHER - other unspecified error - -D*/ -#define PMI2_SUCCESS 0 -#define PMI2_FAIL -1 -#define PMI2_ERR_INIT 1 -#define PMI2_ERR_NOMEM 2 -#define PMI2_ERR_INVALID_ARG 3 -#define PMI2_ERR_INVALID_KEY 4 -#define PMI2_ERR_INVALID_KEY_LENGTH 5 -#define PMI2_ERR_INVALID_VAL 6 -#define PMI2_ERR_INVALID_VAL_LENGTH 7 -#define PMI2_ERR_INVALID_LENGTH 8 -#define PMI2_ERR_INVALID_NUM_ARGS 9 -#define PMI2_ERR_INVALID_ARGS 10 -#define PMI2_ERR_INVALID_NUM_PARSED 11 -#define PMI2_ERR_INVALID_KEYVALP 12 -#define PMI2_ERR_INVALID_SIZE 13 -#define PMI2_ERR_OTHER 14 - -/* This is here to allow spawn multiple functions to compile. This - needs to be removed once those functions are fixed for pmi2 */ -/* -typedef struct PMI_keyval_t -{ - char * key; - char * val; -} PMI_keyval_t; -*/ - -/*@ - PMI2_Connect_comm_t - connection structure used when connecting to other jobs - - Fields: - + read - Read from a connection to the leader of the job to which - this process will be connecting. Returns 0 on success or an MPI - error code on failure. - . write - Write to a connection to the leader of the job to which - this process will be connecting. Returns 0 on success or an MPI - error code on failure. - . ctx - An anonymous pointer to data that may be used by the read - and write members. - - isMaster - Indicates which process is the "master"; may have the - values 1 (is the master), 0 (is not the master), or -1 (neither is - designated as the master). The two processes must agree on which - process is the master, or both must select -1 (neither is the - master). - - Notes: - A typical implementation of these functions will use the read and - write calls on a pre-established file descriptor (fd) between the - two leading processes. This will be needed only if the PMI server - cannot access the KVS spaces of another job (this may happen, for - example, if each mpiexec creates the KVS spaces for the processes - that it manages). - -@*/ -typedef struct PMI2_Connect_comm { - int (*read)( void *buf, int maxlen, void *ctx ); - int (*write)( const void *buf, int len, void *ctx ); - void *ctx; - int isMaster; -} PMI2_Connect_comm_t; - - -/*S - MPID_Info - Structure of an MPID info - - Notes: - There is no reference count because 'MPI_Info' values, unlike other MPI - objects, may be changed after they are passed to a routine without - changing the routine''s behavior. In other words, any routine that uses - an 'MPI_Info' object must make a copy or otherwise act on any info value - that it needs. - - A linked list is used because the typical 'MPI_Info' list will be short - and a simple linked list is easy to implement and to maintain. Similarly, - a single structure rather than separate header and element structures are - defined for simplicity. No separate thread lock is provided because - info routines are not performance critical; they may use the single - critical section lock in the 'MPIR_Process' structure when they need a - thread lock. - - This particular form of linked list (in particular, with this particular - choice of the first two members) is used because it allows us to use - the same routines to manage this list as are used to manage the - list of free objects (in the file 'src/util/mem/handlemem.c'). In - particular, if lock-free routines for updating a linked list are - provided, they can be used for managing the 'MPID_Info' structure as well. - - The MPI standard requires that keys can be no less that 32 characters and - no more than 255 characters. There is no mandated limit on the size - of values. - - Module: - Info-DS - S*/ -typedef struct MPID_Info { - int handle; - int pobj_mutex; - int ref_count; - struct MPID_Info *next; - char *key; - char *value; -} MPID_Info; - -#define PMI2U_Info MPID_Info - -/*@ - PMI2_Init - initialize the Process Manager Interface - - Output Parameter: - + spawned - spawned flag - . size - number of processes in the job - . rank - rank of this process in the job - - appnum - which executable is this on the mpiexec commandline - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - - Notes: - Initialize PMI for this process group. The value of spawned indicates whether - this process was created by 'PMI2_Spawn_multiple'. 'spawned' will be non-zero - iff this process group has a parent. - -@*/ -int PMI2_Init(int *spawned, int *size, int *rank, int *appnum); - -/*@ - PMI2_Finalize - finalize the Process Manager Interface - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - - Notes: - Finalize PMI for this job. - -@*/ -int PMI2_Finalize(void); - -/*@ - PMI2_Initialized - check if PMI has been initialized - - Return values: - Non-zero if PMI2_Initialize has been called successfully, zero otherwise. - -@*/ -int PMI2_Initialized(void); - -/*@ - PMI2_Abort - abort the process group associated with this process - - Input Parameters: - + flag - non-zero if all processes in this job should abort, zero otherwise - - error_msg - error message to be printed - - Return values: - If the abort succeeds this function will not return. Returns an MPI - error code otherwise. - -@*/ -int PMI2_Abort(int flag, const char msg[]); - -/*@ - PMI2_Spawn - spawn a new set of processes - - Input Parameters: - + count - count of commands - . cmds - array of command strings - . argcs - size of argv arrays for each command string - . 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 - - jobIdSize - size of the buffer provided in jobId - - Output Parameter: - + jobId - job id of the spawned processes - - errors - array of errors for each command - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - - Notes: - This function spawns a set of processes into a new job. 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 job 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 PMI2_Job_Spawn(int count, const char * cmds[], - int argcs[], const char ** argvs[], - const int maxprocs[], - const int info_keyval_sizes[], - const struct MPID_Info *info_keyval_vectors[], - int preput_keyval_size, - const struct MPID_Info *preput_keyval_vector[], - char jobId[], int jobIdSize, - int errors[]); - - -/*@ - PMI2_Job_GetId - get job id of this job - - Input parameters: - . jobid_size - size of buffer provided in jobid - - Output parameters: - . jobid - the job id of this job - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - -@*/ -int PMI2_Job_GetId(char jobid[], int jobid_size); - -/*@ - PMI2_Job_GetRank - get rank of this job - - Output parameters: - . rank - the rank of this job - - Return values: - Returns 'PMI2_SUCCESS' on success and an PMI error code on failure. - -@*/ -int PMI2_Job_GetRank(int* rank); - -/*@ - PMI2_Info_GetSize - get the number of processes on the node - - Output parameters: - . rank - the rank of this job - - Return values: - Returns 'PMI2_SUCCESS' on success and an PMI error code on failure. -@*/ -int PMI2_Info_GetSize(int* size); - -/*@ - PMI2_Job_Connect - connect to the parallel job with ID jobid - - Input parameters: - . jobid - job id of the job to connect to - - Output parameters: - . conn - connection structure used to exteblish communication with - the remote job - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - - Notes: - This just "registers" the other parallel job as part of a parallel - program, and is used in the PMI2_KVS_xxx routines (see below). This - is not a collective call and establishes a connection between all - processes that are connected to the calling processes (on the one - side) and that are connected to the named jobId on the other - side. Processes that are already connected may call this routine. - -@*/ -int PMI2_Job_Connect(const char jobid[], PMI2_Connect_comm_t *conn); - -/*@ - PMI2_Job_Disconnect - disconnects from the job with ID jobid - - Input parameters: - . jobid - job id of the job to connect to - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - -@*/ -int PMI2_Job_Disconnect(const char jobid[]); - -/*@ - PMI2_KVS_Put - put a key/value pair in the keyval space for this job - - Input Parameters: - + key - key - - value - value - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - - Notes: - If multiple PMI2_KVS_Put calls are made with the same key between - calls to PMI2_KVS_Fence, the behavior is undefined. That is, the - value returned by PMI2_KVS_Get for that key after the PMI2_KVS_Fence - is not defined. - -@*/ -int PMI2_KVS_Put(const char key[], const char value[]); -/*@ - PMI2_KVS_Fence - commit all PMI2_KVS_Put calls made before this fence - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - - Notes: - This is a collective call across the job. It has semantics that are - similar to those for MPI_Win_fence and hence is most easily - implemented as a barrier across all of the processes in the job. - Specifically, all PMI2_KVS_Put operations performed by any process in - the same job must be visible to all processes (by using PMI2_KVS_Get) - after PMI2_KVS_Fence completes. However, a PMI implementation could - make this a lazy operation by not waiting for all processes to enter - their corresponding PMI2_KVS_Fence until some process issues a - PMI2_KVS_Get. This might be appropriate for some wide-area - implementations. - -@*/ -int PMI2_KVS_Fence(void); - -/*@ - PMI2_KVS_Get - returns the value associated with key in the key-value - space associated with the job ID jobid - - Input Parameters: - + jobid - the job id identifying the key-value space in which to look - for key. If jobid is NULL, look in the key-value space of this job. - . src_pmi_id - the pmi id of the process which put this keypair. This - is just a hint to the server. PMI2_ID_NULL should be passed if no - hint is provided. - . key - key - - maxvalue - size of the buffer provided in value - - Output Parameters: - + value - value associated with key - - vallen - length of the returned value, or, if the length is longer - than maxvalue, the negative of the required length is returned - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - -@*/ -int PMI2_KVS_Get(const char *jobid, int src_pmi_id, const char key[], char value [], int maxvalue, int *vallen); - -/*@ - PMI2_Info_GetNodeAttr - returns the value of the attribute associated - with this node - - Input Parameters: - + name - name of the node attribute - . valuelen - size of the buffer provided in value - - waitfor - if non-zero, the function will not return until the - attribute is available - - Output Parameters: - + value - value of the attribute - - found - non-zero indicates that the attribute was found - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - - Notes: - This provides a way, when combined with PMI2_Info_PutNodeAttr, for - processes on the same node to share information without requiring a - more general barrier across the entire job. - - If waitfor is non-zero, the function will never return with found - set to zero. - - Predefined attributes: - + memPoolType - If the process manager allocated a shared memory - pool for the MPI processes in this job and on this node, return - the type of that pool. Types include sysv, anonmmap and ntshm. - . memSYSVid - Return the SYSV memory segment id if the memory pool - type is sysv. Returned as a string. - . memAnonMMAPfd - Return the FD of the anonymous mmap segment. The - FD is returned as a string. - - memNTName - Return the name of the Windows NT shared memory - segment, file mapping object backed by system paging - file. Returned as a string. - -@*/ -int PMI2_Info_GetNodeAttr(const char name[], char value[], int valuelen, int *found, int waitfor); - -/*@ - PMI2_Info_GetNodeAttrIntArray - returns the value of the attribute associated - with this node. The value must be an array of integers. - - Input Parameters: - + name - name of the node attribute - - arraylen - number of elements in array - - Output Parameters: - + array - value of attribute - . outlen - number of elements returned - - found - non-zero if attribute was found - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - - Notes: - Notice that, unlike PMI2_Info_GetNodeAttr, this function does not - have a waitfor parameter, and will return immediately with found=0 - if the attribute was not found. - - Predefined array attribute names: - + localRanksCount - Return the number of local ranks that will be - returned by the key localRanks. - . localRanks - Return the ranks in MPI_COMM_WORLD of the processes - that are running on this node. - - cartCoords - Return the Cartesian coordinates of this process in - the underlying network topology. The coordinates are indexed from - zero. Value only if the Job attribute for physTopology includes - cartesian. - -@*/ -int PMI2_Info_GetNodeAttrIntArray(const char name[], int array[], int arraylen, int *outlen, int *found); - -/*@ - PMI2_Info_PutNodeAttr - stores the value of the named attribute - associated with this node - - Input Parameters: - + name - name of the node attribute - - value - the value of the attribute - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - - Notes: - For example, it might be used to share segment ids with other - processes on the same SMP node. - -@*/ -int PMI2_Info_PutNodeAttr(const char name[], const char value[]); - -/*@ - PMI2_Info_GetJobAttr - returns the value of the attribute associated - with this job - - Input Parameters: - + name - name of the job attribute - - valuelen - size of the buffer provided in value - - Output Parameters: - + value - value of the attribute - - found - non-zero indicates that the attribute was found - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - -@*/ -int PMI2_Info_GetJobAttr(const char name[], char value[], int valuelen, int *found); - -/*@ - PMI2_Info_GetJobAttrIntArray - returns the value of the attribute associated - with this job. The value must be an array of integers. - - Input Parameters: - + name - name of the job attribute - - arraylen - number of elements in array - - Output Parameters: - + array - value of attribute - . outlen - number of elements returned - - found - non-zero if attribute was found - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - - Predefined array attribute names: - - + universeSize - The size of the "universe" (defined for the MPI - attribute MPI_UNIVERSE_SIZE - - . hasNameServ - The value hasNameServ is true if the PMI2 environment - supports the name service operations (publish, lookup, and - unpublish). - - . physTopology - Return the topology of the underlying network. The - valid topology types include cartesian, hierarchical, complete, - kautz, hypercube; additional types may be added as necessary. If - the type is hierarchical, then additional attributes may be - queried to determine the details of the topology. For example, a - typical cluster has a hierarchical physical topology, consisting - of two levels of complete networks - the switched Ethernet or - Infiniband and the SMP nodes. Other systems, such as IBM BlueGene, - have one level that is cartesian (and in virtual node mode, have a - single-level physical topology). - - . physTopologyLevels - Return a string describing the topology type - for each level of the underlying network. Only valid if the - physTopology is hierarchical. The value is a comma-separated list - of physical topology types (except for hierarchical). The levels - are ordered starting at the top, with the network closest to the - processes last. The lower level networks may connect only a subset - of processes. For example, for a cartesian mesh of SMPs, the value - is cartesian,complete. All processes are connected by the - cartesian part of this, but for each complete network, only the - processes on the same node are connected. - - . cartDims - Return a string of comma-separated values describing - the dimensions of the Cartesian topology. This must be consistent - with the value of cartCoords that may be returned by - PMI2_Info_GetNodeAttrIntArray. - - These job attributes are just a start, but they provide both an - example of the sort of external data that is available through the - PMI interface and how extensions can be added within the same API - and wire protocol. For example, adding more complex network - topologies requires only adding new keys, not new routines. - - . isHeterogeneous - The value isHeterogeneous is true if the - processes belonging to the job are running on nodes with different - underlying data models. - -@*/ -int PMI2_Info_GetJobAttrIntArray(const char name[], int array[], int arraylen, int *outlen, int *found); - -/*@ - PMI2_Nameserv_publish - publish a name - - Input parameters: - + service_name - string representing the service being published - . info_ptr - - - port - string representing the port on which to contact the service - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - -@*/ -int PMI2_Nameserv_publish(const char service_name[], const struct MPID_Info *info_ptr, const char port[]); - -/*@ - PMI2_Nameserv_lookup - lookup a service by name - - Input parameters: - + service_name - string representing the service being published - . info_ptr - - - portLen - size of buffer provided in port - - Output parameters: - . port - string representing the port on which to contact the service - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - -@*/ -int PMI2_Nameserv_lookup(const char service_name[], const struct MPID_Info *info_ptr, - char port[], int portLen); -/*@ - PMI2_Nameserv_unpublish - unpublish a name - - Input parameters: - + service_name - string representing the service being unpublished - - info_ptr - - - Return values: - Returns 'MPI_SUCCESS' on success and an MPI error code on failure. - -@*/ -int PMI2_Nameserv_unpublish(const char service_name[], - const struct MPID_Info *info_ptr); - - - -#if defined(__cplusplus) -} -#endif - -#endif /* PMI2_H_INCLUDED */ -- GitLab