由具有不同延迟的操作组成的非常长的指令

时间:2012-07-11 15:31:56

标签: parallel-processing cpu-architecture computer-architecture vliw

考虑一个问题宽度等于 N 的VLIW处理器:这意味着它能够同时启动 N 操作,因此每个非常长的指令最多可包含 N 操作。

假设VLIW处理器加载超长指令,该指令由具有不同延迟的操作组成:属于同一超长指令的操作可能在不同时间结束。如果操作在属于同一超长指令的其他操作之前完成执行,会发生什么?在执行当前超长指令的剩余操作之前,后续操作(即属于下一个超长指令的操作)是否可以开始执行?或超长指令是否等待完成属于当前超长指令的所有操作

2 个答案:

答案 0 :(得分:2)

我见过的大多数VLIW处理器确实支持具有不同延迟的操作。

由编译器来安排这些指令,并确保 操作执行前可以使用操作数。 VLIW处理器是 愚蠢,并不检查操作之间的任何依赖关系。当长指令 单词执行时,单词中的每个操作只是从寄存器中读取其输入数据 file,并在同一周期结束时将结果写回,如果是,则将其写回 操作需要两到三个周期。

仅当指令具有确定性时才有效,并且始终采用相同的指令 周期数。我见过的所有VLIW架构都有自己的操作 固定数量的周期,不能少,不多。万一他们需要更长时间,比如 例如,外部内存获取,整个机器只是停滞不前。

现在有一个关键因素限制了指令的调度 不同的延迟:寄存器文件的端口数。端口是 寄存器文件和操作的执行单元之间的连接。 在VLIW处理器中,每个操作在发布槽和每个发布槽中执行 有自己的寄存器文件的端口。端口在硬件方面很昂贵。 端口越多,实现寄存器文件所需的硅就越多。

现在考虑以下情况,其中双周期操作想要写它 导致寄存器文件同时作为单周期操作 就在它之后。现在两个运营都希望发生冲突 通过同一端口写入同一寄存器文件。同样,这是编译器的任务 确保不会发生这种情况。在许多VLIW架构中,操作数 在同一个问题槽中执行的都具有相同的延迟。这避免了这一点 冲突。

现在回答你的问题:

你说:“如果一个操作在其他操作之前完成执行会发生什么 属于同一条很长指令的操作?“

没有什么特别的事情发生。处理器继续执行下一个 非常长的指令词。

你说:“可以进行后续操作(即属于该操作的操作) 下一个很长的指令)在剩余的操作之前开始执行 当前很长的指令正在执行?“

是的,但这可能会在以后出现注册码冲突。这取决于 编译器来防止这种情况。

你说:“或者做一个很长的指令等待所有的完成 属于当前很长指令的操作?“

没有。每个周期的处理器只需转到下一个非常长的指令 字。有一个例外,那就是一个操作需要的时间比 正常,例如因为有缓存未命中,然后是管道 停滞不前,机器不会进行下一个长指令字。

答案 1 :(得分:1)

VLIW背后的想法是,编译器会为处理器并行计算出许多东西,并将它们打包成称为“超长指令字”的包。

Amhdahl定律告诉我们并行程序的加速(例如,VLIW指令的并行部分)受最慢部分(例如,持续时间最长的子指令)的约束。

VLIW和“长延迟”的简单答案是“不要混用具有不同延迟的子指令”。实际的答案是VLIW机器尽量不要有不同延迟的子指令;理想情况下,你想要“一个时钟”的子指令。通常情况下,甚至内存提取只需要一个时钟,因为它被分为“内存提取开始(这里是一个要提取的地址)”,唯一的可变延迟子指令是“等待先前的提取到达”这个想法是编译器生成尽可能多的其他计算,以便其他指令可以控制内存提取延迟。