From 7be0ba8cb18e130ee5c108bc0da2bdd651f71ec3 Mon Sep 17 00:00:00 2001 From: Weiqun Zhang Date: Tue, 18 Nov 2025 12:16:00 -0800 Subject: [PATCH] RNG on GPU: Assertion it's not in OMP parallel region RNG on GPU is not OpenMP thread safe. Thank @AlexanderSinn for pointing this out. --- Src/Base/AMReX_RandomEngine.H | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/Src/Base/AMReX_RandomEngine.H b/Src/Base/AMReX_RandomEngine.H index 6140898be79..6cf2b495dd8 100644 --- a/Src/Base/AMReX_RandomEngine.H +++ b/Src/Base/AMReX_RandomEngine.H @@ -4,6 +4,10 @@ #include #include +#ifdef AMREX_USE_OMP +# include +# include +#endif #if defined(AMREX_USE_HIP) #pragma clang diagnostic push @@ -32,8 +36,13 @@ namespace amrex extern sycl_rng_descr* rand_engine_descr; - AMREX_FORCE_INLINE - sycl_rng_descr* getRandEngineDescriptor () { return rand_engine_descr; } + inline + sycl_rng_descr* getRandEngineDescriptor () { +#ifdef AMREX_USE_OMP + AMREX_ALWAYS_ASSERT_WITH_MESSAGE(! omp_in_parallel(), "RNG on GPU is not OpenMP thread safe"); +#endif + return rand_engine_descr; + } struct RandomEngine { sycl_rng_engine* engine; @@ -52,8 +61,13 @@ namespace amrex extern randState_t* gpu_rand_state; - AMREX_FORCE_INLINE - randState_t* getRandState () { return gpu_rand_state; } + inline + randState_t* getRandState () { +#ifdef AMREX_USE_OMP + AMREX_ALWAYS_ASSERT_WITH_MESSAGE(! omp_in_parallel(), "RNG on GPU is not OpenMP thread safe"); +#endif + return gpu_rand_state; + } struct RandomEngine { randState_t* rand_state;