用于经由纹理硬件实施存储器访问操作的技术的制作方法

文档序号:6524566阅读:157来源:国知局
用于经由纹理硬件实施存储器访问操作的技术的制作方法
【专利摘要】本发明公开了用于经由纹理硬件实施存储器访问操作的技术。纹理处理管线可经配置以为表示纹理数据访问操作或通用数据访问操作的存储器访问请求服务。当纹理处理管线接收到表示纹理数据访问操作的存储器访问请求时,纹理处理管线可基于纹理坐标来检索纹理数据。当存储器访问请求表示通用数据访问操作时,纹理管线从存储器访问请求中提取虚拟地址,并随后基于该虚拟地址检索数据。纹理处理管线还配置为对代表一组线程所检索的通用数据进行高速缓存,并配置为随后在线程组退出时使该通用数据无效。
【专利说明】用于经由纹理硬件实施存储器访问操作的技术
【技术领域】
[0001]本发明总地涉及存储器访问操作,并且更具体地,涉及用于经由纹理硬件实施存储器访问操作的技术。
【背景技术】
[0002]常规的图形处理单元(GPU)包括纹理处理硬件,其配置为实施各种与纹理相关的操作,包括纹理加载操作和纹理高速缓存操作。图形程序开发者可生成使用这种纹理处理硬件的着色器程序以渲染三维图形场景。
[0003]近年来,程序开发者们已经开始生成实施任意的、非面向图形的操作的着色器程序,所述操作利用(leverage)GPU的并行处理架构的杠杆。然而,考虑到纹理处理硬件的架构,那些存储器访问操作必须被仔细地设计以类似于纹理处理操作。例如,典型的纹理访问操作基于与纹理相关联的二维(2D)坐标和维度从存储器读取2D纹理数据。为了生成能够加载非纹理数据的着色器程序,程序开发者必须将所有数据元素明确地声明为具有体现与纹理相似的2D数据结构的2D坐标和维度,而不管与该数据相关联的实际维度。
[0004]上述方法是有问题的,因为创建实施任意计算的着色器程序要求大量的纹理处理操作知识,而许多希望利用GPU的并行处理架构的程序开发者缺乏这类知识。这些要求为许多程序开发者造成了相当大的进入障碍。
[0005]该问题的一个解决方案是除了现存的纹理处理硬件之外,还为通用存储器访问操作创建单独的数据路径。采用该方法,希望采用任意的非纹理数据来实施处理操作的程序开发者可简单地写出依靠该单独路径的程序。然而,该方法是有问题的,因为常规的GPU就是缺乏集成附加数据路径所要求的空间,并且增加GPU的大小代价很高。
[0006]因此,本领域需要的是用于经由纹理处理硬件来实施通用数据访问操作的更有效的技术。

【发明内容】

[0007]一种用于实施数据访问操作的计算机实现的方法,包括:接收来自线程组内的线程的存储器访问请求,确定与存储器访问请求相关联的数据部分未存在于高速缓存存储器单元中,从全局存储器中检索与存储器访问请求相关联的数据部分,在线程组内的线程的执行期间将数据部分存储在高速缓存存储器单元内,以及一旦确定线程组内的每个线程均已在处理单元上完成执行则将数据部分从高速缓存存储器单元中清除(flush)。
[0008]所公开的技术的一个优点是,纹理处理硬件能够针对线程组的持续时间对针对该组线程所检索的通用数据进行高速缓存,从而高效地利用纹理硬件内的高速缓存资源。
【专利附图】

【附图说明】
[0009]因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
[0010]图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
[0011]图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
[0012]图3A是根据本发明的一个实施例的、图2的前端的框图;
[0013]图3B是根据本发明的一个实施例的、图2的并行处理单元之一内的通用处理集群的框图;
[0014]图3C是根据本发明的一个实施例的、图3B的流多处理器的一部分的框图;
[0015]图4是根据本发明的一个实施例的、图2的并行处理单元中的一个或多个可经配置以实现的图形处理管线的概念图;
[0016]图5是根据本发明的一个实施例的、图3B的通用处理集群内的纹理单元可经配置以实现的纹理处理管线的概念图;
[0017]图6是根据本发明的一个实施例的标签表的概念图;
[0018]图7是根据本发明的一个实施例的、用于经由图5中所示的纹理处理管线来实施存储器访问操作的方法步骤的流程图;以及
[0019]图8是根据本发明的一个实施例的、用于对与在图3B中所示的流多处理器上执行的一组线程相关联的数据进行高速缓存和使其无效的方法步骤的流程图。
【具体实施方式】
[0020]在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他实例中,未描述公知特征以避免对本发明造成混淆。
[0021]系统概述
[0022]图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU) 102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106 (例如超传输(HyperTransport)链路)连接到输入/输出(I/O)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108 (例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113 (例如外围部件互连(PCI)Express、加速图形端口或超传输链路)耦连到存储器桥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 (加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。[0023]在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。
[0024]应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其他设备经由存储器桥105和CPU102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或更多个CPU102以及两个或更多个并行处理系统112。本文所示的特定部件是可选的;例如,任何数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。[0025]图2示出了根据本发明的一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PI3U) 202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
[0026]再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204 (可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PTO可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
[0027]在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。[0028]现在返回参考图2和图1,每个PPU202包括经由连接到存储器桥105 (或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O (输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
[0029]在一个实施例中,通信路径113是PCI Express链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口 206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
[0030]有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202 (O)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于实施不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
[0031]GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口 206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
[0032]存储器接口 214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D > 1。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM) 220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的普通技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
[0033]任何一个GPC208都可以处理要被写到并行处理存储器204内的任何DRAM220的数据。交叉开关单元210配置为路由每个GPC208的输出到任何分区单元215的输入或到另一个GPC208用于进一步处理。GPC208通过交叉开关单元210与存储器接口 214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口 214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC208内的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC208与分区单元215之间的业务流。
[0034]另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
[0035]PPU202可配备有任何容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任何组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。
[0036]如上所示,在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PI3U从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
[0037]多个并发任务调度
[0038]可以在GPC208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务用于由GPC208执行。
[0039]图3A为根据本发明的一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织所要调度的任务。对于每个优先级级别,任务管理单元300将指向与任务相对应的TMD322的指针的列表存储在调度器表321中,其中所述列表可以实现为链表。可以将TMD322存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务用于执行的速度是解耦的。因此,任务管理单元300可以在调度任务之前收集数个任务。之后可以基于优先级信息或使用其他技术诸如轮叫调度来调度所收集的任务。
[0040]工作分布单元340包括具有槽的任务表345,每个槽可以被用于正在执行的任务的TMD322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务用于执行。当没有空闲槽时,未占用槽的较高优先级任务可以驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将指向该任务的指针添加到所要调度的任务指针的列表以使得任务的执行稍后将恢复。当生成子处理任务时,在任务的执行期间,将指向该子任务的指针添加到所要调度的任务指针的列表。可以由在处理集群阵列230中执行的TMD322生成子任务。
[0041 ] 不同于由任务/工作单元207从前端212接收的任务,子任务从处理集群阵列230接收。子任务不被插入入栈缓冲区或传送到前端。当生成子任务或将用于子任务的数据存储在存储器中时不通知CPU102。通过入栈缓冲区提供的任务与子任务之间的另一个区别是通过入栈缓冲区提供的任务由应用程序来定义而子任务是在任务执行期间动态生成的。
[0042]任务处理概述
[0043]图3B为根据本发明的一个实施例的在图2的PPU202之一内的GPC208的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SMD处理机制代表SMT处理机制的功能子集。
[0044]经由将处理任务分布到流多处理器(SM) 310的管线管理器305来有利地控制GPC208的操作。管线管理器305还可配置为通过为由SM310所输出的处理数据指定目的地来控制工作分布交叉开关330。 [0045]在一个实施例中,每个GPC208包括M个SM310,其中M≥1,每个SM310配置为处理一个或多个线程组。另外,如本领域已知的,每个SM310有利地包括可以管线化的同样功能执行单元集(例如执行单元和加载-存储单元一在图3C中示出为Exec单元302和LSU303 ),其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任何组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、X0R)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的操作。
[0046]如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM310内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM310可以并发支持多达G个线程组,结果是在任何给定时间在GPC208中可以执行多达G*M个线程组。
[0047]此外,多个相关线程组可以在SM310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。
[0048]每个SM310包含一级(LI)高速缓存(图3C所示)或使用用于实施加载和存储操作的SM310外部的相应LI高速缓存中的空间。每个SM310都还有权访问在所有GPC208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,SM310还有权访问片夕卜“全局”存储器,所述“全局”存储器可以包括例如并行处理存储器204和/或系统存储器104。应该理解,PPU202外部的任何存储器可用作全局存储器。此外,一点五级(L1.5)高速缓存335可以包括在GPC208内,其配置为接收并保持由SM310所请求的经由存储器接口 214从存储器获取的数据,包括指令、一致(uniform)数据和常数数据,并将所请求的数据提供给SM310。在GPC208中具有多个SM310的实施例有利地共享了高速缓存在L1.5高速缓存335中的公共指令和数据。
[0049]每个GPC208可以包括配置为将虚拟地址映射到物理地址中的存储器管理单元(MMU) 328ο在其他实施例中,MMU328可以驻留在存储器接口 214内。MMU328包括用于将虚拟地址映射到像素块(tile)的物理地址的页表条目(PTE)集和可选地包括高速缓存行索引。MMU328可以包括地址转译后备缓冲区(TLB)或可以驻留在多处理器SM310或LI高速缓存或GPC208内的高速缓存。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元215之间交错。高速缓存行索引可用于确定用于高速缓存行的请求是命中还是未命中。
[0050]在图形和计算应用中,GPC208可配置为使得每个SM310耦连到用于实施纹理映射操作例如确定纹理样本位置、读取纹理数据以及过滤该纹理数据的纹理单元315。从内部纹理LI高速缓存(未示出)或者在一些实施例中从SM310内的LI高速缓存读取纹理数据并根据需要从在所有GPC208之间共享的L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了将所处理的任务提供给另一个GPC208用于进一步处理或为了经由交叉开关单元210将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM310将所处理的任务输出到工作分布交叉开关330。preROP (预光栅操作)325配置为从SM310接收数据、将数据引导到分区单元215内的ROP单元以及针对颜色混合实施优化、组织像素颜色数据和实施地址转译。
[0051]应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。任何数目的处理单元例如SM310或纹理单元315、preR0P325可以包括在GPC208内。进一步地,如图2所示,PPU202可以包括任何数目的GPC208,所述GPC208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC208接收特定处理任务。进一步地,每个GPC208有利地使用分开且各异的处理单元、LI高速缓存来独立于其他GPC208操作以为一个或多个应用程序执行任务。
[0052]本领域普通技术人员应该理解图1、2、3A和3B所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任何经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等。
[0053]在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
[0054]每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读取和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读取的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读取数据。因此,数据在线程之间共享的任何期望模式可以得到支持,以及CTA中的任何线程可以与同一个CTA中的任何其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
[0055]图3C为根据本发明的一个实施例的图3B的SM310的框图。SM310包括配置为经由L1.5高速缓存335从存储器接收指令和常数的指令LI高速缓存370。线程束调度器和指令单元312从指令LI高速缓存370接收指令和常数并根据该指令和常数控制本地寄存器堆304和SM310功能单元。SM310功能单元包括N个exec (执行或处理)单元302和P个加载-存储单元(LSU) 303。
[0056]SM310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM310内的每exec单元302) —个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由TMD322所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储CTA标识符、CTA维数、CTA所属网格(grid)的维数(或队列位置,如果TMD322编码队列任务而不是网格任务的话)、以及CTA被指派到的TMD322的标识符。
[0057]如果TMD322是网格TMD,则TMD322的执行会启动和执行固定数目的CTA以处理存储在队列525中的固定量的数据。将CTA的数目指定为网格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD322中或TMD322可以存储指向将由CTA所处理的数据的指针。TMD322还存储由CTA所执行的程序的开始地址。
[0058]如果TMD322是队列TMD,那么使用TMD322的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD322的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD322所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD322中或与TMD322分开存储,在该情况下TMD322存储指向该队列的队列指针。有利地,当代表子任务的TMD322正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。
[0059]属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA与具体TMD322相关联用于一个或多个任务的并发执行。此外,单个GPC208可以并发执行多个任务。
[0060]参数存储器(未示出)存储可由同一个CTA内的任何线程(或任何LSU303)读取但不可由其写入的运行时间参数(常数)。在一个实施例中,设备驱动程序103在引导SM310开始执行使用参数的任务之前将这些参数提供给参数存储器。任何CTA内的任何线程(或SM310内的任何exec单元302)可以通过存储器接口 214访问全局存储器。可以将全局存储器的各部分存储在LI高速缓存320中。
[0061]每个线程将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任何部分中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通道的寄存器堆,每个通道具有一定数目的条目(其中每个条目可以存储例如32位字)。将一个通道指派到N个exec单元302和P个下载-存储单元LSU303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通道中的相应条目以帮助SIMD执行。可以将通道的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,实现特殊寄存器之一。此外,一致LI高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU303的每个通道的一致值或常数值。
[0062]共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任何位置对于同一个CTA内的任何线程(或对于SM310内的任何处理引擎)可访问。共享存储器306可以实现为具有允许任何处理引擎对共享存储器中的任何位置读取或写入的互连的共享寄存器堆或共享片上高速缓存存储器。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA区上并被高速缓存在LI高速缓存320中。参数存储器可以实现为在实现共享存储器306的同一个共享寄存器堆或共享高速缓存存储器内的指定部分,或者实现为LSU303对其具有只读访问权限的分开的共享寄存器堆或片上高速缓存存储器。在一个实施例中,实现参数存储器的区域还用于存储CTA ID和任务ID,以及CTA和网格维数或队列位置,实现特殊寄存器的各部分。SM310中的每个LSU303耦连到统一地址映射单元352,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个各异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任何一个。
[0063]每个SM310中的LI高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在LI高速缓存320中。LSU303经由存储器和高速缓存互连380耦连到共享存储器306和LI高速缓存320。
[0064]图形管线架构
[0065]图4是根据本发明的一个实施例的、图2的PPU202中的一个或多个可经配置以实现的图形处理管线400的概念图。例如,SM310中的一个可配置为实施顶点处理单元415、几何处理单元425、片段处理单元460中的一个或多个的功能。还可由GPC208内的其他处理引擎和相应的分区单元215实施数据汇编器410、基元汇编器420、光栅化器455和光栅操作单元465的功能。可替代地,可使用用于一个或多个功能的专用处理单元来实现图形处理管线400。
[0066]数据汇编器410处理单元收集用于高阶表面、基元等的顶点数据,并将包括顶点属性的顶点数据输出到顶点处理单元415。顶点处理单元415是可编程执行单元,其配置为执行顶点着色器程序,按顶点着色器程序所指定的来亮化和变换顶点数据。例如,顶点处理单元415可被编程以将顶点数据从基于对象的坐标表示(对象空间)变换到可替代地基于诸如世界空间或规格化设备坐标(NDC)空间的坐标系。顶点处理单元415可读取由数据汇编器410所存储在LI高速缓存320、并行处理存储器204、或系统存储器104中的数据用于在处理顶点数据中使用。
[0067]基元汇编器420从顶点处理单元415接收顶点属性、按需要读取所存储的顶点属性、并构建图形基元用于由几何处理单元425处理。图形基元包括三角形、线段、点等等。几何处理单元425是可编程执行单元,其配置为执行几何着色器程序,按几何着色器程序所指定的来变换从基元汇编器420所接收的图形基元。例如,几何处理单元425可被编程以将图形基元细分成一个或多个新图形基元并计算用来将新图形基元光栅化的参数,诸如平面方程系数。
[0068]在一些实施例中,几何处理单元425还可在几何流中添加或删除元素。几何处理单元425将指定新图形基元的参数和顶点输出到视口缩放、剔除(cull)和裁剪(clip)单元450。几何处理单元425可读取存储在并行处理存储器204或系统存储器104中的数据用于在处理几何数据中使用。视口缩放、剔除和裁剪单元450实施裁剪、剔除和视口缩放,并将所处理的图形基元输出到光栅化器455。
[0069]光栅化器455扫描转换新图形基元并将片段和覆盖数据输出到片段处理单元460。此外,光栅化器455可配置为实施z剔除(z-culling)和其他基于z的优化。
[0070]片段处理单元460是可编程的执行单元,其配置为执行片段着色器程序,按片段着色器程序所指定的来变换从光栅化器455所接收的片段。例如,片段处理单元460可被编程以实施诸如透视校正、纹理映射、着色、混合等操作,以产生输出到光栅操作单元465的经着色的片段。在一个实施例中,片段处理单元460结合图3B中所示的纹理单元315进行操作以实施纹理映射操作。片段处理单元460可读取存储在并行处理存储器204或系统存储器104中的数据用于在处理片段数据中使用。可以像素、样本、或其他粒度对片段着色,这取决于所编程的采样率。
[0071]光栅操作单元465是处理单元,其实施诸如模板(Stencil)、Z测试、混合等的光栅操作,并输出像素数据作为经处理的图形数据用于存储在图形存储器中。经处理的图形数据可存储在图形存储器例如并行处理存储器204和/或系统存储器104中,用于在显示设备110上显示或用于由CPU102或并行处理子系统112进一步处理。在本发明的一些实施例中,光栅操作单元465配置为压缩写入到存储器的z或颜色数据以及解压缩从存储器中读取的z或颜色数据。
[0072]如上文结合图3B所述,图3B中所示的纹理单元315配置为代表SM310(也在图3B中示出)实施纹理处理操作。这样做时,纹理单元315配置为从图1-3C中所示的存储器单元中的任何一个读取纹理数据。此外,纹理单元315还可配置为实施全局存储器加载操作,以使用现存的纹理数据路径从那些存储器单元读取任意数据。当SM310配置为实施通用处理操作时,纹理单元315可配置为实现纹理处理管线,如下文结合图5所讨论的。下文所讨论的纹理处理管线允许纹理单元315经由相同数据路径读取纹理数据或通用全局数据。
[0073]经由纹理硬件实施存储器访问操作
[0074]图5是根据本发明的一个实施例的、图3B的通用处理集群208内的纹理单元315可经配置以实现的纹理处理管线500的概念图。如所示的,纹理处理管线500包括耦连到状态高速缓存504的纹理输入(TEXIN)单元502、细节级别(LOD)单元506、地址单元508、标签单元510、未命中(miss)处理单元512、以及包括先入先出(FIF0)516和高速缓存单元518的数据单元514。
[0075]纹理处理管线500配置为处理从图3B中所示的SM310所接收的存储器访问请求。给定的存储器访问请求可以表示纹理数据访问操作,诸如例如从存储器读取纹理的读操作。可替代地,给定的存储器访问请求可以表示通用数据访问操作,诸如例如全局存储器加载操作。
[0076]给定的存储器访问请求包括“状态索引”,TEXIN单元502使用该“状态索引”来确定存储器访问请求表示纹理数据访问操作还是通用数据访问操作。当纹理处理管线500接收到存储器访问请求时,TEXIN单元502从存储器访问请求中提取状态索引,并且随后将状态索引的一部分与TEXIN单元502内的请求状态寄存器进行比较。请求状态寄存器指示与通用数据访问操作相关联的特定索引。当与给定存储器访问请求相关联的状态索引与请求状态寄存器相匹配时,TEXIN单元502对纹理处理管线500进行配置以实施通用数据访问操作。TEXIN单元502还可修改存储器访问请求以体现对与通用数据访问操作相关联的数据进行高速缓存的特定级别。在一个实施例中,TEXIN单元502由在SM310上执行的软件应用所配置以修改存储器访问请求以体现特定高速缓存级别。
[0077]在TEXIN单元502确定存储器访问请求表示纹理数据访问操作的情况下,TEXIN单元502对纹理处理管线500进行配置以实施纹理数据访问操作。在一个实施例中,可执行诸如例如图1中所示的驱动程序103的软件应用以配置请求状态寄存器。
[0078]在对表示纹理数据访问操作的存储器访问请求进行处理时,TEXIN单元502使用状态索引来访问状态高速缓存504。TEXIN单元502从状态高速缓存504中提取与将被从存储器所访问的纹理数据相对应的附加纹理信息。附加纹理信息可包括纹素(texel)大小、纹理起点、纹理维度以及纹理边界数据,或其他类型的与纹理相关的信息。TEXIN单元502可将该附加纹理信息合并到存储器访问请求中,并且随后将存储器访问请求传递到LOD单元 506。
[0079]LOD单元506配置为基于包括在存储器访问请求内的坐标集的位置和方向来计算用于将被从存储器所访问的纹理数据的“细节级别”。坐标集可表示驻留在图形场景内的纹理的位置和方向。LOD单元506可将所计算的细节级别合并到存储器访问请求中,并且随后将存储器访问请求传递到地址单元508。地址单元508配置为基于存储器访问请求内的坐标来实施各种地址计算。地址计算的结果可用来标识包括在标签单元510内的标签表中的条目。地址单元508将存储器访问请求和地址计算结果传递到标签单元510。
[0080]标签单元510包括存储条目集的标签表。每个条目表示高速缓存单元内的行。高速缓存单元518可表示驻留在纹理单元315内的高速缓存存储器,或者还可表示驻留在图3C中所示的SM310内的LI高速缓存320,或其他高速缓存存储器单元。一旦从地址单元508接收到存储器访问请求和地址计算结果,标签单元510确定标签表是否包括与将被检索的纹理数据相对应的条目。下文结合图6更详细讨论包括在标签单元510内的标签表。
[0081]当标签表包括与将被访问的纹理数据相对应的条目时,发生高速缓存命中,并且标签单元510确定将被访问的纹理数据驻留在高速缓存单元518中。标签单元510通过搜索标签表来检索条目,并检索高速缓存518内的偏移,纹理数据实际驻留在该偏移处。该条目可包括U-坐标和V-坐标。标签单元510将偏移传递到FIF0516,并且高速缓存单元518可随后将所高速缓存的数据提供给SM310。
[0082]当标签表不包括与将被访问的纹理数据相对应的条目时,发生高速缓存未命中,并且标签单元510使未命中处理单元512从全局存储器访问所请求的纹理数据。未命中处理单元512可通过基于包括在存储器访问请求内的数据计算虚拟地址、实施虚拟到物理地址的转译、并且随后从物理位置读取所请求的数据来访问所请求的纹理数据。在一个实施例中,未命中处理单元512驻留在图3B中所示的MMU328内。未命中处理单元512可随后采用从全局存储器所访问的纹理数据来填充高速缓存单元518,并更新标签单元510内的标签表以体现所新高速缓存的纹理数据。该纹理数据可随后被提供给SM310。
[0083]如上文所述,纹理处理管线500还可配置为处理与纹理数据不具体相关联的通用数据访问操作,诸如例如全局存储器加载操作,或其他。当纹理处理管线500接收到与通用数据访问操作相关联的存储器访问请求时,TEXIN单元502基于包括在存储器访问请求内的状态索引,即通过以如上文所述的类似方式将状态索引与请求状态寄存器进行比较,来确定存储器访问请求与通用数据访问操作相关联。也如所述的,TEXIN单元502还可修改存储器访问操作以体现对与通用数据访问操作相关联的数据进行高速缓存的特定级别。
[0084]当TEXIN单元502确定存储器访问请求与通用数据访问操作相关联时,TEXIN单元502随后相应地对纹理处理管线500进行配置。这样做时,TEXIN单元502可使LOD单元506将存储器访问请求直接传递到地址单元508 (即不对存储器访问请求实施任何处理操作)。TEXIN单元502还可使地址单元508将来自LOD单元506的存储器访问请求直接传递到标签单元510 (即不对存储器访问请求实施任何处理操作)。以该方式,存储器访问请求可有效地绕开LOD单元506和地址单元508。
[0085]标签单元510接收到存储器访问请求并提取包括在存储器访问请求内的虚拟地址。虚拟地址与将通过实施与存储器访问请求相关联的通用数据访问操作而被检索的通用数据相对应。标签单元510随后确定标签表是否包括与所提取的虚拟地址相对应的条目。如上文所讨论的,标签表配置为存储与纹理数据相关联的条目以及与通用数据相关联的虚拟地址。如上文所述,下文结合图6更详细讨论标签单元510内的标签表。
[0086]当标签表包括与所提取的虚拟地址相对应的条目时,发生高速缓存命中,并且将被检索的通用数据驻留在高速缓存单元518中。标签单元510从虚拟地址中提取偏移并将该偏移推送到FIF0516。当FIF0516内的预存偏移已退出FIF0516时,数据单元514可从FIF0516中取出(pop)该偏移,并且随后基于该偏移从高速缓存518检索所请求的数据。数据单元514可随后将与该偏移相关联的数据提供给SM310。
[0087]当标签表不包括与所提取的虚拟地址相对应的条目时,发生高速缓存未命中,并且标签单元510使未命中处理单元512从全局存储器检索所请求的通用数据,即通过实施虚拟到物理地址的转译和从物理位置读取所请求的数据。未命中处理单元512可随后采用所检索的通用数据来填充高速缓存单元518,并更新标签单元510内的标签表以体现所新高速缓存的通用数据。该通用数据可随后被提供给SM310。
[0088]如上文所讨论的,通过实现纹理处理管线500,纹理单元315可经配置以经由相同数据路径实施纹理数据访问操作以及通用数据访问操作。此外,在CPU102和/或并行处理子系统112上执行的软件,包括驱动程序103,可经配置以包括将通用数据访问操作暴露给软件开发者的简化的存储器访问命令。采用该方法,软件开发者能够生成包括可由SM310和纹理处理管线500所服务的通用存储器访问操作的程序代码。并且,不要求软件开发者包括任何面向纹理的程序代码来实现那些存储器访问操作。
[0089]图6是根据本发明一个实施例的、上文结合图5所讨论的标签表600的概念图。如所示的,标签表600包括条目集602-1、602-2、602-3和602-N。每个条目602包括相应的状态索引604。条目602-1包括状态索引604-1,条目602-2包括状态索引604-2,条目602-3包括状态索引604-3,以及条目602-N包括状态索引604-N。每个条目602与存储在图5中所示的高速缓存单元518中的一数据部分相对应。存储在图5中所示的高速缓存单元518中的该数据部分可以是纹理数据或通用数据。
[0090]与纹理数据相对应的给定条目602包括U-坐标606和v_坐标608。如所示的,条目602-1与纹理数据相对应并且因此包括U-坐标606-1和V-坐标608-1。同样地,条目602-N与纹理数据相对应并且因此包括U-坐标606-N和V-坐标608-N。与通用数据相对应的给定条目602包括与该通用数据相关联的虚拟地址610。如所示的,条目602-2与通用数据相对应并且因此包括虚拟地址610-2,而条目602-3也与通用数据相对应并且因此包括虚拟地址610-3。
[0091]当图5中所示的纹理处理管线500配置为处理存储器访问请求时,如上文结合图5所讨论的,标签单元510可针对每个这类存储器访问请求查询标签表600。针对给定的存储器访问请求,标签单元510查询标签表600以确定将结合该存储器访问请求而被检索的数据是驻留在高速缓存单元518中还是应被从全局存储器进行检索。
[0092]当给定的存储器访问请求表示纹理数据访问操作时,标签单元510可标识标签表600内的条目602,这指示高速缓存命中。标签单元510可随后针对将被从该条目内检索的纹理数据提取高速缓存地址。当给定的存储器访问请求表示通用数据访问操作时,标签单元510也可标识标签表600内的条目602,这指示高速缓存命中。标签单元510可随后针对将被从该条目检索的纹理数据提取高速缓存地址。
[0093]采用上文的方法,可以类似的方式将纹理数据和通用数据高速缓存在高速缓存单元518内并经由标签表600对其进行管理。现在参考回图5,当SM310 (也在图3B中示出)执行一个或多个线程组时,纹理处理管线500可由图3B中所示的纹理单元315所实现。给定的线程组可经由上文结合图5所描述的技术来实施纹理数据访问操作或通用数据访问操作。
[0094]当代表给定线程组内的线程来处理表示通用数据访问操作的存储器访问请求时,标签单元510可能确定由存储器访问请求所指示的通用数据没有驻留在高速缓存单元518内(即发生高速缓存未命中)。作为响应,标签单元510配置为使未命中处理单元512检索全局数据并将该数据存储在高速缓存单元518内,如先前所讨论的。通过对与线程组内的给定线程相关联的数据进行高速缓存,标签单元510可使该线程组内的其他线程能够访问针对给定线程所检索的数据的经高速缓存的版本。采用该方法,标签单元510可阻止下述情况:线程组内的每个线程尝试访问数据的相同部分从而产生针对数据的相同部分的多个并发高速缓存未命中。这类情况可导致未命中处理单元512对数据的相同部分检索多次(SP一次针对每个线程)。
[0095]此外,当代表给定线程组来高速缓存通用数据时,标签单元510配置为更新标签表600以体现所高速缓存的数据仅用于针对其数据被检索的线程组的持续时间而被高速缓存。因为后续的线程组可能不要求针对给定线程组所高速缓存的通用数据,所以一旦退出线程组可使该数据无效,从而节省高速缓存资源。在一个实施例中,与标签表内的给定条目相关联的状态索引604指示与该条目相关联的数据是针对当前线程组的持续时间而被高速缓存还是针对多于一个的线程组而被高速缓存。在另一个实施例中,TEXIN单元502基于状态索引更新存储器访问请求以包括指示对与存储器访问请求相关联的数据进行高速缓存的级别的标注,并且标签单元510将该标注合并到标签表内与存储器访问请求相关联的条目中。
[0096]所描述的用于经由纹理管线500实施通用数据访问操作、以及用于使针对线程组的持续时间所高速缓存的通用数据无效的技术将在下文中分别结合图7和图8进行更详述描述。
[0097]图7是根据本发明一个实施例的、用于经由图5中所示的纹理处理管线来实施全局存储器加载操作的方法步骤的流程图。虽然结合图1、2、3A、3B和3C的系统描述了方法步骤,但是本领域普通技术人员将理解的是,配置为以任何次序实施方法步骤的任何系统均在本发明的范围内。
[0098]如所示的,方法700开始于步骤702,此处纹理处理管线500内的TEXIN单元502从SM310接收存储器访问请求。存储器访问请求可表示纹理数据访问操作或可表示通用数据访问操作。
[0099]在步骤704,TEXIN单元502确定存储器访问请求表示通用数据访问操作。在一个实施例中,TEXIN单元502从存储器访问请求中提取状态索引并将状态索引的一部分与请求寄存器进行比较,以确定存储器访问请求表示通用数据访问操作。请求寄存器存储与通用数据访问操作相对应的状态索引,并且其可由在SM310上执行的软件应用所配置。
[0100]在步骤706,TEXIN单元502对纹理处理管线500进行配置以实施通用数据访问操作。这样做时,TEXIN单元502可使LOD单元506和地址单元508简单地将所接收的存储器访问请求传递到纹理处理管线500的后续单元而不对该存储器访问请求实施任何操作。以该方式,TEXIN单元502可使存储器访问请求绕过LOD单元506和地址单元508。
[0101]在步骤708,纹理处理管线500内的标签单元510从存储器访问请求中提取虚拟地址并确定虚拟地址是否存在于标签表中。标签表可以是例如图6中所示的标签表600。如果标签单元510确定虚拟地址存在于标签表中,那么发生高速缓存命中,并且方法700前进到步骤710。
[0102]在步骤710,标签单元510使数据单元514从高速缓存单元518检索与虚拟地址相关联的数据。标签单元510可将与虚拟地址相关联的偏移推送到FIF0516中,并且当FIF0516内的预存偏移已退出FIF0516时数据单元514可随后从FIF0516中取出偏移。数据单元514可随后基于该偏移从高速缓存单元518中检索所请求的数据。方法700随后前进到步骤714,此处数据单元514将所高速缓存的数据提供给SM310。
[0103]在步骤708,如果标签单元510确定虚拟地址未存在于标签表中,那么发生高速缓存未命中,并且方法700前进到步骤712。在步骤712,未命中处理单元512从全局存储器检索所请求的数据。这样做时,未命中处理单元512可实施虚拟到物理地址的转译并且随后从物理位置访问所请求的数据。未命中处理单元512可配置为将所请求的数据高速缓存到高速缓存单元518中。方法随后前进到步骤714,此处数据单元514以上文所述的类似方式将所新高速缓存的数据提供给SM310。
[0104]通过实现方法700,纹理单元315可经配置以实现纹理处理管线500,以经由相同数据路径来实施纹理数据访问操作以及通用数据访问操作。
[0105]图8是根据本发明一个实施例的、用于对与在图3B中所示的流多处理器上执行的一组线程相关联的数据进行高速缓存和使其无效的方法步骤的流程图。虽然结合图1、2、3A、3B和3C的系统描述了方法步骤,但是本领域普通技术人员将理解的是,配置为以任何次序实施方法步骤的任何系统均在本发明的范围内。
[0106]如所示的,方法800开始于步骤802,此处SM310启动一组线程。一组线程可生成表示纹理数据访问操作或通用数据访问操作的存储器访问请求。SM310配置为使纹理单元315为那些存储器访问请求服务。这样做时,纹理单元315可实现图5中所示的纹理处理管线500,并可实施上文结合图7所讨论的方法700。
[0107]在步骤804,纹理处理管线500内的标签单元510确定由一组线程内的线程所生成的通用数据访问操作导致发生高速缓存未命中。通用数据访问操作由存储器访问操作所表示,所述存储器访问操作由纹理处理管线500从一组线程内的线程所接收。存储器访问操作包括与将被检索的数据相对应的虚拟地址。标签单元510配置为通过确定虚拟地址未存在于包括在标签单元510内的标签表中来确定发生了高速缓存未命中。
[0108]在步骤806,标签单元510使未命中处理单元512从全局存储器检索与通用数据访问操作相关联的数据。这样做时,未命中处理单元512可将包括在存储器访问请求内的虚拟地址转译成物理地址。未命中处理单元512可随后从与该物理地址相关联的地址位置读取所请求的数据。
[0109]在步骤808,标签单元510对高速缓存单元518内的高速缓存行进行分配以存储由未命中处理单元512所检索的数据,并随后使数据被存储在所分配的高速缓存行内。在步骤810,标签单元510指定包括在标签单元510内的标签表内的条目用于所新高速缓存的数据。标签表可以是例如图6中所示的标签表600。所指定的条目指示所新高速缓存的数据仅针对线程组的持续时间而被高速缓存,所述线程组包括是导致高速缓存未命中的原因的线程。在一个实施例中,由线程组内的线程所生成的存储器访问请求指示将与所新高速缓存的数据相关联的高速缓存级别,包括回收策略,或其他事项。
[0110]方法800在步骤812等待直到线程组内的所有线程均已完成执行。当线程组内的最后一个线程或线程子集退出时,方法800前进到步骤814,此处标签单元510使高速缓存单元518内与代表线程组所检索的数据相关联的条目无效。随后可将代表一组线程所高速缓存的通用数据从高速缓存单元518中清除(flush)。随后方法800结束。
[0111]采用该方法,在针对线程组内的线程处理通用数据访问操作时所检索的数据可针对线程组的持续时间而被高速缓存,并且随后一旦线程组退出可被无效。这类功能性可阻止线程组内的不同线程所导致的多个高速缓存未命中,并且可产生较好的高速缓存资源使用。
[0112]总而言之,纹理处理管线可经配置以为表示纹理数据访问操作或通用数据访问操作的存储器访问请求服务。当纹理处理管线接收到表示纹理数据访问操作的存储器访问请求时,纹理处理管线可基于纹理坐标来检索纹理数据。当存储器访问请求表示通用数据访问操作时,纹理管线从存储器访问请求中提取虚拟地址,并随后基于该虚拟地址来检索数据。纹理处理管线还配置为对代表一组线程所检索的通用数据进行高速缓存,并配置为随后在一组线程退出时使该通用数据无效。
[0113]有利地,图形处理单元(GPU)内的纹理硬件可配置为实施通用数据访问操作。该方法使软件开发者能够生成利用GPU的并行架构的程序代码,而不要求其实现面向纹理的存储器访问操作。此外,纹理硬件能够对针对一组线程的持续时间针对该组线程所检索的通用数据进行高速缓存,从而高效地利用纹理硬件内的高速缓存资源。
[0114]本发明的一个实施例可被实现为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写的存储介质(例如,计算机内的只读存储器设备,诸如可由压缩光盘只读存储器(CD-ROM)驱动器读取的CD-ROM盘、闪存存储器、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器),在其上存储永久性信息jP(ii)可写的存储介质(例如,磁盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。
[0115]以上已参照具体实施例对本发明进行了描述。然而,本领域普通技术人员将理解的是,可对此做出各种修改和改变而不脱离如随附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是例示性而非限制性的意义。
【权利要求】
1.一种用于针对在处理单元上执行的线程组而实施通用数据访问操作的计算机实现方法,所述方法包括: 接收来自所述线程组内的线程的存储器访问请求; 确定与所述存储器访问请求相关联的数据部分未存在于高速缓存存储器单元中; 从全局存储器中检索与所述存储器访问请求相关联的所述数据部分; 在所述线程组内的所述线程的执行期间,将所述数据部分存储在所述高速缓存存储器单元内;以及 一旦确定所述线程组内的每个线程均已在所述处理单元上完成执行,则将所述数据部分从所述高速缓存存储器单元中清除。
2.根据权利要求1所述的计算机实现方法,其中确定与所述存储器访问请求相关联的所述数据部分未存在于高速缓存存储器单元中包括:确定包括在所述存储器访问请求内的虚拟地址未存在于标签表中。
3.根据权利要求2所述的计算机实现方法,其中从全局存储器中检索与所述存储器访问请求相关联的所述数据部分包括: 将包括在所述存储器访问请求内的所述虚拟地址转译成物理地址;以及 从与所述物理地址相关联的物理位置检索所述数据部分。
4.根据权利要求1所述的计算机实现方法,进一步包括更新标签表中的条目以反映与所述高速缓存存储器单元内的 所述数据部分相关联的位置。
5.根据权利要求4所述的计算机实现方法,其中所述标签表中的所述条目反映与所述存储器访问请求相关联的可配置高速缓存级别,所述可配置高速缓存级别指示用于使所述标签表中的所述条目无效的条件。
6.根据权利要求5所述的计算机实现方法,其中所述条件指示当所述线程组内的每个线程均已在所述处理单元上完成执行时,所述标签表中的所述条目应被无效,并且进一步包括一旦确定所述线程组内的每个线程均已在所述处理单元上完成执行,则使所述标签表中的所述条目无效。
7.根据权利要求1所述的计算机实现方法,其中所述处理单元配置为实现纹理处理管线,所述线程组内的每个线程配置为在所述纹理处理管线上执行,并且进一步包括对所述纹理处理管线进行配置,以针对所述线程组内的线程来实施通用非纹理数据访问操作而不是纹理数据访问操作。
8.根据权利要求1所述的计算机实现方法,其中所述存储器访问请求反映通用非纹理数据访问操作。
9.一种配置为针对在处理单元上执行的线程组而实施通用数据访问操作的计算设备,包括: 处理单元,其配置为: 接收来自所述线程组内的线程的存储器访问请求, 确定与所述存储器访问请求相关联的数据部分未存在于高速缓存存储器单元中, 从全局存储器中检索与所述存储器访问请求相关联的所述数据部分, 在所述线程组内的所述线程的执行 期间,将所述数据部分存储在所述高速缓存存储器单元内,以及一旦确定所述线程组内的每个线程均已在所述处理单元上完成执行,则将所述数据部分从所述高速缓存存储器单元中清除。
10.根据权利要求9所述的计算设备,进一步包括: 耦连到所述处理单元的存储器单元,其存储程序指令,所述程序指令当由所述处理单元执行时,使所述处理单元进行下列操作: 确定与所述存储器访问请求相关联的数据部分未存在于高速缓存存储器单元中, 从全局存储器中检索与所述存储器访问请求相关联的所述数据部分, 在所述线程组内的所述线程的执行期间,将所述数据部分存储在所述高速缓存存储器单元内,以及 一旦确定所述线程组内的每个线程均已在所述处理单元上完成执行,则将所述数据部分从所述高速缓存存储器单元 中清除。
【文档编号】G06F13/16GK103885902SQ201310704648
【公开日】2014年6月25日 申请日期:2013年12月19日 优先权日:2012年12月19日
【发明者】布雷恩·法斯, 埃里克·T·安德森, 尼克·巴罗威廉姆斯, 瑟利斯·加德雷, 乔尔·詹姆斯·麦科马克, 布里翁·S·诺德奎斯特, 尼马尔·拉伊·萨克塞纳, 兰基·V·姗 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1