Apple CPUのトリックたち - メモリリオーダリング、JS対応、参照カウント
(threadreaderapp.com)-
黒魔術のように見えるAppleのIntelコード実行速度は、基本的にはArmとIntelアーキテクチャの結合によるもの
-
2つのCPUは基本的に「メモリオーダリング」が異なるため、エミュレーション速度が遅くなるが、Appleの解決策の1つはIntel方式も入れてしまったこと。x86コードを実行するときはIntelのメモリオーダリングに従うようにした
-
JavaScriptに最適化された命令を追加し、L1キャッシュを2倍にすることで、Webブラウジング時により高速でバッテリーも長持ちするようにした
-
Intel MacBook Airのデュアルコアは、速いときは3.8Ghzで、低速モードでは1.2Ghzで動作して電力を節約していたが、Intelはダウンクロックでの実行を前提に設計されたものではない。
Appleは性能用と効率用のプロセッサをそれぞれ4個ずつ搭載して最適化。低電力モードでは性能プロセッサ4個を切り、効率プロセッサだけで動作する。
コンパイルのような作業をするときは、4つのプロセッサをすべて活用して本当に高速。
-
Intelはムーアの法則で3年遅れている。Apple SiliconはTSMCの最新5nmプロセスを使っているが、Intelは10nm/7nmプロセスを使っており、しかも多くのIntel製品はさらに古い14/10nmプロセスを使っている。
-
Swift言語はAndroidの「ガベージコレクション」の代わりに「参照カウント」を使用する。Appleは参照カウント速度を2倍にするため、CPUに何らかの工夫を施している。
5件のコメント
なぜARMチップにはJavaScriptの名前が付いた命令があるのでしょうか? https://ja.news.hada.io/topic?id=3057
リファレンスカウントがガベージコレクションの基本なのに……何の話なのか……急に信頼性が一気に……
関連して、こんな話があるようです。
https://twitter.com/catfish_man/status/1326238434235568128?s=21
単純な NSObject の Retain/Release 自体の速度が 5 倍速いとのこと。
リファレンスカウントを行う命令自体も、メモリオーダリング構造の違いのため、より高速に動作するようです。
Java では通常、Reference Counting ではなく、Mark-and-Sweep のような別スタイルのガベージコレクションを使うからです。
あれ?と思ったけど… じゃあガベージコレクションもそれだけ速いって考えればいいんでしょうね.. 笑