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



考虑一个问题宽度等于N的VLIW处理器:这意味着它能够同时启动N个操作,因此每个超长指令最多可以由N+em>操作组成。

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

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

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

只有当指令是确定性的,并且总是采用相同的指令时,这才有效循环次数。我见过的所有VLIW体系结构都有需要固定数量的循环,不少于,不多于。以防它们确实需要更长的时间,比如例如一个外部内存获取,整个机器就被简单地停止了。

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

现在考虑以下情况,其中两个循环的操作想要写入在单个循环操作的同时将结果写入寄存器堆就在那之后。现在发生了冲突,因为双方都希望通过同一端口写入同一寄存器文件。同样,这是编译器的任务以确保这种情况不会发生。在许多VLIW体系结构中,操作数在同一个发布槽中执行的都具有相同的延迟。这样可以避免这种情况冲突

现在回答您的问题:

你说:"如果一个操作在其他操作之前完成了它的执行,会发生什么属于同一超长指令的操作?"

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

您说:"后续操作(即属于下一个超长指令)在的剩余操作之前开始执行当前正在执行的超长指令?"

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

你说:"还是一个很长的指令等待所有指令的完成属于当前超长指令的操作?"

没有。处理器在每个周期都只执行下一条很长的指令单词有一个例外,那就是当一个操作花费的时间超过正常,例如因为缓存未命中,然后管道停滞,并且机器不进行下一个长指令字。

VLIW背后的理念是,编译器为处理器并行计算出许多事情,并将它们打包在称为"超长指令字"的捆绑包中。

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

VLIW和"长延迟"的简单答案是"不要混合具有不同延迟的子指令"。实际的答案是VLIW机器尽量不具有具有不同延迟的子指令;理想情况下,您需要"一个时钟"子指令。通常,即使是内存的提取也只需要一个时钟,因为它被划分为"内存提取开始(这里是要提取的地址)",唯一的可变延迟子指令是"等待上一次提取到达",其思想是编译器生成尽可能多的其他计算,以便其他指令覆盖内存提取延迟。

最新更新