用于无死锁管线操作的系统及方法

文档序号:6600371阅读:176来源:国知局
专利名称:用于无死锁管线操作的系统及方法
技术领域
本发明的实施例总体上涉及图形处理单元(GPU)上的指令处理。
背景技术
随着计算机系统的发展,图形处理单元(GPU)已日益改进。例如,GPU包括多个执 行单元,并且维持这些执行单元繁忙对于确保高GPU总体性能变成越来越重要的任务。GPU常包括用于执行纹理化操作的纹理单元。这些纹理单元需要访问储存在存储 器中的纹理数据,以执行纹理操作。相对于GPU的执行单元的速度,存储器访问通常花费相 对较长的时间。相应地,在给定时间发送若干纹理请求。在一些传统GPU中,每个纹理请求 都指定寄存器以获取参数并且该寄存器就纹理操作的结果而言一般都相同。令人遗憾的是,用于可以处于执行状态的纹理管线的全部纹理操作的寄存器堆存 储空间的量等同于大量存储器存储空间。因此,对存储空间的限制造成对能够发送的请求 数的限制,且因而产生对一次能够处理的像素数的限制。一种方案是将纹理操作的结果写 回到含有纹理请求的存储位置。然而,此方案仍然要给纹理请求分配存储结果空间,这意味 着在任何给定时间能够在管线中处理的像素数受到限制并且执行单元不会保持繁忙,从而 影响GPU的总体性能。另一方案是使每个线程具有多个未决纹理请求,因为这意味着需要少数线程覆盖 纹理等待时间(latency)。令人遗憾的是,每个线程也会需要更多寄存器容纳中间结果进行 同时存储。这增加了所需的寄存器堆尺寸。将会有利的是,每线程能够发送多个纹理指令, 而同时不需要相应大的寄存器堆。照这样,利用节省下来的,如未分配给纹理操作的可用寄 存器堆尺寸可以发送更多线程。

发明内容
据此,所需要的是一种能够降低存储空间要求并防止图形线程处理死锁的系统。 本发明的实施例提供用于执行单元管线结果的存储空间(如,用于纹理管线结果的缓冲 器)。实施例通过限制每个线程的请求数并确保除非有资源可用以完成一组请求中的全部 请求否则不发送或开始该组请求,来进一步提供对死锁的防止。因而,本发明的实施例提供 了没有死锁的改进性能。更具体而言,本发明的实施例允许增加使用具有多个未决纹理请求的每个线程而 无需大寄存器堆存储空间,这是因为这些纹理操作的结果被储存在管线缓冲器中。纹理指 令被分成两部分,一部分是对纹理单元的发送纹理请求且第二部分是从纹理单元读回结果 的操作。该结果被放置到管线缓冲器单元而非寄存器堆中。为了避免死锁,除非缓冲器能 够适应全部请求,否则线程可以不发送其请求。这将避免由于缓冲器中不存在请求的数据 而不能满足该请求的情形。因为结果槽全部被占用,所以需要读取缓冲的结果以避免停滞 管线。通过需要较少寄存器堆存储空间,能够同时处理更多线程,从而提高GPU的并行性并 因而提高其性能。
4
在一个实施例中,本发明是一种用于防止图形处理单元(GPU)死锁的由计算机实 施的方法。所述方法包括确定可用管线缓冲器资源的数目,所述可用管线缓冲器资源可以 是管线的一部分(如,纹理管线的一部分或纹理单元的缓冲器);以及基于第一线程的一个 或多个纹理请求来确定正被请求的资源数。如果所请求的资源数少于缓冲器中的可用资源 数,则在缓冲器中分配对应于所述一个或多个请求的资源,否则,则不分配。所述方法进一 步包括调整(如,减少)所述可用资源数并发送所述一个或多个请求。然后,在通过其他 操作读出缓冲器的内容时,可调整(如,增加)所述资源数。在另一实施例中,本发明被实施为用于图形处理的系统,其中,纹理操作被分成纹 理请求操作和纹理读回操作,并且进一步其中,纹理操作的结果被储存在与纹理管线相关 联的缓冲器中,而非寄存器堆中。所述系统包括调度模块,用于选择用于执行的线程;和 请求跟踪模块,用于确定线程的纹理请求数。每个纹理请求都可对应于执行管线的资源 (如,纹理管线的槽或纹理单元的缓冲器槽)。所述系统进一步包括资源监视模块,用于确 定所述执行管线的可用缓冲器资源数;和执行模块,用于基于所述可用资源(如,纹理单元 中的槽)数来确定是否执行请求以防止死锁,并用于分配执行管线的资源。照这样,本发明的实施例总体上有助于提高对图形处理单元(GPU)的利用并且因 而有助于改善其性能。实施例为纹理管线提供存储空间(如,缓冲器),以储存结果,从而释 放寄存器堆中的存储空间。增大寄存器中可用的空间有利于允许执行单元并发处理更多线 程。本发明的实施例通过基于可用缓冲器资源控制可发送的多纹理请求的数目而使线程中 读取结果的点总是可达到,来进一步防止死锁。因此,本发明的实施例提供了没有死锁的改 进性能。在另一实施例中,本发明被实施为用于防止下述系统中的计算性死锁的方法, 所述系统将纹理结果储存在管线缓冲器中,而非寄存器堆中,并且所述系统将纹理指令 分为两个操作,包括纹理请求操作和纹理读回操作。所述方法包括访问执行单元简档 (profile)(如,用于纹理单元)。所述执行单元简档可包括每时钟周期处理的单元数和管 线资源数。所述管线资源数可包括管线深度和缓冲器尺寸。所述方法进一步包括确定能 够在无死锁的情况下执行的线程和每线程请求数并且只并发操作这么多个线程。


本发明通过示例的方式而非限制的方式在附图的各图中图示出,并且在附图中, 用相同附图标记表示类似元件。图1示出了根据本发明一个实施例的示例性计算机系统。图2示出了根据本发明一个实施例的示例性执行单元的方块图。图3示出了根据本发明一个实施例的示例性线程的图示。图4示出了根据本发明一个实施例的示例性系统的方块图。图5示出了用于防止图形处理单元(GPU)的死锁的示例性计算机控制过程的流程 图。图6示出了根据本发明一个实施例的用于防止死锁的示例性计算机控制过程的 流程图。
具体实施例方式现在,将对根据本发明的优选实施例进行详细描述,其示例示出于附图中。虽然将 结合优选实施例对本发明进行描述,但是将要理解的是它们并非意图将本发明限制于这些 实施例。相反,本发明旨在涵盖可包括在由所附权利要求书限定的本发明的精神和范围内 的替换、修改及等同内容。此外,在本发明实施例的下列详细描述中,阐述了大量具体细节, 以便提供对本发明的透彻理解。然而,对于本领域中的一个普通技术人员而言将认识到,可 以在没有这些具体细节的情况下施行本发明。在其他例子中,为了不会不必要地混淆本发 明实施例的各个方面,不对公知的方法、程序、部件和电路进行详细描述。符号和术语以计算机存储器中对数据位的操作的程序、步骤、逻辑块、处理及其他符号表示, 介绍以下详细描述的某些部分。这些描述和表示是由数据处理领域中的普通技术人员使用 的手段,以最有效地将他们工作的实质传达给本领域的其他技术人员。这里的程序、计算机 执行步骤、逻辑块、处理等通常被认为是导致期望结果的一系列前后一致的步骤或指令。这 些步骤是需要物理量的物理操控的步骤。通常,尽管不是必须地,但这些物理量采用能够在 计算机系统中储存、传送、组合、比较以及以其他方式操控的电或磁信号的形式。主要由于 常用的原因,已经多次证明将这些信号称为位、数值、元件、符号、字符、术语、数字等是方便 的。然而,应当记住的是,所有这些以及相似的术语都是与适当的物理量相关联的,并 且仅是适用于这些量的方便的标号。除非下面的讨论中清楚且具体地做出其他声明,否则 可以理解为,贯穿本发明使用诸如“处理”、“访问”、“执行”、“储存”或“渲染”等的术语的讨 论,指的是集成电路(如,图1的计算系统100)或类似的电子计算设备的动作和处理,它们 对在计算机系统的寄存器和存储器中表示为物理(电子)量的数据进行操控并将其转换成 类似地表示为计算系统存储器或寄存器或者其他这样的信息存储、传输或显示设备内的物 理量的其他数据。计算机系统平台图1示出了根据本发明一个实施例的计算机系统100。计算机系统100描绘了根 据本发明实施例的基本计算机系统中的部件,其为某些基于硬件和基于软件的功能提供了 执行平台。通常,计算机系统100包括至少一个CPU 101、系统存储器115和至少一个图形 处理单元(GPU)llO。CPU 101可以经由桥部件/存储器控制器(未示出)耦接至系统存储 器115,或者可以经由CPU 101内部的存储器控制器(未示出)直接耦接至系统存储器115。 GPU 110耦接至显示器112。一个或多个附加GPU可以可选地耦接至系统100,以进一步提 高其计算能力。GPU 110耦接至CPU 101和系统存储器115。GPU 110可以实施为分立的部 件、被设计成经由连接器(如,AGP槽、PCI-Express槽等)耦接至计算机系统100的分立的 图形卡、分立的集成电路管芯(如,直接安装在母板上),或者实施为包括在计算机系统芯 片组部件(未示出)的集成电路管芯内的集成GPU。另外,对于GPU 110,可以包括本地图 形存储器114,用于高带宽图形数据存储。CPU 101和GPU 110也可以集成到单个集成电路管芯中且CPU和GPU可共享诸如 指令逻辑、缓冲器、功能单元等各种资源,或者可为图形和通用操作提供单独的资源。GPU可 进一步集成到核心逻辑部件中。据此,这里所描述的与GPU 110相关联的任何或全部电路和/或功能也可以实施于适当配备的CPU 101中或由其来执行。另外,虽然这里的实施例 可指GPU,但应当注意,所描述的电路和/或功能也可实施为其他类型的处理器(如,通用或 其他专用协处理器)或者实施于CPU内。系统100例如可以实施为具有功能强大的通用CPU 101的服务器计算机系统或 台式计算机系统,所述CPU 101耦接至专用图形渲染GPU 110。在这类实施例中,可包括增 加外围总线、专用音频/视频部件、10设备等的部件。同样,系统100可以实施为手持式设 备(如,蜂窝电话等)、直播卫星(DBS)/地面机顶盒或机顶视频游戏控制台设备,例如,可 从华盛顿雷蒙德的微软公司获得的Xbox: 或可从日本东京的索尼计算机娱乐公司获得的 PlayStati0n3⑧。系统100还可以实施为“片上系统”,其中,计算设备的电子装置(如,部 件101、115、110、114等)整体包含在单个集成电路管芯内。示例包括带有显示器的手持式 仪器、汽车导航系统、便携式娱乐系统等。本发明的实施例一般都有利于提高GPU的图形处理使用,且因而有利于提高图形 处理单元(GPU)的性能。实施例提供了纹理管线缓冲器,以储存纹理结果,从而释放传统上 使用的寄存器堆(register file)中的存储空间。增大在寄存器堆中可用的空间允许执行 单元同时操纵更多管线。本发明的实施例通过控制可发送给管线的多纹理请求的数目使得 每个线程中读回结果的点将总是可达到且可执行来进一步防止管线死锁。因而,本发明的 实施例提供了无死锁的改善了的处理器性能。图2示出了根据本发明一个实施例的GPU的示例性执行单元的方块图。执行单元 200包括纹理单元202、数学单元220、调度器230和寄存器堆240。要理解的是,GPU(如, GPU 110)可具有多个与执行单元200大致相类似的执行单元,用于并行执行多个线程。例 如,GPU可具有8个处理器组,每一个处理器组均具有两个执行单元。因而,实施例可支持 单指令多数据(SIMD)执行(如,一个指令用于并行的16个像素)。在一个实施例中,这里 所描述的线程如本领域所公知的是图像或视频帧的单独的像素。纹理单元202包括纹理管线204和管线缓冲器210。纹理管线204具有N个槽或 管线位置206-208。纹理管线204将结果写入到管线缓冲器210。纹理操作通常要求转到 存储器,这会花费相对较长时间(如,300个时钟周期)。因而,纹理管线204可为300个槽 或元件长以适应于该停滞。例如,纹理管线204可使每个槽都可操作以每时钟周期接收四 个像素,用于通过在纹理中分析相邻像素并确定每个像素相距多远来计算细节层次(L0D) 计算。为了以充足的工作负荷保持纹理管线204繁忙,对于具有300个槽的纹理单元,所述 300个槽具有每槽4个像素的深度,需要工作的1200个像素或线程。其他线程可在纹理操 作由纹理管线204执行时工作。对于紧接着发送多个纹理操作的线程,需要较少线程以保 持管线满载。例如,对于紧接着发送两个纹理操作的线程,仅需要线程的一半以保持管线满 载。数学单元220包括具有槽224-226的数学管线222。在线程等待纹理请求完成时, 可发送数学请求到数学单元220。在一个实施例中,数学单元220从寄存器堆240获得源数 据并将结果目标数据(destination data)返回到寄存器堆240。例如,如果数学单元220 每时钟可处理16个像素并花费5个时钟返回结果,则只要指令是独立的且每个线程每次有 一个指令未决(outstanding),80个线程就将保持数学单元繁忙。作为另一示例,在每个线 程每个周期能够发送一数学指令的情况下,将需要16个线程以保持管线繁忙。参照上述示
7例,1280个线程将保持纹理单元202和数学单元220均繁忙。如果没有1280个线程是可用 的,则执行单元将留下不工作,从而导致无处理活动的泡沫(bubble)或时段。要理解的是, 除了在管线正被加载时以外,执行单元中的泡沫都是不期望的。期望经由管线处理更多线程以提高性能。因此,使用具有多个纹理操作的线程允 许同时处理多个增加的纹理线程。本发明的实施例提供管线缓冲器210作为有利装置,以 提供纹理存储空间而无需相应大的寄存器堆,在传统技术中一般需要大的寄存器堆以适应 同时处理增加数目的线程。寄存器堆240储存线程信息。每个工作单元具有与用于线程处理的工作单元相关 联的状态信息。例如,对于像素,状态信息可包括X、Y和纹理坐标。寄存器堆240的尺寸可 以基于纹理和数学单元的宽度(如,每时钟像素)和深度(如,时钟周期)。即是说,寄存器 数控制可以在未完成状态下驻留(reside)在执行单元200中的像素或线程数。在一个实 施例中,用纹理管线204和管线缓冲器210作为用于纹理数据的存储空间,减小了用于处理 相同数目的线程所需的寄存器堆240的资源,或者替代地,相同尺寸的寄存器堆可以同时 处理增加了数目的线程,从而相对于传统单元提高了性能。在一个实施例中,调度器230将纹理操作的坐标写入到纹理管线202中。在寄存 器堆240中无需与写入到纹理单元202中的坐标相对应的存储位置。在一个实施例中,纹 理单元202可具有用于下述纹理操作请求的缓冲器(未示出),所述纹理操作请求要在进入 纹理管线204之前储存。因而,用于要在进入纹理管线204之前储存的纹理操作的缓冲器 可以允许纹理坐标在纹理管线204之前产生于缓冲器中,从而释放否则可能用于缓冲纹理 坐标的寄存器。管线缓冲器210可操作以储存从纹理管线204输出的结果。在管线从正由未读取 的结果所占用的每个槽停滞(stall)之前,线程从纹理管线读出纹理操作结果。管线缓冲 器210包括N个槽或存储位置212-214。管线缓冲器210允许在需要从管线缓冲器210读 出结果之前有一定量时间,以避免停滞管线。要理解的是,管线缓冲器210允许对纹理管线 204发送纹理请求,而无需在对纹理管线204发送请求的时刻以及在由纹理管线204处理该 纹理请求时,在寄存器堆240中为该结果分配空间。因而,一旦该结果在管线缓冲器210中 是可用的,就可动态地分配用于从管线缓冲器210读取结果的存储空间。因为纹理操作未 使用寄存器堆,所以根据本发明的实施例,每个纹理操作都可分成两个操作,对纹理单元的 请求(纹理请求)和从该纹理单元读回结果的操作。在一个实施例中,当纹理请求被发送到纹理管线204的槽中时,分配管线缓冲器 210中的槽,用于储存该纹理请求的结果。管线缓冲器210可为各种存储类型,包括但不限 于先入先出(FIFO)缓冲器。要理解的是,可以无序的方式从管线缓冲器210中读取结果。 例如,对于具有16个槽的缓冲器而言,发送的每第16个请求都将指定到同一个槽中。此外, 对于具有16个槽的缓冲器而言,来自纹理管线的每个结果都将在16个时钟周期内读取,以 避免由于所有缓冲器槽都不可用(如,具有未读取的结果)而停滞该管线。缓冲器槽可基 于指令进入纹理管线的周期。一些纹理化操作与其他纹理化操作相比大致需要更多存储空间。例如,纹理化操 作会需要以16个样本来采样纹理并对结果进行平均。就传统的纹理管线而言,对于每个位 置都将会需要16个样本,然后可以对其进行平均。由此,在传统纹理管线的寄存器堆中增
8加存储空间限制了可以在给定时间处理的线程数。本发明的实施例可以给纹理管线发送16 个请求,然后每次一个读取结果并将这些结果加入到当前的结果中,从而减轻或消除对寄 存器堆240中用于16个样本的空间的需求。还要理解的是,由于这些结果容纳在纹理管线 缓冲器210中,所以在确定何时需要将数据储存在寄存器堆中或者可以对这些数据进行计 算时,可包含编译器。因为可以在这些结果需要存储位置之前发送请求,所以使用管线缓冲器210允许 使用较小的寄存器堆。例如,可以发送16个请求并且现在可以将寄存器堆中与坐标相对应 的空间重新分配给附加的线程。参照上述对纹理结果进行平均的示例,由于可以在单个寄 存器中对其结果进行组合,所以这些结果不需要分配空间。因而,管线缓冲器210有助于在 给定时间处理更多线程,从而保持执行单元繁忙。更具体而言,因为寄存器堆240中的储存 写入到纹理管线204中的坐标或其他数据的部分现在可用于储存用于其他线程的数据,所 以管线缓冲器210允许纹理管线204被有效地用作存储空间。要理解的是,管线缓冲器210 通过在给定时间允许更多线程的处理进一步防止了泡沫。使用管线缓冲器210允许源和目标指令的仿真。在一个实施例中,调度器230的 状态机将纹理请求写入到纹理管线204中,并代替使用寄存器堆240作为用于结果的存储 空间,而从管线缓冲器210中读出结果。例如,可以执行用于具有储存在寄存器R0-R3中的 坐标(如,“文本R0-R3”)的纹理操作的指令,其中,将寄存器R0-R3的数据写入到纹理管 线204中并且从管线缓冲器210中读出结果并将其储存在寄存器R0-R3中。要理解的是, 源和目标指令可为两种指令1)将纹理指令写入到纹理管线中;和2)从纹理单元将结果读 出到缓冲器。图3示出了允许多个纹理操作的根据本发明一个实施例的示例性线程的图示。示 例性线程300包括请求A 304、请求B 306、请求C 308、请求D 310、MADD 312、读取结果A 314、读取结果B 316、读取结果C 318和读取结果D 320。要理解的是,MADD指令(如,MADD 312)可不依赖于纹理结果且因此不需要等待纹理结果。在一个实施例中,线程300由GPU 执行单元(如,执行单元200)执行。要理解的是,线程300可包括更多的请求、MADD和读 取结果。请求304-310、MADD 312和读取结果314-320可由编译器排列好。程序计数器302在请求A 304处开始执行线程300。在一个实施例中,确定请求 数,在此例中,有四个纹理请求304-310。关于是否有四个纹理单元资源可用,校验可用资源 (如,包括管线槽和缓冲器存储位置的的纹理单元槽)数。如果有四个纹理资源可用,则可 使资源分配计数器对应于发送给管线204的请求304-310而增四。将这四个纹理资源分配 给线程300,确保了当纹理操作完成时将保证结果314-320为可读取的(如,可从管线缓冲 器210读取)以防止死锁。在一个实施例中,校验资源和分配资源是原子操作。如果没有四个纹理资源可用,则可使线程300休眠,直到有四个纹理资源可用为 止。如果对于该线程的执行有充足的资源,则可执行另一线程。当纹理操作使纹理管线进 行下去并从管线缓冲器中读取纹理处理结果时,纹理资源成为可用的。根据实施例,仅允许 线程将所有纹理请求放到管线上或什么都不放。因为线程无论何时都不能发送任何它的纹 理拾取(texturefetch),直到该线程到达该线程可以从管线缓冲器读出纹理处理结果时的 点为止,所以这防止了死锁。当结果缓冲器装满时,则管线一直停止直到读取了某些东西为 止。如果预期要读取纹理结果的线程在等待发送进一步纹理请求,则导致死锁。另外,如果
9这些线程采用通过不读取纹理结果的着色程序(shader program)的路径,则导致死锁。在一个实施例中,当程序计数器302移动到请求306-308时,可不就请求306-308 的发送而改变资源分配计数器。读取请求314-320中的每一个请求一发送,资源分配计数 器就对应于管线缓冲器(如,管线缓冲器210)中的槽在执行读取请求314-320中的每一个 请求时变成空闲而减一。要理解的是,可以各种方式来进行资源跟踪。例如,可以使资源分配计数器初始化 为纹理单元中空闲或可用的资源数,且每当发送一组请求,就使计数器减少请求的数目。当 从纹理单元中读出每个结果时,使计数器增加(如,当读取结果314-320中的每一个时都使 计数器增加)。这表示了动态分配结构。要理解的是,也可以用静态分配来防止死锁。在该实施例中,已知系统能保持多少 场所。例如,如果在纹理管线中有400个资源可用且每个线程要求四个纹理操作,则调度器 230在任何时候都只允许100个并发线程,以防止死锁。在此例中,不需要计数器。还要理解的是,线程的指令可以由编译器来排列或定序以优化执行。例如,在纹理 请求独立于数学请求的情况下,可将纹理请求移到数学请求(如,MADD 312)之前,使得可 在正在处理纹理请求时完成数学请求。因为并发执行指令并将纹理请求信息储存在纹理单 元(如,纹理单元202)中,所以该指令重排允许线程占用较少空间。编译器可进一步排列 指令,以维持预期的工作负荷率(workload ratio)(如,每一个纹理请求四个数学请求)。 要理解的是,工作负荷率可以是硬件单元围绕其设计的因素,并且围绕该工作率使工作平 衡确保使工作负荷中的泡沫最小化。图4示出了本发明各种实施例所使用的示例性部件。虽然系统400中披露了特定 部件,但应当理解为这样的部件是示例。即是说,本发明实施例非常适于具有各种其他部件 或系统400中所记载的部件的变形。要理解的是,系统400中的部件可与不同于所呈现的 部件的其他部件一起操作,并且并非需要系统400中的所有部件以达成系统400的目的。图4示出了根据本发明一个实施例的示例性系统的方块图。系统400可以以硬件 或软件实施。在一个实施例中,系统400有助于处理用于在显示器上渲染图像或视频的图 形指令。系统400与执行单元410通信和/或对其进行控制,所述执行单元410可以是GPU 的一部分。系统400包括调度模块402、请求跟踪模块404、资源监视模块406和执行模块 408。调度模块402选择用于执行的线程。调度模块402可选择用于执行的线程并对该 线程中的一部分(如,一个或多个纹理请求和一个或多个数学请求)的执行进行调度。调 度模块402可选择用于执行的下一线程或其一部分。请求跟踪模块404确定纹理请求的数目。在一个实施例中,可以给纹理单元412 或数学单元414中的执行管线发送请求。更具体而言,请求数可以是在读取纹理结果之前 给纹理管线的纹理请求的数目。在一个实施例中,纹理单元412的纹理管线包括缓冲器,所 述缓冲器用于储存来自纹理单元412的纹理管线的结果。如这里所描述的,这些请求可由 编译器来排列。资源监视模块406确定执行管线的可用资源(如,纹理管线和管线缓冲器)数。在 一个实施例中,资源监视模块406确定纹理单元412的执行管线的可用资源数。在另一实 施例中,资源监视模块406基于与可用(如,未被分配)资源的数目相对应的计数器来确定
10可用资源数,如,动态架构。在又一实施例中,资源监视模块406通过校验与可以在给定时 间执行的最大线程数相对应的数目来确定可用资源数,如,静态架构。执行模块408基于可用资源数来确定是否执行请求并分配执行管线的资源。如果 没有足够的资源可用以储存请求的数据,则不发送该请求或该组请求。在一个实施例中,执 行模块408确定是否执行请求并分配管线的资源是原子操作,从而避免了其中相同资源被 指定给两个或更多个线程的并行线程执行问题。执行模块408对是否执行请求并分配资源的确定防止了死锁。执行模块408确保 部分线程(带有请求)能够一直进行到读出结果的部分。换言之,管线内容只在其被读出时 变空。如果由于管线满载而使得线程从未能够到达能够读出其内容的点,则发生死锁。本 发明的实施例允许在发送一组请求之前完全分配资源或者无请求发送。因为直到校验出程 序将能够进行到从纹理单元读出结果的部分为止所有纹理请求都不发送,所以这防止了死 锁。一般而言,对于带有X个纹理请求的线程,在发送这X个纹理请求之前保留或分配纹理 单元中的X个槽。例如,在纹理管线有300个槽且缓冲器有16个槽或存储位置的情况下,可做出316 个纹理请求而无需中断(halt)管线。这些槽对于每个请求以组保留,直到读出结果为止。 例如,如果线程包括四个纹理请求,则将与对应于这些请求分配纹理单元的四个槽一起发 送四个纹理请求(只在有四个槽可用的情况下)。因而,只有在有足够的资源以确保这些线 程将到达将从纹理单元412中读出结果的点的情况下,每个线程才将能够发送请求。要理解的是,一旦给该线程分配了纹理单元资源,则可在调度模块402方便的时 候发送纹理请求,这是因为将资源分配给该线程确保了这些请求能够被执行。由于纹理请 求完成所花费的时间,所以调度模块402可使线程休眠,直到准备好结果用于从纹理单元 中读取为止或者直到能够完成其他非纹理操作为止。例如,正等待纹理结果的线程也可给 数学单元(如,数学单元414)发送数学请求。参照图5-6,流程图500和600示出了本发明各种实施例所使用的示例性功能。虽 然流程图500和600中披露了特定的功能块(“块”),但这样的步骤是示例。即是说,这些 实施例非常适于执行各种其他块或流程图500和600中所记载的块的变形。要理解的是, 可按照不同于所呈现的次序来执行流程图500和600中的块,且并非流程图500和600中 所有的块都需要执行。图5示出了示例性计算机控制过程的流程图,其用于防止图形处理单元(GPU)的 功能管线的死锁,所述GPU用管线缓冲器储存各种线程的执行结果。流程图500的方法通 过不需要寄存器堆存储空间以处理线程的纹理操作从而可进一步有助于GPU的处理资源 的有效使用。要理解的是,流程图500的过程可以是用于防止死锁的动态过程。在块502中,确定管线缓冲器和/或管线的可用资源数。如这里所描述的,可用资 源可包括功能管线(如,纹理管线)的管线缓冲器的一部分或纹理管线的缓冲器部分。如 这里所描述的,可基于跟踪可用资源数的计数器来确定可用资源数。在块504中,基于第一线程的一个或多个纹理请求来确定正被请求的资源数。对 于成组做出的纹理请求,正被请求的数目为该组中所有请求。在块506中,响应于所请求的资源数少于可用资源数,给管线分配对应于所述一 个或多个请求的资源。如这里所描述的,确定可用资源数和对应于所请求的资源数来分配资源可以是原子操作。在块508中,调整可用资源数,以适应所发送的请求。如这里所描述的,该调整可 包括增加跟踪可用资源的数目。要理解的是,可基于将跟踪资源的数目与执行单元的资源 相比较的方式来增加或减少资源数。在块510中,发送一个或多个请求。如这里所描述的,这些请求可以是纹理请求。 照这样,发送该组纹理请求,使得当执行同一线程的相应读取时,保证数据在缓冲器中。在块512中,调整可用资源数。如这里所描述的,该调整可包括减少可用资源数。 如果存在附加的带有请求的线程,则可执行块516并访问第二线程。在执行了块516之 后,可对于所述第二线程执行块502。如果请求结果中的一个或多个是可用的,则可执行块 514。在块514,读取响应于一个或多个请求的一个或多个结果。如这里所描述的,从纹 理单元的管线缓冲器中读取结果。然后,可执行块516并选择第二线程。图6示出了在下述系统中的根据本发明一个实施例的用于防止死锁的示例性计 算机控制过程的流程图,所述系统将功能管线的结果数据写入到管线缓冲器而非寄存器 堆。在一个实施例中,流程图600的方法可由编译器执行。要理解的是,流程图600的过程 可以是用于防止死锁的静态过程。在块602中,对于GPU访问执行单元简档。该执行单元可包括纹理单元和数学单 元。在一个实施例中,执行单元简档包括每时钟周期所处理的单元(如,像素)数和管线资 源数。管线资源数可包括管线深度和缓冲器尺寸。在一个实施例中,缓冲器尺寸对应于纹 理管线结果缓冲器的尺寸。在块604中,确定能够在无死锁的情况下执行的线程和每线程纹理请求数。如这 里所描述的,线程和每线程请求数可基于需要在将读取纹理请求的结果之前发送的纹理请 求数。例如,如果纹理管线和管线缓冲器有400个槽且在需要读取之前每线程有四个纹理 请求,则在该系统中可将并发线程的数目限制到100,以防止死锁。在一个实施例中,线程数 基于图像的图块(tile),从而将在处理下一图块之前完成空间图块的所有线程。例如,图块 的线程可调度在一起,以利用驻留在处理器中的多个图块。要理解的是,这可利用任何高速 缓存区。因而,可处理图块以使得能够在不存在纹理管线由于缺乏资源而停滞的可能性的 情况下完成纹理请求和纹理返回序列。在块606中,基于能够在无死锁的情况下执行的每线程请求数来重排线程的指 令。如这里所描述的,编译器可重排指令,以确保可在线程读取结果之前发送有限的请求 数。为了图示和描述的目的,在前面已做出了对本发明特定实施例的描述。它们并非 意图穷尽本发明的形式或将本发明限于所披露的精确形式,并且按照上述教导,许多修改 和变形都是可以的。选择并描述这些实施例是为了以最佳方式解释本发明的原理及其实际 应用,从而使得本领域其他技术人员能够最好地利用本发明以及具有适于预期的具体使用 的各种修改的各种实施例。本发明的范围意图由所附权利要求书及其等同物来限定。
权利要求
一种在图形处理单元中处理数据的方法,所述方法包括维持管线缓冲器的闲置存储器资源的计数,所述管线缓冲器被耦接以从所述图形处理单元的执行单元接收结果;确定线程的对所述执行单元的请求的数目,其中,所述请求的数目包括在所述线程内存在读回操作之前存在于所述线程内的多请求操作的数目;如果所述管线缓冲器有足够的闲置存储器资源以适应全部所述数目的请求,则将所述数目的请求发送给所述执行单元,否则,不发送任何所述数目的请求给所述执行单元;以及所述执行单元在执行了所发送的请求之后将其结果写入到所述管线缓冲器。
2.如权利要求1所述的方法,其中,所述维持所述管线缓冲器的闲置存储器资源的所 述计数包括响应于所述将所述数目的请求发送给所述执行单元,减小所述管线缓冲器的 所述闲置存储器资源的所述计数。
3.如权利要求2所述的方法,进一步包括所述线程对应于发送给所述执行单元的请 求执行从所述管线缓冲器的读回操作,并且其中,所述维持所述管线缓冲器的闲置存储器 资源的所述计数进一步包括响应于所述线程执行所述读回操作,增加所述管线缓冲器的 所述闲置存储器资源的所述计数。
4.如权利要求1所述的方法,其中,所述执行单元是所述图形处理单元内的纹理单元, 并且其中进一步的,所述纹理单元的每个纹理操作包括对所述纹理单元的纹理请求操作和 从所述管线缓冲器的纹理读回操作。
5.如权利要求4所述的方法,其中,所述发送和所述不发送通过只发送已在所述管线 缓冲器内分配了结果空间的那些成组的纹理请求操作来防止所述纹理单元的死锁,其中, 所述成组的纹理请求操作是在线程的第一未发送的纹理读回操作之前的所述线程内全部 未发送的顺序纹理请求操作。
6.如权利要求1所述的方法,进一步包括所述线程将数学操作发送给所述图形处理器的数学功能单元;和 所述数学功能单元从寄存器堆的源寄存器获得用于所述数学操作的源操作数,并将执 行所述数学操作的结果返回给所述寄存器堆的目标寄存器。
7.如权利要求6所述的方法,其中,所述功能单元是纹理单元,并且其中,所述寄存器 堆不接收所述纹理单元的执行的结果。
8.一种在图形处理单元中处理数据的方法,所述方法包括确定管线缓冲器的尺寸,所述管线缓冲器被耦接以从所述图形处理单元的执行单元接 收结果;基于每个线程内的请求操作的数目并进一步基于所述管线缓冲器的所述尺寸,来确定 可允许由所述执行单元并发操作的线程的数目;只允许所述数目的线程或更少数目的线程由所述执行单元并发操作,以防止其死锁;所述数目的线程发送请求操作给所述执行单元;以及所述执行单元在执行了所述请求操作之后将其结果写入到所述管线缓冲器。
9.如权利要求8所述的方法,其中,所述确定线程的数目包括将所述管线缓冲器的所 述尺寸除以每个线程内的所述请求操作的数目。
10.如权利要求8所述的方法,进一步包括所述数目的线程对应于发送给所述执行单元的所述请求操作执行从所述管线缓冲器的读回操作。
11.如权利要求8所述的方法,其中,所述执行单元是所述图形处理单元内的纹理单 元,并且其中进一步的,所述纹理单元的每个纹理操作包括纹理请求操作和从所述管线缓 冲器的纹理读回操作。
12.如权利要求11所述的方法,其中,所述只允许所述数目的线程或更少数目的线程 由所述执行单元并发操作,通过保证所述数目的线程内的全部纹理读回操作都有机会执行 来防止死锁。
13.如权利要求8所述的方法,进一步包括线程发送数学操作给所述图形处理器的数学功能单元;和所述数学功能单元从寄存器堆的源寄存器获得用于所述数学操作的源操作数,并将执 行所述数学操作的结果返回给所述寄存器堆的目标寄存器。
14.如权利要求13所述的方法,其中,所述功能单元是纹理单元,并且其中,所述寄存 器堆不接收所述纹理单元的执行的结果。
15.一种图形处理单元的处理器组,所述处理器组包括寄存器堆,用于储存与可在所述处理器组内并发操作的多个线程相关的数据;纹理单元,用于处理所述多个线程的纹理操作,其中,每个纹理操作包括纹理请求操作 和对应的纹理读回操作;和管线缓冲器,其耦接至所述纹理单元,用于接收并储存来自所述纹理单元的结果。
16.如权利要求15所述的处理器组,进一步包括数学功能单元,用于处理所述多个线 程的数学操作,其中,所述数学功能单元耦接以从所述寄存器堆接收源操作数,并且还耦接 以将结果储存到所述寄存器堆中。
17.如权利要求15所述的处理器组,进一步包括计数器,用于维持所述管线缓冲器和 所述纹理单元的闲置存储器资源的计数。
18.如权利要求17所述的处理器组,进一步包括用于防止所述纹理单元内的死锁的电 路,所述用于防止死锁的电路包括用于确定线程的对所述纹理单元的纹理请求操作的数目的电路,其中,所述纹理请求 操作的数目包括在所述线程内存在纹理读回操作之前存在于所述线程内的多纹理请求操 作的数目;和用于如果所述管线缓冲器和所述纹理单元有足够的闲置存储器资源以适应全部所述 数目的纹理请求操作则将所述数目的请求发送给所述纹理单元,否则,不发送任何所述数 目的纹理请求操作给所述纹理单元的电路。
19.如权利要求15所述的处理器组,进一步包括用于通过只允许预定数目的线程或 更少数目的线程由所述纹理单元并发操作来防止所述纹理单元内的死锁的电路,其中,所 述线程的预定数目基于每个线程内的纹理请求操作的数目并进一步基于所述纹理单元和 所述管线缓冲器的尺寸。
20.如权利要求19所述的处理器组,其中,所述线程的预定数目是通过将所述管线缓 冲器的所述尺寸和所述纹理单元的所述尺寸除以每个线程内的所述纹理请求操作的数目 而计算的。
全文摘要
本发明提供了一种用于无死锁管线操作的系统及方法。一种利于改善无死锁图形处理的系统和方法。本发明的实施例为执行单元管线结果(如,纹理管线结果)提供存储空间。由于纹理单元可用于储存信息而同时寄存器堆中的相应位置可用于重新分配给其他线程,所以存储空间允许增加的多线程处理。实施例通过限制请求数并确保除非有资源可用于完成一组请求中的每个请求否则不发出该组请求,从而进一步防止死锁。因而,本发明的实施例提供了无死锁的改进性能。
文档编号G06F9/46GK101859257SQ20101014200
公开日2010年10月13日 申请日期2010年4月8日 优先权日2009年4月8日
发明者埃里克·林霍尔姆, 迈克尔·托克斯维格 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1