用于源操作数收集器高速缓存的方法和装置的制作方法

文档序号:6384161阅读:188来源:国知局
专利名称:用于源操作数收集器高速缓存的方法和装置的制作方法
技术领域
本公开总体上涉及处理器寄存器,更具体地,涉及用于源操作数收集器高速缓存的方法和装置。
背景技术
并行处理器具有使用不同的硬件资源来使多个线程能够同时执行的多个独立内核。SMD (单指令、多数据)架构处理器在多个内核的每一个上均执行相同的指令,其中每个内核执行不同的输入数据。MMD (多指令、多数据)架构处理器利用供应给每个内核的不同的输入数据在不同的内核上执行不同的指令。并行处理器也可以是多线程的,其使用单个处理内核的资源使两个或更多个线程能够大体上同时执行(即在不同的时钟周期期间在内核上执行不同的线程)。当处理器调度指令用于由处理器内核执行时,处理器将某些值写入耦合到处理器内核的寄存器堆中的特殊寄存器。一个寄存器可以存储指定将由处理器内核实施的操作的操作码而附加寄存器可以存储用作到用于执行指令的处理器内核的输入的操作数值。为了将要执行的操作,必须将值的每一个均写入寄存器堆并随后经由交叉开关或其他数据传输手段将值的每一个耦合到数据路径的输入。每个指令均可以要求寄存器堆中的新寄存器连接到数据路径顶端处的输入。与上述架构有关的一个问题是配置交叉开关以将存储在寄存器堆中的寄存器值耦合到数据路径顶端处的输入要求一个或多个时钟周期来实施。加载每个操作数所需的时间将延迟引入到整体处理效率中。此外,交叉开关可配置为使得在每个时钟周期期间仅一个操作数可以耦合到数据路径的输入。因此,本领域所需要的是用于将值从寄存器堆加载到处理器内核的数据路径的输入中的改进技术。

发明内容
一个实施例提出利用源操作数收集器高速缓存所实现的用于在处理器内核上执行指令的方法。所述方法包括以下步骤:解码指令以确定由所述指令所指定的多个操作数,以及对于所述多个操作数中的每个操作数,确定特定操作数未存储在耦合到所述处理器内核内的数据路径的输入的高速缓存中,将所述特定操作数从与所述处理器内核相关联的本地寄存器堆加载到所述高速缓存中。所述方法进一步包括配置所述处理器内核以使用存储在所述高速缓存中的操作数来执行所述指令的步骤。另一个实施例提出包括指令的计算机可读存储介质。当由处理器内核执行所述指令时,所述指令引起所述处理器内核实施以下步骤:解码指令以确定由所述指令所指定的多个操作数,以及对于所述多个操作数中的每个操作数,确定特定操作数未存储在耦合到所述处理器内核内的数据路径的输入的高速缓存中,将所述特定操作数从与所述处理器内核相关联的本地寄存器堆加载到所述高速缓存中。所述步骤还包括配置所述处理器内核以使用存储在所述高速缓存中的操作数来执行所述指令。又一个实施例提出包括具有数据路径的用于执行指令的处理器内核、耦合到所述数据路径的输入的高速缓存和调度单元的系统。所述调度单元配置为解码指令以确定由所述指令所指定的多个操作数,以及对于所述多个操作数中的每个操作数,确定特定操作数未存储在耦合到所述处理器内核内的数据路径的输入的高速缓存中,将所述特定操作数从与所述处理器内核相关联的本地寄存器堆加载到所述高速缓存中。所述调度单元还配置为使用存储在所述高速缓存中的所述操作数来执行所述指令。


