sarah-ek
Joined 3 years ago
Joined 3 years ago
and of course i do check the cpu utilization to make sure that all threads are spinning for multithreaded benchmarks, and occasionally check the assembly of the hot loops to make sure that the libraries were built properly and are dispatching to the right code. (avx2, avx512, etc) so overall i try to take it seriously and i'll give credit where credit is due when it turns out another library is faster
i plan to address that after refactoring the benches by executing each library individually
n faer mkl openblas
1024 27.06 ms 186.33 ms 793.26 ms
1536 73.57 ms 605.71 ms 2.65 s
2048 280.74 ms 1.53 s 8.99 s
2560 867.15 ms 3.31 s 17.06 s
3072 1.87 s 6.13 s 55.21 s
3584 3.42 s 10.18 s 71.56 s
4096 6.11 s 15.70 s 168.88 s
overall, the results show that faer is usually faster, or even with openblas, and slower than mkl on my desktop
see the official website (https://faer-rs.github.io) and the docs.rs documentation for code examples and usage instructions.
---
this release implements the initial design of the high level api (see https://docs.rs/faer/0.11.0/faer/), which should allow users to get started with writing easy to read code without having to deal with managing memory or multithreading settings on their own.
i also added a thin compatibility layer with ndarray and nalgebra. this way users are able to mix and match libraries if they wish to do so, or to help with migration to different libraries
nalgebra doesn't use blocking, so decompositions are handled one column (or row) at a time. this is great for small matrices, but scales poorly for larger ones
eigen uses blocking for most decompositions, other than the eigendecomposition, but they don't have a proper threading framework. the only operation that is properly multithreaded is matrix multiplication using openmp (and the unstable tensor module using a custom thread pool)