CN108932135A - 基于fpga的分类算法的加速平台设计方法 - Google Patents
基于fpga的分类算法的加速平台设计方法 Download PDFInfo
- Publication number
- CN108932135A CN108932135A CN201810698823.4A CN201810698823A CN108932135A CN 108932135 A CN108932135 A CN 108932135A CN 201810698823 A CN201810698823 A CN 201810698823A CN 108932135 A CN108932135 A CN 108932135A
- Authority
- CN
- China
- Prior art keywords
- accelerator
- fpga
- algorithm
- vector
- sorting
- 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
- 230000001133 acceleration Effects 0.000 title claims abstract description 50
- 238000000034 method Methods 0.000 title claims abstract description 27
- 239000013598 vector Substances 0.000 claims abstract description 41
- 238000013461 design Methods 0.000 claims abstract description 31
- 238000004458 analytical method Methods 0.000 claims abstract description 10
- 238000005516 engineering process Methods 0.000 claims abstract description 9
- 238000011161 development Methods 0.000 claims abstract description 8
- 230000006870 function Effects 0.000 claims description 23
- 238000004364 calculation method Methods 0.000 claims description 15
- 238000013507 mapping Methods 0.000 claims description 10
- 230000007246 mechanism Effects 0.000 claims description 7
- 238000012360 testing method Methods 0.000 claims description 7
- 230000001351 cycling effect Effects 0.000 claims description 3
- 230000001419 dependent effect Effects 0.000 claims description 3
- 238000000605 extraction Methods 0.000 claims description 3
- 238000005259 measurement Methods 0.000 claims description 2
- 230000005540 biological transmission Effects 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 238000012546 transfer Methods 0.000 description 8
- 238000012549 training Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 6
- 238000004880 explosion Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 238000005265 energy consumption Methods 0.000 description 3
- 239000012141 concentrate Substances 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000012706 support-vector machine Methods 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 241001269238 Data Species 0.000 description 1
- 210000003484 anatomy Anatomy 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 238000003066 decision tree Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000011022 operating instruction Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本发明公开了一种基于FPGA的分类算法的加速平台设计方法,加速平台包括:使用profiling技术分析类中心向量算法、K‑近邻算法以及朴素贝叶斯算法并得到热点代码;分析三种分类算法的热点代码并适当修改以提取其中的共同逻辑;分析FPGA平台的资源和特性,采用流水线和并行手段来优化加速器运算单元,设计出硬件加速器整体框架并生成IP核;设计扩展语义的指令集并实现指令集对应的各个功能逻辑部件,通过指令的取指、译码、执行的操作完成关键代码的功能;移植操作***到开发板,编写各个硬件设备的驱动,在操作***下完成软硬件的协同工作。本发明支持多种分类算法,提高了***的扩展性和灵活性,编程者可以利用已有的FPGA资源轻松获得良好的性能。
Description
技术领域
本发明涉及一种算法的硬件加速平台,具体涉及一种扩展性和灵活性高的基于FPGA的分类算法的加速平台及其设计方法。
背景技术
随着个人计算机的普及,互联网得到了快速的发展,随之而来的大量电子信息变得难以处理。当前信息科学和技术领域关注的焦点之一,就是通过有效地组织和管理这些电子信息,并快速、准确、全面地从中找到用户所需要的信息。分类算法作为处理和分类大量数据的关键技术,可以在较大程度上解决信息杂乱现象的问题,方便用户准确地定位所需的信息和分流信息。而且作为信息过滤、信息检索、搜索引擎、文本数据库、数字化图书馆等领域的技术基础,分类技术有着广泛的应用前景。
目前分类算法中,集成学习是国内外学者的研究热点,集成学习主要是按照一定的规则组合单一分类器来解决问题,算法有Bagging, Boosting。而在单一分类算法中,不同的分类算法都有各自的特点。如支持向量机(SVM)具有很高的准确率,可以再在没有背景信息的数据集上获得很好的效果。相比之下,决策树则可以很好的解释建立的模型。因此在不同的数据、背景和需求下,需要用不同的分类算法才能达到更好的效果。
如今在大数据时代,海量高维度的数据大大减慢了分类算法的效率,严重制约着各行各业的发展。随着数据的大量激增和人们对关键信息的迫切需求,如何快速而高效地完成对信息的提取和分类显得尤为重要。因此分类算法的高性能实现也成为人们研究的重要课题。相比于传统的计算机***,多核异构计算平台集成了可重构的逻辑单元,结合了异构多核平台和可重构技术的特点,可针对应用程序的动态执行过程来进行硬件平台的重新配置,具备更高的灵活性同时更易于扩展,满足了大数据时代的需求,因此基于GPU与FPGA的异构计算***成为处理大数据应用的一种有效框架。
相对于在算法层面上对算法进行优化改进的困难,研究人员已经在硬件层面上取得了有效的进展。目前分类算法加速的主要手段有云计算平台和硬件加速平台,其中云计算平台由大量同构的基于CPU的单节点服务器构成,多个节点之间互相配合、协同工作。云计算平台编程模型大体上可以分为基于Map-Reduce计算模型和基于图的计算模型两种,两种计算模型的本质都是利用任务级并行和数据级并行的手段将任务进行划分,然后将划分好的任务和数据分配给分布在云端上的分布式计算机上,这些分布式计算机完成任务计算后将结果返回到云计算平台中的宿主机上。云计算平台虽然能取得良好的加速效果,但是对于其云端上的某一节点而言计算效率偏低,并且加速效果也受到网络带宽的限制,其加速的成本也比较高,能耗开销也非常大。硬件加速平台包含通用图形处理器 GPGPU(General Purpose Graphics Processing Unit)、专用集成电路ASIC(ApplicationSpecific Integrated Circuit)以及现场可编程逻辑门阵列FPGA(Field ProgrammableGate Array)。其中GPU拥有大量硬件级线程以及大量并行处理单元,因此常被应用于计算复杂且可并行的图形处理领域,利用数据级并行的模式来加速各种应用的执行。目前,针对GPGPU平台提出和实现的诸如CUDA、OpenCL和OpenACC等编程规范,大大降低了基于GPGPU的应用的开发门槛,也使得GPGPU成为了目前也较为广泛使用的加速并行平台。GPUGPU平台有着良好的加速效果但同样避免不了高能耗开销,并且此外,为了增强通用性,GPU芯片集成很多算法用不到的功能部件,这样带来了芯片资源消耗和额外不小的开销。为了减少功耗开销同时兼顾较高的计算效率,最好的办法是设计一个专用的硬件加速结构。ASIC和FPGA平台便是专用的硬件加速平台。其中ASIC是专门用来集成电路,其电路结构完成后不能再修改,只能适合特定的应用。而FPGA相对于ASIC,具有可重构性,用户可动态重构FPGA上功能模块,灵活性较好,而且对开发人员要求相对较低、开发周期短等特点。因此我们选取FPGA平台作为分类算法硬件加速器的搭载平台。
目前国内外对FPGA加速器的通用性和灵活性上面关注的不多,而经常集中在研究单一特定的算法上的加速效果上。因此我们旨在设计一个基于FPGA的通用的分类算法加速器。
我们选取了朴素贝叶斯、类向量中心、K-近邻三种具有代表性的分类算法进行研究,这三种分类算法都有不同特点和应用领域。朴素贝叶斯算法的基本思路是通过计算先验概率和条件概率得到数据属于该类的概率,然后比较所有类中数据属于该类的概率,最后将结果归类到概率最大的类别当中。类中心向量算法的基本思路是计算每一类数据的中心向量,再比较数据与每类中心向量相似度的大小,最后将结果归类到相似度最大的类中。K-近邻算法通过计算一个给定的测试数据与训练数据集中每个数据的相似度,从得到的相似度中找到K个与实例最相似的训练数据。这K个训练数据中多数属于某个类,就把实例分为这个类中。
发明内容
针对上述存在的技术问题,本发明目的是:提供一个基于FPGA的分类算法的加速平台,能够支持多种分类算法,提高了***的扩展性和灵活性,使得不具备硬件知识的编程者可以利用已有的FPGA资源轻松获得良好的性能
本发明的技术方案是:
一种基于FPGA的分类算法的加速平台,其中包括了通用处理器,存储模块以及FPGA。其中通用处理器负责传输数据和控制加速器,存储模块负责暂存数据以供通用处理器和加速器处理,FPGA是主要的负责热点代码计算。设计方法包括以下步骤:
S01:使用profiling技术分析类中心向量算法、K-近邻算法以及朴素贝叶斯算法并得到热点代码;
S02:分析三种分类算法的热点代码并适当修改以提取其中的共同逻辑;
S03:分析FPGA平台的资源和特性,采用流水线和并行手段来优化加速器运算单元,设计出硬件加速器整体框架并生成IP核;
S04:设计扩展语义的指令集并实现指令集对应的各个功能逻辑部件,通过指令的取指、译码、执行的操作完成关键代码的功能;
S05: 移植操作***到开发板,编写各个硬件设备的驱动,在操作***下完成软硬件的协同工作。
优选技术方案中,所述步骤S01中FPGA的硬件资源,包括逻辑单元与存储单元,都是有限的。为了充分利用FPGA的硬件资源,我们在进行类中心向量、K-近邻、朴素贝叶斯这三种分类算法的通用加速器设计之前,首先需要这三种分类算法进行剖析,从中提取算法耗时长的关键代码来实现在FPGA上。
利用profiling技术分析三种分类算法在不同的数据集下各个函数执行时间占比;
对测试的结果集进行统计,求出各个函数的平均执行时间占比;
将时间占比超过设定阈值的函数作为热点代码。
优选技术方案中,所述步骤S02中为进一步减少FPGA硬件资源消耗,我们对这三种分类算法的关键代码进行解析,找出算法之间的相同的逻辑功能,这样仅需硬件化这些逻辑功能就能完成部分运算的复用,避免FPGA上面逻辑单元的重复和浪费,节省了FPGA上面的硬件资源。对三种分类算法的剖析可以看出,三种算法都具有一些相同的逻辑,特别是向量间相似度的计算和最小值的查找,但是仍然有些不同,如KNN算法是查找最小的K个值而不是最小值,贝叶斯算法是概率计算而不是相似度计算。为了更加有效的利用FPGA的硬件资源,并增加加速器的灵活性,我们将这两处不同的逻辑进行了修改,使其得以复用。
优选技术方案中,所述步骤S03中,由于热点分析中我们可以看出,向量之间相似度计算是关键代码,因此加速器设计主要为这个关键代码进行优化加速。向量之间相似度的度量有一些复用逻辑,我们发现全部五种相似度度量,欧几里德距离、曼哈顿距离、杰卡德相似系数、余弦相似度和皮尔逊相关系数,只需要Sx、Sy、Sx-y、Sx2、Sy2、S(x-y)2、Sxy和Nxy这几种中间变量的计算,而这些标量都是通过两个向量操作后累加起来的,因此我们可以在加速器设计当中实现一个累加器用来计算相似度中间变量,这样就简化了加速器结构,并使其更易于流水化,提高了加速器性能。由于在计算相似度时,向量之间不存在依赖关系,我们可以采用多个并行的IP核来计算向量相似度。
优选技术方案中,所述步骤S04中加速器相关指令分类三大类,输入输出指令、计算指令和控制指令。
输入输出指令主要是从DMA读出与写回操作,主要包含对标量的输入输出,对向量的输入输出以及对向量组的输入输出;
计算指令主要是调用加速器部件进行计算;
控制指令用来控制指令流的走向,实现复杂的循环跳转逻辑。
优选技术方案中,所述步骤S05包括以下步骤:
在驱动的编写中,采用访问Linux字符设备的方式访问各个硬件设备;
在DMA的驱动编写中采用映射机制进行数据填充;
所述映射机制为在内存中预留出一段连续的物理内存,将其映射到内核空间中的一段地址中,然后将该段内核空间地址映射到用户空间。
与现有技术相比,本发明的优点是:
本文通过对三种不同的算法进行热点分析,提取关键代码并找出关键代码之间的共同逻辑,将其硬件化并烧写至FPGA平台上。在接口层面,本文为了提高加速器的适用性,编写了加速器相关设备驱动程序以及用户层接口以供上层调用。同时,本文将加速器与其他平台进行对比分析,得出加速器的性能、功率、能耗等指标。实验结果表明该加速器具有良好的加速性能以及较低的功耗开销。
附图说明
下面结合附图及实施例对本发明作进一步描述:
图1是本发明实施例的加速***平台的设计流程图;
图2是本发明实施例的加速***平台的类中心算法热点剖析图;
图3是本发明实施例的加速***平台的K-近邻算法热点剖析图;
图4是本发明实施例的加速***平台的朴素贝叶斯算法热点剖析图;
图5是本发明实施例的加速***平台的加速器***结构图;
图6是本发明实施例的加速***平台的加速器结构图;
图7是本发明实施例的加速***平台的相似度计算IP设计图;
图8是本发明实施例的加速***平台IP核结构图;
图9是本发明实施例的加速***平台累加单元的图;
图10是本发明实施例的加速***平台的指令集设计图;
图11是本发明实施例的加速***平台的DMA驱动程序封装图;
图12是本发明实施例的加速***平台的接口说明图;
图13是本发明实施例的加速***平台的映射机制下DMA传送数据的流程图。
具体实施方式
以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限于限制本发明的范围。实施例中采用的实施条件可以根据具体厂家的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。
实施例:
本发明实施例中的深度神经网络加速平台包括通用处理器、现场可编程门阵列以及存储模块,其中,FPGA和通用处理器之间的数据通路可以采用PCI-E总线协议、AXI总线协议等。本发明实施例附图数据通路采用AXI总线协议为例说明,但本发明并不限于此。
图1是本发明实施例的加速***平台的设计流程图,包括的步骤如下:
使用profiling技术分析类中心向量算法、K-近邻算法以及朴素贝叶斯算法并得到热点代码;
分析三种分类算法的热点代码并适当修改以提取其中的共同逻辑;
分析FPGA平台的资源和特性,采用流水线和并行手段来优化加速器运算单元,设计出硬件加速器整体框架并生成IP核;
设计扩展语义的指令集并实现指令集对应的各个功能逻辑部件,通过指令的取指、译码、执行的操作完成关键代码的功能;
移植操作***到开发板,编写各个硬件设备的驱动,在操作***下完成软硬件的协同工作。
图2是本发明实施例的加速***平台的类中心算法热点剖析图,可知向量相似度计算占用的时间比例最大,为82.37%~96.74%,而类中心向量计算和查找最小值计算分别占用时间比例为2.13%~11.41%和1.13%~6.22%。因此向量相似度计算是计算的热点,也是实现硬件加速的关键代码。同时表中可以看出Manhattan距离度量方式相似度计算时间占用比相对其他相似度计量方式时间占用比要低,因为它仅涉及向量的减法、求绝对值以及标量求和的操作,比其他相似度计量的计算复杂度低。
图3是本发明实施例的加速***平台的K-近邻算法热点剖析图,K-近邻算法计算过程主要包含类向量相似度的计算以及相似度查找最小值这二个阶段。K-近邻算法第一阶段对测试数据与训练集所有数据进行相似度比较。第二阶段则查找K个相似度最小的训练集数据,最后将测试数据归于K个训练数据中类别最多的。我们针对K-近邻算法的不同相似度计算方式进行热点剖析得到如图所示。表中Similarity Calculation为向量之间相似度的计算,KMin为查找K个相似度最小值计算。可知向量相似度的计算占用的时间比例最大,为93.42%~98.91%,查找最小值计算占用时间比例为1.09%~6.58%。因此和类中心向量算法一样,向量相似度计算是计算的热点,也是实现硬件加速的关键代码。
图4是本发明实施例的加速***平台的朴素贝叶斯算法热点剖析图,朴素贝叶斯算法总体计算过程主要包含类概率的计算以及查找最小值这二个部分。第一阶段计算先验概率和条件概率,第二阶段找概率最大的类别来分类测试数据。我们针对朴素贝叶斯算法进行热点剖析得到结果如图所示。表中Probability Calculation为向量概率的计算,Min为查找最小值计算。概率计算占用的时间比例最大,为98.86%,查找最小值计算占用时间比例为1.14%。同样的,概率计算是计算的热点,也是实现硬件加速的关键代码。
图5是本发明实施例的加速***平台的加速器***结构图,我们设计的***是基于FPGA上的分类算法的通用硬件加速***。硬件加速***的层次结构图如图所示。整个***设计最终是面向用户的,上层用户需要通过应用程序调用加速器接口来进行对算法的加速。我们最初设计的是一个底层的硬件加速***,包括DMA和IP核,DMA完成数据传输,IP核则是完成相关计算。为了完成用户的需求,我们需要一层层的向上层进行延伸。以Linux***为例,在内核空间层,为了实现操作***与硬件加速器关联,需要编写设计相关的设备驱动程序,如加速器内核驱动和DMA内核驱动,使得操作***能够通过驱动程序控制硬件加速器的运行。再往上一层,就是用户空间层,我们必须提供相应的接口给应用程序调用,以满足用户的需求。图中层次结构分为3层,包括用户接口层、内核驱动层和硬件加速层。其中硬件加速层包含了IP核和DMA等相关设备,主要功能是控制IP核读取DMA传输的数据并进行计算,最后将计算结果传回给DMA。内核驱动层包含了内核空间中DMA内核驱动和IP核内核驱动,用来对IP核的计算和DMA的读写进行控制。最后用户接口层提供了加速器接口,IP核接口以及DMA接口,还封装了运行时库以方便用户的调用。
图6是本发明实施例的加速***平台的加速器结构图,加速平台整体结构由HostPC、DDR RAM和加速器组成,其中宿主PC由控制总线通过加速器内的控制单元管理加速器内的多个IP核的运算以及DMA的数据传输。DMA可以替代宿主CPU管理DDR RAM和IP核之间的数据传输,这样宿主PC可以在DMA数据传输时执行别的任务,节省了CPU资源。在加速器内部,每个IP核都配有一个DMA,这样就保证了IP核在并行运行的同时数据能够并行传输。在设计加速器时,我们发现在各个IP核执行相同的任务计算时仅仅只有输入向量上的差别,而数据上的区别不会对各个IP核运行的时间造成太大的影响,因此我们采用单指令多数据流(Single Instruction Multiple Data,SIMD)的方式设计加速器,各个IP核之间以SMID模式执行整个计算任务。这样可以简化硬件逻辑设计,也保证了每个IP核的运行效率。
图7是本发明实施例的加速***平台的相似度计算IP设计图,其主要包含:
I/O模块;
中央存储单元;
算术单元;
累加单元。
I/O模块负责IP核中数据的输入和输出,中央存储单元则用来存储输入向量、中间变量、训练数据和最终分类结果。而Ethernet控制器通过控制总线来调控I/O模块的输入输出,算术单元和累加单元的计算。累加单元和算术单元均可读取中央存储单元中的数据来进行运算并返回结果到中央存储单元。最终结果通过输出模块写回至DMA。
加速器内部的控制单元Controller控制着加速器内的IP核运算以及DMA的数据传输,它是通过指令集来实现这一点的。指令集是由用户编写来控制管理加速器的,它通过宿主PC填写至控制单元内部的指令缓存当中的。为了保证指令的逐条的执行,程序计数器(Program Counter,PC)以及存储重要信息的寄存器组,如存储向量长度的寄存器组,也都被设计实现在控制单元里面。加速器内部的IP核运行由DMA传输来的存储在DDR RAM中数据,并返回计算结果到DMA,最后DMA传输计算结果并存储回DDR RAM。可以说IP核承包了大部分的计算,其结构图8所示。
累加单元和算术单元均可读取中央存储单元中的数据来进行运算并返回结果到中央存储单元。最终结果通过输出模块写回至DMA。其中累加单元的整体设计如图9所示,从结构上我们可以看出累加单元主要完成向量之间相似度计算中关键的中间标量,包括Sx、Sy、Sx-y、Sx2、Sy2、S(x-y)2、Sxy和Nxy,并将它们存至缓存中,我们可以注意到Sx+y并不属于任何相似度计算中的中间标量,在这里它被用来计算类中心向量算法中的和中心,这样和中心的计算和向量间相似度的计算共用硬件逻辑了,就不用再浪费硬件资源设计和中心的计算了,同时也保证了效率。累加单元的结构包含三部分,多功能单元、缓存和累加树,如图9所示。
图10是本发明实施例的加速***平台的指令集设计图,加速器相关指令分类三大类,输入输出指令、计算指令和控制指令。输入输出指令主要是从DMA读出与写回操作,主要包含对标量的输入输出,对向量的输入输出以及对向量组的输入输出。计算指令主要是调用加速器部件进行计算,控制指令用来控制指令流的走向,实现复杂的循环跳转逻辑。输入指令均为一操作数指令,主要用于将数据从DMA中存到加速器缓存中,其中操作数代表着对应缓存中相应标量,指令并没有指定源操作数,这是因为FPGA的数据总线是AXI4-Stream总线,这个总线用于DMA和加速器之间的数据传输,是一个点到点的无地址信息类型的数据总线。同样的,输出指令也是一操作数指令,用于将数据从加速器缓存写回到DMA中。计算指令是运算模块的指令,分别是代表使用加速器累加模块计算的AC类指令以及代表使用加速器算术模块计算的AR类指令,因为是粗粒度指令,它们均没有操作数,只是用来使能模块计算。控制指令则用来实现代码的循环和跳转,它们都没有操作数,这是因为对这些指令来说,它们所需的数值都是存在固定的地址的,可以直接读取,例如cmp指令,它是用于判断选取哪种相似度度量,它将case与常数值比较,相等就执行下一步指令,不相等就执行下下步指令,case的值存储在固定地址中。
图11是本发明实施例的加速***平台的DMA驱动程序封装图,整个加速***包含多个IP核,其中有DMA、Timer以及我们设计的加速器IP核。我们所使用的FPGA开发板由Xilinx公司研发,因此Xilinx公司提供了包含相应IP核驱动程序的支持包,如DMA、Timer等。我们可以直接利用其支持包中的驱动程序,其中DMA驱动程序封装如表4.1所示,其主要封装函数为初始化函数、重置函数、状态判断函数和数据传输控制函数等。IP核的驱动程序属于字符设备,操作***内核模块可以通过insmod或rmmod命令对IP核的驱动程序进行加载或删除。用户程序是以文件的形式来对字符设备进行控制和读写,其操作对应的相关接口为open()、read()、write()、ioctl()、close()等,对着相关接口进行操作就可以完成字符设备的打开、关闭、读写以及控制。
图12是本发明实施例的加速***平台的接口说明图,加速器的调用接口有六个,分别是MyAc_start、MyAc_reset、MyAc_busy、MyAc_close、MyAc_send_instructions、MyAc_send_data和MyAc_get_data,其中参数dev_fd是指加速器对应的设备文件。前四个接口完成加速器的基本功能,如启动、重置、状态查询以及关闭等。其中查询状态接口MyAc_busy用于返回加速器当前状态,当返回值为1时,表明此时加速器正在忙碌当中,即在加速器在处理DMA传输的数据,而当返回值为0是,表明加速器正处于等待状态,随时准备等待DMA传输数据。MyAc_send_instructions接口用来将长度为length的指令数组通过DMA传输到控制单元内部的指令缓存当中,然后控制单元会逐条运行指令缓存的每一条指令,来实现对加速器内部运算单元的计算以及输入输出的控制。同样的MyAc_send_data和MyAc_get_data接口用来控制DMA传输数据。完成这些接口后,用户就可以调用接口来实现相关应用任务的计算。首先用户需要初始化包括用于计算的加速器和用于数据传输的DMA,然后获取存储初始数据和运算结果的物理基地址,将其映射到用户空间虚地址当中,再将初始数据传输至之前获取的物理地址中,同时启动DMA,DMA会从存储初始数据的物理地址中读取数据,并传输到加速器内的运算单元进行计算。由于DMA是全双工的,且加速器内部结构是流水线设计,因此DMA在传输数据给加速器的同时,加速器将计算结果传回给DMA,接着DMA写回到物理地址。最后等待DMA写回完毕,处于空闲状态时关闭所有设备文件。这就是用户调用接口的过程。
图13是本发明实施例的加速***平台的映射机制下DMA传送数据的流程图。为了缩短拷贝数据时间,我们采取了内存映射技术。采取将用户空间地址和内核空间地址进行映射的方式,即将物理空间地址映射到内核空间中的一段虚拟地址,然后这段虚拟地址将被映射到用户进程的一段地址空间中,这样就完成了从物理地址到用户空间的逻辑地址间的一次映射,此时对物理地址中的数据操作就相当于对用户空间中的数据的操作。这样只需要将所需数据拷贝至该段物理空间中,DMA就可以对用户进程空间虚拟地址所对应的实际物理地址进行数据的输入和传出,之后不再需要额外的Linux内核空间对用户进程空间的数据拷贝,仅需要完成一次拷贝就行。这种映射机制在大数据下极为有效的提高了加速器的性能。这段连续的物理地址空间是Linux内核预留的专门用于加速器传输数据的,不能用于其它任务。
上述实例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。
Claims (6)
1.基于FPGA的分类算法的加速平台设计方法,其特征在于,所述加速平台包括通用处理器,存储模块以及FPGA,其中通用处理器负责传输数据和控制加速器,存储模块负责暂存数据以供通用处理器和加速器处理,FPGA负责热点代码计算:设计方法包括以下步骤:
S01:使用profiling技术分析类中心向量算法、K-近邻算法以及朴素贝叶斯算法并得到热点代码;
S02:分析三种分类算法的热点代码并适当修改以提取其中的共同逻辑;
S03:分析FPGA平台的资源和特性,采用流水线和并行手段来优化加速器运算单元,设计出硬件加速器整体框架并生成IP核;
S04:设计扩展语义的指令集并实现指令集对应的各个功能逻辑部件,通过指令的取指、译码、执行的操作完成关键代码的功能;
S05:移植操作***到开发板,编写各个硬件设备的驱动,在操作***下完成软硬件的协同工作。
2.根据权利要求1所述的基于FPGA的分类算法的加速平台设计方法,其特征在于,所述步骤S01中进行类中心向量、K-近邻、朴素贝叶斯这三种分类算法的通用加速器设计之前,首先对这三种分类算法进行剖析,从中提取算法耗时长的关键代码来实现在FPGA上:
利用profiling技术分析三种分类算法在不同的数据集下各个函数执行时间占比;
对测试的结果集进行统计,求出各个函数的平均执行时间占比;
将时间占比超过设定阈值的函数作为热点代码。
3.根据权利要求1所述的基于FPGA的分类算法的加速平台设计方法,其特征在于,所述步骤S02中,对这三种分类算法的关键代码进行解析,找出算法之间的相同的逻辑功能:向量间相似度的计算和最小值的查找;将相同的逻辑功能硬件化,完成部分运算的复用;不同的逻辑功能:KNN算法是查找最小的K个值而不是最小值,贝叶斯算法是概率计算而不是相似度计算;将两处不同的逻辑功能进行修改,使其得以复用。
4.根据权利要求3所述的基于FPGA的分类算法的加速平台设计方法,其特征在于,所述步骤S03中,进行热点分析,得出向量之间相似度计算是关键代码,加速器设计为关键代码进行优化加速;向量之间相似度的度量有一些复用逻辑,全部五种相似度度量:欧几里德距离、曼哈顿距离、杰卡德相似系数、余弦相似度和皮尔逊相关系数,只需要Sx、Sy、Sx-y、Sx2、Sy2、S(x-y)2、Sxy和Nxy这几种中间变量的计算,这些标量都是通过两个向量操作后累加起来的,在加速器设计当中实现一个累加器用来计算相似度中间变量,简化加速器结构,并使其更易于流水化,提高加速器性能;由于在计算相似度时,向量之间不存在依赖关系,采用多个并行的IP核来计算向量相似度。
5.根据权利要求1所述的基于FPGA的分类算法的加速平台设计方法,其特征在于,所述步骤S04中,加速器相关指令分为三大类:输入输出指令、计算指令和控制指令:
输入输出指令是从DMA读出与写回操作,主要包含对标量的输入输出,对向量的输入输出以及对向量组的输入输出;
计算指令是调用加速器部件进行计算;
控制指令用来控制指令流的走向,实现复杂的循环跳转逻辑。
6.根据权利要求1所述的基于FPGA的分类算法的加速平台设计方法,其特征在于,所述步骤S05包括以下步骤:
在驱动的编写中,采用访问Linux字符设备的方式访问各个硬件设备;
在DMA的驱动编写中采用映射机制进行数据填充;
所述映射机制为在内存中预留出一段连续的物理内存,将其映射到内核空间中的一段地址中,然后将该段内核空间地址映射到用户空间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810698823.4A CN108932135A (zh) | 2018-06-29 | 2018-06-29 | 基于fpga的分类算法的加速平台设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810698823.4A CN108932135A (zh) | 2018-06-29 | 2018-06-29 | 基于fpga的分类算法的加速平台设计方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108932135A true CN108932135A (zh) | 2018-12-04 |
Family
ID=64447358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810698823.4A Pending CN108932135A (zh) | 2018-06-29 | 2018-06-29 | 基于fpga的分类算法的加速平台设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108932135A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110175107A (zh) * | 2019-05-13 | 2019-08-27 | 华中科技大学 | 一种fpga云服务器性能的测试方法及测试*** |
CN110197219A (zh) * | 2019-05-25 | 2019-09-03 | 天津大学 | 一种支持数据分类的贝叶斯分类器的硬件实现方法 |
CN110717587A (zh) * | 2019-10-11 | 2020-01-21 | 北京大学深圳研究生院 | 一种基于并行加速循环体的性能语义加速机制及其应用 |
CN111090607A (zh) * | 2019-11-15 | 2020-05-01 | 安徽中骄智能科技有限公司 | 基于智能框图封装的fpga自动化开发平台 |
WO2021041587A1 (en) * | 2019-08-28 | 2021-03-04 | Micron Technology, Inc. | Artificial intelligence accelerator |
CN113268270A (zh) * | 2021-06-07 | 2021-08-17 | 中科计算技术西部研究院 | 一种针对成对隐马尔可夫模型的加速方法、***及装置 |
CN113627490A (zh) * | 2021-07-15 | 2021-11-09 | 上海齐网网络科技有限公司 | 基于多核异构处理器的运维多模态决策方法及*** |
CN117149442A (zh) * | 2023-10-30 | 2023-12-01 | 山东浪潮数据库技术有限公司 | 一种基于分布式架构数据库的硬件加速方法及*** |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7565631B1 (en) * | 2004-07-02 | 2009-07-21 | Northwestern University | Method and system for translating software binaries and assembly code onto hardware |
CN104866286A (zh) * | 2015-06-02 | 2015-08-26 | 电子科技大学 | 一种基于OpenCL与SoC-FPGA的K近邻分类加速方法 |
CN106383695A (zh) * | 2016-09-14 | 2017-02-08 | 中国科学技术大学苏州研究院 | 基于fpga的聚类算法的加速***及其设计方法 |
CN108090560A (zh) * | 2018-01-05 | 2018-05-29 | 中国科学技术大学苏州研究院 | 基于fpga的lstm递归神经网络硬件加速器的设计方法 |
-
2018
- 2018-06-29 CN CN201810698823.4A patent/CN108932135A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7565631B1 (en) * | 2004-07-02 | 2009-07-21 | Northwestern University | Method and system for translating software binaries and assembly code onto hardware |
CN104866286A (zh) * | 2015-06-02 | 2015-08-26 | 电子科技大学 | 一种基于OpenCL与SoC-FPGA的K近邻分类加速方法 |
CN106383695A (zh) * | 2016-09-14 | 2017-02-08 | 中国科学技术大学苏州研究院 | 基于fpga的聚类算法的加速***及其设计方法 |
CN108090560A (zh) * | 2018-01-05 | 2018-05-29 | 中国科学技术大学苏州研究院 | 基于fpga的lstm递归神经网络硬件加速器的设计方法 |
Non-Patent Citations (2)
Title |
---|
和亚君等: "《SPSS 旅游统计实用教程》", 28 February 2010 * |
张惠臻等: "可重构指令集处理器的代码优化生成算法研究", 《计算机研究与发展》 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110175107A (zh) * | 2019-05-13 | 2019-08-27 | 华中科技大学 | 一种fpga云服务器性能的测试方法及测试*** |
CN110175107B (zh) * | 2019-05-13 | 2020-07-28 | 华中科技大学 | 一种fpga云服务器性能的测试方法及测试*** |
CN110197219A (zh) * | 2019-05-25 | 2019-09-03 | 天津大学 | 一种支持数据分类的贝叶斯分类器的硬件实现方法 |
CN110197219B (zh) * | 2019-05-25 | 2023-04-18 | 天津大学 | 一种支持数据分类的贝叶斯分类器的硬件实现方法 |
US11573705B2 (en) | 2019-08-28 | 2023-02-07 | Micron Technology, Inc. | Artificial intelligence accelerator |
WO2021041587A1 (en) * | 2019-08-28 | 2021-03-04 | Micron Technology, Inc. | Artificial intelligence accelerator |
CN110717587A (zh) * | 2019-10-11 | 2020-01-21 | 北京大学深圳研究生院 | 一种基于并行加速循环体的性能语义加速机制及其应用 |
CN111090607A (zh) * | 2019-11-15 | 2020-05-01 | 安徽中骄智能科技有限公司 | 基于智能框图封装的fpga自动化开发平台 |
CN113268270B (zh) * | 2021-06-07 | 2022-10-21 | 中科计算技术西部研究院 | 一种针对成对隐马尔可夫模型的加速方法、***及装置 |
CN113268270A (zh) * | 2021-06-07 | 2021-08-17 | 中科计算技术西部研究院 | 一种针对成对隐马尔可夫模型的加速方法、***及装置 |
CN113627490A (zh) * | 2021-07-15 | 2021-11-09 | 上海齐网网络科技有限公司 | 基于多核异构处理器的运维多模态决策方法及*** |
CN113627490B (zh) * | 2021-07-15 | 2024-05-28 | 上海齐网网络科技有限公司 | 基于多核异构处理器的运维多模态决策方法及*** |
CN117149442A (zh) * | 2023-10-30 | 2023-12-01 | 山东浪潮数据库技术有限公司 | 一种基于分布式架构数据库的硬件加速方法及*** |
CN117149442B (zh) * | 2023-10-30 | 2024-02-20 | 山东浪潮数据库技术有限公司 | 一种基于分布式架构数据库的硬件加速方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108932135A (zh) | 基于fpga的分类算法的加速平台设计方法 | |
Mailthody et al. | Deepstore: In-storage acceleration for intelligent queries | |
Kaeli et al. | Heterogeneous computing with OpenCL 2.0 | |
Cano et al. | High performance evaluation of evolutionary-mined association rules on GPUs | |
Lee et al. | Application codesign of near-data processing for similarity search | |
Kruliš et al. | Combining CPU and GPU architectures for fast similarity search | |
Mishra et al. | Fine-grained accelerators for sparse machine learning workloads | |
Liang et al. | Design and evaluation of a parallel k-nearest neighbor algorithm on CUDA-enabled GPU | |
Eldridge et al. | Towards general-purpose neural network computing | |
US20220114270A1 (en) | Hardware offload circuitry | |
Gadiyar et al. | Artificial intelligence software and hardware platforms | |
Choudhary et al. | Accelerating data mining workloads: current approaches and future challenges in system architecture design | |
Song et al. | Accelerating kNN search in high dimensional datasets on FPGA by reducing external memory access | |
Vokorokos et al. | A multicore architecture focused on accelerating computer vision computations | |
Liu | Yolov2 acceleration using embedded gpu and fpgas: pros, cons, and a hybrid method | |
Zhou et al. | FASTCF: FPGA-based accelerator for stochastic-gradient-descent-based collaborative filtering | |
US11461662B1 (en) | Compilation time reduction for memory and compute bound neural networks | |
Chen et al. | GCIM: Towards Efficient Processing of Graph Convolutional Networks in 3D-Stacked Memory | |
KR20220116050A (ko) | 병렬 로드-저장을 이용하는 공유 스크래치패드 메모리 | |
Gan et al. | High performance reconfigurable computing for numerical simulation and deep learning | |
CN114761920A (zh) | 具有可重构指令集的硬件加速器 | |
Ikhlasse et al. | Recent implications towards sustainable and energy efficient AI and big data implementations in cloud-fog systems: A newsworthy inquiry | |
Lee | Datacenter design and management: A computer architect’s perspective | |
Clemons et al. | EVA: An efficient vision architecture for mobile systems | |
Jin et al. | Accelerating graph convolutional networks through a pim-accelerated approach |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20181204 |
|
RJ01 | Rejection of invention patent application after publication |