多种并行实践平台的搭建
根据现在的并行体系流行趋势,选择几种主流并行模型平台作为课程实践基地的实验平台,如MPI集群、Hadoop生态体系、Spark、CUDA等。下面分别对它们各自的特征和适用场景加以介绍。
(一)MPI集群
MPI(消息传递接口)是一种语言无关平台无关的集群通讯协议[3],它支持点对点通信和广播,具有保性能、大规模可扩展和跨平台可移植的特点。MPI是一个用于信息传递的应用程序接口,它规定了通信协议和语义,并指明如何在各种并行编程实现中充分发挥其特性。MIP是一种较为传统、成熟的并行集群通信协议,在今天仍为高性能计算的主要模型,在多种实际场景中仍发挥着重要的作用。
MIP尤其适合于分布式内存并行架构,在这种模式下,进程(或处理器)都有自己的本地内存,例如,内存可能会分布在整个网络,但单个计算机上的每个线程只能用本地分配给它的内存。甚至在同一台机器上的不同进程都有独立的内存位置。在这种模式下不同的进程通常需要与其他进程沟通以获取和发送数据。
实验基地当前使用的是MPICH3.1.4版本,以MPICH构建的并行实验平台可以满足大多数传统分布式并行集群上的并行程序设计的要求,应用的范围广,对于初学并行计算的同学理解并行程序设计思路很有帮助。
(二)Hadoop生态体系
Hadoop是Apache软件基金会发起的一个项目,随着大数据时代的到来以及非结构化数据的广泛分析和挖掘,Hadoop受到了前所未有的关注。
Hadoop是一种擅长于处理海量半结构化数据集的分布式计算框架,它同时具有完备的容错能力,大数据集被分成小块随机、多备份地存放于各个节点,所以一个磁盘的失败并不会带来数据丢失。Hadoop框架上采用的并行编程模型是MapReduce,一种适用于处理大量半结构化数据集合的编程模型,尤其适合于数据密集型应用计算,可以将成千上万的普通PC机连接起来形成一个功能强大的Hadoop云计算集群,对于当今大数据时代的海量数据处理意义重大。
(三)Spark
Spark是当今最新最热门的类Hadoop的MapReduce通用并行框架,它拥有Hadoop的所有优点,优于Hadoop的最大特点是:Job运行的中间结果可以存储于内存中,而不必写会文件系统,从而减少了反复高频率的Hadoop文件系统的读写操作,因此Spark能更好地适用于计算密集型计算任务,尤其是数据挖掘与机器学习等需要反复迭代的算法。利用机房的数十台普通PC机器,构建Spark云计算平台,既能锻炼学生理解云计算、理解分布式计算处理的能力,又能培养学生的应用并行计算技术解决实际科研领域问题的能力。
(四)CUDA
GPU近年来成为并行计算界的宠儿,它最早为三维计算机图形学中的顶点和像素数据的快速并行处理而设计,因此具有很高的浮点运算速度,实际中,GPU的浮点运算速度可以达到CPU的5倍以上。这种差别,使得GPU在一些特定的场合比CPU具有更好的适应性。而近年来为了适应通用计算,专业生产厂商又对传统GPU进行了一系列的改进,使得它在通用并行计算领域具有了很好的用武之地,其天生并行的体系结构决定了GPU非常擅长以高并行度运行高强度的浮点运算。
针对GPU上的编程,CUDA是应用最广的编程模型,本课程重点介绍CUDA中基于多核的SIMT细粒度并行方式[4]和对存储器的显示操作,有了CUDA这种教学工具,有助于学生更深入地理解硬件体系结构与并行算法的对应关系,从而设计出符合硬件体系结构特征的高性能并行程序。
在教学中,我们发现,在CUDA的学习初期,学生一般感觉细粒度的并行程序设计较难掌握,但只要铺垫好前期的计算机体系结构知识,在具备一定的编程语言基础,就可以通过短短几周的学习基本掌握CUDA并行编程模型。与此同时,我们发现鼓励学生增加课后算法编程实践,会收到意想不到的飞跃,另一方面原因在于实践本身对知识理解的巩固作用,一方面GPU编程模型可以轻而易举获得的数十倍的性能加速往往给学生带来了超乎想象的成就感,这种成就感可以促进他们进一步探索、研究。