From 5fdfb739579747128dd5f333b31ff29ce0ec955b Mon Sep 17 00:00:00 2001 From: conrad Date: Mon, 22 Mar 2021 17:28:23 +1000 Subject: [PATCH] cleanup --- include/armadillo_bits/arma_rng.hpp | 91 +++++++---------------------- src/wrapper1.cpp | 1 - 2 files changed, 21 insertions(+), 71 deletions(-) diff --git a/include/armadillo_bits/arma_rng.hpp b/include/armadillo_bits/arma_rng.hpp index 3233f1a9..15c953ae 100644 --- a/include/armadillo_bits/arma_rng.hpp +++ b/include/armadillo_bits/arma_rng.hpp @@ -23,11 +23,12 @@ #endif -// // workaround for issue on macOS 11 and/or AppleClang 12.0 -// // see https://gitlab.com/conradsnicta/armadillo-code/-/issues/173 -// // the workaround is here instead of CMakeLists.txt -// // to ensure that the armadillo runtime library has arma_rng_cxx11_instance -// // for already compiled programs running on earlier versions of macOS +// NOTE: mt19937_64_instance_warmup is used as a workaround +// NOTE: for thread_local issue on macOS 11 and/or AppleClang 12.0 +// NOTE: see https://gitlab.com/conradsnicta/armadillo-code/-/issues/173 +// NOTE: if this workaround causes problems, please report this and +// NOTE: disable this workaround by uncommenting the code block below: + // #if defined(__APPLE__) || defined(__apple_build_version__) // #if !defined(ARMA_DONT_DISABLE_EXTERN_RNG) // #undef ARMA_USE_EXTERN_RNG @@ -35,26 +36,25 @@ // #endif + #if defined(ARMA_USE_EXTERN_RNG) extern thread_local std::mt19937_64 mt19937_64_instance; - // extern thread_local unsigned long long extern_rng_seed; - // namespace { thread_local std::mt19937_64 mt19937_64_instance; } - - namespace - { - struct mt19937_64_instance_warmup - { - inline - mt19937_64_instance_warmup() + #if defined(__APPLE__) || defined(__apple_build_version__) + namespace + { + struct mt19937_64_instance_warmup { - typename std::mt19937_64::result_type junk = mt19937_64_instance(); - arma_ignore(junk); - } - }; - - static mt19937_64_instance_warmup mt19937_64_instance_warmup_run; - } + inline mt19937_64_instance_warmup() + { + typename std::mt19937_64::result_type junk = mt19937_64_instance(); + arma_ignore(junk); + } + }; + + static mt19937_64_instance_warmup mt19937_64_instance_warmup_run; + } + #endif #endif @@ -82,8 +82,6 @@ class arma_rng inline static void set_seed(const seed_type val); inline static void set_seed_random(); - // inline static seed_type get_extern_rng_seed(); - template struct randi; template struct randu; template struct randn; @@ -102,8 +100,6 @@ arma_rng::set_seed(const arma_rng::seed_type val) } #elif defined(ARMA_USE_EXTERN_RNG) { - // extern_rng_seed = val; - mt19937_64_instance.seed(val); } #else @@ -196,29 +192,6 @@ arma_rng::set_seed_random() -// inline -// arma_rng::seed_type -// arma_rng::get_extern_rng_seed() -// { -// // cout << "arma_rng::get_extern_rng_seed()" << endl; -// -// #if defined(ARMA_USE_EXTERN_RNG) -// { -// typedef unsigned long long extern_rng_seed_type; -// -// const extern_rng_seed_type seed_val = extern_rng_seed; -// -// extern_rng_seed = (seed_val < std::numeric_limits::max()) ? (seed_val + extern_rng_seed_type(1)) : extern_rng_seed_type(1); -// -// return seed_type(seed_val); -// } -// #endif -// -// return seed_type(0); -// } - - - // @@ -237,8 +210,6 @@ struct arma_rng::randi { constexpr double scale = double(std::numeric_limits::max()) / double(std::mt19937_64::max()); - // // mt19937_64_instance.seed(arma_rng::get_extern_rng_seed()); - return eT( double(mt19937_64_instance()) * scale ); } #else @@ -283,8 +254,6 @@ struct arma_rng::randi { std::uniform_int_distribution local_i_distr(a, b); - // mt19937_64_instance.seed(arma_rng::get_extern_rng_seed()); - for(uword i=0; i local_u_distr; - // mt19937_64_instance.seed(arma_rng::get_extern_rng_seed()); - for(uword i=0; i < N; ++i) { mem[i] = eT( local_u_distr(mt19937_64_instance) ); } } #else @@ -389,8 +354,6 @@ struct arma_rng::randu< std::complex > { std::uniform_real_distribution local_u_distr; - // // mt19937_64_instance.seed(arma_rng::get_extern_rng_seed()); - const T a = T( local_u_distr(mt19937_64_instance) ); const T b = T( local_u_distr(mt19937_64_instance) ); @@ -426,8 +389,6 @@ struct arma_rng::randu< std::complex > { std::uniform_real_distribution local_u_distr; - // mt19937_64_instance.seed(arma_rng::get_extern_rng_seed()); - for(uword i=0; i < N; ++i) { const T a = T( local_u_distr(mt19937_64_instance) ); @@ -487,8 +448,6 @@ struct arma_rng::randn { std::normal_distribution local_n_distr; - // // mt19937_64_instance.seed(arma_rng::get_extern_rng_seed()); - return eT( local_n_distr(mt19937_64_instance) ); } #else @@ -512,8 +471,6 @@ struct arma_rng::randn { std::normal_distribution local_n_distr; - // // mt19937_64_instance.seed(arma_rng::get_extern_rng_seed()); - out1 = eT( local_n_distr(mt19937_64_instance) ); out2 = eT( local_n_distr(mt19937_64_instance) ); } @@ -538,8 +495,6 @@ struct arma_rng::randn { std::normal_distribution local_n_distr; - // mt19937_64_instance.seed(arma_rng::get_extern_rng_seed()); - for(uword i=0; i < N; ++i) { mem[i] = eT( local_n_distr(mt19937_64_instance) ); } } #else @@ -668,8 +623,6 @@ struct arma_rng::randn< std::complex > { std::normal_distribution local_n_distr; - // mt19937_64_instance.seed(arma_rng::get_extern_rng_seed()); - for(uword i=0; i < N; ++i) { const T a = T( local_n_distr(mt19937_64_instance) ); @@ -791,8 +744,6 @@ struct arma_rng::randg { std::gamma_distribution local_g_distr(a,b); - // mt19937_64_instance.seed(arma_rng::get_extern_rng_seed()); - for(uword i=0; i