Support for Hybrid CPU architectures
Would it be possible to add an API to specify the type of core that we would like a taskset to run on?
I can think of various ways this could work from a user standpoint:
a) Always try to schedule on p-cores unless the user explicitly requests/allows running on an e-core b) Require user to provide CPU preference at task creation: "Any/P-core/E-core"
As for implementation this is tricky as win10 and win11 have different ways to manage this but seeing as win10 is EOL next year, not supporting it might be perfectly fine. No idea about support for this on *nix/OSX/etc...
Some more information for the available options: https://www.intel.com/content/www/us/en/developer/articles/guide/12th-gen-intel-core-processor-gamedev-guide.html
This does seem like it would be useful, not just because you might want to set some threads on certain core types but also because you want to group work together on cores which share caches.
I'm already considering a 'thread group' affinity mechanism related to issue #130, but haven't had the time to implement that yet. When combined with some way of getting more information about processors this could be even more useful. One issue is making the processor information API generic enough to cover the architectures out there, but specific enough to be useful. I'll have a think.
Hello, is there any update to this issue? I'd like something similar for this use.
There's no update on this, and it's not likely to happen soon without some core changes to enkiTS, which I have planned but haven't had the time to do as yet.
The work-stealing design of enkiTS means that if you divide your tasksets up sufficiently the p-cores will take on more work the e-cores.
It should also be possible to use two enkiTS schedulers and use os calls on each thread (using PinnedTasks) to place one schedulers tasks on e-cores and the other on p-cores, then distribute tasks to each in your own code.