用于并行处理器的高效断言执行的制作方法

文档序号:6351237阅读:187来源:国知局
专利名称:用于并行处理器的高效断言执行的制作方法
技术领域
本发明总体上涉及并行处理领域,并且,更具体地,涉及用于并行处理器的高效断言(predicated)执行。
背景技术
断言执行是用于有条件地执行单独的指令操作的机制,典型地,通过有条件地提交或忽略执行指令的结果,从而为条件分支转移(branch)提供选择。在并行处理器中,例如其中并行的线程或数据通道组执行共同的指令流的单指令多线程(SMT)和SMD并行处理器,每个线程或数据通道中的断言执行能够极大地提高其中线程组的每个线程可独立使用不同的执行路径的分散的分支转移代码的性能。在现有的并行处理器设计中,每个线程或数据通道中的断言执行均采用一组4位(bit)的条件码(CC)寄存器用于每个线程或通道实例(instance),并且指令具有包括若干指令位来选择一个CC寄存器以及附加位以编码比较条件的保护(guard);只有针对该线程或通道的条件求值为真(True),保护指令才会提交它的针对线程或者通道的结果,否则无效。此外,很多指令可选地为每个线程或数据通道对CC寄存器进行写入,需要若干指令位以编码目标CC寄存器,加上一个位以使能/无效所述寄存器写操作。作为示例,现有的SMT并行线程处理器的每个线程均具有四个4位的CC寄存器,因此指令保护包括7个位两个位用于选择四个CC寄存器中的一个,以及五个位用于编码比较测试。存在24种可能的CC寄存器的测试。对于可选地写CC寄存器的指令,需要三个个位以编码目标CC寄存器和写使能。现有方式的一个问题在于,每线程的状态(每线程16位用于四个寄存器)以及指令编码空间(每个指令7位用于保护条件,加上每指令3位用于写CC寄存器的任意指令)方面的开销。注意到,几乎每个指令都必须具有保护域,因此减小编码开销是关注的重点。CC寄存器的每线程16位的开销乘以并行线程或数据通道实例的数量,一般每个SIMT或SIMD并行处理器具有数百个,并且进一步乘以每芯片数以十记的并行处理器的数量。每线程的寄存器状态造成芯片面积和能耗的开销。如前所述,本技术领域需要的是一种机制,用于最小化与断言执行相关联的每线程的状态,最小化编码断言执行所需的位的指令,并最小化实现断言执行所需的指令和周期的数量
发明内容
本发明的一个实施例提供了用于访问与线程组相关联的断言信息的方法。所述方法包括以下步骤接收用于由所述线程组执行的第一指令,其中所述第一指令指定第一源操作数标识符、操作以及第一目标断言标识符;对于所述线程组中的每一个线程,通过对由所述第一源操作数标识符所标识的第一源操作数中的数据应用所述操作来计算断言结果;以及,在第一断言寄存器中存储所述断言结果,所述断言寄存器与所述线程相关联并且由所述第一目标断言标识符所标识,其中对于所述线程组中的每一个线程,所述第一源寄存器以及所述第一断言寄存器不同。 有利地,本文所描述的发明提供一种用于开销高效断言执行的机制,其使SMT/SIMD并行处理器中的每线程状态最小化。此外,断言的可选否定进一步节省了每线程的附加位,否则将需要其来存储否定断言。进一步,可生成用于并行多线程程序的条件程序域的高效代码。


