コンテンツにスキップ

日本貨物鉄道株式会社の貨物列車の運休により、九州地域/北海道への配送遅延が生じる可能性がございます。詳細につきましてはヤマト運輸の発表をご確認ください。

日本貨物鉄道株式会社の貨物列車の運休により、九州地域/北海道への配送遅延が生じる可能性がございます。詳細につきましてはヤマト運輸の発表をご確認ください。

Raspberry Pi PicoとRaspberry Pi Pico 2の性能比較

Raspberry Pi PicoとRaspberry Pi Pico 2の性能比較

みなさんこんにちは佐々木です。Raspberry Piのマイクロコントローラの新しいモデル「Raspberry Pi Pico 2」の登場にみなさんわくわくしていると思いますが、中々販売が開始できず申し訳ありません。生産が追いついていないようで、販売はもう少し先の見込みです。

さて、今回はRaspberry Pi Pico 2に搭載されているRP2350の性能評価記事をお届けします。

従来のRaspberry Pi PicoにはRP2040が搭載されていましたが、Raspberry Pi Pico 2では新たにRP2350が採用されています。
RP2350は、Cortex-M33とRISC-Vのデュアルアーキテクチャを備え、より高度な性能・機能を提供してくれるようになりました。

この記事では、Raspberry Pi PicoとRaspberry Pi Pico 2の性能比較を行い、RP2350のCortex-M33とRISC-Vのパフォーマンスの違いに注目します。各種演算処理、数学関数、メモリアクセス速度、そしてGPIO操作における性能を詳しく見ていきます。

※実際の性能測定はRP2350を搭載したSparkFun Pro Micro RP2350を使って行いました。

演算性能の比較

まず、整数演算と浮動小数点演算の処理時間を比較します。それぞれ100万回実行したときの処理時間(単位: ミリ秒)を比較しました。
※テストコードはC/C++ SDKを使用しています。
※RISC-Vコンパイラはgcc version 14.2.1 20240821 (g5146af5ede1)です。

整数・浮動小数点演算の処理時間比較(C_C++ SDK)

演算 RP2040 RP2350(ARM) RP2350(RISC-V)
加算(整数) 72 ms 33 ms 33 ms
減算(整数) 72 ms 33 ms 33 ms
乗算(整数) 72 ms 33 ms 33 ms
除算(整数) 128 ms 87 ms 68 ms
加算(float) 704 ms 40 ms 453 ms
減算(float) 752 ms 47 ms 493 ms
乗算(float) 687 ms 47 ms 653 ms
除算(float) 764 ms 133 ms 1136 ms
加算(double) 896 ms 153 ms 573 ms
減算(double) 1024 ms 153 ms 600 ms
乗算(double) 1528 ms 260 ms 1333 ms
除算(double) 1816 ms 453 ms 2332 ms

整数演算に関しては、RP2350(ARM)とRP2350(RISC-V)はどちらも優れたパフォーマンスを示し、RP2040と比べて約2倍以上の速度向上が見られました。浮動小数点演算においては、RP2350(ARM)が特に優れた結果を示しており、RP2040に比べて最大20倍以上の高速化を達成しています。一方、RP2350(RISC-V)は浮動小数点演算で劣る場合があり、floatやdoubleの除算で処理時間がRP2040より長くなっています。

数学関数の性能比較

次にsin, cos, atan2, sqrtといった数学関数の処理速度を比較します。それぞれ100万回実行したときの処理時間(単位: ミリ秒)を比較しました。

数学関数(sin, cos, atan2, sqrt)の処理時間比較(C_C++ SDK)

数学関数 RP2040 RP2350(ARM) RP2350(RISC-V)
sinf 5879 ms 490 ms 10723 ms
cosf 5959 ms 483 ms 12479 ms
atan2f 7516 ms 641 ms 19631 ms
sqrtf 1048 ms 167 ms 3959 ms
sin 15257 ms 1872 ms 19194 ms
cos 15233 ms 1845 ms 21912 ms
atan2 20719 ms 2576 ms 35142 ms
sqrt 1981 ms 500 ms 8480 ms

数学関数においても、RP2350(ARM)が最も優れたパフォーマンスを発揮しています。一方、RP2350(RISC-V)はsinやcosといった関数で大幅に遅延し、特にatan2で非常に遅い結果となってしまいました。RISC-Vアーキテクチャにおける浮動小数点演算の最適化が不十分である可能性を示唆しています。あるいはRP2040のROMには最適化された数学関数が内蔵されており、それらが優秀なのかもしれません。

メモリアクセス速度の比較

