Thread an Kern binden
-
Ich würde gerne meine Threads in einem Programm an bestimmte Kerne binden, damit Datenaustäusche möglichst effizient sind.
Nun habe ich allerdings gelesen, dass set_affinity einen kleinen Schönheitsfehler hat:
Actually, part of the problem with using native POSIX threads is that the bit positions in the bitmask are not necessarily in any particular order when compared to the actual processor/memory topology. Just because bits are close in the mask doesn't mean that they are "close" in the sense of sharing a cache.
Ist dem tatsächlich so?
Ka<nn man da etwas machen?
-
Mh, ich weis dass es in MPI möglich ist logische Strukturen nachzubauen. Wie du ja herausgefunden hast gibt es set_affinity, aber das sind nur Empfehlungen an das Laufzeitsystem. Das könnte es auch besser wissen...
-
shisha schrieb:
Ich würde gerne meine Threads in einem Programm an bestimmte Kerne binden, damit Datenaustäusche möglichst effizient sind.
Warum sollte das so effizienter sein?
-
Codepopel schrieb:
shisha schrieb:
Ich würde gerne meine Threads in einem Programm an bestimmte Kerne binden, damit Datenaustäusche möglichst effizient sind.
Warum sollte das so effizienter sein?
Siehe NUMA-Architekturen.
-
shisha schrieb:
Ist dem tatsächlich so?
lol
Natürlich ist das so.
Wenn nicht, dann müsste es irgendwo genau dokumentiert sein, wie man aus der Bitposition auf z.B. die Node-Nummer schliessen kann.Ka<nn man da etwas machen?
Ja, du kannst das Problem an den User auslagern. D.h. der soll die Core-Nummer über ein Config-File irgendwo einstellen, wenn er will dass die Threads gepinnt werden.
Ansonsten: lass das OS mal machen, das kümmert sich normalerweise selbst darum dass die Threads "passend" geschuduled werden.
-
Für welches OS soll das denn funktionieren? Unter Windows kannst du Threads per
SetThreadAffinityMask
an bestimmte Kerne binden.
-
...
-
Falls doch Windows: http://msdn.microsoft.com/en-us/library/windows/desktop/dd405488.aspx