CN115878188A - 一种基于sve指令集的池化层函数的高性能实现方法 - Google Patents
一种基于sve指令集的池化层函数的高性能实现方法 Download PDFInfo
- Publication number
- CN115878188A CN115878188A CN202310132475.5A CN202310132475A CN115878188A CN 115878188 A CN115878188 A CN 115878188A CN 202310132475 A CN202310132475 A CN 202310132475A CN 115878188 A CN115878188 A CN 115878188A
- Authority
- CN
- China
- Prior art keywords
- layer
- pooling
- function
- sve
- calculation
- 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.)
- Granted
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
- Executing Machine-Instructions (AREA)
Abstract
本申请公开了一种基于SVE指令集的池化层函数的高性能实现方法,其针对支持SVE指令集的Armv8、Armv9架构平台,采用interface接口‑driver驱动‑kernel汇编核心代码三层代码设计框架,使用循环展开,汇编级别流水线指令重排,SIMD向量化指令,双向循环展开等技术手段,实现了汇编级别的优化手段,并且提供了多线程的接口和可用于多线程的逻辑实现来获取线程化的优化。面对NHWC数据类型的池化操作,解决了编译器无法获得最佳性能的问题,提高了硬件的性能表现,与传统形式NHWC深度优先的池化相比,在x86上创建的Armv8.2虚拟机上仍可以达到2.67倍加速比。
Description
技术领域
本申请属于数据处理技术领域,具体涉及一种基于SVE指令集的池化层函数的高性能实现方法。
背景技术
在神经网络中,池化层一般是位于卷积层的下一层,通常会在卷积层进行特征提取工作,卷积对输入图进行特征提取得到更加高级更加容易贴近我们所需要的特征图,然而卷积得到的特征图维度大小变化不大,有太多的特征存在不利于特征提取,所以在这个部分需要一个池化层存在来进行特征提取,池化层将对卷积层的特征图进行下采样,保留更加重要的特征。
池化操作对卷积层结果进行采样,保留了特征图中主要信息,通常情况下池化操作包含了:平均池化、最大池化、K-max池化。其中最大池化是最常见的,它是将池化区域的最大值提取出来作为池化层的输出结果,它能够作为最有效的池化算法的原因在于:在卷积层提取了特征之后,某个区域的特征更容易由最大特征提取值来表示,特征之间的精确位置远不如他们和其他特征提取块中的相对位置信息重要,除了最大池化方法后,还有平均池化:通过将池化区域中所有的值求和取得特征平均来描述池化区域的特征也被许多的AI框架库所使用不仅如此,经过了池化层之后,往往数据类型会几何倍数减少,如此一来,后续神经网络层中的计算负载也会逐步减少,也节省了大量的内存存储空间。
对于不同的数据类型和求解类型会有少量算法上的不同,并且会根据不同的体系结构采取不同的措施,对于NCHW数据格式进行的池化操作,往往可以根据特定的架构是否支持向量处理器的掩码存取或者跨步存取来获得性能的提升,而对于NHWC数据格式也就是本权利书所讨论的数据格式,则是使用向量处理器存取通道维度来获得数据并行加速。
在SVE面世之前是NEON指令集是Arm架构上主要的SIMD指令集,同时代中intel的主要是有着AVX512,AVX,SSE2-4指令集,并且AVX512拥有者512位向量长,AVX拥有256位向量长,SSE指令集专门对于通用计算和高性能计算方面拓展了相关指令级,相比而言,NEON128位向量长,加上本身就是面向多媒体解码设计的缘故被时代淘汰显得是必然情况。在这种情况下SVE应运而生了,SVE是ARM NEON的下一代指令集,支持不同的长度的向量处理器,在通用计算的时代到来,Arm的可定制化支持厂商定制自己想要长度的向量处理器,而SVE的诞生,可以让同一套代码,在不同的支持SVE指令集平台上运行,并且能够充分发挥向量处理器的作用。
发明内容
本申请实施例的目的是提供一种基于SVE指令集的池化层函数的高性能实现方法,其需要解决的技术问题是:目前缺乏针对SVE指令集的Armv8 Armv9架构的高性能AI运算层函数库,而开源库中能够直接运用于支持SVE指令集平台的性能不够的技术问题;本申请提出针对SVE指令集的Armv8 Armv9架构的nhwc数据格式池化函数的高性能实现方案,该方案合理分配任务规模,处理边界情况特殊方法,并通过设置处理数目以及通道长度来控制kernel汇编层代码工作区域,最终达到相同接口处理多种复杂问题,并保持高性能的优势。
为了解决上述技术问题,本申请是这样实现的:
第一方面,本申请实施例提供了一种基于SVE指令集的池化层函数的高性能实现方法,支持SVE指令集的Armv8、Armv9架构平台是基于富岳超级计算机使用的富士通 A64FXSoc或者倚天710的X2架构进行设计,使用interface接口代码-driver驱动运行代码-kernel汇编核心代码的三层代码设计框架,主要是针对NHWC存储格式的数据的优化实现,因此针对的是通道优先的池化操作,具体实现如下:
(1)interface接口层函数:其面向所有池化函数类型的调用,判断是否是通用池化操作的策略设定;在interface接口层中会有设定多个参数的设计,主要用于检查是否是支持使用优化版本的设计;在driver驱动层中会进行判断来确认是否执行优化版本的高性能池化函数,并且对于interface接口层利用c++语言的继承多态特性提供拓展性;;
(2)driver驱动层函数:其在interface接口层通过不同的参数设定配置好了结构体之后可以调用,由于interface接口层参数的确认,在driver驱动层处可以得到策略的确认,确定真正的池化参数会进行的具体特征,在这一步,面对不同的填充情况,不同的池化区域的跨度大小还有池化区域大小进行具体的计算;
(3)kernel汇编层函数:其作为内核层函数,被driver驱动层进行反复调用,kernel汇编层函数利用直接编写汇编指令的形式,基于ARMv8 Armv9架构特征,在汇编级别利用SIMD技术、流水线技术、循环展开技术进行性能调优,通过重新排布取数写会的IO指令和计算指令的排布顺序,尝试使用计算指令掩盖访存延迟,保证kernel汇编层函数时CPU中较高的计算时间与总时间的比。
可选的,在interface接口层函数中,在interface接口层,根据输入的情况不同,调用driver驱动层函数时会有不同的处理,除此之外,在interface接口层为了适配上层的多线程调用模式而预留了设定线程号和线程数的接口,从而在调用的时候可以可选的使用多线程的调用方式。
可选的,在driver驱动层函数中,在driver驱动层,通过interface接口层的输入确定,后续在池化的区域滑动过程循环中的跨度值,通过通道的数量确定下一个列向单个元素的跨度,通过每行中需要做的计算数量乘以列的跨度得到行之间的跨度,并以此内推得到图像到图像点之间的跨度定义。
可选的,在driver驱动层的参数处理函数之后是主要的外部逻辑调用区域,将池化区域覆盖计算的区域看作为池化片,并以一整行的输出池化片作为一个内部计算调用,并将纵向的循环进行多线程的优化,在多线程的情况,在通用的池化计算中,每个线程将单独负责一行结果的计算,将采用对于输出的纬度进行反向的获取输入范围,并且需要对于填充的处理需要有不同,主要区分考虑顶部和底部的填充。
可选的,对于输出行中,和调用kernel汇编层函数之前,根据具体计算涉及函数的纬度计算具体设计的池化片数量,并以池化片数量作为driver驱动层的最后循环计算,在driver驱动层中得到一个池化片中需要计算的数据点数目,并结合需要计算的通道数目,以及输入输出的数据地址作为参数调用kernel汇编层;输入的地址并不是原来的输入地址,而是将每个数据点的第一个深度的值的地址存在连续的指针数组中传入,还有池化片所覆盖的数目量作为区域计算数据数目在平均池化中会被需要作为参数传入kernel汇编层中计算。可选的,所述interface接口层函数还包括跨度、填充、和池化区域的结构设计。
可选的,实现于支持SVE指令集的处理器平台上,使用ARM最新的SIMD拓展指令集SVE,支持高达2048位的向量处理器进行运算;在使用SVE指令集操作向量处理单元在处理16个数据时,可以一次读取16个单精度浮点类型数据。
可选的,所述处理器平台包括阿里巴巴的自研芯片倚天710和富岳超级计算机的富士通A64FX。
可选的,所述kernel汇编层函数中,SVE提供16个预测寄存器,每个预测寄存器使用1位来保存向量寄存器一个字节的信息,使用过程中,可以制定使用置零或者融合的格式来处理双向运算符运算情形,通过使用预测寄存器控制循环边界情况,减少频繁的迭代器更新以及分支判断情况;除此之外,SVE共有32个变长向量寄存器,每个向量寄存器的向量长由设备而定;在kernel汇编层汇编代码中,主题循环最大将用到16个向量寄存器主要运算,用到4个预测寄存器作为边界迭代情况控制,同时还有1个预测寄存器作为运算范围和模式控制。
可选的, kernel汇编层描述所使用的循环展开和软件流水线技术实现如下:
循环展开部分将计算展开成四次,在最终进行余量收尾,还拓展了在向量长方向上的展开;对于硬件,可以更多的指令参与乱序发射、乱序执行;对于软件,可以进行指令重排。
第二方面,本申请实施例提供了一种电子设备,该电子设备包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如第一方面所述的方法的步骤。
第三方面,本申请实施例提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如第一方面所述的方法的步骤。
在本申请实施例中,针对支持SVE指令集的Armv8、Armv9架构平台,采用interface接口-driver驱动-kernel汇编核心代码三层代码设计框架,使用循环展开,汇编级别流水线指令重排,SIMD向量化指令,双向循环展开等技术手段,实现了汇编级别的优化手段,并且提供了多线程的接口和可用于多线程的逻辑实现来获取线程化的优化;面对NHWC数据类型的池化操作,解决了编译器无法获得最佳性能的问题,提高了硬件的性能表现,与传统形式NHWC深度优先的池化相比,在x86上创建的Armv8.2虚拟机上仍可以达到2.67倍加速比。
附图说明
图1是本申请实施例提供的实现流程图;
图2是本申请实施例提供的driver驱动层的处理形式图;
图3是本申请实施例提供的向量寄存器的具体工作示意图;
图4是本申请实施例提供的电子设备的硬件结构示意图之一;
图5是本申请实施例提供的电子设备的硬件结构示意图之二。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
下面结合附图,通过具体的实施例及其应用场景对本申请实施例提供的基于SVE指令集的池化层函数的高性能实现方法进行详细地说明。
图1为本申请实施例提供的实现流程图:描述了算法逻辑和“interface接口层函数-driver驱动 层函数-kernel汇编核心层函数”的三层代码设计框架,算法在driver驱动层巧妙的判断各种逻辑,处理不同的情况到最终调用相同的kernel汇编层函数,并在kernel汇编层函数使用SVE SIMD指令集利用向量处理器结合体系结构优化方法进行性能优化。
本申请实施例提供了一种基于SVE指令集的池化层函数的高性能实现方法,支持SVE指令集的Armv8、Armv9架构平台是基于富岳超级计算机使用的富士通 A64FX Soc或者倚天710的X2架构进行设计,使用interface接口代码-driver驱动运行代码-kernel汇编核心代码的三层代码设计框架,主要是针对NHWC存储格式的数据的优化实现,因此针对的是通道优先的池化操作。
具体的,实现于支持SVE指令集的处理器平台上,例如芯片倚天710和富岳超级计算机的富士通A64FX,使用ARM最新的SIMD拓展指令集SVE,支持高达2048位的向量处理器进行运算;在使用SVE指令集操作向量处理单元在处理16个数据时,可以一次读取16个单精度浮点类型数据。
需要说明的是,由于针对的是通道优先的池化操作,因此,支持对输入图,在不同的大小,不同池化区域的大小以及池化移动纵向横向跨度;还有是否存在填充和顶部、底部、左边、右边填充 不同部分等各种情况。
该三层代码设计框架的具体实现如下:
(1)interface接口层函数:其面向所有池化函数类型的调用,判断是否是通用池化操作的策略设定,还包括跨度、填充、和池化区域的结构设计。
在interface接口层中会有设定多个参数的设计,主要用于检查是否是支持使用优化版本的设计,主要用于检查是否是支持使用优化版本的设计。
在driver驱动层中会进行判断来确认是否执行优化版本的高性能池化函数,并且对于interface接口层利用c++语言的继承多态特性提供拓展性,用于未来对池化的某些特定情况的优化需求提供很强的适配能力。
在interface接口层,根据输入的情况不同,调用driver驱动层函数时会有不同的处理。
除此之外,在interface接口层为了适配上层的多线程调用模式而预留了设定线程号和线程数的接口,从而在调用的时候可以可选的使用多线程的调用方式。
(2)driver驱动层函数:请结合图2所示,图2中,标号A所指的最外侧部分含有填充情况,需要计算的大小和有效数据的大小不同,需要单独处理;标号B所指的内侧部分区域需要计算的大小和有效数据的大小相同,行内循环连续处理;标号C所指的中间部分区域为图像数据的实际尺寸大小。driver驱动层函数在interface接口层通过不同的参数设定配置好了结构体之后可以调用,由于interface接口层参数的确认,在driver驱动层处可以得到策略的确认,确定真正的池化参数会进行的具体特征,在这一步,面对不同的填充情况,不同的池化区域的跨度大小还有池化区域大小进行具体的计算。
在driver驱动层,通过interface接口层的输入确定,后续在池化的区域滑动过程循环中的跨度值,通过通道的数量确定下一个列向单个元素的跨度,通过每行中需要做的计算数量乘以列的跨度得到行之间的跨度,并以此内推得到图像到图像点之间的跨度定义,这不仅是针对输入图,同样也包含了输出图的。
在driver驱动层的参数处理函数之后是主要的外部逻辑调用区域,将池化区域覆盖计算的区域看作为池化片,并以一整行的输出池化片作为一个内部计算调用,并将纵向的循环进行多线程的优化,在多线程的情况,在通用的池化计算中,每个线程将单独负责一行结果的计算,将采用对于输出的纬度进行反向的获取输入范围,并且需要对于填充的处理需要有不同,主要区分考虑顶部和底部的填充。
对于输出行中,和调用kernel汇编层函数之前,根据具体计算涉及函数的纬度计算具体设计的池化片数量,并以池化片数量作为driver驱动层的最后循环计算,在driver驱动层中得到一个池化片中需要计算的数据点数目,并结合需要计算的通道数目,以及输入输出的数据地址作为参数调用kernel汇编层。
需要注意的是,输入的地址并不是原来的输入地址,而是将每个数据点的第一个深度的值的地址存在连续的指针数组中传入,还有池化片所覆盖的数目量作为区域计算数据数目在平均池化中会被需要作为参数传入kernel汇编层中计算。
(3)kernel汇编层函数:其作为内核层函数,被driver驱动层进行反复调用,kernel汇编层函数利用直接编写汇编指令的形式,基于ARMv8 Armv9架构特征,在汇编级别利用SIMD技术、流水线技术、循环展开技术进行性能调优,通过重新排布取数写会的IO指令和计算指令的排布顺序,尝试使用计算指令掩盖访存延迟,保证kernel汇编层函数时CPU中较高的计算时间与总时间的比。
所述kernel汇编层函数中,SVE提供16个预测寄存器,每个预测寄存器使用1位来保存向量寄存器一个字节的信息,向量寄存器具体工作请参见图3所示。使用过程中,可以制定使用置零或者融合的格式来处理双向运算符运算情形,通过使用预测寄存器控制循环边界情况,减少频繁的迭代器更新以及分支判断情况;除此之外,SVE共有32个变长向量寄存器,每个向量寄存器的向量长由设备而定;在kernel汇编层汇编代码中,主题循环最大将用到16个向量寄存器主要运算,用到4个预测寄存器作为边界迭代情况控制,同时还有1个预测寄存器作为运算范围和模式控制。
kernel汇编层描述所使用的循环展开和软件流水线技术实现如下:
循环展开部分将计算展开成四次,在最终进行余量收尾,还拓展了在向量长方向上的展开,因为内部的计算逻辑用向量的长度来迭代通道的数量通道,而通过同时对与像素点大小比较部分的循环四路展开以及在通道数方向上进行循环展开从而解决了使得单次迭代中的指令数目增加,减少了分支预测的次数。
对于硬件,可以更多的指令参与乱序发射、乱序执行,这样硬件资源使用率更高。
对于软件,可以进行指令重排,尤其是可以手动的进行指令重排,手工的重排代码来避免“访存-计算”数据依赖关系。
再参阅图4所示,本申请实施例还提供一种电子设备600,电子设备600包括处理器601,存储器602,存储在存储器602上并可在所述处理器601上运行的程序或指令,该程序或指令被处理器601执行时实现上述基于SVE指令集的池化层函数的高性能实现方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
需要说明的是,本申请实施例中的第一电子设备包括上述所述的移动电子设备和非移动电子设备。
图5为实现本申请实施例的一种电子设备的硬件结构示意图。
该电子设备700包括但不限于:射频单元701、网络模块702、音频输出单元703 、输入单元704、传感器705、显示单元706、用户输入单元707 、接口单元708、存储器709、以及处理器710等部件。
本领域技术人员可以理解,电子设备700还可以包括给各个部件供电的电源(比如电池),电源可以通过电源管理系统与处理器710逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。图5中示出的电子设备结构并不构成对电子设备的限定,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置,在此不再赘述。
应理解的是,本申请实施例中,输入单元704可以包括图形处理器(GraphicsProcessing Unit,GPU)7041和麦克风7042,图形处理器7041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。显示单元706可包括显示面板7061,可以采用液晶显示器、有机发光二极管等形式来配置显示面板7061。用户输入单元707包括触控面板7071以及其他输入设备7072。触控面板7071,也称为触摸屏。触控面板7071可包括触摸检测装置和触摸控制器两个部分。其他输入设备7072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。存储器709可用于存储软件程序以及各种数据,包括但不限于应用程序和操作系统。处理器710可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器710中。
本申请实施例还提供一种可读存储介质,所述可读存储介质上存储有程序或指令,该程序或指令被处理器执行时实现上述基于SVE指令集的池化层函数的高性能实现方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
其中,所述处理器为上述实施例中所述的电子设备中的处理器。所述可读存储介质,包括计算机可读存储介质,如计算机只读存储器(Read-Only Memory, ROM)、随机存取存储器(Random Access Memory, RAM)、磁碟或者光盘等。
本申请实施例另提供了一种芯片,所述芯片包括处理器和通信接口,所述通信接口和所述处理器耦合,所述处理器用于运行程序或指令,实现上述基于SVE指令集的池化层函数的高性能实现方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
应理解,本申请实施例提到的芯片还可以称为系统级芯片、系统芯片、芯片系统或片上系统芯片等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本申请实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。
Claims (10)
1.一种基于SVE指令集的池化层函数的高性能实现方法,其特征在于,支持SVE指令集的Armv8、Armv9架构平台是基于富岳超级计算机使用的富士通 A64FX Soc或者倚天710的X2架构进行设计,使用interface接口代码-driver驱动运行代码-kernel汇编核心代码的三层代码设计框架,主要是针对NHWC存储格式的数据的优化实现,因此针对的是通道优先的池化操作,具体实现如下:
(1)interface接口层函数:其面向所有池化函数类型的调用,判断是否是通用池化操作的策略设定;在interface接口层中会有设定多个参数的设计,主要用于检查是否是支持使用优化版本的设计;在driver驱动层中会进行判断来确认是否执行优化版本的高性能池化函数,并且对于interface接口层利用c++语言的继承多态特性提供拓展性;
(2)driver驱动层函数:其在interface接口层通过不同的参数设定配置好结构体之后调用,由于interface接口层参数的确认,在driver驱动层处得到策略的确认,确定真正的池化参数会进行的具体特征,在这一步,面对不同的填充情况,不同的池化区域的跨度大小还有池化区域大小进行具体的计算;
(3)kernel汇编层函数:其作为内核层函数,被driver驱动层进行反复调用,kernel汇编层函数利用直接编写汇编指令的形式,基于ARMv8 Armv9架构特征,在汇编级别利用SIMD技术、流水线技术、循环展开技术进行性能调优,通过重新排布取数写会的IO指令和计算指令的排布顺序,尝试使用计算指令掩盖访存延迟,保证kernel汇编层函数时CPU中较高的计算时间与总时间的比。
2.根据权利要求1所述的方法,其特征在于,在interface接口层函数中,在interface接口层,根据输入的情况不同,调用driver驱动层函数时会有不同的处理,除此之外,在interface接口层为了适配上层的多线程调用模式而预留了设定线程号和线程数的接口,从而在调用的时候可选的使用多线程的调用方式。
3.根据权利要求2所述的方法,其特征在于,在driver驱动层函数中,在driver驱动层,通过interface接口层的输入确定,后续在池化的区域滑动过程循环中的跨度值,通过通道的数量确定下一个列向单个元素的跨度,通过每行中需要做的计算数量乘以列的跨度得到行之间的跨度,并以此内推得到图像到图像点之间的跨度定义。
4.根据权利要求3所述的方法,其特征在于,在driver驱动层的参数处理函数之后是主要的外部逻辑调用区域,将池化区域覆盖计算的区域看作为池化片,并以一整行的输出池化片作为一个内部计算调用,并将纵向的循环进行多线程的优化,在多线程的情况,在通用的池化计算中,每个线程将单独负责一行结果的计算,将采用对于输出的纬度进行反向的获取输入范围,并且需要对于填充的处理需要有不同,主要区分考虑顶部和底部的填充。
5.根据权利要求4所述的方法,其特征在于,对于输出行中,和调用kernel汇编层函数之前,根据具体计算涉及函数的纬度计算具体设计的池化片数量,并以池化片数量作为driver驱动层的最后循环计算,在driver驱动层中得到一个池化片中需要计算的数据点数目,并结合需要计算的通道数目,以及输入输出的数据地址作为参数调用kernel汇编层;输入的地址并不是原来的输入地址,而是将每个数据点的第一个深度的值的地址存在连续的指针数组中传入,还有池化片所覆盖的数目量作为区域计算数据数目在平均池化中会被需要作为参数传入kernel汇编层中计算。
6.根据权利要求5所述的方法,其特征在于,所述interface接口层函数还包括跨度、填充和池化区域的结构设计。
7.根据权利要求1所述的方法,其特征在于,实现于支持SVE指令集的处理器平台上,使用ARM最新的SIMD拓展指令集SVE,支持高达2048位的向量处理器进行运算;在使用SVE指令集操作向量处理单元在处理16个数据时,一次读取16个单精度浮点类型数据。
8.根据权利要求7所述的方法,其特征在于,所述处理器平台包括倚天710和富岳超级计算机的富士通A64FX。
9.根据权利要求1所述的方法,其特征在于,所述kernel汇编层函数中,SVE提供16个预测寄存器,每个预测寄存器使用1位来保存向量寄存器一个字节的信息,使用过程中,制定使用置零或者融合的格式来处理双向运算符运算情形,通过使用预测寄存器控制循环边界情况,减少频繁的迭代器更新以及分支判断情况;除此之外,SVE共有32个变长向量寄存器,每个向量寄存器的向量长由设备而定;在kernel汇编层汇编代码中,主题循环最大将用到16个向量寄存器主要运算,用到4个预测寄存器作为边界迭代情况控制,同时还有1个预测寄存器作为运算范围和模式控制。
10.根据权利要求1所述的方法,其特征在于,kernel汇编层描述所使用的循环展开和软件流水线技术实现如下:
循环展开部分将计算展开成四次,在最终进行余量收尾,还拓展了在向量长方向上的展开;对于硬件,更多的指令参与乱序发射、乱序执行;对于软件,进行指令重排。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310132475.5A CN115878188B (zh) | 2023-02-20 | 2023-02-20 | 一种基于sve指令集的池化层函数的高性能实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310132475.5A CN115878188B (zh) | 2023-02-20 | 2023-02-20 | 一种基于sve指令集的池化层函数的高性能实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115878188A true CN115878188A (zh) | 2023-03-31 |
CN115878188B CN115878188B (zh) | 2023-05-05 |
Family
ID=85761300
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310132475.5A Active CN115878188B (zh) | 2023-02-20 | 2023-02-20 | 一种基于sve指令集的池化层函数的高性能实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115878188B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117093268A (zh) * | 2023-10-19 | 2023-11-21 | 超睿科技(长沙)有限公司 | 一种向量处理方法、系统、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150234966A1 (en) * | 2014-02-18 | 2015-08-20 | Codasip S.R.O. | Method and an apparatus for automatic generation of verification environment for processor design and verification |
CN105808309A (zh) * | 2016-03-08 | 2016-07-27 | 中国科学院软件研究所 | 一种基于申威平台的基础线性代数库blas三级函数gemm的高性能实现方法 |
US20200159534A1 (en) * | 2017-08-02 | 2020-05-21 | Intel Corporation | System and method enabling one-hot neural networks on a machine learning compute platform |
CN112734040A (zh) * | 2021-01-22 | 2021-04-30 | 中国人民解放军军事科学院国防科技创新研究院 | 一种嵌入式人工智能计算框架及应用方法 |
CN114418827A (zh) * | 2021-12-21 | 2022-04-29 | 北京奇艺世纪科技有限公司 | 一种基于gpu的深度学习算法的性能优化方法及装置 |
-
2023
- 2023-02-20 CN CN202310132475.5A patent/CN115878188B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150234966A1 (en) * | 2014-02-18 | 2015-08-20 | Codasip S.R.O. | Method and an apparatus for automatic generation of verification environment for processor design and verification |
CN105808309A (zh) * | 2016-03-08 | 2016-07-27 | 中国科学院软件研究所 | 一种基于申威平台的基础线性代数库blas三级函数gemm的高性能实现方法 |
US20200159534A1 (en) * | 2017-08-02 | 2020-05-21 | Intel Corporation | System and method enabling one-hot neural networks on a machine learning compute platform |
CN112734040A (zh) * | 2021-01-22 | 2021-04-30 | 中国人民解放军军事科学院国防科技创新研究院 | 一种嵌入式人工智能计算框架及应用方法 |
CN114418827A (zh) * | 2021-12-21 | 2022-04-29 | 北京奇艺世纪科技有限公司 | 一种基于gpu的深度学习算法的性能优化方法及装置 |
Non-Patent Citations (1)
Title |
---|
姜浩;杜琦;郭敏;全哲;左克;王锋;杨灿群;: "面向ARMv8 64位多核处理器的QGEMM设计与实现", 计算机学报 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117093268A (zh) * | 2023-10-19 | 2023-11-21 | 超睿科技(长沙)有限公司 | 一种向量处理方法、系统、设备及存储介质 |
CN117093268B (zh) * | 2023-10-19 | 2024-01-30 | 超睿科技(长沙)有限公司 | 一种向量处理方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115878188B (zh) | 2023-05-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2019127731A1 (zh) | 卷积神经网络硬件加速装置及卷积计算方法及存储介质 | |
KR20210082058A (ko) | 콘볼루션 신경망들을 구현하기 위한 구성 가능형 프로세서 엘리먼트 어레이들 | |
KR101076245B1 (ko) | 상대 주소 발생 | |
AU2016203619A1 (en) | Layer-based operations scheduling to optimise memory for CNN applications | |
CN110073329A (zh) | 访存设备、计算设备和应用于卷积神经网络运算的设备 | |
CN113743599B (zh) | 一种卷积神经网络的运算装置及服务器 | |
CN113220630B (zh) | 一种硬件加速器的可重构阵列优化方法及自动调优方法 | |
CN112667289B (zh) | 一种cnn推理加速系统、加速方法及介质 | |
CN111767986A (zh) | 一种基于神经网络的运算方法及装置 | |
CN112074847A (zh) | 拆分用于在神经网络处理器中处理的输入数据 | |
CN112784970B (zh) | 一种硬件加速器、数据处理方法、系统级芯片及介质 | |
Zhang et al. | Locality based warp scheduling in GPGPUs | |
CN115878188A (zh) | 一种基于sve指令集的池化层函数的高性能实现方法 | |
CN110232665B (zh) | 最大池化方法、装置、计算机设备及存储介质 | |
WO2016024508A1 (ja) | マルチプロセッサ装置 | |
EP3885942A1 (en) | Methods, apparatus, articles of manufacture to perform accelerated matrix multiplication | |
CN113157638A (zh) | 一种低功耗存储器内计算处理器和处理运算方法 | |
CN111340224B (zh) | 适用于低资源嵌入式芯片的cnn网络的加速设计方法 | |
CN115170381A (zh) | 一种基于深度学习的视觉slam加速系统及方法 | |
US11221851B2 (en) | Method executed by computing device, apparatus, device and computer-readable storage medium | |
CN114021733A (zh) | 模型训练优化方法、装置、计算机设备及存储介质 | |
CN106021175B (zh) | 控制处理系统中的处理器之间的数据流 | |
US20130339660A1 (en) | Method and apparatus for a partial-address select-signal generator with address shift | |
CN113177877B (zh) | 一种面向slam后端优化的舒尔消除加速器 | |
CN112257843B (zh) | 一种基于MobileNetV1网络推理任务的扩展指令集的系统 |
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 |