2011年01月11日

マイコン処理能力比較

※2011/8/9更新 mbed(LPC1768)の結果を追加 表を3つにしました
※2011/8/3更新 C2000 28S Piccolo (TMS320F28035)の結果を追加
※2011/3/14更新 RX62T(アルファプロジェクト AP-RX62T-0A)の結果を追加 表を2つにしました
※2011/1/13更新 AVR(ATmega168P)の結果を追加  表をちょっとだけ見やすくしました。



今回は、サークルで製作している2足歩行ロボットの研究の一環として、何種類かのマイコン処理能力の比較を行ったデータを公開します。

二足歩行ロボットの歩行制御は、ZMPや足先が通る軌道を計算するような、リアルタイム処理を行う必要があります。
逆運動学のような三角関数のオンパレードな処理は、小数点以下の位も必然的に出てきますが、皆さんご存知のとおり、実数型は処理速度が遅いので使用したくないです。そのため、固定小数点として、実際の数値を適当に桁増し(うちの場合は1000倍しています)して処理させるのが、ホビーロボットでは一般的です。逆三角関数なんかも、テーブルを用意して高速に処理させています。(math.hを使わないことで、容量の節約兼ねています)

ただ、そもそものところ、どのくらい速度が違うんだろうという情報は、そこまで多くないです。
最近開発やリリースされたマイコンは、MIPS値を公表していたりもしますが。
ルネサスエレクトロニクス公式にて、固定小数点ライブラリが公開されています。
その他実行速度についての資料もありました。アプリケーションノート付近にありますので探してみてください。



とりあえず、それぞれのマイコンがどれぐらい違うのか、そして整数型と実数型のスピード差が知りたかったので、
1,逆運動学計算10回
2,軌道計画計算
3,行列の掛け算整数10回(4*4同士の掛け算)
4,行列の掛け算実数10回(4*4同士の掛け算)
の4種類を比較しました。

実験対象は以下のマイコンです。

        
マイコン名 型番 メーカ 動作メインクロック コンパイラ 備考
SH7125 R5F7125 Renesas 50MHz C/C++ compiler package for SuperH RISC engine family V.9.04 Release 00 AKI-7125(秋月)
SH7144 64F7144F50V 50MHz AKI-7144(秋月)
SH7137 R5F71374F 80MHz TG-C005(滝田技研)
SH7262 R5S72620W144FPU 144MHz Interface 6月号
RX610 R5F56108 96MHz C/C++ compiler package for RX family V.1.00 Release 01 RX-Stick
RX62T R5F562TAADFP 96MHz AP-RX62T-0A(アルファプロジェクト)
H8/3664F HD64F3664FP 16MHz C/C++ compiler package for the H8, H8S, and H8SX family V.7.00 Release 00 AKI-H8/3664F(秋月)
H8/3694F HD64F3694FP 20MHz AKI-H8/3694F(秋月)
H8/3048F-ONE HD64F3048BF25 24.576MHz RY3048F-ONE(北斗電子)
R8C/35A R5F2135CCDFP 20MHz M16C Series, R8C Family C Compiler V.5.45 Release 01 Renesas Starter Kit for R8C/35C
 ATmega168P ATmega168P-20PU Atmel20MHz WinAVR-20100110外部セラロックによるクロック生成
 C2000 28x Piccolo TMS320F28035 Texas Instruments60MHz Code Composer Studio Core Edition Version: 4.2.2.00033 f-palette(furo)
Cortex-M3
LPC1768
LPC1768 NXP Semiconductors96MHz http://mbed.org/ mbed

測定方法は、それぞれの処理開始直前と終了直後にピンの出力を切り替えて、オシロスコープでON幅を計測します。
オシロスコープはテクトロニクスの TDS1002Bを使用しました。


逆運動学計算は、整数型しか使用していないです。三角関数も全て行列です。6関節分を1回で計算しています。
軌道計画は、イメージとして二足歩行ロボットの足が地面から離れて、再び地面につくまでの軌道を計算していると考えてください。

結果(単位:ms)


マイコン名 逆運動学 軌道計画(10) 軌道計画(20) 行列計算(long) 行列計算(float)
SH7125 6.12 2.361 8.216 0.646 4.832
SH7144 3.074 1.207 7.204 0.364 2.464
SH7137 7.052 1.836 6.284 0.9264 3.844
SH7262 4.67 0.2 0.727 0.466 0.46
RX610 3.342 0.2266 0.874 0.3112 0.3786
RX62T 1.957 0.113 0.433 0.1565 0.1882
H8/3664F 32.9 - - 10.71 31.8
H8/3694F 26.32 - - 8.568 25.42
H8/3048F-ONE 18.15 8.62 34.76 6.664 21.7
R8C/35A 59.64 - - 22.5 247.6
 ATmega168P---7.74485
 C2000 28x Piccolo9.2091.7986.2240.72573.353
Cortex-M31.4630.27741.100.12270.7696

軌道計画のとなりの数値は、軌道を何分割して計算したか、です。
欄が「-」となっているのは、メモリ不足で実行できませんでした。よって記録なしです。
R8C/35Aの行列計算実数型は、メモリの関係で1回しか計算できなかったので、1回の計算結果を10倍した数値です。


以下のグラフは、評価した全てのマイコンにおいての処理時間(行列計算2種)の結果です。
処理の早いマイコンはグラフが描画されていないように見えますので、次のグラフを見てください。
syori1.JPG


以下のグラフは、上のグラフから一部の速いもののみの処理結果です。
syori2.JPG

以下のグラフは、RX、SHマイコンの全種と、比較用にH8/3048F-ONEマイコンの行列計算2種、軌道計画(20)、逆運動学の各種計算結果です。
syori3.JPG


H8が遅いのは知っていたのですが、思った以上に遅かったです。
また、RX610とRX62T、SH7262はFPUが入っているので、floatにしてもあまり速度は低下しませんでした。

ってか、R8C/35Aがなんでこんなに遅いんだろう…。プログラムのアルゴリズムや、変数の型なんかは全部同一なのに…。
R8C速いっていうのを時々聞くので、ちょっと期待していたのですが…。
最適化は全て切ってありますが、最適化を使ってもH8に勝てず…。(詳しい数値は記録し忘れました…)うーん、なんでかなぁ。きっと私が悪いんだろうなぁ。

ATmega168Pは同クロックのH8/3694Fより若干早いです。ただそれも整数型計算のみ。実数型はタブーなぐらい遅いです。
小規模な電子工作であれば、値段的にも魅力です。

Piccoloは、うちの大学直轄のロボット研究組織である「fuRo」が開発した「f-palette」に搭載されていて、ちょうど1年生のSAをやることになった関係で頂きました。
SHと同程度の処理能力な模様です。高分解能なタイマユニットなどが魅力なマイコン。

Cortex-M3は流行りのmbedで実験してみました。
整数演算は今のところ最速、浮動小数点もFPUが入っていないのに、かなり善戦してる。FPU無しではダントツの1位。
ARM系統が思ったより早かった…!

H8は「その他の製品ファミリ」に既に入っているので、マイコンカーでも今後R8Cへの流れが進んでいくと思われます。
でも移行し始めたと思ったら、経営統合&RL78マイコンの登場で、将来的には再び移行の流れになりそうな気がしなくもない。ただ、RL78は78Kがベースだし、開発環境も旧NECのやつだし。
もちろん開発環境含め統合、かつ今までのR8Cや78Kも供給を続ける、とのことだけれど。


開発メーカはまだ良いとして、やっぱりホビーや教育関連になるとこういう話は面倒臭いよなぁ…。
きっと、「秋月が出荷終了する」とかそのぐらいのことが起きない限り、移行はしないだろうし。
とはいえ、古いファミリのマイコンで勉強するより、近年よく使われるマイコン、環境で勉強したほうが今後も役に立つことが多いだろうし。

とかいううちのサークルでは、SH7125かRX62Nが主流でございます。

posted by Tmk at 02:56 | Comment(8) | TrackBack(0) | MCR以外
この記事へのコメント
処理能力比較参考になりました。
文章の中で一切触れられていませんが
SH7137の性能が著しくないようですね。
50Mhzで駆動しているSH7144に負けているとはびっくりです。
Posted by 渉哉 at 2011年01月12日 00:22
SH7137は標準で分周率が1/4となっているのですが滝田技研の水晶は10Mhzなのでもしかしたら設定を弄ってなくて80Mhzで動かしてないのでは?と感じているのですがどうなのでしょうか?
単純に考えてSH7137がSH7144に負けないと思うのですが。。。
Posted by 渉哉 at 2011年01月12日 10:24
比較実験中、搭載クロックの10MHzから、設定で80MHzになるということは知っていたのですが、正直結果が思わしくないのは感じていました。
何回か実験をやり直したのですが、結果変わらず…。
マイコンボードが借り物で、しかもコンパイラ関連に特殊な設定が必要ある物なので、すぐに調べ直すことは出来ないのですが、もう少し調べてみようかな、とは思っています。
Posted by Tmk at 2011年01月13日 01:14
先ほどプログラムを確認したところ

CPG.FRQCR.WORD = 0x0241;

の記述が存在するので、クロックについては80MHz動作であると考えられます。
各種HW初期設定の前に記述してあるので、適用されていると思われますが、機会があるときに調べ直してみようと思っています。
Posted by Tmk at 2011年01月13日 02:20
滝田技研の滝田です。
ご興味がおありでしたら一台サンプルをお送りいたしますが、いかがですか?
Posted by 滝田謙介 at 2011年08月24日 21:57
わざわざコメントありがとうございます。
返信遅くなりまして申し訳ないです…。

実は、私が所属するお隣の研究室でちょっと調べさせてもらって上記の記事を作成しました。(青木研です、といえば分かっていただけるかと)
機能もさる事ながら、サイズが小さいというアドバンテージが素晴らしいです。
機会があれば、是非よろしくお願いします。
Posted by Tmk at 2011年09月07日 00:36
もしかして、防衛大の滝田先生に渡しておけば良かったのかな。(もう10年以上のおつきあい)

メールをいただければ、今度、千葉工に行ったときに、直接手渡しするか、米田先生か太田先生か青木先生に託しておきましょうか?
Posted by 滝田謙介 at 2011年09月13日 22:16
ありがとうございます。メールにて返信させて頂きます。
Posted by Tmk at 2011年09月17日 01:22
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/42498763
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック