File tree Expand file tree Collapse file tree 3 files changed +48
-2
lines changed Expand file tree Collapse file tree 3 files changed +48
-2
lines changed Original file line number Diff line number Diff line change @@ -34,7 +34,10 @@ def define_common_targets():
3434 ],
3535 exported_preprocessor_flags = [
3636 "-DET_USE_THREADPOOL" ,
37- ],
37+ ] + (
38+ # Default to perf heuristic (0) in OSS, all cores (-1) otherwise.
39+ ["-DEXECUTORCH_THREADPOOL_SIZE=0" ] if runtime .is_oss else ["-DEXECUTORCH_THREADPOOL_SIZE=-1" ]
40+ ),
3841 visibility = [
3942 "//executorch/..." ,
4043 "//executorch/backends/..." ,
Original file line number Diff line number Diff line change 66 * LICENSE file in the root directory of this source tree.
77 */
88
9+ #include < executorch/extension/threadpool/cpuinfo_utils.h>
910#include < executorch/extension/threadpool/threadpool.h>
1011
1112#include < algorithm>
@@ -101,7 +102,23 @@ ThreadPool* get_threadpool() {
101102 return nullptr ; // NOLINT(facebook-hte-NullableReturn)
102103 }
103104
104- int num_threads = cpuinfo_get_processors_count ();
105+ int num_cores = cpuinfo_get_processors_count ();
106+
107+ // Choose the number of threads according to the EXECUTORCH_THREADPOOL_SIZE
108+ // value. See the description in threadpool.h.
109+
110+ #if defined(EXECUTORCH_THREADPOOL_SIZE) && ((EXECUTORCH_THREADPOOL_SIZE) > 0)
111+ // Use an explicit threadpool size.
112+ int num_threads = EXECUTORCH_THREADPOOL_SIZE;
113+ #elif defined(EXECUTORCH_THREADPOOL_SIZE) && \
114+ ((EXECUTORCH_THREADPOOL_SIZE) == -1 )
115+ // Use threads=cores.
116+ int num_threads = num_cores;
117+ #else
118+ // Use a performance heuristic.
119+ int num_threads = ::executorch::extension::cpuinfo::get_num_performant_cores ();
120+ #endif
121+
105122 /*
106123 * For llvm-tsan, holding limit for the number of locks for a single thread
107124 * is 63 (because of comparison < 64 instead of <=). pthreadpool's worst
Original file line number Diff line number Diff line change 1414
1515#include < pthreadpool.h>
1616
17+ /*
18+ * Threadpool Options:
19+ *
20+ * Threadpool size has a sizble affect on performance. The following
21+ * options are exposed to control the threadpool size.
22+ *
23+ * EXECUTORCH_THREADPOOL_SIZE: int - Set the size of the threadpool,
24+ * in number of threads.
25+ *
26+ * Special Values:
27+ * - 0: Use a perforance heuristic to determine the default size,
28+ * based on the active hardware. This is the default mode
29+ * for CMake.
30+ * - -1: Set the thread count equal to the number of cores on the
31+ * active hardware.
32+ *
33+ * Any other positive value will be interpreted as a thread count.
34+ * For example, setting EXECUTORCH_THREADPOOL_SIZE=4 will default
35+ * the threadpool to use 4 threads.
36+ */
37+
38+ #ifndef EXECUTORCH_THREADPOOL_SIZE
39+ // Default to using a runtime heuristic.
40+ #define EXECUTORCH_THREADPOOL_SIZE 0
41+ #endif
42+
1743namespace executorch ::extension::threadpool {
1844
1945class ThreadPool final {
You can’t perform that action at this time.
0 commit comments