一种在GPU中并行处理视频压缩的动态任务迁移调度方法

文档序号:26003794发布日期:2021-07-23 21:21阅读:129来源:国知局
一种在GPU中并行处理视频压缩的动态任务迁移调度方法

本发明涉及并行计算和凸优化领域,尤其是涉及一种在gpu中并行处理视频压缩的动态任务迁移调度方法。



背景技术:

随着视频压缩发展越来越迅速,基于压缩算法所特有的计算复杂度高、处理任务时间长等缺点在实际应用场景中越来越突出,尤其是在一定规模数据的应用场景中更为突出,如大规模城市监控视频处理、交互式视频平台存储服务等。图形处理器(gpu)最早被提出用于图像中各个像素点的处理,由于它的并行性高,在图像处理中有着巨大的优势。但随着并行技术的持续发展和计算市场的逐步完善,目前gpu已被广泛应用于各种视频压缩算法,比如ffmpeg算法,可支持在nvidia设备上处理。

但是,由于gpu内部计算状态的复杂性和硬件资源的独占性,使得算法开发者经常会遇到如下问题:

第一,负载容易导致分配不平衡。例如有多块gpu设备,其运算能力差距很大,但是由于静态很难预测程序的开销,大部分程序都是需要动态分配内存,因此为了保证使用的稳定性,只能倾向于资源分配到性能强的gpu中,从而造成资源的浪费;

第二,资源无法简单共享。多设备间或者多个节点间的设备无法做到共享;

第三,不具备合适的容错机制。由于所有的设备中运行的程序都无法进行即时的中断,无法即时保存状态,对于超大型的长时间计算,光依赖硬件的容错能力是远远不够的。而由于当前视频清晰度运来越高、帧率也不断提高,处理视频压缩的时长也越来越大。据统计,一个五个小时的4k视频压缩任务开销在二十分钟左右,如若仅仅依靠硬件的重启,整个运算将会重新被开始,开销花费巨大。



技术实现要素:

本发明所要解决的技术问题是提供一种在gpu中并行处理视频压缩的动态任务迁移调度方法,该方法能够在并行处理视频压缩任务时,使gpu的负载分配达到平衡,gpu之间的资源能够共享,且视频压缩过程中具备容错机制,从而提高系统的资源利用率以及系统中数据的吞吐率。

本发明所采用的技术方案是,一种在gpu中并行处理视频压缩的动态任务迁移调度方法,该方法包括下列步骤:

(1)、根据大规模数据并行计算的预估模型,按照预估模型的分配方式将需压缩的视频任务分配到系统中的各个gpu设备中,并开始工作;

(2)、每隔一段时间t,服务器的host端记录下各个gpu设备当前的统计信息,服务器的host端根据当前的统计信息来计算出当前系统中每个gpu设备数据处理容量的最优解,并根据最优解来判断是否需要对其中的某些gpu设备中的任务进行动态迁移调度;

(3)、如果需要对gpu设备中的视频任务进行动态迁移调度,那么就以gpu设备中视频的每一帧为处理单元,识别并提取出gpu设备中的每一个work-item的底层硬件的计算状态信息,并将该计算状态信息拷贝回服务器的host端;

(4)、服务器的host端根据每个gpu设备的工作信息进行分析,然后选择出需要调度到的新gpu设备,并将步骤(3)中拷贝的计算状态信息移植到新gpu设备上,进而恢复当前计算任务。

作为优先,步骤(2)中,统计信息的数据结构为{indexi,datai},表示gpu设备索引为indexi的统计信息数据。

作为优先,步骤(2)中,服务器的host端记录下的统计信息具体包括:各个gpu设备的计算单元的利用率c、各个gpu设备的内存使用率m、各个gpu设备的功耗p以及各个gpu设备任务调度时间开销o,所述利用率c,通过固定时间间隔执行shell脚本来获取,所述内存使用率m,可以通过固定时间间隔执行shell脚本来获取,所述功耗p通过固定时间间隔执行shell脚本来获取,所述开销o通过长期测量得出。

作为优先,步骤(2)中,根据最优问题来计算每个gpu设备数据处理容量的最优解,最优问题表示为:

subjecttof1(c)≤b1,b1∈rn

f2(m)≤b2,b2∈rn

1tp≤d,d∈r;

该公式包含了四部分:gpu利用率c、内存使用率m、设备的功耗p以及任务调度时间开销o,系统中所有gpu设备的gpu利用率、内存使用率、功耗、开销均为向量,即c,m,p,o∈rn,其中n为系统gpu设备个数,权重为向量wc,wm,wp,wo,即wc,wm,wp,wo∈rn,f1(x)和f2(x)分别是计算gpu利用率和内存使用率的设备下确界权重函数,其中x∈rn,b1和b2为设备下确界资源向量。

作为优先,步骤(2)中,根据最优解来判断是否需要对其中的某些gpu设备中的任务进行动态迁移调度的具体判断方法为:将计算得到的每个gpu设备数据处理容量的最优解与当前状态下gpu设备的实际工作状态进行比较,如果gpu设备实际的工作状态与其计算得到的最优解一致,就不需要对该gpu设备中的任务进行迁移,如果gpu设备实际的工作状态与其计算得到的最优解不一致,就对该gpu设备种的任务进行迁移。

作为优先,步骤(3)中,每一个work-item的底层硬件的计算状态信息具体包括:全局内存、工作项的栈、指针以及程序计数器。

作为优先,步骤(3)中,全局内存的具体提取方法为:当gpu设备收到服务器host端计算状态提取的指令时,通过查询链表中所有的全局内存块的信息,并且找到host端对应的传输目的地址,把每一段内存块拷贝到host端的相应的位置。

本发明的有益效果是:上述一种在gpu中并行处理视频压缩的动态任务迁移调度方法,该方法中实时监控并且不断调整所有gpu设备的负载以及开销,能够实时提出一个有效可行的任务调度方案,能够在并行处理视频压缩任务时,使gpu的负载分配达到平衡,gpu之间的资源能够共享,且视频压缩过程中具备容错机制,从而提高系统的资源利用率以及系统中数据的吞吐率。

附图说明

图1为本发明一种在gpu中并行处理视频压缩的动态任务迁移调度方法的时序图;

图2为本发明中栈空间数据迁移图。

具体实施方式

以下参照附图并结合具体实施方式来进一步描述发明,以令本领域技术人员参照说明书文字能够据以实施,本发明保护范围并不受限于该具体实施方式。

本领域技术人员应理解的是,在本发明的公开中,术语“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”等指示的方位或位置关系是基于附图所示的方位或位置关系,其仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此上述术语不能理解为对本发明的限制。

本发明涉及一种在gpu中并行处理视频压缩的动态任务迁移调度方法,该方法包括下列步骤:

(1)、根据大规模数据并行计算的预估模型,在服务器上部署并行任务实时监控与分析业务逻辑程序,该程序按照模型的分配方式将需压缩的视频分配到各个gpu设备中开始工作,如图1所示,模型的预估分配都在pre-compiler完成;

(2)、每隔一段时间t,服务器的host端记录下各个gpu设备当前的统计信息,服务器的host端根据当前的统计信息来计算出当前系统中每个gpu设备数据处理容量的最优解,并根据每个gpu设备数据处理容量最优解来判断是否需要对其中的某些gpu设备中的任务进行动态迁移调度,如图1所示;

(3)、如果需要对gpu设备中的视频任务进行动态迁移调度,那么就以gpu设备中视频的每一帧为处理单元,识别并提取出gpu设备中的每一个work-item的底层硬件的计算状态信息,并将该计算状态信息拷贝回服务器的host端,如图2所示,栈空间的数据和指针进行动态迁移,这里的work-item指的是gpu设备中的工作项;

(4)、服务器的host端根据每个gpu设备的工作信息进行分析,然后选择出需要调度到的新gpu设备,并将步骤(3)中拷贝的计算状态信息移植到新gpu设备上,进而恢复当前计算任务。

步骤(2)中,统计信息的数据结构为{indexi,datai},表示gpu设备索引为indexi的统计信息数据。

步骤(2)中,服务器的host端记录下的统计信息具体包括:各个gpu设备的计算单元的利用率c、各个gpu设备的内存使用率m、各个gpu设备的功耗p以及各个gpu设备任务调度时间开销o,所述利用率c,通过固定时间间隔执行shell脚本来获取,所述内存使用率m,可以通过固定时间间隔执行shell脚本来获取,所述功耗p通过固定时间间隔执行shell脚本来获取,所述开销o通过长期测量得出。

步骤(2)中,根据最优问题来计算每个gpu设备数据处理容量的最优解,最优问题表示为:

subjecttof1(c)≤b1,b1∈rn

f2(m)≤b2,b2∈rn

1tp≤d,d∈r;

该公式包含了四部分:gpu利用率c、内存使用率m、设备的功耗p以及任务调度时间开销o,系统中所有gpu设备的gpu利用率、内存使用率、功耗、开销均为向量,即c,m,p,o∈rn,其中n为系统gpu设备个数,权重为向量wc,wm,wp,wo,即wc,wm,wp,wo∈rn,f1(x)和f2(x),其中x∈rn,分别是计算gpu利用率和内存使用率的设备下确界权重函数,b1和b2为设备下确界资源向量。

步骤(2)中,根据最优解来判断是否需要对其中的某些gpu设备中的任务进行动态迁移调度的具体判断方法为:将计算得到的最优解与当前状态下每个gpu设备的工作状态进行比较,如果gpu设备的工作状态与其最优解一致,就不需要对该gpu设备种的任务进行迁移,如果gpu设备的工作状态与其最优解不一致,就对该gpu设备种的任务进行迁移。

步骤(3)中,每一个work-item的底层硬件的计算状态信息具体包括:全局内存、工作项的栈、指针以及程序计数器。

步骤(3)中,在视频压缩中,全局内存主要存放各个帧的输入以及输出像素点,以及用于存放管理控制各个帧的信息。在服务器host端中的一个链表形式的数据结构将会被声明,所有的全局内存块的信息都会保存到该链表中。其中的信息主要包括各个块的大小、各个指针的引用和以及opencl中全局内存的buffer。由于程序可以保证任何时候都能动态发生中断,所有的信息都可以在任意时态发生备份,因此所有的块信息都有链表连接。

当gpu收到服务器端计算状态提取的指令时,通过查询链表中所有的全局内存块的信息,并且找到host端对应的传输目的地址,把每一段内存块拷贝到host端的相应的位置。

步骤(3)中,工作项的栈及其提取方法:在视频压缩中,工作项的栈空间主要存放对于操作视频各个帧的时候所暂存的变量。

所有的变量都被存放到一段连续的数据结构中——结构体。在收到调度系统的信号时,工作项首先会拷贝到全局中,全局内存里有一段专门为gpu的私有内存栈空间和host的暂存空间的传输介质,用于实现他们之间的通信。全局内存的传输介质和栈空间的通信由函数控制块管理。每个子函数的迭代都将被记录在管理块中。函数控制块主要包括栈空间的地址空间、每一次子函数跳转的位置信息、指针和其他一些标记。

步骤(3)中,指针及其提取方法:对于gpu指针的备份来说,由于不同gpu设备上的虚拟地址空间的起始位置不同,因此系统使用基址和偏移量来表示指针,以便更好地在异构设备之间进行移植。

步骤(3)中,程序计数器及其提取方法:在程序运行开始时候用一个正整数来追踪寄存器%rip中的值,能够使gpu方便定位程序在划分的时候所处的位置。整个程序的代码将会被划分成各个case段。在另一台gpu设备时,通过每一次的正整数的位置来映射到程序所在的逻辑位置,从而能够找到程序上一次所中断的位置。

在图1中,根据该系统的预估模型所规划的方式,host在t0时刻将视频压缩任务推送到gpu0设备中。gpu0收到所需要的任务资源之后,在t1启动任务,并且按照计划在t3时刻结束。即压缩时长为2个t时间间隔。在经过一个t的时间间隔之后,根据host的调度系统分析,任务需要进行重分配至gpu1。此时gpu0中的线程挂起,资源进行备份。所有资源拷贝回host端,再由host推送至gpu1中。在gpu1设备中重构备份资源,并且在上一次检查点后继续执行。同时,host端为gpu0重新推送新的任务。

本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1