因此,可以详细地理解上述本发明的特征,并且可以参考实施例得到对如上面所概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅用于示意性地表示本发明的典型实施例,因此不应被认为是对本发明范围的限制,本发明可以具有其他等效的实施方式。图I为示出了经配置以实现本发明一个或多个方面的计算机系统的框图;图2为根据本发明一个实施例的,用于图I中计算机系统的并行处理子系统的框图;图3A为根据本发明一个实施例的,图2中一个PPU内的GPC的框图;图3B为根据本发明一个实施例的,图2中一个PPU内分区单元的框图;图3C为根据本发明一个实施例的,图3A中部分SPM的框图;图4为根据本发明一个实施例的,图3C中断言寄存器堆(file)的较详细示意图;以及图5为根据本发明一个实施例的,用于为条件(断言)指令的执行而在断言寄存器堆中设置断言和访问断言的方法步骤的流程图。
具体实施例方式在下面的描述中,将阐述大量的详细内容以提供对本发明更深入的理解。然而,本技术领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他例子中,没有描述公知的特征以避免对本发明造成混淆。系统概述图I为示出了经配置以实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理单元(CPU) 102和通过互连路径通信的系统存储器104,所述互连路径可包括存储器桥105。存储器桥105可以是诸如北桥芯片,通过总线或其他通信路径106 (诸如超传输(HyperTransport)链路)连接到I/O (输入/输出)桥107。I/O桥107,其可以是诸如南桥芯片,从一个或多个用户输入设备108(诸如键盘、鼠标)接收用户输入并且通过路径106和存储器桥105将所述输入转发到CPU102。并行处理子系统112通过总线或其他通信路径113 (诸如PCI Express、加速图形端口或超传输链路)耦合到存储器桥105 ;在一个实施例中,并行处理子系统112是将像素传递到显示设备110 (诸如基于常见CRT或IXD的监视器)的图形子系统。系统盘114也连接到I/O桥107。开关116提供I/O桥与其他诸如网络适配器118和各种外插卡120和121的组件之间的连接。其他组件(未明确示出),包括USB或其他端口连接、CD驱动器、DVD驱动器、胶片录制设备及类似组件,也可以连接到I/O桥107。使图I中所示各种组件互连的通信路径可以采用任何适合的协议实现,例如PCI (外部组件互连)、PCI-Express、AGP (加速图形端口 )、超传输或者其他总线或点到点通信协议,并且不同设备间的连接可采用本技术领域已知的不同协议。在一个实施例中,并行处理子系统112包含被优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含被优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将详细描述。在另一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成起来,例如所述存储器桥105、CPU 102以及I/O桥107,以形成片上系统(SoC)。应该理解,本文所示系统是示例性的,变化和修改都是可能的。连接拓扑,包括桥 的数量和布置、CPU 102的数量以及并行处理子系统112的数量,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU 102而不是通过桥,并且其他设备通过存储器桥105以及CPU 102与系统存储器104通信。在其他可选拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU 102,而不是连接到存储器桥105。在其他实施例中,I/0桥107和存储器桥105可能被集成到单个芯片上。大量实施例可以包括两个或多个CPU102以及两个或多个并行处理系统112。本文所示的特定组件是可选的;例如,任意数量的外插卡或外设都可能得到支持。在一些实施例中,开关116被去掉,网络适配器118和外插卡120、121直接连接到I/O桥107。图2示出根据本发明的一个实施例的并行处理子系统112。如图所示,并行处理子系统112包括一个或多个并行处理单元(PTOs) 202,每个并行处理单元202都耦合到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U彡I。(本文中,类似对象的多个实体以标识该对象的参考数字和需要时标识所述实体的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,例如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。再参考图I,在一些实施例中,并行处理子系统112的一些或所有PPU202是具有渲染管线的图形处理器,它可以被配置为执行与以下各项相关的各种任务经由存储器桥105和总线113从CPU 102和/或系统存储器104所提供的图形数据生成像素数据;与本地并行处理存储器204(可被用作图形存储器,包括例如常用帧缓冲区(buffer))交互以存储和更新像素数据;传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU 202以及包括一个或多个用作通用计算的其他PPU 202。这些PI3U可以是相同的或不同的,并且每个PPU均可具有其自己的专用并行处理存储器设备或不具有专用的并行处理存储器设备。一个或多个PPU 202可输出数据到显示设备110,或者每个PPU 202均可输出数据到一个或多个显示设备110。在操作中,CPU 102是计算机系统100的主处理器,控制和协调其他系统组件的操作。具体地,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102为每个PPU 202写入命令流到入栈缓冲区(pushbuffer)中(在图I或图2中未明确示出),所述入栈缓冲区可位于系统存储器104、并行处理存储器204、或CPU 102和PPU 202都可访问的其他存储位置中。PPU 202从所述入栈缓冲区读取命令流,然后相对于CPU 102的操作异步地执行命令。现在参考图2,每个PPU202均包括1/0(输入/输出)单元205,其通过连接到存储器桥105 (或在一个可选实施例中,直接连接到CPU 102)的通信路径113与计算机系统100的其余部分通信。PPU 202到计算机系统100其余部分的连接也可以不同。在一些实施例中,并行处理子系统112可作为外插卡来实现,所述外插卡可被插入到计算机系统100的扩展插槽中。在其他实施例中,PPU 202可以和诸如存储器桥105或I/O桥107的总线桥一起集成在单个芯片上。而在其他实施例中,PPU 202的一些或所有元件可以和CPU 102一起集成在单个芯片上。在一个实施例中,通信路径113是PCI-Express链路,其中给每个PPU202分配专用的通道,如本技术领域所已知的。也可使用其他的通信路径。I/O单元205生成用于在通信路径113传送的数据包(或其他信号),并且还从通信路径113接收所有到达的数据包(或其他信号),将到达的数据包引导到PPU 202的适当组件。例如,可将与处理任务有关的命令引导到主机接口 206,而可将与存储器操作有关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口 206读取每个入栈缓冲区,并且将该入栈缓冲区指定的工作输出到前端212。有利地,每个PPU202都实现高度并行处理架构。如详细示出的,Pro202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC) 208,其中C彡I。每个GPC 208都能够并发执行大量的(例如,几百或几千)线程,其中每个线程是一个程序的实例(instance)。在各种应用中,可分配不同的GPC 208用于处理不同类型的程序或用于执行不同类型的计算。例如,在图形应用中,第一组GPC 208可被分配为执行曲面细分(tessellation)操作并产生用于曲面元(patch)的基元(primitive)拓扑,并且第二组GPC 208可被分配为执行曲面细分着色以评估用于所述基元拓扑的曲面元参数并确定顶点位置和每顶点的其他属性。取决于为每种类型的程序或计算所产生的工作量,GPC 208的分配可以改变。GPC 208通过工作分布单元200来接收将要执行的处理任务,所述工作分布单元200从前端单元212接收定义处理任务的命令。处理任务包括将被处理的数据的索引,例如表面(曲面元)数据、基元数据、顶点数据和/或像素数据,以及定义数据将被如何处理的命令和状态参数(例如,什么程序将被执行)。工作分布单元200可以被配置为获取与所述任务相对应的索引、或者工作分布单元200可以从前端212接收所述索引。前端212确保在入栈缓冲区所指定的处理启动前,将GPC 208配置为有效状态。例如,当PPU 202被用于图形处理时,用于每个曲面元的处理工作量被分为几乎相同大小的任务,以使曲面细分处理能够分布给多个GPC 208。工作分布单元200可被配置为按照能够向多个GPC 208提供任务进行处理的频率来产生任务。相反,在常规系统中,处 理一般由单个处理引擎执行,而其他处理引擎则保持空闲,等到该单个处理引擎完成其任务才开始他们的处理任务。在本发明的一些实施例中,各部分GPC 208被配置为执行不同类型的处理。例如第一部分可被配置为执行顶点着色和拓扑生成,第二部分可被配置为执行曲面细分和几何着色,第三部分可被配置为执行屏幕空间中的像素着色以产生经渲染的图像。由GPC 208产生的中间数据可以被存储在缓冲区中,允许该中间数据在GPC 208之间传送以进行进一步处理。将存储器接口 214包括D个分区单元215,其每个单元都直接耦合到处理存储器204的一部分,其中DS I。如图所示,分区单元215的数量通常等于DRAM 220的数量。在其他实施例中, 分区单元215的数量可以与存储器设备的数量不同。本技术领域的技术人员应该理解,DRAM 220可以由其他合适的存储设备代替,并且通常可以是常规设计。因此省略详细的描述。渲染目标,例如帧缓冲区或纹理映射可以跨DRAM 220存储,允许分区单元215并行地写入每个渲染目标的一部分,从而高效地使用并行处理存储器204的可用带宽。任意一个GPC 208都可以处理将被写到并行处理存储器204中任意DRAM 220的数据。交叉开关单元210被配置为路由每个GPC 208的输出到任意分区单元215的输入或到另一个GPC 208用于进一步处理。GPC 208通过交叉开关单元210与存储器接口 214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口 214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,因此使得在不同GPC 208中的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC 208与分区单元215之间的业务流。另外,GPC 208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面着色、顶点着色、几何着色、和/或像素着色程序)等等。PPU 202可将数据从系统存储器104和/或本地并行处理存储器204传输到内部(片上)存储器中,处理所述数据,并且将结果数据写回到系统存储器104和/或本地并行存储存储器204,其中这样的数据可以由其他系统组件访问,所述其他系统组件包括CPU 102或另一个并行处理子系统112。PPU 202可设置有任意容量(amount)的本地并行处理存储器204,包括不设置本地存储器,并且PPU 202可以以任意组合方式使用本地存储器和系统存储器。例如,在统一存储架构(UMA)实施例中,PI3U 202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU 202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU 202可被集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI-Express)的分立芯片提供,所述高速链路通过桥式芯片或其他通信方式将PPU 202连接到系统存储器。如上所述,并行处理子系统112可以包括任意数量的PPU 202。例如,在单个外插卡上可提供多个PPU 202、或可将多个外插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PI3U系统中的PPU 202可以彼此相同或不同。例如,不同的PPU 202可能具有不同数量的处理内核、不同容量的本地并行处理存储器等等。在出现多个PPU 202的情况下,可并行操作这些PPU从而以高于单个PPU 202可能达到的吞吐量来处理数据。包括一个或多个PPU 202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
处理集群阵列概述图3A为根据本发明一个实施例的,图2的一个PPU 202中的GPC 208的框图。每个GPC 208可被配置为以并行方式执行大量的线程,其中术语“线程”是指针对一组特定输入数据执行的特定程序的实例。在一些实施例中,使用单指令多数据(SIMD)指令发送技术来支持大量线程的并行执行,而无需提供多个独立的指令单元。在其他实施例中,使用单指令多线程(SMT)技术,采用被配置为向每一个GPC 208中一组处理引擎发送指令的共同指令单元,来支持大量通常同步化的线程的并行执行。与所有处理引擎通常执行相同指令的SMD执行机制不同,SMT执行通过给定的线程程序,允许不同线程更容易地跟随分散的执行路径。本技术领域的技术人员应该理解,SIMD处理机制代表SMT处理机制的功能子集。通过管线管理器305可以有利地控制GPC 208的操作,所述管线管理器305分布处理任务给被称为流多处理器(SPM) 310的SMT并行线程处理器。管线管理器305也可被配置为通过为SPM 310输出的经处理数据指定目的地来控制工作分布交叉开关330。
在一个实施例中,每个GPC 208均包括M个SPM 310,其中M彡I,每个SPM 310被配置为处理一个或多个线程组。另外,每个SPM 310均有利地包括可被管线化的相同的一组功能执行单元(例如,算术逻辑单元,以及加载-存储单元,如图3C中Exec单元302和LSU 303所示),允许在前一个指令完成之前发送新的指令,如本领域所已知的。可以提供功能执行单元的任意组合。在一个实施例中,该功能单元支持各种操作,包括整数和浮点运算(例如,加法和乘法)、比较操作、布尔操作(AND、OR、X0R)、位移(bit-shifting)、以及各种代数函数计算(例如,平面插值、三角、指数和对数函数等);并且相同的功能单元硬件可被均衡以执行不同的操作。被发送到特定GPC 208的一系列指令构成了一个线程,如本文前面所定义,并且一定数量的跨SPM 310内并行处理引擎(未示出)而并发执行的线程的集合,在本文中被称作“卷绕包(warp)”或“线程组”。如本文所使用的,“线程组”是指针对不同输入数据并发执行相同程序的一组线程,且所述组的每个线程被分配给SPM 310中的不同的处理引擎。线程组可以包括比SPM 310中的处理引擎数量更少的线程,在这种情况下,在线程组正被执行的周期期间,一些处理引擎将处于空闲。线程组也可以包括比SPM 310中的处理引擎数量更多的线程,在这种情况下,将在连续的时钟周期进行处理。因为每个SPM 310均能并发支持高达G个线程组,因此在任意给定的时间,GPC 208中可以有GXM个线程组正在执行。此外,SPM 310内在同一时间可以有多个相关的线程组处于激活状态(在不同的执行阶段)。这个线程组的集合在本文中被称作“协作线程阵列”(“CTA”)或者“线程阵列”。特定CTA的大小等于mX k,其中k是线程组中并发执行的线程的数量,并且一般是SPM310中并行处理引擎数量的整数倍,m是在SPM 310中同时激活的线程组的数量。通常由编程人员以及诸如存储器或寄存器的硬件资源的容量,来确定CTA的大小。每个SPM 310都包括LI缓冲(未示出)或者使用SPM 310之外的相应的LI高速缓存中的空间,该空间用于执行加载和存储操作。每个310也有权访问分区单元215中的L2高速缓存,所述L2高速缓存在所有GPC 208中共享并且可以被用于在线程之间传输数据。最后,SPM 310也有权访问片外“全局”存储器,可以包括例如并行处理存储器204和/或系统存储器104。应该理解,在PPU 202外的任意存储器都可用作全局存储器。此外,GPC 208中可包括LI. 5高速缓存335,被配置为接收和保持通过存储器接口 214从存储器获取的由SPM 310所请求的数据,包括指令、一致性(uniform)数据和常数数据,并将所请求的数据提供给SPM 310。在GPC208中具有多个SPM 310的实施例有益地共享LI. 5高速缓存335中所高速缓存的指令和数据。
每个GPC 208均可包括被配置为将虚拟地址映射到物理地址的存储器管理单元(MMU)328。在其他实施例中,MMU 328可驻留在存储器接口 214中。该MMU 328包括被用于将虚拟地址映射到像素块(tile)的物理地址的一组页表条目(PTEs),以及可选地包括高速缓存线索引(cache line index)。MMU 328可包括地址转译后备缓冲区(TLB),或包括驻留在多处理器SPM 310或LI高速缓存或GPC208中的高速缓存。处理所述物理地址以分布表面数据访问位置,从而允许在分区单元间的有效请求交错。高速缓存线索引可用于确定对闻速缓存线的请求是否命中或未命中。在图形和计算应用中,GPC 208可被配置为使每个SPM 310都耦合到纹理单元315,用于执行纹理映射操作,例如确定纹理采样位置、读取纹理数据以及过滤该纹理数据。从内部纹理LI高速缓存(未示出)或者在一些实施例中从SPM 310中的LI高速缓存读取纹理数据,以及当需要的时候从L2高速缓存、并行存储存储器204、或系统存储器104获取。每个SPM310都输出处理后的任务给工作分布交叉开关330以提供处理后的任务给另一个GPC 208用于进一步的处理,或者通过交叉开关单元210将处理后的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中。preROP(pre-raster operations,预光栅操作)325被配置为从SPM 310接收数据,将数据引导至分布单元215中的ROP单元,并执行用于色彩混合的优化、组织像素色彩数据以及执行地址转译。应该理解,本文所描述的内核架构是示例性的,变化和修改都有是可能的。GPC208中可以包括任意数量的处理单元,诸如SPM 310或纹理单元315、preR0P 325。进一步,虽然只示出一个GPC 208 JSPPU 202可以包括任意数量的GPC 208,所述GPC 208最好在功能上彼此相似,从而执行行为不依赖于哪个GPC 208接收到特定的处理任务。进一步,每个GPC208最好使用单独、各异的处理单元、LI高速缓存等独立于其他GPC 208操作。图3B为根据本发明一个实施例的,图2的一个PPU 202中的分区单元215的框图。如图所示,分区单元215包括L2高速缓存350、帧缓冲区(FB)DRAM接口 355、以及光栅操作单元(ROP) 360。L2高速缓存350是读/写高速缓存,其被配置为执行加载和存储从交叉开关单元210及R0P360接收的操作。由L2高速缓存350输出读取缺失和紧急写回请求到FBDRAM接口 355进行处理。脏更新也被发送到FB 355用于伺机处理。FB 355直接与DRAM220接口,输出读和写请求,并接收从DRAM 220读取的数据。在图形应用中,ROP 360是执行光栅操作的处理单元,例如模板(stencil)、z测试、混合以及类似操作,并输出像素数据作为处理后的图形数据用于在图形存储器中存储。在本发明的一些实施例中,将ROP 360包括在每个GPC 208中,而不是分区单元215中,并且通过交叉开关单元210传送像素读写请求而非像素片段数据。处理后的图形数据可以在显示设备110上显示,或者被路由用于由CPU102或由并行处理子系统112中的一个处理实体来进一步处理。为了分布光栅操作的处理,每个分区单元215都包括ROP 360。在一些实施例中,ROP 360可被配置为压缩被写入存储器的z数据或色彩数据,以及解压缩从存储器中读出的z数据或色彩数据。
本技术领域的技术人员应该理解,图1、2、3A中描述的架构不以任何方式限制本发明的范围,以及在此教导的技术可以在任意经合适配置的处理单元上实现,包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU 202、一个或多个GPC 208、一个或多个图形或专用处理单元或类似设备,均不超出本发明的范围。在本发明的实施例中,希望使用PPU 202或计算系统的其他处理器,采用线程阵列来执行通用计算。分配唯一的线程标识符(“线程ID”)给线程阵列中的每个线程,所述线程标识符在该线程执行期间可由该线程访问。可将线程ID定义为一维或多维数值,其控制该线程处理行为的各个方面。例如,线程ID可用于确定线程会处理哪部分输入数据集,和/或确定线程会产生或写哪部分输出数据集。每线程指令序列可包括定义了代表线程与线程阵列中一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括以下指令将对所述代表线程的操作执行在序列中的特定点挂起直到一个或多个其他线程到达该特定点时的指令;指示代表线程在一个或多个其他线程有权访问的共享存储器中存储数据的指令;指示代表线程自动地读取和更新存储在一个或多个其他线程基于其线程ID有权访问的共享存储器中 的数据的指令;等等。CTA程序也可包括计算从其中读取数据的共享存储器的地址的指令,且该地址为线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中给定的位置,并且由同一个CTA的不同的线程从该位置读取。因此,可以支持以任意希望的方式在线程中共享数据,并且CTA中的任意线程能够和同一个CTA中的任何其他线程共享数据。如果在CTA的线程中存在数据共享,则数据共享的程度由该CTA程序确定;因此,应该理解在使用CTA的特定应用中,取决于该CTA程序,CTA的线程实际上可能互相共享数据或者不共享数据,并且术语“CTA”和“线程阵列”在本文中同义使用。图3C为根据本发明一个实施例的,图3A中SPM 310的框图。SPM 310包括指令LI高速缓存370,器经配置以通过LI. 5高速缓存335接收指令和常数。warp调度器和指令单元312从指令LI高速缓存370接收指令和常量,并根据指令和常数控制本地寄存器堆304和SPM 310功能单元。SPM310的功能单元包括N个exec (执行或处理)单元302和P个加载-存储单元(LSU) 303。SPM310提供具有不同访问级别的片上(内部)数据存储。专用寄存器(未示出)对于LSU 303可读但不可写,并被用于存储定义每个CTA线程“位置”的参数。在一个实施例中,专用寄存器包括存储线程ID的每CTA线程(或SPM 310中每exec单元302) —个的寄存器;每个线程ID寄存器仅可以由各自的一个exec单元302访问。专用寄存器也可包括对于所有CTA线程(或所有LSU 303)可读的附加寄存器,其存储CTA标识符、CTA维度、CTA所属栅格(grid)的维度以及CTA所属栅格的标识符。在响应通过前端212从设备驱动器103接收的命令而进行初始化期间,对专用寄存器进行写入,并且在CTA执行期间专用寄存器不会发生改变。参数存储器(未示出)可由任意CTA线程(或任意LSU 303)读取但不可写入,其存储执行时间参数(常数)。在一个实施例中,设备驱动器103在引导SPM 310开始执行使用这些参数的CTA之前,提供参数给所述参数存储器。任意CTA中的任意CTA线程(或SPM 310中的任意exec单元302)都可通过存储器接口 214访问全局存储器。一部分全局存储器可存储在LI高速缓存320中。本地寄存器堆304可由每个CTA线程用作临时空间(scratch space);每一个寄存器被分配给一个线程排他性使用,并且在任意一个本地寄存器堆304中的数据均仅可由该数据被分配给的CTA线程所访问。本地寄存器堆304可作为被物理地或逻辑地分为P个通道的寄存器堆来实现,每个通道具有一定数量的条目(其中每个条目可能存储诸如32位字长)。为N个exec单元302和P个加载-存储单元LSU 303的每一个分配一个通道,并且不同通道中的相应条目可填充用于执行相同程序的不同线程的数据,以有助于SIMD执行。通道的不同部分可被分配给G个并发 线程组的不同组,从而使本地寄存器堆304中给定的条目仅可由特定线程访问。在一个实施例中,本地寄存器堆304中的某些条目被保留用于存储线程标识符,实现了一个专用寄存器。断言寄存器堆307包括用于每个CTA线程的断言寄存器。关于图4和图5中在下面对断言寄存器堆307进行更为详细的描述。共享存储器306可由(在单个CTA中的)所有CTA线程访问;共享存储器306中的任意位置都可由同一个CTA中的任意CTA线程(或SPM310中的任意处理引擎)访问。共享存储器306可实现为具有互连的共享片上高速缓存存储器或共享寄存器堆,所述互连允许任意处理引擎对共享存储器的任意位置进行读或写。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA域(region)上,并且在LI高速缓存320中高速缓存。参数存储器可实现为同一个共享寄存器堆或实现共享存储器306的共享高速缓存存储器内的指定部分,或实现为单独的共享寄存器堆或LSU 303对其具有只读访问权限的片上高速缓存存储器。在一个实施例中,实现参数存储器的区域(area)也可被用于存储CTA ID和栅格ID,以及存储CTA和栅格的维度,实现专用寄存器的一部分。SPM 310中的每个LSU 303均可耦合到统一地址映射单元352,所述统一地址映射单元352将为在统一存储空间内指定的加载和存储指令所提供的地址转换为在每个各异的存储器空间中的地址。因此,通过在统一存储器空间中指定地址,指令可用于访问任意的本地、共享或全局存储器空间。用于并行处理器的断言指令执行以下论述针对执行并行线程或并行数据通道的并行处理器。在一些实施例中,并行线程或并行数据通道组利用SMT或SMD技术来执行共同的指令流。使用SMT技术的一个实施例描述为为并行处理器中执行的每个线程显性地提供包含I位断言的断言寄存器。还描述了用于设置和使用该I位断言的通用指令组。有利地,以下描述的断言寄存器架构减少了线程状态和指令编码开销,并且实现条件程序域需要的指令较少。图4为根据本发明一个实施例的,图3C的断言寄存器堆307的更详细的示意图。如图所示,断言寄存器堆307包括N个不同的断言寄存器402。每个断言寄存器402均与执行在SPM 310中的执行单元302上的不同线程相关联。仅为了描述的目的,以下更详细地描述断言寄存器402 (O)。断言寄存器402 (O)包括条件代码404和断言408。条件代码404包括四个I位的条件代码标志(flag) 0F (溢出标志)、CF (进位标志)、SF(符号标志)以及ZF(零标志)。在每个线程中,指令选择性地写入条件代码;一般由整数和浮点运算指令写入条件代码,以指示算术运算结果的属性。断言408包括能够由与断言寄存器402(0)相关联的进程所使用的七个I位的断言。断言408中每一个断言P0-P6均表明与所述线程相关联的状态的一个位,其中对于断言而言值O表明False (假),而值I表明True (真)。除断言P0- P6之外,提供用于True断言编码的保留指令PT,其值总是为I。断言PT不需要每线程的任何状态。当需要恒定的True断言值时,断言PT可被用作指令源操作数,并且当指令没有非活性的(live-out)断言结果时,断言PT可被用作指令目标操作数;忽略对PT的写。对于执行在SPM 310中的每个线程,通过断言设置指令来设置断言寄存器402中相应的断言。下面详细描述六种不同类型的断言设置指令,其用于为执行在SPM 310中的每个线程在断言寄存器402中设置断言。ISETP、FSETP和DSETP是三个不同的断言设置指令。在其最简单的形式中,这些指令的每一个都通过评估一个或多个源操作数来将与线程相关联的布尔断言设置为为True或False。源操作数可以是本地寄存器堆304中的通用寄存器、立即数值、或者常数值。一个简单示例测试一个源操作数的值,并且如果该源操作数为零则设置断言为False,否则设置断言为True。更普遍地,这些指令的每一个均对产生布尔结果的一个或多个源操作数应用一个操作。测试操作通过将一个源操作数和零值相比较来评估该源操作数。比较操作比较至少两个源操作数,并在断言寄存器402的一个或多个断言中存储该比较的布尔结果。可以由断言设置指令来指定不同的比较,包括小于、大于、等于,不等于等等。任何其他技术上可行的两个值之间的比较都包括在本发明的范围内。重要的是,对执行断言设置指令的每个线程来说,比较的布尔结果可以是不同的,并且因此,对应不同的线程,存储在断言寄存器402中的布尔结果可以是不同的。ISETP指令对表示整数值的两个操作数(例如,通用寄存器、立即操作数、或常量)进行比较以生成布尔结果。FSETP指令对表示单精度浮点值的两个源操作数进行比较以生成布尔结果。可以利用不同的选项(option),例如“具有否定符号”和“绝对值”,来指定FSETP指令的源操作数。DSETP指令对表示双精度值的两个源操作数进行比较以生成布尔结果。用于实现if-then-else (如果-则-否则)语句if (R0 < Rl) then {A ;} else {B ;}的 ISETP 断言设置指令的示例为ISETP. It P2, R0, Rl ;#P2 = (R0 < Rl I 0)当对特定线程执行这一指令时,比较存储在与该线程相关联的寄存器RO和Rl中的整数值。具体地,将“It”(小于)比较应用于RO和R1。将该比较的布尔结果存储在与该线程相关联的相应的断言寄存器402内的P2断言中。然后根据P2为True或者False,可以对实现语句A和B的分支转移指令进行断言,或者利用到被称为if-conversion (如果-转换)的断言指令的转化,可以去除这些分支。根据P2为True,实现语句A的指令可以被断言,而根据P2为False,实现语句B的指令可以被预测。利用多个或复合的布尔函数,断言设置指令也可被用于设置多个断言。例如,基于复合的布尔函数设置多个断言对于if-conversion的嵌套的if_then_else结构以及对于评估复合布尔表达式是有效的。在这些情况下,为了生成高效的代码,SETP指令包括可选断言源操作数和布尔函数。可选地该断言源操作数可以是否定的。若干断言代码模式需要计算相关的断言对。例如,在一个简单的嵌套if-then-else结构中,需要断言对来保护嵌套语句中的then和else块。考虑下面嵌套if-then-else 结构的 if-conversion if (R0 < Rl) then {A ;} else {if (R2 > R3) then {B ;} else {C ;}}
如果第一个条件RO < Rl为True,则执行块A中的指令。如果第一个条件RO < Rl为False并且第二个条件R2 > R3为True,则执行块B中的指令;仅当第一个条件RO < Rl为False并且第二个条件R2 > R3也为False时,才执行块C中的指令。利用SETP指令容易地计算出相应的保护条件ISETP. ItPI, R0, Ri ;#P1 = (R0 < Ri)ISETP. gt. and P2, R2, R3, ! Pl ;#P2 = ! P1&(R2 > R3)ISETP. le. and P3, R2, R3, ! Pl ;#P3 = ! P1& ! (R2 > R3)此外,当SETP指令扩展为在断言寄存器402中两个不同的断言中存储结果时,可减少断言代码中所需SETP指令的数量。除了所使用的比较补码以外,第二个布尔结果的计算与第一个布尔结果的计算非常相似。在上述示例中,P2和P3可通过单个ISETP指令计算,该指令用两个布尔操作设置两个目标断言 ISETP.lt PI, R0, Rl;ISETP. gt. and P2, P3, R2, R3, ! Pl ;#P2 = (R2 > R3)& ! Pl ;P3 = ! (R2 >R3)& ! PlPSETP, CSETP和VSETP为三个附加的断言设置指令。PSETP指令支持对断言执行常规布尔函数。PSETP指令指定断言寄存器402中的两个或多个断言源操作数,以及断言寄存器402中的一个或多个比较操作和一个或多个目标断言。例如,PSETP指令PSETP.bopO.bopl Pu, Pv, { ! }Pp, { ! }Pq, { ! }Pr ;基于可选地否定的源断言操作Pp、Pq和Pr的复合布尔操作bop0、bopl,在断言寄存器402中将两个目标断言Pu和Pv设置为布尔值Pu = ({ ! }Pp bope { ! } Pq) bop I { ! }Pr ;Pv = (( ! { ! } Pp) bope { ! } Pq) bop I { ! }Pr ;当执行CSETP指令时,利用特定的测试来测试条件代码(CC)寄存器,使用特定的布尔操作bop将布尔结果与断言操作数Pp结合,并且基于该测试,在断言寄存器402中设置一个或多个目标断言。所述测试可包括带符号数字测试、带符号的或无序的测试、以及无符号的整数测试。当执行VSETP指令时,从VSET指令中所指定的一个或多个源寄存器中提取子字(sub-word)(一个字节或短型(short))或者单字值,符号将该值扩展为33位的带符号的值并且执行指定的比较以产生布尔中间结果。然后利用指定的布尔操作将该中间结果与可选地否定的断言源操作数相结合,并且基于该结果在断言寄存器402中设置一个或多个目标断言。当使用有符号的或无符号的整型字或子字工作时,VSETP是有效的,例如在媒体处理算法中。上述不同的断言设置指令具有相应的通用寄存器设置指令,例如I SET、FSET、PSET等。与断言设置指令一样,这些指令计算布尔结果,但该结果被转换为32位的值,该值存储在本地寄存器堆304的一个或多个通用寄存器中。该32位的值可以是整型值或单精度浮点值,取决于指令结果的格式类型。当选择整型结果时,将布尔结果O和I分别转换为整型值0x0000000和OxFFFFFFFF。当选择浮点结果时,将布尔结果O和I分别转换为单精度浮点值0. Of和I. Of0P2R指令将断言寄存器402复制到本地寄存器堆304中32位寄存器的高半部分或低半部分。这一指令包括掩码操作数,其允许将所述位的子集写到通用寄存器。这有助于实现寄存器分配和函数调用转换。R2P指令将在掩码的控制下从通用寄存器的低半部分或高半部分选择的位复制到断言寄存器402。在SPM 310中执行的指令具有保护断言,其控制每个线程中指令的条件执行。保护断言对应于与每个线程相关联的断言寄存器402中的断言。如果对于线程的保护断言为true (具有值I),则由该线程正常执行该指令。如果对于线程的保护断言为false (具有值O),该指令对该线程无效,并且不影响该线程的机器状态。所述保护断言可选地可为否定的,因此需要四个指令位来编码该保护断言,该保护断言选择七个断言中的一个或PT用于每个指令。利用断言PT进行保护,指令可以被无条件地执行。使用语法“@Px”或“@ ! Px”将保护条件写到每个指令的左侧。用于一个线程的断言指令示例iP2 IADD Rl, R2,R3 ;#如果P2为true则执行,否则无效 iPT IMUL R2, R4, R6 ;# 无条件执行i ! Pl FMAX Rl, R2,R3 ;# 如果 Pl 为 false 则执行,否则无效断言最常见的用法是用于去除短的转发分支,以及去除简单的、单层的if-then-else结构。对于这些常见情况,否定-针对-使用(negate-on-use)减少的达一半数量的活性(live)断言寄存器。状态的减少特别有利于SMT和SMD并行处理器,其具有很多线程并因此具有很多每线程状态的实例。为了去除诸如嵌套if-then结构的在更复杂的控制流域中的分支,要计算更多的常规断言条件。例如,考虑以下代码if (P) then {A;} else {if (q) then {B ;} else {C ;}}当条件p为true,A应该执行,并且B和C应被无效。试图利用断言和其补码保护B和C,分别是q和! q,导致甚至在P为true时,它们中的一个被错误执行。利用C语言语法,用于B的正确保护是(! p&q),以及用于C的正确保护是(! p& ! q)。利用具有两个目标断言的单个SETP指令能够有效地计算这些保护。除了保护的(断言的)计算指令(例如,算法、逻辑、存储器加载/存储操作),断言被用于保护控制流修改指令,例如条件的和断言的BRA、BRX、JMP以及JMX。分支转移/跳转(jump)条件基于保护断言或条件代码寄存器测试或此而学者的组合。也将断言用于SEL指令、MNMX指令、VOTE指令和LDLK指令中。基于断言寄存器402中可选地否定断言,SEL指令选择在SEL指令中所指定的第一或第二源操作数。将所选择的操作数复制到特定的目的寄存器。基于可选地否定断言的值,IMNMX, FMNMXjP DMNMX指令选择两个源操作数中的最小值或者最大值。例如,对于一个特定线程,如果在MNMX指令中所指定的断言为false,则针对所述两个源操作数执行最小值操作。相反,如果在MNMX指令中所指定的断言为true,那么针对所述两个源操作数执行最大值操作。将被选择的操作的结果复制到指定目标寄存器。VOTE指令跨线程组中所有激活线程执行断言的减少-广播(reduce-and-broadcast)。跨线程组中所有激活线程共享vote操作的执行结果。该vote操作为.ALL (当且仅当跨所有激活线程的源断言为ture时为true)、. ANY(当且仅当跨所有激活线程有至少一个源断言为true时为ture)以及.EQ (当且仅当跨所有激活线程的源断言为true或跨所有激活线程的源断言为false时为ture)。加载-加锁(load-and-lock)指令(LDLK)与加载-共享-加锁(load-shared-and-lock) (LDSLK)指令从存储器加载值,并试图取得与存储器地址相关联的锁;这些指令写断言目标寄存器以表明是否取得所述锁(写入True)或是没有取得(写A False)。图5为根据本发明一个实施例的,用于为条件指令的执行而在断言寄存器堆中设置断言和访问断言的方法步骤的流程图。虽然所述方法步骤结合图1-4中的系统来描述,但本技术领域技术人员应该理解,被配置以任意顺序执行本方法的任何系统都包括在本发明范围内。 方法500从步骤502开始,在步骤502中SPM 310接收关于在线程组的每个线程内执行的指令。如本文前面所述,每个线程执行具有不同源操作数的相同指令,以生成不同的输出。在步骤504,SPM 310确定该指令是否为断言和/或条件指令。如果该指令不是断言和/或条件指令,那么方法进入到步骤520,在此步骤中为每个线程无条件执行该指令。如果该指令为断言和/或条件指令,那么方法进入步骤506,在此步骤中,SPM 310为每个线程确定该指令中所指定的相应的断言和/或条件是否为true。方法继续到步骤508,在此步骤中为每个线程测试保护断言和/或分支条件。在步骤508,如果对于每个线程该保护断言和/或条件为False,则方法继续进入步骤530,在此步骤中SPM 310无效用于该线程的指令。在步骤508中,如果保护断言和/或条件为True,则方法继续进入步骤510。在步骤510,如果该指令为断言设置指令,那么方法进入步骤512,其中,基于源操作数和由该指令指定的比较操作,为每个线程在断言寄存器402中设置一个或多个断言。重要的是,由于对每个线程是采用不同的源操作数执行指令,因此用于线程组中每个线程的断言值可以是不同的。在步骤510,如果该指令不是断言设置指令,那么方法进入步骤540,其中对于每个线程执行该指令。有利地,本文所述发明提供用于开销高效断言执行的机制,其最小化SMT/SMD并行处理器中的每线程状态。此外,断言的可选否定进一步节省了每线程的附加位,否则将需要其来存储否定断言。进一步,可生成用于并行多线程程序的条件程序域的高效代码。本发明的一个实施例可以被实现为与计算机系统一起使用的程序产品。程序产品的程序对实施例的功能(包括在此描述的方法)进行定义,并且能够被包含在各种各样的计算机可读存储介质上。示例性的计算机可读存储介质包括但不限于(i)信息在其上永久保存的非可写存储介质(例如,计算机内的只读存储器装置,如可被CD-ROM驱动器读出的CD-ROM盘、闪存、ROM芯片或者任意类型的固态非易失性半导体存储器);以及(ii)其上存储有可改变的信息的可写存储介质(例如,软盘驱动器内的软盘或硬盘驱动器或任意类型的固态随机存取半导体存储器)。以上已参考具体实施例对本发明进行了描述。然而,本技术领域的技术人员应该理解,可以对其进行各种修改和变化而不脱离在所附权利要求中提出的本发明的较宽精神和范围。相应地,前面的描述和附图是作为示例性的,而不具有限制意义。
权利要求
1.一种用于访问与线程组相关联的断言信息的计算机实现的方法,所述方法包括 接收用于由所述线程组执行的第一指令,其中所述第一指令指定第一源操作数标识符、操作以及第一目标断言标识符; 对于所述线程组中的每一个线程, 通过对由所述第一源操作数标识符所标识的第一源操作数中的数据应用所述操作来计算断言结果;以及 在第一断言寄存器中存储所述断言结果,所述断言寄存器与所述线程相关联并且由所述第一目标断言标识符所标识, 其中对于所述线程组中的每一个线程,所述第一源寄存器以及所述第一断言寄存器不同。
2.根据权利要求I所述的方法,其中所述操作对所述第一源操作数中的所述数据与零进行比较。
3.根据权利要求I所述的方法,其中所述第一指令进一步指定第二源操作数,并且所述操作对所述第一源寄存器中的数据与所述第二源操作数中的数据进行比较。
4.根据权利要求3所述的方法,其中所述第一指令进一步指定第三源操作数标识符和组合操作,并且计算断言结果的所述步骤还包括,对由所述第三源操作数标识符所标识的第三源操作数中的数据以及对所述第一源操作数和所述第二源操作数中数据的比较应用组合操作。
5.根据权利要求4所述的方法,其中所述第三源操作数是断言。
6.根据权利要求3所述的方法,其中所述第一指令进一步指定第二目标断言标识符,并且进一步包括步骤 对于所述线程组中的每一个线程, 通过对所述第一源操作数和所述第二源操作数中的所述数据应用逆向比较操作,来计算第二断言结果;以及, 将所述第二断言结果保存在第二断言寄存器中,所述第二断言寄存器与所述线程相关联并且由所述第二目标断言标识符所标识, 其中对于所述线程组中的每一个线程,所述第二断言寄存器不同。
7.根据权利要求3所述的方法,其中所述第一源操作数或所述第二源操作数中的至少一个是断g。
8.根据权利要求3所述的方法,其中所述第二源操作数是条件代码。
9.根据权利要求I所述的方法,其中进一步包括接收用于由所述线程组执行的保护指令的步骤,所述保护指令指定所述第一目标断言标识符。
10.根据权利要求9所述的方法,其中所述保护指令包括指定第三源操作数标识符和第四源操作数标识符的选择指令,并且进一步包括以下步骤对于所述线程组中的每一个线程,基于由所述第一目标断言标识符所标识的所述第一断言寄存器,确定是否选择由所述第三源操作数标识符所标识的第三源操作数中的数据或由所述第四源操作数标识符所标识的第四源操作数中的数据。
11.根据权利要求9所述的方法,其中所述保护指令包括指定第三源操作数标识符和第四源操作数标识符的最小值/最大值指令,并且进一步包括以下步骤对于所述线程组中的每一个线程,基于由所述第一目标断言标识符所标识的所述第一断言寄存器,确定是否针对由所述第三源操作数标识符所标识的第三源操作数中的数据或者由所述第四源操作数标识符所标识的第四源操作数中的数据执行最小值操作或最大值操作。
12.根据权利要求9所述的方法,其中所述保护指令包括指定第三指令的分支指令,并且进一步包括以下步骤对于所述线程组中的每一个线程,基于由所述第一目标断言标识符所标识的第一断言寄存器,确定是否所述第三指令应该是下一个被执行的指令。
13.一种计算机系统,包括 存储器;以及 处理器,经配置以 接收用于由所述线程组执行的第一指令,其中所述第一指令指定第一源操作数标识符、操作以及第一目标断言标识符; 对于所述线程组中的每一个线程, 通过对由所述第一源操作数标识符所标识的第一源操作数中的数据应用所述操作来计算断言结果;以及, 在第一断言寄存器中存储所述断言结果,所述断言寄存器与所述线程相关联并且由所述第一目标断言标识符所标识, 其中对于所述线程组中的每一个线程,所述第一源寄存器以及所述第一断言寄存器不同。
14.根据权利要求13所述的计算机系统,其中所述第一指令进一步指定第二源操作数,并且所述操作对所述第一源寄存器中的数据与所述第二源操作数中的数据进行比较。
15.根据权利要求13所述的计算机系统,其中所述处理器进一步经配置以接收用于由所述线程组执行的保护指令,所述保护指令指定所述第一目标断言标识符。
全文摘要
本文提供的发明阐述了用于在执行多线程或数据通道的并行处理器中的指令的断言执行机制。执行在并行处理器中的每个线程或数据通道均与一个断言寄存器相关联,该断言寄存器存储一组1位断言。可以使用不同类型的断言设置指令来设置这些断言中的每一个,其中每个断言设置指令都指定一个或多个源操作数,针对该源操作数将执行至少一个操作,并且一个或多个目标断言用于存储该操作的结果。可以通过断言来保护指令,该断言可以影响是否对特定线程执行指令,或者如何对特定线程或数据通道执行指令。
文档编号G06F15/76GK102640132SQ201080053930
公开日2012年8月15日 申请日期2010年9月28日 优先权日2009年9月28日
发明者理查德·克雷格·约翰逊, 约翰·R·尼科尔斯, 罗伯特·史蒂文·格兰维尔 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1