11/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
22/*
3- * Copyright (c) 2018-2022 Triad National Security, LLC. All rights
3+ * Copyright (c) 2018-2023 Triad National Security, LLC. All rights
44 * reserved.
55 * Copyright (c) 2022 Cisco Systems, Inc. All rights reserved.
66 * Copyright (c) 2022 The University of Tennessee and The University
2121#include "opal/util/show_help.h"
2222#include "opal/util/argv.h"
2323#include "opal/runtime/opal_params.h"
24+ #include "opal/util/timings.h"
25+ #include "opal/mca/allocator/base/base.h"
26+ #include "opal/mca/rcache/base/base.h"
27+ #include "opal/mca/mpool/base/base.h"
28+ #include "opal/mca/smsc/base/base.h"
29+ #include "opal/mca/mpool/base/mpool_base_tree.h"
30+ #include "opal/mca/pmix/pmix-internal.h"
31+ #include "opal/mca/pmix/base/base.h"
2432
2533#include "ompi/mca/pml/pml.h"
2634#include "ompi/runtime/params.h"
3644#include "ompi/dpm/dpm.h"
3745#include "ompi/file/file.h"
3846#include "ompi/mpiext/mpiext.h"
47+ #include "ompi/util/timings.h"
3948
4049#include "ompi/mca/hook/base/base.h"
4150#include "ompi/mca/op/base/base.h"
42- #include "opal/mca/allocator/base/base.h"
43- #include "opal/mca/rcache/base/base.h"
44- #include "opal/mca/mpool/base/base.h"
45- #include "opal/mca/smsc/base/base.h"
4651#include "ompi/mca/bml/base/base.h"
4752#include "ompi/mca/pml/base/base.h"
4853#include "ompi/mca/coll/base/base.h"
4954#include "ompi/mca/osc/base/base.h"
5055#include "ompi/mca/part/base/base.h"
5156#include "ompi/mca/io/base/base.h"
5257#include "ompi/mca/topo/base/base.h"
53- #include "opal/mca/pmix/base/base.h"
5458
55- #include "opal/mca/mpool/base/mpool_base_tree.h"
5659#include "ompi/mca/pml/base/pml_base_bsend.h"
57- #include "ompi/util/timings.h"
58- #include "opal/mca/pmix/pmix-internal.h"
5960
6061ompi_predefined_instance_t ompi_mpi_instance_null = {{{{0 }}}};
6162
@@ -344,7 +345,8 @@ static int ompi_mpi_instance_init_common (int argc, char **argv)
344345 pmix_info_t info [2 ];
345346 pmix_status_t rc ;
346347 opal_pmix_lock_t mylock ;
347- OMPI_TIMING_INIT (64 );
348+
349+ OPAL_TIMING_ENV_INIT (init_common );
348350
349351 ret = ompi_mpi_instance_retain ();
350352 if (OPAL_UNLIKELY (OMPI_SUCCESS != ret )) {
@@ -385,13 +387,15 @@ static int ompi_mpi_instance_init_common (int argc, char **argv)
385387 mca_base_var_set_value (ret , allvalue , 4 , MCA_BASE_VAR_SOURCE_DEFAULT , NULL );
386388 }
387389
388- OMPI_TIMING_NEXT ( "initialization" );
390+ OPAL_TIMING_ENV_NEXT ( init_common , "initialization" );
389391
390392 /* Setup RTE */
391393 if (OMPI_SUCCESS != (ret = ompi_rte_init (& argc , & argv ))) {
392394 return ompi_instance_print_error ("ompi_mpi_init: ompi_rte_init failed" , ret );
393395 }
394396
397+ OPAL_TIMING_ENV_NEXT (init_common , "ompi_rte_init" );
398+
395399 /* open the ompi hook framework */
396400 for (int i = 0 ; ompi_framework_dependencies [i ] ; ++ i ) {
397401 ret = mca_base_framework_open (ompi_framework_dependencies [i ], 0 );
@@ -404,10 +408,6 @@ static int ompi_mpi_instance_init_common (int argc, char **argv)
404408 }
405409 }
406410
407- OMPI_TIMING_NEXT ("rte_init" );
408- OMPI_TIMING_IMPORT_OPAL ("orte_ess_base_app_setup" );
409- OMPI_TIMING_IMPORT_OPAL ("rte_init" );
410-
411411 ompi_rte_initialized = true;
412412 /* if we are oversubscribed, then set yield_when_idle
413413 * accordingly */
@@ -509,9 +509,6 @@ static int ompi_mpi_instance_init_common (int argc, char **argv)
509509 return ompi_instance_print_error ("mca_pml_base_select() failed" , ret );
510510 }
511511
512- OMPI_TIMING_IMPORT_OPAL ("orte_init" );
513- OMPI_TIMING_NEXT ("rte_init-commit" );
514-
515512 /* exchange connection info - this function may also act as a barrier
516513 * if data exchange is required. The modex occurs solely across procs
517514 * in our job. If a barrier is required, the "modex" function will
@@ -522,19 +519,20 @@ static int ompi_mpi_instance_init_common (int argc, char **argv)
522519 return ret ; /* TODO: need to fix this */
523520 }
524521
525- OMPI_TIMING_NEXT ("commit" );
522+ OPAL_TIMING_ENV_NEXT (init_common , "PMIx_Commit" );
523+
526524#if (OPAL_ENABLE_TIMING )
527525 if (OMPI_TIMING_ENABLED && !opal_pmix_base_async_modex &&
528526 opal_pmix_collect_all_data && !opal_process_info .is_singleton ) {
529527 if (PMIX_SUCCESS != (rc = PMIx_Fence (NULL , 0 , NULL , 0 ))) {
530528 ret = opal_pmix_convert_status (rc );
531529 return ompi_instance_print_error ("timing: pmix-barrier-1 failed" , ret );
532530 }
533- OMPI_TIMING_NEXT ( "pmix-barrier-1" );
531+ OPAL_TIMING_ENV_NEXT ( init_common , "pmix-barrier-1" );
534532 if (PMIX_SUCCESS != (rc = PMIx_Fence (NULL , 0 , NULL , 0 ))) {
535533 return ompi_instance_print_error ("timing: pmix-barrier-2 failed" , ret );
536534 }
537- OMPI_TIMING_NEXT ( "pmix-barrier-2" );
535+ OPAL_TIMING_ENV_NEXT ( init_common , "pmix-barrier-2" );
538536 }
539537#endif
540538
@@ -579,7 +577,7 @@ static int ompi_mpi_instance_init_common (int argc, char **argv)
579577 }
580578 }
581579
582- OMPI_TIMING_NEXT ( "modex" );
580+ OPAL_TIMING_ENV_NEXT ( init_common , "modex" );
583581
584582 /* select buffered send allocator component to be used */
585583 if (OMPI_SUCCESS != (ret = mca_pml_base_bsend_init ())) {
@@ -627,14 +625,6 @@ static int ompi_mpi_instance_init_common (int argc, char **argv)
627625 return ompi_instance_print_error ("ompi_attr_create_predefined_keyvals() failed" , ret );
628626 }
629627
630- if (mca_pml_base_requires_world ()) {
631- /* need to set up comm world for this instance -- XXX -- FIXME -- probably won't always
632- * be the case. */
633- if (OMPI_SUCCESS != (ret = ompi_comm_init_mpi3 ())) {
634- return ompi_instance_print_error ("ompi_comm_init_mpi3 () failed" , ret );
635- }
636- }
637-
638628 /* initialize file handles */
639629 if (OMPI_SUCCESS != (ret = ompi_file_init ())) {
640630 return ompi_instance_print_error ("ompi_file_init() failed" , ret );
@@ -711,11 +701,12 @@ static int ompi_mpi_instance_init_common (int argc, char **argv)
711701 return ompi_instance_print_error ("ompi_mpi_init: ompi_comm_cid_init failed" , ret );
712702 }
713703
714- /* Do we need to wait for a debugger? */
715- ompi_rte_wait_for_debugger ();
704+ if (OMPI_SUCCESS != (ret = ompi_comm_init_mpi3 ())) {
705+ return ompi_instance_print_error ("ompi_comm_init_mpi3 () failed" , ret );
706+ }
716707
717708 /* Next timing measurement */
718- OMPI_TIMING_NEXT ( "modex-barrier" );
709+ OPAL_TIMING_ENV_NEXT ( init_common , "modex-barrier" );
719710
720711 if (!opal_process_info .is_singleton ) {
721712 /* if we executed the above fence in the background, then
@@ -740,9 +731,7 @@ static int ompi_mpi_instance_init_common (int argc, char **argv)
740731 }
741732 }
742733
743- /* check for timing request - get stop time and report elapsed
744- time if so, then start the clock again */
745- OMPI_TIMING_NEXT ("barrier" );
734+ OPAL_TIMING_ENV_NEXT (init_common , "barrier" );
746735
747736#if OPAL_ENABLE_PROGRESS_THREADS == 0
748737 /* Start setting up the event engine for MPI operations. Don't
@@ -751,7 +740,8 @@ static int ompi_mpi_instance_init_common (int argc, char **argv)
751740 CPU utilization for the remainder of MPI_INIT when we are
752741 blocking on RTE-level events, but may greatly reduce non-TCP
753742 latency. */
754- opal_progress_set_event_flag (OPAL_EVLOOP_NONBLOCK );
743+ int old_event_flags = opal_progress_set_event_flag (0 );
744+ opal_progress_set_event_flag (old_event_flags | OPAL_EVLOOP_NONBLOCK );
755745#endif
756746
757747 /* Undo OPAL calling opal_progress_event_users_increment() during
0 commit comments