こんにちは。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-rx100GitHub上でEEMBCが公開しているCoreMarkベンチマークのソースgithub.com/eembc/coremarkTB-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です。試しにFreeRTOS環境下でCoreMarkベンチマークを実行してみました。(FreeRTOS環境下で、というのは、FreeRTOSのTick割り込み(1ms毎)が発生している状況であり、他にも実行すべきタスクがあればそれらも実行されている状況である、ということです。) 結果としては、以下の通り、他に同一優先度タスク(や高優先度タスク)が無ければ少々低下した程度であり、もちろん、当然ながら、他に同一優先度タスクが1つあれば半分に低下しただけ、でした。なお、GNURXで-fltoを指定していると動作しなくなってしまいましたので、-fltoは外しました。(FreeRTOSのReadmeにGNUARMですが-fltoに関連した記述があったので、FreeRTOSでは何かがあるのかも知れません。詳細は調べていません。)結果その1 : 他に同一優先度タスク(や高優先度タスク)が無ければ少々低下
結果その2: 他に同一優先度タスクが1つあれば半分に低下(当然ながら)
プロジェクトのファイル一式 (CC-RX V2.03/GNURX 2019q2(4.8.4.201902)でビルド、zipファイルをe2 studioに直接インポート可)tb_rx65n_scfg_freertos_coremark_ccrx_c_csplus_20191121.zip 734KBtb_rx65n_scfg_freertos_coremark_gnurx_c_e2v760_20191121.zip 708KB含まれるプロジェクト (*1,*2,*3, *4, *5)tb_rx65n_scfg_freertos_ccrx_c/{tb_rx65n_ccrx_c.mtpj, .project}tb_rx65n_scfg_freertos_gnurx_c/.project*1,*2,*3:前回投稿した時と同じです。*4:RXスマートコンフィグレータV2.3.0(2019/11リリース)が生成したソースを使用しています。*5:e2 studioネイティブのFreeRTOSプロジェクトでは無く、通常の(非FreeRTOS)プロジェクトにFreeRTOSのソースを追加したものです。その為、RXスマートコンフィグレータ上で、FreeRTOS KernelコンポーネントもFreeRTOS Objectコンポーネントも扱うことは出来ません。(e2 studioネイティブのFreeRTOSプロジェクトは、GNURXで使えなかったり、CS+で使えなかったり、CGコンポーネントが使えなかったり、と私には、FreeRTOS KernelコンポーネントやFreeRTOS Objectコンポーネントが扱えないこと以上に不便なもの、でしたので。)結果その1の画面コピー : 他に同一優先度タスク(や高優先度タスク)が無ければ少々低下結果その2の画面コピー: 他に同一優先度タスクが1つあれば半分に低下(当然ながら)今回、FreeRTOS環境下でCoreMarkベンチマークを実行させたのですが、main()がCoreMarkソースの改変不可ソースに含まれていた関係上、以下のように、main_task()からmain()を呼び出す(赤文字箇所)ことにしました。その為、src/coremarkフォルダ以下のソースは前回投稿したソースから変更無しです。(他方、src/core_config.hは、GNURX側で、最適化オプションの変更によるFLAGS_STRの変更と計測可能時間範囲の事情によるITERATIONSの変更が有ります。)src/tb_rx65n_main.c
void task_CoreMark(void *pvParameters){ INTERNAL_NOT_USED(pvParameters); main(); /* The main() is in the src/coremark/core_main.c */ for(;;);}
また、今回、同一優先度タスク(青文字箇所)をもう1つ実行させることが出来るように、ソース中に以下の#if~#endif(赤文字箇所)を入れてあります。ここを0→1にすると、同一優先度タスクがもう1つ実行されるようになります。src/frtos_startup/freertos_object_init.c
void Kernel_Object_init (void){ /************** task creation ****************************/#if 0 ret = xTaskCreate(main_task, "MAIN_TASK", 512, NULL, 1, NULL); if (pdPASS != ret) { while (1) { /* Failed! Task can not be created. */ } }#endif ret = xTaskCreate(task_CoreMark, "TASK_CM", 0x1000, NULL, 1, NULL); if (pdPASS != ret) { while (1) { /* Failed! Task can not be created. */ } } ...略...}
src/tb_rx65n_main.c
void main_task(void *pvParameters){ INTERNAL_NOT_USED(pvParameters); for(;;);}
ちなみに、FreeRTOSのReadmeにGNUARMですが-fltoに関連した記述があった、というのは以下になります。FreeRTOS Real Time Kernel (RTOS)sourceforge.net/projects/freertos/files/
「Changes between FreeRTOS V10.2.1 and FreeRTOS V10.2.0 released May 13 2019:。。。略。。。+ Introduced the portMEMORY_BARRIER macro to prevent instruction re-ordering when GCC link time optimisation is used.。。。略。。。」