マイク・アッシュ 彼のブログに捧げた iPhone 64S で 5 ビット アーキテクチャに切り替えることの実際的な影響。この記事は彼の発見に基づいています。
この文章の主な理由は、5 ビット ARM プロセッサを搭載した新しい iPhone 64s がユーザーと市場にとって実際に何を意味するかについて、大量の誤った情報が広まっているためです。ここでは、パフォーマンス、機能、およびこの移行が開発者に与える影響についての客観的な情報を提供しようとします。
「64ビット」
「X ビット」ラベルが参照できるプロセッサの部分は 7 つあります。それは、整数レジスタの幅とポインタの幅です。幸いなことに、最新のプロセッサではこれらの幅は同じであるため、A64 の場合、これは 64 ビット整数レジスタと XNUMX ビット ポインタを意味します。
ただし、「64 ビット」が何を意味しないのかを指摘することも同様に重要です。 RAMの物理アドレスサイズ。 RAM と通信するビット数 (つまり、デバイスがサポートできる RAM の量) は、CPU ビット数とは関係ありません。 ARM プロセッサには 26 ~ 40 ビットのアドレスがあり、システムの他の部分とは独立して変更できます。
- データバスサイズ。 RAM またはバッファ メモリから受信したデータの量も同様に、この要因には依存しません。個々のプロセッサ命令は異なる量のデータを要求する場合がありますが、それらはチャンクで送信されるか、必要以上にメモリから受信されます。それはデータ量子のサイズによって異なります。 iPhone 5 はすでに 64 ビット量子でメモリからデータを受信しており (32 ビット プロセッサを搭載しています)、最大 192 ビットのサイズに遭遇する可能性があります。
- 浮動小数点に関するものなら何でも。このようなレジスタ (FPU) のサイズも、プロセッサの内部動作には依存しません。 ARM は、ARM64 (64 ビット ARM プロセッサ) が登場する前から 64 ビット FPU を使用してきました。
一般的なメリットとデメリット
それ以外は同一の 32 ビット アーキテクチャと 64 ビット アーキテクチャを比較すると、通常はそれほど違いはありません。これは、Apple がモバイル デバイスでも 64 ビットに移行する理由を探している一般の人々が混乱している理由の 7 つです。ただし、それはすべて、プロセッサーが 64 ビット アーキテクチャであるという事実だけではなく、A64 (ARMXNUMX) プロセッサーの特定のパラメーターと Apple の使用方法によって決まります。
ただし、これら 64 つのアーキテクチャの違いに注目すると、いくつかの違いが見つかるでしょう。明らかなことは、64 ビット整数レジスタは 32 ビット整数をより効率的に処理できることです。以前でも、32 ビット プロセッサ上でそれらを操作することは可能でしたが、これは通常、それらを 64 ビット長の部分に分割することを意味し、計算が遅くなります。したがって、64 ビット プロセッサは通常、32 ビット型でも 64 ビット型と同じくらい高速に計算できます。これは、一般に 64 ビット型を使用するアプリケーションが XNUMX ビット プロセッサ上でより高速に実行できることを意味します。
64 ビットはプロセッサが使用できる RAM の総量には影響しませんが、32 つのプログラムで大きな RAM チャンクを操作しやすくなります。 4 ビット プロセッサ上で実行される単一のプログラムには、約 1 GB のアドレス空間しかありません。オペレーティング システムと標準ライブラリが何かを使用することを考慮すると、プログラムにはアプリケーション用に 3 ~ 32 GB の空き領域が残ります。ただし、4 ビット システムに 4 GB を超える RAM が搭載されている場合、そのメモリの使用は少し複雑になります。オペレーティング システムにこれらのより大きなメモリ チャンクをプログラムにマップさせる (メモリ仮想化) か、プログラムを複数のプロセスに分割する (理論的には、各プロセスには直接アドレス指定に使用できる XNUMXGB のメモリがある) という手段に頼る必要があります。
ただし、これらの「ハッキング」は非常に難しく、時間がかかるため、最小限のアプリケーションで使用されています。実際には、32 ビット プロセッサでは、各プログラムは 1 ~ 3 GB のメモリのみを使用し、より多くの利用可能な RAM を使用して複数のプログラムを同時に実行したり、このメモリをバッファ (キャッシュ) として使用したりできます。これらの使用法は実用的ですが、どのプログラムでも 4GB を超えるメモリ チャンクを簡単に使用できるようにしたいと考えています。
ここで、4GB を超えるメモリがなければ 64 ビット アーキテクチャは役に立たないという、よくある (実際には間違った) 主張にたどり着きます。アドレス空間が大きいと、メモリが少ないシステムでも役立ちます。メモリ マップト ファイルは、ファイル全体をメモリにロードすることなく、ファイルの内容の一部をプロセスのメモリに論理的にリンクする便利なツールです。したがって、システムは、たとえば、RAM 容量の何倍も大きい大きなファイルを徐々に処理できます。 32 ビット システムでは、このような大きなファイルを確実にメモリ マップすることはできませんが、64 ビット システムでは、アドレス空間がはるかに大きいため、これは簡単です。
ただし、ポインタのサイズが大きくなると、64 つの大きな欠点も生じます。そうでないと、同じプログラムが 64 ビット プロセッサでより多くのメモリを必要とすることになります (これらの大きなポインタはどこかに保存する必要があります)。ポインタはプログラムの一部として頻繁に使用されるため、この違いによりキャッシュに負担がかかり、システム全体の動作が遅くなる可能性があります。したがって、全体的に見て、プロセッサ アーキテクチャを XNUMX ビットに変更しただけでは、実際にはシステム全体の速度が低下することがわかります。したがって、この要素は他の場所でさらに最適化することによってバランスを取る必要があります。
ARM64
新しい iPhone 7s に搭載されている 64 ビット プロセッサである A5 は、より広いレジスタを備えた単なる通常の ARM プロセッサではありません。 ARM64 には、古い 32 ビット バージョンに比べて大幅な改良が加えられています。
レジストリ
ARM64 は 32 ビット ARM の 64 倍の整数レジスタを保持します (レジスタの数と幅を混同しないように注意してください。幅については「64 ビット」セクションで説明しました。したがって、ARM32 には 16 倍の幅と 13 倍のレジスタ数の両方があります)レジスタ)。 64 ビット ARM には 32 個の整数レジスタがあります: 28 つのプログラム カウンター (PC - 現在の命令の番号が含まれます)、スタック ポインター (進行中の関数へのポインター)、リンク レジスタ (終了後の戻りへのポインター)の関数)、残りの 32 はアプリケーション用です。ただし、ARM64 には、16 つのゼロ レジスタ、リンク レジスタ、フレーム ポインタ (スタック ポインタに類似)、および将来のために予約されている 32 つを含む 128 の整数レジスタがあります。これにより、アプリケーション用に XNUMX 個のレジスタが残り、これは XNUMX ビット ARM の XNUMX 倍以上になります。同時に、ARMXNUMX は浮動小数点数 (FPU) レジスタの数を XNUMX 個から XNUMX 個の XNUMX ビット レジスタに倍増しました。
しかし、なぜレジスタの数がそれほど重要なのでしょうか?メモリは一般に CPU の計算よりも遅く、読み取り/書き込みに非常に時間がかかることがあります。これにより、高速プロセッサがメモリを待機し続ける必要が生じ、システムの自然な速度制限に達してしまいます。プロセッサーはこのハンディキャップをバッファーの層で隠そうとしますが、最速のバッファー (L1) であってもプロセッサーの計算よりも遅いことに変わりはありません。ただし、レジスタはプロセッサ内に直接あるメモリ セルであり、その読み取り/書き込みはプロセッサの速度を低下させるほど十分に高速です。レジスタの数は実際には、プロセッサの計算に使用される最速のメモリの量を意味し、システム全体の速度に大きく影響します。
同時に、この速度には、言語がこれらのレジスタを使用でき、一般的なアプリケーション (遅い) メモリにすべてを保存する必要がないように、コンパイラによる優れた最適化サポートが必要です。
指図書
ARM64 では、命令セットにも大きな変更が加えられています。命令セットは、プロセッサが実行できるアトミック操作のセットです (たとえば、「ADD register1 register2」は XNUMX つのレジスタの数値を加算します)。それぞれの言語で利用できる機能はこれらの命令で構成されています。より複雑な関数はより多くの命令を実行する必要があるため、速度が遅くなる可能性があります。
ARM64 の新機能は、AES 暗号化、SHA-1 および SHA-256 ハッシュ関数の命令です。したがって、複雑な実装の代わりに、言語のみがこの命令を呼び出します。これにより、そのような関数の計算が大幅に高速化され、アプリケーションのセキュリティが強化されることが期待されます。例えば。新しい Touch ID は暗号化にもこれらの命令を使用し、実際の速度とセキュリティを実現します (理論的には、攻撃者はデータにアクセスするためにプロセッサ自体を変更する必要がありますが、その小型サイズを考えると、控えめに言っても非現実的です)。
32bitとの互換性
A7 はエミュレーションを必要とせずに 32 ビット モードで完全に実行できることに言及することが重要です。これは、新しい iPhone 5s が 32 ビット ARM でコンパイルされたアプリケーションを速度を低下させることなく実行できることを意味します。ただし、その場合は新しい ARM64 機能を使用できなくなるため、A7 専用の特別なビルドを作成することは常に価値があり、より高速に実行できるはずです。
ランタイムの変更点
ランタイムは、プログラミング言語に機能を追加するコードであり、アプリケーションの実行中、翻訳後まで使用できます。 Apple はアプリケーションの互換性 (64 ビットのバイナリが 32 ビットで実行される) を維持する必要がないため、Objective-C 言語にさらにいくつかの改良を加える余裕がありました。
そのうちの 1 つは、いわゆる タグ付きポインタ (マークされたインジケーター)。通常、オブジェクトとそれらのオブジェクトへのポインタは、メモリの別個の部分に格納されます。ただし、新しいポインター型を使用すると、データの少ないクラスがオブジェクトをポインターに直接格納できるようになります。この手順により、オブジェクトに直接メモリを割り当てる必要がなくなり、ポインターとその中にオブジェクトを作成するだけで済みます。タグ付きポインタは 64 ビット アーキテクチャでのみサポートされています。これは、32 ビット ポインタには十分な有用なデータを格納するための十分な領域がなくなっているためです。したがって、OS X とは異なり、iOS はまだこの機能をサポートしていませんでした。しかし、ARM64 の登場により状況は変わりつつあり、この点でも iOS は OS X に追いつきました。
ポインタの長さは 64 ビットですが、ARM64 ではポインタ自体のアドレスに 33 ビットのみが使用されます。そして、残りのポインター ビットを確実にマスク解除できれば、前述のタグ付きポインターの場合と同様に、このスペースを使用して追加データを保存できます。概念的には、これは Objective-C の歴史の中で最大の変更の XNUMX つですが、市場性のある機能ではありません。したがって、ほとんどのユーザーは、Apple が Objective-C をどのように前進させようとしているのか知りません。
このようなタグ付きポインターの残りのスペースに保存できる有用なデータに関しては、たとえば Objective-C は現在、いわゆるデータを保存するためにそれを使用しています。 参照カウント (参照の数)。以前は、参照カウントはメモリ内の別の場所、つまりそのために用意されたハッシュ テーブルに保存されていましたが、これにより、多数の alloc/dealloc/retain/release 呼び出しが発生した場合にシステム全体の速度が低下する可能性がありました。スレッド セーフのためにテーブルをロックする必要があったため、2 つのスレッド内の 2 つのオブジェクトの参照カウントを同時に変更できませんでした。ただし、この値は、いわゆる残りの部分に新たに挿入されます。 ISA インジケーター。これも目立たないものの、将来的には大きな利点と加速になります。ただし、これは 32 ビット アーキテクチャでは決して実現できません。
オブジェクトへのポインタの残りの部分には、関連するオブジェクトに関する情報、そのオブジェクトが弱参照であるかどうか、そのオブジェクトのデストラクタを生成する必要があるかどうかなどの情報も新たに挿入されます。 runtime はランタイムを根本的に高速化することができ、それが各アプリケーションの速度に反映されます。テストによると、これはすべてのメモリ管理呼び出しの約 40 ~ 50% の高速化を意味します。 64 ビット ポインターに切り替えて、この新しいスペースを使用するだけです。
結論
競合他社は 64 ビット アーキテクチャへの移行は不要であるという考えを広めようとしますが、これが単なる非常に無知な意見であることはすでにご存知でしょう。確かに、言語やアプリケーションを 64 ビットに適応させずに 7 ビットに切り替えるだけでは、実際には何の意味もありません。システム全体の速度が低下することさえあります。しかし、新しい A64 は新しい命令セットを備えた最新の ARMXNUMX を使用しており、Apple は Objective-C 言語全体を最新化し、新しい機能を活用することに苦労しました。したがって、高速化が約束されています。
ここでは、64 ビット アーキテクチャが正しい前進である理由を多数述べてきました。これは「内部」でのもう一つの革命であり、そのおかげで Apple は、デザイン、ユーザー インターフェイス、充実したエコシステムだけでなく、主に市場の最新テクノロジーでも最前線に留まろうと努めることになります。
多くの知識のない Android/Samsung の人は、この記事を読んで隅に隠れるべきです。
まあ、私たちは彼らに同情しなければなりません。彼らは何年もの間、Android は技術的に最先端の機能を備えた OS を持っていると言って、Android の悲劇的な UX と UI を言い訳していましたが、今ではまた何年も遅れていることが分かりました :)
人が羊ではなく、広告に耳を傾ける場合(そして彼はそれが得意です)、個人的な経験の後、彼は自分の意見を形成することができます:-)。
私はほぼすべてのコンテストを試して、自分の意見を形成します。
私の場合、あまりお金をかけないので、新しい超高性能の携帯電話が必要です。あれは価格を抑えてパフォーマンスを下げる必要があります ;-)。おそらく、より大きなバッテリーを搭載した、より遅いものの方が良いと思います。
一方、新しいプロカクはゲームがたくさんある iPad には便利でしょう:-)。
私は Android/HTC です :) IT は私にとってとても楽しいもので、高品質の HW を root 化して高速戦闘機に変換するのが私の趣味だからです。 iOS ではそれができません。 (必要さえありません。多かれ少なかれ、iOS はすべてが正常に動作するように設計されており、何もする必要はありません。プレイを楽しむのをやめたら、リンゴを買って楽しむつもりです)。しかし、なぜ子供のようにお互いを攻撃し続けるのかわかりません。 Apple は完全に Android と同じです。それは民主主義と独裁制などを比較するようなものです... iPhone 5S が発表されたときにカンファレンスを視聴しましたが、Apple の製品を所有していないにもかかわらず、64 ビットやその他の改善点が気に入りました。しかし、それは私が PC の前に座って Android や Apple を追いかけるような複雑な人間だからではなく、私を長く待たせることのない進歩が見えているからです。礼儀正しく言えば、くだらないことに対処する時間がないように、人々は真剣に働き始めるべきです。
反対側からの建設的な貢献:) kiez それは残りの 99% のアンドロイド陽性者の目を開くでしょう
おそらく、99% の Apple 愛好家についてまず話し合うべきでしょう、そうすれば建設的な会話ができるでしょう
非常に複雑なことを簡単に説明しました...ありがとう
素晴らしい記事です!はい、Android/WP ユーザーはこの記事を必ず読むべきであることに同意します。 「モバイルでは 64b がどのように役に立たないのか」について荒らしたり賢明に話したりする代わりに…
あなたはおそらく WP を手に持ったことがないでしょう、そうでなければこれを持っていないでしょう
モバイル市場で最初の成功を収めて以来、サムスンは競争相手を中傷することしかしていないが、本質的にはずっとその足跡をたどってきた。 Apple は常にテクノロジー企業の模範であり、顧客を嘲笑したり常に誤った情報を提供したりすることだけに焦点を当てていると、すぐにつまずいてしまうでしょう。 Apple は常に独自の道を歩み、それは常に非常に良いタイミングの問題でしたが、業界の多くの競合企業にはそれがありませんでした。
サムスンはその波に乗り、その可能性を生かしていると言えるだろう。彼は Android に賭けており、優れた HW を持っており、多くのものを自分で作成しており、適切なサポートを受けています。そして、他の略奪的なアジア企業と同様に、広告のあらゆる可能性を利用しています。そしてもちろん、彼は盗んでコピーします。 「つり目」が得意なのはコピーです。彼らは、自分の道を一歩ずつ進むよりもずっと安く済むことをうまく計算しています。そして、強力な企業として、これを行う余裕があります。まだ…
なぜ携帯電話の速度が常に向上しているのか理解できません。何に使用するのか例をいくつか教えてください。携帯電話のパフォーマンスを向上させることは私にとって徐々に意味がありませんが、マーケティングという言葉は削除します。
ゲーム、最適化が不十分なゲーム。また、iPad 3 上の Transport Tycoon は、デスクトップ上と同じ解像度でスムーズに動作しません。例。
なぜ携帯電話の速度が上がり続けるのか理解できません。何に使用するのか例をいくつか挙げてください。そこからマーケティングという言葉を削除すると、携帯電話のパフォーマンスを向上させることは徐々に意味がなくなります。 。
ビデオ、オーディオ、画像処理用。そしてゲームへ。
iPhone を通話とテキストメッセージ、たまにメールの閲覧や送信、ネットサーフィンのみに使用する人であれば、iPhone 4 が必要になるでしょう。そのようなユーザーはたくさんいると思います。誰もが世界最高の携帯電話を必要としているわけではありません:-)
羊
ハードウェアとソフトウェアの間の物理的なトレードオフはあなたにとって何の意味もありませんか?これは、当時の物理学者が、物理学のすべてはすでに発見されており、それを続ける必要はないと言っていた 19 世紀末のことを少し思い出させます (相対性理論の XNUMX 年前、量子論の XNUMX 年前)。 。
最高のものの追求に終わりはありません。ソフトウェアが主導する場合もあれば、ハードウェアが主導する場合もあります。しかし、一方が行き詰まってしまうと、もう一方は離れられません。私たちは子孫に対してそれほど利己的になるつもりはありません:) あなたのコメントに対して - より高速な携帯電話により、より強力なアプリケーションが可能になり、ドライブ以上のことができるようになります。そしてかつては、今日のコンピューターでも十分ではなかった機能もあります。未来はエキサイティングです。
その通り :)
素晴らしい記事ですが、なぜ Apple が A7 に 2GB の RAM を搭載しなかったのか理解できません。はい、iOS マルチタスクでは必ずしも 2GB が必要というわけではありませんが、メモリ ポインタの長さが XNUMX 倍であることを考慮すると、XNUMXGB の方がはるかに適切です。
しかし、それ以外の点では、網膜ディスプレイやボールの代わりの光学式マウスが不必要であるのと同じように、携帯電話に 64 ビット プロセッサが「不必要」であるという点には同意します。これらの発明はすべて「不必要」とレッテルを貼られていますが、私の意見では、正しい言葉は「時代を超えた」です。なぜなら、一度は必ず来るものであり、Apple は何か新しいものを考え出すことを恐れていません。
同感です。残念ながら、「役に立たない」という表現さえ正確ではありません。不要とは、優先順位が分からないものを指します。それは決して真実ではありません。スピードはそれほどのスピードは必要ないかもしれませんが、間違いなく認識します。そして、ソフトウェアがハードウェアに追いつくと、再び改善の余地が生まれます。
確かに、私は賛成です。つまり、iP5 は実際にはかなり高速なスマートフォンなので、5S は 64 ビットである必要はまったくありません。しかしある日、誰かが再びこの問題に対処しなければならなくなり、それが Apple となり、今になったのです。私が覚えている限り、専門家はコンピューターでも 64 ビット プロセッサーが役に立たないことについて話してきました。
IT の素人で、マトリックスに落ちそうになった私にとって、結論は重要です。この記事全体 (コメントによって裏付けられています) は私にとって非常に洞察力に富んでいるように思えます。説明することはできませんが、7 ビット アーキテクチャの A64 は一歩前進です。情報のおかげで。
マーケティング活動なので、記事のタイトルを編集します。すべてのイノベーションは本質的にマーケティング活動です。 :-)
思いません。たとえば、サムスンはマーケティング活動を行っています。これらは RAM とともに表示されますが、iPhone にはまったく必要ありません。彼らはまったく使えない機能を使って逃げています。テスト用にプロセッサのパフォーマンスを意図的に向上させています。等。確かに誤解を招きますが、それはマーケティングですので、簡単に逃げるべきではありません ;)