diff --git a/CREDITS b/CREDITS index 75b994c9a..b77e08098 100644 --- a/CREDITS +++ b/CREDITS @@ -52,6 +52,7 @@ but many others have contributed code and feedback, including Kyungmin Lee @kyungminlee (Ohio State University) Michael Lehn @michael-lehn Shmuel Levine @ShmuelLevine + @lschork2 Dave Love @loveshack Tze Meng Low (The University of Texas at Austin) Ye Luo @ye-luo (Argonne National Laboratory) diff --git a/frame/base/bli_init.c b/frame/base/bli_init.c index 1e28ace09..b8c53edd8 100644 --- a/frame/base/bli_init.c +++ b/frame/base/bli_init.c @@ -64,32 +64,9 @@ void bli_finalize_auto( void ) // ----------------------------------------------------------------------------- -void bli_init_apis( void ) -{ - // Initialize various sub-APIs. - bli_gks_init(); - bli_ind_init(); - bli_thread_init(); - bli_pack_init(); - bli_memsys_init(); -} - -void bli_finalize_apis( void ) -{ - // Finalize various sub-APIs. - bli_memsys_finalize(); - bli_pack_finalize(); - bli_thread_finalize(); - bli_ind_finalize(); - bli_gks_finalize(); -} - -// ----------------------------------------------------------------------------- - // A pthread_once_t variable is a pthread structure used in pthread_once(). // pthread_once() is guaranteed to execute exactly once among all threads that -// pass in this control object. Thus, we need one for initialization and a -// separate one for finalization. +// pass in this control object (until/unless the variable is reset). static bli_pthread_once_t once_init = BLIS_PTHREAD_ONCE_INIT; static bli_pthread_once_t once_finalize = BLIS_PTHREAD_ONCE_INIT; @@ -103,3 +80,31 @@ void bli_finalize_once( void ) bli_pthread_once( &once_finalize, bli_finalize_apis ); } +// ----------------------------------------------------------------------------- + +void bli_init_apis( void ) +{ + // Initialize various sub-APIs. + bli_gks_init(); + bli_ind_init(); + bli_thread_init(); + bli_pack_init(); + bli_memsys_init(); + + // Reset the control variable that will allow finalization. + once_finalize = BLIS_PTHREAD_ONCE_INIT; +} + +void bli_finalize_apis( void ) +{ + // Finalize various sub-APIs. + bli_memsys_finalize(); + bli_pack_finalize(); + bli_thread_finalize(); + bli_ind_finalize(); + bli_gks_finalize(); + + // Reset the control variable that will allow (re-)initialization. + once_init = BLIS_PTHREAD_ONCE_INIT; +} +