CN111383161A - 基于硬件预排序和并行的可重配置聚类阵列的bvh构建的统一架构 - Google Patents

基于硬件预排序和并行的可重配置聚类阵列的bvh构建的统一架构 Download PDF

Info

Publication number
CN111383161A
CN111383161A CN201911191149.1A CN201911191149A CN111383161A CN 111383161 A CN111383161 A CN 111383161A CN 201911191149 A CN201911191149 A CN 201911191149A CN 111383161 A CN111383161 A CN 111383161A
Authority
CN
China
Prior art keywords
node
data
nodes
graphics
bvh
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
CN201911191149.1A
Other languages
English (en)
Inventor
M·多伊尔
T·施吕斯列尔
G·利克托尔
A·桑原
J·阿姆斯特茨
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 CN111383161A publication Critical patent/CN111383161A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • 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/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects

Abstract

本申请公开了基于硬件预排序和并行的可重配置聚类阵列的BVH构建的统一架构。一种装置,包括:排序单元,用于对图形图像的基元排序,这些基元用于被分组,每个组用于形成层级式加速结构的第一级节点;并行可重配置聚类阵列,用于构建层级式加速结构,该并行可重配置聚类阵列包括多个处理集群,每个处理集群包括:并行效率分析电路,用于评估第一级节点的不同分组以供层级式加速结构的下一级用来确定用于这些不同分组的效率值;以及节点合并电路,用于基于效率值来合并第一级节点以形成第二级节点。

Description

