Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 由具有不同延迟的操作组成的非常长的指令_Parallel Processing_Cpu Architecture_Computer Architecture_Vliw - Fatal编程技术网

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

Parallel processing 由具有不同延迟的操作组成的非常长的指令,parallel-processing,cpu-architecture,computer-architecture,vliw,Parallel Processing,Cpu Architecture,Computer Architecture,Vliw,考虑一个问题宽度等于N的VLIW处理器:这意味着它能够同时启动N个操作,因此每个很长的指令最多可以包含N个操作 假设VLIW处理器加载由具有不同延迟的操作组成的超长指令:属于同一超长指令的操作可能在不同时间结束。如果一个操作在属于同一个超长指令的其他操作之前完成执行,会发生什么情况?后续操作(即属于下一条超长指令的操作)能否在执行当前超长指令的其余操作之前开始执行?或者一条很长的指令会等待属于当前很长指令的所有操作完成吗?VLIW背后的思想是,编译器找出许多事情供处理器并行执行,并将它们打包成称

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


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

VLIW背后的思想是,编译器找出许多事情供处理器并行执行,并将它们打包成称为“很长指令字”的包

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


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

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

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

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

现在,有一个关键问题限制了已发布指令的调度 不同的延迟:注册文件的端口数。港口是最重要的 寄存器文件和操作执行单元之间的连接。 在VLIW处理器中,每个操作在一个问题槽中执行,每个问题槽 有自己的注册文件端口。就硬件而言,端口是昂贵的。 端口越多,实现寄存器文件所需的硅就越多

现在考虑以下两个循环操作要写的情况 结果与单周期操作同时写入寄存器文件 就在那之后。现在出现了冲突,正如两个行动所希望的那样 通过同一端口写入同一寄存器文件。同样,这是编译器的任务 以确保这不会发生。在许多VLIW体系结构中,操作数 在同一问题槽中执行的所有问题都具有相同的延迟。这避免了这种情况 冲突

现在回答您的问题:

你说:“如果一个操作在另一个之前完成,会发生什么 属于同一超长指令的操作?”

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

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

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

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

不需要。处理器在每个周期只需转到下一条很长的指令 单词有一个例外,就是当一个操作花费的时间超过 正常,例如,因为缓存未命中,然后管道
暂停,机器无法继续执行下一个长指令字。

您是否想到了一个特殊的ISA示例?否,我想知道后续超长指令的提取-解码-执行步骤是否严格按顺序进行。例如,当一个操作完成其执行时,它会释放一个资源:这个资源会一直保留到整个超长指令完成吗?或者属于下一条超长指令的操作是否可以代替已完成的操作进入管道?简而言之,编译器应该避免混合具有不同延迟的子指令,因为VLIW指令的并行部分受到最慢子指令的约束。我完全理解你的意思。它真正的意思是,如果您有一条长延迟指令,下一步必须执行,请尝试只向该特定数据包添加其他相等或更短延迟的指令。通常,如果您有短延迟指令来填充数据包,请这样做。如果您有一组长延迟指令,您必须执行这些指令才能取得进展,请打包短延迟指令直到用完,然后打包您需要的长延迟指令