一种基于图形处理器的的流媒体服务器加速方法

文档序号:7741033阅读:303来源:国知局
专利名称:一种基于图形处理器的的流媒体服务器加速方法
技术领域
本发明属于视频点播系统以及网络编码技术领域,具体涉及一种基于图形处理器 的流媒体服务器加速方法。
背景技术
如今,网络编码技术已经在许多方面得到了应用。尤其是在视频分发的流媒体系 统中,网络编码能大大简化基于P2P的协作传输的调度复杂性,而且能增大系统在网络状 况不稳定,以及系统中节点动态性很大时的适应性,从而对整个系统带来吞吐率的提升。但 是,这样性能的提升是以增加了网络编码计算的开销为代价的。在流媒体系统中,服务器作 为服务提供方,每时每刻都会收到成千上万不同的数据请求;这样一来,由于数据都要先通 过网络编码计算进行编码再发送出去,那么服务器的计算压力就会非常大。这也就成为整 个系统性能的瓶颈所在。网络编码在编码阶段的计算开销是很大的,尤其是在并发任务很多的情况下,这 样系统的计算能力就会成为整体的性能瓶颈。现有的技术就是用CPU来做网络编码;从而 导致CPU的计算负荷变得很大,而CPU又承担其他调度方面的责任,所以会导致性能的下 降。

发明内容
本发明的目的在于提出一种基于图形处理器(缩写GPU)的网络编码加速方法,它 利用GPU的强大并行计算能力来加速网络编码计算过程,并将其应用在流媒体服务器上, 使得整个系统的响应性能得到大幅提升。本发明的技术方案是一种基于图形处理器的的流媒体服务器加速方法,其步骤 如下步骤1 在安装有图形处理器GPU的流媒体服务器上,将输入的视频数据设置为BN 个块,每块的大小为BS字节;预设定的每个片大小为TN个字节,所述TN必须能够整除BS ; 根据输入的块所需编码块数CN,以及CN*BN字节的编码矩阵;所需的输出数据为CN个BS字 节的块;步骤2 将所需输出数据的每个块划分为BN/TN片,总计划分出CNX (BS/TN)片; 所设定的参数是每个线程负责编码出一个字,每个片总共使用TN/4个线程并行处理;步骤3 由流媒体服务器的客户端接受客户的片ID请求,流媒体服务器的主控模 块通过片ID获取数据片,将编码的任务划分为CNX (BS/TN)个子任务,每个子任务负责编 码出一片数据;每个子任务又被划分为TN/4个线程并行处理,总共有CNXBS/4个线程并行 计算;步骤4 由网络编码协作调度模块根据GPU工作状况,指示当前子任务被分配的目 标;如果GPU处于空闲状态,执行步骤5 ;否则,执行步骤8 ;步骤5 将子任务的编码矩阵和数据都复制到显存上,
步骤6 使用开发工具CUDA执行已经编写好的用于在GPU上执行的代码,将整个 任务划分为20个子任务交给GPU执行,而每个子任务又交由一个多处理器处理,然后被划 分为256个线程执行;步骤7 将GPU各个多处理器计算出的编码结果复制回系统内存,取得进行网络编 码运算的结果;并返回步骤3;步骤8 由CPU执行编码计算;步骤9 将CPU计算出的编码结果复制回系统内存,取得进行网络编码运算的结 果;并返回步骤3。其中,步骤4所述网络编码协作调度模块运用的调度方法如下假设两个函数cpu_encode ()和gpu_encode ()分别完成调用CPU和GPU来完成一 次网络编码计算的任务,设置一个标志量flag来指示当前需要指派计算任务的目标;所述 标志量flag取值0或1 ;系统初始化时将flag置为1 ;则每个线程中调度分派时的流程为如flag 为 0 :flag 置为 1 ;cpu_encode ();结束。如flag 为 1 :flags 置为 0;gpu_encode() ;flag 置为 1;结束。这样的调用策略能够保证GPU总是处于被调用中,而CPU只有当GPU被调用的时 候才会帮助分担一点计算任务。本发明基于图形处理器的网络编码加速方法具有以下优点①本发明方法是将一部分或大部分的网络编码计算,放到GPU上做,CPU和GPU能 实现顺滑的合作;即GPU尽力完成最多的计算任务,可以分担原先分派给CPU做的任务。这 样一来,CPU的计算负荷会被GPU分担,从而得到更多的调度方面的能力。整个系统的服务 性能也会得到提升。②虽然GPU的一般计算能力不如CPU,但是GPU多核的设计,在解决并行计算方面 上,性能有非常大的优势,这一特点是非常适合网络编码计算的。所以整个专利的解决方 案,不论是在网络编码的计算能力上,还是系统调度的能力上,都会有比较大的提升。③本发明方法主要应用在流媒体的点播服务器上。服务器一般有许多个频道提供 给用户,而不同的用户将会选择不同的频道数据进行播放。在同一时刻,许许多多的用户的 不同的点播请求都会到来,这时,服务器端的数据编码工作量将会变得非常大,计算能力将 成为整个系统的服务瓶颈。在本发明方法的条件下,加入了 GPU所得到的计算速度以及调 度能力的提升,会带来很大的效益。


