-
Notifications
You must be signed in to change notification settings - Fork 6
Open
Description
$ mpirun ./main 5 its/0.xml | grep -i GSL
[GSL Random Number Generator] generator type: mt19937
[GSL Random Number Generator] seed = 1515443941
[GSL Random Number Generator] first value = 4052102787
[GSL Random Number Generator] generator type: mt19937
[GSL Random Number Generator] seed = 1515443941
[GSL Random Number Generator] first value = 4052102787
[GSL Random Number Generator] generator type: mt19937
[GSL Random Number Generator] seed = 1515443941
[GSL Random Number Generator] first value = 4052102787
[GSL Random Number Generator] generator type: mt19937
[GSL Random Number Generator] seed = 1515443941
[GSL Random Number Generator] first value = 4052102787
(using xparser commit ef57674)
Do people think it makes sense to have independent RNG streams per MPI rank?
If so, how about instead of the following (from the xparser-generated main.c):
gsl_seed = gsl_rng_default_seed;
gsl_seed = (unsigned long int) FLAME_environment_variable_GSL_RNG_SEED;
if(gsl_seed == 0) gsl_seed = gsl_rng_default_seed;
if(gsl_seed == 0) gsl_seed = (unsigned long int)time(NULL);
gsl_rng_set(FLAME_GSL_RNG, gsl_seed);having something like
masterSeed = gsl_rng_default_seed;
masterSeed = (unsigned long int) FLAME_environment_variable_GSL_RNG_SEED;
if(gsl_seed == 0) {
masterSeed = gsl_rng_default_seed;
if(gsl_seed == 0) {
masterSeed = (unsigned long int)time(NULL);
}
#ifdef MPI_VERSION
/* Determine a rank-specific seed */
int rank;
unsigned int rankSeed;
err = MPI_Comm_rank(MPI_COMM_WORLD, &rank);
rankSeed = masterSeed + (unsigned int) rank
gsl_rng_set(FLAME_GSL_RNG, rankSeed);
#else
gsl_rng_set(FLAME_GSL_RNG, masterSeed);
#endifI would stick this the above in start_simulation() in the C source file containing my transition functions but FLAME_GSL_RNG is not in scope there.
Metadata
Metadata
Assignees
Labels
No labels