您现在的位置: 晨光科技 >> 文章 >> 新闻、背景、评论等 >> 国际高新技术 >> 正文  
  ASC超算竞赛完整备战指南(ASC18华农队长呕心力作)         
ASC超算竞赛完整备战指南(ASC18华农队长呕心力作)
[ 作者:佚名    转贴自:https://baijiahao.baidu.com/s?id=1623535574079054530    点击数:80    更新时间:2021/5/24    文章录入:LA ]
[注:本站登载的某些文章并不代表本站支持或反对其观点或肯定其真实性]

我是周恒,华中农业大学2015级计算机科学与技术专业学生,曾参加ASC17,ASC18Final(队长),现任华中农业大学信息学院超算俱乐部会长,目前保送至华中科技大学光电国家研究中心。1月21日我将在2019 ASC世界大学生超级计算机竞赛集训营做现场分享,欢迎大家来面基。关于如何备战ASC,整理了一些个人的经验,希望能对大家有所帮助。

对于大一新生来说,选择哪个方向可能还为时尚早,最重要是打好编程基础,可以通过多刷算法题来提高自己的编程能力。经过一年的编程训练,相信你的编程能力以及突飞猛进,大二上学期对ASC超算竞赛进行入门学习了,可以看看《超算竞赛引导》(科学出版社)的第一篇,里面对超算的一些基本概念和基础知识都有讲解,可能在刚开始看的时候会有许多概念不懂,这些知识可能涉及计算机组成原理、体系结构、操作系统、并行分布式计算等知识,这些不懂的地方可以在网上找到相关的答案,如果还是不懂也没关系,等学习到后面,你就会领悟其中的奥妙。
对于有过参赛经验的老队员来说,自己应该选准方向进行深耕,多参与相关方向的科研项目,提升自己的实战经验,实战经验非常重要。另外,《超算竞赛引导》(科学出版社)的第二篇和第三篇有专门针对ASC超算竞赛的介绍以及往年赛题的题解以及参赛队的经验分享,值得学习和研究。
Part1 超算学习入门
入门之前应该掌握以下基础概念(本入门教程仅供参考,应根据自己的实际情况进行调整):
什么是超算?
什么是并行计算?什么是并行分布式计算?为什么需要并行分布式计算?
什么是线程?什么是进程?
如果你掌握了上面的这些概念,那么恭喜你,可以进行下一步的学习了。接下来可以尝试并行计算方面的学习,注意,这一阶段的重点是并行编程的思想,和你之前刷的ACM算法题有非常大的区别,需要细细体会。首先从最简单的多线程并行开始,也就是OpenMP,这一阶段的目标如下:
什么是OpenMP?有什么作用?
如何使用OpenMP来加速我的代码?在Linux环境下,在Windows环境下如何配置?
我该在哪并行?如何选择并行区域?
什么是数据依赖?什么是数据冲突?如何解决?
什么是原子操作?为什么需要原子操作?
我该选择多少线程来运行呢?线程数量越多越好吗?
我的代码运行正确吗?如何检验优化后代码运行的正确性?
我的代码优化成功了吗?加速比如何计算?
OpenMP实战:多线程矩阵乘法,矩阵分块乘法。
OpenMP可以说是并行优化方法中的一种,而MPI可以说是并行分布式计算中不得不提的工具,也是非常重要的工具之一,你可以配合上面所学的OpenMP来学习MPI:
什么是MPI?
进程和线程的区别是什么?
什么是主进程master,什么是从进程slave?
什么是进程间通信?为什么进程间需要通信?如何进行进程间通信?
如何发送数据和接收数据?都有哪些方法?每种方法之间又何不同?
什么是同步?为什么需要同步?
什么是死锁?如何避免死锁?
我该如何编译和运行MPI程序?
为什么我在一个节点上运行这么多进程和我在多个节点上运行这么多进程时间不一样?
MPI实战:矩阵乘法,矩阵分块乘法。
掌握了OpenMP和MPI之后,到这里我想大二上学期应该结束了吧,如果上面的内容你都掌握地不错,那么恭喜你,可以开始你的ASC超算竞赛之旅了,跟着老队员尽情享受吧。竞赛开始之前,可以认真阅读《超算竞赛引导》的第二篇和第三篇,里面对ASC超算竞赛赛题进行了解读,后面还有往年决赛队的参赛经验,让你对ASC超算竞赛有一个全面的了解。参加ASC超算竞赛,新手当然是从HPL和HPCG的优化开始入手,并且这道题在书中有详细讲解,此外,萌新也需要将所有赛题都运行一遍,在比赛期间,你应该学会如何使用高性能集群(Linux命令行):
如何远程登录(SSH)?节点之间如何做到无密码访问?
集群是怎样运作的?什么是管理节点?什么是计算节点?
为什么所有节点都能看到同样的目录?什么是共享存储?
了解你的集群。集群拓扑结构是怎样的?配置是什么?使用的是什么网络?
什么是环境变量?有什么作用?
什么是程序入口参数?
Linux基本命令。如何上传和下载文件?
为什么我不能用apt-get或yum安装软件?什么是Linux权限?
如何从源码编译?什么是软件依赖?什么是动态链接库?什么是动态链接?什么是静态链接?
什么是编译器?什么是编译工具链?什么是make和cmake?如何编写MakeFile和CMakeList?
编译报错怎么办?
系统自带的软件版本太旧怎么办?
如何提交作业?PBS作业调度系统如何使用?
什么是脚本?掌握Shell脚本的使用。
基本上,能独立将所有赛题都编译运行一遍,Linux的基本使用就掌握了,而上面所讲也仅仅是开胃菜,接下来你应该跟着队内的老队员,学习如何进行程序优化,而在优化之前,当然少不了程序性能分析:
IntelParallel Studio XE的使用
如何测试程序性能?什么是热点分析?
程序性能分析报告怎么看?
性能优化策略:
并行度优化
内存管理优化
数据传输优化
存储器访问优化
向量化优化
负载均衡优化
多线程扩展性优化
Part2 提高篇
高性能计算
大二寒假参加了一次ASC超算竞赛的你,接下来就应该进入提高阶段,去挑战自己。这时候你可以接触多种多样的并行优化工具:OpenMP、OpenACC、CUDA。同时可以加入老师的科研项目,因为只有经过实战才能提高自己的并行优化经验。同时也可以阅读一些与并行优化相关的书籍,最好选择有工程开发项目讲解的书籍,从实际问题出发,学习如何划分任务,如何优化程序。除此之外,高性能计算相关领域的文献资料也是非常值得学习的资料,而且范围也更加广泛,能学到许多书本上没有的知识。
目前深度学习能取得如此多的成果,其中离不开GPU计算的发展,如今GPU计算也有着不错的应用前景,如果能使用GPU成果对应用进行优化,其优化效果不容小觑。NVIDIA也提供了许多加速库(CUDA、cuBlas等),方便开发者使用GPU进行加速。如果想深入学习GPU计算,建议阅读相关书籍,深入了解GPU硬件架构以及编程模型。
深度学习
如果你想尝试深度学习领域,同样可以选择自己喜欢的导师进行相关科研方面的工作,也可以选择参加深度学习方面的竞赛,例如Kaggle、AI Challenger、天池竞赛等。至少熟练使用一个深度学习框架,例如Tensorflow、PyTorch等,熟练使用Python也是必不可少的。除此之外,最重要的能力就是复现论文的能力,深度学习领域的论文数量众多,发展很快,能够快速对论文模型进行复现是你需要掌握的基本能力,这也可以为你以后研究生的学习打下基础。最后一条建议就是多读相关领域的文献,学习他人是如何优化神经网络性能的,他们的切入点是什么?他们提出的方法有何优缺点?他们的方法是否合理?

《超算竞赛导引》笔记

https://blog.csdn.net/weixin_42306122/article/details/102149058

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

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

第一代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 对等互连相互通信,不受主机的任何干扰。

可以按并行计算方式是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架构介绍如下:

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

其所计算的问题是在一个庞大的无向图种采用宽度优先算法进行搜索。
————————————————
版权声明:本文为CSDN博主「BaldStrong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42306122/article/details/102149058

  • 上一篇文章: ASC20-21超算大赛开战——有一群年轻人正在用超算的力量改变世界

  • 下一篇文章: 2020-2021 ASC世界大学生超算大赛,暨大夺冠,清华第二
  •    
    [注:标题搜索比内容搜索快]
    发表评论】【告诉好友】【打印此文】【关闭窗口
     最新5篇热点文章
  • TEMP[126]

  • SAE001[93]

  • 高光谱成像基本原理[67]

  • 蒸汽火车解剖图[78]

  • 星球大战死星解剖图集 star wa…[86]

  •  
     最新5篇推荐文章
  • 外媒:正在唤醒中国的习近平[340]

  • 中国反伪科学运动背后的CIA黑手…[517]

  • [转载]袁隆平真言:中国最大的…[698]

  • 台专家:当年我们造IDF时 大陆…[591]

  • 旅日华人:中国严重误判日本民…[596]

  •  
     相 关 文 章
    没有相关文章

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
        没有任何评论
    设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 | 
    版权所有 Copyright© 2003 晨光科技        站长:璀璨星辰        页面执行时间:644.53毫秒
    Powered by:MyPower Ver3.5