CN110956687A - 用于光线追踪重度实例化场景的跨实例从前到后遍历的装置和方法 - Google Patents
用于光线追踪重度实例化场景的跨实例从前到后遍历的装置和方法 Download PDFInfo
- Publication number
- CN110956687A CN110956687A CN201910794937.3A CN201910794937A CN110956687A CN 110956687 A CN110956687 A CN 110956687A CN 201910794937 A CN201910794937 A CN 201910794937A CN 110956687 A CN110956687 A CN 110956687A
- Authority
- CN
- China
- Prior art keywords
- ray
- node
- traversal
- instance
- graphics
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/506—Illumination models
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/50—Depth or shape recovery
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/21—Collision detection, intersection
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Image Generation (AREA)
Abstract
用于在图形处理器上通过硬件加速来进行可编程光线追踪的装置和方法。例如,图形处理器的一个实施例包括用以执行多个可编程光线追踪着色器的着色器执行电路。着色器执行电路包括多个单指令多数据(SIMD)执行单元。分类电路对与可编程光线追踪着色器中的一个或多个相关联的数据重新分组,以增加由SIMD执行单元所执行的SIMD操作的占用率;并且耦合到着色器执行电路的固定功能交叉电路检测光线和包围体积层级(BVH)和/或包含在其中的对象之间的交叉,并用以将指示交叉的结果提供给分类电路。
Description
技术领域
本发明一般涉及图形处理器的领域。更特别地,本发明涉及用于光线追踪重度实例化场景的跨实例从前到后遍历的装置和方法。
背景技术
光线追踪是一种其中通过基于物理地渲染来模拟光传输的技术。被广泛用在电影渲染中,直到仅几年前,它还被认为对于实时性能来说过于资源密集。光线追踪中的关键操作之一是处理针对被称为“光线遍历”的光线场景交叉的可见性查询,所述“光线遍历”通过遍历和交叉包围体积层级(BVH)中的节点来计算光线场景交叉。
附图说明
可以从结合附图的以下详细描述获得对本发明的更好理解,在附图中:
图1是具有处理器的计算机系统的实施例的框图,该处理器具有一个或多个处理器核和图形处理器;
图2是处理器的一个实施例的框图,该处理器具有一个或多个处理器核、集成存储器控制器,以及集成图形处理器;
图3是图形处理器的一个实施例的框图,该图形处理器可以是分立的图形处理单元,或者可以是与多个处理核一起集成的图形处理器;
图4是用于图形处理器的图形处理引擎的实施例的框图;
图5是图形处理器的另一实施例的框图;
图6A-B是包括处理元件的阵列的线程执行逻辑的框图;
图7图示了根据实施例的图形处理器执行单元指令格式;
图8是图形处理器的另一实施例的框图,该图形处理器包括图形流水线、媒体流水线、显示引擎、线程执行逻辑以及渲染输出流水线;
图9A是图示了根据实施例的图形处理器命令格式的框图;
图9B是图示了根据实施例的图形处理器命令序列的框图;
图10图示了根据实施例的用于数据处理系统的示例性图形软件架构;
图11A-B图示了根据实施例的可以被用来制造用于执行操作的集成电路的示例性IP核开发系统;
图12图示了根据实施例的可以使用一个或多个IP核来制造的示例性片上系统集成电路;
图13A-B图示了可以使用一个或多个IP核来制造的片上系统集成电路的示例性图形处理器;
图14A-B图示了可以使用一个或多个IP核来制造的片上系统集成电路的附加示例性图形处理器;
图15图示了在多个图元周围构造的包围体积层级的示例;
图16A-B是使用基础对象的实例化而生成的图像的示例;
图17图示了通过图形处理单元(GPU)来实现的光线追踪引擎的示例;
图18图示了一个实施例,其中专用加速结构被用于基础对象,并且通用加速结构被用于该基础对象的多个实例;
图19图示了执行跨实例遍历/交叉操作的光线追踪架构的一个实施例;
图20图示了用于实现本发明的一个实施例的示例伪代码;
图21图示了针对本发明的一个实现所收集的测试结果;
图22图示了针对本发明的一个实现所收集的附加测试结果;以及
图23图示了根据本发明的一个实施例的方法。
具体实施方式
在以下描述中,出于解释的目的,阐述众多具体细节以便提供对下面描述的本发明的实施例的透彻理解。然而,对于本领域技术人员来说将显然的是,可以在没有这些具体细节中的某些具体细节的情况下实践本发明的实施例。在其它实例中,以框图形式示出公知的结构和设备以避免使本发明的实施例的根本原理模糊。
示例性图形处理器架构和数据类型
系统概述
图1是根据实施例的处理系统100的框图。在各种实施例中,系统100包括一个或多个处理器102以及一个或多个图形处理器108,并且可以是单个处理器台式系统、多处理器工作站系统或具有大量处理器102或处理器核107的服务器系统。在一个实施例中,系统100是被结合在供移动设备、手持式设备或嵌入式设备中使用的片上系统(SoC)集成电路内的处理平台。
在一个实施例中,系统100可以包括下述各项或被结合在下述各项内:基于服务器的游戏平台;游戏控制台,其包括游戏和媒体控制台、移动游戏控制台、手持式游戏控制台或在线游戏控制台。在一些实施例中,系统100是移动电话、智能电话、平板计算设备或移动因特网设备。处理系统100还可以包括可穿戴设备、与其耦合或被集成在其内,该可穿戴设备诸如智能手表可穿戴设备、智能眼镜设备、增强现实设备或虚拟现实设备。在一些实施例中,处理系统100是电视或机顶盒设备,该电视或机顶盒设备具有一个或多个处理器102以及由一个或多个图形处理器108生成的图形界面。
在一些实施例中,一个或多个处理器102各自包括用以处理指令的一个或多个处理器核107,所述指令在被执行时执行系统和用户软件的操作。在一些实施例中,一个或多个处理器核107中的每个处理器核被配置成处理专用指令集109。在一些实施例中,指令集109可以促进复杂指令集计算(CISC)、精简指令集计算(RISC)、或经由超长指令字(VLIW)的计算。多个处理器核107可以各自处理不同的指令集109,该指令集109可以包括用以促进其它指令集的仿真的指令。处理器核107还可以包括其它处理设备,诸如数字信号处理器(DSP)。
在一些实施例中,处理器102包括高速缓冲存储器104。取决于架构,处理器102可以具有单个内部高速缓存或多级内部高速缓存。在一些实施例中,在处理器102的各种组件当中共享高速缓冲存储器。在一些实施例中,处理器102还使用外部高速缓存(例如,3级(L3)高速缓存或末级高速缓存(LLC))(未示出),可以使用已知的高速缓存一致性技术来在处理器核107当中共享该外部高速缓存。附加地,寄存器堆106被包括在处理器102中,其可以包括用于存储不同类型的数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器)。一些寄存器可以是通用寄存器,而其它寄存器可以专用于处理器102的设计。
在一些实施例中,一个或多个处理器102与一个或多个接口总线110耦合,以在处理器102与系统100中的其它组件之间传输通信信号,诸如地址、数据或控制信号。在一个实施例中,接口总线110可以是处理器总线,诸如一种版本的直接媒体接口(DMI)总线。然而,处理器总线不限于DMI总线,并且可以包括一个或多个外围组件互连总线(例如,PCI、PCIExpress)、存储器总线或其它类型的接口总线。在一个实施例中,(一个或多个)处理器102包括集成存储器控制器116和平台控制器集线器130。存储器控制器116促进存储器设备与系统100的其它组件之间的通信,而平台控制器集线器(PCH)130提供经由本地I/O总线到I/O设备的连接。
存储器设备120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪速存储器设备、相变存储器设备或具有合适的性能以用作处理存储器的某个其它存储器设备。在一个实施例中,存储器设备120可以作为系统100的系统存储器进行操作,以存储数据122和指令121以供在一个或多个处理器102执行应用或过程时使用。存储器控制器116还与可选的外部图形处理器112耦合,该可选的外部图形处理器112可以与处理器102中的一个或多个图形处理器108通信,从而执行图形和媒体操作。在一些实施例中,显示设备111可以连接到(一个或多个)处理器102。显示设备111可以是如在移动电子设备或膝上型设备中的内部显示设备或经由显示接口(例如,DisplayPort等)附接的外部显示设备中的一个或多个。在一个实施例中,显示设备111可以是头戴式显示器(HMD),诸如供虚拟现实(VR)应用或增强现实(AR)应用中使用的立体显示设备。
在一些实施例中,平台控制器集线器130使得外围设备能够经由高速I/O总线连接到存储器设备120和处理器102。I/O外围设备包括但不限于音频控制器146、网络控制器134、固件接口128、无线收发器126、触摸传感器125、数据存储设备124(例如,硬盘驱动器,闪速存储器等)。数据存储设备124可以经由存储接口(例如,SATA)或经由外围总线(诸如外围组件互连总线(例如,PCI、PCI Express))连接。触摸传感器125可以包括触摸屏传感器、压力传感器或指纹传感器。无线收发器126可以是Wi-Fi收发器、蓝牙收发器或移动网络收发器,诸如3G、4G或长期演进(LTE)收发器。固件接口128使得能够实现与系统固件的通信,并且可以例如是统一的可扩展固件接口(UEFI)。网络控制器134可以使得能够实现到有线网络的网络连接。在一些实施例中,高性能网络控制器(未示出)与接口总线110耦合。在一个实施例中,音频控制器146是多声道高清晰度音频控制器。在一个实施例中,系统100包括可选的传统I/O控制器140,其用于将传统(例如,个人系统2(PS/2))设备耦合到系统。平台控制器集线器130还可以连接到一个或多个通用串行总线(USB)控制器142、连接输入设备(诸如键盘和鼠标143组合)、相机144或其它USB输入设备。
将领会的是,所示出的系统100是示例性的而非限制性的,因为还可以使用不同地配置的其它类型的数据处理系统。例如,存储器控制器116和平台控制器集线器130的实例可以被集成到分立的外部图形处理器中,该分立的外部图形处理器诸如外部图形处理器112。在一个实施例中,平台控制器集线器130和/或存储器控制器1160可以在一个或多个处理器102的外部。例如,系统100可以包括:外部存储器控制器116和平台控制器集线器130,其可以被配置为与(一个或多个)处理器102通信的系统芯片组内的存储器控制器集线器和外围控制器集线器。
图2是具有一个或多个处理器核202A-202N、集成存储器控制器214以及集成图形处理器208的处理器200的实施例的框图。图2的具有与本文中任何其它附图的元件相同的参考编号(或名称)的那些元件可以采用与在本文中其它地方描述的方式类似的任何方式来操作或起作用,但是不限于这样。处理器200可以包括上至附加核202N且包括附加核202N(由虚线框表示)的附加核。处理器核202A-202N中的每一个包括一个或多个内部高速缓存单元204A-204N。在一些实施例中,每个处理器核还可以访问一个或多个共享高速缓存单元206。
内部高速缓存单元204A-204N和共享高速缓存单元206表示处理器200内的高速缓冲存储器层级。高速缓冲存储器层级可以包括在每个处理器核内的至少一级指令和数据高速缓存以及一级或多级共享中级高速缓存,诸如2级(L2)、3级(L3)、4级(L4)或其它级的高速缓存,其中,在外部存储器前的最高级的高速缓存被分类为LLC。在一些实施例中,高速缓存一致性逻辑维持各种高速缓存单元206与204A-204N之间的一致性。
在一些实施例中,处理器200还可以包括一组一个或多个总线控制器单元216以及系统代理核210。一个或多个总线控制器单元216管理一组外围总线,诸如一个或多个PCI或PCI express总线。系统代理核210提供对各种处理器组件的管理功能。在一些实施例中,系统代理核210包括用以管理对各种外部存储器设备(未示出)的访问的一个或多个集成存储器控制器214。
在一些实施例中,处理器核202A-202N中的一个或多个处理器核包括对同步多线程的支持。在这样的实施例中,系统代理核210包括:用于在多线程处理期间协调和操作核202A-202N的组件。系统代理核210可以附加地包括功率控制单元(PCU),该功率控制单元(PCU)包括用以调节处理器核202A-202N和图形处理器208的功率状态的逻辑和组件。
在一些实施例中,处理器200附加地包括用以执行图形处理操作的图形处理器208。在一些实施例中,图形处理器208与该组共享高速缓存单元206以及系统代理核210耦合,该系统代理核210包括一个或多个集成存储器控制器214。在一些实施例中,系统代理核210还包括显示控制器211,其用以将图形处理器输出驱动到一个或多个耦合的显示器。在一些实施例中,显示控制器211还可以是经由至少一个互连与图形处理器耦合的单独模块,或者可以集成在图形处理器208内。
在一些实施例中,基于环的互连单元212被用来耦合处理器200的内部组件。然而,可以使用替换的互连单元,诸如点到点互连、切换式互连、或其它技术,包括本领域中公知的技术。在一些实施例中,图形处理器208经由I/O链路213与环形互连212耦合。
示例性I/O链路213表示多个种类的I/O互连中的至少一种,其包括封装上I/O互连,所述封装上I/O互连促进各种处理器组件与高性能嵌入式存储器模块218(诸如eDRAM模块)之间的通信。在一些实施例中,处理器核202A-202N中的每个处理器核以及图形处理器208将嵌入式存储器模块218用作共享末级高速缓存。
在一些实施例中,处理器核202A-202N是执行相同指令集架构的同构核。在另一实施例中,处理器核202A-202N在指令集架构(ISA)方面是异构的,其中,处理器核202A-202N中的一个或多个执行第一指令集,而其它核中的至少一个执行第一指令集的子集或不同的指令集。在一个实施例中,处理器核202A-202N在微架构方面是同构的,其中,具有相对较高功耗的一个或多个核与具有较低功耗的一个或多个功率核耦合。附加地,处理器200可以被实现在一个或多个芯片上或者被实现为除其它组件之外还具有所图示的组件的SoC集成电路。
图3是图形处理器300的框图,该图形处理器300可以是分立的图形处理单元、或者可以是与多个处理核一起集成的图形处理器。在一些实施例中,图形处理器经由到图形处理器上的寄存器的存储器映射I/O接口并且利用被放置到处理器存储器中的命令进行通信。在一些实施例中,图形处理器300包括用以访问存储器的存储器接口314。存储器接口314可以是到本地存储器、一个或多个内部高速缓存、一个或多个共享外部高速缓存、和/或到系统存储器的接口。
在一些实施例中,图形处理器300还包括显示控制器302,该显示控制器302用以将显示输出数据驱动到显示设备320。显示控制器302包括用于显示器的一个或多个覆盖平面的硬件,以及多层视频或用户接口元件的组成。显示设备320可以是内部或外部显示设备。在一个实施例中,显示设备320是头戴式显示设备,诸如虚拟现实(VR)显示设备或增强现实(AR)显示设备。在一些实施例中,图形处理器300包括视频编解码器引擎306,其用以将媒体编码到一个或多个媒体编码格式、从一个或多个媒体编码格式对媒体进行解码、或者在一个或多个媒体编码格式之间对媒体进行代码转换,该一个或多个媒体编码格式包括但不限于:运动图像专家组(MPEG)格式(诸如MPEG-2)、高级视频编码(AVC)格式(诸如H.264/MPEG-4 AVC)、以及电影与电视工程师协会(SMPTE)421M/VC-1、和联合图像专家组(JPEG)格式(诸如JPEG)、和运动JPEG(MJPEG)格式。
在一些实施例中,图形处理器300包括用以执行二维(2D)栅格化器操作(包括例如位边界块传送)的块图像传送(BLIT)引擎304。然而,在一个实施例中,使用图形处理引擎(GPE)310的一个或多个组件来执行2D图形操作。在一些实施例中,GPE 310是用于执行图形操作的计算引擎,该图形操作包括三维(3D)图形操作和媒体操作。
在一些实施例中,GPE 310包括:用于执行3D操作的3D流水线312,诸如使用作用于3D图元形状(例如,矩形、三角形等)的处理功能来渲染三维图像和场景。3D流水线312包括可编程和固定功能元件,其执行元件内的各种任务和/或将执行线程产生到3D/媒体子系统315。虽然3D流水线312可以被用来执行媒体操作,但是GPE 310的实施例还包括媒体流水线316,该媒体流水线316被具体地用来执行媒体操作,诸如视频后处理和图像增强。
在一些实施例中,媒体流水线316包括固定功能或可编程逻辑单元,其用以代替或代表视频编解码器引擎306来执行一个或多个专门的媒体操作,诸如视频解码加速、视频反交错(de-interlace)以及视频编码加速。在一些实施例中,媒体流水线316附加地包括线程产生单元以产生用于在3D/媒体子系统315上执行的线程。所产生的线程执行针对在3D/媒体子系统315中所包括的一个或多个图形执行单元上的媒体操作的计算。
在一些实施例中,3D/媒体子系统315包括:用于执行3D流水线312和媒体流水线316所产生的线程的逻辑。在一个实施例中,流水线向3D/媒体子系统315发送线程执行请求,该3D/媒体子系统315包括用于仲裁各种请求并将各种请求分派到可用的线程执行资源的线程分派逻辑。执行资源包括用以处理3D和媒体线程的图形执行单元的阵列。在一些实施例中,3D/媒体子系统315包括用于线程指令和数据的一个或多个内部高速缓存。在一些实施例中,该子系统还包括共享存储器(包括寄存器和可寻址存储器)以在线程之间共享数据并存储输出数据。
图形处理引擎
图4是根据一些实施例的图形处理器的图形处理引擎410的框图。在一个实施例中,图形处理引擎(GPE)410是图3中所示出的GPE 310的一种版本。图4的具有与本文中任何其它附图的元件相同的参考编号(或名称)的元件可以采用与在本文中其它地方描述的方式类似的任何方式来操作或起作用,但是不限于这样。例如,图示了图3的3D流水线312和媒体流水线316。媒体流水线316在GPE 410的一些实施例中是可选的,并且可以不显式地包括在GPE 410内。例如并且在至少一个实施例中,单独的媒体和/或图形处理器被耦合至GPE410。
在一些实施例中,GPE 410与命令流转化器(streamer)403耦合或包括命令流转化器403,该命令流转化器403向3D流水线312和/或媒体流水线316提供命令流。在一些实施例中,命令流转化器403与存储器耦合,该存储器可以是系统存储器、或者内部高速缓冲存储器和共享高速缓冲存储器中的一个或多个。在一些实施例中,命令流转化器403从存储器接收命令,并且将命令发送到3D流水线312和/或媒体流水线316。该命令是从环形缓冲器提取的指示,该环形缓冲器存储用于3D流水线312和媒体流水线316的命令。在一个实施例中,环形缓冲器可以附加地包括存储多批多个命令的批命令缓冲器。用于3D流水线312的命令还可以包括对存储在存储器中的数据的引用,该数据诸如但不限于用于3D流水线312的顶点和几何数据和/或用于媒体流水线316的图像数据和存储器对象。3D流水线312和媒体流水线316通过经由相应流水线内的逻辑执行操作,或者通过将一个或多个执行线程分派至图形核阵列414来处理命令和数据。在一个实施例中,图形核阵列414包括图形核(例如,(一个或多个)图形核415A、(一个或多个)图形核415B)的一个或多个块,每个块包括一个或多个图形核。每个图形核包括:一组图形执行资源,其包括用以执行图形和计算操作的通用和图形特定执行逻辑,以及固定功能纹理处理和/或机器学习和人工智能加速逻辑。
在各种实施例中,3D流水线312包括:用以通过处理指令和将执行线程分派到图形核阵列414来处理一个或多个着色器(shader)程序的固定功能和可编程逻辑,该着色器程序诸如顶点着色器、几何着色器、像素着色器、片段着色器、计算着色器或其它着色器程序。图形核阵列414提供执行资源的统一块供处理这些着色器程序中使用。图形核阵列414的(一个或多个)图形核415A-414B内的多用途执行逻辑(例如,执行单元)包括对各种3D API着色器语言的支持,并且可以执行与多个着色器相关联的多个同时执行线程。
在一些实施例中,图形核阵列414还包括用以执行诸如视频和/或图像处理之类的媒体功能的执行逻辑。在一个实施例中,执行单元附加地包括可编程以执行除图形处理操作外的并行通用计算操作的通用逻辑。通用逻辑可以与图1的(一个或多个)处理器核107或如图2中的核202A-202N内的通用逻辑并行地或结合地执行处理操作。
由在图形核阵列414上执行的线程生成的输出数据可以将数据输出到统一返回缓冲器(URB)418中的存储器。URB 418可以存储多个线程的数据。在一些实施例中,URB 418可以被用来在图形核阵列414上执行的不同线程之间发送数据。在一些实施例中,URB 418可以附加地被用于图形核阵列上的线程与共享功能逻辑420内的固定功能逻辑之间的同步。
在一些实施例中,图形核阵列414是可缩放的,使得该阵列包括可变数量的图形核,这些图形核各自基于GPE 410的目标功率和性能水平而具有可变数量的执行单元。在一个实施例中,执行资源是动态可缩放的,使得可以按需要来启用或禁用执行资源。
图形核阵列414与共享功能逻辑420耦合,该共享功能逻辑420包括在图形核阵列中的图形核之间共享的多个资源。共享功能逻辑420内的共享功能是向图形核阵列414提供专用补充功能的硬件逻辑单元。在各种实施例中,共享功能逻辑420包括但不限于采样器421、数学422和线程间通信(ITC)423逻辑。附加地,一些实施例实现共享功能逻辑420内的一个或多个高速缓存425。
在对于给定专用功能的需求对于图形核阵列414内的内含物而言不足够的情况下,实现共享功能。代替地,该专用功能的单个实例化被实现为共享功能逻辑420中的独立实体,并且在图形核阵列414内的执行资源当中共享。在图形核阵列414之间共享并且被包括在图形核阵列414内的精确的一组功能跨实施例而变化。在一些实施例中,图形核阵列414广泛使用的共享功能逻辑420内的特定共享功能可以被包括在图形核阵列414内的共享功能逻辑416内。在各种实施例中,图形核阵列414内的共享功能逻辑416可以包括共享功能逻辑420内的一些或全部逻辑。在一个实施例中,共享功能逻辑420内的全部逻辑元件可以在图形核阵列414的共享功能逻辑416内复制。在一个实施例中,排除共享功能逻辑420以支持图形核阵列414内的共享功能逻辑416。
图5是根据本文中描述的一些实施例的图形处理器核500的硬件逻辑的框图。图5的具有与本文中任何其它附图的元件相同的参考编号(或名称)的元件可以采用与在本文中其它地方描述的方式类似的任何方式来操作或起作用,但是不限于这样。在一些实施例中,图示的图形处理器核500被包括在图4的图形核阵列414内。图形处理器核500(有时被称为核薄片(core slice))可以是模块化图形处理器内的一个或多个图形核。图形处理器核500是示例性的一个图形核薄片,并且如本文中描述的图形处理器基于目标功率和性能包线可以包括多个图形核薄片。每个图形处理器核500可以包括与多个子核501A-501F(也被称为子薄片)耦合的固定功能块530,其包括通用和固定功能逻辑的模块化块。
在一些实施例中,固定功能块530包括:几何/固定功能流水线536,其可以由图形处理器核500中的全部子核共享,例如,在较低性能和/或较低功率图形处理器实现方式中。在各种实施例中,几何/固定功能流水线536包括3D固定功能流水线(例如,如图3和图4中的3D流水线312),视频前端单元、线程产生器(spawner)和线程分派器,以及统一返回缓冲器管理器,其管理统一返回缓冲器,诸如图4的统一返回缓冲器418。
在一个实施例中,固定功能块530还包括图形SoC接口537、图形微控制器538和媒体流水线539。图形SoC接口537提供图形处理器核500与片上系统集成电路内的其它处理器核之间的接口。图形微控制器538是可编程子处理器,其可配置成管理图形处理器核500的各种功能,其包括线程分派、调度和抢占(pre-emption)。媒体流水线539(例如,图3和图4的媒体流水线316)包括用以促进对多媒体数据(包括图像和视频数据)进行解码、编码、预处理和/或后处理的逻辑。媒体流水线539经由对子核501A-501F内计算或采样逻辑的请求来实现媒体操作。
在一个实施例中,SoC接口537使得图形处理器核500能够与通用应用处理器核(例如,CPU)和/或SoC内的其它组件进行通信,该其它组件包括存储器层级元件,诸如共享的末级高速缓冲存储器、系统RAM和/或嵌入式片上或封装上DRAM。SoC接口537还可以使得能够实现与SoC内的固定功能设备(诸如相机成像流水线)的通信,并且使得能够实现全局存储器原子的使用和/或实现所述全局存储器原子,所述全局存储器原子可以在图形处理器核500与SoC内的CPU之间共享。SoC接口537还可以实现图形处理器核500的功率管理控制,并且使得能够实现图形核500的时钟域与SoC内的其它时钟域之间的接口。在一个实施例中,SoC接口537使得能够从命令流转化器和全局线程分派器接收命令缓冲器,所述命令流转化器和全局线程分派器被配置成向图形处理器内的一个或多个图形核中的每一个提供命令和指令。当要执行媒体操作时,可以将命令和指令分派给媒体流水线539,或者当要执行图形处理操作时,可以将命令和指令分派给几何和固定功能流水线(例如,几何和固定功能流水线536、几何和固定功能流水线514)。
图形微控制器538可以被配置成执行图形处理器核500的各种调度和管理任务。在一个实施例中,图形微控制器538可以在子核501A-501F内的执行单元(EU)阵列502A-502F、504A-504F内的各种图形并行引擎上执行图形和/或计算工作负荷调度。在该调度模型中,在包括图形处理器核500的SoC的CPU核上执行的主机软件可以将工作负荷提交给调用适当的图形引擎上的调度操作的多个图形处理器门铃之一。调度操作包括确定接下来要运行哪一个工作负荷、将工作负荷提交给命令流转化器、抢占在引擎上运行的现有工作负荷、监控工作负荷的进展以及在工作负荷完成时通知主机软件。在一个实施例中,图形微控制器538还可以促进图形处理器核500的低功率或空闲状态,从而为图形处理器核500提供跨低功率状态转换独立于操作系统和/或系统上的图形驱动程序软件而保存和恢复图形处理器核500内的寄存器的能力。
图形处理器核500可以具有大于或小于图示的子核501A-501F的子核,高达N个模块化子核。对于每组N个子核,图形处理器核500还可以包括共享功能逻辑510、共享和/或高速缓冲存储器512、几何/固定功能流水线514,以及用以加速各种图形并计算处理操作的附加固定功能逻辑516。共享功能逻辑510可以包括与图4的共享功能逻辑420相关联的逻辑单元(例如,采样器、数学和/或线程间通信逻辑),其可以由图形处理器核500内的每N个子核共享。共享和/或高速缓冲存储器512可以是图形处理器核500内的该组N个子核501A-501F的末级高速缓存,并且还可以用作可由多个子核访问的共享存储器。几何/固定功能流水线514可以替代几何/固定功能流水线536而被包括在固定功能块530内,并且可以包括相同或类似的逻辑单元。
在一个实施例中,图形处理器核500包括:附加的固定功能逻辑516,其可以包括供图形处理器核500使用的各种固定功能加速逻辑。在一个实施例中,附加固定功能逻辑516包括供仅位置着色(position only shading)中使用的附加几何流水线。在仅位置着色中,存在两个几何流水线,几何/固定功能流水线516、536内的完整几何流水线以及剔除(cull)流水线,其是可以被包括在附加固定功能逻辑516内的附加几何流水线。在一个实施例中,剔除流水线是完整几何流水线的削减版本。完整流水线和剔除流水线可以执行同一应用的不同实例,每个实例具有单独的情境。仅位置着色可以隐藏已丢弃三角形的长剔除运行,从而使得在某些实例中能够更早地完成着色。例如并且在一个实施例中,附加固定功能逻辑516内的剔除流水线逻辑可以与主应用并行地执行位置着色器,并且通常比完整流水线更快地生成关键结果,因为剔除流水线仅提取并遮蔽顶点的位置属性,而不执行像素到帧缓冲的栅格化和渲染。剔除流水线可以使用生成的关键结果来计算全部三角形的可见性信息,而不管那些三角形是否被剔除。完整流水线(其在这种实例中可以被称为重放流水线)可以消耗可见性信息以跳过剔除的三角形,从而仅遮蔽被最终传递到栅格化阶段的可见三角形。
在一个实施例中,附加固定功能逻辑516还可以包括机器学习加速逻辑,诸如固定功能矩阵乘法逻辑,用于包括对机器学习训练或推理的优化的实现方式。
在每个图形子核501A-501F内包括一组执行资源,其可以被用来响应于图形流水线、媒体流水线或着色器程序的请求而执行图形、媒体和计算操作。图形子核501A-501F包括多个EU阵列502A-502F、504A-504F、线程分派和线程间通信(TD/IC)逻辑503A-503F、3D(例如,纹理)采样器505A-505F、媒体采样器506A-506F、着色器处理器507A-507F和共享本地存储器(SLM)508A-508F。EU阵列502A-502F、504A-504F各自包括多个执行单元,所述执行单元是能够在包括图形、媒体或计算着色器程序的图形、媒体或计算操作的服务中执行浮点和整数/定点逻辑操作的通用图形处理单元。TD/IC逻辑503A-503F执行用于子核内的执行单元的本地线程分派和线程控制操作,并且促进在子核的执行单元上执行的线程之间的通信。3D采样器505A-505F可以将纹理或其它3D图形相关数据读取到存储器中。3D采样器可以基于配置的样本状态和与给定纹理相关联的纹理格式来不同地读取纹理数据。媒体采样器506A-506F可以基于与媒体数据相关联的类型和格式执行类似的读取操作。在一个实施例中,每个图形子核501A-501F可以交替地包括统一的3D和媒体采样器。在子核501A-501F中的每个子核内的执行单元上执行的线程可以利用每个子核内的共享本地存储器508A-508F,以使得在线程组内执行的线程能够使用芯片上存储器的公共池来执行。
执行单元
图6A-6B图示了线程执行逻辑600,其包括根据本文中描述的实施例的图形处理器核中采用的处理元件的阵列。图6A-6B的具有与本文中任何其它附图的元件相同的参考编号(或名称)的元件可以采用与在本文中其它地方描述的方式类似的任何方式来操作或起作用,但是不限于这样。图6A图示了线程执行逻辑600的概述,其可以包括利用图5的每个子核501A-501F图示的硬件逻辑的变体。图6B图示了执行单元的示例性内部细节。
如在图6A中图示的,在一些实施例中,线程执行逻辑600包括着色器处理器602、线程分派器604、指令高速缓存606、包括多个执行单元608A-608N的可缩放执行单元阵列、采样器610、数据高速缓存612以及数据端口614。在一个实施例中,可缩放执行单元阵列可以通过基于工作负荷的计算需求来启用或禁用一个或多个执行单元(例如,执行单元608A、608B、608C,608D,一直到608N-1和608N中的任一个)来动态地缩放。在一个实施例中,所包括的组件经由互连结构而互连,该互连结构链接到组件中的每个组件。在一些实施例中,线程执行逻辑600包括通过指令高速缓存606、数据端口614、采样器610以及执行单元阵列608A-608N中的一个或多个到存储器(诸如系统存储器或高速缓冲存储器)的一个或多个连接。在一些实施例中,每个执行单元(例如,608A)是能够执行多个同时硬件线程而同时针对每个线程并行地处理多个数据元素的独立可编程通用计算单元。在各种实施例中,执行单元608A-608N的阵列是可缩放的以包括任何数量的个体执行单元。
在一些实施例中,执行单元608A-608N被主要用来执行着色器程序。着色器处理器602可以处理各种着色器程序并经由线程分派器604来分派与着色器程序相关联的执行线程。在一个实施例中,线程分派器包括如下逻辑:用以对来自图形和媒体流水线的线程发起请求进行仲裁并且在执行单元608A-608N中的一个或多个执行单元上使所请求的线程实例化。例如,几何流水线可以将顶点、曲面细分(tessellation)或几何着色器分派至线程执行逻辑以供处理。在一些实施例中,线程分派器604还可以处理来自执行着色器程序的运行时间线程产生请求。
在一些实施例中,执行单元608A-608N支持指令集(该指令集包括对许多标准3D图形着色器指令的本机支持),使得在最小的转换情况下执行来自图形库(例如,Direct 3D和OpenGL)的着色器程序。执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如,像素着色器、片段着色器)以及通用处理(例如,计算和媒体着色器)。执行单元608A-608N中的每一个都能够多发布(multi-issue)单指令多数据(SIMD)执行,并且多线程操作使得能够在面对较高延迟存储器访问时实现高效的执行环境。每个执行单元内的每个硬件线程具有专用高带宽寄存器堆和相关联的独立线程状态。对能够进行整数、单精度和双精度浮点运算、SIMD分支能力、逻辑运算、超越数运算和其它杂项运算的流水线来说,执行是每时钟多发布。在等待来自存储器或共享功能之一的数据时,执行单元608A-608N内的依赖性逻辑使等待线程休眠,直到所请求的数据已返回为止。在等待线程正在休眠时,硬件资源可以致力于处理其它线程。例如,在与顶点着色器操作相关联的延迟期间,执行单元可以执行针对像素着色器、片段着色器或者另一种类型的着色器程序(包括不同顶点着色器)的操作。
执行单元608A-608N中的每个执行单元对数据元素的阵列进行操作。数据元素的数量是“执行大小”、或指令的通道数。执行通道是针对数据元素访问、掩蔽和指令内的流控制的执行的逻辑单元。通道的数量可以与针对特定图形处理器的物理算术逻辑单元(ALU)或浮点单元(FPU)的数量无关。在一些实施例中,执行单元608A-608N支持整数和浮点数据类型。
执行单元指令集包括SIMD指令。各种数据元素可以作为压缩数据类型存储在寄存器中,并且执行单元将基于元素的数据大小来处理各种元素。例如,当对256位宽的向量进行操作时,向量的256个位被存储在寄存器中,并且执行单元按四个分离64位压缩数据元素(四字(QW)大小数据元素)、八个分离32位压缩数据元素(双字(DW)大小数据元素)、十六个分离16位压缩数据元素(字(W)大小数据元素)、或三十二个分离8位数据元素(字节(B)大小数据元素)来对该向量进行操作。然而,不同的向量宽度和寄存器大小是可能的。
在一个实施例中,一个或多个执行单元可以组合成具有线程控制逻辑(607A-607N)的融合执行单元609A-609N,该线程控制逻辑对于融合的EU是公共的。多个EU可以融合成EU组。融合的EU组中的每个EU可以被配置成执行单独的SIMD硬件线程。根据实施例,融合EU组中的EU的数量可以变化。附加地,每个EU可以执行各种SIMD宽度,包括但不限于SIMD8、SIMD16和SIMD32。每个融合图形执行单元609A-609N包括至少两个执行单元。例如,融合执行单元609A包括第一EU 608A、第二EU 608B和线程控制逻辑607A,其对于第一EU608A和第二EU 608B是公共的。线程控制逻辑607A控制在融合图形执行单元609A上执行的线程,从而允许融合执行单元609A-609N内的每个EU使用公共指令指针寄存器来执行。
在线程执行逻辑600中包括用以高速缓存执行单元的线程指令的一个或多个内部指令高速缓存(例如,606)。在一些实施例中,包括一个或多个数据高速缓存(例如,612)以在线程执行期间高速缓存线程数据。在一些实施例中,包括采样器610以为3D操作提供纹理采样并且为媒体操作提供媒体采样。在一些实施例中,采样器610包括专门的纹理或媒体采样功能,以在向执行单元提供采样数据之前的采样过程期间处理纹理或媒体数据。
在执行期间,图形和媒体流水线经由线程产生和分派逻辑向线程执行逻辑600发送线程发起请求。一旦一组几何对象已被处理并且被栅格化成像素数据,着色器处理器602内的像素处理器逻辑(例如,像素着色器逻辑、片段着色器逻辑等)就被调用以进一步计算输出信息并且使得结果被写入到输出表面(例如,颜色缓冲器、深度缓冲器、模板印刷缓冲器等)。在一些实施例中,像素着色器或片段着色器计算要跨栅格化对象而被内插的各种顶点属性的值。在一些实施例中,着色器处理器602内的像素处理器逻辑然后执行应用编程接口(API)供应的像素或片段着色器程序。为了执行着色器程序,着色器处理器602经由线程分派器604将线程分派至执行单元(例如,608A)。在一些实施例中,着色器处理器602使用采样器610中的纹理采样逻辑来访问存储在存储器中的纹理映射中的纹理数据。对纹理数据和输入几何数据的算术运算计算了每个几何片段的像素颜色数据,或丢弃一个或多个像素而不进行进一步处理。
在一些实施例中,数据端口614提供存储器访问机制,以供线程执行逻辑600将经处理的数据输出至存储器以供在图形处理器输出流水线上进一步处理。在一些实施例中,数据端口614包括或耦合至一个或多个高速缓冲存储器(例如,数据高速缓存612)以对数据进行高速缓存从而用于经由数据端口的存储器访问。
如图6B中图示的,图形执行单元608可以包括指令提取单元637、通用寄存器堆阵列(GRF)624、架构寄存器堆阵列(ARF)626、线程仲裁器622、发送单元630、分支单元632、一组SIMD浮点单元(FPU)634,并且在一个实施例中为一组专用整数SIMD ALU 635。GRF 624和ARF 626包括与在图形执行单元608中可以有效的每个同时硬件线程相关联的一组通用寄存器堆和架构寄存器堆。在一个实施例中,每个线程架构状态在ARF 626中被维持,而在线程执行期间使用的数据被存储在GRF 624中。每个线程的执行状态(包括每个线程的指令指针)可以保存在ARF 626中的线程特定寄存器中。
在一个实施例中,图形执行单元608具有架构,该架构是同步多线程(SMT)和细粒度交错多线程(IMT)的组合。该架构具有模块化配置,其可以在设计时间基于同时线程的目标数量和每个执行单元的寄存器数量进行微调,其中执行单元资源跨被用来执行多个同时线程的逻辑而被划分。
在一个实施例中,图形执行单元608可以共同发布多个指令,其每个可以是不同的指令。图形执行单元线程608的线程仲裁器622可以将指令分派给发送单元630、分支单元6342或(一个或多个)SIMD FPU 634中的一个以供执行。每个执行线程可以访问GRF 624内的128个通用寄存器,其中每个寄存器可以存储32个字节,可按32位数据元素的SIMD 8元素向量进行访问。在一个实施例中,每个执行单元线程可以访问GRF 624内的4千字节,但是实施例不如此限制,并且在其它实施例中可以提供更多或更少的寄存器资源。在一个实施例中,高达七个线程可以同时执行,但是每个执行单元的线程数量也可以根据实施例而变化。在其中七个线程可以访问4千字节的实施例中,GRF 624可以存储总共28千字节。灵活的寻址模式可以允许寄存器被一起寻址以有效地构建更宽的寄存器或表示跨越式矩形块数据结构。
在一个实施例中,经由被消息传递发送单元630执行的“发送”指令来分派存储器操作、采样器操作和其它较长延迟系统通信。在一个实施例中,将分支指令分派给专用分支单元632以促进SIMD发散和最终收敛。
在一个实施例中,图形执行单元608包括一个或多个SIMD浮点单元((一个或多个)FPU)634以执行浮点运算。在一个实施例中,(一个或多个)FPU 634还支持整数计算。在一个实施例中,(一个或多个)FPU 634可以SIMD执行高达M个32位浮点(或整数)操作,或者SIMD执行高达2M 16位整数或16位浮点操作。在一个实施例中,(一个或多个)FPU中的至少一个提供扩展的数学能力以支持高吞吐量超越数学函数和双精度64位浮点。在一些实施例中,一组8位整数SIMD ALU 635还存在,并且可以具体地被优化以执行与机器学习计算相关联的操作。
在一个实施例中,图形执行单元608的多个实例的阵列可以在图形子核分组(例如,子薄片)中被实例化。对于可扩缩性,产品架构师可以选择每个子核分组确切的执行单元数量。在一个实施例中,执行单元608可以跨多个执行通道执行指令。在另外的实施例中,在图形执行单元608上执行的每个线程在不同的通道上执行。
图7是图示了根据一些实施例的图形处理器指令格式700的框图。在一个或多个实施例中,图形处理器执行单元支持具有采用多种格式的指令的指令集。实线框图示了通常被包括在执行单元指令中的组件,而虚线包括可选的或仅被包括在指令的子集中的组件。在一些实施例中,所描述和图示的指令格式700是宏指令,因为它们是被供应至执行单元的指令,这与由在指令被处理以后指令进行解码而产生的微操作相反。
在一些实施例中,图形处理器执行单元本机地支持采用128位指令格式710的指令。基于所选指令、指令选项和操作数的数量,64位压缩指令格式730可用于一些指令。本机128位指令格式710提供对全部指令选项的访问,而一些选项和操作被限制在64位格式730中。采用64位格式730的可用的本机指令根据实施例而变化。在一些实施例中,使用索引字段713中的一组索引值来部分地压缩指令。执行单元硬件基于索引值来参考一组压缩表,并且使用压缩表输出来重构采用128位指令格式710的本机指令。
针对每种格式,指令操作码712定义执行单元要执行的操作。执行单元跨每个操作数的多个数据元素来并行地执行每个指令。例如,响应于加法指令,执行单元跨表示纹理元素或图片元素的每个颜色通道来执行同步加法运算。默认地,执行单元跨操作数的全部数据通道来执行每个指令。在一些实施例中,指令控制字段714启用对某些执行选项的控制,所述某些执行选项诸如通道选择(例如,预测)以及数据通道次序(例如,搅和)。针对采用128位指令格式710的指令,执行大小字段716限制了将并行执行的数据通道的数量。在一些实施例中,执行大小字段716不可供64位压缩指令格式730中使用。
一些执行单元指令具有高达三个操作数,包括两个源操作数src0 720、src1 722和一个目的地718。在一些实施例中,执行单元支持双目的地指令,其中目的地之一是隐含的。数据操纵指令可以具有第三源操作数(例如,SRC2 724),其中,指令操作码712确定源操作数的数量。指令的最后的源操作数可以是利用指令传递的立即(例如,硬编码的)值。
在一些实施例中,128位指令格式710包括访问/寻址模式字段726,该访问/寻址模式字段726例如指定了使用直接寄存器寻址模式还是间接寄存器寻址模式。当使用直接寄存器寻址模式时,由指令中的位来直接提供一个或多个操作数的寄存器地址。
在一些实施例中,128位指令格式710包括访问/寻址模式字段726,该访问/寻址模式字段726指定指令的寻址模式和/或访问模式。在一个实施例中,访问模式被用来限定针对指令的数据访问对齐。一些实施例支持包括16字节对齐访问模式和1字节对齐访问模式的访问模式,其中,访问模式的字节对齐确定了指令操作数的访问对齐。例如,当在第一模式中时,针对源和目的地操作数,指令可以使用字节对齐寻址,并且当在第二模式中时,针对全部源和目的地操作数,指令可以使用16字节对齐寻址。
在一个实施例中,访问/寻址模式字段726的寻址模式部分确定指令要使用直接寻址还是间接寻址。当使用直接寄存器寻址模式时,指令中的位直接提供一个或多个操作数的寄存器地址。当使用间接寄存器寻址模式时,可以基于指令中的地址寄存器值和地址立即字段来计算一个或多个操作数的寄存器地址。
在一些实施例中,基于操作码712位字段对指令进行分组,以简化操作码解码740。对于8位操作码,位4、5和6允许执行单元确定操作码的类型。所示出的精确操作码分组仅是示例。在一些实施例中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如,移动(mov)、比较(cmp))。在一些实施例中,移动和逻辑组742共享五个最高有效位(MSB),其中移动(mov)指令采用0000xxxxb的形式,而逻辑指令采用0001xxxxb的形式。流控制指令组744(例如,调用(call)、跳(jmp))包括采用0010xxxxb(例如,0x20)的形式的指令。混杂指令组746包括指令的混合,包括采用0011xxxxb(例如,0x30)的形式的同步指令(例如,等待、发送)。并行数学指令组748包括采用0100xxxxb(例如,0x40)的形式的逐组件的算术指令(例如,加、乘(mul))。并行数学组748跨数据通道并行执行算术运算。向量数学组750包括采用0101xxxxb(例如,0x50)的形式的算术指令(例如,dp4)。向量数学组对向量操作数执行诸如点积计算之类的算术。
图形流水线
图8是图形处理器800的另一实施例的框图。图8的具有与本文中任何其它附图的元件相同的参考编号(或名称)的元件可以采用与在本文中其它地方描述的方式类似的任何方式来操作或起作用,但是不限于这样。
在一些实施例中,图形处理器800包括几何流水线820、媒体流水线830、显示引擎840、线程执行逻辑850、以及渲染输出流水线870。在一些实施例中,图形处理器800是包括一个或多个通用处理核的多核处理系统内的图形处理器。图形处理器受至一个或多个控制寄存器(未示出)的寄存器写入控制或者经由通过环形互连802而发布至图形处理器800的命令而被控制。在一些实施例中,环形互连802将图形处理器800耦合至其它处理组件,诸如其它图形处理器或通用处理器。来自环形互连802的命令由命令流转化器803解译,该命令流转化器将指令供应至几何流水线820或媒体流水线830的个体组件。
在一些实施例中,命令流转化器803指导顶点提取器805的操作,该顶点提取器805从存储器读取顶点数据并且执行由命令流转化器803提供的顶点处理命令。在一些实施例中,顶点提取器805将顶点数据提供给顶点着色器807,该顶点着色器807对每个顶点执行坐标空间变换和照明操作。在一些实施例中,顶点提取器805和顶点着色器807通过经由线程分派器831向执行单元852A-852B分派执行线程来执行顶点处理指令。
在一些实施例中,执行单元852A-852B是具有用于执行图形和媒体操作的指令集的向量处理器的阵列。在一些实施例中,执行单元852A-852B具有附接的L1高速缓存851,其专用于每个阵列或在阵列之间共享。高速缓存可以被配置为数据高速缓存、指令高速缓存、或单个高速缓存,该单个高速缓存被分区以在不同分区中包含数据和指令。
在一些实施例中,几何流水线820包括用以执行3D对象的硬件加速曲面细分的曲面细分组件。在一些实施例中,可编程的外壳着色器811配置曲面细分操作。可编程域着色器817提供曲面细分输出的后端评估。曲面细分器813在外壳着色器811的方向处进行操作并且包含专用逻辑,该专用逻辑用以基于粗略几何模型来生成一组详细几何对象,该粗略几何模型作为输入而被提供至几何流水线820。在一些实施例中,如果未使用曲面细分,则可以绕过曲面细分组件(例如,外壳着色器811、曲面细分器813和域着色器817)。
在一些实施例中,完整的几何对象可以由几何着色器819经由被分派至执行单元852A-852B的一个或多个线程来处理、或者可以直接行进至裁剪器(clipper)829。在一些实施例中,几何着色器对整个几何对象进行操作,而不是如在图形流水线的先前级中对顶点或顶点的补丁进行操作。如果禁用曲面细分,那么几何着色器819接收来自顶点着色器807的输入。在一些实施例中,几何着色器819可由几何着色器程序编程以便在曲面细分单元被禁用的情况下执行几何曲面细分。
在栅格化之前,裁剪器829处理顶点数据。裁剪器829可以是固定功能裁剪器或者具有裁剪和几何着色器功能的可编程裁剪器。在一些实施例中,渲染输出流水线870中的栅格化器和深度测试组件873分派像素着色器以将几何对象转换成逐像素表示。在一些实施例中,像素着色器逻辑被包括在线程执行逻辑850中。在一些实施例中,应用可以绕过栅格化器和深度测试组件873,并且经由流出单元823访问未栅格化的顶点数据。
图形处理器800具有互连总线、互连结构、或某个其它的互连机构,该互连机构允许数据和消息在处理器的主要组件当中传递。在一些实施例中,执行单元852A-852B和相关联的逻辑单元(例如,L1高速缓存851、采样器854、纹理高速缓存858等)经由数据端口856互连,以执行存储器访问并且与处理器的渲染输出流水线组件进行通信。在一些实施例中,采样器854、高速缓存851、858以及执行单元852A-852B各自具有单独的存储器访问路径。在一个实施例中,纹理高速缓存858还可以被配置为采样器高速缓存。
在一些实施例中,渲染输出流水线870包含栅格化器和深度测试组件873,该栅格化器和深度测试组件873将基于顶点的对象转换成相关联的基于像素的表示。在一些实施例中,栅格化器逻辑包括用以执行固定功能三角形和线栅格化的窗口/掩蔽器单元。相关联的渲染高速缓存878和深度高速缓存879在一些实施例中也是可用的。像素操作组件877对数据执行基于像素的操作,然而在一些实例中,与2D操作相关联的像素操作(例如,利用混合的位块图像传送)由2D引擎841执行、或者在显示时间处由显示控制器843使用重叠显示平面来代替。在一些实施例中,共享的L3高速缓存875可用于全部图形组件,从而允许在不使用主系统存储器的情况下共享数据。
在一些实施例中,图形处理器媒体流水线830包括媒体引擎837和视频前端834。在一些实施例中,视频前端834从命令流转化器803接收流水线命令。在一些实施例中,媒体流水线830包括单独的命令流转化器。在一些实施例中,视频前端834在将命令发送至媒体引擎837之前处理媒体命令。在一些实施例中,媒体引擎837包括用以产生线程以用于经由线程分派器831分派至线程执行逻辑850的线程产生功能。
在一些实施例中,图形处理器800包括显示引擎840。在一些实施例中,显示引擎840在处理器800外部并且经由环形互连802、或某个其它互连总线或结构与图形处理器耦合。在一些实施例中,显示引擎840包括2D引擎841和显示控制器843。在一些实施例中,显示引擎840包含能够独立于3D流水线而操作的专用逻辑。在一些实施例中,显示控制器843与显示设备(未示出)耦合,该显示设备可以是系统集成显示设备(如在膝上型计算机中)、或者经由显示设备连接器附接的外部显示设备。
在一些实施例中,几何流水线820和媒体流水线830可配置成基于多个图形和媒体编程接口执行操作,并且不特定于任何一种应用编程接口(API)。在一些实施例中,图形处理器的驱动器软件将特定于特定图形或媒体库的API调用转化成可以由图形处理器处理的命令。在一些实施例中,为全部来自Khronos Group的开放图形库(OpenGL)、开放计算语言(OpenCL)和/或Vulkan图形和计算API提供支持。在一些实施例中,还可以为来自微软公司的Direct3D库提供支持。在一些实施例中,可以支持这些库的组合。还可以为开源计算机视觉库(OpenCV)提供支持。如果可以做出从未来API的流水线到图形处理器的流水线的映射,则具有兼容3D流水线的未来API也将被支持。
图形流水线编程
图9A是图示了根据一些实施例的图形处理器命令格式900的框图。图9B是图示了根据实施例的图形处理器命令序列910的框图。图9A中的实线框图示了通常被包括在图形命令中的组件,而虚线包括可选的或者仅被包括在图形命令的子集中的组件。图9A的示例性图形处理器命令格式900包括用以识别命令的客户端902、命令操作代码(操作码)904和数据906的数据字段。在一些命令中,还包括子操作码905和命令大小908。
在一些实施例中,客户端902指定了处理命令数据的图形设备的客户端单元。在一些实施例中,图形处理器命令解析器(parser)检查每个命令的客户端字段以调节对命令的进一步处理,并且将命令数据路由至适当的客户端单元。在一些实施例中,图形处理器客户端单元包括存储器接口单元、渲染单元、2D单元、3D单元和媒体单元。每个客户端单元具有对命令进行处理的对应的处理流水线。一旦客户端单元接收到命令,客户端单元就读取操作码904和子操作码905(如果存在的话)以确定要执行的操作。客户端单元使用数据字段906中的信息来执行命令。对于一些命令,预期显式命令大小908来指定命令的大小。在一些实施例中,命令解析器基于命令操作码自动地确定命令中的至少一些命令的大小。在一些实施例中,经由双字的倍数来对命令进行对齐。
图9B中的流程图图示了示例性图形处理器命令序列910。在一些实施例中,以图形处理器的实施例为特征的数据处理系统的软件或固件使用所示出的一种版本的命令序列来设置、执行和终止一组图形操作。仅出于示例的目的示出并描述了样本命令序列,因为实施例不限于这些特定命令或者该命令序列。而且,命令可以作为采用命令序列的批命令来发布,使得图形处理器将至少部分并发地处理命令的序列。
在一些实施例中,图形处理器命令序列910可以以流水线刷新命令912开始以便使得任何活动图形流水线完成针对该流水线的当前未决命令。在一些实施例中,3D流水线922和媒体流水线924不同时进行操作。执行流水线刷新以使得活动图形流水线完成任何未决命令。响应于流水线刷新,图形处理器的命令解析器将暂停命令处理,直到活动绘图引擎完成未决操作并且相关读取高速缓存无效为止。可选地,可以将被标记为“脏”的渲染高速缓存中的任何数据刷新到存储器。在一些实施例中,流水线刷新命令912可以被用于流水线同步或者在将图形处理器置于低功率状态中之前使用。
在一些实施例中,当命令序列要求图形处理器在流水线之间显式地切换时,使用流水线选择命令913。在一些实施例中,在发布流水线命令之前,在执行情境内仅需要流水线选择命令913一次,除非该情境要发布针对两条流水线的命令。在一些实施例中,在经由流水线选择命令913进行的流水线切换之前,立即需要流水线刷新命令912。
在一些实施例中,流水线控制命令914配置图形流水线以供操作,并且被用来对3D流水线922和媒体流水线924进行编程。在一些实施例中,流水线控制命令914配置活动流水线的流水线状态。在一个实施例中,流水线控制命令914被用于流水线同步,并且在处理一批命令之前从活动流水线内的一个或多个高速缓冲存储器清除数据。
在一些实施例中,返回缓冲器状态命令916被用来配置一组返回缓冲器以供相应的流水线写入数据。一些流水线操作需要分配、选择或配置一个或多个返回缓冲器,所述操作在处理期间将中间数据写入到所述一个或多个返回缓冲器中。在一些实施例中,图形处理器还使用一个或多个返回缓冲器来存储输出数据并且执行跨线程通信。在一些实施例中,返回缓冲器状态916包括选择返回缓冲器的大小和数量以用于一组流水线操作。
命令序列中的剩余命令基于用于操作的活动流水线而不同。基于流水线确定920,该命令序列被调整到以3D流水线状态930开始的3D流水线922或者在媒体流水线状态940处开始的媒体流水线924。
用以配置3D流水线状态930的命令包括:用于顶点缓冲器状态、顶点元素状态、常量颜色状态、深度缓冲器状态、以及要在处理3D图元命令之前配置的其它状态变量的3D状态设置命令。这些命令的值至少部分地基于使用中的特定3D API来确定。在一些实施例中,3D流水线状态930命令还能够选择性地禁用或绕过某些流水线元件,如果将不使用那些元件的话。
在一些实施例中,3D图元932命令被用来提交要由3D流水线处理的3D图元。将经由3D图元932命令传递给图形处理器的命令和相关联的参数转发给图形流水线中的顶点提取功能。顶点提取功能使用3D图元932命令数据来生成顶点数据结构。将顶点数据结构存储在一个或多个返回缓冲器中。在一些实施例中,3D图元932命令被用来经由顶点着色器来对3D图元执行顶点操作。为了处理顶点着色器,3D流水线922将着色器执行线程分派至图形处理器执行单元。
在一些实施例中,经由执行934命令或事件来触发3D流水线922。在一些实施例中,寄存器写入触发命令执行。在一些实施例中,经由命令序列中的“去”(“go”)或“踢”(“kick”)命令来触发执行。在一个实施例中,使用流水线同步命令来触发命令执行,以通过图形流水线来刷新命令序列。3D流水线将执行针对3D图元的几何处理。一旦运算完成,便对所得几何对象进行栅格化,并且像素引擎给所得像素涂颜色。用以控制像素着色和像素后端操作的附加命令还可以被包括以用于那些操作。
在一些实施例中,当执行媒体操作时,图形处理器命令序列910跟随在媒体流水线924路径之后。一般而言,媒体流水线924的特定使用和编程方式取决于要执行的媒体或计算操作。在媒体解码期间,可以将特定媒体解码操作卸载到媒体流水线。在一些实施例中,还可以绕过媒体流水线,并且可以整体地或部分地使用由一个或多个通用处理核提供的资源来执行媒体解码。在一个实施例中,媒体流水线还包括用于通用图形处理器单元(GPGPU)操作的元件,其中,该图形处理器被用来使用计算着色器程序来执行SIMD向量运算,该计算着色器程序与图形图元的渲染不是显式相关的。
在一些实施例中,以与3D流水线922类似的方式对媒体流水线924进行配置。将用以配置媒体流水线状态940的一组命令分派或放置到在媒体对象命令942之前的命令队列中。在一些实施例中,针对媒体流水线状态940的命令包括:用以配置媒体流水线元件的数据,所述媒体流水线元件将被用来处理媒体对象。这包括用以在媒体流水线内配置视频解码和视频编码逻辑的数据,诸如编码或解码格式。在一些实施例中,针对媒体流水线状态940的命令还支持使用指向包含一批状态设置的“间接”状态元件的一个或多个指针。
在一些实施例中,媒体对象命令942将指针供应至媒体对象以供媒体流水线处理。媒体对象包括存储器缓冲器,该存储器缓冲器包含要处理的视频数据。在一些实施例中,在发布媒体对象命令942之前,全部媒体流水线状态必须是有效的。一旦流水线状态被配置并且媒体对象命令942被排队,就经由执行命令944或等效的执行事件(例如,寄存器写入)来触发媒体流水线924。然后可以通过由3D流水线922或媒体流水线924提供的操作对来对从媒体流水线924的输出进行后处理。在一些实施例中,以与媒体操作类似的方式来配置和执行GPGPU操作。
图形软件架构
图10图示了根据一些实施例的数据处理系统1000的示例性图形软件架构。在一些实施例中,软件架构包括:3D图形应用1010、操作系统1020、以及至少一个处理器1030。在一些实施例中,处理器1030包括:图形处理器1032以及一个或多个通用处理器核1034。图形应用1010和操作系统1020各自在数据处理系统的系统存储器1050中执行。
在一些实施例中,3D图形应用1010包含一个或多个着色器程序,该一个或多个着色器程序包括着色器指令1012。着色器语言指令可以采用高级着色器语言,诸如高级着色器语言(HLSL)或OpenGL着色器语言(GLSL)。该应用还包括采用适用于由通用处理器核1034执行的采用机器语言的可执行指令1014。该应用还包括由顶点数据定义的图形对象1016。
在一些实施例中,操作系统1020是来自微软公司的Microsoft® Windows®操作系统、专有UNIX式操作系统、或使用Linux内核的变体的开源UNIX式操作系统。操作系统1020可以支持图形API 1022,诸如Direct3D API、OpenGL API或Vulkan API。当Direct3DAPI在使用中时,操作系统1020使用前端着色器编译器1024来将采用HLSL的任何着色器指令1012编译为较低级着色器语言。该编译可以是即时(JIT)编译,或者该应用可以执行着色器预编译。在一些实施例中,在对3D图形应用1010进行编译期间,将高级着色器编译成低级着色器。在一些实施例中,着色器指令1012是以中间形式(诸如,由Vulkan API使用的一种版本的标准便携式中间表示(SPIR))提供的。
在一些实施例中,用户模式图形驱动器1026包含后端着色器编译器1027,该后端着色器编译器1027用以将着色器指令1012转换成硬件特定的表示。当OpenGL API在使用中时,将采用GLSL高级语言的着色器指令1012传递给用户模式图形驱动器1026以供编译。在一些实施例中,用户模式图形驱动器1026使用操作系统内核模式功能1028来与内核模式图形驱动器1029进行通信。在一些实施例中,内核模式图形驱动器1029与图形处理器1032进行通信以分派命令和指令。
IP核实现方式
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性代码来实现,该代表性代码表示和/或定义诸如处理器之类的集成电路内的逻辑。例如,机器可读介质可以包括表示处理器内的各种逻辑的指令。当由机器读取时,该指令可以使得机器制造用以执行本文中描述的技术的逻辑。这样的表示(被称为“IP核”)是用于集成电路的逻辑的可重复使用单元,该可重复使用单元可以作为对集成电路的结构进行描述的硬件模型而存储在有形机器可读介质上。可以将硬件模型供应至各种客户或制造设施,其将硬件模型加载在制造集成电路的制造机器上。可以制造集成电路,使得电路执行与本文中描述的实施例中的任何实施例相关联地描述的操作。
图11A是图示了根据实施例的可以被用来制造用以执行操作的集成电路的IP核开发系统1100的框图。IP核开发系统1100可以被用来生成可以并入到更大的设计中或被用来构造整个集成电路(例如,SOC集成电路)的模块化、可重复使用设计。设计设施1130可以采用高级编程语言(例如,C/C++)来生成对IP核设计的软件仿真1110。软件仿真1110可以被用来使用仿真模型1112来设计、测试并验证IP核的行为。仿真模型1112可以包括功能、行为和/或时序仿真。然后可以根据仿真模型1112来创建或合成寄存器传送级(RTL)设计1115。RTL设计1115是对硬件寄存器之间的数字信号的流进行建模的集成电路的行为的抽象,包括使用建模的数字信号执行的相关联逻辑。除RTL设计1115外,还可以创建、设计或合成逻辑级或晶体管级的较低级设计。因此,初始设计和仿真的特定细节可以发生变化。
可以由设计设施将RTL设计1115或等效物进一步合成为硬件模型1120,该硬件模型1120可以采用硬件描述语言(HDL)或物理设计数据的某种其它表示。可以进一步仿真或测试HDL以验证IP核设计。可以使用非易失性存储器1140(例如,硬盘、闪速存储器、或任何非易失性存储介质)来存储IP核设计以供递送至第三方制造设施1165。替换地,可以通过有线连接1150或无线连接1160来传输(例如,经由因特网)IP核设计。制造设施1165然后可以制造至少部分地基于IP核设计的集成电路。所制造的集成电路可以被配置成执行根据本文中描述的至少一个实施例的操作。
图11B图示了根据本文中描述的一些实施例的集成电路封装组装件1170的横截面侧视图。集成电路封装组装件1170图示了如本文中描述的一个或多个处理器或加速器设备的实现方式。封装组装件1170包括:连接到基板1180的多个硬件逻辑1172、1174的单元。逻辑1172、1174可以至少部分地以可配置逻辑或固定功能逻辑硬件来实现,并且可以包括(一个或多个)处理器核、(一个或多个)图形处理器或本文中描述的其它加速器设备中的任何的一个或多个部分。逻辑1172、1174的每个单元可以在半导体管芯内实现,并且经由互连结构1173与基板1180耦合。互连结构1173可以被配置成在逻辑1172、1174与基板1180之间路由电信号,并且可以包括互连,该互连诸如但不限于凸块或柱。在一些实施例中,互连结构1173可以被配置成路由电信号,诸如例如与逻辑1172、1174的操作相关联的功率或接地信号和/或输入/输出(I/O)信号。在一些实施例中,该基板1180是环氧基层压基板。在其它实施例中,封装基板1180可以包括其它适合类型的基板。封装组装件1170可以经由封装互连1183连接到其它电气设备。封装互连1183可以耦合到基板1180的表面,以将电信号路由到其它电子设备,诸如母板、其它芯片组或多芯片模块。
在一些实施例中,逻辑1172、1174的单元与桥接器1182电耦合,该桥接器1182被配置成在逻辑1172、1174之间路由电信号。桥接器1182可以是密集互连结构,其提供用于电信号的路径。桥接器1182可以包括由玻璃或合适的半导体材料构成的桥接器基板。可以在桥接器基板上形成电路由特征,以在逻辑1172、1174之间提供芯片到芯片连接。
尽管图示了两个逻辑1172、1174的单元和桥接器1182,但是本文中描述的实施例可以包括在一个或多个管芯上的更多或更少逻辑单元。一个或多个管芯可以通过零个或更多桥接器连接,因为当逻辑被包括在单个管芯上时可以排除桥接器1182。替换地,多个管芯或逻辑的单元可以通过一个或多个桥接器连接。附加地,多个逻辑单元、管芯和桥接器可以用包括三维配置的其它可能的配置连接在一起。
示例性片上系统集成电路
图12-14图示了根据本文中描述的各种实施例的可以使用一个或多个IP核来制造的示例性集成电路和相关联图形处理器。除了所图示的内容之外,还可以包括其它逻辑和电路,包括附加的图形处理器/核、外围接口控制器或通用处理器核。
图12是图示了根据实施例的可以使用一个或多个IP核来制造的示例性片上系统集成电路1200的框图。示例性集成电路1200包括一个或多个应用处理器1205(例如,CPU)、至少一个图形处理器1210,并且可以附加地包括图形处理器1215和/或视频处理器1220,其中的任何都可以是来自相同或多个不同设计设施的模块化IP核。集成电路1200包括:外围或总线逻辑,其包括USB控制器1225、UART控制器1230、SPI/SDIO控制器1235和I2S/I2C控制器1240。附加地,集成电路可以包括显示设备1245,该显示设备1245耦合至高清晰度多媒体接口(HDMI)控制器1250和移动产业处理器接口(MIPI)显示界面1255中的一个或多个。可以由闪速存储器子系统1260(包括闪速存储器和闪速存储器控制器)来提供存储。可以经由存储器控制器1265来提供存储器接口以访问SDRAM或SRAM存储器设备。一些集成电路附加地包括嵌入式安全引擎1270。
图13A-13B是图示了根据本文中描述的实施例的供SoC内使用的示例性图形处理器的框图。图13A图示了根据实施例的可以使用一个或多个IP核来制造的片上系统集成电路的示例性图形处理器1310。图13B图示了根据实施例的可以使用一个或多个IP核来制造的片上系统集成电路的附加示例性图形处理器1340。图13A的图形处理器1310是低功率图形处理器核的示例。图13B的图形处理器1340是更高性能图形处理器核的示例。图形处理器1310、1340中的每一个可以是图12的图形处理器1210的变体。
如在图13A中示出的,图形处理器1310包括顶点处理器1305和一个或多个片段处理器1315A-1315N(例如,1315A、1315B、1315C、1315D,一直到1315N-1和1315N)。图形处理器1310可以经由单独的逻辑来执行不同的着色器程序,使得顶点处理器1305被优化以执行针对顶点着色器程序的操作,而一个或多个片段处理器1315A-1315N执行针对片段或像素着色器程序的片段(例如,像素)着色操作。顶点处理器1305执行3D图形流水线的顶点处理级,并且生成图元和顶点数据。(一个或多个)片段处理器1315A-1315N使用由顶点处理器1305生成的图元和顶点数据来产生显示在显示设备上的帧缓冲。在一个实施例中,(一个或多个)片段处理器1315A-1315N被优化以执行如为OpenGL API中提供的片段着色器程序,所述片段着色器程序可以被用来执行与如为Direct 3D API中提供的像素着色器程序相似的操作。
图形处理器1310附加地包括一个或多个存储器管理单元(MMU)1320A-1320B、(一个或多个)高速缓存1325A-1325B和(一个或多个)电路互连1330A-1330B。该一个或多个MMU1320A-1320B为图形处理器1310(包括为顶点处理器1305和/或(一个或多个)片段处理器1315A-1315N)提供虚拟到物理地址映射,该虚拟到物理地址映射除了存储在一个或多个高速缓存1325A-1325B中的顶点或图像/纹理数据之外还可以引用存储在存储器中的顶点或图像/纹理数据。在一个实施例中,一个或多个MMU 1320A-1320B可以与系统内的其它MMU同步,所述其它MMU包括与图12的一个或多个应用处理器1205、图像处理器1215和/或视频处理器1220相关联的一个或多个MMU,使得每个处理器1205-1220可以参与到共享或统一的虚拟存储器系统中。根据实施例,一个或多个电路互连1330A-1330B使得图形处理器1310能够经由SoC的内部总线或经由直接连接来与SoC内的其它IP核对接。
如图13B所示出的,图形处理器1340包括图13A的图形处理器1310的一个或多个MMU 1320A-1320B、高速缓存1325A-1325B和电路互连1330A-1330B。图形处理器1340包括:一个或多个着色器核1355A-1355N(例如,1455A、1355B、1355C、1355D、1355E、1355F、一直到1355N-1和1355N),其提供统一的着色器核架构,其中单个核或类型或核可以执行全部类型的可编程着色器代码,包括用以实现顶点着色器、片段着色器和/或计算着色器的着色器程序代码。存在的着色器核的确切数量可以在实施例和实现方式当中发生变化。附加地,图形处理器1340包括核间任务管理器1345,该核间任务管理器1345充当用以将执行线程分派给一个或多个着色器核1355A-1355N的线程分派器以及用以对针对基于瓦片的渲染的铺瓦操作进行加速的铺瓦单元1358,在所述基于瓦片的渲染中,场景的渲染操作在图像空间中被细分,例如以便利用场景内的局部空间一致性或以便优化内部高速缓存的使用。
图14A-14B图示了根据本文中描述的实施例的附加的示例性图形处理器逻辑。图14A图示了图形核1400,其可以被包括在图12的图形处理器1210内,并且可以是如图13B中的统一着色器核1355A-1355N。图14B图示了附加的高度并行的通用图形处理单元1430,其是适合于部署在多芯片模块上的高度并行的通用图形处理适合单元。
如在图14A示出的,图形核1400包括:共享指令高速缓存1402、纹理单元1418和高速缓存/共享存储器1420,它们对于图形核1400内的执行资源是公共的。图形核1400可以包括针对每个核的多个薄片1401A-1401N或分区,并且图形处理器可以包括图形核1400的多个实例。薄片1401A-1401N可以包括支持逻辑,该支持逻辑包括本地指令高速缓存1404A-1404N、线程调度器1406A-1406N、线程分派器1408A-1408N和一组寄存器1410A-1440N。为了执行逻辑操作,薄片1401A-1401N可以包括一组附加功能单元(AFU 1412A-1412N)、浮点单元(FPU 1414A-1414N)、整数算术逻辑单元(ALU 1416-1416N)、地址计算单元(ACU 1413A-1413N)、双精度浮点单元(DPFPU 1415A-1415N)和矩阵处理单元(MPU 1417A-1417N)。
计算单元中的一些以特定精度进行操作。例如,FPU 1414A-1414N可以执行单精度(32位)和半精度(16位)浮点运算,而DPFPU 1415A-1415N执行双精度(64位)浮点运算。ALU1416A-1416N可以用8位、16位和32位精度来执行可变精度整数运算,并且可以被配置用于混合精度运算。MPU 1417A-1417N还可以被配置用于混合精度矩阵运算,包括半精度浮点和8位整数运算。MPU 1417-1417N可以执行各种各样的矩阵操作以对机器学习应用框架进行加速,包括使得能够实现对经加速的通用矩阵到矩阵乘法(GEMM)的支持。AFU 1412A-1412N可以执行浮点或整数单元不支持的附加逻辑运算,包括三角运算(例如,正弦、余弦等)。
如在图14B中示出的,通用处理单元(GPGPU)1430可以被配置成使得高度并行的计算操作能够由图形处理单元的阵列执行。附加地,GPGPU 1430可以直接链接至GPGPU的其它实例以创建多GPU集群,从而改进特别深的神经网络的训练速度。GPGPU 1430包括:用以使得能够实现与主机处理器的连接的主机接口1432。在一个实施例中,主机接口1432是PCIExpress接口。然而,主机接口还可以是供应方特定的通信接口或通信结构。GPGPU 1430从主机处理器接收命令,并且使用全局调度器1434来将与那些命令相关联的执行线程分发给一组计算集群1436A-1436H。计算集群1436A-1436H共享高速缓冲存储器1438。高速缓冲存储器1438可以用作计算集群1436A-1436H内的高速缓冲存储器的高级高速缓存。
GPGPU 1430包括:存储器14434A-14434B,它们经由一组存储器控制器1442A-1442B与计算集群1436A-1436H耦合。在各种实施例中,存储器1434A-1434B可以包括各种类型的存储器设备,包括动态随机存取存储器(DRAM)或图形随机存取存储器,诸如同步图形随机存取存储器(SGRAM),包括图形双数据速率(GDDR)存储器,。
在一个实施例中,计算集群1436A-1436H各自包括一组图形核,诸如图14A的图形核1400,其可以包括多种类型的整数和浮点逻辑单元,所述整数和浮点逻辑单元可以按包括适合于机器学习计算的一系列精度来执行计算操作。例如且在一个实施例中,至少计算集群1436A-1436H中的每个中的浮点单元的一子集可以被配置成执行16位或32位浮点运算,而浮点单元的不同子集可以被配置成执行64位浮点运算。
GPGPU 1430的多个实例可以被配置成作为计算集群进行操作。由计算集群用于同步和数据交换的通信机制跨实施例而变化。在一个实施例中,GPGPU 1430的多个实例通过主机接口1432进行通信。在一个实施例中,GPGPU 1430包括:使GPGPU 1430与GPU链路1440耦合的I/O集线器1439,该GPU链路1440使得能够实现至GPGPU的其它实例的直接连接。在一个实施例中,GPU链路1440耦合至专用GPU至GPU桥接器,该桥接器使得能够实现GPGPU 1430的多个实例之间的通信和同步。在一个实施例中,GPU链路1440与高速互连相耦合,以将数据传输至其它GPGPU或并行处理器以及接收数据。在一个实施例中,GPGPU 1430的多个实例位于单独的数据处理系统中并且经由网络设备进行通信,该网络设备可经由主机接口1432来访问。在一个实施例中,除主机接口1432之外或作为对主机接口1432的替换物,GPU链路1440可以被配置成使得能够实现至主机处理器的连接。
虽然GPGPU 1430的图示配置可以被配置成训练神经网络,但是一个实施例提供了GPGPU 1430的替代配置,其可以被配置用于部署在高性能或低功率推理平台内。在推理配置中,GPGPU 1430包括:相对于训练配置更少的计算集群1436A-1436H。附加地,与存储器1434A-1434B相关联的存储器技术可以在推理与训练配置之间不同,其中更高带宽的存储器技术致力于训练配置。在一个实施例中,GPGPU 1430的推理配置可以支持推理特定的指令。例如,推理配置可以提供对一个或多个8位整数点积指令的支持,所述8位整数点积指令通常在针对已部署的神经网络的推理操作期间使用。
用于光线追踪重度实例化场景的跨实例从前到后遍历
如上文提到的,光线追踪是一种图形处理技术,其中通过基于物理的渲染来模拟光传输。光线追踪中的关键操作之一是处理可见性查询,该查询需要对包围体积层级(BVH)中的节点进行遍历和交叉测试。
图15图示了在由分层级布置的包围盒所包围的多个图元1510-1517周围构建的示例BVH。在层级的最低层,单个包围盒1503A-H围绕每个图元1510-1517。在层级的第二层,附加包围盒1502A-D被构造成包封来自第一层的多个包围盒1503A-H,第二层包围盒被第三层包围盒1501A-B所包封,并且最后,在层级的最高层的包围盒1500包封所有包围盒。
一旦被构造,光线追踪系统通过层级来遍历初级光线,以识别与各种图元1510-1517的交叉。每个交叉可以产生附加光线,所述附加光线可以根据对象的表面的性质而被反射和/或折射。命中着色器可被用来例如对表面使用双向反射分布函数(BRDF)来执行采样,从而从交叉点发射一条或多条次级光线。
实例化
“实例化”是建模复杂场景中的重要工具。以其最抽象的概念来说,实例化是指只对给定对象(比如说,树或灌木)建模一次,并且然后在整个复杂场景中多次重复使用这种“基础几何形状”,诸如当通过这种基础几何形状的若干经变换的“副本”而对整个树木繁茂且灌木茂密的景观进行建模时。图16A-B图示了场景的两个示例,所述场景使用这种实例化以使用共享的基础几何形状来再现树和灌木。
不是创建基础对象的实际经变换的副本(因而以及其中所有图元的副本),而是只将变换的标识和信息(通过所述信息来引用对象)存储为(对象引用,变换)对。然后,每个这样的对被用作这个基础对象的“实例”。
本发明的实施例
图17示出了示例架构,在所述示例架构上可以采用本发明的实施例,所述示例架构包括配置在图形处理单元(GPU)1720上的光线追踪引擎1710。在图示的实现中,光线追踪引擎1710利用多个处理单元1750-1755来实现本文中描述的跨实例遍历操作的全部或子集。处理单元可以是配备有单指令多数据(SIMD)功能单元和向量寄存器的执行单元(EU),所述向量寄存器用于存储打包的SIMD数据元素。在一个特定实施例中,处理单元1750-1755中的一些或所有处理单元是张量核或张量执行单元,其被配备成并行处理张量数据。张量数据可以被用于例如深度学习矩阵算法。
光线追踪引擎1710的各种组件可以在固定功能电路、软件(例如,着色器和在多个处理单元1750-1755上执行的其它软件组件)、或其任何组合中被实现。例如,在一个实施例中,光线遍历逻辑1703和/或光线交叉逻辑1708在固定功能电路中被实现,而其它组件被实现为由处理单元1750-1755所执行的着色器软件。
在操作中,BVH构造逻辑1704根据来自多个对象(诸如本文中描述的基础对象)的输入图元1706来构建BVH 1705。光线生成器1702从一个或多个光源(潜在地具有不同的特性)生成光线,所述光线通过光线遍历逻辑1703而遍历通过BVH 1706。由光线交叉逻辑1708来检测与对象图元的交叉。交叉结果1707可以包括(例如,根据每个对象的BRDF而反射/折射的)多条次级光线,所述次级光线也可以由光线遍历逻辑1703和光线交叉逻辑1708来处理(潜在地生成附加光线)。
光线追踪实例
在光线追踪中,通常使用两级(或更多级)加速结构来处理实例化,在图18中图示了所述加速结构的示例。这里,一个专用加速结构(例如,BVH)1810被附接到每个基础对象1800(仅由此对象的几何图元组成),并且然后在那些对象的所有世界空间(world-space)实例1801A-D上构建单独的加速结构(例如,顶级BVH)1820。
在顶级加速结构1820中,每个图元涉及一实例;当光线遍历到达此顶级BVH中的叶时,光线被变换到实例1801A-D的局部空间中,并且此变换的光线随后通过相应基础对象的加速结构1810而被遍历。
这种两级方案非常强大,因为基础对象1800和它们的局部加速结构1810两者只需被构建和存储一次;顶级加速结构1820仅包含对象引用,并且因此非常“薄”,并且易于构建/存储。利用这种方案,光线追踪可以容易地处理真正大规模的几何形状,在没有实例化的情况下,所述真正大规模的几何形状可能需要数十亿个图元。
除了允许实例化,这种相同的两级方案对于分层级建模和分层级场景更新也是非常有用的。例如,移动对象1800可以通过仅改变其变换矩阵和重建顶级树来影响,而不是变换所有图元和重建整个对象的树。
虽然经由两级加速结构的实例化非常强大,但它也对光线追踪核造成一个主要问题。为了高效地找到被光线命中的最接近的图元,光线追踪器必须有优选以从前到后的方式来快速找到哪些图元可能与此光线交叉或者将肯定不与此光线交叉的良好方法。也就是说,因为更接近的命中最终将覆写任何更早定位的、更远的命中,所以总的说来,首先找到更接近的命中,并避免更远区域的遍历改善性能。
然而,利用两级方案,每当两个实例1801A-D在空间上重叠时,任何递归深度优先遍历方案将必须挑选首先遍历那些实例中的哪一个,并且将必须首先将第一个实例遍历至完成,而不知道(一个或多个)其它实例中的任何交叉是否可能更接近。这在具有实例的显著空间重叠的场景中(例如,灌木和草与(一棵或多棵)树(所述灌木和草位于其下)的包围盒重叠),与如果是在基础对象1800的实际实例化图元上(而不是在实例化对象1801A-D上)已经构建完的单个加速结构的情况相比,这可能导致显著更高数量的遍历步骤和光线图元交叉。
解决这个问题的一个方式是在应用/建模器上放置负担,并要求大对象(已知其实例重叠)被手动拆分成具有对应较少重叠的较小对象。然而,这通常不容易总是可能的。
为了解决这些限制,不是在构建顶级树时仅在实例1801A-D上构建顶级BVH 1820,而是检测实例重叠,并且顶级BVH 1820到达对象BVH 1810中。也就是说,不是让顶级树1820仅涉及每个对象的单个根节点,而是它涉及每个对象的几个(较小的)内部节点,理想的是涉及一个对象1800下面的子树不再与其它对象重叠的点。
然而,这个解决方案有两个问题。首先,由于顶级BVH 1820实际上涉及变换的实例1801A-D,因此拆分对象BVH 1810不是小事,并且可能给遍历和构建算法两者造成问题。第二,只有如此多的重叠,此方案才能“牢不可破”;每个拆分步骤都会创建新节点,因此许多拆分步骤将可能创建大量顶级节点(或者,如果数量有限,仍然导致重叠)。
本发明的一个实施例包括一种新颖的遍历方案,该方案在每个遍历步骤中确定下一个要遍历哪个节点,即使此节点潜在地与前一个节点处于不同的实例中。这样,即使两个实例重叠,在更远的交叉之前将找到更接近的交叉(不管它们处于哪个实例中),从而剔除大量遍历步骤。
图19图示了实施例,该实施例修改了图元交叉和光线遍历中使用的“距离测试”,以变成消除歧义的。具体而言,不是只测试到表面的实际距离(当多个表面共享相同距离时,这必然变得有歧义),而是通过采取距离和一些独特命中点ID 1938的元组,诸如图元ID(其可以与其它图元数据1933一起被存储在存储器1930中),来定义所有光线-表面交叉的绝对顺序。
在一个实施例中,分别在遍历单元1910和/或交叉单元1920内的跨实例距离分析逻辑1911和1921可以使用命中点ID 1938来消除共享相同距离的表面上的命中点的歧义。因此,使用命中点ID 1938,定义这样的顺序,使得如果一个表面交叉到光线原点的距离较小,或者,在相等距离的情况下,如果一个表面交叉的独特命中点ID 1938小于另一个命中点ID,则所述一个表面交叉“小于”(即,之前被报告的)另一个表面交叉。在一个实施例中,每当追踪光线以找到“下一个”交叉时,现有距离/命中点ID元组与光线一起被存储(例如,在高速缓存/存储器层级和/或本地缓冲器1930内),以及与具有(使用该绝对顺序)所确定的“最小”元组、仍然大于前一个交叉的交叉一起被存储。
使用这些技术,遍历单元1910通过诸如如由一组BVH节点1931所定义的包围体积层级(BVH)之类的光线遍历加速结构来遍历从光线生成单元(未示出)接收的光线1901。同样的技术也对其它加速结构(诸如kd树、网格等)起作用。被确定为包括图元的节点被传递到识别光线和图元之间的交叉的交叉单元1920。
在光线追踪系统中,交叉单元1920和遍历单元1910之间存在反馈回路,因为交叉发生在遍历期间(即,每次光线遍历叶节点)。在这种情况下,光线与节点中的图元交叉,识别一个或多个光线图元交叉(并且通常存储最接近的交叉),但是由于遍历可能没有完成,所以在其它节点中可能存在其它更接近的交叉。因此,可能发生两件事之一。如果找到一个交叉,并且可以保证它比任何其它交叉更接近(例如,因为它比仍然在遍历堆栈上的任何其它节点更接近),那么它可以被输出为“所述”交叉;如果不,它被存储并且遍历继续。无论哪种方式,光线通常将不被传递到着色器,直到整个遍历/交叉过程被完成为止。一旦完成,着色器就计算被写入到所累积的图像的颜色。此外,着色器可以生成阴影或次级光线,所述阴影或次级光线可以被传递回到遍历级。
现在返回到在遍历单元1910和/或交叉单元1920内实现的跨实例距离分析逻辑1911、1921,可以使用在所有可能命中点的空间上实现总顺序关系的比较运算符<命中来强制执行命中点上的总顺序。例如,假设每个可能的命中点H都可以通过图元ID H.p和距离H.t而被独特地识别,那么距离和图元ID两者都可以在比较中使用。图元ID然后可以被用来消除具有相同距离的命中的歧义。在数学上表述:
使用这样的总顺序,沿着给定光线的命中点的顺序现在被很好地定义,意味着现在可能的是精确地查询下一个命中点,该命中点是<命中任何其它命中点的命中点,但该命中点在另一个命中h0“之后”。类似地,“有效t间隔”的概念[MISSIN可以被“有效命中间隔”t ϵ[t0,t1]代替,该“有效命中间隔”t ϵ [t0,t1]仅允许满足H0 < H < H1的命中H。对于仅想要指定最小距离t0的应用,即使在该距离没有交叉,仍可能的是指定最小命中H0 = (t0-1)(假设-1是无效的图元ID)。
一旦此修改的比较测试被集成到给定的先找到后命中遍历内核(例如,在跨实例距离分析逻辑1911内)中,需要沿着光线单步调试(step through)多个命中的应用可以容易地做到这一点,因为知道每个命中将被精确地报告一次。给定初始光线间隔[t0,t1],应用通过查询[(t0,- 1),(t1,- 1)]间隔中的第一次命中并得到命中点Ĥ0而开始;在下一次迭代中,应用将查询[Ĥ0(t1,- 1)]的第一次命中并得到Ĥ2;等等。
使用这些细节和下面描述的附加技术,跨实例距离分析逻辑1911实现遍历方案,该遍历方案在每个遍历操作中确定接下来要遍历哪个节点,即使该节点潜在地处于与前面一个节点不同的实例中。因此,即使两个实例重叠,在更远的交叉之前也将找到更接近的交叉(与实例无关),潜在地剔除大量的未来遍历操作。
特别地,跨实例距离分析逻辑1911的一个实施例建立在以上描述的基于优先级队列的从前到后遍历上。使用这些原理,可以使用基于优先级队列的遍历的修改来遍历BVH,所述基于优先级队列的遍历的修改不仅在一个BVH内执行,而且还被扩展以跨不同实例1801A-D从前到后地遍历。在每个遍历操作中,最接近的遍历步骤被选择为接下来要采取,而不管此遍历步骤属于哪个实例。
更具体地,参考图18,每个遍历步骤涉及属于顶级BVH 1820或实例对象的BVH1810的BVH节点,以及光线。如果遍历步骤属于顶级BVH 1820,则该光线将是原始光线;如果它属于实例遍历步骤,则该光线将是通过实例的关联变换来变换的原始输入光线。也就是说,每个遍历步骤可以由以下的三元组(triplet)来表征:(1)要遍历的BVH节点、(2)此节点属于的实例、以及(3)必须遍历此节点的(可能变换的)光线。现在忽视执行遍历操作所采用的顺序,则每个这样的操作都落入以下三个类别之一:
a)遍历操作涉及内部BVH节点(顶级BVH或实例BVH)。在这种情况下,遍历步骤使每个子节点与光线交叉;每个成功交叉的节点都触发具有此节点的新的(未来的)遍历步骤。
b)遍历操作涉及实例BVH中的叶节点。在这种情况下,(实例变换的)光线与存储在此叶中的图元交叉,并且如果需要的话,为此光线更新到现在为止所发现的最接近交叉。
c)遍历操作涉及顶级BVH中的叶节点。在这种情况下,传统的递归遍历以与前一种情况中相同的方式来对待存储在此叶中的每个实例,并且一个接一个地完全遍历每个实例。相反,每个实例都被存储在此叶节点中,就好像它只是内部节点,所述内部节点涉及碰巧位于不同实例BVH中的子节点。也就是说,被光线交叉的每个实例都意味着子实例的BVH中的一些未来遍历步骤。
对于这三种类型的遍历操作中的每一种,相应节点到光线原点的距离是已知的,并且因此被跨实例距离分析逻辑1911用于以从前到后的顺序(使用某种分类列表或优先级队列)来挑选那些遍历操作。最接近的遍历操作被不断地挑选和执行。如果该操作触发了新的遍历步骤(在可能不同的BVH中),则此遍历步骤与执行它所需的所有信息一起排队,即使它碰巧在不同的实例中。因此,此实施例总是以从前到后的顺序来挑选节点,不管所述节点属于顶级BVH还是实例BVH。
伪代码
在图20中图示了用于这些技术的一个实施例的示例伪代码。可以观察到,算法出奇地简单。维持优先级队列,以用于要采取的未来遍历操作。通过顶级BHV的根节点来初始化优先级队列。然后实现以上描述的三种情况,每次将新操作插入到优先级队列中。一旦代码确定最近的遍历步骤在已经定位的交叉后面,过程就结束了。
初步结果
在构建用于测试的高性能实现之前,执行了对潜在节省(如在相对于递归深度优先遍历的图元交叉和遍历步骤中所测量的)的纯统计评估。为进行此操作,在二进制(binary)SAH构建的BVH之上实现了有意简单的纯标量光线追踪核,并且实现了本发明的实施例和递归两级遍历两者。
在图21中的表中,所测量的遍历步骤被列为用于一系列不同(但都高度实例化的)模型的三角形交叉。节省变化很大,不仅从场景到场景而变化,而且甚至对于同一模型的不同视图而变化。然而,在所有实验中,新方案导致更少的交叉和更少的遍历步骤,所述新方案具有少6%到56%范围的遍历步骤,以及少8%到84%的三角形交叉。图22中的表示出了来自甚至更极端的示例(使用人脑项目基准数据集)的结果,该示例示出了甚至更大的增益。虽然这些实验性实现仅覆盖二进制BVH和一级实例化,但是该方案可以被简单地扩展到多级实例化、多分支BVH、或者甚至非BVH加速结构(诸如kd树)。扩展到基于分组的遍历和基于流的遍历也很简单,只要到节点的距离可以被定义为例如流/分组中的任何光线的最小距离。
当在硬件中实现时,这些实施例的最大成本因素——更新优先级队列——变得非常便宜。目前,假设光线在光线第一次到达实例时变换一次。这需要存储器来存储那些状态。当在硬件中实现时,光线变换可以在遍历步骤期间被“匆忙地(on the fly)”执行,而不存储所变换的光线。在这种实例中,高速缓存来自前一遍历步骤的变换仍然可以是有意义的(常见的情况将是连续的遍历步骤确实去到同一实例)。在每一个遍历步骤中,可以在此优先级队列遍历和更递归的遍历之间采用混合方法,而不是推到遍历队列或从遍历队列弹出。可以维持优先级队列并变换光线状态。然后,在每个遍历步骤中:(1)从遍历队列中拉出新节点;(2)如果此节点是叶节点,则与图元交叉,并返回到(1);以及(3)如果是内部节点,则尽可能久地执行贪婪(greedy)深度优先向下遍历:
a)使所变换的光线与该节点的子节点交叉;
b)如果没有子节点曾被命中,则返回到(1);
c)确定最接近的、交叉的子节点,将其它交叉的子节点插入到优先级队列中
d)如果最接近的子节点是叶节点,则插入到队列中并返回到(1);以及
e)否则,最接近的子节点存在并且是内部节点;对(3)进行迭代。
当从遍历队列拉出新节点时,该节点可能属于不同的实例(或顶级BVH)。与传统递归遍历相比,实例之间的切换增加了一些开销。在一个实施例中,或者原始光线被变换到实例的本地坐标系,或者在每个遍历步骤加载所变换的光线。
给出对切换的数量的控制的这种方法的一个扩展如下工作。不是维持单个优先级队列,而是存储(顶级BVH和一些实例的)多个子遍历的状态。这些子遍历状态可以使用任何遍历方案,例如用于更好的从前到后遍历的优先级队列、或者使用堆栈的传统深度优先遍历。对这些子遍历状态的引用连同这些遍历的下一个节点的距离一起被插入到另外的主优先级队列中。
图23图示了用于实现这些技术的方法的一个实施例。该方法可以在以上描述的架构上实现,但不限于任何特定系统或处理器架构。
在2301,为顶级BVH遍历创建子遍历状态(S)。这可以通过例如将根节点插入到空优先级队列中来进行。对此状态的引用被存储到主优先级队列中。
在2302,从主优先级队列读取下一个子遍历状态(例如,S)。如果在2303确定队列为空,则过程结束。在2304,对此子遍历(S)执行遍历操作。如果在2305确定遍历完成,则过程返回到2302,并且从MPQ读取下一个子遍历状态。如果不是,则在2306做出关于是否到达实例的确定。如果是的话,并且遍历曾是顶级遍历并且到达了实例,则在2307,在MPQ中针对此实例插入新的子遍历状态(S’)。在2308,子遍历状态S和下一个节点的距离被插入到MPQ中,并且过程返回到2302——在那里读取下一个子遍历状态。
在另一个实施例中,使用一列“n”个优先级请求队列(PRQ),其中所述“n”个PRQ包括顶级BVH和被访问的实例。每PRQ的最小距离被存储在线性连续存储器区域中。在每个遍历步骤中,在此连续距离阵列上执行水平SIMD精简,以确定具有最小距离的PRQ。选择PRQ,并且从此PRQ取BVH节点,并且只有此PRQ被更新有潜在交叉的子节点,这节省了工作。
本申请提供了如下的技术方案:
技术方案1. 一种方法,包括:
在一个或多个基础几何对象的多个实例上构造分层级加速结构,所述分层级加速结构包括按层级布置的多个节点,所述多个实例包括第一实例和至少部分与所述第一实例重叠的第二实例;以及
对所述多个实例和所述一个或多个基础几何对象执行跨实例光线遍历,其中执行跨实例光线遍历包括在不将所述第一实例遍历至完成的情况下在遍历所述第一实例的第一节点之后通过第一光线来遍历来自所述第二实例的第二节点。
技术方案2. 如技术方案1所述的方法,进一步包括:
形成遍历队列,所述遍历队列包括节点的标识符,要针对所述节点执行遍历操作。
技术方案3. 如技术方案2所述的方法,进一步包括:
从所述遍历队列读取所述第二节点以通过所述第一光线来遍历;以及
如果所述第二节点是叶节点,则执行交叉操作以识别所述第一光线和与所述第二节点相关联的图元之间的第一光线表面交叉。
技术方案4. 如技术方案3所述的方法,其中如果所述第二节点是内部节点,则尽可能久地对所述第二节点执行深度优先向下遍历。
技术方案5. 如技术方案3所述的方法,进一步包括:
为所述第一光线表面交叉生成第一独特命中点ID;以及
如果所述第一光线表面交叉与第二光线表面交叉共享距离,则使用所述第一独特命中点ID和与所述第二光线表面交叉相关联的第二独特命中点ID来消除所述第一和第二光线表面交叉的顺序的歧义。
技术方案6. 如技术方案5中所述的方法,其中所述第一独特命中点ID包括独特标识所述表面的图元的图元ID。
技术方案7. 如技术方案6中所述的方法,进一步包括:
使用所述距离与第一和第二独特命中点ID的组合来生成所述第一和第二光线表面交叉的绝对顺序。
技术方案8. 如技术方案4所述的方法,其中尽可能久地对所述第二节点执行所述深度优先向下遍历包括:
使变换的第一光线与所述第二节点的一个或多个子节点交叉;以及
如果没有子节点曾被所述变换的第一光线命中,则从所述遍历队列读取下一个节点以遍历和/或与所述第一光线交叉。
技术方案9. 如技术方案8所述的方法,其中如果子节点被所述变换的第一光线命中了,则:
确定最接近的交叉的子节点;以及
将其它交叉的子节点插入到所述遍历队列中。
技术方案10. 如技术方案9所述的方法,其中如果所述最接近的交叉的子节点是叶节点,则将它插入到所述遍历队列中,并从所述遍历队列选择另一个节点。
技术方案11. 如技术方案9所述的方法,其中,如果所述最接近的交叉的子节点不是叶节点,则尽可能久地对所述最接近的交叉的子节点执行深度优先向下遍历。
技术方案12. 一种在其上存储有程序代码的机器可读介质,所述程序代码当被机器执行时,使所述机器执行以下操作:
在一个或多个基础几何对象的多个实例上构造分层级加速结构,所述分层级加速结构包括按层级布置的多个节点,所述多个实例包括第一实例和至少部分与所述第一实例重叠的第二实例;以及
对所述多个实例和所述一个或多个基础几何对象执行跨实例光线遍历,其中执行跨实例光线遍历包括在不将所述第一实例遍历至完成的情况下在遍历所述第一实例的第一节点之后通过第一光线来遍历来自所述第二实例的第二节点。
技术方案13. 如技术方案12所述的机器可读介质,进一步包括用于使所述机器执行以下操作的程序代码:
形成遍历队列,所述遍历队列包括节点的标识符,要针对所述节点执行遍历操作。
技术方案14. 如技术方案13所述的机器可读介质,进一步包括用于使所述机器执行以下操作的程序代码:
从所述遍历队列读取所述第二节点以通过所述第一光线来遍历;以及
如果所述第二节点是叶节点,则执行交叉操作以识别所述第一光线和与所述第二节点相关联的图元之间的第一光线表面交叉。
技术方案15. 如技术方案14所述的机器可读介质,其中如果所述第二节点是内部节点,则尽可能久地对所述第二节点执行深度优先向下遍历。
技术方案16. 如技术方案14所述的机器可读介质,进一步包括用于使所述机器执行以下操作的程序代码:
为所述第一光线表面交叉生成第一独特命中点ID;以及
如果所述第一光线表面交叉与第二光线表面交叉共享距离,则使用所述第一独特命中点ID和与所述第二光线表面交叉相关联的第二独特命中点ID来消除所述第一和第二光线表面交叉的顺序的歧义。
技术方案17. 如技术方案16中所述的机器可读介质,其中所述第一独特命中点ID包括独特标识所述表面的图元的图元ID。
技术方案18. 如技术方案17中所述的机器可读介质,进一步包括用于使所述机器执行以下操作的程序代码:
使用所述距离与第一和第二独特命中点ID的组合来生成所述第一和第二光线表面交叉的绝对顺序。
技术方案19. 如技术方案15所述的机器可读介质,其中尽可能久地对所述第二节点执行所述深度优先向下遍历包括:
使变换的第一光线与所述第二节点的一个或多个子节点交叉;以及
如果没有子节点曾被所述变换的第一光线命中,则从所述遍历队列读取下一个节点以遍历和/或与所述第一光线交叉。
技术方案20. 如技术方案19所述的机器可读介质,其中如果子节点被所述变换的第一光线命中了,则所述程序代码将使所述机器执行以下操作:
确定最接近的交叉的子节点;以及
将其它交叉的子节点插入到所述遍历队列中。
技术方案21. 如技术方案20所述的机器可读介质,其中如果所述最接近的交叉的子节点是叶节点,则将它插入到所述遍历队列中,并从所述遍历队列选择另一个节点。
技术方案22. 如技术方案20所述的机器可读介质,其中,如果所述最接近的交叉的子节点不是叶节点,则尽可能久地对所述最接近的交叉的子节点执行深度优先向下遍历。
技术方案23. 一种图形处理设备,包括:
光线追踪电路,所述光线追踪电路用于在一个或多个基础几何对象的多个实例上构造分层级加速结构,所述分层级加速结构包括按层级布置的多个节点,所述多个实例包括第一实例和至少部分与所述第一实例重叠的第二实例;以及
遍历电路,所述遍历电路用于对所述多个实例和所述一个或多个基础几何对象执行跨实例光线遍历,其中执行跨实例光线遍历包括在不将所述第一实例遍历至完成的情况下在遍历所述第一实例的第一节点之后通过第一光线来遍历来自所述第二实例的第二节点。
技术方案24. 如技术方案23所述的图形处理设备,进一步包括:
形成遍历队列,所述遍历队列包括节点的标识符,要针对所述节点执行遍历操作。
技术方案25. 如技术方案24所述的图形处理设备,进一步包括:
从所述遍历队列读取所述第二节点以通过所述第一光线来遍历;以及
如果所述第二节点是叶节点,则执行交叉操作以识别所述第一光线和与所述第二节点相关联的图元之间的第一光线表面交叉。
技术方案26. 如技术方案25所述的图形处理设备,其中如果所述第二节点是内部节点,则尽可能久地对所述第二节点执行深度优先向下遍历。
技术方案27. 如技术方案25所述的图形处理设备,进一步包括:
为所述第一光线表面交叉生成第一独特命中点ID;以及
如果所述第一光线表面交叉与第二光线表面交叉共享距离,则使用所述第一独特命中点ID和与所述第二光线表面交叉相关联的第二独特命中点ID来消除所述第一和第二光线表面交叉的顺序的歧义。
技术方案28. 如技术方案27中所述的图形处理设备,其中所述第一独特命中点ID包括独特标识所述表面的图元的图元ID。
技术方案29. 如技术方案28中所述的图形处理设备,进一步包括:
使用所述距离与第一和第二独特命中点ID的组合来生成所述第一和第二光线表面交叉的绝对顺序。
技术方案30. 如技术方案26所述的图形处理设备,其中尽可能久地对所述第二节点执行所述深度优先向下遍历包括:
使变换的第一光线与所述第二节点的一个或多个子节点交叉;以及
如果没有子节点曾被所述变换的第一光线命中,则从所述遍历队列读取下一个节点以遍历和/或与所述第一光线交叉。
技术方案31. 如技术方案30所述的图形处理设备,其中如果子节点被所述变换的第一光线命中了,则:
确定最接近的交叉的子节点;以及
将其它交叉的子节点插入到所述遍历队列中。
技术方案32. 如技术方案31所述的图形处理设备,其中如果所述最接近的交叉的子节点是叶节点,则将它插入到所述遍历队列中,并从所述遍历队列选择另一个节点。
技术方案33. 如技术方案31所述的图形处理设备,其中,如果所述最接近的交叉的子节点不是叶节点,则尽可能久地对所述最接近的交叉的子节点执行深度优先向下遍历。
在实施例中,术语“引擎”或“模块”或“逻辑”可以指代以下各项、是以下各项的部分或者包括以下各项:执行一个或多个软件或固件程序的应用专用集成电路(ASIC)、电子电路、处理器(共享处理器、专用处理器或成组处理器)和/或存储器(共享存储器、专用存储器或成组存储器)、组合逻辑电路、和/或提供所描述功能的其它合适组件。在实施例中,引擎、模块或逻辑可以用固件、硬件、软件、或者固件、硬件和软件的任何组合来实现。
本发明的实施例可以包括以上已经描述的各种步骤。这些步骤可以被体现在机器可执行指令中,该机器可执行指令可以被用来使通用或专用处理器执行所述步骤。替换地,可以通过包含用于执行该步骤的硬连线逻辑的特定硬件组件或通过经编程的计算机组件和定制硬件组件的任何组合来执行所述步骤。
如本文中描述的,指令可以指代硬件的具体配置,诸如被配置成执行某些操作或具有预定功能的专用集成电路(ASIC),或存储在以非暂时性计算机可读介质体现的存储器中的软件指令。因此,可以使用在一个或多个电子设备(例如,端站、网络元件等)上存储并执行的代码和数据来实现在附图中示出的技术。这样的电子设备使用计算机机器可读介质来存储和(在内部和/或通过网络与其它电子设备)传送代码和数据,该计算机机器可读介质诸如非暂时性计算机机器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪速存储器设备;相变存储器)以及暂时性计算机机器可读通信介质(例如,电、光、声或其它形式的传播信号——诸如载波、红外信号、数字信号等)。
此外,这样的电子设备通常包括耦合至一个或多个其它组件(诸如,一个或多个存储设备(非暂时性机器可读存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或显示器)、以及网络连接)的一组一个或多个处理器。该组处理器和其它组件的耦合通常通过一个或多个总线和桥接器(也被称为总线控制器)。存储设备和承载网络通信量的信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定电子设备的存储设备通常存储代码和/或数据以用于在该电子设备的该组一个或多个处理器上执行。当然,可以使用软件、固件和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。遍及本详细描述,出于解释的目的,阐述众多具体细节以便提供对本发明的透彻理解。然而,对于本领域技术人员来说将会显而易见的是,可以在没有这些具体细节中的某些的情况下实践本发明。在某些情况下,没有极其详尽地描述公知的结构和功能,以便避免使本发明的主题模糊。因此,应按照随附权利要求来评判本发明的范围和精神。
Claims (25)
1.一种在其上存储有程序代码的机器可读介质,所述程序代码当被机器执行时,使所述机器执行以下操作:
在一个或多个基础几何对象的多个实例上构造分层级加速结构,所述分层级加速结构包括按层级布置的多个节点,所述多个实例包括第一实例和至少部分与所述第一实例重叠的第二实例;以及
对所述多个实例和所述一个或多个基础几何对象执行跨实例光线遍历,其中执行跨实例光线遍历包括在不将所述第一实例遍历至完成的情况下在遍历所述第一实例的第一节点之后通过第一光线来遍历来自所述第二实例的第二节点。
2.如权利要求1所述的机器可读介质,进一步包括用于使所述机器执行以下操作的程序代码:
形成遍历队列,所述遍历队列包括节点的标识符,要针对所述节点执行遍历操作。
3.如权利要求1或2所述的机器可读介质,进一步包括用于使所述机器执行以下操作的程序代码:
从所述遍历队列读取所述第二节点以通过所述第一光线来遍历;以及
如果所述第二节点是叶节点,则执行交叉操作以识别所述第一光线和与所述第二节点相关联的图元之间的第一光线表面交叉。
4.如权利要求3所述的机器可读介质,其中如果所述第二节点是内部节点,则尽可能久地对所述第二节点执行深度优先向下遍历。
5.如权利要求3所述的机器可读介质,进一步包括用于使所述机器执行以下操作的程序代码:
为所述第一光线表面交叉生成第一独特命中点ID;以及
如果所述第一光线表面交叉与第二光线表面交叉共享距离,则使用所述第一独特命中点ID和与所述第二光线表面交叉相关联的第二独特命中点ID来消除所述第一和第二光线表面交叉的顺序的歧义。
6.如权利要求5中所述的机器可读介质,其中所述第一独特命中点ID包括独特标识所述表面的图元的图元ID。
7.如权利要求6中所述的机器可读介质,进一步包括用于使所述机器执行以下操作的程序代码:
使用所述距离与第一和第二独特命中点ID的组合来生成所述第一和第二光线表面交叉的绝对顺序。
8.如权利要求4或7所述的机器可读介质,其中尽可能久地对所述第二节点执行所述深度优先向下遍历包括:
使变换的第一光线与所述第二节点的一个或多个子节点交叉;以及
如果没有子节点曾被所述变换的第一光线命中,则从所述遍历队列读取下一个节点以遍历和/或与所述第一光线交叉。
9.如权利要求8所述的机器可读介质,其中如果子节点被所述变换的第一光线命中了,则所述程序代码将使所述机器执行以下操作:
确定最接近的交叉的子节点;以及
将其它交叉的子节点插入到所述遍历队列中。
10.如权利要求9所述的机器可读介质,其中如果所述最接近的交叉的子节点是叶节点,则将它插入到所述遍历队列中,并从所述遍历队列选择另一个节点。
11.如权利要求10所述的机器可读介质,其中,如果所述最接近的交叉的子节点不是叶节点,则尽可能久地对所述最接近的交叉的子节点执行深度优先向下遍历。
12.一种图形处理设备,包括:
光线追踪电路,所述光线追踪电路用于在一个或多个基础几何对象的多个实例上构造分层级加速结构,所述分层级加速结构包括按层级布置的多个节点,所述多个实例包括第一实例和至少部分与所述第一实例重叠的第二实例;以及
遍历电路,所述遍历电路用于对所述多个实例和所述一个或多个基础几何对象执行跨实例光线遍历,其中执行跨实例光线遍历包括在不将所述第一实例遍历至完成的情况下在遍历所述第一实例的第一节点之后通过第一光线来遍历来自所述第二实例的第二节点。
13.如权利要求12所述的图形处理设备,进一步包括:
形成遍历队列,所述遍历队列包括节点的标识符,要针对所述节点执行遍历操作。
14.如权利要求12或13所述的图形处理设备,进一步包括:
从所述遍历队列读取所述第二节点以通过所述第一光线来遍历;以及
如果所述第二节点是叶节点,则执行交叉操作以识别所述第一光线和与所述第二节点相关联的图元之间的第一光线表面交叉。
15.如权利要求14所述的图形处理设备,其中如果所述第二节点是内部节点,则尽可能久地对所述第二节点执行深度优先向下遍历。
16.如权利要求14所述的图形处理设备,进一步包括:
为所述第一光线表面交叉生成第一独特命中点ID;以及
如果所述第一光线表面交叉与第二光线表面交叉共享距离,则使用所述第一独特命中点ID和与所述第二光线表面交叉相关联的第二独特命中点ID来消除所述第一和第二光线表面交叉的顺序的歧义。
17.如权利要求16中所述的图形处理设备,其中所述第一独特命中点ID包括独特标识所述表面的图元的图元ID。
18.如权利要求17中所述的图形处理设备,进一步包括:
使用所述距离与第一和第二独特命中点ID的组合来生成所述第一和第二光线表面交叉的绝对顺序。
19.如权利要求16或18所述的图形处理设备,其中尽可能久地对所述第二节点执行所述深度优先向下遍历包括:
使变换的第一光线与所述第二节点的一个或多个子节点交叉;以及
如果没有子节点曾被所述变换的第一光线命中,则从所述遍历队列读取下一个节点以遍历和/或与所述第一光线交叉。
20.如权利要求19所述的图形处理设备,其中如果子节点被所述变换的第一光线命中了,则:
确定最接近的交叉的子节点;以及
将其它交叉的子节点插入到所述遍历队列中。
21.如权利要求20所述的图形处理设备,其中如果所述最接近的交叉的子节点是叶节点,则将它插入到所述遍历队列中,并从所述遍历队列选择另一个节点。
22.如权利要求20所述的图形处理设备,其中,如果所述最接近的交叉的子节点不是叶节点,则尽可能久地对所述最接近的交叉的子节点执行深度优先向下遍历。
23.一种方法,包括:
在一个或多个基础几何对象的多个实例上构造分层级加速结构,所述分层级加速结构包括按层级布置的多个节点,所述多个实例包括第一实例和至少部分与所述第一实例重叠的第二实例;以及
对所述多个实例和所述一个或多个基础几何对象执行跨实例光线遍历,其中执行跨实例光线遍历包括在不将所述第一实例遍历至完成的情况下在遍历所述第一实例的第一节点之后通过第一光线来遍历来自所述第二实例的第二节点。
24.如权利要求23所述的方法,进一步包括:
形成遍历队列,所述遍历队列包括节点的标识符,要针对所述节点执行遍历操作。
25.如权利要求23或24所述的方法,进一步包括:
从所述遍历队列读取所述第二节点以通过所述第一光线来遍历;以及
如果所述第二节点是叶节点,则执行交叉操作以识别所述第一光线和与所述第二节点相关联的图元之间的第一光线表面交叉。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/145162 | 2018-09-27 | ||
US16/145,162 US11120608B2 (en) | 2018-09-27 | 2018-09-27 | Apparatus and method for cross-instance front-to-back traversal for ray tracing heavily-instanced scenes |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110956687A true CN110956687A (zh) | 2020-04-03 |
Family
ID=67137774
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910794937.3A Pending CN110956687A (zh) | 2018-09-27 | 2019-08-27 | 用于光线追踪重度实例化场景的跨实例从前到后遍历的装置和方法 |
Country Status (3)
Country | Link |
---|---|
US (3) | US11120608B2 (zh) |
EP (1) | EP3629298B1 (zh) |
CN (1) | CN110956687A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113822788A (zh) * | 2020-06-18 | 2021-12-21 | 辉达公司 | 光线追踪硬件中对资源的早期释放 |
CN118657868A (zh) * | 2024-08-20 | 2024-09-17 | 芯瞳半导体技术(山东)有限公司 | 光线追踪的计算方法、装置、设备及存储介质 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10929054B2 (en) * | 2019-06-06 | 2021-02-23 | International Business Machines Corporation | Scalable garbage collection |
EP3940649A1 (en) * | 2020-07-14 | 2022-01-19 | Imagination Technologies Limited | Methods and systems for constructing ray tracing acceleration structures |
US11367242B2 (en) | 2020-07-30 | 2022-06-21 | Apple Inc. | Ray intersect circuitry with parallel ray testing |
US11875448B2 (en) | 2020-07-30 | 2024-01-16 | Apple Inc. | SIMD group formation techniques during ray intersection traversal |
US11704859B2 (en) * | 2020-08-20 | 2023-07-18 | Sony Interactive Entertainment LLC | System and method for accelerated ray tracing |
GB2592285B8 (en) | 2020-08-21 | 2022-11-30 | Imagination Tech Ltd | Coherency gathering for ray tracing |
US11908065B2 (en) | 2022-03-21 | 2024-02-20 | Advanced Micro Devices, Inc. | Stack-based ray traversal with dynamic multiple-node iterations |
US20230410426A1 (en) * | 2022-06-17 | 2023-12-21 | Advanced Micro Devices, Inc. | Volume intersection using rotated bounding volumes |
US20240203033A1 (en) * | 2022-12-14 | 2024-06-20 | Advanced Micro Devices, Inc. | Intersectable instance nodes for ray tracing acceleration structure nodes |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8264484B1 (en) * | 2007-10-29 | 2012-09-11 | Nvidia Corporation | System, method, and computer program product for organizing a plurality of rays utilizing a bounding volume |
US10970912B2 (en) * | 2013-03-14 | 2021-04-06 | Imagination Technologies Limited | 3-D graphics rendering with implicit geometry |
KR102493461B1 (ko) * | 2015-08-31 | 2023-01-30 | 삼성전자 주식회사 | 렌더링 시스템 및 방법 |
US10282890B2 (en) | 2016-09-29 | 2019-05-07 | Intel Corporation | Method and apparatus for the proper ordering and enumeration of multiple successive ray-surface intersections within a ray tracing architecture |
US10417807B2 (en) * | 2017-07-13 | 2019-09-17 | Imagination Technologies Limited | Hybrid hierarchy of bounding and grid structures for ray tracing |
-
2018
- 2018-09-27 US US16/145,162 patent/US11120608B2/en active Active
-
2019
- 2019-08-27 CN CN201910794937.3A patent/CN110956687A/zh active Pending
- 2019-09-12 EP EP19196916.1A patent/EP3629298B1/en active Active
-
2021
- 2021-09-13 US US17/473,770 patent/US11721059B2/en active Active
-
2023
- 2023-08-01 US US18/228,777 patent/US20240046547A1/en active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113822788A (zh) * | 2020-06-18 | 2021-12-21 | 辉达公司 | 光线追踪硬件中对资源的早期释放 |
CN113822788B (zh) * | 2020-06-18 | 2023-10-03 | 辉达公司 | 光线追踪硬件中对资源的早期释放 |
CN118657868A (zh) * | 2024-08-20 | 2024-09-17 | 芯瞳半导体技术(山东)有限公司 | 光线追踪的计算方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
EP3629298B1 (en) | 2023-10-25 |
US20200105046A1 (en) | 2020-04-02 |
EP3629298A1 (en) | 2020-04-01 |
US20240046547A1 (en) | 2024-02-08 |
US20220068009A1 (en) | 2022-03-03 |
US11120608B2 (en) | 2021-09-14 |
US11721059B2 (en) | 2023-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11721059B2 (en) | Apparatus and method for cross-instance front-to-back traversal for ray tracing heavily-instanced scenes | |
US20220114781A1 (en) | Apparatus and method for using alpha values to improve ray tracing efficiency | |
CN118135077A (zh) | 利用图形处理器上的硬件加速的可编程光线追踪 | |
CN111383315A (zh) | 用于使用网格基元进行光线追踪的装置和方法 | |
US11341709B2 (en) | Apparatus and method using triangle pairs and shared transformation circuitry to improve ray tracing performance | |
CN111383160A (zh) | 用于在上采样或帧内插之后校正图像区域的装置和方法 | |
US11783530B2 (en) | Apparatus and method for quantized convergent direction-based ray sorting | |
US11153603B2 (en) | Volumetric video visibility encoding mechanism | |
JP2021099786A (ja) | 共有ローカルメモリをパーティショニングするメカニズム | |
CN112561774A (zh) | 图形处理单元及其中的方法 | |
CN112233010A (zh) | 多块图形引擎中的部分写入管理 | |
CN114119338A (zh) | tanh和sigmoid函数执行 | |
CN112801849A (zh) | 用于调度线程顺序以改进高速缓存效率的方法和设备 | |
CN113052746A (zh) | 用于多适配器编码的装置和方法 | |
CN116069459A (zh) | 使用可变命令列表的可编程gpu命令缓冲器 | |
CN111724294A (zh) | 分布式拷贝引擎 | |
CN113424156A (zh) | 用于利用队列和过渡存储以实现改善的低等待时间高带宽管芯上数据检取的系统和方法 | |
EP3618007B1 (en) | Apparatus and method for runtime training of a denoising machine learning engine | |
CN113989098A (zh) | 用于增强图形渲染真实感的设备和方法 | |
CN113577758A (zh) | 云游戏自适应同步机制 | |
CN113032159A (zh) | 编译器辅助的寄存器堆写入减少 | |
EP4187370A1 (en) | Run-time profile-guided execution of workloads | |
CN116341674A (zh) | 用于ai和机器学习加速的二进制扩展 | |
CN117561542A (zh) | 用于通用可消耗压缩的统一无状态压缩系统 | |
CN114155134A (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 |