Title: Outils d
1Outils daide àloptimisation scalairesur
Origin 2000v 2.0Guy MoebsGuy.Moebs_at_crihan.fr
2Plan de la formation
- 1. Architecture matérielle Origin2000
- 2. Environnement logiciel
- 3. Perfex
- 4. Speedshop
- 5. Load balancing MPI
31- Architecture matérielle O2000
- Architecture O2000 (64 procs)
41- Architecture matérielle O2000
- Sommet du cube constitué
- un routeur
- deux noeuds
- Routeur connecté à 4 routeurs voisins
- Noeud composé
- 2 processeurs R10000
- un commutateur HUB
- une mémoire partagée (1 Go)
51- Architecture matérielle O2000
- Le HUB
- est connecté aux deux processeurs du noeud,
- sert d'interface entrées/sorties et connexions
avec le reste des processeurs de la machine. - La mémoire
- est partagée entre les processeurs du noeud,
- est adressable par l'ensemble des processeurs de
la machine.
61- Architecture matérielle O2000
- Processeurs type R10000 (MIPS IV)
- une fréquence horloge de 195 MHz,
- une puissance crête/processeur de 390 Mflops,
- un transfert crête de données vers le cache
secondaire de 2.08 gbits/s, - deux espaces cache
- un cache primaire d'instructions de 32 Ko et de
données de 32Ko, - un cache secondaire de 4 Mo,
- une mémoire totale de 32 Go.
71- Architecture matérielle O2000
- Organisation de la mémoire
81- Architecture matérielle O2000
92- Environnement logiciel
- A. Compilateurs
- Déboguage,
- Optimisation,
- Groupes doptions et manpages utiles.
- B. Makefile
- C. Eléments de Fortran 90
- Déclarations,
- Allocation dynamique,
- Interface.
102- A. Compilateurs déboguage
- Options
- -O0 aucune optimisation,
- -g3 enrichir la table des symboles,
- -fullwarn recevoir tous les messages du
compilateurs (-woff pour filtrer), - -DEBUGtrap_uninitializedON mise à NaN des
variables non initialisées, - -DEBUGsubscript_checkON vérification des
indices des tableaux, - -DEBUGdiv_check3 vérification des divisions
et des overflows pour les entiers, - -DEBUGverbose_runtimeON numéros des lignes
source des erreurs. - Bibliothèques
- -lfpe bibliothèque de gestion des exceptions
flottantes - setenv TRAP_FPE
- ALLCOUNTUNDERFLOWZEROOVERFLTRACE(2),ABORT(2)
INVALIDTRACE(2),ABORT(2)
112- A. Compilateurs optimisation
- Procéder par étapes,
- Valider les résultats à chaque étape,
- Étapes
- -O0 résultats de référence,
- -O2 optimisations locales/globales fiables,
- -O3 -OPTIEEE_arithmetic1roundoff0
optimisations plus aggressives, - -O3 -OPTIEEE_arithmetic3roundoff3
optimisations très aggressives. - Utiliser les outils perfex, speedshop, workshop
pour étudier les performances après validation
des résultats. - Quelques règles
- respect la norme du langage,
- accès aux données de la même façon quelles sont
stockées, - utilisation de bibliothèques scientifiques
optimisées.
122- A. Compilateurs groupes doptions
- -IPA (inter procedural analysis) analyse
inter-procédurale - -LNO (loop nest optimizer) optimisation des
boucles imbriquées - -OPT (optimization options) précision sur les
calculs en flottants - -DEBUG déboguage
- Manpages
- F77, F90, cc, CC
- ipa, lno, opt, debug_group
- mp, pe_environ, sigfpe, handle_sigfpes
- Options
- -auto_use mpi_interface
- -flist, -col120, ...
132- B. Compilateurs Makefile
- Compilation faite par le compilateur,
- Outil make permet de gérer la compilation,
- Makefile fichier dinstructions pour la
commande make, - repose sur des targets, des règles de
compilation. - FC f90
- FFLAGS -n32 -r10000 -mips4 -O3
- LIBS -lmpi -lfastm
- OBJS bloc.o calcul.o erreur.o pmm.o main.o
- .o.f90
- ltTABgt(FC) (FFLAGS) lt -c
- All (OBJS)
- ltTABgt(FC) (LDFLAGS) (OBJS) -o (PROG) (LIBS)
142- C. Eléments de Fortran 90
- Déclaration des variables
- INTEGER, PARAMETER n 10
- INTEGER ierr 0
- REAL(8), DIMENSION (-nn, 01) a, b
- REAL(4), DIMENSION(), ALLOCATABLE z
- Allocation dynamique
- ALLOCATE ( z(n4m2), STATierr)
- IF ( ierr / 0 ) STOP ou IF ( ierr 0 )
THEN - DEALLOCATE ( z )
- Interface
- SUBROUTINE calcul (n,a,b,c)
- INTEGER, INTENT(IN) n
- REAL(8), INTENT(OUT) a
- REAL(8), INTENT(IN) b, c
153- perfex
- A. compteurs dévénement
- B. options
- C. statistiques
- D. application produit matriciel
163- A. perfex compteurs
- les processeurs R1k000 disposent de compteurs
dévènements pour suivre lactivité durant
lexécution. - quelques compteurs dévènements importants
- 7 quadwords written back from L2
- 9 L1 instruction cache misses
- 10 L2 instruction cache misses
- 21 graduated floating point instructions
- 22 quadwords written back from L1
- 23 TLB misses (TLB translation look-aside
buffer) - 25 L1 data cache misses
- 26 L2 data cache misses
- deux compteurs peuvent être suivis en même temps
- gt mesure précise de 2 compteurs
- gt mesure partielle puis extrapolation de tous
les compteurs (multiplexage)
173- B. perfex options
- Perfex -e e0 -e e1 -a -mp -y -x prog
args - e0, e1 identifiants dévènements qui doivent
appartenir à deux groupes distincts (0-15) et
(16-31) - -a multiplexage de tous les évènements
- -mp comptage pour chaque thread et pour
lensemble - -y estimation des temps et statistiques
- -x comptage des exceptions.
- perfex -a -x -y ./s.out
- perfex -a -x -y -mp mpirun -np 4 ./p.out
183- C. perfex statistiques
- Statistiques importantes
- Graduated instructions / cycle gt proche de 2
- Graduated floating point instructions / cycle
- Graduated loads stores / cycle
- Graduated loads stores / floating point
instructions - L1 Cache Line Reuse
- L2 Cache Line Reuse
- L1 Data Cache Hit Rate gt gt 0.90
- L2 Data Cache Hit Rate
- Time accessing memory / Total time
- L1--L2 bandwidth used (MB/s, average per
process) - Memory bandwidth used (MB/s, average per process)
- MFLOPS (average per process)
193- D. perfex application
- but
- Montrer les pertes de performances lorsque les
données sont hors des caches - principe
- Calcul dun produit matrice-matrice
- démarche
- 1) compilation -O2
- 2) étude des performances pour n tel que les 3
tableaux rentrent dans les caches L1, L2 ou la
mémoire - cache L1 32ko, cache L2 1Mo 4Mo, 8Mo (dépend
de larchitecture gt hinv) - 3 tableaux en double précision 3x8xnxn octets
- 3) étude des performances en modifiants lordre
des boucles - 4) compilation -O3
- 5) refaire les étapes 2) et 3).
203- D. perfex application
- analyse
- 1) compteurs dévènements
- évolution du classement dimportance selon la
valeur de n - 2) statistiques
- évolution des valeurs des quantités selon la
valeur de n - 3) comparaison des résultats en -O2 et -O3
213- D. perfex analyse compilation en -O2
- L1 (n 20), L2 (n 300) et MEM (n1000)
-
Based on 195 MHz IP27 -
MIPS R10000 CPU -
CPU revision 2.x -
Typical Minimum
Maximum - Event Counter Name
Counter Value Time (sec) Time (sec)
Time (sec)
- 0 Cycles.........................................
......... 20896529744 107.161691 107.161691
107.161691 - 16 Cycles.........................................
......... 20896529744 107.161691 107.161691
107.161691 - 25 Primary data cache misses......................
......... 157632 0.007283 0.002280
0.007283 - 26 Secondary data cache misses....................
......... 1312 0.000508 0.000332
0.000565 - 23 TLB misses.....................................
......... 16 0.000006 0.000006
0.000006 - 0 Cycles.........................................
......... 38046735392 195.111464 195.111464
195.111464 - 16 Cycles.........................................
......... 38046735392 195.111464 195.111464
195.111464 - 25 Primary data cache misses......................
......... 3499224576 161.682120 50.604171
161.682120 - 23 TLB misses.....................................
......... 5637952 1.968657 1.968657
1.968657 - 26 Secondary data cache misses....................
......... 413152 0.159964 0.104580
0.177973
223- D. perfex analyse compilation en -O3
- L1 (n 20), L2 (n 300) et MEM (n1000)
-
Based on 195 MHz IP27 -
MIPS R10000 CPU -
CPU revision 2.x -
Typical Minimum
Maximum - Event Counter Name
Counter Value Time (sec) Time (sec)
Time (sec)
- 0 Cycles.........................................
......... 9967721904 51.116523 51.116523
51.116523 - 16 Cycles.........................................
......... 9967721904 51.116523 51.116523
51.116523 - 25 Primary data cache misses......................
......... 102640 0.004742 0.001484
0.004742 - 26 Secondary data cache misses....................
......... 6736 0.002608 0.001705
0.002902 - 23 TLB misses.....................................
......... 16 0.000006 0.000006
0.000006 - 0 Cycles.........................................
......... 14893075584 76.374747 76.374747
76.374747 - 16 Cycles.........................................
......... 14893075584 76.374747 76.374747
76.374747 - 25 Primary data cache misses......................
......... 895811520 41.391086 12.954813
41.391086 - 23 TLB misses.....................................
......... 78112 0.027275 0.027275
0.027275 - 26 Secondary data cache misses....................
......... 40160 0.015549 0.010166
0.017300
233- D. perfex analyse compilation en -O2/-O3
- Statistics
L1 L2
MEM -
n 20 n 300
n 1000
- Graduated instructions/cycle......................
...................... 2.185076 1.710898
0.385768 - Graduated floating point instructions/cycle.......
...................... 0.383449 0.353419
0.046896 - Graduated loads stores/cycle....................
...................... 0.804269 0.712300
0.127843 - Graduated loads stores/floating point
instruction..................... 2.097459
2.015457 2.726113 - L1 Cache Line Reuse...............................
......................106617.081506 6.744774
1.093389 - L2 Cache Line Reuse...............................
...................... 119.146341 8468.581597
26.642523 - L1 Data Cache Hit Rate............................
...................... 0.999991 0.870881
0.522306 - L2 Data Cache Hit Rate............................
...................... 0.991677 0.999882
0.963824 - Time accessing memory/Total time..................
...................... 0.804341 1.551875
1.633047 - L1--L2 bandwidth used (MB/s, average per
process)....................... 0.079952
581.518247 381.962787 - Memory bandwidth used (MB/s, average per
process)....................... 0.078700
0.417081 56.276275 - MFLOPS (average per process)......................
...................... 74.772563 68.916666
9.144644 - Graduated instructions/cycle......................
...................... 1.835561 1.824490
1.692755 - Graduated floating point instructions/cycle.......
...................... 0.804350 0.906906
0.810151 - Graduated loads stores/cycle....................
...................... 0.559774 0.493832
0.441724
243- D. perfex commentaires
- Loption -O3 permet de conserver les données dans
le cache secondaire à laide du cache blocking. - Loption -flist permet dobtenir la traduction en
Fortran du code optimisé. - Loption -O3 active des groupes doption (LNO,
OPT,) qui fournissent des optimisations
supplémentaires - gain dun facteur supérieur à 15 ici.
254- speedshop
- A. ssrun expériences
- B. ssrun types dexpérience
- C. ssrun options
- D. prof analyse
- E. prof options
- F. application ADI
264- A. ssrun expériences
- ssrun est un outil de profilage
- - mesure effectuée durant lexécution du
programme, - - usage ne nécessite pas de compilation
particulière, - - appliqué à un programme compilé avec options
doptimisation. - 2 types dexpérience
- - échantillonnage statistique durant lexécution
du programme, - - comptage exact doccurrence dévènements.
- ssrun sapplique aux programmes séquentiel et
parallèle
274- B. ssrun type dexpérience
- léchantillonnage dépend dune base temporelle
- arrêt du programme toutes les 10 ou 1 ms,
incrément dun compteur associé à la ligne du
code exécutée (-fpcsampx) - arrêt du programme toutes les 3 ms, incrément
dun compteur associé à toutes les routines de la
pile dappels (-usertime). - le comptage est lié à un type dévénement
- arrêt du programme lors du débordement de
compteur dévènements, incrément dun compteur
associé à la ligne du code source (-hwc) - arrêt du programme lors dune exception
flottante, incrément dun compteur associé à
toutes les routines de la pile dappels (-fpe) - Comptage du temps idéal dexécution du code
(-ideal).
284- C. ssrun options
- ssrun -exp prog args
- exp type dexpériences
- prog application à analyser.
- création dun fichier binaire dinformations de
la forme - progname.expname.Dpid
- pid process id D lettre dont la
signification est - m processus master crée par ssrun
- p processus slave OpenMP ( crée par sproc() )
- f processus slave MPI ( crée par fork() )
- e processus slave PVM ( crée par exec() )
- s processus système.
294- D. prof analyse
- lecture du(/des) fichier(s) binaire(s) généré(s)
par ssrun - création dun fichier ascii après analyse
- fichier global pour lensemble des processus ou
fichier individuel
304- E. prof options
- prof -options progname.exp.name.Dpid
- options
- -heavy (-h) résultats affichés pour chaque
ligne par ordre décroissant de temps - -lines (-l) résultats affichés pour chaque
ligne par ordre du source - -only (-o) sub affichage pour la routine sub
uniquement - -gprof ajoute le temps inclusif pour
lexpérience -usertime - -q n tronque l affichage après n lignes ou
n .
314- F. application ADI
- but
- Montrer les pertes de performances et les
localiser. - principe
- Calcul de contributions dans un tableau 3D,
routines xsweep, ysweep et zsweep - Démarche
- 1) comparer les coûts théoriques des routines
avec -ideal - 2) comparer les coûts réels des
routines avec -pcsamp - 3) analyser les évènements avec perfex -a -y -x
- 4) affiner les valeurs des principaux compteurs
avec perfex -e e0 - 5) localiser les lignes du source responsables
avec ssrun -hwc - setenv SPEEDSHOP HWC_COUNTER_NUMBER compteur
- setenv SPEEDSHOP HWC_COUNTER_OVERFLOW valeur
324- F. application ADI
- résultats de ssrun -ideal par prof -lines
- Function list, in descending order by exclusive
ideal time - --------------------------------------------------
----------------------- - index excl.secs excl. cum.
cycles instructions calls function (dso
file, line) - 1 0.303 23.2 23.2
59080704 59506688 32768 xsweep (adi2
adi2.f90, 70) - 2 0.303 23.2 46.4
59080704 59506688 32768 ysweep (adi2
adi2.f90, 90) - 3 0.303 23.2 69.6
59080704 59506688 32768 zsweep (adi2
adi2.f90, 110) - 4 0.161 12.3 81.9
31457280 27262976 2097152 irand_
(libftn.so rand_.c, 62) - 5 0.140 10.7 92.6
27262976 35651584 2097152 rand_
(libftn.so rand_.c, 67) - 6 0.082 6.2 98.9
15915509 18606275 1 adi2 (adi2
adi2.f90, 1) - résultats de ssrun -pcsamp par prof -lines
- Function list, in descending order by time
- --------------------------------------------------
----------------------- - index secs cum. samples
function (dso file, line) - 1 6.360 78.1 78.1 636
zsweep (adi2 adi2.f90, 110) - 2 0.630 7.7 85.9 63
ysweep (adi2 adi2.f90, 90) - 3 0.610 7.5 93.4 61
xsweep (adi2 adi2.f90, 70)
334- F. application ADI
- résultats de perfex -a -y -x
-
Typical Minimum
Maximum - Event Counter Name
Counter Value Time (sec) Time (sec)
Time (sec)
- 0 Cycles.........................................
......... 1682480768 8.628107 8.628107
8.628107 - 16 Cycles.........................................
......... 1682480768 8.628107 8.628107
8.628107 - 26 Secondary data cache misses....................
......... 6573952 2.545299 1.664053
2.831856 - 23 TLB misses.....................................
......... 5787712 2.020950 2.020950
2.020950 - 7 Quadwords written back from scache.............
......... 52204928 1.713393 1.132445
1.713393 - 25 Primary data cache misses......................
......... 17305104 0.799585 0.250258
0.799585 - 22 Quadwords written back from primary data
cache.......... 31548640 0.622883
0.508014 0.719956 - 21 Graduated floating point instructions..........
......... 30801216 0.157955 0.078977
8.213658 - 9 Primary instruction cache misses...............
......... 15040 0.001390 0.000434
0.001390 - 10 Secondary instruction cache misses.............
......... 544 0.000211 0.000138
0.000234 - Statistics
- Graduated instructions/cycle......................
...................... 0.205890 - Graduated floating point instructions/cycle.......
...................... 0.018307 - Graduated loads stores/cycle....................
...................... 0.074188
344- F. application ADI
- résultats de perfex -e 23
- Summary for execution of ./adi2
- 0 Cycles.........................................
............. 1317308826 - 23 TLB misses.....................................
............. 5779532 - résultats de perfex -e 26
- Summary for execution of ./adi2
- 0 Cycles.........................................
............. 1320793392 - 26 Secondary data cache misses....................
............. 6913927 - exécution ssrun -hwc
- !/bin/csh
- setenv _SPEEDSHOP_HWC_COUNTER_NUMBER 23
- setenv _SPEEDSHOP_HWC_COOUNTER_OVERFLOW 2053
- ssrun -prof_hwc ./adi2
- setenv _SPEEDSHOP_HWC_COUNTER_NUMBER 26
- setenv _SPEEDSHOP_HWC_COUNTER_OVERFLOW 2053
354- F. application ADI
- résultats de ssrun -hwc (23) par prof -heavy
- --------------------------------------------------
----------------------- - Summary of perf. counter overflow PC sampling
data (prof_hwc)-- - 2816 Total samples
- TLB misses (23) Counter name
(number) - 2053 Counter overflow
value - 5781248 Total counts
- --------------------------------------------------
----------------------- - Function list, in descending order by counts
- --------------------------------------------------
----------------------- - index counts cum. samples
function (dso file, line) - 1 5781248 100.0 100.0 2816
zsweep (adi2 adi2.f90, 110) - 5781248 100.0 100.0 2816
TOTAL - --------------------------------------------------
----------------------- - Line list, in descending order by counts
- --------------------------------------------------
----------------------- - counts cum. samples function
(dso file, line) - 2915260 50.4 50.4 1420 zsweep
(adi2 adi2.f90, 120)
364- F. application ADI
- résultats de ssrun -hwc (26) par prof -heavy
- --------------------------------------------------
----------------------- - Summary of perf. counter overflow PC sampling
data (prof_hwc)-- - 3545 Total samples
- Secondary cache D misses (26) Counter name
(number) - 2053 Counter overflow
value - 7277885 Total counts
- --------------------------------------------------
----------------------- - Function list, in descending order by counts
- --------------------------------------------------
----------------------- - index counts cum. samples
function (dso file, line) - 1 6686621 91.9 91.9 3257
zsweep (adi2 adi2.f90, 110) - 2 244307 3.4 95.2 119
xsweep (adi2 adi2.f90, 70) - 3 236095 3.2 98.5 115
ysweep (adi2 adi2.f90, 90) - 4 108809 1.5 100.0 53
adi2 (adi2 adi2.f90, 1) - 2053 0.0 100.0 1
OTHER (includes excluded DSOs, rld, etc.) - 7277885 100.0 100.0 3545
TOTAL - --------------------------------------------------
----------------------- - Line list, in descending order by counts
374- F. application ADI
- Analyse
- gt problème de cache thrashing.
- - les adresses de stockage de données dans le
cache sont calculées par modulo à partir des
adresses mémoire - - taille du cache en 2p, dimensions des tableaux
en 2q - - écrasement des données dans les caches car
modulos identiques - Solution
- gt modifier les premières dimensions des tableaux
pour décaler les adresses de stockage dans les
caches. - integer, parameter ldx 129
- integer, parameter ldy 129
- integer, parameter ldz 128
- integer, parameter nx 128
- integer, parameter ny 128
- integer, parameter nz 128
- real(rp), dimension(ldx, ldy, ldz) data
384- F. application ADI
- démarche
- 6) analyser les évènements avec perfex -a -y -x
- 7) affiner les valeurs des principaux compteurs
avec perfex -e e0 - 8) localiser les lignes du source responsables
avec ssrun -hwc.
394- F. application ADI
- résultat de perfex -a -y -x
-
Typical Minimum
Maximum - Event Counter Name
Counter Value Time (sec) Time (sec)
Time (sec)
- 0 Cycles.........................................
......... 711044336 3.646381 3.646381
3.646381 - 16 Cycles.........................................
......... 711044336 3.646381 3.646381
3.646381 - 23 TLB misses.....................................
......... 5604048 1.956819 1.956819
1.956819 - 26 Secondary data cache misses....................
......... 1061616 0.411036 0.268725
0.457312 - 7 Quadwords written back from scache.............
......... 6004864 0.197083 0.130259
0.197083 - 25 Primary data cache misses......................
......... 4235360 0.195695 0.061250
0.195695 - 21 Graduated floating point instructions..........
......... 29959296 0.153637 0.076819
7.989146 - 22 Quadwords written back from primary data
cache.......... 6328832 0.124954
0.101910 0.144427 - 9 Primary instruction cache misses...............
......... 42816 0.003957 0.001236
0.003957 - 10 Secondary instruction cache misses.............
......... 896 0.000347 0.000227
0.000386 - Statistics
- Graduated instructions/cycle......................
...................... 0.456588 - Graduated floating point instructions/cycle.......
...................... 0.042134 - Graduated loads stores/cycle....................
...................... 0.155101
404- F. application ADI
- résultat de perfex -e 23
- Summary for execution of ./adi5
- 0 Cycles.........................................
............. 592594668 - 23 TLB misses.....................................
............. 5565894 - résultat de perfex -e 26
- Summary for execution of ./adi5
- 0 Cycles.........................................
............. 590387057 - 26 Secondary data cache misses....................
............. 895611 - résultat de ssrun -hwc (23) par prof -heavy
- --------------------------------------------------
----------------------- - Function list, in descending order by counts
- --------------------------------------------------
----------------------- - index counts cum. samples
function (dso file, line) - 1 5565683 100.0 100.0 2711
zsweep (adi5 adi5.f90, 110) - 2 2053 0.0 100.0 1
fake_adi (adi5 adi5.f90, 1) - --------------------------------------------------
----------------------- - Line list, in descending order by counts
- --------------------------------------------------
----------------------- - counts cum. samples function
(dso file, line)
414- F. application ADI
- Analyse
- gt problème de TLB thrashing.
- - chaque entrée dans cette table correspond à une
page mémoire adressée - - trop de pages différentes sont parcourues
- - la table est regénérée en permanence à cause
des boucles de calcul. - Solution
- - stocker le vecteur des données du calcul dans
un vecteur temporaire - - routine de copie
- do j 1, ny
- call copy(data(1,j,1),ldxldy,temp,n
x,nx,nz) - do i 1, nx
- call zsweep(temp(i,1),nx,nz)
- end do
- call copy(temp,nx,data(1,j,1),ldxld
y,nx,nz) - end do
424- F. application ADI
- démarche
- 9) analyser les évènements avec perfex -a -y -x.
434- F. application ADI
- résultat de perfex -a -y -x
-
Typical Minimum
Maximum - Event Counter Name
Counter Value Time (sec) Time (sec)
Time (sec)
- 0 Cycles.........................................
......... 473543376 2.428428 2.428428
2.428428 - 16 Cycles.........................................
......... 473543376 2.428428 2.428428
2.428428 - 25 Primary data cache misses......................
......... 13666112 0.631444 0.197633
0.631444 - 22 Quadwords written back from primary data
cache.......... 23456192 0.463109
0.377705 0.535282 - 26 Secondary data cache misses....................
......... 1168832 0.452548 0.295864
0.503497 - 7 Quadwords written back from scache.............
......... 7385600 0.242399 0.160211
0.242399 - 21 Graduated floating point instructions..........
......... 30300896 0.155389 0.077695
8.080239 - 23 TLB misses.....................................
......... 65264 0.022789 0.022789
0.022789 - 9 Primary instruction cache misses...............
......... 8832 0.000816 0.000255
0.000816 - 10 Secondary instruction cache misses.............
......... 768 0.000297 0.000194
0.000331 - Statistics
- Graduated instructions/cycle......................
...................... 0.583375 - Graduated floating point instructions/cycle.......
...................... 0.063988 - Graduated loads stores/cycle....................
...................... 0.247853
444- F. application commentaires
- La comparaison des temps ideal et réel montre une
différence importante un événement extérieur
survient - pertes des données dûes au cache thrashing et au
TLB thrashing - cache thrashing les dimensions des tableaux
multi-dimensionnels ne doivent pas être des
puissances de 2 - gt augmentation mémoire généralement légère,
- gt augmentation des performances significative
- TLB thrashing les copies dans des tableaux
temporaires peuvent résoudre les pertes de
performance - gt le compilateur ne sait pas le faire,
- gt cest du ressort du développeur.
455- load balancing MPI
- A. algorithme
- B. sous-domaines
- C. communications
- D. cvbuild
- E. cvmake
- F. portage
- G. ssaggregate
- H. application
- I. comparaison
- J. conclusions
465- A. load balancing MPI algorithme
- problème de Poisson, différences finies 2D
- méthode itérative de Jacobi
- schéma à 5 points classique
- u(i,j)(n1) 0.25 u(i1,j )(n) u(i-1,j
)(n) - u(i ,j1)(n) u(i
,j-1)(n) - - hhf(i,j)
- test darrêt sur la convergence ou nombre max
ditérations - le domaine initial est coupé en sous-domaines,
chaque processus calcule sur son sous-domaine - une couche de noeuds fictifs autour de chaque
sous-domaines, mises à jour par des
communications MPI.
475- B. load balancing MPI sous-domaines
- Topologie MPI mettre une grille de processus
sur la grille des sous-domaines.
485- C. load balancing MPI communications
- couche de noeuds fictifs (épaisseur 1 noeud) sur
les 4 cotés.
495- D. load balancing MPI cvbuild
- outil danalyse de dépendance pour la
compilation - interrogations sur les targets menu query.
505- E. load balancing MPI cvmake
- outil daide à la compilation
- navigation dans le source, derreur en erreur.
515- F. load balancing MPI portage
- progresser dans les niveaux doptimisation du
programme en comparant les résultats avec des
valeurs de référence (code séquentiel puis code
parallèle sans optimisation). - démarche
- -O0 -g3 -DEBUG pas doptimisation,
- -O2 optimisations fiables,
- -O3 -OPTIEEE_arithmetic1roundoff0
optimisations aggressives, - -O3 -OPTIEEE_arithmetic3roundoff3
optimisations très aggressives. - valider chaque étape.
525- G. load balancing MPI ssaggregate
- outil pour fusionner des fichiers de données
issus du même type dexpérience. - syntaxe
- ssaggregate -e expfile1 expfile2 -o
outputfile - analyse faite par prof
- ssrun sur un code MPI
- mpirun -np n ssrun -fpcsampx prog args
- ssrun sur un code OpenMP
- setenv OMP _NUM _THREADS n
- ssrun -fpcsampx prog args
535- H. load balancing MPI application
- but
- étudier le load balancing des calculs sur les
processus. - principe
- profilage du code MPI par ssrun.
- démarche
- 1) compiler le code séquentiel et le code
parallèle - 2) lancer les codes sous ssrun -fpcsampx sur le
même cas test - 3) comparer les résultats entre les processus
MPI - 4) faire la fusion des fichiers et comparer avec
le code séquentiel - 5) faire varier la taille du maillage et le
nombre de processus (2p).
545- I. load balancing MPI indications
- comparer les temps des différents processus pour
une même routine et leur somme avec le temps
séquentiel - comparer le temps du processus le plus long avec
le temps séquentiel pour évaluer laccélération
et lefficacité - accélération A(p) T(1) / T(p)
- efficacité E(p) A(p) / p
- regarder le temps passé en communications par
rapport au temps total overhead MPI
555- I. load balancing MPI ntx 200
- -------------------------------------------
- ntx 200 p0 p1 2p 1p
- -------------------------------------------
- calcul 7.87 11.02 18.89 24.04
- -------------------------------------------
- erreur 6.10 2.04 8.14 13.55
A(2) 37.70 / 18.88 1.99 - -------------------------------------------
E(2) 100 - total 18.88 18.88 37.70 37.68
- -------------------------------------------
- --------------------------------------------
--------------- - ntx 200 p0 p1 p2 p3
4p 1p - --------------------------------------------
--------------- - calcul 4.31 4.18 3.76 4.86
17.11 24.04 - --------------------------------------------
--------------- - erreur 1.83 2.24 3.00 3.02
10.09 13.55 A(4) 3.37 - --------------------------------------------
--------------- E(4) 84 - total 11.13 11.15 11.16 11.16
44.67 37.68 - --------------------------------------------
--------------- - --------------------------------------------
--------------------------------------------
---
565- I. load balancing MPI ntx 400
- -------------------------------------------
- ntx 400 p0 p1 2p 1p
- -------------------------------------------
- calcul 40.38 41.12 81.50 164.47
- -------------------------------------------
- erreur 20.87 21.43 42.30 129.91
A(2) 4.05 - -------------------------------------------
E52) 202 - total 71.66 71.71 143.39 290.54
- -------------------------------------------
- --------------------------------------------
--------------- - ntx 400 p0 p1 p2 p3
4p 1p - --------------------------------------------
--------------- - calcul 19.15 23.76 19.58 20.62
83.11 164.47 - --------------------------------------------
--------------- - erreur 9.78 11.67 8.95 9.37
39.77 129.91 A(4) 6.95 - --------------------------------------------
--------------- E(4) 125 - total 41.81 41.78 41.81 41.78
167.23 290.54 - --------------------------------------------
--------------- - --------------------------------------------
--------------------------------------------
---
575- I. load balancing MPI ntx 800
- -------------------------------------------
- ntx 800 p0 p1 2p 1p
- -------------------------------------------
- calcul 329.30 328.56 657.86 674.17
- -------------------------------------------
- erreur 257.46 256.44 513.90 496.73
A(2) 1.94 - -------------------------------------------
E(2) 97 - total 604.66 604.67 1209.35 1171.25
- -------------------------------------------
- --------------------------------------------
--------------- - ntx 800 p0 p1 p2 p3
4p 1p - --------------------------------------------
--------------- - calcul 84.96 85.27 84.02 90.33
344.58 674.17 - --------------------------------------------
--------------- - erreur 46.69 46.74 46.34 47.04
186.81 496.73 A(4) 7.95 - --------------------------------------------
--------------- E(4) 199 - total 147.36 147.36 147.36 147.39
589.50 1171.25 - --------------------------------------------
--------------- - --------------------------------------------
--------------------------------------------
---
585- I. load balancing MPI conclusions
- nombre de processus doit être adapté à la masse
de calcul - temps de calcul significatif pour que les
imprécisions des mesures soient petites (charge
de la machine !) - temps parallèle inférieur au temps séquentiel car
plusieurs processus signifient aussi - plusieurs cache L2 donc volume de cache
multiplié - données distribuées sur plusieurs mémoires
locales, donc accès plus courts - overhead des communications à suivre.