diff options
author | singler <singler@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-03-30 14:50:56 +0000 |
---|---|---|
committer | singler <singler@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-03-30 14:50:56 +0000 |
commit | f244ff52b467b900036fd4e303f7f90b51ab927c (patch) | |
tree | a4438b4b1a29693fbd4bfedff53479ce7bd8cc2b | |
parent | b437383e2ff84fdc6eca55e52f9928b784ff2206 (diff) | |
download | ppe42-gcc-f244ff52b467b900036fd4e303f7f90b51ab927c.tar.gz ppe42-gcc-f244ff52b467b900036fd4e303f7f90b51ab927c.zip |
2010-03-30 Johannes Singler <singler@kit.edu>
* include/parallel/random_shuffle.h
(__parallel_random_shuffle_drs) : Take as many threads as
possible, i. e. favor parallelism over cache efficiency.
Use own PRNG also for the 1 thread case.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@157826 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/parallel/random_shuffle.h | 10 |
2 files changed, 15 insertions, 2 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 06457d8bd72..adf53ceac76 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2010-03-30 Johannes Singler <singler@kit.edu> + + * include/parallel/random_shuffle.h + (__parallel_random_shuffle_drs) : Take as many threads as + possible, i. e. favor parallelism over cache efficiency. + Use own PRNG also for the 1 thread case. + 2010-03-30 Paolo Carlini <paolo.carlini@oracle.com> * include/debug/unordered_map: Clean-up includes and guards. 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; |