Como o OS X decide quando trocar os processadores gráficos?

9

Uso meu MacBook Pro de 15 polegadas no início de 2011 para quase tudo sob o sol - monitoro frequentemente qual GPU está ativa usando gfxCardStatus . Percebi algumas idiossincrasias na maneira como o OS X decide quando alternar os processadores gráficos:

  • A maioria dos aplicativos que exigem o X11 acionará a troca automática, mas nem todos
  • Parece que todo aplicativo que requer java acionará a troca automática, embora eu não o tenha testado com aplicativos que não são da GUI.
  • Alguns aplicativos (como Mathematica ou XCode), que PODERAM exigir uma GPU de alto desempenho, forçarão o movimento para o cartão discreto imediatamente, mesmo que apenas sejam acionados para uma tarefa trivial (alternar dinamicamente no aplicativo seria interessante, fora de tópico)
  • Muitos aplicativos herdados (silverlight) que não têm nenhum negócio em pedir meu cartão discreto o forçarão de forma irrelevante
  • Finalmente, alguns aplicativos (GIMP, em particular) que definitivamente poderiam se beneficiar de uma GPU discreta, na verdade, não pedem nada.

A Apple documenta como escolhe quando trocar de cartão? Os aplicativos podem fazer uma solicitação no nível do sistema operacional para o cartão discreto, se existir?

agentroadkill
fonte
Os documentos de desenvolvedores da Apple podem ajudar: developer.apple.com/metal
Khürt Williams

Respostas:

5

Em um nível alto, é como uma transmissão automática - quando você pressiona o acelerador suavemente, o acelerador aumenta, mas quando você pisa no pedal do acelerador, o motor reduz a velocidade da transmissão para aumentar a vantagem mecânica.

Você pode influenciar a mudança para a poderosa GPU pressionando a API com um trabalho significativo e espera que a "transmissão" despache esse carregamento para a GPU não integrada.

A documentação da API está toda no Xcode (e online também, mas eu prefiro usar a pesquisa no Xcode para procurar um documento).

Eu começaria com:

  • xcdoc: //? url = developer.apple.com / library / etc / redirect / xcode / mac / 1153 / technotes / tn2335 / _index.html ( link on-line do mesmo artigo )

Esses links abrangem o Mac Pro e a seção "O que você deve saber ao usar o OpenCL" contém uma observação útil de que a Sessão 508 da WWDC 2013: Trabalhando com o OpenCL descreve como alternar entre duas GPUs em um Mac portátil usando considerações de energia.

bmike
fonte
Parece interessante. Vou verificar os documentos do Xcode quando estiver no meu Mac mais tarde.
agentroadkill
Portanto, para deixar claro: é de inteira responsabilidade do desenvolvedor do aplicativo decidir se o aplicativo deve usar gráficos discretos ou integrados? O sistema operacional não faz essa chamada em si?
agentroadkill
@agentroadkill Eu diria o contrário - o desenvolvedor pode perguntar ao sistema operacional o que está acontecendo agora e pode influenciar as coisas, mas o sistema operacional está decidindo agendar o trabalho com base em várias entradas conflitantes. Afinal, você pode ter dezenas de aplicativos na GPU da máquina continuamente.
bmike
Certo, o sistema operacional finalmente faz a ligação, mas de acordo com o artigo vinculado: para que 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.o desenvolvedor possa optar por enviar trabalho para essa GPU, o sistema operacional decidirá se é permitido e arbitrará isso, mas o aplicativo poderá enviar seu trabalho para lá, à vontade.
agentroadkill