太阳城集团

  • / 20
  • 下载费用:30 金币  

程序指令序列中的分支汇聚的确定.pdf

摘要
申请专利号:

太阳城集团CN201610406030.1

申请日:

2016.06.08

公开号:

CN106257412A

公开日:

2016.12.28

当前法律状态:

实审

有效性:

审中

法律详情: 实质审查的生效IPC(主分类):G06F 9/38申请日:20160608|||公开
IPC分类号: G06F9/38 主分类号: G06F9/38
申请人: ARM 有限公司
发明人: 默罕默德·贾韦德·阿布沙; 马尔科·柯尼路; 乔治亚·科韦利; 卡尔·艾瑞克·休伯特·文·普拉滕
地址: 英国剑桥
优先权: 2015.06.18 EP 15386020.0
专利代理机构: 北京东方亿思知识产权代理有限责任公司 11258 代理人: 林强
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

太阳城集团CN201610406030.1

授权太阳城集团号:

|||

法律状态太阳城集团日:

2018.07.06|||2016.12.28

法律状态类型:

实质审查的生效|||公开

摘要

太阳城集团本申请涉及程序指令序列中的分支汇聚的确定。公开了一种对程序指令序列进行编译的方法、对程序指令序列进行并行运行的方法、以及支持这些方法的装置和软件。程序指令序列以形成控制流图的基本块为单位被分析,并且穿越该控制流图的运行路径被识别。当不止一个运行路径导向给定基本块时或者循环路径被发现从给定基本块导向返回同一基本块时,潜在汇聚点可以被识别出。汇聚标记与按照这种方式识别出的基本块相关联地被添加到计算机程序,于是当该程序被运行时,所发现的汇聚标记被用于触发对多个运行线程中在汇聚标记后运行的子集的确定。

权利要求书

1.一种对程序指令序列进行编译以生成被编译的程序的方法,包括:
识别程序指令的基本块,其中每个基本块只具有一个入口点和一个出口点;
确定导向每个基本块的至少一个运行路径;
当不止一个运行路径导向选定基本块时,向所述被编译的程序添加与所述选定基本块
相关联的汇聚标记;以及
当存在从另一选定基本块到该另一选定基本块的循环路径时,向所述被编译的程序添
加与所述循环路径的各个出口基本块相关联的汇聚标记。
2.根据权利要求1所述的方法,其中确定步骤包括:
迭代地处理路径项目的队列,其中每个路径项目包括至少一个基本块的标志,并且每
个迭代步骤包括:
从所述队列中的第一位置移除先有路径项目;以及
生成包括被附加有另一基本块的标志的先有路径项目的路径项目,其中运行路径从所
述至少一个基本块导向所述另一基本块。
3.根据权利要求2所述的方法,还包括:
将所述路径项目添加到所述队列中的选定位置,从而使得所述队列中的路径项目是相
对于每个路径项目中的最后的基本块而按照程序计数器次序被排序的。
4.根据权利要求3所述的方法,其中当所述路径项目被添加为不是所述排序中的第一
路径项目时,与所述另一基本块相关联的汇聚标记被添加到所述被编译的程序。
5.根据权利要求2所述的方法,其中每个迭代步骤包括:
当另一运行路径从所述至少一个基本块导向第二另一基本块时,向所述队列添加另一
路径项目,
其中,所述另一路径项目包括被附加有所述第二另一基本块的标志的先有路径项目。
6.根据权利要求2所述的方法,还包括:
当所述队列中的另一先有路径项目包括所述另一基本块的标志时,将所述另一先有路
径项目修改为指示到所述另一基本块的替代路径;以及
向所述被编译的程序添加与所述另一基本块相关联的汇聚标记。
7.根据权利要求2所述的方法,其中当所述先有路径项目包括所述另一基本块的标志
时,所述路径项目为循环路径。
8.根据权利要求7所述的方法,还包括:
当所述先有路径项目包括所述另一基本块的标志时,迭代地处理此路径项目中的每个
基本块,并且在每个迭代步骤中,当路径从正被处理的、退出所述循环路径的基本块导出
时,向所述被编译的程序添加与所述正被处理的基本块相关联的汇聚标记。
9.根据权利要求1所述的方法,其中向所述被编译的程序添加与所述选定基本块相关
联的汇聚标记包括:将所述汇聚标记添加在紧接在所述选定基本块之前。
10.根据权利要求1所述的方法,其中向所述被编译的程序添加与所述循环路径的各个
出口基本块相关联的汇聚标记包括:将所述汇聚标记添加在紧接在每个出口基本块之前。
11.一种对程序指令序列进行编译以生成被编译的程序的装置,其中所述装置具有用
于执行权利要求1所述的方法的配置。
12.一种存储有计算机程序的计算机可读存储介质,该计算机程序当在计算机上运行
时使得所述计算机执行权利要求1所述的方法。
13.一种当在计算机上运行时使得所述计算机执行权利要求1所述的方法的软件。
14.一种利用多个运行线程并行运行计算机程序的方法,其中所述计算机程序包括程
序指令序列,所述方法包括:
识别程序指令的基本块,其中每个基本块只具有一个入口点和一个出口点;
确定导向每个基本块的至少一个运行路径;
当不止一个运行路径导向选定基本块时,向所述计算机程序添加与所述选定基本块相
关联的汇聚标记;以及
当存在从另一选定基本块到该另一限定基本块的循环路径时,向所述计算机程序添加
与所述循环路径的各个出口基本块相关联的汇聚标记;以及
运行所述多个运行线程,其中,运行所述多个运行线程包括:
当所述多个运行线程的第一子集从分叉基本块采取第一运行路径并且所述多个运行
线程的第二子集从所述分叉基本块采取第二运行路径时,使得所述第二子集等待;并且
当遇到所述汇聚标记时,根据预定并行运行规则来选择所述多个运行线程中的至少一
个线程以供运行。
15.根据权利要求14所述的方法,其中根据预定并行运行规则来选择所述多个运行线
程中的至少一个线程以供运行包括:选择这样的一组线程,其中针对该组线程中的线程要
执行的下一指令在程序计数器顺序中是最早的。
16.一种并行运行计算机程序的装置,其中,所述装置具有用于执行权利要求14所述的
方法的配置。
17.根据权利要求16所述的装置,其中所述装置是图形处理单元。
18.一种存储有计算机程序的计算机可读存储介质,该计算机程序当在计算机上运行
时使得所述计算机执行权利要求14所述的方法。

说明书

程序指令序列中的分支汇聚的确定

技术领域

本公开涉及数据处理领域。更具体地,本公开涉及程序指令序列中的分支汇聚的
确定。

背景技术

供数据处理装置运行的一组程序指令可能不只导致以简单线性的方式运行,即,
其中程序指令按照顺序次序从序列中的第一指令运行到序列中的最后一个指令。这是因为
各程序指令中设置的条件可能使得程序流从序列中的给定程序指令发生到另一程序指令
的分支,或者在序列中跳跃前进,或者后退到序列中的在前程序指令。在程序指令序列的运
行中的这些可能分支或循环在能够执行多个线程(这多个线程运行相同的核)的数据处理
装置的环境中是特别重要的,因为以锁步的方式执行这些并行的线程可以得到性能益处,
从而使得数据处理装置的资源得以更有效地利用。然而,当这些线程由于各个线程的不同
条件导致这些线程采用不同分支而发生分叉时,会失去这种并行性。然而,可能存在分开的
线程再次会聚到一起的点,从而再次获得通过并行锁步运行而改善性能的机会。本公开涉
及对这种汇聚点的识别。

发明内容

本技术的至少一些实施例提供了一种对程序指令序列进行编译以生成经编译的
程序的方法,包括:识别程序指令的基本块,其中每个基本块只具有一个入口点和一个出口
点;确定导向每个基本块的至少一个运行路径;当不止一个运行路径导向选定基本块时,向
该被编译的程序添加与选定基本块相关联的汇聚标记;以及当存在从另一选定基本块到该
另一选定基本块的循环路径时,向该被编译的程序添加与循环路径的各个出口基本块相关
联的汇聚标记。

本技术的至少一些实施例提供了一种对程序指令序列进行编译以生成经编译的
程序的装置,其中该装置具有用于执行上述对程序指令序列进行编译的方法的配置。

本技术的至少一些实施例提供了一种计算机可读存储介质,该算机可读存储介质
存储有计算机程序,该计算机程序当在计算机上运行时使得计算机执行上述对程序指令序
列进行编译的方法。

本技术的至少一些实施例提供了一种软件,该软件当在计算机上运行时使得计算
机执行上述对程序指令序列进行编译的方法。

本技术的至少一些实施例提供了一种利用多个运行线程并行运行计算机程序的
方法,其中计算机程序包括程序指令序列,所述方法包括:识别程序指令的基本块,其中每
个基本块只具有一个入口点和一个出口点;确定导向每个基本块的至少一个运行路径;当
不止一个运行路径导向选定基本块时,向所述计算机程序添加与选定基本块相关联的汇聚
标记;以及当存在从另一选定基本块到该另一选定基本块的循环路径时,向所述计算机程
序添加与循环路径的每个出口基本块相关联的汇聚标记;以及运行所述多个运行线程,其
中,运行所述多个运行线程包括:当多个运行线程的第一子集从分叉基本块采取第一运行
路径并且多个运行线程的第二子集从所述分叉基本块采取第二运行路径时,使得第二子集
等待;并且当遇到汇聚标记时,根据预定并行运行规则来选择多个运行线程中的至少一个
线程以供运行。

本技术的至少一些实施例提供了一种并行运行计算机程序的装置,其中,所述装
置具有用于执行上述利用多个运行线程并行运行计算机程序的方法的配置。

本技术的至少一些实施例提供了一种计算机可读存储介质,所述计算机可读存储
介质存储有计算机程序,该计算机程序当在计算机上运行时使得所述计算机执行上述利用
多个运行线程并行运行计算机程序的方法。

本技术的至少一些实施例提供了一种软件,该软件当在计算机上运行时使得计算
机执行上述利用多个运行线程并行运行计算机程序的方法。

附图说明

将参考附图中示出的那些实施例仅通过示例的方式进一步描述本技术,其中:

图1示意性地示出一个实施例中包括CPU和GPU的装置;

图2是示出在一个实施例中当CPU被用于对源程序进行编译以供以并行运行的方
式被GPU运行时所执行的步骤序列的流程图;

图3A示出示例程序指令序列的结构;

