Laptops haben normalerweise höchstens vier Kerne und Dualcores sind wahrscheinlich häufiger. Ich habe kürzlich von Quadcore auf Dualcore umgestellt und kann bestätigen, dass es eine begrenzte Anzahl von Anwendungsfällen für Quadcore gibt, selbst bei CPU-intensiven Aufgaben.
Auf der anderen Seite scheinen bei Mobiltelefonen Quadcores, Hexacores und Octacores üblich zu sein. Warum? Welche Aufgaben können sie nutzen?
Ich verstehe, dass big.LITTLE ein Teil der Antwort sein kann. Das heißt, der Hauptvorteil so vieler Kerne besteht nicht in der Möglichkeit, alle gleichzeitig zu verwenden, sondern in der Verwendung eines Kerns, dessen Stromverbrauch der aktuellen Arbeitslast entspricht. Das Snapdragon 625 verfügt jedoch beispielsweise über acht Cortex-A53-Kerne, was für big.LITTLE kein Fall zu sein scheint.
Möglicherweise weist die ARM-Architektur einen niedrigeren Punkt für die optimale Leistung pro Watt auf. Das heißt, ein einzelner Kern, der auf optimale Leistung pro Watt eingestellt ist, führt auf ARM zu einer geringeren Leistung als auf Intel. Daher werden mehr Kerne verwendet, um die Leistung zu erbringen. Dies ist nur eine Hypothese.
Aber selbst in diesem Fall sehe ich nicht, welche Arbeitslast beispielsweise acht Kerne auf einem Mobiltelefon effizient nutzen kann. Auf Laptops kann ich mir einige wie eine vollständige (nicht inkrementelle) Zusammenstellung eines Projekts vorstellen. Aber am Telefon?
- Spiele können leistungshungrig sein, erfordern jedoch in der Regel GPU-Leistung und nicht CPU, oder?
- Theoretisch könnten mehrere Kerne die Kompilierung von Android Lollipop / Marshmallow AOT bei der Installation oder beim Upgrade beschleunigen (dh in der Phase „Optimieren von Apps 3/121“). Ich bin mir jedoch nicht sicher, ob dies mehrere Kerne nutzen kann. Soweit ich mich an den Code erinnere, wird immer nur eine App kompiliert, aber möglicherweise gibt es Parallelität im Kompilierungsprozess.
- Auch Android 7+ könnte beim Kompilieren mehrere Kerne verwenden. Aber da es angeblich im Leerlauf und beim Aufladen kompiliert wird, scheint der Nutzen eher gering zu sein. Zumindest, wenn man das Telefon über Nacht auflädt - es ist mir wirklich egal, ob es in einem solchen Szenario 30 Minuten oder zwei Stunden dauert.
Antworten:
Wie Sie bereits bemerkt haben, ist die big.LITTLE- Kombinationsstrategie (technisch gesehen HMP , Heterogeneous Multi-Processing- Cluster) der Hauptgrund für so viele (und manchmal überwältigend viele) Kerne. Ein mobiles Gerät ist häufig mit mehreren Szenarien konfrontiert, darunter auch Szenarien mit hoher und geringer Belastung.
Ein extremes Beispiel der Verbraucherklasse ist das Helio X20 von MediaTek mit 2 leistungsorientierten A72-Kernen, 4 symmetrischen A53-Kernen und 4 energieeffizienten A35-Kernen. Das ist in verschiedenen Anwendungsfällen sehr flexibel. Ich denke jedoch,
8 Kerne2 Cluster ist in der Regel genug.Es gibt auch ein anderes Desktop-ähnliches Beispiel, die Snapdragon 800-Serie von Qualcomm (S 800, S 801 und S 805). In jedem SoC gibt es nur 4 Kerne derselben Mikroarchitektur, von denen 2 höher und 2 niedriger getaktet sind. Qualcomm stellte diese SoCs her, weil sie sich ihrer eigenen Mikroarchitektur (Krait 400 und Krait 450) sehr sicher waren.
Für Spiele, auch wenn sie anscheinend eher GPU-Leistung als CPU verlangen, belasten sie die CPU dennoch stark. Eine GPU kann nicht alleine arbeiten, ohne dass etwas anderes sie mit zu verarbeitenden Daten versorgt, und das ist eine der Hauptaufgaben, die die CPU während des Spielens erledigt. In den meisten Spielefällen rendert die GPU nur Grafiken, während alle anderen Aufgaben wie das Laden von Daten, Ressourcen und Ressourcen sowie das Berechnen der Mechanismen im Spiel wie System, Umgebung und Physik von der CPU ausgeführt werden. Sie werden keine höhere Bildrate feststellen, wenn Sie Ihre GPU aktualisieren, während Sie sich an eine Low-End-CPU halten.
Ein zweiter Grund ist, wie Android CPU-Ressourcen nutzt . Android macht so ziemlich ihre eigene Anwendungsumgebung. Es verwendet nur Codes (und APIs) aus Java, verfügt jedoch über eine eigene virtuelle Maschine namens Dalvik, die später durch ART (API Level 21) ersetzt wurde. APKs haben ihre ausführbaren Codes in einem "neutralen" Format, ähnlich wie
.class
Dateien in Java. Bevor sie ausgeführt werden, werden die Codes noch einmal in die systemeigenen Anweisungen der Maschine kompiliert [1] . Der Kompilierungsprozess ist multithreaded und kann Multikerne für eine Leistungssteigerung verwenden.Und wenn eine App ausgeführt wird, gibt es mehrere andere Prozesse und Mechanismen (wie den Garbage Collector), die neben oder parallel zur App ausgeführt werden. Mit mehr Kernen können die unterstützenden Prozesse sowie die Haupt-App effizienter ausgeführt werden.
1. Wenn Sie einen Dateitypbezeichner verwenden, werden Sie feststellen, dass "optimierte" Dex-Dateien im ELF-Format vorliegen, während die "neutralen" Dex-Dateien nur ein eigenes Format haben.
Ein weiterer Grund ist, dass ARM-Kerne nicht so schnell arbeiten können wie ein Intel x86-Chip . Die Intel x86-Mikroarchitektur geht auf das Jahr 1976 zurück, als der Intel 8086- Chip entwickelt wurde, was bedeutet, dass sich der x86-Chip über eine lange Zeit entwickelt hat. Ein einzelner moderner High-End-ARM-Cortex-A73-Kern ist nur so leistungsfähig wie ein Intel-Clarkdale-Kern, am Beispiel des Core i5-660 (GeekBench, Single-Core). Dies liegt daran, dass x86 eine CISC- Mikroarchitektur und ARM eine RISC istMikroarchitektur. Sie möchten mit Sicherheit kein Telefon, das mit nur zwei oder mehr aktiven Apps in Verzug gerät. Weitere Kerne entlasten den Druck. Aus diesem Grund sind Dual-Core-SoCs nur bei intelligenten Uhren relativ beliebt. Wer braucht Leistung auf einer Smartwatch?
Interessanterweise führen mehr Kerne zu weniger Energie als ein einzelner Kern bei gleicher Last . Das Verhältnis zwischen CPU-Frequenz und Stromverbrauch ist mehr als linear, sodass die doppelte Frequenz immer mehr als das Doppelte oder sogar das Dreifache oder Vierfache des Stromverbrauchs erfordert und gleichzeitig weniger als die doppelte Leistung erbringt (aufgrund anderer Ressourcenbeschränkungen wie Cache) ). Auf diese Weise können 4 Kerne einen einzelnen Kern bei gleicher Last problemlos schlagen, wodurch eine bessere Leistung erzielt und gleichzeitig weniger Strom benötigt wird.
Weitere Lektüre:
quelle
Der Grund ist so einfach wie kompliziert.
Die kurze Antwort lautet: "Weil der Mobilfunkmarkt noch nie von Intel getrieben wurde und wird".
Die lange Antwort ist viel zu lang, um hier fortzufahren, aber das grundlegende Konzept ist, dass Intel den PC-Markt jahrelang mit allen Mitteln beherrscht, bis zu dem Punkt, dass er bezahlt und korrumpiert (und dafür bestraft wird), dass seine CPUs die sind erste und einzige Wahl für PC-Hersteller.
Die vollständige Kontrolle über den Markt hat es Intel ermöglicht, die CPU-Preise zu erhöhen und gleichzeitig künstlich zu entscheiden, welche Funktionen und wie viel Rechenleistung die Benutzer hätten wünschen sollen. Wenn Sie ein wenig die Intel-Geschichte analysieren, werden Sie feststellen, dass die Hauptstärke im Wesentlichen darin liegt die Erhöhung der CPU-Frequenz, so dass es meistens nie versucht hat, etwas wirklich Kluges oder Innovatives zu tun; und es hat es nicht gebraucht, weil es nur den Leuten sagen kann "man braucht keine Kerne mehr, aber ich habe diese saftigen neuen CPUs, die 100 MHz schneller laufen". Gleichzeitig könnte es Multicore-CPUs auf dem Servermarkt zu absurd hohen Preisen verkaufen (weil Server immer gebraucht haben)Tonnen von paralleler Energie, bis zu dem Punkt, dass es einen aktuellen Trend gibt, Server zu realisieren, die ... raten Sie mal was? Hunderte Ihrer billigen Telefon-CPUs arbeiten parallel
Dies hat sich wiederum in der Entwicklergemeinschaft niedergeschlagen, die die Bedeutung der parallelen Programmierung nie erkannt hat, so dass sich viele, wenn nicht die meisten von ihnen nie die Mühe machten, mehr als einen Thread gleichzeitig zu verwenden oder ihn in einem Non auszudrücken Auf technische Weise kann die Software mehr als eine Aufgabe gleichzeitig ausführen. Was im Übrigen sinnvoll ist, wenn 99% Ihres Kundenstamms zwei Kerne mit max. Leider hatte dies zu der Legende geführt, dass parallele Algorithmen wirklich schwierig zu implementieren sind und nur für eine kleine Teilmenge von Problemen gelten.
Stattdessen hat der Mobilfunkmarkt letztendlich noch nie Erfolg mit Intel gehabt. Im Gegenteil, eigentlich versucht Intel die meiste Zeit etwas anderes als die übliche X86-Architektur. Da es also an Einfluss und Kontrolle auf dem Markt mangelt, sind die anderen Hersteller von CPUs in die Richtung gegangen, die seit Jahrhunderten außerhalb des PC-Marktes üblich ist: Parallel Computing.
quelle
Es gibt zwei Faktoren, einen sehr praktischen und einen historischen.
Der praktische Grund ist die Verwendung gemischter Architekturen in Telefonen. Der Stromverbrauch ist entscheidend, wenn Telefone viel Zeit in Modi verbringen, in denen sie nur sehr wenig Leistung benötigen. Es ist sinnvoll, einige Kerne für einen minimalen Stromverbrauch zu optimieren, wenn nur wenig Leistung benötigt wird, während einige Kerne für eine maximale Leistung bei Bedarf optimiert werden.
Der andere Grund ist weitgehend historisch. Bis 2005 waren Desktop-CPUs alle Einzelkerne. Die Verbesserung der Desktop-CPU-Leistung bestand fast ausschließlich darin, einen Kern zu erstellen, der so viele Anweisungen pro Sekunde wie möglich ausführen kann. Selbst heute kann so viel Desktop-Software nicht alle Vorteile mehrerer Kerne nutzen, dass viele eine CPU mit 4 Kernen gegenüber einer 8-Kern-CPU mit 20% langsameren Kernen bevorzugen.
Um so viel Leistung wie möglich aus einem einzigen Kern herauszuholen, ist viel CPU-Platz erforderlich. Dies ist eine Immobilie, die ansonsten zur Bereitstellung weiterer Kerne verwendet werden könnte. Dies ist der Grund, warum Intels neueste Kaby Lake-CPUs maximal 4 Kerne haben und die Leute sie kaufen, weil jeder Kern schneller ist als die Kerne ihres Vorgängers. Für viele ist dies sogar ein Upgrade von CPUs mit einer höheren Kernanzahl.
Erwarten Sie im Laufe der Zeit viel mehr Desktop-Software, die für die Unterstützung von mehr Kernen optimiert ist. In diesem Fall ziehen die technischen Kompromisse mehr Kerne schnelleren Kernen auf Desktops vor. Während Kerne mit ziemlicher Sicherheit noch schneller werden, werden Sie feststellen, dass Leute eine 8-Kern-CPU einer 4-Kern-CPU vorziehen, selbst wenn jeder Kern 20% langsamer ist. Chipdesigner werden dem Markt folgen.
quelle
Es ist von entscheidender Bedeutung, dass ein Telefon in der Lage ist, Rechenleistung in kurzen Intervallen bereitzustellen (bestimmte Apps müssen schnell sein), aber auch eine Überhitzung zu vermeiden (die Wärmeableitung ist für Telefone viel schwieriger als für Laptops oder PCs). Zu diesem Zweck entwerfen Architekten Telefone so, dass sie bei geringer Auslastung einen einzigen Kern verwenden und zusätzliche Kerne bereitstellen, um die Leistung bei Bedarf zu steigern. Wenn Telefone weniger große Kerne verwenden würden, würde eine Überhitzung zu einem Problem werden, selbst wenn die Arbeitslast relativ gering ist.
Quelle: Ein Kurs für Computerarchitektur auf Hochschulniveau.
quelle
Erstens kann die Java Virtual Machine in der Vergangenheit mehr von Multi-Core-Anwendungen als übliche Desktop-Software profitieren. Selbst wenn Sie eine Single-Threaded-App in Java schreiben, wird sie auf einem Multicore schneller ausgeführt, da der größte Teil des Garbage Collector-Codes zusammen mit Ihrer App ausgeführt wird.
Zweitens spielt sich im Hintergrund auf Ihrem Telefon eine Menge ab: automatische Updates, Anzeigen-Downloads, Antivirensoftware, Verwaltung des GSM-Moduls usw. Auf einem Laptop würden all diese Aufgaben kaum einen Kern beschäftigen, ARM-Kerne jedoch viel weniger leistungsfähig, daher möchten Sie möglicherweise mindestens einige davon für Hintergrundaufgaben verwenden, wenn Sie ein reaktionsfähiges System benötigen.
Endlich gibt es Marketing. Nicht viele Benutzer sind in der Lage zu beurteilen, ob sie von 8 Kernen profitieren würden, aber ein 8-Kern-Smartphone klingt sicherlich teurer als ein 2- oder 4-Kern-Smartphone.
quelle
Die bisherigen Antworten erklären einige Aspekte des Problems, das zu dieser überwältigenden Anzahl von CPU-Kernen auf Android-Handys führt. Lesen Sie das noch einmal; Android-Handys. Das iPhone hat es über lange Zeit geschafft, sich auf nur ein paar Kerne zu beschränken und ist dennoch wesentlich flüssiger als jedes andere Android-Flaggschiff.
Die Designer von Android haben bei der Entscheidung für die Java-Programmierung und in der Folge für die JVM als Laufzeit für Anwendungen ein großes Risiko eingegangen. Java löst aufgrund seiner Entwurfsprinzipien das Problem, dass Code für jede CPU-Architektur kompiliert und erstellt werden muss, bevor er durch Leistungseinbußen ausgeführt werden kann. Java führt eine schwere und sperrige virtuelle Maschine ein, die üblicherweise als JVM bezeichnet wird. Die JVM emuliert tatsächlich eine CPU auf Softwareebene, um zu vermeiden, dass Code für jedes Gerät separat kompiliert werden muss. Stellen Sie sich die JVM als eine virtuelle CPU vor, die unabhängig vom verwendeten Gerät dieselben Eigenschaften aufweist, sodass der Code für die JVM nur einmal kompiliert werden muss und dann auf jedem Gerät ausgeführt werden kann. Auf diese Weise können Hersteller jede gewünschte Hardware einsetzen, bevor sie sich um die Anwendungskompatibilität kümmern müssen.
Die JVM selbst ist lediglich eine Spezifikation, und es steht den Anwendern frei, ihre eigene JVM zu entwickeln, sofern diese dieser Spezifikation entspricht. Die ursprüngliche Android-JVM hieß Dalvik. Heutzutage hat Google das durch ART ersetzt.
Was ist nun das Problem mit JVM? Es ist ein schweres Stück Software, das eine ganze Menge Rechenressourcen verbraucht. Hinzu kommen einige andere Eigenschaften der Java-Sprache wie Garbage Collection und der Ressourcenverbrauch der JVM, die für ein Gerät mit bescheidener Hardwareleistung zu hoch sind. Jede Anwendung und jeder Systemdienst, die bzw. der auf Ihrem Gerät geöffnet ist, ist selbst eine Instanz der ART JVM, und Sie können jetzt feststellen, dass für die Verwaltung aller Anwendungen eine wirklich leistungsfähige Hardware erforderlich ist. Noch schlimmer wird es, wenn Benutzeroberflächen gezeichnet werden müssen.
Jede Anwendung läuft auf mehreren Threads. Jeder CPU-Kern kann jeweils nur einen Thread ausführen. Jede App verfügt über einen Haupt-Thread, in dem die mit der Benutzeroberfläche verbundenen Aufgaben ausgeführt werden. Pro Anwendung sind möglicherweise viel mehr Threads für den Dateizugriff, das Netzwerk usw. verfügbar. Im Allgemeinen sind mehr Apps (und Systemdienste) geöffnet als CPU-Kerne. Infolgedessen sind in der Regel viel mehr Threads vorhanden als CPU-Kerne. Jeder Kern muss also ständig zwischen der Verarbeitung verschiedener Threads wechseln, von jedem ein wenig machen und zum nächsten übergehen. Dieses Umschalten beansprucht viel Zeit für die CPU, und wenn es sich bei den Anwendungen im Wesentlichen um JVMs handelt, wird diese Aufgabe noch umfassender.
Basierend auf dieser Erklärung könnte man ableiten, dass Android leistungsstarke Hardware benötigt, um reibungslos zu funktionieren. Die frühen Generationen von Android-Geräten waren berühmt für Verzögerungen, Abstürze und viele andere unglückliche Dinge. Im Laufe der Jahre wurden diese Probleme jedoch größtenteils durch den Einsatz leistungsfähiger Hardware gelöst.
Andererseits werden iOS-Anwendungen zu nativem Maschinencode kompiliert und benötigen daher keine Virtualisierung. Die verwendete Sprache und das Betriebssystem sind ebenfalls effizienter und ermöglichen es diesen Geräten, reibungslos zu funktionieren, ohne dass ein Overkill-Chipsatz erforderlich ist.
quelle
Zusammenfassend kann ich sagen, dass die Anwendungsfälle von PC und Telefon sehr unterschiedlich sind. PC wird meistens in einzelnen oder einigen Apps verwendet (natürlich erfordern Browser mit mehreren Registerkarten viele CPU-Kerne, können sogar an der Spitze von i-3 zurückbleiben), Telefone, die für Multitasking verwendet werden. Zumindest Netzwerkverbindung, Benutzeroberfläche, Systemauslöser, Benachrichtigungen. Wenn Sie den Task-Manager auf dem PC öffnen, gibt es auch viele Prozesse, die jedoch selbst auf alten Core 2-Duos weniger als wenige Prozent der CPU-Leistung verbrauchen. 4 Kerne sind ziemlich billig (MTK 65x2 kostete beim Start für OEM 1 $). Es ist auch RISK vs CISC, wenn die Leistung pro Kern zuletzt mangelhaft war. Energieeffizient! = Leistungsstark, wie wir hier sehen können . Multi-Core ist perfekt für Mobilgeräte geeignet, da es keine große Belastung mit einem einzelnen Profil und keine auf mehrere Aufgaben ausgerichtete Erfahrung gibt (wir können jedoch feststellen, dass iPhones aufgrund guter Software weniger Kerne und RAM benötigenwie in diesem Video oder anderen )
quelle
Ich denke, einer der Hauptfaktoren jenseits von 4 oder 8 (für große: kleine Konfigurationen) ist im Moment nur das Marketing.
Ein großes Problem der hohen Kernanzahl ist die Größe des Speichers. Normalerweise müssen Sie in Desktop-Apps, wenn Sie die Auslastung mehrerer Kerne verbessern möchten, Strukturen duplizieren und viel mehr Speicher verwenden als in einer einzigen Thread-Anwendung.
Dies geschieht nicht, weil RAM sehr teuer ist (insbesondere in der RAM-Krisensituation 2017/2018). Das Marketing will hohe Stückzahlen, aber das Controlling will die Komponentenpreise senken. Wenn Sie einen Kontostand von weniger als 1 Gigabyte RAM pro Kern feststellen, liegt ein gescheiterter Kompromiss vor.
quelle