Die Tricks in Apples CPU – Memory Reordering, JS-Unterstützung, Reference Counting
(threadreaderapp.com)-
Die wie schwarze Magie wirkende Ausführungsgeschwindigkeit von Intel-Code auf Apple basiert im Kern auf der Kombination von Arm- und Intel-Architektur.
-
Die beiden CPUs unterscheiden sich grundsätzlich beim "Memory Ordering", was die Emulationsgeschwindigkeit verlangsamt. Eine Lösung von Apple war, auch Intels Ansatz einzubauen. Beim Ausführen von x86-Code wird also Intels Memory Ordering befolgt.
-
Durch das Hinzufügen von für JavaScript optimierten Instruktionen und die Verdopplung des L1-Cache wurde Web-Browsing schneller und die Akkulaufzeit länger.
-
Der Dual-Core im Intel MacBook Air lief im schnellen Modus mit 3,8 GHz und im langsamen Modus mit 1,2 GHz, um Strom zu sparen. Intel hat seine Chips jedoch nicht dafür ausgelegt, im heruntergetakteten Zustand zu laufen.
Apple optimierte das, indem jeweils 4 Performance- und 4 Efficiency-Kerne verbaut wurden. Im Stromsparmodus werden die 4 Performance-Kerne abgeschaltet, und das System läuft nur mit den Efficiency-Kernen.
Bei Aufgaben wie dem Kompilieren werden alle 4 Kerne genutzt, wodurch es wirklich schnell ist.
-
Intel liegt bei Moore’s Law drei Jahre zurück. Apple Silicon nutzt den neuesten 5-nm-Prozess von TSMC, während Intel 10-nm-/7-nm-Prozesse verwendet, und viele Intel-Produkte nutzen sogar noch ältere 14-nm-/10-nm-Prozesse.
-
Die Sprache Swift verwendet statt der "Garbage Collection" von Android "Reference Counting". Apple hat auf CPU-Ebene etwas eingebaut, um die Geschwindigkeit des Reference Counting zu verdoppeln.
5 Kommentare
Warum gibt es auf ARM-Chips Befehle, die nach JavaScript benannt sind? https://de.news.hada.io/topic?id=3057
Referenzzählung ist doch die Grundlage der Garbage Collection … Was soll das heißen … Plötzlich sinkt mein Vertrauen schlagartig …
Dazu gibt es wohl diese Aussage.
https://twitter.com/catfish_man/status/1326238434235568128?s=21
Allein die Geschwindigkeit für Retain/Release eines einfachen
NSObjectsoll 5-mal höher sein.Auch die Instruktionen für die Referenzzählung selbst scheinen wegen der Unterschiede in der Memory-Ordering-Architektur schneller zu arbeiten.
In Java verwendet man in der Regel kein Reference Counting, sondern andere Arten der Garbage Collection wie etwa Mark-and-Sweep.
Oh? Dann kann man wohl annehmen, dass die Garbage Collection entsprechend auch so schnell ist, oder? haha