表題の通り、RP2350でDhrystoneを回してみたので、メモ。
以前にArduino R4 Minimaでも同様の測定をしたので、合わせて確認してみたい。
実行環境
Raspberry Pi Picoでは色々な開発環境が使用できるが、ここでは最も簡便なArduino IDEを使用した。 この時、各ボードに対応するライブラリ(Board Manager)が必要となるが、公式(?)で展開されている"Arduino Mbed OS RP2040 Boards"というのではダメだったので、下記リンクよりライブラリを流用する。 github.com
設定方法は
- File -> Preferences -> Additional boards manager URLs:に下記リンクを追加
- Board managerよりRaspberry Pi Pico/RP2040/RP2350....をInstall
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
図でも示しておく。
追加できたら、Toolsより下記の通りにボードを選択する。 このプルダウンからは、下記のような設定も可能。
ソースコード
R4 Minimaの時も使用したDhrystoneをお借りした。 なお、ヘッダーファイルも必要なので注意すること。 github.com
この時、L52で
#define Too_Small_TIme 2000000
となっているが、うまく流れない場合は修正する。(0.5~1 sec分程度にする。本当は良くないが、参考値ということで...)
<追記: 2024/11/14> 上手くいかなかった要因は、単に実行回数が少なかったためだと推測する。 (クロック周波数が高く、指定した実行回数ではすぐに走り切ってしまうため。)
// Number_Of_Runs = 300000; //orig(30万回) Number_Of_Runs = 1000000; //100万回
のように、実行回数を増やす。 (稚拙すぎて泣ける...)
結果
測定結果を下記する。
| | RP2350(CM33, 150MHz) | RP2350(CM33, 50MHz) | RP2350(Hazard3, 150MHz) | UNO R4 Minima (CM4, 48MHz) |
| :--- | :---: | :---: | :---: | :---: |
| Microseconds for one run through dhrystone | 3.61 | 10.88 | 2.90 | 16.08 |
| Dhrystones per second | 277382.25 | 91879.25 | 344401.64 | 62172.34 |
| Vax mips rating (DMIPS) | 157.87 | 52.29 | 196.02 | 35.39 |
<追記: 2024/11/14> Dhrystoneのプログラム修正に伴い、結果を更新した。 また参考として、UNO R3に関しても実行回数を1,000,000回で実行したものを示す。
RP2350(CM33, 150MHz) | RP2350(CM33, 50MHz) | RP2350(Hazard3, 150MHz) | UNO R4 Minima (CM4, 48MHz) | UNO R3 (Atmega328P,16MHz) | |
---|---|---|---|---|---|
Microseconds for one run through dhrystone | 3.62 | 10.92 | 2.90 | 16.04 | 57.78 |
Dhrystones per second | 277382.25 | 91550.40 | 344476.53 | 62329.92 | 17306.88 |
Vax mips rating (DMIPS) | 157.87 | 52.11 | 196.06 | 35.48 | 9.85 |
まず、RP2350のCM33(ARM)とHazard3(RISC-V)を比較した際、Harard3の方がMIPSが高く出ていることに驚いた。
(ちゃんとドキュメントを読んでないのだけど)要はバスにぶら下がっているマスタのCPUがスイッチできるようになっているだけで、CPU以降の経路(BUS、memoryなど)は同じではないか?と推測するので純粋にアーキテクチャの差なのだろう。
またR4 Minima(CM4, 48 MHz)とRP2350(CM33, 50 MHz)を比較すると、RP2350の方がスコアが高いことがわかる。
この2つのIPの大きな差は
CM33 : Arm v8
CM4 : Arm v7 とアーキテクチャバージョンが変わっていることで、この進化分と考えられる。
(wikiで”コアの性能と採用実績”より2者の性能を見てみても、v8のCM33の方がDMIPS/MHzが高くなっているため、これはアーキテクチャ進化分とみてよいだろう) ja.wikipedia.org
まとめ
適当にRP2350およびRaspberry Pi Pico2でDhrystoneを回してみた。
今回はArduino IDEベースで測定を行ったが、VScode上のC環境などで試した場合の差異など気になるため、そのうち確認したい。
またRP2350のドキュメントをもう少し読み進めたいと思う。