On 12/12/2017 12:03, cage wrote:
On Mon, Dec 11, 2017 at 03:56:49PM +0100, Stefano Simonucci wrote: ......
cioè il programma si comporta come se fosse parallelizzato a livello Open-MP
con un consumo medio di CPU superiore al 160%.Eppure io non ho messo nessuna
istruzione open-MP e l'ho compilato senza l'opzione -fopenmp.
Ma almeno va piu' veloce?? :-)
No! Purtroppo va più lento!!!!
Scherzi a parte puoi provare con ldd a vedere se e' cosi' (la libreria
dovrebbe essere collegata dinamicamente, almeno se ho capito bene
quanto scritto qui:
https://gcc.gnu.org/onlinedocs/gfortran/OpenMP.html)
Devi anche vedere come sono implementate le routine delle librerie
dietro le interfaccie, per esempio le openblas usano i thread. Anche
le ATLAS. Entrambe espongono le API delle BLAS.
https://stackoverflow.com/questions/30891296/are-the-lapack-routines-thread-safe/30893141#30893141
Non ho alcuna esperienza recente col fortran (o col calcolo se e' per
questo :-)), spero di essere stato utile comunque.
Ciao!
Uso da molto tempo le blas e non avevo mai visto questo comportamento,
però confesso di non conoscere come sono implementate. Sono comunque
riuscito a far andare un solo thread utilizzando
export OMP_NUM_THREADS=1
Grazie comunque. Proverò a vedere se questo strano comportamento si
mantiene anche quando non uso lapack e le blas.
La cosa più sorprendente però era che se avviavo due programmi
contemporaneamente il consumo di CPU di ciascuno dei due cresceva
rispetto al caso di avvio singolo.
Ciao a tutti
Stefano