Kann eine Multi-Core-CPU so konfiguriert werden, dass das Betriebssystem die Kerne als einzelne CPU sehen kann?

7

Kann ein Multi-Core-CPU-Server so konfiguriert werden, dass das Betriebssystem alle Kerne als einzelne CPU sehen kann und der Prozessor als einzelne CPU fungieren kann?

Viele moderne Server sind Multicore-CPUs. Können alle CPU-Kerne dem Betriebssystem als 1 CPU gemeldet werden? Dies wäre praktisch, um Anwendungen auszuführen, die für eine einzelne CPU entwickelt wurden.

L. DPenha
quelle
Wenn wir das könnten, was wäre der Sinn von Multi-Core-CPUs?
David Schwartz

Antworten:

23

Was Sie fragen, ist

"Kann ich eine Single-Threaded-Anwendung auf einem Multi-Core-Computer ausführen und alle Kerne voll ausnutzen?"

Die Antwort ist nein

Eine einzelne Thread-Anwendung kann nur auf einem Kern ausgeführt werden und kann niemals mehr Ressourcen verwenden, als dieser einzelne Kern bereitstellen kann.

Kevin Kuphal
quelle
5
Wenn Sie einen Weg finden, dies zu tun, können Sie sich zurückziehen und irgendwo an einem Strand leben :)
Rory
4

Wollen Sie damit sagen, dass das Betriebssystem mit einer 4-Kern-3-GHz-CPU eine Single-Core-12-GHz-CPU sehen soll? Wenn das der Fall ist, dann nein, das können Sie nicht tun.

Sofern die Anwendung nicht speziell für den Zugriff auf CPU0 geschrieben wurde (und ich bin mir nicht einmal sicher, ob dies möglich ist), sollte dies keine Rolle spielen.

Toms Hardware verfügt über ein Dienstprogramm, mit dem eine Anwendung beim Start eine Affinität zu einer bestimmten CPU aufweist. Ich habe es nicht ausprobiert, also nimm es für das, was du willst. Es kann hier gefunden werden

Salbei
quelle
3

Soweit ich weiß, möchten Sie eine Dual-Core-CPU in eine CPU umwandeln, die [aus Sicht einer Single-Threaded-Anwendung] doppelt so schnell ist wie jeder der Kerne. das geht leider nicht. Am nächsten dran ist die Idee, die im i7-CPU von Intel implementiert ist und einen der Kerne intelligent übertakten kann, wenn sie sehen, dass er größtenteils geladen ist, während oder Kerne im Leerlauf sind.

pQd
quelle
2

Wenn eine App nur eine CPU verwenden kann, wird dies trotzdem der Fall sein. Es spielt keine Rolle, wie viele vorhanden sind.

Das Betriebssystem sieht alle aktivierten CPUs, sollte jedoch beispielsweise in der Lage sein, Core und Socket zu trennen (z. B. SQL Server-Affinität). Aber nein, Sie können 4 Kerne nicht als einen für das Betriebssystem erscheinen lassen, von dem ich weiß.

gbn
quelle
1

Abhängig vom BIOS können Sie möglicherweise alle Kerne bis auf einen deaktivieren, verlieren jedoch einen großen Teil der Leistung. Sie können Programme auch so einstellen, dass sie auf einem einzelnen Kern ausgeführt werden.

Das Erstellen einer virtuellen Maschine mit einem einzelnen Kern würde ebenfalls eine Lösung bieten.

Dentrasi
quelle
Kann die VM bei Verwendung der Virtualisierung den physischen Multicore effektiv nutzen und gleichzeitig der Anwendung einen einzelnen Prozessor anbieten? Wäre die Leistung besser als die Anwendung, die direkt einen einzelnen physischen Kern verwendet?
L. DPenha
1
Nein, die schnellste Einzel-CPU, die Sie dem Gast hinzufügen können, ist die Geschwindigkeit der Host-CPU, abzüglich des Overheads.
Dentrasi
Nein. Unter VMware (zum Beispiel) kann eine einzelne virtuelle CPU so viel CPU in MHz wie ein einzelner Kern verwenden. Dies unterscheidet sich im Wesentlichen nicht von Ihrer ursprünglichen Situation, da das Hinzufügen einer zweiten virtuellen CPU einer einzelnen Thread-Anwendung nicht zugute kommt.
Kevin Kuphal
1

In Bezug auf die Verwendung von VMs zur Lösung dieses Problems: Es geht darum, so viele Single-Core-VMs zu verwenden, wie physische Kerne im System vorhanden sind. Führen Sie dann auf jeder VM eine einzelne Instanz der App aus. Dies führt tatsächlich dazu, dass jede einzelne Instanz etwas langsamer ausgeführt wird als auf dem Host-Betriebssystem. Dies ermöglicht jedoch eine wesentlich stärkere Parallelisierung der Arbeitslast.

Dies alles setzt voraus, dass Ihre Umgebung und Ihr Code mehrere Instanzen dieser App zulassen und dass Sie die Arbeitslast für die Instanzen in Blöcke aufteilen können.

Zugegeben, der beste Weg, dies zu tun, wäre, die App für Multithreading neu zu schreiben. Oft kann dies jedoch in Bezug auf die Arbeitsstunden der Entwickler unpraktisch sein.

Josh
quelle
1

AMD REVERSE HYPER-THREADING!

http://www.theinquirer.net/inquirer/news/1005560/amd-socket-am2-has-a-secret-weapon


(Spoiler: existiert nicht.)

