用于节流光线追踪流水线的设备和方法
具体实施方式
在以下描述中,出于解释的目的,阐述众多具体细节以便提供对下面描述的本发明的实施例的透彻理解。然而,本领域的技术人员将明白,可以在没有这些具体细节中的一些具体细节的情况下实践本发明的实施例。在其它实例中,以框图形式示出公知的结构和装置,以避免混淆本发明的实施例的根本原理。
示例性图形处理器架构和数据类型
系统概述
图1是根据实施例的处理系统100的框图。系统100可以用于单处理器台式电脑系统、多处理器工作站系统或具有大量处理器102或处理器核107的服务器系统中。在一个实施例中,系统100是并入片上系统(SoC)集成电路内的处理平台,所述片上系统(SoC)集成电路供在移动、手持式或嵌入式装置中(诸如在带有到局域网或广域网的有线或无线连接性的物联网(IoT)装置内)使用。
在一个实施例中,系统100能够包括以下各项、与以下各项耦合或者被集成在以下各项内:基于服务器的游戏平台;游戏控制台,包括游戏和媒体控制台;移动游戏控制台、手持式游戏控制台或在线游戏控制台。在一些实施例中,系统100是以下各项的一部分:移动电话、智能电话、平板计算装置或移动互联网连接的装置,诸如带有低内部存储容量的膝上型电脑。处理系统100还能够包括以下各项、与以下各项耦合或者被集成在以下各项内:可穿戴装置,诸如智能手表可穿戴装置;智能眼镜或服装,其用增强现实(AR)或虚拟现实(VR)特征来被增强以提供视觉、音频或触觉输出以补充现实世界视觉、音频或触觉体验或者以其它方式提供文本、音频、图形、视频、全息图像或视频、或者触觉反馈;其它增强现实(AR)装置;或者其它虚拟现实(VR)装置。在一些实施例中,处理系统100包括电视或机顶盒装置,或者是电视或机顶盒装置的一部分。在一个实施例中,系统100能够包括以下各项、与以下各项耦合或者被集成在以下各项内:自动驾驶交通工具,诸如公共汽车、牵引车拖车、汽车、摩托车或电动自行车、飞机或滑翔机(或其任何组合)。自动驾驶交通工具可以使用系统100来处理在交通工具周围感测到的环境。
在一些实施例中,一个或多个处理器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还与可选的外部图形处理器118耦合,所述外部图形处理器118可以与处理器102中的一个或多个图形处理器108进行通信以执行图形和媒体操作。在一些实施例中,可以由加速器112协助图形、媒体和/或计算操作,所述加速器112是能够被配置成执行专门的一组图形、媒体或计算操作的协处理器。例如,在一个实施例中,加速器112是用来优化机器学习或计算操作的矩阵乘法加速器。在一个实施例中,加速器112是光线追踪加速器,其能够被用来与图形处理器108协同执行光线追踪操作。在一个实施例中,可以使用外部加速器119来替代加速器112或与加速器112协同。
在一些实施例中,显示装置111能够连接到(一个或多个)处理器102。显示装置111能够是如在移动电子装置或膝上型装置中的内部显示装置或者经由显示接口(例如,DisplayPort等)附连的外部显示装置中的一个或多个。在一个实施例中,显示装置111能够是头戴式显示器(HMD),诸如供在虚拟现实(VR)应用或增强现实(AR)应用中使用的立体显示装置。
在一些实施例中,平台控制器集线器130使得外设能经由高速I/O总线连接到存储器装置120和处理器102。I/O外设包括但不限于音频控制器146、网络控制器134、固件接口128、无线收发器126、触摸传感器125、数据存储装置124(例如,非易失性存储器、易失性存储器、硬盘驱动器、闪速存储器、NAND、3D NAND、3D XPoint等)。数据存储装置124能够经由存储接口(例如,SATA)或经由诸如外设组件互连总线(例如,PCI、PCI express)的外设总线进行连接。触摸传感器125能够包括触摸屏传感器、压力传感器或指纹传感器。无线收发器126能够是Wi-Fi收发器、蓝牙收发器或诸如3G、4G、5G或长期演进(LTE)收发器之类的移动网络收发器。固件接口128使得能够与系统固件通信,并且能够是例如统一可扩展固件接口(UEFI)。网络控制器134可实现到有线网络的网络连接。在一些实施例中,高性能网络控制器(未示出)与接口总线110耦合。音频控制器146在一个实施例中是多通道高清晰度音频控制器。在一个实施例中,系统100包括用于将传统(例如,个人系统2(PS/2))装置耦合到系统的可选的传统I/O控制器140。平台控制器集线器130还能够连接到一个或多个通用串行总线(USB)控制器142连接输入装置,诸如键盘和鼠标143组合、摄像机144或其它USB输入装置。
将领会的是,示出的系统100是示例性的并且不是限制性的,因为以不同方式配置的其它类型的数据处理系统也可以被使用。例如,存储器控制器116和平台控制器集线器130的实例可以被集成到分立的外部图形处理器中,诸如外部图形处理器118。在一个实施例中,平台控制器集线器130和/或存储器控制器116可以在一个或多个处理器102的外部。例如,系统100能够包括外部存储器控制器116和平台控制器集线器130,其可以被配置为与(一个或多个)处理器102通信的系统芯片组内的存储器控制器集线器和外设控制器集线器。
例如,能够使用电路板(“滑板(sled)”),在所述滑板上放置诸如CPU、存储器和其它组件之类的组件,其被设计用于增加的热性能。在一些实施例中,诸如处理器的处理组件位于滑板的顶侧上,而诸如DIMM的近存储器位于滑板的底侧上。作为通过此设计提供的增强的空气流动的结果,组件可以以比在典型系统中更高的频率和功率水平进行操作,由此增加性能。此外,滑板被配置成与机架中的功率和数据通信缆线盲配对,从而增强它们被快速移除、升级、重新安装和/或替换的能力。类似地,位于滑板上的各个组件(诸如处理器、加速器、存储器和数据存储驱动器)被配置成由于它们与彼此增加的间距而容易被升级。在说明性实施例中,组件另外包括硬件证明特征以证实其确实性(authenticity)。
数据中心能够利用单个网络架构(“组构(fabric)”),所述单个网络架构支持包括以太网和全路径(Omni-Path)的多个其它网络架构。滑板能够经由光纤被耦合到交换机,所述光纤提供比典型双绞线缆线(例如,类别5、类别5e、类别6等)更高的带宽和更低的时延。由于高带宽、低时延互连和网络架构,数据中心可以使用在物理上解聚的池资源(诸如存储器、加速器(例如,GPU、图形加速器、FPGA、ASIC、神经网络和/或人工智能加速器等)以及数据存储驱动器),并且在按需基础上将它们提供到计算资源(例如,处理器),使得计算资源能访问池化资源(pooled resource),如同池化资源是本地的一样。
功率供应器或功率源能够提供电压和/或电流到本文中描述的系统100或者任何组件或系统。在一个示例中,功率供应器包括用来插入到墙上插座的AC到DC(交流电到直流电)适配器。此类AC电力能够是可再生能(例如,太阳能)功率源。在一个示例中,功率源包括DC功率源,诸如外部AC到DC转换器。在一个示例中,功率源或功率供应器包括无线充电硬件以经由接近充电场进行充电。在一个示例中,功率源能够包括内部电池、交流电供应器、基于运动的功率供应器、太阳能供应器或燃料电池源。
图2A-2D图示了由本文中描述的实施例提供的计算系统和图形处理器。与本文中任何其它附图的元件具有相同参考标号(或名称)的图2A-2D的元件能够以与本文中其它地方所描述的方式类似的任何方式操作或起作用,但不限于这样。
图2A是具有一个或多个处理器核202A-202N、集成存储器控制器214和集成图形处理器208的处理器200的实施例的框图。处理器200能够包括另外的核,所述另外的核多达并且包括由虚线框表示的另外的核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和包括一个或多个集成存储器控制器214的系统代理核210耦合。在一些实施例中,系统代理核210还包括用来驱动到一个或多个耦合的显示器的图形处理器输出的显示控制器211。在一些实施例中,显示控制器211还可以是经由至少一个互连与图形处理器耦合的单独模块,或者可以被集成在图形处理器208内。
在一些实施例中,基于环的互连单元212被用来耦合处理器200的内部组件。然而,可以使用备选互连单元,诸如点对点互连、交换互连或其它技术,包括本领域中公知的技术。在一些实施例中,图形处理器208经由I/O链路213与环形互连212耦合。
示例性I/O链路213表示多个种类的I/O互连中的至少一个,包括促进在各种处理器组件与诸如eDRAM模块的高性能嵌入式存储器模块218之间的通信的封装上I/O互连。在一些实施例中,处理器核202A-202N中的每个处理器核和图形处理器208能够使用嵌入式存储器模块218作为共享末级高速缓存。
在一些实施例中,处理器核202A-202N是执行相同指令集架构的同质核。在另一实施例中,处理器核202A-202N在指令集架构(ISA)方面是异质的,其中处理器核202A-202N中的一个或多个处理器核执行第一指令集,而其它核中的至少一个核执行第一指令集的子集或不同指令集。在一个实施例中,处理器核202A-202N在微架构方面是异质的,其中具有相对较高功耗的一个或多个核与具有较低功耗的一个或多个功率核耦合。在一个实施例中,处理器核202A-202N在计算能力方面是异质的。另外,处理器200能够在一个或多个芯片上被实现,或者被实现为除其它组件外还具有图示的组件的SoC集成电路。
图2B是根据本文中描述的一些实施例的图形处理器核219的硬件逻辑的框图。与本文中任何其它附图的元件具有相同参考标号(或名称)的图2B的元件能够以与本文中其它地方所描述的方式类似的任何方式操作或起作用,但不限于这样。有时被称为核切片(core slice)的图形处理器核219能够是模块化图形处理器内的一个或多个图形核。图形处理器核219是一个图形核切片的示例,并且如本文中所述的图形处理器可以基于目标功率和性能包络而包括多个图形核切片。每个图形处理器核219能够包括与也称为子切片的多个子核221A-221F耦合的固定功能块230,所述多个子核221A-221F包括通用和固定功能逻辑的模块化块。
在一些实施例中,固定功能块230包括几何/固定功能流水线231,所述几何/固定功能流水线231能够例如在更低性能/或更低功率图形处理器实现中由图形处理器核219中的所有子核共享。在各种实施例中,几何/固定功能流水线231包括3D固定功能流水线(例如,下文所述的如图3和图4中的3D流水线312)、视频前端单元、线程派生器(threadspawner)和线程分派器(thread dispatcher)以及管理统一返回缓冲器(unified returnbuffer)(例如,如下文所述的在图4中的统一返回缓冲器418)的统一返回缓冲器管理器。
在一个实施例中,固定功能块230还包括图形SoC接口232、图形微控制器233和媒体流水线234。图形SoC接口232提供图形处理器核219与片上系统集成电路内的其它处理器核之间的接口。图形微控制器233是可编程子处理器,其可配置成管理图形处理器核219的各种功能,包括线程分派、调度和抢占(pre-emption)。媒体流水线234(例如,图3和图4的媒体流水线316)包括用来促进多媒体数据(包括图像和视频数据)的解码、编码、预处理和/或后处理的逻辑。媒体流水线234经由对子核221A-221F内的计算或采样逻辑的请求来实现媒体操作。
在一个实施例中,SoC接口232使得图形处理器核219能够与通用应用处理器核(例如,CPU)和/或SoC内的其它组件(包括存储器层级元件,诸如共享末级高速缓冲存储器、系统RAM和/或嵌入式片上或封装上DRAM)进行通信。SoC接口232还可实现与SoC内的固定功能器件(诸如摄像机成像流水线)的通信,并且实现全局存储器原子的使用和/或实现全局存储器原子,可以在图形处理器核219与SoC内的CPU之间共享所述全局存储器原子。SoC接口232还可实现用于图形处理器核219的功率管理控制,并且实现图形核219的时钟域与SoC内的其它时钟域之间的接口。在一个实施例中,SoC接口232使得能够接收来自命令流转化器(command streamer)和全局线程分派器的命令缓冲器,所述命令缓冲器被配置成向图形处理器内的一个或多个图形核中的每个图形核提供命令和指令。命令和指令能够在要执行媒体操作时被分派到媒体流水线234,或者在要执行图形处理操作时被分派到几何和固定功能流水线(例如,几何和固定功能流水线231、几何和固定功能流水线237)。
图形微控制器233能够被配置成执行用于图形处理器核219的各种调度和管理任务。在一个实施例中,图形微控制器233能够在子核221A-221F内的执行单元(EU)阵列222A-222F、224A-224F内的各种图形并行引擎上执行图形和/或计算工作负载调度。在此调度模型中,在包括图形处理器核219的SoC的CPU核上执行的主机软件能够提交工作负载给多个图形处理器门铃(graphic processor doorbell)之一,这调取在适当图形引擎上的调度操作。调度操作包括确定接下来要运行哪个工作负载,向命令流转化器提交工作负载,对在引擎上运行的现有工作负载进行抢占,监测工作负载的进展,以及在工作负载完成时通知主机软件。在一个实施例中,图形微控制器233还能够促进图形处理器核219的低功率或空闲状态,从而为图形处理器核219提供独立于操作系统和/或系统上的图形驱动器软件跨低功率状态转变来对图形处理器核219内的寄存器进行保存和恢复的能力。
图形处理器核219可以具有多于或少于图示的子核221A-221F,多达N个模块化子核。对于每组N个子核,图形处理器核219还能够包括共享功能逻辑235、共享和/或高速缓冲存储器236、几何/固定功能流水线237以及用来加速各种图形和计算处理操作的另外的固定功能逻辑238。共享功能逻辑235能够包括与图4的共享功能逻辑420关联的逻辑单元(例如,采样器、数学和/或线程间通信逻辑),所述逻辑单元能够由图形处理器核219内的每N个子核共享。共享和/或高速缓冲存储器236能够是用于图形处理器核219内的一组N个子核221A-221F的末级高速缓存,并且还能够充当可由多个子核访问的共享存储器。几何/固定功能流水线237能够代替固定功能块230内的几何/固定功能流水线231而被包括,并且能够包括相同或类似的逻辑单元。
在一个实施例中,图形处理器核219包括另外的固定功能逻辑238,其能够包括供图形处理器核219使用的各种固定功能加速逻辑。在一个实施例中,另外的固定功能逻辑238包括供在仅位置着色中使用的另外的几何流水线。在仅位置着色中,存在两个几何流水线:几何/固定功能流水线238、231内的完全几何流水线;以及剔除流水线(cullpipeline),其是可以被包括在另外的固定功能逻辑238内的另外的几何流水线。在一个实施例中,剔除流水线是完全几何流水线的裁减版本。完全流水线和剔除流水线能够执行相同应用的不同实例,每个实例具有单独的上下文。仅位置着色能够隐藏被丢弃三角形的长剔除运行,使得在一些实例中能更早完成着色。例如,并且在一个实施例中,另外的固定功能逻辑238内的剔除流水线逻辑能够执行与主应用并行的位置着色器,并且一般比完全流水线更快生成关键结果,因为剔除流水线仅获取并且着色顶点的位置属性而不向帧缓冲器执行像素的光栅化(rasterization)和渲染。剔除流水线能够使用生成的关键结果来计算用于所有三角形的可见性信息,而不考虑那些三角形是否被剔除。完全流水线(其在此实例中可以被称为重放流水线)能够消耗可见性信息以跳过被剔除的三角形,以仅对最终被传递到光栅化阶段的可见三角形进行着色。
在一个实施例中,另外的固定功能逻辑238还能够包括诸如固定功能矩阵乘法逻辑的机器学习加速逻辑,以用于包括针对机器学习训练或推理的优化的实现。
在每个图形子核221A-221F内包括一组执行资源,其可以用于响应于图形流水线、媒体流水线或着色器程序的请求而执行图形、媒体和计算操作。图形子核221A-221F包括多个EU阵列222A-222F、224A-224F、线程分派和线程间通信(TD/IC)逻辑223A-223F、3D(例如,纹理)采样器225A-225F、媒体采样器206A-206F、着色器处理器227A-227F及共享本地存储器(SLM)228A-228F。EU阵列222A-222F、224A-224F各自包括多个执行单元,所述多个执行单元是能够为图形、媒体或计算操作(包括图形、媒体或计算着色器程序)服务而执行浮点和整数/定点逻辑运算的通用图形处理单元。TD/IC逻辑223A-223F执行用于子核内的执行单元的本地线程分派和线程控制操作,并且促进在子核的执行单元上执行的线程之间的通信。3D采样器225A-225F能够将纹理或其它3D图形有关数据读取到存储器中。3D采样器能够基于配置的样本状态和与给定纹理关联的纹理格式来以不同方式读取纹理数据。媒体采样器206A-206F能够基于与媒体数据关联的类型和格式来执行类似的读取操作。在一个实施例中,每个图形子核221A-221F能够交替包括统一3D和媒体采样器。在子核221A-221F中的每个子核内的执行单元上执行的线程能够利用每个子核内的共享本地存储器228A-228F,以使得在线程群组内执行的线程能使用片上存储器的公共池来执行。
图2C图示了包括布置成多核群组240A-240N的图形处理资源的专用集合的图形处理单元(GPU)239。尽管提供了仅单个多核群组240A的细节,但将领会的是,其它多核群组240B-240N可以被配备有图形处理资源的相同或类似集合。
如所图示的,多核群组240A可以包括图形核243的集合、张量核244的集合和光线追踪核245的集合。调度器/分派器241调度和分派图形线程以便在各种核243、244、245上执行。寄存器堆242的集合存储由核243、244、245在执行图形线程时使用的操作数值。这些寄存器可以包括例如用于存储整数值的整数寄存器、用于存储浮点值的浮点寄存器、用于存储打包数据元素(整数和/或浮点数据元素)的向量寄存器及用于存储张量/矩阵值的贴片寄存器(tile register)。在一个实施例中,贴片寄存器被实现为向量寄存器的组合集合。
一个或多个组合的1级(L1)高速缓存和共享存储器单元247在每个多核群组240A内本地存储图形数据,诸如纹理数据、顶点数据、像素数据、光线数据、包围体数据等。一个或多个纹理单元247还能够被用来执行纹理操作,诸如纹理映射和采样。由多核群组240A-240N的全部或其子集共享的2级(L2)高速缓存253存储用于多个并发图形线程的图形数据和/或指令。如所图示的,L2高速缓存253可以跨多个多核群组240A-240N被共享。一个或多个存储器控制器248将GPU 239耦合到存储器249,所述存储器249可以是系统存储器(例如,DRAM)和/或专用图形存储器(例如,GDDR6存储器)。
输入/输出(I/O)电路250将GPU 239耦合到一个或多个I/O装置252,诸如数字信号处理器(DSP)、网络控制器或用户输入装置。片上互连可以用来将I/O装置252耦合到GPU239和存储器249。I/O电路250的一个或多个I/O存储器管理单元(IOMMU)251将I/O装置252直接耦合到系统存储器249。在一个实施例中,IOMMU 251管理页表的多个集合以将虚拟地址映射到系统存储器249中的物理地址。在此实施例中,I/O装置252、(一个或多个)CPU 246和(一个或多个)GPU 239可以共享相同虚拟地址空间。
在一个实现中,IOMMU 251支持虚拟化。在此情况下,它可以管理页表的第一集合以将客户/图形虚拟地址映射到客户/图形物理地址,并且管理页表的第二集合以将客户/图形物理地址映射到系统/主机物理地址(例如,在系统存储器249内)。页表的第一和第二集合中的每个集合的基址可以被存储在控制寄存器中并且在上下文切换时被换出(例如,使得为新上下文提供对页表的相关集合的访问)。尽管在图2C中未被图示,但核243、244、245和/或多核群组240A-240N中的每个可以包括转换后备缓冲器(TLB)以对客户虚拟到客户物理转换、客户物理到主机物理转换以及客户虚拟到主机物理转换进行高速缓存。
在一个实施例中,CPU 246、GPU 239和I/O装置252被集成在单个半导体芯片和/或芯片封装上。图示的存储器249可以被集成在相同芯片上,或者可以经由芯片外(off-chip)接口被耦合到存储器控制器248。在一个实现中,存储器249包括GDDR6存储器,所述GDDR6存储器共享与其它物理系统级存储器相同的虚拟地址空间,虽然本发明的根本原理不限于此特定实现。
在一个实施例中,张量核244包括特别设计成执行矩阵运算的多个执行单元,所述矩阵运算是用来执行深度学习操作的基本计算操作。例如,同时矩阵乘法运算可以被用于神经网络训练和推理。张量核244可以使用各种操作数精度来执行矩阵处理,所述各种操作数精度包括单精度浮点(例如,32位)、半精度浮点(例如,16位)、整数字(16位)、字节(8位)和半字节(4位)。在一个实施例中,神经网络实现提取每个经渲染的场景的特征,潜在地组合来自多个帧的细节以构造高质量的最终图像。
在深度学习实现中,可以调度并行矩阵乘法工作以用于在张量核244上执行。神经网络的训练特别要求大量矩阵点积运算。为处理N x N x N矩阵相乘的内积公式,张量核244可以包括至少N个点积处理元件。在矩阵相乘开始前,一个完整矩阵被加载到贴片寄存器,并且在N个循环的每个循环,第二矩阵的至少一列被加载。在每个循环,存在被处理的N个点积。
取决于特定实现,可以以不同精度存储矩阵元素,所述不同精度包括16位字、8位字节(例如,INT8)和4位半字节(例如,INT4)。可以为张量核244指定不同精度模式以确保最高效的精度被用于不同工作负载(例如,诸如能够容许量化到字节和半字节的推理工作负载)。
在一个实施例中,光线追踪核245对于实时光线追踪和非实时光线追踪实现二者加速光线追踪操作。特别地,光线追踪核245包括光线遍历/交叉电路,以用于使用包围体层级(BVH)来执行光线遍历并且标识封围在BVH体之内的图元与光线之间的交叉。光线追踪核245还可以包括用于执行深度测试和剔除(例如,使用Z缓冲器或类似布置)的电路。在一个实现中,光线追踪核245与本文中描述的图像去噪技术协同来执行遍历和交叉操作,其至少一部分可以在张量核244上执行。例如,在一个实施例中,张量核244实现深度学习神经网络以执行由光线追踪核245生成的帧的去噪。然而,(一个或多个)CPU 246、图形核243和/或光线追踪核245还可以实现去噪和/或深度学习算法的全部或一部分。
另外,如上所述,可以采用用来去噪的分布式方法,其中GPU 239在通过网络或高速互连耦合到其它计算装置的计算装置中。在该实施例中,互连的计算装置共享神经网络学习/训练数据来改进整个系统学习对不同类型的图像帧和/或不同的图形应用执行去噪所用的速度。
在一个实施例中,光线追踪核245处理所有BVH遍历和光线-图元交叉,从而使图形核243免于以每光线的数千个指令而过载。在一个实施例中,每个光线追踪核245包括用于执行包围盒测试(例如,以用于遍历操作)的专用电路的第一集合和用于执行光线-三角形交叉测试(例如,对已遍历的光线进行交叉)的专用电路的第二集合。因此,在一个实施例中,多核群组240A能够仅仅启动光线探头,并且光线追踪核245独立执行光线遍历和交叉并且将命中数据(例如,命中、无命中、多个命中等)返回到线程上下文。在光线追踪核245执行遍历和交叉操作的同时,其它核243、244被释放以执行其它图形或计算工作。
在一个实施例中,每个光线追踪核245包括用来执行BVH测试操作的遍历单元和执行光线-图元交叉测试的交叉单元。交叉单元生成“命中”、“无命中”或“多个命中”响应,并且交叉单元将该响应提供到适当的线程。在遍历和交叉操作期间,其它核(例如,图形核243和张量核244)的执行资源被释放以执行其它形式的图形工作。
在下面描述的一个特定实施例中,使用了混合光栅化/光线追踪方法,其中在图形核243与光线追踪核245之间分布工作。
在一个实施例中,光线追踪核245(和/或其它核243、244)包括对诸如Microsoft的DirectX光线追踪(DXR)之类的光线追踪指令集的硬件支持,所述DXR包括DispatchRays命令以及光线生成、最接近命中、任意命中和未命中着色器,这些使得能够对每个对象指派纹理和着色器的独特集合。可以由光线追踪核245、图形核243和张量核244支持的另一光线追踪平台是Vulkan 1.1.85。然而,注意本发明的根本原理不限于任何特定光线追踪ISA。
一般而言,各种核245、244、243可以支持光线追踪指令集,所述光线追踪指令集包括用于光线生成、最接近命中、任意命中、光线-图元交叉、每图元和层级包围盒构造、未命中、访问及异常(exception)的指令/功能。更具体地说,一个实施例包括用来执行以下功能的光线追踪指令:
光线生成 – 可以对每个像素、样本或其它用户定义的工作指派执行光线生成指令。
最接近命中 – 可以执行最接近命中指令来用场景内的图元来定位光线的最接近交叉点。
任意命中 – 任意命中指令标识场景内的图元与光线之间的多个交叉,潜在地标识新的最接近交叉点。
交叉 – 交叉指令执行光线-图元交叉测试并且输出结果。
每图元包围盒构造 – 此指令围绕给定图元或图元的群组构建包围盒(例如,在构建新的BVH或其它加速数据结构时)。
未命中 – 指示光线未命中场景或场景的指定区域内的所有几何形状。
访问 – 指示光线将遍历的子体(children volume)。
异常 – 包括各种类型的异常处理程序(exception handler)(例如,针对各种错误条件而被调取)。
图2D是根据本文中描述的实施例的能够被配置为图形处理器和/或计算加速器的通用图形处理单元(GPGPU)270的框图。GPGPU 270能够经由一个或多个系统和/或存储器总线与主机处理器(例如,一个或多个CPU 246)和存储器271、272互连。在一个实施例中,存储器271是可以与一个或多个CPU 246共享的系统存储器,而存储器272是专用于GPGPU 270的装置存储器。在一个实施例中,装置存储器272和GPGPU 270内的组件可被映射到一个或多个CPU 246可访问的存储器地址中。可经由存储器控制器268来促进对存储器271和272的访问。在一个实施例中,存储器控制器268包括内部直接存储器存取(DMA)控制器269,或者能够包括逻辑以执行在其它情况下将由DMA控制器执行的操作。
GPGPU 270包括多个高速缓冲存储器,包括L2高速缓存253、L1高速缓存254、指令高速缓存255和共享存储器256,该共享存储器256的至少一部分也可被分区为高速缓冲存储器。GPGPU 270还包括多个计算单元260A-260N。每个计算单元260A-260N包括向量寄存器261、标量寄存器262、向量逻辑单元263和标量逻辑单元264的集合。计算单元260A-260N还能够包括本地共享存储器265和程序计数器266。计算单元260A-260N能够与常量高速缓存267耦合,该常量高速缓存267能够被用来存储常量数据,所述常量数据是在GPGPU 270上执行的内核或着色器程序的运行期间将不改变的数据。在一个实施例中,常量高速缓存267是标量数据高速缓存,并且高速缓存的(cached)数据能够被直接获取到标量寄存器262中。
在操作期间,一个或多个CPU 246能够将命令写入已被映射到可访问地址空间中的GPGPU 270中的寄存器或存储器中。命令处理器257能够从寄存器或存储器读取命令,并且确定在GPGPU 270内将如何处理那些命令。线程分派器258然后能够被用来将线程分派到计算单元260A-260N以执行那些命令。每个计算单元260A-260N能够独立于其它计算单元执行线程。另外,每个计算单元260A-260N能够被独立配置用于有条件的计算,并且能够有条件地输出计算的结果到存储器。在提交的命令完成时,命令处理器257能够中断一个或多个CPU 246。
图3A-3C图示了由本文中描述的实施例提供的另外的图形处理器和计算加速器架构的框图。与本文中任何其它附图的元件具有相同参考标号(或名称)的图3A-3C的元件能够以与本文中其它地方所描述的方式类似的任何方式操作或起作用,但不限于这样。
图3A是图形处理器300的框图,该图形处理器300可以是分立的图形处理单元,或者可以是与多个处理核集成的图形处理器,或诸如但不限于存储器装置或网络接口的其它半导体装置。在一些实施例中,图形处理器经由到图形处理器上的寄存器的存储器映射I/O接口并且利用放置在处理器存储器中的命令进行通信。在一些实施例中,图形处理器300包括用来访问存储器的存储器接口314。存储器接口314能够是到本地存储器、一个或多个内部高速缓存、一个或多个共享外部高速缓存和/或到系统存储器的接口。
在一些实施例中,图形处理器300还包括用来将显示输出数据驱动到显示装置318的显示控制器302。显示控制器302包括用于一个或多个覆盖平面的硬件,以用于显示和组合多个层的视频或用户接口元素。显示装置318能够是内部或外部显示装置。在一个实施例中,显示装置318是头戴式显示装置,诸如虚拟现实(VR)显示装置或增强现实(AR)显示装置。在一些实施例中,图形处理器300包括视频编解码器引擎306以将媒体编码成一种或多种媒体编码格式、从一种或多种媒体编码格式解码媒体或在一种或多种媒体编码格式之间将媒体转码,所述媒体编码格式包括但不限于运动图像专家组(MPEG)格式(诸如MPEG-2)、高级视频编码(AVC)格式(诸如H.264/MPEG-4 AVC)、H.265/HEVC、开放媒体联盟(AOMedia)VP8、VP9、以及电影与电视工程师协会(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图元形状(例如,矩形、三角形等)的处理功能来渲染三维图像和场景。3D流水线312包括可编程和固定功能元件,所述可编程和固定功能元件在元件内执行各种任务和/或将执行线程派生(spawn)到3D/媒体子系统315。虽然3D流水线312能够被用来执行媒体操作,但GPE 310的实施例还包括特别用来执行媒体操作(诸如视频后处理和图像增强)的媒体流水线316。
在一些实施例中,媒体流水线316包括固定功能或可编程逻辑单元以代替或者代表视频编解码器引擎306来执行一个或多个专用媒体操作,诸如视频解码加速、视频去交织和视频编码加速。在一些实施例中,媒体流水线316另外包括线程派生单元以派生用于在3D/媒体子系统315上执行的线程。派生的线程在3D/媒体子系统315中包括的一个或多个图形执行单元上执行用于媒体操作的计算。
在一些实施例中,3D/媒体子系统315包括用于执行由3D流水线312和媒体流水线316派生的线程的逻辑。在一个实施例中,流水线将线程执行请求发送到3D/媒体子系统315,所述3D/媒体子系统315包括线程分派逻辑,以用于将各种请求仲裁(arbitrate)并分派到可用线程执行资源。执行资源包括用来处理3D和媒体线程的图形执行单元的阵列。在一些实施例中,3D/媒体子系统315包括用于线程指令和数据的一个或多个内部高速缓存。在一些实施例中,子系统还包括共享存储器,所述共享存储器包括寄存器和可寻址存储器,以在线程之间共享数据和存储输出数据。
图3B图示了根据本文中描述的实施例的具有拼贴(tiled)架构的图形处理器320。在一个实施例中,图形处理器320包括图形处理引擎集群322,所述图形处理引擎集群322在图形引擎贴片310A-310D内具有图3A的图形处理引擎310的多个实例。每个图形引擎贴片310A-310D能够经由一组贴片互连323A-323F而互连267-。每个图形引擎贴片310A-310D还能够经由存储器互连325A-325D而连接到存储器模块或存储器装置326A-326D。存储器装置326A-326D能够使用任何图形存储器技术。例如,存储器装置326A-326D可以是图形双倍数据率(GDDR)存储器。存储器装置326A-326D在一个实施例中是高带宽存储器(HBM)模块,其能够与其相应图形引擎贴片310A-310D一起在管芯上。在一个实施例中,存储器装置326A-326D是堆叠存储器装置,其能够被堆叠在其相应图形引擎贴片310A-310D的顶部上。在一个实施例中,如图11B-11D中进一步详细描述的,每个图形引擎贴片310A-310D和关联存储器326A-326D驻留在单独的小芯片(chiplet)上,所述小芯片被接合到基础管芯或基础衬底。
图形处理引擎集群322能够与片上或封装上组构互连324连接。组构互连324可实现在图形引擎贴片310A-310D与诸如视频编解码器306和一个或多个复制引擎304的组件之间的通信。复制引擎304能够被用来将数据移出以下各项、将数据移入以下各项以及在以下各项之间移动数据:存储器装置326A-326D和在图形处理器320外的存储器(例如,系统存储器)。组构互连324还能够被用来互连图形引擎贴片310A-310D。图形处理器320可以可选地包括用来实现与外部显示装置318的连接的显示控制器302。图形处理器还可以被配置为图形或计算加速器。在加速器配置中,可省略显示控制器302和显示装置318。
图形处理器320能够经由主机接口328连接到主机系统。主机接口328可实现在图形处理器320、系统存储器和/或其它系统组件之间的通信。主机接口328能够例如是PCIexpress总线或另一类型的主机系统接口。
图3C图示了根据本文中描述的实施例的计算加速器330。计算加速器330能够包括与图3B的图形处理器320的架构类似性并且被优化用于计算加速。计算引擎集群332能够包括一组计算引擎贴片340A-340D,其包括被优化用于并行或基于向量的通用计算操作的执行逻辑。在一些实施例中,计算引擎贴片340A-340D不包括固定功能图形处理逻辑,虽然在一个实施例中,计算引擎贴片340A-340D中的一个或多个计算引擎贴片能够包括用来执行媒体加速的逻辑。计算引擎贴片340A-340D能够经由存储器互连325A-325D连接到存储器326A-326D。存储器326A-326D和存储器互连325A-325D可以是与在图形处理器320中类似的技术,或者能够是不同的。图形计算引擎贴片340A-340D还能够经由一组贴片互连323A-323F而互连,并且可以与组构互连324连接和/或通过组构互连324而互连。在一个实施例中,计算加速器330包括能够被配置为装置范围高速缓存的大的L3高速缓存336。计算加速器330还能够以与图3B的图形处理器320类似的方式经由主机接口328连接到主机处理器和存储器。
图形处理引擎
图4是根据一些实施例的图形处理器的图形处理引擎410的框图。在一个实施例中,图形处理引擎(GPE)410是图3A中示出的GPE 310的某一版本,并且还可以表示图3B的图形引擎贴片310A-310D。与本文中任何其它附图的元件具有相同参考标号(或名称)的图4的元件能够以与本文中其它地方所描述的方式类似的任何方式操作或起作用,但不限于这样。例如,图示了图3A的3D流水线312和媒体流水线316。媒体流水线316在GPE 410的一些实施例中是可选的,并且可以未被显式地包括在GPE 410内。例如,并且在至少一个实施例中,单独的媒体和/或图像处理器被耦合到GPE 410。
在一些实施例中,GPE 410与提供命令流到3D流水线312和/或媒体流水线316的命令流转化器403耦合,或者包括该命令流转化器403。在一些实施例中,命令流转化器403与存储器耦合,所述存储器能够是系统存储器,或内部高速缓冲存储器和共享高速缓冲存储器中的一个或多个。在一些实施例中,命令流转化器403接收来自存储器的命令,并且将命令发送到3D流水线312和/或媒体流水线316。命令是从环形缓冲器获取的指示,所述环形缓冲器存储用于3D流水线312和媒体流水线316的命令。在一个实施例中,环形缓冲器能够另外包括存储批量的多个命令的批量命令缓冲器。用于3D流水线312的命令还能够包括对在存储器中存储的数据的引用,所述数据诸如但不限于用于3D流水线312的顶点和几何数据和/或用于媒体流水线316的图像数据和存储器对象。3D流水线312和媒体流水线316通过经由相应流水线内的逻辑执行操作或者通过将一个或多个执行线程分派到图形核阵列414来处理命令和数据。在一个实施例中,图形核阵列414包括图形核(例如,(一个或多个)图形核415A、(一个或多个)图形核415B)的一个或多个块,每个块包括一个或多个图形核。每个图形核包括:一组图形执行资源,其包括用来执行图形和计算操作的通用和图形特定执行逻辑;以及固定功能纹理处理和/或机器学习和人工智能加速逻辑。
在各种实施例中,3D流水线312能够包括用来通过处理指令和分派执行线程到图形核阵列414来处理一个或多个着色器程序(诸如顶点着色器、几何着色器、像素着色器、片段着色器、计算着色器或其它着色器程序)的固定功能和可编程逻辑。图形核阵列414提供执行资源的统一块以供在处理这些着色器程序中使用。图形核阵列414的(一个或多个)图形核415A-415B内的多用途执行逻辑(例如,执行单元)包括对各种3D API着色器语言的支持,并且能够执行与多个着色器关联的多个同时执行线程。
在一些实施例中,图形核阵列414包括用来执行媒体功能(诸如视频和/或图像处理)的执行逻辑。在一个实施例中,执行单元包括通用逻辑,该通用逻辑可编程以除图形处理操作外还执行并行通用计算操作。该通用逻辑能够与在图1的(一个或多个)处理器核107或如在图2A中的核202A-202N内的通用逻辑并行或结合地执行处理操作。
由在图形核阵列414上执行的线程生成的输出数据能够将数据输出到统一返回缓冲器(URB)418中的存储器。URB 418能够存储用于多个线程的数据。在一些实施例中,URB418可以被用来在图形核阵列414上执行的不同线程之间发送数据。在一些实施例中,URB418可以另外被用于在图形核阵列上的线程与在共享功能逻辑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内的一些或全部逻辑。在一个实施例中,可以在图形核阵列414的共享功能逻辑416内重复共享功能逻辑420内的全部逻辑元件。在一个实施例中,排除了共享功能逻辑420以有利于图形核阵列414内的共享功能逻辑416。
执行单元
图5A-5B图示了根据本文中描述的实施例的包括图形处理器核中采用的处理元件的阵列的线程执行逻辑500。与本文中任何其它附图的元件具有相同参考标号(或名称)的图5A-5B的元件能够以本文中其它地方所描述的方式类似的任何方式操作或起作用,但不限于这样。图5A-5B图示了线程执行逻辑500的概述,该线程执行逻辑500可以代表用图2B的每个子核221A-221F图示的硬件逻辑。图5A代表通用图形处理器内的执行单元,而图5B代表可在计算加速器内使用的执行单元。
如在图5A中所图示的,在一些实施例中,线程执行逻辑500包括着色器处理器502、线程分派器504、指令高速缓存506、包括多个执行单元508A-508N的可缩放执行单元阵列、采样器510、共享本地存储器511、数据高速缓存512和数据端口514。在一个实施例中,可缩放执行单元阵列能够通过基于工作负载的计算要求来启用或禁用一个或多个执行单元(例如,执行单元508A、508B、508C、508D直到508N-1和508N中的任何执行单元)来动态地进行缩放。在一个实施例中,被包括的组件经由链接到组件中的每个组件的互连组构而互连。在一些实施例中,线程执行逻辑500包括通过指令高速缓存506、数据端口514、采样器510和执行单元508A-508N中的一个或多个到存储器(诸如系统存储器或高速缓冲存储器)的一个或多个连接。在一些实施例中,每个执行单元(例如,508A)是独立可编程通用计算单元,其能执行多个同时硬件线程,同时为每个线程并行处理多个数据元素。在各种实施例中,执行单元508A-508N的阵列是可缩放的,以包括任何数量的各个执行单元。
在一些实施例中,执行单元508A-508N主要被用来执行着色器程序。着色器处理器502能够处理各种着色器程序,并且经由线程分派器504分派与着色器程序关联的执行线程。在一个实施例中,线程分派器包括用来对来自图形和媒体流水线的线程发起请求进行仲裁并且在执行单元508A-508N中的一个或多个执行单元上实例化所请求的线程的逻辑。例如,几何流水线能够分派顶点、曲面细分(tessellation)或几何着色器到线程执行逻辑以用于处理。在一些实施例中,线程分派器504还能够处理来自执行的着色器程序的运行时间线程派生请求。
在一些实施例中,执行单元508A-508N支持指令集,所述指令集包括对许多标准3D图形着色器指令的本机支持,使得来自图形库(例如Direct 3D和OpenGL)的着色器程序以最小的转换来执行。执行单元支持顶点和几何处理(例如顶点程序、几何程序、顶点着色器)、像素处理(例如像素着色器、片段着色器)和通用处理(例如计算和媒体着色器)。执行单元508A-508N中的每个执行单元能进行多发布(multi-issue)单指令多数据(SIMD)执行,并且多线程操作在面临更高时延存储器访问时实现高效的执行环境。每个执行单元内的每个硬件线程具有专用高带宽寄存器堆和关联的独立线程状态。执行是对能够进行整数、单精度和双精度浮点运算、SIMD分支能力、逻辑运算、超越运算和其它杂项运算的流水线的每时钟多发布。在等待来自存储器或共享功能之一的数据时,执行单元508A-508N内的依赖性逻辑使等待的线程休眠,直到所请求的数据已返回为止。当等待的线程正在休眠时,硬件资源可以专用于处理其它线程。例如,在与顶点着色器操作关联的延迟期间,执行单元能够执行用于像素着色器、片段着色器或另一类型的着色器程序(包括不同顶点着色器)的操作。各种实施例能够适用于通过作为使用SIMD的备选方案或者附加于使用SIMD来使用单指令多线程(SIMT)来使用执行。对SIMD核或操作的引用也能够适用于SIMT或者适用于与SIMT组合的SIMD。
执行单元508A-508N中的每个执行单元对数据元素的阵列进行操作。数据元素的数量是“执行大小”或用于指令的通道的数量。执行通道是用于指令内的数据元素访问、掩码(masking)和流控制的执行的逻辑单元。通道的数量可以独立于用于特定图形处理器的物理算术逻辑单元(ALU)或浮点单元(FPU)的数量。在一些实施例中,执行单元508A-508N支持整数和浮点数据类型。
执行单元指令集包括SIMD指令。各种数据元素能够作为打包数据类型存储在寄存器中,并且执行单元将基于元素的数据大小来处理各种元素。例如,在对256位宽向量进行操作时,向量的256位被存储在寄存器中,并且执行单元对作为四个单独的54位打包数据元素(四字(QW)大小数据元素)、八个单独的32位打包数据元素(双字(DW)大小数据元素)、十六个单独的16位打包数据元素(字(W)大小数据元素)或三十二个单独的8位数据元素(字节(B)大小数据元素)的向量进行操作。然而,不同向量宽度和寄存器大小是可能的。
在一个实施例中,一个或多个执行单元能够被组合成具有线程控制逻辑(507A-507N)的融合执行单元509A-509N,该线程控制逻辑(507A-507N)对于融合EU是公共的。多个EU能够融合成EU群组。融合EU群组中的每个EU能够配置成执行单独的SIMD硬件线程。融合EU群组中EU的数量能够根据实施例而变化。另外,能够每EU执行各种SIMD宽度,包括但不限于SIMD8、SIMD16和SIMD32。每个融合图形执行单元509A-509N包括至少两个执行单元。例如,融合执行单元509A包括第一EU 508A、第二EU 508B及线程控制逻辑507A,该线程控制逻辑507A对于第一EU 508A和第二EU 508B是公共的。线程控制逻辑507A控制在融合图形执行单元509A上执行的线程,允许融合执行单元509A-509N内的每个EU使用公共指令指针寄存器来执行。
线程执行逻辑500中包括一个或多个内部指令高速缓存(例如,506)以对用于执行单元的线程指令进行高速缓存。在一些实施例中,包括一个或多个数据高速缓存(例如,512)以在线程执行期间对线程数据进行高速缓存。在执行逻辑500上执行的线程还能够在共享本地存储器511中存储显式管理的数据。在一些实施例中,包括采样器510以提供用于3D操作的纹理采样和用于媒体操作的媒体采样。在一些实施例中,采样器510包括专用纹理或媒体采样功能性,以在向执行单元提供采样数据前在采样进程期间处理纹理或媒体数据。
在执行期间,图形和媒体流水线经由线程派生和分派逻辑向线程执行逻辑500发送线程发起请求。一旦几何对象的群组已被处理并且光栅化成像素数据,着色器处理器502内的像素处理器逻辑(例如,像素着色器逻辑、片段着色器逻辑等)便被调取来进一步计算输出信息,并且使结果被写入到输出表面(例如颜色缓冲器、深度缓冲器、模板缓冲器等)。在一些实施例中,像素着色器或片段着色器计算要跨光栅化对象内插的各种顶点属性的值。在一些实施例中,着色器处理器502内的像素处理器逻辑然后执行应用编程接口(API)供应的像素或片段着色器程序。为执行着色器程序,着色器处理器502经由线程分派器504向执行单元(例如,508A)分派线程。在一些实施例中,着色器处理器502使用采样器510中的纹理采样逻辑来访问存储在存储器中的纹理映射中的纹理数据。对纹理数据和输入几何数据的算术运算计算每个几何片段的像素颜色数据,或者从进一步处理中丢弃一个或多个像素。
在一些实施例中,数据端口514提供存储器访问机制,以便线程执行逻辑500将经处理的数据输出至存储器以用于在图形处理器输出流水线上进一步处理。在一些实施例中,数据端口514包括或者耦合到一个或多个高速缓冲存储器(例如,数据高速缓存512)来对数据进行高速缓存以用于经由数据端口的存储器访问。
在一个实施例中,执行逻辑500还能够包括光线追踪器505,所述光线追踪器505能够提供光线追踪加速功能性。光线追踪器505能够支持包括用于光线生成的指令/功能的光线追踪指令集。该光线追踪指令集能够与图2C中的光线追踪核245所支持的光线追踪指令集类似或不同。
图5B图示了根据实施例的执行单元508的示例性内部细节。图形执行单元508能够包括指令获取单元537、通用寄存器堆阵列(GRF)524、架构寄存器堆阵列(ARF)526、线程仲裁器522、发送单元530、分支单元532、一组SIMD浮点单元(FPU)534以及在一个实施例中包括一组专用整数SIMD ALU 535。GRF 524和ARF 526包括与可以在图形执行单元508中活动的每个同时硬件线程关联的一组通用寄存器堆和架构寄存器堆。在一个实施例中,在ARF526中维持每线程架构状态,而在线程执行期间使用的数据被存储在GRF 524中。每个线程的执行状态(包括用于每个线程的指令指针)能够被保持在ARF 526中的线程特定寄存器中。
在一个实施例中,图形执行单元508具有是同时多线程(SMT)和细粒度交错多线程(IMT)的组合的架构。该架构具有模块化配置,其能够在设计时基于每执行单元的寄存器数量和同时线程的目标数量来被微调,其中执行单元资源跨用来执行多个同时线程的逻辑而被划分。可以由图形执行单元508执行的逻辑线程的数量不限于硬件线程的数量,并且多个逻辑线程能够被指派到每个硬件线程。
在一个实施例中,图形执行单元508能够共同发布多个指令,所述多个指令各自可以是不同的指令。图形执行单元线程508的线程仲裁器522能够将指令分派给发送单元530、分支单元532或(一个或多个)SIMD FPU 534中的一个以用于执行。每个执行线程能够访问GRF 524内的128个通用寄存器,其中每个寄存器能够存储32个字节,其可作为32位数据元素的SIMD 8元素向量访问。在一个实施例中,每个执行单元线程可以访问GRF 524内的4千字节,虽然实施例不限于此,并且在其它实施例中可以提供更多或更少的寄存器资源。在一个实施例中,图形执行单元508被分区成能够独立执行计算操作的七个硬件线程,尽管每执行单元的线程的数量也可根据实施例而变化。例如,在一个实施例中支持多达16个硬件线程。在其中七个线程可以访问4千字节的实施例中,GRF 524能够存储总共28千字节。在16个线程可以访问4千字节的情况下,GRF 524能够存储总共64千字节。灵活的寻址模式能够允许对寄存器一起被寻址以有效地构建更宽的寄存器或者表示跨步矩形块数据结构(strided rectangular block data structure)。
在一个实施例中,经由通过消息传递发送单元530执行的“发送”指令来分派存储器操作、采样器操作和其它较长时延系统通信。在一个实施例中,将分支指令分派给专用分支单元532以促进SIMD发散和最终收敛。
在一个实施例中,图形执行单元508包括一个或多个SIMD浮点单元((一个或多个)FPU)534以执行浮点运算。在一个实施例中,(一个或多个)FPU 534还支持整数计算。在一个实施例中,(一个或多个)FPU 534能够SIMD执行多达数量为M的32位浮点(或整数)运算,或者SIMD执行多达2M个16位整数或16位浮点运算。在一个实施例中,(一个或多个)FPU中的至少一个FPU提供扩展的数学能力以支持高吞吐量超越数学功能和双精度54位浮点。在一些实施例中,还存在一组8位整数SIMD ALU 535,并且该组8位整数SIMD ALU 535可以被特别地优化以执行与机器学习计算关联的运算。
在一个实施例中,图形执行单元508的多个实例的阵列能够在图形子核分组(例如,子切片)中被实例化。为了可缩放性,产品架构师能够选择每子核分组的执行单元的确切数量。在一个实施例中,执行单元508能够跨多个执行通道执行指令。在另外的实施例中,在图形执行单元508上执行的每个线程是在不同的通道上执行的。
图6图示了根据实施例的另外的执行单元600。执行单元600可以是供例如在如图3C中的计算引擎贴片340A-340D中使用的计算优化的执行单元,但未被限制为这样。执行单元600的变体还可以用于如图3B中的图形引擎贴片310A-310D中。在一个实施例中,执行单元600包括线程控制单元601、线程状态单元602、指令获取/预获取单元603和指令解码单元604。执行单元600另外包括寄存器堆606,所述寄存器堆606存储能够被指派到执行单元内的硬件线程的寄存器。执行单元600另外包括发送单元607和分支单元608。在一个实施例中,发送单元607和分支单元608能够与图5B的图形执行单元508的发送单元530和分支单元532类似地操作。
执行单元600还包括计算单元610,所述计算单元610包括多个不同类型的功能单元。在一个实施例中,计算单元610包括ALU单元611,所述ALU单元611包括算术逻辑单元的阵列。ALU单元611能够被配置成执行64位、32位和16位整数和浮点运算。整数和浮点运算可同时被执行。计算单元610还能够包括脉动阵列612和数学单元613。脉动阵列612包括能够用来以脉动方式执行向量或其它数据并行操作的数据处理单元的宽度W和深度D的网络。在一个实施例中,脉动阵列612能够被配置成执行矩阵运算,诸如矩阵点积运算。在一个实施例中,脉动阵列612支持16位浮点运算及8位和4位整数运算。在一个实施例中,脉动阵列612能够被配置成加速机器学习操作。在此类实施例中,脉动阵列612能够被配置有对bfloat16位浮点格式的支持。在一个实施例中,能够包括数学单元613来以高效和比ALU单元611更低功率的方式执行数学运算的特定子集。数学单元613能够包括可以在由其它实施例提供的图形处理引擎的共享功能逻辑中找到的数学逻辑的变体(例如,图4的共享功能逻辑420的数学逻辑422)。在一个实施例中,数学单元613能够被配置成执行32位和64位浮点运算。
线程控制单元601包括用来控制在执行单元内线程的执行的逻辑。线程控制单元601能够包括用来开始、停止和抢占执行单元600内线程的执行的线程仲裁逻辑。线程状态单元602能够用来为被指派在执行单元600上执行的线程存储线程状态。在执行单元600内存储线程状态使得能够在那些线程变为阻塞或空闲时快速抢占线程。指令获取/预获取单元603能够从更高级别执行逻辑的指令高速缓存(例如,如图5A中的指令高速缓存506)中获取指令。指令获取/预获取单元603还能够基于当前执行的线程的分析来发布对要被加载到指令高速缓存中的指令的预获取请求。指令解码单元604能够被用来解码要由计算单元执行的指令。在一个实施例中,指令解码单元604能够被用作次级解码器以将复杂指令解码成组成微操作(constituent micro-operation)。
执行单元600另外包括能够由在执行单元600上执行的硬件线程使用的寄存器堆606。能够跨用来执行在执行单元600的计算单元610内的多个同时线程的逻辑来划分寄存器堆606中的寄存器。可以由图形执行单元600执行的逻辑线程的数量不限于硬件线程的数量,并且多个逻辑线程能够被指派到每个硬件线程。寄存器堆606的大小能够基于支持的硬件线程的数量跨实施例而变化。在一个实施例中,寄存器重命名可用来动态分配寄存器到硬件线程。
图7是图示根据一些实施例的图形处理器指令格式700的框图。在一个或多个实施例中,图形处理器执行单元支持具有采用多种格式的指令的指令集。实线框图示了一般被包括在执行单元指令中的组成部分,而虚线包括可选的或者仅被包括在指令的子集中的组成部分。在一些实施例中,描述和图示的指令格式700是宏指令,因为它们是供应给执行单元的指令,而与一旦指令被处理则由指令解码产生的微操作相反。
在一些实施例中,图形处理器执行单元本机地支持采用128位指令格式710的指令。基于所选择的指令、指令选项和操作数的数量,64位压缩指令格式730可用于一些指令。本机128位指令格式710提供对所有指令选项的访问,而在64位格式730中一些选项和操作被限制。采用64位格式730的可用的本机指令随实施例而变化。在一些实施例中,使用索引字段713中的一组索引值来部分地压缩指令。执行单元硬件基于索引值来引用一组压缩表,并且使用压缩表输出来重构采用128位指令格式710的本机指令。能够使用指令的其它大小和格式。
对于每种格式,指令操作码712定义执行单元要执行的操作。执行单元跨每个操作数的多个数据元素并行执行每个指令。例如,响应于相加指令,执行单元跨表示纹理元素或图片元素的每个颜色通道来执行同时相加运算。默认情况下,执行单元跨操作数的所有数据通道来执行每个指令。在一些实施例中,指令控制字段714实现对诸如通道选择(例如,断定(predication))和数据通道次序(例如,搅混(swizzle))之类的某些执行选项的控制。对于采用128位指令格式710的指令,执行大小字段716限制将被并行执行的数据通道的数量。在一些实施例中,执行大小字段716不可用于在64位紧凑指令格式730中使用。
一些执行单元指令具有多达三个操作数,这三个操作数包括两个源操作数、src0720、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(例如调取、跳(jmp))包括采用0010xxxxb(例如,0x20)形式的指令。杂项指令群组746包括指令的混合,包括采用0011xxxxb(例如0x30)形式的同步指令(例如等待、发送)。并行数学指令群组748包括采用0100xxxxb(例如0x40)形式的逐组成部分的算术指令(例如,加、乘(mul))。并行数学群组748跨数据通道并行执行算术运算。向量数学群组750包括采用0101xxxxb(例如,0x50)形式的算术指令(例如,dp4)。向量数学群组对向量操作数执行诸如点积计算的算术。图示的操作码解码740在一个实施例中能够用来确定执行单元的哪个部分将被用来执行解码的指令。例如,一些指令可被指定为将由脉动阵列执行的脉动指令。诸如光线追踪指令(未示出)的其它指令能够被路由到执行逻辑的切片或分区内的光线追踪核或光线追踪逻辑。
图形流水线
图8是图形处理器800的另一实施例的框图。与本文中任何其它附图的元件具有相同参考标号(或名称)的图8的元件能够以与本文中其它地方所描述的方式类似的任何方式操作或起作用,但不限于这样。
在一些实施例中,图形处理器800包括几何流水线820、媒体流水线830、显示引擎840、线程执行逻辑850和渲染输出流水线870。在一些实施例中,图形处理器800是包括一个或多个通用处理核的多核处理系统内的图形处理器。通过对一个或多个控制寄存器(未示出)的寄存器写入或者经由经过环形互连802发布至图形处理器800的命令来控制图形处理器。在一些实施例中,环形互连802将图形处理器800耦合到其它处理组件,诸如其它图形处理器或通用处理器。来自环形互连802的命令由命令流转化器803解译,该命令流转化器803将指令供应至几何流水线820或媒体流水线830的各个组件。
在一些实施例中,命令流转化器803指导顶点获取器805的操作,该顶点获取器805从存储器读取顶点数据并执行由命令流转化器803提供的顶点处理命令。在一些实施例中,顶点获取器805将顶点数据提供给顶点着色器807,该顶点着色器807对每个顶点执行坐标空间变换和照明操作。在一些实施例中,顶点获取器805和顶点着色器807通过经由线程分派器831向执行单元852A-852B分派执行线程来执行顶点处理指令。
在一些实施例中,执行单元852A-852B是具有用于执行图形和媒体操作的指令集的向量处理器的阵列。在一些实施例中,执行单元852A-852B具有附连的L1高速缓存851,所述L1高速缓存851特定于每个阵列,或者在阵列之间共享。高速缓存能够被配置为数据高速缓存、指令高速缓存或被分区以在不同分区中含有数据和指令的单个高速缓存。
在一些实施例中,几何流水线820包括曲面细分组件以执行3D对象的硬件加速的曲面细分。在一些实施例中,可编程外壳着色器(programmable hull shader)811配置曲面细分操作。可编程域着色器817提供曲面细分输出的后端评估。曲面细分器813在外壳着色器811的指导下进行操作,并且含有专用逻辑以基于作为到几何流水线820的输入而提供的粗略几何模型来生成一组详细的几何对象。在一些实施例中,如果未使用曲面细分,则能够绕过曲面细分组件(例如,外壳着色器811、曲面细分器813和域着色器817)。
在一些实施例中,完整几何对象能够由几何着色器819经由分派给执行单元852A-852B的一个或多个线程来处理,或者能够直接行进至裁剪器(clipper)829。在一些实施例中,几何着色器对整个几何对象进行操作,而不是如在图形流水线的先前阶段中那样对顶点或顶点的补片(patch)进行操作。如果曲面细分被禁用,则几何着色器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,其将基于顶点的对象转换成关联的基于像素的表示。在一些实施例中,光栅化器逻辑包括用来执行固定功能三角形和线光栅化的窗口化器(windower)/掩蔽器单元。关联的渲染高速缓存878和深度高速缓存879在一些实施例中也是可用的。像素操作组件877对数据执行基于像素的操作,尽管在一些实例中,与2D操作关联的像素操作(例如,带有混合(blending)的位块图像传输)由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指定处理命令数据的图形装置的客户端单元。在一些实施例中,图形处理器命令解析器检查每个命令的客户端字段以调节命令的进一步处理,并且将命令数据路由到适当的客户端单元。在一些实施例中,图形处理器客户端单元包括存储器接口单元、渲染单元、2D单元、3D单元和媒体单元。每个客户端单元具有处理命令的对应处理流水线。一旦客户端单元接收到命令,客户端单元便读取操作码904和子操作码905(如果子操作码905存在的话),以确定要执行的操作。客户端单元使用数据字段906中的信息来执行命令。对于一些命令,预期显式命令大小908来指定命令的大小。在一些实施例中,命令解析器基于命令操作码来自动确定命令中的至少一些命令的大小。在一些实施例中,经由双字的倍数来对齐命令。能够使用其它命令格式。
图9B中的流程图图示了示例性图形处理器命令序列910。在一些实施例中,以图形处理器的实施例为特征的数据处理系统的软件或固件使用所示出的命令序列的版本来设置、执行和终止一组图形操作。仅出于示例的目的示出并描述了样本命令序列,因为实施例不限于这些特定命令或此命令序列。另外,命令可作为命令序列中的批量的命令被发布,使得图形处理器将至少部分并发地处理命令的序列。
在一些实施例中,图形处理器命令序列910可以以流水线转储清除命令(pipelineflush command)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。着色器语言指令可以采用高级着色器语言,诸如Direct3D的高级着色器语言(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的编译期间将高级着色器编译成低级着色器。在一些实施例中,以中间形式(诸如由Vulkan API使用的标准可移植中间表示(SPIR)的版本)提供着色器指令1012。
在一些实施例中,用户模式图形驱动器1026含有用来将着色器指令1012转换成硬件特定表示的后端着色器编译器1027。当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,因此可以通过零个或多于零个桥来连接一个或多个管芯。备选的是,能够通过一个或多个桥来连接多个管芯或逻辑单元。另外,在其它可能配置(包括三维配置)中能够将多个逻辑单元、管芯和桥连接在一起。
图11C图示了包括连接到衬底1180(例如,基础管芯)的多个硬件逻辑小芯片单元的封装组装件1190。如本文中所述的图形处理单元、并行处理器和/或计算加速器能够由单独制造的多样化的硅小芯片构成。在此上下文中,小芯片是至少部分封装的集成电路,其包括能够与其它小芯片一起组装到更大封装中的不同的逻辑单元。带有不同IP核逻辑的小芯片的多样化集合能够被组装到单个装置中。另外,能够使用有源中介层技术将小芯片集成到基础管芯或基础小芯片中。本文中描述的概念实现在GPU内的不同形式的IP之间的互连和通信。能够使用不同工艺技术来制造并且在制造期间构成IP核,这避免了将多个IP(特别是在带有若干特点(flavors)IP的大的SoC上)汇聚到相同制造工艺的复杂性。使得能够使用多个工艺技术改进了推向市场的时间,并且提供了创建多个产品SKU的有成本效益的方式。另外,解聚的IP更易于被独立地功率门控,在给定工作负载上不在使用中的组件能够被断电,从而降低总体功率消耗。
硬件逻辑小芯片能够包括专用硬件逻辑小芯片1172、逻辑或I/O小芯片1174和/或存储器小芯片1175。硬件逻辑小芯片1172和逻辑或I/O小芯片1174可以至少部分地在可配置逻辑或固定功能性逻辑硬件中实现,并且能够包括(一个或多个)处理器核、(一个或多个)图形处理器、并行处理器或本文中描述的其它加速器装置中的任何一项的一个或多个部分。存储器小芯片1175能够是DRAM(例如,GDDR、HBM)存储器或高速缓冲(SRAM)存储器。
每个小芯片能够被制作为单独的半导体管芯,并且经由互连结构1173与衬底1180耦合。互连结构1173可被配置成在各种小芯片与衬底1180内的逻辑之间路由电信号。互连结构1173能够包括互连,诸如但不限于凸块或柱。在一些实施例中,互连结构1173可以被配置成路由电信号,诸如,例如与逻辑、I/O和存储器小芯片的操作关联的输入/输出(I/O)信号和/或功率或接地信号。
在一些实施例中,衬底1180是环氧基层压衬底。在其它实施例中,衬底1180可以包括其它适合类型的衬底。封装组装件1190能够经由封装互连1183连接到其它电装置。封装互连1183可以被耦合到衬底1180的表面,以将电信号路由到其它电装置,诸如母板、其它芯片组或多芯片模块。
在一些实施例中,逻辑或I/O小芯片1174和存储器小芯片1175能够经由桥1187电耦合,该桥1187被配置成在逻辑或I/O小芯片1174与存储器小芯片1175之间路由电信号。桥1187可以是为电信号提供路由的密集互连结构。桥1187可以包括由玻璃或合适的半导体材料构成的桥衬底。能够在桥衬底上形成电路由特征,以在逻辑或I/O小芯片1174与存储器小芯片1175之间提供芯片到芯片连接。桥1187还可以被称为硅桥或互连桥。例如,在一些实施例中,桥1187是嵌入式多管芯互连桥(EMIB)。在一些实施例中,桥1187可以只是从一个小芯片到另一小芯片的直接连接。
衬底1180能够包括用于I/O 1191、高速缓冲存储器1192和其它硬件逻辑1193的硬件组件。组构1185能够被嵌入在衬底1180中以实现在各种逻辑小芯片与衬底1180内的逻辑1191、1193之间的通信。在一个实施例中,I/O 1191、组构1185、高速缓存、桥和其它硬件逻辑1193能够被集成到基础管芯中,该基础管芯层叠在衬底1180的顶部上。
在各种实施例中,封装组装件1190能够包括由组构1185或一个或多个桥1187互连的更少或更多数量的组件和小芯片。封装组装件1190内的小芯片可被布置在3D或2.5D布置中。一般而言,桥结构1187可以被用来促进在例如逻辑或I/O小芯片与存储器小芯片之间的点到点互连。组构1185能够被用来将各种逻辑和/或I/O小芯片(例如,小芯片1172、1174、1191、1193)与其它逻辑和/或I/O小芯片互连。在一个实施例中,衬底内的高速缓冲存储器1192能够充当用于封装组装件1190的全局高速缓存、分布式全局高速缓存的一部分或者充当用于组构1185的专用高速缓存。
图11D图示了根据实施例的包括可互换小芯片1195的封装组装件1194。可互换小芯片1195能够被组装到一个或多个基础小芯片1196、1198上的标准化槽中。基础小芯片1196、1198能够经由桥互连1197耦合,该桥互连1197互连能够类似于本文中描述的其它桥互连,并且可以例如是EMIB。存储器小芯片还能够经由桥互连而连接到逻辑或I/O小芯片。I/O和逻辑小芯片能够经由互连组构进行通信。基础小芯片能够各自支持采用标准化格式的一个或多个槽以用于逻辑或I/O或存储器/高速缓存之一。
在一个实施例中,能够将SRAM和功率递送电路制作到基础小芯片1196、1198中的一个或多个基础小芯片中,能够相对于堆叠在基础小芯片的顶部上的可互换小芯片1195使用不同的工艺技术来制作所述基础小芯片1196、1198。例如,能够使用更大的工艺技术来制作基础小芯片1196、1198,而能够使用更小的工艺技术来制造可互换小芯片。可互换小芯片1195中的一个或多个可以是存储器(例如,DRAM)小芯片。能够基于作为使用封装组装件1194的产品的目标的功率和/或性能,为封装组装件1194选择不同存储器密度。另外,能够基于作为产品的目标的功率和/或性能,在组装时选择带有不同数量的类型的功能单元的逻辑小芯片。另外,能够将含有不同类型的IP逻辑核的小芯片插入到可互换小芯片槽中,从而实现能够混合并匹配不同技术IP块的混合处理器设计。
示例性片上系统集成电路
图12-14图示了根据本文中描述的各种实施例的可以使用一个或多个IP核来制作的示例性集成电路和相关联的图形处理器。除了所图示的内容外,还可以包括其它逻辑和电路,包括另外的图形处理器/核、外设接口控制器或通用处理器核。
图12是图示了根据实施例的可以使用一个或多个IP核来制作的示例性片上系统集成电路1200的框图。示例性集成电路1200包括一个或多个应用处理器1205(例如,CPU)、至少一个图形处理器1210,并且可以另外包括图像处理器1215和/或视频处理器1220,以上处理器中的任何处理器可以是来自相同或多个不同设计设施的模块化IP核。集成电路1200包括外设或总线逻辑,所述外设或总线逻辑包括USB控制器1225、UART控制器1230、SPI/SDIO控制器1235和I2S/I2C控制器1240。另外,集成电路能够包括耦合到高清晰度多媒体接口(HDMI)控制器1250和移动工业处理器接口(MIPI)显示接口1255中的一个或多个的显示装置1245。可以通过包括闪速存储器和闪速存储器控制器的闪速存储器子系统1260来提供存储。可以经由存储器控制器1265提供存储器接口以便访问SDRAM或SRAM存储器装置。一些集成电路另外包括嵌入式安全引擎1270。
图13-14是图示了根据本文中描述的实施例的供SoC内使用的示例性图形处理器的框图。图13图示了根据实施例的可以使用一个或多个IP核来制作的片上系统集成电路的示例性图形处理器1310。图14图示了根据实施例的可以使用一个或多个IP核来制作的片上系统集成电路的另外的示例性图形处理器1340。图13的图形处理器1310是低功率图形处理器核的示例。图14的图形处理器1340是更高性能图形处理器核的示例。图形处理器1310、1340中的每个图形处理器能够是图12的图形处理器1210的变体。
如图13中所示出的,图形处理器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核通过接口连接。
如图14所示出的,图形处理器1340包括图13的图形处理器1310的一个或多个MMU1320A-1320B、(一个或多个)高速缓存1325A-1325B和(一个或多个)电路互连1330A-1330B。图形处理器1340包括提供统一着色器核架构的一个或多个着色器核1355A-1355N(例如,1355A、1355B、1355C、1355D、1355E、1355F直到1355N-1和1355N),在该统一着色器核架构中单个核或单个类型的核能够执行全部类型的可编程着色器代码,包括用来实现顶点着色器、片段着色器和/或计算着色器的着色器程序代码。存在的着色器核的确切数量能够在实施例和实现之间变化。另外,图形处理器1340包括:核间任务管理器1345,该核间任务管理器1345充当用来将执行线程分派给一个或多个着色器核1355A-1355N的线程分派器;以及用来为基于贴片的渲染加速拼贴操作(tiling operation)的拼贴单元1358,在该基于贴片的渲染中,用于场景的渲染操作在图像空间中被细分,例如以利用场景内的局部空间相干性或优化内部高速缓存的使用。
带有机器学习的光线追踪
如上文提到的,光线追踪是一种图形处理技术,其中通过基于物理的渲染来对光传输进行仿真。光线追踪中的关键操作之一是处理可见性查询,该可见性查询要求包围体层级(BVH)中的节点的遍历和交叉测试。
基于光线追踪和路径追踪的技术通过追踪通过每个像素的光线和路径以及使用随机采样计算诸如阴影、光泽度、间接光照等高级效果来计算图像。只使用几个样本是快速的,但产生有噪图像,而使用许多样本产生高质量图像,但成本过高。
机器学习包括能够逐渐改善指定任务的性能或逐渐呈现更准确的预测或决定的任何电路、程序代码或其组合。一些机器学习引擎可执行这些任务或呈现这些预测/决定,而不明确编程成执行任务或呈现预测/决定。存在各种机器学习技术,包括(但不限于)监督和半监督学习、无监督学习和强化学习。
在最近几年中,用于针对实时使用的光线追踪/路径追踪的突破性技术方案已经以“去噪”(使用图像处理技术来从有噪、低样本计数输入中产生高质量的滤波/去噪的图像的过程)的形式出现。最有效的去噪技术依赖于机器学习技术,其中机器学习引擎对如果有噪图像已利用更多样本而被计算则它将可能看起来像什么进行学习。在一个特定实现中,机器学习由卷积神经网络(CNN)执行;然而,本发明的根本原理不限于CNN实现。在这样的实现中,用低样本计数输入和地面真值(ground-truth)产生训练数据。CNN被训练以根据所讨论的像素周围的有噪像素输入的邻域来预测收敛像素。
虽然不完美,但该基于AI的去噪技术已被证明出奇有效。然而,要注意的是,要求良好的训练数据,因为否则网络可能预测错误的结果。例如,如果动画电影工作室在具有陆地上的场景的过去电影上训练去噪CNN并且然后试图使用该经过训练的CNN对来自设置在水上的新电影的帧进行去噪,则去噪操作将表现欠佳。
为了解决该问题,可以在渲染时动态收集学习数据,并且可以基于机器学习引擎(诸如CNN)当前运行所针对的数据来持续训练该机器学习引擎,从而为了即将到来的任务而持续改进机器学习引擎。因此,仍然可以在运行时间之前执行训练阶段,但在运行时间期间根据需要持续调整机器学习权重。因而,通过将学习数据的生成限制到每个帧或每N个帧的图像的子区域来避免计算训练所要求的参考数据的高成本。特别地,生成帧的有噪输入,以用于利用当前网络对完全帧进行去噪。附加地,生成小区域的参考像素并且将其用于持续训练,如下文描述的那样。
尽管本文中描述了CNN实现,但可以使用任何形式的机器学习引擎,包括但不限于执行监督学习(例如,构建含有输入和期望输出的一组数据的数学模型)、无监督学习(例如,其对某些类型的结构评估输入数据)和/或监督和无监督学习的组合的系统。
现有的去噪实现在训练阶段和运行时间阶段操作。在训练阶段期间,定义网络拓扑,该网络拓扑接收具有诸如像素颜色、深度、法线、法线偏差、图元ID和反射率之类的各种每像素数据通道的N×N个像素的区域,并且生成最终像素颜色。使用相当于一个帧的低样本计数输入来生成一组“代表性”训练数据,并且参考利用非常高样本计数来计算的“期望”像素颜色。向着这些输入来训练网络,从而为网络生成一组“理想”权重。在这些实现中,参考数据用于训练网络的权重,以使网络的输出最接近地与期望结果匹配。
在运行时间,加载给定的经预先计算的理想网络权重并且使网络初始化。对于每个帧,生成去噪输入(即,与用于训练的一样)的低样本计数图像。对于每个像素,像素的输入的给定邻域通过网络来运行以预测“去噪”像素颜色,从而生成去噪帧。
图15图示了初始训练实现。机器学习引擎1500(例如,CNN)接收N×N个像素的区域作为具有诸如像素颜色、深度、法线、法线偏差、图元ID和反射率之类的各种每像素数据通道的高样本计数图像数据1502,并且生成最终像素颜色。使用相当于一个帧的低样本计数输入1501生成代表性训练数据。向着这些输入来训练网络,从而生成一组“理想”权重1505,机器学习引擎1500随后将该组“理想”权重1505用于在运行时间对低样本计数图像去噪。
为了改进上文的技术,增强了用于每帧或帧的子集(例如,每N个帧,其中N=2、3、4、10、25等)生成新的训练数据的去噪阶段。特别地,如在图16中图示的,选择每个帧中的一个或多个区域,其在这里称为“新参考区域”1602,用高样本计数将该新参考区域1602渲染到单独的高样本计数缓冲器1604中。低样本计数缓冲器1603存储低样本计数输入帧1601(包括对应于新参考区域1602的低样本区域1604)。
可以随机选择新参考区域1602的位置。备选地,新参考区域1602的位置可以对每个新帧采用预先指定的方式(例如,使用帧之间的区域的预定义移动,限于帧的中心中的指定区域等)来调整。
不管如何选择新参考区域,它都被机器学习引擎1600用来持续改善和更新用于去噪的经过训练的权重1605。特别地,来自每个新参考区域1602的参考像素颜色和来自对应低样本计数区域1607的有噪参考像素输入被渲染。然后使用高样本计数参考区域1602和对应的低样本计数区域1607对机器学习引擎1600执行补充训练。与初始训练形成对比,在运行时间期间对每个新参考区域1602持续执行该训练——由此确保机器学习引擎1600被精确训练。例如,可以评估每像素数据通道(例如,像素颜色、深度、法线、法线偏差等),机器学习引擎1600使用这些每像素数据通道来对经过训练的权重1605进行调整。正如在训练情况(图21)中一样,向着一组理想权重1605训练机器学习引擎1600,以用于从低样本计数输入帧1601去除噪声以生成去噪帧1620。然而,基于新类型的低样本计数输入帧1601的新图像特性,经过训练的权重1605被持续更新。
由机器学习引擎1600执行的重新训练操作可在图形处理器单元(GPU)或主机处理器上在后台进程中并发执行。可以被实现为驱动器组件和/或GPU硬件组件的渲染循环可以持续产生新的训练数据(例如,采用新参考区域1602的形式),该渲染循环将该新的训练数据置于队列中。在GPU或主机处理器上执行的后台训练进程可以持续从该队列读取新的训练数据、重新训练机器学习引擎1600并且以适当的间隔用新的权重1605来更新它。
图17图示其中后台训练进程1700由主机CPU1710实现的一个这样的实现的示例。特别地,后台训练进程1700使用高样本计数新参考区域1602和对应的低样本区域1604来持续更新经过训练的权重1605,由此更新机器学习引擎1600。
如图18A中针对多玩家在线游戏的非限制性示例所图示的,不同的主机1820-1822单独地生成参考区域,后台训练进程1700A-C将这些参考区域传送到服务器1800(例如,诸如游戏服务器)。服务器1800然后使用从主机1821-1822中的每个主机接收的新参考区域对机器学习引擎1810执行训练,如之前描述的那样更新权重1805。它将这些权重1805传送到存储权重1605A-C的主机1820,由此更新每个单独机器学习引擎(未示出)。因为可以在短时间段中向服务器1800提供大量参考区域,因此它可高效且精确地对由用户执行的任何给定应用(例如,在线游戏)更新权重。
如图18B中图示的,不同的主机可以生成新的经过训练的权重(例如,基于如之前描述的训练/参考区域1602)并且与服务器1800(例如诸如游戏服务器)共享新的经过训练的权重,或者备选地,使用对等共享协议。服务器上的机器学习管理组件1810使用从主机中的每个主机接收的新的权重生成一组组合权重1805。组合权重1805例如可以是从新权重生成并且如本文描述的那样被持续更新的平均值。一旦生成,组合权重1605A-C的副本就可以被传送并且存储在主机1820-1821中的每个主机上,所述主机1820-1821然后可以使用如本文描述的组合权重来执行去噪操作。
半闭环更新机构也可被硬件制造商使用。例如,可以包括参考网络作为由硬件制造商分布的驱动器的部分。在驱动器使用本文描述的技术来生成新的训练数据并且将这些持续提交回硬件制造商时,硬件制造商使用该信息来针对下一驱动器更新继续改进它的机器学习实现。
在示例实现中(例如,在渲染场上的批量电影渲染中),渲染器将新生成的训练区域传送到专用服务器或数据库(在该工作室的渲染场中),该专用服务器或数据库随着时间推移聚集来自多个渲染节点的该数据。单独机器上的单独进程持续改进工作室的专用去噪网络,并且新的渲染作业总是使用最新的经过训练的网络。
机器学习方法在图19中图示。该方法可以在本文描述的架构上实现,但不限于任何特定系统或图形处理架构。
在1901,作为初始训练阶段的部分,对多个图像帧生成低样本计数图像数据和高样本计数图像数据。在1902,使用高/低样本计数图像数据训练机器学习去噪引擎。例如,与像素特征相关联的一组卷积神经网络权重可以根据训练被更新。然而,可以使用任何机器学习架构。
在1903,在运行时间,生成低样本计数图像帧连同具有高样本计数的至少一个参考区域。在1904,高样本计数参考区域被机器学习引擎和/或单独训练逻辑(例如,后台训练模块1700)用来持续改善机器学习引擎的训练。例如,高样本计数参考区域与低样本计数图像的对应部分可以结合使用以持续教导机器学习引擎1904如何最有效地执行去噪。在CNN实现中,例如,这可以涉及更新与CNN相关联的权重。
可以实现上文描述的多个变体,诸如将反馈环路配置到机器学习引擎的所采用的方式、生成训练数据的实体、将训练数据反馈给训练引擎所采用的方式以及如何向渲染引擎提供经改进的网络。附加地,尽管上文描述的示例使用单个参考区域执行持续训练,但可以使用任何数量的参考区域。而且,如之前提到的,参考区域可以具有不同大小,可以在不同数量的图像帧上使用,并且可以使用不同技术(例如,随机、根据预定模式等)被定位在图像帧内的不同位置中。
附加地,尽管卷积神经网络(CNN)被描述为机器学习引擎1600的一个示例,但本发明的根本原理可以使用任何形式的机器学习引擎(其能够使用新的训练数据持续改善它的结果)来实现。通过示例且非限制的方式,其它机器实现包括数据处理分组方法(GMDH)、长期短期记忆、深度储备池计算(deep reservoir computing)、深度信念网络、张量深度堆叠网络和深度预测编码网络仅列举几种。
用于高效分布式去噪的装置和方法
如上文描述的,去噪已变成利用平滑、无噪图像的实时光线追踪的关键特征。可跨多个装置上的分布式系统进行渲染,但迄今为止现有的去噪框架全部对单个机器上的单个实例进行操作。如果跨多个装置进行渲染,则它们可能不具有可访问以用于计算图像的去噪部分的所有经渲染的像素。
呈现了与基于人工智能(AI)和非AI的去噪技术一起工作的分布式去噪算法。已经从分布式渲染操作跨节点分布图像的区域,或者从单个帧缓冲器划分和分布图像的区域。在需要时从相邻节点收集计算充分去噪所需要的相邻区域的重影区域,并且最终所得的贴片组合成最终图像。
分布式处理
图20图示了执行渲染的多个节点2021-2023。尽管为了简单起见只图示了三个节点,但本发明的根本原理不限于任何特定数量的节点。实际上,单个节点可以用于实现本发明的某些实施例。
节点2021-2023各自渲染图像的一部分,从而在该示例中产生区域2011-2013。尽管在图20中示出矩形区域2011-2013,但可使用具有任何形状的区域并且任何装置可处理任何数量的区域。节点执行足够平滑的去噪操作所需要的区域被称为重影区域2011-2013。也就是说,重影区域2001-2003表示以指定的质量水平执行去噪所要求的全部数据。降低质量水平使重影区域的大小减少并且因此使所要求的数据量减少,并且提升质量水平使重影区域和所要求的对应数据增加。
如果诸如节点2021的节点确实具有以指定质量水平使它的区域2011去噪所要求的重影区域2001的一部分的本地副本,则节点将从一个或多个“邻近”节点检索所要求的数据,该一个或多个邻近节点诸如节点2022,其拥有如图示的重影区域2001的一部分。相似地,如果节点2022确实具有以指定质量水平使它的区域2012去噪所要求的重影区域2002的一部分的本地副本,则节点2022将从节点2021检索所要求的重影区域数据2032。检索可以通过总线、互连、高速存储器组构、网络(例如,高速以太网)执行,或可以甚至是能够在多个节点当中分配渲染工作的多核芯片中的片上互连(例如,用于以极端分辨率或时间变化来渲染大的图像)。每个节点2021-2023可包括图形处理器内的单独执行单元或执行单元的指定集合。
要发送的特定数据量取决于在使用的去噪技术。而且,来自重影区域的数据可以包括改进每个相应区域的去噪所需要的任何数据。例如,重影区域数据可包括图像颜色/波长、强度/阿尔法数据和/或法线。然而,本发明的根本原理不限于重影区域数据的任何特定集合。
附加细节
对于较慢网络或互连,可使用现有的通用无损或有损压缩来利用该数据的压缩。示例包括但不限于zlib、gzip和Lempel-Ziv-Markov链算法(LZMA)。通过注意到帧之间的光线命中信息中的增量(delta)可能非常稀疏,可以使用进一步的内容特定压缩,并且在节点已经具有从先前帧收集的增量时只需要发送对该增量有贡献的样本。这些可被选择性地推送到收集那些样本的节点i,或节点i可请求来自其它节点的样本。无损压缩用于某些类型的数据和程序代码,而有损数据用于其它类型的数据。
图21图示了节点2021-2022之间的交互的附加细节。每个节点2021-2022包括用于渲染相应的图像区域2011-2012和重影区域2001-2002的光线追踪渲染电路2081-2082。去噪器2100-2111分别对区域2011-2012执行去噪操作,该每个节点2021-2022负责渲染和去噪。去噪器2021-2022例如可以包括电路、软件或其任何组合,以分别生成去噪区域2121-2122。如提到的,在生成去噪区域时,去噪器2021-2022可需要依靠由不同节点拥有的重影区域内的数据(例如,去噪器2100可需要来自由节点2022拥有的重影区域2002的数据)。
从而,去噪器2100-2111可分别使用来自区域2011-2012和重影区域2001-2002的数据生成去噪区域2121-2122,该数据的至少一部分可以从另一个节点接收。区域数据管理器2101-2102可管理来自重影区域2001-2002的数据传输,如本文描述那样。压缩器/解压器单元2131-2132可分别执行在节点2021-2022之间交换的重影区域数据的压缩和解压。
例如,节点2021的区域数据管理器2101可以在从节点2022请求时将来自重影区域2001的数据发送到压缩器/解压器2131,该压缩器/解压器2131压缩数据来生成它传送到节点2022的经压缩的数据2106,由此减少互连、网络、总线或其它数据通信链路上的带宽。节点2022的压缩器/解压器2132然后对经压缩的数据2106解压并且去噪器2111使用经解压的重影数据来生成比仅利用来自区域2012的数据将可能的质量更高的去噪区域2012。区域数据管理器2102可以将经解压的来自重影区域2001的数据存储在高速缓存、存储器、寄存器堆或其它存储设备中以使得它在生成去噪区域2122时对去噪器2111可用。可以执行操作的类似集合来将来自重影区域2002的数据提供给节点2021上的去噪器2100,该去噪器2100使用该数据结合来自区域2011的数据以生成更高质量的去噪区域2121。
抓取数据或渲染
如果诸如节点2021-2022之类的装置之间的连接是慢的(即,低于阈值时延和/或阈值带宽),则可能更快的是在本地渲染重影区域而不是请求来自其它装置的结果。这可在运行时间通过追踪网络事务速度并且针对重影区域大小而线性外推的渲染次数来确定。在渲染出整个重影区域更快的此类情况下,多个装置可以最终以渲染图像的相同部分。重影区域的经渲染部分的分辨率可以基于基本区域的方差和所确定的模糊程度来调整。
负载平衡
静态和/或动态负载平衡方案可以用于在各种节点2021-2023当中分布处理负载。对于动态负载平衡,由去噪滤波器确定的方差可能在去噪中要求更多时间,但驱动用来渲染场景的特定区域的样本量,其中图像的低方差和模糊区域要求较少样本。指派给特定节点的特定区域可以基于来自先前帧的数据而被动态调整或者在装置正在渲染时跨装置被动态传递,使得所有装置将具有相同量的工作。
图22图示在每个相应节点2021-2022上运行的监视器2201-2202如何收集性能度量数据,该性能度量数据包括但不限于通过网络接口2211-2212传送数据消耗的时间、在使区域(具有和没有重影区域数据)去噪时消耗的时间以及渲染每个区域/重影区域消耗的时间。监视器2201-2202将这些性能度量报告回管理器或负载平衡器节点2201,该管理器或负载平衡器节点2201分析数据来标识每个节点2021-2022上的当前工作负载并且潜在地确定处理各种去噪区域2121-2122的更高效模式。管理器节点2201然后根据所检测的负载将对于新区域的新工作负载分配到节点2021-2022。例如,管理器节点2201可以向负载不重的那些节点传送更多工作和/或从过载的那些节点重新分配工作。附加地,负载平衡器节点2201可以传送重配置命令来调整由节点中的每个节点执行渲染和/或去噪所采用的特定方式(其一些示例在上文被描述)。
确定重影区域
可基于由去噪器2100-2111实现的去噪算法来确定重影区域2001-2002的大小和形状。它们的相应大小然后可基于正在被去噪的样本的所检测的方差而被动态修改。用于AI去噪的学习算法本身可以用于确定合适的区域大小,或在诸如双向模糊之类的其它情况下,预定滤波器宽度将确定重影区域2001-2002的大小。在使用学习算法的示例性实现中,机器学习引擎可以在管理器节点2201上执行和/或机器学习的部分可以在各个节点2021-2023中的每个节点上执行(参见例如图18A-B和上文的相关联文本)。
收集最终图像
可通过从节点2021-2023中的每个节点收集经渲染和去噪的区域来生成最终图像而无需重影区域或法线。在图22中,例如,将去噪区域2121-2122传送到管理器节点2201的区域处理器2280,其将区域组合来生成最终去噪图像2290,该最终去噪图像2290然后在显示器2290上显示。区域处理器2280可以使用各种2D合成技术来将区域组合。虽然被图示为单独的组件,但区域处理器2280和去噪图像2290可以与显示器2290一体化。各种节点2021-2022可以使用直接发送技术来传送去噪区域2121-2122并且潜在地使用区域数据的各种有损或无损压缩。
AI去噪仍然是高成本操作并且随着游戏移进云中。这样,可以变得要求将去噪的处理跨多个节点2021-2022分布以便为要求较高帧率的传统游戏或虚拟现实(VR)实现实时帧率。电影工作室经常还在可被利用于较快去噪的大型渲染场中渲染。
在图23中图示用于执行分布式渲染和去噪的示例性方法。可以在上文描述的系统架构的上下文内实现该方法,但不限于任何特定系统架构。
在2301,向执行光线追踪操作来渲染图像帧的区域的多个节点分派图形工作。每个节点可已经在存储器中具有执行操作所要求的数据。例如,节点中的两个或多于两个节点可以共享公共存储器或节点的本地存储器可已经存储了来自之前光线追踪操作的数据。备选地,或附加地,某些数据可以被传送到每个节点。
在2302,确定指定去噪水平(即,在可接受的性能水平)所要求的“重影区域”。重影区域包括执行指定去噪水平所要求的任何数据,包括由一个或多个其它节点拥有的数据。
在2303,在节点之间交换与重影区域(或其部分)有关的数据。在2304,每个节点对它的相应区域执行去噪(例如,使用经交换的数据)并且在2305组合结果来生成最终去噪图像帧。
诸如图22中示出的管理器节点或主节点可向节点分派工作并且然后将由节点执行的工作组合来生成最终图像帧。可以使用基于对等的架构,其中节点是交换数据来渲染最终图像帧并且将最终图像帧去噪的对等。
本文描述的节点(例如,节点2021-2023)可以是经由高速网络互连的图形处理计算系统。替换地,节点可以是耦合至高速存储器组构的各个处理元件。全部节点可以共享公共虚拟存储器空间和/或公共物理存储器。备选地,节点可以是CPU和GPU的组合。例如,上文描述的管理器节点2201可以是CPU和/或在CPU上执行的软件并且节点2021-2022可以是GPU和/或在GPU上执行的软件。可以使用各种不同类型的节点,同时仍然遵从本发明的根本原理。
示例神经网络实现
存在许多类型的神经网络;简单类型的神经网络是前馈网络。前馈网络可以实现为其中节点按层布置的非循环图。通常,前馈网络拓扑包括被至少一个隐含层分开的输入层和输出层。隐含层将由输入层接收的输入变换为对在输出层中生成输出有用的表示。网络节点经由到邻近层中的节点的边缘而完全连接,但在每个层内的节点之间没有边缘。在前馈网络的输入层的节点处接收的数据经由激活函数被传播(即,“前馈”)到输出层的节点,该激活函数基于分别与连接层的边缘中的每个边缘相关联的系数(“权重”)来计算网络中每个连续层的节点的状态。根据在执行的算法所表示的特定模型,来自神经网络算法的输出可采取各种形式。
在机器学习算法可用于对特定问题建模之前,使用训练数据集来训练算法。训练神经网络涉及选择网络拓扑、使用代表正被网络建模的问题的一组训练数据以及调整权重直到网络模型对训练数据集的所有实例以最小误差执行。例如,在对神经网络的监督学习训练过程期间,由网络响应于代表训练数据集中的实例的输入而产生的输出与该实例的“正确的”经标记输出比较,计算代表输出与经标记输出之间的差异的误差信号,并且调整与连接相关联的权重以在误差信号通过网络的层向后传播时使该误差最小化。在从训练数据集的实例生成的输出中的每个输出的误差被最小化时,网络被认为“经过训练”。
机器学习算法的精确性可明显受到用于训练算法的数据集的质量影响。训练过程可以是计算密集的并且在常规的通用处理器上可能要求大量时间。因此,并行处理硬件用于训练许多类型的机器学习算法。这对于优化神经网络的训练特别有用,因为在调整神经网络中的系数中执行的计算自然地适用于并行实现。特别地,许多机器学习算法和软件应用已经适于在通用图形处理装置内利用并行处理硬件。
图24是机器学习软件栈2400的通用图。机器学习应用2402可配置成使用训练数据集来训练神经网络或使用经过训练的深度神经网络来实现机器智能。机器学习应用2402可包括能够用于在部署之前训练神经网络的专用软件和/或神经网络的训练和推理功能性。机器学习应用2402可实现任何类型的机器智能,包括但不限于图像识别、地图绘制和定位、自主导航、语音合成、医学成像或语言翻译。
可经由机器学习框架2404而实现对于机器学习应用2402的硬件加速。机器学习框架2404可以在本文中描述的硬件上实现,所述硬件例如是包括本文中描述的处理器和组件的处理系统100。针对图24所描述的、具有与本文中任何其它图的元件相同或相似的名称的元件描述了与其它图中相同的元件,可以以类似于其它图中相同的元件的方式操作或起作用,可以包括相同的组件,并且可以被链接到其它实体(如本文中其它地方所描述的那些,但不限于此)。机器学习框架2404可以提供机器学习原语(machine learning primitive)的库。机器学习原语是机器学习算法通常执行的基本操作。在没有机器学习框架2404的情况下,将要求机器学习算法的开发人员创建和优化与机器学习算法相关联的主要计算逻辑,然后在开发新的并行处理器时重新优化计算逻辑。代替地,机器学习应用可配置成使用机器学习框架2404提供的原语来执行必要的计算。示例性原语包括张量卷积、激活函数和池化,它们是在训练卷积神经网络(CNN)时执行的计算操作。机器学习框架2404还可提供用来实现由许多机器学习算法执行的基本线性代数子程序(诸如矩阵和向量运算)的原语。
机器学习框架2404可处理从机器学习应用2402接收的输入数据并且生成到计算框架2406的合适输入。计算框架2406可抽象提供给GPGPU驱动器2408的底层指令以使机器学习框架2404能够经由GPGPU硬件2410利用硬件加速而不要求机器学习框架2404具有对GPGPU硬件2410的架构的深入了解。附加地,计算框架2406可跨各种类型和世代的GPGPU硬件2410对机器学习框架2404实现硬件加速。
GPGPU机器学习加速
图25图示了多GPU计算系统2500,其可以是处理系统100的变体。因此,本文中结合处理系统100的任何特征的公开也公开了与多GPU计算系统2500的对应结合,但不限于此。具有与本文中任何其它图的元件相同或相似的名称的图25的元件描述了与其它图中相同的元件,可以以类似于其它图中相同的元件的方式操作或起作用,可以包括相同的组件,并且可以被链接到其它实体(如本文中其它地方所描述的那些,但不限于此)。多GPU计算系统2500可包括处理器2502,其经由主机接口切换装置2504而耦合至多个GPGPU 2506A-D。主机接口切换装置2504可以例如是PCI express切换装置,其将处理器2502耦合至PCI express总线,处理器2502可通过该PCI express总线与该组GPGPU 2506A-D通信。多个GPGPU2506A-D中的每个GPGPU可以是上文描述的GPGPU的实例。GPGPU 2506A-D可以经由一组高速点到点GPU到GPU链路2516而互连。高速GPU到GPU链路可经由专用GPU链路连接到GPGPU2506A-D中的每个GPGPU。P2P GPU链路2516使得能够在GPGPU 2506A-D中的每个GPGPU之间实现直接通信而不要求通过处理器2502所连接到的主机接口总线通信。利用指向P2P GPU链路的GPU到GPU业务,主机接口总线保持可用于系统存储器访问或例如经由一个或多个网络装置与多GPU计算系统2500的其它实例通信。代替将GPGPU 2506A-D经由主机接口切换装置2504连接到处理器2502,处理器2502可包括对P2P GPU链路2516的直接支持并且因此直接连接到GPGPU 2506A-D。
机器学习神经网络实现
本文描述的计算架构可配置成执行特别适合于训练和部署神经网络以用于机器学习的类型的并行处理。神经网络可概括为具有图表关系的功能的网络。如本领域中公知的,存在在机器学习中使用的各种类型的神经网络实现。一个示例性类型的神经网络是前馈网络,如之前描述的。
第二个示例性类型的神经网络是卷积神经网络(CNN)。CNN是用于处理具有已知的网格状拓扑的数据(诸如图像数据)的专门的前馈神经网络。因此,CNN通常用于计算视觉和图像识别应用,但它们也可用于其它类型的模式识别,诸如语音和语言处理。CNN输入层中的节点被组织为一组“过滤器(filter)”(受在视网膜中发现的接受域启发的特征检测器),并且每组过滤器的输出被传播到网络的连续层中的节点。CNN的计算包括对每个过滤器应用卷积数学运算来产生该过滤器的输出。卷积是由两个函数执行来产生第三函数的专门类型的数学运算,该第三函数是该两个原始函数中的一个的修改版本。在卷积网络术语中,到卷积的第一函数可称为输入,而第二函数可称为卷积内核。输出可称为特征图。例如,到卷积层的输入可以是定义输入图像的各种颜色分量的数据的多维阵列。卷积内核可以是参数的多维阵列,其中这些参数通过对于神经网络的训练过程而被适配。
循环神经网络(RNN)是一系列前馈神经网络,其包括层之间的反馈连接。RNN通过跨神经网络的不同部分共享参数数据而实现对顺序数据的建模。RNN的架构包括循环。循环代表变量的当前值在未来时间对它自身的值的影响,因为来自RNN的输出数据的至少一部分被用作反馈以用于处理序列中的后续输入。由于其中能够组成语言数据的可变性质,该特征使得RNN 对于语言处理特别有用。
下文描述的图呈现示例性前馈、CNN和RNN网络,以及描述用于分别训练和部署那些类型的网络中的每种网络的一般过程。将理解这些描述是示例性且非限制性的并且所说明的概念一般大体上可适用于深度神经网络和机器学习技术。
上文描述的示例性神经网络可用于执行深度学习。深度学习是使用深度神经网络的机器学习。在深度学习中使用的深度神经网络是由多个隐含层组成的人工神经网络,这与只包括单个隐含层的浅层神经网络相反。更深的神经网络通常训练更计算密集。然而,网络的附加隐含层实现多步模式识别,其相对于浅层机器学习技术导致减少的输出误差。
在深度学习中使用的深度神经网络通常包括用于执行特征识别的前端网络,其耦合至后端网络,该后端网络代表可基于提供给模型的特征表示来执行操作(例如,对象分类、语音识别等)的数学模型。深度学习使机器学习能够被执行而不要求对模型执行手工特征工程。代替地,深度神经网络可基于输入数据内的统计结构或相关性来学习特征。学得的特征可提供给数学模型,其可将所检测的特征映射到输出。网络所使用的数学模型一般专门针对要执行的特定任务,并且不同的模型将用于执行不同任务。
一旦神经网络被构造,学习模型就可应用于网络来训练网络以执行特定任务。学习模型描述了如何调整模型内的权重来减少网络的输出误差。误差的后向传播是用于训练神经网络的常见方法。向网络呈现输入向量以用于处理。使用损失函数将网络的输出与期望输出比较并且对输出层中的神经元中的每个神经元计算误差值。这些误差值然后被向后传播直到每个神经元具有相关联的误差值,其大致表示它对原始输出的贡献。网络然后可使用算法(诸如随机梯度下降算法)从那些误差中学习,以更新神经网络的权重。
图26-27图示了示例性卷积神经网络。图26图示了CNN内的各种层。如在图26中示出的,用于对图像处理建模的示例性CNN可接收输入2602,其描述输入图像的红、绿和蓝(RGB)分量。输入2602可被多个卷积层(例如,卷积层2604、卷积层2606)处理。来自多个卷积层的输出可以可选地被一组完全连接层2608处理。完全连接层中的神经元具有到之前的层中的所有激活的完全连接,如之前对于前馈网络描述的那样。来自完全连接层2608的输出可用于从网络生成输出结果。完全连接层2608内的激活可使用矩阵乘法而不是卷积来计算。不是所有的CNN实现都利用完全连接层。例如,在一些实现中,卷积层2606可为CNN生成输出。
卷积层是稀疏连接的,这与在完全连接层2608中发现的传统神经网络配置不同。传统神经网络层是完全连接的,使得每个输出单元与每个输入单元交互。然而,因为域的卷积的输出(而不是域中的节点中的每个节点的相应状态值)被输入到后续层的节点,所以卷积层是稀疏连接的,如所图示的。与卷积层相关联的内核执行卷积运算,其输出被发送给下一个层。在卷积层内执行的维度降低是使CNN能够缩放成处理大的图像的一个方面。
图27图示了CNN的卷积层内的示例性计算级。CNN的到卷积层的输入2712可在卷积层2714的三个级中被处理。这三个级可包括卷积级2716、检测器级2718和池化级2720。卷积层2714然后可向连续卷积层输出数据。网络的最后的卷积层可生成输出特征图数据或向完全连接层提供输入,例如以生成对于到CNN的输入的分类值。
在卷积级2716中与产生一组线性激活并行地执行若干卷积。卷积级2716可包括仿射变换,其是可指定为线性变换加平移(translation)的任何变换。仿射变换包括旋转、平移、缩放和这些变换的组合。卷积级计算连接到输入中的特定区域的函数(例如,神经元)的输出,该特定区域可被确定为与神经元相关联的局部区域。神经元计算神经元的权重与神经元所连接到的局部输入中的区域之间的点积。来自卷积级2716的输出定义被卷积层2714的连续级处理的一组线性激活。
线性激活可被检测器级2718处理。在检测器级2718中,每个线性激活被非线性激活函数处理。该非线性激活函数使整体网络的非线性性质增加而不影响卷积层的相应域。可使用若干类型的非线性激活。一个特定类型是修正线性单元(rectified linear unit)(ReLU),其使用定义为f(x)=max(0,x)的激活函数,使得激活阈值在零处。
池化级2720使用池化函数,其用附近输出的汇总统计来代替卷积层2706的输出。池化函数可用于将平移不变性引入神经网络中,使得对输入的小的平移不改变池化输出。局部平移的不变性在其中输入数据中特征的存在比特征的精确位置更重要的情景中可以是有用的。在池化级2720期间可使用各种类型的池化函数,包括最大池化、平均池化和l2范数池化。附加地,一些CNN实现不包括池化级。代替地,这样的实现以相对于之前的卷积级具有增加步长(stride)的附加卷积级替代。
来自卷积层2714的输出然后可被下一层2722处理。下一层2722可以是附加卷积层或完全连接层2708中的一个完全连接层。例如,图27的第一卷积层2704可向第二卷积层2706输出,而第二卷积层可向完全连接层2808的第一层输出。
图28图示了示例性循环神经网络2800。在循环神经网络(RNN)中,网络的先前状态影响网络的当前状态的输出。RNN可使用各种函数采用各种方式来构建。RNN的使用一般围绕着使用数学模型以基于输入的先验序列来预测未来。例如,RNN可用于执行统计语言建模来在给定词的先前序列的情况下预测即将出现的词。所图示的RNN 2800可被描述为具有接收输入向量的输入层2802、实现循环功能的隐含层2804、用来实现先前状态的“记忆”的反馈机制2805和用来输出结果的输出层2806。RNN 2800基于时间步骤来进行操作。RNN在给定时间步骤的状态基于之前的时间步骤经由反馈机构2805而受影响。对于给定时间步骤,隐含层2804的状态由先前状态和当前时间步骤的输入定义。在第一时间步骤的初始输入(x1)可由隐含层2804处理。第二输入(x2)可由隐含层2804使用在初始输入(x1)的处理期间所确定的状态信息来处理。给定状态可计算为s_t=f(Ux_t+ Ws_(t-1)),其中U和W是参数矩阵。函数f一般是非线性的,诸如双曲正切函数(Tanh)或修正函数f(x)=max(0,x)的变体。然而,在隐含层2804中使用的特定数学函数可根据RNN 2800的特定实现细节而变化。
除所描述的基本CNN和RNN网络外,可实现这些网络的变型。一个示例RNN变体是长短期记忆(LSTM)RNN。LSTM RNN能够学习长期依赖性,其对于处理较长语言序列可以是必要的。CNN的变体是卷积深度信念网络,其具有与CNN相似的结构并且采用与深度信念网络相似的方式来训练。深度信念网络(DBN)是生成式神经网络,其由多层的随机性(stochastic)(随机)变量组成。DBN可使用贪婪无监督学习逐层训练。DBN所学得的权重然后可用于通过确定神经网络的权重的最佳初始集合来提供预训练神经网络。
图29图示了深度神经网络的训练和部署。一旦已经为任务构造给定网络,就使用训练数据集2902来训练神经网络。已开发各种训练框架2904来实现训练过程的硬件加速。例如,上文描述的机器学习框架可配置为训练框架。训练框架2904可挂载到未经训练的神经网络2906中并且使该未经训练的神经网能够使用本文描述的并行处理资源而被训练以生成经过训练的神经网2908。
为了开始训练过程,可随机或通过使用深度信念网络的预训练来选择初始权重。然后采用监督或无监督方式执行训练循环。
监督学习是其中训练作为居间操作而被执行的学习方法,诸如当训练数据集2902包括与对输入的期望输出配对的输入时,或在训练数据集包括具有已知输出的输入并且神经网络的输出被人工分级的情况下。网络处理输入并且将所得的输出与一组预期或期望输出相比较。然后将误差通过系统向后传播。训练框架2904可进行调整以调整控制未经训练的神经网络2906的权重。训练框架2904可提供工具用以监测未经训练的神经网络2906在多大程度上向适合基于已知输入数据来生成正确应答的模型收敛。训练过程随着调整网络的权重来改善神经网络生成的输出,反复进行。训练过程可持续直到神经网络达到与经训练的神经网2908相关联的统计上期望的精确度。然后可部署经过训练的神经网络2908来实现任何数量的机器学习操作。
无监督学习是其中网络尝试使用未标记数据来训练其自身的学习方法。因此,对于无监督学习,训练数据集2902将包括输入数据而没有任何相关联的输出数据。未经训练的神经网络2906可学习未标记输入内的分组并且可确定各个输入如何与整体数据集相关。无监督训练可用于生成自组织图,其是能够执行在降低数据的维度方面有用的操作的一类经过训练的神经网络2907。无监督训练还可用于执行异常检测,其允许识别输入数据集中偏离数据的正常模式的数据点。
还可采用监督和无监督训练的变型。半监督学习是其中训练数据集2902包括相同分布的标记和无标记数据的混合的技术。增量式学习是监督学习的变体,其中输入数据被持续用于进一步训练模型。增量式学习使经过训练的神经网络2908能够适应于新的数据2912而不忘记初始训练期间在网络内灌输的知识。
无论是监督还是无监督,尤其针对深度神经网络的训练过程对于单个计算节点来说可能是过于计算密集的。代替使用单个计算节点,计算节点的分布式网络可用于加速训练过程。
图30A是图示分布式学习的示例性框图。分布式学习是使用多个分布式计算节点(诸如上文描述的节点)来执行神经网络的监督或无监督训练的训练模型。分布式计算节点可各自包括一个或多个主机处理器以及通用处理节点中的一个或多个通用处理节点,诸如高度并行通用图形处理单元。如图示的,分布式学习可由模型并行3002、数据并行3004或模型和数据并行的组合执行。
在模型并行3002中,分布式系统中的不同计算节点可对单个网络的不同部分执行训练计算。例如,神经网络的每个层可由分布式系统的不同处理节点训练。模型并行的益处包括缩放到特别大的模型的能力。拆分与神经网络的不同层相关联的计算实现其中所有层的权重将不适合单个计算节点的存储器的非常大的神经网络的训练。在一些实例中,模型并行在执行大的神经网络的无监督训练中可以是特别有用的。
在数据并行3004中,分布式网络的不同节点具有模型的完整实例并且每个节点接收数据的不同部分。来自不同节点的结果然后被组合。尽管数据并行的不同方法是可能的,但数据并行训练方法全部需要将结果组合并且在每个节点之间使模型参数同步的技术。将数据组合的示例性方法包括参数平均和基于更新的数据并行。参数平均在训练数据的子集上训练每个节点并且将全局参数(例如,权重、偏置)设置成来自每个节点的参数的平均值。参数平均使用维护参数数据的中央参数服务器。基于更新的数据并行与参数平均相似,除了对模型的更新被传递,而不是将来自节点的参数传递到参数服务器。另外,可采用去中心化方式执行基于更新的数据并行,其中更新被压缩并且在节点之间传递。
组合模型和数据并行3006可例如在其中每个计算节点包括多个GPU的分布式系统中实现。每个节点可具有模型的完整实例,其中每个节点内的单独GPU用于训练模型的不同部分。
分布式训练相对于在单个机器上的训练具有增加的开销。然而,本文描述的并行处理器和GPGPU可各自实现各种技术以减少分布式训练的开销,所述技术包括用来实现高带宽GPU到GPU数据传递和加速远程数据同步的技术。
示例性机器学习应用
机器学习可应用于解决多种技术问题,其包括但不限于计算机视觉、自主驾驶和导航、语音识别和语言处理。计算机视觉传统上已经是机器学习应用的最活跃研究领域之一。计算机视觉的应用的范围从再现人类视觉能力(诸如识别面部)到创建新类别的视觉能力。例如,计算机视觉应用可配置成识别来自视频中可见的对象中引发的振动的声波。并行处理器加速机器学习使计算机视觉应用能够使用比之前可行的显著更大的训练数据集来训练并且使推理系统能够使用低功率并行处理器来部署。
并行处理器加速机器学习具有自主驾驶应用,其包括车道和道路标志识别、避障、导航和驾驶控制。加速机器学习技术可用于基于定义对特定训练输入的合适响应的数据集来训练驾驶模型。本文描述的并行处理器可实现对用于自主驾驶技术方案的日益复杂的神经网络的快速训练并且实现适合于集成到自主交通工具内的移动平台中的低功率推理处理器的部署。
并行处理器加速深度神经网络已经实现了对于自动语音识别(ASR)的机器学习方法。ASR包括创建函数,该函数在给定输入声音序列的情况下计算最可能的语言序列。使用深度神经网络的加速机器学习已经实现了对之前用于ASR的隐藏马尔可夫模型(HMM)和高斯混合模型(GMM)的替换。
并行处理器加速机器学习还可以用于加速自然语言处理。自动学习过程可利用统计推理算法来产生对错误或不熟悉输入鲁棒的模型。示例性自然语言处理器应用包括人类语言之间的自动机器翻译。
用于机器学习的并行处理平台可以分成训练平台和部署平台。训练平台一般是高度并行的并且包括优化来加速多GPU单节点训练和多节点多GPU训练。适合于训练的示例性并行处理器包括本文描述的高度并行通用图形处理单元和/或多GPU计算系统。相反,部署的机器学习平台一般包括适合于供诸如摄像机、自主机器人和自主交通工具之类的产品中使用的较低功率并行处理器。
图30B图示了适合于使用经过训练的模型来执行推理的示例性推理片上系统(SOC)3100。具有与本文中任何其它图的元件相同或相似的名称的图30B的元件描述了与其它图中相同的元件,可以以类似于其它图中相同的元件的方式操作或起作用,可以包括相同的组件,并且可以被链接到其它实体(如本文中其它地方所描述的那些,但不限于此)。SOC 3100可集成处理组件,其包括媒体处理器3102、视觉处理器3104、GPGPU 3106和多核处理器3108。SOC 3100可以附加地包括片上存储器3105,其可实现由处理组件中的每个处理组件可访问的共享片上数据池。处理组件可针对低功率操作而被优化以实现到各种机器学习平台的部署,所述机器学习平台包括自主交通工具和自主机器人。例如,SOC 3100的一个实现可以用作自主交通工具的主控制系统的一部分。在SOC 3100配置成供在自主交通工具中使用的情况下,SOC被设计且配置成符合部署权限的相关功能安全标准。
在操作期间,媒体处理器3102和视觉处理器3104可以协同工作来加速计算机视觉操作。媒体处理器3102可以实现多个高分辨率(例如,4K、8K)视频流的低时延解码。经解码的视频流可写入到片上存储器3105中的缓冲器。视觉处理器3104然后可以解析经解码的视频并且使用经过训练的图像识别模型在准备处理帧时对经解码的视频的帧执行初步处理操作。例如,视觉处理器3104可加速用于对高分辨率视频数据执行图像识别的CNN的卷积运算,而后端模型计算由GPGPU 3106执行。
多核处理器3108可包括控制逻辑以帮助由媒体处理器3102和视觉处理器3104执行的数据传递和共享存储器操作的定序和同步。多核处理器3108还可起应用处理器的作用以执行可利用GPGPU 3106的推理计算能力的软件应用。例如,导航和驾驶逻辑的至少一部分可在多核处理器3108上执行的软件中实现。这样的软件可以直接向GPGPU 3106发布计算工作负载,或者计算工作负载可发布到多核处理器3108,该多核处理器3108然后可向GPGPU3106卸载那些操作的至少一部分。
GPGPU 3106可包括处理集群,诸如高度并行通用图形处理单元DPLAB00内的处理集群DPLAB06A-DPLAB06H的低功率配置。GPGPU 3106内的V领集群可支持被专门优化以在经过训练的神经网络上执行推理计算的指令。例如,GPGPU 3106可支持用来执行诸如8位和4位整数向量运算之类的低精度计算的指令。
光线追踪架构
在一个实现中,图形处理器包括用于执行实时光线追踪的电路和/或程序代码。在图形处理器中可以包括光线追踪核的专用集合以执行本文描述的各种光线追踪操作,包括光线遍历和/或光线交叉操作。除光线追踪核之外,还可以包括用于执行可编程着色操作的多组图形处理核以及用于对张量数据执行矩阵操作的多组张量核。
图31图示了包括布置成多核群组3100A-N的图形处理资源的专用集合的一个此类图形处理单元(GPU)3105的示例性部分。图形处理单元(GPU)3105可以是本文中公开的以下项的变体:图形处理器300、GPGPU 1340、和/或任何其它图形处理器。因此,图形处理器的任何特征的公开也公开了与CPU 3105的对应结合,但不限于此。此外,具有与本文中任何其它图的元件相同或相似的名称的图31的元件描述了与其它图中相同的元件,可以以类似于其它图中相同的元件的方式操作或起作用,可以包括相同的组件,并且可以被链接到其它实体(如本文中其它地方所描述的那些,但不限于此)。尽管提供了仅单个多核群组3100A的细节,但将领会的是,其它多核群组3100B-N可以被配备有图形处理资源的相同或类似集合。
如所图示的,多核群组3100A可以包括图形核3130的集合、张量核3140的集合和光线追踪核3150的集合。调度器/分派器3110调度和分派图形线程以便在各种核3130、3140、3150上执行。寄存器堆3120的集合存储由核3130、3140、3150在执行图形线程时使用的操作数值。这些寄存器可以包括例如用于存储整数值的整数寄存器、用于存储浮点值的浮点寄存器、用于存储打包数据元素(整数和/或浮点数据元素)的向量寄存器及用于存储张量/矩阵值的贴片寄存器(tile register)。贴片寄存器可以被实现为向量寄存器的组合集合。
一个或多个1级(L1)高速缓存和纹理单元3160在每个多核群组3100A内本地存储图形数据,诸如纹理数据、顶点数据、像素数据、光线数据、包围体数据等。由多核群组3100A-N的全部或其子集共享的2级(L2)高速缓存3180存储用于多个并发图形线程的图形数据和/或指令。如所图示的,L2高速缓存3180可以跨多个多核群组3100A-N被共享。一个或多个存储器控制器3170将GPU 3105耦合到存储器3198,所述存储器3198可以是系统存储器(例如,DRAM)和/或专用图形存储器(例如,GDDR6存储器)。
输入/输出(IO)电路3195将GPU 3105耦合到一个或多个IO装置3195,诸如数字信号处理器(DSP)、网络控制器或用户输入装置。片上互连可以用来将I/O装置3190耦合到GPU3105和存储器3198。IO电路3195的一个或多个IO存储器管理单元(IOMMU)3170将IO装置3190直接耦合到系统存储器3198。IOMMU 3170可以管理页表的多个集合以将虚拟地址映射到系统存储器3198中的物理地址。另外,IO装置3190、(一个或多个)CPU 3199和(一个或多个)GPU 3105可以共享相同虚拟地址空间。
IOMMU 3170还可支持虚拟化。在此情况下,它可以管理页表的第一集合以将客户/图形虚拟地址映射到客户/图形物理地址,并且管理页表的第二集合以将客户/图形物理地址映射到系统/主机物理地址(例如,在系统存储器3198内)。页表的第一和第二集合中的每个集合的基址可以被存储在控制寄存器中并且在上下文切换时被换出(例如,使得为新上下文提供对页表的相关集合的访问)。尽管在图31中未被图示,但核3130、3140、3150和/或多核群组3100A-N中的每个可以包括转换后备缓冲器(TLB)以对客户虚拟到客户物理转换、客户物理到主机物理转换以及客户虚拟到主机物理转换进行高速缓存。
CPU 3199、GPU 3105和IO装置3190可被集成在单个半导体芯片和/或芯片封装上。图示的存储器3198可以被集成在相同芯片上,或者可以经由芯片外接口被耦合到存储器控制器3170。在一个实现中,存储器3198包括GDDR6存储器,所述GDDR6存储器共享与其它物理系统级存储器相同的虚拟地址空间,虽然本发明的根本原理不限于此特定实现。
张量核3140包括特别设计成执行矩阵运算的多个执行单元,所述矩阵运算是用来执行深度学习操作的基本计算操作。例如,同时矩阵乘法运算可以被用于神经网络训练和推理。张量核3140可以使用各种操作数精度来执行矩阵处理,所述各种操作数精度包括单精度浮点(例如,32位)、半精度浮点(例如,16位)、整数字(16位)、字节(8位)和半字节(4位)。神经网络实现还可提取每个经渲染的场景的特征,潜在地组合来自多个帧的细节以构造高质量的最终图像。
在深度学习实现中,可以调度并行矩阵乘法工作以用于在张量核3140上执行。神经网络的训练特别要求大量矩阵点积运算。为处理N x N x N矩阵相乘的内积公式,张量核3140可以包括至少N个点积处理元件。在矩阵相乘开始前,一个完整矩阵被加载到贴片寄存器,并且在N个循环的每个循环,第二矩阵的至少一列被加载。在每个循环,存在被处理的N个点积。
取决于特定实现,可以以不同精度存储矩阵元素,所述不同精度包括16位字、8位字节(例如,INT8)和4位半字节(例如,INT4)。可以为张量核3140指定不同精度模式以确保最高效的精度被用于不同工作负载(例如,诸如能够容许量化到字节和半字节的推理工作负载)。
光线追踪核3150可用于对于实时光线追踪和非实时光线追踪实现二者加速光线追踪操作。特别地,光线追踪核3150可包括光线遍历/交叉电路,所述光线遍历/交叉电路用于使用包围体层级(BVH)来执行光线遍历并且标识封围在BVH体之内的图元与光线之间的交叉。光线追踪核3150还可以包括用于执行深度测试和剔除(例如,使用Z缓冲器或类似布置)的电路。在一个实现中,光线追踪核3150与本文中描述的图像去噪技术协同来执行遍历和交叉操作,其至少一部分可以在张量核3140上执行。例如,张量核3140可实现深度学习神经网络以执行由光线追踪核3150生成的帧的去噪。然而,(一个或多个)CPU 3199、图形核3130和/或光线追踪核3150还可以实现去噪和/或深度学习算法的全部或一部分。
另外,如上所述,可以采用用来去噪的分布式方法,其中GPU 3105在通过网络或高速互连耦合到其它计算装置的计算装置中。另外,互连的计算装置可共享神经网络学习/训练数据来改进整个系统学习对不同类型的图像帧和/或不同的图形应用执行去噪所用的速度。
光线追踪核3150可处理所有BVH遍历和光线-图元交叉,从而使图形核3130免于以每光线的数千个指令而过载。每个光线追踪核3150可包括用于执行包围盒测试(例如,以用于遍历操作)的专用电路的第一集合和用于执行光线-三角形交叉测试(例如,对已遍历的光线进行交叉)的专用电路的第二集合。因此,多核群组3100A能够仅仅启动光线探头,并且光线追踪核3150独立执行光线遍历和交叉并且将命中数据(例如,命中、无命中、多个命中等)返回到线程上下文。在光线追踪核3150执行遍历和交叉操作的同时,其它核3130、3140被释放以执行其它图形或计算工作。
每个光线追踪核3150可包括用来执行BVH测试操作的遍历单元和执行光线-图元交叉测试的交叉单元。交叉单元可然后生成“命中”、“无命中”或“多个命中”响应,并且交叉单元将该响应提供到适当的线程。在遍历和交叉操作期间,其它核(例如,图形核3130和张量核3140)的执行资源可被释放以执行其它形式的图形工作。
还可以使用混合光栅化/光线追踪方法,其中在图形核3130与光线追踪核3150之间分布工作。
光线追踪核3150(和/或其它核3130、3140)可包括对诸如Microsoft的DirectX光线追踪(DXR)之类的光线追踪指令集的硬件支持,所述DXR包括DispatchRays命令以及光线生成、最接近命中、任意命中和未命中着色器,这些使得能够对每个对象指派纹理和着色器的独特集合。可以由光线追踪核3150、图形核3130和张量核3140支持的另一光线追踪平台是Vulkan 1.1.85。然而,注意本发明的根本原理不限于任何特定光线追踪ISA。
一般而言,各种核3150、3140、3130可以支持光线追踪指令集,所述光线追踪指令集包括用于光线生成、最接近命中、任意命中、光线-图元交叉、每图元和层级包围盒构造、未命中、访问及异常的指令/功能。更具体地说,可包括光线追踪指令以执行以下功能:
光线生成 – 可以对每个像素、样本或其它用户定义的工作指派执行光线生成指令。
最接近命中 – 可以执行最接近命中指令来用场景内的图元来定位光线的最接近交叉点。
任意命中 – 任意命中指令标识场景内的图元与光线之间的多个交叉,潜在地标识新的最接近交叉点。
交叉 – 交叉指令执行光线-图元交叉测试并且输出结果。
每图元包围盒构造 – 此指令围绕给定图元或图元的群组构建包围盒(例如,在构建新的BVH或其它加速数据结构时)。
未命中 – 指示光线未命中场景或场景的指定区域内的所有几何形状。
访问 – 指示光线将遍历的子体。
异常 – 包括各种类型的异常处理程序(例如,针对各种错误条件而被调取)。
层级光束追踪
包围体层级通常用于提高对图形图元和其它图形对象执行操作的效率。BVH是层级树结构,其基于一组几何对象而被构建。在树结构的顶部是根节点,其包封给定场景中的所有几何对象。各个几何对象被包裹在形成树的叶节点的包围体中。这些节点然后分组为小的集合并且被包封在较大包围体内。这些进而以递归方式也被分组并且被包封在其它较大包围体内,从而最终产生树结构,其在树的顶部具有由根节点表示的单个包围体。包围体层级用于高效地支持对几何对象的集合的各种操作,诸如冲突检测、图元剔除和在光线追踪中使用的光线遍历/交叉操作。
在光线追踪架构中,通过BVH遍历光线来确定光线-图元交叉。例如,如果光线未经过BVH的根节点,则光线不与BVH所包封的图元中的任何图元交叉并且关于该组图元不要求对光线进一步处理。如果光线经过BVH的第一子代节点而不是第二子代节点,则不需要针对第二子代节点所包封的任何图元测试光线。采用该方式,BVH提供用来对光线-图元交叉进行测试的高效机制。
可以针对BVH来测试称为“光束”的连续光线的群组,而不是各个光线。图32图示了通过四个不同光线描绘轮廓的示例性光束3201。与由四个光线限定的补片3200交叉的任何光线被认为在相同的光束内。尽管图32中的光束3201由光线的矩形布置限定,但可以以各种其它方式限定光束同时仍符合本发明的根本原理(例如,圆、椭圆等)。
图33图示了GPU 3320的光线追踪引擎3310如何实现本文描述的光束追踪技术。特别地,光线生成电路3304生成多个光线,对该多个光线要执行遍历和交叉操作。然而,使用由光束层级构造电路3305生成的光束层级3307来执行遍历和交叉,而不是对各个光线执行遍历和交叉操作。光束层级与包围体层级(BVH)类似。例如,图34提供主光束3400的示例,该主光束3400可以细分成多个不同的分量。特别地,主光束3400可以分成象限3401-3404并且每个象限本身可以分成子象限,诸如象限3404内的子象限A-D。主光束可以采用多种方式细分。例如,主光束可以分成两半(而不是象限)并且每一半可以分成两半,以此类推。不管如何进行细分,采用与BVH相似的方式生成层级结构,例如具有代表主光束3400的根节点、各自由象限3401-3404表示的第一级的子代节点、针对每个子象限A-D的第二级子代节点等等。
一旦构造了光束层级3307,遍历/交叉电路3306就可以使用光束层级3307和BVH3308执行遍历/交叉操作。特别地,它可以针对BVH来测试光束并且剔除未与BVH的任何部分交叉的光束的部分。使用图34中示出的数据,例如,如果与子区域3402和3403相关联的子光束未与BVH或BVH的特定分支交叉,则可以关于BVH或分支来剔除它们。通过执行深度优先搜索或其它搜索算法,可以针对BVH测试余下的部分3401、3404。
在图35中图示了用于光线追踪的方法。该方法可以在上文描述的图形处理架构的上下文内实现,但不限于任何特定架构。
在3500,构造主光束,其包括多个光线,并且在3501,光束被细分并且生成层级数据结构来创建光束层级。操作3500-3501可作为从多个光线构造光束层级的单个集成操作而被执行。在3502,光束层级与BVH一起使用来从BVH剔除节点/图元和/或光线(从光束层级)。在3503,针对余下的光线和图元确定光线-图元交叉。
分布式光线追踪系统中的有损和无损分组压缩
光线追踪操作可以跨通过网络耦合在一起的多个计算节点而分布。图36例如图示光线追踪集群3600,其包括多个光线追踪节点3610-3613,所述多个光线追踪节点3610-3613并行执行光线追踪操作,潜在地将结果在节点之一上组合。在图示的架构中,光线追踪节点3610-3613经由网关通信地耦合至客户端侧光线追踪应用3630。
关于分布式架构的难点之一是必须在光线追踪节点3610-3613中的每个光线追踪节点之间传送的大量分组化(packetized)数据。无损压缩技术和有损压缩技术两者用于减少在光线追踪节点3610-3613之间传送的数据。
为了实现无损压缩,发送允许接收节点重建结果的数据或命令,而不是发送用某些类型的操作的结果填充的分组。例如,随机采样的区域光和环境遮蔽(ambientocclusion)(AO)操作不一定需要方向。因此,传送节点可以仅仅发送随机种子,该随机种子然后被接收节点用于执行随机采样。例如,如果场景跨节点3610-3612分布,以在点p1-p3处对光1进行采样,则只需要向节点3610-3612发送光ID和原点。节点中的每个节点然后可以独立地对光进行随机采样。随机种子可由接收节点生成。相似地,对于初级光线(primaryray)命中点,可在节点3610-3612上计算环境遮蔽(AO)和软阴影采样而不等待连续帧的原点。附加地,如果已知一组光线将去往相同的点光源,则可以向接收节点发送标识该光源的指令,该接收节点将会将该光源应用于该组光线。作为另一示例,如果有N个环境遮蔽光线穿过单个点,则可以发送命令以从该点生成N个样本。
各种附加技术可以应用于有损压缩。例如,可以采用量化因子来将与BVH、图元和光线相关联的所有坐标值量化。另外,用于数据(诸如BVH节点和图元)的32位浮点值可以转换成8位整数值。在示例性实现中,以全精度存储光线分组的边界,但各个光线点P1-P3作为对于边界的索引偏移而被传送。相似地,可以生成多个局部坐标系,其使用8位整数值作为局部坐标。可以使用全精度(例如,32位浮点)值来编码这些局部坐标系中的每个局部坐标系的原点的位置,有效地连接全局和局部坐标系。
下面是无损压缩的示例。在光线追踪程序中内部使用的光线数据格式的示例如下:
代替发送所生成的每个节点的原始数据,该数据可通过将值分组并且通过在可能的情况下使用可适用的元数据来创建隐式光线而被压缩。
对光线数据进行捆绑和分组
可对具有修饰符的掩码或公共数据使用标志。
例如:
原点全部被共享
所有光线数据被打包,除了跨所有光线仅存储单个原点。为RAYPACKET_COMMON_ORIGIN设置RayPacket.flags。在接收RayPacket时对RayPacket进行解包的时候,由单个原点值填充原点。
只在一些光线当中共享原点
所有光线数据被打包,除了共享原点的光线。对于每组唯一共享的原点,打包操作符,其标识操作(共享的原点)、存储原点并且掩蔽哪些光线共享信息。这样的操作可在节点当中对任何共享值进行,所述共享值诸如材料ID、图元ID、原点、方向、法线等。
发送隐式光线
通常,在接收端上利用用于生成光线数据的最小元信息来导出该光线数据。很常见的示例是生成多个次级光线(secondary ray)来对区域随机采样。代替发送器生成次级光线、发送它并且接收器对它进行操作,发送器可发送需要用任何相关信息生成光线的命令,并且光线在接收端上生成。在光线需要首先被发送器生成来确定要将它发送到哪个接收器的情况下,生成光线并且可发送随机种子来重新生成确切相同的光线。
例如,为了对命中点采样,其中64个阴影光线对区域光源采样,全部64个光线与来自相同计算N4的区域交叉。创建具有共同原点和法线的RayPacket。如果有人希望接收器对所得的像素贡献进行着色则可以发送更多数据,但对于该示例则让我们假设我们希望只返回光线是否命中另一节点数据。针对生成阴影光线操作创建RayOperation,并且对该RayOperation指派要被采样的lightID的值和随机数种子。当N4接收光线分组时,它通过对所有光线填充共享原点数据并且基于用随机数种子随机采样的lightID来设置方向,生成完全填充的光线数据,以生成原始发送器生成的相同光线。当返回结果时,只需要返回每个光线的二进制结果,该二进制结果可通过光线上的掩码递交。
在该示例中发送原始的64个光线将已经使用了104个字节 * 64个光线=6656个字节。如果返回光线也采用它们的原始形式来被发送,则这还被加倍到13912个字节。使用无损压缩,其中仅发送共同光线原点和法线、具有种子和ID的光线生成操作,只发送29个字节,其中为交叉掩码返回8个字节。这导致需要通过网络发送~360:1的数据压缩率。这不包括用来处理消息本身的开销,其将需要采用某一方式而被识别,但这取决于实现。可以进行其它操作以用于从初级光线的pixelID重新计算光线原点和方向、基于光线分组中的范围重新计算pixelID,以及用于值的重新计算的其它可能实现。相似的操作可用于所发送的任何单个光线或光线的群组,包括路径追踪中的阴影、反射、折射、环境遮蔽、交叉、体交叉、着色、反弹反射等。
图37图示了执行光线追踪分组的压缩和解压的两个光线追踪节点3710-3711的附加细节。特别地,当第一光线追踪引擎3730准备向第二光线追踪引擎3731传送数据时,光线压缩电路3720执行如本文描述的光线追踪数据的有损和/或无损压缩(例如,将32位值转换成8位值、以用来重建数据的指令来替代原始数据等)。经压缩的光线分组3701通过局域网(例如,10Gb/s、100Gb/s以太网)从网络接口3725传送到网络接口3726。光线解压电路然后在适当的时候对光线分组进行解压。例如,它可以执行命令来重建光线追踪数据(例如,使用随机种子来执行随机采样以用于照明操作)。光线追踪引擎3731然后使用所接收的数据来执行光线追踪操作。
在相反方向上,光线压缩电路3741压缩光线数据,网络接口3726通过网络传送经压缩的光线数据(例如,使用本文描述的技术),光线解压电路3740在必要时解压光线数据并且光线追踪引擎3730在光线追踪操作中使用数据。尽管在图37中图示为单独的单元,光线解压电路3740-3741可分别集成在光线追踪引擎3730-3731内。例如,在经压缩的光线数据包括用来重建光线数据的命令的方面来说,这些命令可以由每个相应的光线追踪引擎3730-3731执行。
如在图38中图示的,光线压缩电路3720可以包括:用于执行本文描述的有损压缩技术(例如,将32位浮点坐标转换成8位整数坐标)的有损压缩电路3801以及用于执行无损压缩技术(例如,传送命令和数据以允许光线解压缩电路3821重建数据)的无损压缩电路3803。光线解压电路3721包括有损解压电路3802以及用于执行无损解压的无损解压电路3804。
在图39中图示了另一示例性方法。该方法可以在本文描述的光线追踪架构或其它架构上实现,但不限于任何特定架构。
在3900,接收光线数据,该光线数据将从第一光线追踪节点被传送到第二光线追踪节点。在3901,有损压缩电路对第一光线追踪数据执行有损压缩,并且在3902,无损压缩电路对第二光线追踪数据执行无损压缩。在3903,经压缩的光线追踪数据被传送到第二光线追踪节点。在3904,有损/无损解压电路执行光线追踪数据的有损/无损解压,并且在3905,第二光线追踪节点使用经解压的数据执行光线追踪操作。
具有硬件加速混合光线追踪的图形处理器
接下来呈现混合渲染流水线,其在图形核上3130执行光栅化并且在光线追踪核3150、图形核3130和/或CPU 3199核上执行光线追踪操作。例如,可以在图形核3130上执行光栅化和深度测试,来代替初级光线投射级。光线追踪核3150然后可以生成针对光线反射、折射和阴影的次级光线。另外,将选择场景的某些区域,其中光线追踪核3150将执行光线追踪操作(例如,基于材料性质阈值,诸如高反射率水平),而将利用在图形核3130上的光栅化来渲染该场景的其它区域。该混合实现可用于实时光线追踪应用——其中时延是关键问题。
下文描述的光线遍历架构可例如使用现有的单指令多数据(SIMD)和/或单指令多线程(SIMT)图形处理器执行光线遍历的可编程着色和控制,同时使用专用硬件加速关键功能,诸如BVH遍历和/或交叉。对于非相干路径的SIMD占有率可以通过在遍历期间和着色之前在特定点重新分组派生的着色器而得到提高。这是使用在芯片上对着色器动态分类的专用硬件而实现的。通过将函数分割成在返回时执行的延续(continuation)并且在在执行之前对延续重新分组以便提高SIMD占有率来管理递归。
通过将遍历功能性分解成可实现为固定功能硬件的内遍历和在GPU处理器上执行且通过用户定义的遍历着色器来实现可编程控制的外遍历,实现光线遍历/交叉的可编程控制。在硬件与软件之间传输遍历上下文的成本通过在内外遍历之间的转变期间保守地截断内遍历状态而减少。
光线追踪的可编程控制可通过下文的表A中列出的不同着色器类型来表达。针对
每个类型可以有多个着色器。例如每个材料可以具有不同的命中着色器。
着色器类型 功能性 主 启动初级光线 命中 双向反射分布函数(BRDF)采样,启动次级光线 任意命中 计算阿尔法纹理几何形状的透射率 未命中 计算来自光源的辐射 交叉 交叉自定义形状 遍历 实例选择和变换 可调用 通用功能
表A
递归光线追踪可由API函数发起,该API函数命令图形处理器启动一组主着色器或交叉电路,其可对初级光线派生光线-场景交叉。这进而派生其它着色器,诸如遍历、命中着色器或未命中着色器。派生子代着色器的着色器还可从该子代着色器接收返回值。可调用着色器是通用函数,其能够由另一着色器直接派生并且还能够向进行调用的着色器返回值。
图40图示了图形处理架构,该图形处理架构包括着色器执行电路4000和固定功能电路4010。通用执行硬件子系统包括多个单指令多数据(SIMD)和/或单指令多线程(SIMT)核/执行单元(EU)4001(即,每个核可以包括多个执行单元)、一个或多个采样器4002,以及1级(L1)高速缓存4003或其它形式的本地存储器。固定功能硬件子系统4010包括消息单元4004、调度器4007、光线-BVH遍历/交叉电路4005、分类电路4008和本地L1高速缓存4006。
在操作中,主分派器4009向调度器4007分派一组初级光线,该调度器4007向在SIMD/SIMT核/EU 4001上执行的着色器调度工作。SIMD核/EU 4001可以是上文描述的光线追踪核3150和/或图形核3130。主着色器的执行派生要执行(例如,要由一个或多个子代着色器和/或固定功能硬件执行)的附加工作。消息单元4004向根据需要访问空闲堆栈池的调度器4007、分类电路4008或光线-BVH交叉电路4005分布由SIMD核/EU 4001派生的工作。如果附加工作被发送给调度器4007,则它被调度以用于在SIMD/SIMT核/EU 4001上进行处理。在调度之前,分类电路4008可以将光线分类为如本文描述的群组或面元(bin)(例如,将具有相似特性的光线分组)。光线-BVH交叉电路4005使用BVH体执行光线的交叉测试。例如,光线-BVH交叉电路4005可以将光线坐标与BVH的每个级别比较来标识被光线交叉的体。
可使用着色器记录、用户分配的结构(其包括指向入口函数的指针)、供应商特定的元数据和对由SIMD核/EU 4001执行的着色器的全局自变量(global argument)来引用着色器。着色器的每个执行实例与调用堆栈相关联,该调用堆栈可以用于存储在父代着色器与子代着色器之间传递的自变量。调用堆栈还可以存储对在调用返回时执行的延续函数的引用。
图41图示了指派的堆栈4101的示例集合,其包括主着色器堆栈、命中着色器堆栈、遍历着色器堆栈、延续函数堆栈和光线-BVH交叉堆栈(其如描述那样可以由固定功能硬件4010执行)。新的着色器调取可以从空闲堆栈池4102实现新的堆栈。可以在本地L1高速缓存4003、4006中将调用堆栈(例如,指派的堆栈集合所包括的堆栈)高速缓存来减少访问的时延。
可存在有限数量的调用堆栈,其各自具有在存储器的连续区域中分配的固定最大大小的“Sstack”。因此,堆栈的基址可根据堆栈索引(SID)直接计算为基址=SID*Sstack。堆栈ID可由调度器4007在向SIMD核/EU 4001调度工作时分配和解除分配。
主分派器4009可包括图形处理器命令处理器,其响应于来自主机(例如,CPU)的分派命令来分派主着色器。如果调度器4007能够为每个SIMD通道分配堆栈ID,则调度器4007可接收这些分派请求并且在SIMD处理器线程上启动主着色器。可从空闲堆栈池4102分配堆栈ID,该空闲堆栈池4102在分派命令开始时被初始化。
执行着色器可通过向消息传递单元4004发送派生消息来派生子代着色器。该命令包括与着色器相关联的堆栈ID并且还包括指向每个活动SIMD通道的子代着色器记录的指针。父代着色器可对活动通道仅发布该消息一次。在对所有相关通道发送派生消息后,父代着色器可以终止。
在SIMD核/EU 4001上执行的着色器还可使用具有为固定功能硬件保留的着色器记录指针的派生消息来派生固定功能任务,诸如光线-BVH交叉。如提到的,消息传递单元4004向固定功能光线-BVH交叉电路4005发送所派生的光线-BVH交叉工作且直接向分类电路4008发送可调用着色器。分类电路可以通过着色器记录指针对着色器分组来导出具有相似特性的SIMD批次。因此,来自不同父代着色器的堆栈ID可被分类电路4008分组在相同批次中。分类电路4008向调度器4007发送经分组的批次,该调度器4007访问来自图形存储器2511或末级高速缓存(LLC)4020的着色器记录并且在处理器线程上启动着色器。
延续可被视为可调用着色器并且还可以通过着色器记录来被引用。当子代着色器被派生并且向父代着色器返回值时,指向延续着色器的指针可被推送在调用堆栈4101上。当子代着色器返回时,延续着色器记录可然后从调用堆栈4101退栈并且可以派生延续着色器。可选地,所派生的延续可以经过类似于可调用着色器的分类单元并且在处理器线程上得到启动。
如在图42中图示的,分类电路4008通过着色器记录指针4201A、4201B、4201n对所派生的任务进行分组来创建SIMD批次以用于着色。经分类的批次中的堆栈ID或上下文ID可根据不同的分派和不同的输入SIMD通道来被分组。分组电路4210可以使用内容可寻址存储器(CAM)结构4201来执行分类,该内容可寻址存储器结构4201包括多个条目,其中用标签4201来标识每个条目。如提到的,标签4201可以是对应的着色器记录指针4201A、4201B、4201n。CAM结构4201可存储有限数量的标签(例如,32、64、128个等),所述标签各自与对应于着色器记录指针的不完整SIMD批次相关联。
对于传入的派生命令,每个SIMD通道具有对应的堆栈ID(在每个CAM条目中示出为16个上下文ID 0-15)和着色器记录指针4201A-B、…、n(充当标签值)。分组电路4210可将每个通道的着色器记录指针与CAM结构4201中的标签4201相比较来找到匹配批次。如果找到了匹配批次,则可将堆栈ID/上下文ID添加到该批次。否则可创建具有新着色器记录指针标签的新条目,可能用不完整的批次驱逐较旧的条目。
执行着色器可在调用堆栈为空的时候通过向消息单元发送解除分配消息来对调用堆栈解除分配。解除分配消息被中继给调度器,其向空闲池返回堆栈ID/上下文ID以用于活动SIMD通道。
呈现了使用固定功能光线遍历和软件光线遍历的组合的用于光线遍历操作的混合方法。因此,它提供软件遍历的灵活性同时维持固定功能遍历的效率。图43示出可以用于混合遍历的加速结构,该加速结构是具有单个顶层BVH 4300和若干底层BVH 4301和4302的两级树。在右边示出图形元素来指示内遍历路径4303、外遍历路径4304、遍历节点4305、具有三角形的叶节点4306和具有自定义图元的叶节点4307。
在顶层BVH 4300中具有三角形的叶节点4306可引用三角形、针对自定义图元的交叉着色器记录或遍历着色器记录。底层BVH 4301-4302的具有三角形的叶节点4306可仅引用三角形和针对自定义图元的交叉着色器记录。引用的类型在叶节点4306内被编码。内遍历4303指每个BVH 4300-4302内的遍历。内遍历操作包括光线-BVH交叉的计算并且跨BVH结构4300-4302的遍历称为外遍历。可在固定功能硬件中高效实现内遍历操作,而可用可编程着色器以可接受的性能执行外遍历操作。因此,可以使用固定功能电路4010来执行内遍历操作并且可以使用着色器执行电路4000来执行外遍历操作,该着色器电路4000包括SIMD/SIMT核/EU 4001以用于执行可编程着色器。
注意,为了简单起见,SIMD/SIMT核/EU 4001有时在本文简称为“核”、“SIMD核”、“EU”或“SIMD处理器”。相似地,光线-BVH遍历/交叉电路4005有时简称为“遍历单元”、“遍历/交叉单元”或“遍历/交叉电路”。当使用替换术语时,用于表示相应电路/逻辑的特定名称不改变该电路/逻辑执行的根本功能,如本文描述那样。
此外,尽管出于解释目的在图40中图示为单个组件,遍历/交叉电路4005可以包括不同的遍历单元和单独的交叉单元,其中的每个单元可以在如本文描述的电路和/或逻辑中实现。
当在内遍历期间光线与遍历节点交叉时,可以派生遍历着色器。分类电路4008可通过着色器记录指针4201A-B、…、n对这些着色器进行分组来创建SIMD批次,其由调度器4007启动以用于在图形SIMD核/EU 4001上的SIMD执行。遍历着色器可采用若干方式修改遍历,从而实现广泛的应用。例如,遍历着色器可在更粗糙的细节级别(LOD)选择BVH或变换光线以实现刚体变换(rigid body transformation)。遍历着色器然后可以针对所选的BVH派生内遍历。
内遍历通过遍历BVH并且计算光线盒和光线三角形交叉来计算光线-BVH交叉。采用与着色器相同的方式通过向消息传递电路4004发送消息来派生内遍历,该消息传递电路4004将对应的派生消息中继到计算光线-BVH交叉的光线-BVH交叉电路4005。
内遍历的堆栈可被本地存储在固定功能电路4010中(例如,在L1高速缓存4006内)。当光线与对应于遍历着色器或交叉着色器的叶节点交叉时,内遍历可被终止并且内部堆栈截断。被截断的堆栈连同指向光线和BVH的指针在由进行调用的着色器指定的位置处可被写入存储器并且然后可派生对应的遍历着色器或交叉着色器。如果光线在内遍历期间与任何三角形交叉,则对应的命中信息可被提供作为对于这些着色器的输入自变量,如下面的代码中示出那样。这些派生的着色器可被分类电路4008分组来创建SIMD批次以用于执行。
截断内遍历堆栈减少将内遍历堆栈溢出到存储器的成本。可以应用在Restart Trail for Stackless BVH Traversal,High Performance Graphics(2010)第107–111页中描述的方法来将堆栈截断成在堆栈的顶部的少量条目,42位重启跟踪(restart trail)和6位深度值。重启跟踪指示已在BVH内部采取的分支并且深度值指示对应于最后一个堆栈条目的遍历深度。这对于在之后的时间恢复内遍历是足够的信息。
当内部堆栈为空并且没有更多BVH节点来测试时完成内遍历。在该情况下,派生外部堆栈处理程序,其将外部堆栈的顶部退栈并且如果外部堆栈不为空则恢复遍历。
外遍历可执行主遍历状态机并且可在由着色器执行电路4000执行的程序代码中实现。它可在下列条件下派生内遍历查询:(1)当由命中着色器或主着色器派生新的光线时;(2)当遍历着色器选择BVH以用于遍历时;以及(3)当外部堆栈处理程序恢复BVH的内遍历时。
如在图44中图示的,在派生内遍历之前,在调用堆栈4405上为固定功能电路4010分配空间来存储被截断的内部堆栈4410。到调用堆栈和内部堆栈顶部的偏移4403-4404被维持在遍历状态4400中,该遍历状态4400也被存储在存储器2511中。遍历状态4400还包括世界空间4401和对象空间4402中的光线以及最接近交叉图元的命中信息。
遍历着色器、交叉着色器和外部堆栈处理程序全部由光线-BVH交叉电路4005派生。遍历着色器在对第二级BVH发起新的内遍历之前在调用堆栈4405上分配。外部堆栈处理程序是负责更新命中信息并且恢复任何未决内遍历任务的着色器。外部堆栈处理程序还负责在遍历完成时派生命中或未命中着色器。遍历在没有未决内遍历查询要派生时完成。当遍历完成并且找到交叉时,派生命中着色器;否则派生未命中着色器。
尽管上文描述的混合遍历方案使用两级BVH层级,但也可以实现在外遍历实现中具有对应改变的任意数量的BVH级别。
另外,尽管上面描述了固定功能电路4010以用于执行光线-BVH交叉,但在固定功能电路中还可以实现其它系统组件。例如,上面描述的外部堆栈处理程序可以是内部(不是用户可见的)着色器,其可以潜在地在固定功能BVH遍历/交叉电路4005中实现。该实现可以用于减少固定功能交叉硬件4005与处理器之间的往返以及所分派的着色器级的数量。
本文描述的示例使得能够使用可在现有和未来GPU处理器上以更大SIMD效率执行的用户定义的功能来实现可编程着色和光线遍历控制。光线遍历的可编程控制实现若干重要特征,诸如过程实例化(procedural instancing)、随机的细节级别选择、自定义图元交叉和惰性BVH更新(lazy BVH update)。
还提供了支持命中着色器和交叉着色器的推测性执行的可编程多指令多数据(MIMD)光线追踪架构。特别地,架构集中于减少在上面关于图40描述的可编程SIMD/SIMT核/执行单元4001与混合光线追踪架构中的固定功能MIMD遍历/交叉单元4005之间的调度和通信开销。在下文中描述命中着色器和交叉着色器的多个推测性执行方案,能够从遍历硬件以单批的方式分派所述命中着色器和交叉着色器,避免若干遍历和着色往返。可以使用用来实现这些技术的专用电路。
本发明的实施例在根据光线遍历查询期望执行多个命中着色器或交叉着色器(当在没有专用硬件支持的情况下实现时,这将带来显著的开销)的用例中特别有益。这些包括但不限于最近k-命中查询(针对k个最接近交叉而启动命中着色器)和多个可编程交叉着色器。
在此描述的技术可以实现为对在图40中图示(并且关于图40-44描述)的架构的扩展。特别地,本发明的本实施例构建在具有增强的该架构上以改进上文中所提到的用例的性能。
混合光线追踪遍历架构的性能限制是从执行单元启动遍历查询的开销和从光线追踪硬件调取可编程着色器的开销。当在相同光线的遍历期间调取多个命中着色器或交叉着色器时,该开销生成可编程核4001与遍历/交叉单元4005之间的“执行往返”。这还对需要从各个着色器调取提取SIMD/SIMT相干性的分类单元4008施加额外的压力。
光线追踪的若干方面要求能够可编程控制,其可通过在上面的表A中列出的不同着色器类型(即,主、命中、任意命中、未命中、交叉、遍历以及可调用)而表达。对于每种类型可存在多个着色器。例如,每种材料可具有不同命中着色器。在当前的Microsoft®光线追踪API中定义这些着色器类型中的一些着色器类型。
作为简要回顾,通过API函数发起递归光线追踪,该API函数命令GPU启动能够针对初级光线而派生光线-场景交叉(在硬件和/或软件中实现)的一组主着色器。这又可派生其它着色器(诸如,遍历、命中或未命中着色器)。派生子代着色器的着色器还能够从该着色器接收返回值。可调用着色器是通用函数,其能够由另一着色器直接派生并且还能够向进行调用的着色器返回值。
光线遍历通过在包围体层级(BVH)中对节点进行遍历和交叉来计算光线-场景交叉。最近研究已示出,能够使用更好地适于固定功能硬件的技术(诸如,降低精度算术、BVH压缩、每光线状态机、专用交叉流水线以及定制高速缓存)来提高计算光线-场景交叉的效率超过一个数量级。
图40中所示出的架构包括这样的系统,其中SIMD/SIMT核/执行单元4001的阵列与固定功能光线追踪/交叉单元4005交互,以执行可编程光线追踪。可编程着色器在执行单元/核4001上被映射到SIMD/SIMT线程,其中SIMD/SIMT利用、执行以及数据相干性对于最优性能是关键的。光线查询通常因为各种原因破坏相干性,所述原因诸如:
遍历发散性:BVH遍历的持续时间高度地变化。
在光线之间趋于异步光线处理。
执行发散性:从相同SIMD/SIMT线程的不同通路派生的光线可能导致不同着色器调取。
数据访问发散性:例如,命中不同表面的光线对不同BVH节点和图元进行采样,并且着色器访问不同纹理。各种其它场景可能引起数据访问发散性。
SIMD/SIMT核/执行单元4001可以是本文中所描述的核/执行单元的变体,所述核/执行单元包括(一个或多个)图形核415A-415B、着色器核1355A-N、图形核3130、图形执行单元608、执行单元852A-B或本文描述的任何其它核/执行单元。可以代替(一个或多个)图形核415A-415B、着色器核1355A-N、图形核3130、图形执行单元608、执行单元852A-B或本文描述的任何其它核/执行单元而使用SIMD/SIMT核/执行单元4001。因此,结合(一个或多个)图形核415A-415B、着色器核1355A-N、图形核3130、图形执行单元608、执行单元852A-B或本文描述的任何其它核/执行单元的任何特征的公开也公开了与图40的SIMD/SIMT核/执行单元4001的对应结合,但不限于此。。
固定功能光线追踪/交叉单元4005可以通过单独地并且乱序处理每束光线来克服前两种挑战。然而,这破坏SIMD/SIMT群组。因此分类单元4008负责形成将再次被分派给执行单元的着色器调取的新的相干的SIMD/SIMT群组。
容易看出这样的架构与直接在SIMD/SIMT处理器上的基于纯软件的光线追踪实现相比的益处。然而,存在与SIMD/SIMT核/执行单元4001(有时在本文中被简称为SIMD/SIMT处理器或核/EU)与MIMD遍历/交叉单元4005之间的消息传递相关联的开销。此外,分类单元4008可能没有从非相干着色器调用中提取理想的SIMD/SIMT利用。
可以标识这样的用例,其中着色器调取在遍历期间可以是特别地频繁的。描述了对于混合MIMD光线追踪处理器的增强,其用来显著地减少核/EU 4001与遍历/交叉单元4005之间的通信的开销。这在寻找k-最接近交叉和实现可编程交叉着色器时可以是特别地有益的。然而,注意到,在此描述的技术不限于任何特定处理场景。
在下文中提供核/EU 4001与固定功能遍历/交叉单元4005之间的高水平成本的光线追踪上下文切换的概要。大部分的执行开销由每当在单光线遍历期间着色器调取必要时的这两个上下文切换引起。
发射光线的每个SIMD/SIMT通路生成派生消息到与BVH相关联的遍历/交叉单元4005以进行遍历。数据(光线遍历上下文)经由派生消息和(高速缓存的)存储器而中继到遍历/交叉单元4005。在遍历/交叉单元4005准备好将新硬件线程指派给派生消息时,遍历/交叉单元4005加载遍历状态并且在BVH上执行遍历。还存在需要在BVH上的第一遍历步骤之前执行的设置成本。
图45图示了可编程光线追踪流水线的操作流程。包括遍历4502和交叉4503的着色元素可在固定功能电路中实现,而剩余元素可利用可编程核/执行单元来实现。
初级光线着色器4501将工作发送到通过BVH(或其它加速结构)遍历(一个或多个)当前光线的4502处的遍历电路。在到达叶节点时,遍历电路调用4503处的交叉电路,该交叉电路在标识光线-三角形交叉时调取4504处的任意命中着色器(如所指示的,该命中着色器可以将结果提供回到遍历电路)。
备选地,该遍历可以在到达叶节点和在4507处调取的最接近命中着色器(如果命中被记录)或4506处的未命中着色器(在未命中的情况下)之前终止。
如在4505指示的,如果遍历电路到达定制图元叶节点,则可以调取交叉着色器。定制图元可以是任何非三角形图元(诸如,多边形或多面体(例如,四面体、体素、六面体、楔形、角锥体或其它“非结构化”体积))。交叉着色器4505将光线与定制图元之间的任何交叉标识给实现任意命中处理的任意命中着色器4504。
在硬件遍历4502达到可编程阶段时,遍历/交叉单元4505可对相关着色器4505-4507生成着色器分派消息,所述相关着色器4505-4507与用于执行着色器的(一个或多个)执行单元的单个SIMD通路对应。由于分派按光线的任意顺序发生,并且分派在所调用的程序中是发散的,因而分类单元4008可积累多个分派调用以提取相干的SIMD批次。所更新的遍历状态和可选的着色器自变量可以被遍历/交叉单元4005写入到存储器2511中。
在k-最近交叉问题中,最接近命中着色器4507针对第一k交叉来执行。以常规方式,这将意味着,在找到最接近交叉时结束光线遍历,调取命中着色器,并且从命中着色器派生新光线以寻找下一个最接近交叉(利用光线原点偏移,因此相同交叉将不会再次发生)。容易看出,该实现将针对单个光线将要求k个光线派生。另一实现利用任意命中着色器4504来操作,该任意命中着色器4504针对所有交叉来被调取并且维持最近交叉的全局列表,使用插入分类操作。该方法的主要问题是,不存在任意命中着色器调取的上界。
如所提到的,交叉着色器4505可以在非三角形(定制)图元上被调取。取决于交叉测试和遍历状态(未决节点和图元交叉)的结果,相同光线的遍历可以在交叉着色器4505的执行之后继续。因此,寻找最接近命中可以要求到执行单元的若干往返。
还可将焦点放在通过改变成遍历硬件和着色器调度模型来减少对于交叉着色器4505和命中着色器4504、4507的SIMD-MIMD上下文切换。首先,光线遍历电路4005通过积累多个潜在调取并且以更大的批次分派它们来使着色器调取延迟。另外,证明是不必要的某些调取可以在该阶段被剔除。此外,着色器调度器4007可使来自相同遍历上下文的多个着色器调取聚合成单个SIMD批次,这导致单光线派生消息。在一个示例性实现中,遍历硬件4005暂停遍历线程并且等待多个着色器调取的结果。由于该操作模式允许分派多个着色器,这些着色器中的一些着色器可能在使用顺序调取时不被调用,因而该操作模式在本文中被称为“推测性”着色器执行。
图46A图示其中遍历操作遇到子树中的多个定制图元4650的示例,并且图46B图示这能够如何利用三个交叉分派循环C1-C3来得到解决。特别地,调度器4007可要求三个循环来将工作提交给SIMD处理器4001,并且遍历电路4005要求三个循环来将结果提供给分类单元4008。遍历电路4005所要求的遍历状态4601可被存储于存储器(诸如,本地高速缓存(例如,L1高速缓存和/或L2高速缓存))中。
A. 延迟的光线追踪着色器调取
还可修改管理硬件遍历状态4601的方式以允许多个潜在交叉或命中调取在列表中积累。在遍历期间的给定时间,列表中的每个输入可以用于生成着色器调取。例如,能够在遍历硬件4005上和/或存储器中的遍历状态4601中积累k-最近交叉点,并且如果遍历完成,则能够针对每个元素来调取命中着色器。对于命中着色器,可以针对BVH中的子树来积累多个潜在交叉。
对于最近-k用例,该方法的益处是,代替到SIMD核/EU 4001的k-1个往返和k-1个新光线派生消息,在遍历电路4005上在单个遍历操作期间从相同遍历线程调取所有命中着色器。对于潜在实现的挑战是,保证命中着色器的执行顺序并不是简单的(标准“往返”方法保证最接近交叉的命中着色器首先被执行等)。这可通过命中着色器的同步或排序的放宽来得到解决。
对于交叉着色器用例,遍历电路4005不提前知道给定的着色器是否将返回肯定的交叉测试。然而,有可能推测性地执行多个交叉着色器,并且如果至少一个返回肯定的命中结果,则将它归并到全局最近命中当中。具体实现需要寻找延迟交叉测试的最优数量,以减少分派调用的数量,但避免调用太多冗余的交叉着色器。
B. 聚合来自遍历电路的着色器调取
当在遍历电路4005上从相同光线派生分派多个着色器时,可在光线遍历算法的流程中创建分支。这可能对于交叉着色器是有问题的,因为BVH遍历的剩余部分取决于所有分派的交叉测试的结果。这意味着,同步操作对于等待着色器调取的结果是必要的,这在异步硬件上可能是具有挑战性的。
归并着色器调用的结果的两点可以是:SIMD处理器4001和遍历电路4005。关于SIMD处理器4001,多个着色器能够使用标准编程模型来将它们的结果同步并且聚合。进行该动作的一个相对简单的方式是,使用全局原子并且将存储器中的共享数据结构中的结果聚合,在所述存储器中可以存储多个着色器的交叉结果。然后,最后一个着色器能够解析数据结构并且调用回遍历电路4005以继续遍历。
还可实现将多个着色器调取的执行限于SIMD处理器4001上的相同SIMD线程的通路的更高效的方法。然后,使用SIMD/SIMT减少操作(而不是依赖于全局原子)来在本地减少交叉测试。该实现可能依赖于分类单元4008内的新电路来使小批的着色器调取留在相同SIMD批次中。
还可暂停遍历电路4005上的遍历线程的执行。使用常规执行模型,当着色器在遍历期间被分派时,终止遍历线程,并且光线遍历状态被保存到存储器以允许在执行单元4001处理着色器时执行其它光线派生命令。如果仅仅暂停遍历线程,则遍历状态不需要被存储并且能够单独地等待每个着色器结果。该实现可以包括用来避免死锁并且提供足够的硬件利用的电路。
图47-48图示利用三个着色器4701来在SIMD核/执行单元4001上调取单个着色器调取的延迟模型的示例。所有交叉测试在被保存时在相同SIMD/SIMT群组内被评估。结果,也能够在可编程核/执行单元4001上计算最近交叉。
如所提到的,着色器聚合和/或延迟中的全部或一部分可以由遍历/交叉电路4005和/或核/EU调度器4007执行。图47图示了调度器4007内的着色器延迟/聚合器电路4706可如何延迟与特定SIMD/SIMT线程/通路相关联的着色器的调度,直到所指定的触发事件已发生。在检测到触发事件时,调度器4007将单个SIMD/SIMT批次中的多个聚合的着色器分派到核/EU 4001。
图48图示了遍历/交叉电路4005内的着色器延迟/聚合器电路4805可如何延迟与特定SIMD线程/通路相关联的着色器的调度,直到指定的触发事件已发生。在检测到触发事件时,遍历/交叉电路4005将聚合的着色器提交给单个SIMD/SIMT批次中的分类单元4008。
然而,注意到,着色器延迟及聚合技术可以在各种其它组件(诸如,分类单元4008)内实现或可以跨多个组件来分布。例如,遍历/交叉电路4005可以执行着色器聚合操作的第一集合,并且调度器4007可以执行着色器聚合操作的第二集合,以确保在核/EU 4001上高效地调度SIMD线程的着色器。
引起聚合着色器被分派给核/EU的“触发事件”可以是处理事件,诸如与特定线程相关联的最小时延或特定数量的积累的着色器。备选地或另外,触发事件可以是时间事件,诸如自第一着色器的延迟起的一定持续时间或特定数量的处理器循环。其它变量(诸如,核/EU 4001和遍历/交叉单元4005上的当前工作负载)也可以被调度器4007评估以确定何时分派着色器的SIMD/SIMT批次。
本发明的不同实施例可以基于所使用的特定系统架构和应用的要求而使用上面的方法的不同组合来实现。
光线追踪指令
下述的光线追踪指令被包括在CPU 3199和/或GPU 3105支持的指令集架构(ISA)中。如果由CPU执行,则单指令多数据(SIMD)指令可以利用向量/打包源和目的地寄存器来执行所描述的操作,并且可以由CPU核解码并且执行。如果由GPU 3105执行,则指令可以由图形核3130执行。例如,上述的执行单元(EU)4001中的任何EU可以执行指令。备选地或另外,指令可以由光线追踪核3150和/或张量核3140上的执行电路执行。
图49图示了下述的用于执行光线追踪指令的架构。所图示的架构可以集成于可以被包括在不同处理器架构中的上面描述的核3130、3140、3150中的一个或多个核内(参见例如图31及相关联的文本)。
在操作中,指令获取单元4903从存储器3198获取光线追踪指令4900,并且解码器4995对指令进行解码。在一个实现中,解码器4995对指令进行解码,以生成可执行操作(例如,微编码的核中的微操作或uop)。备选地,可以在没有解码的情况下执行光线追踪指令4900中的一些或全部,并且这样不要求解码器4904。
在任一实现中,调度器/分派器4905跨功能单元(FU)4910-4912的集合对指令(或操作)进行调度和分派。所图示的实现包括:用于执行对存储在向量寄存器4915中的多个打包数据元素同时操作的单指令多数据(SIMD)指令的向量FU 4910,以及用于对存储在一个或多个标量寄存器4916中的标量值操作的标量FU 4911。可选的光线追踪FU 4912可以对存储于向量寄存器4915中的打包数据值和/或存储于标量寄存器4916中的标量值操作。在没有专用FU 4912的实现中,向量FU 4910以及可能的标量FU 4911可以执行下述光线追踪指令。
各种FU 4910-4912访问执行来自向量寄存器4915、标量寄存器4916和/或本地高速缓存子系统4908(例如,L1高速缓存)的光线追踪指令4900所需要的光线追踪数据4902(例如,遍历/交叉数据)。FU 4910-4912还可以经由装载和存储操作来执行对存储器3198的访问,并且高速缓存子系统4908可以独立地操作,以在本地高速缓存数据。
虽然光线追踪指令可以用于提高光线遍历/交叉和BVH构建的性能,但光线追踪指令还可以适用于其它领域,诸如高性能计算(HPC)和通用GPU(GPGPU)实现。
在下面的描述中,术语双字有时缩写为dw,并且,无符号字节缩写为ub。另外,下面所提到的源寄存器和目的地寄存器(例如,src0、src1、dest等)可以指向量寄存器4915,或在一些情况下指向量寄存器4915和标量寄存器4916的组合。通常,如果由指令使用的源值或目的地值包括打包数据元素(例如,其中源或目的地存储N个数据元素),则使用向量寄存器4915。其它值可以使用标量寄存器4916或向量寄存器4915。
去量化
去量化指令的一个示例将之前量化的值“去量化”。例如,在光线追踪实现中,某些BVH子树可以被量化,以降低存储和带宽要求。去量化指令可以采取去量化dest src0 src1src2的形式,其中源寄存器src0存储N个无符号字节,源寄存器src1存储1个无符号字节,源寄存器src2存储1个浮点值,并且目的地寄存器dest存储N个浮点值。全部这些寄存器可以是向量寄存器4915。备选地,src0和dest可以是向量寄存器4915,并且src 1和src2可以是标量寄存器4916。
以下代码序列定义去量化指令的一个特定实现:
在该示例中,ldexp将双精度浮点值与指定的二的整数幂(即,ldexp(x, exp)=x * 2exp)相乘。在上面的代码中,如果与当前SIMD数据元素相关联的执行掩码值(execMask[i])设置成1,则src0中的定位i处的SIMD数据元素转换成浮点值,并且乘以src1中的值的整数幂(2src1 value),并且该值被加到src2中的对应的SIMD数据元素。
选择性最小值或最大值
选择性最小值或最大值指令如位掩码中的位所指示的那样可对每通路而执行最小值或最大值操作(即,返回值的集合的最小值或最大值)。位掩码可以利用向量寄存器4915、标量寄存器4916、或掩码寄存器的单独集合(未示出)。以下代码序列定义最小值/最大值指令的一个特定实现:sel_min_max dest src0 src1 src2,其中src0存储N个双字,src1存储N个双字,src2存储一个双字,并且目的地寄存器存储N个双字。
以下代码序列定义选择性最小值/最大值指令的一个特定实现:
在该示例中,(1 < < i) & src2(a 1 left-shifted by i ANDed with src2)的值用于选择src0和src1中的第i个数据元素的最小值或src0和src1中的第i个数据元素的最大值。该操作仅当与当前SIMD数据元素相关联的执行掩码值(execMask[i])设置成1时针对第i个数据元素执行。
混洗索引指令
混洗索引指令能够将输入通路的任何集合复制到输出通路。对于32的SIMD宽度,该指令能够以较低吞吐量执行。该指令采取如下的形式:shuffle_index dest src0 src1<可选标志>,其中,src0存储N个双字,src1存储N个无符号字节(即,索引值),并且dest存储N个双字。
以下码序列定义混洗索引指令的一个特定实现:
在上面的代码中,src1中的索引标识当前通路。如果执行掩码中的第i个值设置成1,则执行校验,以确保源通路处于0至SIMD宽度的范围内。如果是这样,则标志设置为(srcLaneMod),并且目的地的数据元素i设置为等于src0的数据元素i。如果通路处于范围内(即,是有效的),则来自src1的索引值(srcLane 0)用作到src0中的索引(dst[i]=src0[srcLane])。
立即值混洗Up/Dn/XOR指令
立即值混洗指令可基于指令的立即值来混洗输入数据元素/通路。立即值可以基于立即值的值来指定将输入通路移位1、2、4、8或16个位置。可选地,额外的标量源寄存器能够指定为填充值。在源通路索引无效时,填充值(若提供)存储到目的地中的数据元素位置。如果未提供填充值,则数据元素位置全部设置成零。
标志寄存器可用作源掩码。如果源通路的标志位设置成1,则源通路可被标记为无效,并且该指令可继续进行。
以下是立即值混洗指令的不同实现的示例:
shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <可选src1> <可选标志>
shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <可选src1> <可选标志>
在该实现中,src0存储N个双字,src1为填充值(若存在)存储一个双字,并且dest存储包括结果的N个双字。
以下代码序列定义立即值混洗指令的一个特定实现:
在此,输入数据元素/通路基于立即值的值来移位1、2、4、8或16个位置。寄存器src1是额外的标量源寄存器,其用作在源通路索引无效时存储到目的地中的数据元素位置的填充值。如果未提供填充值,并且源通路索引无效,则目的地中的数据元素位置设置成0。标志寄存器(FLAG)用作源掩码。如上所述的,如果源通路的标志位设置成1,则源通路被标记为无效的,并且该指令继续进行。
间接混洗Up/Dn/XOR指令
间接混洗指令具有控制从源通路到目的地通路的映射的源操作数(src1)。间接混洗指令可采取如下的形式:
shuffle_<up/dn/xor> dest src0 src1 <可选标志>
其中src0存储N个双字,src1存储1个双字,并且dest存储N个双字。
以下代码序列定义立即值混洗指令的一个特定实现:
因而,间接混洗指令以与上述的立即值混洗指令类似的方式操作,但源通路到目的地通路的映射由源寄存器src1而非立即值控制。
跨通路最小值/最大值指令
针对浮点和整数数据类型可支持跨通路最小值/最大值指令。跨通路最小值指令可采取lane_min dest src0的形式,并且跨通路最大值指令可采取lane_max dest src0的形式,其中src0存储 N个双字,并且dest存储1个双字。
例如,以下代码序列定义跨通路最小值的一个特定实现:
在该示例中,源寄存器的数据元素位置i中的双字值与目的地寄存器中的数据元素比较,并且这两个值的最小值被复制到目的地寄存器。跨通路最大指令以基本上相同的方式操作,唯一差异是位置i中的数据元素和目的地值的最大值被选择。
跨通路最小值/最大值索引指令
跨通路最小值索引指令可采取lane_min_index dest src0的形式,并且跨通路最大值索引指令可采取lane_max _index dest src0的形式,其中src0存储N个双字,并且dest存储1个双字。
例如,以下代码序列定义跨通路最小值索引指令的一个特定实现:
在该示例中,目的地索引跨目的地寄存器从0递增至SIMD宽度。如果执行掩码位被设置,则源寄存器中的位置i处的数据元素被复制到暂时存储位置(tmp),并且目的地索引被设置成数据元素位置i。
跨通路排序网络(sorting network)指令
跨通路排序网络指令可按升序(sortnet_min)或按降序(sortnet_max)使用宽度N的(稳定)排序网络来对所有N个输入元素进行排序。指令的最小值/最大值版本可分别采取sortnet_min dest src0和sortnet_maxdest src0的形式。在一个实现中,src0和dest存储N个双字。最小值/最大值排序在src0的N个双字上执行,并且升序的元素(对于最小值)或降序的元素(对于最大值)按其相应排序的顺序存储于dest中。定义指令的码序列的一个示例是:dst=apply_N_wide_sorting_network_min/max(src0)。
跨通路排序网络索引指令
跨通路排序网络索引指令可使用宽度为N的(稳定)排序网络来对所有N个输入元素进行排序,但按升序(sortnet_min)或按降序(sortnet_max)返回序列改变的索引。指令的最小值/最大值版本可采取sortnet_min_index dest src0和sortnet_max_index destsrc0的形式,其中src0和dest各自存储N个双字。定义指令的码序列的一个示例是dst=apply_N_wide_sorting_network_min/max_index(src0)。
用于执行上面的指令中的任何指令的方法在图50中图示。该方法可以在上述的具体处理器架构上实现,但不限于任何特定处理器或系统架构。
在5001,在处理器核上执行主图形线程的指令。这可以包括例如上述的核中的任何核(例如,图形核3130)。当在5002确定在主图形线程内到达光线追踪工作时,光线追踪指令被卸载到光线追踪执行电路,该光线追踪执行电路可以采取诸如上面关于图49描述的功能单元(FU)的形式或可以位于如关于图31描述的专用的光线追踪核3150中。
在5003,光线追踪指令被解码并且从存储器获取,并且在5005,指令被解码成可执行操作(例如在要求解码器的实施例中)。在5004,光线追踪指令被调度并且分派,以便由光线追踪电路执行。在5005,光线追踪指令由光线追踪电路执行。例如,指令可以被分派并且在上述的FU(例如,向量FU 4910、光线追踪FU4912等等)和/或图形核3130或光线追踪核3150上被执行。
在针对光线追踪指令的执行完成时,在5006,结果被存储(例如,被存储回到存储器3198),并且在5007,通知主图形线程。在5008,在主线程的上下文内处理光线追踪结果(例如,从存储器读取并且集成到图形渲染结果中)。
在实施例中,术语“引擎”或“模块”或“逻辑”可以指以下各项、是以下各项的部分或者包括以下各项:执行一个或多个软件或固件程序的专用集成电路(ASIC)、电子电路、处理器(共享、专用或群组)和/或存储器(共享、专用或群组)、组合逻辑电路和/或提供所描述的功能性的其它合适的组件。在实施例中,引擎、模块或逻辑可以在固件、硬件、软件、或者固件、硬件和软件的任何组合中实现。
用于在光线追踪流水线中进行节流的设备和方法
本发明的实施例包括固定功能加速电路和通用处理电路的组合,以执行光线追踪。例如,与包围体层级(BVH)的光线遍历和交叉测试相关的某些操作可以由固定功能加速电路来执行,同时多个执行电路执行各种形式的光线追踪着色器(例如,任何命中着色器、交叉着色器、未命中着色器等)。一个实施例包括双高带宽存储组,该存储组包括用于存储光线的多个条目和用于存储BVH节点的相应双栈。在该实施例中,遍历电路在双光线组和堆栈之间交替,以在每个时钟周期处理光线。此外,一个实施例包括优先级选择电路/逻辑,其区分内部节点、非内部节点和图元,并使用该信息来智能地优先处理BVH节点和由BVH节点界定的图元。
一个特定实施例通过在遍历操作期间使用短堆栈来存储有限数量的BVH节点,减少了遍历所需的高速存储器。该实施例包括堆栈管理电路/逻辑,以有效地将条目推入和弹出短堆栈,以确保所需的BVH节点可用。此外,通过对追踪数据结构执行更新来追踪遍历操作。当遍历电路/逻辑暂停时,它可以查询追踪数据结构,以便在它停止的BVH内的相同位置开始遍历操作。并且执行在数据结构追踪中维持的追踪数据,使得遍历电路/逻辑可以重启。
图51图示一个实施例,其包括用于执行着色器程序代码并处理相关联的光线追踪数据4902(例如,BVH节点数据和光线数据)的着色器执行电路4000、包括用于执行遍历和交叉操作的光线追踪加速电路5110、以及用于存储由RT加速电路5110和着色器执行电路4000所处理的程序代码和相关联数据的存储器3198。
在一个实施例中,着色器执行电路4000包括多个核/执行单元4001,其执行着色器程序代码以执行各种形式的数据并行操作。例如,在一个实施例中,核/执行单元4001可以跨多个通道执行单个指令,其中指令的每个实例对存储在不同通道中的数据进行操作。例如,在SIMT实现中,指令的每个实例与不同线程相关联。在执行期间,L1高速缓存存储某些光线追踪数据(例如最近或频繁访问的数据)以用于高效访问。
可以将一组初级光线分派到调度器4007,其将工作调度到由核/EU 4001执行的着色器。核/EU 4001可为光线追踪核3150、图形核3130、CPU核3199或可执行着色器程序代码的其它类型的电路。一个或多个初级光线着色器5101处理初级光线并且产生要由光线追踪加速电路5110和/或核/EU 4001执行(例如,要由一个或多个子着色器执行)的附加工作。由初级光线着色器5101或其它着色器(其由核/EU 4001执行)派生的新工作可分发给分类电路4008,其将光线分类到如本文所述的群组或箱中(例如,将具有类似特性的光线分组)。调度器4007然后调度核/EU 4001上的新工作。
可被执行的其它着色器包括如上所述的、处理命中结果(例如,分别标识给定光线的任何命中或最接近命中)的任何命中着色器4514和最接近命中着色器4507。未命中着色器4506处理光线未命中(例如,光线不与节点/图元交叉的情况)。如上所述,可以使用着色器记录来引用各种着色器,着色器记录可以包括一个或多个指针、供应商特定的元数据、和全局自变量。在一个实施例中,着色器记录由着色器记录标识符(SRI)来标识。在一个实施例中,着色器的每个执行实例与存储在父着色器和子着色器之间传递的自变量的调用堆栈5203相关联。调用堆栈5121也可存储对在调用返回时执行的延续函数的引用。
光线遍历电路5102将每条光线遍历通过BVH的节点,沿BVH的层级向下(例如,通过父节点、子节点和叶节点)工作以标识被光线遍历的节点/图元。光线-BVH交叉电路5103执行光线的交叉测试、确定图元上的命中点、并且响应于命中而生成结果。遍历电路5102和交叉电路5103可以从一个或多个调用堆栈5121检索工作。在光线追踪加速电路5110内,调用堆栈5121以及相关联的光线追踪数据4902可被存储在本地光线追踪高速缓存(RTC)5107或其它本地存储装置内,以便于由遍历电路5102和交叉电路5103高效访问。下面描述的一个特定实施例包括高带宽光线组(参见例如图52)。
光线追踪加速电路5110可以是本文中描述的各种遍历/交叉电路的变体,其包括光线-BVH遍历/交叉电路4005、遍历电路4502和交叉电路4503、以及光线追踪核3150。光线追踪加速电路5110可以用来代替光线-BVH遍历/交叉电路4005、遍历电路4502和交叉电路4503、以及光线追踪核3150、或用于处理BVH堆栈和/或执行遍历/交叉的任何其它电路/逻辑。因此,结合本文中所述的光线-BVH遍历/交叉电路4005、遍历电路4502和交叉电路4503、以及光线追踪核3150的任何特征的公开也公开了与光线追踪加速电路5110的对应组合,但不限于此。
参考图52,光线遍历电路5102的一个实施例分别包括第一光线存储组5201和第二光线存储组5202,其中每个组包括用于存储从存储器加载的对应多个入射光线5206的多个条目。对应的第一堆栈5203和第二堆栈5204分别包括从存储器读取并本地存储以用于处理的所选BVH节点数据5290-5291。如本文所述,在一个实施例中,堆栈5203-5204是包括用于存储BVH节点数据的有限数量的条目(例如,在一个实施例中6个条目)的“短”堆栈。虽然与光线组5201-5202分开图示,但也可在对应光线组5201-5202内维持堆栈5203-5204。或者,堆栈5203-5204可被存储在单独的本地存储器或高速缓存中。
遍历处理电路5210的一个实施例在选择下一光线和节点以进行处理时在两个组5201-5202和堆栈5203-5204之间交替(例如,以乒乓方式)。例如,遍历处理电路5210可以在每个时钟周期上从备用光线组/堆栈中选择新的光线/BVH节点,从而确保高效操作。然而,应当注意,这种特定布置对于符合本发明的基本原理不是必需的。
在一个实施例中,光线分配器5205基于一组组分配计数器5220的当前相对值来平衡分别进入第一存储器组5201和第二存储器组5202的入射光线5206的条目。在一个实施例中,组分配计数器5220维持对第一和第二存储器组5201-5202中的每个中的未遍历光线的数量的计数。例如,第一组分配计数器可在光线分配器5205将新的光线添加到第一组5201时递增,并在处理来自第一组5201的光线时递减。类似地,第二组分配计数器可在光线分配器5205将新的光线添加到第二组5201时递增,并且在处理来自第二组5201的光线时递减。
在一个实施例中,光线分配器5205将当前光线分配给与较小计数器值相关联的组。如果两个计数器相等,则光线分配器5205可以选择任一组,或者可以选择与上次计数器相等时选择的组不同的组。在一个实施例中,每个光线被存储在组5201-5202之一的一个条目中,并且每个组包括用于存储多达32条光线的32个条目。然而,本发明的基本原理不限于这些细节。
当着色器执行速度快于遍历硬件的光线吞吐量时,大量未完成的光线消息和关联光线可被排队,从而增加工作集的大小并降低缓存命中率。例如,在一些情况下,核/EU4001可以执行初级光线着色器5101,以比遍历/交叉电路5102-5103能够遍历和交叉具有节点/图元的光线更快地生成光线5206。在一个实施例中,核/EU4001将光线存储在L1高速缓存4003中,并传送相应的光线消息(本文中有时称为“光线追踪”消息)以由遍历电路5102处理。光线消息包括指向光线的地址指针以及遍历电路用来读取和处理光线的其他关联数据。如果在光线产生的时间和光线消息被遍历电路5102处理的时间之间存在显著的延迟,则光线可能已经从L1高速缓存4003中被逐出,从而要求访问系统存储器3198或较慢的高速缓存级别。
本发明的实施例实现了以下一种或多种技术来解决这个限制。例如,在一个实施例中,监视在光线消息队列或堆栈内光线消息的累积。如果达到高阈值(例如,80%-90%的条目被填充),则生成反馈消息/信号来节流EU 4001以降低光线生成的频率。可替换地,或者另外,光线队列/堆栈可以作为后进先出(LIFO)队列/堆栈来管理,这意味着每个新光线被添加到堆栈的顶部,然后由RT电路5110进行处理。虽然这增加了将在L1高速缓存中找到要处理的下一条光线的可能性,但它降低了与光线处理相关联的“公平性”,因为光线越老,其将在下一次被处理的可能性就越小。因此,在某些光线到达堆栈顶部进行处理之前,可能会经过相当长的时间。
图53示出了根据本发明一个实施例的存储器支持的堆栈管理逻辑5380,其管理由着色器执行电路4000生成并由光线追踪电路5110消耗的光线消息流。在一个实施例中,存储器支持的堆栈管理电路5380将光线消息存储在存储器支持的堆栈5330中,或者将光线消息溢出到存储器子系统5490中。
在操作中,分派器5305将诸如初级光线着色器5101的工作分派给执行单元4001,执行单元4001响应地执行着色器并生成初级光线。光线最初被存储在EU 4001的L1高速缓存4003中(或存储器子系统5490的任何部分,例如LLC 4020或系统存储器2511)。对应于初级光线的光线消息被发送到仲裁逻辑5312,仲裁逻辑5312实现将光线消息转发到光线压实器5420的仲裁策略(例如,循环、基于优先级等)。当EU 4001执行初级光线着色器时,某些SIMD通道可能空闲或未使用,导致空槽或无效槽。光线压实器5320移除流水线内的空/无效槽,从而尽可能高效地在消息槽内压缩和打包光线消息,并通过光线消息FIFO 5322发送经压实的光线消息(尽管也可以使用其他缓冲器类型)。在一个实施例中,光线压实器5320形成在高速缓存行内合适的固定大小的光线数据块。
每个经压实的光线消息通过堆栈仲裁逻辑5325被传递到存储器支持的堆栈5430,堆栈仲裁逻辑5325响应来自堆栈控制/反馈电路5331和/或光线消息FIFO反馈电路5321的信号,或者将光线消息在存储器支持的堆栈5330的消息条目中进行排队,或者将消息存储到存储器子系统5490。如上所述,对于某些应用,存储器支持的堆栈5330可以被实现为后进先出(LIFO)队列。在这样的实现中,仲裁逻辑5325将光线消息放置在存储器支持的堆栈5330的顶部,以供RT电路5110立即消耗。在该实施例中,当存储器支持的堆栈5330满了时,旧的光线追踪消息被存储到存储器子系统5390。
存储器支持的计数和寻址电路5335追踪存储到存储器子系统5390的光线消息(例如,对存储器子系统5390中光线消息的数量进行计数和/或维持与光线消息相关联的地址)。存储器后端获取电路5340响应于来自控制电路5331的请求,使用存储的计数和地址从存储器子系统5390获取光线消息,并将它们推送到堆栈5330上。
可替换地,或者另外地,当存储在每个相应存储元件中的条目数量达到指定的高阈值时,分派器5405可以从存储器支持的堆栈5430的控制电路5331和/或光线消息FIFO5322的控制电路5321接收反馈信号。作为响应,分派器5405可以响应性地对向EU 4001分派新工作进行节流,以降低压力(例如,通过如下所述限制堆栈的数量)。当存储器支持的堆栈5430中的光线追踪消息的数量达到低阈值时,分派器5405以正常吞吐量(例如,尽可能高效地)恢复分派工作。存储器支持的堆栈5430的一个实施例具有六十四个64字节的条目,每个条目能够存储29条光线。
在一个实施例中,光线追踪消息包括指针、堆栈标识和补充控制数据,以由RT电路5110用来从存储器子系统5490读取和处理光线数据。在EU包括SIMD电路的实现中,光线追踪消息参考每SIMD通道一条光线。
图54示出了对本地芯片存储5404的写入的示例,该本地芯片存储5404可以包括存储器支持的堆栈5330中的条目。如所指示的,写入可以包括同步的压实消息5420或异步的压实消息5421。在本文中使用时,同步的压实消息5420是被写入本地芯片存储器5404并被同步(即,当它们被接收时)处理的消息。相反,异步的压实消息5421是那些可能被无序处理的消息。例如,当诸如5404和/或其他处理资源之类的条目可用时,一些光线消息可以被旁路以支持其他消息、溢出到存储器子系统5390、并然后填充回存储器支持的堆栈5330。当光线消息在5413异步溢出到存储器时,它可在数据和执行资源可用时从存储器2511被异步填充到本地芯片存储装置5404。
当前工作消息5405包括当前正由光线追踪电路处理的消息。在一个实施例中,如果执行当前工作消息所需的某些资源和数据不可用,则部分处理的消息5406可以被写回到本地芯片存储装置5404和/或溢出回存储器5413。例如,如果在初始消息解码和评估之后确定必须从系统存储器2511请求当前工作消息5405引用的光线,则光线请求可以被发送到存储器子系统5390,并且(部分处理的)光线消息5406可以被写回到本地芯片存储装置5404。随后,当光线已经从系统存储器2511中被检索并存储在本地存储器(例如,本地高速缓存、光线组5201-5202等)中时,部分处理的消息5406可以从本地芯片存储装置5404中读取,并且处理完成。
实现可以使用异步和同步处理的组合。例如,如果光线消息正以与它们被RT电路5110消耗的速率相同或更低的速率产生,则流水线可以以同步方式操作。然而,当光线消息正在以比它们可由RT电路5110处理的速度更快的速度产生时,则存储器支持的堆栈5330将被填满,并且消息将溢出到存储器子系统5390,从而导致异步操作。
在一个实施例中,当存储器支持的堆栈5330达到高阈值(例如,指定数量的排队光线消息)时,控制/反馈电路5331可以向分派器5305传送控制/反馈信号。在该实现中,分派控制电路5333解释该信号,并使分派器5305减少执行单元4001上的负载(例如,减少分派新的初级光线着色器的频率),从而间接减少存储器支持的堆栈5330上的负载。分派控制电路5333的一个实施例通过对存储器支持的堆栈5330或另一个将EU耦合到RT电路5110的缓冲器/队列的大小进行采样来检测高阈值条件。
在一个特定的实现中,根据图55中的操作对光线消息进行节流。图示的方法可以在本文中描述的架构上实现,但是不限于任何特定的处理器或系统架构。
在5501,实况堆栈阈值被初始化为特定的可配置值,即N堆栈(例如2K)。当在5502确定已经调度了N堆栈个主着色器堆栈时,则在5503对用于在EU(执行着色器)和光线追踪电路之间存储光线消息的FIFO缓冲器/队列进行采样(例如,以确定当前使用的条目的数量)。在一个实施例中,FIFO缓冲器/队列包括光线消息FIFO 5322,尽管本发明的基本原理不限于该特定实现。
在5504,基于FIFO缓冲器/队列的当前状态(例如,消耗的条目数量),根据以下等式调整堆栈的数量:
N堆栈=N堆栈- α *(FIFO.size–大小阈值)
在5504,为N堆栈设置最小值和最大值(分别为MinStacks和MaxStacks;或者如下所述的用于双子切片(DSS)实现的MinDSSStacks和MaxDSSStacks)。然后,该过程在连续循环中返回到5502——对FIFO进行采样,并响应地调整实况堆栈的数量。结果是,在检测到FIFO中条目的最大值时,节流EU的输出,以允许光线追踪硬件时间赶上。一旦光线追踪硬件被赶上(由达到的低阈值确定),堆栈的数量可以被设置回最大值。
在上述操作中,通过设置控制位来启用/禁用EU部分,α值可以配置为从0到1的值范围(以0.25递增)。值0将禁用自动节流。在一个实施例中,FIFO大小阈值被设置为存储在本地寄存器中的FIFO大小的一半(例如,对于存储在寄存器中的16个堆栈条目,为8)。MinStacks和MaxStacks的值也可以使用控制位来配置。
如上所述,如果在处理光线消息时使用纯后进先出(LIFO)调度方案,则不需要上述堆栈节流。代替EU消息FIFO 5322,该实施例使用EU消息LIFO堆栈操作。然而,当堆栈中有多个分派命令时,这种方案不能保证前进过程。因此,它可能不是某些应用的最佳配置。
本发明的一个实施例可基于应用需求进行配置。如果应用要求在光线处理调度中的公平性,则可以选择堆栈节流来降低光线调度频率,直到FIFO中的光线数量达到指定的低阈值。备选地,如果不要求公平性,则可以使用LIFO消息处理。
除了动态堆栈节流之外,本发明的一个实施例实现了静态堆栈节流技术。图56示出了一个实施例的附加细节,其中执行单元 4001的执行资源生成跨双“子切片”5501-5502分布的光线。在一个实施例中,子切片包括EU执行资源的指定部分。仲裁器5612应用其仲裁策略以从第一子切片5501或第二子切片5502中选择下一条光线。槽处理器将光线提交给指定的槽中的光线压实器,从子切片5501-5502提供的光线数据中移除无效的光线引用,以形成在高速缓存行内适合的固定大小的光线数据块。在一个实施例中,每个子切片5501-5502被限制为最大2K个堆栈,尽管本发明的基本原理不限于该实现。
在本发明的一个实施例中,编译器5690生成数据并行程序代码5691,例如要在EU4001上执行的单指令多线程(SIMT)程序代码或单指令多数据(SIMD)程序代码。例如,在一个实施例中,每个EU 4001在功能单元组(FU)上并行执行相同指令的不同实例,其中指令的每个实例在输入光线数据的不同部分(其可以被打包到向量寄存器中)上操作。
在一个实施例中,编译器5690将线程组织成线程组,以由一个EU、EU的一部分或一组EU执行。例如,每个子切片5501-5502可代表EU的特定部分、多个EU或单独的EU。线程组可由编译器5690基于EU的并行处理能力(例如,能够并行执行指令的功能单元的数量)和EU执行资源被细分为子切片所采用的方式来选择。编译器5690可以生成包括线程组集合的内核程序,以用于执行指定的功能,例如生成光线、处理最近的光线命中、处理光线未命中等。例如,这里描述的着色器可以各自是特定内核程序的实例。
在一个实现中,每个单独的EU被分配一个只能由其功能单元(FU)访问的本地数据存储。还可以提供一个全局数据存储,该全局数据存储可由所有或部分EU访问(例如,子切片),以允许EU交换数据。全局数据存储和/或本地数据存储可以在专用片上存储器中和/或通过系统存储器中的指定存储区域来实现。在一个实现中,本文中描述的包括BVH节点堆栈和光线堆栈的各种堆栈被存储在全局存储器存储和/或本地存储器存储中。
如上所述,每个子切片5501-5502可以被动态分配最多N个堆栈(例如,2K)。在一个实施例中,编译器5690可以通过在提交内核程序以供执行之前在存储器映射的IO(MMIO)寄存器中编程指定的值来将堆栈存储限制为小于该最大值。编译器5690评估代码以确保基于线程组中所有线程的堆栈大小来选择编程的最大值(以避免硬件挂起)。例如,假设SIMD16线程和包括16个线程的线程组(例如,NUM _ THREADS _ IN _ THREADGROUP = 16),编译器5690可以将堆栈值设置为至少16×16 = 256个堆栈。
因为它是静态编程的值,所以在一个实施例中,在改变值之前,使得整个双子切片(DSS)流水线是空闲的——即,没有正在运行的线程,并且DSS中的所有数据被推送到全局存储器。在一个实施例中,编译器5690通过在改变值之前执行流水线控制转储清除来实现这一点。
示例
以下是本发明的不同实施例的示例实现。
示例1. 一种设备,包括:执行电路,所述执行电路包括多个功能单元,所述多个功能单元用来执行多个光线着色器并生成多个初级光线和对应的多个光线消息;先进先出(FIFO)缓冲器,用来对由所述EU生成的所述光线消息进行排队;高速缓存,用来存储所述多个初级光线中的一个或多个初级光线;存储器支持的堆栈,用来将所述多个光线消息的第一子集存储在对应的多个条目中;存储器支持的堆栈管理电路,用来至少部分地基于在所述存储器支持的堆栈中由光线消息当前占据的条目的数量,将所述多个光线消息的第二子集存储到所述存储器支持的堆栈,或者将所述多个光线消息的一个或多个所述第二子集临时存储到存储器子系统;以及光线遍历电路,用来从所述存储器支持的堆栈读取下一光线消息、从所述高速缓存或存储器子系统检索由所述光线消息标识的下一初级光线、以及对所述下一初级光线执行遍历操作。
示例2. 示例1所述的设备,还包括:光线消息先进先出(FIFO)缓冲器,用来在存储在所述存储器支持的堆栈和/或所述存储器子系统中之前,将所述多个光线消息中的每一个进行临时排队。
示例3. 示例2所述的设备,还包括:用来将所述多个光线着色器分派到所述执行电路的分派器,所述分派器包括节流电路,用来至少部分地基于在所述存储器支持的堆栈中光线消息当前占用的条目的数量和/或所述光线消息FIFO缓冲器中的光线消息占用,对所述多个光线着色器的分派进行节流。
示例4. 示例2所述的设备,其中,所述节流电路用于至少部分地基于在所述存储器支持的堆栈中光线消息当前占用的条目的所述数量和/或所述光线消息FIFO缓冲器中的光线消息占用来调整一个或多个堆栈阈值。
示例5. 示例4所述的设备,其中所述堆栈阈值包括第一最大堆栈值,所述第一最大堆栈值指示所述功能单元执行多个光线着色器而可访问的实况堆栈的最大数量。
示例6. 示例5所述的设备,其中,所述堆栈阈值还包括第一最小堆栈值,所述第一最小堆栈值指示所述功能单元执行多个光线着色器而可访问的实况堆栈的最小数量。
示例7. 示例6所述的设备,其中,所述分派器要基于所述最小堆栈值和/或所述最大堆栈值将所述多个光线着色器分派到所述执行电路。
示例8. 示例7所述的设备,其中,所述执行电路要被细分为两个或更多个子切片,其中,包括所述功能单元的第一子集的第一子切片要与所述第一最小堆栈值和/或所述最大堆栈值相关联,并且包括所述功能单元的第二子集的第二子切片要与第二最小堆栈值和/或所述最大堆栈值相关联。
示例9. 根据权利要求1所述的设备,还包括:压实器,所述压实器耦合在所述执行电路和所述存储器支持的堆栈之间,所述压实器用于移除与单指令多数据(SIMD)通道相关联的空和/或无效槽。
示例10. 示例9所述的设备,其中,所述压实器用来生成固定大小的光线数据块,所述固定大小的光线数据块在所述高速缓存的高速缓存行内是适合的。
示例11. 示例1所述的设备,其中,所述存储器支持的堆栈管理电路还包括存储器后端获取电路,用来从所述存储器子系统获取要推送到所述存储器支持的堆栈的所述多个光线消息的一个或多个所述第二子集。
示例12. 一种方法,包括:由多个光线着色器生成多个初级光线和对应的多个光线消息;在先进先出(FIFO)缓冲器中对所述光线消息进行排队;在高速缓存中存储所述多个初级光线中的一个或多个初级光线;在存储器支持的堆栈的对应的多个条目中存储所述多个光线消息的第一子集;至少部分地基于在所述存储器支持的堆栈中由光线消息当前占据的条目的数量,将所述多个光线消息的第二子集存储到所述存储器支持的堆栈,或者将所述多个光线消息的一个或多个所述第二子集临时存储到存储器子系统;从所述存储器支持的堆栈读取下一光线消息;从所述高速缓存或存储器子系统检索由所述光线消息标识的下一初级光线;以及对所述下一初级光线执行遍历操作。
示例13. 示例12所述的方法,还包括:在存储在所述存储器支持的堆栈和/或所述存储器子系统中之前,在光线消息先进先出(FIFO)缓冲器中对所述多个光线消息中的每一个进行临时排队。
示例14. 示例13所述的方法,还包括:将所述多个光线着色器分派到执行电路;至少部分地基于在所述存储器支持的堆栈中光线消息当前占用的条目的数量和/或在所述光线消息FIFO缓冲器中的光线消息占用,对所述多个光线着色器的分派进行节流。
示例15. 示例13所述的方法,其中,将至少部分地基于在所述存储器支持的堆栈中光线消息当前占用的条目的所述数量和/或所述光线消息FIFO缓冲器中的光线消息占用来调整一个或多个堆栈阈值。
示例16. 示例15所述的方法,其中所述堆栈阈值包括第一最大堆栈值,所述第一最大堆栈值指示所述功能单元执行多个光线着色器而可访问的实况堆栈的最大数量。
示例17. 示例16所述的方法,其中,所述堆栈阈值还包括第一最小堆栈值,所述第一最小堆栈值指示所述功能单元执行多个光线着色器而可访问的实况堆栈的最小数量。
示例18. 示例17所述的方法,还包括:基于所述最小堆栈值和/或所述最大堆栈值将所述多个光线着色器分派到所述执行电路。
示例19. 示例18所述的方法,还包括:将所述执行电路细分为两个或更多个子切片,其中,包括所述功能单元的第一子集的第一子切片要与所述第一最小堆栈值和/或所述最大堆栈值相关联,并且包括所述功能单元的第二子集的第二子切片要与第二最小堆栈值和/或所述最大堆栈值相关联。
示例20. 示例12所述的方法,还包括:移除与单指令多数据(SIMD)通道相关联的空和/或无效槽。
示例21. 示例20所述的方法,还包括:生成固定大小的光线数据块,所述固定大小的光线数据块在所述高速缓存的高速缓存行内是适合的。
示例22. 示例12所述的方法,还包括:从所述存储器子系统获取要推送到所述存储器支持的堆栈的所述多个光线消息的一个或多个所述第二子集。
示例23. 一种机器可读介质,具有存储在其上的程序代码,所述程序代码在由机器执行时促使所述机器执行以下操作:由多个光线着色器生成多个初级光线和对应的多个光线消息;在先进先出(FIFO)缓冲器中对所述光线消息进行排队;在高速缓存中存储所述多个初级光线中的一个或多个初级光线;在存储器支持的堆栈的对应的多个条目中存储所述多个光线消息的第一子集;至少部分地基于在所述存储器支持的堆栈中由光线消息当前占据的条目的数量,将所述多个光线消息的第二子集存储到所述存储器支持的堆栈,或者将所述多个光线消息的一个或多个所述第二子集临时存储到存储器子系统;从所述存储器支持的堆栈读取下一光线消息;
从所述高速缓存或存储器子系统检索由所述光线消息标识的下一初级光线;以及
对所述下一初级光线执行遍历操作。
示例24. 示例23所述的方法,还包括:在存储在所述存储器支持的堆栈和/或所述存储器子系统中之前,在光线消息先进先出(FIFO)缓冲器中对所述多个光线消息中的每一个进行临时排队。
示例25. 示例24所述的方法,还包括:将所述多个光线着色器分派到执行电路;至少部分地基于在所述存储器支持的堆栈中光线消息当前占用的条目的数量和/或在所述光线消息FIFO缓冲器中的光线消息占用,对所述多个光线着色器的分派进行节流。
示例26. 示例24所述的方法,其中,将至少部分地基于在所述存储器支持的堆栈中光线消息当前占用的条目的所述数量和/或所述光线消息FIFO缓冲器中的光线消息占用来调整一个或多个堆栈阈值。
示例27. 示例26所述的方法,其中所述堆栈阈值包括第一最大堆栈值,所述第一最大堆栈值指示所述功能单元执行多个光线着色器而可访问的实况堆栈的最大数量。
示例28. 示例27所述的方法,其中,所述堆栈阈值还包括第一最小堆栈值,所述第一最小堆栈值指示所述功能单元执行多个光线着色器而可访问的实况堆栈的最小数量。
示例29. 示例28所述的方法,还包括:基于所述最小堆栈值和/或所述最大堆栈值将所述多个光线着色器分派到所述执行电路。
示例30. 示例29所述的方法,还包括:将所述执行电路细分为两个或更多个子切片,其中,包括所述功能单元的第一子集的第一子切片要与所述第一最小堆栈值和/或所述最大堆栈值相关联,并且包括所述功能单元的第二子集的第二子切片要与第二最小堆栈值和/或所述最大堆栈值相关联。
示例31. 示例23所述的方法,还包括:移除与单指令多数据(SIMD)通道相关联的空和/或无效槽。
示例32. 示例31所述的方法,还包括:生成固定大小的光线数据块,所述固定大小的光线数据块在所述高速缓存的高速缓存行内是适合的。
示例33. 示例23所述的方法,还包括:从所述存储器子系统获取要推送到所述存储器支持的堆栈的所述多个光线消息的一个或多个所述第二子集。
本发明的实施例可以包括上面已描述的各种步骤。所述步骤可以体现在机器可执行指令中,所述机器可执行指令可以被用来促使通用或专用处理器执行步骤。备选地,这些步骤可以由含有用于执行步骤的硬连线逻辑的特定硬件组件执行,或者由编程的计算机组件和定制硬件组件的任何组合执行。
如本文中所述,指令可以涉及硬件的特定配置(诸如配置成执行某些操作或具有预确定的功能性的专用集成电路(ASIC)),或在非暂态计算机可读介质中体现的存储器中存储的软件指令。因此,使用在一个或多个电子装置(例如,终端站、网络元件等)上存储和执行的代码和数据,能够实现附图中示出的技术。此类电子装置使用计算机机器可读介质(诸如非暂态计算机机器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪速存储器装置;相变存储器)和暂态计算机机器可读通信介质(例如,电信号、光信号、声信号或其它形式的传播信号——诸如载波、红外信号、数字信号等))来存储并传递(在内部和/或通过网络与其它电子装置)代码和数据。
另外,此类电子装置通常包括一组一个或多个处理器,所述一组一个或多个处理器耦合到一个或多个其它组件,诸如一个或多个存储装置(非暂态机器可读存储介质)、用户输入/输出装置(例如,键盘、触摸屏和/或显示器)和网络连接。该组处理器与其它组件的耦合通常通过一个或多个总线和桥接器(也称为总线控制器)。存储装置和携带网络业务的信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定电子装置的存储装置通常存储代码和/或数据以便在该电子装置的该组一个或多个处理器上执行。当然,本发明的实施例的一个或多个部分可以使用软件、固件和/或硬件的不同组合来实现。在此详细描述通篇,为了解释的目的,阐述了许多特定的细节以便提供本发明的详尽理解。然而,本领域的技术人员将明白,可以在没有这些特定细节中的一些特定细节的情况下实践本发明。在某些实例中,没有以详尽细节描述公知的结构和功能,以便避免混淆本发明的主题。因此,应根据随附的权利要求来判断本发明的范围和精神。