图形处理中管理活动线程依赖关系的制作方法

文档序号:10686817阅读:141来源:国知局
图形处理中管理活动线程依赖关系的制作方法
【专利摘要】本申请涉及“图形处理中管理活动线程依赖关系”。本发明的名称为图形处理中管理活动线程依赖关系。视频处理器的记分牌可以仅跟踪尚未完成执行的已调度的线程。第一个线程可以自行监听必须在第一个线程的执行之前被执行的第二个线程的执行。可以对线程执行自由地重新排序,唯一要求的规则是,其执行依赖于第一个线程的执行的第二线程只能在第一个线程之后被执行。
【专利说明】图形处理中管理活动线程依赖关系
[0001 ] 本分案申请的母案申请日为2009年6月30日、申请号为200910159422.2、发明名称为“图形处理中管理活动线程依赖关系”。
技术领域
[0002]本发明一般涉及图形处理,并且确切地来说涉及图形处理过程中信息的解码。
【背景技术】
[0003]为了减少往基于处理器的系统和从基于处理器的系统传送数据的带宽,可以采用压缩信息的方式来对信息编码。当该信息到达接收基于处理器的系统时,必须将其解码或解压。
[0004]通常,在具有许多执行单元的系统中,可以利用软件来跟踪线程依赖关系(dependency)-其中一个线程的执行依赖于另一个线程的执行。线程依赖关系是重要的,因为当有大量线程,并且一些线程必须在另一些线程之前执行时,必须考虑这些依赖关系。但是当线程的数量很大,且依赖关系的数量很大时,维护所有线程和所有依赖关系的状态往往很麻烦。

【发明内容】

