x86とARMの違い:命令セット・性能・消費電力・ソフトウェア互換性

x86とARMは、異なる命令セットを持つプロセッサアーキテクチャのファミリーです。 この違いはソフトウェアの互換性に直接影響しますが、性能や消費電力は実際のCPU設計と実行する処理によって決まります。アーキテクチャが指定する内容を理解することは、x64とARM64のダウンロードを選ぶ際にも役立ちます。

CPUアーキテクチャとは?x86とARMを理解する基本

CPU(Central Processing Unit、中央処理装置)は、プログラムの命令を実行するコンポーネントです。ファイルを開く、数値を加える、表示内容を計算するといった行為はすべて、定義された規則に従って解釈される命令を含んでいます。CPUアーキテクチャはこの設計フレームワークを説明しますが、ソフトウェアから見える規則とそれを実装するハードウェアを区別することが有用です。

命令セットアーキテクチャとマイクロアーキテクチャ

命令セットアーキテクチャ(ISA)は、ソフトウェアとプロセッサの間の契約です。サポートされる計算やデータの移動、命令がビットとしてどのようにエンコードされるか、およびレジスタの使用方法を定義します。レジスタはCPU内部の小さな記憶場所であり、プロセッサが直接操作できる値を保持します。

マイクロアーキテクチャは、あるプロセッサがISAという約束をハードウェアとして実装する方法です。同時に処理する命令の数、処理の順序、よく使うデータをCPUの近くに保存するキャッシュの配置などが含まれます。ArmのISAの説明でも、サポートする動作とハードウェアでの実装を区別しています。

ISAを、キッチンで命令を出すための共通の言語と考え、マイクロアーキテクチャをキッチンのスタッフ、作業台、組織として考えてください。2つのキッチンが同じ命令を理解しても、完了する速度は異なる場合があります。同様に、2つのx86-64 CPUは性能が異なる場合があり、ARM CPUがすべて同じ内部設計を共有しているわけではありません。

x86、x86-64、ARM、およびARM64の関係

x86およびARMは、それぞれ複数の世代と拡張を含むファミリーを指します。PCのダウンロードページでよく見かけるx64およびARM64のラベルは、これらのファミリー内の64ビット環境を示しています。しかし、ダウンロードページにx86とx64が並んで記載されている場合、x86は通常その32ビット版を意味します。

ラベル 意味と注意点
x86 インテルの8086から派生した命令セットファミリー。インストーラのラベルとしては、通常32ビットx86を意味します。
x86-64、x64、AMD64 x86の64ビット拡張に使用される名称。AMD64のダウンロードは、必要な環境をサポートするインテルCPUでも実行できます。
ARM Armによって定義されたアーキテクチャファミリーです。32ビットおよび64ビットの構成が含まれるため、名前だけではビット数は特定できません。
AArch64、ARM64 AArch64はArmの64ビット実行状態です;ARM64はその環境に対して広く使われているソフトウェア配布ラベルです。その命令セットはA64と呼ばれます。

FreeBSD amd64 プラットフォームの説明 も同様に、AMD64 と Intel 64 を x86-64 または x64 という名前の下に分類しています。ここでいう 64 ビットとは、一般的な整数レジスタおよび実行環境を指しており、すべての命令が 64 ビットである必要があるということではありません。A64 命令は、Arm の A64 ISA ガイド に記載されている通り、32 ビットのエンコーディングを使用します。64 ビットであることは、すべてのプロセッサが同じ速度になることや、同一のサポートメモリ容量を持つことを意味するわけではありません。

x86 と ARM の命令構造はどのように異なりますか?

区別は単なるメーカー名以上の意味があります。同じ加算やデータ移動を要求する場合でも、命令のエンコーディングやレジスタのルールは異なります。CISCとRISCは、これらのファミリーの背後にある設計アプローチを説明するためによく使われる用語です。

CISCとRISCの意味

CISC(Complex Instruction Set Computer、複雑命令セットコンピュータ)は、複雑な操作が可能な命令を提供するアプローチを説明します。 x86はCISCに分類されます:その命令は可変長であり、いくつかの計算命令はメモリの値をオペランドとして使用することができます。オペランドとは、操作が作用する値のことです。

RISC(Reduced Instruction Set Computer、縮小命令セットコンピュータ)は、比較的規則的な命令と、レジスタを使う演算を重視する設計方式です。ARMはこの分類に属します。A64の一般的な整数演算では、メモリの値をレジスタに読み込み、レジスタの値を使って計算し、結果をメモリに書き戻すと考えると理解しやすくなります。この基本構造をロード・ストア構造と呼びます。

例えば、メモリに格納されている数に1を加える操作は、メモリオペランドを受け取るx86命令で表現することができます。対応するA64の操作は、ロード、加算、ストア命令の組み合わせとして理解することができます。これは概念的な例です:コンパイラの実際の出力や実行時間は、コードや最適化設定に依存します。プログラムから見える命令が少ないからといって、必ずしも実行が速いわけではありません。

「Reduced」という名前は、現代のARMプロセッサの命令の総数が必ず少ないことを意味するわけではありません。ARMには、ベクトル計算や暗号化のような操作のための拡張もあります。分類と詳細なx86命令フォーマットについては、ArmのISAの分類およびIntelのソフトウェア開発者マニュアルを参照してください。

なぜ「複雑な命令と単純な命令の対比」では現代のCPUを説明できないのか

プログラムから見える1つの命令が、必ずしも1つの内部動作に対応するわけではありません。現代の高性能x86 CPUは、命令をマイクロオペレーション(micro-ops)と呼ばれるより小さな内部動作にデコードします。インテルの最適化リファレンスマニュアルでは、命令のデコードとこの内部実行の構造について説明しています。

高性能なARM CPUも、複数の命令を同時に処理し、正しい結果を保ちながら実行順序を調整する高度なハードウェアを使用することができます。ArmのArmv8-A ISAガイドには、アウトオブオーダー実行パイプラインの例が含まれています。そのため、x86を「複雑で遅い」と説明し、ARMを「単純で速い」とするのは、現代製品の挙動を決定する多くの要素を見落としています。

性能と消費電力の観点ではどちらが優れていますか?

アーキテクチャの名前だけで性能やエネルギー効率の勝者を特定することはできません。 ISAは設計に影響を与えますが、最終的な製品はその実装、製造プロセス、冷却、ソフトウェア最適化にも依存します。

内部設計と作業負荷が性能を決定する

より多くのCPUコアを持つことは作業を分割する機会を生みますが、プログラムがすべて同じ方法でコアを使用するわけではありません。1つのスレッドからの迅速な応答を必要とするタスクは、多くのコアに作業を分散するタスクとは異なるプロセッサを優先する場合があります。クロック周波数は、異なるCPU設計を比較するための単独の性能指標でもありません。

同じアプリケーション、入力ファイル、品質設定を比較してください。CPU向けに作成されたネイティブビルドと、命令変換を通して実行されるビルドを区別します。ビデオ書き出しなどのタスクでは、グラフィックスプロセッサや専用ビデオハードウェアがかなりの作業を行う場合があるため、完全な結果をCPU命令セットだけに帰することはできません。

短時間の負荷と持続的な負荷を区別することも重要です。プロセッサは最初は高速に動作しても、温度や電力の制限により速度を落とすことがあります。単一スレッド、マルチスレッド、およびゲーム向けCPUベンチマークの読み方(英語)では、それぞれの結果を評価する方法が説明されています。

消費電力とエネルギー効率は異なる指標です

電力はエネルギーが使用される速度であり、通常はワット(W)で表されます。エネルギーはタスクの間に使用される総量です。作業を完了するのに必要なエネルギーを判断するには、平均消費電力と実行時間の両方を考慮する必要があります。

仮の例として、平均10 Wを60秒間使用するデバイスは600ジュール(J)を消費します。同じ作業を完了するために20 Wを20秒間使用するデバイスは400 Jを消費します。2番目のデバイスは作業中により多くの電力を使用しますが、完了したタスクあたりのエネルギーは少なくなります。これらの数値は原理を説明するものであり、実際の製品の測定値ではありません。

バッテリー駆動時間はCPU以上の要素も反映します。バッテリー容量、画面の明るさ、表示技術、メモリ、無線通信、バックグラウンド作業などがすべて関係します。あるARMノートパソコンのバッテリー駆動時間が長いという結果だけで、すべてのARMおよびx86 CPUに共通のルールを確立することはできません。メーカーの熱設計電力(TDP)仕様は、デバイス全体の実際の消費電力として扱うべきではありません。

ARMコンピュータはx86ソフトウェアを実行できますか?

一部のプログラムは、オペレーティングシステムの変換機能を通じて実行できます。しかし、条件はCPUのネイティブ命令を実行する場合とは異なります。オペレーティングシステムのバージョンおよびサポートされているアプリケーション、ドライバー、コンポーネントを確認してください。 デバイスドライバーは、OSがハードウェアと通信し、制御するためのソフトウェアです。カーネルモードドライバーは、OSの中核部分で動作します。

同じソースコードから異なる実行ファイルができる理由

ソースコードは開発者が書くプログラムのテキストです。コンパイルはそれをターゲット環境で実行可能な形式に変換します。x86-64とARM64で同じ機能を構築すると、異なるマシンコードが生成されます。ArmのISAの説明は、高水準言語から特定のISA向けのマシンコードへのコンパイルについて説明しています。

電卓の「3 + 5」機能は両方のシステムで同じ目的を持っていますが、命令ビットやレジスタの使用は異なる場合があります。x86の実行ファイルの名前を変更したり拡張子を変えたりしても、ARM64用のソフトウェアに変換されるわけではありません。プログラムを再構築する場合でも、互換性のあるライブラリやオペレーティングシステムの機能が必要です。

同じCPUアーキテクチャだからといって、オペレーティングシステム間の互換性が生まれるわけでもありません。Windows用のARM64アプリケーションが、自動的にARMベースのMacやAndroidデバイスで動作するわけではありません。実行形式やオペレーティングシステムのインターフェースも一致する必要があります。

変換実行でできることと互換性の限界

エミュレーションとバイナリ変換は、異なる命令セット用に作られたプログラムの実行を助けます。これらは命令を解釈または変換し、変換されたコードを再利用することができます。MicrosoftのWindows on Armエミュレーションに関するドキュメントによると、Windows 11 on Armはx86およびx64アプリケーションの両方のエミュレーションをサポートしていますが、Windows 10 on Armはx86アプリケーションのみをサポートしています。

アプリケーションのエミュレーションは、互換性のあるカーネルモードドライバーの必要性を置き換えるものではありません。Windows on Arm では、これらのドライバーは ARM64 用に利用可能である必要があります。Microsoft の Arm PC FAQ では、デバイスドライバーの要件について説明しています。したがって、プリンター、オーディオデバイス、VPN、セキュリティツール、およびアンチチートコンポーネントを含むゲームは、メイン実行ファイル以外のチェックが必要です。アプリケーションのウィンドウを開くことは、必要な機能がすべて動作することの証明にはなりません。

Macでは、RosettaはIntelベースのMacアプリケーションをAppleシリコン向けに変換します。AppleのRosettaサポートガイドは、macOS 27までの利用可能性と、macOS 28以降に始まる制限を区別しています。この制限では、Rosettaの機能はIntelベースのフレームワークに依存する一部の古い未保守ゲームに限定されます。RosettaはすべてのIntelアプリケーションに対する恒久的な互換性保証として扱うべきではありません。

ネイティブのARM64ビルドは命令の変換を避けることができますが、実際のパフォーマンスと信頼性は依然としてアプリケーションの実装に依存します。すべてのプログラムに当てはまる単一の変換ペナルティは存在せず、ネイティブであっても特定のバージョンが常に高速になるとは限りません。

x64ソフトウェアとARM64ソフトウェア、どちらをダウンロードすべきでしょうか?

まず自分のオペレーティングシステムとCPU環境を確認し、その組み合わせをサポートするダウンロードを選択してください。メーカー名や「64ビット」という言葉だけでは不十分です。

CPUとオペレーティングシステム環境を確認する

  1. Windows: 設定 → システム → バージョン情報を開き、デバイス仕様の下にある「システムの種類」を確認します。x64ベースのプロセッサで64ビットオペレーティングシステムの場合は、Windows x64を探します。Armベースのプロセッサの場合は、まずサポートされているWindows ARM64ビルドを確認します。32ビットオペレーティングシステムは、CPUが64ビット動作をサポートしていてもx64アプリケーションを実行できません。ARM PCを識別するMicrosoftのガイドでは、この設定パスを使用しています。
  2. Mac: Apple メニュー → この Mac について を開きます。Apple シリコンの Mac はチップを表示し、Intel Mac はプロセッサを表示します。Apple シリコンの場合は、Mac をサポートする Apple シリコン または Universal バージョンを選択します。Universal アプリケーションには Intel と Apple シリコンの両方のコードが含まれています。ハードウェアを確認するには、Apple の Mac チップ識別ガイド を参照してください。
  3. Linux: ターミナルで次のコマンドを実行して、現在の環境のマシンタイプを照会します。これは読み取り専用の GNU Coreutils クエリであり、設定を変更せず、元に戻す操作も不要です。
uname -m

典型的なLinux環境では、x86_64はx86-64を識別し、aarch64は64ビットArmを識別します。これらは一般的な出力例であり、すべてのシステムで可能な値がこれだけというわけではありません。パッケージマネージャーでは、amd64やarm64のような異なるラベルを使用する場合があります。仮想マシンやエミュレートされた環境内では、結果をその実行環境を説明するものとして解釈してください。GNU unameマニュアルは、-mをハードウェア名を表示するものとして定義しています。

確認した環境 ダウンロードで確認すべきこと
Windows、x64 CPU、64ビットOS Windows x64またはx86-64。AMD64は同じアーキテクチャファミリーを指します。
Windows、Arm CPU Windows ARM64。利用できない場合は、使用しているWindowsのバージョンとアプリケーションでのx86またはx64エミュレーションのサポートを確認してください。
AppleシリコンMac Windows ARM64インストーラーではなく、macOS用のAppleシリコンまたはユニバーサル。
Intel Mac macOSのバージョンをサポートするIntelまたはユニバーサルアプリケーション。
Linux、x86_64またはaarch64 それぞれのディストリビューションのamd64/x86_64またはarm64/aarch64パッケージ。ディストリビューション、バージョン、依存関係も一致する必要があります。

アプリケーション・プラグイン・ドライバーの対応を確認する

インストーラーを見つけたら、実際に必要な機能を確認してください。例えば、ARM64の音楽アプリケーションは動作する場合がありますが、必要なインストゥルメントプラグインやオーディオデバイスドライバが未対応のままだと、既存のプロジェクトをそのまま続行するのが難しくなります。これは特定の製品が失敗するという主張ではなく、確認すべき組み合わせの例です。

  1. 公式ダウンロードページで、オペレーティングシステム、サポートされる最小バージョン、およびアーキテクチャを一緒に確認してください。開発者が自動インストーラーを提供している場合は、その公式のガイダンスに従ってください。
  2. 必須プラグイン、拡張機能、およびコーデックでサポートされているアーキテクチャとホストアプリケーションのバージョンを確認します。同じプロセスに読み込まれるコンポーネントは、一般的にアーキテクチャが一致する必要があります。別のブリッジ機能が存在する場合は、開発者がサポートする組み合わせを使用してください。
  3. 周辺機器およびシステム機能用ドライバーを確認します。Windows on Armの場合、アプリケーションのエミュレーションサポートとARM64ドライバーの利用可能性を別々に確認してください。
  4. インストール後、必要な作業をテストします:ファイルの開閉、保存、エクスポート、プラグインの使用、デバイスの接続。サポートされていない組み合わせの場合は、公式にサポートされているバージョンを使用するか、公式の削除手順に従う前に重要なデータをバックアップしてください。

x64 と ARM64 はターゲット環境のラベルであり、性能ランキングではありません。まずオペレーティングシステムとアーキテクチャを一致させ、その後依存するアプリケーションやコンポーネントを確認することで、誤ったダウンロードや互換性の誤解を防ぐことができます。