news 2026/6/15 14:30:06

cpu的fetch/prefetch

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cpu的fetch/prefetch

一句话总结

  • Fetch = 取当前要执行的指令(必须取,不取就停)
  • Prefetch = 提前取未来可能执行的指令(预取,不影响当前执行,只为提速)

它们都是ICU(Instruction Cache Unit / Instruction Fetch Unit)核心工作。


1. Fetch(指令取指)——必须执行的操作

作用

给 CPU 核心拿到当前 PC(程序计数器)指向的指令

完整流程(极简版)

  1. PC 给出当前要执行的指令地址
  2. ICU 去ICache 查是否命中
    • 命中:直接给指令
    • 不命中:发请求去 L2/L3 / 内存取一整行cacheline
  3. 取回来的指令送给Decode(译码)执行

关键特点

  • 同步、阻塞:Fetch 不完成,后面流水线就停
  • 按 PC 顺序取
  • 和执行强相关

2. Prefetch(指令预取)——优化性能的操作

作用

提前把未来可能执行的指令取到 ICache,等 CPU 真正需要时直接命中,不 stall。

预取什么?

  • 顺序预取:PC 后面连续的指令
  • 分支预取:if/else/loop 可能跳去的目标地址
  • 历史预取:根据过去行为预测

关键特点

  • 异步、不阻塞
  • 不影响当前执行
  • 目标只有一个:减少 ICache Miss
  • 预取回来的行存在 ICache 里,打上 tag + valid

3. 最关键区别(一定要记住)

操作目的是否必须是否阻塞 CPU触发条件
Fetch取当前指令必须阻塞PC 当前地址
Prefetch提前备未来指令不必须不阻塞预测 / 顺序 / 分支

4. 最简单的比喻(秒懂)

  • Fetch = 现在就要吃饭,必须马上端上来
  • Prefetch = 提前把下一碗饭做好放旁边,等你要吃直接拿

Fetch是 CPU 根据当前 PC 指针,同步获取当前执行指令的过程,是流水线前端最基础、必须的操作,若 ICache miss 会阻塞流水线。Prefetch是 ICU 根据顺序执行、分支预测或历史行为,异步预取未来可能执行的指令到 ICache,不阻塞当前执行,目的是降低 ICache miss 率,提升 CPU 吞吐量。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:24:36

Java毕设项目推荐-基于Java的足球俱乐部训练中心管理系统基于springboot的足球俱乐部青训管理系统的设计与实现【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/15 13:14:14

新零售商城系统-PHP商城源码-免费开源-亿坊商城系统!

在数字经济时代,搭建一个功能齐全的线上商城,早已不是大型企业的专利。借助免费、开源的PHP商城系统,创业者和小微企业也能快速构建属于自己的新零售阵地。亿坊商城系统正是这样一款旨在降低技术门槛、赋予用户完全控制权的国产开源解决方案。…

作者头像 李华