掌桥专利:专业的专利平台
掌桥专利
首页

对编译过程中的向量化进行优化的方法、装置及电子设备

文献发布时间:2023-06-19 11:22:42


对编译过程中的向量化进行优化的方法、装置及电子设备

技术领域

本申请涉及数据处理技术领域,尤其涉及一种对编译过程中的向量化进行优化的方法、装置、电子设备及机器可读存储介质。

背景技术

编译器通常用于将指令编译成机器可执行的机器指令,同时还可以对指令进行向量化,即将指令中的循环操作转换为向量或者矩阵的运算,以提高运算效率。由于不同芯片的硬件性能不同,因而编译器在对指令进行向量化时,其最优的向量化方案也不一样。目前的编译器,要么针对特定的芯片实现指令的向量化,要么基于通用芯片的硬件性能,实现指令的向量化,前者存在通用性较差的问题,而后者存在不能充分利用芯片各自的计算性能的缺陷。

发明内容

为克服相关技术中存在的问题,本申请提供了一种对编译过程中的向量化进行优化的方法、装置、电子设备及机器可读存储介质。

根据本申请实施例的第一方面,提供一种对编译过程中的向量化进行优化的方法,所述方法包括:获取目标芯片的硬件参数信息,所述硬件参数信息用于表征所述目标芯片的计算能力;根据预设的且与所述硬件参数信息对应的优化策略集,确定所述目标芯片的向量化参数的参数值;基于所述向量化参数的参数值,将所述目标芯片待执行的指令向量化,得到向量化指令。

在一些实施例中,所述硬件参数信息至少包括以下之一:所述目标芯片的体系结构、所述目标芯片的计算核数量、单个所述计算核的计算能力,其中,所述体系结构包括所述目标芯片的内存模型结构以及所述目标芯片的计算核并行结构。

在一些实施例中,所述获取目标芯片的硬件参数信息,包括:基于预先设置的硬件参数配置表确定所述目标芯片的硬件参数信息,所述硬件参数配置表记录有不同型号的芯片对应的硬件参数;或调用预先配置的硬件参数查询接口获取所述目标芯片的硬件参数信息;或获取用户通过所述目标芯片的硬件参数配置接口配置的硬件参数信息。

在一些实施例中,所述向量化参数包括以下一种或多种:所述目标芯片执行所述向量化指令所采用的并行计算方式,所述并行计算方式包括数据级并行优先的方式或线程级并行优先的方式;所述向量化指令对应的计算数据占用的所述目标芯片各层级内存的大小;所述目标芯片的计算核的并行度;单条所述向量化指令对应的计算数据量。

在一些实施例中,所述优化策略集包括以下一种或多种优化策略:第一优化策略,用于基于所述目标芯片的体系结构,确定所述目标芯片执行所述向量化指令所采用的并行计算方式,所述并行计算方式包括数据级并行优先的方式或线程级并行优先的方式;第二优化策略,用于基于所述目标芯片的各级内存的大小,确定为所述向量化指令对应的计算数据分配的所述芯片各层级内存的大小,其中,越靠近所述目标芯片的计算核的内存越优先分配;第三优化策略,用于根据所述目标芯片计算核的数量以及所述目标芯片计算核的计算能力,确定对所述待执行指令向量化时所述目标芯片的计算核的并行度;第四优化策略,用于根据所述目标芯片的单个计算核的计算能力,确定单条所述向量化指令对应的计算数据量。

在一些实施例中,所述根据预设的且与所述硬件参数信息对应的优化策略集,确定所述目标芯片的向量化参数的参数值,包括:基于所述硬件参数信息和所述优化策略集确定所述向量化参数的初始值;基于所述初始值不断调整所述向量化参数,直至所述目标芯片执行所述向量化指令耗时最小,以得到所述向量化参数的参数值。

在一些实施例中,所述不断调整所述初始值的大小,直至所述目标芯片执行所述向量化指令耗时最小,以得到所述向量化参数的参数值,包括:基于所述初始值单独调整每个向量化参数的数值,直至所述目标芯片执行所述向量化指令耗时最小,以得到每个向量化参数的参数值;或基于所述初始值同时调整所有向量化参数的数值,直至所述目标芯片执行所述向量化指令耗时最小,以得到每个向量化参数的参数值。

在一些实施例中,所述根据预设的且与所述硬件参数对应的优化策略集,确定所述目标芯片的向量化参数的参数值,包括:根据所述优化策略集确定一个或多个与所述向量化参数相关的条件函数;对所述条件函数进行求解,得到所述向量化参数的参数值。

在一些实施例中,所述方法还包括:基于所述向量化指令对应的计算数据的依赖关系,对所述计算数据进行以下一种或多种操作:循环拆分、循环整合和循环移位。

根据本申请实施例的第二方面,提供一种对编译过程中的向量化进行优化的装置,所述装置包括:硬件参数信息获取模块,用于获取目标芯片的硬件参数信息,所述硬件参数信息用于表征所述目标芯片的计算能力;参数值确定模块,用于根据预设的且与所述硬件参数信息对应的优化策略集,确定所述目标芯片的向量化参数的参数值;向量化模块,用于基于所述向量化参数的参数值,将所述目标芯片待执行的指令向量化,得到向量化指令。

在一些实施例中,所述硬件参数信息至少包括以下之一:所述目标芯片的体系结构、所述目标芯片的计算核数量、单个所述计算核的计算能力,其中,所述体系结构包括所述目标芯片的内存模型结构以及所述目标芯片的计算核并行结构。

在一些实施例中,所述硬件参数信息获取模块,包括硬件参数配置表存储模块,用于根据所述硬件参数配置表确定所述目标芯片的硬件参数信息,所述硬件参数配置表记录有不同型号的芯片对应的硬件参数;或硬件参数查询接口调用模块,用于通过所述硬件参数查询接口获取所述目标芯片的硬件参数信息;或硬件参数配置接口配置模块,用于获取用户通过所述硬件配置接口配置的硬件参数信息。

在一些实施例中,所述向量化参数包括以下一种或多种:所述目标芯片执行所述向量化指令所采用的并行计算方式,所述并行计算方式包括数据级并行优先的方式或线程级并行优先的方式;所述向量化指令对应的计算数据占用的所述目标芯片各层级内存的大小;所述目标芯片的计算核的并行度;单条所述向量化指令对应的计算数据量。

在一些实施例中,所述优化策略集包括以下一种或多种优化策略:第一优化策略,用于基于所述目标芯片的体系结构,确定所述目标芯片执行所述向量化指令所采用的并行计算方式,所述并行计算方式包括数据级并行优先的方式或线程级并行优先的方式;第二优化策略,用于基于所述目标芯片的各级内存的大小,确定为所述向量化指令对应的计算数据分配的所述芯片各层级内存的大小,其中,越靠近所述目标芯片的计算核的内存越优先分配;第三优化策略,用于根据所述目标芯片计算核的数量以及所述目标芯片计算核的计算能力,确定对所述待执行指令向量化时所述目标芯片的计算核的并行度;第四优化策略,用于根据所述目标芯片的单个计算核的计算能力,确定单条所述向量化指令对应的计算数据量。

在一些实施例中,所述参数值确定模块,包括:初始值确定模块以及初始值调整模块,所述初始值确定模块,用于基于所述硬件参数信息和所述优化策略集确定所述向量化参数的初始值;所述初始值调整模块,用于基于所述初始值不断调整所述向量化参数,直至所述目标芯片执行所述向量化指令耗时最小,以得到所述向量化参数的参数值。

在一些实施例中,所述初始值调整模块,包括:单独调整模块,所述单独调整模块,用于基于所述初始值单独调整每个向量化参数的数值,直至所述目标芯片执行所述向量化指令耗时最小,以得到每个向量化参数的参数值;或同步调整模块,所述同步调整模块,用于基于所述初始值同时调整所有向量化参数的数值,直至所述目标芯片执行所述向量化指令耗时最小,以得到每个向量化参数的参数值。

在一些实施例中,所述参数值确定模块,包括:条件函数确定模块以及求解模块,所述条件确定模块,用于根据所述优化策略集确定一个或多个与所述向量化参数相关的条件函数;所述求解模块,用于对所述条件函数进行求解,得到所述向量化参数的参数值。

在一些实施例中,所述装置还包括循环处理模块,所述循环处理模块,用于基于所述向量化指令对应的计算数据的依赖关系,对所述计算数据进行以下一种或多种操作:循环拆分、循环整合和循环移位。

根据本申请实施例的第三方面,提供一种电子设备,所述电子设备包括:用于与目标芯片进行数据交互的通信接口、存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下方法:获取目标芯片的硬件参数信息,所述硬件参数信息用于表征所述目标芯片的计算能力;根据预设的且与所述硬件参数信息对应的优化策略集,确定所述目标芯片的向量化参数的参数值;基于所述向量化参数的参数值,将所述目标芯片待执行的指令向量化,得到向量化指令。

根据本申请实施例的第四方面,提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被执行时实现本申请实施例的第一方面的方法。

本申请的实施例提供的技术方案可以包括以下有益效果:

在本申请实施例所提供的对编译过程中的向量化进行优化的方法,可以先获取表征目标芯片的计算能力的硬件参数信息,然后基于硬件参数信息和预先设置的优化策略集确定目标芯片对应的向量化参数的参数值,进而基于确定的向量化参数将目标芯片待执行指令的向量化,得到向量化指令。通过根据目标芯片的硬件参数自适应的调整向量化参数,可以得到与目标芯片硬件性能相匹配的最优向量化方案,以最大化利用目标芯片的计算性能,提升目标芯片的处理效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。

图1是本申请示出的一种循环运算和向量化运算的示意图。

图2是本申请根据一示例性实施例示出的一种深度学习编译所应用的系统架构图。

图3是本申请根据一示例性实施例示出的一种对编译过程中的向量化进行优化的方法流程图。

图4是本申请根据一示例性实施例示出的一种用于对编译过程中的向量化进行优化的装置的结构图。

图5本申请根据一示例性实施例示出的一种电子设备的硬件结构图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。

在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

编译器通常用于将指令编译成机器可执行的机器指令,同时还可以对指令进行向量化,以提高运算效率。由于不同芯片的硬件性能不同,因而编译器在对指令进行向量化时,其最优的向量化方案也不一样。目前的编译器,要么针对特定的芯片实现指令的向量化,要么基于通用芯片的硬件性能,实现指令的向量化,前者存在通用性较差的问题,而后者存在不能充分利用芯片各自的计算性能的缺陷。

以深度学习编译器为例,深度学习编译器可以将高级语言转换为AI芯片可读的机器语言,且具备一定加速能力,即在将高级语言编译成机器语言的过程中,可以对指令进行向量化,以加速AI芯片对指令的处理。

