用于将单一静态指派指令映射至数据流架构中的数据流图上的方法和装置与流程

文档序号:17317782发布日期:2019-04-05 21:22阅读:235来源:国知局
用于将单一静态指派指令映射至数据流架构中的数据流图上的方法和装置与流程

本公开一般涉及数据流架构,并且更具体地涉及用于将单一静态指派指令映射至数据流架构中的数据流图上的方法和装置。



背景技术:

近年来,计算领域中对增加处理速度的驱动力已导致对硬件加速器的兴趣增加。硬件加速器包括被配置成执行特定计算功能的硬件单元。硬件单元以允许对数据集执行期望计算集的方式来链接在一起。在许多实例中,硬件单元以允许对多个数据集并行地执行计算密集型处理的方式来链接。所得的并发性可产生令人印象深刻的并行处理速度,并且在一些实例中,超过了使用执行软件指令的通用处理器可实现的处理速度。

附图说明

图1是包括示例编译器的示例处理系统的框图。

图2是图1的示例编译器的示例映射管理器的示例实现的框图。

图3是要被图2的示例映射管理器的示例循环处理机修改的第一示例指令集和第二示例指令集。

图4是包含完全控制依赖树的示例控制依赖图。

图5是表示可以被执行以实现图1和/或2的示例映射管理器的示例机器可读指令的流程图。

图6是表示可被执行以实现图2的示例变量处理机的示例机器可读指令的流程图。

图7是表示可被执行以实现图2的示例phi处理机的示例机器可读指令的流程图。

图8是被构造用于执行图5、6和7中的指令以实现图1和/或图2的示例映射管理器的示例处理平台的框图。

附图不按比例绘制。在可能的情况下,在整个附图和所附书面描述中将使用相同的附图标记来指代相同或相似的部件。

具体实施方式

硬件加速器被频繁地用于实现并行的高处理速度,并且可甚至超过使用执行软件指令的通用处理器可实现的处理速度。不像通用处理器,硬件处理器采用数据流架构而不是控制流架构。结果,使用数据流图而不是常规软件指令来对硬件加速器(本文中也被称为数据流引擎)编程。因此,常规软件指令在它们可在数据流引擎上执行之前被转换成数据流图。

数据流图包括功能单元集,以及连接功能单元的通道。(等效软件程序中)的每个变量映射至一通道。数据流图不被用于表示向变量指派多于单个值的软件代码。结果,被配置成将常规软件指令转换成数据流图的编译器将首先把软件指令转换成称为静态单一指派(ssa)的形式。然而,ssa形式的软件不能被直接转换成数据流图。因此,在将软件转换成ssa形式之后,常规编译器在编译器生成供数据流引擎执行的数据流图之前将ssa格式化的软件变换出ssa形式。不幸的是,编译器用来将软件变换出ssa形式的方法是容易出错的,并且对某些特定架构而言是不可能的。

图1是包括示例编译器102的示例处理系统100的框图。编译器102编译存储在示例软件指令存储104中的软件指令集以供示例数据流引擎106执行。在一些示例中,编译器102包括示例静态单一指派(ssa)代码转换器108。ssa代码转换器108将存储在软件指令存储104中的指令转换成ssa格式并将ssa格式的指令存储在示例ssa存储110中。示例映射管理器112将ssa格式化的指令映射至数据流图。在一些示例中,映射管理器112将数据流图存储在示例数据流图存储114中,和/或将数据流图供给至数据流引擎以供执行。

图2是图1中的示例映射管理器的示例实现的框图。在一些示例中,映射管理器112包括示例指令分析器202、示例变量处理机204、以及示例phi处理机206。在一些示例中,示例指令分析器202包括示例变量标识器208、示例变量指令标识器210、示例循环标识器212、以及示例phi标识器214。指令分析器202检查存储在ssa代码存储110中的ssa格式化的指令来标识:1)供变量处理机204使用的第一信息,以及2)供phi处理机206使用的第二信息。

示例变量处理机204包括示例最早出现标识器216、示例变量重命名器218、示例变量复制器220、以及示例循环处理机222。示例循环处理机222包括示例指令生成器226和示例指令插入器228。如以下更详细地描述的,变量处理机204使用第一信息来确保代码中的变量各自仅被使用单次,且进一步确保在循环的每次迭代期间为循环变量生成值。phi处理机使用第二信息来将phi指令映射至数据流图中的节点/功能。

phi处理机206包括示例控制依赖图生成器230、示例树遍历器232、示例挑选生成器234、以及示例谓语(predicate)生成器236。

依旧参看图2,静态单一指派(ssa)格式化要求包括在软件指令集中的每个变量仅被定义一次。此需求被称为“单定义”性质。变量最终成为要由映射管理器112创建的数据流图中的通道,且对指令中的变量的每次使用将表示数据流图中的分开的消耗通道。因此,除“单定义”性质之外,数据流图还需要被称为“单使用”的性质。如此,具有以下三条指令:1)x=a+b;2)y=x+c;和3)z=x+d的集合的示例软件程序不满足单使用性质,因为“x”被使用三次(例如,变量“x”在三个指令中的每个指令中出现)。因此,映射管理器112修改指令使得消除对变量“x”的多次使用。同样,循环中使用的、但在此循环外定义的任何变量由指令显式重复(例如,指令为每次循环迭代生成变量的值),以便指令可被成功用于生成数据流图。

