ARMって何でしょうって話（超基本編）

この記事は[MDC Advent Calendar 2020](https://qiita.com/advent-calendar/2020/mdc) 7日目の記事です。
日付の1207は素因数分解すると17*71であり1の位と10の位を入れ替えた数字同士の乗算という面白い数字です。
# はじめに
今年の秋くらいの話になりますが、とある勉強会にてARM入門という内容を発表しました。
聞いている限りですと「難しかったけどとりあえず世の中がどう変わっているかわかった」といった高評価を頂きました。
折角の機会なのでこちらでも復習も兼ねて記載いたします。なお、当時のスライドと比較すると内容を一部更新しているところもあります。

なお本件は特に詳しい内容は含まれておらず、サラッと概要がこれでわかれば・・・という程度のものになります。
そのためより詳細を知りたい方は、然るべき資料等をお探しください。
なお、図表が少なくなっており大変申し訳ございません・・・。

# ARMの基本情報
ここでは、ARMの基本情報を企業・商品の両面から紹介いたします。

## 企業としてのARM
ARM社とは、1990年に設立されたイングランドのケンブリッジにある会社です。
ARMとは**A**corn **R**ISC **M**achineの頭文字をとったものです。AcornとはARMを元々開発していた企業の名前であり、会社としてはApple等のジョイントベンチャーとして設立されました。
近年の出来事で言いますと、2016年にSoftbankがARMを買収、2018年にARMがTreasure Dataを買収、2020年にNVIDIAがARMをSoftbankから買収とあり、現在はNVIDIAの子会社となっています。

## 商品としてのARM
ARMとはRISCアーキテクチャのプロセッサ（CPU）です。
RISCという名称は先程記載した、ARMの名前の由来である"Acorn **RISC** Machine"とあるように、この会社・商品の一番根幹となる設計です。なお、RISCそのものについては後程説明いたします。
ARMの主な特徴は、低消費電力という点です。そのため、これまではゲーム機や携帯電話、スマートフォンを中心に採用されてきました。

- 主な採用実績
 - ゲーム機（GAMEBOY ADVANCE, Nintendo DS, Nintendo 3DS, PSP, PS Vita）
 - 携帯電話（FOMA, CDMA 1X WIN, Vodafone/Softbank 3G Series）
 - スマートフォン（iPhone, Pixel, XPERIA, Galaxy Series）
 - その他（Raspberry Pi）

# ARMの特徴
ここでは、ARMの主な特徴として、商品展開と設計思想について説明します。

## 商品展開について
ARM社はライセンスをチップメーカーへ提供し、チップメーカーはそのライセンスを元に製造しています。
提供形態は、アーキテクチャ・ソフトマクロ・ハードマクロという提供形態があります[^1]。

[^1]: メディアIP毎の提供という形態もありますが(1)-(3)と比較すると特殊であるため割愛しています

### (1) アーキテクチャでの提供
アーキテクチャとは、プロセッサの基礎設計を決めるもの（命令セット等）です。ARMvN-(A|R|M) (N: 数字) と呼称されるものがアーキテクチャです。
基本的な設計のみ提供されているため、メーカーはCPUコアやSoC (System on Chip)を自社で設計・製造する必要があります。
ちなみに、SoCとはメモリとか無線等を組み込んだ集積回路のことを指します。

### (2) ソフトマクロによる提供
この提供形態では、プロセッサのコアの設計方法も提供するします。
プロセッサ自体はアーキテクチャの仕様を元に作成されるものであるため、この提供形態は要するにアーキテクチャでの提供と比較してより具体的な設計を提供受けるということになります。ちなみに、Cortex-(A|R|M)[N] (N: 数字)と呼称されているものがプロセッサです。

### (3) ハードマクロによる提供
この提供形態では、半導体の製造方法まで提供します。そのためソフトマクロよりもさらに自由度が低く、独自の設計は反映できないものになります。
一方で、技術的な難易度を下げられることから半導体製造、組込系ではよく使われるライセンス形態とのことです。

### おまけ1
ARMv*やCortexにはターゲットの種類によってA, R, M の名称が付与されています。

| 名称 | 由来 | 意味 |
|:---|:---|:---|
| A | **A**pplication | スマホ・サーバ向け |
| R | **R**eal-Time | リアルタイムシステム[^2]向け |
| M | **M**icrocontroller | マイコン向け |

[^2]: 自動運転向けの自動車等に搭載されるコンピュータを指します

### おまけ2
big.LITTLEという電力効率を上げる技術も採用されています。
こちらは、高性能コア（big）と低性能コア（LITTLE）を1つのチップに搭載し、負荷に応じてコアを切り替えることで低消費電力化を実現しています[^3]。
（例）
big: Cortex-A73
LITTLE: Cortex-A53
[^3]: 命名規則として数字が大きい物が最新（＝高性能）です


## 設計思想（RISCについて）
### RISC vs CISC
**RISC**とは、**R**educed **I**nstruction **S**et **C**omputerの頭文字をとったものです。日本語ですと、「命令セットを減らしたプロセッサ（コンピュータ）」と訳されます。
先に対義語を紹介すると、**CISC** (**C**omplex **I**nstruction **S**et **C**omputer) と呼ばれるものがあり、こちらは「複雑な命令セットのプロセッサ」と訳されます。現行のIntel Core Series, AMD Zen Series等はCISCに分類されるものです。

### 命令セット減らすとは
「命令セットを減らす？どういうこと？」ってなりますよね。
要するに1回の命令あたりの動作はCISCのほうが単純でありRISCのほうが複雑ということです。
この命令というのはプロセッサへの指示を意味しています。プロセッサへの指示というのは加算減算といった演算に加えて、メモリアクセス、レジスタのインクリメントといったものが含まれます。これまでは、後述するハードウェアに対するコストの問題も有り命令セットを複雑化させていました。

さて命令セットを減らす、すなわち命令あたりの動作を少なくするためには、演算の途中経過等をメモリに保持・取り出しという操作を減らす必要があります。
この操作を減らすということはレジスタの個数を増やさないと実現が難しいことを意味しており、結果としてレジスタ数はCISCの方がRISCよりも多いということも違いとしてあげられます。
また命令を単純化させる試みとして命令形式そのものもCISCにおいては、RISCの可変長とは異なり固定長だという違いもあります。
固定長にすると命令をデコードする際という操作をより単純化することができるため、その操作に要する時間を短縮することができますし、命令の先読みをすることでパイプラインの効率を上げることも可能です。

以上の事柄をまとめたCISCとRISCの比較表を示します。

|  | CISC | RISC |
|:---|:---|:---|
| 命令数 | 少ない | 多い |
| レジスタ数 | 多い | 少ない |
| 命令形式 | 固定長 | 可変長 |

### 歴史的背景
従来はレジスタは高価であったため、歴史的にはRISCの方が先に存在し今現在もコンピュータにおいて採用されています[^4]。
しかし、近年はレジスタの価格も下がったことから従来以上に安価で製造することが可能となりました。
加えて、現実においては単純な命令で構成されているということが多いことからわざわざ与えられた命令をRISC向けに再解釈した上で実行しなくても、CISCそのもので実行させるほうが速いというケースが発生しています。
[^4]: RISCはCISC命令をRISC命令に解釈しなおして実行しています

# 最近の採用事例：Apple M1について
Apple SiliconもしくはApple M1とは2020年6月23日のWWDC2020にて発表されたMac向け新CPUです。
Appleは2005年のWWDCにてIntel Core Seriesの採用を発表し翌2006年から現在に至るまで通称Intel Macを発売していました。Intel Macより前については、PowerPC (Apple, IBM & MOTOROLAで開発) というものを採用しておりこちらはRISCタイプでした。そう、RISC --> CISC --> RISCと経たことになります。
まだM1については、単体でのコア性能はIntel Core Series等と比較して低性能と言われていますが、一方でメモリアクセス等の効率性向上から全体的なベンチマーク自体は高性能を叩き出していると言われています。
この先、単体の性能が向上されると更に高スコアを叩き出すかもしれません。

# 最後に
今回は、普段扱っているソフトウェアの世界から少し離れてハードウェアについて紹介しました。
難しいですよね。筆者もこの勉強会をするにあたって、色々復習するため大学院入試の際に購入したアーキテクチャの本[^book]を久々に引っ張り出して読んだりしました。
[^book]: 参考文献に記載している坂井先生の本とパタヘネ本

# 参考文献
- 坂井修一. コンピュータアーキテクチャ. コロナ社, 2004.
- デイビッドA.パターソン, ジョン. L. ヘネシー, 成田光彰. コンピュータの構成と設計 第3版（上）（下）. 2006.
- 東京大学大学院情報理工学系研究科 坂井修一. コンピュータアーキテクチャ 第3回 命令セットアーキテクチャ. 最終閲覧日：2020年12月5日. [https://www.mtl.t.u-tokyo.ac.jp/%7Esakai/hard/hard3.pdf](https://www.mtl.t.u-tokyo.ac.jp/%7Esakai/hard/hard3.pdf)
- 九州大学大学院システム情報科学研究院 安浦寛人, 中西恒夫, 井上弘士. コンピュータアーキテクチャI 第6回 命令と命令表現. 最終閲覧日：2020年12月5日. [http://ocw.kyushu-u.ac.jp/menu/faculty/09/4/6.pdf](http://ocw.kyushu-u.ac.jp/menu/faculty/09/4/6.pdf)
- @tnishinaga. ARM入門. 最終閲覧日：2020年12月5日. [https://speakerdeck.com/tnishinaga/arm-introduction](https://speakerdeck.com/tnishinaga/arm-introduction)
- モノログ. 「ARM」のCPUとは？特徴と種類を徹底解説!!. 最終閲覧日：2020年12月5日. [https://mo-no-log.com/arm/](https://mo-no-log.com/arm/)