并行计算:并行计算机与并行模型的分类
视频来源:新竹清华大学:并行计算与并行编程课程
分类:1.Flynn's classic taxonomy: 从哈佛结构 CPU的处理器做的分类,基于两个维度:指令及数据(GPU:属于SIMD)
SISD:单指令,单数据 ,单指令是指在CPU的一个时钟周期 只有一条指令发生动作,单数据是指在CPU的一个任意时钟周期只有一个数据流作为输入。
SIMD:单指令,多数据,单指令是指所有的计算单元在每个周期内执行相同的指令,多数据是指处理单元可以执行不同的数据。比如GPU,量化处理(X86 AVX指令集)。
MISD:多指令,单数据流,多指令是指 每个处理单元可以通过 分离的指令流 来独立 的处理数据。单数据是指单个数据流送入到多个计算单元中。
MIMD:多指令,多数据,每个计算单元可以执行不同的指令流,每个计算单元可以处理不同的数据流。缺点:复杂度很大。如多核CPU。
2. Memory archicture classification: 从哈佛结构 内存上进行分类
Shared Memory: 不同CPU可以访问同一个内存。根据内存的Access ,latency 及速度 可以分为一致/不一致,
一致性(UMA):所有CPU与内存直接相连,他们之间的速度是一致的。
不一致性(NUMA):多个CPU连接在一个内存上,不同内存之间存在交流,这里造成冗余。也是非一致性的原因。注意的是需要决定程序运行在哪块CPU/内存上。
Distributed Memory:不同CPU都有对应的内存,无法读取对方的内存进行沟通,各自管理。
沟通:需要一个 沟通网络 来连接内部处理 内存,每个处理器由自己独立的 内存及 地址空间, 不能任意修改 其他处理器的内存。编程时需要注意不同计算单元之间 何时 及 如何 进行 数据的传递。
3. 编程模式的分类。
并行编程模式 基于硬件及内存结构 以 抽象的形式(编程语言) 存在。本质:硬件抽象
可分为shared memory prog:用于共享内存机器,message passing prog:针对分布式系统。但编程模式不受限于共享/分布式系统,如 message passing model可以跑在 shared memory上,如signle server上的MPI, shared memory model on distributed memory 如partitioned Global Address Space(此类代价较大)。
Shared Memory : 两种编程库:Pthread(很底层,编程复杂),OpenMP(很高层次,编程简单)
Message Passing:主要在于 内存之间的沟通,内存拷贝,主要用到的库:MPI API
总结:shared memory:快,但规模受限,message passing:程序可以控制,但需要定义接送数据,且要对应,内存拷贝需要开销