Festlegen der Prozessoraffinität in Snow Leopard auf einem MacBook Pro Ich weiß, dass Sie unter Windows die Prozessoraffinität einfach im Task-Manager ändern können.
Festlegen der Prozessoraffinität in Snow Leopard auf einem MacBook Pro Ich weiß, dass Sie unter Windows die Prozessoraffinität einfach im Task-Manager ändern können.
Antworten:
OS X unterstützt seit Version 10.5 eine Thread-Affinitäts-API . Hier ist relevantes Material von der Webseite, auf die ich verlinkt habe.
Ein Affinitätssatz ist eine Sammlung von Threads, die gemeinsam Speicherressourcen nutzen und einen L2-Cache gemeinsam nutzen möchten. Unterschiedliche Affinitätssätze stellen separate Affinitäten dar. Das heißt, Threads, die zu einem anderen Satz gehören, sollten einen separaten L2-Cache verwenden und daher auf einem anderen logischen Prozessor ausgeführt werden.
Ein Affinitätssatz ist durch ein "Tag" gekennzeichnet. Threads werden einem bestimmten Affinitätssatz zugewiesen, indem dieser das Tag zugewiesen wird, das diesen Satz identifiziert. Ein Thread kann höchstens einem Affinitätssatz angehören. Das heißt, es hat ein Affinitäts-Tag.
Beispielsweise würde eine Anwendung, die 2 Threads in separaten L2-Caches ausführen möchte, die Threads mit unterschiedlichen Affinitäts-Tags festlegen. Auf einem Dual-Core-Computer wird diese Affinität effektiv ignoriert. Auf einem 4-Core-MacPro versucht der Scheduler jedoch, Threads auf separaten Paketen auszuführen. In ähnlicher Weise versucht der Scheduler auf einem 8-Core-MacPro, diese Threads auf separaten Dies auszuführen (die sich möglicherweise in demselben physischen CPU-Paket befinden oder nicht).
Eine Anwendung, die einen Thread auf jedem verfügbaren Prozessor platzieren möchte, würde Folgendes tun:
- Ermitteln Sie die Anzahl der Prozessoren im System mit sysctl (3).
- Erstellen Sie diese Anzahl von Threads.
- Stellen Sie jeden Thread mit einem eigenen Affinitäts-Tag ein.
- Starten Sie alle Threads.
Threads mit Standard-Affinitätsrichtlinie werden auf jedem Prozessor freier geplant. Diese Threads werden bevorzugt migriert, um auf einem inaktiven Prozessor ausgeführt zu werden. Threads mit Affinitäts-Tags bleiben in der Regel an Ort und Stelle.
In der Quelle finden Sie Codeauflistungen sowie Informationen zum Teilen von Affinitätstags zwischen übergeordneten und untergeordneten Prozessen, zum Abrufen der CPU-Cache-Konfiguration und vieles mehr.
http://developer.apple.com/mac/library/releasenotes/Performance/RN-AffinityAPI/
Mac OS X exportiert keine Schnittstellen, die Prozessoren identifizieren oder die Platzierung von Threads steuern. Eine explizite Bindung von Threads an Prozessoren wird nicht unterstützt . Stattdessen verwaltet der Kernel die gesamte Thread-Platzierung. Anwendungen erwarten, dass der Scheduler unter den meisten Umständen seine Threads mit einer guten Prozessorplatzierung in Bezug auf die Cache-Affinität ausführt.
Von http://images.apple.com/macosx/docs/OSX_for_UNIX_Users_TB_July2011.pdf
• Effiziente Kernel-Threads. Jeder POSIX-Thread wird auf einer bestimmten CPU in die Warteschlange gestellt, wodurch die Prozessoraffinität und Skalierbarkeit verbessert und gleichzeitig Sperrenkonflikte verringert werden. Die Threads entsprechen POSIX (1c), einschließlich der Unterstützung für die Löschung und gemeinsame Mutexe.
Für mich sieht es so aus, als würde meine iMac-Version von Lion dies die meiste Zeit respektieren, aber es wird kein Prozess auf den Punkt gebracht.
Ich konnte ohnehin keine API zur Steuerung der Prozessaffinität für Darwin finden.