CN106257412A - 程序指令序列中的分支汇聚的确定 - Google Patents
程序指令序列中的分支汇聚的确定 Download PDFInfo
- Publication number
- CN106257412A CN106257412A CN201610406030.1A CN201610406030A CN106257412A CN 106257412 A CN106257412 A CN 106257412A CN 201610406030 A CN201610406030 A CN 201610406030A CN 106257412 A CN106257412 A CN 106257412A
- Authority
- CN
- China
- Prior art keywords
- basic block
- path
- program
- project
- labelling
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 claims abstract description 99
- 238000002372 labelling Methods 0.000 claims abstract description 63
- 238000004590 computer program Methods 0.000 claims abstract description 46
- 230000008569 process Effects 0.000 claims description 44
- 238000003860 storage Methods 0.000 claims description 9
- 230000014759 maintenance of location Effects 0.000 claims 2
- 238000005516 engineering process Methods 0.000 description 33
- 230000008901 benefit Effects 0.000 description 5
- 238000012913 prioritisation Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 241000196324 Embryophyta Species 0.000 description 1
- 240000001439 Opuntia Species 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 210000000056 organ Anatomy 0.000 description 1
- 238000011112 process operation Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/458—Synchronisation, e.g. post-wait, barriers, locks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请涉及程序指令序列中的分支汇聚的确定。公开了一种对程序指令序列进行编译的方法、对程序指令序列进行并行运行的方法、以及支持这些方法的装置和软件。程序指令序列以形成控制流图的基本块为单位被分析,并且穿越该控制流图的运行路径被识别。当不止一个运行路径导向给定基本块时或者循环路径被发现从给定基本块导向返回同一基本块时,潜在汇聚点可以被识别出。汇聚标记与按照这种方式识别出的基本块相关联地被添加到计算机程序,于是当该程序被运行时,所发现的汇聚标记被用于触发对多个运行线程中在汇聚标记后运行的子集的确定。
Description
技术领域
本公开涉及数据处理领域。更具体地,本公开涉及程序指令序列中的分支汇聚的确定。
背景技术
供数据处理装置运行的一组程序指令可能不只导致以简单线性的方式运行,即,其中程序指令按照顺序次序从序列中的第一指令运行到序列中的最后一个指令。这是因为各程序指令中设置的条件可能使得程序流从序列中的给定程序指令发生到另一程序指令的分支,或者在序列中跳跃前进,或者后退到序列中的在前程序指令。在程序指令序列的运行中的这些可能分支或循环在能够执行多个线程(这多个线程运行相同的核)的数据处理装置的环境中是特别重要的,因为以锁步的方式执行这些并行的线程可以得到性能益处,从而使得数据处理装置的资源得以更有效地利用。然而,当这些线程由于各个线程的不同条件导致这些线程采用不同分支而发生分叉时,会失去这种并行性。然而,可能存在分开的线程再次会聚到一起的点,从而再次获得通过并行锁步运行而改善性能的机会。本公开涉及对这种汇聚点的识别。
发明内容
本技术的至少一些实施例提供了一种对程序指令序列进行编译以生成经编译的程序的方法,包括:识别程序指令的基本块,其中每个基本块只具有一个入口点和一个出口点;确定导向每个基本块的至少一个运行路径;当不止一个运行路径导向选定基本块时,向该被编译的程序添加与选定基本块相关联的汇聚标记;以及当存在从另一选定基本块到该另一选定基本块的循环路径时,向该被编译的程序添加与循环路径的各个出口基本块相关联的汇聚标记。
本技术的至少一些实施例提供了一种对程序指令序列进行编译以生成经编译的程序的装置,其中该装置具有用于执行上述对程序指令序列进行编译的方法的配置。
本技术的至少一些实施例提供了一种计算机可读存储介质,该算机可读存储介质存储有计算机程序,该计算机程序当在计算机上运行时使得计算机执行上述对程序指令序列进行编译的方法。
本技术的至少一些实施例提供了一种软件,该软件当在计算机上运行时使得计算机执行上述对程序指令序列进行编译的方法。
本技术的至少一些实施例提供了一种利用多个运行线程并行运行计算机程序的方法,其中计算机程序包括程序指令序列,所述方法包括:识别程序指令的基本块,其中每个基本块只具有一个入口点和一个出口点;确定导向每个基本块的至少一个运行路径;当不止一个运行路径导向选定基本块时,向所述计算机程序添加与选定基本块相关联的汇聚标记;以及当存在从另一选定基本块到该另一选定基本块的循环路径时,向所述计算机程序添加与循环路径的每个出口基本块相关联的汇聚标记;以及运行所述多个运行线程,其中,运行所述多个运行线程包括:当多个运行线程的第一子集从分叉基本块采取第一运行路径并且多个运行线程的第二子集从所述分叉基本块采取第二运行路径时,使得第二子集等待;并且当遇到汇聚标记时,根据预定并行运行规则来选择多个运行线程中的至少一个线程以供运行。
本技术的至少一些实施例提供了一种并行运行计算机程序的装置,其中,所述装置具有用于执行上述利用多个运行线程并行运行计算机程序的方法的配置。
本技术的至少一些实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,该计算机程序当在计算机上运行时使得所述计算机执行上述利用多个运行线程并行运行计算机程序的方法。
本技术的至少一些实施例提供了一种软件,该软件当在计算机上运行时使得计算机执行上述利用多个运行线程并行运行计算机程序的方法。
附图说明
将参考附图中示出的那些实施例仅通过示例的方式进一步描述本技术,其中:
图1示意性地示出一个实施例中包括CPU和GPU的装置;
图2是示出在一个实施例中当CPU被用于对源程序进行编译以供以并行运行的方式被GPU运行时所执行的步骤序列的流程图;
图3A示出示例程序指令序列的结构;
图3B示出图3A中所示程序指令序列的控制流图(CFG);
图3C以并行运行的四个线程的示例运行路径示出图3B的CFG;
图4A示出图3B的CFG;
图4B示出一个实施例中当确定图3A的程序指令序列中的汇聚点时使用的优先级队列的演变;
图5示出一个实施例中当利用优先级队列来确定程序指令队列中的汇聚点时在方法中所采取的步骤序列;
图6示出一个实施例中当运行已经在一个实施例的编译阶段添加了汇聚标记的经编译的程序时所采取的步骤序列;以及
图7示意性地示出一个实施例中既支持编译又支持运行的通用计算设备。
具体实施方式
至少一些实施例提供了一种对程序指令序列进行编译以生成经编译的程序的方法,包括:识别程序指令的基本块,其中每个基本块只具有一个入口点和一个出口点;确定导向每个基本块的至少一个运行路径;当不止一个运行路径导向所选基本块时,向该被编译的程序添加与所选基本块相关联的汇聚标记;以及当存在从另一所选基本块到该另一所选基本块的循环路径时,向该被编译的程序添加与循环路径的各个出口基本块(exitbasic block)相关联的汇聚标记。
一种用于找到程序指令序列中的汇聚点的技术利用了直接后支配者(immediatepost-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的这些操作的结果,例如,以准备好运行的经编译的计算机程序的形式,可被本地存储在RAM204或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仅是一个示例。
在本申请中,词“被配置为…”或“被布置为…”被用于指装置的元件具有能够执行所定义的操作的配置。在此上下文中,“配置”指硬件或软件的互连的布置或方式。例如,装置可以具有提供所定义的操作的专门的硬件,或者处理器或其他处理设备可被编程以执行所述功能。“被配置为”或“被布置为”并不暗指装置元件需要以任何方式被改变以便提供所定义的操作。
虽然在此已经参考附图详细地描述了示意性实施例,但是应理解本发明并不限于那些精确的实施例,而是本领域技术人员可以在不脱离由所附权利要求定义的本发明的精神和范围内做出各种改变、添加和修改。例如,在不脱离本发明的范围的情况下,可以利用独立权利要求的特征做出对从属权利要求的特征的各种组合。
Claims (18)
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所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP15386020.0A EP3106982B1 (en) | 2015-06-18 | 2015-06-18 | Determination of branch convergence in a sequence of program instructions |
EP15386020.0 | 2015-06-18 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106257412A true CN106257412A (zh) | 2016-12-28 |
CN106257412B CN106257412B (zh) | 2022-01-18 |
Family
ID=53546193
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610406030.1A Active CN106257412B (zh) | 2015-06-18 | 2016-06-08 | 程序指令序列中的分支汇聚的确定 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9990186B2 (zh) |
EP (1) | EP3106982B1 (zh) |
CN (1) | CN106257412B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118349281A (zh) * | 2024-06-18 | 2024-07-16 | 北京辉羲智能科技有限公司 | 线程分歧处理方法、装置和设备 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9501382B2 (en) * | 2013-06-25 | 2016-11-22 | Purdue Research Foundation | Systems and methods of detecting power bugs |
EP3335116B1 (en) * | 2015-08-11 | 2024-10-23 | AB Initio Technology LLC | Data processing graph compilation |
EP3208712B1 (en) * | 2016-02-22 | 2020-02-19 | Karlsruher Institut für Technologie | Computer system and method for parallel program code optimization and deployment |
DE112018001789T5 (de) * | 2017-03-29 | 2019-12-19 | Ab Initio Technology Llc | Systeme und verfahren zum durchführen von datenverarbeitungsoperationen unter verwendung von parallelität variabler grade |
US10379863B2 (en) * | 2017-09-21 | 2019-08-13 | Qualcomm Incorporated | Slice construction for pre-executing data dependent loads |
US10877757B2 (en) * | 2017-11-14 | 2020-12-29 | Nvidia Corporation | Binding constants at runtime for improved resource utilization |
US12032631B2 (en) | 2018-05-30 | 2024-07-09 | Ab Initio Technology Llc | Systems and methods for dataflow graph optimization |
US11194555B2 (en) * | 2020-04-13 | 2021-12-07 | International Business Machines Corporation | Optimization of execution of smart contracts |
US11625250B2 (en) * | 2021-01-29 | 2023-04-11 | Huawei Technologies Co., Ltd. | Method and system for parallel processing of tasks in multiple thread computing |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1118899A (zh) * | 1994-09-13 | 1996-03-20 | 松下电器产业株式会社 | 编译程序器 |
US6026241A (en) * | 1997-06-13 | 2000-02-15 | Silicon Graphics, Inc. | System, method, and computer program product for partial redundancy elimination based on static single assignment form during compilation |
CN1270348A (zh) * | 1998-10-21 | 2000-10-18 | 富士通株式会社 | 用于结构仿真的动态优化目标码翻译器和翻译方法 |
US20060179423A1 (en) * | 2003-02-20 | 2006-08-10 | Lindwer Menno M | Translation of a series of computer instructions |
CN101271398A (zh) * | 2007-03-23 | 2008-09-24 | 北京大学 | 多路分支结构的识别方法 |
US20100268447A1 (en) * | 2009-04-15 | 2010-10-21 | Owen Griffiths | System and method for journey planning, finding k shortest paths through a time/space network |
US8381203B1 (en) * | 2006-11-03 | 2013-02-19 | Nvidia Corporation | Insertion of multithreaded execution synchronization points in a software program |
US20130305021A1 (en) * | 2012-05-09 | 2013-11-14 | Vinod Grover | Method for convergence analysis based on thread variance analysis |
US20140215183A1 (en) * | 2013-01-29 | 2014-07-31 | Advanced Micro Devices, Inc. | Hardware and software solutions to divergent branches in a parallel pipeline |
US20140215187A1 (en) * | 2013-01-29 | 2014-07-31 | Advanced Micro Devices, Inc. | Solution to divergent branches in a simd core using hardware pointers |
US20140223420A1 (en) * | 2013-02-06 | 2014-08-07 | Nvidia Corporation | Convergence analysis in multithreaded programs |
CN104199652A (zh) * | 2014-08-26 | 2014-12-10 | 邱涌 | 基于数据流的c to hdl同步映射方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060048114A1 (en) * | 2004-09-02 | 2006-03-02 | International Business Machines Corporation | Method and apparatus for dynamic compilation of selective code blocks of computer programming code to different memory locations |
US7827022B2 (en) * | 2006-09-27 | 2010-11-02 | Rockwell Automation Technologies, Inc. | Sequential function chart validation tool |
US20090037885A1 (en) * | 2007-07-30 | 2009-02-05 | Microsoft Cororation | Emulating execution of divergent program execution paths |
US8782611B1 (en) * | 2009-08-24 | 2014-07-15 | Nvidia Corporation | Visual inspection and debugging of threads in parallel computing systems |
US9424038B2 (en) * | 2012-12-10 | 2016-08-23 | Nvidia Corporation | Compiler-controlled region scheduling for SIMD execution of threads |
US9697003B2 (en) * | 2013-06-07 | 2017-07-04 | Advanced Micro Devices, Inc. | Method and system for yield operation supporting thread-like behavior |
US9928033B2 (en) * | 2013-06-19 | 2018-03-27 | Nvidia Corporation | Single-pass parallel prefix scan with dynamic look back |
US20160170725A1 (en) * | 2014-12-15 | 2016-06-16 | Arizona Board Of Regents On Behalf Of Arizona State University | Global call control flow graph for optimizing software managed manycore architectures |
-
2015
- 2015-06-18 EP EP15386020.0A patent/EP3106982B1/en active Active
-
2016
- 2016-05-31 US US15/168,368 patent/US9990186B2/en active Active
- 2016-06-08 CN CN201610406030.1A patent/CN106257412B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1118899A (zh) * | 1994-09-13 | 1996-03-20 | 松下电器产业株式会社 | 编译程序器 |
US6026241A (en) * | 1997-06-13 | 2000-02-15 | Silicon Graphics, Inc. | System, method, and computer program product for partial redundancy elimination based on static single assignment form during compilation |
CN1270348A (zh) * | 1998-10-21 | 2000-10-18 | 富士通株式会社 | 用于结构仿真的动态优化目标码翻译器和翻译方法 |
US20060179423A1 (en) * | 2003-02-20 | 2006-08-10 | Lindwer Menno M | Translation of a series of computer instructions |
US8381203B1 (en) * | 2006-11-03 | 2013-02-19 | Nvidia Corporation | Insertion of multithreaded execution synchronization points in a software program |
CN101271398A (zh) * | 2007-03-23 | 2008-09-24 | 北京大学 | 多路分支结构的识别方法 |
US20100268447A1 (en) * | 2009-04-15 | 2010-10-21 | Owen Griffiths | System and method for journey planning, finding k shortest paths through a time/space network |
US20130305021A1 (en) * | 2012-05-09 | 2013-11-14 | Vinod Grover | Method for convergence analysis based on thread variance analysis |
US20140215183A1 (en) * | 2013-01-29 | 2014-07-31 | Advanced Micro Devices, Inc. | Hardware and software solutions to divergent branches in a parallel pipeline |
US20140215187A1 (en) * | 2013-01-29 | 2014-07-31 | Advanced Micro Devices, Inc. | Solution to divergent branches in a simd core using hardware pointers |
US20140223420A1 (en) * | 2013-02-06 | 2014-08-07 | Nvidia Corporation | Convergence analysis in multithreaded programs |
CN104199652A (zh) * | 2014-08-26 | 2014-12-10 | 邱涌 | 基于数据流的c to hdl同步映射方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118349281A (zh) * | 2024-06-18 | 2024-07-16 | 北京辉羲智能科技有限公司 | 线程分歧处理方法、装置和设备 |
Also Published As
Publication number | Publication date |
---|---|
EP3106982B1 (en) | 2021-03-10 |
US20160371067A1 (en) | 2016-12-22 |
US9990186B2 (en) | 2018-06-05 |
EP3106982A1 (en) | 2016-12-21 |
CN106257412B (zh) | 2022-01-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106257412A (zh) | 程序指令序列中的分支汇聚的确定 | |
US11449364B2 (en) | Processing in a multicore processor with different cores having different architectures | |
EP3126971B1 (en) | Program execution on heterogeneous platform | |
Habich et al. | Performance engineering for the lattice Boltzmann method on GPGPUs: Architectural requirements and performance results | |
US8990827B2 (en) | Optimizing data warehousing applications for GPUs using dynamic stream scheduling and dispatch of fused and split kernels | |
Skinderowicz | The GPU-based parallel ant colony system | |
US20120297163A1 (en) | Automatic kernel migration for heterogeneous cores | |
US20160371093A1 (en) | Scalarization of Vector Processing | |
KR20110071097A (ko) | 소스 코드 처리 방법, 시스템, 및 프로그램 | |
US8997071B2 (en) | Optimized division of work among processors in a heterogeneous processing system | |
Li et al. | Practical symbolic race checking of GPU programs | |
CN102830954B (zh) | 指令调度方法及装置 | |
Siracusa et al. | A comprehensive methodology to optimize FPGA designs via the roofline model | |
KR20080093108A (ko) | 프로그램 병렬 실행 시스템 및 방법 | |
Dong et al. | Characterizing the microarchitectural implications of a convolutional neural network (cnn) execution on gpus | |
Janzén et al. | Partitioning gpus for improved scalability | |
KR20210013707A (ko) | 메타데이터를 사용하여 신경망에서 기회주의적 로드 밸런싱을 위한 방법 및 시스템 | |
CN115860066A (zh) | 一种基于批处理的神经网络推理流水线复用的方法 | |
Gou et al. | Addressing GPU on-chip shared memory bank conflicts using elastic pipeline | |
US20240193721A1 (en) | System and method for adaptive graph-to-stream scheduling | |
CN116802605A (zh) | 用于根据触发条件执行指令的电路和方法 | |
Hirvisalo | On static timing analysis of GPU kernels | |
Topaloglu et al. | GPU programming for EDA with OpenCL | |
Kim et al. | Towards predicting GPGPU performance for concurrent workloads in Multi-GPGPU environment | |
Borisenko et al. | Parallelizing branch-and-bound on gpus for optimization of multiproduct batch plants |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |