我们从2011年坚守至今,只想做存粹的技术论坛,记录你的技术足迹,有空就回来看看。  由于网站在外面,点击附件后可能要20秒才弹出下载,请耐心等待,勿重复点击

 找回密码
 立即注册
搜索
查看: 1131|回复: 13

[技术讨论] 如何查找 Cortex M7 的指令执行周期

[复制链接]

该用户从未签到

77

主题

359

回帖

0

积分

二级逆天

积分
0

社区居民终身成就奖金点子奖

QQ
发表于 2021-6-26 02:30:28 | 显示全部楼层 |阅读模式

CPI 其实就是个统计的活……你跑一段Benchmark(找点知名的,比如CoreMark或者Dhrystone之类),然后用处理器自带的PMU(Performance Monitor Unit)计算下某段函数实际跑了多少指令周期,然后除以这段函数有多少条指令。这就计算出来了。原理很简单,操作起来可能有点费劲。
而且,一个程序不同位置的CPI是变化的,甚至同一段程序的CPI也有可能是变化的,这里面干扰因素主要来源于存储器的延时,prefetch,cache policy等等。

是否可以dual issue的判断是流水线硬件来完成的,对compiler是透明的。当然,ARM Compiler在明确知道目标处理器是Cortex-M7的情况下,甚至会交换某些指令的顺序(保证逻辑等效的情况下),以最大限度的保证更多的指令可以被dual-issue。

最后我要说一下,依赖compiler是不靠谱的……要想最大程度的利用dual-issue,还是要程序员写代码的时候有所注意。简单举个例子,比如C语言中全局变量或者寄存器,往往都有volatile修饰。这保证了逻辑的正确性,却阻断了compiler优化的可能。另外,volatile的使用,使得函数内,每一个对变量的访问都要实际进行Load/Store操作,这就导致大量的Load/Store操作密集存在于同一段代码中,这些密集存在的读写操作会导致大量的Structural Hazard,从而妨害dual issue的进行。另外对volatile变量的数值运算,也会由于运算指令和Load/Store指令存在依赖关系而无法dual issue。所以,针对这种情况我们要在函数需要优化的地方,通过局部变量人为的进行“读、改、写”操作——也就是先用局部变量保存volatile变量的值,然后后续运算全部针对这个局部变量,最后再把计算结果保存回去——这是一个例子。具体软件优化方法,取决于编译器、你掌握的目标处理器的信息以及C语言的各类技巧。内容太大,这里就不方便展开了。
回复

使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    49

    主题

    1万

    回帖

    7万

    积分

    三级逆天

    积分
    70185

    终身成就奖特殊贡献奖原创先锋奖社区居民忠实会员社区劳模最爱沙发社区明星原创达人优秀斑竹奖宣传大使奖

    QQ
    发表于 2021-6-26 06:03:34 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    3

    主题

    598

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖

    QQ
    发表于 2021-6-26 08:37:49 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:59
  • 签到天数: 2 天

    [LV.1]初来乍到

    51

    主题

    3496

    回帖

    2663

    积分

    二级逆天

    积分
    2663

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2021-6-26 09:09:34 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    10

    主题

    3481

    回帖

    11

    积分

    二级逆天

    积分
    11

    社区居民终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2021-6-26 09:56:44 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-6-14 16:03
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    0

    主题

    1万

    回帖

    7618

    积分

    二级逆天

    积分
    7618

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2021-6-27 16:21:32 | 显示全部楼层
    谢谢分享!!!!!
    回复

    使用道具 举报

    该用户从未签到

    77

    主题

    359

    回帖

    0

    积分

    二级逆天

    积分
    0

    社区居民终身成就奖金点子奖

    QQ
     楼主| 发表于 2021-7-4 03:33:41 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    77

    主题

    359

    回帖

    0

    积分

    二级逆天

    积分
    0

    社区居民终身成就奖金点子奖

    QQ
     楼主| 发表于 2021-7-13 04:21:40 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情

    2024-6-4 16:56
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    2718

    回帖

    2795

    积分

    1元学习Allegro(1期)

    积分
    2795

    终身成就奖特殊贡献奖

    发表于 2021-7-23 08:53:57 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情

    2024-6-4 16:56
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    2718

    回帖

    2795

    积分

    1元学习Allegro(1期)

    积分
    2795

    终身成就奖特殊贡献奖

    发表于 2021-7-29 08:21:13 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    平平安安
    TOP
    快速回复 返回顶部 返回列表