并行与分布式计算导论(二)编程模型与硬件模型

Section 2 编程模型与硬件模型

2.1 并行模型与结构

2.1.1 System Layers(不重要)

  1. 并行程序
  2. 编译器、运行环境
  3. 操作系统
  4. 微结构(硬件设备)

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就返回了

编程模型强加在程序上的结构

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的进一步细分 共享内存的结构
    分布式内存结构
    混合型结构
    格点结构 有局域网和/或广域网联接的分布式异构资源
经验分享 程序员 微信小程序 职场和发展