CN113687816B - 算子的可执行代码的生成方法及装置 - Google Patents

算子的可执行代码的生成方法及装置 Download PDF

Info

Publication number
CN113687816B
CN113687816B CN202010427353.5A CN202010427353A CN113687816B CN 113687816 B CN113687816 B CN 113687816B CN 202010427353 A CN202010427353 A CN 202010427353A CN 113687816 B CN113687816 B CN 113687816B
Authority
CN
China
Prior art keywords
intermediate representation
representation information
operator
scheduling
hardware platform
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.)
Active
Application number
CN202010427353.5A
Other languages
English (en)
Other versions
CN113687816A (zh
Inventor
章放
韩新承
刘伟良
孟坚鑫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Hikvision Digital Technology Co Ltd
Original Assignee
Hangzhou Hikvision Digital Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Hikvision Digital Technology Co Ltd filed Critical Hangzhou Hikvision Digital Technology Co Ltd
Priority to CN202010427353.5A priority Critical patent/CN113687816B/zh
Publication of CN113687816A publication Critical patent/CN113687816A/zh
Application granted granted Critical
Publication of CN113687816B publication Critical patent/CN113687816B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/02Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]

Abstract

本申请公开了一种算子的可执行代码的生成方法及装置,属于数据处理领域。在本申请中,计算机设备获取算子的第一中间表示信息,通过一个或者多个计算功能单元将第一中间表示信息进行表达映射,以生成第二中间表示信息。之后,生成算子在目标硬件平台上的可执行代码。由于计算功能单元为在不同类型的多个硬件平台中具有共性计算功能的最小计算单元,且计算功能单元的颗粒度比算子小,因此,第二中间表示信息可以在不同类型的多个硬件平台中共用,也即是,第一中间表示信息和第二中间表示信息都可以在多个硬件平台中共用,从而在同一个算子应用于不同的硬件平台时,可以直接按照具有硬件平台的类型生成可执行代码,提高了算子的开发效率。

Description

算子的可执行代码的生成方法及装置
技术领域
本申请涉及数据处理领域,特别涉及一种算子的可执行代码的生成方法及装置。
背景技术
算子用于指示一种数据处理操作,比如,神经网络通常包括卷积算子和池化算子,卷积算子用于指示一种卷积操作,池化算子用于指示一种池化操作。为了能够在实际的硬件平台上运行算子,以执行对应的数据处理操作,亟需一种算子的可执行代码的生成方法。
相关技术中,可以将算子的可执行代码的生成过程分为计算表达和计算调度两个独立的步骤。计算表达是指通过特定语言描述算子的计算逻辑,也即是,描述算子需要完成的任务,以及算子的输入和输出,之后,将描述算子的计算逻辑的语言转换为中间语言,可以得到算子的中间表示信息。计算调度是指根据目标硬件平台的硬件特性,对算子的中间表示信息进行调度优化。之后,可以将调度优化后的中间表示信息转换为目标硬件平台可识别的可执行代码。
但是相关技术中,算子的中间表示信息的调度优化过程与目标硬件平台的硬件特性耦合较深,导致同一个算子应用于不同的硬件平台时,需要分别进行调度优化,从而转换为目标硬件平台可识别的可执行代码,使得算子的开发效率低下。
发明内容
本申请实施例提供了一种算子的可执行代码的生成方法及装置,解决了算子的中间表示信息的调度优化过程与目标硬件平台的硬件特性耦合较深的问题。所述技术方案如下:
一方面,提供了一种算子的可执行代码的生成方法,所述方法包括:
获取所输入的算子的第一中间表示信息,所述第一中间表示信息用于描述所述算子的计算逻辑;
通过一个或者多个计算功能单元将所述算子的第一中间表示信息进行表达映射,以生成所述算子的第二中间表示信息,所述第二中间表示信息用于描述由所述计算功能单元和若干控制流组成的计算逻辑,所述计算功能单元为预先配置的在不同类型的多个硬件平台中具有共性计算功能的最小计算单元,所述计算功能单元的颗粒度比所述算子小;
根据所述第二中间表示信息和所述算子所应用的目标硬件平台的类型,生成所述算子在所述目标硬件平台上的可执行代码,所述目标硬件平台为所述多个硬件平台中的其中一个。
可选地,对于任一计算功能单元,所述计算功能单元为预配置的计算核接口,所述计算核接口在不同类型的多个硬件平台中通用,但在不同类型的多个硬件平台中调用不同的逻辑代码来实现;
所述根据所述第二中间表示信息和所述算子所应用的目标硬件平台的类型,生成所述算子在所述目标硬件平台上的可执行代码,包括:
将所述第二中间表示信息转换成平台优化代码;
根据所述目标硬件平台的类型,获取所述第二中间表示信息中的每个计算核接口在所述目标硬件平台上所能调用的逻辑代码;
将所述平台优化代码中包含的计算核接口部分替换成相应计算核接口在所述目标硬件平台上所能调用的逻辑代码,以将所述第二中间表示信息编译成所述算子在所述目标硬件平台上的可执行代码。
可选地,所述获取所输入的算子的第一中间表示信息,包括:
获取所述算子的第三中间表示信息,所述第三中间表示信息是指未进行优化的中间表示信息;
对所述第三中间表示信息的数据流调度进行优化,得到第四中间表示信息;
对所述第四中间表示信息的计算调度进行优化,得到所述第一中间表示信息。
可选地,所述对所述第三中间表示信息的数据流调度进行优化,得到第四中间表示信息,包括:
如果所述目标硬件平台的类型属于参考类型集合中的一个类型,则获取目标数据流调度模板,所述目标数据流调度模板用于描述所述算子的数据流调度过程;
通过所述目标数据流调度模板对所述第三中间表示信息进行修改;
显示多个数据流调度原语;
当检测到所述多个数据流调度原语中任一数据流调度原语的选择操作时,按照所选择的数据流调度原语,对修改后所述第三中间表示信息的数据流调度进行优化,得到所述第四中间表示信息。
可选地,所述获取目标数据流调度模板之前,还包括:
从所述第三中间表示信息中,获取所述算子的输入数据的大小和输出数据的大小;
所述获取目标数据流调度模板,包括:
如果所述输入数据的大小和所述输出数据的大小中的至少一个小于第一参考阈值,则获取输入数据和输出数据不并行的数据流调度模板作为所述目标数据流调度模板。
可选地,所述对所述第四中间表示信息的计算调度进行优化,得到所述第一中间表示信息,包括:
显示多个逻辑调度原语;
当检测到所述多个逻辑调度原语中任一逻辑调度原语的选择操作时,按照所选择的逻辑调度原语,对所述第四中间表示信息的执行逻辑进行优化,得到所述第一中间表示信息。
可选地,所述对所述第四中间表示信息的计算调度进行优化,得到所述第一中间表示信息,包括:
显示多个逻辑调度原语;
当检测到所述多个逻辑调度原语中任一逻辑调度原语的选择操作时,按照所选择的逻辑调度原语,对所述第四中间表示信息的执行逻辑进行优化,得到所述第一中间表示信息。
另一方面,提供了一种算子的可执行代码的生成装置,该装置包括:
获取模块,用于获取所输入的算子的第一中间表示信息,所述第一中间表示信息用于描述所述算子的计算逻辑;
第一生成模块,用于通过一个或者多个计算功能单元将所述算子的第一中间表示信息进行表达映射,以生成所述算子的第二中间表示信息,所述第二中间表示信息用于描述由所述计算功能单元和若干控制流组成的计算逻辑,所述计算功能单元为预先配置的在不同类型的多个硬件平台中具有共性计算功能的最小计算单元,所述计算功能单元的颗粒度比所述算子小;
第二生成模块,用于根据所述第二中间表示信息和所述算子所应用的目标硬件平台的类型,生成所述算子在所述目标硬件平台上的可执行代码,所述目标硬件平台为所述多个硬件平台中的其中一个。
可选地,对于任一计算功能单元,所述计算功能单元为预配置的计算核接口,所述计算核接口在不同类型的多个硬件平台中通用,但在不同类型的多个硬件平台中调用不同的逻辑代码来实现;
所述第二生成模块,包括:
转换子模块,用于将所述第二中间表示信息转换成平台优化代码;
第一获取子模块,用于根据所述目标硬件平台的类型,获取所述第二中间表示信息中的每个计算核接口在所述目标硬件平台上所能调用的逻辑代码;
替换子模块,用于将所述平台优化代码中包含的计算核接口部分替换成相应计算核接口在所述目标硬件平台上所能调用的逻辑代码,以将所述第二中间表示信息编译成所述算子在所述目标硬件平台上的可执行代码。
可选地,对于任一计算功能单元,所述计算功能单元为预配置的计算核接口,所述计算核接口在不同类型的多个硬件平台中通用,但在不同类型的多个硬件平台中调用不同的逻辑代码来实现;
所述第二生成模块,包括:
转换子模块,用于将所述第二中间表示信息转换成平台优化代码;
第一获取子模块,用于根据所述目标硬件平台的类型,获取所述第二中间表示信息中的每个计算核接口在所述目标硬件平台上所能调用的逻辑代码;
替换子模块,用于将所述平台优化代码中包含的计算核接口部分替换成相应计算核接口在所述目标硬件平台上所能调用的逻辑代码,以将所述第二中间表示信息编译成所述算子在所述目标硬件平台上的可执行代码。
可选地,所述第一优化子模块具体用于:
如果所述目标硬件平台的类型属于参考类型集合中的一个类型,则获取目标数据流调度模板,所述目标数据流调度模板用于描述所述算子的数据流调度过程;
通过所述目标数据流调度模板对所述第三中间表示信息进行修改;
显示多个数据流调度原语;
当检测到所述多个数据流调度原语中任一数据流调度原语的选择操作时,按照所选择的数据流调度原语,对修改后所述第三中间表示信息的数据流调度进行优化,得到所述第四中间表示信息。
可选地,所述第一优化子模块还用于:
从所述第三中间表示信息中,获取所述算子的输入数据的大小和输出数据的大小;
如果所述输入数据的大小和所述输出数据的大小中的至少一个小于第一参考阈值,则获取输入数据和输出数据不并行的数据流调度模板作为所述目标数据流调度模板。
可选地,所述第二优化子模块具体用于:
显示多个逻辑调度原语;
当检测到所述多个逻辑调度原语中任一逻辑调度原语的选择操作时,按照所选择的逻辑调度原语,对所述第四中间表示信息的执行逻辑进行优化,得到所述第一中间表示信息。
可选地,所述第一生成模块,包括:
映射子模块,用于通过一个或者多个计算功能单元将所述算子的第一中间表示信息进行表达映射,得到第五中间表示信息;
第三优化子模块,用于对所述第五中间表示信息的数据流调度进行优化,得到第六中间表示信息;
第四优化子模块,用于对所述第六中间表示信息的计算调度进行优化,得到所述第二中间表示信息。
另一方面,提供了一种算子的可执行代码的生成装置,所述装置包括处理器、通信接口、存储器和通信总线;
其中,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信;
所述存储器用于存放计算机程序;
所述处理器用于执行所述存储器上所存放的程序,以实现前述提供算子的可执行代码的生成方法。
另一方面,提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现前述提供的算子的可执行代码的生成方法的步骤。
本申请实施例提供的技术方案至少可以带来如下有益效果:
由于计算功能单元为预先配置的在不同类型的多个硬件平台中具有共性计算功能的最小计算单元,且计算功能单元的颗粒度比算子小,因此,不同类型的多个硬件平台可以共用一个计算功能单元。这样,在获取到所输入的算子的第一中间表示信息后,可以通过一个或者多个计算功能单元将算子的第一中间表示信息进行表达映射,以生成算子的第二中间表示信息,并根据第二中间表示信息和目标硬件平台的类型,生成算子在目标硬件平台上的可执行代码。由此可见,对于不同类型的硬件平台,可以共用算子的第一中间表示信息和第二中间表示信息,从而在同一个算子应用于不同类型的硬件平台时,不需要分别生成第一中间表示信息和第二中间表示信息,可以直接按照具有硬件平台的类型生成可执行代码,从而提高了算子的开发效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种计算机设备的结构示意图;
图2是本申请实施例提供的另一种计算机设备的结构示意图;
图3是本申请实施例提供的一种算子的可执行代码的生成方法流程图;
图4是本申请实施例提供的一种参数寻优的方法流程图;
图5是本申请实施例提供的一种算子的计算调度优化的方法流程图;
图6是本申请实施例提供的一种第二中间表示信息示意图;
图7是本申请实施例提供的另一种第二中间表示信息示意图;
图8是本申请实施例提供的一种算子的可执行代码的生成装置的结构示意图;
图9是本申请实施例提供的一种算子的可执行代码的生成计算机设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在对本申请实施例进行详细的解释说明之前,先对本申请实施例涉及的术语以及执行主体予以介绍。
首先,对本申请实施例涉及的术语进行解释。
算子:一种数据处理操作,一般指计算密集型的数据处理操作,如神经网络中卷积、池化操作等,图像处理算法中均值滤波、高斯滤波操作等。
算子的计算表达:也称为算子的逻辑表达,用于描述算子的计算逻辑,也即是,描述算子需要完成的任务,以及算子的输入和输出等,与具体硬件平台无关。
算子的计算调度:描述算子在具体硬件平台是如何完成算子计算逻辑的,比如,为了获得更高的算子执行效率,会对算子做优化操作,如数据分块、循环展开、向量化等,这些优化操作就是算子在具体平台的实现过程,称为调度。调度是指对程序做的一系列变换,主要针对程序中的循环操作,如循环展开、向量化,其不改变程序的语义。调度的主要目的是产生高效率运行的算子优化代码。
中间表示:又叫中间语言、中间代码,是一个在计算机行业中广泛使用的术语,它指的是抽象计算机语言的各种形式,在中间表示中,一段程序可以被表达,但是不专用于任何特定的处理器,也不打算在任何特定的处理器上直接执行。
代码生成:将中间表示信息编译成硬件平台可识别的硬件指令或代码。
抽象语法树:是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。
其次,对本申请实施例涉及的执行主体进行介绍。
本申请实施例提供的方法可以应用于计算机设备中,也即是,通过计算机设备可以生成算子的可执行代码。该计算机设备可以为是任何一种可与用户通过键盘、触摸板、触摸屏、语音交互或手写设备等一种或多种方式进行人机交互的电子产品,例如PC(PersonalComputer,个人计算机)、PPC(Pocket PC,掌上电脑)、平板电脑等等。
图1是本申请实施例提供的一种计算机设备的结构示意图。如图1所示,该计算机设备可以包括算子接口层101、算子计算表达与优化层102、硬件抽象层103和代码生成层104。
算子接口层101包括一系列常用的算子接口,比如,深度学习网络算子接口、图像处理算子接口、张量运算算子接口等。这些算子接口中通常包括算子的名称、算子的参数以及算子的数据类型等等。其中,算子的参数可以为输入数据的大小和输出数据的大小等。
算子计算表达与优化层102直接与用户进行交互,为用户提供逻辑描述的开发方式,常用的开发方式包括但不限于常用的计算接口、领域专用语言、通用语言等等。其中,常用的计算接口可以包括加、减、乘、除等一系列基础的计算接口。领域专用语言可以为Halide语言或TVM的张量描述语言等。通用语言可以为Python语言或C语言等。
用户可以通过算子计算表达与优化层102从算子接口层101中获取该算子的名称以及算子的参数,并根据该算子的名称以及算子的参数,按照算子计算表达与优化层102提供的开发方式编写算子的逻辑表达。之后,算子计算表达与优化层102可以将用户编写的逻辑表达的语言转换为中间语言,从而得到算子的中间表示信息,该中间表示信息是指未进行优化的中间表示信息。其中,算子的逻辑表达用于描述算子的计算逻辑。
算子计算表达与优化层102还可以与用户进行交互,通过提供的数据流调度原语和计算调度原语,对算子的中间表示信息进行调度优化。
硬件抽象层103用于存储多个计算功能单元。在一些实施例中,每个计算功能单元为预配置的计算核接口,计算核接口在不同类型的多个硬件平台中通用,但在不同类型的多个硬件平台中调用不同的逻辑代码来实现。也即是,一个计算核接口对应多个不同的逻辑代码,该多个不同的逻辑代码与多个不同类型的硬件平台一一对应。
代码生成层104用于通过硬件抽象层103提供的多个计算功能单元中的一个或多个计算功能单元,对算子的中间表示信息进行表达映射。之后,可以根据表达映射后的中间表示信息和目标硬件平台的类型,生成算子在目标硬件平台上的可执行代码。其中,目标硬件平台可以为硬件平台1到硬件平台N中的任一硬件平台。
需要说明的是,在本申请实施例中,算子计算表达与优化层102得到算子的中间表示信息之后,可以对算子的中间表示信息进行调度优化,进而代码生成层104对调度优化后的中间表示信息进行表达映射,从而生成算子在目标硬件平台上的可执行代码。当然,算子计算表达与优化层102得到算子的中间表示信息之后,代码生成层104可以对未调度优化的中间表示信息进行表达映射,再由算子计算表达与优化层102对表达映射后的中间表示信息进行调度优化,从而通过调度优化后的中间表示信息生成算子在目标硬件平台上的可执行代码。也即是,本申请实施例对算子的中间表示信息的调度优化的步骤与表达映射的步骤的先后顺序不作限定,可以先调度优化后表达映射,也可以先表达映射后调度优化。
基于上述描述,硬件抽象层103提供的计算核接口在不同类型的多个硬件平台中通用,但在不同类型的多个硬件平台中调用不同的逻辑代码来实现。以先调度优化后表达映射为例,如图2所示,算子计算表达与优化层102包括算子计算表达模块和算子调度优化模块,计算表达模块生成的中间表示信息以及算子调度优化模块生成的中间表示信息可以在不同类型的多个硬件平台中通用。而当在具体的硬件平台上使用时,代码生成层104可以根据该硬件平台的特性,生成仅适用于该硬件平台的可执行代码,也即是,可执行代码是根据相应硬件平台的特性生成的,不能在多个硬件平台中通用。例如,硬件平台1和硬件平台2可共用算子计算表达与优化层102生成的中间表示信息,之后,代码生成层104可以根据算子计算表达与优化层102生成的中间表示信息以及硬件平台1的特性生成硬件平台1的可执行代码,根据算子计算表达与优化层102生成的中间表示信息以及硬件平台2的特性生成硬件平台2的可执行代码,且硬件平台1的可执行代码仅适用于硬件平台1,硬件平台2的可执行代码仅适用于硬件平台2。
值得注意的是,图2只是用来示例性说明上述内容,实际上也是包括算子接口层101和硬件抽象层103的,只是图2中未示出。
接下来对本申请实施例提供的算子的可执行代码的生成方法进行介绍。
图3是本申请实施例提供的一种算子的可执行代码的生成方法的流程图,该方法可以应用于计算机设备中。如图3所示,该方法包括以下步骤:
步骤301:获取所输入的算子的第一中间表示信息,第一中间表示信息用于描述算子的计算逻辑。
由于第一中间表示信息用于描述算子的计算逻辑,且第一中间表示信息可以在不同类型的多个硬件平台上复用,也即是,本申请实施例实现了第一中间表示信息与具体硬件平台的硬件特性的解耦。因此,在本申请实施例中,计算机设备可以事先生成并存储该算子的第一中间表示信息。当需要生成该算子在某硬件平台上的可执行代码时,可以获取存储的第一中间表示信息。当然,计算机设备也可以不事先生成该算子的第一中间表示信息,而在需要生成该算子在某硬件平台上的可执行代码时,再生成该算子的第一中间表示信息。
在本申请实施例中,第一中间表示信息可以为调度优化后的中间表示信息,也可以为未进行调度优化的中间表示信息。当第一中间表示信息为调度优化后的中间表示信息时,计算机设备可以按照下述的步骤(1)-步骤(3)的方法生成第一中间表示信息。
步骤(1):获取算子的第三中间表示信息,第三中间表示信息是指未进行优化的中间表示信息。
计算机设备可以获取算子的名称以及算子的参数,之后,获取用户根据算子的名称和算子的参数输入的逻辑表达,并将获取到的逻辑表达的语言转换为中间语言,从而得到算子的第三中间表示信息。
其中,算子的逻辑表达用于描述算子的计算逻辑,也即是,描述算子需要完成的任务,以及算子的输入和输出。中间语言是指能够转换为各种计算机语言的语言,通过中间语言表示的程序,不专用于任何特定的处理器,也不在任何特定的处理器上直接执行。
在一种可能的情况下,计算机设备获取到的算子的逻辑表达是通过使用多个计算接口构建的,之后,计算机设备可以将使用计算接口构建的算子的逻辑表达转换为中间语言,得到算子的第三中间表示信息。
需要说明的是,计算机设备中存储有多个计算接口,计算接口是屏蔽细节的通用接口,适用于任何类型的硬件平台。计算接口通常用于指示一些基础的数学操作,如加、减、乘、除等操作,且一个计算接口用于指示一个操作。基于此,用户可以通过使用这多个计算接口,构建算子的逻辑表达。
在另一种可能的情况下,计算机设备获取到的算子的逻辑表达是通过通用语言来描述的,例如C语言或Python语言等,之后,计算机设备可以将通过通用语言描述的算子的逻辑表达转换为中间语言,得到算子的第三中间表示信息。
需要说明的是,基于上述描述,第一中间表示信息可以为未进行调度优化的中间表示信息,这样,可以将第三中间表示信息作为第一中间表示。
在本申请实施例中,中间表示信息的调度优化可以分为数据流调度优化和计算调度优化。
数据流调度优化是根据硬件平台的特性来完成中间表示信息的数据流调度,这里的数据流,是指被处理或处理后的数据在各硬件单元间的流动。比如,在DSP(DigitalSignal Processing,数字信号处理)硬件平台上的数据流流向为:数据从DDR(Double DataRate,双倍速率同步动态随机存储器)中经过DMA(Direct Memory Access,直接内存存取)搬入DSP片内缓存,DSP计算单元从片内缓存读取数据,对数据进行处理,并将处理结果写回片内缓存。片内缓存中的数据再经过DMA搬出至DDR。根据DSP硬件平台的数据流特性对数据流调度进行优化,以使数据搬运和数据计算并行工作,隐藏数据搬运带来的延迟,从而获得更好的运行效率。
计算调度优化是根据硬件平台的特性,使用调度原语来明确指定算子的具体执行过程,以便获得最优的运行效率。调度原语是对常用手工优化方法(比如循环展开UROLL、循环分块TILE)的抽象,其通过改变抽象语法树来完成算子的效率优化。
接下来通过步骤(2)和步骤(3)分别对数据流调度优化和计算调度优化的方式进行介绍。
步骤(2):对第三中间表示信息的数据流调度进行优化,得到第四中间表示信息。
在获得算子的第三中间表示信息后,如果目标硬件平台的类型属于参考类型集合中的一个类型,计算机设备可以获取目标数据流调度模板,目标数据流调度模板用于描述算子的数据流调度过程。计算机设备获取目标数据流调度模板后,可以根据目标数据流调度模板对第三中间表示信息进行修改。之后,显示多个数据流调度原语;当检测到多个数据流调度原语中任一数据流调度原语的选择操作时,按照所选择的数据流调度原语,对修改后的第三中间表示信息的数据流调度进行优化,得到第四中间表示信息。
基于上述描述,数据流调度模板用于描述算子的数据流调度过程,也即是,数据流调度模板用于描述算子的数据流的流向。由于在不同的硬件平台上,算子的数据流的流向可能不同,但是,通过逻辑表达的中间表示信息中是没有这些逻辑的,所以就需要按照数据流调度模板对逻辑表达的中间表示信息进行修改。比如,有的硬件平台需要将数据迁移至片内进行处理,这样,就需要在逻辑表达的中间表示信息中增加具有将数据搬移至片内的逻辑。因此,在确定目标数据流调度模板之后,可以根据目标数据流调度模板对第三中间表示信息进行修改。
需要说明的是,参考类型集合中可以包括多个类型,该多个类型是指支持数据流调度的硬件平台的类型。也即是,只有类型属于参考类型集合的硬件平台在处理数据时,才进行数据流调度。
在本申请实施例中,计算机设备可以通过两种可能的实现方式来获取目标数据流调度模板。接下来分别对这两种可能的实现方式进行说明。
第一种可能的实现方式,计算机设备可以从第三中间表示信息中,获取算子的输入数据的大小和输出数据的大小。如果输入数据的大小和输出数据的大小中的至少一个小于第一参考阈值,则获取输入数据和输出数据不并行的数据流调度模板作为目标数据流调度模板。
其中,第一参考阈值为计算机设备中预先存储的一个数值,用于在获取数据流调度模板时,指示数据大小的临界值。
由于第三中间表示信息是通过将算子的逻辑表达进行转换得到的,而算子的逻辑表达中包括算子的输入数据的大小和输出数据的大小,因此,第三中间表示信息中也包括算子的输入数据的大小和输出数据的大小,故可以从第三中间表示信息中,获取到算子的输入数据的大小和输出数据的大小。
进一步地,如果算子的输入数据的大小和输出数据的大小均等于或大于第一参考阈值,则获取输入数据和输出数据并行的数据流调度模板作为目标数据流调度模板。
需要说明的是,在本申请实施例中,计算机设备可以存储有两种类型的数据流调度模板,一种是输入数据和输出数据并行的数据流调度模板,另一种是输入数据和输出数据不并行的数据流调度模板。基于此,计算机设备可以根据获得的算子的输入数据的大小和输出数据的大小,从这两种数据流调度模板中获取目标数据流调度模板。
另外,本申请实施例中,不仅可以包括上述两种类型的数据流调度模板,还可以包括其他类型的数据流调度模板,比如,输入数据和计算并行的数据流模板、输入、输出数据和计算并行的数据流模板等等。
示例性地,对于ARM(Advanced RISC Machines,微处理器)平台,则使用默认数据流模板,即不做特别处理。对于GPU(Graphics Processing Unit,图形处理器)平台,则使用输入数据和计算并行的数据流模板。对于DSP平台,或ASIC(Application SpecificIntegrated Circuit,特定用途集成电路)平台,则使用输入、输出数据和计算并行的数据流模板。
值得注意的是,计算机设备中可能存储有输入数据和输出数据并行的多个数据流调度模板,以及输入数据和输出数据不并行的多个数据流调度模板。在输入数据的大小和输出数据的大小中的至少一个小于第一参考阈值的情况下,计算机设备可以显示输入数据和输出数据不并行的多个数据流调度模板,当检测到显示的任一数据流调度模板的选择操作时,可以将所选择的数据流调度模板作为目标数据流调度模板。同理,在输入数据的大小和输出数据的大小均等于或大于第一参考阈值的情况下,计算机设备可以显示输入数据和输出数据并行的多个数据流调度模板,当检测到显示的任一数据流调度模板的选择操作时,可以将所选择的数据流调度模板作为目标数据流调度模板。
其中,上述选择操作是用户从显示的数据流调度模板中选择目标数据流调度模板的操作。也即是,在计算机设备存储输入数据和输出数据并行的多个数据流调度模板,以及输入数据和输出数据不并行的多个数据流调度模板的情况下,可以由用户从中选择一个数据流调度模板作为目标数据流调度模板。
需要说明的是,由于算子在运行的过程中,需要不断的对输入数据和输出数据进行处理,因此,算子的输入数据和输出数据的大小会影响算子的运行效率,并且使用不合理的数据流调度模板还会给数据搬移的过程带来延迟。例如,当算子的输入数据和输出数据中存在至少一个过大时,如果采用输入数据和输出数据不并行的数据流调度模板,则不能同时并行的处理输入数据和输出数据,而处理一个数据需要的时间较长,这样会导致算子的运行效率较低。基于此,可以通过算子的输入数据和输出数据的大小,确定算子使用的目标数据流调度模板。
第二种可能的实现方式,计算机设备可以显示多个数据流调度模板。当检测到多个数据流调度模板中任一数据流调度模板的选择操作时,可以将所选择的数据流调度模板作为目标数据流调度模板。
在第二种可能的实现方式中,可以不用考虑输入数据的大小和输出数据的大小,完全由用户从该多个数据流调度模板中,选择一个数据流调度模板作为目标数据流调度模板。
在本申请实施例中,计算机设备中存储有多个数据流调度原语,一个数据流调度原语用于指示一个优化方法。在通过上述两种可能的实现方式获取到目标数据流调度模板,并按照目标数据流调度模板对第三中间表示信息进行修改后,计算机设备可以显示一个数据流调度窗口,该窗口中包括该多个数据流调度原语。之后,计算机设备可以检测数据流调度窗口中是否有多个数据流调度原语中任一数据流调度源语的选择操作。当检测到针对任一数据流调度源语的选择操作时,获取所选择的数据流调度原语,按照该数据流调度原语所指示的优化方法对修改后的第三中间表示信息的数据流调度进行优化,得到第四中间表示信息。
示例性地,在获取到目标数据调度模板,并按照目标数据流调度模板对第三中间表示信息进行修改后,计算机设备可以显示数据流调度窗口,该数据流调度窗口中显示有DoubleBuffer数据流调度原语和RingBuffer数据流调度原语。当计算机设备检测到针对于DoubleBuffer数据流调度原语的选择操作时,可以按照DoubleBuffer数据流调度原语所指示的优化方法对修改后的第三中间表示信息的数据流调度进行优化,得到第四中间表示信息。
其中,根据每个数据流调度原语所指示的优化方法对修改后的第三中间表示信息中的数据流调度的优化,是在修改后的第三中间表示信息的语法树上进行的。语法树是修改后的第三中间表示信息在计算机设备中的数据结构,当计算机设备获得修改后的第三中间表示信息时,会生成修改后的第三中间表示信息的语法树。之后,根据数据流调度原语所指示的优化方法将修改后的第三中间表示信息的语法树进行修改,可以得到第四中间表示信息,第四中间表示信息的语法树是修改后的第三中间表示信息的语法树修改后得到的语法树。
示例性地,假设选择出两个数据流调度原语,一个是用来对数据的移动过程进行优化的,另一个是用来对数据的并行计算过程进行优化的,因此,根据选择出的数据流调度原语对修改后的第三中间表示信息进行数据流调度优化之后,可以实现数据移动和计算并行的功能,来减少由于数据移动所带来的延迟,从而获得更好的运行效率。
在本申请实施例中,数据流调度优化的过程是通过数据流调度原语来实现的,对于一个数据流调度原语,这个数据流调度原语可能会对应多个不同的调度参数,也即是,这个数据流调度原语会对应一组可选参数。在一些实施例中,可以从多个不同的调度参数中选择一个调度参数。但是,在数据流调度原语的调度参数不同时,后续生成的可执行代码可能也会不同,所以,在另一些实施例中,可以按照参数寻优的方式,从该多个调度参数中确定一个调度参数。接下来,对参数寻优的过程进行介绍。
作为一种示例,对于选择出的至少一个数据流调度原语来说,计算机设备可以获取每个数据流调度原语对应的一组调度参数。将该至少一个数据流调度原语对应的调度参数进行组合,得到多个参数组合,每个参数组合包括至少一个调度参数,该至少一个调度参数与选择出的至少一个数据流调度原语一一对应。之后,计算机设备可以按照目标硬件平台的约束条件,将该多个参数组合中的无效参数组合过滤掉,保留有效参数组合。从有效参数组合中选择一个参数组合,根据选择出的参数组合,生成平台优化代码。将该平台优化代码编译成平台可执行程序。将平台可执行程序发送到目标硬件平台上,由目标硬件平台运行,获得算子的运行效率,也即是,选择出的参数组合对应的算子运行效率。重复上述方法,直至所有的有效参数组合都确定出对应的算子运行效率。之后,选择算子运行效率最高的一个参数组合,将这个参数组合中的调度参数赋值给对应的数据流调度原语,从而按照赋值后的数据流调度原语对修改后的第三中间表示信息进行数据流调度优化,得到第四中间表示信息。
需要说明的是,如果按照目标硬件平台的约束条件,将该多个参数组合中的无效参数组合过滤掉之后,只有一个有效参数组合,那么,可以直接将这个有效参数组合中的调度参数赋值给对应的数据流调度原语。如果过滤后剩余多个有效参数组合,那么,可以上述方法确定出算子运行效率最高的一个参数组合。
当目标硬件平台的约束条件不同时,无效参数组合和有效参数组合的确定方式也会不同。比如,当目标硬件平台的约束条件为目标硬件平台的片内内存大小时,可以将需要的内存过大而无法实现的参数组合确定为无效参数组合,将需要的内存较小的参数组合确定为有效参数组合。本申请实施例对此不作限定。
接下来通过图4对上述参数寻优的过程进行介绍。如图4所示,计算机设备可以获取至少一个数据流调度原语中每个数据流调度原语对应的多个调度参数,并将获取的调度参数进行组合,得到多个参数组合,也可以称为一个参数空间,这个参数空间中包括至少一个数据流调度原语对应的调度参数的所有组合情况。之后,按照目标硬件平台的约束条件,过滤掉该多个参数组合中的无效参数组合,得到一个或多个有效参数组合,也可以称为有效参数空间。从有效参数空间中选择一个有效参数组合。根据这个有效参数组合生成平台优化代码,并将生成的平台优化代码进行编译,得到该算子在目标硬件平台上的可执行代码。之后,计算机设备将该算子的可执行代码发送至目标硬件平台,目标硬件平台会运行该算子的可执行代码,并记录运行效率,然后将运行效率返回给计算机设备。计算机设备接收到该运行效率后,可以将运行效率与这个有效参数组合对应进行存储。接下来,计算机设备判断有效参数空间中的有效参数组合是否已被遍历完,如果是,结束操作,如果否,则从有效参数空间中重新选择一个有效参数组合,返回重新执行上述过程。直至有效参数空间中的有效参数组合均已被遍历完之后,选择运行效率最高的一个有效参数组合。
需要说明的是,上述是通过遍历完所有的有效参数组合之后,选择运行效率最高的一个有效参数组合。在另一些实施例中,在每确定出一个运行效率之后,可以将该运行效率与参考运行效率进行比较,如果该运行效率大于参考运行效率,那么可以直接将该运行效率对应的一个参数组合作为最终确定的一个参数组合,赋值给至少一个数据流调度原语。如果该运行效率不大于参考运行效率,那么可以继续遍历其他的有效参数组合,直至确定出运行效率大于参考运行效率的一个参数组合即可。但是,在某些情况下,可能所有的运行效率都不会大于参考运行效率,此时,可以选择最高运行效率对应的一个参数组合。
步骤(3):对第四中间表示信息的计算调度进行优化,得到第一中间表示信息。
在得到第四中间表示信息后,计算机设备可以显示多个逻辑调度原语;当检测到多个逻辑调度原语中任一逻辑调度原语的选择操作时,按照所选择的逻辑调度原语,对第四中间表示信息的执行逻辑进行优化,得到第一中间表示信息。也即是,对第四中间表示信息中的计算过程进行优化,得到第一中间表示信息。
在本申请实施例中,计算机设备中存储有多个逻辑调度原语。因此,在得到第四中间表示信息后,计算机设备可以显示多个逻辑调度原语。之后,可以由用户从该多个逻辑调度原语中选择一个或多个逻辑调度原语,计算机设备可以通过用户选择的逻辑调度原语对第四中间表示信息的执行逻辑进行优化,进而明确算子的具体执行过程,得到第一中间表示信息。
其中,逻辑调度原语为常用的手工优化方法的抽象,常用的手工优化方法主要是对于循环操作进行的,例如循环切分、循环合并、循环分块、循环展开、循环顺序调整等,可以将这些常用的手工优化抽象为多个逻辑调度原语,一个逻辑调度原语用于指示一个优化方法。
在一些实施例中,计算机设备可以显示一个逻辑调度窗口,该逻辑调度窗口中包括多个逻辑调度原语。之后,计算机设备可以检测逻辑调度窗口中是否有针对多个逻辑调度原语中任一逻辑调度原语的选择操作。当检测到针对任一逻辑调度原语的选择操作时,获取所选择的逻辑调度原语,按照该逻辑调度原语所指示的优化方法对第四中间表示信息的语法树进行修改,之后,可以得到第一中间表示信息。
需要说明的是,一个完整的算子计算过程可能包括一个或多个计算子过程,每一个计算子过程中的计算调度的优化可以通过逻辑调度原语来实现,不同的计算子过程之间的计算调度的优化也可以通过逻辑调度原语来实现。
可选地,对于同一个算子,计算机设备可以多次显示逻辑调度窗口,用户每次选择的逻辑调度原语可以不同,这样,计算机设备可以依次通过用户选择的逻辑调度原语,对算子的第四中间表示信息的语法树进行修改,从而可以得到第一中间表示信息。
作为一种示例,如图5所示,可以将常用的手工优化方法进行抽象,得到多个逻辑调度原语,一个逻辑调度原语用于指示一个优化方法。之后,计算机设备可以检测针对多个逻辑调度原语中逻辑调度原语的选择操作,当检测到针对逻辑调度原语的选择操作时,获取所选择的逻辑调度原语,从而得到逻辑调度原语集合,例如,检测到了针对TILE(循环切分)、UROLL(循环展开)、FUSE(循环合并)、REORDER(循环顺序调整)等逻辑调度原语的选择操作,此时,逻辑调度原语集合中包括TILE、UROLL、FUSE、REORDER等。这样,通过逻辑调度原语集合中包括的TILE、UROLL、FUSE、REORDER等逻辑调度原语分别对多个计算子过程进行优化,以优化第四中间表示的计算调度,从而得到第一中间表示信息。
在本申请实施例中,计算调度优化的过程是通过逻辑调度原语来实现的,对于一个逻辑调度原语,这个逻辑调度原语可能会对应多个不同的调度参数,也即是,这个逻辑调度原语会对应一组可选参数。在一些实施例中,可以从多个不同的调度参数中选择一个调度参数。但是,在逻辑调度原语的调度参数不同时,后续生成的可执行代码可能也会不同,比如,以矩阵转置的调度原语对应的调度参数为例,假设需要将矩阵A转置得到矩阵B,一种方式是将矩阵A一次性转置,得到矩阵B,也可以将矩阵A分块成多个小块,然后每个小块进行转置,再得到矩阵B。其中,矩阵A分块的个数就是一个调度参数,分块个数会影响转置操作在不同硬件平台上的运行效率。所以,在另一些实施例中,可以按照参数寻优的方式,从该多个调度参数中确定一个调度参数。
其中,对逻辑调度原语的调度参数进行寻优的过程与上述数据流调度原语的调度参数进行寻优的过程类似,本申请实施例对此不再赘述。
步骤302:通过一个或者多个计算功能单元将算子的第一中间表示信息进行表达映射,以生成算子的第二中间表示信息。
其中,第二中间表示信息用于描述由计算功能单元和若干控制流组成的计算逻辑,计算功能单元为预先配置的在不同类型的多个硬件平台中具有共性计算功能的最小计算单元,且计算功能单元的颗粒度比算子小。
基于上述描述,在本申请实施例中,计算机设备可以先对算子的中间表示信息进行调度优化,然后再对调度优化后的中间表示信息进行表达映射,也可以先对算子的中间表示信息进行表达映射,然后再对表达映射后的中间表示进行调度优化。也即是,第一中间表示信息可以为未进行调度优化的中间表示信息,也可以为调度优化后的中间表示信息。
当第一中间表示信息为未进行调度优化的中间表示信息时,对于步骤302,计算机设备可以通过一个或者多个计算功能单元将算子的第一中间表示信息进行表达映射,得到第五中间表示信息,并对第五中间表示信息的数据流调度进行优化,得到第六中间表示信息,之后,对第六中间表示信息的计算调度进行优化,得到第二中间表示信息。
当第一中间表示信息为调度优化后的中间表示信息时,对于步骤302,计算机设备可以通过一个或多个计算功能单元将算子的第一中间表示信息进行表达映射,得到第二中间表示信息。
不管第一中间表示信息是调度优化前的中间表示信息,还是调度优化后的中间表示信息,计算机设备都需要对第一中间表示信息进行表达映射,接下来,对第一中间表示信息进行表达映射的实现过程进行介绍。
在第一种可能的情况下,第一中间表示信息中可能会使用一个或多个计算接口,此时,计算机设备可以识别每个计算接口的计算操作,并从存储的一个或多个计算功能单元中查找是否有与每个计算接口的计算操作相同的计算功能单元。按照这种方法,可以从存储的多个计算功能单元中确定出一个或多个计算功能单元。之后,将第一中间表示信息中的计算接口替换为相应的计算功能单元,从而实现第一中间表示信息的表达映射。
在第二种可能的情况下,第一中间表示信息中没有使用计算接口,此时,计算机设备可以识别第一中间表示信息中的字符。由于描述算子的计算逻辑时,会使用到标识某个计算操作的特殊字符,因此,当计算机设备识别到特殊字符时,可以根据该特殊字符确定计算逻辑的计算操作,之后,从存储的多个计算功能单元中查找是否有与该计算逻辑的计算操作相同的计算功能单元,从而可以从多个计算功能单元中,确定出一个或多个计算功能单元。之后,将第一中间表示信息中的计算接口替换为相应的计算功能单元,从而实现第一中间表示信息的表达映射。
需要说明的是,不同的计算操作,对应不同的特殊字符,且这些计算操作和对应的特殊字符可以事先存储映射关系。这样,计算机设备可以根据该映射关系,识别第一中间表示信息中的计算逻辑对应的特殊字符,进而从存储的多个计算功能单元中,确定与第一中间表示信息包括的计算逻辑的计算操作相同的一个或多个计算功能单元。
在第三种可能的情况下,计算机设备中可以存储有一个计算功能单元匹配模板,该计算功能单元匹配模板中包括多个计算功能单元的逻辑模板,其中,计算功能单元的逻辑模板用于描述计算功能单元的计算操作。基于此,计算机设备可以将计算功能单元匹配模板与第一中间表示信息的语法树中的多个节点表示的计算逻辑进行匹配,以从第一中间表示信息中确定能够匹配上的节点,进而从存储的多个计算功能单元中选择出与这些节点匹配的逻辑模板对应的计算功能单元,得到一个或多个计算功能单元。之后,将第一中间表示信息中的计算接口替换为相应的计算功能单元,从而实现第一中间表示信息的表达映射。
需要说明的是,在本申请实施例中,计算机设备可以在确定出一个计算功能单元后,将第一中间表示信息中与该计算功能单元的计算操作相同的部分内容替换为该计算功能单元。重复前述的步骤,直到所有计算操作相同的计算逻辑均已经替换为相应计算功能单元后即可。当然,计算机设备也可以在确定出一个或多个计算功能单元后,在第一中间表示信息的语法树中,将表示该部分计算操作的节点替换为表示相应计算功能单元的节点。重复前述的步骤,直到所有表示存在计算操作相同的计算逻辑的节点均已经替换为表示相应计算功能单元的节点即可。
示例性地,假设当前的算子为卷积算子CONV,参见图6,计算机设备得到第一中间表示信息后,确定第一中间表示信息中的计算逻辑1与VecTrans(转置)计算功能单元的计算操作相同,计算逻辑2与VecMul(相乘)计算功能单元的计算操作相同,计算逻辑3与VecAdd(相加)计算功能单元的计算操作相同,之后,可以分别将计算逻辑1替换为VecTrans计算功能单元,将计算逻辑2替换为VecMul计算功能单元,将计算逻辑3替换为VecAdd计算功能单元,进而得到表达映射后的中间表示信息601。
在一些实施例中,对于一个或多个计算功能单元中的任一计算功能单元,该计算功能单元为预配置的计算核接口,且计算核接口在不同类型的多个硬件平台中通用,但在不同类型的多个硬件平台中调用不同的逻辑代码来实现。其中,该计算核接口是屏蔽硬件平台的细节,通过将不同类型的多个硬件平台的相应功能进行抽象后得到的。这样,不同类型的多个硬件平台可以共用一套计算核接口。也即是,计算功能单元可以向上层软件模块提供一个通用的计算核接口,该计算核接口可以在多个不同类型的硬件平台的软件模块中复用。
并且,由于计算核接口在不同类型的多个硬件平台中,通过调用不同的逻辑代码来实现,因此,计算核接口还对应有多个逻辑代码,该多个逻辑代码与多个硬件平台的类型一一对应,每个逻辑代码是根据相应类型的硬件平台的硬件特性生成。通过相应类型的硬件平台的指令细节,生成计算核在该类型的硬件平台上的具体实现代码。后续当调用计算核接口,在具体硬件平台中实现该计算核接口的功能时,可以根据具体硬件平台的类型,使用与该具体硬件平台对应的逻辑代码来实现。
例如,量化计算核接口:
VecQuantize(Tensor a,List*args)
该量化计算核接口为一个屏蔽了硬件细节的通用接口。量化计算核接口的功能为根据args参数对Tensor a进行量化。调用量化计算核接口后,在具体硬件平台中实现量化计算核接口的功能时,可以根据具体硬件平台的类型,使用与该具体硬件平台对应的逻辑代码来实现。由于计算功能单元只向上层软件模块提供一个通用的计算核接口,因此,多个逻辑代码对于上层软件模块是不可见的。
再例如,归约计算核接口:
VecRSum(Tensor a,Axis b)
VecRMin(Tensor a,Axis b)
VecRMax(Tensor a,Axis b)
VecRExp(Tensor a,Axis b)
VecRLog(Tensor a,Axis b)
该归约计算核接口为一个屏蔽了硬件细节的通用接口。其中,归约计算核接口VecRSum的功能为沿着b轴对Tensor a进行累加,VecRMin和VecRMax的功能分别为取b轴上Tensor a的最小值、最大值,VecRExp的功能为取b轴上Tensor a以exp为底的指数函数值,VecRLog的功能为取b轴上Tensor a的对数函数值。调用归约计算核接口后,在具体硬件平台中实现归纳计算核接口的功能时,可以根据具体硬件平台的类型,使用与该具体硬件平台对应的逻辑代码来实现。由于计算功能单元只向上层软件模块提供一个通用的计算核接口,因此,多个逻辑代码对于上层软件模块是不可见的。
又例如,排列计算核接口:
VecReshape(Tensor a,Shape b)
VecConcat(Tensor a,Axis b)
VecReverse(Tensor a)
VecTrans(Tensor a)
该排列计算核接口为一个屏蔽了硬件细节的通用接口。其中,排列计算核接口VecTrans的功能为转置,VecReverse的功能为反向,VecConcat的功能为连接,VecReshape的功能为调整矩阵的行数、列数、维数。调用排列计算核接口后,在具体硬件平台中实现排列计算核接口的功能时,可以根据具体硬件平台的类型,使用与该具体硬件平台对应的逻辑代码来实现。由于计算功能单元只向上层软件模块提供一个通用的计算核接口,因此,多个逻辑代码对于上层软件模块是不可见的。
需要说明的是,对第五中间表示信息的数据流调度进行优化,得到第六中间表示信息的具体实现方法可以参考前述步骤301中步骤(2),对第六中间表示信息的计算调度进行优化,得到第二中间表示信息的具体实现方法可以参考前述步骤301中步骤(3),本申请实施例在此不再赘述。
基于上述描述,计算机设备可以先对算子的中间表示信息进行调度优化,然后再对调度优化后的中间表示信息进行表达映射,也可以先对算子的中间表示信息进行表达映射,然后再对表达映射后的中间表示进行调度优化。也即是,第一中间表示信息可以为未进行调度优化的中间表示信息,也可以为调度优化后的中间表示信息。当第一中间表示信息为未进行调度优化的中间表示信息,也即是,计算机设备先对算子的中间表示信息进行表达映射,然后再对表达映射后的中间表示进行调度优化,在这种情况下,计算机设备对第一中间表示信息进行表达映射之后,可能会存在多种实现方式。比如,如图7所示,对于CONV(卷积)算子,在确定CONV算子的第一中间表示信息后,对CONV算子的第一中间表示信息进行表达映射之后,可能存在三种实现方式,第一种是通过CONV计算核接口(粗粒度计算核接口)来实现的,第二种是通过VecTrans、VecMul、VecAdd等细粒度计算核接口来实现的,第三种是通过Winograd(快速卷积)、VecMul等细粒度计算核接口来实现的。
对于该多种实现方式中的每种实现方式,均可以按照上述数据流调度优化和计算调度优化的方式进行优化,比如,将图7中的三种实现方式作为三个调度优化分支,每个调度优化分支都可以通过上述数据流调度优化和计算调度优化的方式进行优化,这样,可以生成三个第二中间表示信息。由于按照每个第二中间表示信息生成可执行代码,并在目标硬件平台上运行之后,都可以得到一个运行效率,这样,可以选择运行效率最高的一个第二中间表示信息,然后执行下述的步骤303,从而得到最终确定的可执行代码。
需要说明的是,计算核接口可以分为粗粒度的计算核接口和细粒度的计算核接口,通过不同粒度的计算核接口的组合,可以实现一个算子的表达映射,所以,对于一个算子来说,进行表达映射之后,可能会存在多种实现方式。
步骤303:根据第二中间表示信息和算子所应用的目标硬件平台的类型,生成算子在目标硬件平台上的可执行代码。
在一些实施例中,生成算子的第二中间表示信息之后,可以根据第二中间表示信息和目标硬件平台的类型,按照下述步骤(1)-步骤(3)生成算子在目标硬件平台上的可执行代码。
步骤(1):将第二中间表示信息转换成平台优化代码。
由于第二中间表示是通过将第一中间表示信息中的部分计算逻辑替换为相应计算功能单元,并通过数据流调度和逻辑调度优化后得到的,而第一中间表示信息可以被不同类型的硬件平台共用,这样,第二中间表示信息也可以被不同类型的硬件平台共用。因此,计算机设备可以根据目标硬件平台的硬件特性,将第二中间表示转换为目标硬件平台可编译和识别的平台优化代码。
步骤(2):根据目标硬件平台的类型,获取第二中间表示信息中的每个计算核接口在目标硬件平台上所能调用的逻辑代码。
在一些实施例中,由于计算核接口对应有多个逻辑代码,且该多个逻辑代码与多个硬件平台的类型一一对应,也即是,可以事先存储硬件平台的类型与逻辑代码的映射关系。这样,计算机设备可以根据目标硬件平台的类型,从计算核接口对应的多个逻辑代码中,选择与目标硬件平台的类型存在映射关系的逻辑代码。
步骤(3):将平台优化代码中包含的计算核接口部分替换成相应计算核接口在目标硬件平台上所能调用的逻辑代码,以将第二中间表示信息编译成算子在目标硬件平台上的可执行代码。
在本申请实施例中,计算机设备获取第二中间表示信息中的每个计算核接口在目标硬件平台上所能调用的逻辑代码后,可以在平台优化代码中确定第二中间表示信息中每个计算核接口的对应部分,并将该部分替换为确定的相应计算核接口的逻辑代码。之后,计算机设备可以对替换后的平台优化代码进行编译,从而得到目标硬件平台的可执行代码。
在本申请实施例中,由于计算功能单元为预先配置的在不同类型的多个硬件平台中具有共性计算功能的最小计算单元,且计算功能单元的颗粒度比算子小,因此,不同类型的多个硬件平台可以共用一个计算功能单元。这样,在获取到所输入的算子的第一中间表示信息后,可以通过一个或者多个计算功能单元将算子的第一中间表示信息进行表达映射,以生成算子的第二中间表示信息,并根据第二中间表示信息和目标硬件平台的类型,生成算子在目标硬件平台上的可执行代码。由此可见,对于不同类型的硬件平台,可以共用算子的第一中间表示信息和第二中间表示信息,从而解决了算子的调度优化与硬件平台的硬件特性耦合较深的问题。之后,在同一个算子应用于不同类型的硬件平台时,不需要分别进行调度优化以及生成第二中间表示信息,从而提高了算子的开发效率。并且计算功能单元为预配置的计算核接口,计算核接口包括与多个硬件平台的类型一一对应的多个逻辑代码,当生成目标硬件平台的可执行代码时,可以根据目标硬件平台的类型,直接使用相应的逻辑代码,使得用户的工作量减少。
参见图8,本申请实施例提供了一种算子的可执行代码的生成装置800,该算子的可执行代码的生成装置可以应用于计算机设备中,该装置800包括:
获取模块801,用于获取所输入的算子的第一中间表示信息,第一中间表示信息用于描述算子的计算逻辑;
第一生成模块802,用于通过一个或者多个计算功能单元将算子的第一中间表示信息进行表达映射,以生成算子的第二中间表示信息,第二中间表示信息用于描述由计算功能单元和若干控制流组成的计算逻辑,计算功能单元为预先配置的在不同类型的多个硬件平台中具有共性计算功能的最小计算单元,计算功能单元的颗粒度比算子小;
第二生成模块803,用于根据第二中间表示信息和算子所应用的目标硬件平台的类型,生成算子在目标硬件平台上的可执行代码,目标硬件平台为多个硬件平台中的其中一个。
可选地,对于任一计算功能单元,计算功能单元为预配置的计算核接口,计算核接口在不同类型的多个硬件平台中通用,但在不同类型的多个硬件平台中调用不同的逻辑代码来实现;
第二生成模块803,包括:
转换子模块,用于将第二中间表示信息转换成平台优化代码;
第一获取子模块,用于根据目标硬件平台的类型,获取第二中间表示信息中的每个计算核接口在目标硬件平台上所能调用的逻辑代码;
替换子模块,用于将平台优化代码中包含的计算核接口部分替换成相应计算核接口在目标硬件平台上所能调用的逻辑代码,以将第二中间表示信息编译成算子在目标硬件平台上的可执行代码。
可选地,获取模块801,包括:
第二获取子模块,用于获取算子的第三中间表示信息,第三中间表示信息是指未进行优化的中间表示信息;
第一优化子模块,用于对第三中间表示信息的数据流调度进行优化,得到第四中间表示信息;
第二优化子模块,用于对第四中间表示信息的计算调度进行优化,得到第一中间表示信息。
可选地,第一优化子模块具体用于:
如果目标硬件平台的类型属于参考类型集合中的一个类型,则获取目标数据流调度模板,目标数据流调度模板用于描述算子的数据流调度过程;
通过目标数据流调度模板对第三中间表示信息进行修改;
显示多个数据流调度原语;
当检测到多个数据流调度原语中任一数据流调度原语的选择操作时,按照所选择的数据流调度原语,对修改后第三中间表示信息的数据流调度进行优化,得到第四中间表示信息。
可选地,第一优化子模块还用于:
从第三中间表示信息中,获取算子的输入数据的大小和输出数据的大小;
如果输入数据的大小和输出数据的大小中的至少一个小于第一参考阈值,则获取输入数据和输出数据不并行的数据流调度模板作为目标数据流调度模板。
可选地,第二优化子模块具体用于:
显示多个逻辑调度原语;
当检测到多个逻辑调度原语中任一逻辑调度原语的选择操作时,按照所选择的逻辑调度原语,对第四中间表示信息的执行逻辑进行优化,得到第一中间表示信息。
可选地,第一生成模块802,包括:
映射子模块,用于通过一个或者多个计算功能单元将算子的第一中间表示信息进行表达映射,得到第五中间表示信息;
第三优化子模块,用于对第五中间表示信息的数据流调度进行优化,得到第六中间表示信息;
第四优化子模块,用于对第六中间表示信息的计算调度进行优化,得到第二中间表示信息。
综上所述,在本申请实施例中,由于计算功能单元为预先配置的在不同类型的多个硬件平台中具有共性计算功能的最小计算单元,且计算功能单元的颗粒度比算子小,因此,不同类型的多个硬件平台可以共用一个计算功能单元。这样,在获取到所输入的算子的第一中间表示信息后,可以通过一个或者多个计算功能单元将算子的第一中间表示信息进行表达映射,以生成算子的第二中间表示信息,并根据第二中间表示信息和目标硬件平台的类型,生成算子在目标硬件平台上的可执行代码。由此可见,对于不同类型的硬件平台,可以共用算子的第一中间表示信息和第二中间表示信息,从而解决了算子的调度优化与硬件平台的硬件特性耦合较深的问题。之后,在同一个算子应用于不同类型的硬件平台时,不需要分别进行调度优化以及生成第二中间表示信息,从而提高了算子的开发效率。并且计算功能单元为预配置的计算核接口,计算核接口包括与多个硬件平台的类型一一对应的多个逻辑代码,当生成目标硬件平台的可执行代码时,可以根据目标硬件平台的类型,直接使用相应的逻辑代码,使得用户的工作量减少。
需要说明的是:上述实施例提供的算子的可执行代码的生成装置在生成算子的可执行代码时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的算子的可执行代码的生成方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图9是根据一示例性实施例示出的一种算子的可执行代码的生成计算机设备900的结构框图。其中,该计算机设备900可以是笔记本电脑、台式电脑等。
通常,计算机设备900包括有:处理器901和存储器902。
处理器901可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器901可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器901也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器901可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器901还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器902可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器902还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器902中的非暂态的计算机可读存储介质用于存储至少一个指令,其中,该至少一个指令用于被处理器901所执行以实现本申请中方法实施例提供的算子的可执行代码的生成方法。
在一些实施例中,计算机设备900还可选包括有:外围设备接口903和至少一个外围设备。处理器901、存储器902和外围设备接口903之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口903相连。具体地,外围设备包括:射频电路904、显示屏905、摄像头组件906、音频电路907、定位组件908和电源909中的至少一种。
外围设备接口903可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器901和存储器902。在一些实施例中,处理器901、存储器902和外围设备接口903被集成在同一芯片或电路板上;在一些其他实施例中,处理器901、存储器902和外围设备接口903中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路904用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路904通过电磁信号与通信网络以及其他通信设备进行通信。射频电路904将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路904包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路904可以通过至少一种无线通信协议来与其它计算机设备进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路904还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏905用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏905是触摸显示屏时,显示屏905还具有采集在显示屏905的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器901进行处理。此时,显示屏905还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏905可以为一个,设置计算机设备900的前面板;在另一些实施例中,显示屏905可以为至少两个,分别设置在计算机设备900的不同表面或呈折叠设计;在再一些实施例中,显示屏905可以是柔性显示屏,设置在计算机设备900的弯曲表面上或折叠面上。甚至,显示屏905还可以设置成非矩形的不规则图形,也即异形屏。显示屏905可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light-EmittingDiode,有机发光二极管)等材质制备。需要说明的是,在本申请实施例中,当该计算机设备900为横屏计算机设备时,该计算机设备900的显示屏的宽高比大于1,例如,该计算机设备900的显示屏的宽高比可以为16:9或4:3。当该计算机设备900为竖屏计算机设备时,则该计算机设备900的显示屏的宽高比小于1,例如,该计算机设备900的显示屏的宽高比可以为9:18或3:4等。
摄像头组件906用于采集图像或视频。可选地,摄像头组件906包括前置摄像头和后置摄像头。通常,前置摄像头设置在计算机设备的前面板,后置摄像头设置在计算机设备的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件906还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路907可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器901进行处理,或者输入至射频电路904以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在计算机设备900的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器901或射频电路904的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路907还可以包括耳机插孔。
定位组件908用于定位计算机设备900的当前地理位置,以实现导航或LBS(Location Based Service,基于位置的服务)。定位组件908可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统或欧盟的伽利略系统的定位组件。
电源909用于为计算机设备900中的各个组件进行供电。电源909可以是交流电、直流电、一次性电池或可充电电池。当电源909包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
在一些实施例中,计算机设备900还包括有一个或多个传感器190。该一个或多个传感器190包括但不限于:加速度传感器911、陀螺仪传感器912、压力传感器913、指纹传感器914、光学传感器915以及接近传感器916。
加速度传感器911可以检测以计算机设备900建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器911可以用于检测重力加速度在三个坐标轴上的分量。处理器901可以根据加速度传感器911采集的重力加速度信号,控制显示屏905以横向视图或纵向视图进行用户界面的显示。加速度传感器911还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器912可以检测计算机设备900的机体方向及转动角度,陀螺仪传感器912可以与加速度传感器911协同采集用户对计算机设备900的3D动作。处理器901根据陀螺仪传感器912采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器913可以设置在计算机设备900的侧边框和/或显示屏905的下层。当压力传感器913设置在计算机设备900的侧边框时,可以检测用户对计算机设备900的握持信号,由处理器901根据压力传感器913采集的握持信号进行左右手识别或快捷操作。当压力传感器913设置在显示屏905的下层时,由处理器901根据用户对显示屏905的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器914用于采集用户的指纹,由处理器901根据指纹传感器914采集到的指纹识别用户的身份,或者,由指纹传感器914根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器901授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器914可以被设置计算机设备900的正面、背面或侧面。当计算机设备900上设置有物理按键或厂商Logo时,指纹传感器914可以与物理按键或厂商Logo集成在一起。
光学传感器915用于采集环境光强度。在一个实施例中,处理器901可以根据光学传感器915采集的环境光强度,控制显示屏905的显示亮度。具体地,当环境光强度较高时,调高显示屏905的显示亮度;当环境光强度较低时,调低显示屏905的显示亮度。在另一个实施例中,处理器901还可以根据光学传感器915采集的环境光强度,动态调整摄像头组件906的拍摄参数。
接近传感器916,也称距离传感器,通常设置在计算机设备900的前面板。接近传感器916用于采集用户与计算机设备900的正面之间的距离。在一个实施例中,当接近传感器916检测到用户与计算机设备900的正面之间的距离逐渐变小时,由处理器901控制显示屏905从亮屏状态切换为息屏状态;当接近传感器916检测到用户与计算机设备900的正面之间的距离逐渐变大时,由处理器901控制显示屏905从息屏状态切换为亮屏状态。
也即是,本申请实施例不仅提供了一种计算机设备,包括处理器和用于存储处理器可执行指令的存储器,其中,处理器被配置为执行图3所示的算子的可执行代码的生成方法,而且,本申请实施例还提供了一种计算机可读存储介质,该存储介质内存储有计算机程序,该计算机程序被处理器执行时可以实现图3所示的算子的可执行代码的生成方法。
本申请实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述图3所示实施例提供的算子的可执行代码的生成方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (14)

1.一种算子的可执行代码的生成方法,其特征在于,所述方法包括:
获取所输入的算子的第一中间表示信息,所述第一中间表示信息用于描述所述算子的计算逻辑;
通过一个或者多个计算功能单元将所述算子的第一中间表示信息进行表达映射,以生成所述算子的第二中间表示信息,所述第二中间表示信息用于描述由所述计算功能单元和若干控制流组成的计算逻辑,所述计算功能单元为预先配置的在不同类型的多个硬件平台中具有共性计算功能的最小计算单元,所述计算功能单元的颗粒度比所述算子小;
根据所述第二中间表示信息和所述算子所应用的目标硬件平台的类型,生成所述算子在所述目标硬件平台上的可执行代码,所述目标硬件平台为所述多个硬件平台中的其中一个。
2.如权利要求1所述的方法,其特征在于,对于任一计算功能单元,所述计算功能单元为预配置的计算核接口,所述计算核接口在不同类型的多个硬件平台中通用,但在不同类型的多个硬件平台中调用不同的逻辑代码来实现;
所述根据所述第二中间表示信息和所述算子所应用的目标硬件平台的类型,生成所述算子在所述目标硬件平台上的可执行代码,包括:
将所述第二中间表示信息转换成平台优化代码;
根据所述目标硬件平台的类型,获取所述第二中间表示信息中的每个计算核接口在所述目标硬件平台上所能调用的逻辑代码;
将所述平台优化代码中包含的计算核接口部分替换成相应计算核接口在所述目标硬件平台上所能调用的逻辑代码,以将所述第二中间表示信息编译成所述算子在所述目标硬件平台上的可执行代码。
3.如权利要求1或2所述的方法,其特征在于,所述获取所输入的算子的第一中间表示信息,包括:
获取所述算子的第三中间表示信息,所述第三中间表示信息是指未进行优化的中间表示信息;
对所述第三中间表示信息的数据流调度进行优化,得到第四中间表示信息;
对所述第四中间表示信息的计算调度进行优化,得到所述第一中间表示信息。
4.如权利要求3所述的方法,其特征在于,所述对所述第三中间表示信息的数据流调度进行优化,得到第四中间表示信息,包括:
如果所述目标硬件平台的类型属于参考类型集合中的一个类型,则获取目标数据流调度模板,所述目标数据流调度模板用于描述所述算子的数据流调度过程;
通过所述目标数据流调度模板对所述第三中间表示信息进行修改;
显示多个数据流调度原语;
当检测到所述多个数据流调度原语中任一数据流调度原语的选择操作时,按照所选择的数据流调度原语,对修改后所述第三中间表示信息的数据流调度进行优化,得到所述第四中间表示信息。
5.如权利要求4所述的方法,其特征在于,所述获取目标数据流调度模板之前,还包括:
从所述第三中间表示信息中,获取所述算子的输入数据的大小和输出数据的大小;
所述获取目标数据流调度模板,包括:
如果所述输入数据的大小和所述输出数据的大小中的至少一个小于第一参考阈值,则获取输入数据和输出数据不并行的数据流调度模板作为所述目标数据流调度模板。
6.如权利要求3所述的方法,其特征在于,所述对所述第四中间表示信息的计算调度进行优化,得到所述第一中间表示信息,包括:
显示多个逻辑调度原语;
当检测到所述多个逻辑调度原语中任一逻辑调度原语的选择操作时,按照所选择的逻辑调度原语,对所述第四中间表示信息的执行逻辑进行优化,得到所述第一中间表示信息。
7.如权利要求1或2所述的方法,其特征在于,所述通过一个或者多个计算功能单元将所述算子的第一中间表示信息进行表达映射,以生成所述算子的第二中间表示信息,包括:
通过一个或者多个计算功能单元将所述算子的第一中间表示信息进行表达映射,得到第五中间表示信息;
对所述第五中间表示信息的数据流调度进行优化,得到第六中间表示信息;
对所述第六中间表示信息的计算调度进行优化,得到所述第二中间表示信息。
8.一种算子的可执行代码的生成装置,其特征在于,所述装置包括:
获取模块,用于获取所输入的算子的第一中间表示信息,所述第一中间表示信息用于描述所述算子的计算逻辑;
第一生成模块,用于通过一个或者多个计算功能单元将所述算子的第一中间表示信息进行表达映射,以生成所述算子的第二中间表示信息,所述第二中间表示信息用于描述由所述计算功能单元和若干控制流组成的计算逻辑,所述计算功能单元为预先配置的在不同类型的多个硬件平台中具有共性计算功能的最小计算单元,所述计算功能单元的颗粒度比所述算子小;
第二生成模块,用于根据所述第二中间表示信息和所述算子所应用的目标硬件平台的类型,生成所述算子在所述目标硬件平台上的可执行代码,所述目标硬件平台为所述多个硬件平台中的其中一个。
9.如权利要求8所述的装置,其特征在于,对于任一计算功能单元,所述计算功能单元为预配置的计算核接口,所述计算核接口在不同类型的多个硬件平台中通用,但在不同类型的多个硬件平台中调用不同的逻辑代码来实现;
所述第二生成模块,包括:
转换子模块,用于将所述第二中间表示信息转换成平台优化代码;
第一获取子模块,用于根据所述目标硬件平台的类型,获取所述第二中间表示信息中的每个计算核接口在所述目标硬件平台上所能调用的逻辑代码;
替换子模块,用于将所述平台优化代码中包含的计算核接口部分替换成相应计算核接口在所述目标硬件平台上所能调用的逻辑代码,以将所述第二中间表示信息编译成所述算子在所述目标硬件平台上的可执行代码。
10.如权利要求8或9所述的装置,其特征在于,所述获取模块,包括:
第二获取子模块,用于获取所述算子的第三中间表示信息,所述第三中间表示信息是指未进行优化的中间表示信息;
第一优化子模块,用于对所述第三中间表示信息的数据流调度进行优化,得到第四中间表示信息;
第二优化子模块,用于对所述第四中间表示信息的计算调度进行优化,得到所述第一中间表示信息。
11.如权利要求10所述的装置,其特征在于,所述第一优化子模块具体用于:
如果所述目标硬件平台的类型属于参考类型集合中的一个类型,则获取目标数据流调度模板,所述目标数据流调度模板用于描述所述算子的数据流调度过程;
通过所述目标数据流调度模板对所述第三中间表示信息进行修改;
显示多个数据流调度原语;
当检测到所述多个数据流调度原语中任一数据流调度原语的选择操作时,按照所选择的数据流调度原语,对修改后所述第三中间表示信息的数据流调度进行优化,得到所述第四中间表示信息。
12.如权利要求11所述的装置,其特征在于,所述第一优化子模块还用于:
从所述第三中间表示信息中,获取所述算子的输入数据的大小和输出数据的大小;
如果所述输入数据的大小和所述输出数据的大小中的至少一个小于第一参考阈值,则获取输入数据和输出数据不并行的数据流调度模板作为所述目标数据流调度模板。
13.如权利要求10所述的装置,其特征在于,所述第二优化子模块具体用于:
显示多个逻辑调度原语;
当检测到所述多个逻辑调度原语中任一逻辑调度原语的选择操作时,按照所选择的逻辑调度原语,对所述第四中间表示信息的执行逻辑进行优化,得到所述第一中间表示信息。
14.如权利要求8或9所述的装置,其特征在于,所述第一生成模块,包括:
映射子模块,用于通过一个或者多个计算功能单元将所述算子的第一中间表示信息进行表达映射,得到第五中间表示信息;
第三优化子模块,用于对所述第五中间表示信息的数据流调度进行优化,得到第六中间表示信息;
第四优化子模块,用于对所述第六中间表示信息的计算调度进行优化,得到所述第二中间表示信息。
CN202010427353.5A 2020-05-19 2020-05-19 算子的可执行代码的生成方法及装置 Active CN113687816B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010427353.5A CN113687816B (zh) 2020-05-19 2020-05-19 算子的可执行代码的生成方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010427353.5A CN113687816B (zh) 2020-05-19 2020-05-19 算子的可执行代码的生成方法及装置

