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. 

Publié dans software | Laisser un commentaire

Les joies du développement web

 Depuis quelque temps, j'entend dire par ci par là que le développement web c'est simple, rapide et que ça rapporte du pognon. En gros, un bon rapport gain/investissement. Alors je me suis dit pourquoi pas moi?

 J'ai alors fouillé les petites anonces du web. Après des heures de recherches, et à ma grande surprise, je n'ai trouvé que des propositions aux intitulés surprenants: développement PHP/MySQL, ASP.NET, Java-J2EE, Ruby, Ajax… Qu'est ce que ce charabia signifie-t-il? Alors je me suis renseigné un peu autour de moi. On me parle de langages interprétés, des byte-codes, que des langages semblant patologiques. J'avais eu une formation de geek, assembleur, C, C++, des vrais solutions qui poutrent! Je suis donc allé chercher des tutoriels sur la toile du web. Je me suis alors trouvé face à une quantité de choses qui m'étaient inconnues. Il me fallait me séparer de mes anciens prérequis. Cette séparation fut très difficile: fini les bits, les octets, les pointeurs, je déprimais. Cette dépression fut très difficile, j'était complèetement désorienté. Mais après le soutient de professionnels et une bonne psychothérapie, je me suis remis sur pied.

 J'ai alors appri l'HTML, le JavaScript, le CSS… Un nombre fulgurant de notions compliquées. Ah, j'aimais le temps de mon enfance, de ma naïveté où développer se limitait à recoder strlen! Après plusieur longs mois d'auto-formation, j'était enfin callé sur le sujet. Je maitrisait toutes les technologies, toutes les subtilités du développement web. J'était alors enfin prêt pour passer en mode production. Je suis alors retourné fouiller les petites anonces du web.

 Cette fois pas de soucis, je maîtrise! Je vois développement web Joomla/Php/MySql alors je prends. Il s'agit de travailler pour une société d'aide aux affaires familliales. Parmis leurs services proposés, ils offrent une plateforme d'aide au divorce sur laquelle on peut trouver de nombreuse informations, conseils de professionnels dont des coachs, avocats … J'avais à réaliser plusieurs petites missions. Au départ tout vas bien, lorsqu'une nouvelle mission s'offra à moi: le référencement.

 Le référencement je n'y connaissait rien. Ce n'était pas pour moi de la technique à proprement dit. Mais bon, maintenant que je maîtrisait les techno web, je me suis dit pourquoi pas? Référencer un site comme divorce.fr ce n'est pas mince affaire. En effet, un grand nombre de sites commerciaux sur le sujet sont déjà installés sur la toile, et occupent le top du classement. A mon arrivé le site était positionné en 400ième position environ sur google! Mon but être premier sur les mots clés: divorce, séparation et dépacs. Ce problème est considéré comme 75% difficile par les outils de référencement. J'était alors dans de beaux draps.

 Première étape, revoir le contenu, ou plutôt mettre du contenu. Ecrire ce n'était pas trop ma tasse de thé, moi le code ça va, la littérature pas trop. Alors j'ai passé un temps incalculable à améliorer, enrichir les textes, revoir les balises HTML, faire les normalisations W3C… Quel travail barbant! Puis une fois que la page d'accueil est à peu près correcte, il faut revoir l'architecture du site, la structure des liens internes et puis c'est autour des liens externes. Là, catastrophe, une 10aine de petits sites pointaient vers divorce, dont la majorité étaient hébergés sur le même serveur, pas cool. Il m'a donc fallut m'inscrire sur différents annuaires. Là encore, ce n'est pas chose facile, il faut sélectionner avec soin les annuaires sur lesquels s'inscrire. Avoir un bon pagerank c'est pas évident.

 Finalement, après mes premiers pas en développement web, puis en référencement. Je repense à mes illusions de départ, rapide et facile! Je n'y crois plus maintenant, après toutes ces déceptions, je crois qu'il est temps de divorcer avec le monde du développement web!

Publié dans software | Laisser un commentaire