图3B示出图3A中所示程序指令序列的控制流图(CFG);

图3C以并行运行的四个线程的示例运行路径示出图3B的CFG;

图4A示出图3B的CFG;

图4B示出一个实施例中当确定图3A的程序指令序列中的汇聚点时使用的优先级
队列的演变;

图5示出一个实施例中当利用优先级队列来确定程序指令队列中的汇聚点时在方
法中所采取的步骤序列;

图6示出一个实施例中当运行已经在一个实施例的编译阶段添加了汇聚标记的经
编译的程序时所采取的步骤序列;以及

图7示意性地示出一个实施例中既支持编译又支持运行的通用计算设备。

具体实施方式

至少一些实施例提供了一种对程序指令序列进行编译以生成经编译的程序的方
法,包括:识别程序指令的基本块,其中每个基本块只具有一个入口点和一个出口点;确定
导向每个基本块的至少一个运行路径;当不止一个运行路径导向所选基本块时,向该被编
译的程序添加与所选基本块相关联的汇聚标记;以及当存在从另一所选基本块到该另一所
选基本块的循环路径时,向该被编译的程序添加与循环路径的各个出口基本块(exit
basic block)相关联的汇聚标记。

一种用于找到程序指令序列中的汇聚点的技术利用了直接后支配者(immediate
post-dominator)技术,藉由该技术,程序指令的基本块(即,不包含分支可能性的指令集)
首先被识别出,因为这些基本块只具有一个入口点和一个出口点,从而这些基本块被表示
在控制流图中。于是,直到存在与后续指令运行偏离的机会的指令的指令序列可以被分组
到一起,随后新的基本块必须开始。如果从控制流图中的节点N到该图的出口节点的所有路
径必须经过Z,那么称为节点Z后支配节点N。节点N的直接后支配者是节点N的不对N的任何
其他严格后支配者进行严格后支配的后支配者。本技术认识到虽然这样的直接后支配者表
示该控制流图中的可能汇聚点,实际上直接后支配者方法是一种可能忽略了产生于不规则
嵌套(nesting)和控制流的一些汇聚点的方法,因此可能失去对执行程序指令的多个线程
进行有效并行运行的机会。本技术通过识别不止一个运行路径导向到的基本块并且在控制
流内向该点添加汇聚标记而解决了此问题。此外,形成循环的那些运行路径被识别出,并且
汇聚标记被添加到沿着该循环路径的存在退出该循环路径的可能性的每个基本块。本技术
识别出了可能被直接后支配者技术遗漏的汇聚点,因此支持多个线程的改进的并行运行,
其中汇聚点在运行中被用以再评估哪些线程应与另一线程并行运行,从而以便使得数据处
理装置的资源得以有效利用。应注意,与基本块相关联的汇聚标记的添加可以按照许多方
式来实现:标记可以被添加在基本块内;被添加在基本块之前的位置,等等,只要运行经编
译的程序的装置理解标记与哪个基本块相关联即可。

上述识别与程序指令序列相关联的控制流图中的汇聚点可以以多种方式来提供,
但是在一些实施例中,确定步骤包括:迭代地处理路径项目的队列,其中每个路径项目包括
太阳城集团至少一个基本块的标志(indication),并且每个迭代步骤包括:从队列中的第一位置
移除先有路径项目;以及生成包括被附加了太阳城集团另一基本块的标志的先有路径项目的路径
项目,其中运行路径从至少一个基本块导向另一基本块。

因此,为了处理程序指令的基本块,即相应控制流图的节点,本技术提出利用路径
项目的队列(有时被称为优先级队列),该队列根据基本块的标志进行构建的。一种迭代处
理过程被提供,其中,从控制流图的第一入口点起,路径项目被添加到队列,其中路径项目
最初包括太阳城集团控制流图的入口基本块(entry basic block)的简单标志,并且被附加了控
制流图内运行路径从队列中已经存在的路径项目导向到的另外的基本块的标志。因此,一
种迭代处理被建立,其中队列中的路径项目通过添加形成运行路径的基本块的标志而生
长。当来自某基本块的分支导向不止一个基本块时,即该基本块后有不止一个运行路径时,
另外的路径项目可以添加到队列。在每次迭代中,现存路径项目被从优先级队列取出,特别
是从队列中的“第一位置”取出,其中应理解此“第一位置”可以通过队列的任何预定排序给
定,只要这种排序被保持,并且基于刚从队列移除的路径项目(通过在此路径项目上附加关
于运行路径从该移除的路径项目导向到的基本块的标志),来生成新的路径项目。因此,这
使得路径项目队列得以发展,从而表示程序指令序列中的每个可能运行路径。

在一些实施例中,该方法还包括:将路径项目添加到队列中的所选位置,使得队列
中的路径项目按照相对于每个路径项目中的最后的基本块的程序计数器顺序进行排序。因
此,这使得队列按优先级排序,从而使得表示穿过程序指令序列间的运行路径的路径项目
被排序,进而使得程序计数器顺序被遵照。这还对应于由运行经编译的程序的装置用来在
线程间选择要运行的线程的优先级排序。

本技术还认识到路径项目在队列中被构建的顺序对于识别被编译的程序内的汇
聚点是很重要的,并且在一些实施例中,当该路径项目被添加为不是排序中的第一路径项
目时,与另一基本块相关联地汇聚标记被添加到该被编译的程序。因此,路径项目以使得其
不被放置于该队列的排序中的第一位置的基本块结束,因为队列中的另一路径项目具有在
程序计数器顺序中来得较早的基本块(例如,如通过参考每个基本块的最后程序指令所确
定的),于是本技术认识到正被添加的路径项目(不在第一位置)表示潜在的汇聚,因为跟随
另一运行路径的线程可能在跟随此运行路径的线程之前运行,因此这些线程之间可能汇
聚。因此,汇聚标记还与此另一基本块(即,在此次迭代中被附加到该路径项目的基本块)相
关联,从而使得这里的可能汇聚能够被利用。

在一些实施例中,每个迭代步骤包括:当另一运行路径从至少一个基本块导向第
二另一基本块时,向队列添加另一路径项目,其中另一路径项目包括被附加有太阳城集团第二另
一基本块的标志的先有路径项目。因此,当不止一个运行路径从基本块导出(例如,导向该
另一基本块以及导向第二另一基本块)时,迭代步骤向队列添加与此另一运行路径相应的
另外的(另一)路径项目。因为在第一路径项目的情况中,此另一路径项目于是表示一连串
基本块导向正被考虑的基本块,并然后导向此另一运行路径导向到的第二另一基本块。换
句话说,该方法当迭代地处理队列时遇到基本块的情况中(其中该基本块(通过分支)具有
可能导向到不止一个另一基本块的运行路径),相应路径项目于是被添加到队列,相应路径
项目表示程序指令序列中到分支的每个可能目标的运行路径。

在一些实施例中,该方法还包括:当队列中的另一先有路径项目包括另一基本块
的标志时,将另一先有路径项目修改为指示到该另一基本块的替代路径;以及向被编译的
程序添加与该另一基本块相关联的汇聚标记。因此,处理队列的迭代过程可以识别队列中
已有的另一路径项目(另一先有路径项目),该另一先有路径项目已经表示出到另一基本块
(即,到通过此迭代步骤当前正构建的运行路径所到达的基本块)的可能运行路径。换句话
说,在此迭代步骤,该方法已经识别出导向同一基本块的两个可能运行路径。在此情形中,
队列中现存的路径项目(另一先有路径项目)于是被修改为指示到该另一基本块的替代路
径,此外本文中认识到此另一基本块于是表示控制流图中的汇聚点,因此与此另一基本块
相关联地汇聚标记被添加到被编译的程序。如上所示,汇聚标记可以被添加到另一基本块
本身,或者例如被添加到该另一基本块前面的基本块的末端,或者被添加到适于所意欲的
对此被编译的程序的运行的另一位置,从而使得于是可以由运行电路执行对多个运行线程
中的哪些群组此时应当彼此并行运行的适当的重新评估。

可能存在从给定基本块识别出导向已经存在于队列中已有的另一路径项目中的
基本块的运行路径的情况,换句话说可能识别出循环。因此,在一些实施例中,当先有路径
项目包括该另一基本块的标志时,该路径项目为循环路径。因此,在迭代处理中可以通过此
机制来识别循环路径,并且如上所述,于是可以向被编译的程序添加与此循环路径的各个
出口基本块相关联的汇聚标记。

在这些实施例中,从循环路径中识别出口基本块可以通过各种方式来提供,但是
在一些实施例中,该方法还包括:当先有路径项目包括另一基本块的标志时,迭代地处理此
路径项目中的每个基本块,并且在每个迭代步骤中,当路径从正被处理的退出循环路径的
基本块导出时,向被编译的程序添加与正被处理的基本块相关联的汇聚标记。此循环路径
的出口点因此得以有效地被识别出并且被标记以汇聚标记。

如上所示,向被编译的程序添加汇聚标记可以包括在不同的具体位置添加汇聚标
记,这依赖于将执行被编译的程序的装置如何使用汇聚标记的具体要求,但是在一些实施
例中,向被编译的程序添加与所选基本块相关联的汇聚标记包括将汇聚标记添加于紧接在
所选基本块之前。因此,运行被编译的程序的装置于是会紧接在运行(被编译的)程序指令
的所选基本块前遇到汇聚点(本发明已经认识到此处很可能发生汇聚)。因此,这表示运行
装置再评估哪些线程现在应当并行运行的有利点,从而有效利用装置资源。

类似地,在响应于某些实施例中识别出循环路径而添加汇聚标记的情形中,向被
编译的程序添加与循环路径的各个出口基本块相关联的汇聚标记包括将汇聚标记添加在
紧接在每个出口基本块之前。

至少一些实施例提供了一种对程序指令序列进行编译以生成经编译的程序的装
置,其中该装置具有用于执行上述任意描述的方法示例的方法的配置。

至少一些实施例提供了一种计算机可读存储介质,该计算机可读存储介质存储有
计算机程序,该计算机程序当在计算机上运行时使得计算机执行上述任意描述的方法示例
的方法。

至少一些实施例提供了一种软件,该软件当在计算机上运行时使得计算机执行上
述任意描述的方法示例的方法。

