| 1 |
|
|---|
| 2 | Performances classes tableaux en C++ et expression templates
|
|---|
| 3 | ------------------------------------------------------------
|
|---|
| 4 | <<<< Mise a jour mesures avec SOPHYA V=1.960 - 10 Juin 2006
|
|---|
| 5 | Compile sur asc> soit avec -O -g soit -fast (ascfast)
|
|---|
| 6 |
|
|---|
| 7 | <<<< Comparaison/resultats du 23/04/2003 >>>>
|
|---|
| 8 |
|
|---|
| 9 | A/ Performances globales / en particulier acces aux elements
|
|---|
| 10 | B/ Apport des ET (Expression Templates) (JET)
|
|---|
| 11 | C/ Comparaison avec le code fortran (f77) et le BLAS
|
|---|
| 12 | D/ Les matrices SimpleMatrix<T> (fichiers smtx.h .cc)
|
|---|
| 13 | sont codes en utilisant les NDataBlock<T> de SOPHYA
|
|---|
| 14 | et les operations passent directement par les
|
|---|
| 15 | operations definies sur les NDataBlock
|
|---|
| 16 | E/ Comparaison avec tableaux de SOPHYA (TMatrix<r_8>)
|
|---|
| 17 |
|
|---|
| 18 | F/ Liste d'operations
|
|---|
| 19 | 1- (note ElAcc) Remplissage de tableau avec acces aux elements de type
|
|---|
| 20 | Matrix mx(nrow, ncol)
|
|---|
| 21 | mx(i,j) = expression (i, j, ...)
|
|---|
| 22 |
|
|---|
| 23 | ElAcc C++, surcharge d'operateur (i,j)
|
|---|
| 24 | ElAcc fortran: tableaux natif fortran
|
|---|
| 25 |
|
|---|
| 26 | 2- Operation de type (note CMAdd), c1,c2,c3 trois constantes
|
|---|
| 27 | mx = mx1*c1 + mx2*c2 + mx3*c3
|
|---|
| 28 |
|
|---|
| 29 |
|
|---|
| 30 | *** Boucle 50 fois sur Tableaux 1000x500 ***
|
|---|
| 31 |
|
|---|
| 32 |
|
|---|
| 33 | Linux:
|
|---|
| 34 | ======
|
|---|
| 35 | Programme fortran , compile avec g77 -O3
|
|---|
| 36 | Programme C++, compile avec -O3, SOPHYA avec flags habituels (-g -O ?)
|
|---|
| 37 | >> eros3> uname -a
|
|---|
| 38 | >> Linux eros3 2.4.18 #10 SMP Mon Dec 16 12:45:16 CET 2002 i686 unknown
|
|---|
| 39 | >> Intel(R) Xeon(TM) CPU 2.40GHz
|
|---|
| 40 |
|
|---|
| 41 | Programmes: lx_fmtx , lx_tjet / Commandes:
|
|---|
| 42 | csh> time lx_fmtx
|
|---|
| 43 | csh> time lx_tjet 50 1000 500
|
|---|
| 44 |
|
|---|
| 45 |
|
|---|
| 46 | Tru64/OSF:
|
|---|
| 47 | ==========
|
|---|
| 48 | BLAS optimise de Compaq(/DEC -> HP) -lcxml
|
|---|
| 49 | Programmes compile avec -O3 -> osfO3_fmtx osfO3_tjet
|
|---|
| 50 | -arch host -fat -> ascfast_fmtx ascfast_tjet
|
|---|
| 51 | fortran avec -O5 -> osfO5_fmtx
|
|---|
| 52 |
|
|---|
| 53 | >> asc.lal.in2p3.fr> uname -a
|
|---|
| 54 | >> OSF1 asc.lal.in2p3.fr V5.1 2650 alpha
|
|---|
| 55 | >> ES47 Chip Alpha EV7 @ 1 GHz
|
|---|
| 56 |
|
|---|
| 57 |
|
|---|
| 58 | ====================================================
|
|---|
| 59 | Temps CPU en secondes
|
|---|
| 60 | ====================================================
|
|---|
| 61 |
|
|---|
| 62 |
|
|---|
| 63 | <ElAcc>:
|
|---|
| 64 | ElAcc_1 : fortran, acces natif tableaux 2-D
|
|---|
| 65 | C/C++, pointeur double * p = new double[size]; acces p[i]
|
|---|
| 66 | tjet(31)
|
|---|
| 67 | ElAcc_2 : Classe SimpleMatrix<T> / surcharge d'operateur tjet(1)
|
|---|
| 68 | ElAcc_3 : Classe SOPHYA::TMatrix<T> / surcharge d'operateur tjet(21)
|
|---|
| 69 |
|
|---|
| 70 | ------------------------------------------------------------
|
|---|
| 71 | ElAcc_1 ElAcc_2 ElAcc_3
|
|---|
| 72 | ------------------------------------------------------------
|
|---|
| 73 | lx_fmtx: 1.59
|
|---|
| 74 | lx_tjet: 0.92 0.84 0.9
|
|---|
| 75 | ............................................................
|
|---|
| 76 | osfO3_fmtx: 3.31
|
|---|
| 77 | osfO5_fmtx: 0.46
|
|---|
| 78 | ascfast_fmtx: 3.21
|
|---|
| 79 | ............................................................
|
|---|
| 80 | osfO3_tjet: 1.0 1.06 1.03
|
|---|
| 81 | ascfast_tjet: 0.66 0.73 0.70
|
|---|
| 82 | ------------------------------------------------------------
|
|---|
| 83 | Decembre 2003 - SOPHYA compile avec les options d'optimisation
|
|---|
| 84 | et debug = "-fast -g3" , ainsi que le programme tjet sur asc
|
|---|
| 85 | ............................................................
|
|---|
| 86 | ascfast_tjet: 0.55 0.63 0.60
|
|---|
| 87 | ------------------------------------------------------------
|
|---|
| 88 | Juin 2006 - SOPHYA compile avec les options standard
|
|---|
| 89 | -O -g1 asc_tjet et avec -fast ascfast_tjet
|
|---|
| 90 | asc_tjet: 0.98 1.2 1.28
|
|---|
| 91 | ascfast_tjet: 0.57 0.63 0.60
|
|---|
| 92 | ............................................................
|
|---|
| 93 | Juin 2006 : pour le f77 et f90 (fmtx.f f90mtx.f90) - il n'y
|
|---|
| 94 | pas de difference entre le temps avec -O et -fast
|
|---|
| 95 | asc_fmtx: 3.5
|
|---|
| 96 | asc_f90mtx: 0.7
|
|---|
| 97 | ............................................................
|
|---|
| 98 | Juin 2006 : sur ccali avec icc et ifort
|
|---|
| 99 | Compile avec option par defaut -O
|
|---|
| 100 | ali_tjet: 0.81 0.88 0.96
|
|---|
| 101 | ali_fmtx: 1.27
|
|---|
| 102 | ali_f90mtx: 1.29
|
|---|
| 103 | ------------------------------------------------------------
|
|---|
| 104 |
|
|---|
| 105 | <CMAdd>
|
|---|
| 106 | CMAdd_1 : fortran, boucle + acces natif tableaux 2-D
|
|---|
| 107 | C/C++, pointeur double * p = new double[size]; boucle p[i] = q[i] ....
|
|---|
| 108 | tjet(32)
|
|---|
| 109 | CMAdd_2 : fortran / appel BLAS (copy/ CstMult/ VecAdd)
|
|---|
| 110 | CMAdd_3 : C++/SimpleMatrix<T>::MultCst() / AddElt() tjet(2)
|
|---|
| 111 | CMAdd_4 : C++/JET : SimpleMatrix<T>:: operator overload with Exp. Templates tjet(3)
|
|---|
| 112 | CMAdd_5 : SOPHYA::TMatrix<T>::MultCst() / AddElt() tjet(22)
|
|---|
| 113 | CMAdd_6 : SOPHYA::TMatrix<T>::operator overlaod tjet(23)
|
|---|
| 114 | CMAdd_5, CMAdd_6 : mx = mx1*c1 + mx2*c2 + mx3*c3
|
|---|
| 115 |
|
|---|
| 116 | Note Nov 2003 : J'ai echange ci-dessous _4 et _5 - Je pense qu'il
|
|---|
| 117 | y avait une ereur et _5 _6 correspondent aux resultats avec les
|
|---|
| 118 | SOPHYA::TMatrix<T> dans les tableaux ci-dessous.
|
|---|
| 119 |
|
|---|
| 120 | --------------------------------------------------------------------------
|
|---|
| 121 | CMAdd_1 CMAdd_2 CMAdd_3 CMAdd_4 CMAdd_5 CMAdd_6
|
|---|
| 122 | --------------------------------------------------------------------------
|
|---|
| 123 | lx_fmtx: 2.58 1.11
|
|---|
| 124 | lx_tjet: 0.62 2.26 0.52 2.22 4.04
|
|---|
| 125 | ..........................................................................
|
|---|
| 126 | osfO3_fmtx: 4.31 0.63
|
|---|
| 127 | osfO5_fmtx: 0.26 0.71
|
|---|
| 128 | ascfast_fmtx: 4.13 0.63
|
|---|
| 129 | ..........................................................................
|
|---|
| 130 | osfO3_tjet: 0.65 1.48 1.36 3.08 3.53
|
|---|
| 131 | ascfast_tjet: 1.06 1.91 1.84 3.81 3.83
|
|---|
| 132 | --------------------------------------------------------------------------
|
|---|
| 133 | Decembre 2003 - SOPHYA compile avec les options d'optimisation
|
|---|
| 134 | et debug = "-fast -g3" , ainsi que le programme tjet sur asc
|
|---|
| 135 | ascfast_tjet: 0.72 1.05 1.42 2.55 2.52
|
|---|
| 136 | --------------------------------------------------------------------------
|
|---|
| 137 | --------------------------------------------------------------------------
|
|---|
| 138 | Juin 2006 - SOPHYA compile avec les options standard
|
|---|
| 139 | -O -g1 asc_tjet et avec -fast ascfast_tjet
|
|---|
| 140 | asc_tjet: 0.7 1.52 1.83 2.13 2.47
|
|---|
| 141 | ascfast_tjet: 0.75 1.04 1.4 1.31 1.51
|
|---|
| 142 | .........................................................................
|
|---|
| 143 | Juin 2006 : pour le f77 et f90 (fmtx.f f90mtx.f90) - il n'y
|
|---|
| 144 | pas de difference entre le temps avec -O et -fast
|
|---|
| 145 | asc_fmtx: 4.4 0.68
|
|---|
| 146 | asc_f90mtx: 0.26
|
|---|
| 147 | .........................................................................
|
|---|
| 148 | Juin 2006 : sur ccali avec icc et ifort
|
|---|
| 149 | Compile avec option par defaut -O
|
|---|
| 150 | ali_tjet: 0.66 2.8 0.65 1.91 2.9
|
|---|
| 151 | ali_fmtx: 1.37 0.79
|
|---|
| 152 | ali_f90mtx: 0.36
|
|---|
| 153 | --------------------------------------------------------------------------
|
|---|
| 154 |
|
|---|
| 155 |
|
|---|
| 156 | Notes:
|
|---|
| 157 | 1/ performances f77 -O5 doivent etre reverifie: l'optimiseur fortran
|
|---|
| 158 | (/f90) fait des optimisations sauvages dans certains cas, en virant
|
|---|
| 159 | les boucles que l'on veut tester. En effet, suivant le niveau d'optimisation,
|
|---|
| 160 | le fortran de DEC/Compaq (/HP) arrive a faire tendre le temps de calcul
|
|---|
| 161 | vers zero dans certains cas, independant de la taille des tableaux !
|
|---|
| 162 | Note de Juin 2006: f90 est effectivement tres efficace pour effectuer
|
|---|
| 163 | les operations sur tableaux natifs - verification sur OSF / f90
|
|---|
| 164 | et Linux/ifort (compilo Intel)
|
|---|
| 165 |
|
|---|
| 166 | 2/ l'optimisation -arch host -fast (code d'execution rapide adapte a
|
|---|
| 167 | l'architecture du processeur de la machine hote) n'arrive pas a
|
|---|
| 168 | ameliorer les performances - Cela est peut-etre imputable a
|
|---|
| 169 | la librairie SOPHYA, compile avec -g -O , pour proc alpha generique.
|
|---|
| 170 | Note de Juin2006: En compilant SOPHYA aussi avec -fast, on gagne,
|
|---|
| 171 | voir ci-dessus.
|
|---|
| 172 |
|
|---|
| 173 | 3) Decembre 2003 - Resultats sur asc (OSF1-cxx , flag -fast)
|
|---|
| 174 | Je pense que la difference de performances tableaux SOPHYA
|
|---|
| 175 | et SimpleMatrix<T> peuvent s'expliquer par le codage de
|
|---|
| 176 | la boucle d'operations ds NDataBlock<T> utilisee ds
|
|---|
| 177 | SimpleMatrix<T> :
|
|---|
| 178 | while (p<pe) *p++ -= *pa++; (ndatablock.cc)
|
|---|
| 179 | compare a une boucle for(i=;i<;i+=) utilisee dans
|
|---|
| 180 | TArray<T> (fichier tarray.cc) -
|
|---|
| 181 | Hypothese a verifier
|
|---|
| 182 | Juin 2006 : les optimisations des operations sur tableaux (Juil04
|
|---|
| 183 | et Avr06) ont apparemment remedie a ce probleme.
|
|---|
| 184 |
|
|---|