diff options
Diffstat (limited to 'contrib/llvm-project/libcxx/include/__pstl/internal/omp/parallel_merge.h')
| -rw-r--r-- | contrib/llvm-project/libcxx/include/__pstl/internal/omp/parallel_merge.h | 98 |
1 files changed, 0 insertions, 98 deletions
diff --git a/contrib/llvm-project/libcxx/include/__pstl/internal/omp/parallel_merge.h b/contrib/llvm-project/libcxx/include/__pstl/internal/omp/parallel_merge.h deleted file mode 100644 index e6f82c5e1866..000000000000 --- a/contrib/llvm-project/libcxx/include/__pstl/internal/omp/parallel_merge.h +++ /dev/null @@ -1,98 +0,0 @@ -// -*- C++ -*- -// -*-===----------------------------------------------------------------------===// -// -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// -//===----------------------------------------------------------------------===// - -#ifndef _PSTL_INTERNAL_OMP_PARALLEL_MERGE_H -#define _PSTL_INTERNAL_OMP_PARALLEL_MERGE_H - -#include "util.h" - -namespace __pstl -{ -namespace __omp_backend -{ - -template <typename _RandomAccessIterator1, typename _RandomAccessIterator2, typename _RandomAccessIterator3, - typename _Compare, typename _LeafMerge> -void -__parallel_merge_body(std::size_t __size_x, std::size_t __size_y, _RandomAccessIterator1 __xs, - _RandomAccessIterator1 __xe, _RandomAccessIterator2 __ys, _RandomAccessIterator2 __ye, - _RandomAccessIterator3 __zs, _Compare __comp, _LeafMerge __leaf_merge) -{ - - if (__size_x + __size_y <= __omp_backend::__default_chunk_size) - { - __leaf_merge(__xs, __xe, __ys, __ye, __zs, __comp); - return; - } - - _RandomAccessIterator1 __xm; - _RandomAccessIterator2 __ym; - - if (__size_x < __size_y) - { - __ym = __ys + (__size_y / 2); - __xm = std::upper_bound(__xs, __xe, *__ym, __comp); - } - else - { - __xm = __xs + (__size_x / 2); - __ym = std::lower_bound(__ys, __ye, *__xm, __comp); - } - - auto __zm = __zs + (__xm - __xs) + (__ym - __ys); - - _PSTL_PRAGMA(omp task untied mergeable default(none) - firstprivate(__xs, __xm, __ys, __ym, __zs, __comp, __leaf_merge)) - __pstl::__omp_backend::__parallel_merge_body(__xm - __xs, __ym - __ys, __xs, __xm, __ys, __ym, __zs, __comp, - __leaf_merge); - - _PSTL_PRAGMA(omp task untied mergeable default(none) - firstprivate(__xm, __xe, __ym, __ye, __zm, __comp, __leaf_merge)) - __pstl::__omp_backend::__parallel_merge_body(__xe - __xm, __ye - __ym, __xm, __xe, __ym, __ye, __zm, __comp, - __leaf_merge); - - _PSTL_PRAGMA(omp taskwait) -} - -template <class _ExecutionPolicy, typename _RandomAccessIterator1, typename _RandomAccessIterator2, - typename _RandomAccessIterator3, typename _Compare, typename _LeafMerge> -void -__parallel_merge(__pstl::__internal::__openmp_backend_tag, _ExecutionPolicy&& /*__exec*/, _RandomAccessIterator1 __xs, - _RandomAccessIterator1 __xe, _RandomAccessIterator2 __ys, _RandomAccessIterator2 __ye, - _RandomAccessIterator3 __zs, _Compare __comp, _LeafMerge __leaf_merge) - -{ - std::size_t __size_x = __xe - __xs; - std::size_t __size_y = __ye - __ys; - - /* - * Run the merge in parallel by chunking it up. Use the smaller range (if any) as the iteration range, and the - * larger range as the search range. - */ - - if (omp_in_parallel()) - { - __pstl::__omp_backend::__parallel_merge_body(__size_x, __size_y, __xs, __xe, __ys, __ye, __zs, __comp, - __leaf_merge); - } - else - { - _PSTL_PRAGMA(omp parallel) - { - _PSTL_PRAGMA(omp single nowait) - __pstl::__omp_backend::__parallel_merge_body(__size_x, __size_y, __xs, __xe, __ys, __ye, __zs, __comp, - __leaf_merge); - } - } -} - -} // namespace __omp_backend -} // namespace __pstl -#endif // _PSTL_INTERNAL_OMP_PARALLEL_MERGE_H |
