一种渲染任务动态调度方法与流程

文档序号:15215965发布日期:2018-08-21 16:51阅读:248来源:国知局

本发明属于计算机技术领域,具体涉及一种渲染任务动态调度方法。



背景技术:

动漫产业是一种全球通用的国际文化产业的重要组成部分,是信息技术与人文文化相结合的被不同背景文化和地域的人们所接受的一种影视产业。动漫产业是一个国家的绿色资产,它具有基本零污染、低能耗的特征,并且可以获得十分可观的经济收入、实现文化传播,增强国家软实力、提升国家文化影响力,所以发展动漫产业是全球倾向性非常明显的政策方针。

当前,通过计算渲染方式生成动漫图片已经成为动漫产生的重要方式之一,渲染质量直接决定了作品的视觉效果。渲染是指从通过对三维物体描述进行软件建模到最终生成数字图像的过程。三维物体模型包括几何、视点、纹理以及照明等信息。随着人们对视觉享受的要求日益增加,渲染的发展与应用势头迅猛,三维物体模型的重要性与复杂性也与日俱增,物体模型信息量增加导致每部作品的渲染时间急速上涨。图片的渲染时间与模型的复杂程度正相关,渲染时间少则几秒,多则几天。一部成熟作品包含多个渲染镜头,每个渲染镜头一般包括几十帧至数千帧。

面对复杂高清渲染场景的庞大计算量,单机渲染早已经不能满足应用需求。为了缩短渲染周期,目前主要通过先进的、性能强大的渲染集群工作环境,即在渲染农场中自助式完成渲染任务。集群渲染有着高度的并行性特性,其利用现有cpu、以太网和操作系统构建的超级计算机,或使用主流的商业计算机硬件设备达到或接近超级计算机的计算能力实现并行渲染的目标。利用集群渲染技术中管理节点可以将一个或多个渲染任务序列化分割成若干单元,由集群中各个节点并行渲染,从而降低整体渲染时间,缩短渲染的制作过程。高效的并行调度算法可以实现负载均衡,提高集群计算节点利用率。

在大规模的集群渲染系统中,节点或者程序渲染异常已不再是偶然现象,在大规模渲染系统中普遍存在。通过对已实现的容错分布式系统进行研究表明,容错调度发挥着重要的作用,并且如今已经有针对节点或程序渲染异常的各种容错调度方法,例如在mapreduce平台的一种结合检查点和主动复制的mapreduce任务的容错调度方法以及对于实时的任务提出了扩展备份资源的弹性调度方法。

由于渲染单元的模式会增加渲染执行的不稳定性,造成过多任务渲染失败,从而导致渲染资源的浪费,而传统的任务调度策略却忽略了对渲染系统不稳定性的考虑,使得对于资源的有效利用受到了严重的限制。



技术实现要素:

为解决上述技术问题,本发明的目的在于提供一种渲染任务动态调度策略,使渲染资源的能够被高效利用和可靠性高。

为实现上述技术目的,所采用的技术方案是:一种渲染任务动态调度方法,包括待渲染任务和若干个渲染单元,对若干个渲染单元并行执行以下步骤:

步骤1、向各渲染单元分别下发由渲染任务交错划分而成的渲染任务集;

步骤2、计算渲染任务集所需的合理调度次数,得到每次调度下的渲染任务数,并按次对每次调度内的渲染任务进行渲染;

步骤3、在进行渲染时判断渲染单元是否异常,如果该渲染单元出现异常,结束该次调度并将该次调度中剩余的渲染任务给予下一次调度进行渲染,如该渲染单元无异常直至该渲染单元渲染结束。

进一步,同一轮调度下的渲染任务具有相同的优先级。

进一步,步骤1中渲染任务集的分发方法是:

假设渲染单元个数为r,渲染任务数共有n个,则存在正整数k和p使得n=k*r+p,因此交错划分的渲染任务集为:

如果渲染单元h采用一次调度分发任务,其中1<h<r,则任务集合srh为式,一次向渲染单元中的渲染节点分发任务集合中的全部任务。

