一种多业务请求进程调用FPGA设备的方法及相关装置

阅读: 评论:0

著录项
  • CN201911082281.9
  • 20191107
  • CN110955535A
  • 20200403
  • 浪潮(北京)电子信息产业有限公司
  • 史宏志;赵健;刘海威
  • G06F9/54
  • G06F9/54 G06F9/52

  • 北京市海淀区上地信息路2号2-1号C栋1层
  • 北京(11)
  • 北京集佳知识产权代理有限公司
  • 高勇
摘要
本申请公开了一种多业务请求进程调用FPGA设备的方法及相关装置,包括接收上层应用下发的待处理数据后发送FPGA状态查询消息至消息队列,接收并分析FPGA守护进程针对FPGA状态查询消息的应答消息,且当FPGA设备可用时发送共享内存编号申请请求至消息队列;在接收到共享内存编号后将待处理数据发送到共享内存编号对应的共享内存块中并发送业务请求类型消息至消息队列,以使FPGA设备基于业务请求类型消息处理待处理数据;从共享内存块中读取处理后的数据并将处理后的数据写入上层应用以及释放共享内存块。该方法可有效解决由于多进程调用FPGA设备导致的进程间同步互斥以及难以实现多进程公平使用FPGA设备的问题。
权利要求

1.一种多业务请求进程调用FPGA设备的方法,其特征在于,包括:

接收上层应用下发的待处理数据后发送FPGA状态查询消息至消息队列,以使FPGA守护进程从所述消息队列获取所述FPGA状态查询消息并返回应答消息;

接收并分析所述应答消息,若FPGA设备可用,则发送共享内存编号申请请求至所述消息队列,以使所述FPGA守护进程从所述消息队列获取所述共享内存编号申请请求;

当接收到所述FPGA守护进程返回的共享内存编号后,将所述待处理数据发送到所述共享内存编号对应的共享内存块中,并发送业务请求类型消息至所述消息队列,以使所述FPGA设备基于所述业务请求类型消息处理所述待处理数据;

从所述共享内存块中读取处理后的数据并将所述处理后的数据写入所述上层应用以及释放所述共享内存块。

2.根据权利要求1所述的多业务请求进程调用FPGA设备的方法,其特征在于,通过控制通路将所述FPGA状态查询消息、所述共享内存编号申请请求以及所述业务请求类型消息发送至所述消息队列;通过数据通路将所述待处理数据发送到所述共享内存编号对应的共享内存块中。

3.根据权利要求2所述的多业务请求进程调用FPGA设备的方法,其特征在于,所述消息队列包括第一消息队列与第二消息队列;所述第一消息队列接收所述FPGA状态查询消息与所述共享内存编号申请请求;所述第二消息队列接收所述业务请求类型消息。

4.根据权利要求3所述的多业务请求进程调用FPGA设备的方法,其特征在于,发送FPGA状态查询消息前,还包括:

对所述待处理数据进行预处理并判断是否存在针对所述待处理数据的即时处理请求;

若不存在针对所述待处理数据的即时处理请求,则对所述待处理数据进行缓冲,并当最后一批数据的完成标志为真后发送所述FPGA状态查询消息,或当缓冲区满后发送所述FPGA状态查询消息;

若存在针对所述待处理数据的即时处理请求,则发送所述FPGA状态查询消息。

5.根据权利要求4所述的多业务请求进程调用FPGA设备的方法,其特征在于,还包括:

发送任务负载查询消息至所述消息队列,并接收所述任务负载查询消息的响应消息;

若所述FPGA设备处于拥塞状态,则等待预设时长后发送所述共享内存编号申请请求至所述消息队列;

若所述FPGA设备未处于拥塞状态,则立即发送所述共享内存编号申请请求至所述消息队列。

6.根据权利要求5所述的多业务请求进程调用FPGA设备的方法,其特征在于,所述FPGA守护进程利用多个处理线程分别对应处理所述第一消息队列与所述第二消息队列中的消息以及所述共享内存块中的待处理数据。

7.根据权利要求6所述的多业务请求进程调用FPGA设备的方法,其特征在于,所述共享内存块按照一次请求最小处理单元所需的内存容量大小对共享内存进行均等划分得到。

8.一种多业务请求进程调用FPGA设备的装置,其特征在于,包括:

FPGA状态查询消息发送模块,用于接收上层应用下发的待处理数据后发送FPGA状态查询消息至消息队列,以使FPGA守护进程从所述消息队列获取所述FPGA状态查询消息并返回应答消息;

共享内存编号申请请求发送模块,用于接收并分析所述应答消息,若FPGA设备可用,则发送共享内存编号申请请求至所述消息队列,以使所述FPGA守护进程从所述消息队列获取所述共享内存编号申请请求;

待处理数据发送模块,用于当接收到所述FPGA守护进程返回的共享内存编号后,将所述待处理数据发送到所述共享内存编号对应的共享内存块中,并发送业务请求类型消息至所述消息队列,以使所述FPGA设备基于所述业务请求类型消息处理所述待处理数据;

处理后数据读取模块,用于从所述共享内存块中读取处理后的数据并将所述处理后的数据写入所述上层应用以及释放所述共享内存块。

9.一种CPU+FPGA异构加速平台,其特征在于,包括:

存储器,用于存储计算程序;

处理器,用于执行所述计算机程序时实现如权利要求1至7任一项所述的多业务请求进程调用FPGA设备的方法的步骤。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的多业务请求进程调用FPGA设备的方法的步骤。

说明书
技术领域

本申请涉及计算机技术领域,特别涉及一种多业务请求进程调用FPGA设备的方法;还涉及一种多业务请求进程调用FPGA设备的装置、CPU+FPGA异构加速平台以及计算机可读存储介质。

随着摩尔定律逐渐失效,异构加速领域成为计算机体系结构性能进步的主要方向之一。异构加速设备包括GPU、ASIC、FPGA等等,其中,FPGA在功耗与性能上实现了GPU与ASIC两者不具备的平衡,因此,采用FPGA对应用进行异构加速已经成为越来越多应用提供商对自身业务进行加速的选择之一。受Intel FPGA环境平台产品定位和策略的限制,IntelFPGA环境平台的原生OpenCL(Open Computing Language,开放式计算语言)RTE(RuntimeEnvironment,运行时环境)并不支持单一FPGA设备的多进程访问。而在云环境和大数据处理的环境下,应用大多具有多用户多进程的特性,对FPGA设备的访问便不可避免的会出现多个进程竞争的情况。在现有技术方案不支持多进程访问FPGA设备的情况下,如何在现有条件下提供对FPGA设备进行多进程访问的支持已成为FPGA设备通用化的一个重要支撑。

因此,如何提供一种多业务请求进程调用FPGA设备的方法,以解决由于多进程调用FPGA设备导致的进程间同步互斥以及难以实现多进程公平使用FPGA设备的问题已成为本领域技术人员亟待解决的技术问题。

本申请的目的是提供一种多业务请求进程调用FPGA设备的方法,能够有效解决由于多进程调用FPGA设备导致的进程间同步互斥以及难以实现多进程公平使用FPGA设备的问题;本申请的另一目的是提供一种多业务请求进程调用FPGA设备的装置、CPU+FPGA异构加速平台以及计算机可读存储介质,均具有上述技术效果。

为解决上述技术问题,本申请提供了一种多业务请求进程调用FPGA设备的方法,包括:

接收上层应用下发的待处理数据后发送FPGA状态查询消息至消息队列,以使FPGA守护进程从所述消息队列获取所述FPGA状态查询消息并返回应答消息;

接收并分析所述应答消息,若FPGA设备可用,则发送共享内存编号申请请求至所述消息队列,以使所述FPGA守护进程从所述消息队列获取所述共享内存编号申请请求;

当接收到所述FPGA守护进程返回的共享内存编号后,将所述待处理数据发送到所述共享内存编号对应的共享内存块中,并发送业务请求类型消息至所述消息队列,以使所述FPGA设备基于所述业务请求类型消息处理所述待处理数据;

从所述共享内存块中读取处理后的数据并将所述处理后的数据写入所述上层应用以及释放所述共享内存块。

可选的,通过控制通路将所述FPGA状态查询消息、所述共享内存编号申请请求以及所述业务请求类型消息发送至所述消息队列;通过数据通路将所述待处理数据发送到所述共享内存编号对应的共享内存块中。

可选的,所述消息队列包括第一消息队列与第二消息队列;所述第一消息队列接收所述FPGA状态查询消息与所述共享内存编号申请请求;所述第二消息队列接收所述业务请求类型消息。

