可变波阵面大小的制作方法

文档序号:18516466发布日期:2019-08-24 09:29阅读:348来源:国知局
可变波阵面大小的制作方法

相关技术的描述

图形处理单元(gpu)是被配置为执行图形处理任务的复杂集成电路。例如,gpu可以执行最终用户应用程序(例如视频游戏应用程序)所需的图形处理任务。gpu也越来越多地用于执行与图形无关的其他任务。gpu可以是分立的装置,或者可以与另一处理器(例如中央处理单元(cpu))包括在同一装置中。

在许多应用中,诸如gpu中的图形处理,对一系列工作项(也可以称为线程)进行处理,以便输出最终结果。在许多现代并行处理器中,例如,单指令多数据(simd)核中的处理器同步地执行一组工作项。由单独的处理器处理的多个相同的同步工作项被称为波阵面或线程束(warp)。

在处理期间,一个或多个simd核同时执行多个波阵面。当波阵面中的所有工作项都完成处理时,波阵面的执行终止。每个波阵面都包括使用相同的指令集并行处理的多个工作项。在一些情况下,波阵面中的工作项数量与simd核的执行单元数量不匹配。在一个实施方案中,simd核的每个执行单元都是算术逻辑单元(alu)。当波阵面中的工作项数量与simd核的执行单元数量不匹配时,确定如何调度指令以供执行可能具有挑战性。

附图说明

通过结合附图参考以下描述,可以更好地理解本文描述的方法和机制的优点,在这些附图中:

图1是计算系统的一个实施方案的框图。

图2是gpu的一个实施方案的框图。

图3是一组矢量通用寄存器(vgpr)的一个实施方案的框图。

图4示出了示例波阵面和示例指令序列的一个实施方案。

图5示出了处理器的第一操作模式的一个实施方案的图解。

图6示出了处理器的第二操作模式的一个实施方案的图解。

图7是示出用于在处理器上调度指令的方法的一个实施方案的概括流程图。

图8是示出用于确定在并行处理器中使用哪种操作模式的方法的一个实施方案的概括流程图。

图9是示出用于为并行处理器利用不同操作模式的方法的一个实施方案的概括流程图。

具体实施方式

在以下描述中,阐述了许多具体细节以提供对本文提出的方法和机制的透彻理解。然而,本领域的普通技术人员应该认识到,可以在没有这些具体细节的情况下实施各种实施方案。在一些情况下,未详细示出熟知的结构、部件、信号、计算机程序指令和技术以避免使本文描述的方法模糊。应当理解,为了说明的简单和清楚,图中所示的元件不一定按比例绘制。例如,一些元件的尺寸可能相对于其他元件被夸大。

公开了用于在处理器上处理可变波阵面大小的各种系统、设备、方法和计算机可读介质。当在第一模式下操作时,处理器在继续到着色器程序的下一指令之前在波阵面的多个部分执行相同的指令。当在第二模式下操作时,处理器在波阵面的第一部分执行一组指令。在第二模式中,当处理器在波阵面的第一部分完成该组指令的执行时,处理器在波阵面的第二部分执行该组指令,依此类推,直到波阵面的所有部分都已经被处理。然后,处理器继续执行着色器程序的后续指令。

在一个实施方案中,在代码序列内声明某指示,该指示指定对程序的给定区域使用哪种模式。在另一个实施方案中,编译器在生成可执行代码时生成指示,该指示指定处理器操作模式。在另一个实施方案中,处理器包括控制单元,该控制单元确定处理器操作模式。

现在参考图1,示出了计算系统100的一个实施方案的框图。在一个实施方案中,计算系统100包括耦合到存储器150的片上系统(soc)105。soc105也可以称为集成电路(ic)。在一个实施方案中,soc105包括处理单元115a-n、输入/输出(i/o)接口110、共享高速缓存120a-b、结构125、图形处理单元(gpu)130和存储器控制器140。soc105还可以包括图1中未示出以免使附图模糊的其他部件。处理单元115a-n代表任何数量和类型的处理单元。在一个实施方案中,处理单元115a-n是中央处理单元(cpu)核。在另一个实施方案中,处理单元115a-n中的一个或多个是其他类型的处理单元(例如,专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp))。处理单元115a-n耦合到共享高速缓存120a-b和结构125。

