Re: Parallel sparse matrix (CSR) operations?
Jorge Guerra via SciPy-Dev <[email protected]> Wed, 6 Dec 2023 11:18:10 -0700
| Newsgroups | gmane.comp.python.scientific.devel |
|---|---|
| Message-ID | <CAMTc_ufqfAFoBU3eQyHw_c-vEt35a-4iMoeD+qD8faGyhpivig@mail.gmail.com> |
As a heavy user of parallel sparse operations, I would be DELIGHTED to see a native SciPy implementation. Currently, I use PyRSB and/or the beta functionality available through PyTorch. Both work well and greatly accelerate computations. Looking forward to it and I would be happy to test the prototype PR Adam, Jorge On Wed, Dec 6, 2023 at 10:56 AM CJ Carey <[email protected]> wrote: > I agree with Ralf: enabling parallelism for sparse operations would be > great, but we need to be careful to give users control over where and how > it's used. > > Feel free to open a draft PR so we can discuss specifics. > > On Wed, Dec 6, 2023, 12:47 PM Ralf Gommers <[email protected]> wrote: > >> >> >> On Mon, Dec 4, 2023 at 8:59 AM <[email protected]> wrote: >> >>> Is there some appetite for parallelizing the basic sparse matrix >>> operations? >>> >>> The existing CSR methods for matrix construction, multiply, matvec, >>> binop, etc. are written in sequential C++ and offer some low-hanging fruit >>> for parallelism. The main loop for most of these is (or can easily be made) >>> embarrassingly parallel. As a proof of concept I converted the outer loops >>> of many methods to parallel STL algorithms and saw a 3-5x speedup on my >>> 6-core laptop (on medium/large versions of existing benchmarks). >>> >>> Operations on small matrices should remain sequential to avoid paying >>> parallel overhead when it won't be amortized. >>> >>> The parallel STL algorithms I used are implemented with a thread pool. >>> This avoids the TBB requirement for GCC's parallel STL and will work on all >>> platforms. I avoided OpenMP as per docs. If there is a different preferred >>> way to write parallel C++ in the SciPy codebase, let me know. >>> >>> If folks are interested I'd be happy to contribute a workable PR. The >>> code is cleaner than I expected it to be. >>> >> >> Hi Adam, thanks for experimenting with this. I think that yes, there is >> interest in adding parallel execution support to many APIs where that makes >> sense. It's basically the first item on the roadmap: >> http://scipy.github.io/devdocs/dev/roadmap.html#performance-improvements. >> The disclaimer there is that we can't just convert serial operations to >> parallel ones, because that makes composition with other libraries and end >> user code using multiprocessing et al. quite difficult (xref >> https://thomasjpfan.github.io/parallelism-python-libraries-design/ and >> https://www.youtube.com/watch?v=3h6cAzpWNVU). Instead, we need to use >> the `workers=` keyword pattern to let users and downstream library authors >> opt in to parallel execution. You can look at, e.g., `fft` and `optimize` >> functions that have this keyword. `fft` functions use pthreads, so is >> probably the best example. >> >> Cheers, >> Ralf >> >> _______________________________________________ >> SciPy-Dev mailing list -- [email protected] >> To unsubscribe send an email to [email protected] >> https://mail.python.org/mailman3/lists/scipy-dev.python.org/ >> Member address: [email protected] >> > _______________________________________________ > SciPy-Dev mailing list -- [email protected] > To unsubscribe send an email to [email protected] > https://mail.python.org/mailman3/lists/scipy-dev.python.org/ > Member address: [email protected] > -- *Jorge E. Guerra, PhD.* *Project Scientist, UCAR,AOML/NOAA* *Earth Systems Research Laboratory, Boulder, CO* _______________________________________________ SciPy-Dev mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/scipy-dev.python.org/ Member address: [email protected]