Como você define a afinidade do processador no Snow Leopard em um MacBook Pro? Eu sei que no Windows você pode trocá-lo no Gerenciador de tarefas.
Como você define a afinidade do processador no Snow Leopard em um MacBook Pro? Eu sei que no Windows você pode trocá-lo no Gerenciador de tarefas.
Respostas:
O OS X suporta uma API de afinidade de encadeamento desde a versão 10.5. Aqui está um material relevante da página à qual eu vinculei.
Um conjunto de afinidades é uma coleção de threads que compartilham recursos de memória e desejam compartilhar um cache L2. Conjuntos distintos de afinidade representam afinidades separadas - ou seja, encadeamentos pertencentes a um conjunto diferente devem usar um cache L2 separado e, portanto, ser executados em processadores lógicos diferentes.
Um conjunto de afinidades é identificado por uma "tag". Os segmentos são atribuídos a um conjunto de afinidades específico, atribuindo a ele a tag que identifica esse conjunto. Um encadeamento pode pertencer a no máximo um conjunto de afinidades; isto é, possui uma tag de afinidade.
Por exemplo, um aplicativo que deseja executar 2 threads em caches L2 separados definiria os threads com diferentes tags de afinidade. Em uma máquina com núcleo duplo, essa afinidade será efetivamente ignorada. No entanto, em um MacPro de 4 núcleos, o agendador tentará executar threads em pacotes separados. Da mesma forma, em um MacPro de 8 núcleos, o agendador tentará executar esses threads em matrizes separadas (que podem ou não estar no mesmo pacote físico da CPU).
Um aplicativo que deseja colocar um encadeamento em todos os processadores disponíveis faria o seguinte:
- Obtenha o número de processadores no sistema usando sysctl (3).
- Crie esse número de threads.
- Defina cada segmento com uma marca de afinidade distinta.
- Inicie todos os threads.
Threads com política de afinidade padrão serão agendados mais livremente em qualquer processador. Esses encadeamentos serão migrados preferencialmente para executar em um processador inativo. Threads com tags de afinidade tendem a permanecer no lugar.
Consulte a fonte para listagens de código e informações sobre o compartilhamento de tags de afinidade entre processos pai e filho, obtendo a configuração do cache da CPU e muito mais.
http://developer.apple.com/mac/library/releasenotes/Performance/RN-AffinityAPI/
O Mac OS X não exporta interfaces que identificam processadores ou controlam o posicionamento do encadeamento - o encadeamento explícito do encadeamento ao processador não é suportado . Em vez disso, o kernel gerencia todo o posicionamento do encadeamento. Os aplicativos esperam que, na maioria das circunstâncias, o planejador execute seus encadeamentos usando uma boa localização do processador com relação à afinidade do cache.
De http://images.apple.com/macosx/docs/OSX_for_UNIX_Users_TB_July2011.pdf
• Threads eficientes do kernel. Cada encadeamento POSIX é enfileirado em uma CPU específica, melhorando a afinidade e a escalabilidade do processador enquanto reduz a contenção de bloqueio. Os encadeamentos estão em conformidade com o POSIX (1c), incluindo suporte para cancelamento e mutexes compartilhados.
Parece um anúncio para mim, meu iMac executando o Lion parece respeitar isso na maioria das vezes, mas não 'fixa' um processo em um núcleo.
Não consegui encontrar nenhuma API para controlar a afinidade do processo para darwin de qualquer maneira.