CN115543553A - 在光线跟踪系统中调度处理 - Google Patents

在光线跟踪系统中调度处理 Download PDF

Info

Publication number
CN115543553A
CN115543553A CN202210723936.1A CN202210723936A CN115543553A CN 115543553 A CN115543553 A CN 115543553A CN 202210723936 A CN202210723936 A CN 202210723936A CN 115543553 A CN115543553 A CN 115543553A
Authority
CN
China
Prior art keywords
task
priority
tasks
assigned
rays
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
CN202210723936.1A
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 CN115543553A publication Critical patent/CN115543553A/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/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
    • 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/48Indexing scheme relating to G06F9/48
    • G06F2209/484Precedence

Landscapes

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

Abstract

一种在光线跟踪系统中调度处理的方法,所述方法包括:向子任务中收集子光线;基于子任务的一个或多个子光线是从已分配优先级的任务导出的而向子任务分配优先级;以及优先于尚未分配优先级的待调度的一个或多个其他任务而调度子任务进行处理。

Description

在光线跟踪系统中调度处理
技术领域
本公开涉及在光线跟踪系统中调度处理。
背景技术
光线跟踪是一种计算渲染技术,其用于通过从渲染场景图像的视点在场景中跟踪光路(“光线”)来渲染场景的图像。光线可以被建模为源自该视点,并通过渲染空间的采样位置进入场景。被渲染图像的每个像素可对应于渲染空间的一个或多个采样位置。源自该视点的光线被称为“一次光线”。
图1示出了在光线跟踪系统中如何处理光线。在步骤S102中,执行光线生成着色器以发出一个或多个一次光线,然后处理所发出的(多个)一次光线。“着色器”(可以被称为“着色器程序”)是一种软件模块,该软件模块包括可以在处理单元上执行的一个或多个计算机可读指令。由着色器执行的功能是灵活的,并且由编写着色器代码的程序员定义。
当光线横越场景时,其可能与场景内的一个或多个物体相交。可以对光线和其相交的物体之间的相交建模以创建逼真的视觉效果。例如,要执行的生成一次光线的第一着色器(“光线生成着色器”)可以包括指令(“TraceRay”指令),所述指令在步骤S104中导致执行相交测试过程,从而找到光线与场景中的一个或多个物体的一个或多个交点。相交测试过程可以在硬件或软件中执行,但通常在硬件中(例如,使用固定功能电路)执行,因为通常认为处理效率比相交测试过程的功能的灵活性更重要。
在步骤S106中,响应于找到光线与物体的交点,针对该交点执行着色器。在步骤S106中执行(或“运行”)的着色器可以是在Vulkan和DirectX光线跟踪规范中定义的最近命中着色器、错过着色器、相交着色器或任何命中着色器。程序员编写着色器程序以定义系统如何对相交做出反应。在步骤S106中执行的着色器可以包括TraceRay指令,该指令使得向场景中发射一个或多个额外光线(称为“二次光线”),例如,以表示光线从相交物体的反射或光线通过物体的折射(例如,如果物体是透明的或半透明的)。作为另一示例,着色器程序可以使得向场景中发射一个或多个光线,以用于确定物体是否处于交点处的阴影中。因此,所述方法可以从步骤S106返回到步骤S104,如在图1中表示为“TraceRay”的虚线所示。当(在步骤S104中)找到二次光线的相交时,则可以(在步骤S106中)执行另一个着色器。以此方式,当在步骤S106中执行的着色器中包括TraceRay指令时,所述方法在步骤S106与S104之间递归地进行。
光线由定义光线起点、光线方向、最大剔除距离(“Tmax”)和最小剔除距离(“Tmin”)的数据来描述。光线伴有用户定义的有效载荷,当光线与场景中的几何形状相互作用时,所述有效载荷是可修改的,并且对于TraceRay指令的调用者是可见的。此外,根据Vulkan和DirectX光线跟踪规范,在步骤S106中执行的着色器可以包括一个或多个“CallShader”指令,该指令使得另一个着色器被执行。因此,一个着色器可以调用另一着色器,使得该方法可以在不同着色器之间递归地进行,如图1中表示为“CallShader”的虚线所示。
当一次光线的所有着色器都已完成时,提供一次光线的输出。此输出可以是渲染值(例如像素颜色),其将用于对应于一次光线的像素。以此方式,确定了表示场景的图像的像素的渲染值。
Vulkan和DirectX是用于3D图形处理的应用程序编程接口(API),其具有光线跟踪扩展,该光线跟踪扩展定义程序员如何能够使用光线跟踪系统来渲染3D场景的图像。这些API已经开创了着色器递归的概念以用于光线跟踪系统中。如上所述,当在着色器内实施的指令使得一个或多个其它着色器被调用时,发生着色器递归。被调用着色器(其可以被称为“子”着色器)被处理为与函数调用类似,其中控制将最终返回到调用着色器(其可以被称为“父”着色器)。有效载荷数据可以从父着色器被传递到子着色器,并且子着色器可以通过更新有效载荷数据来与父着色器反向通信。
当使用着色器递归时,维持父着色器的一些中间数据,因此当子着色器已完成其执行时,父着色器可以继续其执行。可以在光线跟踪系统中并行处理许多光线。此外,为了获得逼真的渲染结果,光线跟踪系统可以允许大的递归深度,例如高达31的最大递归深度。因此,父着色器的中间数据的寿命可能非常长,并且在任何给定时间,可能存在许多正维持中间数据的着色器。
发明内容
提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
根据本发明的第一方面,提供了一种在光线跟踪系统中调度处理的方法,所述方法包括:向子任务中收集子光线;基于子任务的一个或多个子光线是从已分配优先级的任务导出的而向子任务分配优先级;以及优先于待调度的未分配优先级的一个或多个其他任务而调度子任务进行处理。
所述方法还可以包括为父任务分配优先级;以及处理父任务以便发射至少一个子光线;其中,所述向子任务中收集子光线包括向子任务中收集由父任务发射的一个或多个子光线。
所述方法还可以包括优先于尚未分配优先级的待调度的一个或多个其他任务调度所述父任务进行处理。
父任务可以是基本任务。
所述父任务的一个或多个父光线可以是从已分配优先级的基本任务导出的。
多个基本任务可以在特定时间在所述光线跟踪系统中是活动的。
所述方法还可以包括根据每个所述基本任务的相对年龄将优先级分配给所述多个基本任务中的一个或多个基本任务。
所述方法还可以包括将优先级分配给所述多个基本任务中的多个基本任务,其中,可向其分配优先级的在所述特定时间在所述光线跟踪系统中活动的基本任务的数目限于预定义数目。
基本任务可以是本身没有父任务的任务。基本任务可以是实施光线生成着色器以便发出一个或多个一次光线的任务。
向基本任务分配优先级可以包括向该基本任务分配优先级标志。
所述方法还可以包括向所述子任务的一个或多个子光线分配次要优先级,其中,所述一个或多个子光线是从未分配优先级的任务导出的。
该方法还可以包括:处理所述子任务以便发射一个或多个孙光线;向孙任务中收集所述子任务关于已分配所述次要优先级的子光线所发射的一个或多个孙光线,收集到所述孙任务中的任何所述光线都不是从已分配优先级的基本任务导出的;为所述孙任务分配次要优先级;以及优先于尚未分配优先级的待调度的一个或多个其他任务调度所述孙任务进行处理。
调度所述孙任务进行处理可以包括在已分配次要优先级的所述孙任务之前调度已分配优先级的一个或多个其它任务。
所述方法还可以包括在调度未分配优先级的任务之前,延迟一段时间而不调度所述任务。
所述方法还可以包括,如果在所述一段时间内已分配优先级的任务变得可用于调度,则优先于未分配优先级的所述任务调度已分配优先级的所述任务。
所述方法还可以包括,如果在所述一段时间内已分配次要优先级的任务变得可用于调度,则优先于未分配优先级的所述任务调度已分配次要优先级的所述任务。
所述一段时间可以取决于可用于光线跟踪系统存储与光线跟踪系统中存在的任务有关的中间数据的存储器的量而自适应。
所述方法还可以包括:提供针对已分配优先级的任务的第一队列和针对尚未分配优先级的任务的第二队列;以及仅当所述第一队列中不存在任务时,才从所述第二队列调度任务进行处理。
所述方法还可以包括:提供针对已分配次要优先级的任务的第三队列;以及仅当第一队列中没有任务并且第三队列中没有任务时才从第二队列调度任务进行处理,以及仅当第一队列中没有任务时才从第三队列调度任务进行处理。
每个任务可以包括与要针对其执行着色器程序的相应的多个光线对应的着色器程序的多个实例。
根据本发明的第二方面,提供了一种配置成处理光线的光线跟踪系统,其中,所述光线跟踪系统包括任务调度逻辑,所述任务调度逻辑被配置成:向子任务中收集子光线;基于子任务的一个或多个子光线是从已分配优先级的任务导出的而向子任务分配优先级;以及优先于待调度的未分配优先级的一个或多个其他任务而调度子任务进行处理。
所述光线跟踪系统可以包含在集成电路上的硬件中。可以提供一种在集成电路制造系统处制造光线跟踪系统的方法。可提供一种集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统中处理时,将所述系统配置成制造光线跟踪系统。可提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质上存储有光线跟踪系统的计算机可读描述,所述计算机可读描述当在集成电路制造系统中处理时,使集成电路制造系统制造包含光线跟踪系统的集成电路。
可提供一种集成电路制造系统,其包括:非暂态计算机可读存储介质,其上存储有光线跟踪系统的计算机可读描述;布局处理系统,其被配置成处理计算机可读描述以便生成包含光线跟踪系统的集成电路的电路布局描述;以及集成电路生成系统,其被配置成根据电路布局描述来制造光线跟踪系统。
可以提供用于执行本文所述的任一种方法的计算机程序代码。可以提供非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质上存储有计算机可读指令,这些计算机可读指令当在计算机系统处被执行时使计算机系统执行本文所述的任一方法。
如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1示出了在光线跟踪系统中递归地处理光线的方法;
图2示出了根据本文所述的示例的光线跟踪系统;
图3示出了根据本文中所描述的示例的任务调度逻辑;
图4是根据本文所述的示例的在光线跟踪系统中调度处理的方法的流程图;
图5示出了其中实施了根据本文所述示例的光线跟踪处理系统的计算机系统;以及
图6示出了用于生成包含根据本文所述示例的光线处理系统的集成电路的集成电路制造系统。
附图示出了各种示例。技术人员将理解,附图中所示的元件边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文描述的实施例,并且对所公开的实施例的各种修改对于本领域的技术人员将是显而易见的。
现在仅通过示例的方式来描述实施例。
图2示出了根据本文中所描述的示例的光线跟踪系统202。光线跟踪系统202包括光线跟踪单元204和存储器206。光线跟踪单元204包括处理逻辑214,处理逻辑包括相交测试模块208和着色器逻辑210。光线跟踪单元204还包括任务调度逻辑216,在本文中将参考图3和图4更详细地描述它。
相交测试模块208被配置成执行光线与几何形状的相交测试。几何形状可以与加速结构的节点相关联,并且可以表示场景内的区域(例如,诸如轴对齐包围盒(AABB)的包围体积),或者几何形状可以是表示待渲染的场景内的物体的表面的图元,例如三角形图元。相交测试模块208可以在硬件中,例如在固定功能电路中实施,使得它能够(例如,在延时和功耗方面)高效率地执行相交测试。
着色器逻辑210被配置成执行计算机代码,例如,着色器程序(或其它程序)的指令。因此,由着色器逻辑210执行的功能由着色器逻辑210执行程序定义而不是在着色器逻辑210的硬件中定义。光线跟踪单元204可以包括图2中未示出的其它部件,例如,用于生成加速结构以表示场景内的物体的模块。
存储器206可以是动态随机存取存储器(DRAM)。存储器206可以包括存储器块212。存储器块212可以实施为被保留用于特定目的的连续存储器块。尽管仅示出了一个存储器块,但存储器206可以包括出于不同目的保留的多个不同存储器块。光线跟踪单元204可以在集成电路上实施。在示例中,光线跟踪单元204可以在芯片上实施,并且存储器206可以物理地位于与光线跟踪单元相同的芯片上,并且可以被称为“片上存储器”。在另一个示例中,光线跟踪单元204可以在芯片上实施,并且存储器206可以不物理地位于与光线跟踪单元相同的芯片上,并且因此可以被称为“外部存储器”或“芯片外存储器”。如本文中所述,图2中示意性示出的存储器206可以包括多个存储器块——在这些示例中,这些存储器块中的一个或多个可以物理地位于与光线跟踪单元相同的芯片上,并且这些存储器块中的一个或多个其它存储器块可以物理地不位于与光线跟踪单元相同的芯片上。存储器也可以被称为“系统存储器”,并且其可以用于存储用于系统中的其它处理单元,例如中央处理单元(CPU)的数据。在光线跟踪单元204与存储器206之间传递的数据在光线跟踪系统202内的通信总线上行进。
如上文背景技术部分所述,着色器递归可以由光线跟踪系统202执行,使得每个父着色器能够调用一个或多个子着色器。当父着色器执行着色器递归指令时,父着色器调用子着色器。术语“着色器递归指令”在本文中用于指调用另一着色器的着色器中的任何指令。着色器递归指令的示例是:(i)“TraceRay”指令,其使得光线被发射并且使得针对发射的光线执行相交测试,其中将基于针对发射的光线的相交测试的结果执行着色器;以及(ii)“CallShader”指令,其直接调用待执行的另一着色器(具有可调用着色器类型)而不执行任何光线遍历(即,相交测试)。在一些实施方式中,调用“任何命中”着色器的指令可以是着色器递归指令,例如,DirectX光线跟踪规范将这些指令称为“ReportHit”指令,Vulkan光线跟踪规范将这些指令称为“OpReportIntersectionKHR”指令。所有这些类型的着色器递归指令都导致调用子着色器。当着色器递归指令作为父着色器的一部分执行以由此调用子着色器时,维持父着色器的中间数据,使得当子着色器完成其处理时,可以恢复父着色器。
在本文所述的示例中,通过执行任务针对多个光线执行着色器程序,其中,任务包括对应于针对其执行着色器程序的相应的多个光线的多个实例。可以在单指令多数据(SIMD)处理单元上执行任务,使得针对任务的每个实例并行执行着色器程序的指令。因此,如本文所述,“任务”是待并行执行的一组实例;并且“实例”是待对其执行一系列操作的数据的集合。在本文所述的示例中,任务的实例对应于待对其执行(由着色器程序定义的)相同系列操作的相应光线。由任务构成的实例的数目可能受到限制。任务中的实例的数目的限制可能由硬件限制引起(例如,在可用处理逻辑上可以并行处理多少实例的限制)。在示例中,任务可以包括最多等于二的幂的若干实例,但任务可以被部分地打包,并且包括少于该数目的实例。例如,典型任务可以包括最多128(即27)个实例。在此示例中,如果超过128个光线要根据相同着色器程序处理,则多于一个任务将与该着色器程序相关联。例如,如果300个光线要根据相同着色器程序处理,则三个任务可以与该着色器程序相关联(其中两个可以被完全打包,第三个被部分打包)。
当在执行父任务(对应于父着色器)期间达到着色器递归指令时,将父任务的中间数据写入存储器(例如,存储器块212)并且暂停父任务(即,在光线跟踪单元上暂时结束其执行)。针对父任务存储的中间数据可以包括:(i)状态数据,(ii)有效载荷数据,和(iii)任务信息。
状态数据表示关于父任务在其执行暂停点处的状态的信息。例如,状态数据可以包括存储在临时寄存器(其可以是按实例临时寄存器或按任务临时寄存器)中的任何数据,在任务恢复时需要访问这些数据。举一些示例,这些临时寄存器可以存储交点索引和/或重心。作为另一示例,如果从相关联的交点投射多个光线以对某种形式的光散射建模,则当着色器暂停时,某种形式的材料性质可以被存储为与单个交点相关联的未来光线投射的状态数据,例如,因为可能的情况是一次仅投射一个光线。材料性质可以是例如折射率、不透明度、表面法线。
有效载荷数据是与正被处理的各个光线有关的按实例数据。具体而言,有效载荷数据包括用于光线的应用程序定义的有效载荷对象。例如,每个光线(即,每个实例)可以具有应用程序定义的光线有效载荷。子着色器能够修改(即,更新)由父着色器提供的有效载荷数据。有效载荷的大小取决于应用程序(通常为三个或四个双字(“dword”)的量级,例如,以存储像素颜色,所述像素颜色具有每通道32位值(例如,以浮点格式)的三个或四个通道,但是可能大于或小于此)。有效载荷数据的大小不是固定的。
任务信息旨在存储关于要重新调度哪个着色器程序、在哪个程序偏移处恢复程序的信息,并定义初始光线被打包到任务中的顺序。换句话说,父任务的任务信息指示要如何恢复执父任务的,例如指定要恢复父着色器程序的程序计数器,以及指定关于光线与任务的实例之间的映射的信息(例如,使用光线ID)。
可以将中间数据存储在片上资源(即,在其上实现光线跟踪单元的芯片上的存储器)中。也就是说,在这些示例中,这种片上资源的量可能需要大于通常在非递归光线跟踪系统中实现的量,或者光线跟踪系统的性能预期将受到影响。因此,至少一些中间数据(例如,大多数或全部中间数据)可以存储在片外存储器中。具体而言,具有有限处理资源的装置(例如,移动装置)往往没有足够的片上存储容量来将中间数据存储在片上,因此中间数据将倾向于存储在片外存储器中。存储器块212可以被实现为被保留用于为暂停的任务存储中间数据的连续存储器块。
父任务保持暂停,而其子任务(对应于子着色器)和源自该父任务的任何后裔任务(例如,孙任务、重孙任务等)被处理。一旦其子任务(以及从该父任务导出的任何后裔任务)完成处理,就可以从存储器(例如,存储器块212)读回父任务的中间数据,并且可以恢复父任务的执行。当父任务的处理被恢复时,任务调度逻辑(例如,任务调度逻辑216)重新调度父任务,以从其暂停的点继续其执行。
可用于存储与暂停任务有关的中间数据的存储器(例如,存储器块212)是有限的。也就是说,存在固定量的可用于存储与被暂停的任务有关的中间数据的存储器,该固定量不可超过。这意味着可用存储器可能变得饱和(例如,完全占用于),其中与被暂停任务相关的中间数据都在等待恢复处理。如本文所述,为了完成对父任务的处理以便“释放”它用来存储中间数据的存储器,必须完成对源自该父任务的一系列递归后裔任务(例如,子任务、孙任务、重孙任务等)的处理。这常常涉及到后裔任务执行着色器递归指令,并且其自身被暂停并将中间数据写入存储器,同时对所调用的更多代后裔任务进行处理。因此,如果存储器(例如,存储器块212)因中间数据变得饱和,那么通过继续正常地处理任务来补救这种情况可能非常困难(如果不是不可能的话),因为“释放”由任务的中间数据占据的存储器可能首先需要分配另外的存储器以使得能够完成其后裔任务的处理。如果父任务的后裔任务无法访问存储器以存储中间数据,则其处理可能失败。
存储器饱和可以使用“死锁避让”方法来解决,其中,当接近存储器饱和时,一次调度一条光线进行处理。相对于为任务以及完成该任务的处理所必需的递归系列中的任何后裔任务存储中间数据所需的存储器的量,为单个光线以及完成该光线的处理所必需的递归系列中的任何后裔光线存储中间数据所需的存储器的量很小。因此,死锁避让方法对于“释放”各个一次光线及其后裔光线用于存储中间数据的存储器可以是有用的,以便通过逐渐增加可用存储器的量来避免存储器饱和。然而,死锁避让方法对性能非常不利(例如,严重降低吞吐量并增加延时)。因此,需要避免或补救存储器饱和的替代方法。
根据本文所述的原理,可以将优先级指派给在光线跟踪系统中活动的一个或多个基本任务。所述优先级在本文中可以被称为“基本优先级”。基本任务是本身没有父任务的任务。基本任务是实施光线生成着色器以便发出一个或多个一次光线的任务。在一些示例中,基本任务是实施光线生成着色器以便发出多个一次光线的任务。例如,如果正在(例如,在处理逻辑214中)执行基本任务,暂停基本任务等待执行恢复(例如,在存储器206中存储中间数据),或正在(例如,在任务调度逻辑216中)等待调度以供处理,则基本任务可以被描述为在光线跟踪系统中活动。可以基于在特定时间在光线跟踪系统中活动的每个基本任务的相对年龄将优先级分配给基本任务。例如,可以将优先级分配给在光线跟踪系统中活动最长持续时间的一个或多个基本任务,或者可以将优先级分配给在光线跟踪系统中活动超过阈值持续时间的每个基本任务。收集从已向其分配优先级的基本任务导出的光线的任何辅助任务(例如,子任务、孙任务、重孙任务等)也可以基于该任务源自已向其分配优先级的基本任务而被分配优先级。所述优先级在本文中也可以被称为“基本优先级”。可以优先于(例如,早于)未被分配优先级的其他任务来调度已经分配优先级的任务(即,“优先任务”)。以此方式在光线跟踪系统中调度处理往往会使一些(优先)基本任务(及其后裔辅助任务)在其他(非优先)基本任务(及其后裔辅助任务)之前完成其处理。当基本任务(及其后裔辅助任务)已完成其处理时,就可以释放其存储器,因此通过相对于其他基本任务优先化一些基本任务,与所有基本任务均得到同等处理的情况相比,发生存储器饱和的可能性更小。例如,以这种方式在光线跟踪系统中调度处理可以鼓励往往更接近完成其处理的“较老的”基本任务(及其后裔辅助任务)来这样做,从而释放它们正用来存储中间数据的存储器。以此方式在光线跟踪系统中调度处理可以降低存储器饱和的可能性。
图3示出了根据本文中所描述的示例的任务调度逻辑216。任务调度逻辑216包括基本任务分配逻辑302、辅助任务构建逻辑306、辅助任务调度逻辑304和下一任务逻辑312——其中的每一个可以在硬件、软件或其任何组合中实施。任务调度逻辑216还包括优先级分配逻辑308-1、308-2、308-3。优先级分配逻辑308-1、308-2、308-3可以在硬件、软件或其任何组合中实施。优先级分配逻辑308-1、308-2、308-3在图3中被示出为三个单独的逻辑单元以帮助理解本文描述的原理,但实际上可以表示相同优先级分配逻辑308的三个实例。任务调度逻辑216还包括寄存器组310,其可以被配置成存储用于在光线跟踪系统中活动的每个任务和/或光线的识别信息。图3还示出了处理逻辑214和存储器206,其可具有与参照图2描述的处理逻辑214和存储器206相同的性质。
基本任务分配逻辑302被配置成分配基本任务(例如,实现光线生成着色器的任务)以供处理。在示例中,光线可以由“光线ID”(RID)标识,其中RID标识每个光线的存储器分配(例如,在存储器206中,优选地在与用于存储前述中间数据的存储器块不同的存储器块中)。当基本任务被基本任务分配逻辑302分配时,可以将一组连续的RID分配给该基本任务。分配给基本任务的RID可以指示存储器(例如,存储器206)中可以找到分配给基本任务的存储器块的存储器地址或存储器地址范围。所分配的基本任务被转发到下一任务逻辑312,以输出用于在处理逻辑312上进行处理。
光线跟踪系统可以在特定时间支持有限数量的一次光线。对光线跟踪系统支持的一次光线数目的限制可能由硬件限制(例如,对可用于存储与一次光线有关的数据的存储器的限制)引起。例如,光线跟踪系统可以支持高达2048个一次光线。可以假设,每个基本任务将包括每个任务的最大数量的实例(尽管如本文所述,在现实中不一定是这种情况)。例如,如本文所述,任务可以包括最多128(即27)个实例。因此,使用这些示例,光线跟踪系统可以在特定时间支持最多16个基本任务(即,从光线跟踪系统支持的一次光线的数目除以每个任务的实例的数目——2048除以128导出)。基本任务分配逻辑302在有足够的存储器可用于支持新的基本任务之前,不可以分配新的基本任务。也就是说,使用这些示例,在光线跟踪系统上活动的基本任务少于16个之前,基本任务分配逻辑302不可以分配新的基本任务。
优先级分配逻辑308-1被配置成将优先级分配给所分配的基本任务中的一个或多个。在示例中,在启动时,优先级分配逻辑308-1可以将优先级分配给由基本任务分配逻辑302分配的每个基本任务,直到优先级已被分配给在光线跟踪系统中活动的预定义数目n的基本任务。也就是说,优先级分配逻辑308-1可以将优先级分配给由基本任务分配逻辑302分配的前n个基本任务。为了给出一些示例,n可以等于1、3、5或10,或者适于光线跟踪系统202的任何其它数字。基本任务分配逻辑302可以通过为每个分配的基本任务和/或分配的基本任务中的每个一次光线指定识别信息,以及通过识别那些所分配基本任务中哪些已被分配优先级,从而更新寄存器组310。
如本文所述,光线可以由“光线ID”(RID)标识,其中RID标识每个光线的存储器分配(例如,在存储器206中)。当分配“基本任务”时,可以将它分配为一组连续的RID。亦即,分配给基本任务的RID可以指示存储器(例如,存储器206)中可以找到分配给基本任务的存储器块的存储器地址或存储器地址范围。在示例中,如果基本任务包括2m个光线,则RID的最低有效的m位对于基本任务内的每个一次光线可以是唯一的并且因此标识它。例如,m=7,使得基本任务包括128个光线,但在其它实例中,m可以等于其它数字。RID的最高有效位(例如,除m个最低有效位之外的每个位)对于相同基本任务中的所有一次光线可以是共同的。基本任务分配逻辑302可以更新寄存器组310,以通过针对指定该基本任务中的所有一次光线共有的RID的最高有效位的条目分配优先级标志来反映已向基本任务分配了优先级。更一般地,可以在寄存器组310中使用包括对于基本任务中的所有一次光线公共的“任务ID”和对于基本任务中的每个一次光线唯一的“任务内的光线ID”的标识符方案。基本任务分配逻辑302可以更新寄存器组310,以通过针对指定该基本任务中的所有一次光线共有的“任务ID”的条目分配优先级标志来反映已向基本任务分配了优先级。
辅助任务构建逻辑306被配置成将由在处理逻辑214中执行的任务调用的二次光线收集到辅助任务中。通过收集要根据相同着色器程序处理的多个二次光线来构建辅助任务。如本文所述,任务可以包括最多有限数目的实例——但任务可以被部分地打包,并且包括少于该数目的实例。例如,典型任务可以包括最多128(即27)个实例。辅助任务构建逻辑306可以使用高速缓存结构来收集待根据相同着色器程序处理的二次光线。辅助任务构建逻辑306可以通过将从处理逻辑214接收的二次光线“分类”到待根据相同着色器程序处理的二次光线集合中来同时构建多个辅助任务。在示例中,当待根据相同着色器程序处理的二次光线的数目达到任务中许可的最大实例数目时,辅助任务构建逻辑306可以构建辅助任务。替代地或另外,当接收到待根据某个着色器程序处理的第一二次光线时,辅助任务构建逻辑306可以启动倒计时器,并且在倒计时器到期时为该着色器程序构建辅助任务。这种方法防止了与待处理少于任务中许可的最大数目的实例所根据的着色器程序相关的辅助任务无限期地等待构建。
优先级分配逻辑308-2被配置成将优先级分配给已经向其中收集了至少一个从已经被分配优先级的基本任务导出的二次光线的辅助任务的每个。如果二次光线由该基本任务的实例所执行的着色器递归指令调用,或如果二次光线由自身由该基本任务的实例执行的着色器递归指令调用的辅助任务的实例执行的着色器递归指令调用,以此类推,则可以认为二次光线是从基本任务导出的。在其它术语中,将“着色器调用”理解为由着色器递归指令发起,“着色器调用链”可以是一系列着色器递归指令的结果,并且如果任何二次光线是源自该基本任务的着色器调用链的一部分,则其可以被视为从特定基本任务导出。也就是说,如果可以通过任何数量的光线递归事件将二次光线追溯到基本任务的一次光线(或者换言之,如果二次光线是一次光线的后裔),则可以将其视为从该基本任务导出。为了确定哪些二次光线是从已向其分配优先级的基本任务导出的,优先级分配逻辑308-2可以参考存储在寄存器组310中的光线识别信息。在示例中,当调用子光线时,它继续使用与其父光线相同的RID——但使用用于该子光线的值更新分配的存储装置。也就是说,可以经由一系列光线递归事件追溯回基本任务的一次光线的二次光线可以与该一次光线共享RID。因此,优先级分配逻辑308-2可以通过检查二次光线的RID来确定哪些二次光线是从已向其分配优先级的基本任务导出的。在示例中,优先级分配逻辑308-2可以检查二次光线RID的最高有效位,并且确定是否已经针对寄存器组310中的RID的那些位分配了优先级标志。
应理解,优先级分配逻辑308-2可以不需要检查收集到辅助任务中的每个二次光线从什么任务导出。这是因为优先级分配逻辑308-2可以被配置成将优先级分配给已经向其中收集了至少一个从已经被分配优先级的基本任务导出的二次光线的每个辅助任务。因此,一旦优先级分配逻辑308-2已经确定已经向辅助任务中收集了从已经向其分配优先级的基本任务导出的一个二次光线,它就可以为该辅助任务分配优先级,并且不需要继续检查收集到该辅助任务中的所有其他二次光线。
应理解,优先级分配逻辑308-2可能需要在优先级被分配给该辅助任务之前,向辅助任务中已经收集了不同阈值数目的从已经被分配优先级的基本任务导出的二次光线。在示例中,阈值数目可以被确定为收集到辅助任务中的光线总数的百分比。例如,阈值数目可以是收集到辅助任务中的光线总数的5%。
由辅助任务构建逻辑306构建的辅助任务被转发到辅助任务调度逻辑304。辅助任务调度逻辑304被配置成通过将辅助任务转发到下一任务逻辑312来调度辅助任务以供处理。辅助任务调度逻辑304被配置成优先于未分配优先级的其他辅助任务调度已经分配了优先级的辅助任务。在示例性实施方式中,辅助任务调度逻辑304包括待调度任务的队列。辅助任务调度逻辑304包括针对已向其分配优先级的任务的第一队列1和针对尚未向其分配优先级的任务的第二队列2。如果存在任何此类任务,则辅助任务调度逻辑304优先地从第一队列1调度任务,如果没有,则从第二队列2调度任务。也就是说,仅当第一队列1中不存在任务时,辅助任务调度逻辑304才可以从第二队列2调度任务进行处理。
在示例中,可以使用链表实现用于待调度任务的如本文所述的队列。链表可以用于定义多个任务的顺序,该顺序与它们在存储器中的物理放置无关。例如,链表可以用于识别构成一个任务的光线。相同的链表存储器可以用于将任务的最后光线链接到下一个任务的第一光线。每个队列的专用逻辑可以初始化为空的,并且当将第一任务添加到队列中时,任务中的第一光线和最后光线也存储为队列的第一和最后条目。如果要将另一个任务添加到队列中,则更新队列中的最后光线,以链接到其被添加到的任务中的第一光线(并且新任务的最后光线将保存为队列的最后光线)。当从队列中读出任务时,如果读取到达队列中最后一个任务的最后光线,则光线ID匹配队列中最后记录条目的事实可以指示队列现在为空。
在一些示例中,可以通过在调度未分配优先级的任务(即,非优先任务)之前施加延迟,进一步优先调度已经分配了优先级的任务。这可以以不同方式实施——例如,如果优先任务不能立即可用于调度,则可以在调度任何类型的任务之后实施延迟,或者在其他实施方式中,仅可以在调度非优先任务之后实施延迟,以防止另一个非优先任务被立即调度(即,调度延迟可以在非优先任务之间实施)。无论具体实施方式如何,在这些示例中,存在这样的情况:即使在第一队列1中当前未排列任何(即,零个)已经分配了优先级的任务,辅助任务调度逻辑304也可以在调度第二队列2中排队的未分配优先级的任务之前作出延迟。例如,延迟可以是1000个时钟周期或10,000个时钟周期。此延迟为已分配优先级的任务提供了更多时间以到达辅助任务调度逻辑304,并且因此优先于未分配优先级的任务得到调度。换句话说,在调度未分配优先级的任务之前,辅助任务调度逻辑304可以延迟一段时间而不调度所述任务。如果在该段时间内已分配优先级的任务变得可用于调度,则辅助任务调度逻辑304可以优先于未分配优先级的任务调度已分配优先级的任务。如果在该段时间内没有已分配优先级的任务变得可用于调度,则辅助任务调度逻辑304可以调度未分配优先级的任务。
如本文中所述,与任务有关的中间数据占用存储器,直到从该任务导出的递归系列任务完成处理为止。当调度未分配优先级的任务时,用于存储与该任务相关的中间数据的存储器不再可用于存储与已分配优先级的任务相关的中间数据,并且可能长时间不可用(因为仅当其所有后裔任务都已完成时,一项任务才完成,并且释放其分配的存储器)。在已分配优先级的任务变得可用于调度,并且在调度未分配优先级的任务之后很快被调度的情况下,该时间段可能更长。这是因为,根据本文所述的原理,从已分配优先级的任务导出的任务随后被分配优先级,由此当未分配优先级的任务同时可用于调度时,会优先于从那些任务导出的任务被调度——当所述非优先和优先任务迅速相继调度时,其可能性增大。因此,在用于存储与未分配优先级的任务有关的中间数据的存储器变得再次可用之前的时间量可以更大。因此,如本文所述的延迟可以是有利的,以便避免在已分配优先级的任务变得可用于调度之前不久调度未分配优先级的任务。
延迟可以是自适应的。在示例中,所述时间段可以取决于可用于光线跟踪系统存储与光线跟踪系统中存在的任务有关的中间数据的存储器的量而自适应。例如,可用存储器越接近饱和,可以施加越长的延迟。在另一示例中,所述时间段可以取决于在光线跟踪系统中活动的辅助任务的数目而自适应。例如,在光线跟踪系统中活动的辅助任务的数目越大,就可以施加越长的延迟。在其它示例中,仅在可用存储器量下降到低于特定阈值时才可以施加延迟(或换句话说,如果可用存储器量超过特定阈值,则可以将延迟减少到零)。
返回到辅助任务构建逻辑306,收集到辅助任务中的多个光线中的每一个可能已经被相同父任务的光线调用。这可以在与该父任务相关联的多个光线与相同对象相互作用时发生。或者,辅助任务可以包括对应于从两个或更多个不同父任务发射的二次光线的实例。在这种情况下,优先级分配逻辑308-2可以被配置成将次要优先级分配给已分配优先级但本身并非从已分配优先级的基本任务导出的辅助任务的每个二次光线。辅助任务构建逻辑306可以通过指定哪些二次光线已被分配次要优先级来更新寄存器组310。这可以通过例如针对寄存器组310中指定该二次光线的RID的条目分配次要优先级标志来实现。从已分配次要优先级的二次光线导出的任何二次光线也可以继承该次要优先级,例如,因为如本文所述,当调用子光线时,它使用与其父光线相同的RID。
当辅助任务构建逻辑306构建已经向其中收集了至少一个从已分配次要优先级的二次光线导出的二次光线并且未向其中收集(即,零个)从已分配优先级的基本任务导出的二次光线的辅助任务时,优先级分配逻辑308-2可以被配置成向该辅助任务分配次要优先级。优先级分配逻辑308-2可以通过检查那些二次光线(例如,子光线)的RID来确定哪些二次光线(例如,子光线)是从已分配次要优先级的二次光线(例如,父光线)导出的。在示例中,优先级分配逻辑308-2可以检查二次光线的RID,并且确定是否已经针对寄存器组310中的该RID分配了次要优先级标志。应理解,优先级分配逻辑308-2可能需要在次要优先级被分配给该辅助任务之前,向辅助任务中已经收集了不同阈值数目的从已分配次要优先级的二次光线导出的二次光线。在示例中,阈值数目可以被确定为收集到辅助任务中的光线总数的百分比。例如,阈值数目可以是收集到辅助任务中的光线总数的5%。如本文中所述,由辅助任务构建逻辑306构建的辅助任务被转发到辅助任务调度逻辑304。
为了完整起见,要指出的是,在一些情况下,可能期望为所有生成的新光线分配次要优先级。例如,如果可用存储器的量下降到特定阈值以下(例如,在与上文考虑的在执行非优先任务之前引入延迟的相同情况下),可能有益的是为新生成的光线分配次要优先级,即使它不是从先前分配了次要优先级的光线导出的。然后,这些光线将被收集到分配了次要优先级的新任务中,新任务继而将相对于没有优先级的任务(例如,在满足阈值条件之前创建的任务)被优先化。这可以有助于使基本任务完成(即使它们未被标记为优先任务),从而释放额外资源。
辅助任务调度逻辑304可以被配置成优先于未分配优先级的其他辅助任务调度已经分配了次要优先级的辅助任务。此方法的优点在于,对从收集到具有从已分配优先级的基本任务导出的光线的辅助任务中的二次光线导出的后裔光线的处理进行部分地优先化,以便鼓励那些后裔光线完成处理,使得可以完成该辅助任务的处理。也就是说,此方法防止了从如下二次光线导出的后裔光线显著延迟该辅助任务的处理,所述二次光线(i)本身并非从已分配优先级的基本任务导出,但是(ii)已被收集到具有从已分配优先级的基本任务导出的光线的辅助任务中。辅助任务调度逻辑304可以被配置成优先于已分配次要优先级的辅助任务调度已分配优先级的辅助任务。
返回到其中辅助任务调度逻辑304包括待调度任务的队列的示例性实施方式,辅助任务调度逻辑304还可以包括针对已分配次要优先级的任务的第三队列3。如果存在任何此类任务,则辅助任务调度逻辑304可以优先地从第一队列1调度已分配优先级的任务,如果没有,则可以从第三队列3调度已分配次要优先级的任务。如果第三队列3中未排列已分配次要优先级的任务,则可以从第二队列2调度未分配优先级的任务。换句话说,辅助任务调度逻辑304可以被配置成仅在第一队列1中不存在任务并且第三队列3中不存在任务时才从第二队列2调度任务进行处理,并且仅在第一队列1中不存在任务时才从第三队列3调度任务进行处理。
可以通过在调度已分配次要优先级的任务和未分配优先级的任务之前施加延迟,进一步优先调度已分配优先级的任务。亦即,即使在第一队列1中当前未排列任何(即,零个)已经分配了优先级的任务,辅助任务调度逻辑304也可以在调度第三队列3中排队的已分配次要优先级的任务和第二队列2中排队的未分配优先级的任务之前作出延迟。换句话说,在调度未分配优先级的任务之前,辅助任务调度逻辑304可以延迟一段时间而不调度所述任务。如果在该段时间内已分配优先级的任务变得可用于调度,则辅助任务调度逻辑304可以优先于未分配优先级的任务调度已分配优先级的任务。如果在该段时间内已分配次要优先级的任务变得可用于调度,则辅助任务调度逻辑304可以优先于未分配优先级的任务调度已分配次要优先级的任务。如果在该段时间内没有已分配优先级或次要优先级的任务变得可用于调度,则辅助任务调度逻辑304可以调度未分配优先级的任务。
下一任务逻辑312可以被配置成接收如下内容作为输入:来自基本任务分配逻辑302的基本任务;来自辅助任务调度逻辑304的辅助任务;以及来自存储器206的待恢复处理的父任务(无论是基本任务还是辅助任务)。下一任务逻辑312可以被配置成将待处理的下一任务输出到处理逻辑214。下一任务逻辑312可以输出待处理的下一任务,而不管是否已将优先级分配给作为输入接收的任务。例如,下一任务逻辑312可以基于先进先出的原则操作。也就是说,下一任务逻辑312可以包括先进先出缓冲器。备选地,基本任务分配逻辑302、辅助任务调度逻辑304和存储器206中的每一个可以指示任务(例如,分别为新基本任务、辅助任务或待恢复的父任务)是否可用于处理。下一任务逻辑312可以被配置成使用“轮询”(例如,圆形)方法从基本任务分配逻辑302、辅助任务调度逻辑304和存储器206输出用于处理的任务。也就是说,下一任务逻辑312可以被配置成依次从这些任务源中的每一个输出用于处理的任务。下一任务逻辑312可以被配置成,如果未指示任务在该特定时间可用于处理,则在一轮中跳过源(即,不从该源输出用于处理的任务)。
下一任务逻辑312可以被配置成暂时禁用输出基本任务以供处理,同时继续输出从存储器返回的辅助任务和/或暂停的父任务以供处理。这是因为从存储器返回的辅助任务和/或暂停的父任务可能比新基本任务更接近其最大递归深度,并且在任何情况下,通常比新基本任务更不可能发出新光线,并且因此可能比新基本任务更接近于完成该任务的处理及该任务及其递归系列后裔任务用于存储中间数据的存储器的释放。在示例中,下一任务逻辑312可以被配置成评估可用于光线跟踪系统用于存储与存在于光线跟踪系统中的任务有关的中间数据的存储器的量,并且如果确定可用存储器的量低于阈值,则临时禁用基本任务的输出。在另一示例中,下一任务逻辑312可以被配置成评估在光线跟踪系统中活动的辅助任务的数目,并且如果确定在光线跟踪系统中活动的辅助任务的数目高于阈值,则暂时禁用基本任务的输出。
当已分配优先级的基本任务完成处理时,优先级分配逻辑308-3可以被配置成将优先级分配给在光线跟踪系统中活动的另一基本任务。通过这种方式,维持了已分配优先级的基本任务的数目。例如,优先级分配逻辑308-3可以将优先级分配给在光线跟踪系统中活动的未分配优先级的“下一个最老的”基本任务。优先级分配逻辑308-3可以参考存储在寄存器组310中的光线识别信息,以便确定(i)已分配优先级的基本任务何时已完成处理,以及(ii)向剩余活动基本任务中的哪些分配优先级(例如,尚未分配优先级的其余基本任务中的“最老”任务,或基于与完成的基本任务和尚未分配优先级的其余基本任务相关联的光线的空间起点)。在示例中,基本任务分配逻辑302可以被配置成按顺序将RID组分配给新的基本任务。在此示例中,优先级分配逻辑308-3可以通过在序列中识别在对应于已分配优先级的任务的最后一组RID之后的尚未分配优先级的最早的一组RID,从而确定要分配优先级的下一基本任务。在另一示例中,寄存器组310可以维护与每个活动基本任务相关联并且指示该任务的年龄的年龄计数器。在此示例中,优先级分配逻辑308-3可以通过检查所述年龄计数器来确定要分配优先级的下一个最老的基本任务。优先级分配逻辑308-3可以通过识别哪些基本任务已被分配优先级来更新寄存器组310。例如,优先级分配逻辑308-3可以更新寄存器组310,以通过针对指定该基本任务中的所有一次光线共有的RID的最高有效位的条目分配优先级标志来反映已向基本任务分配了优先级。
换句话说,最初未被优先级分配逻辑308-1分配优先级的基本任务可以稍后被优先级分配逻辑308-3分配优先级。这样的基本任务以及从其导出的递归系列辅助任务可以通过做为未分配优先级的任务被调度而开始处理。然后,在优先级分配逻辑308-3将优先级分配给基本任务之后,可以将从该基本任务导出的光线被收集到其中的任何辅助任务作为已分配优先级的任务进行调度,如本文所述。
在不太优选的示例中,可以总是将优先级分配给被分配了一组或多组RID的基本任务。也就是说,如本文所述,可以有设定数目(例如,十六)的组的RID能够分配给基本任务。例如,这些组的RID可以标记为RID1、RID2……RID16。可以为分配了这些组的RID的子集的基本任务分配优先级。例如,分配给RID1到RID5的任一个的任何任务可以在被分配时被分配优先级。当那些基本任务中的一个完成处理时,优先级分配逻辑308-1或308-3可以将优先级分配给被分配了该组RID的新基本任务。
当已分配优先级的基本任务完成处理时,优先级分配逻辑308-3可以被配置成清除(例如,取消分配)分配给已收集到具有从该基本任务导出的二次光线的辅助任务中的二次光线的任何次要优先级。优先级分配逻辑308-3可以更新寄存器组310以反映这一点。这可以通过例如针对寄存器组310中指定那些二次光线的RID的条目取消分配先前分配的次要优先级标志来实现。与完成的基本任务相关联的光线的RID(即,在源自该基本任务的着色器调用链中)可以被重新分配给新任务,这可以涉及重新初始化这些特定RID的标记。
上文所描述的优先化方案涉及递归任务(即,运行着色器的任务,其中,该任务的光线有可能产生子光线)。也可以在光线跟踪期间使用非递归任务。非递归任务的示例是遍历任务。任务调度逻辑可以优先于递归任务调度非递归任务,因为这些任务通常可以快速处理,通常不需要存储器分配来存储中间数据,并且可以提供处理递归任务所需的信息。返回到其中辅助任务调度逻辑304包括待调度任务的队列的示例性实施方式,辅助任务调度逻辑304还可以包括用于非递归任务任务的第四队列4。如果存在任何此类任务,则辅助任务调度逻辑304可以优先地从第四队列4调度任务,如果没有,则可以如本文前面所述从第一、第二或第三队列调度任务。
图4是根据本文所述的示例的在光线跟踪系统中调度处理的方法的流程图。在以下段落中,将参考个体基本任务的处理来描述图4。光线跟踪系统可以根据本文参考图4所述的相同原理来处理每个基本任务。
在步骤S402中,分配基本任务以供处理。此步骤可以由基本任务分配逻辑302来执行,如本文参考图3所述。基本任务是本身没有父任务的任务。基本任务是实施光线生成着色器以便发出一个或多个一次光线的任务。
在步骤S404中,确定是否将优先级分配给基本任务。此步骤可以由优先级分配逻辑308-1来执行,如本文参考图3所述。出于本示例的面对,优先级被分配给基本任务。
在步骤S406中,输出基本任务以供处理。此步骤可以由下一任务逻辑312来执行,如本文参考图3所述。
在步骤S408中,执行基本任务的指令。此步骤可以由处理逻辑214来执行,如本文参考图2和图3所述。具体地,在此第一迭代中,针对多个一次光线执行基本任务。在此示例中,基本任务包括对应于一次光线的着色器程序的至少一个实例,所述着色器程序的所述实例包括调用子着色器的着色器递归指令。例如,对基本任务的实例的处理可以使得至少一个子光线被发射。如本文所述,着色器递归指令的两个示例是TraceRay指令和CallShader指令。
在步骤S410中,确定基本任务的任何实例的执行是否达到递归指令。此步骤可以由处理逻辑214来执行,如本文参考图2和图3所述。如果否,则该方法进行到步骤S420,在此,确定任务的执行是否已达到着色器程序的结束,即,是否仍有更多的任务的指令要执行。此步骤可以由处理逻辑214来执行,如本文参考图2和图3所述。如果不是(即,如果仍有更多基本任务的指令要执行),则方法进行到步骤S408,并且基本任务的指令的执行继续。
当基本任务到达着色器递归指令时,方法从步骤S410进行到步骤S412。在步骤S412中,针对多个光线的基本任务的处理被暂停(即,在处理逻辑214上暂时结束),并且针对基本任务的中间数据被写入存储器(例如,本文参考图2和图3描述的存储器206)。以此方式,响应于着色器递归指令而暂停基本任务的处理。存储器用于保持基本任务的中间数据,并且可能使其部分(例如,所存储的有效载荷数据)由与基本任务发射的子光线相关联的子着色器更新。基本任务使用存储器206来保存信息(即,状态数据、任务信息和有效载荷数据)以在步骤S410中达到的着色器递归指令之后使用。由于基本任务的执行已暂停(即,在处理逻辑214上暂时结束),基本任务的当前状态(包括状态数据、任务信息和有效载荷数据)被保持,因此当基本任务恢复(如下文进一步详细描述的)时,可以修复基本任务的该状态,使得可以恢复执行基本任务。
而且,在步骤412中,可以为基本任务初始化计数器,该计数器用于跟踪由该任务发射的多少个子光线尚未完成处理。例如,计数器可以针对由基本任务发射但尚未完成处理的每个子光线递增一次。
在步骤S412中暂停执行基本任务之后,方法进行到步骤S414。在步骤S414中,由基本任务发射的待根据相同子着色器程序处理的一个或多个子光线被收集到子任务中。此步骤可以由辅助任务构建逻辑308-2来执行,如本文参考图3所述。辅助任务(例如,子任务)是具有父任务的任务(例如,在此迭代中,父任务是基本任务)。辅助任务是包括与待针对其执行该子着色器程序的相应的多个二次光线对应的辅助着色器程序的多个实例的任务。辅助任务中的多个辅助实例中的每一个可以对应于从同一父任务(例如,基本任务)发射的子光线。这可以在与基本任务相关联的多个光线与同一对象相互作用时发生。或者,辅助任务可以包括对应于由两个或更多个不同父任务发射的多个二次光线的实例。也就是说,由基本任务发射的子光线和由一个或多个其它任务发射的光线可以被收集到子任务中。
在步骤S416中,确定是否将优先级分配给子任务。此步骤可以由优先级分配逻辑308-2来执行,如本文参考图3所述。在此示例中,基于子任务的一个或多个子光线从已分配优先级的基本任务导出而向子任务分配优先级。亦即,如果子任务的一个或多个子光线从已分配优先级的基本任务导出,则向子任务分配优先级。换言之,响应于子任务的一个或多个子光线从已分配优先级的基本任务导出,向子任务分配优先级。
任选地,也在步骤S416中,确定是否向子任务的任何光线分配次要优先级。此步骤可以由优先级分配逻辑308-2来执行,如本文参考图3所述。出于此示例的目的,可以假设,收集到子任务中的一个或多个二次光线是从未分配优先级的任务(例如,基本任务)导出的,并且将该次要优先级分配给那些光线。
在步骤S418中,优先于尚未分配优先级的待调度的一个或多个其他任务调度该子任务进行处理。此步骤可以由辅助任务调度逻辑304来执行,如本文参考图3所述。
该方法返回到步骤S406,在此,在此迭代中,输出子任务以供处理。此步骤可以由下一任务逻辑312来执行,如本文参考图3所述。
在步骤S408中,执行子任务的指令。此步骤可以由处理逻辑214来执行,如本文参考图2和图3所述。如本文所述,着色器递归指令指示要根据子任务处理的每个光线的有效载荷数据。在步骤S408中执行子任务可以更新分配给基本任务的存储器中的所述所指示的有效载荷数据。
该方法在步骤S408、S410、S420和S412中针对子任务以与上文针对基本任务所述的相同方式继续进行。在此示例中,子任务包括对应于子光线的着色器程序的至少一个实例,所述着色器程序的所述实例包括调用子着色器的着色器递归指令。例如,对子任务的实例的处理可以使得至少一个孙光线被发射。当达到这种着色器递归指令时,在步骤S412中,以与上文针对基本任务所描述的相同方式暂停子任务的执行,并将子任务的中间数据写入存储器。
在步骤S412中暂停执行子任务之后,该方法进行到步骤S414。在步骤S414中,由子任务发射的待根据相同着色器程序处理的一个或多个孙光线被收集到孙任务中。此步骤可以由辅助任务构建逻辑308-2来执行,如本文参考图3所述。
在步骤S416中,确定是否将优先级分配给孙任务。此步骤可以由优先级分配逻辑308-2来执行,如本文参考图3所述。如本文所述,在该示例中,从两个或更多个不同父任务(例如,基本任务和至少一个其它任务)导出的二次光线被收集到该子任务中。收集到子任务中的那些二次光线中的一个或多个是从未分配优先级的任务(例如,不同的基本任务)导出的,并且因此在步骤S416的第一迭代中这些二次光线被分配次要优先级。
在第一示例中,从在步骤S404中被分配优先级的基本任务导出的至少一个孙光线被收集到孙任务中。在此第一示例中,在步骤S416中,基于该孙任务的一个或多个光线从已分配优先级的基本任务导出而向该孙任务分配优先级。此步骤可以由辅助任务调度逻辑304来执行,如本文参考图3所述。该方法在步骤S418、S406、S408、S410和S420中针对这样的孙任务以与上文针对子任务所述的相同方式继续进行。
在第二示例中,由分配了次要优先级的子光线发射的一个或多个孙光线被收集到孙任务中,并且收集到孙任务中的任何光线(即零个)都不是从已分配优先级的基本任务导出的。在此第二示例中,在步骤S416中,将次要优先级分配给该孙任务。在步骤S418中,优先于尚未分配优先级的待调度的一个或多个其他任务调度这样的孙任务进行处理。尽管如此,在步骤S418中,优先于以及分配了次要优先级的孙任务而调度分配了优先级的一个或多个其他任务。此步骤可以由辅助任务调度逻辑304来执行,如本文参考图3所述。该方法在步骤S406、S408、S410和S420中针对这样的孙任务以与上文针对子任务所述的相同方式继续进行。
如果孙任务包括调用着色器递归指令的至少一个实例,则可以再次执行步骤S412到S418周围的循环,使得孙任务的多个实例中的一个或多个调用另外的辅助任务(例如,以该孙任务作为其父任务的重孙任务)。基本任务的每个实例可以继续递归直到最大递归深度,在该处防止任何进一步的递归(图3中未示出)。API可以定义最大递归深度。例如,最大递归深度可以是31。
在某个点,该方法将针对辅助任务(例如,孙任务或后裔任务的后代)执行步骤S420,并且将确定已到达辅助任务的末端,从而从步骤S420采取“是”路线。从其父任务(例如,来自步骤S412到S418的先前迭代的辅助任务)提供给该辅助任务的有效载荷可能已经通过执行该辅助任务或通过执行作为辅助任务的后代的任何任务而被修改。
然后,所述方法进行到步骤S422,在此确定任务是否为基本任务。换句话说,确定基本任务(即,初始父任务,例如,实现光线生成着色器)当前是否是活动的。在此迭代中,任务是辅助任务,因此方法进行到S424。
在步骤S424中,对于已完成处理的辅助任务中的每个实例,在步骤S412中初始化的计数器递减(如本文所述,辅助任务可以包括与一个或多个父任务相关联的实例)。如果来自已完成处理的辅助任务的实例使得辅助任务的父任务中的一个或多个的计数器递减至0(例如,指示该父任务发射的所有子光线已完成处理),则这指示该父任务准备好恢复。
在步骤S426中,读取待恢复的父任务的中间数据。例如,可以从分配给父任务的存储器读取该任务的状态数据、任务信息和有效载荷数据中的一者或多者。然后,该方法可以进行到步骤S406,其中,在此迭代中,待恢复的父任务被输出以供处理。此步骤可以由下一任务逻辑312来执行,如本文参考图3所述。
在步骤S408中,执行父任务的更多指令,即,在使得一个或多个子光线被发射的着色器递归指令之后的父任务的指令。此步骤可以由处理逻辑214来执行,如本文参考图2和图3所述。以此方式,恢复父执行任务。
然后,所述方法可以如上文所述从步骤S408继续进行。当该方法到达步骤S422并且确定任务为基本任务(即,初始父任务是活动的)时,针对基本任务的处理完成。此时,光线跟踪系统202已经确定了渲染空间中的多个采样位置(对应于基本任务的多个一次光线)的渲染值,该渲染值可以是例如正渲染的图像的像素的像素颜色值。在步骤S428中,可以解除分配基本任务。在此阶段,释放了基本任务用于存储中间数据的存储器,以及从基本任务导出的递归系列辅助任务中每个任务使用于存储中间数据的存储器。
最后,在步骤S430中,将优先级分配给在光线跟踪系统中活动的不同基本任务。此步骤可以由优先级分配逻辑308-3来执行,如本文参考图3所述。任选地,也在步骤S430中,清空被分配给已收集到具有从在步骤S402中分配的基本任务导出的二次光线的辅助任务中的二次光线的任何次要优先级。此步骤可以由优先级分配逻辑308-3来执行,如本文参考图3所述。
图5示出了可以在其中实施本文所描述的光线跟踪系统的计算机系统。计算机系统包括CPU 502、存储器206、光线跟踪单元204和其他装置504,诸如显示器506、扬声器508和相机510。存储器206包括存储器块212。计算机系统的部件可通过通信总线512彼此通信。
图2和图3的光线跟踪系统202被示为包括若干功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应理解,本文中描述为由光线跟踪系统形成的中间值不需要由光线跟踪系统在任何时间点物理地生成,并且可以只表示方便描述由光线跟踪系统在其输入与输出之间执行的处理的逻辑值。
本文所述的光线跟踪系统可以包含在集成电路上的硬件中。本文所述的光线跟踪系统可以被配置成执行本文所述的任一种方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实施。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实施方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码当在处理器上执行时执行指定任务。本文中描述的算法和方法可以由执行码的一个或多个处理器执行,所述码使处理器执行算法/方法。计算机可读存储介质的示例包含随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器装置。
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如C、Java或OpenCL等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是或包括任何种类的通用或专用处理器,诸如CPU、GPU、NNA、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可包括一个或多个处理器。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,所述集成电路定义数据集当在集成电路制造系统中处理(即,运行)时,将所述系统配置成制造被配置成执行本文所描述的任一种方法的光线跟踪系统,或者制造包括本文所描述的任何设备的光线跟踪系统。集成电路定义数据集可以是例如集成电路描述。
因此,可提供一种在集成电路制造系统处制造如本文所描述的光线跟踪系统的方法。此外,可提供一种集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统中处理时使得执行制造光线跟踪系统的方法。
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包含作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如,OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可以在计算机系统上处理,所述计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,所述软件环境包括电路元件的定义和用于组合这些元件以便生成由所述表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
现在将参考图6描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置为制造光线跟踪系统的示例。
图6示出了集成电路(IC)制造系统602的示例,所述集成电路制造系统被配置为制造如本文的任一示例中所述的光线跟踪系统。具体地说,IC制造系统602包括布局处理系统604和集成电路生成系统606。IC制造系统602被配置为接收IC定义数据集(例如,定义如本文的任一示例中所述的光线跟踪系统),处理IC定义数据集,并根据IC定义数据集来生成IC(例如,其包含如本文的任一示例中所述的光线跟踪系统)。对IC定义数据集的处理将IC制造系统602配置为制造包含如本文的任一示例中所述的光线跟踪系统的集成电路。
布局处理系统604被配置为接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统604确定了电路布局时,它可以将电路布局定义输出到IC生成系统606。电路布局定义可以是例如电路布局描述。
如本领域已知的,IC生成系统606根据电路布局定义来生成IC。例如,IC生成系统606可以实现生成IC的半导体装置制造工艺,其可以涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成IC。替代性地,提供给IC生成系统606的电路布局定义可以是计算机可读代码的形式,IC生成系统606可以使用所述计算机可读代码来形成用于生成IC的合适掩模。
由IC制造系统602执行的不同过程可以全部在一个位置例如由一方来实现。替代性地,IC制造系统602可以是分布式系统,使得过程中的一些可以在不同位置执行,且可以由不同方执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其它示例中,在集成电路制造系统处对集成电路定义数据集的处理可以将系统配置为制造光线跟踪系统,而无需处理IC定义数据集以确定电路布局。例如,集成电路定义数据集可以定义例如FPGA的可重新配置的处理器的配置,并且对所述数据集进行的处理可以将IC制造系统配置成(例如,通过将配置数据加载到FPGA)生成具有所述定义的配置的可重新配置的处理器。
在一些实施例中,当在集成电路制造系统中被处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,通过集成电路制造定义数据集,以上文参考图6所述的方式对集成电路制造系统进行配置,可以使得制造如本文所述的装置。
在一些示例中,集成电路定义数据集可以包含在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图6所示的示例中,IC生成系统可以进一步由集成电路定义数据集配置成在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实施例相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实施例可以提高性能。性能改进可以包含计算性能提高、延迟减少、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施方式之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和系统的物理实施方式的改进(诸如硅面积减小)的概念可以针对性能提高进行折中。例如,这可以通过在预定义面积预算内制造模块的多个示例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。

Claims (20)

1.一种在光线跟踪系统中调度处理的方法,所述方法包括:
向子任务中收集子光线;
基于所述子任务的一个或多个子光线从已分配优先级的任务导出而向所述子任务分配优先级;以及
优先于尚未分配优先级的待调度的一个或多个其他任务调度所述子任务进行处理。
2.根据权利要求1所述的方法,还包括:
向父任务分配优先级;以及
处理所述父任务以便发射至少一个子光线;
其中,所述向子任务中收集子光线包括向所述子任务中收集由所述父任务发射的一个或多个子光线。
3.根据权利要求2所述的方法,还包括优先于尚未分配优先级的待调度的一个或多个其他任务调度所述父任务进行处理。
4.根据权利要求2或3所述的方法,其中,所述父任务是基本任务。
5.根据权利要求2或3所述的方法,其中,所述父任务的一个或多个父光线是从已分配优先级的基本任务导出的。
6.根据权利要求4所述的方法,其中,多个基本任务在特定时间在所述光线跟踪系统中是活动的。
7.根据权利要求6所述的方法,还包括根据所述基本任务中的每一个的相对年龄将优先级分配给所述多个基本任务中的一个或多个基本任务。
8.根据权利要求6所述的方法,还包括将优先级分配给所述多个基本任务中的多个基本任务,其中,能被分配优先级的在所述特定时间在所述光线跟踪系统中活动的基本任务的数目限于预定义数目。
9.根据权利要求4所述的方法,其中,基本任务是本身没有父任务的任务。
10.根据权利要求4所述的方法,其中,基本任务是实施光线生成着色器以便发出一个或多个一次光线的任务。
11.根据权利要求1至3中任一项所述的方法,还包括向所述子任务的一个或多个子光线分配次要优先级,其中,所述一个或多个子光线是从尚未分配优先级的任务导出的。
12.根据权利要求11所述的方法,还包括:
处理所述子任务以便发射一个或多个孙光线;
向孙任务中收集所述子任务关于已分配所述次要优先级的子光线所发射的一个或多个孙光线,收集到所述孙任务中的任何所述光线都不是从已分配优先级的基本任务导出的;
为所述孙任务分配次要优先级;以及
优先于尚未分配优先级的待调度的一个或多个其他任务调度所述孙任务进行处理。
13.根据权利要求12所述的方法,其中,调度所述孙任务进行处理包括在已分配次要优先级的所述孙任务之前调度已分配优先级的一个或多个其它任务。
14.根据权利要求1至3中任一项所述的方法,还包括在调度尚未分配优先级的任务之前,延迟一段时间而不调度所述任务。
15.根据权利要求14所述的方法,还包括,如果在所述一段时间内已分配优先级的任务变得可用于调度,则优先于尚未分配优先级的所述任务调度已分配优先级的所述任务。
16.根据权利要求14所述的方法,其中,所述一段时间取决于可用于所述光线跟踪系统存储与所述光线跟踪系统中存在的任务有关的中间数据的存储器的量而自适应。
17.根据权利要求1至3中任一项所述的方法,还包括:
提供针对已分配优先级的任务的第一队列和针对尚未分配优先级的任务的第二队列;以及
仅当所述第一队列中不存在任务时,才从所述第二队列调度任务进行处理。
18.根据权利要求1至3中任一项所述的方法,其中,每个任务包括与待针对其执行所述着色器程序的相应的多个光线对应的着色器程序的多个实例。
19.一种被配置成处理光线的光线跟踪系统,其中,所述光线跟踪系统包括任务调度逻辑,所述任务调度逻辑被配置成:
向子任务中收集子光线;
基于所述子任务的一个或多个子光线从已分配优先级的任务导出而向所述子任务分配优先级;以及
优先于尚未分配优先级的待调度的一个或多个其他任务调度所述子任务进行处理。
20.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质上存储有计算机可读指令,当在计算机系统上执行时,所述指令使所述计算机系统执行在光线跟踪系统中调度处理的方法,所述方法包括:
向子任务中收集子光线;
基于所述子任务的一个或多个子光线从已分配优先级的任务导出而向所述子任务分配优先级;以及
优先于尚未分配优先级的待调度的一个或多个其他任务调度所述子任务进行处理。
CN202210723936.1A 2021-06-29 2022-06-24 在光线跟踪系统中调度处理 Pending CN115543553A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP21386040.6A EP4113448A1 (en) 2021-06-29 2021-06-29 Scheduling processing in a ray tracing system
EP21386040.6 2021-06-29