在一个实施方案中,处理单元115a-n被配置为执行特定指令集架构(isa)的指令。每个处理单元115a-n都包括一个或多个执行单元、高速缓冲存储器、调度器、分支预测电路等。在一个实施方案中,处理单元115a-n被配置为执行系统100的主控制软件,诸如操作系统。通常,在使用期间由处理单元115a-n执行的软件可以控制系统100的其他部件以实现系统100的期望功能。处理单元115a-n还可以执行其他软件,诸如应用程序。

gpu130包括至少计算单元145a-n,这些计算单元表示用于图形或通用处理的任何数量和类型的计算单元。计算单元145a-n也可以称为“着色器阵列”、“着色器引擎”、“单指令多数据(simd)单元”或“simd核”。每个计算单元145a-n包括多个执行单元。gpu130耦合到共享高速缓存120a-b和结构125。在一个实施方案中,gpu130被配置为执行图形管线操作,诸如绘制命令、像素操作、几何计算以及用于将图像渲染到显示器的其他操作。在另一个实施方案中,gpu130被配置为执行与图形无关的操作。在另一个实施方案中,gpu130被配置为既执行图形操作也执行与图形无关的操作。

gpu130被配置为接收着色器程序的指令和波阵面以供执行。在一个实施方案中,gpu130被配置为在不同模式下操作。在一个实施方案中,每个波阵面中的工作项的数量大于gpu130中的执行单元的数量。

在一个实施方案中,响应于检测到第一指示,gpu130调度用于在第一波阵面的第一部分和第二部分执行的第一指令,然后调度用于在第一波阵面的第一部分执行的第二指令。对于着色器程序的其他指令以及对于其他波阵面,只要检测到第一指示,gpu130就遵循该模式。注意,“调度指令”也可以称为“发出指令”。根据该实施方案,可以用软件指定第一指示,或者可以由gpu130基于一个或多个操作条件生成第一指示。在一个实施方案中,第一指示是使gpu130在第一模式下操作的命令。

在一个实施方案中,响应于未检测到第一指示,gpu130调度用于在第一波阵面的第一部分执行的第一指令和第二指令,然后调度用于在第一波阵面的第二部分执行的第一指令。对于着色器程序的其他指令以及对于其他波阵面,只要未检测到第一指示,gpu130就遵循该模式。

i/o接口110耦合到结构125,并且i/o接口110代表任何数量和类型的接口(例如,外围部件互连(pci)总线、pci扩展(pci-x)、pcie(pciexpress)总线、千兆以太网(gbe)总线、通用串行总线(usb))。各种类型的外围装置可以耦合到i/o接口110。此类外围装置包括(但不限于)显示器、键盘、鼠标、打印机、扫描仪、操纵杆或其他类型的游戏控制器、媒体记录装置、外部存储装置、网络接口卡等。

soc105耦合到存储器150,该存储器包括一个或多个存储器模块。每个存储器模块都包括安装在其上的一个或多个存储器装置。在一些实施方案中,存储器150包括安装在母板或其他载体上的一个或多个存储器装置,soc105也安装在该母板或其他载体上。实施的ram可以是静态ram(sram)、动态ram(dram)、电阻ram(reram)、相变ram(pcram)或任何其他易失性或非易失性ram。用于实施存储器150的dram的类型包括(但不限于)双倍数据速率(ddr)dram、ddr2dram、ddr3dram等。尽管未在图1中明确示出,但是soc105还可以包括处理单元115a-n和/或计算单元145a-n内部的一个或多个高速缓冲存储器。在一些实施方案中,soc105包括由处理单元115a-n和计算单元145a-n使用的共享高速缓存120a-b。在一个实施方案中,高速缓存120a-b是包括高速缓存控制器的高速缓存子系统的一部分。