基于硬件预排序和并行的可重配置聚类阵列的BVH构建的统 一架构
背景
技术领域
本发明总体上涉及图形处理器的领域。更具体地,本发明涉及用于执行更高效的光线追踪操作的装置和方法。
背景技术
光线追踪是在其中通过基于物理的渲染来模拟光传输的技术。尽管在电影渲染中广泛使用,但是直到仅仅几年前,人们认为其对于实时性能是过于资源密集型的。光线追踪中的关键操作之一是被称为“光线遍历”的对光线-场景相交的可见性查询,“光线遍历”通过遍历包围体层级结构(BVH)中的节点并使BVH中的节点相交来计算光线-场景相交。
降噪已成为对于具有平滑的、无噪声图像的实时光线追踪的关键特征。可跨分布式系统在多个设备上完成渲染,但是到目前为止,现有的降噪框架全都对于单个机器上的单个实例进行操作。如果正在跨多个设备进行渲染,则这些设备可能无法使所有经渲染的像素对于计算图像的经降噪的部分可访问。
附图说明
结合以下附图,从以下具体实施方式可获得对本发明更好的理解,其中:
图1是具有处理器的计算机系统的实施例的框图,该处理器具有一个或多个处理器核和图形处理器;
图2是处理器的一个实施例的框图,该处理器具有一个或多个处理器核、集成存储器控制器以及集成图形处理器;
图3是图形处理器的一个实施例的框图,该图形处理器可以是分立的图形处理单元,或者可以是与多个处理核集成的图形处理器;
图4是用于图形处理器的图形处理引擎的实施例的框图;
图5是图形处理器的另一实施例的框图;
图6A-图6B图示执行电路和逻辑的示例;
图7图示根据实施例的图形处理器执行单元指令格式;
图8是图形处理器的另一实施例的框图,该图形处理器包括图形流水线、媒体流水线、显示引擎、线程执行逻辑以及渲染输出流水线;
图9A是图示根据实施例的图形处理器命令格式的框图;
图9B是图示根据实施例的图形处理器命令序列的框图;
图10图示根据实施例的用于数据处理系统的示例性图形软件架构;
图11A-图11B图示示例性IP核开发系统,其可用于制造集成电路和示例性封装组件;
图12图示根据实施例的可使用一个或多个IP核来制造的示例性芯片上系统集成电路;
图13A-图13B图示可使用一个或多个IP核来制造的芯片上系统集成电路的示例性图形处理器;
图14A-图14B图示示例性图形处理器架构;
图15图示用于执行机器学习架构的初始训练的架构的一个实施例;
图16图示在其中持续训练机器学习引擎并在运行时期间更新机器学习引擎的一个实施例;
图17图示在其中持续训练机器学习引擎并在运行时期间更新机器学习引擎的另一实施例;
图18A-图18B图示在其中在网络上共享机器学习数据的实施例;并且
图19图示用于训练机器学习引擎的方法的一个实施例;
图20图示在其中节点交换虚假(ghost)区域数据以执行分布式降噪操作的一个实施例;
图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图示用于执行BVH修整操作的装置的一个实施例;
图46A-图46B图示当执行BVH修整操作时使用的示例内节点和叶节点,该BVH修整操作包括节点数据的深度优先搜索(DFS)布局;
图46C图示根据本发明的一个实施例的用于实现BVH修整的方法;
图47图示用于执行BVH修整操作的一个实施例;
图48A图示用于执行BVH修整操作的早期终止的一个实施例;
图48B图示根据本发明的一个实施例的BVH修整方法;
图49图示示例BVH和不同类型的容体的集合;
图50图示用于执行多形状遍历/相交操作的装置;
图51图示网格基元的示例;
图52图示用于利用位掩码处理网格基元的示例系统;
图53图示包围体层级结构的一个实施例;
图54A-图54B图示用于执行光束追踪操作的一个实施例;
图54C图示根据本发明的一个实施例的方法;
图55A-图55C图示系统MMU页高速缓存的实施例;
图56图示用于执行BVH构建和修整操作的架构的一个实施例;
图57图示可重编程单元的一个实施例;并且
图58图示根据一个实施例的用于遍历和相交的方法。
具体实施方式
在下面的描述中,出于解释的目的,阐述了众多特定细节以便提供对下文所描述的本发明的实施例的透彻理解。然而,对本领域技术人员将显而易见的是,可在没有这些特定细节中的一些细节的情况下实施本发明的实施例。在其他实例中,以框图形式示出公知的结构和设备,以避免使本发明的实施例的基本原理变得模糊。
示例性图形处理器架构和数据类型
系统概览
图1是根据实施例的处理系统100的框图。在各实施例中,系统100包括一个或多个处理器102以及一个或多个图形处理器108,并且可以是单处理器台式机系统、多处理器工作站系统或具有大量处理器102或处理器核107的服务器系统。在一个实施例中,系统100是被并入在用于在移动设备、手持式设备或嵌入式设备中使用的芯片上系统(SoC)集成电路内的处理平台。
在一个实施例中,系统100可包括以下各项或可并入在以下各项内:基于服务器的游戏平台、包括游戏和媒体控制台的游戏控制台、移动游戏控制台、手持式游戏控制台或在线游戏控制台。在一些实施例中,系统100是移动电话、智能电话、平板计算设备或移动互联网设备。处理系统100也可包括可穿戴设备,可与可穿戴设备耦合或可集成在可穿戴设备内,该可穿戴设备诸如,智能手表可穿戴设备、智能眼镜设备、增强现实设备或虚拟现实设备。在一些实施例中,处理系统100是电视机或机顶盒设备,该电视机或机顶盒设备具有一个或多个处理器102以及由一个或多个图形处理器108生成的图形界面。
在一些实施例中,该一个或多个处理器102各自都包括一个或多个处理器核107,该一个或多个处理器核107用于处理指令,这些指令当被执行时,执行用于系统和用户软件的操作。在一些实施例中,一个或多个处理器核107中的每一个处理器核都被配置成处理特定的指令集109。在一些实施例中,指令集109可促进复杂指令集计算(CISC)、精简指令集计算(RISC)或经由超长指令字(VLIW)的计算。多个处理器核107各自都可处理不同的指令集109,不同的指令集109可包括用于促进对其他指令集的仿真的指令。处理器核107也可包括其他处理设备,诸如数字信号处理器(DSP)。
在一些实施例中,处理器102包括高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级的内部高速缓存。在一些实施例中,高速缓存存储器在处理器102的各种组件之间被共享。在一些实施例中,处理器102也使用外部高速缓存(例如,第3级(L3)高速缓存或末级高速缓存(LLC))(未示出),可使用已知的高速缓存一致性技术在处理器核107之间共享该外部高速缓存。寄存器堆106附加地被包括在处理器102中,寄存器堆106可包括用于存储不同类型数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器以及指令指针寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可专用于处理器102的设计。
在一些实施例中,一个或多个处理器102与一个或多个接口总线110耦合,以在处理器102与系统100中的其他组件之间传输通信信号,诸如,地址、数据、或控制信号。在一个实施例中,接口总线110可以是处理器总线,诸如,直接媒体接口(DMI)总线的某个版本。然而,处理器总线不限于DMI总线,并且可包括一个或多个外围组件互连总线(例如,PCI、PCIExpress)、存储器总线或其他类型的接口总线。在一个实施例中,(多个)处理器102包括集成存储器控制器116和平台控制器中枢130。存储器控制器116促进存储器设备与系统100的其他组件之间的通信,而平台控制器中枢(PCH)130提供经由本地I/O总线至I/O设备的连接。
存储器设备120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备、相变存储器设备、或具有适当的性能以充当进程存储器的某个其他存储器设备。在一个实施例中,存储器设备120可以作为用于系统100的系统存储器来操作,以存储数据122和指令121供在一个或多个处理器102执行应用或进程时使用。存储器控制器116也与任选的外部图形处理器112耦合,该任选的外部图形处理器112可与处理器102中的一个或多个图形处理器108通信以执行图形操作和媒体操作。在一些实施例中,显示设备111可以连接至(多个)处理器102。显示设备111可以是以下各项中的一项或多项:内部显示设备,如在移动电子设备或膝上型设备中;或经由显示接口(例如,显示端口等)附接的外部显示设备。在一个实施例中,显示设备111可以是头戴式显示器(HMD),诸如,用于在虚拟现实(VR)应用或增强现实(AR)应用中使用的立体显示设备。
在一些实施例中,平台控制器中枢130使外围设备能够经由高速I/O总线而连接至存储器设备120和处理器102。I/O外围设备包括但不限于音频控制器146、网络控制器134、固件接口128、无线收发器126、触摸传感器125、数据存储设备124(例如,硬盘驱动器、闪存等)。数据存储设备124可以经由存储接口(例如,SATA)或经由如外围组件互连总线(例如,PCI、PCI Express)等外围总线来进行连接。触摸传感器125可以包括触摸屏传感器、压力传感器、或指纹传感器。无线收发器126可以是Wi-Fi收发器、蓝牙收发器、或移动网络收发器,该移动网络收发器诸如3G、4G或长期演进(LTE)收发器。固件接口128使得能够与系统固件进行通信,并且可以例如是统一可扩展固件接口(UEFI)。网络控制器134可启用到有线网络的网络连接。在一些实施例中,高性能网络控制器(未示出)与接口总线110耦合。在一个实施例中,音频控制器146是多声道高清音频控制器。在一个实施例中,系统100包括用于将传统(例如,个人系统2(PS/2))设备耦合至系统的任选的传统I/O控制器140。平台控制器中枢130还可以连接至一个或多个通用串行总线(USB)控制器142 连接输入设备,诸如,键盘和鼠标143组合、相机144、或其他USB输入设备。
将会理解,所示的系统100是示例性的而非限制性的,因为也可以使用以不同方式配置的其他类型的数据处理系统。例如,存储器控制器116和平台控制器中枢130的实例可以集成到分立的外部图形处理器中,该分立的外部图形处理器诸如外部图形处理器112。在一个实施例中,平台控制器中枢130和/或存储器控制器116可以在一个或多个处理器102外部。例如,系统100可包括外部存储器控制器116和平台控制器中枢130,该外部存储器控制器116和平台控制器中枢130可以被配置为在与(多个)处理器102通信的系统芯片组内的存储器控制器中枢和外围控制器中枢。
图2是处理器200的实施例的框图,该处理器200具有一个或多个处理器核202A-202N、集成存储器控制器214以及集成图形处理器208。图2的具有与本文中的任何其他附图的元件相同的附图标记(或名称)的那些元件能以类似于本文中其他地方描述的任何方式操作或起作用,但不限于此。处理器200可包括附加的核,这些附加的核多至由虚线框表示的附加核202N并包括由虚线框表示的附加核202N。处理器核202A-202N中的每一个包括一个或多个内部高速缓存单元204A-204N。在一些实施例中,每一个处理器核也具有对一个或多个共享高速缓存单元206的访问权。
内部高速缓存单元204A-204N和共享高速缓存单元206表示处理器200内的高速缓存存储器层级结构。高速缓存存储器层级结构可包括每个处理器核内的至少一个级别的指令和数据高速缓存以及一级或多级共享的中级高速缓存,诸如,第2级(L2)、第3级(L3)、第4级(L4)、或其他级别的高速缓存,其中,在外部存储器之前的最高级别的高速缓存被分类为LLC。在一些实施例中,高速缓存一致性逻辑维持各高速缓存单元206与204A-204N之间的一致性。
在一些实施例中,处理器200还可包括一个或多个总线控制器单元的集合216和系统代理核210。一个或多个总线控制器单元216管理外围总线的集合,诸如一个或多个PCI总线或PCI Express总线。系统代理核210提供对各处理器组件的管理功能。在一些实施例中,系统代理核210包括用于管理对各种外部存储器设备(未示出)的访问的一个或多个集成存储器控制器214。
在一些实施例中,处理器核202A-202N中的一个或多个处理器核包括对同步多线程的支持。在此类实施例中,系统代理核210包括用于在多线程处理期间协调并操作核202A-202N的组件。系统代理核210可附加地包括功率控制单元(PCU),该功率控制单元包括用于调节处理器核202A-202N和图形处理器208的功率状态的逻辑和组件。
在一些实施例中,处理器200附加地包括用于执行图形处理操作的图形处理器208。在一些实施例中,图形处理器208耦合至共享高速缓存单元的集合206以及系统代理核210,该系统代理核210包括一个或多个集成存储器控制器214。在一些实施例中,系统代理核210还包括用于将图形处理器输出驱动到一个或多个经耦合的显示器的显示控制器211。在一些实施例中,显示控制器211还可以是经由至少一个互连与图形处理器耦合的单独模块,或者可以集成在图形处理器208内。
在一些实施例中,基于环的互连单元212用于耦合处理器200的内部组件。然而,可以使用替代的互连单元,诸如,点到点互连、交换式互连、或其他技术,包括本领域中公知的技术。在一些实施例中,图形处理器208经由I/O链路213与环形互连212耦合。
示例性I/O链路213表示多个各种各样的I/O互连中的至少一种,包括促进各处理器组件与高性能嵌入式存储器模块218(诸如,eDRAM模块)之间的通信的封装上I/O互连。在一些实施例中,处理器核202A-202N中的每个处理器核以及图形处理器208将嵌入式存储器模块218用作共享的末级高速缓存。
在一些实施例中,处理器核202A至202N是执行相同指令集架构的同构核。在另一实施例中,处理器核202A-202N在指令集架构(ISA)方面是异构的,其中,处理器核202A-202N中的一个或多个执行第一指令集,而其他核中的至少一个执行第一指令集的子集或不同的指令集。在一个实施例中,处理器核202A-202N在微架构方面是异构的,其中,具有相对较高功耗的一个或多个核与具有较低功耗的一个或多个功率核耦合。此外,处理器200可实现在一个或多个芯片上,或者除其他组件之外也被实现为具有所图示的组件的SoC集成电路。
图3是图形处理器300的框图,该图形处理器300可以是分立式图形处理单元,或者可以是集成有多个处理核的图形处理器。在一些实施例中,图形处理器经由到图形处理器上的寄存器的存储器映射的I/O接口并且利用被放置到处理器存储器中的命令进行通信。在一些实施例中,图形处理器300包括用于访问存储器的存储器接口314。存储器接口314可以是到本地存储器、一个或多个内部高速缓存、一个或多个共享的外部高速缓存、和/或到系统存储器的接口。
在一些实施例中,图形处理器300还包括显示控制器302,该显示控制器302用于将显示输出数据驱动到显示设备320。显示控制器302包括用于显示器的一个或多个叠加平面以及多层的视频或用户界面元素的合成的硬件。显示设备320可以是内部或外部显示设备。在一个实施例中,显示设备320是头戴式显示设备,诸如,虚拟现实(VR)显示设备或增强现实(AR)显示设备。在一些实施例中,图形处理器300包括用于将媒体编码到一种或多种媒体编码格式,从一种或多种媒体编码格式对媒体解码,或在一种或多种媒体编码格式之间对媒体转码的视频编解码器引擎306,这一种或多种媒体编码格式包括但不限于:移动图像专家组(MPEG)格式(诸如,MPEG-2)、高级视频译码(AVC)格式(诸如,H.264/MPEG-4AVC)、以及电影和电视工程师协会(SMPTE)421M/VC-1、和联合图像专家组(JPEG)格式(诸如,JPEG、以及运动JPEG(MJPEG)格式)。
在一些实施例中,图形处理器300包括块图像传送(BLIT)引擎304,用于执行二维(2D)栅格化器操作,包括例如,位边界块传送。然而,在一个实施例中,使用图形处理引擎(GPE)310的一个或多个组件执行2D图形操作。在一些实施例中,GPE 310是用于执行图形操作的计算引擎,这些图形操作包括三维(3D)图形操作和媒体操作。
在一些实施例中,GPE 310包括用于执行3D操作的3D流水线312,3D操作诸如,使用作用于3D基元形状(例如,矩形、三角形等)的处理函数来渲染三维图像和场景。3D流水线312包括可编程和固定功能元件,该可编程和固定功能元件执行到3D/媒体子系统315的元件和/或所生成的执行线程内的各种任务。虽然3D流水线312可用于执行媒体操作,但是GPE310的实施例还包括媒体流水线316,该媒体流水线316专门用于执行媒体操作,诸如,视频后处理和图像增强。
在一些实施例中,媒体流水线316包括固定功能或可编程逻辑单元用于代替、或代表视频编解码器引擎306来执行一个或多个专业的媒体操作,诸如,视频解码加速、视频去隔行、以及视频编码加速。在一些实施例中,媒体流水线316附加地包括线程生成单元以生成用于在3D/媒体子系统315上执行的线程。所生成的线程在3D/媒体子系统315中所包括的一个或多个图形执行单元上执行对媒体操作的计算。
在一些实施例中,3D/媒体子系统315包括用于执行由3D流水线312和媒体流水线316生成的线程的逻辑。在一个实施例中,流水线向3D/媒体子系统315发送线程执行请求,该3D/媒体子系统315包括用于对于对可用的线程执行资源的各种请求进行仲裁和分派的线程分派逻辑。执行资源包括用于处理3D线程和媒体线程的图形执行单元的阵列。在一些实施例中,3D/媒体子系统315包括用于线程指令和数据的一个或多个内部高速缓存。在一些实施例中,该子系统还包括用于在线程之间共享数据并用于存储输出数据的共享存储器,其包括寄存器和可寻址存储器。
图形处理引擎
图4是根据一些实施例的图形处理器的图形处理引擎410的框图。在一个实施例中,图形处理引擎(GPE)410是图3中示出的GPE 310的某个版本。图4的具有与本文中的任何其他附图的元件相同的附图标记(或名称)的那些元件能以类似于本文中其他地方描述的任何方式操作或起作用,但不限于此。例如,图示出图3的3D流水线312和媒体流水线316。媒体流水线316在GPE 410的一些实施例中是任选的,并且可以不显式地被包括在GPE 410内。例如并且在至少一个实施例中,单独的媒体和/或图像处理器被耦合至GPE410。
在一些实施例中,GPE 410与命令流转化器403耦合或包括命令流转化器403,该命令流转化器403将命令流提供给3D流水线312和/或媒体流水线316。在一些实施例中,命令流转化器403与存储器耦合,该存储器可以是系统存储器、或内部高速缓存存储器和共享高速缓存存储器中的一个或多个。在一些实施例中,命令流转化器403从存储器接收命令,并将这些命令发送至3D流水线312和/或媒体流水线316。这些命令是从环形缓冲器取出的指示,该环形缓冲器存储用于3D流水线312和媒体流水线316的命令。在一个实施例中,环形缓冲器可附加地包括存储批量的多个命令的批量命令缓冲器。用于3D流水线312的命令还可包括对存储在存储器中的数据的引用,这些数据诸如但不限于用于3D流水线312的顶点数据和几何数据和/或用于媒体流水线316的图像数据和存储器对象。3D流水线312和媒体流水线316通过经由各自流水线内的逻辑执行操作或者通过将一个或多个执行线程分派至图形核阵列414来处理命令和数据。在一个实施例中,图形核阵列414包括一个或多个图形核(例如,(多个)图形核415A、(多个)图形核415B)的块,每个块包括一个或多个图形核。每个图形核包括图形执行资源的集合,该图形执行资源的集合包括:用于执行图形操作和计算操作的通用执行逻辑和图形专用执行逻辑;以及固定功能纹理处理逻辑和/或机器学习和人工智能加速逻辑。
在各实施例中,3D流水线312包括固定功能逻辑和可编程逻辑,用于通过处理指令并将执行线程分派给图形核阵列414来处理一个或多个着色器程序,诸如,顶点着色器、几何着色器、像素着色器、片段着色器、计算着色器或其他着色器程序。图形核阵列414提供统一的执行资源块供在处理这些着色器程序时使用。图形核阵列414的(多个)图形核415A-415B内的多功能执行逻辑(例如,执行单元)包括对各种3D API着色器语言的支持,并且可执行与多个着色器相关联的多个同步执行线程。
在一些实施例中,图形核阵列414还包括用于执行诸如视频和/或图像处理的媒体功能的执行逻辑。在一个实施例中,执行单元附加地包括通用逻辑,该通用逻辑可编程以便除了执行图形处理操作之外还执行并行通用计算操作。通用逻辑可与图1的(多个)处理器核107或图2中的核202A-202N内的通用逻辑并行地或结合地执行处理操作。
由在图形核阵列414上执行的线程生成的输出数据可以将数据输出到统一返回缓冲器(URB)418中的存储器。URB 418可以存储用于多个线程的数据。在一些实施例中,URB418可用于在图形核阵列414上执行的不同线程之间发送数据。在一些实施例中,URB 418可附加地用于在图形核阵列上的线程与共享功能逻辑420内的固定功能逻辑之间的同步。
在一些实施例中,图形核阵列414是可缩放的,使得阵列包括可变数量的图形核,每个图形核都具有基于GPE 410的目标功率和性能等级的可变数量的执行单元。在一个实施例中,执行资源是动态可缩放的,从而可以根据需要启用或禁用执行资源。
图形核阵列414与共享功能逻辑420耦合,该共享功能逻辑420包括在图形核阵列中的图形核之间被共享的多个资源。共享功能逻辑420内的共享功能是向图形核阵列414提供专业的补充功能的硬件逻辑单元。在各实施例中,共享功能逻辑420包括但不限于采样器421逻辑、数学422逻辑和线程间通信(ITC)423逻辑。另外,一些实施例在共享功能逻辑420内实现一个或多个高速缓存425。
在对于给定的专业功能的需求不足以包括在图形核阵列414中的情况下实现共享功能。相反,那个专业功能的单个实例化被实现为共享功能逻辑420中的独立实体,并且在图形核阵列414内的执行资源之间被共享。在图形核阵列414之间被共享并被包括在图形核阵列414内的确切的功能集因实施例而异。在一些实施例中,共享功能逻辑420内的由图形核阵列414广泛使用的特定共享功能可被包括在图形核阵列414内的共享功能逻辑416内。在各实施例中,图形核阵列414内的共享功能逻辑416可包括共享功能逻辑420内的一些或所有逻辑。在一个实施例中,共享功能逻辑420内的所有逻辑元件可以在图形核阵列414的共享功能逻辑416内被复制。在一个实施例中,共享功能逻辑420被排除以有利于图形核阵列414内的共享功能逻辑416。
图5是根据本文中所描述的一些实施例的图形处理器核500的硬件逻辑的框图。图5的具有与本文中的任何其他附图的元件相同的附图标记(或名称)的那些元件能以类似于本文中其他地方描述的任何方式操作或起作用,但不限于此。在一些实施例中,所图示的图形处理器核500被包括在图4的图形核阵列414内。图形处理器核500(有时称为核切片)可以是模块化图形处理器内的一个或多个图形核。图形处理器核500的示例是一个图形核切片,并且基于目标功率包络和性能包络,如本文中所描述的图形处理器可以包括多个图形核切片。每个图形处理器核500可包括固定功能块530,该固定功能块530 与多个子核501A-501F(也称为子切片)耦合,多个子核501A-501F包括模块化的通用和固定功能逻辑的块。
在一些实施例中,固定功能块530包括几何/固定功能流水线536,该几何/固定功能流水线536例如在较低性能和/或较低功率的图形处理器实现中可由图形处理器核500中的所有子核共享。在各实施例中,几何/固定功能流水线536包括3D固定功能流水线(例如,如在图3和图4中的3D流水线312)、视频前端单元、线程生成器和线程分派器、以及统一返回缓冲器管理器,该统一返回缓冲器管理器管理诸如图4的统一返回缓冲器418的统一返回缓冲器。
在一个实施例中,固定功能块530还包括图形SoC接口537、图形微控制器538和媒体流水线539。图形SoC接口537提供图形核500与芯片上系统集成电路内的其他处理器核之间的接口。图形微控制器538是可配置成管理图形处理器500的各种功能的可编程子处理器,这些功能包括线程分派、调度和抢占。媒体流水线539(例如,图3和图4的媒体流水线316)包括用于促进对包括图像数据和视频数据的多媒体数据进行解码、编码、预处理和/或后处理的逻辑。媒体流水线539经由对子核501A-501F内的计算或采样逻辑的请求来实现媒体操作。
在一个实施例中,SoC接口537使图形处理器核500能够与通用应用处理器核(例如,CPU)和/或SoC内的其他组件进行通信,其他组件包括诸如共享的末级高速缓存存储器的存储器层级结构元件、系统RAM、和/或嵌入式芯片上或封装上DRAM。SoC接口537还可启用与SoC内的诸如相机成像流水线的固定功能设备的通信,并且启用全局存储器原子性的使用和/或实现全局存储器原子性,该全局存储器原子性可在图形处理器核500与SoC内的CPU之间被共享。SoC接口537还可实现针对图形处理器核500的功率管理控制,并且启用图形核500的时钟域与SoC内的其他时钟域之间的接口。在一个实施例中,SoC接口537使得能够从命令流转化器和全局线程分派器接收命令缓冲器,该命令流转化器和全局线程分派器被配置成将命令和指令提供给图形处理器内的一个或多个图形核中的每一个图形核。当媒体操作将要执行时,这些命令和指令可以被分派给媒体流水线539,或者当图形处理操作将要执行时,这些命令和指令可以被分派给几何和固定功能流水线(例如,几何和固定功能流水线536、几何和固定功能流水线514)。
图形微控制器538可被配置成执行针对图形处理器核500的各种调度任务和管理任务。在一个实施例中,图形微控制器538可对子核501A-501F内的执行单元(EU)阵列502A-502F、504A-504F内的各个图形并行引擎执行图形和/或计算工作负载调度。在该调度模型中,在包括图形处理器核500的SoC的CPU核上执行的主机软件可以经由多个图形处理器门铃(doorbell)中的一个图形处理器门铃来提交工作负载,这调用了对适当的图形引擎的调度操作。调度操作包括:确定接下来要运行哪个工作负载,将工作负载提交到命令流转化器,抢占在引擎上运行的现有工作负载,监测工作负载的进度,以及当工作负载完成时通知主机软件。在一个实施例中,图形微控制器538还可促进图形处理器核500的低功率或空闲状态,从而向图形处理器核500提供独立于操作系统和/或系统上的图形驱动器软件跨低功率状态转变来保存和恢复图形处理器核500内的寄存器的能力。
图形处理器核500可具有多于或少于所图示的子核501A-501F,多达N个模块化子核。对于每组N个子核,图形处理器核500还可包括共享功能逻辑510、共享和/或高速缓存存储器512、几何/固定功能流水线514、以及用于加速各种图形和计算处理操作的附加的固定功能逻辑516。共享功能逻辑510可以包括与可由图形处理器核500内的每N个子核共享的、与图4的共享功能逻辑420(例如,采样器逻辑、数学逻辑、和/或线程间通信逻辑)相关联的逻辑单元。共享和/或高速缓存存储器512可以是用于图形处理器核500内的N个子核的集合501A-501F的末级高速缓存,并且还可以充当可由多个子核访问的共享存储器。几何/固定功能流水线514而不是几何/固定功能流水线536可被包括在固定功能块530内,并且几何/固定功能流水线514可包括相同或类似的逻辑单元。
在一个实施例中,图形处理器核500包括附加的固定功能逻辑516,该附加的固定功能逻辑516可包括供由图形处理器核500使用的各种固定功能加速逻辑。在一个实施例中,附加的固定功能逻辑516包括供在仅位置着色中使用的附加的几何流水线。在仅位置着色中,存在两个几何流水线:几何/固定功能流水线516、536内的完全几何流水线;以及剔除流水线,其是可被包括在附加的固定功能逻辑516内的附加的几何流水线。在一个实施例中,剔除流水线是完全几何流水线的精简版本。完全流水线和剔除流水线可以执行同一应用的不同实例,每个实例具有单独的上下文。仅位置着色可以隐藏被丢弃三角形的长剔除运行,从而在一些实例中使得能够更早地完成着色。例如并且在一个实施例中,附加的固定功能逻辑516内的剔除流水线逻辑可以与主应用并行地执行位置着色器,并且通常比完全流水线更快地生成关键结果,因为剔除流水线仅取出顶点的位置属性并对顶点的位置属性进行着色,而不向帧缓冲器执行对像素的栅格化和渲染。剔除流水线可以使用所生成的关键结果来计算所有三角形的可见性信息,而无需考虑那些三角形是否被剔除。完全流水线(其在本实例中可以被称为重放(replay)流水线)可以消耗该可见性信息以跳过被剔除的三角形,从而仅对最终被传递到栅格化阶段的可见的三角形进行着色。
在一个实施例中,附加的固定功能逻辑516还可包括机器学习加速逻辑,诸如,固定功能矩阵乘法逻辑,该机器学习加速逻辑用于包括针对机器学习训练或推断的实现方式。
在每个图形子核501A-501F内包括可用于响应于由图形流水线、媒体流水线、或着色器程序作出的请求而执行图形操作、媒体操作和计算操作的执行资源的集合。图形子核501A-501F包括:多个EU阵列502A-502F、504A-504F;线程分派和线程间通信(TD/IC)逻辑503A-503F;3D(例如,纹理)采样器505A-505F;媒体采样器506A-506F;着色器处理器507A-507F;以及共享的本地存储器(SLM)508A-508F。EU阵列502A-502F、504A-504F各自包括多个执行单元,这些执行单元为能够执行浮点和整数/定点逻辑操作以服务于图形操作、媒体操作或计算操作(包括图形程序、媒体程序或计算着色器程序)的通用图形处理单元。TD/IC逻辑503A-503F执行针对子核内的执行单元的本地线程分派和线程控制操作,并且促进在子核的执行单元上执行的线程之间的通信。3D采样器505A-505F可将纹理或其他3D图形相关的数据读取到存储器中。3D采样器可以基于所配置的样本状态以及与给定纹理相关联的纹理格式以不同方式读取纹理数据。媒体采样器506A-506F可基于与媒体数据相关联的类型和格式来执行类似的读取操作。在一个实施例中,每个图形子核501A-501F可以交替地包括统一3D和媒体采样器。在子核501A-501F中的每一个子核内的执行单元上执行的线程可利用每个子核内的共享的本地存储器508A-508F,以使在线程组内执行的线程能够使用芯片上存储器的公共池来执行。
执行单元
图6A-图6B图示根据本文中所描述的实施例的线程执行逻辑600,该线程执行逻辑600包括在图形处理器核中采用的处理元件阵列。图6A-图6B的具有与本文中的任何其他附图的元件相同的附图标记(或名称)的那些元件能以类似于本文中其他地方描述的任何方式操作或起作用,但不限于此。图6A图示线程执行逻辑600的概览,该线程执行逻辑600可包括对于图5的每个子核501A-501F图示的硬件逻辑的变体。图6B图示执行单元的示例性内部细节。
如在图6A中所图示,在一些实施例中,线程执行逻辑600包括着色器处理器602、线程分派器604、指令高速缓存606、包括多个执行单元608A-608N的可缩放执行单元阵列、采样器610、数据高速缓存612、以及数据端口614。在一个实施例中,可缩放执行单元阵列可通过基于工作负载的计算要求启用或禁用一个或多个执行单元(例如,执行单元608A、608B、608C、608D,一直到608N-1和608N中的任一个)来动态地缩放。在一个实施例中,所包括的组件经由互连结构而互连,该互连结构链接到组件中的每个组件。在一些实施例中,线程执行逻辑600包括通过指令高速缓存606、数据端口614、采样器610、以及执行单元608A-608N中的一个或多个到存储器(诸如,系统存储器或高速缓存存储器)的一个或多个连接。在一些实施例中,每个执行单元(例如,608A)是能够执行多个同步硬件线程同时针对每个线程并行地处理多个数据元素的独立式可编程通用计算单元。在各实施例中,执行单元608A-608N的阵列是可缩放的以包括任何数量的单独执行单元。
在一些实施例中,执行单元608A-608N主要用于执行着色器程序。着色器处理器602可处理各种着色器程序,并且可经由线程分派器604分派与着色器程序相关联的执行线程。在一个实施例中,线程分派器包括用于对来自图形流水线和媒体流水线的线程发起请求进行仲裁并在执行单元608A-608N中的一个或多个执行单元上实例化所请求的线程的逻辑。例如,几何流水线可将顶点着色器、曲面细分着色器或几何着色器分派到现场执行逻辑以用于处理。在一些实施例中,线程分派器604还可处理来自执行的着色器程序的运行时间线程生成请求。
在一些实施例中,执行单元608A-608N支持包括对许多标准3D图形着色器指令的原生支持的指令集,使得以最小的转换执行来自图形库(例如,Direct 3D和OpenGL)的着色器程序。这些执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如,像素着色器、片段着色器)以及通用处理(例如,计算和媒体着色器)。执行单元608A-608N中的每个执行单元都能够进行多发布单指令多数据(SIMD)执行,并且多线程操作在面对较高等待时间的存储器访问时启用高效的执行环境。每个执行单元内的每个硬件线程都具有专用的高带宽寄存器堆和相关的独立线程状态。对于能够进行整数操作、单精度浮点操作和双精度浮点操作、能够具有SIMD分支能力、能够进行逻辑操作、能够进行超越操作和能够进行其他混杂操作的流水线,执行是针对每个时钟多发布的。在等待来自存储器或共享功能之一的数据时,执行单元608A-608N内的依赖性逻辑使等待的线程休眠,直到所请求的数据已返回。当等待的线程正在休眠时,硬件资源可致力于处理其他线程。例如,在与顶点着色器操作相关联的延迟期间,执行单元可以执行针对像素着色器、片段着色器或包括不同顶点着色器的另一类型的着色器程序的操作。
执行单元608A-608N中的每个执行单元对数据元素的数组进行操作。数据元素的数量是“执行尺寸”、或用于指令的通道数量。执行通道是用于数据元素访问、掩码、和指令内的流控制的执行的逻辑单元。通道的数量可独立于用于特定图形处理器的物理算术逻辑单元(ALU)或浮点单元(FPU)的数量。在一些实施例中,执行单元608A-608N支持整数和浮点数据类型。
执行单元指令集包括SIMD指令。各种数据元素可以作为紧缩数据类型存储在寄存器中,并且执行单元将基于元素的数据尺寸来处理各个元素。例如,当对256位宽的向量进行操作时,向量的256位被存储在寄存器中,并且执行单元将向量操作为四个单独的64位紧缩数据元素(四字(QW)尺寸数据元素)、八个单独的32位紧缩数据元素(双字(DW)尺寸数据元素)、十六个单独的16位紧缩数据元素(字(W)尺寸的数据元素)、或三十二个单独的8位数据元素(字节(B)尺寸的数据元素)。然而,不同的向量宽度和寄存器尺寸是可能的。
在一个实施例中,可以将一个或多个执行单元组合到融合执行单元609A-609N中,该融合执行单元609A-609N具有对于融合EU而言共同的线程控制逻辑(607A-607N)。可以将多个EU融合到一EU组中。融合的EU组中的每个EU可以被配置成执行单独的SIMD硬件线程。融合的EU组中的EU的数量可以根据实施例而有所不同。另外,可以逐EU地执行各种SIMD宽度,包括但不限于SIMD8、SIMD16和SIMD32。每个融合图形执行单元609A-609N包括至少两个执行单元。例如,融合执行单元609A包括第一EU 608A、第二EU 608B、以及对于第一EU 608A和第二EU 608B而言共同的线程控制逻辑607A。线程控制逻辑607A控制在融合图形执行单元609A上执行的线程,从而允许融合执行单元609A-609N内的每个EU使用共同的指令指针寄存器来执行。
一个或多个内部指令高速缓存(例如,606)被包括在线程执行逻辑600中,以对用于执行单元的线程指令进行高速缓存。在一些实施例中,一个或多个数据高速缓存(例如,612)被包括,以在线程执行期间对线程数据进行高速缓存。在一些实施例中,采样器610被包括以为3D操作提供纹理采样并且为媒体操作提供媒体采样。在一些实施例中,采样器610包括专业的纹理或媒体采样功能,以便在向执行单元提供采样数据之前在采样过程期间处理纹理数据或媒体数据。
在执行期间,图形流水线和媒体流水线经由线程生成和分派逻辑将线程发起请求发送到线程执行逻辑600。一旦一组几何对象已经被处理并被栅格化为像素数据,着色器处理器602内的像素处理器逻辑(例如,像素着色器逻辑、片段着色器逻辑等)就被调用以进一步计算输出信息,并且使得结果被写入到输出表面(例如,颜色缓冲器、深度缓冲器、模板印刷(stencil)缓冲器等)。在一些实施例中,像素着色器或片段着色器计算各顶点属性的值,各顶点属性的值将跨经栅格化的对象而被内插。在一些实施例中,着色器处理器602内的像素处理器逻辑随后执行应用编程接口(API)供应的像素着色器程序或片段着色器程序。为了执行着色器程序,着色器处理器602经由线程分派器604将线程分派至执行单元(例如,608A)。在一些实施例中,着色器处理器602使用采样器610中的纹理采样逻辑来访问存储在存储器中的纹理图中的纹理数据。对纹理数据和输入几何数据的算术操作计算针对每个几何片段的像素颜色数据,或丢弃一个或多个像素而不进行进一步处理。
在一些实施例中,数据端口614提供存储器访问机制,供线程执行逻辑600将经处理的数据输出至存储器以便在图形处理器输出流水线上进一步处理。在一些实施例中,数据端口614包括或耦合至一个或多个高速缓存存储器(例如,数据高速缓存612),以便对数据进行高速缓存供经由数据端口进行存储器访问。
如图6B中所图示,图形执行单元608可包括指令取出单元637、通用寄存器堆阵列(GRF)624、架构寄存器堆阵列(ARF)626、线程仲裁器622、发送单元630、分支单元632、SIMD浮点单元的集合(FPU)634、以及在一个实施例中的专用整数SIMD ALU的集合635。GRF 624和ARF 626包括与可在图形执行单元608中活跃的每个同步硬件线程相关联的通用寄存器堆和架构寄存器堆的集合。在一个实施例中,每线程架构状态被维持在ARF 626中,而在线程执行期间使用的数据被存储在GRF 624中。每个线程的执行状态,包括用于每个线程的指令指针,可以被保持在ARF 626中的线程专用寄存器中。
在一个实施例中,图形执行单元608具有作为同步多线程(SMT)与细粒度交织多线程(IMT)的组合的架构。该架构具有模块化配置,该模块化配置可以基于同步线程的目标数量和每个执行单元的寄存器的数量而在设计时进行微调,其中跨用于执行多个同步线程的逻辑来划分执行单元资源。
在一个实施例中,图形执行单元608可协同发布多条指令,这些指令可以各自是不同的指令。图形执行单元线程608的线程仲裁器622可以将指令分派给以下各项中的一项以供执行:发送单元630、分支单元632或(多个)SIMD FPU 634。每个执行线程可以访问GRF624内的128个通用寄存器,其中,每个寄存器可以存储可作为具有32位数据元素的SIMD 8元素向量访问的32个字节。在一个实施例中,每个执行单元线程具有对GRF 624内的4个千字节的访问权,但是实施例并不限于此,并且在其他实施例中可以提供更多或更少的寄存器资源。在一个实施例中,多达七个线程可以同步执行,但是每执行单元的线程数量还可以根据实施例而有所不同。在其中七个线程可以访问4 个千字节的实施例中,GRF 624可以存储总共28个千字节。灵活的寻址模式可以准许对多个寄存器一起进行寻址,从而建立实际上更宽的寄存器或者表示跨步式矩形块数据结构。
在一个实施例中,经由通过消息传递发送单元630执行的“发送”指令来分派存储器操作、采样器操作以及其他较长等待时间的系统通信。在一个实施例中,分支指令被分派给专用分支单元632以促进SIMD发散和最终收敛。
在一个实施例中,图形执行单元608包括用于执行浮点操作的一个或多个SIMD浮点单元(FPU)634。在一个实施例中,(多个)FPU 634还支持整数计算。在一个实施例中,(多个)FPU 634可以SIMD执行多达数量M个32位浮点(或整数)操作,或者SIMD执行多达2M个16位整数或16位浮点操作。在一个实施例中,(多个)FPU中的至少一个提供支持高吞吐量超越数学函数和双精度64位浮点的扩展数学能力。在一些实施例中,8位整数SIMD ALU的集合635也存在,并且可专门优化成执行与机器学习计算相关联的操作。
在一个实施例中,可以在图形子核分组(例如,子切片)中对图形执行单元608的多个实例的阵列进行实例化。为了可缩放性,产品架构师可以选择每子核分组的执行单元的确切数量。在一个实施例中,执行单元608可以跨多个执行通道来执行指令。在进一步的实施例中,在不同通道上执行在图形执行单元608上执行的每个线程。
图7是图示根据一些实施例的图形处理器指令格式700的框图。在一个或多个实施例中,图形处理器执行单元支持具有多种格式的指令的指令集。实线框图示通常被包括在执行单元指令中的组成部分,而虚线包括任选的或仅被包括在指令的子集中的组成部分。在一些实施例中,所描述和图示的指令格式700是宏指令,因为它们是供应至执行单元的指令,这与产生自一旦指令被处理就进行的指令解码的微指令相反。
在一些实施例中,图形处理器执行单元原生地支持128位指令格式710的指令。基于所选择的指令、指令选项和操作数数量,64位紧凑指令格式730可用于一些指令。原生128位指令格式710提供对所有指令选项的访问,而一些选项和操作在64位格式730中受限。64位格式730中可用的原生指令因实施例而异。在一些实施例中,使用索引字段713中的索引值的集合将指令部分地压缩。执行单元硬件基于索引值来引用压缩表的集合,并使用压缩表输出来重构128位指令格式710的原生指令。
针对每种格式,指令操作码712限定执行单元要执行的操作。执行单元跨每个操作数的多个数据元素并行地执行每条指令。例如,响应于加法指令,执行单元跨表示纹理元素或图片元素的每个颜色通道执行同步加法操作。默认地,执行单元跨操作数的所有数据通道执行每条指令。在一些实施例中,指令控制字段714启用对某些执行选项的控制,这些执行选项诸如通道选择(例如,断言)以及数据通道顺序(例如,混合)。针对128位指令格式710的指令,执行尺寸字段716限制将被并行地执行的数据通道的数量。在一些实施例中,执行尺寸字段716不可用于64位紧凑指令格式730。
一些执行单元指令具有多达三个操作数,包括两个源操作数src0720、src1 722以及一个目的地操作数718。在一些实施例中,执行单元支持双目的地指令,其中,双目的地中的一个目的地是隐式的。数据操纵指令可具有第三源操作数(例如,SRC2 724),其中,指令操作码712确定源操作数的数量。指令的最后一个源操作数可以是与指令一起传递的立即数(例如,硬编码的)值。
在一些实施例中,128位指令格式710包括访问/寻址模式字段726,该访问/寻址模式字段726例如指定使用直接寄存器寻址模式还是间接寄存器寻址模式。当使用直接寄存器寻址模式时,由指令中的位直接提供一个或多个操作数的寄存器地址。
在一些实施例中,128位指令格式710包括访问/寻址模式字段726,该访问/寻址模式字段726指定指令的寻址模式和/或访问模式。在一个实施例中,访问模式用于限定针对指令的数据访问对齐。一些实施例支持包括16字节对齐访问模式和1字节对齐访问模式的访问模式,其中,访问模式的字节对齐确定指令操作数的访问对齐。例如,当处于第一模式时,指令可将字节对齐寻址用于源操作数和目的地操作数,并且当处于第二模式时,指令可将16字节对齐寻址用于所有的源操作数和目的地操作数。
在一个实施例中,访问/寻址模式字段726的寻址模式部分确定指令要使用直接寻址还是间接寻址。当使用直接寄存器寻址模式时,指令中的位直接提供一个或多个操作数的寄存器地址。当使用间接寄存器寻址模式时,可以基于指令中的地址寄存器值和地址立即数字段来计算一个或多个操作数的寄存器地址。
在一些实施例中,基于操作码712位字段对指令进行分组从而简化操作码解码740。针对8位的操作码,位4、位5、和位6允许执行单元确定操作码的类型。所示出的确切的操作码分组仅是示例。在一些实施例中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如,移动(mov)、比较(cmp))。在一些实施例中,移动和逻辑组742共享五个最高有效位(MSB),其中,移动(mov)指令采用0000xxxxb的形式,而逻辑指令采用0001xxxxb的形式。流控制指令组744(例如,调用(call)、跳转(jmp))包括0010xxxxb(例如,0x20)形式的指令。混杂指令组746包括指令的混合,包括0011xxxxb(例如,0x30)形式的同步指令(例如,等待(wait)、发送(send))。并行数学指令组748包括0100xxxxb(例如,0x40)形式的逐分量的算术指令(例如,加、乘(mul))。并行数学组748跨数据通道并行地执行算术操作。向量数学组750包括0101xxxxb(例如,0x50)形式的算术指令(例如,dp4)。向量数学组对向量操作数执行算术,诸如点积计算。
图形流水线
图8是图形处理器800的另一实施例的框图。图8的具有与本文中的任何其他附图的元件相同的附图标记(或名称)的那些元件能以类似于本文中其他地方描述的任何方式操作或起作用,但不限于此。
在一些实施例中,图形处理器800包括图形流水线820、媒体流水线830、显示引擎840、线程执行逻辑850、以及渲染输出流水线870。在一些实施例中,图形处理器800是包括一个或多个通用处理核的多核处理系统内的图形处理器。图形处理器通过至一个或多个控制寄存器(未示出)的寄存器写入、或者经由通过环形互连802发布至图形处理器800的命令被控制。在一些实施例中,环形互连802将图形处理器800耦合至其他处理组件,诸如其他图形处理器或通用处理器。来自环形互连802的命令由命令流转化器803解译,该命令流转化器将指令供应至几何流水线820或媒体流水线830的各个组件。
在一些实施例中,命令流转化器803引导顶点取出器805的操作,该顶点取出器805从存储器读取顶点数据,并执行由命令流转化器803提供的顶点处理命令。在一些实施例中,顶点取出器805将顶点数据提供给顶点着色器807,该顶点着色器807对每个顶点执行坐标空间变换和照明操作。在一些实施例中,顶点取出器805和顶点着色器807通过经由线程分派器831将执行线程分派至执行单元852A-852B来执行顶点处理指令。
在一些实施例中,执行单元852A-852B是具有用于执行图形操作和媒体操作的指令集的向量处理器的阵列。在一些实施例中,执行单元852A-852B具有专用于每个阵列或在阵列之间被共享的所附接的L1高速缓存851。高速缓存可以被配置为数据高速缓存、指令高速缓存、或被分区为在不同分区中包含数据和指令的单个高速缓存。
在一些实施例中,几何流水线820包括用于执行3D对象的硬件加速曲面细分的曲面细分组件。在一些实施例中,可编程外壳着色器811配置曲面细分操作。可编程域着色器817提供对曲面细分输出的后端评估。曲面细分器813在外壳着色器811的指示下进行操作,并且包括用于基于粗糙的几何模型来生成详细的几何对象集合的专用逻辑,该粗糙的几何模型作为输入被提供该几何流水线820。在一些实施例中,如果不使用曲面细分,则可以绕过曲面细分组件(例如,外壳着色器811、曲面细分器813和域着色器817)。
在一些实施例中,完整的几何对象可由几何着色器819经由被分派至执行单元852A-852B的一个或多个线程来处理,或者可以直接行进至裁剪器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 Group的开放图形库(OpenGL)、开放计算语言(OpenCL)和/或Vulkan图形和计算API提供支持。在一些实施例中,也可以为来自微软公司的Direct3D库提供支持。在一些实施例中,可以支持这些库的组合。还可以为开源计算机视觉库(OpenCV)提供支持。如果可进行从未来API的流水线到图形处理器的流水线的映射,则具有兼容3D流水线的未来API也将受到支持。
图形流水线编程
图9A是图示根据一些实施例的图形处理器命令格式900的框图。图9B是图示根据实施例的图形处理器命令序列910的框图。图9A中的实线框图示一般被包括在图形命令中的组成部分,而虚线包括任选的或仅被包括在图形命令的子集中的组成部分。图9A的示例性图形处理器命令格式900包括用于标识命令的客户端902、命令操作代码(操作码)904和数据906的数据字段。子操作码905和命令尺寸908也被包括在一些命令中。
在一些实施例中,客户端902指定图形设备的处理命令数据的客户端单元。在一些实施例中,图形处理器命令解析器检查每个命令的客户端字段,以调整对命令的进一步处理并将命令数据路由至适当的客户端单元。在一些实施例中,图形处理器客户端单元包括存储器接口单元、渲染单元、2D单元、3D单元、和媒体单元。每个客户端单元具有处理命令的对应的处理流水线。一旦由客户端单元接收到命令,客户端单元就读取操作码904以及子操作码905(如果存在)以确定要执行的操作。客户端单元使用数据字段906内的信息来执行命令。针对一些命令,预期显式的命令尺寸908指定命令的尺寸。在一些实施例中,命令解析器基于命令操作码自动地确定命令中的至少一些命令的尺寸。在一些实施例中,经由双字的倍数来对齐命令。
图9B中的流程图示示例性图形处理器命令序列910。在一些实施例中,以图形处理器的实施例为特征的数据处理系统的软件或固件使用所示出的命令序列的某个版本来建立、执行并终止图形操作的集合。仅出于示例性目的示出并描述了样本命令序列,因为实施例不限于这些特定的命令或者该命令序列。而且,命令可以作为批量的命令以命令序列被发布,使得图形处理器将以至少部分同时的方式处理命令序列。
在一些实施例中,图形处理器命令序列910可开始于流水线转储清除命令912,以便使得任何活跃的图形流水线完成流水线的当前未决命令。在一些实施例中,3D流水线922和媒体流水线924不并发地操作。执行流水线转储清除以使得活跃的图形流水线完成任何未决命令。响应于流水线转储清除,用于图形处理器的命令解析器将暂停命令处理,直到活跃的绘画引擎完成未决操作并且相关的读高速缓存被无效。任选地,渲染高速缓存中被标记为“脏”的任何数据可以被转储清除到存储器。在一些实施例中,流水线转储清除命令912可以用于流水线同步,或者在将图形处理器置于低功率状态之前使用。
在一些实施例中,当命令序列要求图形处理器在流水线之间明确地切换时,使用流水线选择命令913。在一些实施例中,在发布流水线命令之前在执行上下文中仅需要一次流水线选择命令913,除非上下文将发布针对两条流水线的命令。在一些实施例中,紧接在经由流水线选择命令913的流水线切换之前需要流水线转储清除命令912。
在一些实施例中,流水线控制命令914配置用于操作的图形流水线,并且用于对3D流水线922和媒体流水线924进行编程。在一些实施例中,流水线控制命令914配置活跃流水线的流水线状态。在一个实施例中,流水线控制命令914用于流水线同步,并且用于在处理批量的命令之前清除来自活跃流水线内的一个或多个高速缓存存储器的数据。
在一些实施例中,返回缓冲器状态命令916用于配置用于相应流水线的返回缓冲器的集合以写入数据。一些流水线操作需要分配、选择或配置一个或多个返回缓冲器,在处理期间操作将中间数据写入这一个或多个返回缓冲器中。在一些实施例中,图形处理器还使用一个或多个返回缓冲器来存储输出数据并且执行跨线程通信。在一些实施例中,返回缓冲器状态916包括选择要用于流水线操作的集合的返回缓存器的尺寸和数量。
命令序列中的剩余命令基于用于操作的活跃流水线而不同。基于流水线判定920,命令序列被定制用于以3D流水线状态930开始的3D流水线922、或者在媒体流水线状态940处开始的媒体流水线924。
用于配置3D流水线状态930的命令包括用于顶点缓冲器状态、顶点元素状态、常量颜色状态、深度缓冲器状态、以及将在处理3D基元命令之前配置的其他状态变量的3D状态设置命令。这些命令的值至少部分地基于使用中的特定3D API来确定。在一些实施例中,如果将不使用某些流水线元件,则3D流水线状态930命令还能够选择性地禁用或绕过那些元件。
在一些实施例中,3D基元932命令用于提交待由3D流水线处理的3D基元。经由3D基元932命令传递给图形处理器的命令和相关联的参数被转发到图形流水线中的顶点取出功能。顶点取出功能使用3D基元932命令数据来生成多个顶点数据结构。顶点数据结构被存储在一个或多个返回缓冲器中。在一些实施例中,3D基元932命令用于经由顶点着色器对3D基元执行顶点操作。为了处理顶点着色器,3D流水线922将着色器执行线程分派至图形处理器执行单元。
在一些实施例中,经由执行934命令或事件触发3D流水线922。在一些实施例中,寄存器写入触发命令执行。在一些实施例中,经由命令序列中的“去往(go)”或“踢除(kick)”命令来触发执行。在一个实施例中,使用流水线同步命令来触发命令执行,以便通过图形流水线来转储清除命令序列。3D流水线将执行针对3D基元的几何处理。一旦操作完成,就对所得到的几何对象进行栅格化,并且像素引擎对所得到的像素进行着色。对于那些操作,还可以包括用于控制像素着色和像素后端操作的附加命令。
在一些实施例中,当执行媒体操作时,图形处理器命令序列910遵循媒体流水线924路径。一般地,针对媒体流水线924进行编程的特定用途和方式取决于待执行的媒体或计算操作。在媒体解码期间,特定的媒体解码操作可以被转移到媒体流水线。在一些实施例中,还可绕过媒体流水线,并且可使用由一个或多个通用处理核提供的资源来整体地或部分地执行媒体解码。在一个实施例中,媒体流水线还包括用于通用图形处理器单元(GPGPU)操作的元件,其中,图形处理器用于使用计算着色器程序来执行SIMD向量操作,这些计算着色器程序并不明确地与图形基元的渲染相关。
在一些实施例中,以与3D流水线922类似的方式配置媒体流水线924。将用于配置媒体流水线状态940的命令集合分派或放置到命令队列中,在媒体对象命令942之前。在一些实施例中,用于媒体流水线状态的命令940包括用于配置媒体流水线元件的数据,这些媒体流水线元件将用于处理媒体对象。这包括用于在媒体流水线内配置视频解码和视频编码逻辑的数据,诸如编码或解码格式。在一些实施例中,用于媒体流水线状态的命令940还支持使用指向包含批量的状态设置的“间接”状态元件的一个或多个指针。
在一些实施例中,媒体对象命令942供应指向用于由媒体流水线处理的媒体对象的指针。媒体对象包括存储器缓冲器,该存储器缓冲器包含待处理的视频数据。在一些实施例中,在发布媒体对象命令942之前,所有的媒体流水线状态必须是有效的。一旦流水线状态被配置并且媒体对象命令942被排队,就经由执行命令944或等效的执行事件(例如,寄存器写入)来触发媒体流水线924。随后可通过由3D流水线922或媒体流水线924提供的操作对来自媒体流水线924的输出进行后处理。在一些实施例中,以与媒体操作类似的方式来配置和执行GPGPU操作。
图形软件架构
图10图示根据一些实施例的用于数据处理系统1000的示例性图形软件架构。在一些实施例中,软件架构包括3D图形应用1010、操作系统1020、以及至少一个处理器1030。在一些实施例中,处理器1030包括图形处理器1032以及一个或多个通用处理器核1034。图形应用1010和操作系统1020各自在数据处理系统的系统存储器1050中执行。
在一些实施例中,3D图形应用1010包含一个或多个着色器程序,这一个或多个着色器程序包括着色器指令1012。着色器语言指令可以采用高级着色器语言,诸如高级着色器语言(HLSL)或OpenGL着色器语言(GLSL)。应用还包括采用适于由通用处理器核1034执行的机器语言的可执行指令1014。应用还包括由顶点数据限定的图形对象1016。
在一些实施例中,操作系统1020是来自微软公司的
Figure BDA0002293582330000281
Figure BDA0002293582330000291
操作系统、专属的类UNIX操作系统、或使用Linux内核的变体的开源的类UNIX操作系统。操作系统1020可支持图形API 1022,诸如Direct3D API、OpenGL API或Vulkan API。当Direct3DAPI正在使用时,操作系统1020使用前端着色器编译器1024以将采用HLSL的任何着色器指令1012编译成较低级的着色器语言。编译可以是即时(JIT)编译,或者应用可执行着色器预编译。在一些实施例中,在3D图形应用1010的编译期间,将高级着色器编译成低级着色器。在一些实施例中,着色器指令1012以中间形式提供,诸如由Vulkan API使用的标准便携式中间表示(SPIR)的某个版本。
在一些实施例中,用户模式图形驱动器1026包含后端着色器编译器1027,该后端着色器编译器1027用于将着色器指令1012转换成硬件专用表示。当OpenGL API在使用中时,将采用GLSL高级语言的着色器指令1012传递至用户模式图形驱动器1026以用于编译。在一些实施例中,用户模式图形驱动器1026使用操作系统内核模式功能1028来与内核模式图形驱动器1029进行通信。在一些实施例中,内核模式图形驱动器1029与图形处理器1032通信以分派命令和指令。
IP核实施方式
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性代码实现,该机器可读介质表示和/或限定集成电路(诸如,处理器)内的逻辑。例如,机器可读介质可以包括表示处理器内的各种逻辑的指令。当由机器读取时,指令可以使机器制造用于执行本文所述的技术的逻辑。这类表示(被称为“IP核”)是集成电路的逻辑的可重复使用单元,这些可重复使用单元可以作为描述集成电路的结构的硬件模型而被存储在有形的、机器可读介质上。可以将硬件模型供应至在制造集成电路的制造机器上加载硬件模型的各消费者或制造设施。可以制造集成电路,使得电路执行与本文中描述的实施例中的任一实施例相关联地描述的操作。
图11A是图示根据实施例的IP核开发系统1100的框图,该IP核开发系统1100可以用于制造集成电路以执行操作。IP核开发系统1100可以用于生成可并入到更大的设计中或用于构建整个集成电路(例如,SOC集成电路)的模块化、可重复使用设计。设计设施1130可生成采用高级编程语言(例如,C/C++)的IP核设计的软件仿真1110。软件仿真1110可用于使用仿真模型1112来设计、测试并验证IP核的行为。仿真模型1112可以包括功能仿真、行为仿真和/或时序仿真。随后可从仿真模型1112创建或合成寄存器传输级(RTL)设计1115。RTL设计1115是对硬件寄存器之间的数字信号的流进行建模的集成电路(包括使用建模的数字信号执行的相关联的逻辑)的行为的抽象。除了RTL设计1115之外,还可以创建、设计或合成逻辑级或晶体管级的较低级别设计。由此,初始设计和仿真的特定细节可有所不同。
可以由设计设施进一步将RTL设计1115或等效方案合成到硬件模型1120中,该硬件模型1120可以采用硬件描述语言(HDL)或物理设计数据的某种其他表示。可以进一步仿真或测试HDL以验证IP核设计。可使用非易失性存储器1140(例如,硬盘、闪存、或任何非易失性存储介质)来存储IP核设计以用于递送至第三方制造设施1165。替代地,可以通过有线连接1150或无线连接1160(例如,经由因特网)来传输IP核设计。制造设施1165随后可以制造至少部分地基于IP核设计的集成电路。所制造的集成电路可被配置用于执行根据本文中描述的至少一个实施例的操作。
图11B图示根据本文中描述的一些实施例的集成电路封装组件1170的截面侧视图。集成电路封装组件1170图示如本文中所描述的一个或多个处理器或加速器设备的实现方式。封装组件1170包括连接至衬底1180的多个硬件逻辑单元1172、1174。逻辑1172、1174可以至少部分地实现在可配置逻辑或固定功能逻辑硬件中,并且可包括本文中描述的(多个)处理器核、(多个)图形处理器或其他加速器设备中的任何处理器核、图形处理器或其他加速器设备的一个或多个部分。每个逻辑单元1172、1174可以实现在半导体管芯内,并且经由互连结构1173与衬底1180耦合。互连结构1173可以被配置成在逻辑1172、1174与衬底1180之间路由电信号,并且可以包括互连,该互连诸如但不限于凸块或支柱。在一些实施例中,互连结构1173可以被配置成路由电信号,诸如例如,与逻辑1172、1174的操作相关联的输入/输出(I/O)信号和/或功率或接地信号。在一些实施例中,衬底1180是基于环氧树脂的层压衬底。在其他实施例中,封装衬底1180可以包括其他合适类型的衬底。封装组件1170可以经由封装互连1183连接至其他电气设备。封装互连1183可以耦合至衬底1180的表面以将电信号路由到其他电气设备,诸如主板、其他芯片组或多芯片模块。
在一些实施例中,逻辑单元1172、1174与桥接器1182电耦合,该桥接器1182被配置成在逻辑1172与逻辑1174之间路由电信号。桥接器1182可以是为电信号提供路由的密集互连结构。桥接器1182可以包括由玻璃或合适的半导体材料构成的桥接器衬底。电路由特征可形成在桥接器衬底上以提供逻辑1172与逻辑1174之间的芯片到芯片连接。
尽管图示了两个逻辑单元1172、1174和桥接器1182,但是本文中所描述的实施例可以包括在一个或多个管芯上的更多或更少的逻辑单元。这一个或多个管芯可以由零个或更多个桥接器连接,因为当逻辑被包括在单个管芯上时,可以排除桥接器1182。替代地,多个管芯或逻辑单元可以由一个或多个桥接器连接。另外,在其他可能的配置(包括三维配置)中,多个逻辑单元、管芯和桥接器可被连接在一起。
示例性芯片上系统集成电路
图12-图14图示根据本文中所述的各实施例的可以使用一个或多个IP核制造的示例性集成电路和相关联的图形处理器。除了所图示的内容之外,还可以包括其他逻辑和电路,包括附加的图形处理器/核、外围接口控制器或通用处理器核。
图12是图示根据实施例的可以使用一个或多个IP核制造的示例性芯片上系统集成电路1200的框图。示例性集成电路1200包括一个或多个应用处理器1205(例如,CPU)、至少一个图形处理器1210,并且可附加地包括图像处理器1215和/或视频处理器1220,其中的任一个都可以是来自相同设计设施或多个不同设计设施的模块化IP核。集成电路1200包括外围或总线逻辑,包括USB控制器1225、UART控制器1230、SPI/SDIO控制器1235和I2S/I2C控制器1240。另外,集成电路可包括显示设备1245,该显示设备1245耦合至高清晰度多媒体接口(HDMI)控制器1250和移动行业处理器接口(MIPI)显示接口1255中的一个或多个。可以由闪存子系统1260(包括闪存和闪存控制器)来提供存储。可以经由存储器控制器1265来提供存储器接口以获得对SDRAM或SRAM存储器设备的访问。一些集成电路附加地包括嵌入式安全引擎1270。
图13A-图13B是图示根据本文中所描述的实施例的用于在SoC内使用的示例性图形处理器的框图。图13A图示根据实施例的可以使用一个或多个IP核制造的芯片上系统集成电路的示例性图形处理器1310。图13B图示根据实施例的可以使用一个或多个IP核制造的芯片上系统集成电路的附加示例性图形处理器1340。图13A的图形处理器1310是低功率图形处理器核的示例。图13B的图形处理器1340是较高性能图形处理器核的示例。图形处理器1310、1340中的每一个都可以是图12的图形处理器1210的变体。
如图13A中所示,图形处理器1310包括顶点处理器1305以及一个或多个片段处理器1315A-1315N(例如,1315A、1315B、1315C、1315D,一直到1315N-1和1315N)。图形处理器1310可以经由单独的逻辑执行不同的着色器程序,使得顶点处理器1305被优化以执行用于顶点着色器程序的操作,而一个或多个片段处理器1315A-1315N执行用于片段或像素着色器程序的片段(例如,像素)着色操作。顶点处理器1305执行3D图形流水线的顶点处理级,并生成基元数据和顶点数据。(多个)片段处理器1315A-1315N使用由顶点处理器1305生成的基元数据和顶点数据来产生被显示在显示设备上的帧缓冲器。在一个实施例中,(多个)片段处理器1315A-1315N被优化以执行如在OpenGL API中提供的片段着色器程序,这些片段着色器程序可以用于执行与如在Direct 3D API中提供的像素着色器程序类似的操作。
图形处理器1310附加地包括一个或多个存储器管理单元(MMU)1320A-1320B、(多个)高速缓存1325A-1325B以及(多个)电路互连1330A-1330B。这一个或多个MMU 1320A-1320B为图形处理器1310(包括为顶点处理器1305和/或(多个)片段处理器1315A-1315N)提供虚拟到物理地址映射,除了存储在一个或多个高速缓存1325A-1325B中的顶点数据或图像/纹理数据之外,该虚拟到物理地址映射还可以引用存储在存储器中的顶点数据或图像/纹理数据。在一个实施例中,一个或多个MMU 1320A-1320B可以与系统内的其他MMU同步,使得每个处理器1205-1220可以参与共享或统一的虚拟存储器系统,系统内的其他MMU包括与图12的一个或多个应用处理器1205、图像处理器1215和/或视频处理器1220相关联的一个或多个MMU。根据实施例,一个或多个电路互连1330A-1330B使得图形处理器1310能够经由SoC的内部总线或经由直接连接来与SoC内的其他IP核对接。
如图13B中所示,图形处理器1340包括图13A的图形处理器1310的一个或多个MMU1320A-1320B、高速缓存1325A-1325B、以及电路互连1330A-1330B。图形处理器1340包括一个或多个着色器核1355A-1355N(例如,1355A、1355B、1355C、1355D、1355E、1355F,一直到1355N-1和1355N),这一个或多个着色器核提供统一着色器核架构,在该统一着色器核架构中,单个核或类型或核可以执行所有类型的可编程着色器代码,包括用于实现顶点着色器、片段着色器和/或计算着色器的着色器程序代码。存在的着色器核的确切数量可以因实施例和实现方式而异。另外,图形处理器1340包括核间任务管理器1345,该核间任务管理器1345充当用于将执行线程分派给一个或多个着色器核1355A-1355N的线程分派器和用于加速对基于片的渲染的分片操作的分片单元1358,在基于片的渲染中,针对场景的渲染操作在图像空间中被细分,例如以利用场景内的局部空间一致性或优化内部高速缓存的使用。
图14A-图14B图示根据本文中所描述的实施例的附加示例性图形处理器逻辑。图14A图示图形核1400,该图形核1400可被包括在图12的图形处理器1210内,并且可以是如图13B中的统一着色器核1355A-1355N。图14B图示附加的高度并行的通用图形处理单元1430,该附加的高度并行的通用图形处理单元1430是适用于多芯片模块上的部署的高度并行的通用图形处理单元。
如在图14A中所示,图形核1400包括对于图形核1400内的执行资源而言共同的共享指令高速缓存1402、纹理单元1418和高速缓存存储器/共享存储器1420。图形核1400可包括用于每个核的多个切片1401A-1401N或分区,并且图形处理器可包括图形核1400的多个实例。切片1401A-1401N可以包括支持逻辑,该支持逻辑包括本地指令高速缓存1404A-1404N、线程调度器1406A-1406N、线程分派器1408A-1408N、以及寄存器的集合1410A-1440N。为了执行逻辑操作,切片1401A-1401N可包括一组附加的功能单元(AFU1412A-1412N)、浮点单元(FPU 1414A-1414N)、整数算术逻辑单元(ALU1416-1416N)、地址计算单元(ACU 1413A-1413N)、双精度浮点单元(DPFPU 1415A-1415N)、以及矩阵处理单元(MPU1417A-1417N)。
这些计算单元中的一些以特定精度进行操作。例如,FPU1414A-1414N可执行单精度(32位)和半精度(16位)浮点操作,而DPFPU1415A-1415N执行双精度(64位)浮点操作。ALU1416A-1416N能以8位精度、16位精度和32位精度执行可变精度整数操作,并且可以被配置用于混合精度操作。MPU 1417A-1417N还可以被配置用于混合精度矩阵操作,包括半精度浮点操作和8位整数操作。MPU 1417A-1417N可执行各种各样的矩阵操作以加速机器学习应用框架,包括启用对加速的通用矩阵到矩阵乘法(GEMM)的支持。AFU 1412A-1412N可执行不被浮点单元或整数单元支持的附加逻辑操作,包括三角函数操作(例如,正弦、余弦等)。
如图14B中所示,通用处理单元(GPGPU)1430可以被配置成使得能够由图形处理单元的阵列执行高度并行的计算操作。另外,GPGPU 1430可以直接链接到GPGPU的其他实例以创建多GPU集群,从而改善尤其是深度神经网络的训练速度。GPGPU 1430包括用于启用与主机处理器的连接的主机接口1432。在一个实施例中,主机接口1432是PCI Express接口。然而,主机接口还可以是供应方专用的通信接口或通信结构。GPGPU 1430从主机处理器接收命令,并且使用全局调度器1434将与那些命令相关联的执行线程分发给计算集群的集合1436A-1436H。计算集群1436A-1436H共享高速缓存存储器1438。高速缓存存储器1438可以充当用于计算集群1436A-1436H内的高速缓存存储器的较高级别的高速缓存。
GPGPU 1430包括经由存储器控制器的集合1442A-1442B与计算集群1436A-1436H耦合的存储器1434A-1434B。在各实施例中,存储器1434A-1434B可包括各种类型的存储器设备,包括动态随机存取存储器(DRAM)或图形随机存取存储器,诸如,同步图形随机存取存储器(SGRAM),包括图形双倍数据速率(GDDR)存储器。
在一个实施例中,计算集群1436A-1436H各自包括图形核的集合,图形核诸如图14A的图形核1400,这些图形核可包括多种类型的整数逻辑单元和浮点逻辑单元,所述多种类型的整数逻辑单元和浮点逻辑单元可以在一定精度范围内执行包括适于机器学习计算的计算操作。例如并且在一个实施例中,计算集群1436A-1436H中的每一个计算集群中的浮点单元的至少一个子集可以被配置成执行16位或32位浮点操作,而浮点单元的不同子集可以被配置成执行64位浮点操作。
GPGPU 1430的多个实例可以被配置成作为计算集群进行操作。由计算集群用于同步和数据交换的通信机制跨实施例而有所不同。在一个实施例中,GPGPU 1430的多个实例通过主机接口1432进行通信。在一个实施例中,GPGPU 1430包括I/O中枢1439,该I/O中枢1439将GPGPU 1430与GPU链路1440耦合,该GPU链路1440启用至GPGPU的其他实例的直接连接。在一个实施例中,GPU链路1440耦合至专用GPU-GPU桥接器,该GPU-GPU桥接器实现GPGPU1430的多个实例之间的通信和同步。在一个实施例中,GPU链路1440与高速互连耦合,以将数据传输和接收至其他GPGPU或并行处理器。在一个实施例中,GPGPU 1430的多个实例位于单独的数据处理系统中,并且经由网络设备进行通信,该网络设备可经由主机接口1432来访问。在一个实施例中,附加于或替代于主机接口1432,GPU链路1440可以被配置成启用至主机处理器的连接。
尽管GPGPU 1430的所图示配置可以被配置成训练神经网络,但是一个实施例提供GPGPU 1430的替代配置,该替代配置可以被配置成用于在高性能或低功率推断平台内的部署。在推断配置中,相对于训练配置,GPGPU1430包括计算集群1436A-1436H中的更少的计算集群。另外,与存储器1434A-1434B相关联的存储器技术在推断配置与训练配置之间可以不同,其中,更高带宽的存储器技术专用于训练配置。在一个实施例中,GPGPU 1430的推断配置可以支持推断专用指令。例如,推断配置可提供对一个或多个8位整数点积指令的支持,这一个或多个8位整数点积指令通常在用于经部署的神经网络的推断操作期间使用。
利用机器学习的光线追踪
如上文所提及,光线追踪是在其中通过基于物理的渲染来模拟光传输的图形处理技术。光线追踪中的关键操作之一是处理可见性查询,该可见性查询需要对包围体层级结构(BVH)中的节点进行遍历和相交测试。
基于光线追踪和路径追踪的技术通过以下方式来计算图像:追踪通过每个像素的光线和路径,并使用随机采样来计算诸如阴影、光泽度、间接照明等高级效果。仅使用一些样本是快的但产生有噪声的图像,而使用许多样本产生高质量图像但成本过高。
在近几年中,对用于实时使用的光线/路径追踪的突破性解决方案已经以“降噪”形式出现——降噪是使用图像处理技术以从有噪声的低样本数输入产生高质量、经过滤/降噪的图像的过程。最有效的降噪技术依赖于机器学习技术,其中机器学习引擎学习如果已经用更多样本计算了有噪声的图像则该有噪声的图像将可能看起来像什么。在一个特定实现方式中,由卷积神经网络(CNN)执行机器学习;然而,本发明的根本性原理不限于CNN实现方式。在此类实现方式中,用低样本数输入和基础事实来产生训练数据。CNN经训练以根据围绕考虑中的像素的有噪声像素输入的邻域来预测收敛的像素。
尽管不是完美的,但是该基于AI的降噪技术已证明是出人意料地有效的。然而,警告在于需要好的训练数据,因为否则网络可能预测出错误结果。例如,如果动画电影工作室利用陆地上的场景对过去的电影训练降噪CNN且随后尝试使用经训练的CNN对来自水上的新电影片场的帧进行降噪,则降噪操作将次优地执行。
为了解决该问题,本发明的一个实施例在渲染时动态地收集学习数据,并且基于机器学习引擎(诸如,CNN)正对其运行的数据来连续地训练该机器学习引擎,由此针对即将到来的任务连续地改进机器学习引擎。该实施例仍可在运行时之前执行训练阶段,但是在运行时期间根据需要继续调整机器学习权重。此外,该实施例通过将学习数据的生成限于每帧或每N帧图像的子区域,避免了计算训练所需的参考数据的高成本。具体而言,生成帧的有噪声的输入以利用当前网络对完整的帧降噪。此外,如下文所述,参考像素的小区域被生成并被用于连续的训练。
虽然参考某些实施例描述了CNN实现方式,但是可使用任何形式的机器学习引擎,包括但不限于执行有监督学习(例如,建立包含输入和期望输出两者的数据集合的数学模型)、无监督学习(例如,其评估针对某些类型的结构的输入数据)、和/或有监督学习和无监督学习的组合的系统。
现有的降噪实现方式在训练阶段和运行时阶段中操作。在训练阶段期间,定义网络拓扑,该网络拓扑接收具有各个逐像素数据通道的NxN像素的区域并生成最终的像素颜色,逐像素数据通道诸如,像素颜色、深度、法线、法线偏离、基元ID和反射率。通过使用一个帧的低样本数输入的信息量并参考以非常高的样本数计算的“期望”像素颜色来生成“代表性”训练数据的集合。对这些输入训练网络,从而生成用于网络的“理想”权重的集合。在这些实现方式中,使用参考数据来训练网络的权重以使网络的输出最接近地与期望结果相匹配。
在运行时,加载给定的、预先计算的理想网络权重并初始化网络。对于每一帧,生成降噪输入的低样本数图像(即,与用于训练的相同)。对于每一帧,通过网络运行像素输入的给定邻域以预测“经降噪的”像素颜色,从而生成经降噪的帧。
图15图示初始训练实现方式的一个实施例。机器学习引擎1500(例如,CNN)接收具有各种逐像素数据通道的作为高样本数图像数据1502的N x N像素的区域并生成最终的像素颜色,逐像素数据通道诸如,像素颜色、深度、法线、法线偏离、基元ID和反射率。使用一个帧的低样本数输入1501的信息量生成代表性训练数据。对这些输入训练网络,从而生成“理想”权重的集合1505,机器学习引擎1500后续使用该“理想”权重的集合1505以在运行时对低样本数图像降噪。
为了改进上述技术,本发明的一个实施例扩充降噪阶段以生成针对每帧的新训练数据或生成针对帧的子集(例如,针对每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)中那样,对理想权重的集合1605训练机器学习引擎1600以从低样本数输入帧1601去除噪声,从而生成经降噪的帧1620。然而,在该实施例中,基于新类型的低样本数输入帧1601的新图像特性持续更新经训练的权重1605。
在一个实施例中,在图形处理器单元(GPU)或主机处理器上的后台进程中并发地执行由机器学习引擎1600执行的重新训练操作。可实现为驱动器组件和/或GPU硬件组件的渲染环路连续地产生(例如,新参考区域1602形式的)新训练数据,该渲染环路将新训练数据放置在队列中。在GPU或主机处理器上执行的后台训练进程连续地读取该新训练数据,重新训练机器学习引擎1600,并且以适当的间隔用新权重1605来更新该机器学习引擎1600。
图17图示在其中由主机CPU 1710实现后台训练进程1700的一个此类实现方式的示例。具体而言,在该实施例中,后台训练进程1700使用高样本数新参考区域1602和对应的低样本区域1604来持续更新经训练的权重1605,由此更新机器学习引擎1600。
如在图18A中所图示,在一个实现方式中,诸如在多玩家在线游戏中,不同的主机机器1820-1822各自生成参考区域,后台训练进程1700A-1700C将这些参考区域传输到服务器1800(诸如,游戏服务器)。服务器1800随后使用从主机1820-1822中的每一个接收到的新参考区域对机器学习引擎1810执行训练,从而如先前所述地更新权重1805。服务器1800将这些权重1805传输到存储权重1605A-1605C的主机机器1820-1822,由此更新每个单独的机器学习引擎(未示出)。由于服务器1800可在短时间段内被提供有大量参考区域,因此该服务器1800可对正由用户执行的任何给定应用(例如,在线游戏)高效且精确地更新权重。
如在图18B中所图示,不同的主机机器可(例如,如先前所述基于训练/参考区域1602)生成新的经训练权重,并且与服务器1800(例如,诸如游戏服务器)共享该新的经训练权重或替代地使用对等共享协议。服务器上的机器学习管理组件1810使用从主机机器中的每一个主机机器接收的新权重生成组合权重的集合1805。组合权重1805例如可以是如本文中所述从新权重生成并被持续更新的平均值。一旦被生成,就可传输组合权重的副本1605A-1605C并将组合权重的副本1605A-1605C存储在主机机器1820-1822中的每一个上,主机机器1820-1822随后可如本文中所述使用这些组合权重以执行降噪操作。
在一个实施例中,可由硬件制造商使用该半闭环更新机制。例如,可包括参考网络作为由硬件制造商分发的驱动器的部分。随着驱动器使用本文中所述的技术生成新训练数据并连续地将这些数据往回提交给硬件制造商,该硬件制造商使用该信息以继续改进用于下一驱动器更新的其机器学习实现方式。
在一个实现方式中(例如,在渲染场上的批量电影渲染中),渲染器将新生成的训练区域传输到随时间推移从多个渲染节点聚合该数据的(那个工作室的渲染场中的)专用服务器或数据库。在单独机器上的单独进程连续地改进工作室的专用降噪网络,并且新渲染作业总是使用最新经训练的网络。
在图19中图示根据本发明的一个实施例的方法。该方法可在本文中描述的架构上实现,但不限于任何特定的系统或图形处理架构。
在1901处,作为初始训练阶段的一部分,为多个图像帧生成低样本数图像数据和高样本数图像数据。在1902处,使用高/低样本数图像数据训练机器学习降噪引擎。在一个实施例中,例如,可根据训练来更新与像素特征相关联的卷积神经网络权重的集合。然而,可使用任何机器学习架构。
在1903处,在运行时,生成低样本数图像帧以及具有高样本数的至少一个参考区域。在1904处,由机器学习引擎和/或单独的训练逻辑(例如,后台训练模块1700)使用高样本数参考区域来持续改良机器学习引擎的训练。例如,在一个实施例中,结合低样本数图像的对应部分来使用高样本数参考区域以继续教授机器学习引擎1904如何最有效地执行降噪。在CNN实现方式中,例如这可涉及更新与CNN相关联的权重。
可实现上文描述的实施例的多个变体,诸如,配置至机器学习引擎的反馈环路所按照的方式;生成训练数据的实体;将训练数据反馈到训练引擎所按照的方式;以及如何将改进的网络提供给渲染引擎。此外,虽然上文描述的上述实施例使用单个参考区域执行连续训练,但是可使用任何数量的参考区域。此外,如先前所提及,参考区域可具有不同尺寸,可对不同数量的图像帧使用,并且可使用不同技术(例如,任意地,根据预定模式等)被定位在图像帧内的不同位置中。
此外,虽然将卷积神经网络(CNN)描述为机器学习引擎1600的一个示例,但是可使用能够使用新训练数据来持续改良其结果的任何形式的机器学习引擎来实现本发明的根本性原理。作为示例而非限制,其他机器学习实现方式包括数据处理分组方法(GMDH)、长短期记忆、深度储存计算、深度信念网络、张量深度堆叠网络和深度预测性译码网络,仅举数例。
用于高效的分布式降噪的装置和方法
如上文所述,降噪已成为对于具有平滑的、无噪声图像的实时光线追踪的关键特征。可跨分布式系统在多个设备上完成渲染,但是到目前为止,现有的降噪框架全都对于单个机器上的单个实例进行操作。如果正在跨多个设备进行渲染,则这些设备可能无法使所有经渲染的像素对于计算图像的经降噪的部分可访问。
本发明的一个实施例包括利用基于人工智能(AI)的降噪技术和非基于AI的降噪技术两者来运作的分布式降噪算法。图像的区域要么已经跨来自分布式渲染操作的节点被分布,要么从单个帧缓冲器被分割和分发。当需要时从相邻节点收集计算足够的降噪所需的相邻区域的虚假区域,并且将最终所得的片合成到最终图像中。
分布式处理
图20图示在其中多个节点2021-2023执行渲染的本发明的一个实施例。虽然为简单起见仅图示三个节点,但是本发明的根本性原理不限于任何特定数量的节点。实际上,可使用单个节点来实现本发明的某些实施例。
节点2021-2023各自渲染图像的部分,从而产生该示例中的区域2011-2013。虽然在图20中示出矩形区域2011-2013,但是可使用具有任何形状的区域,并且任何设备都可处理任何数量的区域。由节点执行足够平滑的降噪操作所需的区域被称为虚假区域2001-2003。换言之,虚假区域2001-2003表示以所指定的质量等级执行降噪所需的全部数据。降低质量等级减小虚假区域的尺寸并因此减少所需的数据量,提高质量等级增加虚假区域和所需的对应数据。
在一个实施例中,如果诸如2021之类的节点确实具有虚假区域2001的、以所指定的质量等级对该节点的区域2011降噪所需的部分的本地副本,则该节点将从一个或多个“邻近”节点检取所需数据,这一个或多个“邻近”节点诸如所图示的拥有虚假区域2001的部分的节点2022。类似地,如果节点2022确实具有虚假区域2002的、以所指定的质量等级对该节点2022的区域2012降噪所需的部分的本地副本,则节点2022将从节点2021检取所需的虚假区域数据2032。检取可通过总线、互连、高速存储器结构、网络(例如,高速以太网)来执行,或甚至可以是在(例如,用于以极端分辨率或以时变方式渲染大图像的)能够在多个核之间分布渲染工作的多核芯片中的芯片上互连。在一个实施例中,每个节点2021-2023包括在图形处理器内的各个执行单元或指定的执行单元集合。
要发送的数据的特定量取决于所使用的降噪技术。此外,来自虚假区域的数据可包括改进每个相应区域的降噪所需的任何数据。在一个实施例中,例如虚假区域数据包括图像颜色、波长、强度/α数据、和/或法线。然而,本发明的根本性原理不限于任何特定的虚假区域数据集。
一个实施例的附加细节
对于较慢的网络或互连,可通过使用现有的通用无损压缩或有损压缩来利用对该数据的压缩。示例包括但不限于zlib、gzip、以及Lempel–Ziv–Markov链算法(LZMA)。通过注意到帧之间的光线命中信息的增量可能非常稀疏,可使用进一步的内容专用的压缩,并且当节点已经具有来自先前帧的所收集的增量时,仅需要发送对那个增量作出贡献的样本。可选择性地将这些推送到收集那些样本的节点i,或者节点i可从其他节点请求样本。在一个实施例中,无损压缩用于某些类型的数据和程序代码,而有损压缩用于其他类型的数据。
图21图示根据本发明的一个实施例的在节点2021与节点2022之间的交互的附加细节。每个节点2021-2022都包括光线追踪渲染电路2081-2082,该光线追踪渲染电路2081-2082用于渲染相应的图像区域2011-2012以及虚假区域2001-2002。降噪器2100-2111分别对区域2011-2012执行降噪操作,每个节点2021-2022分别负责对区域2011-2012进行渲染和降噪。降噪器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,压缩器/解压缩器2131将该经压缩的数据2106传输到节点2022,由此降低通过互连、网络、总线或其他数据通信链路的带宽。节点2022的压缩器/解压缩器2132随后对经压缩的数据2106进行解压缩,并且降噪器2111使用经解压缩的虚假数据来生成比仅利用来自区域2012的数据将可能达到的质量更高的经降噪的区域2012。区域数据管理器2102可将来自虚假区域2001的经解压缩的数据存储在高速缓存、存储器、寄存器堆或其他存储中,以使当生成经降噪的区域2121时这些数据可用于降噪器2111。可执行类似的操作集以将来自虚假区域2002的数据提供给节点2021上的降噪器2100,该降噪器2100结合来自区域2011的数据来使用该数据以生成更高质量的经降噪的区域2121。
抓取数据或渲染
如果诸如节点2021-2022之类的设备之间的连接是慢的(即,比阈值等待时间和/或阈值带宽慢),则在本地渲染虚假区域而不是从其他设备请求结果可能更快。这可通过跟踪网络事务速度以及针对虚假区域尺寸的经线性外推的渲染次数在运行时确定。在其中渲染完整个虚假区域的此类情况下,多个设备可最终渲染图像的多个相同部分。可基于基础区域的方差以及所确定的模糊程度来调整虚假区域的经渲染部分的分辨率。
负载平衡
在一个实施例中,可使用静态和/或动态负载平衡方案以在各节点2021-2022之间分布处理负载。对于动态负载平衡,由降噪过滤器确定的方差可能既在降噪方面需要更多时间又驱动用于渲染场景的特定区域的样本量,其中图像的低方差和模糊区域需要较少的样本。可基于来自先前帧的数据动态地调整指派给特定节点的特定区域,或者当多个设备正在渲染时,可跨这些设备动态地传递分派给特定节点的特定区域,使得所有设备将具有相同的工作量。
图22图示在其中在每个相应节点2021-2022上运行的监视器2201-2202收集性能度量数据的一个实施例,该性能度量数据包括但不限于通过网络接口2211-2212传输数据所消耗的时间、当(利用或不利用虚假区域数据)对区域降噪时消耗的时间、以及渲染每个区域/虚假区域所消耗的时间。监视器2201-2202将这些性能度量往回报告给管理器或负载平衡器节点2201,该管理器或负载平衡器节点2201分析数据以识别每个节点2021-2022上的当前工作负载并潜在地确定处理各种经降噪的区域2121-2122的更高效模式。管理器节点2201随后根据检测到的负载将用于新区域的新工作负载分布到节点2021-2022。例如,管理器节点2201可将更多工作传输到非重负荷的那些节点,和/或重新分派来自过载的那些节点的工作。此外,负载平衡器节点2201可传输重配置命令,以调整由节点中的每个节点执行渲染和/或降噪所按照的特定方式(上文描述了其中的一些示例)。
确定虚假区域
在一个实施例中,基于由降噪器2100-2111实现的降噪算法来确定虚假区域2001-2002的尺寸和形状。随后可基于正被降噪的样本的检测到的方差来动态地修改这些虚假区域的相应尺寸。用于AI降噪自身的学习算法可用于确定适当的区域尺寸,或者在诸如双边模糊之类的其他情况下,预定的过滤器宽度将确定虚假区域2001-2002的尺寸。在使用学习算法的实现方式中,可在管理器节点2201上执行机器学习引擎,和/或可在各个节点2021-2022中的每个节点上执行机器学习的多个部分(参见例如图18A-图18B和上述相关联的文本)。
聚集最终图像
在一个实施例中,可在无需虚假区域或法线的情况下通过从节点2021-2022中的每个节点聚集经渲染和经降噪的区域来生成最终图像。在图22中,例如经降噪的区域2121-2122被传输到管理器节点2201的区域处理器2280,该区域处理器2280组合这些区域以生成最终经降噪的图像2290,该最终经降噪的图像2290随后被显示在显示器2290上。区域处理器2280可使用各种2D合成技术来组合区域。虽然被图示为多个单独的组件,但是区域处理器2280和经降噪的图像2290可与显示器2290是一体的。在该实施例中,各节点2021-2022可使用直接发送技术来传输经降噪的区域2121-2122并潜在地使用对区域数据的各种有损或无损压缩。
随着游戏移入云中,AI降噪仍是昂贵的操作。由此,跨多个节点2021-2022的降噪的分布式处理可能变得需要实现针对传统游戏或需要更高帧率的虚拟现实(VR)的实时帧率。电影工作室也常在大型渲染场中进行渲染,可利用大型渲染场以进行较快的降噪。
在图23中图示用于执行分布式渲染和降噪的方法的一个实施例。该方法可在上文描述的系统架构的上下文内实现,但是不限于任何特定的系统架构。
在2301处,将图形工作分派给多个节点,这些节点执行光线追踪操作以渲染图像帧的区域。在一个实施例中,每个节点在存储器中可能已经具有执行操作所需的数据。例如,节点中的两个或更多个节点可共享共同的存储器,或者节点的本地存储器可能已经存储了来自先前光线追踪操作的数据。替代地或附加地,可将某些数据传输到每个节点。
在2302处,确定对于所指定的降噪等级(即,以可接受的性能等级)所需的“虚假区域”。虚假区域包括执行所指定等级的降噪所需的任何数据,包括一个或多个其他节点所拥有的数据。
在2303处,在节点之间交换与虚假数据(或其部分)有关的数据。在2304处,每个节点(例如,使用所交换的数据)对其相应的区域执行降噪,并且在2305处,组合结果以生成最终经降噪的图像帧。
在一个实施例中,诸如图22中所示的管理器节点或主节点将工作分派给节点,且随后组合由这些节点执行的工作以生成最终的图像帧。在另一实施例中,使用基于对等机的架构,其中节点是交换数据以对最终的图像帧进行渲染和降噪的对等机。
本文中描述的节点(例如,节点2021-2022)可以是经由高速网络而被互连的图形处理计算系统。替代地,节点可以是耦合至高速存储器结构的各个处理元件。在该实施例中,所有节点可共享共同的虚拟存储器空间和/或共同的物理存储器。在另一实施例中,节点可以是CPU和GPU的组合。例如,上文描述的管理器节点2201可以是CPU和/或在CPU上执行的软件,并且节点2021-2022可以是GPU和/或在GPU上执行的软件。可使用各种不同类型的节点而仍符合本发明的根本性原理。
示例神经网络实现方式
存在许多类型的神经网络;一种简单类型的神经网络是前馈网络。前馈网络可以被实现为在其中按层来布置节点的非循环图。典型地,前馈网络拓扑包括由至少一个隐藏层分离的输入层和输出层。隐藏层将由输入层接收的输入变换为对在输出层中生成输出有用的表示。网络节点经由边被完全连接到相邻层中的节点,但在每个层内的节点之间不存在边。在前馈网络的输入层的节点处接收的数据经由激活函数被传播(即,“前馈”)至输出层的节点,该激活函数基于分别与连接这些层的边中的每一条边相关联的系数(“权重”)来计算网络中每个连续层的节点的状态。取决于正由正被执行的算法表示的特定模型,来自神经网络算法的输出可以采用各种形式。
在可使用机器学习算法对特定问题建模之前,使用训练数据集来训练算法。训练神经网络涉及:选择网络拓扑;使用表示正由网络建模的问题的训练数据的集合;以及调整权重,直到网络模型针对训练数据集的所有实例都以最小误差执行。例如,在针对神经网络的有监督学习训练过程期间,由网络响应于表示训练数据集中的实例的输入而产生的输出与那个实例的“正确的”标记输出进行比较,计算表示输出与标记输出之间的差异的误差信号,并且随着误差信号通过网络的各层被向后传播,调整与连接相关联的权重以使那个误差最小化。当根据训练数据集的实例生成的输出中每个输出的误差被最小化时,网络被认为是“经训练的”。
机器学习算法的准确度会显著地受到用于训练算法的数据集的质量影响。训练过程可能是计算密集型的,并且在常规通用处理器上可能需要大量的时间。因此,使用并行处理硬件来训练许多类型的机器学习算法。这对于优化神经网络的训练是特别有用的,因为在调整神经网络中的系数时执行的计算本身自然地适于并行实现方式。具体地,许多机器学习算法和软件应用已被适配成利用通用图形处理设备内的并行处理硬件。
图24是机器学习软件栈2400的广义图。机器学习应用2402可以被配置成使用训练数据集来训练神经网络或使用经训练的深度神经网络来实现机器智能。机器学习应用2402可包括用于神经网络的训练和推断功能和/或可用于在部署之前训练神经网络的专业软件。机器学习应用2402可实现任何类型的机器智能,包括但不限于:图像识别、绘图和定位、自主导航、语音合成、医学成像或语言翻译。
可以经由机器学习框架2404来启用用于机器学习应用2402的硬件加速。机器学习框架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。多GPU计算系统2500可包括处理器2502,该处理器2502经由主机接口开关2504耦合至多个GPGPU 2506A-2506D。在一个实施例中,主机接口开关2504是将处理器2502耦合至PCI Express总线的PCI Express开关设备,处理器2502可通过该PCI Express总线与GPGPU的集合2506A-2506D通信。多个GPGPU2506A-2506D中的每一个可以是上文描述的GPGPU的实例。GPGPU 2506A-2506D可以经由高速点对点GPU-GPU链路的集合2516进行互连。高速GPU-GPU链路可经由专用GPU链路连接至GPGPU 2506A-2506D中的每一个。P2P GPU链路2516启用GPGPU 2506A-2506D中的每个GPGPU之间的直接通信,而无需通过处理器2502连接到的主机接口总线进行的通信。利用定向到P2P GPU链路的GPU-GPU通信量,主机接口总线保持可用于系统存储器访问,或用于例如经由一个或多个网络设备与多GPU计算系统2500的其他实例通信。虽然在所图示的实施例中,GPGPU 2506A-2506D经由主机接口开关2504连接至处理器2502,但是在一个实施例中,处理器2502包括对P2P GPU链路2516的直接支持并且可以直接连接至GPGPU 2506A-2506D。
机器学习神经网络实现方式
由本文中描述的实施例提供的计算架构可以被配置成执行特别适合于训练和部署用于机器学习的神经网络的这些类型的并行处理。可以将神经网络概括为具有图关系的函数网络。如本领域中所公知,存在机器学习中所使用的多种类型的神经网络实现方式。一种示例性类型的神经网络是如先前描述的前馈网络。
第二示例性类型的神经网络是卷积神经网络(CNN)。CNN是用于处理具有已知的、网格状拓扑的数据(诸如,图像数据)的专业的前馈神经网络。因此,CNN通常用于计算机视觉和图像识别应用,但是它们也可用于其他类型的模式识别,诸如,语音和语言处理。CNN输入层中的节点被组织为“过滤器”的集合(由视网膜中发现的感受野激发的特征检测器),并且每个过滤器集合的输出被传播至网络的连续层中的节点。用于CNN的计算包括将卷积数学运算应用于每个过滤器以产生那个过滤器的输出。卷积是由两个函数执行以产生第三函数的一种专业的数学运算,该第三函数是两个原始函数中的一个的修改版本。在卷积网络术语中,卷积的第一函数可以被称为输入,而第二个函数可以被称为卷积核。输出可被称为特征图。例如,至卷积层的输入可以是定义输入图像的各种颜色分量的多维数据数组。卷积核可以是多维参数数组,其中通过用于神经网络的训练过程来使参数适配。
递归神经网络(RNN)是包括层之间的反馈连接的一类前馈神经网络。RNN通过跨神经网络的不同部分共享参数数据来启用对序列化数据进行建模。用于RNN的架构包括循环。这些循环表示变量的当前值在未来时刻对其自身值的影响,因为来自RNN的输出数据的至少一部分被用作反馈以用于处理序列中的后续输入。由于语言数据可被组成的可变本质,这个特征使RNN变得对语言处理特别有用。
下文描述的图呈现了示例性前馈网络、CNN网络和RNN网络,并且描述了用于分别训练和部署那些类型的网络中的每一种的一般过程。将理解,这些描述就本文中描述的任何特定实施例而论是示例性且非限制性的,并且一般说来所图示的概念一般可应用于深度神经网络和机器学习技术。
上文描述的示例性神经网络可以用于执行深度学习。深度学习是使用深度神经网络的机器学习。与仅包括单个隐藏层的浅层神经网络相反,深度学习中使用的深度神经网络是由多个隐藏层组成的人工神经网络。更深的神经网络通常训练起来更具计算密集性。然而,网络的附加隐藏层启用多步模式识别,该多步模式识别产生相对于浅层机器学习技术的减小的输出误差。
深度学习中使用的深度神经网络典型地包括用于执行特征识别的前端网络,该前端网络耦合至后端网络,该后端网络表示数学模型,该数学模型可基于提供给模型的特征表示来执行操作(例如,对象分类、语音识别等)。深度学习使得在无需针对模型执行手工特征工程的情况下执行机器学习。相反,深度神经网络可以基于输入数据内的统计结构或相关性来学习特征。所学习的特征可以提供给数学模型,该数学模型可以将所检测的特征映射至输出。由网络使用的数学模型通常专用于待执行的特定任务,并且将使用不同的模型来执行不同的任务。
一旦将神经网络结构化,就可以将学习模型应用于网络以将网络训练成执行特定任务。学习模型描述如何调整模型内的权重以减小网络的输出误差。反向传播误差是用于训练神经网络的常用方法。输入向量被呈现给网络以供处理。使用损失函数将网络的输出与期望输出进行比较,并且为输出层中的神经元中的每个神经元计算误差值。随后,向后传播误差值,直到每个神经元具有粗略地表示该神经元对原始输出的贡献的相关联的误差值。随后,网络可以使用算法(诸如,随机梯度下降算法)通过那些误差进行学习,以更新神经网络的权重。
图26-图27图示示例性卷积神经网络。图26图示CNN内的各个层。如图26中所示,用于对图像处理进行建模的示例性CNN可接收输入2602,该输入2602描述输入图像的红、绿和蓝(RGB)分量。输入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使用池化函数,该池化函数用附近输出的概括统计来替换卷积层2706的输出。池化函数可用于将平移不变性引入到神经网络中,使得至输入的小平移不改变经池化的输出。局部平移的不变性在其中特征在输入数据中的存在比该特征的精确位置更重要的场景下可以是有用的。可以在池化级2720期间使用各种类型的池化函数,包括最大池化、平均池化和l2范数池化。另外,一些CNN实现方式不包括池化级。相反,此类实现方式代用相对于先前的卷积级具有增加的跨步的附加卷积级。
随后,来自卷积层2714的输出可由下一层2722处理。下一层2722可以是一个附加的卷积层或是全连接层2708中的一个层。例如,图27的第一卷积层2704可以输出至第二卷积层2706,而第二卷积层可以输出至全连接层2808中的第一层。
图28图示示例性递归神经网络2800。在递归神经网络(RNN)中,网络的先前状态影响网络的当前状态的输出。可以使用各种函数以各种方式来建立RNN。RNN的使用通常围绕使用数学模型以基于先前的输入序列来预测未来。例如,RNN可用于执行统计语言建模以在给定先前的字序列的情况下预测即将来临的字。可以将所图示的RNN 2800描述为具有以下各项:输入层2802,其接收输入向量;隐藏层2804,用于实现递归函数;反馈机制2805,用于启用先前状态的“记忆”;以及输出层2806,用于输出结果。RNN 2800基于时间步长来操作。RNN在给定时间步长的状态经由反馈机制2805基于先前的时间步长被影响。针对给定的时间步长,由先前状态和在当前时间步长的输入来限定隐藏层2804的状态。在第一时间步长的初始输入(x1)可由隐藏层2804处理。第二输入(x2)可由隐藏层2804使用在处理初始输入(x1)期间所确定的状态信息来处理。给定的状态可被计算为s_t=f(Ux_t+Ws_(t-1)),其中,U和W是参数矩阵。该函数f一般是非线性的,诸如,双曲正切函数(Tanh)或修正函数f(x)=max(0,x)的变体。然而,隐藏层2804中使用的特定数学函数可以取决于RNN 2800的特定实现方式细节而有所不同。
除所描述的基本CNN网络和RNN网络之外,还可实现那些网络的变化。一个示例RNN变体是长短期记忆(LSTM)RNN。LSTM RNN能够学习对于处理较长的语言序列可能必要的长期依赖性。CNN的变体是卷积深度信念网络,该卷积深度信念网络具有类似于CNN的结构并且以类似于深度信念网络的方式被训练。深度信念网络(DBN)是由随机性(随机)变量的多个层组成的生成式神经网络。可以使用贪婪式无监督学习来逐层训练DBN。随后,DBN的所学习的权重可以用于通过确定用于神经网络的最佳初始权重集合来提供预训练神经网络。
图29图示深度神经网络的训练和部署。一旦已针对任务将给定的网络结构化,就使用训练数据集2902来训练神经网络。已开发出各种训练框架2904来启用对训练过程的硬件加速。例如,上文所述的机器学习框架可被配置为训练框架。训练框架2904可以跟未经训练的神经网络2906挂钩,并且使得能够使用本文中描述的并行处理资源来训练未经训练的神经网以生成经训练的神经网2908。
为了开始训练过程,可随机地或通过使用深度信念网络进行预训练来选择初始权重。随后,以有监督或无监督方式执行训练循环。
有监督学习是在其中将训练被执行为中介操作的学习方法,诸如,当训练数据集2902包括与输入的期望输出配对的该输入时,或在训练数据集包括具有已知输出的输入并且神经网络的输出被手动分级的情况下。网络处理输入,并且将所得的输出与预期输出或期望输出的集合进行比较。随后,通过系统反向传播误差。训练框架2904可以进行调整,以调整控制未经训练的神经网络2906的权重。训练框架2904可以提供工具以监测未经训练的神经网络2906在多好地收敛于适合基于已知的输入数据生成正确的答案的模型。随着网络的权重被调整以改良由神经网络生成的输出,训练过程反复地发生。训练过程可以继续,直到神经网络达到与经训练的神经网2908相关联的统计上期望的准确度。随后,可以部署经训练的神经网络2908以实现任何数量的机器学习操作。
无监督学习是在其中网络试图使用未标记数据来训练其自身的学习方法。因此,针对无监督学习,训练数据集2902将包括不具有任何相关联的输出数据的输入数据。未经训练的神经网络2906可以学习未标记输入内的分组,并且可以确定单独的输入如何与整个数据集相关。无监督训练可以用于生成自组织图,该自组织图是能够执行有助于数据降维的操作的一类的经训练的神经网络2907。无监督训练还可以用于执行异常检测,该异常检测允许识别输入数据集中偏离数据正常模式的数据点。
还可采用有监督训练和无监督训练的变体。半监督学习是在其中在训练数据集2902中包括具有相同分布的经标记数据和未标记数据的混合的技术。渐进式学习是有监督学习的变体,其中连续地使用输入数据以进一步训练模型。渐进式学习使得经训练的神经网络2908能够适配于新数据2912,而不忘记在初始训练期间根植在网络内的知识。
无论是有监督还是无监督的,用于特别深的神经网络的训练过程对于单个计算节点可能是过于计算密集的。可以使用计算节点的分布式网络而不是使用单个计算节点来加速训练过程。
图30A是图示分布学习的框图。分布式学习是使用多个分布式计算节点来执行神经网络的有监督训练或无监督训练的训练模型,多个分布式计算节点诸如上文所述的节点。分布式计算节点可以各自包括一个或多个主机处理器以及通用处理节点中的一个或多个通用处理节点,该通用处理节点诸如高度并行的通用图形处理单元。如所图示,分布式学习可被执行模型并行性3002、数据并行性3004、或模型并行性和数据并行性的组合。
在模型并行性3002中,分布式系统中的不同计算节点可以针对单个网络的不同部分执行训练计算。例如,可以由分布式系统的不同的处理节点训练神经网络的每个层。模型并行性的益处包括缩放到特别大的模型的能力。分割与神经网络的不同层相关联的计算使得能够训练非常大的神经网络,其中所有层的权重将不拟合到单个计算节点的记忆中。在一些实例中,模型并行性在执行大型神经网络的无监督训练中可以是特别有用的。
在数据并行性3004中,分布式网络的不同节点具有模型的完整实例,并且每个节点接收数据的不同部分。随后,组合来自不同节点的结果。虽然用于数据并行性的不同方法是可能的,但是数据并行训练方法全都需要组合结果并使每个节点之间的模型参数同步的技术。用于组合数据的示例性方法包括参数求平均和基于更新的数据并行性。参数求平均对训练数据的子集训练每个节点,并且将全局参数(例如,权重、偏差)设定为来自每个节点的参数的平均值。参数求平均使用维持参数数据的中央参数服务器。基于更新的数据并行性类似于参数求平均,例外在于,传递对模型的更新而不是将来自节点的参数传送到参数服务器。另外,能以分散的方式执行基于更新的数据并行性,其中更新被压缩并且在节点之间传送。
可以例如在其中每个计算节点包括多个GPU的分布式系统中实现组合式模型和数据并行性3006。每个节点可以具有模型的完整实例,其中每个节点内的多个单独的GPU用于训练模型的不同部分。
分布训练相对于在单个机器上的训练具有增加的开销。然而,本文中描述的并行处理器和GPGPU可以各自实现各种技术以用于减少分布训练的开销,这些技术包括用于启用高带宽GPU-GPU数据传送和加速的远程数据同步的技术。
示例性机器学习应用
可以应用机器学习以解决各种技术问题,包括但不限于计算机视觉、自主驾驶和导航、语音识别以及语言处理。计算机视觉在传统上已是机器学习应用的最活跃研究领域之一。计算机视觉的应用范围为从重现人类视觉能力(诸如,识别人脸)到创建新类别的视觉能力。例如,计算机视觉应用可以被配置成从视频中可见的物体中诱发的振动来识别声波。并行处理器加速的机器学习使得能够使用比先前可行的训练数据集明显大得多的训练数据集来训练计算机视觉应用,并且使得能够使用低功率并行处理器来部署推断系统。
并行处理器加速的机器学习具有自主驾驶应用,包括车道和道路标志识别、障碍回避、导航和驾驶控制。加速的机器学习技术可以用于基于定义对特定训练输入的适当响应的数据集来训练驾驶模型。本文中描述的并行处理器能够对用于自主驾驶解决方案的日益复杂的神经网络进行快速训练,并且能够将低功率推断处理器部署在适合于集成到自主车辆中的移动平台中。
并行处理器加速的深度神经网络已实现用于自动语音识别(ASR)的机器学习方法。ASR包括创建在给定的输入声序列的情况下计算最可能的语言序列的函数。使用深度神经网络的加速的机器学习已实现代替先前用于ASR的隐马尔可夫模型(HMM)和高斯混合模型(GMM)。
并行处理器加速的机器学习还可以用于加速自然语言处理。自动学习程序可以利用统计推断算法以产生对于有误差的或不熟悉的输入强健的模型。示例性自然语言处理器应用包括人类语言之间的自动机器翻译。
可以将用于机器学习的并行处理平台划分为训练平台和部署平台。训练平台通常是高度并行的,并且包括用于加速多GPU单节点训练和多节点多GPU训练的优化。适合于训练的示例性并行处理器包括本文中描述的高度并行的通用图形处理单元和/或多GPU计算系统。相反,部署的机器学习平台通常包括适合于在诸如相机、自主机器人和自主车辆的产品中使用的低功率并行处理器。
图30B图示适合于使用经训练的模型执行推断的示例性推断芯片上系统(SOC)3100。SOC 3100可以集成多个处理组件,包括媒体处理器3102、视觉处理器3104、GPGPU3106和多核处理器3108。SOC 3100可附加地包括芯片上存储器3105,该芯片上存储器3105可启用可由处理组件中的每个处理组件访问的共享芯片上数据池。处理组件可以针对低功率操作被优化,以使得能够部署到各种机器学习平台,包括自主车辆和自主机器人。例如,可以将SOC 3100的一种实现方式用作用于自主车辆的主控制系统的一部分。在SOC3100被配置成在自主车辆中使用的情况下,SOC被设计和配置成用于符合部署管辖权的相关功能安全标准。
在操作期间,媒体处理器3102和视觉处理器3104可以一致地工作以加速计算机视觉操作。媒体处理器3102可以使得能够对多个高分辨率(例如,4K、8K)视频流进行低等待时间解码。可以将经解码的视频流写入到芯片上存储器3105中的缓冲器。随后,视觉处理器3104可以解析经解码的视频,并且对经解码视频的帧执行初步处理操作以准备使用经训练的图像识别模型来处理帧。例如,视觉处理器3104可以加速用于CNN的卷积操作,该CNN用于对高分辨率视频数据执行图像识别,而后端模型计算由GPGPU 3106执行。
多核处理器3108可以包括控制逻辑,该控制逻辑用于辅助数据传送的定序和同步以及由媒体处理器3102和视觉处理器3104执行的共享存储器操作。多核处理器3108还可以充当应用处理器,以执行可利用GPGPU 3106的推断计算能力的软件应用。例如,可以于在多核处理器3108上执行的软件中实现导航和驾驶逻辑的至少一部分。此类软件可以直接将计算工作负载发布至GPGPU 3106,或者可以将计算工作负载发布至多核处理器3108,该多核处理器可以将那些操作的至少一部分转移到GPGPU 3106。
GPGPU 3106可以包括计算集群,诸如,高度并行的通用图形处理单元DPLAB00内的计算集群DPLAB06A-DPLAB06的低功率配置。GPGPU3106内的计算集群可支持专门经优化以对经训练的神经网络执行推断计算的指令。例如,GPGPU 3106可支持用于执行低精度计算的指令,低精度计算诸如8位和4位整数向量操作。
光线追踪架构
在一个实现方式中,图形处理器包括用于执行实时光线追踪的电路和/或程序代码。在一些实施例中,专用的光线追踪核的集合被包括在图形处理器中以执行本文中描述的各种光线追踪操作,包括光线遍历和/或光线相交操作。除了光线追踪核之外,一个实施例还包括用于执行可编程着色操作的多个集合的图形处理核以及用于对张量数据执行矩阵操作的多个集合的张量核。
图31图示一个此类图形处理单元(GPU)3105的示例性部分,该GPU 3105包括布置为多核组3100A-3100N的专用的图形处理资源的集合。虽然提供仅单个多核组3100A的细节,但是将理解,其他多核组3100B-3100N 可配备有相同或类似集合的图形处理资源。
如所图示,多核组3100A可包括图形核的集合3130、张量核的集合3140以及光线追踪核的集合3150。调度器/分派器3110调度和分派图形线程用于在各个核3130、3140、3150上执行。寄存器堆的集合3120存储在执行图形线程时由核3130、3140、3150使用的操作数值。这些寄存器堆可包括例如用于存储整数值的整数寄存器、用于存储浮点值的浮点寄存器、用于存储紧缩数据元素(整数和/或浮点数据元素)的向量寄存器以及用于存储张量/矩阵值的片寄存器。在一个实施例中,片寄存器被实现为组合的向量寄存器的集合。
一个或多个第一级(L1)高速缓存和纹理单元3160在本地将图形数据存储在每个多核组3100A内,图形数据诸如纹理数据、顶点数据、像素数据、光线数据、包围体数据等。由所有多核组3100A-3100N或多核组3100A-3100N的子集共享的第二级(L2)高速缓存3180存储用于多个并发的图形线程的数据和/或指令。如所图示,可跨多个多核组3100A-3100N共享L2高速缓存3180。一个或多个存储器控制器3170将GPU 3105耦合至存储器3198,该存储器3198可以是系统存储器(例如,DRAM)和/或专用图形存储器(例如,GDDR6存储器)。
输入/输出(IO)电路3195将GPU 3105耦合至一个或多个IO设备3190,这一个或多个IO设备3190诸如数字信号处理器(DSP)、网络控制器或用户输入设备。芯片上互连可用于将I/O设备3190耦合至GPU 3105和存储器3198。IO电路3195的一个或多个存储器管理单元(IOMMU)3170直接将IO设备3190耦合至系统存储器3198。在一个实施例中,IOMMU 3170管理用于将虚拟地址映射到系统存储器3198中的物理地址的多个集合的页表。在该实施例中,IO设备3190、(多个)CPU 3199和(多个)GPU 3105可共享相同的虚拟地址空间。
在一个实现方式中,IOMMU 3170支持虚拟化。在这种情况下,IOMMU 3170管理用于将宾客/图形虚拟地址映射到宾客/物理地址的第一集合的页表以及用于将宾客/图形物理地址映射到(例如,系统存储器3198内的)系统/主机物理地址的第二集合的页表。第一集合的页表和第二集合的页表中的每一个的基址可被存储在控制寄存器中,并且在上下文切换时被换出(例如,使得新上下文被提供有对相关集合的页表的访问权)。虽然未在图31中图示,但是核3130、3140、3150和/或多核组3100A-3100N中的每一个可包括转换后备缓冲器(TLB),这些TLB用于对宾客虚拟至宾客物理转换、宾客物理至主机物理转换以及宾客虚拟至主机物理转换进行高速缓存。
在一个实施例中,CPU 3199、GPU 3105和IO设备3190被集成在单个半导体芯片和/或芯片封装上。所图示的存储器3198可集成在同一芯片上,或者可经由片外接口被耦合至存储器控制器3170。在一个实现方式中,存储器3187包括共享与其他物理系统级存储器相同的虚拟地址空间的GDDR6存储器,但是本发明的根本性原理不限于该特定的实现方式。
在一个实施例中,张量核3140包括专门设计成用于执行矩阵操作的多个执行单元,这些矩阵操作是用于执行深度机器操作的基本计算操作。例如,可将同步矩阵乘法操作用于神经网络训练和推断。张量核3140可使用各种操作数精度来执行矩阵处理,操作数精度包括单精度浮点(例如,32位)、半精度浮点(例如,16位)、整数(16位)、字节(8位)和半字节(4位)。在一个实施例中,神经网络实现方式提取每个经渲染场景的特征,从而潜在地组合来自多个帧的细节,以构建高质量的最终图像。
在深度学习实现方式中,可调度并行的矩阵乘法工作用于在张量核3140上执行。神经网络的训练尤其需要大量矩阵点积操作。为了处理N x N x N矩阵乘法的内积公式化,张量核3140可包括至少N个点积处理元件。在矩阵乘法开始之前,一个完整的矩阵被加载到片寄存器中,并且对于N个循环中的每个循环,第二矩阵的至少一列被加载。对于每个循环,存在被处理的N个点积。
取决于特定的实现方式,能以不同精度来存储矩阵元素,包括16位的字、8位的字节(例如,INT8)以及4位的半字节(例如,INT4)。可为张量核3140指定不同的精度模式以确保将最高效的精度用于不同的工作负载(例如,诸如推断工作负载,其可容忍至字节和半字节的离散化(quantization))。
在一个实施例中,光线追踪核3150加速用于实时光线追踪实现方式和非实时光线追踪实现方式两者的光线追踪操作。具体而言,光线追踪核3150包括光线遍历/相交电路,该光线遍历/相交电路用于使用包围体层级结构(BVH)来执行光线遍历并识别封围在BVH容体内的光线与基元之间的相交。光线追踪核3150还可包括用于执行深度测试和剔除(例如,使用Z缓冲器或类似布置)的电路。在一个实现方式中,光线追踪核3150与本文中描述的图像降噪技术一致地执行遍历和相交操作,该图像降噪技术的至少部分可在张量核3140上执行。例如,在一个实施例中,张量核3140实现深度学习神经网络以执行对由光线追踪核3150生成的帧的降噪。然而,(多个)CPU 3199、图形核3130和/或光线追踪核3150还可实现降噪和/或深度学习算法的全部或部分。
此外,如上文所描述,可采用对于降噪的分布式方法,在该分布式方法中,GPU3105在通过网络或高速互连而耦合至其他计算设备的计算设备中。在该实施例中,经互连的计算设备共享神经网络学习/训练数据以改善整个系统学习执行用于不同类型的图像帧和/或不同的图形应用的降噪的速度。
在一个实施例中,光线追踪核3150处理所有的BVH遍历和光线-基元相交,从而挽救图形核3130免于被针对每条光线的数千条指令过载。在一个实施例中,每个光线追踪核3150包括用于执行包围盒测试(例如,用于遍历操作)的第一集合的专业电路以及用于执行光线-三角形相交测试(例如,使已被遍历的光线相交)的第二集合的专业电路。由此,在一个实施例中,多核组3100A可简单地发起光线探测,并且光线追踪核3150独立地执行光线遍历和相交,并将命中数据(例如,命中、无命中、多个命中等)返回到线程上下文。当光线追踪核3150执行遍历和相交操作时,其他核3130、3140被释放以执行其他图形或计算工作。
在一个实施例中,每个光线追踪核3150包括用于执行BVH测试操作的遍历单元以及执行光线-基元相交测试的相交单元。相交单元生成“命中”、“无命中”或“多个命中”响应,该相交单元将这些响应提供给适当的线程。在遍历和相交操作期间,其他核(例如,图形核3130和张量核3140)的执行资源被释放以执行其他形式的图形工作。
在下文描述的一个特定实施例中,使用在其中工作被分布在图形核3130与光线追踪核3150之间的混合式栅格化/光线追踪方法。
在一个实施例中,光线追踪核3150(和/或其他核3130、3140)包括对光线追踪指令集的硬件支持,光线追踪指令集诸如:微软的DirectX光线追踪(DXR),其包括DispatchRays命令;以及光线生成着色器、最近命中着色器、任何命中着色器和未命中着色器,它们启用为每个对象指派唯一集合的着色器和纹理。可由光线追踪核3150、图形核3130和张量核3140支持的另一光线追踪平台是Vulkan 1.1.85。然而,要注意本发明的根本性原理不限于任何特定的光线追踪指令集架构ISA。
一般而言,各个核3150、3140、3130可支持包括用于以下各项的指令/函数的光线追踪指令集:光线生成、最近命中、任何命中、光线-基元相交、逐基元和层级结构包围盒构建、未命中、拜访、和异常。更具体地,一个实施例包括用于执行以下功能的光线追踪指令:
光线生成——可为每个像素、样本或用户定义的工作分配执行光线生成指令。
最近命中——可执行最近命中指令以对场景内光线与基元的最近交点定位。
任何命中——任何命中指令识别场景内光线与基元的多个相交,从而潜在地识别新的最近交点。
相交——相交指令执行光线-基元相交测试并输出结果。
逐基元包围盒构建——该指令围绕给定的基元或基元组建立包围盒(例如,当建立新BVH或其他加速数据结构时)。
未命中——指示光线未命中场景或场景的指定区域内的任何几何体。
拜访——指示光线将遍历的子容体。
异常——包括各种类型的异常处置器(例如,为各种错误条件调用)。
层级式光束追踪
包围体层级结构常用于改善对图形基元和其他图形对象执行操作的效率。BVH是基于几何对象的集合建立的层级式树结构。在该树结构的顶部是封围给定场景中的所有几何对象的根节点。各个几何对象被包裹在形成该树的叶节点的包围体中。这些节点随后被分组为多个小集合并被封围在更大的包围体内。这些节点转而以递归方式又被分组并被封围在其他更大的包围体中,最终产生具有单个包围体的树结构,该单个包围体由位于树顶部的根节点表示。包围体层级结构用于高效地支持对几何对象的集合的各种操作,这些操作诸如在光线追踪中使用的碰撞检测、基元剔除以及遍历/相交操作。
在光线追踪架构中,使光线遍历通过BVH以确定光线-基元相交。例如,如果光线不通过BVH的根节点,则该光线不与由该BVH封围的基元中的任何基元相交,并且无需针对该光线相对于该基元集合的进一步处理。如果光线通过BVH的第一子节点而不是第二子节点,则无需针对由第二子节点封围的基元测试该光线。以此方式,BVH提供用于测试光线-基元相交的高效机制。
在本发明的一个实施例中,针对BVH测试被称为“光束”的相邻光线的组,而不是测试各条光线。图32图示由四条不同光线概述的示例性光束3201。与由四条光线限定的补片3200相交的任何光线被认为在同一光束内。虽然图32中的光束3201由光束的矩形布置限定,但是能以各种其他方式限定光束而仍符合本发明的根本性原理(例如,圆、椭圆等)。
图33图示在其中GPU 3320的光线追踪引擎3310实现本文中描述的光束追踪技术的示例性实施例。具体而言,光线生成电路3304生成多条光线,将为这些光线执行遍历和相交操作。然而,与对各条光线执行遍历和相交操作不同,所图示的实施例使用由光束层级结构构建电路3304生成的光束的层级结构3307来执行遍历和相交。在一个实施例中,光束层级结构与包围体层级结构(BVH)类似。例如,图34提供主光束3400的示例,该主光束3400可细分为多个不同的组成部分。具体而言,主光束3400可细分为四分体3401-3404,并且每个四分体自身可划分为多个子四分体,诸如,四分体3404内的多个子四分体A-D。能以多种方法对主光束细分。例如,在一个实施例中,主光束可分成两半(而不是四分体),并且每半个可分成两半,以此类推。无论如何进行细分,在一个实施例中,都以类似于BVH的方式生成层级式结构,例如,其中根节点表示主光束3400——第一级子节点,每个第一级节点由四分体3401-3404(针对每个子四分体A-D的第二级子节点)表示,以此类推。
在一个实施例中,一旦构建了光束层级结构3307,遍历/相交电路3306就使用光束层级结构3307和BVH 3308来执行遍历/相交操作。具体而言,遍历/相交电路3306对照BVH测试光束,并剔除该光束的不与该BVH的任何部分相交的部分。使用例如图34中示出的数据,如果与子区域3402和3403相关联的子光束不与BVH或BVH的特定分支相交,则可相对于BVH或该分支剔除这些子光束。可通过执行深度优先搜索或其他搜索算法对照BVH来测试其余部分3401、3404。
在图35中图示根据本发明的一个实施例的方法。该方法可在上文中描述的图形处理架构的上下文内实现,但是不限于任何特定的架构。
在3500处,构建包括多条光线的主光束,并且在3501处,细分该光束并生成层级式数据结构以创建光束层级结构。在一个实施例中,操作3500-3501被执行为从多条光线构建光束层级结构的单个一体的操作。在3502处,利用BVH来使用光束层级结构以(从光束层级结构)剔除光线和/或从BVH剔除节点/基元。在3503处,为其余的光线和基元确定光线-基元相交。
分布式光线追踪系统中的有损和无损分组压缩
在一个实施例中,跨通过网络耦合在一起的多个计算节点分布光线追踪操作。图36例如图示光线追踪集群3600,该光线追踪集群3600包括多个光线追踪节点3610-3613,多个光线追踪节点3610-3613用于并行地执行光线追踪操作,从而潜在地组合节点中的每个节点上的结果。在所图示的架构中,光线追踪节点3610-3613经由网关可通信地耦合至客户端侧光线追踪应用3630。
分布式架构的困难之一是必须在光线追踪节点3610-3613中的每一个之间传输的大量的分组化的(packetized)数据。在一个实施例中,使用无损压缩技术和有损压缩技术两者来减少在光线追踪节点3610-3613之间传输的数据。
为了实现无损压缩,与发送填充有某些类型的操作的结果的分组不同,发送允许接收节点重构结果的数据或命令。例如,随机采样的面光和环境遮挡(AO)操作不一定需要方向。结果,在一个实施例中,发射节点将简单地发送随机种子,该随机种子随后由接收节点用于执行随机采样。例如,如果场景跨节点3610-3612分布,则为了对点p1-p3处的光1采样,仅需将光ID和原点发送到节点3610-3612。随后,节点中的每个节点可随机地、独立地对光采样。在一个实施例中,由接收节点生成该随机种子。类似地,对于主光束命中点,可在节点3610-3612上计算环境遮挡(AO)和软阴影采样,而无需等待用于连续帧的原始点。此外,如果知晓光线集合将去往同一点光源,则可将标识该光源的指令发送到接收节点,该接收节点将会将该光源应用于该光线集合。作为另一示例,如果存在从单个点发射的N条环境遮挡光线,则可发送命令以从该点生成N个样本。
可将各种附加技术应用于有损压缩。例如,在一个实施例中,可采用离散化因子以将与BVH、基元和光线相关联的所有坐标值离散化。此外,可将用于诸如BVH节点和基元之类的数据的32位浮点值转换为8位整数值。在一个特定的实现方式中,以全精度存储光线分组的界限,但是各个光线点P1-P3作为至这些界限的经索引的偏移被传输。类似地,可生成多个局部坐标系,这些局部坐标系将8位整数值用作局部坐标。可使用全精度(例如,32位浮点)值对这些局部坐标系中的每个局部坐标系的原点的位置编码,从而有效地连接全局坐标系和局部坐标系。
以下是在本发明的一个实施例中采用的无损压缩的示例。在光线追踪程序内部使用的光线数据格式的示例如下:
Figure BDA0002293582330000621
Figure BDA0002293582330000631
取代发送用于所生成的每个以及每一个节点的原始数据,可通过对值分组并在可能的情况下使用适用的元数据创建隐式光线来对该数据压缩。
绑定光线数据并对光线数据分组
一个实施例将标志用于具有修饰符的共同数据或掩码。
Figure BDA0002293582330000632
例如:
RayPacket.rays=ray_1到ray_256
原点全都被共享
所有光线数据被打包,例外在于,仅单个原点跨所有光线被存储。为RAYPACKET_COMMON_ORIGIN(光线分组_共同_原点)设置RayPacket.flags(光线分组.标志)。当RayPacket被接收时被拆包时,从单个原点值填入原点。
原点仅在一些光线之间共享
除共享原点的光线之外,所有光线数据都被打包。对于具有多个唯一的共享原点的每个组,对标识操作(共享的原点)、存储原点并对哪些光线共享信息进行掩码的操作符进行打包。此类操作可在多个节点之间对任何共享值进行,这些共享值诸如材料ID、基元ID、原点、方向、法线等。
Figure BDA0002293582330000641
发送隐式光线
时不时地经常可在接收端上以用于生成光线数据的最少元信息导出光线数据。非常常见的示例是生成多个次级光线以随机地对区域采样。取代发送器生成次级光线、发送该次级光线且接收器对该次级光线操作,发送器可发送需要以任何从属性信息生成光线的命令,并且在接收端上生成该光线。在其中需要首先由发送器生成光线以确定将该光线发送到哪个接收器的情况下,生成该光线并且可发送随机种子以重新生成完全相同的光线。
例如,为了利用对面光源采样的64条阴影光线来对命中点采样,所有64条光线与来自相同计算N4的区域相交。创建具有共同原点和法线的RayPacket。如果希望接收器对所得到的像素贡献进行着色,则可发送更多数据,但是对于该示例,让我们假定我们希望仅返回光线是否命中另一节点数据。RayOperation被创建用于生成阴影光线操作,并且被指派有要采样的lightID的值以及随机数种子。当N4接收到光线分组时,它通过将共享原点数据填入所有光线并基于用随机数种子随机采样的lightID设置方向来生成经完全填充的光线数据,从而生成原始发送器生成的相同光线。当结果被返回时,仅用于每条光线的二进制结果需要被返回,这可由掩码对光线传递。
在该示例中发送原始的64条光线将使用104个字节*64条光线=6656个字节。如果返回光线也以它们的原始形式被发送,则这还被加倍到13312个字节。使用其中仅发送共同的光线原点、法线和具有种子和ID的光线生成操作的无损压缩,仅发送29个字节,其中8个字节为被相交的掩码返回。这导致约为360:1的需要通过网络被发送的数据压缩率。这不包括用于处理消息自身的开销,该开销将需要以某种方法标识,但是那由实现方式来决定。可进行其他操作以用于:从主光线的pixelID重新计算光线原点和方向;基于raypacket中的范围重新计算pixelID;以及用于重新计算值的许多其他可能的实现方式。可将类似操作用于所发送的任何单条光线或单组光线,包括路径追踪中的阴影、反射、折射、环境遮挡、相交、体积相交、着色、反弹反射等。
图37图示用于两个光线追踪节点3710-3711的附加细节,这两个光线追踪节点3710-3711执行光线追踪分组的压缩和解压缩。具体而言,在一个实施例中,当第一光线追踪引擎3730准备好将数据传输到第二光线追踪引擎3731时,光线压缩电路3720执行如本文中所描述的光线追踪数据的有损和/或无损压缩(例如,将32位的值转换为8位的值,将原始数据替换为用于重构数据的指令,等等)。通过局部网络(例如,10Gb/s、100Gb/s以太网网络)将经压缩的光线分组3701从网络接口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上的栅格化来渲染。在一个实施例中,该混合式实现方式用于实时光线追踪应用——其中等待时间是关键问题。
下文描述的光线遍历架构的一个实施例通过在使用专用硬件加速诸如BVH遍历和/或相交之类的关键功能的同时使用现有的单指令多数据(SIMD)和/或单指令多线程(SIMT)图形处理器来执行光线遍历的可编程着色和控制。在该实施例中,通过对以在遍历期间以及在着色之前在特定点处的所生成的着色器重新分组来改进对于不相干路径的SIMD占用。这使用在片上动态地将着色器排序的专用硬件来实现。通过将功能分割为在返回时执行的延拓(continuation)并且为了改善的SIMD占用在执行前对延拓重新分组来管理递归。
光线遍历/相交的可编程控制通过将遍历功能分解为内遍历和外遍历来实现,该内遍历可实现为固定功能硬件,该外遍历在GPU处理器上执行并启用通过用户定义的遍历着色器的可编程控制。通过在内遍历与外遍历之间的转变期间谨慎地截断内遍历状态来减少在硬件与软件之间传递遍历上下文的成本。
光线追踪的可编程控制可通过以下表A中列出的不同着色器类型来表达。针对每 种类型可存在多个着色器。例如,每种材料可具有不同的命中着色器。
着色器类型 功能
主要 发射主光线
命中 双向反射分布函数(BRDF)采样,发射次级光线
任何命中 计算α纹理化几何体的透射率
未命中 计算来自光源的辐亮度
相交 使定制形状相交
遍历 实例选择和变换
可调用 通用函数
表A
在一个实施例中,由API函数或相交电路发起递归光线追踪,该API函数命令图形处理器启动主色器的集合,该相交电路可生成针对主光线的光线-场景相交。这转而生成其他着色器,诸如、遍历着色器、命中着色器、或未命中着色器。生成子着色器的着色器也可从那个子着色器接收返回值。可调用着色器是可直接由另一着色器生成且也可将值返回给作出调用的着色器的通用函数。
图40图示图形处理器架构的实施例,该图形处理架构包括着色器执行电路4000和固定功能电路4010。通用执行硬件子系统包括多个单指令多数据(SIMD)和/或单指令多线程(SIMT)核/执行单元(EU)4001(即,每个核可包括多个执行单元)、一个或多个采样器4002、第一级(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核/EU4001上处理。在调度之前,排序电路4008可如本文中所述将光线排序到组中或排序到箱体中(例如,使具有类似特性的光线成组)。光线-BVH相交电路4005使用BVH容体执行光线的相交测试。例如,光线-BVH相交电路4008可将光线坐标与每一级的BVH进行比较以标识与光线相交的容体。
可使用着色器记录来引用着色器,该着色器记录是用户分配的结构,该用户分配的结构包括指向入口函数的指针、供应商专用的元数据、以及对于由SIMD核/EU 4001执行的着色器的全局变量。着色器的每个执行实例都与调用栈相关联,该调用栈可用于存储在父着色器与子着色器之间传递的变量。调用栈还可存储对在调用返回时被执行的延拓函数的引用。
图41图示所指派的栈的示例集合4101,该栈的示例集合4101包括主着色器栈、命中着色器栈、遍历着色器栈、延拓函数栈、以及光线-BVH相交栈(如所描述,其可由固定功能硬件4010执行)。新着色器调用可实现来自空闲栈池4102的新栈。可将调用栈高速缓存在本地L1高速缓存4003、4006以减少访问的等待时间。
在一个实施例中,存在有限数量的调用栈,每个调用栈具有分配在存储器的相邻区域中的固定的最大尺寸“S”。因此,栈的基址可直接通过栈索引(SID)被计算为基址=SID*S。在一个实施例中,当将工作调度至SIMD 核/EU 4001时,由调度器4007分配栈ID以及对栈ID解除分配。
在一个实施例中,主分派器4009包括图形处理器命令处理器,该图形处理器命令处理器响应于来自主机(例如,CPU)的分派命令来分派主着色器。调度器4007接收这些分派请求,并且该调度器在其可为每个SIMD通道分配栈ID的情况下在SIMD处理器线程上启动主着色器。从空闲栈池4102分配栈ID,该空闲栈池4102在分派命令的开始时被初始化。
执行着色器可通过将生成消息发送到消息传递单元4004来生成子着色器。该命令包括与着色器相关联的栈ID,并且还包括指向针对每个活跃SIMD通道的子着色器记录的指针。父着色器可为活跃通道仅发布一次该消息。在一个实施例中,在发布了针对所有相关通道的生成消息后,父着色器终止。
在SIMD核/EU 4001上执行的着色器也可使用具有为固定功能硬件预留的着色器记录指针的生成消息来生成诸如光线-BVH相交之类的固定功能任务。如所提及,消息传递单元4004将所生成的光线-BVH相交工作发送到固定功能光线-BVH相交电路4005,并直接将可调用着色器发送到排序电路4008。在一个实施例中,排序电路通过着色器记录指针对着色器分组以导出具有类似特性的SIMD批次。相应地,可由排序电路4008使来自不同父着色器的栈ID成组在同一批次中。排序电路4008将经分组的批次发送到调度器4007,该调度器4007从图形存储器2511或末级高速缓存(LLC)4020访问着色器记录,并且启动处理器线程上的着色器。
在一个实施例中,延拓被当作可调用着色器,并且也可通过着色器记录来引用当子着色器被生成并将值返回给父着色器时,指向延拓着色器记录的指针入栈到调用栈4101上。当子着色器返回时,延拓着色器记录从调用栈4101出栈,并且延拓着色器被生成。所生成的延拓经过与可调用着色器类似的排序单元,并且在处理器线程上被启动。
如在图42中所图示,排序电路4008的一个实施例通过着色器记录指针4201A、4201B、4201n对所生成的任务分组,以创建要着色的SIMD批次。来自不同的分派以及不同的输入SIMD通道的栈ID或上下文ID可被分组在经排序的批次中。在一个实施例中,分组电路4210使用内容可寻址存储器(CAM)结构4201来执行排序,该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示出可用于混合式遍历的加速结构,该加速结构是具有单个顶部层级BVH4300和若干底部层级BVH 4301和4302的两级树。在右边示出图形元素以指示内遍历路径4303、外遍历路径4304、遍历节点4305、具有三角形的叶节点4306以及具有定制基元的叶节点4307。
顶部层级BVH 4300中的具有三角形的叶节点4306可引用用于定制基元的三角形相交着色器记录,或引用遍历着色器记录。底部层级BVH4301-4302的具有三角形的叶节点4306可仅引用用于定制基元的三角形相交着色器记录。在叶节点4306内对引用的类型进行编码。内遍历是指每个BVH4300-4302内的遍历。内遍历操作包括光线-BVH相交的计算,跨BVH结构4300-4302的遍历被称为外遍历。可在固定功能硬件内高效地实现内遍历操作,而可利用可编程着色器以可接受的性能来执行外遍历操作。因此,本发明的一个实施例使用固定功能电路4010来执行内遍历操作,并使用着色器执行电路4000来执行外遍历操作,该着色器执行电路4000包括用于执行可编程着色器的SIMD/SIMT核/EU 4001。
注意,为简单起见,SIMD/SIMT核/EU 4001在本文中有时被简称为“核”、“SIMD核”、“EU”或“SIMD处理器”。类似地,光线-BVH遍历/相交电路4005有时被简称为“遍历单元”、“遍历/相交单元”或“遍历/相交电路”。当使用替代术语时,用于指定相应电路/逻辑的特定名称不改变如本文中所述的该电路/逻辑执行的根本性功能。
此外,虽然在图40中出于解释的目的被图示为单个组件,但是遍历/相交单元4005可包括不同的遍历单元和单独的相交单元,它们中的每一个都可实现在如本文中所述的电路和/或逻辑中。
在一个实施例中,当在内遍历期间光线与遍历节点相交时,遍历着色器被生成。排序电路4008通过着色器记录指针4201A-B,n对这些着色器分组以创建SIMD批次,该SIMD批次由调度器4007启动以用于在图形SIMD核/EU 4001上的SIMD执行。遍历着色器能以若干方式修改遍历,从而允许宽范围的应用。例如,遍历着色器能以较粗糙的细节级别(LOD)选择BVH或变换光线以启用严格的体变换。遍历着色器随后为所选择的BVH生成内遍历。
内遍历通过遍历BVH并计算光线-盒相交和光线-三角形相交来计算光线-BVH相交。通过将消息发送到消息传递电路4004以与着色器相同的方式生成内遍历,消息传递电路4004将对应的生成消息中继到光线-BVH相交电路4005,该光线-BVH相交电路4005计算光线-BVH相交。
在一个实施例中,用于内遍历的栈在本地被存储在固定功能电路4010中(例如,在L1高速缓存4006内)。当光线与对应于遍历着色器或相交着色器的叶节点相交时,内遍历被终止,并且内栈被截断。被截断的栈连同指向光线和BVH的指针被写入到存储器中由调用着色器指定的位置处,并且对应的遍历着色器或相交着色器被生成。如果在内遍历期间光线与任何三角形相交,则提供对应的命中信息作为对这些着色器的输入变量,如在以下代码中所示。由排序电路4008对这些所生成的着色器分组以创建用于执行的SIMD批次。
Figure BDA0002293582330000711
Figure BDA0002293582330000721
截断内遍历栈减少了使该内遍历栈流出到存储器的成本。本发明的一个实施例使用在“Restart Trail for Stackless BVH Traversal,High Performance Graphics(2010)(用于无栈BVH遍历的高性能图形的重新启动路线(2010))”第107-111页中描述的方法将栈截断为该栈顶部的少量条目,即42位的重新启动路线和6位的深度值。重新启动路线指示已在BVH内部采取的分支,并且深度值指示与最后的栈条目对应的遍历的深度。这是用于在稍后恢复内遍历的足够的信息。
当内栈为空且不再有要测试的BVH节点时,内遍历完成。在这种情况下,生成外栈处置器,该外栈处置器使外栈的顶部出栈,并且在外栈不为空的情况下恢复遍历。
在一个实施例中,外遍历执行主遍历状态机,并且以由着色器执行电路4000执行的程序代码实现。该程序代码在以下条件下生成内遍历查询:(1)当由命中着色器或主着色器生成新光线时;(2)当遍历着色器选择要遍历的BVH时;以及(3)当外栈处置器恢复针对BVH的内遍历时。
如在图44中所图示,在生成内遍历之前,在调用栈4405上分配供固定功能电路4010存储被截断的内栈4410的空间。到调用栈和内栈的顶部的偏移4403-4404被维持在遍历状态4400中,该遍历状态4400也被存储在存储器2511中。遍历状态4400还包括世界空间4401中的光线4401和目标空间中的光线4402以及用于最近相交基元的命中信息。
遍历着色器、相交着色器和外栈处置器全部都由光线-BVH相交电路4005生成。遍历着色器在发起针对第二级BVH的内遍历之前在调用栈4405上进行分配。外栈处置器是负责更新命中信息并恢复任何待决的内遍历任务的着色器。外栈处置器还负责当遍历完成时生成命中着色器或未命中着色器。当没有待决的内遍历查询要生成时,遍历完成。当遍历完成且发现相交时,生成命中着色器;否则生成未命中着色器。
虽然上文描述的混合式遍历方案使用两级BVH层级结构,但是本文中描述的本发明的实施例可使用任意数量的BVH层级,在外遍历实现方式上具有对应的改变。
此外,虽然在上述实施例中将固定功能电路4010描述为用于执行光线-BVH相交,但是其他系统组件也可实现在固定功能电路中。例如,上文描述的外栈处置器可以是可潜在地实现在固定功能BVH遍历/相交电路4005中的内部的(非用户可见的)着色器。该实现方式可用于减少所分派的着色器级的数量以及固定功能相交硬件4005与处理器之间的往返行程的数量。
在此描述的本发明的实施例使用用户定义的功能来启用可编程着色和光线遍历控制,这能以更高的SIMD效率在现有的以及未来的GPU处理器上执行。光线遍历的可编程控制启用若干重要的特征,诸如,程序性的实例化、随机细节层次选择、定制基元相交、以及惰性BVH更新。
用于包围体层级结构(BVH)修整加速器的装置和方法
如所提及,包围体层级结构(BVH)常用于改善对图形基元和其他图形对象执行操作的效率。BVH是基于几何对象的集合建立的层级式树结构。在该树结构的顶部是封围给定场景中的所有几何对象的根节点。各个几何对象被包裹在形成该树的叶节点的包围体中。这些节点随后被分组为多个小集合并被封围在更大的包围体内。这些节点转而以递归方式又被分组并被封围在其他更大的包围体中,最终产生具有单个包围体的树结构,该单个包围体由位于树顶部的根节点表示。包围体层级结构用于高效地支持对几何对象的集合的各种操作,这些操作诸如在光线追踪中使用的碰撞检测、基元剔除以及遍历/相交操作。
使光线遍历通过BVH以减少光线-基元相交的数量。例如,如果光线不通过BVH的根节点,则该光线不与由该BVH封围的基元中的任何基元相交,并且无需针对该光线相对于该基元集合的进一步处理。如果光线通过BVH的第一子节点而不是第二子节点,则无需针对由第二子节点封围的基元测试该光线。以此方式,BVH提供用于减少光线-基元相交的数量的高效机制。
修整BVH树是在基于光线追踪的渲染框架中处置动态内容的关键组成部分。本发明的一个实施例包括用于行进通过深度优先搜索(DFS)排序的包围体层级结构(BVH)并执行自底至顶的节点修整的电路和/或逻辑。具体而言,该实施例包括以特别高效的方式迭代通过存储在存储器中的深度优先排序的BVH树的新硬件单元,由此执行一个或多个节点的修整。
图45图示可在其上实现本发明的实施例的图形处理单元(GPU)4520的示例性光线追踪引擎4500。在一个实施例中,光线追踪引擎4500包括上文描述的光线追踪核3150中的一个或多个(参见例如图31和相关联的文本)。然而,本发明的根本性原理不限于该特定实现方式。
在一个实施例中,光线生成模块4502生成光线,遍历/相交单元4503通过包括多个输入基元4506的场景追踪这些光线。例如,诸如虚拟现实游戏之类的应用可生成命令流,从这些命令流生成输入基元4506。遍历/相交单元4503使光线遍历通过BVH 4505,标识光线与基元中的一个或多个基元相交所在之处的命中点。虽然被图示为单个单元,但是遍历/相交单元4503可包括耦合至不同的相交单元的遍历单元。这些单元能以电路、由GPU 3105执行的软件/命令、或它们的任何组合来实现。
在一个实施例中,BVH处理电路/逻辑4505生成BVH 4505,并且使用本文中描述的技术来修整BVH的节点。具体而言,BVH构建单元4508基于当前的输入基元集合4506来生成当前的BVH 4505。如所提及,BVH 4505包括节点的层级树,其中每个“父”节点封围多个“子”节点,这些“子”节点在层级结构中位于父节点下方。
节点修整单元4509包括用于如本文中所述行进通过深度优先搜索(DFS)排序的BVH并执行自底至顶的节点修整的电路和/或逻辑。具体而言,一个实施例对BVH 4505操作,其中使用深度优先顺序(DFS顺序)顺序地将树的内节点存储在存储器中。
图46A图示BVH 4505的示例,该BVH 4505包括内节点4610A-E以及叶节点4620。节点A处于层级结构的顶部,并且具有在该层级结构中直接处于其下方的子节点B和子节点C。节点B在该层级结构中具有在其下方的两个子节点——节点D和节点E,并且节点C-节点E中的每个节点都具有两个子叶节点4620。图46B图示如何根据DFS布局4630:节点A,节点B,节点D,节点E和节点C(从左向右,其中修整方向从右向左行进)将BVH 4505内的节点的该逻辑布置顺序地存储在存储器3198中。
每个内节点4610与包围体对应,包围体典型地是轴对齐的包围盒。在一个实施例中,在第一操作序列中,节点修整电路4509对指向叶数据的所有叶节点4620进行迭代,并且更新它们的包围体。在第二操作序列中,节点修整电路4509按逆序对内节点阵列进行迭代。在所图示的示例中,这意味着顺序C、E、D、B和A。在一个实施例中,节点修整电路4509通过合并每个内节点4610的子节点的包围体来按此顺序计算用于每个内节点4610的包围体。由于将节点存储在存储器4698中所按照的深度优先顺序,当按图46B中所指示的修整方向对内节点阵列进行迭代时,将正确地更新所有内节点4610。
在一个实施例中,节点修整电路4509在没有任何依赖关系的情况下并行地更新叶节点4620的包围体。按修整方向“从右向左”对内节点阵列的迭代可以是序列化过程,或者可通过以下操作并行地执行:将BVH树细分为多个较小的DFS排序的BVH子树,并且在这些子树中并行地执行“从右向左的”迭代。在对所有子树进行了迭代之后,需要附加的迭代步骤来修整这些独立的子树上的小树以完全修整整个BVH。在图46A中,例如可并行地处理包括节点C以及该节点C的两个叶节点的子树,其中修整节点E和节点D,随后修整节点B。随后可将经修整的节点B和节点C合并以便在最终经修整的BVH 4505中修整节点A。
在一个实施例中,节点修整电路4509通过以下操作来并行化:将BVH 4505分块,并基于块并行地处理处理电路的块。因此,并行性的量基于BVH处理电路4504的特定实现方式。
在图46C中图示根据本发明的一个实施例的方法。该方法可在本文中描述的架构上实现,但不限于任何特定的处理器或系统架构。
在4600处,基于当前场景的基元来建立初始BVH。例如,可由每个基元自身的包围盒围绕每个基元以创建叶包围盒,这些叶包围盒随后被合并以形成第一级内节点。随后合并内节点以形成第二级,以此类推。也可自顶至底来构建BVH,其中首先将层级结构中的顶部节点限定为围绕所有基元的包围体。随后将该顶部层级BVH细分为更小的基元集合以限定下一级节点,随后细分该下一级节点,以此类推,直到到达叶节点。无论如何建立BVH节点,都在4600中按DFS顺序将这些BVH节点存储在存储器中。
在4601处,使用BVH执行光线遍历。例如,通过BVH层级结构追踪根据场景而生成的光线。使基元相交,并且对应的命中点被标识并被存储到存储器。
在4602处,作出关于BVH修整是否正当的判定。这可例如基于对场景变化(例如,基元位置随时间的变化)的阈值评估来判定。如果场景已显著地变化,则可证明BVH修整是正当的,使得BVH更准确地反映位置以及基元之间的关系。
在4603处,如果证明了BVH修整操作是正当的,则在4603处执行通过指向叶数据的叶节点的迭代以更新叶节点的包围体。在4604处,对内节点执行按逆DFS顺序的迭代,从而沿层级结构向上将子节点合并为父节点,直到完成BVH的修整。由于按DFS顺序存储内节点,因此可通过按逆DFS顺序从存储器读取内节点数据来高度高效地执行修整操作。
在一个实施例中,如本文中所描述的光线追踪硬件单元(例如,光线追踪核3150)不但支持各个光线查询,而且支持更一般的查询。这可包括例如针对发现与光锥的所有相交以及发现n最近相交的查询。这些类型的查询对于过滤、仿真、碰撞检测和选择性BVH建立是非常有用的。
将参考图47、图48A、图48B描述根据本发明的一个实施例的更详细的装置和方法。注意,该实施例可在本文中描述的处理器和系统架构的上下文内实现,但是不限于任何特定的架构。
图47示出光线追踪硬件4700,该光线追踪硬件4700包括用于执行所描述的操作的电路和逻辑以及将光线追踪硬件4700耦合至存储器子系统(包括在存储器系统内采用的缓冲/高速缓存)的存储器接口4720。存储器接口一般包括用于代表光线追踪硬件4700来调度读取/写入的电路/逻辑。
在一个实施例中,存在待处理的BVH节点的先进先出(FIFO)队列4724,包括用于从后向前行进通过BVH并调度从存储器接口4720对BVH数据的读取并将数据存储在节点FIFO中的逻辑。在一个实施例中,该逻辑包括用于预取BVH数据以隐藏存储器等待时间的预取器。在修整过程期间被重新计算的信息(节点数据、用于相交过滤的累积掩码,等等)不必被存储在节点FIFO 4724中,该节点4724保留需要在更新过程期间被保存的信息。
此外,一个实施例包括新叶信息的FIFO队列4722,该新叶信息从输入缓冲器(例如,经由存储器接口4720访问的存储器的指定区域)读取并在FIFO队列4722内被分阶段(staged)。在一个实现方式中,FIFO队列4722包括用于调度来自叶输入缓冲器的读取的逻辑。按照与由节点FIFO 4722处理节点相同的顺序(即,从后向前)读取叶数据。如所提及,该配置起作用,因为按照经拓扑排序的顺序来将BVH节点布置在存储器中。
在一个实施例中,在每个循环中,使一个或多个节点从节点FIFO4724出栈4726。节点信息被转发到“打包和存储”框4710,使得该节点信息可与经由存储器接口4720被往回写入存储器的重新计算的信息组合。
在4730处,检查节点以判定该节点是叶节点还是内节点。如果在4730处的节点指示叶,则在4735处,使该叶的叶数据从叶数据FIFO 4722出栈。对于每个循环,使特定节点入栈4740到节点数据栈4750上,该节点数据栈4750是尺寸由最大支持的BVH深度确定的节点数据的栈。对于每个循环,读取最多b个节点并写入一个节点,其中b是BVH的分支因子。如果叶测试4730指示叶,则使来自叶FIFO 4735的节点数据入栈4740。否则,如下文所讨论,使节点数据合并4760的结果入栈。
在一个实施例中,如果叶测试4730指示非叶,则在4755处从节点数据栈4750读取b个节点的集合。节点合并逻辑4760将节点合并。在一个实施例中,合并逻辑4760确定输入节点的联合体(例如,完全封围所有输入的单个节点)。该框的输出被传递到压缩逻辑4760以便被压缩并被重新插入到节点栈4750上,使得当树遍历到达该节点的父节点时,该输出是可用的。如果4730指示叶节点,则该操作序列不活跃。
在一个实施例中,压缩逻辑4760使用用于将BVH存储在存储器中的离散化来压缩从节点数据栈4750出栈的子节点的集合。取决于所使用的特定编码,该计算可能需要由合并逻辑4760生成的经合并的节点,并且可直接处理各个子节点(如由将4755连接到4760的箭头所指示)。再一次地,如果4730指示叶节点,则这些操作不活跃。
打包和存储逻辑4710将来自4760的经压缩的节点数据与来自节点FIFO 4724的其他节点数据组合。例如,打包和存储逻辑4710可使用其所有输入信息来产生新BVH节点,该打包和存储逻辑4710随后经由存储器接口4720将其所有输入信息存储到存储器。如果4730指示叶节点,则打包和存储逻辑4710不活跃,因为假定在BVH更新期间不改变叶节点。
自底向上的BVH修整中的早期终止
当构建和/或修改诸如BVH之类的加速数据结构时,常评估表面积试探(SAH)。为了估计特定分割在BVH节点下生成分支的成本,应用SAH成本函数。该SAH函数不但标识高效的分割位置,而且它还被用作对于节点的细分的终止测试。例如,当分割节点的成本高于顺序地使所有基元相交的成本时,可创建叶节点。给定的加速结构的SAH“成本”被定义为追踪非终止的随机光线通过场景的成本。
在一个实施例中,在如本文中所描述的BVH修整期间,如果表面积被确定为是收缩的,则在特定层级(称为“当前层级”)终止层级式更新。这些技术可在如本文中所述的DFS排序的BVH修整中实现,但是它们不限于该特定实现方式。
上BVH层级中的任何节点将不需要即刻的包围盒更新来扩展。由此,节省了要遍历的BVH节点而无需进一步的修整。然而,BVH树质量会随时间恶化,因为上层级包围盒可能不再紧密地覆盖其子节点。因此,本发明的一个实施例使用附加阈值来控制早期终止决策,从而平衡质量与速度。
更具体地,对于具有自底至顶的包围盒更新的BVH修整操作存在至少两种情况:(a)由于节点的子节点的扩展或节点的子节点的位置的改变,需要扩大该节点;或者(b)由于节点的子节点的收缩,需要在尺寸上减小该节点。
图48A图示一个实施例,该实施例包括早期终止评估器4805,该早期终止评估器4805与节点修整电路/逻辑4509一致地工作以基于中间BVH修整数据4808来作出终止决策。在一个实施例中,中间BVH修整数据4808包括修整决策的结果以及用于当前节点的(多个)子节点的相关联的数据。对于该特定示例,认为子节点处于层级结构中的层级N+1,并且正针对终止进行评估的当前节点处于层级N。由此,中间BVH修整数据4808包括指示对这些子节点作出的调整(例如,对子节点坐标的最大值和最小值的调整)的数据。虽然出于解释的目的被图示为单独的数据集合,但是中间BVH修整数据4808可以仅仅是BVH 4505的已被修整的那部分。可在表或其他数据结构中跟踪该修整完成信息。
对于扩大节点(a),早期终止评估器4805的一个实施例不允许早期终止,从而确保沿从叶节点到根的路径的每个父层级都被检查。如果需要扩展,则节点修整电路/逻辑4509利用新容体生成BVH修整数据4808。否则,节点不再是“包围盒”,因为该节点的子节点/三角形可能在父节点的轴线对齐的包围盒的外部。
对于需要减小(b)的节点,节点修整电路/逻辑4509识别早期终止的机会。例如,对于节点(n),如果该节点(n)的子节点的空间占用正在收缩,则即便“n”可能不是如先前那样紧密地包围其子节点,但考虑到“n”自身的包围盒仍覆盖“n”的所有子节点的空间,“n”可无需收缩其自身的包围盒。在下一帧中的“n”的子节点可再次扩展或进一步收缩,其中取决于“n”的包围盒是否仍包含所有子节点,可要求或可不要求“n”改变其包围盒。
非紧密或“松散的”包围盒将不在光线遍历中产生错误,因为仍将评估“n”的子节点中的所有三角形。作为对照,非全覆盖盒由于错过对未由包围盒覆盖的三角形的评估将产生错误。
即便松散的包围盒将不产生错误,它也降低光线遍历性能,因为一条或多条光线“r”会进入节点“n”的松散的盒,如果包围盒是紧密的,则节点“n”的该松散的盒将不被进入。最终结果是,将处理这些光线,结果却发现不存在将与之相交的三角形(例如,由于这些光线在“n”的子节点的包围区域外部通过)。因此,对于需要减小(b)的节点,如果即便节点“n”的子节点在持续收缩,该节点“n”的包围盒也从未被更新,则光线遍历性能降级(即便结果仍然正确)。
为了解决该问题,早期终止评估器4805的一个实施例基于上述考量中的一项或多项来作出终止决策。例如,如果检测到对于阈值时间段或阈值周期数(或其他处理度量)性能在降级,则早期终止评估器4805实施情况(b) 中的包围盒更新。可使用各种不同类型的阈值。例如,阈值的一个实施例包括不具有对父节点的对应更新的子节点的某个数量的收缩的实例(例如,3个、4个、10个或任何其他数量个此类实例)。作为另一示例,子节点的空间占用相比父节点“n”包围盒空间的比率(例如,被子节点占用的父节点的百分比)。可由早期终止评估器4805评估各种其他参数以判定终止还是执行缩小。由早期终止评估器使用的数据可被存储在中间BVH修整数据4808内(例如,诸如在没有对父节点的更新的情况下对子节点的先前调整的数量)。
这些技术在本文中有时被称为“惰性”更新。早期终止评估器4805在情况(b)中最初推迟包围盒更新以保存来自BVH修整的性能命中。然而,当达到所指定的阈值时,早期终止评估器4805可指示节点修整电路/逻辑4509根据子包围盒来调整父包围盒。
对于行进通过DFS排序的BVH并执行自底至顶的节点修整的任何系统,在无需超出当前拜访的BVH层级的更新的情况下,早期终止防止进一步访问和测试层级结构中的高层级节点。该特征使硬件执行具有功率降低和性能增强的益处,而不改变硬件BVH修整的结果。
在图48B中图示根据本发明的一个实施例的方法。该方法可在本文中描述的各种架构上实现,但不限于任何特定的处理器或系统架构。
在4850处,发起BVH修整操作。在4851处,第一/下一BVH节点基于用于其子节点的数据来评估。如所提及,该数据可指示子节点是否已被扩大、缩小或移动。如在4852处所判定,如果由于当前BVH节点的子节点已移出该当前BVH的当前边界(例如,通过移动或扩大)而需要扩大当前BVH节点,则在4586处,不终止BVH修整并允许BVH修整继续进行。
然而,如果BVH修整操作将缩小BVH节点,则在4853处,执行评估以判定鉴于成本和益处该BVH操作是否被证明是正当的。如所提及,成本包括针对修整操作所利用的时间和处理资源。益处包括更准确、更高效的BVH。
如所提及,阈值诸如:不具有对父节点的对应更新的某个数量的子节点收缩的实例(例如,3个、4个、10个或任何其他数量个此类实例)。作为另一示例,可使用子节点的空间占用相比父节点“n”包围盒空间的比率(例如,被子节点容体占用的父节点的百分比)。然而,应当注意,可评估能够表达成本和益处的任何变量集。
如果在4853处证明BVH修整是正当的,则在4854处,根据BVH节点的子节点来缩小该BVH节点。如果在4855处判定了仍有附加的节点要评估,则在4856处,选择下一节点,并且过程返回到4851。
基于硬件的光线追踪查询
在本发明的一个实施例中,遍历/相交电路4503包括用于在遍历BVH 4505时执行更多扩展的节点-相交变体的电路和/或逻辑。例如,与将支持限于光线查询(例如,对照BVH节点测试单条光线)不同,遍历/相交电路4503的一个实施例支持可配置查询,诸如,还支持诸如以下各项的查询:盒相对于BVH节点(b);球体相对于BVH节点(c);锥体相对于BVH节点;点相对于BVH节点(e)。
以此方式将遍历/相交电路4503扩展为支持更一般的查询对于各种功能是有用的。例如,通用查询架构可被配置成发现与光锥的所有相交,或配置成发现n最近相交。这些类型的查询对于过滤、仿真、碰撞检测和选择性BVH建立是非常有用的。
图49图示包括以下各项的不同示例:常见情况4901、盒-BVH节点测试4901、球体-BVH节点测试4903、锥体-BVH节点测试4904、以及点-BVH节点测试4905。可设计各种其他查询来确定不同形状与BVH之间的重叠。在该实施例中,通过将各种形状的坐标数据与BVH节点中的每个BVH节点的坐标和界限进行比较来遍历BVH 4900A-4900J的节点,最终到达叶节点4900J。遍历在此由移动通过节点4900A、节点4900B、节点4900E、节点4900I和叶节点4900J的点线箭头指示。假定该遍历/查询利用盒来执行,则可将该盒的坐标(例如,x、y和z的最小/最大值)与BVH节点中的每个BVH节点的边界坐标进行比较,以向下过滤到由该盒体相交的最小尺寸的节点。可为可具有不同坐标集的其他形状中的每个形状执行该相同的过程。例如,点4905可具有单个的x,y,z坐标,而球体可具有中心坐标和半径(其可用于确定要与BVH节点比较的最小/最大坐标)。
如在图50中所图示,该实施例的遍历/相交单元5003包括多形状遍历/相交电路5000,该多形状遍历/相交电路5000用于评估由形状处理电路/逻辑5001提供的每个形状以及BVH节点的坐标以识别相交。
在一个实施例中,扩展的光线追踪引擎5010还包括查询处理电路/逻辑5004,该查询处理电路/逻辑5004用于处理执行诸如N最近邻查询之类的查询所需的状态/相交数据5020,这需要存储用于N个相交的相交信息。
此外,在一个实施例中,光线追踪引擎5010将某些类型的查询转移到可编程执行单元(EU)5051-5053,N。具体而言,可由EU高效地处理的某些查询被发送到调度器5060,该调度器5060在EU 5051-5053,N上调度工作。这可包括例如用于每当光线追踪引擎5010到达BVH叶就返回盒/球体/锥体中所包含的所有基元的查询。EU 5051-5053,N随后可执行程序代码,该程序代码处理所指定的形状内所包含的几何体。
利用位掩码进行的网格基元处理
本发明的一个实施例包括使一条或多条光线与N x M个三角形(具有(N+1)x(M+1)个顶点)的固定尺寸的网格相交。每个网格都与N x M位掩码相关联或包含N x M位掩码,其中,每个位指示是否对对应的三角形执行光线-三角形相交测试。在位掩码中的其对应位未被置位的三角形将被忽略而不用于后续的光线追踪操作。
图51图示此类网格基元5101A的一个示例,该网格基元5101A包括多个三角形以及位掩码5103,该位掩码5103包含与每个三角形相关联的位。经置位的位值(1)意味着该三角形将用于后续的光线追踪操作,而未被置位的位值(0)意味着该三角形将被忽略而不用于后续的光线追踪操作。网格基元5101B示出在其中忽略/丢弃三角形集合5102的结果。由此,当在网格基元5101B中测试光线5102与三角形的相交时,不处理与位掩码5103中的值0相关联的三角形。
用小的固定尺寸的网格来表示密集且规律的三角形状几何体是非常存储器高效的,因为无需存储三角形邻近信息(三角形索引)(即,由于网格三角关系由规则的顶点布局隐式地提供)。执行光线-网格基元相交测试仅要求对网格中的所有三角形进行迭代,并要求(顺序地或并行地)执行光线-三角形相交测试。
图52图示在其中网格基元生成电路5201生成包括多个三角形(或其他形状)和相关联的位掩码的网格基元的实施例。网格基元相交电路5200如本文中所述根据位掩码来处理网格基元。例如,在一个实施例中,网格基元相交电路忽略与位掩码中的未置位的位(即,设置为0的位)相关联的三角形并为其余三角形执行相交测试。
在一个实施例中,BVH处理电路5207基于位掩码高效地对每个网格基元中的三角形生成BVH 4605(即,忽略与未置位的位掩码位相关联的三角形)。网格基元相交电路随后可使用BVH 4605来提高通过首先使(多条)光线遍历通过BVH来执行的光线-网格相交测试的效率。然而,要注意,为了符合本发明的根本性原理,无需特定的BVH生成技术。
层级式光束追踪器
本发明的一个实施例包括用于实现层级式光束追踪器的电路/逻辑。如上文所讨论,当与追踪多条单独光线相比较时,光束追踪器对于高度一致的光线分布实现显著更高的光线追踪性能。此外,光线追踪允许动态地自适应地在光束内生成光线,由此消除对于将光线数据存储在存储器中的需求。
在一个实施例中,层级式光束追踪器接收光束作为输入,并且使该光束遍历通过BVH。可使用各种表示来表示光束,包括但不限于包围平面和区间算术。
如果光束不与给定的BVH节点相交,则该光束内的所有光线将都不与对应的BVH子树相交。由此,跳过对于这些子树的遍历。在图53中图示出包括多个BVH节点5300A-5300G的示例BVH层级结构。节点5300D-5300G是叶节点(在层级结构的底部),并且节点5300A-5300C是内节点。
图54A图示当使光束5400遍历通过不同节点5300A-5300G时的不同的潜在结果。具体而言,如在5401中所指示,如果光束5400不与节点5300C相交,则该光束中没有光线将与对应的BVH子树相交,因此跳过针对该子树的遍历(即,节点5300C及其叶节点5300F-5300G)。
如在5402处所指示,如果光束与节点5300B相交,则光束5400在层级结构上被细分为N个子光束5410,在该示例中N=4,由四个四分体所指示。类似地,与节点5300B相交的子光束5410可进一步在层级结构上被细分。在该特定示例中,仅左上方的子光束与节点5300B相交。因此,如5403处所示,仅一个相交的子光束被进一步细分为N个子子光束5411。
在5404处,假定节点5300E是BVH叶节点5300E。在一个实施例中,当到达叶节点或叶节点不能够被进一步细分时,在光束内自适应地生成样本位置,这些样本位置对应于各条光线,图示出其中三条光线。在这三条光线中,两个被示出为与叶节点5300E相交,并且一条未命中叶节点。在一个实施例中,随后针对叶节点内的基元来测试这两条相交的光线(例如,使用利用那些光线以及在BVH叶节点5300E中被参考的基元的光线-基元相交测试)。
注意,实际的光线数据不必被存储,而是可以使用光束数据和光束5400内的样本点位置在运行中(on the fly)被生成。在一个实施例中,使用允许更好的采样分布的准蒙特卡洛(QMC)技术生成光束内的样本。此外,在一个实现方式中,遍历/相交硬件5003跟踪针对每个子光束的光线相交距离的最小/最大间隔,这允许基于深度进行BVH节点剔除。
如在图54B中所图示,在一个实施例中,遍历/相交硬件5003包括用于执行如本文中所述的层级式光束遍历技术的基于层级式光束的遍历电路5420。由基于层级式光束的遍历电路使用的数据5424最初由光束生成器5422生成,并在遍历操作期间被更新。如在先前实施例中那样,如本文中所述,由BVH处理电路5207生成的BVH/节点数据4605也由基于层级式光束的遍历使用。例如,如参照图54A所描述,当光线与BVH节点相交时,基于层级式光束的遍历电路5420将该光束细分为第一集合的子光束。与BVH节点相交的这一条或多条子光束随后被标识,并进一步被细分为附加的子光束。基于层级式光束的遍历电路5420继续细分连续相交的子光束,和/或继续沿BVH层级结构向下遍历,直到到达叶节点。当到达叶节点时,生成子光束内的各条光线。随后针对叶节点中的基元测试与叶节点相交的那些光线,并且遍历/相交电路生成相交结果。
在图54C中图示根据一个实施例的方法。该方法可在上文所描述的系统架构的上下文内实现,但并不限于任何特定的系统或处理器架构。
在5451处,生成(或对后续迭代更新)光束数据和BVH节点数据。如果所生成的光束不与当前BVH节点相交,则在5456处,跳过针对该BVH 节点的遍历,并且选择层级结构中的另一BVH节点(例如,共享同一父节点的另一子节点)。
如果光束与BVH节点相交,则在5453处,该光束在层级结构上被细分为N个子光束以针对BVH节点进行测试,和/或进一步遍历BVH层级结构以识别新BVH节点。可进一步细分被发现与当前BVH节点相交的每个子节点,直到在5454处到达叶节点。在此,在相交的子光束内生成M条光线,并且在5455处,为与叶节点相交的M条光线中的任一条光线执行光线-基元相交测试。随后为任何检测到的光线-基元相交生成相交数据。
用于多GPU环境的页高速缓存
本发明的一个实施例包括存储器管理硬件单元,该存储器管理硬件单元用于管理多GPU环境中的存储器页迁移,从而允许所有GPU高效地在同一存储器区域内工作。在一些实现方式中,此类区域跨越多个物理GPU存储器。例如,系统中的GPU核和CPU核全部可共享跨多个物理GPU和CPU核存储器被分配的同一虚拟地址空间。
所提出的存储器管理硬件单元管理跨多个GPU/CPU处理实体的页迁移。这些实体可包括对处理资源的任何逻辑的或物理的细分或分组,其中的一些示例包括小芯片、GPU片、CPU核、GPU/CPU切片、完整的GPU/CPU、或GPU/CPU的组,它们全部共享共同的虚拟地址空间。
在一个实施例中,每个处理实体可访问位于另一处理实体的本地存储器中的存储器。在一个实施例中,此类访问可触发从在一个GPU/CPU实体本地的第一物理存储器到在另一GPU/CPU实体(例如,访问页的GPU/CPU实体)本地的第二物理存储器的页迁移/转移。
图55A图示示例,该示例示出与GPU0相关联的GPU0存储器5500、与GPU1相关联的GPU1存储器5501、以及与GPU M相关联的GPU M存储器5502。当一个GPU访问位于另一GPU的存储器中的存储器时,图形MMU5512管理该转移,同时保持对哪个页已被转移到哪个GPU的跟踪。MMU 5512还将被最频繁地访问的页的内容高速缓存在MMU管理的GPU高速缓存5510内,由此避免昂贵的GPU-GPU转移。
页的尺寸典型地将在4k与多个MB之间变化。在一个实施例中,当向页高速缓存5510写入时,当执行该写入时,仅允许单个GPU“拥有”该页,同时从页的读取被复制到许多GPU实体上的本地存储器(例如,GPU存储器5500-5502)。
图55B图示出在其中相同的页一致性机制被扩展到包括CPU核的其他系统级代理的一个实施例。虽然仅图示出单个CPU核存储器(核0),但是相同的原理可扩展至所有其他核以及所有其他系统代理。
如果MMU 5512的一个实施例检测到对存储器的某种访问模式,则它执行对MMU管理的页高速缓存5510的异步页预取。如在图55C中所图示,MMU 5512的该实施例包括页预取器5550,该页预取器5550基于检测到的访问模式将页从系统存储器5555预取到系统MMU管理的页高速缓存5510。页预取器5550的一个实施例包括访问模式检测电路/逻辑5551,该访问模式检测电路/逻辑5551用于检测所指定类型的访问模式并在这些访问模式中的一个访问模式被检测到时通知页预取器5550。
作为示例而非限制,访问模式检测电路/逻辑5551的一个实施例观察并评估对于从GPU和/或CPU核生成的数据请求的本地存储器未命中的模式。基于该预测,访问模式检测电路/逻辑5551基于诸如在其中地址序列被分开恒定的跨步值的递归模式作出关于未来未命中的预测。如果此类模式被检测到,则页预取器5550的一个实施例尝试自动地预取未来页。
当预取时,页预取器5550的一个实施例在各个积极性层级(例如,经由控制寄存器值)是可配置的。例如,第一值可指示无预取,第二值可指示预取多达N个页,第三值可指示预取多达M个页(其中M>N),等等。
在一个实施例中,预取也可由诸如预取指令之类的显式的用户编程来调用,该预取指令使MMU 5512在用户预期不久要访问附加的页时异步地预取那些页。
用于包括硬件预排序和并行的可重配置聚类阵列的BVH构建的统一架构
已开发出大量各种各样的BVH构建技术来实现对于光线追踪应用的高遍历性能。最近,已出现朝向基于聚类的BVH构建技术的改变,基于聚类的BVH构建技术涉及小树(树的小的子分段)的局部优化或基元/节点的小子集的聚类。许多现有构建器使用包括以下各项的该通用方法:小树重构算法、聚合聚类算法、聚合小树重构BVH(ATRBVH)算法、k均值聚类算法、以及并行局部排序聚类(PLOC)算法。
这些方法对于硬件实现方式是具有吸引力的,因为在小占用面积的局部优化中固有的数据局部性产生较高的高速缓存性能。可利用该高速缓存性能以利用大量并行的计算单元,从而产生可缩放的设计以及高BVH构建吞吐量。
当前的BVH构建解决方案是完全可编程的解决方案(例如,在CPU/GPU上编程)或是完全固定功能的。可编程解决方案允许实现各种算法,但是缺乏固定功能硬件的效率。相比之下,固定功能设计极其高效,但是仅允许实现单个算法。
对BVH构建的基于聚类的方法产生可被利用的该类型算法之间的显著的共性。具体而言,每个算法需要两个主要过程:1)快速排序以定位几何体的一致的局部子集;以及2)大量的小聚类任务,其旨在当合并节点或节点组时减小某个“距离”或“成本”函数。前述算法在后一过程中大多是不同的,从而导致对这些算法的类似的硬件要求。
本发明的一个实施例包括灵活的BVH构建架构,该灵活的BVH构建架构适应各种算法,并允许硬件BVH建立随时间的算法改进,同时利用固定功能和可重配置硬件的性能和效率。虽然本发明的实施例聚焦BVH实现方式,但是本发明的根本性原理可实现在任何空间加速结构和/或层级式加速结构上。
图56图示支持基于聚类的BVH建立的本发明的一个实施例。该实施例包括:中央控制器5630,诸如微控制器或核,用于单元的一般定序、协调,并用于执行重配置任务;节点(重新)注入单元5620,用于确保在需要时所需的节点数据可用于处理资源;以及几何一致性引擎5610,用于执行BVH分割操作并生成节点。该实施例包括在并行执行集群5690内的执行资源的集合,包括节点取出单元5650-5652、距离/成本分析电路5660-5662、以及节点合并/累积电路5670-5672。
几何一致性引擎5610的一个实施例包括:快速排序/重排序电路5612,用于执行几何体的快速排序和重排序;以及三/四分器5611,用于将从末级高速缓存(LLC)5605读取的几何体细分为小的局部组,从而形成BVH的叶节点。
控制器5630控制被认为用于合并的节点的顺序和群,并且节点(重新)注入单元5620确定如何“重新注入”新创建的内部节点以便以层级方式继续聚类过程。在一个实施例中,高带宽SRAM阵列5603存储由并行执行集群5690处理的活跃节点数据。
在一个实施例中,几何一致性引擎5610经由LLC 5605从存储在主存储器中的中间BVH获取集群。节点(重新)注入单元5620确定哪些节点要添加到聚类过程的、由并行执行集群5690执行的当前工作集。高带宽SRAM阵列5603允许高吞吐量的并行执行。
在一个实施例中,可编程节点取出单元5650-5652确定提交节点以进行评估所按照的顺序。距离/成本分析电路5660-5662执行对各种聚类成本函数的灵活的评估,各种聚类成本函数涉及将节点或节点组合并为BVH的新的内部节点的影响的“距离”或“成本”。在一个实施例中,确定所得的子树的SAH成本或节点之间的欧几里得距离。然而,本发明的根本性原理不限于该特定的实现细节。节点合并/累积单元5670-5672从用于之后的节点的多个替代节点之间选择,以基于由距离/成本分析电路5660-5662提供的所计算的距离/成本值从当前的群合并。
在一个实施例中,用于该架构的操作序列开始于:几何一致性引擎5610将输入几何体排序为用于聚类过程的初始叶节点或初步的层级结构。节点(重新)注入单元5620(可编程数据分布器)确定哪些叶节点要用于填充高带宽SRAM阵列5603。可编程节点取出单元5650-5652以任意顺序从SRAM阵列取出节点。节点(重新)注入控制器5620和节点取出单元5650-5665在对于聚类的考量下共同确定节点群。在一个实施例中,这些组件经由内部信令合作以使SRAM缓冲器5603中的节点的写入和读取同步。
以灵活的顺序将活跃节点提交到距离/成本函数评估器5660-5662以指派用于合并节点的成本。该成本和被参考的节点被发送到节点合并/累积单元5670-5672,这些节点合并/累积单元5670-5672判定是否要完成节点的合并,以将它们往回传递到节点(重新)注入单元5620。以此方式合并节点可意味着:将节点放置在输出层级结构中;或者仅推测性地合并节点并重新注入到SRAM5603中的节点群,用于对合并操作序列的进一步评估。
在一个实施例中,经由节点反馈环路将已被合并的节点发送到节点重新注入单元5620。节点重新注入单元5620随后可确定如何用新创建的内部(合并的)节点或来自几何一致性引擎5610的新鲜节点来重新填充SRAM阵列5603。
在一个实施例中,使用可重配置硬件来实现距离/成本函数5660-5662和节点合并/累积单元5670-5672,因为这些过程可能是计算密集的(例如,当合并节点时计算表面积试探)。例如,在一个实施例中使用FPGA或类似的拓扑。
图57图示可用于实现并行执行集群5790的组件的可重配置单元的一个实施例。所图示的实施例包括通用可重配置结构5795以及各种专用功能单元(SFU)5791-5792,SFU5791-5792可实现诸如欧几里得距离、组合表面积、组合体积、或表面积试探(SAH)值之类的成本函数。这些单元还可包含常规ALU 5793和暂存器存储器5794,该暂存器存储器5794允许维持历史,诸如,维持“目前为止最佳”值,或维持多个要合并的运行“候选集群”。用于实现距离/函数电路5760-5762和节点合并/累积电路5770-5772的可重配置单元在SFU 5791-5792、ALU 5793和/或暂存器5794中可不同,以使它们专用于它们各自的任务。例如,节点合并/累积电路5770-5772可能更多地获益于较大的暂存器5794和更多比较操作器。
在图58中图示根据一个实施例的方法。该方法可在本文中描述的各种系统和处理器架构上实现,但不限于任何特定的架构。
在5801处,对几何体排序以生成叶节点。在5802处,基于经排序的顺序将节点提交到输入存储器(例如,高速SRAM或其他高速存储器类型)。在5803处,并行执行集群并行地从输入存储器取出节点,并且并行地提交节点以进行评估。在5804处,为不同组合的节点并行地执行距离/成本分析(例如,评估不同的潜在的节点分组)。在5805处,基于距离/成本分析的结果将节点合并为层级结构中的下一级节点。
如果仍有来自当前层级的附加节点(例如,对于第一级为叶节点),则过程返回到5802。否则,过程移动到5807。移动到5807,如果还未到达层级结构的顶部,则过程再次返回到5802以用于下一级节点(例如,由从第一级合并节点的过程的第一迭代生成的节点)。一旦在5807处到达层级结构的顶部层级,过程就结束(即,并且当前BVH是完整的)。
命中着色器和相交着色器的推测性执行
本发明的一个实施例包括支持命中着色器和相交着色器的推测性执行的可编程多指令多数据(MIMD)光线追踪架构。具体而言,一个实施例聚焦于降低上文中参照图40描述的可编程SIMD/SIMT核/执行单元4001与混合式光线追踪架构中的固定功能MIMD遍历/相交单元4005之间的调度和通信开销。在下文中描述命中着色器和相交着色器的多个推测性执行方案,它们可从遍历硬件在单个批次中被分派,从而避免若干遍历和着色往返行程。一个实施例包括用于实现这些技术的专用电路。
本发明的实施例在其中光线遍历查询期望多个命中着色器或相交着色器的执行的用例中是特别有益的,该光线遍历查询在没有专用硬件支持的情况下实现时将产生显著开销。这包括但不限于最近k命中查询(启动针对k最近相交的命中着色器)和多个可编程相交着色器。
在此描述的技术可实现为对在图40中图示(并参照图40-图44描述)的架构的扩展。具体而言,本发明的当前实施例在该架构上构建,并且具有用于改进上述用例的性能的增强。
混合式光线追踪遍历架构的性能限制是启动来自执行单元的遍历查询的开销以及调用来自光线追踪硬件的可编程着色器的开销。当在同一光线的遍历期间调用多个命中着色器或相交着色器时,该开销生成可编程核4001与遍历/相交单元4005之间的“执行往返行程”。这也向排序单元4008施加额外的压力,排序单元4008需要从多个单独的着色器调用提取SIMD/SIMT一致性。
光线追踪的若干方面需要可通过在上文表A中列举的不同着色器类型来表达(即,主要、命中、任何命中、未命中、相交、遍历、以及可调用)。针对每种类型可存在多个着色器。例如,每种材料可具有不同的命中着色器。在当前的
Figure BDA0002293582330000911
光线追踪API中定义这些着色器类型中的一些。
作为简要回顾,由API函数发起递归光线追踪,该API函数命令GPU启动可生成用于主光线的光线-场景相交的主着色器集合(以硬件和/或软件实现)。这转而可生成其他着色器,诸如,遍历着色器、命中着色器、或未命中着色器。生成子着色器的着色器也可从那个着色器接收返回值。可调用着色器是可直接由另一着色器生成且也可将值返回给作出调用的着色器的通用函数。
光线遍历通过遍历包围体层级结构(BVH)中的节点并使这些节点相交来计算光线-场景相交。近期的研究已显示,使用更适合于固定功能硬件的技术(诸如,降低精度的算术、BVH压缩、逐光线状态机、专用相交流水线和定制高速缓存)可将计算光线-场景相交的效率改善超过一数量级。
在图40中示出的架构包括在其中SIMD/SIMT核/执行单元的阵列4001与固定功能光线追踪/相交单元4005相互作用以执行可编程光线追踪的此类系统。可编程着色器被映射到执行单元/核4001上的SIMD/SIMT线程,其中,SIMD/SIMT利用、执行和数据一致性对于最优性能是关键的。出于诸如以下各项的各种理由,光线查询常打破一致性:
·遍历发散:BVH遍历的持续时间在有助于异步光线处理的光线之间高度地变化。
·执行发散:从相同SIMD/SIMT线程的不同通道生成的光线会导致不同的着色器调用。
·数据访问发散:例如,命中不同表面的光线对不同的BVH节点和基元采样,并且着色器访问不同的纹理。各种其他场景可导致数据访问发散。
在一个实施例中,固定功能光线追踪/相交单元4005通过单独地且乱序地处理每条光线克服了前两项难题。然而,那打破了SIMD/SIMT组。因此,排序单元4008负责形成着色器调用的新的、一致的SIMD/SIMT组,用于再次被分派到执行单元。
容易看出此类架构与直接在SIMD/SIMT处理器上的基于纯软件的光线追踪实现方式相比的益处。然而,存在与SIMD/SIMT核/执行单元(在本文中有时简称为SIMD/SIMT处理器或核/EU)与MIMD遍历/相交单元4005之间的消息传送相关联的开销。此外,排序单元4008可能无法从不一致的着色器调用提取完美的SIMD/SIMT利用。
本发明的一个实施例标识了在其中着色器调用在遍历期间可以特别频繁的用例。描述了用于混合式MIMD光线追踪处理器的增强以显著地降低核/EU 4001与遍历/相交单元4005之间的通信的开销。当找到k最近相交并实现可编程相交着色器时,该实施例可以是特别有益的。然而,要注意,在此描述的技术不限于任何特定的处理场景。
下文中提供核/EU 4001与固定功能遍历/相交单元4005之间的光线追踪上下文切换的高层级成本的总结。性能开销中的大多数性能开销由每当着色器调用在单光线遍历期间是必要时的这两个上下文切换导致。
本发明的实施例可以包括以上已经描述的各步骤。这些步骤可以被具体化为机器可执行指令,这些机器可执行指令可以用于使通用或专用处理器执行这些步骤。替代地,这些步骤可以由包含用于执行这些步骤的硬接线逻辑的特定硬件组件来执行,或者由经编程的计算机组件和定制硬件组件的任何组合来执行。
如本文中所描述,指令可以指诸如专用集成电路(ASIC)的硬件的特定配置,该专用集成电路被配置用于执行某些操作或者具有预定功能或存储在被具体化为非暂态计算机可读介质的存储器中的软件指令。因此,可以使用在一个或多个电子设备(例如,端站、网络元件等)上存储并执行的代码和数据来实现附图中示出的技术。此类电子设备使用计算机机器可读介质(在内部和/或通过网络与其他电子设备)存储和传达代码和数据,计算机机器可读介质诸如,非暂态计算机机器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪存设备;相变存储器)以及暂态计算机机器可读通信介质(例如,电、光、声或其他形式的传播信号——诸如载波、红外信号、数字信号等)。
此外,此类电子设备典型地包括耦合到一个或多个其他组件(诸如,一个或多个存储设备(非暂态机器可读存储介质)、用户输入/输出设备(例如键盘、触摸屏和/或显示器)、以及网络连接)的一个或多个处理器的集合。处理器的集合和其他组件的耦合典型地通过一个或多个总线和桥接器(也被称为总线控制器)。承载网络通信量的存储设备和信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定电子设备的存储设备典型地存储用于在该电子设备一个或多个处理器的集合上执行的代码和/或数据。当然,可以使用软件、固件、和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。贯穿此具体实施方式,出于解释的目的,阐述了众多特定细节以便提供对本发明的透彻理解。然而,对于本领域的技术人员而言将明显的是,可以在没有这些特定细节中的一些的情况下实践本发明。在某些实例中,未详细地描述公知结构和功能以避免使本发明的主题模糊。因此,本发明的范围和精神应根据所附权利要求来判定。

Claims (25)

1.一种装置,包括:
排序单元,用于对图形图像的基元排序,所述基元用于被分组,每一组用于形成层级式加速结构的第一级节点;
并行可重配置聚类阵列,用于构建所述层级式加速结构,所述并行可重配置聚类阵列包括多个处理集群,每个集群包括:
并行效率分析电路,用于为所述层级式加速结构的下一级评估所述第一级节点的不同分组,以确定所述不同分组的效率值;以及
节点合并电路,用于基于所述效率值合并所述第一级节点以形成第二级节点。
2.如权利要求1所述的装置,进一步包括:
节点注入电路/逻辑,用于将所述第二级节点往回注入所述并行可重配置聚类阵列,
其中,所述并行效率分析电路用于评估所述第二级节点的不同分组以确定所述不同分组的效率值,并且
其中,所述节点合并电路用于基于所述效率值来合并所述第二级节点,以形成用于所述层级式加速结构的下一级的第三级节点。
3.如权利要求2所述的装置,其中,所述排序单元进一步包括:
分割电路/逻辑,用于基于所述图形图像中的空间局部性来分割所述基元;以及
叶节点生成电路/逻辑,用于基于所述分割来形成所述第一级节点。
4.如权利要求1或3所述的装置,进一步包括:
节点注入电路/逻辑,用于将所述第一级节点存储到存储器供由所述并行可重配置聚类阵列访问;以及
多个取出单元,每个取出单元都与所述多个并行处理集群中的一个并行处理集群相关联,其中,每个取出单元用于取出所述第一级节点中的一个或多个第一级节点,用于由该取出单元的集群的并行效率分析电路和所述节点合并电路处理。
5.如权利要求1或4所述的装置,其中,所述层级式加速结构包括包围体层级结构BVH。
6.如权利要求1或4所述的装置,其中,所述并行效率分析电路用于实现成本函数或距离函数以评估所述第一级节点的不同分组。
7.如权利要求6所述的装置,其中,所述成本函数或距离函数包括表面积试探SAH函数和/或欧几里得距离函数。
8.如权利要求1或7所述的装置,其中,所述并行可重配置聚类阵列的处理集群各自包括:
一个或多个可重配置单元,可重配置单元包括多个可重配置功能单元以及将所述多个可重配置功能单元互连的可重配置通信结构。
9.如权利要求8所述的装置,其中,可重配置单元进一步包括:
暂存器存储器,用于存储与所述第一级节点和/或所述第二级节点有关的数据;以及
算术逻辑单元ALU,通过所述可重配置结构耦合至所述暂存器存储器。
10.一种方法,包括:
对图形图像的基元排序;
将所述基元分组以形成层级式加速结构的第一级节点;
为所述层级式加速结构的下一级评估所述第一级节点的不同分组,以确定所述不同分组的效率值;以及
基于所述效率值合并所述第一级节点,以形成所述层级式加速结构的第二级节点,
其中,评估所述第一级节点的操作和合并所述第一级节点的操作在并行可重配置聚类阵列的多个并行处理集群上被并行地执行。
11.如权利要求10所述的方法,进一步包括:
评估所述第二级节点的不同分组以确定所述不同分组的效率值;以及
基于所述效率值合并所述第二级节点,以形成用于所述层级式加速结构的下一级的第三级节点,
其中,评估所述第二级节点的操作和合并所述第二级节点的操作在所述多个并行处理集群上被并行地执行。
12.如权利要求11所述的方法,其中,排序操作进一步包括基于所述图形图像中的空间局部性来分割所述基元,并且其中,基于所述分割来执行对所述基元的所述分组。
13.如权利要求10或12所述的方法,进一步包括:
将所述第一级节点存储到存储器供由所述并行可重配置聚类阵列访问;以及
由每个并行处理集群的取出单元取出所述第一级节点中的一个或多个第一级节点,用于被处理以形成所述第二级节点。
14.如权利要求10或13所述的方法,其中,所述层级式加速结构包括包围体层级结构BVH。
15.如权利要求10或13所述的方法,其中,所述第一级节点的不同分组基于成本函数或距离函数来评估。
16.如权利要求15所述的方法,其中,所述成本函数或距离函数包括表面积试探SAH函数和/或欧几里得距离函数。
17.如权利要求10或16所述的方法,其中,所述并行可重配置聚类阵列的处理集群各自包括:
一个或多个可重配置单元,可重配置单元包括多个可重配置功能单元以及将所述多个可重配置功能单元互连的可重配置通信结构。
18.如权利要求17所述的方法,其中,可重配置单元进一步包括:
暂存器存储器,用于存储与所述第一级节点和/或所述第二级节点有关的数据;以及
算术逻辑单元ALU,通过所述可重配置结构耦合至所述暂存器存储器。
19.一种机器可读介质,具有存储于其上的程序代码,所述程序代码当由机器执行时使所述机器执行以下操作:
对图形图像的基元排序;
将所述基元分组以形成层级式加速结构的第一级节点;
为所述层级式加速结构的下一级评估所述第一级节点的不同分组,以确定所述不同分组的效率值;以及
基于所述效率值合并所述第一级节点,以形成所述层级式加速结构的第二级节点,
其中,评估所述第一级节点的操作和合并所述第一级节点的操作在并行可重配置聚类阵列的多个并行处理集群上被并行地执行。
20.如权利要求19所述的机器可读介质,进一步包括使所述机器执行以下操作的程序代码:
评估所述第二级节点的不同分组以确定所述不同分组的效率值;以及
基于所述效率值合并所述第二级节点,以形成用于所述层级式加速结构的下一级的第三级节点,
其中,评估所述第二级节点的操作和合并所述第二级节点的操作在所述多个并行处理集群上被并行地执行。
21.如权利要求20所述的机器可读介质,其中,排序操作进一步包括基于所述图形图像中的空间局部性来分割所述基元,并且其中,基于所述分割来执行对所述基元的所述分组。
22.如权利要求19或21所述的机器可读介质,进一步包括使所述机器执行以下操作的程序代码:
将所述第一级节点存储到存储器供由所述并行可重配置聚类阵列访问;以及
由每个并行处理集群的取出单元取出所述第一级节点中的一个或多个第一级节点,用于被处理以形成所述第二级节点。
23.如权利要求19或22所述的机器可读介质,其中,所述层级式加速结构包括包围体层级结构BVH。
24.如权利要求19或22所述的机器可读介质,其中,所述第一级节点的不同分组基于成本函数或距离函数来评估。
25.如权利要求24所述的机器可读介质,其中,所述成本函数或距离函数包括表面积试探SAH函数和/或欧几里得距离函数。
CN201911191149.1A 2018-12-28 2019-11-28 基于硬件预排序和并行的可重配置聚类阵列的bvh构建的统一架构 Pending CN111383161A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/236,305 2018-12-28
US16/236,305 US10832371B2 (en) 2018-12-28 2018-12-28 Unified architecture for BVH construction based on hardware pre-sorting and a parallel, reconfigurable clustering array

