一种基于线程级流水线的视频分析加速方法技术

技术编号:14481762 阅读:211 留言:0更新日期:2017-01-25 23:26
本发明专利技术公开了一种视频分析加速方法,将视频帧处理任务按先后顺序划分为四级子任务,并划分到GPU和CPU处理;每一级子任务用一个线程实现,处理完毕后将数据传递给下一级子任务所在线程,各线程并行执行;当没有新的任务或下一级子任务所在线程没有处理完毕时,就暂停等待;相邻两级子任务线程之间使用先进先出FIFO缓冲区队列传递数据;对不存在依赖关系的两个子任务,利用CUDA的函数异步调用实现CPU和GPU子任务的异步协同并行。本发明专利技术有效利用异构系统中各种计算资源,建立合理的任务调度机制,降低不同处理器之间的通信开销,以充分发挥各计算资源的计算能力,提高系统效率。

【技术实现步骤摘要】

本专利技术涉及视频分析领域,更具体的,涉及一种基于线程级流水线的视频分析加速方法
技术介绍
视频分析技术已经广泛应用于安防领域,视频分析中存在着大量的图像数据处理导致效率低下,随着高清摄像头的普及,对视频分析系统进行性能优化很有必要。近年来大多数优化技术都是利用GPU处理视频分析中的复杂计算,将复杂计算模块的串行算法转化为并行算法,利用GPU进行并行计算。然而CPU和GPU是两种不同架构的处理器,采用单纯的GPU优化方法,CPU和GPU由于计算所需时间不同常常相互等待,造成计算资源浪费,无法确保CPU、GPU达到最佳的利用率,无法充分发挥异构平台的计算能力。
技术实现思路
针对现有加速技术的不足,本专利技术要解决的技术问题是克服现有加速方法对CPU、GPU计算资源利用率不足的缺点,提出一种基于线程级流水线的视频分析加速方法,有效利用异构系统中各种计算资源,建立合理的任务调度机制,降低不同处理器之间的通信开销,以充分发挥各计算资源的计算能力,提高系统效率。一种视频分析加速方法,具体为:将视频帧处理任务按先后顺序划分为四级子任务,第一级对应视频帧解码子任务TC1,第二级对应颜色空间转换子任务TC2和运动目标检测及后处理子任务TG1,第三级对应目标提取子任务TC3,第四级对应目标跟踪与目标识别子任务TC4,其中,运动目标检测及后处理TG1在GPU处理,其它子任务在CPU处理;每一级子任务用一个线程实现,处理完毕后将数据传递给下一级子任务所在线程,各线程并行执行;当没有新的任务或下一级子任务所在线程没有处理完毕时,就暂停等待;相邻两级子任务线程之间使用先进先出FIFO缓冲区队列传递数据,为每个子任务设有一个输入队列InputQueue和一个输出队列OutputQueue,本级子任务的InputQueue是上一级子任务的OutputQueue,本级子任务的OutputQueue是下一级子任务的InputQueue;对不存在依赖关系的颜色空间转换子任务TC2和运动目标检测及后处理子任务TG1,利用CUDA的函数异步调用实现CPU和GPU子任务的异步协同并行。进一步地,对在GPU上处理的子任务,利用CUDA编程设计实现该子任务的GPU并行处理,GPU中各个核函数产生的中间结果直接存储在GPU的设备存储器中,不拷贝到主机内存,仅仅将最终结果拷贝到主机内存,同时利用CUDA的流并行使CPU、GPU间的数据传输与核函数执行重叠。进一步地,所述输入队列InputQueue和输出队列OutputQueue队列均开辟有两个空间,分别存储奇、偶视频帧的处理后图像数据,每个子任务线程根据当前视频帧号的奇偶读取InputQueue队列中相应的存储空间或者向OutputQueue队列中相应的存储空间写数据。本专利技术的有益效果体现在:本专利技术有效利用异构系统中各种计算资源,建立合理的任务调度机制,降低不同处理器之间的通信开销,以充分发挥各计算资源的计算能力,提高系统效率。应用本专利技术对高清视频的处理,CPU利用率相对简单的GPU加速提高了一倍左右,GPU利用率提高了约25%,最终系统的处理速度提高了一倍。1080P的高清视频处理速度可以达到130帧/s,720P的高清视频处理速度可以达到240帧/s。附图说明图1是视频分析的处理过程图;图2是根据各子任务间的依赖关系构造的DAG图;图3是CUDA异步模式下CPU与GPU并行处理流程图;图4是线程流水线框架中子任务线程的处理流程图;图5是视频分析的四级流水线示意图;图6是视频分析流水线中子任务线程对缓冲区读写流程图。具体实施方式为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。此外,下面所描述的本专利技术各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。图1是视频分析的处理过程图.本专利技术方法包括以下步骤:将视频分析任务划分为多个子任务,以TC1TC2TC3TC4表示CPU任务编号,TG1表示GPU任务标号,将系统划分为以下子任务:TC1:视频解码;TC2:颜色空间的转换;TG1:运动目标检测及后处理(GPU);TC3:目标提取;TG1:目标跟踪与目标识别;其中,运动目标检测及其后处理TG1在GPU上进行计算,其余子任务在CPU上进行处理。运动目标检测可采用ViBe算法,运动目标后处理的膨胀腐蚀处理可采用VHGW算法,滤波可采用中值滤波。根据各子任务的依赖关系构造DAG图如图2所示。图中虚线部分的两个分支表示没有依赖关系的两个任务分支,也就是说CPU中颜色空间的转化任务TC2和GPU中的运动目标检测及其后处理任务TG1可以并行执行。对所得DAG图中不存在依赖关系的CPU和GPU子任务,CUDA程序中的内存拷贝函数和核函数采用CUDA异步调用模式进行调用,可以在调用内存拷贝函数和GPU核函数后,不等函数执行完成立即返回,从而使得CPU和GPU可以并行工作。CPU、GPU异步并行的执行流程如图3所示,在CPU解码得到一帧图像数据之后,利用CUDA的函数异步调用方式调用数据传输函数和核函数,之后函数立马返回,CPU开始进行颜色空间转换的计算,同时GPU进行运动目标检测及其后处理的计算,CPU和GPU都执行完成后,将GPU的计算结果拷贝回主机内存由CPU进行下一步计算。利用CUDA设计实现运动目标检测及其后处理的GPU并行算法,根据GPU存储器模型特点、GPU计算特点对CUDA程序进行存储器优化、指令优化。在该子任务中,各个核函数产生的结果直接存储在GPU的设备存储器中,不拷贝到主机内存,仅仅将最终结果拷贝到主机内存,同时利用CUDA的流并行使CPU、GPU间的数据传输与核函数执行重叠,达到隐藏数据传输延迟的目的。参考指令流水线的架构,本专利技术设计实现线程流水线框架。线程流水线框架包括四个要素:(1)任务(Task)。任务类型相当于指令流水线中的指令,代表流水线系统中需要处理的对象,该对象作为模板参数传入流水线,之后流水线的处理都是针对这类任务进行的。(2)子任务(SubTask)。每个任务拆分为多个独立的子任务,每个子任务由一个线程负责,多个子任务线程串行处理同一个任务,错位并行处理不同的任务。当一个任务在所有的子任务线程中都执行一遍后,才算处理完一个任务。(3)缓冲区队列(Queue)。用来在各个子任务线程之间传递数据的是先进先出(FIFO)缓冲区队列,每个子任务都有一个InputQueue和OutputQueue,并且其InputQueue是流水线的上一个子任务的OutputQueue,其OutputQueue是流水线的下一个子任务的InputQueue。子任务线程依次从InputQueue获取数据,进行处理,处理完毕后将生成的数据放入OutputQueue,等待下一个子任务线程处理。当没有新的任务或后面的线程没有处理完毕时,就暂停等待。(4)流水线(PipeLine)。一个流水线中有一个或多个子任务线程,各线程可以并行执行,对同一个任务串行处理。当所有的任务执行完成后这个流水线才会结束。每一个子任务用一个线程来实现,把这些线程按照流水线的方式连接,就可以构本文档来自技高网...
一种基于线程级流水线的视频分析加速方法

