首页»版块 MagicOS MagicOS 【系统优化建议】利用预扫描预填充微指令缓存,改善线程 ...

【系统优化建议】利用预扫描预填充微指令缓存,改善线程初次执行性能

[复制帖子标题和链接]

2661

数码爱好者  LV7  发表于 前天 15:31 江苏 来自:荣耀Magic7 Pro
一、现存痛点

现在手机CPU自带指令缓存机制:一段代码只有运行过一次之后,才会把译码结果保存下来,第二次运行才能复用,不用重新翻译指令。

但很多线程、循环代码第一次执行的时候没有缓存可用,CPU要完整做一遍译码工作,会带来额外性能开销与功耗。尤其是批量处理数据的任务,里面存在不少重复的指令片段,第一次跑的时候没法享受缓存带来的加速。

二、优化构想

在线程准备要开始运行的阶段,系统做轻量的指令预扫描:

1. 只针对循环、批量运算这类特征明显的线程,不去全部线程扫描,控制额外开销。

2. 快速识别里面重复的完整指令片段。

3. 将识别出来的重复片段,提前预填充进CPU微指令缓存。

不是创造全新硬件,是把芯片已经具备的缓存能力,由“跑完再缓存”变成提前预加载,第一次执行就可以复用缓存,减少第一次译码的负担。

遇到if分支跳转、函数调用打断代码流的时候,立刻停止预扫描,避免无效运算。同时增加开关判断,如果一段代码重复指令很少,就直接关闭该功能,防止预分析本身反而拖慢速度。

三、预期效果

1. 循环、批量处理类任务,线程第一次运行就享受缓存加速,降低CPU译码压力,间接省电。

2. 不改动CPU硬件,依托现有芯片自带缓存单元,偏向系统调度层面的软件优化。

3. 对于后台多任务、大量循环计算场景提升会比较明显。

四、边界约束

1. 只处理完整重复指令,逻辑相似但参数不一样的指令无法复用。

2. 预扫描会有少量算力消耗,不能所有程序强制开启,只对合适的线程启用,避免负优化。

3. 一旦代码流程被分支跳转打断,立刻终止预扫描。
@MagicOS流畅橙子 @性能_阿勇 @MagicOS流畅李同学
建议投票
14 人已参与
93%支持
7%反对
评论1
MagicOS流畅李同学 MagicOS产品经理  发表于 昨天 20:03 属地未知 来自:浏览器
楼主好,您的建议已记录,后续反馈工程师评估优化。
您需要登录后才可以评论 登录 | 立即注册
简体中文 - China
快速回复 返回顶部 返回列表