Babel : la bibliothèque MASS

Description

Les bibliothèques MASS (IBM) fournissent des versions optimisées pour le processeur PowerPC 450D d'un sous-ensemble de fonctions intrinsèques Fortran : exp, log, sin, cos, tan, sqrt, x**y, 1/x, … Ces fonctions sacrifient un peu la précision au profit de la performance par rapport aux fonctions de la bibliothèque mathématique standard libm.a. Il y a 2 types de fonctions disponibles pour chaque opération, correspondant à 2 bibliothèques différentes et à 2 appels différents :

  • des fonctions travaillant sur des scalaires situées dans la bibliothèque MASS dont le nom respecte le nom générique Fortran,
  • des fonctions travaillant sur des vecteurs situées dans la bibliothèque MASSV dont le nom est préfixé par v ou vs.

Utilisation

Bibliothèques Édition de liens Mode numérique nom des sous-programmes Mode d'adressage
MASS $ module load mass $ mpixlf90_r call_mass.f générique nom générique F90 32
MASSV $ module load mass $ mpixlf90_r call_massv.f I4S4 VS… 32
I4D8 V…

Le mode numérique n'est pas précisé pour la bibliothèque MASS car elle redéfinit les fonctions génériques intrinsèques Fortran 90 qui acceptent aussi bien des réels simple précision que double précision.

Remarques

  • Il suffit de refaire l'édition de liens sans changer le code, en ayant au préalable charger le module mass, pour bénéficier des fonctions intrinsèques mathématiques optimisées.
  • Les interfaces Fortran 90 ainsi que les fichiers d'include C/C++ sont disponibles dans /opt/ibmcmp/xlmass/bg/4.4/include (répertoire automatiquement pris en compte à la compilation avec module).

Exemple avec MASS

$ cat mass.f90

include 'mass.include'
...
integer, parameter :: n=10000
real(kind=8), dimension(n) :: t1,t2
...
! rec est l'équivalent de t2(:) = 1./t1(:)
call rec(t2, t1, n)
...
! Appel exp de MASS equivalent a la fonction intrinseque F90
t2 = exp(t1)
...

$ module load mass
$ mpixlf90_r mass.f90

Exemple avec MASSV

$ cat massv.f90

include 'massv.include'
...
integer, parameter :: n=10000
real(kind=8), dimension(n) :: t1,t2
...
! vrec est l'equivalent de t2(:) = 1./t1(:)
call vrec(t2, t1, n)
...
! vexp est l'equivalent de t2(:) = exp(t1(:))
call vexp(t2, t1, n)
...

$ module load mass
$ mpixlf90_r massv.f90

Documentation

La documentation IBM : voir dans la colonne de droite Technical details.