用于实现代码划分和在异构处理器内核上执行的高效有向非循环图模式匹配的制作方法_2

文档序号:9713535阅读:来源:国知局
可以在BURS解决方案中类似地进行)。计算设备还可以从根部的DAG执 行自底向上的传递(如可以在BURS解决方案中类似地进行)。但是,当计算设备将节点与预 定义的语法内的已知模式进行匹配时,计算设备可以使用先前针对该模式计算的结果,而 无需重新计算该表格。另外,每当节点与语法中的特定模式相匹配时,计算设备就可以确认 DAG中的节点之间的连接(或者经由有向边的共享)是否用匹配规则或模式来类似地表示。 例如,当与功能(例如,'存储'功能)相对应的节点匹配语法模式或规则时,计算设备可以检 查共享(或者其它节点之间的连接),以确定匹配语法模式是否指示模式节点之间的类似关 系(例如,"加载"和"存储"操作是否均在分别对于相同的数组数据结构进行读取和写入等 等)。这些方面方法可以由计算设备来执行,以在与执行常规的树模式匹配相同的时间复杂 度的情况下,将输入代码的中间表示中的DAG模式和预定义的语法进行匹配。
[0024] 在一个方面中,计算设备可以利用适合于表达模式的模式规范语言(PSL)或PSL技 术。例如,计算设备可以使用PSL来定义可以与代码表示进行比较的语法内的模式。此外,计 算设备可以基于输入代码的数据流程图来使用PSL自动地生成代码。通过使用PSL,可以使 得计算设备能够表达输入代码中的精确模式和'宽松'模式二者。例如,宽松模式可以是包 括一些通用算术计算,而无需实际地指定该算术计算应当是什么的模式。换言之,使用PSL 可以由计算设备实现关联的或交换的模式匹配。在一个方面中,PSL还可以被用来利用宽松 模式表达"包含仿射数组访问的循环"。
[0025] 当前,很多软件开发者可能不具有对执行其应用的计算设备内的不同处理单元或 内核的能力的理解,并且因此可能不知道其应用的部分是被定为目标还是以别的方式设 计,以有效地使用这些不同的内核。在一个方面中,计算设备可以被配置为实现开发者工具 包,其辅助这样的软件开发者识别其应用(或源代码)中的可以被优化或者被配置用于特定 的辅助处理器或内核(例如,DSP或GPU)的代码部分(或者片段)。使用与下面描述的用于识 别要被自动地卸载的代码部分的那些操作类似的操作,计算设备可以被配置为对代码进行 处理和评估,以识别与语法内的预定义的DAG模式相对应的代码部分,并且生成指示所评估 的代码中的某些部分可能非常适合于哪些内核的有帮助的信息或暗示。计算设备还可以被 配置为呈现所生成的有帮助的信息(例如,向软件开发者提交有帮助的信息的呈现)。这样 的有帮助的信息可以包括用于向开发者指示目标为了与编译器和/或手动配置操作一起使 用以当在计算设备上被执行时增加整体代码效率的代码部分的建议。因此,利用该技术,软 件开发者可能不需要理解特定的处理器细节,而可以用他们最喜爱的高级语言来简单地编 写代码,并且计算设备可以识别和呈现用于指示用于与该代码的各个部分一起使用的正确 的处理器的信息。
[0026] 在下面的附图以及与图3和图5有关的描述中,描绘并且描述了示例性语法(关于 规则和开销)和输入结构(例如,输入DAG),以说明各个方面方法和实现方式。这样的示例以 及被包括在内部的任何特定的值、操作、功能或结构仅仅是出于说明的目的的,并不旨在限 制权利要求书中记载的新颖的方面方法和设备的范围。特别地,在这样的说明中指示的具 体示例性值(例如,与特定的功能、规则或结构相关联的数字"开销")可以是任意的,并且仅 仅出于说明的目的而提供,并且可能不具有与实际的功能或结构的实际开销或利益的任何 关系。
[0027]图1示出了用于计算设备基于DAG模式匹配来选择用于从CPU或应用处理器卸载到 辅助处理器(例如,DSP、GPU等等)的代码的方面方法100。方面方法100可以由计算设备(例 如,膝上型计算机、智能电话等等)来执行,以针对包括DAG模式(即,已知DAG模式和相关联 的开销和/或利益的库)的已知语法来执行模式匹配。
[0028]各种BURS算法可以通过对指令进行组合并且将与每一个指令/节点相关联的开销 模型和每一个可能的指令组合的开销进行比较,来发现用于完成代码段的功能的最佳指令 集。同样地,当BURS指令选择方法被应用于DAG时,其会需要对生成原始输入代码的复本以 发现用于完成该原始输入代码的目的的最佳指令集的可能性进行探索,并且因此解决了 "np完全"问题。方法100和下面描述的其它方面方法不生成用于输入代码的新指令(或替代 指令),而是自动地识别针对DAG中的每一个节点或节点的组合的非常适合于将CPU或应用 处理器卸载到辅助处理器(例如,DSP)的多种模式。换言之,方面方法可以由计算设备执行 成非指数型算法以识别多种模式,并且选择最有性价比的代码来进行卸载,因此与BURS算 法相比,解决了更简单的问题。
[0029] 在框102中,计算设备可以生成输入代码的有向非循环图(DAG)中间表示。例如, DAG可以是基于方法的源代码、方法集或者整个应用来生成的。这样的基于图形的中间表示 可以被称为数据流程图。通常,可以通过对输入代码(例如,软件应用程序或软件程序的部 分)进行解析,并且确定该代码的结构的图形的或符号的映射来生成代码的中间表示。例 如,诸如用于某种方法的输入代码的DAG之类的中间表示,可以指示代码内的句法和其它功 能的或操作的要素。中间表示可以包括诸如注释之类的额外的信息,其可以由动态的或即 时(JIT)编译器用来对该程序进行分析和配置。
[0030] DAG中间表示可以包括具有单向连接的节点(有时被称为顶点),该单向连接可以 被称为边。DAG节点之间的这样的连接可以表示节点之间的逻辑关系。例如,叶节点和根节 点之间的连接可以指示该叶节点是函数的操作数。此外,DAG可以不包括诸如表示代码循环 的环。特别地,可以对所生成的DAG进行修整或调整,使得在中间表示中不存在环,而不管输 入代码内固有的任何循环或环。在各个方面中,可以由计算设备来利用编译器例程、模块、 指令或其它部件,以将应用的输入代码(例如,源代码、二进制代码等等)转换成连接的叶子 和/或节点的DAG结构。
[0031] 应当注意的是,DAG不与如可以在BURS算法中使用的输入树(或句法输入树)相同。 例如,在各种BURS实现方式中,可以将输入代码转换为表达式输入树,其包括各种叶节点和 子树,并且可以沿单个方向从任意叶节点遍历到根节点。方面方法可以生成包括比树更多 的关于节点之间的连接的信息的DAGAAG节点可以沿各个方向被连接和/或具有多个连接, 因此如下文描述的需要另外的操作来评估节点和模式匹配。
[0032] 在框104中,计算设备可以将所生成的DAG的每一个节点或节点的组合与语法中的 一种或多种预定义的DAG模式进行比较,每一种模式与开销度量相关联。换言之,计算设备 可以遍历所生成的DAG的节点,以检测与语法模式的匹配。计算设备可以以自底向上的方式 来访问所生成的DAG的每一个节点,在访问一个节点自身之前,基本上访问该节点的子节点 (或者叶节点)。当计算设备访问一个节点时,其可以搜索与该节点匹配的所有DAG模式(或 子模式),并且将所有可能类型(例如,语法中的"非终结符(non-terminal )")的表格更新为 该节点可以与它们的启用模式规则标识符和相关联的开销(例如,以该节点为根的DAG模式 的开销)相匹配。在所生成的DAG的根处,计算设备可以利用来自该语法的模式规则来发现 覆盖所生成的DAG的每一个节点(或节点的组合)的低开销方式。
[0033] 在各个方面中,该语法可以仅仅是存储预定义的DAG模式连同有关信息的数据结 构。例如,该语法可以是与已知用某些方式、效率或开销在特定的架构、设备、操作系统等等 上执行的指令相关联的DAG模式(或结构)的列表。不同于其它技术,方面方法可以在语法内 存储多个预定义的DAG模式,而不是树。例如,可以将所存储的预定义的模式表达成根DAG的 集合,所述根DAG的集合中的每一个根DAG可以包括针对相关联的模式的开销和/或利益度 量。在各个方面中,该语法可以包括已知非常适合于特定的内核(例如,移动设备内的DSPS GPU)的DAG模式。下面描述了这样的方面语法的非限制性说明。
[0034] 框104中的操作可以自动地确定非常适合用于卸载的代码,而无需任何开发者来 手动地指示这样的非常适合的代码。在各个方面中,框104中操作的比较可以包括:基于节 点特性或类型(例如,叶子、对应于特定的操作等等)和节点配置、连接或者排列(例如,特定 的节点之间的有向连接)来确定语法模式是否匹配DAG节点。当进行该比较时,计算设备可 以确定DAG内节点的方位、连接和依赖关系。例如,计算设备可以确定所生成的DAG内的节点 的子组包括两个寄存器叶子(例如,被存储在寄存器内的整数值)和一个根节点,所述根节 点与某个数学运算(例如,加法、乘法等等)相对应。在一个方面中,节点与语法的比较可以 包括:将所生成的DAG的每一个节点或节点的组合与被存储在启发式表格中的模式信息进 行比较。
[0035] 在框106中,计算设备可以基于比较来识别部分地覆盖所生成的DAG的语法模式集 合。换言之,基于框104中的操作中的比较,计算设备可以将语法中定义的各种DAG模式识别 成与DAG的所有节点有关或者链接到DAG的所有节点(并且因此,输入代码的所有要素)。例 如,识别的语法模式集合可以包括:与用所生成的DAG表示的每一个变量和函数相关联的语 法模式。在各个方面中,所识别的集合可以包括针对所生成的DAG的特定要素的一种以上的 语法模式(例如,具有相关联的开销/利益的多个存储的模式可以匹配所生成的DAG的特定 的节点或节点的组合)。
[0036] 在框108中,计算设备可以卸载输入代码的片段,所述输入代码的片段与所识别的 模式集合中具有最佳识别的累积效应的语法模式的组合相关联。这可以通过确定所识别的 语法模式集合的开销和利益,并且将与识别的模式组合相关联的具有最低开销的代码的片 段从CPU或应用处理器卸载到辅助处理器(例如,DSP、GPU等等)来完成。在各个方面中,当最 低累积开销(或最高/最大累积利益)超过预定义的门限值时,可以卸载该片段。例如,当所 识别的语法模式集合与组合的开销相关联时,可以将输入代码(或者输入代码的片段)卸载 到DSP,所述组合的开销不超过用于有益地从CPU或应用处理器卸载到DSP的最大开销门限 值。
[0037]图2示出了用于计算设备基于DAG模式匹配来选择用于卸载到辅助处理器(例如, DSP、GPU等等)的代码的方面方法250。除了方法250包括用于对模式进行重新评估以便确认 匹配模式包括与DAG内定义的节点之间的连接相同的连接的显示操作之外,方法250类似于 上面描述的方法100。在框102中,如上所述,计算设备可以生成输入代码的有向非循环图 (DAG)中间表示。在框104中,计算设备可以将所生成
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1