相変わらず、フルアセンブラFFT計算の調べ物の続き。
バタフライ演算→ビット入れ替え、と来たら次は
自乗和の平方根。
平方根を如何に手を抜きながら高速で処理するか。
しかもアセンブラで、というお話。
以前目論んでいたのは、平方根、つまり」0.5乗
の計算をうまい具合に分解して簡単かつ高速な処理
にすること。
…悪くは無いんだけど、一部でちょっと面倒な計算が。
ってことで別の方法が無いかな…と思って探したところ、
よくよく考えてみるとオーソドックスな二分法なら
意外に処理時間も早そう。2進数の8ビット精度で
求めればいいってことは8回ループ計算でok。
しかも結構単純な計算式。
さて、8回ループの整数演算でどの程度の精度が
出せるのか?と思って、表計算ソフトで実験をば。
やってみたのがこれ。
sqrt_nibunhou2.xls
橙色のセルに1から65535までの数字を入れると
水色のセルに平方根が求まるって仕掛け。
ちなみにざっくり269まで1個1個計算してみたところ
目論見どおりピッタンコ。
ただし、求まる値は「小数点以下切捨て」。
四捨五入になると良かったんだけど、そこまでやると
ちょっとめんどくさそう。
まぁそこまで厳密なことをやりたいんじゃぁ無くて、
まっとうな計算ができればいいって程度なので、
これで方向性は決まったかな…。
平方計算はMEGAシリーズのハードウェア乗算器で
2クロックを8回分。そのほか周辺処理などを加味して
ざっくり100クロック前後でなんとかなりそう。
あとは少しずつアセンブリ言語でゴリゴリ書いていく
だけだよな。ガンバロウ。
|