1. 高性能计算的大纲
课程目标
通过本课程的学习, 学生在知识、能力和素质等方面应能够达到如下的目标:
1. 了解分布式系统有关的概念和技术.
a) 对照 Super Computer Top 500 的演变,了解 SMP (Symmetric Multiprocessing), MPP (Massively Parallel Processing),Cluster 等高性能计算机架构
b) 如何搭建Cluster 集群
2. 了解所谓分布式操作系统的概念.
a) 在了解基本概念的基础上,能结合当下的部分软件来对照学习,如Swarm, Dask 等
3. 掌握分布式计算中的编程原则和框架.
a) 以 Heat Equation 和天气预报为线索,介绍如何实现拆解
b) 了解当下应受到关注的三类分布式计算框架:MPI (Message Passing Interface),CUDA/GPU (Compute Unified Device Architecture,统一计算架构) 和 大数据的MR (Map<>Reduce)
4. 通过要求学生完成相应的编程项目,以锻炼和提升学生的编程能力
a) 使用前面介绍的三种并行计算框架实现给定边界条件下的热传导的仿真
b) 鼓励学生选取自己感兴趣的研究专题(图像分类,图像检索,天气预报,张力仿真等),尝试实现相应的分布式计算程序
c) 鼓励学生选取自己感兴趣的研究专题(深度学习,电子商务网站,大数据架构等,甚至是调度程序的核心代码[鼓励学生给出改进,体验所谓的研究]),进行充分的调研和理解,最终形成纸质报告,并在课上做展示
5. 授课过程中介绍分布式计算的最新进展,以帮助学生拓展视野.
课程内容概览
本课程的教学内容可概括为四个部分:
1. 一是起着问题引入角色的分布式计算问题,暂定的是以天气预报和热传导计算(也可以选择别的问题).
a) 介绍天气预报的历史演变,引入PDE(Partial Differential Equation)的热传导;介绍热传导问题求解的数值计算内容,进而介绍工程界常用的FEM(Finite Element Method)概念.
b) 以上述内容为基础,简要介绍这类复杂问题求解的基本解决思想,也就是分治(Divide and Conquer)的哲学
c) 以上述内容为基础,简要介绍这类问题需要面临的挑战:计算量庞大。从而引出分布式计算的大背景和需要面对的挑战。
2. 分布式系统的演变.
a) 在 von Neumann 架构计算机的基础上,通过回顾分布式系统的历史,帮助学生了解不同架构的分布式系统,如 Flynn 的分类,以及MIMD (Multiple Instruction Multiple Dataflow)的更细致划分
b) 介绍Top 500 Super Computer 的架构演变.
c) 介绍 GPU (Graphic Processing Unit)和 Cluster 的搭建和配置.
3. 分布式操作系统的简要介绍.
a) 在操作系统课程知识的基础上,对比展示DOS要面对的问题,进而结合Tanenbaum 的DOS (Distributed Operating System:分布式操作系统)书籍做简要介绍
b) 结合当前的一些框架简要剖析其关键代码
c) 展示分布式系统软件的历史演变
4. 分布式计算框架.
a) 介绍三个分布式计算框架 – MPI(Message Passing Interface), CUDA (Compute Unified Device Architecture,统一计算架构)和 MR (Map Reduce)on cluster
b) 选取简单的例子简要展示三种编程框架如何实现相应的算法
c) 要求学生实现自定的分布式算法
参考书
因为本课程是综合性的, 所以, 市面上还没有见到类似组织的可以教材. 经过几轮的教学实践, 已组织完成了讲义的资料, 可供学生使用.
教学参考书很多, 例举几本如下:
[1] Distributed and Cloud Computing: From Parallel Processing to the Internet of Things. Kai Hwang, Jack Dongarra, Geoffrey C. Fox
[2] Distributed Systems 3rd edition (2017). Andrew S Tanenbaum, Maarten Van Steen
[3] Numerical methods for scientists and engineers. Richard Hamming
[4] Python Parallel Programming Cookbook: Master efficient parallel programming to build powerful applications using Python。Giancarlo Zaccone