本发明涉及异构多核高性能计算架构,尤其涉及编译框架及优化组合问题。
背景技术:
随着半导体工艺的进步,以及单处理器所碰到的物理极限和功耗等无法逾越的障碍,体系结构技术发生了深刻的变革。经过最近几年的不断研究与发展,以多核处理器为代表的先进体系结构已经逐渐取代单核处理器成为提高处理器性能的主要途径。多核处理器在一个芯片中集成多个处理器核,这些处理器核具有相同或者不同的功能和结构,以一种有效的方式集成在同一个芯片中,并以有效的划分方式将应用程序分配给不同的微处理器核进行并行处理,从而提高微处理器系统的性能。较之单核处理器,多核处理器具有很多天然的优势。多核处理器可以在较低的时钟频率下提供单核处理器需要很高时钟频率才能达到的计算性能,而较低的时钟频率也可以很好地满足功耗、散热等方面的限制。此外,多核处理器的本质是采用相对较简单的多个计算内核并行工作,以提供较高的计算能力。在设计多核处理器时,只需设计相对较简单的计算内核,并通过一定的互连方式将其连接起来。与传统的设计单个内核的复杂处理器相比,大大降低了设计的难度和成本,提高了设计的效率。
从所包含的处理器核结构的角度来看,多核处理器分为同构多核处理器和异构多核处理器。同构与异构是多核处理器主要的两种结构形态。同构多核处理器中处理器芯片内部的所有内核结构完全相同,各个内核具有等同的地位。异构多核处理器中异构多核处理器芯片内部采用多种功能不同的内核,一般是由负责管理调度的主核和负责计算的从核构成,或者由承担定点、浮点、特殊计算等不同计算功能的多种内核组成。从应用的角度来说,目前的同构多核处理器大多数由通用的处理器核组成,每个处理器核可以独立地执行任务,与通用单核处理器结构相近。异构多核处理器通常同时集成通用处理器、dsp、媒体处理器、网络处理器等多种类型的处理器内核,各个内核针对不同的需求,从而提高应用的计算性能。异构多核处理器,可将不同类型的计算任务分配到不同类型的处理器核上并行处理,从而为不同需求的应用提供更加灵活、高效的处理机制。异构多核处理器在晶体管的设置上可以进行针对性的优化,相对于同构多核处理器来说可以采用较少的晶体管获得等高的性能。
cell架构是目前异构多核系统架构的典型代表之一,基于cellbe(cellbroadbandengine)架构的cell提供了强大的浮点计算能力,并可用于科学计算。cell处理器内置一个通用ppe(powerpcprocessingelement)和8个spe(synergisticprocessingelement),ppe和spe具有不同的isa(instructionsetarchitecture).cell处理器的计算能力主要来自spe,每个spe有256kb可直接寻址的片上本地存储ls(localstorag)。spe只能直接访问ls中的数据和代码,当spe上运行的计算代码和数据大小超过256kb限制时,需将部分数据和代码放在片外主存,必要时通过dma操作从片外主存中获取.由于spe的ls存储容量受限,因此在cellbe架构下的编程需要管理消息编制,才能使得spe执行时接近峰值吞吐量.cell的另外一个显著特征是spe中有128个128位的向量寄存器,因此在软件开发时需要合理编排和组织数据,以便最大限度地发挥spe的计算能力。从目前应用软件的编程模式来看,大多数编程工具与应用仍是基于x86架构,所以要想充分发挥cell架构的性能,首先需要解决已有应用程序的移植问题。
异构多核的出现为高效能计算系统的构造提供了契机,但其显式的并行模式及多级的存储层次给编程带来困难,如何屏蔽异构多核底层软硬件环境,充分挖掘异构多核环境下应用的可移植性及性能成为目前亟待解决的问题。
技术实现要素:
本发明的目的为解决同构并行应用向异构多核架构的移植问题并提高了应用的整体性能。
本发明解决其技术问题所采用的技术方案是:
一种面向异构多核架构的自适应编译框架,通过源到源编译解决同构并行程序向异构多核架构的移植问题;通过自适应调整插桩并配置优化策略,形成迭代式的自动优化过程,将软硬件映射机制与优化策略结合,充分利用架构提供的软件显式管理资源能力,以提高应用性能。
所述的源到源编译为了解决传统的消息传递模型mpi或pthread编程模型的应用向异构多核架构映射转换问题。主要负责完成:1)将计算核心下载到协处理单元,应用的其他部分保留在通用处理单元,由主控部分调用执行计算核心,同时将数据拷入到协处理单元的局部存储。在启动计算核心后,协处理单元访问局部存储的数据,当出现数据中断时,由消息管理完成与通用处理单元数据通信任务;2)源到源编译将配置框架与具体应用逻辑分离.配置框架为策略分析模块与自适应插桩之间的接口,分别从任务层、数据层与存储层辅助性能优化;3)调度管理插桩在相邻两次映射过程起到承接的作用,从而使整个系统形成自适应编译过程。
所述的自适应插桩分别从不同层次对应用进行剖分,包含任务层、数据层以及存储层.前两层与应用自身特征相关,后者与具体架构结构相关。任务层通过分析应用子任务执行时间及其占总执行时间的比例得到应用中的计算核心。对于大规模应用,系统可用相应较小规模数据进行任务层移植,从而降低开销。数据层通过分析计算核心中对应数据块上下界、大小以及访问频度等信息确定数据块是否需要进一步剖分。存储层通过分析计算核心在对应内存块上的数据访问行为以及具体架构存储结构特征确定应用中计算性能瓶颈并给出优化策略。
所述的策略分析通过分析收集到的相关信息与运行时的反馈信息,获取相关决策,如计算核心与优化策略,间接地指导下次的源到源编译优化。
附图说明
图1表示的是自适应编译框架图
图2表示总体框架的迭代优化流程图
图3表示的是源到源编译示意图
具体实施方式
一、图1所示的是面向异构多核的自适应编译框架。由源到源编译、自适应插桩与策略分析3部分组成.该框架通过源到源编译将同构架构下应用的计算核心移植到协处理单元,并负责局部存储的管理,同时从应用逻辑中分离出与性能优化相关的配置框架,解决了异构架构下应用程序的可移植问题,但应用性能并没有得到充分发挥,要进一步挖掘应用性能,则需分析动态剖分得到的运行时信息,合理管理局部存储并利用数据布局对生成代码进行优化。
二、源到源编译模板在自适应插桩与优化策略的配合下,完成传统编程模型的应用向异构多核架构的映射转换,实现新型系统下应用可移植性.在映射的过程中,涉及到确定计算核心以及将其移植到协处理单元的编程问题、对一些支持库的显式调用进行封装以及调度管理插桩模块。
三、自适应插桩:通过源到源编译调用该部件为生成代码进行插桩,收集相关信息与运行时反馈信息。需要的信息内容是由上一级配置框架中的决策来决定。
四、策略分析:通过分析收集到的相关信息与运行时的反馈信息,获取相关决策,如计算核心与优化策略,间接地指导下次的源到源编译优化。
五、图2所示的是总体框架的工作流程图。流程包括:
(1)在对输入源程序首次编译时,由源到源编译调用与统计对象相关的函数进行预插桩。
(2)应用程序在运行的过程中,将收集到的对象信息写入到寄存文件中。
(3)寄存文件中信息经策略分析后得到相应的决策。
(4)通过决策判断应用是否需要进一步优化,若已达到满意程度则输出最终生成优化代码,否则转到第(5)步。
(5)配置框架根据反馈调用自适应插桩模块,结合到下次源到源编译过程。
(6)回到步(2)继续执行。
这是一个迭代式的自动优化过程:编译运行、收集信息、分析信息、自适应插桩、编译运行、收集信息继续优化,最终将优化策略“固化”在最终生成的代码中。输入源程序在此过程中不断地演变,生成的最终优化代码在对应的异构多核架构下具有良好的性能。
六、图3所示的是源到源编译图。在应用映射转换的过程中,源到源编译模块主要负责完成以下功能:
(1)将计算核心下载到协处理单元,应用的其他部分保留在通用处理单元,由主控部分调用执行计算核心,同时将数据拷入到协处理单元的局部存储。在启动计算核心后,协处理单元访问局部存储的数据,当出现数据中断时,由消息管理完成与通用处理单元数据通信任务;
(2)源到源编译将配置框架与具体应用逻辑分离.配置框架为策略分析模块与自适应插桩之间的接口,分别从任务层、数据层与存储层辅助性能优化;
(3)调度管理插桩在相邻两次映射过程起到承接的作用,从而使整个系统形成自适应编译过程。
七、插桩管理部件由signal(i)启动:
八、在解决了应用程序向异构架构下移植问题的基础上,需要进一步挖掘新型架构下的应用性能,自适应编译框架通过分析应用自身特征与具体架构结构寻找相关优化措施。由于优化应用性能时需要分析运行时信息,因此提升性能是一个迭代式优化过程。系统以配置框架为接口,通过自适应插桩模块对应用进行不同层次剖分得到运行时信息,进而由策略分析做出相关决策,指导下一级优化,依次此循环生成最终优化代码。自适应插桩分别从不同层次对应用进行剖分,包含任务层、数据层以及存储层。前两层与应用自身特征相关,后者与具体架构结构相关。任务层通过分析应用子任务执行时间及其占总执行时间的比例得到应用中的计算核心。对于大规模应用,系统可用相应较小规模数据进行任务层移植,从而降低开销.数据层通过分析计算核心中对应数据块上下界、大小以及访问频度等信息确定数据块是否需要进一步剖分。存储层通过分析计算核心在对应内存块上的数据访问行为以及具体架构存储结构特征确定应用中计算性能瓶颈并给出优化策略。
九、为了准确分析存储层所需要的数据访问行为特征,本发明定义流为一段内存访问元素序列的子序列。该子序列中任意两个相邻元素的距离称为步长。根据流中步长的概念可以分析流的访存行为特征并对其进行划分。设一个流stream中出现的步长为离散型随机变量s,所有步长可能的不同取值为sk(k=1,2,…,n),出现不同步长{s=sk}的概率表示为p{s=sk}=pk(k=1,2,…,n),满足条件
定义1:
定义2:
十、数据层优化:系统根据数据层剖分信息对计算核心的访存变量确定其访存方式.一个计算核心的每个数据块大小表示为size(k)(k=1,2,...,m),其中m表示数据块的块数,数据块总大小为
批量访存适用于访存区域小于协处理单元lsd;按需访存适用于访存区域大于lsd或无法确定的情况。对于按需访存,则需进一步判断参数的访问特征,若是规则顺序流,则采用单缓冲方式;若是规则非顺序流,且在访存区域很大的情况下采用四路缓冲方式,否则采用组相联方式;若是非规则流,则选取组相联方式。
十一、存储层优化:对于按需访存,若将代码和数据直接放入ls可能会导致程序运行崩溃,只能将计算函数分为多个计算单元cu,调用过程中按照cu对数据的需求通过dma操作按需若干次将数据读入ls的数据缓冲区中.策略分析模块对其缓冲区的组数、路数、块大小进行配置,分别用参数set,way,line表示。由于cell架构中一次dma操作的传输上限为16kb,且要求至少是16字节对齐。
组相联方式通过使用软件的方法在ls中建立一个组相联的缓存,可以提高细粒度的非规则应用的数据复用机会。在我们提供的组相联缓存中,设定每组有4路(way=2),缓存查找表中一个组的4路放到一个矢量中,这样主存中的一块可以映像到缓存的这4路中.单缓冲方法在ls中设定一个缓冲区,在数据访问点检查所需的数据是否在缓冲区中,若不在则使用dma操作从主存读取一个缓冲区的数据放入缓冲区.对于规则非顺序访存时,在单缓冲区的基础上建立4个缓冲区,当spe使用其中一个缓冲区的数据时,其余缓冲区利用异步dma操作读取将要使用的数据。
针对组相联的情况,系统还需考虑组数与块大小之间的平衡关系.本文采用了基于离线的经验搜索,由源到源编译生成与具体应用逻辑分离的策略配置文件,针对不同的参数配置,形成一个最佳策略的搜索空间,对其进行系统化观测,找到最优配置方案,并制定出相应的规则。