在SIMD架构中用于通道混洗的混洗器电路的制作方法

文档序号:17123809发布日期:2019-03-16 00:06阅读:391来源:国知局
在SIMD架构中用于通道混洗的混洗器电路的制作方法

本发明涉及单指令多数据(simd)结构中的数据处理。



背景技术:

例如图形处理单元(gpu)等各种类型的处理单元设计成具有单指令多数据(simd)结构。在simd结构中,存在多个处理通道,其中每一处理通道执行同一指令,但具有不同数据。



技术实现要素:

本发明描述在具有simd架构的处理单元的不同处理通道之间混洗数据的实例方法。为了执行混洗,本发明描述混洗器电路。所述混洗器电路从处理通道的子组(称为处理通道的源子组)接收数据,跨越源通道执行混洗操作(例如,将数据重排序),且将经重排序数据输出到处理通道。虽然所有处理通道被发送来自混洗器电路的数据,但仅处理通道的子组(称为处理通道的目的地子组)可将经重排序数据写入到对应寄存器用于存储,且其余处理通道可丢弃经重排序数据。混洗器电路可从处理通道的连续源子组接收数据,将接收的数据重排序,且处理通道的连续目的地子组可能够将经重排序数据写入到对应寄存器。

以此方式,混洗器电路可对数据的子组分段混洗数据。如本发明中所描述,利用分段混洗数据的混洗器电路允许数据混洗而不需要每一处理通道之间的物理连接,所述物理连接将需要额外电路空间且当混洗数据时增加功率消耗。

在一个实例中,本发明描述一种用于处理数据的装置,所述装置包括:多个处理通道,所述处理通道中的每一个包括用以处理所述数据的电路,其中所述处理通道是以单指令多数据(simd)结构配置;以及混洗器电路。所述混洗器电路经配置以从处理通道的源子组接收数据,响应于指示所述处理通道中的至少一些将数据输出到所述处理通道中的另一个的指令而将从处理通道的源子组接收的数据重排序,且将经重排序数据输出到处理通道,其中所述处理通道的目的地子组将经重排序数据存储于对应寄存器中,且其中除处理通道的目的地子组外的处理通道丢弃接收的经重排序数据。

在一个实例中,本发明描述一种处理数据的方法,所述方法包括:以混洗器电路从多个处理通道中的处理通道的源子组接收数据,所述处理通道中的每一个包括用以处理所述数据的电路,其中所述处理通道是以单指令多数据(simd)结构配置;以所述混洗器电路响应于指示所述处理通道中的至少一些将数据输出到所述处理通道中的另一个的指令而将从所述处理通道的所述源子组接收的所述数据重排序;以及以所述混洗器电路将所述经重排序数据输出到所述处理通道,其中所述处理通道的目的地子组将所述经重排序数据存储于对应寄存器中,且其中除所述处理通道的所述目的地子组外的所述处理通道丢弃所述接收的经重排序数据。

在一个实例中,本发明描述一种用于处理数据的装置,所述装置包括:用于从多个处理通道中的处理通道的源子组接收数据的装置,所述处理通道中的每一个包括用以处理所述数据的电路,其中所述处理通道是以单指令多数据(simd)结构配置;用于响应于指示所述处理通道中的至少一些将数据输出到所述处理通道中的另一个的指令而将从所述处理通道的所述源子组接收的所述数据重排序的装置;以及用于将所述经重排序数据输出到所述处理通道的装置,其中所述处理通道的目的地子组将所述经重排序数据存储于对应寄存器中,且其中除所述处理通道的所述目的地子组外的所述处理通道丢弃所述接收的经重排序数据。

在一个实例中,本发明描述一种包括指令的计算机可读存储媒体,所述指令当执行时致使用于处理数据的装置的一或多个电路进行以下操作:从多个处理通道中的处理通道的源子组接收数据,所述处理通道中的每一个包括用以处理所述数据的电路,其中所述处理通道是以单指令多数据(simd)结构配置;响应于指示所述处理通道中的至少一些将数据输出到所述处理通道中的另一个的指令而将从所述处理通道的所述源子组接收的所述数据重排序;以及将所述经重排序数据输出到所述处理通道,其中所述处理通道的目的地子组将所述经重排序数据存储于对应寄存器中,且其中除所述处理通道的所述目的地子组外的所述处理通道丢弃所述接收的经重排序数据。

附图和以下描述中阐述了一或多个实例的细节。其它特征、目标和优点将从所述描述、图式以及权利要求书显而易见。

附图说明

图1是经配置以执行本发明中所描述的一或多个实例技术的用于图像处理的装置的框图。

图2是更详细地说明图1的gpu的一个实例的框图。

图3是说明用于执行混洗操作的实例技术的概念图。

图4a-4r是说明混洗模式的各种实例的概念图。

图5是说明与混洗指令一起使用的操作的概念图。

图6是说明处理数据的实例方法的流程图。

具体实施方式

在例如图形处理单元(gpu)的单指令多数据(simd)架构中,存在多个处理通道。每一处理通道执行同一指令的操作,但是对不同数据执行。在一些情况下,处理通道可以输出将由另一处理通道消耗的数据,这称为混洗(shuffle)。混洗的一个实例是每一处理通道从其左相邻处理通道接收数据。允许任何一个处理通道向任何其它处理通道输出的一个方法是经由完整的全通道到全通道纵横制(例如,从一处理通道到所有其它处理通道的电连接),这在芯片面积和功率消耗方面是极昂贵的。并且,由于存在处理通道的增加,因此这种完整的全通道到全通道纵横制的成本以二次方增加。

本发明描述实施通道混洗而不需要完整的全通道到全通道纵横制的实例技术。具有simd结构的装置(例如,gpu)包含混洗器电路,其从比处理通道的总数目少的处理通道接收数据(例如,如果存在64个处理通道,那么混洗器电路每次从8个处理通道接收数据)。此混洗器电路从源处理通道的子组(少于处理通道的总数目)接收数据,对数据执行混洗(例如,在通道之间对数据重排序),且将经重排序的数据输出到所有处理通道。然而,仅处理通道的子组可将经重排序的数据写入到用于存储的对应寄存器,且处理通道的其余部分可丢弃接收的经重排序数据。混洗器电路针对能够将经重排序数据写入到相应对应寄存器的处理通道的连续源子组和处理通道的连续目的地子组重复这些步骤。

举例来说,处理通道中的每一个可将数据写入到对应寄存器和从对应寄存器接收数据。处理通道的目的地子组将经重排序数据存储在对应寄存器中,这意味着经重排序数据实际存储于对应寄存器中。除了处理通道的目的地子组外的处理通道丢弃接收的经重排序数据,这意味着处理通道可尝试且存储数据于其对应寄存器中;然而,对应寄存器可能不实际存储数据。

在本发明中,在对应寄存器中存储经重排序数据的处理通道意味着处理通道可在对应寄存器中成功地存储经重排序数据,或者处理通道经配置以在对应寄存器中存储经重排序数据。丢弃经重排序数据的处理通道意味着处理通道未成功在对应寄存器中存储经重排序数据,且将不对数据采取进一步动作,或处理通道经配置以不在对应寄存器中存储经重排序数据。

混洗器电路可利用多次迭代来完成混洗操作,因为在每一给定时间(即,每次迭代)仅对来自处理通道的子组的数据进行重排序。然而,因为每一处理通道不需要耦合到其它处理通道中的每一个,所以gpu的大小和功率消耗可减少。

虽然相对于gpu描述实例技术,但技术不受如此限制。技术可适用于各种类型的处理单元,且大体上适用于包含单指令多数据(simd)结构的处理单元。

图1是经配置以执行本发明中所描述的一或多个实例技术的用于图像处理的装置的框图。装置10的实例包含个人计算机、桌上型计算机、膝上型计算机、计算机工作站、视频游戏平台或控制台、无线通信装置(例如,移动电话、蜂窝式电话、卫星电话和/或移动电话手持机)、陆线电话、因特网电话、手持式装置(例如,便携式视频游戏装置或个人数字助理(pda))、平板计算机、个人音乐播放器、视频播放器、显示装置、摄像机装置、电视机、电视机顶盒、服务器、中间网络装置、主机计算机、或处理及/或显示图形数据的任何其它类型的装置。

如图1的实例中所图示,装置10包含中央处理单元(cpu)16、图形处理单元(gpu)12和gpu12的局部存储器20、用户接口22、提供对系统存储器30的存取的存储器控制器24,以及输出致使在显示器28上显示图形数据的信号的显示器接口26。gpu12图示为包含混洗器电路14。如此处更详细地描述,混洗器电路14可经配置以执行gpu12将执行的混洗指令的操作。虽然混洗器电路14图示为在gpu12内部,但在一些实例中,混洗器电路14可在gpu12外部。在本说明书中为了简单起见,将混洗器电路14被描述为在gpu12内部。

在一些实例中,混洗器电路14可在gpu12的核心与gpu12的负载/存储单元之间。gpu12的负载/存储单元连接到局部存储器20和系统总线32两者。这允许混洗器电路14可能再使用以用于其它用途以便在将数据存储到局部/全局存储器中之前或在从局部/全局存储器加载数据之后掺和数据。gpu12的核心与gpu12的负载/存储单元之间的混洗器电路14的位置仅提供作为一个实例且不应被视为具限制性。

为了便于理解,相对于gpu12描述实例技术。然而,实例技术不限于gpu12,且可适用于例如cpu16或存储器控制器24等其它组件。一般来说,本发明中描述的技术可适用于包含两个或更多个处理通道的处理单元。gpu12用于图示目的,因为gpu往往包含许多处理通道。然而,gpu不是包含两个或更多个处理通道的仅有类型的处理单元。

并且,虽然各种组件图示为单独的组件,但在一些实例中,所述组件可组合以形成芯片上系统(soc)。作为一实例,cpu16、gpu12和显示器接口26可形成于共同芯片上。在一些实例中,cpu16、gpu12和显示器接口26中的一或多个可在单独芯片中。

图1中说明的各种组件可形成于一或多个微处理器、专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp)或其它等效集成或离散逻辑电路中。局部存储器20的实例包含一或多个易失性或非易失性存储器或存储装置,例如(例如,随机存取存储器(ram)、静态ram(sram)、动态ram(dram)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、快闪存储器、磁性数据媒体或光学存储媒体)。

