diff options
Diffstat (limited to 'contrib/llvm-project/libcxx/include/__pstl/internal/omp/parallel_reduce.h')
| -rw-r--r-- | contrib/llvm-project/libcxx/include/__pstl/internal/omp/parallel_reduce.h | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/contrib/llvm-project/libcxx/include/__pstl/internal/omp/parallel_reduce.h b/contrib/llvm-project/libcxx/include/__pstl/internal/omp/parallel_reduce.h deleted file mode 100644 index 841d48fc3051..000000000000 --- a/contrib/llvm-project/libcxx/include/__pstl/internal/omp/parallel_reduce.h +++ /dev/null @@ -1,73 +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_REDUCE_H -#define _PSTL_INTERNAL_OMP_PARALLEL_REDUCE_H - -#include "util.h" - -namespace __pstl -{ -namespace __omp_backend -{ - -template <class _RandomAccessIterator, class _Value, typename _RealBody, typename _Reduction> -_Value -__parallel_reduce_body(_RandomAccessIterator __first, _RandomAccessIterator __last, _Value __identity, - _RealBody __real_body, _Reduction __reduce) -{ - if (__should_run_serial(__first, __last)) - { - return __real_body(__first, __last, __identity); - } - - auto __middle = __first + ((__last - __first) / 2); - _Value __v1(__identity), __v2(__identity); - __parallel_invoke_body( - [&]() { __v1 = __parallel_reduce_body(__first, __middle, __identity, __real_body, __reduce); }, - [&]() { __v2 = __parallel_reduce_body(__middle, __last, __identity, __real_body, __reduce); }); - - return __reduce(__v1, __v2); -} - -//------------------------------------------------------------------------ -// Notation: -// r(i,j,init) returns reduction of init with reduction over [i,j) -// c(x,y) combines values x and y that were the result of r -//------------------------------------------------------------------------ - -template <class _ExecutionPolicy, class _RandomAccessIterator, class _Value, typename _RealBody, typename _Reduction> -_Value -__parallel_reduce(__pstl::__internal::__openmp_backend_tag, _ExecutionPolicy&&, _RandomAccessIterator __first, - _RandomAccessIterator __last, _Value __identity, _RealBody __real_body, _Reduction __reduction) -{ - // We don't create a nested parallel region in an existing parallel region: - // just create tasks. - if (omp_in_parallel()) - { - return __pstl::__omp_backend::__parallel_reduce_body(__first, __last, __identity, __real_body, __reduction); - } - - // In any case (nested or non-nested) one parallel region is created and only - // one thread creates a set of tasks. - _Value __res = __identity; - - _PSTL_PRAGMA(omp parallel) - _PSTL_PRAGMA(omp single nowait) - { - __res = __pstl::__omp_backend::__parallel_reduce_body(__first, __last, __identity, __real_body, __reduction); - } - - return __res; -} - -} // namespace __omp_backend -} // namespace __pstl -#endif // _PSTL_INTERNAL_OMP_PARALLEL_REDUCE_H |