在各种实施方案中,计算系统100可以是计算机、膝上型计算机、移动装置、服务器或各种其他类型的计算系统或装置中的任一种。注意,计算系统100和/或soc105的部件的数量可以随实施方案而变化。每个部件/子部件可以有比图1中所示的数量更多或更少。例如,在另一个实施方案中,soc105可以包括耦合到多个存储器的多个存储器控制器。还应注意,计算系统100和/或soc105可包括图1中未示出的其他部件。另外,在其他实施方案中,计算系统100和soc105可以按图1所示的方式之外的其他方式构造。

现在转向图2,示出了图形处理单元(gpu)200的一个实施方案的框图。在一个实施方案中,gpu200包括至少simd210a-n、分支和消息单元240、调度器单元245、指令缓冲器255和高速缓存260。注意,gpu200还可以包括图2中未示出以免使附图模糊的其他逻辑。还应注意,其他处理器(例如,fpga、asic、dsp)可以包括gpu200中所示的电路系统。

在一个实施方案中,gpu200被配置为在不同模式下操作,以在不同大小的波阵面处理着色器程序的指令。gpu200利用给定模式来优化性能、功耗和/或其他因素,这取决于正在处理的工作负载的类型和/或每个波阵面中的工作项的数量。在一个实施方案中,每个波阵面都包括多个工作项,这些工作项的数量大于simd210a-n中的通道215a-n、220a-n和225a-n的数量。在该实施方案中,gpu200基于gpu200的操作模式来不同地处理波阵面。在另一个实施方案中,gpu200基于一个或多个检测到的条件来不同地处理波阵面。simd210a-n的每个通道215a-n、220a-n和225a-n也可以称为“执行单元”。

在一个实施方案中,gpu200接收用于具有多个工作项的波阵面的多个指令,这些工作项的数量大于simd210a-n中的通道的总数。在该实施方案中,当gpu200处于第一模式时,gpu200在继续到第二指令之前在波阵面的多个部分执行第一指令。对于后续指令,只要gpu200处于第一模式,gpu200就继续该执行模式。在一个实施方案中,第一模式可以由软件生成的声明来指定。如果gpu200处于第二模式,则gpu200在继续到波阵面的第二部分之前在波阵面的第一部分执行多个指令。当gpu200处于第二模式时,gpu200在波阵面的不同部分之间共享矢量通用寄存器(vgpr)230a-n的一部分。另外,当gpu200处于第二模式时,如果掩码250的执行掩码指出波阵面的给定部分被临时遮掩,则gpu200不执行针对波阵面的给定部分的指令。

在另一个实施方案中,如果波阵面大小大于simd的数量,则gpu200确定程序的高速缓存260的高速缓存未命中率。如果高速缓存未命中率小于阈值,则gpu200在继续到第二指令之前在波阵面的多个部分执行第一指令。对于后续指令,只要确定或预测高速缓存未命中率小于阈值,gpu200就继续该执行模式。阈值可以作为字节数、作为高速缓存260的百分比、或作为任何其他合适的度量来指定。如果高速缓存未命中率大于或等于阈值,则gpu200在波阵面的第二部分执行多个指令之前在波阵面的第一部分执行多个指令。另外,如果高速缓存未命中率大于或等于阈值,则gpu200在波阵面的不同部分之间共享矢量通用寄存器(vgpr)230a-n的一部分,并且如果执行掩码指出给定部分被遮掩,则gpu200跳过针对波阵面的给定部分的指令。

应注意,字母“n”当在本文中显示在各种结构旁边时,旨在一般性地指出该结构的任何数量的元件(例如,任何数量的simd210a-n)。另外,图2内的使用字母“n”的不同参考(例如,simd210a-n和通道215a-n)并不旨在指出提供相同数量的不同元件(例如,simd210a-n的数量可以与通道215a-n的数量不同)。

现在参考图3,示出了一组矢量通用寄存器(vgpr)300的一个实施方案的框图。在一个实施方案中,vgpr300包括在gpu200(图2)的simd210a-n中。取决于实施方案,vgpr300可包括任何数量的寄存器。