至少一些实施例提供了一种利用多个运行线程并行运行计算机程序的方法,其中
计算机程序包括程序指令序列,该方法包括:识别程序指令的基本块,其中每个基本块只具
有一个入口点和一个出口点;确定导向每个基本块的至少一个运行路径;当不止一个运行
路径导向所选基本块时,向计算机程序添加与所选基本块相关联的汇聚标记;以及当存在
从另一所选基本块到该另一所选基本块的循环路径时,向计算机程序添加与循环路径的每
个出口基本块相关联的汇聚标记;以及运行多个运行线程,其中,运行多个运行线程包括:
当多个运行线程的第一子集从分叉基本块(divergent basic block)采取第一运行路径并
且多个运行线程的第二子集从所述分叉基本块采取第二运行路径时,使得第二子集等待;
并且当遇到汇聚标记时,根据预定并行运行规则来选择多个运行线程中的至少一个线程以
供运行。

运行计算机程序因此可以包括以与上面针对编译方法描述的类似方式分析程序
指令的基本块的初始化阶段,其中,程序内的潜在汇聚点被识别出并被标记以汇聚标记。之
后,当运行多个运行线程时,该方法包括识别分叉基本块,在分叉基本块处有不止一个运行
路径从该基本块导出,并且此时识别采用这些路径的多个运行线程的子集,并且使得至少
一个子集等待,而另一子集继续运行,因为这些运行线程的子集采用不同路径,从而不会发
生并行运行这二者子集的益处并且允许这些子集串行方式运行比并行方式运行更有效。之
后,当遇到添加到计算机程序的汇聚点时,定义适合并行运行所选多个运行线程的时点的
预定并行运行规则可被用来确定多个运行线程中的哪些线程现在应当彼此并行运行(直到
遇到另一分叉基本块)。

在一些实施例中,根据预定并行运行规则来选择多个运行线程中的至少一个线程
以供运行包括:选择要执行的下一指令在程序计数器顺序中是最早的一组线程。基于程序
计数器顺序对一组线程进行优先级排序于是可以对应于上文在描述的本公开技术的编译
方法时所采用的对路径项目排序并在队列中处理路径项目的方式。

至少一些实施例提供了一种并行运行计算机程序的装置,其中,该装置具有用于
执行上述任意描述的利用多个运行线程并行运行计算机程序的方法的配置。

该运行装置可以采取各种形式,但是在一些实施例中,该装置是图形处理单元。图
形处理单元可被要求用于并行地运行大量运行线程,并能从这样的并行性中获得处理效
率,并且在支持对运行处理中要执行哪些线程应当彼此并行运行的识别(以及再识别)的时
间点的选择方面,本公开的技术支持对这样的装置的高效使用。这是值得注意的,因为对哪
些线程并行操作的这种评估和再评估本身代表运行装置的并非不重要的处理任务,如果执
行得过于频繁,可能降低处理效率,然而如果执行得过于不频繁,这种并行性获得的益处就
如没有被充分利用那样。本公开的技术允许这些位置之间的有利平衡被实现。

至少一些实施例提供了一种计算机可读存储介质,该计算机可读存储介质存储有
计算机程序,该计算机程序当在计算机上运行时使得计算机执行上述任意描述的利用多个
运行线程并行运行计算机程序的方法。

至少一些实施例提供了一种软件,该软件当在计算机上运行时使得计算机执行上
述任意描述的利用多个运行线程并行运行计算机程序的方法。

现在将参考附图来描述一些具体实施例。

图1示意性地示出了一个实施例中的数据处理装置10。数据处理装置10包括中央
处理单元(CPU)12和图形处理单元(GPU)14。CPU 12和GPU 14中的每个可以执行数据处理操
作,这些操作通过从存储器16取回要被处理的数据以及数据处理指令来执行,并且适当情
况,还通过向存储器16写回数据来执行。CPU 12和GPU 14中的每个被提供有各自的缓存18、
20以便减少与从存储器16取回指令或数据相关的延时。将会认识到CPU 12和GPU 14都可以
执行大量数据处理操作,但是与本公开的技术的讨论特别有关的是GPU 14利用多个运行线
程执行计算机程序的并行运行的能力和CPU 12把来自存储于存储器16中的源程序的计算
机程序编译成可执行程序的能力,可执行程序也被存储在存储器16中,GPU 14可以取回该
可执行程序并且然后按照并行化方式运行。此外,图1中所示的CPU12和GPU 14的具体特征
是CPU 12向其编译的计算机程序添加“汇聚标记”的能力,这些汇聚标记表示CPU已经确定
当GPU 14运行CPU 12编译后的程序时对于GPU 14检查其运行的多个运行线程间的汇聚来
说有益的点。如上所述,GPU 14在当利用多个运行线程执行程序的并行运行时,通过在任何
给定时点选择这多个运行线程中适当子集供并行运行,GPU 14可以获得对数据处理装置的
资源的更有效利用。然而,由于确定这种子集本身也消耗数据处理系统的处理资源,如果这
种判定执行得过于频繁,则会失去这样的有效性。如上所述,本公开的技术通过选择被编译
的计算机程序内应当添加汇聚标记的点(例如由图1的示例中的CPU 12执行)解决了此问
题。最后,注意,不要求CPU 12和GPU 14形成同一数据处理装置的部分,并且包括CPU 12和
GPU 14的数据处理系统10仅是一个示例。在其他实施例中,CPU和GPU可以分别形成完全分
开的数据处理装置的部分。实际上,本公开的技术涉及对计算机程序的编译和运行,并且可
以等同地被应用于不具有诸如图1的实施例的CPU 12和GPU14的特别处理单元的数据处理
装置。

图2示出了诸如图1所示的数据处理系统可执行的步骤序列,其中CPU对源程序进
行编译以供GPU运行。在步骤20,CPU从存储器取回源程序,并且在步骤22,通过在程序内识
别出的适当点处添加汇聚标记来对此源程序进行编译(如后面将要参考图示更详细论述
的)。在步骤24,如此编译的可执行程序然后被CPU存回存储器。然后,在步骤26,GPU从存储
器取回此可执行程序,并且在步骤28以单指令多数据(SIMD)方式运行此程序,即并行运行
多个线程。例如,在GPU运行这样的可执行指令的情境中,此SIMD运行可对应于程序指令序
列被应用到图形显示器的多个像素,而与每个像素位置相对应的数据被相同指令序列处
理。在编译期间由CPU在步骤22添加到可执行程序的汇聚点于是在当GPU在运行此程序时会
被GPU遇到(在步骤28),并且当GPU遇到这样的汇聚点时,GPU检查当前运行的多个运行线程
间的汇聚,即,其再评估当前定义的线程中的哪些线程应当活动地被彼此并行运行,以便使
得数据处理系统的资源得以更有效地利用。

图3A示出这里被用于支持对本公开的技术的讨论的示例程序指令序列。将会认识
到,仅仅图3A的示例程序代码中的控制流指令被示出,因为这些是与本公开的技术的应用
有关的指令,并且构成“完整”程序的其余指令的数据处理指令已经被省略(仅为了说明清
楚)。图3B示出对应于图3A的程序指令的控制流图(CFG)。通过图3B的CFG将会认识到若干不
同的运行路径(对应于所示从第一明确表示的程序指令(BB0)到来自图3A的最后的程序指
令(BB5)的出口的可能路径)是可能的。图3C示出四个示例线程(T0、T1、T2、T3)采用的具体
路径。所有四个线程是同一核(运行图3A中所示的指令序列)的部分,并且并行地(SIMD)开
始运行。因此,如图3C所示,所有四个线程遵循从BB0到BB1的运行路径。然后,在BB1,由于在
BB1测试的“如果(if)”条件的不同结果,线程T0和T1与线程T2和T3分开。由于线程T0、T1与
T2、T3采用不同的运行路径,装置中运行这些线程的硬件(例如图1的GPU)选择线程T0、T1进
一步运行,并且将线程T2、T3置于等待状态以供后续进一步运行。线程T0、T1的运行继续于
运行由BB2表示的程序指令。如果在BB2处汇聚标记已经添加到被编译的程序(参见图2的步
骤22),则GPU的硬件可在此点执行它的汇聚检查,以确定哪些线程现在应当在运行处理中
进一步处理。正是因为这个原因(即在BB2处设置了汇聚点),等待的线程T2、T3然后被选择
以供进一步运行,而T0、T1等待,因为按照程序计数器顺序BB3在BB4前面。注意,按照被执行
的指令的程序计数器值对多个线程的运行进行优先级排序并不重要,但是这代表了在可能
被选择的多个运行线程间进行优先级区分的一种方式(本文使用了这种方式)。一旦BB3的
运行结束,汇聚标记于是使得装置再次判断多个运行线程中的哪些线程的子集然后应当被
选择以供运行,并且在图3C的示例中,其中线程T2跟随从BB3到BB4的运行路径,而线程T3跟
随从BB3到BB5的运行路径,装置可选择T0、T1和T2作为多个运行线程中接下来要被并行运
行的子集,即,针对子集中的每个线程运行BB4代表的指令。同时,线程T3等待。因此,从上面
对图3A-图3C的讨论中将会认识到,对被编译的程序中编译器添加汇聚标记的点的选择代
表了通过组合线程以并行运行(其中这些线程运行程序指令的相同基本块)而对运行装置
资源进行高效利用的机会,然而,由于运行装置必须执行汇聚检测以便正确地确定要被并
行运行的这样的线程子集,其本身还代表了运行装置上的处理负荷。

本公开的技术解决了此问题,如现在参考图4A和图4B所讨论的。图4A再现了图3B
的控制流图,而图4B示出了在一个实施例中本公开的技术被应用以通过编译器利用用优先
级队列来分析图4A的控制流图。优先级队列被“路径项目”填充,每个路径项目代表从入口
点(E)到当前等待运行的基本块的基本块序列。存储在优先级队列中的项目按照相对布置
位的顺序被存储在基本块的存储器中。开始,优先级队列被填充有仅一个项目,表示入口节
点E。在图4B的太阳城集团演进中示出的步骤(级)中的各步骤,优先级队列中的现存路径项目被移
除,并且运行路径通过向现存路径加入后续基本块作为后缀而被延长。例如,从图4B所示的
第一级到第二级(处理从上到下),路径项目E被移除并被路径项目E0替代,路径项目E0代表
从入口点到基本块BB0的运行路径。此路径项目E0然后在下一迭代中被移除,并且因为基本
BB0有两个后续基本块(BB1和BB5),所以两个路径项目被创建以供添加到优先级队列,这两
个路径项目都具有相同的E0主干,并且第一路径项目被附加“1”以表示至BB1的运行路径,
第二路径项目被附加“5”以表示至BB5的运行路径。还需注意,因为BB1是比BB5低的程序计
数器值,所以在优先级队列中E01被置于E05之前。随着路径项目被添加到优先级队列而(按
照程序计数器顺序)被进行优先级划分还意味着当E012被移除并被附加4时,得到的路径项
目E0124在优先级队列中被置于E013之后,因为在程序计数器顺序中,基本块BB3先于基本
块BB4。

太阳城集团图4B中所示对优先级队列的处理,需要注意的另一点是路径项目E013的扩展
表示导向BB4的运行路径。当E013被从优先级队列中移除时并且应当被附加“4”以表示运行
路径从BB3到BB4的扩展,现存的导向BB4的另一运行路径通过优先级队列中在先存在的路
径项目E0124被识别出。结果,现存路径项目E0124和建议的路径项目E0134被组合以给出组
合的路径E01{2,3}4,该组合的路径被添加到优先级队列。因为此步骤的分析明确地识别出
两个分开的运行路径汇聚到一个基本块(在BB4),所以汇聚标记于是被添加到此点。注意,
汇聚标记在程序中的具体布置可以不同,只要认识到其与运行路径在BB4处的汇聚相关联
即可。例如,汇聚标记可以作为新的第一程序指令被布置在基本块B4内,或者例如,汇聚标
记可以被布置在基本块BB2和BB3中各基本块的末端,只要对运行装置的影响为汇聚分析在
BB4处的线程运行之前执行,以便发挥向可以在BB4并行运行的许多线程进行可能添加的优
势。类似地,当E013被从优先级队列移除时,应当附加“5”,以便表示从BB3到BB5的运行路
径,队列中导向BB5的现存路径(即E05)被识别出,从而组合的路径也在此形成,在图4中被
表示为E0{13,NULL}5,表示了这两个可能路径。

此外,来自BB4的运行路径导向BB0,因此当路径项目E01{2,3}4被扩展以“0”以便
表示此时,此运行路径被识别为循环,因为可能的运行路径从BB0导向回BB0。因此,此路径
项目不被添加回优先级队列,并且此外,通过沿着该循环进行迭代处理以及判断如此遇到
的每个基本块是否给出了退出该循环的可能性,来自此循环的可能出口(在本示例中从BB0
退出和从BB3退出)被识别。如此找到的相应“循环出口”基本块被标记聚合标记。对优先级
队列的处理继续,直到优先级队列为空,这在图4A和图4B的示例中对应于已经构建的表示
导向BB5并进而导向出口节点的可能路径的路径项目的移除。

图5示出一个实施例中当在编译过程中执行上述添加汇聚标记时采取的步骤序
列。流程开始于步骤100,其中优先级队列被以入口基本块(E)被初始化。然后,在步骤102,
判断优先级队列是否为空。当然在步骤100后紧接的第一次迭代中,优先级队列并不为空,
但是当优先级队列为空(下面会更详细描述)时,流程进行到步骤104,此处步骤结束。然而,
当优先级队列不为空时,流程进行到步骤106,此处路径P(这里也称为“路径项目”)被从优
先级队列的最前面移除。然后,在此之后,在步骤108,为P的最后的基本块(BB)的一个或多
个后续基本块的每个基本块创建路径P’。如果对于P没有后续基本块,则流程(参见步骤
110)返回步骤102。当存在这样的一个或多个后续基本块时,流程于是进行到步骤112,此处
判断此后续基本块(或者在多个后续基本块的情况中正被考虑的后续基本块)是否已经存
在与路径P中,这意味着循环被识别。如果识别出循环,则流程进行到步骤114,此处该循环
所有出口基本块被标记为汇聚点(即,汇聚标记添加为与这些基本块中的每个基本块相关
联)。如上所述,这些“循环出口”通过沿着循环迭代地进行处理以及判断如此遇到的每个基
本块是否给出了退出循环的可能性而被识别。然后,从步骤116,如果对于P存在另一后续基
本块,则流程返回步骤112。当没有另外的后续基本块时,流程从步骤116返回步骤102。

如果在步骤112处没有识别出循环,则流程进行到步骤118,此处判断所考虑的后
续基本块S是否已经存在于优先级队列中的另一路径Q。如果所考虑的后续基本块S已经存
在于优先级队列中的另一路径Q,则流程进行到步骤120,此处路径Q和路径P被合并,后续基
本块S被标记为汇聚点并且合并路径被重布置到优先级队列中。流程然后进行到步骤122,
此处判断是否有路径P的另一后续基本块要被考虑。如果有,则流程返回步骤112,然而如果
没有,则流程返回步骤102。返回考虑步骤118,如果当前所考虑的后续基本块S没有存在于
优先级队列中已有的另一路径Q上,则流程进行到步骤124,此处根据程序计数器顺序P’被
添加优先级队列,以使得优先级队列中存在的路径项目被排序,从而使得与该路径项目中
的最后的基本块相关联(例如,与最后的基本块的最后的指令相关联)的程序计数器值确定
其在队列中的位置。流程然后进行到步骤126,此处判断P’是否未被添加到优先级队列的最
前面。如果是这种情形,则流程经由步骤128前进,在步骤128处,基本块S被标记为汇聚点
(即,汇聚标记被与此基本块相关联地添加到程序)。流程然后进行到步骤122,此处(如上所
述),判断对于路径P’是否有另一后续基本块要被考虑。如前所述,当对于路径P’没有另一
后续基本块要被考虑时,流程进行到步骤102,而当对于路径P有另一后续基本块要被考虑
时,流程进行到步骤112。因此,通过跟随图5给出的步骤,从优先级队列中对应于入口基本
块的路径项目开始,从优先级队列中移除路径项目并对这些路径项目以另外的基本块添加
后缀以表示程序中的运行路径并且在某些情况中还将路径项目添加回优先级队列,之后是
优先级队列被构建并被腾空的处理,并且当优先级队列为空时,过程在步骤104结束。

图6示出了一个实施例中当运行利用本公开的技术添加汇聚标记而被编译的计算
机程序时或者当运行程序并且还执行初始分析步骤(添加汇聚标记)时所采取的步骤序列。
首先,在步骤140,要执行计算机程序的装置(例如图1的GPU 14)从存储器取回(嵌有汇聚标
记的)经编译的可执行程序或者取回要被运行来执行预分析(诸如根据图5的步骤)以便适
当被添加汇聚标记的程序。然后,在步骤142,多个线程(对应于可执行程序应被施加到的多
个数据项目)被初始化,以便执行对此程序的SIMD运行。然后,在步骤144,装置选择这些线
程中的一个或多个线程以供并行运行。这具体涉及从能被运行的所有线程中确定其中哪个
子集表示可以以锁步方式彼此并行运行的一组线程,以便发挥从此并行化获得的资源有效
利用的优势。然后,在步骤146,开始运行如此选择的线程子集,应注意此运行还可包括例如
当遇到分支时某些运行线程正被搁置并且装置仅选择当前运行的线程中的子集以供进一
步运行(暂时地)。在步骤148,判断所有可能线程的运行都已结束。当并不是所有可能线程
的运行都已结束时,流程进行到步骤150,此处判断在编译期间所添加的汇聚标记是否已被
这些运行线程中的至少一个运行线程遇到。当汇聚标记尚未被至少一个运行线程遇到时,
流程返回步骤146以继续进一步运行这些所选线程。否则,如果汇聚标记被遇到,则流程返
回步骤144以对此子集的线程执行太阳城集团现在哪些线程应并行执行的新评估。一旦所有线程
结束(参见步骤148),则流程在步骤152处结束(即,对此经编译的可执行程序的运行结束)。

图7示意性地示出可以用于实施上面描述的技术的那种类型的通用计算设备200。
通用计算设备200包括中央处理单元202、随机存取存储器204和只读存储器206,它们经由
总线222连接。该通用计算设备还包括网络接口卡208、硬盘驱动210、显示器驱动器212和监
视器214以及带有键盘218和鼠标220的用户输入/输出电路216,所有这些部件都经由公共
总线22连接。该通用计算设备还包括图形处理单元224,图形处理单元也连接到公共总线
222。在操作中,诸如当执行上面描述的编译处理时,中央处理单元202将执行例如可以被存
储在随机存取存储器204和/或只读存储器206中的计算机程序指令。替代地或者另外地,程
序指令可以从硬盘驱动210取回或者动态地经由网络接口卡208下载。中央处理单元202的
这些操作的结果,例如,以准备好运行的经编译的计算机程序的形式,可被本地存储在RAM
204或HDD 210中,或者可以经由NIC 208被发送到远程位置。这样的经编译的计算机程序然
后可以被GPU 224从其被CPU202存储的位置取回出并运行。CPU 202和GPU 204执行的处理
的结果可经由所连接的显示器驱动器212和监视器214被显示给用户。控制通用计算设备
200的用户输入可以经由所连接的输入输出电路216从键盘218或鼠标220接收。

将会认识到通用计算设备200运行(具体地由CPU 202或GPU运行)的计算机程序可
以各种不同的程序语言写入。计算机程序可以本地存储在记录介质上或者可以动态下载到
通用计算设备200。当在适当计算机程序的控制下进行操作时,通用计算设备200可执行上
面描述的编译和/或程序运行的技术,并且可被认为形成了执行上面描述的编译和/或程序
运行的技术的装置。通用计算设备200的架构可以有相当大的变化,并且图7仅是一个示例。

在本申请中,词“被配置为…”或“被布置为…”被用于指装置的元件具有能够执行
所定义的操作的配置。在此上下文中,“配置”指硬件或软件的互连的布置或方式。例如,装
置可以具有提供所定义的操作的专门的硬件,或者处理器或其他处理设备可被编程以执行
所述功能。“被配置为”或“被布置为”并不暗指装置元件需要以任何方式被改变以便提供所
定义的操作。

虽然在此已经参考附图详细地描述了示意性实施例,但是应理解本发明并不限于
那些精确的实施例,而是本领域技术人员可以在不脱离由所附权利要求定义的本发明的精
神和范围内做出各种改变、添加和修改。例如,在不脱离本发明的范围的情况下,可以利用
独立权利要求的特征做出对从属权利要求的特征的各种组合。

关 键 词:
程序 指令 序列 中的 分支 汇聚 确定
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
太阳城集团本文
本文标题:程序指令序列中的分支汇聚的确定.pdf
链接地址:http://zh228.com/p-6100715.html
太阳城集团我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们

copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
葡京赌场|welcome document.write ('');