Quantcast
Channel: Todotaniのはやり物Log
Viewing all articles
Browse latest Browse all 48

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

$
0
0

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値
1FRDM-K64FCortex-M4120286.204923
2LPC4088Cortex-M4120263.435195
3NucreoF401RECortex-M484220.167327
4LPC1768Cortex-M396217.485863
5LPCXpresso11U68Cortex-M0+504874.316290
6LPC1114FN28Cortex-M0504868.119891
7HRM1017Cortex-M01630.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ユーザーは常に最新版のコンパイラが使えるなんてステキです。


Viewing all articles
Browse latest Browse all 48

Trending Articles