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:
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);