Warum nicht einen großen CPU-Kern machen? [geschlossen]


25

Ich verstehe nicht, warum CPU-Hersteller Multi-Core-Chips herstellen. Das Skalieren mehrerer Kerne ist schrecklich, dies ist sehr anwendungsspezifisch, und ich bin sicher, Sie können auf bestimmte Programme oder Codes hinweisen, die auf vielen Kernen hervorragend laufen, aber die meiste Zeit handelt es sich bei der Skalierung um Müll. Es ist eine Verschwendung von Silizium und Energie.

Spiele zum Beispiel verwenden fast nie mehr als vier Kerne. Wissenschaftliche und technische Simulationen wie Ansys oder Fluent werden nach der Anzahl der Kerne berechnet, auf denen der PC ausgeführt wird. Sie zahlen also mehr, weil Sie mehr Kerne haben, aber der Vorteil von mehr Kernen wird nach 16 Kernen wirklich schlecht, obwohl Sie diese 64 Kerne haben Arbeitsplätze ... es ist eine Verschwendung von Geld und Energie. Es ist besser, eine 1500 W Heizung für den Winter zu kaufen, viel billiger.

Warum machen sie keine CPU mit nur einem großen Kern?

Ich denke, wenn sie ein Ein-Kern-Äquivalent zu einer Acht-Kern-CPU wären, würde ein Kern die IPC um 800% steigern, sodass Sie die volle Leistung in allen Programmen erzielen würden, nicht nur in solchen, die für mehrere Kerne optimiert sind. Überall steigern IPC die Leistung. Dies ist ein zuverlässiger und einfacher Weg, um die Leistung zu steigern. Mehrere Kerne erhöhen die Leistung nur bei einer begrenzten Anzahl von Programmen, und die Skalierung ist schrecklich und unzuverlässig.


Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben . Alle Schlussfolgerungen sollten wieder in die Frage und / oder eine Antwort (en) eingearbeitet werden.
Dave Tweed

Dieser Artikel könnte Sie auch interessieren: gotw.ca/publications/concurrency-ddj.htm
lvella

"Aber der Nutzen von mehr Kernen wird nach 16 Kernen wirklich schlecht." Sie wissen offensichtlich nicht, wovon Sie sprechen. Vertrauen Sie mir, ich habe an Prozessen gearbeitet, die auf einigen Zehntausenden von CPUs laufen. Es gibt eine ganze Klasse von Problemen mit dem Namen "Peinlich parallelisierbar", bei denen es sehr gut funktioniert, mehr Kerne auf das Problem zu werfen.
Aron

Antworten:


93

Das Problem liegt in der Annahme, dass CPU-Hersteller einfach mehr Transistoren hinzufügen können, um einen einzelnen CPU-Kern ohne Konsequenzen leistungsfähiger zu machen.

Damit eine CPU mehr kann, müssen Sie planen, was mehr bedeutet. Es gibt drei Möglichkeiten:

  1. Den Kern mit einer höheren Taktfrequenz laufen lassen - Das Problem dabei ist, dass wir bereits an die Grenzen unserer Möglichkeiten stoßen.

    Der Stromverbrauch und damit die Wärmeabgabe steigen mit der Frequenz - wenn Sie die Frequenz verdoppeln, verdoppeln Sie nominell die Verlustleistung. Wenn Sie die Spannung erhöhen, steigt Ihre Verlustleistung mit dem Quadrat der Spannung.

    Zwischenverbindungen und Transistoren weisen aufgrund der nicht idealen Natur der Welt auch Ausbreitungsverzögerungen auf. Sie können nicht einfach die Anzahl der Transistoren erhöhen und erwarten, dass sie mit derselben Taktfrequenz betrieben werden können.

    Wir sind auch durch externe Hardware - hauptsächlich RAM - begrenzt. Um die CPU schneller zu machen, müssen Sie die Speicherbandbreite erhöhen, indem Sie sie entweder schneller ausführen oder die Datenbusbreite erhöhen.


  1. Hinzufügen komplexerer Befehle - Anstatt schneller zu laufen, können wir einen umfangreicheren Befehlssatz hinzufügen - übliche Aufgaben wie Verschlüsselung usw. können im Silizium gehärtet werden. Anstatt viele Taktzyklen für die Berechnung in Software zu benötigen, haben wir stattdessen eine Beschleunigung der Hardware.

    Dies wird bereits auf CISC-Prozessoren (Complex Instruction Set) durchgeführt. Siehe Dinge wie SSE2, SSE3. Ein einzelner CPU-Kern ist heute weitaus leistungsstärker als ein CPU-Kern von vor 10 Jahren, auch wenn er mit derselben Taktfrequenz betrieben wird.

    Das Problem ist, wenn Sie kompliziertere Anweisungen hinzufügen, erhöhen Sie die Komplexität und vergrößern den Chip. Als direkte Folge wird die CPU langsamer - die möglichen Taktfrequenzen sinken mit zunehmenden Laufzeitverzögerungen.

    Diese komplexen Anweisungen helfen Ihnen auch bei einfachen Aufgaben nicht. Sie können nicht jeden möglichen Anwendungsfall härten, so dass unvermeidlich große Teile der Software, die Sie ausführen, nicht von neuen Anweisungen profitieren und in der Tat durch die resultierende Reduzierung der Taktrate geschädigt werden.

    Sie können auch die Datenbusbreiten vergrößern, um mehr Daten auf einmal zu verarbeiten. Dies vergrößert jedoch wiederum die CPU und führt zu einem Kompromiss zwischen dem durch größere Datenbusse erzielten Durchsatz und dem Absinken der Taktrate. Wenn Sie nur kleine Daten (z. B. 32-Bit-Ganzzahlen) haben, hilft Ihnen eine 256-Bit-CPU nicht wirklich.


  1. Machen Sie die CPU paralleler - anstatt zu versuchen, eine Sache schneller zu machen, machen Sie stattdessen mehrere Sachen gleichzeitig. Wenn die Aufgabe, die Sie ausführen, mehrere Aufgaben gleichzeitig ausführen kann, möchten Sie entweder eine einzelne CPU, die mehrere Berechnungen pro Befehl ausführen kann (Single Instruction Multiple Data (SIMD)), oder mehrere CPUs, die jeweils eine ausführen können Berechnung.

    Dies ist einer der wichtigsten Treiber für Multi-Core-CPUs. Wenn Sie mehrere Programme ausführen oder ein einzelnes Programm in mehrere Tasks aufteilen können, können Sie mit mehreren CPU-Kernen mehrere Aufgaben gleichzeitig ausführen.

    Da die einzelnen CPU-Kerne effektiv separate Blöcke sind (Caches und Speicherschnittstellen ausgenommen), ist jeder einzelne Kern kleiner als der entsprechende einzelne monolithische Kern. Da der Kern kompakter ist, werden die Übertragungsverzögerungen verringert und Sie können jeden Kern schneller ausführen.

    Ob ein einzelnes Programm von mehreren Kernen profitieren kann, hängt ganz davon ab, was dieses Programm tut und wie es geschrieben wurde.


Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben . Alle Schlussfolgerungen sollten wieder in die Frage und / oder eine Antwort (en) eingearbeitet werden.
Dave Tweed

Einer der Punkte, die in Kommentaren angesprochen wurden, die noch nicht angesprochen wurden, ist, dass CPUs parallel sein können, indem mehrere Befehle pro Takt ausgeführt werden (Superscalar). Das ist orthogonal zu SIMD und Frequenz; Anweisungen pro Takt (IPC) sind der dritte Faktor für den tatsächlichen Durchsatz pro Zeit. Alle modernen CPUs für interaktive Workloads sind mindestens 2-fach.
Peter Cordes


37

Neben den anderen Antworten gibt es noch ein weiteres Element: die Chipausbeute . Ein moderner Prozessor enthält mehrere Milliarden Transistoren. Jeder einzelne dieser Transistoren muss einwandfrei funktionieren, damit der gesamte Chip ordnungsgemäß funktioniert.

Durch die Herstellung von Mehrkernprozessoren können Sie Gruppen von Transistoren sauber aufteilen. Wenn in einem der Kerne ein Defekt vorliegt, können Sie diesen Kern deaktivieren und den Chip zu einem reduzierten Preis entsprechend der Anzahl der funktionierenden Kerne verkaufen. Ebenso können Sie Systeme aus validierten Komponenten wie in einem SMP-System zusammenbauen.

Für praktisch jede von Ihnen gekaufte CPU wurde sie zum Top-End-Premium-Modell für diese Prozessorlinie. Das Ergebnis hängt davon ab, welche Teile des Chips fehlerhaft funktionieren und deaktiviert sind. Intel stellt keine i3-Prozessoren her: Alle i7-Prozessoren sind defekt, und alle Funktionen, die die Produktlinien voneinander trennen, sind deaktiviert, da sie beim Testen fehlgeschlagen sind. Die Teile, die noch funktionieren, sind jedoch immer noch nützlich und können viel billiger verkauft werden. Alles, was schlimmer ist, wird zum Schmuckstück für den Schlüsselbund.

Und Mängel sind keine Seltenheit. Es ist keine leichte Aufgabe, diese Milliarden von Transistoren perfekt herzustellen. Wenn Sie keine Möglichkeit haben, Teile eines bestimmten Chips selektiv zu verwenden, wird der Preis des Ergebnisses sehr schnell steigen.

Mit nur einem einzigen Überprozessor ist die Herstellung alles oder nichts, was zu einem viel verschwenderischeren Prozess führt. Bei einigen Geräten, wie Bildsensoren für wissenschaftliche oder militärische Zwecke, bei denen ein großer Sensor benötigt wird und alles funktionieren muss, sind die Kosten für diese Geräte so enorm, dass sie nur von staatlichen Budgets getragen werden können.


4
Wenn sich die Renditen verbessern und mehr voll funktionsfähige Chips produzieren, als der Markt verlangt, fangen die Anbieter in der Regel an, einige der Kerne / Caches zu verschmelzen und / oder sie mit einer niedrigeren Frequenz zu bündeln, anstatt die Preisstruktur anzupassen, um die Ende Chips relativ billiger. Mit GPUs / Grafikkarten war es früher möglich, deaktivierte Shader-Einheiten auf einigen Karten mit einem Firmware-Hack freizuschalten, um zu sehen, ob Sie Glück hatten und eine Karte besaßen, auf der sie nur für die Marktsegmentierung deaktiviert waren, nicht für tatsächliche Defekte.
Peter Cordes

4
Intel hat für einige seiner Chips Dual-Core-Chips hergestellt. Da alle ULV-Mobil-SKUs (Ultralow Voltage) Dual-Core sind, gab es nicht genügend defekte Quad-Cores, und die kleinere Chipfläche (insbesondere auch mit einer reduzierten iGPU) bietet mehr funktionierende Dual-Core-Chips pro Wafer als Quad-Core-Dies abschmelzen. en.wikichip.org/wiki/intel/microarchitectures/… hat die-shots von Sandybridge 131 mm² Dual-Core + GT1-Grafik im Vergleich zu 149 mm² Dual-Core + GT2-Grafik + 216 mm² Quad + GT2. Es gibt immer noch Raum für Cache-Defekte usw.
Peter Cordes

Und (einige) Defekte in einem Teil einer FMA-Einheit können vermutlich durch Abschmelzen und Verkauf als Celeron- oder Pentium-Chip behoben werden (kein AVX, also nur 128-Bit-Vektoren). Selbst modernen Skylake- oder Coffee Lake-Pentium-Chips fehlt AVX . Die SIMD-FMA-Einheiten machen einen anständigen Bruchteil eines Kerns aus (und führen viele andere SIMD-Operationen als FP-Mathematik aus, einschließlich Integer-Mul und Integer-Shift), sodass ich mich nicht wundern würde, wenn die 2x 256-Bit-FMA-Einheiten zugeordnet werden können 2x 128-Bit mit je nachdem, welche 2 Chunks noch funktionieren. Mit Skylake Xeon gibt es sogar SKUs mit reduziertem AVX512-FMA-Durchsatz (nur 1 funktionierende 512-Bit-FMA)
Peter Cordes,

@PeterCordes Wenn die Erträge so gut sind, werden die Hersteller Designs mit höherer Dichte und / oder schnellerer Taktrate (und damit höherer Fehlerrate) entwickeln, bis die Fehlerraten wieder so hoch sind, dass sie Kerne deaktivieren und / oder die Chips übertakten können zum Discount zu verkaufen ..
Monty Harder

@MontyHarder: Das stimmt, aber die Validierung kostet Geld und Zeit, und bestehende Produktionslinien werden noch eine Weile bestehende Designs herstellen. Aber ja, einige Intel-Beispiele für das, wovon Sie sprechen, sind Haswell Refresh und verschiedene Verfeinerungen von Skylake, die im Grunde keine architektonischen Änderungen und geringfügige Verbesserungen des 14-nm-Prozesses aufweisen. (Manchmal mit neuer iGPU). zB Kaby See dann Kaffee See usw. als „Optimierung“ Schritte in Intels normalen Ticken Kadenz.
Peter Cordes

26

Datenabhängigkeit

Es ist ziemlich einfach, mehr Anweisungen pro Takt hinzuzufügen, indem ein Chip "breiter" gemacht wird - dies war der "SIMD" -Ansatz. Das Problem ist, dass dies in den meisten Anwendungsfällen nicht hilft.

Es gibt ungefähr zwei Arten von Arbeitsbelastung, unabhängig und abhängig. Ein Beispiel für eine unabhängige Arbeitslast könnte sein, "zwei Folgen von Zahlen A1, A2, A3 ... und B1, B2, ... usw. gegeben zu haben, (A1 + B1) und (A2 + B2) usw. zu berechnen". Diese Art von Arbeit wird in Computergrafik, Audioverarbeitung, maschinellem Lernen usw. gesehen. Vieles davon wurde GPUs gewidmet, die speziell dafür entwickelt wurden.

Eine abhängige Arbeitslast könnte lauten: "Geben Sie A an, fügen Sie 5 hinzu und suchen Sie das in einer Tabelle nach. Nehmen Sie das Ergebnis und fügen Sie 16 hinzu. Suchen Sie das in einer anderen Tabelle nach."

Der Vorteil der unabhängigen Arbeitslast besteht darin, dass sie in viele verschiedene Teile aufgeteilt werden kann, sodass mehr Transistoren dabei helfen. Für abhängige Workloads hilft das überhaupt nicht - mehr Transistoren können es nur langsamer machen . Wenn Sie einen Wert aus dem Speicher abrufen müssen, ist das eine Katastrophe für die Geschwindigkeit. Es muss ein Signal über das Motherboard gesendet werden, das mit unterdurchschnittlicher Lichtgeschwindigkeit übertragen wird. Der DRAM muss eine Reihe aufladen und auf das Ergebnis warten. Dann muss er es vollständig zurücksenden. Dies dauert einige zehn Nanosekunden. Nachdem Sie eine einfache Berechnung durchgeführt haben, müssen Sie die nächste abschicken.

