Bonjour,
j'ai utilisé la commande FORALL et la COMMANDE DO avec ou sans OPEM MP et j'ai obtenu
certains résultats sur le temps d'execution que j'aimerai vous partager car j'ai quelques
points d'interrogation ...
===========================================================
Matos et logiciels utilisés
===========================================================
Microsoft Windows XP Professional x64 Edition (version 2003) Service Pack 2
double Intel Xeon E5540 2.53GHz 24 Go (2x4 coeurs)
Hyperthreading déactivé (8 coeurs).
Cygwin 1.7.5
MINGWIN GCC pour windows 64Bits (pour visibilité de la mémoire > 3.2 Go)
gfortran -v
target x86_64-w64-mingw32.
Thread model win32
GCC version 4.4.5 20100513 (prerelease) [svn/rev.159365 - mingw-w64/oz].
===========================================================
Programe faisant des calculs sur plusieurs tableaux ( :,:,: ) occupant environ 13 Go
===========================================================
===========================================================
Sans Openmp ..........................sans opt..............................-O3
===========================================================
Triple DO...............................2min 21 s.........................1min 5 s...........1 core utilisé
ForALL(x=,y=,z=)............................31 s..............................12 s..........1 core utilisé
===========================================================
gfortran -lm -O3 non.f95 -o non.exe
===========================================================
===========================================================
Avec Openmp ..........................sans opt..............................-O3
===========================================================
Triple DO......................................... 25 s .............................15 s..........8 cores utilisés
FORALL(x=,y=,z=) ............................1m9 s............................ 12 s..........1 core utilisé
===========================================================
gfortran -lm -fopenmp -O3 non.f95 -o non.exe
===========================================================
!$OMP PARALLEL DO PRIVATE(x,y,z) SHARED(...) ! Pour (DO x=) (DO y=) DO(z=)
!$OMP PARALLEL WORKSHARE ! pour FORALL(x=,y=,z=)
===========================================================
Je constate que la commande FORALL est plus performante même sur 1 core. Par ailleurs,
je ne comprends pas pourquoi elle n'utilise qu'1 seul core. Est dû au fait qu'elle soit
déjà parallel (parcours dans n'importe quel ordre choisi par le processeur) ?
Est-ce que je n'ai pas omis une commande de compil ?
Bref je n'ai pas tout compris :-)
Ma question est la suivante : est-ce la fonction FORALL peut être parrallelisable
sur plusieurs cores avec OPENMP? si oui avec quelle version de Gfortran et quelle
version d'openmp ?
Merci d'avance.
Stéphane.
Partager