重构数据流应用而不进行源代码改变或重新编译的制作方法

文档序号:11635161阅读:211来源:国知局
重构数据流应用而不进行源代码改变或重新编译的制造方法与工艺

相关申请的交叉引用

本申请要求于2014年12月19日提交的美国非临时专利申请no.14/576,291的优先权的权益。

实施例总体上涉及数据流编程。更具体地,实施例涉及重构数据流图应用的结构而不进行源代码改变。



背景技术:

数据流编程可以涉及开发被构造为执行用户或预定义的函数的计算“节点”的应用。这些节点可以通过表示计算之间的通信信道的“边”来连接。当消息到达节点时,节点可以应用其函数,并且然后可以将函数的结果转发到其它节点,其它节点可以通过其外向的(out-going)边连接到该节点。如果使用边来表达所有数据依赖性,则应用中的并行性可以变得能够简单推导,并且运行时系统可以使用并行性来开发平台上可用的计算资源,无论它们是多处理器中的核心还是集群中的系统。

在开发数据流应用时,开发人员可以做出关于流图的结构的决定。例如,开发人员可以选择在每个节点中应当封装什么样的代码,以及什么样的依赖性可以表达为边。在分布式存储器实现方式中,可以做出关于设备上的放置或跨存储器域的数据传送的决定。附加的属性也可以能够设置在节点和边上。可以有许多方式来表达与数据流图相同的算法。图形结构、放置、以及节点属性的选择可以影响并行执行的结果性能和可扩展性,并且因此可能需要对图形结构进行迭代调整以获得最佳性能。

附图说明

通过阅读以下说明书和所附权利要求,以及通过参考以下附图,实施例的各种优点对于本领域技术人员将变得显而易见,在附图中:

图1是根据实施例的计算系统的示例的框图;

图2是根据实施例的装置的示例的框图;

图3是用于重构数据流图应用的方法的示例的流程图;

图4是根据实施例的计算系统的示例的框图;

图5是根据实施例的计算系统的示例的框图;以及

图6是根据实施例的计算系统的框图。

具体实施方式

在图1中,描述了根据实施例的用于支持重构的计算系统10,其中数据流接口12可以用于获得数据流图应用。第一概述器控制器14可以接合运行时系统和图形库(参见图4)。运行时系统和图形库可以一起执行并剖绘(profile)原始流图(参见图4)。可以对原始流图进行剖绘以获得关于其结构和行为的知识。另外,发起器控制器16可以用于基于一个或多个重构输入(参见图4)来创建映射文件,其中映射文件可以自动地创建或在运行时响应于用户重构输入而创建。映射文件可以描述原始流图结构和节点属性如何可以映射到新的结构和属性集。可以了解映射文件的运行时系统可以在运行时将由数据流图应用构造的原始流图转换为新的结构(参见图4)。映射过程可以通过使得开发人员能够对数据流图应用进行迭代调整而不用在每次实验之前编辑并重建源代码来允许开发人员减少开发时间。发起器控制器16可以经由图形用户界面(参见图4)接收重构输入。

重构输入可以包括但不限于以下情况:将一组独立节点聚合成单个节点以减少大量生产(spawn)和调度独立任务的过度开销;用不同的缓冲节点类型来替换缓冲节点(例如,可以用无序的“缓冲器节点”来替换“队列节点”,或用优先级队列节点来替换缓冲器节点);当每个实例可以消耗过多内存的“并行节点”可以从无限制并发变为串行并发时,改变针对“功能节点”或“多功能节点”的允许并发;增加或减少对于“限制器节点”(例如,限制能够通过它的项的数量的节点)的限制;以及在当前正在开发的流图的分布式版本的原型实现中,可以将“分配器节点”放置在可以允许设备之间的通信处。这里使用的节点术语仅为了有助于讨论,并且可以根据正在使用的流图api(应用编程接口)而变化。在运行时,运行时系统可以用于辅助插入前述节点而不改变与数据流图应用相关联的源代码或已编译的可执行文件。

第二概述器控制器18可以用于对数据流图应用进行重新剖绘,其中在重新剖绘过程期间与数据流图应用相关联的源代码和一个或多个已编译的可执行文件可以不被修改。更具体地,映射文件和重构图形库可以在重新剖绘动作中由第二概述器控制器18使用以获得重构的流图。重构图形库可以用于解释映射文件并在执行重构的流图期间遵从由映射文件给出的指导。因此,可以在运行时施加由第二概述器控制器18给予的改变以评估功效。如果在施加如重构的流图所证实的改变后性能提高,则开发人员可以决定对改变进行硬编码,更新源代码并重新编译,或者可以选择允许运行时系统继续在运行时使用重构输入来应用重构技术。

图2描述了可以用于重构数据流图应用的装置20。在所示出的示例中,第一概述器22使用运行时系统和图形库(参见图4)来剖绘数据流图应用。如已经讨论的,可以通过第一概述器22从剖绘中获得原始流图。另外,发起器24可以使用一个或多个重构输入来创建映射文件。映射文件可以由发起器24自动地创建,或者用户可以在运行时提供重构输入。发起器24还可以使用重构图形库来解释由映射文件给出的指导。重构输入可以经由图形用户界面28由发起器24接收。如已经指出的,映射文件可以描述原始流图的结构如何可以与后续的重构的流图的结构相关。另外,第二概述器26可以基于映射文件和重构图形库来重新剖绘数据流图。重构的流图可以在第二概述器26重新剖绘数据流图时创建。第二概述器26可以重新剖绘数据流图应用而不修改与数据流图应用相关联的源代码或一个或多个已编译的可执行文件。

图3示出了根据实施例的用于重构数据流图应用的方法30的示例。方法30可以被实现为一个或多个模块,以可执行软件的方式,如一组逻辑指令,该一组逻辑指令存储在存储器(例如,随机存取存储器(ram)、只读存储器(rom)、可编程rom(prom)、固件、闪速存储器等)的机器可读存储介质或计算机可读存储介质中,以可配置逻辑(举例来说,例如,可编程逻辑阵列(pla)、现场可编程门阵列(fpga)、复杂可编程逻辑器件(cpld))的方式,以使用电路技术(举例来说,例如,专用集成电路(asic)、互补金属氧化物半导体(cmos)、或晶体管-晶体管逻辑(ttl)技术)的固定功能的逻辑硬件的方式,或其任何组合。

在该示例中,在框32处可以使用运行时系统和图形库对具有相关联的源代码的数据流图应用进行剖绘。可以使用运行时系统和图形库(参见图4)来执行并剖绘原始流图。在框34处可以基于在框37处接收一个或多个重构输入来创建映射文件。映射文件可以描述原始图形结构和节点属性将如何映射到新的结构和属性集。了解映射语言的运行时系统可以在运行时将由数据流图应用构造的图形转换为新的结构。可以通过以下方式中的一个或多个来创建重构输入:自动地,或者响应于经由图形用户界面的在运行时的用户重构输入。重构图形库可以在用户期望的应用的上下文中解释映射文件。重构图形库可以在重新剖绘数据流图应用时使用。在框36处可以使用映射文件和重构图形库对数据流图应用进行重新剖绘,以获得重构的流图。与数据流图应用相关联的源代码和一个或多个已编译的可执行文件可以不被修改。开发人员可以决定通过改变源代码并重新编译来进行硬编码,或者允许运行时系统继续在运行时应用重构。

在图4中,描述了具有一组指令42的非暂时存储介质40,一组指令42用于使得计算系统44能够重构数据流图应用。该组指令42可指示运行时系统50在运行时46使用图形库对数据流图应用进行剖绘。作为前述对数据流图应用进行剖绘的结果,原始流图54可以被创建。原始流图54可以经受重构输入58,重构输入58可以改变原始图形结构和节点、类型、聚合等,并且可以创建映射文件56。重构输入58可以自动地实现或者经由图形用户界面68手动地实现。当映射文件56被创建时,其可以生成重构图形库60。映射文件56和重构图形库60可以用于获得重新剖绘的数据流图应用70,并且可以创建重构的流图62,而不修改可以与数据流图应用46相关联的源代码48和已编译的可执行文件64。映射文件56可以描述原始流图的结构如何与重构的流图62的结构相关。因此,在开发人员决定进行硬编码并修改与数据流图应用相关联的源代码48和已编译的可执行文件64之前,可以获得对数据流图应用结构的迭代调整。

图5示出了根据一个实施例的处理器核心200。处理器核心200可以是以下任何类型的处理器的核心:例如,微处理器、嵌入式处理器、数字信号处理器(dsp)、网络处理器、过程虚拟机、或执行代码的其它设备。虽然图5中仅示出了一个处理器核心200,但是处理元件可以替代地包括图5中示出的处理器核心200中的多于一个处理器核心200。处理器核心200可以是单线程核心,或者对于至少一个实施例,处理器核心200可以是多线程的,因为其可以包括每个核心多于一个硬件线程上下文(或“逻辑处理器”)。

图5还示出了耦合到处理器核心200的存储器270。存储器270可以是本领域技术人员已知或以其它方式可用的各种各样的存储器(包括存储器层次的各种层)中的任何存储器。存储器270可以包括将由处理器核心200执行的一个或多个代码213(多个)指令,其中代码213可以实现已经讨论过的方法30(图3)。在一个示例中,存储器270是非闪速存储器。处理器核心200遵从由代码213指示的指令的程序序列。每个指令可以进入前端部分210,并且可以由一个或多个解码器220进行处理。解码器220可以生成微操作(例如,以预定义的格式的固定宽度微操作)作为其输出,或者可以生成反映原始代码指令的其它指令、微指令或控制信号。所示出的前端部分210还包括寄存器重命名逻辑225和调度逻辑230,其一般对资源进行分配并对对应于用于执行的转换指令的操作进行排队。

处理器核心200被示出为包括具有一组执行单元255-1至255-n的执行逻辑250。一些实施例可以包括专用于指定功能或功能集的多个执行单元。其它实施例可以仅包括一个执行单元或一个能够执行特定功能的执行单元。所示出的执行逻辑250执行由代码指令指定的操作。

在完成执行由代码指令指定的操作之后,后端逻辑260退出代码213的指令。在一个实施例中,处理器核心200允许不按顺序执行,但需要按顺序退出指令。退出逻辑265可以采用本领域技术人员已知的各种形式(例如,重新排序缓冲器等)。以这种方式,处理器核心200在执行代码213期间被转换,至少在由解码器生成的输出、由寄存器重命名逻辑225使用的硬件寄存器和表、以及任何由执行逻辑250修改的任何寄存器(未示出)方面。

虽然在图5中未示出,但是处理元件可以包括具有处理器核心200的其它片上元件。例如,处理元件可以包括连同处理器核心200的存储器控制逻辑。处理元件可以包括i/o控制逻辑和/或可以包括与存储器控制逻辑集成的i/o控制逻辑。处理元件还可以包括一个或多个高速缓存。

现在参考图6,示出了根据实施例的计算系统1000示例的框图。图6中示出的是包括第一处理元件1070和第二处理元件1080的多处理器系统1000。虽然示出了两个处理元件1070和1080,但是应当理解,系统1000的实施例也可以仅包括一个这样的处理元件。

系统1000被示为点对点互连系统,其中第一处理元件1070和第二处理元件1080经由点对点互连1050耦合。应当理解,图6所示出的互连中的任何互连或所有互连可以被实现为多点总线而不是点对点互连。

如图6所示,处理元件1070和1080中的每一个处理元件可以是多核处理器,其包括第一处理器核心和第二处理器核心(即,处理器核心1074a和1074b,以及处理器核心1084a和1084b)。这样的核心1074a、1074b、1084a、1084b可以被配置为以与上文结合图5所讨论的方式类似的方式来执行指令代码。

每个处理元件1070、1080可以包括至少一个共享的高速缓存1896a、1896b。共享的高速缓存1896a、1896b可以存储由处理器的一个或多个组件(例如,分别为核心1074a、1074b和1084a、1084b)使用的数据(例如,指令)。例如,共享的高速缓存1896a、1896b可以对存储在存储器1032、1034中的数据进行本地高速缓存,以用于被处理器的组件更快地访问。在一个或多个实施例中,共享的高速缓存1896a、1896b可以包括一个或多个中级高速缓存(例如,2级(l2)、3级(l3)、4级(l4)或其它级的高速缓存)、末级缓存(llc)和/或其组合。

虽然仅示出了两个处理元件1070、1080,但是应当理解,实施例的范围不限于此。在其它实施例中,一个或多个附加处理元件可以存在于给定的处理器中。替代地,处理元件1070、1080中的一个或多个处理元件可以是除了处理器之外的元件(例如,加速器或现场可编程门阵列)。例如,(多个)附加的处理元件可以包括与第一处理器1070相同的(多个)附加处理器、与处理器第一处理器1070各向异性的或不对称的(多个)附加处理器、加速器(例如,举例来说,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列、或任何其它处理元件。处理元件1070与1080之间在包括架构、微架构、热量、功耗特性等的一系列指标的度量方面可以存在各种差异。这些差异可以高效地将其本身表现为处理元件1070、1080之间的不对称性和各向异性。对于至少一个实施例来说,各种处理元件1070、1080可以驻留在相同的管芯封装件中。

第一处理元件1070还可以包括存储器控制器逻辑(mc)1072和点对点(p-p)接口1076和1078。类似地,第二处理元件1080可以包括mc1082和p-p接口1086和1088。如图6所示,mc1072和1082将处理器耦合到相应的存储器(即,存储器1032和存储器1034),其可以是本地附接到相应处理器的主存储器的一部分。虽然mc1072和1082被示为集成到处理元件1070、1080中,但是对于替代实施例来说,mc逻辑可以是处理元件1070、1080之外的分立逻辑而不是集成在其中。

第一处理元件1070和第二处理元件1080可以分别经由p-p互连1076、1086耦合到i/o子系统1090。如图6所示,i/o子系统1090包括p-p接口1094和1098。此外,i/o子系统1090包括接口1092,其用于将i/o子系统1090与高性能图形引擎1038耦合。在一个实施例中,总线1049可以用于将图形引擎1038耦合到i/o子系统1090。替代地,点对点互连可以对这些组件进行耦合。

接下来,i/o子系统1090可以经由接口1096耦合到第一总线1016。在一个实施例中,第一总线1016可以是外围部件互连(pci)总线,或者诸如pciexpress总线或另外的第三代i/o互连总线的总线,尽管实施例的范围不限于此。

如图6所示,各种i/o设备1014(例如,照相机、传感器)可以耦合到第一总线1016,连同可以将第一总线1016耦合到第二总线1020的总线桥1018。在一个实施例中,第二总线1020可以是低引脚数(lpc)总线。在一个实施例中,以下各种设备可以耦合到第二总线1020,例如,包括键盘/鼠标1012、(多个)通信设备1026、以及数据存储单元1019(例如,可以包括代码1030的磁盘驱动器或其它大容量存储设备)。所示出的代码1030可以实现已经讨论过的方法30(图3),并且可以类似于已经讨论过的代码213(图5)。此外,音频i/o1024可以耦合到第二总线1020,并且电池1010可以向计算系统1000供电。

注意,可以设想其它实施例。例如,代替图6的点对点架构,系统可以实现多点总线或另外的这样的通信拓扑。另外,可以替代地使用比图6所示的集成芯片更多或更少的集成芯片对图6的元件进行分区。

附加注释和示例:

示例1可以包括一种用于支持重构的系统,该系统包括:数据流接口,其用于获得数据流图应用;第一概述器控制器,其用于使用运行时系统和图形库来剖绘与源代码相关联的数据流图应用以获得原始流图;发起器控制器,其用于基于一个或多个重构输入来创建映射文件;以及第二概述器控制器,其用于使用映射文件和重构图形库来重新剖绘数据流图应用以获得重构的流图。

示例2可以包括示例1的系统,其中,数据流图被重新剖绘而不修改与数据流应用相关联的源代码和一个或多个已编译的可执行文件。

示例3可以包括示例1的系统,其中,映射文件是通过以下方式中的一个或多个创建的:自动地,或者响应于在运行时的用户重构输入。

示例4可以包括示例1的系统,其中,发起器控制器使用重构图形库来解释由映射文件给出的指导。

示例5可以包括示例1的系统,其中,发起器控制器经由图形用户界面来接收重构输入。

示例6可以包括示例1至5中任一项的系统,其中,映射文件描述原始流图的结构如何与重构的流图的结构相关,并且其中,重构输入包括以下中的一个或多个:节点聚合输入、缓冲节点放置输入、并发输入、节点限制输入、或分配器节点放置输入。

示例7可以包括一种用于重构数据流图应用的装置,该装置包括:第一概述器,其用于使用运行时系统和图形库来剖绘与源代码相关联的数据流图应用以获得原始流图;发起器,其用于基于一个或多个重构输入来创建映射文件;以及第二概述器,其用于使用映射文件和重构图形库来重新剖绘数据流图应用以获得重构的流图。

示例8可以包括示例7的装置,其中,数据流图可以被重新剖绘而不修改与数据流应用相关联的源代码和一个或多个已编译的可执行文件。

示例9可以包括示例7的装置,其中,映射文件可以通过以下方式中的一个或多个创建:自动地,或者响应于在运行时的用户重构输入。

示例10可以包括示例7的装置,其中,发起器可以使用重构图形库来解释由映射文件给出的指导。

示例11可以包括示例7的装置,其中,发起器可以经由图形用户界面来接收重构输入。

示例12可以包括示例7至11中任一项的装置,其中,映射文件可以描述原始流图的结构如何可以与重构的流图的结构相关,并且其中,重构输入可以包括以下中的一个或多个:节点聚合输入、缓冲节点放置输入、并发输入、节点限制输入、或分配器节点放置输入。

示例13可以包括一种用于重构数据流图应用的方法,该方法包括:使用运行时系统和图形库来剖绘与源代码相关联的数据流图应用以获得原始流图;基于一个或多个重构输入来创建映射文件;以及使用映射文件和重构图形库来重新剖绘数据流图应用以获得重构的流图。

示例14可以包括示例13的方法,其中,数据流图应用可以被重新剖绘而不修改与数据流图应用相关联的源代码和一个或多个已编译的可执行文件。

示例15可以包括示例13的方法,其中,运行时系统可以通过以下方式中的一个或多个来创建映射文件:自动地,或者响应于在运行时的用户重构输入。

示例16可以包括示例13的方法,其中,创建映射文件可以包括使用重构图形库来解释由映射文件给出的指导。

示例17可以包括实施例13的方法,还包括经由图形用户界面来接收重构输入。

示例18可以包括示例13至17中任一项的方法,其中,映射文件可以描述原始流图的结构如何可以与重构的流图的结构相关,并且其中,重构输入可以包括以下中的一个或多个:节点聚合输入、缓冲节点放置输入、并发输入、节点限制输入、或分配器节点放置输入。

示例19可以包括至少一种非暂时性计算机可读存储介质,其包括一组指令,当该一组指令被计算系统执行时,可以使得计算系统:使用运行时系统和图形库来剖绘与源代码相关联的数据流图应用以获得原始流图;基于一个或多个重构输入来创建映射文件;以及使用映射文件和重构图形库来重新剖绘数据流图应用以获得重构的流图。

示例20可以包括示例19的至少一种非暂时性计算机可读存储介质,其中,数据流图应用被重新剖绘而不修改与数据流图应用相关联的源代码和一个或多个已编译的可执行文件。

示例21可以包括示例19的至少一种非暂时性计算机可读存储介质,其中,运行时系统通过以下方式中的一个或多个来创建映射文件:自动地,或者响应于在运行时的用户重构输入。

示例22可以包括示例19的至少一种非暂时性计算机可读存储介质,其中,指令当被执行时可以使得计算系统使用重构图形库来解释由映射文件给出的指导。

示例23可以包括实施例19的至少一种非暂时性计算机可读存储介质,其中,指令当被执行时可以使得计算系统经由图形用户界面来接收重构输入。

示例24可以包括示例19至23中任一项的至少一种非暂时性计算机可读存储介质,其中,映射文件描述原始流图的结构如何可以与重构的流图的结构相关,并且其中,重构输入包括以下中的一个或多个:节点聚合输入、缓冲节点放置输入、并发输入、节点限制输入、或分配器节点放置输入。

示例25可以包括一种用于重构数据流图应用的装置,该装置包括用于以其任何组合或子组合来执行示例13至18中任一项的方法的模块。

实施例适用于与所有类型的半导体集成电路(ic)芯片一起使用。这些ic芯片的示例包括但不限于处理器、控制器、芯片集组件、可编程逻辑阵列、存储器芯片、网络芯片、片上系统(soc)、ssd/nand控制器asic等。此外,在一些附图中,信号传导路线用线来表示。一些线可能是不同的,以指示更多的组成部分信号路径,具有数字标签用于指示多个组成部分信号路径,和/或在一端或多端具有箭头用于指示主要的信息流方向。然而,这不应以限制性的方式来解释。相反,这种添加的细节可以与一个或多个示例性实施例结合使用,以有助于更容易地理解电路。任何表示的信号线路(无论是否具有附加信息)实际上可以包括可以在多个方向上行进的一个或多个信号,并且可以用任何合适类型的信号方案(例如用差分对、光纤线路和/或单端线路实现的数字线路或模拟线路)来实现。

可能已经给定了示例尺寸/型号/值/范围,尽管实施例并不限于同样的尺寸/型号/值/范围。随着制造技术(例如,光刻)随时间成熟,预期到可以制造更小尺寸的设备。此外,为了简化说明和讨论,并且为了不模糊实施例的某些方面,公知的与ic芯片和其它组件的电源/接地连接可以在图中示出或者可以不在图中示出。此外,可以以框图的形式示出布置,以使得避免模糊实施例,并且还考虑到关于这种框图布置的实现的细节高度依赖于将在其中实现该实施例的平台(即这些细节应该在本领域技术人员的范围之内)的事实。在阐述具体细节(例如,电路)以便于描述示例实施例的情况下,对于本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下实施实施例,或者有这些具体细节的变化的情况下实施实施例。由此,该描述应当被认为是说明性的而非限制性的。

术语“耦合”在本文中可以用于指示所讨论的组件之间的任何类型的关系(直接的或间接的),并且可以应用于电气、机械、流体、光学、电磁、机电或其它连接。此外,术语“第一”、“第二”等在本文中可以仅用于促进讨论,并且除非另有说明,否则不具有特定的时间或时序意义。

如在本申请和权利要求中所使用的,由术语“中的一个或多个”连接的项目列表可以表示所列出的项目的任何组合。例如,短语“a、b或c中的一个或多个”可以表示a、b、c;a和b;a和c;b和c;或者a、b和c。

本领域技术人员将从前述描述中理解,实施例的广泛技术可以以各种形式来实现。因此,虽然已经结合其特定示例描述了实施例,但是实施例的真实范围不应受到限制,因为根据对附图、说明书以及所附权利要求的研究,其它修改对于本领域技术人员将变得显而易见。

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