George, please allow me to jump in with naive comments ...
currently (master) both openib and usnic btl invokes opal_using_threads in component_init() : btl_openib_component_init(int *num_btl_modules, bool enable_progress_threads, bool enable_mpi_threads) { [...] /* Currently refuse to run if MPI_THREAD_MULTIPLE is enabled */ if (opal_using_threads() && !mca_btl_base_thread_multiple_override) { opal_output_verbose(5, opal_btl_base_framework.framework_output, "btl:openib: MPI_THREAD_MULTIPLE not suppported; skipping this component"); goto no_btls; } > The overall design in OMPI was that no OMPI module should be allowed to > decide if threads are on does "OMPI module" exclude OPAL and ORTE module ? if yes, did the btl move from OMPI down to OPAL have any impact ? if not, then could/should opal_using_threads() abort and/or display an error message if it is called too early (at least in debug builds) ? Cheers, Gilles On 2014/12/12 10:30, Ralph Castain wrote: > Just to help me understand: I don't think this change actually changed any > behavior. However, it certainly *allows* a different behavior. Isn't that > true? > > If so, I guess the real question is for Pascal at Bull: why do you feel this > earlier setting is required? > > >> On Dec 11, 2014, at 4:21 PM, George Bosilca <bosi...@icl.utk.edu> wrote: >> >> The overall design in OMPI was that no OMPI module should be allowed to >> decide if threads are on (thus it should not rely on the value returned by >> opal_using_threads during it's initialization stage). Instead, they should >> respect the level of thread support requested as an argument during the >> initialization step. >> >> And this is true even for the BTLs. The PML component init function is >> propagating the enable_progress_threads and enable_mpi_threads, down to the >> BML, and then to the BTL. This 2 variables, enable_progress_threads and >> enable_mpi_threads, are exactly what the ompi_mpi_init is using to compute >> the the value of the opal) using_thread (and that this patch moved). >> >> The setting of the opal_using_threads was delayed during the initialization >> to ensure that it's value was not used to select a specific thread-level in >> any module, a behavior that is allowed now with the new setting. >> >> A drastic change in behavior... >> >> George. >> >> >> On Tue, Dec 9, 2014 at 3:33 AM, Ralph Castain <r...@open-mpi.org >> <mailto:r...@open-mpi.org>> wrote: >> Kewl - I'll fix. Thanks! >> >>> On Dec 9, 2014, at 12:32 AM, Pascal Deveze <pascal.dev...@bull.net >>> <mailto:pascal.dev...@bull.net>> wrote: >>> >>> Hi Ralph, >>> >>> This in in the trunk. >>> >>> De : devel [mailto:devel-boun...@open-mpi.org >>> <mailto:devel-boun...@open-mpi.org>] De la part de Ralph Castain >>> Envoyé : mardi 9 décembre 2014 09:32 >>> À : Open MPI Developers >>> Objet : Re: [OMPI devel] Patch proposed: opal_set_using_threads(true) in >>> ompi/runtime/ompi_mpi_init.c is called to late >>> >>> Hi Pascal >>> >>> Is this in the trunk or in the 1.8 series (or both)? >>> >>> >>> On Dec 9, 2014, at 12:28 AM, Pascal Deveze <pascal.dev...@bull.net >>> <mailto:pascal.dev...@bull.net>> wrote: >>> >>> >>> In case where MPI is compiled with --enable-mpi-thread-multiple, a call to >>> opal_using_threads() always returns 0 in the routine >>> btl_xxx_component_init() of the BTLs, event if the application calls >>> MPI_Init_thread() with MPI_THREAD_MULTIPLE. >>> >>> This is because opal_set_using_threads(true) in >>> ompi/runtime/ompi_mpi_init.c is called to late. >>> >>> I propose the following patch that solves the problem for me: >>> >>> diff --git a/ompi/runtime/ompi_mpi_init.c b/ompi/runtime/ompi_mpi_init.c >>> index 35509cf..c2370fc 100644 >>> --- a/ompi/runtime/ompi_mpi_init.c >>> +++ b/ompi/runtime/ompi_mpi_init.c >>> @@ -512,6 +512,13 @@ int ompi_mpi_init(int argc, char **argv, int >>> requested, int *provided) >>> } >>> #endif >>> >>> + /* If thread support was enabled, then setup OPAL to allow for >>> + them. */ >>> + if ((OPAL_ENABLE_PROGRESS_THREADS == 1) || >>> + (*provided != MPI_THREAD_SINGLE)) { >>> + opal_set_using_threads(true); >>> + } >>> + >>> /* initialize datatypes. This step should be done early as it will >>> * create the local convertor and local arch used in the proc >>> * init. >>> @@ -724,13 +731,6 @@ int ompi_mpi_init(int argc, char **argv, int >>> requested, int *provided) >>> goto error; >>> } >>> >>> - /* If thread support was enabled, then setup OPAL to allow for >>> - them. */ >>> - if ((OPAL_ENABLE_PROGRESS_THREADS == 1) || >>> - (*provided != MPI_THREAD_SINGLE)) { >>> - opal_set_using_threads(true); >>> - } >>> - >>> /* start PML/BTL's */ >>> ret = MCA_PML_CALL(enable(true)); >>> if( OMPI_SUCCESS != ret ) { >>> _______________________________________________ >>> devel mailing list >>> de...@open-mpi.org <mailto:de...@open-mpi.org> >>> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel >>> <http://www.open-mpi.org/mailman/listinfo.cgi/devel> >>> Link to this post: >>> http://www.open-mpi.org/community/lists/devel/2014/12/16459.php >>> <http://www.open-mpi.org/community/lists/devel/2014/12/16459.php> >>> >>> _______________________________________________ >>> devel mailing list >>> de...@open-mpi.org <mailto:de...@open-mpi.org> >>> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel >>> <http://www.open-mpi.org/mailman/listinfo.cgi/devel> >>> Link to this post: >>> http://www.open-mpi.org/community/lists/devel/2014/12/16462.php >>> <http://www.open-mpi.org/community/lists/devel/2014/12/16462.php> >> _______________________________________________ >> devel mailing list >> de...@open-mpi.org <mailto:de...@open-mpi.org> >> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel >> <http://www.open-mpi.org/mailman/listinfo.cgi/devel> >> Link to this post: >> http://www.open-mpi.org/community/lists/devel/2014/12/16463.php >> <http://www.open-mpi.org/community/lists/devel/2014/12/16463.php> >> >> _______________________________________________ >> devel mailing list >> de...@open-mpi.org >> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel >> Link to this post: >> http://www.open-mpi.org/community/lists/devel/2014/12/16516.php > > > > _______________________________________________ > devel mailing list > de...@open-mpi.org > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel > Link to this post: > http://www.open-mpi.org/community/lists/devel/2014/12/16517.php