PR

Raspberry Pi Pico CPUのオーバークロックの方法と速度比較

記事内に広告が含まれています。
スポンサーリンク

概要

 ArduinoIDEのボードマネージャーを見ていたら簡単にRaspberry Pi Pico(以下Pico)のオーバークロックができそうな感じになっていました。実際に試してみてCPUオーバークロックとその処理速度を計測比較を行ってみます。

オーバークロックの方法

▼ArduinoIDEボード画面▼

 PicoはArduinoIDEから使用する前提です。デフォルトは125MHz? 133MHz?のよう。「ツール」のボード設定で簡単にオーバークロックを選択できるようで非常に簡単です。使用しているライブラリはこちら。IDEのボードマネージャーから「Pico」と検索掛けてもすぐに見つかると思います。

速度比較

 オーバークロックを変更して、円周率計算で処理速度の比較を行ってみました。

\begin{align} \sum_{i=0}^\infty \left(-1\right)^{n-1}\frac{1}{2n-1}=\frac{1}{1}-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}-\cdots = \frac{\pi}{4}\\\\ \end{align}

▲奇数の逆数をとって、和と差を繰り返していくと円周率の1/4に近づいていく公式です。この円周率計算の処理速度を比較してみます。

▼ソース(スケッチ)▼

// 2023/05/03 imo lab.
// https://garchiving.com/

uint32_t core0_Timer, core0_dt;
double s;

void setup() {
  Serial.begin(115200);
  pinMode(25, OUTPUT);
  while (!Serial) {
    digitalWrite(25, digitalRead(25) == LOW ? 1 : 0);
    delay(200);
  }
  digitalWrite(25, HIGH);
  delay(1000);
  Serial.printf("core0:start....\n\n");
}

void loop() {
  core0_Timer = micros();
  s = 0;
  for (uint32_t n = 1; n <= 1000000; n++) {
    if (n % 2 == 1) s += 1.0 / (2 * n - 1.0);
    if (n % 2 == 0) s -= 1.0 / (2 * n - 1.0);
  }
  s *= 4.0;
  core0_dt = micros() - core0_Timer;

  Serial.printf("%+5s%.5f\n", "ans:", s);
  Serial.printf("time:%7d ms\n\n", core0_dt / 1000);
}

▲和と差の繰り返しを100万回行って円周率を計算してます。シリアル通信が開始されるまでプログラム待機、通信開始後に計算が始まります。その時の計算速度を計測。

 ちなみにArduinoUnoでこの計算を行うと1分近くかかります。(Unoで動かす場合は少しソースの修正が必要です)

スポンサーリンク

速度比較結果

 オーバークロック毎の処理速度です。

CPU【MHz】時間【s】速度比
5010.07737%
1004.97375%
1204.13590%
1333.272
1503.301113%
175
2002.470151%
2252.194170%
2402.056181%
2501.973189%
275
300

▲円周率計算の速度比較してます。何が原因かわかりませんがいくつかプログラムの走らない周波数がありました。

▼周波数と電流の関係

CPU【MHz】電流【mA】
5017
10022
12025
13326
15029
175
20034
22537
24041
25041
275
300

▼グラフ▼

▲先ほどの結果をグラフにしただけです。今回のテストソースでは200MHz位からは速度効果は頭打ちする感じです。

 背反何があるのかよくわかってませんが手軽にオーバークロックできるので便利です。

コメント

  1. vabene より:

    速度比較の記事を拝読しました。
    速度比較結果についての記述についてなのですが、CPU[MHz]と時間[s]は単なる反比例の関係にあるようで、頭打ちしているようには見えません。
    CPU[MHz] vs 1/時間[s]のグラフを書いてみれば明らかになると思います。

    また、測定数値の転記ミスなのかも知れませんが、CPU 133MHzの時の時間、3.272sだけが特異です。

    • imo より:

      vabeneさん、サイト拝見下さり有難うございます。おっしゃる通り、概ね反比例(漸近線)になるかと思います。
      横軸を周期「S」ではなく周波数「Hz(1/s)」で、また縦軸を降順で表現したため紛らわしかったですね。
      また頭打ちという表現も悪かったですね。200MHz当たりからは傾きが寝てきてしまうため、周波数増分ほどの速度効果は期待できないとでも表現すればよかったですかね。補足有難うございました。

タイトルとURLをコピーしました