一种支持有向有环图的微调度方法技术

技术编号:2859644 阅读:265 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种支持有向有环图的微调度方法,在运用重排(Reorder)技术和协调(Negotiate)技术编排模调度认为能在同一cycle中发射的指令集合的时候,除了考虑指令间的依赖关系以外,还要同时考虑指令间弧上的延迟值和指令所在的级数,实现对“回边”的支持;避免软件流水模调度中出现的分拆问题(Split  issue),减小了出现指令cache访问不命中(I-Cache  miss)的可能性,提高了并行编译效率,从而进一步提高了编译优化性能。

【技术实现步骤摘要】

本专利技术涉及指令级并行性编译、微调度
,特别是涉及一种支持带“回边”的“有向有环图”的微调度方法,及相应编译优化技术。
技术介绍
指令调度是机器相关优化的重要阶段。成功的指令调度需要满足数据相关,控制相关和结构相关及其它约束条件,通过重排指令顺序提高资源利用率和指令并行度。而其中结构相关,是指如果指令并行执行,可能发生的资源冲突。要解决这类相关需要访问占用资源状态,访问机器状态,获取指令间延迟等等,所以需要频繁的访问机器模型Muchnick.Advance Compiler Design and Implementation.Morgan KaufmannPublishers,1997。另外,有的机器对指令发送顺序也有特殊要求,如Intel公司基于IA-64体系结构的第一代、第二代处理器—安腾(Itanium)和麦金利(McKinley即itanium2)。它们都需要机器以特殊的模板,例如MII,发射指令。其中MII表示第一条发射Memory指令,而后两条必须是Integer指令。为此指令调度需要考虑更加复杂的因素,这对代码移植也是十分不利的。鉴于性能和移植性的双重需求,我们将指令调度考虑结构相关和其它限制条件的部分单独拿出来,使之成为一个新模块,称为微调度Dong-Yuan Chen,Lixia Liu,Chen Fu,Shuxin Yang,Chengyong Wu,Roy Ju.Efficient Resource Management during InstructionScheduling for the EPIC Architecture. Parallel Architectures andCompilation Techniques.2003,936∽45。它负责封装目标机微体系结构的具体细节。一方面为其它机器相关的优化提供访问机器参数以及机器状态的接口,使编译器在一定程度上与机器无关,能够快速适应目标机硬件的修改或换代。另一方面,也提高了指令调度的灵活性与可移植性。首先,微调度的工作涉及范围小,对于机器状态转换,我们只需关心当前周期的状态变化即可,加上特殊限制,我们最多需要考虑前面几个的周期状态。那样也就是几个周期内的调度范围。其次,我们必须考虑为指令分配功能部件,考虑指令的重排,这就要求在周期内作一种类似调度一样的工作。在满足结构相关的过程中,微调度部分还必须得知当前机器占用资源的状态,当选择了合适的指令发射之后,状态要随之相应的变化。这种机器状态变化的过程和有限状态自动机状态转换类似。通常,指令调度解决结构相关有两种方法,向后检测和向前检测。向后方法是记录当前周期已发射的指令,对于每个待发射的指令,判断是否和当前周期已发射的指令发生资源冲突或者违背其它限制。如果存在冲突或者违背,则不允许该指令在当前周期发射,否则允许发射。而前向检测方法是对于发射每条指令都记录了发射后的机器状态,对于新的候选指令,从当前机器状态判断是否能够到达下一个合法状态。如果不能则不允许指令发射,否则反之。两种方法一种向后看,看过去发射的指令,另一种向前看判断下一个状态是否合法T.Muller.Employingfinite automata for resource scheduling. In the 26th AnnualInternational Symposium on Microarchitecture,Austin,Dec 199312∽20。后向方法需要对于每条指令有复杂的比较和判断,速度慢且算法复杂,但它能处理特殊情况,并且空间消耗小。而前向方法通过状态转移,速度快,算法简单,但是要想模拟所有状态,空间消耗大,而且难以处理特殊情况。微调度结合了这两种方法各自的优点,实现了一种处理器结构相关的混合方法。目前微调度的思想已经在ORC中得到了成功的应用Open ResearchCompiler(ORC).http//ipf-orc.sourceforge.net.2002.。但它只是实现了对“有向无环图”的调度,还不支持“有向有环图”的情况,故还不能应用于软件流水中,实现对带“回边”指令的调度。另一方面,ORC中软件流水(SWPSoftware Pipeline)模块里编排指令束(bundling)的原有部分,其算法简单,没有微调度Richard A.Huff.Lifetime-sensitive modulo scheduling. ACM SIGPLAN Notices,1993,28(6)258∽267,除了不够灵活以外,还丧失许多潜在的提高优化性能的机会。作为一种循环调度方法,软件流水(SWP)可以有效的开发程序中隐藏的指令级并行性(Instruction Level Parallelism,简称ILP)。它通过重迭不同循环体的执行来提高速度。在一个循环体尚未执行完毕之前,可以启动下一个循环体,二者之间的时间差距称为启动间距(Initiationinterval,简称II)。目前软件流水调度有两大主要技术Move-then-scheduling技术(也即代码移动技术)和Schedule-then-move技术。前者是跨越循环回边(back-edge)一条一条的移动指令。后者则是直接从零开始形成最终的调度。Schedule-then-move家族又有两大成员Unrollbased scheduling和Modulo Scheduling。前者是既做循环展开(unroll)又做指令调度,后者只对循环中的一个iteration进行调度,使得每次经过相同的时间间隔重复同样的调度,不会有资源冲突和相关冲突。模调度是目前实现软件流水最受欢迎的方法Josep M.Codina,JosepLlosa,Antonio González.A Comparative Study of ModuloScheduling Techniques.Proceedings of the 16th internationalconference on Supercomputing.2002,797∽106。ORC中采用了Richard A.Huff提出的Slack Modulo SchedulingRichard A.Huff.Lifetime-sensitive modulo scheduling.ACM SIGPLAN Notices,1993,28(6)258∽267。模调度之后紧接的就是编排指令束(bundling)。Itanium的架构中规定一个周期内能够发射两个指令束(bundle),每个指令束有三条指令,它们的发送必须要依据一定的模板(template)。Itanium中指定了16种指令模板(MII,MI_I,MLX,MMI,M_MI,MFI,MMF,MIB,MBB,BBB,MMB,MFB,RESERVED_A,RESERVED_D,RESERVED_3,RESERVED_F)。我们把template的三个指令位置分别为三个空槽(slot0,slot1,slot2)。ORC中SWP部分的bundling源自于Pro64。其基本思想如下<pre listing-type=prog本文档来自技高网...

【技术保护点】
一种支持有向有环图的微调度方法,其特征在于包括以下步骤:a)计算指令集中每条指令的级数值;b)判断指令集是否为空?如果是,执行步骤l);如果否,执行下一步;c)判断机器当前状态空间是否已满或所有指令均被选过?若是,执 行下一步,若否,执行步骤e);d)完成前一周期的机器状态空间的模板指派,更新前一周期的机器状态空间中指令的绝对槽值,把当前周期的机器状态空间赋给前一周期的状态空间,把当前机器的状态空间置空;e)从指令集中选一指令,为其分配功 能部件,把当前机器的状态空间值赋给当前周期的测试空间;f)根据数据依赖图,检查当前机器的状态空间的每一条指令与步骤e)中选取指令的相关性,即判断是否有下列四种情况之一来判断相关性,如有,则执行步骤h),如否,则执行下一步;四种情况为 :当前周期的机器状态空间中的任一条指令和所选指令间不存在数据相关;数据依赖图中任一指令与所选指令的弧上延迟值为0;数据依赖图中任一指令到所选指令的弧上的循环迭代数差值不为0;模调度中任一指令所在的级数不为所选指令所在的级数;g)置f easible为false,然后执行步骤k),其中,feasible为判断是否存在周期内的依赖关系的逻辑变量;h)将指令op加入当前周期的测试空间中,置feasible为TRUE,调用模板匹配函数为当前周期的测试空间状态中的指令寻找 模板,并实现有限状态自动机的状态转移;i)判断有限状态自动机的状态转移是否成功?如果是,执行下一步,如果否,执行步骤l);j)测试成功,把当前周期的测试空间的值赋给当前周期的机器状态空间,更新所选指令的绝对槽值,从指令集中删 除所选指令,然后执行步骤b);k)在当前周期的机器状态空间中为所选指令做上已选标记,然后执行步骤c);l)微调度结束。...

【技术特征摘要】
1.一种支持有向有环图的微调度方法,其特征在于包括以下步骤a)计算指令集中每条指令的级数值;b)判断指令集是否为空?如果是,执行步骤l);如果否,执行下一步;c)判断机器当前状态空间是否已满或所有指令均被选过?若是,执行下一步,若否,执行步骤e);d)完成前一周期的机器状态空间的模板指派,更新前一周期的机器状态空间中指令的绝对槽值,把当前周期的机器状态空间赋给前一周期的状态空间,把当前机器的状态空间置空;e)从指令集中选一指令,为其分配功能部件,把当前机器的状态空间值赋给当前周期的测试空间;f)根据数据依赖图,检查当前机器的状态空间的每一条指令与步骤e)中选取指令的相关性,即判断是否有下列四种情况之一来判断相关性,如有,则执行步骤h),如否,则执行下一步;四种情况为当前周期的机器状态空间中的任一条指令和所选指令间不存在数据相关;数据依赖图中任一指令与所选指令的弧上延迟值为0;数据依赖图中任一指令到所选指令的弧上的循环迭代数差值不为0;模调度中任一指令所在的级数不为所选指令所在的级数;g)置feasible为fa...

【专利技术属性】
技术研发人员:文严治连瑞琦刘章林吴承勇张兆庆
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:11[中国|北京]

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

1