力学与实践, 2022, 44(1): 243-245 DOI: 10.6052/1000-0879-20-483

力学纵横:身边力学的趣话

话说超级计算1)

李新亮,2)

中国科学院力学研究所高温气体动力学国家重点实验室,北京 100190

中国科学院大学工程科学学院,北京 100049

ON SUPERCOMPUTING1)

LI Xinliang,2)

State Key Laboratory of High Temperature Gas Dynamics, Institute of Mechanics, Chinese Academy of Sciences, Beijing 100190, China

School of Engineering Science, University of Chinese Academy of Sciences, Beijing 100049, China

通讯作者: 2)李新亮,研究员,研究方向为计算流体力学、湍流以及高性能计算。E-mail:lixl@imech.ac.cn

责任编辑: 胡漫

收稿日期: 2020-11-16   修回日期: 2020-12-2  

基金资助: 1)国家自然科学基金资助项目(91852203)

Received: 2020-11-16   Revised: 2020-12-2  

作者简介 About authors

摘要

简介了超级计算(大规模并行计算)的基本概念及软硬件体系,结合笔者经历回顾了近20余年我国超级计算的发展。简要介绍了异构并行计算的基本概念以及并行计算的基本编程方式。

关键词: 超级计算; 异构计算; 并行编程

Abstract

This paper introduces the basic concept of supercomputing (large-scale parallel computing), reviews the development of supercomputing in China in recent 20 years. It also introduces the basic concept of heterogeneous computing and the basic programming method of parallel computing.

Keywords: supercomputing; heterogeneous computing; parallel

PDF (170KB) 元数据 多维度评价 相关文章 导出 EndNote| Ris| Bibtex  收藏本文

本文引用格式

李新亮. 话说超级计算1). 力学与实践, 2022, 44(1): 243-245 DOI:10.6052/1000-0879-20-483

LI Xinliang. ON SUPERCOMPUTING1). Mechanics in Engineering, 2022, 44(1): 243-245 DOI:10.6052/1000-0879-20-483

超级计算,又称大规模并行计算,是使用多个CPU协同计算,形成强大算力的一种计算方式。并行计算是当前计算机发展的主流及趋势。发展并行计算的重要原因是当前单个CPU的计算能力遇到了瓶颈,随着CPU芯片电路尺寸越来越小,电路的漏电效应、量子效应等就显现出来了,其主频提升难度越来越大。当前主流个人计算机(PC机)的CPU主频大约为3G赫兹左右,而十年前的主流CPU主频也是3G赫兹左右。单纯从主频来看,十年并没有明显提升,性能提升需要另辟途径,增加处理器核心的数目就是一条重要途径。除了CPU之外,其他计算设备也是通过增加处理器的数目来提高性能,一块显卡内部包含了数百到数千个流处理器,高端显卡甚至有上万个流处理器,靠这些处理器协同工作以达到很高的计算性能。顶级计算机更是如此,神 威$\cdot$太湖之光计算机总共有上千万个CPU核心,形成巨大的计算能力。依靠增加CPU的数目来提升性能是当前超级计算机发展的主要趋势。随着人们对计算机性能的要求不断增长,未来计算机内处理器的数目还会不断提升。

人们对计算机性能的需求是永无止境的。以湍流数值模拟为例,对湍流最为精细的模拟方法是直接数值模拟(direct numerical simulation, DNS),这种模拟方法需要分辨湍流全部尺度的流动细节。湍流是多尺度的,最大尺度与最小尺度(即Kolmogorov尺度)相差非常悬殊。以一架大型飞机周围的流场为例,其计算区域至少要几十米的尺度,而最小尺度涡为亚毫米到微米的量级。如果实现该流场的直接数值模拟,网格的尺度为微米量级,网格需要覆盖几十米的区域,网格的总数将是一个天文数字,其模拟已超出了当前最强计算机的能力。以当前超级计算机的性能而言,只能实现飞行器局部流场的直接数值模拟。强劲的应用需求推动着计算机性能不断增长,无论超级计算机还是个人计算机,其CPU的数目都不断增加,并行计算成为计算的主流。

并行计算机可分为共享存储式与分布存储式两类。共享存储计算机的多个CPU共享内存资源,所有CPU都有读写权限。当前的个人计算机(PC机)就是共享内存式的。当前PC机的CPU通常有多个核心,例如4核,8核等。这些CPU核心可以看成独立的CPU。这些CPU共享PC机的内存。共享存储系统程序编写比较容易,串行程序很容易改造成在共享存储系统上运行的并行程序。其主要原因就是由于存储空间是单一的,数据结构与串行系统相同,因而程序结构与算法无需太大改变。共享存储系统的不足之处在于其扩展性不强,CPU规模难以做得很大。其主要原因是由于多个CPU共享同一段内存,当CPU数目增加后访存冲突就会很严重,此外访存带宽也会成为瓶颈,因而共享存储系统的CPU数目通常在百核以内。大规模并行系统通常采用分布存储,即机群(cluster)构架。机群系统是由若干个独立的计算机(称为节点)通过高性能网络连接起来,节点内的CPU只能访问本节点的内存,这样可以避免访存冲突与内存带宽瓶颈,可实现成千上万节点的高可扩展性。机群系统是当今超级计算机的主流构架,其可扩展性几乎是没有止境的。20世纪末,中国科学院数学与系统科学研究院的张林波研究员建立了我国的第一个机群系统。该系统通过百兆以太网将32台PC机组成了一个局域网,并安装了Linux系统及MPI等并行软件。2000年笔者在清华大学力学系做博士后,期间也搭建了一套每秒百亿次的PC机群系统。

笔者20余年来见证了我国并行计算机的飞速发展。1997年笔者在中国科学院力学研究所做博士生,当时使用的是中国科学院计算中心的Power Challenge并行机,它的性能约每秒十亿次(浮点运算),2000年笔者使用的PC机群的性能为每秒百亿次。随后使用过千亿次的神威1号,万亿次的深腾6800,十万亿次的曙光4000,百万亿次的深腾7000,千万亿次的天河1号,亿亿次的天河2号以及十亿亿次级的神威$\cdot$太湖之光。20余年间,我国超级计算机的性能提升了一亿倍。天河1号、天河2号和神威$\cdot$太湖之光都曾排名世界第一,展示了我国在超级计算领域的实力。当前,排名世界第一的机器是日本的“富岳”,其性能为400P左右[1],即每秒40亿亿次,而E级计算机(百亿亿次计算机)也将很快面世。

1 异构并行计算

异构并行是当前超级计算机的发展趋势,排名前列的超级计算机大多采用异构体系。所谓“异构”就是采用CPU以外的加速部件来辅助计算,提升计算性能。当前最常用的加速部件是GPU,也就是常说的显卡。GPU的计算性能非常强,浮点计算性能远远超过CPU,这主要是因为GPU要快速处理图像,每秒钟实现数十上百帧图像的计算,每帧图像有上百万像素,必须有强大的计算能力,才能处理如此巨大的运算量。GPU内的处理器数目非常多,目前的高端显卡通常有数千甚至上万个流处理器。例如NVIDA RTX2080Ti显卡里面流处理器的数目为4352个,而最新推出的NVIDA RTX3090显卡里面的流处理器数目达到了10 496个。 每一个流处理器相当于一个小CPU, 这些小CPU协同工作,以提供强大的计算性能。 天河1号就是使用GPU作为加速器的。除了GPU,还有其他类型的加速芯片,例如英特尔的MIC加速卡,一块MIC卡里有61个处理器,这些处理器与英特尔CPU执行相同的指令集,只是主频略低些。天河2号就是使用MIC卡来加速的。另外,还有片内众核系统,将加速部件放到CPU内部。片内众核系统的典型例子是神威$\cdot$太湖之光,其CPU称为“申威”,每个CPU内有4个核组,每个核组包含1个主核及64个从核。每个CPU内包含了260个CPU核心(4主核,256从核)。可以看出,异构并行是依靠处理器数目的优势以实现强大的计算性能。

2 并行程序设计

超级计算机包含了大量的处理器,必须采用并行程序才能发挥其性能优势。不同硬件体系对编程的要求是不同的。共享存储系统编程相对简单,推荐大家使用OpenMP程序设计。OpenMP是一个多线程编程工具,嵌入到原编程语言中,对原始程序改动非常小。OpenMP常用的并行编程方式是在原有程序的循环体前添加类似编译指示符的语句,指示编译器将紧邻的循环体切割成多个线程并发执行。由于共享存储系统内存中的数据所有处理器都能访问,因而不需为了并行化而改变数据结构,程序移植非常便捷。当然,受共享存储系统的扩展性限制,计算难以扩展到很大规模。

大规模并行通常采用分布式存储系统。对于分布式存储系统,推荐采用MPI并行编程方式。消息传递接口(message passing interface, MPI)是当前应用最为广泛的并行编程工具。MPI既可在分布式存储系统上运行,也可以在共享存储系统上运行。MPI是一个并行函数库,可以嵌入到C, Fortran等编程语言中。MPI程序的运行机制是:前端机将MPI程序编译成可执行代码后,将代码拷贝$N$份,由$N$个进程执行,通常每个CPU(或节点)运行一个进程。虽然各进程运行的代码相同,但是其计算的任务是不同的。因为MPI程序设计时,通常先要调用MPI库函数得到本进程的ID号,然后通过程序设计安排不同ID号的进程做不同的工作。每个MPI进程有自己独立的内存空间,各进程只能访问自己的内存。如果需要其他进程的数据,可以调用MPI的通信函数(MPI_SEND, MPI_RECV等),以进程间通信的形式实现。

总之,通过大量CPU并行的超级计算是当今高性能计算机及数值计算技术发展的趋势。关注及学习并行计算技术是十分必要的。关于并行编程方面的内容可以参考笔者在中国科学院大学讲授《计算流体力学》的第14和15讲,课件和录像可从笔者网盘下载[2]。此外,推荐“超算习堂”网站[3],该网站内有大量并行程序设计的课程及资料。

参考文献

https://www.top500.org/lists/top500/2020/11/

URL     [本文引用: 1]

http://pan.baidu.com/s/1slfC5Yl

URL     [本文引用: 1]

https://www.easyhpc.net/

URL     [本文引用: 1]

/