12b2e7f6eSNikolas Klauser //===----------------------------------------------------------------------===//
22b2e7f6eSNikolas Klauser //
32b2e7f6eSNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42b2e7f6eSNikolas Klauser // See https://llvm.org/LICENSE.txt for license information.
52b2e7f6eSNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62b2e7f6eSNikolas Klauser //
72b2e7f6eSNikolas Klauser //===----------------------------------------------------------------------===//
82b2e7f6eSNikolas Klauser
92b2e7f6eSNikolas Klauser #include <__algorithm/min.h>
102b2e7f6eSNikolas Klauser #include <__config>
11*d423d80eSLouis Dionne #include <__pstl/backends/libdispatch.h>
122b2e7f6eSNikolas Klauser #include <dispatch/dispatch.h>
132b2e7f6eSNikolas Klauser
142b2e7f6eSNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_STD
15a3ce29f7SLouis Dionne namespace __pstl::__libdispatch {
162b2e7f6eSNikolas Klauser
__dispatch_apply(size_t chunk_count,void * context,void (* func)(void * context,size_t chunk))172b2e7f6eSNikolas Klauser void __dispatch_apply(size_t chunk_count, void* context, void (*func)(void* context, size_t chunk)) noexcept {
182b2e7f6eSNikolas Klauser ::dispatch_apply_f(chunk_count, DISPATCH_APPLY_AUTO, context, func);
192b2e7f6eSNikolas Klauser }
202b2e7f6eSNikolas Klauser
__partition_chunks(ptrdiff_t element_count)21051c8630SNikolas Klauser __chunk_partitions __partition_chunks(ptrdiff_t element_count) noexcept {
222b2e7f6eSNikolas Klauser __chunk_partitions partitions;
23051c8630SNikolas Klauser partitions.__chunk_count_ = std::max<ptrdiff_t>(1, element_count / 256);
242b2e7f6eSNikolas Klauser partitions.__chunk_size_ = element_count / partitions.__chunk_count_;
25051c8630SNikolas Klauser partitions.__first_chunk_size_ = element_count - (partitions.__chunk_count_ - 1) * partitions.__chunk_size_;
2668b10359SNikolas Klauser if (partitions.__chunk_count_ == 0 && element_count > 0)
2768b10359SNikolas Klauser partitions.__chunk_count_ = 1;
282b2e7f6eSNikolas Klauser return partitions;
292b2e7f6eSNikolas Klauser }
302b2e7f6eSNikolas Klauser
31a3ce29f7SLouis Dionne } // namespace __pstl::__libdispatch
322b2e7f6eSNikolas Klauser _LIBCPP_END_NAMESPACE_STD
33