软件模拟硬件流水线归并排序(C++语言描述)
设计概述: 算法总体如上图。但实现起来有点略微调整,不细述。 C++如何设计一条流水线来进行归并排序?当我第一次看到流水线算法的时候,我认为 这是一个硬件算法,因为有时钟,有输入输出。很容易理解每个处理器应该是一个组合逻辑 电路,然后彼此通过触发器来连接,然后有一个系统时钟来进行同步。那如何用 C++来描述 这个算法呢。( 我认为 用 模拟 比较好 , 因为 这算法 肯定 是 放在 硬件上面 比较 实用 , 流水线 与 一个重要的 资源 ( D 触发器 ) 是 密切 相关的, 而且 对 编程 来说, 流水线 导致 进程 之间的 通信 开销 往往 比较大,还需要 同 步 ,( 流水线的 下一级 要用到 上一级 上一时刻 的 输出 ),软件 语言 描述 可以做一个 逻辑 级别 验证 ) 那么需要 解决 时钟,输入 输出 ,每个处理器 内部 资源 三 个问 题。 时钟 时钟是每个集成电路模块内部的指挥官,如何模拟时钟呢?我采用了一个循环。 将每个 future 看成是一个处理器,每次循环调用每个 future。然后再循环结尾将它们.get()。 ( 同步 )。 这里需要注意的是触发器如何模拟。 如图我用了二维数组,第一个下标代表是第几个处理器。第二个下标代表它在 CLK 时刻的 输出。 注意的是第 0 个处理器(缓冲区大小为 0),它的输出一开始就是可以知道的,所以我 用了 O(n