可选的,发送FPGA状态查询消息前,还包括:

对所述待处理数据进行预处理并判断是否存在针对所述待处理数据的即时处理请求;

若不存在针对所述待处理数据的即时处理请求,则对所述待处理数据进行缓冲,并当最后一批数据的完成标志为真后发送所述FPGA状态查询消息,或当缓冲区满后发送所述FPGA状态查询消息;

若存在针对所述待处理数据的即时处理请求,则发送所述FPGA状态查询消息。

可选的,还包括:

发送任务负载查询消息至所述消息队列,并接收所述任务负载查询消息的响应消息;

若所述FPGA设备处于拥塞状态,则等待预设时长后发送所述共享内存编号申请请求至所述消息队列;

若所述FPGA设备未处于拥塞状态,则立即发送所述共享内存编号申请请求至所述消息队列。

可选的,所述FPGA守护进程利用多个处理线程分别对应处理所述第一消息队列与所述第二消息队列中的消息以及所述共享内存块中的待处理数据。

可选的,所述共享内存块按照一次请求最小处理单元所需的内存容量大小对共享内存进行均等划分得到。

为解决上述技术问题,本申请还提供了一种多业务请求进程调用FPGA设备的装置,包括:

FPGA状态查询消息发送模块,用于接收上层应用下发的待处理数据后发送FPGA状态查询消息至消息队列,以使FPGA守护进程从所述消息队列获取所述FPGA状态查询消息并返回应答消息;

共享内存编号申请请求发送模块,用于接收并分析所述应答消息,若FPGA设备可用,则发送共享内存编号申请请求至所述消息队列,以使所述FPGA守护进程从所述消息队列获取所述共享内存编号申请请求;

待处理数据发送模块,用于当接收到所述FPGA守护进程返回的共享内存编号后,将所述待处理数据发送到所述共享内存编号对应的共享内存块中,并发送业务请求类型消息至所述消息队列,以使所述FPGA设备基于所述业务请求类型消息处理所述待处理数据;

处理后数据读取模块,用于从所述共享内存块中读取处理后的数据并将所述处理后的数据写入所述上层应用以及释放所述共享内存块。

为解决上述技术问题,本申请还提供了一种CPU+FPGA异构加速平台,包括:

存储器,用于存储计算程序;

处理器,用于执行所述计算机程序时实现如上所述的多业务请求进程调用FPGA设备的方法的步骤。

为解决上述技术问题,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的多业务请求进程调用FPGA设备的方法的步骤。

本申请所提供的多业务请求进程调用FPGA设备的方法,包括接收上层应用下发的待处理数据后发送FPGA状态查询消息至消息队列,以使FPGA守护进程从所述消息队列获取所述FPGA状态查询消息并返回应答消息;接收并分析所述应答消息,若FPGA设备可用,则发送共享内存编号申请请求至所述消息队列,以使所述FPGA守护进程从所述消息队列获取所述共享内存编号申请请求;当接收到所述FPGA守护进程返回的共享内存编号后,将所述待处理数据发送到所述共享内存编号对应的共享内存块中,并发送业务请求类型消息至所述消息队列,以使所述FPGA设备基于所述业务请求类型消息处理所述待处理数据;从所述共享内存块中读取处理后的数据并将所述处理后的数据写入所述上层应用以及释放所述共享内存块。

可见,本申请所提供的多业务请求进程调用FPGA设备的方法,添加了FPGA守护进程,以通过此FPGA守护进程隔离业务请求进程与FPGA设备,并将需要占用CPU资源进行实现的逻辑算法通过业务请求进程与FPGA守护进程间的通信发送到运行于FPGA运行环境的FPGA守护进程,由FPGA守护进程依次流水处理执行,并最终通过进程间的通信将FPGA设备的处理结果返回到CPU,从而达到响应大数据平台分布式请求的目的,有效解决了由于多进程调用FPGA设备导致的进程间同步互斥以及难以实现多进程公平使用FPGA设备的问题。

本申请所提供的多业务请求调用FPGA设备的装置、CPU+FPGA异构加速平台以及计算机可读存储介质,均具有上述技术效果。

为了更清楚地说明本申请实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例所提供的一种多业务请求进程调用FPGA设备的方法的流程示意图;

图2为本申请实施例所提供的一种业务框架示意图;

图3为本申请实施例所提供的一种通信架构示意图;

图4为本申请实施例所提供的一种具体的FPGA加速框架示意图。

本申请的核心是提供一种多业务请求进程调用FPGA设备的方法,能够有效解决由于多进程调用FPGA设备导致的进程间同步互斥以及难以实现多进程公平使用FPGA设备的问题;本申请的另一核心是提供一种多业务请求进程调用FPGA设备的装置、CPU+FPGA异构加速平台以及计算机可读存储介质,均具有上述技术效果。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

请参考图1,图1为本申请实施例所提供的一种多业务请求进程调用FPGA设备的方法的流程示意图;参考图1所示,该方法包括:

S101:接收上层应用下发的待处理数据后发送FPGA状态查询消息至消息队列,以使FPGA守护进程从消息队列获取FPGA状态查询消息并返回应答消息;

具体的,本申请面向CPU+FPGA异构加速平台,用于解决多进程竞争以及设备厂商运行时环境限制带来的同步互斥等问题。其中的FPGA端支持多种开发语音对并行加速部分进行描述,例如,OpenCL高级语音、RTL级语言等。CPU端可选择多种支持多进程开发的开发语音,例如C/C++,Java、Python等。CPU在主机端运行主程序,FPGA作为协处理器进行基因比对算法的硬件加速单元。通过FPGA SDK完成FPGA设计部分进行综合、布局布线等过程,并最终映射成FPGA硬件执行比特流。主机端通过软件编译器对主机端主程序进行编译得到主机端可执行程序,完成整个基因数据比对异构方法的编译部署过程。

参考图2所示的业务框架示意图,大数据处理平台在处理海量数据的过程中,多采用map/reduce进行分布式处理。对于FPGA设备而言,分布式请求可以来自于本机也可以来自于系统内的其他节点,但是对数据处理的过程并没有本质区别。本申请在实现数据处理的过程中,将本需要占用CPU资源进行计算实现的逻辑算法,通过进程间通信的方式发送到运行于FPGA运行时环境的FPGA守护进程,由此守护进程对业务请求进行排队,依次流水处理执行,并将最终返回FPGA设备的处理结果,达到响应map/reduce分布式请求的目的。

本申请从一个业务请求进程(下文称之为当前业务请求进程)的角度出发进行技术方案的阐述,可以明白的是,各业务请求进程均可执行本申请所提供如下步骤。

具体而言,大数据平台请求进程端初始化共享内存、消息队列等通信结构并置finish标志为假。当前业务请求进程调用底层库函数(libz)接收上层应用(如Hadoop)下发的待处理数据后,进一步发送FPGA状态查询消息至消息队列,以查询FPGA设备是否可用。进而,FPGA守护进程从消息队列获取FPGA状态查询消息并返回FPGA设备是否可用的应答消息。

其中,在一种具体的实施方式中,发送FPGA状态查询消息前还包括对待处理数据进行必要的预处理并判断是否存在针对待处理数据的即时处理请求;若不存在针对待处理数据的即时处理请求,则对待处理数据进行缓冲,以增加一次调用FPGA设备所处理的数据batch大小,并当最后一批数据的完成标志即finish标志为真后发送FPGA状态查询消息,或者即使最后一批数据的finish标志不为真,但当缓冲区满后同样发送FPGA状态查询消息。相反,若存在针对待处理数据的即时处理请求,则发送FPGA状态查询消息。

S102:接收并分析应答消息,若FPGA设备可用,则发送共享内存编号申请请求至消息队列,以使FPGA守护进程从消息队列获取共享内存编号申请请求;

具体的,FPGA守护进程从消息队列获取到FPGA状态查询消息后将相应的应答消息发送至消息队列,从而当前业务请求进程从消息队列获取应答消息并分析此应答消息以确认FPGA设备是否可用。若FPGA设备可用,则进一步发送共享内存编号申请请求至消息队列,使FPGA守护进程从消息队列获取共享内存编号申请请求。

S103:当接收到FPGA守护进程返回的共享内存编号后,将待处理数据发送到共享内存编号对应的共享内存块中,并发送业务请求类型消息至消息队列,以使FPGA设备基于业务请求类型消息处理待处理数据;

具体的,FPGA守护进程获取共享内存编号申请请求后,若有空闲的共享内存块,则FPGA守护进程将对应的共享内存编号发送至消息队列。当前业务请求进程消息队列获取到FPGA守护进程返回的共享内存编号后,进一步将待处理数据发送到此共享内存编号对应的共享内存块中,并发送业务请求类型消息至消息队列,以后续使FPGA设备基于此业务请求类型消息处理该待处理数据。

其中,在一种具体的实施方式中,共享内存块按照一次请求最小处理单元所需的内存容量大小对共享内存进行均等划分得到。各共享内存块编号为0~N-1,N即为等分的份数,且N值可根据业务类型、主机共享内存大小限制以及FPGA守护进程端流水线深度进行灵活配置。在不考虑内存消耗的前提下,自然N值越大,越能在同一时刻满足更多的并发大数据请求。另外,共享内存每个最小处理单元代表的内存空间以大数据各中请求类型中一次请求所需最大内存容量为准,每一种请求类型分别独立设置相应结构体的数据结构进行封装。FPGA守护进程访问该最小处理单元时,通过请求类型的不同强制转化成不同数据单元类型进行访问。FPGA守护进程写回加速处理后的数据的访问方式亦如上所述。

S104:从共享内存块中读取处理后的数据并将处理后的数据写入上层应用以及释放共享内存块。

具体的,FPGA设备对待处理数据进行加速处理后,进一步由FPGA守护进程将处理后的数据写入共享内存块,并返回数据处理完成的数据状态信息,从而当前业务请求进程从消息队列中获取到此数据状态信息后,即可访问共享内存块以获取处理后的数据并将处理后的数据写入上层应用,以及发送共享内存编号释放请求以释放共享内存块。

其中,参考图3所示,在一种具体的实施方式中,通过控制通路将FPGA状态查询消息、共享内存编号申请请求以及业务请求类型消息发送至消息队列;通过数据通路将待处理数据发送到共享内存编号对应的共享内存块中。

具体的,本实施例具体通过控制通路与数据通路分别实现控制信号与数据的传递。其中,控制通路作为控制信号传递的通路,控制信号包括FPGA状态查询消息、共享内存编号申请请求、共享内存编号释放请求以及针对上述控制信号的响应。数据通路作为数据块传递通路,主要负责待处理数据的传输。

进一步,为避免由于不同请求类型在同一消息队列中发生拥塞现象,以及简化FPGA守护进程对多种形式的控制请求的并发响应,在一种具体的实施方式中,上述消息队列包括第一消息队列与第二消息队列;第一消息队列接收当前业务请求进程发送的FPGA状态查询消息与共享内存编号申请请求;第二消息队列接收当前业务请求进程发送的业务请求类型消息。

具体的,当前业务请求进程调用底层库函数接收上层应用下发的待处理数据后向第一消息队列(msg1)发送FPGA状态查询信息(FPGA状态查询信息中携带线程tid作为响应标志),并等待msg1中对此tid响应的状态信息,在FPGA设备可用的情况下,向第一消息队列发送共享内存编号申请请求(共享内存编号申请请求携带线程tid),并等待msg1中对本tid返回对共享内存编号申请请求的响应。FPGA守护进程对于FPGA状态查询信息的响应信息以及共享内存编号同样发送到此第一消息队列。当前业务请求进程发送的业务请求类型消息则发送到第二消息队列(msg2),FPGA守护进程返回的数据状态信息同样发送至此第二消息队列。

本实施例采用双消息队列的设置可以有效分离控制和数据通路的控制,避免由于不同请求类型在同一消息队列中发生拥塞现象,以及简化FPGA守护进程对多种形式的控制请求的并发响应。

进一步,在一种具体的实施方式中,该多业务请求进程调用FPGA设备的方法还可以包括向消息队列发送任务负载查询消息并接收任务负载查询消息的响应消息;若FPGA设备处于拥塞状态,则等待预设时长后向消息队列发送共享内存编号申请请求;若FPGA设备未处于拥塞状态,则立即向消息队列发送共享内存编号申请请求。

其中,对于上述预设时长的具体数值本申请不做具体限定,可以根据实际应用需要进行差异性设置,例如可以设置为1S等。另外,上述任务负载查询消息同样通过控制通路发送至第一消息队列。

进一步,为满足对多进程并发请求的响应,在一种具体的实施方式中,FPGA守护进程利用多个处理线程分别对应处理第一消息队列与第二消息队列中的消息以及共享内存块中的待处理数据。

具体的,本实施例以多线程的形式将控制消息响应和数据通路数据处理分割开。其中数据处理过程包括写buf即写数据到FPGA设备,调用FPGA引擎,读buf即从FPGA设备中读数据到host端。且本实施例采用生产者消费者模型实现处理过程的流水处理,以OpenCLevent作为同步手段,以提高系统吞吐,满足在一定时间段内对更多进程提供服务的需求。

具体而言,FPGA守护进程端初始化共享内存,消息队列,控制消息缓冲池等通信结构,初始化FPGA运行相关环境,并启动多线程服务。其中,多线程包括控制消息线程,数据处理消息线程以及数据处理线程。

控制消息线程用于接收msg1消息队列中的控制信息,并返回相应的响应消息到msg1。包括如下几种情况:

a)控制消息线程接收msg1中的FPGA状态查询消息并返回FPGA状态给tid指定线程到msg1。

b)控制消息线程接收msg1中的任务负载查询消息并返回待处理任务量给tid指定线程到msg1;

c)控制消息线程接收msg1中的共享内存编号申请消息,并从N个共享内存块中查询空闲的共享内存块的编号,如果有空闲的共享内存块,则返回共享内存编号给tid指定线程到msg1,如果没有空闲的共享内存块,则将共享内存编号申请加入编号申请消息缓冲池。

d)控制消息线程接收msg1中共享内存编号释放消息(该共享内存编号释放消息携带共享内存编号)后查询消息缓冲池,如果有消息,则从缓冲池中按照先来先服务的顺序提取一个消息,返回该消息携带的tid线程共享内存编号,如果缓冲池为空则释放消息中携带的共享内存编号,并标记对应的共享内存为空闲状态。

数据处理消息线程用于接收msg2中的消息,并进一步利用数据处理线程执行相应的操作。

参考图4,以业务请求类型为压缩、加压为例:若数据处理消息线程接收msg2中的业务请求类型为对待处理数据进行压缩,则需执行压缩加速流程,故可利用数据压缩线程进行如下操作:

DMA拷贝指定编号的共享内存块中的数据到FPGA设备,绑定event11;调用数据处理压缩加速引擎(FPGA加速逻辑),依赖event11,绑定event12;DMA拷贝FPGA设备处理后数据到指定编号的共享内存块,依赖event12,绑定event13;发送数据处理完成消息到msg2给tid指定线程。

若数据处理消息线程接收msg2中的业务请求类型为对待处理数据进行解压,则需执行解压加速流程,故可利用数据解压线程进行如下操作:

DMA拷贝指定编号的共享内存块中的数据到FPGA设备,绑定event21;调用数据处理解压缩加速引擎(FPGA加速逻辑),依赖event21,绑定event22;DMA拷贝FPGA设备处理后数据到指定编号的共享内存块,依赖event22,绑定event23;发送数据处理完成消息到msg2给tid指定线程。

综上所述,本申请所提供的多业务请求进程调用FPGA设备的方法,添加了FPGA守护进程,以通过此FPGA守护进程隔离业务请求进程与FPGA设备,并将需要占用CPU资源进行实现的逻辑算法通过业务请求进程与FPGA守护进程间的通信发送到运行于FPGA运行环境的FPGA守护进程,由FPGA守护进程依次流水处理执行,并最终通过进程间的通信将FPGA设备的处理结果返回到CPU,从而达到响应大数据平台分布式请求的目的,有效解决了由于多进程调用FPGA设备导致的进程间同步互斥以及难以实现多进程公平使用FPGA设备的问题。

本申请还提供了一种多业务请求进程调用FPGA设备的装置,下文描述的该装置可以与上文描述的方法相互对应参照。该告警信息分拣装置包括:

FPGA状态查询消息发送模块,用于接收上层应用下发的待处理数据后发送FPGA状态查询消息至消息队列,以使FPGA守护进程从消息队列获取FPGA状态查询消息并返回应答消息;

共享内存编号申请请求发送模块,用于接收并分析应答消息,若FPGA设备可用,则发送共享内存编号申请请求至消息队列,以使FPGA守护进程从消息队列获取共享内存编号申请请求;

待处理数据发送模块,用于当接收到FPGA守护进程返回的共享内存编号后,将待处理数据发送到共享内存编号对应的共享内存块中,并发送业务请求类型消息至消息队列,以使FPGA设备基于业务请求类型消息处理待处理数据;

处理后数据读取模块,用于从共享内存块中读取处理后的数据并将处理后的数据写入上层应用以及释放共享内存块。

在上述实施例的基础上,作为一种具体的实施方式,FPGA状态查询消息发送模块通过控制通路将FPGA状态查询消息,共享内存编号申请请求发送模块通过控制通路发送共享内存编号申请请求,待处理数据发送模块通过数据通路将待处理数据发送到共享内存编号对应的共享内存块中。

在上述实施例的基础上,作为一种具体的实施方式,消息队列包括第一消息队列与第二消息队列;第一消息队列接收FPGA状态查询消息与共享内存编号申请请求;第二消息队列接收业务请求类型消息。

在上述实施例的基础上,作为一种具体的实施方式,还包括:

预处理模块,用于对待处理数据进行预处理并判断是否存在针对待处理数据的即时处理请求;

缓冲模块,用于若不存在针对待处理数据的即时处理请求,则对待处理数据进行缓冲,并当最后一批数据的完成标志为真后FPGA状态查询消息发送模块发送FPGA状态查询消息,或当缓冲区满后FPGA状态查询消息发送模块发送FPGA状态查询消息;

若存在针对待处理数据的即时处理请求,则FPGA状态查询消息发送模块发送FPGA状态查询消息。

在上述实施例的基础上,作为一种具体的实施方式,还包括:

任务负载查询消息发送模块,用于发送任务负载查询消息至消息队列,并接收任务负载查询消息的响应消息;

若FPGA设备处于拥塞状态,则等待预设时长后共享内存编号申请请求发送模块共享内存编号申请请求至消息队列;

若FPGA设备未处于拥塞状态,则共享内存编号申请请求发送模块立即发送共享内存编号申请请求至消息队列。

在上述实施例的基础上,作为一种具体的实施方式,共享内存块按照一次请求最小处理单元所需的内存容量大小对共享内存进行均等划分得到。

本申请还提供了一种CPU+FPGA异构加速平台,包括:存储器与处理器;其中,存储器用于存储计算机程序;处理器用于执行该计算机程序时实现如下的步骤:

接收上层应用下发的待处理数据后发送FPGA状态查询消息至消息队列,以使FPGA守护进程从消息队列获取FPGA状态查询消息并返回应答消息;接收并分析应答消息,若FPGA设备可用,则发送共享内存编号申请请求至消息队列,以使FPGA守护进程从消息队列获取共享内存编号申请请求;当接收到FPGA守护进程返回的共享内存编号后,将待处理数据发送到共享内存编号对应的共享内存块中,并发送业务请求类型消息至消息队列,以使FPGA设备基于业务请求类型消息处理待处理数据;从共享内存块中读取处理后的数据并将处理后的数据写入上层应用以及释放共享内存块。

对于本申请所提供的CPU+FPGA异构加速平台的介绍请参照上述方法的实施例,本申请在此不做赘述。

本申请还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如下的步骤:

接收上层应用下发的待处理数据后发送FPGA状态查询消息至消息队列,以使FPGA守护进程从消息队列获取FPGA状态查询消息并返回应答消息;接收并分析应答消息,若FPGA设备可用,则发送共享内存编号申请请求至消息队列,以使FPGA守护进程从消息队列获取共享内存编号申请请求;当接收到FPGA守护进程返回的共享内存编号后,将待处理数据发送到共享内存编号对应的共享内存块中,并发送业务请求类型消息至消息队列,以使FPGA设备基于业务请求类型消息处理待处理数据;从共享内存块中读取处理后的数据并将处理后的数据写入上层应用以及释放共享内存块。

该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

对于本发明所提供的计算机可读存储介质的介绍请参照上述方法实施例,本发明在此不做赘述。

因为情况复杂,无法一一列举进行阐述,本领域技术人员应能意识到,在本申请提供的实施例的基本原理下结合实际情况可以存在多个例子,在不付出足够的创造性劳动下,应均在本申请的范围内。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

以上对本申请所提供的技术方案进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。

本文发布于:2023-04-14 21:24:55,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/1/87404.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图