Mi scuso in anticipo che non ho il giusto gergo per descrivere il mio problema e che probabilmente non ho dato abbastanza informazioni.GCC 4.5/Ubuntu 11.04 è un codice auto-threading?
Ho eseguito il mio codice MPI sotto gcc 4.4 e OpenMPI/MPICH2 per mesi senza alcun problema su una varietà di piattaforme. Recentemente ho aggiornato un set di server e il mio desktop su Ubuntu 11.04 (eseguendo gcc 4.5 ora) e ho eseguito un 8 task su un nodo con 8 processori. In genere vedo quasi il 100% di utilizzo della CPU utente, e ora vedo solo il 60% di CPU utente e oltre il 30% di CPU di sistema. Questo porta a un notevole rallentamento del mio codice quando viene eseguito in questo modo.
Indagando ulteriormente, ho semplicemente eseguito un lavoro seriale e ho notato che il processo riportava 150 +% di tempo di CPU in uso. Quindi, il mio programma era basato sul multithreading su molti processori. Ho verificato questo esplicitamente usando 'ps -eLF' e osservando i carichi per processore.
Questa è una cosa incredibilmente negativa e inefficiente per il mio codice MPI, e non ho idea da dove provenga. Nulla è cambiato se non il passaggio a Ubuntu 11.04 e gcc 4.5. Ho verificato questo rispetto alle diverse versioni di OpenMPI.
Ho spostato anche i binari tra due macchine compatibili binarie. Se compilo su un'altra macchina (ubuntu 10.10/gcc 4.4) ed eseguo lì, va tutto bene. Spostando il file binario sulla macchina Ubuntu 11.04, lo stesso binario inizia a eseguire il threading stesso.
Vale la pena notare che ho disabilitato esplicitamente tutte le ottimizzazioni (-O0), pensando che il mio valore predefinito (-O3) potrebbe includere qualcosa che non ho capito in 4.5. Ottengo il comportamento identico indipendentemente dal livello di ottimizzazione.
Per favore fatemi sapere quali ulteriori informazioni che posso fornire per determinare la fonte di questo problema.
* INFORMAZIONI AGGIUNTIVE *
Risultati di LDD in risposta alla richiesta. Semplicemente, è OpenMPI, libconfig, e ScaLAPACK, insieme con roba gcc di serie:
linux-vdso.so.1 => (0x00007ffffd95d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2bd206a000)
libconfig.so.8 => /usr/lib/libconfig.so.8 (0x00007f2bd1e60000)
libscalapack-openmpi.so.1 => /usr/lib/libscalapack-openmpi.so.1 (0x00007f2bd151c000)
libmpi.so.0 => /usr/lib/libmpi.so.0 (0x00007f2bd126b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2bd0ed7000)
libblacsCinit-openmpi.so.1 => /usr/lib/libblacsCinit-openmpi.so.1 (0x00007f2bd0cd4000)
libblacs-openmpi.so.1 => /usr/lib/libblacs-openmpi.so.1 (0x00007f2bd0aa4000)
libblas.so.3gf => /usr/lib/libblas.so.3gf (0x00007f2bd022f000)
liblapack.so.3gf => /usr/lib/liblapack.so.3gf (0x00007f2bcf639000)
libmpi_f77.so.0 => /usr/lib/libmpi_f77.so.0 (0x00007f2bcf406000)
libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3 (0x00007f2bcf122000)
libopen-rte.so.0 => /usr/lib/libopen-rte.so.0 (0x00007f2bceed3000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2bcecb5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2bd22fc000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f2bcea9f000)
libopen-pal.so.0 => /usr/lib/libopen-pal.so.0 (0x00007f2bce847000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2bce643000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f2bce43f000)
Tutto il meglio.
Quali librerie sono usate dal tuo codice? Puoi mostrare i risultati di 'ldd your_programme' per la versione seriale? – osgx
sicuro. è MPI, libconfig e scalapack. ho aggiunto i risultati di ldd al post principale. ognuna di queste librerie ho usato dagli archivi apt e le ho costruite su entrambe le piattaforme (le buone piattaforme 4.4 e bad 4.5). nulla sembra cambiare nulla riguardo al comportamento. – coastal
mi sono reso conto che i risultati erano per la versione parallela. non ho mai costruito una versione seriale, l'MPI è cotto in forno. Noterai molte altre cose lì, quello che mi riguarda di più è libpthread anche se il mio makefile non collega mai esplicitamente quella libreria, quindi dovrei vedere dove vengono le cose del genere . tuttavia, se prendo questo binario, compilato in gcc 4.5 con queste librerie, ed eseguito su un'installazione ubuntu 10.10 compatibile con i binari, tutto si comporta come previsto. tutto con le stesse librerie. è veramente strano – coastal