图1中所说明的各种单元使用总线32彼此通信。总线32可以是多种总线结构中的任一种,例如第三代总线(例如,超传输总线或无限频带总线)、第二代总线(例如,高级图形端口总线、外围组件互连(pci)高速总线,或高级可扩展接口(axi)总线)或者另一类型的总线或装置互连件。应注意,图1所示的不同组件之间总线和通信接口的特定配置仅为示范性的,且可使用计算装置的其它配置和/或具有相同或不同组件的其它图像处理系统来实施本发明的技术。

cpu16可包括控制装置10的操作的通用或专用处理器。用户可将输入提供到计算装置10以致使cpu16执行一或多个软件应用程序。在cpu16上执行的软件应用程序可包含(例如)操作系统、字处理器应用程序、电子邮件应用程序、电子数据表应用程序、媒体播放器应用程序、视频游戏应用程序、图形用户接口应用程序或另一程序。用户可经由一或多个输入装置(未图示)(例如,键盘、鼠标、麦克风、触摸垫或经由用户接口22耦合到计算装置10的另一输入装置)将输入提供到计算装置10。

存储器控制器24有助于进入和离开系统存储器30的数据传送。举例来说,存储器控制器24可接收存储器读取和写入命令,且关于存储器30来服务此类命令以便为计算装置10中的组件提供存储器服务。存储器控制器24通信耦合到系统存储器30。虽然在图1的实例计算装置10中将存储器控制器34说明为与cpu16和系统存储器30两者分开的处理模块,但在其它实例中,存储器控制器24的功能性中的一些或全部可实施于cpu16和系统存储器30中的一者或两者上。

系统存储器30可存储可由cpu16和gpu12存取的程序模块和/或指令和/或数据。举例来说,系统存储器30可存储用户应用程序、来自gpu12的所得图像等。系统存储器30可另外存储供计算装置10的其它组件使用和/或由所述其它组件产生的信息。举例来说,系统存储器30可充当用于装置10的装置存储器。系统存储器30可包含一或多个易失性或非易失性存储器或存储装置,例如随机存取存储器(ram)、静态ram(sram)、动态ram(dram)、只读存储器(rom)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、快闪存储器、磁性数据媒体或光学存储媒体。

在一些方面中,系统存储器30可包含致使cpu16、gpu12和显示器接口26执行归于本发明中的这些组件的功能的指令。因此,系统存储器30可为其上存储有指令的计算机可读存储媒体,所述指令当执行时致使一或多个处理器(例如,cpu16、gpu12和显示器接口26)执行各种功能。

在一些实例中,系统存储器30是非暂时性存储媒体。术语“非暂时性”指示存储媒体不以载波或传播信号体现。然而,术语“非暂时性”不应解释为意味着系统存储器30为不可移动的或其内容为静态的。作为一个实例,可从装置10移除系统存储器30,及将所述系统存储器移动到另一装置。作为另一实例,大体上类似于系统存储器30的存储器可插入到装置10中。在某些实例中,非暂时性存储媒体可存储可随时间改变的数据(例如,在ram中)。

cpu16和gpu12可将图像数据及类似物存储于在系统存储器30内分配的相应缓冲器中。显示器接口26可从系统存储器30检索数据且配置显示器28以显示由经再现图像数据表示的图像。在一些实例中,显示器接口26可包含数/模转换器(dac),其经配置以将从系统存储器30检索的数字值转换为可由显示器28消耗的模拟信号。在其它实例中,显示器接口26可形成显示器28的部分或可将数字值直接传递到显示器28用于处理。

显示器28可包含监视器、电视机、投影装置、液晶显示器(lcd)、等离子体显示器面板、发光二极管(led)阵列、阴极射线管(crt)显示器、电子纸、表面传导电子发射显示器(sed)、激光电视机显示器、纳米晶体显示器或另一类型的显示单元。显示器28可集成在计算装置10内。举例来说,显示器28可为移动电话手持机或平板计算机的屏幕。或者,显示器28可为经由有线或无线通信链路耦合到计算装置10的独立装置。举例来说,显示器28可为经由电缆或无线链路连接到个人计算机的计算机监视器或平板显示器。

在本发明中所描述的实例技术中,gpu12可为经配置以执行图形操作且在一些情况下还执行非图形操作的专用硬件电路。gpu12被设计成具有单指令多数据(simd)结构。在simd结构中,gpu12包含多个simd处理通道,其中每一simd处理通道执行同一程序的指令但是对不同数据执行。在特定simd处理通道上执行的特定指令被称作线程。每一simd处理通道可视为执行不同线程,因为用于给定线程的数据可能不同;然而,在处理通道上执行的线程是与在其它处理通道上执行的指令相同的指令。以此方式,simd结构允许gpu同时执行许多任务。

许多图形操作需要并行地执行同一过程(例如,再现像素)。因此,对于图形处理,cpu16将此类图形处理任务卸载到gpu12以由gpu12执行。在一些实例中,即使不用于图形处理,例如矩阵乘法等非图形操作也可得益于在gpu12上的执行。因此,在一些实例中,cpu16可将某些非图形操作卸载到gpu12,因为gpu12可较好地适合于执行此类操作。

作为图形处理的实例,对于顶点处理,gpu12可针对每一顶点执行相同任务,但每一顶点的顶点数据可能不同(例如,不同坐标、不同颜色值等)。simd结构允许gpu12通过在不同simd处理通道上执行顶点着色器的同一实例来并行处理许多顶点。在此实例中,每一simd处理通道可执行顶点着色器的线程,其中每一线程是针对所述顶点着色器的一个实例。

simd处理通道包含一或多个算术逻辑单元(alu),且simd处理通道将结果存储在一或多个通用寄存器(gpr)中。多个gpr被称作通用寄存器堆(gprf)。gprf包含用于存储来自一或多个simd处理通道的所得数据的专用寄存器。gpr可与gpu12的局部高速缓冲存储器或局部存储器20分离且相异。

并非经由存取全通道共享存储器来交换数据,让处理通道彼此直接共享和交换数据(称为通道混洗)可极大地加速需要交叉通道数据通信的一些并行算法,例如减少和扫描(是opencl的标准内建式功能)、广播、转置、双调排序、傅里叶变换等。作为一个实例,为了转置矩阵,处理通道的alu可将处理通道正操作的值传输到另一处理通道的alu。作为另一实例,为了确定存在特定颜色的多少像素,处理通道的alu可将指示每一处理通道正操作的像素颜色的信息输出到另一处理通道,且通过迭代过程,可有可能确定存在所述特定颜色的多少像素。可存在通道混洗为何有用的其它实例,且本发明中描述的技术不限于通道混洗的使用情况中的任一者。

实施通道混洗的一个方式是经由切换网络将每一处理通道选择性互连到每个其它处理通道。允许任何处理通道耦合到任何其它处理通道的此类互连称为完整的全通道到全通道纵横制。完整的全通道到全通道纵横制在芯片面积方面可能极昂贵,且需要高功率消耗。并且,芯片面积和功率消耗的增加针对处理通道的增加以二次方增加。

为了允许通道混洗(例如,大多数全类型的通道混洗)而不需要全通道到全通道纵横制,本发明描述混洗器电路14。在一些实例中,混洗器电路14是经配置以执行固定功能(例如,不可编程)的固定功能硬件电路。然而,实例技术不受限制。在一些实例中,混洗器电路14可由可编程电路形成,用以执行本发明中所描述的实例技术的软件/固件在所述可编程电路上执行。在此实例中,所述软件/固件可配置混洗器电路14以执行本发明中所描述的实例操作。在其它实例中,混洗器电路14可由固定功能硬件电路和可编程处理电路的组合形成。

在其中混洗器电路14是可编程电路的实例中,系统存储器30可存储致使混洗器电路14执行本发明中所描述的实例技术的指令。在此类实例中,混洗器电路14可以是gpu12的可编程核心的部分,且当混洗器电路14将执行本发明中所描述的实例技术时cpu16可指示混洗器电路14执行指令。举例来说,cpu16可将识别系统存储器30内混洗器电路14将从中检索指令的存储器位置的信息提供到混洗器电路14,且提供命令到混洗器电路14以执行所述指令。在任何情况下,为易于描述,本发明将混洗器电路14描述为固定功能电路。

并非将所有处理通道彼此互连,混洗器电路14允许从处理通道的子组(称为处理通道的源子组)选择性输出数据。举例来说,混洗器电路14从m数目个处理通道接收数据,将来自所述m个处理通道的数据重排序,且输出经重排序的数据。在一些实例中,混洗器电路14可将经重排序的数据输出到所有处理通道;然而,仅处理通道的子组可能够将来自混洗器电路14的经重排序数据存储到对应寄存器(称为处理通道的目的地子组)。因为混洗器电路14将来自处理通道的子组的数据重排序,所以混洗器电路14可利用多个时钟循环来完成处理通道到彼此的数据传送。

举例来说,混洗操作可为让每一处理通道将数据输出到相距某一数目的通道的处理通道。在此情况下,混洗器电路14可接收且重排序来自处理通道的源子组的数据,且将经重排序数据输出到可能所有处理通道。然而,仅与处理通道的相应源子组相距某一数目的通道的处理通道的目的地子组可能够将来自混洗器电路14的经重排序数据存储到对应寄存器中。混洗器电路14可随后关于处理通道的下一源子组重复这些操作。从处理通道的子组接收数据、重排序数据以及输出数据的这些迭代中的每一个是通过多个时钟循环进行处理。

处理通道中的每一个对应于通用寄存器堆(gprf)的一或多个寄存器。处理通道从对应寄存器接收数据和将数据输出到对应寄存器。在本发明中所描述的实例技术中,处理通道的目的地子组可将经重排序数据存储于其对应寄存器中,且其它处理通道可丢弃经重排序数据。举例来说,可允许处理通道的目的地子组的对应寄存器存储经重排序数据,同时可不允许其它处理通道的对应寄存器存储经重排序数据。多路复用器(mux)可耦合到寄存器中的每一个,且用于对应于处理通道的目的地子组的寄存器的mux允许经重排序数据存储于对应寄存器中,且用于不对应于处理通道的目的地子组的寄存器的mux并不允许经重排序数据存储于对应寄存器中(例如,使得处理通道丢弃数据)。可存在允许对应寄存器存储数据或不存储数据的其它方式,例如配置处理通道以存储数据或不存储数据(例如,丢弃数据)。

处理通道存储经重排序数据意味着经重排序数据实际存储于对应寄存器中,而不仅仅是处理通道尝试存储经重排序数据。处理通道丢弃经重排序数据意味着经重排序数据不存储于对应寄存器中。在一些实例中,可允许寄存器存储数据或不允许其存储数据。在一些实例中,处理通道可经配置以存储数据或不经配置以存储数据。在一些实例中,两种情况的组合是可能的。存储经重排序数据的处理通道涉及用于存储经重排序数据的这些技术的任何可能性。丢弃经重排序数据的处理通道涉及用于不存储经重排序数据的这些技术的任何可能性。

在本发明中,源处理通道和目的地处理通道是gpu12的所有处理通道。举例来说,如果每一处理通道将输出数据到相邻处理通道,那么处理通道五是用于处理通道六的源处理通道,且处理通道六是用于处理通道五的目的地处理通道。并且,处理通道五是用于处理通道四的目的地处理通道,且处理通道四是用于处理通道五的源处理通道。因此,对于混洗操作,每一处理通道可为用于一个处理通道的源处理通道和用于另一处理通道的目的地处理通道。

当gpu12的处理通道将向彼此输出数据时,cpu16可发出“混洗指令”到gpu12。在gpu12的许多实例中,gpu12是自我反应性的。这意味着cpu16和gpu12并不逐个指令地协作。而是,cpu16将整个程序发送到gpu12来执行。gpu12本身提取/解码/执行所述程序的指令群组。cpu16和gpu12经由系统存储器30交换输入/结果数据。在本发明中,cpu16发出混洗指令到gpu12意味着在cpu16指示gpu12执行的程序中包含混洗指令。然而,在其中cpu16和gpu12按逐个指令基础协作的实例中,cpu16可按逐个指令基础将混洗指令输出到gpu12。

混洗指令界定混洗模式和偏移。混洗模式指示处理通道将向哪些处理通道进行输出的方向(例如,将数据输出到左边或右边的处理通道或输出到所有处理通道),且偏移用以确定接收数据的处理通道与输出数据的处理通道相距多远。对于作为混洗模式的一个实例的广播模式,源通道的唯一索引用以确定用于每一通道的偏移。

在一些实例中,所述偏移指示其源通道相距多远。这是因为有时并非全部通道都在作用中或在范围内(例如,偏移指示源通道在所有可用通道的范围外),且如果偏移是基于源通道则可能错过无有效源通道的一些通道。并且,将数据发送到非作用中或边界外通道可能没有用。实际上,每一有效的目的地通道指示哪一个是其源通道,以使得数据仅发送到对于接收数据是有效的目的地通道。然而,如果源通道是无效的(例如,非作用中或在边界外),那么目的地通道默认地可使用自身作为源通道(例如,执行自我复制,其中目的地通道复制其自身的数据)。在本发明中,可从源通道或目的地通道的角度来考虑偏移,其中应理解在一些情况下,目的地通道可基于偏移而界定其源通道,且在一些情况下,源通道可基于偏移而界定目的地通道。

由于gpu12的simd结构,混洗指令可应用于处理通道中的每一个。再次,处理通道中的每一个可执行同一指令但对于不同数据来执行,且因此每一处理通道执行混洗指令(例如,每一处理通道将向一个其它处理通道输出数据)。由于偏移由混洗指令界定,因此偏移对于每一处理通道可为相同的(即,偏移对于所有处理通道是均匀的)。虽然本发明描述处理通道中的每一个可执行同一混洗指令,但在一些实例中,可有可能处理通道中的至少一些(但不一定是全部)执行同一混洗指令。

如果偏移使得其致使处理通道向边界外处理通道进行输出,那么偏移将致使处理通道将输出绕回到在边界内的处理通道。举例来说,混洗模式和偏移可界定每一处理通道将向紧邻于左边的处理通道进行输出(例如,混洗模式是向上混洗且偏移等于一)。在此情况下,最左边处理通道将其数据输出到最右边处理通道(例如,绕回)。

输出的绕回可针对称为旋转向上/旋转向下模式的混洗模式发生。然而,对于正常向上/向下模式,源处理通道可执行自我复制(例如,源处理通道和目的地处理通道是相同的)。在一些实例中,每一目的地通道耦合到mux-2。如果是不存在绕回的正常向上/向下模式,那么目的地通道在源通道有效的情况下配置mux以从混洗器电路14接收数据,且在源通道无效的情况下配置mux以从自身接收数据,因为不存在绕回。

应理解,在本发明中,混洗器电路14将经重排序数据输出到处理通道意味着混洗器电路14将相应经重排序数据输出到相应处理通道。举例来说,混洗指令和偏移可界定每一处理通道将向偏左20个通道的处理通道进行输出(例如,混洗模式是向上混洗且偏移等于20)。在此实例中,假定混洗器电路14包含八个输入和八个输出。混洗器电路14可从通道0-7接收数据,其中混洗器电路14的第一输入从处理通道0接收数据,混洗器电路14的第二输入从处理通道1接收数据,等等。出于下文描述的原因,混洗器电路14可将接收的数据重排序以使得混洗器电路14的第一输出输出从处理通道4接收的数据,混洗器电路14的第二输出输出从处理通道5接收的数据,混洗器电路14的第三输出输出从处理通道6接收的数据,混洗器电路14的第四输出输出从处理通道7接收的数据,混洗器电路14的第五输出输出从处理通道0接收的数据,混洗器电路14的第六输出输出从处理通道1接收的数据,混洗器电路14的第七输出输出从处理通道2接收的数据,且混洗器电路14的第八输出输出从处理通道3接收的数据。

换句话说,混洗器电路14的第一到第八输入分别从处理通道0-7接收数据,混洗器电路14随后出于以下原因将数据重排序,以使得混洗器电路14的对应第一到第八输出分别输出从处理通道4、5、6、7、0、1、2和3接收的数据。在本发明中,当混洗器电路14被描述为从处理通道接收数据或将经重排序数据输出到处理通道时,本发明称混洗器电路14从相应处理通道接收数据且将相应数据输出到相应处理通道。

并且,本发明不应解释为意味着存在从处理通道接收或输出数据的特定时间次序。举例来说,混洗器电路14的第一到第八输入不应解释为意味着第一输入第一个接收数据,第二输入第二个接收数据等等。虽然此类循序的数据接收是可能的,但实例技术不受如此限制,且混洗器电路14的第一到第八输入可并行地(例如,同时)或以某种组合接收数据。类似地,混洗器电路14的第一到第八输出不应解释为意味着第一输出第一个输出数据,第二输出第二个输出数据等等。虽然此类循序的数据传输是可能的,但实例技术不受如此限制,且混洗器电路14的第一到第八输出可并行地(例如,同时)或以某种组合输出数据。并且,混洗器电路14可以包含多于或少于八个输入和输出。

在本发明中所描述的实例技术中,处理通道可形成为多个排组,其中每一排组包含一或多个处理通道。举例来说,如果存在64个处理通道,那么可存在八个排组,每一排组包含八个处理通道。处理通道的源子组可为一个排组的处理通道。对于这些实例,混洗器电路14从处理通道的源子组接收数据可视为大体上相同于混洗器电路14从所述多个排组中的一个排组接收数据。

在一些实例中,混洗器电路14可仅能够每次从一个排组接收数据。混洗器电路14的输入与处理通道之间的互连可以使得混洗器电路14的第一输入可仅从每一排组的相应第一处理通道接收输入,混洗器电路14的第二输入可仅从每一排组的相应第二处理通道接收输入,等等。如果混洗器电路14从第一排组接收数据(例如,混洗器电路14的相应输入从第一排组的相应处理通道接收数据),则接着是执行混洗操作的另一处理迭代,混洗器电路14从第二排组接收数据(例如,混洗器电路14的相应输入从第二排组的相应处理通道接收数据)。可能不存在允许混洗器电路14在同一迭代期间从不同排组中的处理通道接收数据的互连。

在重排序数据之后,混洗器电路14可将经重排序数据输出到处理通道,且在一些实例中,可将经重排序数据输出到排组中的每一个。每一排组与混洗器电路14的输出之间可存在互连(例如,每一排组的每一处理通道可从混洗器电路14的一个、且可能仅一个输出接收数据)。举例来说,每一相应排组的第一处理通道可经配置以从混洗器电路14的第一输出接收数据,每一相应排组的第二处理通道可经配置以从混洗器电路14的第二输出接收数据等等。

当混洗器电路14输出数据时,数据广播到所有处理通道。举例来说,排组中的每一个中的第一处理通道中的每一个接收混洗器电路14的第一输出,排组中的每一个中的第二处理通道中的每一个接收混洗器电路14的第二输出,等等。

因为混洗器电路14的输出广播到排组中的每一个,所以混洗器电路14将接收的数据重排序。举例来说,假定每一处理通道将向相距10个通道的处理通道输出数据。再次为了简单起见,假定混洗器电路14包含八个输入和八个输出,且每一排组包含八个处理通道。在此实例中,处理通道的源子组包含第一排组的那些处理通道(例如,处理通道7-0)。在此实例中,假定第一输入从处理通道0接收数据。在此情况下,来自处理通道0的数据将输出到处理通道10。

然而,混洗器电路14的第一输出不连接到且不可连接到处理通道10。而是,混洗器电路14的第一输出连接到相应排组的相应第一处理通道。举例来说,处理通道10可在包含处理通道8-15的第二排组中。在此情况下,混洗器电路14的第一输出耦合到处理通道8。因此,如果混洗器电路14并未将输入数据重排序,那么混洗器电路14的第一输出将向处理通道8输出,而不是处理通道10。

因此,混洗器电路14可将输入数据重排序以使得当广播输出数据时,正确的处理通道接收数据。在此上下文中,重排序意味着混洗器电路14将输入数据移位以使得混洗器电路14的相应输出输出的数据不同于混洗器电路14的对应输入上的数据。举例来说,混洗器电路14的第一输出不输出混洗器电路14的第一输入上的数据,混洗器电路14的第二输出不输出混洗器电路14的第二输入上的数据等等。实际上,混洗器电路14将数据重排序以使得经广播的相应输出由正确的目的地处理通道接收。目的地处理通道是数据将输出到的处理通道(例如,将处理通道0的数据输出到处理通道10,其中处理通道10是目的地处理通道且处理通道0是源处理通道)。

混洗器电路14可基于取模功能将输入数据重排序。举例来说,混洗器电路14内的处理电路或gpu12的控制器电路或某种其它电路可将偏移除以混洗器电路14的输入/输出的数目且确定所述除法的余数。混洗器电路14可基于所述余数在具有绕回的情况下将每一输入向左或向右移位。混洗器电路14的输出可输出此经移位绕回数据(例如,经重排序数据)。

虽然gpu12中的所有处理通道之间可不存在互连(例如,非全通道到全通道纵横制),但混洗器电路14的输入中的每一个可选择性耦合到混洗器电路14的输出中的任一个。举例来说,混洗器电路14可以包含多个开关,其允许任何输入耦合到任何输出。在混洗器电路14内的处理电路或来自另一电路(例如,gpu12的控制器电路)的控制信号可选择性双态切换闭合和断开开关以耦合混洗器电路14的既定输入和输出来将数据重排序。

作为余数如何识别将输入上的数据移位多少来重排序的实例,如上假定每一处理通道将向相距10个通道(例如,偏移等于10)的处理通道进行输出。混洗器电路14的输入/输出的数目是八,且10/8等于一且余数为二。在此实例中,混洗器电路14可双态切换其内部开关以使得每一输入在具有绕回的情况下向其左边移位二。举例来说,如果对混洗器电路14的输入是排组0的处理通道0-7,那么混洗器电路14的第一到第八输入分别是来自处理通道0-7的数据。

混洗器电路14基于余数二来移位输入数据,以使得混洗器电路14的第三输出输出混洗器电路14的第一输入上的数据,混洗器电路14的第四输出输出混洗器电路14的第二输入上的数据等等。由于绕回,混洗器电路14的第一输出输出混洗器电路14的第七输入上的数据,且混洗器电路14的第二输出输出混洗器电路14的第八输入。

在此实例中,输入数据(例如,在第一到第八输入上的数据)的次序是分别来自处理通道0-7的数据。在重排序之后,输出数据(例如,在第一到第八输出上的数据)的次序是分别来自处理通道6、7、0、1、2、3、4和5的数据。

如上文所描述,处理通道10将接收处理通道0的数据,因为偏移是10。处理通道10在包含处理通道8-15的排组1中。因为混洗器电路14的输出广播到每一排组且每一排组中的每一处理通道耦合到混洗器电路14的相应输出,所以排组1的第一处理通道接收来自混洗器电路14的第一输出的数据,排组1的第二处理通道接收来自混洗器电路14的第二输出的数据等等。在此实例中,混洗器电路14的第一输出输出处理通道6的数据,排组1的第一处理通道(例如,处理通道8)接收所述数据。混洗器电路14的第二输出输出处理通道7的数据,排组1的第二处理通道(例如,处理通道9)接收所述数据。

随后,混洗器电路14的第三输出输出处理通道0的数据,排组1的第三处理通道(例如,处理通道10)接收所述数据。如可见,在此实例中,由于数据的重排序,处理通道10接收来自处理通道0的数据。此模式适用于排组1的剩余通道(例如,处理通道11从处理通道1接收数据,处理通道12从处理通道2接收数据,且一直到处理通道15从处理通道5接收数据)。如此,处理通道10-15从处理通道0-5接收数据。

然而,处理通道16和17还将分别从处理通道6和7接收数据。处理通道16和17属于包含处理通道16-23的排组2。处理通道16是排组2中的第一处理通道且处理通道17是排组2中的第二处理通道。如上文所描述,混洗器电路14的输出广播到每一排组。因此,处理通道16接收混洗器电路14的第一输出且处理通道17接收混洗器电路14的第二输出。在此实例中,混洗器电路14的第一输出是处理通道6的数据且混洗器电路14的第二输出是处理通道7的数据。通过移位和绕回输入上的数据(例如,将数据重排序),处理通道6的数据输出到相距10个处理通道的处理通道(例如,处理通道16),且同理处理通道7输出到处理通道17。

在以上实例中,来自处理通道0-7的数据将输出到处理通道10-17。然而,在重排序之后,虽然处理通道10-17正确地分别从处理通道0-7接收数据,但各种处理通道从并非相距10个通道的处理通道接收数据。举例来说,在以上实例中,处理通道8从处理通道6接收数据,且处理通道6并非相距10个处理通道。

为了解决此问题,仅处理通道的目的地子组(例如,将接收数据的那些)可存储接收的经重排序数据。举例来说,当处理通道0-7是输入通道时gpu12的控制器电路可以允许处理通道10-17的gpr存储数据(例如,配置耦合到对应于处理通道10-17的gpr的mux以允许所述gpr存储数据)。可不允许其余处理通道的gpr存储数据(例如,配置耦合到对应于其余处理通道的gpr的mux以不允许所述gpr存储数据),且进而丢弃数据。因此,虽然数据经广播,但数据不会写入到不期望的处理通道的gpr任一者。

混洗器电路14可随后接收下一连续排组的输入(例如,包含处理通道8-15的排组0)。混洗器电路14可类似地基于余数将数据重排序(例如,移位二且绕回,因此输出次序是14、15、8、9、10、11、12和13)且将输出广播到处理通道(例如,到每一排组)。控制器电路可以允许处理通道18-25的gpr存储数据,且不允许其它处理通道的gpr存储数据。混洗器电路14和控制器电路可重复这些操作直到所有源处理通道已将其输出写入到相应目的地处理通道为止。

在以上实例中,控制器电路被描述为允许或不允许对应gpr能够存储数据,作为处理通道的目的地子组存储数据或丢弃数据的一种方式。在一些实例中,控制器电路可以允许处理通道存储数据或不存储数据,作为用于处理通道存储数据或丢弃数据的方式。此类技术的组合也是可能的。

因此,图1提供用于处理数据的装置的实例,其中所述装置包含gpu12。gpu12包含多个处理通道,其中处理通道中的每一个包含用以处理数据的电路(例如,alu)且处理通道是simd结构经配置。gpu12还包含从处理通道的源子组(例如,从排组的处理通道)接收数据的混洗器电路14。混洗器电路14基于指令(例如,来自cpu16)将从处理通道的源子组接收的数据重排序,所述指令指示处理通道中的每一个将数据输出到处理通道中的另一个。混洗器电路14将经重排序数据输出到处理通道(例如,输出广播到排组)。在一些实例中,处理通道的目的地子组将接收的经重排序数据存储于对应寄存器中,且除处理通道的目的地子组外的处理通道丢弃接收的经重排序数据。

在以上实例中,混洗器电路14接收的数据可为用于处理通道的源子组的每一处理通道的完整标量或向量值。举例来说,混洗器电路14正在接收的数据可能不是完整数据的子字节,而是完整标量或向量值。混洗器电路14还可经配置以将从处理通道的源子组的每一处理通道接收的完整标量或向量值重排序,且可将经重排序数据的完整标量或向量值输出到处理通道。

并且,上文描述在混洗操作中,一个处理通道将其数据输出到另一处理通道。在一些实例中,一处理通道输出到另一处理通道的数据仍被所述处理通道维持。每一处理通道维持其自身的数据且从另一处理通道接收数据。在一些实例中,可删除由处理通道自身产生的数据且可维持仅从另一处理通道接收的数据。

图2是更详细地说明图1的gpu的一个实例的框图。举例来说,图2说明gpu12的处理电路的一个实例。gpu12包含控制器电路38、混洗器电路14和通用寄存器堆(gprf)56。如还说明,gpu12包含多个排组46a-46x。所述多个排组46a-46x中的每一个包含多个处理通道(pl)。举例来说,排组46a包含处理通道42a,a到42m,a,且排组46x包含处理通道42a,x到42m,x。因此,在图2中,处理通道(例如,42a,a到42m,a或42a,x到42m,x)经分组为多个排组46a-46x,且所述多个排组46a-46x中的每一排组包含所述多个处理通道中的一或多个处理通道。

作为一实例,假定存在总共64个处理通道。在此实例中,存在八个排组且每一排组包含八个处理通道。因此,排组46a-46x表示八个排组,pl42a,a到42m,a表示排组46a的八个处理通道,且pl42a,x到42m,x表示排组46x的八个处理通道。

处理通道42a,a到42m,x中的每一个分别包含一或多个alu44a,a到44m,x。alu44a,a到44m,x可经配置以执行经指派给处理通道42a,a到42m,x中的每一个的处理任务。在本发明中,alu44a,a到44m,x可以是gpu12的处理核心(也被称作着色器核心)的部分。举例来说,gpu12可经配置以执行着色器程序(例如,顶点着色器、像素着色器、几何着色器,或用于非图形应用的计算着色器)的指令。处理通道42a,a到42m,x中的每一个可并行执行着色器程序的指令,但数据可不同(例如,存在着色器程序的多个示例)。alu44a,a到44m,x可为执行由指令界定的操作的硬件电路。

虽然本发明描述处理通道中的每一个可执行同一指令,但在一些实例中,可有可能处理通道中的至少一些(但不一定是全部)执行混洗指令。举例来说,处理通道42a,a到42m,x的子组可并行地执行同一指令,且其它处理通道可能并不如此。在此类实例中,可有可能处理通道42a,a到42m,x中的至少一些并行地执行混洗指令,且其它处理通道并不如此。

gprf56是为处理通道42a,a到42m,x存储本地产生的数据而分配的存储器。举例来说,gprf56包含经指派给处理通道42a,a到42m,x的多个通用寄存器(gpr)。alu44a,a到44m,x中的每一个可从相应经指派gpr检索数据用于处理(例如,用于处理的操作数数据),基于正处理的着色器程序的指令对所述数据执行数学运算,且将所得数据输出回到相应经指派gpr。

在一些实例中,混洗器电路14耦合且在一些实例中选择性耦合到处理通道42a,a到42m,x的gpr。以此方式,混洗器电路14经由源处理通道的gpr从所述源处理通道接收数据,且通过将数据输出到目的地处理通道的gpr而将数据输出到所述目的地处理通道。因此,可以通过混洗器电路14从源处理通道的gpr接收数据且将数据输出到目的地处理通道的gpr而执行混洗操作。

作为基本实例,如果指令是将由变量a和b表示的值相加,那么处理通道42a,a到42m,x中的每一个接收此相加指令。alu44a,a到44m,x从gprf56中的相应gpr检索用于变量a的值,且从gprf56中的相应gpr检索用于变量b的值。在此实例中,变量a和b的值对于处理通道42a,a到42m,x可为不同的,但将a和b相加的指令是相同的。相应alu44a,a到44m,x可执行相加的数学运算以产生由变量c表示的相应结果数据,且可将c的值存储于gprf56中的相应gpr中。随后,如果需要其中变量c为操作数的进一步操作,那么相应alu44a,a到44m,x从gprf56的相应gpr检索数据以用于处理。

控制器电路38可控制gpu12的功能性。控制器电路38被描述为硬件组件,但也可为软件在其上执行的组件。因此,控制器电路38指代固定功能和可编程电路两者。

在本发明中所描述的实例中,控制器电路38可经配置以输出处理通道42a,a到42m,x中的每一者将处理的指令。举例来说,cpu16可将执行特定着色器程序的命令输出到gpu12。作为响应,控制器电路38可经配置以从系统存储器30检索着色器程序的指令,且调度处理通道42a,a到42m,x中的每一者以执行着色器程序的指令。

在本发明中所描述的实例技术中,控制器电路38可接收指示处理通道42a,a到42m,x中的每一个将其数据输出到处理通道42a,a到42m,x中的另一个的指令(例如,控制器电路38接收混洗指令)。混洗指令可界定混洗模式(例如,处理通道42a,a到42m,x中的每一个将输出其数据的方向)和偏移(例如,处理通道42a,a到42m,x中的每一个将输出其数据所相距的处理通道的数目)。举例来说,所述指令可界定混洗模式为混洗旋转向上(也被称为左混洗),其中处理通道42a,a到42m,x中的每一个将其数据输出到位于左边的处理通道。偏移可为10,意味着处理通道42a,a到42m,x中的每一个将数据输出到在其偏左10个通道的处理通道。如果不存在偏左10个通道的通道,那么偏移绕回。

在本发明中,一个通道在另一通道的左边或右边可意味着所述通道在gpu12的simd架构内物理上位于左边或右边。然而,在一些实例中,一个通道在另一通道的左边或右边可为逻辑指定。举例来说,具有比当前通道小的地址的通道可视为在右边,且具有比当前通道大的地址的通道可视为在左边。因此,术语左和右不应视为限于通道的物理位置,但在一些实例中,左和右可指代gpu12的simd架构中的通道的字面意义的位置。

如上文所描述,混洗器电路14经配置以将数据重排序以使得处理通道42a,a到42m,x可执行其相应混洗操作。为了执行混洗操作,混洗器电路14从处理通道42a,a到42m,x的源子组接收数据。举例来说,混洗器电路14可从一个排组的处理通道接收数据,且不可从跨越多于一个排组的处理通道接收数据(例如,从排组46a的处理通道42a,a到42m,a接收数据)。

为了允许混洗器电路14从一个排组的处理通道接收数据,混洗器电路14可耦合到多路复用器(mux)48,且mux48可耦合到排组46a-46x中的每一个。举例来说,mux48包含从排组46a的处理通道42a,a到42m,a接收数据的第一组输入、从下一排组的处理通道接收数据的第二组输入等等,包含从排组46x的处理通道42a,x到42m,x接收数据的一组输入。控制器电路38可将指示mux48选择所述输入群组中的一个(例如,排组46a-46x中的一个)的命令输出到mux48且输出来自所选择输入群组的数据(例如,输出来自排组46a-46x中的一个的处理通道的数据)。

混洗器电路14包含接收mux48的输出的输入接口50,所述输出可为来自排组46a-46x中的一个的处理通道的数据。输入接口50正从其接收数据的处理通道称为处理通道的源子组。输入接口50包含多个输入端口。举例来说,如果排组46a-46x中的每一个包含八个处理通道,那么输入接口50包含八个输入端口,每一端口经配置以从排组46a-46x中的选定一者的处理通道中的一个接收数据。

基于混洗指令中的混洗模式和偏移,控制器电路38可将选择性双态切换(即,闭合和断开)混洗器电路14内的开关以将相应输入端口耦合到相应输出端口来重排序接收的数据的命令输出到混洗器电路14。如所说明,混洗器电路14包含输出接口52,所述输出接口包含多个输出端口。输出端口中的每一个对应于输入端口中的每一个(例如,输入接口50的第一输入端口对应于输出接口52的第一输出端口等等)。在本发明中所描述的实例技术中,控制器电路38可致使混洗器电路14的开关闭合以使得来自一输入端口的数据不输出到对应输出端口,而是输出到输出端口中的另一个。通过将输入和输出端口选择性耦合在一起,混洗器电路14可将在输入接口50上接收的数据重排序。

输出接口52将经重排序数据输出到多路分用器(demux)54。如上文所描述,经重排序数据广播到排组46a-46x中的每一个。在所说明实例中,demux54可将输出接口52输出的数据广播到排组46a-46n。举例来说,demux54包含将数据输出到排组46a的处理通道42a,a到42m,a的第一组输出、将数据输出到下一排组的处理通道的第二组输出等等,包含将数据输出到排组46x的处理通道42a,x到42m,x的一组输出。在一些实例中,demux54的输出群组中的每一个的第一输出耦合到排组46a-46x中的每一个的第一处理通道,demux54的输出群组中的每一个的第二输出耦合到排组46a-46x中的每一个的第二处理通道等等。以此方式,排组46a-46x中的每一个接收混洗器电路14的输出。

然而,在一些情况下,并非所有处理通道都实际处理接收的数据。因此,控制器电路38可以仅允许处理通道的子组将来自混洗器电路14的输出存储于对应gpr中。将经重排序数据存储于对应gpr中的处理通道称为处理通道的目的地子组。其它处理通道可丢弃接收的经重排序数据。

在本发明中所描述的实例技术中,混洗器电路14执行分段混洗。举例来说,混洗器电路14可首先通过基于偏移将混洗器电路14的输入上的数据重排序且通过选择性启用处理通道的目的地子组以接收数据而将来自排组46a的处理通道42a,a到42m,a(例如,处理通道的源子组)的数据输出到正确的处理通道(例如,处理通道的目的地子组)。如上文所描述,将输入上的数据重排序的一个实例方式是基于将偏移除以混洗器电路14的输入或输出端口的数目的余数对输入上的数据进行移位和绕回。混洗器电路14可随后对于下一排组(例如,排组46b)等等重复这些操作直到排组46x。

因此,混洗器电路14可利用多个时钟循环(n个时钟循环)执行完整混洗操作。n等于处理通道的总数目除以混洗器电路14的输入或输出端口的数目。假设w等于处理通道的总数目且m等于混洗器电路14的输入或输出端口的数目。在此情况下,n等于w/m。

在一些情况下,当设计混洗器电路14时,混洗器电路14可基于执行混洗器操作中的所需时延而设计成包含某一数目的输入和输出端口。举例来说,在多级管线实施的混洗中(例如本发明中所描述的实例),n应当等于瓶颈级的时延。混洗器电路14可使用四个循环从处理通道读取所有操作数(例如,数据),随后使用n个循环执行通道之间的混洗,并且接着使用八个循环回写结果。在此实例中,n应当为八,因为回写是瓶颈。基于需要多少循环来执行混洗操作,可通过将处理通道的总数目除以执行混洗操作所需要的循环的数目来计算混洗器电路14的输入和输出端口的数目(例如,m等于w/n)。

应理解,不一定具有4个循环用于读取和8个循环用于写入。一般来说,读取和写入所需要的循环的数目由总线宽度决定。为了转发32通道*32位数据,宽总线(例如,1024位)可使用一个循环,或窄总线(例如,256位)可使用4个循环。此外,在接收侧,逻辑可具有处置宽度。假定处置宽度甚至更窄(例如,128位/循环)。在此实例中,八个循环将足以将所有数据写入gpr。较宽的硬件始终是较昂贵的;因此这些数目是性能/成本折衷的结果。在此读取-混洗-写入管线中,如果写入级使用8个循环,那么混洗器电路14应当尽可能窄以降低成本,但不应太窄而使得处理无法在八个循环中结束。

在本发明中,窄是涉及并行处理通道的数目的相对术语。举例来说,混洗器电路14相对于gpu12中的处理通道的数目是窄的硬件(例如,针对比gpu12中的通道的数目少的通道混洗数据)。通过使用窄的硬件,混洗器电路14使用较多循环但花费较少电力来完成。

作为一实例,假定存在128个处理通道(例如,w等于128)。在此实例中,混洗器电路14可能需要包含仅16个输入端口和16个输出端口(例如,混洗器电路14是16通道宽度纵横制)以使得混洗操作可在八个循环中完成(例如,128/16等于8)。

即使在使用全通道到全通道纵横制的实例中,瓶颈也可能是数据到处理通道的写入。因此,通过将混洗器电路14设计成能够在瓶颈的时钟循环内执行混洗操作,实例技术与使用全通道到全通道纵横制的实例相比对总体系统不会增加许多时延。举例来说,在全通道到全通道纵横制中,混洗操作可需要一个时钟循环且回写可需要八个时钟循环。在以上实例中,混洗器电路14可需要八个时钟循环来完成混洗操作且需要八个时钟循环来完成回写。然而,因为在回写发生的同时混洗器电路14执行混洗操作,所以时钟循环的总数目可限于八个时钟循环,其相同于全通道到全通道纵横制实例所需要的时钟循环的总数目。

与使用全通道到全通道纵横制的实例相比,本发明中所描述的实例技术可不存在许多时延增加。然而,实例技术可提供芯片面积的减少。举例来说,与64通道全通道到全通道纵横制相比,实例技术可节省(64/16)2面积(例如,节省混洗器面积的16倍)。

图3是说明用于执行混洗操作的实例技术的概念图。图3说明多个源处理通道和多个目的地处理通道。源处理通道和目的地处理通道是同一组通道。举例来说,一个通道是用于另一通道的源通道和用于另一通道的目的地通道(例如,一个通道可同时为源通道和目的地通道)。

在所说明实例中,存在总共64个处理通道(例如,处理通道0-63)。存在八个排组(排组0到排组7),各自包含多个处理通道。换句话说,64个处理通道分组为多个排组,所述多个排组中的每一排组包含一或多个处理通道。举例来说,排组0包含处理通道0-7,排组1包含处理通道8-15等等。并且,在所说明实例中,混洗器电路14包含八个输入端口和八个输出端口。

在此实例中,假定cpu16指示gpu12以35的偏移执行混洗旋转向上(例如,处理通道0将输出到处理通道35,处理通道1将输出到处理通道36等等,其中处理通道28将输出到处理通道63)。对于处理通道29,偏移将致使处理通道29输出到不存在的处理通道64。然而,偏移绕回,且处理通道29将输出到处理通道0,处理通道30将输出到处理通道1等等,其中处理通道63输出到处理通道34。

在此实例中,如上文所描述,混洗器电路14可从处理通道的源子组接收输出。处理通道可为一个排组的那些处理通道(例如,排组0的处理通道7-0)。混洗器电路14可经由mux48从排组0的处理通道7-0接收数据。如图3中所图示,混洗器电路14的输入端口中的每一个从处理通道7-0中的一个接收数据。举例来说,混洗器电路14的第一输入端口从处理通道0接收数据,混洗器电路14的第二输入端口从处理通道1接收数据等等。