[0005]本发明提供了一种方法,包括:在寄存器中,通过仅跟踪所述寄存器接收的尚未完成执行的线程,管理线程和线程依赖关系,以便由多个执行单元来执行线程。
[0006]本发明还提供了一种设备,包括:视频前端;以及耦合到所述视频前端的寄存器,耦合到线程调度器的线程响应器,以及所述寄存器仅跟踪所述寄存器接收的尚未完成执行的线程。
[0007]本发明还提供了一种系统,包括:
[0008]图形处理器,包括:
[0009]视频前端;
[0010]耦合到所述视频前端的线程派生器,所述线程派生器包括记分牌,所述记分牌仅维护所述记分牌接收的尚未完成执行的线程;
[0011]耦合到所述线程派生器的线程调度器;
[0012]耦合到所述线程调度器的多个执行单元;以及
[0013]耦合到所述处理器的硬盘驱动器。
【附图说明】
[0014]图1是根据本发明的一个实施例的系统说明;
[0015]图2是本发明的一个实施例的示意图说明;
[0016]图3是示出根据一个实施例的图1的线程派生器(spawner)的框图;
[0017]图4是两个不同帧中的宏块的说明;以及
[0018]图5是根据本发明的一个实施例的图2的记分牌寄存器22的说明。
[0019]图5是根据本发明的一个实施例的系统说明。
【具体实施方式】
[0020]图1所示的计算机系统130可以包括通过总线104耦合到芯片组核逻辑110的硬盘驱动器134和可移动媒体136。在一个实施例中,核逻辑可以耦合到图形处理器112(经由总线105)和主或宿主处理器100。还可以通过总线106将图形处理器112耦合到帧缓冲器114。可以通过总线107将帧缓冲器114耦合到显示屏118,然后显示屏118又通过总线108耦合到常规组件,例如键盘或鼠标120。
[0021]在软件实现的情况中,可以将相关代码存储在任何适合的半导体、磁或光存储器(包括主存储器132)中。因此,在一个实施例中,代码139可以存储在机器可读媒体(例如主存储器132)中,以便供处理器(例如处理器100或图形处理器112)执行。
[0022]参考图2,图形核逻辑110可以包括图形流水线。图形流水线可以包括命令流操作器(command streamer) 10、视频前端12和親合到线程调度器18的线程派生器14,此外还包括一些其他组件。
[0023]图形核逻辑110可以通过命令流操作器10从驱动程序或图形处理器112或主处理器100执行的其他软件来接收输入。通常,驱动程序提供必须由图形处理器112的多个执行单元16来执行的工作。由线程调度器18来调度必须执行的任务。线程派生器14创建任务,然后由执行单元16来执行线程。
[0024]在一个实施例中,命令流操作器10可以是用于提取控制始发于宿主或主处理器100的线程生成的命令的直接存储器访问引擎。视频前端12包含视频处理功能。线程派生器14负责生成并仲裁始发于可能包括处理单元16的宿主和图形处理器112的线程。线程调度器16仲裁线程生成请求。
[0025]参考图3,线程派生器14包括根线程请求队列20,线程派生器14从视频前端12接收这些根线程请求。根线程是可以创建后续子线程的线程。这些线程请求被存储在根线程请求队列20中。任何由执行单元16中运行的另一个线程创建的线程称为子线程。子线程可以创建附加线程,全部均在经由视频前端12路径请求的根的树之下。
[0026]线程派生器14存储获取已经就绪可供调度的根线程所需的信息,并随后跟踪被调度的线程直到它们引退(retirement)为止。线程派生器14还在根和子线程之间执行仲裁。线程请求队列20馈送(feed)记分牌(SC0reb0ard)22,记分牌22管理线程间的依赖关系以及根线程的调度(dispatch)。派生线程请求队列32负责请求从根线程派生的线程。
[0027]来自记分牌22的输出去到缓冲器24,而来自派生线程请求队列32的输出去到缓冲器34。将这两个缓冲器24和34同步,如缓冲器24与34之间的箭头A所示。缓冲器24的输出是根线程,而缓冲器34的输出是子线程。由同步乘法器26将这些线程同步以便传输到线程调度器18。
[0028]记分牌22考虑线程之间的空间依赖关系。图4可以用于说明两个不同帧Z和Z+A内和之间的空间依赖关系的示例。在帧Z中,所关心的宏块可具有相对于帧内所有其他宏块的坐标(X,Y),其中X和Y给出行和列坐标。假定图像的原点(0,0)在左上角,宏块(X,Y)正上方的宏块是(Χ,Υ-1),而紧靠宏块(Χ,Υ)左边的是(Χ-1,Υ),并以此类推。为了将给定宏块解码,可能需要从其邻居(例如邻居(父-1』)、(父-1,7-1)、(父』-1)和(父+1』-1))解码信息。
[0029]可以通过记分牌22来跟踪这些依赖关系。在由线程派生器调度到执行单元的过程中,记分牌22基本上相对于所关心的宏块(在此情况中为宏块(X,Y))来考虑这些依赖关系。因此,如果宏块(X,Y)依赖于宏块(Χ,Υ+1),则宏块(X,Y)与Y方向上+1的宏块依赖关系之间存在德尔塔(delta)。可以通过三坐标系统来指定它,其中X是第一坐标、Y是第二坐标以及Z是第三坐标。因此,对于宏块(X,Y)而言,通过(0,I,0)的德尔塔来指定这种依赖关系。对于任何宏块来说可能有许多依赖关系,因此许多德尔塔被检查。
[0030]Z方向包含两个不同帧之间的依赖关系。例如,如果帧Z中的宏块(Χ,Υ)依赖于帧Z+A中的宏块(Χ,Υ),则在Z方向上存在依赖关系。此依赖关系还可以指定为(0,0,Α)的德尔塔。
[0031]Z还可以用于表示相同帧上彼此不依赖的不同逻辑进程。如果那些进程是A和B,则对所有A操作可以将Z设为等于零,以及对所有B操作可以将Z设为等于I。这允许一个物理记分牌通过将所有Z德尔塔值保持为零来管理许多逻辑记分牌。因此,可以使用Z来管理(I)具有依赖关系的宏块,(2)没有依赖关系的宏块,(3)不同帧上的宏块,或(4)涉及相同帧的不同操作的宏块。
[0032]因此,参考图5,其中示出记分牌22的更详细操作,由框50处理来自视频前端12的线程请求,其获取当前线程的唯一线程标识符(TDID)并标记记分牌寄存器68。记分牌寄存器68包括对应于每个坐标Χ、Υ和Z的列以及对应于每个编号的线程或每个线程标识符的行。每个活动线程接收线程标识符(具有标识符I至N)以构成记分牌寄存器68的行。
[0033]简单地标记记分牌意味着无论何时,只要调度线程,则必须通知记分牌寄存器68:一个线程在运行中。优先级编码器74通过查看寄存器66中有效位来确定下一个可用线程标识符是什么。寄存器66实际上告知记分牌寄存器68中哪些位是有效的。因此,将下一个有效位指定给下一个线程,然后在框50处将该线程视为“已标记”。作为被标记的结果,在记分牌寄存器68中建立对应于该线程标识符的项(entry),将该项置于适合的行中,其中这些行编号为从I至N。标记的线程提供其X、Y和Z坐标,而作为回报,为该线程提供也可以视为行号的线程标识符。当在执行单元16中通过完成执行将线程引退时,该线程交还(surrender)其线程标识符。
[0034]—般来说,虽然为所有线程提供线程标识符,但是对于没有依赖关系的独立线程在记分牌中需要的处理更少。那些线程可以从框50向上传递,并上至仲裁器56的上方端口。
[0035]在先进先出(FIFO)缓冲器52中收集依赖线程。依赖线程的执行依赖于另一个潜在活动(潜在未执行)的线程的执行。这允许移动通过框50的多个依赖线程离开(get themout of the way),使得确保在未决的依赖关系使依赖线程FIFO缓冲器52停滞时可以快速地处理独立线程并将其传送到仲裁器56。仲裁器56在依赖线程停滞时查看独立线程。
[0036]然后依次从先进先出缓冲器52处理依赖线程。在框72中标识它们的依赖关系,并在一些情况中可以利用那些依赖关系来标记线程依赖关系寄存器30。框54将依赖关系和那些依赖关系的X、Y和Z坐标提供到框72。在一个实施例中,如果两种类型的线程都已就绪可供调度,则可以对依赖线程赋予较高的优先级。如上所述,框72从线程的坐标以及其中存在依赖关系的宏块或帧的相对坐标来确定(develop)德尔塔。
[0037]在记分牌22的一个操作模式(称为“停滞模式”)中,记分牌22在生成下一个X、Y和Z坐标或德尔塔,或清除当前线程以用于调度之前等待匹配。因此,在停滞模式中,直到某线程依赖的所有线程都被引退(即被执行且不再处于活动,即引退)之后,才启动该线程。因此,当遇到停滞模式且缓冲器52变满时,线程FIFO缓冲器52还通知视频前端12,如框52下方箭头所指示的。
[0038]仲裁器56选择要由执行单元16执行的独立或依赖线程,以便通过线程有效负荷58传递它。已经由执行单元16执行的线程回到框60,这将从记分牌寄存器68以及任何匹配线程寄存器30中清除线程标识符。比较器62帮助发现匹配线程寄存器30。
[0039]因此,一旦执行了线程,则需要通知其执行依赖于该线程的执行的任何线程。尤其在停滞模式中,线程在它依赖的所有线程被执行之前无法被调度。比较器62可以用于重设线程依赖关系寄存器30以移除在检查线程依赖关系期间引退的任何线程的依赖关系。
[0040]然后,内容可寻址存储器或CAM70确定寄存器68中是否有希望进行调度的线程依赖于之的任何线程。如果在记分牌寄存器68的任何行中均没有项,则可以推断当前在执行中没有此类依赖线程,并且可以将该线程作为就绪可调度来释放,并可以从框54将其传递到仲裁器56中。如果在停滞模式中有依赖关系,则可以强制该线程等待那些依赖关系清除。
[0041]根据记分牌22的另一个操作模式(称为广播模式),该模式比停滞模式更鲁棒(robust),确定要调度的给定线程的依赖关系,获取那些依赖关系的线程标识符,并将其置于线程依赖关系寄存器30中,然后即使那些依赖关系仍存在或未决(outstanding),仍调度该线程。
[0042]实际上,将该线程调度到执行单元16,并指令(callupon)该线程管理它自己的依赖关系。该线程通过监听广播到每个执行单元16和记分牌的引退线程TDID(框60)来执行此目的。一旦线程确定它所依赖的所有线程均已被清除,则在执行单元16中处于空闲状态的该线程可以接着在该执行单元16中执行。
[0043]在一个实施例中,每个线程使用8个位来指示最多8个依赖关系(各由德尔塔所指示)中哪个是重要的。这8个德尔塔按预定义的次序加载到连续的线程依赖关系寄存器30中。随后,该线程基于其8个位获知它必须检查哪个依赖关系寄存器来确定涉及的这些依赖关系是否已引退。
[0044]与停滞模式的差异在于,在广播模式中,线程基本由记分牌来启动,然后线程实际通过观察引退线程信息来自己控制它何时开始执行。在广播模式中,从仲裁器56调度当前线程,其具有未决依赖关系和线程依赖关系寄存器30的附加有效负荷,该附加有效负荷包含所有未决依赖线程的线程标识符。
[0045]当给定线程通过执行单元16执行而引退时,除了通知记分牌22外,它还将其线程标识符广播到所有执行单元16。一旦调度的线程接收到与它一起调度的所有线程依赖关系寄存器的线程标识符,则调度的线程开始执行。
[0046]在又一种操作模式(称为依序模式)中,记分牌22标记依赖于紧接当前线程之前调度的线程的线程标识符的每个线程。
[0047]根据本发明的一些实施例,记分牌22可以采用硬件来实现,这可以提高性能和速度。在一些实施例中,硬件记分牌22可以更有效率地以无序方式调度线程,从而允许对工作量重新排序以实现性能提高。在一些实施例中,记分牌22要求的唯一规则是,其执行依赖于线程B的执行的线程A必须在线程B到达记分牌22之后到达记分牌22。如果线程A在线程B之前到达,则记分牌将注意不到线程B而假定线程B已引退,因此不正确地清除线程A。但是,可执行任何其他重新排序,例如为了提高性能。一般,在一些实施例中,驱动程序确保该规则始终被遵守。
[0048]在一些实施例中,必须执行的线程的数量远超过记分牌22中的活动线程的数量。在一些实施例中,通过使记分牌22能够仅跟踪活动线程(S卩,尚未引退的线程),可以大大地提尚记分牌的大小和效率。
[0049]图1、2、3和5中指示的框可以构成硬件和软件组件。在软件组件的情况中,附图可以指示可存储在计算机可读媒体(诸如半导体集成电路存储器、光存储装置或磁存储装置等)中的指令序列。在此类情况中,指令可由计算机或基于处理器的系统来执行,计算机或基于处理器的系统从存储装置中检索指令并执行它们。在一些情况中,指令可以是可存储在适合的存储媒体中的固件。
[0050]本文描述的图形处理技术可以在各种硬件体系结构中实现。例如,可以将图形功能性集成到芯片组内。或者,可以使用离散的图形处理器。作为又一个实施例,可以由通用处理器(包括多核处理器)来实现图形功能。
[0051]虽然本发明是参考有限数量的实施例来描述的,但是本领域技术人员将认识到许多修改和变化。所附权利要求意在涵盖落在本发明的真正精神和范围内的所有此类修改和变化。
【主权项】
1.一种方法,包括: 在寄存器中,通过仅跟踪所述寄存器接收的尚未完成执行的线程,管理线程和线程依赖关系,以便由多个执行单元来执行线程。2.如权利要求1所述的方法,包括使线程执行能够重新排序。3.如权利要求1所述的方法,包括只要如下情况成立,则使线程执行的次序能够更改成任何次序:依赖于另一个线程的完成的一个线程必须在所述另一个线程到达所述寄存器之后到达以记分牌形式的所述寄存器。4.如权利要求1所述的方法,包括在线程的所有依赖关系完成了执行之前启动所述线程来执行。5.如权利要求4所述的方法,包括使线程能够管理它自己的依赖关系。6.如权利要求5所述的方法,包括将一个执行单元中线程执行的完成向其他执行单元广播。7.如权利要求1所述的方法,包括确定空间依赖关系,包括确定一个宏块的线程对相邻宏块的线程的执行的依赖关系,以及确定一个线程对不同帧中的线程的依赖关系。8.如权利要求7所述的方法,包括使用坐标来指示相同帧上的空间依赖关系和不同逻辑进程。9.如权利要求1所述的方法,包括通过指示相同帧内的宏块和不同帧中的宏块的坐标之间的德尔塔来指示两个线程之间的依赖关系。
【文档编号】G06F9/48GK106055310SQ201610298554
【公开日】2016年10月26日
【申请日】2009年6月30日
【发明人】H.姜, J.霍兰, P.叙尔蒂
【申请人】英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1