CPU如何对指令重新排序

2024-03-24

我最近读到了有关 CPU 指令重新排序以提高效率的内容。但我无法理解CPU如何重新排序其指令。我的意思是编译时重新排序是可以想象的,因为编译器可以预见即将到来的代码。但是对于一个接一个地读取指令的CPU,它如何看到即将到来的指令并对它们重新排序


指令按程序顺序取出到指令队列中;从队列中它们被解码并移入预订站。这些保留站有效地进行重新排序:当指令的参数变得可用时,指令被分派到执行单元执行,并且所有参数变得可用的时间通常与指令队列/存储器中的顺序不对应。

例如,使用Tomasulo算法 https://en.wikipedia.org/wiki/Tomasulo_algorithm,看这两个视频:

问题(和寄存器重命名):https://youtu.be/I2qMY0XvYHA?list=PLAwxTw4SYaPkNw98-MFodLzKgi6bYGjZs https://youtu.be/I2qMY0XvYHA?list=PLAwxTw4SYaPkNw98-MFodLzKgi6bYGjZs

发货/重新订购:https://youtu.be/bEB7sZTP8zc?list=PLAwxTw4SYaPkNw98-MFodLzKgi6bYGjZs https://youtu.be/bEB7sZTP8zc?list=PLAwxTw4SYaPkNw98-MFodLzKgi6bYGjZs

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

