Warum ist die Boost-Matrix-Multiplikation langsamer als meine?

Ich habe eine Matrixmultiplikation mit implementiertboost::numeric::ublas::matrix (sehenMein voller, funktionierender Boost-Code)

Result result = read ();

boost::numeric::ublas::matrix<int> C;
C = boost::numeric::ublas::prod(result.A, result.B);

und eine andere mit dem Standardalgorithmus (siehevollständiger Standardcode):

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;
}

So teste ich die Geschwindigkeit:

time boostImplementation.out > boostResult.txt
diff boostResult.txt correctResult.txt

time simpleImplementation.out > simpleResult.txt
diff simpleResult.txt correctResult.txt

Beide Programme lesen eine fest codierte Textdatei, die zwei 2000 x 2000 Matrizen enthält. Beide Programme wurden mit diesen Flags kompiliert:

g++ -std=c++98 -Wall -O3 -g $(PROBLEM).cpp -o $(PROBLEM).out -pedantic

ich habe15 Sekunden für meine umsetzung und vorbei4 Minuten für die boost-umsetzung!

edit: Nach dem Kompilieren mit

g++ -std=c++98 -Wall -pedantic -O3 -D NDEBUG -DBOOST_UBLAS_NDEBUG library-boost.cpp -o library-boost.out

ich habe28,19 Sekunden für den ikj-Algorithmus und60,99 Sekunden für Boost. Boost ist also immer noch erheblich langsamer.

Warum ist Boost so viel langsamer als meine Implementierung?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage