CN114418827A - 一种基于gpu的深度学习算法的性能优化方法及装置 - Google Patents
一种基于gpu的深度学习算法的性能优化方法及装置 Download PDFInfo
- Publication number
- CN114418827A CN114418827A CN202111572333.8A CN202111572333A CN114418827A CN 114418827 A CN114418827 A CN 114418827A CN 202111572333 A CN202111572333 A CN 202111572333A CN 114418827 A CN114418827 A CN 114418827A
- Authority
- CN
- China
- Prior art keywords
- instruction
- target assembly
- assembly instruction
- target
- gpu
- 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
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Medical Informatics (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请提供了一种基于GPU的深度学习应用的性能优化方法及装置,该方案在GPU加载深度学习应用对应的汇编指令的过程中,将该汇编指令中的第一目标汇编指令替换为第二目标汇编指令。执行指令时,只需执行第二目标汇编指令,不再执行第一目标汇编指令,而且,执行完第二目标汇编指令后,按顺序继续执行第一目标汇编指令之后的其它汇编指令,从而实现改变GPU中高性能函数库的执行逻辑得到新的算子。由上述过程可见,该方案是将新算子与GPU中高性能函数库相结合,使得新算子也能达到较高的计算性能,该方案既能够满足GPU对新算子的支持,即通用性,同时,提高了GPU执行新算子时的整体性能,即达到高性能。
Description
技术领域
本发明属于计算机技术领域,尤其涉及一种基于图形处理器(GraphicsProcessing Unit,GPU)的深度学习应用的性能优化方法及装置。
背景技术
在深度学习应用中,执行效率越来越成为一个关注的重点。但目前深度学习广泛存在的一个问题是:算法开发工程师不了解实际的部署硬件,可能导致写出来的深度学习应用存在效率低下的问题。因此,深度学习编译器应运而生,专门解决深度学习应用落地过程中遇到的性能问题。
但是,目前的深度学习编译器仍有性能提升空间,体现在如下两种方式:一种是芯片厂商派(或称为硬件编译器,如可以集成在GPU芯片中),芯片厂商将一些特定功能的计算(如卷积)进行深度优化,如进行汇编级代码重排等实现最大程度地发挥硬件的性能优势。另一种是框架派(可称为软件编译器,通过软件框架实现),是将深度学习视为整体优化的一个具体应用,通过预定义一系列规则,在制定的搜索空间内持续试错获得最优执行结果。
可见,厂商派能够最大程度地提升深度学习应用的运行性能,但是不支持深度学习应用中出现的新的算子。而框架派的优势在于能够支持新的算子,但运行性能低于厂商派。深度学习框架中,通常将一个深度学习模型抽象成一个由一些基本算子(Operator)组成的有向无环的数据流图,一个算子通常包括多个核函数,核函数由计算设备架构或一些GPU的函数库提供的操作组合而成。
可见,如何使深度学习应用具有高性能同时还能提高支持新算子的能力是目前亟需解决的问题。
发明内容
有鉴于此,本发明的目的在于提供一种基于GPU的深度学习算法的性能优化方法及装置,以解决上述技术问题,其技术方案如下:
第一方面,本申请提供了一种基于图形处理器的深度学习应用的性能优化方法,所述方法包括:
在将深度学习应用中待优化算子对应的汇编指令加载至GPU的寄存器时,将所述汇编指令中的第一目标汇编指令替换为第二目标汇编指令,所述第一目标汇编指令是所述待优化算子包含的待优化汇编指令,所述第二目标汇编指令是优化后的汇编指令,且不属于所述待优化算子;
当执行所述第二目标汇编指令后,执行所述第一目标汇编指令之后的其他汇编指令。
在第一方面一种可能的实现方式中,所述将所述汇编指令中的第一目标汇编指令替换为第二目标汇编指令,包括:
在第二存储空间存储所述第二目标汇编指令,其中,所述第二目标汇编指令;
将第一跳转指令存储至用于存储所述第一目标汇编指令的第一存储空间,所述第一跳转指令用于跳转至所述第二存储空间。
在第一方面另一种可能的实现方式中,当所述执行所述第二目标汇编指令后,执行所述第一目标汇编指令相邻的下一个汇编指令,包括:
将第二跳转指令存储至所述第二存储空间的下一个可用存储空间,所述第二跳转指令用于跳转至第三存储空间,其中,所述第三存储空间存储有所述第一目标汇编指令的下一条汇编指令;
执行所述第二跳转指令跳转至所述第三存储空间,并执行所述第三存储空间存储的汇编指令。
在第一方面再一种可能的实现方式中,所述第一目标汇编指令为第一类数据读取指令,所述第二目标汇编指令为所述第二类数据读取指令,其中,所述第一类数据读取指令与所述第二类数据读取指令的读取逻辑不同。
在第一方面又一种可能的实现方式中,所述第一目标汇编指令为第一类数据输出指令,所述第二目标汇编指令为第二类数据输出指令,所述第一类数据输出指令与所述第二类数据输出指令的输出逻辑不同。
在第一方面另一种可能的实现方式中,确定所述第一目标汇编指令对应的第一存储空间的过程,包括:
确定所述待优化算子对应的汇编指令的存储地址段,从所述存储地址段中查找出所述第一目标汇编指令对应的存储地址偏移量;
基于所述存储地址偏移量获得存储所述第一目标汇编指令的第一存储空间的地址。
第二方面,本申请还提供了一种基于图形处理器的深度学习应用的性能优化装置,所述装置包括:
指令替换模块,用于在将深度学习应用中待优化算子对应的汇编指令加载至GPU的寄存器时,将所述汇编指令中的第一目标汇编指令替换为第二目标汇编指令,所述第一目标汇编指令是所述待优化算子包含的待优化汇编指令,所述第二目标汇编指令是优化后的汇编指令,且不属于所述待优化算子;
指令执行模块,用于当执行所述第二目标汇编指令后,执行所述第一目标汇编指令之后的其他汇编指令。
在第二方面一种可能的实现方式中,所述指令替换模块包括:
第一存储子模块,用于在第二存储空间存储所述第二目标汇编指令,其中,所述第二目标汇编指令;
第二存储子模块,用于将第一跳转指令存储至用于存储所述第一目标汇编指令的第一存储空间,所述第一跳转指令用于跳转至所述第二存储空间。
第三方面,本申请还提供了一种电子设备,包括处理器和存储器,所述存储器内存储有指令,所述处理器运行所述存储器内存储的指令时实现上述的任一种基于图形处理器的深度学习应用的性能优化方法。
第四方面,本申请还提供了一种计算机可读的存储介质,所述存储介质上存储有指令,所述指令由电子设备执行时实现上述的基于图形处理器的深度学习应用的性能优化方法。
本申请提供的基于GPU的深度学习算法的性能优化方法,在将深度学习应用中待优化算子对应的汇编指令加载至GPU的寄存器的过程中,将该汇编指令中第一目标汇编指令替换为第二目标汇编指令。第一目标汇编指令是待优化算子中的待优化汇编指令,而第二目标汇编指令是优化后的汇编指令,且不属于该优化算子。GPU执行指令时,不再执行第一目标汇编指令,而是执行第二目标汇编指令,而且,执行完第二目标汇编指令后,按顺序继续执行第一目标汇编指令之后的其它汇编指令。由此过程可见,该方案是在将编译器编译得到的原算子的汇编指令加载至寄存器时,可以利用新算子的汇编指令替换原算子中的部分指令,使得加载至寄存器中的深度学习应用的汇编指令中包含新算子的指令,以及未被替换的原算子的汇编指令,未被替换的汇编指令仍能充分发挥GPU的硬件性能优势。换言之,该方案实现了新算子与GPU中高性能函数库相结合,使得新算子也能达到较高的计算性能。因此,利用该方案GPU既能够支持深度学习的新算子,即通用性,同时,提高了GPU执行新算子时的整体运行性能,即提高运行性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种基于GPU的深度学习应用的性能优化方法的流程示意图;
图2是本申请实施例提供的另一种基于GPU的深度学习应用的性能优化方法的流程示意图;
图3是本申请实施例提供的一种汇编指令替换前后的存储空间示意图;
图4是本申请实施例提供的一种基于GPU的深度学习应用的性能优化装置的框图。
具体实施方式
下面先对本申请涉及的相关技术进行介绍:
目前的深度学习框架(如CNTK、TensorFlow和Caffe2等),通常是将一个深度学习模型抽象成一个由一些基本算子(Operator)组成的有向无环的数据流图(Direct AcyclicGraph,DAG),然后,再由下层的计算引擎按照某一种拓扑序依次调度并执行这些节点对应的核函数,从而完成一个模型的执行。
统一计算设备架构(Compute Unified Device Architecture,CUDA)是一种由显卡厂商NVDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题,包含CUDA指令集架构以及GPU内部的并行计算引擎。核函数是CUDA的并行计算函数,由CUDA或一些GPU的函数库(如cuDNN、cuBLAS等)提供的操作组合而成。一个Operator通常包括多个核函数。
当一个核函数被调用时,GPU会同时启动很多个线程来执行这一核函数,从而实现并行化。这些粒度较小的核函数提供灵活性的同时,其频繁地调用也成为影响深度学习框架性能的一个重要因素,带来的性能开销主要体现在:数据流图的调度开销,核函数的启动开销,以及核函数之间的数据传输开销。
解决这些性能问题的一种方式是内核融合(Kernel Fusion),所谓内核融合,是将一个计算图中的多个节点所对应的核函数融合成一个函数,使得整个数据流图只需要通过一次函数调用即可完成,从而减小平台调度和核函数启动带来的开销。极大地提高数据传输效率,从而提升整体计算性能。
另一种方式是,GPU芯片的设计厂商将实现特定功能的计算(如卷积)进行深度优化,如进行汇编级的代码重排等,从而最大程度地发挥硬件的性能。即,在GPU芯片出厂时已经对深度学习的部分特定功能的代码进行深度优化,在GPU芯片出厂后无法对此部分功能的代码进行修改,因此称为厂商优化方式。而这种优化方式的缺点是通用差,例如,对于卷积这种在硬件芯片中已经深度优化的算子,其执行逻辑是固定的,如,卷积核以水平扫描的方式扫描数据,同时进行卷积计算,并将计算结果存储于特定位置。这种方式仅对传统卷积方式的性能较高。而新的卷积方式(如deformableconvolution),使用特定方式采集数据而后填充至矩阵内,再按传统的卷积计算方式进行计算,新的卷积方式由于数据加载方式与传统卷积方式不同,因此,无法利用厂商优化方式的高性能的传统卷积核,导致这种新的卷积算子的运行性能很低。
内核融合方式的通用性高但运行性能可能低于厂商优化方式,而厂商优化方式的运行性能高但通用性差。因此,如何提供一种能够同时具有高性能和高通用性的方案成为亟需解决的问题。
为了解决上述问题,本申请的发明人提供了一种基于GPU深度学习算法的性能优化方法,该方法通过汇编级代码注入的方式,拓展已有高性能函数库的执行逻辑,以便支持深度学习应用中的新算子。具体的,该方案在将深度学习应用中待优化算子对应的汇编指令加载至GPU的寄存器的过程中,将该汇编指令中的第一目标汇编指令替换为第二目标汇编指令;其中,第二目标汇编指令是新算子的汇编指令,第一目标汇编指令是待优化算子(即原算子)中的待优化汇编指令。执行时只需执行第二目标汇编指令,不再执行第一目标汇编指令,而且,执行完第二目标汇编指令后,按顺序继续执行第一目标汇编指令之后的其它汇编指令,从而实现新算子与GPU中高性能函数库相结合,使得新算子也能达到较高的运算性能。因此,利用该方案GPU既能够支持深度学习的新算子,即通用性,同时,提高了GPU执行新算子时的整体运行性能,即提高运行性能。。
请参见图1,示出了本申请实施例提供的一种基于GPU的深度学习应用的性能优化方法的流程示意图,该方法应用于GPU芯片中,如图1所示,该方法可以包括以下步骤:
S110,在将深度学习应用中待优化算子对应的汇编指令,加载至GPU的寄存器的过程中,将该汇编指令中的第一目标汇编指令替换为第二目标汇编指令。
GPU即图形处理器,是显卡的处理器,专门执行图形处理任务的微处理器。由于GPU提供了多核并行计算的基础架构,可以支撑大量数据的并行计算,且拥有更高的读写速度。而深度学习需要大量的并行重复计算,因此,深度学习应用通常使用GPU处理。
深度学习应用开发人员可以使用高级编程语言(如C语言)为CUDA架构编写程序,在GPU运行深度学习应用时,需要将该深度学习应用的高级程序语言编译为机器语言,可称为汇编指令,并加载至GPU的寄存器中执行。
本申请实施例是在将深度学习应用对应的汇编指令加载至GPU的寄存器的过程中,修改加载至寄存器中的汇编指令,从而实现将第一目标汇编指令替换为第二目标汇编指令。
其中,第一目标汇编指令是深度学习应用中待优化算子中的待优化汇编指令,即第一目标汇编指令是CUDA中的操作对应的汇编指令。
第二目标汇编指令是优化后的汇编指令,不是待优化算子中的指令。
在一示例性实施例中,可以通过动态劫持CUDA运行时加载的动态链接库,在加载CUDA的汇编指令的过程中注入新的汇编指令,从而实现将CUDA中的原有汇编指令替换为新的汇编指令,即将第一目标汇编指令替换为第二目标汇编指令。
利用第二目标汇编指令替换第一目标汇编指令后,该第二目标汇编指令与CUDA中的其他汇编指令构成新的算子。
在一种可能的实现方式中,如果第二目标汇编指令与第一目标汇编指令占用的存储空间不同,例如,第二目标汇编指令占用的存储空间大于第一目标汇编指令占用的存储空间,如第一目标汇编指令仅是一条指令,而第二目标汇编指令包括至少两条指令。此种情况下,无法将用于加载第一目标汇编指令的存储空间(此处称为目标存储空间)内加载所有第二目标汇编指令,因此,可以在目标存储空间内加载一跳转指令,该跳转指令用于跳转至第二目标汇编指令对应的存储空间,第二目标汇编指令的末尾为另一跳转指令,该跳转指令用于跳转至目标存储空间的下一个存储地址。
在一示例性实施例中,第一目标汇编指令是某一算子中的数据读取指令,第二目标汇编指令是一种新的数据读取指令,即,第一目标汇编指令与第二目标汇编指令的读取逻辑不同。在将第一目标汇编指令加载至GPU的寄存器时,动态替换为加载第二目标汇编指令。最终实现以新的数据读取方式读取数据。
在另一示例性实施例中,第一目标汇编指令是某一算子中的数据输出指令,第二目标汇编指令是一种新的数据输出指令,即,第一目标汇编指令与第二目标汇编指令的输出逻辑不同。
在将第一目标汇编指令加载至GPU的寄存器时,动态替换为加载第二目标汇编指令。最终实现以新的数据输出方式输出数据。
S120,当执行第二目标汇编指令后,按顺序执行第一目标汇编指令之后的其他汇编指令。
执行指令时,按顺序执行加载的汇编指令,执行完第二目标汇编指令后,按顺序执行第一目标汇编指令之后的其他汇编指令。
例如,第一目标汇编指令是数据读取指令,将第一目标汇编指令替换为第二目标汇编指令,执行完第二目标汇编指令后,即加载完要进行运算的数据后,继续执行后续的运算指令。
本实施例提供的基于GPU的深度学习应用的性能优化方法,在将深度学习应用中待优化算子对应的汇编指令加载至GPU的寄存器的过程中,将该汇编指令中第一目标汇编指令替换为第二目标汇编指令。第一目标汇编指令是待优化算子中的待优化汇编指令,而第二目标汇编指令是优化后的汇编指令,且不属于该优化算子。GPU执行指令时,不再执行第一目标汇编指令,而是执行第二目标汇编指令,而且,执行完第二目标汇编指令后,按顺序继续执行第一目标汇编指令之后的其它汇编指令。可见,该方案是在将编译器编译得到的原算子的汇编指令加载至寄存器时,可以利用新算子的汇编指令替换原算子中的部分指令,使得加载至寄存器中的深度学习应用的汇编指令中包含新算子的指令,以及未被替换的原算子的汇编指令,未被替换的汇编指令仍能充分发挥GPU的硬件性能优势。换言之,该方案实现了新算子与GPU中高性能函数库相结合,使得新算子也能达到较高的计算性能。因此,利用该方案GPU既能够支持深度学习的新算子,即通用性,同时,提高了GPU执行新算子时的整体运行性能,即提高运行性能。
请参见图2,示出了本申请实施例提供的另一种基于GPU的深度学习算法的性能优化方法的流程图,该方法应用于GPU,如图2所示,该方法包括以下步骤:
S210,获取深度学习应用中待优化算子包含的第一目标汇编指令的第一存储空间。深度学习应用开发人员可以使用高级编程语言(如C语言)为CUDA架构编写程序,得到的深度学习应用可以在支持CUDA的GPU上一超高性能运行。
根据第一目标汇编指令所属的核函数,确定用于存储该核函数代码段的存储空间,进一步根据第一目标汇编指令的编码规律确定第一目标汇编指令的存储空间,如称为第一存储空间。
在本申请的一个实施例中,基于CUDA的深度学习应用程序编译后的指令存储在fatbinary中,fatbinary本身是一个ELF(Executable and Linkable Format,可执行连接文件格式)结构的镜像,可以根据核函数的函数名直接定位该核函数在该镜像中的位置。进而根据汇编指令的编码规律,确定该核函数的代码段中待优化汇编指令的位置,如在镜像中的偏移量。
例如,需要更改核函数X的数据读取指令,则先通过解析ELF结构获知核函数X在镜像中的偏移量x0。进而根据该偏移量x0搜索整个核函数X的代码段,根据数据读取指令的编码规律,获得该代码段中的所有读取指令的位置(即,读取指令在镜像中的偏移量),如y0、y1……yn。S220,在将深度学习应用中待优化算子对应的汇编指令加载至GPU的寄存器的过程中,将第一存储空间对应的汇编指令替换为第一跳转指令加载至寄存器中。
该第一跳转指令用于跳转至存储有第二目标汇编指令的第二存储空间。
在本申请的一个实施例中,通过Linux系统的环境变量LD_PRELOAD动态劫持fatBinaryCtl_SetBinary这一API,对加载至寄存器的汇编指令进行更改。
例如,原本应该加载第一存储空间存储的第一数据读取指令,更改为加载一个跳转指令,该跳转指令用于跳转至存储有第二目标汇编指令的存储空间,即在所有指令都加载完执行该跳转指令后跳转至执行第二目标汇编指令。
其中,LD_PRELOAD可以影响程序的运行时的链接(Runtime linker),允许定义在程序运行前优先加载的动态链接库。在本申请中,通过该环境变量LD_PRELOAD向加载的CUDA的汇编指令中注入新的指令,从而达到更改CUDA中算子的目的,例如,在CUDA的汇编指令中注入新的数据读取指令和/或数据输出指令,从而更改核函数的输入、输出逻辑。
例如,核函数X的代码段对应的存储地址为y0~yn(y0~yn为地址偏移量),并在该空间后开辟一段新的存储空间,如地址偏移量范围为z0~zn,并在该空间存储要更改的新指令,即第二目标汇编指令。
深度学习应用编译后的指令按照指令执行顺序排列存储在fatbinary中,将指令从fatbinary加载至GPU的寄存器时,按fatbinary中的指令顺序加载至寄存器中,因此,寄存器中的汇编指令顺序与fatbinary中的顺序相同。
如图3所示,(a)图是替换前核函数X的汇编指令对应的存储空间的示意图,其中,y0位置为数据加载指令(即第一类数据读取指令)“LD offset0”,该指令用于加载偏移量为offset0位置的数据。
其中,偏移量是存储单元的实际地址与其所在段的段地址(即,该段的段首地址)之间的距离,即,偏移量是实际地址相对于段首地址的位置。
(b)图是替换后核函数X的汇编指令对应的存储空间示意图,将y0位置的数据加载指令替换为第一跳转指令,即“JMP z0”,z0对应的存储空间内存储有新的数据加载指令(即第二类数据读取指令)“LD offset1”,用于加载偏移量为offset1位置存储的数据。可见,第二类数据读取指令与第一类数据读取指令读取不同的存储空间中的数据。
其中,第一类数据读取指令与第二类数据读取指令的数据读取逻辑不同,例如,第二类数据读取指令可以包括数据读取指令和计算指令,其中,该计算指令是对数据读取指令读取的数据进行运算。此种场景下,第二类数据读取指令中所读取的数据与第一类数据读取指令可以相同也可以不同,本申请对此不做特殊限制。
在其他实施例中,第一目标汇编指令还可以是数据输出指令,即将原本的第一类数据输出指令替换为第二类数据输出指令,其中,第二类数据输出指令与第一类数据输出指令的输出逻辑不同。例如,第二类数据输出指令包括计算指令和输出指令,即先对数据进行某种运算后再输出。本申请对此不做特殊限制。
其中,y0和z0都是寄存器地址,可以通过硬编码方式写入GPU的机器码中。
在本申请的一个实施例中,z0对应的存储空间是存储核函数X的代码段的存储空间之后新开辟的存储空间。当然,在其他实施例中,z0对应的存储空间还可以是寄存器中的其他未使用的存储空间,本申请不做限定。
S230,在第二存储空间相邻的下一个存储空间加载第二跳转指令。
其中,第二跳转指令用于跳转至与第一存储空间相邻的下一个存储空间,该存储空间内存储有与第一目标汇编指令相邻的下一个汇编指令。
例如,仍以图3所示的例子进行说明,第一存储空间为y0位置,第二存储空间为z0位置,z0相邻的下一个存储空间即z0+1,在z0+1对应的存储空间内加载第二跳转指令,即“JMP y0+1”,其中,y0+1位置(即y1)是y0的下一个存储空间,因此,该第二跳转指令是跳转执行y1位置存储的指令。
在另一示例性实施例中,第二目标汇编指令可能包括多条指令,因此,第二存储空间可以是包括多个存储地址的地址段对应的存储空间,此种情况下,第二存储空间的下一个存储空间是指该第二存储空间的段尾地址的下一个存储地址对应的存储空间。
为了方便,图3中仅示出了第二存储空间是一个存储地址对应的存储空间的情况,即第二存储空间是存储地址z0对应的存储空间。图3仅是示例不能对本申请造成限制。
S240,按顺序依次执行各个汇编指令。
仍以图3所示的例子进行说明,在汇编指令加载过程中更改所加载的指令后如图3中的(b)所示,执行y0位置存储的跳转指令,跳转至z0位置,执行该位置存储的数据加载指令,然后,继续执行z0+1(即z1)位置的指令,即跳转至y0+1位置,并执行该位置存储的指令。由上述过程,将y0位置的数据加载指令,更改为跳转至z0位置的跳转指令,并在z0位置加载新的数据加载指令,将原本的第一数据加载指令更改为跳转→第二数据加载指令→跳转的处理逻辑。从而实现将原汇编指令替换为新的汇编指令的目的,能够替换的指令并不局限于上述实施例中的数据加载指令,还可以是数据输出指令,或数据计算指令,本申请对此不做限制。
本实施例提供的基于GPU的深度学习应用的性能优化方法,在将深度学习应用对应的汇编指令加载至GPU的寄存器的过程中,将需要替换的第一目标汇编指令替换为第一跳转指令,该第一跳转指令用于跳转至第二目标汇编指令对应的存储空间,并执行第二目标汇编指令,执行完该第二目标汇编指令后再利用第二跳转指令跳转至第一目标汇编指令对应的下一个汇编指令,使得原本应该执行第一目标汇编指令的处理逻辑更改为跳转-执行第二目标汇编指令-跳转的处理逻辑。该方案通过注入新的汇编级代码,且该代码与CUDA中高性能函数库相结合得到新算子,使得新算子也能达到较高的计算性能。使得GPU对新算子具有较高的灵活性,同时,提高了新的算子的整体性能。
另一方面,本申请还提供了基于GPU的深度学习应用的性能优化装置实施例,如图4所示,该装置可以包括指令替换模块110和指令执行模块120。指令替换模块110,用于在将深度学习应用中待优化算子对应的汇编指令加载至GPU的寄存器时,将汇编指令中的第一目标汇编指令替换为第二目标汇编指令。
第一目标汇编指令是所述待优化算子包含的待优化汇编指令,第二目标汇编指令是优化后的汇编指令,且不属于所述待优化算子。
在一示例性实施例中,指令替换模块110包括:第一存储子模块和第二存储子模块。
第一存储子模块,用于在第二存储空间存储所述第二目标汇编指令,其中,所述第二目标汇编指令。
第二存储子模块,用于将第一跳转指令存储至用于存储所述第一目标汇编指令的第一存储空间,所述第一跳转指令用于跳转至所述第二存储空间。
在一种可能的实现方式中,第一目标汇编指令为第一类数据读取指令、第二目标汇编指令为第二类数据读取指令,且第一类数据读取指令与第二类数据读取指令的读取逻辑不同。
在另一种可能的实现方式中,第一目标汇编指令为第一类数据输出指令,第二目标汇编指令为第二类数据输出指令,且第一类数据输出指令与第二类数据输出指令的输出逻辑不同。
指令执行模块120,用于当执行所述第二目标汇编指令后,执行所述第一目标汇编指令之后的其他汇编指令。
在一示例性实施例中,将第二跳转指令存储至所述第二存储空间的下一个可用存储空间,所述第二跳转指令用于跳转至第三存储空间,其中,所述第三存储空间存储有所述第一目标汇编指令的下一条汇编指令。执行第二跳转指令跳转至所述第三存储空间,并执行所述第三存储空间存储的汇编指令。
本实施例提供的基于GPU的深度学习应用的性能优化装置,在将编译器编译得到的原算子的汇编指令加载至GPU的寄存器时,利用新算子的汇编指令替换原算子中的部分指令,使得加载至寄存器中的汇编指令中包含新算子的指令,以及未被替换的原算子的汇编指令,未被替换的汇编指令仍能充分发挥GPU的硬件性能优势。换言之,该方案实现了新算子与GPU中高性能函数库相结合,使得新算子也能达到较高的计算性能。因此,利用该方案GPU既能够支持深度学习的新算子,即通用性,同时,提高了GPU执行新算子时的整体运行性能,即提高运行性能。
再一方面,本申请提供了一种电子设备,该电子设备包括处理器和存储器,该存储器内存储有可在处理器上运行的程序。该处理器运行存储器内存储的该程序时实现上述的任一种基于GPU的深度学习应用的性能优化方法。本文中的设备可以是服务器、PC、PAD、手机等。
又一方面,本申请还提供了一种计算机可执行的存储介质,该存储介质中存储有程序,该程序由计算设备执行时实现上述任一方法实施例所述的基于GPU的深度学习应用的性能优化方法。
另一方面,本申请还提供了一种计算机程序产品,当该计算机程序产品在电子设备上执行时,适于执行初始化有上述任一方法实施例所述的基于GPU的深度学习应用的性能优化方法。
再一方面,本申请还提供了一种芯片系统,包括:至少一个处理器以及接口,所述接口用于接收代码指令,并传输给至少一个处理器;该至少一个处理器运行所述代码指令,以实现上述任一方法实施例所述的基于GPU的深度学习应用的性能优化方法。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
需要说明的是,本说明书中的各个实施例记载的技术特征可以相互替代或组合,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请各实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本申请各实施例中的装置及终端中的模块和子模块可以根据实际需要进行合并、划分和删减。
本申请所提供的几个实施例中,应该理解到,所揭露的终端,装置和方法,可以通过其它的方式实现。例如,以上所描述的终端实施例仅仅是示意性的,例如,模块或子模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个子模块或模块可以结合或者可以集成到另一个模块,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块或子模块可以是或者也可以不是物理上分开的,作为模块或子模块的部件可以是或者也可以不是物理模块或子模块,即可以位于一个地方,或者也可以分布到多个网络模块或子模块上。可以根据实际的需要选择其中的部分或者全部模块或子模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块或子模块可以集成在一个处理模块中,也可以是各个模块或子模块单独物理存在,也可以两个或两个以上模块或子模块集成在一个模块中。上述集成的模块或子模块既可以采用硬件的形式实现,也可以采用软件功能模块或子模块的形式实现。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种基于图形处理器的深度学习应用的性能优化方法,其特征在于,所述方法包括:
在将深度学习应用中待优化算子对应的汇编指令加载至GPU的寄存器时,将所述汇编指令中的第一目标汇编指令替换为第二目标汇编指令,所述第一目标汇编指令是所述待优化算子包含的待优化汇编指令,所述第二目标汇编指令是优化后的汇编指令,且不属于所述待优化算子;
当执行所述第二目标汇编指令后,执行所述第一目标汇编指令之后的其他汇编指令。
2.根据权利要求1所述的方法,其特征在于,所述将所述汇编指令中的第一目标汇编指令替换为第二目标汇编指令,包括:
在第二存储空间存储所述第二目标汇编指令,其中,所述第二目标汇编指令;
将第一跳转指令存储至用于存储所述第一目标汇编指令的第一存储空间,所述第一跳转指令用于跳转至所述第二存储空间。
3.根据权利要求2所述的方法,其特征在于,当所述执行所述第二目标汇编指令后,执行所述第一目标汇编指令相邻的下一个汇编指令,包括:
将第二跳转指令存储至所述第二存储空间的下一个可用存储空间,所述第二跳转指令用于跳转至第三存储空间,其中,所述第三存储空间存储有所述第一目标汇编指令的下一条汇编指令;
执行所述第二跳转指令跳转至所述第三存储空间,并执行所述第三存储空间存储的汇编指令。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述第一目标汇编指令为第一类数据读取指令,所述第二目标汇编指令为所述第二类数据读取指令,其中,所述第一类数据读取指令与所述第二类数据读取指令的读取逻辑不同。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述第一目标汇编指令为第一类数据输出指令,所述第二目标汇编指令为第二类数据输出指令,所述第一类数据输出指令与所述第二类数据输出指令的输出逻辑不同。
6.根据权利要求2所述的方法,其特征在于,确定所述第一目标汇编指令对应的第一存储空间的过程,包括:
确定所述待优化算子对应的汇编指令的存储地址段,从所述存储地址段中查找出所述第一目标汇编指令对应的存储地址偏移量;
基于所述存储地址偏移量获得存储所述第一目标汇编指令的第一存储空间的地址。
7.一种基于图形处理器的深度学习应用的性能优化装置,其特征在于,所述装置包括:
指令替换模块,用于在将深度学习应用中待优化算子对应的汇编指令加载至GPU的寄存器时,将所述汇编指令中的第一目标汇编指令替换为第二目标汇编指令,所述第一目标汇编指令是所述待优化算子包含的待优化汇编指令,所述第二目标汇编指令是优化后的汇编指令,且不属于所述待优化算子;
指令执行模块,用于当执行所述第二目标汇编指令后,执行所述第一目标汇编指令之后的其他汇编指令。
8.根据权利要求7所述的装置,其特征在于,所述指令替换模块包括:
第一存储子模块,用于在第二存储空间存储所述第二目标汇编指令,其中,所述第二目标汇编指令;
第二存储子模块,用于将第一跳转指令存储至用于存储所述第一目标汇编指令的第一存储空间,所述第一跳转指令用于跳转至所述第二存储空间。
9.一种电子设备,其特征在于,包括处理器和存储器,所述存储器内存储有指令,所述处理器运行所述存储器内存储的指令时实现上述权利要求1-6任一项所述的基于图形处理器的深度学习应用的性能优化方法。
10.一种计算机可读的存储介质,其特征在于,所述存储介质上存储有指令,所述指令由电子设备执行时实现上述权利要求1-6任一项所述的基于图形处理器的深度学习应用的性能优化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111572333.8A CN114418827A (zh) | 2021-12-21 | 2021-12-21 | 一种基于gpu的深度学习算法的性能优化方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111572333.8A CN114418827A (zh) | 2021-12-21 | 2021-12-21 | 一种基于gpu的深度学习算法的性能优化方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114418827A true CN114418827A (zh) | 2022-04-29 |
Family
ID=81267952
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111572333.8A Pending CN114418827A (zh) | 2021-12-21 | 2021-12-21 | 一种基于gpu的深度学习算法的性能优化方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114418827A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115878188A (zh) * | 2023-02-20 | 2023-03-31 | 湖南大学 | 一种基于sve指令集的池化层函数的高性能实现方法 |
-
2021
- 2021-12-21 CN CN202111572333.8A patent/CN114418827A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115878188A (zh) * | 2023-02-20 | 2023-03-31 | 湖南大学 | 一种基于sve指令集的池化层函数的高性能实现方法 |
CN115878188B (zh) * | 2023-02-20 | 2023-05-05 | 湖南大学 | 一种基于sve指令集的池化层函数的高性能实现方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8332829B2 (en) | Communication scheduling within a parallel processing system | |
Fortuna et al. | A limit study of JavaScript parallelism | |
EP3895022B1 (en) | Improving emulation and tracing performance using compiler-generated emulation optimization metadata | |
CN111666210A (zh) | 一种芯片验证方法及装置 | |
CN111880801A (zh) | 应用程序动态化方法、装置、电子设备 | |
Dastgeer et al. | The PEPPHER composition tool: Performance-aware dynamic composition of applications for GPU-based systems | |
Horwat | Concurrent Smalltalk on the message-driven processor | |
CN114418827A (zh) | 一种基于gpu的深度学习算法的性能优化方法及装置 | |
Cherubin et al. | libVersioningCompiler: An easy-to-use library for dynamic generation and invocation of multiple code versions | |
TWI743698B (zh) | 解譯執行位元組碼指令流的方法及裝置 | |
CN116149732B (zh) | 一种数据流任务的硬件自动化执行方法、系统及产品 | |
CN116523023A (zh) | 算子融合方法及装置、电子设备与存储介质 | |
US20210182041A1 (en) | Method and apparatus for enabling autonomous acceleration of dataflow ai applications | |
Kayraklioglu et al. | Locality-based optimizations in the chapel compiler | |
EP4083785B1 (en) | Profiling and optimization of compiler-generated code | |
CN113495727B (zh) | 业务组件开发方法、装置、电子设备及介质 | |
Evans et al. | Automatic Identification of Parallel Units and Synchronisation Points in Programs | |
Sato et al. | OpenMP Design for an SMP Cluster," | |
Huhta | Multi-platform data processing engine | |
Erlandsson et al. | TigerShrimp: An Understandable Tracing JIT Compiler | |
CN114391155A (zh) | Gpu着色器程序迭代调用方法、gpu、编译器和gpu驱动器 | |
CN116679912A (zh) | 代码生成方法、装置、设备、存储介质及计算机程序 | |
CN117806686A (zh) | 应用程序的更新方法、装置、设备及计算机可读存储介质 | |
Anderson et al. | A Limit Study of JavaScript Parallelism | |
Ristau et al. | A mapping framework based on packing for design space exploration of heterogeneous mpsocs |
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 |