diff options
author | Georgios Pinitas <georgios.pinitas@arm.com> | 2020-07-09 18:38:34 +0100 |
---|---|---|
committer | Georgios Pinitas <georgios.pinitas@arm.com> | 2020-07-10 12:38:43 +0000 |
commit | 06e890b1475243145d64c7d56dfb4a262a17b09f (patch) | |
tree | de5c3da28868f0607faf2b1b4d3ab6167d99f776 /arm_compute/runtime/IScheduler.h | |
parent | c8e6e2c48e558da0c0698428fe496491e18c022a (diff) | |
download | ComputeLibrary-06e890b1475243145d64c7d56dfb4a262a17b09f.tar.gz |
COMPMID-3565: Exposes interface to enable thread binding
Expose `set_num_threads_with_affinity` as an interface to the `IScheduler` to
allow binding of threads to given logical cores.
Signed-off-by: Georgios Pinitas <georgios.pinitas@arm.com>
Change-Id: I062db7caafb0101972ba45d31ee9e61b26800127
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/3481
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Michalis Spyrou <michalis.spyrou@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'arm_compute/runtime/IScheduler.h')
-rw-r--r-- | arm_compute/runtime/IScheduler.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/arm_compute/runtime/IScheduler.h b/arm_compute/runtime/IScheduler.h index 9382c20b29..fff77274bd 100644 --- a/arm_compute/runtime/IScheduler.h +++ b/arm_compute/runtime/IScheduler.h @@ -47,6 +47,13 @@ public: DYNAMIC, /**< Split the workload dynamically using a bucket system */ }; + /** Function to be used and map a given thread id to a logical core id + * + * Mapping function expects the thread index and total number of cores as input, + * and returns the logical core index to bind against + */ + using BindFunc = std::function<int(int, int)>; + /** When arm_compute::ISchedular::Hints::_split_dimension is initialized with this value * then the schedular is free to break down the problem space over as many dimensions * as it wishes @@ -137,6 +144,13 @@ public: */ virtual void set_num_threads(unsigned int num_threads) = 0; + /** Sets the number of threads the scheduler will use to run the kernels but also using a binding function to pin the threads to given logical cores + * + * @param[in] num_threads If set to 0, then one thread per CPU core available on the system will be used, otherwise the number of threads specified. + * @param[in] func Binding function to use. + */ + virtual void set_num_threads_with_affinity(unsigned int num_threads, BindFunc func); + /** Returns the number of threads that the SingleThreadScheduler has in his pool. * * @return Number of threads available in SingleThreadScheduler. |