一种针对大容量数据的FPGA和基于opencl的FPGA算法
技术领域
本发明属于数据计算技术领域,尤其涉及一种针对大容量数据的FPGA和基于opencl的FPGA算法。
背景技术
在目前的基于opencl算法架构中,主机通过pcie接口将数据搬移到FPGA外挂的DDR中。kernel算法模块从DDR中取出数据,进行算法逻辑运算,运算完后再将运算好的数据发回DDR中,然后主机通过pcie接口将运算好的数据从DDR中取出。这种现有技术中,由于把DDR作为缓存,存储资源有限,且DDR的硬件比较复杂,增加DDR数量,对FPGA的硬件要求较高,而且由于每次主机收发数据时,pcie接口链路消耗的时间资源比较大,降低了kernel算法模块单位时间内的使用率,限制了算法的性能。对于需要如神经网络算法、图像处理算法等这类大容量的算法,上述技术不能快速的进行算法计算。
发明内容
为解决上述技术问题,本发明提供一种针对大容量数据的FPGA,采用该FPGA后,能够极大的加快数据的计算速度。
本发明采用的技术方案如下:
一种针对大容量数据的FPGA,包括FPGA控制器,与FPGA控制器指令通信的pcie接口、Flash控制器、DDR控制器和算法模块;还包括由所述Flash控制器控制的Flash存储器和由所述DDR控制器控制的DDR存储器;所述Flash控制器与DDR控制器指令通信,所述DDR控制器与算法模块指令通信;所述pcie接口与Flash控制器之间数据传输,所述Flash控制器与DDR控制器之间数据传输,所述DDR控制器与算法模块之间数据传输。
更进一步地,所述Flash控制器控制有至少两个Flash存储器。
更进一步地,所述FPGA控制器通过pcie接口与主机指令通信。
更进一步地,所述Flash控制器通过pcie接口与主机数据传输。
本发明还提供一种基于opencl的FPGA算法,实施该算法后,能够极大的加快数据的计算速度。
本发明采用的技术方案如下:
一种基于opencl的FPGA算法,包括以下步骤:
Step 1:主机通过pcie接口,将至少一个待计算数据搬移到第一Flash存储器;
Step 2:将一个所述待计算数据从第一Flash存储器搬移到DDR存储器中;
Step 3:算法模块从DDR存储器中读取一个所述待计算数据,并进行计算,计算完后,算法模块将一个已计算数据发回DDR存储器中;
Step 4:将DDR存储器中的已计算数据搬移到第二Flash存储器;
Step 5:重复Step 2~Step 4,直至第一Flash存储器内的所有待计算数据均经过算法模块计算变为已计算数据存储至第二Flash存储器;
Step 6:将第二Flash存储器中的已计算数据通过pcie接口,搬移到主机中。
更进一步地,Step 1中,主机通过dma方式将至少一个待计算数据搬移到第一Flash存储器。
更进一步地,Step 2包括:
Step 20:主机通过dma方式向Flash控制器发送读取指令,读取指令中包括源地址和目的地址,所述源地址为第一Flash存储器的内存地址,所述目的地址为DDR存储器的内存地址;
Step 21:将一个所述待计算数据从第一Flash存储器的内存地址搬移到DDR存储器的内存地址中。
更进一步地,Step 3包括:
Step 30:主机通过dma方式,向算法模块发送启动指令,算法模块启动;
Step 31:算法模块从DDR存储器中读取一个所述待计算数据,并进行计算,计算完后,算法模块将一个已计算数据发回DDR存储器中;
Step 32:算法模块向主机发送中断。
更进一步地,Step 4包括:
Step 40:主机收到中断后,通过dma方式,向Flash控制器发送写指令,所述写指令包括目的地址和源地址,所述目的地址为第二Flash存储器的内存地址,所述源地址为DDR存储器的内存地址;
Step 41:将已计算数据从DDR存储器的内存地址搬移到第二Flash存储器的内存地址。
更进一步地,Step 6包括:
Step 60:主机通过dma方式,向Flash控制器发送读取指令,所述读取指令包括目的地址和源地址,所述目的地址为主机内存地址,所述源地址为第二Flash存储器的内存地址;
Step 61:将已计算数据通过pcie接口,从第二Flash存储器的内存地址搬移到主机内存地址。
本发明相比现有技术取得的有益效果如下:在现有的FPGA中是没有Flash控制器和Flash存储器的,DDR存储器中的待计算数据均由主机通过pcie接口搬移进去,DDR存储器不能容纳太多个待计算数据,所以大批量的待计算数据需要进行计算时,需分多次通过pcie接口搬移数据,pcie接口链路消耗的时间资源比较大,降低了算法模块的使用率,限制了算法的性能。本发明通过在原有的FPGA上设置Flash控制器和Flash存储器,使主机通过pcie接口将大量的待计算数据一次搬移到Flash存储器,再将每个待计算数据搬移到DDR存储器中,避免了多次通过pcie接口搬移数据,实现算法加速效果。另外,从Flash存储器和DDR存储器之间搬移数据远快于pcie接口和DDR存储器之间搬移数据。
附图说明
图1为本发明一种针对大容量数据的FPGA的原理框图。
图2为本发明一种针对大容量数据的FPGA的指令通信和数据传输示意图,其中细箭头代表指令通信,粗箭头代表数据传输。
图3为本发明一种基于上述FPGA的算法加速方法的流程图。
附图标记说明:
1、FPGA控制器;2、Flash控制器;3、算法模块;4、DDR控制器;
5、Flash存储器;6、DDR存储器;7、主机;8、pcie接口。
具体实施方式
如图1和图2所示,一种针对大容量数据的FPGA,包括FPGA控制器,与FPGA控制器指令通信的pcie接口、Flash控制器、DDR控制器和算法模块;还包括由所述Flash控制器控制的Flash存储器和由所述DDR控制器控制的DDR存储器;所述Flash控制器与DDR控制器指令通信,所述DDR控制器与算法模块指令通信;所述pcie接口与Flash控制器之间数据传输,所述Flash控制器与DDR控制器之间数据传输,所述DDR控制器与算法模块之间数据传输。
本实施例中,所述Flash控制器2包括Flash阵列组A控制器和Flash阵列组B控制器;Flash存储器5有96片,其中48片Flash存储器5连接Flash阵列组A控制器上的12个Flash通道,每4片Flash存储器5连接1个Flash通道;另外48片Flash存储器5连接Flash阵列组B控制器上的12个Flash通道,每4片Flash存储器5连接1个Flash通道。
本实施例中,所述FPGA控制器通过pcie接口与主机指令通信。
本实施例中,所述Flash控制器通过pcie接口与主机数据传输。
本实施例中,所述Flash存储器5为NAND Flash。
本实施例中,所述算法模块3为kernel模块。
本实施例中,48片连接到Flash阵列组A控制器上的Flash存储器5,组成Flash阵列组A,48片连接到Flash阵列组B控制器上的Flash存储器5,组成Flash阵列组B。
如图3所示,一种基于opencl的FPGA算法,该加速方法包括以下步骤:
Step 1:主机7通过pcie接口8,将至少一个待计算数据搬移到Flash阵列组A中;
Step 2:将一个所述待计算数据从Flash阵列组A中搬移到DDR存储器6中;
Step 3:算法模块3从DDR存储器6中读取一个所述待计算数据,并进行计算,计算完后,算法模块3将一个已计算数据发回DDR存储器6中;
Step 4:将DDR存储器6中的已计算数据搬移到Flash阵列组B;
Step 5:重复Step 2~Step 4,直至Flash阵列组A内的所有待计算数据均经过算法模块3计算变为已计算数据存储至Flash阵列组B;
Step 6:将Flash阵列组B中的已计算数据通过pcie接口8,搬移到主机7中。
本实施例中,Step 1中,主机7通过dma方式将至少一个待计算数据搬移到Flash阵列组A;
本实施例中,Step 2包括:
Step 20:主机7通过dma方式向Flash控制器2发送读取指令,读取指令中包括源地址和目的地址,所述源地址为Flash阵列组A的内存地址,所述目的地址为DDR存储器6的内存地址;
Step 21:将一个所述待计算数据从Flash阵列组A的内存地址搬移到DDR存储器6的内存地址中。
本实施例中,Step 3包括:
Step 30:主机7通过dma方式,向算法模块3发送启动指令,算法模块3启动;
Step 31:算法模块3从DDR存储器6中读取一个所述待计算数据,并进行计算,计算完后,算法模块3将一个已计算数据发回DDR存储器6中;
Step 32:算法模块3向主机7发送中断;
本实施例中,Step 4包括:
Step 40:主机7收到中断后,通过dma方式,向Flash控制器2发送写指令,所述写指令包括目的地址和源地址,所述目的地址为Flash阵列组B的内存地址,所述源地址为DDR存储器6的内存地址;
Step 41:将已计算数据从DDR存储器6的内存地址搬移到Flash阵列组B的内存地址。
本实施例中,Step 6包括:
Step 60:主机7通过dma方式,向Flash控制器2发送读取指令,所述读取指令包括目的地址和源地址,所述目的地址为主机7内存地址,所述源地址为Flash阵列组B的内存地址;
Step 61:将已计算数据通过pcie接口8,从Flash阵列组B的内存地址搬移到主机7内存地址。
实际使用时,FPGA包括26个通道,其中1个DDR通道,24个Flash通道,1个为opencl预留的kernel通道,Flash的存储容量达到TB级别,DDR那边存储为GB级别。主机7的所有数据和指令都通过pcie接口8进来。
将数据传输和指令传输分别进行说明:
数据传输说明:主机7通过pcie接口8将数据从自身内存搬移到Flash阵列组A中;再从Flash存储器5中取出每次待计算数据,搬移到DDR存储器6中;然后,kernel模块从DDR存储器6中取出待计算数据进行算法逻辑运算,运算完后将已计算数据返回DDR存储器6中,再将DDR存储器6中的已计算数据搬移到Flash阵列组B中,待Flash阵列组A中待计算数据的全部算法完后,最后,将Flash阵列组B中的已计算数据通过pcie接口8搬移到主机7内存或者其他存储介质。
指令传输说明:主机7通过pcie接口8发送指令给FPGA,FPGA对指令进行解析,分析是对DDR存储器6操作,还是对Flash存储器5操作,或者对kernel模块的算法操作,每次操作完都有对应的操作完成指令或者其他相关指令,通过pcie接口8上报给主机7。
原有的FPGA中,DDR存储器6中的数据来直接来自pcie接口8。本发明中数据直接来自Flash存储器5(称为就近计算),Flash存储器5侧的数据搬移远快于pcie接口8的数据搬移,DDR存储器6中的数据搬移越快,算法模块3的使用率越高。另外,由于DDR控制器4、Flash控制器2和算法模块3之间独立,主机7端可实现多线程并发操作,即主机7端读写Flash存储器5中的同时,算法模块3可启动运算,而不用等待所有数据都搬移完成后再启动算法模块3,即数据搬移和数据计算可以并行执行,也提高了算法模块3的使用率。
以上对本发明的具体实施例进行了详细描述,但其只是作为范例,本发明并不限制于以上描述的具体实施例。对于本领域技术人员而言,任何对本发明进行的等同修改和替代也都在本发明的范畴之中。因此,在不脱离本发明的精神和范围下所作的均等变换和修改,都应涵盖在本发明的范围内。