0と1の反復横跳び

仕事や趣味のメモ。コンピュータ、旅、音楽、本など

Raspberry Pi Pico2(RP2350)のDhrystoneを回す

表題の通り、RP2350でDhrystoneを回してみたので、メモ。

pptengineer.hateblo.jp

以前にArduino R4 Minimaでも同様の測定をしたので、合わせて確認してみたい。

実行環境

Raspberry Pi Picoでは色々な開発環境が使用できるが、ここでは最も簡便なArduino IDEを使用した。 この時、各ボードに対応するライブラリ(Board Manager)が必要となるが、公式(?)で展開されている"Arduino Mbed OS RP2040 Boards"というのではダメだったので、下記リンクよりライブラリを流用する。 github.com

設定方法は

  1. File -> Preferences -> Additional boards manager URLs:に下記リンクを追加
  2. Board managerよりRaspberry Pi Pico/RP2040/RP2350....をInstall
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

図でも示しておく。

Board Manager設定1
Board Manager設定2
Board Manager設定3

追加できたら、Toolsより下記の通りにボードを選択する。

Toolsの設定
このプルダウンからは、下記のような設定も可能。

  • CPU Architecture (ARM(CM33), RISC-V(Hazard3)の切り替え)

  • Flash size

  • CPU clock(Downclock, Overclockが可能)

ソースコード

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のドキュメントをもう少し読み進めたいと思う。