
Performances classes tableaux en C++ et expression templates
------------------------------------------------------------

<<<< Comparaison/resultats du 23/04/2003  >>>>

  A/ Performances globales / en particulier acces aux elements
  B/ Apport des ET (Expression Templates)  (JET)
  C/ Comparaison avec le code fortran (f77) et le BLAS
  D/ Comparaison avec tableaux de SOPHYA (TMatrix<r_8>)

  E/ Liste d'operations 
     1- (note ElAcc) Remplissage de tableau avec acces aux elements de type
     Matrix mx(nrow, ncol)
     mx(i,j) = expression (i, j, ...)
 
     ElAcc C++, surcharge d'operateur (i,j)
     ElAcc fortran: tableaux natif fortran
    
     2- Operation de type (note CMAdd), c1,c2,c3 trois constantes 
     mx = mx1*c1 + mx2*c2 + mx3*c3


     *** Boucle 50 fois sur Tableaux 1000x500  *** 
  

Linux:
======
Programme fortran , compile avec g77 -O3
Programme C++, compile avec -O3, SOPHYA avec flags habituels (-g -O ?)
>> eros3> uname -a
>> Linux eros3 2.4.18 #10 SMP Mon Dec 16 12:45:16 CET 2002 i686 unknown
>> Intel(R) Xeon(TM) CPU 2.40GHz

Programmes: lx_fmtx , lx_tjet / Commandes: 
csh> time lx_fmtx
csh> time lx_tjet 50 1000 500


Tru64/OSF:
==========
BLAS optimise de Compaq(/DEC -> HP) -lcxml 
Programmes compile avec -O3             -> osfO3_fmtx osfO3_tjet 
                        -arch host -fat -> ascfast_fmtx ascfast_tjet
           fortran avec -O5             -> osfO5_fmtx

>> asc.lal.in2p3.fr> uname -a
>> OSF1 asc.lal.in2p3.fr V5.1 2650 alpha
>> ES47 Chip Alpha EV7 @ 1 GHz 


====================================================
              Temps CPU en secondes
====================================================


<ElAcc>: 
ElAcc_1 : fortran, acces natif tableaux 2-D
          C/C++, pointeur double * p = new double[size]; acces p[i]
ElAcc_2 : Classe SimpleMatrix<T> / surcharge d'operateur
ElAcc_3 : Classe SOPHYA::TMatrix<T> / surcharge d'operateur 

------------------------------------------------------------
                 ElAcc_1    ElAcc_2    ElAcc_3
------------------------------------------------------------
lx_fmtx:          1.59 
lx_tjet:          0.92       0.84       0.9
............................................................
osfO3_fmtx:       3.31
osfO5_fmtx:       0.46
ascfast_fmtx:     3.21
............................................................
osfO3_tjet:       1.0        1.06       1.03
ascfast_tjet:     0.66       0.73       0.70
------------------------------------------------------------


<CMAdd> 
CMAdd_1 : fortran, boucle + acces natif tableaux 2-D
          C/C++, pointeur double * p = new double[size]; boucle p[i] = q[i] ....
CMAdd_2 : fortran / appel BLAS (copy/ CstMult/ VecAdd)
CMAdd_3 : C++/SimpleMatrix<T>::MultCst() / AddElt()
CMAdd_4 : SOPHYA::TMatrix<T>::MultCst() / AddElt()
CMAdd_5 : C++/JET : SimpleMatrix<T>:: operator overload with Exp. Templates
CMAdd_6 :  SOPHYA::TMatrix<T>::operator overlaod
           CMAdd_5, CMAdd_6 : mx = mx1*c1 + mx2*c2 + mx3*c3

--------------------------------------------------------------------------
                CMAdd_1   CMAdd_2   CMAdd_3   CMAdd_4   CMAdd_5   CMAdd_6 
--------------------------------------------------------------------------
lx_fmtx:         2.58      1.11
lx_tjet:         0.62                2.26      0.52       2.22      4.04
..........................................................................
osfO3_fmtx:      4.31      0.63
osfO5_fmtx:      0.26      0.71
ascfast_fmtx:    4.13      0.63
..........................................................................
osfO3_tjet:      0.65                1.48      1.36       3.08      3.53            
ascfast_tjet:    1.06                1.91      1.84       3.81      3.83
--------------------------------------------------------------------------


Notes: 
1/ performances f77 -O5 doivent etre reverifie: l'optimiseur fortran 
(/f90) fait des optimisations sauvages dans certains cas, en virant 
les boucles que l'on veut tester. En effet, suivant le niveau d'optimisation,
le fortran de DEC/Compaq (/HP) arrive a faire tendre le temps de calcul 
vers zero dans certains cas, independant de la taille des tableaux !

2/ l'optimisation -arch host -fast (code d'execution rapide adapte a 
l'architecture du processeur de la machine hote) n'arrive pas a 
ameliorer les performances - Cela est peut-etre imputable a 
la librairie SOPHYA, compile avec -g -O , pour proc alpha generique.
