Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions W3D1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# W3D1

流水线在处理的过程中会有结构的、数据的、控制的 hazards

## 结构 Hazard

一个时刻,有两条或两条以上的指令使用了同一个部件

## 数据 Hazard

主要有写后读(RAW)、读后写(WAR)、写后写(WAW)三种常见情况

最简单的解决方法是加 bubbles ,牺牲性能

从硬件上,可以加入前向 forward,提前传递信号

从软件上,由编译器安排代码顺序减少数据依赖

## 控制 Hazard

分支跳转指令的条件不确定,程序需要等待直到确定下一条指令

用流水线或使用 nop 指令处理跳转

可以采用分支预测的方法,如二位饱和预测器。但是预测失败会浪费周期

还可以采用填充的方法,即寻找一些无论是否跳转都会执行的指令,最大限度减少周期的浪费。但是效率的提升有限

82 changes: 82 additions & 0 deletions arch-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
## W8D2

### PMS (Prime Mem System)

PMS 的基本原理是:

- 每个内存模块有相同的容量 m,其中 m 是一个 2 的幂。
- 内存模块的数量 p 是一个素数,且大于 2。为了方便实现,通常选择 p 是 2 的幂加 1 或减 1 的形式,如 3,5,7,17,31,127 等。
- 每个内存单元的物理地址由两个整数 (u,v) 表示,其中 u 是内存模块中的偏移量,v 是内存模块的编号。0 <= u < m,0 <= v < p。
- 每个内存单元的逻辑地址是一个整数 d,其中 0 <= d < pm。物理地址和逻辑地址之间的关系是:v = d Mod p,即内存模块的编号等于逻辑地址对素数 p 取模的结果。
- 由于 p 是素数,任何一个长度为 n 的线性数组,只要 n 和 p 互质,就可以在 p 个内存模块中平均分布,实现无冲突的并行访问。例如,如果 p = 7,n = 10,那么数组的前 7 个元素分别存储在编号为 0,1,2,3,4,5,6 的内存模块中,后 3 个元素分别存储在编号为 3,4,5 的内存模块中。

PMS 的优点是:

- 它可以有效地利用内存空间,不需要浪费任何内存模块或填充空洞。
- 它可以提高内存性能,因为它可以避免内存访问的冲突,实现高速的并行访问。
- 它可以简化内存地址的计算,因为它只需要找到 d Mod p,而不需要计算商或余数。

PMS 的缺点是:

- 它需要选择合适的素数 p,以适应不同的数组大小和维度。如果 p 太小,可能无法容纳大型的数组;如果 p 太大,可能造成内存模块的浪费或不平衡。
- 它需要保证数组的大小和维度与素数 p 互质,否则无法实现无冲突的并行访问。如果数组的大小或维度是素数 p 的倍数,那么所有的数组元素都会被映射到同一个内存模块中,导致严重的性能下降。
- 它需要实现高效的模运算,以快速地计算出内存模块的编号。如果素数 p 很大,那么模运算可能会消耗较多的时间和资源。



### MEMS-based Storage

MEMS-based Storage 的主要特点有:

- 它使用了数千个记录头,可以同时激活,实现并行的数据读写。
- 它的存储介质是一个正方形的结构,不同于传统的圆形的磁盘,可以提高存储空间的利用率。
- 它的存储容量可以达到 1-10 GB,而存储面积只有 1 平方厘米以下,存取时间可以低于 1 毫秒,传输带宽可以超过 50 MB/s。
- 它的制造过程与标准的 CMOS 工艺类似,可以降低成本,提高可靠性。
- 它可以将存储和处理集成在同一片芯片上,利用内置的微处理器或定制的计算引擎来执行一些特定的任务,如视频编解码、加密解密等。



### Main Memory

- Wider Memory
- Interleaved Memory: for sequential or independent accesses
- Avoiding bank conflicts: SW & HW
- DRAM specific optimizations: page mode & Specialty DRAM
- Need Error correction



## W12D2

### Snoopy Cache

Snoopy Cache 是一种缓存一致性协议,它用于多处理器系统中,通过总线监听或监视其他处理器的内存访问请求,来保持缓存中的数据与主存中的数据一致。

- 写失效:当一个处理器要写入一个共享的缓存块时,它会通过总线广播一个写失效命令,使得其他缓存中的该缓存块失效,从而保证只有一个处理器拥有该缓存块的最新副本。这种策略可以减少总线的流量,但是会增加缓存未命中的次数。
- 写更新:当一个处理器要写入一个共享的缓存块时,它会通过总线广播一个写更新命令,包含写入的地址和值,使得其他缓存中的该缓存块也被更新,从而保证所有缓存中的该缓存块都是一致的。这种策略可以减少缓存未命中的次数,但是会增加总线的流量。

Snoopy Cache 的优点是:

- 它相对简单,不需要额外的硬件或软件支持,只需要在每个缓存中增加一个监听器和一些状态位。
- 它适用于共享总线的多处理器系统,可以有效地维护缓存一致性。

Snoopy Cache 的缺点是:

- 它受限于总线的带宽和延迟,当处理器的数量增加时,总线的竞争和冲突也会增加,影响缓存一致性的效率。
- 它需要所有的缓存都能监听到总线上的所有请求,这限制了系统的扩展性和灵活性。



### MESI

MESI (Modified, Exclusive, Shared, Invalid) 是一种缓存一致性协议。MESI 协议是处理多处理器系统中缓存一致性的一种方法。下面是 MESI 协议中各状态的简要说明:

- Modified (M):表示缓存行中的数据已被修改,并且该缓存是唯一持有该数据的缓存。其他处理器的缓存中可能存在过时的数据。
- Exclusive (E):表示缓存行中的数据与主存中的数据一致,且该缓存是唯一持有该数据的缓存。没有其他缓存拥有相同的数据。

- Shared (S):表示缓存行中的数据与主存中的数据一致,并且可能被其他缓存共享。其他缓存也可以具有相同的数据。
- Invalid (I):表示缓存行中的数据无效或者过时,需要从主存中重新加载。其他缓存可能拥有更新的数据。

MESI 协议的工作原理是根据读写操作来更新缓存的状态。当一个处理器执行写操作时,它会将缓存行标记为 Modified,表示它独占这个数据,并且需要将任何其他缓存中相同数据的副本标记为 Invalid。当一个处理器执行读操作时,它可以将缓存行标记为 Exclusive 或 Shared,具体取决于其他缓存是否也有相同的数据。

这种协议有助于确保多处理器系统中的缓存一致性,以防止不同处理器之间出现对同一数据的不一致操作。