如图3所示,vgpr300包括用于第一波阵面的vgpr305,用于第二波阵面的vgpr310,以及用于其他数量的波阵面的任何数量的其他vgpr。出于本讨论的目的,假设第一波阵面和第二波阵面具有2*n个工作项,其中n是正整数,并且n随实施方案而变化。在一个实施方案中,n等于32。vgpr305包括具有专用vgpr的区域和共享的vgpr区域315。类似地,vgpr310包括具有专用vgpr的区域和共享的vgpr区域320。

在一个实施方案中,如果主机gpu(例如,gpu200)处于第一模式,则共享的vgpr315和共享的vgpr310不分别在第一波阵面和第二波阵面的不同部分之间共享。然而,当主机gpu处于第二模式时,则共享的vgpr315和共享的vgpr310分别在第一波阵面和第二波阵面的不同部分之间共享。在其他实施方案中,共享或不共享的实现方式基于检测到第一指示,而不是基于第一模式或第二模式。第一指示可以由软件生成,基于高速缓存未命中率生成,或者基于一个或多个其他操作条件生成。

现在转向图4,示出了示例波阵面405和示例指令序列410的一个实施方案。波阵面405旨在示出根据一个实施方案的波阵面的一个示例。波阵面405包括2*n个工作项,其中“n”是正整数,并且其中“n”是矢量单元420中的通道425a-n的数量。矢量单元420也可以称为simd单元或并行处理器。波阵面405的第一部分包括工作项w0至wn-1,而波阵面405的第二部分包括工作项wn至w2n-1。波阵面405的单个部分旨在在给定指令周期内在矢量单元420的通道425a-n上执行。在其他实施方案中,波阵面405可包括其他数量的部分。

在一个实施方案中,n是32,并且每个波阵面的工作项数量是64。在其他实施方案中,n可以是其他值。在当n是32的实施方案中,矢量单元420还包括32个通道,这些通道被示为通道425a-n。在其他实施方案中,矢量单元420可包括其他数量的通道。

指令序列410说明指令序列的一个示例。如图4所示,指令序列410包括指令415a-d,这些指令表示着色器程序的任何数量和类型的指令。出于本讨论的目的,应该假设指令415a是指令序列410的第一指令,指令415b是第二指令,指令415c是第三指令,指令415d是第四指令。在其他实施方案中,指令序列可以具有其他数量的指令。波阵面405、指令序列410和矢量单元420在下面针对图5和图6继续的讨论中被重复使用。

现在参考图5,示出了处理器的第一操作模式的一个实施方案的图解。对图5的讨论是关于图4的讨论的继续。在一个实施方案中,波阵面的大小是矢量单元420的大小的两倍。在另一个实施方案中,波阵面的大小是矢量单元420的大小的整数倍。在这些实施方案中,处理器可以实现不同的操作模式,用于确定如何使用矢量单元420来执行波阵面的工作项。

在第一操作模式中,每个指令在波阵面的不同子集执行,之后在不同子集执行下一指令。例如,在矢量单元420的通道425a-n上的第一指令周期期间,对波阵面的前半部分(即,工作项w0至wn-1)执行指令415a,然后,在通道425a-n上的第二指令周期期间,对第一波阵面的后半部分(即,工作项wn至w2n-1)执行指令415a。例如,在第一指令周期期间,工作项w0可以在通道425a上执行,工作项w1可以在通道425b上执行,依此类推。

然后,在通道425a-n上的第三指令周期期间,对波阵面的前半部分执行指令415b,然后,在通道425a-n上的第四指令周期期间,对波阵面的后半部分执行指令415b。接下来,在通道425a-n上的第五指令周期期间,对波阵面的前半部分执行指令415c,然后,在通道425a-n上的第六指令周期期间,对波阵面的后半部分执行指令415c。然后,在通道425a-n上的第七指令周期期间,在矢量单元420的通道425a-n上,对波阵面的前半部分执行指令415d,然后,在通道425a-n上的第八指令周期期间,在矢量单元420的通道425a-n上,对波阵面的后半部分执行指令415d。出于本讨论的目的,可以假设第二指令周期在第一指令周期之后,第三指令周期在第二指令周期之后,依此类推。

