基于集成众核的高性能计算软件优化
2015-02-04杨志昱张旭东
杨志昱 张旭东
在异构计算系统上进行的并行计算通常称为异构计算,基于异构计算的高性能计算技术是目前高性能计算领域的发展热点之一,异构计算技术具有计算能力强、可扩展性好、计算资源利用率高等优点。将现有的应用算法移植到异构计算平台是对软件性能不断优化的过程。本文将从一个开发者的角度讲述基于Intel集成众核(MIC)的架构和基于该架构的软件优化思路和技术手段。
【关键词】高性能计算 异构计算 矢量化 MIC
得益于高性能计算领域的飞速发展,地震数据处理发生着翻天覆地的变化,高密度大数据体的处理已经习以为常,叠前偏移成像也被广泛应用,每当高性能计算领域有新技术诞生,我们的地震数据处理系统都面临着更大的机遇和挑战。
如今,高性能计算产业正在经历着一场深刻的变革,引导这场变革的主角就是异构计算。目前主流的集群架构系统,采用的是多核CPU的同构模式,就是将多个计算节点通过网络连接,形成高性能计算集群,而异构计算则是CPU加异构协助理器来实现。地震数据处理系统紧跟高性能计算技术步伐,也逐步开展了基于MIC高性能计算的软件研发工作。
1 MIC架构
MIC架构将多个英特尔 CPU 核心整合到了单个芯片上,通过 PCI Express 总线连接英特尔至强服务器(也称为“主机”),我们称之为协处理器。一个协处理器主要包括多个处理核心、高速缓存、内存控制器、PCIe客户端逻辑和带宽极高的双向环形互连,每个核心配有专用的二级高速缓存,所有这些组件都由环形互连连接在一起。MIC协处理器核心的一另个重要组件是矢量处理单元 (VPU), VPU包括一种新型的 512 位 SIMD 指令集。
对于软件开发者,MIC架构的重要属性如下:
(1)每个MIC卡可以设置独立的IP,可以把每个MIC卡当作独立的节点。
(2)MIC卡拥有512bit的向量位宽,可以同时处理16个32-bit浮点/整形元素或8个64-bit浮点/整形元素的计算。
(3)MIC卡包含32KB L1指令cache和32KB L1数据cache,同时,每个核拥有全局可见的L2 cache,大小为512KB;
(4)卡上有一个微操作系统(uos);
(5)MIC基于X86架构,支持多种并行模型,如OpenMP、pThread、MPI等,可以采用C、C++和Fortran三种语言进行软件移植开发,编程简单;
(6)提供类似于英特尔至强处理器编程环境的通用编程环境,有丰富的开发工具支持,开发工具包括编译器、线程库和高性能数学库等众多库、性能分析调优工具以及并行调试器。
在选择编程模型时,鉴于MIC支持CPU多核上的并行编程模型,因此,MIC与CPU多核之间的编程很灵活,MIC与CPU相结合可以采用的编程模式有三种:Offload模式,native模式和对等模式。
(1)Offload模式,Offload模式可以以CPU为host端,即CPU为主MIC为辅;也可以以MIC为host端,即MIC为主CPU为辅。其中,CPU为主MIC为辅模式是MIC编程中最常用的模式,该模式的执行过程是将数据传送到MIC卡上,在MIC上进行计算,计算完成后,将结果传送回CPU。在编写程序时通过编译制导语句,标示所要使用MIC加速的代码段。Offload语句通常会与OpenMP语句相结合,以开启多线程使用MIC设备并行化执行。
(2)native模式,该模式是只运行在MIC卡上的程序,原有的CPU的程序,只要在编译时加上“-mmic”就可编译得到,
(3)CPU与MIC对等模式,程序主函数在CPU与MIC端同时发起,这时MIC作为一个独立的节点存在,与运行跨CPU节点的并行程序相同,需要通过MIC函数接口进行数据间的通信。
2 算法优化
大体上看MIC协处理器非常适合计算与数据访问比率较高的高度并行应用。它包括多达 61 个通过双向环形总线片上连接的 CPU内核,每内核能够以轮询的方式在多达 4 条硬件线程间进行切换,一共可以同时并发244个硬件线程。从硬件特性可以看出,MIC为高度并行化应用设计的,用户为了获得这种高性能前提是对现有算法进行适当调优,调整的策略是让程序具备高度可并发和矢量化,并能高效利用内存。
(1)高可并发就是使用多核并发,目前程序开发的趋势是无论在个人PC或高性能计算节点上,程序都可以使用多核并行运行,并发度越高,效率也越高,在MIC上总共有244条硬件线程可以使用,在实际应用中我们可以使用的pthread或OpenMP来实现高并发。如果应用算法本身难于进行并行划分,或者非常强调单线程速度,那就不适合在MIC上进行并行化,在MIC上的并发度要达到成百上千的规模才能最大的发挥其性能。
(2)矢量化主要是使用 SIMD 寄存器和运算,MIC协处理器引入了512位宽的 SIMD 寄存器,对应用程序来说,SIMD架构的数据并行性可大大提高提高处理器的运算速度,为了实现矢量化,一般有三种方式:一是使用编译优化选项,二是使用SIMD指示,三是使用SIMD指令编程。
(3)内存和高速缓存,如果应用算法对计算能力的需求不高,而数据处理量很大,那也不适合在众核上进行加速,因为目前MIC最大的缺点同时也是开发人员需要注意的就是访存带宽,即使SIMD的存在可以提高处理器的运算速度,由于架构自身提供的向量寄存器数目十分有限,数据需要频繁的在向量寄存器和Cache之间传输,使得并行能力的不到足够的发挥,因此,有效的减少数据在内存和Cache间的传输开销在提高应用程序性能上变的至关重要,提高Cache命中率和向量寄存器的使用效率是提升性能的重要途径。
除了上面所涉及到的影响MIC性能的要素外,我们在单线程内还必须保持较高的数据计算与系统调用比,如果我们的线程内计算工作量非常有限,那线程的运行就主要消粍在了在线程的创建与同步的系统调用上,而系统调用在MIC卡的运行速度非常有限,所以必须避免在线程内有过多的系统调用出现。
3 结束语
基于异构计算的高性能计算技术是目前高性能计算领域的发展热点之一,随着该技术的不断完善和发展,将会有更多的应用软件利用该技术实现计算性能的提升,开发人员必须尽快熟悉和掌握这种开发技术,以支撑物探软件的持续开发和进步。
参考文献
[1]王恩东,张清.等 MIC高性能计算编程指南[M].北京:中国水利水电出版社,2012.
[2]Intel Xeon Phi Coprocessor Instruction Set Architecture Reference Manual.
作者单位
东方地球物理公司物探技术研究中心 河北省涿州市 072750endprint