|
@@ -25,25 +25,32 @@ extern "C"
|
|
|
{
|
|
|
#endif
|
|
|
|
|
|
+#ifdef STARPU_SIMGRID
|
|
|
+/* In simgrid mode, force using seed 0 by default to get reproducible behavior by default */
|
|
|
+#define starpu_seed(seed) starpu_get_env_number_default("STARPU_RAND_SEED", 0)
|
|
|
+#else
|
|
|
+#define starpu_seed(seed) starpu_get_env_number_default("STARPU_RAND_SEED", (seed))
|
|
|
+#endif
|
|
|
+
|
|
|
#ifdef STARPU_USE_DRAND48
|
|
|
-# define starpu_srand48(seed) srand48(seed)
|
|
|
+# define starpu_srand48(seed) srand48(starpu_seed(seed))
|
|
|
# define starpu_drand48() drand48()
|
|
|
# define starpu_erand48(xsubi) erand48(xsubi)
|
|
|
# ifdef STARPU_USE_ERAND48_R
|
|
|
typedef struct drand48_data starpu_drand48_data;
|
|
|
-# define starpu_srand48_r(seed, buffer) srand48_r(seed, buffer)
|
|
|
+# define starpu_srand48_r(seed, buffer) srand48_r(starpu_seed(seed), buffer)
|
|
|
# define starpu_erand48_r(xsubi, buffer, result) erand48_r(xsubi, buffer, result)
|
|
|
#else
|
|
|
typedef int starpu_drand48_data;
|
|
|
-# define starpu_srand48_r(seed, buffer) srand48(seed)
|
|
|
+# define starpu_srand48_r(seed, buffer) srand48(starpu_seed(seed))
|
|
|
# define starpu_erand48_r(xsubi, buffer, result) do {*(result) = erand48(xsubi); } while (0)
|
|
|
# endif
|
|
|
#else
|
|
|
typedef int starpu_drand48_data;
|
|
|
-# define starpu_srand48(seed) srand(seed)
|
|
|
+# define starpu_srand48(seed) srand(starpu_seed(seed))
|
|
|
# define starpu_drand48() (double)(rand()) / RAND_MAX
|
|
|
# define starpu_erand48(xsubi) starpu_drand48()
|
|
|
-# define starpu_srand48_r(seed, buffer) srand((unsigned int)seed)
|
|
|
+# define starpu_srand48_r(seed, buffer) srand(starpu_seed(seed))
|
|
|
# define starpu_erand48_r(xsubi, buffer, result) do {*(result) = ((double)(rand()) / RAND_MAX);} while (0)
|
|
|
#endif
|
|
|
|