Path: blob/master/thirdparty/embree/common/algorithms/parallel_any_of.h
9912 views
// Copyright 2009-2021 Intel Corporation1// SPDX-License-Identifier: Apache-2.023#pragma once45#include <functional>6#include "parallel_reduce.h"78namespace embree9{1011template<typename Index, class UnaryPredicate>12__forceinline bool parallel_any_of (Index first, Index last, UnaryPredicate pred)13{14std::atomic_bool ret;15ret = false;1617#if defined(TASKING_TBB)18#if TBB_INTERFACE_VERSION >= 1200219tbb::task_group_context context;20tbb::parallel_for(tbb::blocked_range<size_t>{first, last}, [&ret,pred,&context](const tbb::blocked_range<size_t>& r) {21if (context.is_group_execution_cancelled()) return;22for (size_t i = r.begin(); i != r.end(); ++i) {23if (pred(i)) {24ret = true;25context.cancel_group_execution();26}27}28});29#else30tbb::parallel_for(tbb::blocked_range<size_t>{first, last}, [&ret,pred](const tbb::blocked_range<size_t>& r) {31if (tbb::task::self().is_cancelled()) return;32for (size_t i = r.begin(); i != r.end(); ++i) {33if (pred(i)) {34ret = true;35tbb::task::self().cancel_group_execution();36}37}38});39#endif40#else41ret = parallel_reduce (first, last, false, [pred](const range<size_t>& r)->bool {42bool localret = false;43for (auto i=r.begin(); i<r.end(); ++i) {44localret |= pred(i);45}46return localret;47},48std::bit_or<bool>()49);50#endif5152return ret;53}5455} // end namespace565758