dss-extensions / klusolve

KLUSolveX: An extended version of KLUSolve for the DSS C-API library
GNU Lesser General Public License v2.1
4 stars 2 forks source link

MVMult: Benchmark Eigen, Blaze and uBLAS #10

Open PMeira opened 5 years ago

PMeira commented 5 years ago

Blaze and (Boost.)uBLAS could be slightly faster for OpenDSS. Since MVMult is a tiny portion of the code, it should be easy to test multiply libraries. Currently KLUSolve is used as a dynamic library, also easier to test multiple versions.

(Low priority)

PMeira commented 5 years ago

uBLAS with complex numbers didn't result in better results -- I expected this but there are some benchmarks around that suggest it might work better for very small float matrices.

Blaze is a bit faster than Eigen on MSVC, but slower on GCC on Windows. There are also some compilation issues that require headers changes for it to work with mingw-w64. It might be worth revisiting this in the future.

For Eigen, one interesting observation is that using just the dynamic matrix part...

Map<VectorXcd>(b, N).noalias() = Map<MatrixXcd>(A, N, N) * Map<VectorXcd>(x, N);

...instead of the switch for different (statically sized) matrices is faster on MSVC (2017 15.9.9), which also makes it faster than the GCC (8) DLL.