Coremark的移植官方已经有文档了, 而且论坛已经有不少人已经发贴了. 这里只是简单说说移植要注意的几点,并且把我移植的工程传上来以供参考.
本人使用的Keil MDK 5.23, ARMCC 5.06 Build 422, 得分为880左右,试过了很多种优化选项, 还是没有能够达到官方的1000多分, 用IAR的话, 本人电脑的版本太低, 不想去搞**什么的了.
这也算个参考吧.
先看我的得分:
CoreMark For STM32F722 Nucleo Board [url=home.php?mod=space&uid=72445]@[/url] 216 MHz, 18:30:40
2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 12516
Total time (secs): 12.516000
Iterations/Sec : 878.875040
Iterations : 11000
Compiler version : ARMCC 5060422
Compiler flags : --c99 -c --cpu Cortex-M7.fp.sp -D__MICROLIB -g -O3 -Otime --apcs=interwork --split_sections
Memory location : STACK
seedcrc : 0xe9f5
[0]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[0]crcfinal : 0x33ff
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 878.875040 / ARMCC 5060422 --c99 -c --cpu Cortex-M7.fp.sp -D__MICROLIB -g -O3 -Otime --apcs=interwork --split_sections / STACK
End of Bechmark.
这是官方声称的MDK516得分,但是没有公布编译选项,让人有点摸不着头脑:
如果ST官方没有大忽攸的话, 那么MDK5应该也能达到1082左右分数才对, 可惜本人没有试验成功, 论坛上也没有见过人用MDK到这个分数, 成为一个千古悬案.
说说移植要注意的几点:
1.生成的main函数不用了, 要么改名要么直接删除main.c
2.原来的初始化函数移动到
void portable_init(core_portable *p, int *argc, char *argv[])
中
3.最后免得跑飞,这个函数也改改:
void portable_fini(core_portable *p)
{
p->portable_id=0;
ee_printf("End of Bechmark.\n");
while(1)
{
__NOP();
}
}
4. AXI与ITCM接口性能差别不大
5. 如果AXI,Cache对性能影响较大,要开启,很多人跑500多分很可能是这原因
SCB_EnableICache();
SCB_EnableDCache();
6.如果是CubeMX生成的工程, 时间宏改成这样即可:
#define GETMYTIME(_t) (*_t=HAL_GetTick())
除此之外没有什么可改的了, 附件是我的工程以供参考.
f722_coremark_mdk5_880.zip
(1.42 MB)
|