12#include <dr/concepts/concepts.hpp>
13#include <dr/detail/logger.hpp>
14#include <dr/detail/onedpl_direct_iterator.hpp>
15#include <dr/detail/ranges_shim.hpp>
16#include <dr/detail/sycl_utils.hpp>
17#include <dr/mp/global.hpp>
23 dr::drlog.debug(dr::logger::for_each,
"for_each: parallel execution\n");
29 for (
const auto &s : local_segments(dr)) {
31 dr::drlog.debug(
" using sycl\n");
33 assert(rng::distance(s) > 0);
34#ifdef SYCL_LANGUAGE_VERSION
35 dr::__detail::parallel_for(
36 dr::mp::sycl_queue(), sycl::range<1>(rng::distance(s)),
37 [first = rng::begin(s), op](
auto idx) { op(first[idx]); })
43 dr::drlog.debug(
" using cpu\n");
51template <dr::distributed_iterator DI>
52void for_each(DI first, DI last,
auto op) {
53 mp::for_each(rng::subrange(first, last), op);
57template <dr::distributed_iterator DI, std::
integral I>
58DI for_each_n(DI first, I n,
auto op) {
60 rng::advance(last, n);
61 mp::for_each(first, last, op);
Definition: concepts.hpp:20