Publications (1)

Publication Number Publication Date
CN111383161A true CN111383161A (zh) 2020-07-07

Family

ID=68387130

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911191149.1A Pending CN111383161A (zh) 2018-12-28 2019-11-28 基于硬件预排序和并行的可重配置聚类阵列的bvh构建的统一架构

Country Status (3)

Country Link
US (4) US10832371B2 (zh)
EP (1) EP3675054A1 (zh)
CN (1) CN111383161A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113222118A (zh) * 2021-05-19 2021-08-06 北京百度网讯科技有限公司 神经网络训练方法、装置、电子设备、介质和程序产品
CN113722079A (zh) * 2021-11-03 2021-11-30 北京云歌科技有限责任公司 基于目标应用的任务调度分配方法、装置、设备及介质
WO2022268188A1 (zh) * 2021-06-25 2022-12-29 中科寒武纪科技股份有限公司 一种在多核或单核处理器中对数据进行排序的方法
CN116720554A (zh) * 2023-08-11 2023-09-08 南京师范大学 一种基于fpga技术的多段线性拟合的神经元电路实现方法

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3220356B1 (en) * 2016-03-14 2020-06-17 Imagination Technologies Limited Methods and graphics processing units for determining differential data for rays of a ray bundle
EP3249612B1 (en) * 2016-04-29 2023-02-08 Imagination Technologies Limited Generation of a control stream for a tile
JP7408671B2 (ja) 2019-03-15 2024-01-05 インテル コーポレイション シストリックアレイに対するブロックスパース演算のためのアーキテクチャ
US20220179787A1 (en) 2019-03-15 2022-06-09 Intel Corporation Systems and methods for improving cache efficiency and utilization
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
US11748935B2 (en) * 2020-01-03 2023-09-05 Advanced Micro Devices, Inc. Bounding volume hierarchy traversal
US11568021B2 (en) 2020-02-21 2023-01-31 Alibaba Group Holding Limited Vector-vector multiplication techniques for processing systems
US11848980B2 (en) * 2020-07-09 2023-12-19 Boray Data Technology Co. Ltd. Distributed pipeline configuration in a distributed computing system
CN114331802A (zh) * 2020-09-30 2022-04-12 想象技术有限公司 用于光线跟踪的相交测试
CN113590703B (zh) * 2021-08-10 2023-11-07 平安银行股份有限公司 Es数据导入方法、装置、电子设备及可读存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1808774A1 (en) * 2005-12-22 2007-07-18 St Microelectronics S.A. A hierarchical reconfigurable computer architecture
US9093135B2 (en) * 2012-11-15 2015-07-28 Nvidia Corporation System, method, and computer program product for implementing a storage array
US9817919B2 (en) 2013-06-10 2017-11-14 Nvidia Corporation Agglomerative treelet restructuring for bounding volume hierarchies
US9921847B2 (en) * 2014-01-21 2018-03-20 Nvidia Corporation Tree-based thread management
US9552664B2 (en) * 2014-09-04 2017-01-24 Nvidia Corporation Relative encoding for a block-based bounding volume hierarchy
US10559125B2 (en) 2015-12-02 2020-02-11 Samsung Electronics Co., Ltd. System and method of constructing bounding volume hierarchy tree
US11341110B2 (en) * 2016-03-21 2022-05-24 Imagination Technologies Limited Hierarchy merging
US10553010B2 (en) 2017-04-01 2020-02-04 Intel IP Corporation Temporal data structures in a ray tracing architecture

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113222118A (zh) * 2021-05-19 2021-08-06 北京百度网讯科技有限公司 神经网络训练方法、装置、电子设备、介质和程序产品
WO2022268188A1 (zh) * 2021-06-25 2022-12-29 中科寒武纪科技股份有限公司 一种在多核或单核处理器中对数据进行排序的方法
CN113722079A (zh) * 2021-11-03 2021-11-30 北京云歌科技有限责任公司 基于目标应用的任务调度分配方法、装置、设备及介质
CN116720554A (zh) * 2023-08-11 2023-09-08 南京师范大学 一种基于fpga技术的多段线性拟合的神经元电路实现方法
CN116720554B (zh) * 2023-08-11 2023-11-14 南京师范大学 一种基于fpga技术的多段线性拟合的神经元电路实现方法