指令的向量化,作为一种将循环操作转换为向量或者矩阵运算的一种方法,是深度学习编译器实现其优化能力的重要内容。如图1所示,左侧101为普通的循环计算,而右侧102为对应的向量化指令的运算。左侧101的循环计算,需要通过多次循环计算才能获得运算结果。而右侧102的向量化指令,由于其为向量运算,故可以减少计算次数,提升运算性能,实现运算加速。对于AI芯片的指令集,可以将指令集中的多次循环计算指令变成采用向量运算的向量化指令,可以实现单条指令完成更多份数据的处理,提升AI芯片的处理效率。

然而,当前不同的AI芯片厂商通常提供的指令集并不相同,对向量化指令的处理方式也存在差异。例如,对于最为简单的向量加法指令,不同AI芯片厂商所提供的处理方式通常并不相同:有的AI芯片采用多线程并行的方式(即线程级并行)进行加速,有的AI芯片采用单条指令计算多个数据的方式(即数据级并行)进行并行加速,还有的AI芯片会综合采用以上两种策略进行并行加速,等等。故不同AI芯片能够实现的指令的向量化程度,即向量指令能够完成的计算数据量以及计算效率,也并存在较大差别。

针对不同AI芯片能够实现的指令的向量化程度并不相同这一问题,目前主要有以下两种解决方案:一是主要考虑通用的AI芯片,基于这些芯片的最常见系统架构、运算能力等等,对深度学习编译器的向量化计算进行设计;另一是针对单一的AI芯片,基于其硬件特点进行定制。前一种方法很难充分利用AI芯片的向量计算能力;后一种方法由于其专用性而不具备通用性。

故对于不同厂商所提供的AI芯片,由于不同AI芯片厂商对向量化计算的优化思路、策略以及向量寄存器等等不一致的情况的存在,基于当前的深度学习编译器对不同AI芯片进行向量计算时,还是会存在自动优化困难、或通用性不强、或性能低下的缺陷。

综上可知,编译器在面对不同的芯片时,很难做到对每种芯片都进行各自最优的编译处理,进而实现其最优的并行加速效果。

针对目前的编译器在向量化过程中所存在的缺陷,本申请实施例提供了一种对编译过程中向量化优化的方法、装置、电子设备及机器可读存储介质。

为了方便理解本申请实施例对编译过程中的向量化进行优化的方法,首先以深度学习编译器和AI芯片为例,介绍本申请实施例所提供的方法所应用的一种系统架构。如图2所示,所述系统架构包括深度学习模型201、编译器202以及AI芯片203。

其中,深度学习模型201,即为待加速的深度学习模型。深度学习模型201,用于发现数据的分布特征,常用于分类、检测等应用中;在实际实施时,深度学习模型201可以根据具体应用场景进行选择,例如,根据具体应用场景选择CNN(Convolutional NeuralNetwork,卷积神经网络)模型、DNN(Deep Neural Network,深度神经网络)模型、或RNN(recurrent neural network,递归神经网络)模型等。

编译器202,用于实现深度学习模型201到指令集的映射,即对深度学习模型201进行编译,得到AI芯片能够处理的指令集。

AI芯片203,也常被称为AI加速器或者计算卡,用于处理深度学习应用中的大量计算任务。至少包括内存单元204以及计算核205。内存单元204用于存储指令集对应的计算数据信息,计算核205用于实现指令集中的指令所对应的各种具体操作,例如,加法、乘法、激活函数、归一化等等。

在编译过程中,为了对运算过程进行加速,通常包括向量化过程,即将深度学习模型中的循环操作,转换为向量或矩阵进行运算。相关技术中,向量化通常基于特定的芯片或者基于通用芯片的一般性能来实现,或通用性差,或不能发挥芯片的最优运算能力。

基于此,如图3所示,图3是本申请一示例性实施例示出的一种对编译过程中向量化优化的方法流程图,所述方法包括以下步骤:

步骤301,获取目标芯片的硬件参数信息,所述硬件参数信息用于表征所述目标芯片的计算能力;

步骤302,根据预设的且与所述硬件参数信息对应的优化策略集,确定所述目标芯片的向量化参数的参数值;

步骤303,基于所述向量化参数的参数值,将所述目标芯片待执行的指令向量化,得到向量化指令。

本申请实施例提供的方法可以由编译器执行,编译器将芯片待执行的指令编译成机器可识别的机器指令的同时,可以对指令中的循环操作进行向量化,转换成向量运算或者矩阵运算,以提高芯片对指令的处理效率,实现并行加速运算。其中,该编译器可以是深度学习编译器,也可以是其他的编译器。

本申请实施例提供的目标芯片可以是各种可以执行向量化指令的芯片,因而,可以由编译器将指令向量化后,再由目标芯片执行,以提高运算速率。其中,该目标芯片可以是AI芯片,比如GPU、FPGA、ASIC等,也可以是其他具有相同需求的芯片,本申请实施例不作限制。

如前文所述,向量化(Vectorization),是用向量运算或者矩阵运算去除代码中的各种循环,例如,for循环,以实现运算加速的方法,为了达到更好的加速效果,需要对编译器的向量化方式进行优化。以深度学习编译器为例,在深度学习技术中,由于深度学习模型的确定需要通过训练大量的数据集实现,故对编译过程中的向量化进行优化,进一步节省硬件性能空间,对于提高深度学习模型的计算性能、节省时间成本和硬件成本,具有重要意义。

不同于相关技术中的编译器,基于特定的芯片进行设计,从而只对特定芯片执行对应的向量化,或者基于通用的芯片进行设计,从而常常不能以最优的性能对芯片执行向量化,在本申请实施例所提供的方法,为了既能保证通用性,又能充分地利用目标芯片的计算能力,可以先获取与目标芯片计算能力有关的硬件参数信息;之后,基于所述目标芯片的硬件参数信息以及预设的优化策略集,确定用于指导对指令进行向量化的向量化参数的参数值,其中,预设的优化策略集中可以包括一条或者多条优化策略,用于优化目标芯片对应的向量化参数。最终,根据所述向量化参数的参数值,对所述指令执行对应的向量化操作,得到目标芯片可执行的向量化指令。

可见,在本申请实施例所提供的对编译过程中向量化优化的方法中,指令的向量化,并不局限于特定的向量化参数值,而是基于目标芯片的硬件参数信息,根据预设的优化策略集确定与目标芯片的计算能力相匹配的向量化参数的参数值,进而基于参数值执行向量化操作。通过基于芯片的硬件参数自适应的调整向量化参数,既能够充分利用目标芯片的计算性能,又能保证向量化方法的通用性,克服相关技术所存在的缺陷。

为了尽可能充分地利用目标芯片的计算能力,在本申请实施例所提供的方法中,首先需要获取用于表征目标芯片的计算能力的硬件参数信息。在一些实施例中,所述硬件参数信息,可以至少包括以下之一:所述目标芯片的体系结构、所述目标芯片的各层级的内存的大小、所述目标芯片的计算核数量、单个计算核的计算能力等。

其中,体系结构包括目标芯片的内存模型结构、计算核的并行结构等,内存模型结构是指目标芯片包括多少个层级,各层级内存的大小等。通常芯片的内存包括多个层级,不同层级的内存和计算效率不一样,越靠近计算核的内存效率越高,因而,可以获取芯片的各层级的内存的大小,基于各层级的内存的大小为指令中的计算数据分配内存,以提高计算效率。

此外,每个芯片通常包括多个计算核,因而可以获取计算核的数量以及计算核的计算能力,以便后续基于计算核的数量和计算核的能力确定目标芯片执行向量化指令是采用数据级并行的方式还是线程级并行的方式,以此确定匹配的向量化方案。同时,也可以基于计算核的计算能力确定单个向量指令中对应的计算数据量。其中,单个计算核的计算能力可以通过在单次计算中允许的最大计算数据量表征,当然,也可以采用其他的参数表征。

当然,本领域技术人员应当理解,上述硬件参数信息的举例,并非穷举,所述硬件参数信息还可以基于实际需要,包含其他内容,例如所述目标芯片的计算核的分布状况、所述目标芯片的功率损耗等等。

对于本申请实施例所提供的方法,在步骤301中,获取目标芯片的硬件参数信息,可以通过多种方法实现:

在一些实施例中,可以预先设置的硬件参数配置表,硬件参数配置表可以记录不同型号的芯片对应的硬件参数,然后可以通过查找预先配置好的硬件参数配置表,获取目标芯片的硬件参数信息。

在一些实施例中,芯片厂商可以提供查询芯片硬件参数的查询接口,因而,可以调用预先配置的硬件参数查询接口获取目标芯片的硬件参数信息。比如,厂商可以提供获取芯片硬件相关信息的API接口或芯片硬件配置的获取代码,从而可以通过芯片厂商提供的API接口与代码进行芯片硬件参数的获取。

在一些实施例中,芯片厂商可以为芯片预留硬件参数配置接口,用户可以通过预留的硬件参数配置接口配置目标芯片的硬件参数。因而,也可以通过获取用户通过该配置接口配置的硬件参数,以得到目标芯片的硬件参数信息。

当然,对于未出现在硬件参数配置表中的芯片,在通过其他方式获取到其硬件参数信息后,也可以更新到硬件参数配置表中,以便下次可以直接通过配置表获取该芯片的硬件参数。

通过上述各个实施例可以看到,本申请实施例允许通过多种方式获取目标芯片的硬件参数,进而为基于预设的优化策略集,确定目标芯片的向量化参数的参数值奠定了基础,方便后续编译过程中向量化的优化。

当然,本领域技术人员应当理解,以上只是示例性的例子,在步骤301中,获取目标芯片的硬件参数信息,还可以通过其他方式实现,本申请对此不做具体限制。

在获取了目标芯片的硬件参数信息之后,根据预设的且与所述硬件参数信息对应的优化策略集,确定该目标芯片对应的向量化参数的参数值,其中,所述向量化参数用于指导将目标芯片待执行的指令向量化。编译器在将指令向量化的过程中,需结合目标芯片的硬件参数,确定与目标芯片相匹配的向量化参数,以最大化利用芯片的计算性能。在一些实施例中,在对指令进行向量化时所需参考的向量化参数可以包括以下一种或者多种:

所述目标芯片执行所述向量化指令所采用的并行计算方式,其中,所述并行计算方式包括数据级并行优先的方式或线程级并行优先的方式、所述向量化指令对应的计算数据占用的所述目标芯片各层级内存的大小、所述目标芯片的计算核的并行度、单条所述向量化指令对应的计算数据量等。

以下对上述向量化参数进行逐一介绍:

对于不同体系结构的目标芯片,在对指令向量化过程中采用线程级并行优先(也叫作计算核并行优先)的方式或者数据级并行优先的方式,往往可以取得不同的加速效果。以下举个例子介绍数据级并行优先和线程级并行优先,假设目标芯片有8个计算核,每个计算核的计算数据量为64组数据的加法运算,当前要计算的是512组数据的加法运算,线程级并行优先是指由8个计算核并行计算这512组数据的加法运算(每个核计算8组数据),数据级并行是指由单个核计算这512组数据的加法运算(每个核每次计算64组数据,分8次进行)。由于对不同的体系结构的芯片,其所适用的计算方式也不同,因而,在对指令向量化的过程中,需结合目标芯片的体系结构特点确定并行计算的方式,以根据并行计算方式得到供目标芯片执行的向量化指令。所以,向量化参数中可以包括目标芯片执行向量化指令所采用的并行计算方式,以针对目标芯片的体系结构,确定出匹配的并行计算方式,以发挥目标芯片的最大计算能力。

另外,芯片的内存是具有层级结构的,越靠近计算核的内存单元,造价越高,对应的片上面积越小,计算效率越高。因而,为了提升芯片执行向量化指令的效率,向量化指令中对应的计算数据应尽可能存储在越靠近计算核的内存单元中。因此,针对向量化指令中的计算数据,为其分配的内存所处的层级,以及各层级的大小,均会影响芯片对向量化指令的执行效率。此外,对于不同的向量化指令,为其分配多大的内存,通常也会影响其向量化加速的效果,如果为所有的向量化指令,不管是向量化加法,还是向量化卷积,或者是其他向量化算子,都分配相同大小的内存,则可能会存在内存浪费或者不足的情况。因而,在对指令向量化过程中,需考虑应为各向量化指令对应的计算数据分配哪些层级的内存,每个层级的内存的大小等向量化参数,以优化向量化过程。

当然,如果芯片在执行向量化指令时,是采用计算核并行的方式,那么计算核的并行度也会影响芯片的处理向量化指令的效率。其中,计算核的并行度是指采用多少个计算核并行,比如,采用2个计算核并行、4个计算核行或者8个计算核并行,其处理效率也会存在差异。通常,计算核并行度越高,处理效率越高,因而,在计算核数量以及计算核计算能力允许的前提下,并行度越高,处理效率也越高。所以,向量化过程中也可以考虑计算核并行度这一参数。

另外,在向量化过程中,单个向量化指令对应的数据量多大也需根据目标芯片的计算核的计算能力确定。举个例子,假设目标芯片单次计算时最多可以完成8组数据的加法,那么在对计算数据进行拆分,以得到向量运算时,单个向量化指令对应的数据量就不应当超过8组数据。

当然,本领域技术人员应当理解,所述向量化参数还可以包括其他与指令向量化相关参数,本申请实施例不作限制。

与硬件参数信息对应的优化策略集,主要是用于基于目标芯片的硬件参数信息以及一些经验规则确定目标芯片对应的向量化参数的参数值。优化策略集中可以设置一些基于硬件参数信息确定向量化参数的参数值的经验规则,基于经验规则可以初步确定各向量化参数的超参(即初始值)。其中,优化策略集中可以包括一个优化策略,也可以包括多个优化策略。

对于不同体系结构的目标芯片,采用线程级并行优先以及数据级并行优先,往往可以取得不同的加速效果。在相关技术中,对于通用芯片,通常是预先设定在编译过程中所采取的并行计算的方式。然而,不考虑芯片的体系结构而采用的并行计算方式,常常并不能发挥芯片最大的计算能力。

因此,在一些实施例中优化策略集可以包括第一优化策略,第一优化策略用于基于目标芯片的体系结构,确定目标芯片执行向量化指令所采用的并行计算方式,其中,并行计算方式包括数据级并行优先的方式或线程级并行优先的方式。根据第一优化策略,可以基于目标芯片的体系结构,比如,芯片的内存模型结构、计算核并行结构初步确定采用数据级并行的方式还是线程级并行的方式。

另外,芯片的内存是具有层级结构的,越靠近计算核的内存单元,造价越高,对应的片上面积越大,计算效率越高。并且,针对不同类型的的向量化指令(比如、向量化加法、向量化卷积,或者是其他向量化算子)需要为其分配的内存大小也不一样。也就是说针对向量化指令,其对应的计算数据所占用的内存的层级和各层级的大小均会影响芯片执行向量化执行的效率。

因此,在一些实施例中,所述优化策略集可以包括第二优化策略,第二优化策略用于基于目标芯片的各级内存的大小,确定为向量化指令对应的计算数据分配的目标芯片各层级内存的大小,其中,越靠近目标芯片的计算核的内存越优先分配。例如,假设目标芯片的内存单元包括三个层级,按照离计算核由近及远的顺序分别为L1、L2、L3,对于数据量为1024字节的向量加法的计算,由于计算核的计算数据量是有限的,那么,对于1024字节这么大的数据量,可以选择从靠近计算核的内存单元开始进行内存分配。如最靠近计算核的内存单元(L1)分配内存大小为x,次靠近计算核的内存单元(L2)分配内存大小为y,第三靠近计算核的内存单元(L3)分配内存大小为z,直到完成1024字节的数据量的内存分配。通过第二优化策略,可以初步确定向量化指令中的计算数据在目标芯片中各级内存分配,即可以初步得到为向量化指令对应的计算数据分配的目标芯片各层级内存的初始值。

此外,对应有些目标芯片,其能够允许多线程并行(即计算核并行),其在运算过程中实际使用的并行度,对于向量化加速的效果也具有影响。

因此,在一些实施例中,所述优化策略集可以包括第三优化策略,第三优化策略用于根据目标芯片单个计算核的计算能力和数量,确定目标芯片执行向量化指令时计算核的并行度。比如,针对获取得到的目标芯片单个计算核的计算能力和计算核的数量,在满足单个计算核计算能力的前提下,按照计算核并行度从最高到次高到最低的程度配置计算核并行度,以初步确定目标芯片的计算核的并行度。举个例子,目标芯片有16个计算核,可以组成4个计算群,每个计算群内部的共享内存可以共用数据。那么,所述目标芯片的计算核并行度可以被配置为4核并行,或者8核并行,或者16核并行。

单个向量化指令可以一次执行完成,因而单个向量化指令对应的计算数据量越大,那么芯片处理指令的效率也越高,向量化加速效果也越好。但是单个向量化指令对应的数据量又不能超出目标芯片单次计算的最大计算数据量,因而,在一些实施例中,所述优化策略集,可以包括第四优化策略,第四优化策略用于根据目标芯片的单个计算核的计算能力,确定单条向量化指令对应的计算数据量。通过第四优化策略,即可以初步确定单条向量化指令对应的计算数量。

本领域技术人员应当理解,优化策略集所包含的具体优化策略,上述各个实施例仅为示例性说明,并非穷举。所述优化策略集还可以包含其他的用于确定向量化参数的优化策略,本申请对此不做限制。

通过优化策略集中的优化策略,可以初步为各向量化参数确定一个参数值。在一些实施例中,可以直接根据优化策略集确定的各向量化参数的参数值作为向量化过程中最终的参数值。但是,由于每个条优化策略均是基于经验规则确定单个向量化参数,其没有考虑不同向量化参数之间的影响,也没有以目标芯片最终的处理指令的效率为衡量指标去判定确定的向量化参数是否最优。因而,其确定的向量化参数的参数值可能不是最优的参数值。基于此,在一些实施例中,在根据预设的且与硬件参数信息对应的优化策略集,确定目标芯片的向量化参数的参数值时,可以基于硬件参数信息和优化策略集确定向量化参数的初始值,然后以该初始值作为基准,不断调整该向量化参数的数值的大小,直至目标芯片执行该向量化指令耗时最小,以得到向量化参数最终的参数值。通过优化策略集中的经验规则,可以得到各向量化参数与目标芯片的计算能力比较匹配的初始值,然后再以该初始值作为基准,以目标芯片处理向量化指令的耗时为衡量标准调整向量化参数,可以以较快的速度确定出针对目标芯片的最优向量化参数。

在一些实施例中,在基于初始值不断调整向量化参数的数值大小,直至目标芯片执行向量化指令耗时最小,以得到述向量化参数的参数值时,可以单独调整每个向量化参数的数值,直至目标芯片执行所述向量化指令耗时最小,以得到每个向量化参数的参数值。比如,针对所述目标芯片执行所述向量化指令所采用的并行计算方式、向量化指令对应的计算数据占用的所述目标芯片各层级内存的大小、目标芯片的计算核的并行度、单条向量化指令对应的计算数据量等向量化参数,可以先调整并行计算方式,比如,可以基于数据级并行的方式对指令向量化,得到向量化指令,然后得到目标芯片处理向量化指令的耗时;然后可以基于线程级并行的方式对指令向量化,得到向量化指令,然后得到目标芯片处理向量化指令的耗时,比较耗时的长短,确定并行计算方式。然后,针对各级内存的大小,可以基于确定的初始值不断迭代调整,并基于调整后的各级内存大小对对指令向量化,得到向量化指令,然后确定目标芯片处理该向量化指令的耗时,直至耗时最小。针对其他向量化参数,可以依次采用上述方法分别调整。

在一些实施例中,在基于初始值不断调整向量化参数的数值大小,直至目标芯片执行向量化指令耗时最小,以得到述向量化参数的参数值时,也可以同时调整所有向量化参数的数值,直至目标芯片执行向量化指令耗时最小,以得到每个向量化参数的参数值。比如,针对所述目标芯片执行所述向量化指令所采用的并行计算方式、向量化指令对应的计算数据占用的所述目标芯片各层级内存的大小、目标芯片的计算核的并行度、单条向量化指令对应的计算数据量等向量化参数,可以同时调整上述4个参数的数值,然后并基于调整后的参数值完成向量化,得到向量化指令,然后确定目标芯片处理该向量化指令的耗时,直至耗时最小。

当然,通过不断调整各向量化参数的参数值,对指令进行向量化,以得到向量化指令,并以目标芯片执行该向量化指令消耗的时间作为衡量标准,以得到最终的参数值,这种方式需要进行多次迭代,效率较慢。为了快速计算得到各向量化参数的参数值,在一些实施例中,在根据预设的且与硬件参数信息对应的优化策略集,确定目标芯片的向量化参数的参数值时,可以根据优化策略集确定一个或多个与所述向量化参数相关的条件函数,然后对该条件函数进行求解,以得到向量化参数的参数值。通过这种方式,可以加快计算得到目标芯片的向量化参数的参数值的速度。

以所述优化策略集包括前文所述的第二优化策略和第四优化策略为例,对采用求解方式确定所述向量化参数的参数值进行示例性说明:

对于第二优化策略,可以根据目标芯片内存的层级以及各层级内存的大小,按照越靠近计算核的内存单元越优先分配的原则,构建与向量指令对应的计算数据占用各层级内存大小这一参数相关的条件函数,例如,对于1024字节大小的数据量,最靠近计算核的内存单元(大小为1024)分配内存大小为x,次靠近计算核的内存单元(大小为512)分配内存大小为y,第三靠近计算核的内存单元(大小为256)分配内存大小为z,那么,就可以得到不等式组{x+y+z=1024,0

对于第四优化策略,可以基于目标芯片计算核的计算能力构建与单个向量化指令这一参数相关的条件函数,假设单次向量计算允许的最大计算数据量为256,那么,为单个向量指令配置的计算数据量为m,就存在不等式{0

基于确定的上述不等式组,结合其他的限定条件,例如,总的计算数据量等等,构建多个条件函数,对所述多个条件函数在具有意义的求解空间内进行求解,即可以通过单次求解,得到上述两种向量化参数。

上述示例仅以所述优化策略集包括前文所述的第二优化策略和第四优化策略,求解对应的向量化参数为例进行说明,本领域技术人员应当理解,当所述优化策略集包括多个不同优化策略,可以基于优化策略对应的向量化参数,结合芯片的硬件参数信息的物理限定条件,例如内存总大小、单个计算单元的计算量等等,构建条件函数进行求解。

通过上述实施例可以看到,通过基于所述优化策略集确定与向量化参数有关的的条件函数,对所述条件函数进行求解,确定向量化参数的参数值,能够简单快速地确定用于向量化优化的向量化参数,实现优化加速的效果。

当然,为了提高目标芯片执行指令的效率,除了采用合适的向量化参数,对指令进行向量化,得到目标芯片可以以尽可能快的速度处理的向量化指令。在一些实施例中,也可以对向量化指令中对应的计算数据进行一些处理,以便加快目标芯片在处理向量化指令中的数据时的处理速度。因此,在一些实施中,可以基于向量化指令中对应的计算数据的依赖关系,对计算数据进行以下一种或多种操作:循环拆分、循环整合和循环移位,以便加快目标芯片对向量化指令中的数据的处理速度。

对于循环拆分,当通过步骤302,确定了所述向量化过程中,多核并行的并行核数后,基于所述向量化指令的数据依赖关系,可以对向量化指令对应的数据进行循环拆分,以优化向量化过程。例如,对于向量加法指令,其对应的计算数据量为1024,当通过步骤302,确定了采用8核并行计算时,则可以对所述向量指令对应的数据进行自动分析,将其分为8份相互之间无依赖关系的数据,进行向量加法操作。

对于循环整合,当所述向量化包括多个算子,例如需要先做向量加法,然后再做向量乘法,当数据量比较大时,多次循环操作会极大地影响优化性能,故,可以对多个循环操作先进行循环整合,然后再对较少的循环操作进行向量化运算,进而提高加速性能。

对于循环移位,在某些向量加法、乘法中,循环移位可以降低向量化的运算量,提高加速性能。

通过各个实施例可以看到,在编译优化过程中,除了基于优化策略集所包括的优化策略,确定向量化参数的参数值,还通过循环整合、循环拆分、循环变形等步骤,对向量化数据进行进一步优化,能够有效地提高加速效果,提高计算效率。

参见图4,为本申请所提供的一种用于对编译过程中的向量化进行优化的装置的结构图,所述装置包括:

硬件参数信息获取模块401,用于获取目标芯片的硬件参数信息,所述硬件参数信息用于表征所述目标芯片的计算能力;

参数值确定模块402,用于根据预设的且与所述硬件参数信息对应的优化策略集,确定所述目标芯片的向量化参数的参数值;

向量化模块403,用于基于所述向量化参数的参数值,将所述目标芯片待执行的指令向量化,得到向量化指令。

通过上述实施例可以看到,利用本申请实施例所提供的对编译过程中的向量化进行优化的装置,可以利用硬件参数信息获取模块,先获取表征目标芯片的计算能力的硬件参数信息,然后根据参数确定模块,基于硬件参数信息和预先设置的优化策略集确定目标芯片对应的向量化参数的参数值,最后,基于确定的向量化参数,利用所述向量化模块,将目标芯片待执行指令的向量化,得到向量化指令。通过根据目标芯片的硬件参数自适应的调整向量化参数,可以得到与目标芯片硬件性能相匹配的最优向量化方案,以最大化利用目标芯片的计算性能,提升目标芯片的处理效率。

在一些实施例中,所述硬件参数信息至少包括以下之一:所述目标芯片的体系结构、所述目标芯片的计算核数量、单个所述计算核的计算能力,其中,所述体系结构包括所述目标芯片的内存模型结构以及所述目标芯片的计算核并行结构。

在一些实施例中,所述硬件参数信息获取模块,包括硬件参数配置表存储模块,用于根据所述硬件参数配置表确定所述目标芯片的硬件参数信息,所述硬件参数配置表记录有不同型号的芯片对应的硬件参数;或硬件参数查询接口调用模块,用于通过所述硬件参数查询接口获取所述目标芯片的硬件参数信息;或硬件参数配置接口配置模块,用于获取用户通过所述硬件配置接口配置的硬件参数信息。

通过上述实施例可以看到,本申请实施例允许借助多个模块,通过多种方式获取目标芯片的硬件参数,进而为基于预设的优化策略集,确定目标芯片的向量化参数的参数值奠定了基础,方便后续编译过程中向量化的优化。

在一些实施例中,所述向量化参数包括以下一种或多种:所述目标芯片执行所述向量化指令所采用的并行计算方式,所述并行计算方式包括数据级并行优先的方式或线程级并行优先的方式;所述向量化指令对应的计算数据占用的所述目标芯片各层级内存的大小;所述目标芯片的计算核的并行度;单条所述向量化指令对应的计算数据量。

在一些实施例中,所述优化策略集包括以下一种或多种优化策略:第一优化策略,用于基于所述目标芯片的体系结构,确定所述目标芯片执行所述向量化指令所采用的并行计算方式,所述并行计算方式包括数据级并行优先的方式或线程级并行优先的方式;第二优化策略,用于基于所述目标芯片的各级内存的大小,确定为所述向量化指令对应的计算数据分配的所述芯片各层级内存的大小,其中,越靠近所述目标芯片的计算核的内存越优先分配;第三优化策略,用于根据所述目标芯片计算核的数量以及所述目标芯片计算核的计算能力,确定对所述待执行指令向量化时所述目标芯片的计算核的并行度;第四优化策略,用于根据所述目标芯片的单个计算核的计算能力,确定单条所述向量化指令对应的计算数据量。

在一些实施例中,所述参数值确定模块,包括:初始值确定模块以及初始值调整模块,所述初始值确定模块,用于基于所述硬件参数信息和所述优化策略集确定所述向量化参数的初始值;所述初始值调整模块,用于基于所述初始值不断调整所述向量化参数,直至所述目标芯片执行所述向量化指令耗时最小,以得到所述向量化参数的参数值。

在一些实施例中,所述初始值调整模块,包括:单独调整模块,所述单独调整模块,用于基于所述初始值单独调整每个向量化参数的数值,直至所述目标芯片执行所述向量化指令耗时最小,以得到每个向量化参数的参数值;或同步调整模块,所述同步调整模块,用于基于所述初始值同时调整所有向量化参数的数值,直至所述目标芯片执行所述向量化指令耗时最小,以得到每个向量化参数的参数值。

通过上述各实施例可以看到,基于所述初始值确定模块以及初始值调整模块,可以将基于优化策略集中的经验规则所得到的初始值作为基准,以目标芯片处理向量化指令的耗时为衡量标准调整向量化参数,可以以较快的速度确定出针对目标芯片的最优向量化参数。

在一些实施例中,所述参数值确定模块,包括:条件函数确定模块以及求解模块,所述条件确定模块,用于根据所述优化策略集确定一个或多个与所述向量化参数相关的条件函数;所述求解模块,用于对所述条件函数进行求解,得到所述向量化参数的参数值。

通过上述实施例可以看到,通过包括条件函数确定模块以及求解模块的参数值确定模块,基于所述优化策略集确定与向量化参数有关的的条件函数,对所述条件函数进行求解,确定向量化参数的参数值,能够简单快速地确定用于向量化优化的向量化参数,实现优化加速的效果。

在一些实施例中,所述装置还包括循环处理模块,所述循环处理模块,用于基于所述向量化指令对应的计算数据的依赖关系,对所述计算数据进行以下一种或多种操作:循环拆分、循环整合和循环移位。

通过上述实施例可以看到,在编译优化过程中,除了基于优化策略集所包括的优化策略,基于所述参数值确定模块,确定向量化参数的参数值,还通过循环处理模块,进行循环整合、循环拆分、循环变形等步骤,对向量化数据进行进一步优化,能够有效地提高加速效果,提高计算效率。

与前述方法的实施例相对应,本申请还提供了一种用于对编译过程中的向量化进行优化的电子设备的实施例。所述电子设备,可以是计算机或者服务器等等。参见图5,为本申请电子设备实施例的一种硬件结构图,所述电子设备可以包括:用于与目标芯片进行数据交互的通信接口501、存储器502、处理器503以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下方法:

获取目标芯片的硬件参数信息,所述硬件参数信息用于表征所述目标芯片的计算能力;

根据预设的且与所述硬件参数信息对应的优化策略集,确定所述目标芯片的向量化参数的参数值;

基于所述向量化参数的参数值,将所述目标芯片待执行的指令向量化,得到向量化指令。

所述存储器502可以是所述电子设备的内部存储单元,例如是设备的硬盘或者内存。所述存储器502也可以是所述设备的外部存储设备,例如所述设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器502还可以既包括所述设备的内部存储单元也包括外部存储设备。所述存储器用于存储所述计算机程序以及所述设备所需的其他程序和数据。所述存储器还可以用于暂时地存储已经输出或者将要输出的数据。当存储器存储的程序被执行时,所述处理器503调用存储器502中存储的程序,用于执行前述的方法,所述方法已在前文详细介绍,这里不再赘述。

关于所述硬件参数信息、所述优化策略集以及向量化参数的具体内容,可以参照前文所述,本申请在此不做赘述。

上述各实施例的具体内容,在前文所提供的一种对编译过程中向量化优化的方法部分已经详细介绍,本申请在此不做赘述。

在本申请的实施例中还提供了一种机器可读存储介质,所述机器可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所提供的一种对编译过程中向量化优化的方法中的所有实施例,在此不再赘述。

所述机器可读存储介质可以是前述任一项实施例所述的设备的内部存储单元,例如设备的硬盘或内存。所述机器可读存储介质也可以是所述设备的外部存储设备,例如所述设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,所述机器可读存储介质还可以既包括所述设备的内部存储单元也包括外部存储设备。所述机器可读存储介质用于存储所述计算机程序以及所述设备所需的其他程序和数据。所述机器可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。

上述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

本领域技术人员在考虑申请及实践这里申请的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未申请的本技术领域中的公知常识或惯用技术手段。申请和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。

应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

相关技术
  • 对编译过程中的向量化进行优化的方法、装置及电子设备
  • 编译优化信息生成方法、装置及电子设备
技术分类

06120112901682