Skip to content

Latest commit

 

History

History
310 lines (250 loc) · 7.05 KB

File metadata and controls

310 lines (250 loc) · 7.05 KB

Lecture 8: Pipelining : Clustering & Slowdown

image-20250211170936191

指标 无 Pipeline 有 Pipeline
Throughput (cycle time) $T_P+T_Q+T_R$ $\max(T_P,T_Q, T_R)$
Latency 0 3

Convolver

如果我们期望做一个 Convolver,其 $$ y_t = \sum_{i\in[0,n)} [x_{t-i}w_{i}]

w_0x_t + w_1x_{t-1} + \dots $$ $$ \text{mac} = \text{snd mult}; \text{add}. $$

<x,<y1,y2,..,yn>> (dstl n) <<x,y1>,<x,y2>,..,<x,yn>>
<<y1,y2,..,yn>,x> (dstr n) <<y1,x>,<y2,x>,..,<yn,x>>

$$ \begin{align*} [x, [a, b, c]]; &\\ \text{dstl}_3; & \qquad (\sim\lang \lang x, a \rang, \lang x, b \rang, \lang x, c \rang \rang) \\ \Delta_3(\text{fst }D); & \qquad (\sim\lang \lang x, a \rang, \lang D,x, b \rang, \lang D^2,x, c \rang \rang) \end{align*} $$

$$ \text{Cu0} = \text{snd } (\text{dstl}_n; \Delta_n(\text{fst }D)); \text{rdl}_n \text{ mac} $$

$\Delta_n$ delay 是低效的原因。因此通过引入 Anti-delays 去 cancel。 $$ \begin{align*} \text{CuCell1}_\uparrow =& \text{fork}; &(\lang x, w\rang \sim \lang\lang x, w\rang, \lang x, w\rang\rang) \ & \text{snd}(\pi_1; D). &( \lang\lang x, w\rang, \lang x, w\rang\rang \sim \lang\lang x, w\rang, \lang D,x\rang\rang ) \ \text{CuCell1} =&

\end{align*} $$

参阅 Lec 8.pdf

Design Tree

image-20250211203611897

使用 DT 去追踪不同设计的关系(设计是一个 Transform)

  • Root:Obvious 但是 Inefficient
  • Leaves:Efficient 但是不 Obvious

Control Pipelining: Cluster First

可以把 Block Group起来,如何Pipeline Group

image-20250211204913678

提升 Group Size,降低 Degree of Pipelining:更长的 cycle time,更低的 latency $$ \begin{align*} R &= D^{-1}; R; D.

&\text{(base form)} \

R^{KN} &=\left(R^K; D\right)^N; D^{-N} &\text{(grouped)} \ \text{Fully Pipelined: }& K=1, N=M & (KN=M) \ \text{No Pipelined: } & K=M, N=1 \end{align*} $$ 通过更改 $K, N$ 值,可以调整 Group Size。

Cluster a row

$$ \text{group }m,n : \left< \begin{matrix} x_{11} & x_{12} & \cdots & x_{1n}\ x_{21} & x_{22} & \cdots & x_{2n}\ \vdots & \vdots & \ddots & \vdots \ x_{m1} & x_{m2} & \cdots & x_{mn}\ \end{matrix} \right> \sim

\left< \begin{matrix} \lang x_{11} & x_{12} & \cdots & x_{1n} \rang\ \lang x_{21} & x_{22} & \cdots & x_{2n}\rang\ \vdots & \vdots & \ddots & \vdots \ \lang x_{m1} & x_{m2} & \cdots & x_{mn}\rang\ \end{matrix} \right> $$

$$ \text{row}_{K,N} = \text{row}_K (\text{row}_N, R) \text{ \\ } \text{fst}(\text{group}_{K,N}^{-1}) $$

Convolver w Counter-Flowing Data (逆流数据)

Cb1 和 Cb2 数数据流被 reverse 的设计(counter-flowing)。

image-20250211212302246

Design image-20250211212711773
Cb3
image-20250211212732160
Cb 4
Original Design image-20250211213359455
Cb1
image-20250211214347869
Cb2
Cycle Time $T_\text{mult}+kT_\text{add}$ $T_\text{mult}+2T_\text{add}$

$k$ 是每个 cluster 的 block 数。

image-20250211221238008

上图是 Critical Path Analysis。Cb4 有更短的 Cycle Time (Critical Path)。

**Critical Path(关键路径)**是数字电路中决定最大运行频率的路径。

定义:关键路径是电路中信号传播延迟最长的路径,从输入到输出所需时间最长的路径。

Critical Path = Circle Time

Cycle Time 是指一个系统每次能够接受新输入的最小时间间隔。在流水线设计中,它决定了系统的吞吐率(throughput)。Cycle Time 受限于流水线中最慢的那个阶段。

Delay(延迟)是指从输入到获得相应输出的总时间。在流水线设计中,总延迟通常是所有阶段延迟的总和。

Slowdown

Sampler

Sampler $\text{ev}_n$,每 $n$ cycle sample一次信号 $$ x , \text{ev}n, y =\forall y_t = x{nt} \ \lang\dots, x_0, x_1,x_2,\dots\rang \text{ ev}_3, \lang\dots, x_0, x_3,x_6,\dots\rang $$ Property: $$ \begin{align*} \text{ev}_n^{-1};\text{ev}_n &= id \ x(\text{ev}n;\text{ev}n^{-1})y &\Lrarr \forall t. x{nt} = y{nt} &\text{(Sample every nth cycle)} \ \text{ev}_n;D&=D^n;\text{ev}_n \ D&=\text{ev}_n^{-1};D^n;\text{ev}_n \end{align*} $$

Time     : 0  1  2  3  4  5  6  7  8  ...
Data     : 0  1  2  3  4  5  6  7  8  ...
ev3^~1   : 0  0  0  1  1  1  2  2  2  ...
ev 3     : 0  3  6  9 12 15 18 21 24  ...

可以把 $\text{ev}_3^{-1}$ 看作一个交错的流

Time     : 0  1  2  3  4  5  6  7  8  ...
Data     : 0  1  2  3  4  5  6  7  8  ...
ev3^~1   : 0  0  0  1  1  1  2  2  2  ...
Stream 1 : 0  _  _  1  _  _  2  _  _  ...
Stream 2 : _  0  _  _  1  _  _  2  _  ...
Stream 3 : _  _  0  _  _  1  _  _  2  ...

Slowdown

Slowdown $\text{slow}_n$ $$ \text{slow}_n,R = \text{ev}_n;R = \text{slow}_n, R; \text{ev}_n $$

Time     : 0  1  2  3  4  5  6  7  8  ...
Data     : 0  1  2  3  4  5  6  7  8  ...
ev3^~1   : 0  ?  ?  1  ?  ?  2  ?  ?  ...
slow 3   : 0  0  0  1  1  1  2  2  2  ...
ev 3     : 0  3  6  9 12 15 18 21 24  ...

$$ R= \text{slow}_n,R \text{ \ }\text{ev}_n

\text{ev}_n^{-1};\text{slow}_n\ R;\text{ev}_n $$

Input    : 0  1  2  3 ...

# (ev 3)^~1
(ev 3)^~1: 0  ?  ?  1  ?  ?  2  ?  ?  ...
Slow 3   : 0  0  0  1  1  1  2  2  2  ...

# Slow 3 可以视作 ev3-1 的 Stream 的合并视图
# s1: D^0 ev3^~1
# s2: D^1 ev3^~2
# s3: D^2 ev3^~3
Stream 1 : 0  _  _  1  _  _  2  _  _  ...
Stream 2 : _  0  _  _  1  _  _  2  _  ...
Stream 3 : _  _  0  _  _  1  _  _  2  ...

可以把 Slowdown 理解为对 D 的prank。例如 $$ \begin{align*} \Gamma, R&=-[R]-D-[R]-D-[R]- \ \text{slow}_n,R &=-[R]-D^n-[R]-D^n-[R]- \end{align*} $$ Conbinational $R$ $$ \begin{align*} x\ (\text{slow}_n\ R)\ y &\Lrarr x\ R\ y \ \text{so }\text{slow}_n\ R &= R

\end{align*} $$

$$ \begin{align*} D &= \text{ev}_n^{-1}; \text{slow}_n\ D ;\text{ev}_n. \&=\text{ev}_n^{-1}; D^n; \text{ev}_n \&= D^n \text{ \ } \text{ev}_n

\end{align*} $$

$$ \begin{align*} \text{slow}_n\ (Q;R) &= \text{slow}_n\ Q; \text{slow}_n\ R \\ \text{slow}_n\ [Q,R] &= [\text{slow}_n\ Q, \text{slow}_n\ R ] \end{align*} $$