用于图形处理器的线程分派的制作方法

文档序号:11333674阅读:153来源:国知局
用于图形处理器的线程分派的制造方法与工艺



背景技术:

现代图形处理器包括核(core)阵列,称为对指令进行处理的执行单元(executionunit,eu)。指令集包括内核(kernel)。采用多线程的形式将内核分派到gpu。gpu使用eu来处理内核的线程(例如,执行与内核对应的指令)。通常gpu一次使用多个eu并行地处理线程。

许多内核(特别是对应于经编码的显示数据的内核)包含有在内核中的多个线程之间的依赖性(dependency)。换言之,内核中线程中的一些线程的执行在可启动它们自身的执行之前必须等待执行它们所依赖的那些线程被执行。因此,仅内核中全部数量线程的子集可由gpu并行地执行。

常规意义上而言,gpu通过首先分派那些没有任何依赖性的线程并最后分派那些有依赖性的线程来执行内核。这有时被称为波前分派(wavefrontdispatching)。然而,正如将理解的那样,具有大量空间线程依赖性的内核在根据波前分派方法被分派时将经常经理降低的并行性。鉴于以上内容,提供了本公开内容。

附图说明

图1展示了线程分派系统的实施例。

图2展示了可以在图1的系统中实现的图形处理器的实施例。

图3-4展示了用于分派线程的逻辑流程的示例。

图5示出了根据实施例的存储介质。

图6-7展示了根据实施例的图形内核的示例。

图8a-8d展示了描绘图6-7的图形内核之间的依赖关系的表。

图9a-9d展示了描绘图6-7的图形内核之间的依赖关系的表。

图10展示了描绘图6-7的图形内核的示例分派顺序的表。

图11展示了描绘图形内核的示例分派顺序的表。

图12展示了示出图形内核的超级块的表。

图13-14展示了用于分派线程的逻辑流程的示例。

图15-16展示出了示出图形内核的超级块的波内的线程的表。

图17示出了根据实施例的存储介质。

具体实施方式

各个实施例通常涉及用于分配图形内核的线程以供执行的技术。更具体地,本公开提供了分派图形内核的线程以增大依赖线程与关联线程(例如,执行所依赖的线程)之间的间隔。因此,本公开可以分派线程以降低由于在依赖线程使用关联线程的结果来启动执行之前等待关联线程结束执行而引起的计算损失(例如,并行性降低等)。

在一些实现方式中,可以通过分派以下进程来增大分派间隔:关联线程(例如,其他线程执行所依赖的那些线程)、随后是没有任何依赖性的线程、随后是依赖于先前分派的关联线程。因此,可以增大依赖线程与其关联线程之间的间隔,从而增大并行性。

现在参考附图,其中,贯穿附图相同的参考号用来表示相同的元件。在以下描述中,出于解释的目的,阐述了许多具体的细节以便提供对其彻底的理解。然而,可能显而易见的是,可以在没有这些具体细节的情况下实践新颖的实施例。在其他情形下,以框图的形式示出了众所周知的结构和设备,以便促进对其的描述。本发明将涵盖落在权利要求书的范围内的所有修改、等同物和替代方案。

图1是根据实施例的线程分派系统100的框图。一般情况下,系统100被配置成用于优化分派线程以供由图形处理器执行。特别地,系统100被配置成用于分派线程以增大关联线程与相应依赖线程的执行之间的间隔。线程分派系统100包括一个或多个处理器102和一个或多个图形处理器108,并且可以是单处理器桌面系统、多处理器工作站系统、或具有大量处理器102或处理器核107的服务器系统。在一个实施例中,线程分派系统100是用于移动设备、手持设备或嵌入式设备中的片上系统集成电路(soc)。

线程分派系统100的实施例可以包括或者被并入基于服务器的游戏平台、游戏控制台(包括游戏和媒体控制台)、移动游戏控制台、手持游戏控制台或在线游戏控制台。在一个实施例中,线程分派系统100是移动电话、智能电话、平板计算设备或移动因特网设备。线程分派系统100还可以包括、耦合或集成在可穿戴设备(如智能手表可穿戴设备、智能眼镜设备、增强现实设备、或虚拟现实设备)内。在一个实施例中,线程分派系统100是具有一个或多个处理器102以及由所述一个或多个图形处理器108生成的图形接口的电视或机顶盒设备。

所述一个或多个处理器102各自包括用于处理指令的一个或多个处理器核107,所述指令在被执行时执行系统和用户软件的操作。在一个实施例中,所述一个或多个处理器核107中的每一个被配置成用于处理特定指令集109。指令集109可以促进复杂指令集计算(cisc)、精简指令集计算(risc)、或经由超长指令字(vliw)的计算。多个处理器核107可以各自处理不同的指令集109,所述指令集可以包括用于促进对其他指令集进行仿真的指令。处理器核107还可以包括其他处理设备,如数字信号处理器(dsp)。

在一个实施例中,处理器102包括高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。在一个实施例中,在处理器102的各部件之间共享所述高速缓存存储器。在一个实施例中,处理器102还使用外部高速缓存(例如,三级(l3)高速缓存或末级高速缓存(llc))(未示出),可以使用已知的高速缓存一致性技术在处理器核107之间共享所述外部高速缓存。寄存器组106附加地包括在处理器102中,所述处理器可以包括用于存储不同类型数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器、和指令指针寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可以专用于处理器102的设计。

处理器102耦合至处理器总线110,所述处理器总线用于在处理器102与系统100内的其他部件之间传输数据信号。系统100使用示例性‘中枢’系统架构,包括存储器控制器中枢116和输入输出(i/o)控制器中枢130。存储器控制器中枢116促进存储器设备与系统100的其他部件之间的通信,而i/o控制器中枢(ich)130经由本地i/o总线提供与i/o设备的连接。

