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.
Affinity-Set
Eine Affinitätsgruppe ist eine Sammlung von Threads, die Speicherressourcen gemeinsam nutzen und einen L2-Cache gemeinsam nutzen möchten. Eindeutige 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 wird durch ein "Tag" identifiziert. Threads werden einem bestimmten Affinitätssatz zugewiesen, indem ihm das Tag zugewiesen wird, das diesen Satz identifiziert. Ein Thread kann höchstens zu einem Affinitätssatz gehören. das heißt, es hat ein Affinitäts-Tag.
Auswirkung der Einstellung unterschiedlicher Affinitäts-Tags
Beispielsweise würde eine Anwendung, die zwei Threads in separaten L2-Caches ausführen möchte, die Threads mit verschiedenen Affinitäts-Tags festlegen. Auf einer Dual-Core-Maschine wird diese Affinität effektiv ignoriert. Bei einem 4-Core-MacPro versucht der Scheduler jedoch, Threads in separaten Paketen auszuführen. Auf einem 8-Core-MacPro versucht der Scheduler auf ähnliche Weise, diese Threads auf separaten Dies auszuführen (die sich möglicherweise im selben physischen CPU-Paket befinden oder nicht).
Verwendungsbeispiel
Eine Anwendung, die auf jedem verfügbaren Prozessor einen Thread platzieren möchte, führt Folgendes aus:
- Ermitteln Sie die Anzahl der Prozessoren im System mit sysctl (3).
- Erstellen Sie diese Anzahl von Threads.
- Legen Sie für jeden Thread ein eindeutiges Affinitäts-Tag fest.
- Starten Sie alle Threads.
Threads mit Standard-Affinitätsrichtlinie werden auf jedem Prozessor freier geplant. Diese Threads werden vorzugsweise zur Ausführung auf einem Prozessor im Leerlauf migriert. Threads mit Affinitäts-Tags bleiben an der richtigen Stelle.
In der Quelle finden Sie Codelisten und Informationen zur gemeinsamen Nutzung von Affinitäts-Tags zwischen übergeordneten und untergeordneten Prozessen, zum Abrufen der CPU-Cache-Konfiguration und mehr.