因此,可以详细地理解上述本公开的特征,并且可以参考示范性实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本公开的典型实施例,因此不应被认为是对其范围的限制,本公开可以具有其他等效的实施例。图1为示出了配置为实现本公开一个或多个方面的计算机系统的框图;图2为根据本公开一个实施例的用于图1的计算机系统的并行处理子系统的框图;图3A为根据本公开一个实施例的图2的前端的框图;图3B为根据本公开一个实施例的在图2的并行处理单元之一内的通用处理集群的框图;图3C为根据本公开一个实施例的图3B的流多处理器的一部分的框图;图4为根据本公开另一个示范性实施例的图3B的流多处理器的一部分的框图;图5示出了根据本公开一个示范性实施例的图4的操作数收集器;以及图6为根据本公开一个示范性实施例的示出了利用源操作数收集器高速缓存所实现的用于在处理器内核上执行指令的方法的流程图。
具体实施例方式在下面的描述中,将阐述大量的具体细节以提供对本公开更透彻的理解。然而,本领域的技术人员应该清楚,本公开可以在没有一个或多个这些特定细节的情况下得以实施。本公开描述了用于源操作数收集器高速缓存的方法和装置。在一个实施例中,处理器包括可以耦合到存储元件(即操作数收集器)的寄存器堆,所述存储元件(即操作数收集器)提供到用于执行指令的处理器内核的数据路径的输入。为了减小寄存器堆和操作数收集器之间的带宽,操作数可以被高速缓存并在随后的指令中重复利用。因此,可能仅需要将由给定指令所指定的操作数子集加载到操作数收集器中。调度单元维护高速缓存表用于监视当前存储在操作数收集器中的寄存器值。调度单元还可以配置操作数收集器以为给定指令选择耦合到数据路径的输入的特定存储元件,这允许用于两个或两个以上指令的操作数被并发高速缓存。系统概述图1为示出了配置为实现本公开的一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理单元(CPU) 102和经由可以包括存储器桥105的互连路径通信的系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106 (例如超传输(HyperTransport)链路)连接到I/O (输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108 (例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将所述输入转发到CPU 102。并行处理子系统112经由总线或第二通信路径113 (例如外围部件互连(PCDExpress、加速图形端口或超传输链路)耦合到存储器桥105 ;在一个实施例中,并行处理子系统112是将像素传递到显示设备110 (例如传统的基于阴极射线管或液晶显示器的监视器)的图形子系统。系统盘114也连接到I/O桥107。开关116提供I/O桥107与诸如网络适配器118以及各种外插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩磁盘(CD)驱动器、数字视频光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括特殊命名的通信路径106和113可以使用任何适合的协议实现,诸如PC1-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/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或两个以上的CPU 102以及两个或两个以上的并行处理系统112。本文所示的特定部件是可选的;例如,任意数量的外插卡或外围设备都可能得到支持。在一些实施例中,开关116被去掉,网络适配器118和外插卡120、121直接连接到I/O 桥 107。图2示出了根据本公开一个实施例的并行处理子系统112。如图所示,并行处理子系统112包括一个或多个并行处理单元(PI3U) 202,每个并行处理单元202都耦合到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U彡I。(本文中,类似对象的多个实体以标识该对象的参考数字和需要时标识所述实体的括号中的数字来表示。)PPU 202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器, 它可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU 102和/或系统存储器104所提供的图形数据生成像素数据,与本地并行处理存储器204 (可被用作图形存储器,包括例如常用帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU 202以及包括一个或多个用于通用计算的其他PPU 202。这些PTO可以是相同的或不同的,并且每个PPU均可具有专用并行处理存储器设备或不具有专用的并行处理存储器设备。并行处理子系统112中的一个或多个PPU 202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU 202均可输出数据到一个或多个显示设备110。在操作中,CPU 102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102为每个PPU 202写入命令流到数据结构中(在图1或图2中未明确示出),所述数据结构可位于系统存储器104、并行处理存储器204、或CPU 102和PPU 202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU 102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。现在返回参考图2和图1,每个PPU 202均包括经由连接到存储器桥105 (或者,在一个替代性实施例中,直接连接到CPU 102)的通信路径113与计算机系统100的其余部分通信的I/O (输入/输出)单元205。PPU 202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可作为外插卡来实现,所述外插卡可被插入到计算机系统100的扩展槽中。在其他实施例中,PPU 202可以和诸如存储器桥105或I/O桥107的总线桥一起集成在单个芯片上。而在其他实施例中,PI3U 202的一些或所有元件可以和CPU 102—起集成在单个芯片上。
·
在一个实施例中,通信路径113是PC1-EXPRESS链路,如本领域所知的,其中专用通道被分配到每个PPU 202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传输的数据包(或其他信号),并且还从通信路径113接收所有传入的数据包(或其他信号),将传入的数据包引导到PPU 202的适当部件。例如,可将与处理任务相关的命令引导到主机接口 206,而可将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口 206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。有利地,每个PPU 202都实现高度并行处理架构。如详细示出的,PPU202 (O)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC) 208,其中C彡I。每个GPC 208都能够并发执行大量的(例如,几百或几千)线程,其中每个线程均是程序的实例(instance)。在各种应用中,可分配不同的GPC 208用于处理不同类型的程序或用于执行不同类型的计算。取决于因每种类型的程序或计算所产生的工作量,GPC 208的分配可以变化。GPC 208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。所述工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口 206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC 208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制是否将TMD添加到处理任务列表(或指向处理任务的指针列表)的头部或尾部的参数,从而提供除优先级以外的另一级别的控制。存储器接口 214包括D个分区单元215,每个分区单元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或对于PPU 202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC 208与分区单元215之间的业务流。另外,GPC 208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色、顶点着色、几何着色、和/或像素着色程序)等等。PPU 202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理所述数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU 102或另一个并行处理子系统112。PPU 202可配备有任意容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任意组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU 202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU 202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU 202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PC1-EXPRESS)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU 202连接到系统存储器。如上所述,在并行处理子系统112中可以包括任意数量的PPU 202。例如,可在单个外插卡上提供多个PPU 202、或可将多个外插卡连接到通信路径113、或可将一个或多个PPU 202集成到桥式芯片中。在多PI3U系统中的PPU 202可以彼此相同或不同。例如,不同的PPU 202可能具有不同数量的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU 202的情况下,可并行操作那些PPU从而以高于单个PPU 202所可能达到的吞吐量来处理数据。包含一个或多个PPU 202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等

多个并发任务调度可以在GPC 208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务以由GPC 208执行。图3A为根据本公开一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织所要调度的任务。对于每个优先级级别,任务管理单元300将指向与任务相对应的TMD 322的指针列表存储在调度器表321中,其中所述列表可以实现为链表。可以将TMD 322存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务以执行的速度是解耦的。因此,任务管理单元300可以在调度任务之前收集若干任务。之后可以基于优先级信息或使用其他技术诸如循环调度来调度所收集的任务。工作分布单元340包括具有槽的任务表345,每个槽均可以被用于正在执行的任务的TMD 322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务以执行。当没有空闲槽时,未占用槽的较高优先级任务可以驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将指向该任务的指针添加到所要调度的任务指针列表以使得任务的执行稍后将恢复。当生成子处理任务时,在任务的执行期间,将指向该子任务的指针添加到所要调度的任务指针列表。可以由在处理集群阵列230中执行的TMD 322生成子任务。不同于由任务/工作单元207从前端212接收的任务,子任务从处理集群阵列230接收。子任务不被插入帧缓冲区或传输到前端。当生成子任务或将用于子任务的数据存储在存储器中时不通知CPU 102。通过帧缓冲区提供的任务与子任务之间的另一个区别是通过帧缓冲区提供的任务由应用程序来定义而子任务是在任务执行期间自动生成的。任务处理概述图3B为根据本公开一个实施例的在图2的PPU 202之一内的GPC 208的框图。每个GPC 208均可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SIMT)技术用于使用配置为向GPC 208中的每一个内的处理引擎集发出指令的共有指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行相同指令的SMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SMD处理机制代表SMT处理机制的功能子集。经由将处理任务分布到流多处理器(SM)310的管线管理器305来有利地控制GPC208的操作。管线管理器305还可配置为通过为由SM 310所输出的处理数据指定目的地来控制工作分布交叉开关330。在一个实施例中,每个GPC 208均包括M个SM 310,其中M彡1,每个SM 310均配置为处理一个或多个线程组。另外,如本领域已知的,每个SM 310均有利地包括可以管线化的相同的功能执行单元集(例如执行单元和加载-存储单元一作为Exec单元302和LSU 303在图3C中示出),其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任意组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同的功能单元硬件可可均衡的用来(beleveraged to)实施不同的操作。如本文之前所定义的,传输到特定GPC 208的一系列指令构成线程,以及跨SM310内的并行处理引擎(未示出)的某一数量的并发执行线程的集合在本文中称为“warp”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM 310内的不同处理引擎。线程组可以包括比SM 310内的处理引擎数量少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM 310内的处理引擎数量多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM310均可以并发支持多达G个线程组,结果是在任意给定时间在GPC 208中可以执行多达G*M个线程组。此外,多个相关线程组可以在SM 310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数量并且通常是SM 310内的并行处理引擎数量的整数倍,以及m是SM 310内同时活动的线程组的数量。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。每个SM 310均包含一级(LI)高速缓存(图3C所示)或使用用于实施加载和存储操作的SM 310外部的相应LI高速缓存中的空间。每个SM 310都还有权访问在所有GPC208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,SM 310还有权访问片外“全局”存储器,所述“全局”存储器可以包括例如并行处理存储器204和/或系统存储器104。应该理解,PPU 202外部的任意存储器均可用作全局存储器。此外,一点五级(L1.5)高速缓存335可以包括在GPC 208内,其配置为接收并保持由SM 310所请求的经由存储器接口 214从存储器获取的数据,包括指令、标准(uniform)数据和常数数据,并将所请求的数据提供给SM 310。在GPC 208中具有多个SM 310的实施例有利地共享了高速缓存在L1.5高速缓存335中的共有指令和数据。每个GPC 208均可以包括配置为将虚拟地址映射到物理地址中的存储器管理单元(MMU) 328。在其他实施例中,MMU 328可以驻留在存储器接口 214内。MMU 328包括用于将虚拟地址映射到像素块(tile)的物理地址的页表条目(PTE)集和可选地包括高速缓存线索引。MMU 328可以包括地址转换后备缓冲区(TLB)或可以驻留在多处理器SM 310或LI高速缓存或GPC 208内的高速缓存。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元215之间交错。高速缓存线索引可用于确定用于高速缓存线的请求是否命中或未命中。在图形和计算应用中,GPC 208可配置为使得每个SM 310均耦合到用于实施纹理映射操作例如确定纹理样本位置、读出纹理数据以及过滤该纹理数据的纹理单元315。从内部纹理LI高速缓存(未示出)或者在一些实施例中从SM 310内的LI高速缓存读出纹理数据并根据需要从在所有GPC 208之间共享的L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了经由交叉开关单元210将所处理的任务提供给另一个GPC208用于进一步处理或为了将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM 310均将所处理的任务输出到工作分布交叉开关330。preROP(预光栅操作)325配置为从SM310接收数据、将数据引导到分区单元215内的ROP单元以及针对颜色混合实施优化、组织像素颜色数据和实施地址转译。应该理解本文所述的内核架构是示例性的并且各种变化和修改都是可能的。任意数量的处理单元例如SM 310或纹理单元315、preR0P 325均可以包括在GPC 208内。进一步地,如图2所示,PPU 202可以包括任意数量的GPC 208,所述GPC 208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC 208接收特定处理任务。进一步地,每个GPC 208有利地均使用单独的和各异的处理单元、LI高速缓存来独立于其他GPC208操作以为一个或多个应用程序执行任务。本领域普通技术人员应该理解图1、2、3A和3B所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任意经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个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为根据本公开一个实施例的图3B的SM 310的框图。SM 310包括配置为经由L1.5高速缓存335从存储器接收指令和常数的指令LI高速缓存370。warp调度器和指令单元312从指令LI缓冲370接收指令和常数并根据该指令和常数控制本地寄存器堆304和SM 310功能单元。SM310功能单元包括N个exec (执行或处理)单元302和P个加载-存储单元(LSU) 303。
SM 310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU 303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM 310内的每exec单元302)—个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由TMD 322所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储CTA标识符、CTA维数、CTA所属网格(grid)的维数(或队列位置,如果TMD 322编码队列任务而不是网格任务的话)、以及CTA被指派到的TMD 322的标识符。如果TMD 322是网格TMD,则TMD 322的执行会启动和执行固定数量的CTA以处理存储在队列525中的固定量的数据。将CTA的数量指定为网格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD 322中或TMD 322可以存储指向将由CTA所处理的数据的指针。TMD 322还存储由CTA所执行的程序的开始地址。如果TMD 322是队列TMD,那么使用TMD 322的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD 322的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD 322所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD 322中或与TMD 322分开存储,在该情况下TMD 322存储指向该队列的指针。有利地,当代表子任务的TMD 322正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA均与特定TMD 322相关联用于一个或多个任务的并发执行。此外,单个GPC 208可以并发执行多个任务。参数存储器(未示出)存储可由同一个CTA内的任意线程(或任意LSU 303)读取但不可由其写入的运行时间参数(常数)。在一个实施例中,设备驱动程序103在引导SM 310开始执行使用参数的任务之前将这些参数提供给参数存储器。任意CTA内的任意线程(或SM 310内的任意exec单元302)均可以通过存储器接口 214访问全局存储器。可以将全局存储器的各部分存储在LI高速缓存320中。每个线程均将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任意一个中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通道的寄存器堆,每个通道具有一定数量的条目(其中每个条目可以存储例如32位字)。将一个通道指派到N个exec单元中和P个下载-存储单元LSU 303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通道中的相应条目以帮助SIMD执行。可以将通道的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,这实现特殊寄存器之一。此外,标准LI高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU 303的每个通道的标准或常数值。共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任意位置对于同一个CTA内的任意线程(或对于SM 310内的任意处理引擎)可访问。共享存储器306可以实现为具有允许任意处理引擎对共享存储器中的任意位置读取或写入的互连的共享寄存器堆或共享片上高速缓存存储器。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA区域上并被高速缓存在LI高速缓存320中。参数存储器可以实现为在实现共享存储器306的同一个共享寄存器堆或共享高速缓存存储器内的指定部分,或者实现为LSU 303对其具有只读访问权限的单独的共享寄存器堆或片上高速缓存存储器。在一个实施例中,实现参数存储器的区域还用于存储CTA ID和任务ID,以及CTA和网格维数或队列位置,这实现特殊寄存器的各部分。SM 310中的每个LSU 303均耦合到统一地址映射单元352,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个相异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任意一个。每个SM 310中的LI高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在LI高速缓存320中。LSU 303经由存储器和高速缓存互连380耦合到共享存储器306和LI高速缓存320。操作数高速缓存图4为根据本公开另一个示范性实施例的图3B的SM 310的框图。尽管未明确示出,但除图4中明确示出的部件之外,图4的SM 310可以包含上述图3C的SM 310的部件的一些或所有。如图4所示,SM 310包括warp调度器和指令单元312、本地寄存器堆304和一个或多个功能执行单元诸如执行单元302或LSU 303。warp调度器和指令单元312包括解码单元450和分派单元470。解码单元450接收将要被分派到执行单元302的下一个指令。解码单元450实施指令的全解码并将所解码的指令传输到分派单元470。例如,解码单元450将确定由指令中的操作码所指定的特定类型的指令和被指定为指令的操作数的特定寄存器索引以及用于存储指令结果的寄存器索引。在一些实施例中,指令可以是双发出或四发出的并且解码单元450可以为每个所发出的指令实现单独的解码逻辑。分派单元470实现FIFO并将所解码的值写到本地寄存器堆304用于执行,在同时发出多个指令的实施例中,分派单元470可以发出每个指令到SM 310的功能单元的不同部分。在一个实施例中,本地寄存器堆304包括四个寄存器库(库0422、库1424、库2426和库3428)。在最常规的处理单元中,本地寄存器堆可以非常小。例如,X86CPU架构包括每处理器内核8个(32位)或16个(64位)寄存器。相反,本地寄存器堆304的每个库可以包括可用作到执行单元302的输入的大量寄存器,诸如256个寄存器或更多。交叉开关420配置为将每个寄存器库中的各寄存器连接到执行单元302中的操作数收集器440。执行单元302实现数据路径用于实施操作。数据路径包括操作数收集器440、算术逻辑单元(ALU)452和结果FIFO 454。操作数收集器440包括可以耦合到ALU 452的输入的若干存储元件441-446。每个存储元件441-446均可以是触发器、锁存器或能够临时存储作为ALU 452的输入所供应的值的任意其他技术可行的电路部件。存储元件的输出可以硬连接到包括ALU452的电路元件诸如加法器电路或浮点乘法器电路。如所示的,操作数收集器440包括六个存储元件441-446。在其他实施例中,任意数量的存储元件441-446可以实现在执行单元302 中。在包括相对小的寄存器堆的常规处理器设计中,交叉开关或其他互连可以配置为在单个时钟周期期间将本地寄存器堆中的任意寄存器耦合到数据路径输入的任意一个。此夕卜,在常规处理器中,可以在单个时钟周期中将数量等于到数据路径的输入数量的若干寄存器同时连接到任意数据路径输入。应该理解本地寄存器堆304的大小增加超出8或16个寄存器可能增加交叉开关420的复杂度。因此,在一些实施例中,交叉开关420仅可以在每个时钟周期期间将单个寄存器从每个寄存器库(例如422、424、426和428)耦合到特定存储元件441-446。上述处理器架构(其中交叉开关420在一个时钟周期期间仅将每寄存器库的单个寄存器耦合到操作数收集器440)减小了交叉开关420的大小和复杂度,但是该处理器架构还为经由执行单元302执行指令而引入了各种约束。例如,在每个时钟周期期间本地寄存器堆304和操作数收集器440之间的带宽等于本地寄存器堆304中的寄存器库数量。如所示的,本地寄存器堆304包括四个寄存器库,从而允许在单个时钟周期期间将多达四个操作数写入操作数收集器440中。然而,因为操作数收集器440包括用于在每个指令期间提供到ALU 452的输入的六个存储元件441-446,所以可能需要在两个连续的时钟周期中加载操作数(在第一时钟周期中加载4个操作数以及在第二时钟周期中加载2个操作数)。另夕卜,必须注意通过将同一指令所需的操作数值存储在不同寄存器库422、424、426和428中来避免寄存器库冲突。例如,如果将所有六个操作数都存储在库0422中,那么需要6个时钟周期来将操作数加载到操作数收集器440中。在一个实施例中,分派单元470包括配置为通过确保将用于每个指令的操作数均存储在不同寄存器库422、424、426和428中来避免库冲突的逻辑。在另一个实施例中,驱动程序103可以包括引起驱动程序103在并行处理器指令被传送到PPU 202之前的编译期间检查和避免库冲突的实现指令。然而,尽管具有这类技术的实现方案,但是一些库冲突可能无法轻易解决。在一个实施例中,操作数收集器440使对操作数的高速缓存能够同时与操作数收集器440内的多个指令相关联。如所示的,操作数收集器440包括与到ALU 452的每个输入相对应的一个或多个存储元件(441 (O)-441 (R-1)、442 (O)-442 (R-1)等等)。分派单元470可以包括逻辑以控制针对每个指令将哪个存储元件集441 (i)-446 (i)连接到ALU 452。例如,如表I所示,执行 在ALU 302上的程序可以包括由驱动程序103所生成并传输到PPU202的指令集。第一指令可以是包括三个操作数(R13、R11、R14)和输出(Rl)的积和熔加(FMA)指令。第二指令可以是包括三个操作数(R6、R7、R8)和输出(R2)的加法(ADD)指令。第三指令可以是包括三个操作数(R6、Rll和R13)的乘法(mUL)指令。标示为X的操作数不用作针对给定指令的到ALU 452的输入并且为了本公开的目的其可以忽略。
编号j操作码~Mim
1FMARlR13, Rll, R14, X, X, X
2ADDR2R6, R7, R8, X, X, X
3MlJLR3R6, Rll, R13, X, X, X表I操作数收集器440可以在下一个指令期间重复利用来自前一个指令的操作数。例如,在上述第二指令期间,将存储在本地寄存器堆304中的寄存器6、寄存器7和寄存器8中的操作数值分别加载到存储元件441、442和443中。在上述第三指令期间,在存储元件441中的值可以重复利用并且仅将存储在本地寄存器堆304中的寄存器11和寄存器13中的操作数值加载到操作数收集器440中。换言之,不需要在每个指令期间重新加载存储元件441-446。分派单元470可以包括存储用于当前被加载到操作数收集器440中的每个寄存器的索引的逻辑。包括在分派单元470中的逻辑可以实现为包括与每个存储元件441-446相对应的槽的查找表(即高速缓存表)。每个槽可以存储指示与存储在相应存储元件441-446中的值相关联的寄存器索引的值。当解码单元450确定哪个寄存器(即寄存器索引)用作用于下一个指令的操作数时,分派单元470将检查以确定对应于该寄存器索引的寄存器值是否由于调度前一个指令而当前存储在同一个存储元件441-446中。有利地,如果同一个存储元件441-446存储该寄存器值,则可以在同一个指令周期期间将来自同一个寄存器库中的另一个寄存器值加载到不同存储元件441-446中。在另一个实施例中,操作数收集器440可以针对ALU 452的给定数据路径输入来存储多个寄存器值的集(即操作数1-6分别存储在存储元件441-446中)。在这类实施例中,操作数收集器440可以包括用于ALU 452的每个数据通路输入的R个存储元件441 (O)、441 (I)、…、441 (R-1)的集。因此,可以将来自前R个指令的操作数高速缓存在操作数收集器440中并在随后的指令中重复利用以减小将操作数从本地寄存器堆304加载到操作数收集器440中所需的带宽。例如,如果R等于2,那么在表I所阐述的第一指令期间,将寄存器13加载到存储元件441 (O)中,将寄存器11加载到存储元件442 (O)中以及将寄存器14加载到存储元件443 (O)中。随后,在第二指令期间,将寄存器6加载到存储元件441 (I)中,将寄存器7加载到存储元件442 (I)中以及将寄存器8加载到存储元件443 (I)中。在第三指令期间,第一操作数值(寄存器6 )存储在存储元件441 (I)中以及第二操作数值(寄存器11)存储在存储元件442 (O)中。在一些实施例中,必须并发选择在给定指令期间所加载的存储元件441 (i)-446
(i)的给定子集以与随后的指令一起使用。换言之,在上述第三指令期间,分派单元可以重复利用在第一指令期间所加 载的存储元件441 (0)-446 (O)或者在第二指令期间所加载的存储元件441 (1)-446 (I ),但不是在第二指令期间所加载的第一存储元件441 (I)(即存储寄存器6中的值)以及在第一指令期间所加载的第二存储元件442 (O)(即存储寄存器
11中的值)。在其他实施例中,分派单元470可以包括用于在每个独立存储元件441-446之间选择的逻辑,其使在不同指令期间存储在不同存储元件441 (i)-446 (i)的集中的寄存器值能够在随后的指令中重复利用。应该理解可以监视高速缓存一致性以确保存储元件441-446中的值等于本地寄存器堆304中的相应寄存器中的值。在一个实施例中,高速缓存表中的槽存储索引值,所述索引值指定与存储在关联的存储元件441-446中的值相对应的寄存器。每当将新值写到本地寄存器堆304中的寄存器时,搜索高速缓存表以确定对应于该寄存器的索引是否当前存储在操作数收集器440中。如果操作数收集器440包括对应于该寄存器的条目,那么更新高速缓存表以从槽移除该索引(即将高速缓存表的该槽中的值设置为O以使操作数收集器440中的数据无效)。因此,如果该寄存器之后被指定为随后指令中的操作数,则分派单元470将重新将值从本地寄存器堆304加载到操作数收集器440中,这确保不将无效值提供给ALU 452。图5示出了根据本公开一个示范性实施例的图4的操作数收集器440。如图5所示,操作数收集器440包括图4的存储元件441-446。如上所述,存储元件441-446实现用于存储耦合到ALU 452的数据路径输入的寄存器值的高速缓存。交叉开关420经分派单元470配置以将本地寄存器堆304中的各寄存器耦合到存储元件441-446。操作数收集器440还包括多个多路复用器511-516。多路复用器511具有耦合到第一存储元件441 (O)的第一输入和耦合到第二存储元件441 (I)的第二输入。多路复用器511还具有耦合到向ALU452的逻辑提供第一操作数值的ALU 452的第一数据路径输入的输出。多路复用器512具有耦合到第一存储元件442 (O)的第一输入和耦合到第二存储元件442 (I)的第二输入。多路复用器512还具有耦合到向ALU 452的逻辑提供第二操作数值的ALU 452的第二数据路径输入的输出。多路复用器513、514、515和516具有与上述多路复用器511和512相似的连接,分别用于ALU 452的第三、第四、第五和第六数据路径输入。分派单元470配置多路复用器511、512、513、514、515和516以在不同的存储元件441 (i)-446 (i)的集之间进行选择。如图5所示,耦合到多路复用器511-516的控制信号可以耦合到多路复用器中的每一个以选择与相同的先前所加载的指令相对应的所有存储元件441 ( i)-446 (i)。在替代性实施例中,分派单元470可以向多路复用器511-516中的每一个供应不同的控制信号,这允许将对应于不同指令的存储元件441 (i)-446 (i)耦合到ALU 452的数据路径输入。在替代性实施例中,操作数收集器440可以包括使任意存储元件441-446能够连接到ALU 452的任意数据路径输入的不同互连逻辑。例如,一个或多个交叉开关可以实现在操作数收集器440内而不是多路复用器511-516内。作为示例,该一个或多个交叉开关可以使存储元件442 (I)能够与ALU 452的第四数据路径输入相连接并且使存储元件443
(O)能够与ALU 452的第一数据路径输入相连接。换言之,如果操作数先前被加载到操作数高速缓存440中的任意存储元件,则该操作数将导致操作数高速缓存440命中。因此,参考以上表I所给定的指令,因为在两个先前指令期间由第三指令所指定的三个操作数已先被加载到操作数高速缓存440的存储元件的至少一个中,所以由第三指令所指定的所有三个操作数都可以重复利用。图6为根据本公开一个示范性实施例,示出了利用源操作数收集器高速缓存所实现的用于在处理器内核上执行指令的方法600的流程图。尽管结合图1、2、3A-3C、4和5的系统描述了该方法步骤,但是本领域普通技术人员应该理解任意配置为以任意顺序实施该方法步骤的系统均在本发明的范围内。方法600开始于步骤610,其中SM 310解码指令以确定由指令所指定的多个操作数。每个操作数均可以被指定为与本地寄存器堆304内的寄存器相对应的索引。在步骤612,SM 310确定操作数的一个或多个是否高速缓存在操作数收集器440中。SM 310可以维护高速缓存表,所述高速缓存表存储与存储在操作数收集器440中的寄存器相对应的索弓I。分派单元470可以针对存储在高速缓存表中的索引来检查所解码的与由指令所指定的操作数相对应的寄存器索引。在步骤614,对于未存储在操作数收集器440中的每个操作数,SM 310配置交叉开关420以将本地寄存器堆304中的指定的寄存器与操作数收集器440中的存储元件441-446耦合到一起。在步骤616,SM 310更新高速缓存表以反映与存储在操作数收集器440中的寄存器值相对应的寄存器索引。在步骤618,SM 310配置ALU 452以使用存储在操作数收集器440中的操作数作为到ALU 452的输入来执行指令。在步骤620,SM 310确定是否有被调度以在ALU 452上执行的附加指令。如果附加指令被调度以执行,那么方法600返回在此解码下一个指令的步骤610。然而,如果不再有指令被调度以执行,那么方法600终止。本公开的一个实施例可以作为与计算机系统一起使用的程序产品实现。程序产品的程序定义实施例的功能(包括本文所述的方法)并且可以被包含在各种计算机可读存储介质上。示意性的计算机可读存储介质包括,但不限于:(i)信息被永久保存在其上的非可写存储介质(例如,计算机内的只读存储器设备,诸如可被压缩光盘只读存储器(CD-ROM)驱动器读取的CD-ROM盘、闪存、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器);和( )可变信息被保存在其上的可写存储介质(例如,磁盘驱动器内的软盘或者硬盘驱动器或者任何类型的固态随机存取半导体存储器)。以上已经参照特定实施例描述了本公开。然而,本领域的普通技术人员应该理解在不脱离如所附权利要求提出的本公开更宽的精神和范围的情况下,可以做出各种修改和改变。因此,前述的描 述和附图应被视为示意性的而非限制性的意义。
权利要求
1.一种利用源操作数收集器高速缓存所实现的用于在处理器内核上执行指令的方法,所述源操作数收集器高速缓存耦合到位于所述处理器内核内的数据路径的至少一个输入,所述方法包括: 解码指令以确定由所述指令所指定的多个操作数; 对于所述多个操作数中的每个操作数,确定所述操作数未存储在所述源操作数收集器高速缓存中,将所述操作数从本地寄存器堆加载到所述源操作数收集器高速缓存中;以及 配置所述处理器内核以跨越存储在所述源操作数收集器高速缓存中的所述操作数执行所述指令。
2.根据权利要求1所述的方法,进一步包括一旦将所述操作数加载到所述源操作数收集器高速缓存中,则更新高速缓存表以将与所述操作数相应的寄存器索引与所述源操作数收集器高速缓存中的存储元件相关联。
3.根据权利要求1所述的方法,其中所述本地寄存器堆包括多个寄存器库。
4.根据权利要求3所述的方法,进一步包括配置交叉开关以将所述多个寄存器库的第一寄存器库中的寄存器耦合到所述源操作数收集器高速缓存中的第一存储元件。
5.根据权利要求1所述的方法,其中所述源操作数收集器高速缓存的大小设置为并发存储由所述指令所指定的所述多个操作数和由另一个经解码指令所指定的多个操作数。
6.一种系统,包括: 包括数据路径的处理器内核,用于执行指令; 源操作数收集器高速缓存,其耦合到所述数据路径的至少一个输入; 本地寄存器堆,其耦合到所述源操作数收集器高速缓存;以及 调度单元,其配置为: 解码指令以确定由所述指令所指定的多个操作数, 对于所述多个操作数中的每个操作数,确定所述操作数未存储在所述源操作数收集器高速缓存中,将所述操作数从所述本地寄存器堆加载到所述源操作数收集器高速缓存中;以及 配置所述处理器内核以跨越存储在所述源操作数收集器高速缓存中的所述操作数执行所述指令。
7.根据权利要求6所述的系统,进一步包括高速缓存表,以及其中,一旦将所述操作数加载到所述源操作数收集器高速缓存中,则所述调度单元进一步配置为更新所述高速缓存表以将与所述操作数相应的寄存器索引与所述源操作数收集器高速缓存中的存储元件相关联。
8.根据权利要求6所述的系统,其中所述本地寄存器堆包括多个寄存器库。
9.根据权利要求6所述的系统,进一步包括交叉开关,其配置为将所述多个寄存器库的第一寄存器库中的寄存器耦合到所述源操作数收集器高速缓存中的第一存储元件。
10.根据权利要求6所述的系统,其中所述源操作数收集器高速缓存的大小设置为并发存储由所述指令所指定的所述多个操作数和由另一个经解码指令所指定的多个操作数。
全文摘要
用于源操作数收集器高速缓存的方法和装置。在一个实施例中,处理器包括可以耦合到存储元件(即操作数收集器)的寄存器堆,该存储元件提供到处理器内核的数据路径的输入以执行指令。为了减小寄存器堆和操作数收集器之间的带宽,可以高速缓存并在随后的指令中重复利用操作数。调度单元维护用于监视哪个寄存器值当前存储在操作数收集器中的高速缓存表。调度单元还可以配置操作数收集器以针对给定指令选择耦合到数据路径的输入的特定存储元件。
文档编号G06F9/345GK103197916SQ20121053997
公开日2013年7月10日 申请日期2012年12月13日 优先权日2011年12月14日
发明者杰克·希莱尔·肖凯特, 曼纽尔·奥利维尔·高斯奥, 约翰·埃里克·林霍尔姆 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1