diff options
Diffstat (limited to 'libstdc++-v3/include/parallel')
-rw-r--r-- | libstdc++-v3/include/parallel/random_shuffle.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/libstdc++-v3/include/parallel/random_shuffle.h b/libstdc++-v3/include/parallel/random_shuffle.h index 3082ea8dbc0..baad24d4f66 100644 --- a/libstdc++-v3/include/parallel/random_shuffle.h +++ b/libstdc++-v3/include/parallel/random_shuffle.h @@ -322,10 +322,16 @@ namespace __gnu_parallel } #endif - __num_threads = std::min<_BinIndex>(__num_threads, __num_bins); + __num_bins = __round_up_to_pow2( + std::max<_BinIndex>(__num_threads, __num_bins)); if (__num_threads <= 1) - return __sequential_random_shuffle(__begin, __end, __rng); + { + _RandomNumber __derived_rng( + __rng(std::numeric_limits<uint32_t>::max())); + __sequential_random_shuffle(__begin, __end, __derived_rng); + return; + } _DRandomShufflingGlobalData<_RAIter> __sd(__begin); _DRSSorterPU<_RAIter, _RandomNumber >* __pus; |