CPU如何对指令重新排序 的相关文章

  • 并行发送 HTTP 请求数小时后 ServicePoint 对象尺寸过大

    我们正在使用HttpClient并行发送请求到远程 Web API public async Task
  • 使用监视器的单车道桥

    在大学里 我从 Gregory R Andrews Foundations of Multithreaded programming 中得到了这个规范的并行编程问题 虽然我有这本书的较新版本和俄语版本 但我发现了一个旧的英语变体并尝试正确传
  • Java 多线程 int 操作做得正确

    这里的代码是一个更大项目的工作原型 但只是为了展示这个想法 我需要对 int 执行很多操作 对每个 int 执行很多操作 我决定将所有操作存储在列表中 所有整数都将存储在列表中 每个线程将执行 1 个操作并将在所有列表上运行 但在结果int
  • 重写线程池中线程的中断方法

    假设我有这个 class Queue private static ExecutorService executor Executors newFixedThreadPool 1 public void use Runnable r Que
  • 使用 tkinter + pyhook 时冻结。两个事件循环和多线程

    我正在用 python 2 7 编写一个工具 记录用户按下键盘或鼠标按钮的次数 点击次数将显示在屏幕左上角的一个小黑框中 即使另一个应用程序处于活动状态 该程序也会记录点击 除非我将鼠标移到框上 否则它工作正常 然后鼠标冻结几秒钟 然后程序
  • 如何知道线程中的工作何时完成?

    单击按钮时我需要创建多个线程 我已经这样做了 Dim myThread As New Threading Thread AddressOf getFile myThread IsBackground True myThread Start
  • Jmeter 下降的最佳方法?

    我们都知道 Jmeter 并不是最擅长在运行期间更改活动线程的数量 除非您喜欢并创建以不同时间间隔触发的单独线程组 有没有人想出一个好的解决方案来在测试结束时降低速度 例如 我从 50 个线程开始 在 30 分钟内我想要 0 个活动线程 查
  • “yield”不是“std::this_thread”的成员

    我试图产生当前线程 std this thread yield 但不幸的是 海湾合作委员会更清楚 yield 不是 std this thread 的成员 我是否忘记了一些类似于 D GLIBCXX USE NANOSLEEP 的 hack
  • 如何调试 iOS 应用程序在启动时崩溃,仅在程序集文件中设置断点

    我遇到了当前正在开发的应用程序的问题 问题是应用程序在启动时在后台运行一段时间后崩溃 并且仅在这种情况下 在应用程序被杀死时启动应用程序不会导致调试器或手机崩溃 无论是否进行调试 在后台启动应用程序大约 5 10 分钟都不会导致崩溃 在后台
  • 在后台线程加载广告 (adMob)

    我想在后台线程上加载我的添加 因为它使得SlidingMenu打开和关闭时滞后 我应该使用Thread Handler Or AsyncTask String MY AD UNIT ID AdView adView new AdView g
  • 左/右旋转进位的实际用途

    循环左进位和循环右进位指令有哪些实际用途 在我的汇编课上 我们无法想出一个有用的好例子 如果要将位从一个操作数移出并移入另一个操作数 SHL EAX 1 move sign bit of EAX RCL EDX into LSB of ED
  • JavaFX 的 Swing 计时器替代方案以及线程管理差异

    使用 JavaFX 的 Swing 计时器是否安全 或者 Swing 有特殊的替代方案吗 JavaFX 和 Swing 的线程管理有什么区别 事实上我很想知道相当于摇摆计时器 SwingUtilities invokeLater and i
  • 引用计数类和多线程

    我是多线程编程的新手 对此我仍然感到困惑 下面是我的引用计数类 class Rbuffer private char m pnData volatile unsigned int mRefCount public Rbuffer int n
  • 在给定时间后停止 java 中的线程 - 不起作用

    我有一个复杂的函数 优化 可能会进入循环或只是花费太多时间 并且允许的时间由用户设置 因此 我试图在单独的线程中运行该函数 并在超过最大时间时停止它 我使用类似于下面的代码 但它不起作用 所以 int timeMax 2 time in m
  • 使用线程反转字符串

    最近 在一次面试中 我被要求使用线程实现一个字符串反转功能 我想出了下面解决方案的大部分内容 被选中与否是另一回事 我尝试在运行 Windows 8 Consumer Preview 的家用电脑上运行以下解决方案 编译器是VC11 Beta
  • 主线程检查器:在后台线程上调用 UI API iOS 11 Xcode 9 GM Seed

    任何人都可以帮助我调试这个问题 从我开始使用 Xcode 9 GM 种子和 iOS 11 GM 种子开始 我的代码在控制台中向我发出警告 2017 09 18 16 22 52 872716 0530 359 20158 reports M
  • Java中如何让另一个线程休眠

    我有一个扩展 Thread 的类 这个线程在运行时大部分时间都在睡眠 它会执行一个检查 如果 true 执行一个简单的操作 然后睡眠 1 2 秒并重复 该类还有一个由其他线程调用的公共方法 如果调用此函数 我希望线程在已经休眠的情况下休眠更
  • 在QT中以不同的时间间隔更新GUI [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道如何在QT中以不同的时间间隔更新GUI 最好的是我可以控制时间间隔 我知道 QTimer 可以在同一时间间隔更新 GUI 但我
  • 大师系统要求

    我们将使用 Virtuoso 来存储 RDF 三重计数一开始将为 1 亿 我需要知道典型的 RAM CPU 磁盘等应该是什么 查询将使用 SPARQL 并且查询会有点复杂 请提供您的意见 Virtuoso 版本 6 x 三元组 四元组 的平
  • std::线程构造和执行

    我在 中找不到任何信息文档 http en cppreference com w cpp thread thread thread是否能保证线程对象构造完成后线程实际上正在运行 换句话说 是否可以保证线程构造函数完成后线程函数已经被执行 一

随机推荐

  • 发现扩展时遇到错误:Error Domain=PlugInKit Code=13“查询已取消”

    我正在尝试显示或上传 UIImage 但收到此错误 发现扩展时遇到错误 Error Domain PlugInKit Code 13 查询已取消 UserInfo NSLocalizedDescription 查询已取消 import UI
  • 宏中的 SAS 宏

    我有一个关于 macro 的问题 我可以在另一个 宏中设置 宏吗 简短的例子 情况的 图片 macro Tier 1 do Iter 1 to i macro Tier 2 proc sql noprint select 1 Iter in
  • SOAP 请求返回 wsdl 而不是预期的 SOAP 响应

    我的 SOAP 请求有问题 当我尝试向服务器发送以下肥皂请求时 它会返回 预期结果 地点 https YOUR SERVER apitransactional services TransactionalService wsdl Input
  • Ruby 相当于 grep -v

    这就是我一直在做的事情 my array reject elem elem regex each 我觉得这有点笨拙 但我还没有找到任何内置的东西可以让我将其更改为my array grepv regex 有这样的功能吗 Ruby 2 3 实
  • 如何使用DATA_PUMP导出到S3存储桶?

    我们有 RDS Oracle 实例 我需要将特定架构导出到转储文件中 导出工作并将转储文件复制到 DATA PUMP DIR 问题是 RDS 没有文件目录访问权限 我需要在 S3 上导出 DMP 文件或复制到另一个 EC2 实例 文章 LI
  • 轻松的十六进制/浮点转换

    我正在 c 和 python 程序之间进行一些输入 输出 仅浮点值 python 有一个很好的功能 可以将浮点值转换为十六进制数字并返回 如您在此链接中看到的 http docs python org library stdtypes ht
  • annotationProcessor gradle 4.7+ 配置不运行 lombok

    我在使用 gradle 4 7 项目时收到以下消息 The following annotation processors were detected on the compile classpath lombok launch Annot
  • IHTTPHandler 的无缓冲输出

    我想从一个流式传输数据IHttpHandler班级 我从数据库加载大量行 序列化并压缩它们 然后通过网络发送它们 另一方面 我希望我的客户端能够在服务器完成所有对象的序列化之前解压缩和反序列化数据 我在用着context Response
  • Angular 2 路由引发 404 错误

    HTML5 推送状态意味着刷新 URL 或在浏览器中输入直接 URL 当我使用以下命令运行我的 Angular 应用程序时效果非常好 npm start 来自 VS 2015 命令提示符的命令 但是 当我在 IIS 上部署相同的应用程序并更
  • Silverlight-DataGrid 控件-选择更改事件干扰排序

    我目前正在使用 Silverlight Beta 2 Datagrid 控件 在连接 SelectionChanged 事件之前 网格将通过单击标题完美排序 现在 当单击网格时 当我单击标题进行排序时 它将触发 SelectionChang
  • 从 panda 数据框中删除方括号

    我有一个数据框 我需要从中删除方括号才能输入到循环中 我尝试过使用 str strip 和 str commands 但是我收到错误消息 说我必须传递带有布尔值的数据帧 我的数据框中的值似乎是列表 m2 pd read csv newm2
  • Xamarin 中绑定 Jar 库时出现问题

    在绑定我的 jar 文件时 我不断在多个类中收到此错误 Error CS0534 path does not implement inherited abstract memberAndroid OS AsyncTask DoInBackg
  • SQL Server 数据库的大小有限制吗?

    我将用 C 开发一个系统 其中必须扫描和存储文档 我预计 dB 的大小将达到 3 4 TB 我的问题是可以将它们存储在数据库中还是数据库有限制 或者我是否必须将它们存储在文件夹中 提前致谢 是的 有一个限制 这取决于您使用的 SQL Ser
  • 与 CGAL 的链接错误

    我在 Mac OS X 10 8 4 上安装了 CGAL 我已成功地将 CGAL 的各个方面合并到以前的 C 程序中来计算 3D 点云的凸包 然而 现在我试图包含 CGAL 的其他部分来计算表面网格 将它们转换为多面体 等等 当我这样做时
  • 网格三角剖分和简化 C++ 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 C 库来三角测量和简化 3D 网格 我的 3D 网格可能很大 大约 300 万个顶点
  • 将 Babel 添加到 HTML

    我是 ReactJS 新手 在将 babel 导入 html 时遇到问题 目前该项目托管在code pen上链接到代码笔 https codepen io davedaw pen JJgvGK editors 1010 我正在尝试在本地主机
  • 如何在 Rust 中返回字符串向量

    如何通过分割中间有空格的字符串来返回字符串向量 fn line to words line str gt Vec
  • 如何在Raku中逐行读取gz文件

    我正在尝试在 Raku 中逐行读取一个巨大的 gz 文件 我正在尝试做这样的事情 my file huge file gz for file IO lines gt line say line 但这给出了我的 UTF 8 格式错误的错误 我
  • OpenCV::dnn::readNet 抛出异常

    我正在关注本教程 https learnopencv com object detection using yolov5 and opencv dnn in c and python 加载yolov5 onnx使用 OpenCV DNN 模
  • CPU如何对指令重新排序

    我最近读到了有关 CPU 指令重新排序以提高效率的内容 但我无法理解CPU如何重新排序其指令 我的意思是编译时重新排序是可以想象的 因为编译器可以预见即将到来的代码 但是对于一个接一个地读取指令的CPU 它如何看到即将到来的指令并对它们重新