处理器在等待主内存读取时做什么

2024-01-02

假设 L1 和 L2 缓存请求导致未命中,处理器是否会停止运行,直到访问主内存为止?

我听说过切换到另一个线程的想法,如果是的话,用什么来唤醒停滞的线程?


现代 CPU 中会同时发生很多很多事情。当然,任何需要内存访问结果的事情都无法进行,但可能还有很多事情要做。假设有以下 C 代码:

double sum = 0.0; 
for (int i = 0; i < 4; ++i) sum += a [i];

if (sum > 10.0) call_some_function ();

并假设读取数组 a 停止。由于读取 a[0] 会停止,因此加法 sum += a[0] 将停止。然而,处理器继续执行其他指令。就像增加 i、检查 i 10.0)”。

此时处理器不知道 sum 是什么。然而,它可以根据之前分支中发生的情况猜测结果,并开始推测性地执行函数 call_some_function ()。所以它继续运行,但要小心:当 call_some_function () 将东西存储到内存时,它还没有发生。

经过许多周期后,最终读取 [0] 成功。当发生这种情况时,它将被添加到 sum,然后一个 [1] 将被添加到 sum,然后一个 [2],然后一个 [3],然后比较 sum > 10.0 将正确执行。那么分支的决定将被证明是正确的还是错误的。如果不正确,则 call_some_function () 的所有结果都将被丢弃。如果正确,则call_some_function()的所有结果都从推测结果转变为真实结果。

如果停顿时间太长,处理器最终将无事可做。它可以轻松处理无法执行的四次加法和一次比较,但最终它太多了,处理器必须停止。然而,在超线程系统上,您有另一个线程可以继续愉快地运行,并且以更高的速度运行,因为没有其他人使用该核心,因此整个核心仍然可以继续做有用的工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理器在等待主内存读取时做什么 的相关文章

