La mejor manera de sembrar mt19937_64 para simulaciones de Monte Carlo

Estoy trabajando en un programa que ejecuta la simulación de Monte Carlo; específicamente, estoy usando un algoritmo Metropolis. El programa necesita generar posiblemente miles de millones de números "aleatorios". Sé que el tornado Mersenne es muy popular para la simulación de Monte Carlo, pero me gustaría asegurarme de que estoy sembrando el generador de la mejor manera posible.

Actualmente estoy calculando una semilla de 32 bits usando el siguiente método:

mt19937_64 prng; //pseudo random number generator
unsigned long seed; //store seed so that every run can follow the same sequence
unsigned char seed_count; //to help keep seeds from repeating because of temporal proximity

unsigned long genSeed() {
    return (  static_cast<unsigned long>(time(NULL))      << 16 )
         | ( (static_cast<unsigned long>(clock()) & 0xFF) << 8  )
         | ( (static_cast<unsigned long>(seed_count++) & 0xFF) );
}

//...

seed = genSeed();
prng.seed(seed);

Tengo la sensación de que hay formas mucho mejores de asegurar nuevas semillas que no se repiten, y estoy bastante seguro de que mt19937_64 se puede sembrar con más de 32 bits. ¿Alguien tiene alguna sugerencia?

Respuestas a la pregunta(6)

Su respuesta a la pregunta