Also Published As

Publication number Publication date
US11727528B2 (en) 2023-08-15
US20220327655A1 (en) 2022-10-13
EP3675054A1 (en) 2020-07-01
US11315213B2 (en) 2022-04-26
US20210090207A1 (en) 2021-03-25
US10832371B2 (en) 2020-11-10
US20200211147A1 (en) 2020-07-02
US20240046403A1 (en) 2024-02-08

Similar Documents

Publication Publication Date Title
US11727528B2 (en) Unified architecture for BVH construction based on hardware pre-sorting and a parallel, reconfigurable clustering array
US20200211252A1 (en) Cluster of scalar engines to accelerate intersection in leaf node
EP3675046B1 (en) Speculative execution of hit and intersection shaders on programmable ray tracing architectures
US11062500B2 (en) Apparatus and method for ray tracing with grid primitives
US10699370B1 (en) Apparatus and method for a compressed stack representation for hierarchical acceleration structures of arbitrary widths
EP4196960A1 (en) Apparatus and method for efficient graphics processing including ray tracing
US11880928B2 (en) Apparatus and method for a hierarchical beam tracer
EP4358029A2 (en) Apparatus and method for ray tracing instruction processing and execution
US11887243B2 (en) Apparatus and method for efficiently storing ray traversal data
EP3675051A1 (en) Early termination in bottom-up acceleration data structure refit
US10929948B2 (en) Page cache system and method for multi-agent environments
CN112085827B (zh) 用于加速数据结构修整的装置和方法
EP3675055A1 (en) Apparatus and method for general ray tracing queries
CN113496540A (zh) 用于执行稳定和短等待时间排序操作的装置和方法
US10937225B2 (en) Cell primitive for unstructured volume rendering

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