日別アーカイブ: 2009年9月29日

NetWalker PC-Z1 Atom と速度比較

Atom と比べてみました。
あくまで参考程度でお願いします。

  ALU    FPU    MEM1   MEM4
  9.32   5.17   4.24   3.20     (1)  Core i7 920 2.67GHz
 29.41  29.36  43.83  27.43     (2)  Atom Z540 1.86GHz
 68.68  68.73  46.70  36.45     (3)  Atom Z540 800MHz
 42.88  44.09  39.45  20.03     (4)  Atom N270 1.60GHz
 37.82 209.76  56.35  30.68     (5)  Cortex-A8 800MHz NEON
 37.84 209.79  58.17  30.69     (6)  Cortex-A8 800MHz VFP
 37.83 252.80  56.34  30.75     (7)  Cortex-A8 800MHz soft
 42.96 211.02  55.86  30.52     (8)  Cortex-A8 800MHz NEON + Thumb-2
 42.85 212.18  55.87  30.53     (9)  Cortex-A8 800MHz VFP + Thumb-2
 42.92 267.23  55.84  30.54     (10) Cortex-A8 800MHz soft + Thumb-2

単位は秒、値が小さい方が高速

テストは基本的にただのループかつシングルスレッドのみです。
数値は Real Time なので厳密なコードのみの実行速度ではないです。

ALU 全部キャッシュに収まる整数演算とループ
FPU スカラーの浮動小数演算を含んだループ
MEM1 8bit 単位のメモリアクセス
MEM4 32bit 単位のメモリアクセス

(5)~(10) が NetWalker です。
浮動小数演算以外はほぼ Atom と近い範囲で、クロック差があるにもかかわらずかなり
善戦しています。おそらく整数演算に関してはシングルスレッドかつキャッシュに入る場合、
同クロックの Atom よりも高速です。

ただし実際の動作速度は CPU core の速度だけでなく、メモリや SSD 等他のデバイスの
影響が大きいので、これだけで判断することは出来ません。

また Atom は HT 前提のパイプライン設計なので、シングルスレッドではその性能を
出し切れていないともいえます。
同じように (1) の Core i7 も 8 スレッドのうち 1つだです。ちなみに (1) は
同時に VirtualBox の仮想 PC が動いていたりとかなりの悪条件で走らせました。

計測も Real 時間なので、バックグラウンドで動いているタスクの影響を少なからず
受けているといえます。この場合 HT を持っている Atom の方が若干有利に働くかも
しれません。

(3) は Z540 の電源設定を変更して、上限 800MHz で動かしたものです。
ALU FPU 時間はクロック数に比例して遅くなりました。MEM1/MEM4 はそれほど変化が
ないようです。この点から MEM1/4 の実行速度は CPU core の速度度よりも、メモリ
アクセス時間の割合の方が大きいと考えられます。

(2)/(3) と (4) はクロック比と速度が一致していません。これはおそらくコンパイラ
の差です。最適化の傾向が異なっており、ループ内の演算に無駄があり畳み込める
条件では gcc の方が高速でした。また VC は SSE 命令を使っており、gcc は
-msse4 をつけても FPU 命令に展開されています。

MEM1 は 1byte 単位で 32MByte を読み書きしています。
MEM4 は 4byte 単位で 64MByte アクセスしています。
よってループ回数は MEM4 が半分になります。
(4) の結果を見ると MEM4 は MEM1 のちょうど半分の時間で完了しているので、
このテストではデータサイズが速度に影響を与えていないようです。

浮動小数演算はただのスカラー演算です。遅すぎて、設定ミスとか例外が発生してるの
ではないかと疑いました。一応 vfp,neon,soft と 3通り試しています。
取りあえずエミュレーションよりは速いことがわかります。
きちんと SIMD を活用すれば、もう少しそれなりの速度が出るのかもしれません。

Thumb-2 の効果は確認できました。16/32bit 命令が混在しており、FP 命令呼び出しも
特に速度が落ちていないようです。

浮動小数演算以外は思ったよりも速いです。浮動小数演算が著しく遅いのは、
プログラムのミスなのかまだ良くわかっていません。

ARM の浮動小数演算に関しては下記ページを参考にさせていただきました。
ひまじめ 組み込みLInux

(2009/09/30 追記) 続き>> NetWalker PC-Z1 Cortex-A8 浮動小数演算の実行速度

(1) PC
Core i7 920 2.67GHz
Windows7 RTM x64, VC2008 x86 -arch:SSE2

(2) VAIO type P
Atom Z540 1.86GHz
Windows7 RC x86, VC2008 x86 -arch:SSE2

(3) VAIO type P
Atom Z540 1.86GHz (800MHz)
Windows7 RC x86, VC2008 x86 -arch:SSE2

(4) EeePC 901
Atom N270 1.6GHz
Ubuntu 9.04 x86, gcc-4.3.3 -mssse3

(5) NetWalker PC-Z1
i.MX515 Cortex-A8 800MHz NEON
Ubuntu 9.04 armel, gcc-4.3.3 -mfloat-abi=softfp -mfpu=neon

(6) NetWalker PC-Z1
i.MX515 Cortex-A8 800MHz VFP
Ubuntu 9.04 armel, gcc-4.3.3 -mfloat-abi=softfp -mfpu=vfp

(7) NetWalker PC-Z1
i.MX515 Cortex-A8 800MHz soft
Ubuntu 9.04 armel, gcc-4.3.3 -mfloat-abi=soft

(8) NetWalker PC-Z1
i.MX515 Cortex-A8 800MHz NEON + Thumb-2
Ubuntu 9.04 armel, gcc-4.3.3 -mfloat-abi=softfp -mfpu=neon -mthumb

(9) NetWalker PC-Z1
i.MX515 Cortex-A8 800MHz VFP + Thumb-2
Ubuntu 9.04 armel, gcc-4.3.3 -mfloat-abi=softfp -mfpu=vfp -mthumb

(10) NetWalker PC-Z1
i.MX515 Cortex-A8 800MHz soft + Thumb-2
Ubuntu 9.04 armel, gcc-4.3.3 -mfloat-abi=soft -mthumb

(2009/09/30 追記) 続き>> NetWalker PC-Z1 Cortex-A8 浮動小数演算の実行速度

関連エントリ
NetWalker PC-Z1 Bluetooth とキーカスタムその他
NetWalker PC-Z1 意外にいける
Netwalker PC-Z1 買いました
タッチタイプの境界
NetWalker PC-Z1