CN103197917A - 计算线程阵列粒度执行抢占 - Google Patents
计算线程阵列粒度执行抢占 Download PDFInfo
- Publication number
- CN103197917A CN103197917A CN2012104517450A CN201210451745A CN103197917A CN 103197917 A CN103197917 A CN 103197917A CN 2012104517450 A CN2012104517450 A CN 2012104517450A CN 201210451745 A CN201210451745 A CN 201210451745A CN 103197917 A CN103197917 A CN 103197917A
- Authority
- CN
- China
- Prior art keywords
- execution
- context
- processing pipeline
- contextual
- task
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Image Processing (AREA)
- Multi Processors (AREA)
Abstract
本发明的一个实施例阐述了一种技术指令级和计算线程阵列粒度执行抢占。在指令级的抢占不要求对处理管线的任何耗尽。没有新指令被发送并且上下文状态从处理管线被卸载。当在计算线程阵列边界执行抢占时,要存储的上下文状态量得以缩减,因为处理管线内的执行单元完成对进行中的指令的执行并且变成空闲。如果完成对进行中的指令的执行所需要的时间量超出阈值,则抢占可动态地改变为在指令级而非在计算线程阵列粒度执行。
Description
技术领域
本发明总地涉及程序执行抢占(preemption),并且更具体地涉及计算线程阵列粒度执行抢占。
背景技术
抢占是一种在多个不同的应用之间对处理器进行时间切片的机制。当多个不同的应用需要同时使用处理器时,一种实现所有应用上的前向进度的方式是使每个应用在处理器上运行短时间切片。传统上,时间切片要求处理器管线被完全耗尽并且当处理器空闲时不同的应用被接入以由处理器管线执行。这种时间切片机制被称为“等待空闲”抢占,并且该机制在处理器花费长时间来耗尽正在处理器管线上运行的工作时工作不良。例如,考虑很长时间运行的图形着色程序或者在最差的情况下为具有无限循环的着色程序。为了能够在不同应用之间进行时间切片,为使每个应用的执行空闲而需要的时间量应该被限制,从而使得长时间运行的应用实际上不会缩减可用于其他应用的时间切片。
被考虑来实施抢占的另一种机制是中止或冻结处理器并且然后存储处理器内的所有寄存器和管线触发器的内容且稍后恢复处理器内的所有寄存器和管线触发器的内容。存储和恢复所有寄存器和管线触发器的内容通常导致非常大量的状态要被保存和恢复。存储和恢复状态所需要的时间缩减了在时间切片期间可用于执行每个应用的时间。
因此,本领域所需要的是一种用于执行抢占的系统和方法,其不要求在抢占应用时存储应用的整个状态也不要求等待处理管线变成空闲以抢占应用。
发明内容
一种用于计算线程阵列粒度执行抢占的系统和方法。当发起抢占时,上下文状态从处理管线被卸载。当在计算线程阵列边界执行抢占时,要存储的上下文状态量得以缩减,因为处理管线内的执行单元完成对进行中的指令的执行并且变成空闲。如果完成对进行中指令的执行所需要的时间量超出阈值,则抢占可动态地改变为在指令级而非在计算线程阵列粒度执行。
用于在多线程系统中抢占程序指令的执行的本发明的方法的各个实施例包括,使用第一上下文在所述多线程系统内在处理管线中执行程序指令。在计算线程阵列级抢占使用所述第一上下文的执行以使用第二上下文在所述多线程系统中执行不同的程序指令。存储使用所述第一上下文的程序指令的执行被抢占的指示,以及使用所述第二上下文在所述处理管线中执行所述不同的程序指令。
本发明的各个实施例包括用于抢占程序指令的执行的多线程系统。多线程系统包括存储器、主机接口和处理管线。存储器配置为存储对应于第一上下文的程序指令和对应于第二上下文的不同的程序指令。主机接口耦合到处理管线并且配置为在计算线程阵列级抢占使用所述第一上下文的程序指令的执行以使用第二上下文执行不同的程序指令。处理管线配置为:使用第一上下文执行程序指令;抢占使用所述第一上下文的程序指令的执行以使用第二上下文执行不同的程序指令;存储使用所述第一上下文的程序指令的执行被抢占的指示;以及使用所述第二上下文执行所述不同的程序指令。
所述抢占机制最小化在抢占应用时保存的且在应用继续执行时恢复的状态量。另外,长时间运行的应用可以在很短的时间量中被抢占。
附图说明
因此,可以详细地理解上述列举的本发明的特征,并且可以参考实施例得到对上面所概括的本发明的更具体的描述,其中一些实施例在附图中示出。然而,应该注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,因为本发明可以承认其他等效的实施例。
图1是示出了配置为实现本发明一个或多个方面的计算机系统的框图;
图2是根据本发明一个实施例的用于图1的计算机系统的并行处理子系统的框图;
图3A是根据本发明一个实施例的图2的任务/工作单元的框图;
图3B是根据本发明一个实施例的在图2的一个并行处理单元内的通用处理集群的框图;
图4是根据本发明一个实施例的处理管线的框图;
图5A示出了根据本发明一个实施例的用于在抢占过程时卸载上下文状态的卸载方法;
图5B示出了根据本发明一个实施例的用于在恢复抢占的过程时恢复上下文状态的恢复方法;
图6A示出了根据本发明一个实施例的用于在抢占过程时卸载上下文状态的另一种卸载方法;
图6B示出了根据本发明一个实施例的用于在恢复抢占的过程时恢复上下文状态的另一种恢复方法。
具体实施方式
在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,对本领域的技术人员显而易见的是本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他例子中,没有描述公知的特征以避免对本发明造成混淆。
系统概述
图1是示出了经配置以实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理单元(CPU)102和经由可以包括存储器桥105的互连路径通信的系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由路径106和存储器桥105将所述输入转发到CPU 102。并行处理子系统112经由总线或其他通信路径113(例如PCI Express、加速图形端口或超传输链路)耦合到存储器桥105;在一个实施例中,并行处理子系统112是将像素传递到显示设备110(例如传统的基于CRT或LCD的监视器)的图形子系统。系统盘114也连接到I/O桥107。开关116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他组件之间的连接。其他组件(未明确示出),包括USB或其他端口连接、CD驱动器、DVD驱动器、胶片录制设备及类似组件,也可以连接到I/O桥107。使图1中各种组件互连的通信路径可以使用任何适合的协议实现,诸如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/O桥107和存储器桥105可能被集成到单个芯片上。大量实施例可以包括两个或两个以上的CPU 102以及两个或两个以上的并行处理系统112。本文所示的特定组件是可选的;例如,任意数量的插卡或外围设备都可能得到支持。在一些实施例中,开关116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。
图2示出了根据本发明一个实施例的并行处理子系统112。如图所示,并行处理子系统112包括一个或多个并行处理单元(PPU)202,每个并行处理单元202都耦合到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实体以标识该对象的参考数字和需要时标识所述实体的括号中的数字来表示。)PPU 202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
再参考图1,在一些实施例中,并行处理子系统112的一些或所有PPU202是具有渲染管线的图形处理器,它可以经配置以执行与下述相关的各种操作:经由存储器桥105和总线113从CPU 102和/或系统存储器104所提供的图形数据生成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常用帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU 202以及包括一个或多个用于通用计算的其他PPU 202。这些PPU可以是相同的或不同的,并且每个PPU均可具有其自己的专用并行处理存储器设备或不具有专用的并行处理存储器设备。一个或多个PPU 202可输出数据到显示设备110,或者每个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的操作异步地执行命令。可以为每个入栈缓冲区指定执行优先权以控制对不同入栈缓冲区的调度。
现在返回参考图2B,每个PPU 202均包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到CPU 102)的通信路径113与计算机系统100的其余部分通信的I/O(输入/输出)单元205。PPU 202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可作为插卡来实现,所述插卡可被插入到计算机系统100的扩展槽中。在其他实施例中,PPU 202可以和诸如存储器桥105或I/O桥107的总线桥一起集成在单个芯片上。而在其他实施例中,PPU 202的一些或所有元件可以和CPU 102一起集成在单个芯片上。
在一个实施例中,通信路径113是PCI-EXPRESS链路,如本领域所知的,在PCI-EXPRESS链路中专用通道被分配到每个PPU 202。I/O单元205生成用于在通信路径113上传输的数据包(或其他信号),并且还从通信路径113接收所有传入的数据包(或其他信号),将传入的数据包引导到PPU 202的适当组件。例如,可将与处理任务有关的命令引导到主机接口206,而可将与存储器操作有关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
有利地,每个PPU 202都实现高度并行处理架构。如详细示出的,PPU 202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC 208都能够并发执行大量的(例如,几百或几千)线程,其中每个线程均是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于执行不同类型的计算。取决于因每种类型的程序或计算所产生的工作量,GPC 208的分配可以变化。
GPC 208从任务/工作单元207内的工作分布单元来接收将要执行的处理任务。所述工作分布单元接收指向被编码为任务元数据(TMD)并存储在存储器中的计算处理任务的指针。指向TMD的指针被包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。可以被编码为TMD的处理任务包括将被处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理启动前,将GPC 208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先权。
存储器接口214包括D个分区单元215,每个分区单元215均直接耦合到一部分并行处理存储器204,其中D≥1。如所示的,分区单元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可被集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI-EXPRESS)的分立芯片提供,所述高速链路经由桥式芯片或其他通信方式将PPU 202连接到系统存储器。
如上所述,并行处理子系统112可以包括任意数量的PPU 202。例如,可在单个插卡上提供多个PPU 202、或可将多个插卡连接到存储路径113、或可将一个或多个PPU 202集成到桥式芯片中。在多PPU系统中的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可以调度任务以执行。当没有空闲槽时,没有占用槽的较高优先权任务可以驱逐占用槽的较低优先权任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将该任务添加到调度器表321中的链表。当生成子处理任务时,将该子处理任务添加到调度器表321中的链表。当任务被驱逐时,从槽移除该任务。
任务处理概述
图3B是根据本发明一个实施例的、图2的一个PPU 202内的GPC 208的框图。每个GPC 208可被配置为并行地执行大量线程,其中术语“线程”是指对特定的一组输入数据执行的特定程序的实例。在一些实施例中,采用单指令多数据(SIMD)指令发送技术来支持大量线程的并行执行,而无需提供多个独立指令单元。在另一些实施例中,采用单指令多线程(SIMT)技术,使用被配置为发送指令到每一个GPC 208内一组处理引擎的公共指令单元,来支持大量通常同步化的线程的并行执行。不同于其中所有处理引擎一般都执行相同指令的SIMD执行机制,SIMT执行允许不同的线程更容易跟随(follow)通过给定线程程序的发散的执行路径。本领域普通技术人员将理解的是,SIMD处理机制代表SIMT处理机制的功能子集。
经由管线管理器305来有利地控制GPC 208的操作,所述管线管理器305将处理任务分布到流多处理器(SM)310。管线管理器305也可被配置为通过为由SM 310输出的处理后的数据指定目的地来控制工作分布交叉开关330。
在一个实施例中,每个GPC 208均包括M个SM 310,其中M≥1,每个SM 310均被配置为处理一个或多个线程组。而且,每个SM 310有利地还包括同样的一组可被管线化的功能执行单元,从而允许在前一个指令结束之前发送新的指令,如本领域所已公知的。可提供功能执行单元的任何组合。在一个实施例中,这些功能单元支持多种运算,包括整数和浮点算法(例如,加法和乘法)、比较运算、布尔运算(AND、OR、XOR)、移位以及各种代数函数的计算(例如,平面插值、三角、指数和对数函数等);并且相同的功能单元硬件可均衡地用于(be leveraged to)执行不同运算。
传送到特定GPC 208的指令序列构成线程,如本文前面所定义的,并且跨SM 310内并行处理引擎(未示出)的一定数量并发执行的线程的集合在本文中被称为“卷绕包(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同的输入数据并发执行同一程序的一组线程,且该组中有一个线程被分配给SM 310内不同的处理引擎。线程组可包括比SM 310内处理引擎的数量少的线程,在此情况下,在正在处理该线程组的周期内,一些处理引擎将处于空闲状态。线程组也可包括比SM 310内处理引擎的数量多的线程,在此情况下,处理将在连续的时钟周期上进行。由于每个SM 310可以支持多达G个线程组并发执行,所以在任一给定时间都可以允许多达G×M个线程组在GPC 208中执行。
另外,在SM 310内,多个相关的线程组可同时活动(处于不同执行阶段)。这种线程组的集合在本文中被称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m×k,其中k是线程组中并发执行的线程的数量,并且一般是SM 310内处理引擎的数量的整数倍,m是SM 310内同时活动的线程组的数量。CTA的大小通常由编程人员和CTA可用的硬件资源例如存储器或寄存器的容量决定。
每个SM 310均包括一级(L1)高速缓存,或使用在SM 310之外对应的L1高速缓存中用以执行加载和存储操作的空间。每个SM 310也有权访问二级(L2)高速缓存,它们在所有GPC 208之间被共享并且可用于在线程之间传送数据。最后,SM 310也有权访问片外“全局”存储器,该存储器可以包括例如并行处理存储器204和/或系统存储器104。应予以理解的是,PPU202外部的任何存储器都可被用作全局存储器。此外,一点五级(L1.5)高速缓存335可被包括在GPC 208之内,被配置为经由存储器接口214来接收和保持从存储器中获取的、SM 310所请求的数据,包括指令、一致性(uniform)数据以及常数数据,以及向SM 310提供所请求的数据。在GPC 208中具有多个SM 310的实施例有利地共享被高速缓存于L1.5高速缓存335中的公共指令和数据。
每个GPC 208可包括存储器管理单元(MMU)328,该单元被配置为将虚拟地址映射到物理地址。在另一些实施例中,MMU 328可处于存储器接口214内。MMU 328包括一组页表条目(PTE)以及可选地包括高速缓存线索引(cache line index),该组PTE被用于将虚拟地址映射到像素块(tile)的物理地址。MMU 328可包括地址转译后备缓冲区(translation lookaside buffer,TLB)或高速缓存,其可处于多处理器SM 310或L1高速缓存或GPC 208内。物理地址被处理为分布表面数据访问位置以允许在分区单元之间交错的高效请求。高速缓存线索引可用于确定对于高速缓存线的请求是否命中或未命中。
在图形和计算应用中,GPC 208可被配置为使得每个SM 310耦合至纹理单元315,用于执行纹理映射操作,例如,确定纹理采样位置、读取纹理数据以及过滤纹理数据。纹理数据是从内部纹理L1高速缓存(未示出)读取的,或者在一些实施例中是从SM 310内的L1高速缓存读取的,并且根据需要从L2高速缓存、并行处理存储器204或系统存储器104获取。每个SM 310将处理后的任务输出到工作分布交叉开关330,以便将处理后的任务提供到另一个GPC 208用于进一步处理,或者经由交叉开关单元210将处理后的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中。preROP(pre-raster operations,预光栅操作)325被配置为从SM 310接收数据,将数据引向分区单元215中的ROP单元,并执行对色彩混合的优化、组织像素色彩数据以及执行地址转译。
应予以理解的是,本文所描述的内核架构是例示性的,可以对其进行各种变形和修改。GPC 208内可包含有任何数量的处理单元,例如,SM 310或纹理单元315、preROP 325。此外,虽然仅示出了一个GPC 208,但PPU 202可包含任何数量的GPC 208,这些GPC 208最好在功能上彼此相似,以使执行行为不依赖于接收具体处理任务的GPC 208。此外,每个GPC 208最好使用单独的且各异的处理单元、L1高速缓存等,相对于其他GPC 208独立地操作。
本领域普通技术人员应理解的是,图1、2、3A和3B中所描述的架构决非限制本发明的范围,并且在不脱离本发明的范围的情况下,本文所教导的技术可在任何适当配置的处理单元上实施,这些处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU 202、一个或多个GPC208、一个或多个图形或专用处理单元等。
在本发明的实施例中,所期望的是,用PPU 202或计算系统的其他处理器使用线程阵列来执行通用计算。给线程阵列中的每个线程分配唯一的线程标识符(“线程ID”),所述线程标识符在线程执行期间可由该线程访问。线程ID可以被定义为一维或多维数值,控制线程的处理行为的各个方面。例如,线程ID可用于确定线程输入数据集中将要处理的部分和/或确定线程输出数据集中将要生成或写入的部分。
每线程的指令序列可包含至少一个指令,所述至少一个指令定义线程阵列中代表性线程和一个或多个其他线程之间的协作行为。例如,每线程的指令序列可能包含下列指令:指示在序列中的特定点处暂定执行代表性线程的操作直至一个或多个其他线程到达该特定点时为止的指令;指示代表性线程将数据存储在一个或多个其他线程有权访问的共享存储器中的指令;指示代表性线程自动读取和更新存储在共享存储器中的数据的指令,一个或多个其他线程基于它们的线程ID有权访问所述共享存储器;等等。CTA程序也可以包含计算将从中读取数据的共享存储器中的地址的指令,其中地址为线程ID的函数。通过定义合适的功能并提供同步技术,可以以可预测的方式通过CTA的一个线程将数据写入到共享存储器中的给定位置,并且通过同一CTA的不同线程从该位置读取出来。因此,线程之间任何期望模式的数据共享都可以得到支持,并且CTA中的任何线程都可以与同一CTA中的任何其他线程共享数据。CTA的线程之间如果存在数据共享,则数据共享的程度由CTA程序决定;因而,应予以理解的是,在使用CTA的具体应用中,取决于CTA程序,CTA的线程实际上可能彼此共享或者不共享数据,并且术语“CTA”和“线程阵列”在本文中具有相同含义。
程序执行和抢占
抢占可用来在多个不同的应用之间对处理器进行时间切片,从而使得不同的应用串行化并且每个在处理器上执行达短时间切片。出于其他目的,抢占还可被用来卸载当前执行的上下文。例如,主机接口206可在CPU 102发起信道抢占或运行列表抢占时抢占上下文,其中信道是指向处理工作的指针的合集并且应用可包含一个或多个信道。通过清除信道ram条目中的有效位并且把要抢占的信道的信道标识符写入到抢占寄存器,执行信道抢占。然后把指定的信道从PPU 202卸载离开主机和引擎。
通过把指针写入到运行列表寄存器,执行运行列表抢占。该指针可指向新的运行列表或者可指向当前活动的运行列表。运行列表抢占使得正在PPU202中运行的内容被卸载。主机接口206然后在与指针关联的运行列表上的第一条目处开始处理并且利用待定工作搜索第一有效条目。运行列表上的具有待定工作的第一信道被加载到PPU 202中。
当上下文离开方法(即程序)并且另一个上下文正等待执行时,主机接口206还可抢占在时间切片已期满之前正在执行的上下文。在一个实施例中,时间切片不是等量的时间,而作为代替是基于每个上下文的方法流,从而使得具有密集方法流的上下文与具有稀疏方法流的不同上下文相比被分配较大的时间切片。主机接口206配置为向前端212指示主机接口206何时没有用于执行的上下文的任何方法。然而,主机接口206未发起对执行的上下文的上下文切换,直到分配给上下文的时间切片已期满或者处理管线为空闲并且不存在方法。
图4是根据本发明一个实施例的、从任务/工作单元207开始通过GPC208的处理管线和主机接口206的框图。该抢占过程具有由前端212控制的五个阶段。第一阶段(阶段1)停止当前上下文中的处理。对于CTA级抢占,这意味着在CTA任务边界处停止工作。对于指令级抢占,这意味着在SM 310指令边界处停止工作。如果在发起抢占后且在阶段1期间发生中断或故障,则前端212在进行至阶段2之前等待清除待定中断或故障。
一旦停止上下文(并且清除任何中断或故障),阶段2就把当前上下文的状态保存在存储器中。在阶段4把新上下文的状态加载到机器上之前,阶段3使引擎复位。阶段5重启在先前阶段1中抢占的任何工作的处理。当抢占上下文时,主机接口206从运行列表选择新的上下文来执行并且指令前端212开始上下文抢占。前端212配置处理管线以通过完成抢占过程的五个阶段来执行新的上下文。在完成抢占过程的五个阶段后,前端212向主机接口206发送确认(ACK)。在一个实施例中,单独的图形处理管线(在图4中未示出)执行图形特定操作并且前端212还等待图形处理管线变成空闲。通常,图形处理方法与计算处理方法相比在更短的时间内执行,因此等待图形处理管线变成空闲可在处理管线完成抢占过程的第一阶段时完成。而且,在图形处理管线中维持的状态信息量通常比在(计算)处理管线中维持的上下文状态大得多。等待图形处理管线至空闲显著地减小了为捕获上下文状态所需要的存储。
在执行抢占之前,在CPU 102上执行的程序分配用于存储特定上下文的CTA级(和指令级)上下文状态的上下文缓冲区。分配的上下文缓冲区的大小可以基于PPU 202配置和SM 310的数量。
为了完成抢占过程的第一阶段,前端212停止从主机接口206接受新方法并且把抢占命令输出到任务/工作单元207。当处理单元接收到抢占命令时,处理单元停止把工作输出到下游单元。前端212等待所有下游单元停止输出工作,然后确立上下文冻结信号以成为抢占过程的第二阶段。上下文冻结信号的确立确保处理管线不执行基于用来保存上下文状态的事物的任何操作。前端212还确定要求前端212等待处理管线变成空闲的等待空闲命令是否正被处理,并且如果是的话,则前端212中断等待空闲操作并且保存指示正在为上下文执行等待空闲命令的上下文状态信息。当上下文恢复时,等待空闲执行将由前端212重启。
当任务/工作单元207接收抢占命令时,任务/工作单元207停止启动新工作。最后,任务/工作单元207确定抢占过程的前两个阶段完成并且通知前端212处理管线是空闲的。然后,在使处理管线复位以完成抢占过程的第三阶段之前,前端212将存储在任务/工作单元207内维持的上下文状态。当使用指令级抢占时,在GPC 208内维持的上下文状态由GPC 208本身存储。当使用CTA级抢占时,GPC 208被耗尽从而使得所存储的上下文状态量减小。
即使在任务/工作单元207停止启动工作后,任务/工作单元207可接收在先前指令的执行期间可由GPC 208生成的附加工作。任务/工作单元207把将要由前端212存储的附加工作缓冲作为用于任务/工作单元207的上下文状态的一部分。
当接收到抢占命令时,工作分布单元340停止启动CTA。当执行CTA级抢占时,处理管线中的工作分布单元340下游的处理单元,例如GPC 208,被耗尽从而使得没有上下文状态保持在那些下游处理单元中。因此,当与指令级抢占相比执行CTA级抢占时,减小了上下文状态量,因为指令级抢占不要求耗尽下游处理单元。
工作分布单元340基于由任务管理单元300生成的信息来确定哪些GPC208将执行所接收的工作。因为GPC 208被管线化,因此单个GPC 208可并发执行多个任务。任务管理单元300调度每个处理任务来执行作为网格(grid)或队列。工作分布单元340使每个CTA与具体的网格或队列关联以并发执行一个或多个任务。属于网格的CTA具有隐含的指示相应CTA在网格内的位置的x、y、z参数。工作分布单元340跟踪可用的GPC 208并且在GPC 208可用时启动CTA。
在指令级抢占期间,工作分布单元340把抢占命令传送到GPC 208中的管线管理器305。管线管理器305可包括用于每个SM 310的控制器。在接收到抢占命令后,SM 310停止发出指令并且进入陷阱处理程序(trap handler)。SM 310还等待与先前发出的指令关联的所有存储器事物完成,即等待所有未完成的存储器请求完成。当针对读请求的数据尚未返回时以及当对于明确请求了确认的写请求尚未从MMU 328接收到确认时,存储器请求被视为是未完成的。管线管理器305维持关于CTA和线程组的信息并且跟踪每个CTA抢占哪些线程组。
一旦GPC 208中的SM 310停止了发出指令并且每个SM 310变成空闲,陷阱处理程序就卸载在GPC 208上运行的CTA的上下文状态并且陷阱处理程序、管线管理器305和前端212中的一个或多个的组合存储上下文状态。被卸载和存储在SM 310内的寄存器、管线管理器305内的寄存器、GPC 208内的寄存器、共享存储器等等的上下文状态被保存到图形存储器中的预定缓冲区。而且,从GPC 208内的高速缓存例如L 1.5高速缓存335向存储器的写入被挤出至存储器并且高速缓存被无效。一旦所有上下文状态被卸载和存储,陷阱处理程序就将退出所有活动线程,从而使SM 310和GPC 208空闲。
陷阱处理程序然后控制从SM 310到管线管理器305的、指示抢占过程的前两个阶段已由GPC 208完成并且GPC 208空闲的信号。管线管理器305向工作分布单元340报告,从而确认(ACK)抢占命令以指示抢占过程的前两个阶段已完成。这个ACK从工作分布单元340向上游传送至任务管理单元300且最后上至前端212。
当工作分布单元340输出抢占命令时管线管理器305保持正在GPC 208内执行的每个线程组的状态信息。状态信息指示线程组在完成执行后是否退出或者是否抢占线程组。状态信息由管线管理器305保存并且可由管线管理器305用来仅恢复被抢占的那些线程组。当在管线管理器305接收抢占命令后且在进入陷阱处理程序以存储状态信息之前,线程组中的所有线程退出时,针对线程组未存储状态信息并且未恢复线程组。在GPC 208空闲后,GPC可被复位以完成抢占过程的第三阶段。
前端212然后通过写出由前端212维持的上下文状态而完成抢占过程的第二阶段。前端212保存所有寄存器和ram链(ramchain)到用于抢占上下文的上下文状态缓冲区中。为了完成抢占过程的第三阶段,前端212确立由处理管线例如任务/工作单元207和GPC 208接收的上下文复位信号。
当选择上下文来执行时,主机接口206需要确定选择的上下文是否是先前抢占的上下文。指示上下文是否被抢占的上下文重载(ctx_reload)标志由主机接口206维持。当主机接口206识别选择的上下文被抢占时,在选择的上下文的执行继续之前,重载先前卸载且存储的上下文状态。即使当没有方法留给选择的上下文时也将重载已被抢占的上下文,因为可能存在在方法的执行期间由SM 310生成且保存作为部分上下文状态的工作。
当主机接口206发起抢占时,前端212向主机接口206信号通知上下文是否为空闲。如果上下文为空闲,即处理管线为空闲并且没有未完成的存储器请求,则在上下文的执行继续之前不需要重载抢占的上下文。如果上下文为不空闲,则主机接口206保存上下文重载状态以在信道重载时进行处理。
还存在如下情况:当前端212从主机接口206接收到抢占命令时,处理管线已经空闲。当处理管线已经空闲时,前端212不向任务/工作单元207发送抢占命令,而是延续抢占过程的第二阶段。因此,任务/工作单元207和GPC 208的空闲状态应该使得那些单元能够接收新的上下文状态或者恢复上下文状态。例如,任务/工作单元207应该处于使得没有任务正在运行的状态中。管线管理器305应该仅恢复抢占的线程组或CTA并且不应该恢复退出的线程组。
当前端212完成抢占过程的第四阶段时,从上下文缓冲区读取选择的上下文状态并且将其加载到寄存器和ram链中。从抢占过程的第二阶段的开始直到第四阶段的末尾,上下文冻结信号由前端212确立。上下文冻结信号的确立确保处理管线不执行基于前端212用来保存和恢复上下文状态的事物的任何操作。
前端212通过向任务/工作单元207输出抢占恢复命令而发起抢占过程的第五阶段(阶段5)。在任务/工作单元207接收抢占恢复命令后,任务/工作单元207不向前端212确立就绪信号,从而使得没有新工作可以从前端212传送到任务/工作单元207,直到完成抢占过程。任务/工作单元207内的工作分布单元340接收抢占恢复命令并且恢复选择的上下文状态,从而将恢复的任务重放到GPC 208中并且将抢占的CTA和线程组分别恢复回到管线管理器305和SM 310中。
例如,管线管理器305输出抢占恢复命令以把相应SM 310配置成进入“抢占-恢复-开始”模式。然后,管线管理器305把抢占的CTA和线程组发送到SM 310。在管线管理器305恢复了所有抢占的线程组后,管线管理器305向SM 310输出指示应该退出“抢占-恢复-结束”模式的命令。当使用CTA级抢占时,GPC 308没有任何存储的上下文状态要重载并且不存在要恢复的线程组状态。
当使用指令级抢占来恢复选择的上下文时,GPC 308从上下文缓冲区读取选择的上下文的上下文状态并且加载寄存器和共享存储器。管线管理器305以CTA被报告抢占的顺序通过向每个CTA正在其上执行的相应SM 310发送CTA而重启所有抢占的CTA。这种技术确保在SM 310中的与在抢占上下文时占用的CTA相同的物理CTA槽中启动每个CTA。以相同的物理线程组ID启动线程组。在抢占后在相同位置中重启线程组是有利的,因为保证线程组和CTA不超出存储器和在相应SM 310中可用的其他资源。每个SM 310恢复寄存器值、屏障(barrier)、程序计数器、栈指针、每个线程组的活动掩码等等。
最后,前端212向主机接口206确认原始抢占命令。ACK指示抢占过程完成并且选择的上下文的执行已被启动。任何先前抢占的CTA继续了任务/工作单元207和GPC 208中的执行。当使用指令级抢占时,任何先前抢占的线程继续了SM 310上的执行。主机接口206现在可开始向图形管线中发送新的工作。
在一个实施例中,前端212在向任务/工作单元207输出抢占恢复命令后确认原始抢占命令,并且任务/工作单元207缓冲在抢占恢复命令后接收的任何新的工作直到阶段5完成为止。任务/工作单元207直到抢占过程完成才启动任何新的(未恢复的)CTA。因此,前端212不知道第五阶段何时完成。如果任务/工作单元207不能缓冲所有新的工作,则任务/工作单元207向前端212取消就绪信号。然而,前端212不能区分就绪信号是在抢占过程期间还是在抢占过程完成后取消的。
图5A示出了根据本发明一个实施例的用于在指令级抢占过程时卸载上下文状态的卸载方法500。虽然结合图1、2、3A、3B和4的系统描述了方法步骤,但是本领域技术人员将理解配置为按任何顺序执行方法步骤的任何系统都在本发明的范围内。
在步骤505,主机接口206向前端212输出指令级抢占命令并且当前上下文的卸载被发起。在步骤510,前端212确定处理管线是否为空闲,并且如果是的话,则前端212直接进行至步骤545以存储由前端212维持的上下文状态。
如果在步骤510,前端212确定处理管线不空闲,则在步骤515,前端212停止启动当前上下文的新工作。在步骤520,前端212向任务/工作单元207输出抢占命令。在步骤525,任务/工作单元207内的任务管理单元300停止向工作分布单元340发出任务并且把抢占命令输出到工作分布单元340。在步骤525,工作分布单元340也停止启动CTA,并输出抢占命令到管线管理器305。管线管理器305把指令级抢占命令输出到SM 310。
在步骤525,SM 310停止执行指令,并且在步骤530,SM 310等待任何未完成的存储器事物完成。每个SM 310重复步骤530直到所有的存储器事物完成。SM 310向管线管理器305指示每个线程组退出还是被抢占。当所有未完成的存储器事物完成时,在步骤535,在SM 310中维持的上下文状态被存储到上下文缓冲区中并且在管线管理器305中维持的上下文状态也被存储到上下文缓冲区中。
在步骤540,管线管理器305向工作分布单元340报告处理管线的指令级部分,例如SM 310和GPC 208,是空闲的并且工作分布单元340然后针对当前上下文保存在工作分布单元340中维持的CTA级状态。工作分布单元340向任务管理单元300报告它已完成了抢占的这个阶段。任务管理单元300然后保存在任务管理单元300中维持的任务级状态。任务管理单元300向前端212报告何时存储了当前状态,并且在步骤545,前端212把针对当前上下文由前端212维持的上下文状态存储到上下文缓冲区。在步骤550,前端212然后存储保存的上下文状态是用于抢占的上下文的指示并且使处理管线复位。
图5B示出了根据本发明一个实施例的、用于在恢复指令级抢占的过程时恢复上下文状态的恢复方法560。虽然结合图1、2、3A、3B和4的系统描述了方法步骤,但是本领域技术人员将理解配置为按任何顺序执行方法步骤的任何系统都在本发明的范围内。
在步骤565,前端212针对主机接口206选择的上下文发起保存的上下文的恢复。在步骤570,前端212确立上下文冻结信号以确保处理管线不执行基于前端212用来恢复上下文状态的事物的任何操作。在步骤575,选择的上下文状态由前端212和任务/工作单元207从上下文缓冲区读取,并且在任务和CTA级被恢复。
在步骤580,每个管线管理器305向下输出命令以把相应SM 310配置成进入“抢占-恢复-开始”模式,从而把SM 310配置为暂停状态。在步骤580,管线管理器305向SM 310发送抢占的CTA和线程组并且GPC 208针对(参见图5A)在步骤535保存的选择的上下文恢复在SM 310中维持的指令级上下文状态。在恢复了CTA和指令级状态后,管线管理器305向相应SM 310输出指示应该退出“抢占-恢复-结束”模式的命令,并且在步骤582,前端212取消上下文冻结信号。步骤580和582可同时执行。在步骤585,CTA按抢占的顺序被启动,并且在步骤590,使用选择的上下文的恢复的上下文状态来继续执行。在步骤590,前端212也向主机接口206发出确认以用信号通知指令级抢占命令完成了执行。主机接口206现在可开始从入栈缓冲区向前端212发送更多工作。在一个实施例中,任务/工作单元207确立和取消上下文冻结并且在步骤570中确立上下文冻结后(由前端212)执行步骤590。任务/工作单元缓冲来自入栈缓冲区的新工作,直至指令级抢占命令完成了执行为止。新的工作直至在步骤585中启动CTA后才由任务/工作单元输出。
如先前解释的,被保存和恢复的上下文状态可被缩减,代价是潜在更长的等待时间用于通过在CTA级抢占而非在指令级抢占来停止运行的上下文。当在CTA级抢占上下文时,SM 310完成任何启动的CTA的执行,从而使得需要存储的CTA状态未维持在管线管理器305和GPC 208内。然而,为启动至少一个附加CTA以完成任务的执行而需要的任务级状态被存储用于抢占的上下文。
在一个实施例中,在任务级抢占上下文并且任务/工作单元207完成具有启动的至少一个CTA的任何任务的执行,从而使得不需要存储任务状态。任务级抢占可能要求启动一个或多个附加CTA以完成任务的执行,之后保存前端状态。当执行任务级抢占时,针对任务或CTA没有存储状态。
图6A示出了根据本发明一个实施例的、用于在CTA级抢占过程时卸载上下文状态的卸载方法600。虽然结合图1、2、3A、3B和4的系统描述了方法步骤,但是本领域技术人员将理解配置为按任何顺序执行方法步骤的任何系统都在本发明的范围内。
在步骤605,主机接口206向前端212输出CTA级抢占命令并且当前上下文的卸载被发起。在步骤610,前端212确定处理管线是否为空闲,并且如果是的话,则前端212直接进行至步骤645以存储由前端212维持的上下文状态。
如果在步骤610,前端212确定处理管线不空闲,则在步骤615,前端212停止启动当前上下文的新工作。在步骤620,前端212向任务/工作单元207输出抢占命令。在步骤625,任务/工作单元207内的任务管理单元300停止向工作分布单元340发出任务并且把抢占命令输出到工作分布单元340。工作分布单元340停止启动CTA并且在步骤630,工作分布单元340等待GPC208变成空闲。
如果在步骤630,工作分布单元340确定GPC 208为不空闲,则在步骤635,工作分布单元340确定定时器是否期满。定时器限制工作分布单元340将等待GPC变成空闲的时钟周期数量。时钟周期数量可以是编程值,并且在一个实施例中,当该值被超出时,工作分布单元340执行在指令级而非在CTA级的抢占。如果在步骤635,工作分布单元340确定定时器未期满,则工作分布单元340返回至步骤630。否则,当定时器期满时,则工作分布单元340进行至图5A的步骤520以执行在指令级的抢占。
当在步骤630,GPC 208为空闲时,在步骤640,工作分布单元340针对当前上下文保存在工作分布单元340中维持的CTA级状态。工作分布单元340向任务管理单元300报告存储了当前状态。任务管理单元300然后保存在任务管理单元300中维持的任务级状态。任务管理单元300向前端212报告何时存储了当前状态,并且在步骤645,前端212把针对当前上下文由前端212维持的上下文状态存储到上下文缓冲区。在步骤650,前端212然后存储保存的上下文状态是用于抢占的上下文的指示并且使处理管线复位。
图6B示出了根据本发明一个实施例的、用于在恢复在CTA级抢占的过程时恢复上下文状态的恢复方法660。虽然结合图1、2、3A、3B和4的系统描述了方法步骤,但是本领域技术人员将理解配置为按任何顺序执行方法步骤的任何系统都在本发明的范围内。
在步骤665,前端212发起先前在CTA级抢占的上下文的恢复。在步骤670,前端212确立上下文冻结信号以确保处理管线不执行基于前端212用来恢复上下文状态的事物的任何操作。在步骤675,选择的上下文状态由前端212和任务/工作单元207从上下文缓冲区读取,并且在任务和CTA级被恢复。在步骤682,取消确立上下文冻结信号。
在步骤685,上下文最后一次运行时抢占的CTA由任务/工作单元207重新启动至GPC 208中。在步骤690,前端212向主机接口206发出确认以用信号通知CTA级抢占命令完成了执行。主机接口206现在可开始从入栈缓冲区向前端212发送更多工作。在一个实施例中,任务/工作单元207确立和取消上下文冻结并且在步骤670中确立上下文冻结后(由前端212)执行步骤690。任务/工作单元缓冲来自入栈缓冲区的新工作,直至指令级抢占命令完成了执行为止。新的工作直至在步骤685中重新启动CTA后才由任务/工作单元输出。
在指令级或在CTA级抢占上下文的能力可针对每个特定上下文进行指定。长时间运行的上下文可在指令级被抢占以避免当启动抢占时到当完成抢占时之间的长延迟。不必长时间运行但是维持大量状态的上下文可在CTA级抢占以最小化存储的上下文状态量。
本发明的一个实施例可以作为与计算机系统一起使用的程序产品实现。程序产品的程序定义实施例的功能(包括本文所述的方法)并且可以被包含在各种计算机可读存储介质上。示例性的计算机可读存储介质包括,但不限于:(ⅰ)信息被永久保存在其上的非可写存储介质(例如,计算机内的只读存储器设备,诸如可被CD-ROM驱动器读取的CD-ROM盘、闪存、ROM芯片或任何类型的固态非易失性半导体存储器);和(ⅱ)可变信息被保存在其上的可写存储介质(例如,磁盘驱动器内的软盘或者硬盘驱动器或者任何类型的固态随机存取半导体存储器)。
以上已经参照具体实施例描述了本发明。然而,本领域的技术人员应该理解在不脱离如所附权利要求提出的本发明更宽的精神和范围的情况下,可以做出各种修改和改变。因此,前述的描述和附图应被视为说明性的而非限制性的意义。
Claims (10)
1.一种在多线程系统中抢占程序指令的执行的方法,所述方法包括:
使用第一上下文在所述多线程系统内在处理管线中执行程序指令;
在指令级抢占使用所述第一上下文的执行以使用第二上下文在所述多线程系统中执行不同的程序指令;
存储使用所述第一上下文的所述程序指令的执行被抢占的指示;以及
使用所述第二上下文在所述处理管线中执行所述不同的程序指令。
2.根据权利要求1所述的方法,进一步包括,在执行所述不同的程序指令之前,存储在使用所述第一上下文的所述程序指令的执行期间在所述处理管线内维持的第一上下文状态的一部分。
3.根据权利要求1所述的方法,其中使用所述第一上下文的所述执行的所述抢占进一步包括,针对当在所述指令级发生抢占时抢占的流多处理器中执行的每个线程组,存储第一上下文状态。
4.根据权利要求1所述的方法,其中使用所述第一上下文的所述执行的所述抢占进一步包括,确定配置为使用所述第一上下文来执行所述程序指令的流多处理器是空闲的。
5.根据权利要求1所述的方法,进一步包括:
在执行所述不同的程序指令之前,确定所述处理管线是空闲的;以及
使所述处理管线复位而不存储所述第一上下文的在所述处理管线中维持的上下文状态。
6.一种在多线程系统中抢占程序指令的执行的方法,所述方法包括:
使用第一上下文在所述多线程系统内在处理管线中执行程序指令;
在计算线程阵列级抢占使用所述第一上下文的执行以使用第二上下文在所述多线程系统中执行不同的程序指令;
存储使用所述第一上下文的所述程序指令的执行被抢占的指示;以及
使用所述第二上下文在所述处理管线中执行所述不同的程序指令。
7.根据权利要求6所述的方法,进一步包括,在执行所述不同的程序指令之前,完成已经被启动以在所述处理管线中执行的所有计算线程阵列的执行以及存储为启动附加计算线程阵列和完成使用所述第一上下文的所述程序指令的执行而维持的第一上下文状态。
8.根据权利要求6所述的方法,其中使用所述第一上下文的所述执行的所述抢占进一步包括:
完成已经被启动以在所述处理管线中执行的所有计算线程阵列的执行;
启动至少附加计算线程阵列以完成使用所述第一上下文的所述程序指令的执行;以及
完成所述处理管线对所述附加计算线程阵列的执行。
9.根据权利要求6所述的方法,其中使用所述第一上下文的所述执行的所述抢占进一步包括,确定配置为使用所述第一上下文来执行所述程序指令的流多处理器是空闲的。
10.根据权利要求6所述的方法,进一步包括:
在执行所述不同的程序指令之前,确定所述处理管线是空闲的;以及
使所述处理管线复位而不存储所述第一上下文的在所述处理管线中维持的上下文状态。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/294,045 US20130124838A1 (en) | 2011-11-10 | 2011-11-10 | Instruction level execution preemption |
US13/294,045 | 2011-11-10 | ||
US13/302,962 | 2011-11-22 | ||
US13/302,962 US20130132711A1 (en) | 2011-11-22 | 2011-11-22 | Compute thread array granularity execution preemption |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103197917A true CN103197917A (zh) | 2013-07-10 |
Family
ID=48145390
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012104517450A Pending CN103197917A (zh) | 2011-11-10 | 2012-11-12 | 计算线程阵列粒度执行抢占 |
Country Status (3)
Country | Link |
---|---|
CN (1) | CN103197917A (zh) |
DE (1) | DE102012220365A1 (zh) |
TW (1) | TWI457828B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108463804A (zh) * | 2016-01-28 | 2018-08-28 | 高通股份有限公司 | 自适应上下文切换 |
CN109445565A (zh) * | 2018-11-08 | 2019-03-08 | 北京航空航天大学 | 一种基于流多处理器内核独占和预留的gpu服务质量保障方法 |
CN110134074A (zh) * | 2018-02-02 | 2019-08-16 | 华中科技大学 | 一种生产线控制系统及其控制方法 |
CN111242294A (zh) * | 2017-12-14 | 2020-06-05 | 中科寒武纪科技股份有限公司 | 集成电路芯片装置及相关产品 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108874548B (zh) * | 2018-07-11 | 2021-04-02 | 深圳市东微智能科技股份有限公司 | 数据处理调度方法、装置、计算机设备和数据处理系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5872963A (en) * | 1997-02-18 | 1999-02-16 | Silicon Graphics, Inc. | Resumption of preempted non-privileged threads with no kernel intervention |
US20050138328A1 (en) * | 2003-12-18 | 2005-06-23 | Nvidia Corporation | Across-thread out of order instruction dispatch in a multithreaded graphics processor |
CN101354661A (zh) * | 2007-06-28 | 2009-01-28 | 英特尔公司 | 基于工作负载的时间特征优化os调度决策的系统和方法 |
US20090049451A1 (en) * | 2007-08-15 | 2009-02-19 | Sony Computer Entertainment Inc. | Multi-threaded processing with reduced context switching |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8656145B2 (en) * | 2008-09-19 | 2014-02-18 | Qualcomm Incorporated | Methods and systems for allocating interrupts in a multithreaded processor |
-
2012
- 2012-11-08 DE DE201210220365 patent/DE102012220365A1/de active Pending
- 2012-11-09 TW TW101141781A patent/TWI457828B/zh active
- 2012-11-12 CN CN2012104517450A patent/CN103197917A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5872963A (en) * | 1997-02-18 | 1999-02-16 | Silicon Graphics, Inc. | Resumption of preempted non-privileged threads with no kernel intervention |
US20050138328A1 (en) * | 2003-12-18 | 2005-06-23 | Nvidia Corporation | Across-thread out of order instruction dispatch in a multithreaded graphics processor |
CN101354661A (zh) * | 2007-06-28 | 2009-01-28 | 英特尔公司 | 基于工作负载的时间特征优化os调度决策的系统和方法 |
US20090049451A1 (en) * | 2007-08-15 | 2009-02-19 | Sony Computer Entertainment Inc. | Multi-threaded processing with reduced context switching |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108463804A (zh) * | 2016-01-28 | 2018-08-28 | 高通股份有限公司 | 自适应上下文切换 |
CN108463804B (zh) * | 2016-01-28 | 2022-02-15 | 高通股份有限公司 | 自适应上下文切换 |
CN111242294A (zh) * | 2017-12-14 | 2020-06-05 | 中科寒武纪科技股份有限公司 | 集成电路芯片装置及相关产品 |
CN111242294B (zh) * | 2017-12-14 | 2023-08-25 | 中科寒武纪科技股份有限公司 | 集成电路芯片装置及相关产品 |
CN110134074A (zh) * | 2018-02-02 | 2019-08-16 | 华中科技大学 | 一种生产线控制系统及其控制方法 |
CN109445565A (zh) * | 2018-11-08 | 2019-03-08 | 北京航空航天大学 | 一种基于流多处理器内核独占和预留的gpu服务质量保障方法 |
CN109445565B (zh) * | 2018-11-08 | 2020-09-15 | 北京航空航天大学 | 一种基于流多处理器内核独占和预留的gpu服务质量保障方法 |
Also Published As
Publication number | Publication date |
---|---|
DE102012220365A1 (de) | 2013-05-16 |
TW201342228A (zh) | 2013-10-16 |
TWI457828B (zh) | 2014-10-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10552202B2 (en) | Software-assisted instruction level execution preemption | |
US20210349763A1 (en) | Technique for computational nested parallelism | |
US10002031B2 (en) | Low overhead thread synchronization using hardware-accelerated bounded circular queues | |
US20130305258A1 (en) | Method and system for processing nested stream events | |
US10007527B2 (en) | Uniform load processing for parallel thread sub-sets | |
CN103207774B (zh) | 用于解决线程发散的方法和系统 | |
US20130198760A1 (en) | Automatic dependent task launch | |
US9069609B2 (en) | Scheduling and execution of compute tasks | |
US20130124838A1 (en) | Instruction level execution preemption | |
CN103197916A (zh) | 用于源操作数收集器高速缓存的方法和装置 | |
CN103176848A (zh) | 计算工作分布参考计数器 | |
US8572355B2 (en) | Support for non-local returns in parallel thread SIMD engine | |
US20190332420A1 (en) | Feedback guided split workgroup dispatch for gpus | |
CN103197955A (zh) | 处理系统中动态生成的任务的信令、排序和执行 | |
US9513923B2 (en) | System and method for context migration across CPU threads | |
US9304775B1 (en) | Dispatching of instructions for execution by heterogeneous processing engines | |
US20180052707A1 (en) | Cooperative thread array granularity context switch during trap handling | |
US20130132711A1 (en) | Compute thread array granularity execution preemption | |
CN103197917A (zh) | 计算线程阵列粒度执行抢占 | |
US9798544B2 (en) | Reordering buffer for memory access locality | |
US20130160017A1 (en) | Software Mechanisms for Managing Task Scheduling on an Accelerated Processing Device (APD) | |
TWI489289B (zh) | 分散作業的預先排程重播 | |
US20130185725A1 (en) | Scheduling and execution of compute tasks | |
US20140189329A1 (en) | Cooperative thread array granularity context switch during trap handling | |
US9442759B2 (en) | Concurrent execution of independent streams in multi-channel time slice groups |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20161214 |
|
C20 | Patent right or utility model deemed to be abandoned or is abandoned |