« REBL600FRで自宅iBeacon | トップページ | 自宅iBeaconの改良 »

各種mbedのベンチマークテスト

mbedも2.0でオープン化され、対応ハードがずいぶん増えました。Myコレクションも少々増えたので、各mbedのベンチマークテストを行いました。

ベンチマークに使ったソフトは、CoreMarkです。CoreMarkのサイトからソースをダウンロードできるのですが、mbedにポーティングされたものが、ClockControlとして公開されています。このポーティングからLPC1768 CPUクロック変更用のコードを取り去ってCoreMarkだけにして使っています。

LPC1768の場合、インポートしたままのmbedライブラリ版数(かなり古いです)で動くのですが、LPC1768以外のmbedはライブラリを最新化する必要があります。しかし、ライブラリを最新化するとコンパイル時に謎のエラーが大量に発生し、当初は、LPC1768以外でCoreMarkを動かすのをあきらめていました。

あるときCoreMark/core_porteme.cにmbed.hがincludeされていることに気がつき、mbed.hで定義されている各種クラスとCoreMarkのCコードがコンフリクトしている可能性に思い至りました。このパートで、mbed.h全体をincludeする必要はなく、時間を測定するためにclock()関数を使えるよう、time.hをincludeするだけでOKなはずです。この部分のコードを変えるとビンゴで、最新のmbedライブラリでもエラーが出なくなりました。

また、main.cppでは、以下のように、#include “CoreMark/CoreProteme.h”をextern “C”でくくっています(これもコンパイルエラー対策)。

#include "mbed.h"
extern "C" {
#include "CoreMark/core_portme.h"
}

int main() 
{
    printf("Run CoreMark\n");
    printf("CPU clock: %d MHz\n", SystemCoreClock/1000000);
    mainCoreMark();
    printf("CoreMark End \n\n");
}

修正1:SystemCoreClockを表示してCPU周波数を確認するコードを追加

時間測定は機種非依存ののclock()関数を使っているため、コードは全機種で共通です。CoreMarkのLicence条件では、CoreMarkサイト以外でcodeを配布してはいけないようなことが書いてあるので、私の全codeをpublishするのは控えます…

 

実行結果

実行結果(CoreMark値)は以下の通りで、上位から記載すると(mbedライブラリは執筆時点で最新の88版を使用。O3/Otimeの最適化。);

  機種名 コア CPUクロック(MHz) CoreMark値
1 FRDM-K64F Cortex-M4 120 286.204923
2 LPC4088 Cortex-M4 120 263.435195
3 NucreoF401RE Cortex-M4 84 220.167327
4 LPC1768 Cortex-M3 96 217.485863
5 LPCXpresso11U68 Cortex-M0+ 5048 74.316290
6 LPC1114FN28 Cortex-M0 5048 68.119891
7 HRM1017 Cortex-M0 16 30.175015

修正2:LPC1114FN28のCPUクロックを48MHzに修正
修正3:LPCXpresso11U68のCPUクロックを48MHzに修正

 

考察

  • 120MHz Cortex-M4同士の対決は、FRDM-K64Fの勝ち
  • 第二グループの100MHzクラスは、NucreoF401REが84MHzながら、96MHzのLPC1768を僅かに押さえて3位に。NucreoF401REはCortex-M4コアのため、M3コアのLPC1768を上回ったか
  • 第三グループの50MHzクラスは、Cortex-M0+を積むLPCXpresso11U68がLPC1114FN28を僅かに上回り5位。クロック周波数差見合いということか。

以前書いた、「LPCXpresso LPC1769でCoreMarkを動かす」では、mbed LPC1768のCoreMark値は、最適化をかけて188.394876でしたので、15%程度スコアが伸びています。これは、コンパイラのバージョンが上がり、最適化が進んだということでしょうか。<追記>@toyowataさんより、「mbedオンラインコンパイラのarmcc 4.1→5ではCortex-M系の最適化が向上しています。」とのコメントをいただきました。

mbedユーザーは常に最新版のコンパイラが使えるなんてステキです。

« REBL600FRで自宅iBeacon | トップページ | 自宅iBeaconの改良 »

mbed」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« REBL600FRで自宅iBeacon | トップページ | 自宅iBeaconの改良 »

2017年2月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        
無料ブログはココログ