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
Compilation : "c++ -I /Developer/SDKs/MacOSX10.5.sdk/usr/include main.cpp -o test -O3"
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; }
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![]()
Partager