- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近开始使用计算机体系结构。我对我试图整理的图表感到困惑。基于依赖关系并为了避免危险,我设计了下表。但是我不确定两个阶段是否可以同时从同一个寄存器中读取。这是表格和带有突出显示混淆区域的 mips。
编辑:添加了替代方案
删除一个档位是否正确,因为 r0 的值已经被处理了?
最佳答案
“使用”太笼统了,您需要在对寄存器的读取和写入之间进行拆分。
如果你问“同时阅读”——当然,这就是流水线的重点。只要寄存器值不改变,反复读取就没有问题。
实际上,ID 和 EX 阶段不使用相同的资源,因此不存在冲突 - EX 阶段读取的值来自 ID 阶段在前一个周期写入的锁存器。
您认为是单个全局值的寄存器实际上沿管 Prop 有多个副本,每个副本对应于程序中某个点的值。如果您将最后两条指令用于例如,都读取 $r0,那么 ID 阶段将在第 7 周期为 OR 从寄存器文件中读取它,将其写入锁存器,然后在第 8 周期为 XOR 再次读取它,而 OR 处于 EX 阶段,同时取上一个周期的锁存值。
现在真正的问题来了,当您有数据危险时,例如由第一条指令引起的危险。由于在任何给定阶段的寄存器值必须反射(reflect)它根据程序顺序具有的真实值,如果您尝试在周期 2 上为 Sub 指令执行 EX 阶段,您将遇到问题,因为 $r0 值已被读取不代表前一个循环的加法结果。实际上,只有在第 4 周期 Add 完成回写后,寄存器文件中的值才会准备好。这称为 RAW(写后读)冲突,必须修复,否则程序将产生虚假结果。解决此问题的一种方法是在检测到此危险后添加一个停顿(如图中带星号的图所示)——当读取 $r0 的指令最终继续时,它们将更新值(添加后)已写入锁存器。另一个(更有用的)解决方案是添加特殊的逻辑来绕过新值,一旦它准备好所有需要它的管道阶段。在这种情况下,这可能仍然需要暂停,因为指令是背靠背的,因此您甚至没有时间在下一条指令需要之前执行操作。
最后一点 - 请记住,处理器,即使是像流水线 mips 这样简单的处理器,也都是在骗你。它们让你相信你正在运行你编写的程序,而实际上它们在内部做了各种各样的事情而不告诉你(一个稍微更高级的例子是乱序执行)。在这种情况下,它们让您认为指令是连续执行的,而实际上它们在前一个完成(甚至执行)之前推测性地开始每个指令。这当然在大多数情况下都有效,并且使处理器在指令吞吐量(或 IPC)方面的性能要好得多,但在某些情况下(例如数据危险、控制危险等),这可能会完全破坏您的程序,所以他们必须通过添加隔间或冲洗管道来隐藏这一点。
关于architecture - 流水线图,如果前一个 EX 使用相同的寄存器,ID 可以启动吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27805094/
我需要多少档才能正确执行以下指令。我对我所做的事情有些困惑,所以我在这里看到专家的答案。 lw $1,0($2); beq $1,$2,Label; 请注意,检查是否会发生分支将在解码阶段完成。但是在
我正在用 C 语言编写这段代码,它计算并绘制 6 级流水线和超标量架构上的周期总数。代码编译得很好,但是当我运行它时,出现段错误。 我在此选项中遇到段错误。我输入我的选择为 1,然后输入总周期为 5。
我一直在阅读有关流水线的内容,也阅读了这个主题 - How to send a simple string between two programs using pipes? 我阅读了@jschmie
我刚刚在读这个Wikipedia article在 HTTP 流水线和图表中,似乎可以在一个连接上同时发送响应。我是不是误解了图表,或者这是允许的吗? Section 8.1.2.2 of RFC 2
我试图了解什么是 HTTP 流水线和 HTTP keep-alive 连接,并试图在这两个主题和 Server Sent 事件技术之间建立联系。 据我了解,HTTP keep-alive connec
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
背景 Rainbond 本身具有基于源码构建组件的能力,可以将多种编程语言的代码编译成 Docker 镜像,但是在持续集成的过程中,往往会需要对提交的代码进行静态检查、构建打包以及单元测试。之
前面我们创建的两个任务 test 和 build-and-push 都已经完成了,我们还可以创建一个流水线来将这两个任务组织起来,形成一个流水线,这里就是我们要使用的 Pipeline 这个 C
我将数据表与 pipelining 一起使用.我工作得很好,除非我试图输入一个额外的列来保存“编辑”链接。参见 this表。 这是显示列的 server_processing.php 片段: /
Go 新手。我正在尝试编写一个“流水线”,其中多个函数像 worker 一样工作,并在流水线中将一些数据结构传递给彼此,每个函数都对数据结构做一些事情。 type orderStruct struct
我正在尝试弄清楚 DataFlow 如何扩展某些操作以及如何使其表现最佳。首先,我刚刚创建了一个简单的流程,它从 BigQuery 中读取数据(约 2500 万行,总共 30GB),进行 JSON 提
我正在学习 BASH,我的问题如下。 我正在使用 tar -zxvf 解压缩一个文件,这会返回一个(我认为)是一个列表类型 ls -l 从它被提取的文件夹.我想要做的是使用 head -1 获取它的第
我必须在 Java 中实现一个 HTTP 客户端,对于我的需要来说,最有效的方法似乎是实现 HTTP 管道(根据 RFC2616)。 顺便说一句,我想对 POST 进行流水线处理。 (此外,我不是在谈
我每分钟有数千个小文件(大约 1 KB)要上传到 S3。如果我上传循环中的每个文件“发送我的 HTTP 请求 - 等待 S3 的 HTTP 响应 - 发送下一个请求 - 等待下一个响应......”,
假设我有一个来自机器 A 的 MPI_Send,其中包含一条巨大的消息,而在另一台机器(比如 B)上,它正在通过 MPI_Recv(或分别为 MPI_isend 和 MPI_irecv)接收。目前,B
有人可以确认 CacheManager.Net 是否支持 redis 流水线吗? 我在 documentation 中找不到它 非常感谢。 干杯,你 最佳答案 有点。CacheManager 不直接支
我最近一直在编写 x86 程序集(为了好玩),并且想知道 rep 前缀字符串指令是否真的在现代处理器上具有性能优势,或者它们是否只是为了向后兼容而实现的。 我可以理解为什么英特尔最初会在处理器一次只运
我正在学习本教程: https://www.linkedin.com/pulse/building-docker-pipeline-cloudbees-jenkins-jay-johnson 我在 D
我的公司已决定过渡到基于微/服务的架构。 在过去的几个月里,我们一直在做大量的研究,以了解这个东西的架构究竟会是什么样子。 到目前为止,我们已经确定: 用于服务开发的 Dotnet 核心(尽管与语言无
我想尝试使用 Cap'n Proto C++ RPC 进行 promise 流水线操作,但我不知道该怎么做。 这是我的模式: interface Test { getInt @0 () -> (i
我是一名优秀的程序员,十分优秀!