国防科大计算机体系结构公开课_07多处理机

国防科大计算机体系结构公开课学习笔记。

第七章:多处理机。
后面第八章讲集群的太泛了没必要看,就此完结撒花,嘻嘻嘻✧(≖ ◡ ≖✿)

共享存储器体系结构

MIMD(多指令流多数据流)构成分类:

  1. 存储器模型
    (1) 集中共享存储器——地址空间共享

    Cache 一致性问题?私有数据供一个单独的处理器使用,而共享数据供多个处理器使用。共享数据进入 Cache 产生了 Cache 一致性问题。产生原因:I/O 操作、共享数据。—> 存储器一致性:(参考分布式的一致性,可以总结为)严格一致性、顺序一致性、因果一致性。如何保持一致性?写作废 (lazy) /写更新(一旦更新就广播)。
    (2) 分布式存储器结构——每个节点包含处理器、存储器、I/O,适用于局部存储器访问,需要高带宽的互联。

    缺点:通信复杂,处理器间访问延时大。
    基于目录的一致性。目录:用一种专用的存储器所记录的数据结构,它记录着可以进入 Cache 的每个数据块的访问状态、该块在各个处理器的共享状态以及是否修改过等信息。(开销比较大)

  2. 通信模型
    (1) 共享地址空间的机器。利用 Load 和 Store 指令中的地址隐含地进行数据通信;
    (2) 多个地址空间的机器。通过处理器间显式地传递消息完成。—> 代价相对较高。

两种地址空间的组织方案
(1) 物理上分离的多个存储器可作为一个逻辑上共享的存储空间进行编址。这类机器的结构被称为分 布式共享存储器 (DSM) 或可缩放共享存储器体系结构。
(2) 整个地址空间由多个独立的地址空间构成,它们在逻辑上也是独立的,远程的处理器不能对其直接寻址。每一个处理器-存储器模块实际上是一个单独的计算机,这种机器也称为多计算机。

通信机制的性能指标:

  1. 通信带宽——理想状态下的通信带宽受限于处理器、存储器和互连网络的带宽;
  2. 通信延迟——通信延迟的构成为:通信延迟 = 发送开销 + 跨越时间 + 传输延迟 + 接收开销;
  3. 通讯延迟的隐藏——如何才能较好地将通信和计算或多次通信之间重叠起来,以实现通讯延迟的隐藏。

依据应用特点可把多机工作负载大致分成两类:单个程序在多处理机上的并行工作负载和多个程序在多处理机上的并行工作负载。

互联网络

(这块儿不想学,溜,主要就是静态网络动态网络、网络拓扑、怎么优化路径之类的)

同步和同时多线程

同步

旋转锁:旋转锁(spin locks)是指处理器环绕一个锁不停地旋转而请求获得该锁。当锁的占用时间很少以及加锁过程延迟很低时可采用旋转锁。

1
2
3
            DADDUI      R2, R0, #1
lockit: EXCH R2, 0(R1) ;原子交换
BNEZ R2, lockit ;是否已加锁?

两点好处:

  • 可使环绕的进程对本地 cache 块进行操作
  • 可利用锁访问的局部性

本地 Cache 旋转锁的代码:

1
2
3
4
5
lockit:     LD      R2, 0(R1)      ;取锁值
BNEZ R2, lockit ;锁不可用,一直旋转
DADDUI R2, R0, #1 ;存入锁值
EXCH R2, 0(R1) ;交换
BNEZ R2, lockit ;如果锁不为 0,转移

三个处理器竞争锁的操作

步骤 处理器 P0 处理器 P1 处理器 P2 锁状态 总线/目录操作
1 占有锁 环绕测试 lock = 0 环绕测试 lock = 0 shared
2 将锁置为 0(释放锁) (受到作废命令) (受到作废命令) exclusive P0 发锁变量作废消息
3 Cache 失效 Cache 失效 shared 总线/目录处理 P2 Cache 失效,锁从 P0 写回
4 总线/目录忙则等待 Lock = 0 shared P2 Cache 失效处理
5 Lock = 0 执行交换,导致 Cache 失效 Shared p1 Cache 失效处理
6 执行交换,导致 Cache 失效 交换完毕,返回 0,置 lock = 1 exclusive 总线/目录处理 P2 Cache 失效,发作废消息
7 交换完毕,返回 1 进入关键处理段 Shared 总线/目录处理 P2 Cache 失效,写回
8 环绕测试 lock = 0

cache 失效是啥意思?会导致啥结果?

栅栏同步:所有到达栅栏的进程都到达后方打开栅栏。栅栏的典型实现是要用两个旋转锁:一个用来记录到达栅栏的进程数,另一个用来封锁进程直至最后一个进程到达栅栏。栅栏的实现中要不停地探测指定的变量,直到它满足规定的条件。
排队锁 (queuing lock):在基于目录的机器上,通过硬件向量等方式来进行排队和同步控制。在基于总线的机器中要将锁从一个进程显式地传给另一个进程。

同时多线程

我不管了不想学了不记了 _(:τ」∠)__