Как OS X решает, когда переключать графические процессоры?

9

Я использую свой 15-дюймовый MacBook Pro 2011 года почти для всего под солнцем - я часто отслеживаю, какой графический процессор активен, используя gfxCardStatus . Я заметил некоторые особенности того, как OS X решает, когда переключать графические процессоры:

  • Большинство приложений, которым требуется X11, активируют автоматическое переключение, но не все
  • Кажется, каждое приложение, для которого требуется java, запускает автоматическое переключение, хотя я не проверял это с приложениями, не использующими графический интерфейс.
  • Некоторые приложения (например, Mathematica или XCode), которые МОГУТ требовать высокопроизводительного графического процессора, сразу заставят перейти на дискретную карту, даже если запускать только для тривиальной задачи (динамическое переключение в приложении было бы круто, не по теме)
  • Многие унаследованные приложения (silverlight), которые не имеют бизнеса, запрашивающие мою дискретную карту, заставят ее без промедления
  • Наконец, некоторые приложения (в частности, GIMP), которые могли бы определенно выиграть от дискретного графического процессора, на самом деле вообще не просят об этом.

Документирует ли Apple, как она выбирает, когда менять карты? Могут ли приложения сделать запрос на уровне ОС для дискретной карты, если она существует?

agentroadkill
источник
Документы Apple Developer могут помочь: developer.apple.com/metal
Khürt Williams

Ответы:

5

На высоком уровне это похоже на автоматическую коробку передач - когда вы мягко нажимаете на газ, дроссель увеличивается, но когда вы нажимаете педаль акселератора, двигатель понижает передачу, чтобы увеличить механическое преимущество.

Вы можете повлиять на переход к мощному графическому процессору, выполнив значительную работу с API и ожидая, что «передача» отправит эту нагрузку на неинтегрированный графический процессор.

Вся документация по API находится в XCode (и в Интернете тоже, но я предпочитаю использовать поиск по XCode для поиска документа).

Я бы начал с:

Эти ссылки охватывают Mac Pro, а в разделе «Что следует знать при использовании OpenCL» содержится полезное примечание, в котором на WWDC 2013 Session 508: Работа с OpenCL описывается, как переключаться между двумя графическими процессорами в портативном Mac с учетом энергопотребления.

bmike
источник
Выглядит интересно. Я проверю документы Xcode, когда буду на моем Mac позже.
agentroadkill
Итак, чтобы быть ясным - разработчик приложения должен полностью решить, должно ли приложение использовать дискретную или интегрированную графику? ОС не делает этот вызов сам?
agentroadkill
@agentroadkill Я бы сказал, что наоборот - разработчик может спросить ОС, что происходит сейчас, и может повлиять на ситуацию, но ОС решает запланировать работу на основе нескольких противоречивых входов. В конце концов, вы можете постоянно получать десятки обращений к графическим процессорам.
Bmike
Правильно, операционная система, в конечном счете, выполняет вызов, но согласно связанной статье: DeviceSelectCL shows how to identify the offline GPU that is not connected to a display, and then use the CL device corresponding to this GPU.поэтому разработчик может решить перенести работу на этот графический процессор, операционная система решит, разрешено ли это, и разрешит это, но приложение может выполнить свою работу там, по желанию.
agentroadkill