常见泽1 发表于 2024-2-7 12:07

【ST NUCLEO-U5A5ZJ-Q开发板】第3帖 CoreMark跑分测试完成

<div class='showpostmsg'><table cellpadding="0" cellspacing="0">
        <tbody>
                <tr>
                        <td id="postmessage_3234247">
                        <h1 title="【STM32H5开发板】第八篇CoreMark移植详细分享及跑分低问题解决">&nbsp;</h1>

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

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

                        <p>&nbsp;</p>

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

                        <p>&nbsp;</p>

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

                        <p>&nbsp;</p>

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

                        <p><span style="font-family:宋体;"><span style="font-size:16px;"><a href="http://www.eembc.org/coremark/index.php" target="_blank">http://www.eembc.org/coremark/index.php</a></span></span></p>

                        <p>&nbsp;</p>

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

                        <p><span style="font-family:宋体;"><span style="font-size:16px;">类似之前的printf工程</span></span></p>

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

                        <div style="text-align: left;"><span style="font-family:宋体;"><span style="font-size:16px;"></span></span></div>

                        <div style="text-align: left;">&nbsp;</div>

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

                        <div style="text-align: left;"><span style="font-family:宋体;"><span style="font-size:16px;"> &nbsp;</span></span></div>

                        <div style="text-align: left;"><span style="font-family:宋体;"><span style="font-size:16px;">增加堆栈大小</span></span></div>

                        <div style="text-align: left;">
                        <div style="text-align: left;"><span style="font-family:宋体;"><span style="font-size:16px;"></span></span></div>

                        <div style="text-align: left;">&nbsp;</div>

                        <div style="text-align: left;">
                        <p><strong><span style="font-family:宋体;"><span style="font-size:16px;">三 配置CoreMark</span></span></strong></p>

                        <ol>
                                <li ><span style="font-family:宋体;"><span style="font-size:16px;">修改portable_init函数</span></span></li>
                        </ol>

                        <p >&nbsp;</p>

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

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

                        <p >&nbsp;</p>

                        <p >&nbsp;</p>

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

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">把串口printf工程里Main函数里的初始化函数都复制过来</span></span></p>

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

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

                        <p>&nbsp;</p>

                        <p >&nbsp;</p>

                        <p >&nbsp;</p>

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

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

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

                        <p >&nbsp;</p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">优化等级COMPILER_FLAGS</span></span></p>

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

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">先选个O3试试</span></span></p>

                        <p >&nbsp;</p>

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

                        <p >&nbsp;</p>

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

                        <p >&nbsp;</p>

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

                        <p >&nbsp;</p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">因为我的COREMARK GITHUB打不开没法现在源码</span></span></p>

                        <p >&nbsp;</p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">网上随便找了个103的工程COREMARK文件复制过来的</span></span></p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">源码肯定被改过了</span></span></p>

                        <p >&nbsp;</p>

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

                        <p >&nbsp;</p>

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

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

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

                        <p >&nbsp;</p>

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

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">试了改成-Ofast<br />
                        也只有530分</span></span></p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">Misc Controls:这一栏则是对上面选项卡的补充,如果上面的选项卡没有的选项,则可以增加命令</span></span></p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">增加LTO &ndash;Omax</span></span></p>

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

                        <p >&nbsp;</p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">跑分634分 和官网的650分左右的数据差不多了</span></span></p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">差不多4 Coremark/MHz</span></span></p>

                        <p >&nbsp;</p>

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

                        <p >&nbsp;</p>

                        <p >&nbsp;</p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">不开ICACHE</span></span></p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">评分430</span></span></p>

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

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">ICACHE是必须得开的</span></span></p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">ICACHE是指指令缓存(Instruction Cache)。ICACHE是一个硬件缓存单元,用于提高处理器执行指令的效率。具体来说,当处理器需要执行指令时,它首先检查指令是否已经在ICACHE中缓存。如果指令已经在ICACHE中缓存,则处理器可以直接从ICACHE中读取指令,从而避免了从闪存或其他存储器中读取指令的时间延迟。&nbsp;</span></span></p>

                        <p >&nbsp;</p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">官方手册里也是有介绍的</span></span></p>

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

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">ICACHE 2-ways和1-way差距不大&nbsp; 开一个就行</span></span></p>

                        <p >&nbsp;</p>

                        <p >&nbsp;</p>

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">不开DCACHE</span></span></p>

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

                        <p ><span style="font-family:宋体;"><span style="font-size:16px;">一点不影响评分</span></span></p>

                        <p >&nbsp;</p>

                        <p ><span style="color:#e74c3c;"><strong><span style="font-size:18px;">总结</span></strong></span></p>

                        <p ><span style="color:#e74c3c;"><strong><span style="font-size:18px;">(1)必须开LTO -OMAX 否则评分会少很多</span></strong></span></p>

                        <p ><span style="color:#e74c3c;"><strong><span style="font-size:18px;">(2)必须开ICACHE&nbsp;</span></strong></span></p>

                        <p ><span style="color:#e74c3c;"><strong><span style="font-size:18px;">(3)DCACHE不影响评分</span></strong></span></p>
                        </div>

                        <p>&nbsp;</p>
                        </div>

                        <p>&nbsp;</p>
                        </td>
                </tr>
        </tbody>
</table>
</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>
页: [1]
查看完整版本: 【ST NUCLEO-U5A5ZJ-Q开发板】第3帖 CoreMark跑分测试完成