图1是本发明基于图形处理器的网络编码加速方法的流程图;图2是本发明网络编码运算的示意图;图3是本发明实施例采用NVIDIA GPU的架构图以及其中每个多处理器的内部架 构;图中标号1为流处理器,2为8个流处理器组成的单个Multi-Processor。图4是本发明网络编码任务中子任务的划分示意图;图5是本发明GPU上执行网络编码的示意图。
具体实施例方式本发明基于图形处理器的网络编码加速方法利用图形处理器GPU的强大并行计 算能力来加速网络编码计算(见图1),它通过让服务器端的图形处理器加入到网络编码的 计算工作中来,大幅提高服务器网络编码的吞吐率,也能让CPU留出时间来进行其他系统 调度的工作。本发明可以解决传统网络编码应用场景中,由于编码的计算开销所带来的系 统瓶颈,只使用价格大大低于CPU的图形处理器就能达到提升计算能力的目的,提高系统 性能。本发明在基于网络编码的流媒体服务领域,具有一定的应用价值。本发明首先提出了一种基于图形处理器的网络编码加速方法,利用图形处理器多 处理器的强大并行计算能力,加速网络编码计算。然后将这套加速方法配置在一个流媒体 服务器上,实现服务器CPU和图形处理器可以共同协作。图形处理器全力完成网络编码的 计算任务,CPU也能完成一部分的网络编码计算,同时CPU也负责整个系统的资源调度。本发明具体实现的系统主要由两大部分服务器部分和客户端部分。关键的是服 务器部分。服务器部分主要由三个部分组成服务器系统调度以及网络编码模块、图形处理 器实现网络编码模块、网络编码协作调度模块。1.服务器系统调度以及网络编码模块,完成服务器响应客户端的请求以及在CPU 上的网络编码计算。客户端加入流媒体系统,将希望观看的请求发送给服务器。服务器拥有流媒体的 数据源,并负责根据不同客户的请求进行分发。由于系统的数据分发是基于网络编码的,所 以在发送端发送数据之前,要对数据首先作编码的操作;而在客户端接受到编码的数据之 后,应对其进行解码操作,然后再进行流媒体的播放。图2简要描述了网络编码(network coding)的过程。我们在服务器端实现了网 络编码在CPU上的计算。2.图形处理器实现网络编码模块,具体实现了在图形处理器GPU上进行网络编码 计算的功能。其关键技术是并行化的网络编码运算的计算方法,详细描述如下当前的图形处理器并没有实现出统一的通用计算接口,本发明基于的是NVIDIA 公司的Geforce 8系列图形处理器,以及配套的CUDA开发工具来设计实现的并行化计算方 法。但是,由于各类可编程的图形处理器在架构有很多相似之处,所以本节的并行化的网络 编码运算的计算方法也可以推广到其他的可编程图形处理器上。如图3所示,NVIDIA的图形处理器内部包含有很多流处理器(StreamProcessor), 而每8个流处理器被组合成一个多核心处理器(Multi-Processor),每个多核心处理器内 部是共享资源的,如处理器的寄存器,共享内存(SiaredMemory)以及缓存(cache)。对于并行化的网络编码计算而言,重要的是如何把编码运算的任务分配到每个流 处理器上。如图3所示,我们将网络编码结果的基本单元块(block)分解成多个定长的 片,并让每个多核心处理器负责编码出一片数据。理想状态下是每个多核心处理器负责处 理一片,但是实际情况下多核心处理器的数量往往远小于分配出来的片的数量。这时候就 要求调度多核心处理器,使得已经编码出一片的数据多核心处理器去编码另一片数据。不过,GPU内部处理器的调度已经由CUDA提供了一套简易的方法,使得我们不需 要关心多核心处理器的任务调度问题,关键的问题是如何划分片,以及每片的数据如何被编码出来。所以,我们提出了如下的任务划分和计算方式设输入数据为BN个块,每块的大 小为BS字节。预设定的每个片大小为TN个字节(其中TN必需整除BS)。根据输入的块 所需编码块数CN,以及CN*BN字节的编码矩阵;所需的输出数据为CN个BS字节的块。如 图4所示,我们划分片的方法如下将所需输出数据的每个块划分为BN/TN片,总计划分出 CNX (BS/TN)片。如前所述,每一片是由GPU中的单个多核心处理器负责进行编码的,而每个多核 心处理器拥有8个流处理器,所以编码单个片也是需要并行化的。对于多核心处理器内部 的调度,CUDA也提供了简易的方法,使得我们不需要关心多核心处理器内部如何调度,只需 设定每片需要多少线程并行处理即可。为了尽可能的利用图形处理器的并行计算的特点, 我们设定的参数是每个线程负责编码出一个字,由于GPU的字长是32位G字节),所以 每个片总共使用TN/4个线程并行处理。我们将编码的任务划分为CNX (BS/TN)个子任务,每个子任务负责编码出一片 数。每个子任务又被划分为TN/4个线程并行处理。这样一来,就相当于总共有CNXBS/4 个线程并行计算。虽然由于图形处理器的硬件所限,这么多的线程不可能同时执行,但是如 此的划分可以最大程度的利用图形处理擅长并行计算的特点,以及网络编码计算中任意两 个字节的编码过程并没有依赖性的特点。在我们的方案中,GPU代替CPU完成工作是“给定 编码矩阵和数据,生成出编码的结果”。由于解码过程实际是“编码矩阵求逆”,然后用计算 出的逆阵和编码后的数据“编码”出原结果的过程,所以本方案也可以用于完成解码过程中 的一个步骤。与此同时,不适于GPU的运算,如生成随机矩阵,矩阵求逆等运算在本方案中 就没有交给GPU进行。具体实施的步骤如下如图4所示,假设我们想把4块,每块4KB,共计16KB的数据进行编码出5块数据。 每片的大小为1K,即1024字节。第一步把编码矩阵和数据都复制到显存上,因为GPU访问内存的开销实在太大。第二步使用CUDA执行已经编写好的用于在GPU上执行的代码。此时,我们将整 个任务划分为20个子任务(每块被划分为4片,每片对应一个子任务,总共需要编码5块, 所以是20个子任务)交给GPU执行,而每个子任务又交由一个多处理器,然后被划分为256 个线程执行,如图5所示。第三步将各个多处理器计算出的编码结果复制回系统内存。这样就取得了 GPU 进行网络编码运算的结果。3.网络编码协作调度模块,实现了在服务器端,CPU与GPU关于网络编码计算的协 作。也就是说,CPU和GPU合作完成所有的网络编码计算任务,并且在任务分派上实现了动 态的负载平衡,使得系统的计算吞吐量达到最大。系统中对每一个可以对用户独立服务的 线程都设置了一个任务队列,存放用户到达的请求;队列中的任务按照先来先服务(First Come First Serve)原则进行处理,对每一次任务的处理,即是网络编码计算分派的过程, 可以分派给CPU或者GPU去做。系统对于网络编码计算任务的分派,遵守如下的原则1,由于GPU的唯一功能就 是计算网络编码,所以要使得GPU利用率最大,而CPU还有其他的调度任务,故任务的分派 上,GPU的优先级要大于CPU ;2,只要GPU有空闲,任务一定分派给GPU ;3,只有在GPU非空闲且CPU空闲时,才考虑将任务分派给CPU。具体的调度实施如下
假设两个函数cpu_encode ()和gpu_encode ()分别完成调用CPU和GPU来完成一 次网络编码计算的任务,我们设置一个标志量flag (取值0或1)来指示当前需要指派计算 任务的目标。则每个线程中调度分派时的流程大致为(系统初始化时将flag置为1)如flag 为 0 :flag 置为 1 ;cpu_encode ();结束。如flag 为 1 :flags 置为 0 ;gpu_encode () ;flag 置为 1 ;结束。这样的策略能够保证GPU总是处于被调用中,而CPU只有当GPU在调用的时候才 会帮助分担一点计算任务。客户端部分并非本发明的重点。主要实现了向服务器提交请求并接受数据进行解 码播放的功能。根据上述内容,概括出本发明提出的一种基于图形处理器的的流媒体服务器加速 方法和系统的步骤为1、利用CUDA平台的多线程通用计算编程开发出在GPU上实现网络编 码计算的接口 ;2、实现流媒体服务器中用户的信息管理调度以及在CPU上的网络编码;3、 将步骤1实现的GPU网络编码模块整合进服务器中,并且实现CPU与GPU的协同计算工作; 4、实现客户端。在P2P(Peer To Peer)流媒体点播(Video On Demand)系统的应用中,就可以布 置本发明方法所提出的系统。由服务器提供视频服务,客户端向服务器发起请求来进行点 播。数据的传输基于网络编码,这样可以大大减少邻居间数据调度的复杂度。但是由于服 务器提供的片源内容很丰富,拥有许多不同的频道,所以每时每刻收到的基于不同频道的 数据请求就会非常多。这样的情况下,如果没有GPU的支持,普通的网络编码计算性能就会 成为系统的瓶颈。如果整合了 GPU的计算模块,就能大大提高网络编码的计算能力,提升计 算的吞吐量,最大程度地使网络带宽达到饱和。这是本发明在实际中的一种应用。
权利要求
1.一种基于图形处理器的的流媒体服务器加速方法,其特征在于,其包括如下步骤步骤1 在安装有图形处理器GPU的流媒体服务器上,将输入的视频数据设置为BN个土夬,每块的大小为BS字节;预设定的每个片大小为TN个字节,所述TN必须能够整除BS ;根 据输入的块所需编码块数CN,以及CN*BN字节的编码矩阵;所需的输出数据为CN个BS字 节的块;步骤2 将所需输出数据的每个块划分为BN/TN片,总计划分出CNX (BS/TN)片;所设 定的参数是每个线程负责编码出一个字,每个片总共使用TN/4个线程并行处理;步骤3 由流媒体服务器的客户端接受客户的片ID请求,流媒体服务器的主控模块通 过片ID获取数据片,将编码的任务划分为CNX (BS/TN)个子任务,每个子任务负责编码出 一片数据;每个子任务又被划分为TN/4个线程并行处理,总共有CNXBS/4个线程并行计 算;步骤4 由网络编码协作调度模块根据GPU工作状况,指示当前子任务被分配的目标; 如果GPU处于空闲状态,执行步骤5 ;否则,执行步骤8 ;步骤5 将子任务的编码矩阵和数据都复制到显存上,步骤6 使用开发工具CUDA执行已经编写好的用于在GPU上执行的代码,将整个任务 划分为20个子任务交给GPU执行,而每个子任务又交由一个多处理器处理,然后被划分为 256个线程执行;步骤7 将GPU各个多处理器计算出的编码结果复制回系统内存,取得进行网络编码运 算的结果;并返回步骤3;步骤8:由CPU执行编码计算;步骤9 将CPU计算出的编码结果复制回系统内存,取得进行网络编码运算的结果;并 返回步骤3。
2.如权利要求1所述的流媒体服务器加速方法,其特征在于步骤4所述网络编码协 作调度模块运用的调度方法如下假设两个函数cpu_encode ()和gpu_encode ()分别完成调用CPU和GPU来完成一次网 络编码计算的任务,设置一个标志量flag来指示当前需要指派计算任务的目标;所述标志 量flag取值0或1 ;系统初始化时将flag置为1 ;则每个线程中调度分派时的流程为如 flag 为 0 :flag 置为 1 ;cpu_encode ();结束;如 flag 为 1 :flags 置为 0 ;gpu_encode () ;flag 置为 1 ;结束。
全文摘要
本发明属于视频点播系统以及网络编码技术领域,具体涉及一种基于图形处理器GPU的流媒体服务器加速方法和系统。本发明利用GPU的强大并行计算能力来加速网络编码计算;通过让服务器端的GPU加入到网络编码的计算工作中来,大幅提高服务器网络编码的吞吐率,也能让CPU留出时间来进行其他系统调度的工作。本发明可以解决传统网络编码应用场景中,由于编码的计算开销所带来的系统瓶颈,只使用价格大大低于CPU的GPU就能达到提升计算能力的目的,大大提高系统响应速度。本发明在基于网络编码的流媒体服务领域,具有很高的应用价值。
文档编号H04N7/26GK102143386SQ20101010279
公开日2011年8月3日 申请日期2010年1月28日 优先权日2010年1月28日
发明者张昕雅, 王新, 赵进, 高麟翔 申请人:复旦大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1