CN113553039B - 算子的可执行代码的生成方法及装置 - Google Patents
算子的可执行代码的生成方法及装置 Download PDFInfo
- Publication number
- CN113553039B CN113553039B CN202010327958.7A CN202010327958A CN113553039B CN 113553039 B CN113553039 B CN 113553039B CN 202010327958 A CN202010327958 A CN 202010327958A CN 113553039 B CN113553039 B CN 113553039B
- Authority
- CN
- China
- Prior art keywords
- intermediate representation
- representation information
- hardware platform
- optimization
- logic
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 57
- 238000005457 optimization Methods 0.000 claims abstract description 154
- 238000004364 calculation method Methods 0.000 claims description 55
- 230000006870 function Effects 0.000 claims description 51
- 238000012545 processing Methods 0.000 abstract description 15
- 238000011161 development Methods 0.000 abstract description 14
- 230000008569 process Effects 0.000 description 17
- 238000004891 communication Methods 0.000 description 11
- 230000002093 peripheral effect Effects 0.000 description 10
- 230000001133 acceleration Effects 0.000 description 9
- 230000000903 blocking effect Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 7
- 238000004590 computer program Methods 0.000 description 5
- 238000013507 mapping Methods 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 238000012217 deletion Methods 0.000 description 4
- 230000037430 deletion Effects 0.000 description 4
- 229920000508 Vectran Polymers 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 239000000919 ceramic Substances 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000011176 pooling Methods 0.000 description 2
- 238000013139 quantization Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 150000004820 halides Chemical class 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000006641 stabilisation Effects 0.000 description 1
- 238000011105 stabilization Methods 0.000 description 1
- 239000010409 thin film Substances 0.000 description 1
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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种算子的可执行代码的生成方法及装置,属于数据处理领域。在本申请中,计算机设备可以获取算子的第一中间表示信息,之后,从已存储的平台硬件资源配置文件中,获取目标硬件平台的硬件配置信息,进一步确定目标硬件平台支持的优化策略,并根据优化策略,对第一中间表示信息进行优化,得到第二中间表示信息。之后,根据第二中间表示信息和已存储的多个计算核,生成算子在目标硬件平台上的可执行代码。由于计算机设备是根据硬件平台的硬件配置信息确定优化策略,并通过优化策略对第一中间表示信息进行优化,因此,不再需要用户手动的对第一中间表示信息进行优化,降低了算子开发的门槛,也使得开发算子的工作量减小。
Description
技术领域
本申请涉及数据处理领域,特别涉及一种算子的可执行代码的生成方法及装置。
背景技术
算子用于指示一种数据处理操作,比如,神经网络通常包括卷积算子和池化算子,卷积算子用于指示一种卷积操作,池化算子用于指示一种池化操作。为了能够在实际的硬件平台上运行算子,以执行对应的数据处理操作,亟需一种算子的可执行代码的生成方法。
相关技术中,可以将算子的可执行代码的生成过程分为计算表达和计算调度两个独立的步骤。计算表达是通过特定语言描述算子的计算逻辑,也即是,描述算子需要完成的任务,以及算子的输入和输出,之后,将描述算子的计算逻辑的语言转换为中间语言,可以得到算子的中间表示信息。计算调度是指根据目标硬件平台的硬件特性,对算子的中间表示信息进行调度优化,也即是,根据目标硬件平台的硬件特性,确定算子的执行过程,以便算子在目标硬件平台上能够获得最优的运行效率。之后,可以将调度优化后的中间表示信息转换为目标硬件平台可识别的可执行代码。
但是相关技术中,算子的中间表示信息的调度优化过程需要直接与用户进行交互,也即是,需要用户手动开发算子。在这种情况下,用户要理解算子的特性以及平台的特性,才可以进行算子的开发,导致算子的开发门槛过高。并且,对于不同类型的硬件平台,用户需要手动的对算子分别进行调度优化,使得用户的开发工作量巨大。
发明内容
本申请实施例提供了一种算子的可执行代码的生成方法、装置,解决了开发算子时用户手动对算子进行优化,使得开发工作量巨大的问题。所述技术方案如下:
一方面,提供了一种算子的可执行代码的生成方法,所述方法包括:
获取算子的第一中间表示信息,所述第一中间表示信息用于描述所述算子的计算逻辑;
从已存储的平台硬件资源配置文件中,获取目标硬件平台的硬件配置信息;
根据所述硬件配置信息,确定所述目标硬件平台支持的优化策略;
根据所述优化策略,对所述第一中间表示信息的进行优化,得到第二中间表示信息;
根据所述第二中间表示信息和已存储的多个计算核,生成所述算子在目标硬件平台上的可执行代码,所述多个计算核是对不同类型的多个硬件平台的功能进行抽象后得到的。
可选地,所述根据所述硬件配置信息,确定所述目标硬件平台支持的优化策略,包括:
根据所述目标硬件平台的类型,确定所述目标硬件平台支持的多个优化操作,以及所述多个优化操作的执行顺序;
根据所述硬件配置信息,确定所述多个优化操作中每个优化操作对应的优化参数。
可选地,所述根据所述优化策略,对所述第一中间表示信息的进行优化,得到第二中间表示信息,包括:
将所述第一中间表示信息划分为多个子中间表示信息;
根据所述优化策略,对所述多个子中间表示信息分别进行优化;
将优化后的多个子中间表示信息进行组合,得到所述第二中间表示信息。
可选地,所述将所述第一中间表示信息划分为多个子中间表示信息,包括:
确定所述第一中间表示信息中的至少一个特殊节点;
根据所述至少一个特殊节点,将所述第二中间表示信息划分为多个子中间表示信息。
可选地,所述根据所述优化策略,对所述第一中间表示信息的进行优化,得到第二中间表示信息之前,还包括:
确定所述目标硬件平台关于计算逻辑的至少一个配置项;
根据所述至少一个配置项,对所述第一中间表示信息的配置进行优化。
可选地,每个计算核包括一个计算核接口和所述计算核接口对应的多个逻辑代码,所述计算核接口是对所述多个硬件平台的功能进行抽象后得到的通用接口,所述多个逻辑代码与所述多个硬件平台的类型一一对应,每个逻辑代码是针对相应类型的硬件平台的硬件特性生成的;
所述根据所述第二中间表示信息和已存储的多个计算核,生成所述算子在目标硬件平台上的可执行代码,包括:
从所述多个计算核中,确定与所述第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核;
将所述第二中间表示信息中与所述至少一个计算核的功能相同的计算逻辑,替换为针对所述至少一个计算核中相应计算核包括的计算核接口的调用,得到第三中间表示信息;
根据所述目标硬件平台的类型,从所述至少一个计算核中每个计算核包括的多个逻辑代码中,选择与所述目标硬件平台对应的逻辑代码;
根据所述第三中间表示信息和选择出的逻辑代码,生成所述算子在所述目标硬件平台上的可执行代码。
另一方面,提供了一种算子的可执行代码的生成装置,该装置包括:
第一获取模块,用于获取算子的第一中间表示信息,所述第一中间表示信息用于描述所述算子的计算逻辑;
第二获取模块,用于从已存储的平台硬件资源配置文件中,获取目标硬件平台的硬件配置信息;
第一确定模块,用于根据所述硬件配置信息,确定所述目标硬件平台支持的优化策略;
第一优化模块,用于根据所述优化策略,对所述第一中间表示信息的进行优化,得到第二中间表示信息;
生成模块,用于根据所述第二中间表示信息和已存储的多个计算核,生成所述算子在目标硬件平台上的可执行代码,所述多个计算核是对不同类型的多个硬件平台的功能进行抽象后得到的。
可选地,所述第一确定模块具体用于:
根据所述目标硬件平台的类型,确定所述目标硬件平台支持的多个优化操作,以及所述多个优化操作的执行顺序;
根据所述硬件配置信息,确定所述多个优化操作中每个优化操作对应的优化参数。
可选地,所述第一优化模块,包括:
划分子模块,用于将所述第一中间表示信息划分为多个子中间表示信息;
优化子模块,用于根据所述优化策略,对所述多个子中间表示信息分别进行优化;
组合子模块,用于将优化后的多个子中间表示信息进行组合,得到所述第二中间表示信息。
可选地,所述划分子模块具体用于:
确定所述第一中间表示信息中的至少一个特殊节点;
根据所述至少一个特殊节点,将所述第二中间表示信息划分为多个子中间表示信息。
可选地,所述装置还包括:
第二确定模块,用于确定所述目标硬件平台关于计算逻辑的至少一个配置项;
第二优化模块,用于根据所述至少一个配置项,对所述第一中间表示信息的配置进行优化。
可选地,所述第二确定模块具体用于:
显示多个配置项,当基于所述多个配置项检测到选择操作时,将所述选择操作所选择的配置项确定为所述目标硬件平台关于计算逻辑的至少一个配置项;或者,
根据所述目标硬件平台的类型,从存储的平台类型与配置项之间的对应关系中,获取所述目标硬件平台关于计算逻辑的至少一个配置项。
可选地,每个计算核包括一个计算核接口和所述计算核接口对应的多个逻辑代码,所述计算核接口是对所述多个硬件平台的功能进行抽象后得到的通用接口,所述多个逻辑代码与所述多个硬件平台的类型一一对应,每个逻辑代码是针对相应类型的硬件平台的硬件特性生成的;
所述生成模块,包括:
确定子模块,用于从所述多个计算核中,确定与所述第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核;
替换子模块,用于将所述第二中间表示信息中与所述至少一个计算核的功能相同的计算逻辑,替换为针对所述至少一个计算核中相应计算核包括的计算核接口的调用,得到第三中间表示信息;
选择子模块,用于根据所述目标硬件平台的类型,从所述至少一个计算核中每个计算核包括的多个逻辑代码中,选择与所述目标硬件平台对应的逻辑代码;
编译子模块,用于根据所述第三中间表示信息和选择出的逻辑代码,生成所述算子在所述目标硬件平台上的可执行代码。
另一方面,提供了一种算子的可执行代码的生成装置,所述装置包括处理器、通信接口、存储器和通信总线;
其中,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信;
所述存储器用于存放计算机程序;
所述处理器用于执行所述存储器上所存放的程序,以实现前述提供算子的可执行代码的生成方法。
另一方面,提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现前述提供的算子的可执行代码的生成方法的步骤。
另一方面,提供了一种包含指令的计算机程序产品,当所述计算机程序产品在计算机上运行时,使得计算机执行前述提供的算子的可执行代码的生成方法。
本申请实施例提供的技术方案至少可以带来如下有益效果:
由于对第一中间表示信息进行优化得到第二中间表示信息的过程,是通过目标硬件平台支持的优化策略实现的,而该优化策略是根据目标硬件平台的硬件配置信息确定的,因此,对第一中间表示信息的优化过程不需要用户手动实现,使得算子开发的工作量减小。之后,可以根据第二中间表示信息和已存储的多个计算核,生成算子在目标硬件平台上的可执行代码。这样,即使在用户不理解算子的特性以及目标硬件平台的特性的情况下,也可以进行算子的开发,从而降低了算子开发的门槛。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种计算机设备的结构示意图;
图2是本申请实施例提供的一种算子的可执行代码的生成方法流程图;
图3是本申请实施例提供的一种计算核接口示意图;
图4是本申请实施例提供的一种第三中间表示信息示意图;
图5是本申请实施例提供的一种算子的可执行代码的生成装置的结构示意图;
图6是本申请实施例提供的一种算子的可执行代码的生成计算机设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在对本申请实施例进行详细的解释说明之前,先对本申请实施例涉及的应用场景予以介绍。
本申请实施例提供的方法可以应用于计算机设备中,也即是,通过计算机设备可以生成算子的可执行代码。该计算机设备可以为是任何一种可与用户通过键盘、触摸板、触摸屏、语音交互或手写设备等一种或多种方式进行人机交互的电子产品,例如PC(PersonalComputer,个人计算机)、PPC(Pocket PC,掌上电脑)、平板电脑等等。
图1是本申请实施例提供的一种计算机设备的结构示意图。如图1所示,该计算机设备可以包括算子描述层101、算子逻辑表达层102、中间处理层103、硬件抽象层104和代码生成层105。
算子描述层101直接与用户进行交互,用于获取用户编写的算子的逻辑表达。其中,用户编写的算子的逻辑表达是根据从算子逻辑表达层102的算子接口中获取的算子名称以及算子的参数,并按照算子逻辑表达层102提供的开发方式编写算子的逻辑表达。
算子逻辑表达层102用于将算子描述层101获取的用户编写的算子的逻辑表达的语言转换为中间语言,从而得到算子的第一中间表示信息。其中,算子的逻辑表达用于描述算子的计算逻辑。
算子逻辑表达层102中还可以为用户提供逻辑描述的开发方式,常用的开发方式包括但不限于常用的计算接口、领域专用语言、通用语言等等。其中,常用的计算接口可以包括加、减、乘、除、卷积、张量运算等一系列计算接口。领域专用语言可以为Halide语言或TVM的张量描述语言等。通用语言可以为Python语言或C语言等。
中间处理层103用于根据目标硬件平台关于计算逻辑的配置项,对第一中间表示信息的配置进行优化。之后,将配置优化后的第一中间表示信息划分为多个子中间表示信息,再通过获取的目标硬件平台的硬件配置信息,从存储的多个优化策略中确定目标硬件平台支持的优化策略,并根据该优化策略,对多个子中间表示信息分别进行优化,将优化后的多个子中间表示信息进行组合,从而得到第二中间表示信息。
硬件抽象层104用于存储多个计算核,每个计算核包括一个计算核接口以及计算核接口对应的多个逻辑代码,该多个逻辑代码与多个硬件平台的类型一一对应。
代码生成层105用于从硬件抽象层104提供的多个计算核中,确定与第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核。将第二中间表示信息中与该至少一个计算核的功能相同的计算逻辑,替换为针对该至少一个计算核中相应计算核包括的计算核接口的调用,得到第三中间表示信息。之后,可以根据第三中间表示信息和该至少一个计算核中与目标硬件平台对应的逻辑代码,生成算子在目标硬件平台上的可执行代码。
接下来对本申请实施例提供的算子的可执行代码的生成方法进行介绍。
图2是本申请实施例提供的一种算子的可执行代码的生成方法的流程图,该方法可以应用于计算机设备中。如图2所示,该方法包括以下步骤:
步骤201:获取算子的第一中间表示信息。
其中,第一中间表示信息用于描述算子的计算逻辑。
计算机设备可以获取用户按照提供的开发方式编写的算子的逻辑表达,并将获取到的逻辑表达的语言转换为中间语言,从而得到算子的第一中间表示信息。
其中,算子的逻辑表达用于描述算子的计算逻辑,也即是,描述算子需要完成的任务,以及算子的输入和输出。中间语言是指能够转换为各种计算机语言的语言,通过中间语言表示的程序,不专用于任何特定的处理器,也不在任何特定的处理器上直接执行。
在一种可能的情况下,计算机设备获取到的算子的逻辑表达是通过使用多个计算接口构建的,之后,计算机设备可以将使用计算接口构建的算子的逻辑表达转换为中间语言,得到算子的第一中间表示信息。
需要说明的是,计算机设备中存储有多个计算接口,计算接口是屏蔽细节的通用接口,适用于任何类型的硬件平台。计算接口通常用于指示一些基础的数学操作,如加、减、乘、除、卷积。张量运算等操作,且一个计算接口用于指示一个操作。基于此,用户可以通过使用这多个计算接口,构建算子的逻辑表达。
在另一种可能的情况下,计算机设备获取到的算子的逻辑表达是通过通用语言来描述的,例如C语言或Python语言等,之后,计算机设备可以将通过通用语言描述的算子的逻辑表达转换为中间语言,得到算子的第一中间表示信息。
步骤202:从已存储的平台硬件资源配置文件中,获取目标硬件平台的硬件配置信息。
其中,硬件配置信息可以包括是否包含片上缓存、片上缓存的容量、片上缓存用户是否可编程、是否支持DMA、是否支持SIMD指令集等。
平台硬件资源配置文件中可以存储多个不同硬件平台的硬件配置信息,也即是,可以存储硬件平台的类型与硬件配置信息的映射关系。这样,计算机设备可以根据目标硬件平台的类型,从平台硬件资源配置文件中,获取目标硬件平台的硬件配置信息。
需要说明的是,平台硬件资源配置文件中存储的硬件配置信息可以由用户输入,也即是,计算机设备可以显示一个配置窗口,该配置窗口包括多个硬件配置项。之后,可以检测用户在该多个硬件配置项中输入的信息,从而得到一个硬件平台的硬件配置信息。
步骤203:根据硬件配置信息,确定目标硬件平台支持的优化策略。
获取目标硬件平台的硬件配置信息后,计算机设备可以根据目标硬件平台的类型,确定目标硬件平台支持的多个优化操作,以及多个优化操作的执行顺序;根据硬件配置信息,确定多个优化操作中每个优化操作对应的优化参数,从而得到目标硬件平台支持的优化策略。
在一些实施例中,计算机设备可以根据目标硬件平台的类型,获取目标硬件平台对应的优化模板,该优化模板中包括多个优化操作,以及该多个优化操作的执行顺序。之后,根据获取到的硬件配置信息,从优化模板中的多个优化操作中选择目标硬件平台支持的多个优化操作,以及目标硬件平台支持的多个优化操作的执行顺序。之后,计算机设备可以根据硬件配置信息,确定目标硬件平台支持的多个优化操作的优化参数,并将优化参数写入对应的优化操作中,可以得到目标硬件平台支持的优化策略。
需要说明的是,计算机设备中存储有硬件平台的类型与优化模板之间的对应关系,每个优化模板中包括多个优化操作,且多个优化操作的执行顺序是固定的。因此,计算机设备可以根据目标硬件平台的类型,从该对应关系中,获取目标硬件平台对应的优化模板。
另外,由于优化模板包括的多个优化操作通常可以分为第一类优化操作和第二类优化操作,第一类优化操作是与硬件平台配置相关的优化操作,例如读写缓存操作、DMA数据搬运操作、乒乓流水优化操作。第二类优化操作是通用的优化操作,例如循环合并操作、内联计算操作、数据分块操作等。因此,根据获取到的硬件配置信息,从优化模板中的多个优化操作中选择目标硬件平台支持的多个优化操作的实现过程可以为:根据目标硬件平台的硬件配置信息,从优化模块包括的第一类优化操作中,选择目标硬件平台支持的第一类优化操作。然后,将选择的第一类优化操作和优化模板中包括的第二类优化操作作为目标硬件平台支持的优化操作。
示例性地,计算机设备获取的目标硬件平台的硬件配置信息如表1所示,目标硬件平台对应的优化模板如表2所示。可以确定目标硬件平台是A类型的平台,内存容量为256MB、有片上缓存,片上缓存容量为64KB,且片上缓存用户可编程,支持DMA以及SIMD指令集。由于目标硬件平台具有片上缓存,因此可以支持读写缓存操作,由于目标硬件平台具有DMA,因此可以支持DMA数据搬运操作,由于目标硬件平台具有片上缓存和DMA,因此可以支持平台乒乓流水优化操作。这样,可以确定目标硬件平台支持的第一类优化操作为:读写缓存操作、DMA数据搬运操作以及乒乓流水优化操作。之后,将读写缓存操作、DMA数据搬运操作、乒乓流水优化操作、循环合并操作和数据分块操作,确定为目标硬件平台支持的多个优化操作。
表1
表2
由于有的优化操作在执行时需要优化参数,有的优化操作在执行时不需要优化参数,因此,根据硬件配置信息,确定目标硬件平台支持的多个优化操作的优化参数的实现过程可以为:从目标硬件平台支持的多个优化操作中,选择需要优化参数的优化操作,之后,根据硬件配置信息确定选择的这些优化操作的优化参数。
示例性地,继续上述举例,该目标硬件平台支持的多个优化操作中的数据分块操作在执行时需要优化参数。此时,计算机设备可以根据硬件配置信息中的片上缓存容量64KB,以及计算过程中需要8块内存,确定数据分块操作的优化参数为64÷8=8KB,也即是,在进行数据分块操作时可以划分的数据块的大小最大为8KB。
步骤204:根据优化策略,对第一中间表示信息的进行优化,得到第二中间表示信息。
计算机设备确定目标硬件平台支持的优化策略后,可以根据该优化策略,按照下述步骤(1)-步骤(3)对第一中间表示信息进行优化,得到第二中间表示信息。
步骤(1):将第一中间表示信息划分为多个子中间表示信息。
计算机设备可以确定第一中间表示信息中的至少一个特殊节点;根据至少一个特殊节点,将第二中间表示信息划分为多个子中间表示信息。
需要说明的是,计算机设备中预先存储了至少一个特殊节点定义,之后,可以将第一中间表示信息的逻辑树中的多个节点与特殊节点定义进行匹配,将该多个节点中满足特殊节点定义的节点作为特殊节点。
其中,逻辑树是第一中间表示信息在计算机设备中的逻辑结构,当计算机设备获得第一中间表示信息时,可以生成第一中间表示信息的逻辑树,逻辑树中包括多个节点,一个节点表示一个操作。
在一些实施例中,计算机设备中存储的至少一个特殊节点定义为特殊节点的类型,也即是,特殊节点定义可以指示表示什么操作的节点为特殊节点。在这种情况下,计算机设备可以根据每个节点表示的操作,从逻辑树中查找表示的操作与特殊节点定义所指示的操作相同的节点,并将该节点作为特殊节点,这样,可以确定逻辑树中全部的特殊节点。
示例性地,计算机设备中存储了一个特殊节点定义:表示的操作为调用外部函数的节点。之后,计算机设备可以根据每个节点表示的操作,从逻辑树中查找表示的操作为调用外部函数的节点,并将该节点作为特殊节点,这样,可以确定逻辑树中全部的特殊节点。
在另一些实施例中,计算机设备中存储的至少一个特殊节点定义为特殊节点的条件,也即是,特殊节点定义可以指示满足什么条件的节点为特殊节点。在这种情况下,计算机设备可以从逻辑树的多个节点中任意选择一个节点,将该节点与特殊节点定义的条件进行比较,如果该节点满足特殊节点定义指示的条件,可以将该节点作为特殊节点。之后,从逻辑树未选择过的多个节点中重新选择一个节点,继续前述相同的步骤,确定特殊节点,直到逻辑树的多个节点均已经被选择过,此时,可以确定逻辑树中全部的特殊节点。
示例性地,计算机设备中存储了一个特殊节点定义:输入数据的维度大于输出数据的维度的节点。之后,计算机设备可以从逻辑树的多个节点中任意选择一个节点,将该节点的输入数据的维度与输出数据的维度进行比较,如果该节点的输入数据的维度大于输出数据的维度,可以将该节点作为特殊节点。接下来,从逻辑树未选择过的多个节点中重新选择一个节点,继续前述相同的步骤,确定逻辑树中全部的特殊节点。
在确定至少一个特殊节点后,计算机设备可以将该至少一个特殊节点为分界,将逻辑树划分为多个子语法树。也即是,从逻辑树的根节点开始,将逻辑树的根节点与其最近的一个特殊节点之间的逻辑树分支划分为一个子逻辑树,将两个特殊节点之间的逻辑树分支划分为一个子逻辑树,将逻辑树最外层的叶节点与其最近的一个特殊节点之间的逻辑树分支划分为一个子逻辑树。
需要说明的是,由于逻辑树为第一中间表示信息的逻辑树,且每一个节点表示一个操作,也即是,表示一段中间表示信息,因此,将逻辑树划分为多个子逻辑树后,同时也将第一中间表示信息划分为多个子中间表示信息。
步骤(2):根据优化策略,对该多个子中间表示信息分别进行优化。
将第一中间表示信息划分为多个子中间表示信息后,计算机设备可以根据确定的优化策略,分别对多个子中间表示信息进行优化。
在一种可能的情况下,当优化策略中包括循环合并操作时,计算机设备可以根据当前待优化的子中间表示信息的计算逻辑中包含的至少一个操作,确定循环合并操作是否需要执行。如果需要,则对当前待优化的子中间表示信息执行循环合并操作。
示例性地,继续以前述的目标硬件平台为例,如果当前待优化的子中间表示信息的计算逻辑中仅包含加法,则不需要对该子中间表示信息进行循环合并操作。如果当前待优化的子中间表示信息的计算逻辑中包含加法、减法以及乘法,则可以根据循环合并操作对该子中间表示信息进行优化。
在另一种可能的情况下,当优化策略中包括数据分块操作时,计算机设备可以根据硬件配置信息,确定第一参考阈值,该第一参考阈值用于指示数据大小的临界值。之后,可以根据当前待优化的子中间表示信息的计算逻辑中需要处理的数据大小,确定数据分块操作是否需要执行。如果需要,则对当前待优化的子中间表示信息执行数据分块操作。
具体的,可以将当前待优化的子中间表示信息的计算逻辑中输入的数据总大小与第一参考阈值进行比较,当数据大小大于第一参考阈值时,可以将该子中间表示信息按照数据分块操作进行优化。当数据大小小于第一参考阈值时,可以不对该子中间表示信息进行数据分块操作。
需要说明的是,目标硬件平台的硬件配置信息中包括片上缓存容量,而在计算过程中仅需要一个内存块时,计算机设备可以将片上缓存容量确定为第一参考阈值,当然,也可以将小于片上缓存容量的一个数值作为第一参考阈值。
示例性地,继续以前述的目标硬件平台为例,确定每个数据块的大小最大为8KB,也即是,第一参考阈值为8KB。之后,可以将当前待优化的子中间表示信息的计算逻辑中输入的数据总大小与8KB进行比较,当数据总大小大于8KB时,可以将该子中间表示信息按照数据分块操作进行优化。当数据总大小小于8KB时,可以不对该子中间表示信息进行数据分块操作。
基于此,根据优化策略中包括的多个优化操作分别对多个子中间表示信息通过上述相同的方法进行优化后,可以得到优化后的多个子中间表示信息。
需要说明的是,本申请实施例是在子中间表示信息对应的子语法树上,对每一个子中间表示信息进行优化的。计算机设备可以根据优化策略中包括的每一个优化操作,将子中间表示信息的子语法树进行修改,得到修改后的子语法树,也即是,优化后的子中间表示信息。这样,多个子语法树分别进行修改后,可以得到优化后的多个子中间表示信息。
其中,语法树为第一中间表示在计算机设备中的数据结构,当计算机设备获得第一中间表示信息时,也可以生成第一中间表示信息的语法树,语法树中包括多个节点,一个节点用于表示一个语句、表达式或变量等。由于前述步骤将第一中间表示信息划分为多个子中间表示信息,因此,第一中间表示信息的语法树也被划分为多个子语法树。
示例性地,子中间表示信息的计算逻辑包括加法,该加法对应的语法为:For(N);C[i]=a[i]+b[i]。则在子中间表示信息的子语法树上,会有for节点,读节点,写节点,加法节点。在该子语法树上对加法进行数据分块操作优化后,可以得到优化后的加法对应的语法为:For(block_number);For(block_size);C=a+b。其中,block_number为数据分块的数目,block_size为数据分块的大小。
步骤(3):将优化后的多个子中间表示信息进行组合,得到第二中间表示信息。
在本申请实施例中,计算机设备得到优化后的多个子中间表示信息后,由于每个子中间表示信息对应一个子语法树,因此,可以根据划分语法树的顺序将优化后的多个子中间表示信息进行排序,并将相邻的每两个子中间表示信息进行组合,多个子中间表示信息两两组合完成后,可以得到优化后的第一中间表示信息,也即是,第二中间表示信息。
可选地,计算机设备根据优化策略,对第一中间表示信息进行优化之前,还可以确定目标硬件平台关于计算逻辑的至少一个配置项。根据至少一个配置项,对第一中间表示信息的配置进行优化。
其中,计算机设备可以通过下述两种不同的方法确定目标硬件平台关于计算逻辑的至少一个配置项。
在一种可能的情况下,计算机设备可以显示多个配置项,当基于多个配置项检测到选择操作时,将选择操作所选择的配置项确定为目标硬件平台关于计算逻辑的至少一个配置项。
也即是,计算机设备中预先存储有多个配置项,在计算机设备获取到算子的第一中间表示信息后,可以显示该多个配置项。之后,由用户从该多个配置项中选择目标硬件平台关于计算逻辑的至少一个配置项。
在另一种可能的情况下,计算机设备可以根据目标硬件平台的类型,从存储的平台类型与配置项之间的对应关系中,获取目标硬件平台关于计算逻辑的至少一个配置项。
需要说明的是,一个配置项对应一种优化方法,因此,在获取到至少一个配置项之后,可以按照该至少一个配置项对应的优化方法,对第一中间表示信息的配置进行优化。另外,根据该至少一个配置项对第一中间表示信息的配置进行优化的方法与算子的计算逻辑无关,是对算子计算逻辑的具体实现过程中的细节的优化,例如中间数据采用的格式、计算执行的顺序等。也即是,该优化不会改变算子的计算逻辑和数据大小。
示例性地,存储的平台类型与配置项之间的对应关系如表3所示,计算机设备获取到目标硬件平台是A类型的平台,可以根据类型A从存储的对应关系中获取A类型平台的每个配置项为:定点运算、数据排布方式为NCWH、加减法中间数据类型为整型、乘除法中间数据类型为整型,之后,可以通过对应的优化方法,对第一中间表示信息的配置进行优化。其中,计算机设备中还存储有每个配置项对应的优化方法,在表3中并未示出。
表3
需要说明的是,由于第一中间表示只用于描述算子的计算逻辑,与目标硬件平台无关,因此,根据目标硬件平台的配置项对第一中间表示信息的配置进行优化后,第一中间表示信息描述的计算逻辑可以转换为与目标硬件平台相关的计算逻辑,这样,根据优化后第一中间表示信息描述的计算逻辑生成的可执行代码在目标硬件平台中运行时可以得到更高的效率。
示例性地,目标硬件平台配置了定点运算,则可以对第一中间表示信息描述的计算逻辑进行优化。例如可以对计算逻辑中的加法操作进行优化,转换得到下述定点运算操作:
i.将原始数据格式转换为中间数据格式;
ii.进行移位统一定点数据量化值;
iii.进行加法操作;
iv.判断当前操作是否为计算逻辑的最后一个操作,如果是最后一个操作,则进行取饱和、数据类型转换操作,将加法结果转换为原始数据格式。
将第一中间表示信息描述的计算逻辑中的加法操作均转换为定点运算操作后,第一中间表示信息描述的计算逻辑与目标硬件平台相关,这样,生成的可执行代码在目标硬件平台中运行时的效率更高。
步骤205:根据第二中间表示信息和已存储的多个计算核,生成算子在目标硬件平台上的可执行代码。
在一些实施例中,得到第二中间表示信息后,可以根据第二中间表示信息和已存储的多个计算核,按照下述步骤(1)-步骤(4)生成算子在目标硬件平台上的可执行代码。
步骤(1):从多个计算核中,确定与第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核。
获得第二中间表示信息后,计算机设备可以将第二中间表示信息与存储的多个计算核进行匹配,确定与第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核。
在一种可能的情况下,第二中间表示信息中可能会使用一个或多个计算接口,此时,计算机设备可以识别每个计算接口实现的功能,并从存储的多个计算核中查找是否有与每个计算接口功能相同的计算核。按照这种方法,可以从该多个计算核中,确定出与第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核。
在另一种可能的情况下,第二中间表示信息中没有使用计算接口,此时,计算机设备可以识别第二中间表示信息中的字符。由于描述算子的计算逻辑时,会使用到标识某个功能的特殊字符,因此,当计算机设备识别到特殊字符时,可以根据该特殊字符确定计算逻辑的功能,之后,从存储的多个计算核中查找是否有与该计算逻辑功能相同的计算核,从而可以从该多个计算核中,确定出与第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核。
需要说明的是,不同的功能,对应不同的特殊字符,且这些功能和对应的特殊字符可以事先存储映射关系。这样,计算机设备可以根据该映射关系,识别第二中间表示信息中的计算逻辑对应的特殊字符,进而从该多个计算核中,确定与第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核。
在又一种可能的情况下,计算机设备中可以存储有一个计算核匹配模板,该计算核匹配模板中包括多个计算核的逻辑模板,其中,计算核的逻辑模板用于描述计算核的计算操作。基于此,计算机设备可以将计算核匹配模板与第二中间表示信息的语法树中的多个节点表示的计算逻辑进行匹配,以从第二中间表示信息中确定能够匹配上的节点,进而将这些节点匹配的逻辑模板对应的计算核确定为与第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核。
每个计算核包括一个计算核接口。该计算核接口是屏蔽硬件平台的细节,通过将不同类型的多个硬件平台的相应功能进行抽象后得到的。这样,不同类型的多个硬件平台可以共用一套计算核接口。也即是,计算核可以向上层软件模块提供一个通用的计算核接口,该计算核接口可以在多个不同类型的硬件平台的软件模块中复用。
每个计算核还包括计算核接口对应的多个逻辑代码,该多个逻辑代码与多个硬件平台的类型一一对应,每个逻辑代码是根据相应类型的硬件平台的硬件特性生成。通过相应类型的硬件平台的指令细节,生成计算核在该类型的硬件平台上的具体实现代码。后续当调用计算核接口,在具体硬件平台中实现该计算核接口的功能时,可以根据具体硬件平台的类型,使用与该具体硬件平台对应的逻辑代码来实现。
示例性地,可以参见图3所示的量化计算核接口,该量化计算核接口为一个屏蔽了硬件细节的通用接口。量化计算核接口的功能为根据args参数对Tensora进行量化。调用量化计算核接口后,在具体硬件平台中实现量化计算核接口的功能时,可以根据具体硬件平台的类型,使用与该具体硬件平台对应的逻辑代码来实现。由于计算核只向上层软件模块提供一个通用的计算核接口,多个逻辑代码对于上层软件模块是不可见的,因此,在图3中并未示出。
步骤(2):将第二中间表示信息中与至少一个计算核的功能相同的计算逻辑,替换为针对至少一个计算核中相应计算核包括的计算核接口的调用,得到第三中间表示信息。
在一种可能的情况下,确定与第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核后,计算机设备可以在第二中间表示信息中将该部分计算逻辑替换为相应计算核的调用。重复前述的步骤,直到所有存在功能相同的计算逻辑均已经替换为相应计算核的调用后,可以得到第三中间表示信息。
在另一种可能的情况下,确定与第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核后,计算机设备可以在第二中间表示信息的语法树中,将表示该部分计算逻辑的节点替换为表示相应计算核的节点。重复前述的步骤,直到所有表示存在功能相同的计算逻辑的节点均已经替换为表示相应计算核的节点,将经过替换的语法树对应的中间表示信息作为第三中间表示信息。
示例性地,假设当前的算子为卷积算子CONV,参见图4,计算机设备得到第二中间表示信息后,确定第二中间表示信息中的计算逻辑1与VecTrans计算核的功能相同,计算逻辑2与VecMul计算核的功能相同,计算逻辑3与VecAdd计算核的功能相同,之后,可以分别将计算逻辑1替换为针对VecTrans计算核包括的计算核接口的调用,将计算逻辑2替换为针对VecMul计算核包括的计算核接口的调用,将计算逻辑3替换为针对VecAdd计算核包括的计算核接口的调用,进而得到第三中间表示信息401。
步骤(3):根据目标硬件平台的类型,从至少一个计算核中每个计算核包括的多个逻辑代码中,选择与目标硬件平台对应的逻辑代码。
在一些实施例中,由于一个计算核包括一个计算核接口和该计算核接口对应的多个逻辑代码,且该多个逻辑代码与多个硬件平台的类型一一对应,也即是,可以事先存储硬件平台的类型与逻辑代码的映射关系。这样,计算机设备可以根据目标硬件平台的类型,从该至少一个计算核中每个计算核包括的多个逻辑代码中,选择与目标硬件平台的类型存在映射关系的逻辑代码。
步骤(4):根据第三中间表示信息和选择出的逻辑代码,生成算子在目标硬件平台上的可执行代码。
由于第三中间表示信息中只包括算子的具体执行过程,而没有算子在执行时需要使用的至少一个参数的具体数值,因此,在一些实施例中,可以先确定该至少一个参数的具体数值,然后将这些具体数值赋值给第三中间表示信息中相应的参数。之后,计算机设备可以将赋值有具体数值的第三中间表示信息和选择出的逻辑代码进行编译,得到该算子在目标硬件平台上的可执行代码。
在一些实施例中,对于第三中间表示信息需要使用的至少一个参数来说,计算机设备可以获取多组数值,每组数值包括至少一个数值,该至少一个数值与至少一个参数一一对应。之后,计算机设备可以从该多组数值中,选择一组数值,将选择出的这组数值包括的至少一个数值赋值给第三中间表示信息需要使用至少一个参数中的相应参数。
作为一种示例,计算机设备可以显示一个参数窗口,用户在该参数窗口中输入多组数值,之后,计算机设备可以获取用户输入的多组数值,并确定该多组数值中的一组或多组无效数值,将一组或多组无效数值删除。如果删除后剩余一组有效数值,那么,可以直接将这组有效数值包括的至少一个数值赋值给第三中间表示信息需要使用至少一个参数中的相应参数。如果删除后剩余多组有效数值,那么,可以从删除后剩余的这多组有效数值中,选择一组数值,将选择出的这组数值包括的至少一个数值赋值给第三中间表示信息需要使用至少一个参数中的相应参数。
其中,计算机设备从用户输入的多组数值中,确定一组无效数值的实现过程可以为:根据目标硬件平台的片内内存大小,从用户输入的多组数值中,确定需要的内存过大而无法实现的一组数值,将确定的这组数值作为一组无效数值。也即是,对于用户输入的一组数值来说,计算机设备可以将这组数值中的每个数值与相应的第二参考阈值进行比较,如果这组数值中存在至少一个数值大于相应的第二参考阈值,那么可以将这组数值确定为无效数值。其中,计算机设备中可以存储至少一个第二参考阈值,该至少一个第二参考阈值与第三中间表示信息中的至少一个参数一一对应,且该至少一个第二参考阈值是根据目标硬件平台的内存大小设置的,也即是,当一组数值中的至少一个数值大于相应第二参考阈值时,通过这组数值生成的可执行代码运行需要的内存大小将会大于目标硬件平台的内存大小。
其中,计算机设备从删除后剩余的这多组有效数值中,选择一组数值的实现过程可以为:计算机设备可以按照一定规则从该多组有效数值中选取一组有效数值,将这组有效数值赋值给第三中间表示信息,将赋值有这组有效数值的第三中间表示信息和选择出的逻辑代码进行编译,得到该算子的可执行代码。之后计算机设备将该算子的可执行代码发送至目标硬件平台,目标硬件平台会运行该算子的可执行代码,并记录运行效率,然后将运行效率返回给计算机设备。计算机设备接收到该运行效率后,判断该运行效率是否大于参考效率,如果该运行效率大于参考效率,则可以将这组有效数值作为第三中间表示信息需要使用的至少一个参数的具体数值。如果该运行效率小于参考效率,则可以返回按照一定规则从多组有效数值中选取一组未被选择过的有效参数,然后继续上述步骤,直至确定出运行效率大于参考效率的一组有效数值为止。
当然,计算机设备也可以按照上述方法,分别确定该多组有效数值对应的运行效率,然后选择运行效率最高的一组有效数值。
需要说明的是,计算机设备预先存储有一个参考效率,该参考效率用于表示满足用户要求的最低运行效率。
在本申请实施例中,由于对第一中间表示信息进行优化得到第二中间表示信息的过程,是通过目标硬件平台支持的优化策略实现的,而该优化策略是根据目标硬件平台的硬件配置信息确定的,因此,对第一中间表示信息的优化过程不需要用户手动实现,使得算子开发的工作量减少。之后,可以根据第二中间表示信息和已存储的多个计算核,生成算子在目标硬件平台上的可执行代码。这样,即使在用户不理解算子的特性以及目标硬件平台的特性的情况下,也可以进行算子的开发,从而降低了算子开发的门槛。同时,计算核包括与多个硬件平台的类型一一对应多个逻辑代码,当生成目标硬件平台的可执行代码时,可以根据目标硬件平台的类型,直接使用计算核中该类型对应的逻辑代码,进一步的使得用户的工作量减少。
参见图5,本申请实施例提供了一种算子的可执行代码的生成装置500,该算子的可执行代码的生成装置可以应用于计算机设备中,该装置500包括:
第一获取模块501,用于获取算子的第一中间表示信息,第一中间表示信息用于描述算子的计算逻辑;
第二获取模块502,用于从已存储的平台硬件资源配置文件中,获取目标硬件平台的硬件配置信息;
第一确定模块503,用于根据硬件配置信息,确定目标硬件平台支持的优化策略;
第一优化模块504,用于根据优化策略,对第一中间表示信息的进行优化,得到第二中间表示信息;
生成模块505,用于根据第二中间表示信息和已存储的多个计算核,生成算子在目标硬件平台上的可执行代码,多个计算核是对不同类型的多个硬件平台的功能进行抽象后得到的。
可选地,第一确定模块具体用于:
根据目标硬件平台的类型,确定目标硬件平台支持的多个优化操作,以及多个优化操作的执行顺序;
根据硬件配置信息,确定多个优化操作中每个优化操作对应的优化参数。
可选地,第一优化模块,包括:
划分子模块,用于将第一中间表示信息划分为多个子中间表示信息;
优化子模块,用于根据优化策略,对多个子中间表示信息分别进行优化;
组合子模块,用于将优化后的多个子中间表示信息进行组合,得到第二中间表示信息。
可选地,划分子模块具体用于:
确定第一中间表示信息中的至少一个特殊节点;
根据至少一个特殊节点,将第二中间表示信息划分为多个子中间表示信息。
可选地,装置还包括:
第二确定模块,用于确定目标硬件平台关于计算逻辑的至少一个配置项;
第二优化模块,用于根据至少一个配置项,对第一中间表示信息的配置进行优化。
可选地,第二确定模块具体用于:
显示多个配置项,当基于多个配置项检测到选择操作时,将选择操作所选择的配置项确定为目标硬件平台关于计算逻辑的至少一个配置项;或者,
根据目标硬件平台的类型,从存储的平台类型与配置项之间的对应关系中,获取目标硬件平台关于计算逻辑的至少一个配置项。
可选地,每个计算核包括一个计算核接口和计算核接口对应的多个逻辑代码,计算核接口是对多个硬件平台的功能进行抽象后得到的通用接口,多个逻辑代码与多个硬件平台的类型一一对应,每个逻辑代码是针对相应类型的硬件平台的硬件特性生成的;
生成模块,包括:
确定子模块,用于从多个计算核中,确定与第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核;
替换子模块,用于将第二中间表示信息中与至少一个计算核的功能相同的计算逻辑,替换为针对至少一个计算核中相应计算核包括的计算核接口的调用,得到第三中间表示信息;
选择子模块,用于根据目标硬件平台的类型,从至少一个计算核中每个计算核包括的多个逻辑代码中,选择与目标硬件平台对应的逻辑代码;
编译子模块,用于根据第三中间表示信息和选择出的逻辑代码,生成算子在目标硬件平台上的可执行代码。
综上所述,在本申请实施例中,由于对第一中间表示信息进行优化得到第二中间表示信息的过程,是通过目标硬件平台支持的优化策略实现的,而该优化策略是根据目标硬件平台的硬件配置信息确定的,因此,对第一中间表示信息的优化过程不需要用户手动实现,使得算子开发的工作量减少。之后,可以根据第二中间表示信息和已存储的多个计算核,生成算子在目标硬件平台上的可执行代码。这样,即使在用户不理解算子的特性以及目标硬件平台的特性的情况下,也可以进行算子的开发,从而降低了算子开发的门槛。同时,计算核包括与多个硬件平台的类型一一对应多个逻辑代码,当生成目标硬件平台的可执行代码时,可以根据目标硬件平台的类型,直接使用计算核中该类型对应的逻辑代码,进一步的使得用户的工作量减少。
需要说明的是:上述实施例提供的算子的可执行代码的生成装置在生成算子的可执行代码时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的算子的可执行代码的生成方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图6是根据一示例性实施例示出的一种算子的可执行代码的生成计算机设备600的结构框图。其中,该计算机设备600可以是笔记本电脑、台式电脑等。
通常,计算机设备600包括有:处理器601和存储器602。
处理器601可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器601可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器601也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器601可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器601还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器602可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器602还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器602中的非暂态的计算机可读存储介质用于存储至少一个指令,其中,该至少一个指令用于被处理器601所执行以实现本申请中方法实施例提供的算子的可执行代码的生成方法。
在一些实施例中,计算机设备600还可选包括有:外围设备接口603和至少一个外围设备。处理器601、存储器602和外围设备接口603之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口603相连。具体地,外围设备包括:射频电路604、显示屏605、摄像头组件606、音频电路607、定位组件608和电源609中的至少一种。
外围设备接口603可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器601和存储器602。在一些实施例中,处理器601、存储器602和外围设备接口603被集成在同一芯片或电路板上;在一些其他实施例中,处理器601、存储器602和外围设备接口603中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路604用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路604通过电磁信号与通信网络以及其他通信设备进行通信。射频电路604将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路604包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路604可以通过至少一种无线通信协议来与其它计算机设备进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路604还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏605用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏605是触摸显示屏时,显示屏605还具有采集在显示屏605的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器601进行处理。此时,显示屏605还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏605可以为一个,设置计算机设备600的前面板;在另一些实施例中,显示屏605可以为至少两个,分别设置在计算机设备600的不同表面或呈折叠设计;在再一些实施例中,显示屏605可以是柔性显示屏,设置在计算机设备600的弯曲表面上或折叠面上。甚至,显示屏605还可以设置成非矩形的不规则图形,也即异形屏。显示屏605可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light-EmittingDiode,有机发光二极管)等材质制备。需要说明的是,在本申请实施例中,当该计算机设备600为横屏计算机设备时,该计算机设备600的显示屏的宽高比大于1,例如,该计算机设备600的显示屏的宽高比可以为16:9或4:3。当该计算机设备600为竖屏计算机设备时,则该计算机设备600的显示屏的宽高比小于1,例如,该计算机设备600的显示屏的宽高比可以为9:18或3:4等。
摄像头组件606用于采集图像或视频。可选地,摄像头组件606包括前置摄像头和后置摄像头。通常,前置摄像头设置在计算机设备的前面板,后置摄像头设置在计算机设备的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件606还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路607可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器601进行处理,或者输入至射频电路604以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在计算机设备600的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器601或射频电路604的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路607还可以包括耳机插孔。
定位组件608用于定位计算机设备600的当前地理位置,以实现导航或LBS(Location Based Service,基于位置的服务)。定位组件608可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统或欧盟的伽利略系统的定位组件。
电源609用于为计算机设备600中的各个组件进行供电。电源609可以是交流电、直流电、一次性电池或可充电电池。当电源609包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
在一些实施例中,计算机设备600还包括有一个或多个传感器610。该一个或多个传感器610包括但不限于:加速度传感器611、陀螺仪传感器612、压力传感器613、指纹传感器614、光学传感器615以及接近传感器616。
加速度传感器611可以检测以计算机设备600建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器611可以用于检测重力加速度在三个坐标轴上的分量。处理器601可以根据加速度传感器611采集的重力加速度信号,控制显示屏605以横向视图或纵向视图进行用户界面的显示。加速度传感器611还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器612可以检测计算机设备600的机体方向及转动角度,陀螺仪传感器612可以与加速度传感器611协同采集用户对计算机设备600的3D动作。处理器601根据陀螺仪传感器612采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器613可以设置在计算机设备600的侧边框和/或显示屏605的下层。当压力传感器613设置在计算机设备600的侧边框时,可以检测用户对计算机设备600的握持信号,由处理器601根据压力传感器613采集的握持信号进行左右手识别或快捷操作。当压力传感器613设置在显示屏605的下层时,由处理器601根据用户对显示屏605的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器614用于采集用户的指纹,由处理器601根据指纹传感器614采集到的指纹识别用户的身份,或者,由指纹传感器614根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器601授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器614可以被设置计算机设备600的正面、背面或侧面。当计算机设备600上设置有物理按键或厂商Logo时,指纹传感器614可以与物理按键或厂商Logo集成在一起。
光学传感器615用于采集环境光强度。在一个实施例中,处理器601可以根据光学传感器615采集的环境光强度,控制显示屏605的显示亮度。具体地,当环境光强度较高时,调高显示屏605的显示亮度;当环境光强度较低时,调低显示屏605的显示亮度。在另一个实施例中,处理器601还可以根据光学传感器615采集的环境光强度,动态调整摄像头组件606的拍摄参数。
接近传感器616,也称距离传感器,通常设置在计算机设备600的前面板。接近传感器616用于采集用户与计算机设备600的正面之间的距离。在一个实施例中,当接近传感器616检测到用户与计算机设备600的正面之间的距离逐渐变小时,由处理器601控制显示屏605从亮屏状态切换为息屏状态;当接近传感器616检测到用户与计算机设备600的正面之间的距离逐渐变大时,由处理器601控制显示屏605从息屏状态切换为亮屏状态。
也即是,本申请实施例不仅提供了一种计算机设备,包括处理器和用于存储处理器可执行指令的存储器,其中,处理器被配置为执行图2所示的算子的可执行代码的生成方法,而且,本申请实施例还提供了一种计算机可读存储介质,该存储介质内存储有计算机程序,该计算机程序被处理器执行时可以实现图2所示的算子的可执行代码的生成方法。
本申请实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述图2所示实施例提供的算子的可执行代码的生成方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (8)
1.一种算子的可执行代码的生成方法,其特征在于,所述方法包括:
获取算子的第一中间表示信息,所述第一中间表示信息用于描述所述算子的计算逻辑,所述第一中间表示信息通过将所述算子的逻辑表达的语言转换为中间语言得到;
从已存储的平台硬件资源配置文件中,获取目标硬件平台的硬件配置信息;
根据所述目标硬件平台的类型,获取所述目标硬件平台对应的优化模板,所述优化模板包括多个优化操作以及所述多个优化操作的执行顺序;
根据所述硬件配置信息,从所述优化模板中的多个优化操作中选择所述目标硬件平台支持的多个优化操作,以及所述目标硬件平台支持的多个优化操作的执行顺序;
根据所述硬件配置信息,确定所述目标硬件平台支持的多个优化操作中每个优化操作对应的优化参数,将所述优化参数写入对应的优化操作中,得到所述目标硬件平台支持的优化策略;
根据所述优化策略,对所述第一中间表示信息的进行优化,得到第二中间表示信息;
从多个计算核中,确定与所述第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核;
将所述第二中间表示信息中与所述至少一个计算核的功能相同的计算逻辑,替换为针对所述至少一个计算核中相应计算核包括的计算核接口的调用,得到第三中间表示信息;
根据所述目标硬件平台的类型,从所述至少一个计算核中每个计算核包括的多个逻辑代码中,选择与所述目标硬件平台对应的逻辑代码;
根据所述第三中间表示信息和选择出的逻辑代码,生成所述算子在所述目标硬件平台上的可执行代码;
其中,每个计算核包括一个计算核接口和所述计算核接口对应的多个逻辑代码,所述计算核接口是屏蔽硬件平台的细节、通过对不同类型的多个硬件平台的功能进行抽象后得到的通用接口,所述多个逻辑代码与所述多个硬件平台的类型一一对应,每个逻辑代码是针对相应类型的硬件平台的硬件特性生成的。
2.如权利要求1所述的方法,其特征在于,所述根据所述优化策略,对所述第一中间表示信息的进行优化,得到第二中间表示信息,包括:
将所述第一中间表示信息划分为多个子中间表示信息;
根据所述优化策略,对所述多个子中间表示信息分别进行优化;
将优化后的多个子中间表示信息进行组合,得到所述第二中间表示信息。
3.如权利要求2所述的方法,其特征在于,所述将所述第一中间表示信息划分为多个子中间表示信息,包括:
确定所述第一中间表示信息中的至少一个特殊节点;
根据所述至少一个特殊节点,将所述第二中间表示信息划分为多个子中间表示信息。
4.如权利要求1所述的方法,其特征在于,所述根据所述优化策略,对所述第一中间表示信息的进行优化,得到第二中间表示信息之前,还包括:
确定所述目标硬件平台关于计算逻辑的至少一个配置项;
根据所述至少一个配置项,对所述第一中间表示信息的配置进行优化。
5.如权利要求4所述的方法,其特征在于,所述确定所述目标硬件平台关于计算逻辑的至少一个配置项,包括:
显示多个配置项,当基于所述多个配置项检测到选择操作时,将所述选择操作所选择的配置项确定为所述目标硬件平台关于计算逻辑的至少一个配置项;或者,
根据所述目标硬件平台的类型,从存储的平台类型与配置项之间的对应关系中,获取所述目标硬件平台关于计算逻辑的至少一个配置项。
6.一种算子的可执行代码的生成装置,其特征在于,所述装置包括:
第一获取模块,用于获取算子的第一中间表示信息,所述第一中间表示信息用于描述所述算子的计算逻辑;
第二获取模块,用于从已存储的平台硬件资源配置文件中,获取目标硬件平台的硬件配置信息;
第一确定模块,用于根据所述目标硬件平台的类型,获取所述目标硬件平台对应的优化模板,所述优化模板包括多个优化操作以及所述多个优化操作的执行顺序;根据所述硬件配置信息,从所述优化模板中的多个优化操作中选择所述目标硬件平台支持的多个优化操作,以及所述目标硬件平台支持的多个优化操作的执行顺序;根据所述硬件配置信息,确定所述目标硬件平台支持的多个优化操作中每个优化操作对应的优化参数,将所述优化参数写入对应的优化操作中,得到所述目标硬件平台支持的优化策略;
第一优化模块,用于根据所述优化策略,对所述第一中间表示信息的进行优化,得到第二中间表示信息;
生成模块包括:确定子模块,用于从多个计算核中,确定与所述第二中间表示信息包括的计算逻辑的功能相同的至少一个计算核;替换子模块,用于将所述第二中间表示信息中与所述至少一个计算核的功能相同的计算逻辑,替换为针对所述至少一个计算核中相应计算核包括的计算核接口的调用,得到第三中间表示信息;选择子模块,用于根据所述目标硬件平台的类型,从所述至少一个计算核中每个计算核包括的多个逻辑代码中,选择与所述目标硬件平台对应的逻辑代码;编译子模块,用于根据所述第三中间表示信息和选择出的逻辑代码,生成所述算子在所述目标硬件平台上的可执行代码;
其中,每个计算核包括一个计算核接口和所述计算核接口对应的多个逻辑代码,所述计算核接口是屏蔽硬件平台的细节、通过对不同类型的多个硬件平台的功能进行抽象后得到的通用接口,所述多个逻辑代码与所述多个硬件平台的类型一一对应,每个逻辑代码是针对相应类型的硬件平台的硬件特性生成的。
7.如权利要求6所述的装置,其特征在于,所述装置还包括:
第二确定模块,用于确定所述目标硬件平台关于计算逻辑的至少一个配置项;
第二优化模块,用于根据所述至少一个配置项,对所述第一中间表示信息的配置进行优化。
8.如权利要求7所述的装置,其特征在于,所述第二确定模块具体用于:
显示多个配置项,当基于所述多个配置项检测到选择操作时,将所述选择操作所选择的配置项确定为所述目标硬件平台关于计算逻辑的至少一个配置项;或者,
根据所述目标硬件平台的类型,从存储的平台类型与配置项之间的对应关系中,获取所述目标硬件平台关于计算逻辑的至少一个配置项。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010327958.7A CN113553039B (zh) | 2020-04-23 | 2020-04-23 | 算子的可执行代码的生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010327958.7A CN113553039B (zh) | 2020-04-23 | 2020-04-23 | 算子的可执行代码的生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113553039A CN113553039A (zh) | 2021-10-26 |
CN113553039B true CN113553039B (zh) | 2024-05-31 |
Family
ID=78129456
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010327958.7A Active CN113553039B (zh) | 2020-04-23 | 2020-04-23 | 算子的可执行代码的生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113553039B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113835900B (zh) * | 2021-11-26 | 2022-02-22 | 山东产研鲲云人工智能研究院有限公司 | 神经网络计算方法、装置、设备及计算机可读存储介质 |
CN114385183A (zh) * | 2021-12-17 | 2022-04-22 | 飞腾信息技术有限公司 | 一种数据处理方法、装置、设备及计算机存储介质 |
CN114880273B (zh) * | 2022-04-27 | 2024-06-14 | 清华大学无锡应用技术研究院 | 用于粗粒度可重构架构的映射方法、装置、设备及介质 |
CN115220727B (zh) * | 2022-06-07 | 2024-05-28 | 清华大学 | 面向利用Python语言编写的不规则张量程序的优化方法及装置 |
CN116561075B (zh) * | 2023-05-15 | 2024-01-30 | 北京百度网讯科技有限公司 | 动态链接库文件的生成方法、算子的调用方法及装置 |
CN116755714B (zh) * | 2023-08-16 | 2023-11-10 | 腾讯科技(深圳)有限公司 | 深度神经网络模型的运行方法、装置、设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001147820A (ja) * | 1999-11-24 | 2001-05-29 | Nec Software Kobe Ltd | コード最適化方法および記録媒体 |
CN102495723A (zh) * | 2010-10-12 | 2012-06-13 | 微软公司 | 小块通信算子 |
CN105556402A (zh) * | 2013-12-09 | 2016-05-04 | 帝斯贝思数字信号处理和控制工程有限公司 | 用于影响控制设备的控制程序的方法 |
CN106547522A (zh) * | 2015-09-17 | 2017-03-29 | 华为技术有限公司 | 一种流应用优化的方法及装置 |
CN109426574A (zh) * | 2017-08-31 | 2019-03-05 | 华为技术有限公司 | 分布式计算系统,分布式计算系统中数据传输方法和装置 |
CN110569106A (zh) * | 2019-08-27 | 2019-12-13 | Oppo广东移动通信有限公司 | 代码加载方法、装置、电子设备及计算机可读介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR3008505B1 (fr) * | 2013-07-10 | 2017-03-03 | Thales Sa | Procede d'optimisation de traitement parallele de donnees sur une plateforme materielle |
AU2016228166A1 (en) * | 2016-09-13 | 2018-03-29 | Canon Kabushiki Kaisha | Visualisation for guided algorithm design to create hardware friendly algorithms |
US10677915B2 (en) * | 2018-02-07 | 2020-06-09 | Mitsubishi Electric Research Laboratories, Inc. | System and method for fused radar imaging under position ambiguity of antennas |
-
2020
- 2020-04-23 CN CN202010327958.7A patent/CN113553039B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001147820A (ja) * | 1999-11-24 | 2001-05-29 | Nec Software Kobe Ltd | コード最適化方法および記録媒体 |
CN102495723A (zh) * | 2010-10-12 | 2012-06-13 | 微软公司 | 小块通信算子 |
CN105556402A (zh) * | 2013-12-09 | 2016-05-04 | 帝斯贝思数字信号处理和控制工程有限公司 | 用于影响控制设备的控制程序的方法 |
CN106547522A (zh) * | 2015-09-17 | 2017-03-29 | 华为技术有限公司 | 一种流应用优化的方法及装置 |
CN109426574A (zh) * | 2017-08-31 | 2019-03-05 | 华为技术有限公司 | 分布式计算系统,分布式计算系统中数据传输方法和装置 |
CN110569106A (zh) * | 2019-08-27 | 2019-12-13 | Oppo广东移动通信有限公司 | 代码加载方法、装置、电子设备及计算机可读介质 |
Non-Patent Citations (4)
Title |
---|
TensorFlow 从入门到精通(七):TensorFlow 运行原理;卜居;《https://blog.csdn.net/kkk584520/article/details/51553823/》;20160608;第2页 * |
TensorFlow(一);chenglong_123;《https://blog.csdn.net/chenglong_123/article/details/79014248》;20180109;第2页 * |
自定义算子:使用C++和CUDA编写您的算子,并其进行即时编译;Jittor;《https://cg.cs.tsinghua.edu.cn/jittor/tutorial/2020-3-17-09-51-custom_op/》;20200317;第1-2页 * |
这可能是创建自定义网络层最简单的方式-MobulaOP使用说明;wkcn;《https://www.jianshu.com/p/6cff443db1ea》;20180911;第3-4页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113553039A (zh) | 2021-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113553039B (zh) | 算子的可执行代码的生成方法及装置 | |
CN108304265B (zh) | 内存管理方法、装置及存储介质 | |
CN110471858B (zh) | 应用程序测试方法、装置及存储介质 | |
CN113687816B (zh) | 算子的可执行代码的生成方法及装置 | |
CN113127181B (zh) | 内存管理方法、装置及存储介质 | |
CN112230781B (zh) | 字符推荐方法、装置及存储介质 | |
CN112162843A (zh) | 工作流执行方法、装置、设备及存储介质 | |
CN113822322B (zh) | 图像处理模型训练方法及文本处理模型训练方法 | |
CN111459466B (zh) | 代码生成方法、装置、设备及存储介质 | |
CN111897525A (zh) | 大数据处理方法及系统 | |
CN111125602B (zh) | 页面构建方法、装置、设备和存储介质 | |
CN113469360B (zh) | 推理方法及装置 | |
CN111666076B (zh) | 图层添加方法、装置、终端及存储介质 | |
CN113361376B (zh) | 获取视频封面的方法、装置、计算机设备及可读存储介质 | |
CN110852093A (zh) | 文本信息生成方法、装置、计算机设备及存储介质 | |
CN111125095B (zh) | 数据前缀添加的方法、装置、电子设备及介质 | |
CN112926168B (zh) | 确定最优计算模板的方法和装置 | |
CN112990421B (zh) | 优化深度学习网络的运行过程的方法、装置及存储介质 | |
CN111984738B (zh) | 数据关联方法、装置、设备及存储介质 | |
CN113343709A (zh) | 意图识别模型的训练方法、意图识别方法、装置及设备 | |
CN113010175A (zh) | 匿名函数的信息获取方法、装置、设备及可读存储介质 | |
CN112231619A (zh) | 转换方法、装置、电子设备及存储介质 | |
CN110458289B (zh) | 多媒体分类模型的构建方法、多媒体分类方法及装置 | |
CN115391524B (zh) | 敏感词检测方法、装置、计算机设备、存储介质及产品 | |
CN112131340B (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 |