依旧参看图2,示例指令分析器202的示例变量标识器208分析存储在ssa代码存储104中的软件指令以标识软件指令中被使用多次的变量。作为示例,在分析三条指令:1)x=a+b;2)y=x+c;和3)z=x+d时,变量标识器208将变量“x”标识为被使用一次以上。此外,示例变量指令标识器210标识存储在ssa代码存储104中的使用经标识变量(例如,变量“x”)的指令。因此,在分析三条指令:1)x=a+b;2)y=x+c;和3)z=x+d的集合时,变量指令标识器210将所有三条指令标识为使用变量“x”的指令。在一些示例中,变量标识器208和变量指令标识器210向变量处理机204供给标识经标识变量和经标识指令的信息。

如上所述,在一些示例中,示例变量处理机204使用由指令分析器202供给的第一信息(例如,经标识变量和经标识指令)来确保ssa代码中的变量各自仅被使用单次。为此,示例最早出现标识器218标识包含变量的经标识指令集中的最早指令(要被执行的第一个)。在三条指令的示例集合中,最早出现的指令是第一指令(例如,x=a+b)。此外,示例变量重命名器218重命名由示例变量指令标识器210供给的除最早出现的经标识指令之外的经标识指令中出现的变量“x”。如应用于三条示例指令,变量重命名器218单独留下第一指令(例如,不重命名经标识变量),而将第二指令中的变量“x”重命名为变量“x1”并将第三指令中的变量“x”重命名为“x2”。在重命名操作之后,示例三条指令采取以下形式:1)x=a+b;2)y=x1+c;和3)z=x2+d。

此外,示例变量处理机204的示例变量复制器220导致在最早出现指令中生成的经标识变量的值被复制到使用变量“x”的稍后出现指令。在一些示例中,变量复制器220通过在最早出现指令之后且在稍后出现指令之前插入“copy(复制)指令”来导致在最早出现指令中生成的经标识变量的值被复制到稍后出现指令。在一些示例中,“copy指令”包括两个或更多个自变量。第一自变量表示要被复制的值的源,而一个或多个其他自变量表示值要被复制到的目的地。如应用于三条示例指令,变量复制器220插入指令“copyx,x1,x2”,以导致变量“x”的值被复制到变量“x1”和变量“x2”,且被用作变量“x1”和变量“x2”的值。作为copy指令的结果,变量“x”的值被用作变量“x1”和变量“x2”的值。因此,在最早出现指令中生成的经标识变量的值被复制到使用重命名变量“x1”和“x2”的稍后出现指令。

在示例变量复制器220将变量“x”的值复制到变量“x”的重命名版本(例如,到变量“x1”和“x2”)之后,示例循环处理机222操作来修改ssa指令。在一些示例中,示例循环处理机222包括示例指令生成器226和示例指令插入器228。由示例循环处理机222执行的修改导致针对每次循环迭代来重复地生成与在循环内使用但在循环外定义的变量相对应的值。要重复地生成此类变量的值是因为,一旦与循环迭代相对应的值被生成并被硬件消耗,就要在下一循环迭代期间(或者在循环的出口处,这取决于变量在循环内操作的方式)生成另一值以供消耗。

在一些示例中,示例指令分析器202的示例循环标识器212检查ssa指令并标识包含变量引用的循环。在一些示例中,循环标识器212还标识每个经标识循环的循环头部和循环锁。循环标识器212向循环处理机222中的指令生成器226供给关于经标识循环的信息。

指令生成器226使用该信息来生成要被插入至经标识循环的数据流指令。在一些示例中,指令生成器226为循环中的每一个生成pick(挑选)指令。pick指令——其可被表示为“x=pickb,x1,x2”——等同于c代码指令:“x=b?x1:x2”。pick指令导致如果变量“b”的值为假,则将变量“x”的值发送至“x1”。如果变量“b”的值为非假,则将变量“x”的值发送至“x2”。指令插入器222在循环头部处插入pick指令,并导致从循环外部挑选(在第一次迭代的情形中)或者从循环体生成的值挑选变量“x”的值。

在一些示例中,指令生成器226还为循环中的每一个生成switch(切换)指令。为循环生成的switch指令被置于循环锁处,并获得变量的值,以及基于循环出口条件,要么将值切换(发送)至循环头部以供新插入的pick指令消耗,要么忽略该值。在一些示例中,switch指令被表示为“x1,x2=switchb,x”。

图3例示出表示对变量“v0”进行操作的循环的两个示例指令集300。第一指令集302a包括第一(未修改)循环指令304a,第二指令集302b包括第二(经修改)循环指令304b。第一指令集302a包括第一非循环(循环外)指令308a,其中“v0”的值被定义为等于“f(a)”。第一循环指令304a包括与循环入口相对应的示例第一循环指令310a、其中变量“x”被定义为等于“v0”的值的示例第二循环指令312a、以及与循环出口相对应的示例第三循环指令314a。示例第二非循环指令316a跟随在第一循环指令304a的出口之后。

第二指令集302b是第一指令集302a的已被循环处理机222修改的版本。第二指令集302b包括第一非循环(循环外)指令308b,其中“v0”的值被定义为等于“f(a)”。第二循环指令304b包括与循环入口相对应的示例第一循环指令310b、由循环处理机222生成并插入的示例第二循环指令312b,其中变量“x”被定义为等于“v0”的值的示例第三循环指令314b、由循环处理机222生成并插入的示例第四循环指令316b、以及与循环出口相对应的示例第五循环指令318b。示例第二非循环指令320b跟随在第二循环指令304b之后。

