用于图形并行处理单元的缓冲器管理的制作方法

文档序号:6532868阅读:213来源:国知局
用于图形并行处理单元的缓冲器管理的制作方法
【专利摘要】所述技术大体涉及一种用于并行以及以管线方式执行图形数据处理操作的方法。在例如GPU(26)的着色器处理器的第一单元(28A)上执行第一线程,且在第二单元(28N)上并行执行第二线程。通过执行所述第一线程而产生的数据接着被所述第二单元执行所述第二线程消耗。包含所述GPU的IC(16)内的管理单元(18)从所述第一单元接收将由此产生的所述数据存储到所述IC外部的全局存储器中的缓冲器(22A-22N)中的请求,所述缓冲器包括FIFO缓冲器,其一实例为环形缓冲器;且确定通过执行所述第一线程而产生的所述数据将被存储的位置。在从所述第二单元接收到检索通过执行所述第一线程而产生的所述数据的请求后,所述管理单元即刻确定所述第一线程的所述数据是否可用于检索以供由所述第二线程消耗。
【专利说明】用于图形并行处理单元的缓冲器管理
[0001]本申请案主张2012年I月27日申请的第61/591,733号美国临时申请案的权益,所述临时申请案的全部内容全文以引用的方式并入本文中。

【技术领域】
[0002]本发明涉及存储器存取管理,且更特定来说涉及图形处理装置(GPU)中的存储器存取管理。

【背景技术】
[0003]图形处理单元(GPU)正用于除图形处理以外的用途。举例来说,非图形相关应用可通过利用GPU的高度并行性而在增加的速度下执行。这已产生提供额外非图形相关处理功能性且称为通用GPU(GPGPU)的GPU。举例来说,GPGPU包含一个或一个以上着色器核心,且着色器核心经配置以执行例如图形相关应用和非图形相关应用等应用。


【发明内容】

[0004]一般来说,本发明涉及用于利用图形处理单元(GPU)管理缓冲器的技术,所述缓冲器在全局存储器中且存储GPU的数据。举例来说,包含GPU的集成电路(IC)芯片包含管线管理单元。管线管理单元可经配置以将一个或一个以上缓冲器的状态信息维持在全局存储器中。当在GPU上执行的应用是为存取全局存储器中的缓冲器时,全局存储器中的缓冲器的状态信息可在IC芯片内部可用。以此方式,GPU不需要执行芯片外存储器存取来确定全局存储器中的缓冲器的状态信息。
[0005]在一个实例中,本发明描述一种用于以管线方式执行数据处理操作的方法。所述方法包含在图形处理单元(GPU)的着色器处理器的第一可编程计算单元上执行第一线程;以及在GPU的着色器处理器的第二可编程计算单元上执行第二线程。所述方法还包含以包含GPU的集成电路(IC)内的管理单元接收来自第一可编程计算单元的将通过执行第一线程而产生的数据存储到IC外部的全局存储器中的缓冲器中的请求。在此实例中,通过执行第一线程而产生的数据将被第二可编程计算单元执行第二线程消耗。并且,在此实例中,缓冲器包括先进先出(FIFO)缓冲器和环形缓冲器的一者。所述方法还包含以管理单元确定缓冲器内待存储通过执行第一线程而产生的数据的位置;以及利用IC将通过执行第一线程而产生的数据存储在缓冲器内的所确定位置中。
[0006]在一个实例中,本发明描述一种设备。所述设备包含包括缓冲器的全局存储器。在此实例中,缓冲器包括先进先出(FIFO)缓冲器和环形缓冲器的一者。所述设备还包含集成电路(1C),其包含图形处理单元(GPU)和管理单元。GPU包含经配置以执行第一线程的第一可编程计算单元,和经配置以执行第二线程的第二可编程计算单元。管理单元经配置以接收来自第一可编程计算单元的将通过执行第一线程而产生的数据存储到全局存储器中的缓冲器中的请求。在此实例中,通过执行第一线程而产生的数据将被第二可编程计算单元执行第二线程消耗。管理单元还经配置以确定缓冲器内待存储通过执行第一线程而产生的数据的位置。在此实例中,IC经配置以将通过执行第一线程而产生的数据存储在缓冲器内的所确定位置中。
[0007]在一个实例中,本发明描述一种设备。所述设备包含全局存储器和集成电路(IC)。全局存储器包含缓冲器。在此实例中,缓冲器包括先进先出(FIFO)缓冲器和环形缓冲器的一者。IC包含图形处理单元(GPU),其包括用于执行第一线程的装置和用于执行第二线程的装置。IC还包含用于接收来自所述用于执行第一线程的装置的将通过执行第一线程而产生的数据存储到全局存储器中的缓冲器中的请求。在此实例中,通过执行第一线程而产生的数据将被所述用于执行第二线程的装置消耗。IC还包含用于确定缓冲器内待存储由所述用于执行第一线程的装置产生的数据的位置,以及用于将通过执行第一线程而产生的数据存储在缓冲器内的所确定位置中的装置。
[0008]在一个实例中,本发明描述一种上面存储有指令的计算机可读存储媒体,所述指令当执行时致使一个或一个以上处理器在图形处理单元(GPU)的着色器处理器的第一可编程计算单元上执行第一线程,且在GPU的着色器处理器的第二可编程计算单元上执行第二线程。所述指令还致使所述一个或一个以上处理器利用包含GPU的集成电路(IC)内的管理单元接收来自第一可编程计算单元的将通过执行第一线程而产生的数据存储到IC外部的全局存储器中的缓冲器中的请求。在此实例中,通过执行第一线程而产生的数据将被第二可编程计算单元执行第二线程消耗。并且,在此实例中,缓冲器包括先进先出(FIFO)缓冲器和环形缓冲器的一者。所述方法还致使所述一个或一个以上处理器以管理单元确定缓冲器内待存储通过执行第一线程而产生的数据的位置,且利用IC将通过执行第一线程而产生的数据存储在缓冲器内的所确定位置中。
[0009]一个或一个以上实例的细节陈述于附图和以下描述中。其它特征、目标和优点将从描述内容和附图以及从权利要求书中显而易见。

【专利附图】

【附图说明】
[0010]图1是说明根据本发明描述的一个或一个以上实例的装置的实例的框图。
[0011]图2是进一步详细说明图形处理单元(GPU)和全局存储器的框图。
[0012]图3是说明根据本发明描述的一个或一个以上实例的实例技术的流程图。
[0013]图4是说明根据本发明描述的一个或一个以上实例的另一实例技术的流程图。
[0014]图5是进一步详细说明图1的装置的框图。

