在多重图形处理单元图形子系统中进行多重缓冲的制作方法

文档序号:6561946阅读:192来源:国知局
专利名称:在多重图形处理单元图形子系统中进行多重缓冲的制作方法
技术领域
本发明涉及计算机图形处理,更具体地说,涉及关于在计算机系统中操作多重GPU图形子系统的多重缓冲。
背景技术
在许多具有高等图形处理功能的计算机系统中,图形处理子系统包括双缓冲模组。双缓冲模组具有两个存储器区段,即前缓冲器和后缓冲器。前缓冲器储存完全转译(rending)的图像并将此图像提供给显示驱动器。后缓冲器储存正在由图形处理单元转译的图像。一旦完成后缓冲器的转译,并且前缓冲器图像处于完全显示状态时,即可翻转(flip)前、后缓冲器。因此,之前的前缓冲器变成了后缓冲器,并且可以储存受到转译的新图像,而之前的后缓冲器提供其所储存、用于显示的新转译图像。前、后缓冲器继续以此方式翻转,并且翻转的速度与显示器重新整理的速度相同(例如,50Hz、60Hz、75Hz或90Hz)。另外,为防止发生图像分裂,缓冲器翻转必须与转译速度同步。
当计算机系统采用多重图形处理单元(GPU)时,GPU及其缓冲器之间的协调需要使用另一种技术或处理,称为位块传送(BLT),即将来自两个缓冲器的两个点阵案合而为一。第一图显示两个GPU系统包含一主GPU与一从GPU,其中,主GPU进行翻转,而从GPU通过PCIe总线连接进行BLT。
双缓冲器(一个用于显示,另一个用于转译)只对单GPU系统有用。当有多重GPU进行转译时,显然所转译的图像会超出两个缓冲器的处理能力,因而GPU将被迫不时中止转译或空闲,于是降低了图形子系统的性能。
因此,多重GPU计算机系统最佳状态是任何GPU都没有产生所谓的空闲时间,以充分发挥多重GPU所能提供的处理能力。所需要的是一种经过改进且用于增强计算机系统的集体处理能力的方法和系统。

发明内容
鉴于上述问题,本发明提供了一种用于执行多重缓冲的方法及系统,即通过多重缓冲器于内部处理所转译的图像,以便减少图形处理单元(GPU)的空闲时间,同时外部应用程序不会发生任何差异。
在本发明的一个实施例中,第一GPU在外部后缓冲器中转译第一图像之后,通过翻转此外部后缓冲器而显示第一图像。然后,后缓冲器变为前缓冲器,而原来的前缓冲器变为后缓冲器,从应用的角度看,外部后缓冲器和前缓冲器是双缓冲实施方案。图2像通过第二GPU转译到内部缓冲器,并且以预定的序列移动外部后缓冲器和内部缓冲器。以此方式,内部缓冲器以转换的方式取代外部后缓冲器和前缓冲器。从应用角度来看,其仍为双缓冲器,而从驱动器的角度看,则有更多的缓冲器。
根据以下结合附图所陈述的特定具体实施例,将能充分了解本发明的构造及操作方法,以及其额外的目的和优点。


图1为具有两个采用双缓冲之图形子系统的现有计算机系统的一部分的方块图。
图2为现有双缓冲计算机系统中的GPU操作的时序图。
图3为根据本发明的一具体实施例说明消除部分GPU空闲时间的三缓冲器系统的时序图。
图4为根据本发明的另一具体实施例说明进一步减少GPU空闲时间的四缓冲器系统的时序图。
图5为根据本发明的一具体实施例说明透明多缓冲系统中的缓冲器内容移动的方块图。
图6为根据本发明的一具体实施例说明DDFlip函数中的缓冲器内容移动实施方案的流程图。
图7为根据本发明的一具体实施例说明应用更广泛的透明多缓冲系统的组件的方块图。
图8A及图8B为根据本发明的一具体实施例说明在Windows操作系统环境中完成透明缓冲所需采取的步骤的流程图。
主要元件符号说明100计算机系统110主GPU120从GPU130缓冲器A135缓冲器B140显示接口160缓冲器C165缓冲器D170CPU180主存储165缓冲器D200时隙210时隙220时隙230时隙240时隙250时隙260时隙270时隙300时隙305时隙310时隙315时隙320时隙330时隙335时隙
340时隙345时隙350时隙360时隙365时隙370时隙375时隙400时隙405时隙410时隙420时隙425时隙430时隙435时隙440时隙450时隙455时隙460时隙470时隙475时隙480时隙500缓冲器510缓冲器520缓冲器530缓冲器540缓冲器712-718GPU732-738GPU722-728缓冲器742-748缓冲器750显示接口步骤610 是否为第一次翻转步骤620 初始化步骤622 配置N-2个缓冲器B[2:N-1]步骤624 在上下文中配置数据成员步骤626 对于所有缓冲器,将各原始缓冲器结构储存于缓冲器结构的额外数据成员中步骤628 将缓冲器B
储存于第一数据成员中步骤629 将主要表面地址储存于第二数据成员中步骤630 翻转步骤640 以B[2]取代B[1]步骤650 以B[i+1]取代B[i],2<=i<N-1步骤660 以B[1]取代B[N-1]步骤810A 从缓冲器结构的额外成员恢复缓冲器结构步骤820A 毁损缓冲器步骤810B 翻转至第二数据成员中所储存的主要表面地址步骤820B 以第一数据成员获得缓冲器B[2:N-1]步骤825B 从缓冲器结构的额外成员恢复缓冲器结构步骤830B 将缓冲器B[2:N-1]毁损具体实施方式
图1说明具有现有双缓冲的二个图形子系统110和120的计算机系统100。主GPU 110将图像转译到缓冲器A 130与缓冲器B135中。然后,将图像翻转至显示接口140,此显示接口140直接从缓冲器检索数据用于显示。从GPU 120将图像转译到缓冲器C 160与缓冲器D 165中。然后,以位块传送(BLT)的方式将图像交替传送到缓冲器A 130与缓冲器B 135。于正常情况下,主与从GPU将交替转译图像,即如果主GPU转译帧[i],则从GPU转译帧[i+1],然后主GPU再转译帧[i+2],依此类推。
图2为说明第一图双缓冲器图形子系统中的GPU的缺点时序图。主GPU在时隙200中将帧[2n]转译到缓冲器A之后,驱动器在时隙210中将帧[2n]翻转至前缓冲器中。同时,在时隙230中,将从GPU在时隙220中转译的帧[2n+1]以位块传送的方式传送到主GPU的缓冲器B中。然后,在时隙240中将缓冲器B翻转成为前缓冲器,以显示帧[2n+1]。主GPU只能在翻转时隙240完成之后才能在时隙260将后续的帧[2n+2]转译到缓冲器A中。由于翻转时隙240将缓冲器B完全变成前缓冲器之前,缓冲器A仍然是前缓冲器,其图像处于显示状态,因此主GPU不能将任何图像转译到前缓冲器中。因此,时隙250必须跟在时隙240之后。时间实例t0与t2之间的时间间隔为主GPU的空闲时间。而从GPU在时隙270中将帧[2n+3]转译到缓冲器D中。
图3是根据本发明之一具体实施例的三缓冲器双GPU图形子系统的时序图。在时隙300,主GPU将帧[2n]转译到缓冲器A。在t0至t2时,主GPU在时隙330,将帧[2n+2]转译到缓冲器C。同时在t0-t3时,主GPU在时隙305翻转缓冲器A中的帧[2n],在时隙320翻转缓冲器B中的帧[2n+1]及在时隙335翻转缓冲器C中的帧[2n+2]。在t3时,在时隙360中将帧[2n+4]转译到缓冲器B。而在时隙350翻转缓冲器A中的帧[2n+3],之后在时隙365翻转缓冲器B中的帧[2n+4]。同样的,在从GPU在时隙310翻转缓冲器E中的帧[2n+1],在时隙340翻转缓冲器D中的帧[2n+3]及在时隙370翻转缓冲器F中的帧[2n+5]。在t0-t1时,在时隙315中将帧[2n+1]以BLT方式传送到缓冲器B。而在时隙345将帧[2n+3]以BLT方式传送到缓冲器A,之后在时隙375将帧[2n+5]以BLT方式传送到缓冲器C。由于,在时隙330中将帧[2n+2]转译到缓冲器C不需要等待任何翻转操作,因此时隙330紧接在时隙300之后。然而,在时隙360中将帧[2n+4]转译到缓冲器B仍必需等待时隙335中的帧[2n+2]翻转完成,原因如前述双缓冲器子系统那样未向前缓冲器进行新的转译。因此,三缓冲器图形子系统只能部份消除GPU的空闲时间。
图4说明根据本发明的另一具体实施例的四缓冲器双GPU图形子系统。在时隙400,主GPU将帧[2n]转译到缓冲器A。在t0至t2时,主GPU在时隙405,将帧[2n+2]转译到缓冲器C,及在时隙410,将帧[2n+4]转译到缓冲器A;同时在t0至t2时,主GPU在时隙420翻转缓冲器A中的帧[2n],在时隙425翻转缓冲器B中的帧[2n+1]及在时隙430翻转缓冲器C中的帧[2n+2]。接着,在时隙435中将帧[2n+3]转译到缓冲器D。而在时隙440翻转缓冲器A中的帧[2n+4]。同样的,在从GPU在时隙450将帧[2n+1]转译到缓冲器F。在时隙455,将帧[2n+3]转译到缓冲器H及在时隙460,将帧[2n+5]转译到缓冲器F。在t0时,在时隙470将帧[2n+1]以BLT方式传送到B。而在时隙475将帧[2n+3]以BLT方式传送到D,之后在时隙480将帧[2n+5]以BLT方式传送到B。其中,主GPU在时隙405转译帧[2n+2]与在时隙410转译帧[2n+4]之间的空闲时间也大幅减少。事实上,如果时隙420和425中的翻转时间短到足以与时隙405中的转译比拟,则可以视为消除空闲时间。
现在,清楚的,通过将更多缓冲器添加到双GPU图形子系统中,可以减少甚至消除GPU的空闲时间。但如果让驱动器以如图2至图4所示的正常方式处理多重缓冲器多重GPU图形子系统,则驱动器逻辑会相对比较复杂。因此,如图5及图6所示,根据本发明的一具体实施例采用在翻转结束时移动缓冲器的驱动器逻辑,以使内部多重缓冲对外部应用程序而言是易于被了解的。
参考图5,B
500与B[1]510为图形子系统的两个原始双缓冲器,并且翻转只在这两个缓冲器之间执行。B[2]520,B[3]530,至B[N-1]540是额外的N-2个缓冲器。翻转结束时,B[1]510由B[2]520取代,更一般的说,B[i]由B[i+1]取代,其中2<=i<N-1,并且最后一个缓冲器B[N-1]540由B[1]510取代。
前述的取代要取代表示缓冲器的数据结构的内容。如同应用程序及操作系统(OS)使用指向缓冲器结构的指标来参考缓冲器,因此通过取代缓冲器结构内容,驱动器以一缓冲器取代另一缓冲器,而应用程序和OS仍认为其为原来的缓冲器。因此,取代之后,B[1]为原来的B[2],B[I]为原来的B[I+1],并且B[N-1]为原来的B[2]。并且在翻转之后,B
为原来的B[1],而B[1]为原来的B
。以此方式,即使在双缓冲器图形子系统中似乎只有原来的双缓冲器B
500及B[1]510可用于转译和显示,但内部缓冲器B[2]520至B[N-1]540也可以用于转译和显示,其对应用程序和OS而言是易于被了解的。
参考图6,所示流程图用于结合Microsoft Windows DdFlip函数的操作说明根据本发明的一具体实施例的流程。在步骤610中,检查翻转以查看这是否为第一次翻转,然后在初始化步骤620中,(更包含图6内之步骤622,步骤624,步骤626,步骤628和步骤629),驱动器配置额外的N-2个缓冲器B[2:N-1],当执行这两个步骤时,在上下文(context)中配置两个数据成员(data member),第一个成员用于储存指向缓冲器B[2:N-1]的指标,而第二个成员用于储存主要表面地址(primary surface address)。此处,上下文是使用装置时的情况,并且上下文结构包含处理器特定的暂存器数据。系统使用上下文结构来执行各种内部操作,并且主要表面是OS用作桌面显示器的缓冲器。而且,驱动器将会在缓冲器结构中配置额外的成员,以储存所有缓冲器(包括外部前、后缓冲器与内部缓冲器B[2:N-1])的原始缓冲器内容。
初始化步骤620之后,驱动器在步骤630中执行翻转。然后,步骤640、650至660要在B[1]与B[2:N-1]之间移动缓冲器结构内容。
如图7所示,根据本发明的另一具体实施例,本发明的多重缓冲也可以在上述具有两个缓冲器阵列的图形子系统中实施。GPU群组A 710具有多重GPU,即GPU_A
712-718,其将图像转译到缓冲器阵列A[1:m-1]724-728,然后在每次翻转至缓冲器A
722之后,按照与上面所述一样的方式移动缓冲结构内容。将该操作映射到GPU群组B 730的GPU_B
732-738与缓冲器阵列B 740的B[1:n-1]742-748。翻转在未切换的A
722与B
742之间进行,之后再显示于显示界面750上,因此应用程序将图形子系统仅视为现有技术的双缓冲图形子系统。
在绘图程序结束时,驱动器需要执行两个毁损函数(destroyfunction),例如DdDestroySurface和D3dDestroyContext,两者都是Microsoft Windows函数,分别如图8A和图8B所示。为了完成隐藏内部多重缓冲的任务,进一步将驱动器逻辑也添加到这些函数上。
图8A是执行DdDestroySurface函数的流程图,其中,新增了步骤810A,以从图6的初始化步骤620期间储存于第一数据成员中的数据恢复表面结构。并在步骤820B中,毁损缓冲器。
图8B是执行D3dDestroyContext函数的流程图,其中,新增了三个步骤810B、820B与825B。步骤810B要翻转至第二数据成员中所储存的原始主要表面地址。步骤820B要通过在图6的初始化步骤620期间储存于第一数据成员中的指标获得缓冲器B[2:N-1]。步骤825B要通过每个缓冲器结构的额外数据成员恢复缓冲器结构。在步骤830B中,将缓冲器B[2:N-1]毁损。在毁损函数插入这些步骤以恢复被毁损的原始信息,驱动器(driver)可以正确毁损(destory)所有缓冲器并恢复原始的主要表面(priamry surface)。
虽然已经描述并显示了本发明的实施方式,但是本领域技术人员应该理解在脱离范围由权利要求限定的本发明的原理与精神的前提下,可以对这些实施方式进行各种修改。
权利要求
1.一种在具有多个图形处理单元的计算机系统中进行多重缓冲以通过在两个缓冲器之间翻转而转译并且显示图像的方法,该方法包括通过一第一图形处理单元将一第一图像转译到一后缓冲器;通过翻转至该后缓冲器而显示该第一图像,然后,该前缓冲器变成一后缓冲器,而该后缓冲器变成一前缓冲器;以一预定的序列移动目前的后缓冲器及内部缓冲器;通过一图2形处理单元将一图2像转译到目前的该后缓冲器,其已由一内部缓冲器取代;通过翻转至目前的该后缓冲器而显示该图2像,然后,交换该前缓冲器及该后缓冲器;以及再次以该预定的序列移动目前的该后缓冲器及该内部缓冲器。
2.如权利要求1所述的方法,其中,该移动缓冲器进一步包括在该缓冲器结构的一额外数据成员中储存一整个原始缓冲器结构;将原始的内部缓冲器结构内容储存于一第一配置的数据成员中;以及将一原始的主要表面地址储存于一第二配置的数据成员中。
3.如权利要求2所述的方法,其进一步包括如下步骤之一在一上下文中配置至少两个数据成员,并且在每个缓冲器结构中配置一额外的数据成员;以储存在该缓冲器结构的该额外数据成员中的信息来恢复缓冲器结构,翻转至该第二数据成员中所储存的该主要表面地址,从该第一数据成员恢复原始的缓冲器结构内容。
4.如权利要求1所述的方法,其进一步包括配置一或多个内部缓冲器;交换该前缓冲器及该后缓冲器;以及每次翻转之后在该后缓冲器与该内部缓冲器之间移动缓冲器结构内容。
5.一种在具有多个图形处理单元的计算机系统中进行多重缓冲的系统,其包括两个或多个图形处理单元,其用于转译图像;两个或多个翻转缓冲器,其通过在两个翻转缓冲器之间翻转而交替提供用于显示所转译之图像的数据;一或多个内部缓冲器,其用于取代该后缓冲器以获得更多可转译的缓冲器。
6.如权利要求5所述的系统,其进一步包括如下之一每个缓冲器结构中的一额外数据成员,其用于储存一整个原始的缓冲器结构,一第一配置的数据成员,其用于储存指向该内部缓冲器的指标,以及一第二配置的数据成员,其用于储存一原始的主要表面地址;一恢复部件,其用于以储存在该缓冲器结构的该额外数据成员中的信息来恢复缓冲器结构,翻转部件,其用于翻转至该第二数据成员中所储存的该主要表面地址,以及一获得部件,其通过储存于该第一数据成员中的该指标来获得该内部缓冲器。
7.如权利要求5所述的系统,其中,具有一或多个互相关联的内部缓冲器,以获得更多可转译的缓冲器。
8.一种用于在具有多个图形处理单元及至少两个翻转缓冲器的计算机图形子系统中支持透明多重缓冲的系统,该系统包括至少一内部缓冲器,其配置用于提供更多可转译的缓冲器;一图形驱动器,其用于移动该其一缓冲器和该内部缓冲器;以及每个缓冲器结构中的至少一额外数据成员,其用于储存原始的缓冲器结构内容,以及由该驱动器配置的两个数据成员,其用于储存该图形子系统的初始信息,以用于在随后绘图程序结束时予以毁损,其中一成员用于储存指向内部缓冲器的指标,另一成员用于储存原始的主要表面地址。
9.如权利要求8所述的系统,其中,有至少一内部缓冲器与该其一缓冲器一起移动,以提供更多可转译的缓冲器。
10.如权利要求8所述的系统,其中,该绘图程序在一Windows操作系统中运行。
全文摘要
本发明公开了一种用于在多重图形处理单元图形子系统中实施多重缓冲的方法及系统。多重缓冲的目的是减少GPU的空闲时间。在一实施例中,第一GPU在后缓冲器中转译第一图像之后,通过翻转至后缓冲器而显示第一图像。然后,交换前、后缓冲器,接着,以预定的序列移动后缓冲器与内部缓冲器。通过第二GPU将图2像转译到目前的后缓冲器。再通过翻转至目前的后缓冲器而显示图2像。然后,再次交换前、后缓冲器,并再次移动后缓冲器与内部缓冲器。
文档编号G06T1/00GK1991906SQ20061013559
公开日2007年7月4日 申请日期2006年10月18日 优先权日2005年10月18日
发明者张国峰, 赵璇 申请人:威盛电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1