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.



  • ...




Anmelden zum Antworten