一种基于数据流的多线程算法部署方法及系统与流程

文档序号:35421662发布日期:2023-09-13 08:47阅读:27来源:国知局
一种基于数据流的多线程算法部署方法及系统与流程

本发明属于计算机,具体涉及一种基于数据流的多线程算法部署方法及系统。


背景技术:

1、目前,在辅助驾驶系统中常会用到多任务算法进行识别和决策,当硬件算力有限,且算法不做特殊处理时,往往整个工作流管道的运行速度会很慢,导致辅助驾驶系统难以发挥作用。目前常见处理多任务算法模块的方法为直接串行的方式或者使用常规的方式做并行化处理,这些方法的运行效率比较低,进而导致整个工程的开发效率低下。

2、如图1所示,如果使用串行的方式执行多任务算法,目标检测算法算完(耗时30ms)将结果传递给目标跟踪算法,目标检测算法算完(耗时1ms)将结果传递给测距算法,测距算完(耗时1ms)将结果传递给报警决策算法,报警决策算法算完(耗时5ms),最终整个算法系统一共耗时37ms,这种方式运行速度是基于所有算法的累加时间,硬件的资源利用率很低,所以对于追求最大效率且资源有限的算法开发是很不合理的。

3、如图2所示,如果使用常规的并行处理,往往会梳理算法系统程上各个算法之间输入数据和输出数据的关系,将各个算法创建为单独的线程,将各个算法之间有关联的数据创建单独的队列进行数据交换。该方法虽然可以解决上述资源分配以及运行速度的问题,但是当算法任务增多,且各个算法之间的关系变得更加复杂(比如,一个算法的输出数据作为多个算法的输入数据,一个算法的输入数据需要多个算法的输出数据等),这会造成较高的开发难度,后续开发新的工程也不可复用,因此极大地降低了开发效率。


技术实现思路

1、本发明的目的在于克服现有技术之缺陷,提供了一种基于数据流的多线程算法部署方法及系统。

2、为了到达预期效果,本发明采用了以下技术方案:

3、本发明公开了一种基于数据流的多线程算法部署方法,包括:

4、分别创建工作流中各个数据与各个算法模块的映射关系;

5、向工作流的消息队列中输入数据,并通过调度线程实时查看消息队列中输入数据的状态;

6、当与算法模块具有映射关系的所有输入数据均为已就绪状态时,则调度线程将全部已就绪的输入数据传给对应的算法模块执行;

7、将算法模块执行完成后的输出数据放入消息队列中,并将该输出数据的状态置为已就绪。

8、进一步地,该方法采用一个消息队列存放所有数据,且所有算法模块均采用并行方式运行。

9、进一步地,所述分别创建工作流中各个数据与各个算法模块的映射关系,具体包括:构建一个虚拟的算法模块,创建工作流中各个数据与该虚拟的算法模块的映射关系。

10、进一步地,所述映射关系的建立过程具体包括:获取各个算法模块的输入和输出的数据类别,给所有的数据类别均分配一个预置的id,各个数据通过id与各个算法模块建立映射关系。

11、进一步地,所述消息队列用于存放若干个数据帧,每当新输入数据,消息队列均创建一个新的数据帧。

12、进一步地,数据存放至消息队列的速度小于或等于整个算法系统处理每个数据帧的速度。

13、进一步地,每个数据帧存放的数据包括:数据的名称、数据的id、数据的当前状态以及数据的当前实际数值。

14、进一步地,当调度线程发现消息队列中存在已就绪状态的输入数据,则继续查找与该已就绪的输入数据具有映射关系的算法模块,否则继续查看消息队列中输入数据的状态。

15、进一步地,当与算法模块具有映射关系的所有输入数据均为已就绪状态时,则调度线程将全部已就绪的输入数据传给对应的算法模块执行,否则调度线程继续查看消息队列中输入数据的状态。

16、本发明还公开了一种基于数据流的多线程算法部署系统,包括:

17、接收模块,用于接收输入数据并存放至工作流的消息队列中;

18、调度模块,用于分别创建工作流中各个数据与各个算法模块的映射关系;通过调度线程实时查看消息队列中输入数据的状态;当与算法模块具有映射关系的所有输入数据均为已就绪状态时,则调度线程将全部已就绪的输入数据传给对应的算法模块执行;将算法模块执行完成后的输出数据放入消息队列中,并将该输出数据的状态置为已就绪。

