Есть ли способ подсчитать высокопроизводительные ядра на гетерогенных многоядерных процессорах?
В модели Heterogeneous MultiProcessing разные ядра ЦП или SoC не имеют одинаковых профилей производительности. В то время как системы HMP впервые были развернуты некоторое время назад (в вики упоминается, что Samsung начала использовать эту модель еще в 2013 году), они достигают апогея с серией Apple M (технически это уже была проблема с HyperThreading, которую можно считать формой HMP, я думаю).
Параллелизованные инструменты обычно пытаются угадать количество рабочих, которые они должны создать, подсчитывая количество ядер в системе, однако в модели HMP это может быть контрпродуктивно, особенно для персональных устройств: хотя «эффективные» ядра технически доступны, они имеют низкую производительность, их загрузка не даст огромного прироста производительности и может сильно повлиять на интерактивность/приятность взаимодействия с системой. Обычно это настраивается (так что пользователь может установить что-то более разумное), но по умолчанию лучше разделить такие инструменты только на «высокопроизводительные» ядра (по крайней мере, предполагая, что они привязаны к ЦП), оставляя пользователям возможность увеличить резидентность. если они так решат.
Итак, есть ли портативный способ перечислить и отделить «настоящие» и «высокопроизводительные» ядра от «виртуальных» и «эффективных» ядер?
Примечание. Я видел 68444429 «как я могу отличить высокопроизводительные и низкопроизводительные ядра в C++» , хотя название похоже, вопрос и цели довольно разные, поскольку цель здесь состоит в том, чтобы избежать создания ненужной и неэффективной работы по умолчанию. .