Publications (1)

Publication Number Publication Date
CN115543553A true CN115543553A (zh) 2022-12-30

Family

ID=77155725

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210723936.1A Pending CN115543553A (zh) 2021-06-29 2022-06-24 在光线跟踪系统中调度处理

Country Status (3)

Country Link
US (1) US20230016927A1 (zh)
EP (1) EP4113448A1 (zh)
CN (1) CN115543553A (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022159494A2 (en) * 2021-01-19 2022-07-28 Krikey, Inc. Three-dimensional avatar generation and manipulation

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2505818B (en) * 2011-06-16 2016-02-10 Imagination Tech Ltd Graphics processor with non-blocking concurrent architecture
US9607426B1 (en) * 2013-12-20 2017-03-28 Imagination Technologies Limited Asynchronous and concurrent ray tracing and rasterization rendering processes
US10235338B2 (en) * 2014-09-04 2019-03-19 Nvidia Corporation Short stack traversal of tree data structures
US10957095B2 (en) * 2018-08-06 2021-03-23 Intel Corporation Programmable ray tracing with hardware acceleration on a graphics processor
US10963299B2 (en) * 2018-09-18 2021-03-30 Advanced Micro Devices, Inc. Hardware accelerated dynamic work creation on a graphics processing unit

Also Published As

Publication number Publication date
EP4113448A1 (en) 2023-01-04
US20230016927A1 (en) 2023-01-19

Similar Documents

Publication Publication Date Title
US11625885B2 (en) Graphics processor with non-blocking concurrent architecture
US11315302B2 (en) Dedicated ray memory for ray tracing in graphics systems
US20120180068A1 (en) Scheduling and communication in computing systems
JP6336399B2 (ja) マルチスレッドコンピューティング
CN110717989A (zh) 可缩放并行镶嵌
US20230334748A1 (en) Control stream stitching for multicore 3-d graphics rendering
CN114968549A (zh) 用于向任务分配资源的方法和设备
CN113342513A (zh) 并行处理系统中的资源分配
EP3975127A1 (en) Memory allocation for recursive processing in a ray tracing system
US20240231914A1 (en) Memory allocation for 3-d graphics rendering
CN115543553A (zh) 在光线跟踪系统中调度处理
CN112860420A (zh) 基于硬件虚拟化的数据处理方法及装置
CN111562979B (zh) 内存分配
US20220114013A1 (en) Memory allocation in a ray tracing system
US20240345888A1 (en) Task dependencies
EP4439293A1 (en) Task dependencies
EP4050479A1 (en) Task repacking in a graphic pipeline
CN116266333A (zh) 在处理逻辑中处理工作项目
CN116433462A (zh) 构建用于光线跟踪的加速结构

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