【技术保护点】
一种视频分析加速方法,其特征在于,具体为:将视频帧处理任务按先后顺序划分为四级子任务,第一级对应视频帧解码子任务TC1,第二级对应颜色空间转换子任务TC2和运动目标检测及后处理子任务TG1,第三级对应目标提取子任务TC3,第四级对应目标跟踪与目标识别子任务TC4,其中,运动目标检测及后处理TG1在GPU处理,其它子任务在CPU处理;每一级子任务用一个线程实现,处理完毕后将数据传递给下一级子任务所在线程,各线程并行执行;当没有新的任务或下一级子任务所在线程没有处理完毕时,就暂停等待;相邻两级子任务线程之间使用先进先出FIFO缓冲区队列传递数据,为每个子任务设有一个输入队列InputQueue和一个输出队列OutputQueue,本级子任务的InputQueue是上一级子任务的OutputQueue,本级子任务的OutputQueue是下一级子任务的InputQueue;对不存在依赖关系的颜色空间转换子任务TC2和运动目标检测及后处理子任务TG1,利用CUDA的函数异步调用实现CPU和GPU子任务的异步协同并行。

【技术特征摘要】
1.一种视频分析加速方法,其特征在于,具体为:将视频帧处理任务按先后顺序划分为四级子任务,第一级对应视频帧解码子任务TC1,第二级对应颜色空间转换子任务TC2和运动目标检测及后处理子任务TG1,第三级对应目标提取子任务TC3,第四级对应目标跟踪与目标识别子任务TC4,其中,运动目标检测及后处理TG1在GPU处理,其它子任务在CPU处理;每一级子任务用一个线程实现,处理完毕后将数据传递给下一级子任务所在线程,各线程并行执行;当没有新的任务或下一级子任务所在线程没有处理完毕时,就暂停等待;相邻两级子任务线程之间使用先进先出FIFO缓冲区队列传递数据,为每个子任务设有一个输入队列InputQueue和一个输出队列OutputQueue,本级子任务的InputQueue是上一级子任务的OutputQueue,本级子任务的OutputQueue是下一级子任务的InputQueu...

【专利技术属性】
技术研发人员:凌贺飞李深唐堃
申请(专利权)人:华中科技大学
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1