随机推荐

  • CreateDIBSection:返回值与错误

    CreateDIBSection 的文档 https msdn microsoft com de de library windows desktop dd183494 v vs 85 aspx states 如果函数成功 返回值是新的句柄
  • 在 Python 中压缩文件的更好方法(使用单个命令压缩整个目录)? [复制]

    这个问题在这里已经有答案了 可能的重复 如何使用 python 版本 2 5 压缩文件夹的内容 https stackoverflow com questions 296499 how do i zip the contents of a
  • 如何检测 SharePoint 上 ItemAdded() 事件的项目还原

    我知道当从回收站恢复项目时 会触发 ItemAdded 事件 但是 如何检测添加的项目是否来自回收站或者是否是新文件 这是一个非常古老的线程 但它出现在该主题搜索的顶部结果中 从我对 SP2010 的实验来看 它看起来像属性 AfterPr
  • 文本从下到上换行

    有人知道如何从下到上以相反的顺序换行文本吗 我附上了示例图片 https i stack imgur com RVsIG jpg https i stack imgur com RVsIG jpg 5D 我需要从下到上以某种方式制动 而不是
  • Highcharts 极坐标图:在相交区域系列上应用渐变颜色

    我正在尝试在我的 React 项目中的 Highcharts 极坐标图中的 2 个系列的相交区域应用渐变颜色 这是我的 JSFiddle 链接 https jsfiddle net pgkk s29d51zt 604 https jsfid
  • TextBlock 画笔给出的颜色不正确

    我有一个 TextBlock 和一个 Rectangle 它们都位于一个空的 WPF4 窗口中 TextBlock 的前景和矩形的 Fill 都设置为 SolidColorBrush 其值为 80800000 它看起来是这样的 矩形的颜色是
  • Paypal 沙箱 API 内部错误

    过去几个月我一直在使用 Paypal Merchant SDK 和 Sandbox 凭证 一切工作正常 但今天 我遇到了这个奇怪的问题 每当我调用 SetExpressCheckout 的 API 时 我都会得到由于内部错误 交易失败有错误
  • 授予角色时出现缺少权限错误

    我在尝试向服务器管理员授予角色时遇到问题 对于常规权限 它工作正常 但如果它是服务器管理员角色 或具有权限的其他角色 即使我是所有者 它也会给出以下错误 discord ext commands errors CommandInvokeEr
  • 快速关系数据库,可与 Python 简单使用[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 对于我的链接抓取程序 用 python3 3 编写 我想使用数据库来存储大约 100 000 个网站
  • Java 重写 hashCode() 方法有任何性能问题吗?

    如果我会覆盖hashCode 方法会降低应用程序的性能 我在应用程序的许多地方重写了这个方法 是的 如果 hashCode 方法的实现方式不好 则可能会降低散列集合的性能 hashCode 方法的最佳实现应该为唯一对象生成唯一的 hashC
  • Android webview 中的缓存

    Android webview中加载移动网页和非移动网页哪一种更快 加载缓存还是根本不加载 加载它的推荐样式是什么 现在 当我不在所有非移动网站上加载缓存时 加载速度比在本机浏览器中加载它们时要慢得多 不要使用这些 viewer getSe
  • Rails 使用什么 Ruby 技术来使我的控制器方法呈现视图?

    只是好奇是否有人知道在 Rails 框架中使用什么 Ruby 技术来完成以下任务 如果我不写 比如说 index方法在 Rails 控制器上 如果 URL 与该路由匹配 Rails 仍将呈现索引视图文件 这是有道理的 因为我的控制器继承自父
  • 对 C# 类中的属性进行排序

    我们需要解析的文件格式如下 v1 000 sammy endpoint blah 它是供应商向我们提供的有序固定宽度格式 因此这 5 个字段中的每一个都映射到类中的特定属性 实际格式有 gt 30 我想通过将序列应用于属性来使用反射来解析它
  • pandas:基于开始/结束日期的聚合

    它实际上是一个反聚合 因为我有一个这样构造的数据集 id type first year last year A t1 2009 2014 A t1 2010 2015 B t1 2007 2009 B t2 2008 2011 但我需要按
  • 处理 DDD 中的嵌套聚合

    我刚刚开始使用 DDD 并且在弄清楚如何适应数据的关系性质时遇到了一些困难 我拥有我相信会被视为我的聚合根的东西 但聚合也有它自己的聚合 不想违反德墨忒尔定律 我想知道我的想法是否错误 并希望一些 DDD 专家可以提供一些见解 我的聚合根是
  • 将 tibble 转换为带有列标题的数据框

    我从 Excel 工作表导入数据 如下所示 F4 Off lt readxl read xlsx myExcel xlsx sheet Offline col names TRUE range I1 L285 F4 Off F4 On lt
  • React - 替换 props.children 中的子组件

    正如在另一个中看到的question https stackoverflow com questions 32370994 how to pass props to this props children 可以使用 React Childr
  • Laravel - 使用哪个缓存驱动程序?

    这是我第一次处理缓存 尽管我浏览了 laravel 文档和其他各种网站以获取如何设置它的说明 但我仍然有点不知所措 不知道该使用哪个以及有什么不同缓存驱动程序可以 我当前的情况是 我有一个日程安排系统 您可以在其中创建本周课程的 pdf 文
  • 如何从电子中的 new BrowserWindow() 获取窗口对象?

    有没有办法重用窗口对象 这可能是必要的 因为相应的窗口可能是动态生成的 var electron require electron var app electron app var BrowserWindow electron Browse
  • 处理器在等待主内存读取时做什么

    假设 L1 和 L2 缓存请求导致未命中 处理器是否会停止运行 直到访问主内存为止 我听说过切换到另一个线程的想法 如果是的话 用什么来唤醒停滞的线程 现代 CPU 中会同时发生很多很多事情 当然 任何需要内存访问结果的事情都无法进行 但可