blog2geek.com
chuckAvatar de chuck

2 billets | Profil

Recherche Google

ce blog tous
Derniers billets Connexion
Archives

developpement-web

18/04/2007

Calcul matricielle: la bibliotèque BLAS

Aujourd'hui, de plus en plus d'applications web offrent des services basés sur des systèmes biotechnologiques (tel l'authentification faciale ou la reconnaissance vocale...). Ces problèmes font généralement intervenir un grand nombre de paramètres ainsi que de lourds calculs mathématiques. Ainsi offrir de tels outils requiert une puissance de calcul non négligeable. Il est évident que ces calculs ne peuvent être réaliser côté client sur une petite machine dans un langage interprété tel que javascript. Il faut donc effectuer les calculs dans un langage bas niveau sur un serveur dédié avec lequel communiquera l'application web.

Parmis ces calculs récurrents, je citerais les calculs matriciels effectueés ici généralement sur des matrices de grandes tailles pouvant atteindre une taille de plus d'un giga octet. Je soulignerais le fait, qu'effectuer ces calculs sois-même, même dans un langage de bas niveau, n'est pas une bonne idée. Même si l'algorithme de calcul est très simple (tel une multiplication matricielle) votre implémentation ne sera jamais efficace. En effet, la taille des matrices pouvant être très élevée vous risquerez de parcourir la mémoire dans tous les sens, impliquant chargement et déchargement de pages mémoires et donc pertes de performance sans compter le fait qu'un accès RAM c'est lent. Il existe pour celà des outils, tel la bibliothèque BLAS qui offre des fonctionnalités optimisées pour de tels opérations grâce à une mise en cache intelligente. BLAS est une bibliothèque de calcul matricielle écrite en Fortran. Il existe bien entendu une interface C et C++. La biibliotèque uBLAS est une interface C++ templétée de BLAS développée par Boost. Pour ma part je la trouve moins performante que CBLAS surement pour un problème d'abstraction de méthode due au C++. Je vous recommanderais donc la version C: CBLAS.

Dans un premier temps vous serez peut être surpris par les noms imbitables des fonctions ainsi que de leur grand nombre d'arguments, mais on s'y habitue vite, surtout quand on vois les perfromances obtenues. BLAS est divisée en 3 niveaux de fonctionalités. Le premier est celui du calcul vectorielle, le deuxième celui du calcul vecteur vs matrice, et le dernier celui du calcul matrice vs matrice. Il gère aussi plusieurs types de données, flotants simple et double précision ainsi que nombres complexes. Vous remarquerez vite que le nombre de fonctionnalités de BLAS est assez limité, et vous aurez donc peut-être envi d'élargir le champs des possibilités, pas de problème il y a la bibliothèque LAPACK. LAPACK est une extension de BLAS construite sur la même politique, offrant une très vaste étendue de fonctionnalité: inversion de matrice, résolution de système matricielle, recherche de vecteurs propres...

Alors amusez vous bien!

Pour toute question n'hésitez pas.