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

📄 mca_base_cmd_line.c

📁 MPI stands for the Message Passing Interface. Written by the MPI Forum (a large committee comprising
💻 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 "opal/util/cmd_line.h"#include "opal/util/argv.h"#include "opal/util/opal_environ.h"#include "opal/mca/base/base.h"#include "opal/constants.h"/*  * Private variables *//* * Private functions */static int process_arg(const char *param, const char *value,                       char ***params, char ***values);static void add_to_env(char **params, char **values, char ***env);/* * Add -mca to the possible command line options list */int mca_base_cmd_line_setup(opal_cmd_line_t *cmd){    int ret;    ret = opal_cmd_line_make_opt3(cmd, '\0', "mca", "mca", 2,                                  "Pass context-specific MCA parameters; they are considered global if --gmca is not used and only one context is specified (arg0 is the parameter name; arg1 is the parameter value)");    if (OPAL_SUCCESS != ret) {        return ret;    }    ret = opal_cmd_line_make_opt3(cmd, '\0', "gmca", "gmca", 2,                                  "Pass global MCA parameters that are applicable to all contexts (arg0 is the parameter name; arg1 is the parameter value)");    return ret;}/* * Look for and handle any -mca options on the command line */int mca_base_cmd_line_process_args(opal_cmd_line_t *cmd,                                   char ***context_env, char ***global_env){  int i, num_insts;  char **params;  char **values;  /* If no relevant parameters were given, just return */  if (!opal_cmd_line_is_taken(cmd, "mca") &&      !opal_cmd_line_is_taken(cmd, "gmca")) {      return OPAL_SUCCESS;  }  /* Handle app context-specific parameters */  num_insts = opal_cmd_line_get_ninsts(cmd, "mca");  params = values = NULL;  for (i = 0; i < num_insts; ++i) {      process_arg(opal_cmd_line_get_param(cmd, "mca", i, 0),                   opal_cmd_line_get_param(cmd, "mca", i, 1),                  &params, &values);  }  if (NULL != params) {      add_to_env(params, values, context_env);      opal_argv_free(params);      opal_argv_free(values);  }  /* Handle global parameters */  num_insts = opal_cmd_line_get_ninsts(cmd, "gmca");  params = values = NULL;  for (i = 0; i < num_insts; ++i) {      process_arg(opal_cmd_line_get_param(cmd, "gmca", i, 0),                   opal_cmd_line_get_param(cmd, "gmca", i, 1),                  &params, &values);  }  if (NULL != params) {      add_to_env(params, values, global_env);      opal_argv_free(params);      opal_argv_free(values);  }  /* All done */  return OPAL_SUCCESS;}/* * Process a single MCA argument. */int static process_arg(const char *param, const char *value,                       char ***params, char ***values){    int i;    char *new_str;    /* Look to see if we've already got an -mca argument for the same       param.  Check against the list of MCA param's that we've       already saved arguments for. */    for (i = 0; NULL != *params && NULL != (*params)[i]; ++i) {        if (0 == strcmp(param, (*params)[i])) {            asprintf(&new_str, "%s,%s", (*values)[i], value);            free((*values)[i]);            (*values)[i] = new_str;                        return OPAL_SUCCESS;        }    }    /* If we didn't already have an value for the same param, save       this one away */      opal_argv_append_nosize(params, param);    opal_argv_append_nosize(values, value);    return OPAL_SUCCESS;}static void add_to_env(char **params, char **values, char ***env){    int i;    char *name;    /* Loop through all the args that we've gotten and make env       vars of the form OMPI_MCA_*=value. */    for (i = 0; NULL != params && NULL != params[i]; ++i) {        name = mca_base_param_environ_variable(params[i], NULL, NULL);        opal_setenv(name, values[i], true, env);        free(name);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -