ATmega128のSINとかの計算速度
すいません m(_ _)m、本記事はブログ引越時に書式が崩れました。順次修正中です。
えーっと、子育ての都合上、こんな時間でも起きているSISOです。おはようございます。
構想していた、高速手抜き算術計算の移植ですが、やめることにしました。というのも、Mathライブラリの関数をいくつか試してみたら、すごく速い!ことがわかりました。そんなわけで、まずはやらないことにしました。
で、その驚きの結果というのが…(計測は手でやってますので、だいたいの値です)
H8/3694
- sin() … 2.86ms
- cos() … 2.89ms
- atan() … 3.41ms
- sqrt() … 21.3us
ATmega128
- sin() … 252us
- cos() … 245us
- atan() … 190us
- sqrt() … 14.7us
とまあ、まさしく桁違い!なのでした。sqrt()はH8/3694もよくがんばっていますが、他は本当に桁違いです。これだけ速ければ、そのまま実装しても大丈夫そうです。もちろん、速いに越したことは無いので、時間があったら高速手抜きプログラムも実装したいなー(もちろん、精度は落ちますけど)と思っています。それにしても速いです。うーむ。
ATmega128って、乗算が速いってのをどこかで読んだことがあるんですが、それが効いているのではないかと思います。いやー、驚いた驚いた。
プログラムですが、今からミルクの時間なので、あとで追記しておきます。
追記 2006/09/28 22:30
というわけで追記です。プログラムは普通にsin()とかをループで呼んでいるだけのものですが、一応、アップしておきます。ちなみにこのプログラムは、ソースコード先頭にある、「#define ATMEGA128」という定義を「#define H83694」にするだけで、どちらでもビルドできます。こんな感じのテクニックを使って、今後、移植性(ポータビリティ)の高いプログラムを公開していこうと思っていますので、楽しみにしていてください。あ、GDLでお願いします。比較は-O0でビルドしたものでやっています。
MathTest.zip
おはようございます
子育てとロボ両立大変でしょうね。
それを容認している奥さんもえらいですね。
ATmega128の開発・検証の記事楽しく読ませてもらってます。SISOさんのアップは難しい組み込みの扱い方が楽しくわかりやすく書き込みされているのが、毎回関心させられます。
残念ながら私はSH2の方向で行こうと思っているのでCOREの考え方や方向性でしか記事の内容を読んでいくしかありませんが、いつも勉強になるのでありがたいなーっと思っています。