J'ai mis en œuvre une multiplication de matrice avec boost::numeric::ublas::matrix
(voir mon plein, travail code boost)
Result result = read ();
boost::numeric::ublas::matrix<int> C;
C = boost::numeric::ublas::prod(result.A, result.B);
et une autre avec l'algorithme standard (voir texte intégral de la norme de code):
vector< vector<int> > ijkalgorithm(vector< vector<int> > A,
vector< vector<int> > B) {
int n = A.size();
// initialise C with 0s
vector<int> tmp(n, 0);
vector< vector<int> > C(n, tmp);
for (int i = 0; i < n; i++) {
for (int k = 0; k < n; k++) {
for (int j = 0; j < n; j++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
return C;
}
C'est comment j'ai tester la vitesse:
time boostImplementation.out > boostResult.txt
diff boostResult.txt correctResult.txt
time simpleImplementation.out > simpleResult.txt
diff simpleResult.txt correctResult.txt
Les deux programmes de lecture codée en dur fichier texte qui contient deux 2000 x 2000 matrices. Les deux programmes ont été compilé avec les options suivantes:
g++ -std=c++98 -Wall -O3 -g $(PROBLEM).cpp -o $(PROBLEM).out -pedantic
J'ai eu 15 secondes pour ma mise en œuvre et de plus de 4 minutes pour le coup de pouce de la mise en œuvre!
edit: Après compilation avec
g++ -std=c++98 -Wall -pedantic -O3 -D NDEBUG -DBOOST_UBLAS_NDEBUG library-boost.cpp -o library-boost.out
J'ai eu 28.19 secondes pour le ikj-algorithme et 60.99 secondes pour Boost. Donc Boost est toujours beaucoup plus lent.
Pourquoi est-boost de manière beaucoup plus lente que ma mise en œuvre?