常见泽1 发表于 2023-5-27 17:52

【STM32H5开发板】第八篇 CoreMark移植详细分享及跑分低问题解决

<div class='showpostmsg'><p><span style="font-size:16px;"><span style="font-family:宋体;">前言:</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">Coremark是一个综合性的基准测试程序,正如其名称所表示的, CoreMark测试是一个简单而</span></span><span style="font-size:16px;"><span style="font-family:宋体;">又复杂的基准测试程序,是专门用来测试处理器核心性能的。通过执行常用于应用程序中的</span></span><span style="font-size:16px;"><span style="font-family:宋体;">简单代码(基本的数据结构和算法)来测试cpu性能。结果是计算每秒钟主程序的迭代次数。</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">CoreMark测试是最大程度抛弃了程序对系统的依赖,不依赖于系统库函数,对编译器依赖也比较小,</span></span><span style="font-size:16px;"><span style="font-family:宋体;">因此对于不同平台(如大小尾数,高端或低端处理器),其结果有较好的参考价值。运行 CoreMark测试产生一个简单分数,使用户能够快速比较不同处理器的性能。</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">CoreMark测试是读/写操作、整数操作和状态机控制等操作混合而成,其代码较小并易于理解。和其他 EEMBC基准测试项目不同, coremark不是某一实际的应用测试,但其实际工作内容,都是一些嵌入式系统中常用的算法,包括矩阵操作、链表操作、状态机操作和CRC算法等。</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">不说废话,开始移植coremark</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">一下载coremark</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"><a href="http://www.eembc.org/coremark/index.php" style="color:#0563c1; text-decoration:underline">http://www.eembc.org/coremark/index.php</a></span></span></p>

<p ></p>

<p ><span style="font-family:宋体;"><span style="font-size:16px;">这个网站不仅可以下载源码,还能查看所有型号的跑分情况和跑分的环境</span></span></p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">二创建printf工程</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">之前一讲已经详细介绍了创建这个printf工程</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"><a href="https://bbs.eeworld.com.cn/thread-1243147-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1243147-1-1.html</a></span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">三工程中添加coremark代码</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">创建CoreMark Group,添加所有的C文件</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">添加头文件路径</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">四修改堆栈大小</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">五配置CoreMark</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">(1)修改portable_init函数</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">修改前</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">修改后</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">添加各种初始化函数</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">(2)把SystemClock_Config, MX_USART1_UART_Init 和 MX_GPIO_Init 函数拷贝到core_portme.c, 并添将加 printf 重定向的代码。</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">这个比较简单,都是之前Printf工程里的代码复制过来就可以了</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">(3) core_portme.c文件里添加声明和变量定义</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">添加头文件</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">(4)修改计时相关代码</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">1.添加ITERATIONS定义</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">#define ITERATIONS 12000///at least 10s</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">2.添加FLAGS的定义,编译器优化等级</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">#ifndef COMPILER_FLAGS</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">#define COMPILER_FLAGS &quot;-O3&quot; /* &quot;Please put compiler flags here (e.g. -o3)&quot; */</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">3.时间计时处理修改</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">修改前</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">修改后</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">编译下载</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">失败了不知道哪里出了问题</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">去COREMARK官网看了STM32H5跑分的要求</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">DCACHE、ICACHE都开了,分数依旧只有这么多</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">发现俩个问题</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">1预取指没有开</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">#define&nbsp; PREFETCH_ENABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1U&nbsp;&nbsp;&nbsp;&nbsp;</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">开了之后发现跑分依旧没有变化</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">2优化器重新配置一下,使用LTO加&mdash;Omax参数</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">#ifndef COMPILER_FLAGS</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">#define COMPILER_FLAGS &quot;-Omax&quot; /* &quot;Please put compiler flags here (e.g. -o3)&quot; */</span></span></p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">配置完成,下载测试</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;"> &nbsp;</span></span></p>

<p >&nbsp;</p>

<p ><span style="font-size:16px;"><span style="font-family:宋体;">985分,可以基本接近官方的1000分了,移植完毕</span></span></p>

<p ></p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

Jacktang 发表于 2023-5-29 08:44

<p>CoreMark移植后跑分低,最后优化器重新配置一下,使用LTO加&mdash;Omax参数,问题解决</p>

<p>谢谢分享啊</p>

常见泽1 发表于 2023-5-29 18:53

Jacktang 发表于 2023-5-29 08:44
CoreMark移植后跑分低,最后优化器重新配置一下,使用LTO加&mdash;Omax参数,问题解决

谢谢分享啊

<p>目前看来应该是这样&nbsp; 解决了COREMARK跑分低的问题</p>

yangjiaxu 发表于 2023-7-29 09:09

用keil的吗?你可以用keil的6.16的编译链版本试试,也许分数能再高点
页: [1]
查看完整版本: 【STM32H5开发板】第八篇 CoreMark移植详细分享及跑分低问题解决