超算竞赛导引。

第一课 超算的发展与应用

研究超级计算机的目的:

  • 促进计算机科学和技术的发展
  • 推动交叉学科发展,解决巨大挑战性问题
  • 反映经济与科技的综合实力

超算的发展

SIMD阵列处理机→流水结构向量机→MIMD共享主存多处理机→并行向量处理机(采用超标量)→MPP系统(高度并行,多至上万的处理机组成,可用NUMA、超节点或向量+超标量构成)→集群系统(早期同构,现在多采用异构,CPU+GPU或CPU+MIC(many integrated core))

当今主流的超算是集群系统,但MPP仍占有相当的比例。目前P级(每秒10^15次计算)的计算机已经成熟,E级超算已在2022年由美国推出的Frontier实现,国内的E级超算好像没有明确的消息。

超算架构

超算的架构分类可按并行计算方式是SIMD还是MIMD,存储器是共享的还是分布的加以分类。当今的超算大多以MIMD工作,存储器共享的有MVP(多向量机)和SMP(多处理器)两种,又称为UMA系统,处理器对任何存储单元有相同的访问时间。相对的有NUMA系统,存储器是分布的,但是处理器可对远程存储器以load-store形式直接访问,根据硬件是否支持缓存一致性,还可以继续进行分类。

如果并行处理器必须以消息传递方式访问远程存储器,就是NOARMA(no remote memory access)系统,这种系统中每个处理器是一个独立的计算机。MPP和集群系统都属于NOARMA系统。

MPP使用大量商用处理节点,用高带宽低时延的网络连接。而集群系统的每个节点是一个完整计算机,也可以是一台SMP或PC,每个节点有OS和支持单一系统映像的中间件。

并行程序设计算法

并行算法已经发展出了一些基本范例:

  • 阶段并行:每个阶段有计算阶段和交互阶段构成,多个阶段完成全部任务。
  • 分治并行:将问题分解后并行计算。
  • 宏流水并行:将问题分解为若干子任务,如流水线一样分别执行子任务,数据只在相邻阶段间传送。
  • 主从并行:主进程完成基本顺序部分和协调操作,通常使用静态负载平衡方法。
  • 工作池并行算法:使用全局数据结构,空闲进程从进程池获取任务,这种算法是动态分配负载的,但实现比较困难。

还有三种并行编程模型:

  • 共享变量
  • 消息传递
  • 数据并行

一些程序设计方法,需要练习使用:

  • 增量式改进
  • 存储空间换取性能
  • Cache行的垫衬消除假共享
  • 共享变量变为私有变量,设置重叠区域
  • 选择适当的数据块分配方式

第二课 超算集群系统的构建及功耗管理

1.集群组成

典型的HPC集群由五类计算设备和三类网络组成:

  • 登录节点:访问集群的唯一入口,为了保证用户数据安全性,至少采用RAID或双机热备份容错
  • 管理节点:监控集群中节点和网络的运行状态,集群的管理软件也运行在这个节点上
  • 计算节点:分为两种,痩节点主要用于执行并行计算,主流采用刀片服务器;胖节点用于数据划分或对内存需求大的特殊应用运算等,内存容量大,价格也比较昂贵
  • 异构节点:通常使用CPU,GPU或MIC
  • 交换设备:通常为有几百个端口的大型交换机
  • I/O节点和存储设备:由于高性能计算需要较大存储空间及高带宽,因此存储设备一般是专业的文件存储系统
  • 管理网络:用于管理节点和节点互连
  • 计算网络:并行任务执行时的进程间通信专用网络,对网络的带宽和延迟要求都很高,因此一般选用千兆网,IB或万兆网
  • 存储网络:向HPC集群的节点提供数据访问服务

2.功耗监控与管理

常见的低功耗技术分为两类:

  • 动态资源休眠(DRS):休眠或关闭空闲资源,需要时再动态唤醒
  • 动态速率调节(DSS):动态调节设备的运行速率

