kyrsjo Skrevet 29. oktober 2007 Del Skrevet 29. oktober 2007 (endret) 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 29. oktober 2007 av kyrsjo Lenke til kommentar
Giddion Skrevet 30. oktober 2007 Del Skrevet 30. oktober 2007 Jeg ser ikke at det er hulter i bulter på samme linje, er det det? Hvis de er det så bruk mutexer eller lignende Hvis ikke det er kaos på samme linje så er ikke jeg sikker på hva du mener med atomisk. Lenke til kommentar
kyrsjo Skrevet 31. oktober 2007 Forfatter Del Skrevet 31. oktober 2007 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
Orjanp Skrevet 1. november 2007 Del Skrevet 1. november 2007 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
kyrsjo Skrevet 1. november 2007 Forfatter Del Skrevet 1. november 2007 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
Giddion Skrevet 1. november 2007 Del Skrevet 1. november 2007 (endret) Du kan jo alltids bruke printf for å få en linje pr thread Endret 1. november 2007 av Giddion Lenke til kommentar
kyrsjo Skrevet 1. november 2007 Forfatter Del Skrevet 1. november 2007 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... Lenke til kommentar
Giddion Skrevet 2. november 2007 Del Skrevet 2. november 2007 (endret) 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 2. november 2007 av Giddion Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå