diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-01-26 13:05:39 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-01-26 13:05:39 +0000 |
commit | 8da090de25c137d37dd64115b1d2fa26f02577d7 (patch) | |
tree | 74bf293401a0a1429a8339ebe33c9c46166e95f7 /libstdc++-v3 | |
parent | 2025948bd01df153e9f3c16bd1f70ab97c9327a1 (diff) | |
download | gcc-8da090de25c137d37dd64115b1d2fa26f02577d7.tar.gz |
2011-01-26 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 169285
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@169287 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
8 files changed, 159 insertions, 14 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index f6a742211be..b755b4336b7 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,20 @@ +2011-01-26 Johannes Singler <singler@kit.edu> + + * include/parallel/numeric (inner_product, partial_sum): + Qualify subsequent call with __gnu_parallel instead of + _GLIBCXX_STD_P to reenable parallel execution without ambiguity. + * include/parallel/algobase.h (equal): Likewise. + * include/parallel/algo.h (find_first_of, search_n, merge, + nth_element, partial_sort, max_element, min_element): Likewise. + * testsuite/25_algorithms/headers/algorithm/ + parallel_algorithm_mixed1.cc (main): Add respective test cases. + * testsuite/25_algorithms/headers/algorithm/ + parallel_algorithm_mixed2.cc (main): Likewise. + * testsuite/26_numerics/headers/numeric/ + parallel_numeric_mixed1.cc (main): Likewise. + * testsuite/26_numerics/headers/numeric/ + parallel_numeric_mixed2.cc (main): Likewise. + 2011-01-24 Graham Reed <greed@pobox.com> PR libstdc++/47387 diff --git a/libstdc++-v3/include/parallel/algo.h b/libstdc++-v3/include/parallel/algo.h index cc2fc679bcf..a24e557ad90 100644 --- a/libstdc++-v3/include/parallel/algo.h +++ b/libstdc++-v3/include/parallel/algo.h @@ -292,7 +292,7 @@ namespace __parallel typedef typename _IIterTraits::value_type _IValueType; typedef typename iteratorf_traits::value_type _FValueType; - return _GLIBCXX_STD_P::find_first_of(__begin1, __end1, __begin2, __end2, + return __gnu_parallel::find_first_of(__begin1, __end1, __begin2, __end2, __gnu_parallel::_EqualTo<_IValueType, _FValueType>()); } @@ -1160,7 +1160,7 @@ namespace __parallel const _Tp& __val) { typedef typename iterator_traits<_FIterator>::value_type _ValueType; - return _GLIBCXX_STD_P::search_n(__begin, __end, __count, __val, + return __gnu_parallel::search_n(__begin, __end, __count, __val, __gnu_parallel::_EqualTo<_ValueType, _Tp>()); } @@ -2086,7 +2086,7 @@ namespace __parallel typedef typename _Iterator1Traits::value_type _ValueType1; typedef typename _Iterator2Traits::value_type _ValueType2; - return _GLIBCXX_STD_P::merge(__begin1, __end1, __begin2, __end2, + return __gnu_parallel::merge(__begin1, __end1, __begin2, __end2, __result, __gnu_parallel::_Less<_ValueType1, _ValueType2>()); } @@ -2128,7 +2128,7 @@ namespace __parallel { typedef iterator_traits<_RAIter> _TraitsType; typedef typename _TraitsType::value_type _ValueType; - _GLIBCXX_STD_P::nth_element(__begin, __nth, __end, + __gnu_parallel::nth_element(__begin, __nth, __end, std::less<_ValueType>()); } @@ -2171,7 +2171,7 @@ namespace __parallel { typedef iterator_traits<_RAIter> _TraitsType; typedef typename _TraitsType::value_type _ValueType; - _GLIBCXX_STD_P::partial_sort(__begin, __middle, __end, + __gnu_parallel::partial_sort(__begin, __middle, __end, std::less<_ValueType>()); } @@ -2241,7 +2241,7 @@ namespace __parallel max_element(_FIterator __begin, _FIterator __end) { typedef typename iterator_traits<_FIterator>::value_type _ValueType; - return _GLIBCXX_STD_P::max_element(__begin, __end, + return __gnu_parallel::max_element(__begin, __end, std::less<_ValueType>()); } @@ -2333,7 +2333,7 @@ namespace __parallel min_element(_FIterator __begin, _FIterator __end) { typedef typename iterator_traits<_FIterator>::value_type _ValueType; - return _GLIBCXX_STD_P::min_element(__begin, __end, + return __gnu_parallel::min_element(__begin, __end, std::less<_ValueType>()); } diff --git a/libstdc++-v3/include/parallel/algobase.h b/libstdc++-v3/include/parallel/algobase.h index 754c2814574..a6fd6cd4331 100644 --- a/libstdc++-v3/include/parallel/algobase.h +++ b/libstdc++-v3/include/parallel/algobase.h @@ -142,7 +142,8 @@ namespace __parallel inline bool equal(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2) { - return mismatch(__begin1, __end1, __begin2).first == __end1; + return __gnu_parallel::mismatch(__begin1, __end1, __begin2).first + == __end1; } // Public interface @@ -151,7 +152,8 @@ namespace __parallel equal(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, _Predicate __pred) { - return mismatch(__begin1, __end1, __begin2, __pred).first == __end1; + return __gnu_parallel::mismatch(__begin1, __end1, __begin2, __pred).first + == __end1; } // Sequential fallback diff --git a/libstdc++-v3/include/parallel/numeric b/libstdc++-v3/include/parallel/numeric index fb1fce257c4..b779aae8d6d 100644 --- a/libstdc++-v3/include/parallel/numeric +++ b/libstdc++-v3/include/parallel/numeric @@ -283,7 +283,7 @@ namespace __parallel typedef typename __gnu_parallel::_Multiplies<_ValueType1, _ValueType2>::result_type _MultipliesResultType; - return _GLIBCXX_STD_P::inner_product(__first1, __last1, __first2, __init, + return __gnu_parallel::inner_product(__first1, __last1, __first2, __init, __gnu_parallel::_Plus<_Tp, _MultipliesResultType>(), __gnu_parallel:: _Multiplies<_ValueType1, _ValueType2>(), @@ -303,7 +303,7 @@ namespace __parallel typedef typename __gnu_parallel::_Multiplies<_ValueType1, _ValueType2>::result_type _MultipliesResultType; - return _GLIBCXX_STD_P::inner_product(__first1, __last1, __first2, __init, + return __gnu_parallel::inner_product(__first1, __last1, __first2, __init, __gnu_parallel::_Plus<_Tp, _MultipliesResultType>(), __gnu_parallel:: _Multiplies<_ValueType1, _ValueType2>()); @@ -359,7 +359,7 @@ namespace __parallel partial_sum(_IIter __begin, _IIter __end, _OutputIterator __result) { typedef typename iterator_traits<_IIter>::value_type _ValueType; - return _GLIBCXX_STD_P::partial_sum(__begin, __end, + return __gnu_parallel::partial_sum(__begin, __end, __result, std::plus<_ValueType>()); } diff --git a/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed1.cc b/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed1.cc index cc3ebbc18f9..ab0d0ac36e5 100644 --- a/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed1.cc @@ -30,7 +30,59 @@ void test() const value_type c(0); - vector_type v(10); + vector_type v(10), result(20); + + std::equal(v.begin(), v.end(), v.begin()); + std::equal(v.begin(), v.end(), v.begin(), std::equal_to<value_type>()); + __gnu_parallel::equal(v.begin(), v.end(), v.begin()); + __gnu_parallel::equal(v.begin(), v.end(), v.begin(), + std::equal_to<value_type>()); + std::find(v.begin(), v.end(), c); __gnu_parallel::find(v.begin(), v.end(), c); + + std::find_first_of(v.begin(), v.end(), v.begin(), v.end()); + std::find_first_of(v.begin(), v.end(), v.begin(), v.end(), + std::equal_to<value_type>()); + __gnu_parallel::find_first_of(v.begin(), v.end(), v.begin(), v.end()); + __gnu_parallel::find_first_of(v.begin(), v.end(), v.begin(), v.end(), + std::equal_to<value_type>()); + + std::search_n(v.begin(), v.end(), 5, value_type(1)); + std::search_n(v.begin(), v.end(), 5, value_type(1), + std::equal_to<value_type>()); + __gnu_parallel::search_n(v.begin(), v.end(), 5, value_type(1)); + __gnu_parallel::search_n(v.begin(), v.end(), 5, value_type(1), + std::equal_to<value_type>()); + + std::merge(v.begin(), v.end(), v.begin(), v.end(), result.begin()); + std::merge(v.begin(), v.end(), v.begin(), v.end(), result.begin(), + std::less<value_type>()); + __gnu_parallel::merge(v.begin(), v.end(), v.begin(), v.end(), + result.begin()); + __gnu_parallel::merge(v.begin(), v.end(), v.begin(), v.end(), + result.begin(), std::less<value_type>()); + + std::nth_element(v.begin(), v.begin() + 5, v.end()); + std::nth_element(v.begin(), v.begin() + 5, v.end(), std::less<value_type>()); + __gnu_parallel::nth_element(v.begin(), v.begin() + 5, v.end()); + __gnu_parallel::nth_element(v.begin(), v.begin() + 5, v.end(), + std::less<value_type>()); + + std::partial_sort(v.begin(), v.begin() + 5, v.end()); + std::partial_sort(v.begin(), v.begin() + 5, v.end(), + std::less<value_type>()); + __gnu_parallel::partial_sort(v.begin(), v.begin() + 5, v.end()); + __gnu_parallel::partial_sort(v.begin(), v.begin() + 5, v.end(), + std::less<value_type>()); + + std::min_element(v.begin(), v.end()); + std::min_element(v.begin(), v.end(), std::less<value_type>()); + __gnu_parallel::min_element(v.begin(), v.end()); + __gnu_parallel::min_element(v.begin(), v.end(), std::less<value_type>()); + + std::max_element(v.begin(), v.end()); + std::max_element(v.begin(), v.end(), std::less<value_type>()); + __gnu_parallel::max_element(v.begin(), v.end()); + __gnu_parallel::max_element(v.begin(), v.end(), std::less<value_type>()); } diff --git a/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed2.cc b/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed2.cc index 5a30b0ea781..56f95b6fbab 100644 --- a/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed2.cc +++ b/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed2.cc @@ -35,7 +35,59 @@ void test() const value_type c(0); - vector_type v(10); + vector_type v(10), result(20); + + std::equal(v.begin(), v.end(), v.begin()); + std::equal(v.begin(), v.end(), v.begin(), std::equal_to<value_type>()); + __gnu_parallel::equal(v.begin(), v.end(), v.begin()); + __gnu_parallel::equal(v.begin(), v.end(), v.begin(), + std::equal_to<value_type>()); + std::find(v.begin(), v.end(), c); __gnu_parallel::find(v.begin(), v.end(), c); + + std::find_first_of(v.begin(), v.end(), v.begin(), v.end()); + std::find_first_of(v.begin(), v.end(), v.begin(), v.end(), + std::equal_to<value_type>()); + __gnu_parallel::find_first_of(v.begin(), v.end(), v.begin(), v.end()); + __gnu_parallel::find_first_of(v.begin(), v.end(), v.begin(), v.end(), + std::equal_to<value_type>()); + + std::search_n(v.begin(), v.end(), 5, value_type(1)); + std::search_n(v.begin(), v.end(), 5, value_type(1), + std::equal_to<value_type>()); + __gnu_parallel::search_n(v.begin(), v.end(), 5, value_type(1)); + __gnu_parallel::search_n(v.begin(), v.end(), 5, value_type(1), + std::equal_to<value_type>()); + + std::merge(v.begin(), v.end(), v.begin(), v.end(), result.begin()); + std::merge(v.begin(), v.end(), v.begin(), v.end(), result.begin(), + std::less<value_type>()); + __gnu_parallel::merge(v.begin(), v.end(), v.begin(), v.end(), + result.begin()); + __gnu_parallel::merge(v.begin(), v.end(), v.begin(), v.end(), + result.begin(), std::less<value_type>()); + + std::nth_element(v.begin(), v.begin() + 5, v.end()); + std::nth_element(v.begin(), v.begin() + 5, v.end(), std::less<value_type>()); + __gnu_parallel::nth_element(v.begin(), v.begin() + 5, v.end()); + __gnu_parallel::nth_element(v.begin(), v.begin() + 5, v.end(), + std::less<value_type>()); + + std::partial_sort(v.begin(), v.begin() + 5, v.end()); + std::partial_sort(v.begin(), v.begin() + 5, v.end(), + std::less<value_type>()); + __gnu_parallel::partial_sort(v.begin(), v.begin() + 5, v.end()); + __gnu_parallel::partial_sort(v.begin(), v.begin() + 5, v.end(), + std::less<value_type>()); + + std::min_element(v.begin(), v.end()); + std::min_element(v.begin(), v.end(), std::less<value_type>()); + __gnu_parallel::min_element(v.begin(), v.end()); + __gnu_parallel::min_element(v.begin(), v.end(), std::less<value_type>()); + + std::max_element(v.begin(), v.end()); + std::max_element(v.begin(), v.end(), std::less<value_type>()); + __gnu_parallel::max_element(v.begin(), v.end()); + __gnu_parallel::max_element(v.begin(), v.end(), std::less<value_type>()); } diff --git a/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed1.cc b/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed1.cc index 59e70f62609..a1ce8f052ec 100644 --- a/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed1.cc +++ b/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed1.cc @@ -32,6 +32,17 @@ void test() const value_type c(0); vector_type v(10); + std::accumulate(v.begin(), v.end(), value_type(1)); + std::accumulate(v.begin(), v.end(), value_type(1), std::plus<value_type>()); __gnu_parallel::accumulate(v.begin(), v.end(), value_type(1)); + __gnu_parallel::accumulate(v.begin(), v.end(), value_type(1), + std::plus<value_type>()); + + std::inner_product(v.begin(), v.end(), v.begin(), value_type(1)); + std::inner_product(v.begin(), v.end(), v.begin(), value_type(1), + std::multiplies<value_type>(), std::plus<value_type>()); + __gnu_parallel::inner_product(v.begin(), v.end(), v.begin(), value_type(1)); + __gnu_parallel::inner_product(v.begin(), v.end(), v.begin(), value_type(1), + std::multiplies<value_type>(), std::plus<value_type>()); } diff --git a/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed2.cc b/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed2.cc index 189f5b9c72e..a38d92561d7 100644 --- a/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed2.cc +++ b/libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed2.cc @@ -37,6 +37,17 @@ void test() const value_type c(0); vector_type v(10); + std::accumulate(v.begin(), v.end(), value_type(1)); + std::accumulate(v.begin(), v.end(), value_type(1), std::plus<value_type>()); __gnu_parallel::accumulate(v.begin(), v.end(), value_type(1)); + __gnu_parallel::accumulate(v.begin(), v.end(), value_type(1), + std::plus<value_type>()); + + std::inner_product(v.begin(), v.end(), v.begin(), value_type(1)); + std::inner_product(v.begin(), v.end(), v.begin(), value_type(1), + std::multiplies<value_type>(), std::plus<value_type>()); + __gnu_parallel::inner_product(v.begin(), v.end(), v.begin(), value_type(1)); + __gnu_parallel::inner_product(v.begin(), v.end(), v.begin(), value_type(1), + std::multiplies<value_type>(), std::plus<value_type>()); } |