现在转向图6,示出了处理器的第二操作模式的一个实施方案的图解。对图6的讨论是关于图5的讨论的继续。在第二操作模式中,在波阵面的相同部分执行整个指令序列410,之后,在波阵面的下一部分执行整个指令序列410。

例如,在第一指令周期内,在矢量单元420的通道425a-n上,对波阵面的前半部分(即,工作项w0至wn-1)执行指令415a。然后,在第二指令周期内,在通道425a-n上,对波阵面的前半部分执行指令415b。接下来,在第三指令周期内,在通道425a-n上,对波阵面的前半部分执行指令415c。然后,在第四指令周期内,在通道425a-n上,对波阵面的前半部分执行指令415d。

接下来,在波阵面的后半部分执行指令序列410。因此,在第五指令周期内,在矢量单元420的通道425a-n上,对波阵面的后半部分(即,工作项wn至w2n-1)执行指令415a。然后,在第六指令周期内,在通道425a-n上,对波阵面的后半部分执行指令415b。接下来,在第七指令周期内,在通道425a-n上,对波阵面的后半部分执行指令415c。然后,在第八指令周期内,在通道425a-n上,对波阵面的后半部分执行指令415d。

在另一个实施方案中,如果某个波阵面具有4*n个工作项,则可以在该波阵面的第一四分之一上执行指令序列410,然后可以在该波阵面的第二四分之一上执行指令序列410,接着是在该波阵面的第三四分之一上,然后是在该波阵面的第四四分之一上。对于第二操作模式,可以以类似的方式来使用其他大小的其他波阵面和/或具有其他数量的通道的矢量单元。

现在参考图7,示出了用于在处理器上调度指令的方法700的一个实施方案。出于讨论的目的,该实施方案中的步骤和图8-9中的步骤按顺序示出。然而,应注意,在所描述的方法的各种实施方案中,所描述的要素中的一个或多个以与所示顺序不同的顺序同时执行,或者被完全省略。还根据需要执行其他附加要素。本文描述的各种系统、设备或计算装置中的任一个都被配置为实现方法700。

处理器接收波阵面和着色器程序的多个指令以供执行(框705)。在一个实施方案中,处理器包括至少多个执行单元、调度器、高速缓存和多个gpr。在一个实施方案中,处理器是gpu。在其他实施方案中,处理器是各种其他类型的处理器(例如,dsp、fpga、asic、多核处理器)中的任一种。在一个实施方案中,波阵面中的工作项的数量大于处理器的执行单元的数量。例如,在一个实施方案中,波阵面包括64个工作项,并且处理器包括32个执行单元。在该实施方案中,波阵面中的工作项的数量等于执行单元的数量的两倍。在其他实施方案中,波阵面可以包括其他数量的工作项和/或处理器可以包括其他数量的执行单元。在一些情况下,处理器接收多个供执行的波阵面。在这些情况下,可以针对多个波阵面多次实现方法700。

接下来,处理器确定是否已检测到第一指示(条件框710)。在一个实施方案中,第一指示是在软件指令内声明的设置或参数,其中该设置或参数指定处理器要使用的操作模式。在另一个实施方案中,基于波阵面的高速缓存未命中率来生成第一指示。在其他实施方案中,其他类型的指示是可能的并且是可预期的。

如果检测到第一指示(条件框710,“是”支线),则处理器调度多个执行单元以在波阵面的第一部分和第二部分执行第一指令,然后调度多个执行单元以在波阵面的第一部分执行第二指令(框715)。对多个指令的其余部分,只要检测到第一指示,处理器就可以遵循该相同的指令调度模式。如果未检测到第一指示(条件框710,“否”支线),则处理器调度多个执行单元以在波阵面的第一部分执行第一指令和第二指令,然后调度多个执行单元以在波阵面的第二部分执行第一指令(框720)。对于多个指令的其余部分,只要未检测到第一指示,处理器就可以遵循该相同的指令调度模式。而且,如果未检测到第一指示,则处理器在波阵面的第一部分和波阵面的第二部分之间共享gpr的一部分(框725)。在框715和725之后,方法700结束。

现在转向图8,示出了用于确定在并行处理器中使用哪种操作模式的方法800的一个实施方案。处理器的控制单元确定波阵面的高速缓存未命中率(框805)。根据该实施方案,控制单元可以在框805中确定波阵面的一部分或整个波阵面的高速缓存未命中率。根据该实施方案,控制单元使用硬件和/或软件的任何合适组合来实现。在一个实施方案中,控制单元预测波阵面的高速缓存未命中率。在另一个实施方案中,控制单元接收由软件生成的指示,该指示指定波阵面的高速缓存未命中率。接下来,控制单元确定波阵面的高速缓存未命中率是否小于阈值(条件框810)。替代性地,如果控制单元接收由软件生成的指示,则该指示可以指定高速缓存未命中率是否小于阈值。在一个实施方案中,阈值是可编程的。在另一个实施方案中,阈值是预定的。

如果波阵面的高速缓存未命中率小于阈值(条件框810,“是”支线),则处理器在处理波阵面时利用第一操作模式(框815)。在一个实施方案中,第一操作模式涉及在移动到着色器程序中的下一指令之前在波阵面的所有部分发出每个指令。如果波阵面的高速缓存未命中率大于或等于阈值(条件块810,“否”支线),则处理器在处理波阵面时利用第二操作模式(框820)。在一个实施方案中,第二操作模式涉及在波阵面的第一部分执行一组指令,然后在波阵面的第二部分执行同一组指令,依此类推,直到波阵面的所有部分都已经被处理。在框815和820之后,方法800结束。

现在参考图9,示出了用于利用并行处理器的不同操作模式的方法900的另一实施方案。处理器的控制单元确定处理器的操作模式(框905)。根据该实施方案,控制单元使用硬件和/或软件的任何合适组合来实现。控制单元用于确定选择哪种操作模式的标准可以随实施方案而变化。在图8中在关于方法800的讨论中描述了可以使用的标准的一个示例。可以用于选择处理器操作模式的标准的其他示例是可能的并且是可预期的。

如果控制单元选择第一操作模式(条件框910,“第一”支线),则处理器不在正在由处理器处理的波阵面的不同子集之间共享寄存器(框915)。否则,如果控制单元选择第二操作模式(条件框910,“第二”支线),则控制单元在正在由处理器处理的波阵面的不同子集之间共享一个或多个寄存器(框920)。例如,在一个实施方案中,共享寄存器涉及处理器对第一组指令,对于波阵面的第一部分,使用寄存器文件的共享部分。然后,处理器将寄存器文件的共享部分重新用于波阵面的第二部分。如果波阵面具有两个以上的部分,则处理器将寄存器文件的共享部分重新用于波阵面的附加部分。在框920之后,方法900结束。

注意,在一些实施方案中,处理器可以具有两种以上的操作模式。在这些实施方案中,可以应用条件框910,使得操作模式的第一子集(例如,第一模式、第三模式、第七模式)遵循“第一”支线,操作模式的第二子集(例如,第二模式、第四模式、第五模式、第六模式)遵循图7中所示的“第二”支线。替代性地,在另一个实施方案中,寄存器文件的共享部分的大小可以根据不同的操作模式而变化。例如,对于第二模式,共享第一数量的寄存器,对于第三模式,共享第二数量的寄存器,对于第四模式,共享第三数量的gpr,以此类推。

在各种实施方案中,软件应用程序的程序指令用于实现前面描述的方法和/或机制。程序指令以高级编程语言(例如c)描述硬件的行为。替代性地,使用硬件设计语言(hdl),例如verilog。程序指令存储在非暂时性计算机可读存储介质上。有多种类型的存储介质可用。存储介质在使用期间可由计算系统访问,以将程序指令和附带数据提供给计算系统以供程序执行。计算系统包括至少一个或多个存储器以及被配置为执行程序指令的一个或多个处理器。

应该强调的是,上述实施方案仅是实现方式的非限制性示例。一旦完全理解上述公开内容,许多变化和修改对于本领域技术人员将变得显而易见。旨在将以下权利要求解释为包含所有这些变化和修改。

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