在多周期、流水线数据路径但非流水线控制处理器中,CPI 和周期时间是多少?
In a multi-cycle, pipelined datapath, but unpipelined control processor, what is the CPI and the cycle time?
我有点混淆流水线数据路径和流水线控制处理器,这两者有什么区别?另外,我发现一些网站使用 'pipelined / unpipelined system' 这个词,我也想对此做一些解释。
关于上面提到的问题,答案是'>1, short',但是我无法弄清楚答案背后的逻辑,所以请帮助我。
通常有单周期、多周期、流水线三种说法;还有数据路径和控制。
单周期处理器会在一个较长的周期内执行每条指令,因此其CPI为1,其周期时间为较大硬件电路中关键路径所花费的时间,通常为加载类型指令的数据路径。
多周期处理器将在几个(例如 4-5)个较短的周期内执行每条指令,因此每条指令的 CPI 为 4-5 个周期。循环时间会更短,假设循环时间不变,则循环时间将反映每个循环中所有硬件的关键路径的最大值。
流水线处理器将在5个较短的周期内执行每条指令,一条指令的5个周期与其他指令的周期重叠,这样处理器最多可以同时执行5条指令时间。鉴于此,最大 CPI 为 1,因为每个周期完成 1 条指令,尽管在大多数工作负载中各种危险会减慢它的最大值。循环时间也是 5 个循环的关键路径中的最大值。
数据路径是指通常为字大小的信息,因此在 32 位处理器上为 32 位宽。例如,来自 ALU 的两个 32 位输入和一个 32 位输出是数据路径。一些数据路径比 32 位短,例如,寄存器号是 5 位宽,立即数是 16 位宽。
控制路径指的是信号,通常为 1 位宽,用于控制查看哪些电路与忽略哪些电路。为每种不同类型的指令设置不同的控制信号。硬件是所有可能指令所需的所有不同电路的合并。每个单独的指令只使用一些硬件,但为了执行所有不同的指令类型,所有硬件都必须存在。大多数控制信号去控制一些 MUX,它选择两个数据路径之一进行转发(因此忽略另一个)。一些控制信号是multi-bit,如在ALU控制中,因为ALU操作需要几个位来区分加、或、与、减、比较等。
在同一处理器实现中拥有流水线数据路径但非流水线控制对我来说没有意义。如果处理器是流水线的,那将适用于数据路径和控制。
单周期和多周期处理器都是非流水线的,因为流水线指的是一条指令与另一条指令的执行周期重叠。这种重叠会导致未流水线处理器中不存在的危险,因为下一条指令在前一条指令完成之前开始。
我有点混淆流水线数据路径和流水线控制处理器,这两者有什么区别?另外,我发现一些网站使用 'pipelined / unpipelined system' 这个词,我也想对此做一些解释。 关于上面提到的问题,答案是'>1, short',但是我无法弄清楚答案背后的逻辑,所以请帮助我。
通常有单周期、多周期、流水线三种说法;还有数据路径和控制。
单周期处理器会在一个较长的周期内执行每条指令,因此其CPI为1,其周期时间为较大硬件电路中关键路径所花费的时间,通常为加载类型指令的数据路径。
多周期处理器将在几个(例如 4-5)个较短的周期内执行每条指令,因此每条指令的 CPI 为 4-5 个周期。循环时间会更短,假设循环时间不变,则循环时间将反映每个循环中所有硬件的关键路径的最大值。
流水线处理器将在5个较短的周期内执行每条指令,一条指令的5个周期与其他指令的周期重叠,这样处理器最多可以同时执行5条指令时间。鉴于此,最大 CPI 为 1,因为每个周期完成 1 条指令,尽管在大多数工作负载中各种危险会减慢它的最大值。循环时间也是 5 个循环的关键路径中的最大值。
数据路径是指通常为字大小的信息,因此在 32 位处理器上为 32 位宽。例如,来自 ALU 的两个 32 位输入和一个 32 位输出是数据路径。一些数据路径比 32 位短,例如,寄存器号是 5 位宽,立即数是 16 位宽。
控制路径指的是信号,通常为 1 位宽,用于控制查看哪些电路与忽略哪些电路。为每种不同类型的指令设置不同的控制信号。硬件是所有可能指令所需的所有不同电路的合并。每个单独的指令只使用一些硬件,但为了执行所有不同的指令类型,所有硬件都必须存在。大多数控制信号去控制一些 MUX,它选择两个数据路径之一进行转发(因此忽略另一个)。一些控制信号是multi-bit,如在ALU控制中,因为ALU操作需要几个位来区分加、或、与、减、比较等。
在同一处理器实现中拥有流水线数据路径但非流水线控制对我来说没有意义。如果处理器是流水线的,那将适用于数据路径和控制。
单周期和多周期处理器都是非流水线的,因为流水线指的是一条指令与另一条指令的执行周期重叠。这种重叠会导致未流水线处理器中不存在的危险,因为下一条指令在前一条指令完成之前开始。