问题标签 [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 投票
2 回答
399 浏览

bash - 创建非线性管道的最简洁方法是什么?

在 Bash 中创建这样的非线性管道的最干净(最简单、最有效、最短、最快、最简单、最优雅)的方法是什么?

我有三个命令:mksockircloginircpingpong。我想通过管道将stdin,ircloginircpingpong输入mksock, 并通过管道mksock输入stdoutand ircpingpong。这意味着mksockandircpingpong处于一个循环中。我画了一张图:

图表

irclogin只需要运行一次并成为mksock的第一个输入。之后,应该随时接受ircpingpongstdin 。我目前正在使用管道和这样的临时文件:

行得通,但我想知道是否有更好的方法来做到这一点。困扰我的是,我使用的是文件而不是管道来使用 tail从ircpingpong循环回到mksock 。使用管道不起作用,因为据我了解,在tail -f开始读取管道之前已将某些内容写入管道,因此它错过了它。

我必须在脚本末尾杀死 tail 也让我感到困扰,因为它不会自行停止,即使在脚本结束后也会保持套接字连接。

0 投票
2 回答
4281 浏览

mips - MIPS 结构危害

我正在尝试了解 MIPS 管道内衬以及与之相关的危害。我无法想象MIPS 指令中的结构性危险是什么样的。

我已经读到这是两个(或更多)指令需要同时使用给定硬件资源的情况。而且我之前已经看到过以时钟周期显示的示例。但是谁能提供一个简单的 MIPS 指令集示例供我查看?我很难在网上找到一个。只需查看大量有关数据危害的示例,这不是我想要的。谢谢!

0 投票
1 回答
107 浏览

parallel-processing - 解码指令模式

我正在分析Agner Fog 的 “汇编语言中的优化子程序:x86 平台的优化指南”。特别是我试图理解第 12.7 章。还有一个我无法理解的问题。作者写道:

PM 处理器中的指令解码遵循 4-1-1 模式。示例 12.6b 中循环中每条指令的(融合)μops 模式是 2-2-2-2-2-1-1-1。这不是最优的,解码需要 6 个时钟周期。这超过了退休时间,因此我们可以得出结论,指令解码是示例 12.6b 中的瓶颈。总执行时间为每次迭代 6 个时钟周期或每个计算出的 Y[i] 值 3 个时钟周期。

  1. 指令解码遵循 4-1-1 模式是什么意思,如何知道?
  2. 循环模式是 2-2-2-2-2-1-1-1。好的,但我不知道为什么解码需要 6 个周期。为什么?
0 投票
0 回答
1193 浏览

vhdl - VHDL中的流程流水线?

在过去的几天里,我一直在寻找一种为项目编写一点 VHDL 的方法,该方法将允许我触发一组数据的处理并传输结果。我正在使用的设备可以开始收集第二组数据,同时为我的 FPGA 传输完整的第一组数据提供服务,我想通过流水线来利用这一点,但我没有成功。

要触发收集,我需要以特定顺序发送一组特定的信号。在几个时钟周期和来自 FPGA 的信号之后,完整的集合然后从设备的几个端口输出。我的目标是让整个过程由一个简单的输入脉冲启动,并且在第一个脉冲的分配仍在发生的同时,有可能发生第二个脉冲。有没有办法让我发送第一组信号,然后再发送信号以输出数据,同时为第二个集合发送第一组信号,如果这有意义的话?

这是我的意思的图片。

时序图(可点击)

如您所见,来自集成 1 的数据是在第二甚至第三集成阶段发送的。load_pulse 是请求在 上输出数据的信号,DATA它可能会在发送积分 2 的第二组信号时发生很久。

这是我写的一些测试VHDL,看看是否可以通过一个简单的过程:

在此示例中,我在其信号分配仍在执行时触发该进程。这里的结果是原来的信号分配被中断,新的信号分配在之后完成x <= '1' after 25 ns,你可以在这里看到:

代码模拟(可点击)

有没有办法做到这一点,你可以向我解释或指出我的解释,或者我需要采取另一种方法吗?

谢谢

0 投票
1 回答
1255 浏览

mips - 如何找到流水线机器的执行时间?

我们正在一台机器上执行以下指令

如果机器是流水线的,大约需要 200 ps * 3 = 600 ps。

如果流水线机器运行 1,000,003 条指令,我想知道执行时间是多少?是 1,000,000 * 200 ps + 600 ps 吗?

0 投票
2 回答
136 浏览

java - 流水线或以其他方式在语言之间实时传输数据

我正在做一个项目,我无权讨论核心,但我遇到了一个绊脚石。我需要将数据从 C++ 实时传输到其他语言,最好是 Java 或 Python(约 10 毫秒延迟)。

我们有一个必须用 C ++解析的传感器。我们正计划通过蓝牙进行数据读取/输出,很可能是 Java 或 C#(我不太了解 C#,但它似乎类似于 Java)。C++ 不符合要求,因为我觉得它不够先进,无法满足我们的需要。传感器解析已经完成。数据传输将在同一台机器上进行。

以下是我思考过的方法:

  • 我们尝试将 MatLab 与 Mex 的任何东西(我不做 MatLab)一起使用来访问 C++ 程序中的函数,以将数据作为数组检索。Matlab 会太慢(我们在某处读到 TX/RX 将限制在 1-20 Hz。)
  • 将数据写入文本或其他等效的原始数据、文件,并根据需要使用其他语言打开它。

我试图查找此内容,但结果中没有显示任何用处。

0 投票
1 回答
231 浏览

exception - CPU在流水线过程中什么时候被中断或异常中断?

给定一个流水线 CPU,当执行流水线中的指令时,CPU 何时以及如何被中断或异常中断?

中断/异常在哪个阶段处理,当前流水线和/或发生中断/故障的指令会发生什么?

0 投票
1 回答
13402 浏览

http - 非持久性、持久性、流水线持久性上的往返时间 Http

网络是我攻读硕士学位的最后一门课程。我确实有一个关于如何通过流水线计算非持久性、持久性和持久性 http 的往返时间的问题。

在花了无数小时阅读有关该问题、从其他 unis 下载笔记甚至搜索 youtube 视频之后,我无法解决这个问题。

为了理解 RTT 是如何计算的,让我们假设一个客户端请求一个包含 10 个图像的 HTML 页面。[让我们保持传播延迟为零。]

请按照我的逻辑

首先,TCP 连接的 3 次握手算作 1 个 RTT。当 TCP 连接关闭时也是如此。

1) 在非 Persistent HTTP 中,我们必须建立 TCP 连接,所以到目前为止它是 1 RTT。由于我们有 10 个对象,我们将有 2*10=20 个 RTT。这导致 1RTT +20 RTT = 21 RTT。[可以计算的另一种方法是,由于每次都会打开新连接,因此对于 10 个对象,它将需要 3 个 RTT,因此需要 30 个 RTT。]

