4 ms·
DifferentialEquations.jl supports GPUs. The question is what is the right way to utilize DiffEq's GPU support here. That's actually a much deeper question than
by ChrisRackauckas 7y ago
DifferentialEquations.jl supports GPUs. The question is what is the right way to utilize DiffEq's GPU support here. That's actually a much deeper question than you might at first think. The reason is because sparse factorizations are not an inherently parallel operation, so CUSOLVER is actually quite bad at doing them. It even seems that CUSOLVER does some CPU operations in there... ouch.
But what can we do with ModelingToolkit to start pushing more into this domain? Well, here's a few things:
1) We plan to have new compilation targets, kind of like the SArray one that was shown, which target parallelism. For example, for large Jacobians, we want a target so you can say "generate the code that fills the Jacobian optimally with 16 threads", and then what it will do is split up the Jacobian into 16 parts with approximately equally many operations and thread between those. Since it's all scalar operations then this should be something that gets as efficient as you'd want to write by hand! Then a similar compilation target can be made for the GPU, where it would need to know the number of GPU threads you'd be using and it would split apart that Jacobian filling and write a gigantic `if threadid() == ...` setup, and use CUDAnative.jl to compile this to a .ptx kernel so that all of those threads are parallelized. Both of these trivially extend to sparse matrices doing what I showed in the writing. So filling sparse matrices is something we can and plan to have nice compilation targets for.
2) We can also have compilation targets for `J*v` operations, so that way it can accelerate Newton-Krylov solvers, which is probably the better way of using sparse matrices on the GPU since it would avoid sparse factorizations.
3) We can also implement a generic sparse factorization in Julia, to then build analytical solutions for sparse factorizations, run Rewrite.jl simplification passes on these, and generate the parallelized kernels for them. This would then be something that does sparse factorizations on the GPU with parallelized code but does not need to use CUSOLVER, and so that would be quite ideal. The issue is that it would require writing generic sparse factorization tools, since Julia currently relies on SuiteSparse for this with no generic fallback. This is not an easy task, but I think Yingbo will be up for it in a few years since we have a plan to not use standard sparse linear algebra routines in Julia's differential equation suites because there is a way to speed up operations specifically in this domain by using a new factorization, and so if we go this direction our first task will be to learn how the current sparse LU is implemented.
- new4thaccount 7y agoWow! A lot going on there and my sincere thanks for your part in what be a massive amount of free work that I get to benefit from. I'm really excited for what y'all have coming in the future and will stay tuned. There is some literature on Newton-Krylov solvers for my domain (power systems) so I'll have to brush up on that math. Help me understand one thing. I suppose if we could one day compile Julia to a binary and sell software (just curious...I don't sell software today), would you have to secure a license for suitesparse? Is that another benefit from rewriting?
- ChrisRackauckas 7y agoYes, you would need a commercial license for suite sparse I think, so that would be a good reason to rewrite its core methods to a new license.
- new4thaccount 7y agoThanks for clearing that up. I think someone else on here pointed that out as well as the fact that Matlab and some other tools provide that for you as part of your license/subscription fee. I started digging around and found out that it seems like the suitesparse author is one of the top authorities in this area and therefore, it might not be super realistic to get something as fast or faster on your own. Maybe a big enough open-source project could do it though. Any thoughts on this?