来自处理通道0的数据将输出到处理通道35。为了确保来自处理通道0的数据输出到处理通道35,控制器电路38可确定混洗器电路14的哪一输出端口经由demux54耦合到处理通道35。如上文所描述,demux54将每一排组的第一处理通道耦合到混洗器电路14的第一输出端口,将每一排组的第二处理通道耦合到混洗器电路14的第二输出端口等等。在图3中说明的实例中,处理通道0-7通过demux54分别耦合到混洗器电路14的第一至第八输出端口,处理通道8-15通过demux54分别耦合到混洗器电路14的第一至第八输出端口等等。

为了确定混洗器电路14的哪一输出端口耦合到处理通道35,控制器电路38可将偏移除以混洗器电路14的输入/输出端口的数目(例如,35除以8)。所述除法的商指示处理通道35位于其中的排组,且余数指示处理通道35中的多少通道处于所述排组中。举例来说,35除以8的商是4,且余数是3。因此,控制器电路38可确定处理通道35处于排组4中,且进入排组4中三个通道。如所说明,排组4包含处理通道32-39,并因此处理通道35进入排组4中三个通道。

在此实例中,控制器电路38可确定在混洗器电路14的相应输入端口上的数据应当在具有绕回的情况下由三个端口移位,以使得混洗器电路14的耦合到处理通道35的输出端口从处理通道0接收数据。举例来说,混洗器电路14的第一到第八输出端口分别耦合到处理通道32-39。这意味着混洗器电路14的第四输出端口耦合到处理通道35。因此,通过将在混洗器电路14的第一输入端口上的数据输出到混洗器电路14的第四输出端口,处理通道35将从处理通道0接收数据。

在此情况下,控制器电路38可致使混洗器电路14将第一输入端口互连到第四输出端口以使得来自处理通道0的数据输出到处理通道35,将第二输入端口互连到第五输出端口以使得来自处理通道0的数据输出到处理通道36等等。对于第六输入端口,由于绕回,控制器电路38可致使混洗器电路14将第六输入端口互连到第一输出端口,将第七输入端口互连到第二输出端口,且将第八输入端口互连到第三输出端口。

如图3中所图示,第四输出端口接收第一输入端口的数据(例如,第四输出端口输出来自处理通道0的数据),第五输出端口从第二输入端口接收数据(例如,第五输出端口输出来自处理通道1的数据)等等。因此,混洗器电路14可基于偏移将接收的数据重排序。如所说明,混洗器电路14的第一输出端口输出来自处理通道5的数据,混洗器电路14的第二输出端口输出来自处理通道6的数据,混洗器电路14的第三输出端口输出来自处理通道7的数据,混洗器电路14的第四输出端口输出来自处理通道0的数据,混洗器电路14的第五输出端口输出来自处理通道1的数据,混洗器电路14的第六输出端口输出来自处理通道2的数据,混洗器电路14的第七输出端口输出来自处理通道3的数据,且混洗器电路14的第八输出端口输出来自处理通道4的数据。

demux54将混洗器电路14的输出广播到排组中的每一个。如所说明,排组4的处理通道32-34分别从处理通道5-7接收数据。排组4的处理通道35-39分别从处理通道0-4接收数据。由于混洗器电路14的输出的广播,排组5的处理通道40-47从混洗器电路14接收数据。举例来说,处理通道40-42分别从处理通道5-7接收数据。处理通道43-47分别从处理通道0-4接收数据。

在此情况下,处理通道35-39正确地从处理通道0-4接收数据(例如,因为偏移是35,处理通道35-39将从处理通道0-4接收数据)。然而,处理通道32-34从处理通道5-7接收数据,但处理通道32-34原本将从处理通道61-63接收数据(由于绕回)。类似地,处理通道40-42正确地从处理通道5-7接收数据(例如,因为偏移是35,处理通道40-42将从处理通道5-7接收数据)。然而,处理通道43-47从处理通道0-4接收数据,但处理通道43-47原本将从处理通道8-12接收数据。在此实例中,排组0-3、6和7中没有任一者从正确处理通道接收数据。

在本发明中描述的技术中,虽然处理通道可接收数据,但处理通道可能并不主动取得数据且将其回写到gpr。控制器电路38可经配置以激活将接收经重排序数据的处理通道的目的地子组。举例来说,如上文所描述,处理通道40-42和35-39从正确处理通道接收数据以用35的偏移实施混洗,且处理通道43-47和32-34并未从正确处理通道接收数据以用35的偏移实施混洗。在此实例中,控制器电路38可仅激活处理通道40-42和35-39以使得仅这些处理通道在对应gpr中存储数据。其余处理通道可不在对应gpr中存储数据,而是丢弃数据(即,数据仍广播到其余处理通道,但其余处理通道无法在对应gpr中存储数据并且因此数据丢弃)。处理通道可能不能够在对应gpr中存储数据,因为不允许gpr接收数据或因为处理通道经配置以不存储数据。

控制器电路38可基于偏移和混洗器电路14的输出端口的数目确定哪些处理通道将被激活(例如,被允许存储其数据)。举例来说,控制器电路38基于35除以8的除法得到的余数3而确定处理通道35将从处理通道0接收数据。在此实例中,控制器电路38可以允许处理通道35和随后七个处理通道在其对应gpr中存储数据。在此实例中,处理通道35-42是处理通道的目的地子组。可丢弃到处理通道的其余部分的数据。

可存在控制器电路38可以允许处理通道存储数据或不存储数据的各种方式。控制器电路38可控制耦合到gpr的mux以允许gpr存储来自其对应处理通道的数据或不允许gpr存储来自其对应处理通道的数据。控制器电路38可控制处理通道以允许处理通道在对应gpr中存储数据或不在对应gpr中存储数据。某一组合也是可能的,以及除这些实例技术外的技术。在这些情况中的任一情况中,处理通道的目的地子组将经重排序数据存储于对应寄存器中,且除处理通道的目的地子组外的处理通道丢弃接收的经重排序数据。

举例来说,控制器电路38可控制哪一gpr耦合到混洗电路14。举例来说,控制器电路38可确定哪八个目的地通道的目的地gpr应当连接以在此循环中回写。以此方式,控制器电路38可激活处理通道(例如,通过将数据提供到用于那些处理通道的gpr)。

在此实例中,混洗器电路14完成将来自通道0-7的数据输出到处理通道的正确目的地子组;然而,其余处理通道保留(例如,混洗器电路14并不接收和输出来自剩余通道8-63的数据)。因此,混洗器电路14和控制器电路38可重复这些步骤直到混洗操作完成为止。举例来说,混洗器电路14从通道8-15接收数据且将数据重排序以使得第一输出端口输出来自处理通道13的数据,第二输出端口输出来自处理通道14的数据,第三输出端口输出来自处理通道15的数据,第四输出端口输出来自处理通道8的数据,第五输出端口输出来自处理通道9的数据,第六输出端口输出来自处理通道10的数据,第七输出端口输出来自处理通道11的数据,且第八输出端口输出来自处理通道12的数据。此经重排序数据广播到所有排组,但仅通道43-50将接收的经重排序数据存储于对应gpr中。在此实例中,包含通道48-55的排组6分别从通道13、14、15、8、9、10、11和12接收数据。因为仅排组6的通道48-50存储数据,所以通道48-50从通道13-15接收数据。包含通道40-47的排组4分别从通道13、14、15、8、9、10、11和12接收数据。因为仅通道43-47存储数据,所以通道43-47分别从通道8-12接收数据。

因此,在此迭代之后,通道35-42的alu分别从通道0-7接收数据,且通道43-50的alu分别从通道8-15接收数据。因此,来自通道0-15的数据已向左混洗(也被称为向上混洗)35个通道。混洗器电路14和控制器电路38可针对连续排组重复这些以完成混洗操作。

在图3的实例中,用于处理数据的装置,例如包含gpu12的装置10、gpu12自身或具有simd结构的某个其它装置,存在多个处理通道0-63,处理通道中的每一个包含用以处理数据的电路(例如,alu44a,a到44m,x)。如所描述,处理通道以simd结构配置。

混洗器电路14可经配置以经由mux48在混洗器电路14的输入端口上从处理通道的源子组接收数据(例如,从处理通道0-7接收数据)。在一些实例中,为了从源子组接收数据,混洗器电路14可从仅一个排组接收数据。混洗器电路14可响应于指令而将从处理通道的源子组接收的数据重排序,所述指令指示处理通道中的每一个将数据输出到处理通道中的另一个(例如,混洗器电路14可响应于混洗指令而将数据重排序)。混洗器电路14可将经重排序数据输出到处理通道。举例来说,demux54可将经重排序数据广播到处理通道。以此方式,混洗器电路14输出的经重排序数据输出到排组中的每一个。虽然所有处理通道可从混洗器电路14的输出中的一个接收数据,但控制器电路38可以允许仅处理通道的目的地子组将经重排序数据存储于对应寄存器中。其它处理通道可丢弃接收的经重排序数据。

混洗器电路14和控制器电路38可经配置以针对处理通道的连续源和目的地子组执行上述实例操作。举例来说,混洗器电路14可从处理通道的连续源子组接收数据,将从处理通道的连续源子组接收的数据重排序,且将经重排序数据输出到处理通道,其中处理通道的连续目的地子组将接收的经重排序数据存储于对应寄存器中。

如图2和3中所图示,处理通道分组为多个排组。控制器电路38可基于偏移确定多个排组0-7中的一个的排组标识(例如,图3的实例中的排组id4),且确定具有所确定排组标识的排组4内的处理通道(例如,处理通道35)的通道标识(例如,图3的实例中的通道id3)。在此实例中,控制器电路38经配置以基于所确定排组标识和通道标识而允许处理通道的目的地子组的对应gpr存储经重排序数据(例如,允许对应于排组4的处理通道35-39和排组5的处理通道40-42的gpr存储数据)。

大体来说,如果混洗器电路14可接收的处理通道的数目是m,且存在w数目的处理通道,那么混洗器电路14可在n个循环中执行混洗操作,其中n=w/m,如上文所描述。虽然实例技术可利用与全通道到全通道纵横制相比更多的循环,但本发明中描述的技术应当起作用而无大多数(例如,大于90%)使用情况的较大时延,同时提供功率和尺寸的显著减小。对于其它10%使用情况,可以使用软件执行混洗操作,这导致较差的性能,但仅是针对有限情况。

在上述实例中,混洗操作在所有处理通道上发生。然而,在一些实例中,混洗指令可在指定宽度上(例如,在一组但非全部处理通道上)界定混洗操作。在此类实例中,控制器电路38可停用其上不发生混洗操作的处理通道的alu。一般来说,处理通道的数目可视为在减少。此通道减少可有用于某些操作,例如在少数处理通道上的向上或向下混洗,且可用以实施快速矩阵转置。

图4a-4r是说明混洗模式的各种实例的概念图。在图4a-4r中,说明四个处理通道以便于理解。这些实例可扩展到任何数目的处理通道。在图4a-4r中的每一个中,顶部行是源处理通道(例如,用于源处理通道的源寄存器)且底部行是目的地处理通道(例如,用于目的地处理通道的目的地寄存器)。并且,为了方便而未图示混洗器电路14。

图4a-4c说明混洗旋转向下(也被称作混洗向右或混洗向下)的实例。在图4a中说明的实例中,偏移是1,并因此每一处理通道输出到其右边的处理通道。对于第一处理通道,不存在其右边的处理通道,并且因此第一处理通道输出到最后处理通道。在此情况下,如果使用混洗器电路14,那么控制器电路38将在具有绕回的情况下致使输入端口中的每一个上的数据向右移位一。在图4b中说明的实例中,偏移是2,并因此每一处理通道输出到其偏右两个的处理通道。对于第一和第二处理通道,不存在其偏右两个的处理通道,并且因此第一处理通道输出到第二至最后处理通道且第二处理通道输出到最后处理通道。在此情况下,如果使用混洗器电路14,那么控制器电路38将在具有绕回的情况下致使输入端口中的每一个上的数据向右移位二。在图4c中说明的实例中,偏移是3,并因此每一处理通道输出到其偏右三个的处理通道。对于前三个处理通道,不存在其偏右三个的处理通道,并且因此前三个处理通道输出到最后三个处理通道。在此情况下,如果使用混洗器电路14,那么控制器电路38将在具有绕回的情况下致使输入端口中的每一个上的数据向右移位三。

在图4a-4c中说明的实例中,混洗器电路14可基于混洗模式和偏移将数据重排序。举例来说,混洗旋转向下的混洗模式指示混洗器电路14将使输入端口上的数据向右移位,且偏移(例如,基于偏移和混洗器电路14的端口数目的除法的余数)指示混洗器电路14将使数据向右移位多少。

图4d-4f说明混洗旋转向上(也被称作混洗向左或混洗向上)的实例。在图4d中说明的实例中,偏移是1,并因此每一处理通道输出到其左边的处理通道。对于最后处理通道,不存在其左边的处理通道,并且因此最后处理通道输出到第一处理通道。在此情况下,如果使用混洗器电路14,那么控制器电路38将在具有绕回的情况下致使输入端口中的每一个上的数据向左移位一。在图4e中说明的实例中,偏移是2,并因此每一处理通道输出到其偏左两个的处理通道。对于最后两个处理通道,不存在其偏左两个的处理通道,并且因此最后两个处理通道输出到前两个处理通道。在此情况下,如果使用混洗器电路14,那么控制器电路38将在具有绕回的情况下致使输入端口中的每一个上的数据向左移位二。在图4f中说明的实例中,偏移是3,并因此每一处理通道输出到其偏左三个的处理通道。对于最后三个处理通道,不存在其偏左三个的处理通道,并且因此最后三个处理通道输出到前三个处理通道。在此情况下,如果使用混洗器电路14,那么控制器电路38将在具有绕回的情况下致使输入端口中的每一个上的数据向左移位三。

在图4d-4f中说明的实例中,混洗器电路14可基于混洗模式和偏移将数据重排序。举例来说,混洗旋转向上的混洗模式指示混洗器电路14将使输入端口上的数据向左移位,且偏移(例如,基于偏移和混洗器电路14的端口数目的除法的余数)指示混洗器电路14将使数据向左移位多少。

图4g-4i说明广播混洗模式。在这些实例中,偏移指示从哪一处理通道开始广播(即,偏移是指示哪一处理通道将开始广播的索引)。在一些实例中,对于广播混洗模式,可不存在偏移,且实际上可以使用处理通道索引。然而,可有可能改为使用偏移作为处理通道索引。举例来说,在图4g中,偏移是一,并且因此来自第二处理通道的数据广播到所有其它处理通道。在图4i中,偏移是二,并且因此来自第三处理通道的数据广播到所有其它处理通道。在图4h中,偏移是三,并且因此来自第四处理通道的数据广播到所有其它处理通道。在这些实例中的每一个中,混洗器电路14可从同一排组而不是连续从不同排组接收数据,且可使输出向右或向左移位且针对每一迭代增加使输出向右或向左移位的量(由于绕回,混洗器电路14使数据移位的向右或向左的方向可能不是关键的)。混洗器电路14可在第一迭代中使数据向右移位一,且那些目的地通道可在对应gpr中存储数据。随后在下一迭代中,混洗器电路14可使数据向右移位二,且那些目的地通道可在对应gpr中存储数据等等。

图4j-4l说明混洗xor(异或)的实例。在混洗xor(也被称作蝶形混洗)中,混洗器电路14基于设计将xor功能逐位地应用于偏移值以及源处理通道或目的地处理通道的值。在此实例中,描述是基于识别源通道的目的地通道。举例来说,在图4j中,偏移值是一,其在二进制中是01。对于目的地通道0(即,00),01(偏移)与目的地通道的值(00)的xor是01。举例来说,用于目的地通道和偏移两者的第一二进制值是0,且0与0的xor是0。用于目的地通道的第二二进制值是0且用于偏移的第二二进制值是1,且0与1的xor是1。因此,结果是01。值01等于1,且目的地通道0从源通道1接收数据。

在图4j中,对于目的地通道1(即,01),01与偏移值01的xor是00(即,0),且目的地通道1从源通道0接收数据。对于目的地通道2(即,10),10与偏移值01的xor是11(即,3),且目的地通道2从源通道3接收数据。对于目的地通道3(即,11),11与偏移值01的xor是10(即,2),且目的地通道3从源通道2接收数据。

在图4k中,偏移值是2(即,二进制中的10)。在图4k中,对于目的地通道0(即,00),00与偏移值10的xor是10(即,2),且目的地通道0从源通道2接收数据。对于目的地通道1(即,01),01与偏移值10的xor是11(即,3),且目的地通道1从源通道3接收数据。对于目的地通道2(即,10),10与偏移值10的xor是00(即,0),且目的地通道2从源通道0接收数据。对于目的地通道3(即,11),11与偏移值10的xor是01(即,1),且目的地通道3从源通道1接收数据。

在图4l中,偏移值是3(即,二进制中的11)。在图4l中,对于目的地通道0(即,00),00与偏移值11的xor是11(即,3),且目的地通道0从源通道3接收数据。对于目的地通道1(即,01),01与偏移值11的xor是10(即,2),且目的地通道1从源通道2接收数据。对于目的地通道2(即,10),10与偏移值11的xor是01(即,1),且目的地通道2从源通道1接收数据。对于目的地通道3(即,11),11与偏移值11的xor是00(即,0),且目的地通道3从源通道0接收数据。

图4m-4o说明混洗向下模式。混洗向下模式类似于图4a-4c的混洗旋转向下模式。然而,在混洗向下模式中,不存在绕回。举例来说,在图4m中,偏移是一,并且因此每一目的地通道从其偏左一个的源通道接收数据。对于目的地通道3,不存在其偏左一个的源通道。因为不存在绕回,所以目的地通道3执行自我复制且从自身接收数据(例如,用于目的地通道3的源通道是源通道3)。虽然图3中未说明,但目的地通道中的每一个可以包含mux,其中如果目的地通道将执行自我复制,那么mux不输出从源通道接收的数据,且如果目的地通道将从源通道接收数据,那么mux输出来自源通道的数据。

在图4n中,偏移是二,并且因此每一目的地通道从其偏左两个的源通道接收数据。对于目的地通道3和2,不存在其偏左两个的源通道。因为不存在绕回,所以目的地通道3和2执行自我复制且从自身接收数据(例如,用于目的地通道3的源通道是源通道3且用于目的地通道2的源通道是源通道2)。在图4o中,偏移是三,并且因此每一目的地通道从其偏左三个的源通道接收数据。对于目的地通道3、2和1,不存在其偏左三个的源通道。因为不存在绕回,所以目的地通道3、2和1执行自我复制且从自身接收数据(例如,用于目的地通道3的源通道是源通道3,用于目的地通道2的源通道是源通道2,且用于目的地通道1的源通道是源通道1)。

图4p-4r说明混洗向上模式。混洗向上模式类似于图4d-4f的混洗旋转向下模式。然而,在混洗向上模式中,不存在绕回。举例来说,在图4p中,偏移是一,并且因此每一目的地通道从其偏右一个的源通道接收数据。对于目的地通道0,不存在其偏右一个的源通道。因为不存在绕回,所以目的地通道0执行自我复制且从自身接收数据(例如,用于目的地通道0的源通道是源通道0)。如上文所描述,目的地通道中的每一个可以包含mux以允许此类自我复制。

在图4q中,偏移是二,并且因此每一目的地通道从其偏右两个的源通道接收数据。对于目的地通道0和1,不存在其偏右两个的源通道。因为不存在绕回,所以目的地通道0和1执行自我复制且从自身接收数据(例如,用于目的地通道0的源通道是源通道0且用于目的地通道1的源通道是源通道1)。在图4r中,偏移是三,并且因此每一目的地通道从其偏右三个的源通道接收数据。对于目的地通道0、1和2,不存在其偏右三个的源通道。因为不存在绕回,所以目的地通道0、1和2执行自我复制且从自身接收数据(例如,用于目的地通道0的源通道是源通道0,用于目的地通道1的源通道是源通道1,且用于目的地通道2的源通道是源通道2)。

虽然在图4m-4r中,不存在绕回,但应理解,混洗器电路14可按需要在内部绕回数据以允许混洗操作完成。对于混洗向上/向下,不存在绕回,但如果源通道是无效的(例如,边界外通道)则改为自我复制。对于shuffle.xor(xor模式)和shuffle.idx(索引或广播模式)不存在界限外情况。然而,如果存在用于xor模式的任何非作用中通道,那么混洗器电路14执行自我复制。对于广播和xor混洗模式,不存在绕回。对于混洗旋转向下/向上,存在针对界限外情况的绕回。

以下是用于实施图4a-4r中说明的实例的伪码。所述伪码表示可由gpu12或由混洗器电路14执行以执行本发明中描述的技术的一些实例的代码。作为一实例,所述伪码可以是在gpu12上执行的着色器应用程序的部分,其调用混洗器电路14将执行的混洗操作。所述伪码中的语法是shfl.md[.w][.dt]dst,src0,src1。并且,下文使用与处理通道同义的术语“纤维”。

在波内的纤维之间交换数据。将数据从源纤维中的src0gpr复制到执行纤维中的dstgpr。源纤维是根据混洗模式(md)从源纤维偏移(src1)计算的。

md:混洗模式=[xor|向上|向下|rup|rdown]

rup/rdown表示旋转向上/旋转向下

[dt]:数据类型=[u16|u32];//u32默认

混洗并不关注真实数据类型。其仅区分16位或32位。

所有16/32位数据类型经处理为u16/u32。不需要类型铸造。

[w]:宽度=[w4|w8].

在指定w的情况下在4或8个纤维的群组内混洗。

在未指定w的情况下在整个波内(宽度=wave_size)混洗。

“宽度>偏移”必须由编译器或汇编器保证。

dst:将保持数据的目的地gpr

src0:将保持数据的源gpr

src1:源纤维偏移。此值必须是每波均匀的。

可为立即数(imm)或gprid

如果是imm,则:

对于32的波大小为范围在0~31中的5位数字

对于64的波大小为范围在0~63中的6位数字

对于128的波大小为范围在0~127中的7位数字

如果是gprid,则:

ugpr是优选的如果使用gpr,那么在所有纤维中的此gpr中的值必须相同

用于64的波大小的硬件逻辑描述。

图5是说明与混洗指令一起使用的操作的概念图。混洗指令可符合特定api,例如openglapi。混洗指令的一个实例是:shuffle.mode.datatyperdestrsrclaneoffset。在此实例中,shuffle.mode.datatype指示是否执行混洗向上、混洗向下、混洗广播或混洗xor,且datatype(也被称作datawidth)指示数据是16或32位。混洗器电路14可接收、重排序且输出每一处理通道的完整标量或向量值而不是小字节。rdest指示数据将存储到的对应处理通道的目的地寄存器,且rsrc指示从其检索数据的对应处理通道的源寄存器。laneoffset指示偏移。

作为一实例,响应于正由gpu12执行的程序中的混洗指令,gpu12可执行例如shfl.bfly.b32ry,rx,0x4的混洗指令的操作。在此实例中,处理通道将执行xor混洗,其中来自源处理通道的rx寄存器的值存储于目的地处理通道的ry寄存器中且偏移等于4。此操作在图5中说明,其中混洗xor偏移=4。加粗对角线箭头是用以突出过程的箭头,且虚线对角线箭头用以指示过程还在其它处理通道上发生。在此实例中,来自源处理通道的rx寄存器的值输出到目的地处理通道的ry寄存器。这意味着存储于用于每一处理通道的rx寄存器中的值仍可用,如图5中以指向下的笔直箭头说明。加粗笔直箭头突出过程,且虚线笔直箭头用以指示处理还在其它处理通道上发生。

处理通道的alu可随后执行以下操作:add.f32rx,ry,rx。在此实例中,处理通道的alu各自将相应rx寄存器中的值与来自相应ry寄存器的值相加且将结果存储于相应rx寄存器中。因为ry寄存器中的值来自另一处理通道的rx寄存器,所以相加操作可视为每一alu将来自两个处理通道的数据值相加。

接下来,每一处理通道可执行以下操作:shfl.bfly.b32ry,rx,0x2。类似于上文,在此实例中,处理通道将执行xor混洗,其中来自源处理通道的rx寄存器的值存储于目的地处理通道的ry寄存器中,但偏移等于2。此操作在图5中说明,其中混洗xor偏移=2。处理通道的alu可随后执行以下操作:add.f32rx,ry,rx。在此实例中,处理通道的alu各自将相应rx寄存器中的值与来自相应ry寄存器的值相加且将结果存储于相应rx寄存器中。在此实例中,ry寄存器存储两个处理通道的总和的值,且rx寄存器在操作的执行之前存储两个处理通道的总和的值。因此,在求和指令的执行之后,存储于相应rx寄存器中的所得值是四个处理通道的总和(再次,此过程在每一处理通道中发生)。

每一处理通道可随后执行以下操作:shfl.bfly.b32ry,rx,0x1。类似于上文,在此实例中,处理通道将执行xor混洗,其中来自源处理通道的rx寄存器的值存储于目的地处理通道的ry寄存器中,但偏移等于1。此操作在图5中说明,其中混洗xor偏移=1。处理通道的alu可随后执行以下操作:add.f32rx,ry,rx。在此实例中,处理通道的alu各自将相应rx寄存器中的值与来自相应ry寄存器的值相加且将结果存储于相应rx寄存器中。在此实例中,ry寄存器存储四个处理通道的总和的值,且rx寄存器在操作的执行之前存储四个处理通道的总和的值。因此,在求和指令的执行之后,存储于相应rx寄存器中的所得值是八个处理通道的总和(再次,此过程在每一处理通道中发生)。

最后,处理通道中的每一个的rx寄存器中的每一个可存储指示来自处理通道中的每一个的数据的总和的同一值。在此实例中,混洗操作可以允许所有处理通道上的数据的求和。根据本发明中描述的技术,混洗器电路14可促进此混洗以允许此求和且不需要昂贵的全通道到全通道纵横制,而是在混洗器电路14内的小得多的纵横制(例如,8x8纵横制)。

以下是用于执行图5中说明的实例的伪码。

使用实例:

图6是说明处理数据的实例方法的流程图。举例来说,图6说明用于执行混洗操作的实例。控制器电路38配置mux48以将混洗器电路14的输入端口耦合到排组的相应处理通道(60)。以此方式,作为一个实例,混洗器电路14可从处理通道的源子组接收数据(62)。举例来说,混洗器电路14可从仅一个排组接收数据。

混洗器电路14可响应于指令而将从所述排组的处理通道接收的数据重排序,所述指令指示处理通道中的至少一些(例如,处理通道中的每一个或处理通道的子组)将数据输出到处理通道中的另一个(例如,响应于混洗指令)(64)。举例来说,控制器电路38可基于偏移确定用于所述多个排组中的一个的排组标识以及具有所确定排组标识的排组的处理通道的通道标识。控制器电路38可致使混洗器电路14的开关互连以使得混洗器电路14的第一输入端口输出到混洗器电路14的输出端口,所述输出端口输出到所述确定排组中具有所确定通道标识的处理通道。控制器电路38可将偏移除以混洗器电路14中的输入或输出端口的数目。余数和混洗模式可向控制器电路38指示使输入端口上的数据向右或向左移位的程度。控制器电路38致使混洗器电路14的开关将输入端口互连到相距余数数目个端口的输出端口(例如,如果余数是三,那么第一输入端口输出到第四输出端口)。

demux54将来自混洗器电路14的经重排序输出广播到排组中的每一个(66)。以此方式,混洗器电路14将经重排序数据输出到处理通道。然而,并非全部处理通道可存储接收的数据。举例来说,处理通道的目的地子组(例如,少于全部处理通道)可将经重排序数据存储于对应寄存器中。在一些实例中,控制器电路38可以允许处理通道的目的地子组的对应寄存器存储经重排序数据。控制器电路38可基于偏移和从混洗器电路14的第一输入端口接收输出的处理通道的通道标识而确定处理通道的哪些对应gpr允许存储。

控制器电路38和混洗器电路14可重复这些操作直到混洗操作完成为止。举例来说,混洗器电路14可从处理通道的连续源子组接收数据(例如,mux48可将连续排组的处理通道耦合到混洗器电路14的输入)。混洗器电路14可将从连续源子组接收的数据重排序(例如,基于偏移与混洗器电路14的端口数目的除法的余数使输入端口上到输出端口的数据移位)。混洗器电路14可将经重排序数据输出到处理通道,其中处理通道的连续目的地子组将接收的经重排序数据存储于对应寄存器中。

在一或多个实例中,所描述功能可以硬件、软件、固件或其任何组合来实施。如果以软件实施,那么所述功能可作为一或多个指令或代码存储在计算机可读媒体上且由基于硬件的处理单元执行。计算机可读媒体可包含计算机可读存储媒体,其对应于例如数据存储媒体等有形媒体。以此方式,计算机可读媒体通常可以对应于非暂时性的有形的计算机可读存储媒体。数据存储媒体可为可由一或多个计算机或者一或多个处理器存取以检索用于实施本发明中描述的技术的指令、代码和/或数据结构的任何可用媒体。计算机程序产品可包含计算机可读媒体。

借助于实例而非限制,此类计算机可读存储媒体可包含ram、rom、eeprom、cd-rom或其它光盘存储装置、磁盘存储装置或其它磁性存储装置、快闪存储器,或可用以存储呈指令或数据结构形式的所要程序代码且可由计算机存取的任何其它媒体。应理解,计算机可读存储媒体和数据存储媒体并不包括载波、信号或其它暂时性媒体,而是针对非暂时性有形存储媒体。如本文所使用的磁盘及光盘包含压缩光盘(cd)、激光光盘、光学光盘、数字多功能光盘(dvd)、软磁盘及蓝光光盘,其中磁盘通常是以磁性方式再现数据,而光盘是用激光以光学方式再现数据。以上各项的组合也应包含在计算机可读媒体的范围内。

指令可以由一或多个处理器执行,所述一或多个处理器例如是一或多个数字信号处理器(dsp)、通用微处理器、专用集成电路(asic)、现场可编程逻辑阵列(fpga)或其它等效的集成或离散逻辑电路。因此,如本文中所使用的术语“处理器”可指上述结构或适合于实施本文中所描述的技术的任一其它结构中的任一者。另外,在一些方面中,本文中所描述的功能性可在经配置以用于编码和解码的专用硬件和/或软件模块内提供,或并入在组合编解码器中。而且,所述技术可完全实施于一或多个电路或逻辑元件中。

本发明的技术可实施于广泛多种装置或设备中,包含无线手持机、集成电路(ic)或一组ic(例如,芯片组)。本发明中描述各种组件、模块或单元是为了强调经配置以执行所公开的技术的装置的功能方面,但未必需要由不同硬件单元实现。确切地,如上文所描述,各种单元可结合合适的软件和/或固件组合在编解码器硬件单元中,或由互操作硬件单元的集合来提供,所述硬件单元包含如上文所描述的一或多个处理器。

已经描述各种实例。这些及其它实例在所附权利要求书的范围内。

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