目前的商用处理器都支持这两种低功耗机制。

对于集群的能耗监控,第一个层次是对整集群监控,单位是每个机柜,第二个层次是以节点为单位。

3.构建性能均衡的超算系统

这一部分介绍了考虑系统性能均衡的一些方面,以及管理系统的一些概念性内容。

第三课 超算系统的网络通信

主流网络互连技术包括以太网,FC和InfiniBand,FC是用于存储互连网络的,而以太网和InfiniBand都是用于开放网络互连,但InfiniBand拥有性能优势,且具备SDN属性,目前已是高性能计算领域最为广泛应用的网络。

1.概要

InfiniBand可以以极低的CPU负荷来实现多种网络流量类型的高性能网络。架构介绍如下:

HCA

网络最终节点,实现服务器、存储与网络的连接。HCA之间通过通道互通,称为队列组,由发送队列和接收队列组成,应用可以直接访问HCA资源,不需要依赖OS。

TCA

内嵌系统定义的适配器架构,只用于很小的领域。

网络交换机

InfiniBand采用直通转发技术,实现网络流量的快速传递,交换机实现链路层数据流控制机制保证数据包不丢失。

路由器

InfiniBand路由器可实现多子网直接互连,随着计算系统规模增加越来越重要。

2.InfiniBand技术核心-RDMA

InfiniBand实现高带宽与低延迟的核心是支持优化的网络传输协议,使用RDMA远程内存直接访问技术。支持RDMA的方式有多种,大体分为两种:卸载与加载,卸载是将网络协议处理过程内置在网卡芯片,加载借助CPU来处理网络协议。

TCP/IP网络通信协议是因特网最基本的协议,采取分层结构,每一层通过下层提供的服务来实现自己的协议,应用程序需要多次缓存复制,并需要内核介入来完成协议处理。高性能计算和大数据的相关应用是数据传输型应用,系统不能以软件方式持续处理通信协议,CPU资源必须专注于应用处理。

RDMA使应用可以从远程应用的内存读数据或写数据,远程应用程序在本地网卡中有内存缓冲区,CPU在整个操作过程中不提供服务。发布RDMA的应用需要提供正确的类型,内存地址,远程应用会将相关数据提供给发布RDMA的应用。

RDMA技术的核心

  • 零拷贝:HCA(网卡)可以直接与应用内存传输数据
  • 内核旁路:执行RDMA请求不需要执行内核调用,可直接向网卡发送命令
  • 协议卸载:网卡硬件中部署可靠的传输协议

InfiniBand为应用层直接提供RDMA消息传输服务,应用层通过软件接口Verbs与传输层交互。为了使通用应用受益于RDMA,而且不用学习Verbs,现在已有许多上层接口,包括SRP,SDP,NFDoRDMA,MPI等。

3.基于InfiniBand的HPC应用优化

MPI已成为并行程序设计的标准,实现包括MPICH和OPENMPI。在HPC领域,并行应用程序一般都基于MPI开发。

MPI通信协议

MPI通信协议分为两类:Eager和Rendezvous协议

Eager协议下发送进程主动发送信息给接收进程,不会考虑对方是否有能力接收,非常适合对延迟要求高的小消息发送。

Rendezvous协议会在接收端协调缓存来接收信息,适用于发送较大的信息,发送进程通过协议和接收端协调缓存后才发送信息,但可能增加通信延迟。

MPI函数

MPI函数包括点对点通信和集群通信函数,每个MPI实现都有不同的调试参数。需要运行程序分析工具了解程序在每个MPI函数上占用的事件和所使用的消息大小,给出合适的参数。

MPI应用优化

不同MPI实现有不同特性分析工具,如OPENMPI有IPM,Allinea可以分析多种MPI。一个典型的例子是分析消息的大小,调整Eager和Rendezvous参数,小于一个阈值采用Eager模式,来降低通信延迟。