CN114078076A - 用于压缩光线追踪加速结构构建数据的装置和方法 - Google Patents

用于压缩光线追踪加速结构构建数据的装置和方法 Download PDF

Info

Publication number
CN114078076A
CN114078076A CN202110809488.2A CN202110809488A CN114078076A CN 114078076 A CN114078076 A CN 114078076A CN 202110809488 A CN202110809488 A CN 202110809488A CN 114078076 A CN114078076 A CN 114078076A
Authority
CN
China
Prior art keywords
bounding box
index
data
graphics
compressed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110809488.2A
Other languages
English (en)
Inventor
M·多伊尔
S·科坦达拉曼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN114078076A publication Critical patent/CN114078076A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/10Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/08Volume rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/40Scaling of whole images or parts thereof, e.g. expanding or contracting
    • G06T3/4007Scaling of whole images or parts thereof, e.g. expanding or contracting based on interpolation, e.g. bilinear interpolation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/001Model-based coding, e.g. wire frame
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/12Bounding box

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Software Systems (AREA)
  • Geometry (AREA)
  • Multimedia (AREA)
  • General Engineering & Computer Science (AREA)
  • Artificial Intelligence (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Image Generation (AREA)

Abstract

用于在光线追踪实现中压缩加速结构构建数据的装置和方法。例如,一种装置的一个实施例包括:穿过硬件逻辑,其用于穿过穿过包括多个图元的图形场景的光线;加速数据结构处理单元,包括:边界框压缩器,其用于压缩一组边界框以生成多个边界框压缩块,以及索引压缩器,其用于压缩一组索引以生成多个索引压缩块,以及用于基于边界框压缩块和索引压缩块来构造加速结构的加速数据结构构建器。

Description

用于压缩光线追踪加速结构构建数据的装置和方法
相关申请的交叉引用
本申请要求于2020年8月17日提交的共同未决美国临时申请第 63/066,799号的权益,该申请全文通过引用并入本文。
技术领域
概括而言,本发明涉及图形处理器领域。更具体地,本发明涉及一种 用于压缩光线追踪加速结构构建数据的装置和方法。
背景技术
光线追踪是一种通过基于物理的渲染来模拟光传输的技术。它广泛用 于电影渲染,直到几年前,它还被认为对实时性能来说过于占用资源。光 线追踪中的关键操作之一是处理称为“光线穿过(ray traversal)”的光线场 景相交的可见性查询,它通过穿过边界体积层次结构(BVH)以及与BVH中 的节点相交来计算光线场景相交。
附图说明
结合以下附图,可以通过下面的详细描述更好地理解本发明,其中:
图1是带有具有一个或多个处理器核和图形处理器的处理器的计算机 系统的实施例的框图;
图2A-2D图示了由本发明的实施例提供的计算系统和图形处理器;
图3A-3C图示了附加图形处理器和计算加速器架构的框图;
图4是用于图形处理器的图形处理引擎的实施例的框图;
图5A-5B图示了包括处理元件阵列的线程执行逻辑;
图6是包括处理元件阵列的线程执行逻辑的框图;
图7图示了根据实施例的图形处理器执行单元指令格式;
图8是包括图形管线、媒体管线、显示引擎、线程执行逻辑和渲染输 出管线的图形处理器的另一实施例的框图;
图9A是图示根据实施例的图形处理器命令格式的框图;
图9B是图示根据实施例的图形处理器命令序列的框图;
图10图示了根据实施例的用于数据处理系统的示例性图形软件架构;
图11A示出了根据实施例的可用于制造集成电路以执行操作的示例性 IP核开发系统;
图11B-11D示出了包括小芯片和中介层基板的示例性封装布置;
图12图示了根据实施例的可以使用一个或多个IP核制造的示例性片 上系统集成电路;
图13图示了可以使用一个或多个IP核制造的片上系统集成电路的示 例性图形处理器;
图14图示了可以使用一个或多个IP核制造的片上系统集成电路的附 加示例性图形处理器;
图15图示了用于执行机器学习架构的初始训练的架构;
图16图示了机器学习引擎如何在运行时期间持续被训练和更新;
图17图示了机器学习引擎如何在运行时期间被持续训练和更新;
图18A-18B图示了机器学习数据如何在网络上共享;以及
图19图示了用于训练机器学习引擎的方法;
图20图示了节点如何交换重影区域数据以执行分布式去噪操作;
图21图示了跨多个节点分布图像渲染和去噪操作的架构;
图22图示了用于分布式渲染和去噪的架构的附加细节;
图23图示了用于执行分布式渲染和去噪的方法;
图24图示了机器学习方法;
图25图示了多个互连的通用图形处理器;
图26图示了用于机器学习实现的一组卷积层和全连接层;
图27图示了卷积层的示例;
图28图示了机器学习实现中的一组互连节点的示例;
图29图示了训练框架,在该框架中神经网络使用训练数据集进行学习;
图30A图示了模型并行性和数据并行性的示例;
图30B图示了片上系统(SoC);
图31图示了包括光线追踪核和张量核的处理架构;
图32图示了光束的示例;
图33图示了用于执行光束追踪的装置;
图34图示了光束层次结构的示例;
图35图示了用于执行光束追踪的方法;
图36图示了分布式光线追踪引擎的示例;
图37-38图示了在光线追踪系统中执行的压缩;
图39图示了在光线追踪架构上实现的方法;
图40图示了示例性混合光线追踪装置;
图41图示了用于光线追踪操作的堆栈;
图42图示了混合光线追踪装置的附加细节;
图43图示了边界体积层次结构;
图44图示了调用栈和穿过状态存储装置;
图45图示了一种用于穿过和相交的方法;
图46A-46B图示了如何需要多个分派周期来执行某些着色器;
图47图示了单个分派周期如何执行多个着色器;
图48图示了单个分派周期如何执行多个着色器;
图49图示了用于执行光线追踪指令的架构;
图50图示了用于在线程内执行光线追踪指令的方法;
图51图示了用于异步光线追踪的架构的一个实施例;
图52A图示了光线穿过电路的一个实施例;
图52B图示了在一个实施例中执行以管理光线存储库(storage bank) 的过程;
图53图示了优先级选择电路/逻辑的一个实施例;
图54和图55A-55B图示了在本发明的一个实施例中使用的不同类型的 光线追踪数据,包括标志、异常和剔除数据;
图56图示了用于确定光线追踪管线的早期退出(early out)的一个实 施例;
图57图示了优先级选择电路/逻辑的一个实施例;
图58图示了用于光线穿过操作的示例边界体积层次结构(BVH);
图59A-59B图示了附加的穿过操作;
图60图示了用于管理BVH堆栈的堆栈管理电路的一个实施例;
图61A-61B图示了示例数据结构、子结构和针对光线、命中和堆栈执 行的操作;
图62图示了具有N位比较操作掩码的细节级别选择器的实施例;
图63图示了根据本发明的一个实施例的加速数据结构;
图64图示了包括残差值和元数据的压缩块的一个实施例;
图65图示了根据本发明的一个实施例的方法;
图66图示了块偏移索引压缩块的一个实施例;
图67A图示了根据本发明的一个实施例的层次结构位矢量索引(HBI);
图67B图示了根据本发明的一个实施例的索引压缩块;以及
图68图示了包括BVH压缩电路/逻辑和解压缩电路/逻辑的示例架构。
具体实施方式
在下面的描述中,为了解释的目的,阐述了许多具体细节以提供对下 面描述的本发明的实施例的透彻理解。然而,对于本领域技术人员将显而 易见的是,可以在没有这些具体细节中的一些的情况下实践本发明的实施 例。在其他情况下,众所周知的结构和设备以框图形式示出以避免混淆本 发明实施例的基本原理。
示例性图形处理器架构和数据类型
系统总览
图1是根据实施例的处理系统100的框图。系统100可以用在单处理 器台式机系统、多处理器工作站系统或具有大量处理器102或处理器核心 107的服务器系统中。在一个实施例中,系统100是并入片上系统(SoC) 集成电路内的处理平台,该SoC用于在移动、手持或嵌入式设备中使用, 例如在具有到局域网或广域网的有线或无线连接的物联网(IoT)设备内。
在一个实施例中,系统100可以包括以下各项、与以下各项耦合或集 成在以下各项内:基于服务器的游戏平台;游戏控制台,包括游戏和媒体 控制台;移动游戏控制台、手持游戏控制台或在线游戏控制台。在一些实 施例中,系统100是移动电话、智能电话、平板计算设备或诸如具有低内 部存储容量的笔记本电脑之类的移动因特网连接设备的一部分。处理系统 100还可以包括以下各项、与以下各项耦合或集成在以下各项内:可穿戴设备,例如智能手表可穿戴设备;用增强现实(AR)或虚拟现实(VR)特征 增强的智能眼镜或服装,以提供视觉、音频或触觉输出,以补充现实世界 视觉、音频或触觉体验,或者以其他方式提供文本、音频、图形、视频、 全息图像或视频或触觉反馈;其他增强现实(AR)设备;或其他虚拟现实 (VR)设备。在一些实施例中,处理系统100包括电视或机顶盒设备或为 电视或机顶盒设备的一部分。在一个实施例中,系统100可以包括以下各 项、与以下各项耦合或集成在以下各项内:诸如公共汽车、拖拉机拖车、 汽车、电动机或电动自行车、飞机或滑翔机(或其任何组合)之类的自主 载具(vehicle)内。自主载具可以使用系统100来处理在载具周围感测到的 环境。
在一些实施例中,一个或多个处理器102均包括一个或多个处理器核 心107以处理指令,该指令在被执行时执行针对系统或用户软件的操作。 在一些实施例中,一个或多个处理器核心107中的至少一个被配置为处理 特定指令集109。在一些实施例中,指令集109可以促进复杂指令集计算 (CISC)、精简指令集计算(RISC)或经由超长指令字(VLIW)的计算。 一个或多个处理器核心107可以处理不同的指令集109,该指令集可以包括 用于促进仿真其他指令集的指令。处理器核心107还可以包括其他处理设 备,例如数字信号处理器(DSP)。
在一些实施例中,处理器102包括高速缓冲存储器104。根据架构,处 理器102可以具有单个内部高速缓存或多层内部高速缓存。在一些实施例 中,高速缓冲存储器在处理器102的各个组件之间共享。在一些实施例中, 处理器102还使用外部高速缓存(例如,三级(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耦合,该外部图形处理器可以与处理器102中的一 个或多个图形处理器108通信以执行图形和媒体操作。在一些实施例中, 图形、媒体和/或计算操作可以由加速器112辅助,该加速器是可以被配置 为执行专门的一组图形、媒体或计算操作的协处理器。例如,在一个实施 例中,加速器112是用于优化机器学习或计算操作的矩阵乘法加速器。在 一个实施例中,加速器112是光线追踪(ray-tracing)加速器,其可以用于 与图形处理器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包括可选的传统I/O控制器140,以用于将传统(例如,个人系统 2(PS/2))设备耦合到系统。平台控制器集线器130还可以连接到一个或多 个通用串行总线(USB)控制器142,该控制器连接输入设备,例如键盘和 鼠标143组合、相机144或其他USB输入设备。
应当理解,所示的系统100是示例性的而不是限制性的,因为还可以 使用被不同地配置的其他类型的数据处理系统。例如,存储器控制器116 和平台控制器集线器130的实例可以被集成到分立的外部图形处理器中, 例如外部图形处理器118。在一个实施例中,平台控制器集线器130和/或 存储器控制器116可以在一个或多个处理器102的外部。例如,系统100 可以包括外部存储器控制器116和平台控制器集线器130,该外部存储器控 制器116和平台控制器集线器130可以被配置为与处理器102的通信的系 统芯片组内的存储器控制器集线器和外围控制器集线器。
例如,可以使用电路板(“托架(sled)”),其上放置了诸如CPU、存储 器和其他组件之类的组件,以提高热力性能。在一些示例中,诸如处理器 之类的处理组件位于托架的顶侧,而诸如DIMM之类的接近存储器位于托 架的底侧。由于此设计提供了增强的气流,因此这些组件可以以比典型系 统中更高的频率和功率水平操作,从而提高了性能。此外,这些托架被配 置为与机架中的电源和数据通信电缆盲配对,从而增强了其快速拆卸、升 级、重新安装和/或更换的能力。同样,位于托架上的个体组件(例如,处 理器、加速器、存储器和数据存储驱动器)被配置为由于其相互之间的间 距增加而易于升级。在说明性实施例中,组件另外包括硬件证明特征以证 明其真实性。
数据中心可以利用支持多种其他网络架构(包括以太网和Omni-Path) 的单一网络架构(“结构”)。托架可以经由光纤耦合到交换机,与典型的双 绞线电缆(例如,类别5、类别5e、类别6等)相比,这可以提供更高的 带宽和更低的延时。由于高带宽、低延时的互连和网络架构,数据中心可 能会在使用中池化资源,例如存储器、加速器(例如,GPU、图形加速器、 FPGA、ASIC、神经网络和/或人工智能加速器等),以及物理上解聚的数据 存储驱动器,并根据需要将它们提供给计算资源(例如,处理器),从而使 计算资源能够像它们是本地的一样访问池化的资源。
供电装置或电源可以向系统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,以及系统代理核心210,包括一个或多个集成存储器控制 器214。在一些实施例中,系统代理核心210还包括显示控制器211以驱动 图形处理器输出到一个或多个耦合的显示器。在一些实施例中,显示控制 器211也可以是经由至少一个互连与图形处理器耦合的独立模块,或者可 以集成在图形处理器208内。
在一些实施例中,基于环的互连单元212用于耦合处理器200的内部 组件。然而,可以使用替代的互连单元,例如点到点互连、交换互连或其 他技术,包括本领域公知的技术。在一些实施例中,图形处理器208经由 I/O链路213与环形互连212耦合。
示例性I/O链路213代表多种I/O互连中的至少一种,包括促进各种处 理器组件与高性能嵌入式存储器模块218(例如,eDRAM模块)之间的通 信的封装上I/O互连。在一些实施例中,处理器核心202A-202N和图形处 理器208中的每一个可以使用嵌入式存储器模块218作为共享的最后一级 高速缓存。
在一些实施例中,处理器核心202A-202N是执行相同指令集架构的同 构核心。在另一实施例中,就指令集架构(ISA)而言,处理器核心202A-202N 是异构的,其中,一个或多个处理器核心202A-202N执行第一指令集,而 至少一个其他核心执行该第一指令集的子集或不同指令集。在一个实施例 中,处理器核心202A-202N在微架构方面是异构的,其中,具有相对较高 功耗的一个或多个核心与具有较低功耗的一个或多个功率核心耦合。在一 个实施例中,处理器核心202A-202N在计算能力方面是异构的。另外,处 理器200可以被实现在一个或多个芯片上,或者被实现为具有附加于其他 组件的所示出的组件的SoC集成电路。
图2B是根据本文所述的一些实施例的图形处理器核心219的硬件逻辑 的框图。具有与本文中任何其他附图的元件相同的附图标记(或名称)的 图2B的元件可以以类似于本文中其他地方所描述的任何方式来操作或起 作用,但不限于此。图形处理器核心219(有时称为核心切片)可以是模块 化图形处理器内的一个或多个图形核心。图形处理器核心219是一个图形 核心切片的示例,并且本文所述的图形处理器可以包括基于目标功率和性 能包络线的多个图形核心切片。每个图形处理器核心219可以包括与多个 子核心221A-221F(也称为子切片)耦合的固定功能块230,该多个子核心 包括通用和固定功能逻辑的模块化块。
在一些实施例中,固定功能块230包括几何/固定功能管线231,其可 以例如在较低性能和/或较低功率的图形处理器实施方式中由图形处理器核 心219中的所有子核心共享。在各种实施例中,几何/固定功能管线231包 括3D固定功能管线(例如,如下所述的图3和图4中的3D管线312)、视 频前端单元、线程产生器和线程分派器、以及统一返回缓冲器管理器,该 统一返回缓冲器管理器管理统一返回缓冲器(例如,图4中的统一返回缓 冲器418,如下所述)。
在一个实施例中,固定功能块230还包括图形SoC接口232、图形微 控制器233和媒体管线234。图形SoC接口232在图形处理器核心219和 片上系统集成电路内的其他处理器核心之间提供接口。图形微控制器233 是可编程子处理器,其可配置为管理图形处理器核心219的各种功能,包 括线程分派、调度和抢占。媒体管线234(例如,图3和图4的媒体管线316)包括用于促进对包括图像和视频数据的多媒体数据进行解码、编码、 预处理和/或后处理的逻辑。媒体管线234经由到子核心221-221F内的计算 或采样逻辑的请求来实现媒体操作。
在一个实施例中,SoC接口232使图形处理器核心219能够与通用应 用处理器核心(例如,CPU)和/或SoC内的其他组件通信,包括诸如共享 的最后一级高速缓存之类的存储器层次结构元素、系统RAM和/或嵌入式 片上或封装上DRAM。SoC接口232还可以使得能够与SoC内的固定功能 设备(例如,相机成像管线)的通信,并且使得能够使用和/或实现可以在图形处理器核心219和SoC内的CPU之间共享的全局存储器原子。SoC接 口232还可以实现用于图形处理器核心219的功率管理控制,并且实现图 形核心219的时钟域与SoC内的其他时钟域之间的接口。在一个实施例中, SoC接口232使得能够从命令流式传输器(commandstreamer)和全局线程 分派器接收命令缓冲器,该命令流式传输器和全局线程分派器被配置为向 图形处理器内的一个或多个图形核心中的每一个提供命令和指令。当要执 行媒体操作时,可以将命令和指令分派给媒体管线234,或者当要执行图形 处理操作时,可以将其分派给几何和固定功能管线(例如,几何和固定功 能管线231、几何和固定功能管线237)。
图形微控制器233可以被配置为执行用于图形处理器核心219的各种 调度和管理任务。在一个实施例中,图形微控制器233可以在子核心 221A-221F内的执行单元(EU)阵列222A-222F、224A-224F内的各种图 形并行引擎上执行图形和/或计算工作负载调度。在此调度模型中,在包括 图形处理器核心219的SoC的CPU核心上执行的主机软件可以提交多个图 形处理器门铃之一的工作负载,其调用适当图形引擎上的调度操作。调度 操作包括确定接下来要运行哪个工作负载,将工作负载提交给命令流式传 输器,抢占引擎上正在运行的现有工作负载,监视工作负载的进度,以及 在工作负载完成时通知主机软件。在一个实施例中,图形微控制器233还 可以促进图形处理器核心219的低功率或空闲状态,从而为图形处理器核 心219提供与系统上的操作系统和/或图形驱动程序软件无关的跨低功率状态转换保存和恢复图形处理器核心219内的寄存器的能力。
图形处理器核心219可以具有大于或小于所示的子核心221A-221F,多 达N个模块化子核心。对于每组N个子核心,图形处理器核心219还可以 包括共享功能逻辑235、共享和/或高速缓冲存储器236、几何/固定功能管 线237以及用于加速各种图形和计算处理操作的附加固定功能逻辑238。共 享功能逻辑235可以包括与图4的共享功能逻辑420相关联的逻辑单元(例 如,采样器、数学和/或线程间通信逻辑),其可以被图形处理器核心219 内的每N个子核心共享。共享和/或高速缓冲存储器236可以是图形处理器 核心219内的一组N个子核心221A-221F的最后一级高速缓存,并且还可 以用作可由多个子核心访问的共享存储器。可以在固定功能块230内包括 几何/固定功能管线237而不是几何/固定功能管线231,并且可以包括相同 或相似的逻辑单元。
在一个实施例中,图形处理器核心219包括附加的固定功能逻辑238, 其可以包括供图形处理器核心219使用的各种固定功能加速逻辑。在一个 实施例中,附加的固定功能逻辑238包括在仅位置阴影(position only shading) 中使用的附加的几何管线。在仅位置阴影中,存在两个几何管线,几何/固 定功能管线238、231内的完整几何管线,以及剔除管线,该剔除管线是可 以被包括在附加固定功能逻辑238内的附加几何管线。在一个实施例中, 剔除管线是完整几何管线的精简版。完整管线和剔除管线可以执行同一应 用的不同实例,每个实例具有单独的上下文。仅位置阴影可以隐藏丢弃三 角形的长时间剔除运行,从而使阴影在一些情况下能够更早完成。例如并 且在一个实施例中,附加固定功能逻辑238内的剔除管线逻辑可以与主应 用并行地执行位置着色器,并且通常比完整管线更快地产生临界结果,因 为剔除管线仅获取和着色顶点的位置属性,而不执行光栅化和将像素渲染 到帧缓冲器。剔除管线可以使用生成的临界结果来计算用于所有三角形的 可见性信息,而不考虑那些三角形是否被剔除。完整的管线(在这种情况 下,它可以称为重播管线)可以消耗可见性信息,以跳过剔除的三角形, 以仅对最终传递到光栅化阶段的可见三角形着色。
在一个实施例中,附加的固定功能逻辑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示出了图形处理单元(GPU)239,其包括布置成多核组240A-240N 的专用图形处理资源集。尽管仅提供了单个多核组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,该存储器可以是 系统存储器(例如,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可以集成在同一芯片上,或 者可以经由片外接口耦合到存储器控制器248。在一种实施方式中,存储器 249包括GDDR6存储器,该GDDR6存储器共享与其他物理系统级存储器 相同的虚拟地址空间,但本发明的基本原理不限于该特定实施方式。
在一个实施例中,张量核心244包括多个被设计为执行矩阵运算的执 行单元,所述矩阵运算是用于执行深度学习运算的基本计算运算。例如, 同时矩阵乘法运算可以用于神经网络训练和推理。张量核心244可以使用 各种操作数精度来执行矩阵处理,包括单精度浮点数(例如,32位)、半精 度浮点数(例如,16位)、整数字(16位)、字节(8位)和半字节(4位)。 在一个实施例中,神经网络实施方式提取每个渲染场景的特征,潜在地从 多个帧组合细节,以构造高质量的最终图像。
在深度学习实施方式中,并行矩阵乘法工作可以被调度为在张量核心 244上执行。神经网络的训练尤其需要大量的矩阵点积运算。为了处理乘以 N×N×N个矩阵乘法的内积公式,张量核心244可以包括至少N个点积处 理元件。在矩阵乘法开始之前,将一个完整的矩阵加载到分片寄存器中, 并在N个周期内每个周期加载至少一列第二矩阵。每个周期,存在N个点 积被处理。
取决于特定实施方式,可以以不同的精度存储矩阵元素,包括16位字、 8位字节(例如,INT8)和4位半字节(例如,INT4)。可以为张量核心244 指定不同的精度模式,以确保将最有效的精度用于不同的工作负载(例如, 可以将量化容忍到字节和半字节的推理工作负载)。
在一个实施例中,对于实时光线追踪实施方式和非实时光线追踪实施 方式二者,光线追踪核心245都加速光线追踪操作。特别地,光线追踪核 心245包括光线穿过/相交电路,该光线穿过/相交电路用于使用边界体积层 次结构(BVH)来执行光线穿过并标识光线与包括在BVH体积内的图元之 间的交集。光线追踪核心245还可以包括用于执行深度测试和剔除(例如, 使用Z缓冲器或类似布置)的电路。在一种实施方式中,光线追踪核心245 与本文所述的图像降噪技术一起执行穿过和相交操作,其至少一部分可以 在张量核心244上执行。例如,在一个实施例中,张量核心244实现深度 学习神经网络以对由光线追踪核心245生成的帧执行降噪(包括本地存储 器9010(和/或系统存储器))。然而,CPU 246、图形核心243和/或光线追 踪核心245也可以实现降噪和/或深度学习算法的全部或一部分。
另外,如上所述,可以采用分布式方法来降噪,其中,GPU 239在通 过网络或高速互连耦合到其他计算设备的计算设备中。在该实施例中,互 连的计算设备共享神经网络学习/训练数据,以提高整个系统学习针对不同 类型的图像帧和/或不同图形应用执行降噪的速度。
在一个实施例中,光线追踪核心245处理所有的BVH穿过和光线图元 相交,从而避免了图形核心243被每光线数千条指令所超载。在一个实施 例中,每个光线追踪核心245包括用于执行边界框测试(例如,用于穿过 操作)的第一组专用电路和用于执行光线-三角形相交测试(例如,将已进 行穿过的光线相交)的第二组专用电路。因此,在一个实施例中,多核组 240A可以简单地发射光线探测器(probe),并且光线追踪核心245独立地 执行光线穿过和相交并返回命中数据(例如,命中、无命中、多次命中等) 到线程上下文。当光线追踪核心245执行穿过和相交操作的同时,其他核 心243、244被释放以执行其他图形或计算工作。
在一个实施例中,每个光线追踪核心245包括用于执行BVH测试操作 的穿过单元和执行光线图元相交测试的相交单元。相交单元生成“命中”、 “无命中”或“多次命中”响应,其将所述响应提供给适当的线程。在穿 过和相交操作期间,释放其他核心(例如,图形核心243和张量核心244) 的执行资源以执行其他形式的图形工作。
在下面描述的一个特定实施例中,使用混合光栅化/光线追踪方法,其 中,工作分布在图形核心243和光线追踪核心245之间。
在一个实施例中,光线追踪核心245(和/或其他核心243、244)包括 对光线追踪指令集的硬件支持,例如微软的DirectX光线追踪(DXR),其 包括DispatchRays命令以及光线生成、最接近命中、任何命中和未命中着 色器,其实现为每个对象分配唯一的着色器和纹理集。可以由光线追踪核 心245、图形核心243和张量核心244支持的另一个光线追踪平台是Vulkan 1.1.85。然而,请注意,本发明的基本原理不限于任何特定的光线追踪ISA。
通常,各种核心245、244、243可以支持光线追踪指令集,该光线追 踪指令集包括用于光线生成、最接近命中、任何命中、光线图元相交、每 图元和层次结构边界框构造、未命中、访问和例外的指令/功能。更具体地, 一个实施例包括用于执行以下功能的光线追踪指令:
光线生成-可以针对每个像素、样本或其他用户定义的工作分配执行 光线生成指令。
最接近命中-可以执行最接近命中指令以定位光线与场景内图元的最 接近的相交。
任何命中-任何命中指令标识光线与场景内的图元之间的多个相交, 从而潜在地标识新的最接近的相交。
相交-相交指令执行光线图元相交测试并输出结果。
每图元边界框构造-该指令围绕给定的图元或一组图元构建边界框 (例如,在构建新的BVH或其他加速度数据结构时)。
未命中-指示光线未命中场景或场景的指定区域内的所有几何结构。
访问-指示光线将穿过的子体积。
异常-包括各种类型的异常处理程序(例如,针对各种错误条件调用 的)。
图2D是根据本文描述的实施例的可以被配置为图形处理器和/或计算 加速器的通用图形处理单元(GPGPU)270的框图。GPGPU 270可以经由 一个或多个系统和/或存储器总线与主机处理器(例如,一个或多个CPU 246) 和存储器271、272互连。在一个实施例中,存储器271是可以与一个或多 个CPU 246共享的系统存储器,而存储器272是专用于GPGPU270的设备 存储器。在一个实施例中,GPGPU 270内的组件和设备存储器272可以被 映射到可由一个或多个CPU 246访问的存储器地址中。可以经由存储器控 制器268促进对存储器271和272的访问。在一个实施例中,存储器控制 器268包括内部直接存储器访问(DMA)控制器269或可以包括用于执行 否则将由DMA控制器执行的操作的逻辑。
GPGPU 270包括多个高速缓冲存储器,包括L2高速缓存253、L1高 速缓存254、指令高速缓存255和共享存储器256,它们的至少一部分也可 以被划分为高速缓冲存储器。GPGPU 270还包括多个计算单元260A-260N。 每个计算单元260A-260N包括一组向量寄存器261、标量寄存器262、向量 逻辑单元263和标量逻辑单元264。计算单元260A-260N还可以包括本地 共享存储器265和程序计数器266。计算单元260A-260N可以与恒定高速 缓存267耦合,其可以用于存储恒定数据,该恒定数据是在GPGPU 270上 执行的内核或着色器程序的运行期间将不会改变的数据。在一个实施例中, 恒定高速缓存267是标量数据高速缓存,并且可以将缓存的数据直接提取 到标量寄存器262中。
在操作期间,一个或多个CPU 246可以将命令写入已映射到可访问地 址空间的GPGPU 270中的寄存器或存储器中。命令处理器257可以从寄存 器或存储器读取命令,并确定将如何在GPGPU 270内处理那些命令。然后 可以使用线程分派器258将线程分派给计算单元260A-260N以执行那些命 令。每个计算单元260A-260N可以独立于其他计算单元执行线程。另外, 每个计算单元260A-260N可以被独立地配置用于条件计算,并且可以将计 算结果有条件地输出到存储器。当提交的命令完成时,命令处理器257可 以中断一个或多个CPU 246。
图3A-3C示出了由本文描述的实施例提供的附加图形处理器和计算加 速器架构的框图。具有与本文中任何其他附图的元件相同的附图标记(或 名称)的图3A-3C的元件可以以类似于本文中其他地方所描述的任何方式 来操作或起作用,但不限于此。
图3A是图形处理器300的框图,该图形处理器可以是分立的图形处理 单元,或者可以是与多个处理核心或例如但不限于存储设备或网络接口的 其他半导体器件集成在一起的图形处理器。在一些实施例中,图形处理器 经由存储器映射的I/O接口与图形处理器上的寄存器以及放置在处理器存 储器中的命令进行通信。在一些实施例中,图形处理器300包括用于访问 存储器的存储器接口314。存储器接口314可以是到本地存储器、一个或多 个内部高速缓存、一个或多个共享的外部高速缓存和/或系统存储器的接口。
在一些实施例中,图形处理器300还包括显示控制器302,以将显示输 出数据驱动到显示设备318。显示控制器302包括用于一个或多个覆盖平面 的硬件,以用于显示和合成多层视频或用户界面元素。显示设备318可以 是内部或外部显示设备。在一个实施例中,显示设备318是头戴式显示设 备,例如虚拟现实(VR)显示设备或增强现实(AR)显示设备。在一些实 施例中,图形处理器300包括视频编解码器引擎306,以将媒体编码成一种 或多种媒体编码格式、从一种或多种媒体编码格式进行解码、或者在一种 或多种媒体编码格式之间进行转码,包括但不限于运动图像专家组(MPEG) 格式,例如MPEG-2、高级视频编码(AVC)格式(例如,H.264/MPEG-4AVC) H.265/HEVC、开放媒体联盟(AOMedia)VP8、VP9、以及电影电视工程 师协会(SMPTE)421M/VC-1、以及诸如JPEG以及Motion JPEG(MJPEG) 格式之类联合图像专家组(JPEG)格式。
在一些实施例中,图形处理器300包括块图像传送(BLIT)引擎304, 以执行包括例如位边界块传送的二维(2D)光栅化器操作。然而,在一个 实施例中,使用图形处理引擎(GPE)310的一个或多个组件来执行2D图 形操作。在一些实施例中,GPE 310是用于执行图形操作的计算引擎,包括 三维(3D)图形操作和媒体操作。
在一些实施例中,GPE 310包括用于执行3D操作的3D管线312,例 如使用作用于3D图元形状(例如,矩形、三角形等)的处理功能来渲染三 维图像和场景。3D管线312包括可编程和固定功能元件,其在元件内执行 各种任务和/或产生到3D/媒体子系统315的执行线程。尽管3D管线312可 以用于执行媒体操作,但是GPE 310的实施例还包括媒体管线316,其专门 用于执行媒体操作,例如视频后处理和图像增强。
在一些实施例中,媒体管线316包括固定功能或可编程逻辑单元,以 执行一个或多个专门的媒体操作,例如代替或代表视频编解码器引擎306 的视频解码加速、视频解交织和视频编码加速。在一些实施例中,媒体管 线316还包括线程产生单元,以产生用于在3D/媒体子系统315上执行的线 程。所产生的线程对3D/媒体子系统315中包括的一个或多个图形执行单元 执行媒体操作的计算。
在一些实施例中,3D/媒体子系统315包括用于执行由3D管线312和 媒体管线316产生的线程的逻辑。在一个实施例中,管线将线程执行请求 发送到3D/媒体子系统315,其包括用于仲裁各种请求并将其分派给可用的 线程执行资源的线程分派逻辑。执行资源包括图形执行单元阵列,以用于 处理3D和媒体线程。在一些实施例中,3D/媒体子系统315包括一个或多 个用于线程指令和数据的内部高速缓存。在一些实施例中,子系统还包括 共享存储器(包括寄存器和可寻址存储器),以用于在线程之间共享数据并 存储输出数据。
图3B示出了根据本文所述实施例的具有分片式架构的图形处理器320。 在一个实施例中,图形处理器320包括图形处理引擎集群322,其在图形引 擎分片310A-310D内具有图3A的图形处理引擎310的多个实例。每个图 形引擎分片310A-310D可以经由一组分片互连323A-323F来互连。每个图 形引擎分片310A-310D还可以经由存储器互连325A-325D连接到存储器模 块或存储器设备326A-326D。存储器设备326A-326D可以使用任何图形存 储器技术。例如,存储器设备326A-326D可以是图形双倍数据速率(GDDR) 存储器。在一个实施例中,存储设备326A-326D是高带宽存储器(HBM) 模块,其可以与它们相应的图形引擎分片310A-310D一起在管芯上。在一 个实施例中,存储器设备326A-326D是可以被堆叠在它们相应的图形引擎 分片310A-310D之上的堆叠的存储器设备。在一个实施例中,每个图形引 擎分片310A-310D和相关联的存储器326A-326D驻留在单独的小芯片 (chiplet)上,所述小芯片结合到基础管芯或基础衬底,如在图11B-11D中 进一步详细描述的。
图形处理引擎群集322可以与片上或封装上结构互连324连接。结构 互连324可以实现图形引擎分片310A-310D与诸如视频编解码器306和一 个或多个复制引擎304之类的组件之间的通信。复制引擎304可以用于将 数据移出存储器设备326A-326D、移入这些存储器设备、以及在这些存储 器设备和图形处理器320外部的存储器(例如,系统存储器)之间移动数 据。结构互连324也可以用于互连图形引擎分片310A-310D。图形处理器 320可以可选地包括显示控制器302,以实现与外部显示设备318的连接。 图形处理器也可以被配置为图形或计算加速器。在加速器配置中,可以省 略显示控制器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,其可以被配置为设备范围的高速 缓存(device-wide cache)。计算加速器330还可以经由主机接口328以与 图3B的图形处理器320类似的方式连接到主机处理器和存储器。
图形处理引擎
图4是根据一些实施例的图形处理器的图形处理引擎410的框图。在 一个实施例中,图形处理引擎(GPE)410是图3A所示的GPE 310的版本, 并且还可以表示图3B的图形引擎分片310A-310D。具有与本文中任何其他 附图的元件相同的附图标记(或名称)的图4中的元件可以以与本文中其 他地方所描述的方式类似的任何方式操作或起作用,但不限于此。例如, 示出了图3A的3D管线312和媒体管线316。媒体管线316在GPE 410的 一些实施例中是可选的,并且可以不显式地包括在GPE 410内。例如并且 在至少一个实施例中,单独的媒体和/或图像处理器耦合到GPE 410。
在一些实施例中,GPE 410与命令流式传输器403耦合或包括该命令 流式传输器,该命令流式传输器向3D管线312和/或媒体管线316提供命 令流式传输器。在一些实施例中,命令流式传输器403与存储器耦合,该 存储器可以是系统存储器,或者内部高速缓冲存储器和共享高速缓冲存储 器中的一个或多个。在一些实施例中,命令流式传输器403从存储器接收 命令,并将命令发送到3D管线312和/或媒体管线316。命令是从环形缓冲 器获取的指令,该环形缓冲器存储用于3D管线312和媒体管线316的命令。 在一个实施例中,环形缓冲器可以附加地包括批处理命令缓冲器,其存储 多个命令的批次。用于3D管线312的命令还可以包括对存储在存储器中的 数据的引用,例如但不限于用于3D管线312的顶点和几何数据和/或用于 媒体管线316的图像数据和存储器对象。3D管线312和媒体管线316通过经由相应管线内的逻辑执行操作或通过将一个或多个执行线程分派到图形 核心阵列414来处理命令和数据。在一个实施例中,图形核心阵列414包 括一个或多个块的图形核心(例如,图形核心415A、图形核心415B),每 个块包括一个或多个图形核心。每个图形核心包括一组图形执行资源,这 些资源包括用于执行图形和计算操作的通用和特定于图形的执行逻辑,以 及固定功能纹理处理和/或机器学习以及人工智能加速逻辑。
在各个实施例中,3D管线312可以包括固定功能和可编程逻辑,以通 过处理指令并向图形核心阵列414分派执行线程来处理诸如阴影着色器、 几何着色器、像素着色器、片段着色器、计算着色器或其他着色器程序之 类的一个或多个着色器程序。图形核心阵列414提供执行资源的统一块, 以在处理这些着色器程序中使用。图形核心阵列414的图形核心415A-414B 内的多用途执行逻辑(例如,执行单元)包括对各种3D API着色器语言的 支持,并且可以执行与多个着色器相关联的多个同时执行线程。
在一些实施例中,图形核心阵列414包括用于执行媒体功能的执行逻 辑,所述媒体功能例如视频和/或图像处理。在一个实施例中,除了图形处 理操作之外,执行单元还包括可编程以执行并行通用计算操作的通用逻辑。 通用逻辑可以并行或结合图1的处理器核心107或如图2A所示的核心 202A-202N内的通用逻辑执行处理操作。
由在图形核心阵列414上执行的线程生成的输出数据可以将数据输出 到统一返回缓冲器(URB)418中的存储器。URB 418可以存储多个线程的 数据。在一些实施例中,URB418可以用于在图形核心阵列414上执行的 不同线程之间发送数据。在一些实施例中,URB418可以附加地用于图形 核心阵列上的线程与共享功能逻辑420内的固定功能逻辑之间的同步。
在一些实施例中,图形核心阵列414是可缩放的,使得该阵列包括可 变数量的图形核心,每个图形核心具有基于GPE 410的目标功率和性能水 平的可变数量的执行单元。在一个实施例中,执行资源是动态可缩放的, 使得可以根据需要启用或禁用执行资源。
图形核心阵列414与共享功能逻辑420耦合,该共享功能逻辑包括在 图形核心阵列中的图形核心之间共享的多个资源。共享功能逻辑420内的 共享功能是向图形核心阵列414提供专门的补充功能的硬件逻辑单元。在 各个实施例中,共享功能逻辑420包括但不限于采样器421、数学422和线 程间通信(ITC)423逻辑。另外,一些实施例在共享功能逻辑420内实现 一个或多个高速缓存425。
至少在对于给定专门功能的需求不足以被包括在图形核心阵列414内 的情况下,实现共享功能。相反,将该专门功能的单个实例化被实现为共 享功能逻辑420中的独立的实体并且在图形核心阵列414内的执行资源之 间共享。在图形核心阵列414之间共享并被包括在图形核心阵列414内的 精确功能集在各实施例中有所不同。在一些实施例中,由图形核心阵列414 广泛使用的共享功能逻辑420内的特定共享功能可以被包括在图形核心阵列414内的共享功能逻辑416内。在各个实施例中,图形核心阵列414内 的共享功能逻辑416可以包括共享功能逻辑420内的一些或全部逻辑。在 一个实施例中,共享功能逻辑420内的所有逻辑元素可以在图形核心阵列 414的共享功能逻辑416内被复制。在一个实施例中,共享功能逻辑420被 排除在外,以有利于图形核心阵列414内的共享功能逻辑416。
执行单元
图5A-5B示出了根据本文描述的实施例的线程执行逻辑500,其包括 在图形处理器核心中采用的处理元件的阵列。具有与本文中任何其他附图 中的元件相同的附图标记(或名称)的图5A-5B中的元件可以以与本文中 其他地方所描述的方式相似的任何方式来操作或起作用,但不限于此。图 5A-5B示出了线程执行逻辑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中 的一个或多个执行单元上的所请求的线程的逻辑。例如,几何管线可以将 顶点、曲面细分或几何着色器分派到线程执行逻辑以进行处理。在一些实施例中,线程分派器504还可以处理来自正在执行的着色器程序的运行时 线程产生请求。
在一些实施例中,执行单元508A-508N支持指令集,该指令集包括对 许多标准3D图形着色器指令的本机支持,使得来自图形库的着色器程序 (例如,Direct 3D和OpenGL)以最小的翻译执行。执行单元支持顶点和 几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如, 像素着色器、片段着色器)和通用处理(例如,计算和媒体着色器)。每个 执行单元508A-508N都能够进行多发出单指令多数据(SIMD)执行,并且 面对更高延时的存储器访问,多线程操作实现高效的执行环境。每个执行 单元内的每个硬件线程都有专用的高带宽寄存器文件和相关联的独立线程 状态。执行是每时钟多发出到管线,该管线能够进行整数、单精度和双精 度浮点运算、SIMD分支功能、逻辑运算、先验运算和其他杂项运算。在等 待来自存储器或共享功能之一的数据时,执行单元508A-508N内的依赖性 逻辑使等待线程休眠直到已经返回了所请求的数据。在等待线程在休眠时, 硬件资源可以专用于处理其他线程。例如,在与顶点着色器操作相关联的 延迟期间,执行单元可以对像素着色器、片段着色器或另一类型的着色器 程序(包括不同的顶点着色器)执行操作。各种实施例可以通过使用单指 令多线程(SIMT)来代替SIMD的使用或附加于SIMD的使用而应用于执行。对SIMD核心或操作的引用也可以应用于SIMT或与SIMT组合地应用 于SIMD。
执行单元508A-508N中的每个执行单元对数据元素的阵列进行操作。 数据元素的数量是“执行大小”或指令的通道数量。执行通道是用于指令 内数据元素访问、屏蔽和流控制的执行的逻辑单元。通道的数量可以独立 于特定图形处理器的物理算术逻辑单元(ALU)或浮点单元(FPU)的数量。 在一些实施例中,执行单元508A-508N支持整数和浮点数据类型。
执行单元指令集包括SIMD指令。可以将各种数据元素作为打包数据 类型存储在寄存器中,并且执行单元将基于元素的数据大小来处理各种元 素。例如,当对256位宽的向量进行操作时,该向量的256位被存储在寄 存器中,并且执行单元将该向量作为四个单独的54位打包数据元素(四字 (QW)大小数据元素)、八个单独的32位打包数据元素(双字(DW)大 小数据元素)、十六个单独的16位打包数据元素(字(W)大小数据元素) 或32个单独的8位数据元素(字节(B)大小数据元素)进行操作。然而, 不同的向量宽度和寄存器大小是可能。
在一个实施例中,可以将一个或多个执行单元组合成具有对融合的EU 公共的线程控制逻辑(507A-507N)的融合的执行单元509A-509N。可以将 多个EU融合成EU组。可以将融合的EU组中的每个EU配置为执行单独 的SIMD硬件线程。融合的EU组中的EU的数量可以根据实施例而变化。 此外,每EU可以执行各种SIMD宽度,包括但不限于SIMD8、SIMD16 和SIMD32。每个融合的图形执行单元509A-509N包括至少两个执行单元。 例如,融合的执行单元509A包括第一EU 508A、第二EU 508B以及对于 第一EU 508A和第二EU 508B公共的线程控制逻辑507A。线程控制逻辑 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可以支持包括用于光线生成的指令/ 功能的光线追踪指令集。光线追踪指令集可以与图2C中的光线追踪核心 245所支持的光线追踪指令集相似或不同。
图5B示出了根据实施例的执行单元508的示例性内部细节。图形执行 单元508可以包括指令获取单元537、通用寄存器文件阵列(GRF)524、 架构寄存器文件阵列(ARF)526、线程仲裁器522、发送单元530、分支 单元532,一组SIM浮点单元(FPU)534,以及在一个实施例中,一组专 用整数SIMD ALU535。GRF 524和ARF 526包括与每个可以在图形执行单 元508中活动的每个同时硬件线程相关联的一组通用寄存器文件和架构寄 存器文件。在一个实施例中,在ARF 526中维护每线程的架构状态,而在 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内的4KB,但 实施例不限于此,并且在其他实施例中可以提供更多或更少的寄存器资源。 在一个实施例中,图形执行单元508被划分为七个硬件线程,其可以独立 地执行计算操作,但每执行单元的线程数量也可以根据实施例而变化。例 如,在一个实施例中,支持了多达16个硬件线程。在七个线程可以访问4KB 的实施例中,GRF 524可以存储总共28KB。在16个线程可以访问4KB 的情况下,GRF 524可以存储总共64KB。灵活的寻址模式可以允许将寄存 器一起寻址,以有效地构建更宽的寄存器或表示跨步矩形块数据结构 (strided rectangular block datastructure)。
在一个实施例中,经由由消息传递发送单元530执行的“发送”指令 来分派存储器操作、采样器操作以及其他较长延时的系统通信。在一个实 施例中,将分支指令分派到专用分支单元532以促进SIMD发散和最终收 敛。
在一个实施例中,图形执行单元508包括一个或多个SIMD浮点单元 (FPU)534以执行浮点操作。在一个实施例中,FPU 534也支持整数计算。 在一个实施例中,FPU 534可以SIMD执行多达M个32位浮点(或整数) 运算,或者SIMD执行多达2M个16位整数或16位浮点运算。在一个实施 例中,FPU中的至少一个提供扩展的数学能力以支持高吞吐量的先验数学函数和双精度54位浮点。在一些实施例中,还存在一组8位整数SIMD ALU 535,并且其可以被专门优化以执行与机器学习计算相关联的操作。
在一个实施例中,可以在图形子核心分组(例如,子切片)中实例化 图形执行单元508的多个实例的阵列。为了可缩放性,产品架构师可以每 子核心分组选择确切数量的执行单元。在一个实施例中,执行单元508可 以跨多个执行通道执行指令。在另一个实施例中,在图形执行单元508上 执行的每个线程在不同的通道上执行。
图6示出了根据实施例的附加执行单元600。执行单元600可以是用于 例如图3C中的计算引擎分片340A-340D中的计算优化的执行单元,但不 限于此。执行单元600的变型也可以用于如图3B所示的图形引擎分片 310A-310D中。在一个实施例中,执行单元600包括线程控制单元601、线 程状态单元602、指令获取/预取单元603和指令解码单元604。执行单元600还包括寄存器文件606,该寄存器文件存储可以分配给执行单元内的硬 件线程的寄存器。执行单元600还包括发送单元607和分支单元608。在一 个实施例中,发送单元607和分支单元608可以与图5B的图形执行单元 508的发送单元530和分支单元532类似地操作。
执行单元600还包括计算单元610,其包括多种不同类型的功能单元。 在一个实施例中,计算单元610包括ALU单元611,其包括算术逻辑单元 的阵列。ALU单元611可以被配置为执行64位、32位和16位的整数和浮 点运算。整数和浮点运算可以同时执行。计算单元610还可以包括脉动阵 列612和数学单元613。脉动阵列612包括可以用于以脉动方式执行向量或 其他数据并行操作的数据处理单元的W宽和D深的网络。在一个实施例中, 脉动阵列612可以被配置为执行矩阵运算,例如矩阵点积运算。在一实施 例中,脉动阵列612支持16位浮点运算以及8位和4位整数运算。在一个 实施例中,脉动阵列612可以被配置为加速机器学习操作。在这样的实施 例中,脉动阵列612可以被配置为支持bfloat 16位浮点格式。在一个实施 例中,可以包括数学单元613,以与当时的ALU单元611相比有效和较低 功率的方式执行数学运算的特定子集。数学单元613可以包括可以在由其 他实施例提供的图形处理引擎的共享功能逻辑中找到的数学逻辑的变型 (例如,图4的共享功能逻辑420的数学逻辑422)。在一个实施例中,数 学单元613可以被配置为执行32位和64位浮点运算。
线程控制单元601包括用于控制执行单元内的线程的执行的逻辑。线 程控制单元601可以包括线程仲裁逻辑,以开始、停止和抢占执行单元600 内的线程。线程状态单元602可以用于存储被分配以在执行单元600上执 行的线程的线程状态。当线程被阻塞或空闲时,执行单元600内的线程状 态使得能够快速抢占那些线程。指令获取/预取单元603可以从更高级别的 执行逻辑的指令高速缓存(例如,如图5A中的指令高速缓存506)获取指 令。指令获取/预取单元603还可以基于对当前执行的线程的分析,发出对 要加载到指令高速缓存中的指令的预取请求。指令解码单元604可以用于 解码要由计算单元执行的指令。在一个实施例中,指令解码单元604可以 用作辅助解码器,以将复杂的指令解码为组分微操作。
执行单元600还包括可以由执行单元600上执行的硬件线程使用的寄 存器文件606。寄存器文件606中的寄存器可以在用于执行执行单元600的 计算单元610内的多个同时线程的逻辑上划分。图形执行单元600可以执 行的逻辑线程的数量不限于硬件线程的数量,并且可以将多个逻辑线程分 配给每个硬件线程。寄存器文件606的大小可以基于支持的硬件线程的数 量而在各实施例中变化。在一实施例中,寄存器重命名可以用于动态地将寄存器分配给硬件线程。
图7是示出根据一些实施例的图形处理器指令格式700的框图。在一 个或多个实施例中,图形处理器执行单元支持具有多种格式的指令的指令 集。实线框示出了通常被包括在执行单元指令中的组件,而虚线包括可选 的组件或仅被包括在指令的子集中的组件。在一些实施例中,所描述和示 出的指令格式700是宏指令,因为它们是被提供给执行单元的指令,与一 旦处理指令后就由指令解码产生的微操作相反。
在一些实施例中,图形处理器执行单元本机地支持128位指令格式710 的指令。基于所选择的指令、指令选项和操作数的数量,64位压缩指令格 式730对于一些指令是可用的。本机128位指令格式710提供对所有指令 选项的访问,而一些选项和操作则限制于64位格式730。64位格式730中 可用的本机指令因实施例而异。在一些实施例中,使用索引字段713中的 一组索引值来部分压缩指令。执行单元硬件基于索引值来引用一组压缩表, 并使用压缩表输出来重构128位指令格式710的本机指令。可以使用其他 尺寸和指令格式。
对于每种格式,指令操作码712定义执行单元要执行的操作。执行单 元跨每个操作数的多个数据元素并行执行每个指令。例如,响应于相加指 令,执行单元跨表示纹理元素或图片元素的每个颜色通道执行同时相加操 作。默认情况下,执行单元跨操作数的所有数据通道执行每个指令。在一 些实施例中,指令控制字段714使得能够控制某些执行选项,例如通道选 择(例如,预测)和数据通道顺序(例如,混乱)。对于128位指令格式710 的指令,执行大小(exec-size)字段716限制将并行执行的数据通道的数量。 在一些实施例中,执行大小字段716不可用于64位紧凑指令格式730。
一些执行单元指令具有多达三个操作数,包括两个源操作数src0 720、 src1 722和一个目的地718。在一些实施例中,执行单元支持双目的地指令, 其中,目的地之一被暗示。数据操纵指令可以具有第三源操作数(例如, SRC2 724),其中,指令操作码712确定源操作数的数量。指令的最后一个 源操作数可以是随指令传递的立即数(例如,硬编码)值。
在一些实施例中,128位指令格式710包括访问/地址模式字段726,其 指定例如是使用直接寄存器寻址模式还是间接寄存器寻址模式。当使用直 接寄存器寻址模式时,一个或多个操作数的寄存器地址直接由指令中的位 提供。
在一些实施例中,128位指令格式710包括访问/地址模式字段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解释,该命令流式传输器将指令提供给几何管线820 或媒体管线830的个体组件。
在一些实施例中,命令流式传输器803指示顶点获取器805的操作, 该顶点获取器从存储器读取顶点数据并执行由命令流式传输器803提供的 顶点处理命令。在一些实施例中,顶点获取器805将顶点数据提供给顶点 着色器807,它对每个顶点执行坐标空间变换和照明操作。在一些实施例中, 顶点获取器805和顶点着色器807通过经由线程分派器831将执行线程分 派给执行单元852A-852B来执行顶点处理指令。
在一些实施例中,执行单元852A-852B是向量处理器的阵列,其具有 用于执行图形和媒体操作的指令集。在一些实施例中,执行单元852A-852B 具有特定于每个阵列或在阵列之间共享的附接的L1高速缓存851。可以将 高速缓存配置为数据高速缓存、指令高速缓存或单个高速缓存,该单个高 速缓存被分区为在不同分区中包含数据和指令。
在一些实施例中,几何管线820包括曲面细分组件,以执行3D对象的 硬件加速的曲面细分。在一些实施例中,可编程的外壳着色器811配置曲 面细分操作。可编程域着色器817提供曲面细分输出的后端评估。曲面细 分器813在外壳着色器811的方向上操作,并包含专用的逻辑,以基于作 为输入提供给几何管线820的粗略几何模型生成一组详细的几何对象。在 一些实施例中,如果未使用曲面细分,则曲面细分组件(例如,外壳着色 器811、曲面细分器813和域着色器817)可以被绕过。
在一些实施例中,可以通过分派给执行单元852A-852B的一个或多个 线程由几何着色器819处理完整的几何对象,或者可以直接进行到修剪器 829。在一些实施例中,几何着色器在整个几何对象上进行操作,而不是图 形管线先前阶段中的顶点或顶点补丁。如果禁用了曲面细分,则几何着色 器819从顶点着色器807接收输入。在一些实施例中,如果禁用了曲面细 分单元,则几何着色器819可由几何着色器程序编程以执行几何曲面细分。
在光栅化之前,修剪器829处理顶点数据。修剪器829可以是具有修 剪和几何着色器功能的固定功能修剪器或可编程修剪器。在一些实施例中, 渲染输出管线870中的光栅化器和深度测试组件873分派像素着色器,以 将几何对象转换成每像素表示。在一些实施例中,像素着色器逻辑被包括 在线程执行逻辑850中。在一些实施例中,应用可以绕过光栅化器和深度 测试组件873,并经由流输出单元823访问未光栅化的顶点数据。
图形处理器800具有允许数据和消息在处理器的主要组件之间传递的 互连总线、互连结构或某个其他互连机制。在一些实施例中,执行单元852A-852B和相关联的逻辑单元(例如,L1高速缓存851、采样器854、纹 理高速缓存858等)经由数据端口856互连以执行存储器访问并与处理器 的渲染输出管线组件通信。在一些实施例中,采样器854、高速缓存851、 858和执行单元852A-852B均具有单独的存储器访问路径。在一个实施例 中,纹理高速缓存858也可以被配置为采样器高速缓存。
在一些实施例中,渲染输出管线870包含光栅化器和深度测试组件873, 其将基于顶点的对象转换为相关联的基于像素的表示。在一些实施例中, 光栅化器逻辑包括加窗器/掩蔽器单元以执行固定功能的三角形和线光栅化。 在一些实施例中,相关联的渲染高速缓存878和深度高速缓存879也是可 用的。像素操作组件877对数据执行基于像素的操作,但在一些情况下, 与2D操作相关联的像素操作(例如,具有混合的位块图像传输)由2D引 擎841执行,或在显示时由显示器使用覆盖显示平面的控制器843替代。
在一些实施例中,共享的L3高速缓存875可用于所有图形组件,从而允许 在不使用主系统存储器的情况下共享数据。
在一些实施例中,图形处理器媒体管线830包括媒体引擎837和视频 前端834。在一些实施例中,视频前端834从命令流式传输器803接收管线 命令。在一些实施例中,媒体管线830包括单独的命令流式传输器。在一 些实施例中,视频前端834在将命令发送给媒体引擎837之前处理媒体命 令。在一些实施例中,媒体引擎837包括线程产生功能以产生线程以经由 线程分派器831分派给线程执行逻辑850。
在一些实施例中,图形处理器800包括显示引擎840。在一些实施例中, 显示引擎840在处理器800的外部并且经由环形互连802或某个其他互连 总线或结构与图形处理器耦合。在一些实施例中,显示引擎840包括2D引 擎841和显示控制器843。在一些实施例中,显示引擎840包含能够独立于 3D管线操作的专用逻辑。在一些实施例中,显示控制器843与显示设备(未 示出)耦合,该显示设备可以是如膝上型计算机中的系统集成显示设备, 或者是经由显示设备连接器附接的外部显示设备。
在一些实施例中,几何结构管线820和媒体管线830可配置为基于多 个图形和媒体编程接口来执行操作,并且不特定于任何一个应用编程接口 (API)。在一些实施例中,用于图形处理器的驱动程序软件将特定于特定 图形或媒体库的API调用转换为可以由图形处理器处理的命令。在一些实 施例中,提供对全部来自Khronos集团的开放图形库(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(如果存在的话)以确定要执行的操作。客户端单元使用数据 字段906中的信息来执行命令。对于一些命令,期望显式的命令大小908 来指定命令的大小。在一些实施例中,命令解析器基于命令操作码来自动 确定至少一些命令的大小。在一些实施例中,命令是经由双字的倍数对齐 的。可以使用其他命令格式。
图9B中的流程图示出了示例性图形处理器命令序列910。在一些实施 例中,以图形处理器的实施例为特征的数据处理系统的软件或固件使用所 示的命令序列的版本来建立、执行并终止一组图形操作。仅出于示例目的 示出和描述了示例命令序列,因为实施例不限于这些特定命令或该命令序 列。此外,命令可以作为命令序列中的一批命令发出,使得图形处理器将 至少部分同时处理命令序列。
在一些实施例中,图形处理器命令序列910可以以管线刷新命令912 开始,以使任何活动的图形管线完成该管线的当前挂起的命令。在一些实 施例中,3D管线922和媒体管线924不同时操作。执行管线刷新以使活动 图形管线完成所有挂起的命令。响应于管线刷新,图形处理器的命令解析 器将暂停命令处理,直到活动的绘图引擎完成挂起的操作并且相关的读取 缓存被无效为止。可选地,可以将渲染高速缓存中标记为“脏”的任何数 据刷新到存储器。在一些实施例中,管线刷新命令912可以用于管线同步 或在将图形处理器置于低功率状态之前使用。
在一些实施例中,当命令序列需要图形处理器在管线之间显式切换时, 使用管线选择命令913。在一些实施例中,在发出管线命令之前,在执行上 下文内仅需要管线选择命令913一次,除非上下文要为两个管线发出命令。 在一些实施例中,紧接在经由管线选择命令913的管线切换之前需要管线 刷新命令912。
在一些实施例中,管线控制命令914配置用于操作的图形管线,并用 于对3D管线922和媒体管线924进行编程。在一些实施例中,管线控制命 令914为活动管线配置管线状态。在一个实施例中,管线控制命令914用 于管线同步,并在处理一批命令之前从活动管线内的一个或多个高速缓冲 存储器中清除数据。
在一些实施例中,返回缓冲器状态命令916用于为相应的管线配置一 组返回缓冲器以写入数据。一些管线操作需要分配、选择或配置一个或多 个返回缓冲器,在处理期间操作将中间数据写入该返回缓冲器中。在一些 实施例中,图形处理器还使用一个或多个返回缓冲器来存储输出数据并执 行跨线程通信。在一些实施例中,返回缓冲器状态916包括选择用于一组 管线操作的返回缓冲器的大小和数量。
命令序列中的其余命令基于用于操作的活动管线而不同。基于管线确 定920,命令序列针对以3D管线状态930开始的3D管线922进行定制, 或针对以媒体管线状态940开始的媒体管线924进行定制。
用于配置3D管线状态930的命令包括用于要在3D图元命令处理之前 配置的顶点缓冲器状态、顶点元素状态、恒定颜色状态、深度缓冲器状态 和其他状态变量的3D状态设置命令。这些命令的值至少部分地基于使用中 的特定3D API来确定。在一些实施例中,如果将不使用某些管线元素,则 3D管线状态930命令也能够选择性地禁用或绕过那些元素。
在一些实施例中,3D图元932命令用于提交要由3D管线处理的3D 图元。经由3D图元932命令传递到图形处理器的命令和相关联的参数将转 发到图形管线中的顶点获取功能。顶点获取功能使用3D图元932命令数据 来生成顶点数据结构。顶点数据结构存储在一个或多个返回缓冲器中。在 一些实施例中,3D图元932命令用于经由顶点着色器对3D图元执行顶点 操作。为了处理顶点着色器,3D管线922将着色器执行线程分派给图形处 理器执行单元。
在一些实施例中,经由执行934命令或事件来触发3D管线922。在一 些实施例中,寄存器写触发命令执行。在一些实施例中,经由命令序列中 的“执行(go)”或“踢”命令来触发执行。在一个实施例中,使用管线同 步命令来触发命令执行以通过图形管线刷新命令序列。3D管线将对3D图 元执行几何处理。一旦操作完成,就对所得的几何对象进行栅格化,并且 像素引擎为所得的像素进行着色。对于那些操作,还可以包括用于控制像 素着色和像素后端操作的附加命令。
在一些实施例中,当执行媒体操作时,图形处理器命令序列910遵循 媒体管线924路径。通常,用于媒体管线924的编程的特定用途和方式取 决于要执行的媒体或计算操作。在媒体解码期间,可以将特定的媒体解码 操作卸载到媒体管线。在一些实施例中,还可以绕过媒体管线,并且可以 使用由一个或多个通用处理核心提供的资源来全部或部分地执行媒体解码。 在一个实施例中,媒体管线还包括用于通用图形处理器单元(GPGPU)操 作的元件,其中,图形处理器用于使用与图形图元渲染不显式相关的计算 着色器程序来执行SIMD向量操作。
在一些实施例中,以与3D管线922类似的方式配置媒体管线924。在 媒体对象命令942之前,将用于配置媒体管线状态940的一组命令分派或 放置到命令队列中。在一些实施例中,用于媒体管线状态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 Shader Language(GLSL), 等等。该应用还包括适合于由通用处理器核心1034执行的机器语言的可执 行指令1014。该应用还包括由顶点数据定义的图形对象1016。
在一些实施例中,操作系统1020是来自微软公司的
Figure BDA0003167720240000371
操作系统、专有的类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包含后端着色器编译器 1027,以将着色器指令1012转换成特定于硬件的表示。当使用OpenGL API 时,将GLSL高级语言的着色器指令1012传递给用户模式图形驱动程序 1026以进行编译。在一些实施例中,用户模式图形驱动程序1026使用操作 系统内核模式功能1028与内核模式图形驱动程序1029通信。在一些实施 例中,内核模式图形驱动程序1029与图形处理器1032通信以分派命令和 指令。
IP核心实施方式
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的 代表性代码来实现,该代表代码表示和/或定义诸如处理器之类的集成电路 内的逻辑。例如,机器可读介质可以包括表示处理器内的各种逻辑的指令。 当由机器读取时,指令可以使机器制造逻辑以执行本文描述的技术。这样 的表示(称为“IP核心”)是集成电路的可重用逻辑单元,其可以作为描述 集成电路结构的硬件模型存储在有形的机器可读介质中。可以将硬件模型 提供给各种客户或制造设施,其将硬件模型加载到制造集成电路的制造机 器上。可以制造集成电路,使得该电路执行与本文描述的任何实施例相关 联地描述的操作。
图11A是示出根据实施例的可以用于制造集成电路以执行操作的IP核 心开发系统1100的框图。IP核心开发系统1100可以用于生成模块化的可 重用的设计,其可以被并入更大的设计中或者用于构建整个集成电路(例 如,SOC集成电路)。设计设施1130可以以高级编程语言(例如,C/C++) 生成IP核心设计的软件仿真1110。软件仿真1110可以用于使用仿真模型 1112来设计、测试和验证IP核心的行为。仿真模型1112可以包括功能、 行为和/或时序仿真。然后可以从仿真模型1112创建或合成寄存器传送级别 (RTL)设计1115。RTL设计1115是集成电路的行为的抽象,该行为对硬 件寄存器之间的数字信号流建模,包括使用建模的数字信号执行的相关联 的逻辑。除了RTL设计1115之外,还可以创建、设计或合成逻辑级别或晶 体管级别的较低级别设计。因此,初始设计和仿真的特定细节可以不同。
RTL设计1115或等同物可以由设计设施进一步合成为硬件模型1120, 其可以采用硬件描述语言(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电耦合,该桥被配 置为在逻辑1172、1174之间路由电信号。桥1182可以是密集的互连结构, 其提供对电信号的路由。桥1182可以包括由玻璃或合适的半导体材料组成 的桥衬底。可以在桥衬底上形成电路由特征,以在逻辑1172、1174之间提 供芯片到芯片的连接。
尽管示出了两个逻辑单元1172、1174和桥1182,但是本文描述的实施 例可以在一个或多个管芯上包括更多或更少的逻辑单元。一个或多个管芯 可以通过零个或更多个桥连接,因为当逻辑被包括在单个管芯上时,可以 不包括桥1182。替代地,可以通过一个或多个桥来连接多个管芯或逻辑单 元。另外,多个逻辑单元、管芯和桥可以以其他可能的配置(包括三维配 置)连接在一起。
图11C示出了封装组装件1190,该封装组装件包括连接至衬底1180(例 如,基础管芯)的多个硬件逻辑小芯片单元。如本文所述的图形处理单元、 并行处理器和/或计算加速器可以由单独制造的各种硅小芯片组成。在此上 下文中,小芯片是至少部分封装的集成电路,其包括可以与其他小芯片组 装成更大封装的不同逻辑单元。可以将具有不同IP核心逻辑的各种小芯片 集组装成单个器件。另外,可以使用有源插入器技术将小芯片集成为基础管芯或基础小芯片。本文描述的概念使得能够在GPU内的不同形式的IP 之间进行互连和通信。IP核心可以使用不同的工艺技术进行制造,并在制 造器件进行组合,这避免了将多个IP(特别是在具有若干个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电耦合,该桥被配置为在逻辑或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耦合,该桥互连 可以类似于本文所述的其他桥互连,并且可以是例如EMIB。存储器小芯片 也可以经由桥互连连接到逻辑或I/O小芯片。I/O和逻辑小芯片可以经由互 连结构进行通信。基础小芯片均可以支持标准化格式的一个或多个插槽,以用于逻辑或I/O或存储器/高速缓存之一。
在一个实施例中,可以将SRAM和功率输送电路制造成基础小芯片 1196、1198中的一个或多个,其可以使用与堆叠在基础小芯片之上的可互 换小芯片1195不同的工艺技术来制造。例如,可以使用较大的工艺技术来 制造基础小芯片1196、1198,而可以使用较小的工艺技术来制造可互换小 芯片。可互换小芯片1195中的一个或多个可以是存储器(例如,DRAM) 小芯片。可以基于功率和/或使用该封装组装件1194的产品的目标性能为封 装组装件1194选择不同的存储器密度。此外,可以在组装时基于功率和/ 或产品的目标性能选择具有不同数量功能单元类型的逻辑小芯片。此外, 可以将包含不同类型IP逻辑核心的小芯片插入可互换小芯片插槽中,从而 实现可以混合和匹配不同技术IP块的混合处理器设计。
示例性片上系统集成电路
图12-13示出了根据本文所述的各种实施例的示例性集成电路和相关 联的图形处理器,其可以使用一个或多个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 3DAPI中提供的像 素着色器程序类似的操作。
图形处理器1310还包括一个或多个存储器管理单元(MMU) 1320A-1320B、高速缓存1325A-1325B和电路互连1330A-1330B。一个或 多个MMU 1320A-1320B提供用于图形处理器1310(包括顶点处理器1305 和/或片段处理器1315A-1315N)的虚拟到物理地址的映射,除了存储在一 个或多个高速缓存1325A-1325B中的顶点或图像/纹理数据之外,所述图形处理器还可以引用存储在存储器中的顶点或图像/纹理数据。在一个实施例 中,一个或多个MMU 1320A-1320B可以与系统内的其他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 (例如,1455A、1355B、1355C、1355D、1355E、1355F至1355N-1和1355N), 其提供了统一的着色器核心架构,其中,单个核心或单个核心类型可以执 行所有类型的可编程着色器代码,包括用于实现顶点着色器、片段着色器 和/或计算着色器的着色器程序代码。存在的着色器核心的确切数量可以在 实施例和实施方式之间变化。另外,图形处理器1340包括核心间任务管理 器1345,其充当线程分派器以将执行线程分派给一个或多个着色器核心 1355A-1355N,以及分片单元1358以加速用于基于分片的渲染的分片操作, 其中,在图像空间中细分用于场景的渲染操作,例如以利用场景内的局部 空间一致性或以优化内部高速缓存的使用。
用机器学习进行光线追踪
如上所述,光线追踪是一种图形处理技术,其中通过基于物理的渲染 来模拟光传输。光线追踪中的关键操作之一是处理可见性查询,这需要对 边界体积层次结构(BVH)中的节点进行穿过和相交测试。
基于光线和路径追踪的技术通过以下方式来计算图像:追踪穿过每个 像素的光线和路径,并使用随机采样来计算高级效果,例如阴影、光泽度、 间接照明等。仅使用几个样本是快速的,但产生有噪声的图像,而使用许 多样本产生高质量的图像,但成本过高。
机器学习包括能够逐步提高指定任务的性能或逐步渲染更准确的预测 或决策的任何电路、程序代码或其组合。一些机器学习引擎可以执行这些 任务或渲染这些预测/决策,而不明确编程来执行这些任务或渲染预测/决策。 存在多种机器学习技术,包括(但不限于)监督和半监督学习、无监督学 习和强化学习。
在过去几年中,实时使用的光线/路径追踪的突破性解决方案以“去噪” 的形式出现——使用图像处理技术从有噪声、低样本计数的输入生成高质 量、滤波/去噪的图像的过程。最有效的去噪技术依赖于机器学习技术,其 中机器学习引擎会学习有噪声的图像可能会是什么样子(如果其用更多样 本计算的话)。在一个特定的实施方式中,机器学习由卷积神经网络(CNN) 执行;然而,本发明的基本原理不限于CNN实现。在这样的实施方式中,训练数据是用低样本计数输入和地面真值(ground-truth)生成的。CNN被 训练为从所考虑的像素周围的有噪声像素输入邻域中预测收敛像素。
虽然并不完美,但这种基于AI的去噪技术已被证明令人意外地有效。 然而,需要注意的是,需要良好的训练数据,因为否则网络可能会预测错 误的结果。例如,如果一家动画电影工作室在有陆地场景的过去电影上训 练了去噪CNN,并且然后尝试使用训练过的CNN来对来自一部新的水上 电影的帧进行去噪,则去噪操作将次佳地执行。
为了解决这个问题,可以在渲染的同时动态收集学习数据,并且可以 基于当前运行于其上的数据持续训练机器学习引擎,例如CNN,从而针对 手头任务持续改进机器学习引擎。因此,训练阶段可能仍会在运行时之前 执行,但会在运行时期间根据需要继续调整机器学习权重。从而,通过将 学习数据的生成限制在每帧或每N帧图像的一个子区域,避免了计算训练 所需的参考数据的高成本。特别是,生成一帧的有噪声输入以使用当前网 络对全帧进行去噪。此外,生成一小块参考像素区域并用于连续训练,如 下所述。
虽然本文描述了CNN实现,但可以使用任何形式的机器学习引擎,包 括但不限于执行监督学习(例如,构建包含输入和期望的输出二者的数据 集合的数学模型)、无监督学习(例如,其评估某些类型的结构的输入数据) 和/或监督学习和无监督学习的组合的系统。
现有的去噪实施方式在训练阶段和运行时阶段操作。在训练阶段期间, 定义了一个网络拓扑,它接收一个NxN像素区域,该区域具有各种每像素 数据通道,例如像素颜色、深度、法线、法线偏差、图元ID和反照率,并 生成最终的像素颜色。一组“代表性”训练数据是这样生成的:使用一帧 价值的低样本计数输入,并参考使用非常高的样本计数计算的“期望的” 像素颜色。网络针对这些输入进行训练,为网络生成一组“理想”权重。 在这些实施方式中,参考数据用于训练网络的权重,以将网络的输出与期 望的结果最接近地匹配。
在运行时,给定的、预先计算的理想网络权重被加载并且网络被初始 化。对于每一帧,生成去噪输入的低样本计数图像(即,与用于训练相同)。 对于每个像素,像素输入的给定邻域运行通过网络运行以预测“去噪”像 素颜色,生成去噪帧。
图15图示了初始训练实施方式。机器学习引擎1500(例如,CNN)接 收N×N像素的区域作为具有各种每像素数据通道(例如,像素颜色、深 度、法线、法线偏差、图元ID和反照率)的高样本计数图像数据1702并 生成最终的像素颜色。代表性训练数据是使用一帧价值的低样本计数输入 1501生成的。网络针对这些输入进行训练,生成一组“理想”权重1505,机器学习引擎1500随后使用这些权重在运行时对低样本计数图像进行去噪。
为了改进上述技术,增强了每帧或帧子集(例如,每N帧,其中N=2、 3、4、10、25等)生成新训练数据的去噪阶段。特别地,如图16所示,选 择每一帧中的一个或多个区域,这里称为“新参考区域”1602,其以高样 本计数渲染到单独的高样本计数缓冲器1604中。低样本计数缓冲器1603 存储低样本计数输入帧1601(包括与新参考区域1602相对应的低样本区域 1604)。
可以随机选择新参考区域1602的位置。可替代地,可以针对每个新帧 以预先指定的方式调整新参考区域1602的位置(例如,使用帧之间的区域 的预定义移动、限于帧中心的指定区域等)。
不管新的参考区域如何被选择,机器学习引擎1600使用它来不断地细 化和更新用于去噪的经训练的权重1605。特别地,来自每个新参考区域1602 的参考像素颜色和来自对应低样本计数区域1607的有噪声参考像素输入被 渲染。然后使用高样本计数参考区域1602和对应的低样本计数区域1607 在机器学习引擎1600上执行补充训练。与初始训练形成对比,对于每个新 参考区域1602在运行时期间连续执行该训练——从而确保机器学习引擎 1600得到精确训练。例如,可以评估每像素数据通道(例如,像素颜色、 深度、法线、法线偏差等),机器学习引擎1600使用这些数据通道对经训 练的权重1605进行调整。如在训练情况下(图15),机器学习引擎1600针 对一组理想权重1605进行训练,用于从低样本计数输入帧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)、长短期记忆、深水库 计算、深度信念网络、张量深堆叠网络和深预测编码网络,仅列举几例。
用于高效分布式去噪的装置和方法
如上所述,去噪已成为具有平滑、无噪声图像的实时光线追踪的关键 特征。渲染可以跨在多个设备上的分布式系统完成,但到目前为止,现有 的去噪框架都在单个机器上的单个实例上操作。如果渲染是跨多个设备完 成的,它们可能无法使所有渲染的像素可用于计算图像的去噪部分。
提出了一种分布式去噪算法,它与基于人工智能(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)。通过注意到帧之间光线命中信息中的增量可能非常稀疏,并且当 节点已经具有从先前帧收集的增量时,仅需要发送有助于该增量的样本, 可以使用进一步的内容特定的压缩。这些可以选择性地推送到收集这些样 本的节点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压缩数据以生成压缩数据2106,然后其将压缩数据2106发送 到节点2022,从而减少互连、网络、总线或其他数据通信链路上的带宽。 节点2022的压缩器/解压缩器2132然后解压缩压缩数据2106并且去噪器 2111使用解压缩的重影数据来生成比仅使用来自区域2012的数据可能的质 量更高的去噪区域2012。区域数据管理器2102可以将来自重影区域2001 的解压缩数据存储在高速缓存、存储器、寄存器文件或其他存储装置中, 以使得其在生成去噪区域2122时对去噪器2111可用。可以执行类似的一 组操作以将来自重影区域2002的数据提供给节点2021上的去噪器2100, 其使用数据与来自区域2011的数据相结合以生成更高质量的去噪区域2121。
抓取数据或渲染
如果诸如节点2021-2022之类的设备之间的连接很慢(即,低于阈值延 时和/或阈值带宽),则在本地渲染重影区域而不是从其他设备请求结果可能 更快。这可以在运行时通过针对重影区域大小追踪网络事务速度和线性外 推的渲染时间来确定。在渲染出整个重影区域更快的情况下,多个设备可 能最终渲染图像的相同部分。可以基于基本区域的方差和确定的模糊程度 来调整重影区域的渲染部分的分辨率。
负载平衡
静态和/或动态负载平衡方案可用于在各个节点2021-2023之中分配处 理负载。对于动态负载平衡,去噪滤波器所确定的方差可能需要更多的去 噪时间,但会驱动用于渲染场景的特定区域的样本量,其中,图像的低方 差和模糊区域需要更少的样本。被分配给特定节点的特定区域可以基于来 自先前帧的数据进行动态调整,或者可以在它们在渲染时跨设备被动态传 送,是的所有设备都具有相同的工作量。
图22图示了在每个相应节点2021-2022上运行的监视器2201-2202如 何收集性能度量数据,包括但不限于通过网络接口2211-2212传输数据所消 耗的时间、对区域(有和没有重影区域数据)去噪时消耗的时间、以及渲 染每个区域/重影区域所消耗的时间。监视器2201-2202将这些性能指标报 告回管理器或负载平衡器节点2201,其分析数据以识别每个节点2021-2022 上的当前工作负载并潜在地确定处理各种去噪区域2121-2122的更高效的模式。管理器节点2201然后根据检测到的负载将新区域的新工作负载分配 给节点2021-2022。例如,管理器节点2201可以向那些负载不重的节点传 输更多的工作和/或重新分配来自那些过载节点的工作。此外,负载平衡器 节点2201可以发送重新配置命令以调整每个节点执行渲染和/或去噪的具 体方式(上面描述了其中的一些示例)。
确定重影区域
重影区域2001-2002的大小和形状可以基于由去噪器2100-2111实现的 去噪算法来确定。然后可以根据被去噪样本的检测到的方差动态修改它们 相应的大小。用于AI去噪本身的学习算法本身可以用于确定适当的区域大 小,或者在其他情况下,例如双边模糊,预定的过滤器宽度将确定重影区 域2001-2002的大小。在使用学习算法的示例性实施方式中,机器学习引擎 可以在管理器节点2201上被执行和/或机器学习的部分可以在各个节点2021-2023中的每一个上被执行(参见例如图18A-18B和上面的相关联的文 本)。
收集最终图像
可以通过从节点2021-2023中的每一个收集渲染和去噪区域来生成最 终图像,而不需要重影区域或法线。例如,在图22中,去噪区域2121-2122 被传输到管理器节点2201的区域处理器2280,其组合这些区域以生成最终 去噪图像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 可以实现任何类型的机器智能,包括但不限于图像识别、映射和定位、自 主导航、语音合成、医学成像或语言翻译。
用于机器学习应用2402的硬件加速可以通过机器学习框架2404来实 现。机器学习框架2404可以在本文描述的硬件上实现,例如包括本文描述 的处理器和组件的处理系统100。具有与本文中任何其他附图的元素相同或 相似名称的针对图24描述的元素描述了与其他附图中相同的元素,可以以 与其类似的方式操作或起作用,可以包括相同的组件,并且可以链接到其 他实体,如本文其他地方所述,但不限于此。机器学习框架2404可以提供 机器学习原语的库。机器学习原语是由机器学习算法通常执行的基本操作。 在没有机器学习框架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 可以包括经由主机接口交换机2504耦合到多个GPGPU 2506A-D的处理器 2502。主机接口交换机2504可以例如是将处理器2502耦合到PCI express 总线的PCI express交换机设备,处理器2502可以通过该总线与GPGPU 2506A-D组进行通信。多个GPGPU 2506A-D中的每一个都可以是上述 GPGPU的实例。GPGPU 2506A-D可以通过一组高速点对点GPU到GPU 链路2516来互连。高速GPU到GPU链路可以通过专用GPU链路连接到 GPGPU 2506A-D中的每一个。P2P GPU链路2516实现了GPGPU 2506A-D 中的每一个之间的直接通信,而不需要通过处理器2502连接到的主机接口 总线上的通信。在GPU到GPU业务被导向P2P GPU链路的情况下,主机 接口总线保持可用于系统存储器访问或例如经由一个或多个网络设备与多 GPU计算系统2500的其他实例通信。代替经由主机接口交换机2504将 GPGPU 2506A-D连接到处理器2502,处理器2502可以包括对P2P GPU链 路2516的直接支持,并且因此直接连接到GPGPU 2506A-D。
机器学习神经网络实现
本文描述的计算架构可以被配置为执行特别适合于训练和部署用于机 器学习的神经网络的并行处理类型。神经网络可以概括为具有图关系的功 能网络。如本领域中公知的,在机器学习中使用多种类型的神经网络实施 方式。如前所述,一种示例性类型的神经网络是前馈网络。
第二种示例性类型的神经网络的是卷积神经网络(CNN)。CNN是专 门的前馈神经网络,其用于处理具有已知的网格状拓扑的数据,例如图像 数据。因此,CNN通常用于计算视觉和图像识别应用,但是它们也可以用 于其他类型的模式识别,例如语音和语言处理。CNN输入层中的节点被组 织为一组“过滤器”(受视网膜中感受野启发的特征检测器),并且每组过 滤器的输出均传播到网络的连续层中的节点。用于CNN的计算包括将卷积 数学运算应用于每个过滤器以产生该过滤器的输出。卷积是一种专门的数 学运算,其由两个函数执行以产生第三函数,该第三函数是两个原始函数 之一的修改版本。在卷积网络术语中,卷积的第一函数可以称为输入,而 第二函数可以称为卷积内核。输出可以被称为特征图。例如,卷积层的输 入可以是定义输入图像的各种颜色分量的数据的多维数组。卷积内核可以 是参数的多维数组,其中,参数通过针对神经网络的训练过程进行适应。
递归神经网络(RNN)是前馈神经网络的一族,其包括层之间的反馈 连接。RNN通过跨神经网络的不同部分共享参数数据来实现顺序数据的建 模。用于RNN的架构包括循环。循环表示变量的当前值对将来某个时间的 其自身值的影响,因为来自RNN的输出数据的至少一部分用作反馈,以用 于处理序列中的后续输入。由于可以组成语言数据的可变性质,此特征使 RNN对语言处理特别有用。
下面描述的图呈现了示例性前馈、CNN和RNN网络,并且描述了用 于分别训练和部署那些类型的网络中的每一种的一般过程。将理解的是, 这些描述是示例性的并且非限制性的,并且所示出的概念通常可以总体上 应用于深度神经网络和机器学习技术。
上述示例性神经网络可以用于执行深度学习。深度学习是使用深度神 经网络的机器学习。深度学习中使用的深度神经网络是由多个隐藏层组成 的人工神经网络,与仅包括单个隐藏层的浅神经网络相反。要训练更深的 神经网络通常更加计算密集。然而,网络的附加隐藏层实现多步模式识别, 其相对于浅机器学习技术得到减少的输出误差。
深度学习中使用的深度神经网络通常包括用于执行特征识别的前端网 络,该前端网络耦合到表示可以基于提供给模型的特征表示来执行操作(例 如,对象分类、语音识别等)的数学模型的后端网络。深度学习使机器学 习能够在不需要为模型执行手工制作的特征工程的情况下被执行。相反, 深度神经网络可以基于输入数据内的统计结构或相关性来学习特征。可以 将学习到的特征提供给数学模型,该数学模型可以将检测到的特征映射到 输出。由网络使用的数学模型通常专用于要执行的特定任务,并且将使用 不同的模型来执行不同的任务。
一旦构建了神经网络,就可以将学习模型应用于网络以训练网络执行 特定任务。学习模型描述了如何在模型内调整权重以减少网络的输出误差。 误差的反向传播是用于训练神经网络的常用方法。输入向量被呈现给网络 以进行处理。使用损失函数将网络的输出与所需的输出进行比较,并为输 出层中的每个神经元计算误差值。然后将误差值反向传播,直到每个神经 元都有相关联的误差值,该误差值大致表示其对原始输出的贡献。然后,网络可以使用算法(例如,随机梯度下降算法)从那些误差中学习,以更 新神经网络的权重。
图26-27示出了示例性卷积神经网络。图26示出了CNN内的各个层。 如图26所示,用于对图像处理进行建模的示例性CNN可以接收描述输入 图像的红、绿和蓝(RGB)分量的输入2602。输入2602可以由多个卷积层 (例如,卷积层2604、卷积层2606)处理。来自多个卷积层的输出可以可 选地由一组全连接层2608处理。全连接层中的神经元具有到前一层中所有 激活的完全连接,如先前针对前馈网络所述。来自全连接层2608的输出可 以用于生成来自网络的输出结果。可以使用矩阵乘法而不是卷积来计算全 连接层2608内的激活。并非所有的CNN实施方式都利用全连接层。例如, 在一些实施方式中,卷积层2606可以为CNN生成输出。
卷积层是稀疏连接的,这与在全连接层2608中发现的传统神经网络配 置不同。传统的神经网络层是完全连接的,使得每个输出单元都与每个输 入单元交互。然而,卷积层是稀疏连接的,因为字段的卷积的输出(而不 是该字段中每个节点的相应状态值)被输入到后续层的节点,如图所示。 与卷积层相关联的内核执行卷积运算,其输出被发送到下一层。在卷积层 内执行的降维是使CNN能够缩放以处理大图像的一个方面。
图27示出了CNN的卷积层内的示例性计算阶段。可以在卷积层2714 的三个阶段中处理CNN的卷积层的输入2712。这三个阶段可以包括卷积阶 段2716、检测器阶段2718和池化阶段2720。卷积层2714然后可以输出数 据到连续的卷积层。网络的最终卷积层可以生成输出特征图数据或将输入 提供给全连接层,例如,以生成用于CNN的输入的分类值。
在卷积阶段2716并行执行若干个卷积以产生一组线性激活。卷积阶段 2716可以包括仿射变换,其是可以被指定为线性变换加上平移的任何变换。 仿射变换包括旋转、平移、缩放以及这些变换的组合。卷积阶段计算连接 到输入中的特定区域的功能(例如,神经元)的输出,该特定区域可以被 确定为与神经元相关联的局部区域。神经元计算神经元的权重与神经元所 连接的局部输入区域之间的点积。来自卷积阶段2716的输出定义了一组线 性激活,这些线性激活由卷积层2714的连续阶段处理。
线性激活可以由检测器阶段2718处理。在检测器阶段2718中,每个 线性激活由非线性激活函数处理。非线性激活函数增加整个网络的非线性 特性,而不影响卷积层的感受野。可以使用若干种类型的非线性激活函数。 一种特定类型是整流线性单元(ReLU),其使用定义为f(x)=max(0,x)的 激活函数,使得将激活门限设为零。
池化阶段2720使用池化功能,该池化功能将卷积层2606的输出替换 为附近输出的摘要统计量。池化功能可以用于将平移不变性引入神经网络, 使得对输入的小平移不会更改池化的输出。在输入数据中特征的存在比该 特征的精确位置更为重要的情况下,本地转换的不变性可以有用。在池化 阶段2720期间可以使用各种类型的池化功能,包括最大池化、平均池化和 l2-范数池化。此外,一些CNN实施方式不包括池化阶段。相反,这样的实 施方式替代了相对于先前的卷积阶段具有增加的步幅的附加卷积阶段。
来自卷积层2714的输出然后可以由下一层2722处理。下一层2722可 以是附加的卷积层或全连接层2608之一。例如,图26的第一卷积层2604 可以输出至第二卷积层2606,而第二卷积层可以输出到全连接层2608的第 一层。
图28示出了示例性递归神经网络2800。在递归神经网络(RNN)中, 网络的先前状态影响网络当前状态的输出。可以使用各种功能以多种方式 构建RNN。RNN的使用通常围绕使用数学模型基于先前的输入序列来预测 未来。例如,RNN可以用于执行统计语言建模以在给定单词的先前序列的 情况下预测即将到来的单词。所示RNN 2800可以描述为具有:输入层2802, 其接收输入向量;隐藏层2804,以实现递归功能;反馈机制2805,以实现 先前状态的“记忆”;以及输出层2806,以输出结果。RNN 2800基于时间 步进行操作。RNN在给定时间步的状态经由反馈机制2805基于先前时间步 受到影响。对于给定时间步,隐藏层2804的状态由先前状态和当前时间步 下的输入定义。隐藏层2804可以处理第一时间步下的初始输入(x1)。隐藏 层2804可以使用在初始输入(x1)的处理期间确定的状态信息来处理第二输入(x2)。可以将给定状态计算为st=f(Uxt+Wst-1),其中,U和W是 参数矩阵。函数f通常是非线性的,例如双曲正切函数(Tanh)或整流函数 f(x)=max(0,x)的变型。然而,在隐藏层2804中使用的特定数学函数可以 取决于RNN 2800的特定实施方式细节而变化。
除了所描述的基本CNN和RNN网络之外,还可以实现那些网络上的 变型。一个示例性RNN变型是长短期记忆(LSTM)RNN。LSTM RNN能 够学习长期依赖关系,这对于处理更长的语言序列可能是必要的。CNN上 的变型是卷积深度置信网络,其具有类似于CNN的结构,并且以类似于深 度置信网络的方式进行训练。深度置信网络(DBN)是生成神经网络,其 由多层随机(任意)变量组成。可以使用贪婪无监督学习逐层训练DBN。 然后,通过确定神经网络的最佳权重初始集,可以将学习到的DBN权重用 于提供预训练神经网络。
图29示出了深度神经网络的训练和部署。一旦已经针对任务构造了给 定的网络,就使用训练数据集2902来训练神经网络。已经开发了各种训练 框架2904以实现对训练过程的硬件加速。例如,上述机器学习框架可以被 配置为训练框架。训练框架2904可以挂接到未经训练的神经网络2906中, 并且使得能够使用本文所述的并行处理资源来训练未经训练的神经网络以 生成经训练的神经网络2908。
为了开始训练过程,可以随机地活着通过使用深度置信网络的预训练 来选择初始权重。然后,以有监督或无监督的方式执行训练循环。
监督学习是这样的学习方法,其中,训练作为中介操作执行,例如当 训练数据集2902包括与输入的期望输出配对的输入时,或者在训练数据集 包括具有已知输出的输入且对神经网络输出被人工分级的情况下。网络处 理输入,并将所得输出与一组预期或期望的输出进行比较。误差然后通过 系统反向传播。训练框架2904可以调整以调整控制未经训练的神经网络 2906的权重。训练框架2904可以提供工具以监视未经训练的神经网络2906朝着适于基于已知输入数据生成正确答案的模型收敛的程度。调整网络的 权重以细化神经网络生成的输出时,训练过程重复发生。训练过程可以继 续,直到神经网络达到与经训练的神经网络2908相关联的统计上期望的精 度为止。然后可以部署经训练的神经网络2908来实现任何数量的机器学习 操作。
无监督学习是这样的学习方法,其中,网络尝试使用未标记的数据来 训练自己。因此,对于无监督学习,训练数据集2902将包括输入数据而没 有任何相关联的输出数据。未经训练的神经网络2906可以学习未标记的输 入内的分组,并且可以确定个体输入如何与整个数据集相关。可以使用无 监督训练来生成自组织图,该自组织图是一种经训练的神经网络2908,其 能够执行对减少数据的维数有用的操作。无监督训练也可以用于执行异常检测,这允许识别输入数据集中偏离数据正常模式的数据点。
也可以采用有监督和无监督训练的变型。半监督学习是这样的技术, 其中,训练数据集2902中包括具有相同分布的标记数据和未标记数据的混 合。增量学习是监督学习的变型,其中,连续使用输入数据来进一步训练 模型。增量学习使经训练的神经网络2908能够适应新数据2912,而不忘记 在初始训练期间注入网络内的知识。
不管是有监督的还是无监督的,对于单个计算节点而言,用于特别深 的神经网络的训练过程可能过于计算密集。代替使用单个计算节点,可以 使用计算节点的分布式网络来加速训练过程。
图30A是示出分布式学习的框图。分布式学习是这样的训练模型,其 使用多个分布式计算节点(例如,上述的节点)来执行神经网络的有监督 或无监督训练。分布式计算节点可以均包括一个或多个主机处理器和一个 或多个通用处理节点,例如高度并行通用图形处理单元。如图所示,可以 通过模型并行性3002、数据并行性3004或模型与数据并行性的组合来执行 分布式学习。
在模型并行性3002中,分布式系统中的不同计算节点可以对单个网络 的不同部分执行训练计算。例如,神经网络的每一层都可以由分布式系统 的不同处理节点进行训练。模型并行性的好处包括缩放到特别大的模型的 能力。拆分与神经网络不同层相关联的计算实现训练非常大的神经网络, 其中,所有层的权重将无法放入单个计算节点的存储器中。在一些情况下, 模型并行性在执行大型神经网络的无监督训练中尤其有用。
在数据并行性3004中,分布式网络的不同节点具有模型的完整实例, 并且每个节点接收数据的不同部分。然后将来自不同节点的结果合并。尽 管用于数据并行性的不同方法是可能的,但数据并行训练方法都需要组合 结果并在每个节点之间同步模型参数的技术。用于组合数据的示例性方法 包括参数平均和基于更新的数据并行性。参数平均在训练数据的子集上训 练每个节点,并将全局参数(例如,权重、偏差)设置为来自每个节点的 参数的平均值。参数平均使用维护参数数据的中央参数服务器。基于更新 的数据并行性类似于参数平均,除了不是将参数从节点传输到参数服务器, 而是传输对模型的更新。另外,可以以去中心化的方式执行基于更新的数 据并行性,其中,更新被压缩并在节点之间传输。
可以例如在其中每个计算节点包括多个GPU的分布式系统中实现组合 的模型和数据并行性3006。每个节点可以具有模型的完整实例,其中,每 个节点内的单独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 可以将这些操作的至少一部分卸载到GPGPU 3106。
GPGPU 3106可以包括处理集群,例如在高度并行的通用图形处理单元 DPLAB00内的处理集群DPLAB06A-DPLAB06H的低功率配置。GPGPU 3106内的处理集群可以支持专门优化以在经训练的神经网络上执行推理计 算的指令。例如,GPGPU 3106可以支持用于执行低精度计算的指令,例如 8位和4位整数矢量运算。
光线追踪架构
在一种实施方式中,图形处理器包括用于执行实时光线追踪的电路和/ 或程序代码。一组专用的光线追踪核可以被包括在图形处理器中以执行本 文描述的各种光线追踪操作,包括光线穿过和/或光线相交操作。除了光线 追踪核之外,还可以包括用于执行可编程着色操作的多组图形处理核和用 于对张量数据执行矩阵运算的多组张量核。
图31图示了一个这样的图形处理单元(GPU)3105的示例性部分,其包 括布置成多核组3100A-N的图形处理资源的专用集合。图形处理单元(GPU) 3105可以是图形处理器300、GPGPU 1340和/或本文描述的任何其他图形 处理器的变体。因此,图形处理器的任何特征的公开也公开了与GPU 3105 的对应组合,但不限于此。此外,具有与本文中任何其他附图的元素相同 或相似名称的针对图31描述的元素描述了与其他附图中相同的元素,可以 以与其类似的方式操作或起作用,可以包括相同的组件,并且可以链接到 其他实体,如本文其他地方所述,但不限于此。虽然仅提供了单个多核组 3100A的细节,但应意识到,其他多核组3100B-N可配备有相同或相似的 图形处理资源集合。
如图所示,多核组3100A可包括一组图形核3130、一组张量核3140 和一组光线追踪核3150。调度器/分派器3110调度并分派图形线程以在各 个核3130、3140、3150上执行。一组寄存器文件3120存储在执行图形线 程时由核3130、3140、3150使用的操作数值。这些可以包括例如用于存储 整数值的整数寄存器、用于存储浮点值的浮点寄存器、用于存储打包数据 元素(整数和/或浮点数据元素)的矢量寄存器以及用于存储张量/矩阵值的 分片寄存器。分片寄存器可以被实现为矢量寄存器的组合集合。
一个或多个级别1(L1)高速缓存和纹理单元3160在每个多核组3100A 内本地地存储图形数据,例如纹理数据、顶点数据、像素数据、光线数据、 边界体积数据等。由多核组3100A-N的全部或子集共享的2级(L2)高速 缓存3180存储用于多个并发图形线程的图形数据和/或指令。如图所示,L2 高速缓存3180可以跨多个多核组3100A-N共享。一个或多个存储器控制器 3170将GPU 3105耦合到存储器3198,该存储器可以是系统存储器(例如,DRAM)和/或本地图形存储器(例如,GDDR6存储器)。
输入/输出(IO)电路3195将GPU 3105耦合到一个或多个IO设备3195, 例如数字信号处理器(DSP)、网络控制器或用户输入设备。片上互连可以 用于将I/O设备3190耦合到GPU 3105和存储器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×N× 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)可以包括对光线追踪指令 集的硬件支持,例如微软的DirectX光线追踪(DXR),其包括DispatchRays 命令以及光线生成、最接近命中、任何命中和未命中着色器,其实现针对 每个对象指派纹理和着色器的独特集合。可以由光线追踪核3150、图形核 3130和张量核3140支持的另一个光线追踪平台是Vulkan1.1.85。然而,注 意到,本发明的基本原理不限于任何特定的光线追踪ISA。
通常,各种核3150、3140、3130可以支持光线追踪指令集,该光线追 踪指令集包括用于光线生成、最接近命中、任何命中、光线图元相交、每 图元和层次结构边界框构造、未命中、访问和例外的指令/功能。更具体地, 可以包括用于执行以下功能的光线追踪指令:
光线生成-可以针对每个像素、样本或其他用户定义的工作分配执行 光线生成指令。
最接近命中-可以执行最接近命中指令以定位光线与场景内图元的最 接近的相交。
任何命中-任何命中指令标识光线与场景内的图元之间的多个相交, 从而潜在地标识新的最接近的相交。
相交-相交指令执行光线图元相交测试并输出结果。
每图元边界框构造-该指令围绕给定的图元或一组图元构建边界框 (例如,在构建新的BVH或其他加速度数据结构时)。
未命中-指示光线未命中场景或场景的指定区域内的所有几何结构。
访问-指示光线将穿过的子体积。
异常-包括各种类型的异常处理程序(例如,针对各种错误条件调用 的)。
层次结构光束追踪
边界体积层次结构通常用于提高对图形图元和其他图形对象执行操作 的效率。BVH是基于一组几何对象构建的层次结构树结构。树结构的顶部 是根节点,它包含给定场景中的所有几何对象。各个几何对象被包裹在形 成树的叶节点的边界体积中。然后将这些节点被分组为小集合并包括在更 大的边界体积内。反过来,这些更大的边界体积也被分组并以递归方式包 括在其他更大的边界体积中,最终产生一个树结构,在树的顶部有单个边界体积,由根节点表示。边界体积层次结构用于高效地支持对几何对象集 合的各种操作,例如碰撞检测、图元剔除和光线追踪中使用的光线穿过/相 交操作。
在光线追踪架构中,光线穿过BVH以确定光线-图元相交。例如,如 果一条光线不穿过BVH的根节点,则该光线不会与BVH所包括的任何图 元相交,并且不需要关于这组图元对光线进行进一步处理。如果光线穿过 BVH的第一个子节点但不穿过第二个子节点,则不需要针对第二个子节点 所包括的任何图元测试该光线。以这种方式,BVH提供了一种高效的机制 来测试光线-图元相交。
被称为“光束”的连续光线组可以针对BVH进行测试,而不是各个光 线。图32图示了由四个不同光线勾勒出的示例性光束3201。与由四条光线 定义的片(patch)3200相交的任何光线都被认为是在同一光束内。虽然图 32中的光束3201由光线的矩形排列来定义,但是可以以各种其他方式来定 义光束,同时仍然符合本发明的基本原理(例如,圆形、椭圆形等)。
图33图示了GPU 3320的光线追踪引擎3310如何实现本文描述的光束 追踪技术。特别地,光线生成电路3304生成要对其执行穿过和相交操作的 多条光线。然而,不是对各个光线执行穿过和相交操作,而是使用由光束 层次构造电路3305生成的光束层次结构3307来执行穿过和相交操作。光 束层次结构类似于边界体积层次结构(BVH)。例如,图34提供了可以细分 为多个不同分量的主光束3400的示例。特别地,主光束3400可以被划分 为象限3401-3404,并且每个象限本身可以被划分为子象限,例如象限3404 内的子象限A-D。可以以多种方式细分主光束。例如,主光束可以被划分 成两半(而不是象限)并且每一半可以被划分成两半,依此类推。不管如 何进行细分,以与BVH类似的方式生成层次结构,例如,其中:根节点表 示主光束3400;子节点的第一级,每个由象限3401-3404表示;针对每个 子象限AD的第二级子节点;依此类推。
一旦构造了光束层次结构3307,穿过/相交电路3306就可以使用光束 层次结构3307和BVH 3308执行穿过/相交操作。特别地,它可以针对不与 BVH的任何部分相交的光束的剔除部分和BVH测试光束。使用图34中所 示的数据,例如,如果与子区域3402和3403相关联的子光束不与BVH或 BVH的特定分支相交,则它们可以关于BVH或分支进行剔除。剩余部分 3401、3404可以通过执行深度优先搜索或其他搜索算法来针对BVH进行测 试。
用于光线追踪的方法在图35中示出。该方法可以在上述图形处理架构 的上下文内实现,但不限于任何特定架构。
在3500处,构造包括多条光线的主光束,并且在3501处,光束被细 分并且层次结构数据结构被生成以创建光束层次结构。操作3500-3501可以 作为从多条光线构造光束层次结构的单个集成操作来执行。在3502处,光 束层次结构与BVH一起使用以(从光束层次结构)剔除光线和/或从BVH 中剔除节点/图元。在3503,确定剩余光线和图元的光线-图元相交。
分布式光线追踪系统中的有损和无损分组压缩
光线追踪操作可以跨通过网络耦合在一起的多个计算节点分布。例如, 图36图示了包括多个光线追踪节点3610-3613的光线追踪集群3600,光线 追踪集群3600并行地执行光线追踪操作,潜在地在节点之一上组合结果。 在所示架构中,光线追踪节点3610-3613经由网关通信耦合到客户端侧光线 追踪应用3630。
分布式架构的困难之一是必须在光线追踪节点3610-3613中的每一个 之间传输的大量分组化数据。无损压缩技术和有损压缩技术二者都可用于 减少光线追踪节点3610-3613之间传输的数据。
为了实现无损压缩,不是发送填充有某些类型操作的结果的分组,而 是发送允许接收节点重构结果的数据或命令。例如,随机采样的区域光和 环境遮挡(AO)操作不一定需要方向。因此,发送节点可以简单地发送随机 种子,然后接收节点使用该种子来执行随机采样。例如,如果场景跨节点 3610-3612分布,要在点p1-p3对灯光1进行采样,只需将灯光ID和来源 发送到节点3610-3612。每个节点然后可以独立地随机采样灯光。随机种子 可以由接收节点生成。类似地,对于主光线命中点,可以在节点3610-3612 上计算环境遮挡(AO)和软阴影采样,而不等待用于连续帧的原始点。此外, 如果已知一组光线将去往同一点光源,则可以向接收节点发送识别该光源 的指令,该接收节点将其应用于该组光线。作为另一个示例,如果有N个 环境遮挡光线传输到单个点,则可以从该点发送命令以生成N个样本。
各种附加技术可以应用于有损压缩。例如,可以采用量化因子来量化 与BVH、图元和光线相关联的所有坐标值。此外,用于数据(例如,BVH 节点和图元)的32位浮点值可以转换为8位整数值。在示例性实施方式中, 光线分组的边界以全精度存储,但各个光线点P1-P3作为对边界的索引偏 移来传输。类似地,可以生成多个局部坐标系,它们使用8位整数值作为 局部坐标。可以使用全精度(例如,32位浮点)值来对这些局部坐标系中 的每一个的原点的位置进行编码,从而有效地连接全局坐标系和局部坐标 系。
以下是无损压缩的示例。光线追踪程序中内部使用的光线数据格式示 例如下:
struct Ray
{
uint32 pixId;
uint32 materialID;
uint32 instanceID;
uint64 primitiveID;
uint32 geometryID;
uint32 lightID;
float origin[3];
float direction[3];
float t0;
float t;
float time;
float normal[3];//用于几何相交
float u;
float v;
float wavelength;
float phase;//干涉量度(Interferometry)
float refractedOffset;//Schlieren-esque
float amplitude;
float weight;
};
代替为生成的每个节点发送原始数据,可以通过对值进行分组并通过 在可能的情况下使用适用的元数据创建隐式光线来压缩该数据。
捆绑和分组光线数据
标志可用于公共数据或带有修饰符的掩码。
struct RayPacket
{
uint32 size;
uint32 flags;
list<Ray>rays;
}
例如:
RayPacket.rays=ray_1to ray_256
原点都是共享的
除了跨所有光线仅存储单个原点之外,所有光线数据都被打包。RayPacket.flags针对RAYPACKET_COMMON_ORIGIN被设置。当 RayPacket在被接收时解包时,原点是从单个原点值填入的。
原点仅在一些光线之中共享
除了共享原点的光线之外,所有光线数据都被打包。对于每组独特的 共享原点,算子被打包,其上标识操作(共享原点)、存储原点并屏蔽哪些 光线共享信息。这样的操作可以在节点之中的任何共享值上完成,例如材 质ID、图元ID、原点、方向、法线等。
struct RayOperation
{
uint8 operationID;
void*value;
uint64 mask;
}
发送隐式光线
很多时候,可以在接收端上用用于生成其的最少的元信息来导出光线 数据。一个非常常见的示例是生成多条次级光线来对一个区域进行随机采 样。发送者可以发送关于需要用任何依赖信息生成一条光线的命令,并且 然后在接收端上生成光线,而不是发送方生成次级光线,发送它,并且接 收者对其进行操作。在需要发送者首先生成光线以确定将其发送到哪个接 收者的情况下,生成光线并且可以发送随机种子以重新生成完全相同的光 线。
例如,为了用对面光源进行采样的64条阴影光线对命中点进行采样, 所有64条光线与来自相同计算N4的区域相交。创建了具有共同原点和法 线的RayPacket。如果希望接收者对生成的像素贡献进行着色,则可以发送 更多数据,但在此示例中,让我们假设我们希望仅返回光线是否命中另一 个节点数据。为生成阴影光线操作创建了一个RayOperation,并为其分配要 采样的lightID的值和随机数种子。当N4接收到光线分组时,它通过将共 享的原点数据填充到所有光线并基于用随机数种子随机采样的lightID设置方向以生成与原始发送者生成的光线相同的光线,来生成完全填充的光线 数据。在返回结果时,只需要针对每条光线返回二进制结果,其可以通过 光线上的掩码传递。
在该示例中发送原始的64条光线将使用104字节*64条光线=6656字 节。如果返回的光线也以原始形式发送,那么这也会增加一倍,达到13312 字节。使用无损压缩,其中仅发送普通光线原点、法线和光线生成操作(具 有种子和ID),仅发送29个字节,其中为相交的掩码返回8个字节。这得 到需要通过网络发送的数据压缩率~360:1。这不包括用于处理消息本身的开 销,该开销将需要以某种方式识别,但这取决于实施方式。可以进行其他操作以根据pixeID为主光线重新计算光线原点和方向,基于RayPacket中的 范围重新计算pixeID,以及用于重新计算值的许多其他可能的实施方式。 类似的操作可用于发送的任何单个或一组光线,包括阴影、反射、折射、 环境遮挡、相交、体积相交、着色、路径追踪中的反弹反射等。
图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和/或CPU3199核上执行光线追踪操作的混合渲染管线。例如,可以 在图形核3130上执行光栅化和深度测试来代替主光线投射阶段。光线追踪 核3150然后可以生成用于光线反射、折射和阴影的次级光线。此外,其中 光线追踪核3150将执行光线追踪操作(例如,基于材料属性阈值,例如高 反射率水平)的场景的某些区域将被选择,而在图形核3130上利用光栅化 渲染场景其他区域。这种混合实施方式可用于实时光线追踪应用-其中,延 时是一个关键问题。
下面描述的光线穿过架构可以例如使用现有的单指令多数据(SIMD)和 /或单指令多线程(SIMT)图形处理器来执行光线穿过的可编程着色和控制, 同时使用专用硬件加速关键功能,例如BVH穿过和/或相交。通过在穿过期 间和着色之前在特定点处重新组合生成的着色器,可以改善不一致路径的 SIMD占用率。这是使用在片上动态排序着色器的专用硬件来实现的。通过 将函数拆分为在返回时执行的连续并在执行前重新组合连续以提高SIMD 占用率,来管理递归。
光线穿过/相交的可编程控制是通过将穿过功能分解为可以作为固定功 能硬件实现的内部穿过和在GPU处理器上执行并通过用户定义的穿过着色 器实现可编程控制的外部穿过来实现的。通过在内部穿过和外部穿过之间 的转换期间保守地截断内部穿过状态,来降低在硬件和软件之间转移穿过 上下文的成本。
光线追踪的可编程控制可以通过下表A中列出的不同着色器类型来表 达。每种类型可以有多个着色器。例如,每种材质都可以有不同的命中着 色器。
Figure BDA0003167720240000751
Figure BDA0003167720240000761
表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将由SIMD核/EU 4001产生的工作分发给调度器4007, 根据需要访问空闲堆栈池、排序电路4008或光线-BVH相交电路4005。如 果附加工作被发送到调度器4007,它被调度用于在SIMD/SIMT核/EU 4001 上进行处理。在调度之前,排序电路4008可以将光线分类成组或箱(bin), 如本文所述的(例如,将具有相似特性的光线分组在一起)。光线-BVH相 交电路4005使用BVH体积执行光线的相交测试。例如,光线-BVH相交电 路4005可以将光线坐标与BVH的每个级别进行比较以识别与光线相交的体积。
着色器可以使用着色器记录、用户分配的结构(包括指向入口函数的 指针)、供应商特定的元数据和的全局参数来向由SIMD核/EU 4001执行的 着色器引用。着色器的每个执行实例与调用栈相关联,调用栈可用于存储 在父着色器和子着色器之间传递的参数。调用栈还可以存储对在调用返回 时被执行的连续函数的引用。
图41图示了一组示例指派堆栈4101,其包括主着色器堆栈、命中着色 器堆栈、穿过着色器堆栈、连续函数堆栈和光线-BVH相交堆栈(如所述, 其可以由固定功能硬件4010执行)。新的着色器调用可以实现来自空闲堆 栈池4102的新堆栈。调用栈(例如,由指派的堆栈集合包括的堆栈)可以 被缓存在本地L1高速缓存4003、4006中以减少访问的延时。
可能存在有限数量的调用栈,每个调用栈具有分配在连续存储器区域 中的固定最大大小“Sstack”。因此,堆栈的基地址可以直接从堆栈索引(SID) 计算为基地址=SID*Sstack。当将工作调度到SIMD核/EU 4001时,可以由 调度器4007分配和解除分配堆栈ID。
主分派器4009可以包括图形处理器命令处理器,其响应于来自主机(例 如,CPU)的分派命令而分派主着色器。如果调度器4007可以为每个SIMD 通道(lane)分配堆栈ID,则调度器4007可以接收这些分派请求并且在SIMD 处理器线程上启动主着色器。堆栈ID可以从在分派命令开始处初始化的空 闲堆栈池4102分配。
执行着色器可以通过向消息传递单元4004发送生成消息来生成子着色 器。该命令包括与着色器相关联的堆栈ID并且还包括指向每个活动SIMD 通道的子着色器记录的指针。父着色器只能为活动通道发出一次此消息。 在为所有相关通道发送生成的消息后,父着色器可以终止。
在SIMD核/EU 4001上执行的着色器还可以使用带有为固定功能硬件 保留的着色器记录指针的生成消息来生成固定功能任务,例如光线-BVH相 交。如上所述,消息传递单元4004将产生的光线-BVH相交工作发送到固 定功能光线-BVH相交电路4005,并将可调用着色器直接发送到排序电路 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可 以是对应的着色器记录指针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可以添加到批次中。否则,可能会创建具有新着色器记 录指针标志的新条目,这可能会逐出具有不完整批次的较旧条目。
当调用栈为空时,执行着色器可以通过向消息单元发送解除分配消息 来解除分配该调用栈。解除分配消息被中继到调度器,调度器将活动SIMD 通道的堆栈ID/上下文ID返回到空闲池。
提出了使用固定功能光线穿过和软件光线穿过的组合的光线穿过操作 的混合方法。因此,它提供了软件穿过的灵活性,同时保持了固定功能穿 过的效率。图43示出了可用于混合穿过的加速结构,其是具有单个顶级别 BVH 4300和多个底级别BVH 4301和4302的两级树。图形元素显示在右 侧以指示内部穿过路径4303、外部穿过路径4304、穿过节点4305、具有三 角形的叶节点4306和具有自定义图元的叶节点4307。
具有顶级别BVH 4300中的三角形4306的叶节点可以参考三角形、用 于自定义图元的相交着色器记录或穿过着色器记录。底级别BVH 4301-4302中具有三角形4306的叶节点只能为自定义图元引用三角形和相 交着色器记录。引用类型在叶节点4306内编码。内部穿过4303指的是在 每个BVH4300-4302内的穿过。内部穿过操作包括计算光线-BVH相交,并且跨BVH结构4300-4302的穿过被称为外部穿过。内部穿过操作可以在固 定功能硬件中高效地实现,而外部穿过操作可以用可编程着色器以可接受 的性能执行。因此,可以使用固定功能电路4010来执行内部穿过操作,并 且可以使用包括用于执行可编程着色器的SIMD/SIMT核/EU 4001的着色 器执行电路4000来执行外部穿过操作。
注意,为了简单起见,SIMD/SIMT核/EU 4001有时在本文中简称为“核”、 “SIMD核”、“EU”或“SIMD处理器”。类似地,光线-BVH穿过/相交电 路4005有时简称为“穿过单元”、“穿过/相交单元”或“穿过/相交电路”。 当使用替代术语时,用于指定相应电路/逻辑的特定名称不会改变电路/逻辑 执行的底层功能,如本文所述。
此外,虽然为了解释的目的在图40中被图示为单个组件,但穿过/相交 单元4005可以包括不同的穿过单元和单独的相交单元,其中的每一个可以 在电路和/或逻辑中实现,如本文所述。
当光线在内部穿过期间与穿过节点相交时,可以产生穿过着色器。排 序电路4008可以通过着色器记录指针4201A-B、n对这些着色器进行分组 以创建由调度器4007启动的SIMD批次,以用于在图形SIMD核/EU 4001 上的SIMD执行。穿过着色器可以以多种方式修改穿过,以实现广泛的应 用。例如,穿过着色器可以选择更粗略的细节级别(LOD)的BVH或变换光 线以实现刚体变换。穿过着色器然后可以为选定的BVH产生内部穿过。
内部穿过通过穿过BVH并计算光线-框和光线-三角形相交来计算光线 -BVH相交。通过将消息发送到消息传递电路4004(其将对应的生成消息 中继到计算光线-BVH相交的光线-BVH相交电路4005,来以与着色器相同 的方式产生内部穿过。
用于内部穿过的堆栈可以本地存储在固定功能电路4010中(例如,在 L1高速缓存4006内)。当一条光线与对应于穿过着色器或相交着色器的叶 节点相交时,可以终止内部穿过并且截断内部堆栈。截断的堆栈连同指向 光线和BVH的指针可以被写入存储器中的由调用着色器指定的位置,并且 然后可以生成对应的穿过着色器或相交着色器。如果光线在内部穿过期间 与任何三角形相交,则可以将相应的命中信息作为输入参数提供给这些着色器,如下面的代码所示。这些产生的着色器可以由排序电路4008分组以 创建用于执行的SIMD批次。
struct HitInfo{
float barycentrics[2];
float tmax;
bool innerTravComplete;
uint primID;
uint geomID;
ShaderRecord*leafShaderRecord;
}
截断内部穿过堆栈降低了将其溢出到存储器的成本。可以应用Restart Trailfor Stackless BVH Traversal,High Performance Graphics(2010),pp. 107-111中描述的方法,将堆栈截断为堆栈顶部处的少量条目,42位的重 启轨迹和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效率执行。光 线穿过的可编程控制实现了几个重要的特征,例如程序实例化、随机细节 级别选择、自定义图元相交和惰性BVH更新。
还提供了支持命中和相交着色器的推测执行的可编程、多指令多数据 (MIMD)光线追踪架构。特别地,该架构专注于减少上文关于图40描述的 可编程SIMD/SIMT核/执行单元4001与混合光线追踪架构中的固定功能 MIMD穿过/相交单元4005之间的调度和通信开销。下面描述了命中和相交 着色器的多种推测执行方案,这些着色器可以从穿过硬件以单批次被分派, 避免多次穿过和着色往返。可以使用专用电路来实现这些技术。
本发明的实施例在需要从光线穿过查询执行多个命中或相交着色器的 用例中特别有益,该查询在没有专用硬件支持的情况下被实现时将施加显 著的开销。这些包括但不限于最近k命中查询(为k个最接近的相交启动 命中着色器)和多个可编程相交着色器。
本文描述的技术可以实现为对图40中所示的架构的扩展(并且关于图 40-44进行描述)。特别地,本发明的当前实施例建立在具有增强的该架构 上以提高上述用例的性能。
混合光线追踪穿过架构的性能限制是从执行单元启动穿过查询的开销 和从光线追踪硬件调用可编程着色器的开销。当在同一光线的穿过期间调 用多个命中或相交着色器时,这种开销在可编程核4001与穿过/相交单元 4005之间生成“执行往返”。这也给需要从各个着色器调用提取SIMD/SIMT 一致性的排序单元4008带来了附加的压力。
光线追踪的若干方面需要可编程控制,其可以通过以上表A中列出的 不同着色器类型(即,主要、命中、任何命中、未命中、相交、穿过和可调 用)来表达。每种类型可以有多个着色器。例如,每种材质都可以有不同的 命中着色器。这些着色器类型中的一些在当前的
Figure BDA0003167720240000821
Ray Tracing 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、或本文描述的任何其他核/执行单元。SIMD/SIMT 核/执行单元4001可用于代替图形核415A-415B、着色器核1355A-N、图形 核3130、图形执行单元608、执行单元852A-B或本文描述的任何其他核/ 执行单元。因此,结合图形核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准备好 将新的硬件线程指派给产生消息时,它加载穿过状态并对BVH执行穿过。 在BVH上的第一穿过步骤之前,还存在需要被执行设置成本。
图45图示了可编程光线追踪管线的操作流。包括穿过4502和相交4503 的被着色元素可以在固定功能电路中实现,而其余元素可以用可编程核/执 行单元来实现。
主光线着色器4501在4502处将工作发送到穿过电路,穿过电路将当 前光线穿过BVH(或其他加速结构)。当到达叶节点时,穿过电路在4503 处调用相交电路,该电路在识别光线-三角形相交后,在4504处调用任何命 中着色器(其可以将结果提供回所指示的穿过电路)。
可替代地,可以在到达叶节点和在4507调用处最接近命中着色器(如 果记录了命中)或在4506处调用未命中着色器(在未命中的情况下)之前 终止该穿过。
如4505处所示,如果穿过电路到达自定义图元叶节点,则可以调用相 交着色器。自定义图元可以是任何非三角形图元,例如多边形或多面体(例 如,四面体、体素、六面体、楔形、金字塔或其他“非结构化”体积)。相 交着色器4505向实现任何命中处理的任何命中着色器4504识别光线和自 定义图元之间的任何相交。
当硬件穿过4502到达可编程阶段时,穿过/相交单元4005可以生成到 相关着色器4505-4507的着色器分派消息,其对应于用于执行该着色器的执 行单元的单个SIMD通道。由于分派以任意光线顺序发生,并且它们在调 用的程序中是发散的,因此排序单元4008可以累积多个分派调用以提取一 致的SIMD批次。更新的穿过状态和可选的着色器参数可由穿过/相交单元 4005写入到存储器2511中。
在k最接近相交问题中,对前k个相交执行最接近命中着色器4507。 在传统方式中,这意味着在找到最接近的相交时结束光线穿过,调用命中 着色器,并从命中着色器产生一条新光线以找到下一个最接近相交(具有 光线原点偏移,因此相同的相交不会再次发生)。很容易看出,对于单个光 线,此实施方式需要k个光线产生。另一个实施方式与任何命中着色器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用例,这种方法的好处是,不是k-1次到SIMD核/EU 4001 的往返和k-1条新光线产生消息,而是在穿过电路4005上的单个穿过操作 期间从同一穿过线程调用所有命中着色器。潜在实施方式的一个挑战是: 保证命中着色器的执行顺序不是琐碎的(标准的“往返”方法保证首先执 行最接近相交的命中着色器,等等)。这可以通过同步命中着色器或放宽排 序来解决。
对于相交着色器用例,穿过电路4005事先不知道给定的着色器是否会 返回正(positive)相交测试。但是,可以推测性地执行多个相交着色器, 并且如果至少一个返回正命中结果,则将其合并到全局最近的命中中。具 体实施方式需要找到最优数量的延迟的相交测试,以减少分派调用的次数, 但避免调用过多的冗余相交着色器。
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图示了着色器延迟/聚合器电路 4706在调度器4007可以推迟与特定SIMD/SIMT线程/通道相关联的着色器 的调度,直到已经发生了指定的触发事件。在检测到触发事件时,调度器 4007将单个SIMD/SIMT批次中的多个聚合着色器分派到核/EU4001。
图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中的任一个可以执行指令。可替代地或附加地,指令可 由光线追踪核3150和/或张量核张量核3140上的执行电路来执行。
图49图示了用于执行下面描述的光线追踪指令的架构。所示架构可以 集成在上述核3130、3140、3150中的一个或多个内(参见例如图31和相 关联的文本),或者可以被包括在不同的处理器架构中。
在操作中,指令提取单元4903从存储器3198提取光线追踪指令4900, 并且解码器4995对指令进行解码。在一种实施方式中,解码器4995解码 指令以生成可执行操作(例如,微编码的核中的微操作或uops)。可替代地, 可以在不解码的情况下执行一些或所有光线追踪指令4900,因此不需要解 码器4904。
在任一实施方式中,调度器/分派器4905跨一组功能单元(FU)4910-4912 调度和分派指令(或操作)。图示的实施方式包括矢量FU 4910和标量FU 4911,矢量FU 4910用于执行对存储在矢量寄存器4915中的多个打包数据 元素并发地操作的单指令多数据(SIMD)指令,标量FU 4911用于对存储在 一个或多个标量寄存器4916中的标量值进行操作。可选的光线追踪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子树以减少存储和带宽要求。去量化 指令可以采用dequantizedest src0 src1 src2的形式,其中,源寄存器src0存 储N个无符号字节,源寄存器src1存储1个无符号字节,源寄存器src2存 储1个浮点值,并且目标寄存器dest存储N个浮点值。所有这些寄存器都 可以是矢量寄存器4915。可替代地,src0和dest可以是矢量寄存器4915,而src 1和src2可以是标量寄存器4916。
以下代码序列定义了去量化指令的一种特定实施方式:
Figure BDA0003167720240000891
在此示例中,ldexp将双精度浮点值乘以指定的2的整数幂(即,ldexp(x,exp) =x*2exp)。在上面的代码中,如果与当前SIMD数据元素(execMask[i]))相 关联的执行掩码值设置为1,则src0中位置i处的SIMD数据元素被转换为 浮点值并乘以src1中的值的整数幂(2src1值),并将该值添加到src2中对应 的SIMD数据元素。
选择性最小值或最大值
如位掩码中的位所指示的,选择性最小值或最大值指令可以每个通道 执行最小值或最大值操作(即,返回一组值的最小值或最大值)。位掩码可 以利用矢量寄存器4915、标量寄存器4916或单独的一组掩码寄存器(未示 出)。以下代码序列定义了最小值/最大值指令的一种特定实施方式: sel_min_max dest src0 src1 src2,其中,src0存储N个双字,src1存储N个 双字,src2存储一个双字,并且目标寄存器存储N个双字。
以下代码序列定义了选择性最小值/最大值指令的一种特定实施方式:
Figure BDA0003167720240000901
在本例中,(1<<i)&src2的值(1左移i和src2相与的结果)用于选择src0 和src1中第i个数据元素的最小值或src0和src1中的第i个数据元素的最 大值。仅当与当前SIMD数据元素(execMask[i]))相关联的执行掩码值设置 为1时,才对第i个数据元素执行该操作。
混洗索引指令(Shuffle Index Instruction)
混洗索引指令可以将任何一组输入通道复制到输出通道。对于32的 SIMD宽度,该指令可以以较低的吞吐量执行。该指令采用以下形式: shuffle_index dest src0 src1<optional flag>,其中,src0存储N个双字,src1 存储N个无符号字节(即,索引值),并且dest存储N个双字。
以下代码序列定义了混洗索引指令的一种特定实施方式:
Figure BDA0003167720240000902
Figure BDA0003167720240000911
在上面的代码中,srcl中的索引标识了当前通道。如果执行掩码中的第 i个值设置为1,则执行检查以确保源通道在0到SIMD宽度的范围内。如 果是,则设置标志(srcLaneMod)并且将目标的数据元素i设置为等于src0的 数据元素i。如果通道在范围内(即,有效),则来自src1的索引值(srcLane0) 用作到src0中的索引(dst[i]=src0[srcLane])。
立即数混洗Up/Dn/XOR指令
立即数混洗指令可以基于指令的立即数来混洗输入数据元素/通道。立 即数可以基于立即数的值来指定将输入通道移位1、2、4、8或16个位置。 可选地,可以将附加的标量源寄存器指定为填充值。当源通道索引无效时, 填充值(如果提供)被存储到目标中的数据元素位置。如果未提供填充值, 则数据元素位置设置为全0。
标志寄存器可以用作源掩码。如果源通道的标志位设置为1,则源通道 可以被标记为无效并且指令可以继续进行。
以下是立即数混洗指令的不同实施方式的示例:
shuffle_<up/dn/xor>_<1/2/4/8/16>dest src0<optional src1><optionalflag>
shuffle_<up/dn/xor>_<1/2/4/8/16>dest src0<optional src1><optionalflag> 在此实施方式中,src0存储N个双字,src1存储用于填充值(如果存在) 的一个双字,而dest存储包含结果的N个双字。
以下代码序列定义了立即数混洗指令的一种特定实施方式:
Figure BDA0003167720240000921
Figure BDA0003167720240000931
这里,基于立即数的值,输入数据元素/通道被移位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个双字。
以下代码序列定义了立即数混洗指令的一种特定实施方式:
Figure BDA0003167720240000932
Figure BDA0003167720240000941
因此,间接混洗指令以与上述立即数混洗指令类似的方式操作,但是 源通道到目标通道的映射由源寄存器src1而不是立即数控制。
跨通道最小值/最大值指令
对于浮点和整数数据类型,可以支持跨通道最小值/最大值指令。跨通 道最小值指令可以采用lane_min dest src0的形式,并且跨通道最大值指令 可以采用lane_maxdest src0的形式,其中,src0存储N个双字,并且dest 存储1个双字。
作为示例,以下代码序列定义了跨通道最小值的一种特定实施方式:
Figure BDA0003167720240000942
在此示例中,将源寄存器的数据元素位置i中的双字值与目标寄存器中的数 据元素进行比较,并将两个值中的最小值复制到目标寄存器。跨通道最大 值指令以基本相同的方式操作,仅有的区别是选择了位置i中的数据元素和 目标值中的最大值。
跨通道最小值/最大值索引指令
跨通道最小值索引指令可以采用lane_min_index dest src0的形式,并且 跨通道最大值索引指令可以采用lane_max_index dest src0的形式,其中src0 存储N个双字,并且dest存储1个双字。
举例来说,以下代码序列定义了跨通道最小值索引指令的一种特定实 施方式:
Figure BDA0003167720240000951
在本示例中,目标索引从0递增到SIMD宽度,跨越目标寄存器。如果设 置了执行掩码位,则源寄存器中位置i处的数据元素被复制到临时存储位置 (tmp),并且目标索引被设置为数据元素位置i。
跨通道排序网络指令
跨通道排序网络指令可以使用宽度为N(稳定)的排序网络以升序 (sortnet_min)或降序(sortnet_max)对所有N个输入元素进行排序。指 令的最小值/最大值版本可以分别采用sortnet_min dest src0和sortnet_max dest src0的形式。在一种实施方式中,src0和dest存储N个双字。对src0 的N个双字执行min/max排序,并且升序排序的元素(对于min)或降序 排序的元素(对于max)按照它们相应的排序顺序存储在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处确定的主图形线程内 完成光线追踪工作时,光线追踪指令被卸载到光线追踪执行电路,该光线 追踪执行电路可以是功能单元(FU)的形式(例如,上面关于图49所描述的), 或者其可以在专用的光线追踪核3150中(如关于图31所述的)。
在5003处,从存储器中提取并解码光线追踪指令,并且在5005处, 指令被解码为可执行操作(例如,在需要解码器的实施例中)。在5004处, 光线追踪指令被调度和分派以由光线追踪电路执行。在5005处,光线追踪 指令由光线追踪电路执行。例如,可以在上述FU(例如,矢量FU 4910、 光线追踪FU 4912等)和/或图形核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,调度器4007将工作调度到由核 /EU 4001执行的着色器。核/EU 4001可以是光线追踪核3150、图形核3130、 CPU核3199或能够执行着色器程序代码的其他类型的电路。一个或多个主 光线着色器5101处理主光线并产生要由光线追踪加速电路5110和/或核/EU 4001执行的附加工作(例如,要由一个或多个子着色器执行)。由主光线着 色器5101产生的新工作或由核/EU 4001执行的其他着色器可以被分发到排 序电路4008,排序电路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进行高 效访问。下面描述的一个特定实施例包括高带宽光线库(bank)(参见例如 图52A)。
光线追踪加速电路5110可以是本文描述的各种穿过/相交电路的变体, 包括光线-BVH穿过/相交电路4005、穿过电路4502和相交电路4503,以 及光线追踪核3150。光线追踪加速电路5110可以被使用以代替光线-BVH 穿过/相交电路4005、穿过电路4502和相交电路4503以及光线追踪核3150 或用于处理BVH堆栈和/或执行穿过/相交的任何其他电路/逻辑。因此,结 合本文描述的光线-BVH穿过/相交电路4005、穿过电路4502和相交电路 4503以及光线追踪核3150的任何特征的公开也公开了与光线追踪加速电路 5110的对应组合,但是不限于此。
参考图52A,光线穿过电路5102的一个实施例分别包括第一和第二光 线存储库5201和5202,其中每个库包括多个条目,以用于存储从存储器加 载的对应的多条入射光线5206。对应的第一和第二堆栈5203和5204分别 包括从存储器读取并本地存储以用于处理的所选择的BVH节点数据 5290-5291。如本文所述,在一个实施例中,堆栈5203-5204是“短”堆栈, 其包括有限数量的用于存储BVH节点数据的条目(例如,在一个实施例中 为六个条目)。虽然与光线库5201-5202分开示出,但是堆栈5203-5204也 可以保持在对应的光线库5201-5202内。可替代地,堆栈5203-5204可以存 储在单独的本地存储器或高速缓存中。
穿过处理电路5210的一个实施例在选择要处理的下一条光线和节点时 在两个库5201-5202和堆栈5203-5204之间交替(以ping-pong的方式)。例 如,穿过处理电路5210可以在每个时钟周期上从替代的光线库/堆栈中选择 新的光线/BVH节点,从而确保高效操作。然而,应当注意,这种特定布置 对于遵守本发明的基本原理不是必需的。
在一个实施例中,光线分配器5205基于一组库分配计数器5220的当 前相对值来平衡分别进入第一和第二存储库5201-5202的入射光线5206。 在一个实施例中,库分配计数器5220保持对第一和第二存储库5201-5202 中的每一个中的未穿过光线的数量的计数。例如,当光线分配器5205向第 一库5201添加新光线时,第一库分配计数器可以递增,并且当来自第一库 5201的光线被处理时递减。类似地,当光线分配器5205向第二库5201添 加一条新光线时,第二库分配计数器可以递增,并在处理来自第二库5201 的光线时递减。
在一个实施例中,光线分配器5205将当前光线分配给与较小计数器值 相关联的组。如果两个计数器相等,则光线分配器5205可以选择任一库或 可以从上次计数器相等时选择的库中选择不同的库。在一个实施例中,每 条光线被存储在库5201-5202之一的一个条目中并且每个库包括用于存储 多达32条光线的32个条目。然而,本发明的基本原理不限于这些细节。
图52B示出了在一个实施例中执行以管理光线存储库5201-5202和堆 栈5203-5204的四个过程5251-5254。在一个实施例中,四个过程5251-5254 是一组公共程序代码(有时在本文中称为“TraceRay”)的不同实施方式或 配置。初始过程5251可以被执行以读取光线5261并从根节点开始执行BVH 的新的自顶向下穿过。Alloc函数修改控制位并向光线追踪堆栈发出对应的 读取请求。特别是,为了分配新条目,Alloc设置有效(VLD)位并重置逐出 就绪(Evict_Rdy)位。在光线的库条目中,数据存在(DP)位和脏位被重置。对 应堆栈条目中的DP位被设置。对于对应的Hitinfo,设置DP位并重置脏位。 与节点数据关联的DP位和着色器记录标识符(SRI)DP位被重置。
实例过程5252在BVH的节点之一(除根节点之外)内执行穿过并读取光 线和先前提交的命中5262。在一个实施例中,当命中着色器之一识别光线 与图元之间的命中时,然后执行提交过程5253以提交结果、读取光线、潜 在命中以及堆栈5263。可替代地,执行继续过程5254,以继续光线的穿过、 读取光线、提交的命中以及堆栈5264。
在各种情况下,穿过电路5002必须暂停穿过操作并保存当前光线和相 关联的BVH节点,例如当需要着色器来执行一系列操作时。例如,如果命 中了非不透明对象或程序纹理,则穿过电路5002将堆栈5203-5204保存到 存储器并执行所需的着色器。一旦着色器已经完成对命中(或其他数据) 的处理,穿过电路5002就从存储器中恢复光线库5201-5202和堆栈 5203-5204的状态。
在一个实施例中,穿过/堆栈追踪器5248持续监视穿过和堆栈操作并将 重启数据存储在追踪阵列5249中。例如,如果穿过电路5002已经穿过节 点N、N0、N1、N2和N00以及和生成的结果,则穿过/堆栈追踪器5248 将更新追踪阵列以指示这些节点的穿过已经完成和/或指示从堆栈中要处理 的下一个节点。当穿过电路5002重启时,它从追踪阵列5249读取重新启 动数据,以便它可以在正确的阶段重新开始穿过,而不重新穿过任何BVH 节点(并浪费周期)。存储在追踪阵列5249中的重启数据有时被称为“重 启轨迹”或“RST”。
如图52B所示,各种TraceRay过程5251-5254通过一个或多个函数管 理进出光线存储库5201-5202的分配。如针对初始过程5251所示,Alloc 函数设置存储库条目中的有效位(VLD)(指示该条目现在包含有效光线)并 重置(Rst)逐出就绪标志(指示光线数据不应被逐出)。Ray函数将光线存 储在所选条目中并重置数据存在(DP)位(指示光线数据存储在条目中) 和脏位(指示数据尚未被修改)。在从存储库中读取了光线时,Stack函数 设置DP位并从堆栈中取回相关的BVH节点(例如,在初始过程5251的情 况下是根节点,并且在实例过程5252的情况下是另一个节点)。HitInfo函 数重置脏位并为初始函数5251设置DP位或为所有其他函数重置它。在一 个实施例中,Hitinfo产生反映光线命中的数据。Node函数重置DP位和SRI (着色器记录标识符)DP,它是着色器记录标识符的DP。一个实施例执行 内核起始指针(KSP)查找以确保KSP不等于0。如果等于,则对非不透明四 边形(Quad)实现不同的处理。
在一个实施例中,一旦在存储库5201-5202之一中已经分配了光线条目, 就执行提取以从与光线相关联的堆栈中取回节点数据(以及潜在地其他数 据)。在一个实施例中,为每条光线维护堆栈,包括光线穿过的当前节点的 工作数据集。
当移动到BVH中的下一个级别时(例如,在确定了光线与父节点相交 时),子节点被排序并被推送到堆栈5203-5204上。子节点按顺序从堆栈中 弹出并单独地处理以识别光线穿过的子节点(穿过“命中”)。在一个实施 例中,每当在RT加速电路5110和着色器4504、4506、4507、5101、5105 之间存在切换(handoff)时,堆栈就被存储到存储器或本地高速缓存/存储 之外。
当包括四边形或三角形(或其他图元类型)的叶节点被穿过电路5102 识别时,它将该信息传递到相交电路5103,相交电路5103分别对四边形或 三角形执行相交测试。如果图元不是四边形或三角形,则在一种实施方式 中,穿过电路终止穿过并将控制传递回最接近命中着色器4507(如果检测 到命中)或未命中着色器4506(如果未检测到命中)。在相交电路5103被 设计为针对附加于四边形和三角形的各种图元(例如,线、弧、圆等)执 行相交的实施方式中,然后穿过电路5102将这些图元的叶节点转发到相交 电路5103。
在一个实施例中,当硬件或软件组件生成对存储器3198或高速缓存的 读取请求时,使用16位标签来提供关于数据类型和请求者的信息。例如, 两位代码可以指定请求是针对光线、堆栈数据、命中数据、来自BVH的节 点数据还是任何其他类型的数据。当光线、堆栈和Hitinfo已从存储器中返 回时,光线穿过一个或多个BVH节点,并如上所述地执行相交测试。
在不同的处理阶段从存储器加载一个或多个堆栈5203-5204和光线 5206。例如,初始过程5251和/或实例过程5252可能需要加载新的BVH 以用于穿过。在这些情况下,堆栈5203-5204可以被初始化为BVH的顶部 节点(或“根”节点)。对于BVH内的光线连续5254,堆栈5203-5204可 以从存储器加载并被扩展。一旦准备好堆栈5203-5204,就从堆栈中获取节点数据(该操作有时在下面称为Proc_Node_Fetch)。
在一个实施例中,通过对两个非内部(NI)节点和两个内部节点发起并 行请求来获取节点数据。图53图示了一个这样的实施例,其中NI节点优 先级选择逻辑(PRISEL)5311请求双NI节点:来自库0的第一NI节点5301 和来自库1的第二NI节点5302。同时,内部节点PRISEL逻辑5312请求 双内部节点:来自库0的第一节点5303和来自库1的第二节点5304。
在一个实施例中,NI节点优先级选择逻辑(PRISEL)5311对第一NI节 点5301和第二NI节点5302中的一个进行优先化,将优先化的结果存储在 光线追踪高速缓存(RTC)中。类似地,内部节点PRISEL逻辑5312请求双内 部节点,并从第一内部节点5303和第二内部节点5304中选择优先化的结 果。
如果可能,则优先级选择逻辑5311-5312的每个实例将来自不同库的非 内部BVH节点5301-5302之一和内部BVH节点5303-5304之一优先化。在 一个实施例中,从每个库中仅选择一个请求(例如,请求5302和5304之一 以及请求5301和5303之一)。这些请求的发起也可以重置堆栈数据存在(DP) 位,如所指示的,以便响应节点获取操作而不取回该条目。在一个实施例 中,对于实例获取操作,在发送实例请求时,光线的数据存在(DP)位被 重置,并且在节点获取之后光线被变换时数据存在(DP)位最终被设置。
在一个实施例中,node_info在读取启动时被写入并且地址/标签针对读 取请求如下计算:
i.rtt_rtc_rd_addr[47:6]= rt_ray.rt_ray_ctrl.root_node_ptr[47:6]+curr_stack.child_offset; (注意:节点上的子偏移总是相对于当前BVH根节点)
ii.rtt_rtc_rd_tag[6:0]={RTT_INST,rtt_alloc_entry[5:0]};
iii.node.node_info=curr_stack.node_info.
在一个实施例中,返回的节点数据将为节点和堆栈设置DP位。
基于读取的标签可以区分以下情况:
A.内部节点:这将写入到节点
B.实例:这将为下一级BVH(1)更新rt_ray.rt_ray_ctrl并将节点结构写入。
i.root_node_ptr=node_return.StartNodePtr
ii.hitgrp_srbase_ptr=rt_ray_ctrl.hitgrp_srbase_ptr+ rt_ray_ctrl.srstride*node_return.instancecontributiontohitgrpindex
iii.hitgrp_sr_stride=rt_ray_ctrl.srstride*rt_ray_ctrl.shade_indx_mult
iv.inst_leaf_ptr=rt_ray.rt_ray_ctrl.root_node_ptr+ stack.current_node.child_offset→只是逻辑视图,在实例节点获取 请求本身期间抓取并存储节点获取地址
v.{miss_sr_ptr,shader_indx_mult,mask}= {rt_ray[0].rt_ray_ctrl.miss_sr_ptr,rt_ray[0].rt_ray_ctrl. shader_indx_mult,rt_ray[0].rt_ray_ctrl.mask}□Preserve BVH[0]
vi.flag[0]=rt_ray[0].rt_ray_ctrl.flag[0]|(~rt_ray[0].rt_ray_ctrl.flag[1] &Node_Return.flag[2]);→通过光线或通过实例标志保留不透明 (仅当光线标志不是强制非不透明时)
vii.flag[1]=(rt_ray[0].rt_ray_ctrl.flag[1])|(~rt_ray[0].rt_ray_ctrl.flag[0] &Node_Return.flag[3]);→通过光线或通过实例标志保留非不透 明(仅当光线标志不是强制不透明时)
viii.flag[3:2]=rt_ray[0].rt_ray_ctrl.flag[3:2];→(接受第一命中并结束搜索或跳过最接近命中着色器)Preserve BVH[0]
ix.flag[5:4]=Node_Return.flag[0]?2’d0:rt_ray[0].rt_ray_ctrl.flag[5:4]; →通过实例禁用三角形剔除
x.flag[8:6]=rt_ray[0].rt_ray_ctrl.flag[8:6];→(禁用相交着色器、剔 除不透明或剔除非不透明)Preserve BVH[0]
xi.node.node_ctrl=例如不需要
xii.node.node_data={‘0,node_rtn.obj2world_p,world2obj_vzyx};
C.四边形:这将更新节点如下
i.node.node_ctrl={node_rtn.leafDesc.last, node_rtn.leafDesc.PrimIndex1Delta[15:0], node_rtn.leafDesc.PrimIndex0[31:0],node_rtn.shader_indx};
ii.node.node_data={‘0,Quad_mode,J[2:0],V[3:0]};→Quad_mode= node_rtn.leafDesc.PrimIndex1Delta[15:0]!=‘0;
基于光线标志、实例标志和几何标志,图54中所示的不透明/非不透明 处理表指示在获取节点数据时要使用的结果标志(不透明或非不透明)。如 表中所示,光线标志始终占优。此外,一些状态是互斥的。在一个实施例 中,这些在具有独占位优先级的硬件中处理。在一种实施方式中,如果 cull_opaque和force_opaque二者都被设置,则相关联的几何体将被自动剔 除。
opaque=rt_ray.rt_ray_ctrl.flag[0]|quad.flag[0];(注意每个BVH级别存 储的光线已经考虑了实例标志)
nopaque=rt_ray.rt_ray_ctrl.flag[1]|~quad.flag[0];
图55A是示出根据一个实施例的光线标志处理和异常的表格。这里的 剔除决定是基于光线标志、实例标志和几何标志的组合。
cull_opaque=rt_ray.rt_ray_ctrl.flag[6]&(rt_ray.rt_ray_ctrl.flag[0]|quad.flag[0]);
cull_nopaque=rt_ray.rt_ray_ctrl.flag[7]&(rt_ray.rt_ray_ctrl.flag[1]|~quad.flag[0]);
cull=cull_opaque|cull_nopaque;
在一个实施例中,可以如下实现基于掩码的剔除:
mask_kill=~|(rtc_rtt_rd_rtn.mask&rtc_rtt_rd_rtn.data.mask);
图55B是示出根据一个实施例的最终剔除的表格。光线标志(Ray Flag) 是(cull_opaque和force_opaque)或(cull_non_opaque和force_non_opaque)是 互斥的。然而,在这个等式中,Ray Flag也考虑了可以设置不透明/非不透 明的实例标志。只能剔除几何体,而可以屏蔽实例和几何体二者。
如图56所示,在一个实施例中,基于对上述剔除和mask_kill设置的 评估,在5601或5602处确定了早期退出(early out),并且在5603处将结 果发送到节点存储装置和/或在5604处将结果发送到堆栈。
一旦节点数据就绪,就可以执行框/相交测试。在一个实施例中,这是 通过本文称为Ray_Test_Proc的过程来实现的,该过程具有两个正在运行的 底层并发过程,一个用于填充四边形/实例(QI),并且另一个用于执行框/相 交测试。在图57所示的一个实施方式中,Ray_Test_Proc启动优先级选择逻 辑(PRISEL)5701-5702的两个并行实例:四边形/实例PRISEL 5701,用于在 来自库0的四边形/实例5711和来自库1的第二四边形/实例5712之间请求 和选择;以及内部节点PRISEL 5702,用于在来自库0 5713的内部节点和 来自库15714的内部节点之间请求和选择。
在一个实施例中,四边形/实例优先级选择逻辑5701对第一QI节点 5711和第二QI节点5712中的一个进行优先化,将优先化的结果存储在光 线追踪队列(RTQ)中以用于进一步处理(例如,相交测试)。类似地,内 部节点PRISEL逻辑5702对其上执行光线追踪穿过(RTT)框测试的内部 BVH节点5713-5714之一进行优先化。在一个实施例中,从每个库中仅选 择一个请求(例如,请求5711和5712之一以及请求5713和5714之一)。这 些请求的启动也可以重置堆栈数据存在(DP)位,如所指示的,以便响应节 点获取操作而不取回该条目。在一个实施例中,对于实例获取操作,在发 送实例请求时,光线的数据存在(DP)位被重置,并且在节点获取之后光 线被变换时数据存在(DP)位最终被设置。
作为该过程的一部分,对于每个四边形测试分派(其中,节点类型为 非不透明),着色器记录标识符空查找被分派为基于以下着色器记录标识符 查找地址的无绑定线程分派(BTD):
sri_null_lookup_ptr[47:3]=2*(Ray.hitGroupSRBasePtr+Node.leafDesc.ShaderIndex*ray.SRStride)+1;
sri_null_lookup_tag[7:0]={1’d0,RTT_INST,rtt_alloc_entry[5:0]};
在一个实施例中,四边形/实例(QI)解耦FIFO被包括以解决临时堆栈 FIFO已满情况,并通过推入堆栈FIFO实现对hitinfo/光线的同步更新(参 见例如图60中的堆栈FIFO6001)。这样做是为了使光线/hitinfo在后续过程 中使数据存在(DP)位保证被设置。请注意,当与存储器写入发生冲突时, 光线/hitinfo可能会被指派固定的高优先级。
从RTQ的返回可以在两个单独的接口上产生实例(例如,实例变换) 或四边形(即,穿过/相交测试结果)。下面是一个实施例中用于处理结果的 两个返回FIFO:
a.示例返回FIFO:更新rt_ray.rt_ray_data=rtq_rt_ray_data; ray_dirty[Entry]=1;
b.四边形返回FIFO:
i.如果四边形是非不透明的并且(Tfar<Prev_Tfar)→检查 SRI_NULL_DP以弹出(从其读取)四边形/实例(QI)解耦的FIFO。 请注意,在一个实施例中,来自光线追踪队列(RTQ)FIFO的Hitinfo 写入具有比MemHitInfo更高的优先级。
1.If(KSP_NULL=1)→将非不透明四边形视为不透明 并更新Tfar
2.If(KSP_NULL!=1)→
◆将潜在的HitInfo写入存储器,并将有效位设置为1。
◆从RTQ读取T、U、V、叶类型、PrimLeafIndex和前面 (Front Face)。
◆从NodeData读取PrimIndexDelta、PrimleafPtr。从光线数据 更新instanceLeafPtr。
◆hitGroupRecPtr,如上计算的。
ii.如果四边形是非不透明的且(Tfar<Prev_Tfar)→
◆用Valid=1更新提交的HitInfo。
◆从RTQ读取T、U、V、叶类型、PrimLeafIndex、前面。
◆从NodeData读取PrimIndexDelta、PrimleafPtr。
◆从rt_ray.rt_ray_ctrl更新instanceLeafPtr。
◆hitGroupRecPtr,如上计算的。
在一个实施例中,来自光线追踪穿过(RTT)框相交测试的返回可推入堆 栈0/1(5203/5204)FIFO 6001中以供进一步处理。
图58和图59A-59B示出了使用“短”堆栈(例如,包括有限数量的本 地堆栈条目的堆栈5203或5204)的BVH光线处理的示例。短堆栈用于结合 智能节点管理技术保存高速存储装置,以提供高效的穿过操作序列。在所 示示例中,短堆栈5203包括六个BVH节点的条目。然而,本发明的基本 原理可以使用各种尺寸的短堆栈来实现。
操作5949-5972在BVH穿过期间推入和弹出堆栈条目。在一个实施例 中,操作5949-5972由堆栈处理电路5120(见图51)在堆栈5203上执行。示 出了从BVH级别0处的根BVH节点N 5900开始的特定穿过序列。
在5949处,用节点N初始化堆栈5203,然后将节点N从堆栈中弹出 并进行处理,使得包括BVH的级别1处的子节点N0-N2 5901-5903的命中 H0-H2(即,“命中”表示光线穿过三个子节点N0-N2 5901-5903)。三个子 节点命中5901-5902基于命中距离排序并按排序顺序推送到堆栈5203上(操 作5950)。因此,在该实施例中,无论何时评估一组新的子节点,它们都基 于命中距离进行排序并以排序的顺序写入到堆栈5203中(即,较近的子节点 在堆栈的顶部)。
第一个子节点N0 5901(即,最接近的子节点)从堆栈5203中弹出并 进行处理,得到BVH的级别2(“级别”有时称为BVH节点的“深度”) 处的另外三个子节点命中N00-N025911-5913,它们被排序并推送到堆栈 5203(操作5951)。
子节点N00 5911被从堆栈中弹出并被处理,得到包括BVH的级别3 处的单个子节点N000 5920的单个命中(操作5952)。该节点被弹出并处理, 得到级别4处的6个命中N0000-N0005 5931-5936,它们被排序并推送到堆 栈5203(操作5953)。为了在短堆栈5203内腾出空间,节点N1、N2、N02、 N01如所示被移除(即,将短堆栈限制为六个条目)。弹出并处理第一个排序 节点N0000 5931,在BVH的级别5生成三个命中N00000-N00002 5931-5933(操作5954)。注意N0005被移除以在短堆栈5203上为新节点腾出空间。
在一个实施例中,每次从短堆栈5203中移除节点时,将其保存回存储 器。然后它将在稍后的时间(例如,根据穿过操作在处理节点时)重新加 载到短堆栈5203。
处理在图59A上继续,其中,节点N00001和N00002在BVH的级别 5处被弹出和处理(操作5955-5956)。然后弹出并处理级别4处的节点N0001、 N0002、N0003和N0004(操作5957-5960),得到空的短堆栈5203。
因此,弹出操作得到根BVH节点、节点N(根据重启轨迹(RST))的 取回(操作5961)。来自级别1的三个子命中N0、N1、N2再次排序并推送 到短堆栈(操作5962)。然后弹出并处理节点N0,然后是节点N00、N000 和N0005(操作5963-5965)。节点N01被弹出并处理(操作5966),然后 是节点N02、节点N2和节点N1(操作5967-5970),再次得到空的短堆栈。 因此,下一个级别2节点N11从短堆栈中弹出并处理,完成穿过(即,因 为节点N11没有得到命中)。
如上所述,穿过追踪器5248的一个实施例更新追踪阵列5249,其标识 当前正被穿过的BVH层次结构的每一级别中的子节点/子树。在一个实施方 式中,追踪阵列5249的长度等于BVH的深度(在所示示例中为6),并且 追踪阵列5249中的每个条目包括标识当前被穿过的子子树的索引值。在一 个具体实施方式中,对于宽度为N的BVH(即,其中每个内部节点引用N 个子节点),追踪阵列5249中的每个条目包括log2(N)位值以标识子节点/子 树。在一个实施例中,被指派了小于当前子索引的索引的子节点/子树已经 被完全穿过并且因此在重新启动的情况下将不会被重新访问。在一个实施 例中,当正穿过最后一个相交的子时,子索引被设置为最大值以指示堆栈 上没有更多条目。
短穿过堆栈5203可以将堆栈的顶部几个条目存储在圆形阵列中。在一 个实施方式中,短穿过堆栈5203中的每个堆栈条目包括到节点的偏移、诸 如节点类型(内部、图元、实例等)之类的杂项信息以及指示该子节点是 否是父节点中最后(最远)的相交子节点的一位。然而,这些具体细节不 是遵守本发明的基本原理所必需的。
图60图示了用于执行如上所述的堆栈管理和穿过操作的堆栈处理电路 /逻辑5120的一个实施例。堆栈FIFO 6001加载有需要处理的任何子BVH 节点6000。例如,当穿过处理电路5210完成框测试或四边形测试时,结果 被推入堆栈FIFO 6001中并用于更新堆栈5203。这可以包括例如对命中信 息的更新,例如与特定命中相关联的一组子节点6000。
堆栈处理电路/逻辑6003从堆栈5203读取具有处理每个条目所需的数 据的条目,包括关于BVH节点是内部节点还是叶节点的指示以及相关联的 索引数据。如果节点是叶节点/四边形,则数据可以包括四边形描述符和索 引以及着色器索引数据。堆栈处理电路/逻辑6003然后执行本文描述的堆栈 处理操作,例如识别与命中相关联的新节点并基于命中距离对节点进行排 序。尽管被示出为单独的实体,但堆栈处理电路/逻辑6003可以集成在穿过 电路5102内。
如所指示的,当堆栈处理电路/逻辑6003完成处理来自堆栈5203的每 个BVH节点时,堆栈处理电路/逻辑6003生成堆栈更新6011。例如,在从 堆栈5203读取条目之后,它可以更新各种控制位,例如数据存在(DP)位和 有效(VLD)位。图60图示了逐出就绪和数据存在位6010被设置。还可以将 对应的堆栈更新6011发送到堆栈5203(例如,以允许移除旧条目以为新子 节点腾出空间)。
堆栈更新可以经由仲裁电路6012控制,仲裁电路6012在用当前处理 更新6011更新堆栈5203、用一个或多个新BVH子节点从存储器填充堆栈 5203(Mem Fill)和执行从存储器到堆栈的初始分配(例如,从根节点和一个 或多个子节点开始)之间进行选择。
在一个实施例中,当在堆栈上处理四边形/实例/内部节点时,可以执行 以下操作中的一个或多个:
i.由于多种条件(例如,为新BVH向下移动实例、处理命中程序、任 何命中着色器等)而逐出堆栈条目。
ii.如果堆栈由于命中程序和/或任何命中着色器而被逐出,则解除分配 光线条目。
iii.如果该堆栈由于命中程序和/或任何命中着色器而被逐出,则解除分 配高速缓存条目。
iv.如果光线需要通过实例叶向下传递到新的BVH,则更新光线控制(仅 BVH)。
图61A-61B图示了用于为所有光线追踪穿过结构配置读/写端口和设置 控制位的表。特别地,针对光线6101、命中6102和堆栈6103示出了示例 子结构、垂直结构和读/写动作。然而,请注意,本发明的基本原理不限于 这些特定数据结构/操作。
用于细节过渡的高质量光线追踪级别的装置和方法
在图形处理架构上,“细节层次”(LOD)可以指基于诸如距相机的距离 之类的变量的网格分辨率的选择。LOD技术用于减少存储器消耗并改进图 形处理功能,例如游戏中的几何锯齿。例如,当网格远离用户的当前视角 时,可能不需要高分辨率网格的细节。
在基于光栅化的实施方式中,LOD之间的平滑过渡是使用“随机LOD” 技术实现的,例如Lloyd等人在《Implementing Stochastic Levels of Detail with MicrosoftDirectX Raytracing(使用Microsoft DirectX光线追踪实现随机细节 层次)》(2020年6月15日)中描述的。在没有这些随机技术的情况下,LOD 之间的过渡可能会导致分散注意力的伪影,其中,在选择新的LOD时对象 的外观会突然改变。使用随机LOD,LOD级别之间的交叉溶解 (cross-dissolve)是通过将像素随机指派到转换中涉及的LOD之一(例如, 较高分辨率或较低分辨率LOD)来执行的。
当从第一LOD(“LOD0”)衰减到第二LOD(“LOD1”)时,上述解决 方案使用二进制掩码和二进制比较值来实现用于随机LOD过渡的八个过渡 步骤。在此实施方式中,8位光线掩码和8位实例掩码在逻辑上进行与运算 以确定是否需要穿过实例。这些8位掩码和相关联的逐位逻辑运算导致有 限的LOD过渡能力。例如,在对象的LOD0和LOD1之间过渡时,其中LOD0的分数值为0.25并且LOD1的分数值为0.75(基于相机距离),实例 的掩码将设置为LOD0以仅启用2个随机位(8位的0.25)。LOD1的实例 掩码将设置为LOD0掩码的二进制补码,其中6位被启用。对于任何给定 的光线,在光线掩码中选择一个随机位以实现LOD0(概率为0.25)和LOD1 (概率为0.75)的随机选择。但是,因为只选择了八位中的一位,所以在 LOD0和LOD1之间过渡的中间步骤只有8个。
如图62所示,在本发明的一个实施例中,LOD选择器6205被提供有N位比较操作掩码6220,其被视为二进制值以确定要执行的比较操作。所 选择的比较操作用于与参考进行比较,以允许更多的过渡LOD步骤。在一 个实施例中,比较操作选自小于或等于(less_equal)和大于(greater),尽管本 发明的基本原理不限于这些特定的比较操作。在一种实施方式中,使用8 位(N=8),其中,7位定义了[0..127]范围内的无符号整数值,为LOD交 替淡变(cross-fading)实现128个过渡步骤,并且1位指示比较操作(例 如,如果设置为0,则执行less_equal操作,并且如果设置为1,则执行greater 操作)。在一个实施例中,还可以在[0..127]范围内向LOD选择器6205提供 光线比较掩模6221作为附加光线参数。
在一个实施例中,以下代码序列突出了光线穿过如何对这个新的比较 掩码做出反应:
Figure BDA0003167720240001121
在上述代码序列中,第一个IF语句测试二进制掩码是否允许穿过到当 前实例中。如果是,则第二个IF语句鉴于实例比较掩码(例如,比较操作 掩码6220)和光线比较掩码6221的值来测试比较模式设置。
回到上面的LOD过渡示例,对于分数值0.25的LOD0的实例,将前7 位设置为值31(=int(0.25*127)),并且最后一位设置为0(指示less_equal操 作)。对于分数值0.75的LOD1实例,前7位设置为值31 (=int((1.0-0.75)*127)),并且最后一位设置为1(指示greater操作)。因此, 对于该实施方式,如果在[0..127]范围内生成均匀分布的随机数作为光线比 较掩码,则存在多达127个过渡步骤,其可以被LOD选择器6205选择以 用于在LOD0和LOD1之间过渡。
虽然以上阐述的具体细节用于解释的目的,但本发明的基本原理可以 用其他细节来实现。例如,可以使用其他比较运算符以代替或附加于 less_equal和greater。例如,也可以使用诸如not_equal、equal、less和 greater_equal(大于或等于)之类的比较运算符。一种实施方式包括光线标 志和实例标志,该实例标志禁用与运算的光线掩码并启用这些位作为比较 掩码。
本发明的实施例包括固定功能加速电路和通用处理电路的组合以执行 光线追踪。例如,与边界体积层次结构(BVH)的光线穿过和相交测试相关的 某些操作可以由固定功能加速电路执行,而多个执行电路执行各种形式的 光线追踪着色器(例如,任何命中着色器、相交着色器、未命中着色器等)。 一个实施例包括双高带宽存储库,其包括用于存储光线的多个条目和用于 存储BVH节点的对应双栈。在该实施例中,穿过电路在双光线库和堆栈之 间交替以在每个时钟周期上处理光线。此外,一个实施例包括优先级选择 电路/逻辑,其在内部节点、非内部节点和图元之间进行区分并使用该信息 来智能地优先化BVH节点和由BVH节点界定的图元。
用于压缩光线追踪加速结构构建数据的装置和方法
加速数据结构的构造是高效光线追踪渲染中最重要的步骤之一。最近, 本文中广泛描述的边界体积层次结构(BVH)加速结构已成为用于此目的的 最广泛使用的结构。BVH是一种层次结构树结构,其用于空间索引和组织 几何体,以便可以非常高效地解决光线/图元相交查询。解析这些查询的能 力是光线追踪渲染最关键的操作之一。尽管下文描述的本发明的实施例对 BVH结构操作,但本发明的基本原理不限于BVH。这些实施例可以应用于具有类似相关特征的任何其他加速数据结构。
产生BVH通常被称为“构造”或“构建”BVH。尽管已经提出了多个 BVH构造算法,但自顶向下的BVH构建器主要用于针对实时和离线渲染 应用实现高渲染效率。自顶向下的BVH构建算法通常在构造期间维护一个 或多个临时阵列。这些阵列保存对几何进行排序/组织以产生BVH结构所需 的数据。这些阵列在构建期间被多次读取和/或写入(通常BVH层次结构的 每个级别1-2次)。由于这些阵列通常具有相当大的尺寸,因此该过程是 带宽密集型的。因此,如果不解决此带宽问题,BVH构建计算性能的改进 (例如,可以从硬件BVH构建器预期的)可能只具有有限的影响。
本发明的一个实施例包括用于由许多自顶向下的BVH构建器维护的临 时数据的压缩方案。这种压缩方案的目的是减少BVH构造所需的带宽,从 而实现更快且更高效的BVH构造。然而,请注意,本发明的实施例可用于 其他类型的BVH构建器并且与其他类型的加速数据结构一起使用,例如kd 树。
许多自顶向下的BVH构建器在BVH构建期间维护两种主要类型的数 据:(1)BVH构建中涉及的每个图元的轴对齐边界框(AABB);(2)与每个图 元相关联的无符号整数索引,它指向这些AABB之一,和/或指向产生了 AABB的原始图元。
本发明的一个实施例利用阵列结构(SOA)布局来将每个AABB与单个 整数索引组合。AABB被维护在一个阵列中,并且整数索引被维护在第二 阵列中。只有索引阵列必须被重新排序以实现BVH构造。以这种方式存储 构建数据会带来许多优势。在这种布局方案中,AABB数据大部分是只读 的,并且对于大部分构建过程不会引起AABB写入带宽。
通过使用SOA结构,只有AABB需要在构建期间不频繁地压缩。事实 上,取决于实施方式,AABB数据可以只需要在作为预处理构建之前被压 缩一次。由于构建是通过对索引阵列进行分区来执行的,因此本发明的一 个实施例在构建的每一级别重新压缩这些索引阵列。
通过对这些阵列的压缩版本而不是它们传统的未压缩对应物进行操作, BVH构造所需的带宽被减少。阵列的压缩版本被临时存储,并且仅用于构 建目的。一旦构建完成,它们就会被丢弃,留下一个BVH,它引用图元的 原始输入列表。
本文描述的压缩技术的一个重要特性是它们是高速缓存行感知的 (cache line-aware)。两个压缩阵列都被存储为固定大小的压缩块的阵列, 其中,大小是缓存行的整数。该数字大于或等于1。两种类型的阵列中的每 一种的压缩块不需要是大小相同的。这两种类型的块在本文中被称为 AABB压缩块和索引压缩块。
注意,本发明的基本原理不要求块的大小是高速缓存行的整数。相反, 这是本文描述的几个可选特征之一。在下面描述的一个实施例中,该功能 分别由表B和D中的变量AABBCompressionBlockSizeBytes和 IndexCompressionBlockSizeBytes控制。
因为每个节点的空间范围和被每个节点引用的图元数量通常将随着自 顶向下的构建从树结构的根到叶而减少,所以AABB的不同表示对于不同 阶段的构造可以是合适的。例如,压缩AABB的准确性在树的较高级别处 可能不太重要,而在较低级别处可能需要更精确的表示以保持合理的树质 量。因此,可能足够的是,在树的根部附近使用有损压缩以最大化带宽节 省,并针对较低级别切换到图元的未压缩、无损表示。这将BVH构造划分 为至少两个阶段,如图63所示:位于或高于指定层次结构级别的节点(节 点0、1、8)的顶部阶段6301和用于指定级别以下节点(节点2-7、9-14) 的底部阶段6302。多级构建可以以这样一种方式进行:在构建较低级别中 的任何节点之前构建整个高级别层次结构(例如,图63中的“顶部”部分), 或者级别的构建可以交错。如果高级别完全在任何低级别之前构建,则必须在构建的低级别拆分的节点可以存储在诸如队列之类的结构上,以便在 稍后阶段进行分区。
作为对较低级别6302使用AABB的全精度副本的替代方案,该方案的 另一个变体是在构建期间“重新压缩”AABB以用于构建较低级别。通过 这样做,可以相对于各个子树的范围压缩几何体。由于与根节点相比,各 个子树通常表示较小的空间范围,因此这有利于压缩表示的准确性或者压 缩的效率。在当前的研究中观察到多级压缩构建的类似模式。不同构造阶 段之间的划分6300可以根据各种节点特征来定义。一个实施例使用固定数 量的图元充当阈值。
在本发明的一些实施例中使用的变体替代地选择仅采用单级构建。例 如,构建数据的单个压缩表示可用于构建整个树。
I.AABB压缩
在本发明的一个实施例中,AABB压缩逻辑(其可以在硬件和/或软件中 实现)的输入是未压缩图元的阵列,并且输出是AABB压缩块的阵列,它们 具有固定大小,并与一定数量的高速缓存行对齐。由于网格的任何特定区 域的有效AABB压缩比高度依赖于数据,因此一个实施例为每个AABB压 缩块打包了可变数量的AABB。
如图64所示,压缩块6400的一个实施例被组织成两个主要部分:元 数据(MetaData)6401和矢量残差6402。元数据6401提供将矢量残差6402 解码为AABB列表所需的每块信息和常量。矢量残差6402存储用于表示 AABB的大量压缩信息。下面更详细地描述了这些元素中的每一个。
简而言之,在一个实施例中,使用增量压缩。种子矢量(seedVector) 包括AABB值的基线集合并且矢量残差6402提供对这些基线值的偏移以重 构每个AABB。numResiduals值指定了矢量残差6402的数量,并且 residualSizeVector指定了残差6402的大小。
AABB全局压缩常量
除了存储在每个压缩块6400中的每块常量之外,一组AABB全局压缩 常量可以存储与整个压缩过程中的所有块有关的信息。这些在表B中针对 一种特定实施方式进行了总结。
Figure BDA0003167720240001161
Figure BDA0003167720240001171
表B
AABB压缩流
AABB压缩过程的一个实施例涉及依次迭代通过图元的输入阵列,并 输出AABB压缩块6400的阵列。输出阵列包含表示压缩形式的图元的 AABB所需的最少数量的AABB压缩块6400。
图65示出了根据一个特定实施例的过程。如上所述,压缩过程不限 于任何特定架构并且可以以硬件、软件或其任何组合来实现。
在6501处,提供了用于BVH构建的图元阵列。在6502处,选择阵列 中的下一个图元(例如,过程开始时的第一个图元)并且针对压缩评估其 AABB。如果AABB适于6503处确定(例如,基于其最小值/最大值数据) 的当前压缩块内,则在6504处将AABB添加到当前压缩块。如上所述,这 可以包括通过计算到压缩块内现有基矢量的距离(例如,seedVector)来确 定AABB的残差值。
在一个实施例中,如果图元的AABB不适于压缩块内,则当前压缩块 在6510处被最终确定并存储在输出阵列内的存储器中。在6511处,使用 图元的AABB初始化新的压缩块。在一个实施例中,图元AABB用作新压 缩块的种子矢量。然后可以基于到新种子矢量的距离为图元的后续AABB 生成残差。在一个实施方式中,基于到种子矢量值的距离值来确定为第二 AABB生成的第一残差。然后基于到第一残差的距离确定第三个AABB的 第二残差。因此,如下文更详细地描述的,存储了运行差。一旦当前图元 被压缩,该过程就返回到6502,其中,选择阵列中的下一个图元进行压缩。
因此,依次访问每个图元,确定其AABB(例如,作为浮点值)。然后 对AABB执行一系列操作以实现压缩,并将压缩结果添加到输出阵列中的 当前AABB压缩块中。如果压缩后的AABB适合,则将其添加到当前块, 并且过程移动到下一个AABB。如果AABB不适合,则当前的AABB压缩 块被最终确定,并在输出阵列中初始化新的AABB压缩块。通过这种方式, 存储AABB所需的压缩块的数量被最小化。
下面表C中的伪代码示出了根据本发明的一个特定实施例的AABB压 缩的流程。然而,请注意,本发明的基本原理不一定限于这些细节。
如伪代码序列所示,对于每个AABB压缩块,将整数写入单独的数组(blockOffsets)中,该数组记录原始图元阵列中每个AABB压缩块开始的位 置(即,它包含的第一个图元AABB)。blockOffsets数组在构建期间用于解 析压缩块表示的原始图元ID。
AABB残差计算
在一个实施例中,每个输入AABB在将其添加到压缩块之前经过一组 阶段以对其进行压缩,从而产生图64中所示的矢量残差。该过程被捕获为 表C的第26行上的代码,其中CompressionCore用于将AABB转换为压缩 矢量列表。
Figure BDA0003167720240001191
表C
在一个实施例中,AABB的压缩发生在以下阶段:(1)量化,(2)转换, 和(3)预测/增量编码。
1.量化
在一个实施例中,浮点AABB值首先使用每轴固定数量的位量化为无 符号整数表示。可以以多种方式执行该量化步骤。例如,在一个实施方式 中,确定每个轴i的以下值:
Li=Smax,i-Smin,i
Figure BDA0003167720240001201
VUmin,i=(VFmin,i-Smin,i)/Li×NB,i
VUmax,i=(VFmax,i-Smin,i)/Li×NB,i
其中,Smin和Smax是要为其构建BVH的几何体的整个集合的最小值坐标和 最大值坐标,NB,i是第i轴中量化网格中的单元格数,NQi对应于表B中的 值,VUmin和VUmax是量化后AABB的最小值坐标和最大值坐标,VFmin和 VFmax是原始浮点AABB的最小值坐标和最大值坐标,并且下标i表示给定 轴(i∈{x,y,z})。由于任何浮点计算都可能引入误差,因此应向上或向下舍 入中间值以最小化VUmin的值并最大化VUmax的值。这些值也可以变换为整 数并限制在有效范围内,以确保水密AABB位于几何体的整个集合的 AABB内。
Smin和Smax还可以表示几何体子集的范围(例如,较大BVH中的子树)。 例如,这可能根据图63发生在多级压缩构建中。
2转换
在一个实施例中,实现转换阶段,其中,将数据转换成更易于压缩的 形式。尽管可以使用多种转换,但本发明的一个实施例采用了一种在本文 中称为位置-范围转换(Position-Extent Transform)的新颖转换,其将VUmin和VUmax组合成每图元的单个6维(6D)矢量,VT,如下所示:
Ex=VUmax,x-VUmin,x Ey=VUmax,y-VUmin,y Ez= VUmax,z-VUmin,z
VT=(VUmin,x,VUmin,y,VUmin,z,Ex,Ey,Ez)
其中,VUmin{x,y,z}和VUmax{x,y,z}分别是VUmin和VUmax的分量。本质上, 这种转换允许在剩余的压缩阶段单独处理AABB的位置和范围/大小特性。 如上所述,也可以使用其他转换。
3.预测/增量编码
在一种实施方式中,使用传统的增量编码技术来实现良好的压缩性能。 在一个实施例中,每个压缩块中的第一个矢量被称为“种子”矢量并逐字 存储在AABB压缩块6400中,如图64所示。对于后续矢量,值的运行差 被存储(即,残差6402)。这对应于一种预测方案,其中,对序列中下一个 输入矢量的预测始终是前一个输入矢量,而残差值是当前和前一个输入矢 量之间的差。因此,该实施例中的残差值6402是有符号值,这需要附加的 符号位。可以使用各种其他预测/增量编码,同时仍然符合本发明的基本原 理。
一个实施例存储具有最少数量的所需位的残差值6402,以便最大化压 缩。基于残差编码步骤结束时残差值的大小,每个矢量维度将需要一定数 量的位以适应该维度中遇到的值的范围。
如图64中的元数据6401所示,所需的位数被存储在残差大小矢量(RSV) 中。对于给定的压缩块6400,RSV是固定的,并且因此在特定块的给定维 度中的所有值对其残差6402使用相同数量的位。
存储在RSV的每个元素中的值只是将维度中的残差值的整个范围存储 为有符号数所需的最小位数。在压缩给定的AABB压缩块(即,表C的第 18-37行)的同时,保持了适应迄今为止看到的所有矢量所需的位数的运 行最大值。RSV是针对每个新添加的AABB确定的(即,CommitToBlock, 表C的第32行)并存储在压缩块的元数据中。
为了测试新的AABB将是否适于当前块(即TestAddToBlock,表C的 第28行和图65中的操作6503),我们计算添加新AABB将会出现的预期 新RSV,将预期的RSV矢量求和,并且然后将此值乘以如果添加新AABB 则块中将存在的残差总数。如果该值在可用于存储残差的预算内(即,小 于或等于总块大小减去元数据6401大小),则可以将其添加到当前块。如果不是,则初始化一个新的压缩块。
熵编码
本发明的一个实施例包括用于AABB残差计算的附加步骤,其包括在 预测/增量编码之后对残差的熵编码。本发明的基本原理不限于该特定实施 方式。
预排序/重新排序能力
作为可选的预处理,可以对输入几何体进行排序/重新排序以改进空间 一致性,这可以改进压缩性能。可以通过多种方式执行排序。实现此目的 的一种方式是使用MortonCode排序。这种排序已被用作其他BVH构建器 中的主要步骤,以促进在提取层次结构之前的几何体中的空间一致性。
压缩的AABB可以以任何期望的次序写入,但是如果AABB被重新排 序/排序,则需要存储记录排序的次序的附加整数阵列。该阵列由每个图元 的单个整数索引组成。构建可以以用于引用重新排序的图元列表的主索引 继续。当需要原始图元ID时(例如,当叶节点的内容正在被写入时),我 们必须使用主索引来在附加阵列中查找原始图元ID,以确保树正确引用原 始输入几何体列表。
II.AABB解压缩
在一个实施例中,一次对整个AABB压缩块6400执行AABB的解压 缩。首先通过检查压缩块6400的元数据6401并基于该信息解释存储的残 差(例如,将距离值添加到种子矢量和序列中的先前残差值)来重构残差数据。 然后执行每个AABB压缩阶段的逆以对由压缩块表示的单精度浮点AABB 进行解压缩。
在BVH构建器的情况下,一个实施例实现解压缩步骤的变体,该构建 器采用与压缩的层次输出对齐的降低精度的构造技术。在转让给本申请的 受让人的2020年1月17日提交的题为“An Architecture for Reduced Precision Bounding Volume HierarchyConstruction(用于降低精度边界体积层次结构 的架构)”、序列号为16/746,636的共同未决申请中描述了这种降低精度的 构建器。降低精度的构建器在降低精度的整数空间中执行其大部分计算。 因此,本发明的一个实施例将本文描述的AABB残差计算的量化步骤与降低精度构建器中采用的量化对齐。然后可以仅将AABB解压缩到整数,与 降低精度的构建器当前正在处理的无论什么节点的坐标空间对齐。可以使 用不输出压缩层次结构但执行顶点量化的构建器来实现类似的变体。
III.索引压缩
在本发明的一个实施例中,索引阵列被压缩成索引压缩块阵列。图66 图示了包括元数据6603和索引残差6602的索引压缩块6610的一个实施例。 索引阵列与AABB阵列不同,这是因为它必须被重新压缩,因为索引在构 建过程期间被分区/重新排序。
在许多传统的BVH构建器中,索引被表示为无符号整数,通常每个图 元具有一个索引。索引阵列的目的是指向图元AABB。每个AABB/图元可 以在存储器中被分配固定大小。因此,可以随机访问阵列中的任何特定图 元p或AABB a。然而,当AABB压缩导致每个高速缓存行的可变数量的 AABB时,在压缩后不容易确定存储给定图元的AABB压缩块。因此,存 储传统索引与本文描述的AABB压缩块不兼容。
在本发明的一个实施例中,用于识别图元AABB位置的索引技术还允 许压缩索引本身。下面将两种新颖技术称为块偏移索引(BOI)和层次结构位 矢量索引(HBI)。这些索引实施方式可以在本发明的各种实施例中单独使用 或组合使用。此外,两种索引技术均可用作多级构建的一部分(依据图63), 并且两种类型的索引也可用作同一BVH构建的一部分。这些索引技术允许 BVH构建以与传统BVH构建器类似的方式进行,但具有AABB和对应索 引阵列二者的压缩表示。
全局索引压缩常量
索引压缩采用一组全局索引压缩常量,其应用于所有索引压缩块。下 面描述的两种索引压缩方案共享相同的全局常量,其在下面的表D中进行 了总结。
Figure BDA0003167720240001231
Figure BDA0003167720240001241
表D
块偏移索引
在块偏移索引(BOI)中,常规单整数索引被改变为包含两个整数的结构, 其中一个标识压缩块6400,并且其中一个包括用于标识压缩块6400内的图 元AABB数据的偏移。根据以下代码序列生成新数据结构的一个实施例:
struct blockOffsetIndex
{
uint blockIdx;
uint blockOffset;
}
这里,blockIdx存储到AABB压缩块的索引,并且blockOffset引用块内的 特定图元AABB(即,blockIdx与blockOffset结合提供图元AABB的地址)。 此信息足以在构建期间充分引用其压缩块内的特定AABB。
在一个实施例中,为BVH构建中的每个图元生成这些结构之一,因此 列表的大小是可预测的。然而,给定每个AABB压缩块的可变数量的AABB, 对于这些压缩块中的每一个,将存在可变数量的这些索引结构(例如,并 非对于每个AABB压缩块都存在blockOffset的所有可能值)。因此,为了 正确初始化块偏移索引(Block Offset Indices)阵列,需要参考blockOffsets 阵列(参见例如表C中的代码序列),从中可以确定每个AABB压缩块中 的图元数量,或者与AABB压缩同时或作为AABB压缩的后处理。一旦初 始化了,就可以以与传统BVH构建器中的传统索引本质上相同的方式处理 块偏移索引。
在常规BVH构建器中使用的单整数索引的大小通常为4个字节。在一 个实施例中,26位用于blockIdx并且6位用于blockOffset。在替代实施例 中,对于每个变量使用较少数量的位以减少总存储器占用空间。在一个实 施例中,由于必须选择用于块偏移的固定大小,这限制了每个AABB压缩 块的图元的最大数量。在6位的情况下,每个AABB压缩块,最多64个图 元可以被表示。
要解决块偏移索引的剩余项目是如何实现压缩。块偏移索引被增量编 码并按顺序打包到索引压缩块中。每个块都打包了尽可能多的索引,并且 每次前一个达到容量时,一个新的索引压缩块都会开始。这以与AABB压 缩块(如表C所示)非常相似的方式执行,导致每个索引压缩块的可变数 量的索引。
图66图示了块偏移索引压缩块6610的一个示例,该块偏移索引压缩 块6610包括元数据6603,该元数据6603除了残差大小矢量和种子矢量之 外还标识索引数量。在一个实施例中,双通道编码用于索引残差6602,其 中,blockIdx和blockOffset值被单独地增量压缩。与AABB压缩块类似, 索引压缩块6610存储块中索引数量的指示、残差的位数(作为残差大小矢 量)和包含用于blockIdx的第一种子矢量和用于blockOffset的第二种子矢 量的种子矢量。索引残差值6602包括由压缩产生的一对差值。例如,索引 残差值可以包括:第一差值,其表示当前输入blockIdx值和先前输入 blockIdx值之间的差;以及第二差值,其表示当前输入blockOffset值和先 前输入blockOffset值之间的差。序列中的第一个blockIdx和blockOffset值 逐字存储在seedVector字段中,该字段表示根据其计算第一残差值的矢量。
层次结构位矢量索引
本发明的一个实施例使用称为层次结构位矢量索引(HBI)的另一种图 元索引压缩技术,其可以单独使用或与块偏移索引(BOI)结合使用。HBI不 同于传统的整数索引和BOI二者,因为单个HBI索引可以一次引用多个图 元。事实上,HBI索引最多可以引用整个AABB压缩块。
图67A-67B中示出了这种类型的索引的扩展结构。每个HBI索引6700 由两个元素组成。blockIdx 6708指向给定的AABB压缩块,其作用与块偏 移索引中的对应元素相同。第二分量是位矢量6701,其位数等于AABB压 缩块中允许的AABB最大数量(即,maxAABBsPerBlock)。位矢量6701 中的每一位表示AABB压缩块中的对应元素是否由该索引引用。例如,如 果位矢量中的第三位是“1”,这表示AABB压缩块的第三AABB/图元被 HBI索引引用。如果该位为“0”,则不引用该AABB/图元。
与BOI索引形成对比,当阵列被初始化时,每个AABB压缩块创建单 个HBI索引6700。blockIdx值6708被设置为从0开始的升序值,并且初始 位矢量6701被设置为全1。由于分区发生在自顶向下的构建器中,如果由 给定HBI索引6700引用的所有图元都位于拆分平面的同一侧上,则索引可 以简单地按原样分区到列表的一侧中,类似于传统的整数索引。但是,如 果HBI索引6700引用了拆分平面两侧上的图元,则该索引必须拆分为两个 新的HBI索引,其中,一个HBI索引放置在与左侧和右侧分区相对应的两 个新索引子列表中的每一个中。为了拆分HBI索引,索引被复制并且在索 引的每个副本中更新位矢量6701以反映由两个新索引引用的图元。这意味 着阵列中HBI索引的数量可以增长,并且索引的重复与一些传统BVH构建 器中处理空间拆分的方式有些相似。用于处理潜在增长列表的一种简单方 式是分配“最坏情况”的存储器量。
HBI索引6700可以使用对blockIdx组件6708的增量压缩来打包到索 引压缩块中。此外,HBI索引还提供层次结构压缩机会,它们从该机会导 出它们的名称。任何不跨越拆分平面的HBI索引都将使其位矢量的所有元 素等于“1”。当将HBI索引打包到索引压缩块中时,可以使用单个位标志 (有时在本文中称为位矢量占用标志)来指示整个位矢量是“全1”。“0” 值指示位矢量逐字存储在块中,并且“1”值指示矢量“全为1”,并且因此 根本不存储(标志除外)。因此,HBI索引从两种技术中导出压缩:增量编 码和层次结构位矢量。与BOI索引一样,HBI索引也以与AABB压缩块非 常相似的方式打包到压缩块中。为了正确执行此操作,压缩操作还必须监 视索引位矢量以决定是否必须逐字存储任何位矢量,并在块的所需大小中 将其作为考虑因素。
图67B示出了如何将HBI索引序列编码成包括残差数据6704和元数 据6701的HBI压缩块6710。在该实施例中,残差数据包括blockIdx残差 6702和层次结构成员位矢量6703。依据图63的多级构建情况,HBI索引 旨在在靠近层次结构的顶部或靠近最近被重新压缩的AABB压缩块的子树 的顶部操作。这是因为,与其他索引方法相比,HBI索引更直接地受到改 变AABB压缩块中的空间一致性的影响。事实上,虽然HBI索引提供了压 缩,但最坏的情况实际上可能导致索引数据的扩展(达到上限)。在构建过 程中过渡到块偏移索引(BOI)或传统整数索引可以避免这种情况,并且如果 最近没有执行重新压缩,则该过渡可能更有效。
构建级别之间的索引过渡
如果在BVH构建中使用BOI或HBI索引,并且构建过渡到另一个阶 段(依据图63的多级构建情况),则将有必要将索引解码为适用于下一个 构建阶段的形式。例如,在对树的高级别使用块偏移索引并从压缩的AABB 表示过渡为传统的AABB表示的简单情况下,则有必要将块偏移索引解码 为常规整数索引。在过渡之后可以丢弃块偏移索引。
对于HBI索引,以及为了在采用不同AABB压缩配置的两个压缩构建 级别之间的过渡,将需要发生类似的过渡。过渡过程相对简单,因为块偏 移索引和层次结构位矢量索引二者都表示相同底层信息的替代编码,并且 可以也总是被解码为引用原始图元集的常规整数索引。
对压缩后的索引阵列进行分区
在自顶向下的BVH构建中,有必要对整数索引列表进行分区/排序, 以便在构建期间递归,并且以便进行索引排序以反映树结构。在常规的BVH 构建器中,这一步是简单的,因为索引是常规的、未压缩的数据结构。然 而,本文描述的本发明的实施例引起新的挑战,因为必须对索引压缩块列 表而不是索引列表进行分区。此外,直到所有索引都被压缩之后才可能预 测块的数量。由于在每个分区步骤后重新压缩索引,因此在整个构建过程 中都存在此挑战。
虽然不可能预先预测压缩索引阵列的大小,但是如果我们知道要压缩 的索引的数量,则我们可以对阵列的最大大小设置上限。在自顶向下的BVH 构建器中,由节点分区产生的每个索引子阵列中的索引数量通常在分区发 生之前是已知的,并且因此可以在每个分区步骤处针对两个子阵列导出上 限。
在BOI的情况下,当没有通过增量压缩实现索引的压缩时,出现阵列 的最大尺寸。通过考虑块的元数据大小,可以预测块的最大数量,并且因 此预测最大大小(以字节为单位)。
在HBI索引的情况下,当没有实现blockIdx的增量压缩时出现最大大 小,并且HBI索引被拆分到这样的程度:每个HBI索引仅表示单个图元(在 每个索引位矢量中仅设置一位)。通过考虑所有元数据,包括用于层次结构 位矢量的第一级别的附加位(位矢量占用标志),我们可以计算块的最大数 量,并且因此计算给定数量的图元的最大大小(以字节为单位)。
假设可以在阵列的大小上设置上限,则使用简单的技术来使用一对阵 列来划分索引压缩块阵列。两个阵列的大小都基于索引类型设置为最大可 能大小,如本节前面所述。在构建开始时,一组初始索引被成对写入阵列 之一。对于每一层,读取、解释来自一个阵列的块,并将新压缩的块写出 到反映被分区的索引的第二阵列。在递归时,每个阵列的角色都可以切换, 总是从刚刚被写入的阵列中读取。由于索引的次序正在更改以反映分区, 因此索引阵列会不断重新压缩。
由于可以预测分区中块的最大数量,因此可以将分区产生的每个子阵 列写入另一个阵列的位置中,使得始终可以容纳最大大小。这可以有效地 引起阵列中的“间隙”,但仍能实现带宽压缩。如果以这种方式对索引进行 分区,则BVH构建器可以根据引用其图元的索引压缩块以及构建任务中的 图元数量来追踪当前构建任务的开始/结束。
空间拆分(Spatial Splits)
在一些情况下,一种广泛使用的用于提高BVH穿过效率的技术是使用 空间拆分。由于AABB不是在构建的每个级别处被重新压缩,因此很难将 构建本身期间发生的空间拆分(如一些相关工作中所见的)合并到压缩方 案中。然而,压缩方案应该与预拆分方法兼容(依据其他先前的设计)。此 类方案为BVH构建提供了一组AABB,并且通常几乎不需要对构建本身进 行修改或者完全不需要修改。
用于将这些预拆分方案与本发明的实施例结合的一种方式是预先准备 浮点AABB的阵列,包括所有拆分图元(而不是按照表C的第23行计算 它们),并且保持将它们链接回原始图元的ID阵列。然后,我们可以使用 BOI或HBI索引或常规索引来在构建期间引用这些AABB,并在需要时将 它们链接回原始图元(例如,在将叶节点写入时)。
图68示出了GPU 2505的光线追踪引擎8000的一个实施例,其具有用 于执行本文描述的压缩和解压缩技术的压缩硬件逻辑6810和解压缩硬件逻 辑6808。然而,请注意,图68包括许多特定细节,这些细节对于符合本发 明的基本原理来说不是必需的。
示出了BVH构建器6807,其基于当前图元集合6806(例如,与当前图 形图像相关联)构建BVH。在一个实施例中,BVH压缩逻辑6810与BVH 构建器6807协同操作以同时压缩由BVH构建器6807使用的底层数据以生 成数据6812的压缩版本。具体地,压缩逻辑6810包括边界框压缩器6825, 以用于生成AABB压缩块6400,以及索引压缩器6826,以用于生成如本文 描述的索引压缩块6610。虽然在图68中被示为单独的单元,但压缩逻辑 6810可以集成在BVH构建器6807内。相反,BVH构建器不需要符合本发 明的基本原理。
当系统组件需要未压缩数据6814(例如,BVH构建器6807)时,解压缩 逻辑6808实现本文描述的技术以将压缩数据6812解压缩。特别地,索引 解压缩器6836解压缩索引压缩块6610,并且边界框解压缩器6835将AABB 压缩块6400解压缩以生成未压缩数据6814的未压缩AABB。未压缩数据 6814然后可由其他系统组件访问。
图68中所示的各种组件可以以硬件、软件或其任何组合来实现。例如, 某些组件可以在一个或多个执行单元4001上执行,而诸如穿过/相交单元 6803之类的其他组件可以在硬件中实现。
此外,图元6806、压缩数据6812和未压缩数据6814可以存储在本地 存储器/高速缓存6898和/或系统存储器(未示出)中。例如,在支持共享虚拟 存储器(SVM)的系统中,虚拟存储器空间可以跨一个或多个本地存储器 和物理系统存储器映射。如上所述,BVH压缩块可以基于高速缓存层次结 构中的高速缓存行的大小来生成(例如,以适合每个高速缓存行的一个或多 个压缩块)。
示例
以下是本发明的不同实施例的示例实施方式。
示例1.一种装置,包括:穿过硬件逻辑,用于将光线穿过包含多个图 元的图形场景;以及加速数据结构处理单元,包括:边界框压缩器,用于 压缩一组边界框以生成多个边界框压缩块,索引压缩器,用于压缩一组索 引以生成多个索引压缩块,以及加速数据结构构建器,用于处理边界框压 缩块和索引压缩块以生成加速数据结构。
示例2.示例1的装置,其中加速数据结构包括边界体积层次结构 (BVH),所述边界体积层次结构(BVH)将由穿过硬件逻辑使用以将光线穿过 图形场景,所述BVH的边界框被存储为包括多个图元的层次结构表示的多 个轴对齐边界框(AABB)。
示例3.示例2的装置,其中边界框压缩器使用增量压缩来压缩第一边 界框压缩块中的第一多个所述边界框,并且所述索引压缩器使用增量压缩 来将第一多个索引压缩在第一索引压缩块中。
示例4.示例3的装置,其中第一多个边界框以序列被压缩到所述第一 边界框压缩块,并且其中增量压缩包括确定被压缩到第一边界框压缩块的 当前边界框的值与先前边界框的值之间的一个或多个差,并将一个或多个 差作为第一残差值存储在边界框压缩块中。
示例5.示例4的装置,其中第一多个索引以序列被压缩到所述第一 索引压缩块,并且其中增量压缩包括:确定被压缩到所述第一索引压缩块 的当前索引值与先前索引值之间的一个或多个差,并将一个或多个差作为 第二残差值存储在索引压缩块中。
示例6.示例5的装置,其中第一边界框压缩块还包括用于指示在所述 第一边界框压缩块中压缩的边界框的数量的第一元数据和用于指示所述第 一边界框压缩块中的每个残差值的位长度的第一残差大小矢量,并且其中 第一索引压缩块还包括用于指示在第一索引压缩块中压缩的索引数量的第 二元数据和用于指示包含第二残差值的第一索引压缩块中每个残差值的位 长的第二残差大小矢量。
示例7.示例6的装置,其中压缩到所述边界框压缩块的所述边界框值 包括整数边界框值,所述装置还包括:量化硬件逻辑,用于将原始单精度 浮点边界框值量化为整数边界框值。
示例8.示例7的装置,还包括:变换硬件逻辑,用于将整数边界框值 重新排列为数据格式以改进增量压缩。
示例9.示例6的装置,其中索引压缩器还包括:索引转换器,用于将 每个索引值转换为标识边界框压缩块的第一值和指示与索引值相关联的边 界框的残差值或残差值集合在边界框压缩块中的位置的第二值。
示例10.示例9的装置,其中第二值包括到所述边界框压缩块中的偏 移或位字段中的位值。
示例11.示例10的装置,其中如果第二值包括到边界框压缩块中的偏 移,则索引转换器实现块偏移索引(BOI)以生成偏移,并且如果第二值包括 位字段中的位值,则索引转换器实现层次结构位矢量索引(HBI)。
示例12.示例1的装置,其中加速数据结构处理单元还包括:索引解 压缩器,用于对所述索引压缩块进行解压缩,以及边界框解压缩器,用于 对边界框压缩块进行解压缩以生成对应的边界框。
示例13.一种方法,包括:压缩构建数据,以用于构建加速数据结构, 所述构建数据包括边界框和与边界框关联的索引,其中压缩包括:压缩边 界框以生成多个边界框压缩块,以及压缩索引以生成多个索引压缩块;通 过处理边界框压缩块和索引压缩块来构建加速数据结构;以及将光线穿过 所述加速数据结构。
示例14.示例13的方法,其中加速数据结构包括边界体积层次结构 (BVH),其将用于将光线穿过图形场景,BVH的边界框被存储为包括多个 图元的层次结构表示的多个轴对齐边界框(AABB)。
示例15.示例14的方法,其中增量压缩用于将第一多个边界框压缩在 第一边界框压缩块中并将第一多个索引压缩在第一索引压缩块中。
示例16.示例15的方法,其中第一多个边界框以序列被压缩到所述第 一边界框压缩块,并且其中,增量压缩包括确定被压缩到第一边界框压缩 块的当前边界框的值与先前边界框的值之间的一个或多个差,并将所述一 个或多个差作为第一残差值存储在所述边界框压缩块中。
示例17.示例16的方法,其中第一多个索引以序列被压缩到所述第一 索引压缩块,并且其中增量压缩包括确定被压缩到所述第一索引压缩块的 当前索引值与先前索引值之间的一个或多个差,并将所述一个或多个差作 为第二残差值存储在索引压缩块中。
示例18.示例17的方法,其中第一边界框压缩块还包括用于指示在所 述第一边界框压缩块中压缩的边界框的数量的第一元数据和用于指示所述 第一边界框压缩块中的每个残差值的位长度的第一残差大小矢量,并且其 中所述第一索引压缩块还包括用于指示在第一索引压缩块中压缩的索引数 量的第二元数据和用于指示包含第二残差值的第一索引压缩块中每个残差 值的位长的第二残差大小矢量。
示例19.示例18的方法,其中被压缩到边界框压缩块的边界框值包括 整数边界框值,该方法还包括:将原始单精度浮点边界框值量化为整数边 界框值。
示例20.示例19的方法还包括:将整数边界框值重新排列为数据格式 以改进增量压缩。
示例21.示例18的方法还包括:将每个索引值转换为标识边界框压缩 块的第一值和指示与索引值相关联的边界框的残差值或残差值集合在边界 框压缩块中的位置的第二值。
示例22.示例21的方法,其中第二值包括到所述边界框压缩块中的偏 移或位字段中的位值。
示例23.示例22的方法,其中块偏移索引(BOI)用于生成到边界框压 缩块中的偏移或层次结构位矢量(HBI)索引用于生成位字段中的位值。
示例24.示例13的方法还包括:解压缩所述索引压缩块和边界框压缩 块以生成对应的未压缩边界框。
示例25.一种机器可读介质,其上存储有程序代码,当由机器执行时, 使所述机器执行以下操作:压缩构建数据以构建加速数据结构,所述构建 数据包括边界框和与边界框相关联的索引,其中压缩包括:压缩边界框以 生成多个边界框压缩块,以及压缩索引以生成多个索引压缩块;通过处理 所述边界框压缩块和索引压缩块,构建所述加速数据结构;以及将光线穿 过所述加速数据结构。
示例26.示例25的机器可读介质,其中加速数据结构包括边界体积层 次结构(BVH),其将用于将光线穿过在图形场景,该图形场景存储为包括多 个图元的层次结构表示的多个轴对齐边界框(AABB)。
示例27.示例26的机器可读介质,其中增量压缩用于将第一多个边界 框压缩在第一边界框压缩块中并且将第一多个索引压缩在第一索引压缩块 中。
示例28.示例27的机器可读介质,其中第一多个边界框以序列压缩到 第一边界框压缩块,并且其中增量压缩包括:确定压缩到第一边界框压缩 块的当前边界框的值与先前边界框的值之间的一个或多个差,并将一个或 多个差作为第一残差值存储在边界框压缩块中。
示例29.示例28的机器可读介质,其中第一多个索引以序列压缩到第 一索引压缩块,并且其中增量压缩包括确定压缩到第一索引压缩块的当前 索引值和先前索引值之间的一个或多个差,并将一个或多个差作为第二残 差值存储在索引压缩块中。
示例30.示例29的机器可读介质,其中第一边界框压缩块还包括用于 指示在第一边界框压缩块中压缩的边界框的数量的第一元数据和用于指示 第一边界框压缩块中每个残差值的位长的第一残差大小矢量,并且其中第 一索引压缩块还包括用于指示在第一索引压缩块中压缩的索引的数量的第 二元数据和用于指示包括第二残差值的第一索引压缩块中的每个残差值的 位长的第二残差大小矢量。
示例31.示例30的机器可读介质,其中压缩到边界框压缩块的边界框 值包括整数边界框值,该机器可读介质还包括:将原始单精度浮点边界框 值量化为整数边界框值。
示例32.示例31的机器可读介质,还包括使机器执行以下操作的程序 代码:将整数边界框值重新排列为数据格式以改进增量压缩。
示例33.示例30的机器可读介质,还包括使机器执行以下操作的程序 代码:将每个索引值转换为标识边界框压缩块的第一值和指示与索引值相 关联的边界框的残差值在边界框压缩块中的位置的第二值。
示例34.示例33的机器可读介质,其中第二值包括到边界框压缩块中 的偏移或位字段中的位值。
示例35.示例34的机器可读介质,其中块偏移索引(BOI)用于生成到 边界框压缩块中的偏移,或层次结构位矢量(HBI)索引用于生成位字段中的 位值。
示例36.示例25的机器可读介质,还包括使机器执行以下操作的程序 代码:解压缩索引压缩块和边界框压缩块以生成对应的未压缩边界框。
本发明的实施例可以包括上面已经描述的各种步骤。这些步骤可以体 现在机器可执行指令中,该指令可以用于使通用或专用处理器执行这些步 骤。可替代地,这些步骤可以由包含用于执行这些步骤的硬连线逻辑的特 定硬件组件来执行,或者由编程的计算机组件和自定义硬件组件的任何组 合来执行。
如本文所述,指令可以指诸如专用集成电路(ASIC)的硬件的特定配置, 其被配置为执行某些操作或具有存储在包含在非暂时性计算机可读介质中 的存储器中的预定功能或软件指令。因此,图中所示的技术可以使用在一 个或多个电子设备(例如,终端站、网络元件等)上存储和执行的代码和数据 来实现。此类电子设备使用计算机机器可读介质,例如非暂时性计算机机 器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪存设备;相变存储器)和瞬态计算机机器可读通信介质(例如,电、光、 声或其他形式的传播信号——例如载波、红外信号、数字信号、等等)对 代码和数据存储和通信(在内部和/或通过网络与其他电子设备)。
此外,此类电子设备通常包括一组一个或多个处理器,这些处理器耦 合到一个或多个其他组件,例如一个或多个存储设备(非暂时性机器可读 存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或显示器)和网 络连接。一组处理器和其他组件的耦合通常是通过一个或多个总线和桥(也 称为总线控制器)。承载网络流量的存储设备和信号分别代表一种或多种机 器可读存储介质和机器可读通信介质。因此,给定电子设备的存储设备通常存储用于在该电子设备的一个或多个处理器的集合上执行的代码和/或数 据。当然,本发明的实施例的一个或多个部分可以使用软件、固件和/或硬 件的不同组合来实现。在整个详细描述中,为了解释的目的,阐述了许多 具体细节以提供对本发明的透彻理解。然而,对于本领域技术人员来说显 而易见的是,可以在没有这些具体细节中的一些的情况下实践本发明。在 某些情况下,为了避免混淆本发明的主题,没有详细描述众所周知的结构 和功能。因此,应根据所附权利要求来判断本发明的范围和精神。

Claims (25)

1.一种装置,包括:
穿过硬件逻辑,其用于将光线穿过包括多个图元的图形场景;以及
加速数据结构处理单元,其包括:
边界框压缩器,其用于压缩一组边界框以生成多个边界框压缩块,
索引压缩器,其用于压缩一组索引以生成多个索引压缩块,以及
加速数据结构构建器,其用于处理所述边界框压缩块和索引压缩块以生成加速数据结构。
2.如权利要求1所述的装置,其中,所述加速数据结构包括边界体积层次结构(BVH),所述边界体积层次结构(BVH)将由所述穿过硬件逻辑使用以将所述光线穿过所述图形场景,所述BVH的边界框被存储为包括所述多个图元的层次结构表示的多个轴对齐边界框(AABB)。
3.如权利要求2所述的装置,其中,所述边界框压缩器用于使用增量压缩来将所述边界框中的第一多个边界框压缩在第一边界框压缩块中,并且所述索引压缩器用于使用增量压缩来将所述索引中的第一多个索引压缩在第一索引压缩块中。
4.如权利要求3所述的装置,其中,所述第一多个边界框以序列被压缩到所述第一边界框压缩块,并且其中,增量压缩包括:确定当前边界框的值与被压缩到所述第一边界框压缩块的先前边界框的值之间的一个或多个差,以及将所述一个或多个差作为第一残差值存储在所述边界框压缩块中。
5.如权利要求4所述的装置,其中,所述第一多个索引以序列被压缩到所述第一索引压缩块,并且其中,增量压缩包括:确定当前索引值与被压缩到所述第一索引压缩块的先前索引值之间的一个或多个差,以及将所述一个或多个差作为第二残差值存储在所述索引压缩块中。
6.如权利要求5所述的装置,其中,所述第一边界框压缩块还包括:第一元数据,其用于指示被压缩在所述第一边界框压缩块中的边界框的数量,以及第一残差大小矢量,其用于指示所述第一边界框压缩块中的每个残差值的位长度,其中,所述第一索引压缩块还包括:第二元数据以及第二残差大小矢量,所述第二元数据用于指示被压缩在所述第一索引压缩块中的索引的数量,所述第二残差大小矢量用于指示包括所述第二残差值的所述第一索引压缩块中每个残差值的位长。
7.如权利要求6所述的装置,其中,被压缩到所述边界框压缩块的边界框值包括整数边界框值,所述装置还包括:
量化硬件逻辑,其用于将原始单精度浮点边界框值量化为整数边界框值。
8.如权利要求7所述的装置,还包括:
变换硬件逻辑,其用于将所述整数边界框值重新排列为数据格式以改进增量压缩。
9.如权利要求6至8中任一项所述的装置,其中,所述索引压缩器还包括:
索引转换器,其用于将每个索引值转换为第一值和第二值,所述第一值标识边界框压缩块,所述第二值针对与所述索引值相关联的边界框指示残差值或残差值集合在所述边界框压缩块中的位置。
10.如权利要求9所述的装置,其中,所述第二值包括到所述边界框压缩块中的偏移或位字段中的位值。
11.如权利要求10所述的装置,其中,如果所述第二值包括到所述边界框压缩块中的偏移,则所述索引转换器实现块偏移索引(BOI)以生成所述偏移,并且如果所述第二值包括位字段中的位值,则所述索引转换器实现层次结构位矢量索引(HBI)。
12.如权利要求1至11中任一项所述的装置,其中,所述加速数据结构处理单元还包括:
索引解压缩器,其用于对所述索引压缩块进行解压缩;以及边界框解压缩器,其用于对所述边界框压缩块进行解压缩以生成对应的边界框。
13.一种方法,包括:
压缩构建数据以用于构建加速数据结构,所述构建数据包括边界框以及与所述边界框相关联的索引,其中,压缩包括:
压缩所述边界框以生成多个边界框压缩块,以及
压缩所述索引以生成多个索引压缩块;
通过处理所述边界框压缩块和所述索引压缩块,来构建所述加速数据结构;以及
将光线穿过所述加速数据结构。
14.如权利要求13所述的方法,其中,所述加速数据结构包括边界体积层次结构(BVH),所述边界体积层次结构(BVH)要用于将光线穿过图形场景,所述BVH的边界框被存储为包括多个图元的层次结构表示的多个轴对齐边界框(AABB)。
15.如权利要求14所述的方法,其中,增量压缩用于:将所述边界框中的第一多个边界框压缩在第一边界框压缩块中,以及将所述索引中的第一多个索引压缩在第一索引压缩块中。
16.如权利要求15所述的方法,其中,所述第一多个边界框以序列被压缩到所述第一边界框压缩块,并且其中,增量压缩包括:确定当前边界框的值与被压缩到所述第一边界框压缩块的先前边界框的值之间的一个或多个差,以及将所述一个或多个差作为第一残差值存储在所述边界框压缩块中。
17.如权利要求16所述的方法,其中,所述第一多个索引以序列被压缩到所述第一索引压缩块,并且其中,增量压缩包括:确定当前索引值与被压缩到所述第一索引压缩块的先前索引值之间的一个或多个差,以及将所述一个或多个差作为第二残差值存储在所述索引压缩块中。
18.如权利要求17所述的方法,其中,所述第一边界框压缩块还包括:第一元数据以及第一残差大小矢量,所述第一元数据用于指示被压缩在所述第一边界框压缩块中的边界框的数量,所述第一残差大小矢量用于指示所述第一边界框压缩块中的每个残差值的位长度,并且其中,所述第一索引压缩块还包括:第二元数据以及第二残差大小矢量,所述第二元数据用于指示被压缩在所述第一索引压缩块中压缩的索引的数量,所述第二残差大小矢量用于指示包括所述第二残差值的所述第一索引压缩块中每个残差值的位长。
19.如权利要求18所述的方法,其中,被压缩到所述边界框压缩块的边界框值包括整数边界框值,所述方法还包括:
将原始单精度浮点边界框值量化为整数边界框值。
20.如权利要求19所述的方法,还包括:
将所述整数边界框值重新排列为数据格式以改进增量压缩。
21.如权利要求18至20中任一项所述的方法,还包括:
将每个索引值转换为第一值和第二值,所述第一值标识边界框压缩块,所述第二值针对与所述索引值相关联的边界框指示残差值或残差值集合在所述边界框压缩块中的位置。
22.如权利要求21所述的方法,其中,所述第二值包括到所述边界框压缩块中的偏移或位字段中的位值。
23.如权利要求22所述的方法,其中,块偏移索引(BOI)用于生成到所述边界框压缩块中的所述偏移,或者层次结构位矢量(HBI)索引用于生成所述位字段中的所述位值。
24.如权利要求13至23中任一项所述的方法,还包括:
解压缩所述索引压缩块和边界框压缩块,以生成对应的未压缩边界框。
25.一种机器可读介质,其上存储有程序代码,所述程序代码当由机器执行时,使所述机器执行以下操作:
压缩构建数据以用于构建加速数据结构,所述构建数据包括边界框以及与所述边界框相关联的索引,其中,压缩包括:
压缩所述边界框以生成多个边界框压缩块,以及
压缩所述索引以生成多个索引压缩块;
通过处理所述边界框压缩块和所述索引压缩块,来构建所述加速数据结构;以及
将光线穿过所述加速数据结构。
CN202110809488.2A 2020-08-17 2021-07-16 用于压缩光线追踪加速结构构建数据的装置和方法 Pending CN114078076A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063066799P 2020-08-17 2020-08-17
US63/066,799 2020-08-17
US17/083,123 US11995767B2 (en) 2020-08-17 2020-10-28 Apparatus and method for compressing ray tracing acceleration structure build data
US17/083,123 2020-10-28

Publications (1)

Publication Number Publication Date
CN114078076A true CN114078076A (zh) 2022-02-22

Family

ID=78649987

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202110809488.2A Pending CN114078076A (zh) 2020-08-17 2021-07-16 用于压缩光线追踪加速结构构建数据的装置和方法
CN202180060436.8A Pending CN116075863A (zh) 2020-08-17 2021-07-20 用于包括光线追踪的高效图形处理的装置和方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202180060436.8A Pending CN116075863A (zh) 2020-08-17 2021-07-20 用于包括光线追踪的高效图形处理的装置和方法

Country Status (7)

Country Link
US (2) US11995767B2 (zh)
EP (1) EP4196961A4 (zh)
CN (2) CN114078076A (zh)
DE (2) DE102021118059A1 (zh)
NL (1) NL2028744B1 (zh)
TW (1) TW202209258A (zh)
WO (1) WO2022039869A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117950726A (zh) * 2024-03-26 2024-04-30 武汉凌久微电子有限公司 基于gpu指令集的spir-v链式操作指令处理方法

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
CN110826706B (zh) * 2018-08-10 2023-10-03 北京百度网讯科技有限公司 用于神经网络的数据处理方法和装置
US11069119B1 (en) * 2020-02-28 2021-07-20 Verizon Patent And Licensing Inc. Methods and systems for constructing a shader
EP3940649A1 (en) * 2020-07-14 2022-01-19 Imagination Technologies Limited Methods and systems for constructing ray tracing acceleration structures
US20220159278A1 (en) * 2020-11-16 2022-05-19 Qualcomm Incorporated Skip convolutions for efficient video processing
KR20220077709A (ko) * 2020-12-02 2022-06-09 삼성전자주식회사 뉴럴 네트워크 연산 방법, 장치 및 그 뉴럴 네트워크 연산을 이용한 키워드 검출 방법
US11636625B2 (en) * 2020-12-11 2023-04-25 Qualcomm Incorporated Image compression and decompression
US11908064B2 (en) * 2021-05-14 2024-02-20 Nvidia Corporation Accelerated processing via a physically based rendering engine
US11853764B2 (en) 2021-05-14 2023-12-26 Nvidia Corporation Accelerated processing via a physically based rendering engine
US11875444B2 (en) 2021-05-14 2024-01-16 Nvidia Corporation Accelerated processing via a physically based rendering engine
US11830123B2 (en) 2021-05-14 2023-11-28 Nvidia Corporation Accelerated processing via a physically based rendering engine
US11704860B2 (en) 2021-05-14 2023-07-18 Nvidia Corporation Accelerated processing via a physically based rendering engine
US12075073B2 (en) * 2021-05-19 2024-08-27 Pony Ai Inc. Efficient retrieval of sensor data
GB2608386B (en) * 2021-06-29 2024-05-15 Imagination Tech Ltd Transformation of data in a ray tracing system
US20230185706A1 (en) * 2021-12-09 2023-06-15 Nvidia Corporation Asynchronous memory deallocation
US11861785B2 (en) * 2022-02-04 2024-01-02 Qualcomm Incorporated Generation of tight world space bounding regions
US11763523B2 (en) * 2022-02-04 2023-09-19 Qualcomm Incorporated Compressed THIT stack for hardware-accelerated GPU ray tracing
US12056819B2 (en) * 2022-02-04 2024-08-06 Qualcomm Incorporated Compressed traversal stack for GPU ray tracing
US20230252725A1 (en) * 2022-02-04 2023-08-10 Qualcomm Incorporated Bounding volume hierarchy leaf node compression
US20230298127A1 (en) * 2022-03-18 2023-09-21 Intel Corporation Apparatus and method for biased bvh traversal path
US12033262B2 (en) * 2022-03-31 2024-07-09 Electronic Arts Inc. Learning character model animations with a layer-wise mixture-of-experts network
US20230388544A1 (en) * 2022-05-27 2023-11-30 Tencent America LLC Dynamic mesh compression using inter and intra prediction
US20230410567A1 (en) * 2022-06-16 2023-12-21 Woven By Toyota, Inc. Systems and methods for assessing the performance of an automated autonomous driving evaluator
US20240015289A1 (en) * 2022-07-08 2024-01-11 Tencent America LLC Adaptive quantization for instance-based mesh coding
US12008728B2 (en) * 2022-08-31 2024-06-11 Qualcomm Incorporated Apparatuses and methods for processing single instruction for image transformation from non-integral locations
US12079510B2 (en) 2022-09-08 2024-09-03 Samsung Electronics Co., Ltd. Systems and methods for executing data processing functions
US20240137564A1 (en) * 2022-10-07 2024-04-25 Tencent America LLC Fast computation of local coordinate system for displacement vectors in mesh coding
WO2024086382A1 (en) * 2022-10-21 2024-04-25 Innopeak Technology, Inc. Methods and systems for rendering video graphics using scene segmentation
US20240174254A1 (en) * 2022-11-28 2024-05-30 Toyota Motor Engineering & Manufacturing North America, Inc. Systems and methods for communication-aware federated learning
US20240203032A1 (en) * 2022-12-14 2024-06-20 Advanced Micro Devices, Inc. Bounding volume hierarchy leaf node compression
US20240203036A1 (en) * 2022-12-16 2024-06-20 Advanced Micro Devices, Inc. Technique for generating a bounding volume hierarchy
DE102023104360A1 (de) 2023-02-22 2024-08-22 Bayerische Motoren Werke Aktiengesellschaft Verfahren und Optimierungsagent zum Optimieren eines Systems mit mehreren neuronalen Netzen
GB2622292A (en) * 2023-03-08 2024-03-13 Imagination Tech Ltd Tessellation methods and systems in ray tracing

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5263136A (en) 1991-04-30 1993-11-16 Optigraphics Corporation System for managing tiled images using multiple resolutions
US6047088A (en) 1996-12-16 2000-04-04 Sharp Laboratories Of America, Inc. 2D mesh geometry and motion vector compression
US6219058B1 (en) 1997-09-08 2001-04-17 Intel Corporation Bin-per-span based representation and communication of graphical data
US7102646B1 (en) 1997-11-25 2006-09-05 Nvidia U.S. Investment Company Demand-based memory system for graphics applications
WO1999034336A1 (en) 1997-12-29 1999-07-08 The United States Of America, Represented By The Administrator Of The National Aeronautics And Space Administration (Nasa) Triangle geometry processing for surface modeling and cartesian grid generation
US6344852B1 (en) 1999-03-17 2002-02-05 Nvidia Corporation Optimized system and method for binning of graphics data
US7499053B2 (en) 2000-06-19 2009-03-03 Mental Images Gmbh Real-time precision ray tracing
US6734867B1 (en) 2000-06-28 2004-05-11 Micron Technology, Inc. Cache invalidation method and apparatus for a graphics processing system
WO2005081683A2 (en) 2004-02-12 2005-09-09 Pixar Method and apparatus for multiresolution geometry caching based on ray differentials
JP4557629B2 (ja) * 2004-08-06 2010-10-06 株式会社東芝 画像処理方法、画像処理プログラム、及び画像処理コンピュータ
US7570271B1 (en) 2006-02-10 2009-08-04 Adobe Systems Incorporated High speed display of high resolution image
US7969434B2 (en) 2006-09-19 2011-06-28 Caustic Graphics, Inc. Method, apparatus, and computer readable medium for accelerating intersection testing in ray-tracing rendering
US8139060B2 (en) 2006-11-28 2012-03-20 International Business Machines Corporation Ray tracing image processing system
US8237711B2 (en) 2007-11-19 2012-08-07 Caustic Graphics, Inc. Tracing of shader-generated ray groups using coupled intersection testing
US8963918B2 (en) 2008-09-30 2015-02-24 Microsoft Corporation Ray tracing on graphics hardware using kd-trees
US8570322B2 (en) 2009-05-12 2013-10-29 Nvidia Corporation Method, system, and computer program product for efficient ray tracing of micropolygon geometry
US8669977B2 (en) * 2009-10-01 2014-03-11 Intel Corporation Hierarchical mesh quantization that facilitates efficient ray tracing
US20110216068A1 (en) 2010-03-08 2011-09-08 Sathe Rahul P Edge processing techniques
GB201104066D0 (en) 2011-03-09 2011-04-20 Imagination Tech Ltd Compression of a tessellated primitive index list in a tile rendering system
US8791945B2 (en) 2011-05-18 2014-07-29 Intel Corporation Rendering tessellated geometry with motion and defocus blur
WO2013101167A1 (en) 2011-12-30 2013-07-04 Intel Corporation Five-dimensional rasterization with conservative bounds
US10409445B2 (en) 2012-01-09 2019-09-10 Activevideo Networks, Inc. Rendering of an interactive lean-backward user interface on a television
US9418616B2 (en) 2012-12-20 2016-08-16 Nvidia Corporation Technique for storing shared vertices
US9223789B1 (en) 2013-03-14 2015-12-29 Amazon Technologies, Inc. Range retrievals from archived data objects according to a predefined hash tree schema
GB2506706B (en) 2013-04-02 2014-09-03 Imagination Tech Ltd Tile-based graphics
US9984498B2 (en) * 2013-07-17 2018-05-29 Microsoft Technology Licensing, Llc Sparse GPU voxelization for 3D surface reconstruction
US9940686B2 (en) 2014-05-14 2018-04-10 Intel Corporation Exploiting frame to frame coherency in a sort-middle architecture
US9928640B2 (en) 2015-12-18 2018-03-27 Intel Corporation Decompression and traversal of a bounding volume hierarchy
US9858704B2 (en) * 2016-04-04 2018-01-02 Intel Corporation Reduced precision ray traversal with plane reuse
US10062206B2 (en) * 2016-08-30 2018-08-28 Advanced Micro Devices, Inc. Parallel micropolygon rasterizers
US10614611B2 (en) * 2017-04-07 2020-04-07 Intel Corporation Apparatus and method for implementing bounding volume hierarchy (BVH) operations on tesselation hardware
US10839475B2 (en) 2018-04-11 2020-11-17 Intel IP Corporation Apparatus and method for compressing leaf nodes of a bounding volume hierarchy (BVH)
US10825230B2 (en) 2018-08-10 2020-11-03 Nvidia Corporation Watertight ray triangle intersection
US11062500B2 (en) 2018-12-28 2021-07-13 Intel Corporation Apparatus and method for ray tracing with grid primitives
US11321910B2 (en) 2019-04-04 2022-05-03 Intel Corporation Apparatus and method for reduced precision bounding volume hierarchy construction

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117950726A (zh) * 2024-03-26 2024-04-30 武汉凌久微电子有限公司 基于gpu指令集的spir-v链式操作指令处理方法

Also Published As

Publication number Publication date
US20220051466A1 (en) 2022-02-17
US20220051476A1 (en) 2022-02-17
US11995767B2 (en) 2024-05-28
NL2028744B1 (en) 2022-08-11
DE102021118444A1 (de) 2022-03-24
CN116075863A (zh) 2023-05-05
WO2022039869A1 (en) 2022-02-24
DE102021118059A1 (de) 2022-03-10
EP4196961A4 (en) 2024-10-09
NL2028744A (en) 2022-04-07
TW202209258A (zh) 2022-03-01
EP4196961A1 (en) 2023-06-21

Similar Documents

Publication Publication Date Title
US11995767B2 (en) Apparatus and method for compressing ray tracing acceleration structure build data
NL2028745B1 (en) Apparatus and method for efficient graphics processing including ray tracing
CN113470179A (zh) 用于移位的网格压缩的装置和方法
JP7525091B2 (ja) 非同期レイトレーシング用の装置及び方法
US11900498B2 (en) Apparatus and method for performing a stable and short latency sorting operation
JP7494258B2 (ja) ツリー構造データ削減のための装置および方法
EP4246449A1 (en) Apparatus and method for accelerating bvh builds by merging bounding boxes
CN113409435A (zh) 用于使用图形处理器的运动估计电路来执行非局部均值滤波的设备和方法
CN113470157A (zh) 用于在光线遍历硬件中执行盒查询的设备和方法
US20230298255A1 (en) Apparatus and method for acceleration data structure re-braiding with camera position
WO2023146669A1 (en) Stack access throttling for synchronous ray tracing
CN115775197A (zh) 用于利用重要性采样的随机拼贴照明的装置和方法
US11989817B2 (en) Apparatus and method for high quality ray-traced level of detail transitions
EP4246450A1 (en) Apparatus and method for biased bvh traversal path
US20240233238A1 (en) Apparatus and method for intra-bvh level-of-detail selection
US20240020911A1 (en) Apparatus and Method for Routing Data from Ray Tracing Cache Banks
CN115861517A (zh) 用于利用着色器调用图分析进行光线追踪的装置和方法
US20230298126A1 (en) Node prefetching in a wide bvh traversal with a stack
US20230297508A1 (en) Apparatus and method for hardware-accelerated texture lookup and interpolation

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination