Bonjour.
Je dois développer un prog qui fait du calcul sur des matrices le plus performants possibles.
Je suis donc à la recherche des meilleurs librairies pour ca.
Boost me semblait être une bonne solution, en tout cas simple d'utilisation en comparaison des librairies fortran (blas, lapack).
En testant simplement la multiplication de matrice, je me suis rendu compte que cela est très lent. Ma question est donc est-ce que j'ai oublié quelque chose ou ces performances sont normales.

Code c++ : 7 à 8 secondes

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
#define NDEBUG
#include <stdio.h>
#include <math.h>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <boost/timer.hpp> 
 
 
using namespace boost::numeric::ublas;
using namespace std;
 
typedef  matrix <double> Matrix;
boost::timer t; 
 
int main () {
    Matrix m(1000, 1000);
    Matrix r(1000,1000);
    for (unsigned i = 0; i < m.size1 (); ++ i){
        for (unsigned j = 0; j < m.size2 (); ++ j){
            m (i, j) = rand();
		}
    }
 
   t.restart(); 
   r=prod(m,m);
   cout<< t.elapsed(); 
 
   return 0;
}
Compilation : "c++ -I /Developer/SDKs/MacOSX10.5.sdk/usr/include main.cpp -o test -O3"

Code Matlab : 0.3 seconde environ

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
function r=test_mult(m,n)
   tic;
   r=m*n;
   toc


Merci de votre aide pour obtenir des performances similaire à Matlab