-/* Copyright (c) 2007-2017. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2007-2018. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#endif
std::unordered_map<std::string, double> location2speedup;
-simgrid::smpi::Process **process_data = nullptr;
+static simgrid::smpi::Process** process_data = nullptr;
int process_count = 0;
int smpi_universe_size = 0;
int* index_to_process_data = nullptr;
* "this == MPI_COMM_UNINITIALIZED"? If yes, it uses smpi_process()->comm_world()
* instead of "this".
* This is basically how we only have one global variable but all processes have
- * different communicators (basically, the one their SMPI instance uses).
+ * different communicators (the one their SMPI instance uses).
*
* See smpi_comm.cpp and the functions therein for details.
*/
smpi_bench_destroy();
smpi_shared_destroy();
smpi_deployment_cleanup_instances();
- for (int i = 0, count = smpi_process_count(); i < count; i++) {
+ int count = smpi_process_count();
+ for (int i = 0; i < count; i++) {
if(process_data[i]->comm_self()!=MPI_COMM_NULL){
simgrid::smpi::Comm::destroy(process_data[i]->comm_self());
}
smpi_free_static();
}
-extern "C" {
-
-static void smpi_init_logs(){
-
- /* Connect log categories. See xbt/log.c */
-
- XBT_LOG_CONNECT(smpi); /* Keep this line as soon as possible in this function: xbt_log_appender_file.c depends on it
- DO NOT connect this in XBT or so, or it will be useless to xbt_log_appender_file.c */
- XBT_LOG_CONNECT(instr_smpi);
- XBT_LOG_CONNECT(smpi_bench);
- XBT_LOG_CONNECT(smpi_coll);
- XBT_LOG_CONNECT(smpi_colls);
- XBT_LOG_CONNECT(smpi_comm);
- XBT_LOG_CONNECT(smpi_datatype);
- XBT_LOG_CONNECT(smpi_dvfs);
- XBT_LOG_CONNECT(smpi_group);
- XBT_LOG_CONNECT(smpi_host);
- XBT_LOG_CONNECT(smpi_kernel);
- XBT_LOG_CONNECT(smpi_mpi);
- XBT_LOG_CONNECT(smpi_memory);
- XBT_LOG_CONNECT(smpi_op);
- XBT_LOG_CONNECT(smpi_pmpi);
- XBT_LOG_CONNECT(smpi_process);
- XBT_LOG_CONNECT(smpi_request);
- XBT_LOG_CONNECT(smpi_replay);
- XBT_LOG_CONNECT(smpi_rma);
- XBT_LOG_CONNECT(smpi_shared);
- XBT_LOG_CONNECT(smpi_utils);
-}
-}
-
static void smpi_init_options(){
// return if already called
if (smpi_cpu_threshold > -1)
if (smpi_cpu_threshold < 0)
smpi_cpu_threshold = DBL_MAX;
- const char* val = xbt_cfg_get_string("smpi/shared-malloc").c_str();
- if (not strcasecmp(val, "yes") || not strcmp(val, "1") || not strcasecmp(val, "on") ||
- not strcasecmp(val, "global")) {
+ std::string val = xbt_cfg_get_string("smpi/shared-malloc");
+ if ((val == "yes") || (val == "1") || (val == "on") || (val == "global")) {
smpi_cfg_shared_malloc = shmalloc_global;
- } else if (not strcasecmp(val, "local")) {
+ } else if (val == "local") {
smpi_cfg_shared_malloc = shmalloc_local;
- } else if (not strcasecmp(val, "no") || not strcmp(val, "0") || not strcasecmp(val, "off")) {
+ } else if ((val == "no") || (val == "0") || (val == "off")) {
smpi_cfg_shared_malloc = shmalloc_none;
} else {
xbt_die("Invalid value '%s' for option smpi/shared-malloc. Possible values: 'on' or 'global', 'local', 'off'",
- val);
+ val.c_str());
}
}
}
}
int ret = 0;
- for (int i = 0, count = smpi_process_count(); i < count; i++) {
+ int count = smpi_process_count();
+ for (int i = 0; i < count; i++) {
if(process_data[i]->return_value()!=0){
ret=process_data[i]->return_value();//return first non 0 value
break;
// Called either directly from the user code, or from the code called by smpirun
void SMPI_init(){
- smpi_init_logs();
smpi_init_options();
smpi_global_init();
smpi_check_options();