问题标签 [pipelining]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3151 浏览

mips - 在 VHDL 中流水线化处理器需要哪些步骤?

显然,这是一个家庭作业问题。我正在尝试用 VHDL 流水线化一个简单的 5 级(IF、ID、EX、MEM、WB)单周期 MIPS 处理器。我不需要为它实施转发或危险检测。我只是不确定我需要实现哪些组件。

  1. 是否有必要为每个信号创建 D 触发器?
  2. 这里的管道实现使用 for 循环作为输出 - 这是我应该做的吗?

任何提示将不胜感激,我似乎无法在 VHDL 中找到有关流水线的很多相关信息。

0 投票
2 回答
8865 浏览

x86 - 为什么 CISC 处理器更难流水线化?在什么意义上,某些指令比其他指令“更复杂”?

根据 Miles Murdoca 和 Vincent Heuring 的“计算机体系结构和组织”,

CISC 指令不太适合流水线架构。为了使流水线有效地工作,每条指令都需要与其他指令有相似之处,至少在相对指令复杂度方面是这样。

为什么这是真的?指令的复杂性是什么意思;不是所有指令都需要一个时钟周期才能开始执行吗?如果指令正在读取或写入内存,那么它会花费更长的时间,但 RISC 处理器也会读取或写入内存(当然)?

0 投票
2 回答
6169 浏览

mips - MIPS流水线处理器项目

好吧,这个问题更像是一个讨论。我有这个pipelined MIPSVHDL.

我完全熟悉流水线的概念,但我从未使用VHDL. 有什么好的资源可以学习pipelined processorsVHDL.

我需要抢先一步吗?

0 投票
1 回答
221 浏览

ruby - 在使用 Net::HTTP::Pipeline 下载之前检查标头

我正在尝试解析图像 URL 列表并在实际提交下载之前获取一些基本信息。

  1. 图像在那里(用 response.code 解决?)
  2. 我已经有图片了吗(想查看类型和大小?)

我的脚本每天都会检查一个大列表(大约 1300 行),每行有 30-40 个图像 URL。我的@photo_urls 变量允许我跟踪我已经下载的内容。我真的希望以后能够将其用作哈希(而不是我的示例代码中的数组),以便稍后进行交互并进行实际下载。

现在我的问题(除了是一个 Ruby 新手)是Net::HTTP::Pipeline只接受一组 Net::HTTPRequest 对象。net-http-pipeline 的文档表明响应对象将以与进入的相应请求对象相同的顺序返回。问题是除了该顺序之外,我无法将请求与响应相关联。但是,我不知道如何获得块内的相对序数位置。我假设我可以只有一个计数器变量,但我将如何按序数位置访问散列?

最后,如果有更简单的方法,请随时提供任何建议。

谢谢!

0 投票
1 回答
299 浏览

assembly - ALU 的性能提高了 50%

在一个基本的 MIPS 五级流水线中,如果 ALU 的性能提升 50%,对 CPU 的整体性能会有什么影响?

0 投票
1 回答
324 浏览

mips - 流水线 -Mips 指令

我对在 mips 指令中使用流水线感到困惑。任何帮助都会很棒。提前致谢。

接下来的两个代码中的数据依赖关系是什么?其中哪一个可以通过使用stall(bubble)或forwarding来解决。为方便起见,您可以使用形状 1。


解释:


代码1:

代码2:

(对不起,糟糕的帖子,但我还不能发布图片)

谢谢。

0 投票
3 回答
295 浏览

c++ - 为什么 Visual Studio 在取消引用之前增加循环指针?

我从以下 SIMD 代码中检查了 Visual Studio 2012 的程序集输出:

循环体是:

为什么要增加ecx16,只在存储下一行时减去 16?

0 投票
1 回答
8137 浏览

computer-architecture - 了解停顿和分支延迟槽

我正在学习计算机体系结构课程。我从另一所大学找到了这个网站,该网站有迄今为止对我有帮助的笔记和视频:CS6810,犹他大学。我正在处理该网站上发布的一些旧家庭作业,尤其是这个。我正在尝试理解流水线和相关概念,特别是停顿和分支延迟槽。

我现在正在查看那个旧家庭作业中的第一个问题,并且不确定如何解决这些问题。

问题如下:

考虑以下代码段,其中 30% 的时间使用分支,而 70% 的时间未使用分支。

R1 = R2 + R3

R4 = R5 + R6

R7 = R8 + R9

如果 R10 = 0,则分支到 linex

R11 = R12 + R13

R14 = R11 + R15

R16 = R14 + R17

...

线:R18 = R19 + R20

R21 = R18 + R22

R23 = R18 + R21

...

考虑一个 10 阶段的有序处理器,其中指令在第一阶段被提取,并且分支结果在三个阶段之后是已知的。在以下场景下估计处理器的 CPI(假设处理器中的所有停顿都与分支相关,并且分支占所有执行指令的 15%):

  1. 在每个分支上,提取都会停止,直到知道分支结果为止。

  2. 每个分支都被预测为不被采用,如果分支被采用,错误获取的指令将被压缩。

  3. 处理器有两个延迟槽,分支后面的两条指令总是被取出并执行,并且

    3.1。您找不到任何说明来填补延迟槽。

    3.2. 您可以在分支到延迟槽之前移动两条指令。

    3.3. 您可以将标签“linex”之后的两条指令移动到延迟槽中。

    3.4. 您可以在分支(在原始代码中)之后立即将一条(注意:一条,而不是两条!)指令移动到延迟槽中。

我什至不确定如何开始看待这个问题。我已经阅读了该网站上的所有笔记并观看了视频,并阅读了 H&P 书中的部分内容,但仍然对这个问题感到困惑。如果有人有时间,我会很感激有人帮助我解决这个问题。我只需要知道如何开始概念化答案。

0 投票
1 回答
1202 浏览

assembly - 如何绘制代码的流水线执行

我对这个有点不知所措。我正在上计算机体系结构课程,我们得到以下汇编代码:

我们应该用暂停来说明代码的流水线执行以说明危险,然后用图解说明它实现转发。该图是一个图表(标记为 1 2 3 4.... 的列我认为是循环;行标记为指令,所以我假设给定代码的每一行)。

所以我从流水线中得到的是它允许你一次执行多个指令。但是,如果在前一条指令写入该寄存器之前调用该寄存器,它将不得不停止。这遵循 IF->ID->EX->MEM->WB,其中寄存器在 ID 中读取,并在 WB 中写入。所以我如何看待这一点,每个周期,一条指令移动到该过程的下一步,同时执行下一条指令。对我来说,这听起来像是代码必须一直停止,直到第一条指令完成对寄存器的写入,然后指令集才能继续。我不知道我刚才所说的是否接近正确,也不知道如何填写图表以显示信息......

话虽如此,看代码,我认为应该在第 4 行 (SW $S6, 0($55)) 有一个摊位,因为 $S6 仍然会在舞台上...... EX?,这意味着它有还没有写,并且必须在那个阶段停止一次,一次用于 MEM,另一次用于 WB。

任何关于我应该去哪里的帮助将不胜感激。

谢谢

0 投票
1 回答
1148 浏览

computer-science - 管道分支预测性能示例

我正在研究管道危害的示例,并正在查看以下文档中的问题 2

问题2

我发现有所帮助。

据我了解,这些策略的工作方式如下:

  1. 停止直到一切都知道:将停止直到到达 MEM2 阶段完成。据我了解,这是最简单的策略,所有 => 5、5、5 的停顿周期都是相同的。
  2. 假设未采用:将仅假设分支未采用。在这种情况下,当采用分支时,您将不得不停止 IF1 阶段之后的所有内容 => 7,0,7
  3. 假设:大致是#2的倒数;当不采用分支时,您将不得不停止 IF1 阶段 => 0,7,0

我不确定我的理解是否正确。如果有人可以批评我的解决方案并告诉我我的想法是否正确或解释我错在哪里,将不胜感激。

EDIT1:回答问题

1)你希望什么时候知道你是对的(分支决议)?

我相信您会通过 EX 步骤知道分支分辨率。

2) 你希望什么时候知道你想要什么时候选择分支(对还是错)?

我相信您会知道何时要按 AG 步骤进行分支。

3) 你什么时候知道地址?

我相信你会知道 AG 步骤之后的下一个地址。

EDIT2:“等到一切都知道为止。” 我的理解是,无论是否采用分支(有条件或无条件),管道将在 AG 阶段开始停止,并将继续停止直到 EX 阶段完成。含义:在所有情况下都必须停止 4 个周期。

它看起来如下所示:I# = IF#,M# = MEM#,ST = Stall

EDIT3:“假设未采取”。我的理解是,顾名思义,您假设每个分支(有条件的或无条件的)都被采用。这里唯一会发生的停顿是分支被占用的情况。摊位将发生在与之前相同的地方。因此,在这种情况下,在分支(有条件或无条件)发生的情况下,您将获得 4 个停顿,而在没有出现分支的情况下,您将获得 4 个停顿。

它看起来像以下

EDIT4:“假设采取”。这本质上与之前的策略相反。在没有发生分支的情况下会有 4 个停顿,但在发生分支(有条件或无条件)的情况下没有。

它看起来像以下