Cache-friendly, low-memory Lanczos algorithm in Rust

(lukefleed.xyz)

65 points | by lukefleed 3 hours ago ago

6 comments

  • vatsachak 41 minutes ago

    I leafed through your thesis and now will see aside some time in the future to learn more about succint data structures.

    I hope you get your pay day, your blog is great!

  • sfpotter 2 hours ago

    Nice result! Arnoldi is a beautiful algorithm, and this is a good application of it.

    What are you using this for and why are you working on it?

    I admit I'm not personally convinced of the value of Rust in numerics, but that's just me, I guess...

    • lukefleed 2 hours ago

      Hi there, thanks! I started doing this for a university exam and got carried away a bit.

      Regarding Rust for numerical linear algebra, I kinda agree with you. I think that theoretically, its a great language for writing low-level "high-performance mathematics." That's why I chose it in the first place.

      The real wall is that the past four decades of research in this area have primarily been conducted in C and Fortran, making it challenging for other languages to catch up without relying heavily on BLAS/LAPACK and similar libraries.

      I'm starting to notice that more people are trying to move to Rust for this stuff, so it's worth keeping an eye open on libraries like the one that I used, faer.

      • sfpotter 2 hours ago

        Nice. I'd be curious to see if this has already been done in the literature. It is a very nice and useful result, but it also kind of an obvious one---so I have to assume people who do work on computing matrix functions are aware of it... (This is not to take anything away from the hard work you've done! You may just appreciate having a reference to any existing work that is already out there.)

        Of course, what you're doing depends on the matrix being Hermitian reducing the upper Hessenberg matrix in the Arnoldi iteration to tridiagonal form. Trying to do a similar streaming computation on a general matrix is going to run into problems.

        That said... one area of numerical linear algebra research which is very active is randomized numerical linear algebra. There is a paper by Nakatsukasa and Tropp ("Fast and accurate randomized algorithms for linear systems and eigenvalue problems") which presents some randomized algorithms, including a "randomized GMRES" which IIRC is compatible with streaming. You might find it interesting trying to adapt the machinery this algorithm is built on to the problem you're working on.

        As for Rust, having done a lot of this research myself... there is no problem relying on BLAS or LAPACK, and I'm not sure this could be called a "wall". There are also many alternative libraries actively being worked on. BLIS, FLAME, and MAGMA are examples that come to mind... but there are so many more. Obviously Eigen is also available in C++. So, I'm not sure this alone justifies using Rust... Of course, use it if you like it. :)

  • manbash an hour ago

    Nice work. I have gone through the fairly straightforward paper.

    May I ask what you've used to confirm the cache hit/miss rate? Thanks!

  • gigatexal 11 minutes ago

    the comments here might be a good precursor to defending your thesis -- good luck with that btw!