Publications (2)

Publication Number Publication Date
CN113687816A CN113687816A (zh) 2021-11-23
CN113687816B true CN113687816B (zh) 2023-09-01

Family

ID=78576018

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010427353.5A Active CN113687816B (zh) 2020-05-19 2020-05-19 算子的可执行代码的生成方法及装置

Country Status (1)

Country Link
CN (1) CN113687816B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115309407B (zh) * 2022-10-12 2023-03-31 中国移动通信有限公司研究院 一种可实现算力抽象的方法和系统
CN116932092B (zh) * 2023-09-18 2024-01-09 之江实验室 一种算子调用代码自动生成的方法、装置、介质及设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013107819A1 (fr) * 2012-01-17 2013-07-25 Thales Procédé d'optimisation de traitement parallèle de données sur une plateforme matérielle.
US9639528B1 (en) * 2016-01-29 2017-05-02 Sap Se Translation-based visual design
RU2685985C1 (ru) * 2018-06-08 2019-04-23 Борис Германович Терехин Устройство для построения программируемых цифровых микропроцессорных систем
CN109725899A (zh) * 2019-01-04 2019-05-07 中国银行股份有限公司 数据流式处理方法及装置
CN110764744A (zh) * 2018-07-25 2020-02-07 赛灵思公司 用于神经网络计算的中间表示生成方法和装置
CN110908641A (zh) * 2019-11-27 2020-03-24 中国建设银行股份有限公司 基于可视化的流计算平台、方法、设备和存储介质
CN111047022A (zh) * 2018-10-12 2020-04-21 中科寒武纪科技股份有限公司 一种计算装置及相关产品

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006243839A (ja) * 2005-02-28 2006-09-14 Toshiba Corp 命令生成装置及び命令生成方法
US8015543B1 (en) * 2007-01-10 2011-09-06 The Mathworks, Inc. Hardware specific code generation
FR3008505B1 (fr) * 2013-07-10 2017-03-03 Thales Sa Procede d'optimisation de traitement parallele de donnees sur une plateforme materielle

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013107819A1 (fr) * 2012-01-17 2013-07-25 Thales Procédé d'optimisation de traitement parallèle de données sur une plateforme matérielle.
US9639528B1 (en) * 2016-01-29 2017-05-02 Sap Se Translation-based visual design
RU2685985C1 (ru) * 2018-06-08 2019-04-23 Борис Германович Терехин Устройство для построения программируемых цифровых микропроцессорных систем
CN110764744A (zh) * 2018-07-25 2020-02-07 赛灵思公司 用于神经网络计算的中间表示生成方法和装置
CN111047022A (zh) * 2018-10-12 2020-04-21 中科寒武纪科技股份有限公司 一种计算装置及相关产品
CN109725899A (zh) * 2019-01-04 2019-05-07 中国银行股份有限公司 数据流式处理方法及装置
CN110908641A (zh) * 2019-11-27 2020-03-24 中国建设银行股份有限公司 基于可视化的流计算平台、方法、设备和存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
粗粒度可重构处理器的配置信息编译及优化技术;金晟;上海交通大学;第1-67页 *

