一种线程间冗余删除的异构编译优化方法技术

技术编号:21398450 阅读:39 留言:0更新日期:2019-06-19 06:51
本发明专利技术通过自动选择优化策略以及分维度进行线程间冗余删除的收益代价分析,能自动根据代码是否含有同步操作和硬件平台的特点,针对性地选择一种优化策略,通过对Kernel代码的编译分析,得出合适的合并维度和合并因子,利于提高Kernel代码的运行性能。采用本发明专利技术方法能面向多种异构平台,进行自动分析和变换,得以优化设备端代码的线程间冗余和同步开销,提高设备端代码(即OpenCL的Kernel代码)的性能。

【技术实现步骤摘要】
一种线程间冗余删除的异构编译优化方法
本专利技术涉及编译器的研发和优化技术,特别是涉及一种面向异构平台的线程间冗余删除编译优化技术。
技术介绍
随着摩尔定律的放缓、GPU等加速设备获得越来越多的高性能计算应用的支持,现代计算系统正在向装备有CPU和加速设备(如GPU或XeonPhi)的异构平台过渡,从全球TOP500超级计算机榜单上排名前三的皆是异构平台、异构平台数量超过100中可见一斑。异构系统通常由CPU与一个或多个加速设备在片上或主板上相互连接组成,其中CPU负责复杂的控制、调度等工作,而加速设备则负责大规模并行计算或专业领域的计算任务。当今市场上加速设备种类很多,每种类型的加速设备具有不同的特性,包括:CPU、GPU、协处理器、DSP(信号处理器)、ASIC(专用集成电路)、FPGA(现场可编程门阵列)等等。与异构系统相对应,异构程序亦由两部分组成——主机端代码和设备端代码(即kernel)组成,主机端代码通过提交命令来驱动设备进行并行计算,而并行执行的kernel代码是编译优化的重点。面向异构系统的编程模型,有只适用于特定异构系统的编程模型,比如NVIDIA的CUDA,微软提出的C++AMP,IBM的LIME,Intel提出的Merge等等;也有通用的编程模型,由KhronosGroup提出的OpenCL异构编程模型为不同的设备架构提供了统一接口,为异构计算提供了一个开放的、通用标准。OpenCL执行模型大致如下:当主机端代码提交kernel代码执行时,系统生成一个n维(n≤3)的索引空间NDRange,kernel代码被实例化成若干线程并且按照NDRange的形式组织线程并发执行。NDRange中的每个线程称为工作项(work-item),work-item之间以SPMD(SameProgramMultipleData)模式并行执行,即每个work-item在不同的数据上执行相同的kernel程序。NDRange还可以根据粗粒度分解成若干工作组work-group:其空间维度与全局空间的维度相同,每个工作组work-group包含数目相同的相邻工作项。work-item之间可以进行局部(work-group内部)或全局(NDRange)的同步。如何将OpenCL程序映射到具体硬件单元完成相应操作,并管理和组织执行线程,是由具体硬件平台的OpenCL运行时支持系统完成,很多厂商通过提供OpenCLSDK使得OpenCL程序能直接运行于各自平台。OpenCL编程语言具有良好的功能移植性,程序可面向多种不同架构的平台。OpenCL程序的线程(work-item)之间往往存在着完全相同的或者值相同的一些代码,以及开销大的同步操作。一方面这是与程序并行度相关的、自然形成的,提高程序并行度,相应地线程数量增多、线程粒度变小,因此需要引入更多的同步操作;同时一些计算变成每个线程内需计算一次,这样的操作于单个线程内部是不冗余的、于多个线程之间则存在冗余性,这里我们称为线程间的冗余。线程间的冗余操作的存在不一定益于性能,可以借助编译技术分析和优化。而另一方面这也不能忽略程序员编程习惯的人为影响。程序员倾向于从功能角度划分独立线程、充分发掘算法的并行度,而对于线程之间的优化则缺少关注、留待编译器完成。现有的异构程序编译器通常对Kernel代码进行静态分析,重点关注于线程内的优化,它们不考虑线程之间的代码冗余,不提供自动的线程间冗余删除或线程合并优化。
技术实现思路
因此,本专利技术的目的在于克服上述现有技术的缺陷,提供一种新线程间冗余删除的异构编译优化方法。面对线程间的冗余计算和可能冗余的同步操作,我们的方法是通过编译阶段的线程合并,使得原本线程间的冗余计算(即结果值或者功能完全相同的普通指令)变成新线程内的冗余计算得以删除,使得进行同步的线程数量减少和同步开销降低,达到提高设备端Kernel代码运行性能的效果。另一方面,线程间冗余删除也可能对性能产生副作用,于是,考虑到线程合并带来并行度的下降,以及改变原有的线程执行顺序对性能的影响,我们建立收益代价模型,分析线程合并在冗余删除和优化同步上的收益,分析它影响并行度和访存效率所带来的代价,基于收益代价分析的结果,实施代码变换,得到优化后的Kernel代码。本专利技术的目的是通过以下技术方案实现的:根据本专利技术的第一方面,本专利技术提供一种优化冗余策略,进行线程合并来达到删除冗余提高代码运行性能的目的,包括如下步骤:S1、获取Kernel源代码及Kernel执行信息;S2、对所述Kernel源代码及Kernel执行信息,以工作组为单位,分维度识别出候选冗余计算;S3、基于所述候选冗余计算分维度进行收益代价分析,得到每一维度的最优合并因子及其优化冗余的纯收益;S4、基于每一维度的最优合并因子及其优化冗余的纯收益确定总合并维度及总合并因子;S5、基于总合并维度及总合并因子,对Kernel代码进行线程优化冗余操作,合并线程,进行代码变换和优化;S6、输出优化后的源码形式的Kernel代码及中间文件形式的Kernel执行信息。其中,上述步骤S2包括如下步骤:S21、以工作组为单位,分维度对Kernel代码的中间语言进行指令之间的依赖分析,得出依赖于每一维度线程的普通指令以及不依赖于该维度线程的普通指令;普通指令为同步指令以外的其他指令;S22、将不依赖于线程的普通指令视为该线程所在维度的候选冗余计算。上述步骤S3包括如下步骤:S31、在不同合并因子下,以工作组为单位,分维度计算优化冗余的收益;在不同合并因子下,以工作组为单位,分维度计算优化冗余的收益时,不同合并因子下每一维度的收益为不依赖于该维度的所有普通指令在合并因子下做优化冗余操作时为工作组带来的收益之和;不同合并因子下,每一不依赖于线程的普通指令的收益为该指令执行频率、指令延迟、合并因子减一之差这三者的乘积;S32、结合硬件平台特征,以工作组为单位,在不同合并因子下,分维度计算优化冗余的代价;在不同合并因子下,以工作组为单位,分维度计算优化冗余的代价时,以线程合并导致的并行度下降和访存效率下降引发的性能损失之和作为代价,包括并行度影响代价和访存效率的代价;S33、针对同一工作组同一维度线程,在不同合并因子下,用步骤S31中计算的收益与步骤S32中计算的同一维度同一合并因子下的代价相减,得到该维度线程在不同合并因子下的纯收益,取其中最大纯收益所对应的合并因子作为该维度线程的最优合并因子;S34、重复步骤S31-S33,直至计算得到每一维度线程的最优合并因子及其对应的纯收益为止。上述步骤S4包括如下步骤:S41、获取每一维度线程的最优合并因子及其对应的纯收益;S42、对所有维度的最优合并因子对应的纯收益进行对比,选出纯收益最大者所对应的维度作为总合并维度,并将该维度的最优合并因子作为总合并因子。上述步骤S5包括如下步骤:S51、按照选出的总合并维度和总合并因子,对Kernel代码内依赖于总合并维度的普通指令逐条复制,复制的遍数为总合并因子减一,对不依赖于总合并维度的普通指令不做复制;并转换代码中对线程号的使用;S52、对复制后的指令中的相关变量做扩展或者更换变量名,避免变量冲突,得到变换后的新的Kernel代码;S53、根据本文档来自技高网
...