【具体实施方式】
[0015]图形处理单元(GPU)可包含经配置以执行一个或一个以上应用的着色器处理器。这些应用的实例包含例如顶点着色器、外壳着色器、片段着色器、几何着色器和与图形处理有关的其它此类应用等着色器程序。另外,一些应用开发者可认为利用GPU的高度并行性且在GPU上执行非图形相关应用是有益的。举例来说,GPU提供的处理并行性可适于执行并行矩阵操作,即使当矩阵操作与图形处理无关时也如此。非图形相关应用的其它实例包含与流体动力学或线性代数有关的技术,其中并行操作的快速执行可能是有益的。非图形相关应用还可在着色器处理器上执行。
[0016]能够执行此类非图形相关应用的GPU可视为通用GPU(GPU)。举例来说,当GPU正执行非图形相关应用时,GPU正充当GPGPU。几乎所有GPU可经配置以充当GPGPU。
[0017]出于说明的目的,本发明描述相对于GPU充当GPGPU的技术。然而,所述技术不限于其中GPU充当GPGPU (即,执行非图形相关应用)的例子,且所述技术还可应用于其中GPU执行图形相关应用的例子。此外,本发明描述的技术可由例如中央处理单元(CPU)、加速器或任何其它定制装置等任何类型的处理单元实施。虽然所述技术相对于GPU描述,但应理解,所述技术可扩展到其它类型的处理单元。
[0018]GPU内的着色器处理器可包含多个着色器核心(也称为可编程计算单元,以指示这些核心可执行针对图形和非图形相关应用两者的指令)。可编程计算单元的每一者可包含经保留用于待由所述可编程计算单元执行的指令以及通过执行所述指令产生的数据(例如,线程的执行期间产生的中间结果)的本地存储器。可编程计算单元的本地存储器可由其它可编程计算单元存取。在一些例子中,待在GPU上执行的不同应用可由不同可编程计算单元执行。
[0019]在本发明描述的技术中,图形相关应用称为着色器,且非图形相关应用称为内核。举例来说,着色器(即,图形相关应用)的实例包含(但不限于)顶点着色器、片段着色器和几何着色器。内核(即,非图形相关应用)的实例包含用以执行矩阵操作、流体动力学、图像处理操作、视频处理操作等的应用。
[0020]此外,内核不需要一定限于仅由GPU执行的应用,且还包含GPU的固定功能单元(即,非可编程单元)。仅出于说明的目的,本发明描述的技术相对于内核为在GPU上执行的应用而描述。举例来说,所述技术相对于在GPU的着色器处理器上执行非图形相关应用使得GPU充当GPGPU而描述。
[0021]内核可包含多个工作组、任务或线程(其全部在本发明中同义使用)。举例来说,线程可为内核的可独立于内核的其它线程执行的指令集。在一些实例中,为执行内核,可编程计算单元的一者或一者以上可各自执行内核的一个或一个以上线程。举例来说,第一可编程计算单元可执行内核的第一线程,且第二可编程计算单元可执行同一内核的第二线程。在一些实例中,一个可编程计算单元可执行一个内核的一个或一个以上线程,而另一可编程计算单元执行另一内核的一个或一个以上线程。在一些实例中,两者的组合是可能的(即,一些可编程计算单元正执行同一内核的不同线程,而一些其它可编程计算单元正执行不同内核的线程)。
[0022]一般来说,GPU可经配置以实施单程序多数据(SPMD)编程模型。在SPMD编程模型中,GPU可在多个可编程计算单元上执行内核(例如,作为线程),其中每一可编程计算单元对其自身数据执行功能。并且,在SPMD编程模型中,可编程计算单元包含相应程序计数器,其指示正由可编程计算单元执行的当前指令。
[0023]虽然GPU提供处理的高度并行性,但GPU可能不较好地适于以管线方式执行内核。以管线方式执行内核意味着执行内核使得一个内核产生的数据由另一内核消耗。作为另一实例,以管线方式执行内核意味着执行内核的产生待由同一内核的另一线程消耗的数据的线程。在本发明中,产生所述数据的线程可称为产生者线程,且接收所述数据的线程可称为消耗者线程。
[0024]在一些实例中,产生者线程和消耗者线程可为同一内核的线程。在一些实例中,产生者线程和消耗者线程可为不同内核的线程,在这些实例中,包含产生者线程的内核可称为产生者内核,且包含消耗者线程的内核可称为消耗者内核。
[0025]举例来说,以管线方式执行内核可预见为第一线程(例如,内核的产生者线程)产生由第二线程(例如,同一内核或不同内核的消耗者线程)消耗的数据。此第二线程(其为第一线程的消耗者)可为第三线程的产生者线程(例如,第二线程产生由第三线程消耗的数据)。第三线程可为不同于包含第一和第二线程的内核的内核的线程,或可为包含第一和第二线程的内核的一者的线程。在此实例中,第一、第二和第三线程可预见为形成处理管线。
[0026]以管线方式执行内核不应解释为需要串行(例如,逐个)执行内核或线程。举例来说,在以上实例中,有可能GPU并行(例如,同时)执行第一、第二和第三线程的两者或两者以上。然而,也有可能GPU串行执行线程,且仍视为以管线方式执行内核。
[0027]执行内核的产生者线程的可编程计算单元可需要将产生的数据输出到全局存储器(即,在包含GPU的集成电路(IC)外部的芯片外系统存储器),其中全局存储器可例如经由系统总线存取。执行同一内核或不同内核的消耗者线程的另一可编程计算单元可需要从全局存储器接收所产生的数据。如更详细描述,对于现有GPU,全局存储器的管理可计算、时间和/或功率低效,从而导致当以管线方式执行内核时较差的性能。
[0028]本发明描述用于对全局存储器的计算、时间和功率高效管理的技术。如更详细描述,包含GPU的集成电路(IC)可包含管线管理单元(PMU)。或者,GPU本身可包含PMU。PMU可经配置以管理存储待消耗的所产生的数据的全局存储器的状态信息。举例来说,处理器或GPU本身可保留全局存储器内由可编程计算单元产生的数据将存储在全局存储器中的位置。全局存储器内这些所保留的位置可视为多个缓冲器。在一些实例中,所述多个缓冲器可形成环形缓冲器或先进先出(FIFO)缓冲器。环形缓冲器可视为FIFO缓冲器的一个实例。
[0029]PMU可在IC或GPU内部(例如,在芯片上内部高速缓冲存储器中)存储信息,所述信息指示芯片外全局存储器中的缓冲器的状态信息。作为一个实例,PMU可存储指示全局存储器中的缓冲器的开始地址和结束地址的信息。作为另一实例,PMU可存储所述多个缓冲器内待存储所产生的数据的缓冲器的地址,以及所述多个缓冲器内待读取待消耗的数据的缓冲器的地址。作为又一实例,PMU可存储指示产生者内核是否完成数据的产生使得正执行消耗者内核的需要所述数据的线程的可编程计算单元可继续执行消耗者内核的不需要所述数据的其它线程的信息。
[0030]在本发明描述的技术中,PMU可接收将产生者线程产生的数据存储到缓冲器中的请求,且可接收从缓冲器检索产生者线程产生的数据应该消耗者线程消耗的请求。PMU可基于缓冲器的所存储的状态信息确定缓冲器内待存储通过执行产生者线程而产生的数据的位置,且基于缓冲器的所存储的状态信息确定缓冲器内待从其检索待由消耗者内核消耗的数据的位置。
[0031]通过以存储在包含GPU的IC内部或GPU本身内部的信息管理全局存储器的状态信息,本发明描述的技术可使GPU需要存取全局存储器的次数最小化。举例来说,PMU可不需要通过存取包含GPU的IC外部的此信息来确定待存储或检索数据的地址。使GPU需要存取全局存储器的次数最小化可减少功率消耗,减小系统总线带宽负载和驻留等待时间。
[0032]此外,如下文更详细描述,在现有GPU中,内核需要包含管理全局存储器的指令。GI3U可浪费时钟循环执行此类全局存储器管理指令,这可能计算上低效。利用PMU管理全局存储器的状态信息,内核可不需要包含全局存储器管理指令,这导致不太复杂的内核指令,以及较少需要执行的内核指令。以此方式,本发明描述的技术可促进计算效率。
[0033]图1是说明根据本发明描述的一个或一个以上实例的装置的实例的框图。举例来说,图1说明装置10。装置10的实例包含(但不限于)例如媒体播放器等视频装置、机顶盒、例如移动电话等无线手持机、个人数字助理(PDA)、台式计算机、膝上型计算机、游戏控制台、视频会议单元、平板计算装置等。装置10可包含除图1中说明的那些组件以外的组件。
[0034]如所说明,装置10包含集成电路(IC) 12和全局存储器20。全局存储器20可视为针对装置10的存储器。全局存储器20可包括一个或一个以上计算机可读存储媒体。全局存储器20的实例包含(但不限于)随机存取存储器(RAM)、电可擦除可编程只读存储器(EEPROM)、快闪存储器,或可用于携载或存储呈指令和/或数据结构的形式的所要程序代码且可由计算机或处理器存取的任何其它媒体。
[0035]在一些方面中,全局存储器20可包含致使处理器14和/或GPU16执行本发明中归于处理器14和GPU16的功能的指令。因此,全局存储器20可为上面存储有指令的计算机可读存储媒体,所述指令当执行时致使一个或一个以上处理器(例如,处理器14和GPU16)执行各种功能。
[0036]全局存储器20可在一些实例中视为非暂时性存储媒体。术语“非暂时性”可指示存储媒体不体现在载波或所传播信号中。然而,术语“非暂时性”不应解释为表示全局存储器20不可移动或其内容为静态的。作为一个实例,全局存储器20可从装置10移除,且移动到另一装置。作为另一实例,全局存储器(大体类似于全局存储器20)可插入到装置10中。在某些实例中,非暂时性存储媒体可存储可随时间改变的数据(例如,在RAM中)。
[0037]IC12包含处理器14、图形处理单元(GPU) 16和管线管理单元(PMU) 18。IC12可为容纳或形成处理器14、GPU16和PMU18的任何类型的集成电路。举例来说,IC12可视为芯片封装内的处理芯片。PMU18可为形成IC12的一部分的硬件单元或GPU16内的硬件。有可能PMU18为在IC12内或GPU16内的硬件上执行的软件。出于说明和描述的目的,相对于PMU18为硬件单元描述所述技术。
[0038]尽管处理器14、GPU16和PMU18说明为单一 IC12的一部分,但本发明的方面不限于此。在一些实例中,处理器14和GPU16可容纳在不同集成电路(即,不同芯片封装)中。在这些实例中,PMU18可容纳在与GPU16相同的集成电路中。在一些实例中,PMU18可形成为GPU16的一部分。作为一个实例,处理器14和GPU16可容纳在同一集成电路(B卩,同一芯片封装)中,且PMU18可形成在GPU16内。作为另一实例,处理器14和GPU16可容纳在不同集成电路(即,不同芯片封装)中,且PMU18可形成在GPU16内。
[0039]处理器14、GPU16和PMU18的实例包含(但不限于)数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA),或其它等效集成或离散逻辑电路。在一些实例中,GPU16和PMU18可为包含集成和/或离散逻辑电路的专门硬件,所述集成和/或离散逻辑电路向GPU16提供适于图形处理的高度并行处理能力且向PMU18提供管理全局存储器20,如下文更详细描述。在一些例子中,GPU16还可包含通用处理,且当实施通用处理任务(即,非图形相关任务)时可称为通用GPU(GPGPU)。
[0040]处理器14 (有时称为主机)可为装置10的中央处理单元(CPU)。处理器14可执行各种类型的应用。所述应用的实例包含浏览器、电子阅读器、电子邮件应用、电子表格、视频游戏、视频重放、音频重放、文字处理,或产生可观看对象以供显示的其它应用,或任何其它类型的应用。全局存储器20可存储用于执行所述一个或一个以上应用的指令。
[0041]在一些实例中,处理器14可将处理任务卸载到GPU16,例如需要高度并行操作的任务。作为一个实例,图形处理需要高度并行操作,且处理器14可将此类图形处理任务卸载到GPU16。在一些实例中,处理器14可将与图形处理无关的任务卸载到GPU16。举例来说,矩阵操作需要并行操作,且GPU16可与处理器14相比较好地适于实施此类操作。
[0042]为实施任务,GPU16可经配置以执行一个或一个以上应用。举例来说,对于图形相关处理,GPU16可执行例如顶点着色器、片段着色器和几何着色器等应用。对于非图形相关处理,GPU16可执行经设计用于此处理的应用(例如,用于实施矩阵操作的应用或用于流体动力学的应用)。对于任一实例(例如,图形相关处理或非图形相关处理),处理器14可指令GPU16执行所述一个或一个以上应用。
[0043]处理器14可根据特定应用处理接口(API)与GPU16通信。举例来说,处理器14可将指令发射到GPU16,例如指示GPU16利用API执行一个或一个以上应用的指令。此类 API 的实例包含Microsoft?I的 DirectX? AP1、Khronos 组的 OpenGL?,和 Khronos 组的OpcnCC:然而,本发明的方面不限于DirectX、OpenGL或OpenCL API,且可扩展到已开发、
当前正开打或将来即将开发的其它类型的API。此外,本发明描述的技术不需要根据API起作用,且处理器14和GPU16可利用任何技术来通信。
[0044]作为一个实例,对于图形相关应用,处理器14可使用OpenGL API与GPU16通信。对于非图形相关应用,处理器14可使用OpenCL API与GPU16通信。再次,本发明描述的技术不一定需要处理器14使用OpenGL和/或OpenCL API与GPU16通信。
[0045]GPU16将执行的图形相关应用可称为着色器,且GPU16将执行的非图形相关应用可称为内核。举例来说,全局存储器20可存储着色器和内核的指令,且在处理器14上执行的编译器可将着色器和内核的指令转换为目标代码以供在GPU16上执行。作为另一实例,全局存储器20可存储GPU16检索和执行的着色器和内核的目标代码。
[0046]着色器的实例包含用于图形相关处理的顶点着色器、片段着色器和几何着色器。内核的实例包含与图形处理无关的应用(例如,用于线性代数或流体动力学)。作为额外实例,内核包含用于图像处理和视频处理的应用。
[0047]GPU16可包含着色器处理器,且着色器处理器可执行着色器和内核。举例来说,GPU16的着色器处理器可包含一个或一个以上着色器核心(称为可编程计算单元),且所述一个或一个以上可编程计算单元的每一者可执行内核。
[0048]尽管内核被描述为在GPU16上执行的应用,但内核不应被视为限于此。内核的其它实例包含GPU16的固定功能单元。举例来说,GPU16包含可编程计算单元和固定功能单元。可编程计算单元可通过执行应用而提供功能灵活性。固定功能单元可为不提供功能灵活性且可被设计用于特性用途的硬件单元。一般来说,术语内核指代接收数据、处理所述数据且输出所述数据用于非图形相关用途的任何应用或硬件单元。然而,出于说明的目的,本发明描述的技术以其中内核为应用的实例加以描述,应理解这些技术可扩展到其中内核为固定功能单元的实例。
[0049]在本发明描述的技术中,代替于一个可编程计算单元执行内核的所有指令,有可能多个可编程计算单元执行内核的部分。内核的一部分可称为工作组、任务或线程(均同义)。举例来说,内核的工作组、任务或线程是可独立于内核的其它工作组、任务或线程执行的指令集。
[0050]在一些实例中,一个或一个以上可编程计算单元的第一集合可执行内核的线程,且一个或一个以上可编程计算单元的第二集合可执行内核的线程。在一些情况下,可编程计算单元的第一集合和可编程计算单元的第二集合执行的线程可为同一内核的线程。在一些情况下,可编程计算单元的第一集合和可编程计算单元的第二集合执行的线程可为不同内核的线程。在这些实例的任一者中,线程的一者可需要将所产生的数据输出到线程的另一者。换句话说,GPU16可以管线方式执行内核。
[0051]如上文描述,以管线方式执行内核可意味着执行内核使得一个线程产生的数据由另一线程消耗,且此另一线程产生的数据由又一线程消耗,等等。在这些实例中,线程可为不同内核、同一内核的线程,或一些线程可针对不同内核且其它线程可针对同一内核。在这些实例中,内核可视为形成其中产生和消耗数据的管线。举例来说,同一内核或不同内核的第一、第二和第三线程可形成管道,其中第一线程产生数据且发射所述数据以供由第二线程消耗用于处理。第二线程处理所接收的数据以产生数据,且将所产生的数据发射到第三线程以用于处理,等等。
[0052]在此实例中,第一线程可称为产生者线程,第二线程可称为针对第一线程的消耗者线程以及针对第三线程的产生者线程,且第三线程可称为消耗者线程。在其中第一、第二和第三线程针对不同内核(例如,分别第一、第二和第三内核)的实例中,第一内核可称为产生者内核,第二内核可称为针对第一内核的消耗者内核以及针对第三内核的产生者内核,且第三内核可称为消耗者内核。
[0053]在现有GPU中,以管线方式执行内核可在计算和功率方面低效。举例来说,可编程计算单元的每一者可包含本地存储器,其用于存储待由可编程计算单元执行的指令,用于存储待处理的数据,且用于存储所产生的数据(包含可产生的中间结果)。然而,可编程计算单元的本地存储器不可由任何其它可编程计算单元存取。
[0054]因此,在一些实例中,为以管线方式执行内核,GPU16可检索可编程计算单元的本地存储器中存储的所产生的数据,且将所述所产生的数据存储在全局存储器20中。将数据存储在全局存储器20中可称为芯片外存储数据,因为全局存储器20在容纳GPU16的集成电路外部(即,在IC12外部)。GPU16可接着检索存储在全局存储器20中的数据,且将所检索的数据加载到另一可编程计算单元的本地存储器中。
[0055]作为说明性实例,假定第一可编程计算单元正执行产生者内核的线程。在此实例中,第一可编程计算单元可将通过执行产生者内核的线程而产生的数据存储在第一可编程计算单元的本地存储器中。GPU16可从第一可编程计算单元的本地存储器检索所产生的数据且将所产生的数据存储在全局存储器20中。
[0056]在此实例中,假定第二可编程计算单元正执行消耗者内核的线程。在此实例中,GPU16可从全局存储器20检索产生者内核产生的数据且将数据存储到第二可编程计算单元的本地存储器中。消耗者内核可接着消耗存储到第二可编程单元的本地存储器中的数据。
[0057]在以上实例中,GPU16可需要将产生者内核产生的数据存储到全局存储器20中,因为第二可编程计算单元不能存取第一可编程计算单元的本地存储器。以此方式,全局存储器20充当随后待消耗的所产生的数据的中间存储装置。
[0058]一般来说,管理所产生的数据存储到全局存储器20的方式和/或所述数据待从全局存储器20检索的方式可能在处理和计算方面低效。作为一个实例,有可能(尽管低效)内核管理数据存储在全局存储器20中的方式。举例来说,内核可包含致使可编程计算单元的算术逻辑单元(ALU)确定全局存储器20内待存储数据或待检索所存储的数据的地址(例如,指针)的指令。
[0059]作为另一实例,全局存储器20可存储原子计数器。原子计数器的值可指示数据是否可用于消耗。举例来说,产生者内核可包含读取存储在全局存储器20中的原子计数器的当前值的指令。产生者内核还可包含基于产生者内核存储的数据量修改原子计数器的值的指令,以及将原子计数器的经修改值写回到全局存储器20中的指令。
[0060]消耗者内核可包含周期性检查存储在全局存储器20中的原子计数器的值的指令。当原子计数器的值足够大时,消耗者内核可确定待消耗的数据可用。举例来说,假定原子计数器的值为X,且产生者内核产生了数据量N。在此实例中,消耗者内核可包含致使正执行消耗者内核的线程的可编程计算单元周期性检查原子计数器的值的指令。当可编程计算单元确定原子计数器的值为X加N时,可编程计算单元可请求GPU16从全局存储器20检索所存储的数据以供消耗。
[0061]以此方式。有可能使用软件(即,内核的指令)来以管线方式执行内核。然而,可存在为何使用内核内的指令以管线方式执行内核很低效的各种原因。举例来说,将确定在何处存储数据或将数据存储在全局存储器20中何处的地址的指令包含在内核中可需要可编程计算单元的ALU不必要地消耗功率,以及浪费时钟循环来处理用于确定全局存储器20内的地址的指令。
[0062]此外,周期性检查原子计数器的值需要GPU16在芯片外(即,在全局存储器20中)存取信息。从全局存储器20读取原子计数器的值以及将原子计数器的经修改值写入到全局存储器20可消耗不合需要的功率量。并且,如所说明,IC12经由存储器总线24耦合到全局存储器20。可存在对于存储器总线24可处置的数据量的带宽限制。因此,从何时GPU16可读取和写入原子计数器的值可存在延迟。
[0063]此外,因为数据可用于由消耗者内核消耗的时间未知,所以执行消耗者内核的可编程计算单元可周期性致使GPU16检查原子计数器的值以确定数据是否可用于消耗。周期性检查原子计数器的值可致使消耗者内核的线程保持“旋转”。举例来说,如果原子计数器的所读取值指示数据尚不完全可用于消耗,那么可编程计算单元可暂停消耗者内核的线程的执行,直到可编程计算单元再次检查原子计数器的值为止。如果数据仍不可用,那么可编程计算单元再次等待,且致使GPU16再次检查数据是否可用。在此实例中,消耗者内核的线程可在待消耗的数据在全局存储器20中不可用的时间期间保持忙碌-等待。换句话说,在旋转期间,可编程计算单元可不在执行任何功能,这可能延迟数据的消耗。
[0064]如果可编程计算单元确定数据可用(例如,通过读取原子计数器的值)的频率为高,那么GPU16可能由于过于频繁读取存储在全局存储器20中的原子计数器的值而浪费功率。如果可编程计算单元确定数据可用的频率为低,那么数据可用的时间与GPU16检索数据的时间之间可存在被浪费的时间,这也延迟数据的消耗。
[0065]并且,在全局存储器20存储原子计数器的以上技术的一些技术中,当一个内核正读取、修改和写入原子计数器的值时,不允许其它内核读取、修改或写入原子计数器的值。在此类情况下,当两个产生者线程需要同时输出数据以供存储在全局存储器20中时,线程的一者将能够输出数据,但另一线程可不能输出数据,因为此另一线程可不能够存取原子计数器。在此类情况下,被拒绝存储装置存取的线程可旋转直到对原子计数器的存取可用为止,且当原子计数器可用于存取时,被拒绝存储装置存取的线程可将数据输出到全局存储器20。当两个消耗者线程试图同时存取数据时,可发生相同情况。
[0066]本发明描述的技术可允许GPU16与上文描述的技术相比更有效地以管线方式执行内核。如更详细描述,管线管理单元(PMU) 18可经配置以存储各个线程产生的数据的状态信息和待由各个线程消耗的数据。以此方式,GPU16可不需要连续在芯片外存取信息,从而指示数据存储在何处以及何时数据可用于消耗。而是,PMU18可在内部存储此信息(即,在IC12内)。
[0067]如所说明,全局存储器20可包含缓冲器22A_22N(统称为缓冲器22)。缓冲器22可为全局存储器20内的存储位置。缓冲器22的实例包含先进先出(FIFO)缓冲器或环形缓冲器。
[0068]处理器14可经配置以界定驻留在全局存储器20内的缓冲器的数目,且在全局存储器20内保留存储位置。举例来说,处理器14可界定缓冲器22的开始和结束位置(B卩,开始和结束地址)。处理器14可基于驻留在GPU16的着色器处理器内的可编程计算单元的数目界定驻留在全局存储器20内的缓冲器的数目。作为一个实例,处理器14可界定驻留在全局存储器20内的缓冲器的数目使得针对每一可编程计算单元存在一个或一个以上输入缓冲器22 (即,存储待由在可编程计算单元上执行的内核消耗的数据的一个或一个以上缓冲器),以及针对每一可编程计算单元存在零个或多个输入缓冲器22 (即,存储由在GPU16的可编程计算单元上执行的内核产生的数据的零个或多个缓冲器)。
[0069]另外,处理器14可经配置以界定缓冲器的大小。举例来说,处理器14可经配置以界定缓冲器22的每一者内的存储位置的数目(例如,缓冲器22的长度)。处理器14还可界定可存储在存储位置的每一者中的数据量(例如,缓冲器22的宽度)。在一些实例中,处理器14可用数据预先填充缓冲器22。
[0070]在一些实例中,处理器14可经配置以界定缓冲器22的最小数目。作为一个实例,处理器14可经配置以界定最少128个缓冲器22。缓冲器22的最小数目为128是出于说明的目的而提供且不应视为具有限制性。缓冲器22的最小数目可大于或小于128。在一些实例中,可不存在对于缓冲器22的最小数目的要求。
[0071]处理器14还可经配置以执行各种指令来确定缓冲器22的状态。举例来说,处理器14可执行用以将存储在缓冲器22中的数据复制到IC12或GPU16内的缓冲器中的指令,和用以将存储在IC12或GPU16的缓冲器内的数据复制到缓冲器22中的指令。处理器14还可执行界定存储在缓冲器22中的数据量的指令,以及确认缓冲器22的长度和宽度(例如,以确保缓冲器22尚未恶化)的指令。允许处理器14确定缓冲器22的状态的指令的此执行并非在每个实例中均需要,但可潜在地辅助内核的开发者通过在处理器14而非GPU16上执行指令而确定缓冲器22的状态。
[0072]在一些实例中,处理器14可经配置以界定缓冲器22的放大因子。放大因子可指示可由内核的线程产生用于存储在缓冲器22的一者中的元素的最大数据。可需要所述放大因子用于缓冲器22的待存储数据的一者不能存储所有所产生的数据的情形。这可导致内核的执行归因于缓冲器22中不足的存储空间而停止,且可导致死锁(例如,内核不会再返回到执行状态)。
[0073]为使此死锁的几率最小化,处理器14可保留全局存储器20的大部分(例如,界定足够大以存储几乎任何类型的数据的长且宽的缓冲器22)。这对于一些情况可较好运作,但对于不能实现保留全局存储器20的大部分的其它情况不能较好运作。在一些情况下,开发者可开发内核使得所述内核不产生太多数据,借此使死锁的几率最小化。
[0074]尽管处理器14描述为界定缓冲器22,但本发明描述的技术不限于此。在一些实例中,除处理器14以外的处理单元可经配置以界定缓冲器22。在一些实例中,GPU16有可能界定缓冲器22。然而,为便于描述,相对于处理器14界定缓冲器22来描述所述技术。
[0075]处理器14可将缓冲器22的信息发射到管线处理单元(PMU) 18。举例来说,PMU18可接收指示缓冲器22的数目、缓冲器22的开始和结束地址、缓冲器22的长度和宽度,以及处理器14针对缓冲器22确定的任何其它信息的信息。PMU18可将缓冲器22的此状态信息存储在位于IC12内的寄存器内。利用来自处理器14的缓冲器22的信息,PMU18可经配置以当在可编程计算单元上执行的内核的线程产生和消耗数据时管理缓冲器22的状态信肩、O
[0076]举例来说,在执行内核的线程的可编程计算单元产生数据并输出所产生的数据之后,PMU18可接收数据且确定待存储数据的地址。举例来说,PMU18可确定缓冲器22中的哪一者将存储所述数据。在其中缓冲器22为环形缓冲器或FIFO缓冲器的实例中,PMU18可存储识别缓冲器22的开始和结尾的指针的信息。对于环形缓冲器,PMU18还可存储识别有效数据的开始和有效数据的结尾的指针的信息。
[0077]因此,代替于内核包含致使可编程计算单元确定将存储所产生的数据或将检索数据以供消耗的地址的指令,PMU18可经配置以确定将存储所产生的数据或将检索数据以供消耗的地址。以此方式,GPU16可不浪费时钟循环,且可编程计算单元的ALU可不浪费处理功率来确定将存储数据或将检索数据的地址。
[0078]此外,PMU18可经配置以确定何时待消耗的数据准备好供消耗。举例来说,代替于全局存储器20存储原子计数器,PMU18可将原子计数器本地存储在IC12内(例如,在IC12内的本地高速缓冲存储器中的寄存器内)。作为一个实例,当执行产生者线程的可编程计算单元输出数据时,PMU18可读取内部存储的原子计数器的值,基于所产生数据的量修改原子计数器的值,且在IC12内写入原子计数器的经修改值。在此实例中,当执行消耗者线程的可编程计算单元读取原子计数器的值时,GPU16可不需要通过存取芯片外全局存储器20而确定原子计数器的值。而是,PMU18可提供原子计数器的值。
[0079]在一些实例中,本地存储原子计数器的值的PMU18可减少旋转。举例来说,执行消耗者线程的可编程计算单元可输出对于待由消耗者线程消耗的数据的请求。在此实例中,PMU18可确定待消耗的数据是否可用(例如,基于本地存储的原子计数器的值)。
[0080]如果PMU18确定数据尚不可用于消耗,那么PMU18可向可编程计算单元指示可编程计算单元应切换到不依赖于所述尚不可用数据的(同一内核或可能不同内核的)不同线程。换句话说,PMU18可指示需要所述尚不可用数据的消耗者线程应进入休眠使得可编程计算单元可保持执行其它线程。接着,当数据可用时,如PMU18基于原子计数器的本地存储的值所确定,PMU18可指示可编程计算单元切换回到休眠线程(即,唤醒所述线程)使得可编程计算单元可使用现可用的数据执行消耗者线程。以此方式,当数据尚不可用于消耗时,执行消耗者线程的可编程计算单元可能够执行内核的其它线程,而不是保持在忙碌-等待状态。
[0081]作为另一实例,当在不同可编程计算单元上执行的同一内核的两个产生者线程试图同时将数据写入到缓冲器22的相同一者时,PMU18可允许存取产生者线程的一者且拒绝存取另一产生者线程。在此实例中,PMU18可指示执行被拒绝存取的线程的可编程计算单元执行内核的其它线程。当到缓冲器22的写入存取变得可用时,如PMU18所确定,PMU18可向正执行被拒绝存取的线程的可编程计算单元指示到缓冲器22的写入存取现在可用。以此方式,执行被拒绝存取的线程的可编程计算单元可能够执行额外线程。
[0082]类似地,当两个消耗者线程试图同时从缓冲器22的相同一者读取数据时,PMU18可允许存取消耗者线程的一者且拒绝存取另一消耗者线程。类似于两个线程正同时写入的实例,在其中两个线程正同时读取的此实例中,PMU18可指示执行被拒绝存取的线程的可编程计算单元执行其它线程。当到缓冲器22的读取存取变得可用时,如PMU18所确定,PMU18可向正执行被拒绝存取的线程的可编程计算单元指示到缓冲器22的读取存取现在可用。以此方式,执行被拒绝存取的线程的可编程计算单元可能够执行额外线程。
[0083]以此方式,界定全局存储器20中的缓冲器22的处理器14,以及管理全局存储器20中的缓冲器22的状态的PMU18可允许由GPU16以管线方式有效执行内核。作为一个实例,PMU18可使以管线方式执行内核所需的芯片外存取次数最小化。作为另一实例,因为PMU18可确定应存储数据或应检索数据的地址,所以GPU16可不通过执行内核内用于确定此类地址的指令而浪费功率和时钟循环来确定此类地址。换句话说,PMU18可在线程不包含用于确定将在何处存储或检索数据的指令的情况下确定待存储或检索数据的地址。并且,PMU18可允许可编程计算单元在不旋转的情况下执行内核的线程。举例来说,当来自产生者内核的数据尚不可用时,PMU18可允许消耗者内核的其它线程(例如,不需要来自产生者内核的数据的线程)执行。
[0084]图2是进一步详细说明图形处理单元(GPU)和全局存储器的框图。举例来说,图2进一步详细说明图1的GPU16和全局存储器20。如所说明,GPU16包含着色器处理器26、固定功能单元30、管线管理单元(PMU) 18、高速缓冲存储器34、调度器40、寄存器44。在一些实例中,寄存器44可为高速缓冲存储器34的一部分。在图2中说明的实例中,PMU18说明为形成在GPU16内。然而,如上文描述,PMU18可形成在GPU16外部且在与GPU16相同的集成电路中。
[0085]着色器处理器26可包含可编程计算单元28A-28N (统称为可编程计算单元28),其可视为着色器核心。固定功能单元30包含固定功能计算单元32A-32N(统称为固定功能计算单元32)。着色器处理器26和固定功能单元30可包含可编程计算单元28和固定功能单元32的一者或一者以上(例如,多于或少于所说明)。
[0086]可编程计算单元28可如上文描述起作用。举例来说,可编程计算单元28可执行图形和非图形相关应用(着色器和内核)两者。举例来说,可编程计算单元28可执行以装置语言(例如,OpenCL C语言)编写的内核。如上文描述,可编程计算单元28的一者可包含用于存储中间结果且用于在所述可编程计算单元28上执行的内核的线程之间共享的本地存储器。可编程计算单元28的每一者的本地存储器不可由另一可编程计算单元28存取。在一些实例中,有可能可编程计算单元28的一者调度可编程计算单元28的另一者将执行内核的线程的时间。
[0087]在一些例子中,可编程计算单元28的一者可将数据发射到可编程计算单元28的一个或一个以上其它者。举例来说,为以管线形式执行内核,执行产生者线程的可编程计算单元28的第一者可将数据(例如,非图形相关数据)发射到可编程计算单元28的第二者。如上文描述,可编程计算单元28的发射者(例如,执行产生者线程的可编程计算单元)可将数据存储在缓冲器中,例如全局存储器20的缓冲器22的一者,且可编程计算单元28的接收者(例如,执行者消耗者线程的可编程计算单元)可从全局存储器20的缓冲器22的一者检索数据。
[0088]如图2中说明,在一些实例中,GPU16可包含内部高速缓冲存储器34。然而,高速缓冲存储器34可在IC12内部而非限于在GPU16内部。在一些实例中,代替于在芯片外存储所产生的数据(例如,在全局存储器20中),也有可能GPU16将数据存储在GPU16或IC12内部。举例来说,可编程计算单元28的发射者可将数据存储在高速缓冲存储器34中的缓冲器36A-36N的一者或一者以上(统称为缓冲器36)中,所述高速缓冲存储器34在图2的实例中的GPU16内,但可在IC12内以及GPU16外部。可编程计算单元28的接收者可从高速缓冲存储器34中的缓冲器36检索数据。高速缓冲存储器34内的缓冲器可为全局存储器20中的缓冲器22的支持高速缓冲存储器的缓冲器。换句话说,全局存储器20的缓冲器22可存储由产生者线程产生的待由消耗者线程消耗的完整数据,且缓冲器36可充当存储所产生数据中的一些数据以供快速存取(与从全局存储器20存取数据相比)的高速缓冲存储器。
[0089]高速缓冲存储器34内的缓冲器36可类似于缓冲器22。举例来说,缓冲器36可为FIFO缓冲器或环形缓冲器。可能需要高速缓冲存储器34包含缓冲器36以避免与存取芯片外存储器(例如,全局存储器20的缓冲器22)相关联的存储器等待时间和功率消耗。然而,仅利用缓冲器36可能不切实际,因为用于存储的可用空间有限。以此方式,有可能将一些数据存储在缓冲器36内且允许溢出到缓冲器22中。
[0090]缓冲器36和缓冲器22可允许GPU16以管线方式执行内核。举例来说,缓冲器36和缓冲器22可被视为允许可编程计算单元28之间的通信的数据结构。缓冲器36和缓冲器22可经配置以存储比在可编程计算单元上执行的内核可输出(例如,一个以上数据单元)的最小数据量多的数据。以此方式,在可编程计算单元28的一者上执行的内核的线程可能够产生存储在缓冲器36和缓冲器22中且可传递到在可编程计算单元28的另一者上执行的另一内核的线程(以供消耗)的可变数据量。
[0091]固定功能计算单元32可提供固定功能性且可形成为硬件单元(作为非限制性实例)。固定功能计算单元32可被视为执行使用装置语言编写的特定内置式内核。举例来说,虽然可编程计算单元28可提供功能灵活性,但固定功能计算单元32的相应功能灵活性可能有限。举例来说,固定功能计算单元32可包含光栅化单元、图元装配单元、视口变换单元,和提供特定图形功能性的其它此类单元。
[0092]在一些例子中,固定功能计算单元32可经硬连线以执行其相应特定功能。并且,可能有可能由固定功能计算单元32来调度固定功能计算单元32的另一者何时将执行。此夕卜,在一些情况下,如果GPU16不包含固定功能计算单元32的特定一者,那么有可能开发执行不可用固定功能计算单元的功能的内核。换句话说,所述内核可模拟不可用固定功能计算单元的固定功能行为。举例来说,如果固定功能镶嵌器不可用,那么开发者可开发镶嵌内核,其模拟镶嵌器的固定功能行为并在可编程计算单元28的一者或一者以上之上执行内核。
[0093]在一些实例中,GPU16可包含调度器40。调度器40可将线程和操作指派到各种可编程计算单元28和固定功能单元32。举例来说,调度器40可对可编程计算单元28执行的任务进行负载平衡使得可编程计算单元28中没有一者在其它者被利用不足时被过分利用。调度器40可实施为硬件或在硬件上执行的软件。
[0094]在图2中,全局存储器20可包含缓冲器42A_42N(统称为缓冲器42),且高速缓冲存储器34可包含缓冲器38A-38N(统称为缓冲器38)。缓冲器38可不一定在每个实例中,且可形成为用于提供对于存储在缓冲器42中的命令的支持高速缓冲存储器的存储的任选芯片上高速缓冲存储器。缓冲器42和缓冲器38可视为命令队列。可存在针对所有可编程计算单元28的命令队列(例如,缓冲器42和缓冲器38的一者)以及针对每一类型固定功能计算单元32的一个队列。缓冲器42和缓冲器38可存储零或更多条目。
[0095]缓冲器42和任选芯片上缓冲器38可辅助组织针对可编程计算单元28和固定功能计算单元32的工作负载调度。举例来说,缓冲器42可存储指示可编程计算单元28和固定功能计算单元32执行各种任务的命令。举例来说,缓冲器42中的每一条目可存储用于致使可用的一个或一个以上可编程计算单元28执行内核的线程的信息,以及存储内核幅角值的信息和相依性信息。在一些实例中,可需要在一个或一个以上可编程计算单元28执行内核之前满足内核的线程之间的相依性。
[0096]缓冲器22可由处理器14(图1)和GPU16两者存取。作为一个实例,处理器14可根据上文描述的各种API使用调用存取缓冲器22。GPU16可基于可编程计算单元28上执行的内核存取缓冲器22。举例来说,可以将所产生的数据存储到全局存储器20中的功能开发内核。
[0097]如所说明,GPU16还可包含管线管理单元(PMU) 18。如上文描述,PMU18可管理全局存储器20内的缓冲器22的状态。另外,PMU18可管理高速缓冲存储器34内的缓冲器36的状态。
[0098]举例来说,PMU18可通过存储缓冲器22和缓冲器36的长度和宽度(包含可用于存储所产生的数据的缓冲器22和缓冲器36的数目)来管理缓冲器22和缓冲器36的状态。作为一个实例,PMU18可在内核在可编程计算单元28上执行之前分配缓冲器22,且可在内核执行结束时解除分配缓冲器22。
[0099]作为另一实例,PMU18可将标头指针、当如偏移、最大深度等彳目息存储在芯片上寄存器44中。在一些实例中,PMU18可以与在图形处理中如何存储纹理参数类似的方式存储缓冲器22和缓冲器36的状态信息。
[0100]缓冲器22可需要以下意义上的管理:确定将数据存储到哪些缓冲器22中或从哪些缓冲器22检索数据、确定将数据存储在缓冲器中或从其检索数据的存储位置(例如,确定地址),以及确保可编程计算单元28的不同者不会试图从缓冲器存取引起数据恶化的信息。PMU18可被分配到此管理任务。举例来说,在包含PMU18的GPU16或包含包括PMU18的GPU16的IC的情况下,缓冲器22的管理可局限于包含GPU16的IC内而非IC外部。这可导致功率消耗减少,以及在可编程计算单元28上执行的内核的有效执行。
[0101]作为一个实例,PMU18可将原子计数器存储在寄存器44内。寄存器44可为高速缓冲存储器34的一部分,或GPU16或IC12内的某一其它存储器的一部分。原子计数器可指示对于可编程计算单元28的一者的存取是否可用(例如,数据是否可用于读取或两个或两个以上内核是否正试图同时从同一缓冲器22进行写入或读取)。基于原子计数器,PMU18可能够适当允许存取可编程计算单元28的一者,同时拒绝存取可编程计算单元28的其它者以避免缓冲器22的数据恶化,这可在两个线程试图同时写入的情况下发生。在一些例子中,当PMU18拒绝对可编程计算单元28的一者的存取时,PMU18可允许请求存取的任务(例如,线程)休眠,且允许可编程计算单元28的被拒绝的一者继续执行其它任务(例如,线程)。当对可编程计算单元28的被拒绝的一者的存取变为可用时,PMU18可唤醒所述任务且将数据提供到所述任务以供进一步执行。以此方式,可编程计算单元28可不完全闲置,且可编程计算单元28的其它任务可执行。
[0102]在一些实例中,当需要从全局存储器20的一个缓冲器22检索数据时,PMU18可能够检索除所需数据以外的额外数据。举例来说,PMU18可确定所请求数据的开始和结束位置。然而,PMU18可检索在所请求数据的所确定的结束位置之后存储在缓冲器22中的额外数据。PMU18可当PMU18确定缓冲器36中存储空间可用时检索此额外数据。如上文描述,PMU18可管理全局存储器20中的缓冲器22以及高速缓冲存储器34内的缓冲器36两者。PMU18可接着将所检索的数据存储在高速缓冲存储器34中。以此方式,当需要此数据时,额外数据在GPU16内已经可用。将额外数据(例如,除所请求数据以外的数据)存储在缓冲器36中可进一步减少GPU16必须在芯片外(例如,从全局存储器20)存取数据的次数。
[0103]为存取数据,可编程计算单元28可利用指针来存取缓冲器(例如,可开发内核以使用指针存取数据)。在一些实例中,PMU18可维持指针信息使得可编程计算单元28能够适当存取数据。举例来说,可编程计算单元28可将请求关于缓冲器22的信息的专门指令输出到PMU18。此类信息可包含缓冲器内元素的数目、多少数据存储在缓冲器内(例如,缓冲器的宽度)、信息存储在何处的信息和其它此类信息。以此方式,确保可编程计算单元28适当存取缓冲器22可在容纳GPU16的IC内部执行,这可能减少容纳GPU16的IC外部的存取。
[0104]作为一个实例,为确保数据不会恶化或丢失,可开发产生者内核以包含询问缓冲器22的范围(例如,开始和结束点)的指令。在此实例中,正执行产生者内核的可编程计算单元28的一者可将缓冲器22的范围的询问输出到PMU18。PMU18可已将缓冲器22的范围的信息存储在寄存器44中(例如,通过当处理器14界定缓冲器22时从处理器14接收此信息)。PMU18可将缓冲器22的范围的结果传回到产生者内核。
[0105]作为另一实例,为以管线方式执行内核,在一些实例中,可能有必要维持管线中数据的次序。举例来说,假定第一内核将产生待由第二内核消耗的数据。然而,在此情况下,有可能第三内核在第一和第二内核正执行的同时也在执行。在此情况下,有可能对第一内核产生的数据和第三内核产生的数据重新排序,且可能导致第二内核消耗不正确的数据。
[0106]为确保适当排序,在一些实例中,除指示缓冲器22是否可用于存取的原子计数器外,PMU18还可将额外原子计数器存储在寄存器44中。这些额外原子计数器可称为装置-原子计数器。举例来说,可存在与缓冲器22的每一者相关联的装置-原子计数器。并且,PMU18或调度器40可经配置以将令牌指派到每一内核的每一线程,所述令牌界定所述线程产生的数据将存储在缓冲器22中的相对位置。线程的此令牌可为装置-原子计数器的当前值。
[0107]举例来说,PMU18可向将首先消耗数据的第一消耗者线程指派令牌值0,向将第二个消耗数据的第二消耗者线程指派令牌值1,等等。这些消耗者线程的每一者可向PMU18请求装置-原子计数器的值。如果装置-原子计数器的当前值等于消耗者线程的令牌值,那么消耗者线程可消耗所述数据。否则,消耗者线程可不消耗所述数据。
[0108]在令牌值等于装置-原子计数器的值的消耗者线程消耗数据之后,PMU18可更新装置-原子计数器的值。在一些实例中,消耗者线程将消耗的数据量可为固定的,且PMU18可在从缓冲器22检索固定数据量之后更新装置-原子计数器的值。然而,在一些实例中,消耗者线程将消耗的数据量可不是固定的。在这些实例中,在消耗者线程完成接收数据之后,消耗者线程可向PMU18指示PMU18应增加装置-原子计数器的值使得下一消耗者线程可消耗所述数据。以此方式,值可由PMU18存储在寄存器44中并更新的装置-原子计数器可确保维持数据将被消耗的次序,且不应不按次序接收数据的消耗者线程不会不按次序接收数据。
[0109]作为另一实例,PMU18可将信息存储在寄存器44中以使死锁的几率最小化。举例来说,如上文描述,处理器14可经配置以界定缓冲器22的放大因子,其指示可由内核的线程产生以供存储在缓冲器22的一者中的元素的最大数目。如果内核产生比放大因子界定的数据多的数据,那么内核可发生死锁(例如,停止执行)。处理器14可将放大因子的值提供到PMU18,且PMU18可将放大因子的值存储在寄存器44内。
[0110]在一些实例中,为使死锁的几率最小化,开发者可在内核中包含请求放大因子的值的指令。执行内核的可编程计算单元28的一者可将对于放大因子的值的请求输出到PMU18。PMU18又可向执行内核的可编程计算单元28的一者指示放大因子的值。如果可编程计算单元28确定由内核的线程产生的数据量将大于放大因子,那么可编程计算单元28可一旦所产生数据的量等于放大因子就停止内核的执行,且可一旦已产生的数据被消耗就调度内核的剩余线程的执行。
[0111]除了用以使死锁最小化的以上技术外或代替于以上技术,PMU18可实施事先调度,其中PMU18可将数据存储在缓冲器22中直到所产生的数据等于放大因子为止。PMU18可接着将剩余数据存储在缓冲器36中。换句话说,PMU18可确保将数据存储在缓冲器22中的请求在“安全”范围内,且将数据存储在缓冲器22中的任何请求改为存储在缓冲器36中。
[0112]图3是说明根据本发明描述的一个或一个以上实例的实例技术的流程图。如图3中说明,可编程计算单元28的一者可在GPU16的着色器处理器26上执行内核的一个或一个以上线程(46)。在IC12内或GPU16内的PMU18可针对内核的所述一个或一个以上线程从可编程计算单元28的所述一者接收将数据存储到全局存储器20 (其在IC12内部)中或从全局存储器20检索数据的请求(48)。
[0113]PMU18可确定是否允许对请求数据的存储或检索的可编程计算单元28的所述一者的存取(50)。如果存取不可用(50的否),那么可编程计算单元28的所述一者可执行内核的额外线程(52)。在此实例中,PMU18可向可编程计算单元的所述一者指示何时存取可用。
[0114]如果存取可用(50的是),那么可编程计算单元28的所述一者可确定全局存储器20中的缓冲器(例如,缓冲器22的一者)内将存储或检索数据的位置(52)。举例来说,PMU18可确定全局存储器20内将存储数据或将从其检索数据的位置(即,地址)(54)。基于所确定的位置,GPU16可接着将数据存储到全局存储器20内的缓冲器22的一者内的所确定的位置或从所述所确定的位置检索数据(56)。
[0115]在一些实例中,为确定缓冲器22的所述一者内的位置,PMU18可在内核的所述一个或一个以上线程不指示全局存储器20中将存储或检索数据的位置的情况下确定所述位置。以此方式,内核不需要包含用于确定全局存储器20内将存储数据或将从其检索数据的位置的指令。
[0116]在一些实例中,PMU18可除所请求数据外还检索数据。在这些实例中,PMU18可将额外数据存储在高速缓冲存储器34中。在一些实例中,PMU18可从处理器14接收缓冲器22的状态信息。在这些实例中,PMU18可基于所接收的状态信息确定缓冲器22的所述各者内将存储或检索数据的位置。
[0117]图4是说明根据本发明描述的一个或一个以上实例的另一实例技术的流程图。如所说明,GPU16的着色器处理器26的第一可编程计算单元(例如,可编程计算单元28的一者)可执行第一线程(58)。GPU16的着色器处理器26的第二可编程计算单元(例如,可编程计算单元28的另一者)可执行第二不同线程(60)。
[0118]在包含GPU16的IC12内的PMU18可从第一可编程计算单元接收将第一线程的执行所产生的数据存储到全局存储器20 (其在IC12外部)中的缓冲器(例如,缓冲器22的一者)的请求(62)。在此实例中,第一线程(例如,产生者线程)的执行所产生的数据将由第二可编程计算单元执行第二线程(例如,消耗者线程)消耗。并且,缓冲器可为先进先出(FIFO)缓冲器和环形缓冲器,其中环形缓冲器为FIFO缓冲器的一个实例。
[0119]PMU18可确定缓冲器内将存储第一线程的执行所产生的数据的位置出4)。IC12可将第一线程的执行所产生的数据存储在缓冲器内的所确定的位置中出6)。应理解,将第一线程的执行所产生的数据存储在缓冲器内的所确定的位置中的IC12包含存储数据的IC12、存储数据的GPU16,和/或存储数据的PMU18。换句话说,存储数据的IC12表示IC12或IC12内存储数据的任何组件。
[0120]在一些实例中,PMU18可将缓冲器22的状态信息存储在IC12内(例如,寄存器44内)。PMU18可从处理器14接收缓冲器22的此状态信息。缓冲器22的状态信息可包含缓冲器22的开始地址、缓冲器22的结束地址、缓冲器22内将存储所产生的数据的地址,以及缓冲器内将检索数据的地址中的一者或一者以上。在这些实例中,PMU18可基于缓冲器22的所存储的状态信息确定缓冲器内将存储第一线程的执行所产生的数据的位置。此外,在一些实例中,PMU18可在第一线程不指示缓冲器中将存储数据的位置的情况下确定缓冲器内将存储第一线程的执行所产生的数据的位置。
[0121]PMU18还可从执行第二线程的第二可编程计算单元接收检索第一线程的执行所产生的数据的至少一些的请求。PMU18可确定第一线程的执行所产生的数据是否可用于检索以供由执行第二线程的第二可编程计算单元消耗。在一些实例中,PMU18可与从第一可编程计算单元接收存储第一线程的执行所产生的数据的请求同时、在此之前或之后接收来自第二可编程计算单元的请求。
[0122]当第二线程请求的数据不可用于检索以供由执行第二线程的第二可编程计算单元消耗时,PMU18可向第二可编程计算单元指示执行第三线程。PMU18还可向第二可编程计算单元指示何时第二线程请求的数据可用于检索以供由执行第二线程的第二可编程计算单元消耗。当第二线程请求的数据可用于检索以供由执行第二线程的第二可编程计算单元消耗时,PMU18可进一步向第二可编程计算单元指示执行第二线程以消耗第二线程请求的数据。
[0123]在一些情况下,第一线程可为内核的产生者线程,且第二线程可为同一内核的消耗者线程。在一些情况下,第一线程可为产生者内核的线程,且第二线程可为消耗者内核的线程。
[0124]图5是进一步详细说明图1的装置的框图。举例来说,图5进一步说明装置10。装置10的实例包含(但不限于)无线装置、移动电话、个人数字助理(PDA)、包含视频显示器的视频游戏控制台、移动视频会议单元、膝上型计算机、桌上型计算机、电视机机顶盒、平板计算装置、电子书阅读器等。装置10可包含处理器14、GPU16、全局存储器20、显示器68、用户接口 70和收发器模块72。在所说明的实例中,PMU18形成在GPU16内。在一些实例中,PMU18可形成在容纳GPU16的同一 IC( 即,IC12)内。同样如所说明,GPU16驻留在IC12内。然而,处理器14也可驻留在IC12内。
[0125]装置10可包含图4为清晰起见未图示的额外模块或单元。举例来说,装置10可包含扬声器和麦克风(其均未在图4中展示),以在装置10为移动无线电话的实例中实行电话通信。此外,装置10中展示的各个模块和单元可能并非在装置10的每个实例中均为必要的。举例来说,在装置10为桌上型计算机的实例中,用户接口 70和显示器68可在装置10外部。作为另一实例,在显示器68为移动装置的触敏或存在敏感显示器的实例中用户接口 70可为显示器68的一部分。
[0126]图4的处理器14、6?讥6、?1^18、和全局存储器20可类似于图1的处理器14、GPU16、PMU18、和全局存储器20。用户接口 70的实例包含(但不限于)跟踪球、鼠标、键盘和其它类型的输入装置。用户接口 70还可为触摸屏且可作为显示器68的一部分并入。收发器模块72可包含用以允许装置10与另一装置或网络之间的无线或有线通信的电路。收发器模块72可包含调制器、解调器、放大器和用于有线或无线通信的其它此类电路。显示器68可包括液晶显示器(LCD)、阴极射线管(CRT)显示器、等离子体显示器、触敏显示器、存在敏感显示器,或另一类型的显示装置。
[0127] 在一个或一个以上实例中,所描述的功能可实施在硬件、软件、固件或其任何组合中。如果实施在软件中,那么所述功能可作为一个或一个以上指令或代码存储在计算机可读媒体上或经由计算机可读媒体发射并由基于硬件的处理单元执行。计算机可读媒体可包含计算机可读存储媒体(其对应于例如数据存储媒体等有形媒体)或通信媒体,通信媒体包含促进例如根据通信协议将计算机程序从一处传送到另一处的任何媒体。以此方式,计算机可读媒体通常可对应于(I)非暂时性的有形计算机可读存储媒体,或(2)例如信号或载波等通信媒体。数据存储媒体可为可由一个或一个以上计算机或一个或一个以上处理器存取以检索指令、代码和/或数据结构供本发明描述的技术实施的任何可用媒体。计算机程序产品可包含计算机可读媒体。
[0128]借助实例而非限制,此类计算机可读存储媒体可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置,或其它磁性存储装置、快闪存储器,或可用于存储指令或数据结构的形式的所要程序代码且可由计算机存取的任何其它媒体。并且,任何连接适当称为计算机可读媒体。举例来说,如果使用同轴电缆、光纤电缆、双绞线、数字订户线(DSL)或例如红外线、无线电和微波等无线技术从网站、服务器或其它远程源发射软件,那么同轴电缆、光纤电缆、双绞线、DSL或例如红外线、无线电和微波等无线技术包含于媒体的定义中。然而,应理解,计算机可读存储媒体和数据存储媒体不包含连接、载波、信号或其它瞬时媒体,而是针对非瞬时有形存储媒体。如本文中所使用,磁盘和光盘包含紧密光盘(CD)、激光光盘、光学光盘、数字多功能光盘(DVD)、软磁盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘使用激光以光学方式再现数据。上文的组合也应包含在计算机可读媒体的范围内。
[0129]可由例如一个或一个以上数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路等一个或一个以上处理器来执行所述指令。因此,如本文中所使用的术语“处理器”可指上述结构或适合于实施本文中所描述的技术的任一其它结构中的任一者。另外,在一些方面中,本文描述的功能性可提供在经配置用于编码和解码的专门硬件和/或软件模块内,或并入在组合式编解码器中。并且,可将所述技术完全实施于一个或一个以上电路或逻辑元件中。
[0130]本发明的技术可实施在广泛多种装置或设备中,包含无线手持机、集成电路(IC)或IC组(例如,芯片组)。本发明中描述各种组件、模块或单元以强调经配置以执行所揭示的技术的装置的功能方面,且不一定需要由不同硬件单元实现。而是,如上文描述,各个单元可组合在编解码器硬件单元中或由互操作硬件单元的集合(包含如上文描述的一个或一个以上处理器)结合适宜的软件和/或固件提供。
[0131]已描述了各种实例。这些和其它实例在所附权利要求书的范围内。
【权利要求】
1.一种用于以管线方式执行数据处理操作的方法,所述方法包括: 在图形处理单元GPU的着色器处理器的第一可编程计算单元上执行第一线程; 在所述GPU的所述着色器处理器的第二可编程计算单元上执行第二线程; 以包含所述GPU的集成电路IC内的管理单元从所述第一可编程计算单元接收将通过执行所述第一线程而产生的数据存储到所述IC外部的全局存储器中的缓冲器中的请求,其中通过执行所述第一线程而产生的所述数据将被所述第二可编程计算单元执行所述第二线程消耗,且其中所述缓冲器包括先进先出FIFO缓冲器和环形缓冲器中的一者; 以所述管理单元确定通过执行所述第一线程而产生的所述数据将被存储在所述缓冲器内的位置;以及 用所述IC将通过执行所述第一线程而产生的所述数据存储在所述缓冲器内的所述所确定位置中。
2.根据权利要求1所述的方法,其进一步包括: 以所述管理单元存储所述IC内的所述缓冲器的状态信息,其中所述缓冲器的所述状态信息包含所述缓冲器的开始地址、所述缓冲器的结束地址、所述缓冲器内将存储所产生的数据的地址,以及所述缓冲器内将检索数据的地址中的一者或一者以上, 其中确定所述缓冲器内的所述位置包括基于所述缓冲器的所述所存储的状态信息确定通过执行所述第一线程而产生的所述数据将存储在所述缓冲器内的位置。
3.根据权利要求1所述的方法,其进一步包括: 以所述管理单元从执行所述第二线程的所述第二可编程计算单元接收检索通过执行所述第一线程而产生的所述数据的至少一些的请求;以及 以所述管理单元确定通过执行所述第一线程而产生的所述数据是否可用于检索以供由所述第二可编程计算单元执行所述第二线程消耗。
4.根据权利要求3所述的方法,其中从所述第二可编程计算单元接收所述请求包括与从所述第一可编程计算单元接收存储通过所述执行所述第一线程而产生的数据的所述请求同时、在此之前或之后从所述第二可编程计算单元接收所述请求。
5.根据权利要求3所述的方法,其进一步包括: 当所述第二线程请求的所述数据不可用于检索以供由所述第二可编程计算单元执行所述第二线程消耗时,以所述管理单元向所述第二可编程计算单元指示执行第三线程;以所述管理单元向所述第二可编程计算单元指示何时所述第二线程请求的所述数据可用于检索以供由所述第二可编程计算单元执行所述第二线程消耗;以及 当所述第二线程请求的所述数据可用于检索以供由所述第二可编程计算单元执行所述第二线程消耗时,以所述管理单元向所述第二可编程计算单元指示执行所述第二线程以消耗所述第二线程请求的所述数据。
6.根据权利要求3所述的方法,其进一步包括: 以所述管理单元从所述全局存储器检索除所述第二线程请求的所述数据外的数据;以及 以所述管理单元将除所述第二线程请求的所述数据外的所述数据存储在所述IC内的高速缓冲存储器中。
7.根据权利要求1所述的方法,其中执行所述第一线程包括执行内核的产生者线程,且其中执行所述第二线程包括执行所述内核的消耗者线程。
8.根据权利要求1所述的方法,其中执行所述第一线程包括执行产生者内核的所述第一线程,且其中执行所述第二线程包括执行消耗者内核的线程。
9.根据权利要求1所述的方法,其中所述GPU包含所述管理单元。
10.根据权利要求1所述的方法,其中确定所述缓冲器内的所述位置包括在所述第一线程不指示所述数据将存储在所述缓冲器中的所述位置的情况下确定通过执行所述第一线程而产生的所述数据将存储在所述缓冲器内的所述位置。
11.一种设备,其包括: 包含缓冲器的全局存储器,其中所述缓冲器包括先进先出FIFO缓冲器和环形缓冲器中的一者; 集成电路1C,其包括: 图形处理单元GPU,所述GPU包括: 经配置以执行第一线程的第一可编程计算单元;以及 经配置以执行第二线程的第二可编程计算单元;以及 管理单元,其经配置以: 从所述第一可编程计算单元接收将通过执行所述第一线程而产生的数据存储到所述全局存储器中的所述缓冲 器中的请求,其中通过执行第一线程而产生的所述数据将由所述第二可编程计算单元执行所述第二线程消耗;且 确定通过执行所述第一线程而产生的所述数据将存储在所述缓冲器内的位置, 其中所述IC经配置以将通过执行所述第一线程而产生的所述数据存储在所述缓冲器内的所述所确定位置中。
12.根据权利要求11所述的设备, 其中所述管理单元经配置以存储所述IC内的所述缓冲器的状态信息, 其中所述缓冲器的所述状态信息包含所述缓冲器的开始地址、所述缓冲器的结束地址、所述缓冲器内将存储所产生的数据的地址,以及所述缓冲器内将检索数据的地址中的一者或一者以上,且 其中所述管理单元经配置以基于所述缓冲器的所述所存储的状态信息确定通过执行所述第一线程而产生的所述数据将存储在所述缓冲器内的位置。
13.根据权利要求11所述的设备,其中所述管理单元经配置以: 从执行所述第二线程的所述第二可编程计算单元接收检索通过执行所述第一线程而产生的所述数据的至少一些的请求;且 确定通过执行所述第一线程而产生的所述数据是否可用于检索以供由所述第二可编程计算单元执行所述第二线程消耗。
14.根据权利要求13所述的设备,其中所述管理单元经配置以与从所述第一可编程计算单元接收存储通过执行所述第一线程而产生的数据的所述请求同时、在此之前或之后从所述第二可编程计算单元接收所述请求。
15.根据权利要求13所述的设备,其中所述管理单元经配置以: 当所述第二线程请求的所述数据不可用于检索以供由所述第二可编程计算单元执行所述第二线程消耗时,向所述第二可编程计算单元指示执行第三线程;向所述第二可编程计算单元指示何时所述第二线程请求的所述数据可用于检索以供由所述第二可编程计算单元执行所述第二线程消耗;且 当所述第二线程请求的所述数据可用于检索以供由所述第二可编程计算单元执行所述第二线程消耗时,向所述第二可编程计算单元指示执行所述第二线程以消耗所述第二线程请求的所述数据。
16.根据权利要求13所述的设备,其中所述管理单元经配置以: 从所述全局存储器检索除所述第二线程请求的所述数据外的数据;且 将除所述第二线程请求的所述数据外的所述数据存储在所述IC内的高速缓冲存储器中。
17.根据权利要求11所述的设备,其中所述第一线程包括内核的产生者线程,且所述第二线程包括所述内核的消耗者线程。
18.根据权利要求11所述的设备,其中所述第一线程包括产生者内核的线程,且所述第二线程包括消耗者内核的线程。
19.根据权利要求11所述的设备,其中所述GPU包含所述管理单元。
20.根据权利要求11所述的设备,其中所述管理单元经配置以在所述第一线程不指示所述数据将存储在所述缓冲器中的所述位置的情况下确定通过执行所述第一线程而产生的所述数据将存储在所 述缓冲器内的所述位置。
21.根据权利要求11所述的设备,其中所述设备包括视频装置、机顶盒、无线手持机、个人数字助理、台式计算机、膝上型计算机、游戏控制台、视频会议单元和平板计算装置中的一者。
22.—种设备,其包括: 包含缓冲器的全局存储器,其中所述缓冲器包括先进先出FIFO缓冲器和环形缓冲器中的一者;以及 集成电路1C,其包括: 图形处理单元GPU,其包括: 用于执行第一线程的装置;以及 用于执行第二线程的装置;以及 用于从所述用于执行所述第一线程的装置接收将通过执行所述第一线程而产生的数据存储到所述全局存储器中的所述缓冲器中的请求,其中通过执行所述第一线程而产生的所述数据将由所述用于执行所述第二线程的装置消耗; 用于确定由所述用于执行所述第一线程的装置产生的所述数据将存储在所述缓冲器内的位置;以及 用于将通过执行所述第一线程而产生的所述数据存储在所述缓冲器内的所述所确定位置中的装置。
23.—种上面存储有指令的计算机可读存储媒体,所述指令当被执行时致使一个或一个以上处理器: 在图形处理单元GPU的着色器处理器的第一可编程计算单元上执行第一线程; 在所述GPU的所述着色器处理器的第二可编程计算单元上执行第二线程; 用包含所述GPU的集成电路IC内的管理单元从所述第一可编程计算单元接收将通过执行所述第一线程而产生的数据存储到所述IC外部的全局存储器中的缓冲器中的请求,其中通过执行所述第一线程而产生的所述数据将由所述第二可编程计算单元执行所述第二线程消耗,且其中所述缓冲器包括先进先出FIFO缓冲器和环形缓冲器的一者; 以所述管理单元确定通过执行所述第一线程而产生的所述数据将存储在所述缓冲器内的位置;以及 用所述IC将通过执行所述第一线程而产生的所述数据存储在所述缓冲器内的所述所确定位置 中。
【文档编号】G06F9/50GK104081449SQ201380006620
【公开日】2014年10月1日 申请日期:2013年1月24日 优先权日:2012年1月27日
【发明者】阿列克谢·V·布尔多, 维尼特·戈尔 申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1