Energieverwaltung

Ersatzkerne sind die meiste Zeit ausgeschaltet. Tatsächlich können auf vielen Prozessoren nicht alle Kerne gleichzeitig ausgeführt werden, ohne dass das Objekt in Brand gerät, sodass das System sie ausschaltet oder für Sie heruntertaktet.

Das Umschreiben der Software ist der einzige Weg vorwärts

Die Hardware kann abhängige Workloads nicht automatisch in unabhängige Workloads konvertieren. Weder kann Software. Aber ein Programmierer, der bereit ist, sein System so umzugestalten, dass er viele Kerne ausnutzt, könnte es sein.


2
Zitat erforderlich für "kann nicht alle Kerne gleichzeitig ausführen". Es sei denn, Sie betrachten die maximale Single-Core-Turbo-Taktrate als die "echte" Taktrate der CPU. Im klassischen Sinne (bevor wir auf die Energiewand stießen und die Taktrate durch kritische Pfadausbreitungsverzögerungen begrenzt wurde) ist dies zwar richtig, aber in der modernen Welt ist es sinnvoller, die Grundtaktrate als das zu betrachten, was mit allen aufrechterhalten werden kann aktive Kerne mit hoher Auslastung. Alles, was höher ist, ist Sauce, die Sie opportunistisch verwenden können, wenn es die Leistungs- / Wärmegrenzen erlauben. (zB Intels Turbo).
Peter Cordes

1
Aber in Bezug auf die Leistung ist selbst der maximale Takt eines einzelnen Kerns mehr durch Thermik als durch Ausbreitungsverzögerungen begrenzt (obwohl wahrscheinlich die Grenzen der Pipeline-Stufe so gewählt sind, dass Sie nahe an dieser Grenze beim maximalen Zielturbo sind). Auch die Spannung ist variabel: schlechtere Leistung, aber kürzere Gate-Verzögerungen. Auf jeden Fall ist es nicht sinnvoll, den Single-Core-Max-Turbo als etwas zu betrachten, mit dem Sie alle Kerne "betreiben" sollten, da diese Grenze bereits von der Leistung herrührt.
Peter Cordes

Der Kontext der ursprünglichen Frage bezog sich definitiv auf die maximale Geschwindigkeit eines einzelnen Kerns und für viele praktische Zwecke ist dies (und seine Cache-Fehlschläge) der eigentliche begrenzende Faktor für die wahrgenommene Geschwindigkeit für den Benutzer.
pjc50

Ja, wir würden alle 8x Single-Thread-Leistung anstelle einer 8-Core-CPU verwenden, wenn wir könnten. (Mit SMT können natürlich getrennte Workloads ausgeführt werden, ohne dass der Aufwand für die Kontextumschaltung zunimmt. Siehe meine Antwort. :) Ein hypothetischer Super-Wide-Core könnte sich wahrscheinlich selbst schneller takten, wenn die Workload viele Verzögerungen verursacht, anstatt alle zu behalten Die Transistoren in SIMD FMA-Einheiten werden bei jedem Takt eingeschaltet und geschaltet. (Power Gating innerhalb eines einzelnen Kerns ist auch der Schlüssel, um bei hohen Taktraten nicht zu schmelzen; en.wikipedia.org/wiki/Dark_silicon ). Ein einziger breiter Kern würde das also nicht anders machen.
Peter Cordes

Obwohl Sie der Ansicht sind, dass die Single-Thread-Leistung, die wir bei aktuellen CPUs sehen, besser ist, als wenn sie auf eine Taktrate beschränkt wäre, die sie auf allen Kernen gleichzeitig auch bei einer Worst-Case-Auslastung aushalten könnten. Das heißt, Turbo ist der Schlüssel, insbesondere für Teile mit niedriger TDP wie Laptop-Chips ( Warum kann meine CPU in HPC keine Spitzenleistung erzielen? ): normalerweise ein großes Verhältnis zwischen Basisleistung und maximalem Turbo, im Gegensatz zu Desktop-Chips mit hoher Leistung und niedriger Kernanzahl Beispiel: i7-6700k Skylake ist eine 4-GHz-Basis, 4,2-GHz-Single-Core-Turbo (ohne Übertaktung; höher ist mit 95 W TDP möglich).
Peter Cordes

20

In der Vergangenheit waren Prozessoren nicht in der Lage, so schnell zu laufen. Wenn Sie also mehr verarbeiten möchten, benötigen Sie mehr Prozessoren. Dies kann mit einem mathematischen Coprozessor oder einfach mit mehr des gleichen Prozessors geschehen. Bestes Beispiel dafür ist der Inmos Transputer aus den 80er Jahren, der speziell für die massive Parallelverarbeitung mit mehreren zusammengesteckten Prozessoren entwickelt wurde. Das gesamte Konzept basierte auf der Annahme, dass es keinen besseren Weg gibt, die Rechenleistung zu steigern, als Prozessoren hinzuzufügen.

Das Problem ist, dass diese Annahme (vorübergehend) falsch war. Sie können auch mehr Rechenleistung erzielen, indem Sie einen Prozessor mehr Berechnungen ausführen lassen. Intel und AMD haben Wege gefunden, die Taktraten immer weiter zu erhöhen, und wie Sie sagen, ist es viel einfacher, alles auf einem Prozessor zu belassen. Das Ergebnis war, dass bis Mitte der 2000er Jahre der schnelle Single-Core-Prozessor den Markt besaß. Inmos starb in den frühen 90er Jahren eines Todes, und all ihre Erfahrungen starben mit ihnen.

Die guten Zeiten mussten allerdings ein Ende haben. Sobald die Taktraten auf GHz angestiegen waren, gab es wirklich keinen Spielraum mehr, weiter zu gehen. Und zurück gingen wir wieder zu mehreren Kernen. Wenn Sie wirklich nicht schneller werden können, ist mehr Kerne die Antwort. Wie Sie jedoch sagen, ist es nicht immer einfach, diese Kerne effektiv einzusetzen. Wir sind heutzutage viel besser, aber wir sind noch weit davon entfernt, es so einfach zu machen wie der Transputer.

Natürlich gibt es auch andere Verbesserungsmöglichkeiten - Sie könnten stattdessen effizienter sein. Mit SIMD und ähnlichen Befehlssätzen wird mehr Verarbeitung für die gleiche Anzahl von Takten ausgeführt. Mit DDR gelangen Ihre Daten schneller in den Prozessor und aus ihm heraus. Es hilft alles. Aber wenn es um die Verarbeitung geht, sind wir wieder in den 80ern und mit mehreren Kernen.


Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben . Alle Schlussfolgerungen sollten wieder in die Frage und / oder eine Antwort (en) eingearbeitet werden.
Dave Tweed

20

Gute Frage oder zumindest eine mit einer interessanten Antwort. Ein Teil dieser Antwort Bilder einer Welt , in der CPUs könnte effizient in der Breite statt mit mehreren getrennten Kernen skalieren. Lizenz- / Preismodelle wären anders!

Der Rest erklärt, warum sie nicht können. Zusammenfassung:

  • Die Kosten für mehrere Kerne sind nahezu linear
  • Die Kosten für die Erweiterung der Superskalar-Pipeline eines Kerns sind ~ quadratisch. Dies ist mit genügend Brute-Force ohnehin bis zu einem gewissen Punkt machbar. Singlethread-Leistung ist für die interaktive Verwendung von großer Bedeutung (End-to-End-Latenz, nicht nur der Durchsatz), daher zahlen aktuelle High-End-CPUs mit großem Kern diesen Preis. zB Skylake (4 breit), Ryzen (5 oder 6 breit) und Apple A12 (7 breit für die großen Kerne, 3 breit für die kleinen energieeffizienten Kerne)
  • Ein ernsthaft nachlassender IPC ist darauf zurückzuführen, dass die Pipeline nur um mehr als 3 oder 4 Stellen erweitert wurde, auch wenn die ILP nicht in der richtigen Reihenfolge ausgeführt wurde . Verzweigungsfehler und Cache-Fehler sind schwer und blockieren immer noch die gesamte Pipeline.
  • Sie haben die Frequenz nicht erwähnt, nur IPC, aber die Skalierungsfrequenz ist auch schwierig. Höhere Frequenzen erfordern höhere Spannungen, daher skaliert die Leistung mit der gewürfelten Frequenz : ^1von der Frequenz direkt und^2 von der Spannung. (Kondensatorspeicherenergie skaliert mit V ^ 2, und der größte Teil der dynamischen Leistung jenseits des Leckstroms stammt aus dem Pumpen von Ladung in die kapazitiven Lasten von FET-Gates + Drähten.)

    Leistung = Häufigkeit mal IPC. (Innerhalb derselben Architektur. Mit einer breiteren SIMD-Karte können Sie dieselbe Arbeit mit weniger Anweisungen erledigen. Einige ISAs sind dichter als andere. MIPS benötigt häufig mehr Anweisungen, um dieselbe Arbeit zu erledigen als x86 oder AArch64.)

Die Kosten sind im Werkzeugbereich (Herstellungskosten) und / oder in der Leistung (was die Frequenz indirekt begrenzt, da die Kühlung schwierig ist). Auch eine geringere Leistung pro Watt ist an sich schon ein Ziel, insbesondere bei Mobilgeräten (Akku) und Servern (Leistungsdichte / Kühlkosten / Stromkosten).

Bevor Multi-Core pro Socket zum Thema wurde, gab es Multi-Socket-Systeme für High-End-Anwendungsfälle, bei denen Sie einen höheren Durchsatz wollten, als dies mit einer einzelnen CPU möglich war, die hergestellt werden konnte. Dies waren also die einzigen SMP-Systeme. (Server, High-End-Workstations).

Wenn ein einzelner Kern so effizient skaliert werden könnte, wie Sie es wünschen, hätten wir Systeme mit einem physischen Kern pro Socket und SMT (z. B. HyperThreading), damit diese als mehrere logische Kerne fungieren können. Typische Desktops / Laptops hätten nur einen physischen Kern, und es würde uns nicht schwer fallen, Dinge zu parallelisieren, die sich nicht linear mit mehr Kernen skalieren lassen. B. make -j4um die Vorteile von Multi-Socket-Servern zu nutzen und / oder die E / A-Latenz auf einem Desktop auszublenden. (Oder wir würden immer noch versuchen, viel zu parallelisieren, wenn die Pipeline-Breite leicht skaliert würde, IPC jedoch nicht. Daher mussten wir mehr SMT-Threads verwenden.) Ihr Betriebssystemkern müsste immer noch auf allen logischen Kernen ausgeführt werden, es sei denn, die CPU Da SMT gegenüber dem Betriebssystem sehr unterschiedlich war, wären dort noch parallele Scheduling-Algorithmen und Sperren erforderlich.


Donald Knuth sagte in einem 2008 Interview

Ich könnte genauso gut ein bisschen über meine persönliche Unzufriedenheit mit dem aktuellen Trend zur Multicore-Architektur brennen. Für mich sieht es so aus, als wären den Hardware-Designern die Ideen ausgegangen und sie versuchen, die Schuld für den zukünftigen Untergang von Moores Gesetz an die Software-Autoren weiterzugeben, indem sie uns Maschinen geben, die nur auf wenigen Rechnern schneller arbeiten Schlüsselbenchmarks!

Ja, wenn wir wunderbare Single-Core-CPUs mit dem 8-fachen Durchsatz für echte Programme hätten , würden wir sie wahrscheinlich immer noch verwenden. Bei Dual-Socket-Systemen nur dann, wenn es sich gelohnt hat, für mehr Durchsatz viel mehr zu zahlen (keine Single-Thread-Leistung).

Mehrere CPUs reduzieren die Kosten für den Kontextwechsel, wenn mehrere Programme ausgeführt werden (indem sie wirklich parallel ausgeführt werden, anstatt schnell zwischen ihnen zu wechseln). Das präventive Multitasking, das die massiven Maschinenausfälle unterbricht, die eine solche CPU erfordern würde, würde wahrscheinlich noch mehr schaden als jetzt.

Physisch wäre es ein einzelner Kern (für eine einfache Cache-Hierarchie ohne Verbindungen zwischen den Kernen), der jedoch SMT (z. B. Intels HyperThreading) unterstützt, sodass die Software ihn als 8 logische Kerne verwenden könnte, die dynamisch um Durchsatzressourcen konkurrieren. Oder wenn nur 1 Thread läuft / nicht blockiert ist, würde dies den vollen Nutzen bringen.

Sie würden also mehrere Threads verwenden, wenn dies tatsächlich einfacher / natürlicher wäre (z. B. getrennte Prozesse, die gleichzeitig ausgeführt werden), oder für leicht parallelisierbare Probleme mit Abhängigkeitsketten, die verhindern würden, dass der IPC dieser Bestie maximal genutzt wird.

Leider ist es ein Wunsch von Knuth, dass Multi-Core-CPUs zu diesem Zeitpunkt nie mehr aufhören werden, eine Sache zu sein.


Single-Thread-Leistungsskalierung

Ich denke, wenn sie ein 1-Kern-Äquivalent zu einer 8-Kern-CPU herstellen würden, hätte ein Kern eine Steigerung des IPC um 800%, sodass Sie die volle Leistung in allen Programmen erhalten würden, nicht nur in denjenigen, die für mehrere Kerne optimiert sind.

Ja das stimmt. Wenn es überhaupt möglich wäre, eine solche CPU zu bauen , wäre das sehr erstaunlich. Aber ich denke, es ist buchstäblich unmöglich, denselben Halbleiterfertigungsprozess durchzuführen (dh dieselbe Qualität / Effizienz von Transistoren). Mit dem gleichen Strombudget und der gleichen Chipfläche wie eine 8-Kern-CPU ist dies sicherlich nicht möglich, auch wenn Sie beim Zusammenkleben von Kernen weniger Logik benötigen und nicht so viel Platz für private Caches pro Kern benötigen.

Selbst wenn Sie Frequenzerhöhungen zulassen (da das eigentliche Kriterium "Arbeit pro Sekunde" und nicht "Arbeit pro Takt" ist), wäre es eine große Herausforderung, selbst eine doppelt so schnelle CPU zu bauen.

Wenn es an jedem Ort möglich waren in der Nähe der gleichen Leistung und Druckbereich Budget ( und damit die Herstellungskosten) eine solche CPU zu bauen, würde ja CPU - Anbieter bereits sie auf diese Weise bauen.

Siehe Moderne Mikroprozessoren. Ein 90-minütiger Leitfaden!

Speziell die mehr Kerne oder breiteren Kerne? Abschnitt für den notwendigen Hintergrund, um diese Antwort zu verstehen; Es beginnt einfach mit der Funktionsweise von Pipeline-CPUs in der richtigen Reihenfolge und ist dann superskalar (mehrere Befehle pro Takt). Anschließend wird erklärt, wie wir die Power-Wall direkt um die P4-Ära erreicht haben und damit die einfache Frequenzskalierung beendet haben. Dabei bleibt meist nur IPC und es wird mehr Arbeit pro Befehl (z. B. SIMD) als Weg nach vorne erledigt, auch mit kleineren Transistoren.

Wenn Sie eine Pipeline verbreitern (max. Anweisungen pro Takt), werden die Kosten in der Regel im Quadrat der Breite angegeben . Diese Kosten werden in der Chipfläche und / oder der Leistung gemessen, um eine breitere parallele Abhängigkeitsprüfung (Gefahrenerkennung) und einen breiteren Planer für nicht ordnungsgemäße Ausführung zu ermöglichen, um fertige Anweisungen zu finden. Und mehr Lese- / Schreib-Ports für Ihre Registerdatei und Ihren Cache, wenn Sie andere Anweisungen als ausführen möchten nop. Vor allem, wenn Sie Anweisungen mit drei Eingängen wie FMA oder Add-with-Carry (2 Register + Flags) haben.

Es gibt auch sinkende IPC-Erträge, um die CPUs breiter zu machen . Die meisten Workloads verfügen über eine begrenzte ILP (Instruction Level Parallelism) für kleine und kurze Reichweiten, die von CPUs genutzt werden kann. Wenn der Kern also breiter wird, erhöht sich der IPC (Anweisungen pro Takt) nicht, wenn der IPC bereits auf weniger als die Breite des beschränkt ist Kern durch Abhängigkeitsketten, Verzweigungsfehler, Cache-Fehler oder andere Verzögerungen. Sicher, Sie würden in einigen entrollten Schleifen mit unabhängigen Iterationen eine Beschleunigung erhalten, aber das ist nicht das, was die meisten Code-Ausgaben die meiste Zeit tun. Compare / Branch-Anweisungen machen 20% des Anweisungsmixes im "typischen" Code IIRC aus. (Ich glaube, ich habe Zahlen von 15 bis 25% für verschiedene Datensätze gelesen.)

Außerdem kostet ein Cache-Fehler, der alle abhängigen Anweisungen blockiert (und dann alles, was bei Erreichen der ROB-Kapazität passiert), mehr für eine breitere CPU. (Die Opportunitätskosten, die entstehen, wenn mehr Ausführungseinheiten im Leerlauf verbleiben; mehr potenzielle Arbeit wird nicht erledigt.) Oder ein Zweigfehlschlag verursacht in ähnlicher Weise eine Blase.

Um den 8-fachen IPC zu erhalten, benötigen wir mindestens eine 8-fache Verbesserung der Genauigkeit der Verzweigungsvorhersage und der Cache-Trefferraten . Bei den meisten Workloads lässt sich die Cache-Trefferrate jedoch nicht gut mit der Cache-Kapazität ab einem bestimmten Punkt skalieren. Und HW Prefetching ist klug, aber kann nicht sein , dass smart. Und beim 8-fachen der IPC müssen die Verzweigungsvorhersagen 8-fach so viele Vorhersagen pro Zyklus erstellen und auch genauer sein.


Gegenwärtige Techniken zum Aufbau von CPUs zur Ausführung außerhalb der Reihenfolge können ILP nur über kurze Entfernungen finden . Zum Beispiel beträgt die ROB-Größe von Skylake 224 Fused-Domain-Uops, und der Scheduler für nicht ausgeführte Uops beträgt 97 Nicht-Fused-Domain. Weitere Informationen zum Einfluss von lfence auf eine Schleife mit zwei langen Abhängigkeitsketten finden Sie unter Erhöhen der Länge in einem Fall, in dem die Scheduler-Größe der begrenzende Faktor beim Extrahieren von ILP aus zwei langen Befehlsketten ist, wenn diese zu lang werden. Und / oder sehen Sie diese allgemeinere und einleitende Antwort ).

Das Auffinden von ILP zwischen zwei separaten langen Schleifen ist also mit Hardware nicht möglich. In einigen Fällen könnte eine dynamische Neukompilierung von Binärdateien für die Schleifenfusion möglich sein, aber hart und nicht etwas, was CPUs wirklich können, wenn sie nicht die Transmeta Crusoe-Route einschlagen. (x86-Emulationsschicht auf einer anderen internen ISA; in diesem Fall VLIW). Aber moderne x86-Standarddesigns mit UOP-Caches und leistungsstarken Decodern sind für die meisten Codes nicht einfach zu übertreffen.

Ausserhalb von x86 sind alle noch verwendeten ISAs relativ einfach zu dekodieren, sodass es keine andere Motivation für eine dynamische Neukompilierung gibt als Fernoptimierungen. TL: DR: Die Hoffnung auf magische Compiler, die mehr ILP für die Hardware verfügbar machen können, hat sich für Itanium IA-64 nicht bewährt. Es ist unwahrscheinlich, dass eine Super-Wide-CPU für einen vorhandenen ISA mit einem seriellen Ausführungsmodell funktioniert.


Wenn Sie eine Super-Wide-CPU hatten, möchten Sie auf jeden Fall, dass diese SMT unterstützt, damit Sie die Arbeit aufrechterhalten können, indem Sie mehrere Threads mit niedrigem ILP-Wert ausführen.

Da Skylake derzeit 4 Uops breit ist (und einen realen IPC von 2 bis 3 Uops pro Takt oder sogar 4 Uops im Hochdurchsatzcode erreicht), wäre eine hypothetische 8x breitere CPU 32-fach!

Es wäre fantastisch , dies in 8 oder 16 logische CPUs zurückzuspeichern, die diese Ausführungsressourcen dynamisch gemeinsam nutzen: Nicht blockierte Threads erhalten die gesamte Front-End-Bandbreite und den gesamten Back-End-Durchsatz.

Bei 8 getrennten Kernen bleibt jedoch nichts anderes übrig, als die Ausführungseinheiten mit Strom zu versorgen, wenn ein Thread zum Stillstand kommt. Die anderen Threads profitieren nicht.

Die Ausführung ist häufig stoßweise: Sie bleibt stehen und wartet auf das Laden eines Cachefehlers. Wenn dann viele Befehle gleichzeitig eingehen, kann das Ergebnis verwendet werden. Bei einer sehr breiten CPU kann dieser Burst schneller ablaufen und bei SMT sogar hilfreich sein.


Aber wir können keine magischen Super-Wide-CPUs haben

Um den Durchsatz zu steigern, müssen wir stattdessen Parallelität zur Hardware in Form von Parallelität auf Thread-Ebene verfügbar machen . Generell wissen Compiler nicht genau, wann und wie man Threads verwendet, außer in einfachen Fällen wie sehr großen Schleifen. (OpenMP oder gcc's -ftree-parallelize-loops). Es erfordert immer noch menschliche Geschicklichkeit, Code zu überarbeiten, um nützliche Arbeit effizient parallel zu erledigen, da die Kommunikation zwischen Threads und der Start von Threads teuer sind.

TLP ist eine grobkörnige Parallelität, im Gegensatz zu der feinkörnigen ILP innerhalb eines einzelnen Ausführungsthreads, den HW ausnutzen kann.


CPUs, die auf interaktive Workloads ausgerichtet sind (wie Intel / AMD x86- und Apple / ARM AArch64-High-End-Kerne), sorgen auf jeden Fall für die sinkenden Renditen der IPC-Skalierung, da die Leistung mit einem Thread immer noch so wertvoll ist, wenn es auf Latenz ankommt, nicht nur auf den Durchsatz massiv parallele Probleme.

Die Möglichkeit, 8 Kopien eines Spiels mit jeweils 15 Bildern pro Sekunde parallel auszuführen, ist weitaus weniger wert als die Möglichkeit, eine Kopie mit 45 Bildern pro Sekunde auszuführen. CPU-Anbieter wissen dies, und deshalb verwenden moderne CPUs eine Ausführung außerhalb der Reihenfolge, obwohl dies erhebliche Kosten für Leistung und Chipfläche verursacht. (Aber GPUs nicht, weil ihre Arbeitslast bereits massiv parallel ist).

Intels Xeon Phi-Hardware mit vielen Kernen (Knight's Landing / Knight's Mill) ist ein interessanter Punkt auf halber Strecke: sehr begrenzte Ausführung außerhalb der Reihenfolge und SMT, um 2-breite Kerne mit AVX512-SIMD-Anweisungen zu versorgen, um Zahlen zu knacken. Die Kerne basieren auf der stromsparenden Silvermont-Architektur von Intel. (Außer Betrieb, aber mit einem kleinen Neuordnungsfenster, viel kleiner als die Sandybridge-Familie mit großem Kern. Und einer engeren Pipeline.)


Übrigens ist dies alles orthogonal zu SIMD. Es hilft immer, mehr Arbeit pro Anweisung zu erledigen , wenn es für Ihr Problem möglich ist.


Preismodelle

Software-Preismodelle basieren auf der aktuellen Hardwarelandschaft.

Mit dem Aufkommen von Multi-Core-CPUs verbreiteten sich Lizenzierungsmodelle pro Kern (und waren sogar für Single-Socket-Desktops relevant). Vorher war es nur für Server und große Workstations relevant.

Wenn Software nicht mehrere Kerne benötigt, um mit höchster Geschwindigkeit zu laufen, gibt es keine Möglichkeit, sie billiger an Leute zu verkaufen, die nicht so viel Nutzen daraus ziehen, weil sie sie auf einer schwächeren CPU ausführen. Es sei denn, das Software- / Hardware-Ökosystem hat möglicherweise Steuerelemente für "SMT-Kanäle" entwickelt, mit denen Sie eine maximale Ausführungsbreite für Code konfigurieren können, der auf diesem logischen Kern ausgeführt wird. (Stellen Sie sich erneut eine Welt vor, in der CPUs anstelle mehrerer separater Kerne in der Pipelinebreite skalieren.)


2
"Thread-Start ist teuer" - das ist keine harte Tatsache; Es ist ein Artefakt gängiger moderner Betriebssysteme.
MSalters

1
@MSalters In der Tat haben einige Forschungsprojekte untersucht, wie großartig es wäre, diesen Ansatz fallen zu lassen. Das gleiche gilt für die "menschliche Klugheit, Code zu überarbeiten" - es gibt Möglichkeiten, Code zu schreiben, die natürlich einfacher zu parallelisieren sind. Sie waren in den letzten Jahrzehnten einfach nicht sehr beliebt. Wo sie sind , verwendet werden, können Sie in der Regel massiv horizontale Skalierung zu sehr geringen Kosten sehen; in der Tat bis zu dem Punkt, dass die horizontale Skalierung in vielen Anwendungen weitaus billiger als die vertikale wird. Es bedeutet nur, dass Sie den Entwicklern nicht die Wahl geben dürfen - wenn die Umstände es erzwingen, funktioniert es
einwandfrei

11

Lassen Sie mich eine Analogie ziehen:

Wenn Sie einen Affen haben, der an einer Schreibmaschine tippt, und Sie möchten, dass mehr getippt wird, können Sie dem Affen Kaffee geben, Schreibstunden erteilen und vielleicht Drohungen auslösen, damit er schneller funktioniert, aber irgendwann wird der Affe es tun schreibe mit maximaler Kapazität.

Wenn Sie also mehr tippen möchten, müssen Sie mehr Affen haben.


Um die Analogie weiter auszudehnen, benötigen Sie für jeden Affen eine separate Schreibmaschine (die den Datenbus darstellt, den jeder Kern benötigt). Sie benötigen eine Möglichkeit, die Bananen zu jedem Affen zu bringen und etwas, um deren Kot aufzunehmen (analog zu Stromverteilung und Wärme) Dissipation) und Sie müssen sicherstellen, dass nicht alle Affen versuchen, die gleiche Passage in Twelfth Night zu tippen (analog zur richtigen Aufteilung der Arbeitslast auf die Prozessoren). Aber all dies ist weniger Arbeit für mehr Gewinn als der Versuch, mehr aus einem Affen herauszuholen.


7

Sie weisen darauf hin, dass eine Menge Software nicht mehr als (x) Kerne verwendet. Dies ist jedoch eine Einschränkung, die von den Entwicklern dieser Software auferlegt wird. Heim-PCs mit mehreren Kernen sind noch neu (ish) und das Entwerfen von Multithread-Software ist mit herkömmlichen APIs und Sprachen ebenfalls schwieriger.

Ihr PC führt auch nicht nur dieses 1 Programm aus. Es werden eine ganze Reihe anderer Dinge ausgeführt, die auf weniger aktive Kerne übertragen werden können, damit Ihre primäre Software nicht so sehr von ihnen unterbrochen wird.

Derzeit ist es nicht möglich, die Geschwindigkeit eines einzelnen Kerns auf den Durchsatz von 8 Kernen zu erhöhen. Mehr Geschwindigkeit wird wahrscheinlich von einer neuen Architektur kommen müssen.

Da im Allgemeinen mehr Kerne verfügbar sind und APIs mit dieser Annahme entworfen wurden, werden Programmierer im Allgemeinen mehr Kerne verwenden. Die Bemühungen, die Erstellung von Designs mit mehreren Threads zu vereinfachen, werden fortgesetzt. Wenn Sie diese Frage in ein paar Jahren stellen würden, würden Sie wahrscheinlich sagen: "Meine Spiele verwenden normalerweise nur 32 Kerne. Warum hat meine CPU 256 Kerne?".


3
Der Unterschied zwischen 1 und mehreren Kernen ist enorm , wenn es darum geht, die Vorteile von Software zu nutzen. Die meisten Algorithmen und Programme sind seriell. Zum Beispiel hat Donald Knuth gesagt, dass Multi-Core-CPUs so aussehen, als würden HW-Designer " versuchen, die Schuld für den zukünftigen Untergang von Moores Gesetz an die Software-Autoren weiterzugeben, indem sie uns Maschinen geben, die nur auf einigen wichtigen Benchmarks schneller arbeiten! "
Peter Cordes

Leider hat sich noch niemand einen Weg ausgedacht, ein Single-Threaded-Programm mit einem einzigen Wide / Fast-Core so schnell laufen zu lassen, wie es möglich ist, effizient parallelen Code für die Ausführung auf mehreren Cores zu erhalten. Glücklicherweise ist den CPU-Entwicklern jedoch klar, dass die Single-Thread-Leistung nach wie vor von entscheidender Bedeutung ist, und sie machen jeden einzelnen Kern viel größer und leistungsfähiger, als dies bei parallelen Problemen der Fall wäre. (Vergleichen Sie einen Skylake (4-wide) oder Ryzen (5-wide) mit einem Kern eines Xeon Phi (Ritterlandung / Rittermühle basierend auf Silvermont + AVX512) (2-wide und limitierte OoO exec)
Peter Cordes

2
Auf jeden Fall ist es für ein Multitasking-Betriebssystem oft hilfreich, mindestens 2 Kerne zu haben, aber vorbeugendes Multitasking auf einem einzelnen Kern, der vier- oder achtmal so schnell ist wie eine aktuelle CPU, wäre ziemlich gut. Für viele interaktive Use-Cases wäre das viel besser, wenn es überhaupt möglich wäre, mit dem gleichen Strombudget zu bauen. (Dual Core hilft jedoch, die Kosten für den Kontextwechsel zu reduzieren, wenn mehrere Tasks CPU-Zeit benötigen.)
Peter Cordes,

1
Alles wahr, aber historisch gesehen war Multi-Core teurer. Es gab nicht viele Gründe, parallele Algorithmen außerhalb wissenschaftlicher Anwendungen zu entwerfen. Es gibt viel Raum für Parallelisierung, selbst in Algorithmen, die eine meist serielle Ausführung erfordern. IPC der aktuellen Generation ist jedoch nicht besonders gut und lässt sich leicht durcheinander bringen. Dies führt im Allgemeinen zu Fehlern, die wirklich schwer zu finden und zu beheben sind. Natürlich wäre eine 4x schnellere CPU erstaunlich (aber Sie würden immer noch mehrere Kerne wollen).
Hekete

2
@PeterCordes Nun, die meisten Algorithmen und Programme sind nicht seriell, weil sie sein müssen, sondern hauptsächlich, weil es so war, wie es immer gemacht wurde (mit dem Spritzer "Es war ein guter Kompromiss"). In den ungeheuerlichsten Fällen können Sie dasselbe Programm viermal auf vier verschiedenen Workloads ausführen und ohne Probleme parallel ausführen. Dies ist jedoch ein weiteres Problem: Die CPU ist nicht allzu oft ein Engpass, und normalerweise werden bessere Algorithmen verwendet, nicht mehr CPUs. Manchmal helfen diese auch bei anderen Engpässen (Speicher, Festplatte, Netzwerk ...).
Luaan

3

Der aus historischer Sicht zwingendste Grund ist die Verlustleistung .

Nach dem Pentium IV versuchte Intel, einen Prozessor der nächsten Generation mit dem Codenamen Tejas zu entwickeln, der im Bereich von 4 GHz bis 12 GHz laufen sollte. Das Problem war, dass das Laufen mit dieser Geschwindigkeit zu viel Wärme erzeugte, um lebensfähig zu sein.

Nachdem Tejas abgesagt worden war, brauchte Intel weitere 10 bis 15 Jahre, bis die Kerne endlich mit 4 GHz und akzeptabler Hitze betrieben wurden.

Siehe Tejas und Jayhawk .

Intel hatte parallel zu Tejas ein weiteres Projekt, bei dem mehrere Kerne zum Einsatz kamen. Das Projekt hatte ein akzeptables Maß an Hitze, und so ging es weiter. Es ermöglichte ihnen, die Leistung jetzt zu steigern, anstatt weitere 10 Jahre auf 10-nm-Herstellungsprozesse zu warten.

Angenommen, die Kerne haben keinen Ressourcenmangel, dann müsste die Befehlsrate dieses einzelnen Kerns N-mal schneller sein, um dieselbe Anzahl von Befehlen pro Sekunde von einem einzelnen Kern anstelle von N Kernen zu erhalten. Die dynamische Verlustleistung eines CPU-Kerns ist linear proportional zur Betriebsfrequenz. Sie ist auch proportional zum Quadrat der Betriebsspannung. Der Betrieb bei niedrigeren Frequenzen ermöglicht die Verwendung niedrigerer Betriebsspannungen. Die Verwendung niedrigerer Spannungen bei niedrigeren Frequenzen bedeutet, dass die erzeugte Wärme praktisch mit dem Würfel der Betriebsfrequenz abnimmt.

Ein extremes Beispiel hierfür ist das menschliche Gehirn, das mit nur 20 W Leistung 2 ^ 18 Operationen pro Sekunde ausführen kann. Dies wird erreicht, indem Milliarden von Neuronen mit nur wenigen hundert Hz parallel geschaltet werden.

Denken Sie auch daran, dass auf einem PC in der Regel Hunderte oder Tausende von Threads gleichzeitig ausgeführt werden. Das Betriebssystem verwaltet das Zuweisen von Zeit auf einem Kern zu jedem Thread. Selbst wenn ein einzelnes Programm nicht alle Kerne ausnutzt, hat es dennoch Vorteile, da die anderen Programme weniger CPU-Zeit in Anspruch nehmen, wenn sie auf einem anderen Kern ausgeführt werden.

Wenn überhaupt, verlagert sich der Hochleistungsmarkt zunehmend auf die Parallelverarbeitung in Form von FPGAs. Intel hat kürzlich Altera (den zweitgrößten FPGA-Hersteller) gekauft und verkauft nun Boards mit einem FPGA-Hardwarebeschleuniger. Die Software kann das FPGA zur Laufzeit über einen API-Aufruf mit einem Image laden. Die CPU speist dann Daten in das FPGA ein und überlässt es den größten Teil der Arbeit. Bei den Anwendungstypen handelt es sich normalerweise um Videokodierung, AI, Rendering, Datenbanksuche usw.


Denken Sie auch daran, dass auf einem PC in der Regel Hunderte oder Tausende von Threads gleichzeitig ausgeführt werden. Nein, läuft nicht . Auf modernen Desktops gibt es so viele Threads, aber fast alle schlafen und warten auf E / A oder einen Timer zu einem bestimmten Zeitpunkt. ZB beträgt der durchschnittliche Lastwert (in der letzten Minute) auf meinem Linux-Desktop derzeit 0,19 Tasks, die zu einem bestimmten Zeitpunkt für die Nutzung der CPU-Zeit aktiv sind. Wenn ich eine Video-Codierung ausgeführt hätte, hätte x264 mehrere Threads für das Betriebssystem gestartet, um mehrere Kerne zu planen, aber nur ungefähr so ​​viele, wie ich über logische Kerne verfüge.
Peter Cordes

Übrigens ließ das OP (aus irgendeinem Grund) die Frequenz vollständig aus und fragte nach der Skalierung des IPC (Befehle pro Taktzyklus), nicht pro Sekunde. Was Sie sagen, ist wahr, aber sie schlugen vor, CPUs breiter zu machen , nicht höher zu takten. Ich habe das bereits in meiner Antwort angesprochen, daher ist Ihre Antwort, die die Leistungsskalierung mit der Frequenz erklärt, eine nette Ergänzung, +1.
Peter Cordes

@PeterCordes Das ist richtig, ich wollte nicht implizieren, dass alle Threads auf einmal ausgeführt werden, die wechseln sich natürlich ab. Danke fürs klarstellen.
user4574

Nun, nicht so sehr "abwechselnd", als dass sie die meiste Zeit überhaupt nicht bereit sind zu rennen. Meistens schlafen sie alle, und in der Regel werden sie erst nach einer kurzen Rechenpause wach, wenn das Betriebssystem gerade einen Tastendruck oder einen Netzwerklesevorgang ausgibt, oder sie werden aufgeweckt, weil ein Timer abgelaufen ist. Es kommt selten vor, dass mehr als zwei Personen gleichzeitig wach sind, es sei denn, Sie machen tatsächlich etwas rechenintensives. Und wenn ja, starten Sie nicht Hunderte von Threads, sondern eine Anzahl von Threads ~ = Anzahl der verfügbaren Kerne.
Peter Cordes

2

Nur um das Bild abzurunden, wohin das alles führt ...

Neuronale Netze und KI sind die aktuellen Themen. Ein Grund ist, dass man eine große Anzahl einfacher Kerne effizient parallel verwenden und so nahezu die maximale Rechenleistung erzielen kann. Die Anforderung ist von Natur aus massiv parallel und lässt sich relativ einfach auf eine Reihe von Prozessoren abbilden, ohne dass viel Kommunikation zwischen den Kernen erforderlich ist. Aus diesem Grund waren GPUs die erste Goto-Technologie für die KI-Beschleunigung. Momentan sehen wir, dass Chips für NNs, die auf den Markt kommen, noch besser optimiert sind als Video-GPUs. Der nächste oder vielleicht letzte Schritt besteht darin, NNs unter Verwendung analoger Technologien wie Memristoren herzustellen.

Nebenbei bemerkt, in so etwas wie einem Gaming-PC steckt weitaus mehr Leistung in der Grafikkarte als in der Multicore-Intel- oder AMD-CPU


2
Zu "... von Natur aus massiv parallel" : Auch peinlich parallel ?
Peter Mortensen

1

Grundsätzlich sind CMOS-Verluste exponentiell (1,5) proportional zur Frequenz und die Leistung der parallelen CPU ist etwas geringer als linear proportional zur Anzahl der CPUs.

Daher wird das Verhältnis von Rechenleistung zu Verlustleistung für Multi-CPU-Anwendungen bei unterschiedlichen Taktraten verbessert, wenn Geschwindigkeit und Anzahl der CPUs für eine feste Verlustleistung verglichen werden.

Es ist komplexer als das, aber dies sind die Grundlagen, warum parallele CPUs in dynamischen Anwendungen besser pro Watt abschneiden. Bei der Optimierung für ein Szenario gibt es immer Ausnahmen.

Es ist nicht die Größe einer größeren CPU, die sie für Intel / AMD-typische PC-Anwendungen schneller macht, sondern die reduzierte Größe aufgrund der lithografischen Auflösung und der geringeren Gate-Kapazität, die die Leistung zusammen mit dem reduzierten Unterschwellenwert und der reduzierten Kernspannung reduziert.

Die Verbesserung ist nicht linear und bedeutet nicht, dass 8 Kerne 4x besser sind als 2, aber das Ziel, wenn es erreicht wird, ist ein größerer dynamischer Verarbeitungsbereich mit einer Drosselung der Verlustleistung, der Geschwindigkeit und der Spannung, um sowohl die Leistung als auch den Wirkungsgrad und die Spitzenleistung bei Bedarf zu verbessern übermäßiger Temperaturanstieg.

Eine wissenschaftlichere Antwort finden Sie unter https://www.sciencedirect.com/topics/computer-science/dynamic-power-consumption


-2

Multicores sind normalerweise nicht multiscalar. Und multiskalare Kerne sind keine Multikerne.

Es wäre eine perfekte Lösung, eine Multiscalar-Architektur mit mehreren Megahertz zu finden, aber im Allgemeinen wären die Bridges nicht für den Endverbraucher geeignet, sondern kostenintensiv. Daher besteht die Tendenz eher in der Multicore-Programmierung mit niedrigerer Frequenz als in kurzen Befehlen bei hohen Taktraten.

Mehrere Instruktionskerne sind billiger und einfacher zu verwalten. Aus diesem Grund ist es eine schlechte Idee, eine Multiscalar-Architektur mit mehreren Gigahertz zu haben.


1
Meinst du "superskalar", mehrere Anweisungen pro Uhr? Die meisten Multi-Core-CPUs sind superskalar. zB Ryzen ist 5 breit. Die High-End-AArch64-Chips von Apple sind 6 oder 8 breit. Es gibt viele Probleme, die eine 2-breite CPU im meisten Code ausnutzen kann. Es lohnt sich daher, jeden Kern mindestens 2-breit zu machen, bevor Sie ihn auf mehrere Kerne skalieren, für die jeweils ein eigener privater Cache erforderlich ist, und eine Verbindung zwischen den Kernen ( Beispiel: Intels Xeon Phi-Mehrkerncomputerkarten haben viele Dual-Issue-Kerne. Gleiches gilt für Smartphone-Kerne: Kleine Kerne sind mindestens 2-fach breit. Singlethread-Performance zählt!
Peter Cordes

1
Oder haben Sie dl.acm.org/citation.cfm?id=224451 gemeint - ein Forschungspapier über sogenannte "Multiscalar" -Kerne, die im Kontrollflussdiagramm eines Programms mithilfe von ILP über größere Bereiche suchen eine Kombination von HW und SW. Die Mainstream-CPUs, die wir in Desktops und Smartphones verwenden, sind nicht so. Sie sind einfach nur superskalar nicht Reihenfolge ausgeführt. Sie implementieren einen seriellen ISA, der vorgibt, Anweisungen nacheinander auszuführen.
Peter Cordes

Vielen Dank. afaik, die Idee hinter dem Skalarbogen ist die Messbarkeit der Wärme hinter bekannten oder vordefinierten Anweisungssätzen (der Fall von AVX). <br/> Gegenwärtige Berechnungen von Architekturen im Vergleich zu Wärme sind nicht berechenbar. Dies erhöht die Unwahrscheinlichkeit, dass Multikerne bei großen Frequenzen laufen könnten, da ihre Fähigkeit, in einem Zeit / Wärme-Ideal zu arbeiten, nicht berechenbar ist. das ist alles was ich bisher weiß. ich grabe vektormaschinen, um die physik von "multiscalars" zu verstehen. der fall ist xeon / phy folge einer idealen thermischen kurve wie im alten cpus. Verbesserung des Kundenerlebnisses
kundenerlebnisses machtur

SIMD-Befehlssätze wie AVX sind eine Möglichkeit, mehr Arbeit durch die Pipeline zu bringen ohne die gesamte Pipeline, nur die Ausführungseinheiten, erweitern zu müssen. Beispielsweise kann Skylake 3 vpaddd ymm0, ymm1, ymm2Befehle pro Takt ausführen, von denen jeder 8 gepackte 32-Bit-Ganzzahladditionen ausführt. Pro Takt werden also 24 Ganzzahlen addiert, aber die Maschine zur Ausführung von Fehlern muss "nur" 3 Anweisungen im Flug verfolgen. Das ist viel billiger zu bauen als eine CPU, die 24 add eax, edxBefehle pro Takt ausführen kann . SIMD ist grundsätzlich orthogonal zur Pipelinebreite.
Peter Cordes

Skylake ist ein guter Optimierungsfall pro Taktzyklus. Die Varianten sind zahlreich, ich bin nicht in sie, die interessante Fälle der internen Busoptimierung sind, da Skylakes Xeon Original Offloading auf diese Weise in die SIMD-Pipeline integrieren. Ich gehe davon aus, dass ein großer Kern das Auslagern und Berechnen in wenigen Zyklen integrieren würde, wie es (zum Beispiel) das Phänomen für AVX tut. Dies ist die Art und Weise, wie die Berechnung die für interne Blockoperationen erforderliche Leistung in die Vorwärtsrichtung integriert hat. im gegensatz zu mehreren kurzen anweisungen wie in gpu-like mit mehreren "virtuellen" kernen ähnlich wie bei zusätzen zum nehalem
kernen ergänzungen zum nehalem
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.