在SIMD处理单元中的任务执行的制作方法与工艺

文档序号:12201229阅读:238来源:国知局
在SIMD处理单元中的任务执行的制作方法与工艺
本发明总体上涉及SIMD处理单元,并且更特别地涉及在SIMD处理单元中的任务执行。

背景技术:
单指令多数据(SIMD)处理单元被布置为同时对多个数据项目执行相同操作。这允许SIMD处理单元并行处理数据项目,这可以比串行处理每个数据项目更高效。SIMD处理单元在将对大量数据项目执行相同指令(这在多媒体应用中是常见的)时特别有用。例如,图形处理单元(GPU)可以使用SIMD处理单元以便对计算机生成的图像的大量像素中的每个像素执行操作。相似地,用于处理(例如,由相机捕获的)图像数据的图像处理单元(该图像处理单元可以例如是相机处理流水线的部分)可以使用SIMD处理单元以便对图像的大量像素中的每个像素执行操作。任务可以由多个“工作项目”形成,其中可以执行任务的工作项目以由此对相应数据项目执行公共指令序列。也就是说,工作项目可以包括将对数据项目执行的指令序列,其中包括将对相应数据项目执行的相同指令序列的一组工作项目被一起分组成任务。每个任务可以包括上至预定最大数目的工作项目。可以在任务中包括的工作项目的最大数目可以在不同系统中变化,但是图1代表可以包括上至三十二个工作项目102的任务100。为了清楚,在图1中标注了工作项目102中的仅一些工作项目。图1也指示了工作项目可以被包括在的在任务内的三十二个不同项目定位(从定位0到定位31)中的一些项目定位。可以并行执行在任务内的不同工作项目,因为它们是将对相应数据项目实施的指令的相应实例。任务100未充满工作项目,并且因此被视为具有“部分空置(residency)”。也就是说,任务100包括少于三十二个工作项目,但是它具有用于三十二个工作项目的容量。在任务100中的在图1中有底纹的定位包括工作项目,而在任务100中的在图1中未被底纹化的定位不包括工作项目。因此,任务100在定位0到16包括用于在SIMD处理单元上执行的十七个工作项目而在定位17到31不包括工作项目。另外,在定位0到6、9、11、15和16的工作项目102是用于由SIMD处理单元执行的有效工作项目。然而,如以下更具体地说明的那样,一些工作项目可能无效,在该情况下,它们将未被SIMD处理单元执行。在定位7、8、10和12到14的工作项目102在图1中所示的示例中是无效工作项目并且被示出为交叉影线。SIMD处理单元可以包括多个处理通道,每个处理通道被配置为在多个处理周期中的每个处理周期中执行工作项目的指令。图2表示使用SIMD处理单元来处理任务,该SIMD处理单元包括在图2中被表示为200的十六个处理通道。处理通道和处理周期的组合包括工作项目的指令可以在其中被处理的处理“时隙”。在这一情况下,处理周期是时钟周期,并且图2示出了被标注为clk0、clk1、clk2和clk3的四个时钟周期。来自第一任务(任务100)的前十六个定位中的工作项目的指令被调度为在第一处理周期(clk0)中跨越十六个处理通道执行;并且来自任务100的接下来十六个定位中的工作项目的指令被调度为在第二处理周期(clk1)中跨越十六个处理通道执行。在接下来的时钟周期(clk2和clk3)中,处理通道被调度为执行来自下一任务的工作项目。在任务具有部分空置时,然后将浪费一些处理时隙,即,将未在那些处理时隙中执行工作项目。这从图2可见,因为任务100未在定位17到31包括工作项目,并且这样在第二时钟周期(clk1)中将执行来自仅一个工作项目(10216)的指令。因此,十五个处理通道在图2中所示的示例中在时钟周期clk1期间空闲。另外,如果无效工作项目被调度用于在处理时隙中执行则也浪费该处理时隙因为未处理无效工作项目因此在图2中所示的示例中,处理通道7、8、10、12、13和14在第一处理周期(clk0)期间空闲,因为工作项目1027、1028、10210、10212、10213和10214在任务100中是无效工作项目。在图2中所示的系统因此出于以上给出的原因而造成浪费的处理时隙。现代图形应用编程接口(API)(比如OpenGL和Microsoft的DirectX)定义跨越在2x2像素四方格内的像素而进行操作的指令。例如,经常有必要通过“梯度”操作来确定在不同像素之间的可变数量的改变速率。这些指令的存在防止在将工作项目打包成任务时去除(与无效工作项目对应的)“空”像素时隙。