存储器设备120可以是动态随机存取存储器(dram)设备、静态随机存取存储器(sram)设备、闪存设备、或具有合适的性能用作处理存储器的某个其他存储器设备。存储器控制器中枢116还与可选的外部图形处理器112耦合,所述可选的外部图形处理器可以与处理器102中与所述一个或多个图形处理器108通信,从而执行图形和媒体操作。存储器120可以存储数据122和指令121,以供在处理器102执行过程时使用。指令121可以是在处理器102和/或外部图形处理器112上操作以实现用于执行各种功能的逻辑的指令序列。

ich130使得外围部件经由高速i/o总线连接至存储器120和处理器102。i/o外围部件包括音频控制器146、固件接口128、无线收发器126(例如,wi-fi、蓝牙)、数据存储设备124(例如,硬盘驱动器、闪存等)、以及用于将传统(例如,个人系统2(ps/2))设备耦合至所述系统的传统i/o控制器。一个或多个通用串行总线(usb)控制器142连接输入设备,诸如键盘和鼠标144组合。网络控制器134还可以耦合至ich130。在一个实施例中,高性能网络控制器(未示出)耦合至处理器总线110。

在各个实施例中,存储器120存储(例如,作为数据122)包括线程154-a的内核152中的一个或多个。重要的是要注意,内核152可以包括任何数量的线程。例如,在本图中将内核152描绘为包括线程154-1、154-2和154-3。然而,应当理解的是,在实践中,内核152可以包括比所描绘的更多的线程。在这个上下文中示例并不旨在是限制性的。

通常,系统100分派线程154-a以增大依赖线程与关联线程的执行之间的间隔。如本文所使用的,依赖线程是依赖于或消耗另一线程的结果的线程。其结果被依赖线程消耗的线程在本文中称为关联线程。依赖线程可能有多个关联线程。换言之,依赖线程可能会消耗多个线程的结果。例如,在一些常见的图形编码标准中,线程可能依赖于其他7个线程的结果。然而,应当理解,一些线程没有任何依赖性。更具体地说,它们不是依赖线程或关联线程。如本文所使用的,这种线程被称为是独立的。

例如,假设线程154-1依赖于线程154-2,而线程154-3是独立的。如此,线程154-1是依赖的,而线程154-2是其关联线程。系统100可以分派线程154-1、154-2和154-3以增大线程154-1与154-2之间的间隔。如此,在一些示例中,系统100可以分派线程154-2以供执行(例如,由图形处理器108和/或112)。随后,系统100可以分派线程154-3以供执行。随后,系统100可以分派线程154-1以供执行。因此,依赖线程(例如,154-1)与其关联线程(例如,154-2)的执行之间的间隔增大。

在一些示例中,处理器102可以确定线程154-a的分派顺序(例如,执行顺序)。更具体地,处理器可以执行用于确定所述线程要分派的顺序(“分派顺序”)的指令(例如,指令集109)。通过一些示例,图形处理器(例如,图形处理器108和/或112)可以确定分派顺序。

图2是图形处理器200的实施例的框图。在一些示例中,图形处理器200可以是图1所示的系统100的图形处理器108和/或图形处理器112。通常,图形处理器200可被配置成用于执行线程以便增大依赖线程与关联线程的执行之间的间隔。

在一个实施例中,所述图形处理器包括环形互连202、流水线前端204、媒体引擎237、以及图形核280a-n。所述环形互连202将所述图形处理器耦合至其他处理单元,包括其他图形处理器或者一个或多个通用处理器核。在一个实施例中,图形处理器是集成在多核处理系统内的多个处理器之一。

图形处理器经由所述环形互连202接收多批命令。传入命令由流水线前端204中的命令流送器203来解译。例如,环形互连202可以接收内核152和线程154-a。图形处理器包括用于经由所述(多个)图形核280a-n来执行3d几何处理和媒体处理的可扩展执行逻辑。针对3d几何处理命令,命令流送器203将所述命令供应至几何流水线236。针对至少一些媒体处理命令,命令流送器203将所述命令供应至视频前端234,所述视频前端与媒体引擎237耦合。媒体引擎237包括用于视频和图像后处理的视频质量引擎(vqe)230以及用于提供硬件加速的媒体数据编码和解码的多格式编码/解码(mfx)233引擎。几何流水线236和媒体引擎237各自生成执行线程,所述执行线程用于由至少一个图形核280a提供的线程执行资源。

图形处理器包括可扩展线程执行资源表征模块核280a-n(有时被称为核分片),各个可扩展线程执行资源表征模块核具有多个子核250a-n、260a-n(有时被称为核子分片)。图形处理器可以具有任意数量的图形核280a至280n。在一个实施例中,图形处理器包括图形核280a,所述图形核至少具有第一子核250a和第二子核260a。在另一实施例中,图形处理器是具有单个子核(例如,250a)的低功率处理器。在一个实施例中,图形处理器包括多图形核280a-n,每个图形核包括第一子核250a-n的集合以及第二子核260a-n的集合。所述第一子核250a-n的集合中的每个子核至少包括执行单元252a-n以及媒体/纹理采样器254a-n的第一集合。所述第二子核260a-n的集合中的每个子核至少包括执行单元262a-n以及采样器264a-n的第二集合。在一个实施例中,每个子核250a-n、260a-n共享共享资源的集合270a-n。在一个实施例中,所述共享资源包括共享高速缓存存储器和像素操作逻辑。其他共享资源也可以包括在图形处理器的各实施例中。

