1

Ich benutze einen parallelen Algorithmus mit Light Threads und frage mich, wie diese verschiedenen Kernen zugewiesen werden, wenn das System mehrere Kerne und mehrere Chips bereitstellt. Werden Threads einem einzelnen Chip zugewiesen, bis alle Kerne auf dem Chip erschöpft sind? Werden Threads Kernen auf verschiedenen Chips zugewiesen, um die Arbeit besser zwischen den Chips zu verteilen?Wie werden leichtgewichtige Threads vom Linux-Kernel auf einem Multichip-Multicore-SMP-System geplant?

+0

Welche Threading-Bibliothek verwenden Sie? – sarnold

+0

Wir verwenden Pthreads. – rreyes1979

+0

Ist diese Verhaltensbibliothek abhängig? Dachte, dass diese Details vom Kernel-Scheduler gehandhabt werden. – rreyes1979

Antwort

3

Sie sagen nicht, auf welchem ​​Betriebssystem Sie sind, aber unter Linux werden Threads einem Kern basierend auf der Last auf diesem Kern zugewiesen. Ein Thread, der zum Ausführen bereit ist, wird einem Kern mit der niedrigsten Auslastung zugewiesen, sofern Sie nicht anders angeben, indem Sie die Threadaffinität festlegen. Sie können dies mit sched_setaffinity() tun. Weitere Informationen finden Sie auf der Manpage. Im Allgemeinen, wie mayes1979 sagte, ist dies etwas, das von dem Scheduler entschieden wird, der in dem Betriebssystem implementiert ist, das Sie verwenden.

Je nach der von Ihnen verwendeten Linux-Version gibt es zwei hilfreiche Artikel: this article describes early 2.6 kernels, up through 2.6.22 und this article describes kernels newer than 2.6.23.

+0

Danke für Ihre Antwort. Ja, das Betriebssystem ist Linux. – rreyes1979

+0

danke @sarnold für die aktualisierte Referenz – kch

+0

Lassen Sie mich sehen, wenn ich das bekomme: Ein Thread ist der Kern mit der niedrigsten Last zugeordnet, aber Sie können eine Thread-Affinität festlegen, um einen Kern "vorschlagen". Nun dachte ich, dass ein Thread normalerweise dem Kern zugewiesen wurde, in dem er bereits lief, um Cache-Misses zu vermeiden. Wenn dies der Fall ist, versucht der Thread, auf dem Kern zu bleiben, in dem er zu arbeiten begonnen hat, aber wenn der Kern beschäftigt ist, kann er zu einem anderen "wandern", um den Lastausgleich durchzuführen. Fehle ich etwas? – rreyes1979

0

Verschiedene Threading-Bibliotheken führen Threading-Operationen anders aus. Der "Standard" in Linux heutzutage ist NPTL, der Threads auf derselben Ebene wie Prozesse plant. Das ist ziemlich gut, da die Prozess-Erstellung unter Linux schnell ist und immer schnell bleiben soll. Der Linux-Kernel versucht eine sehr starke CPU-Affinität für die Ausführung von Prozessen und Threads bereitzustellen, um das Verhältnis von Cache-Treffern zu Cache-Fehlern zu erhöhen. Wenn eine Aufgabe immer auf demselben Kern ausgeführt wird, ist sie wahrscheinlich bereits ausgefüllt Cache-Zeilen.

Das ist normalerweise eine gute Sache, aber ich habe bemerkt, dass der Kernel Aufgaben nicht immer von ausgelasteten Kernen auf leere Kerne migriert. Dieses Verhalten kann sich von Version zu Version ändern, aber ich habe mehrere CPU-gebundene Aufgaben gefunden, die alle auf einem Kern ausgeführt werden, während drei andere Kerne inaktiv waren. (Ich fand es, indem ich bemerkte, dass ein Kern sechs oder sieben Grad Celsius wärmer als die anderen drei war.)

Im Allgemeinen sollte das Richtige gerade passieren; Wenn der Kernel jedoch Aufgaben nicht automatisch auf andere Prozessoren migriert, können Sie mit dem Befehl taskset(1) die für Programme zulässigen Prozessoren einschränken oder Ihr Programm so ändern, dass die Funktion pthread_setaffinity_np(3) nach einzelnen Threads fragt, die migriert werden sollen. (Dies ist vielleicht am besten für In-House-Anwendungen - einer Ihrer Benutzer möglicherweise nicht wollen Ihr Programm alle verfügbaren Kernen zu verwenden. Wenn Sie wählen, Aufrufe an diese Funktion in Ihrem Programm einzuschließen, stellen Sie sicher, dass es über Konfiguration konfigurierbar ist Dateien, die eine ähnliche Funktionalität wie das Programm taskset(1) bieten.)

+0

ein guter Punkt auf Linux, die Caches warm zu halten (anscheinend auch im wörtlichen Sinne). [Hier] (http://littledaemons.wordpress.com/2009/01/22/cpu-affinity-and-taskset/) ist eine weitere Diskussion darüber für die Referenz von OP. – kch

Verwandte Themen