(本文为新竹清华大学《并行计算与并行编程》课程笔记 )
关于分布式系统和并行计算,其实没有必要非得区分个一二来。当然它们各有侧重,分布式系统是基于网络的一种软件,而并行计算更像是一种概念,这个概念可以在硬件中出现,也可以在软件中出现。再比如分布式系统更偏向于管理一组计算机,而并行计算关注的是每一个计算节点即一个处理器、一个core。因此,一个CPU或GPU芯片也是并行计算施展的领域。
在这门课程里,并行计算其实是在硬件、系统、编程模型和编程语言四个不同的层次上讨论的。
它们的应用场景也很类似:如何把一件事分给许多计算单元并行去做,或者如何协调多个计算机完成一件事。也就是说,去处理一个从1到n的分发,或一个从n到1的收集。通常认为并行计算侧重于其中前者,即由一个manager向worker分发任务。那么站在manager的角度思考问题,核心就是:效率。即,并行计算是效率导向的设计。
其实,分布式所需的硬件规模是比并行计算更大的,并行计算的一些编程模型,更不如说是所谓的 “多线程编程”。而分布式编程模型如 MapReduce,则是真正在数量庞大的机群上处理海量数据的system。听这门课程的目的,其实主要是学习并行程序设计中的一些基本思想,而非仔细钻研一门或几门并行程序设计语言。
1. 并行架构的分类
1.1 弗林分类法
Flynn在指令(Instruction)和