Also Published As

Publication number Publication date
CN113687816A (zh) 2021-11-23

Similar Documents

Publication Publication Date Title
CN107885533B (zh) 管理组件代码的方法及装置
CN108304265B (zh) 内存管理方法、装置及存储介质
CN110262788B (zh) 页面配置信息确定方法、装置、计算机设备及存储介质
CN113127181B (zh) 内存管理方法、装置及存储介质
CN112749362B (zh) 控件创建方法、装置、设备及存储介质
CN112162843A (zh) 工作流执行方法、装置、设备及存储介质
CN113687816B (zh) 算子的可执行代码的生成方法及装置
CN113553039A (zh) 算子的可执行代码的生成方法及装置
CN111897525A (zh) 大数据处理方法及系统
CN111125602B (zh) 页面构建方法、装置、设备和存储介质
CN111459466B (zh) 代码生成方法、装置、设备及存储介质
CN112116690A (zh) 视频特效生成方法、装置及终端
CN111400002B (zh) 应用进程与处理器核绑定方法及终端
CN113867848A (zh) 图形接口的调用方法、装置、设备及可读存储介质
CN111737100A (zh) 数据获取方法、装置、设备及存储介质
CN113469360B (zh) 推理方法及装置
CN112053360A (zh) 图像分割方法、装置、计算机设备及存储介质
WO2022228043A1 (zh) 显示方法、电子设备、存储介质和程序产品
CN112230781B (zh) 字符推荐方法、装置及存储介质
CN113469322B (zh) 确定模型的可执行程序的方法、装置、设备及存储介质
CN111294320B (zh) 数据转换的方法和装置
CN112231619A (zh) 转换方法、装置、电子设备及存储介质
CN112416356A (zh) Json字符串的处理方法、装置、设备及存储介质
CN111596925A (zh) 自动生成代码的方法、装置、计算机设备及介质
CN113010175A (zh) 匿名函数的信息获取方法、装置、设备及可读存储介质

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
GR01 Patent grant
GR01 Patent grant