2)在持久HTTP中,我们需要一个1RTT用于连接,1个用于每个对象。这导致 1RTT+10RTT=11 RTT。[我应该添加一个 RTT 来关闭连接从而导致 12 个 RTT 吗?据我了解,它会在一段时间后自行超时。]

3) 在使用流水线的 Persistent HTTP 中,我们需要一个 RTT 来打开 TCP 连接,一个 RTT 来发送 10 个对象,一个 RTT 来关闭连接。这导致 1RTT+1RTT+1RTT=3 RTT。

对此问题的任何帮助将不胜感激!

0 投票
1 回答
228 浏览

performance - 最大化执行吞吐量的最小依赖链数量是多少?

给定由真正的依赖关系链接并周期性重复的指令链(即循环),例如 (a->b->c)->(a->b->c)->...

假设它可以拆分为几个较短且独立的子依赖链以从乱序执行中受益:

  • (a0->b0->c0)->(a0->b0->c0)->...
  • (a1->b1->c1)->(a1->b1->c1)->...

乱序引擎将每条指令调度到具有延迟和互惠吞吐量的相应 CPU 单元。

最大化执行吞吐量的子依赖链的最佳数量是多少?

根据 Agner 的手册Optimizing subroutines in assembly language第 12.15 节:“如果 CPU 无事可做,则累加器的最佳数量是依赖链中最关键指令的延迟除以该指令的倒数吞吐量”。“最关键的指导”是什么意思?是否有任何其他技术文档可以解决此类问题?

0 投票
0 回答
781 浏览

java - 如何实现以命令列表作为输入的 Jedis 流水线?

我将 Redis 与 java 一起使用,使用 Jedis 作为 redis 客户端。我有一堂课

它具有调用 Jedis 在 redis 上执行命令的方法。

RedisDBManager 中的示例方法

这里 getResource 方法从JedisSentinelPool返回一个资源。

我想在这个类中有一个流水线方法,以便它需要一个命令列表来执行并将响应作为列表返回。我希望 Jedis 的任何构造都不应该在RedisDBManager之外使用,因为外部方法应该调用负责所有职责的流水线方法。

这个问题类似于这个问题。它的不同之处在于我也想使用不同的 redis 命令并获得它们的响应。

我目前不完整的方法是修改 RedisDBManager 中的所有方法以接受是否将其流水线化到线程本地 Pipeline 对象,然后使用流水线方法同步此管道对象并返回响应。

就像是 :

有没有更好或更简单的方法?谢谢。