root/orte/runtime/orte_globals.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
   3  *                         University Research and Technology
   4  *                         Corporation.  All rights reserved.
   5  * Copyright (c) 2004-2011 The University of Tennessee and The University
   6  *                         of Tennessee Research Foundation.  All rights
   7  *                         reserved.
   8  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
   9  *                         University of Stuttgart.  All rights reserved.
  10  * Copyright (c) 2004-2005 The Regents of the University of California.
  11  *                         All rights reserved.
  12  * Copyright (c) 2007-2010 Oracle and/or its affiliates.  All rights reserved.
  13  * Copyright (c) 2007-2017 Cisco Systems, Inc.  All rights reserved
  14  * Copyright (c) 2011-2013 Los Alamos National Security, LLC.
  15  *                         All rights reserved.
  16  * Copyright (c) 2013-2019 Intel, Inc.  All rights reserved.
  17  * Copyright (c) 2017      IBM Corporation.  All rights reserved.
  18  * Copyright (c) 2017-2018 Research Organization for Information Science
  19  *                         and Technology (RIST).  All rights reserved.
  20  * $COPYRIGHT$
  21  *
  22  * Additional copyrights may follow
  23  *
  24  * $HEADER$
  25  */
  26 
  27 /**
  28  * @file
  29  *
  30  * Global params for OpenRTE
  31  */
  32 #ifndef ORTE_RUNTIME_ORTE_GLOBALS_H
  33 #define ORTE_RUNTIME_ORTE_GLOBALS_H
  34 
  35 #include "orte_config.h"
  36 #include "orte/types.h"
  37 
  38 #include <sys/types.h>
  39 #ifdef HAVE_SYS_TIME_H
  40 #include <sys/time.h>
  41 #endif
  42 
  43 #include "opal/class/opal_hash_table.h"
  44 #include "opal/class/opal_pointer_array.h"
  45 #include "opal/class/opal_value_array.h"
  46 #include "opal/class/opal_ring_buffer.h"
  47 #include "opal/threads/threads.h"
  48 #include "opal/mca/event/event.h"
  49 #include "opal/mca/hwloc/hwloc-internal.h"
  50 #include "opal/mca/hwloc/base/base.h"
  51 
  52 #include "orte/mca/plm/plm_types.h"
  53 #include "orte/mca/rml/rml_types.h"
  54 #include "orte/util/attr.h"
  55 #include "orte/util/proc_info.h"
  56 #include "orte/util/name_fns.h"
  57 #include "orte/util/error_strings.h"
  58 #include "orte/runtime/runtime.h"
  59 
  60 
  61 BEGIN_C_DECLS
  62 
  63 ORTE_DECLSPEC extern int orte_debug_verbosity;  /* instantiated in orte/runtime/orte_init.c */
  64 ORTE_DECLSPEC extern char *orte_prohibited_session_dirs;  /* instantiated in orte/runtime/orte_init.c */
  65 ORTE_DECLSPEC extern bool orte_xml_output;  /* instantiated in orte/runtime/orte_globals.c */
  66 ORTE_DECLSPEC extern FILE *orte_xml_fp;   /* instantiated in orte/runtime/orte_globals.c */
  67 ORTE_DECLSPEC extern bool orte_help_want_aggregate;  /* instantiated in orte/util/show_help.c */
  68 ORTE_DECLSPEC extern char *orte_job_ident;  /* instantiated in orte/runtime/orte_globals.c */
  69 ORTE_DECLSPEC extern bool orte_create_session_dirs;  /* instantiated in orte/runtime/orte_init.c */
  70 ORTE_DECLSPEC extern bool orte_execute_quiet;  /* instantiated in orte/runtime/orte_globals.c */
  71 ORTE_DECLSPEC extern bool orte_report_silent_errors;  /* instantiated in orte/runtime/orte_globals.c */
  72 ORTE_DECLSPEC extern opal_event_base_t *orte_event_base;  /* instantiated in orte/runtime/orte_init.c */
  73 ORTE_DECLSPEC extern bool orte_event_base_active; /* instantiated in orte/runtime/orte_init.c */
  74 ORTE_DECLSPEC extern bool orte_proc_is_bound;  /* instantiated in orte/runtime/orte_init.c */
  75 ORTE_DECLSPEC extern int orte_progress_thread_debug;  /* instantiated in orte/runtime/orte_init.c */
  76 
  77 /**
  78  * Global indicating where this process was bound to at launch (will
  79  * be NULL if !orte_proc_is_bound)
  80  */
  81 OPAL_DECLSPEC extern hwloc_cpuset_t orte_proc_applied_binding;  /* instantiated in orte/runtime/orte_init.c */
  82 
  83 
  84 /* Shortcut for some commonly used names */
  85 #define ORTE_NAME_WILDCARD      (&orte_name_wildcard)
  86 ORTE_DECLSPEC extern orte_process_name_t orte_name_wildcard;  /** instantiated in orte/runtime/orte_init.c */
  87 #define ORTE_NAME_INVALID       (&orte_name_invalid)
  88 ORTE_DECLSPEC extern orte_process_name_t orte_name_invalid;  /** instantiated in orte/runtime/orte_init.c */
  89 
  90 #define ORTE_PROC_MY_NAME       (&orte_process_info.my_name)
  91 
  92 /* define a special name that point to my parent (aka the process that spawned me) */
  93 #define ORTE_PROC_MY_PARENT     (&orte_process_info.my_parent)
  94 
  95 /* define a special name that belongs to orterun */
  96 #define ORTE_PROC_MY_HNP        (&orte_process_info.my_hnp)
  97 
  98 /* define the name of my daemon */
  99 #define ORTE_PROC_MY_DAEMON     (&orte_process_info.my_daemon)
 100 
 101 ORTE_DECLSPEC extern bool orte_in_parallel_debugger;
 102 
 103 /* error manager callback function */
 104 typedef void (*orte_err_cb_fn_t)(orte_process_name_t *proc, orte_proc_state_t state, void *cbdata);
 105 
 106 /* define an object for timer events */
 107 typedef struct {
 108     opal_object_t super;
 109     struct timeval tv;
 110     opal_event_t *ev;
 111     void *payload;
 112 } orte_timer_t;
 113 OBJ_CLASS_DECLARATION(orte_timer_t);
 114 
 115 ORTE_DECLSPEC extern int orte_exit_status;
 116 
 117 /* ORTE event priorities - we define these
 118  * at levels that permit higher layers such as
 119  * OMPI to handle their events at higher priority,
 120  * with the exception of errors. Errors generally
 121  * require exception handling (e.g., ctrl-c termination)
 122  * that overrides the need to process MPI messages
 123  */
 124 #define ORTE_ERROR_PRI  OPAL_EV_ERROR_PRI
 125 #define ORTE_MSG_PRI    OPAL_EV_MSG_LO_PRI
 126 #define ORTE_SYS_PRI    OPAL_EV_SYS_LO_PRI
 127 #define ORTE_INFO_PRI   OPAL_EV_INFO_LO_PRI
 128 
 129 /* define some common keys used in ORTE */
 130 #define ORTE_DB_DAEMON_VPID  "orte.daemon.vpid"
 131 
 132 /* State Machine lists */
 133 ORTE_DECLSPEC extern opal_list_t orte_job_states;
 134 ORTE_DECLSPEC extern opal_list_t orte_proc_states;
 135 
 136 /* a clean output channel without prefix */
 137 ORTE_DECLSPEC extern int orte_clean_output;
 138 
 139 #define ORTE_GLOBAL_ARRAY_BLOCK_SIZE    64
 140 #define ORTE_GLOBAL_ARRAY_MAX_SIZE      INT_MAX
 141 
 142 /* define a default error return code for ORTE */
 143 #define ORTE_ERROR_DEFAULT_EXIT_CODE    1
 144 
 145 /**
 146  * Define a macro for updating the orte_exit_status
 147  * The macro provides a convenient way of doing this
 148  * so that we can add thread locking at some point
 149  * since the orte_exit_status is a global variable.
 150  *
 151  * Ensure that we do not overwrite the exit status if it has
 152  * already been set to some non-zero value. If we don't make
 153  * this check, then different parts of the code could overwrite
 154  * each other's exit status in the case of abnormal termination.
 155  *
 156  * For example, if a process aborts, we would record the initial
 157  * exit code from the aborted process. However, subsequent processes
 158  * will have been aborted by signal as we kill the job. We don't want
 159  * the subsequent processes to overwrite the original exit code so
 160  * we can tell the user the exit code from the process that caused
 161  * the whole thing to happen.
 162  */
 163 #define ORTE_UPDATE_EXIT_STATUS(newstatus)                                  \
 164     do {                                                                    \
 165         if (0 == orte_exit_status && 0 != newstatus) {                      \
 166             OPAL_OUTPUT_VERBOSE((1, orte_debug_output,                      \
 167                                  "%s:%s(%d) updating exit status to %d",    \
 168                                  ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),        \
 169                                  __FILE__, __LINE__, newstatus));           \
 170             orte_exit_status = newstatus;                                   \
 171         }                                                                   \
 172     } while(0);
 173 
 174 /* sometimes we need to reset the exit status - for example, when we
 175  * are restarting a failed process
 176  */
 177 #define ORTE_RESET_EXIT_STATUS()                                \
 178     do {                                                        \
 179         OPAL_OUTPUT_VERBOSE((1, orte_debug_output,              \
 180                             "%s:%s(%d) reseting exit status",   \
 181                             ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), \
 182                             __FILE__, __LINE__));               \
 183         orte_exit_status = 0;                                   \
 184     } while(0);
 185 
 186 
 187 /* define a macro for computing time differences - used for timing tests
 188  * across the code base
 189  */
 190 #define ORTE_COMPUTE_TIME_DIFF(r, ur, s1, us1, s2, us2)     \
 191     do {                                                    \
 192         (r) = (s2) - (s1);                                  \
 193         if ((us2) >= (us1)) {                               \
 194             (ur) = (us2) - (us1);                           \
 195         } else {                                            \
 196             (r)--;                                          \
 197             (ur) = 1000000 - (us1) + (us2);                 \
 198         }                                                   \
 199     } while(0);
 200 
 201 /* define a set of flags to control the launch of a job */
 202 typedef uint16_t orte_job_controls_t;
 203 #define ORTE_JOB_CONTROL    OPAL_UINT16
 204 
 205 
 206 /* global type definitions used by RTE - instanced in orte_globals.c */
 207 
 208 /************
 209 * Declare this to allow us to use it before fully
 210 * defining it - resolves potential circular definition
 211 */
 212 struct orte_proc_t;
 213 struct orte_job_map_t;
 214 /************/
 215 
 216 /* define an object for storing node topologies */
 217 typedef struct {
 218     opal_object_t super;
 219     int index;
 220     hwloc_topology_t topo;
 221     char *sig;
 222 } orte_topology_t;
 223 ORTE_DECLSPEC OBJ_CLASS_DECLARATION(orte_topology_t);
 224 
 225 
 226 /**
 227 * Information about a specific application to be launched in the RTE.
 228  */
 229 typedef struct {
 230     /** Parent object */
 231     opal_object_t super;
 232     /** Unique index when multiple apps per job */
 233     orte_app_idx_t idx;
 234     /** Absolute pathname of argv[0] */
 235     char   *app;
 236     /** Number of copies of this process that are to be launched */
 237     orte_std_cntr_t num_procs;
 238     /** Array of pointers to the proc objects for procs of this app_context
 239      * NOTE - not always used
 240      */
 241     opal_pointer_array_t procs;
 242     /** State of the app_context */
 243     orte_app_state_t state;
 244     /** First MPI rank of this app_context in the job */
 245     orte_vpid_t first_rank;
 246     /** Standard argv-style array, including a final NULL pointer */
 247     char  **argv;
 248     /** Standard environ-style array, including a final NULL pointer */
 249     char  **env;
 250     /** Current working directory for this app */
 251     char   *cwd;
 252     /* flags */
 253     orte_app_context_flags_t flags;
 254     /* provide a list of attributes for this app_context in place
 255      * of having a continually-expanding list of fixed-use values.
 256      * This is a list of opal_value_t's, with the intent of providing
 257      * flexibility without constantly expanding the memory footprint
 258      * every time we want some new (rarely used) option
 259      */
 260     opal_list_t attributes;
 261 } orte_app_context_t;
 262 
 263 ORTE_DECLSPEC OBJ_CLASS_DECLARATION(orte_app_context_t);
 264 
 265 
 266 typedef struct {
 267     /** Base object so this can be put on a list */
 268     opal_list_item_t super;
 269     /* index of this node object in global array */
 270     orte_std_cntr_t index;
 271     /** String node name */
 272     char *name;
 273     /* daemon on this node */
 274     struct orte_proc_t *daemon;
 275     /** number of procs on this node */
 276     orte_vpid_t num_procs;
 277     /* array of pointers to procs on this node */
 278     opal_pointer_array_t *procs;
 279     /* next node rank on this node */
 280     orte_node_rank_t next_node_rank;
 281     /** State of this node */
 282     orte_node_state_t state;
 283     /** A "soft" limit on the number of slots available on the node.
 284         This will typically correspond to the number of physical CPUs
 285         that we have been allocated on this note and would be the
 286         "ideal" number of processes for us to launch. */
 287     orte_std_cntr_t slots;
 288     /** How many processes have already been launched, used by one or
 289         more jobs on this node. */
 290     orte_std_cntr_t slots_inuse;
 291     /** A "hard" limit (if set -- a value of 0 implies no hard limit)
 292         on the number of slots that can be allocated on a given
 293         node. This is for some environments (e.g. grid) there may be
 294         fixed limits on the number of slots that can be used.
 295 
 296         This value also could have been a boolean - but we may want to
 297         allow the hard limit be different than the soft limit - in
 298         other words allow the node to be oversubscribed up to a
 299         specified limit.  For example, if we have two processors, we
 300         may want to allow up to four processes but no more. */
 301     orte_std_cntr_t slots_max;
 302     /* system topology for this node */
 303     orte_topology_t *topology;
 304     /* flags */
 305     orte_node_flags_t flags;
 306     /* list of orte_attribute_t */
 307     opal_list_t attributes;
 308 } orte_node_t;
 309 ORTE_DECLSPEC OBJ_CLASS_DECLARATION(orte_node_t);
 310 
 311 typedef struct {
 312     /** Base object so this can be put on a list */
 313     opal_list_item_t super;
 314     /* personality for this job */
 315     char **personality;
 316     /* jobid for this job */
 317     orte_jobid_t jobid;
 318     /* offset to the total number of procs so shared memory
 319      * components can potentially connect to any spawned jobs*/
 320     orte_vpid_t offset;
 321     /* app_context array for this job */
 322     opal_pointer_array_t *apps;
 323     /* number of app_contexts in the array */
 324     orte_app_idx_t num_apps;
 325     /* rank desiring stdin - for now, either one rank, all ranks
 326      * (wildcard), or none (invalid)
 327      */
 328     orte_vpid_t stdin_target;
 329     /* total slots allocated to this job */
 330     orte_std_cntr_t total_slots_alloc;
 331     /* number of procs in this job */
 332     orte_vpid_t num_procs;
 333     /* array of pointers to procs in this job */
 334     opal_pointer_array_t *procs;
 335     /* map of the job */
 336     struct orte_job_map_t *map;
 337     /* bookmark for where we are in mapping - this
 338      * indicates the node where we stopped
 339      */
 340     orte_node_t *bookmark;
 341     /* if we are binding, bookmark the index of the
 342      * last object we bound to */
 343     unsigned int bkmark_obj;
 344     /* state of the overall job */
 345     orte_job_state_t state;
 346     /* number of procs mapped */
 347     orte_vpid_t num_mapped;
 348     /* number of procs launched */
 349     orte_vpid_t num_launched;
 350     /* number of procs reporting contact info */
 351     orte_vpid_t num_reported;
 352     /* number of procs terminated */
 353     orte_vpid_t num_terminated;
 354     /* number of daemons reported launched so we can track progress */
 355     orte_vpid_t num_daemons_reported;
 356     /* originator of a dynamic spawn */
 357     orte_process_name_t originator;
 358     /* number of local procs */
 359     orte_vpid_t num_local_procs;
 360     /* flags */
 361     orte_job_flags_t flags;
 362     /* attributes */
 363     opal_list_t attributes;
 364     /* launch msg buffer */
 365     opal_buffer_t launch_msg;
 366 } orte_job_t;
 367 ORTE_DECLSPEC OBJ_CLASS_DECLARATION(orte_job_t);
 368 
 369 struct orte_proc_t {
 370     /** Base object so this can be put on a list */
 371     opal_list_item_t super;
 372     /* process name */
 373     orte_process_name_t name;
 374     /* the vpid of my parent - the daemon vpid for an app
 375      * or the vpid of the parent in the routing tree of
 376      * a daemon */
 377     orte_vpid_t parent;
 378     /* pid */
 379     pid_t pid;
 380     /* local rank amongst my peers on the node
 381      * where this is running - this value is
 382      * needed by MPI procs so that the lowest
 383      * rank on a node can perform certain fns -
 384      * e.g., open an sm backing file
 385      */
 386     orte_local_rank_t local_rank;
 387     /* local rank on the node across all procs
 388      * and jobs known to this HNP - this is
 389      * needed so that procs can do things like
 390      * know which static IP port to use
 391      */
 392     orte_node_rank_t node_rank;
 393     /* rank of this proc within its app context - this
 394      * will just equal its vpid for single app_context
 395      * applications
 396      */
 397     int32_t app_rank;
 398     /* Last state used to trigger the errmgr for this proc */
 399     orte_proc_state_t last_errmgr_state;
 400     /* process state */
 401     orte_proc_state_t state;
 402     /* exit code */
 403     orte_exit_code_t exit_code;
 404     /* the app_context that generated this proc */
 405     orte_app_idx_t app_idx;
 406     /* pointer to the node where this proc is executing */
 407     orte_node_t *node;
 408     /* RML contact info */
 409     char *rml_uri;
 410     /* some boolean flags */
 411     orte_proc_flags_t flags;
 412     /* list of opal_value_t attributes */
 413     opal_list_t attributes;
 414 };
 415 typedef struct orte_proc_t orte_proc_t;
 416 ORTE_DECLSPEC OBJ_CLASS_DECLARATION(orte_proc_t);
 417 
 418 /**
 419  * Get a job data object
 420  * We cannot just reference a job data object with its jobid as
 421  * the jobid is no longer an index into the array. This change
 422  * was necessitated by modification of the jobid to include
 423  * an mpirun-unique qualifer to eliminate any global name
 424  * service
 425  */
 426 ORTE_DECLSPEC   orte_job_t* orte_get_job_data_object(orte_jobid_t job);
 427 
 428 /**
 429  * Get a proc data object
 430  */
 431 ORTE_DECLSPEC orte_proc_t* orte_get_proc_object(orte_process_name_t *proc);
 432 
 433 /**
 434  * Get the daemon vpid hosting a given proc
 435  */
 436 ORTE_DECLSPEC orte_vpid_t orte_get_proc_daemon_vpid(orte_process_name_t *proc);
 437 
 438 /* Get the hostname of a proc */
 439 ORTE_DECLSPEC char* orte_get_proc_hostname(orte_process_name_t *proc);
 440 
 441 /* get the node rank of a proc */
 442 ORTE_DECLSPEC orte_node_rank_t orte_get_proc_node_rank(orte_process_name_t *proc);
 443 
 444 /* Find the lowest vpid alive in a given job */
 445 ORTE_DECLSPEC orte_vpid_t orte_get_lowest_vpid_alive(orte_jobid_t job);
 446 
 447 /* global variables used by RTE - instanced in orte_globals.c */
 448 ORTE_DECLSPEC extern bool orte_debug_daemons_flag;
 449 ORTE_DECLSPEC extern bool orte_debug_daemons_file_flag;
 450 ORTE_DECLSPEC extern bool orte_leave_session_attached;
 451 ORTE_DECLSPEC extern bool orte_do_not_launch;
 452 ORTE_DECLSPEC extern bool orted_spin_flag;
 453 ORTE_DECLSPEC extern char *orte_local_cpu_type;
 454 ORTE_DECLSPEC extern char *orte_local_cpu_model;
 455 ORTE_DECLSPEC extern char *orte_basename;
 456 ORTE_DECLSPEC extern bool orte_coprocessors_detected;
 457 ORTE_DECLSPEC extern opal_hash_table_t *orte_coprocessors;
 458 ORTE_DECLSPEC extern char *orte_topo_signature;
 459 ORTE_DECLSPEC extern bool orte_no_vm;
 460 ORTE_DECLSPEC extern char *orte_data_server_uri;
 461 
 462 /* ORTE OOB port flags */
 463 ORTE_DECLSPEC extern bool orte_static_ports;
 464 ORTE_DECLSPEC extern bool orte_standalone_operation;
 465 
 466 /* nodename flags */
 467 ORTE_DECLSPEC extern bool orte_keep_fqdn_hostnames;
 468 ORTE_DECLSPEC extern bool orte_have_fqdn_allocation;
 469 ORTE_DECLSPEC extern bool orte_show_resolved_nodenames;
 470 ORTE_DECLSPEC extern bool orte_retain_aliases;
 471 ORTE_DECLSPEC extern int orte_use_hostname_alias;
 472 ORTE_DECLSPEC extern int orte_hostname_cutoff;
 473 
 474 /* debug flags */
 475 ORTE_DECLSPEC extern int orted_debug_failure;
 476 ORTE_DECLSPEC extern int orted_debug_failure_delay;
 477 
 478 ORTE_DECLSPEC extern bool orte_never_launched;
 479 ORTE_DECLSPEC extern bool orte_devel_level_output;
 480 ORTE_DECLSPEC extern bool orte_display_topo_with_map;
 481 ORTE_DECLSPEC extern bool orte_display_diffable_output;
 482 
 483 ORTE_DECLSPEC extern char **orte_launch_environ;
 484 
 485 ORTE_DECLSPEC extern bool orte_hnp_is_allocated;
 486 ORTE_DECLSPEC extern bool orte_allocation_required;
 487 ORTE_DECLSPEC extern bool orte_managed_allocation;
 488 ORTE_DECLSPEC extern char *orte_set_slots;
 489 ORTE_DECLSPEC extern bool orte_display_allocation;
 490 ORTE_DECLSPEC extern bool orte_display_devel_allocation;
 491 ORTE_DECLSPEC extern bool orte_soft_locations;
 492 ORTE_DECLSPEC extern bool orte_hnp_connected;
 493 ORTE_DECLSPEC extern bool orte_nidmap_communicated;
 494 ORTE_DECLSPEC extern bool orte_node_info_communicated;
 495 
 496 /* launch agents */
 497 ORTE_DECLSPEC extern char *orte_launch_agent;
 498 ORTE_DECLSPEC extern char **orted_cmd_line;
 499 ORTE_DECLSPEC extern char **orte_fork_agent;
 500 
 501 /* debugger job */
 502 ORTE_DECLSPEC extern bool orte_debugger_dump_proctable;
 503 ORTE_DECLSPEC extern char *orte_debugger_test_daemon;
 504 ORTE_DECLSPEC extern bool orte_debugger_test_attach;
 505 ORTE_DECLSPEC extern int orte_debugger_check_rate;
 506 
 507 /* exit flags */
 508 ORTE_DECLSPEC extern bool orte_abnormal_term_ordered;
 509 ORTE_DECLSPEC extern bool orte_routing_is_enabled;
 510 ORTE_DECLSPEC extern bool orte_job_term_ordered;
 511 ORTE_DECLSPEC extern bool orte_orteds_term_ordered;
 512 ORTE_DECLSPEC extern bool orte_allowed_exit_without_sync;
 513 ORTE_DECLSPEC extern int orte_startup_timeout;
 514 
 515 ORTE_DECLSPEC extern int orte_timeout_usec_per_proc;
 516 ORTE_DECLSPEC extern float orte_max_timeout;
 517 ORTE_DECLSPEC extern orte_timer_t *orte_mpiexec_timeout;
 518 
 519 /* global arrays for data storage */
 520 ORTE_DECLSPEC extern opal_hash_table_t *orte_job_data;
 521 ORTE_DECLSPEC extern opal_pointer_array_t *orte_node_pool;
 522 ORTE_DECLSPEC extern opal_pointer_array_t *orte_node_topologies;
 523 ORTE_DECLSPEC extern opal_pointer_array_t *orte_local_children;
 524 ORTE_DECLSPEC extern orte_vpid_t orte_total_procs;
 525 
 526 /* IOF controls */
 527 ORTE_DECLSPEC extern bool orte_tag_output;
 528 ORTE_DECLSPEC extern bool orte_timestamp_output;
 529 /* generate new xterm windows to display output from specified ranks */
 530 ORTE_DECLSPEC extern char *orte_xterm;
 531 
 532 /* whether or not to report launch progress */
 533 ORTE_DECLSPEC extern bool orte_report_launch_progress;
 534 
 535 /* allocation specification */
 536 ORTE_DECLSPEC extern char *orte_default_hostfile;
 537 ORTE_DECLSPEC extern bool orte_default_hostfile_given;
 538 ORTE_DECLSPEC extern char *orte_rankfile;
 539 ORTE_DECLSPEC extern int orte_num_allocated_nodes;
 540 ORTE_DECLSPEC extern char *orte_default_dash_host;
 541 
 542 /* PMI version control */
 543 ORTE_DECLSPEC extern int orted_pmi_version;
 544 
 545 /* tool communication controls */
 546 ORTE_DECLSPEC extern bool orte_report_events;
 547 ORTE_DECLSPEC extern char *orte_report_events_uri;
 548 
 549 /* process recovery */
 550 ORTE_DECLSPEC extern bool orte_enable_recovery;
 551 ORTE_DECLSPEC extern int32_t orte_max_restarts;
 552 /* barrier control */
 553 ORTE_DECLSPEC extern bool orte_do_not_barrier;
 554 
 555 /* exit status reporting */
 556 ORTE_DECLSPEC extern bool orte_report_child_jobs_separately;
 557 ORTE_DECLSPEC extern struct timeval orte_child_time_to_exit;
 558 ORTE_DECLSPEC extern bool orte_abort_non_zero_exit;
 559 
 560 /* length of stat history to keep */
 561 ORTE_DECLSPEC extern int orte_stat_history_size;
 562 
 563 /* envars to forward */
 564 ORTE_DECLSPEC extern char **orte_forwarded_envars;
 565 
 566 /* map stddiag output to stderr so it isn't forwarded to mpirun */
 567 ORTE_DECLSPEC extern bool orte_map_stddiag_to_stderr;
 568 ORTE_DECLSPEC extern bool orte_map_stddiag_to_stdout;
 569 
 570 /* maximum size of virtual machine - used to subdivide allocation */
 571 ORTE_DECLSPEC extern int orte_max_vm_size;
 572 
 573 /* user debugger */
 574 ORTE_DECLSPEC extern char *orte_base_user_debugger;
 575 
 576 /* binding directives for daemons to restrict them
 577  * to certain cores
 578  */
 579 ORTE_DECLSPEC extern char *orte_daemon_cores;
 580 
 581 /* Max time to wait for stack straces to return */
 582 ORTE_DECLSPEC extern int orte_stack_trace_wait_timeout;
 583 
 584 END_C_DECLS
 585 
 586 #endif /* ORTE_RUNTIME_ORTE_GLOBALS_H */

/* [<][>][^][v][top][bottom][index][help] */