Как установить привязку к процессору в Snow Leopard на MacBook Pro?Я знаю, что в Windows вы можете просто переключить его в диспетчере задач.
4 ответа
OS X поддерживает API схожести потоков с версии 10.5. Вот некоторые соответствующие материалы с веб-страницы, на которую я ссылаюсь.
Affinity Set
Набор сходства - это набор потоков, которые совместно используют ресурсы памяти и хотят совместно использовать кэш L2. Наборы различного сходства представляют отдельные сходства, то есть потоки, принадлежащие другому набору, должны использовать отдельный кэш L2 и, следовательно, работать на разных логических процессорах.
Набор сходства идентифицируется с помощью "тега". Потоки присваиваются определенному набору сродства путем назначения ему тега, идентифицирующего этот набор. Поток может принадлежать не более чем одному набору сходства; то есть у него есть один тег сродства.
Эффект установки отличительных тегов сходства
Например, приложение, желающее запустить 2 потока на отдельных кэшах L2, установило бы потоки с разными тегами сходства. На двухъядерной машине это сходство будет эффективно игнорироваться. Однако на 4-ядерном MacPro планировщик будет пытаться запускать потоки в отдельных пакетах. Точно так же на 8-ядерном MacPro планировщик попытается запустить эти потоки на разных матрицах (которые могут быть или не быть в одном и том же физическом пакете ЦП).
Пример использования
Приложение, которое хочет разместить поток на каждом доступном процессоре, сделает следующее:
- Получите количество процессоров в системе, используя sysctl(3).
- Создайте это количество потоков.
- Установите каждый поток с отдельным тегом сходства.
- Запустить все темы.
Потоки с политикой соответствия по умолчанию будут более свободно планироваться на любом процессоре. Эти потоки будут преимущественно перенесены для работы на свободном процессоре. Потоки с тегами сходства будут стремиться оставаться на своих местах.
Обратитесь к источнику за списками кода и информацией о совместном использовании тегов сходства между родительскими и дочерними процессами, получении конфигурации кэша ЦП и многом другом.
http://developer.apple.com/mac/library/releasenotes/Performance/RN-AffinityAPI/
Mac OS X не экспортирует интерфейсы, которые идентифицируют процессоры или управляют размещением потоков - явная привязка потоков к процессорам не поддерживается. Вместо этого ядро управляет размещением всех потоков. Приложения ожидают, что планировщик в большинстве случаев будет запускать свои потоки, используя хорошее размещение процессора в отношении сродства кеша.
До сих пор планировщик XNU (1504.3.12) не реализовывал привязку процессора к процессам и потокам.
Так что MacOSX не предоставляет никаких средств для этого.
От http://images.apple.com/macosx/docs/OSX_for_UNIX_Users_TB_July2011.pdf
• Эффективные потоки ядра. Каждый поток POSIX ставится в очередь на конкретном процессоре, улучшая сродство процессора и масштабируемость, одновременно уменьшая конфликт блокировки. Потоки соответствуют POSIX (1c), включая поддержку отмены и общих мьютексов.
Это выглядит как реклама для меня, мой iMac под управлением Lion выглядит уважающим это большую часть времени, но это не «закрепляет» процесс до ядра.
В любом случае я не смог найти API для управления сродством процесса к Дарвину.