本文使用第一和第二指令集302a、302b来例示由示例循环处理机222执行的操作的结果。如所示,第二指令集302b包括已由循环处理机222生成并插入的循环指令。例如,第二循环指令312b是pick指令,“v=pickb1,v0,v1”,而第四循环指令316b是switch指令,“v1,%ign=switchb2,v”。如上所述,pick指令导致在循环外生成的“v”的值被用于第一循环迭代,并导致在循环体内生成的“v”的值被用于后续迭代。同时switch指令在下一循环迭代开始时导致变量“v1”的值被定义为变量“v”的值。

在此参看图3,除示例变量处理机204对ssa代码进行操作之外,示例phi处理机206也对ssa代码进行操作。在一些示例中,phi处理机206被配置成替换包括在ssa代码中的所有phi指令。当多于一个变量定义到达单个节点时,phi指令被用于ssa格式化代码中。在此类情况下,要被指派给此节点的变量的值取决于例如由通向该节点的分支指令指示的经编码指令的流控制。示例phi指令可采取以下形式,“x=phi(x3,b3,x4,b4,x5,b5,x6,b6)”。在示例phi指令中,变量“x3”指的是在phi输入框b3处指派给变量“x3”的值,变量“x4”指的是在phi输入框b4处指派给变量“x4”的值,变量“x5”指的是在phi输入框b5处指派给变量“x5”的值,而变量“x6”指的是在phi输入框b6处指派给变量“x6”的值。因此,基于phi指令,取决于指向phi指令的phi输入框,“x”可被指派“x3”、“x4”、“x5”和“x6”的值中的任一个。

同样参看图4,示例控制依赖图400例示出表示包括phi指令的ssa指令的控制依赖树。控制依赖图400包括示例节点b0、示例节点b1、示例节点b2、示例节点b3、示例节点b4、示例节点b5、示例节点b6和示例节点b7。如所例示的,节点b0产生到节点b1或b2的分支,节点b1产生到节点b3或b4的分支,节点b2产生到节点b5或b6的分支,而节点b7基于节点b3、b4、b5或b6中的任一个来向变量“x”指派值。因此,节点b7之前执行的节点(其可包括节点b3、b4、b5或b6中的任一个)将指示要在节点b7处被指派给变量“x”的值。用于将ssa代码转换成供数据流引擎执行的数据流图的常规方法不包括用于将phi节点直接降(lower)至数据流图上的任何方式。替代地,在指令可被映射至数据流图之前,常规方法需要将ssa代码变换出ssa格式以消除phi节点。相反,图2中的映射管理器112的phi处理机206以允许将phi节点直接降至数据流图上的方式来处理包括在ssa格式化代码中的phi指令。

在一些示例中,示例phi处理机206通过将phi指令映射至pick指令的树中来将ssa代码中的phi指令映射至数据流图。在一些此类示例中,示例指令分析器202中的phi标识器214分析ssa代码以标识包括在ssa代码中的phi指令的所有实例。当phi指令被标识时,phi标识器214向示例控制依赖图生成器230提供关于phi指令的信息。控制依赖图生成器230使用来自phi标识器214的信息以及ssa代码来生成对应于phi节点的控制依赖图。控制依赖图例示出phi节点依赖于其输入的节点(例如,参见图4的示例控制依赖树400)。接下来,示例树遍历器232遍历控制依赖树以标识phi节点的控制依赖父。假设控制依赖图形成完全树,树遍历器232在phi节点的基本输入节点处开始并遍历控制依赖树,直到到达对应的根节点。

在一些示例中,对于在到根节点的遍历期间遇到的每个控制依赖父,将生成pick指令。例如,树遍历器232可始于基本输入框b3,然后向上遍历至节点b1。在图4的示例控制依赖图中,节点b1是节点b3的控制依赖父。在遇到节点b1之际,树遍历器232通知pick生成器234,该pick生成器234通过生成第一pick指令来作出响应。第一个pick指令使用与节点b1相关联的分支条件“b1”来控制将两个值中的哪一个指派给变量“y1”。如下所述,pick指令的两个可能操作数包括对应于与节点b3相关联的变量“x3”的值,或者当树遍历器232到达节点b4时要填充的尚未知晓的变量“?”的值。在此类的示例中,第一pick指令被表示为“y1=pickb1,x3,?”。如所述,当树遍历器232继续遍历控制依赖图400时,将标识“?”。

例如,树遍历器232接下来始于基本输入框b4,并向上遍历至节点b1。一遇到控制依赖父b1,树遍历器232就通知pick生成器234,该pick生成器234通过将变量“x4”插入第一pick指令来作出响应,使得第一pick指令变成“y1=pickb1,x3,x4”。刚一从基本输入节点b5和b6遍历控制依赖树400,树遍历器232就标识控制依赖父b2,并且pick生成器234生成第二pick指令,该第二pick指令基于分支条件“b2”挑选分别对应于与节点b5和b6相关联的输入“x5”和“x6”的两个值中的任一个。第二个pick指令被表示为“y2=pickb2,x5,x6”。刚一进一步遍历控制依赖树400,树遍历器232就遇到节点b0,并且pick生成器234生成被表示为“x=pickb0,y1,y2”的第三pick指令。除生成pick指令之外,pick生成器234还将pick指令作为pick树插入到ssa代码中以代替phi指令。由于pick树可被直接降至数据流图上,因此所得代码现在可在未将ssa代码变换出ssa格式的情况下被直接降至数据流图上。

