本发明涉及数据处理
技术领域:
:,特别涉及一种FPGA异构加速的数据传输方法、FPGA及FPGA异构加速系统。
背景技术:
::异构加速中对数据传输速度的要求极高,否则达不到计算加速的目的。异构加速设计中一般采用单队列单DMA加中断的传输方式。如图1所示,在DMA的传输方式中,由于数据拷贝很快,内存锁定比较慢,导致数据拷贝完FPGA端逻辑处于等待状态,因此总线的利用率不高,影响异构加速中对数据传输速度。因此,如何提高总线的利用率,进而提高异构加速中对数据传输速度,是本领域技术人员需要解决的技术问题。技术实现要素:本发明的目的是提供一种FPGA异构加速的数据传输方法、FPGA及FPGA异构加速系统,能最大限度的提高PCIe总线利用率,提高数据传输速度;进而为异构加速算法提高可靠速度保证。为解决上述技术问题,本发明提供一种FPGA异构加速系统,包括:FPGA和PCIe驱动端;其中,所述FPGA具有第一预定个数的DMA及每个DMA对应的请求队列;所述PCIe驱动端具有第二预定个数的服务线程;所述服务线程,用于检查对应的请求队列是否为空;若为空,则将新的请求添加到对应的请求队列中,并启动对应DMA开始数据传输;所述DMA,用于依次处理对应请求队列中的请求,并在完成每一个请求后向所述PCIe驱动端发送中断,提示数据传输完成。可选的,每个DMA对应一个读请求队列和一个写请求队列。可选的,所述FPGA有2个DMA。可选的,所述PCIe驱动端具有4个服务线程,分别对应服务于2个DMA的读请求队列和写请求队列。可选的,所述DMA还用于采用轮询的方式检查对应的请求队列中是否存在请求。可选的,所述FPGA还包括:监测器,用于监测第一预定个数的DMA的数据传输过程是否正常;若不正常,则向所述PCIe驱动端发送提示信息。本发明还提供一种FPGA异构加速的数据传输方法,用于实现PCIe数据传输,FPGA具有第一预定个数的DMA及每个DMA对应的请求队列;PCIe驱动端具有第二预定个数的服务线程,数据传输方法包括:所述服务线程向对应的请求队列添加请求,启动对应DMA开始数据传输,并检查对应的请求队列是否为空;若为空,则将新的请求添加到对应的请求队列中,并启动对应DMA开始数据传输;所述DMA依次处理对应请求队列中的请求,并在完成每一个请求后向所述PCIe驱动端发送中断,提示数据传输完成。可选的,还包括:所述DMA采用轮询的方式检查对应的请求队列中是否存在请求。可选的,还包括:所述FPGA中的监测器监测第一预定个数的DMA的数据传输过程是否正常;若不正常,则向所述PCIe驱动端发送提示信息。本发明还提供一种FPGA,包括:第一预定个数的DMA、每个DMA对应的请求队列和DDR;其中,所述DMA,用于依次处理对应请求队列中的请求,并在完成每一个请求后向PCIe驱动端发送中断,提示数据传输完成。本发明所提供的FPGA异构加速系统,包括:FPGA和PCIe驱动端;其中,FPGA具有第一预定个数的DMA及每个DMA对应的请求队列;PCIe驱动端具有第二预定个数的服务线程;服务线程,用于检查对应的请求队列是否为空;若为空,则将新的请求添加到对应的请求队列中,并启动对应DMA开始数据传输;DMA,用于依次处理对应请求队列中的请求,并在完成每一个请求后向PCIe驱动端发送中断,提示数据传输完成;可见,该FPGA异构加速系统通过多个DMA共同进行数据传输,能最大限度的提高PCIe总线利用率,提高数据传输速度;进而为异构加速算法提高可靠速度保证;且实施操作简单,不需要更改硬件,只需安装相应驱动和烧写相应FPGA逻辑即可达到提升速度目的。本发明还公开了FPGA异构加速的数据传输方法、FPGA,具有上述有益效果,在此不再赘述。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1为现有技术所提供的FPGA异构加速系统的工作过程示意图;图2为本发明实施例所提供的FPGA异构加速系统的结构框图;图3为本发明实施例所提供的FPGA异构加速系统的工作过程示意图;图4为本发明实施例所提供的DMA的工作过程示意图。具体实施方式本发明的核心是提供一种FPGA异构加速的数据传输方法、FPGA及FPGA异构加速系统,能最大限度的提高PCIe总线利用率,提高数据传输速度;进而为异构加速算法提高可靠速度保证。为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。请参考图2,图2为本发明实施例所提供的FPGA异构加速系统的结构框图;该FPGA异构加速系统可以包括:FPGA100和PCIe驱动端200;其中,所述FPGA100具有第一预定个数的DMA及每个DMA对应的请求队列;所述PCIe驱动端200具有第二预定个数的服务线程;所述服务线程,用于检查对应的请求队列是否为空;若为空,则将新的请求添加到对应的请求队列中,并启动对应DMA开始数据传输;所述DMA,用于依次处理对应请求队列中的请求,并在完成每一个请求后向所述PCIe驱动端200发送中断,提示数据传输完成。具体的,由于现有技术中在FPGA100中的DMA的传输方式中,由于数据拷贝很快,内存锁定比较慢,导致数据拷贝完FPGA100端逻辑处于等待状态,因此总线的利用率不高,影响异构加速中对数据传输速度。因此,请参考图3,本实施例在FPGA100中设置多个DMA使得其中一个DMA完成数据传输处于等待状态时,其他DMA仍可以进行数据传输。因此提高了总线利用率,进而提高了FPGA异构加速系统的速度。即本实施例能保证FPGA100中的各个DMA一直处于工作状态,由于DMA传输需要提前锁定内存,如果采用单线程会使图1所以DMA处于等待状态,浪费了有效的传输时间,根本原因是由于锁定内存时间较长,采用多线程可以提高程序的并行度,有效的提高了总线的利用率,提高了PCIe的传输速度,能达到PCIe总线带宽的85%左右。本实施例中FPGA100端一般为一个PCIe设备,所以具有PCIe设备配置空间,此外由于FPGA100具有多个DMA因此还需要为DMA准备地址寄存器和读写FIFO配置空间。当主机端(即PCIe驱动端200)启动DMA后,会从主机配置的DMA地址寄存器位置读取DMA的descriptortable到FIFO中,然后DMA依次从FIFO中取出源地址,目的地址,数据大小等信息并把数据搬运到要求的位置。对于主机端(即PCIe驱动端200)的PCIe驱动开发,需要开发相应的PCIe驱动程序,由于各个平台的差异性,因此本实施例并不对具体驱动的内容进行限定,只要可以具有多服务线程支持FPGA100端的多DMA传输数据即可。本实施例并不限定FPGA100中的DMA的个数,也不限定PCIe驱动端200中服务线程的个数。都可以由用户根据实际情况进行选择。即不限定第一预定个数和第二预定个数的具体数值,但是第一预定个数和第二预定个数都至少为2。例如一般情况下FPGA100中具有2个DMA。其中,PCIe驱动端200中的服务线程用于给对应的请求队列添加任务,例如当服务线程1对应DMA1的读请求队列时,服务线程1向DMA1的读请求队列中添加读请求,并启动对应的DMA1开始进行数据传输,当其检测到读请求队列为空时,将获取新的读请求添加到对应的请求队列中,并启动对应DMA开始数据传输。DMA1从对应的读请求队列中获取读请求并开启对应的处理。这里的FPGA100中每一个DMA都存在与其对应的请求队列,每一个请求队列都有与其对应的服务线程。但是本实施例并不限定每一个DMA存在与其对应的请求队列的数量,也不限定每一个服务线程对应的请求队列的个数。只要可以实现DMA具有请求队列,请求队列有对应的服务线程控制即可。例如每一个DMA可以具有一个读写请求队列也可以有两个队列即一个读请求队列和一个写请求队列;每一个服务线程可以控制一个读请求队列或者一个写请求队列;每一个服务线程也可以控制同一个DMA具有的全部请求队列;每一个服务线程也可以控制不同DMA具有的全部读请求队列或者全部写请求队列等。基于上述技术方案,本发明实施例提的FPGA异构加速系统,通过多个DMA共同进行数据传输,能最大限度的提高PCIe总线利用率,提高数据传输速度;进而为异构加速算法提高可靠速度保证;且实施操作简单,不需要更改硬件,只需安装相应驱动和烧写相应FPGA逻辑即可达到提升速度目的。基于上述实施例,为了在提高数据传输速度的基础上可以尽量做较小的改变,简化系统的复杂性,进而可以提高系统的可靠性。因此优选的,请参考图4,FPGA100端可以有2个DMA,每个DMA对应一个读请求队列和一个写请求队列即图4中RD1,WR1,RD2,WR2。DMA1负责RD1,WR1。DMA2负责RD2,WR2。DMA1和DMA2检测对应请求队列中是否有读写请求。如果有读写请求则处理此请求,并在处理完发送中断通知PCIe驱动端200。PCIe驱动端200具有4个服务线程,分别对应服务于2个DMA的读请求队列和写请求队列。即PCIe驱动端200启动四个服务线程,分别各自服务于自己的RD1(即读请求队列1),WR1(即写请求队列1),RD2(即读请求队列2),WR2(即写请求队列2),个服务线程检测到对应请求队列为空时,即增加一个读或者写请求到队列中,并启动DMA传输。DMA需要检测其对应的请求队列中是否存在请求。可选的,DMA可以采用轮询的方式检查对应的请求队列中是否存在请求。具体的,本实施例中FPGA100端采用双DMA引擎,双读写队列设计,将数据通过PCIe总线从PCIe驱动端200的内存中搬到FPGA100中的DDR中;如图4,每个DMA采用轮询的方式检查请求队列中是否有数据需要读或者写,PCIe驱动端200启动2-4个服务线程,检查对应的读或写请求队列是否为空,如果为空,就将新的读或写请求放到对应请求队列中,等待DMA处理。当DMA处理完一个读写请求,就发中断告诉驱动端,数据传输完成。能最大限度的提高PCIe总线利用率,提高数据传输速度,使PCIe发挥到最好的效能。基于上述任意实施例,为了提高系统可靠性,所述FPGA100还可以包括:监测器,用于监测第一预定个数的DMA的数据传输过程是否正常;若不正常,则向所述PCIe驱动端发送提示信息。便于管理人员及时发现异常情况,以保证数据传输过程的可靠性,进而保证数据的准确性。基于上述技术方案,本发明实施例提的FPGA异构加速系统,能最大限度的提高PCIe总线利用率,提高数据传输速度;进而为异构加速算法提高可靠速度保证。下面对本发明实施例提供的FPGA异构加速的数据传输方法及FPGA进行介绍,下文描述的FPGA异构加速的数据传输方法及FPGA与上文描述的FPGA异构加速系统可相互对应参照。本发明实施例提供一种FPGA异构加速的数据传输方法,用于实现PCIe数据传输,FPGA具有第一预定个数的DMA及每个DMA对应的请求队列;PCIe驱动端具有第二预定个数的服务线程,数据传输方法包括:所述服务线程向对应的请求队列添加请求,启动对应DMA开始数据传输,并检查对应的请求队列是否为空;若为空,则将新的请求添加到对应的请求队列中,并启动对应DMA开始数据传输;所述DMA依次处理对应请求队列中的请求,并在完成每一个请求后向所述PCIe驱动端发送中断,提示数据传输完成。基于上述实施例,该方法还可以包括:所述DMA采用轮询的方式检查对应的请求队列中是否存在请求。基于上述实施例,该方法还可以包括:所述FPGA中的监测器监测第一预定个数的DMA的数据传输过程是否正常;若不正常,则向所述PCIe驱动端发送提示信息。本发明还提供一种FPGA,包括:第一预定个数的DMA、每个DMA对应的请求队列和DDR;其中,所述DMA,用于依次处理对应请求队列中的请求,并在完成每一个请求后向PCIe驱动端发送中断,提示数据传输完成。具体的,DMA是指外部设备不通过CPU而直接与系统内存交换数据的接口技术。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的方法而言,由于其与实施例公开的系统相对应,所以描述的比较简单,相关之处参见方法部分说明即可。专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或
技术领域:
:内所公知的任意其它形式的存储介质中。以上对本发明所提供的FPGA异构加速的数据传输方法、FPGA及FPGA异构加速系统进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本
技术领域:
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。当前第1页1 2 3 当前第1页1 2 3