2004-06-12 14:21:26 +04: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-06-12 14:21:26 +04:00
|
|
|
* $HEADER$
|
|
|
|
*/
|
|
|
|
/** @file:
|
|
|
|
*
|
|
|
|
* The Open MPI general purpose registry.
|
|
|
|
*
|
|
|
|
* The Open MPI system contains a general purpose registry for use by both
|
|
|
|
* applications and internal systems to dynamically share information. For
|
|
|
|
* speed purposes, the registry is divided into "segments", each labelled
|
|
|
|
* with an appropriate "token" string that describes its contents. Segments
|
|
|
|
* are automatically provided for the "universe" and for each MPI CommWorld.
|
|
|
|
* At this time, all segments may be accessed by any application within the universe, thus
|
|
|
|
* providing a mechanism for cross-CommWorld communications (with the requirement
|
|
|
|
* that all participating CommWorlds must reside within the same universe). In the future,
|
|
|
|
* some form of security may be provided to limit access privileges between
|
|
|
|
* segments.
|
|
|
|
*
|
|
|
|
* Within each registry segment, there exists a list of objects that have
|
|
|
|
* been "put" onto the registry. Each object must be tagged with at least
|
|
|
|
* one token, but may be tagged with as many tokens as the creator desires.
|
|
|
|
* Retrieval requests must specify the segment and at least one token, but
|
|
|
|
* can specify an arbitrary number of tokens to describe the search. The registry
|
|
|
|
* will return a list of all objects that meet the search criteria.
|
|
|
|
*
|
|
|
|
* Tokens are defined as character strings, thus allowing for clarity in
|
|
|
|
* the program. However, for speed purposes, tokens are translated into
|
|
|
|
* integer keys prior to storing an object. A table of token-key pairs
|
|
|
|
* is independently maintained for each registry segment. Users can obtain
|
2005-03-14 23:57:21 +03:00
|
|
|
* an index of tokens within a dictionary by requesting it through the orte_registry_index()
|
2004-06-12 14:21:26 +04:00
|
|
|
* function.
|
|
|
|
*
|
|
|
|
* The registry also provides a subscription capability whereby a caller
|
|
|
|
* can subscribe to a stored object and receive notification when various actions
|
|
|
|
* are performed on that object. Currently supported actions include modification,
|
|
|
|
* the addition of another subscriber, and deletion. Notifications are sent via
|
|
|
|
* the OOB communication channel.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2005-03-14 23:57:21 +03:00
|
|
|
#ifndef ORTE_GPR_BASE_H_
|
2005-06-24 20:59:37 +04:00
|
|
|
#define ORTE_GPR_BASE_H_
|
2004-06-30 01:17:10 +04:00
|
|
|
|
2004-06-12 14:21:26 +04:00
|
|
|
/*
|
|
|
|
* includes
|
|
|
|
*/
|
2005-03-14 23:57:21 +03:00
|
|
|
#include "orte_config.h"
|
2004-06-12 14:21:26 +04:00
|
|
|
|
2005-03-14 23:57:21 +03:00
|
|
|
#include "include/orte_constants.h"
|
|
|
|
#include "include/orte_types.h"
|
2004-11-20 22:12:43 +03:00
|
|
|
|
|
|
|
#include "threads/mutex.h"
|
|
|
|
#include "threads/condition.h"
|
|
|
|
|
2004-06-12 14:21:26 +04:00
|
|
|
#include "class/ompi_list.h"
|
2005-05-01 04:54:12 +04:00
|
|
|
#include "dps/dps_types.h"
|
2004-11-20 22:12:43 +03:00
|
|
|
|
2004-06-30 01:17:10 +04:00
|
|
|
#include "mca/mca.h"
|
2004-11-20 22:12:43 +03:00
|
|
|
#include "mca/base/base.h"
|
|
|
|
#include "mca/base/mca_base_param.h"
|
2005-03-14 23:57:21 +03:00
|
|
|
#include "mca/rml/rml_types.h"
|
2004-11-20 22:12:43 +03:00
|
|
|
|
2004-06-16 09:41:13 +04:00
|
|
|
#include "mca/gpr/gpr.h"
|
|
|
|
|
2004-06-30 01:17:10 +04:00
|
|
|
/*
|
2004-11-20 22:12:43 +03:00
|
|
|
* Global functions for MCA overall collective open and close
|
|
|
|
*/
|
2004-06-30 01:17:10 +04:00
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
2004-11-20 22:12:43 +03:00
|
|
|
|
2005-03-14 23:57:21 +03:00
|
|
|
/*
|
2005-06-24 20:59:37 +04:00
|
|
|
* Define flag values for remote commands
|
2005-03-14 23:57:21 +03:00
|
|
|
*/
|
2005-06-24 20:59:37 +04:00
|
|
|
#define ORTE_GPR_DELETE_SEGMENT_CMD (uint8_t) 1
|
|
|
|
#define ORTE_GPR_PUT_CMD (uint8_t) 2
|
|
|
|
#define ORTE_GPR_DELETE_ENTRIES_CMD (uint8_t) 3
|
|
|
|
#define ORTE_GPR_INDEX_CMD (uint8_t) 4
|
|
|
|
#define ORTE_GPR_SUBSCRIBE_CMD (uint8_t) 5
|
|
|
|
#define ORTE_GPR_UNSUBSCRIBE_CMD (uint8_t) 6
|
|
|
|
#define ORTE_GPR_CANCEL_TRIGGER_CMD (uint8_t) 7
|
|
|
|
#define ORTE_GPR_GET_CMD (uint8_t) 8
|
|
|
|
#define ORTE_GPR_TEST_INTERNALS_CMD (uint8_t) 9
|
|
|
|
#define ORTE_GPR_NOTIFY_CMD (uint8_t) 10
|
|
|
|
#define ORTE_GPR_DUMP_ALL_CMD (uint8_t) 11
|
|
|
|
#define ORTE_GPR_DUMP_SEGMENTS_CMD (uint8_t) 12
|
|
|
|
#define ORTE_GPR_DUMP_TRIGGERS_CMD (uint8_t) 13
|
|
|
|
#define ORTE_GPR_DUMP_SUBSCRIPTIONS_CMD (uint8_t) 14
|
|
|
|
#define ORTE_GPR_DUMP_CALLBACKS_CMD (uint8_t) 15
|
|
|
|
#define ORTE_GPR_INCREMENT_VALUE_CMD (uint8_t) 16
|
|
|
|
#define ORTE_GPR_DECREMENT_VALUE_CMD (uint8_t) 17
|
|
|
|
#define ORTE_GPR_COMPOUND_CMD (uint8_t) 18
|
|
|
|
#define ORTE_GPR_CLEANUP_JOB_CMD (uint8_t) 19
|
|
|
|
#define ORTE_GPR_CLEANUP_PROC_CMD (uint8_t) 20
|
|
|
|
#define ORTE_GPR_ERROR (uint8_t)0xff
|
|
|
|
|
|
|
|
typedef uint8_t orte_gpr_cmd_flag_t;
|
|
|
|
#define ORTE_GPR_CMD_T ORTE_UINT8
|
2004-11-20 22:12:43 +03:00
|
|
|
|
2005-05-12 00:21:10 +04:00
|
|
|
OMPI_DECLSPEC int orte_gpr_base_open(void);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_select(void);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_close(void);
|
2004-12-10 20:53:41 +03:00
|
|
|
|
2005-03-14 23:57:21 +03:00
|
|
|
/* general usage functions */
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_delete_segment(orte_buffer_t *cmd,
|
|
|
|
char *segment);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_unpack_delete_segment(orte_buffer_t *buffer, int *ret);
|
|
|
|
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_delete_entries(orte_buffer_t *buffer,
|
|
|
|
orte_gpr_addr_mode_t mode,
|
|
|
|
char *segment, char **tokens, char **keys);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_unpack_delete_entries(orte_buffer_t *buffer, int *ret);
|
|
|
|
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_index(orte_buffer_t *cmd, char *segment);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_unpack_index(orte_buffer_t *cmd, int *ret, size_t *cnt,
|
|
|
|
char **index);
|
|
|
|
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_subscribe(orte_buffer_t *cmd,
|
2005-06-24 20:59:37 +04:00
|
|
|
size_t num_subs,
|
2005-03-14 23:57:21 +03:00
|
|
|
orte_gpr_subscription_t **subscriptions,
|
2005-06-24 20:59:37 +04:00
|
|
|
size_t num_trigs, orte_gpr_trigger_t **trig);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_unpack_subscribe(orte_buffer_t *buffer, int *ret);
|
2005-03-14 23:57:21 +03:00
|
|
|
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_unsubscribe(orte_buffer_t *cmd,
|
2005-06-24 20:59:37 +04:00
|
|
|
orte_gpr_subscription_id_t id);
|
2005-03-14 23:57:21 +03:00
|
|
|
OMPI_DECLSPEC int orte_gpr_base_unpack_unsubscribe(orte_buffer_t *buffer, int *ret);
|
|
|
|
|
2005-06-24 20:59:37 +04:00
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_cancel_trigger(orte_buffer_t *cmd,
|
|
|
|
orte_gpr_trigger_id_t id);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_unpack_cancel_trigger(orte_buffer_t *buffer, int *ret);
|
|
|
|
|
2005-03-14 23:57:21 +03:00
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_put(orte_buffer_t *cmd,
|
2005-05-01 04:53:00 +04:00
|
|
|
size_t cnt, orte_gpr_value_t **values);
|
2005-03-14 23:57:21 +03:00
|
|
|
OMPI_DECLSPEC int orte_gpr_base_unpack_put(orte_buffer_t *buffer, int *ret);
|
|
|
|
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_get(orte_buffer_t *cmd,
|
|
|
|
orte_gpr_addr_mode_t mode,
|
|
|
|
char *segment, char **tokens, char **keys);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_unpack_get(orte_buffer_t *buffer, int *ret,
|
2005-05-01 04:53:00 +04:00
|
|
|
size_t *cnt, orte_gpr_value_t ***values);
|
2005-03-14 23:57:21 +03:00
|
|
|
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_dump_all(orte_buffer_t *cmd);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_dump_segments(orte_buffer_t *cmd);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_dump_triggers(orte_buffer_t *cmd);
|
2005-06-24 20:59:37 +04:00
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_dump_subscriptions(orte_buffer_t *cmd);
|
2005-03-29 02:37:54 +04:00
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_dump_callbacks(orte_buffer_t *cmd);
|
2005-03-14 23:57:21 +03:00
|
|
|
OMPI_DECLSPEC int orte_gpr_base_print_dump(orte_buffer_t *buffer, int output_id);
|
2005-03-29 02:37:54 +04:00
|
|
|
OMPI_DECLSPEC void orte_gpr_base_dump_keyval_value(orte_buffer_t *buffer,
|
|
|
|
orte_gpr_keyval_t *iptr);
|
2005-03-14 23:57:21 +03:00
|
|
|
|
2005-03-29 02:37:54 +04:00
|
|
|
OMPI_DECLSPEC int orte_gpr_base_dump_notify_msg(orte_buffer_t *buffer,
|
|
|
|
orte_gpr_notify_message_t *msg);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_dump_notify_data(orte_buffer_t *buffer,
|
|
|
|
orte_gpr_notify_data_t *data);
|
2005-05-01 04:53:00 +04:00
|
|
|
OMPI_DECLSPEC int orte_gpr_base_dump_value(orte_buffer_t *buffer,
|
|
|
|
orte_gpr_value_t *value);
|
2005-03-14 23:57:21 +03:00
|
|
|
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_cleanup_job(orte_buffer_t *buffer,
|
|
|
|
orte_jobid_t jobid);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_unpack_cleanup_job(orte_buffer_t *buffer, int *ret);
|
|
|
|
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_cleanup_proc(orte_buffer_t *buffer,
|
|
|
|
orte_process_name_t *proc);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_unpack_cleanup_proc(orte_buffer_t *buffer, int *ret);
|
|
|
|
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_increment_value(orte_buffer_t *cmd, orte_gpr_value_t *value);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_unpack_increment_value(orte_buffer_t *buffer, int *ret);
|
|
|
|
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_pack_decrement_value(orte_buffer_t *cmd, orte_gpr_value_t *value);
|
|
|
|
OMPI_DECLSPEC int orte_gpr_base_unpack_decrement_value(orte_buffer_t *buffer, int *ret);
|
2005-01-26 21:23:26 +03:00
|
|
|
|
2005-05-01 04:58:06 +04:00
|
|
|
/* GPR DATA TYPE PACKING FUNCTIONS */
|
|
|
|
int orte_gpr_base_pack_cmd(orte_buffer_t *buffer, void *src,
|
|
|
|
size_t num_vals, orte_data_type_t type);
|
|
|
|
|
2005-06-24 20:59:37 +04:00
|
|
|
int orte_gpr_base_pack_subscription_id(orte_buffer_t *buffer, void *src,
|
|
|
|
size_t num_vals, orte_data_type_t type);
|
|
|
|
|
|
|
|
int orte_gpr_base_pack_trigger_id(orte_buffer_t *buffer, void *src,
|
2005-05-01 04:58:06 +04:00
|
|
|
size_t num_vals, orte_data_type_t type);
|
|
|
|
|
|
|
|
int orte_gpr_base_pack_notify_action(orte_buffer_t *buffer, void *src,
|
|
|
|
size_t num_vals, orte_data_type_t type);
|
|
|
|
|
2005-06-24 20:59:37 +04:00
|
|
|
int orte_gpr_base_pack_trigger_action(orte_buffer_t *buffer, void *src,
|
|
|
|
size_t num_vals, orte_data_type_t type);
|
|
|
|
|
2005-05-01 04:58:06 +04:00
|
|
|
int orte_gpr_base_pack_addr_mode(orte_buffer_t *buffer, void *src,
|
|
|
|
size_t num_vals, orte_data_type_t type);
|
|
|
|
|
|
|
|
int orte_gpr_base_pack_keyval(orte_buffer_t *buffer, void *src,
|
|
|
|
size_t num_vals, orte_data_type_t type);
|
|
|
|
|
|
|
|
int orte_gpr_base_pack_value(orte_buffer_t *buffer, void *src,
|
|
|
|
size_t num_vals, orte_data_type_t type);
|
|
|
|
|
|
|
|
int orte_gpr_base_pack_subscription(orte_buffer_t *buffer, void *src,
|
|
|
|
size_t num_vals, orte_data_type_t type);
|
|
|
|
|
2005-06-24 20:59:37 +04:00
|
|
|
int orte_gpr_base_pack_trigger(orte_buffer_t *buffer, void *src,
|
|
|
|
size_t num_vals, orte_data_type_t type);
|
|
|
|
|
2005-05-01 04:58:06 +04:00
|
|
|
int orte_gpr_base_pack_notify_data(orte_buffer_t *buffer, void *src,
|
|
|
|
size_t num_vals, orte_data_type_t type);
|
|
|
|
|
|
|
|
/* GPR DATA TYPE UNPACKING FUNCTIONS */
|
|
|
|
int orte_gpr_base_unpack_cmd(orte_buffer_t *buffer, void *dest,
|
|
|
|
size_t *num_vals, orte_data_type_t type);
|
|
|
|
|
2005-06-24 20:59:37 +04:00
|
|
|
int orte_gpr_base_unpack_subscription_id(orte_buffer_t *buffer, void *dest,
|
|
|
|
size_t *num_vals, orte_data_type_t type);
|
|
|
|
|
|
|
|
int orte_gpr_base_unpack_trigger_id(orte_buffer_t *buffer, void *dest,
|
2005-05-01 04:58:06 +04:00
|
|
|
size_t *num_vals, orte_data_type_t type);
|
|
|
|
|
|
|
|
int orte_gpr_base_unpack_notify_action(orte_buffer_t *buffer, void *dest,
|
|
|
|
size_t *num_vals, orte_data_type_t type);
|
|
|
|
|
2005-06-24 20:59:37 +04:00
|
|
|
int orte_gpr_base_unpack_trigger_action(orte_buffer_t *buffer, void *dest,
|
|
|
|
size_t *num_vals, orte_data_type_t type);
|
|
|
|
|
2005-05-01 04:58:06 +04:00
|
|
|
int orte_gpr_base_unpack_addr_mode(orte_buffer_t *buffer, void *dest,
|
|
|
|
size_t *num_vals, orte_data_type_t type);
|
|
|
|
|
|
|
|
int orte_gpr_base_unpack_keyval(orte_buffer_t *buffer, void *dest,
|
|
|
|
size_t *num_vals, orte_data_type_t type);
|
|
|
|
|
|
|
|
int orte_gpr_base_unpack_value(orte_buffer_t *buffer, void *dest,
|
|
|
|
size_t *num_vals, orte_data_type_t type);
|
|
|
|
|
|
|
|
int orte_gpr_base_unpack_subscription(orte_buffer_t *buffer, void *dest,
|
|
|
|
size_t *num_vals, orte_data_type_t type);
|
|
|
|
|
2005-06-24 20:59:37 +04:00
|
|
|
int orte_gpr_base_unpack_trigger(orte_buffer_t *buffer, void *dest,
|
|
|
|
size_t *num_vals, orte_data_type_t type);
|
|
|
|
|
2005-05-01 04:58:06 +04:00
|
|
|
int orte_gpr_base_unpack_notify_data(orte_buffer_t *buffer, void *dest,
|
|
|
|
size_t *num_vals, orte_data_type_t type);
|
2004-11-17 01:53:33 +03:00
|
|
|
|
2005-05-17 01:01:09 +04:00
|
|
|
/* general utilities */
|
2005-05-22 21:01:26 +04:00
|
|
|
OMPI_DECLSPEC int orte_gpr_base_xfer_payload(orte_gpr_value_union_t *dest,
|
2005-05-17 01:01:09 +04:00
|
|
|
orte_gpr_value_union_t *src,
|
|
|
|
orte_data_type_t type);
|
|
|
|
|
2004-11-20 22:12:43 +03:00
|
|
|
/*
|
2005-03-14 23:57:21 +03:00
|
|
|
* globals that might be needed inside the gpr
|
2004-11-20 22:12:43 +03:00
|
|
|
*/
|
2005-06-22 21:14:53 +04:00
|
|
|
OMPI_DECLSPEC extern int orte_gpr_base_output;
|
|
|
|
OMPI_DECLSPEC extern bool orte_gpr_base_selected;
|
|
|
|
OMPI_DECLSPEC extern ompi_list_t orte_gpr_base_components_available;
|
|
|
|
OMPI_DECLSPEC extern mca_gpr_base_component_t orte_gpr_base_selected_component;
|
2005-03-14 23:57:21 +03:00
|
|
|
|
2005-05-12 00:21:10 +04:00
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
|
|
}
|
|
|
|
#endif
|
2004-11-20 22:12:43 +03:00
|
|
|
|
2004-06-30 01:17:10 +04:00
|
|
|
#endif
|