diff --git a/W3D1.md b/W3D1.md new file mode 100644 index 0000000..b4e9868 --- /dev/null +++ b/W3D1.md @@ -0,0 +1,28 @@ +# W3D1 + +流水线在处理的过程中会有结构的、数据的、控制的 hazards + +## 结构 Hazard + +一个时刻,有两条或两条以上的指令使用了同一个部件 + +## 数据 Hazard + +主要有写后读(RAW)、读后写(WAR)、写后写(WAW)三种常见情况 + +最简单的解决方法是加 bubbles ,牺牲性能 + +从硬件上,可以加入前向 forward,提前传递信号 + +从软件上,由编译器安排代码顺序减少数据依赖 + +## 控制 Hazard + +分支跳转指令的条件不确定,程序需要等待直到确定下一条指令 + +用流水线或使用 nop 指令处理跳转 + +可以采用分支预测的方法,如二位饱和预测器。但是预测失败会浪费周期 + +还可以采用填充的方法,即寻找一些无论是否跳转都会执行的指令,最大限度减少周期的浪费。但是效率的提升有限 + diff --git a/arch-notes.md b/arch-notes.md new file mode 100644 index 0000000..31af7c5 --- /dev/null +++ b/arch-notes.md @@ -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,具体取决于其他缓存是否也有相同的数据。 + +这种协议有助于确保多处理器系统中的缓存一致性,以防止不同处理器之间出现对同一数据的不一致操作。 \ No newline at end of file