Bonjour tout le monde,
Je suis un nouveau sur le forum. J'aimerais savoir s'il existe des librairies "calcul matriciel" pour le langage C/C++ c'est à dire "inverse d'une matrice", "produit matriciel",...
Merci.
Bonjour tout le monde,
Je suis un nouveau sur le forum. J'aimerais savoir s'il existe des librairies "calcul matriciel" pour le langage C/C++ c'est à dire "inverse d'une matrice", "produit matriciel",...
Merci.
Personne n'a une idée sur le sujetEnvoyé par bassabo
MTL, Blitz++, boost.uBlas, ...
Ayant un peu touché aux deux dernières, je ne peux que te les conseiller.
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
La plus rapide de toutes semble être ATLAS (Automatically Tuned Linear Algebra Software).
Elle utilise les instructions SSE,SSE2, elle optimise la mémoire cache.
http://math-atlas.sourceforge.net/
Malheureusement c'est que du C
Donc je ne pense pas qu'elle soit plus rapide que MTL, Blitz++ et les autres en C++ qui permettent de supprimer les temporaires et de considérer uen matrice comme un type comme un autre. Pour les instructions SSE et autres, en spécifiant l'architecture d'arrivée + des matrices statiques - taille connue à la compilation -, le compilo devrait pouvoir les utiliser.
Le compilo n'optimisera jamais ces bibliothèques autant qu'ATLAS.
Je connais particulièrement bien les algorithmes utilisés par ATLAS. Je reconnais que je ne connais pas bien Blitz++, MTL, Pooma et Co, mais la programmation générique a malheureusement ici des limites.
La gestion des instructions SSE pour ces bibliothèque reste encore à faire (à ma connaissance) et leurs algorithmes n'optimisent pas la mémoire cache.
Supprimer les temporaires, (je suppose que ça correspond à la "lazy calculation") est très utile dans certains cas. Mais pour le calcul matriciel, la plupart du temps on veut calculer la matrice complète. L'interface BLAS permet déjà pas mal de combinaison.
Je ne cherche pas à défendre ATLAS dont je n'aime pas l'interface BLAS en C. Ca ne sera jamais aussi pratique que des bibliothèques génériques.
Si tu veux faire un test, je veux bien te compiler un programme pour la multiplication de matrices, disons 1024x1024, pour float, double et complexes, et te donner la vitesse sur mon ordi. On comparera avec tes résultats.
Il faudrait qu'on ait le même PC
Je ferais sans doute un jour les tests, j'ai comme objectif de faire un petit article sur les bibliothèques matricielles, on verra bien le résultat Je testerai toutes les libs que je trouve et qui sont utilisables - GSL, MTL, Blitz++, boost::uBLAS, ATLAS et d'autres si je trouve, ça prendra juste plus de temps -
Je parie sur ATLAS. Je parie que Blitz & Co. sont battus à plate couture pour le calcul matriciel.
Même avec des PCs différents, on aurait un bon ordre de grandeur.
Au besoin je peux te transmettre un fichier compilé.
Choisis ta ou tes librairies, et on fait une course.
Mon PC: P4 2.6GHz, SSE2, Cache L2=512K, Cache L1=8K, FSB 800MHz.
D'ici 1 ou 2 mois je compte rajouter de nouvelles fonctions (dont des optimisations comme ATLAS) à ma bibliothèque générique qui est déjà en ligne.
J'aurai alors peut-être besoin d'un testeur pour lancer quelques becnchmarks de ma librairie sur un P4 avec 1Mo de cache. Tu pourrais m'aider?
Accessoirement, Blitz a les perfs du fortran avec une expressivité proche des notations mathématiques -- il manquerait quelques opérateurs pour bien faire. Et elle ne repose pas juste sur de l'évaluaton paresseuse, mais sur du pré-traitement réalisé à la compil sur les expressions mathématiques.
Pour le SSE, je reste persuadé que c'est le rôle du compilo que de s'occuper de ces détails pour nous. Des essais dont tu nous avais parlés (si me souvenirs sont bons), je n'ai pas l'impression que cela soit le cas.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
OK, je veux bien t'aider Au boulot, j'ai un P4 assez proche.Envoyé par Charlemagne
De toute manière, je ferai aussi un bench sur ma lib au boulot
D'ailleurs, si tu veux m'envoyer ton fichier bench, je me ferai un plaisir de le lancer avec les différentes bibliothèques dont on a parlé, enfin, petit à petit
Bon, fin du HS
Merci tout le monde.
Je crois que ça va aller avec MTL.
Merci Miles.
Mon bench n'est pas encore fait, pas avant 1 mois. Je te recontacterai quand je serai près. Il faudra se mettre d'accord sur les modalités du bench.
Des multiplications sur un panel de matrices de différentes tailles devraient faire l'affaire.
Pour bien testet la bibliothèque ATLAS, il faut la compiler sur l'ordinateur testé, parce qu'elle s'adapte à l'ordi (SSE, mémoire cache). Si tu as besoin de conseils pour son installation, n'hésite pas à me contacter.
ATLAS va plus loin dans les optimisations, mais celles ci ne sont pas génériques.Accessoirement, Blitz a les perfs du fortran avec une expressivité proche des notations mathématiques -- il manquerait quelques opérateurs pour bien faire. Et elle ne repose pas juste sur de l'évaluaton paresseuse, mais sur du pré-traitement réalisé à la compil sur les expressions mathématiques.
Tu as bonne mémoire (mon dernier poste à ce sujet doit bien remonter à 8-9 mois).Pour le SSE, je reste persuadé que c'est le rôle du compilo que de s'occuper de ces détails pour nous. Des essais dont tu nous avais parlés (si me souvenirs sont bons), je n'ai pas l'impression que cela soit le cas.
Mais les optimisations SSE des compilos ne servent (quasiment) à rien. Tout au plus quand le code utilise des schémas C très précis et peu pratiques pour mettre le compilo sur la voie. Il y a de plus le problème de l'alignement.
(exemple très approximatif et pas sûr du tout):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 float *a, *b, *c... for (int i=0; i<n, i+=4) { a[i]=b[i]+c[i]; a[i+1]=b[i+1]+c[i+1]; a[i+2]=b[i+2]+c[i+2]; a[i+3]=b[i+3]+c[i+2]; }Attention, la MTL n'est plus maintenue à ma connaissance depuis pas mal d'années. Je crois que le mec a passé son doctorat, et bye byeJe crois que ça va aller avec MTL.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager