CN115004154A - Simd处理器中的指令级上下文切换 - Google Patents

Simd处理器中的指令级上下文切换 Download PDF

Info

Publication number
CN115004154A
CN115004154A CN202180010385.8A CN202180010385A CN115004154A CN 115004154 A CN115004154 A CN 115004154A CN 202180010385 A CN202180010385 A CN 202180010385A CN 115004154 A CN115004154 A CN 115004154A
Authority
CN
China
Prior art keywords
simd
group
threads
context
information
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
Application number
CN202180010385.8A
Other languages
English (en)
Inventor
B·L·古德曼
T·M·波特
A·拉詹德兰
J·T·布雷迪
B·K·雷诺尔德斯
J·A·洛曼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Apple Inc
Original Assignee
Apple Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Apple Inc filed Critical Apple Inc
Publication of CN115004154A publication Critical patent/CN115004154A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent 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]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task 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)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Advance Control (AREA)

Abstract

本发明公开了涉及SIMD处理器中的上下文切换的技术。在一些实施方案中,一种装置包括流水线电路,该流水线电路被配置为执行包括在线程组内的一组单指令多数据(SIMD)线程中的线程中的图形指令。在一些具体实施中,上下文切换电路被配置为原子地:针对该SIMD组,使用一个或多个上下文切换寄存器保存程序计数器和指示该SIMD组中的线程是否活动的信息,针对该SIMD组将所有线程设置为活动状态,并且针对该SIMD组分支到处理程序代码。在一些实施方案中,该流水线电路被配置为执行该处理程序代码以保存该SIMD组的上下文信息,并且随后执行另一线程组的线程。所公开的技术可以允许指令级上下文切换,即使当某些SIMD线程是非活动的时也是如此。

Description

SIMD处理器中的指令级上下文切换
背景技术
技术领域
本公开整体涉及SIMD处理器架构,并且更具体地涉及用于指令级上下文切换的技术。
相关技术描述
传统上,GPU上下文切换可防止将新工作发送到着色器单元,但在将着色器资源用于新线程之前等待正在运行的线程完成。上下文切换等待时间可能很重要,因为新的上下文可能具有实时执行要求。例如,长期运行的后台计算任务可导致相当长的等待时间。因为图形线程通常使用单指令多数据(SIMD)技术来执行,所以保存用于上下文切换的体系结构状态可能具有挑战性。
附图说明
图1A是示出根据一些实施方案的示例性图形处理操作的概述的图示。
图1B是示出根据一些实施方案的示例性图形单元的框图。
图2是示出根据一些实施方案的示例性抢占时间线的图。
图3是示出根据一些实施方案的被配置为执行SIMD组的指令级上下文切换的电路的框图。
图4是示出根据一些实施方案的用于使用特殊寄存器来执行指令级抢占的示例性方法的流程图。
图5是示出根据一些实施方案的用于定位着色器的抢占处理程序和恢复处理程序的示例性技术的流程图。
图6是示出根据一些实施方案的用于执行上下文切换的方法的流程图。
图7是示出根据一些实施方案的可被配置为执行SIMD操作和指令级上下文切换的示例性计算设备的框图。
图8是示出根据一些实施方案的存储电路设计信息的示例性计算机可读介质的框图。
本说明书包括对各种实施方案的参考,以指示本公开并非旨在提及一个特定具体实施,而是提及落入包括所附权利要求书的本公开的实质内的一系列实施方案。特定特征、结构或特性可以与本公开一致的任何合适的方式被组合。
在本公开内,不同实体(其可被不同地称为“单元”、“电路”、其他部件等)可被描述或声称成“被配置为”执行一个或多个任务或操作。此表达方式—被配置为[执行一个或多个任务]的[实体]—在本文中用于指代结构(即,物理的事物,诸如电子电路)。更具体地,此表达方式用于指示此结构被布置成在操作期间执行一个或多个任务。结构可被说成“被配置为”执行某个任务,即使该结构当前并非正被操作。“被配置为执行着色器程序的可编程着色器电路”旨在涵盖例如在操作期间执行此功能的电路,即使所涉及的电路当前未被使用(例如,该电路未连接到电源)。因此,被描述或表述成“被配置为”执行某个任务的实体是指用于实施该任务的物理的事物,诸如设备、电路、存储有可执行程序指令的存储器等等。该短语在本文中不被用于指代无形的事物。
术语“被配置为”并不旨在意指“可配置为”。例如,未经编程的FPGA不会被认为是“被配置为”执行某个特定功能,虽然其可能“可配置为”执行该功能。在适当编程之后,FPGA然后可被配置为执行该功能。
所附权利要求书中的表述结构“被配置为”执行一个或多个任务明确地旨在对该权利要求要素不援引35U.S.C.§112(f)。于是,所提交的本申请中没有任何权利要求旨在要被解释为具有装置-加-功能要素。如果申请人在申请过程中想要援引112(f)部分,则其将使用“用于[执行功能]的装置”结构来表述权利要求的要素。
如本文所用,术语“基于”用于描述影响确定的一个或多个因素。此术语不排除可能有附加因素可影响确定。也就是说,确定可仅基于指定的因素或基于所指定的因素及其他未指定的因素。考虑短语“基于B确定A”。此短语指定B是用于确定A的因素或者B影响A的确定。此短语并不排除A的确定也可基于某个其他因素诸如C。此短语也旨在覆盖A仅基于B来确定的实施方案。如本文所用,短语“基于”与短语“至少部分地基于”是同义的。
此外,如本文所用,术语“第一”、“第二”、“第三”等并不一定暗示元件之间的排序(例如,时间顺序)。例如,对“第一”图形操作和“第二”图形操作的参考并不暗示对图形操作的排序,缺少限制这些操作之间的时间关系的附加语言。简而言之,诸如“第一”、“第二”等的参考用作标记,以便于在说明书和所附权利要求中进行参考。
具体实施方式
图形处理概述
参见图1A,其示出了示出用于处理图形数据的示例性处理流程100的流程图。在一些实施方案中,变换和照明步骤110可涉及基于限定的光源位置、反射率等处理从应用程序接收的顶点的照明信息,将顶点组装成多边形(例如,三角形),以及/或者基于三维空间中的位置来将多边形转换为正确的大小和取向。剪辑步骤115可涉及丢弃在可视区域之外的多边形或顶点。光栅化步骤120可涉及在每个多边形内限定片段并且例如基于多边形顶点的纹理坐标来为每个片段分配初始色值。片段可指定它们重叠的像素的属性,但可基于组合多个片段(例如,在帧缓冲器中)和/或忽略一个或多个片段(例如,如果它们被其他对象覆盖)来确定实际像素属性。着色步骤130可涉及基于照明、阴影、隆起映射、半透明度等来改变像素分量。可将着色像素组装在帧缓冲器135中。现代GPU通常包括允许应用开发者定制着色和其他处理步骤的可编程着色器。因此,在各种实施方案中,图1A的示例性元件可以各种顺序执行,并行执行或省略。还可实施另外的处理步骤。
现在参见图1B,示出了根据一些实施方案的例示图形单元150的简化框图。在例示的实施方案中,图形单元150包括可编程着色器160、顶点管185、片段管175、纹理处理单元(TPU)165、图像写入单元170、和存储器接口180。在一些实施方案中,图形单元150被配置为使用可编程着色器160来处理顶点数据和片段数据两者,该可编程着色器可被配置为使用多个执行流水线或实例来并行处理图形数据。
在图示实施方案中,顶点管185可包括被配置为处理顶点数据的各种固定功能硬件。顶点管185可被配置为与可编程着色器160通信,以便协调顶点处理。在图示实施方案中,顶点管185被配置为将经处理的数据发送至片段管175和/或可编程着色器160以用于进一步处理。
在图示实施方案中,片段管175可包括被配置为处理像素数据的各种固定功能硬件。片段管175可被配置为与可编程着色器160通信,以便协调片段处理。片段管175可被配置为在来自顶点管185和/或可编程着色器160的多边形上执行光栅化以生成片段数据。顶点管185和/或片段管175可耦接到存储器接口180(未示出耦接)以便访问图形数据。
在图示实施方案中,可编程着色器160被配置为接收来自顶点管185的顶点数据和来自片段管175和/或TPU 165的片段数据。可编程着色器160可被配置为对顶点数据执行顶点处理任务,该顶点处理任务可包括顶点数据的各种变换和/或调整。在例示的实施方案中,可编程着色器160还被配置为对像素数据执行片段处理任务,诸如像纹理和着色处理。可编程着色器160可包括用于并行处理数据的多个执行流水线。
在例示的实施方案中,TPU 165被配置为调度来自可编程着色器160的片段处理任务。在一些实施方案中,TPU 165被配置为预取纹理数据并将初始颜色分配给片段以供可编程着色器160进一步处理(例如,经由存储器接口180)。TPU 165可被配置为提供例如在规格化整数格式或浮点格式的片段分量。在一些实施方案中,TPU 165被配置为提供呈2x2格式的四个一组(“片段四元组”)的片段,该片段由可编程着色器160中的一组四个执行流水线处理。
在一些实施方案中,图像写入单元(IWU)170被配置为存储图像的处理后图块,并且可在将其传输以用于显示或传输给存储器用于存储之前对渲染后图像执行操作。在一些实施方案中,图形单元150被配置为执行分块式延迟渲染(TBDR)。在分块式渲染中,可单独处理屏幕空间的不同部分(例如,像素的正方形或矩形)。在各种实施方案中,存储器接口180可促进与各种存储器分级结构中的一个或多个的通信。
指令级抢占的概述
例如,当新的上下文具有实时执行要求时,图形处理硬件响应对当前运行的应用程序的上下文切换的请求的等待时间可能很重要。例如,在当前上下文是长期运行后台应用程序,诸如照片分类任务时,上下文切换等待时间可能特别重要。在一些具体实施中,GPU可停止将工作启动到着色器核心,但允许已经执行的线程在上下文切换之前完成执行。在这些具体实施中,着色器程序运行时间可直接促成完成上下文保存所需的等待时间。
在下面讨论的实施方案中,图形单元支持指令级上下文切换,而不是允许当前执行的线程完成。在一些实施方案中,这可以提供上下文切换等待时间的上限。在这些实施方案中,线程可以将其体系结构状态保存到存储器作为上下文存储的一部分,并且在上下文恢复期间读回其体系结构状态。在一些实施方案中,指令集体系结构(ISA)指令用于上下文切换,并且可以由硬件插入或者由开发者包括在着色器中。指令级上下文切换在单指令多数据(SIMD)执行的上下文中可能特别复杂,其中一些线程可以在当前执行点处无效或断定为断开(或者以其他方式当前未在执行,例如由于控制流改变),但可能需要类似于活动线程保存其状态。
图2是示出根据一些实施方案的示例性指令级抢占的图。在例示的实施方案中,图形启动的SIMD组在执行期间被抢占,并且随后被恢复以恢复执行。需注意,例如,相对于在调度新工作之前等待SIMD组结束,该技术可以具有减少的上下文切换等待时间。进一步需注意,本文所述的各种实施方案涉及抢占,但类似的技术可以用于其他场景中的上下文切换。
在例示的实施方案中,启动被标记为在设置期间支持抢占。因此,图形单元可以执行不支持抢占的一些启动(并且将执行直到它们完成)以及支持抢占的其他启动。需注意,当启动完成执行时,启动可以使用上下文ID来将数据写出到共享存储器。在SIMD上下文中,用于启动的上下文存储可以存储用于对应的线程组的数据,该对应的线程组可以包括多个SIMD组(其中一些SIMD组可以结束,其中一些SIMD组可以执行,并且其中一些SIMD组还没有启动)。给定线程组包括执行相同的指令集但可以被分成可以使用不同执行资源执行的单独的SIMD组的线程。SIMD组中的线程可以共享程序计数器。SIMD组也可以被称为例如团、翘曲或波前。
例如,可以执行多个启动来渲染图形数据帧。在一些实施方案中,启动是来自单个上下文的工作单元,其可包括要执行的多个线程(并且可能潜在包括未由着色器执行的其他类型的图形工作)。启动可能不提供关于线程之间的存储器同步(除线程本身指定的之外)、线程之间的并发性或线程之间的启动顺序的任何保证。在一些实施方案中,可以根据另一个启动的结果来识别启动,这可以允许存储器同步而不需要硬件存储器一致性支持。通常,在将工作发送到流水线以进行处理之前,图形固件或硬件程序配置为每个启动注册。通常,一旦启动,它就不会访问高于某个级别的存储器分级结构,直到启动完成(此时可以将结果写入分级结构中的更高级别)。给定启动的信息可包括完成对应图形操作所需的状态信息、要执行的着色器程序的位置、缓冲器信息、纹理数据的位置、可用地址空间等。例如,当启动完成时,图形固件或硬件可以安排启动并检测中断。在一些实施方案中,图形单元150的部分被配置为一次在单个启动上工作。因此,在一些实施方案中,从在启动开始时在多个处理元件之间共享的存储器读取给定启动所需的任何数据,并且在启动结束时将结果写回共享存储器。因此,在启动完成之前,其他硬件可能无法看到启动的结果,此时结果可用于共享存储器中并且可由其他启动(包括来自其他数据主设备的启动)访问。启动可包括一个或多个渲染命令的集合,其可包括用于绘制过程式几何结构的命令、用于设置阴影采样方法的命令、用于绘制网格的命令、用于检索纹理的命令、用于执行生成计算的命令等。可以在帧渲染期间的各个阶段中的一个阶段执行启动。渲染阶段的示例包括但不限于:相机渲染、光渲染、投影、纹理化、片段着色等。例如,可以为计算工作、顶点工作或像素工作调度启动。
在图2的示例中,在启动的部分执行之后,图形驱动程序请求对该启动的上下文保存。此时,用于启动的一些SIMD组可能尚未被分派用于执行,但其他SIMD组可能正在运行。响应于上下文保存请求,启动开始抢占操作,其中着色器核心为被抢占的线程组的SIMD组执行抢占处理程序。在例示的示例中,抢占处理程序存储包括线程组数据和线程组中每个SIMD组的数据的着色器状态。如下文进一步详细讨论的,该过程可以使用硬件插入的上下文切换或图形单元150所支持的指令集架构(ISA)的抢占指令,该图形单元可以使用特殊寄存器来临时存储着色器状态信息并且接着调用抢占处理程序。
在例示的实施方案中,调度器电路(例如,用于被抢占的启动的数据主设备)存储用于每个被抢占的线程组的状态信息,该状态信息标识该线程组并且包括指向用于存储该线程组的状态信息的专用存储器空间的指针。
一旦抢占操作完成,其他线程组就可以加载它们的上下文并且使用被抢占的执行资源。随后,驱动程序重新启动被抢占的线程组,并且恢复过程开始。在该过程中,调度器电路使用用于线程群组的指针开始上下文加载,并且着色器核心执行恢复处理程序,该恢复处理程序检索并且恢复为线程组及其SIMD组存储的着色器状态信息。随后,启动继续执行,例如,直到其完成或再次被抢占。
图3是示出根据一些实施方案的被配置为执行指令级上下文切换的示例性电路的框图。在例示的实施方案中,系统包括数据主设备310、线程执行资源320、仲裁电路330、特殊寄存器340和存储器350。
数据主设备310是被配置为调度线程组以供使用线程执行资源320(例如,可编程着色器160的部分)来执行的调度器电路的一个示例。数据主设备310可被配置为调度某一特定类型的工作,例如计算任务、顶点任务或像素任务。在具有多个数据主设备的实施方案中,每个数据主设备可以控制用于被它所调度的启动的上下文切换。
在一些实施方案中,特殊寄存器340被配置为存储用于上下文切换的某些类型的信息,诸如用于被抢占的SIMD组的有效性信息、谓词信息、程序计数器信息等。一般而言,这些寄存器可存储指示线程是否活动的信息;谓词信息和有效性信息是此类信息的示例。特殊寄存器340也可以称为上下文切换寄存器。在例示的实施方案中,仲裁电路330被配置为从准备使用特殊寄存器340的SIMD组中进行选择,例如,相对于包括用于被配置为执行SIMD组的每组硬件的特殊寄存器,这可以节省面积并且降低功率消耗。在一些实施方案中,特殊寄存器340对于确保当前无效或断定为断开的线程仍然保存它们的着色器状态,同时仍然跟踪关于SIMD组何时重新启动的有效性和谓词信息可能特别有用。
仲裁电路330可以使用各种算法,诸如循环法、基于年龄的队列等从请求SIMD组中进行选择。在一些实施方案中,SIMD组在执行抢占指令之前等待以赢得仲裁,使得一组特殊寄存器变得可用。
在例示的实施方案中,存储器350包括分配给被切换出的线程组的专用存储器空间355。在例示的实施方案中,线程将通用寄存器内容、专用寄存器内容和任何其他状态信息(诸如本地存储器内容)存储到专用存储器空间355。数据主设备310可以保持被抢占的线程组和指向它们相应的专用存储器空间的指针的列表,以便重新启动线程组。在一些实施方案中,线程执行资源320可以为上下文切换出的线程组分配专用存储器空间,并且可以在恢复完成之后解除分配空间。
使用特殊寄存器的示例性上下文切换方法
图4是示出根据一些实施方案的用于线程组的指令级抢占的详细示例性方法的流程图。例如,图4的方法可以由图3所示的电路执行。更一般地,图4所示的方法可以结合本文所公开的计算机电路、系统、设备、元件或部件等中的任一者来使用。在各种实施方案中,所示的方法要素中的一些可按与所示次序不同的次序并发执行,或者可被省去。也可根据需要执行附加的方法要素。
在410处,在例示的实施方案中,驱动程序请求上下文保存。响应于该请求,数据主设备310可以向线程执行资源320发送对上下文保存的请求,线程执行资源可以向数据主设备310返回指向被抢占的线程的专用存储器空间的指针。需注意,虽然在图形处理器的上下文中讨论了所公开的技术,但是该讨论并不旨在限制本公开的范围。在其他实施方案中,这些技术可用于其他类型的SIMD处理器。
在420处,在例示的实施方案中,在正在进行上下文保存的线程组中执行线程停止提取和发出新指令并且等待任何先前发出的指令完成。一些指令(诸如加载指令)可能花费更长的时间来完成,但可能需要在状态可被正确保存之前完成。一旦完成了所有先前发出的指令,线程就可以准备好执行抢占指令。已经取出但尚未发出的指令可以被刷新,并且将不被执行,直到SIMD组被恢复。
在430处,在例示的实施方案中,仲裁电路330在就绪线程之间进行仲裁。赢得仲裁的SIMD组执行抢占指令。抢占指令可以基于上下文切换被硬件插入到线程中,并且还可以是可以被包括在线程中的显式着色器指令。
在440处,在例示的实施方案中,抢占指令的执行原子地完成SIMD组的若干操作。最先,它将用于SIMD组的程序计数器(PC)、当前线程有效信息和谓词信息复制到当前分配给SIMD组的特殊寄存器340中。其次,它将用于SIMD组的所有线程有效和谓词信息设置为开启或活动状态。在一些实施方案中,这确保了即使是无效或断定为断开的线程仍将执行抢占处理程序代码(可能需要该抢占处理程序代码来保存那些线程的状态,即使它们当前不是活动的)。第三,抢占指令例如使用分支跳转到抢占处理程序代码中的第一指令。下面参考图5讨论用于定位抢占处理程序的示例性技术。
特殊寄存器的示例包括:返回寄存器,该返回寄存器被配置为存储信息以允许SIMD组返回到正确PC和状态的被抢占的程序;一个或多个寄存器,该一个或多个寄存器被配置为在抢占处理程序之前存储每个线程的有效性信息;一个或多个寄存器,该一个或多个寄存器用于在抢占处理程序之前存储每个线程的谓词信息;字段,该字段指示包括SIMD组的线程组是否具有专用存储器分配;与线程组相关联的虚拟地址(一旦线程组被抢占,虚拟地址就可以由数据主设备310存储)。
在一些实施方案中,字段可以指示给定的SIMD组或线程组是否支持抢占。设备可以避免抢占不支持该特征的线程。
在450处,在例示的实施方案中,抢占处理程序执行并且执行多个操作。在例示的实施方案中,抢占处理程序最先将SIMD组的通用寄存器(GPR)数据保存到线程组的专用存储器空间(需注意,这可以仅保存用于GPR的子集的数据,例如,以允许足够的GPR空间来存储特殊的寄存器内容)。然后,抢占处理程序将特殊寄存器内容移动至通用寄存器中,并且将寄存器内容保存到专用存储器空间(这允许在线程组恢复之后正确恢复谓词和有效性状态)。在一些实施方案中,抢占处理程序使用mfsr(从特殊寄存器移动)指令来将数据从特殊寄存器移动至通用寄存器,并且类似地使用mtsr指令来将数据从通用寄存器移动至特殊寄存器。然后,抢占处理程序释放特殊寄存器,例如使得它们可以被另一个SIMD组使用。需注意,系统可以包括各种数量的特殊寄存器组中的任何一个,使得多个SIMD组可以并行地使用不同的特殊寄存器组。然而,在具有仲裁电路的实施方案中,在某些情况下,特殊寄存器组的数量可小于希望保存着色器状态的SIMD组的数量。
设备可以基于着色器上构成线程组的SIMD组的数量和线程组本身的空间来确定为线程组保留的存储器的量。每个SIMD组可能需要用于其GPR分配的空间和可以由配置寄存器指定的附加空间。每个线程组还可能需要用于线程组存储器和局部图像块(LIB)存储器的附加分配和附加空间,这可以类似地由配置寄存器指定。在一些实施方案中,设备被配置为如果无法分配足够量的专用存储器空间,则放弃上下文切换或抢占过程。在这种情况下,线程组可以继续运行直到它完成。
在一些实施方案中,使用加载和存储指令来访问专用存储器空间,并且可以使用栈结构来组织专用存储器空间。作为一个示例,栈可以存储GPR数据,接着是SIMD组范围状态,然后是线程组范围状态。
在460处,在例示的实施方案中,线程继续将剩余架构状态(例如,附加的GPR数据、本地存储器内容等)保存到专用存储器空间。一旦处理程序完成其操作,它就结束执行,并且将指针(可被称为恢复处理程序)发送至数据主设备310。
在470处,在例示的实施方案中,数据主设备310存储被抢占的线程组及其恢复处理程序的列表。这可以允许数据主设备在线程组将恢复时访问线程组的专用存储器空间,以便正确地恢复其上下文。
为了恢复线程组,数据主设备可以基于指向恢复处理程序的指针启动SIMD组。每个SIMD组可以执行“预存储”指令,该指令可以将分组中的用于线程的所有有效和谓词信息设置为“开启”或“正在执行”,并且跳转到用于SIMD组的恢复处理程序代码的第一指令。在一些实施方案中,到恢复处理程序的地址的分支被放置在距着色器的第一指令地址的固定偏移处。
恢复处理程序可以从线程组的专用存储器区域重新加载体系结构状态,将先前的PC、线程有效性、谓词值等放入特殊寄存器(特殊寄存器可以在SIMD组之间仲裁)。然后,恢复处理程序可以执行“预转”指令,该指令可以从特殊寄存器读取PC、有效性信息和谓词信息,相应地更新SIMD组的有效性和谓词状态,并且无条件地从特殊寄存器分支到PC以继续执行SIMD组。在预转指令之后,重新发射的SIMD组可以使用其分配的硬件资源(这些硬件资源可以是或可以不是重新发射的SIMD组最初在上面执行的相同的一组硬件资源)继续进行。用于存储用于被抢占的线程组的资源的专用存储器可以在执行预转指令之后不久被释放,以快速地使该存储器空间可用于其他用途。
需注意,本文的各种示例涉及线程抢占,但类似的上下文切换技术可以在各种场景中使用。例如,着色器代码可包括显式抢占和返回指令(或其他上下文切换指令),这些显式抢占和返回指令原子地执行本文所述用于抢占/恢复的功能。这些技术可以用于记忆化,例如,其中昂贵的函数调用可以存储它们的结果以便当相同的输入发生时再次使用。例如,线程可以使用所公开的技术来在特定的时间点将结果存储在专用存储器空间中,并且当再次发生适当的输入时,可以恢复线程来检索该状态。在某些情况下,该状态可以保存在专用存储器空间中,并且即使在线程恢复之后,数据主设备也可以存储返回PC,从而允许从期望的执行点多次调用线程。所公开的技术在纹素着色和存储器的压缩/解压缩的上下文中也可以是有用的。在一些具体实施中,所公开的技术可以与硬件虚拟化一起使用,例如,允许编程模型假设特定数量的资源,即使特定的硬件具体实施可能具有较少的资源。在这些示例性环境中,临时地重新使用一组线程协作来高效地执行某些工作的能力可能特别有用。
所公开的技术可有利地减少上下文切换的等待时间,并且可以提供该等待时间的已知上限。此外,所公开的技术可允许SIMD上下文中的快速上下文切换,即使当SIMD组中的一些线程不活动时,例如,使用在启动处理程序之前保存活动状态(例如,有效性或谓词状态)的多级过程。使用ISA指令进行上下文切换或抢占也可以允许在其他场景中使用该指令。
示例性抢占和恢复处理程序
图5是示出着色器及其抢占处理程序和恢复处理程序的示例性存储的图。在例示的示例中,主着色器在地址“addr”处开始,到抢占处理程序的分支被存储在距着色器“addr-6”的开始的已知偏移处,并且到恢复处理程序的分支被存储在距着色器“addr-12”的开始的另一已知偏移处。
当上下文切换发生时(例如,基于抢占指令),主着色器经由分支跳转到抢占处理程序代码中的第一指令,如使用虚线所示。当调用恢复处理程序用于着色器时,它用预转指令完成,该预转指令在适当的程序计数器处将执行返回到主着色器。需注意,包括图5的示例是为了说明的目的,而并非旨在限制本公开的范围。在其他实施方案中,可以使用各种技术中的任何一种技术来指定程序的抢占或恢复处理程序的位置。
需注意,抢占或恢复处理程序可以例如由开发者为给定的着色器定制,以便保存适当的着色器状态。例如,这样的处理程序可以或可以不保存某些临时的着色器信息。在一些实施方案中,设备可以实施默认抢占和恢复处理程序,默认抢占和恢复处理程序可被配置为保存和恢复可以由给定着色器使用的所有状态。
示例性方法
图6是示出根据一些实施方案的用于线程组的指令级抢占的详细示例性方法的流程图。图6所示的方法可以结合本文所公开的计算机电路系统、系统、设备、元件或部件等中的任一者来使用。在各种实施方案中,所示的方法要素中的一些可按与所示次序不同的次序并发执行,或者可被省去。也可根据需要执行附加的方法要素。
在610处,在例示的实施方案中,流水线电路执行包括在线程组内的一组单指令多数据(SIMD)线程中的线程中的图形指令。例如,流水线电路可以是被配置为提取、解码、发出和执行着色器指令的着色器流水线。
在620处,在例示的实施方案中,上下文切换电路使用一个或多个上下文切换寄存器针对SIMD组原子地保存程序计数器和指示SIMD组中的线程是否活动的信息,将所有线程设定为SIMD组的活动状态,并且分支到SIMD组的处理程序代码。在一些实施方案中,指示SIMD组中的线程是否活动的信息包括以下各项中的一者或多者:有效性信息或谓词信息。更一般地,信息可以指定足够的信息来记录SIMD组中每个线程的控制流状态。上下文切换电路可以响应于例如来自驱动程序的上下文切换或抢占请求来执行这些动作。可以响应于上下文切换指令(例如,上面所讨论的“抢占”指令)来执行元件620的原子操作,该上下文切换指令可以响应于上下文切换请求而被插入到SIMD组中。在一些实施方案中,响应于上下文切换请求,设备停止提取SIMD组的指令,并且等待为SIMD组发出的指令完成。
在630处,在例示的实施方案中,设备执行处理程序代码以保存SIMD组的上下文信息,并且随后执行另一线程组的线程。因为在元件620中所有线程都被设置为活动状态,所以这可以允许非活动线程保存它们的状态。保存上下文信息可以包括将上下文切换寄存器的内容保存到存储器,例如以便在恢复时正确地恢复线程的活动状态。
在一些实施方案中,处理程序代码被配置为将来自一个或多个通用寄存器的第一数据存储在存储器中(例如,以保存GPR内容),将来自一个或多个上下文切换寄存器的第二数据移动至一个或多个通用寄存器中,并且将来自一个或多个通用寄存器的第二数据移动至存储器中(例如,以便使用正常存储指令将特殊寄存器状态保存到存储器)。在一些实施方案中,处理程序代码将SIMD组的上下文信息保存在为线程组保留的专用存储器区域中。在一些实施方案中,处理程序请求指向专用存储器区域的指针,并且将该指针发送至被配置为调度线程组的调度器电路。在一些实施方案中,分支指令位于SIMD组的代码中的已知位置处,并且指示处理程序代码的位置。
在一些实施方案中,上下文切换电路被进一步配置为响应于SIMD组的重新启动,针对SIMD组将所有线程设置为活动状态,并且跳转到用于SIMD组的恢复处理程序。在一些实施方案中,上下文切换电路被进一步配置为原子地:对于SIMD组,从一个或多个上下文切换寄存器读取程序计数器和指示SIMD组中的线程是否活动的信息,基于所读取的信息更新SIMD组的状态,并且分支到程序计数器地址以恢复SIMD组的执行。
示例性设备
现在参考图7,该图示出了例示设备700的示例性实施方案的框图。在一些实施方案中,可将设备700的元件包括在片上系统内。在一些实施方案中,可将设备700包括在可以是电池供电的移动设备中。因此,设备700的功率消耗可能是重要的设计考虑因素。在例示的实施方案中,设备700包括结构体710、计算复合体720、输入/输出(I/O)桥接部750、高速缓存/存储器控制器745、图形单元150,以及显示单元765。在一些实施方案中,除所示的部件之外和/或代替所示的部件,设备700可包括其他部件(未示出),诸如视频处理器编码器和解码器、图像处理或识别元件、计算机视觉元件等。
结构体710可以包括各种互连器、总线、MUX、控制器等,并且可以被配置为促进设备700的各种元件之间的通信。在一些实施方案中,结构体710的各部分可被配置为实现各种不同的通信协议。在其他实施方案中,结构体710可实现单个通信协议,并且耦接到结构体710的元件可在内部从单个通信协议转换到其他通信协议。
在例示的实施方案中,计算复合体720包括总线接口单元(BIU)725、高速缓存730,以及内核735和740。在各种实施方案中,计算复合体720可包括各种数量的处理器、处理器内核和/或高速缓存。例如,计算复合体720可包括1个、2个或4个处理器内核,或任何其他合适的数量。在一个实施方案中,高速缓存730是一组关联L2高速缓存。在一些实施方案中,内核735和/或740可包括内部指令和/或数据高速缓存。在一些实施方案中,结构体710、高速缓存730或设备700中的其他地方的一致性单元(未示出)可被配置为保持设备700的各种高速缓存之间的一致性。BIU725可被配置为管理计算复合体720和设备700的其他元件之间的通信。处理器内核诸如内核735和740可被配置为执行可包括操作系统指令和用户应用指令的特定指令集架构(ISA)的指令。
高速缓存/存储器控制器745可被配置为管理结构体710与一个或多个高速缓存和/或存储器之间的数据传输。例如,可将高速缓存/存储器控制器745耦接到L3高速缓存,继而可将该L3高速缓存耦接到系统存储器。在其他实施方案中,可将高速缓存/存储器控制器745直接耦接到存储器。在一些实施方案中,高速缓存/存储器控制器745可包括一个或多个内部高速缓存。
如本文所用,术语“耦接到”可指示元件之间的一个或多个连接,并且耦接可包括中间元件。例如,在图7中,图形单元150可被描述为通过结构体710和高速缓存/存储器控制器745“耦接到”存储器。相比之下,在图7的例示的实施方案中,图形单元150“直接耦接”到结构体710,因为不存在中间元件。
图形单元150可包括一个或多个处理器和/或一个或多个图形处理单元(GPU)。例如,图形单元150可接收面向图形的指令,诸如
Figure BDA0003757701070000141
Metal或
Figure BDA0003757701070000142
指令。图形单元150可基于所接收的面向图形的指令执行专用GPU指令或执行其他操作。图形单元150通常可被配置为并行处理大块数据,并且可在帧缓冲器中构建图像以输出到显示器。图形单元150可包括在一个或多个图形处理流水线中的变换、照明、三角形和/或渲染引擎。图形单元150可输出用于显示图像的像素信息。在各种实施方案中,可编程着色器160可以包括被配置为执行图形程序的高度并行的执行核,这些图形程序可以包括像素任务、顶点任务和计算任务(其可以是图形相关的或可以不是图形相关的)。
在一些实施方案中,图形单元150包括所公开的上下文切换电路、流水线电路、仲裁电路等。
显示单元765可被配置为从帧缓冲区读取数据并且提供像素值流以用于显示。在一些实施方案中,显示单元765可被配置为显示流水线。另外,显示单元765可被配置为将多个帧混合以产生输出帧。此外,显示单元765可以包括用于耦接到用户显示器(例如,触摸屏或外部显示器)的一个或多个接口(例如,
Figure BDA0003757701070000151
或嵌入式显示端口(eDP))。
I/O桥接部750可包括被配置为实现例如通用串行总线(USB)通信、安全性、音频和/或低功率永远在线功能的各种元件。I/O桥接部750还可以包括例如脉冲宽度调制(PWM)、通用输入/输出(GPIO)、串行外围接口(SPI)和/或内部集成电路(I2C)的接口。可将各种类型的外围设备和设备经由I/O桥接部750耦接到设备700。
示例性计算机可读介质
本公开已经在上文中详细描述了各种示例性电路。意图在于本公开不仅涵盖包括此类电路系统的实施方案,而且还涵盖包括指定此类电路系统的设计信息的计算机可读存储介质。因此,本公开旨在支持不仅涵盖包括所公开电路系统的装置、而且还涵盖以被配置为生成包括所公开电路系统的硬件(例如集成电路)的制造系统识别的格式指定电路系统的存储介质的权利要求。对此类存储介质的权利要求旨在涵盖例如生成电路设计但本身不制造该设计的实体。
图7是示出根据一些实施方案的存储电路设计信息的示例性非暂态计算机可读存储介质的框图。在例示的实施方案中,半导体制造系统720被配置为处理存储在非暂态计算机可读介质710上的设计信息715并且基于所述设计信息715制造集成电路730。
非暂态计算机可读存储介质710可包括各种适当类型的存储器设备或存储设备中的任一个。非暂态计算机可读存储介质710可以是安装介质,例如CD-ROM、软盘或磁带设备;计算机系统存储器或随机存取存储器诸如DRAM、DDR RAM、SRAM、EDO RAM、Rambus RAM等;非易失性存储器诸如闪存、磁介质,例如,硬盘驱动器或光学存储装置;寄存器,或其他类似类型的存储器元件等。非暂态计算机可读存储介质710还可以包括其他类型的非暂态存储器或它们的组合。非暂态计算机可读存储介质710可以包括可驻留在不同位置例如通过网络连接的不同计算机系统中的两个或更多个存储器介质。
设计信息715可利用各种适当的计算机语言中的任何语言来指定,包括硬件描述语言诸如但不限于:VHDL、Verilog、SystemC、SystemVerilog、RHDL、M、MyHDL等。设计信息715可以能被半导体制造系统720用来制造集成电路730的至少一部分。设计信息715的格式可被至少一个半导体制造系统720识别。在一些实施方案中,设计信息715还可包括指定集成电路730的综合和/或布局的一个或多个单元库。在一些实施方案中,设计信息整体或部分地以指定单元库元素及其连接性的网表的形式来指定。单独获取的设计信息715可包括或可不包括用于制造对应集成电路的足够信息。例如,设计信息715可指定要制造的电路元件,但不指定它们的物理布局。在这种情况下,设计信息715可能需要与布局信息组合以实际制造指定的电路。
在各种实施方案中,集成电路730可以包括一个或多个定制宏单元,诸如存储器、模拟或混合信号电路等。在这种情况下,设计信息715可包括与所包括的宏单元相关的信息。此类信息可以包括但不限于电路图捕获数据库、掩模设计数据、行为模型以及设备或晶体管级网表。如本文所用,掩模设计数据可以根据图形数据系统(GDSII)或任何其他合适的格式来格式化。
半导体制造系统720可包括被配置为制造集成电路的各种适当元件中的任何元件。这可包括例如用于(例如,在可包括掩模的晶片上)沉积半导体材料、移除材料、改变所沉积材料的形状、(例如,通过掺杂材料或使用紫外线处理来修改介电常数)对材料进行改性等的元件。半导体制造系统720还可被配置为针对正确操作执行所制造电路的各种测试。
在各种实施方案中,集成电路730被配置为根据由设计信息715指定的电路设计来操作,这可包括执行本文所述的功能中的任何功能。例如,集成电路730可包括图1B、图3或图7中所示的各种元件中的任何元件。另外,集成电路730可被配置为执行本文结合其他部件所述的各种功能。另外,本文所述的功能性可由多个连接的集成电路来执行。
如本文所用,形式为“指定被配置为…的电路的设计的设计信息”的短语并不暗示为了满足该要素就必须制造所涉及的电路。相反,该短语表明设计信息描述了一种电路,该电路在被制造时将被配置为执行所指示的动作或者将包括所指定的部件。
尽管上文已经描述了具体实施方案,但这些实施方案并非要限制本公开的范围,即使仅相对于特定特征描述单个实施方案的情况下也是如此。本公开中提供的特征示例意在进行例示,而非限制,除非做出不同表述。上述说明书意在涵盖此类替代形式、修改形式和等价形式,这对知晓本公开有效效果的本领域技术人员将是显而易见的。
本公开的范围包括本文(明确或暗示)公开的任意特征或特征的组合或其任意概括,而无论其是否减轻本文解决的任何或所有问题。因此,在本专利申请(或要求享有其优先权的专利申请)进行期间可针对特征的任何此类组合作出新的权利要求。具体地,参考所附权利要求书,可将从属权利要求的特征与独立权利要求的特征进行组合,并可通过任何适当的方式而不是仅通过所附权利要求书中所列举的特定组合来组合来自相应独立权利要求的特征。

Claims (20)

1.一种装置,包括:
流水线电路,所述流水线电路被配置为执行包括在线程组内的一组单指令多数据(SIMD)线程中的线程中的图形指令;
上下文切换电路,所述上下文切换电路被配置为原子地:
使用一个或多个上下文切换寄存器针对所述SIMD组保存程序计数器和指示所述SIMD组中的线程是否活动的信息;
针对所述SIMD组将所有线程设置为活动状态;并且
针对所述SIMD组分支到处理程序代码;
其中所述流水线电路被配置为执行所述处理程序代码以保存所述SIMD组的上下文信息,并且随后执行另一线程组的线程。
2.根据权利要求1所述的装置,其中所述上下文切换电路被配置为响应于上下文切换指令而原子地执行所述保存、设置和分支操作。
3.根据权利要求2所述的装置,其中所述装置被配置为响应于上下文切换请求而将所述上下文切换指令插入到所述SIMD组中。
4.根据权利要求1所述的装置,其中所述处理程序代码被配置为:
在存储器中存储来自一个或多个通用寄存器的第一数据;
将第二数据从所述一个或多个上下文切换寄存器移动至所述一个或多个通用寄存器中;
将所述第二数据从所述一个或多个通用寄存器移动至存储器。
5.根据权利要求1所述的装置,其中所述处理程序代码被配置为将所述SIMD组的所述上下文信息保存在为所述线程组保留的专用存储器区域中。
6.根据权利要求5所述的装置,其中所述处理程序被配置为请求指向所述专用存储器区域的指针,并且将所述指针发送至被配置为调度线程组的调度器电路。
7.根据权利要求1所述的装置,其中分支指令位于所述SIMD组的代码中的已知位置处,并且指示所述处理程序代码的位置。
8.根据权利要求1所述的装置,其中指示所述SIMD组中的线程是否活动的所述信息包括以下各项中的一者或多者:有效性信息或谓词信息。
9.根据权利要求1所述的装置,其中所述上下文切换电路被进一步配置为响应于所述SIMD组的重新启动,针对所述SIMD组将所有线程设置为活动状态,并且跳转到用于所述SIMD组的恢复处理程序。
10.根据权利要求1所述的装置,其中所述上下文切换电路被进一步配置为原子地:
针对所述SIMD组,从所述一个或多个上下文切换寄存器读取所述程序计数器和指示所述SIMD组中的线程是否活动的所述信息;
基于所读取的信息来更新所述SIMD组的所述状态;并且
分支到所述程序计数器地址以恢复所述SIMD组的执行。
11.根据权利要求1所述的装置,其中所述装置被配置为响应于上下文切换请求,停止提取用于所述SIMD组的指令并且等待为所述SIMD组发出的指令完成。
12.一种方法,包括:
由流水线电路执行包括在线程组内的一组单指令多数据(SIMD)线程中的线程中的图形指令;
由上下文切换电路原子地执行以下操作:
使用一个或多个上下文切换寄存器针对所述SIMD组保存程序计数器和指示所述SIMD组中的线程是否活动的信息;
针对所述SIMD组将所有线程设置为活动状态;并且
针对所述SIMD组分支到处理程序代码;并且
执行所述处理程序代码以保存所述SIMD组的上下文信息,并且随后执行另一线程组的线程。
13.一种其上存储有设计信息的非暂态计算机可读存储介质,所述设计信息以半导体制造系统识别的格式指定硬件集成电路的至少一部分的设计,所述半导体制造系统被配置为使用所述设计信息来根据所述设计生产所述电路,其中所述设计信息指定所述电路包括:
流水线电路,所述流水线电路被配置为执行包括在线程组内的一组单指令多数据(SIMD)线程中的线程中的图形指令;
上下文切换电路,所述上下文切换电路被配置为原子地:
使用一个或多个上下文切换寄存器针对所述SIMD组保存程序计数器和指示所述SIMD组中的线程是否活动的信息;
针对所述SIMD组将所有线程设置为活动状态;并且
针对所述SIMD组分支到处理程序代码;
其中所述流水线电路被配置为执行所述处理程序代码以保存所述SIMD组的上下文信息,并且随后执行另一线程组的线程。
14.根据权利要求13所述的非暂态计算机可读存储介质,其中所述上下文切换电路被配置为响应于上下文切换指令而原子地执行所述保存、设置和分支操作。
15.根据权利要求13所述的非暂态计算机可读存储介质,其中所述处理程序代码被配置为:
在存储器中存储来自一个或多个通用寄存器的第一数据;
将第二数据从所述一个或多个上下文切换寄存器移动至所述一个或多个通用寄存器中;
将所述第二数据从所述一个或多个通用寄存器移动至存储器。
16.根据权利要求13所述的非暂态计算机可读存储介质,其中所述处理程序代码被配置为将所述SIMD组的所述上下文信息保存在为所述线程组保留的专用存储器区域中。
17.根据权利要求13所述的非暂态计算机可读存储介质,其中指示所述SIMD组中的线程是否活动的所述信息包括以下各项中的一者或多者:有效性信息或谓词信息。
18.根据权利要求13所述的非暂态计算机可读存储介质,其中所述上下文切换电路被进一步配置为响应于所述SIMD组的重新启动,针对所述SIMD组将所有线程设置为活动状态,并且跳转到用于所述SIMD组的恢复处理程序。
19.根据权利要求13所述的非暂态计算机可读存储介质,其中所述上下文切换电路被进一步配置为原子地:
针对所述SIMD组,从所述一个或多个上下文切换寄存器读取所述程序计数器和指示所述SIMD组中的线程是否活动的所述信息;
基于所读取的信息来更新所述SIMD组的所述状态;并且
分支到所述程序计数器地址以恢复所述SIMD组的执行。
20.根据权利要求13所述的非暂态计算机可读存储介质,其中所述电路被配置为响应于上下文切换请求,停止提取所述SIMD组的指令,并且等待为所述SIMD组发出的指令完成。
CN202180010385.8A 2020-01-22 2021-01-19 Simd处理器中的指令级上下文切换 Pending CN115004154A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/749,618 2020-01-22
US16/749,618 US11360780B2 (en) 2020-01-22 2020-01-22 Instruction-level context switch in SIMD processor
PCT/US2021/013989 WO2021150517A1 (en) 2020-01-22 2021-01-19 Instruction-level context switch in simd processor

Publications (1)

Publication Number Publication Date
CN115004154A true CN115004154A (zh) 2022-09-02

Family

ID=74572882

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180010385.8A Pending CN115004154A (zh) 2020-01-22 2021-01-19 Simd处理器中的指令级上下文切换

Country Status (6)

Country Link
US (1) US11360780B2 (zh)
KR (1) KR102455417B1 (zh)
CN (1) CN115004154A (zh)
DE (1) DE112021000673T5 (zh)
GB (1) GB2606315B (zh)
WO (1) WO2021150517A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11874742B2 (en) * 2021-04-22 2024-01-16 Nvidia Corporation Techniques for recovering from errors when executing software applications on parallel processors

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103221918A (zh) * 2010-11-18 2013-07-24 德克萨斯仪器股份有限公司 上下文切换方法和装置
US20130187935A1 (en) * 2012-01-24 2013-07-25 Daniel Elliot Wexler Low latency concurrent computation
US20150363903A1 (en) * 2014-06-13 2015-12-17 Advanced Micro Devices, Inc. Wavefront Resource Virtualization
US20170221173A1 (en) * 2016-01-28 2017-08-03 Qualcomm Incorporated Adaptive context switching
US20200004959A1 (en) * 2018-06-28 2020-01-02 Robert S. Chappell Microarchitectural mechanisms for the prevention of side-channel attacks

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8225325B2 (en) * 2008-06-06 2012-07-17 Apple Inc. Multi-dimensional thread grouping for multiple processors
US9652282B2 (en) 2011-11-08 2017-05-16 Nvidia Corporation Software-assisted instruction level execution preemption
US20130124838A1 (en) 2011-11-10 2013-05-16 Lacky V. Shah Instruction level execution preemption
US20130135327A1 (en) 2011-11-29 2013-05-30 Advanced Micro Devices, Inc. Saving and Restoring Non-Shader State Using a Command Processor
US9354892B2 (en) 2012-11-29 2016-05-31 Advanced Micro Devices, Inc. Creating SIMD efficient code by transferring register state through common memory
US20140157287A1 (en) 2012-11-30 2014-06-05 Advanced Micro Devices, Inc Optimized Context Switching for Long-Running Processes
JP6427972B2 (ja) 2014-06-12 2018-11-28 セイコーエプソン株式会社 ロボット、ロボットシステム及び制御装置
US10282227B2 (en) 2014-11-18 2019-05-07 Intel Corporation Efficient preemption for graphics processors
US10282812B2 (en) 2017-04-09 2019-05-07 Intel Corporation Page faulting and selective preemption

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103221918A (zh) * 2010-11-18 2013-07-24 德克萨斯仪器股份有限公司 上下文切换方法和装置
US20130187935A1 (en) * 2012-01-24 2013-07-25 Daniel Elliot Wexler Low latency concurrent computation
US20150363903A1 (en) * 2014-06-13 2015-12-17 Advanced Micro Devices, Inc. Wavefront Resource Virtualization
US20170221173A1 (en) * 2016-01-28 2017-08-03 Qualcomm Incorporated Adaptive context switching
US20200004959A1 (en) * 2018-06-28 2020-01-02 Robert S. Chappell Microarchitectural mechanisms for the prevention of side-channel attacks

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
TANASIC: "Enabling Preemptive multiprogramming on GPUs", 《ACM SIGARCH COMPUTER ARCHITECTURE NEWS》 *

Also Published As

Publication number Publication date
US11360780B2 (en) 2022-06-14
GB202210558D0 (en) 2022-08-31
KR20220108194A (ko) 2022-08-02
KR102455417B1 (ko) 2022-10-14
GB2606315B (en) 2023-06-21
DE112021000673T5 (de) 2022-10-27
WO2021150517A1 (en) 2021-07-29
US20210224072A1 (en) 2021-07-22
GB2606315A (en) 2022-11-02

Similar Documents

Publication Publication Date Title
JP5583180B2 (ja) 仮想gpu
US10324726B1 (en) Providing instruction characteristics to graphics scheduling circuitry based on decoded instructions
US11430174B2 (en) Memory consistency in memory hierarchy with relaxed ordering
US20230385201A1 (en) Private Memory Management using Utility Thread
CN109964244B (zh) 用于图形处理的本地图像块
US10223822B2 (en) Mid-render compute for graphics processing
US10699366B1 (en) Techniques for ALU sharing between threads
TWI546736B (zh) 多執行緒圖形處理單元管線
KR102455417B1 (ko) Simd 프로세서에서의 명령어 레벨 콘텍스트 스위치
US11422822B2 (en) Multi-channel data path circuitry
CN117501254A (zh) 使用近存储器计算为复杂操作提供原子性
US10114650B2 (en) Pessimistic dependency handling based on storage regions
US20190244323A1 (en) Pipelining and Concurrency Techniques for Groups of Graphics Processing Work
US10846131B1 (en) Distributing compute work using distributed parser circuitry
US10324844B2 (en) Memory consistency in graphics memory hierarchy with relaxed ordering
US11954492B1 (en) Fence enforcement techniques based on stall characteristics
US20240095065A1 (en) Multi-stage Thread Scheduling
US20240095176A1 (en) Preemption Techniques for Memory-Backed Registers
US20240095031A1 (en) Thread Channel Deactivation based on Instruction Cache Misses
US11947462B1 (en) Cache footprint management
US20230048951A1 (en) Kickslot Manager Circuitry for Graphics Processors
US20230051906A1 (en) Software Control Techniques for Graphics Hardware that Supports Logical Slots
US20230047481A1 (en) Affinity-based Graphics Scheduling

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination