CN115809092B - 基于mt3000异构处理器的深度学习计算库实现方法 - Google Patents
基于mt3000异构处理器的深度学习计算库实现方法 Download PDFInfo
- Publication number
- CN115809092B CN115809092B CN202310101112.5A CN202310101112A CN115809092B CN 115809092 B CN115809092 B CN 115809092B CN 202310101112 A CN202310101112 A CN 202310101112A CN 115809092 B CN115809092 B CN 115809092B
- Authority
- CN
- China
- Prior art keywords
- engine
- primitive
- memory
- layer
- dsp
- 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
Images
Classifications
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Advance Control (AREA)
Abstract
本申请公开了一种基于MT3000异构处理器的深度学习计算库实现方法,属于深度学习技术领域。该方法针对天河新一代超级计算机异构处理器MT3000原型机,使用engine引擎‑stream数据流‑memory内存对象‑primitives原语四层设计框架,实现了一套完整的深度学习计算库,并针对该处理器的体系结构对卷积、池化、激活、归一化等深度学习常用算子进行计算优化,卷积算子相较于纯CPU版本实现最高加速比为7.56。
Description
技术领域
本申请属于深度学习技术领域,具体涉及一种基于MT3000异构处理器的深度学习计算库实现方法。
背景技术
深度学习是机器学习领域非常流行的一个研究新方向,深度学习是学习样本数据的内在规律和表示层次,最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习是一个复杂的机器学习算法,在图像识别、自然语言处理、自动驾驶等领域都有相当好的发展前景。目前要让一个深度学习算法落地下来,或者产生一个深度学习模型,然后部署到目标设备上进行运行,需要分为训练和推理两步。任意一个有一定计算能力的设备都可以作为训练和推理的终端计算设备,如Intel CPU 、ARM GPU 、NVIDIA GPU 、FPGA、 AI芯片等。深度学习模型层次表示和底层的计算都要依托于一个深度学习计算库以便更加简单地进行模型的训练和推理。
目前对于一个深度学习计算库的开发并没有一个标准,实际上对于每种不同的具有计算能力的硬件设备,都需要针对其特定的体系结构开发计算库以达到最优的计算性能。标准意义上的深度学习计算库需要满足以下的功能特性:
能表示深度学习训练和推理中各种层的计算,包括但不限于卷积层、池化层、激活层,归一化层、lstm层等。能表示一些其他的非层概念的计算,包括但不限于偏置值加、dropout、张量重排、embedding等。
能表示深度学习训练和推理中所需的各种数据精度,包括但不限于双精度、单精度、半精度、INT8等。
计算库底层的针对特定的体系结构进行了优化。
能对底层的算子进行融合的优化以减少访存的操作。
针对特定硬件的底层的体系结构进行深度学习算子计算的高性能优化是一个深度学习计算库的核心目标,国内外基于主流的推理和训练设备已经有相当多的研究成果。NVIDIA CUDA Deep Neural Network Library是 NIVDIA GPU 加速的用于深度神经网络的原语库。cuDNN 可以集成到更高级别的深度学习框架中,包括 Caffe2,Chainer,Keras,MATLAB,MxNet,PyTorch 和 TensorFlow 等。oneAPI Deep Neural Network Library(oneDNN)的前身是 Intel MKL-DNN,是一个开源的跨平台性能库,包含用于深度学习应用程序的基本计算函数,oneDNN 是 oneAPI的一部分,针对 Intel CPU、Intel 通用 GPU、以及 Intel Xe 架构 GPU 进行了优化。oneDNN也可以集成到主流的更高级别的深度学习框架。Arm Computing Library(ACL)是一组针对 Cortex-A CPU 和 Mali GPU 架构优化的机器学习函数库。ACL 库包含了超过 100 种基础深度学习函数,支持多种卷积实现的算法,支持多种精度的数据类型,在最新版本中有了对 ARM 架构处理器的 SVE 支持。
天河新一代超级计算机MT3000异构处理器采用了新的体系结构,对已有的库做移植工作显然不能得到最优的性能,甚至性能有可能变得更差。因此需要针对新的体系结构,进行重新开发工作,并做好性能优化的工作。目前的深度学习的高性能计算库在两个方向上进行神经网络计算进行加速,第一个是在算法的层面,减少数据在主存和处理器之间搬运的次数,将数据重新排布,另一个方面是在底层计算上针对处理器硬件的结构,充分利用好处理器的多级CACHE 层次、SMID单元、多线程等特性,解决主存访问速度与处理器运算速度不匹配的性能瓶颈问题,充分发挥处理器的计算性能。
天河新一代超级计算机MT3000异构处理器是一款新型处理器,处理器的结构如图1所示:CPU使用的是基于ARM V8架构的飞腾2000,辅有4个DSP加速器,每个DSP加速器有24个计算核心,支持乘加指令以及1024位向量化的运算,其具体硬件参数如下表1所示:
表1
MT3000异构处理器作为新型国产高性能多核E级处理器,综合性能优异,已经被多家超级计算中心装载为超算集群,受众广泛,有大量的科学计算应用在该平台上执行。随着深度学习技术的广泛应用,深度学习模型的训练和推理需要的算力越来越庞大。MT3000异构处理器理论峰值计算性能强大,但是也需要在软件层面进行优化,因此提供一套基于该平台的高效的深度学习计算库进行底层的高性能计算库十分有必要。
目前已有的深度学习计算库都只针对主流的硬件进行了定制优化,不能够直接移植到MT3000异构处理器上,需要针对天河新一代计算机异构处理器的体系结构开发一套专用的深度学习计算库。在本申请中,整体计算框架宿主端(CPU端)处理深度神经网络的层的抽象表示,实现内存分配、数据重排等准备任务,然后剥离出底层的计算任务并将其给设备端(DSP端)进行计算,设备端收到计算任务,完成计算流程以后将计算结果返回到宿主端。对计算性能的调优主要集中在设备端执行的内核函数上,在计算任务使用SIMD向量化运算、多核处理器并行、软件流水指令重排、CACHE双流水机制等手段进行优化,对于计算密集型的算子进一步采用手写汇编实现进一步的性能调优。
发明内容
本申请实施例的目的是提供一种基于MT3000异构处理器的深度学习计算库的实现方法,其整体框架采用模块化的设计方法,抽象出深度学习计算中的各个层次,对底层的计算逻辑进行优化,充分利用硬件计算资源与片上缓存空间,实现了深度学习底层计算的常用高性能算子库,从而可以解决目前已有的深度学习计算库都只针对主流的硬件进行了定制优化,不能够直接移植到MT3000异构处理器上的技术问题。
为了解决上述技术问题,本申请是这样实现的:
本申请实施例提供了一种基于MT3000异构处理器的深度学习计算库实现方法,基于MT3000异构处理器的CPU与单DSP加速器进行设计,采用engine引擎层-stream数据流层-memory内存对象层-primitives原语层的四层设计框架,通过执行一个或多个原语来处理一个或多个内存对象中的数据以实现深度学习计算的基本操作,原语执行的顺序封装保存在数据流的上下文中,数据流保存网络模型数据执行的逻辑顺序,数据流、原语以及内存对象都是针对某个特定的设备引擎实现的,具体实现如下:
engine引擎层:engine引擎层是计算设备的抽象,用于封装抽象的某个计算设备,engine引擎包括CPU引擎和DSP引擎,所述CPU引擎用于维护CPU支持的指令集、cache大小以及硬件核心数量信息,所述DSP引擎用于维护DSP处理器的簇号和可用的线程数量信息;
stream数据流层:stream数据流层封装了CPU引擎或者DSP引擎上原语执行的相关上下文,对应一个网络在执行过程中的原语算子的执行序列;在底层实现上使用队列来表示在CPU和DSP上的线程组的执行序列,队列中线程组出队执行的顺序即为网络模型中算子执行的序列;
memory内存对象层:内存对象是封装在特定设备引擎上分配的内存缓存区域,在创建memory内存对象之前需要创建内存描述符来标识内存对象的属性,内存描述符需要保存张量的维度、数据类型、内存格式以及张量索引映射到线性内存空间中的偏移量的方式;
primitives原语层:原语是封装特定计算或访存操作的对象,在创建原语之前,必须需要创建该原语的原语描述符,原语描述符需要保存该原语的共有属性信息,对于特定的某个原语,还需要保存该原语独有的信息;原语描述符处于操作描述符和原语之间的抽象级别,可用于检查特定原语实现的细节。
可选的,engine引擎层-stream数据流层-memory内存对象层-primitives原语层的四层设计框架在engine引擎层封装抽象的计算设备,在stream数据流层面抽象算子的前后执行序列,在memory内存对象层封装原语执行所要操作的内存对象,在primitives原语层使用与MT3000异构处理器相关的性能优化手段实现深度学习常用算子的高性能版本。
可选的,所述MT3000异构处理器相关的性能优化手段包括乘加指令、数据重排、SIMD向量化运算、cache分块、计算访存流水。
可选的,所述高性能版本包括如下深度学习计算原语:卷积、池化、归一化以及激活。
可选的,在stream数据流层中,数据流的创建依托于一个确定的引擎,代表在该确定的引擎上原语执行的数据流;对网络的图优化也在数据流上完成。
可选的,在memory内存对象层中,不同的硬件设备为了达到最优的访存与计算性能,需要对张量有独特的访存的方式,在进行实际计算之前,可以将存储对象中的张量数据进行重新排布;内存对象的创建依托于一个特定的引擎,代表在该特定的引擎上的内存对象;在MT3000异构处理器上,CPU和DSP共享主存储器,CPU拥有所有存储空间的控制权,而DSP处理器只能访问使用特定接口在主存储器上开辟的存储空间。
可选的,在primitives原语层中,一个封装好的原语抽象出来是一个算子;另外,使用原语的属性,一些原语可以表示复杂的融合计算;同一个抽象的原语在不同的引擎上的具体计算逻辑是不同的,因此原语的创建依托于一个特定的引擎,代表需要在该特定的引擎上执行的原语;原语创建完成即可放入数据流中等待统一的调度。
可选的,计算库的整体计算流程如下:
创建计算引擎,MT3000异构处理器带有一个CPU引擎和四个DSP引擎,可通过关键字分别创建,在创建DSP引擎时需要指定DSP的簇号;
创建数据流对象,数据流对象需要传入引擎对象,表示在该传入的引擎对象上创建一个数据流;
创建内存对象,内存对象的创建需要传入引擎对象,表示在该传入的引擎对象上开辟的内存空间;内存对象包含一个张量指针,并保存了张量的相关信息;创建多个内存对象将整个计算流程中的中间张量都涵盖进去以供原语计算使用;
创建原语对象,原语对象需要传入引擎对象,表示在该传入的引擎对象上进行计算的一个算子,同时需要将原语计算过程中的涉及到的内存对象传入,表示原语计算需要操作的张量;原语对象创建完成之后将其放入数据流中由数据流进行统一调度;在一个网络模型的计算中需要创建多个原语对象来表示神经网络中的每一层,依次放入数据流中,等待数据流中所有的原语执行完成即完成了所有的计算流程。
可选的,计算库在进行计算时所采用的数据精度包含双精度浮点数、单精度浮点数、半精度浮点数、32位整数;CPU引擎可以额外支持8位整数的计算;DSP引擎只支持单精度和半精度的计算。
可选的,计算库在计算时实现了多引擎协同处理数据流;CPU引擎和DSP引擎共享主存储器,CPU引擎对主存储器所有的空间都具有读写的权限,DSP引擎只能操作该DSP引擎上被操作系统分配到的空间;CPU引擎对主存储器的访存带宽更高,DSP引擎的计算单元更多,DSP引擎带有16个向量处理单元,在一个指令周期可完成长度为16的双精度浮点数向量的融合乘加运算;对于一个原语的计算,可以将数据的搬运和张量的重排的工作交由CPU完成,DSP引擎则主要完成数据的计算工作。
在本申请实施例中,采用了engine引擎-stream数据流-memory内存对象-primitives原语的四层设计框架,实现了一套完整的深度学习计算库,充分利用上了DSP处理器上的向量化部件,使用乘加指令进行计算加速,使用汇编语言排布计算流水,解决了编译器针对计算密集型函数优化不足的问题,大幅提升函数性能;充分利用片上缓存空间,使用计算-访存双流水机制,对主存储器访问进行了优化,在上层算法层面上使用DSP处理器协同计算与算子融合的手段,进一步提高了计算的效率。
附图说明
图1是本申请提供的MT3000异构处理器的体系结构简图;
图2是本申请实施例提供的卷积计算原语在CPU下的实现与使用加速器实现的性能对比图之一;
图3是本申请实施例提供的卷积计算原语在CPU下的实现与使用加速器实现的性能对比图之二;
图4是本申请实施例提供的计算库实现流程图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
下面结合附图,通过具体的实施例及其应用场景对本申请实施例提供的基于MT3000异构处理器的深度学习计算库的实现方法进行详细地说明。
本申请实施例提供了一种基于MT3000异构处理器的深度学习计算库实现方法,基于MT3000异构处理器的CPU与单DSP加速器进行设计,采用engine引擎层-stream数据流层-memory内存对象层-primitives原语层的四层设计框架,在engine引擎层封装抽象的计算设备,在stream数据流层面抽象算子的前后执行序列,在memory内存对象层封装原语执行所要操作的内存对象,在primitives原语层面使用乘加指令、数据重排、SIMD向量化运算、cache分块、计算访存流水等与MT3000异构处理器相关的性能优化手段实现了深度学习常用算子的高性能版本,包括但不限于卷积、池化、归一化以及激活深度学习计算原语;通过执行一个或多个原语来处理一个或多个内存对象中的数据以实现深度学习计算的基本操作,原语执行的顺序封装保存在数据流的上下文中,数据流保存了网络模型数据执行的逻辑顺序,数据流、原语以及内存对象都是针对某个特定的设备引擎实现的,具体实现如下:
engine引擎层:engine引擎层是计算设备的抽象,用于封装抽象的某个计算设备,engine引擎包括CPU引擎和DSP引擎,所述CPU引擎用于维护CPU支持的指令集、cache大小以及硬件核心数量等信息,所述DSP引擎用于维护DSP处理器的簇号和可用的线程数量等信息;
具体的,DSP引擎的抽象需要继承设备引擎基类,新增设备相关信息。DSP引擎需要维护DSP簇号以及当前DSP簇的可用线程数量。内存空间的开辟和数据流的执行都是在某一个engine引擎上实现,因此内存对象的创建和数据流的创建在引擎层实现。在DSP引擎封装了hthread编程模型中设备管理的相关接口,DSP设备引擎在构造时需要负责打开对应的DSP簇,在析构时需要关闭对应的DSP簇。
stream数据流层:stream数据流层封装了CPU引擎或者DSP引擎上原语执行的相关上下文,对应一个网络在执行过程中的原语算子的执行序列;在底层实现上使用队列来表示在CPU和DSP上的线程组的执行序列,队列中线程组出队执行的顺序即为网络模型中算子执行的序列;数据流的创建依托于一个确定的引擎,代表在该确定的引擎上原语执行的数据流;对网络的图优化也在数据流上完成;
具体的,DSP数据流的抽象需要继承数据流基类,新增一个普通的队列来维护网络中的数据流,保证DSP上的算子原语有序执行。在创建好一个原语对象之后,会创建对应的DSP线程组来执行kernel,然后将其对应的线程组号放入数据流队列的尾部。在数据流进行调度的时候,每次从数据流队列的头部取出一组线程号执行并将该线程组号出队。在异构编程的环境中,设备上的程序的执行和宿主端的代码的执行不是同步的,程序执行结束之前必须等待数据流中所有的原语都执行完成。
memory内存对象层:内存对象是封装在特定设备引擎上分配的内存缓存区域,在创建memory内存对象之前需要创建内存描述符来标识内存对象的属性,内存描述符需要保存张量的维度、数据类型、内存格式以及张量索引映射到线性内存空间中的偏移量的方式;不同的硬件设备为了达到最优的访存与计算性能,需要对张量有独特的访存的方式,在进行实际计算之前,可以将存储对象中的张量数据进行重新排布;内存对象的创建依托于一个特定的引擎,代表在该特定的引擎上的内存对象;在MT3000异构处理器上,CPU和DSP共享主存储器,CPU拥有所有存储空间的控制权,而DSP处理器只能访问使用特定接口在主存储器上开辟的存储空间;
具体的,DSP内存对象的抽象需要继承内存对象基类,在开辟内存空间时采用hthread_malloc接口进行内存空间的分配。使用hthread_malloc接口开辟出的内存空间CPU和DSP是共享的,CPU可以直接访问DSP端的global memory。设备端的kernel可以申请片上的存储空间AM和SM,片上的存储空间不属内存对象管理,内存对象只负责原语的申请的张量的缓存空间以及开辟的临时buffer。
primitives原语层:原语是封装特定计算或访存操作的对象,在创建原语之前,必须需要创建该原语的原语描述符,原语描述符需要保存该原语的共有属性信息,所述共有属性信息具体包括原语所在设备引擎、原语的类型、原语算法的类型、原语所要操作的内存对象等的共有属性信息;对于特定的某个原语,还需要保存该原语独有的信息,例如卷积描述符描述了输入张量、输出张量和权重张量的形状、传播类型、卷积算法类型以及其他相关的参数;原语描述符处于操作描述符和原语之间的抽象级别,可用于检查特定原语实现的细节;一个封装好的原语抽象出来是一个算子;另外,使用原语的属性,一些原语可以表示复杂的融合计算,例如前向卷积算子后面接ReLU激活函数,能减少数据的搬运,提高吞吐量;为了提高并行效率,同一个抽象的原语在不同的引擎上的具体计算逻辑是不同的,因此原语的创建依托于一个特定的引擎,代表需要在该特定的引擎上执行的原语;原语创建完成即可放入数据流中等待统一的调度。
具体的,DSP原语的抽象需要继承原语基类,不同原语的实现需要继承不同的原语基类。原语对象本质上是封装好的DSP端的kernel(卷积核),需要预先编译成dat后缀的可执行文件。原语对象在创建时会以可执行文件的文件名创建,创建完成之后会将dat可执行文件加载到设备引擎上,然后在dat可执行文件中加载对应的函数,创建线程组,最后将线程组号加入数据流对象对应的队列中,由数据流对象进行统一调度。
计算库的整体计算流程如下:
创建计算引擎,MT3000异构处理器带有一个CPU引擎和四个DSP引擎,可通过关键字分别创建,在创建DSP引擎时需要指定DSP的簇号;
创建数据流对象,数据流对象需要传入引擎对象,表示在该传入的引擎对象上创建一个数据流;
创建内存对象,内存对象的创建需要传入引擎对象,表示在该传入的引擎对象上开辟的内存空间;内存对象包含一个张量指针,并保存了张量的相关信息,该相关信息包括保存张量的维度、数据类型、内存格式以及张量索引映射到线性内存空间中的偏移量的方式;创建多个内存对象将整个计算流程中的中间张量都涵盖进去以供原语计算使用;
创建原语对象,原语对象需要传入引擎对象,表示在该传入的 引擎对象上进行计算的一个算子,同时需要将原语计算过程中的涉及到的内存对象传入,表示原语计算需要操作的张量;原语对象创建完成之后将其放入数据流中由数据流进行统一调度;在一个神经网络的计算中需要创建多个原语对象来表示神经网络中的每一层,依次放入数据流中,最后等待数据流中所有的原语执行完成即完成了所有的计算流程。
计算库在进行计算时所采用的数据精度包含双精度浮点数、单精度浮点数、半精度浮点数、32位整数;CPU引擎可以额外支持8位整数的计算;DSP引擎只支持单精度和半精度的计算。
计算库在计算时实现了多引擎协同处理数据流;CPU引擎和DSP引擎共享主存储器,CPU引擎对主存储器所有的空间都具有读写的权限,DSP引擎只能操作该DSP引擎上被操作系统分配到的空间;CPU引擎对主存储器的访存带宽更高,DSP引擎带有16个向量处理单元,在一个指令周期可完成长度为16的双精度向量的融合乘加运算;对于一个原语的计算,可以将数据的搬运和张量的重排的工作交由CPU完成,DSP引擎则主要完成数据的计算工作。
下面以具体实施例1和2提供的一种基于MT3000异构处理器的深度学习计算库实现方法对本申请进行详细说明。
实施例
实施例1是基于MT3000异构处理器实现。天河新一代超级计算机,基于该平台的一个异构处理器节点进行深度学习计算库设计,整体计算框架采用engine引擎-stream数据流-memory内存对象-primitives原语四层的设计框架,调用关系如图1所示。四层设计框架的具体实现方式如下:
实例化engine引擎:所有的计算逻辑都是在一个确定的设备引擎上进行的,首先需要实例化engine引擎对象。依据传入的参数,可以创建CPU引擎和DSP引擎,在创建DSP引擎时需要传入一个整形参数(0-3)表示需要打开的DSP簇。创建DSP引擎时会获取最大可用线程数量并保存,没有可用线程或者打开DSP簇失败时会返回错误信息。
实例化stream数据流:所有的原语执行需要进行统一的调度和分配,创建stream数据流对象来完成原语执行的管理。原语的执行在一个特定的引擎上,在创建数据流对象时需要传入engine对象,表示在该特定的引擎上创建一个数据流来控制原语的有序执行。
实例化memory内存对象:每一个原语的计算操作都需要访问主存储器来获取数据,需要实例化memory内存对象来初始化计算的输入张量与输出张量。在实例化memory对象前需要声明该memory对象所表示的张量的维度、数据类型以及其在物理内存上的数据排布格式,将相关信息封装为一个内存描述符,然后将engine引擎对象和内存描述符作为参数传入以实例化memory对象,表示在该engine上创建的一个memory对象,该engine对象对该momory对象有完整的读写访问权限。
实例化primitive原语:每一个计算逻辑都封装在一个primitive原语对象中。在实例化primitive对象之前需要声明该原语的相关信息。包括但不限于:传播类型、算法类型、内存描述符、常量参数等。传播类型表示前向推理或者反向训练;算法类型表示原语执行采用的算法,包括但不限于卷积、最大值池化、layernorm、batchorm、relu、softmax等;内存描述符表示算法操作的内存空间的维度信息,部分原语还需要常量参数来进行计算。将相关信息封装为一个内存描述符,然后将engine引擎对象和原语描述符作为参数传入以实例化primitive对象,表示在该engine上创建的一个primitive对象。
使用engine引擎-stream数据流-memory内存对象-primitives原语四层设计框架执行一个深度学习神经网络,首先创建engine对象以及stream对象,然后将网络中的所有需要实例化的张量抽象出来,创建memory对象来表示,接着抽象出网络中所有的计算操作,创建primitive对象来表示。最后将网络中每个操作按照次序放入stream对象中依次执行,等待数据流中所有的线程组执行完成即可。
本发明基于天河新一代超级计算机的MT3000异构处理器平台,使用多种手段对深度学习底层计算函数进行了优化,实现了一套基于MT3000异构处理器的深度学习计算库。下表以卷积计算为例,统计了在单精度下,输入通道为32,输出通道为64,卷积步长为1,不同的输入和卷积核大小下,使用CPU与DSP加速器协同计算与CPU单独进行计算的的性能对比,最高加速比为7.56。如图2、图3和下表2所示:
表2
实施例
请参见图4所示,实施例2提供了一种基于MT3000异构处理器的深度学习计算库的高性能实现方法,具体如下:
向量化运算:DSP加速器提供了1024位的SIMD向量扩展支持,每个DSP簇的单个核心中都包含16个VPE(vector process unit),在一条指令下可以进行16个双精度浮点数的运算。以Binary原语两个张量相加为例,在双精度下,每个元素为8字节,进行向量化扩展后,配合浮点向量化寄存器一个指令周期中可以完成连续16个双精度浮点数的加法运算,理论上性能可以提高16倍。
乘加指令:DSP加速器提供SIMD乘加指令,每次计算指令可以实现加法和乘法在一个指令周期完成,理论上可以实现2倍加速,且可以减少指令数,减少内层循环中间变量个数,降低对寄存器资源的消耗,利于软件流水线的排布。
手工汇编优化:使用hthread编程接口提供的C语言intrinsic函数经编译器生成的kernel,不能控制指令的调度和寄存器分配,计算的性能还有提高的空间。因此对于类似于矩阵乘法这种计算密集型的计算任务来说,在kernel中进行计算的时候,需要手工排列向量计算的流水,用汇编语言编写向量化计算的代码。
访存优化:天河新一代超级计算机异构处理器在完成计算任务时,性能瓶颈主要在访存上。因此需要充分利用好DSP核上的片上缓存空间AM与SM,将需要计算的数据通过预先搬运到片上缓存区,然后进行数据的计算。片上缓存空间有限,可以采用双流水机制,利用计算的时间掩盖访存的时间。
处理器协同运算:MT3000异构处理器上,CPU与DSP加速器共享主存储器,CPU访问主存储器的速度要快于DSP加速器,而DSP加速器在向量计算上的性能要优于CPU,因此对于部分原语来说,CPU和DSP加速器可以共同完成。例如卷积原语,对于NCHW数据格式张量的输入,首先可以进行im2col操作,然后转成矩阵乘法的计算,im2col操作是数据在内存中的重新排布,因此可以交由CPU完成,矩阵乘法则交由DSP加速器完成。
原语融合:部分原语可以将计算逻辑融合成一个原语进行计算,以减少主存储器的读写访问次数。原语的融合不会破坏并行计算的逻辑,通常是元素级的原语可以融合到其他的原语中,例如卷积原语和激活原语的融合,对于一次融合原语的计算,能够减少输出张量的一次读写访存。
本发明采用了engine引擎-stream数据流-memory内存对象-primitives原语四层设计框架,实现了一套完整的深度学习计算库,充分利用上了DSP处理器上的向量化部件,使用乘加指令进行计算加速,使用汇编语言排布计算流水,解决了编译器针对计算密集型函数优化不足的问题,大幅提升函数性能;充分利用片上缓存空间,使用计算-访存双流水机制,对主存储器访问进行了优化,在上层算法层面上使用DSP处理器协同计算与算子融合的手段进一步提高了计算的效率。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本申请实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。
Claims (10)
1.一种基于MT3000异构处理器的深度学习计算库实现方法,其特征在于,基于MT3000异构处理器的CPU与单DSP加速器进行设计,采用engine引擎层-stream数据流层-memory内存对象层-primitives原语层的四层设计框架,通过执行一个或多个原语来处理一个或多个内存对象中的数据以实现深度学习计算的基本操作,原语执行的顺序封装保存在数据流的上下文中,数据流保存网络模型数据执行的逻辑顺序,数据流、原语以及内存对象都是针对某个特定的设备引擎实现的,具体实现如下:
engine引擎层:engine引擎层是计算设备的抽象,用于封装抽象的某个计算设备,engine引擎包括CPU引擎和DSP引擎,所述CPU引擎用于维护CPU支持的指令集、cache大小以及硬件核心数量信息,所述DSP引擎用于维护DSP处理器的簇号和可用的线程数量信息;
stream数据流层:stream数据流层封装了CPU引擎或者DSP引擎上原语执行的相关下文,对应一个网络在执行过程中的原语算子的执行序列;在底层实现上使用队列来表示在CPU和DSP上的线程组的执行序列,队列中线程组出队执行的顺序即为网络模型中算子执行的序列;
memory内存对象层:内存对象是封装在特定设备引擎上分配的内存缓存区域,在创建memory内存对象之前需要创建内存描述符来标识内存对象的属性,内存描述符需要保存张量的维度、数据类型、内存格式以及张量索引映射到线性内存空间中的偏移量的方式;
primitives原语层:原语是封装特定计算或访存操作的对象,在创建原语之前,必须需要创建该原语的原语描述符,原语描述符需要保存该原语的共有属性信息,对于特定的某个原语,还需要保存该原语独有的信息;原语描述符处于操作描述符和原语之间的抽象级别,可用于检查特定原语实现的细节。
2.根据权利要求1所述的方法,其特征在于,engine引擎层-stream数据流层-memory内存对象层-primitives原语层的四层设计框架在engine引擎层封装抽象的计算设备,在stream数据流层面抽象算子的前后执行序列,在memory内存对象层封装原语执行所要操作的内存对象,在primitives原语层使用与MT3000异构处理器相关的性能优化手段实现深度学习常用算子的高性能版本。
3.根据权利要求2所述的方法,其特征在于,所述MT3000异构处理器相关的性能优化手段包括乘加指令、数据重排、SIMD向量化运算、cache分块、计算访存流水。
4.根据权利要求3所述的方法,其特征在于,所述高性能版本包括如下深度学习计算原语:卷积、池化、归一化以及激活。
5.根据权利要求1所述的方法,其特征在于,在stream数据流层中,数据流的创建依托于一个确定的引擎,代表在该确定的引擎上原语执行的数据流;对网络的图优化也在数据流上完成。
6.根据权利要求5所述的方法,其特征在于,在memory内存对象层中,不同的硬件设备为了达到最优的访存与计算性能,需要对张量有独特的访存的方式,在进行实际计算之前,可以将存储对象中的张量数据进行重新排布;内存对象的创建依托于一个特定的引擎,代表在该特定的引擎上的内存对象;在MT3000异构处理器上,CPU和DSP共享主存储器,CPU拥有所有存储空间的控制权,而DSP处理器只能访问使用特定接口在主存储器上开辟的存储空间。
7.根据权利要求6所述的方法,其特征在于,在primitives原语层中,一个封装好的原语抽象出来是一个算子;另外,使用原语的属性,一些原语可以表示复杂的融合计算;同一个抽象的原语在不同的引擎上的具体计算逻辑是不同的,因此原语的创建依托于一个特定的引擎,代表需要在该特定的引擎上执行的原语;原语创建完成即可放入数据流中等待统一的调度。
8.根据权利要求1所述的方法,其特征在于,计算库的整体计算流程如下:
创建计算引擎,MT3000异构处理器带有一个CPU引擎和四个DSP引擎,可通过关键字分别创建,在创建DSP引擎时需要指定DSP的簇号;
创建数据流对象,数据流对象需要传入引擎对象,表示在该传入的引擎对象上创建一个数据流;
创建内存对象,内存对象的创建需要传入引擎对象,表示在该传入的引擎对象上开辟的内存空间;内存对象包含一个张量指针,并保存了张量的相关信息;创建多个内存对象将整个计算流程中的中间张量都涵盖进去以供原语计算使用;
创建原语对象,原语对象需要传入引擎对象,表示在该传入的引擎对象上进行计算的一个算子,同时需要将原语计算过程中的涉及到的内存对象传入,表示原语计算需要操作的张量;原语对象创建完成之后将其放入数据流中由数据流进行统一调度;在一个网络模型的计算中需要创建多个原语对象来表示神经网络中的每一层,依次放入数据流中,等待数据流中所有的原语执行完成即完成了所有的计算流程。
9.根据权利要求8所述的方法,其特征在于,计算库在进行计算时所采用的数据精度包含双精度浮点数、单精度浮点数、半精度浮点数、32位整数;CPU引擎可以额外支持8位整数的计算;DSP引擎只支持单精度和半精度的计算。
10.根据权利要求9所述的方法,其特征在于,计算库在计算时实现了多引擎协同处理数据流;CPU引擎和DSP引擎共享主存储器,CPU引擎对主存储器所有的空间都具有读写的权限,DSP引擎只能操作该DSP引擎上被操作系统分配到的空间;CPU引擎对主存储器的访存带宽更高, DSP引擎的计算单元更多,DSP引擎带有16个向量处理单元,在一个指令周期可完成长度为16的双精度浮点数向量的融合乘加运算;对于一个原语的计算,可以将数据的搬运和张量的重排的工作交由CPU完成,DSP引擎则主要完成数据的计算工作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310101112.5A CN115809092B (zh) | 2023-02-13 | 2023-02-13 | 基于mt3000异构处理器的深度学习计算库实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310101112.5A CN115809092B (zh) | 2023-02-13 | 2023-02-13 | 基于mt3000异构处理器的深度学习计算库实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115809092A CN115809092A (zh) | 2023-03-17 |
CN115809092B true CN115809092B (zh) | 2023-04-28 |
Family
ID=85487839
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310101112.5A Active CN115809092B (zh) | 2023-02-13 | 2023-02-13 | 基于mt3000异构处理器的深度学习计算库实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115809092B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114217941A (zh) * | 2021-04-09 | 2022-03-22 | 无锡江南计算技术研究所 | 一种面向国产异构众核处理器的TensorFlow框架核心计算加速引擎 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11790223B2 (en) * | 2017-04-07 | 2023-10-17 | Intel Corporation | Methods and systems for boosting deep neural networks for deep learning |
US20180322386A1 (en) * | 2017-05-05 | 2018-11-08 | Intel Corporation | Fine-grain compute communication execution for deep learning frameworks |
CN114880133A (zh) * | 2017-08-31 | 2022-08-09 | 华为技术有限公司 | 分布式计算系统,分布式计算系统中数据传输方法和装置 |
US11436483B2 (en) * | 2018-01-17 | 2022-09-06 | Mediatek Inc. | Neural network engine with tile-based execution |
-
2023
- 2023-02-13 CN CN202310101112.5A patent/CN115809092B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114217941A (zh) * | 2021-04-09 | 2022-03-22 | 无锡江南计算技术研究所 | 一种面向国产异构众核处理器的TensorFlow框架核心计算加速引擎 |
Non-Patent Citations (2)
Title |
---|
一种运算和数据协同优化的深度学习编译框架;吴林阳;杜伟健;陈小兵;庄毅敏;;高技术通讯(第02期);16-21 * |
面向飞腾多核处理器的Winograd快速卷积算法优化;王庆林;李东升;梅松竹;赖志权;窦勇;;计算机研究与发展(第06期);20-31 * |
Also Published As
Publication number | Publication date |
---|---|
CN115809092A (zh) | 2023-03-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Burrello et al. | Dory: Automatic end-to-end deployment of real-world dnns on low-cost iot mcus | |
Ho et al. | Exploiting half precision arithmetic in Nvidia GPUs | |
KR101759266B1 (ko) | 프로세서들에 걸쳐 데이터-병렬 쓰레드들을 지닌 프로세싱 로직을 매핑하는 방법 | |
US10963300B2 (en) | Accelerating dataflow signal processing applications across heterogeneous CPU/GPU systems | |
US20080250227A1 (en) | General Purpose Multiprocessor Programming Apparatus And Method | |
US20120331278A1 (en) | Branch removal by data shuffling | |
US11816061B2 (en) | Dynamic allocation of arithmetic logic units for vectorized operations | |
CN117032807A (zh) | 基于risc-v指令集的ai加速处理器架构 | |
CN112446471B (zh) | 基于异构众核处理器的卷积加速方法 | |
Bic | A process-oriented model for efficient execution of dataflow programs | |
CN115809092B (zh) | 基于mt3000异构处理器的深度学习计算库实现方法 | |
Liu et al. | Establishing high performance AI ecosystem on Sunway platform | |
CN116670644A (zh) | 通用计算核上的交错处理的方法 | |
Gijsbers et al. | An efficient scalable runtime system for macro data flow processing using S-Net | |
Hiesgen et al. | OpenCL Actors–Adding Data Parallelism to Actor-Based Programming with CAF | |
CN116227615A (zh) | 面向超级计算的量子搜索模拟方法及系统 | |
Li et al. | HASP: Hierarchical asynchronous parallelism for multi-NN tasks | |
Maitre | Understanding nvidia gpgpu hardware | |
JP2024518587A (ja) | データ依存の不規則な演算のためのプログラム可能なアクセラレータ | |
CN114595813A (zh) | 异构加速处理器及数据计算方法 | |
Ino et al. | GPU-Chariot: A programming framework for stream applications running on multi-GPU systems | |
CN113705800A (zh) | 处理单元、相关装置和方法 | |
Chandrashekhar et al. | Performance analysis of sequential and parallel programming paradigms on CPU-GPUS cluster | |
US20240152761A1 (en) | Method and apparatus for using a packet architecture to process neural networks in a neural processing unit | |
US20240020239A1 (en) | Artificial intelligence (ai)/machine learning (ml) tensor processor |
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 |