TB-RX65N/TB-RX231/TB-RX130+CC-RX/GNURXでCoreMark®ベンチマークを動かせるようにしてみようと思います

こんにちは。NoMaYです。#2連投の1つ目です。

ルネサスさんのアプリケーションノートに以下の『RX100シリーズ RX100上でCoreMarkを実行する方法』というRSK-RX111+IAR EW統合開発環境でEEMBCのCoreMarkベンチマークを実行するものがあったのですが、これをRX-TB 3種類+CC-RX/GNURXへ移植してみようと思います。まず、手始めにTB-RX130+CC-RX+CS+で試してみました。(後日、他のTBボードやGNURXでも動かしてみようと思います。さらに、e2 studioでも動かせるようにしてみようと思います。なお、その時は、GitHub上でEEMBCが公開しているCoreMarkベンチマークの以下のリポジトリのソースに差し替え、かつ、RXスマートコンフィグレータが生成したソースを出来るだけ使うような作りに変更しよう、と思っています。)

プロジェクトのファイル一式
tb_rx130_coremark_ccrx_c_csplus_20191026.zip    384KB

アプリケーションノート: RX100シリーズ RX100上でCoreMarkを実行する方法
www.renesas.com/jp/ja/search?keywords=CoreMark&f[0]=content_type:document

ドキュメント
www.renesas.com/jp/ja/document/apn/rx100-series-running-coremark-rx100

サンプルプログラム
www.renesas.com/jp/ja/document/scd/rx100-series-running-coremark-rx100

GitHub上でEEMBCが公開しているCoreMarkベンチマークのソース
github.com/eembc/coremark


TB-RX130+CC-RX V2.03で試した結果と試した時のCC-RXの最適化オプションは、以下の画面コピーの通りです。得られたCoreMark値が91.5、動作周波数が32MHz、よって、CoreMark/MHzは2.86、となりました。(ちなみに、CoreMark値やCoreMark/MHzは、そもそもそういうものなのですが、最適化オプションによりかなり値が変わります。) なお、以下の画面コピーの通り、RSK-RX111+EWRX V2.41.1でのCoreMark/MHzは3.073のようでした。また、ルネサスさんの製品ページでのRX130(やRX111)のCoreMark/MHzは3.08です。




  • こんにちは。NoMaYです。

    今回、e2 studioの最適化アシスタントという機能を試してみました。CC-RXではサイズ優先とスピード優先の両方に関して、GNURXではサイズ優先に関して、それぞれ「やや強め」「強い」「とても強い」の3レベルでの最適化に関する情報をe2 studioが収集してくれるという機能です。それで、あくまで今回のCoreMarkベンチマークでの結果論ということになってしまうのかな、と思いますが、あまり有益な情報は得られなかったな、という感じではありました。(今回のプログラムは、そういうプログラムだったということなのかな、と思いました。) ですが、この際なので、後日、もっと素朴に「弱い」「普通」「強い」の3レベルに設定を改変してやり直してみようかな、と思います。

    得られた情報

    CC-RXの場合

    (1) サイズ優先最適化に関して「やや強め」「強い」「とても強い」で大きなサイズの違いは無い
    (2) スピード優先最適化に関して「やや強め」は明らかにCoreMark値が小さいが「強い」「とても強い」では大きな違いは無い
    (3) .ABSファイル→.Xファイル変換のrenesas_cc_converter.exeの実行時間が「やや強め」「とても強い」で異様に長い

    GNURXの場合

    (1) サイズ優先最適化に関して「やや強め」「強い」の2つのMOTファイルは同一だった(今回のプログラムに特有?)
    (2) サイズ優先最適化に関して「とても強い」は明らかにサイズが小さいが暴走してしまった

    最適化アシスタントの結果 (私のPCのCPUが古過ぎてコンパイル+リンクの時間はもともと遅いです)

    CC-RX V2.03+TB-RX65N (RX65N 120MHz)の場合

      サイズ優先最適化 スピード優先最適化
      やや強め 強い   とても強い やや強め 強い   とても強い
    CoreMark値 244.50 245.78 245.42 413.18 470.64 465.70
    ROMサイズ(最適化アシスタントの表示) 16.7KB 17.0KB 16.5KB 24.3KB 27.9KB 27.6KB
    コンパイル+リンクの時間 4分 4分 4分 5分 14分 16分
    renesas_cc_converter.exeの実行時間 1時間35分 3分 1時間35分 2時間06分 5分 2時間17分

    GNURX 2019q4(8.3.0.201904)+TB-RX65N (RX65N 120MHz)の場合

      サイズ優先最適化
      やや強め 強い   とても強い
    CoreMark値 386.70 386.70 暴走
    ROMサイズ(最適化アシスタントの表示) 24.8KB 24.8KB 18.3KB
    コンパイル+リンクの時間 6分 6分 6分
    renesas_cc_converter.exeの実行時間

    CC-RX V2.03+TB-RX65N (RX65N 120MHz)の場合の画面コピー(一部分)


    GNURX 2019q4(8.3.0.201904)+TB-RX65N (RX65N 120MHz)の場合の画面コピー(一部分)


    以下、最適化アシスタントが作成する構成に適用される最適化オプションの一覧(ヘルプの画面コピー)です。(なお、最適化アシスタントでは「やや強め」「強い」「とても強い」の順に画面表示されますが、ヘルプでは逆の「とても強い」「強い」「やや強め」の順に説明が記述されていますので注意して下さい。)

    CC-RXのサイズ優先の構成に適用される最適化オプションの一覧


    CC-RXのスピード優先の構成に適用される最適化オプションの一覧


    GNURXのサイズ優先の構成に適用される最適化オプションの一覧


    以下、最適化アシスタントの結果の画面コピーの全体です。(なお、ビルドオプションの表示は右端が切れて全て表示しきれていませんでした。)

    CC-RX V2.03+TB-RX65N (RX65N 120MHz)の場合




    GNURX 2019q4(8.3.0.201904)+TB-RX65N (RX65N 120MHz)の場合



     

  • こんにちは。NoMaYです。

    別スレッドで調べ物をしていて、たまたま目に入ったのですが、Renesasさんの、こんなRH850(32ビット汎用レジスタ32本(V850のレジスタ構成を踏襲していると思うので内1本は常に値が0のレジスタの筈))のCoreMark/MHz/core値は幾つなんだろうなぁ、とか思ってしまいました、、、(ちなみに、ロックステップ対応のコアが4コアというのは、回路的にはコアが8コア分入っているのかな?それとも、ロックステップ動作時にはペアになれるコアが4コアで、ペアとして使ったらユーザ見えは2コアなのかな?マニュアルが一般ユーザ非公開ですので分からないですけど、、、)

    RH850/U2A16
    www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rh850/rh850u2x/rh850u2a16.html

    RH850/U2A16は、400MHzのCPUを最大4コア(ロックステップ対応)搭載しています。各CPUには、ハードウェアの仮想化支援機構を搭載。


    RH850/U2A16マイクロコントローラには、16MBの内蔵フラッシュROM、及び3.6MBのSRAMが搭載されており、将来の機能拡張を柔軟に行えます。


    RH850/U2A16には、サイバー攻撃に対する保護能力強化を目指し、Evita Light からEvita Full(注)までをサポートするセキュリティー機能が組み込まれています。

  • > コンパイル最適化オプション -O3 -flto -O3

    ところでこれ RXv2 コア搭載の製品にそれ用のオプション付けてないんですか?
  • こんにちは。NoMaYです。

    > ところでこれ RXv2 コア搭載の製品にそれ用のオプション付けてないんですか?

    GNURXでのRXv2コアでのアーキテクチャ系のオプションは以下になっています。(e2 studioのGUIから設定しているので、もしかしたら-mcpuと-misaの2つでは重複設定なのかも知れませんが、、、)

    RX65Nの場合: -mcpu=rx64m -misa=v2 -mlittle-endian-data
    RX231の場合: -mcpu=rx230 -misa=v2 -mlittle-endian-data

  • ご回答ありがとうございます。
    -mcpu=XXX で命令セットとプリフェッチキューのサイズ、FPUの有無が最適な設定にされ、RXの全製品を網羅してないので場合によっては別の製品を指定して違いを他のオプションで補わなければいけないんだった気がしますが、この場合 -misa-v2 は不要なんではないかと思います。
    GNURXはこの辺の指定が全く洗練されてないのが宜しくないですね。
  • こんにちは。NoMaYです。

    以前のCoreMarkベンチマークのソースを見直し、サンプルプログラム置き場に置き直し、GitHubにも置きました。また、RX72N+CC-RX/GNURX/ICCRXでCoreMark値とCoreMark/MHz値を計測しました。[追記] 2020/12/03 計測に使用したICCRXをV4.14.1→V4.20.1と変更して計測結果を差し替えました。

    japan.renesasrulz.com/cafe_rene/m/sample_program/437

    github.com/NoMaY-jp/CoreMark-Renesas-RX/tree/cafe_rene/barebones_renesas_rx

    計測結果 (小数点以下3桁目以降は切り捨てです)

      CC-RX V3.02 ICCRX V4.20.1 GNURX 2020q4
    (8.3.0.202004)
    公称値

    コンパイル最適化オプション

    -optimize=max
    -speed
    -goptimize
    -Ohs
    --no_size_constraints
    -O3  
    リンク最適化オプション -optimize=speed  
      CoreMark CoreMark
    /MHz
    CoreMark CoreMark
    /MHz
    CoreMark CoreMark
    /MHz
    CoreMark
    /MHz
    RX72N Envision Kit
    (RX72N 240MHz)
    1250.42 5.21 1290.92 5.37 862.65 3.59 5.82

    計測時の画面コピー

    CC-RX


    ICCRX


    GNURX

     

  • こんにちは。NoMaYです。

    先日は見直したCoreMarkベンチマークのソースを使用して計測したRX72N+CC-RX/ICCRX/GNURXの結果しか書きませんでしたので、今回はRX130/RX231/RX65N+CC-RX/ICCRX/GNURXの結果も書き加えました。(今回使用したCC-RX V3.02では最適化能力が以前に使用したCC-RX V2.03より向上しているせいだと思いますが、公称値がひょいっと出てますね、、、『それでいいのかコアマーク?』という感もありますが、そういうもの(コンパイラの最適化能力依存のCPUコア性能/CPUコア出来具合の指標)ですね、、、) [追記] 2020/12/03 計測に使用したICCRXをV4.14.1→V4.20.1と変更して計測結果を差し替えました。

    計測結果 (小数点以下3桁目以降は切り捨てです)

      CC-RX V3.02 ICCRX V4.20.1 GNURX 2020q4
    (8.3.0.202004)
    公称値

    コンパイル最適化オプション

    -optimize=max
    -speed
    -goptimize
    -Ohs
    --no_size_constraints
    -O3  
    リンク最適化オプション -optimize=speed  
      CoreMark CoreMark
    /MHz
    CoreMark CoreMark
    /MHz
    CoreMark CoreMark
    /MHz
    CoreMark
    /MHz
    RX72N Envision Kit
    (RX72N 240MHz)
    1250.42 5.21 1290.92 5.37 862.65 3.59 5.82
    TB-RX130
    (RX130 32MHz)

    100.20

    3.13 100.78 3.14 73.07 2.28 3.09
    TB-RX231
    (RX231 54MHz)
    229.31 4.24 230.41 4.26 165.38 3.06 4.16
    TB-RX65N
    (RX65N 120MHz)
    524.43 4.37 514.42 4.28 386.70 3.22 4.34

     

  • こんにちは。NoMaYです。

    1つ前と2つ前の投稿のICCRXでの計測結果をV4.20.1のものへと差し替えました。(ただ、若干の向上傾向はあるかな、といった程度で、殆ど同じでした。)

  • こんにちは。NoMaYです。

    ルネサスさんのブログに以下が投稿されてました。(投稿されたのは、しばらく前のことになります、ね。) なお、RXv2 ですらですよ。

    光陰矢のごとし、RXv2コアのCoremark/MHzが5.0を超えた!その理由(わけ)は?
    Sugako Otani
    RX CPU Chief Architect
    www.renesas.com/jp/ja/blogs/time-flies-flash-light-renesas-rxv2-core-has-exceeded-coremark-50-how-does-it-achieve-result

    以下、EEMBCのサイトのRXマイコンのスコアの画面コピーです。RX65Nとか更新されてないですね、、、


     

  • こんにちは。NoMaYです。

    私は今まで、GNURXでデバッグ最適化(-Ogオプション)を指定すれば、充分なデバッグ性とそこそこの最適化が両立しているのだと思い込んでましたが、単に私の思い込みだったようです。-O0オプション(最適化無し)でCoreMarkベンチマークを計り直した方が良いかも知れないと思い始めました。(普段はズボラして -O3 とか -Os とか普段の最適化のままデバッグしていたので、そういうものだったとは、今まで気付きませんでした。)

    以下、GNURX+e2 studioの画面コピーです。

    デバッグ最適化 -Og では思い込んでいたほどには充分に変数内容が表示されるわけではなかった


    最適化無し -O0 であれば思い込んでいたような充分な変数内容が表示されるのであった