blob: 8b174075ae9b7e5a627553d51295b08986380dc3 [file] [log] [blame] [edit]
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <cstdint>
#include <functional>
namespace executorch {
namespace extension {
/**
* A helper to run function in parallel.
*
* begin, end: describe the extent of the workitems via first and last workitem
* to be processed
* grain_size: number of workitems processed by user callback which is
* described below
* f: user function applied in parallel to the chunks, signature:
* void f(int64_t begin, int64_t end)
* Returns true if all work items are processed successfully, false otherwise
*
* Warning: parallel_for does NOT copy thread local states from the current
* thread to the worker threads. Users need to protect the access to captured
* data if they mutate them in f.
*/
bool parallel_for(
const int64_t begin,
const int64_t end,
const int64_t grain_size,
const std::function<void(int64_t, int64_t)>& f);
int64_t get_thread_num();
void set_thread_num(int64_t thread_num);
} // namespace extension
} // namespace executorch
namespace torch {
namespace executor {
// TODO(T197294990): Remove these deprecated aliases once all users have moved
// to the new `::executorch` namespaces.
using ::executorch::extension::get_thread_num;
using ::executorch::extension::parallel_for;
using ::executorch::extension::set_thread_num;
} // namespace executor
} // namespace torch