0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何处理CPU乱序调度中的内存数据依赖

数字芯片实验室 来源:数字芯片实验室 2024-08-06 11:49 次阅读

要处理CPU乱序调度中的内存数据依赖,通常涉及两个步骤:

1.计算内存访问的有效地址

2.检查所有未处理完的load/store的地址,并确保冲突的load/store不能乱序执行

A Load / Store Processing Model

load/store处理模型,如下图所示。

a459f9f4-4019-11ef-b8af-92fbcf53809c.jpg

load和store指令首先发给reservation station ,然后发送到load单元或store 单元。

在store单元中,store 指令首先经过有效的地址计算和地址转换,然后驻留在“Finished ”store 缓冲区中。 “completed ”store 缓冲区中的store 指令最终会提交到内存中。

同样,load指令首先通过地址生成和翻译,并最终读取数据cache 以从内存中获取数据。

我们可以做出的一个假设是,store 指令需要按程序顺序完成,因此WAW数据依赖性是默认强制执行的。从本质上讲,处理数据依赖项可以简化为处理load/store 依赖项(RAW和WAR)。

Handling Data Dependencies with In-order Load / Store Dispatch

最直接的解决方案是按程序顺序向公共reservation station 发出load/store 指令,并从reservation station 按FIFO顺序发送。只有当store 缓冲区为空时,才能发送load。然而,load指令的延迟很长,不可预测。尽早执行load至关重要。

改进的方案是支持不同地址的load bypass ,如果store 缓冲区中有地址匹配,则stall load指令。因此,不同地址的load可以继续进行。

a4732afa-4019-11ef-b8af-92fbcf53809c.jpg

为了进一步加快load。如果存在地址匹配,但store buffer数据不可用,则load stall;如果存在地址匹配和store 数据可用,则将数据直接forward 到load。由于load直接从store buffer接收数据,因此可以尽早执行load指令,并避免数据cache 访问。

a4872be0-4019-11ef-b8af-92fbcf53809c.jpg

Handling Data Dependencies with Out-of-order Load / Store Dispatch

如果我们乱序调度load/store,可以在store之前发放load。由于无法检查地址匹配,因此存在潜在的RAW依赖关系。

a4b2721e-4019-11ef-b8af-92fbcf53809c.jpg

与store指令类似,如果从reservation station 发送的store在“finished ”load buffer中发现匹配的load,则应刷新所有指令。

这种放松也引入了可能的WAR数据依赖性。load地址可能与后续store的地址匹配,因此会触发不正确的数据forward 。一个简单的解决方案是stall 匹配地址的“finished ” store的load,仅具有匹配地址的“completed ”store上数据forward 给load。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10695

    浏览量

    209191
  • 内存
    +关注

    关注

    8

    文章

    2901

    浏览量

    73509
  • 数据依赖
    +关注

    关注

    0

    文章

    2

    浏览量

    5654

原文标题:CPU面试题Q7:如何处理内存中的数据依赖?

文章出处:【微信号:数字芯片实验室,微信公众号:数字芯片实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Cjson协议申请不到内存何处理

    最近用原子哥的ucosII例程做个东西,使用到Cjson协议,其中使用到了申请内存内存回收的问题,用的是原子哥的内存管理函数,前几次还可以,通信几次就申请不到内存了,感觉好像是
    发表于 04-26 21:22

    何处理好FPGA设计跨时钟域间的数据

    跨时钟域处理是FPGA设计中经常遇到的问题,而如何处理好跨时钟域间的数据,可以说是每个FPGA初学者的必修课。如果是还是在校的学生,跨时钟域处理也是面试中经常常被问到的一个问题。在本篇
    发表于 07-29 06:19

    labview写入access数据乱序问题

    用database insert 插入数据,移位寄存器当作顺序编号,发现不管循环框频率设多少,到编号713这里必定会跳到737,然后中间这段会在1035后出现,其他地方也有类似的乱序,多次写入乱序
    发表于 08-09 10:23

    何处理存储在非易失性设备内存数据集损坏

    保护您的嵌入式软件免受内存损坏本文的目的是提供一种软件方法,解释如何处理存储在非易失性设备(如小型 EEPROM 或闪存)内存数据集损坏
    发表于 12-24 07:27

    何处理才能使CPU的效率更高呢?

    ,大家都知道,当按键按下之后需要抖动处理,一般会延时20MS再判断按键是否有效,如果这20MS内处在原地踏步的等待状态,那么效率会非常低。如何处理才能使CPU的效率更高呢?采用时间片轮转算法可以解决这个
    发表于 01-27 07:28

    stm32如何处理数组数据

    更新一下博客,最近有一些朋友问我如何处理数组数据,顺便发一下教程,代码如下if(UartHandle->Instance == USART3)//stm32的串口
    发表于 02-21 07:09

    编译器优化的静态调度介绍

      指令调度简介  指令调度是指对程序块或过程的操作进行排序以有效利用处理器资源的任务。指令调度的目的就是通过重排指令,提高指令级并行性,
    发表于 03-17 17:07

    什么是CPU分枝/乱序执行?

    什么是分枝/乱序执行?   分枝(branch)是指程序运行时需要改变的节点。分枝有无条件分枝和有条件分枝,其中无条件分枝只
    发表于 02-04 10:49 825次阅读

    何处理cpu风扇转速过快

    何处理cpu风扇转速过快 问:我前天在电脑城组装了一台电脑,机器运转还算好,可是CPU风扇声音很大。CPU温度在39℃~40℃的时候,
    发表于 02-25 10:23 9825次阅读

    小型Hadoop集群的数据分层调度处理算法分析

    调度处理的要求也在逐渐提高,仅依靠CPU主频的提升并不能快速的处理数据带来的压力,快速有效的算法成为目前
    发表于 11-03 15:02 1次下载
    小型Hadoop集群的<b class='flag-5'>数据</b>分层<b class='flag-5'>调度</b><b class='flag-5'>处理</b>算法分析

    基于GPU/CPU的流程序多粒度划分与调度

    并实现了面向GPU/CPU混合架构的数据流程序任务划分方法和多粒度调度策略,包括任务的分类处理、GPU端任务的水平分裂和CPU端离散任务的均
    发表于 11-23 14:29 0次下载

    互联车辆如何处理数据:3个常见问题

    互联车辆如何处理数据:3个常见问题
    发表于 10-31 08:23 0次下载
    互联车辆如<b class='flag-5'>何处理</b><b class='flag-5'>数据</b>:3个常见问题

    Redis服务器的内存耗尽后,Redis会如何处理呢?

    作为一台服务器来说,内存并不是无限的,所以总会存在内存耗尽的情况,那么当 Redis 服务器的内存耗尽后,如果继续执行请求命令,Redis 会如何处理呢?
    的头像 发表于 03-08 09:26 476次阅读

    证明CPU指令是乱序执行的

    双击QQ.exe从磁盘加载到内存里面,内存里面就会有了一个进程,进程产生的时候会产生一个主线程,就是main方法所在的线程,cpu会找到main开始的地方,把它的指令读取过来放到程序计数器,把
    的头像 发表于 03-15 09:13 853次阅读

    当我们在谈论cpu指令乱序的时候,究竟在谈论什么?

    知道指令的乱序策略很重要,原因是这样我们就能够通过barrier(内存屏障)等指令,在正确的位置告诉cpu或者是编译器,这里我可以接受乱序,那里我不能接受
    的头像 发表于 05-19 14:42 1089次阅读
    当我们在谈论<b class='flag-5'>cpu</b>指令<b class='flag-5'>乱序</b>的时候,究竟在谈论什么?