Eigen is a C++ template library for linear algebra: vectors, matrices, and related algorithms. The GNU Scientific Library (GSL) is a numerical C library which builds on BLAS for more complicated matrix operations.
Compiled with:
g++ -static -O3 -Wall -I/tmp/eigen -msse3 -ffast-math -mfpmath=sse -o mm
mm.cpp -lgsl /usr/lib/sse2/libcblas.a /usr/lib/sse2/libatlas.a
Note: several other ways to link GSL with BLAS are possible, but all were
slower (Ubuntu 8.10, 32bit).
eigen 0.380
GSL 0.780
#include <cstdlib> #include <cstdio> #include <ctime> #define EIGEN2_SUPPORT #include "Eigen/Core" USING_PART_OF_NAMESPACE_EIGEN #include#include int main() { clock_t t; MatrixXf ea; MatrixXf eb; ea = MatrixXf::Random(18, 18); eb = MatrixXf::Random(18, 256); t = clock(); for (int i = 0; i < 10000; i++) MatrixXf er = ea * eb; printf("eigen %.3f\n", (clock() - t) / (float) CLOCKS_PER_SEC); gsl_matrix *ga = gsl_matrix_alloc(18, 18); gsl_matrix *gb = gsl_matrix_alloc(18, 256); gsl_matrix *gr = gsl_matrix_alloc(18, 256); t = clock(); for (int i = 0; i < 10000; i++) gsl_blas_dgemm(CblasNoTrans, CblasNoTrans, 1.0, ga, gb, 0.0, gr); printf("GSL %.3f\n", (clock() - t) / (float) CLOCKS_PER_SEC); gsl_matrix_free(ga); gsl_matrix_free(gb); gsl_matrix_free(gr); return EXIT_SUCCESS; }
posted at: 16:32 | path: /programming | permanent link