Ich möchte mit Threads auf einem Multi-Core-Prozessor experimentieren, z. B. um ein Programm zu erstellen, das zwei verschiedene Threads verwendet, die von zwei verschiedenen Prozessorkernen ausgeführt werden.
Mir ist jedoch nicht klar, auf welcher Ebene die Threads den verschiedenen Kernen zugeordnet werden. Ich kann mir folgende Szenarien vorstellen (abhängig vom Betriebssystem und der Implementierung der Programmiersprache):
- Die Thread-Zuweisung wird vom Betriebssystem verwaltet. Threads werden mithilfe von Betriebssystemaufrufen erstellt. Wenn der Prozess auf einem Mehrkernprozessor ausgeführt wird, versucht das Betriebssystem automatisch, verschiedene Threads auf verschiedenen Kernen zuzuweisen / zu planen.
- Die Thread-Zuweisung wird von der Implementierung der Programmiersprache verwaltet. Das Zuweisen von Threads zu einem anderen Kern erfordert spezielle Systemaufrufe, aber die Standard-Thread-Bibliotheken der Programmiersprache behandeln dies automatisch, wenn ich die Standard-Thread-Implementierung für diese Sprache verwende.
- Die Threadzuordnung muss explizit programmiert werden. In meinem Programm muss ich expliziten Code schreiben, um festzustellen, wie viele Kerne verfügbar sind, und um verschiedenen Kernen unterschiedliche Threads zuzuweisen, indem ich z. B. Bibliotheksfunktionen verwende.
Um die Frage zu präzisieren, stelle ich mir vor, ich hätte meine Multithread-Anwendung in Java oder C ++ unter Windows oder Linux geschrieben. Wird meine Anwendung auf magische Weise mehrere Kerne sehen und verwenden, wenn sie auf einem Multi-Core-Prozessor ausgeführt wird (da alles entweder vom Betriebssystem oder von der Standard-Thread-Bibliothek verwaltet wird), oder muss ich meinen Code ändern, um die mehreren Kerne zu erkennen ?
quelle
Ich hatte einmal eine riesige SGI-IRIX-Umgebung. Zum Teufel habe ich ein kleines Java-Programm mit mehreren Threads geschrieben (das nur CPU-Zyklen verbraucht) und darin 12 Threads erstellt. Der Auftrag umfasste 12 CPUs in NUMA-Architektur. Vielleicht werde ich das Programm nachschlagen und es auf dem Dell R910s ausführen und prüfen ..
quelle