Deseo ejecutar varias instancias de una simulación en paralelo, pero con cada simulación que tenga su propio conjunto de datos independiente.Uso del multiprocesamiento de Python con diferente semilla aleatoria para cada proceso
Actualmente implemento de la siguiente manera:
P = mp.Pool(ncpus) # Generate pool of workers
for j in range(nrun): # Generate processes
sim = MDF.Simulation(tstep, temp, time, writeout, boundaryxy, boundaryz, relax, insert, lat,savetemp)
lattice = MDF.Lattice(tstep, temp, time, writeout, boundaryxy, boundaryz, relax, insert, lat, kb, ks, kbs, a, p, q, massL, randinit, initvel, parangle,scaletemp,savetemp)
adatom1 = MDF.Adatom(tstep, temp, time, writeout, boundaryxy, boundaryz, relax, insert, lat, ra, massa, amorse, bmorse, r0, z0, name, lattice, samplerate,savetemp)
P.apply_async(run,(j,sim,lattice,adatom1),callback=After) # run simulation and ISF analysis in each process
P.close()
P.join() # start processes
donde sim
, adatom1
y lattice
objetos son pasados a la función run
que inicia la simulación.
Sin embargo, recientemente descubrí que cada lote que ejecuto simultáneamente (es decir, cada ncpus
se queda sin el total de nrun
de ejecuciones de simulaciones) da exactamente los mismos resultados.
¿Puede alguien aquí aclarar cómo solucionar esto?
¿Cómo se obtiene el resultado? –
¿Esto implica números aleatorios? ¿Cómo estás poniendo las semillas? ¿Por qué deberían ser diferentes? Si ejecuta el mismo proceso dos veces, se supone que debe producir el mismo resultado dos veces. ¿Por qué crees que deberían ser diferentes? –
La función 'ejecutar' inicia la simulación y devuelve los resultados a los que se dirige la función 'Después' para consolidar todos los resultados. Cada simulación tiene condiciones iniciales aleatorias, por lo que espero tener resultados diferentes. No uso una semilla, creo. Utilizo el siguiente código: randshift = np.random.rand (a, b) -0.5 * np.ones ((a, b)) –