【技术保护点】
1.一种线程间冗余删除的异构编译优化方法,其特征在于,包括如下步骤:S1、获取Kernel源代码及Kernel执行信息;S2、对所述Kernel源代码及Kernel执行信息,以工作组为单位,分维度识别出候选冗余计算;S3、基于所述候选冗余计算分维度进行收益代价分析,得到每一维度的最优合并因子及其优化冗余的纯收益;S4、基于每一维度的最优合并因子及其优化冗余的纯收益确定总合并维度及总合并因子;S5、基于总合并维度及总合并因子,对Kernel代码进行线程优化冗余操作,合并线程,进行代码变换和优化;S6、输出优化后的源码形式的Kernel代码及中间文件形式的Kernel执行信息。

【技术特征摘要】
1.一种线程间冗余删除的异构编译优化方法,其特征在于,包括如下步骤:S1、获取Kernel源代码及Kernel执行信息;S2、对所述Kernel源代码及Kernel执行信息,以工作组为单位,分维度识别出候选冗余计算;S3、基于所述候选冗余计算分维度进行收益代价分析,得到每一维度的最优合并因子及其优化冗余的纯收益;S4、基于每一维度的最优合并因子及其优化冗余的纯收益确定总合并维度及总合并因子;S5、基于总合并维度及总合并因子,对Kernel代码进行线程优化冗余操作,合并线程,进行代码变换和优化;S6、输出优化后的源码形式的Kernel代码及中间文件形式的Kernel执行信息。2.根据权利要求1所述的一种线程间冗余删除的异构编译优化方法,其特征在于,所述步骤S2包括如下步骤:S21、以工作组为单位,分维度对Kernel代码的中间语言进行指令之间的依赖分析,得出依赖于每一维度线程的普通指令以及不依赖于该维度线程的普通指令;普通指令为同步指令以外的其他指令;S22、将不依赖于线程的普通指令视为该线程所在维度的候选冗余计算。3.根据权利要求2所述的一种线程间冗余删除的异构编译优化方法,其特征在于,所述步骤S3包括如下步骤:S31、在不同合并因子下,以工作组为单位,分维度计算优化冗余的收益;S32、结合硬件平台特征,以工作组为单位,在不同合并因子下,分维度计算优化冗余的代价;S33、针对同一工作组同一维度线程,在不同合并因子下,用步骤S31中计算的收益与步骤S32中计算的同一维度同一合并因子下的代价相减,得到该维度线程在不同合并因子下的纯收益,取其中最大纯收益所对应的合并因子作为该维度线程的最优合并因子;S34、重复步骤S31-S33,直至计算得到每一维度线程的最优合并因子及其对应的纯收益为止。4.根据权利要求3所述的一种线程间冗余删除的异构编译优化方法,其特征在于,所述步骤S4包括如下步骤:S41、获取每一维度线程的最优合并因子及其对应的纯收益;S42、对所有维度的最优合并因子对应的纯收益进行对比,选出纯收益最大者所对应的维度作为总合并维度,并将该维度的最优合并因子作为总合并因子。5.根据权利要求4所述的一种线程间冗余删除的异构编译优化方法,其特征在于,所述步骤S5包括如下步骤:S51、按照选出的总合并维度和总合并因子,对Kernel代码内依赖于总合并维度的普通指令逐条复制,复制的遍数为总合并因子减一,对不依赖于总合并维度的普通指令不做复制;并转换代码中对线程号的使用;S52、对复制后的指令中的相关变量做扩展或者更换变量名,避免变量冲突,得到变换后的新的Kernel代码;S53、根据总合并维度和总合并因子,相应修改主机端相关代码,包括分维度的线程总数和工作组内每一维线程数。6.根据权利要求3所述的一种线程间冗余删除的异构编译优化方法,其特征在于,在不同合并因子下,以工作组为单位,分维度计算优化冗余的收益时,不同合并因子下每一维度的收益为不依赖于该维度的所有普通指令在合并因子下做优化冗余操作时...

【专利技术属性】
技术研发人员:黄磊刘颖伍明川洪锐冯晓兵
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1