Type a search term to find related articles by LIMS subject matter experts gathered from the most trusted and dynamic collaboration tools in the laboratory informatics industry.
開発者 | ARMホールディングス |
---|---|
ビット数 | 32ビット、64ビット |
発表 | 1983年 |
バージョン | ARMv9[1] |
デザイン | RISC |
タイプ | Register-Register |
エンコード | Fixed |
ブランチ | Condition code |
エンディアン | Bi |
拡張 | Thumb, Jazelle, VFP, NEON, SVE, SME |
レジスタ | |
16(32ビット)、31(64ビット) |
ARMアーキテクチャ(アーム[2][3][4][5]アーキテクチャ) とは、ARMホールディングスの事業部門であるARM Ltd.により設計・ライセンスされているアーキテクチャである。組み込み機器や低電力アプリケーションからスーパーコンピューターまで様々な機器で用いられている。
ARMアーキテクチャは消費電力を抑える特徴を持ち、低消費電力を目標に設計されるモバイル機器において支配的となっている。本アーキテクチャの命令セットは「(基本的に)固定長の命令」「簡素な命令セット」というRISC風の特徴を有しつつ、「条件実行、定数シフト/ローテート付きオペランド、比較的豊富なアドレッシングモード」といったCISC風の特徴を併せ持つのが特徴的だが、これは初期のARMがパソコン向けに設計された際、当時の同程度の性能のチップとしてはかなり少ないゲート数(約25,000トランジスタ)で実装されたチップの多くの部分を常に活用する設計として工夫されたもので、回路の複雑さを増さないという方向性だというように見れば、CISC風の特徴というよりむしろRISC風の特徴とも言える。このような設計が、初期の世代の実装において、(性能の割に)低消費電力、小さなコア、(RISCとしては)高いコード密度といった優れた特性に結びつき、広く普及する原動力となった。
2005年の時点で、ARMファミリーは32ビット組込みマイクロプロセッサ(乃至、特にマイクロコントローラ)のおよそ75%を占め[6]、全世界で最も使用されている32ビットCPUアーキテクチャである[要出典]。ARMアーキテクチャに基づくCPUコアは、PDA・携帯電話・メディアプレーヤー・携帯型ゲーム・電卓などの携帯機器から、ハードディスク・ルータなどのPC周辺機器まで、あらゆる電子機器に使用される。2015年現在、携帯電話では9割超のシェアがある[7]。
携帯機器や電子機器の高性能化に伴いARMコアの出荷数は加速度的に伸びており、2008年1月の時点で100億個以上[8]、2010年9月の時点で200億個以上[9]が出荷されている。ARMアーキテクチャを使用したプロセッサの例としては、テキサス・インスツルメンツのOMAPシリーズやマーベル・テクノロジー・グループのXScale、NVIDIAのTegra、クアルコムのSnapdragon、フリースケールのi.MXシリーズ、ルネサス エレクトロニクスのRZファミリ、Synergyなどがある。
既存のARMプロセッサは組み込みとクライアントシステムに特化していたため全て32ビットであるが、顧客からは電力効率に優れるARMアーキテクチャのサーバへの応用を望む声が高まり[要出典]、ARM社は2011年10月27日、ARMの64ビット拡張であるAArch64(ARM64)を実装したARMv8アーキテクチャを発表した[10]。
ARMの起源は、1980年代初頭のイギリスのコンピュータ業界に見出すことができる。1983年、イギリスのエイコーン・コンピュータ(Acorn Computers、エイコーン)が画期的なプロジェクト、Acorn RISC Machine(ARM)を開始した。このプロジェクトは、BBC Microの成功を受けて、エイコーンが次世代マシンの開発を目指す中で生まれた。当時、エイコーンは既存の6502プロセッサの性能限界に直面しており、より効率的で低消費電力のプロセッサ、具体的には高性能な32ビットプロセッサの開発が急務となっていた[11]。
プロジェクトの中心となったのは、ソフィー・ウィルソン(Sophie Wilson)とスティーブ・ファーバー(Steve Furber)を含む少数の技術者たちだった。ウィルソンは命令セットアーキテクチャの設計を担当し、ファーバーはハードウェア設計をリードした。彼女らは、バークレーRISCとスタンフォード大学の研究に影響を受け、RISC(縮小命令セットコンピューティング)アーキテクチャを採用することを決定した。RISCアーキテクチャの単純な命令セットにより、高速で効率的な処理の実現が期待された[11]。
開発プロセスは綿密に進められた。まず、既存の商用プロセッサの性能を詳細に分析し、次にシミュレータを使用して新しいアーキテクチャをテストした[11]。
開発チームはVLSI Technology社を「シリコンパートナー」として選び、エイコーンが設計を提供し、VLSIがレイアウトと製造を担当した。1985年4月26日に受け取った最初のARMシリコンチップは正常に動作し、これが「ARM1」と呼ばれるバージョンで、6MHzで動作していた。このARM1は、BBC Micro用のセカンドプロセッサとして初めて実用化され、サポートチップ(MEMC (MEMory Controller), VIDC (VIDeo and sound Controller), IOC (Input Output Controller))の開発を促進し、ARM2の開発にも使用された[12] 。また、BBC BASICは後にアセンブリ言語で書き直され、これにより命令セットに精通した開発者たちは非常に高密度なコードを作成することができた。このARM版BBC BASICは、ARMエミュレータのテストにおいても非常に優れたベンチマークとなった[11]。
このARM1でのシミュレーション結果を元に、1986年末にARM2が8MHzで登場し、翌年には10〜12MHzで動作するバージョンがリリースされた。ARM2には大きなアーキテクチャの改良が施され、以前はソフトウェアで処理されていた乗算が、ブースの乗算アルゴリズムによりハードウェアで実装された。また、新たに追加された「FIQ(Fast Interrupt reQuest)モード」により、割り込み処理時にレジスタ8〜14が自動的に置き換えられるようになり、割り込み処理が高速化された[11]。
ARM2は、1987年に発売されたAcorn Archimedesシリーズのパーソナルコンピュータ(A305、A310、A440)で初めて使用された。Dhrystoneベンチマークによれば、ARM2は7MHzで動作するMC68000ベースのシステム(AmigaやMacintosh SEなど)に比べ約7倍の性能を誇り、16MHzのIntel 80386とほぼ同等の速度を持っていた。高価なSun SPARCやMIPS R2000のRISCベースワークステーションに次ぐ性能を示しながらも、デスクトップパソコンと同程度の価格で提供された。ARM2は、高速I/Oに対応するよう設計され、他のシステムに見られるDMAコントローラのようなサポートチップを省略し、設計を大幅に簡略化したことで、ワークステーション並みの性能を手頃な価格で実現した[11]。
ARM2は32ビットのデータバス、26ビットのアドレス空間、そして16個の32ビットレジスタ(プログラムカウンタを含む)を備えていた。ARM2のトランジスタ数はわずか30,000個で、Motorola 68000の68,000個と比べて非常に少なかった。この簡素化は、ARM2がマイクロコードを持たないことや、キャッシュを搭載していないことによるもので、その結果、低消費電力と簡単な熱処理が可能となった。それでも、ARM2は1987年のIBM PS/2シリーズに搭載されたIntel 80286やIntel 386に比べ、優れた性能を提供していた。
後継機であるARM3は、4KBのキャッシュを搭載し、さらなる性能向上を実現した。
1980年代後半、Apple Computer(現:Apple)はエイコーンと共同で新しいARMコアの開発に取り組んだ。この作業は非常に重要視されていたため、エイコーンは1990年に開発チームをスピンオフしてAdvanced RISC Machinesという新会社を設立した。このため、ARMは本来のAcorn RISC MachineではなくAdvanced RISC Machineの略であるという説明をよく見かけることになる。Advanced RISC Machinesは、1998年にロンドン証券取引所とNASDAQに上場した際、ARM Limitedとなった。
この経緯により、ARM6が開発された。1991年に最初のモデルがリリースされ、AppleはARM6ベースのARM610をApple Newtonに採用した。
これらの変化を経てもコアは大体同じサイズに収まっている。ARM2は30000個のトランジスタを使用していたが、ARM6は35000個にしか増えていない。そこにあるアイデアは、エンドユーザーがARMコアと多くのオプションのパーツを組み合わせて完全なCPUとし、それによって古い設備でも製造でき、かつ安価に高性能を得られる、というものである。
このARM6の改良版であるARM7も、ARM6を採用した製品群に引き続き採用されたほか、普及期に入りつつあった携帯電話にも広く採用されたことから、今日のARMの礎ともなった。
さらに、新世代のARMv4アーキテクチャに基いてARM7を再設計したものがARM7TDMIである。ARM7TDMIはThumb命令(後述)を実装し、低消費電力と高いコード効率を両立する利点を備えていたことから、ライセンスを受けた多くの企業によって製品化され、特に携帯電話やゲームボーイアドバンスといった民生機器に採用されたことから、莫大な数の製品に搭載された。なお、TDMIとはThumb命令、デバッグ (Debug) 回路、乗算器 (Multiplier)、ICE機能を搭載していることを意味している。しかし、これより後のコアには全てこれらの機能が標準的に搭載されるようになったため、この名称は省かれている。
DECはARMv4アーキテクチャの設計のライセンスを得てStrongARMを製造した。233MHzでStrongARMはほんの1Wの電力しか消費しない(最近のバージョンはさらに少ない)。この業績は後に訴訟の解決の一環としてインテルに移管され、インテルはこの機会を利用して古くなりつつあったi960をStrongARMで補強することにし、それ以降XScaleという名で知られる高性能の実装を開発した。
以後も、StrongARMの技術のフィードバックを受けたARM9やARM10を経て、NECとの提携などによって携帯電話向けプロセッサとしての地位を確固たるものにしたARM11をリリースする。
2005年には製品ラインナップを一新し、高機能携帯電話などのアプリケーションプロセッサ向けであるCortex-A、リアルタイム制御向けであるCortex-R、組み込みシステム向けであるCortex-Mと、ターゲットごとにシリーズを分類した。なお、Cortexの末尾に付く文字は、社名であるARMの一文字ずつをそれぞれ割り当てたものである[13]。また、2012年11月にはARM初となる64ビットアーキテクチャによるプロセッサコアであるCortex-A50シリーズを発表した[14]。
ARMからIPコアのライセンス供与を受けている主な企業には、モトローラ、IBM、テキサス・インスツルメンツ、任天堂、フィリップス、Atmel、シャープ、サムスン電子、STマイクロエレクトロニクス、アナログ・デバイセズ、MediaTek、パナソニック、クアルコム、マーベル・テクノロジー・グループなどがある。
ARMチップは世界で最もよく使われているCPUデザインの一つとなっており、ハードディスク、携帯電話、ルータ、電卓から玩具に至るまであらゆる製品の中に見ることができる。32ビット組み込みCPUで圧倒的なシェアを占め、2004年の世界シェアは61%であった[15]。
ファミリー | アーキテクチャ | コア | 特徴 | キャッシュ (I/D)/MMU | 性能 MIPS @ MHz | 採用製品 |
---|---|---|---|---|---|---|
ARM1 | ARMv1 | ARM1 | なし | ARM Evaluation System second processor for BBC Micro | ||
ARM2 | ARMv2 | ARM2 | MUL(乗算)命令を追加 |
|
Acorn Archimedes, Chessmachine | |
ARMv2a | ARM250 | 統合メモリコントローラ (MMU), Graphics and IO processor. SWAP命令を追加 | なし, MEMC1a | 7 MIPS @ 12 MHz | Acorn Archimedes | |
ARM3 | ARMv2a | ARM2a | ARMとしてはじめてのキャッシュの採用 | 4 KB 統合 |
| |
ARM6 | ARMv3 | ARM60 | 32ビットアドレス空間をサポート(それまでは26ビット) | なし | 10 MIPS @ 12 MHz | 3DO, Zarlink GPS Receiver |
ARM600 | キャッシュ、コプロセッサバス(FPA10浮動小数点演算ユニット用) | 4 KB 統合 | 28 MIPS @ 33 MHz | |||
ARM610 | キャッシュ、コプロセッサバスは無し |
|
Acorn Risc PC 600, Apple Newton 100シリーズ | |||
ARM7 | ARMv3 | ARM700 | 8 KB 統合 | 40 MHz | Acorn Risc PC 試作CPUカード | |
ARM710 | Acorn Risc PC 700 | |||||
ARM710a |
|
Acorn Risc PC 700, Apple Newton eMate 300 | ||||
ARM7100 | Integrated SoC. | 18 MHz | Psion Series 5 | |||
ARM7500 | 4 KB 統合 | 40 MHz | Acorn A7000 | |||
ARM7500FE | Integrated SoC. "FE"、FPA・EDOメモリコントローラを追加 |
|
Acorn A7000+ | |||
ARM7TDMI | v4T | ARM7TDMI(-S) | 3ステージ パイプライン | なし | 15 MIPS @ 16.8 MHz | ゲームボーイアドバンス, ニンテンドーDS, iPod |
ARM710T | MMU | 36 MIPS @ 40 MHz | Psion 5 series, Apple Newton | |||
ARM720T | 8 KB 統合キャッシュ, MMU | 60 MIPS @ 59.8 MHz | ||||
ARM740T | MPU | |||||
v5TEJ | ARM7EJ-S | Jazelle DBX | なし | |||
ARM9TDMI | v4T | ARM9TDMI | 5ステージ パイプライン | |||
ARM920T | 16 KB/16 KB, MMU | 200 MIPS @ 180 MHz | Armadillo, GP32,GP2X(マスタ), en:Tapwave Zodiac (Motorola i. MX1) | |||
ARM922T | 8 KB/8 KB, MMU | 200/250 MHz | Cavium CNS2132 (Econa product lines), Cavium STR8132 (Econa evaluation board), Ritmo Torrent Box/Mini Lan Server/BT-Downloader (ZAP-LN-86BT) | |||
ARM940T | 4 KB/4 KB, MPU | GP2X(スレーブ) | ||||
ARM9E | v5TE | ARM946E-S | variable, tightly coupled memories (TCM), MPU |
|
ニンテンドーDS, ノキア N-Gage, Conexant 802.11 chips | |
ARM966E-S | キャッシュレス, TCMs |
ST Micro STR91xF, Ethernet内蔵 | ||||
ARM968E-S | ||||||
v5TEJ | ARM926EJ-S | Jazelle DBX | variable, TCMs, MMU | 220 MIPS @ 200 MHz | Mobile phones: ソニー・エリクソン・モバイルコミュニケーションズ(K, W シリーズ), シーメンス and Benq(x65 シリーズ以降), テキサスインスツルメンツ OMAP1710 | |
v5TE | ARM996HS | Clockless processor | キャッシュレス, TCMs, MPU | |||
ARM10E | v5TE | ARM1020E | (VFP) | 32 KB/32 KB, MMU | ||
ARM1022E | 16 KB/16 KB, MMU | |||||
v5TEJ | ARM1026EJ-S | Jazelle DBX | variable, MMU or MPU | |||
ARM11 | v6 | ARM1136J(F)-S | SIMD, Jazelle DBX, (VFP) | variable, MMU | 1.25 DMIPS/MHz | TI OMAP 2, NXP i.MX3 |
v6T2 | ARM1156T2(F)-S | SIMD, Thumb-2, (VFP) | 1.54 DMIPS/MHz | |||
v6KZ | ARM1176JZ(F)-S | SIMD, Jazelle DBX, (VFP) | variable, MMU+TrustZone | 1.25 DMIPS/MHz | iPhone, iPhone 3G, Broadcom BCM2835 | |
v6K | ARM11 MPCore | 1 – 4 core SMP, SIMD, Jazelle DBX, (VFP) | variable, MMU | 1.25 DMIPS/MHz(最大608 MHz) | NVIDIA Tegra | |
SecurCore | v6-M | SC000 | 0.9 DMIPS/MHz | |||
v4T | SC100 | |||||
v7-M | SC300 | 1.25 DMIPS/MHz | ||||
Cortex-M | v6-M | Cortex-M0 | マイクロコントローラ向け。M1はFPGA上で動作。命令はM3のサブセット。Thumb-2 (BL, MRS, MSR, ISB, DSB, and DMB)対応。 | 0.9 DMIPS/MHz | NXP LPC11xx, Triad Semiconductor, Melfas, 忠北テクノパーク, Nuvoton, オーストリアマイクロシステムズ, ローム, SwissMicros GmbH (DM15, DM41等) | |
Cortex-M0+ | 0.93 DMIPS/MHz | NXP LPC81x, LPC82x, NXP S32K11x, Renesas RAファミリ, Renesas Synergy S1シリーズ | ||||
Cortex-M1 | なし, tightly coupled memory optional. | Altera Cyclone III[28], Actel FPGA[29] | ||||
v7-M | Cortex-M3 | マイクロコントローラ向け(ハーバード・アーキテクチャ) | キャッシュなし, (MPU) | 1.25 DMIPS/MHz | Texas Instruments Stellaris MCU, STMicroelectronics STM32, STMicroelectronics Accordo2, NXP LPC1000, NXP mbed, 東芝 TX03, Luminary Micro, Ember EM3xx, Atmel AT91SAM3, Europe Technologies EasyBCU, Energy Micro EFM32, Actel SmartFusion, Renesas R-IN32 | |
v7E-M | Cortex-M4 | マイクロコントローラ向け(ハーバード・アーキテクチャ)。M3にDSP追加。モーター制御、FA/電力制御、オーディオ/ビデオ処理など。 | NXP Kinetis, NXP LPC43xx, NXP i.MX 6, 7, 8, NXP S32K14x, S32M, STMicroelectronics, Renesas RAファミリ, Renesas Synergy MCU (S3/S5/S7), Infineon TRAVEO | |||
v7-M | Cortex-M7 | マイクロコントローラ向け(ハーバード・アーキテクチャ)。M4までの3段パイプラインから、スーパースカラ(デュアル)6段パイプラインとなり、命令/データ1次キャッシュ、倍精度浮動小数点演算を追加するなど大幅に強化された。クロック周波数は最大800 MHz程度までをターゲットとしており、2017年現在600 MHzで動作する製品がある(NXP i.MX RT1050シリーズ)。
反面、M3,M4にあったBitBand機能が削除されているなどの変更点もある。 |
L1 命令/データ 各0 – 64 KB, (MPU) | 2.14 DMIPS/MHz[30][31] | STMicroelectronics STM32 F7, Atmel SAM x7x, NXP i.MX RT1050, NXP i.MX 8M Nano, Plus, i.MX 95, NXP S32G, S32K, S32M274, 276, Infineon TRAVEO | |
v8-M | Cortex-M23 | マイクロコントローラ向け(ノイマン・アーキテクチャ) | 0.98 DMIPS/MHz[32] | Renesas Synergy S1JA, Renesas RA2A1, Renesas RA2L1, Microchip SAML10 | ||
Cortex-M33 | マイクロコントローラ向け(ハーバード・アーキテクチャ) | 1.50 DMIPS/MHz[33] | Renesas RA6M4, Renesas RA4M3, STM32L5, NXP5500, NXP i.MX 8ULP, i.MX 9 | |||
Cortex-R | v7-R | Cortex-R4 | リアルタイム/セーフティクリティカルな組み込みシステム向け | 可変キャッシュ, MMUはオプション | 1.66 DMIPS/MHz | Texas Instruments TMS570, Broadcom, Renesas RZ/T, STMicroelectronics Accordo2 |
Cortex-R5 | AMD/Xilinx Zynq UltraScale+ MPSoC | |||||
Cortex-R7 | 2.53 DMIPS/MHz | |||||
v8-R | Cortex-R52 | Renesas R-Car V4H, Renesas RZ/T2, NXP S32N, S32Z, S32E | ||||
Cortex-A | v7-A | Cortex-A5 | 低コスト、低消費電力 | L1: 4 KB – 64 KB可変, L2: オプション, メモリ管理ユニット, TrustZone | 1.57 DMIPS/MHz (400 MHz – 800 MHz) | Atmel SAMA5, PS-T328, Snapdragon S4 Play, Snapdragon 200 |
Cortex-A7 | 1 – 4マルチプロセッシング 浮動小数点演算器 L2キャッシュメモリ4 MB(最高) | メモリ管理ユニット, TrustZone, ラージ物理アドレス拡張 | 1.9 DMIPS/MHz ( – 1.5Ghz) | Snapdragon S4 Play, Snapdragon 200, 208, 210, 212, 400, Allwinner A20, Allwinner A31, MediaTek MT6589, Broadcom BCM2836, Renesas R-Car H2, NXP i.MX 6, 7 | ||
Cortex-A8 | アプリケーション向け, NEON, Jazelle RCT, Thumb-2 | 可変 (L1+L2), メモリ管理ユニット, TrustZone | 2.0 DMIPS/MHz (600 MHz – 1 GHz) | TI OMAP 3, Freescale i.MX 5, Apple A4, Samsung Exynos 3, Allwinner A1x, Rockchip RK29xx | ||
Cortex-A9 | アプリケーション向け, 1 – 4コア対称型マルチプロセッシング, (VFP), (NEON), Jazelle RCT and DBX, Thumb-2, アウト・オブ・オーダー実行, 投機的実行, スーパースケーラ | メモリ管理ユニット, TrustZone | 2.5 DMIPS/MHz (800 MHz – 2 GHz) | TI OMAP 4, NXP i.MX 6, ST-Ericsson NovaThor U8500, NVIDIA Tegra 2, NVIDIA Tegra 3, NVIDIA Tegra 4i, STMicroelectronics SPEAr1300, ザイリンクス Zynq-7000, Apple A5, Rockchip RK3xxx, Samsung Exynos 4, HiSilicon K3V2, Kirin 910, MediaTek, Renesas RZ/A, Intel Cyclone V SoC FPGA | ||
Cortex-A15 | 1 – 4コア対称型マルチプロセッシング | メモリ管理ユニット, TrustZone, ラージ物理アドレス拡張 | 3.5 DMIPS/MHz (1 GHz – 2.5 GHz) | TI OMAP 5, Samsung Exynos 5, NVIDIA Tegra 4, NVIDIA Tegra K1, HiSilicon Kirin 920, Renesas APE6, Renesas R-Car H2, Renesas MP6530, Alpine AL-212 | ||
Cortex-A17 | Rockchip RK3288 | |||||
v8-A | Cortex-A32 | 超小型、低消費電力、電力効率重視。IoT機器向け。32ビット命令セット。 | ||||
Cortex-A35 | 低コスト、低消費電力、電力効率重視。64ビット命令セット。 | メモリ管理ユニット, TrustZone, 64bit仮想アドレス, synchronization primitives。[34] | MediaTek Helio X30, NXP i.MX 8 | |||
Cortex-A53 | AArch64。暗号化命令 | 2.3 DMIPS/MHz | Snapdragon 410, 412, 415, 425, 610, 615, 617, 625, 808, 810, HiSilicon Kirin 620, 930, 935, Rockchip RK3368, MediaTek MT6732, 6735, 6737, 6737T, 6738, 6750, 6752, 6753, Helio P10, P20, P25, X10, X30, Renesas R-Car H3, AMD/Xilinx Zynq UltraScale+ MPSoC, NXP i.MX 8, NXP S32G, S32R, TI AM67, 67A, 65x, 64x, 62P, 62x, 62Ax | |||
Cortex-A57 | 4.1 DMIPS/MHz | Snapdragon 808, 810, Nvidia Tegra X1, Samsung Exynos 7, Alpine AL-324, Renesas R-Car H3 | ||||
Cortex-A72 | Snapdragon 618, 620, 650, 652, HiSilicon Kirin 950, 955, AWS Graviton, Marvell ARMADA 7K, 8K, NXP i.MX 8, TI AM68, 69, 68A, 69A, TI DRA82x, TI TDA4x | |||||
Cortex-A73 | HiSilicon Kirin 960, MediaTek Helio X30 | |||||
v8.2-A | Cortex-A55 | Renesas R-Car S4, NXP i.MX 9 | ||||
Cortex-A75 | L1D: 64 KB, メモリ管理ユニット, TrustZone, 64bit仮想アドレス | |||||
Cortex-A76 | 4命令decode | Renesas R-Car V4H | ||||
Cortex-A77 | ||||||
Cortex-A78 | ||||||
Cortex-A78C[35] | ||||||
v9.0-A | Cortex-A510 | Dimensity 9000, Snapdragon 7 Gen 1, Snapdragon 8 Gen1, Snapdragon 8 Gen2, Exynos 2200 | ||||
Cortex-A710 | Dimensity 9000, Snapdragon 7 Gen 1, Snapdragon 8 Gen1, Snapdragon 8 Gen2, Exynos 2200 | |||||
Cortex-A715 | ||||||
v9.2-A | Cortex-A520 | コードネーム: Hayes | ||||
Cortex-A720 | コードネーム: Hunter | |||||
Cortex-X | v8.2-A | Cortex-X1 | ||||
v9.0-A | Cortex-X2 | Dimensity 9000, Qualcomm Snapdragon 8 Gen 1, Exynos 2200 | ||||
Cortex-X3 | Dimensity 9200, Snapdragon 8 Gen 2 | |||||
v9.2-A | Cortex-X4 | |||||
Neoverse | v8.2-A | Neoverse E1 | ||||
Neoverse N1 | Ampere Altra, Altra Max, AWS Graviton2 | |||||
v8.4-A | Neoverse V1 | AWS Graviton3 | ||||
v9.0-A | Neoverse E2 | |||||
Neoverse N2 | ||||||
Neoverse V2 | NVIDIA Grace |
ファミリー | アーキテクチャ | 名称 | 特徴 | キャッシュ (I/D)/MMU | 性能 MIPS @ MHz | 採用製品 |
---|---|---|---|---|---|---|
StrongARM | v4 | SA-1 | 16 KB/8 – 16 KB, MMU | 1.0 DMIPS/MHz (203 – 206 MHz) | ||
XScale | v5TE | 80200/IOP310/IOP315 | I/O Processor | |||
80219 | ||||||
IOP321 | en:Iyonix | |||||
IOP33x | ||||||
PXA210/PXA250 | Applications processor | ザウルス SL-5600, SL-A300 | ||||
PXA255 | 32 KB/32 KB, MMU | 400 BogoMips @ 400 MHz | en:Gumstix | |||
PXA26x | ||||||
PXA27x | 800 MIPS @ 624 MHz | HTC Universal, ザウルス SL-C1000,3000,3100,3200,Willcom W-ZERO3シリーズ WS003SH,WS004SH,WS007SH,WS011SH,WS020SH | ||||
PXA800(E)F | ||||||
Monahans | 1000 MIPS @ 1.25 GHz | |||||
PXA900 | Blackberry 8700, Blackberry Pearl (8100) | |||||
IXC1100 | Control Plane Processor | |||||
IXP2400/IXP2800 | ||||||
IXP2850 | ||||||
IXP2325/IXP2350 | ||||||
IXP42x | en:NSLU2 | |||||
IXP460/IXP465 | ||||||
Snapdragon | v7-A | Scorpion | アプリケーション向け, 1 – 2コア対称型マルチプロセッシング, VFPv3, NEON, Thumb-2, Jazelle RCT, アウト・オブ・オーダー実行, 投機的実行 | 可変(L1+L2), MMU, TrustZone | 2.1 DMIPS/MHz (800 MHz – 1.5 GHz) | Qualcomm Snapdragon S1, S2, S3 (第1 – 3世代) |
Krait | アプリケーション向け, 1 – 4コア対称型マルチプロセッシング, VFPv4 | MMU, TrustZone | 3.3 DMIPS/MHz ( – 2.5 GHz) | Qualcomm Snapdragon S4 (第4世代・S4 Playは除く), 400/600/800 (第5世代) | ||
v8-A | Kryo | 64 KB/512 KB – 1 MB | 6.3 DMIPS/MHz ( – 2.6 GHz) | Qualcomm Snapdragon 820 | ||
Centriq | v8-A | Folker | Centriq 2400 | |||
ARMADA | v7-A | Sheeva PJ4 | アプリケーション向け, 1 – 4コア対称型マルチプロセッシング, VFPv3, Wireless MMX2, Thumb-2 | 可変(L1+L2), MMU, TrustZone | 2.42 DMIPS/MHz ( – 1.5 GHz) | Marvell ARMADA 500/600シリーズ |
Sheeva PJ4B | 組み込み向け, 1 – 4コア対称型マルチプロセッシング, VFPv3, NEON, Wireless MMX2, Thumb-2 | 可変(L1+L2), MMU, TrustZone | 2.61 DMIPS/MHz ( – 1.6 GHz) | Marvell ARMADA XP/370/1500 | ||
Apple Ax | v7-A | Swift | アプリケーション向け, 2コア対称型マルチプロセッシング, VFPv4 | 32 KB/32 KB | 1.1 GHz, 1.4 GHz | Apple A6, Apple A6X |
v8-A | Cyclone | アプリケーション向け, 2コア, AArch64 | 64 KB/64 KB | 1.3 GHz | Apple A7 | |
Cyclone gen 2 | 1.1 GHz, 1.4 GHz, 1.5 GHz | Apple A8 | ||||
Typhoon | アプリケーション向け, 3コア, AArch64 | 1.5 GHz | Apple A8X | |||
Twister | アプリケーション向け, 2コア, AArch64 | 2.23 GHz, 2.35 GHz | Apple A9, Apple A9X | |||
Hurricane, Zephyr | アプリケーション向け, 2+2コア, AArch64 | 1.64 GHz, 2.33 GHz | Apple A10 Fusion | |||
アプリケーション向け, 3+3コア, AArch64 | 2.38GHz | Apple A10X Fusion | ||||
Monsoon, Mistral | アプリケーション向け, 2+4コア, AArch64 | L1: 64 KB/64 KB, L2: 8 MB | 2.39 GHz | Apple A11 Bionic | ||
Vortex, Tempest | L1: 128 KB/128 KB, L2: 8 MB | 2.49 GHz | Apple A12 Bionic | |||
アプリケーション向け, 4+4コア, AArch64 | 2.5GHZ | Apple A12X Bionic, Apple A12Z Bionic | ||||
v8.3-A | Lightning, Thunder | アプリケーション向け, 2+4コア, AArch64 | L1: 48 KB/48 KB, L2: 4 MB | 2.65 GHz | Apple A13 Bionic | |
v8.6-A | Firestorm, Icestorm | L1: 192 KB/64 KB, L2: 12 MB/4 MB | 2.99 GHz | Apple A14 Bionic | ||
Apple M1 | アプリケーション向け, 4+4コア, AArch64 | 3.2 GHz | Apple M1 | |||
Apple M1 Pro | アプリケーション向け, 6+2コア, 8+2コア, AArch64 | Apple M1 Pro | ||||
Apple M1 Max | アプリケーション向け, 8+2コア, AArch64 | Apple M1 Max | ||||
Apple M1 Ultra | アプリケーション向け, 16+4コア, AArch64 | Apple M1 Ultra | ||||
Apple A15 | Avalanche, Blizzard | アプリケーション向け, 2+4コア, AArch64 | 3.23 GHz | Apple A15 | ||
Apple M2 | アプリケーション向け, 4+4コア, AArch64 | L1: 192 KB/128 KB, L2: 16 MB/4 MB | 3.5 GHz | Apple M2 | ||
Apple M2 Pro | アプリケーション向け, 6+4コア, 8+4コア, AArch64 | L1: 192 KB/128 KB, L2: 32 MB/4 MB | Apple M2 Pro | |||
Apple M2 Max | アプリケーション向け, 8+4コア, AArch64 | Apple M2 Max | ||||
Apple A16 | Everest, Sawtooth | アプリケーション向け, 2+4コア, AArch64 | L2: 16 MB/8 MB/24 MB | 3.46 GHz | Apple A16 | |
Tegra K1 | v8-A | Denver | 128 KB/64 KB | Google Nexus 9, Xiaomi Mi Pad | ||
Parker | Denver 2.0 | DRIVE PX2 | ||||
Xavier | Carmel | DRIVE Xavier, Jetson AGX Xavier | ||||
Exynos | v8-A | Exynos M1 | 64 KB/2 MB
(4コアシェア) |
Exynos 8890 (Exynos 8 Octa) | ||
Exynos M2 | Exynos 8895 | |||||
Exynos M3 | Exynos 9810 |
ARMv7-A, v8-A は以下の SoC で実装されている。
ARMホールディングスの概要にあるように、ARMホールディングスはARMアーキテクチャの設計のみをしており、製造は行ってはいない。ARMはIPコアとして各社にライセンスされ、それぞれの会社において機能を追加するなどしてCPUとして製造される。製造されたCPUはそのまま、あるいはボード上に実装、もしくは製品に組み込まれた形で販売などされる。
以下に『CPUそのもの』『ボード上に実装したもの』などCPUやボードのシリーズ名やブランド名などが明確な主なメーカ名/CPU名/シリーズ名等を記する。
ARM は RISC プロセッサであり、Thumb 命令ではなく ARM 命令の場合、その命令セットは
といった、多くの32ビットRISCプロセッサに共通する特徴が見られる。
ARMプロセッサは、PC相対アドレッシングやプレ-/ポスト-インクリメント・アドレッシングモードなど、RISCとみなされる他のアーキテクチャと比べ、豊富なアドレッシングモードを持っている。
もう一つ留意すべきことは、ARMの命令セットが時間とともに増加しているということである。例えば、初期のARMプロセッサ(ARM7TDMIより以前のもの)は2バイトの値をロードする命令がなかった。
32ビット ARM アーキテクチャはいくつかのCPUモードを持つ。同時には1つのモードにしかなれない。命令や外部からの割込みなどでモードが切り替わる[36]。
レジスタ R0 から R7 は全ての CPU モードで同一。これらは決してバンクされない。
R13 と R14 はシステムモード以外の全ての特権 CPU モードでバンクされる。独自の R13 と R14 を持つことにより例外からそれぞれのモードに切り替えられる。R13 はスタックポインタ、R14 は関数からの戻りアドレスを持つ。
usr | sys | svc | abt | und | irq | fiq |
---|---|---|---|---|---|---|
R0 | ||||||
R1 | ||||||
R2 | ||||||
R3 | ||||||
R4 | ||||||
R5 | ||||||
R6 | ||||||
R7 | ||||||
R8 | R8_fiq | |||||
R9 | R9_fiq | |||||
R10 | R10_fiq | |||||
R11 | R11_fiq | |||||
R12 | R12_fiq | |||||
R13 | R13_svc | R13_abt | R13_und | R13_irq | R13_fiq | |
R14 | R14_svc | R14_abt | R14_und | R14_irq | R14_fiq | |
R15 | ||||||
CPSR | ||||||
SPSR_svc | SPSR_abt | SPSR_und | SPSR_irq | SPSR_fiq |
別名:
CPSR は下記32ビットを持つ[38]。
VFP/NEON用として、これらとは別に32ビット用はs0〜s31のレジスタがある。これらは、64ビットレジスタとしてd0〜d15として使える。s0〜s31とd0〜d15はオーバーラップしている。大半の ARMv7-A SoC はさらに、d16〜d31も使える。
VFP/NEON用のシステムレジスタとして、以下の3つがある。
ARMの命令セットにおいてユニークなのは、マシン語の最上位4ビットを占める条件コードを使用した条件実行命令であり、これによってほぼ全ての命令を分岐命令無しに条件付きで実行することができる。
これにより、マシン語中の即値フィールドに割けるビット数が減ってしまう等の欠点もあるものの、小さなif文に対応するコードの生成時に分岐命令を避けることが可能になる。例として、ユークリッドの互除法を挙げる。
(この例はC言語による)
int gcd(int i, int j)
{
while (i != j) {
if (i > j)
i -= j;
else
j -= i;
}
return i;
}
ARMのアセンブリ言語では、whileループの部分は以下のようになる。
loop
CMP Ri, Rj ; i と j を比較
SUBGT Ri, Ri, Rj ; もし "GT" ならば i = i - j;
SUBLT Rj, Rj, Ri ; もし "LT" ならば j = j - i;
BNE loop ; もし "NE" ならば loop に戻る
通常分岐命令を使用しなければならないthenやelse節のところで分岐が省かれていることが分かる。
命令セットのもう一つのユニークな機能が、シフト演算を「データ処理」(算術演算、論理演算、レジスタ間の代入)命令の中に織り込むことができることである。例えば、C言語の
a += (j << 2);
のような文を1つのARM命令
ADD Ra, Ra, Rj, LSL #2
として表すことができる。
これにより、多くのARMプログラムは通常RISCプロセッサに期待されるようなプログラムよりも密度の高いものになる。このため、命令フェッチに伴うメモリへのアクセス頻度が少なくなり、分岐に伴うストールも回避しやすく、パイプライン処理を効率的に使うことができる。このことが、ARMがARMより複雑なCPUデザインと競合することを可能にした特徴的な一因のひとつである。
ARMプロセッサはThumbと呼ばれるコード効率の向上を意図した16ビット長の命令モードを持っている(SuperHの命令16ビット/データ32ビットに倣い追加された)。条件実行のための4ビットプレディケートが削除されている。メモリポートやバスが32ビットよりも狭い状況において32ビットコードよりも性能が向上する。多くの場合、組み込みアプリケーションでは32ビットのデータパスを持っているのは一部のアドレス範囲のみであり(例: ゲームボーイアドバンス)、残りは16ビットかそれよりも狭くなっている。このような状況では、Thumbコードをコンパイルし、CPUに最も負荷のかかる部分だけを32ビット長の命令セットを使用して手作業で最適化するのが、通常は理にかなっている。Thumb命令とARM命令は単一の実行ファイル内で混在が可能であるが、Thumb命令を実行できるモードとARM命令を実行できるモードは独立しており、両者を使うにはその都度プロセッサの状態を切り替える必要がある。状態の切り替えは分岐命令 (BX, BLX) で行うことができるため、通常は関数単位でThumb命令とARM命令を使い分け、関数呼び出しの際に切り替えを行うのが一般的である。
Thumbテクノロジを搭載した最初のプロセッサはARM7TDMIである。ARM9とそれ以降のファミリは、XScaleも含めて全てThumbテクノロジを搭載している。
Thumb-2テクノロジは2003年に発表されたARM1156コアで登場した。Thumb-2はThumbの制限された16ビット長の命令セットを追加の32ビット長命令で拡張し、命令セットの幅を広げるものである。公称されているThumb-2の目的は、Thumbと同様のコード密度と32ビットメモリ上でのARM命令セットと同様の性能を得ることであり、Thumb-2はビットフィールド操作、テーブル分岐や条件付き実行などを含んでいる。従来はThumbモードにおいて使用可能な汎用レジスタは8本のみであり自由度が低かったが、Thumb-2で導入された32ビット長命令では16本全てのレジスタが使用可能である。16ビット長命令と32ビット長命令はモードの切り替えなしで混在可能であるため、ThumbモードにおいてもARMモードに近い自由度が得られるようになった。
ARMは、Javaバイトコードをハードウェアでネイティブに実行できる技術を実装した。これはARMやThumbモードと並ぶもう一つの実行モードであり、ARM/Thumbの切り替えと同様にしてアクセスすることができる。後述のJazelle RCTに対してJazelle DBX (Direct Bytecode eXecution) とも言う。
Jazelleテクノロジを搭載した最初のプロセッサはARM926EJ-Sである。CPU名の'J'がJazelleを表している。
ThumbEEはJazelle RCT (Runtime Compilation Target)とも呼ばれる第4のモードである。2005年にアナウンスされ、Cortex-A8プロセッサで最初に実装された。Thumb-2命令セットに小規模な変更を加えたもので、JITコンパイラのように実行時にコードを生成する場合に向いている。主な対象はJava、.NET MSIL(C#など)、Python、Perlなどの言語である。
デジタル信号処理とマルチメディアアプリケーション向けに ARMアーキテクチャを拡張するため、いくつかの命令が追加された[2]。ARMv5TE と ARMv5TEJ というアーキテクチャ名の "E" がこれを表していると思われる。
追加された命令は、デジタルシグナルプロセッサアーキテクチャで一般的なものである。例えば、符号付積和演算、飽和加算と飽和減算、「先行する0のカウント」のバリエーションである。
ARMv6で導入された[39]。32ビット幅。
Advanced SIMD拡張はNEONとも呼ばれ、メディアおよびデジタル信号の処理に向いた64ビットと128ビットのSIMD命令セットである。8/16/32/64ビットの整数演算と、32ビット (単精度) 浮動小数点演算のためのSIMD命令が定義されており、ARMv7から利用可能。32ビットCPUでは倍精度浮動小数点数は利用不可で、倍精度にはVFPを使用。
ほとんどの ARMv7 SoC で NEON に対応しているが、NVIDIA Tegra 2 シリーズ、SPEAr1310、SPEAr1340 などで対応していない。
レジスタはVFPレジスタとして用意されている32本の64ビットレジスタを用いて、32本の64ビットSIMDレジスタ (D0-D31) 、もしくは16本の128ビットSIMDレジスタ (Q0-Q15) としてアクセスできる。例えば128ビットレジスタQ0はD0とD1の2つの64ビットレジスタの領域にマッピングされている。
Cortex-A15 などより、NEONv2 (version 2) が搭載され、Fused Multiply-Add ができる。これにより、単精度浮動小数点数で 8 FLOPS/cycle となった。
Wireless MMX (WMMX) はインテルがXScaleプロセッサ向けに開発したSIMD命令セットである。64ビット幅のレジスタが16本用意されており、8/16/32/64ビットのSIMD整数演算が可能。XScaleとその売却先であるマーベル・テクノロジー・グループ製のARM SoCに採用されている。命令セット自体はx86プロセッサのMMXとは全く異なるものの、GCCやVisual C++等のコンパイラで利用できる組み込み関数はMMXとの互換性がある程度確保されており、これを利用すればMMX向けに記述されたコードを比較的容易に移植することができる。
VFP (Vector Floating Point) はARMアーキテクチャのコプロセッサ拡張である。半精度(v3以降)・単精度・倍精度の浮動小数点演算機能を提供する。
"Vector" の名を冠する通り、いくつかの命令においてはベクタモードと呼ばれる1命令で複数のレジスタに対して演算を行うモードが用意されている。このモードを使えばSIMD演算が可能であるが、プログラミングモデルがやや煩雑[注釈 1]であったことや、当時のARM11プロセッサにおける実装はスカラ命令を要素数分だけシーケンシャルに実行するというSIMD演算のメリットを享受できないものであったため、あまり積極的には使われなかった。VFPv3を実装するARMv7世代以降ではモダンなSIMD命令セットであるAdvanced SIMD拡張命令 (NEON) が導入されたため、現在ではベクタモードの利用は推奨されていない。Cortex-A9やA15ではベクタモードに対応していない[注釈 2]ことから分かるように、現在のARMアーキテクチャにおけるVFPの位置づけはスカラ専用の浮動小数点演算コプロセッサであり、SIMD演算用途についてはNEONに道を譲っている。
単精度の浮動小数点演算はNEONでも実行可能であるが、倍精度の浮動小数点演算やIEEE754準拠の4つの丸めモード、非正規化数のサポート等はNEONには存在しないため、これらを利用したい場合はVFP命令を使う必要がある。
64ビット命令セットのAArch64やARM64に関してはAArch64を参照。