マイコンの性能調査 High/Low(OverClock)

コンピュータ、組み込み

CPUの性能ベンチマークとして、GPIOのHigh/Lowをどのくらいの速さで実行できるかを調査しました。
CPUの種類によってはCPUSpeedが変更できるものもあり、変更することでどれだけの変化があるのかを実験しました。

注意:結果は参考です。CPUの絶対的性能を示すものではありません。

調べること

1.実行速度

HighとLowの信号の変化を1サイクルとして、どのくらいの時間で実行できるか(1秒間に何回繰り返すことができるかはHzで表現)を計測します。

Hz = 1(秒) / HIGHとLOWの時間(秒)

所持しているマイコンのうち、CPUSpeedの高速方向に変更できるもの
・Raspberry Pi Pico (RP2040の代表)
・Teensy 4.0
この2種類について実施します。

2.消費電流

CPUSpeedを変更することで変化する消費電流の計測をします。
計測は、Keweisi の KWS-MX18L を使用します。

準備

測り方

測定はOWON製 オシロスコープ HDS272を使用します。
ブレッドボードにピンヘッダを挿します。
図は、RP2040 pico のGPIO 0を使用した例です。
GPIO 0(1番ピン)をプローブのチップフック、グランドは3番ピンをつまみます。

ライブラリ

Raspberry Pi Pico/RP2040 > Raspberry Pi Pico (Ver 2.5.2)
Generic RP2040 を使用するとOverClock(150MHz以上)ではすべて動作しませんでした。

結果

Raspberry Pi Pico

CPUSpeedの 175MHz と 275MHz, 300MHzに設定するとRaspberry Pi Picoが動作しなくなりました。
BOOTリセットで別のCPUSpeedに変更して続きを行っています。

考察

実行速度

設定速度に比例した実行速度の結果が得られました。

消費電流

設定CPUSpeedに比例した消費電流の結果が得られました。
完全な直線ではありませんが、計測器側の分解能もあると思うので測定誤差の範疇と考えます。

速度があまり問題にならない用途であれば、CPUSpeed 200MHzに比べ50MHzでは倍程度電池持ちがよいと考えることができそうです。

Teensy 4.0

設定できるCPUSpeedですべて動作しました。
CPUの発熱をモニタしたいので、UT320Dを購入して測定をしています。

こちらは1008MHzで実行したGPIOのLOW/HIGHの信号です。
ハンディオシロスコープHDS272でモニタしていますが何とか読み取れています。
信号の立ち上がりと、立下りに傾きが見えるほど拡大しているので、正弦波がつぶれたような波形になっています。

考察

実行速度

設定速度に比例した実行速度の結果が得られました。

CPU温度

設定CPUSpeedに依る発熱を調査しました。
写真を撮り忘れましたが、CPUの中央に熱電対をテープで貼り付けています。
放熱の具合もあると思いますが、±0.3℃程度動いているので中央値を読み取っています。

CPUSpeedが速いほど温度は高くなりますが、900MHzを超えたあたりから緩やかな傾向が見えます。
環境温度が低いので放熱の影響かはわかりませんが、OverClockでは放熱対策の必要がありそうです。

Room Temperature = 19degC

消費電流

先に調査したRP2040(Raspberry Pi Pico)の結果と重ね合わせています。
青ドットがTeensy 4.0、赤ドットがRP2040です。

概ねCPUSpeedに比例していますが、900MHzあたりから消費が大きくなっているようにも見えます。
同Clock帯での消費電力はRP2040のほうが省エネのようです。

他CPUとの比較

おまけとして、ほかのCPUベンチスコアと比較します。
ここに掲載されているRP2040 pico は以前計測した時のもので、CPUSpeedは125MHzです。
今回の結果と違いますが、計測誤差として考えます。

Raspberry Pi PicoはOverClockを設定することで周波数に比例した速度上昇の順位変動がありました。
Teensy4.0はもともと桁違いでしたが、さらに大きく突き放す結果になりました。

スケッチ

スケッチの説明

loop()関数のオーバーヘッド(関数呼び出しにかかる時間)をなくすために、while文で永久ループにして、OFFとONを繰り返します。

基板によってピン番号が違うので、マクロ定義により適当なピン番号で調査をしています。

スケッチ

#define PIN 0


void setup()
{
  pinMode(PIN, OUTPUT);
}

void loop()
{
  while(1)
  {
    digitalWrite(PIN, HIGH);
    digitalWrite(PIN, LOW);
  }
}

関連リンク

履歴

履歴の更新は、評価基板の追加やデータの修正時に行います。
結果や解釈に影響のないサイト内のメンテナンスや修正は省略します。

  • 2022/10/3 公開

コメント

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