图3-4展示了逻辑流程的实施例,所述逻辑流程可以被实现以增大关联线程与依赖线程的执行之间的间隔。逻辑流程可以代表由本文描述的一个或多个实施例执行的部分或全部操作。在一些示例中,可以由系统100的部件执行逻辑流程。更具体地,逻辑流程可以展示在将线程154-a分派到图形处理器200中时由处理器102执行的操作。另外地或可替代地,逻辑流程可以展示在执行线程154-a以便增大依赖线程与关联线程之间的间隔时由图形处理器200执行的操作。

虽然在描述逻辑流程时引用了系统100和系统100的组件,但是逻辑流程可以使用除了所显示的组件之外的组件或替代配置中的组件来实现。示例并不局限于本上下文中。

更具体地回到图3,描绘了逻辑流程300。逻辑流程300可以开始于框310。在框310,“标识第一线程和第二线程,所述第一线程依赖于第二线程”,对来自多个线程的第一线程(例如,依赖线程)和第二线程(例如,关联线程)进行标识。例如,假定线程154-1依赖于线程154-2,可以标识线程154-1和154-2。在一些示例中,处理器102可以从线程154-a中标识线程154-1和154-2。在一些示例中,图形处理器200可以从线程154-a中标识线程154-1和154-2。

继续到框320,“确定多个线程的执行顺序以增大第一线程与第二线程的执行之间的间隔”,可以确定线程154-a的执行顺序或分派顺序以便增大线程154-2与154-1的执行之间的间隔。在一些示例中,处理器102可以确定分派顺序。通过一些示例,图形处理器200可以确定分派顺序。

更具体地回到图4,描绘了逻辑流程400。逻辑流程400可以开始于框410。在框410,“标识第一线程和第二线程,所述第一线程依赖于第二线程”,对来自多个线程的第一线程(例如,依赖线程)和第二线程(例如,关联线程)进行标识。例如,假定线程154-1依赖于线程154-2,可以标识线程154-1和154-2。在一些示例中,处理器102可以从线程154-a中标识线程154-1和154-2。在一些示例中,图形处理器200可以从线程154-a中标识线程154-1和154-2。

继续到框420,“标识第三线程,所述第一线程是独立的”,从所述多个线程中标识第三线程,所述第三线程是独立的。例如,假设线程154-3是独立的,则可以标识线程154-3。在一些示例中,处理器102可以从线程154-a中标识线程154-1和154-2。在一些示例中,图形处理器200可以从线程154-a中标识线程154-1和154-2。

继续到框430-450,可以以特定顺序分派线程以增大依赖线程与关联线程的执行之间的间隔。特别地,在框430,“分派所述第二线程”,分派所述第二线程以供在所述第一线程或所述第三线程之前进行执行。例如,使用如上所述的线程154-1、154-2和154-3,可以分派第二线程154-2以供在第一线程和第三线程154-1和154-3之前进行执行。在一些示例中,处理器102可以分派线程154-2。在一些示例中,图形处理器200可以分派线程154-2。

在框440,“分派所述第三线程”,分派所述第三个线程以供在所述第一线程之前进行执行。例如,使用如上所述的线程154-1、154-2和154-3,可以分派第二线程154-3以供在第一线程154-1之前进行执行。在一些示例中,处理器102可以分派线程154-3。在一些示例中,图形处理器200可以分派线程154-3。

在框450,“分派所述第一线程”,分派所述第一线程以供执行。例如,使用如上所述的线程154-1、154-2和154-3,可以分派第一线程154-1以供执行。因此,第一线程154-1(依赖线程)与第二线程154-2(关联线程)的执行之间的间隔增大。在一些示例中,处理器102可以分派线程154-1。在一些示例中,图形处理器200可以分派线程154-1。

图5展示了存储介质500的实施例。存储介质500可以包括制造物品。在某些示例中,存储介质500可以包括任何非瞬态计算机可读介质或机器可读介质,如光学、磁性或半导体存储装置。存储介质500可以存储各种类型的计算机可执行指令(如,用于实现逻辑流300和/或400的指令)。计算机可读存储介质或机器可读存储介质的示例可以包括能够存储电子数据的任何有形介质,包括易失性存储器或非易失性存储器、可移除或非可移除存储器、可擦除或非可擦除存储器、可写入或可重写存储器等。计算机可执行指令的示例可以包括任何适当类型的代码,如源代码、编译代码、翻译码、可执行代码、静态代码、动态代码、面向对象代码、可视代码等。示例并不局限于本上下文中。

在各种示例中,可以实现系统100和逻辑流程300和400以从便图形内核(例如,内核152)分派线程从而增大依赖线程与其关联线程的执行之间的间隔。通常,可以基于各种图形编码标准中的任一种对内核进行编码。例如,可以使用以下任何图形编码标准对内核152进行编码:wmv、mpeg-4、h.264/mpeg-4、vc1、vp8、vp9以及hevc。

作为具体示例,本公开可以应用于从使用vp9标准进行编码的内核中分派线程,特别是使用vp9deblockgpu方法来分派线程。通常,图6-8展示了vp9编码的图形内核的线程以及可以基于本公开生成的相应的分派顺序。具体地,图6是展示了vp9内核的超级块(例如,64×64像素)的表;图7是展示了超级块中的线程的依赖关系的表;图8a-8d和9a-9d是展示了各种线程的依赖关系的表;图10是展示了根据本公开的实施例分派的超级块的线程的分派顺序的表;图11是展示了根据现有技术分派的超级块的线程的分派顺序的表。

更具体地转至图6,示出了表600。应当理解的是,图形内核的线程(例如,图形内核152的线程154-a)被分成多个超级块(例如,参见图9)。例如,图形内核可以被分割成覆盖64×64像素区域的128个线程的超级块。特别是,表600显示来自超级块610的线程654-1至654-128。重要的是要注意,为了清楚起见,并不是所有的线程都用图6中的数字标识符来调用。然而,可以看出,通过将来自8×8像素空间的64个竖直边缘线程和来自8×8像素空间的64个水平边缘线程交织到超级块610的线程空间中,形成了128个线程654-1至654-128。应当理解的是,线程如所描绘地那样被映射为具有足够的并行软件线程用于进行处理。

更具体地转至图7,示出了表700。应当理解的是,vp9编码的图形内核中的依赖线程可以具有多达7个关联线程。表700描绘了基于vp9标准的特定线程的依赖性。特别地,表700示出了依赖线程756和关联线程758-1至758-7。可以看出,对于具有坐标(0,0)的依赖线程756,关联线程的相对于依赖线程756的坐标可以是:具有坐标(-1,1)的关联线程758-1;具有坐标(-2,0)的关联线程758-2;具有坐标(-3,0)的关联线程758-1;具有坐标(-4,-1)的关联线程758-1;具有坐标(-5,-1)的关联线程7580;具有坐标(-6,-1)的关联线程7581;以及具有坐标(1,0)的关联线程758-7。

根据具体的依赖线程的位置,7个关联线程中只有一些关联线程需要被强制执行。换言之,可能不需要所述一些关联线程的输出来处理依赖线程。这个概念可以反映在依赖性排序中,其包括所述依赖性将不需要被强制执行的可能性的指示。特别地,可以测量每种依赖关系(例如,依赖线程756与每个关联线程758之间)的可能性。在一些示例中,这种测量是二进制的(例如,0=是(有可能),1=否(不可能),等等)。换言之,一些依赖关系可以被认为是“弱的”,而另一些被认为是“强的”。利用运行时间数据(即,变换大小、图块边界、图像边界等),“弱的”依赖性可能不需要被强制执行。

例如,图8a-8d分别展示了表801、802、803和804。这些表描绘了超级块610中的竖直线程654的位置特定依赖模式。图9a-9d分别展示了表901、902、903和904。这些表描绘了超级块610中的水平线程的位置特定依赖模式。重要的是要注意,这些表指的是各种依赖线程和相应的关联线程。特别地,基于图7所示的表700来引用关联线程。更具体地说,在这些表中使用关联线程的相似数字标识符,使得引用表700可以标识关联线程到依赖线程的相对位置。

此外,这些表突出显示了关联线程,在所述关联线程中,依赖性排序包括所述依赖性在运行时间期间需要被强制执行的可能性的指示。更具体地说,这些表表示所述依赖性可能不需要被强制执行的一些线程。在一些示例中,如果存在对关联线程的依赖性不是必需的并且可以被清除(例如,在运行时间不被强制执行)的机会的50%或更大的可能性,则存在用于首先增大其他关联线程与依赖线程的执行之间的间隔的更高优先级。因此,本公开提供了确定依赖性排序并基于所述依赖性排序而分派关联线程。特别地,分派关联线程以将可能需要被强制执行的关联线程与依赖线程的执行之间的间隔增大到比不可能需要被强制执行的关联线程之间的间隔更大的间隔。

更特别地转到图8a,示出了表801。表801描绘了依赖线程811和对应的关联线程858-a。重要的是要注意,表801描绘了坐标为[y>7,x=0]的竖直边缘线程的依赖模式。如所描绘的,依赖线程811具有三个关联线程858-a。特别地,线程858-1、885-2和858-3与依赖线程811相关联。

更特别地转到图8b,示出了表802。表802描绘了依赖线程812和对应的关联线程858-a。重要的是要注意,表802描绘了坐标为[y=7,x=0]的竖直边缘线程的依赖模式。如所描绘的,依赖线程812具有三个关联线程858-a。特别地,线程858-1、885-2和858-3与依赖线程812相关联。

重要的是要注意,对于表801和802中描绘的依赖关系模式,由关联线程858-2保证关联线程858-2的依赖性。

更特别地转到图8c,示出了表803。表803描绘了依赖线程813和对应的关联线程858-a。重要的是要注意,表803描绘了坐标为[y<7,x>0]的竖直边缘线程的依赖模式。如所描绘的,依赖线程813具有两个关联线程858-a。特别地,线程885-2和858-3与依赖线程813相关联。

更特别地转到图8d,示出了表804。表804描绘了依赖线程814和对应的关联线程858-a。重要的是要注意,表804描绘了坐标为[y=7,x>0]的竖直边缘线程的依赖模式。如所描绘的,依赖线程814具有两个关联线程858-a。特别地,线程885-2和858-3与依赖线程814相关联。

对于表801、802、803和804所描绘的竖直边缘线程,每个线程对关联线程858-3的依赖性是“弱的”。更具体地说,每个依赖线程对关联线程858-3的依赖性可以在运行时间期间可能被归类为不被强制执行。因此,可以确定依赖性排序(例如,低的、弱的、不可能的、0、1等等)以包括对关联线程858-3的依赖性可能不需要被强制执行的指示。此外,重要的是要注意,表801和802中描绘的关联线程跨越超级块,并且因此可以是特殊情况。

更特别地转到图9a,示出了表901。表901描绘了依赖线程911和对应的关联线程958-a。重要的是要注意,表901描绘了坐标为[y=7,x<0]的水平边缘线程的依赖模式。如所描绘的,依赖线程911具有五个关联线程958-a。特别地,线程958-3、958-4、958-5、958-6和958-7与依赖线程911相关联。

更特别地转到图9b,示出了表902。表902描绘了依赖线程912和对应的关联线程958-a。重要的是要注意,表902描绘了坐标为[y=0,x=7]的水平边缘线程的依赖模式。如所描绘的,依赖线程912具有四个关联线程958-a。特别地,线程958-3、958-4、958-5和958-6与依赖线程912相关联。

更特别地转到图9c,示出了表903。表903描绘了依赖线程913和对应的关联线程958-a。重要的是要注意,表903描绘了坐标为[y>0,x<0]的水平边缘线程的依赖模式。如所描绘的,依赖线程913具有五个关联线程958-a。特别地,线程958-3、958-4、958-5、958-6和958-7与依赖线程913相关联。

更特别地转到图9d,示出了表904。表904描绘了依赖线程914和对应的关联线程958-a。重要的是要注意,表904描绘了坐标为[y>7,x=7]的水平边缘线程的依赖模式。如所描绘的,依赖线程914具有三个关联线程958-a。特别地,线程958-3、958-4和958-5与依赖线程914相关联。

对于表901、902、903和904所描绘的水平边缘线程,每个线程对关联线程958-5的依赖性是“弱的”。更具体地说,每个依赖线程对关联线程958-5的依赖性可以在运行时间期间可能被归类为不被强制执行。因此,可以确定依赖性排序(例如,低的、弱的、不可能的、0、1等等)以包括对关联线程958-5的依赖性可能不需要被强制执行的指示。此外,重要的是要注意,表901和902中描绘的关联线程958-3跨越超级块,并且因此可以是特殊情况。

返回到图6所示的表600,可以以特定顺序分派线程654-a以增大关联线程(例如,参考图7、8a-8d、9a-9d)与相应的依赖线程的执行之间的间隔。特别地,本公开提供了分派线程以基于依赖性排序来增大执行间隔(例如,依赖性将被强制执行的可能性)。图10展示了表1000,显示了表600中描绘的每个线程654的分派顺序。特别地,表1000中描绘的分派顺序是基于本公开的实施例。为了比较的目的,图11展示了表1100,显示了基于常规的(例如,波前)分派方法的在表600中描绘的每个线程654的分派顺序。

参考图10和图11描述了增大关联线程与其对应的依赖线程的执行之间的间隔的示例。特别地,参考坐标h[1,1]处的水平边缘关联线程654。这个线程及其分派顺序如表1000和表1100所指示。这个特定的线程有五种依赖关系。换言之,这种特定的线程有五个关联线程,其中四个是“强的”,其可能在运行时被强制执行,并且一个是“弱的”,其在运行时不可能被强制执行(例如,参见图7和图9a-9d)。在运行时可能被强制执行的关联线程是竖直边缘线程v[1,1]、v[0,1]、v[0,2]和v[1,2],而在运行时不可能被强制执行的关联线程是h[0,2]。

本公开提供了将依赖线程h[1,1]分派到第74位。其中依赖性排序指示所述依赖性很有可能被强制执行(例如,>50%等)的其关联线程分别被分派到第10位、第9位、第17位和第18位。其中依赖性排序指示所述依赖性在运行时不可能被强制执行的其关联线程被分派到第66位。

相反,使用传统的分派技术,将依赖线程h[1,1]分派为第15位。其中依赖性排序指示所述依赖性很有可能被强制执行(例如,>50%等)的其关联线程分别被分派到第6位、第2位、第5位和第11位。其中依赖性排序指示所述依赖性在运行时不可能被强制执行的其关联线程被分派到第8位。

因此,本公开提供了:与传统技术相比,关联线程被明显地更快速地分派从而为关联线程的执行提供更多的时间来完成。结果,当实施本公开以分派线程时,可以增大存储压力和并行度。

实际比特流(例如,内核152)包括多个超级块(例如,超级块610)。例如,图12展示了示出多个超级块1201-a的表1200,其中每个超级块包括对应于64×64像素区域的128个线程。每个超级块1201-a通常以26度模式进行分派,如此图所展示的。在一些示例中,相同的波前中的所有超级块1201-a(例如,1201-3/1201-4、1201-5/1201-6、1201-7/1201-8/1201-9等)可以一起被分派。在一些示例中,每个超级块中的线程可以单独被分派,例如如图10所展示的。通过一些示例,对于超级块的每个波前(例如,1201-3和1201-4),可以分派来自所有超级块1201-a的竖直线程,随后是水平线程。这在图13-16中示出。通常,图13-14描绘了用于在波前的超级块内分派线程的逻辑流程,而图15-16描绘了示出多个连续波前的超级块内的线程的分派顺序的表。重要的是要注意,为了清楚起见,图15-16中描绘的超级块仅显示了32个线程。

更具体地转到图13,描绘了逻辑流程1300,逻辑流程1300可用于增大越过波前中的多个超级块的关联线程与对应的关联线程的执行之间的间隔。逻辑流程1300可以开始于框1310。在框1310,“接收来自波前中的超级块的线程”,可以接收超级块的特定波前的超级块(例如,超级块1201-a)的线程。在一些示例中,处理器102可以接收线程。

继续到框1320,“分派每个超级块中的所有竖直边缘线程”,可以分派每个超级块中的竖直线程的列。在一些示例中,处理器102和/或图形处理器200可以对于波前中的每个超级块逐列地分派竖直边缘线程。继续到框1330,“分派每个超级块中的所有水平边缘线程”,可以分派每个超级块中的水平线程的列。在一些示例中,处理器102和/或图形处理器200可以对于波前中的每个超级块逐列地分派水平边缘线程。

例如,图15展示了表1500,显示了超级块1501、1502和1503的三个波前。如所描绘的,第三波前包括两个超级块1511和1512。此外,如所述的,表1500示出了超级块内的线程的分派顺序。可以看出,在分派水平边缘线程之前分派来自超级块1511和1512两者的竖直边缘线程的列。特别地,来自第一超级块的竖直边缘线程被分派,随后是第二超级块的竖直边缘线程。

更具体地转到图14,描绘了逻辑流程1400,逻辑流程1400可用于增大越过波前中的多个超级块的关联线程与对应的关联线程的执行之间的间隔。逻辑流程1400可以开始于框1410。在框1410,“接收来自波前中的超级块的线程”,可以接收超级块的特定波前的超级块(例如,超级块1201-a)的线程。在一些示例中,处理器102可以接收线程。

继续到框1420,“分派每个超级块中的第一列竖直线程”,可以分派每个超级块中的第一列竖直线程。在一些示例中,处理器102和/或图形处理器200可以分派波前中的每个超级块中第一列竖直边缘线程。继续到框1425,“分派每个超级块中的第二列竖直边缘线程”,可以分派每个超级块中的第二列竖直线程。在一些示例中,处理器102和/或图形处理器200可以分派波前中的每个超级块中第二列竖直边缘线程。

继续到框1430,“是否每个超级块中的所有列的竖直边缘线程已被分派?”,判定是否已经分派了每个超级块中的所有列的竖直边缘线程。在一些示例中,处理器102和/或图形处理器200可以判定波前中每个超级块中的所有列的竖直边缘线程是否已被分派。

基于在框1430处的判定,逻辑流程1400可以继续到框1440或框1450。特别地,如果不是每个超级块中的所有列的竖直边缘线程都已被分派,则逻辑流程可以继续到框1440,“分派每个超级块中的下一列竖直边缘线程”,可以分派每个超级块中的下一列竖直线程。在一些示例中,处理器102和/或图形处理器200可以分派波前中的每个超级块中下一列竖直边缘线程。

可替代地,如果所有列的竖直边缘线程都已被分派,则逻辑流程1400可以继续到框1450,“分派每个超级块中的第一列水平边缘线程”,可以分派每个超级块中的第一列水平边缘线程。在一些示例中,处理器102和/或图形处理器200可以分派波前中的每个超级块中第一列水平边缘线程。继续到框1455,“分派每个超级块中的第二列水平边缘线程”,可以分派每个超级块中的第二列水平边缘线程。在一些示例中,处理器102和/或图形处理器200可以分派波前中的每个超级块中第二列水平边缘线程。

继续到框1460,“是否每个超级块中的所有列的水平边缘线程已被分派?”,判定是否已经分派了每个超级块中的所有列的水平边缘线程。在一些示例中,处理器102和/或图形处理器200可以判定波前中每个超级块中的所有列的水平边缘线程是否已被分派。

基于在框1460处的判定,逻辑流程1400可以继续到框1470或逻辑流程可以结束。特别地,如果不是每个超级块中的所有列的水平边缘线程都已被分派,则逻辑流程可以继续到框1470,“分派每个超级块中的下一列水平边缘线程”,可以分派每个超级块中的下一列水平线程。在一些示例中,处理器102和/或图形处理器200可以分派波前中的每个超级块中下一列水平边缘线程。

例如,图16展示了表1600,显示了超级块1601、1602和1603的三个波前。如所描绘的,第三波前包括两个超级块1611和1612。此外,如所述的,表1500示出了超级块内的线程的分派顺序。可以看出,来自超级块1611和1612两者的第一列竖直边缘线程被分派,随后是第二列竖直边缘线程等。在竖直边缘线程被分派之后,第一列水平边缘线程被分派,随后是第二列竖直边缘线程等。

图17展示了存储介质1700的实施例。存储介质1700可以包括制造物品。在某些示例中,存储介质1700可以包括任何非瞬态计算机可读介质或机器可读介质,如光学、磁性或半导体存储装置。存储介质1700可以存储各种类型的计算机可执行指令(如,用于实现逻辑流1300和/或1400的指令)。计算机可读或机器可读存储介质的示例可以包括能够存储电子数据的任何有形介质,包括易失性存储器或非易失性存储器、可移除存储器或不可移除存储器、可擦除存储器或不可擦除存储器、可写存储器或可重写存储器等。计算机可执行指令的示例可以包括任何适当类型的代码,如源代码、编译代码、翻译码、可执行代码、静态代码、动态代码、面向对象代码、可视代码等。示例并不局限于本上下文中。

在本文所描述的各操作或功能程度上,它们可以被描述或定义为硬件电路、软件代码、指令、配置和/或数据。所述内容可以在硬件逻辑中被具体化、或者具体化为直接可执行软件(“对象”或“可执行”形式)、源代码、被设计成用于在图形引擎上执行的高级着色器代码、或者针对具体处理器或图形核的指令集中的低级组件语言代码。本文中所描述的实施例的软件内容可以经由一种其上存储有内容的制品或经由一种操作通信接口经由通信接口发送数据的方法被提供。

一种非瞬态机器可读存储介质可以使机器执行所描述的功能或操作,并且包括存储具有机器(例如,计算设备、电子系统等)可存取形式的信息的任何机制,如可记录/不可记录介质(例如,只读存储器(rom)、随机存取存储器(ram)、磁盘存储介质、光存储介质、闪存设备等)。一种通信接口包括与硬连线、无线、光等介质中的任一者接口连接以彼此通信的任何机制,如,存储器总线接口、处理器总线接口、互联网连接、磁盘控制器等。通过提供配置参数或发送信号来对通信接口进行配置以使通信接口准备用于提供描述软件内容的数据信号。可以经由发送到通信接口的一个或多个命令或信号来访问通信接口。

