2017年11月19日日曜日

Nucleo F767ZI 浮動小数点演算の比較

Cortex-M7のNucleo F767ZIを買ってみた。

RS-Onlineで発注して到着まで3日。佐川急便で届いたので国内で再発送してるような感じです。

サイズ



左上がArduino Uno Rev.3、右上がNucleo F446RE、下がNucleo F767ZI。ボードもでかいが144PinのMCUもでかい。

ST Link側のUSBコネクタはmicro-USB(Nucleo F446REなどのNucleo64はmini-USB)。本体側にも別にmicro-USB端子がついていて、有線LAN用のRJ45ジャックもついている。

GPIO等のコネクタは、Aruduino Headerを2列にしたようなZIO Headerと、その外側にmorpho Header(ピンヘッダは実装されていない)がある。

なかなか豪勢な仕様で、お値段3000円しないのでコスパはいいように思う。

浮動小数点演算


Nulceo F401/F446/F303でやったのと同じように浮動小数点演算を試してみた。

Nucleo F767ZIは単精度浮動小数点数ではなく倍精度浮動小数点数のFPUがついているので、F446とF767でそれぞれ比較してみた。

mbed Repository:
https://os.mbed.com/users/ryood/code/FloatingPointTest/ Revision:1

測定結果


F446 float
op total 1-op
-------- -------- ---------------
divf 1168 0.1168
sinf 4939 0.4939
cosf 4665 0.4665
expf 6758 0.6758
logf 6140 0.614
sqrtf 2392 0.2392

F446 double
op total 1-op
-------- -------- ---------------
div 10754 1.0754
sin 94134 9.4134
cos 110762 11.0762
exp 105595 10.5595
log 137396 13.7396
sqrt 16633 1.6633

F767 float
op total 1-op
-------- -------- ---------------
divf 974 0.0974
sinf 3690 0.369
cosf 3532 0.3532
expf 5374 0.5374
logf 4884 0.4884
sqrtf 2294 0.2294

F767 double
op total 1-op
-------- -------- ---------------
div 3985 0.3985
sin 9511 0.9511
cos 11023 1.1023
exp 10358 1.0358
log 13603 1.3603
sqrt 3730 0.373



float型ではF767の方が若干処理が速くなっていて、double型ではかなり差がついている。

F446の駆動クロックは180MHzで、F767は216MHzなので、float型ではクロック分速いぐらいか。

F446とF767で処理速度の比をグラフ化してみた。



float型ではおおよそ0.8程度。180MHz / 216MHz ≒ 0.83。

double型では、div(割り算)とsqrt以外ではおおよそ0.1程度になっている。

Cortex-M7なので、float型でも速くなってて欲しいな~と思っていましたが、クロック分しか速くなっていない。

Cortex-Aで1.2GHz駆動のRapberry Pi3ぐらいは行ってほしかったのですが。