14 ポイント 投稿者 xguru 2020-11-29 | 5件のコメント | WhatsAppで共有
  1. 黒魔術のように見えるAppleのIntelコード実行速度は、基本的にはArmとIntelアーキテクチャの結合によるもの

  2. 2つのCPUは基本的に「メモリオーダリング」が異なるため、エミュレーション速度が遅くなるが、Appleの解決策の1つはIntel方式も入れてしまったこと。x86コードを実行するときはIntelのメモリオーダリングに従うようにした

  3. JavaScriptに最適化された命令を追加し、L1キャッシュを2倍にすることで、Webブラウジング時により高速でバッテリーも長持ちするようにした

  4. Intel MacBook Airのデュアルコアは、速いときは3.8Ghzで、低速モードでは1.2Ghzで動作して電力を節約していたが、Intelはダウンクロックでの実行を前提に設計されたものではない。

Appleは性能用と効率用のプロセッサをそれぞれ4個ずつ搭載して最適化。低電力モードでは性能プロセッサ4個を切り、効率プロセッサだけで動作する。

コンパイルのような作業をするときは、4つのプロセッサをすべて活用して本当に高速。

  1. Intelはムーアの法則で3年遅れている。Apple SiliconはTSMCの最新5nmプロセスを使っているが、Intelは10nm/7nmプロセスを使っており、しかも多くのIntel製品はさらに古い14/10nmプロセスを使っている。

  2. Swift言語はAndroidの「ガベージコレクション」の代わりに「参照カウント」を使用する。Appleは参照カウント速度を2倍にするため、CPUに何らかの工夫を施している。

5件のコメント

 
xguru 2020-12-02

なぜARMチップにはJavaScriptの名前が付いた命令があるのでしょうか? https://ja.news.hada.io/topic?id=3057

 
iolothebard 2020-11-30

リファレンスカウントがガベージコレクションの基本なのに……何の話なのか……急に信頼性が一気に……

 
xguru 2020-12-02

関連して、こんな話があるようです。

https://twitter.com/catfish_man/status/1326238434235568128?s=21

単純な NSObject の Retain/Release 自体の速度が 5 倍速いとのこと。

リファレンスカウントを行う命令自体も、メモリオーダリング構造の違いのため、より高速に動作するようです。

 
kunggom 2020-11-30

Java では通常、Reference Counting ではなく、Mark-and-Sweep のような別スタイルのガベージコレクションを使うからです。

 
xguru 2020-11-30

あれ?と思ったけど… じゃあガベージコレクションもそれだけ速いって考えればいいんでしょうね.. 笑