Les astuces des CPU d’Apple : réordonnancement mémoire, prise en charge de JS, comptage de références
(threadreaderapp.com)-
La vitesse d’exécution du code Intel par Apple, qui semble relever de la magie noire, repose fondamentalement sur une combinaison des architectures Arm et Intel.
-
Les deux CPU diffèrent à la base sur le "memory ordering", ce qui ralentit l’émulation ; l’une des solutions d’Apple a été d’intégrer aussi la méthode d’Intel. Lors de l’exécution de code x86, le processeur est ainsi amené à suivre l’ordonnancement mémoire d’Intel.
-
En ajoutant des instructions optimisées pour JavaScript et en doublant le cache L1, Apple a rendu la navigation web plus rapide tout en améliorant l’autonomie.
-
Le double cœur du MacBook Air Intel montait à 3,8 GHz dans les phases rapides, et fonctionnait à 1,2 GHz en mode lent pour économiser l’énergie, mais Intel n’a pas conçu ses puces pour fonctionner en downclocking.
Apple a optimisé son architecture en intégrant 4 cœurs de performance et 4 cœurs d’efficacité. En mode basse consommation, les 4 cœurs de performance sont coupés et la machine fonctionne uniquement avec les cœurs d’efficacité.
Pour des tâches comme la compilation, elle peut exploiter pleinement les 4 cœurs, ce qui la rend vraiment rapide.
-
Intel accuse trois ans de retard sur la loi de Moore. Apple Silicon utilise le tout dernier procédé 5 nm de TSMC, tandis qu’Intel emploie des procédés 10 nm / 7 nm, et nombre de ses produits utilisent encore des procédés plus anciens en 14 nm / 10 nm.
-
Le langage Swift utilise le "reference counting" plutôt que le "garbage collection" d’Android. Apple a apporté quelque chose au CPU pour doubler la vitesse du comptage de références.
5 commentaires
Pourquoi y a-t-il des instructions portant le nom de JavaScript dans les puces ARM ? https://fr.news.hada.io/topic?id=3057
Le comptage de références est à la base du ramasse-miettes... mais de quoi il parle... d’un coup, la crédibilité chute franchement...
Il y a aussi cette discussion à ce sujet.
https://twitter.com/catfish_man/status/1326238434235568128?s=21
La vitesse même d’un simple
Retain/ReleasesurNSObjectserait 5 fois plus rapide.Il semble aussi que l’instruction de comptage de références fonctionne plus vite, en raison des différences dans la structure d’ordonnancement mémoire.
En Java, on utilise généralement non pas le Reference Counting, mais d’autres styles de ramasse-miettes, comme le mark-and-sweep.
Ah ? Du coup… on peut se dire que le ramasse-miettes sera aussi rapide dans les mêmes proportions, non… haha