ARMアーキテクチャ

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
ARMアーキテクチャ
開発者 ARMホールディングス
ビット数 32ビット, 64ビット
発表 1983年
バージョン ARMv8[1]
デザイン RISC
タイプ Register-Register
エンコード Fixed
ブランチ Condition code
エンディアン性 Bi
拡張 NEON, Thumb, Jazelle, VFP
レジスタ
16 (32ビット), 31 (64ビット)

ARMアーキテクチャ とは、ARMホールディングスの事業部門であるARM Ltdにより開発されている、組み込み機器や低電力アプリケーション向けに広く用いられる32ビットRISC CPUアーキテクチャのことである。

目次

概要 [編集]

ARMアーキテクチャは消費電力を抑える特徴を持ち、低消費電力を目標に設計されるモバイル機器において支配的となっている。命令セットはRISCでありながらもコード密度を重視したCISC寄りの設計になっており[2]、手作業による最適化がしやすい特徴的なアーキテクチャを持つ。

現在では、ARMファミリーは組み込み型での32ビット RISC CPUのおよそ75%を占め[3]、全世界で最も使用されている32bit CPUアーキテクチャである。ARMアーキテクチャに基づくCPUコアは、PDA携帯電話メディアプレーヤー携帯型ゲーム電卓などの携帯機器から、ハードディスクルータなどのPC周辺機器まで、あらゆる電子機器に使用される。

携帯機器や電子機器の高性能化に伴いARMコアの出荷数は加速度的に伸びており、2008年1月の時点で100億個以上[4]、2010年9月の時点で200億個以上[5]が出荷されている。ARMアーキテクチャを使用したプロセッサの例としては、テキサス・インスツルメンツOMAPシリーズやマーベル・テクノロジー・グループXScaleNVIDIATegraクアルコムSnapdragonフリースケールのi.MXシリーズなどがある。

既存のARMプロセッサは組み込みとクライアントシステムに特化していたため全て32ビットであるが、顧客からは電力効率に優れるARMアーキテクチャのサーバへの応用を望む声が高まり、ARM社は2011年10月27日、ARMの64ビット拡張であるARMv8アーキテクチャを発表した[6]

歴史 [編集]

ARMの設計は、1983年エイコーン・コンピュータによって開始された。当時エイコーンはモステクノロジー 6502を搭載したコンピューターを製造・販売しており、6502のように小さなハードウェア規模でシンプルな命令セットを持つ、より高速なプロセッサを開発することによって、6502を置き換えることが目的であった。

開発チームは1985年までにARM1と呼ばれる開発サンプルを完成させ、最初の製品となるARM2は次の年に完成した。ARM2は32ビットのデータバス、26ビットのアドレス空間と16個の32ビットレジスタを備えていた。レジスタの1つは、上位6ビットが状態フラグを保持するプログラムカウンタである。ARM2のトランジスタ数は30000個しかなく、おそらく世界で最もシンプルな実用32ビットマイクロプロセッサであった。これは、マイクロコードを持たないこと(モトローラ 68000の場合は1/4から1/3がマイクロコードであった)と、現在のほとんどのCPUと違ってキャッシュを含まないことによるものである。このシンプルさ故に消費電力は極めて低いが、それにもかかわらず80286よりも性能は高かった。後継となるARM3は、4KBのキャッシュを含みさらに性能を高めた。

1980年代後半、アップルコンピュータはエイコーンと共同で新しいARMコアの開発に取り組んだ。この作業は非常に重要視されていたため、エイコーンは1990年に開発チームをスピンオフしてAdvanced RISC Machinesという新会社を設立した。このため、ARMは本来のAcorn RISC MachineではなくAdvanced RISC Machineの略であるという説明をよく見かけることになる。Advanced RISC Machinesは、1998年ロンドン証券取引所NASDAQに上場した際、ARM Limitedとなった。

この作業の結果、ARM6が開発された。1991年に最初のモデルがリリースされ、アップルはARM6ベースのARM610をアップル・ニュートンに使用した。

これらの変化を経てもコアは大体同じサイズに収まっている。ARM2は30000個のトランジスタを使用していたが、ARM6は35000個にしか増えていない。そこにあるアイデアは、エンドユーザーがARMコアと多くのオプションのパーツを組み合わせて完全なCPUとし、それによって古い設備でも製造でき、かつ安価に高性能を得られる、というものである。

最も成功した実装は、何億台もの携帯電話ゲームボーイアドバンスに搭載されたARM7TDMIであろう。ARMのビジネスは通常IP(知的財産)コアの売上によるものであり、そのライセンスを得てこのコアに基づいたマイクロコントローラが製造されている。

DECは設計のライセンスを得てStrongARMを製造した。233MHzでStrongARMはほんの1Wの電力しか消費しない(最近のバージョンはさらに少ない)。この業績は後に訴訟の解決の一環としてインテルに移管され、インテルはこの機会を利用して古くなりつつあったi960をStrongARMで補強することにし、それ以降XScaleという名で知られる高性能の実装を開発した。

モトローラIBMテキサス・インスツルメンツ任天堂フィリップスAtmelシャープサムスン電子STマイクロエレクトロニクスアナログ・デバイセズパナソニッククアルコムMarvellなどの企業もARMデザインのライセンス供与を受けている。ARMチップは世界で最もよく使われているCPUデザインの一つとなっており、ハードディスク携帯電話ルータ電卓から玩具に至るまであらゆる製品の中に見ることができる。現在では32ビット/64ビット組み込みCPUで圧倒的なシェアを占め、2004年の世界シェアは61%であった[7]

主な採用製品 [編集]

ARM6 [編集]

ARM7/7E [編集]

ARM9/9E [編集]

ARM11/11E [編集]

  • 2007年頃から採用されるようになる。発表は2002年4月29日[8]
    • 2007年7月17日、東芝がARM1176JZF-S搭載の携帯電話用プロセッサ、TC35711XBGを発表。2008年第2四半期より量産開始予定。
  • NVIDIA Tegraネットブック用プロセッサ)
  • 携帯音楽プレーヤー
  • 携帯電話
    • T-Mobile G1
    • Qualcomm MSM7500(EV-DO Rev.A対応携帯電話用チップセット。ARM9Eとのダブル実装)
      • KDDI沖縄セルラー電話(各auブランド)の「KCP+」対応CDMA 1X WINシリーズの携帯電話(例・W56TW54SAW61SW62T等)。ARM9Eとのダブル実装
      • KDDI/沖縄セルラー電話(各auブランド)のCDMA 1X WINシリーズのスマートフォン(例・E30HT等)
    • Qualcomm MSM7600(EV-DO Rev.A対応携帯電話用チップセット。ARM9Eとのダブル実装)
    • NTTドコモFOMA902iシリーズ以降の携帯電話。905i以降のSymbian採用機はSH-4Aとダブル実装。
    • WS018KE (WILLCOM 9) (WILLCOM(ウィルコム)のPHS端末)
    • Samsung S3C6400(ARM 1176JZ(F)-S v1.0)
      • iPhone 3G(412 MHzで駆動)
  • タブレット・PDA
    • ノキア Internet Tablet N800
    • mylo COM-2
  • ゲーム機
    • Zeebo (新興国向けDL専用3Dゲーム機)

Cortex-A8 [編集]

Cortex-A9 [編集]

Cortex-A15 [編集]

  • タブレットは2012年から、スマートフォンは2013年から採用された。
  • サムスン電子は1.7GHzのデュアルコア Exynos 5250 を2012年10月[9]から搭載商品を販売開始。メモリ帯域12.8GB/s[10]
  • テキサス・インスルメンツは2GHzのデュアルコアで2012年第3四半期から商品を出荷予定[11]
  • NVIDIA は Tegra 4 を2013年第1四半期から出荷予定。

Cortex-A57 [編集]

  • 2012年10月に64ビット ARMのCortex-A53, A57(コードネーム「Atlas」と「Apollo」)が発表された。2014年にSoC製品が登場予定[12]

コアの性能と採用実績 [編集]

ARM社製 [編集]

ファミリー アーキテクチャ コア 特徴 キャッシュ (I/D)/MMU 性能 MIPS @ MHz 採用製品
ARM1 ARMv1 ARM1 なし ARM Evaluation System second processor for BBC Micro
ARM2 ARMv2 ARM2 MUL(乗算)命令を追加 なし 4 MIPS @ 8 MHz
0.33 DMIPS/MHz
Acorn Archimedes, Chessmachine
ARMv2a ARM250 統合メモリコントローラ(MMU), Graphics and IO processor. SWAP命令を追加 なし, MEMC1a 7 MIPS @ 12 MHz Acorn Archimedes
ARM3 ARMv2a ARM2a ARMとしてはじめてのキャッシュの採用 4K 統合 12 MIPS @ 25 MHz
0.50 DMIPS/MHz
Acorn Archimedes
ARM6 ARMv3 ARM60 32ビットアドレス空間をサポート(それまでは26ビット) なし 10 MIPS @ 12 MHz 3DO, Zarlink GPS Receiver
ARM600 キャッシュ、コプロセッサバス (FPA10浮動小数点演算ユニット用) 4K 統合 28 MIPS @ 33 MHz
ARM610 キャッシュ、コプロセッサバスは無し 4K 統合 17 MIPS @ 20 MHz
0.65 DMIPS/MHz
Acorn Risc PC 600, アップル・ニュートン 100シリーズ
ARM7 ARMv3 ARM700 8KB 統合 40 MHz Acorn Risc PC 試作CPUカード
ARM710 8KB 統合 40 MHz Acorn Risc PC 700
ARM710a 8KB 統合 40 MHz
0.68 DMIPS/MHz
Acorn Risc PC 700, アップル・ニュートン eMate 300
ARM7100 Integrated SoC. 8KB 統合 18 MHz Psion Series 5
ARM7500 Integrated SoC. 4KB 統合 40 MHz Acorn A7000
ARM7500FE Integrated SoC. "FE"、FPA・EDOメモリコントローラを追加 4KB 統合 56 MHz
0.73 DMIPS/MHz
Acorn A7000+
ARM7TDMI v4T ARM7TDMI(-S) 3ステージ パイプライン 無し 15 MIPS @ 16.8 MHz ゲームボーイアドバンス, ニンテンドーDS, iPod
ARM710T MMU 36 MIPS @ 40 MHz Psion 5 series, アップル・ニュートン
ARM720T 8KB 統合キャッシュ, MMU 60 MIPS @ 59.8 MHz
ARM740T MPU
v5TEJ ARM7EJ-S Jazelle DBX なし
ARM9TDMI v4T ARM9TDMI 5ステージ パイプライン なし
ARM920T 16KB/16KB, MMU 200 MIPS @ 180 MHz Armadillo, GP32,GP2X (マスタ), en:Tapwave Zodiac (Motorola i. MX1)
ARM922T 8KB/8KB, MMU
ARM940T 4KB/4KB, MPU GP2X (スレーブ)
ARM9E v5TE ARM946E-S variable, tightly coupled memories(TCM), MPU 231 MIPS @ 210MHz 74.47 MIPS @ 67.024MHz ニンテンドーDS, ノキア N-Gage, Conexant 802.11 chips
ARM966E-S キャッシュレス, TCMs

ST Micro STR91xF, Ethernet内蔵 [1]

ARM968E-S キャッシュレス, TCMs
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) 32KB/32KB, MMU
ARM1022E (VFP) 16KB/16KB, 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, Freescale i.MX3
v6T2 ARM1156T2(F)-S SIMD, Thumb-2, (VFP) variable, MPU 1.54 DMIPS/MHz
v6KZ ARM1176JZ(F)-S SIMD, Jazelle DBX, (VFP) variable, MMU+TrustZone 1.25 DMIPS/MHz iPhone, iPhone 3G
v6K ARM11 MPCore 1-4 core SMP, SIMD, Jazelle DBX, (VFP) variable, MMU 1.25 DMIPS/MHz(最大608MHz) 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, オーストリアマイクロシステムズ, ローム
Cortex-M0+ 0.93 DMIPS/MHz
Cortex-M1 なし, tightly coupled memory optional. 0.8 DMIPS/MHz[13]
最大 136 DMIPS @ 170 MHz[14] (クロックはFPGA依存)
Altera Cyclone III[15], Actel FPGA[16]
v7-M Cortex-M3 マイクロコントローラ向け キャッシュなし, (MPU) 1.25 DMIPS/MHz Texas Instruments Stellaris MCU, STMicroelectronics STM32, NXP LPC1000, NXP mbed, 東芝 TX03, Luminary Micro, Ember EM3xx, Atmel AT91SAM3, Europe Technologies EasyBCU, Energy Micro EFM32, Actel SmartFusion
v7E-M Cortex-M4 マイクロコントローラ向け。M3にDSP追加。モーター制御、FA/電力制御、オーディオ/ビデオ処理など。 Freescale Kinetis, NXP LPC43xx, STMicroelectronics
Cortex-R v7-R Cortex-R4 組み込み向け 可変キャッシュ, MMUはオプション 1.66 DMIPS/MHz Texas Instruments TMS570, Broadcom
Cortex-R5 1.66 DMIPS/MHz
Cortex-R7 2.53 DMIPS/MHz
Cortex-A v7-A Cortex-A5 400MHz〜800MHz
1.57 DMIPS/MHz
PS-T328, Snapdragon S4 Play, Snapdragon 200
Cortex-A7 1-4マルチプロセッシング 浮動小数点演算器 L2キャッシュメモリ4MB(最高) メモリ管理ユニット, TrustZone, ラージ物理アドレス拡張 〜1.5Ghz
1.9 DMIPS/MHz 
Snapdragon S4 Play, Snapdragon 400, Allwinner A20, Allwinner A31, MediaTek MT6589
Cortex-A8 アプリケーション向け, NEON, Jazelle RCT, Thumb-2 可変(L1+L2), メモリ管理ユニット, TrustZone 600MHz〜1GHz
2.0 DMIPS/MHz
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 800MHz〜2GHz
2.5 DMIPS/MHz
TI OMAP 4, Freescale 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, MediaTek
Cortex-A15 1-16コア対称型マルチプロセッシング メモリ管理ユニット, TrustZone, ラージ物理アドレス拡張 1GHz〜2.5GHz
3.5 DMIPS/MHz
TI OMAP 5, Samsung Exynos 5, NVIDIA Tegra 4, HiSilicon K3V3, Renesas APE6, Renesas R-Car H2, Renesas MP6530
v8-A Cortex-A53 64ビット命令セット。暗号化命令 メモリ管理ユニット, TrustZone, 64bit仮想アドレス 2.3 DMIPS/MHz
Cortex-A57 メモリ管理ユニット, TrustZone, 64bit仮想アドレス 4.1 DMIPS/MHz

サードパーティー [編集]

ファミリー アーキテクチャ 名称 特徴 キャッシュ (I/D)/MMU 性能 MIPS @ MHz 採用製品
StrongARM v4 SA-1 16 KB/8–16 KB, MMU 203–206 MHz
1.0 DMIPS/MHz
XScale v5TE 80200/IOP310/IOP315 I/O Processor
80219
IOP321 en:Iyonix
IOP33x
PXA210/PXA250 Applications processor ザウルス SL-5600, SL-A300
PXA255 32KB/32KB, 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 800MHz〜1.5GHz
2.1 DMIPS/MHz
Qualcomm Snapdragon S1, S2, S3 (第1〜3世代)
Krait アプリケーション向け, 1-4コア対称型マルチプロセッシング, VFPv4 MMU, TrustZone 〜2.5GHz
3.3 DMIPS/MHz
Qualcomm Snapdragon S4 (第4世代・S4 Playは除く), 400/600/800 (第5世代)
ARMADA v7-A Sheeva PJ4 アプリケーション向け, 1-4コア対称型マルチプロセッシング, VFPv3, Wireless MMX2, Thumb-2 可変(L1+L2), MMU, TrustZone 〜1.5GHz
2.42 DMIPS/MHz
Marvell ARMADA 500/600シリーズ
Sheeva PJ4B 組み込み向け, 1-4コア対称型マルチプロセッシング, VFPv3, NEON, Wireless MMX2, Thumb-2 可変(L1+L2), MMU, TrustZone 〜1.6GHz
2.61 DMIPS/MHz
Marvell ARMADA XP/370/1500
Apple Ax v7-A Swift アプリケーション向け, 2コア対称型マルチプロセッシング, VFPv4 Apple A6

ARMv7-A は以下の SoC で実装されている。

ARMアーキテクチャを採用しているCPU/メーカ [編集]

ARMホールディングスの概要にあるように、ARMホールディングスはARMアーキテクチャの設計のみをしており、製造は行ってはいない。ARMはIPコアとして各社にライセンスされ、それぞれの会社において機能を追加するなどしてCPUとして製造される。製造されたCPUはそのまま、あるいはボード上に実装、もしくは製品に組み込まれた形で販売などされる。

以下に『CPUそのもの』『ボード上に実装したもの』などCPUやボードのシリーズ名やブランド名などが明確な主なメーカ名/CPU名/シリーズ名等を記する。

設計について [編集]

32ビットARM [編集]

ARMはRISCプロセッサであり、その命令セットには

  • 32ビット固定長命令
  • ロード/ストアアーキテクチャ
  • 3オペランドのレジスタ間演算
  • 多くの命令が1サイクルで実行可能

といった、多くの32ビットRISCプロセッサに共通する特徴が見られる。その一方で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

として表すことができる。(((ペンティアムなどでも1個の命令でできる、LEA EAX,[EAX+EBX*4])))

これにより、多くのARMプログラムは通常RISCプロセッサに期待されるようなプログラムよりも密度の高いものになる。このため命令フェッチに伴うメモリへのアクセス頻度が少なくなり、分岐に伴うストールも回避しやすく、パイプライン処理を効率的に使うことができる。このことが、ARMがARMより複雑なCPUデザインと競合することを可能にした特徴的な一因のひとつである。

ARMプロセッサは、PC相対アドレッシングやプレ-/ポスト-インクリメント・アドレッシングモードなど、RISCとみなされる他のアーキテクチャと比べ豊富なアドレッシングモードを持っている。

もう一つ留意すべきことは、ARMの命令セットが時間とともに増加しているということである。例えば、初期のARMプロセッサ(ARM7TDMIより以前のもの)は2バイトの値をロードする命令がなかった。

64ビットARM [編集]

ARMv8-Aから採用。ARMの64ビットモードアーキテクチャAArch64では、汎用レジスタはすべて64ビットとなり、数も16個から31個に増やされる。サーバ用途も意識して仮想化支援命令および暗号化支援命令が追加され、SIMD拡張命令であるNEONも大幅に強化される。

命令セットも刷新されるが、コード効率を重視して命令長は32ビットのままで、32ビットARMの特徴であった条件付き実行命令の大半が削除される。

この節は執筆の途中です この節は執筆中です。加筆、訂正して下さる協力者を求めています

ARMの拡張機能 [編集]

Thumb [編集]

ARMプロセッサはThumbと呼ばれるコード効率の向上を意図した16ビットの命令モードを持っている(SuperHの命令16bit/データ32bitに倣い追加された)。条件実行のための4bitプレディケートが削除されている。メモリポートやバスが32ビットよりも狭い状況において32ビットコードよりも性能が向上する。多くの場合、組み込みアプリケーションでは32ビットのデータパスを持っているのは一部のアドレス範囲のみであり(例: ゲームボーイアドバンス)、残りは16ビットかそれよりも狭くなっている。このような状況では、Thumbコードをコンパイルし、CPUに最も負荷のかかる部分だけを32ビットの命令セットを使用して手作業で最適化するのが、通常は理にかなっている。

Thumbテクノロジを搭載した最初のプロセッサはARM7TDMIである。ARM9とそれ以降のファミリは、XScaleも含めて全てThumbテクノロジを搭載している。

Thumb-2 [編集]

Thumb-2テクノロジは2003年に発表されたARM1156コアで登場した。Thumb-2はThumbの制限された16ビットの命令セットを追加の32ビット命令で拡張し、命令セットの幅を広げるものである。公称されているThumb-2の目的は、Thumbと同様のコード密度と32ビットメモリ上でのARM命令セットと同様の性能を得ることであり、Thumb-2はビットフィールド操作、テーブル分岐や条件付き実行などを含んでいる。

Jazelle [編集]

ARMは、Javaバイトコードをハードウェアでネイティブに実行できる技術を実装した。これはARMやThumbモードと並ぶもう一つの実行モードであり、ARM/Thumbの切り替えと同様にしてアクセスすることができる。後述のJazelle RCTに対してJazelle DBX (Direct Bytecode eXecution)とも言う。

Jazelleテクノロジを搭載した最初のプロセッサはARM926EJ-Sである。CPU名の'J'がJazelleを表している。

Thumb Execution Environment (ThumbEE) [編集]

ThumbEEJazelle RCT (Runtime Compilation Target)とも呼ばれる第4のモードである。2005年にアナウンスされ、Cortex-A8プロセッサで最初に実装された。Thumb-2命令セットに小規模な変更を加えたもので、JITコンパイラのように実行時にコードを生成する場合に向いている。主な対象はJava.NET MSIL (C#など)、PythonPerlなどの言語である。

DSP 拡張命令 [編集]

デジタル信号処理とマルチメディアアプリケーション向けに ARMアーキテクチャを拡張するため、いくつかの命令が追加された[2]ARMv5TEARMv5TEJ というアーキテクチャ名の "E" がこれを表していると思われる。

追加された命令は、デジタルシグナルプロセッサアーキテクチャで一般的なものである。例えば、符号付積和演算、飽和加算と飽和減算、「先行する0のカウント」のバリエーションである。

SIMD [編集]

ARMv6で導入された[17]。32ビット幅。

Advanced SIMD (NEON) [編集]

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 となった。

AArch64での拡張 [編集]

64ビットモードであるAArch64では、Advanced SIMDについて大きな拡張が行われている。主な変更点は倍精度浮動小数点演算への対応、IEEE754への準拠、レジスタ本数の増加の3点である。レジスタについては128ビットのレジスタが32本に増加している。依然として64ビットレジスタとしてアクセスすることも可能であるが、32ビットモードとは異なり、64ビットレジスタは128ビットレジスタの下位64ビットにマッピングされている。

Wireless MMX [編集]

Wireless MMX (WMMX) はIntelがXScaleプロセッサ向けに開発したSIMD命令セットである。64ビット幅のレジスタが16本用意されており、8/16/32/64ビットのSIMD整数演算が可能。XScaleとその売却先であるMarvell製のARM SoCに採用されている。命令セット自体はx86プロセッサのMMXとは全く異なるものの、GCCVisual C++等のコンパイラで利用できる組み込み関数はMMXとの互換性がある程度確保されており、これを利用すればMMX向けに記述されたコードを比較的容易に移植することができる。

VFP [編集]

VFP (Vector Floating Point)はARMアーキテクチャのコプロセッサ拡張である。半精度(v3以降)・単精度・倍精度の浮動小数点演算機能を提供する。

  • VFPv1 - 廃止
  • VFPv2 - ARMv5TE、ARMv5TEJ、ARMv6 で利用可能
  • VFPv3 - ARMv7 で利用可能。通常はレジスタ数32個であるが、NVIDIA Tegra 2 シリーズなどはレジスタ数が半分のVFPv3-D16を採用。Cortex-A8の実装はパイプライン化されておらず非常に低速 (VFP Lite)。
  • VFPv4 - Cortex-A5, A7, A15, Apple A6, Snapdragon Krait などで利用可能。IEEE754準拠の (乗算結果の丸めを行わない) Fused multiply add 対応。VFPv4-D16 もあり。

"Vector"の名を冠する通り、いくつかの命令においてはベクタモードと呼ばれる1命令で複数のレジスタに対して演算を行うモードが用意されている。このモードを使えばSIMD演算が可能であるが、プログラミングモデルがやや煩雑[18]であったことや、当時のARM11プロセッサにおける実装はスカラ命令を要素数分だけシーケンシャルに実行するというSIMD演算のメリットを享受できないものであったため、あまり積極的には使われなかった。VFPv3を実装するARMv7世代以降ではモダンなSIMD命令セットであるAdvanced SIMD拡張命令 (NEON) が導入されたため、現在ではベクタモードの利用は推奨されていない。Cortex-A9やA15ではベクタモードに対応していない[19]ことから分かるように、現在のARMアーキテクチャにおけるVFPの位置づけはスカラ専用の浮動小数点演算コプロセッサであり、SIMD演算用途についてはNEONに道を譲っている。

単精度の浮動小数点演算はNEONでも実行可能であるが、倍精度の浮動小数点演算やIEEE754準拠の4つの丸めモード、非正規化数のサポート等はNEONには存在しないため、これらを利用したい場合はVFP命令を使う必要がある。

脚注 [編集]

[ヘルプ]
  1. ^ ARMv8 Technology Preview
  2. ^ 条件実行、定数シフト/ローテート付きオペランド、比較的豊富なアドレッシングモードなど、命令数を削減してコード密度を向上させるための工夫が命令セットの随所に見られる (Thumb-2では可変長命令も採用している) ように、CISC的な特徴を低消費電力化に利用している。ただしマイクロプログラムは持たず過度の複雑さを避けるなど、RISCの利点も存分に活かしている。
  3. ^ http://www.arm.com/miscPDFs/3823.pdf
  4. ^ http://www.jp.arm.com/pressroom/08/080125.html
  5. ^ http://journal.mycom.co.jp/articles/2010/09/10/cortex-a15/index.html
  6. ^ http://ascii.jp/elem/000/000/645/645995/
  7. ^ 2005年、ARM社のセミナー資料による。
  8. ^ News:米速報:次世代マイクロアーキテクチャ「ARM11」発表
  9. ^ Googleが新型「Chromebook」を発表、Samsung製で249ドル
  10. ^ 【PC Watch】 Samsung、初のARM Cortex-A15プロセッサ「Exynos 5250」
  11. ^ 日本TI、モバイルの概念を一変させる高性能、高機能のOMAP™5プラットフォームを発表
  12. ^ 【後藤弘茂のWeekly海外ニュース】 ARMが次世代CPU「Atlas」と「Apollo」の計画を発表
  13. ^ "ARM Cortex-M1", ARM product website. Accessed April 11, 2007.
  14. ^ "ARM Extends Cortex Family with First Processor Optimized for FPGA", ARM press release, March 19 2007. Accessed April 11, 2007.
  15. ^ ARM Cortex-M1
  16. ^ Actel: 製品とサービス: プロセッサ: ARM: Cortex-M1
  17. ^ DSP & SIMD - ARM
  18. ^ ベクトルレジスタが明示的に用意されておらず、複数のスカラレジスタに対して演算を行う。ベクタ長は固定されておらず、FPSCRという特殊なレジスタで最大8要素までのベクタ長を指定可能。また、レジスタがスカラモードのみで使えるバンクとベクタモードで使えるバンクに分けられており、レジスタの組み合わせに制約がある。
  19. ^ ARMプロセッサのベクタモードへの対応はMVFR0レジスタの24-27ビット目を参照することで確認できる。

関連項目 [編集]

外部リンク [編集]