मैं समानांतर में एक सिमुलेशन के कई उदाहरण चलाना चाहते हैं के लिए अलग यादृच्छिक बीज के साथ बहु, लेकिन प्रत्येक सिमुलेशन अपनी स्वतंत्र डेटा सेट होने के साथ। इस प्रकारका उपयोग अजगर प्रत्येक प्रक्रिया
वर्तमान में मैं यह लागू:
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
जहां sim
, adatom1
और lattice
समारोह run
जो सिमुलेशन शुरू की के लिए पारित वस्तुओं रहे हैं।
हालांकि, मुझे हाल ही में पता चला है कि प्रत्येक बैच मैं एक साथ चलाता हूं (यानी, प्रत्येक ncpus
सिमुलेशन रन के कुल nrun
में से चलाता है) सटीक समान परिणाम देता है।
किसी को यहाँ इसे ठीक करने के प्रबुद्ध कर सकते हैं?
में पाया जा सकता कैसे आप परिणाम प्राप्त करते हैं? –
क्या इसमें यादृच्छिक संख्या शामिल है? आप बीज कैसे लगा रहे हैं? इन्हें अलग क्यों होना चाहिए? यदि आप दो बार एक ही प्रक्रिया चलाते हैं तो यह दो बार एक ही परिणाम उत्पन्न करना चाहिए। आपको क्यों लगता है कि वे अलग होना चाहिए? –
फ़ंक्शन 'रन' सिमुलेशन शुरू करता है और परिणाम देता है जो सभी परिणामों को समेकित करने के लिए 'आफ्टर' फ़ंक्शन को निर्देशित करता है। प्रत्येक सिमुलेशन में यादृच्छिक प्रारंभिक स्थितियां होती हैं, इसलिए मुझे अलग-अलग परिणाम होने की उम्मीद है। मैं एक बीज का उपयोग नहीं करता जो मुझे लगता है। मैं निम्नलिखित कोड का उपयोग करें: randshift = np.random.rand (क, ख) -0.5 * np.ones ((ए, बी)) –