19、与现有技术相比,本发明的有益效果是:本发明公开了一种基于数据流的多线程算法部署方法及系统,该方法包括:分别创建工作流中各个数据与各个算法模块的映射关系;向工作流的消息队列中输入数据,并通过调度线程实时查看消息队列中输入数据的状态;当与算法模块具有映射关系的所有输入数据均为已就绪状态时,则调度线程将全部已就绪的输入数据传给对应的算法模块执行;将算法模块执行完成后的输出数据放入消息队列中,并将该输出数据的状态置为已就绪。本发明提供了一种多任务算法的调度框架,该框架以数据流为核心,采用多线程的方式并联各个算法模块,让整个算法系统能够在硬件上高效地运行,且后续的二次开发门槛较低,代码高度可复用,极大地提高了开发效率。本发明基于业务需求搭建业务数据流,根据这些数据流将各个算法模块并联起来,最大化地利用cpu或者其他硬件资源来实现算法模块的最大并行度地运行,而且在该框架下,开发者可以重点专注于各个模块功能的开发,不用过多关注各个模块之间的线程关系,从而提升开发效率。本发明的框架设计采用的是一种特殊的并行方式,只需要一个消息队列,将所有的数据存放在该消息队列中,并建立一个虚拟的算法模块与消息队列的映射关系,然后通过调度线程获取消息队列中的数据,根据映射关系,将数据分发给各个算法模块线程执行。本发明可以让各个算法模块更加标准化,且通过建立算法模块与数据的映射关系,让复杂的流程变得简单,这样不仅能并行处理多任务算法以提升运行速度、提高硬件资源的使用率,也能简单清晰的处理复杂算法之间的数据关系,从而降低开发成本,提升开发效率。



技术特征:

1.一种基于数据流的多线程算法部署方法,其特征在于,包括:

2.如权利要求1所述的一种基于数据流的多线程算法部署方法,其特征在于,该方法采用一个消息队列存放所有数据,且所有算法模块均采用并行方式运行。

3.如权利要求1所述的一种基于数据流的多线程算法部署方法,其特征在于,所述分别创建工作流中各个数据与各个算法模块的映射关系,具体包括:构建一个虚拟的算法模块,创建工作流中各个数据与该虚拟的算法模块的映射关系。

4.如权利要求1或3所述的一种基于数据流的多线程算法部署方法,其特征在于,所述映射关系的建立过程具体包括:获取各个算法模块的输入和输出的数据类别,给所有的数据类别均分配一个预置的id,各个数据通过id与各个算法模块建立映射关系。

5.如权利要求1所述的一种基于数据流的多线程算法部署方法,其特征在于,所述消息队列用于存放若干个数据帧,每当新输入数据,消息队列均创建一个新的数据帧。

6.如权利要求5所述的一种基于数据流的多线程算法部署方法,其特征在于,数据存放至消息队列的速度小于或等于整个算法系统处理每个数据帧的速度。

7.如权利要求5或6所述的一种基于数据流的多线程算法部署方法,其特征在于,每个数据帧存放的数据包括:数据的名称、数据的id、数据的当前状态以及数据的当前实际数值。

8.如权利要求1所述的一种基于数据流的多线程算法部署方法,其特征在于,当调度线程发现消息队列中存在已就绪状态的输入数据,则继续查找与该已就绪的输入数据具有映射关系的算法模块,否则继续查看消息队列中输入数据的状态。

9.如权利要求1所述的一种基于数据流的多线程算法部署方法,其特征在于,当与算法模块具有映射关系的所有输入数据均为已就绪状态时,则调度线程将全部已就绪的输入数据传给对应的算法模块执行,否则调度线程继续查看消息队列中输入数据的状态。

10.一种基于数据流的多线程算法部署系统,其特征在于,包括:


技术总结
本发明公开了一种基于数据流的多线程算法部署方法及系统,该方法包括:分别创建工作流中各个数据与各个算法模块的映射关系;向工作流的消息队列中输入数据,并通过调度线程实时查看消息队列中输入数据的状态;当与算法模块具有映射关系的所有输入数据均为已就绪状态时,则调度线程将全部已就绪的输入数据传给对应的算法模块执行;将算法模块执行完成后的输出数据放入消息队列中,并将该输出数据的状态置为已就绪。本发明能够最大化地利用CPU或者其他硬件资源来实现算法模块的最大并行度地运行。基于本发明,开发者可以重点专注于各个模块功能的开发,不用过多关注各个模块之间的线程关系,从而提升开发效率。

技术研发人员:黄立,黄晟,杨帆,田鹏,王鹏
受保护的技术使用者:武汉轩辕智驾科技有限公司
技术研发日:
技术公布日:2024/1/15
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1