CN109947427A - 用于将非串并行控制流图转换为数据流的方法和设备 - Google Patents
用于将非串并行控制流图转换为数据流的方法和设备 Download PDFInfo
- Publication number
- CN109947427A CN109947427A CN201811344350.4A CN201811344350A CN109947427A CN 109947427 A CN109947427 A CN 109947427A CN 201811344350 A CN201811344350 A CN 201811344350A CN 109947427 A CN109947427 A CN 109947427A
- Authority
- CN
- China
- Prior art keywords
- node
- instruction
- serial parallel
- operand
- equipment
- 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.)
- Pending
Links
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
- 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/44—Encoding
- G06F8/443—Optimisation
-
- 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/453—Data distribution
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本申请提供了用于将非串并行控制流图转换为数据流的方法和设备。用于将非串并行控制流图转换为数据流的方法和设备示例设备包括:节点分析器,该节点分析器用于检测序列化代码中的非串并行节点;以及指令生成器,该指令生成器用于:生成包括消耗操作数的、针对与检测到的非串并行节点相关联的在先节点的指令;生成用于组合针对在先节点生成的指令的结果的组合指令;并且输出组合指令和针对在先节点生成的指令,以便生成数据流代码。
Description
技术领域
本公开总体上涉及计算系统中的编译器,并且更具体地,涉及通过将非串并行控制流图转换为数据流来提高计算系统中的编译器效率的方法和设备。
背景技术
许多计算系统根据控制流架构来操作。在控制流架构中,程序的指令的执行由程序计数器驱动,该程序计数器逐步遍历程序的指令。换句话说,程序的指令的执行顺序由程序本身的结构限定。在一些情况下,当试图实现并行处理时,控制流架构可能不恰当地操作。例如,即使指令的输入(例如,操作数)尚未由并行操作指令更新,程序也可以声明要执行该指令。
一些计算系统利用数据流架构。数据流架构不是由程序限定的指令执行顺序驱动的。替代地,数据流架构根据指令的输入(例如,操作数)的可用性来执行指令。例如,如果指令具有三个操作数,则一旦通过该指令所依赖的其他(多条)指令将这三个操作数提供给该指令,则利用数据流架构的计算系统将执行该指令。因此,数据流架构可以在高度并行的环境中执行,而不用担心指令将在该指令的数据依赖性被更新/满足之前执行。例如,数据流架构可以用在大规模计算系统中,该大规模计算系统使用大量处理元件使处理高度并行化。
附图说明
图1是用于将控制流代码转换为数据流代码的示例系统的框图。
图2是图1的非串并行转换器的示例实现的框图。
图3图示了串并行的示例控制流图。
图4图示了包括非串并行的节点的示例控制流图。
图5是表示用于实现图3和/或图4的非串并行转换器的示例机器可读指令的流程图。
图6是可以执行图5的指令来实现图3和/或图4的非串并行转换器的示例处理设备的框图。
附图不按比例绘制。如在本专利中所使用,记载任何部件(例如,层、膜、区域或板)以任何方式定位在(例如,定位在、位于、设置在或形成在等)另一部件上指示被引用部件与该另一部件接触,或者被引用部件在该另一部件上方并且一个或多个中间部件位于该被引用部件与该另一部件之间。记载任何部件与另一部件接触意味着这两个部件之间没有中间部件。
具体实施方式
串并行图广泛用于应用工程和算法研究理论。如果图是串并行图,则能在线性时间内解决一般是NP完全问题(NP-Complete)的一些图问题。已经开发了高度高效的算法来生成用于作为串并行图的控制流图的高度并行的数据流代码。
如果有向图G可以通过以下操作的顺序产生,则该有向图G是两端串并行的,且具有端点s和t:
1.创建新图,该新图由从s指向t的单个边组成。
2.给定两个两端串并行图X和Y,具有端点sX、tX、sY和tY,通过标识s=sX=sY和t=tX=tY来形成新图G=P(X,Y)。这被称为X和Y的并行组合。
3.给定两个两端串并行图X和Y,具有端点sX、tX、sY和tY,通过标识s=sX、tX=sY和t=tY来形成新图G=S(X,Y)。这被称为X和Y的串行组合。
如果对于无向图的边缘的一些取向,该无向图形成具有端点s和t的有向的两端串并行图,则该无向图是具有端点s和t的两端串并行。如果对于某两个顶点s和t,有向或无向是具有这两个那些端点的两端串并行,则该有向图或无向图是串并行的。
虽然数据流架构可以有利地用在计算系统中,但并非所有程序都被设计成和/或能够直接以数据流代码编写。例如,现有程序可能针对控制流架构来实现。本文公开的方法和设备促进将控制流程序转换为数据流程序。具体地,本文公开的方法和设备标识程序中的非串并行控制流(例如,图4的示例非串并行流)并将该非串并行控制流转换为数据流代码。因此,在一些公开的示例中,具有复杂控制流的传统程序可以在高度并行的数据流架构中运行。
图1是示例系统100的框图,该示例系统包括由示例编译器103编译以便生成示例数据流汇编代码112的示例输入代码102。例如,系统100可以在编译器内实现,以将控制流代码转换为数据流代码。
所图示示例的输入代码102是序列化指令软件程序,该序列化指令软件程序被转换并编译成汇编代码(例如,用于在计算平台上执行)。示例输入代码102以C编程语言编写。或者,输入代码可以用任何其他语言编写,诸如C++、Fortran、Java等。
示例编译器103包括示例中间表示(IR)变换器304、示例序列化指令变换器106、示例控制流至数据流转换器108、以及示例非串并行转换器110。所图示示例的编译器103是LLVM编译器,该LLVM编译器已被修改为包括非串并行转换器110。或者,可以使用任何其他类型的预先存在的或新创建的编译器。
所图示示例的IR变换器104将示例输入代码102变换为中间表示代码。示例IR变换器104将输入代码102变换为LLVM中间表示。或者,IR变换器104可以将输入代码102变换为由系统100中使用的编译器所识别的任何类型的中间表示(例如,标准可移植中间表示、Java字节码、公共中间表示等)。
示例序列化指令变换器106将来自IR变换器104的中间表示变换为目标机器的序列化控制流机器指令。根据所图示的实例,序列化指令变换器104一次一部分地变换中间表示代码,以便促进验证和转换到数据流指令。
示例控制流至数据流转换器108将控制流序列化指令转换为数据流汇编代码112。示例控制流至数据流转换器108使用众所周知的技术将串并行控制流代码转换成数据流代码。
示例控制流至数据流转换器108利用两条基本数据流指令SWITCH(切换)和PICK(挑选)。
PICK指令基于断言(predicate)从两个寄存器中挑选值。PICK具有以下格式:%r=PICK%r0,%r1,%r2,其中%r是LLVM中的虚拟寄存器的符号。这样的指令可以用C编程语言编写为%r=(%r0)?(%r2):(%r1);
SWITCH指令基于断言将操作数发送到两个所标识的寄存器中的一个寄存器。SWITCH具有以下格式:%r1,%r2=SWITCH%r0,%r3,其中该格式基于%r0中的断言将%r3中的值发送到%r1或%r2。在C语言中,该格式类似于:if(%r0)%r2=%r3else%r1=%r3。
例如,图3图示了串并行的示例控制流图300。在所图示示例中,第一节点302基于C1的值将值X赋给X11或X12。(例如,如果C1为假,则X11=X,并且如果C1为真,则X12=X。)类似地,当C2为假时,第二节点304将值X11赋给X21,并且当C2为真时,第二节点304将值X11赋给X22。当C3为假时,第三节点306将值X12赋给X31,并且当C3为真时,第三节点306将值X12赋给X32。最后,第四节点308是对X21、X22、X31和X32操作的Phi操作。Phi函数是静态单一赋值形式的伪函数。Phi函数将会将控制到达第四节点308的值(例如,X21、X22、X31或X32中的一个)赋给X4。
根据示例控制流图300,第二节点304与第一节点302是串行的,并且与第三节点306是并行的。因此,因为控制流图300是串并行的,所以可以使用众所周知的技术容易地将控制流图300转换为数据流。
例如,在将由图3表示的控制流代码转换为数据流代码时,示例控制流至数据流转换器将生成以下PICK树:X2=PICK C2,X21,X22;X3=PICK C3,X31,X32;以及X4=PICK C1,X2,X3。
实际上,许多控制流图是串并行的,或者可以使用众所周知的技术容易地简化为串并行。然而,一些控制流图不容易转换。例如,goto(“去往”)、间接跳转、或诸如内联函数调用和展开循环之类的优化可能创建无法简化为串并行图的非常复杂的控制流图。例如,图4图示了使用goto命令生成的示例控制流图400,该示例控制流图400包括第一节点402、第二节点404、第三节点406、第四节点408、第五节点410和第六节点412。图4的控制流图400是非串并行的,因为示例第一节点402和示例第二节点404并不使用串行或并行组合被添加到该图中。
示例控制流至数据流转换器108还包括示例非串并行转换器110,用于检测来自序列化指令变换器106的控制流序列化代码内的非串并行代码,并将该非串并行代码转换为数据流代码。例如,当应用于图4所图示的指令时,非串并行转换器110检测到指令包括非串并行代码,该非串并行代码根据现有方法无法转换为并行优化数据流代码。例如,在计算来自示例第四节点408的X的输出值(out-going value)时,仅对断言值C2的评估是不够的。还需要评估C3。另外,评估的顺序很重要,因为如果采用到C2的分支,则C3在数据流机器中将没有值。需要对C2和C3的复杂的逻辑组合或实施对这两个分支的评估以计算第四节点408中的X4,并且对于第五节点410中的X5也是如此,两者都浪费功率。
为了促进将非串并行代码转换为可以在例如高度并行的环境中使用的数据流代码,示例非串并行转换器110利用消耗操作数,该消耗操作数的任何值由系统消耗。示例消耗操作数是%ign,该%ign可以被称为忽略操作数。不存储被赋给消耗操作数的值。根据所图示的示例,非串并行转换器110包括PICK指令中的消耗操作数,以考虑节点树的、可能与确定特定值无关的分支。
例如,非串并行转换器110可以生成以下PICK树,以用于确定示例第四节点408中的X4的值:X2=PICK C2,X21%ign;X3=PICK C3,X31,%ign;以及X4=PICK C1,X2,X3。
图2是图1的非串并行转换器100的示例实现的框图。图2的示例非串并行转换器110包括示例非串并行检测器202、示例节点分析器204和示例指令生成器206。
示例非串并行检测器202分析由示例控制流至数据流转换器108处理的控制流序列化代码,以便标识非串并行的代码。示例非串行检测器202使用概念控制依赖图(CDG)来检测非串并行图。在传统的控制流图中,如果节点B在从该控制流图的节点A到出口(汇)节点的一条路径上,并且存在从节点A到出口而不经过节点B的其他路径,那么节点B为控制依赖于节点A。在对应的控制依赖图中,存在从A到B的边。节点A被称为节点B的父节点。示例非串并行检测器202为输入程序的控制流图构建控制依赖图。当CDG具有每个节点具有一个且仅有一个控制依赖父节点的属性时,图是串并行的。当至少一个节点并非具有一个且仅有一个控制依赖父节点(例如,多于一个父节点、零个父节点等)时,示例非串并行检测器202标识非串并行图。
例如,非串并行检测器202可以应用一组规则来标识非串并行代码。在一些示例中,非串并行检测器202可以确定代码不是串并行的(例如,不满足串并行代码的规则)。在其他示例中,非串并行检测器202可以确定代码是非串并行的(例如,满足非串并行代码的规则)。例如,当代码包括既不与其他节点串行也不与其他节点并行的节点时,非串并行检测器202可以确定该代码是非串并行的。例如,不满足以下规则的代码可以被分类为非串并行:
给定两个两端串并行图X和Y,具有端点sX、tX、sY和tY,通过标识s=sX=sY和t=tX=tY来形成新图G=P(X,Y)。这被称为X和Y的并行组合。
给定两个两端串并行图X和Y,具有端点sX、tX、sY和tY,通过标识s=sX、tX=sY和t=tY来形成新图G=S(X,Y)。这被称为X和Y的串行组合。
当示例非串并行检测器202标识非串并行的代码时,该非串并行检测器202触发由示例节点分析器204进行的分析。
所图示示例的示例节点分析器204分析该代码以标识(多个)非串并行节点。例如,节点分析器204可以标识不是串行和/或并行的节点。示例节点分析器204触发示例指令生成器206以便确定用于非串并行节点的PICK指令。
示例指令生成器206生成用于将非串并行控制流序列化代码转换为数据流代码的PICK指令。示例指令生成器206通过分析非串并行节点和在先节点以生成包括消耗操作数(例如,诸如%ign之类的忽略操作数)的PICK指令来生成数据流代码。虽然所图示示例使用PICK指令,但是可以利用基于断言、从操作数选择值的编译器的任何指令。
当分析节点和该节点的在先节点时,示例指令生成器206为每个在先节点生成PICK指令,并将第一操作数设置为可以传播到非串并行节点的值,并将第二操作数设置为消耗操作数(例如,因为来自在先节点的第二可能路径不传播到非串并行节点)。例如,当为图4的第四节点408生成PICK指令时,对于图4的第二节点404,指令生成器206生成PICK指令X2=PICK C2,X21,%ign。在该实例中,来自第二节点404的第二输出不传播到第四节点408,并且因此被设置为消耗操作数,以便确保PICK指令被执行并且当C2为真时不将值传播到X4,从而与输入代码中所编程的所需操作保持一致。因此,指令生成器206可以为第四节点408生成以下PICK树:X2=PICK C2,X21%ign;X3=PICK C3,X31,%ign;以及X4=PICKC1,X2,X3。
在一些示例中,在将在其上执行代码的处理架构不传播消耗操作数的情况下,指令生成器206可以利用诸如零(zero)的白值,并且如果代码分支的执行远离节点,则可以包括SWITCH指令以消耗该零。例如,对于第四节点408,指令生成器可以生成以下数据流代码:
X2=PICK C2,X21,0
X3=PICK C3,X31,0
X’4=PICK C1,X2,X3
E2=!C1&&C2//采取分支C2->B5
E3=C1&&C3//采取分支C2->B5
E=E1||E2
X4,%ign=SWITCH E,X’4
在该示例中,&&是短路的逻辑与并且||是短路的逻辑或。由于如果第一操作数不决定运算符的输出,则只评估第二操作数,因此那些运算符的短路特性节省功耗。此外,白值(例如,零)当在PICK树中传播时从不改变,这在执行期间也消耗更少的功率。
尽管图1中图示出实现非串并行转换器110的示例方式,但是图1中图示出的元件、过程和/或设备中的一个或多个能以任何其他方式被组合、拆分、重新布置、省略、消除和/或实现。此外,示例非串并行检测器202、示例节点分析器204、示例指令生成器206、和/或更一般地、示例非串并行转换器110可以由硬件、软件、固件和/或硬件、软件和/或固件的任意组合实现。因此,例如,示例非串并行检测器202、示例节点分析器204、示例指令生成器206、和/或更一般地、示例非串并行转换器110中的任意一个可以由一个或多个模拟或数字电路、逻辑电路、(多个)可编程处理器、(多个)专用集成电路(ASIC)、(多个)可编程逻辑器件(PLD)和/或(多个)现场可编程逻辑器件(FPLD)实现。当阅读本专利的装置权利要求或系统权利要求中的任何一个来涵盖纯软件和/或固件实现时,示例非串并行检测器202、示例节点分析器204、示例指令生成器206、和/或更一般地、示例非串并行转换器110中的至少一个在此明确限定为包括非瞬态计算机可读存储设备或存储盘,诸如存储器、数字多功能盘(DVD)、紧凑盘(CD)、蓝光盘等,该非瞬态计算机可读存储设备或存储盘包括该软件和/或固件。此外,除了图2中所图示的那些之外,或者作为图2中所图示的那些的替代,示例非串并行转换器110可以包括一个或多个元件、过程和/或设备,和/或可以包括图示出的元件、过程和设备中任何或所有元件、过程和设备中的多于一个。
图5中示出表示用于实现非串并行转换器110的示例机器可读指令的流程图。在示例中,机器可读指令包括用于由诸如图6的应用处理器601和/或在下文结合图6所讨论的示例处理器平台600中示出的处理器612之类的处理器执行的程序。虽然程序能以存储于诸如CD-ROM、软盘、硬驱动器、数字多功能盘(DVD)、蓝光盘或与处理器612相关联的存储器之类的非瞬态计算机可读存储介质上的软件来具体化,但是全部程序和/或其部分可替代地由除处理器612之外的设备执行,和/或以固件或专用硬件来具体化。此外,虽然参考图5所图示的流程图描述示例程序,但是可替代地使用实现示例非串并行转换器110的许多其他方法。例如,可改变框的执行次序,和/或可改变、消除或组合所描述的框中的一些框。附加地或替代地,可由被结构化为执行对应的操作而不执行软件或固件的一个或多个硬件电路(例如,分立和/或集成模拟和/或数字电路、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、比较器、运算放大器(op-amp)、逻辑电路等)来实现框中的任何框或所有框。
如上文所提及,可使用存储于非瞬态计算机和/或机器可读介质上的经编码指令(例如,计算机和/或机器可读指令)实现图5的示例过程,非瞬态计算机和/或机器可读介质诸如:硬盘驱动器、闪存、只读存储器、紧凑盘、数字多功能盘、高速缓存、随机存取存储器和/或在任何时长内(例如在扩展时间段内、永久地、在简短的实例期间、在临时进行缓冲期间和/或对信息进行高速缓存期间)将信息存储于其内的任何其他存储设备或存储盘。如本文所使用,术语“非瞬态计算机可读存储介质”被明确地定义为包括任何类型的计算机可读存储设备和/或存储盘,并且排除传播的信号并排除传输介质。“包含”和“包括”(及其所有形式和时态)在本文中用作开放式术语。因此,每当权利要求列出跟随任何形式的“包含”或“包括”(例如,包括、包含等)的任何内容时,要理解的是,额外的要素、项等可以存在而不超出对应权利要求的范围。如本文所使用,当短语“至少”被用作权利要求的前序部分中的过渡术语时,其与术语“包含”和“包括”方式相同是开放式的。
当非串并行检测器202检测到正由示例控制流至数据流转换器108处理的非串并行流图时,图5的程序开始(框502)。例如,非串并行检测器202可以将一个或多个规则应用于控制流序列化代码以测试非串并行节点。响应于检测到非串并行流图,示例节点分析器204检测非串并行节点(框504)。例如,当处理图4所图示的代码时,示例节点分析器204可以检测到示例第四节点408是非串并行节点。
响应于检测到非串并行节点,示例节点分析器204选择序列化代码中该非串并行节点之前的节点(框506)。例如,当将图4的第四节点408处理为非串并行节点时,节点分析器204将示例第二节点404选为在先节点。示例指令生成器206生成具有针对所选择的在先节点的忽略操作数的PICK指令(框508)。例如,当将图4的第二节点404处理为第四节点408的在先节点时,指令生成器206生成X2=PICK C2,X21,%ign。虽然示例指令生成器206生成PICK指令,但是可以利用针对采用消耗操作数的特定编译器环境的任何类似指令。例如,可以利用确保用消耗操作数(例如,忽略操作数、白值等)评估断言的任何指令。
示例节点分析器204确定是否存在另一个在先节点(框510)。当存在另一个在先节点时,控制返回到框506以生成针对该在先节点的PICK指令。例如,在处理了第二节点404之后,可以处理第三节点406。
当不存在另一个在先节点时(框510),示例指令生成器206生成指令以便组合来自在先节点的PICK指令的结果。根据所图示的示例,指令生成器206生成PICK指令以便组合到在先节点的结果。例如,当生成针对第四节点408的指令时,在生成针对第二节点404和第三节点406的PICK指令之后,示例指令生成器206生成:X4=PICK C1,X2,X3。
示例节点分析器204确定在被正分析的代码中是否存在另一个非串并行节点(框514)。当存在另一个非串并行节点时,控制返回到框502以处理下一个节点,以便生成数据流汇编代码112。当不存在另一个非串并行节点时,示例指令生成器206输出所生成的数据流代码(框516),并且图5的程序结束。
虽然前述示例生成用于在其中传播消耗操作数的环境的指令,但是在一些环境中,不传播这样的消耗操作数。在不支持消耗操作数的传播的环境中,消耗操作数可以用诸如零的白值替换(例如,X2=PICK C2,X21,0以及X3=PICK C3,X31,0)。另外,用于组合元素的指令(框512)可以包括用于选择适当值的若干指令。例如,组合指令可以将值存储在临时寄存器中(X’4=PICK C1,X2,X3),并且可以使用开关来选择最终值,以确保白值被消耗(E2=!C1&&C2;E3=C1&&C3;E=E1||E2;并且X4,%ign=SWITCH E,X’4)。
图6是能够执行图5的指令以实现图1的非串并行转换器110的示例处理器平台600的框图。处理器平台600可以是例如服务器、个人计算机、移动设备(例如,蜂窝电话、智能电话、诸如iPadTM之类的平板设备)、个人数字助理(PDA)、互联网设备或任何其他类型的计算设备。
所图示示例的处理器平台600包括处理器612。所图示示例的处理器612是硬件。例如,处理器612可由来自任何所期望的家族或制造商的一个或多个集成电路、逻辑电路、微处理器或控制器实现。硬件处理器可以是基于半导体的(例如,硅基)器件。在该示例中,处理器612实现非串并行检测器202、节点分析器204和指令生成器206。
所图示示例的处理器612包括本地存储器613(例如,高速缓存)。所图示示例的处理器612经由总线618与包括易失性存储器614和非易失性存储器616的主存储器通信。易失性存储器614可由同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、RAMBUS动态随机存取存储器(RDRAM)和/或任何其他类型的随机存取存储器设备实现。非易失性存储器616可由闪存和/或任何其他所期望类型的存储器设备实现。由存储器控制器控制对主存储器614、616的访问。
所图示示例的处理器平台600还包括接口电路620。接口电路620可由任何类型的接口标准实现,诸如以太网接口、通用串行总线(USB)和/或PCI快速接口。
在所图示的示例中,一个或多个输入设备622被连接至接口电路620。(多个)输入设备622准许用户将数据和/或命令输入至处理器612中。(多个)输入设备可以由例如音频传感器、麦克风、相机(静止的或视频)、键盘、按钮、鼠标、触屏、轨迹板、轨迹球、等点鼠标和/或语音识别系统实现。
一个或多个输出设备624也被连接至所图示的示例的接口电路620。输出设备624可例如由显示设备(例如,发光二极管(LED)、有机发光二极管(OLED)、液晶显示器、阴极射线管显示器(CRT)、触屏、触觉输出设备、打印机和/或扬声器)实现。因此,所图示示例的接口电路620典型地包括图形驱动器卡、图形驱动器芯片和/或图形驱动器处理器。
所图示示例的接口电路620还包括诸如发射机、接收机、收发机、调制解调器和/或网络接口卡之类的通信设备,以促进经由网络626(例如,以太网连接、数字订户线路(DSL)、电话线、同轴电缆、蜂窝电话系统等)与外部机器(例如,任何种类的计算设备)交换数据。
所图示示例的处理器平台600还包括一个或多个用于存储软件和/或数据的大容量存储设备628。此类大容量存储设备628的示例包括软盘驱动器、硬盘驱动器、紧凑盘驱动器、蓝光盘驱动器、RAID系统和数字多功能盘(DVD)驱动器。
图5的经编码指令632可被存储在大容量存储设备628中,存储在易失性存储器614中,存储在非易失性存储器616中和/或存储在诸如CD或DVD之类的可移除有形计算机可读存储介质上。
本文公开了用于将非串并行控制流图转换为数据流的示例方法、设备、系统和制品。进一步的示例和其组合包括以下内容。
示例1包括用于将控制流代码转换为数据流代码的设备,所述设备包括:节点分析器,该节点分析器用于检测序列化代码中的非串并行节点;以及指令生成器,该指令生成器用于:生成包括消耗操作数的、针对在先节点的指令;生成用于组合所述指令的结果的组合指令;并且输出所述组合指令和所述指令以便生成数据流代码。
示例2包括如示例1中限定的设备,其中所述消耗操作数是忽略操作数。
示例3包括如示例1或示例2中限定的设备,还包括非串并行检测器,该非串并行检测器用于检测所述序列化代码的控制流图是非串并行流图。
示例4包括如示例1或示例2中限定的设备,其中所述指令是PICK指令。
示例5包括如示例1中限定的设备,其中所述消耗操作数是白值。
示例6包括如示例5中限定的设备,其中所述指令生成器还用于生成用于消耗所述白值的指令。
示例7包括如示例1或示例2中限定的设备,其中所述节点分析器用于通过分析控制依赖图来检测所述非串并行节点。
示例8包括如示例7中限定的设备,其中所述节点分析器用于:当所述控制依赖图具有针对所述非串并行节点的多于一个的父节点时,标识所述非串并行节点。
示例9包括非瞬态计算机可读介质,该非瞬态计算机可读介质包括指令,所述指令在被执行时使得机器至少:检测序列化代码中的非串并行节点;生成包括消耗操作数的、针对在先节点的指令;生成用于组合所述指令的结果的组合指令;以及输出所述组合指令和所述指令以便生成数据流代码。
示例10包括如示例9中限定的非瞬态计算机可读介质,其中所述消耗操作数是忽略操作数。
示例11包括如示例9或示例10中限定的非瞬态计算机可读介质,其中所述指令在被执行时使得所述机器检测所述序列化代码的控制流图是非串并行流图。
示例12包括如示例9或示例10中限定的非瞬态计算机可读介质,其中所述指令是PICK指令。
示例13包括如示例9中限定的非瞬态计算机可读介质,其中所述消耗操作数是白值。
示例14包括如示例13中限定的非瞬态计算机可读介质,其中所述指令在被执行时使得所述机器生成用于消耗所述白值的指令。
示例15包括如示例9或示例10中限定的非瞬态计算机可读介质,其中所述指令在被执行时使得所述机器通过分析控制依赖图来检测所述非串并行节点。
示例16包括如示例15中限定的非瞬态计算机可读介质,其中所述指令在被执行时使得所述机器:在所述控制依赖图具有针对所述非串并行节点的多于一个的父节点时,标识所述非串并行节点。
示例17包括用于编译代码的方法,所述方法包括:检测序列化代码中的非串并行节点;生成包括消耗操作数的、针对在先节点的指令;生成用于组合所述指令的结果的组合指令;以及输出所述组合指令和所述指令以便生成数据流代码。
示例18包括如示例17中限定的方法,其中所述消耗操作数是忽略操作数。
示例19包括如示例17或示例18中限定的方法,还包括:检测所述序列化代码的控制流图是非串并行流图。
示例20包括如示例17或示例18中限定的方法,其中所述指令是PICK指令。
示例21包括如示例17中限定的方法,其中所述消耗操作数是白值。
示例22包括如示例21中限定的方法,还包括:生成用于消耗所述白值的指令。
示例23包括如示例17或示例18中限定的方法,还包括:通过分析控制依赖图来检测所述非串并行节点。
示例24包括如示例23中限定的方法,还包括:当所述控制依赖图具有针对所述非串并行节点的多于一个的父节点时,标识所述非串并行节点。
示例25包括用于将控制流代码转换为数据流代码的设备,所述设备包括:用于检测序列化代码中的非串并行节点的装置;以及用于生成指令以便执行以下操作的装置:生成包括消耗操作数的、针对在先节点的指令;生成用于组合所述指令的结果的指令;以及输出所述组合指令和所述指令以便生成数据流代码。
示例26包括如示例25中限定的设备,其中所述消耗操作数是忽略操作数。
示例27包括如示例25或示例26中限定的方法,还包括:用于检测所述序列化代码的控制流图是非串并行流图的装置。
示例28包括如示例25或示例26中限定的设备,其中所述指令是PICK指令。
示例29包括如示例25中限定的设备,其中所述消耗操作数是白值。
示例30包括如示例29中限定的设备,其中所述用于生成指令的装置还用于生成用于消耗所述白值的装置。
示例31包括如示例25或示例26中限定的设备,其中所述用于检测的装置用于通过分析控制依赖图来检测所述非串并行节点。
示例32包括如示例31中限定的设备,其中所述用于检测的装置用于:当所述控制依赖图具有针对所述非串并行节点的多于父节点时,标识所述非串并行节点。
从前述内容将会理解,已经公开了能够将非串并行序列化代码高效地转换为数据流代码的示例方法、设备和制品。在一些示例中,在转换后的指令中使用消耗操作数允许在并行计算系统(诸如,操作数据流架构的高性能计算系统)上执行最初的非串并行代码。
尽管本文中已公开了某些示例方法、设备和制品,但本专利涵盖的范围并不限于此。相反,本专利涵盖落入本专利权利要求范围内的全部方法、设备和制品。
Claims (17)
1.一种用于将控制流代码转换为数据流代码的设备,所述设备包括:
节点分析器,所述节点分析器用于检测序列化代码中的非串并行节点;以及
指令生成器,所述指令生成器用于:
生成包括消耗操作数的、针对与检测到的非串并行节点相关联的在先节点的指令;
生成用于组合针对所述在先节点生成的指令的结果的组合指令;以及
输出所述组合指令和针对所述在先节点生成的指令,以便生成数据流代码。
2.如权利要求1所述的设备,其特征在于,所述消耗操作数是忽略操作数。
3.如权利要求1或2所述的设备,还包括非串并行检测器,所述非串并行检测器用于检测所述序列化代码的控制流图是非串并行流图。
4.如权利要求1或2所述的设备,其特征在于,所述指令是PICK指令。
5.如权利要求1所述的设备,其特征在于,所述消耗操作数是白值。
6.如权利要求5所述的设备,其特征在于,所述指令生成器还用于生成用于消耗所述白值的指令。
7.如权利要求1或2所述的设备,其特征在于,所述节点分析器用于通过分析控制依赖图来检测所述非串并行节点。
8.如权利要求7所述的设备,其特征在于,所述节点分析器用于:当所述控制依赖图具有针对所述非串并行节点的多于一个的父节点时,标识所述非串并行节点。
9.一种用于编译代码的方法,所述方法包括:
检测序列化代码中的非串并行节点;
生成包括消耗操作数的、针对与检测到的非串并行节点相关联的在先节点的指令;
生成用于组合针对所述在先节点生成的指令的结果的组合指令;以及
输出针对所述在先节点生成的所述组合指令和所述指令以便生成数据流代码。
10.如权利要求9所述的方法,其特征在于,所述消耗操作数是忽略操作数。
11.如权利要求9或10所述的方法,还包括:检测所述序列化代码的控制流图是非串并行流图。
12.如权利要求9或10所述的方法,其特征在于,所述指令是PICK指令。
13.如权利要求9所述的方法,其特征在于,所述消耗操作数是白值。
14.如权利要求13所述的方法,还包括:生成用于消耗所述白值的指令。
15.如权利要求9或10所述的方法,还包括:通过分析控制依赖图来检测所述非串并行节点。
16.如权利要求15所述的方法,还包括:当所述控制依赖图具有针对所述非串并行节点的多于一个的父节点时,标识所述非串并行节点。
17.一种计算机可读介质,包括指令,所述指令在被执行时使得机器执行如权利要求9-16中的任一项所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/849,307 US10496383B2 (en) | 2017-12-20 | 2017-12-20 | Methods and apparatus to convert a non-series-parallel control flow graph to data flow |
US15/849,307 | 2017-12-20 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109947427A true CN109947427A (zh) | 2019-06-28 |
Family
ID=65231075
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811344350.4A Pending CN109947427A (zh) | 2017-12-20 | 2018-11-13 | 用于将非串并行控制流图转换为数据流的方法和设备 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10496383B2 (zh) |
CN (1) | CN109947427A (zh) |
DE (1) | DE102018128776A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11922148B2 (en) | 2021-12-20 | 2024-03-05 | Tactical Computing Laboratories, LLC | Systems and methods for application performance profiling and improvement |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5251322A (en) * | 1987-08-13 | 1993-10-05 | Digital Equipment Corporation | Method of operating a computer graphics system including asynchronously traversing its nodes |
US20040243529A1 (en) * | 1996-03-25 | 2004-12-02 | Stoneman Martin L. | Machine computational-processing systems for simulated-humanoid autonomous decision systems |
US7702499B1 (en) * | 2000-05-02 | 2010-04-20 | Cadence Design Systems, Inc. | Systems and methods for performing software performance estimations |
US6763515B1 (en) * | 2000-06-05 | 2004-07-13 | National Instruments Corporation | System and method for automatically generating a graphical program to perform an image processing algorithm |
US7275079B2 (en) * | 2000-08-08 | 2007-09-25 | International Business Machines Corporation | Common application metamodel including C/C++ metamodel |
US7559066B2 (en) * | 2000-08-08 | 2009-07-07 | International Business Machines Corporation | CICS BMS (basic message service) meta model |
US6934938B2 (en) * | 2002-06-28 | 2005-08-23 | Motorola, Inc. | Method of programming linear graphs for streaming vector computation |
US7774769B2 (en) * | 2005-09-22 | 2010-08-10 | Intel Corporation | Transmitting trace-specific information in a transformed application |
US7954059B2 (en) * | 2006-07-24 | 2011-05-31 | National Instruments Corporation | Automatic conversion of text-based code having function overloading and dynamic types into a graphical program for compiled execution |
US8039718B2 (en) * | 2009-07-22 | 2011-10-18 | Limagrain Europe S.A. | Inbred corn line BB33 |
US8417961B2 (en) * | 2010-03-16 | 2013-04-09 | Oracle International Corporation | Apparatus and method for implementing instruction support for performing a cyclic redundancy check (CRC) |
US8806464B2 (en) * | 2012-04-26 | 2014-08-12 | Hewlett-Packard Development Company, L.P. | Process flow optimized directed graph traversal |
US9081583B2 (en) * | 2012-08-23 | 2015-07-14 | National Instruments Corporation | Compile time execution |
US9189318B2 (en) * | 2013-05-15 | 2015-11-17 | Oracle International Corporation | Path-sensitive analysis framework for bug checking |
CN103870340B (zh) * | 2014-03-06 | 2017-11-07 | 华为技术有限公司 | 流计算系统中的数据处理方法、控制节点及流计算系统 |
US9946520B1 (en) * | 2015-02-26 | 2018-04-17 | MathNimbus Inc. | Conversion of interpretive language functions into web applications or services |
US9772925B2 (en) * | 2015-10-22 | 2017-09-26 | Microsoft Technology Licensing, Llc | Storage access debugging with disassembly and symbol entries |
-
2017
- 2017-12-20 US US15/849,307 patent/US10496383B2/en active Active
-
2018
- 2018-11-13 CN CN201811344350.4A patent/CN109947427A/zh active Pending
- 2018-11-16 DE DE102018128776.3A patent/DE102018128776A1/de active Pending
Also Published As
Publication number | Publication date |
---|---|
US10496383B2 (en) | 2019-12-03 |
DE102018128776A1 (de) | 2019-06-27 |
US20190042216A1 (en) | 2019-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11941400B2 (en) | Methods and apparatus for intentional programming for heterogeneous systems | |
TWI416412B (zh) | 在編譯處理的期間表示及檢測程式元件的一致性之可擴充式系統、電腦可讀取媒體、電腦程式產品及方法 | |
US8756590B2 (en) | Binding data parallel device source code | |
US8935683B2 (en) | Inline function linking | |
JP6017586B2 (ja) | グラフィックス処理ユニットのための関連するテクスチャロード命令を有する制御フロー命令のプレディケーション | |
CN107710150B (zh) | 从包含层次子例程信息的中间代码产生目标代码 | |
EP3719633B1 (en) | Methods and apparatus to insert buffers in a dataflow graph | |
CN112100072B (zh) | 应用程序代码的静态检测方法、装置、设备及介质 | |
KR102307364B1 (ko) | 애플리케이션 프로그램들에 대한 취약성 기반 하이브리드 테스트 시스템 | |
US20130262824A1 (en) | Code generation method, and information processing apparatus | |
US20100275206A1 (en) | Standalone software performance optimizer system for hybrid systems | |
US20190244095A1 (en) | Deep learning fpga converter | |
EP2656203A2 (en) | Extensible data parallel semantics | |
US11782813B2 (en) | Methods and apparatus to determine refined context for software bug detection and correction | |
US20090164773A1 (en) | Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system | |
KR20220113372A (ko) | 통합된 참조물 및 2차 객체 표시 | |
JP2021034023A (ja) | アクセラレータにおいてヘテロジニアスコンポーネントを設定する方法及び装置 | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
US8250544B2 (en) | Annotating exception information in a computer program | |
CN109947427A (zh) | 用于将非串并行控制流图转换为数据流的方法和设备 | |
US20140189656A1 (en) | Flow Analysis in Program Execution | |
US9135027B1 (en) | Code generation and execution for dynamic programming languages | |
US8954310B2 (en) | Automatic designation of equivalent variable values | |
US20220321579A1 (en) | Methods and apparatus to visualize machine learning based malware classification | |
KR20150051083A (ko) | 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |