CN114327809A - 构建和调度用于并行处理的任务 - Google Patents

构建和调度用于并行处理的任务 Download PDF

Info

Publication number
CN114327809A
CN114327809A CN202111135381.0A CN202111135381A CN114327809A CN 114327809 A CN114327809 A CN 114327809A CN 202111135381 A CN202111135381 A CN 202111135381A CN 114327809 A CN114327809 A CN 114327809A
Authority
CN
China
Prior art keywords
task
linked list
new
ray
tasks
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
CN202111135381.0A
Other languages
English (en)
Inventor
A·古迪
P·韦伦扎斯
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.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies Ltd
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 Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of CN114327809A publication Critical patent/CN114327809A/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/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
    • 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/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Multimedia (AREA)
  • Image Generation (AREA)

Abstract

本发明公开了构建和调度用于并行处理的任务。一种逻辑包括:用于构建包括数据项的任务的任务构建器、用于调度任务以由并行处理器处理的任务调度器、被布置成将每个数据项的内容映射到项目ID的数据储存库,以及包括每个项目ID的条目的链表RAM。对于每个新数据项,任务构建器通过启动新链表或将数据项添加到现有链表来创建新任务。在每个链表中,每个数据项的条目记录指向列表中的下一项目ID的指针。任务构建器指示任务中的任一个何时准备好进行调度。任务调度器基于来自任务构建器的指示,识别准备就绪的任务,并且作为响应,遵循相应链表中的指针,以便调度任务的数据项以进行处理。

Description

构建和调度用于并行处理的任务
技术领域
本发明涉及构建和调度用于并行处理的任务。
背景技术
处理器是用于执行机器代码指令的装置。给定处理器被配置成识别指令类型的特定预定义集合,称为处理器的指令集。每个指令类型由相应的操作码和零或更多操作数字段定义。处理器被配置成从存储器获取指令以用于执行。处理器可以包括许多不同种类的子单元,以用于根据正在执行的指令的类型,执行不同类别的操作。例如,处理器可以包括用于响应于算术指令类型而执行整数算术运算的整数算术逻辑单元,用于响应于浮点指令类型而执行浮点运算的浮点算术逻辑单元,以及用于响应于加载和存储指令类型而执行存储器访问操作的加载存储单元。
例如,在精简指令集计算机(RISC)中,加载指令需要至少两个操作数:源存储器地址和在处理器的寄存器文件中指定目的地寄存器的标识符。执行时,加载指令会作用于加载存储单元,以将来自源地址的值加载到目的地寄存器中。取决于指令的类型,逻辑指令可以获取不同数目的操作数。例如,诸如加或乘指令等的逻辑指令可以采用三个操作数:两个在寄存器文件中指定两个相应的源寄存器,一个在寄存器文件中指定目的地寄存器。当执行时,逻辑指令作用于相关逻辑单元,例如整数或浮点算术逻辑单元,以便对指定源寄存器中的值执行相关逻辑操作,并将结果置于指定目的地寄存器中。要执行的操作以及触发哪个逻辑单元以执行此操作将取决于相关指令的操作码。将逻辑操作的结果存储回存储器涉及存储指令。存储指令需要至少两个操作数:一个指定寄存器文件中的源寄存器,一个指定存储器中的目的地地址。当执行时,存储指令作用于加载-存储单元以将指定源寄存器中的值存储到目的地存储器地址。
可以针对特定应用定制诸如图形处理单元(GPU)的专用处理器的一种方式是将一种或多种专用指令类型包括在处理器的指令集中。此类指令类型将执行比响应相关类型的单个机器代码指令的单个实例而触发的简单加载、存储、加或乘等更复杂的操作。例如,这可以是特定的数学运算,例如在相关应用中经常出现的乘法累加(MAC)。相同的操作可以通过通用加和乘指令等的组合来构建,但是与使用更专业化指令集的指令相比,这会降低代码密度。
在某些种类的处理器,例如矢量处理器、SIMD(单指令多数据)或SIMT(单指令多线程)处理器中,处理器包括多个并行处理通道(例如,SIMD通路)。所述并行处理通道中的每一个可以包括相同种类的逻辑单元中的至少一个的相应实例。例如,每个通道可以包括相应的算术逻辑单元(ALU),例如整数算术逻辑单元或浮点算术逻辑单元。响应于在单个提取操作中提取的相同指令的相同实例的执行,触发不同并行通道中的一些或所有逻辑单元以对不同数据执行相同操作,例如对指定为操作源的矢量寄存器中的矢量的不同元素执行相同操作。例如,每个ALU可操作以执行乘法累加(MAC),也称为乘加。这需要两个乘法输入(有时称为乘数和被乘数)和加数输入(也称为累加数),并且将加数添加到两个乘法输入的乘积。MAC可以实施为融合的乘法加法,由此在一个融合步骤中执行乘法累加。每个并行逻辑单元的MAC的结果可以放置在目的地矢量寄存器的相应元件中。
为了利用并行处理资源,可能希望将待处理的数据一起分组到任务中,其中给定任务的数据可以由相同程序并行处理,并且不同任务要由不同程序处理。
示例出现于光线跟踪中。光线跟踪是指通过跟踪光通过建模环境的路径并模拟其与沿途物体相遇的效果来生成图像的图形处理技术。建模光线从建模光源被跟踪到建模视点(前向光线跟踪),或反之从建模视点向后被跟踪到建模光源(即,反向光线跟踪,其通常更有效率,因为前向光线跟踪通常导致处理轨迹最终从未命中视点的光线)。可以通过光线的起点的坐标、指定光线方向的矢量、沿着该矢量的光线的最大和最小范围以及任选地光线颜色来描述光线。在反向光线跟踪的情况下,光线跟踪始于从图像中的每个像素将光线投射到建模环境中。光线可以在建模环境中与之相互作用的对象被分成几何图元,例如三角形小面。对于每个光线,光线跟踪包括寻找与光线相互作用的最接近的几何图元(如果有的话)。在一些图形处理器中,这种搜索在固定功能硬件中执行。当入射光线相交时,它接着可终止、反射或折射。反射或折射引入相对于入射光线具有新方向的一个或多个二次光线,所述入射光线被终止(即,反射或折射光线被建模为新光线)。二次光线也可以相对于入射光线积累新值(颜色)。
确定光线与几何图元相互作用的效果通常在软件中分析地解决。进行此操作的程序被称为着色器程序。通常存在运行以处理不同交互场景的不同着色器程序。
例如,不同着色器程序可以包括:错过着色器程序、最近命中着色器程序、任何命中着色器程序和相交着色器程序。当光线未命中任何东西时,运行错过着色器程序。当光线命中几何形状时,运行最近命中着色器程序,其中,已知将保持此命中并且需要所述程序计算光在命中点处的效果。当光线命中几何形状时,运行任何命中着色器程序,但还需要该程序决定是否保持该命中。如果保持该命中,则随后将运行最近命中着色器程序。当光线命中其中具有用户定义的几何形状的框时,运行相交着色器程序,并且需要该程序程序性地生成或从存储器加载该几何形状,检查这些几何形状中哪一个被光线命中,然后决定是否保持该命中。如果保持该命中,则随后将运行最近命中程序。以上是从光线跟踪API标准导出的分类。在一种实施方式中,任何命中着色器和相交着色器可以一起分组到遍历着色器中。
一般来说,为支持光线跟踪而进行的操作是:光线生成(产生光线)、光线相交(针对图元或包含图元的框测试光线)、光线遍历(搜索上述框的树或其它此类场景加速结构,以及沿着树的行走路线调度相交)。
为了利用诸如SIMD处理器中的并行SIMD通路的并行处理资源的可用性,待处理的不同光线可以一起分组到任务中,其中给定任务可以包括将由相同着色器程序处理的多个光线,并且不同任务由不同着色器程序处理。期望将要由相同着色器程序处理的光线一起分组到任务中(其中,“光线”在此上下文中是指表示光学光线的数据)。此过程被称为相干性聚集。着色器程序的执行可以通过光线的相交或其它事物调用。还应注意,这不一定仅仅是由着色器程序处理的光线,而在实施例中,也包括与光线相关联的其他因素。
有时这可以包括对待由相同着色器程序和相同几何图元处理的光线进行分组。例如,在不同光线命中加速结构的相同框或节点的情况下,着色器将需要针对该框或树节点的所有子女为所有光线调度相交测试(但是,在其他实施方式中,这可以在固定功能硬件中进行)。
将光线一起分组到任务中的处理器模块可以被称为任务构建器。承担由任务构建器构建的任务并调度这些任务以进行处理的模块可以被称为任务调度器。在一些处理器中,这些可以在固定功能硬件中实施。
在将光线分组到任务中时,要进行折衷。一方面,希望将光线一起分组为可由并行处理器并行处理的最大数目。例如,如果SIMD处理单元具有512个并行SIMD通路,则期望将512条光线一起分组以便彼此并行处理。另一方面,还期望使处理器保持忙于工作,因此如果无法足够快速地组装全尺寸组以使处理器保持繁忙,则可能期望调度较小组来执行。大型任务的另一缺点是其数据(例如,光线)往往更发散。这是由于分支发散的原因,其中,不同的数据实例遵循通过代码的不同执行路径。简而言之,如果至少一个实例遵循分支,则所有实例都必须通过该分支。被强制的实例(通过分支执行的实例,它们本来不通过分支执行)执行分支的指令,但这些指令对其状态没有影响。相干性聚集机构还要考虑硅占用。
发明内容
另一潜在停滞源在任务构建器(生产者)与任务调度器(消费者)之间的接口中。在现有技术的已知机制中,由任务构建器构建的任务在先进先出(FIFO)缓冲区中排队,等待任务调度器进行调度。然而,如果任务构建器生产任务的速度比任务调度器消费任务的速度更快,则FIFO可能变满并且因此使任务构建器停滞。这甚至可能导致管道进一步停顿。包括足够的缓冲容量来避免这种情况在硅占用方面将非常昂贵。因此,期望在任务构建器与任务调度器之间提供替代接口。
根据本文公开的一个方面,提供了一种逻辑,其包括:用于构建多个任务的任务构建器,每个任务包括待由相应程序处理的相应组的数据项;用于调度待由在并行处理子系统上运行的相应程序处理的每个任务的任务调度器,由此对于每个任务,并行处理相应组的数据项中的至少一些;数据储存库,所述数据储存库被布置成至少临时保存映射到相应项目ID的数据项中的每一个的相应数据内容;以及链表RAM,所述链表RAM包括每个项目ID的相应条目。任务构建器被配置成通过以下方式构建任务:当新数据项接收到数据储存库中时,确定是否存在针对新数据项的现有任务,并且a)如果不存在,则通过在包括新数据项的链表RAM中启动新的相应链表来创建新任务,但是b)如果存在,则将新数据项添加到链表RAM中的现有的相应链表,其中在每个链表中,在列表中的从头部数据项到尾部数据项之前的至少最后数据项的每个数据项的条目都记录指向链表中的下一项目ID的指针。任务构建器还被配置成指示任务中的任一个何时准备好进行调度;并且任务调度器被布置成基于来自任务构建器的指示,识别准备好进行调度的任务,并且作为响应,遵循相应链表中的指针,以便调度相应任务的数据项以便由并行处理子系统进行处理。
通过使用链表,这在任务构建器(生产者)与任务调度器(消费者)之间提供了解耦(disjoint),使得任务调度器能够独立于任务构建器运行,从而缓解了在此接口处停滞的问题。因为链表RAM具有专用于光线储存库中的每个可能光线的单独的相应条目,则仅利用相对较少量的硅,这使得能够容纳将光线分组到任务中的任何可能组合,而任务构建器与任务调度器之间没有停滞的可能性。例如,在光线跟踪应用中,系统中的所有光线在理论上都可以完成遍历并在链表中拼接,而无需调度器消耗任何该数据,直到其准备好这样做。
为完整起见,请注意,不排除除所述多个任务之外的一些其它任务可以仅由单个数据项组成。在这种情况下,链表RAM中的头部数据项和尾部数据项是相同的。
在实施例中,任务构建器可以被配置成通过在链表RAM中断言相应标志以标记任务中的任一个何时准备好进行调度来执行所述指示;并且任务调度器可以被布置成通过监测链表RAM以发现断言标志来执行所述识别,并且在相应标志被断言时检测到任务中的一个已准备就绪。
在实施例中,任务构建器可以包括被布置成存储正在构建的任务的一个或多个指示的临时存储装置,任务构建器可以被进一步配置成基于一个或多个预定标准从临时存储装置移除所选任务的指示,并且指示所选任务准备好进行调度。
在实施例中,临时存储装置可以包括高速缓存,该高速缓存包括多个区格(bin),每个区格可操作以通过临时记录任务的指示来高速缓存任务中的一个,其中当创建新任务时,新任务被高速缓存在一个区格中,其中预定标准可以包括驱逐策略,并且高速缓存可以被配置成根据驱逐策略从区格中驱逐任务,并且其中任务构建器可以被配置成在所选任务从高速缓存被驱逐时指示所选任务准备好进行调度。
在任何实施例中,逻辑可以包含在集成电路上的硬件中。可以提供一种在集成电路制造系统处制造包括所述逻辑的处理器的方法。可以提供一种集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统中被处理时配置所述系统以制造该逻辑或处理器。可以提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有逻辑或处理器的计算机可读描述,该计算机可读描述当在集成电路制造系统中被处理时使集成电路制造系统制造包含该逻辑或处理器的集成电路。
可以提供一种集成电路制造系统,包括:非暂态计算机可读存储介质,其上存储有逻辑或处理器的计算机可读描述;布局处理系统,其被配置成处理所述计算机可读描述,以便生成包含所述逻辑或处理器的集成电路的电路布局描述;以及集成电路生成系统,其被配置成根据所述电路布局描述制造所述逻辑或处理器。
可以提供一种用于执行本文中描述的任一方法的计算机程序代码。可以提供非暂态计算机可读存储介质,在其上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使计算机系统执行本文中描述的任何方法。
如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
提供此发明内容仅仅是为了说明本文公开的一些概念及其可能的实施方式。发明内容部分所述的并非全部内容都是为了限制本公开的范围。相反,本公开的范围仅受权利要求的限制。
附图说明
现在将参考附图详细描述示例,在附图中:
图1是根据本公开的实施例的处理器的示意性框图;
图2是根据本公开的实施例的图形处理器的示意性框图;
图3是根据本公开的实施例的由任务构建器执行的方法的流程图,
图4是根据本公开的实施例的由任务调度器执行的方法的流程图;
图5a至图5c示意性地示出了根据本公开的实施例的光线储存库、链表RAM和任务高速缓存的示例性字段;
图6示意性地示出了根据本文公开的实施例的任务高速缓存的其它示例性字段;
图7a至图7b示意性地示出了正在构建并接着关闭的链表;
图8是图形处理系统在其中实施的计算机系统的示意性框图;以及
图9是用于生成包含图形处理系统的集成电路的集成电路制造系统的示意性框图。
附图示出了各种示例。技术人员将理解,附图中所示的元素边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施例,并且对所公开的实施例的各种修改对于所属领域的技术人员而言将是显而易见的。
现在仅通过示例的方式来描述实施例。
通常,高速缓存用于收集命中相同表面或使用相同着色器且要为其调度相同着色器的不同表面的光线之间的相干性。例如,有时相同材料的物体具有相同着色器或着色器集合。当高速缓存行因冲突或其他原因被驱逐时,生成工作以进行调度。如果调度器无法处理该工作,则高速缓存将停滞,并且无法处理任何传入的查找命令。例如,停滞可以向上游传播,从而影响负责遍历加速结构的其它逻辑单元。
先前的解决方案试图通过安装大量的缓冲来应对停滞的问题,以最小化这种情况发生的可能性。
本文公开的实施例使用高速缓存来收集要为其调度相同着色器的光线之间的相干性。高速缓存使用局部光线阵列构建光线链表。命中将光线添加到与特定着色器相关联的链表。在高速缓存行被驱逐后,其链表终止,并且在光线阵列中标记进入其的进入点光线。在搜索被标记为已完成链表的进入点的光线时,调度器同时且独立地扫描通过光线阵列。沿所选链表行走以便读出其光线并对其进行调度。当完全沿链表行走时,进入点光线标志被清除以表明该链表已被拆除。在一些特定实施例中,光线在其已被调度之后只能返回相干性收集器,并且进入相干性收集的光线边带不通过光线阵列传播并且需要由调度器再次获得。在实践中,调度器可以读取任务中仅其中一个光线的边带信息,因为该信息在任务的所有光线中是相同的,并且因此是特定于任务的。
图1是根据本公开的实施例的处理器101的示意性框图。处理器101包括并行处理子系统102、存储器104和相干性收集逻辑105。
存储器104可以包括一个或多个存储器单元,例如,单独的程序存储器和数据存储器。在实施例中,存储器104在处理器101内部(同一芯片,即同一裸片)。然而,存储器104中的一些或全部可以替代地在处理器101外部(或片外但在同一IC封装中,或在IC封装外部)。存储器104可以采用一种或多种存储器介质,例如电子介质,如EPROM、EEPROM、闪存存储器或静态或动态RAM等;或一种或多种磁性介质,例如磁盘或磁带;或光学介质,例如光盘。
并行处理子系统102包括一个或多个组成处理单元,每个组成处理单元包括多个并行处理通道,例如SIMD通路。例如,在一些实施例中,并行处理子系统102可以包括两个SIMD处理单元,每个SIMD处理单元包括多个SIMD通路,例如每个SIMD单元128个通路。在实施例中,一个或多个处理单元也可以是多线程的,即能够通过每个通路使多个并发线程在时间上交织的筒式线程单元。例如,在一些实施例中,每个SIMD单元能够通过128个SIMD通路中的每个SIMD通路使最多48个线程交织。可以根据并行处理子系统102描述本文的实施例,所述并行处理子系统是包括一个或多个SIMD单元的SIMD子系统。然而,更一般地,在下文的任何实施例中,SIMD单元可以被任何形式的并行处理器单元(例如,矢量处理单元或SIMT单元)替代。出于这些目的,“并行处理”是指数据级别的并行性,即给定处理单元的不同并行通道(例如,通路)对不同数据项(其也可以称为数据“实例”)执行在同一指令获取中从存储器104获取指令的能力。
相干性收集逻辑105耦合到并行处理子系统102,并且被配置成将要由同一程序处理(即操作)的不同数据实例(即不同数据项)收集在一起,使得它们可以作为批次被调度以便通过并行处理子系统102的不同并行通路被并行处理。即,数据实例被一起收集到批次中,其中给定批次的实例将由并行处理子系统102上运行的同一程序处理,并且至少一些不同任务将由不同相应程序处理。数据实例批次在本文中可以被称为“任务”,其中将由相应程序对相应任务执行工作。相干性收集逻辑105包括:任务构建器106、任务调度器108、数据储存库110(例如,光线储存库)和链表RAM 112。在实施例中,处理器102是GPU,并且每个数据实例可以表示光线跟踪应用程序的相应光线。在这种情况下,处理给定任务(光线批次)的程序可以被称为着色器程序,数据储存库110可以被称为光线储存库。
作为说明,将根据此类示例描述以下实施例,但在任何实施例中,更一般地,GPU102可以是具有并行处理能力的任何类型的处理器,并且光线可以被待被一起收集到批次中以由任何类型的程序进行并行处理的任何数据实例(即,任何数据项)替代。另一示例是在光栅化中由具有相同像素着色器的一个或多个相同图元覆盖的像素。
链表RAM可操作地耦合到任务构建器106和任务调度器108两者。光线储存库110可操作地耦合到任务构建器106和并行处理子系统102,并且还可以可操作地耦合到任务调度器108。
图5a中示出了光线储存库110的示例。光线储存库110包括多个光线储存库条目502,每个条目包括映射到相应光线描述字段506的光线ID(或更一般地,项目ID或实例ID)504,该光线描述字段用于保存相应光线的光线描述(或更一般地,相应数据项的数据,或“实例”)。光线ID 504是光线储存库110的地址,因此光线储存库110可通过光线ID寻址。出于说明性目的,光线ID被示意性地表示为图5a中的列,但应了解,光线ID不是存储在条目512本身中的存储值,而是由光线储存库110的寻址电路中的门的可选组合组成,所述门在被选择时映射到存储在条目512的字段(例如506)中的值。作为说明,在一种实施方式中,光线储存库中可以有大约8192(=2^13)个地址。在任何给定时间,一些地址的条目可能被光线描述占据,而一些则不能。每个光线描述506包括关于相应光线的信息,例如其起点的坐标、描述其方向的矢量、其最大和/或最小范围,和/或光线在建模环境中迄今为止已与之相交的最近几何图元的指示。
在操作中,待处理的新光线被接收到光线储存库110中(在此上下文中,“光线”是指表示光线的数据实例或项)。在实施例中,直接或间接地从在主机处理器上运行的应用程序(图1中未示出)接收这些新光线。例如,它们可以从在主机处理器控制下(例如,经由命令引擎206,参见下文)操作的并行处理子系统102上运行的软件接收。替代地,不排除光线可能由并行处理子系统102自主地生成,或可能从处理器101内部或外部的另一处理模块接收。任务构建器106被布置成检测到达光线储存库110的新光线,并将其分组到任务(即批次)中,所述任务以链表形式记录在链表RAM 112中,每个链表记录任务中的不同任务。链表RAM 112的示例在图5b中示出,稍后将更详细地讨论。当任务准备好进行调度时,任务构建器106在链表RAM 112中对其进行如此标记。任务调度器108检测到这一点,并且通过并行处理子系统102调度所述任务的光线以进行彼此的并行处理。
更一般地,链表RAM的功能可以分散在一个或多个存储模块之间。例如,指示任务准备就绪可以包括将信号(例如,包括任务的标识符,例如来自任务的光线ID)发送至任务调度器108,其中任务调度器在接收到此类信号时将指示任务准备就绪的标志存储在其他地方(例如,在任务调度器本地的存储装置中)。在另一示例中,并不是存储指示任务准备好进行调度的标志,而是可以例如以表的形式维持单独的就绪任务列表,所述表指示哪些任务(由对应光线ID标识)准备就绪。
图2更详细地示出了图1的处理器101的特定示例性实施方式。然而,应当理解,这仅以示例的形式给出,并且不是限制性的。在图2中,处理器101被布置为主机处理器202的加速器。除了关于图1描述的部件之外,加速器处理器101还包括命令引擎206、相交搜索块(例如,层次搜索块)212和处理接口210。这些以及任务构建器106、任务调度器108、光线储存库110和链表RAM 112中的每一个都在固定功能硬件208中实现。任务调度器108、光线储存库110和相交搜索块212经由处理接口210可操作地耦合到并行处理子系统102。处理器101经由光线命令引擎206可操作地耦合到主机处理器202。
在操作中,在并行处理子系统102上运行的软件将初始化新光线,然后发起相交搜索块212以处理光线。在实施例中,搜索的结构是分层的,例如建模空间中的框的层级结构(框参考框,框再参考框,等等)。相交检测(即,分析性地确定两个对象(例如光线相对于框)的相交)是在搜索/遍历层次结构时重复执行的活动。更一般地,相交搜索可以使用例如任何加速结构搜索或几何数据库搜索。
相交搜索块212的输出是需要调度新着色器的光线。任务构建器106将需要运行相同着色器的光线分组到任务中。
例如,任务调度器108经由光线命令引擎206从主机处理器202获取输入,然后在处理子系统102上运行不同的着色器程序。该输入指定待由处理器101处理的一个或多个新光线。然后,在处理子系统102上运行的该着色器程序通过接口210将新光线写入光线储存库110。然后,着色器程序(在固定功能硬件中)发起待由相交搜索块212执行的搜索,以确定哪一个是与光线相交的最近几何图元(例如,三角形小面)。在特定实施例中,此搜索可以包括分层搜索迭代,其包括针对“加速结构”的一系列测试,以沿着光线查找最近几何交点。在搜索结束时,搜索块212将关于最近相交的信息存储在光线储存库110中的相关光线的光线描述中,并且还向任务构建器106发送信号以提醒其已完成对新光线的相交搜索(在此特定实施例中,这是任务构建器106如何检测新光线)。然后,任务构建器106确定是将新光线添加到现有任务还是开始新任务。一旦任务准备好进行调度,任务构建器106就针对链表RAM112中的相关链表设置标志。任务调度器108检测到此标志,然后任务调度器108继续调度该任务以便由处理子系统102进行处理。
下文所描述的特征可以应用于图2的处理器101或图1的更一般的情况。
任务构建器106可以被配置成使得在操作中执行如图3中所示的方法。任务调度器108可以被配置成使得在操作中执行如图4中所示的方法。
在实施例中,任务构建器106和任务调度器108在固定功能硬件,即专用电路中实施。然而,不排除任务构建器106和/或任务调度器108的一些或全部功能可以替代地在软件中实施,所述软件在处理器101的处理子系统102或主机处理器(例如202)上运行,或者在处理器101内部或外部的另一处理模块上运行。
图3示出了任务构建器106的方法。在步骤310处,任务构建器106检测到例如已经从主机处理器202接收到光线储存库110中的新光线。在实施例中,它通过从相交搜索块212接收信号来检测这种情况,该信号提醒其已完成对新光线的相交搜索,因此该光线可包括在任务中。替代地,在其它实施例中,提醒任务构建器106新光线的信号可以来自其他地方,或者任务构建器106可以被配置成通过监测光线储存库110的新占用条目来检测新光线。
无论通过什么方式检测新光线,则在步骤320处,任务构建器106都确定将新光线添加到哪个任务。这可以是现有任务或新任务。在实施例中,这种确定可以基于光线储存库110中的新光线的对应光线描述506。在一些此类实施例中,光线储存库110包括着色器ID导出逻辑501,其被配置成自动地从添加到光线储存库110的每个新光线的相应光线描述506导出着色器ID。替代地,此逻辑可以在任务构建器106本身中实施。另一选项是将每个光线的着色器ID存储在光线储存库110中的相应光线描述中。
着色器ID是用于处理光线的相应着色器程序的ID。因此,每个光线都被映射到某个着色器ID。将光线映射到着色器ID是多对一的,使得多个光线映射到相同着色器ID。例如,与相同几何图元相交的光线可以由相同着色器ID处理。所述导出也可能比这更复杂。例如,在一种实施方式中,基于以下各项对光线进行分组(例如,基于以下各项生成高速缓存标签):着色器ID、着色器类型(例如,背景技术中讨论的最近命中等),以及哪个SIMD引擎(如果存在多个的话)生成作为此光线的初始祖先的一次光线。
任务在链表RAM 112中被记录为链表。如果新光线的着色器ID与链表RAM112中的现有任务的着色器ID相同,则任务构建器106将新光线添加到该任务。然而,如果此着色器ID在链表RAM 112中尚未有任务,则任务构建器106在链表RAM中启动新任务。
图5b示出了链表RAM 112的示例性实施方式。链表RAM 112包括多个列表条目512,每个列表条目针对光线储存库110中的一个条目502,并且因此每个列表条目针对光线储存库中的一个光线ID 504(链表RAM 112具有与光线储存库110相同的深度,例如8192个条目)。每个列表条目512至少包括光线ID 504和对应的指针字段(下一光线指针)514。与光线储存库110类似,链表RAM 112可通过光线ID 504寻址。像图5a那样,出于说明性目的,光线ID被示意性地表示为图5b中的列,但应了解,光线ID不是存储在条目512本身中的存储值,而是由链表RAM112的寻址电路中的门的可选组合组成。指针字段514可操作以保存映射到相应光线ID 504的相应的下一光线指针。下一光线指针是链表RAM 112中的另一光线的ID。因此,链表RAM 112使得能够通过针对给定列表中的除最后光线之外的至少每一个,在其指针字段中针对该光线记录该列表中的下一光线的ID来创建链表。列表(尾部)中最后光线的指针字段514可以指向自身,或者可以包括空值,或者在一些实施例中可以指回列表的头部(在这种情况下,当任务准备好进行调度时,任务构建器106设定尾部的下一光线指针)。列表中的光线链从头指向尾。在实施例中,头部是最近添加的光线,并且尾部是最早添加的,但在替代实施方式中,这可以另一种方式实施。然后,可以通过遵循指针从链表RAM 112中的一个光线到下一个光线来确定链表的成员(并且因此确定由该链表表示的任务的成员)。此过程可以被称为沿列表行走。行走可以从头部开始,或者可以从尾部开始,或者在尾部指回头部时(即,循环链表实施例)从之间的任何地方开始。
链表RAM 112还包括用于将任务的链表标记为准备好进行调度的机制。在实施例中,这借助于包括在链表RAM中的每个条目512中的单独有效标志(例如,IsValid)516来实现,使得当断言此标志时,其指示包括该列表条目的链表的任务准备好进行调度。标志可以是单个位,但不排除它可以替代地由多于一个位组成。
在实施例中,链表RAM中的每个条目512还可以包括相应的进入点字段518,该进入点字段用于将该条目标记为用于沿其形成为一部分的列表行走的进入点,如稍后将更详细地讨论的(注意,此意义上,“entry(进入)”现在用于指代进入列表的点,而不是列表条目512)。例如,进入点字段可以标记哪个条目是头部(例如,IsHead标志)或者哪个条目是尾部(例如,IsTail)。然而,这不是必需的,并且在替代实施例中,进入点可以是预先确定的(例如,始终是头部)或以某种其他方式确定的。
任选地,链表RAM 112中的每个条目还可以包括映射到相应光线ID的相应优先级字段519。这些将在以后更详细地讨论。
在步骤330处,任务构建器330将新光线添加到该光线的确定任务,无论是通过在链表RAM 112中启动新光线的新链表(如果新光线将由不存在现有任务的着色器ID处理),还是通过将新光线添加到链表RAM 112中的现有任务的现有链表(如果新光线将由已经为其启动但尚未调度现有任务的着色器ID处理)。当启动新列表时,要包括在该列表中的第一个光线最初既是列表的头部又是尾部(并且有时一些任务可能在被调度之前始终仅包括一个光线)。当添加到现有列表时,则取决于实施方式,可以将新光线添加到列表的头部或尾部。在特定实施例中,它被添加到头部。
在步骤340处,任务构建器106确定任务是否准备好进行调度。在实施例中,任务构建器106包括高速缓存114,其可以被称为任务高速缓存。此处采用的高速缓存提供了一种检查新光线是否已经存在任务的快速方法,并且此外高速缓存驱逐策略为确定任务何时准备好进行调度提供了便利基础。
在图5c中示出了任务高速缓存114的示例。高速缓存114包括多个区格522(即,高速缓存条目或“高速缓存行”)。每个区格522包括映射到相应区格编号524的头部指针字段526h和尾部指针字段526t中的至少一者。这些用于记录相应任务的链表的头部指针和尾部指针。这提供了链表RAM 112中的相应链表的指示。因此,每个区格522可以高速缓存任务中的不同相应任务的指示。在实施例中,每个区格522可以包括头部指针526h和尾部指针526t两者。在实施例中,在着色器ID与高速缓存区格522之间存在多对一映射。当任务构建器106从光线储存库110中的逻辑501接收到新光线的着色器ID的指示(或在替代实施方式中,当任务构建器106中实现的着色器ID导出逻辑自身这样做时),则任务构建器106对着色器ID执行多对一变换,例如着色器ID的散列。此变换的输出指定一个或多个高速缓存区格522以高速缓存待由所述着色器ID处理的任何任务。取决于实施方式,这可以是任务的特定区格或可能区格的子集。如果要为传入光线创建新任务,并且这些一个或多个区格中的一个未被占用(尚未用于高速缓存任务),则未占用的区格被用于高速缓存新任务的指示(通过记录该任务的新链表的头部和/或尾部的指示)。另一方面,如果映射到新任务的着色器ID的所有一个或多个区格已被占用,则另一现有任务必须从这些区格中的一个区格被驱逐,以便为待高速缓存在那里的新任务腾出空间。现有的被驱逐任务基于从高速缓存中被驱逐而被宣告为准备好进行调度。
注意:在新光线被添加到列表的头部且头部指针记录在高速缓存114中的实施例中,任务构建器将需要在每次将新光线添加到现有任务时更新高速缓存114中的头部指针526h。类似地,如果新光线被添加到尾部且尾部指针记录在高速缓存114中,则任务构建器106将需要在每次将新光线添加到现有任务时更新尾部指针526t。如果仅头部指针记录在任务高速缓存114中并且新光线被添加到相应任务的尾部,或反之,则将不需要每次都更新高速缓存中的指针。然而,在一些实施例中,可能期望将头部指针和尾部都保存在高速缓存中,例如以辅助修补或缝合(参见稍后论述的任选附录)。
图6示出了任务高速缓存114的一种示例性实施方式。此处,高速缓存114被布置成组(set)和路(way)。路是先前提及的区格522,并且每个组602包括一个或多个区格的相应子集。图6中以图示方式示出了每组四条路,但应了解这并不是限制性的。当任务构建器106从光线储存逻辑501接收到着色器ID时(或者取决于实施方式,导出着色器ID本身时),则任务构建器106对着色器ID执行多对一变换(例如散列)。此散列的输出给出组602中的一个。任务构建器106还确定用于着色器ID的标签,其区分映射到相同路的不同可能着色器ID。这在每个被占用路(高速缓存区格)中被记录为附加字段。如前所述,在一些实施例中,可以根据着色器ID和诸如着色器类型的附加信息和/或多个SIMD引擎中的哪一个生成一次光线来生成标签。
对于接收到光线储存库110中的每个新光线,任务构建器106确定该光线的着色器ID的高速缓存条目是否已经存在。它基于组编号和标签进行此操作,这在它们之间唯一地映射到着色器ID。如果存在,任务构建器将该光线添加到待由具有该着色器ID的着色器处理的任务(即,光线批次)。然而,如果不存在,任务构建器106将需要在链表RAM 112中创建新任务,并且找到在高速缓存114中高速缓存此新任务的新路。为此,它检查着色器ID的多对一变换(例如,散列),以找到该着色器ID的组602。如果该组602中的所有路522尚未被占用,则任务构建器106仅将新任务添加到未占用的区格中的一个。然而,如果映射到所述着色器ID的组602中的所有路522已被其它任务占用,则任务构建器106将驱逐其中一个现有任务以便容纳新任务。然后,根据这一点,被驱逐的任务被视为准备好进行调度。取决于实施方式,将选择组中的最长或最短的路以在冲突后进行驱逐,或者选择最早或最晚使用的路。
在一些实施例中,可能存在最大任务长度(其中任务的长度是其链表中的项目的数目),其可基于处理器的SIMD宽度。在这种情况下,存在解决此问题的两个选项。第一,任务构建器106跟踪每个任务的长度,然后在其达到最大任务长度时开始新任务。第二种替代方法是,构建器106不记录任务的长度,而是随后在调度器108中,如果所选任务比SIMD长度长,则其在调度期间拆分任务。为了实现第一方案,硬件维持每个高速缓存条目的计数器。对于第二方案,可以在待调度的选定任务上使用单个计数器。第二选项的实现成本更低,但前一种方法具有潜在的性能优势。
在将新光线添加到链表RAM 112中的任务之后,如果没有任务准备好进行调度,则方法循环回到步骤310,在此,任务构建器106继续等待检测更多新光线被接收到光线储存库110中。然而,如果任务准备好进行调度,例如因为它已经从任务高速缓存114中被驱逐,则任务构建器106前进到步骤350,在此,它在链表RAM112中将该任务标记为准备好进行调度。这在本文中还可以被描述为关闭任务(所述任务被称为已关闭)。在实施例中,这是通过对链表中的光线中的一个的列表条目的标志516进行断言来完成的。例如,在实施例中,取决于实施方式,这可以是列表的头部处的条目(标记为IsHead标志)或尾部处的条目(标记为IsTail标志)。所述方法接着循环回到步骤310,在此,任务构建器106继续等待检测更多新光线被接收到光线储存库110中。
以上仅仅是一种可能的机制,其可以用于检查是否存在对应于新光线的着色器ID的现有任务。例如,更一般地,可以使用布置成存储正在构建的任务的一个或多个指示的任何临时存储装置来实现类似功能,其中任务构建器106基于一个或多个预定标准从临时存储装置移除所选任务的指示,并且在该指示从临时存储装置移除时指示所选任务准备好进行调度。或者,
任务构建器106可以转而仅在链表RAM 112中维护已具有任务的着色器ID的表格,或者可以在链表RAM 112本身中记录这一点并在每次接收到新光线时查看是否存在任务。然而,这些方法在速度和/或硅方面效率较低。
图6的布置是特别有利的实施方式,因为多对一映射允许在Y路中容纳X个可能的着色器ID,其中X>>Y。可以使用具有1对1映射的缓冲器,但是这需要可以容纳X个着色器ID的存储装置,这在硅方面是非常昂贵的。
另一替代方案是使用从“着色器ID”到“高速缓存行”的散列来执行映射,但这将更难保证仅使用唯一映射(即使对于光线储存库中的每个光线都维护了高速缓存行)。另一替代方案是在多个周期内的每个周期读取高速缓存行条目的一个子集(其中状态机搜索所有条目),但这将限制可以处理输入光线的速率。另一替代方案是通过并行地执行与每个高速缓存的着色器ID的比较,来在高速缓存中搜索与新光线匹配的着色器ID。然而,这种方法意味着,除了所需的并行比较逻辑在硅面积方面将非常昂贵之外,RAM不能用于存储高速缓存的着色器ID(如果要求在同一周期中从所有地址读取),并且使用触发器进行所述存储。另一替代方案是使用散列来映射到一个组,但仅具有一路,存在如下风险:一系列光线在恰好映射到同一组的2个着色器ID之间交替,因此一个组将被抖动,而所有其他组仍保持未被使用。
通过向组,但接着向每个组的多条(例如,4条)路使用散列的组合,意味着可以将所述4条路存储在相同RAM条目的并行字段中,然后执行4个并行比较以检测命中。这尝试限制与并行比较相关联的面积成本,但高速缓存的良好性能则在某种程度上依赖于所使用的映射函数,以及与新光线相关联的着色器ID序列的统计分布。例如,应当使用经过选择使得着色器ID的典型序列合理地分布在高速缓存的所有组中的散列来执行映射。如果一系列着色器ID主要映射到同一组,这可能导致高速缓存的“抖动”(其中,“抖动”是指高速缓存行的反复驱逐,在很短时间之后需要对该高速缓存行进行重新分配),因此可能导致调度比本来可能包含项目更少项目(例如,光线)的任务。
在一些实施例中,变满的任务或路仅停留在高速缓存中,直到新光线映射到它们上为止,在这种情况下,它们被驱逐。然而,在一些其他实施例中,高速缓存114可以采用替代或附加的高速缓存驱逐策略来确定何时关闭任务。为此,每个高速缓存区格(或路)可以包括一个或多个附加字段。例如,这些附加字段可以包括记录将相应任务添加到高速缓存的时间指示的年龄字段528和/或以光线数目记录任务长度的长度字段。另一替代或附加示例是优先级字段529,其记录与相应任务相关的优先级级别。在实施例中,高速缓存114采用的高速缓存驱逐策略可以响应于根据相应字段528检测到它超过预定阈值年龄或长度而额外驱逐任何任务(无论其是否需要被驱逐以为新任务腾出空间),和/或可以随机地驱逐任务。并且/或者,当需要在给定组的多个不同路中的任务之间进行选择以为新任务腾出空间时,所述策略可以包括根据高速缓存114中的相应字段528在组中具有最老年龄或最长长度的那些任务之间驱逐任务,或随机选择任务以从组中驱逐。作为另一示例,在该组中选择以供驱逐的任务可以包括根据相应优先级字段519具有最高优先级级别(最需要进行调度)的任务。例如,包含因为未被调度而使管道减速或造成死锁的光线的任务可以被分配高优先级。
高速缓存114也不限于图6的组和路的布置。可能的基于高速缓存的机制的另一示例是,任何任务都可以高速缓存在任务高速缓存114的任何区格中,并且只有当整个高速缓存已满并且可以驱逐任何区格522以容纳新任务时,才驱逐现有任务。
在不必使用高速缓存114的情况下,确定任务是否准备好进行调度的替代或附加方法是,一旦自任务创建以来某个阈值时间已过去和/或一旦任务长度已超过预定阈值光线数目时,就确定任务准备就绪。另一示例是随机宣告任务准备好进行调度。也可以使用多种方法的组合。例如,为了容纳新任务或当现有任务已超过某一阈值年龄或长度时,可以驱逐现有任务。
在实施例中,任务调度器108可以包括“行走驱逐器”,每当任务调度器在可用工作上运行不足时,该行走驱逐器就启动。这种机制将扫描通过高速缓存114,尝试找到包含调度器急需的任务类型的路。行走驱逐器是定期运行以强制将工作从构建器推送到调度器的后台进程。选择驱逐哪个的依据可以包括上文讨论的任何因素或其他因素,例如优先级、年龄、长度或随机性。
图4示出了任务调度器108的方法。在步骤410处,任务调度器108监测链表RAM 112以发现任何被标记为关闭的链表(即,该链表代表的任务准备好进行调度)。在实施例中,这包括监测其中有效标志(IsValid)516被断言的任何列表条目512。在某些实施例中,这也是即将成为用于沿列表行走的进入点的列表条目(取决于实施方式,标记为IsHead或IsTail)。如前所述,这可以由单独的进入点标记字段518指示。在替代实施例中,有效标志516和进入点标记可以是相同字段(即,标记为有效标志的条目由任务调度器108自动用作列表的进入点)。在其它实施例中,每个列表条目512可以包括IsHead字段和IsTail字段两者,使得任何给定列表的头部和尾部都在链表RAM 112中被标记。
监测可以包括扫描以寻找具有IsValid=1和IsHead=1(或IsValid=1和IsTail=1)的光线。这是很快的,因为它只需要扫描长度等于光线数目的位矢量,其中每个位是IsValid和IsHead标志(或IsValid=1和IsTail=1)的布尔与。
在步骤420处,如果没有发现关闭(即,准备就绪)任务,则方法循环回到步骤410,在此,任务调度器410继续监测以发现关闭任务。然而,当发现关闭任务时,任务调度器108前进到步骤430,在此,其调度关闭任务的光线以供并行处理(例如,SIMD)子系统102处理。
为此,在从标记为进入点标记518的条目开始的实施例中,任务调度器108沿链表行走。例如,如果进入点标记518标记哪个条目保存链表的头部,则任务调度器可以从头部开始沿列表行走(遵循头部的下一光线指针字段到列表中的下一光线,然后遵循该光线的列表条目的下一光线指针字段到下一光线,以此类推)。或者,如果(在尾部的下一光线指针指回头部的实施例中)进入点标记518标记列表的尾部,则任务调度器108可以读取尾部的下一光线指针以找到头部的光线ID,然后从头部开始沿列表行走(或简单地从尾部开始沿列表行走)。
对于任务调度器108在其行走通过关闭列表时遇到的每个光线,其将该光线的光线ID供应到并行处理子系统102。光线ID可以原始或经变换形式供应。例如,在一些实施例中,调度器108可以对启动包括光线的任务102所需的所有信息进行打包,然后将该信息发送至并行处理子系统102(即,调度器108实际上并不以原始(未变换)形式传递光线ID)。然而,在其它实施例中,任务调度器108可以原始(未变换)形式传递光线ID。
任务调度器108还从光线储存库110接收着色器ID,并将其供应到处理子系统102。在替代变型中,处理子系统102可以直接从光线储存库110或系统的某个其它元件读取或接收着色器ID。无论如何,着色器ID指向存储器104中的程序,并且每个供应的光线ID指向光线储存库110中的光线描述,处理子系统102可以访问这两者。因此,处理子系统运行由供应的着色器ID指向的着色器程序,从而对来自光线储存库110的对应于供应的光线ID的光线描述进行并行操作。
在其他实施例中,链表RAM 112中的每个光线的条目还可以包括相应的优先级字段,其用于记录与相应光线或其任务相关联的优先级级别。取决于实施方式,优先级字段可以仅针对列表中的一个代表性光线(例如,头部、尾部或进入点)进行填充,从而基于每个列表(每个任务)设置;或者替代地其可以基于每个光线填充。在一些实施方式中,优先级可以基于每个任务设置,并且可以从高速缓存114中的光线任务的优先级字段复制。当确定要调度哪些任务或光线时,任务调度器106可以考虑链表RAM 112中的优先级级别。例如,如果光线或任务具有特定优先级级别,例如,指示光线或任务在管道中造成死锁或使管道减速,则任务调度器108可以选择在任务构建器106将相应任务标记为就绪之前调度任务或个体光线(在一些此类实施例中,这些死锁光线可以绕过任务构建器106和链表RAM 112,并且直接到达调度器108,以在任务中被单独分派,即对于任务有一个实例有效)。作为另一示例性实施方式,如果两个或更多个任务在短时间空间内准备就绪,任务调度器108可以按照优先级级别(优先级最高的优先)的顺序来调度它们。
图7a示出了正在构建的链表的示例。
当任务构建器108创建新链表时,其将新区格的尾部指针526t(TailPtr)和头部指针526h(HeadPtr)设置为传入光线的光线ID。然后,它清除光线的尾部标记(IsTail)(其在该示例中是进入点标记518),并且还更新尾部光线的下一光线指针514(NextPtr),但不像有时对链表的尾部所做的那样参考其自身。相反,使NextPtr指向高速缓存114中的实际区格522,该实际区格的标识符是组编号和路编号的级联。这是任选特征,稍后会更详细地讨论(参见“第一附录”)。
当光线到达并命中区格522时,任务构建器106通过更新区格的头部指针526h(HeadPtr)和光线的下一光线指针514(NextPtr)来在链表中累积其光线ID 502。每当新光线被添加到任务时,任务构建器106针对链表RAM 112中的相应光线的条目断言有效标志(“IsValid”)516,其表示所述光线现在是链表的一部分。使传入光线的NextPtr指向旧头部光线,而区格的新HeadPtr现在指向传入光线。
图7b示出了由于其区格522已被驱逐而“关闭”之后的链表。
当关闭链表时,任务构建器106更新尾部的有效标志,并且还更新尾部的下一光线指针514(“NextPtr”),以便指回头部。任务调度器108仅考虑已准备就绪并且尾部光线具有已断言的有效标志512的链表。一旦选择了链表,任务调度器108立即通过读取其尾部光线的NextPtr指针而启动。
当高速缓存114驱逐区格522时,任务构建器106通过将其尾部光线(最旧)的NextPtr更新为指向头部光线(最新)来关闭其链表。通过这种方式,它创建了循环链表,该循环链表可以从其内部的任何光线开始被完整地读取。为了区分指向高速缓存区格的尾部光线或头部光线,使用其IsValid标志,该标志是在任务构建器106关闭链表时设置的。请注意,尾部光线现在指回头部,并且区格不再保存对链表的参考。尾部光线的isValid现在也是1。
在一些实施例中,任选地,所公开的逻辑101可以采用本文称为“附录”的一个或多个额外特征。
在第一任选附录中。任务调度器108可以使用存储在链表的终端光线中的信息来实现高速缓存行的驱逐。也就是说,可以由调度器108信号通知终止未完成链表。为此,给定任务列表中的最后条目指回高速缓存114中该相同任务的高速缓存区格522。以此方式,如果消费者的工作比生产者快,并且完全处于饥饿状态,那么消费者可以请求驱逐该区格,并且因此关闭其任务,以便在任务由任务构建器106标记为就绪之前为其提供新工作。任务的尾部指回其自身的高速缓存区格522,直到其被标记为就绪。因此,任务调度器108可以迫使其(即,附接到不完整链表的区格)被清除,并且因此关闭链表,使得饥饿的下游处理器可以消耗它。任务将被迫“关闭”,然后其将仅沿着管道找到前往调度器的路(如通常那样)。这比仅信号通知其处于饥饿状态并让生产者(任务构建器106)选择驱逐哪个区格更好,因为消费者可以知道它能够或希望做哪个类型的工作(例如,如果存在不同的工作优先级)。
在第二任选附录中,任务调度器108可以选择部分地读出已完成链表的连续部分,同时通过对其进行修补以供后续访问而维持其结构完整性。即,如果列表变长(例如100个光线),但调度器108或处理子系统102一次只能处理例如64个光线,则调度器可以通过仅调度列表的顶部部分并将中间的剩余光线标记为新头部(或仅调度列表的底部部分并将中间的剩余光线标记为新尾部)来切断列表。
在第三任选附录中,任务调度器可以从链表中的任何地方读出单个光线,同时通过对其进行修补以供后续访问而维持其结构完整性。通常,调度器108沿链表RAM 112行走以寻找标记为关闭的任何事物。然而,在本附录中,调度器108可以选择查询特定光线ID(“光线编号X)或提取特定光线以进行调度。为了促进此操作,尾部指回头部,使得调度器可以读取整个列表,而不必从头部开始。如果任务调度器108不一定知道头部在哪里,例如,因为链表RAM 112中不包括头部标记(如图5b的示例中那样)并且尾部不(或至少尚未)指回头部,则这是有用的。
在第四任选附录中,可以基于优先级或其他标准,在元链表中将已完成链表缝合在一起。这可以由任务构建器106完成。这意味着当进行调度时,调度器108不需要扫描以找到下一链表,而只是保持遵循元数据链表。光线标志可以用于描绘各个链表。在这一点的某些实施方式中,不能随机访问各个链表,因为我们只在元链表中维持进入点。该所述光线标志可以用于描绘各个链表。
图8示出了计算机系统,其中可以实现本文所述的图形处理系统。计算机系统包括CPU 802、GPU 804、存储器806和其他装置814,诸如显示器816、扬声器818和相机819。在GPU804上实现处理块810(与图1中的处理子系统102相对应)。在其他示例中,处理块810可以在CPU 802上实现。计算机系统的部件可通过通信总线820彼此通信。储存库812(其可至少部分地对应于图1中的存储器104)被实施为存储器806的部分。
图1至图7b的逻辑示出为包括许多功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,在本文中被描述为由逻辑形成的中间值不需要由逻辑在任何点处物理地生成,并且可以仅表示方便地描述由逻辑在其输入与输出之间执行的处理的逻辑值。
本文中所描述的逻辑可以包含在集成电路上的硬件中。本文中所描述的逻辑可以被配置成执行本文中所描述的任一种方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行码的一个或多个处理器执行,所述码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或其它数据并且可以由机器存取的其它存储器装置。
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如C、Java或OpenCL等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由该代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,诸如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,所述计算机可读存储介质上编码有集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造系统中处理(即,运行)时,所述集成电路定义数据集将系统配置成制造被配置成执行本文中所描述的任何方法的逻辑,或者制造包括本文中所描述的任何设备的逻辑。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造如本文中所描述的逻辑的方法。此外,可以提供一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中处理时,使制造逻辑的方法被执行。
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如,OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以便生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
现在将参考图9描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置为制造逻辑的示例。
图9示出了配置为制造如本文中的任一示例中所描述的逻辑的集成电路(IC)制造系统902的示例。具体而言,IC制造系统902包括布局处理系统904和集成电路生成系统906。IC制造系统902被配置为接收IC定义数据集(例如,定义如本文的任一示例中描述的逻辑),处理IC定义数据集,并根据IC定义数据集来生成IC(例如,其包含如本文的任何示例中描述的逻辑)。IC定义数据集的处理将IC制造系统902配置为制造包含如本文的任一示例中描述的逻辑的集成电路。
布局处理系统904配置成接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统904已确定电路布局,布局处理系统可以将电路布局定义输出到IC生成系统1006。电路布局定义可以是例如电路布局描述。
如所属领域中已知,IC生成系统906根据电路布局定义来生成IC。举例来说,IC生成系统906可实施生成IC的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统906的电路布局定义可呈计算机可读代码的形式,IC生成系统906可使用所述计算机可读代码来形成用于生成IC的合适掩码。
由IC制造系统902执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统902可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其它示例中,在集成电路制造系统处对集成电路定义数据集的处理可将系统配置成制造逻辑,而无需对IC定义数据集进行处理以确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如FPGA的配置,并且对该数据集的处理可以将IC制造系统配置成(例如,通过将配置数据加载到FPGA)生成具有该定义的配置的可重新配置的处理器。
在一些实施例中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,由集成电路制造定义数据集以上文参考图9描述的方式对集成电路制造系统进行配置,可以制造如本文所述的装置。
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图9所示的示例中,IC生成系统可以由集成电路定义数据集进一步配置为在制造集成电路时根据在集成电路定义数据集处限定的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实现方式相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包括计算性能提高、延迟减少、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施方式之间进行折中,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和系统的物理实施方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
根据本文公开的一个方面,提供了一种如发明内容部分中阐述的逻辑。
在实施例中,驱逐策略可以包括:当创建新任务并且适合高速缓存新任务的一组区格已满时,从该组的一个区格驱逐现有任务以容纳新任务。
在实施例中,高速缓存可以被布置成组和路,每个组包括路中的一个或多个,并且路为区格,其中每个组被映射到任务的子集,并且高速缓存被配置为当创建新任务时,新任务被添加到映射到新任务的组的一个路;并且所述驱逐策略可以包括:当创建新任务并且映射到新任务的组的所有路已满时,从该组的一个路中驱逐现有任务以便容纳新任务。
在实施例中,每个任务都可以具有在高速缓存中记录的关联优先级,所述关联优先级指示用于调度相应任务的优先级,并且选择以供驱逐的现有任务可以是该组中具有最高调度优先级的任务。
替代地,在实施例中,选择以供驱逐的现有任务可以是相应链表中具有最大数目的数据项的任务。
作为另一种可能性,每个任务都可以具有在高速缓存中记录的关联年龄,所述关联年龄指示自该任务创建以来的时间,并且选择以供驱逐的现有任务可以是具有最老年龄的任务。
替代地或另外地,在实施例中,每个任务都可以具有在高速缓存中记录的关联年龄,所述关联年龄指示自任务创建以来的时间,并且驱逐策略可以包括:如果年龄超过阈值,则驱逐任务。
替代地或另外地,在实施例中,驱逐策略可以包括:如果相应链表的长度超过数据项的阈值数目,则驱逐任务。
替代地或另外地,在实施例中,驱逐策略可以包括随机地驱逐任务。
在实施例中,高速缓存中的每个任务的指示可以包括指向相应链表中的头部和/或尾部数据项的项目ID的指针。
在实施例中,链表RAM中的每个条目还可以包括进入点标记,其中任务构建器可以被配置成,针对准备好进行调度的每个任务,断言进入点标记中的一个以指示链表中的哪个数据项将用作该列表的进入点;并且任务调度器可以被配置成在遵循相应链表的指针以执行所述调度时,从进入点标记被断言的条目中的数据项开始。
在实施例中,每个链表中的尾部数据项的条目可以记录指向自身的指针或包括空值。
替代地,每个链表中的尾部数据项的条目记录指向相应链表的头部数据项的指针。在一些此类实施例中,任务调度器可以可操作以从一个链表调度数据项中的任何选定个体数据项进行处理,并且通过将所述个体数据项的条目之前的相邻条目的指针设置成指向所述个体数据项的条目之后的相邻条目的数据项,来将该链表的其余部分缝合在一起以供未来调度。
在实施例中,任务构建器可以可操作以将至少一项任务的链表的尾部数据项的条目设置成指向高速缓存中的相应任务的高速缓存区格;并且其中任务调度器被配置成使得如果急需工作,则在被任务构建器指示为准备就绪之前,从由尾部指向的高速缓存区格调度相应任务。
在实施例中,任务调度器可操作以仅从一项任务的开始或结束调度数据项的连续子组,并且通过分别将剩余数据项中的一个作为新头部或尾部项来将该任务的其余部分留给未来调度。
在实施例中,任务构建器可以可操作以将把两个相应链表中的一个中的尾部数据项的条目中的指针设置成指向另一个的头部数据项的两个任务修补在一起,从而创建元链表,并且可以被配置成通过遵循从元链表中的一个列表到下一列表的指针来调度所述两个任务的数据项。
在实施例中,每个数据项可以表示图形元素。
例如,每个图形元素可以是光线跟踪应用程序的光线,并且每个数据项的数据内容可以包括光线描述。
在一些此类实施例中,每个相应程序可以是用于处理相应任务的光线的着色器程序。
在实施例中,任务构建器和任务调度器可以在固定功能硬件电路中实施。
根据本文公开的另一方面,可以提供一种处理器,所述处理器包括:任何实施例的逻辑,以及并行处理子系统。
在实施例中,处理器可以采用用作主机的加速器的加速器处理器的形式,该加速器处理器被配置成从主机接收数据项。
在实施例中,逻辑或处理器可以包含在集成电路上的硬件中。
根据另一方面,提供了一种使用集成电路制造系统制造本文公开的任何实施例的逻辑或处理器的方法。
根据另一方面,提供了一种集成电路定义数据集,当在集成电路制造系统中处理时,所述集成电路定义数据集将集成电路制造系统配置成制造本文公开的任何实施例的逻辑或处理器。
根据另一方面,提供了一种集成电路制造系统,所述集成电路制造系统被配置成制造本文公开的任何实施例的逻辑或处理器。
根据本文公开的另一方面,提供了一种方法,其包括:构建多个任务,每个任务包括待由相应程序处理的相应组的数据项;调度待由在并行处理子系统上运行的相应程序处理的每个任务,由此对于每个任务,相应组的数据项中的至少一些被并行处理;至少临时在数据储存库中保存映射到相应项目ID的数据项的每个的相应数据内容;以及维护包括每个项目ID的相应条目的链表RAM。通过以下方式执行任务的构建:当新数据项接收到数据储存库中时,确定是否存在针对新数据项的现有任务,并且a)如果不存在,通过在包括新数据项的链表RAM中启动新的相应链表来创建新任务,但是b)如果存在,将新数据项添加到链表RAM中的现有的相应链表,其中在每个链表中,在列表中的从头部数据项到尾部数据项之前的至少最后数据项的每个数据项的条目都记录指向链表中的下一项目ID的指针。所述任务构建还包括指示所述任务中的任一个何时准备好进行调度。所述调度包括基于来自所述构建的所述指示,识别准备好进行调度的任务,并且作为响应,遵循所述相应链表中的指针,以便调度相应任务的数据项以供所述并行处理子系统处理。
在实施例中,所述方法可以包括对应于本文中所公开的逻辑或处理器的任何实施例的操作的步骤。
根据另一方面,可以提供一种被配置成执行所述方法的图形处理系统。
根据另一方面,提供了一种计算机可读代码,所述计算机可读代码被配置成使所述方法在所述代码运行时被执行。
根据另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上编码有上述计算机可读代码。
根据本文公开的其他方面,可以提供一种操作逻辑或处理器的对应方法,以及一种被配置成操作逻辑或处理器的对应计算机程序。根据其他方面,可以提供一种制造逻辑或处理器的对应方法、一种布置成制造逻辑或处理器的对应制造设施,以及一种包含在计算机可读存储装置上的对应电路设计数据集。
例如,根据一个方面,可以提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有本文的任何实施例的逻辑或处理器的计算机可读描述,该计算机可读描述当在集成电路制造系统中处理时,使集成电路制造系统:使用布局处理系统对逻辑或处理器的计算机可读描述进行处理,以便生成包含所述逻辑或处理器的集成电路的电路布局描述;以及使用集成电路生成系统根据电路布局描述制造逻辑或处理器。
根据另一方面,可以提供一种集成电路制造系统,其包括:非暂态计算机可读存储介质,其上存储有本文公开的任何实施例的逻辑或处理器的计算机可读描述;布局处理系统,其被配置成处理所述计算机可读描述,以便生成包含所述逻辑或处理器的集成电路的电路布局描述;以及集成电路生成系统,其被配置成根据所述电路布局描述制造所述逻辑或处理器。
根据另一方面,可以提供一种使用集成电路制造系统制造本文公开的任何实施例的逻辑或处理器的方法,所述方法包括:使用布局处理系统对所述电路的计算机可读描述进行处理,以便生成包含所述逻辑或处理器的集成电路的电路布局描述;以及使用集成电路生成系统根据所述电路布局描述制造所述逻辑或处理器。
根据另一方面,可以提供一种布局处理系统,所述布局处理系统被配置成确定从集成电路描述导出的电路的逻辑部件的位置信息,以便生成包含本文公开的任何实施例的逻辑或处理器的集成电路的电路布局描述。
一旦本文给出本公开,所公开的技术的其它变型、实施方式和/或应用对于本领域技术人员就可能变得显而易见。本公开的范围不受上述实施例限制,而仅受权利要求书限制。

Claims (20)

1.一种逻辑,包括:
任务构建器,所述任务构建器用于构建多个任务,每个任务包括待由相应程序处理的相应组的数据项;
任务调度器,所述任务调度器用于调度待由在并行处理子系统上运行的所述相应程序处理的任务中的每一个,由此对于每个任务,并行处理所述相应组的数据项中的至少一些;
数据储存库,所述数据储存库被布置成至少暂时保存映射到相应项目ID的所述数据项中的每一个的相应数据内容;以及
链表RAM,所述链表RAM包括每个项目ID的相应条目;
其中所述任务构建器被配置成通过以下方式构建所述任务:当新数据项接收到所述数据储存库中时,确定是否存在针对所述新数据项的现有任务,并且a)如果不存在,通过在包括所述新数据项的链表RAM中启动新的相应链表来创建新任务,但是b)如果存在,将所述新数据项添加到所述链表RAM中的现有相应链表,其中在每个链表中,在列表中的从头部数据项到尾部数据项之前的至少最后数据项的每个数据项的条目都记录指向所述链表中的下一项目ID的指针;
其中所述任务构建器还被配置成指示所述任务中的任一个何时准备好进行调度;并且
其中所述任务调度器被布置成基于来自所述任务构建器的指示,识别准备好进行调度的任务,并且作为响应,遵循相应链表中的指针,以便调度相应任务的数据项以供所述并行处理子系统处理。
2.根据权利要求1所述的逻辑,其中所述任务构建器被配置成通过在所述链表RAM中断言相应标志以标记所述任务中的任一个何时准备好进行调度来执行所述指示;并且
其中所述任务调度器被布置成通过监测所述链表RAM以发现断言标志来执行所述识别,并且在所述相应标志被断言时检测所述任务中的一个准备就绪。
3.根据权利要求1或2所述的逻辑,其中所述任务构建器包括被布置成存储正在构建的任务的一个或多个指示的临时存储装置,并且所述任务构建器被配置成基于一个或多个预定标准从所述临时存储装置移除所选任务的指示,并且指示所述所选任务准备好进行调度。
4.根据权利要求3所述的逻辑,其中所述临时存储装置包括高速缓存,所述高速缓存包括多个区格,每个区格可操作以通过临时记录所述任务的指示来高速缓存所述任务中的一个,其中当创建新任务时,所述新任务被高速缓存在所述区格中的一个中,其中所述一个或多个预定标准包括驱逐策略,并且所述高速缓存被配置成根据所述驱逐策略从所述区格中驱逐任务,并且
其中所述任务构建器被配置成在所述所选任务从所述高速缓存中驱逐时,指示所述所选任务准备好进行调度。
5.根据权利要求4所述的逻辑,其中所述驱逐策略包括:当创建新任务并且适合高速缓存所述新任务的一组区格已满时,从所述组的一个区格驱逐现有任务以容纳所述新任务。
6.根据权利要求5所述的逻辑,其中:
所述高速缓存被布置成组和路,每个组包括所述路中的一个或多个,并且所述路是所述区格,其中每个组被映射到所述任务的子集,并且所述高速缓存被配置成使得当创建新任务时,所述新任务被添加到映射到所述新任务的组的路中的一个;并且
其中所述驱逐策略包括:当创建新任务并且映射到所述新任务的组的所有路已满时,从此组的路中的一个驱逐现有任务以容纳所述新任务。
7.根据权利要求5所述的逻辑,其中以下各项中的一者:
每个任务都具有在所述高速缓存中记录的关联优先级,所述关联优先级指示用于调度相应任务的优先级,并且其中选择以供驱逐的现有任务是所述组中的具有最高调度优先级的任务;或
选择以供驱逐的现有任务是相应链表中的具有最大数目的数据项的任务;或
每个任务都具有在所述高速缓存中记录的关联年龄,所述关联年龄指示自所述任务创建以来的时间,并且选择以供驱逐的现有任务是具有最老年龄的任务。
8.根据权利要求4所述的逻辑,其中以下各项中的一者或多者:
每个任务都具有在所述高速缓存中记录的关联年龄,所述关联年龄指示自所述任务创建以来的时间,并且其中所述驱逐策略包括:如果所述年龄超过阈值,则驱逐任务;并且/或者
所述驱逐策略包括:如果相应链表的长度超过数据项的阈值数目,则驱逐任务;并且/或者
所述驱逐策略包括随机驱逐任务。
9.根据权利要求3所述的逻辑,其中所述高速缓存中的每个任务的指示包括指向相应链表中的头部和/或尾部数据项的项目ID的指针。
10.根据权利要求1所述的逻辑,其中所述链表RAM中的每个条目还包括进入点标记,其中所述任务构建器被配置成,针对准备好进行调度的每个任务,断言所述进入点标记中的一个以指示所述链表中的哪个数据项将用作列表的进入点;并且所述任务调度器被配置成使得在遵循相应链表的指针以执行所述调度时,从所述进入点标记被断言的条目中的数据项开始。
11.根据权利要求1所述的逻辑,其中:
每个链表中的尾部数据项的条目记录指向相应链表的头部数据项的指针;并且
所述任务调度器可操作以从所述链表中的一个调度所述数据项中的任何选定个体数据项以进行处理,并且通过将所述个体数据项的条目之前的相邻条目的指针设置成指向所述个体数据项的条目之后的相邻条目的数据项,来将该链表的其余部分缝合在一起以供未来调度。
12.根据权利要求4所述的逻辑,其中所述任务构建器可操作以将至少一个任务的链表中的尾部数据项的条目设置成指向所述高速缓存中的相应任务的高速缓存区格;并且其中任务调度器被配置成使得如果急需工作,则在被所述任务构建器指示为准备就绪之前,从由所述尾部指向的高速缓存区格调度所述相应任务。
13.根据权利要求1所述的逻辑,其中所述任务调度器可操作以仅从所述任务中的一个的开始或结束调度所述数据项的连续子组,并且通过分别将剩余数据项中的一个作为新头部或尾部项而将所述任务的其余部分留给未来调度。
14.一种方法,包括:
构建多个任务,每个任务包括待由相应程序处理的相应组的数据项;
调度待由在并行处理子系统上运行的所述相应程序处理的任务中的每一个,由此对于每个任务,并行处理所述相应组的数据项中的至少一些;
在数据储存库中至少暂时保存映射到相应项目ID的每个数据项的相应数据内容;以及
维持包括每个项目ID的相应条目的链表RAM;
其中通过以下方式执行所述任务的构建:当新数据项接收到所述数据储存库中时,确定是否存在针对所述新数据项的现有任务,并且a)如果不存在,通过在包括所述新数据项的链表RAM中启动新的相应链表来创建新任务,但是b)如果存在,将所述新数据项添加到所述链表RAM中的现有的相应链表,其中在每个链表中,在列表中的从头部数据项到尾部数据项之前的至少最后数据项的每个数据项的条目都记录指向所述链表中的下一项目ID的指针;
所述任务的构建还包括指示所述任务中的任一个何时准备好进行调度;并且
所述调度包括基于来自所述构建的所述指示,识别准备好进行调度的任务,并且作为响应,遵循所述相应链表中的指针,以便调度相应任务的数据项以供所述并行处理子系统处理。
15.一种计算机可读存储介质,所述计算机可读存储介质上存储有根据权利要求1或2所述的逻辑的计算机可读描述,所述计算机可读描述当在集成电路制造系统中处理时,使所述集成电路制造系统制造包含所述逻辑的集成电路。
16.根据权利要求1或2所述的逻辑,其中所述逻辑包含在集成电路上。
17.一种使用集成电路制造系统制造根据权利要求16所述的集成电路的方法。
18.一种集成电路制造系统,所述集成电路制造系统被配置成制造根据权利要求16所述的集成电路。
19.一种图形处理系统,所述图形处理系统被配置成执行根据权利要求14所述的方法。
20.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机可读代码,所述计算机可读代码被配置成使根据权利要求14所述的方法在所述代码运行时被执行。
CN202111135381.0A 2020-09-30 2021-09-27 构建和调度用于并行处理的任务 Pending CN114327809A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
GR20200100595 2020-09-30
GR20200100595 2020-09-30
GB2017885.1 2020-11-13
GB2017885.1A GB2599451B (en) 2020-09-30 2020-11-13 Building and scheduling tasks for parallel processing

Publications (1)

Publication Number Publication Date
CN114327809A true CN114327809A (zh) 2022-04-12

Family

ID=80442717

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111135381.0A Pending CN114327809A (zh) 2020-09-30 2021-09-27 构建和调度用于并行处理的任务

Country Status (4)

Country Link
US (2) US11640318B2 (zh)
EP (1) EP3979184A1 (zh)
CN (1) CN114327809A (zh)
GB (1) GB2599451B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116166203A (zh) * 2023-04-19 2023-05-26 苏州浪潮智能科技有限公司 一种raid卡的命名空间管理方法、装置、设备及介质

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230206559A1 (en) * 2021-12-27 2023-06-29 Advanced Micro Devices, Inc. Graphics discard engine
CN115292023B (zh) * 2022-10-08 2023-01-17 北京中科网威信息技术有限公司 定时任务处理方法及装置
CN117806789B (zh) * 2023-11-01 2024-10-11 宁德时代(上海)智能科技有限公司 多核操作系统的任务处理方法、装置及计算设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8566537B2 (en) * 2011-03-29 2013-10-22 Intel Corporation Method and apparatus to facilitate shared pointers in a heterogeneous platform
GB2516995B (en) * 2013-12-18 2015-08-19 Imagination Tech Ltd Task execution in a SIMD processing unit
GB2543866B (en) * 2016-03-07 2017-11-01 Imagination Tech Ltd Task assembly for SIMD processing

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116166203A (zh) * 2023-04-19 2023-05-26 苏州浪潮智能科技有限公司 一种raid卡的命名空间管理方法、装置、设备及介质

Also Published As

Publication number Publication date
US20220114016A1 (en) 2022-04-14
GB2599451A (en) 2022-04-06
GB2599451B (en) 2022-11-02
EP3979184A1 (en) 2022-04-06
GB202017885D0 (en) 2020-12-30
US11640318B2 (en) 2023-05-02
US20230297422A1 (en) 2023-09-21

Similar Documents

Publication Publication Date Title
US11640318B2 (en) Building and scheduling tasks for parallel processing
KR101559090B1 (ko) 이종 코어를 위한 자동 커널 마이그레이션
US9996394B2 (en) Scheduling accelerator tasks on accelerators using graphs
EP2542973B1 (en) Gpu support for garbage collection
US20120133654A1 (en) Variable-sized concurrent grouping for multiprocessing
US20150089156A1 (en) Atomic Memory Update Unit & Methods
KR20090045944A (ko) 종속 명령 스레드 스케줄링
TWI808008B (zh) 用以偵測射線與圖形基元之間的相交的設備及方法,以及非暫時性電腦可讀儲存媒體
EP3876099A1 (en) Resource allocation in a parallel processing system
US11880925B2 (en) Atomic memory update unit and methods
Bazargan et al. 3-D floorplanning: simulated annealing and greedy placement methods for reconfigurable computing systems
US11934867B2 (en) Techniques for divergent thread group execution scheduling
US20240331234A1 (en) Tile-based scheduling using per-tile hash values
US20230351673A1 (en) Coherency Gathering for Ray Tracing
US20230229592A1 (en) Processing work items in processing logic
TWI853763B (zh) 用以偵測射線與圖形基元之間的相交的設備及方法,以及非暫時性電腦可讀儲存媒體
US20240078741A1 (en) Graphics processing
GB2615225A (en) Resource allocation in a parallel processing system
GB2616528A (en) Resource allocation in a parallel processing system
GB2614098A (en) Methods and hardware logic for writing ray tracing data from a shader processing unit of a graphics processing unit
GB2611599A (en) Methods and hardware logic for loading ray tracing data into a shader processing unit of a graphics processing unit
Austin Runtime performance enhancement of nondeterministic applications on partially reconfigurable architectures using task agglomeration
Formella et al. Parallel software caches

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