个人blog原址: 一些笔记与思考 ,后续基本都会同步到知乎~
这两天重新看了《并行程序设计导论》,以前看过编程范式里的一些泛型编程,对于编程模型有些浅薄的思路,趁机记录一下。有经验的大神可以直接跳到第四部分看看本鶸的一些思路。
一、背景介绍
计算机比较原始的三大领域:存储、通讯、计算。
几年前老大做了分布式存储,去年做了异步通信,最近他要做并行计算了。
于是我上周学着以前做过的MIT 6.824课设的做法给做了个demo,老大不满意,说这个模型不希望上来就考虑存储,要把最抽象的语义提炼出来。我想了想,这其实就是hadoop与MPI的关系。
同样作为分布式框架,MPI的想法是计算和存储分离的,而hadoop因为有hdfs,所以属于计算向存储的迁移。可以说后者是前者的演进,但是MPI更为通用。
我们的workflow里的算法工厂一直秉承着这样的设计思想:所有基本算法任务都是符合通用算法的,进而在上面做行为派生。那么在我们想设计一类基本算法任务(比如排序、合并、归约),它的最小需求集是什么?
带着这个问题我看着书写了如下笔记与思考。
二、本书纲要
我看的英文版,几大章节分别是:
Chapter 1 Why Parallel Computing?
Chapter 2 Parallel Hardware and Parallel Software
Chapter 3 Distributed-Memory Programming with MPI
Chapter 4 Shared-Memory Programming with Pthreads
Chapter 5 Shared-Memory Programming with OpenMP
Chapter 6 Parallel Program Development
可以看到,并行计算可以按照内存中的并行或者分布式机器上的并行进行划分。本书介绍的pthreads,OpenMP,还有先前从入门到放弃的cuda编程都是属于前者,而MPI hadoop spark都属于后者。
第六章里有非常实用的例子是分别用这两种类型的编程思想去拆解n体问题和树型搜索问题。
三、MPI基本笔记
1. 启动