《超算竞赛导引》笔记

第一章、超算的发展与应用

第二课、超算的发展与架构分类

  1. 第一代SC是单指令多数据流(SIMD)的阵列处理机,第二代是具有流水结构的向量机,第三代是具有MIMD形式的共享主存多处理机系统,第四代是MPP系统,第五代是集群系统,并逐步由同构方式转为异构方式,主要由CPU+GPU或CPU+MIC(many integrated core ).

MIC

Intel MIC架构是英特尔公司专为高性能计算(HPC)设计的、基于英特尔至强处理器和英特尔集成众核的下一代平台。相比通用的多核至强处理器,处理复杂的并行应用是MIC众核架构的优势。

美国SC12大会上,英特尔正式发布了至强融核Xeon Phi,采用MIC(Intel Many Integerated Core)架构,用于高性能并行计算。MIC基于X86架构,支持多种并行模型,OpenMP、pThread、OpenCL、MPI、OpenACC、CUDA等并行编程语言,采用C、C++和Fortran三种语言进行软件移植开发,特点以编程简单(引语方式)著称,工具链丰富。

Wiki

至强融核(Xeon Phi)协处理器,是首款英特尔集成众核(Many Integrated Core,MIC)架构产品。用作高性能计算(HPC)的超级计算机或服务器的加速卡。最多72个处理器核心,每个核心拥有4个超线程,最多288个线程,超线程无法关闭。与之竞争的是GPGPU(通用图形处理器)在HPC领域应用的普及。英特尔至强融核协处理器提供了类似于英特尔至强处理器编程环境的通用编程环境。多个英特尔至强融核协处理器可安装在单个主机系统中,这些协处理器可通过 PCIe 对等互连相互通信,不受主机的任何干扰。

  1. 可以按并行计算方式是SIMD还是MIMD,以及存储器是共享的还是分布的这两个准则加以分类,一般可分为以下四类:

(1)共享存储-SIMD(SM-SIMD) (2)分布存储-SIMD(DM-SIMD) (3)SM-MIMD (4)DM-MIMD

在这里插入图片描述

第三课、SC的应用现状

1)已归纳出5种并行程序设计算法范例

在这里插入图片描述

2)已开发了各种类型的并行编程语言可供用户使用

(1)面向共享存储器的线程编程语言,如POSIX Threads、Java Threads、Open MP等。在标准的顺序语言中调用线程库中的各种例程。

(2)面向分布存储器的消息传递编程语言,如消息传递接口(message passing interface,MPI)、并行虚拟机(PVM)等。在标准的顺序语言中调用各种消息传递的库例程。

(3)开发数据并行的并行编程语言,如HPF(high performance fortran).

(4)面向异构并行架构的编程语言,如NVIDIA的CUDA编程语言。

3)已提出3种基本的并行编程模型供用户使用

(1)共享变量

(2)消息传递

(3)数据并行

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

第一课、超算集群系统的组成

集群架构目前已经成为最广泛的超级计算机架构,典型的HPC集群系统主要由五类计算(或网络)设备和三类网络组成。

五类设备主要指管理节点及登录节点、计算节点(包括瘦节点(刀片服务器,主要因为节能和节省空间)和胖节点(用于数据划分困难或对内存需求特别大的特殊应用运算等,一般采用四路以上的服务器))、交换设备(大型交换机)、I/O节点和存储设备。另外,当前很多高性能服务器都采用CPU+加速处理器异构的方式,因此有些高效能集群系统还包括加速节点。

第二课、超算集群功耗监控与管理

超算集群的能耗监控一般有两个层次,第一个层次是整集群的监控,一般以机柜为单位,每个机柜配备支持网络监控功耗功能的电源分配单元(power distribution unit,PDU),由监控软件汇总每个机柜PDU的功耗数据。这种能耗监控的数据是根据PDU整体的电压电流数据经过计算得出的,连接到该PDU的所有设备如交换机、存储等都可以监控到,也是预估电费的直接数据。

第二个层次是以节点为单位的监控,既可以通过专业监控软件监控,也可以通过一些简单的工具或操作系统自带命令实现。

机架单位是美国电子工业联盟(EIA)用来标定服务器、网络交换机等机房设备的单位。一个机架单位实际上为高度44.45毫米,合1.75英寸,宽度19英寸。

一个机架单位一般叫做"1U", 2个机架单位则称之为"2U",如此类推。

U是一种表示服务器外部尺寸的单位,是unit的缩略语,之所以要规定服务器的尺寸,是为了使服务器保持适当的尺寸以便放在铁质或铝质的机架上。机架上有固定服务器的螺孔,以便它能与服务器的螺孔对上号,再用螺丝加以固定好,以方便安装每一部服务器所需要的空间。

路是指服务器的物理CPU数量。

第三章、超算系统的网络通信

第一课、InfiniBand 技术概要