所描述的各部件可以是用于执行所描述的操作或功能的装置。本文所描述的每个部件包括软件、硬件或它们的组合。部件可以被实现为软件模块、硬件模块、专用硬件(例如,专用硬件、专用集成电路(asic)、数字信号处理器(dsp)等)、嵌入式控制器、硬连线电路等。除了本文所描述的内容之外,在不脱离其范围的情况下,可以对公开的实施例和本发明的实现方式进行各种修改。

一些实施例可使用表述“一个实施例”和“实施例”及其派生词来描述。这些术语意味着与实施例相联系地描述的具体特征、结构或者特性被包含在至少一个实施例中。短语“在一个实施例中”在本说明书中各地方的出现不一定全都引用相同的实施例。进一步地,一些实施例可使用表述“耦合”和“连接”及其派生词来描述。这些术语并不必旨在作为彼此的同义词。例如,一些实施例可使用术语“连接”和/或“耦合”来描述,以表明两个或更多元件以直接物理的或电气的方式与彼此接触。然而,术语“耦合”还可以指两个或更多个元件未直接地彼此进行接触,但还是彼此进行合作或交互。此外,可以组合来自不同实施例中的方面和元件。

强调的是,提供本公开的摘要以允许读者快速确定本技术公开的本质。基于其将不被用于解释或者限制权利要求书的范围或者含义的理解提交所述摘要。此外,在前一个详细描述中,可以看到,出于将本公开连成一体的目的而将各种特征一起组合在单个实施例中。本公开的方法并不被解释为反映以下意图:所要求保护的实施例需要比每项权利要求中明确表述的特征更多的特征。而是被解释为:以下的权利要求书反映了本发明的主题在于比单个公开的实施例的全部特征少。因此,以下的权利要求书据此被并入详细的说明书中,其中,每项权利要求独立自主地作为单独的实施例。在所附权利要求书中,术语“包括(including)”和“其中(inwhich)”分别用作对应术语“包括(comprising)”和“其中(wherein,)”的易懂的英文等价词。此外,术语“第一”、“第二”、“第三”等仅用作标签,且不旨在对它们的对象施加数字要求。

以上所描述的内容包括所公开的架构的示例。当然,不可能描述部件和/或方法的每个可想到的组合,但是本领域普通技术人员可以认识到许多其他组合和置换是可能的。相应地,本新颖的架构旨在涵盖落入所附权利要求书的精神和范围内的全部这种变更、修改和变体。详细的公开现在变为提供与进一步的实施例有关的示例。以下提供的示例并不旨在是限制性的。

示例1:一种用于分派线程以供由图形处理单元(gpu)执行的装置,所述装置包括:图形处理器,所述图形处理器被配置成用于执行多个线程;以及线程分派器,所述线程分派器用于确定所述多个线程的执行顺序以增大第一线程与第二线程的执行之间的间隔,所述第一线程依赖于所述第二线程。

示例2:如示例1所述的装置,所述线程分派器用于:标识所述多个线程中的所述第一线程和所述第二线程;标识所述多个线程中的第三线程,所述第三线程独立于所述第一线程和所述第二线程;分派所述第二线程以供由所述图形处理器执行;分派所述第三线程以供由所述图形处理器执行;以及分派所述第一线程以供由所述图形处理器执行。

示例3:如示例1所述的装置,所述线程分派器用于:标识所述第一线程;标识线程子集,所述线程子集包括所述第二线程以及所述多个线程中的一个或多个其他线程,所述第一线程依赖于所述线程子集的线程;针对所述线程子集的每个线程,确定依赖性排序,所述依赖性排序包括对所述依赖性将不需要被强制执行的可能性的指示;以及基于所述依赖性排序来确定所述线程子集的线程的执行顺序。

示例4:如示例3所述的装置,所述线程子集包括第三线程,其中,所述第二线程和所述第三线程的依赖性排序指示所述第二线程的依赖性将不需要被强制执行的可能性高于所述第三线程的依赖性将不需要被强制执行的可能性;所述线程分派器用于:分派所述第三线程以供由所述图形处理器执行;分派所述第二线程以供由所述图形处理器执行;以及分派所述第一线程以供由所述图形处理器执行。

示例5:如示例1所述的装置,所述线程分派器用于:部分地基于线程是竖直边缘线程还是水平边缘线程来确定所述分派顺序。

示例6:如示例5所述的装置,所述线程分派器用于:分派所述多个线程中为竖直边缘线程的线程;以及分派所述多个线程中为水平边缘线程的线程。

示例7:如示例5所述的装置,所述线程分派器用于:分派所述多个线程中在第一列中为竖直边缘线程的线程;分派所述多个线程中在所述第一列中为水平边缘线程的线程;分派所述多个线程中在第二列中为竖直边缘线程的线程;以及分派所述多个线程中在所述第二列中为水平边缘线程的线程;

示例8:如示例1-7中任一项所述的装置,其中,所述多个线程是图形内核的线程。

示例9:如示例7所述的装置,所述图形内核基于从包括wmv、mpeg-4、h.264/mpeg-4、vc1、vp8、vp9和hevc的组中选择的编码标准被编码。

示例10:如示例1至7中任一项所述的装置,还包括显示器,所述显示器可操作地耦合至所述图形处理单元以显示由所述图形处理单元处理的数据。

