面向研究生的高性能计算课程建设

2020-07-10 05:52孔令波
计算机教育 2020年4期
关键词:高性能编程报告

孔令波

(北京交通大学 软件学院,北京 100044)

0 引言

在新工科[1]建设的推动下,以学科交叉和贴近实际工业技术为特点的课程建设,日益得到教育从业者的认可,而随着大数据分析日益受到IT企业界关注,相关概念和技术的课程也就逐步纳入大专院校的必备课程[2-9]。北京交通大学软件学院顺应此趋势,更新了研究生的课程,分布式计算课程便是其一。

分布式计算的很多内容与冠之以科学计算的专题有很紧密的联系:它们实际的计算都依赖类似的高性能计算资源。因此,使用高性能计算来串接相关的概念和技术也更为贴切,这对于“学科交叉和贴近实际工业技术”是有益的。

1 课程内容的抓手和课程建设思路

在综合考量高性能计算和分布式计算相关技术的演变以及当下的典型应用案例后,可以选取“科学计算+大型商务计算架构”为线索来串接相关的专题。

1.1 抓手:科学计算+大型商务计算

自从1929 年《纽约世界报》首次使用了“超级计算(Supercomputing)”这一名词,高性能计算一直到现在仍然是一个国家综合国力的体现之一。按照Top 500 的统计,进入21 世纪以来,主流的(超级)高性能计算机的架构集中在两类——MPP (Massively Parallel Processing,大规模并行处理)和集群(Clustering system),而且后者的数目比前者越来越多。

基于这类高性能计算资源的应用,到如今不仅涵盖更多的科学计算问题(如天气预报、生物信息学、药品研发、石油存储的推演等),而且也体现在大型商务计算中(以亚马逊、阿里巴巴、12306 为代表的公司也需要更为强大的计算能力)。为此,高性能计算的内容也应体现这些特征,以这两个应用作为线索串接相关的专题是顺理成章的方案。

本课程所设专题的架构如图1 所示。顶层展示了两个不同领域的应用——科学计算和大型商务计算,虽然它们各自的计算有很大的不同(图 1 中间部分),不过,发展到现在,它们所依赖的计算资源和技术支撑都有很大的交叉,即图 1 的底部两层所揭示的:二者的计算都可以使用如MPI、CUDA 甚或Map/Reduce 的框架;二者所依赖的计算资源可以是MPP 也可以是集群甚或是现在数据中心(Data Center)、云计算(Clouding)等。这些也是课程专题设计的基础。

图1 课程专题结构示意图

这种交叉对于软件学院的学生是非常有益的,这是因为时代发展到现在,计算机编程已经成为许多专业学生都要掌握的技巧,甚至其他专业的学生使用计算机解决问题的能力比囿于软件和计算机专业的学生更为有竞争力:受专业所限,软件学院的学生想要了解其他专业的编程门槛很高——那些应用背景的数学理论和专业理论就很难;而相对而言,其他专业的学生学习计算机和软件的门槛较低。为软件专业的学生介绍科学计算的内容,帮助他们扩展视野是非常有价值的。

1.2 课程建设指导思路:贯通与综合

要贯彻前面所述的思路,就需要覆盖所涉及相关概念和技术的重要专题(详见2.1 的内容),这对于授课老师自然是很大的挑战,不仅要自己深入学习和理解那些技术,而且还需要慎重地筛选和编纂适当的材料以便能够向学生深入浅出地展示。

在实践的基础上,提出“贯通与综合”的建设思路,即凡是有益于学生理解和掌握高性能计算的专题,都应该简明扼要地串接起来。

(1)贯通的思路主要体现在两个方面;一是如前所述,相关专题使用科学计算和大型商务计算来串接;二是课程实施时要理论也要落地,即要帮助学生了解和掌握相关技术的理论和历史演变,也要求学生动手实践。

(2)综合的思路也主要有两个方面;一是在专题和项目的设计中不仅要兼顾理论也要兼顾实际编程和框架的使用;二是作为面向研究生的课程,项目设计还要体现研究的要求。

1.3 教学方式的选择:教学相长

为贯彻前面提出的贯通与综合的课程思路,在教学方式上实行了教师和学生各负其责、相互学习的形式,即教师负责串讲与理论和技术历史演变的部分;而学生在接到课程项目的要求后,自由组团(每组上限5 人),自主学习和了解实现的技术,并在课上作报告。

学生上讲台向其他同学作报告展示其所完成的项目,不仅有助于学生自学能力的锻炼,而且有助于提升组织内容和报告的能力。此外,同学间的交流有时候比教师更能抓住学生的理解盲点:学生彼此之间的知识水平相近,某同学不明白的,极有可能也是其他同学所不了解的。

实践表明,这样的安排既因为有所分工而可以覆盖更多的内容,又能实际锻炼学生的学习、实践和组织报告的能力。在第一年教师负责的串讲专题包括了MPI、CUDA 和Map/Reduce 等编程技术,而在第二年中就只是提供了那些技术的幻灯片,然后布置项目让学生自己去学习和实现,学生也很好地完成了。

2 课程建设

2.1 专题设计概述

在确定了课程的指导思路后,接下来首先需要确定将哪些专题纳入本课程。本课程的专题是按照科学计算和大型商务计算两个抓手来贯穿的,也是教师主要负责的部分。

(1)课程概述。介绍本课程的建设采取科学计算和大型商务计算来串接的设计思路,以及课程考核的方式。

(2)开发技术简介。介绍完成本课程项目可使用的开发技术。有鉴于Python 在数据分析领域被广泛使用,所以,选取其作为本课程默认的开发语言,展示了如何基于Python 实现MPI、CUDA 和Map/Reduce 的编程流程。不过,也建议学生选取其他语言如Java 来实现相关的项目。

(3)科学计算导引。以最早的科学计算问题“天气预报”为例,介绍PDE 建模的方法,以及数值计算方式求解的高计算量,使学生对高性能科学计算有直观的认识。

(4)并发编程的范式。在提供PDE 方程数值计算的串行代码后,介绍并行程序设计的范式(如BSP 模型:Bulk Synchronous Parallel,整体同步并行计算模型),引导学生思考如何将串行代码转换为MPI、CUDA 和Map/Reduce 程序[10-12]——这也是要求学生实现的3 个课程项目。

(5)高性能计算机历史。

扼要阐述高性能计算机的历史,并结合Top 500 网站的信息,揭示当前高性能计算机的主流架构是MPP 和Cluster,并点明基于所谓云计算平台上的编程方式与基于集群的编程方式是相通的。

(6)运行平台的设计与实现。类比于剖析经典软件(操作系统、编译器和数据库管理系统)的设计与实现在传统计算机专业中的地位,了解支撑高性能计算程序运行的平台的设计与实现,同样有着重要的价值。本节梳理了这方面的内容,借鉴操作系统的内容设计,按照资源管理和作业调度两个线索,以“以点盖面”的方式介绍了所涉及的概念和算法。

(7)大数据概览。

虽然软件学院的研究生多少接触过大数据的技术,不过,本节的侧重点在于从历史的、宏观的角度介绍大数据的软件生态和典型应用,如示意Flume、Kafka、Zookeeper 和Spark 等软件搭建实时日志分析的案例,以帮助学生有较为完整的了解。

(8)大型商务计算的架构演变。以典型电子商务系统为例(如亚马逊、京东和阿里巴巴的淘宝等),从架构的角度展示这类大型商务计算如何应对高并发的问题,涉及CDN (Content Delivery Network,内容分发网络)、反向代理、负载均衡服务和微服务等技术,以及部分算法的并发编程实现。

本课程所涉专题以及各专题覆盖的主要内容见表1。虽然内容很多,但是,有些是深入讲解,而有些是简介,让学生有了解即可,以便于后续他们需要的时候知道有哪些技术。

2.2 课程项目设计

为有效提升学生的动手能力、自主学习能力以及研究素养,本课程设计了有针对性的5 个项目。

其中的3 个编程项目是要求学生在提供的热传导数值求解的串行程序代码基础上,尝试转换为MPI、CUDA 和Map/Reduce 实现。

剩下的两个项目分别是技术报告和论文研读报告项目,前者建议学生选取有代表性的软件深入调研它们的原理、设计与实现;后者则要求学生选取有关的研究性论文进行研读,并复现论文的算法。

表1 课程建设所设专题及覆盖内容

所有这些项目都要求学生提交文档和代码,并做课上报告和代码展示。

两轮课程实践下来,对于编程项目,最为复杂的是MPI,CUDA 最为简单。但是,处理大规模数据还是得 Map/Reduce 架构,但是性能堪忧:要重启作业。技术报告覆盖了Zookeeper、PIG、Kafka 等软件,虽然剖析并不很深入,不过也锻炼了学生学习、提炼和梳理的能力。论文研读包括CNN(Convolutional Neural Network,卷积神经网络)在CUDA的实现,PAXOS和Peacock[13]论文等。

2.3 课程考核

考核是学生所关注的。每个项目都设定基本的功能,如果能够达成,则占70%(在报告过程中会详加检验),浮动部分占比可达20%,具体取决于学生是否在实践中有亮点。最后,提交支撑材料(代码、幻灯片和文档)部分占比10%。

在本课程建设中,采取了课堂报告的形式,报告过程中鼓励学生相互提问,并在完善后需要再次报告,取其最高水准作为报告的分数(其他还要看提交的资料的完善程度)。这既体现了相互学习、教学相长,也能够督促学生积极深入调研。所以,总体而言课堂报告是既轻松也紧张的,不过,总体是比较热烈的。

3 结语

在高性能计算课程建设过程中,通过纵览相关技术的演变,以及不同技术的使用程度[10,12,14]提炼出以“科学计算+大型商务计算架构”为线索串接高性能计算的概念和技术。受课时所限(北京交通大学软件学院对研究生课程限定是32 学时),在课程实践教学中贯彻“教师串讲+学生互助学习”的方式,即教师负责对提纲挈领的知识做专题讲授,在阐述项目设置后,放手让学生去自主学习,最后通过学生课堂报告的方式加以现场检验。

到如今,本课程已经完成了按照本文思路进行的两轮授课实践。学生的反馈还是令人欣慰的:不仅表现为学生对所讲授的知识点能够有所领悟,而且,他们也很有兴趣亲手调试和完成相关的项目,普遍反映有了将以前所学知识融汇贯通并大大扩展眼界的感觉。

不过,对于建设好一门课程而言,这仅仅是开始,还需要更为深入的探讨和实践:①因为课时的限制(只有32 学时),后续准备尝试翻转课堂的教学方式;②实验环境的建设;③教师应就学生选取的专题作深入的提炼;④期待能体现“学科交叉和贴近实际工业技术”的书籍。

猜你喜欢
高性能编程报告
高性能轻集料混凝土运用分析
高性能混凝土配比设计研究
元征X-431实测:奔驰发动机编程
高性能混凝土不同配合比下的性能研究
编程小能手
纺织机上诞生的编程
新型“纺布工” 纺就高性能CFM——记国家自然科学基金青年基金获得者王晓旭
学编程,先画画
报告
报告