Dear all, I am trying to integrate a simple 2 variable ODE system. I wanted to know which of the solvers listed here : http://www.boost.org/doc/libs/1_56_0/libs/numeric/odeint/doc/html/boost_nume... are parallelised for multicore CPU’s and GPU’s? Perhaps using Thrust for the Nvidia/CUDA GPU end of things? I am principally interested if someone has managed to make/port a library for parallelised RK45 methods. Please note in later work I plan on having more ODE's - probably systems of 12-15 parameters though they will be all be first order equations. Thanks and Cheers! - vihan -- Listening to Ozzy again!
Hi Vihan,
I built a GPU implementation of two parallel ODE solvers a
Adams-Bashforth-Moulton with 4 steps memory and a 4th order Runge-Kutta for
some linear systems simulator a couple of years ago. The parallelization
technique is not new as it is a prefix sum application (Guy E. Blelloch,
Prefix Sums and Their Applications). The implementation was using
internally some boost libraries; outwards interfaces for plain C, Python,
and Matlab were implemented. I will send you the documentation and link to
my git sources if interested on your personal email. There is no point in
spamming the boost list with "non boost" items.
Some thoughts
1. It will be hard to have an interface compatible with odeint for a
parallel ode solver. If you want to use a stepper approach, then you will
be able to parallelize only the operations in one step ( Matrix - Vector
multiplications and SAXPY operations). This will not give you enough GPU
load for small systems. Therefore, for 12-15 variables I do not think that
you will get any advantage using the GPU versus the CPU.
2. One way to achieve good GPU load (and performance) is to use a Prefix
Sum to parallelize operations for several simulation times simultaneously.
This is doable and the theory is relatively straight forward but it usually
leads to an increased number of operations. However, adaptive time stepping
will not be easy to implement.
Best,
Alex
On Mon, Sep 28, 2015 at 1:32 AM, Vihan Pandey
Dear all,
I am trying to integrate a simple 2 variable ODE system. I wanted to know which of the solvers listed here :
http://www.boost.org/doc/libs/1_56_0/libs/numeric/odeint/doc/html/boost_nume...
are parallelised for multicore CPU’s and GPU’s? Perhaps using Thrust for the Nvidia/CUDA GPU end of things?
I am principally interested if someone has managed to make/port a library for parallelised RK45 methods. Please note in later work I plan on having more ODE's - probably systems of 12-15 parameters though they will be all be first order equations.
Thanks and Cheers!
- vihan
-- Listening to Ozzy again!
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
Thanks Alex,
I got your email, I will check out the document.
Thanks and Cheers!
- vihan
On 1 October 2015 at 05:38, Alex Patriciu
Hi Vihan,
I built a GPU implementation of two parallel ODE solvers a Adams-Bashforth-Moulton with 4 steps memory and a 4th order Runge-Kutta for some linear systems simulator a couple of years ago. The parallelization technique is not new as it is a prefix sum application (Guy E. Blelloch, Prefix Sums and Their Applications). The implementation was using internally some boost libraries; outwards interfaces for plain C, Python, and Matlab were implemented. I will send you the documentation and link to my git sources if interested on your personal email. There is no point in spamming the boost list with "non boost" items.
Some thoughts 1. It will be hard to have an interface compatible with odeint for a parallel ode solver. If you want to use a stepper approach, then you will be able to parallelize only the operations in one step ( Matrix - Vector multiplications and SAXPY operations). This will not give you enough GPU load for small systems. Therefore, for 12-15 variables I do not think that you will get any advantage using the GPU versus the CPU. 2. One way to achieve good GPU load (and performance) is to use a Prefix Sum to parallelize operations for several simulation times simultaneously. This is doable and the theory is relatively straight forward but it usually leads to an increased number of operations. However, adaptive time stepping will not be easy to implement.
Best, Alex
On Mon, Sep 28, 2015 at 1:32 AM, Vihan Pandey
wrote: Dear all,
I am trying to integrate a simple 2 variable ODE system. I wanted to know which of the solvers listed here :
http://www.boost.org/doc/libs/1_56_0/libs/numeric/odeint/doc/html/boost_nume...
are parallelised for multicore CPU’s and GPU’s? Perhaps using Thrust for the Nvidia/CUDA GPU end of things?
I am principally interested if someone has managed to make/port a library for parallelised RK45 methods. Please note in later work I plan on having more ODE's - probably systems of 12-15 parameters though they will be all be first order equations.
Thanks and Cheers!
- vihan
-- Listening to Ozzy again!
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- ``Skepticism is healthy only to a limited extent. Being skeptical about proofs and programs (particularly your own) will probably keep your grades healthy and your job fairly secure. But applying that much skepticism will probably also keep you shut away working all the time, instead of letting you get out for exercise and relaxation. Too much skepticism is an open invitation to the state of rigor mortis, where you become so worried about being correct and rigorous that you never get anything finished. -A skeptic" Taken from Concrete Mathematics by Graham, Knuth, and Patashnik
Hi vihan, On Monday, September 28, 2015 11:02:21 AM Vihan Pandey wrote:
Dear all,
I am trying to integrate a simple 2 variable ODE system. I wanted to know which of the solvers listed here :
http://www.boost.org/doc/libs/1_56_0/libs/numeric/odeint/doc/html/boost_nume ric_odeint/getting_started/overview.html
are parallelised for multicore CPU’s and GPU’s? Perhaps using Thrust for the Nvidia/CUDA GPU end of things?
odeint provides parallelization backends for explicit steppers (RK methods) based on CUDA (via thrust) [1], OpenCL [2] and OpenMP/MPI [3].
I am principally interested if someone has managed to make/port a library for parallelised RK45 methods. Please note in later work I plan on having more ODE's - probably systems of 12-15 parameters though they will be all be first order equations.
In my experience, parallelization only makes sense if you have at least ~100 variables for CPUs, and at least ~100000 for GPUs. For smaller problems you might be able to get some performance improvements by using SIMD [4,5]. Best, Mario [1] http://www.boost.org/doc/libs/1_56_0/libs/numeric/odeint/doc/html/boost_nume... [2] http://www.boost.org/doc/libs/1_56_0/libs/numeric/odeint/doc/html/boost_nume... [3] http://www.boost.org/doc/libs/1_56_0/libs/numeric/odeint/doc/html/boost_nume... [4] http://www.codeproject.com/Articles/841136/Boosting-ODE-simulations-with-Boo... [5] http://www.italiancpp.org/dettagli-meetup-firenze-2015/#cpu-power
Thanks and Cheers!
- vihan
Hi Mario,
Thanks for the reply, I will check the links out.
Thanks and Cheers!
- vihan
On 1 October 2015 at 14:49, Mario Mulansky
Hi vihan,
On Monday, September 28, 2015 11:02:21 AM Vihan Pandey wrote:
Dear all,
I am trying to integrate a simple 2 variable ODE system. I wanted to know which of the solvers listed here :
http://www.boost.org/doc/libs/1_56_0/libs/numeric/odeint/doc/html/boost_nume
ric_odeint/getting_started/overview.html
are parallelised for multicore CPU’s and GPU’s? Perhaps using Thrust for the Nvidia/CUDA GPU end of things?
odeint provides parallelization backends for explicit steppers (RK methods) based on CUDA (via thrust) [1], OpenCL [2] and OpenMP/MPI [3].
I am principally interested if someone has managed to make/port a library for parallelised RK45 methods. Please note in later work I plan on having more ODE's - probably systems of 12-15 parameters though they will be all be first order equations.
In my experience, parallelization only makes sense if you have at least ~100 variables for CPUs, and at least ~100000 for GPUs. For smaller problems you might be able to get some performance improvements by using SIMD [4,5].
Best, Mario
[1]
http://www.boost.org/doc/libs/1_56_0/libs/numeric/odeint/doc/html/boost_nume... [2]
http://www.boost.org/doc/libs/1_56_0/libs/numeric/odeint/doc/html/boost_nume... [3]
http://www.boost.org/doc/libs/1_56_0/libs/numeric/odeint/doc/html/boost_nume... [4] http://www.codeproject.com/Articles/841136/Boosting-ODE-simulations-with-Boo... [5] http://www.italiancpp.org/dettagli-meetup-firenze-2015/#cpu-power
Thanks and Cheers!
- vihan
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- ``Skepticism is healthy only to a limited extent. Being skeptical about proofs and programs (particularly your own) will probably keep your grades healthy and your job fairly secure. But applying that much skepticism will probably also keep you shut away working all the time, instead of letting you get out for exercise and relaxation. Too much skepticism is an open invitation to the state of rigor mortis, where you become so worried about being correct and rigorous that you never get anything finished. -A skeptic" Taken from Concrete Mathematics by Graham, Knuth, and Patashnik
participants (3)
-
Alex Patriciu
-
Mario Mulansky
-
Vihan Pandey