示例11:如示例1至7中任一项所述的装置,还包括无线电,所述无线电可操作地耦合至所述图形处理单元以接收待由所述图形处理单元处理的数据。

示例12:一种计算实现的方法,包括:标识待由图形处理器执行的多个线程中的第一线程和第二线程,所述第一线程依赖于所述第二线程;以及确定所述多个线程的执行顺序以增大所述第一线程与所述第二线程的执行之间的间隔。

示例13:如示例12所述的计算实现的方法,包括:标识所述多个线程中的第三线程,所述第三线程独立于所述第一线程和第二线程;分派所述第二线程以供由所述图形处理器执行;分派所述第三线程以供由所述图形处理器执行;以及分派所述第一线程以供由所述图形处理器执行。

示例14:如示例12所述的计算实现的方法,包括:标识线程子集,所述线程子集包括所述第二线程以及所述多个线程中的一个或多个其他线程,所述第一线程依赖于所述线程子集的线程;针对所述线程子集的每个线程,确定依赖性排序,所述依赖性排序包括对所述依赖性将不需要被强制执行的可能性的指示;以及基于所述依赖性排序来确定所述线程子集的线程的执行顺序。

示例15:如示例14所述的计算实现的方法,所述线程子集包括第三线程,其中,所述第二线程和所述第三线程的依赖性排序指示所述第二线程的依赖性将不需要被强制执行的可能性高于所述第三线程的依赖性将不需要被强制执行的可能性;所述方法包括:分派所述第三线程以供由所述图形处理器执行;分派所述第二线程以供由所述图形处理器执行;以及分派所述第一线程以供由所述图形处理器执行。

示例16:如示例12所述的计算实现的方法,包括部分地基于线程是竖直边缘线程还是水平边缘线程来确定所述分派顺序。

示例17:如示例16所述的计算实现的方法,包括:分派所述多个线程中为竖直边缘线程的线程;以及分派所述多个线程中为水平边缘线程的线程。

示例18:如示例16所述的计算实现的方法,包括:分派所述多个线程中在第一列中为竖直边缘线程的线程;分派所述多个线程中在所述第一列中为水平边缘线程的线程;分派所述多个线程中在第二列中为竖直边缘线程的线程;以及分派所述多个线程中在所述第二列中为水平边缘线程的线程;

示例19:如示例12-18中任一项所述的计算实现的方法,其中,所述多个线程是图形内核的线程。

示例20:如示例19所述的计算实现的方法,所述图形内核基于从包括wmv、mpeg-4、h.264/mpeg-4、vc1、vp8、vp9和hevc的组中选择的编码标准被编码。

示例21:一种设备,包括用于执行如示例12-20中任一项所述的方法的装置。

示例22:至少一种机器可读存储介质,包括指令,所述指令在由计算设备执行时使所述计算设备:标识待由图形处理器执行的多个线程中的第一线程和第二线程,所述第一线程依赖于所述第二线程;以及确定所述多个线程的执行顺序以增大所述第一线程与所述第二线程的执行之间的间隔。

示例23:如示例22所述的至少一种机器可读存储介质,包括指令,所述指令在由所述计算设备执行时使所述计算设备:标识所述多个线程中的第三线程,所述第三线程独立于所述第一线程和所述第二线程;分派所述第二线程以供由所述图形处理器执行;分派所述第三线程以供由所述图形处理器执行;以及分派所述第一线程以供由所述图形处理器执行。

示例24:如示例22所述的至少一种机器可读存储介质,包括指令,所述指令在由所述计算设备执行时使所述计算设备:标识线程子集,所述线程子集包括所述第二线程以及所述多个线程中的一个或多个其他线程,所述第一线程依赖于所述线程子集的线程;针对所述线程子集的每个线程,确定依赖性排序,所述依赖性排序包括对所述依赖性将不需要被强制执行的可能性的指示;以及基于所述依赖性排序来确定所述线程子集的线程的执行顺序。

示例25:如示例24所述的至少一种机器可读存储介质,所述线程子集包括第三线程,其中,所述第二线程和所述第三线程的依赖性排序指示所述第二线程的依赖性将不需要被强制执行的可能性高于所述第三线程的依赖性将不需要被强制执行的可能性,所述至少一种机器可读存储介质包括指令,所述指令在由所述计算设备执行时使所述计算设备:分派所述第三线程以供由所述图形处理器执行;分派所述第二线程以供由所述图形处理器执行;以及分派所述第一线程以供由所述图形处理器执行。

示例26:如示例22所述的至少一种机器可读存储介质,包括指令,所述指令在由所述计算设备执行时使所述计算设备:部分地基于线程是竖直边缘线程还是水平边缘线程来确定分派的顺序。

示例27:如示例26所述的至少一种机器可读存储介质,包括指令,所述指令在由所述计算设备执行时使所述计算设备:分派所述多个线程中为竖直边缘线程的线程;以及分派所述多个线程中为水平边缘线程的线程。

示例28:如示例22所述的至少一种机器可读存储介质,包括指令,所述指令在由所述计算设备执行时使所述计算设备:分派所述多个线程中在第一列中为竖直边缘线程的线程;分派所述多个线程中在所述第一列中为水平边缘线程的线程;分派所述多个线程中在第二列中为竖直边缘线程的线程;以及分派所述多个线程中在所述第二列中为水平边缘线程的线程;

示例29:如示例22-28中任一项所述的至少一种机器可读存储介质,其中,所述多个线程是图形内核的线程。

示例30:如示例29所述的至少一种机器可读存储介质,所述图形内核基于从包括wmv、mpeg-4、h.264/mpeg-4、vc1、vp8、vp9和hevc的组中选择的编码标准被编码。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1