CN103902369A - 陷阱处理期间的协作线程阵列的粒度上下文切换 - Google Patents
陷阱处理期间的协作线程阵列的粒度上下文切换 Download PDFInfo
- Publication number
- CN103902369A CN103902369A CN201310741943.5A CN201310741943A CN103902369A CN 103902369 A CN103902369 A CN 103902369A CN 201310741943 A CN201310741943 A CN 201310741943A CN 103902369 A CN103902369 A CN 103902369A
- Authority
- CN
- China
- Prior art keywords
- thread
- threads
- sets
- cta
- trap
- 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
- 238000000034 method Methods 0.000 claims abstract description 70
- 238000012545 processing Methods 0.000 claims description 99
- 238000003860 storage Methods 0.000 claims description 56
- 230000008569 process Effects 0.000 claims description 24
- 230000000694 effects Effects 0.000 claims description 6
- 230000004044 response Effects 0.000 claims description 4
- 230000008901 benefit Effects 0.000 abstract description 3
- 230000015654 memory Effects 0.000 description 33
- 238000010586 diagram Methods 0.000 description 20
- 238000004891 communication Methods 0.000 description 13
- 230000006870 function Effects 0.000 description 9
- 238000003780 insertion Methods 0.000 description 7
- 230000037431 insertion Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 5
- 238000013316 zoning Methods 0.000 description 5
- 238000011282 treatment Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000004040 coloring Methods 0.000 description 3
- 238000004321 preservation Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000012884 algebraic function Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000004087 circulation Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000009472 formulation Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 239000010409 thin film Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
- Multi Processors (AREA)
Abstract
提供了用于处理线程中所遇到的陷阱的技术,该线程是在多个执行单元中执行的线程阵列的一部分。在这些技术中,具有与线程相关联的标识符的数据结构被更新以指示在该线程阵列的执行期间所出现的陷阱。而且,在这些技术中,执行单元执行包括上下文切换的陷阱处理例程。该执行单元针对至少一个执行单元执行该上下文切换而作为陷阱处理例程的一部分,同时允许其余执行单元在上下文切换之前退出陷阱处理例程。所公开技术的一个优势是陷阱处理例程在并行处理器中高效进行操作。
Description
技术领域
本发明总体上涉及并行处理器架构,尤其涉及陷阱处理期间的协作线程阵列的粒度上下文切换。
背景技术
在计算机架构中,陷阱指令是一种中断当前运行的程序的指令。程序会出于各种原因而发生中断。常见的陷阱出现的示例可以包括针对更多信息的***调用,或者指示计算机等待用户输入(例如,按压键盘上的按键)。陷阱响应于错误出现的示例可以包括试图执行诸如除以零的非法计算机运算,或者访问无效存储器位置。此外,陷阱指令可以由编程人员出于调试的目的而手工***。
当遇到陷阱指令时,执行被称作陷阱处理例程(trap handling routine)的专用程序(例如,通过使得程序计数器指向陷阱处理例程,其也被称作陷阱处理程序(trap handler))。在执行陷阱处理例程时通常执行上下文切换。通常,上下文切换描述了存储和恢复处理单元的状态以使得稍后能够从中断点继续运行程序的执行的计算处理。
在并行处理***中,其中多个线程跨作为单个逻辑单元(被称为协作线程阵列)的不同执行单元而被同时处理,单个线程(此后称作“陷阱线程(trappingthread)”)中所遇到的陷阱导致了所有执行线程的上下文切换。这样的情形并不期望见到,原因在于陷阱线程以外的执行线程中的上下文切换导致计算机资源被不必要地消耗并且使得非陷阱线程的执行减速。
因此,本领域需要一种在并行处理器中高效操作的陷阱处理例程。
发明内容
本发明的实施例给出了一种用于处理线程中遇到的陷阱的方法,该线程是在多个执行单元中执行的线程阵列的一部分。该方法包括利用与该线程相关联的标识符更新数据结构以指示在该线程阵列的执行期间出现的陷阱。而且在该方法中,线程执行包括上下文切换的陷阱处理例程。作为该陷阱处理例程的一部分而针对该线程阵列中的至少一个线程执行上下文切换,同时允许其余线程阵列在上下文切换之前退出该陷阱处理例程。
其它实施例包括但并不局限于一种包括使得处理单元能够实施所公开方法的一个或多个方面的指令的计算机可读介质以及被配置为实施所公开方法的一个或多个方面的***。
所公开技术的一个优势在于,陷阱处理例程在并行处理器中高效地进行操作。
附图说明
因此,通过参考实施例,可以获得本发明以上所引用的特征能够被详细理解的方式,以上简要概括的本发明的更为特定的描述,一些实施例在附图中进行图示。然而,所要提到的是,附图仅图示了本发明的典型实施例而因此并非要被理解为对其范围进行限制,对于本发明而言,可以认可其它等同有效的实施例。
图1是图示被配置为实施本发明的一个或多个方面的计算机***的框图;
图2是根据本发明一个实施例的用于图1的计算机***的并行处理子***的框图;
图3是根据本发明一个实施例的图2的通用处理集群内的流式多处理器的一部分的框图;
图4是图示根据本发明一个实施例的在流式多处理器中执行的协作线程阵列(CTA)中的一系列线程束的框图;
图5是图示根据本发明一个实施例的在流式多处理器中执行的协作线程阵列(CTA)中的一系列线程束的框图;
图6A是图示根据本发明一个实施例的陷阱原因表格(TRT)的框图;
图6B给出了描绘根据本发明一个实施例的用于执行TRT条目更新的处理的方法步骤的流程图;
图6C-6D给出了描绘根据本发明一个实施例的用于执行陷阱处理例程的处理的方法步骤的流程图;和
图7给出了描绘根据本发明一个实施例的用于处理陷阱的方法步骤的流程图。
具体实施方式
在以下描述中,给出了多个具体细节以提供对本发明更为全面的理解。然而,对于本领域技术人员将会显而易见的是,本发明可以在没有这些具体细节中的一个或多个的情况下进行实践。
***概述
图1是图示被配置为实施本发明的一个或多个方面的计算机***100的框图。计算机***100包括经由互连路径进行通信的中央处理器(CPU)102和***存储器104,该互连路径包括存储器桥105。例如可以为北桥芯片的存储器桥105经由总线或其它通信路径106(例如,混合传输链路)连接至I/O(输入/时候粗)桥107。例如可以是南桥芯片的I/O桥107从一个或多个用户输入设备108(例如,键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发至CPU102。并行处理子***112经由总线或第二通信路径113(例如,外部组件互连(PCI)Express、加速图形端口或混合传输链路)耦合至存储器桥105。在一个实施例中,并行处理子***112是向显示设备110传递像素的图形子***,该显示***110可以是任意常规的阴极射线管、液晶显示器、发光二极管显示器等。***磁盘114也连接至I/O桥107并且可以被配置为存储内容和应用以及数据以便由CPU102和并行处理子***112所使用。***磁盘114为应用和数据提供非易失性存储并且可以包括固定或可移动硬盘。闪存设备和CD-ROM(紧致盘只读存储器)、DVD-ROM(数字多功能盘-ROM)、蓝光、HD-DVD(高清DVD)或者其它磁性、光学或固态存储设备。
开关116在I/O桥107和诸如网络适配器118以及各种***卡120和121之类的其它组件支架您提供连接。包括通用串行总线(USB)或其它端口连接、紧致盘(CD)驱动器、数字多功能盘(DVD)驱动器、薄膜记录设备等在内的其它组件(并且明确示出)也可以连接至I/O桥107。图1中所示的包括具体命名的通信路径106和113在内的各种通信路径可以使用各种适当协议来实施,诸如PCI Express、AGP(加速图形端口)、混合传输或者任意其它总线或(多种)点对点协议,并且如本领域中已知的,不同设备之间的连接可以使用不同协议。
在一个实施例中,并行处理子***112整合有针对图形和视频处理而进行优化的电路,例如包括视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子***112整合有针对通用处理而进行优化的电路,同时保留了这里更为详细描述的基本计算架构。在又另一个实施例中,并行处理子***112可以与一个或多个其它***部件集成在单个子***中,诸如联合存储器桥105、CPU102和I/O桥107以形成片上***(SoC)。
将要意识到的是,这里所示出的***是说明性的并且可能有各种变化和修改。包括桥的数量和配置、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。
图2图示了根据本发明一个实施例的并行处理子***112。如所示出的,并行处理子***112包括一个或多个并行处理单元(PPU)202,其中每一个耦合至本地并行处理(PP)存储器204。通常,并行处理子***包括数量为U的PPU,其中U≥1。(这里,同样对象的多个实例利用识别该对象的附图标记以及在需要的情况下识别实例的附加数字所表示)。PPU202和并行处理存储器204可以使用一个或多个集成电路设备来实施,诸如可编程处理器、应用特定集成电路(ASIC)或存储器设备,或者以技术上可行的任意其它方式来实施。
再次参考图1以及图2,在一些实施例中,并行处理子***112中的一些或全部PPU202是图形处理器,其具有能够被配置为执行与从CPU102和/或***存储器104经由存储器桥105和第二通信路径113所提供的图形数据生成像素数据相关的各种操作的呈现管道,其与本地并行处理存储器204(其可以被用作图形存储器,例如包括常规的帧缓冲器)进行交互以存储并更新像素数据,将像素数据传递至显示设备110,等等。在一些实施例中,并行处理子***112可以包括一个或多个作为图形处理器进行操作的PPU202以及一个或多个用于通用计算的PPU202。PPU202可以是相同或不同的,并且每个PPU202可以具有一个或多个专用并行处理存储器设备或者没有(多个)专用并行处理存储器设备。并行处理子***112中的一个或多个PPU202可以向显示设备110输出怇,或者并行处理子***112中的每个PPU202可以向一个或多个显示设备110输出数据。
在操作中,CPU102是计算机***100的主存储器,其控制并协调其它***组件的操作。特别地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102将针对每个PPU202的命令流写入可以位于***存储器104、并行处理存储器204或者CPU102和PPU202都能够访问的其它存储位置的数据结构(图1或图2中并未明确示出)。指向每个数据结构的指针被写入推送缓冲器(pushbuffer)以发起数据结构中的命令流的处理。PPU202从一个或多个推送缓冲器读取命令流并且随后相对于CPU102的操作异步执行命令。可以由应用程序经由设备驱动器103向每个推送缓冲器指定以执行优先级以控制不同推送缓冲器的调度。
现在回头参考图2以及图1,每个PPU202包括经由通信路径113与计算机***100的其余部分进行通信的I/O(输入/输出)单元205,其连接至存储器桥105(或者在一个可替换实施例中直接连接至CPU102)。PPU202到计算机***100的其余部分的连接也可以有所变化。在一些实施例中,并行处理子***被实施为能够***到计算机***100的扩展插槽中的***卡。在其它实施例中,PPU202能够与诸如存储器桥105或I/O桥107之类的总线桥一起集成在单个芯片上。在再其它的实施例中,PPU202的一些或全部部件可以与CPU102一起集成在单个芯片上。
在一个实施例中,通信路径113是PCI Express链路,其中如本领域中已知的,向每个PPU202分配专用通道(lane)。也可以使用其它通信路径。I/O单元208生成用于在通信路径113上传输的分组(或其它信号)并且还从通信路径113接收所有的到来分组(或其它信号),将到来的分组指向PPU202的适当组件。例如,与处理任务相关的命令能够被指向主机接口206。而与存储器操作(例如,从并行处理存储器204读取或者向其写入)相关的命令可以被指向存储器交叉控制器(crossbar)单元210。主机接口206读取每个推送缓冲器并且将推送缓冲器中所存储的命令流输出到前端212。
每个PPU202有利地实施高度并行的处理架构。如详细示出的,PPU202(0)包括处理集群阵列230,其包括数量为C的通用处理集群(GPC)208,其中C≥1。每个GPC208能够同时执行大量(例如,数百或数千个)线程,其中每个线程是程序的一个实例。在各种应用中,不同GPC208可以被分配给不同类型的程序或者用于执行不同类型的计算。GPC208的分配可以根据针对每种类型的程序或计算的工作负载上升而变化。
GPC208从任务/工作单元207内的工作分配单元接收所要执行的处理任务。该工作分配单元接收指向处理任务的指针,该处理任务被编码为任务元数据TMD(未示出)并且存储器存储器中。指向TMD的指针包括在被存储为推送缓冲器的命令流中并且由前端单元212从主机接口206所接收。可以被编码为TMD的处理任务包括所要处理的数据的索引,以及定义如何对该数据进行处理(例如,要执行什么程序)的状态参数和命令。任务/共共组哦单元207从前端212接收任务并且确保GPC208在发起每个TMD所指定的处理之前被配置为有效状态。可以向每个TMD指定用来调度处理任务的执行的优先级。处理任务还可以从处理集群阵列230接收。可选地,TMD可以包括控制该TMD是被添加至处理任务的列表(或者指向处理任务的指针的列表)的头部还是尾部的参数,由此提供高于优先级的另一控制级别。
存储器接口214包括数量为D的分区单元215,它们均直接耦合至并行处理存储器204的一部分,其中D≥1。如所示出的,分区单元215的数量一般等于动态随机访问存储器(DRAM)220的数量。在其它实施例中,分区那样215的数量可以不与存储器设备的数量相等。本领域技术人员将会意识到,DRAM220可以被其它适当存储器设备所替换并且一般可以是常规设计。因此省略详细描述。诸如帧缓冲器或纹理图之类的呈现目标可以跨DRAM220进行存储,这允许分区单元215将每个呈现目标的多个部分并行写入而有效地使用并行处理存储器204的可用带宽。
任意一个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之间的业务流。
同样,GPC208能够被编程以执行与各种应用相关的处理任务,包括但并不局限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如,应用物理法则以确定对象的位置、速度和其它属性)、图像呈现操作(例如,镶嵌着色程序、顶点着色程序、几何图形着色程序和/或像素着色程序),等等。PPU202可以将来自***存储器104和/或本地并行处理存储器204的数据传输至内部(片上)存储器中,对该数据进行处理,并且将结果数据写回到***存储器104和/或本地并行处理存储器204中,这样的数据在那里能够被包括CPU102或另一并行处理子***112的其它***组件进行访问。
PPU202可以被提供以任意数量的本地并行处理存储器204,包括没有本地存储器,并且可以以任意组合来使用本地存储器和***存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将提供很少或不提供专用图形(并行处理)存储器,并且PPU202将排他性地或几乎排他性地使用***存储器。在UMA实施例中,PPU202可以被集成到桥芯片或处理器芯片中,或者被提供为具有经由桥芯片或其它通信器件将PPU202连接至***存储器的高速链路(例如,PCI Express)的离散芯片。
如以上所提到的,并行处理***112中能够包括任意数量的PPU202。例如,多个PPU202可以提供在单个***卡上,或者多个***卡可以联系至通信路径113,或者一个或多个PPU202可以集成到桥芯片上。多PPU***中的PPU202可以彼此相同或不同。例如,不同PPU202可能具有不同数目的处理核心,不同数量的本地并行处理存储器,等等。在存在多个PPU202的情况下,那些PPU可以并行操作而与利用单个PPU202的情况下可能的吞吐量相比更高的吞吐量对数据进行处理。整合一个或多个PPU202的***可以以各种配置和形式因数实施,包括台式机、笔记本或手持个人计算机、服务器、工作站、游戏机、嵌入式***等。
多个处理任务可以同时在GPC208上执行,并且处理任务在执行期间可以生成一个或多个“孩子”处理任务。任务/工作单元27接收任务并且对处理任务和孩子处理任务进行动态调度以便由GPC208所执行。
图3是根据本发明一个实施例的图2的GPC208内的流式多处理器(SM)310的框图。每个GPC208可以被配置为并行执行大量线程,其中术语“线程”是指在对特定输入数据集合所执行的特定程序的实例。在一些实施例中,在不提供多个独立指令单元的情况下使用单指令多数据(SIMD)指令发布技术来支持大量线程的并行执行。在其它实施例中,使用单指令多线程(SIMT)技术来支持大量通常同步的线程的并行执行,其使用被配置为向每一个GPC208内的处理引擎集合发出指令的共用指令单元。与所有处理引擎通常型相同指令的SIMD执行体制不同,SIMT执行允许不同线程更为容易地通过给定线程程序而遵循相异的执行路径。本领域技术人员将会理解的是,SIMD处理体制表示SIMT处理体制的功能子集。
有利地,经由向一个或多个流式多处理器(SM)310分配处理任务的管道管理器(未示出)对GPC208的操作进行控制,其中每个SM310被配置为处理一个或多个线程组。每个SM310包括指令L1高速缓存370,其被配置为经由GPC208内的L1.5高速缓存(未示出)从存储器接收指令和常数。线程束调度程序和指令单元312从指令L1高速缓存370接收指令和常数并且根据该指令和常数对本地寄存器文件304和SM310功能单元进行控制。SM310功能单元包括N个执行(执行或处理)单元(EU)302以及P各负载存储单元(LSU)303。如本领域已知的,SM功能单元可以形成管道,允许在之前指令完成之前发出新的指令。可以提供功能执行单元的任意组合。在一个实施例中,功能单元支持各种运算,包括证书和浮点算术(例如,加法和乘法)、比较运算。布尔运算(AND、OR、XOR)、移位以及各种代数函数的计算(例如,平面插值、三角、指数和对数函数等);并且相同函数单元硬件可以进行权衡以执行不同运算。
传送至特定GPC208的指令序列构成了如之前这里所定义的线程,并且跨SM310内的并行处理引擎(未示出)同时执行的某个数量的线程的集合在这里被称作“线程束(warp)”或“线程组”。如这里所使用的,“线程组”是指同时对不同输入数据执行相同程序的线程的群组,其中该群组的一个线程被分配给SM310内的不同处理引擎。线程组可以包括比SM310内的处理器引擎的数量更少的线程,在这种情况下,一些处理引擎在处理线程组的周期期间将会是空闲的。线程组还可以包括比SM310内的处理引擎的数量更多的线程,在这种情况下,处理将在连续的时钟周期上进行。由于每个SM310能够同时支持多达G个线程组,所以其所遵循的是,在GPC208中,包括M个流式多处理器310的***在任意给定时间能够在GPC208中执行多达G*M个线程组。
此外,在SM310内,多个相关线程组可以在相同时间是活动的(处于执行的不同阶段)。线程组的这种集合在这里被称作“协作线程阵列”(CTA)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中同时执行的线程的数量并且通常是SM310内并行处理引擎的数量的整数倍,并且m是SM310内同时活动的线程组的数量。CTA的大小通常由编程人员以及可用于CTA的诸如存储器或寄存器之类的硬件资源的数量所确定。
在本发明的实施例中,期望使用PPU202或计算***的(多个)其它处理器来执行使用线程阵列的通用计算。该线程阵列中的每个线程被分配以唯一的线程标识符(“线程ID”),其可由线程在线程的执行期间进行访问。能够被定义为一维或多维数值的线程ID对线程的处理行为的各个方面进行控制。例如,线程ID可以被用来确定线程要处理输入数据集合的哪个部分和/或确定线程要产生或写入输出数据集合的哪个部分。
每线程指令(per-thread instruction)的序列可以包括定义代表性线程以及线程阵列的一个或多个其它线程之间的协作行为的至少一个指令。例如,每线程指令可以包括用于在序列中的特定点延缓代表性线程的运算执行直至其它线程中的一个或多个的这样的时间达到该特定点的指令,供代表性线程将数据存储在一个或多个其它线程进行访问的共享存储器中的指令,供代表性线程自动读取并更新存储在一个或多个其它线程基于其线程ID进行访问的共享存储器中的数据的指令。CTA程序还可以包括用于计算共享存储器中要从其读取数据的地址的指令,其中该地址是线程ID的函数。通过定义适当函数并且提供同步技术,数据能够被CTA的一个线程写入共享存储器中的给定位置并且由相同CTA的不同线程以可预测的方式从该位置进行读取。因此,CTA中的任意线程都能够与相同CAT中的任意其它线程共享数据。如果存在,在CTA的线程之间进行共享的数据的范围由CTA程序所确定;因此,所要理解的是,在使用CTA的特定应用中,CTA的线程可能实际上根据CTA程序互相共享数据,并且术语“CTA”和“线程阵列”在这里作为同义词使用。
SM310提供具有不同可访问性级别的片上(内部)数据存储。特殊寄存器(未示出)可由LSU303读取但是不能由其进行写入,并且被用来存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每个线程(或者SM310内的每个执行单元302)的一个寄存器,其存储线程ID;每个线程ID寄存器仅能够由相应的一个执行单元302所访问。特殊寄存器还可以包括附加寄存器,其可由执行TMD(未示出)所表示的相同处理任务的所有线程(或者由所有LSU303)所读取,其存储CAT标识符、CTA尺寸、CTA所述网格的尺寸(或者在TMD对队列任务而不是网格任务进行编码的情况下的队列位置)以及对其分配以CTA的TMD的标识符。
如果TMD是网格TMD,则该TMD的执行时的固定数量的CTA得以开始并且被执行以处理队列525中所存储的固定数量的数据。该固定数量的数据可以存储在TMD中,或者TMD可以存储指向将由CTA所处理的数据的指针。TMD还存储CTA所执行的程序的起始地址。
如果TMD是队列TMD,则使用该TMD的队列特征,这意味着所要处理的数据数量并非必然是固定的。队列条目存储用于由分配至TMD322的CTA进行处理的数据。该队列实体还可以表示由另一个TMD在线程执行期间所生成的孩子任务,由此提供嵌套平行。通常,线程或包括该线程的CTA的执行被延缓,直至孩子任务的执行完成。该队列可以存储在TMD中或者独立于TMD322进行存储,在这种情况下,TMD存储指向该队列的指针。有利地,孩子任务所生成的数据可以在TMD表示正在执行孩子任务时被写入队列。该队列可以被实施为循环队列,从而数据的总量并不局限于队列的大小。
属于网格的CTA具有指示相应CTA在网格内的位置的隐含网格宽度、高度和深度参数。特殊寄存器在初始化期间响应于经由前端212从设备驱动器103所接收的命令而被写入,并且并不在处理任务的执行期间并不发生变化。前端212对每个处理任务进行调度以便执行。每个CTA针对一个或多个任务的同时执行而与具体TMD相关联。此外,单个GPC208可以同时执行多个任务。
参数存储器(未示出)存储运行时间参数(常数),其能够由相同CTA(或任意LSU303)内的任意线程进行读取单并不被其写入。在一个实施例中,设备驱动器103在指示SM310开始执行使用参数的任务之前将这些参数提供至参数存储器。任意CTA内的任意线程(或SM310内的任意执行单元302)能够通过存储器接口214访问全局存储器。全局存储器的各部分可以存储在L1高速缓存320中。
逻辑寄存器文件304被每个线程用作暂存空间(scratch space);每个寄存器被分配专门供一个线程使用,并且每任意逻辑寄存器文件304中的数据仅能够由向其分配该寄存器的线程所访问。逻辑寄存器文件304可以被实施为在物理或逻辑上被划分为P个通道的寄存器文件,每个通道具有一些数量的条目(其中每个条目可能存储例如32位的字)。一个通道被分配给N个执行单元302和P个负载存储单元LSU303中的每一个,并且不同通道中的相对应条目能够被填充以用于执行相同程序以促成SIMD执行的不同线程的数据。通道的不同部分能够被分配给G个同时多线程组中的不同线程组,以使得逻辑寄存器文件304中的给定条目仅能够由特定线程所访问。在一个实施例中,逻辑寄存器文件304中的某些条目被保留用于存储线程标识符,实施特殊寄存器之一。此外,统一的L1高速缓存375针对N个执行单元302和P个负载存储单元LSU303的每个通道存储统一或恒定的数值。
共享存储器306可由单个CTA内的线程进行访问;换句话说,共享存储器306内的任意位置可由相同CTA内的任意线程进行访问(或者由SM310内的任意处理引擎进行访问)。共享存储器306能够被实施为共享寄存器文件或共享片上高速缓存存储器,其具有允许任意处理引擎从共享存储器中的任意位置进行读取或向其进行写入的互连。在其它实施例中,共享状态空间可能映射到片外存储器的每个CTA分区,并且被高速缓存在L1高速缓存320中。参数存储器能够被实施为相同共享寄存器文件或者实施共享存储器306的共享高速缓存存储器内的制定分段,或者被实施为LSU303对其具有只读访问的单独的共享寄存器文件或片上高速缓存存储器。在一个实施例中,实施参数存储器的区域还被用来存储CTA ID和任务ID,以及CTA和网格尺寸或队列位置,实施部分的特殊寄存器。SM310中的每个LSU303被耦合至统一的地址映射单元352,该地址映射单元352对为负载提供的地址进行转换并且将在统一存储器空间中所指定的指令存储到每个不同存储器空间中的地址之中。结果,指令可以被用来通过指定统一存储器空间中的地址而访问任意的本地、共享或全局存储器空间。
每个SM310中的L1高速缓存320能够被用来高速缓存私有的每线程本地数据并且还有每应用的全局数据。在一些实施例中,每CTA的共享数据可以被高速缓存在L1高速缓存320中。LSU303经由存储器和高速缓存互连380耦合至共享存储器306和L1高速缓存320。
将要意识到的是,这里所描述的核心架构是说明性的并且可能进行变化和修改。GPC208内可以包括任意数量的处理单元,例如SM310。另外,如图2所示,PPU202可以包括任意数量的GPC208,它们有利地在功能上互相类似而使得执行行为并不取决于哪个GPC208接收到特定处理任务。另外,每个GPC208有利地使用单独且不同的处理单元、L1高速缓存而独立于其它GPC208进行操作以执行针对一个或多个应用的任务。
本领域技术人员将会理解的是,图1-3中所描述的结构绝非以任何方式对本发明的范围进行限制,并且这里所教导的技术可以在任意适当配置的处理单元上实施,包括而并不局限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等,而并不背离本发明的范围。
陷阱处理期间的协作线程阵列的粒度上下文切换
图4是图示根据本发明的一个实施例的在流式多处理器310(0)中执行的协作线程阵列(CTA)402中的一系列的线程束404的框图。如图3所示,SM310(0)包括执行单元(EU)群组302,其包括N个执行单元(EU)302(0)-302(N-1)。CTA402包括m个线程束,被示为线程束404(0)-404(m-1)。SM310(0)内连续执行的线程的群组构成了线程束404,其中线程束404中的每个线程对不同输入数据执行相同程序指令。给定线程束404中的每个线程在EU群组302中的不同EU302(0)-302(N-1)上执行。当线程束404(0)通过EU群组302的管道随时间进行时,线程束404(1)同时执行,但是处于管道的不同阶段。同样,当线程束404(0)404(1)通过EU群组302进行时,另外的线程束可以进入管道并且与线程束404(0)404(1)同时执行。
如所示出的,图示出线程束404而使得线程束404从下向上执行。因此,位于线程束404底部的指令(未示出)早于线程束404顶端的指令执行。在一些实施例中,EU群组302可以与来自其它CTA的线程束(未示出)同时地执行来自CTA402的线程束404。在各个实施例中,每个线程束可以经由可由该线程束所访问的CTA级别的标识符明确识别,经由唯一识别CTA的线程标识符或线程束标识符隐含识别,或者经由其它技术可行的方式来识别该线程束所属的相对应的CTA。
图5是图示根据本发明另一个实施例的在流式多处理器310(0)中执行的协作线程阵列(CTA)402中的一系列的线程束404的框图。除了以下另外描述的以外,SM310(0)和CTA402的功能基本上类似于图4的SM310(0)和CTA402。
如所示出的,线程束404(0)执行陷阱指令502,其使得所有线程束404(0)-404(m-1)都进入陷阱处理例程506。在一些实施例中,执行陷阱指令502的线程束404(0)可以在进入陷阱处理例程506时执行预备指令508,并且素后可以执行陷阱处理例程506的其余部分。并未执行陷阱指令502的线程束404(1)-404(m-1)可以执行陷阱处理例程506,但是不执行预备指令508。在完成陷阱处理指令506的执行时,线程束404(0)退出陷阱处理例程506并且随后准备从SM310(0)退出。CTA402中的其它线程束404(1)-404(m-1)也完成陷阱处理例程506的执行并且退出陷阱处理例程506。在一些实施例中,在与CTA402以外的CTA(未示出)相关联的SM310(0)上执行的线程束也可以进入陷阱处理例程506。在进入陷阱处理例程506时,这样的线程束可以确定执行陷阱指令的线程束与不同CTA402相关联。因此,这样的线程束可以在执行陷阱处理例程506中的指令主体之前快速退出陷阱处理例程506。
在多种情形中遇到陷阱。如以上所描述的,陷阱可能在指令执行导致异常时发生,诸如尝试除以零或者无效的存储器访问。陷阱的另一个示例在执行断点指令时出现。如这里所使用的,导致陷阱出现的线程束被称作已经被“捕获”。最后,由于线程束404(0)包含陷阱指令502,所以线程束404(0)在这里被称作陷阱线程束404(0)。
在陷阱处理期间,任意的线程束404(1)-404(m-1)可以在执行预备指令508之后执行上下文切换。通常,上下文切换是存储并回复处理单元的状态(这里被称作上下文数据或上下文)以使得随后能够在相同点继续执行的处理。在一个实施例中,当被应用于陷阱处理例程506时,上下文切换可以包含但并不局限于由EU群组302停止线程束404的执行,并且存储上下文以便随后恢复。在上下文切换期间所保存的上下文包括与经历上下文切换的线程束404相关联的各个存储部件的内容,其包括但并不局限于与同时运行的线程束相关的限制、本地寄存器、本地存储器、共享存储器。一旦CTA402中的每个线程束404(0)-404(m-1)的上下文都被存储并且CTA402中所有的线程束404(0)-404(m-1)都已经退出了陷阱处理例程506,则CTA402随后可以从SM310(0)的活动执行中移除或“撤回”。从活动执行中移除CTA402释放了SM310(0)中的资源以对其它CTA的线程束进行处理。
图6A是图示根据本发明一个实施例的陷阱原因表格(TRT)600的框图。在各个实施例中,TRT600可以被存储在可由CTA402中的每个线程束404所访问的存储器位置之中,包括但并不局限于共享存储器306、PP存储器204或***存储器104。如所示出的,TRT600包括每个线程束的TRT条目602(例如,TRT条目602(0)至602(W-1)),其中W是SM310(0)中执行的线程束的数目。每个TRT条目602包括而并不局限于陷阱原因602、程序计数器606、上下文缓冲器地址608、选项610和线程标识符612。向给定TRT条目602的要素604-612进行写入的处理在这里被i称作TRT条目更新,或者简单地称作TRT更新。程序计数器606被用来存储用户所指定的保存例程的位置。用户所指定的保存例程包括SM310在陷阱出现之后但是CTA402退出陷阱处理例程506之前所执行的操作。在一些实施例中,与程序计数器606相关联的用户所指定的保存例程可以在如以上结合图5所描述的那样存储上下文之后执行。出其它之外,上下文缓冲器地址608被用于存储上下文缓冲器的位置。上下文缓冲器可以被用来存储与SM310在上下文切换时的内部状态相关联的数据。除其它之外,选项610被用于设置每个TRT条目602的用户选项。线程标识符612被用来识别哪个线程束404对应于TRT条目602。在各个实施例中,线程标识符612可以是唯一识别与TRT条目602相对应的线程束404的任意每束或每线程标识符,其包括但并不局限于识别PPU112中线程束所执行的部分的物理线程标识符或者唯一逻辑线程标识符。
图6B给出了描绘根据本发明一个实施例的用于执行TRT条目更新的处理的方法步骤的流程图。虽然该方法步骤结合图1-5的***进行描述,但是本领域技术人员将会理解的是,被配置为以任意顺序执行该方法步骤的任意***都处于本发明的范围之内。
如所示出的,方法620在步骤622开始,其中在线程执行陷阱指令之后,线程束404执行导致读取与陷阱线程束404相关联的线程标识符612的指令。在步骤624,线程束404执行导致基于与陷阱线程束404(0)相关联的线程标识符612而对适当TRT条目602进行搜索的指令。在一个实施例中,在步骤626,线程束404执行IDE指令并且使得中断无效。在步骤628,线程束404执行导致将与陷阱线程束404相关联的数据写入TRT条目602的参数的指令。TRT条目602的参数包括而并不局限于条目原因604、程序计数器606、上下文缓冲器地址608、选项610和线程标识符612。在一些实施例中,在步骤630,EU410可以执行IED指令并且可以使能中断。
在一个实施例中,IDE指令可以允许使能和无效诸如上下文切换的中断,并且可能在针对损毁而保护关键指令部分时是有用的。例如,第一TRT更新可以被中断以便执行第二TRT更新或上下文切换。这种可能性由于TRT更新可能在多个指令循环中出现的实施而引起关注,并且如果TRT更新被中断,则一个或多个要素604-612将仅被部分更新。如果TRT条目602仅被部分更新,则该TRT条目602可能变为损毁。因此,更新TRT条目602的处理可以被认为是陷阱处理例程中不应当被终端的关键指令部分。
在一个实施例中,IDE指令可以被用来使得TRT条目更新过程变为不可中断的,因此防止了第一TRT更新被第二TRT更新或上下文切换所中断。IDE指令所带来的好处在于,IDE指令可以被用来保护其它关键代码段,诸如用于在CTA402完成之后释放资源的指令,或者***调用例程的某些部分。
图6C-6D给出了描绘根据本发明一个实施例的用于执行陷阱处理例程的处理的方法步骤的流程图。虽然该方法步骤结合图1-5的***进行描述,但是本领域技术人员将会理解的是,被配置为以任意顺序执行该方法步骤的任意***都处于本发明的范围之内。
如所示出的,方法640在步骤642开始,其中线程束404当前正在执行。在步骤644,一个线程束404执行陷阱指令,导致了陷阱。在步骤646,线程束404执行使得每个线程束404都利用陷阱处理例程506的第一指令地址加载与每个线程束404相关联的程序计数器的指令(例如,预备指令508)。因此,陷阱处理处理开始。在步骤648,线程束404执行使得通过TRT条目602进行搜索的指令。在步骤650,线程束404执行导致基于步骤648中所进行的搜索而确定哪个特定线程束404执行陷阱指令的指令。在步骤652,每个线程束404执行导致基于与线程束404相关联的TRT条目602确定陷阱原因604。如果线程束404还没有导致陷阱发生,则该方法继续至方法660如以下所描述的步骤664。如果线程束404已经导致了陷阱发生,则该方法进行至方法660的步骤662。
在步骤662,线程束404执行陷阱线程束404的预备指令508。在步骤664,线程束404执行导致针对线程束404进行上下文切换的第一指令部分。在步骤666,在一个实施例中,线程束404可以执行RTT.FALLTHROUGH指令。在步骤668,线程束404执行导致上下文切换的其余指令。在步骤684,线程束404通过向程序计数器寄存器加载适当TRT条目602中的程序计数器606中所存储的数值而执行用户保存程序以保存附加的用户定义上下文。在一些实施例中,线程束404还可移植性附加指令以完成陷阱处理例程506。在步骤686,线程束404确定CTA402中执行陷阱处理例程506的所有线程束404是否都已经执行了RTT指令或RTT.FALLTHROUGH指令。如果并非所有线程束都已经执行了RTT指令或RTT.FALLTHROUGH指令,则该方法在步骤686进行等待。如果在步骤686所有线程束都已经执行了RTT指令或RTT.FALLTHROUGH指令,则方法660进行至步骤688,其中CTA402中的线程束404从SM310(0)中的活动执行退出。
在一个实施例中,可以执行RTT.FALLTHROUGH指令以便解决在比SM310内的所有CTA更少的CTA包括陷阱指令时出现的潜在性能问题。当执行陷阱指令时,SM310内所有CTA402的进程都被中断以便允许陷阱指令的适当处理。此外,该中断可以继续直至与陷阱线程束404相关联的陷阱处理例程506的执行完成。因此,如果允许非陷阱CTA在陷阱处理例程506的执行完成之前退出陷阱处理程序,则非陷阱CTA更快地继续执行。
在一个实施例中,合并窗口可以将陷阱处理延迟预定数量(Z)的周期以使得能够遇到来自陷阱线程束的多个陷阱并且利用单次上下文切换对其进行处理。在另一个实施例中,数字Z可以利用具有特权的寄存器设置进行配置。
图7给出了描绘根据本发明一个实施例的用于利用合并窗口处理陷阱的处理的方法步骤的流程图。虽然该方法步骤结合图1-5的***进行描述,但是本领域技术人员将会理解的是,被配置为以任意顺序执行该方法步骤的任意***都处于本发明的范围之内。
如所示出的,方法710在步骤712开始,其中线程束404开始执行一组相关联的线程。在步骤714,线程束404中的每个线程执行下一个指令。在步骤716,线程束404确定当前指令是否导致了陷阱。如果当前指令并未导致陷阱,则该方法返回步骤714,其中线程束404中的每个线程执行下一个指令。如果在步骤716当前指令导致了陷阱,则方法710进行至步骤718,其中线程束404将执行暂停Z个周期。该针对处理陷阱的Z个周期的延迟允许其它陷阱出现(例如,从陷阱线程束或CTA402中的其它线程束中运行的其它线程)。这样的附加陷阱与第一陷阱进行合并并且利用CTA402中的线程束的单次上下文切换进行处理。在步骤720,线程束404开始执行如以上结合图6C-6D所描述的陷阱处理例程506。
本发明的一个实施例可以被实施为用于随计算机***使用的程序产品。该程序产品的(多个)程序定义了实施例(包括这里所描述的方法)的功能并且能够包含在各种计算机可读媒体上。说明性的计算机可读存储媒体包括但并不局限于:(i)信息永久性存储于其上的非可写的存储媒体(例如,计算机内的制度存储器设备,诸如可由CD-ROM驱动器进行读取的紧凑盘只读存储器(CD-ROM)盘、闪存、只读存储器(ROM)芯片或者任意类型的固态非易失性半导体存储器);和(ii)其上存储可变信息的可写存储媒体(例如,软驱中的软盘或者硬盘或任意类型的固态随机访问半导体存储器)。
以上已经参考具体实施例对本发明进行了描述。然而,本领域技术人员将会理解的是,可以对其进行各种修改和变化而并不背离所附权利要求中给出的本发明的较宽泛的精神和范围。因此,以上描述和附图要被认为是说明性而非限制性的。
因此,本发明的范围由以下权利要求所给出。
Claims (10)
1.一种用于执行处理核心内所执行的线程遇到的第一陷阱指令的方法,该方法包括:
针对在所述处理核心内执行的多个线程组中所包括的每个线程组,响应于执行所述第一陷阱指令的多个线程组之一中所包括的第一线程而进入陷阱处理程序例程;
针对所述多个线程组中所包括的每个线程组,确定相对应的协作线程阵列(CTA)标识符是否与包括第一线程的CTA相关联;并且
如果相对应的CTA标识符不与包括第一线程的CTA相关联,则退出所述陷阱处理程序例程,或者
如果相对应的CTA标识符与包括第一线程的CTA相关联,则执行与所述陷阱处理程序例程相关联的一个或多个操作。
2.根据权利要求1的方法,其中如果相对应的CTA标识符与包括第一线程的CTA相关联,则进一步包括:
将与第一线程组相关联的上下文的第一部分存储在存储器中;
在存储与第一线程组相关联的上下文的第二部分之前,指示所述多个线程组中所包括的每个线程组可以在所述陷阱处理程序例程之外继续执行;并且
将与第一线程组相关联的上下文的第二部分存储在所述存储器中。
3.根据权利要求2的方法,进一步包括:
确定包括第一线程的CTA内的每个线程组已经执行了与所述陷阱处理程序例程相关联的一个或多个操作;并且
从所述处理核心的活动执行中去除包括第一线程的CTA内的每个线程组。
4.根据权利要求2的方法,进一步包括:
确定所述处理核心内执行的所有线程组已经指示了所述多个线程组中所包括的每个线程组可以在所述陷阱处理程序例程之外继续执行;并且
使得第一线程组在所述陷阱处理程序之外继续执行。
5.根据权利要求2的方法,进一步包括:
确定第一线程组包括遇到第一陷阱指令的所述线程;并且
在存储上下文的第一部分之前执行一个或多个指令。
6.根据权利要求5的方法,其中确定第一线程组包括遇到第一陷阱指令的线程包括:
从包含所述多个线程组中所包括的每个线程组的陷阱信息的数据结构中获取与第一线程组相关联的条目;并且
确定第一线程已经更新了与第一线程组相关联的条目。
7.根据权利要求2的方法,进一步包括:
在执行与所述陷阱处理程序例程相关联的一个或多个操作之前,等待预定时间周期;并且
确定执行第二陷阱指令的线程组之一中所包括的第二线程。
8.一种计算机***,包括:
存储器,其被配置为存储与陷阱处理例程相关的数据;
处理器,其被配置为通过实施以下步骤而执行在处理核心内执行的线程所遇到的陷阱指令:
针对在所述处理核心内执行的多个线程组中所包括的每个线程组,响应于执行所述陷阱指令的多个线程组之一中所包括的第一线程而进入陷阱处理程序例程;
针对所述多个线程组中所包括的每个线程组,确定相对应的协作线程阵列(CTA)标识符是否与包括第一线程的CTA相关联;并且
如果相对应的CTA标识符不与包括第一线程的CTA相关联,则退出陷阱处理程序例程,或者
如果相对应的CTA标识符与包括第一线程的CTA相关联,则执行与陷阱处理程序例程相关联的一个或多个操作。
9.根据权利要求8的计算机***,其中如果相对应的CTA标识符与包括第一线程的CTA相关联,则该处理器进一步被配置为实施步骤:
将与第一线程组相关联的上下文的第一部分存储在存储器中;
在存储与第一线程组相关联的上下文的第二部分之前,指示所述多个线程组中所包括的每个线程组可以在所述陷阱处理程序例程之外继续执行;并且
将与第一线程组相关联的上下文的第二部分存储在所述存储器中。
10.根据权利要求9的计算机***,其中该处理器进一步被配置为实施步骤:
确定包括第一线程的CTA内的每个线程组已经执行了与所述陷阱处理程序例程相关联的一个或多个操作;并且
从所述处理核心的活动执行中去除包括第一线程的CTA内的每个线程组。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/728,784 US10289418B2 (en) | 2012-12-27 | 2012-12-27 | Cooperative thread array granularity context switch during trap handling |
US13/728,784 | 2012-12-27 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103902369A true CN103902369A (zh) | 2014-07-02 |
Family
ID=50928537
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310741943.5A Pending CN103902369A (zh) | 2012-12-27 | 2013-12-27 | 陷阱处理期间的协作线程阵列的粒度上下文切换 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10289418B2 (zh) |
CN (1) | CN103902369A (zh) |
DE (1) | DE102013022258A1 (zh) |
TW (1) | TW201435576A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109726023A (zh) * | 2018-12-12 | 2019-05-07 | 中国航空工业集团公司西安航空计算技术研究所 | 一种支持多线程多上下文的图形任务同步管理方法 |
CN111465923A (zh) * | 2017-12-13 | 2020-07-28 | 微软技术许可有限责任公司 | 用于捕获和执行图形处理操作的技术 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102177871B1 (ko) | 2013-12-20 | 2020-11-12 | 삼성전자주식회사 | 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 |
US10409614B2 (en) | 2017-04-24 | 2019-09-10 | Intel Corporation | Instructions having support for floating point and integer data types in the same register |
US10474458B2 (en) | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
EP3938894B1 (en) | 2019-03-15 | 2023-08-30 | INTEL Corporation | Multi-tile memory management for detecting cross tile access, providing multi-tile inference scaling, and providing optimal page migration |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6128641A (en) * | 1997-09-12 | 2000-10-03 | Siemens Aktiengesellschaft | Data processing unit with hardware assisted context switching capability |
US6629252B1 (en) * | 1999-10-28 | 2003-09-30 | International Business Machines Corporation | Method for determining if a delay required before proceeding with the detected interrupt and exiting the interrupt without clearing the interrupt |
US7861060B1 (en) * | 2005-12-15 | 2010-12-28 | Nvidia Corporation | Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior |
US20110078427A1 (en) * | 2009-09-29 | 2011-03-31 | Shebanow Michael C | Trap handler architecture for a parallel processing unit |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4761733A (en) * | 1985-03-11 | 1988-08-02 | Celerity Computing | Direct-execution microprogrammable microprocessor system |
US5961629A (en) * | 1991-07-08 | 1999-10-05 | Seiko Epson Corporation | High performance, superscalar-based computer system with out-of-order instruction execution |
US6643765B1 (en) | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
GB2396713B (en) | 2002-11-18 | 2005-09-14 | Advanced Risc Mach Ltd | Apparatus and method for controlling access to a memory unit |
US7539853B2 (en) | 2002-11-18 | 2009-05-26 | Arm Limited | Handling interrupts in data processing of data in which only a portion of a function has been processed |
GB0226874D0 (en) * | 2002-11-18 | 2002-12-24 | Advanced Risc Mach Ltd | Switching between secure and non-secure processing modes |
US7779238B2 (en) | 2004-06-30 | 2010-08-17 | Oracle America, Inc. | Method and apparatus for precisely identifying effective addresses associated with hardware events |
US20080059677A1 (en) * | 2006-08-31 | 2008-03-06 | Charles Jens Archer | Fast interrupt disabling and processing in a parallel computing environment |
US7937567B1 (en) * | 2006-11-01 | 2011-05-03 | Nvidia Corporation | Methods for scalably exploiting parallelism in a parallel processing system |
US8259576B2 (en) * | 2007-03-23 | 2012-09-04 | Intel Corporation | Method and apparatus for performing interrupt coalescing |
US9734545B2 (en) * | 2009-10-08 | 2017-08-15 | Nvidia Corporation | Software methods in a GPU |
US9081501B2 (en) * | 2010-01-08 | 2015-07-14 | International Business Machines Corporation | Multi-petascale highly efficient parallel supercomputer |
US9652282B2 (en) | 2011-11-08 | 2017-05-16 | Nvidia Corporation | Software-assisted instruction level execution preemption |
US9286472B2 (en) | 2012-05-22 | 2016-03-15 | Xockets, Inc. | Efficient packet handling, redirection, and inspection using offload processors |
-
2012
- 2012-12-27 US US13/728,784 patent/US10289418B2/en active Active
-
2013
- 2013-12-03 TW TW102144211A patent/TW201435576A/zh unknown
- 2013-12-09 DE DE201310022258 patent/DE102013022258A1/de active Pending
- 2013-12-27 CN CN201310741943.5A patent/CN103902369A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6128641A (en) * | 1997-09-12 | 2000-10-03 | Siemens Aktiengesellschaft | Data processing unit with hardware assisted context switching capability |
US6629252B1 (en) * | 1999-10-28 | 2003-09-30 | International Business Machines Corporation | Method for determining if a delay required before proceeding with the detected interrupt and exiting the interrupt without clearing the interrupt |
US7861060B1 (en) * | 2005-12-15 | 2010-12-28 | Nvidia Corporation | Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior |
US20110078427A1 (en) * | 2009-09-29 | 2011-03-31 | Shebanow Michael C | Trap handler architecture for a parallel processing unit |
CN102648449A (zh) * | 2009-09-29 | 2012-08-22 | 辉达公司 | 用于并行处理单元的陷阱处理器架构 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111465923A (zh) * | 2017-12-13 | 2020-07-28 | 微软技术许可有限责任公司 | 用于捕获和执行图形处理操作的技术 |
CN111465923B (zh) * | 2017-12-13 | 2024-03-19 | 微软技术许可有限责任公司 | 用于捕获和执行图形处理操作的技术 |
CN109726023A (zh) * | 2018-12-12 | 2019-05-07 | 中国航空工业集团公司西安航空计算技术研究所 | 一种支持多线程多上下文的图形任务同步管理方法 |
CN109726023B (zh) * | 2018-12-12 | 2023-05-23 | 中国航空工业集团公司西安航空计算技术研究所 | 一种支持多线程多上下文的图形任务同步管理方法 |
Also Published As
Publication number | Publication date |
---|---|
DE102013022258A1 (de) | 2014-07-03 |
US10289418B2 (en) | 2019-05-14 |
TW201435576A (zh) | 2014-09-16 |
US20140189329A1 (en) | 2014-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10564978B2 (en) | Operation of a multi-slice processor with an expanded merge fetching queue | |
KR101559090B1 (ko) | 이종 코어를 위한 자동 커널 마이그레이션 | |
EP2542973B1 (en) | Gpu support for garbage collection | |
CN103902369A (zh) | 陷阱处理期间的协作线程阵列的粒度上下文切换 | |
US9354892B2 (en) | Creating SIMD efficient code by transferring register state through common memory | |
CN103197916A (zh) | 用于源操作数收集器高速缓存的方法和装置 | |
CN103218309A (zh) | 多级指令高速缓存预取 | |
CN114667508B (zh) | 为加速器取回数据的方法和*** | |
CN103197953A (zh) | 推测执行和回滚 | |
US9940133B2 (en) | Operation of a multi-slice processor implementing simultaneous two-target loads and stores | |
US11003452B2 (en) | Effectiveness and prioritization of prefetches | |
TW201717004A (zh) | 用於簡化用於有效平行計算的以任務為基礎的運行時間之方法 | |
US11531562B2 (en) | Systems, methods, and apparatuses for resource monitoring | |
US11157415B2 (en) | Operation of a multi-slice processor implementing a unified page walk cache | |
Abbaspour et al. | Lazy spilling for a time-predictable stack cache: Implementation and analysis | |
US8577936B2 (en) | Fixup cache tool for object memory compaction in an information handling system | |
Bae et al. | Ssdstreamer: Specializing i/o stack for large-scale machine learning | |
CN106547603B (zh) | 减少golang语言***垃圾回收时间的方法和装置 | |
US20230315536A1 (en) | Dynamic register renaming in hardware to reduce bank conflicts in parallel processor architectures | |
US20200019405A1 (en) | Multiple Level History Buffer for Transaction Memory Support | |
EP4275114A1 (en) | Background processing during remote memory access |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140702 |
|
WD01 | Invention patent application deemed withdrawn after publication |