并行与分布式计算导论(二)编程模型与硬件模型
并行与分布式计算:编程模型与硬件模型(二)
Section 2 编程模型与硬件模型
2.1 并行模型与结构
2.1.1 System Layers(不重要)
- 并行程序
- 编译器、运行环境
- 操作系统
- 微结构(硬件设备)
2.1.2 三种并行编程模型(重要)
三种模型在展示给程序员的程序通讯的抽象结构上有所不同
不同的编程模型会影响程序员编程时的思路
Shared address space(SAS Model)
- 各个线程通过读写共享的变量来实现通讯
- 共享变量就像一个大的公告板
- 几个例子(明白SAS的大意即可,不比深入理解下面的计算机体系结构)
- Non-uniform Memory Access
Message passing
- 各线程在自己的私有地址空间里运作
- 线程间通过收发消息交互
常用的库:MPI
硬件不需要在整个系统范围内装载和存储跨程序信息,只需要能够交换信息即可
- 注意,既可以在硬件执行共享地址空间的机器上搞message passing的抽象,也可以在不支持共享地址空间的机器上执行SAS
- 程序模型和机器类别的相关性是模糊的,只需要记住什么是编程模型,什么是硬件实现就行
Data parallel
- 历史上的DP是对一个array进行同一操作(例如克雷超级计算机就是一个向量处理器)
- 例如matlab的操作C=A+B,其中A,B,C都是向量
- 现在一般采取SPMD的编程形式(具体如下)
- map(function,collection)
- function独立的处理每一个元素,function可能是一个复杂的逻辑序列(从而用一个统一的function区分处理不同元素)
- 在map结束时,同步是隐含其中的
- 当function已经作用于集合的所有元素,map就返回了
- map(function,collection)
编程模型强加在程序上的结构
SAS:对结构的强制性要求很少
MP:高度结构化的通讯
DP:非常死板的计算结构
- DP程序对同一个集合的不同数据元素都执行相同的功能
现代实践(混合编程模型)
- 比较常见的实例
- 在同一个节点的内部多核之间使用共享地址空间
- 在节点层面使用massage passing
2.1.3 三种机器结构(不重要)
机器结构通常反映了硬件设备的能力
机器结构是一种硬件向软件呈现的抽象形式
(我不是很理解,原句为"Abstraction presented by the hardware to low-level software")
下面的东西比较ICS,我反正是不懂
Flynn分类法
- XIYD 即X instruction Y Data,其中X、Y为single或multiple
- 从而有SISD MISD SIMD MIMD四种
SISD
实例:单核计算机——一个数据池,一个指令池,线性的处理任务
SIMD
MISD
MIMD
-
MIMD的进一步细分
- 共享内存的结构
- 分布式内存结构
- 混合型结构
- 格点结构
- 有局域网和/或广域网联接的分布式异构资源