CN114489596A - 待部署应用程序的确定方法、装置及存储介质 - Google Patents
待部署应用程序的确定方法、装置及存储介质 Download PDFInfo
- Publication number
- CN114489596A CN114489596A CN202111646405.9A CN202111646405A CN114489596A CN 114489596 A CN114489596 A CN 114489596A CN 202111646405 A CN202111646405 A CN 202111646405A CN 114489596 A CN114489596 A CN 114489596A
- Authority
- CN
- China
- Prior art keywords
- graph
- determining
- scheduling
- calculation
- hardware architecture
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请公开了一种待部署应用程序的确定方法、装置及存储介质。其中,待部署应用程序的确定方法,包括:利用预先设置的编程模型,根据用户的输入信息以及第一源文件,确定编程模型中的计算图和调度图,其中计算图用于描述算法的基本原理,调度图用于描述计算图在目标硬件架构上的部署方式和执行方式;以及根据计算图以及调度图,确定应用程序。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种待部署应用程序的确定方法、装置及存储介质。
背景技术
FPGA相比CGRA,在工业界应用更广,原因是FPGA相对来说拥有者更加成熟的产业链以及开发环境,而CGRA则在学术界更受欢迎,因为它的技术还不够成熟。CGRA未能受到广泛应用的一大阻碍就是其编程困难性。相比于传统的CPU之类的顺序处理器,CGRA具有更复杂的架构,为它需要调度和协调二维的硬件阵列资源。此外,CGRA的空域计算特性主要依靠基于互联的显式数据流进行通信,而这种通信方式比通过共享内存的隐式数据流更难管理。相比于FPGA,由于时域计算的特点,CGRA的任务划分也比FPGA的任务划分更加困难,而用高级语言程序编程FPGA尚且是一个棘手的问题,CGRA的编程难度显然更不轻松。从软件层面来看,要求大量细粒度并行的复杂CGRA架构和传统的顺序风格的软件编程模型之间存在着根本的冲突。所以CGRA的编程模型的开发,对于其应用的推广具有重要的意义。目前现有的CGRA编程模型包括CCF编译框架以及Spatial声明式编程模型。
其中CCF编译框架存在如下缺点:(1)CCF由于使用C++作为前端编程语言,而C++受限于其命令式和序列式的执行模型,很难有效地提取出应用程序中的并行性与数据局部性,而对于CGRA来说,程序并行化与数据重用是提高程序运行效率的重要方式;同时,编译器很难精准地将高级语言描述地程序抽象为一个适合于CGRA地数据流模型;(2)对于CGRA这种空间计算平台来说,显式指定算法中的内存层次结构对于更好的利用硬件平台的计算特性以及挖掘应用算法中的访存瓶颈是有利的,而CCF受限于其C++本身的语法规则,无法很好的进行显式访存层次描述,从而会带来一定的性能瓶颈。
Spatial声明式编程模型存在如下缺点:(1)独立开发的DSL对于程序开发人员来说增加了一定的学习成本,且由于该DSL是针对可重构计算平台开发的,对于需要在由CPU作为主机与可重构计算平台之间通信的应用描述上存在一定的缺陷。(2)该编程模型虽然可以显式描述应用中的并行性、访存层次等,但其仍然属于顺序式描述语言,且未能将应用程序的计算与调度进行解耦,这对于应用优化来说存在着一定的困难。且在Spatial中,算法的优化与底层硬件是紧密结合的,这会使得设计空间探索的效率变低,对于算法本身的优化来说造成了一定的阻碍。
针对上述的现有技术中存在的现有的CGRA编程模型由于复杂性高,使得编程人员的开发效率低以及难以优化的技术问题,目前尚未提出有效的解决方案。
发明内容
本公开的实施例提供了一种待部署应用程序的确定方法、装置及存储介质,以至少解决现有技术中存在的现有的CGRA编程模型由于复杂性高,使得编程人员的开发效率低以及难以优化的技术问题。
根据本公开实施例的一个方面,提供了一种待部署应用程序的确定方法,包括:利用预先设置的编程模型,根据用户的输入信息以及第一源文件,确定编程模型中的计算图和调度图,其中计算图用于描述算法的基本原理,调度图用于描述计算图在目标硬件架构上的部署方式和执行方式;以及根据计算图以及调度图,确定应用程序。
根据本公开实施例的另一个方面,还提供了一种存储介质,存储介质包括存储的程序,其中,在程序运行时由处理器执行以上任意一项所述的方法。
根据本公开实施例的另一个方面,还提供了一种待部署应用程序的确定装置,包括:第一确定模块,用于利用预先设置的编程模型,根据用户的输入信息以及第一源文件,确定编程模型中的计算图和调度图,其中计算图用于描述算法的基本原理,调度图用于描述计算图在目标硬件架构上的部署方式和执行方式;以及第二确定模块,用于根据计算图以及调度图,确定应用程序。
根据本公开实施例的另一个方面,还提供了一种待部署应用程序的确定装置,包括:处理器;以及存储器,与处理器连接,用于为处理器提供处理以下处理步骤的指令:利用预先设置的编程模型,根据用户的输入信息以及第一源文件,确定编程模型中的计算图和调度图,其中计算图用于描述算法的基本原理,调度图用于描述计算图在目标硬件架构上的部署方式和执行方式;以及根据计算图以及调度图,确定应用程序。
在本公开实施例中,本发明中提出的编程模型可以由用户直接以计算图的方式进行编程,同时以调度图的方式对算法进行优化,使用户可以直接操作映射到CGRA上的数据流图,避免了冗余信息节点的引入,从而提升了编译器的优化效率与CGRA的映射效率以及资源利用率。进而解决了现有技术中存在的现有的CGRA编程模型由于复杂性高,使得编程人员的开发效率低以及难以优化的技术问题。
附图说明
此处所说明的附图用来提供对本公开的进一步理解,构成本发明的一部分,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。在附图中:
图1是用于实现根据本公开实施例1所述的方法的计算设备的硬件结构框图;
图2是根据本公开实施例1的第一个方面所述待部署应用程序的确定方法的流程示意图;
图3是根据本公开实施例1的第一个方面所述的待部署应用程序的确定方法的另一流程示意图;
图4A~图4C示出了本公开实施例1第一个方面所述的计算图重映射的过程示意图;
图5A示出了本公开实施例1第一个方面所述的计算图的示意图;
图5B示出了本公开实施例1第一个方面所述的调度图的示意图;
图5C示出了本公开实施例1第一个方面所述的调度计算图的示意图;
图6是根据本公开实施例2所述的待部署应用程序的确定装置的示意图;以及
图7是根据本公开实施例3所述的待部署应用程序的确定装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本公开的技术方案,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本公开一部分的实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本实施例,还提供了一种待部署应用程序的确定方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本实施例所提供的方法实施例可以在移动终端、计算机终端、服务器或者类似的计算设备中执行。图1示出了一种用于实现待部署应用程序的确定方法的计算设备的硬件结构框图。如图1所示,计算设备可以包括一个或多个处理器(处理器可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器、以及用于通信功能的传输装置。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为I/O接口的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算设备还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
应当注意到的是上述一个或多个处理器和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算设备中的其他元件中的任意一个内。如本公开实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
存储器可用于存储应用软件的软件程序以及模块,如本公开实施例中的待部署应用程序的确定方法对应的程序指令/数据存储装置,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的待部署应用程序的确定方法。存储器可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至计算设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算设备的通信供应商提供的无线网络。在一个实例中,传输装置包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算设备的用户界面进行交互。
此处需要说明的是,在一些可选实施例中,上述图1所示的计算设备可以包括硬件元件(包括电路)、软件元件(包括存储在计算机可读介质上的计算机代码)、或硬件元件和软件元件两者的结合。应当指出的是,图1仅为特定具体实例的一个实例,并且旨在示出可存在于上述计算设备中的部件的类型。
在上述运行环境下,根据本实施例的第一个方面,提供了一种待部署应用程序的确定方法。图2示出了该方法的流程示意图,参考图2所示,该方法包括:
S202:利用预先设置的编程模型,根据用户的输入信息以及第一源文件,确定编程模型中的计算图和调度图,其中计算图用于描述算法的基本原理,调度图用于描述计算图在目标硬件架构上的部署方式和执行方式;以及
S204:根据计算图以及调度图,确定应用程序。
正如背景技术中所述的,CCF编译框架存在如下缺点:(1)CCF由于使用C++作为前端编程语言,而C++受限于其命令式和序列式的执行模型,很难有效地提取出应用程序中的并行性与数据局部性,而对于CGRA来说,程序并行化与数据重用是提高程序运行效率的重要方式;同时,编译器很难精准地将高级语言描述地程序抽象为一个适合于CGRA地数据流模型;(2)对于CGRA这种空间计算平台来说,显式指定算法中的内存层次结构对于更好的利用硬件平台的计算特性以及挖掘应用算法中的访存瓶颈是有利的,而CCF受限于其C++本身的语法规则,无法很好的进行显式访存层次描述,从而会带来一定的性能瓶颈。Spatial声明式编程模型存在如下缺点:(1)独立开发的DSL对于程序开发人员来说增加了一定的学习成本,且由于该DSL是针对可重构计算平台开发的,对于需要在由CPU作为主机与可重构计算平台之间通信的应用描述上存在一定的缺陷。(2)该编程模型虽然可以显式描述应用中的并行性、访存层次等,但其仍然属于顺序式描述语言,且未能将应用程序的计算与调度进行解耦,这对于应用优化来说存在着一定的困难。且在Spatial中,算法的优化与底层硬件是紧密结合的,这会使得设计空间探索的效率变低,对于算法本身的优化来说造成了一定的阻碍。
有鉴于此,本发明实施例提供了一种待部署应用程序的确定方法,首先计算设备可以利用预先设置的编程模型,根据用户的输入信息以及第一源文件,确定编程模型中的计算图和调度图,其中计算图用于描述算法的基本原理,调度图用于描述计算图在目标硬件架构上的部署方式和执行方式。
具体地,对于需要在CGRA(可编程逻辑处理单元,后文中出现的可编程逻辑处理单元由CGRA代替)计算平台上加速的程序,如大规模循环计算等,用户需要调用编程模型提供的建模原语库,分别描述计算图与调度图。其中计算图和调度图可以同时存在于一个cpp文件中。
其中,编程模型主体分为计算图与调度图两个部分,程序开发人员在编写应用程序时,需要分别创建计算图对象与调度图对象,其中计算图对象又分为task与kernel两个级别,分别代表不同的计算层次。程序开发人员使用计算图描述基本的算法原理,使用调度图描述计算图在目标硬件架构上具体的部署方式与执行方式。由此可见,当用户描述完完整的应用程序算法原理后,对于计算图部分无需再改,只需调整调度图部分即可,从而大大简化了程序开发人员的算法优化工作量。
此外,计算图是单个计算原语构成的简单集合,图例包含应用程序要“算什么”的信息,基于编程模型提供的一系列计算原语,由程序开发人员描述出应用程序的主体计算部分,再由编译器的处理pass将程序开发人员描述的计算部分代码抽象为数据流图(DFG)的形式,原则上该计算部分应为最简计算图。编程模型提供的计算原语中主要包含了数据节点建模原语、计算节点建模原语、循环迭代因子节点建模原语。一个计算图作为一个kernel,每个kernel描述应用程序中一层循环中的一个计算实例。对于一个计算任务来说,其中可以包含多个计算图,多个计算图之间可以有数据通信,也可以相互独立,不同的计算图之间的通信变量需要显式声明。多个kernel组成一个task,task描述一次配置到CGRA计算阵列上的计算任务,即对CGRA进行一次配置下发及数据搬运后完成的一次计算。多个task通过调度函数、计算资源限制、以及数据依赖关系,来决定最终如何放置到PE阵列上运行,即是同时放在PE阵列上运行,还是通过DRAM或SRAM或寄存器将中间数据进行缓存,再分批按照某个最优顺序运行。对于并非只有最内层循环有计算的非完美循环,以及各kernel之间的迭代域不同的情况,则需要加入循环同步原语,循环同步原语和迭代控制结构相结合,迭代控制结构指明当前kernel的迭代域,循环同步原语指明各kernel之间的迭代顺序,以匹配各kernel之间的执行速率。
此外,调度图对于程序开发人员来说是以一系列的参数化函数形式表示的,这些函数的处理对象是每个kernel或者task或者数据,程序开发人员创建一个调度图对象,并在该对象中使用多个层次的调度原语函数,由编译器前端将该调度图对象抽象为一个有向无环图的形式(DAG)。在调度图中,对应的是计算图的执行信息,主要描述的是“怎么算”,图中的每个节点表示单个kernel或者数据,以及kernel的驱动信息,驱动信息等价于迭代因子。对每个计算图应用对应的调度函数之后,将会形成一整幅调度后的,以每个计算图及其驱动算子为节点、执行依赖关系为边的调度图。调度主要包含三个层次的调度,分别是数据的调度、计算的调度、任务的调度。数据的调度是指对于数据位宽、形状、存储层次、以及数据速率同步的调度;计算的调度指对于计算图(kernel)的调度,包括对计算图进行parallel、pipeline、vectorize、unroll、tile等;任务的调度主要指对于任务执行顺序的调度与合并,这里会涉及到多个任务之间的数据通信。
进一步地,根据计算图以及调度图,确定应用程序。计算设备可以根据预先设置的操作方法对计算图以及调度图进行操作,确定最后的应用程序。
从而通过上述方式,本发明中提出的编程模型可以由用户直接以计算图的方式进行编程,同时以调度图的方式对算法进行优化,使用户可以直接操作映射到CGRA上的数据流图,避免了冗余信息节点的引入,从而提升了编译器的优化效率与CGRA的映射效率以及资源利用率。进而解决了现有技术中存在的现有的CGRA编程模型由于复杂性高,使得编程人员的开发效率低以及难以优化的技术问题。
可选地,根据计算图以及调度图,确定应用程序的操作,包括:利用预先设置的映射算法,根据目标硬件架构的计算阵列信息、计算图以及调度图,确定目标硬件架构的配置信息;以及根据计算图、调度图以及配置信息,确定应用程序。
具体地,参考图3和图4B所示,图4B示出了硬件建构图的示例,其中目标硬件架构指具体的CGRA计算阵列,不同型号的CGRA计算阵列具有不同的硬件特性。计算设备可以根据计算图、调度图以及目标硬件架构的计算阵列信息,确定目标硬件架构的配置信息。然后参考图3所示,计算设备通过对计算图和调度图的计算以及配置信息的编译,确定应用程序。其中图3所示的可执行文件即为应用程序。从而通过上述方式,用户直接以计算图的方式进行编程,同时以调度图的方式对算法进行优化,使用户可以直接操作映射到CGRA上的数据流图,避免了冗余信息节点的引入,从而提升了编译器的优化效率与CGRA的映射效率以及资源利用率。
可选地,利用预先设置的映射算法,根据目标硬件架构的计算阵列信息、计算图以及调度图,确定目标硬件架构的配置信息的操作,包括:通过预先设置的第一转化函数将计算图转化成数据流程图以及将调度图转化成数据依赖图;通过预先设置的第二转化函数,根据数据依赖图对数据流程图进行变换,确定调度计算图,并生成控制器指令以及可编程逻辑处理单元指令,其中控制器指令负责外部存储空间与内部存储空间之间的数据搬运以及可编程逻辑处理单元指令用于控制目标硬件架构上计算阵列的启动与停止,并且其中第一转化函数以及第二转化函数由可编程逻辑处理单元的编译器提供;利用预先设置的映射算法,根据目标硬件架构的特性,将调度计算图进行映射,确定映射计算图,其中映射算法包括计算节点的转换、节点的出入度分析以及硬件架构特征单元的插入;以及将映射计算图以及与硬件架构的信息输入至映射算法,确定硬件架构上的配置信息。
具体地,参考图3、图4A~图4C以及图5A~图5C所示,通过预先设置的第一转化函数将计算图转化成数据流程图以及将调度图转化成数据依赖图。其中图5A为计算图的示意图,图5B为调度图的示意图。其中由编译器提供的pass将用户描述的计算图与调度图分别抽象为DFG(Data Flow Graph数据流程图)与DDG(Data Dependence Graph数据依赖图)的形式。
进一步地,通过预先设置的第二转化函数,根据数据依赖图对数据流程图进行变换,确定调度计算图,并生成控制器指令以及可编程逻辑处理单元指令,其中控制器指令负责外部存储空间与内部存储空间之间的数据搬运以及可编程逻辑处理单元指令用于控制目标硬件架构上计算阵列的启动与停止,并且其中第一转化函数以及第二转化函数由可编程逻辑处理单元的编译器提供。图5C示出了调度计算图的示意图。具体地,编译pass将计算图抽象成的DFG按照调度图抽象成的DDG进行图级别的变换,形成调度后的调度计算图,并生成对应的DMA指令(控制器指令)与CGRA控制指令(可编程逻辑处理单元指令),其中DMA指令负责外部存储空间与内部存储空间之间的数据搬运,CGRA控制指令负责片上计算阵列的启动与停止。
进一步地,利用预先设置的映射算法,根据目标硬件架构的特性,将调度计算图进行映射,确定映射计算图,其中映射过程包括计算节点的转换、节点的出入度分析以及硬件架构特征单元的插入。具体地,根据目标硬件架构特性,将调度计算图重映射成符合硬件规格的映射计算图,其中包括计算节点的转换,节点的出入度分析,硬件特性单元的插入等。
进一步地,将映射计算图以及与硬件架构的信息输入至映射算法,确定硬件架构上的配置信息。具体地,将重映射后的计算图与硬件架构信息输入至映射算法,通过映射算法生成任务执行过程中硬件架构上具体的配置信息。参考图4A~图4C所示,示出了重映射的过程示意图。从而通过上述方式可以将计算图变换成符合目标硬件架构的映射计算图,从而满足应用程序的需求。
可选地,根据计算图、调度图以及配置信息,确定应用程序的操作,包括:通过可编程逻辑处理单元的编译器对配置信息进行汇编,生成与可编程逻辑处理单元对应的配置文件;通过控制器指令、可编程逻辑处理单元指令以及处理器指令对第一源文件中的可编程逻辑处理单元的计算部分进行替换,生成第二源文件,其中第一源文件为用户需要部署的应用程序的源文件;以及通过处理器的开源编译器对配置文件以及第二源文件进行编译,确定应用程序。
具体地,通过可编程逻辑处理单元的编译器对配置信息进行汇编,生成与可编程逻辑处理单元对应的配置文件。具体地,将配置信息经CGRA汇编器汇编,生成CGRA的配置文件,其中配置文件以头文件形式存在(Config.h)。
进一步地,通过控制器指令、可编程逻辑处理单元指令以及处理器指令对第一源文件中的可编程逻辑处理单元的计算部分进行替换,生成第二源文件,其中第一源文件为用户需要部署的应用程序的源文件。具体地,将第一源文件中CGRA计算部分替换为DMA指令+CGRA控制指令+CPU控制指令的形式,生成新的第二源文件(new.cpp)。
进一步地,通过处理器的开源编译器对配置文件以及第二源文件进行编译,确定应用程序。对生成的第二源文件与配置文件经RISCV编译器编译,生成最终部署到CPU+CGRA计算平台上的应用程序。
此外,参考图3所示,应用程序的完整确定流程如下:
步骤1:对于需要在CGRA计算平台上加速的程序,如大规模循环计算等,用户需要调用编程模型提供的建模原语库,分别描述计算图与调度图。这二者可以同时存在于一个cpp文件中;
步骤2:由编译器提供的pass将用户描述的计算图与调度图分别抽象为DFG与DDG的形式;
步骤3:编译pass将计算图抽象成的DFG按照调度图抽象成的DDG进行图级别的变换,形成调度后的计算图,并生成对应的DMA指令与CGRA控制指令;
步骤4:根据目标硬件架构特性,将调度后的计算图重映射成符合硬件规格的计算图,其中包括计算节点的转换,节点的出入度分析,硬件特性单元的插入等;
步骤5:将重映射后的计算图与硬件架构信息输入至映射算法,通过映射算法生成任务执行过程中硬件架构上具体的配置信息。
步骤6:将配置信息经CGRA汇编器汇编,生成CGRA的配置文件,配置文件以头文件形式存在。
步骤7:将源文件中CGRA计算部分替换为DMA指令+CGRA控制指令+CPU控制指令的形式,生成新的cpp源文件;
步骤8:对生成的新cpp源文件与配置信息头文件经RISCV编译器编译,生成最终部署到CPU+CGRA计算平台上的应用程序。
此外,参考图1所示,根据本实施例的第三个方面,提供了一种存储介质。所述存储介质包括存储的程序,其中,在所述程序运行时由处理器执行以上任意一项所述的方法。
从而根据本实施例,本发明中提出的编程模型可以由用户直接以计算图的方式进行编程,同时以调度图的方式对算法进行优化,使用户可以直接操作映射到CGRA上的数据流图,避免了冗余信息节点的引入,从而提升了编译器的优化效率与CGRA的映射效率以及资源利用率。进而解决了现有技术中存在的现有的CGRA编程模型由于复杂性高,使得编程人员的开发效率低以及难以优化的技术问题。
此外,本发明中存在如下有益效果:
(1)传统的CGRA编程模型使用C++来描述应用程序,再通过复杂的编译前端来提取C++中的数据流图,对其使用一系列的自动优化pass来生成可以映射到CGRA上的数据流图,这种方案为了在编译过程中保证功能的完备性,产生很多的冗余节点,而这些冗余节点并不是CGRA映射所必须的,所以无论是对编译优化本身,还是对目标CGRA的映射效率与资源利用率来说,都是不利的,而本方案提出的编程模型可以由用户直接以计算图的方式进行编程,同时以调度图的方式对算法进行优化,使用户可以直接操作映射到CGRA上的数据流图,避免了冗余信息节点的引入,从而提升了编译器的优化效率与CGRA的映射效率以及资源利用率。
(2)本方案采用了计算与调度解耦的编程模型,同时提供了一系列并行化调度原语,用户在计算图中描述完算法的计算原理之后,无需再对原算法进行修改,只需使用编程模型提供的各种调度原语来构建调度图,从而达到优化算法的目的,极大地提升了编程人员的开发效率,在大多数情况下都可以使用一行代码代替传统高级语言编程模型几十行代码的工作量。
(3)本方案将应用程序中的for循环这种需要加速的代码结构改用loop节点,即循环迭代因子的方式来表示,以数据流驱动节点的方式来描述整个for循环代码,从而可以更加灵活且直观地描述需要映射到CGRA上的for循环代码,并且可以通过loop节点叠加的方式方便地在计算图的层次上描述多层嵌套循环。
(4)本方案提供给了用户显式指定数据访存层次的功能,由用户直接调度数据的访存层次相比于由编译器自行调度数据,可以提供给用户更加丰富的设计探索空间,并且可以方便地在多计算图、或多任务之间对通信数据或共享数据进行调度,从而可以避免数据访存上的性能浪费以及编译过程中由于编译优化算法导致的访存瓶颈。
(5)本方案以计算图上的节点为基础编程单位,提供了多个层次上的调度,包括计算节点上的调度、数据节点上的调度、计算图的调度、任务的调度,使用户可以方便地使用CGRA上各个层次的计算资源,为用户在CGRA这种空间计算平台上进行应用程序的优化提供了丰富的设计探索空间。
(6)本方案基于C++这种高级语言,以C++库的形式实现,所以可以方便的在CPU+CGRA的混合异构平台上进行编程,同时由于基于C++开发,所以对于应用程序中需要CPU与CGRA进行数据通信的场景,本方案具有着天然的编程优势,避免了在异构平台上需要对不同的平台进行分别编程,以及复杂的跨平台数据通信问题。
此外,计算原语:编程模型的计算图中主要提供了数据节点建模原语和计算节点建模原语两类,具体计算原语如下所示:
(1)数据节点建模原语:
VAR():用于建模应用程序中的数据变量节点,需要在变量节点定义时声明其数据类型,数据维度等信息;
(2)计算节点建模原语:
a)ADD():用于建模加法计算,需要在节点定义时声明其producer节点;
b)SUB():用于建模减法计算,需要在节点定义时声明其producer节点;
c)ACC():用于建模累加运算,需要在节点定义时声明其producer节点;
d)SLL():用于建模逻辑左移计算,需要在节点定义时声明其producer节点;
e)SRL():用于建模逻辑右移计算,需要在节点定义时声明其producer节点;
f)ARL():用于建模算术右移计算,需要在节点定义时声明其producer节点;
g)ABS():用于建模求绝对值运算,需要在节点定义时声明其producer节点;
h)MAX():用于建模求最大值运算,需要在节点定义时声明其producer节点;
i)MIN():用于建模求最小值运算,需要在节点定义时声明其producer节点;
j)CEQ():用于建模相等判断运算,需要在节点定义时声明其producer节点;
k)CLT():用于建模小于判断运算,需要在节点定义时声明其producer节点;
l)CLE():用于建模小于等于判断运算,需要在节点定义时声明其producer节点;
m)SEL():用于建模二选一运算,需要在节点定义时声明其producer节点;
n)MUL():用于建模乘法运算,需要在节点定义时声明其producer节点;
o)DIV():用于建模除法运算,需要在节点定义时声明其producer节点;
p)MOD():用于建模取模运算,需要在节点定义时声明其producer节点;
q)NOT():用于建模逻辑非运算,需要在节点定义时声明其producer节点;
r)AND():用于建模逻辑与运算,需要在节点定义时声明其producer节点;
s)OR():用于建模逻辑或运算,需要在节点定义时声明其producer节点;
t)XOR():用于建模异或运算,需要在节点定义时声明其producer节点;
u)NEG():用于建模取反运算,需要在节点定义时声明其producer节点;
(3)循环迭代因子建模原语:
LOOP():用于建模单层循环迭代因子,需要在节点定义时声明其对应循环的起始值、终止值、迭代步长。如果是多层循环,还需声明该循环迭代因子的驱动迭代因子节点,即其producer节点。
调度原语:调度原语以一系列扩展的参数化函数形式实现,主要分为对数据的调度、对计算的调度、对任务的调度,具体的调度原语及其功能如下所示:
(1)数据调度:
a)tile():将数据节点在其指定维度上根据参数大小进行分块操作;
b)reshape():根据给定参数调整元数据的形状,一般用于矩阵数据的形状变换;
c)pingpong():使用该调度原语处理的数据将利用片上缓存对其使用乒乓访存模式;
d)matreduce():在矩阵数据的特定维度上进行规约操作;
e)set_mem():设置当前数据的存储层次,如DRAM、SRAM、REG等;
f)LINEBUF():声明该数据以片上linebuffer的形式存储,需要在参数中指定数据的存储维度与存储形状;
g)WINBUF():声明该数据以片上windowbuffer的形式存储,需要在参数中指定数据的存储维度与存储形状;
(2)计算调度:
a)unroll():对于计算图中的某个迭代因子驱动的某个计算块做展开操作,一般只针对最内层循环做处理;
b)parallel():在某个迭代因子驱动的计算块上,根据给定参数将计算块做并行处理;
c)reorder():对原始计算图中的迭代顺序做重新排序;
d)vectorize():将指定计算块中的数据处理根据给定参数进行向量化;
e)fuse():将指定的几个迭代因子融合为一个迭代因子,相当于将几层循环融合为一层循环;
f)split():将一个迭代因子拆分为几个迭代因子;
(3)任务调度:
a)parallel():在任务级别上做并行处理,即将指定的多个任务并行处理;
b)metapipe():将指定的多个任务组合为粗粒度流水线;
c)sequential():将指定的多个任务串行处理。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
图6示出了根据本实施例所述的待部署应用程序的确定装置600,该装置600与根据实施例1的第一个方面所述的方法相对应。参考图6所示,该装置600包括:第一确定模块610,用于利用预先设置的编程模型,根据用户的输入信息以及第一源文件,确定编程模型中的计算图和调度图,其中计算图用于描述算法的基本原理,调度图用于描述计算图在目标硬件架构上的部署方式和执行方式;以及第二确定模块620,用于根据计算图以及调度图,确定应用程序。
可选地,第二确定模块620,包括:第一确定子模块,用于利用预先设置的映射算法,根据目标硬件架构的计算阵列信息、计算图以及调度图,确定目标硬件架构的配置信息;以及第二确定子模块,用于根据计算图、调度图以及配置信息,确定应用程序。
可选地,第一确定子模块,包括:转化单元,用于通过预先设置的第一转化函数将计算图转化成数据流程图以及将调度图转化成数据依赖图;第一确定单元,用于通过预先设置的第二转化函数,根据数据依赖图对数据流程图进行变换,确定调度计算图,并生成控制器指令以及可编程逻辑处理单元指令,其中控制器指令负责外部存储空间与内部存储空间之间的数据搬运以及可编程逻辑处理单元指令用于控制目标硬件架构上计算阵列的启动与停止,并且其中第一转化函数以及第二转化函数由可编程逻辑处理单元的编译器提供;第二确定单元,用于利用预先设置的映射算法,根据目标硬件架构的特性,将调度计算图进行映射,确定映射计算图,其中映射过程包括计算节点的转换、节点的出入度分析以及硬件架构特征单元的插入;以及第三确定单元,用于将映射计算图以及与硬件架构的信息输入至映射算法,确定硬件架构上的配置信息。
可选地,第二确定子模块,包括:第一生成单元,用于通过可编程逻辑处理单元的编译器对配置信息进行汇编,生成与可编程逻辑处理单元对应的配置文件;第二生成单元,用于通过控制器指令、可编程逻辑处理单元指令以及处理器指令对第一源文件中的可编程逻辑处理单元的计算部分进行替换,生成第二源文件,其中第一源文件为用户需要部署的应用程序的源文件;以及第四确定单元,用于通过处理器的开源编译器对配置文件以及第二源文件进行编译,确定应用程序。
从而根据本实施例,本发明中提出的编程模型可以由用户直接以计算图的方式进行编程,同时以调度图的方式对算法进行优化,使用户可以直接操作映射到CGRA上的数据流图,避免了冗余信息节点的引入,从而提升了编译器的优化效率与CGRA的映射效率以及资源利用率。进而解决了现有技术中存在的现有的CGRA编程模型由于复杂性高,使得编程人员的开发效率低以及难以优化的技术问题。
实施例3
图7示出了根据本实施例所述的待部署应用程序的确定装置700,该装置700与根据实施例1的第一个方面所述的方法相对应。参考图7所示,该装置700包括:处理器710;以及存储器720,与处理器710连接,用于为处理器710提供处理以下处理步骤的指令:利用预先设置的编程模型,根据用户的输入信息以及第一源文件,确定编程模型中的计算图和调度图,其中计算图用于描述算法的基本原理,调度图用于描述计算图在目标硬件架构上的部署方式和执行方式;以及根据计算图以及调度图,确定应用程序。
可选地,根据计算图以及调度图,确定应用程序的操作,包括:利用预先设置的映射算法,根据目标硬件架构的计算阵列信息、计算图以及调度图,确定目标硬件架构的配置信息;以及根据计算图、调度图以及配置信息,确定应用程序。
可选地,利用预先设置的映射算法,根据目标硬件架构的计算阵列信息、计算图以及调度图,确定目标硬件架构的配置信息的操作,包括:通过预先设置的第一转化函数将计算图转化成数据流程图以及将调度图转化成数据依赖图;通过预先设置的第二转化函数,根据数据依赖图对数据流程图进行变换,确定调度计算图,并生成控制器指令以及可编程逻辑处理单元指令,其中控制器指令负责外部存储空间与内部存储空间之间的数据搬运以及可编程逻辑处理单元指令用于控制目标硬件架构上计算阵列的启动与停止,并且其中第一转化函数以及第二转化函数由可编程逻辑处理单元的编译器提供;利用预先设置的映射算法,根据目标硬件架构的特性,将调度计算图进行映射,确定映射计算图,其中映射过程包括计算节点的转换、节点的出入度分析以及硬件架构特征单元的插入;以及将映射计算图以及与硬件架构的信息输入至映射算法,确定硬件架构上的配置信息。
可选地,根据计算图、调度图以及配置信息,确定应用程序的操作,包括:通过可编程逻辑处理单元的编译器对配置信息进行汇编,生成与可编程逻辑处理单元对应的配置文件;通过控制器指令、可编程逻辑处理单元指令以及处理器指令对第一源文件中的可编程逻辑处理单元的计算部分进行替换,生成第二源文件,其中第一源文件为用户需要部署的应用程序的源文件;以及通过处理器的开源编译器对配置文件以及第二源文件进行编译,确定应用程序。
从而根据本实施例,本发明中提出的编程模型可以由用户直接以计算图的方式进行编程,同时以调度图的方式对算法进行优化,使用户可以直接操作映射到CGRA上的数据流图,避免了冗余信息节点的引入,从而提升了编译器的优化效率与CGRA的映射效率以及资源利用率。进而解决了现有技术中存在的现有的CGRA编程模型由于复杂性高,使得编程人员的开发效率低以及难以优化的技术问题。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本发明所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种待部署应用程序的确定方法,用于将应用程序部署在计算平台,其中所述计算平台包括处理器和可编程逻辑处理单元,其特征在于,包括:
利用预先设置的编程模型,根据用户的输入信息以及第一源文件,确定所述编程模型中的计算图和调度图,其中所述计算图用于描述算法的基本原理,所述调度图用于描述所述计算图在目标硬件架构上的部署方式和执行方式;以及
根据所述计算图以及所述调度图,确定所述应用程序。
2.根据权利要求1所述的方法,其特征在于,根据所述计算图以及所述调度图,确定所述应用程序的操作,包括:
利用预先设置的映射算法,根据所述目标硬件架构的计算阵列信息、所述计算图以及所述调度图,确定所述目标硬件架构的配置信息;以及
根据所述计算图、所述调度图以及所述配置信息,确定所述应用程序。
3.根据权利要求2所述的方法,其特征在于,利用预先设置的映射算法,根据所述目标硬件架构的计算阵列信息、所述计算图以及所述调度图,确定所述目标硬件架构的配置信息的操作,包括:
通过预先设置的第一转化函数将所述计算图转化成数据流程图以及将所述调度图转化成数据依赖图;
通过预先设置的第二转化函数,根据所述数据依赖图对所述数据流程图进行变换,确定调度计算图,并生成控制器指令以及可编程逻辑处理单元指令,其中所述控制器指令负责外部存储空间与内部存储空间之间的数据搬运以及所述可编程逻辑处理单元指令用于控制所述目标硬件架构上计算阵列的启动与停止,并且其中所述第一转化函数以及所述第二转化函数由所述可编程逻辑处理单元的编译器提供;
利用预先设置的映射算法,根据目标硬件架构的特性,将所述调度计算图进行映射,确定映射计算图,其中所述映射过程包括计算节点的转换、节点的出入度分析以及硬件架构特征单元的插入;以及
将所述映射计算图以及与所述硬件架构的信息输入至所述映射算法,确定所述硬件架构上的所述配置信息。
4.根据权利要求3所述的方法,其特征在于,根据所述计算图、所述调度图以及所述配置信息,确定所述应用程序的操作,包括:
通过所述可编程逻辑处理单元的编译器对所述配置信息进行汇编,生成与所述可编程逻辑处理单元对应的配置文件;
通过所述控制器指令、所述可编程逻辑处理单元指令以及处理器指令对所述第一源文件中的可编程逻辑处理单元的计算部分进行替换,生成第二源文件,其中所述第一源文件为所述用户需要部署的应用程序的源文件;以及
通过所述处理器的开源编译器对所述配置文件以及所述第二源文件进行编译,确定所述应用程序。
5.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时由处理器执行权利要求1至4中任意一项所述的方法。
6.一种待部署应用程序的确定装置,用于将应用程序部署在计算平台,其中所述计算平台包括处理器和可编程逻辑处理单元,其特征在于,包括:
第一确定模块,用于利用预先设置的编程模型,根据用户的输入信息以及第一源文件,确定所述编程模型中的计算图和调度图,其中所述计算图用于描述算法的基本原理,所述调度图用于描述所述计算图在目标硬件架构上的部署方式和执行方式;以及
第二确定模块,用于根据所述计算图以及所述调度图,确定所述应用程序。
7.根据权利要求6所述的方法,其特征在于,第二确定模块,包括:
第一确定子模块,用于利用预先设置的映射算法,根据所述目标硬件架构的计算阵列信息、所述计算图以及所述调度图,确定所述目标硬件架构的配置信息;以及
第二确定子模块,用于根据所述计算图、所述调度图以及所述配置信息,确定所述应用程序。
8.根据权利要求7所述的方法,其特征在于,第一确定子模块,包括:
转化单元,用于通过预先设置的第一转化函数将所述计算图转化成数据流程图以及将所述调度图转化成数据依赖图;
第一确定单元,用于通过预先设置的第二转化函数,根据所述数据依赖图对所述数据流程图进行变换,确定调度计算图,并生成控制器指令以及可编程逻辑处理单元指令,其中所述控制器指令负责外部存储空间与内部存储空间之间的数据搬运以及所述可编程逻辑处理单元指令用于控制所述目标硬件架构上计算阵列的启动与停止,并且其中所述第一转化函数以及所述第二转化函数由所述可编程逻辑处理单元的编译器提供;
第二确定单元,用于利用预先设置的映射算法,根据目标硬件架构的特性,将所述调度计算图进行映射,确定映射计算图,其中所述映射过程包括计算节点的转换、节点的出入度分析以及硬件架构特征单元的插入;以及
第三确定单元,用于将所述映射计算图以及与所述硬件架构的信息输入至所述映射算法,确定所述硬件架构上的所述配置信息。
9.根据权利要求8所述的方法,其特征在于,第二确定子模块,包括:
第一生成单元,用于通过所述可编程逻辑处理单元的编译器对所述配置信息进行汇编,生成与所述可编程逻辑处理单元对应的配置文件;
第二生成单元,用于通过所述控制器指令、所述可编程逻辑处理单元指令以及处理器指令对所述第一源文件中的可编程逻辑处理单元的计算部分进行替换,生成第二源文件,其中所述第一源文件为所述用户需要部署的应用程序的源文件;以及
第四确定单元,用于通过所述处理器的开源编译器对所述配置文件以及所述第二源文件进行编译,确定所述应用程序。
10.一种待部署应用程序的确定装置,用于将应用程序部署在计算平台,其中所述计算平台包括处理器和可编程逻辑处理单元,其特征在于,包括:
处理器;以及
存储器,与所述处理器连接,用于为所述处理器提供处理以下处理步骤的指令:
利用预先设置的编程模型,根据用户的输入信息以及第一源文件,确定所述编程模型中的计算图和调度图,其中所述计算图用于描述算法的基本原理,所述调度图用于描述所述计算图在目标硬件架构上的部署方式和执行方式;以及
根据所述计算图以及所述调度图,确定所述应用程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111646405.9A CN114489596A (zh) | 2021-12-29 | 2021-12-29 | 待部署应用程序的确定方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111646405.9A CN114489596A (zh) | 2021-12-29 | 2021-12-29 | 待部署应用程序的确定方法、装置及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114489596A true CN114489596A (zh) | 2022-05-13 |
Family
ID=81508607
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111646405.9A Pending CN114489596A (zh) | 2021-12-29 | 2021-12-29 | 待部署应用程序的确定方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114489596A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118118444A (zh) * | 2024-04-28 | 2024-05-31 | 之江实验室 | 一种基于可编程交换机的计算功能抽象方法及装置 |
-
2021
- 2021-12-29 CN CN202111646405.9A patent/CN114489596A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118118444A (zh) * | 2024-04-28 | 2024-05-31 | 之江实验室 | 一种基于可编程交换机的计算功能抽象方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112465108B (zh) | 一种面向存算一体平台的神经网络编译方法 | |
WO2021000970A1 (zh) | 深度学习算法的编译方法、装置及相关产品 | |
US10452452B2 (en) | Reconfigurable processor fabric implementation using satisfiability analysis | |
EP3370150B1 (en) | Program generation method and system for accelerator | |
Bhartacharyya et al. | Software synthesis and code generation for signal processing systems | |
Lam | A systolic array optimizing compiler | |
Plishker et al. | Functional DIF for rapid prototyping | |
CN108885543A (zh) | 具有可重新配置的算法流水线核和算法匹配流水线编译器的处理器 | |
CN108319458B (zh) | 一种基于图形化卫式命令演算的多任务编译方法 | |
WO2021000971A1 (zh) | 操作数据的生成方法、装置及相关产品 | |
US20220214883A1 (en) | Instruction scheduling method and system for reconfigurable array processor | |
Pedre et al. | Accelerating embedded image processing for real time: a case study | |
JP2020525907A (ja) | 高スループットプロセッサ | |
CN114035916A (zh) | 计算图的编译、调度方法及相关产品 | |
CN114489596A (zh) | 待部署应用程序的确定方法、装置及存储介质 | |
Janßen et al. | Designing applications for heterogeneous many-core architectures with the FlexTiles Platform | |
Zaitsev | Paradigm of computations on the Petri nets | |
Castrillon et al. | Dataflow Models of computation for programming heterogeneous multicores | |
Rettkowski et al. | Sdmpsoc: Software-defined mpsoc for fpgas | |
CN116048521A (zh) | 一种多阵列粗粒度可重构架构的多层级并行性开发方法 | |
Sahlbach et al. | A system-level FPGA design methodology for video applications with weakly-programmable hardware components | |
Baklouti et al. | A model-driven based framework for rapid parallel SoC FPGA prototyping | |
Von Platen et al. | Efficient realization of a cal video decoder on a mobile terminal (position paper) | |
US12039305B2 (en) | Method for compilation, electronic device and storage medium | |
WO2021000638A1 (zh) | 深度学习算法的编译方法、装置及相关产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |