Raspberry Pi PicoとRaspberry Pi Pico 2の性能比較
みなさんこんにちは佐々木です。Raspberry Piのマイクロコントローラの新しいモデル「Raspberry Pi Pico 2」の登場にみなさんわくわくしていると思いますが、中々販売が開始できず申し訳ありません。生産が追いついていないようで、販売はもう少し先の見込みです。
Raspberry Pi Pico 2、発売中です!RP2350を搭載したマイコンボードも多数取り揃えています!
さて、今回は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)です。
演算 | 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万回実行したときの処理時間(単位: ミリ秒)を比較しました。
数学関数 | 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のみ)を行いその処理時間(単位: ミリ秒)を比較しました。
-
seq
4バイトの読み込み/書き込みを連続して行います。 -
random
4バイトの読み込み/書き込みをランダムなアドレスに行います。 -
bulk
64バイトの読み込み/書き込みを連続して行います。
操作 | 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を繰り返すコードを実行しその出力周波数を比較しました。
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を使った比較も行いました。
演算 | 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 |
数学関数 | 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 |
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アーキテクチャは整数演算や一部のメモリアクセスでは優れていますが、浮動小数点演算や数学関数での遅延が課題となっています。今後の最適化に期待したいですね。
※テストコードはこちらで公開しています。