フラッシュROMとSRAMへのアクセス速度を比較します。アクセス方法を変えて4MB分の読み込み/書き込み(SRAMのみ)を行いその処理時間(単位: ミリ秒)を比較しました。

  • seq4バイトの読み込み/書き込みを連続して行います。
  • random4バイトの読み込み/書き込みをランダムなアドレスに行います。
  • bulk64バイトの読み込み/書き込みを連続して行います。

メモリアクセス速度の比較(C_C++ SDK)

操作 RP2040 RP2350(ARM) RP2350(RISC-V)
flash_seq_read 481 ms 223 ms 210 ms
flash_random_read 529 ms 849 ms 846 ms
flash_bulk_read 483 ms 283 ms 189 ms
sram_seq_read 272 ms 80 ms 73 ms
sram_seq_write 256 ms 73 ms 60 ms
sram_random_read 320 ms 87 ms 80 ms
sram_random_write 304 ms 93 ms 73 ms
sram_bulk_read 66 ms 24 ms 17 ms
sram_bulk_write 50 ms 17 ms 10 ms

メモリアクセスにおいては、RP2350(ARM)とRP2350(RISC-V)の両方が優れたパフォーマンスを示しています。SRAMのシーケンシャル読み書きではRISC-Vがやや優れた結果を示しています。RP2350 (ARM)とRP2350 (RISC-V)のフラッシュROMへのランダムアクセスがRP2040に劣る結果となりました。これは興味深いです。PSRAMの対応が影響しているのでしょうか?

GPIO操作の速度比較

GPIOを操作し出力周波数を比較します。GPIO0のON/OFFを繰り返すコードを実行しその出力周波数を比較しました。

GPIO出力周波数の比較(C_C++ SDK)

RP2040 RP2350 (ARM) RP2350 (RISC-V)
GPIO出力周波数 31.25 MHz 37.48 MHz 37.48 MHz

GPIO操作では、RP2350 (ARM)とRP2350 (RISC-V)が同等の性能を発揮し、RP2040を上回っています。ほぼほぼシステムクロック(RP2040 125MHz、RP2350 150MHz)を4分周した周波数になっていました。

MicroPythonでの比較

ここまでC/C++ SDKを使って比較しましたが、MicroPythonを使った比較も行いました。

整数・浮動小数点演算の処理時間比較(MicroPython)

演算 RP2040 RP2350 (ARM) RP2350 (RISC-V)
加算 (整数) 489 ms 253 ms 272 ms
減算 (整数) 489 ms 253 ms 273 ms
乗算 (整数) 747 ms 385 ms 411 ms
除算 (整数) 751 ms 388 ms 418 ms
加算 (浮動小数点) 1048 ms 792 ms 741 ms
減算 (浮動小数点) 1041 ms 793 ms 740 ms
乗算 (浮動小数点) 1047 ms 792 ms 779 ms
除算 (浮動小数点) 1097 ms 808 ms 838 ms

数学関数(sin, cos, atan2, sqrt)の処理時間比較(MicroPython)

数学関数 RP2040 RP2350 (ARM) RP2350 (RISC-V)
sin 34864 ms 2556 ms 24658 ms
cos 34863 ms 2307 ms 24651 ms
atan2 3096 ms 891 ms 2097 ms
sqrt 1457 ms 950 ms 1005 ms

GPIO出力周波数の比較(MicroPython)

RP2040 RP2350 (ARM) RP2350 (RISC-V)
GPIO出力周波数 85 kHz 150 kHz 153.7 kHz

やはりMicroPythonでもRP2350 (ARM)は非常に高いパフォーマンスを発揮しています。RP2350 (RISC-V)も多くの操作で優れた結果を示しています。

MicroPythonはこちらを使いました。

まとめ

全体として、Raspberry Pi Pico 2(RP2350)はRaspberry Pi Pico(RP2040)に比べて大幅に性能が向上しています。特に、Cortex-M33(ARM)アーキテクチャはバランスの取れた高いパフォーマンスを発揮しており、演算速度とメモリアクセスの両方で優れた結果を示しています。一方、RISC-Vアーキテクチャは整数演算や一部のメモリアクセスでは優れていますが、浮動小数点演算や数学関数での遅延が課題となっています。今後の最適化に期待したいですね。

※テストコードはこちらで公開しています。

前の記事 M5Stamp Flyの入荷見込み、交換部品など報告
次の記事 【ロボット向けシングルボードコンピュータ】D-Robotics RDK-X3を使ってみよう 中国Horizon Roboticsが海外展開開始!