You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am looking for an efficient way to obtain the same pseudo random numbers being independent of the backend and parallelization. The focus is on parallel RNG, so it can be easily mapped to serial execution.
Counter/Index based RNGs (1, 2, 3) are also lightweight (stateless) and fast in the parallel environment, and therefore used in parallel Monte-Carlo etc.
Other RNGs also offer streams and sub-streams like MRG32k3a with "fast enough" jump aheads and also might offer better quality than CBRNGs, but have states, are slower (e.g., for CBRNG skip-ahead is O(1)) and might be more tricky to use it correctly in parallel environment.
With rocRAND/hipRAND and cuRAND we have RNGs suited for parallel reproducible random number generation, and they also include counter based RNGs. It looks like alpaka does not provide wrapper for it and the host side does not even have support for it. Random123 could be a library for this gap, because it offers CBRNGs and has CPU as well as CUDA and OpenCL backends, although CPU would be the interesting part for now.
Related to: #390 (unify RNG selection), #610 (Monte Carlo example), upcoming N-body project for mephisto (with real physics ;))
Edit: just want to add that pregenerating random numbers and using them via a table-based approach is not useful, when you have to generate a huge number of them.
The text was updated successfully, but these errors were encountered:
We discussed this in today's meeting. @sliwowitz is currently working on a separate RNG library on top of alpaka that will adress this issue. This is therefore WONTFIX and will be closed once the new RNG library is public.
I am looking for an efficient way to obtain the same pseudo random numbers being independent of the backend and parallelization. The focus is on parallel RNG, so it can be easily mapped to serial execution.
Counter/Index based RNGs (1, 2, 3) are also lightweight (stateless) and fast in the parallel environment, and therefore used in parallel Monte-Carlo etc.
Other RNGs also offer streams and sub-streams like MRG32k3a with "fast enough" jump aheads and also might offer better quality than CBRNGs, but have states, are slower (e.g., for CBRNG skip-ahead is O(1)) and might be more tricky to use it correctly in parallel environment.
With rocRAND/hipRAND and cuRAND we have RNGs suited for parallel reproducible random number generation, and they also include counter based RNGs. It looks like alpaka does not provide wrapper for it and the host side does not even have support for it.
Random123 could be a library for this gap, because it offers CBRNGs and has CPU as well as CUDA and OpenCL backends, although CPU would be the interesting part for now.
Related to: #390 (unify RNG selection), #610 (Monte Carlo example), upcoming N-body project for mephisto (with real physics ;))
PS: Philox is an CBRNG, and here is rocRAND's implementation
Edit: just want to add that pregenerating random numbers and using them via a table-based approach is not useful, when you have to generate a huge number of them.
The text was updated successfully, but these errors were encountered: