star-4v_s

An invariant property of diffuse random walks
git clone git://git.meso-star.fr/star-4v_s.git
Log | Files | Refs | README | LICENSE

commit 7c07e619f204552a8df0551a49f1b7817a196047
parent 5cf7afb9eb229070d564830d6f9e32553b996d0f
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Tue, 29 Mar 2016 16:59:31 +0200

Fix build when openMP is not used

Diffstat:
Msrc/s4vs.c | 31+++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/src/s4vs.c b/src/s4vs.c @@ -147,12 +147,18 @@ realization(struct ssp_rng* rng, struct context* ctx) } } /* accumulate results */ +#ifdef _OPENMP #pragma omp atomic update ctx->sum += sum; #pragma omp atomic update ctx->sum2 += sum * sum; #pragma omp atomic update ctx->nfailures += nfailures; +#else + ctx->sum += sum; + ctx->sum2 += sum * sum; + ctx->nfailures += nfailures; +#endif } static res_T @@ -165,9 +171,10 @@ compute_4v_s(struct s3d_scene* scene, const size_t max_steps, const double ks) double length, var, sig; float S, V, expected; struct ssp_rng* rng; +#ifdef _OPENMP struct ssp_rng_proxy* proxy; +#endif unsigned i; - size_t nb_t, me; res_T res = RES_OK; ASSERT(max_steps > 0 && ks > 0); @@ -199,25 +206,18 @@ compute_4v_s(struct s3d_scene* scene, const size_t max_steps, const double ks) ctx.sum = 0; ctx.sum2 = 0; - /* be prepared to OpenMP absence */ - nb_t = 1; - me = 0; - time_current(&begin); -#pragma omp parallel private(me, rng) +#ifdef _OPENMP +#pragma omp parallel private(rng) { + size_t me = (size_t)omp_get_thread_num(); /* create a RNG proxy and a derived RNG by thread */ -#ifdef _OPENMP - me = (size_t)omp_get_thread_num(); -#endif #pragma omp single { - nb_t = (size_t)omp_get_num_threads(); + size_t nb_t = (size_t)omp_get_num_threads(); SSP(rng_proxy_create(NULL, &ssp_rng_threefry, nb_t, &proxy)); } - -#pragma omp barrier SSP(rng_proxy_create_rng(proxy, me, &rng)); #pragma omp for @@ -225,6 +225,13 @@ compute_4v_s(struct s3d_scene* scene, const size_t max_steps, const double ks) realization(rng, &ctx); } } +#else + /* single-threaded execution: create a single RNG */ + SSP(rng_create(NULL, &ssp_rng_threefry, &rng)); + for (i = 0; i < max_steps; i++) { + realization(rng, &ctx); + } +#endif time_current(&end); time_sub(&elapsed, &end, &begin);