在一些示例中,控制依赖图不形成完全树。在一些此类示例中,示例控制依赖图生成器230在控制依赖树非完全时通知示例谓语生成器236。谓语生成器236通过为与非完全控制依赖树相对应的phi指令的每个输入节点生成谓语来对通知作出响应。如果不执行对应的输入节点,则为谓语指派值0,如果执行对应的输入节点,则为谓语指派值1。谓语生成器236还添加硬件指令,该硬件指令用于组合所有生成的谓语并基于谓语向phi指令的变量指派值。

当示例phi处理机206已完成操作(例如,已处理所有phi指令)时,如由示例变量处理机204和phi处理机206修改的指令被供给至示例数据流图生成器238。数据流图生成器238使用经修改指令来生成数据流图,并导致数据流图被存储在数据流图存储114中以供数据流引擎106执行。生成数据流图的过程在此也被称为将经修改指令映射至数据流图和/或将经修改指令降至数据流图上。

虽然图2示出了实现图1的映射管理器112的示例方式,图2所示的元件、进程和/或设备中的一个或多个可以被组合、拆分、重新设置、省略、消除和/或以任何方式被实现。此外,示例指令分析器202、示例变量处理机204、示例phi处理机206、示例变量标识器208、示例变量指令标识器210、示例循环标识器212、示例phi标识器214、示例最早出现标识器216、示例变量重命名器218、示例变量复制器220、示例循环处理机、示例指令生成器226、示例指令插入器228、控制依赖图生成器230、示例树遍历器232、示例pick生成器234、示例谓语生成器236、示例数据流图生成器238和/或更一般地,图1中的示例映射管理器112可通过硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现。因此,例如,示例指令分析器202、示例变量处理机204、示例phi处理机206、示例变量标识器208、示例变量指令标识器210、示例循环标识器212、示例phi标识器214、示例最早出现标识器216、示例变量重命名器218、示例变量复制器220、示例循环处理机、示例指令生成器226、示例指令插入器228、控制依赖图生成器230、示例树遍历器232、示例pick生成器234、示例谓语生成器236、示例数据流图生成器238中的任一者和/或更一般地,图1中的示例映射管理器112可通过一个或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑设备(pld)和/或现场可编程逻辑设备(fpld)来实现。当阅读涵盖纯软件和/或固件实现的本专利的装置或系统权利要求中的任一项时,示例指令分析器202、示例变量处理机204、示例phi处理机206、示例变量标识器208、示例变量指令标识器210、示例循环标识器212、示例phi标识器214、示例最早出现标识器216、示例变量重命名器218、示例变量复制器220、示例循环处理机、示例指令生成器226、示例指令插入器228、控制依赖图生成器230、示例树遍历器232、示例pick生成器234、示例谓语生成器236、示例数据流图生成器238和/或示例映射管理器112中的至少一者由此被明确地定义为包括包含软件和/或固件的非瞬态计算机可读存储设备或存储盘(诸如,存储器、数字多功能盘(dvd)、紧凑盘(cd)、蓝光盘等等)。此外,图1的示例映射管理器112可以包括除图2中所示的之外的一个或多个元件、进程和/或设备或作为图2中所示的替代的一个或多个元件、进程和/或设备,并且/或者可以包括所有示出的元件、进程和/或设备中的多于一个。

图5、6和7示出表示用于实现图1和/或2中的映射管理器112的示例机器可读指令的流程图。在本示例中,机器可读指令表示用于由处理器(诸如,结合图8在下文讨论的示例处理器平台800中示出的处理器812)执行的程序。程序可以被具体化在存储于诸如cd-rom、软盘、硬驱动器、数字多功能盘(dvd)、蓝光盘或与处理器812关联的存储器之类的非瞬态计算机可读存储介质上的软件里,但是全部和/或部分程序可以替代地由除处理器812之外的器件执行,和/或可以具体化在固件或专用硬件里。此外,虽然参考图5、6和7所例示的流程图描述了示例程序,但是可替代地使用实现示例映射管理器112的许多其他方法。例如,各个框的执行次序可以改变,和/或所描述的框中的一些框可以被改变、消除、或组合。附加地或替代地,可由被结构化为执行对应的操作而不执行软件或固件的一个或多个硬件电路(例如,分立和/或集成模拟和/或数字电路、现场可编程门阵列(fpga)、专用集成电路(asic)、比较器、运算放大器(op-amp)、逻辑电路等)来实现框中的任何框或所有框。

如上文所提及,可以使用存储于非瞬态计算机和/或机器可读介质上的经编码指令(例如,计算机和/或机器可读指令)实现图5、6和7的示例过程,该非瞬态计算机和/或机器可读介质例如:硬盘驱动器、闪存、只读存储器、紧凑盘、数字多功能盘、高速缓存、随机存取存储器和/或在其中信息被存储达任何持续时间(例如,在扩展时间段内、永久地、达简短的实例、用于临时缓冲和/或用于对信息的高速缓存)任何其他存储设备或存储盘。如本文中所使用,术语非瞬态计算机可读介质被明确地限定为包括任何类型的计算机可读存储设备和/或存储盘,并且排除传播信号并排除传输介质。“包含”和“包括”(及其所有形式和时态)在本文中用作开放式术语。因此,每当权利要求列出跟随任何形式的“包含”或“包括”(例如,包括、包含等)的任何内容时,要理解的是,额外的要素、项等可以存在而不超出对应权利要求的范围。如本文所使用的,当短语“至少”被用作与权利要求同步使用的转换术语时是和术语“包含”和“包括”一样的开放式的。

图5的程序500始于框502,其中示例指令分析器202(参见图2)的示例变量标识器208(参见图2)分析存储在示例ssa存储110中的ssa格式化的指令/代码(参见图2)以标识代码中被使用一次以上的变量。另外,示例变量指令标识器210(参见图2)标识包含经标识变量的指令(框504)。指令分析器202的示例循环标识器212(参见图2)标识对变量进行操作的循环(框508)。在一些示例中,循环标识器212还确定每个经标识循环的头部和每个经标识循环的锁(latch)。示例phi标识器214(参见图2)标识包括在ssa格式化的指令/代码中的phi指令(框510)。

在一些示例中,示例变量处理机204使用由指令分析器202收集和供给的信息(例如,经标识变量和包含变量的经标识指令)来修改ssa格式化代码,使得经标识变量中的每一个在由指令表示的程序中仅被使用单次(框512)。变量处理机204还使用由指令分析器收集和供给的信息(经标识循环)来修改经标识循环(框514)。在一些示例中,循环修改被配置成使得每次循环迭代时,生成对应于循环中所使用变量的值。另外,示例phi处理机206(参见图2)修改ssa格式化代码以移除和替换由示例phi标识器214标识和供给的任何phi指令。移除和替换phi指令的所得指令/代码现在可被直接降至数据流图上。所得指令被供给至示例数据图生成器238(参见图2),该示例数据图生成器238使用该指令来生成可由数据流引擎106(参见图1)执行的数据流图(例如,数据流图生成器238将指令降至数据流图上)。此后,程序500结束。

图6的程序600表示可被用于实现图5的框中的一个或多个的示例指令。程序600始于框602,其中示例变量处理机204(参见图2)的示例最早出现标识器216(参见图2)使用由变量标识器标识的(诸)变量和由变量指令标识器标识的指令来标识其中经标识变量出现在指令中的最早实例。在一些示例中,最早出现标识器216向示例变量重命名器218标识最早出现指令(参见图2)。变量重命名器218随后重命名出现在除最早出现指令之外的代码中的变量的所有实例(框604)。变量重命名器218针对所有经标识变量和经标识指令来重复此操作。作为重命名操作的结果,每个变量仅被使用单次。示例变量复制器220(参见图2)随后导致每个变量的值被复制到变量的每个重命名实例(框606)。在一些示例中,通过插入copy指令来复制该值。框602、604和606表示实现图5中的示例框512的示例方式。

依旧参看图6,示例循环处理机222(参见图2)为对变量进行操作的每个循环生成一对数据流指令(框608)。在一些示例中,循环处理机从示例循环标识器212接收标识对变量进行操作的循环的信息。在一些示例中,由循环处理机生成的指令包括pick指令和switch指令。pick指令在第一次循环迭代期间选取在循环体外为循环变量生成的值。对于剩余的循环迭代,pick指令选取在循环体中生成的值。switch指令将循环迭代期间为变量生成的值切换(发送)回循环头部,以供下一循环迭代使用。循环处理机222导致pick指令被插入循环的头部,并且循环处理机222导致switch指令被插入循环锁处(框610)。在一些示例中,变量处理机204随后停止操作。在一些示例中,当变量处理机204停止操作时,phi处理机206操作用于处理包括在代码中的phi指令。在一些此类示例中,在框608和框610(其表示实现图5中的示例框514的示例方式)之后,程序600在图5中的示例程序500的框示例框516处继续。

图7的程序700表示实现图5中的框516的示例方式。程序700始于框702,其中示例控制依赖图生成器230(参见图2)选择由示例phi标识器214(参见图2)标识的phi指令中的一个。控制依赖图生成器230使用phi指令和ssa格式化的指令/代码的相关联部分来基于phi指令生成控制依赖图。当控制依赖图中的控制依赖树形成完全树(在框706处确定)时,示例phi处理机206的示例树遍历器232(参见图2)遍历控制依赖树以标识在对应phi指令中使用的phi输入框的控制依赖父(框708)。另外,示例pick生成器234(参见图2)生成pick指令,该pick指令用于基于控制依赖父在两个phi输入框之间进行选取(框710)。pick生成器234为每个控制依赖父生成pick指令,由此产生pick指令树。pick生成器234导致pick指令树代替对应phi指令而被插入至ssa格式化代码中(也在框710处)。当存在更多phi指令要处理时(在框716处确定),程序700返回框702及其后续框。

当控制依赖图中的控制依赖树不形成完全树(在框706处确定)时,示例控制依赖图生成器704通知示例谓语生成器236(参见图2),该谓语生成器236通过生成谓语集来作出响应(方框712)。谓语中的每一个与对应phi指令的输入中的一个相对应。此外,当对应输入未被执行/非活跃时,每个谓语取值“0”,而当对应输入被执行时,取值“1”。另外,谓语生成器236生成并插入硬件指令,该硬件指令组合谓语并基于与输入中活跃(被执行)的一个相对应的谓语来选择将被用作phi指令的输入的值(框714)。如果还有待处理的附加phi指令,则控制返回到框702。否则,程序700继续进行到图5的程序500的框518。

图8是被构造用于执行图5、6和7中的指令以实现图1和/或图2中的映射管理器112的示例处理器平台800的框图。处理器平台800可以是例如服务器、个人计算机、或其他任何类型的计算设备。

所例示示例的处理器平台800包括处理器812。所例示示例中的处理器812是硬件。例如,处理器812可由来自任何所期望的家族或制造商的一个或多个集成电路、逻辑电路、微处理器或控制器实现。硬件处理器可以是基于半导体的(例如,硅基)器件。在此示例中,处理器812实现示例指令分析器202、示例变量处理机204、示例phi处理机206、示例变量标识器208、示例变量指令标识器210、示例循环标识器212、示例phi标识器214、示例最早出现标识器216、示例变量重命名器218、示例变量复制器220、示例循环处理机、示例指令生成器226、示例指令插入器228、控制依赖图生成器230、示例树遍历器232、示例pick生成器234、示例谓语生成器236、示例数据流图生成器238和/或更一般地,示例映射管理器112。

所例示示例的处理器812包括本地存储器813(例如,高速缓存)。所例示示例中的处理器812经由总线814与包括易失性存储器816和非易失性存储器818的主存储器通信。易失性存储器814可由同步动态随机存取存储器(sdram)、动态随机存取存储器(dram)、rambus动态随机存取存储器(rdram)和/或任何其他类型的随机存取存储器设备实现。非易失性储存器816可由闪存和/或其他任何所期望类型的存储器设备实现。存储器控制器控制对主存储器814、816的访问。

所例示示例中的处理器平台800还包括接口电路820。接口电路820可以由任何类型的接口标准实现,诸如,以太网接口、通用串行总线(usb)和/或pci快速接口。

在所示示例中,一个或多个输入设备822被连接至接口电路820。(诸)输入设备822准许用户将数据和/或命令输入至处理器812中。(诸)输入设备可以由诸如键盘、按钮、鼠标、触屏、轨迹板、轨迹球、等点鼠标(isopoint)和/或语音识别系统实现。

一个或多个输出设备824也被连接至所例示示例中的接口电路820。输出设备824可例如由显示设备(例如,发光二极管(led)、有机发光二极管(oled)、液晶显示器、阴极射线管显示器(crt)、触屏和/或打印机)实现。因此,所例示示例中的接口电路820典型地包括图形驱动器卡、图形驱动器芯片和/或图形驱动器处理器。

所例示示例中的接口电路820还包括诸如发射机、接收机、收发机、调制解调器和/或网络接口卡之类的通信设备,以促进经由网络826(例如,以太网连接、数字订户线路(dsl)、电话线、同轴电缆、蜂窝电话系统等)与外部机器(例如,任何种类的计算设备)交换数据。

所示示例的处理器平台800还包括一个或多个用于存储软件和/或数据的大容量存储设备828。此类大容量存储设备828的示例包括软盘驱动器、硬盘驱动器、紧凑盘驱动器、蓝光盘驱动器、raid系统和数字多功能盘(dvd)驱动器。

图5、6和7中的经编码指令832可被存储在大容量存储设备828中,存储在易失性存储器814中,存储在非易失性存储器816中和/或存储在诸如cd或dvd之类的可移除有形计算机可读存储介质上。

从前述内容将理解,已公开了示例方法、装置和制品,这些示例方法、装置和制品允许修改以ssa格式化指令集表示的计算机程序,并且随后在不将指令变换出ssa格式的情况下将该计算机程序直接降至数据流图上。用于将指令变换出ssa格式的已知方法通常充满错误,并且有时,已知变换方法不起作用。因此,消除指令从ssa格式的变换导致更高的准确度和更少的错误。另外,因为使用作为数据流架构的基本元素的硬件指令(例如,pick和switch指令)来修改ssa格式化指令,所以不存在与在数据流引擎上执行所得数据流图相关联的附加成本。

本文公开了以下进一步的示例。

示例1是一种用于将指令集映射至数据流图上以供数据流引擎执行的装置。示例1的装置是变量处理机,该变量处理机用于修改指令集中的变量。变量在指令集中被使用多次,指令集处于静态单一指派形式。示例1的装置还包括phi处理机,该phi处理机用于使用数据流控制指令集来替换包含在指令集中的phi指令;以及数据流图生成器,该数据流图生成器用于在未将指令变换出静态单一指派形式的情况下将经变量处理机和phi处理机修改的指令集映射至数据流图上。

示例2包括示例1的装置并且进一步包括指令分析器,该指令分析器用于通过以下操作来分析指令集:向变量处理机标识在指令集中被使用多次的变量;以及向变量处理机标识指令集的子集。在示例2中,子集表示其中使用变量的多个实例。

示例3包括权利要求2的装置。在示例3中,变量处理机通过标识变量的最早出现实例以及变量的一个或多个稍后出现实例来修改变量。此外,变量处理机通过使用唯一的新变量来替换变量的一个或多个稍后出现实例来修改变量。变量处理机通过将变量的、源于最早出现实例的值复制到新变量来修改变量。

示例4包括示例2的装置。在示例4中,指令分析器通过向变量处理机标识变量在循环外被定义并被用在循环中来分析指令集。

示例5包括示例4的装置。示例5中,变量处理机通过将数据流控制指令插入指令集中来修改变量。数据流控制指令包括第一数据流控制指令,该数据流控制指令用于在以下之间进行选取:1)变量的第一值以及变量的、在循环外生成的第二值,与2)变量的、在循环内生成的第二值。数据流控制指令还包括第二数据流控制指令,该第二数据流控制指令用于基于循环出口条件来导致变量的第三值将被用在循环的下一迭代中。

示例6包括示例1-5中任一项的装置。示例6的装置进一步包括指令分析器,该指令分析器分析指令集,以向phi处理机标识包括在指令集中的phi指令。

示例7包括示例6的装置。在示例7中,phi处理机通过以下操作来使用数据流控制指令替换phi指令:确定phi输入框集合的控制依赖图是否形成完全树。在phi输入框集合的控制依赖图形成完全树时,示例7的装置将phi指令映射至数据流控制指令树。数据流控制指令基于与phi输入框相关联的相应分支条件选择相应值来指派给相应变量。在phi输入框集合的控制依赖图不形成完全树时,示例7的装置确定相应phi输入框的谓语并插入硬件指令。硬件指令选择要指派给变量的第三值。第三值与phi输入框中具有满足谓语的一个phi输入框相对应。

示例8包括示例7的装置。在示例8的装置中,phi处理机通过以下操作来将phi指令映射至数据流控制指令树:从phi输入框中的每个phi输入框向上遍历控制依赖图的控制依赖树直到到达根节点;以及针对在遍历期间遇到的每个控制依赖父框生成数据流控制指令中的一个数据流控制指令。

示例9包括示例8的装置。在示例9的装置中,和与第一phi输入相关联的第一分支条件相对应的第一数据流控制语句在和phi指令的第一输入变量相对应的第一值与和phi指令的第二输入变量相对应的第二值之间进行选择。此外,第一分支条件与第一phi输入框和第二phi输入框的控制依赖父相对应。

示例10包括一个或多个非瞬态机器可读存储介质,包括指令,该指令在被执行时,使一个或多个处理器至少修改指令集中的变量。变量在指令集中被使用多次。另外,指令集处于静态单一指派形式。指令进一步使一个或多个处理器使用数据流控制指令集来替换包含在指令集中的phi指令;以及在变量已被修改且phi指令已被替换之后基于指令集生成数据流图。在示例10中,数据流图可由数据流引擎执行。

示例11包括示例10的一个或多个非瞬态机器可读存储介质。在示例11中,指令进一步使一个或多个处理器标识在指令集中被使用多次的变量;以及标识指令集的子集。子集表示其中使用变量的多个实例。

示例12包括示例11的一个或多个非瞬态机器可读存储介质。在示例11中,指令进一步使一个或多个处理器标识变量的最早出现实例、标识变量的稍后出现实例、使用相应的新变量来替换变量的相应的稍后出现实例。此外,指令进一步使一个或多个处理器将变量的、源于最早出现实例的值复制到稍后出现实例的新变量。

示例13包括示例12的一个或多个非瞬态机器可读存储介质。在示例13中,指令进一步使一个或多个处理器确定在循环外定义的变量在循环中被使用。

示例14包括示例13的一个或多个非瞬态机器可读存储介质。在示例14中,指令进一步使一个或多个处理器将数据流控制指令插入指令集中。数据流控制指令导致在循环的相应迭代中为变量生成相应值。

示例15包括示例13的一个或多个非瞬态机器可读存储介质。在示例14中,指令进一步使一个或多个处理器将第一数据流控制指令插入指令集中,第一数据流控制指令在将被用于变量的第一值与将被用于变量的第二值之间进行选取。第一值在循环外生成而第二值在循环内生成。指令进一步使一个或多个处理器插入第二数据流控制指令。第二数据流控制指令基于循环出口条件来导致第三值将被用于循环的下一迭代中的变量。

示例16包括示例10-15中任一项的一个或多个非瞬态机器可读存储介质。在示例16中,指令进一步使一个或多个处理器通过以下操作来替换phi指令:确定phi输入框集合的控制依赖图是否形成完全树;以及在phi输入框集合的控制依赖图形成完全树时,将phi指令映射至数据流控制指令树。在示例16中,数据流控制指令基于与phi输入框相关联的相应分支条件选择相应值来指派给相应变量。指令进一步使一个或多个处理器通过以下操作来替换phi指令:在phi输入框集合的控制依赖图不形成完全树时,确定相应phi输入框的谓语并插入硬件指令。硬件指令选择第三值来指派给变量。第三值与phi输入框中具有满足谓语的一个phi输入框相对应。

示例17包括示例16的一个或多个非瞬态机器可读存储介质。在示例16中,指令使一个或多个处理器通过以下操作来将phi指令映射至数据流控制指令树:从phi输入框中的每个phi输入框向上遍历控制依赖图的控制依赖树直到到达根节点;以及针对在遍历期间遇到的每个控制依赖父框,生成数据流控制指令中的一个数据流控制指令。

示例18包括示例16的一个或多个非瞬态机器可读存储介质。在示例18中,数据流控制指令树中和与第一phi输入相关联的第一分支条件相对应的第一数据流控制语句在和phi指令的第一输入变量相对应的第一值与和phi指令的第二输入变量相对应的第二值之间进行选择。第一分支条件与第一phi输入框和第二phi输入框的控制依赖父相对应。

示例19是一种用于生成用来在数据流引擎上执行的数据流图的方法。示例19的方法包括通过使用至少一个处理器执行指令来修改指令集中的变量。变量在指令集中被使用多次。指令集处于静态单一指派形式。方法还包括通过使用至少一个处理器执行指令来用数据流控制指令集替换包含在指令集中的phi指令;以及在变量已被修改且phi指令已被替换之后,通过使用至少一个处理器执行指令来基于指令集生成数据流图。

示例20包括示例19的方法并且进一步包括标识指令集中的变量,以及标识指令集的子集。子集表示其中使用变量的多个实例。

示例21包括示例20的方法。在示例21中,修改变量包括标识变量的最早出现实例以及变量的一个或多个稍后出现实例;使用唯一的新变量来替换变量的一个或多个稍后出现实例;以及将变量的源于最早出现实例的值复制到新变量。

示例22包括示例21的方法。示例22进一步包括确定变量在循环外被定义并被用在循环中;以及将数据流控制指令插入指令集中。数据流控制指令导致将为循环的相应迭代的变量生成相应值。

示例23包括示例22的方法。示例23的方法进一步包括将第一数据流控制指令插入指令集中。第一数据流控制指令在将被用于变量的第一值与将被用于变量的第二值之间进行选取。第一值在循环外生成而第二值在循环内生成。示例23的方法还包括插入第二数据流控制指令,该第二数据流控制指令基于循环出口条件来导致第三值将被用于循环的下一迭代中的变量。

示例24包括示例19至23中任一项的方法。在示例24的方法中,替换phi指令包括确定phi输入框集合的控制依赖图是否形成完全树;以及在phi输入框集合的控制依赖图形成完全树时,将phi指令映射至数据流控制指令树。数据流控制指令基于与phi输入框相关联的相应分支条件选择相应值来指派给相应变量。在示例24的方法中,替换phi指令进一步包括:在phi输入框集合的控制依赖图不形成完全树时,确定相应phi输入框的谓语并插入硬件指令,硬件指令用于选择第三值来指派给变量。第三值与phi输入框中具有满足谓语的一个phi输入框相对应。

示例25包括示例24的方法。在示例25的方法中,将phi指令映射至数据流控制指令树包括:从phi输入框中的每个phi输入框向上遍历控制依赖图的控制依赖树直到到达根节点;以及针对在遍历期间遇到的每个控制依赖父框,生成包括在数据流控制指令树中的数据流控制指令中的一个数据流控制指令。

示例26包括示例25的方法。在示例26的方法中,数据流控制指令树中和与第一phi输入相关联的第一分支条件相对应的第一数据流控制指令在和phi指令的第一输入变量相对应的第一值与和phi指令的第二输入变量相对应的第二值之间进行选择。在示例26中,第一分支条件与第一phi输入框和第二phi输入框的控制依赖父相对应。

示例27是设备,设备包括用于执行根据权利要求19-26中的任一项所要求保护的方法的装置。

示例28是包括机器可读指令的机器可读存储。指令在被执行时,实现如前述示例中的任一项描述的方法和装置。

示例29是一种将指令集映射至数据流图上以供数据流引擎执行的设备。示例29的设备包括用于修改指令集中的变量的装置。变量在指令集中被使用多次,指令集处于静态单一指派形式。示例29的设备还用于使用数据流控制指令集来替换包含在指令集中的phi指令的装置;以及用于在未将指令变换出静态单一指派形式的情况下将由变量处理机和phi处理机修改的指令集映射至数据流图上的装置。

示例30包括示例29的设备并且进一步包括用于通过以下操作来分析指令集的装置:标识在指令集中被使用多次的变量;以及标识指令集的子集。子集表示其中使用变量的多个实例。

示例31包括示例30的设备。在示例31中,用于修改变量的装置标识变量的最早出现实例以及变量的一个或多个稍后出现实例;以及使用唯一的新变量来替换变量的一个或多个稍后出现实例。另外,用于修改变量的装置将变量的源于最早出现实例的值复制到新变量。

示例32包括示例30的设备。在示例32中,用于分析指令集的装置通过标识变量在循环外被定义并被用在循环中来分析指令集。

示例33包括示例32的设备。在示例33中,用于修改变量的装置将数据流控制指令插入指令集中,且数据流控制指令包括第一数据流控制指令,该第一数据流控制指令在以下之间进行选取:1)变量的第一值以及变量的、在循环外生成的第二值,与2)变量的、在循环内生成的第二值。另外,数据流控制指令包括第二数据流控制指令,该第二数据流控制指令用于基于循环出口条件来导致变量的第三值将被用在循环的下一迭代中。

示例34包络示例29-33中任一项的设备并且还包括用于分析指令集来标识包括在指令集中的phi指令的装置。

示例35包括示例34的设备。在示例35中,phi处理机通过以下操作来使用数据流控制指令替换phi指令:确定phi输入框集合的控制依赖图是否形成完全树;以及在phi输入框集合的控制依赖图形成完全树时,将phi指令映射至数据流控制指令树。数据流控制指令基于与phi输入框相关联的相应分支条件选择相应值来指派给相应变量。phi处理机还通过以下操作来使用数据流控制指令替换phi指令:在phi输入框集合的控制依赖图不形成完全树时,确定相应phi输入框的谓语并插入硬件指令。硬件指令选择第三值来指派给变量。第三值与phi输入框中具有满足谓语的一个phi输入框相对应。

示例36包括示例35的设备。在示例36中,phi处理机通过以下操作来将phi指令映射至数据流控制指令树:从phi输入框中的每个phi输入框向上遍历控制依赖图的控制依赖树直到到达根节点;以及针对在遍历期间遇到的每个控制依赖父框,生成数据流控制指令中的一个数据流控制指令。

示例37包括示例36的设备。在示例37中,和与第一phi输入相关联的第一分支条件相对应的第一数据流控制语句在和phi指令的第一输入变量相对应的第一值与和phi指令的第二输入变量相对应的第二值之间进行选择。另外,第一分支条件与第一phi输入框和第二phi输入框的控制依赖父相对应。

示例38是一种机器可读介质,包括代码,代码在被执行时使机器执行示例19-26中的任一项的方法。

尽管本文中已公开了某些示例方法、装置和制品,但本专利涵盖的范围并不限于此。相反,本专利涵盖落入本专利权利要求范围内的全部方法、装置和制品。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1