在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 286|回复: 4

[求助] 请教 store 指令在流水线中的位置

[复制链接]
发表于 2023-11-27 17:57:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
没有搞明白,对于 store 指令,在哪个阶段启动写操作,什么时候 retire?
我看有文章说在 commit 阶段启动写,启动后假如出现异常,比如 page fault,此时需要 flush 流水线吗?由于 store 很慢,感觉要等待 store 指令 做完再 retire会很影响性能,求大神指导
发表于 2023-12-1 17:16:06 | 显示全部楼层
1. 在不考虑那些高级feature的前提下,常规操作就是这条store指令成为最老的未提交的指令时(就是你说的commit),才会将数据写入类cache结构(也可以直接写cache)。其实这一点比难理解,因为store和普通的gpr写不一样,gpr的写有mrt和mrct确保写错了也能恢复,但cache或者memory不可能有这样的容错机制。
发表于 2023-12-1 17:21:12 | 显示全部楼层
2. 如果你和load比,确实慢,但并不是说store retire了后续的load才能做,高性能处理器一般会有store load forward结构,将store buffer中的数据直接forward到后续load中(注意此时load的数据并不来自cache,而是未commit的store)。
发表于 2023-12-1 17:34:43 | 显示全部楼层
3. 如果出现异常,肯定会flush流水线,将比发生异常的指令还要年轻的指令全flush掉,至于发生异常的指令本身是否需要flush,需要看isa规定。异常的检查可以出现在流水线的大部分地方,但处理只能在一个地方,通常情况下,异常会很早被标记,标记会随着流水线传递,但在commit的时候才会被处理。之所以在commit才处理,是因为commit时,这条指令一定是最老的未提交的指令,不会误报错误。当然,为了提性能与降功耗,一些异常的处理可以提前,甚至加入一些误判的修正机制,但确认最终状态迁移的标志依然是比其年老的指令全部retire。
 楼主| 发表于 2023-12-4 10:36:59 | 显示全部楼层


ascetic 发表于 2023-12-1 17:34
3. 如果出现异常,肯定会flush流水线,将比发生异常的指令还要年轻的指令全flush掉,至于发生异常的指令本 ...


明白了,谢谢大神耐心讲解,我可能想的太复杂了,所有指令还是需要按顺序提交,没得商量
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-28 08:06 , Processed in 0.020498 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表