主流网络互连技术包括以太网、FC和InfiniBand,FC是为实现存储互联而设计的存储专属网络,由于其技术局限性,迄今只在存储互联领域得到广泛应用。以太网与InfiniBand同为开放网络互连技术,以太网更侧重网络协议的通用性,而InfiniBand拥有大幅领先于以太网和FC性能的优势,同时是具备软件定义网络(soft defined network,SDN)属性的智能网络。

InfiniBand架构介绍如下:

  1. HCA

主机通道适配器(host channel adapter,HCA)是InfiniBand网络的最终节点,可以安装在服务器或存储中,实现服务器、存储与InfiniBand网络的连接。

2)TCA

目标通道适配器(TCA)主要为内嵌系统定义的适配器架构,不用提供面向应用程序的标准应用程序接口(API),迄今应用只局限于很小的领域。

3)网络交换机

实现网络通信的交换

4)路由器

实现InfiniBand多子网直接互连。

5)网线与连接模块

高性能、低延迟、高效率、可靠稳定的网络互连、低功耗、数据完整性、开放性。

第二课、InfiniBand技术核心—RDMA

RDMA与TCP/IP类似属于网络传输协议,然而传统的TCP/IP技术在处理数据传输的过程中需要占用大量的服务器资源而使得TCP传输效率低下。RDMA操作使应用可以从一个远程应用的内存中读数据或向这个内存中写数据。远程节点的CPU在整个RDMA操作中并不提供服务,因此没有带来任何负载,使得CPU资源能专注于应用处理。

RDMA的技术核心:

1)零拷贝技术

网卡(HCA)可以直接与应用内存相互传输数据,从而避免了在应用程序内存与内核内存之间的数据拷贝过程。

2)内核旁路技术

内核旁路(kernel bypass)技术,当执行RDMA读/写请求时,应用程序不需要执行内核调用就可向网卡发送命令,从而减少了在处理网络传输时内核空间与用户空间之间环境切换的次数。

3)协议装载

网卡硬件中部署可靠的传输协议,从而消除通信对CPU资源的依赖。 InfiniBand与其他网络技术最大的区别就是其为应用层提供直接RDMA消息传输服务,无论是用户应用程序还是内核应用。而传统网络当应用层需要访问网络服务时,必须要通过操作系统的支持才能完成。

InfiniBand能够为系统带来极高的效率,

系统效率=实测浮点峰值(*LINPACK实测性能值*)/理论浮点峰值

理论浮点峰值=CPU sockets × CPU主频 × 每个时钟周期执行浮点运算的次数 × 系统中CPU核心数

第三课、基于InfiniBand的HPC应用优化

基于MPI规范的实现软件包括MPICH与OpenMPI.MPICH由美国阿贡国家实验室和密西西比州立大学联合开发,具有很好的可移植性。MVAPICH2、Intel MPI、Platform MPI都是基于MPICH开发的。OpenMPi由多家高校、研究机构、公司共同维护的开源MPI实现。

在MPI程序运行时,用户可以通过设置不同的Eager阈值来改变通信特点,从而获得可能的更高应用程序性能。

不同的MPI实现有不同的特性分析工具,如OpenMPI有IPM(integrated performance monitoring),Allinea可以分析多种MPI。

简单概括为CPU并行系统应用环境、CPU+MIC异构并行系统应用环境以及CPU+GPU异构并行系统应用环境,其中每一类都包含硬件环境(多核服务器、InfiniBand网线等)、软件环境(操作系统(windows/Linux)、并行运行环境(MPICH/节点内用OpenMP或PThread))、开发环境(编译器和调试器(gcc/gdb,Intel conpiler XE等)、高性能数学函数库(MKL,GotoBlas,OpenBLAS等)、高性能调优工具(intel VTune/NVIDIA Nsight))。

第四课、超算系统的应用环境

如今主流的超算系统并行应用环境分为两大类:共享存储的集群系统和分布式存储的集群系统。这里的“存储”指的是内存而非外存储器。共享存储的集群系统是由一台配置较高的多CPU组成的,CPU间共享内存,并通过内部总线互相连接。分布式存储的集群系统是由多台同构或异构的计算机节点组成的,通过网络连接起来协同完成特点任务。分布式存储的集群系统拥有很高的性价比,因此得到普遍的应用。

2007年NVIDIA公司推出CUDA架构的GPU体系解决方案。从硬件层面上,对GPU进行了高性能计算方向的优化,使之更加适合通用计算。从软件层面上,提供了同名的CUDA语言,,以类似C语言的方式,为开发者提供了简单易用的使用GPU进行高性能计算并行应用的方法。

2012年Intel公司正式发布基于MIC架构的Intel Xeon Phi系列协处理器,MIC结构采用x86指令集,使得程序源代码可以无缝移植到MIC架构,编程方面采用引语方式,以对源代码改动尽量少的方式快速移植。

在节点内,由于是共享内存模式的并行系统,一方面仍然可以选择MPI软件环境进行并行,另一方面也可以选择OpenMP或PThread方式进行并行。PThread是一种多线程库,也是Linux下的基础多线程库,也是Linux下的基础多线程库,在其他操作系统中也有PThread库的移植。OpenMP基于PThread,底层由PThread库实现。OpenMP以在源代码中插入编译制导语句的方式,屏蔽了并行程序开发的底层细节,能够以最简便的方式将程序并行化。但是OpenMP不像PThread库能够控制一些底层的细节,因此在某种情况下,性能可能会略逊于PThread。

调试器一般使用免费的GNU/GDB,或Intel公司的IDB,或TotalView公司的TotalView Debugger调试器

抽象语法树(abstract syntax tree或者缩写为AST

抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。和抽象语法树相对的是具体语法树(concrete syntaxtree),通常称作分析树(parse tree)。一般的,在源代码的翻译和编译过程中,语法分析器创建出分析树。一旦AST被创建出来,在后续的处理过程中,比如语义分析阶段,会添加一些信息。

性能调优工具——gprof

gprof是GNU的性能调试工具,包含在Linux的开发调试套装中。gprof通过在编译时增加“-pg”的编译选项,自动地在函数调用时进行“插桩”。可以在程序运行后输出每个函数的运行时间和调用关系,给性能优化带来极大方便。打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函数。产生程序运行时的函数调用关系,包括调用次数,可以帮助程序员分析程序的运行流程。

OpenCL

OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。

多线程编程语言可以分为两类,一种为编译指导,即在串行程序之前添加编译指令,指导编译器将串行指令自动编译为并行程序;另一种为显式线程模型,用户可以直接编写并行程序,显式地调用GPU的线程。相对的,编译指导比较简单,易于初学者学习、方便串行程序并行化、开发周期短等优点。但是,因为编译器自动完成串行程序并行化,所以对GPU的操作相对不够灵活。

cuDNN:专为深度神经网络设计的GPU加速函数库,可以被快速加入高层机器学习框架中。

第五章、超算系统性能评测方法

当前最常用的性能度量是“每秒浮点运算次数”(floating operations per second).

对一台给定的高性能计算机系统,其理论的峰值性能是固定的,为CPU主频×CPU单核每个时钟周期能执行的浮点操作数×系统总CPU核数

高性能计算机的性能测评通常可分为以下四大类:

1)单项测评

通常又称为微基准测试,对计算机特定部件或单项性能进行测试,常见的包括内存带宽测试、网络性能测试、I/O性能测试等。

2)整体计算性能测评

常见的测试包括HPL(high performance LINPACK)、HPCC(high performance computing challenge)、SPEC HPC(standard performance evaluation corporation high performance computing)等。目前国际和国内的SC排行榜都是基于整体计算性能测评结果进行排序的。

3)领域应用性能测评

4)典型应用性能测评

主要测试程序及应用

1.内存性能测试程序Stream

2.通信性能测试程序OMB

3.浮点计算性能测试程序HPL

HPL是通过求解一个稠密线性方程组Ax=b所花费的时间来评价计算机的浮点计算性能。为保证测评结果的公正性,HPL不允许修改基本算法(采用LU分解的高斯消去法),机必须保证总浮点计算次数不变。对N*N的矩阵A,求解Ax=b的总浮点计算次数即计算量为(2/3×N3-2×N2)。因此,只要给顶问题规模N,测的系统计算时间T,则HPL将测定该系统浮点性能值为:计算量/计算时间T,单位为flops.

常用的HPL优化策略如下:

(1)选择尽可能大的N,在系统内存耗尽之前,N越大,HPL性能越高

(2)HPL的核心计算是矩阵乘(耗时通常在90%以上),其采用分块算法实现,其中分块的大小对计算性能影响巨大,需综合系统CPU缓存大小等因素,通过小规模问题的实例,选择最佳的分块矩阵值。

(3)LU分解参数、MPI、不同BLAS数学库的性能、编译选项核操作系统等其他众多因素同样对测试结果有影响。

4.综合性能测试程序HPCC

HPCC由若干知名的测试程序组成,其选择的七个测试程序如下:

(1)HPL,获得浮点计算性能值,时空局部性均良好

(2)DGEMM,双精度实数矩阵乘,获得浮点计算性能值,时空局部性均良好

(3)Stream,获得系统内存持续带宽值,空间局部性好,时间局部性差

(4)PTRANS,并行矩阵转秩,体现系统通信性能,空间局部性好,时间局部性差

(5)RandomAccess,测试内存随机更新速率,时空局部性均不好

(6)FFT,计算双精度一维复数离散傅里叶变换,获得浮点计算性能值,空间局部性差,时间局部性好

(7)b_eff,测定系统通信带宽和延迟

HPCC虽然提供了丰富的测试结果,但并未在高性能计算界获得广泛的支持和认可,其中测试过程和结果过于复杂、无法给定易于比较的单一指标是两个重要因素。

5.领域测试程序集Graph 500 Benchmark

其所计算的问题是在一个庞大的无向图种采用宽度优先算法进行搜索。

发布了27 篇原创文章 · 获赞 15 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42306122/article/details/102149058