皆さんは命令セットアーキテクチャ (ISA)についてご存知でしょうか。コンピュータでソフトウェアが動作するときは、必ずこのISAの仕様に従った命令が実行されます。
しかし、プログラマーでもISAについて知らない人は多いと思います。なぜなら、近年はJavaやPythonなどの高級プログラミング言語が発達し、ISAを意識しなくてもソフトウェアを開発することが可能なためです。
とはいえ、今でもプログラマーはISAを理解しておくことのメリットは大きいです。ISAについて理解しておくことで、最適化やハードウェアの理解が深まり、高いパフォーマンスのソフトウェアを開発できるようになります。
特に、近年はAIなど複雑なアプリケーションが増加していく中で、アプリケーションの実行効率性は重要視されてきているといえます。そのため、実行効率性の高いソフトウェアを開発できるようになれば、プログラマーとしての人材価値はより一層高まると思います。
本記事では、ISAに関する基本的な内容についてハードウェア初心者にも分かるように解説していきます。
命令セットアーキテクチャ(ISA)とは
命令セットアーキテクチャ(ISA)は、コンピュータのプロセッサ(CPU, GPU等)とソフトウェアの間のインターフェースの仕様を定義したものです。ISAに従った命令をプロセッサに入力することで、プロセッサを動作させることができます。
実行ファイル(バイナリファイル、実行可能ファイル)は、ISAに従った命令の羅列(機械語と呼ばれる)で構成されており、これを実行することでプロセッサに対する命令が実行されます。
プログラマーはプログラミング言語を用いてソースコードを作成し、これを機械語に変換(コンパイル)して実行ファイルを作成します。
なぜこのような手順を行うかというと、機械語は0と1のみで構成されており、いきなり機械語でプログラムを作成するのは難しいためです。
そのため、一旦比較的人間が理解しやすいプログラミング言語でソースコードを作成し、その後機械語に変換します。
コンパイルについては、以下の記事で解説しています。
アセンブリ言語とISA
アセンブリ言語は、ISAで定義された機械語命令に1対1で直接対応したプログラミング言語です。機械語命令は0と1のみのバイナリコードに対して、アセンブリ言語は「ADD」や「MOV」など記号的な命令を使用しており、人間が読みやすい形で表現されています。
ただし、近年ではより効率的に開発できる高級プログラミング言語が発達したため、組み込みシステムなど高いパフォーマンスが求められる一部のシステム以外ではあまり使用されません。
アセンブリ言語については以下の記事で解説しています。
マイクロアーキテクチャとの違い
プロセッサにはマイクロアーキテクチャという設計の概念が存在しますが、ISAとは異なります。
ISAは、ソフトウェアや開発者から見たプロセッサの命令のセットを定めているのに対し、マイクロアーキテクチャはプロセッサ内部の構造や設計のことを表しています。
つまり、ISAはプロセッサの外側の設計に対し、マイクロアーキテクチャは内側の設計のことです。プロセッサのアーキテクチャは、ISAとマイクロアーキテクチャの2つで成り立っています。
ISAの種類
命令セットアーキテクチャ(ISA)には、いくつかの種類が存在します。現代の主要なISAは以下の3種類です。
- x86
- ARM
- RISC-V
それぞれ解説していきます。
x86
x86は最も身近なISAで、デスクトップPCやサーバでは基本的にx86アーキテクチャのCPUが使用されています。アメリカの半導体メーカーであるインテルが開発しました。
インテルやインテルとライセンス契約を結んでいるメーカー(AMD)で、x86アーキテクチャのCPUが開発されています。
ARM
ARMはスマートフォンのCPUで圧倒的なシェアを誇るISAです。スマートフォン以外にもIoT機器や家電などの組み込み機器にもよく使用されます。
イギリスの半導体ファブレス企業であるARM社が開発しました。ARM社はARMアーキテクチャのライセンスの提供のみを行い、他の多くの企業(AppleやQualcomm等)がARM社とライセンス契約を結び、CPUの製造を行っています。
モバイルや組み込み機器がメインですが、近年はデスクトップPCやサーバ向けでもシェアを拡大しています。
RISC-V
RISC-V(リスクファイブ)は2011年にカリフォルニア大学で開発された新しいISAです。現時点ではまだまだx86やARMが主流ですが、近年注目を浴びており将来性が期待されています。
性能面はもちろんですが、オープンソースライセンスのため、誰でもライセンス料を支払うことなくRISC-VのCPUを開発・使用することができるのは大きなメリットです。
他にも、仕様がシンプルであったり、カスタマイズ・拡張が容易であったりと、他のISAにはない利点が多くあります。
ISAの比較
上記で紹介したISAの特徴を以下にまとめます。
x86 | ARM | RISC-V | |
---|---|---|---|
アーキテクチャの種類 | CISC(複雑な命令セット) | RISC(単純な命令セット) | RISC(単純な命令セット) |
用途 | デスクトップPC、サーバー | スマホ、組み込み機器、サーバー | 組み込み機器、サーバー、その他幅広い用途 |
エネルギー効率 | 比較的高い消費電力 | 低消費電力 | 低消費電力 |
ライセンス | インテルとAMDが自社製チップを製造 | 他メーカーにライセンスを販売、高額なライセンス料 | オープンソース、ライセンス料無料 |
カスタマイズ性 | 限定的 | 高い | 非常に高い |
まとめ
今回はISAの概要について説明してきましたが、いかがだったでしょうか。
ソフトウェアとハードウェアがどのように繋がっているかなんとなくイメージできたのではないかと思います。
ISAの命令の仕組みなどについても今後記事を書きたいと思っているので、引き続きよろしくお願いします。