From dbcbc65a0033939ae779e2d57ccf05e6c088db3b Mon Sep 17 00:00:00 2001 From: conrad Date: Fri, 3 May 2024 14:42:42 +1000 Subject: [PATCH] change !ARMA_DONT_USE_STD_MUTEX to ARMA_USE_STD_MUTEX --- include/armadillo_bits/Cube_bones.hpp | 4 ++-- include/armadillo_bits/Cube_meat.hpp | 4 ++-- include/armadillo_bits/MapMat_meat.hpp | 10 +++++----- include/armadillo_bits/SpMat_bones.hpp | 2 +- include/armadillo_bits/SpMat_meat.hpp | 8 ++++---- include/armadillo_bits/arma_config.hpp | 2 +- include/armadillo_bits/arma_forward.hpp | 6 +++--- include/armadillo_bits/arma_rng.hpp | 2 +- include/armadillo_bits/config.hpp | 13 ++++++++----- include/armadillo_bits/config.hpp.cmake | 13 ++++++++----- include/armadillo_bits/fft_engine_fftw3.hpp | 2 +- 11 files changed, 36 insertions(+), 30 deletions(-) diff --git a/include/armadillo_bits/Cube_bones.hpp b/include/armadillo_bits/Cube_bones.hpp index 5cf364aa..91449e18 100644 --- a/include/armadillo_bits/Cube_bones.hpp +++ b/include/armadillo_bits/Cube_bones.hpp @@ -62,7 +62,7 @@ class Cube : public BaseCube< eT, Cube > #if defined(ARMA_USE_OPENMP) using raw_mat_ptr_type = mat_type*; using atomic_mat_ptr_type = mat_type*; - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) using raw_mat_ptr_type = mat_type*; using atomic_mat_ptr_type = std::atomic; #else @@ -72,7 +72,7 @@ class Cube : public BaseCube< eT, Cube > atomic_mat_ptr_type* mat_ptrs = nullptr; - #if (!defined(ARMA_DONT_USE_STD_MUTEX)) + #if defined(ARMA_USE_STD_MUTEX) mutable std::mutex mat_mutex; // required for slice() #endif diff --git a/include/armadillo_bits/Cube_meat.hpp b/include/armadillo_bits/Cube_meat.hpp index 6dc19ce9..e8075085 100644 --- a/include/armadillo_bits/Cube_meat.hpp +++ b/include/armadillo_bits/Cube_meat.hpp @@ -610,7 +610,7 @@ Cube::get_mat_ptr(const uword in_slice) const #pragma omp atomic read mat_ptr = mat_ptrs[in_slice]; } - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) { mat_ptr = mat_ptrs[in_slice].load(); } @@ -635,7 +635,7 @@ Cube::get_mat_ptr(const uword in_slice) const mat_ptrs[in_slice] = mat_ptr; } } - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) { const std::lock_guard lock(mat_mutex); diff --git a/include/armadillo_bits/MapMat_meat.hpp b/include/armadillo_bits/MapMat_meat.hpp index f937453f..9311511b 100644 --- a/include/armadillo_bits/MapMat_meat.hpp +++ b/include/armadillo_bits/MapMat_meat.hpp @@ -1171,7 +1171,7 @@ SpMat_MapMat_val::operator=(const eT in_val) (*this).set(in_val); } } - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) { const std::lock_guard lock(s_parent.cache_mutex); @@ -1204,7 +1204,7 @@ SpMat_MapMat_val::operator+=(const eT in_val) (*this).add(in_val); } } - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) { const std::lock_guard lock(s_parent.cache_mutex); @@ -1237,7 +1237,7 @@ SpMat_MapMat_val::operator-=(const eT in_val) (*this).sub(in_val); } } - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) { const std::lock_guard lock(s_parent.cache_mutex); @@ -1268,7 +1268,7 @@ SpMat_MapMat_val::operator*=(const eT in_val) (*this).mul(in_val); } } - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) { const std::lock_guard lock(s_parent.cache_mutex); @@ -1299,7 +1299,7 @@ SpMat_MapMat_val::operator/=(const eT in_val) (*this).div(in_val); } } - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) { const std::lock_guard lock(s_parent.cache_mutex); diff --git a/include/armadillo_bits/SpMat_bones.hpp b/include/armadillo_bits/SpMat_bones.hpp index 59c64ff1..c66c34d9 100644 --- a/include/armadillo_bits/SpMat_bones.hpp +++ b/include/armadillo_bits/SpMat_bones.hpp @@ -694,7 +694,7 @@ class SpMat : public SpBase< eT, SpMat > // 1: CSC needs to be updated from cache (ie. cache has more recent data) // 2: no update required (ie. CSC and cache contain the same data) - #if (!defined(ARMA_DONT_USE_STD_MUTEX)) + #if defined(ARMA_USE_STD_MUTEX) arma_aligned mutable std::mutex cache_mutex; #endif diff --git a/include/armadillo_bits/SpMat_meat.hpp b/include/armadillo_bits/SpMat_meat.hpp index e9b9fc48..8d40a865 100644 --- a/include/armadillo_bits/SpMat_meat.hpp +++ b/include/armadillo_bits/SpMat_meat.hpp @@ -4445,7 +4445,7 @@ SpMat::reset_cache() sync_state = 0; } } - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) { const std::lock_guard lock(cache_mutex); @@ -5062,7 +5062,7 @@ SpMat::init(const SpMat& x) init_done = true; } } - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) if(x.sync_state == 1) { const std::lock_guard lock(x.cache_mutex); @@ -6659,7 +6659,7 @@ SpMat::sync_cache() const } } } - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) { if(sync_state == 0) { @@ -6710,7 +6710,7 @@ SpMat::sync_csc() const sync_csc_simple(); } } - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) if(sync_state == 1) { const std::lock_guard lock(cache_mutex); diff --git a/include/armadillo_bits/arma_config.hpp b/include/armadillo_bits/arma_config.hpp index 452e5273..e7d45314 100644 --- a/include/armadillo_bits/arma_config.hpp +++ b/include/armadillo_bits/arma_config.hpp @@ -181,7 +181,7 @@ struct arma_config #endif - #if (!defined(ARMA_DONT_USE_STD_MUTEX)) + #if defined(ARMA_USE_STD_MUTEX) static constexpr bool std_mutex = true; #else static constexpr bool std_mutex = false; diff --git a/include/armadillo_bits/arma_forward.hpp b/include/armadillo_bits/arma_forward.hpp index 4b2f37f1..6fc95b95 100644 --- a/include/armadillo_bits/arma_forward.hpp +++ b/include/armadillo_bits/arma_forward.hpp @@ -280,7 +280,7 @@ struct state_type { #if defined(ARMA_USE_OPENMP) int state; - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) std::atomic state; #else int state; @@ -299,7 +299,7 @@ struct state_type #if defined(ARMA_USE_OPENMP) #pragma omp atomic read out = state; - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) out = state.load(); #else out = state; @@ -315,7 +315,7 @@ struct state_type #if defined(ARMA_USE_OPENMP) #pragma omp atomic write state = in_state; - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) state.store(in_state); #else state = in_state; diff --git a/include/armadillo_bits/arma_rng.hpp b/include/armadillo_bits/arma_rng.hpp index da1b4f7a..f1048810 100644 --- a/include/armadillo_bits/arma_rng.hpp +++ b/include/armadillo_bits/arma_rng.hpp @@ -74,7 +74,7 @@ #define ARMA_GUARD_PRODUCER #endif -#if (defined(ARMA_DONT_GUARD_PRODUCER) || defined(ARMA_DONT_USE_STD_MUTEX)) +#if (defined(ARMA_DONT_GUARD_PRODUCER) || (!defined(ARMA_USE_STD_MUTEX))) #undef ARMA_GUARD_PRODUCER #endif diff --git a/include/armadillo_bits/config.hpp b/include/armadillo_bits/config.hpp index c9475b4f..33632e9e 100644 --- a/include/armadillo_bits/config.hpp +++ b/include/armadillo_bits/config.hpp @@ -139,6 +139,11 @@ //// Note that ARMA_USE_OPENMP is automatically enabled when a compiler supporting OpenMP 3.1 is detected. #endif +#if !defined(ARMA_USE_STD_MUTEX) + #define ARMA_USE_STD_MUTEX +//// Comment out the above line to disable use of std::mutex +#endif + #if !defined(ARMA_64BIT_WORD) // #define ARMA_64BIT_WORD //// Uncomment the above line if you require matrices/vectors capable of holding more than 4 billion elements. @@ -282,17 +287,15 @@ #undef ARMA_USE_FORTRAN_HIDDEN_ARGS #endif -#if !defined(ARMA_DONT_USE_STD_MUTEX) - // #define ARMA_DONT_USE_STD_MUTEX - //// Uncomment the above line to disable use of std::mutex +#if defined(ARMA_DONT_USE_STD_MUTEX) + #undef ARMA_USE_STD_MUTEX #endif // for compatibility with earlier versions of Armadillo #if defined(ARMA_DONT_USE_CXX11_MUTEX) #pragma message ("WARNING: support for ARMA_DONT_USE_CXX11_MUTEX is deprecated and will be removed;") #pragma message ("WARNING: use ARMA_DONT_USE_STD_MUTEX instead") - #undef ARMA_DONT_USE_STD_MUTEX - #define ARMA_DONT_USE_STD_MUTEX + #undef ARMA_USE_STD_MUTEX #endif #if defined(ARMA_DONT_USE_OPENMP) diff --git a/include/armadillo_bits/config.hpp.cmake b/include/armadillo_bits/config.hpp.cmake index 31a230fa..60a3e77e 100644 --- a/include/armadillo_bits/config.hpp.cmake +++ b/include/armadillo_bits/config.hpp.cmake @@ -139,6 +139,11 @@ //// Note that ARMA_USE_OPENMP is automatically enabled when a compiler supporting OpenMP 3.1 is detected. #endif +#if !defined(ARMA_USE_STD_MUTEX) + #define ARMA_USE_STD_MUTEX +//// Comment out the above line to disable use of std::mutex +#endif + #if !defined(ARMA_64BIT_WORD) // #define ARMA_64BIT_WORD //// Uncomment the above line if you require matrices/vectors capable of holding more than 4 billion elements. @@ -282,17 +287,15 @@ #undef ARMA_USE_FORTRAN_HIDDEN_ARGS #endif -#if !defined(ARMA_DONT_USE_STD_MUTEX) - // #define ARMA_DONT_USE_STD_MUTEX - //// Uncomment the above line to disable use of std::mutex +#if defined(ARMA_DONT_USE_STD_MUTEX) + #undef ARMA_USE_STD_MUTEX #endif // for compatibility with earlier versions of Armadillo #if defined(ARMA_DONT_USE_CXX11_MUTEX) #pragma message ("WARNING: support for ARMA_DONT_USE_CXX11_MUTEX is deprecated and will be removed;") #pragma message ("WARNING: use ARMA_DONT_USE_STD_MUTEX instead") - #undef ARMA_DONT_USE_STD_MUTEX - #define ARMA_DONT_USE_STD_MUTEX + #undef ARMA_USE_STD_MUTEX #endif #if defined(ARMA_DONT_USE_OPENMP) diff --git a/include/armadillo_bits/fft_engine_fftw3.hpp b/include/armadillo_bits/fft_engine_fftw3.hpp index e5880c36..4945523f 100644 --- a/include/armadillo_bits/fft_engine_fftw3.hpp +++ b/include/armadillo_bits/fft_engine_fftw3.hpp @@ -82,7 +82,7 @@ class fft_engine_fftw3 fftw3_plan = fftw3::plan_dft_1d(N, X_work.memptr(), Y_work.memptr(), fftw3_sign, fftw3_flags); } } - #elif (!defined(ARMA_DONT_USE_STD_MUTEX)) + #elif defined(ARMA_USE_STD_MUTEX) { // NOTE: the static std::mutex approach is a "better-than-nothing" solution; // NOTE: the mutex declaration is only common across instances of the same fft_engine_fftw3 class type;