taskseth:[task(h),task(r+h),…,task((k-1)*r+h),task(n-p+h)]

\*mergeformat(2)。

进一步,步骤2中合理调度次数的判断方法是:

步骤2.1、初始化调度次数q:若渲染任务集共有nsrq帧(一个渲染帧即为一个渲染任务),渲染单元中的渲染节点数为m,则调度次数q的初始值设为

步骤2.2、计算合理调度次数:若渲染单元在渲染作业中,规定渲染作业时间为ts,预估的单帧作业时间为te,则比较te*q与ts的大小,若te*q>ts,则调度次数不为合理调度次数,需将调度次数减1重新计算;若te*q>ts,则调度次数为合理的调度次数。

进一步,步骤2中每次调度下的渲染任务数的计算方法是:

在合理的调度次数q下,根据公式和公式计算出每次调度过程中分发的渲染任务集{dr1,dr2,…,drq}和理论上的错帧数nerror;

公式中,i是渲染节点的序号,j是渲染帧序号,k是渲染单元中失败帧的个数,m是渲染单元中渲染节点的个数,z是m的整数倍,表示任务集合的个数,与一次性调度策略相比,任务集合的逐次分发可以保证在渲染单元异常的情况下,渲染单元不会存在过多未渲染的帧。节点渲染第一帧时出现异常状态的概率为p1,节点渲染第二帧时出现异常状态的概率为p2,以此类推,节点渲染第z帧时出现异常状态的概率为pz。

进一步,步骤3中判断渲染单元是否异常的方法是,根据每个渲染任务的平均时间和已成功渲染的渲染任务集合中最短的执行时间tmin_success来判断渲染单元是否异常,如果平均渲染任务的渲染时间小于等于tmin_success,则判定渲染单元为正常状态,继续执行渲染任务,如果平均渲染任务的渲染时间大于tmin_success,则判定渲染单位为异常状态。

本发明的有益效果是:本发明提出的渲染任务动态调度策略,针对一次性任务调度策略出现的单帧渲染失败导致渲染作业失败的问题进行改善,依据渲染单元的节点数和渲染单元的不稳定因素,将每个渲染单元中划分好的任务进行调度次数和帧任务集的调整。这样可以在增加渲染作业可靠性渲染的同时,增加渲染资源的利用率,提高渲染作业的成功率,降低渲染作业完成时间,提升渲染系统的整体性能。

附图说明

图1是本发明的流程图。

具体实施方式

下面结合附图和实施例对本发明作详细描述。

渲染任务动态调度策略针对渲染执行不稳定的问题,通过多次的调度方法降低渲染结果的失败率。

一种渲染任务动态调度方法,包括待渲染任务和若干个渲染单元,对若干个渲染单元并行执行以下步骤:

步骤1、向渲染单元分发由渲染任务集合而成的渲染任务集;

(1)根据用户需求初始化渲染单元,即将渲染节点组成渲染单元,并启动渲染节点上的渲染引擎,等待读入渲染任务参数。同时以渲染单元的个数为基数交错划分渲染任务,假设渲染单元个数为r,渲染任务共有n个,则存在正整数k和p使得n=k*r+p,因此交错划分的渲染任务集为:

步骤2、计算渲染任务集所需的合理调度次数,得到每次调度下的渲染任务数,并按次对每次调度内的渲染任务进行渲染;

步骤3、在进行渲染时判断渲染单元是否异常,如果该渲染单元出现异常,结束该次调度并将该次调度中剩余的渲染任务给予下一次调度进行渲染,如该渲染单元无异常直至该渲染单元渲染结束。

(2)向渲染单元分发任务集合,具体过程如下:

如果渲染单元h采用一次调度分发任务,其中1<h<r,则任务集合srh为式,一次向渲染单元中的渲染节点分发任务集合中的全部任务。

taskseth:[task(h),task(r+h),…,task((k-1)*r+h),task(n-p+h)]

\*mergeformat(2)

如果渲染单元q的任务调度采用多次调度方式,其中1<q<r,则任务集合srq的分发过程如下:

①初始化调度次数q。若渲染单元任务集共有nsrq帧,渲染单元中的渲染节点数为m,则调度次数q的初始值设为

②计算合理调度次数。若镜头作业属性中,规定作业时间为ts,预估的单帧作业时间为te,则比较te*q与ts的大小,若te*q>ts,则调度次数不为合理调度次数,需将调度次数减1重新计算;若te*q>ts,则调度次数为合理的调度次数。

③在合理的调度次数q下,根据公式和公式计算出每次调度过程中分发的帧数集{dr1,dr2,…,drq}和理论上的错帧数nerror;

公式中,i是渲染节点的序号,j是渲染帧序号,k是渲染单元中失败帧的个数,m是渲染单元中渲染节点的个数,z是m的整数倍,表示任务集合的个数,与一次性调度策略相比,任务集合的逐次分发可以保证在渲染单元异常的情况下,渲染单元不会存在过多未渲染的帧。节点渲染第一帧时出现异常状态的概率为p1,节点渲染第二帧时出现异常状态的概率为p2,以此类推,节点渲染第z帧时出现异常状态的概率为pz。

公式中q表示调度次数,根据q的取值不同用于确定渲染单元第i批次的分发任务数量dri,当一个渲染单元的任务集srq个数nsrq确定的前提下,调度次数q的取值范围属于

(3)判断渲染单元是否异常。在整个渲染单元的执行过程中,渲染管理系统对渲染单元每批任务的执行时间进行管理,由于渲染任务的最小单元是帧,根据每帧的平均时间和已成功渲染帧集合中最短的执行时间tmin_success来判断渲染单元是否异常。已成功渲染帧集合可以表示为(renderingframe0,renderingframe1,...,renderingframem),则该集合的最短执行时间tmin_success可表示为式,其中min()函数的功能是返回列表中数据的最小值,t(renderingframei)表示第i帧的渲染执行时间。

tmin_success=min(t(renderingframe0),t(renderingframe1),…,t(renderingframem))

\*mergeformat(5)

如果平均帧渲染时间小于等于tmin_success,则判定渲染单元为正常状态,继续执行渲染任务。如果平均帧渲染时间大于tmin_success,则判定渲染单位为异常状态,停止结束渲染单元进程,然后调用空闲状态的新的调度,启动渲染节点上的渲染引擎,读入异常时该次调度剩下的渲染任务给予下一次调度进行渲染,继续执行剩余渲染工作任务。

接下来通过一个镜头作业调度实例具体说明任务执行渲染任务调度算法运行过程。假设当前待调度作业的总帧数是100,指定的渲染单元数量r是2,每个渲染单元的渲染节点(slave)数量是10,镜头作业属性如表1所示。

表1镜头作业属性

在已经集成的交错帧划分器中,根据渲染单元数(并非slave节点的数量)进行任务划分。第一个渲染单元任务集为{1,3,5,…,99}共50帧;第二渲染单元任务集为{2,4,…,100}共50帧。

现以第一个渲染单元的任务调度为例说明渲染任务调度算法。首先根据slave节点的数量计算出任务最多调度的次数为50/10=5次。初始时,设置q为5,则5次调度中每次分发的帧数为10,则理论出错的帧数为nerror=(1-(1-0.09)11)*10+(1-(1-0.03)11)*10+(1-(1-0.01)11)*10*3,计算出nerror=10。然后判断5次是否为合理调度。由于18*5>80,所以q为5是不合理调度次数。将q值减1,重复上述计算。根据公式和公式计算4次调度帧分发数分别为10,10,20和10,对应理论出错帧数nerror=10。由于18*4<80,则4次为合理的调度次数。

确定合理的调度次数q后,开始该渲染单元的任务调度,在第一批次的帧渲染过程中,若渲染单元发生异常,则将未完成的余下渲染任务迁移至下一批次调度任务中,此时q=3,重新计算任务分发帧数,开始新一批次的渲染任务,依次类推,直至最后一批次的渲染任务全部结束。

此次统计镜头作业的成功的帧数为90,然后从数据库查找失败10帧的存储路径与帧名,第二个渲染单元中重新渲染,经过一定时间全部成功渲染。

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