der Dave
quelle
Ich wundere mich darüber, ein 4 oder mehr HT-Kern mit Priorisierung, damit ein Thread alle verfügbaren Ressourcen abrufen und die anderen Threads das nehmen kann, was er übrig lässt, um eine bessere Leistung mit einem Thread zu erzielen (für die App, die damit umgehen kann so weit laufen (z. B. wissenschaftliches Rechnen oder wahrscheinlich Gaming) und dennoch eine gute Auslastung über HT für normale Workloads im Vergleich zu 2 Kernen mit jeweils zwei Threads.
Ronald Pottol
0

Wie wäre es mit dem Ausführen des Betriebssystems und der Anwendung in einer VM, wie in einem Kommentar des OP gefragt wurde? Wäre das im Wesentlichen dasselbe wie das Fälschen einer einzelnen schnelleren CPU?

Kurz gesagt, nein. Virtulization kann nur dann schnell arbeiten, wenn die Anweisungen für das Betriebssystem und die Anwendungen nativ auf der CPU ausgeführt werden können. Theoretisch könnte man möglicherweise eingehende Anweisungen umschreiben, um mehrere CPUs besser zu nutzen, aber das würde wahrscheinlich bei allen außer sehr einfachen Aufgaben fehlschlagen. Woher wissen Sie, dass Sie die Anweisungen zum Senden von Daten nicht ausführen, die Berechnungen für diese Daten jedoch noch nicht abgeschlossen sind?

Dies ist einer der Gründe, warum Anwendungen speziell für den Multithread-Betrieb geschrieben und kompiliert werden müssen.

jasonrm
quelle
0

Wie Sage sagte, wenn Sie eine große CPU anstelle mehrerer Kerne sehen möchten, dann nein. Zumindest nicht das ich wüsste.

Unter Linux können Sie einen Kern jedoch vorübergehend wie folgt deaktivieren:

echo 0 >> /sys/devices/system/cpu/cpu1/online

Ihre Leistung wird jedoch darunter leiden, da jetzt alles, was auf dem System ausgeführt wird, auf den verbleibenden Kernen ausgeführt wird.

David
quelle
0

Ich habe mich über genau diese Sache gewundert. Ich denke, es wäre möglich, dies auf aktuellen Multi-Core-CPUs zu erreichen, wenn eine VM einen emulierten Prozessor verwendet, der ihre Bitbreite synchron auf alle physischen CPUs verteilen könnte. Beispielsweise könnten Sie dem Betriebssystem und den Programmen, die in der VM ausgeführt werden, einen 3-GHz-8-Core-16-Thread-Chip als 6-GHz-4-Core-8-Thread-Chip oder einen 12-GHz-2-Core-4-Thread-Chip anzeigen. Ich kenne keine solche VM, aber es ist wahrscheinlich möglich, dass dies möglich ist (mit einigen IPC-Reduzierungen von der physischen CPU offensichtlich).

Für einen Chip, der dafür ausgelegt ist, gibt es keinen. Wenn jedoch ein Entwurf eine physische Verbindung der Bitbreite zulässt, die die Kerne verbindet, um Anweisungen über die gesamte Breite pro Zyklus zu akzeptieren, können Sie dies ohne Verwendung einer VM und einer kleineren tun auf IPC getroffen.

Sehr überrascht, dass keine Hardware- oder Softwareunternehmen wie VM Ware, Intel oder AMD versucht haben, herauszufinden, wie dies angesichts der aktuellen Situation auf dem CPU-Markt zu tun ist. Stellen Sie sich vor, Sie müssen sich nicht zwischen einer Fast-Gaming-CPU oder einer Monster-Multi-Core-CPU mit all diesen zusätzlichen PCIe-Lanes entscheiden. Sie können dann einfach den CPU-Modus ändern, wenn Sie ein Programm verwenden, das nicht viele CPU-Threads verwendet. Dann entlastet es die Entwickler zurück. Wenn die CPUs dies können, ist es weniger erforderlich, die Anwendung mit mehreren Threads zu versehen. VMs können bei einer hohen IPC-Steuer bereits als mehr Kerne als Ihre physische CPU angezeigt werden. Wir benötigen etwas, das das Gegenteil bewirken kann. Die Leistung vieler Programme würde immer noch stark profitieren, wenn Sie das tun könnten, was in diesem Thread verlangt wird.

Mommit Meister
quelle
0

AMD hatte vor einigen Jahren eine Core Control-Software, die Kerne zusammenführte, um die Taktraten zu erhöhen. Der Benutzer war auf Kernkombinationen beschränkt, ich habe meine 6 Kerne bei 2 zusammengeführten Kernen heruntergefahren und konnte bis zu 4,2 Takte von der Basis 3.2 abrufen

Gorem Desoulz
quelle
0

Okay ... tun wir so, als wären wir sehr reich und wir bringen den neuesten größten Prozessor zum Zeitpunkt dieses Beitrags heraus. Der Intel I9 7880X mit 18 Kernen. Wie kann ich all diese Kerne in einen Prozessor einbinden? Die schnelle Antwort lautet: Sie können nicht.

Der beste Weg, dies zu erklären, ist, dass Ihr Prozessor ein Raum mit 18 Personen ist. Sie können sie nicht zu einer Person kombinieren. Der Programmierer der Software muss das Programm so einrichten, dass mehr Kerne verwendet werden. Die meisten Programme verwenden nur 1 Kern. Das Problem besteht also darin, dass der Kern jeweils 1 Aufgabe ausführt.

Einige Programme wissen, was die nächsten Aufgaben sein werden, also weisen sie mehr Kerne zu, um mehr Funktionen auszuführen, aber meines Wissens und zum Zeitpunkt dieses Beitrags verwendet MAINSTREAM am häufigsten 4 Kerne. Es gibt verschiedene Spezialprogramme, die Ihren gesamten Prozessor verwenden.

Pete
quelle