技术实现要素:
提供这一发明内容以按照简化形式介绍以下在具体实施方式中进一步描述的概念选集。这一发明内容并非旨在于标识要求保护的主题内容的关键特征或者实质特征,它也未旨在于用来限制要求保护的主题内容的范围。提供了一种被配置为处理多个任务的单指令多数据(SIMD)处理单元,每个任务包括上至预定最大数目的工作项目,其中任务的工作项目被布置用于对相应数据项目执行公共指令序列,数据项目被布置成数据项目块,其中块中的一些块包括至少一个无效数据项目,以及其中涉及无效数据项目的工作项目是无效工作项目,该SIMD处理单元包括:被配置为在多个处理周期内执行特定任务的工作项目的指令的一组处理通道;以及控制模块,该控制模块被配置为基于工作项目的有效性将工作项目组装(assemble)成任务,从而使得跨越该一组处理通道在时间上对准特定任务的无效工作项目。提供了一种被配置为处理多个任务的单指令多数据(SIMD)处理单元,每个任务包括上至预定最大数目的工作项目,其中任务中的一些任务包括少于预定最大数目的工作项目,以及其中任务的工作项目被布置用于对相应数据项目执行公共指令序列,该SIMD处理单元包括:并行多组处理通道,每组被配置为在多个处理周期内执行相应任务的工作项目的指令;以及耦合到多组处理通道的逻辑,该逻辑被配置为如果没有被调度用于在特定处理周期中在特定一组处理通道中的任何处理通道中执行的工作项目则与其它组的处理通道独立地使特定一组处理通道跳过特定处理周期。提供了一种使用单指令多数据(SIMD)处理单元以处理多个任务的方法,每个任务包括上至预定最大数目的工作项目,其中任务的工作项目被布置用于对相应数据项目执行公共指令序列,数据项目被布置成数据项目块,其中块中的一些块包括至少一个无效数据项目,其中涉及无效数据项目的工作项目是无效工作项目,以及其中SIMD处理单元包括被配置为在多个处理周期内执行特定任务的工作项目的指令的一组处理通道,该方法包括:基于工作项目的有效性将工作项目组装成任务,从而使得跨越该一组处理通道在时间上对准特定任务的无效工作项目;以及使用该一组处理通道来执行特定任务的工作项目的指令。提供了一种使用单指令多数据(SIMD)处理单元以处理多个任务的方法,每个任务包括上至预定最大数目的工作项目,其中任务中的一些任务包括少于预定最大数目的工作项目,以及其中任务的工作项目被布置用于对相应数据项目执行公共指令序列,其中SIMD处理单元包括并行多组处理通道,该方法包括:在每组处理通道在多个处理周期内执行相应任务的工作项目的指令;以及如果没有被调度用于在特定处理周期中在特定一组处理通道中的任何处理通道中执行的工作项目,则与其它组的处理通道独立地使特定一组处理通道跳过特定处理周期。可以提供一种用于生成根据这里描述的示例中的任何示例的单指令多数据处理单元的计算机可读代码。另外,可以提供一种计算机可读存储介质,该计算机可读存储介质具有在其上编码的用于生成根据这里描述的示例中的任何示例的单指令多数据处理单元的计算机可读代码。可以如本领域技术人员将清楚的那样在适当时组合以上特征并且可以与这里描述的示例的方面中的任何方面组合以上特征。附图说明现在将参照附图具体描述示例,在附图中:图1表示可以包括上至32个工作项目的任务;图2表示使用现有技术的SIMD处理单元来处理任务;图3是SIMD处理单元的示意图;图4表示图像的原语重叠像素;图5是用于使用SIMD处理单元以处理任务的第一方法的流程图;图6表示在第一示例中通过SIMD处理单元的一组处理通道处理任务;图7表示在第一示例中对工作项目块重新排序;图8表示在第二示例中对工作项目块重新排序;图9表示在第二示例中通过SIMD处理单元的一组处理通道处理任务;以及图10是用于使用SIMD处理单元以处理任务的第二方法的流程图。附图图示了各种示例。本领域技术人员将认识到,附图中的所示单元边界(例如,框、多组框或者其它形状)表示边界的一个示例。可以在一些示例中,可以将一个单元设计为多个单元或者可以将多个单元设计为一个单元。在适当处贯穿各图使用公共标号以指示相似特征。具体实施方式现在将仅通过示例描述实施例。这里描述的示例提供了一种被布置为减少由于在任务内的无效工作项目和/或由于具有部分空置的任务的浪费的处理时隙数目的单指令多数据(SIMD)处理单元。这可以通过跨越被配置为执行来自任务的工作项目的一组处理通道对准无效工作项目而被实现。如果没有被调度用于在该一组处理通道中的任何处理通道中在特定处理周期中执行的有效工作项目,则可以跳过该特定处理周期,从而使得未浪费在该特定处理周期中的处理时隙。另外,在另一示例中,可以有多组处理通道,其中每组处理通道在多个处理周期内执行相应任务的工作项目。在这一情况下,如果没有被调度用于在特定处理周期中在特定一组处理通道中的任何处理通道中执行的工作项目,则无论是否有被调度用于在该特定一组周期中在不同组中执行的工作项目(即,来自不同任务的工作项目),该特定一组处理通道都可以与其它组的处理通道独立地跳过该特定处理周期。图3示出包括SIMD处理单元302和存储器304的示例系统。在这里具体描述的示例中,在GPU中实施SIMD处理单元302,该GPU处理图像数据以便渲染景物。例如,原语可以用来定义景物中的对象,由此原语由原语数据定义,该原语数据例如指定景物中的原语的位置和纹理。存储器304可以是系统存储器或者片上存储器。SIMD处理单元302包括处理模块306、控制模块308、执行模块310和存储库312。执行模块310包括预处理模块313、处理通道314的集合和耦合到处理通道314的逻辑316。存储库312耦合到存储逻辑318,该存储逻辑可以控制在存储库312中存储数据。SIMD处理单元302(特别地为处理模块306)被布置为从存储器304接收原语数据,其中原语数据包括信息,该信息定义将在图像中被渲染的原语的定位(例如,用于原语的顶点的位置数据)。处理模块306的输出被耦合到控制模块308的输入。控制模块308被配置为形成被布置用于对相应数据项目执行公共指令序列的工作项目的任务。控制模块308的输出被耦合到执行模块310的输入以用于从控制模块308向处理模块310输出任务。执行模块310也被布置为从存储器304接收数据项目以便对相应数据项目执行工作项目。预处理模块313被配置为在向处理通道314传递工作项目之前对工作项目应用一些预处理。处理模块310的处理通道314被配置为执行工作项目。执行模块310耦合到存储库312并且被配置为提供从对任务的执行而产生的已处理数据项目以用于在存储库312中存储。在这一示例中,数据项目是像素值。在其它示例中,数据项目可以是将由SIMD处理单元处理的其它类型的数据项目。例如,SIMD处理单元302可以被配置为对片段值或者顶点值执行指令,在该情况下,数据项目可以相应地是片段值或者顶点值。图4示出了被GPU用来渲染图像的渲染空间402。渲染空间402包括多个像素,这些像素中的一些像素在图4中被编号(0到35)。如在图4中所示,像素被布置成像素块。特别地,在这一示例中,像素被布置成像素四方格,从而使得每个块包括像素中的在2x2块中布置的四个像素。在图4中将像素四方格中的两个像素四方格表示为4041和4042。像素四方格的像素在如下意义上被SIMD处理单元302一起处理:如果在像素四方格内的像素中的一个或者多个像素将被处理,则在像素四方格内的所有像素被调度用于由SIMD处理单元302处理。图4也示出了将在渲染空间402中被渲染的两个原语406和408。如在图4中可见,原语406和408与在渲染空间402内的像素中的一些但是并非所有像素重叠。如果原语覆盖像素的采样点(该采样点可以被假设为在归于像素的区域的中心),则原语可以被视为与像素重叠。与原语406重叠的像素可以被SIMD处理单元302处理以例如向相关像素应用用于原语406的纹理化。可以认识到,对象406未如在图4中所示与像素中的一些像素(例如,像素0、2、5或者7)重叠,但是由于对象与来自像素四方格4041和4042的其它像素重叠,所以在像素四方格4041和4042中的所有像素值被发送到SIMD处理单元302以用于处理,即使对于像素值中的一些像素值可以没有待执行的处理。没有处理待执行但是被发送到SIMD处理单元302以用于处理的像素值(例如,像素0、2、5和7)可以在将对于那些像素值不执行指令(例如,应用原语406的纹理化)这样的意义上被视为“无效”。然而,注意,这些无效像素可能被丢弃,因为由标准API(比如OpenGL)定义的一些指令可能需要从多个像素(例如,从跨越在像素四方格内的四个像素)组合数据。例如,预处理模块313可以对在任务中的工作项目执行一些处理以例如在向处理通道314传递任务之前通过“梯度”操作来确定在像素四方格中的不同像素之间的可变数量的改变速率。在该情况下,在任务中包括的无效工作项目用来在模块313中执行预处理,从而使得任务可以在处理通道314中正确地执行用于有效工作项目的指令。换而言之,在任务中包括用于像素四方格的无效像素的无效工作项目,该像素四方格包括一个或者多个有效像素,从而使得可以在执行模块310中正确地处理像素四方格中的有效像素。然而,在这里描述的示例中,如果在像素四方格中完全没有有效像素,则在将由执行模块310执行的任务中不包括用于像素四方格中的像素中的任何像素的工作项目。注意,仅出于例示性目的而示出了在图4中所示的示例,并且原语406和408在图4中所示的像素之上的布置未对应于在图1、图2、图6、图7或者图8中所示的无效工作项目的布置。参照在图5中所示的流程图描述SIMD处理单元302在示例中的操作。如以上描述的那样,在处理模块306从存储器304接收原语数据。在这一示例中,处理模块306被配置为实施如本领域中已知的隐藏表面去除以便如果在像素定位的原语被景物中的其它原语隐藏则去除那些原语,并且这样不会对最终渲染的图像有贡献。除了认为处理模块306向控制模块308传递原语标识符之外,处理模块306的操作的细节超出本专利申请的范围,该原语标识符对于多个像素定位中的每个像素定位来标识待处理的可见原语。在步骤S502中,控制模块308将工作项目一起分组成将由执行模块310处理的任务,即,控制模块308将工作项目组装成任务。任务的工作项目被布置为对相应像素值执行公共指令流。例如,任务的工作项目可以涉及向在渲染空间402内的相应像素应用原语406的纹理。以下在不同示例中描述关于工作项目如何被组装成任务的更多细节。向执行模块310传递任务。执行模块310也接收数据项目(例如,像素值)以便对数据项目执行来自任务的工作项目。在图3中所示的示例中,在执行模块310从存储器304接收数据项目。注意,在其它示例中,数据项目可以从处理模块306向控制模块308并且然后向执行模块310传递,但是在图3中所示的示例中,为了效率,仅在需要数据项目时从存储器304取回它们,即,由执行模块310而不是由处理模块306或者控制模块308取回它们。在步骤S504中,在执行模块310执行任务的工作项目。如以上描述的那样,处理模块313可以对工作项目执行一些预处理以例如在向处理通道314传递任务的工作项目之前通过“梯度”操作来确定在像素四方格中的不同像素之间的可变数量的改变速率。在一些示例中,未在SIMD处理单元中实施预处理模块313和/或在向处理通道314传递工作项目之前未执行预处理。工作项目然后被处理通道314执行。图6示出了执行方案600,该执行方案定义任务的工作项目的指令在一个示例中被映射到处理通道314中的处理时隙的方式。在这一示例中,如在图6中所示,任务(例如,任务100)的三十二个可能的工作项目的相应指令被调度用于通过一组四个处理通道和在八个连续处理周期内执行。可以在执行模块310中有多于四个处理通道314,这些处理通道中的一些处理通道可以用来与处理任务100同时处理来自其它任务的工作项目。例如,如以上描述的那样,可以有十六个并行处理通道,这些处理通道可以被划分成四组,每组为四个处理通道,这些组被配置为在八个处理周期内处理来自相应任务的工作项目的指令。因此,如果所有任务充满工作项目(例如,如果他们各自包括三十二个工作项目),则可以在八个处理周期中处理来自四个任务中的所有工作项目的指令。这是在八个处理周期内与在图2中所示的示例中相同数目的任务,在该示例中,来自一个任务中的所有工作项目的指令可以在两个处理周期内通过所有处理通道执行。然而,图6示出了将(在图1中所示的)任务100映射到第一组四个处理通道的处理时隙。如以上描述的那样,任务100仅包括十七个工作项目,并且工作项目7、8、10、12、13和14无效。在这一情况下,如在图6中所示,三个处理周期(clk5、clk6和clk7)并不包括来自任务100的任何调度的工作项目。如果在特定处理周期中没有用于向任务100分配的一组处理通道的有效工作项目,则逻辑316使该组处理通道跳过特定处理周期。可以与不同组的处理通道独立地执行跳过处理周期。因此,在图6中所示的示例中,可以跳过被表示为602的处理周期“clk5”、“clk6”和“clk7”,因为没有来自任务100的被调度用于在这些处理周期中执行的工作项目。该跳过独立于其它组的处理周期,因此一些其它任务可以包括被调度为在处理周期“clk5”、“clk6”和“clk7”中在其它组的处理通道中执行的工作项目,但是这并未妨碍对于作为处理任务100的该组处理通道跳过这些处理周期。被调度为在下一处理周期中(在图6中未示出的clk8)被在图6中所示的该组处理通道执行的工作项目然后可以被前移以在处理周期“clk5”中被执行。因此,可以认识到,虽然任务100仅包括(在可能的三十二个工作项目之中的)十七个工作项目,但是由于任务100的部分空置而浪费了仅三个处理时隙。这与图2中所示的执行方案对照,该执行方案处理相同任务100,但是在该执行方案中,由于任务100的部分空置而浪费了十五个处理时隙。因此,清楚的是通过将处理通道314拆分成组并且使用组以处理特定任务的工作项目,由于任务的部分空置而浪费处理时隙更少。注意,这通过允许多组处理通道与其它组的处理通道独立地跳过处理周期来实现。也注意,这被实现而相对于在图2中所示的示例未改变处理通道总数或者在任务中的工作项目数目。在图6中所示的示例中,工作项目块(对应于像素四方格,即,数据项目块)被布置为在连续处理周期内在处理通道中执行。例如,第一处理通道在前四个处理周期内执行工作项目0到3,并且第二处理通道在前四个处理周期内执行工作项目4到7,等等。也就是说,以列优先的顺序布置工作项目块,其中列的高度等于块中的工作项目数目(例如,用于像素四方格的四个工作项目)。在其它示例中,列的高度可以不同,例如,列可以包括八个工作项目,从而使得第一处理通道在前八个处理周期内执行工作项目0到7。在极端示例中,列的高度可以等于任务中的工作项目数目(例如,32),从而使得该组处理通道仅为一个通道宽,并且任务的工作项目由单个处理通道依次执行。这可以帮助允许跳过更多处理周期,但是将失去与以SIMD方式对多个数据项目执行相同指令关联的优点,因此,处理单元可能更复杂和/或效率更低。如以下更具体描述的那样,以列优先的顺序布置工作项目块允许实施对在工作项目块内的工作项目的一些重新排序以跨越处理通道对准无效工作项目。有任务可能未包括最大数目的工作项目(例如,在这里描述的示例中的三十二个工作项目)的许多原因。例如,可能例如由于在处理模块306处理原语数据时的延迟而在处理流水线中有延迟,从而使得没有准备好执行的足够工作项目以用于在任务到期应向执行模块310发送时填充任务。在这一情况下,可以认为更好的是无进一步延迟地向执行模块310发送未完全充满的任务而不是延迟任务以便等待足够工作项目准备好执行以填充任务。如以上在其中数据项目是像素的示例中描述的那样,数据项目(例如,像素)可以被布置成数据项目块(例如,像素四方格)。在图6中所示的示例中,该组处理通道中的每个处理通道被配置为在多个连续处理周期内执行涉及相应数据项目块的工作项目的指令。也就是说,涉及第一像素四方格的第一工作项目块(工作项目0到3)的指令被调度在前四个处理周期中在第一处理通道中执行;涉及第二像素四方格的第二工作项目块(工作项目4到7)的指令被调度在前四个处理周期中在第二处理通道中执行;涉及第三像素四方格的第三工作项目块(工作项目8到11)的指令被调度在前四个处理周期中在第三处理通道中执行;以及涉及第四像素四方格的第四工作项目块(工作项目12到15)的指令被调度在前四个处理周期中在第四处理通道中执行。在图6中可见第一工作项目块(工作项目0到3)都有效;第二工作项目块(工作项目4到7)包括三个有效工作项目和一个无效工作项目;第三工作项目块(工作项目8到11)包括两个有效工作项目和两个无效工作项目;以及第四工作项目块(工作项目12到15)包括一个有效工作项目和三个无效工作项目。如果被调度用于在处理周期中通过该组处理通道执行的所有工作项目是无效工作项目,则逻辑316可以使该组处理通道跳过执行无效工作项目。这以与跳过没有工作项目已经被调度的处理周期相同的方式被完成。在图6中所示的示例中,没有仅无效工作项目被调度的处理周期,并且这样不能跳过前五个处理周期(clk0到clk4)。然而,由于在该组中仅有四个处理通道,所以与在图2中所示的系统比较更可能的是跨越该组处理通道在处理周期中的所有工作项目无效,在该系统中,十六个工作项目将需要无效以便由这一方法跳过处理周期。另外,跨越该组处理通道在特定处理周期中被调度的所有工作项目是无效工作项目的可能性可以通过控制模块308在步骤S502中将工作项目组装成任务的方式被增加。特别地,控制模块308基于工作项目的有效性将工作项目组装成任务,从而使得跨越一组处理通道在时间上对准特定任务的无效工作项目。对这一点的一个约束是控制模块308将工作项目组装成任务,从而使得涉及数据项目块的工作项目块的工作项目被一起分组成相同任务。也就是说,未分离(例如,涉及像素四方格的)工作项目块,从而使得在不同任务中包括它们。将工作项目“组装”成任务可以包括:(i)将工作项目分组成特定任务和/或(ii)在特定任务内布置工作项目。增加可以被跳过的处理周期数目增加执行任务的效率,因为浪费更少处理时隙。注意,许多工作项目块(例如,多于可以向单个任务中相配的工作项目块)可以准备好执行,并且控制模块308可以确定工作项目如何被一起分组成任务。控制模块308可以基于工作项目的有效性将工作项目组装成任务的一种方式是基于相应工作项目块中的无效工作项目的数目将工作项目块一起分组成任务。例如,完全有效工作项目块(即,仅包括有效工作项目的块)可以被一起打包成特定任务,从而使得这些任务不包括任何无效工作项目。对照而言,包括至少一个无效工作项目的工作项目块可以被一起打包成其它任务。这可以帮助增加这些其它任务具有被调度用于在特定处理周期中跨越整组处理通道执行的无效工作项目、从而使得可以跳过特定处理周期的可能性。在图6中所示的示例中,第一块中的所有工作项目(工作项目0到3)有效,并且这样无论其它工作项目块中的被调度用于在前四个处理周期中执行的工作项目的有效性如何都不能跳过那些处理周期。通过将完全有效工作项目块分离成不同任务变成部分有效工作项目块,增加用于部分有效工作项目块的任务具有被调度用于在特定处理周期中跨越整组处理通道执行的无效工作项目的可能性。可以进一步运用这一思想,从而使得包括三个有效工作项目的工作项目块被一起分组成特定任务;包括两个有效工作项目的工作项目块被一起分组成其它任务;以及包括一个有效工作项目的工作项目块被一起分组成进一步的任务。因此,在特定任务中包括的工作项目块中的每个工作项目块可以包括相同数目的有效工作项目。另外,控制模块308可以被配置为对在工作项目块内的工作项目重新排序以便对准来自任务内的不同工作项目块的无效工作项目。图7示出了如下示例,在该示例中,从第一配置702对工作项目块重新排序以给定第二配置704,在该第二配置中,跨越该组处理通道在时间上对准来自工作项目块的无效工作项目。在图7中所示的示例涉及其中任务包括工作项目块的情况,每个工作项目块包括一个无效工作项目。如在图7中所示,有将在四个处理周期中通过一组四个处理通道执行的北欧表示为7061、7062、7063和7064的四个工作项目块。工作项目0、6、9和15无效而其它工作项目有效。在对工作项目重新排序之前,根据配置702,不能跳过处理周期,因为它们都包括来自块706之一的至少一个有效工作项目。控制模块308例如通过旋转在块内的工作项目来对在块706中的一些块内的工作项目重新排序。例如,在块7061中的工作项目被旋转三次。每个旋转操作涉及到将工作项目下移一个定位,其中在底部的工作项目然后被放置在顶部。在旋转的块7081中示出了三个旋转操作的结果,从而使得无效工作项目在块7081的最低定位。注意,工作项目可以在相反方向上被旋转一个定位以实现相同结果。一般而言,如果n是在第一方向上的旋转操作数目而W是块中的工作项目数目,则与在第一方向上的n个旋转等效的在相反方向上的旋转操作数目m由m=W-n给定。控制模块308也对第二个块7062的工作项目执行一个旋转操作以达到重新排序的块7082。因此,无效工作项目6在块7082的最低定位。相似地,控制模块308也对第三个块7063的工作项目执行两个旋转操作以达到重新排序的块7083。因此,无效工作项目9在块7083的最低定位。第四个块7064无需被重新排序,因为无效工作项目15已经在块7064的最低定位。因此,块7084与块7064相同。可见,在重新排序的配置704中,块708的无效工作项目在时间上被对准。因此,在任务被调度用于在执行模块314执行时,逻辑316将确定可以被跳过处理周期clk3,因为在该处理周期中被调度用于在该组处理通道上执行的所有工作项目无效并且因此无需被处理。清楚的是,对工作项目块中的工作项目的重新排序允许跳过对无效工作项目的处理,由此减少浪费的处理时隙数目。在以上描述的示例中,在块708的最低定位对准所有无效工作项目。在其它示例中,可以在块708内的其它定位对准无效工作项目。对块706中的每个块的工作项目执行的旋转操作数目由控制模块308确定以便在时间上对准无效工作项目。控制模块308设置指示符(例如,每工作项目或者每工作项目块的少数位)以指示工作项目已经如何被组装成任务。可以在向执行模块310发送工作项目时与它们一起包括指示符,或者可以在存储器(该存储器可以是与存储器304不同的存储器并且将优选地是片上存储器,从而使得向存储器的写入和读取包括短暂延迟)中存储指示符以用于后续取回,从而使得可以在处理通道314的输出上根据在将工作项目被打包成任务时出现的对工作项目的任何重新排序来对已处理数据项目重新排序。在图7中所示的示例中,每个工作项目块被旋转在零个旋转操作与三个旋转操作之间的某个数目的旋转操作。因此,在一个示例中,可以对于每个工作项目块用两位设置指示符以指示已经向块706的工作项目应用的旋转操作数目。在另一示例中,工作项目块中的一个工作项目块(例如,任务中的第一工作项目块)无需指示符,并且在其它块内的工作项目可以被重新排序以匹配对工作项目块中的所述一个工作项目块中的无效工作项目的对准。这可以减少指示符需要的位数。用于工作项目块的指示符指示在工作项目块内的工作项目的顺序。图8示出了另一示例,在该示例中,从第一配置802对工作项目块重新排序以给定第二配置804,在该第二配置中,跨越该组处理通道在时间上对准来自工作项目块的无效工作项目。在图8中所示的示例涉及其中任务包括工作项目块的情况,每个工作项目块包括两个无效工作项目。如在图8中所示,有将在四个处理周期中通过一组四个处理通道被执行的被表示为8061、8062、8063和8064的四个工作项目块。工作项目0、2、5、7、9、10、14和15无效而其它工作项目有效。在对工作项目重新排序之前,根据配置802,不能跳过处理周期,因为它们都包括来自块806之一的至少一个有效工作项目。控制模块308例如通过有选择地交换块中的前两个工作项目并且旋转在块内的工作项目来对在块806中的一些块内的工作项目重新排序。例如,执行交换操作以交换块8061中的前两个工作项目,并且然后块8061中的工作项目被旋转一次。如以上描述的那样,旋转操作涉及到将工作项目下移一个定位,其中在底部的工作项目然后被放置在顶部。在旋转的块8081中示出了交换操作和旋转操作的结果,从而使得无效工作项目(工作项目0和2)在块8081的最低两个定位。如以上描述的那样,注意,可以在另一方向上执行旋转操作。控制模块308也对块8062中的前两个工作项目执行交换操作并且对第二个块8062的工作项目执行三个旋转操作以达到重新排序的块8082。因此,无效工作项目5和7在块8082的最低两个定位。控制模块308未对块8063中的工作项目执行交换操作、但是对第三个块8063的工作项目执行旋转操作以达到重新排序的块8083。因此,无效工作项目9和10在块8083的最低两个定位。第四个块8064无需被重新排序,因为无效工作项目14和15已经在块8064的最低两个定位。因此,块8084与块8064相同。可见,在重新排序的配置804中,块808的无效工作项目在时间上被对准。因此,在任务被调度用于在执行模块314执行时,逻辑316将确定可以跳过处理周期clk2和clk3,因为在那些处理周期中被调度用于在该组处理通道上执行的所有工作项目无效并且因此无需被处理。清楚的是,对工作项目块中的工作项目的重新排序允许跳过对无效工作项目的处理,由此减少浪费的处理时隙数目。在以上描述的示例中,在块808的最低两个定位对准所有无效工作项目。在其它示例中,可以在块808内的其它定位对准无效工作项目。块中的前两个工作项目的有选择交换和对块806中的每个块的工作项目执行的旋转操作数目由控制模块308确定以便在时间上对准无效工作项目。另外,在其它示例中,工作项目中的不同工作项目可以通过交换操作来被有选择地交换。然而,在特定示例中预定可以被交换的工作项目的定位,从而使得无需位以指示已经交换了哪些工作项目。用于指示已经如何为多个块808对工作项目重新排序的指示符中的每个指示符可以包括三位:两位用于定义在块808内的工作项目的旋转并且一位用于定义是否已经对在工作项目块内的预定定位的工作项目中的两个工作项目执行了交换操作。对于包括工作项目块(每个工作项目块包括三个无效工作项目)的任务,以与在图7中示出的和以上关于包括工作项目块(这些工作项目块包括一个无效工作项目)的任务而描述的方式对应的方式执行对块的重新排序。也就是说,未执行交换操作,但是可以执行一些旋转操作以在时间上对准来自在任务内的不同工作项目块的无效工作项目。在工作项目已经被处理通道314处理时,在步骤S506中,在存储库312中存储从处理通道314输出的数据项目。存储逻辑318使用指示符,这些指示符指示工作项目已经如何被组装成任务以便确定用于在存储库312中存储已处理数据项目的地址。也就是说,虽然工作项目可能已经被重新排序以用于由处理通道314执行,但是在结果被存储在存储库中时,确定存储地址,从而使得在存储库312中的正确地址存储已处理数据项目,例如,如同工作项目尚未被重新排序。在以上描述的示例中,工作项目可以具有两个级别的有效性之一:工作项目为有效或者无效。然而,在其它示例中,可以有工作项目可能具有的多于两个级别的有效性。例如,可以对像素执行纹理化操作,该纹理化操作可以涉及到使用来自邻近像素(例如,不包括对角邻居)的梯度。在这一情况下,如果将对像素四方格的特定像素执行纹理化操作,则特定像素可以被视为有效数据项目,大量指令将被处理通道314对该有效数据项目执行以实施纹理化操作;而在像素四方格中的排除对角邻居的邻近像素可以被视为部分无效数据项目,更少量指令将被处理通道314对这些部分无效数据项目执行以实施纹理化操作;而在像素四方格中的对角邻居可以被视为完全无效数据项目,没有或者很少量指令将被处理通道314对该完全无效数据项目执行以实施纹理化操作。可以有用的是对准具有相同级别的有效性的工作项目。以这一方式,在将对有效和部分无效数据项目执行指令、但是不会对无效数据项目执行指令时,与无效数据项目对应的无效工作项目然后被对准并且可以被跳过。另外,在已经执行了用于部分无效数据项目的所有指令、但是仍然将对有效数据项目执行指令时,部分无效工作项目然后被对准并且可以被跳过。如先前陈述的那样,一些指令利用来自2x2像素块内的其它像素的信息,例如,纹理化计算跨越像素的梯度以便以本领域中熟知的方式确定细节水平。这样,例如,由预处理模块313对在2x2像素块内的一些无效像素执行向这一类型的指令(例如,纹理化指令)中馈送结果的指令。由于一些指令无助于穿越2x2块指令,所以希望在两个类型的指令之间区分。为了这样做,建议在指令编码中包括位以指示是否需要对无效实例执行指令。参照图9和10描述了可以如何跨越多个处理通道执行来自任务的工作项目的另一示例。图9示出了执行方案900,该执行方案定义任务的工作项目在一个示例中被映射到处理通道314中的处理时隙的方式。在这一示例中,有十六个处理通道(这与在以上描述的示例中相同),并且处理通道被划分成各自包括四个处理通道的四个并行组9021、9022、9023和9024。与以上关于图6描述的示例相似,任务的三十二个可能的工作项目的指令被调度用于通过一组四个处理通道和在八个连续处理周期内执行。也就是说,每组处理通道被配置为在多个处理周期内执行相应任务的工作项目。图9示出了在这一示例中如何跨越组9021的处理通道调度任务的工作项目的指令,该任务仅包括十七个工作项目。在图9中所示的示例中,工作项目块中的工作项目数目(例如,在如以上描述的像素四方格的情况下为四个)等于每组处理通道中的处理通道数目(例如,四个)。以这一方式,对于每组,在处理周期中的每个处理周期中,该组处理通道被配置为执行与来自数据项目块的相应数据项目有关的工作项目的指令。换而言之,以行优先的顺序布置工作项目块。例如,如在图9中所示,跨越组9021的处理通道在第一处理周期(clk0)中执行任务的第一工作项目块的工作项目0到3的指令;跨越组9021的处理通道在第二处理周期(clk1)中执行任务的第二工作项目块的工作项目4到7的指令;跨越组9021的处理通道在第三处理周期(clk2)中执行任务的第三工作项目块的工作项目8到11的指令;跨越组9021的处理通道在第四处理周期(clk3)中执行任务的第四工作项目块的工作项目12到15的指令;以及在组9021的处理通道之一中在第五处理周期(clk4)中执行任务的第五工作项目块的工作项目16的指令。图10概括了如下方法的基本步骤,该方法使用SIMD处理单元302以使用在图9中所示的执行方案900来处理任务。在步骤S1002中,根据图9中所示的执行方案900在相应组的处理通道902执行任务的工作项目。在步骤S1004中,与以上关于在图6中所示的示例的描述相似,如果没有被调度用于在特定处理周期中在特定一组处理通道中的任何处理通道中执行的工作项目,则特定一组处理通道与其它组的处理通道独立地跳过特定处理周期。例如,参照图9,向该组处理通道9021指派的任务不包括在图9中被表示为904的将在处理周期clk5到clk7中执行的任何工作项目。因此,该组处理通道9021可以跳过这些处理周期904。可以在处理周期904内在组9021的处理通道中执行来自后续任务(图9中未示出)的其它工作项目。以这一方式,未浪费在处理周期904中的在第一组处理通道9021中的处理时隙。这与以上关于图6描述的相同。然而,在图9中所示的示例可以在一些情形中浪费比在图6中所示的示例更少的处理时隙。例如,如果向组9021指派的任务包括二十个工作项目,则根据执行方案900,工作项目将在前五个处理周期中在该组处理通道9021中占用所有处理时隙,但是以后处理周期904仍将为空并且这样可以被跳过。对照而言,在图6中所示的示例中,包括二十个工作项目的任务将工作项目调度为在八个处理周期clk0到clk7中的每个处理周期中被执行,并且这样将浪费十二个处理时隙。另外,在图9中所示的执行方案900可以特别地适合用于与发散流程控制一起使用。如以上描述的那样,SIMD处理单元302被配置为执行如下任务,这些任务包括将对相应数据项目执行的相同指令的多个实例。也就是说,在用于任务的特定处理周期中对多个数据项目执行相同指令。然而,一些指令可以使不同后续指令基于正被处理的具体数据项目而被执行。例如,IF-THEN-ELSE结构体可以造成第一指令(“指令A”)被调度用于对第一数据项目集合执行并且第二指令(“指令B”)被调度用于对第二数据项目集合执行。在这一情况下,可以对所有数据项目执行第一指令,但是使用第一掩码,从而使得仅对第一数据值集合(即,未对第二数据值集合)执行指令的结果用来更新存储库312中的值。然后可以对所有数据项目执行第二指令,但是使用第二掩码,从而使得仅对第二数据值集合(即未对第一数据值集合)执行指令的结果用来更新存储库312中的值。这意味着指令被执行两次,并且因此在两倍数目的处理周期内被调度。然而,如果为处理周期而调度的所有工作项目被掩码掉,则该处理周期可以被跳过。由于用于任务的该组处理通道仅包括四个处理通道,所以更可能的是在图2中所示的示例中用于任务的所有处理通道在特定处理周期中包括掩码掉的工作项目。由于可以与其它处理通道独立地为多组处理通道跳过处理周期,所以可以通过将全数目的处理通道划分成组来跳过更多处理时隙。也就是说,如这里描述的那样将全数目的处理通道划分成组在对发散流程控制跳过处理周期时提供更细微粒度。另外,在图9中所示的执行方案900可以甚至比在图6中所示的执行方案600更适合用于与发散流程控制一起使用。这是因为来自相同工作项目块的工作项目经常将以相似方式发散,并且根据执行方案900,每组处理通道902在每个处理周期中处理来自仅一个块的工作项目。因此,如果来自工作项目块的一个工作项目对于特定处理周期而被掩码掉,则很可能的是该块中的其它工作项目也对于特定处理周期而被掩码掉,从而使得可以对于适当该组处理通道跳过特定处理周期。如以上提到的那样,任务包括对对应的多个数据项目执行公共指令流的多个工作项目。取代连续地执行任务的所有指令并且然后移向下一任务,可以有指令被依次执行的多个任务。也就是说,可以有一组Ntask个任务(其中Ntask可以等于二十作为示例),用于这些任务的指令被依次执行,从而使得执行来自第一任务的指令,然后执行来自下一任务的指令,以此类推贯穿该组的Ntask个任务。然后,序列往回循环,从而使得执行来自第一任务的下一指令,然后执行来自下一任务的下一指令,以此类推。以这一方式,有在对来自特定任务的指令的执行之间的时间段。这可以是有用的,因为它允许在执行任务的下一指令之前的可以与对数据项目执行的指令关联的处理延时(例如,为了读取或者写入数据等)。在工作项目在重复任务之前被执行的该组任务中的任务数目Ntask可以在不同示例中不同以及可以在不同示例中被固定或者可变。例如,可以根据已经例如由于这里描述的方法而被跳过的处理周期数目来变化Ntask。跳过越多处理周期,就将在完成任务的先前指令之后越快执行任务的下一指令,并且因此对于处理延时允许越少时间。因此,如果已经在给定的时间段中跳过的处理周期数目增加,则可以例如以提供在执行来自特定任务的连续指令之间的近似恒定时间为目的增加数目Ntask,以由此允许用于任务的指令的特定处理延时。在以上描述的示例中,任务包括最多三十二个工作项目。更一般而言,在其它示例中,在任务中包括的工作项目的最大数目Nwork可以是任何数目,但是为了方便,Nwork将通常是二的幂。在以上描述的示例中,在执行模块310中有十六个处理通道314。更一般而言,在其它示例中,可以在执行模块中有任何数目的处理通道,但是为了方便,在执行模块中的处理通道数目Nproc将通常是二的幂。另外,在以上描述的示例中,在数据项目块中有四个数据项目。也就是说,在这里描述的主要示例中,数据项目块是像素四方格。更一般而言,在其它示例中,可以在每个数据项目块中有任何数目的数据项目,但是为了方便,在每个数据项目块中的数据项目数目Nitems将通常是二的幂。另外,为了方便,可以将Nitems选择为Nproc的因数(即,NprocmodNitems=0),从而使得可以在处理周期内跨越所有处理通道处理整数数目的工作项目块。另外,如以上描述的那样,数据项目在作为GPU的部分来处理图形数据的SIMD处理单元302的情况下是像素值。然而,在其它示例中,数据项目可以不是像素值而可以代之以是其它类型的数据对象,比如片段值或者顶点值,或者例如在处理单元302运行OpenGL程序以执行通用并行计算时为非图形数据项目。数据项目在对不同数据项目并行执行指令的多个实例这样的意义上适合用于由SIMD处理单元处理。在这里描述的实例中,处理周期是时钟周期。更一般而言,在其它示例中,每个处理周期可以包括一个或者多个时钟周期。一般而言,可以使用软件、固件、硬件(例如,固定逻辑电路装置)或者这些实现方式的任何组合在模块中实施以上描述的功能、方法、技术或者部件中的任何功能、方法、技术或者部件。术语“模块”、“功能”、“部件”、“单元”和“逻辑”这里用来一般地代表软件、固件、硬件或者其任何组合。在软件实现方式的情况下,模块、单元、功能、部件或者逻辑代表在处理器(例如,一个或者多个CPU)上被执行时执行指定的任务的程序代码。在一个示例中,描述的方法可以由被配置有以机器可读形式存储于机器可读介质上的软件的计算机执行。计算机可读介质的一个这样的配置是信号承载介质,并且因此被配置为比如经由网络向设备传输指令(例如,作为载波)。计算机可读介质也可以被配置为非瞬态计算机可读存储介质,并且因此不是信号承载介质。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器和可以使用磁、光和其它技术以存储指令或者其它数据的并且可以由机器访问的其它存储器设备。软件可以是以包括计算机程序代码的计算机程序这一形式(该计算机程序代码用于配置计算机以执行描述的方法的组成部分)或者以包括计算机程序代码装置的计算机程序这一形式(该计算机程序代码装置被适配为在程序在计算机上被运行时执行这里描述的方法中的任何方法的步骤,并且其中计算机程序可以被体现在计算机可读介质上)。程序代码可以被存储于一个或者多个计算机可读介质中。这里描述的技术的特征独立于平台,这意味着这些技术可以被实施在具有多种处理器的多种计算平台上。本领域技术人员也将认识到,功能、技术或者方法的全部或者部分可以由专用电路、专用集成电路、可编程逻辑阵列、现场可编程门阵列等实现。例如,模块、单元、功能、部件或者逻辑可以包括以电路装置这一形式的硬件。这样的电路装置可以包括在制造工艺中可用的晶体管和/或其它硬件元件。举例而言,这样的晶体管和/或其它元件可以用来形成实施和/或包含存储器的电路装置或者结构,比如寄存器、触发器或者锁存器、逻辑运算器(比如布尔运算、数学运算器、比如加法器、乘法器)或者移位器以及互连。可以作为定制电路或者标准单元库、宏或者在其它抽象化水平提供这样的元件。这样的元件可以在具体布置中被互连。模块、单元、功能、部件或者逻辑可以包括如下电路装置,该电路装置是可以被编程为执行一个或者多个功能的固定功能和电路装置;可以从固件或者软件更新或者控制机制提供这样的编程。在示例中,硬件逻辑具有实施固定功能操作、状态机或者过程的电路装置。也旨在于涵盖如下软件,该软件“描述”或者定义硬件的配置,该硬件实施以上描述的模块、功能、部件或者逻辑,比如如用于设计集成电路或者用于配置可编程芯片以实现希望的功能的HDL(硬件描述语言)软件。也就是说,可以提供计算机可读存储介质,该计算机可读存储介质具有在其上编码的计算机可读程序代码,该计算机可读程序代码用于生成被配置为执行这里描述的方法中的任何方法的处理器或者用于生成包括这里描述的任何装置的处理单元。术语‘处理器’和‘计算机’这里用来指代任何如下设备或者其部分,该设备或者其部分具有处理能力,从而使得它可以执行指令,或者指代能够实现功能或者方法的全部或者部分的专用电路,或者其任何组合。虽然已经用结构特征和/或方法动作特有的语言描述了主题内容,但是将理解,在所附权利要求中定义的主题内容未必限于以上描述的具体特征或者动作。实际上,以上描述的具体特征和动被公开为实施权利要求的示例形式。将理解,以上描述的益处和优点可以涉及一个示例或者可以涉及若干示例。如本领域技术人员将清楚的那样,可以扩展或者更改这里给定的任何范围或者值而不失寻求的效果。可以如适当的那样按照任何适当顺序或者同时执行这里描述的方法的步骤。以上描述的示例中的任何示例的方面可以与描述的其它示例中的任何示例的方面组合以形成更多示例而不失寻求的效果。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1