x86アーキテクチャは、ARMがモバイルであることを期待しているときに、キーボードで動作するように特別に設計されていますか?2つの主な違いは何ですか?
5 に答える
ARM
はRISC(縮小命令セットコンピューティング)アーキテクチャでx86
あり、はCISC(複雑な命令セットコンピューティング)アーキテクチャです。
この点での主な違いは、ARM命令はレジスタでのみ動作し、メモリとの間でデータをロードおよび保存するための命令がいくつかあるのに対し、x86はメモリで直接動作できることです。v8まで、ARMはネイティブの32ビットアーキテクチャであり、他のアーキテクチャよりも4バイトの演算を優先していました。
つまり、ARMはよりシンプルなアーキテクチャであり、小さなシリコン領域と多くの省電力機能を実現し、x86は消費電力と生産の両方の点でパワービーストになります。
「 x86アーキテクチャは、ARMがモバイルであることを期待しているのに、キーボードで動作するように特別に設計されていますか? 」に関する質問について。x86
キーボードARM
でもモバイルでも動作するように特別に設計されたものではありません。ただし、コアアーキテクチャの選択により、実際にはx86にも直接動作する命令がありますがIO
、ARMにはありません。ただし、USBなどの特殊なIOバスでは、このような機能の必要性もなくなりつつあります。
引用するドキュメントが必要な場合は、Cortex-Aシリーズプログラマーガイド(4.0)でRISCアーキテクチャとCISCアーキテクチャの違いについて説明しています。
ARMプロセッサは、縮小命令セットコンピュータ(RISC)プロセッサです。
x86のような複雑な命令セットコンピュータ(CISC)プロセッサには、単一の命令で複雑なことを実行できる豊富な命令セットがあります。このようなプロセッサには、多くの場合、マシン命令を一連の内部操作(マイクロコード)にデコードする大量の内部ロジックがあります。
対照的に、RISCアーキテクチャでは、より汎用的な命令の数が少なく、大幅に少ないトランジスタで実行できるため、シリコンがより安価になり、電力効率が向上します。他のRISCアーキテクチャと同様に、ARMコアには多数の汎用レジスタがあり、多くの命令が1サイクルで実行されます。シンプルなアドレッシングモードがあり、すべてのロード/ストアアドレスをレジスタの内容と命令フィールドから決定できます。
ARM社は、これらの用語がビジネスにどのように適用されるかを説明する「アーキテクチャ、プロセッサ、およびデバイス開発の記事」というタイトルの論文も提供しています。
命令セットアーキテクチャを比較する例:
たとえば、アプリケーションで何らかのバイト単位のメモリ比較ブロックが必要な場合(コンパイラによって生成され、詳細をスキップします)、次のようになります。x86
repe cmpsb /* repeat while equal compare string bytewise */
最短形式でARM
は(エラーチェックなどなしで)次のようになります。
top:
ldrb r2, [r0, #1]! /* load a byte from address in r0 into r2, increment r0 after */
ldrb r3, [r1, #1]! /* load a byte from address in r1 into r3, increment r1 after */
subs r2, r3, r2 /* subtract r2 from r3 and put result into r2 */
beq top /* branch(/jump) if result is zero */
これにより、RISCとCISCの命令セットの複雑さがどのように異なるかについてのヒントが得られます。
ARMは、電力消費の点でかなりの利点があり、あらゆる種類のバッテリー駆動デバイスにとって魅力的であるという事実を除けば、キーボードやモバイルに固有のものはありません。
実際の違いに関しては、ARMにはより多くのレジスタがあり、Intelが追加するずっと前からほとんどの命令の予測をサポートしており、ほとんどすべての場所で電力を節約するために、あらゆる種類の手法(必要に応じて「トリック」と呼びます)を長い間取り入れてきました。
2つのエンコード命令の方法にもかなりの違いがあります。Intelは、命令が1〜15バイトのどこでも占有できるかなり複雑な可変長エンコーディングを使用しています。これにより、プログラムを非常に小さくすることができますが、命令のデコードが比較的困難になります(たとえば、命令を高速で並列にデコードすることは、完全な悪夢のようです)。
ARMには、ARMとTHUMBの2つの異なる命令エンコーディングモードがあります。ARMモードでは、すべての命令にアクセスでき、エンコーディングは非常にシンプルで高速にデコードできます。残念ながら、ARMモードコードはかなり大きくなる傾向があるため、プログラムがIntelコードの約2倍のメモリを占有することはかなり一般的です。サムモードはそれを軽減しようとします。それでもかなり通常の命令エンコーディングを使用しますが、レジスタ数を減らし、ほとんどの命令からの予測を排除し、分岐の範囲を減らすなどして、ほとんどの命令を32ビットから16ビットに減らします。少なくとも私の経験では、これはまだ通常はまったく得られませんx86コードが取得できるのと同じくらい高密度のコーディングですが、それはかなり近く、デコードはまだかなり単純で簡単です。コード密度が低いということは、同等のパフォーマンスを得るには、通常、少なくとももう少し多くのメモリと(一般的にはもっと深刻な)より大きなキャッシュが必要であることを意味します。
かつて、Intelは消費電力よりも速度を重視していました。彼らは主にラップトップのコンテキストで電力消費を強調し始めました。ラップトップの場合、通常の電力目標は、かなり小さいラップトップの場合、約6ワットでした。より最近(はるかに最近)、彼らはモバイルデバイス(電話、タブレットなど)をターゲットにし始めました。この市場では、彼らはせいぜい数ワットかそこらを見ています。彼らのアプローチはARMのアプローチとは大きく異なり、ARMが主にマイクロアーキテクチャを強調している製造技術を強調していますが(ARMが設計を販売し、製造を他の人に任せていることを考えると、当然のことです)、彼らはそれでかなりうまくいっているようです。
ただし、状況によっては、CPUのエネルギー消費が電力消費よりも重要になることがよくあります。少なくとも私がこの用語を使用しているとき、電力消費量は(多かれ少なかれ)瞬間的な電力使用量を指します。ただし、エネルギー消費量は速度で正規化されるため、たとえば、CPU Aが1秒間に1ワットを消費して同じジョブを実行し、CPU Bが1秒間に2ワットを消費して同じジョブを実行する場合、両方のCPUが同じ合計量を消費します。その仕事をするためのエネルギー(2ワット秒)-しかしCPU Bを使用すると、2倍の速さで結果を得ることができます。
ARMプロセッサは、消費電力の点で非常にうまく機能する傾向があります。したがって、プロセッサの「存在」をほぼ常に必要としているものの、実際にはあまり作業を行っていないものが必要な場合は、かなりうまくいく可能性があります。たとえば、ビデオ会議を行っている場合は、数ミリ秒のデータを収集し、圧縮して送信し、他のユーザーからデータを受信し、解凍して再生し、繰り返します。非常に高速なプロセッサでさえ、スリープに多くの時間を費やすことができないため、このようなタスクの場合、ARMは非常にうまく機能します。
Intelのプロセッサ(特に、実際には低電力アプリケーションを対象としたAtomプロセッサ)は、エネルギー消費の点で非常に競争力があります。フルスピードに近い速度で動作している間は、ほとんどのARMプロセッサよりも多くの電力を消費しますが、作業がすぐに終了するため、より早くスリープ状態に戻ることができます。その結果、優れたバッテリー寿命と優れたパフォーマンスを組み合わせることができます。
したがって、2つを比較するときは、測定するものに注意して、正直に気にかけていることを反映していることを確認する必要があります。ARMは電力消費で非常に優れていますが、状況によっては、瞬間的な電力消費よりもエネルギー消費の方が簡単に気になる場合があります。
ジェリー・コフィンの最初の段落に追加。つまり、ARM設計はより低い消費電力を提供します。
同社ARM
は、CPUテクノロジーのライセンスのみを取得しています。彼らは物理的なチップを作りません。これにより、他社は通常SOCまたはシステムオンチップと呼ばれるさまざまな周辺技術を追加できます。デバイスがタブレット、携帯電話、または車載エンターテインメントシステムのいずれであるか。これにより、チップベンダーはチップの残りの部分を特定のアプリケーションに合わせて調整できます。これには追加の利点があります、
- ボードコストの削減
- 低電力(注1)
- より簡単な製造
- 小さいフォームファクタ
ARM
AMBAでSOCベンダーをサポートし、SOC実装者が既成のサードパーティモジュールを購入できるようにします。イーサネット、メモリ、割り込みコントローラのように。MIPSのように、他のいくつかのCPUプラットフォームはこれをサポートしていますが、MIPSは電力を意識していません。
これらはすべて、ハンドヘルド/バッテリー駆動の設計に役立ちます。いくつかはすべての周りにちょうど良いです。同様に、ARM
電池式のデバイスの歴史があります。Apple Newton、PsionOrganizers。PDAソフトウェアのインフラストラクチャは、スマートフォンタイプのデバイスを作成するために一部の企業によって活用されました。しかし、スマートフォンで使用するためにGUIを再発明した人々によって、より多くの成功が得られました。
Open source
ツールセットの台頭はまた、さまざまなチップoperating systems
を容易にしました。SOC
閉鎖的な組織では、ARMで利用可能なさまざまなデバイスすべてをサポートしようとすると問題が発生します。最も人気のある2つのセルラープラットフォームであるAndriodとOSx/IOSは、LinuxとFreeBSD、MachとNetBSDosに基づいています。 ベンダーがチップセットのソフトウェアサポートを提供するのにOpen Source
役立ちます。SOC
うまくいけば、キーボードにx86が使用されている理由は自明です。それはソフトウェアを持っており、さらに重要なことに、人々はそのソフトウェアを使用するように訓練されています。 Netwinderは、もともとキーボード用に設計されたシステムの1つです。また、メーカーは現在、サーバー市場向けにARM64を検討しています。電力/熱は24時間年中無休のデータセンターで懸念されています。ARM
したがって、これらのチップを中心に成長するエコシステムは、低消費電力などの機能と同じくらい重要であると言えます。 ARM
しばらくの間(1980年代半ばから後半)、低電力で高性能のコンピューティングを目指して努力してきましたが、多くの人が参加しています。
注1:複数のチップは、既知の電圧で相互通信して駆動するためにバスドライバを必要とします。また、通常、個別のチップには、 SOCシステムで共有できるサポートコンデンサやその他の電源コンポーネントが必要です。
ARMはイタリアのスポーツカーのようなものです。
- バランスの取れた、よく調整されたエンジン。優れた加速と最高速度を提供します。
- 優れたチェイス、ブレーキ、サスペンション。すばやく停止でき、速度を落とさずにコーナリングできます。
x86はアメリカのマッスルカーのようなものです。
- 大きなエンジン、大きな燃料ポンプ。最高速度と加速に優れていますが、燃料を大量に消費します。
- 恐ろしいブレーキ、あなたが減速したいのであれば、あなたはあなたの日記に約束を入れる必要があります。
- ひどいステアリング、あなたはコーナーまで減速しなければなりません。
要約すると、x86は1974年の設計に基づいており、直線的に優れています(ただし、大量の燃料を使用します)。アームはほとんど燃料を使用せず、コーナー(ブランチ)の速度が低下しません。
比喩を超えて、ここにいくつかの本当の違いがあります。
- Armにはより多くのレジスタがあります。
- Armには特別な目的のレジスタがほとんどなく、x86はすべて特別な目的のレジスタです(したがって、移動するものが少なくなります)。
- Armにはメモリアクセスコマンドがほとんどなく、レジスタのロード/ストアのみがあります。
- Armは、私の設計では内部的にハーバードアーキテクチャです。
- アームはシンプルで高速です。
- アーム命令は、アーキテクチャ上単一のサイクルです(複数のロード/ストアを除く)。
- アーム命令は、多くの場合、(単一のサイクルで)複数のことを実行します。
- x86のループストアや自動インクリメントなど、複数のArm命令が必要な場合でも、Armはより少ないクロックサイクルでそれを実行します。
- Armにはより多くの条件付き命令があります。
- Armの分岐予測子は自明に単純であり(無条件または後方の場合は分岐を想定し、そうでない場合は非分岐を想定します)、x86の非常に非常に複雑な予測子よりも優れたパフォーマンスを発揮します(説明するのに十分なスペースがありません。 )。
- Armには、シンプルで一貫性のある命令セットがあります(手動でコンパイルして、命令セットをすばやく学習できます)。
ARMアーキテクチャは、もともとAcornパーソナルコンピュータ( 1987年頃のAcorn Archimedes、およびRiscPCを参照)用に設計されました。これは、x86ベースのIBMPCモデルと同じくらい多くのキーボードベースのパーソナルコンピュータでした。その後のARM実装のみが、主にモバイルおよび組み込み市場セグメントを対象としていました。
もともと、ほぼ同等のパフォーマンスの単純なRISC CPUは、Intelでx86開発に取り組んでいるチームよりもはるかに小規模なエンジニアリングチーム( Berkeley RISCを参照)によって設計できました。
しかし、現在、最速のARMチップには、大規模なエンジニアリングチームによって設計された非常に複雑な複数発行の順不同の命令ディスパッチユニットがあり、x86コアには、命令変換ユニットによって供給されるRISCコアのようなものがあります。
したがって、2つのアーキテクチャ間の現在の違いは、開発チームが対象としている製品ニッチの特定の市場ニーズに関連しています。(ランダムな意見:ARMは、電力とコストの制約がはるかに大きい組み込みアプリケーションからのライセンス料を増やす可能性があります。また、Intelは、利益率のためにPCとサーバーのパフォーマンスを維持する必要があります。したがって、実装の最適化は異なります。)