投稿日: Jun 10, 2017 4:52:25 PM
STM32F3とかF4とか、Cortex-M4の品種はFPUが搭載されている。
それは知ってるけど使い方全然解らないねーって。ちょっと調べてみた。
NUCLEO-F401REをmbedのオンラインコンパイラで使う際FPUは有効になっている。
こちらを参考にして(要するにそのまま) Nucleo STM32F303K8で動作させてみた。
floatで 2667 us
doubleで 25367 us
F401REは84MHz、F303K8は74MHzってことで、1.16倍くらいの速度差なのだけどもFPUは大分速度が違うというか…。
なんかF4使いたくなっちゃいますね。
ついでなのでArduino Leonardoでも同じことしてみた。
92968 us
F303K8に比べてLeonardoは4.5倍遅いんですが、計算結果は4.5倍遅いわけでは無いですね。
ArduinoにFPUなど無いのでF303のdoubleでの計算とで比べるとクロックスピードの差ほど遅くは無いよ。って感じ。
なかなかやるな、Arduino。
脱線しつつF303K8でFPU使えることが解ったので終了ー
のつもりだったんだけど、仮にint型でちょいちょい計算する場合。むしろfloatの方が速くなる可能性はあるのか、ってところを検証してみたくちょっと試してみた。
float num = 1.0fを
int num = 1に。
経産のところはnum *= 2にして、最後のメッセージ表示のところも(float)num。
最後のところ直さないとコンパイラの最適化によって0usで終了してしまう(何も処理してない)
計算内容が全然ちがうのがあれだけど一応同じ回数掛け算をするので目安にはなるかなと。
で、結果。
1413 us
はっやいね。
ってことでわざわざfloatにする意味は無いみたい。普通にintで計算出来るところはintで計算しましょうってことですね。