1*523fa7a6SAndroid Build Coastguard Worker /* 2*523fa7a6SAndroid Build Coastguard Worker * Copyright (c) Meta Platforms, Inc. and affiliates. 3*523fa7a6SAndroid Build Coastguard Worker * All rights reserved. 4*523fa7a6SAndroid Build Coastguard Worker * 5*523fa7a6SAndroid Build Coastguard Worker * This source code is licensed under the BSD-style license found in the 6*523fa7a6SAndroid Build Coastguard Worker * LICENSE file in the root directory of this source tree. 7*523fa7a6SAndroid Build Coastguard Worker */ 8*523fa7a6SAndroid Build Coastguard Worker 9*523fa7a6SAndroid Build Coastguard Worker #pragma once 10*523fa7a6SAndroid Build Coastguard Worker 11*523fa7a6SAndroid Build Coastguard Worker #include <cstdint> 12*523fa7a6SAndroid Build Coastguard Worker #include <functional> 13*523fa7a6SAndroid Build Coastguard Worker 14*523fa7a6SAndroid Build Coastguard Worker namespace executorch { 15*523fa7a6SAndroid Build Coastguard Worker namespace extension { 16*523fa7a6SAndroid Build Coastguard Worker 17*523fa7a6SAndroid Build Coastguard Worker /** 18*523fa7a6SAndroid Build Coastguard Worker * A helper to run function in parallel. 19*523fa7a6SAndroid Build Coastguard Worker * 20*523fa7a6SAndroid Build Coastguard Worker * begin, end: describe the extent of the workitems via first and last workitem 21*523fa7a6SAndroid Build Coastguard Worker * to be processed 22*523fa7a6SAndroid Build Coastguard Worker * grain_size: number of workitems processed by user callback which is 23*523fa7a6SAndroid Build Coastguard Worker * described below 24*523fa7a6SAndroid Build Coastguard Worker * f: user function applied in parallel to the chunks, signature: 25*523fa7a6SAndroid Build Coastguard Worker * void f(int64_t begin, int64_t end) 26*523fa7a6SAndroid Build Coastguard Worker * Returns true if all work items are processed successfully, false otherwise 27*523fa7a6SAndroid Build Coastguard Worker * 28*523fa7a6SAndroid Build Coastguard Worker * Warning: parallel_for does NOT copy thread local states from the current 29*523fa7a6SAndroid Build Coastguard Worker * thread to the worker threads. Users need to protect the access to captured 30*523fa7a6SAndroid Build Coastguard Worker * data if they mutate them in f. 31*523fa7a6SAndroid Build Coastguard Worker */ 32*523fa7a6SAndroid Build Coastguard Worker bool parallel_for( 33*523fa7a6SAndroid Build Coastguard Worker const int64_t begin, 34*523fa7a6SAndroid Build Coastguard Worker const int64_t end, 35*523fa7a6SAndroid Build Coastguard Worker const int64_t grain_size, 36*523fa7a6SAndroid Build Coastguard Worker const std::function<void(int64_t, int64_t)>& f); 37*523fa7a6SAndroid Build Coastguard Worker 38*523fa7a6SAndroid Build Coastguard Worker int64_t get_thread_num(); 39*523fa7a6SAndroid Build Coastguard Worker 40*523fa7a6SAndroid Build Coastguard Worker void set_thread_num(int64_t thread_num); 41*523fa7a6SAndroid Build Coastguard Worker 42*523fa7a6SAndroid Build Coastguard Worker } // namespace extension 43*523fa7a6SAndroid Build Coastguard Worker } // namespace executorch 44*523fa7a6SAndroid Build Coastguard Worker 45*523fa7a6SAndroid Build Coastguard Worker namespace torch { 46*523fa7a6SAndroid Build Coastguard Worker namespace executor { 47*523fa7a6SAndroid Build Coastguard Worker // TODO(T197294990): Remove these deprecated aliases once all users have moved 48*523fa7a6SAndroid Build Coastguard Worker // to the new `::executorch` namespaces. 49*523fa7a6SAndroid Build Coastguard Worker using ::executorch::extension::get_thread_num; 50*523fa7a6SAndroid Build Coastguard Worker using ::executorch::extension::parallel_for; 51*523fa7a6SAndroid Build Coastguard Worker using ::executorch::extension::set_thread_num; 52*523fa7a6SAndroid Build Coastguard Worker } // namespace executor 53*523fa7a6SAndroid Build Coastguard Worker } // namespace torch 54