一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

光线跟踪系统中的存储器分配的制作方法

2022-03-31 10:53:28 来源:中国专利 TAG:


1.本公开涉及分配存储器以在光线跟踪系统中进行递归处理。


背景技术:

2.光线跟踪是一种计算渲染技术,其用于通过从渲染场景图像的视点在场景中跟踪光路(“光线”)来渲染场景的图像。光线可以被建模为源自所述视点,并通过渲染空间的采样位置进入场景。被渲染图像的每个像素可对应于渲染空间的一个或多个采样位置。源自所述视点的光线被称为“一次光线”。图1示出了在光线跟踪系统中如何处理光线。在步骤s102中,针对一个或多个一次光线执行光线生成着色器以便处理(多个)光线。“着色器”(可以被称为“着色器程序”)是一种软件模块,该软件模块包括可以在处理单元上执行的一个或多个计算机可读指令。由着色器执行的功能是灵活的,并且由编写着色器代码的程序员定义。当光线横越场景时,其可能与场景内的一个或多个物体相交。可以对光线和其相交的物体之间的相交建模以创建逼真的视觉效果。例如,针对一次光线执行的第一着色器(“光线生成着色器”)可以包括指令(“traceray”指令),所述指令在步骤s104中使得执行相交测试过程,从而找到光线与场景中的一个或多个物体的一个或多个交点。相交测试过程可以在硬件或软件中执行,但通常在硬件中(例如,使用固定功能电路)执行,因为通常认为处理效率比相交测试过程的功能的灵活性更重要。在步骤s106中,响应于找到光线与物体的交点,针对该交点执行着色器。在步骤s106中执行(或“运行”)的着色器可以是在vulkan和directx光线跟踪规范中定义的最近命中着色器、错过着色器、相交着色器或任何命中着色器。程序员编写着色器程序以定义系统如何对相交做出反应。在步骤s106中执行的着色器可以包括traceray指令,该指令使得向场景中发射一个或多个额外光线(称为“二次光线”),例如,以表示光线从相交物体的反射或光线通过物体的折射(例如,如果物体是透明的或半透明的)。作为另一示例,着色器程序可以使得向场景中发射一个或多个光线,以用于确定物体是否处于交点处的阴影中。因此,所述方法可以从步骤s106返回到步骤s104,如在图1中表示为“traceray”的虚线所示。当(在步骤s104中)找到二次光线的相交时,则可以(在步骤s106中)执行另一个着色器。以此方式,当在步骤s106中执行的着色器中包括traceray指令时,所述方法在步骤s106与s104之间递归地进行。
3.光线由定义光线起点、光线方向、最大剔除距离(“tmax”)和最小剔除距离(“tmin”)的数据来描述。光线伴有用户定义的有效载荷,当光线与场景中的几何形状相互作用时,所述有效载荷是可修改的,并且对于traceray指令的调用者是可见的。此外,根据vulkan和directx光线跟踪规范,在步骤s106中执行的着色器可以包括一个或多个“callshader”指令,该指令使得另一个着色器被执行。因此,一个着色器可以调用另一着色器,使得该方法可以在不同着色器之间递归地进行,如图1中表示为“callshader”的虚线所示。当一次光线的所有着色器都已完成时,提供一次光线的输出。此输出可以是渲染值(例如像素颜色),其将用于对应于一次光线的像素。以此方式,确定了表示场景的图像的像素的渲染值。
4.vulkan和directx是用于3d图形处理的应用程序编程接口(api),其具有光线跟踪扩展,该光线跟踪扩展定义程序员如何能够使用光线跟踪系统来渲染3d场景的图像。这些api已经开创了着色器递归的概念以用于光线跟踪系统中。如上所述,当在着色器内实施的指令使得一个或多个其它着色器被调用时,发生着色器递归。被调用着色器(其可以被称为“子”着色器)被处理为与函数调用类似,其中控制将最终返回到调用着色器(其可以被称为“父”着色器)。有效载荷数据可以从父着色器被传递到子着色器,并且子着色器可以通过更新有效载荷数据来与父着色器反向通信。
5.当使用着色器递归时,维持父着色器的一些中间数据,因此当子着色器已完成其执行时,父着色器可以继续其执行。可以在光线跟踪系统中并行处理许多光线。此外,为了获得逼真的渲染结果,光线跟踪系统可以允许大的递归深度,例如高达31的最大递归深度。因此,父着色器的中间数据的寿命可能非常长,并且在任何给定时间,可能存在许多正维持中间数据的着色器。


技术实现要素:

6.提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
7.根据本发明的第一方面,提供了一种在光线跟踪系统中处理光线的方法,所述方法包括:在按任务基础上为任务分配存储器块;处理任务中的光线,使得至少一个子光线被发射;将任务的中间数据写入所述存储器块;暂停对任务的处理;以及当任务准备好恢复时,从所述存储器块读取任务的中间数据,并且恢复对任务的处理。
8.存储器块可以是被保留用于存储任务的中间数据的连续存储器块。
9.任务的中间数据可以独立于为任何其它任务生成的中间数据而存储。
10.任务可以包括与要针对其执行着色器程序的相应的多个光线对应的着色器程序的多个实例。
11.任务的多个实例的中间数据可以被写入任务的所述所分配的存储器块。
12.任务的存储器块可以是通过执行单个分配操作而在按任务基础上分配的,其中,多个实例中的每个实例的中间数据可以被写入所述存储器块。
13.中间数据可以一个或多个有限大小的数据突发串为单位被写入存储器块并从存储器块读取。
14.任务的中间数据可以被写入存储器块的连续区域。
15.任务的中间数据可以包括由任务的多个光线共享的状态数据。
16.任务的中间数据可以包括由任务的多个光线共享的任务信息。
17.任务的中间数据可以包括任务的每个光线的有效载荷数据。
18.对任务中的光线的处理可以由在芯片上实现的处理逻辑来执行,并且可以在物理上不与处理逻辑位于同一芯片上的存储器中分配任务的存储器块。
19.在将任务的中间数据写入存储器块与从存储器块读取任务的中间数据之间,可以根据对至少一个子光线的处理来更新中间数据。
20.根据本发明的第二方面,提供了一种被配置成处理光线的光线跟踪系统,其中,所
述光线跟踪系统包括:处理逻辑;以及存储器;其中,处理逻辑被配置成:在按任务基础上为任务分配存储器中的存储器块;处理任务中的光线,使得至少一个子光线被发射;使任务的中间数据被写入所述存储器块;暂停对任务的处理;以及当任务准备好恢复时,使得从存储器块读取任务的中间数据,并且恢复对任务的处理。
21.存储器块可以是被保留用于存储任务的中间数据的连续存储器块。
22.任务的中间数据可以独立于为任何其它任务生成的中间数据而存储。
23.任务可以包括与要针对其执行着色器程序的相应的多个光线对应的着色器程序的多个实例。
24.任务的多个实例的中间数据可以被写入任务的所述所分配的存储器块。
25.任务的存储器块可以是通过执行单个分配操作而在按任务基础上分配的,其中,多个实例中的每个实例的中间数据可以被写入所述存储器块。
26.中间数据可以一个或多个有限大小的数据突发串为单位被写入存储器块并从存储器块读取。
27.任务的中间数据可以被写入存储器块的连续区域。
28.处理逻辑可以在芯片上实现,并且存储器可以物理上不与处理逻辑位于同一芯片上。
29.在将任务的中间数据写入存储器块与从存储器块读取任务的中间数据之间,可以根据对至少一个子光线的处理来更新中间数据。
30.所述光线跟踪系统可以包含在集成电路上的硬件中。可以提供一种在集成电路制造系统处制造光线跟踪系统的方法。可提供一种集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统中处理时,将所述系统配置成制造光线跟踪系统。可提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质上存储有光线跟踪系统的计算机可读描述,所述计算机可读描述当在集成电路制造系统中处理时,使集成电路制造系统制造包含光线跟踪系统的集成电路。
31.可提供一种集成电路制造系统,其包括:非暂态计算机可读存储介质,其上存储有光线跟踪系统的计算机可读描述;布局处理系统,其被配置成处理计算机可读描述以便生成包含光线跟踪系统的集成电路的电路布局描述;以及集成电路生成系统,其被配置成根据电路布局描述来制造光线跟踪系统。
32.可以提供用于执行本文所述的任一种方法的计算机程序代码。可以提供非暂态计算机可读存储介质,所述非暂态计算机可读存储介质上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使计算机系统执行本文所述的任一种方法。
33.如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
34.现在将参考附图详细描述示例,在附图中:
35.图1示出了在光线跟踪系统中递归地处理光线的方法;
36.图2示出了根据本文所述的示例的光线跟踪系统;
37.图3是根据本文所述的示例的在光线跟踪系统中递归地处理光线的方法的流程
图;
38.图4比较了同一任务的按任务存储器分配和按实例存储器分配;
39.图5示出了在其中实施光线跟踪系统的计算机系统;以及
40.图6示出了用于生成包含光线跟踪系统的集成电路的集成电路制造系统。
41.附图示出了各种示例。技术人员将理解,附图中所示的元素边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
42.通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施例,并且对所公开的实施例的各种修改对于本领域的技术人员而言将是显而易见的。
43.现在仅通过示例的方式来描述实施例。
44.如上文背景技术部分所述,着色器递归可以用于光线跟踪系统中,使得父着色器调用子着色器。当父着色器执行着色器递归指令时,父着色器调用子着色器。术语“着色器递归指令”在本文中用于指调用另一着色器的着色器中的任何指令。着色器递归指令的示例是:(i)“traceray”指令,其使得光线被发射并且使得针对发射的光线执行相交测试,其中将基于针对发射的光线的相交测试的结果执行着色器;以及(ii)“callshader”指令,其直接调用待执行的另一着色器(具有可调用着色器类型)而不执行任何光线遍历(即,相交测试)。在一些实施方式中,调用“任何命中”着色器的指令可以是着色器递归指令,例如,directx光线跟踪规范将这些指令称为“reporthit”指令,vulkan光线跟踪规范将这些指令称为“opreportintersctionkhr”指令。所有这些类型的着色器递归指令都使得调用子着色器。当着色器递归指令作为父着色器的一部分执行以由此调用子着色器时,维持父着色器的一些中间数据,使得当子着色器完成其执行时,可以恢复父着色器。
45.在本文所述的示例中,通过执行任务针对多个光线执行着色器程序,其中,任务包括对应于针对其执行着色器程序的相应的多个光线的多个实例。也就是说,可以生成包括与待针对其执行着色器程序的相应的多个光线对应的着色器程序的多个实例的任务。例如,可以通过聚集(例如,收集)与待针对其执行着色器程序的相应的多个光线对应的着色器程序的多个实例来生成任务。可以在单指令多数据(simd)处理单元上执行任务,使得针对任务的每个实例并行执行着色器程序的指令。因此,如本文所述,“任务”是待并行执行的一组实例;并且“实例”是待对其执行一系列操作的数据的集合。在本文所述的示例中,任务的实例对应于待对其执行(由着色器程序定义的)相同系列操作的相应光线。
46.可以在光线跟踪单元上将父任务保持在“解除调度等待状态”中,同时执行其所有子任务(对应于子着色器)和进一步的后裔任务,而不是将父任务(对应于父着色器)的所有中间数据写入存储器(例如,“动态随机存取存储器
”‑
dram)。当任务保持在“解除调度等待状态”时,其中间数据可以存储在着色器容易访问的缓冲器、高速缓存或寄存器中,和/或着色器可以保持被配置成处理该任务。然而,预期用于处理一次光线的整个“光线处理”操作(包括执行递归着色器)需要相当长的一段时间(可能在10,000个处理周期的量级)。如果此
整个过程在任务处于“解除调度等待状态”时完成,将难以并行运行足够的任务来实现目标光线遍历性能。除此之外,初始任务中的每个实例可以与希望启动不同着色器程序的不同图元相交。因此,并非在其子任务被执行时将父任务保持在解除调度等待状态,而是在着色器递归指令被执行时,将父任务的中间数据写入存储器(例如,dram存储器)并且暂停父任务(即,暂时在光线跟踪单元上结束其执行)。可以将中间数据存储在片上资源(即,在其上实现光线跟踪单元的芯片上的存储器)中。也就是说,在这些示例中,这种片上资源的量可能需要大于通常在非递归光线跟踪系统中实现的量,或者光线跟踪系统的性能预期将受到影响。因此,至少一些中间数据(例如,大多数或全部中间数据)可以存储在片外存储器中。具体而言,具有有限处理资源的装置(例如,移动装置)往往没有足够的片上存储容量来将中间数据存储在片上,因此中间数据将倾向于存储在片外存储器中。当其子任务已完成时,可以从存储器读回父任务的中间数据,并且可以恢复执行父任务。当父任务恢复时,光线跟踪单元重新调度父任务,以从其暂停的点继续其执行。
47.针对父任务存储的中间数据可以包括:(i)状态数据,(ii)有效载荷数据,和(iii)任务信息。
48.状态数据表示关于父任务在其执行暂停点处的状态的信息。例如,状态数据可以包括存储在临时寄存器(其可以是按实例临时寄存器或按任务临时寄存器)中的任何数据,在任务恢复时需要访问这些数据。举一些示例,这些临时寄存器可以存储交点索引和/或重心。作为另一示例,如果从相关联的交点投射多个光线以对某种形式的光散射建模,则当着色器暂停时,某种形式的材料性质可以被存储为与单个交点相关联的未来光线投射的状态数据,例如,因为可能的情况是一次仅投射一个光线。材料性质可以是例如折射率、不透明度、表面法线。
49.有效载荷数据是与正被处理的各个光线有关的按实例数据。具体而言,有效载荷数据包括用于光线的应用程序定义的有效载荷对象。例如,每个光线(即,每个实例)可以具有应用程序定义的光线有效载荷。子着色器能够修改(即,更新)由父着色器提供的有效载荷数据。有效载荷的大小取决于应用程序(通常为三个或四个双字(“dword”)的量级,例如,以存储像素颜色,所述像素颜色具有每通道32位值(例如,以浮点格式)的三个或四个通道,但是可能大于或小于此)。有效载荷数据的大小不是固定的。
50.任务信息旨在存储关于要重新调度哪个着色器程序、在哪个程序偏移处恢复程序的信息,并定义初始光线被打包到任务中的顺序。换句话说,父任务的任务信息指示要如何恢复执行父任务,例如指定要恢复父着色器程序的程序计数器,以及指定关于光线与任务的实例之间的映射的信息(例如,使用光线id)。
51.当父任务的执行暂停时,存储父任务的中间数据的简单方法是在“按光线”或“按实例”基础上分配存储器。也就是说,每个实例的中间数据将独立于任何其它实例的中间数据而存储。在此简单方法中,每个实例将被分配不同的存储器块,例如独立的存储器块。将根据“最坏情况”的存储要求确定待分配给每个实例的存储器的量。中间数据(即,状态数据、有效载荷数据和任务信息)的量可以在任务之间显著变化。如果分配给每个实例的存储器的量恰好与该实例的中间数据的量匹配,则每个所分配的存储器块的大小将不同,并且因此在存储器中的不规则间隔的存储器地址处开始。这样,存储器将随时间而变得碎片化。例如,如果一个实例被分配了夹在其它存储器分配之间的12字节的存储器,则在处理之后
腾空该存储器,如果待分配存储器的下一实例需要13字节的存储器,则其不能使用腾空的12字节,并且需要被分配其他地方的存储器。当存储器以这种方式变得碎片化时,跟踪和分配存储器的此类不规则间隔的腾空区域可能在计算上成本很高。因此,通常确定实例的“最坏情况”的存储要求(例如,48字节)—并且根据该“最坏情况”的存储要求为每个实例分配相同量的存储器。实例的最坏情况的存储要求可以是预定的。也就是说,在执行任务期间,通常不实时确定最坏情况的存储要求。相反,例如,最坏情况的存储要求可以由光线跟踪系统的用户根据基于他们打算处理的图形数据假定或预先计算的实例的最坏情况的存储要求来设定。由于每个所分配的存储器块具有相同的大小,因此它们可以在规则间隔的存储器地址处开始。通过将相同“最坏情况”的存储器的量分配给每个实例,跟踪和分配此类规则间隔的存储器块在计算上成本低得多。这种简单方法在某些方面可能是有利的,因为每个实例只要其子实例已完成处理(而不是必须等到与任务内的所有其它实例相关联的所有子实例都完成处理)就可以恢复处理。换句话说,对于其子实例的处理已完成的实例可以恢复处理,而不管任务内的一个或多个其它实例是否导致高达或接近最大递归深度的递归。然而,这种简单方法可能导致存储器使用稀疏和效率低下,以及大于必要的存储要求。
52.根据本文所述的示例,在“按任务”基础上分配存储器以用于存储中间数据。也就是说,每个任务的中间数据独立于任何其它任务的中间数据而存储。然而,任务内的多个实例的中间数据存储在相同存储器块中。在本文所述的示例中,存储器块是被保留用于存储任务的中间数据的连续存储器块。在本文所述的示例中,在片外存储器(即,物理上不与光线跟踪单元位于同一芯片上的存储器)中分配存储器块。然而,应理解,本文所述的原理也适用于片上存储器(即,物理上与光线跟踪单元位于同一芯片上的存储器)中的存储器分配。
53.可以根据“最坏情况”的存储要求确定待分配给任务的存储器的量。任务的最坏情况的存储要求可以是预定的。然而,任务的“最坏情况”的存储要求可能小于该任务中的每个实例的“最坏情况”的存储要求的总和。这是因为任务中的若干实例可以共享一些公共状态数据和/或任务信息。也就是说,一些状态数据和/或任务信息可能与任务的所有实例相关。因此,该公共状态数据和/或任务信息可以一次性存储在“按任务”存储器块内并由该任务的每个实例共享,而不是(与本文所述的简单方法中的情况一样)在多个“按实例”存储器块之间复制。换句话说,在“按任务”基础上分配存储器减少了存储每个任务的中间数据所需的存储器的总量—如本文参考图4进一步详细描述的。
54.数据通常以“突发串”为单位写入存储器并从存储器读取。突发串是能够在单个存储器事务中写入存储器或从存储器读取的有限大小的数据块。数据通常以整数数目的突发串为单位写入存储器并从存储器读取。例如,突发串可以包括64字节的数据。当使用“对齐突发串”时,对片外存储器的访问可能是效率最高的,其中,待传输的有限大小的数据块从偏移开始,所述偏移是有限大小的数据块的整数倍。
55.如本文所述,“按实例”方法通常留出根据“最坏情况”的存储要求确定的每个实例的存储器的量。在实践中,一些(例如,通常是大多数)实例实际上不需要如此多的存储空间。这意味着存储器将变得被稀疏填充。也就是说,在实际上存储在存储器中的“按实例”数据之间可能存在大量空存储空间。例如,在“按实例”基础上分配给实例的存储器块内,在给定时间,情况可能是该块的10%包括存储的中间数据,而该块的90%仍为空。因此,如果在“按实例”基础上将中间数据分配给存储器,那么存储器中存储不同实例的中间数据的部分之间经常存在间隙。此外,为实例存储的中间数据的量小于用于向和/或从存储器写入和/或读取数据的突发串大小并不少见。出于这些原因,如果在“按实例”基础上将中间数据分配给存储器块,则用于从/向存储器读取/写入数据的突发串通常使用效率不高。例如,如果实例具有12字节的中间数据,但该实例的最坏情况存储器分配等于或大于64字节,则用于传输该中间数据的64字节突发串将仅传输12字节的有意义数据。
56.当根据本文所述的示例在“按任务”基础上分配存储器块时,可以更密集地打包该存储器块内的数据。也就是说,任务内的多个实例的中间数据可以写入存储器块内的连续存储器位置。以此方式,用于从/向存储器读取/写入数据的突发串得到更高效率的使用。也就是说,用于从/向存储器读取/写入数据的突发串更可能被完全或几乎完全打包,如本文参照图4将进一步详细描述的。因此,根据本文所述的示例,当在“按任务”基础上向中间数据分配存储器时,与在“按实例”基础上向该任务内的每个实例分配存储器相比,从/向存储器读取/写入与任务有关的中间数据可能需要更少的数据突发串。
57.如上所述,vulkan和directx光线跟踪规范定义不同类型的着色器,包括“光线生成”着色器、“最近命中”着色器、“错过”着色器、“相交”着色器和“任何命中”着色器。光线生成着色器是针对一次光线运行的,并且可以包括着色器递归指令,例如,调用一个或多个另外(子)着色器的traceray指令。最近命中着色器是针对整个光线遍历过程期间发现的最近意图(committed)命中(即,最近相交)运行的。当光线与三角形的几何形状相交时,就说发生了“命中”。然而,光线可能并不总与该三角形相互作用。例如,三角形可能具有透明部分。当确定光线与三角形相互作用,使得可能需要采取进一步动作时,就说命中是“意图的”。例如,当光线与不透明三角形相交时,或与部分透明三角形的部分或完全不透明部分相交时,就发生意图命中。因此,最近命中着色器将仅针对光线运行一次。
58.当相交测试模块找到光线与不透明三角形的交点时,这自动地提供“意图”命中;而当找到与非不透明图元的交点时,运行“任何命中”着色器以确定是否认定该命中。当针对光线的相交测试未找到意图命中时,运行错过着色器。当相交测试模块找到与“程序图元”的交点时,运行相交着色器。程序图元可以具有复杂形状。程序图元可以表示为具有简单几何形状的包围体积,例如框(例如,aabb)或球体,其限定程序图元的形状,使得相交测试模块能够对包围体积的形状执行相交测试。将几何形状提交到光线跟踪系统的应用程序限定程序图元的包围盒(或其它简单包围几何形状)。例如,aabb可以由应用程序利用三维中(例如,在包括程序图元的物体的实例空间中)的最小分量值和最大分量值限定。响应于相交测试模块找到与程序图元的包围体积的交点,运行相交着色器以确定光线是否与程序图元的形状相交。相交测试模块可以在固定功能硬件中实施,而着色器(例如,相交着色器)在软件中实施,因此程序员可以通过编写合适的相交着色器来定义如何找到与具有特定形状的程序图元的交点,而不必单纯地用相交测试模块被配置成处理的简单图元形状(例如,三角形)来定义程序图元的该特定形状。
59.光线生成着色器、最近命中着色器和错过着色器可以包括traceray指令。然而,“任何命中”着色器和相交着色器不能包括traceray指令或callshader指令。
60.可以根据本文所述的原理为与能够调用一个或多个其他(子)着色器的着色器相关联的任务分配存储器。例如,可以根据本文所述的原理为与光线生成着色器、最近命中着
色器和错过着色器相关联的任务分配存储器。可以根据本文所述的原理不为与任何命中着色器或错过着色器相关联的任务分配存储器。这是因为任何命中着色器和错过着色器不调用一个或多个其他(子)着色器,因此不需要暂停对与这些着色器相关联的任务的处理并将这些任务的中间数据写入存储器。
61.图2示出了包括光线跟踪单元204和存储器206的光线跟踪系统202。例如,存储器206可以是动态随机存取存储器(dram)。光线跟踪单元204包括相交测试模块208和处理逻辑210。相交测试模块208被配置成执行光线与几何形状的相交测试。几何形状可以与加速结构的节点相关联,并且可以表示场景内的区域(例如,诸如轴对齐包围盒(aabb)的包围体积),或者几何形状可以是表示待渲染的场景内的物体的表面的图元(例如三角形图元)。相交测试模块208可以在硬件中,例如在固定功能电路中实施,使得它能够(例如,在延时和功耗方面)高效率地执行相交测试。处理逻辑210被配置成执行计算机代码,例如,着色器程序(或其它程序)的指令。因此,由处理逻辑210执行的功能由处理逻辑210执行的程序定义,而不是在处理逻辑210的硬件中定义。光线跟踪单元204可以包括图2中未示出的其它部件,例如,用于生成加速结构以表示场景内的物体的模块。存储器206包括存储器块212。存储器块212可以实施为被保留用于特定目的的连续存储器块。光线跟踪单元204可以在集成电路上实施。光线跟踪单元204可以在芯片上实施,并且存储器206可以物理上不与光线跟踪单元位于同一芯片上,并且可以被称为“外部存储器”或“芯片外存储器”。存储器也可以被称为“系统存储器”,并且其可以用于存储用于系统中的其它处理单元,例如中央处理单元(cpu)的数据。在光线跟踪单元204与存储器206之间传递的数据在光线跟踪系统202内的通信总线上行进。与在光线跟踪单元204中执行其它操作的速度相比,将数据写入到存储器206以及从存储器206读取数据是消耗相对大量功率的缓慢操作。因此,减少在光线跟踪单元204与存储器206之间传递的数据量(就减少光线跟踪系统202的延时和功耗而言)可能是有益的。数据在存储器206与光线跟踪单元204之间传递的速率可以被称为“存储器带宽”。
62.图3示出了在光线跟踪系统202中处理光线的方法的流程图。在参考图3描述的示例中,通过执行包括着色器程序的多个实例的任务来并行处理多个光线,其中每个实例对应于待针对其执行该着色器程序的光线。然而,应当指出,在其它示例中,不一定并行处理光线。
63.在以下段落中,将参考对个体基本任务的处理来描述图3。基本任务是不具有父任务的任务,例如,实现光线生成着色器的任务是基本任务。然而,应当了解,多个任务可与每个着色器程序相关联。例如,任务中包括的实例的数目通常存在上限。任务通常包括最多等于二的幂的若干实例,但任务可以被部分地打包,并且包括少于该数目的实例。例如,典型任务可以包括最多128(即27)个实例。任务中的实例的数目的此上限可能由硬件限制引起(例如,在可用处理逻辑上可以并行处理多少实例的限制)。在此示例中,如果超过128个光线要根据相同着色器程序处理,则多于一个任务将与该着色器程序相关联。例如,如果300个光线要根据相同着色器程序处理,则三个任务可以与该着色器程序相关联(其中两个可以被完全打包,第三个被部分打包)。与着色器程序相关联的每个任务都可以根据与本文参考图3所述的相同原理进行处理。
64.在步骤302中,将存储器块分配给基本任务。在本文所述的示例中,在片外存储器(即,物理上不与光线跟踪单元位于同一芯片上的存储器),例如图2中的存储器206中分配
存储器块。然而,应理解,本文所述的原理也适用于片上存储器(即,物理上与光线跟踪单元位于同一芯片上的存储器—图2中未示出)中的存储器分配。
65.基本任务可以被分配唯一任务标识符。唯一任务标识符可以提供到所分配的存储器块的映射(例如,直接映射)。也就是说,唯一任务标识符可以指示存储器(例如,存储器206)中的可以找到分配给基本任务的存储器块的存储器地址或存储器地址范围。
66.在步骤s302中,在“按任务”基础上将存储器分配给基本任务以用于存储中间数据。也就是说,分配存储器块,使得将在执行基本任务的两个或更多个实例期间生成的中间数据可以存储在同一存储器块中。换句话说,基本任务的存储器块是通过执行单个分配操作而在按任务基础上分配的。由基本任务包括的多个实例中的每一个的中间数据可以写入所述所分配的存储器块。这与在“按光线”或“按实例”基础上分配存储器形成对比,其中将针对包括在基本任务中的每个实例执行单独的存储器分配操作,使得将针对基本任务执行多个存储器分配操作。在步骤s302中分配存储器,使得基本任务的中间数据独立于任何其它任务的中间数据而存储。
67.参考图4可以理解在“按任务”基础上分配存储器以用于存储中间数据的两个优点,该图比较了同一任务的按任务存储器分配和按实例存储器分配。图4考虑将存储器分配给包括八个实例的一个任务。此类任务仅以示例的方式提供。如本文所述,任务通常包括最多等于二的幂的若干实例,但任务可以被部分地打包,并且包括少于该数目的实例。例如,典型任务可以包括最多32(即25)个实例、64(即26)个实例或128(即27)个实例。
68.在图4中,在412-1处示出了根据本文所述的示例的存储器块的按任务存储器分配。将此与412-2处所示的针对该任务中的八个实例的八个按实例存储器分配中分配的八个存储器块的集合进行示意性地比较。
69.考虑412-1,如本文所述,可以根据“最坏情况”的存储要求确定待分配给任务的存储器的量。所分配的存储器的量可以被称为存储器块的大小。图4中分配给任务的存储器的量被示为401a。在实践中,一些(例如,通常是大部分)任务实际上不需要“最坏情况”的存储要求。因此,在图4中的412-1处所示的示例中,实际用于存储中间数据的所分配的存储器块的量由阴影区域401b示出,而区域401c示出了仍为空的所分配的存储器块的量。
70.考虑412-2,如本文所述,可以根据“最坏情况”的存储要求确定待分配给每个实例的存储器的量。由于任务包括八个实例,412-2示出了分别分配给这八个实例的八个存储器块。在图4中的412-2处所示的示例中,每个存储器块包括阴影区域和非阴影区域,所述阴影区域示出了实际用于存储中间数据的所分配的存储器块的量,所述非阴影区域示出了仍为空的所分配的存储器块的量。
71.如图4所示,412-1处所示的在按任务基础上分配的存储器块的大小小于412-2处所示的分配给该任务的八个实例的八个存储器块的总大小。这是因为任务中的若干实例可能共享一些公共状态数据和/或任务信息。也就是说,一些状态数据和/或任务信息可能与任务的所有实例相关。因此,该公共状态数据和/或任务信息可以如412-1中那样一次性存储在“按任务”存储器块内并由该任务的每个实例共享,而不是如412-2中那样在多个“按实例”存储器块之间复制。换句话说,在“按任务”基础上分配存储器减少了存储每个任务的中间数据所需的存储器的总量。以此方式,可以降低光线跟踪系统的总体存储器要求(例如,存储器占用)。
72.如本文所述,数据通常以“数据突发串”(例如,dram突发串)为单位写入存储器并从存储器读取。突发串是能够在单个存储器事务中写入存储器或从存储器读取的有限大小的数据块。例如,数据突发串可以包括64字节的数据。数据通常以整数数目的突发串为单位写入存储器并从存储器读取。举例来说,在图4中示出了若干有限大小的数据突发串403a-k的边界,其覆盖在存储器块412-1和412-2上。在图4中,为了简单起见,每个数据突发串的大小等于在按实例基础上分配的每个存储器块的大小。这只是举个示例。通常,在数据突发串的大小与在按实例基础上分配的存储器块的大小之间不存在固定关系。
73.当根据本文所述的示例在“按任务”基础上分配存储器块时,与当在“按实例”基础上分配多个存储器块时(如412-2处所示)相比,该存储器块内的数据可以被更密集地打包(如412-1处所示)。也就是说,任务内的多个实例的中间数据可以被写入存储器块内的连续存储器位置,如401b处所示。因此,可以更高效率使用用于向存储器写入数据的数据突发串。也就是说,用于向存储器写入数据的数据突发串更有可能被完全或几乎完全打包。例如,如图4中所示,可以使用三个数据突发串403a、403b和403c将存储在存储器块412-1中的所有中间数据写入存储器。数据突发串403a和403b被完全打包,而数据突发串403c被部分打包。也就是说,一部分数据突发串403c携带一部分所存储的中间数据401b(使用阴影显示),而剩余部分的数据突发串不携带有意义的数据。由于存储器的区域401c不包括中间数据,因此无需使用更多数据突发串来将任务的中间数据写入存储器。
74.相比之下,当在“按实例”基础上分配存储器块时,存储器本身变得被稀疏填充,如412-2处所示。如图4中所示,将任务的八个实例中的每一个的中间数据写入存储器需要八个数据突发串403d-k。这八个数据突发串403d-k都没有被完全打包。也就是说,所有八个数据突发串403d-k被部分打包。换句话说,每个数据突发串的使用效率都不高。
75.如图4中所示,根据本文所述的示例,当在“按任务”基础上已向中间数据分配存储器(而不是在“按实例”基础上向该任务内的每个实例分配存储器)时,向存储器写入与任务有关的中间数据可以需要更少的数据突发串。由于需要更少的数据突发串,这意味着可以通过在“按任务”基础上分配存储器来减少将中间数据传输到存储器所花费的时间和/或与之相关联的延时。尽管在前述段落中并未详细论述,但是当根据本文所述的示例已在“按任务”基础上向中间数据分配存储器时,当从存储器读取该中间数据时,实现了同等优点。
76.尽管本文中已参考图3描述了将存储器分配给单个任务,但应当理解,可以根据相同原理将存储器分配给多个任务。在一些示例中,处理逻辑210可以为多个任务(例如,数千个任务)分配存储器“堆”,所述存储器堆随后(例如,在存储器硬件中)被细分为多个存储器块,每个任务一个存储器块。例如,处理逻辑可以定义存储器堆的基础存储器地址,以及定义每个存储器块的大小的“步幅”。所述步幅可以用于确定堆内的每个存储器块在哪里“开始”。例如,堆中的第一存储器块可以在基础存储器地址处开始(例如,使其第一存储器地址位于该处)。每个后续存储器块的第一存储器地址可以从其前一存储器块的第一存储器地址偏移该步幅。因此,可以为任务分配唯一整数索引,所述唯一整数索引当乘以步幅时,计算出相对于任务的存储器块的基础存储器地址的偏移。
77.应当理解,在执行任务之前不需要分配存储器,如图3中所示。相反,可以根据本文所述的原理在任何合适的时间分配存储器。例如,可以在将该任务的中间数据写入存储器之前立即分配存储器(例如,在步骤s306与s310之间,将在本文中进一步详细讨论这种情
况)。
78.返回图3,在步骤s304中,在处理逻辑210上执行基本任务的指令。具体地,在此第一迭代中,针对多个光线执行基本任务。在此示例中,基本任务包括至少一个实例,所述至少一个实例包括调用子着色器的着色器递归指令。例如,对基本任务的实例的处理可以使得至少一个子光线被发射。如上所述,着色器递归指令的两个示例是traceray指令和callshader指令。
79.在步骤s306中,处理逻辑210确定基本任务的任何实例的执行是否已达到递归指令。如果否,则该方法进行到步骤s308,在此,处理逻辑210确定任务的执行是否已达到着色器程序的结束,即,是否仍有更多的任务的指令要执行。如果不是(即,如果仍有更多的基本任务的指令要执行),则该方法进行回到步骤s304,并且继续执行基本任务的指令。
80.当基本任务达到着色器递归指令时,该方法从步骤s306进行到步骤s310。在步骤s310中,将基本任务的中间数据写入所分配的存储器块。存储器块212用于保持基本任务的中间数据,并且可能使其部分(例如,所存储的有效载荷数据)由与基本任务发射的子光线相关联的子着色器更新。基本任务使用存储器块212来保存信息(即,状态数据、任务信息和有效载荷数据)以在步骤s306中达到的着色器递归指令之后使用。由于基本任务已暂停(即,在处理逻辑210上结束),基本任务的当前状态(包括状态数据、任务信息和有效载荷数据)被保持,因此当基本任务恢复(如下文进一步详细描述的)时,可以修复基本任务的该状态,使得可以恢复执行基本任务。
81.在步骤s312中,暂停(即暂时结束)针对多个光线执行基本任务。以此方式,响应于着色器递归指令而暂停执行基本任务。在一些情况下(例如,如果着色器递归指令是traceray指令),可以发射至少一个子光线。而且,在步骤312中,可以为基本任务初始化计数器,该计数器用于跟踪由该任务发射的多少个子光线尚未完成处理。例如,计数器可以针对由基本任务发射但尚未完成处理的每个子光线递增一次。
82.在步骤s312中暂停执行基本任务之后,该方法进行到步骤s313。在步骤s313中,收集待根据相同子着色器程序处理的多个子光线,以便形成辅助任务。辅助任务是具有父任务的任务(例如,在此迭代中,父任务是基本任务)。辅助任务是包括与待针对其执行该子着色器程序的相应的多个子光线对应的子着色器程序的多个实例的任务。辅助任务中的多个子实例中的每一个可以对应于从同一父任务(例如,基本任务)发射的子光线。这可以在与基本任务相关联的多个光线与同一物体相互作用时发生。替代地,辅助任务可以包括对应于从两个或更多个不同父任务(例如,基本任务和一个或多个其它任务)发射的子光线的多个子实例。
83.在步骤s314中,处理逻辑210确定新辅助任务是否准备好被调度。例如,当不再向任务添加其他实例时,可能会发生这种情况,但不同的系统将使用不同的标准来确定何时调度任务。
84.在步骤s314中确定新辅助任务准备好被调度之后,该方法进行到步骤s315,在此为辅助任务分配存储器块。根据本文所述的原理(例如,如参考步骤s302所述)分配存储器块。
85.在步骤s304中,在处理逻辑210上执行辅助任务的指令。如上所述,着色器递归指令指示待根据辅助任务处理的每个光线的有效载荷数据。在步骤s304中执行辅助任务可以
更新分配给基本任务的存储器块212中的所述所指示的有效载荷数据。
86.该方法从步骤s304针对辅助任务以与上文针对基本任务所述的相同方式继续进行。如果辅助任务包括调用着色器递归指令的至少一个实例,则可以再次执行围绕步骤s310到s315的循环,使得辅助任务的多个实例中的一个或多个调用另一辅助任务(例如,以该辅助任务作为其父任务的任务)。基本任务的每个实例可以继续递归直到最大递归深度,在该处防止任何进一步的递归(图3中未示出)。api可以定义最大递归深度。例如,最大递归深度可以是31。
87.在某个点,该方法将针对辅助任务执行步骤s308,并且将确定已达到辅助任务的结束,使得从步骤s308采取“是”路线。从其父任务(例如,基本任务或来自步骤s310到s315的先前迭代的较早辅助任务)提供给该辅助任务的有效载荷可能已经通过执行该辅助任务或通过执行作为辅助任务的后代的任何任务而被修改。
88.然后,该方法进行到步骤s316,在此确定任务是否为基本任务。换句话说,确定基本任务(即,初始父任务,例如,实现光线生成着色器)当前是否是活动的。在此迭代中,任务是辅助任务,因此该方法进行到s318。
89.在步骤s318中,对于已完成处理的辅助任务中的每个实例,在步骤s310中为其父任务初始化的计数器递减(如本文所述,辅助任务可以包括与一个或多个父任务相关联的实例)。如果来自已完成处理的辅助任务的实例使得辅助任务的父任务中的一个或多个的计数器递减至0(例如,指示该父任务发射的所有子光线已完成处理),则这在步骤s319中指示该父任务准备好恢复。
90.在步骤s320中,处理逻辑210读取待恢复的父任务的中间数据。例如,可以从分配给父任务的存储器块读取该任务的状态数据、任务信息和有效载荷数据中的一者或多者。然后,该方法可以进行回到步骤s304,以便执行父任务的更多指令,即,在使得一个或多个子光线被发射的着色器递归指令之后的父任务的指令。以此方式,恢复父执行任务。使用父任务的任务信息,使得处理逻辑210能够确定待执行的父着色器程序的下一指令(其将对应于使得一个或多个子光线被发射的着色器递归指令之后的父着色器程序中的下一指令)的程序计数器。例如,可以首先从存储器读取任务信息,以便恢复父任务。一旦该任务已恢复,就可以从存储器读取状态数据,以便将光线跟踪单元配置成用于处理该任务。在步骤s304中执行任务期间,可以从存储器读取任务的有效载荷数据以由着色器进行处理。
91.然后,该方法可以如上文所述从步骤s304继续进行。当该方法到达步骤s316并且确定任务为基本任务(即,初始父任务是活动的)时,如步骤s322中所示,针对基本任务的处理完成。此时,光线跟踪系统202可能已经确定了渲染空间中的多个采样位置的渲染值,该渲染值可以是例如正被渲染的图像的像素的像素颜色值。光线跟踪系统可以处理更多光线,直到确定正被渲染的图像的所有像素值为止。
92.图5示出了可以在其中实现本文所述的光线跟踪系统的计算机系统。计算机系统包括cpu 502、存储器206、光线跟踪单元204和其他装置504,诸如显示器506、扬声器508和相机510。存储器206包括存储器块212。计算机系统的部件可通过通信总线512彼此通信。
93.图2的光线跟踪系统202被示为包括若干功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应理解,本文中描述为由光线跟踪系统形成的中间值不需要由光线跟踪系统在任何时间点物理地
生成,并且可以只表示方便描述由光线跟踪系统在其输入与输出之间执行的处理的逻辑值。
94.本文所述的光线跟踪系统可以包含在集成电路上的硬件中。本文所述的光线跟踪系统可以被配置成执行本文所述的任一种方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实施。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文所述的算法和方法可以由执行码的一个或多个处理器执行,所述码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或其它数据并且可以由机器存取的其它存储器装置。
95.如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如c、java或opencl等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由该代码指定的任务。
96.处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是或包括任何种类的通用或专用处理器,诸如cpu、gpu、nna、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。
97.本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(hdl)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,所述集成电路定义数据集当在集成电路制造系统中处理(即,运行)时,将所述系统配置成制造被配置成执行本文所描述的任一种方法的光线跟踪系统,或者制造包括本文所描述的任何设备的光线跟踪系统。集成电路定义数据集可以是例如集成电路描述。
98.因此,可提供一种在集成电路制造系统处制造如本文所述的光线跟踪系统的方法。此外,可提供一种集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统中处理时使得执行制造光线跟踪系统的方法。
99.集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包含作为寄存器传输级(rtl)代码,作为高级电路表示法(诸如verilog或vhdl),以及作为低级电路表示法(诸如,oasis(rtm)和gdsii)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如rtl)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以便生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便
定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
100.现在将参考图6描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置为制造光线跟踪系统的示例。
101.图6示出了集成电路(ic)制造系统602的示例,所述集成电路制造系统被配置为制造如本文的任一示例中所述的光线跟踪系统。具体地说,ic制造系统602包括布局处理系统604和集成电路生成系统606。ic制造系统602被配置为接收ic定义数据集(例如,定义如本文的任一示例中所述的光线跟踪系统),处理ic定义数据集,并根据ic定义数据集来生成ic(例如,其包含如本文的任一示例中所述的光线跟踪系统)。对ic定义数据集的处理将ic制造系统602配置为制造包含如本文的任一示例中所述的光线跟踪系统的集成电路。
102.布局处理系统604被配置为接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要生成的电路的门级表示,例如就逻辑部件(例如nand、nor、and、or、mux和flip-flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统604确定了电路布局时,它可以将电路布局定义输出到ic生成系统606。电路布局定义可以是例如电路布局描述。
103.如本领域已知的,ic生成系统606根据电路布局定义来生成ic。例如,ic生成系统606可以实现生成ic的半导体器件制造工艺,其可以涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代性地,提供给ic生成系统606的电路布局定义可以是计算机可读代码的形式,ic生成系统606可以使用该计算机可读代码来形成用于生成ic的合适掩模。
104.由ic制造系统602执行的不同过程可以全部在一个位置例如由一方来实现。替代性地,ic制造系统602可以是分布式系统,使得过程中的一些可以在不同位置执行,且可以由不同方执行。例如,以下阶段中的一些可以在不同位置和/或由不同方来执行:(i)合成表示ic定义数据集的rtl码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
105.在其它示例中,在集成电路制造系统处对集成电路定义数据集的处理可以将系统配置为制造光线跟踪系统,而无需处理ic定义数据集以确定电路布局。例如,集成电路定义数据集可以定义例如fpga的可重新配置的处理器的配置,并且对该数据集的处理可以将ic制造系统配置成(例如,通过将配置数据加载到fpga)生成具有所述定义的配置的可重新配置的处理器。
106.在一些实施例中,集成电路制造定义数据集当在集成电路制造系统中处理时,可以使集成电路制造系统生成如本文所述的装置。例如,通过集成电路制造定义数据集,以上文参考图6所述的方式对集成电路制造系统进行配置,可以使得制造如本文所述的装置。
107.在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图6所示的示例中,ic生成系统可以
进一步由集成电路定义数据集配置成在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
108.与已知的实现方式相比,在本技术中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包括计算性能提高、延时减少、处理量增大和/或功耗降低中的一者或多者。在(例如,在集成电路中)制造此类装置、设备、模块和系统期间,可以在性能改进与物理实施方式之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本技术中阐述的引起装置、设备、模块和系统的物理实施方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
109.申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献