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.
central-processing-unit
L. DPenha
quelle
quelle
Antworten:
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.
quelle
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
quelle
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.
quelle
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ß.
quelle
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.
quelle
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.
quelle
AMD REVERSE HYPER-THREADING!
http://www.theinquirer.net/inquirer/news/1005560/amd-socket-am2-has-a-secret-weapon
(Spoiler: existiert nicht.)
quelle
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.
quelle
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:
Ihre Leistung wird jedoch darunter leiden, da jetzt alles, was auf dem System ausgeführt wird, auf den verbleibenden Kernen ausgeführt wird.
quelle
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.
quelle
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
quelle
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.
quelle