CN108415766B - 一种渲染任务动态调度方法 - Google Patents

一种渲染任务动态调度方法 Download PDF

Info

Publication number
CN108415766B
CN108415766B CN201810184677.3A CN201810184677A CN108415766B CN 108415766 B CN108415766 B CN 108415766B CN 201810184677 A CN201810184677 A CN 201810184677A CN 108415766 B CN108415766 B CN 108415766B
Authority
CN
China
Prior art keywords
rendering
scheduling
task
tasks
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810184677.3A
Other languages
English (en)
Other versions
CN108415766A (zh
Inventor
孙泽宇
韩哲
李远博
赵国增
吕治国
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Luoyang Lanjing Brand Planning Co.,Ltd.
Original Assignee
Luoyang Institute of Science and Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Luoyang Institute of Science and Technology filed Critical Luoyang Institute of Science and Technology
Priority to CN201810184677.3A priority Critical patent/CN108415766B/zh
Publication of CN108415766A publication Critical patent/CN108415766A/zh
Application granted granted Critical
Publication of CN108415766B publication Critical patent/CN108415766B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T13/00Animation
    • G06T13/203D [Three Dimensional] animation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Processing Or Creating Images (AREA)

Abstract

一种渲染任务动态调度方法,针对管理系统与渲染单元的调度耗时与渲染异常问题,传统的解决方法采用一次静态调度策略,导致渲染结果失败帧数较多。本发明以减少镜头作业整体渲染失败率为目标,采用多次动态调度策略,设计实现了一种渲染任务调度算法。该算法核心思想是通过多次动态调度,尽可能减少由渲染单元异常造成的渲染结果失败问题,并通过实时的渲染单元异常检测,有效的提高节点资源的利用率,降低了渲染的失败率。

Description

一种渲染任务动态调度方法
技术领域
本发明属于计算机技术领域,具体涉及一种渲染任务动态调度方法。
背景技术
动漫产业是一种全球通用的国际文化产业的重要组成部分,是信息技术与人文文化相结合的被不同背景文化和地域的人们所接受的一种影视产业。动漫产业是一个国家的绿色资产,它具有基本零污染、低能耗的特征,并且可以获得十分可观的经济收入、实现文化传播,增强国家软实力、提升国家文化影响力,所以发展动漫产业是全球倾向性非常明显的政策方针。
当前,通过计算渲染方式生成动漫图片已经成为动漫产生的重要方式之一,渲染质量直接决定了作品的视觉效果。渲染是指从通过对三维物体描述进行软件建模到最终生成数字图像的过程。三维物体模型包括几何、视点、纹理以及照明等信息。随着人们对视觉享受的要求日益增加,渲染的发展与应用势头迅猛,三维物体模型的重要性与复杂性也与日俱增,物体模型信息量增加导致每部作品的渲染时间急速上涨。图片的渲染时间与模型的复杂程度正相关,渲染时间少则几秒,多则几天。一部成熟作品包含多个渲染镜头,每个渲染镜头一般包括几十帧至数千帧。
面对复杂高清渲染场景的庞大计算量,单机渲染早已经不能满足应用需求。为了缩短渲染周期,目前主要通过先进的、性能强大的渲染集群工作环境,即在渲染农场中自助式完成渲染任务。集群渲染有着高度的并行性特性,其利用现有CPU、以太网和操作系统构建的超级计算机,或使用主流的商业计算机硬件设备达到或接近超级计算机的计算能力实现并行渲染的目标。利用集群渲染技术中管理节点可以将一个或多个渲染任务序列化分割成若干单元,由集群中各个节点并行渲染,从而降低整体渲染时间,缩短渲染的制作过程。高效的并行调度算法可以实现负载均衡,提高集群计算节点利用率。
在大规模的集群渲染系统中,节点或者程序渲染异常已不再是偶然现象,在大规模渲染系统中普遍存在。通过对已实现的容错分布式系统进行研究表明,容错调度发挥着重要的作用,并且如今已经有针对节点或程序渲染异常的各种容错调度方法,例如在MapReduce平台的一种结合检查点和主动复制的MapReduce任务的容错调度方法以及对于实时的任务提出了扩展备份资源的弹性调度方法。
由于渲染单元的模式会增加渲染执行的不稳定性,造成过多任务渲染失败,从而导致渲染资源的浪费,而传统的任务调度策略却忽略了对渲染系统不稳定性的考虑,使得对于资源的有效利用受到了严重的限制。
发明内容
为解决上述技术问题,本发明的目的在于提供一种渲染任务动态调度策略,使渲染资源的能够被高效利用和可靠性高。
为实现上述技术目的,所采用的技术方案是:一种渲染任务动态调度方法,包括待渲染任务和若干个渲染单元,对若干个渲染单元并行执行以下步骤:
步骤1、向各渲染单元分别下发由渲染任务交错划分而成的渲染任务集;
步骤2、计算渲染任务集所需的合理调度次数,得到每次调度下的渲染任务数,并按次对每次调度内的渲染任务进行渲染;
步骤3、在进行渲染时判断渲染单元是否异常,如果该渲染单元出现异常,结束该次调度并将该次调度中剩余的渲染任务给予下一次调度进行渲染,如该渲染单元无异常直至该渲染单元渲染结束。
进一步,同一轮调度下的渲染任务具有相同的优先级。
进一步,步骤1中渲染任务集的分发方法是:
假设渲染单元个数为r,渲染任务数共有N个,则存在正整数k和p使得N=k*r+p,因此交错划分的渲染任务集为:
Figure GDA0003259625040000021
如果渲染单元h采用一次调度分发任务,其中1<h<r,则任务集合Srh为式(2),一次向渲染单元中的渲染节点分发任务集合中的全部任务。
TaskSeth:[task(h),task(r+h),…,task((k-1)*r+h),task(N-p+h)] (2)。
进一步,步骤2中合理调度次数的判断方法是:
步骤2.1、初始化调度次数Q:若渲染任务集共有NSrq帧(一个渲染帧即为一个渲染任务),渲染单元中的渲染节点数为M,则调度次数Q的初始值设为
Figure GDA0003259625040000031
步骤2.2、计算合理调度次数:若渲染单元在渲染作业中,规定渲染作业时间为Ts,预估的单帧作业时间为Te,则比较Te*Q与Ts的大小,若Te*Q>Ts,则调度次数不为合理调度次数,需将调度次数减1重新计算;若Te*Q<Ts,则调度次数为合理的调度次数。
进一步,步骤2中每次调度下的渲染任务数的计算方法是:
在合理的调度次数Q下,根据公式(3)和公式(4)计算出每次调度过程中分发的渲染任务集{Dr1,Dr2,…,DrQ}和理论上的错帧数Nerror;
Figure GDA0003259625040000032
Figure GDA0003259625040000033
公式(3)中,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,因此交错划分的渲染任务集为:
Figure GDA0003259625040000041
步骤2、计算渲染任务集所需的合理调度次数,得到每次调度下的渲染任务数,并按次对每次调度内的渲染任务进行渲染;
步骤3、在进行渲染时判断渲染单元是否异常,如果该渲染单元出现异常,结束该次调度并将该次调度中剩余的渲染任务给予下一次调度进行渲染,如该渲染单元无异常直至该渲染单元渲染结束。
(2)向渲染单元分发任务集合,具体过程如下:
如果渲染单元h采用一次调度分发任务,其中1<h<r,则任务集合Srh为式(2),一次向渲染单元中的渲染节点分发任务集合中的全部任务。
TaskSeth:[task(h),task(r+h),…,task((k-1)*r+h),task(N-p+h)] (6)
如果渲染单元q的任务调度采用多次调度方式,其中1<q<r,则任务集合Srq的分发过程如下:
①初始化调度次数Q。若渲染单元任务集共有NSrq帧,渲染单元中的渲染节点数为M,则调度次数Q的初始值设为
Figure GDA0003259625040000051
②计算合理调度次数。若镜头作业属性中,规定作业时间为Ts,预估的单帧作业时间为Te,则比较Te*Q与Ts的大小,若Te*Q>Ts,则调度次数不为合理调度次数,需将调度次数减1重新计算;若Te*Q<Ts,则调度次数为合理的调度次数。
③在合理的调度次数Q下,根据公式(3)和公式(4)计算出每次调度过程中分发的帧数集{Dr1,Dr2,…,DrQ}和理论上的错帧数Nerror;
Figure GDA0003259625040000052
Figure GDA0003259625040000053
公式(3)中,i是渲染节点的序号,j是渲染帧序号,K是渲染单元中失败帧的个数,M是渲染单元中渲染节点的个数,z是M的整数倍,表示任务集合的个数,与一次性调度策略相比,任务集合的逐次分发可以保证在渲染单元异常的情况下,渲染单元不会存在过多未渲染的帧。节点渲染第一帧时出现异常状态的概率为p1,节点渲染第二帧时出现异常状态的概率为p2,以此类推,节点渲染第z帧时出现异常状态的概率为pz
公式(4)中Q表示调度次数,根据Q的取值不同用于确定渲染单元第i批次的分发任务数量Dri,当一个渲染单元的任务集Srq个数NSrq确定的前提下,调度次数Q的取值范围属于
Figure GDA0003259625040000054
(3)判断渲染单元是否异常。在整个渲染单元的执行过程中,渲染管理系统对渲染单元每批任务的执行时间进行管理,由于渲染任务的最小单元是帧,根据每帧的平均时间和已成功渲染帧集合中最短的执行时间Tmin_success来判断渲染单元是否异常。已成功渲染帧集合可以表示为(RenderingFrame0,RenderingFrame1,...,RenderingFramem),则该集合的最短执行时间Tmin_success可表示为式(5),其中min()函数的功能是返回列表中数据的最小值,T(RenderingFramei)表示第i帧的渲染执行时间。
Tmin_success=min(T(RenderingFrame0),T(RenderingFrame1),…,T(RenderingFramem)) (9)
如果平均帧渲染时间小于等于Tmin_success,则判定渲染单元为正常状态,继续执行渲染任务。如果平均帧渲染时间大于Tmin_success,则判定渲染单位为异常状态,停止结束渲染单元进程,然后调用空闲状态的新的调度,启动渲染节点上的渲染引擎,读入异常时该次调度剩下的渲染任务给予下一次调度进行渲染,继续执行剩余渲染工作任务。
接下来通过一个镜头作业调度实例具体说明任务执行渲染任务调度算法运行过程。假设当前待调度作业的总帧数是100,指定的渲染单元数量r是2,每个渲染单元的渲染节点(Slave)数量是10,镜头作业属性如表1所示。
表1镜头作业属性
Figure GDA0003259625040000061
在已经集成的交错帧划分器中,根据渲染单元数(并非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,重复上述计算。根据公式(3)和公式(4)计算4次调度帧分发数分别为10,10,20和10,对应理论出错帧数Nerror=10。由于18*4<80,则4次为合理的调度次数。
确定合理的调度次数Q后,开始该渲染单元的任务调度,在第一批次的帧渲染过程中,若渲染单元发生异常,则将未完成的余下渲染任务迁移至下一批次调度任务中,此时Q=3,重新计算任务分发帧数,开始新一批次的渲染任务,依次类推,直至最后一批次的渲染任务全部结束。
此次统计镜头作业的成功的帧数为90,然后从数据库查找失败10帧的存储路径与帧名,第二个渲染单元中重新渲染,经过一定时间全部成功渲染。

Claims (5)

1.一种渲染任务动态调度方法,其特征在于:一种渲染任务动态调度方法,包括待渲染任务和若干个渲染单元,对若干个渲染单元并行执行以下步骤:
步骤1、向各渲染单元分别下发由渲染任务交错划分而成的渲染任务集;
步骤1中渲染任务集的分发方法是:
假设渲染单元个数为r,渲染任务数共有N个,则存在正整数k和p使得N=k*r+p,因此交错划分的渲染任务集为:
Figure FDA0003259625030000011
如果渲染单元h采用一次调度分发任务,其中1<h<r,则任务集合Srh为式(2),一次向渲染单元中的渲染节点分发任务集合中的全部任务
TaskSeth:[task(h),task(r+h),…,task((k-1)*r+h),task(N-p+h)] (2)
步骤2、计算渲染任务集所需的合理调度次数,得到每次调度下的渲染任务数,并按次对每次调度内的渲染任务进行渲染;
步骤3、在进行渲染时判断渲染单元是否异常,如果该渲染单元出现异常,结束该次调度并将该次调度中剩余的渲染任务给予下一次调度进行渲染,如该渲染单元无异常直至该渲染单元渲染结束。
2.根据权利要求1所述的一种渲染任务动态调度方法,其特征在于:同一轮调度下的渲染任务具有相同的优先级。
3.根据权利要求1所述的一种渲染任务动态调度方法,其特征在于:步骤2中合理调度次数的判断方法是:
步骤2.1、初始化调度次数Q:若渲染任务集共有NSrq帧,渲染单元中的渲染节点数为M,则调度次数Q的初始值设为
Figure FDA0003259625030000012
步骤2.2、计算合理调度次数:若渲染单元在渲染作业中,规定渲染作业时间为Ts,预估的单帧作业时间为Te,则比较Te*Q与Ts的大小,若Te*Q>Ts,则调度次数不为合理调度次数,需将调度次数减1重新计算;若Te*Q<Ts,则调度次数为合理的调度次数。
4.根据权利要求1所述的一种渲染任务动态调度方法,其特征在于:步骤2中每次调度下的渲染任务数的计算方法是:
在合理的调度次数Q下,根据公式(3)和公式(4)计算出每次调度过程中分发的渲染任务集{Dr1,Dr2,…,DrQ}和理论上的错帧数Nerror;
Figure FDA0003259625030000021
Figure FDA0003259625030000022
公式(3)中,i是渲染节点的序号,j是渲染帧序号,K是渲染单元中失败帧的个数,M是渲染单元中渲染节点的个数,z是M的整数倍,表示任务集合的个数,与一次性调度策略相比,任务集合的逐次分发可以保证在渲染单元异常的情况下,渲染单元不会存在过多未渲染的帧,节点渲染第一帧时出现异常状态的概率为p1,节点渲染第二帧时出现异常状态的概率为p2,以此类推,节点渲染第z帧时出现异常状态的概率为pz
5.根据权利要求1所述的一种渲染任务动态调度方法,其特征在于:步骤3中判断渲染单元是否异常的方法是,根据每个渲染任务的平均时间和已成功渲染的渲染任务集合中最短的执行时间Tmin_success来判断渲染单元是否异常,如果平均渲染任务的渲染时间小于等于Tmin_success,则判定渲染单元为正常状态,继续执行渲染任务,如果平均渲染任务的渲染时间大于Tmin_success,则判定渲染单位为异常状态。
CN201810184677.3A 2018-03-06 2018-03-06 一种渲染任务动态调度方法 Active CN108415766B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810184677.3A CN108415766B (zh) 2018-03-06 2018-03-06 一种渲染任务动态调度方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810184677.3A CN108415766B (zh) 2018-03-06 2018-03-06 一种渲染任务动态调度方法

Publications (2)

Publication Number Publication Date
CN108415766A CN108415766A (zh) 2018-08-17
CN108415766B true CN108415766B (zh) 2022-01-28

Family

ID=63130014

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810184677.3A Active CN108415766B (zh) 2018-03-06 2018-03-06 一种渲染任务动态调度方法

Country Status (1)

Country Link
CN (1) CN108415766B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109448092B (zh) * 2018-11-13 2023-04-28 天津津航计算技术研究所 一种基于动态任务粒度的负载均衡集群渲染方法
CN109710463A (zh) * 2018-12-27 2019-05-03 亚信科技(中国)有限公司 一种任务调度方法及装置
CN113689529A (zh) * 2021-09-02 2021-11-23 王会 一种实时动画生成方法
CN116932230B (zh) * 2023-09-15 2023-12-08 湖南马栏山视频先进技术研究院有限公司 一种基于动态任务调度的视频渲染方法

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2638453C (en) * 2006-03-14 2010-11-09 Transgaming Technologies Inc. General purpose software parallel task engine
CN103617062B (zh) * 2013-12-05 2016-09-07 山东大学 一种柔性的渲染集群动态部署系统与方法
CN103995684B (zh) * 2014-05-07 2017-01-25 广州瀚阳工程咨询有限公司 超高分辨率平台下的海量影像并行处理显示方法及系统
CN104182280B (zh) * 2014-07-30 2017-04-12 山东大学 面向混合主存嵌入式系统的低能耗rm实时任务调度方法
CN106101196B (zh) * 2016-06-01 2019-04-30 上海上大海润信息系统有限公司 一种基于概率模型的云渲染平台任务调度系统
CN105959238A (zh) * 2016-06-28 2016-09-21 深圳市彬讯科技有限公司 一种基于消息队列多优先级渲染资源的调度方法及系统
CN106502794B (zh) * 2016-10-24 2019-10-11 深圳市彬讯科技有限公司 一种基于云端渲染的三维效果图高效渲染方法
CN106777180B (zh) * 2016-12-22 2020-09-01 北京京东金融科技控股有限公司 高性能分布式数据转换的方法、装置及系统
CN107274470B (zh) * 2017-06-15 2020-10-09 深圳市彬讯科技有限公司 一种基于实时离线渲染并行的多优先级队列调度方法

Also Published As

Publication number Publication date
CN108415766A (zh) 2018-08-17

Similar Documents

Publication Publication Date Title
CN108415766B (zh) 一种渲染任务动态调度方法
CN110262901B (zh) 一种数据处理方法及数据处理系统
US20120317579A1 (en) System and method for performing distributed parallel processing tasks in a spot market
CN103561055B (zh) 基于会话的云计算环境下Web应用自动弹性扩展方法
US20230244537A1 (en) Efficient gpu resource allocation optimization method and system
CN103581332A (zh) HDFS架构及HDFS架构中NameNode节点的压力分解方法
TW201702908A (zh) 資料庫彈性調度方法以及裝置
CN114610474A (zh) 一种异构超算环境下多策略的作业调度方法及系统
CN107450855A (zh) 一种用于分布式存储的模型可变的数据分布方法及系统
CN115237580A (zh) 面向智能计算的流水并行训练自适应调整系统、方法
CN110134506A (zh) 基于处理器内核动态的实时动态关键路径多核调度方法
CN109448092B (zh) 一种基于动态任务粒度的负载均衡集群渲染方法
CN112463340A (zh) 基于tensorflow的多任务弹性调度方法及系统
CN104378239A (zh) 基于集群框架的快速可靠性指标统计系统及方法
WO2023193527A1 (zh) 线程执行方法、装置、电子设备及计算机可读存储介质
CN116340393A (zh) 数据库饱和度的预测方法、存储介质及数据库系统
CN113238841B (zh) 一种基于云计算技术的任务调度方法
Li et al. SLA‐Aware and Energy‐Efficient VM Consolidation in Cloud Data Centers Using Host State 3rd‐Order Markov Chain Model
CN111209109B (zh) 一种基于docker的家装行业云渲染集群调度系统及调度方法
WO2019086120A1 (en) A system and method for high-performance general-purpose parallel computing with fault tolerance and tail tolerance
Liu A Programming Model for the Cloud Platform
CN116991562B (zh) 一种数据处理方法、装置、电子设备及存储介质
Yuan et al. Efficient scheduling of DAG tasks on multi-core processor based parallel systems
CN113312208B (zh) 一种基于系统资源的均衡集中备份方法
Mu et al. Performace Analysis and Optimization for Short-time Rendering Frames

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20221028

Address after: 471000 Room 304, Building 1, Science Park, Luoyang National University, No. 2 Penglai Road, Jianxi District, Luoyang District, China (Henan) Pilot Free Trade Zone, Luoyang City, Henan Province

Patentee after: Luoyang Lanjing Brand Planning Co.,Ltd.

Address before: 471000 Building 1, Yin Kun science and Technology Park, 8 Fenghua Road, hi tech Zone, Luoyang, Henan

Patentee before: LUOYANG INSTITUTE OF SCIENCE AND TECHNOLOGY

TR01 Transfer of patent right