Gå til innhold

MPI, få *hele* cout's


Anbefalte innlegg

Hei!

 

Jeg driver å debugger et program skrevet for MPI (cluster/multithreading-bibliotek), og legger derfor inn en del cout's.

 

Problemet er at utskriftene fra disse kommer hulter-i-bulter, som vist under:

[kyrre@sinus taskB]$ mpiexec.py -n 3 ./vmc_atoms 2 2 3 5 1.0 100 10000 out.dat
Running with configuration:
Number of particles			 = 2
Charge of nucleus (Z)		   = 2
Dimensionality				  = 3
Maximum variational parameters  = 5
Step length (MC)				= 1
Thermalization cutoff		   = 100
Number of MC integration cycles = 10000
Writing to file with name (in .): out.dat
Slave 1 awaiting orders...
Slave 1 got alpha = 1
Master warming up...
Sending alpha = 1 to slave 1
Now pending: 1 numprocs = 3
Sending alpha = 1.1 to slave 2
Now pending: 2 numprocs = 3
slavesearcher >= numprocs; This *REALLY* should not happen!
Slave 2 awaiting orders...
Slave 2 got alpha = 1.1
rank 0 in job 95  sinus_59205   caused collective abort of all ranks
 exit status of rank 0: return code 2

 

Noen som har en idé på hvordan man kan få cout's til å bli "atomiske"?

Endret av kyrsjo
Lenke til kommentar
Videoannonse
Annonse

Ok, den der var litt "heldig", var trøtt når jeg posta. Mente mer slik som dette:

kyrrens@motstand ~/computational/oblig4/code/taskB $ mpiexec -n 24 nice -n 19 ./vmc_atoms 2 2 3 20 1.0 10000000 100000 out-detailed-test2.dat 1.6 0.01
Running with configuration:
Number of particles			 = 2
Charge of nucleus (Z)		   = 2
Dimensionality				  = 3
Maximum variational parameters  = 20
Step length (MC)				= 1
Thermalization cutoff		   = 10000000
Number of MC integration cycles = 100000
Writing to file with name (in .): out-detailed-test2.dat
Starting with alpha			 = 1.6
alpha steplength				= 0.01
Master warming up...
Sending alpha = Slave Slave Slave 5 awaiting orders...
4 awaiting orders...Slave 
3 awaiting orders...1.62 awaiting orders...

Slave 6 to slave  awaiting orders...
Slave 7 awaiting orders...1
Now pending: 1
numprocs = 24
Sending alpha = 1.61 to slave 2
Now pending: 2Slave  numprocs = 242 got alpha = 1.61

Sending alpha = 1.62 to slave 3
Now pending: 3Slave  numprocs = 3 got alpha = 1.62
24
Sending alpha = 1.63 to slave 4
Now pending: 4Slave 4 numprocs =  got alpha = 1.6324

Sending alpha = 1.64 to slave 5
Now pending: 5 numprocs = Slave 5 got alpha = 1.64
24
Sending alpha = 1.65 to slave 6
Now pending: Slave 6 numprocs = 6 got alpha = 1.65
24
Sending alpha = 1.66 to slave 7
Now pending: 7 numprocs = 24
Slave Sending alpha = 1.677 got alpha =  to slave 1.66
8
Now pending: 8 numprocs = 24
Sending alpha = 1.68 to slave 9
Now pending: 9 numprocs = 24
Sending alpha = 1.69 to slave 10
Now pending: 10 numprocs = 24
Sending alpha = 1.7 to slave 11
Slave Slave Slave Slave 12 awaiting orders...
Slave 14 awaiting orders...
13 awaiting orders...
9 awaiting orders...
Slave Slave 9 got alpha = Slave 8 awaiting orders...1.68
15
11 awaiting orders...
Slave 10 awaiting orders... awaiting orders...Slave 8
Slave 
got alpha = 1.67
10 got alpha = 1.69Now pending: 
11Slave 11 got alpha = 1.7
numprocs = 24
Sending alpha = 1.71 to slave 12
Slave 1 awaiting orders...
Slave 1 got alpha = 1.6
Now pending: 12Slave 12 got alpha =  numprocs = 1.71
24
Sending alpha = 1.72 to slave 13
Now pending: 13 numprocs = Slave 2413 got alpha = 1.72

Sending alpha = 1.73 to slave 14
Now pending: 14 numprocs = Slave 2414 got alpha = 1.73

Sending alpha = 1.74 to slave 15
Now pending: 15 numprocs = 24
Slave Sending alpha = 151.75 got alpha = 1.74
to slave 16
Now pending: 16 numprocs = 24
Sending alpha = 1.76 to slave 17
Now pending: 17 numprocs = 24
Sending alpha = 1.77 to slave 18
Now pending: 18 numprocs = 24
Sending alpha = 1.78 to slave 19
Now pending: 19 numprocs = 24
Sending alpha = 1.79 to slave 20
Now pending: 20 numprocs = 24
Slave 17 awaiting orders...Slave 
Slave 1716 awaiting orders...Slave  got alpha = 
Slave 161.76
Slave 18 awaiting orders...
Slave 18 got alpha = Slave Slave 19 got alpha = 1.75
1.77
Slave 22 awaiting orders...
2120 awaiting orders... awaiting orders...
Slave 
awaiting orders...
Slave 19 got alpha = Slave 20231.78 got alpha =  awaiting orders...
1.79

Lenke til kommentar

Det tror jeg ikke er mulig sånn helt uten videre siden dette er separate prosesser som skriver til skjerm. Den enkleste løsningen, slik jeg ser det, er å ha en egen prosess som skriver ut debugginsinfo for de andre prosessene. Infoen sendes da fra kjørende prosesser og skrives til skjerm fortløpende av debuggingsprosessen.

 

Ørjan...

Lenke til kommentar
Det tror jeg ikke er mulig sånn helt uten videre siden dette er separate prosesser som skriver til skjerm. Den enkleste løsningen, slik jeg ser det, er å ha en egen prosess som skriver ut debugginsinfo for de andre prosessene. Infoen sendes da fra kjørende prosesser og skrives til skjerm fortløpende av debuggingsprosessen.

 

Ørjan...

 

Alt for å gjøre programmet ytterligere komplisert :)

 

Har droppa noen utskrifter og funnet bugg'en(e), så nå gir jeg egentlig litt f. i at det ser stygt ut under kjøring. Svarene kommer jo (omsider... 5*10^7+5*10^5 montecarlopunkter pr. integral, 20 integraler... :) )

Lenke til kommentar
Du kan jo alltids bruke printf for å få en linje pr thread

 

For da sendes hele greia som "en streng"? Har lagt merke til at de ofte deles mellom "<<"'ene...

 

Stemmmer, hver << er jo en funksjon så CPUen bytter litt mellom de vil jeg tro. En annen måte som gjør strengt tatt det samme, men lar deg bruke cout

er å legge mutexer rundt hver av cout linjene, det gir vel også en bedre forklaring på hvorfor du gjør som du gjør også når andre leser koden din.

Endret av Giddion
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...