From: singler Date: Tue, 3 Feb 2009 17:49:36 +0000 (+0000) Subject: 2009-02-03 Johannes Singler X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c249d3147ea994782c3be06e53f27a552b297b92;p=thirdparty%2Fgcc.git 2009-02-03 Johannes Singler * include/parallel/algorithmfwd.h: Add parallelism default for many declarations. * include/parallel/numericfwd.h: Likewise. * include/parallel/iterator.h: Use iterator_traits as usual. * include/parallel/par_loop.h: Include equally_split.h. (for_each_template_random_access_ed): Avoid calling the Result default constructor. * include/parallel/numeric: Replace for_each_template_random_access by for_each_template_random_access_ed in numeric functions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@143902 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index f34742c4e2eb..ec7aa47c84ca 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,17 @@ +2009-02-03 Johannes Singler + + * include/parallel/algorithmfwd.h: + Add parallelism default for many declarations. + * include/parallel/numericfwd.h: Likewise. + * include/parallel/iterator.h: Use iterator_traits as usual. + * include/parallel/par_loop.h: + Include equally_split.h. + (for_each_template_random_access_ed): + Avoid calling the Result default constructor. + * include/parallel/numeric: Replace + for_each_template_random_access by + for_each_template_random_access_ed in numeric functions. + 2009-02-02 Benjamin Kosnik * config/os/gnu-linux/os_defines.h: Remove superfluous diff --git a/libstdc++-v3/include/parallel/algorithmfwd.h b/libstdc++-v3/include/parallel/algorithmfwd.h index 3f386a5cdbc6..7aed7c71d4bf 100644 --- a/libstdc++-v3/include/parallel/algorithmfwd.h +++ b/libstdc++-v3/include/parallel/algorithmfwd.h @@ -99,7 +99,8 @@ namespace __parallel template typename iterator_traits<_RAIter>::difference_type count_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag, - __gnu_parallel::_Parallelism); + __gnu_parallel::_Parallelism parallelism + = __gnu_parallel::parallel_unbalanced); template @@ -121,7 +122,8 @@ namespace __parallel template typename iterator_traits<_RAIter>::difference_type count_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag, - __gnu_parallel::_Parallelism); + __gnu_parallel::_Parallelism parallelism + = __gnu_parallel::parallel_unbalanced); // algobase.h template @@ -228,7 +230,8 @@ namespace __parallel template _Function for_each_switch(_RAIter, _RAIter, _Function, random_access_iterator_tag, - __gnu_parallel::_Parallelism); + __gnu_parallel::_Parallelism parallelism + = __gnu_parallel::parallel_balanced); template @@ -250,7 +253,8 @@ namespace __parallel template void generate_switch(_RAIter, _RAIter, _Generator, random_access_iterator_tag, - __gnu_parallel::_Parallelism); + __gnu_parallel::_Parallelism parallelism + = __gnu_parallel::parallel_balanced); template _OIter @@ -272,7 +276,8 @@ namespace __parallel template _RAIter generate_n_switch(_RAIter, _Size, _Generator, random_access_iterator_tag, - __gnu_parallel::_Parallelism); + __gnu_parallel::_Parallelism parallelism + = __gnu_parallel::parallel_balanced); template bool @@ -429,7 +434,8 @@ namespace __parallel _RAOIter transform1_switch(_RAIIter, _RAIIter, _RAOIter, UnaryOperation, random_access_iterator_tag, random_access_iterator_tag, - __gnu_parallel::_Parallelism); + __gnu_parallel::_Parallelism parallelism + = __gnu_parallel::parallel_balanced); template _RAIter max_element_switch(_RAIter, _RAIter, _Compare, random_access_iterator_tag, - __gnu_parallel::_Parallelism); + __gnu_parallel::_Parallelism parallelism + = __gnu_parallel::parallel_balanced); template @@ -615,7 +623,8 @@ namespace __parallel template _RAIter min_element_switch(_RAIter, _RAIter, _Compare, random_access_iterator_tag, - __gnu_parallel::_Parallelism); + __gnu_parallel::_Parallelism parallelism + = __gnu_parallel::parallel_balanced); template void diff --git a/libstdc++-v3/include/parallel/iterator.h b/libstdc++-v3/include/parallel/iterator.h index 7aaafee8611d..95ef844350fb 100644 --- a/libstdc++-v3/include/parallel/iterator.h +++ b/libstdc++-v3/include/parallel/iterator.h @@ -131,7 +131,8 @@ namespace __gnu_parallel public: typedef IteratorCategory iterator_category; typedef void value_type; - typedef typename Iterator1::difference_type difference_type; + typedef typename std::iterator_traits::difference_type + difference_type; typedef type* pointer; typedef type& reference; diff --git a/libstdc++-v3/include/parallel/numeric b/libstdc++-v3/include/parallel/numeric index 1269c5251e4b..8706e3f4c014 100644 --- a/libstdc++-v3/include/parallel/numeric +++ b/libstdc++-v3/include/parallel/numeric @@ -103,13 +103,13 @@ namespace __parallel __gnu_parallel::accumulate_selector<_RandomAccessIterator> my_selector; __gnu_parallel:: - for_each_template_random_access(begin, end, + for_each_template_random_access_ed(begin, end, __gnu_parallel::nothing(), my_selector, __gnu_parallel:: accumulate_binop_reduct (binary_op), - res, res, -1, parallelism_tag); + res, res, -1); return res; } else @@ -211,9 +211,9 @@ namespace __parallel inner_product_selector my_selector(first1, first2); __gnu_parallel:: - for_each_template_random_access(first1, last1, binary_op2, + for_each_template_random_access_ed(first1, last1, binary_op2, my_selector, binary_op1, - res, res, -1, parallelism_tag); + res, res, -1); return res; } else @@ -432,10 +432,10 @@ namespace __parallel end_pair(end, result + (end - begin)); __gnu_parallel::adjacent_difference_selector functionality; __gnu_parallel:: - for_each_template_random_access(begin_pair, end_pair, bin_op, + for_each_template_random_access_ed(begin_pair, end_pair, bin_op, functionality, __gnu_parallel::dummy_reduct(), - dummy, dummy, -1, parallelism_tag); + dummy, dummy, -1); return functionality.finish_iterator; } else diff --git a/libstdc++-v3/include/parallel/numericfwd.h b/libstdc++-v3/include/parallel/numericfwd.h index 362725b4a67b..b9bbe967fe20 100644 --- a/libstdc++-v3/include/parallel/numericfwd.h +++ b/libstdc++-v3/include/parallel/numericfwd.h @@ -83,7 +83,8 @@ namespace __parallel _Tp accumulate_switch(_RAIter, _RAIter, _Tp, _BinaryOper, random_access_iterator_tag, - __gnu_parallel::_Parallelism); + __gnu_parallel::_Parallelism parallelism + = __gnu_parallel::parallel_unbalanced); template _OIter @@ -124,7 +125,8 @@ namespace __parallel adjacent_difference_switch(_IIter, _IIter, _OIter, _BinaryOper, random_access_iterator_tag, random_access_iterator_tag, - __gnu_parallel::_Parallelism); + __gnu_parallel::_Parallelism parallelism + = __gnu_parallel::parallel_unbalanced); template _Tp @@ -164,7 +166,8 @@ namespace __parallel inner_product_switch(_RAIter1, _RAIter1, _RAIter2, _Tp, BinaryFunction1, BinaryFunction2, random_access_iterator_tag, random_access_iterator_tag, - __gnu_parallel::_Parallelism); + __gnu_parallel::_Parallelism + = __gnu_parallel::parallel_unbalanced); template #include #include +#include namespace __gnu_parallel { @@ -80,9 +81,9 @@ template traits_type; typedef typename traits_type::difference_type difference_type; - const difference_type length = end - begin; Result *thread_results; + bool* constructed; thread_index_t num_threads = __gnu_parallel::min(get_max_threads(), length); @@ -92,13 +93,15 @@ template( + ::operator new(num_threads * sizeof(Result))); + constructed = new bool[num_threads]; } thread_index_t iam = omp_get_thread_num(); // Neutral element. - Result reduct = Result(); + Result* reduct = static_cast(::operator new(sizeof(Result))); difference_type start = equally_split_point(length, num_threads, iam), @@ -106,23 +109,30 @@ template