Come si imposta l'affinità del processore in Snow Leopard su un MacBook Pro? So che in Windows potresti semplicemente cambiarlo in Task Manager.
Come si imposta l'affinità del processore in Snow Leopard su un MacBook Pro? So che in Windows potresti semplicemente cambiarlo in Task Manager.
Risposte:
OS X supporta un'API di affinità di thread dalla versione 10.5. Ecco del materiale pertinente dalla pagina web a cui ho collegato.
Un insieme di affinità è una raccolta di thread che condividono risorse di memoria e desiderano condividere una cache L2. I set di affinità distinti rappresentano affinità separate, ovvero i thread appartenenti a un set diverso devono utilizzare una cache L2 separata e quindi essere eseguiti su processori logici diversi.
Un set di affinità è identificato da un "tag". I thread sono assegnati a un determinato set di affinità assegnandogli il tag che identifica quel set. Un thread può appartenere al massimo a un set di affinità; cioè, ha un tag di affinità.
Ad esempio, un'applicazione che desidera eseguire 2 thread in cache L2 separate imposta i thread con tag di affinità diversi. Su una macchina dual core, questa affinità verrà effettivamente ignorata. Tuttavia, su una MacPro a 4 core, lo scheduler proverà ad eseguire thread su pacchetti separati. Allo stesso modo, su una MacPro a 8 core, lo scheduler proverà a eseguire questi thread su die separati (che possono o meno essere nello stesso pacchetto di CPU fisica).
Un'applicazione che desidera posizionare un thread su ogni processore disponibile farebbe quanto segue:
- Ottieni il numero di processori sul sistema usando sysctl (3).
- Crea quel numero di thread.
- Imposta ogni thread con un tag di affinità distinto.
- Inizia tutte le discussioni.
I thread con criteri di affinità predefiniti verranno programmati più liberamente su qualsiasi processore. Questi thread verranno migrati preferenzialmente per essere eseguiti su un processore inattivo. I thread con tag di affinità tenderanno a rimanere al loro posto.
Consultare la fonte per elenchi di codice e informazioni sulla condivisione di tag di affinità tra processi padre e figlio, come ottenere la configurazione della cache della CPU e altro ancora.
http://developer.apple.com/mac/library/releasenotes/Performance/RN-AffinityAPI/
Mac OS X non esporta interfacce che identificano i processori o controllano il posizionamento dei thread: il collegamento esplicito tra thread e processori non è supportato . Invece, il kernel gestisce tutto il posizionamento dei thread. Le applicazioni prevedono che lo scheduler, nella maggior parte dei casi, eseguirà i propri thread utilizzando un buon posizionamento del processore rispetto all'affinità della cache.
Da http://images.apple.com/macosx/docs/OSX_for_UNIX_Users_TB_July2011.pdf
• Thread del kernel efficienti. Ogni thread POSIX è messo in coda su una particolare CPU, migliorando l'affinità e la scalabilità del processore riducendo al contempo la contesa tra i blocchi. I thread sono conformi a POSIX (1c), incluso il supporto per la cancellazione e i mutex condivisi.
Mi sembra una pubblicità, il mio iMac con Lion in esecuzione sembra rispettarlo per la maggior parte del tempo, ma non "fissa" un processo su un core.
Non sono riuscito a trovare alcuna API per controllare l'affinità di processo per darwin comunque.