📄 mca_base_param.c
字号:
/* * Copyright (c) 2004-2005 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$ */#include "opal_config.h"#include <stdio.h>#include <string.h>#include <stdlib.h>#include "opal/mca/installdirs/installdirs.h"#include "opal/util/os_path.h"#include "opal/class/opal_value_array.h"#include "opal/util/show_help.h"#include "opal/class/opal_hash_table.h"#if 0/* JMS commented out for now -- see lookup_keyvals() below for an explanation */#include "ompi/attribute/attribute.h"#endif#include "opal/util/printf.h"#include "opal/util/argv.h"#include "opal/mca/mca.h"#include "opal/mca/base/mca_base_param.h"#include "opal/mca/base/mca_base_param_internal.h"#include "opal/constants.h"/* * Public variables * * This variable is public, but not advertised in mca_base_param.h. * It's only public so that the file parser can see it. */opal_list_t mca_base_param_file_values;/* * local variables */static opal_value_array_t mca_base_params;static const char *mca_prefix = "OMPI_MCA_";static char *home = NULL;static bool initialized = false;/* * local functions */static int read_files(char *file_list);static int param_register(const char *type_name, const char *component_name, const char *param_name, const char *help_msg, mca_base_param_type_t type, bool internal, bool read_only, mca_base_param_storage_t *default_value, mca_base_param_storage_t *file_value, mca_base_param_storage_t *override_value, mca_base_param_storage_t *current_value);static bool param_lookup(size_t index, mca_base_param_storage_t *storage, opal_hash_table_t *attrs);static bool param_set_override(size_t index, mca_base_param_storage_t *storage, mca_base_param_type_t type);static bool lookup_override(mca_base_param_t *param, mca_base_param_storage_t *storage);static bool lookup_keyvals(mca_base_param_t *param, mca_base_param_storage_t *storage, opal_hash_table_t *attrs);static bool lookup_env(mca_base_param_t *param, mca_base_param_storage_t *storage);static bool lookup_file(mca_base_param_t *param, mca_base_param_storage_t *storage);static bool lookup_default(mca_base_param_t *param, mca_base_param_storage_t *storage);static bool set(mca_base_param_type_t type, mca_base_param_storage_t *dest, mca_base_param_storage_t *src);static void param_constructor(mca_base_param_t *p);static void param_destructor(mca_base_param_t *p);static void fv_constructor(mca_base_param_file_value_t *p);static void fv_destructor(mca_base_param_file_value_t *p);static void info_constructor(mca_base_param_info_t *p);static void info_destructor(mca_base_param_info_t *p);/* * Make the class instance for mca_base_param_t */OBJ_CLASS_INSTANCE(mca_base_param_t, opal_object_t, param_constructor, param_destructor);OBJ_CLASS_INSTANCE(mca_base_param_file_value_t, opal_list_item_t, fv_constructor, fv_destructor);OBJ_CLASS_INSTANCE(mca_base_param_info_t, opal_list_item_t, info_constructor, info_destructor);/* * Set it up */int mca_base_param_init(void){ int id; char *files, *new_files = NULL; if (!initialized) { /* Init the value array for the param storage */ OBJ_CONSTRUCT(&mca_base_params, opal_value_array_t); opal_value_array_init(&mca_base_params, sizeof(mca_base_param_t)); /* Init the file param value list */ OBJ_CONSTRUCT(&mca_base_param_file_values, opal_list_t); /* Set this before we register the parameter, below */ initialized = true; /* We may need this later */#if !defined(__WINDOWS__) home = getenv("HOME"); asprintf(&files, "%s"OPAL_PATH_SEP".openmpi"OPAL_PATH_SEP"mca-params.conf:%s"OPAL_PATH_SEP"openmpi-mca-params.conf", home, opal_install_dirs.sysconfdir);#else home = getenv("USERPROFILE"); asprintf(&files, "%s"OPAL_PATH_SEP".openmpi"OPAL_PATH_SEP"mca-params.conf;%s"OPAL_PATH_SEP"openmpi-mca-params.conf", home, opal_install_dirs.sysconfdir);#endif /* !defined(__WINDOWS__) */ /* Initialize a parameter that says where MCA param files can be found */ id = mca_base_param_reg_string_name("mca", "param_files", "Path for MCA configuration files containing default parameter values", false, false, files, &new_files); read_files(new_files); free(files); free(new_files); } return OPAL_SUCCESS;}/* * Register an integer MCA parameter */int mca_base_param_reg_int(const mca_base_component_t *component, const char *param_name, const char *help_msg, bool internal, bool read_only, int default_value, int *current_value){ int ret; mca_base_param_storage_t storage; mca_base_param_storage_t lookup; storage.intval = default_value; ret = param_register(component->mca_type_name, component->mca_component_name, param_name, help_msg, MCA_BASE_PARAM_TYPE_INT, internal, read_only, &storage, NULL, NULL, &lookup); if (ret >= 0 && NULL != current_value) { *current_value = lookup.intval; } return ret;}/* * Register an integer MCA parameter that is not associated with a * component */int mca_base_param_reg_int_name(const char *type, const char *param_name, const char *help_msg, bool internal, bool read_only, int default_value, int *current_value){ int ret; mca_base_param_storage_t storage; mca_base_param_storage_t lookup; storage.intval = default_value; ret = param_register(type, NULL, param_name, help_msg, MCA_BASE_PARAM_TYPE_INT, internal, read_only, &storage, NULL, NULL, &lookup); if (ret >= 0 && NULL != current_value) { *current_value = lookup.intval; } return ret;}/* * Register a string MCA parameter. */int mca_base_param_reg_string(const mca_base_component_t *component, const char *param_name, const char *help_msg, bool internal, bool read_only, const char *default_value, char **current_value){ int ret; mca_base_param_storage_t storage; mca_base_param_storage_t lookup; if (NULL != default_value) { storage.stringval = (char *) default_value; } else { storage.stringval = NULL; } ret = param_register(component->mca_type_name, component->mca_component_name, param_name, help_msg, MCA_BASE_PARAM_TYPE_STRING, internal, read_only, &storage, NULL, NULL, (NULL != current_value) ? &lookup : NULL); if (ret >= 0 && NULL != current_value) { *current_value = lookup.stringval; } return ret;}/* * Register a string MCA parameter that is not associated with a * component */int mca_base_param_reg_string_name(const char *type, const char *param_name, const char *help_msg, bool internal, bool read_only, const char *default_value, char **current_value){ int ret; mca_base_param_storage_t storage; mca_base_param_storage_t lookup; if (NULL != default_value) { storage.stringval = (char *) default_value; } else { storage.stringval = NULL; } ret = param_register(type, NULL, param_name, help_msg, MCA_BASE_PARAM_TYPE_STRING, internal, read_only, &storage, NULL, NULL, (NULL != current_value) ? &lookup : NULL); if (ret >= 0 && NULL != current_value) { *current_value = lookup.stringval; } return ret;}/* * Register an integer MCA parameter * (deprecated) */int mca_base_param_register_int(const char *type_name, const char *component_name, const char *param_name, const char *mca_param_name, int default_value){ int ret; mca_base_param_storage_t storage; storage.intval = default_value; ret = param_register(type_name, component_name, param_name, mca_param_name, MCA_BASE_PARAM_TYPE_INT, false, false, &storage, NULL, NULL, NULL); return ret;}/* * Register a string MCA parameter. * (deprecated) */int mca_base_param_register_string(const char *type_name, const char *component_name, const char *param_name, const char *mca_param_name, const char *default_value){ int ret; mca_base_param_storage_t storage; if (NULL != default_value) { storage.stringval = (char *) default_value; } else { storage.stringval = NULL; } ret = param_register(type_name, component_name, param_name, mca_param_name, MCA_BASE_PARAM_TYPE_STRING, false, false, &storage, NULL, NULL, NULL); return ret;}/* * Associate a keyval with a parameter index */int mca_base_param_kv_associate(int index, int keyval){ size_t len; mca_base_param_t *array; if (!initialized) { return OPAL_ERROR; } len = opal_value_array_get_size(&mca_base_params); if (((size_t) index) > len) { return OPAL_ERROR; } /* We have a valid entry (remember that we never delete MCA parameters, so if the index is >0 and <len, it must be good), so save the keyval */ array = OPAL_VALUE_ARRAY_GET_BASE(&mca_base_params, mca_base_param_t); array[index].mbp_keyval = keyval; /* All done */ return OPAL_SUCCESS;}/* * Look up an integer MCA parameter. */int mca_base_param_lookup_int(int index, int *value){ mca_base_param_storage_t storage; if (param_lookup(index, &storage, NULL)) { *value = storage.intval; return OPAL_SUCCESS; } return OPAL_ERROR;}/* * Look up an integer MCA parameter, including in attributes */int mca_base_param_kv_lookup_int(int index, opal_hash_table_t *attrs, int *value){ mca_base_param_storage_t storage; if (param_lookup(index, &storage, attrs)) { *value = storage.intval; return OPAL_SUCCESS; } return OPAL_ERROR;}/* * Set an integer parameter */int mca_base_param_set_int(int index, int value){ mca_base_param_storage_t storage; mca_base_param_unset(index); storage.intval = value; param_set_override(index, &storage, MCA_BASE_PARAM_TYPE_INT); return OPAL_SUCCESS;}/* * Look up a string MCA parameter. */int mca_base_param_lookup_string(int index, char **value){ mca_base_param_storage_t storage; if (param_lookup(index, &storage, NULL)) { *value = storage.stringval; return OPAL_SUCCESS; } return OPAL_ERROR;}/* * Look up a string MCA parameter, including in attributes. */int mca_base_param_kv_lookup_string(int index, opal_hash_table_t *attrs, char **value){ mca_base_param_storage_t storage; if (param_lookup(index, &storage, attrs)) { *value = storage.stringval; return OPAL_SUCCESS; } return OPAL_ERROR;}/* * Set an string parameter */int mca_base_param_set_string(int index, char *value){ mca_base_param_storage_t storage; mca_base_param_unset(index); storage.stringval = strdup(value); param_set_override(index, &storage, MCA_BASE_PARAM_TYPE_STRING); return OPAL_SUCCESS;}/* * Unset a parameter */int mca_base_param_unset(int index){ size_t len; mca_base_param_t *array; if (!initialized) { return OPAL_ERROR; } len = opal_value_array_get_size(&mca_base_params); if (((size_t) index) > len) { return OPAL_ERROR; } /* We have a valid entry (remember that we never delete MCA parameters, so if the index is >0 and <len, it must be good), so save the internal flag */ array = OPAL_VALUE_ARRAY_GET_BASE(&mca_base_params, mca_base_param_t); if (array[index].mbp_override_value_set) { if (MCA_BASE_PARAM_TYPE_STRING == array[index].mbp_type && NULL != array[index].mbp_override_value.stringval) { free(array[index].mbp_override_value.stringval); array[index].mbp_override_value.stringval = NULL; } } array[index].mbp_override_value_set = false; /* All done */ return OPAL_SUCCESS;}char *mca_base_param_env_var(const char *param_name){ char *name; asprintf(&name, "%s%s", mca_prefix, param_name); return name;}/* * Make a string suitable for the environment, setting an MCA param */char *mca_base_param_environ_variable(const char *type, const char *component, const char *param){ size_t len; int id; char *ret = NULL, *name; mca_base_param_t *array; if (NULL == type) { return NULL; } id = mca_base_param_find(type, component, param); if (OPAL_ERROR != id) { array = OPAL_VALUE_ARRAY_GET_BASE(&mca_base_params, mca_base_param_t);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -