CPU core
Mobile CPU core
design | core | DMIPS/MHz | ISA | core | L0 | L1 | L2 | L3 | pipe-depth | order (int) | order(fp/simd) | dec/issue | exec | FPU | SIMD | SIMD width | sp fp/clock | dp/clock |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ARM | ARM9 (ARM926) | 1.1 | ARMv5TE | 1 | L1 | L2 | 5 stage | in-order | single | 1 | (VFP9-S) | – | 0 | 0 | ||||
ARM | ARM11 (ARM1176) | 1.25 | ARMv6 | 1-4 | L1 | L2 | 8 stage | in-order | single | 1 | (VFPv2) | (NEON) | 1 | 1 | ||||
design | core | DMIPS/MHz | ISA | core | L0 | L1 | L2 | L3 | pipe-depth | order (int) | order(fp/simd) | dec/issue | exec | FPU | SIMD | SIMD width | sp fp/clock | dp/clock |
ARM | Cortex-A8 | 2.0 | ARMv7A | 1 | 32K/32K | 0-1M | 13 stage | in-order | in-order | 2 | 2 | VFPv3 (*1) | NEON | 64bit | 4 | 0.1 | ||
ARM | Cortex-A9 | 2.5 | ARMv7A | 1-4 | 16-64K | 0.5-8M | 8-11 stage | out-of-order | in-order | 2/2 | ? | (VFPv3) | (NEON) | 64bit | 4 | 1 | ||
ARM | Cortex-A9 R4 | ? | ARMv7A | 1-4 | 16-64K | 0.5-8M | 8-11 stage | out-of-order | in-order | 2/2 | ? | (VFPv3) | (NEON) | 64bit | 4 | 1 | ||
ARM | Cortex-A5 | 1.6 | ARMv7A | 1-4 | L1 | L2 | 8 stage | in-order | in-order | single | 1 | (VFPv4) | (NEON) | 32bit | 2 | |||
design | core | DMIPS/MHz | ISA | core | L0 | L1 | L2 | L3 | pipe-depth | order (int) | order(fp/simd) | dec/issue | exec | FPU | SIMD | SIMD width | sp fp/clock | dp/clock |
ARM | Cortex-A15 | 3.5 | ARMv7A | 1-4X | L1 | L2 | 15 stage | out-of-order | out-of-order | 3/8mop | 8mop | VFPv4 | NEON | 64bit x2 | 8 | 1.4 | ||
ARM | Cortex-A7 | 1.9 | ARMv7A | 1-4X | L1 | L2 | 8 stage | in-order | in-order | 2 | 2 | VFPv4 | NEON | 32bit | 2 | 1 | ||
ARM | Cortex-A17 | ARMv7A | 11+ stage | out-of-order | out-of-order | VFPv4 | NEON | |||||||||||
ARM | Cortex-A53 | 2.3 | ARMv8A | 1-4X | 8-64K | 0.5-2M | 8 stage | in-order | in-order | 2/? | 5 | AArch64 NEON | A64 NEON | 64bit x2 | 8 | 4 | ||
ARM | Cortex-A57 | ? | ARMv8A | 1-4X | 48K/32K | 0.5-2M | out-of-order | out-of-order | 3?/? | 8 | AArch64 NEON | A64 NEON | 64bit x2 | 8 | 4 | |||
ARM | Cortex-A72 | ARMv8A | 1-4X | out-of-order | out-of-order | AArch64 NEON | A64 NEON | 64bit x2 | 8 | 4 | ||||||||
design | core | DMIPS/MHz | ISA | core | L0 | L1 | L2 | L3 | pipe-depth | order (int) | order(fp/simd) | dec/issue | exec | FPU | SIMD | SIMD width | sp fp/clock | dp/clock |
Qualcomm | Scorpion | 2.1 | ARMv7A | 1-2 | L1 | L2 | out-of-order | in-order | 2/? | ? | VFPv3 | NEON | 128bit | 8 | 1 | |||
Qualcomm | Krait | 3.3 | ARMv7A | 1-4 | 4K/4K | 16K/16K | L2 | out-of-order | out-of-order | 3/? | ? | VFPv4 | NEON | 128bit | 8 | 2 | ||
Qualcomm | Krait 200 | ? | ARMv7A | ? | 4K/4K | L1 | L2 | out-of-order | out-of-order | 3/? | ? | VFPv4 | NEON | 128bit | 8 | 2 | ||
Qualcomm | Krait 300 | ? | ARMv7A | ? | 4K/4K | L1 | L2 | out-of-order | out-of-order | 3/? | ? | VFPv4 | NEON | 128bit | 8 | 2 | ||
Qualcomm | Krait 400 | ? | ARMv7A | ? | 4K/4K | L1 | L2 | out-of-order | out-of-order | 3/? | ? | VFPv4 | NEON | 128bit | 8 | 2 | ||
Qualcomm | Kryo | ARMv8A | out-of-order | out-of-order | AArch64 NEON | A64 NEON | 128bit | 8 | 4 | |||||||||
design | core | DMIPS/MHz | ISA | core | L0 | L1 | L2 | L3 | pipe-depth | order (int) | order(fp/simd) | dec/issue | exec | FPU | SIMD | SIMD width | sp fp/clock | dp/clock |
Apple | Swift | ? | ARMv7A | ? | L1 | L2 | out-of-order | out-of-order | 3?/? | ? | VFPv4 | NEON | 128bit | 8 | 1 | |||
Apple | Cyclone | ? | ARMv8A | ? | out-of-order | out-of-order | AArch64 NEON | A64 NEON | 128bit x2 | 16 | 8 | |||||||
Apple | Twister | ARMv8A | out-of-order | out-of-order | AArch64 NEON | A64 NEON | 128bit x3 | 24 | 12 | |||||||||
design | core | DMIPS/MHz | ISA | core | L0 | L1 | L2 | L3 | pipe-depth | order (int) | order(fp/simd) | dec/issue | exec | FPU | SIMD | SIMD width | sp fp/clock | dp/clock |
NVIDIA | Denver | ? | ARMv8A | ? | AArch64 NEON | A64 NEON | ||||||||||||
design | core | DMIPS/MHz | ISA | core | L0 | L1 | L2 | L3 | pipe-depth | order (int) | order(fp/simd) | dec/issue | exec | FPU | SIMD | SIMD width | sp fp/clock | dp/clock |
Intel | Atom Saltwell | 2.4 | IA32/Intel64 | 1-2 HT | 32K/24K | 0.5M | in-order | in-order | 2 | 2 | FPU x87 / SSE2 | SSSE3 | 6 | 0.5 | ||||
Intel | Atom Silvermont | IA32/Intel64 | out-of-order | FPU x87 / SSE2 | ||||||||||||||
AMD | Bobcat | ? | IA32/AMD64 | 1-4 | 32K/32K | 0.5M | out-of-order | 2/? | ? | FPU x87 / SSE2 | SSE4A | 64bit | 4 | |||||
AMD | Jaguar | ? | IA32/AMD64 | ? | out-of-order | 2/? | ? | FPU x87 / SSE2 | SSE4A | 128bit | 8 | 3 |
- 括弧付きの VFP/NOEN は Option であることを意味しています。
- (*1) : Cortex-A8 の VFP は pipeline 化されておらず実行完了まで stall します。他の CPU core と比較してスループットは 1/5~1/10
- Cortex-A7/A15/A53/A57 は 1クラスタあたり最大 4 core まで。4 core 以上のシステムも構成できます。
Group 1
Cortex-A8
ARMv7A 第一世代の Cortex-A8 は Multi Core 非対応なので、採用 SoC はすべて Single Core となります。 Multi Core 対応は Cortex-A9 以降。
ARM11 のおよそ 2倍の実行性能。
NEON を標準搭載しているため、single precision floating-point のピーク演算能力が高いことが特徴。 反面、トレードオフとして VFP が非常に低速です。
VFP の浮動小数点演算が pipeline 化されていないことが原因で、完了するまで次の演算が stall します。 結果、一世代前の ARM11 にもスコアで 1桁負けるくらいの遅さです。(1/5~1/10 くらいの遅さ)
VFP は NEON と違い IEEE754 準拠かつ倍精度対応なので、用途によっては VFP を使わなければなりません。
動的な型付を持つ Script 系言語では、数値型として倍精度実数 (64bit double) を用いるものが多くあります。 例えば JavaScript はその代表といえるでしょう。 bit 演算など整数範囲で収まる場合は 32bit integier ですが、32bit を超える値や除算などの演算により double 型に変換されます。
よって Cortex-A8 は Web 系アプリケーションとの相性が極めて悪い CPU であると言えます。
現役で使われている Cortex-A8 はあまり多くありません。 最新 OS が動く端末としては Apple A4 の iPhone 4 が最後ではないかと思います。
Cortex-A9
Multi Core 対応で、Tegra 2 以降急激に採用 SoC が増えました。 Smartphone から Tablet まで非常に幅広く用いられています。
VFP も pipeline 化されており、Cortex-A8 のような欠点がありません。 性能的にはすべての面で Cortex-A8 を上回ります。
ただし NEON が Option 扱いとなっており、SoC の構成によっては NEON 命令が使えないものがあります。 NEON 無しの Cortex-A9 で一番有名なのが Tegra 2 です。
Cortex-A8 の VFP が遅いので、浮動小数点演算はすべて NEON を使いたいが、Tegra 2 のために NEON を使えないというジレンマがありました。 Tegra 2 以外では NEON 非対応 Cortex-A9 端末を見たことがないので、今となってはあまり気にする必要がないかもしれません。
NEON 命令は in-order 実行かつ 64bit ALU なので、実行性能で後発 CPU に負けます。
Scorpion
Qualcomm 独自に開発した ARMv7A CPU core で、 ちょうど Cortex-A8/A9 に対抗する形となります。
性能的には Cortex-A8 より上で、Cortex-A9 同様 MultiCore 対応ながら Cortex-A8 とほぼ同時期に用いられていました。
NEON も標準搭載で VFP も stall 無し。 NEON は 128bit ALU で、ピーク性能では Cortex-A9 の 2倍になります。 ただし pipeline が深く、高クロック動作する反面、実行効率がわずかに劣ります。
2010~2011年の Smartphone の大半が Scorpiopn 搭載 Snapdragon で占められていました。
Cortex-A7
実行性能よりも低消費電力優先で作られた ARMv7A CPU。 Cortex-A15 以降と互換の命令セットを持ち、big.LITTLE の little 側として利用できることが特徴。
実行パイプは in-order の 2本で、Cortex-A8 によく似た構成を持っています。 もちろん Cortex-A8 のように VFP が遅いことはなく Cortex-A9 以降同様に Pipeline 化された当たり前の速度で走ります。
反面、標準搭載である NEON の実行効率が落ちています。 NEON 命令を実行できるものの SIMD としての価値はなく、32bit ALU でスカラーと同等の速度しか出ません。
Cortex-A7 だけの Multi Core SoC も存在していますが、同じ Quad Core といっても Cortex-A9 と比べると性能が大きく劣る点は注意が必要です。
CPU core | 整数pipe | VFP(スカラー 浮動小数点 単精度/倍精度) | NEON (SIMD 浮動小数点 単精度) |
---|---|---|---|
Cortex-A8 | 同等 (2 pipe) | 極めて遅い (非 pipeline、1/5~1/10 ) | 速い (64bit ALU) |
Cortex-A7 | 同等 (2 pipe) | 普通 (2fp/clock , 1dp/clock ) | 遅い (32bit ALU) |
Group 2
Krait
Qualcomm 独自コアの 2世代目で、 VFPv4 対応、演算ユニットの増加、NEON の out-of-order 化など大幅に強化されています。 Cortex-A15 対抗。 Scorpion 同様に他よりも市場投入が速いことが特徴。 Cortex-A9 全盛時にすでに Snapdragon には Krait が用いられていました。
Swifth/Cortex-A15 よりも実行効率は若干劣るものの高クロック動作が特徴で、総合的な性能は非常に高いと言えます。
2013-2014 現在のハイエンド Smartphone 向け CPU はほとんど全部 Krait が用いられており、 Group 2 で最もメジャーな CPU core となっています。
反面、64bit 化で遅れており Qualcomm 独自の 64bit core はまだ発表されていません。
Swift
Apple の独自 CPU core の 1世代目。 動作クロックを抑えつつ、実行効率の高さでカバーしているある意味 Krait と逆の特性を持っています。
市場投入後わずか 1年で後継の Cyclone が登場し、ハイエンドの座を明け渡すことに。 予想外に短命になりそうな CPU core。 採用端末は iPhone 5, iPhone 5c, iPad 4 のみ。
Cortex-A15
実行パイプライン、演算ユニット等、大幅に改良された ARM core 。 VFP/NEON も統合され、out-of-order で実行効率が大きく向上しています。
機能的に互換性を持った Cortex-A7 と組み合わせて big.LITTLE 構成できるのも特徴。
基本性能は高いが SmartPhone 向けは Krait 一色で、採用端末はなかなか増えません。
Group 3
Cyclone
Apple の独自 CPU core の 2世代目です。 市場に投入された初の ARM 64bit (ARMv8, AArch64) 対応 CPU core でもあります。 64bit 化だけでなく性能的にも大きく向上しています。
Swift 同様、低い動作クロックながらも高い IPC が特徴。 演算ユニットは更に増えて、FP/NEON も実行 2~3pipe 有していることがわかっています。 NEON の single precision fp ピーク性能は他の CPU core の 2倍。
ARMv8 のお陰で倍精度演算も強化されており、倍精度演算は他の ARM CPU core の 4~8倍 (64bit mode のみ)。 新しい命令セットによるメリットが大きく、ARM の 64bit 化が非常に効果的であることを知らしめてくれた CPU 。
もちろん上位互換性があるので、ARMv7A 32bit 命令もそのまま走ります。