基板裏 |
えー、前回、MSP432P401Rがイマイチ速くない、という記事を書きました。
32bit 48MhzのMSP432が16bit 16MhzのArduino nanoと比べて約1.7倍速いだけでクロック比やCPU差を考えるとぼろ負け状態でした。
あれ、FPUは仕事してないの?と思ったのですが…よくよく仕様を読んでみれば、M4FのFPUは単精度でした。今回使ったFFTライブラリは倍精度なので、FPU様の恩恵をまったく受けられません。
というわけで、dobuleをfloatにさくっと置換して、実行してみました。
その結果(前回同様64点のFFTを1000回実行)
デバイス | 結果 |
MSP432P401R | 82mSec |
Arduino nano | 1943mSec |
前回結果が1142mSecでしたから約14倍スピードアップ! 圧倒的です。一方のArduino nanoはほとんど変わっていません。改めて調べてみるとArduinoはdoubleもfloatも単精度なんですね…知らなかった。Energiaも同じ仕様なのですが、MSP432は特別なのでしょうか。とりあえずfloatが単精度でFPUを使っていることは確認できましたが、もしMSP432だけはdoubleがちゃんと倍精度で実装されているとしたら、この結果は納得がいきます。
前回の結果でも「なんとか補聴器作れるかなぁ…」という程度だったのですが、これなら十分です。あとは私の能力か…そこが一番ネックだな…。
関係ないけど、配列に一定の値を入れて逆FFTかけたらピンクノイズになるんですかね。一度実験したいと思ってたのですが、こないだ「よし、もう買い忘れはないな」とさんざん確認してから発注したにもかかわらず、見事にDACを注文し忘れました。
やはり私の能力が一番のネックだorz
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。