⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mca_base_param.c

📁 MPI stands for the Message Passing Interface. Written by the MPI Forum (a large committee comprising
💻 C
📖 第 1 页 / 共 3 页
字号:
/* * 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 + -