CN112669193A - 使用本地和基于云的处理资源的实时图形处理设备和方法 - Google Patents

使用本地和基于云的处理资源的实时图形处理设备和方法 Download PDF

Info

Publication number
CN112669193A
CN112669193A CN202010589455.7A CN202010589455A CN112669193A CN 112669193 A CN112669193 A CN 112669193A CN 202010589455 A CN202010589455 A CN 202010589455A CN 112669193 A CN112669193 A CN 112669193A
Authority
CN
China
Prior art keywords
threads
graphics
processor
execution
data
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
CN202010589455.7A
Other languages
English (en)
Inventor
R.耶尔
S.潘尼尔
C.S.马沙尔
J.菲特
V.R.戈库尔朗根
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 CN112669193A publication Critical patent/CN112669193A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/5072Grid computing
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/25Output arrangements for video game devices
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/355Performing operations on behalf of clients with restricted processing capabilities, e.g. servers transform changing game scene into an encoded video stream for transmitting to a mobile phone or a thin client
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/60Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/358Adapting the game course according to the network or server load, e.g. for reducing latency due to different connection speeds between clients
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/50Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers
    • A63F2300/53Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing
    • A63F2300/534Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing for network load management, e.g. bandwidth optimization, latency reduction
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5017Task decomposition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Artificial Intelligence (AREA)
  • Image Generation (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Image Processing (AREA)

Abstract

本发明的主题是“使用本地和基于云的处理资源的实时图形处理设备和方法”。一种用于在本地和远程处理资源上调度线程的设备和方法。例如,设备的一个实施例包括:本地图形处理器,其用来执行应用的线程;图形处理器虚拟化电路和/或逻辑,其用来生成本地处理器的虚拟化表示;调度器,其用来标识用于在本地图形处理器上执行的线程的第一子集和用于在本地处理器的虚拟化表示上执行的线程的第二子集;调度器用来本地图形处理器上调度线程的第一子集并且通过将线程或其表示传送到与本地处理器的虚拟化表示相关联的基于云的处理资源来调度线程的第二子集;以及本地图形处理器,其用来将在本地图形处理器上执行线程的第一子集的第一结果与在基于云的处理资源上执行线程的第二子集的第二结果组合以渲染图像帧。

Description

使用本地和基于云的处理资源的实时图形处理设备和方法
发明领域
本发明一般涉及图形处理器的领域。更特定地,本发明涉及用于使用本地和基于云的图形处理资源的实时图形处理的设备和方法。
背景技术
尽管远程图形服务器能够比典型用户的游戏装置快得多地渲染图像帧,但是存在可能影响实时游戏用户体验的其他挑战,诸如网络造成的时延以及由于数据压缩引起的质量变化。对于某些类型的游戏(诸如增强现实(AR)和虚拟现实(VR)游戏)要求高性能的联网平台来实现必要的时延。
附图说明
从结合以下附图的以下详细描述中能够获得本发明的更好理解,附图中:
图1是带有处理器的计算机系统的实施例的框图,所述处理器具有一个或多个处理器核和图形处理器;
图2是处理器的一个实施例的框图,所述处理器具有一个或多个处理器核、集成存储器控制器和集成图形处理器;
图3是图形处理器的一个实施例的框图,所述图形处理器可以是分立的图形处理单元,或者可以是与多个处理核集成的图形处理器;
图4是用于图形处理器的图形处理引擎的实施例的框图;
图5是图形处理器的另一实施例的框图。
图6是包括处理元件的阵列的线程执行逻辑的框图;
图7图示了根据实施例的图形处理器执行单元指令格式;
图8是图形处理器的另一实施例的框图,所述图形处理器包括图形流水线、媒体流水线、显示引擎、线程执行逻辑和渲染输出流水线;
图9A是图示根据实施例的图形处理器命令格式的框图;
图9B是图示根据实施例的图形处理器命令序列的框图;
图10图示了根据实施例的用于数据处理系统的示例性图形软件架构;
图11图示了可以被用来制造集成电路以执行根据实施例的操作的示例性IP核开发系统;
图12图示了根据实施例的可以使用一个或多个IP核来制作的示例性片上系统集成电路;
图13图示了可以使用一个或多个IP核来制作的片上系统集成电路的示例性图形处理器;
图14图示了可以使用一个或多个IP核来制作的片上系统集成电路的另外示例性图形处理器;
图15A-B图示了包括虚拟或“幻象(ghost)”GPU的架构的实施例;
图16图示了包括虚拟或“幻象”GPU的架构的另一实施例;
图17图示与使用三个幻象GPU和一个物理GPU的执行相关联的定时;
图18图示了用于生成幻象GPU并枚举幻象GPU的一个实施例;
图19图示了根据本发明的一个实施例的方法;
图20A-B图示了幻象和物理GPU和xPU的布置;
图21图示了用于执行机器学习架构的初始训练的架构的一个实施例;
图22图示了其中在运行时间期间不断训练和更新机器学习引擎的一个实施例;
图23图示了其中在运行时间期间不断训练和更新机器学习引擎的另一实施例;
图24A-B图示了其中在网络上共享机器学习数据的实施例;以及
图25图示了用于训练机器学习引擎的方法的一个实施例;
图26图示了其中节点交换重影区域(ghost region)数据以执行分布式去噪操作的一个实施例;
图27图示了其中图像渲染和去噪操作跨多个节点分布的架构的一个实施例;
图28图示了用于分布式渲染和去噪的架构的另外细节;
图29图示了根据本发明的一个实施例的方法;
图30图示了机器学习方法的一个实施例;
图31图示了多个互连的通用图形处理器;
图32图示了用于机器学习实现的卷积层和完全连接层的集合;
图33图示了卷积层的一个实施例;
图34图示了机器学习实现中互连的节点的集合的示例;
图35图示了训练框架的实施例,在该训练框架内神经网络使用训练数据集来进行学习;
图36A图示了模型并行(model parallelism)和数据并行(data parallelism)的示例;
图36B图示了片上系统(SoC)的示例;
图37图示了处理架构的示例,该处理架构包括光线追踪核和张量核;
图38图示了光束的示例;
图39图示了用于执行光束追踪的设备的实施例;
图40图示了光束层级的示例;
图41图示了用于执行光束追踪的方法;
图42图示了分布式光线追踪引擎的示例;
图43-44图示了在光线追踪系统中执行的压缩的示例;
图45图示了根据本发明一个实施例的方法;
图46图示了示例性混合光线追踪设备;
图47图示了用于光线追踪操作的堆栈的示例;
图48图示了混合光线追踪设备的一个实施例的附加细节;
图49图示了包围体层级的示例。
图50图示了调用堆栈和遍历状态存储的示例;
图51图示了用于遍历和交叉的方法的一个实施例;
图52A-B图示了一个实施例,其中要求多个分派周期来执行某些着色器;
图53图示了一个实施例,其中单个分派周期执行多个着色器;
图54图示了另一实施例,其中单个分派周期执行多个着色器;
图55图示了用于执行光线追踪指令的架构的一个实施例;以及
图56图示了用于执行线程内的光线追踪指令的方法的一个实施例。
具体实施方式
在以下描述中,出于解释的目的,阐述众多具体细节以便提供对下面描述的本发明的实施例的透彻理解。然而,本领域的技术人员将明白,可以在没有这些具体细节中的一些具体细节的情况下实践本发明的实施例。在其他实例中,以框图形式示出公知的结构和装置,以避免混淆本发明的实施例的根本原理。
示例性图形处理器架构和数据类型
系统概述
图1是根据实施例的处理系统100的框图。系统100可以用于单处理器台式电脑系统、多处理器工作站系统或具有大量处理器102或处理器核107的服务器系统中。在一个实施例中,系统100是并入片上系统(SoC)集成电路内的处理平台,所述片上系统(SoC)集成电路供在移动、手持式或嵌入式装置中(诸如在带有到局域网或广域网的有线或无线连接性的物联网(IoT)装置内)使用。
在一个实施例中,系统100能够包括以下各项、与以下各项耦合或者被集成在以下各项内:基于服务器的游戏平台;游戏控制台,包括游戏和媒体控制台;移动游戏控制台、手持式游戏控制台或在线游戏控制台。在一些实施例中,系统100是以下各项的一部分:移动电话、智能电话、平板计算装置或移动互联网连接的装置,诸如带有低内部存储容量的膝上型电脑。处理系统100还能够包括以下各项、与以下各项耦合或者被集成在以下各项内:可穿戴装置,诸如智能手表可穿戴装置;智能眼镜或服装,其用增强现实(AR)或虚拟现实(VR)特征来被增强以提供视觉、音频或触觉输出以补充现实世界视觉、音频或触觉体验或者以其他方式提供文本、音频、图形、视频、全息图像或视频、或者触觉反馈;其他增强现实(AR)装置;或者其他虚拟现实(VR)装置。在一些实施例中,处理系统100包括电视或机顶盒装置,或者是电视或机顶盒装置的一部分。在一个实施例中,系统100能够包括以下各项、与以下各项耦合或者被集成在以下各项内:自动驾驶交通工具,诸如公共汽车、牵引车拖车、汽车、摩托车或电动自行车、飞机或滑翔机(或其任何组合)。自动驾驶交通工具可以使用系统100来处理在交通工具周围感测到的环境。
在一些实施例中,一个或多个处理器102各自包括一个或多个处理器核107以处理指令,所述指令在被执行时,执行用于系统或用户软件的操作。在一些实施例中,一个或多个处理器核107中的至少一个处理器核被配置成处理特定指令集109。在一些实施例中,指令集109可以促进复杂指令集计算(CISC)、精简指令集计算(RISC)或经由超长指令字(VLIW)的计算。一个或多个处理器核107可以处理不同指令集109,所述指令集109可以包括用来促进对其他指令集的仿真的指令。处理器核107还可以包括其他处理装置,诸如数字信号处理器(DSP)。
在一些实施例中,处理器102包括高速缓冲存储器104。取决于架构,处理器102能够具有单个内部高速缓存或多个级别的内部高速缓存。在一些实施例中,在处理器102的各种组件之间共享高速缓冲存储器。在一些实施例中,处理器102还使用外部高速缓存(例如,3级(L3)高速缓存或末级高速缓存(LLC))(未示出),其可以在使用已知高速缓存一致性技术的处理器核107之间被共享。寄存器堆106能够另外被包括在处理器102中,并且可以包括用于存储不同类型的数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可以特定于处理器102的设计。
在一些实施例中,一个或多个处理器102与一个或多个接口总线110耦合,以在处理器102与在系统100中的其他组件之间传送通信信号,诸如地址、数据或控制信号。接口总线110在一个实施例中能够是处理器总线,诸如某一版本的直接媒体接口(DMI)总线。然而,处理器总线不限于DMI总线,并且可以包括一个或多个外设组件互连总线(例如,PCI、PCIexpress)、存储器总线或其他类型的接口总线。在一个实施例中,(一个或多个)处理器102包括集成存储器控制器116和平台控制器集线器130。存储器控制器116促进在存储器装置与系统100的其他组件之间的通信,而平台控制器集线器(PCH)130经由本地I/O总线提供到I/O装置的连接。
存储器装置120能够是动态随机存取存储器(DRAM)装置、静态随机存取存储器(SRAM)装置、闪速存储器装置、相变存储器装置或具有适合性能以充当进程存储器的某一其他存储器装置。在一个实施例中,存储器装置120能够作为用于系统100的系统存储器进行操作,以存储数据122和指令121以便在一个或多个处理器102执行应用或进程时使用。存储器控制器116还与可选的外部图形处理器118耦合,所述外部图形处理器118可以与处理器102中的一个或多个图形处理器108进行通信以执行图形和媒体操作。在一些实施例中,可以由加速器112协助图形、媒体和/或计算操作,所述加速器112是能够被配置成执行专门的一组图形、媒体或计算操作的协处理器。例如,在一个实施例中,加速器112是用来优化机器学习或计算操作的矩阵乘法加速器。在一个实施例中,加速器112是光线追踪加速器,其能够被用来与图形处理器108协同执行光线追踪操作。在一个实施例中,可以使用外部加速器119来替代加速器112或与加速器112协同。
在一些实施例中,显示装置111能够连接到(一个或多个)处理器102。显示装置111能够是如在移动电子装置或膝上型装置中的内部显示装置或者经由显示接口(例如,DisplayPort等)附连的外部显示装置中的一个或多个。在一个实施例中,显示装置111能够是头戴式显示器(HMD),诸如供在虚拟现实(VR)应用或增强现实(AR)应用中使用的立体显示装置。
在一些实施例中,平台控制器集线器130使得外设能经由高速I/O总线连接到存储器装置120和处理器102。I/O外设包括但不限于音频控制器146、网络控制器134、固件接口128、无线收发器126、触摸传感器125、数据存储装置124(例如,非易失性存储器、易失性存储器、硬盘驱动器、闪速存储器、NAND、3D NAND、3D XPoint等)。数据存储装置124能够经由存储接口(例如,SATA)或经由诸如外设组件互连总线(例如,PCI、PCI express)的外设总线进行连接。触摸传感器125能够包括触摸屏传感器、压力传感器或指纹传感器。无线收发器126能够是Wi-Fi收发器、蓝牙收发器或诸如3G、4G、5G或长期演进(LTE)收发器之类的移动网络收发器。固件接口128使得能够与系统固件通信,并且能够是例如统一可扩展固件接口(UEFI)。网络控制器134可实现到有线网络的网络连接。在一些实施例中,高性能网络控制器(未示出)与接口总线110耦合。音频控制器146在一个实施例中是多通道高清晰度音频控制器。在一个实施例中,系统100包括用于将传统(例如,个人系统2(PS/2))装置耦合到系统的可选的传统I/O控制器140。平台控制器集线器130还能够连接到一个或多个通用串行总线(USB)控制器142连接输入装置,诸如键盘和鼠标143组合、拍摄装置144或其他USB输入装置。
将领会的是,示出的系统100是示例性的并且不是限制性的,因为以不同方式配置的其他类型的数据处理系统也可以被使用。例如,存储器控制器116和平台控制器集线器130的实例可以被集成到分立的外部图形处理器中,诸如外部图形处理器118。在一个实施例中,平台控制器集线器130和/或存储器控制器116可以在一个或多个处理器102的外部。例如,系统100能够包括外部存储器控制器116和平台控制器集线器130,其可以被配置为与(一个或多个)处理器102通信的系统芯片组内的存储器控制器集线器和外设控制器集线器。
例如,能够使用电路板(“滑板(sled)”),在所述滑板上放置诸如CPU、存储器和其他组件之类的组件,其被设计用于增加的热性能。在一些实施例中,诸如处理器的处理组件位于滑板的顶侧上,而诸如DIMM的近存储器位于滑板的底侧上。作为通过此设计提供的增强的空气流动的结果,组件可以以比在典型系统中更高的频率和功率水平进行操作,由此增加性能。此外,滑板被配置成与机架中的功率和数据通信缆线盲配对,从而增强它们被快速移除、升级、重新安装和/或替换的能力。类似地,位于滑板上的各个组件(诸如处理器、加速器、存储器和数据存储驱动器)被配置成由于它们与彼此增加的间距而容易被升级。在说明性实施例中,组件另外包括硬件证明特征以证实其确实性(authenticity)。
数据中心能够利用单个网络架构(“组构(fabric)”),所述单个网络架构支持包括以太网和全路径(Omni-Path)的多个其他网络架构。滑板能够经由光纤被耦合到交换机,所述光纤提供比典型双绞线缆线(例如,类别5、类别5e、类别6等)更高的带宽和更低的时延。由于高带宽、低时延互连和网络架构,数据中心可以使用在物理上解聚的池资源(诸如存储器、加速器(例如,GPU、图形加速器、FPGA、ASIC、神经网络和/或人工智能加速器等)以及数据存储驱动器),并且在按需基础上将它们提供到计算资源(例如,处理器),使得计算资源能访问池化资源(pooled resource),如同池化资源是本地的一样。
功率供应器或功率源能够提供电压和/或电流到本文中描述的系统100或者任何组件或系统。在一个示例中,功率供应器包括用来插入到墙上插座的AC到DC(交流电到直流电)适配器。此类AC电力能够是可再生能(例如,太阳能)功率源。在一个示例中,功率源包括DC功率源,诸如外部AC到DC转换器。在一个示例中,功率源或功率供应器包括无线充电硬件以经由接近充电场进行充电。在一个示例中,功率源能够包括内部电池、交流电供应器、基于运动的功率供应器、太阳能供应器或燃料电池源。
图2A-2D图示了由本文中描述的实施例提供的计算系统和图形处理器。与本文中任何其他附图的元件具有相同参考标号(或名称)的图2A-2D的元件能够以与本文中其他地方所描述的方式类似的任何方式操作或起作用,但不限于这样。
图2A是具有一个或多个处理器核202A-202N、集成存储器控制器214和集成图形处理器208的处理器200的实施例的框图。处理器200能够包括另外的核,所述另外的核多达并且包括由虚线框表示的另外的核202N。处理器核202A-202N中的每个处理器核包括一个或多个内部高速缓存单元204A-204N。在一些实施例中,每个处理器核还可以访问一个或多个共享高速缓存单元206。内部高速缓存单元204A-204N和共享高速缓存单元206表示处理器200内的高速缓冲存储器层级。高速缓冲存储器层级可以包括在每个处理器核内的至少一级的指令和数据高速缓存,以及一级或多级的共享中间级高速缓存,诸如2级(L2)、3级(L3)、4级(L4)或其他级的高速缓存,其中在外部存储器前的最高级的高速缓存被分类为LLC。在一些实施例中,高速缓存一致性逻辑维持各种高速缓存单元206与204A-204N之间的一致性。
在一些实施例中,处理器200还可以包括一组一个或多个总线控制器单元216和系统代理核210。一个或多个总线控制器单元216管理一组外设总线,诸如一个或多个PCI或PCI express总线。系统代理核210提供用于各种处理器组件的管理功能性。在一些实施例中,系统代理核210包括一个或多个集成存储器控制器214以管理对各种外部存储器装置(未示出)的访问。
在一些实施例中,处理器核202A-202N中的一个或多个处理器核包括对同时多线程的支持。在此类实施例中,系统代理核210包括用于在多线程的处理期间协调和操作核202A-202N的组件。系统代理核210可以另外包括功率控制单元(PCU),所述功率控制单元(PCU)包括用来调节处理器核202A-202N和图形处理器208的功率状态的逻辑和组件。
在一些实施例中,处理器200另外包括用来执行图形处理操作的图形处理器208。在一些实施例中,图形处理器208与一组共享高速缓存单元206和包括一个或多个集成存储器控制器214的系统代理核210耦合。在一些实施例中,系统代理核210还包括用来驱动到一个或多个耦合的显示器的图形处理器输出的显示控制器211。在一些实施例中,显示控制器211还可以是经由至少一个互连与图形处理器耦合的单独模块,或者可以被集成在图形处理器208内。
在一些实施例中,基于环的互连单元212被用来耦合处理器200的内部组件。然而,可以使用备选互连单元,诸如点对点互连、交换互连或其他技术,包括本领域中公知的技术。在一些实施例中,图形处理器208经由I/O链路213与环形互连212耦合。
示例性I/O链路213表示多个种类的I/O互连中的至少一个,包括促进在各种处理器组件与诸如eDRAM模块的高性能嵌入式存储器模块218之间的通信的封装上I/O互连。在一些实施例中,处理器核202A-202N中的每个处理器核和图形处理器208能够使用嵌入式存储器模块218作为共享末级高速缓存。
在一些实施例中,处理器核202A-202N是执行相同指令集架构的同质核。在另一实施例中,处理器核202A-202N在指令集架构(ISA)方面是异质的,其中处理器核202A-202N中的一个或多个处理器核执行第一指令集,而其他核中的至少一个核执行第一指令集的子集或不同指令集。在一个实施例中,处理器核202A-202N在微架构方面是异质的,其中具有相对较高功耗的一个或多个核与具有较低功耗的一个或多个功率核耦合。在一个实施例中,处理器核202A-202N在计算能力方面是异质的。另外,处理器200能够在一个或多个芯片上被实现,或者被实现为除其他组件外还具有图示的组件的SoC集成电路。
图2B是根据本文中描述的一些实施例的图形处理器核219的硬件逻辑的框图。与本文中任何其他附图的元件具有相同参考标号(或名称)的图2B的元件能够以与本文中其他地方所描述的方式类似的任何方式操作或起作用,但不限于这样。有时被称为核切片(core slice)的图形处理器核219能够是模块化图形处理器内的一个或多个图形核。图形处理器核219是一个图形核切片的示例,并且如本文中所述的图形处理器可以基于目标功率和性能包络而包括多个图形核切片。每个图形处理器核219能够包括与也称为子切片的多个子核221A-221F耦合的固定功能块230,所述多个子核221A-221F包括通用和固定功能逻辑的模块化块。
在一些实施例中,固定功能块230包括几何/固定功能流水线231,所述几何/固定功能流水线231能够例如在更低性能/或更低功率图形处理器实现中由图形处理器核219中的所有子核共享。在各种实施例中,几何/固定功能流水线231包括3D固定功能流水线(例如,下文所述的如图3和图4中的3D流水线312)、视频前端单元、线程派生器(threadspawner)和线程分派器(thread dispatcher)以及管理统一返回缓冲器(unified returnbuffer)(例如,如下文所述的在图4中的统一返回缓冲器418)的统一返回缓冲器管理器。
在一个实施例中,固定功能块230还包括图形SoC接口232、图形微控制器233和媒体流水线234。图形SoC接口232提供图形处理器核219与片上系统集成电路内的其他处理器核之间的接口。图形微控制器233是可编程子处理器,其可配置成管理图形处理器核219的各种功能,包括线程分派、调度和抢占(pre-emption)。媒体流水线234(例如,图3和图4的媒体流水线316)包括用来促进多媒体数据(包括图像和视频数据)的解码、编码、预处理和/或后处理的逻辑。媒体流水线234经由对子核221A-221F内的计算或采样逻辑的请求来实现媒体操作。
在一个实施例中,SoC接口232使得图形处理器核219能够与通用应用处理器核(例如,CPU)和/或SoC内的其他组件(包括存储器层级元件,诸如共享末级高速缓冲存储器、系统RAM和/或嵌入式片上或封装上DRAM)进行通信。SoC接口232还可实现与SoC内的固定功能器件(诸如拍摄装置成像流水线)的通信,并且实现全局存储器原子的使用和/或实现全局存储器原子,可以在图形处理器核219与SoC内的CPU之间共享所述全局存储器原子。SoC接口232还可实现用于图形处理器核219的功率管理控制,并且实现图形核219的时钟域与SoC内的其他时钟域之间的接口。在一个实施例中,SoC接口232使得能够接收来自命令流转化器(command streamer)和全局线程分派器的命令缓冲器,所述命令缓冲器被配置成向图形处理器内的一个或多个图形核中的每个图形核提供命令和指令。命令和指令能够在要执行媒体操作时被分派到媒体流水线234,或者在要执行图形处理操作时被分派到几何和固定功能流水线(例如,几何和固定功能流水线231、几何和固定功能流水线237)。
图形微控制器233能够被配置成执行用于图形处理器核219的各种调度和管理任务。在一个实施例中,图形微控制器233能够在子核221A-221F内的执行单元(EU)阵列222A-222F、224A-224F内的各种图形并行引擎上执行图形和/或计算工作负载调度。在此调度模型中,在包括图形处理器核219的SoC的CPU核上执行的主机软件能够提交工作负载给多个图形处理器门铃(graphic processor doorbell)之一,这调取在适当图形引擎上的调度操作。调度操作包括确定接下来要运行哪个工作负载,向命令流转化器提交工作负载,对在引擎上运行的现有工作负载进行抢占,监测工作负载的进展,以及在工作负载完成时通知主机软件。在一个实施例中,图形微控制器233还能够促进图形处理器核219的低功率或空闲状态,从而为图形处理器核219提供独立于操作系统和/或系统上的图形驱动器软件跨低功率状态转变来对图形处理器核219内的寄存器进行保存和恢复的能力。
图形处理器核219可以具有多于或少于图示的子核221A-221F,多达N个模块化子核。对于每组N个子核,图形处理器核219还能够包括共享功能逻辑235、共享和/或高速缓冲存储器236、几何/固定功能流水线237以及用来加速各种图形和计算处理操作的另外的固定功能逻辑238。共享功能逻辑235能够包括与图4的共享功能逻辑420关联的逻辑单元(例如,采样器、数学和/或线程间通信逻辑),所述逻辑单元能够由图形处理器核219内的每N个子核共享。共享和/或高速缓冲存储器236能够是用于图形处理器核219内的一组N个子核221A-221F的末级高速缓存,并且还能够充当可由多个子核访问的共享存储器。几何/固定功能流水线237能够代替固定功能块230内的几何/固定功能流水线231而被包括,并且能够包括相同或类似的逻辑单元。
在一个实施例中,图形处理器核219包括另外的固定功能逻辑238,其能够包括供图形处理器核219使用的各种固定功能加速逻辑。在一个实施例中,另外的固定功能逻辑238包括供在仅位置着色中使用的另外的几何流水线。在仅位置着色中,存在两个几何流水线:几何/固定功能流水线238、231内的完全几何流水线;以及剔除流水线(cullpipeline),其是可以被包括在另外的固定功能逻辑238内的另外的几何流水线。在一个实施例中,剔除流水线是完全几何流水线的裁减版本。完全流水线和剔除流水线能够执行相同应用的不同实例,每个实例具有单独的上下文。仅位置着色能够隐藏被丢弃三角形的长剔除运行,使得在一些实例中能更早完成着色。例如,并且在一个实施例中,另外的固定功能逻辑238内的剔除流水线逻辑能够执行与主应用并行的位置着色器,并且一般比完全流水线更快生成关键结果,因为剔除流水线仅获取并且着色顶点的位置属性而不向帧缓冲器执行像素的光栅化(rasterization)和渲染。剔除流水线能够使用生成的关键结果来计算用于所有三角形的可见性信息,而不考虑那些三角形是否被剔除。完全流水线(其在此实例中可以被称为重放流水线)能够消耗可见性信息以跳过被剔除的三角形,以仅对最终被传递到光栅化阶段的可见三角形进行着色。
在一个实施例中,另外的固定功能逻辑238还能够包括诸如固定功能矩阵乘法逻辑的机器学习加速逻辑,以用于包括针对机器学习训练或推理的优化的实现。
在每个图形子核221A-221F内包括一组执行资源,其可以用于响应于图形流水线、媒体流水线或着色器程序的请求而执行图形、媒体和计算操作。图形子核221A-221F包括多个EU阵列222A-222F、224A-224F、线程分派和线程间通信(TD/IC)逻辑223A-223F、3D(例如,纹理)采样器225A-225F、媒体采样器206A-206F、着色器处理器227A-227F及共享本地存储器(SLM)228A-228F。EU阵列222A-222F、224A-224F各自包括多个执行单元,所述多个执行单元是能够为图形、媒体或计算操作(包括图形、媒体或计算着色器程序)服务而执行浮点和整数/定点逻辑运算的通用图形处理单元。TD/IC逻辑223A-223F执行用于子核内的执行单元的本地线程分派和线程控制操作,并且促进在子核的执行单元上执行的线程之间的通信。3D采样器225A-225F能够将纹理或其他3D图形有关数据读取到存储器中。3D采样器能够基于配置的样本状态和与给定纹理关联的纹理格式来以不同方式读取纹理数据。媒体采样器206A-206F能够基于与媒体数据关联的类型和格式来执行类似的读取操作。在一个实施例中,每个图形子核221A-221F能够交替包括统一3D和媒体采样器。在子核221A-221F中的每个子核内的执行单元上执行的线程能够利用每个子核内的共享本地存储器228A-228F,以使得在线程群组内执行的线程能使用片上存储器的公共池来执行。
图2C图示了包括布置成多核群组240A-240N的图形处理资源的专用集合的图形处理单元(GPU)239。尽管提供了仅单个多核群组240A的细节,但将领会的是,其他多核群组240B-240N可以被配备有图形处理资源的相同或类似集合。
如所图示的,多核群组240A可以包括图形核243的集合、张量核244的集合和光线追踪核245的集合。调度器/分派器241调度和分派图形线程以便在各种核243、244、245上执行。寄存器堆242的集合存储由核243、244、245在执行图形线程时使用的操作数值。这些寄存器可以包括例如用于存储整数值的整数寄存器、用于存储浮点值的浮点寄存器、用于存储打包数据元素(整数和/或浮点数据元素)的向量寄存器及用于存储张量/矩阵值的贴片寄存器(tile register)。在一个实施例中,贴片寄存器被实现为向量寄存器的组合集合。
一个或多个组合的1级(L1)高速缓存和共享存储器单元247在每个多核群组240A内本地存储图形数据,诸如纹理数据、顶点数据、像素数据、光线数据、包围体数据等。一个或多个纹理单元247还能够被用来执行纹理操作,诸如纹理映射和采样。由多核群组240A-240N的全部或其子集共享的2级(L2)高速缓存253存储用于多个并发图形线程的图形数据和/或指令。如所图示的,L2高速缓存253可以跨多个多核群组240A-240N被共享。一个或多个存储器控制器248将GPU 239耦合到存储器249,所述存储器249可以是系统存储器(例如,DRAM)和/或专用图形存储器(例如,GDDR6存储器)。
输入/输出(I/O)电路250将GPU 239耦合到一个或多个I/O装置252,诸如数字信号处理器(DSP)、网络控制器或用户输入装置。片上互连可以用来将I/O装置252耦合到GPU239和存储器249。I/O电路250的一个或多个I/O存储器管理单元(IOMMU)251将I/O装置252直接耦合到系统存储器249。在一个实施例中,IOMMU 251管理页表的多个集合以将虚拟地址映射到系统存储器249中的物理地址。在此实施例中,I/O装置252、(一个或多个)CPU 246和(一个或多个)GPU 239可以共享相同虚拟地址空间。
在一个实现中,IOMMU 251支持虚拟化。在此情况下,它可以管理页表的第一集合以将客户/图形虚拟地址映射到客户/图形物理地址,并且管理页表的第二集合以将客户/图形物理地址映射到系统/主机物理地址(例如,在系统存储器249内)。页表的第一和第二集合中的每个集合的基址可以被存储在控制寄存器中并且在上下文切换时被换出(例如,使得为新上下文提供对页表的相关集合的访问)。尽管在图2C中未被图示,但核243、244、245和/或多核群组240A-240N中的每个可以包括转换后备缓冲器(TLB)以对客户虚拟到客户物理转换、客户物理到主机物理转换以及客户虚拟到主机物理转换进行高速缓存。
在一个实施例中,CPU 246、GPU 239和I/O装置252被集成在单个半导体芯片和/或芯片封装上。图示的存储器249可以被集成在相同芯片上,或者可以经由芯片外(off-chip)接口被耦合到存储器控制器248。在一个实现中,存储器249包括GDDR6存储器,所述GDDR6存储器共享与其他物理系统级存储器相同的虚拟地址空间,虽然本发明的根本原理不限于此特定实现。
在一个实施例中,张量核244包括特别设计成执行矩阵运算的多个执行单元,所述矩阵运算是用来执行深度学习操作的基本计算操作。例如,同时矩阵乘法运算可以被用于神经网络训练和推理。张量核244可以使用各种操作数精度来执行矩阵处理,所述各种操作数精度包括单精度浮点(例如,32位)、半精度浮点(例如,16位)、整数字(16位)、字节(8位)和半字节(4位)。在一个实施例中,神经网络实现提取每个经渲染的场景的特征,潜在地组合来自多个帧的细节以构造高质量的最终图像。
在深度学习实现中,可以调度并行矩阵乘法工作以用于在张量核244上执行。神经网络的训练特别要求大量矩阵点积运算。为处理N x N x N矩阵相乘的内积公式,张量核244可以包括至少N个点积处理元件。在矩阵相乘开始前,一个完整矩阵被加载到贴片寄存器,并且在N个循环的每个循环,第二矩阵的至少一列被加载。在每个循环,存在被处理的N个点积。
取决于特定实现,可以以不同精度存储矩阵元素,所述不同精度包括16位字、8位字节(例如,INT8)和4位半字节(例如,INT4)。可以为张量核244指定不同精度模式以确保最高效的精度被用于不同工作负载(例如,诸如能够容许量化到字节和半字节的推理工作负载)。
在一个实施例中,光线追踪核245对于实时光线追踪和非实时光线追踪实现二者加速光线追踪操作。特别地,光线追踪核245包括光线遍历/交叉电路,以用于使用包围体层级(BVH)来执行光线遍历并且标识封围在BVH体之内的图元与光线之间的交叉。光线追踪核245还可以包括用于执行深度测试和剔除(例如,使用Z缓冲器或类似布置)的电路。在一个实现中,光线追踪核245与本文中描述的图像去噪技术协同来执行遍历和交叉操作,其至少一部分可以在张量核244上执行。例如,在一个实施例中,张量核244实现深度学习神经网络以执行由光线追踪核245生成的帧的去噪。然而,(一个或多个)CPU 246、图形核243和/或光线追踪核245还可以实现去噪和/或深度学习算法的全部或一部分。
另外,如上所述,可以采用用来去噪的分布式方法,其中GPU 239在通过网络或高速互连耦合到其他计算装置的计算装置中。在该实施例中,互连的计算装置共享神经网络学习/训练数据来改进整个系统学习对不同类型的图像帧和/或不同的图形应用执行去噪所用的速度。
在一个实施例中,光线追踪核245处理所有BVH遍历和光线-图元交叉,从而使图形核243免于以每光线的数千个指令而过载。在一个实施例中,每个光线追踪核245包括用于执行包围盒测试(例如,以用于遍历操作)的专用电路的第一集合和用于执行光线-三角形交叉测试(例如,对已遍历的光线进行交叉)的专用电路的第二集合。因此,在一个实施例中,多核群组240A能够仅仅启动光线探头,并且光线追踪核245独立执行光线遍历和交叉并且将命中数据(例如,命中、无命中、多个命中等)返回到线程上下文。在光线追踪核245执行遍历和交叉操作的同时,其他核243、244被释放以执行其他图形或计算工作。
在一个实施例中,每个光线追踪核245包括用来执行BVH测试操作的遍历单元和执行光线-图元交叉测试的交叉单元。交叉单元生成“命中”、“无命中”或“多个命中”响应,并且交叉单元将该响应提供到适当的线程。在遍历和交叉操作期间,其他核(例如,图形核243和张量核244)的执行资源被释放以执行其他形式的图形工作。
在下面描述的一个特定实施例中,使用了混合光栅化/光线追踪方法,其中在图形核243与光线追踪核245之间分布工作。
在一个实施例中,光线追踪核245(和/或其他核243、244)包括对诸如Microsoft的DirectX光线追踪(DXR)之类的光线追踪指令集的硬件支持,所述DXR包括DispatchRays命令以及光线生成、最接近命中、任意命中和未命中着色器,这些使得能够对每个对象指派纹理和着色器的独特集合。可以由光线追踪核245、图形核243和张量核244支持的另一光线追踪平台是Vulkan 1.1.85。然而,注意本发明的根本原理不限于任何特定光线追踪ISA。
一般而言,各种核245、244、243可以支持光线追踪指令集,所述光线追踪指令集包括用于光线生成、最接近命中、任意命中、光线-图元交叉、每图元和层级包围盒构造、未命中、访问及异常(exception)的指令/功能。更具体地说,一个实施例包括用来执行以下功能的光线追踪指令:
光线生成 – 可以对每个像素、样本或其他用户定义的工作指派执行光线生成指令。
最接近命中 – 可以执行最接近命中指令来用场景内的图元来定位光线的最接近交叉点。
任意命中 – 任意命中指令标识场景内的图元与光线之间的多个交叉,潜在地标识新的最接近交叉点。
交叉 – 交叉指令执行光线-图元交叉测试并且输出结果。
每图元包围盒构造 – 此指令围绕给定图元或图元的群组构建包围盒(例如,在构建新的BVH或其他加速数据结构时)。
未命中 – 指示光线未命中场景或场景的指定区域内的所有几何形状。
访问 – 指示光线将遍历的子体(children volume)。
异常 – 包括各种类型的异常处理程序(exception handler)(例如,针对各种错误条件而被调取)。
图2D是根据本文中描述的实施例的能够被配置为图形处理器和/或计算加速器的通用图形处理单元(GPGPU)270的框图。GPGPU 270能够经由一个或多个系统和/或存储器总线与主机处理器(例如,一个或多个CPU 246)和存储器271、272互连。在一个实施例中,存储器271是可以与一个或多个CPU 246共享的系统存储器,而存储器272是专用于GPGPU 270的装置存储器。在一个实施例中,装置存储器272和GPGPU 270内的组件可被映射到一个或多个CPU 246可访问的存储器地址中。可经由存储器控制器268来促进对存储器271和272的访问。在一个实施例中,存储器控制器268包括内部直接存储器存取(DMA)控制器269,或者能够包括逻辑以执行在其他情况下将由DMA控制器执行的操作。
GPGPU 270包括多个高速缓冲存储器,包括L2高速缓存253、L1高速缓存254、指令高速缓存255和共享存储器256,该共享存储器256的至少一部分也可被分区为高速缓冲存储器。GPGPU 270还包括多个计算单元260A-260N。每个计算单元260A-260N包括向量寄存器261、标量寄存器262、向量逻辑单元263和标量逻辑单元264的集合。计算单元260A-260N还能够包括本地共享存储器265和程序计数器266。计算单元260A-260N能够与常量高速缓存267耦合,该常量高速缓存267能够被用来存储常量数据,所述常量数据是在GPGPU 270上执行的内核或着色器程序的运行期间将不改变的数据。在一个实施例中,常量高速缓存267是标量数据高速缓存,并且高速缓存的(cached)数据能够被直接获取到标量寄存器262中。
在操作期间,一个或多个CPU 246能够将命令写入已被映射到可访问地址空间中的GPGPU 270中的寄存器或存储器中。命令处理器257能够从寄存器或存储器读取命令,并且确定在GPGPU 270内将如何处理那些命令。线程分派器258然后能够被用来将线程分派到计算单元260A-260N以执行那些命令。每个计算单元260A-260N能够独立于其他计算单元执行线程。另外,每个计算单元260A-260N能够被独立配置用于有条件的计算,并且能够有条件地输出计算的结果到存储器。在提交的命令完成时,命令处理器257能够中断一个或多个CPU 246。
图3A-3C图示了由本文中描述的实施例提供的另外的图形处理器和计算加速器架构的框图。与本文中任何其他附图的元件具有相同参考标号(或名称)的图3A-3C的元件能够以与本文中其他地方所描述的方式类似的任何方式操作或起作用,但不限于这样。
图3A是图形处理器300的框图,该图形处理器300可以是分立的图形处理单元,或者可以是与多个处理核集成的图形处理器,或诸如但不限于存储器装置或网络接口的其他半导体装置。在一些实施例中,图形处理器经由到图形处理器上的寄存器的存储器映射I/O接口并且利用放置在处理器存储器中的命令进行通信。在一些实施例中,图形处理器300包括用来访问存储器的存储器接口314。存储器接口314能够是到本地存储器、一个或多个内部高速缓存、一个或多个共享外部高速缓存和/或到系统存储器的接口。
在一些实施例中,图形处理器300还包括用来将显示输出数据驱动到显示装置318的显示控制器302。显示控制器302包括用于一个或多个覆盖平面的硬件,以用于显示和组合多个层的视频或用户接口元素。显示装置318能够是内部或外部显示装置。在一个实施例中,显示装置318是头戴式显示装置,诸如虚拟现实(VR)显示装置或增强现实(AR)显示装置。在一些实施例中,图形处理器300包括视频编解码器引擎306以将媒体编码成一种或多种媒体编码格式、从一种或多种媒体编码格式解码媒体或在一种或多种媒体编码格式之间将媒体转码,所述媒体编码格式包括但不限于运动图像专家组(MPEG)格式(诸如MPEG-2)、高级视频编码(AVC)格式(诸如H.264/MPEG-4 AVC)、H.265/HEVC、开放媒体联盟(AOMedia)VP8、VP9、以及电影与电视工程师协会(SMPTE)421M/VC-1和联合图像专家组(JPEG)格式(诸如JPEG)和运动JPEG(MJPEG)格式。
在一些实施例中,图形处理器300包括用来执行二维(2D)光栅化器操作(包括例如位边界块传输)的块图像传输(BLIT)引擎304。然而,在一个实施例中,使用图形处理引擎(GPE)310的一个或多个组件来执行2D图形操作。在一些实施例中,GPE 310是用于执行包括三维(3D)图形操作和媒体操作的图形操作的计算引擎。
在一些实施例中,GPE 310包括用于执行3D操作的3D流水线312,所述3D操作诸如使用作用于3D图元形状(例如,矩形、三角形等)的处理功能来渲染三维图像和场景。3D流水线312包括可编程和固定功能元件,所述可编程和固定功能元件在元件内执行各种任务和/或将执行线程派生(spawn)到3D/媒体子系统315。虽然3D流水线312能够被用来执行媒体操作,但GPE 310的实施例还包括特别用来执行媒体操作(诸如视频后处理和图像增强)的媒体流水线316。
在一些实施例中,媒体流水线316包括固定功能或可编程逻辑单元以代替或者代表视频编解码器引擎306来执行一个或多个专用媒体操作,诸如视频解码加速、视频去交织和视频编码加速。在一些实施例中,媒体流水线316另外包括线程派生单元以派生用于在3D/媒体子系统315上执行的线程。派生的线程在3D/媒体子系统315中包括的一个或多个图形执行单元上执行用于媒体操作的计算。
在一些实施例中,3D/媒体子系统315包括用于执行由3D流水线312和媒体流水线316派生的线程的逻辑。在一个实施例中,流水线将线程执行请求发送到3D/媒体子系统315,所述3D/媒体子系统315包括线程分派逻辑,以用于将各种请求仲裁(arbitrate)并分派到可用线程执行资源。执行资源包括用来处理3D和媒体线程的图形执行单元的阵列。在一些实施例中,3D/媒体子系统315包括用于线程指令和数据的一个或多个内部高速缓存。在一些实施例中,子系统还包括共享存储器,所述共享存储器包括寄存器和可寻址存储器,以在线程之间共享数据和存储输出数据。
图3B图示了根据本文中描述的实施例的具有拼贴(tiled)架构的图形处理器320。在一个实施例中,图形处理器320包括图形处理引擎集群322,所述图形处理引擎集群322在图形引擎贴片310A-310D内具有图3A的图形处理引擎310的多个实例。每个图形引擎贴片310A-310D能够经由一组贴片互连323A-323F而互连267-。每个图形引擎贴片310A-310D还能够经由存储器互连325A-325D而连接到存储器模块或存储器装置326A-326D。存储器装置326A-326D能够使用任何图形存储器技术。例如,存储器装置326A-326D可以是图形双倍数据率(GDDR)存储器。存储器装置326A-326D在一个实施例中是高带宽存储器(HBM)模块,其能够与其相应图形引擎贴片310A-310D一起在管芯上。在一个实施例中,存储器装置326A-326D是堆叠存储器装置,其能够被堆叠在其相应图形引擎贴片310A-310D的顶部上。在一个实施例中,如图11B-11D中进一步详细描述的,每个图形引擎贴片310A-310D和关联存储器326A-326D驻留在单独的小芯片(chiplet)上,所述小芯片被接合到基础管芯或基础衬底。
图形处理引擎集群322能够与片上或封装上组构互连324连接。组构互连324可实现在图形引擎贴片310A-310D与诸如视频编解码器306和一个或多个复制引擎304的组件之间的通信。复制引擎304能够被用来将数据移出以下各项、将数据移入以下各项以及在以下各项之间移动数据:存储器装置326A-326D和在图形处理器320外的存储器(例如,系统存储器)。组构互连324还能够被用来互连图形引擎贴片310A-310D。图形处理器320可以可选地包括用来实现与外部显示装置318的连接的显示控制器302。图形处理器还可以被配置为图形或计算加速器。在加速器配置中,可省略显示控制器302和显示装置318。
图形处理器320能够经由主机接口328连接到主机系统。主机接口328可实现在图形处理器320、系统存储器和/或其他系统组件之间的通信。主机接口328能够例如是PCIexpress总线或另一类型的主机系统接口。
图3C图示了根据本文中描述的实施例的计算加速器330。计算加速器330能够包括与图3B的图形处理器320的架构类似性并且被优化用于计算加速。计算引擎集群332能够包括一组计算引擎贴片340A-340D,其包括被优化用于并行或基于向量的通用计算操作的执行逻辑。在一些实施例中,计算引擎贴片340A-340D不包括固定功能图形处理逻辑,虽然在一个实施例中,计算引擎贴片340A-340D中的一个或多个计算引擎贴片能够包括用来执行媒体加速的逻辑。计算引擎贴片340A-340D能够经由存储器互连325A-325D连接到存储器326A-326D。存储器326A-326D和存储器互连325A-325D可以是与在图形处理器320中类似的技术,或者能够是不同的。图形计算引擎贴片340A-340D还能够经由一组贴片互连323A-323F而互连,并且可以与组构互连324连接和/或通过组构互连324而互连。在一个实施例中,计算加速器330包括能够被配置为装置范围高速缓存的大的L3高速缓存336。计算加速器330还能够以与图3B的图形处理器320类似的方式经由主机接口328连接到主机处理器和存储器。
图形处理引擎
图4是根据一些实施例的图形处理器的图形处理引擎410的框图。在一个实施例中,图形处理引擎(GPE)410是图3A中示出的GPE 310的某一版本,并且还可以表示图3B的图形引擎贴片310A-310D。与本文中任何其他附图的元件具有相同参考标号(或名称)的图4的元件能够以与本文中其他地方所描述的方式类似的任何方式操作或起作用,但不限于这样。例如,图示了图3A的3D流水线312和媒体流水线316。媒体流水线316在GPE 410的一些实施例中是可选的,并且可以未被显式地包括在GPE 410内。例如,并且在至少一个实施例中,单独的媒体和/或图像处理器被耦合到GPE 410。
在一些实施例中,GPE 410与提供命令流到3D流水线312和/或媒体流水线316的命令流转化器403耦合,或者包括该命令流转化器403。在一些实施例中,命令流转化器403与存储器耦合,所述存储器能够是系统存储器,或内部高速缓冲存储器和共享高速缓冲存储器中的一个或多个。在一些实施例中,命令流转化器403接收来自存储器的命令,并且将命令发送到3D流水线312和/或媒体流水线316。命令是从环形缓冲器获取的指示,所述环形缓冲器存储用于3D流水线312和媒体流水线316的命令。在一个实施例中,环形缓冲器能够另外包括存储批量的多个命令的批量命令缓冲器。用于3D流水线312的命令还能够包括对在存储器中存储的数据的引用,所述数据诸如但不限于用于3D流水线312的顶点和几何数据和/或用于媒体流水线316的图像数据和存储器对象。3D流水线312和媒体流水线316通过经由相应流水线内的逻辑执行操作或者通过将一个或多个执行线程分派到图形核阵列414来处理命令和数据。在一个实施例中,图形核阵列414包括图形核(例如,(一个或多个)图形核415A、(一个或多个)图形核415B)的一个或多个块,每个块包括一个或多个图形核。每个图形核包括:一组图形执行资源,其包括用来执行图形和计算操作的通用和图形特定执行逻辑;以及固定功能纹理处理和/或机器学习和人工智能加速逻辑。
在各种实施例中,3D流水线312能够包括用来通过处理指令和分派执行线程到图形核阵列414来处理一个或多个着色器程序(诸如顶点着色器、几何着色器、像素着色器、片段着色器、计算着色器或其他着色器程序)的固定功能和可编程逻辑。图形核阵列414提供执行资源的统一块以供在处理这些着色器程序中使用。图形核阵列414的(一个或多个)图形核415A-415B内的多用途执行逻辑(例如,执行单元)包括对各种3D API着色器语言的支持,并且能够执行与多个着色器关联的多个同时执行线程。
在一些实施例中,图形核阵列414包括用来执行媒体功能(诸如视频和/或图像处理)的执行逻辑。在一个实施例中,执行单元包括通用逻辑,该通用逻辑可编程以除图形处理操作外还执行并行通用计算操作。该通用逻辑能够与在图1的(一个或多个)处理器核107或如在图2A中的核202A-202N内的通用逻辑并行或结合地执行处理操作。
由在图形核阵列414上执行的线程生成的输出数据能够将数据输出到统一返回缓冲器(URB)418中的存储器。URB 418能够存储用于多个线程的数据。在一些实施例中,URB418可以被用来在图形核阵列414上执行的不同线程之间发送数据。在一些实施例中,URB418可以另外被用于在图形核阵列上的线程与在共享功能逻辑420内的固定功能逻辑之间的同步。
在一些实施例中,图形核阵列414是可缩放的,使得该阵列包括可变数量的图形核,这些图形核各自基于GPE 410的目标功率和性能水平而具有可变数量的执行单元。在一个实施例中,执行资源是动态可缩放的,使得可以按需要来启用或禁用执行资源。
图形核阵列414与共享功能逻辑420耦合,该共享功能逻辑420包括在图形核阵列中的图形核之间共享的多个资源。在共享功能逻辑420内的共享功能是硬件逻辑单元,所述硬件逻辑单元提供专用补充功能性到图形核阵列414。在各种实施例中,共享功能逻辑420包括但不限于采样器421、数学422和线程间通信(ITC)423逻辑。另外,一些实施例在共享功能逻辑420内实现一个或多个高速缓存425。
至少在其中对给定专用功能的需求不足以包含在图形核心阵列414内的情况下,实现共享功能。该专用功能的单个实例化而是被实现为共享功能逻辑420中的独立实体,并且在图形核阵列414内的执行资源之间共享。在图形核阵列414内共享并且被包括在图形核阵列414内的功能的精确集合跨实施例而变化。在一些实施例中,由图形核阵列414广泛使用的共享功能逻辑420内的特定共享功能可以被包括在图形核阵列414内的共享功能逻辑416内。在各种实施例中,图形核阵列414内的共享功能逻辑416能够包括共享功能逻辑420内的一些或全部逻辑。在一个实施例中,可以在图形核阵列414的共享功能逻辑416内重复共享功能逻辑420内的全部逻辑元件。在一个实施例中,排除了共享功能逻辑420以有利于图形核阵列414内的共享功能逻辑416。
执行单元
图5A-5B图示了根据本文中描述的实施例的包括图形处理器核中采用的处理元件的阵列的线程执行逻辑500。与本文中任何其他附图的元件具有相同参考标号(或名称)的图5A-5B的元件能够以本文中其他地方所描述的方式类似的任何方式操作或起作用,但不限于这样。图5A-5B图示了线程执行逻辑500的概述,该线程执行逻辑500可以代表用图2B的每个子核221A-221F图示的硬件逻辑。图5A代表通用图形处理器内的执行单元,而图5B代表可在计算加速器内使用的执行单元。
如在图5A中所图示的,在一些实施例中,线程执行逻辑500包括着色器处理器502、线程分派器504、指令高速缓存506、包括多个执行单元508A-508N的可缩放执行单元阵列、采样器510、共享本地存储器511、数据高速缓存512和数据端口514。在一个实施例中,可缩放执行单元阵列能够通过基于工作负载的计算要求来启用或禁用一个或多个执行单元(例如,执行单元508A、508B、508C、508D直到508N-1和508N中的任何执行单元)来动态地进行缩放。在一个实施例中,被包括的组件经由链接到组件中的每个组件的互连组构而互连。在一些实施例中,线程执行逻辑500包括通过指令高速缓存506、数据端口514、采样器510和执行单元508A-508N中的一个或多个到存储器(诸如系统存储器或高速缓冲存储器)的一个或多个连接。在一些实施例中,每个执行单元(例如,508A)是独立可编程通用计算单元,其能执行多个同时硬件线程,同时为每个线程并行处理多个数据元素。在各种实施例中,执行单元508A-508N的阵列是可缩放的,以包括任何数量的各个执行单元。
在一些实施例中,执行单元508A-508N主要被用来执行着色器程序。着色器处理器502能够处理各种着色器程序,并且经由线程分派器504分派与着色器程序关联的执行线程。在一个实施例中,线程分派器包括用来对来自图形和媒体流水线的线程发起请求进行仲裁并且在执行单元508A-508N中的一个或多个执行单元上实例化所请求的线程的逻辑。例如,几何流水线能够分派顶点、曲面细分(tessellation)或几何着色器到线程执行逻辑以用于处理。在一些实施例中,线程分派器504还能够处理来自执行的着色器程序的运行时间线程派生请求。
在一些实施例中,执行单元508A-508N支持指令集,所述指令集包括对许多标准3D图形着色器指令的本机支持,使得来自图形库(例如Direct 3D和OpenGL)的着色器程序以最小的转换来执行。执行单元支持顶点和几何处理(例如顶点程序、几何程序、顶点着色器)、像素处理(例如像素着色器、片段着色器)和通用处理(例如计算和媒体着色器)。执行单元508A-508N中的每个执行单元能进行多发布(multi-issue)单指令多数据(SIMD)执行,并且多线程操作在面临更高时延存储器访问时实现高效的执行环境。每个执行单元内的每个硬件线程具有专用高带宽寄存器堆和关联的独立线程状态。执行是对能够进行整数、单精度和双精度浮点运算、SIMD分支能力、逻辑运算、超越运算和其他杂项运算的流水线的每时钟多发布。在等待来自存储器或共享功能之一的数据时,执行单元508A-508N内的依赖性逻辑使等待的线程休眠,直到所请求的数据已返回为止。当等待的线程正在休眠时,硬件资源可以专用于处理其他线程。例如,在与顶点着色器操作关联的延迟期间,执行单元能够执行用于像素着色器、片段着色器或另一类型的着色器程序(包括不同顶点着色器)的操作。各种实施例能够适用于通过作为使用SIMD的备选方案或者附加于使用SIMD来使用单指令多线程(SIMT)来使用执行。对SIMD核或操作的引用也能够适用于SIMT或者适用于与SIMT组合的SIMD。
执行单元508A-508N中的每个执行单元对数据元素的阵列进行操作。数据元素的数量是“执行大小”或用于指令的通道的数量。执行通道是用于指令内的数据元素访问、掩码(masking)和流控制的执行的逻辑单元。通道的数量可以独立于用于特定图形处理器的物理算术逻辑单元(ALU)或浮点单元(FPU)的数量。在一些实施例中,执行单元508A-508N支持整数和浮点数据类型。
执行单元指令集包括SIMD指令。各种数据元素能够作为打包数据类型存储在寄存器中,并且执行单元将基于元素的数据大小来处理各种元素。例如,在对256位宽向量进行操作时,向量的256位被存储在寄存器中,并且执行单元对作为四个单独的54位打包数据元素(四字(QW)大小数据元素)、八个单独的32位打包数据元素(双字(DW)大小数据元素)、十六个单独的16位打包数据元素(字(W)大小数据元素)或三十二个单独的8位数据元素(字节(B)大小数据元素)的向量进行操作。然而,不同向量宽度和寄存器大小是可能的。
在一个实施例中,一个或多个执行单元能够被组合成具有线程控制逻辑(507A-507N)的融合执行单元509A-509N,该线程控制逻辑(507A-507N)对于融合EU是公共的。多个EU能够融合成EU群组。融合EU群组中的每个EU能够配置成执行单独的SIMD硬件线程。融合EU群组中EU的数量能够根据实施例而变化。另外,能够每EU执行各种SIMD宽度,包括但不限于SIMD8、SIMD16和SIMD32。每个融合图形执行单元509A-509N包括至少两个执行单元。例如,融合执行单元509A包括第一EU 508A、第二EU 508B及线程控制逻辑507A,该线程控制逻辑507A对于第一EU 508A和第二EU 508B是公共的。线程控制逻辑507A控制在融合图形执行单元509A上执行的线程,允许融合执行单元509A-509N内的每个EU使用公共指令指针寄存器来执行。
线程执行逻辑500中包括一个或多个内部指令高速缓存(例如,506)以对用于执行单元的线程指令进行高速缓存。在一些实施例中,包括一个或多个数据高速缓存(例如,512)以在线程执行期间对线程数据进行高速缓存。在执行逻辑500上执行的线程还能够在共享本地存储器511中存储显式管理的数据。在一些实施例中,包括采样器510以提供用于3D操作的纹理采样和用于媒体操作的媒体采样。在一些实施例中,采样器510包括专用纹理或媒体采样功能性,以在向执行单元提供采样数据前在采样进程期间处理纹理或媒体数据。
在执行期间,图形和媒体流水线经由线程派生和分派逻辑向线程执行逻辑500发送线程发起请求。一旦几何对象的群组已被处理并且光栅化成像素数据,着色器处理器502内的像素处理器逻辑(例如,像素着色器逻辑、片段着色器逻辑等)便被调取来进一步计算输出信息,并且使结果被写入到输出表面(例如颜色缓冲器、深度缓冲器、模板缓冲器等)。在一些实施例中,像素着色器或片段着色器计算要跨光栅化对象内插的各种顶点属性的值。在一些实施例中,着色器处理器502内的像素处理器逻辑然后执行应用编程接口(API)供应的像素或片段着色器程序。为执行着色器程序,着色器处理器502经由线程分派器504向执行单元(例如,508A)分派线程。在一些实施例中,着色器处理器502使用采样器510中的纹理采样逻辑来访问存储在存储器中的纹理映射中的纹理数据。对纹理数据和输入几何数据的算术运算计算每个几何片段的像素颜色数据,或者从进一步处理中丢弃一个或多个像素。
在一些实施例中,数据端口514提供存储器访问机制,以便线程执行逻辑500将经处理的数据输出至存储器以用于在图形处理器输出流水线上进一步处理。在一些实施例中,数据端口514包括或者耦合到一个或多个高速缓冲存储器(例如,数据高速缓存512)来对数据进行高速缓存以用于经由数据端口的存储器访问。
在一个实施例中,执行逻辑500还能够包括光线追踪器505,所述光线追踪器505能够提供光线追踪加速功能性。光线追踪器505能够支持包括用于光线生成的指令/功能的光线追踪指令集。该光线追踪指令集能够与图2C中的光线追踪核245所支持的光线追踪指令集类似或不同。
图5B图示了根据实施例的执行单元508的示例性内部细节。图形执行单元508能够包括指令获取单元537、通用寄存器堆阵列(GRF)524、架构寄存器堆阵列(ARF)526、线程仲裁器522、发送单元530、分支单元532、一组SIMD浮点单元(FPU)534以及在一个实施例中包括一组专用整数SIMD ALU 535。GRF 524和ARF 526包括与可以在图形执行单元508中活动的每个同时硬件线程关联的一组通用寄存器堆和架构寄存器堆。在一个实施例中,在ARF526中维持每线程架构状态,而在线程执行期间使用的数据被存储在GRF 524中。每个线程的执行状态(包括用于每个线程的指令指针)能够被保持在ARF 526中的线程特定寄存器中。
在一个实施例中,图形执行单元508具有是同时多线程(SMT)和细粒度交错多线程(IMT)的组合的架构。该架构具有模块化配置,其能够在设计时基于每执行单元的寄存器数量和同时线程的目标数量来被微调,其中执行单元资源跨用来执行多个同时线程的逻辑而被划分。可以由图形执行单元508执行的逻辑线程的数量不限于硬件线程的数量,并且多个逻辑线程能够被指派到每个硬件线程。
在一个实施例中,图形执行单元508能够共同发布多个指令,所述多个指令各自可以是不同的指令。图形执行单元线程508的线程仲裁器522能够将指令分派给发送单元530、分支单元532或(一个或多个)SIMD FPU 534中的一个以用于执行。每个执行线程能够访问GRF 524内的128个通用寄存器,其中每个寄存器能够存储32个字节,其可作为32位数据元素的SIMD 8元素向量访问。在一个实施例中,每个执行单元线程可以访问GRF 524内的4千字节,虽然实施例不限于此,并且在其他实施例中可以提供更多或更少的寄存器资源。在一个实施例中,图形执行单元508被分区成能够独立执行计算操作的七个硬件线程,尽管每执行单元的线程的数量也可根据实施例而变化。例如,在一个实施例中支持多达16个硬件线程。在其中七个线程可以访问4千字节的实施例中,GRF 524能够存储总共28千字节。在16个线程可以访问4千字节的情况下,GRF 524能够存储总共64千字节。灵活的寻址模式能够允许对寄存器一起被寻址以有效地构建更宽的寄存器或者表示跨步矩形块数据结构(strided rectangular block data structure)。
在一个实施例中,经由通过消息传递发送单元530执行的“发送”指令来分派存储器操作、采样器操作和其他较长时延系统通信。在一个实施例中,将分支指令分派给专用分支单元532以促进SIMD发散和最终收敛。
在一个实施例中,图形执行单元508包括一个或多个SIMD浮点单元((一个或多个)FPU)534以执行浮点运算。在一个实施例中,(一个或多个)FPU 534还支持整数计算。在一个实施例中,(一个或多个)FPU 534能够SIMD执行多达数量为M的32位浮点(或整数)运算,或者SIMD执行多达2M个16位整数或16位浮点运算。在一个实施例中,(一个或多个)FPU中的至少一个FPU提供扩展的数学能力以支持高吞吐量超越数学功能和双精度54位浮点。在一些实施例中,还存在一组8位整数SIMD ALU 535,并且该组8位整数SIMD ALU 535可以被特别地优化以执行与机器学习计算关联的运算。
在一个实施例中,图形执行单元508的多个实例的阵列能够在图形子核分组(例如,子切片)中被实例化。为了可缩放性,产品架构师能够选择每子核分组的执行单元的确切数量。在一个实施例中,执行单元508能够跨多个执行通道执行指令。在另外的实施例中,在图形执行单元508上执行的每个线程是在不同的通道上执行的。
图6图示了根据实施例的另外的执行单元600。执行单元600可以是供例如在如图3C中的计算引擎贴片340A-340D中使用的计算优化的执行单元,但未被限制为这样。执行单元600的变体还可以用于如图3B中的图形引擎贴片310A-310D中。在一个实施例中,执行单元600包括线程控制单元601、线程状态单元602、指令获取/预获取单元603和指令解码单元604。执行单元600另外包括寄存器堆606,所述寄存器堆606存储能够被指派到执行单元内的硬件线程的寄存器。执行单元600另外包括发送单元607和分支单元608。在一个实施例中,发送单元607和分支单元608能够与图5B的图形执行单元508的发送单元530和分支单元532类似地操作。
执行单元600还包括计算单元610,所述计算单元610包括多个不同类型的功能单元。在一个实施例中,计算单元610包括ALU单元611,所述ALU单元611包括算术逻辑单元的阵列。ALU单元611能够被配置成执行64位、32位和16位整数和浮点运算。整数和浮点运算可同时被执行。计算单元610还能够包括脉动阵列612和数学单元613。脉动阵列612包括能够用来以脉动方式执行向量或其他数据并行操作的数据处理单元的宽度W和深度D的网络。在一个实施例中,脉动阵列612能够被配置成执行矩阵运算,诸如矩阵点积运算。在一个实施例中,脉动阵列612支持16位浮点运算及8位和4位整数运算。在一个实施例中,脉动阵列612能够被配置成加速机器学习操作。在此类实施例中,脉动阵列612能够被配置有对bfloat16位浮点格式的支持。在一个实施例中,能够包括数学单元613来以高效和比ALU单元611更低功率的方式执行数学运算的特定子集。数学单元613能够包括可以在由其他实施例提供的图形处理引擎的共享功能逻辑中找到的数学逻辑的变体(例如,图4的共享功能逻辑420的数学逻辑422)。在一个实施例中,数学单元613能够被配置成执行32位和64位浮点运算。
线程控制单元601包括用来控制在执行单元内线程的执行的逻辑。线程控制单元601能够包括用来开始、停止和抢占执行单元600内线程的执行的线程仲裁逻辑。线程状态单元602能够用来为被指派在执行单元600上执行的线程存储线程状态。在执行单元600内存储线程状态使得能够在那些线程变为阻塞或空闲时快速抢占线程。指令获取/预获取单元603能够从更高级别执行逻辑的指令高速缓存(例如,如图5A中的指令高速缓存506)中获取指令。指令获取/预获取单元603还能够基于当前执行的线程的分析来发布对要被加载到指令高速缓存中的指令的预获取请求。指令解码单元604能够被用来解码要由计算单元执行的指令。在一个实施例中,指令解码单元604能够被用作次级解码器以将复杂指令解码成组成微操作(constituent micro-operation)。
执行单元600另外包括能够由在执行单元600上执行的硬件线程使用的寄存器堆606。能够跨用来执行在执行单元600的计算单元610内的多个同时线程的逻辑来划分寄存器堆606中的寄存器。可以由图形执行单元600执行的逻辑线程的数量不限于硬件线程的数量,并且多个逻辑线程能够被指派到每个硬件线程。寄存器堆606的大小能够基于支持的硬件线程的数量跨实施例而变化。在一个实施例中,寄存器重命名可用来动态分配寄存器到硬件线程。
图7是图示根据一些实施例的图形处理器指令格式700的框图。在一个或多个实施例中,图形处理器执行单元支持具有采用多种格式的指令的指令集。实线框图示了一般被包括在执行单元指令中的组成部分,而虚线包括可选的或者仅被包括在指令的子集中的组成部分。在一些实施例中,描述和图示的指令格式700是宏指令,因为它们是供应给执行单元的指令,而与一旦指令被处理则由指令解码产生的微操作相反。
在一些实施例中,图形处理器执行单元本机地支持采用128位指令格式710的指令。基于所选择的指令、指令选项和操作数的数量,64位压缩指令格式730可用于一些指令。本机128位指令格式710提供对所有指令选项的访问,而在64位格式730中一些选项和操作被限制。采用64位格式730的可用的本机指令随实施例而变化。在一些实施例中,使用索引字段713中的一组索引值来部分地压缩指令。执行单元硬件基于索引值来引用一组压缩表,并且使用压缩表输出来重构采用128位指令格式710的本机指令。能够使用指令的其他大小和格式。
对于每种格式,指令操作码712定义执行单元要执行的操作。执行单元跨每个操作数的多个数据元素并行执行每个指令。例如,响应于相加指令,执行单元跨表示纹理元素或图片元素的每个颜色通道来执行同时相加运算。默认情况下,执行单元跨操作数的所有数据通道来执行每个指令。在一些实施例中,指令控制字段714实现对诸如通道选择(例如,断定(predication))和数据通道次序(例如,搅混(swizzle))之类的某些执行选项的控制。对于采用128位指令格式710的指令,执行大小字段716限制将被并行执行的数据通道的数量。在一些实施例中,执行大小字段716不可用于在64位紧凑指令格式730中使用。
一些执行单元指令具有多达三个操作数,这三个操作数包括两个源操作数、src0720、src1 722和一个目的地718。在一些实施例中,执行单元支持双目的地指令,其中目的地之一是隐含的。数据操纵指令能够具有第三源操作数(例如SRC2 724),其中指令操作码712确定源操作数的数量。指令的最后源操作数能够是利用指令传递的立即(例如,硬编码的)值。
在一些实施例中,128位指令格式710包括访问/地址模式字段726,该访问/地址模式字段726指定例如使用直接寄存器寻址模式还是间接寄存器寻址模式。在使用直接寄存器寻址模式时,由指令中的位来直接提供一个或多个操作数的寄存器地址。
在一些实施例中,128位指令格式710包括访问/地址模式字段726,该访问/地址模式字段726指定指令的地址模式和/或访问模式。在一个实施例中,访问模式被用来定义指令的数据访问对齐。一些实施例支持包括16字节对齐的访问模式和1字节对齐的访问模式的访问模式,其中访问模式的字节对齐确定指令操作数的访问对齐。例如,当处于第一模式中时,指令可将字节对齐的寻址用于源操作数和目的地操作数,并且当处于第二模式中时,指令可将16字节对齐的寻址用于所有源操作数和目的地操作数。
在一个实施例中,访问/地址模式字段726的地址模式部分确定指令将使用直接寻址还是间接寻址。在使用直接寄存器寻址模式时,指令中的位直接提供一个或多个操作数的寄存器地址。在使用间接寄存器寻址模式时,可以基于指令中的地址寄存器值和地址立即字段来计算一个或多个操作数的寄存器地址。
在一些实施例中,基于操作码712位字段对指令进行分组,以简化操作码解码740。对于8位操作码,4、5和6位允许执行单元确定操作码的类型。所示出的精确操作码分组仅是示例。在一些实施例中,移动和逻辑操作码群组742包括数据移动和逻辑指令(例如,移动(mov)、比较(cmp))。在一些实施例中,移动和逻辑群组742共享五个最高有效位(MSB),其中移动(mov)指令采用0000xxxxb的形式,并且逻辑指令采用0001xxxxb的形式。流控制指令群组744(例如调取、跳(jmp))包括采用0010xxxxb(例如,0x20)形式的指令。杂项指令群组746包括指令的混合,包括采用0011xxxxb(例如0x30)形式的同步指令(例如等待、发送)。并行数学指令群组748包括采用0100xxxxb(例如0x40)形式的逐组成部分的算术指令(例如,加、乘(mul))。并行数学群组748跨数据通道并行执行算术运算。向量数学群组750包括采用0101xxxxb(例如,0x50)形式的算术指令(例如,dp4)。向量数学群组对向量操作数执行诸如点积计算的算术。图示的操作码解码740在一个实施例中能够用来确定执行单元的哪个部分将被用来执行解码的指令。例如,一些指令可被指定为将由脉动阵列执行的脉动指令。诸如光线追踪指令(未示出)的其他指令能够被路由到执行逻辑的切片或分区内的光线追踪核或光线追踪逻辑。
图形流水线
图8是图形处理器800的另一实施例的框图。与本文中任何其他附图的元件具有相同参考标号(或名称)的图8的元件能够以与本文中其他地方所描述的方式类似的任何方式操作或起作用,但不限于这样。
在一些实施例中,图形处理器800包括几何流水线820、媒体流水线830、显示引擎840、线程执行逻辑850和渲染输出流水线870。在一些实施例中,图形处理器800是包括一个或多个通用处理核的多核处理系统内的图形处理器。通过对一个或多个控制寄存器(未示出)的寄存器写入或者经由经过环形互连802发布至图形处理器800的命令来控制图形处理器。在一些实施例中,环形互连802将图形处理器800耦合到其他处理组件,诸如其他图形处理器或通用处理器。来自环形互连802的命令由命令流转化器803解译,该命令流转化器803将指令供应至几何流水线820或媒体流水线830的各个组件。
在一些实施例中,命令流转化器803指导顶点获取器805的操作,该顶点获取器805从存储器读取顶点数据并执行由命令流转化器803提供的顶点处理命令。在一些实施例中,顶点获取器805将顶点数据提供给顶点着色器807,该顶点着色器807对每个顶点执行坐标空间变换和照明操作。在一些实施例中,顶点获取器805和顶点着色器807通过经由线程分派器831向执行单元852A-852B分派执行线程来执行顶点处理指令。
在一些实施例中,执行单元852A-852B是具有用于执行图形和媒体操作的指令集的向量处理器的阵列。在一些实施例中,执行单元852A-852B具有附连的L1高速缓存851,所述L1高速缓存851特定于每个阵列,或者在阵列之间共享。高速缓存能够被配置为数据高速缓存、指令高速缓存或被分区以在不同分区中含有数据和指令的单个高速缓存。
在一些实施例中,几何流水线820包括曲面细分组件以执行3D对象的硬件加速的曲面细分。在一些实施例中,可编程外壳着色器(programmable hull shader)811配置曲面细分操作。可编程域着色器817提供曲面细分输出的后端评估。曲面细分器813在外壳着色器811的指导下进行操作,并且含有专用逻辑以基于作为到几何流水线820的输入而提供的粗略几何模型来生成一组详细的几何对象。在一些实施例中,如果未使用曲面细分,则能够绕过曲面细分组件(例如,外壳着色器811、曲面细分器813和域着色器817)。
在一些实施例中,完整几何对象能够由几何着色器819经由分派给执行单元852A-852B的一个或多个线程来处理,或者能够直接行进至裁剪器(clipper)829。在一些实施例中,几何着色器对整个几何对象进行操作,而不是如在图形流水线的先前阶段中那样对顶点或顶点的补片(patch)进行操作。如果曲面细分被禁用,则几何着色器819接收来自顶点着色器807的输入。在一些实施例中,几何着色器819可由几何着色器程序编程以在曲面细分单元被禁用时执行几何曲面细分。
在光栅化前,裁剪器829处理顶点数据。裁剪器829可以是具有裁剪和几何着色器功能的可编程裁剪器或固定功能裁剪器。在一些实施例中,渲染输出流水线870中的光栅化器和深度测试组件873分派像素着色器以将几何对象转换成每像素表示。在一些实施例中,像素着色器逻辑被包括在线程执行逻辑850中。在一些实施例中,应用能够绕过光栅化器和深度测试组件873,并且经由流输出单元823访问未光栅化的顶点数据。
图形处理器800具有允许数据和消息在处理器的主要组件之间传递的互连总线、互连组构或某种其他互连机构。在一些实施例中,执行单元852A-852B和关联的逻辑单元(例如,L1高速缓存851、采样器854、纹理高速缓存858等)经由数据端口856互连,以执行存储器访问并且与处理器的渲染输出流水线组件进行通信。在一些实施例中,采样器854、高速缓存851、858和执行单元852A-852B各自具有单独的存储器访问路径。在一个实施例中,纹理高速缓存858还能够被配置为采样器高速缓存。
在一些实施例中,渲染输出流水线870含有光栅化器和深度测试组件873,其将基于顶点的对象转换成关联的基于像素的表示。在一些实施例中,光栅化器逻辑包括用来执行固定功能三角形和线光栅化的窗口化器(windower)/掩蔽器单元。关联的渲染高速缓存878和深度高速缓存879在一些实施例中也是可用的。像素操作组件877对数据执行基于像素的操作,尽管在一些实例中,与2D操作关联的像素操作(例如,带有混合(blending)的位块图像传输)由2D引擎841执行,或者在显示时由显示控制器843使用覆盖显示平面代替。在一些实施例中,共享L3高速缓存875对于全部图形组件是可用的,从而允许在不使用主系统存储器的情况下共享数据。
在一些实施例中,图形处理器媒体流水线830包括媒体引擎837和视频前端834。在一些实施例中,视频前端834接收来自命令流转化器803的流水线命令。在一些实施例中,媒体流水线830包括单独的命令流转化器。在一些实施例中,视频前端834在将命令发送至媒体引擎837之前处理媒体命令。在一些实施例中,媒体引擎837包括线程派生功能性来派生线程,以便经由线程分派器831分派到线程执行逻辑850。
在一些实施例中,图形处理器800包括显示引擎840。在一些实施例中,显示引擎840在处理器800的外部,并且经由环形互连802或某一其他互连总线或组构与图形处理器耦合。在一些实施例中,显示引擎840包括2D引擎841和显示控制器843。在一些实施例中,显示引擎840含有能独立于3D流水线操作的专用逻辑。在一些实施例中,显示控制器843与显示装置(未示出)耦合,该显示装置可以是系统集成的显示装置(如在膝上型计算机中),或者可以是经由显示装置连接器附连的外部显示装置。
在一些实施例中,几何流水线820和媒体流水线830可配置成基于多个图形和媒体编程接口来执行操作,并且不特定于任何一个应用编程接口(API)。在一些实施例中,用于图形处理器的驱动器软件将特定于特定图形或媒体库的API调取转换成能够由图形处理器处理的命令。在一些实施例中,为全部来自Khronos Group的开放图形库(OpenGL)、开放计算语言(OpenCL)和/或Vulkan图形和计算API提供支持。在一些实施例中,还可以为来自微软公司的Direct3D库提供支持。在一些实施例中,可支持这些库的组合。还可以为开源计算机视觉库(OpenCV)提供支持。如果能够进行从未来API的流水线到图形处理器的流水线的映射,则具有可兼容3D流水线的未来API也将被支持。
图形流水线编程
图9A是图示根据一些实施例的图形处理器命令格式900的框图。图9B是图示根据实施例的图形处理器命令序列910的框图。图9A中的实线框图示了一般被包括在图形命令中的组成部分,而虚线包括可选的或者仅被包括在图形命令的子集中的组成部分。图9A的示例性图形处理器命令格式900包括用来标识命令的客户端902、命令操作代码(操作码)904和数据906的数据字段。一些命令中还包括子操作码905和命令大小908。
在一些实施例中,客户端902指定处理命令数据的图形装置的客户端单元。在一些实施例中,图形处理器命令解析器检查每个命令的客户端字段以调节命令的进一步处理,并且将命令数据路由到适当的客户端单元。在一些实施例中,图形处理器客户端单元包括存储器接口单元、渲染单元、2D单元、3D单元和媒体单元。每个客户端单元具有处理命令的对应处理流水线。一旦客户端单元接收到命令,客户端单元便读取操作码904和子操作码905(如果子操作码905存在的话),以确定要执行的操作。客户端单元使用数据字段906中的信息来执行命令。对于一些命令,预期显式命令大小908来指定命令的大小。在一些实施例中,命令解析器基于命令操作码来自动确定命令中的至少一些命令的大小。在一些实施例中,经由双字的倍数来对齐命令。能够使用其他命令格式。
图9B中的流程图图示了示例性图形处理器命令序列910。在一些实施例中,以图形处理器的实施例为特征的数据处理系统的软件或固件使用所示出的命令序列的版本来设置、执行和终止一组图形操作。仅出于示例的目的示出并描述了样本命令序列,因为实施例不限于这些特定命令或此命令序列。另外,命令可作为命令序列中的批量的命令被发布,使得图形处理器将至少部分并发地处理命令的序列。
在一些实施例中,图形处理器命令序列910可以以流水线转储清除命令(pipelineflush command)912开始,以促使任何活动的图形流水线完成该流水线的当前未决命令。在一些实施例中,3D流水线922和媒体流水线924没有并发地操作。执行流水线转储清除以促使活动的图形流水线完成任何未决命令。响应于流水线转储清除,用于图形处理器的命令解析器将暂停命令处理,直至活动的绘图引擎完成未决操作并且相关的读取高速缓存失效。可选地,能够将渲染高速缓存中标记为“脏”的任何数据转储清除到存储器。在一些实施例中,流水线转储清除命令912能够被用于流水线同步,或者在将图形处理器置于低功率状态前被使用。
在一些实施例中,在命令序列要求图形处理器在流水线之间显式地切换时,使用流水线选择命令913。在一些实施例中,除非上下文将为两个流水线发布命令,否则在发布流水线命令前,在执行上下文内仅要求一次流水线选择命令913。在一些实施例中,紧接在经由流水线选择命令913的流水线切换之前,要求流水线转储清除命令912。
在一些实施例中,流水线控制命令914配置图形流水线以用于操作,并且被用来对3D流水线922和媒体流水线924进行编程。在一些实施例中,流水线控制命令914为活动的流水线配置流水线状态。在一个实施例中,流水线控制命令914被用于流水线同步,并且在处理一批命令前从活动的流水线内的一个或多个高速缓冲存储器中清除数据。
在一些实施例中,返回缓冲器状态命令916被用来为相应流水线配置一组返回缓冲器以写入数据。一些流水线操作要求分配、选择或配置一个或多个返回缓冲器,在处理期间这些操作将中间数据写入到所述一个或多个返回缓冲器中。在一些实施例中,图形处理器还使用一个或多个返回缓冲器来存储输出数据并且执行跨线程通信。在一些实施例中,返回缓冲器状态916包括选择要用于一组流水线操作的返回缓冲器的大小和数量。
命令序列中的剩余命令基于用于操作的活动流水线而不同。基于流水线确定920,将命令序列定制到以3D流水线状态930开始的3D流水线922或者在媒体流水线状态940开始的媒体流水线924。
用来配置3D流水线状态930的命令包括3D状态设置命令,其用于在处理3D图元命令之前要配置的顶点缓冲器状态、顶点元素状态、恒定颜色状态、深度缓冲器状态以及其他状态变量。至少部分基于使用中的特定3D API来确定这些命令的值。在一些实施例中,如果将不使用某些流水线元件,则3D流水线状态930命令还能够选择性地禁用或绕过那些元件。
在一些实施例中,3D图元932命令被用来提交要由3D流水线处理的3D图元。经由3D图元932命令传递到图形处理器的命令和关联参数被转发到图形流水线中的顶点获取功能。顶点获取功能使用3D图元932命令数据来生成顶点数据结构。顶点数据结构被存储在一个或多个返回缓冲器中。在一些实施例中,3D图元932命令被用来经由顶点着色器对3D图元执行顶点操作。为处理顶点着色器,3D流水线922将着色器执行线程分派到图形处理器执行单元。
在一些实施例中,经由执行934命令或事件来触发3D流水线922。在一些实施例中,寄存器写入触发命令执行。在一些实施例中,经由命令序列中的“go”或“kick”命令来触发执行。在一个实施例中,使用用来转储清除通过图形流水线的命令序列的流水线同步命令来触发命令执行。3D流水线将执行用于3D图元的几何处理。一旦操作完成,所得到的几何对象便被光栅化,并且像素引擎对所得到的像素进行上色。对于那些操作,还可以包括用来控制像素着色和像素后端操作的另外的命令。
在一些实施例中,在执行媒体操作时,图形处理器命令序列910沿着媒体流水线924路径。一般而言,用于媒体流水线924的编程的特定使用和方式取决于要执行的媒体或计算操作。可以在媒体解码期间将特定媒体解码操作卸载到媒体流水线。在一些实施例中,还能够绕过媒体流水线,并且能够使用由一个或多个通用处理核提供的资源来全部或部分地执行媒体解码。在一个实施例中,媒体流水线还包括用于通用图形处理器单元(GPGPU)操作的元件,其中图形处理器被用于使用计算着色器程序来执行SIMD向量运算,所述计算着色器程序与图形图元的渲染不是明确相关的。
在一些实施例中,以与3D流水线922类似的方式对媒体流水线924进行配置。将用来配置媒体流水线状态940的一组命令分派或放置到在媒体对象命令942之前的命令队列中。在一些实施例中,用于媒体流水线状态940的命令包括用来配置媒体流水线元件的数据,所述媒体流水线元件将被用来处理媒体对象。这包括用来配置媒体流水线内的视频解码和视频编码逻辑的数据,诸如编码和解码格式。在一些实施例中,用于媒体流水线状态940的命令还支持使用到含有一批状态设置的“间接”状态元素的一个或多个指针。
在一些实施例中,媒体对象命令942将指针供应到媒体对象以便由媒体流水线处理。媒体对象包括存储器缓冲器,所述存储器缓冲器含有要处理的视频数据。在一些实施例中,在发布媒体对象命令942之前,所有媒体流水线状态必须是有效的。一旦配置了流水线状态,并且将媒体对象命令942排队,便经由执行命令944或等效执行事件(例如,寄存器写入)来触发媒体流水线924。然后可以通过由3D流水线922或媒体流水线924提供的操作对来自媒体流水线924的输出进行后处理。在一些实施例中,以与媒体操作类似的方式配置和执行GPGPU操作。
图形软件架构
图10图示了根据一些实施例的用于数据处理系统1000的示例性图形软件架构。在一些实施例中,软件架构包括3D图形应用1010、操作系统1020和至少一个处理器1030。在一些实施例中,处理器1030包括图形处理器1032和一个或多个通用处理器核1034。图形应用1010和操作系统1020各自在数据处理系统的系统存储器1050中执行。
在一些实施例中,3D图形应用1010含有一个或多个着色器程序,该一个或多个着色器程序包括着色器指令1012。着色器语言指令可以采用高级着色器语言,诸如Direct3D的高级着色器语言(HLSL)或OpenGL着色器语言(GLSL)等等。应用还包括采用适合由通用处理器核1034执行的机器语言的可执行指令1014。应用还包括由顶点数据定义的图形对象1016。
在一些实施例中,操作系统1020是来自微软公司的Microsoft® Windows®操作系统、专有的类UNIX操作系统或使用Linux内核的变体的开源类UNIX操作系统。操作系统1020能够支持图形API 1022,诸如Direct3D API、OpenGL API或Vulkan API。当Direct3DAPI在使用中时,操作系统1020使用前端着色器编译器1024来将采用HLSL的任何着色器指令1012编译成更低级着色器语言。编译可以是即时(JIT)编译或者应用能够执行着色器预编译。在一些实施例中,在3D图形应用1010的编译期间将高级着色器编译成低级着色器。在一些实施例中,以中间形式(诸如由Vulkan API使用的标准可移植中间表示(SPIR)的版本)提供着色器指令1012。
在一些实施例中,用户模式图形驱动器1026含有用来将着色器指令1012转换成硬件特定表示的后端着色器编译器1027。当OpenGL API在使用中时,将采用GLSL高级语言的着色器指令1012传递到用户模式图形驱动器1026以用于编译。在一些实施例中,用户模式图形驱动器1026使用操作系统内核模式功能1028来与内核模式图形驱动器1029进行通信。在一些实施例中,内核模式图形驱动器1029与图形处理器1032进行通信以分派命令和指令。
IP核实现
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性代码来实现,该代表性代码表示和/或定义诸如处理器的集成电路内的逻辑。例如,机器可读介质可以包括表示处理器内的各种逻辑的指令。在由机器读取时,指令可以促使机器制作逻辑以执行本文中描述的技术。称为“IP核”的此类表示是用于集成电路的逻辑的可重复使用单元,其可以作为对集成电路的结构进行描述的硬件模型而被存储在有形机器可读介质上。可以将硬件模型供应至各种客户或制造设施,所述客户或制造设施将硬件模型加载在制造集成电路的制作机器上。可制作集成电路,使得电路执行与本文中描述的实施例中的任何实施例关联的所描述的操作。
图11A是图示根据实施例的可被用来制造集成电路以执行操作的IP核开发系统1100的框图。IP核开发系统1100可以被用来生成能够被并入到更大的设计中或被用来构造整个集成电路(例如,SOC集成电路)的模块化、可重复使用设计。设计设施1130能够生成采用高级编程语言(例如,C/C++)的IP核设计的软件仿真1110。软件仿真1110能够被用于使用仿真模型1112来设计、测试和验证IP核的行为。仿真模型1112可以包括功能、行为和/或时序仿真。然后能够从仿真模型1112创建或合成寄存器传输级(RTL)设计1115。RTL设计1115是对硬件寄存器之间的数字信号流进行建模的集成电路的行为的抽象,包括使用建模的数字信号执行的相关联逻辑。除RTL设计1115外,还可以创建、设计或合成处于逻辑级或晶体管级的较低级设计。因此,初始设计和仿真的特定细节可以不同。
可以由设计设施将RTL设计1115或等效物进一步合成为硬件模型1120,该硬件模型1120可以采用硬件描述语言(HDL)或物理设计数据的某种其他表示。可以进一步对HDL进行仿真或测试以验证IP核设计。能够使用非易失性存储器1140(例如,硬盘、闪速存储器或任何非易失性存储介质)来存储IP核设计以用于递送到第三方制作设施1165。备选地,可以通过有线连接1150或无线连接1160(例如经由因特网)来传送IP核设计。制作设施1165然后可以制作至少部分基于IP核设计的集成电路。制作的集成电路能够被配置成执行根据本文中描述的至少一个实施例的操作。
图11B图示了根据本文中描述的一些实施例的集成电路封装组装件1170的截面侧视图。集成电路封装组装件1170图示了如本文中描述的一个或多个处理器或加速器装置的实现。封装组装件1170包括连接到衬底1180的多个硬件逻辑单元1172、1174。逻辑1172、1174可以至少部分地在可配置逻辑或固定功能性逻辑硬件中实现,并且能够包括本文中描述的(一个或多个)处理器核、(一个或多个)图形处理器或其他加速器装置中的任何装置的一个或多个部分。逻辑1172、1174的每个单元能够在半导体管芯内实现,并且经由互连结构1173与衬底1180耦合。互连结构1173可以被配置成在逻辑1172、1174与衬底1180之间路由电信号,并且能够包括互连,诸如但不限于凸块或柱。在一些实施例中,互连结构1173可以被配置成路由电信号,诸如,例如与逻辑1172、1174的操作关联的输入/输出(I/O)信号和/或功率或接地信号。在一些实施例中,衬底1180是环氧基层压衬底。在其他实施例中,衬底1180可以包括其他适合类型的衬底。封装组装件1170能够经由封装互连1183被连接到其他电装置。封装互连1183可以被耦合到衬底1180的表面,以将电信号路由到其他电装置,诸如母板、其他芯片组或多芯片模块。
在一些实施例中,逻辑单元1172、1174与桥1182电耦合,该桥1182被配置成在逻辑1172、1174之间路由电信号。桥1182可以是为电信号提供路由的密集互连结构。桥1182可以包括由玻璃或合适的半导体材料构成的桥衬底。能够在桥衬底上形成电路由特征,以在逻辑1172、1174之间提供芯片到芯片连接。
虽然图示了两个逻辑单元1172、1174和桥1182,但是本文中描述的实施例可以包括在一个或多个管芯上的更多或更少逻辑单元。由于当逻辑被包括在单个管芯上时可以排除桥1182,因此可以通过零个或多于零个桥来连接一个或多个管芯。备选的是,能够通过一个或多个桥来连接多个管芯或逻辑单元。另外,在其他可能配置(包括三维配置)中能够将多个逻辑单元、管芯和桥连接在一起。
图11C图示了包括连接到衬底1180(例如,基础管芯)的多个硬件逻辑小芯片单元的封装组装件1190。如本文中所述的图形处理单元、并行处理器和/或计算加速器能够由单独制造的多样化的硅小芯片构成。在此上下文中,小芯片是至少部分封装的集成电路,其包括能够与其他小芯片一起组装到更大封装中的不同的逻辑单元。带有不同IP核逻辑的小芯片的多样化集合能够被组装到单个装置中。另外,能够使用有源中介层技术将小芯片集成到基础管芯或基础小芯片中。本文中描述的概念实现在GPU内的不同形式的IP之间的互连和通信。能够使用不同工艺技术来制造并且在制造期间构成IP核,这避免了将多个IP(特别是在带有若干特点(flavors)IP的大的SoC上)汇聚到相同制造工艺的复杂性。使得能够使用多个工艺技术改进了推向市场的时间,并且提供了创建多个产品SKU的有成本效益的方式。另外,解聚的IP更易于被独立地功率门控,在给定工作负载上不在使用中的组件能够被断电,从而降低总体功率消耗。
硬件逻辑小芯片能够包括专用硬件逻辑小芯片1172、逻辑或I/O小芯片1174和/或存储器小芯片1175。硬件逻辑小芯片1172和逻辑或I/O小芯片1174可以至少部分地在可配置逻辑或固定功能性逻辑硬件中实现,并且能够包括(一个或多个)处理器核、(一个或多个)图形处理器、并行处理器或本文中描述的其他加速器装置中的任何一项的一个或多个部分。存储器小芯片1175能够是DRAM(例如,GDDR、HBM)存储器或高速缓冲(SRAM)存储器。
每个小芯片能够被制作为单独的半导体管芯,并且经由互连结构1173与衬底1180耦合。互连结构1173可被配置成在各种小芯片与衬底1180内的逻辑之间路由电信号。互连结构1173能够包括互连,诸如但不限于凸块或柱。在一些实施例中,互连结构1173可以被配置成路由电信号,诸如,例如与逻辑、I/O和存储器小芯片的操作关联的输入/输出(I/O)信号和/或功率或接地信号。
在一些实施例中,衬底1180是环氧基层压衬底。在其他实施例中,衬底1180可以包括其他适合类型的衬底。封装组装件1190能够经由封装互连1183连接到其他电装置。封装互连1183可以被耦合到衬底1180的表面,以将电信号路由到其他电装置,诸如母板、其他芯片组或多芯片模块。
在一些实施例中,逻辑或I/O小芯片1174和存储器小芯片1175能够经由桥1187电耦合,该桥1187被配置成在逻辑或I/O小芯片1174与存储器小芯片1175之间路由电信号。桥1187可以是为电信号提供路由的密集互连结构。桥1187可以包括由玻璃或合适的半导体材料构成的桥衬底。能够在桥衬底上形成电路由特征,以在逻辑或I/O小芯片1174与存储器小芯片1175之间提供芯片到芯片连接。桥1187还可以被称为硅桥或互连桥。例如,在一些实施例中,桥1187是嵌入式多管芯互连桥(EMIB)。在一些实施例中,桥1187可以只是从一个小芯片到另一小芯片的直接连接。
衬底1180能够包括用于I/O 1191、高速缓冲存储器1192和其他硬件逻辑1193的硬件组件。组构1185能够被嵌入在衬底1180中以实现在各种逻辑小芯片与衬底1180内的逻辑1191、1193之间的通信。在一个实施例中,I/O 1191、组构1185、高速缓存、桥和其他硬件逻辑1193能够被集成到基础管芯中,该基础管芯层叠在衬底1180的顶部上。
在各种实施例中,封装组装件1190能够包括由组构1185或一个或多个桥1187互连的更少或更多数量的组件和小芯片。封装组装件1190内的小芯片可被布置在3D或2.5D布置中。一般而言,桥结构1187可以被用来促进在例如逻辑或I/O小芯片与存储器小芯片之间的点到点互连。组构1185能够被用来将各种逻辑和/或I/O小芯片(例如,小芯片1172、1174、1191、1193)与其他逻辑和/或I/O小芯片互连。在一个实施例中,衬底内的高速缓冲存储器1192能够充当用于封装组装件1190的全局高速缓存、分布式全局高速缓存的一部分或者充当用于组构1185的专用高速缓存。
图11D图示了根据实施例的包括可互换小芯片1195的封装组装件1194。可互换小芯片1195能够被组装到一个或多个基础小芯片1196、1198上的标准化槽中。基础小芯片1196、1198能够经由桥互连1197耦合,该桥互连1197互连能够类似于本文中描述的其他桥互连,并且可以例如是EMIB。存储器小芯片还能够经由桥互连而连接到逻辑或I/O小芯片。I/O和逻辑小芯片能够经由互连组构进行通信。基础小芯片能够各自支持采用标准化格式的一个或多个槽以用于逻辑或I/O或存储器/高速缓存之一。
在一个实施例中,能够将SRAM和功率递送电路制作到基础小芯片1196、1198中的一个或多个基础小芯片中,能够相对于堆叠在基础小芯片的顶部上的可互换小芯片1195使用不同的工艺技术来制作所述基础小芯片1196、1198。例如,能够使用更大的工艺技术来制作基础小芯片1196、1198,而能够使用更小的工艺技术来制造可互换小芯片。可互换小芯片1195中的一个或多个可以是存储器(例如,DRAM)小芯片。能够基于作为使用封装组装件1194的产品的目标的功率和/或性能,为封装组装件1194选择不同存储器密度。另外,能够基于作为产品的目标的功率和/或性能,在组装时选择带有不同数量的类型的功能单元的逻辑小芯片。另外,能够将含有不同类型的IP逻辑核的小芯片插入到可互换小芯片槽中,从而实现能够混合并匹配不同技术IP块的混合处理器设计。
示例性片上系统集成电路
图12-13图示了根据本文中描述的各种实施例的可以使用一个或多个IP核来制作的示例性集成电路和相关联的图形处理器。除了所图示的内容外,还可以包括其他逻辑和电路,包括另外的图形处理器/核、外设接口控制器或通用处理器核。
图12是图示了根据实施例的可以使用一个或多个IP核来制作的示例性片上系统集成电路1200的框图。示例性集成电路1200包括一个或多个应用处理器1205(例如,CPU)、至少一个图形处理器1210,并且可以另外包括图像处理器1215和/或视频处理器1220,以上处理器中的任何处理器可以是来自相同或多个不同设计设施的模块化IP核。集成电路1200包括外设或总线逻辑,所述外设或总线逻辑包括USB控制器1225、UART控制器1230、SPI/SDIO控制器1235和I2S/I2C控制器1240。另外,集成电路能够包括耦合到高清晰度多媒体接口(HDMI)控制器1250和移动工业处理器接口(MIPI)显示接口1255中的一个或多个的显示装置1245。可以通过包括闪速存储器和闪速存储器控制器的闪速存储器子系统1260来提供存储。可以经由存储器控制器1265提供存储器接口以便访问SDRAM或SRAM存储器装置。一些集成电路另外包括嵌入式安全引擎1270。
图13-14是图示了根据本文中描述的实施例的供SoC内使用的示例性图形处理器的框图。图13图示了根据实施例的可以使用一个或多个IP核来制作的片上系统集成电路的示例性图形处理器1310。图14图示了根据实施例的可以使用一个或多个IP核来制作的片上系统集成电路的另外的示例性图形处理器1340。图13的图形处理器1310是低功率图形处理器核的示例。图14的图形处理器1340是更高性能图形处理器核的示例。图形处理器1310、1340中的每个图形处理器能够是图12的图形处理器1210的变体。
如图13中所示出的,图形处理器1310包括顶点处理器1305和一个或多个片段处理器1315A-1315N(例如,1315A、1315B、1315C、1315D直到1315N-1和1315N)。图形处理器1310能够经由单独的逻辑执行不同着色器程序,使得顶点处理器1305被优化以执行用于顶点着色器程序的操作,而一个或多个片段处理器1315A-1315N执行用于片段或像素着色器程序的片段(例如,像素)着色操作。顶点处理器1305执行3D图形流水线的顶点处理阶段,并且生成图元和顶点数据。(一个或多个)片段处理器1315A-1315N使用由顶点处理器1305生成的图元和顶点数据来产生在显示装置上显示的帧缓冲器。在一个实施例中,(一个或多个)片段处理器1315A-1315N被优化以执行如针对在OpenGL API中提供的片段着色器程序,该片段着色器程序可以被用来执行与如针对在Direct 3D API中提供的像素着色器程序相似的操作。
图形处理器1310另外包括一个或多个存储器管理单元(MMU)1320A-1320B、(一个或多个)高速缓存1325A-1325B和(一个或多个)电路互连1330A-1330B。一个或多个MMU1320A-1320B为图形处理器1310(包括为顶点处理器1305和/或(一个或多个)片段处理器1315A-1315N)提供虚拟地址到物理地址映射,这些处理器除了在一个或多个高速缓存1325A-1325B中存储的顶点或图像/纹理数据之外还可以引用在存储器中存储的顶点或图像/纹理数据。在一个实施例中,一个或多个MMU 1320A-1320B可以与系统内的其他MMU同步,所述其他MMU包括与图12的一个或多个应用处理器1205、图像处理器1215和/或视频处理器1220关联的一个或多个MMU,使得每个处理器1205-1220能够参与到共享或统一虚拟存储器系统中。根据实施例,一个或多个电路互连1330A-1330B使得图形处理器1310能够经由SoC的内部总线或者经由直接连接来与SoC内的其他IP核通过接口连接。
如图14所示出的,图形处理器1340包括图13的图形处理器1310的一个或多个MMU1320A-1320B、(一个或多个)高速缓存1325A-1325B和(一个或多个)电路互连1330A-1330B。图形处理器1340包括提供统一着色器核架构的一个或多个着色器核1355A-1355N(例如,1355A、1355B、1355C、1355D、1355E、1355F直到1355N-1和1355N),在该统一着色器核架构中单个核或单个类型的核能够执行全部类型的可编程着色器代码,包括用来实现顶点着色器、片段着色器和/或计算着色器的着色器程序代码。存在的着色器核的确切数量能够在实施例和实现之间变化。另外,图形处理器1340包括:核间任务管理器1345,该核间任务管理器1345充当用来将执行线程分派给一个或多个着色器核1355A-1355N的线程分派器;以及用来为基于贴片的渲染加速拼贴操作(tiling operation)的拼贴单元1358,在该基于贴片的渲染中,用于场景的渲染操作在图像空间中被细分,例如以利用场景内的局部空间相干性或优化内部高速缓存的使用。
用于使用本地和基于云的图形处理资源的实时图形处理的设备和方法
虽然远程图形服务器能够比典型的用户的游戏装置快得多地渲染图像帧,但存在可能影响实时游戏用户体验的其他挑战(诸如,由网络引起的时延和由于数据压缩而导致的质量变化)。对于某些类型的游戏(诸如增强现实(AR)游戏和虚拟现实(VR)游戏)要求高性能的联网平台来实现必要的时延。
本发明的实施例通过如下的过程而改进时延:在本地GPU之间划分工作负载(例如,以用于低时延计算操作),并且将其他工作卸载到远程处理资源,而不要求图形应用来管理远程连接。
在一个实施例中,远程GPU支持呈现为操作系统中的虚拟图形适配器(例如,呈现为一个或多个“幻象”GPU)。由于该集成,应用能够使用当前图形和计算API来访问幻象GPU,就像访问GPU一样。本地GPU能够在足够的本地计算可用时被充分利用,而在一个实施例中,额外的“幻象”GPU在要求额外的计算时启用。
图15A图示一个特定实现,其中图形处理资源1500包括使客户端1502通过网络1592耦合到远程处理资源1525的多个本地物理GPU 1505-1506和多个幻象GPU 1515-1517。注意到,幻象GPU 1560可以表示各种类型的流水线(包括但不限于光栅化流水线、机器学习流水线、光线追踪流水线、媒体流水线、复制流水线以及计算流水线)。因而,虽然下面的某些描述集中于某些类型的流水线,但本发明的基本原理不限于任何特定类型的图形处理资源。此外,远程处理资源1525可以包括通用处理资源,诸如CPU(例如,Xeon CPU、Core i7CPU等等)和专用加速器。例如,幻象GPU 1515-1517可以表示物理GPU 1505-1506不本机支持的处理能力(例如,诸如光线追踪能力)。
在一个实现中,幻象GPU 1515-1517和物理GPU 1505-1506两者都暴露于应用1505和/或幻象GPU感知式(ghost GPU-aware)调度器1510。在一个实施例中,应用1505管理多个命令缓冲器1511,所述命令缓冲器1511中的每个可以包括针对不同线程的工作。幻象GPU感知式调度器1510(其可以是被多个应用共享的单独的组件,而不是与如图15中所示出的一个应用一体化)基于幻象GPU和物理GPU的图形处理能力和特性(例如,时延的差异、图形处理带宽等)来跨物理GPU 1505-1506和幻象GPU 1515-1517智能地调度图形工作。例如,如果物理GPU 1505-1506具有足够的图形处理资源足以充分地执行所要求的图形工作,则幻象GPU感知式调度器可以将所有工作都发送到物理GPU 1505-1506。
在一个实施例中,该调度的至少一部分可以由远程处理资源(RPR)1525执行。如图15B中所图示的,本地调度器1510将包括一批不同类型的工作的工作请求发送到幻象GPU1560,该幻象GPU 1560将工作转发到远程处理资源1525。在一个实施例中,该请求包括工作的参数和/或要求的集合,诸如最小可接受时延、分辨率、精度等。
资源管理器1550将指示以下各项的确认传送到幻象GPU 1560:(1)资源管理器1550将根据所指定的参数/要求来处理所有工作;(2)资源管理器1550将根据所指定的参数/要求来处理一部分工作;或(3)资源管理器1550不能根据参数/要求来处理任何工作。对于已被接受的工作,资源管理器1550跨处理流水线1551-1556的适当集合(即,基于所请求的工作的类型)调度工作,并且在完成时,将结果传送回到幻象GPU 1560。在图15B中所示出的示例中,处理流水线包括:光栅化流水线1551,其用于执行图形对象的光栅化和/或相关联的操作;机器学习流水线1552,其用于执行机器学习操作(例如,混合精度融合乘积累加操作);光线追踪流水线1553,其用于执行光线追踪操作(例如,光线遍历、交叉、全局光照等等);媒体流水线1554,其用于媒体处理(例如,视频编码/解码);计算流水线1555,其用于通用并行计算操作;以及复制流水线1556,其用于执行位块传输及其他复制操作。
因此,在图15B中所示出的实施例中,工作调度的至少一部分在RPR 1525上执行。虽然在图15B中仅示出单个幻象GPU 1560,但可以使用多个这样的幻象GPU及相关联的远程处理资源。例如,图15A中的幻象GPU 1515-1517中的每个幻象GPU可以与提供RPR的不同(或相同)云服务上的处理资源的不同集合相关联。
返回到图15A,在物理GPU 1505-1506不能充分地处理图形工作的情形下,幻象GPU感知式调度器1510将一些图形工作1561卸载到幻象GPU。在此情况下,调度器1510可以对图形工作进行细分,在物理GPU 1560(由于物理GPU 1560是本地的,所以它们不具有网络引起的时延)上调度时延敏感的工作1560,并且在幻象GPU 1515-1516上调度其他图形工作。
在一个实施例中,在装置枚举阶段期间,使得幻象GPU1515-1517对于调度器1510/应用1505是可见的。然后,调度器1510/应用1505使装置实例与幻象GPU 1515-1517相关联,并且将卸载工作1561提交给那些实例。因此,从应用抽象出幻象GPU 1515-1517的“云”复杂性。
图形处理技术中的新进展虑及多个GPU的更无缝的集成。例如,新API(诸如,DX12和Vulkan)使处于API级的多个GPU暴露,给应用1505提供在更细得多的粒度下划分工作负载的灵活性。另外,新API为应用1505提供更高效地管理命令缓冲器的方式,包括异步命令缓冲器创建、命令缓冲器的记录/重放以及捆绑(bundle)。这些特征有助于减少早期API模型中的冗余命令缓冲器创建。
图16图示一个实施例的额外细节,其中应用1505管理多个线程,这些线程中的每个线程与多个命令缓冲器1611A-D中的一个命令缓冲器相关联。幻象GPU感知式调度器1510将来自命令缓冲器1611A-D的命令分别分配到幻象GPU 1515-1517的命令队列1615-1617以及安装于客户端1502上的物理GPU 1505的命令队列1605。如所提到的,幻象GPU感知式调度器1510尝试将时延敏感的工作发送到物理GPU 1505的命令队列1605。在一个实施例中,发送到幻象GPU命令队列1615-1617的工作分别由幻象GPU 1515-1517传送到远程处理资源,其中工作负载能够在GPU、CPU和/或FPGA的阵列中被执行。结果经由客户端侧上的幻象GPU1515-1517发送回到应用1505和/或物理GPU 1505。然后,结果用于构成物理GPU 1505上的帧缓冲器中的最终渲染的帧,并且一旦完成,就指导物理GPU 1505在本地显示器1590上显示该帧。
在一个实施例中,在GPU枚举阶段的期间,为应用1505提供所有GPU(包括虚拟或“幻象”GPU)的完全可见性。然后,该应用能够在这些幻象GPU上创建装置对象,并且将这些幻象GPU作为常规GPU来访问它们。在一个实施例中,该应用将工作负载发送到幻象GPU实例,以通过查询执行时间来评估总时延。基于所测量的时延,该应用能够跨不同GPU划分工作负载,并且使用本地GPU 1505来构成最终帧。将由基于云的图形处理资源1525生成的结果发送回到与幻象GPU相关联的虚拟适配器。应用1505将该结果与由本地GPU 1505(在其上构造最终帧)生成的结果组合。
备选地,在一个实现中,应用1505未感知物理GPU和虚拟GPU的异构能力,并且幻象GPU感知式调度器代表该应用执行对线程的调度。
无论哪个实体执行该调度,在一个实施例中,某些类型的容许时延的任务/线程可以被卸载到幻象GPU,而时延不敏感的任务/线程排队以便在物理GPU上执行。这些容许时延的任务/线程包括(但不限于)不在逐帧的基础上更新的那些。一个示例是使用远程处理资源来渲染动态反射映射(例如,从对象的位置渲染的立方图),游戏引擎通常不在逐帧的基础上更新该动态反射映射,而本地GPU渲染通道(pass)的剩余部分,以构成最终帧。
以下是渲染技术的示例,其容许时延并且因此可以根据本发明的实施例被卸载到幻象GPU:
Figure 956997DEST_PATH_IMAGE001
动态环境映射(反射/折射)
Figure 998771DEST_PATH_IMAGE001
间接照明/全局光照(例如,固定光场景)
Figure 778508DEST_PATH_IMAGE001
传统游戏物理(聚光线、粒子仿真、烟、织物仿真、毛发仿真)
Figure 970455DEST_PATH_IMAGE001
混合光线追踪
Figure 784828DEST_PATH_IMAGE001
基于AI的方法(例如,角色动画、通过推理的游戏物理)
Figure 607290DEST_PATH_IMAGE001
基于AI的纹理生成、模型生成、地形/地图生成
Figure 874323DEST_PATH_IMAGE001
真实空间音频处理
Figure 73224DEST_PATH_IMAGE001
基于AI的样式传输(例如,一个GPU用于渲染,并且另一GPU用于样式传输)
Figure 804419DEST_PATH_IMAGE001
替代物渲染(Imposter Rendering)
图17中的图表图示这样的场景,其中命令缓冲器1611A-D被单独并行地提交给每个GPU1515-1517、1505并且通过本地GPU 1505同步。还示出了使用来自幻象GPU 1515-1517的结果产生最终帧的结果帧时间1700。
如本文中所描述的幻象GPU还能够被现有的应用、深度学习框架以及渲染应用使用,以通过将GPU工作负载提交给幻象GPU的虚拟图形适配器而利用远程GPU能力。
在一个实施例中,生成简档,该简档指定“幻象GPU”的要求和能力,其可以包括时延值(例如,最小/最大时延值)、带宽、计算、成本以及功率。一旦设置该简档,则幻象GPU感知式调度器1510就能够考虑到这些GPU的能力和限制,将工作发送到基于边缘/云的“幻象GPU”。
虽然幻象GPU:云GPU的1:1关系可以适合于许多工作负载和编程模型,但云端任务分布可以执行不同分配,以便跨云中的可用机器和资源调度工作。可以基于要执行的工作的特性而动态地执行分配。因而,在一些实施例中,可能存在1:N(幻象GPU:云GPU)关系,其中N是包括分数值的任何值(例如,以分配GPU的虚拟化部分)。
在一个实施例中,该应用向幻象GPU命令队列或者间接执行内核提供依赖图以用于生成能够针对云队列提交的云侧命令缓冲器。这些技术虑及供应商特定的分布(基于平铺(tiling)、分割渲染(split rendering)、交替帧渲染等)或用户引导的提交方案以用于在云中持续生成并且消费工作。
图18图示在客户端机器上创建并且使用幻象GPU的实施例。GPU配置和控制模块或应用1801(例如,幻象GPU创建器应用)允许用户将幻象GPU指定给幻象GPU生成器1802,该GPU生成器1802与操作系统1803通信以在该系统中注册三个幻象GPU。在一个实施例中,每个幻象GPU包括到云服务的链路。然而,所注册的幻象GPU被客户端的装置管理器1810 对待作为另一物理GPU。在该示例中,在装置管理器1810内示出三个幻象GPU适配器1811。
在应用1505要求对图形处理资源的访问时,该应用能够在GPU枚举阶段1804期间查看包括幻象GPU 1811的所有可用GPU。现在,应用1505能够在这些幻象GPU 1811上创建装置对象,并且将这些幻象GPU 1811作为常规GPU来访问它们。该应用还能够将工作负载发送到幻象GPU实例,以通过查询执行时间来评估总时延。
在图19中图示根据本发明的一个实施例的方法。该方法可以在上述架构的上下文内实现,但不限于任何特定系统、架构。
在1901,一个或多个幻象GPU被注册并且配置于包括一个或多个物理GPU的系统上。如所提到的,这可能涉及安装与幻象GPU相关联的虚拟适配器或驱动器,使得它们表现为该系统内的真实GPU。
在1902,幻象GPU和(一个或多个)物理GPU在该系统中被枚举(例如,响应于应用)。在1903,执行具有多个图形线程的应用。如所提到的,在一些实现中,每个图形线程可以被指派其自身的命令队列,该命令队列可以指派给特定GPU。
在1904,考虑与幻象GPU相关联的执行度量来评估图形线程的执行参数。例如,执行参数可以包括图形线程的最大时延和/或带宽要求的指示,并且幻象GPU度量还可以包括与时延和/或带宽有关的数据(例如,平均时延/带宽、基于当前网络状况的当前时延/带宽等)。
在1905,基于该评估,调度某些图形线程,以用于在幻象GPU上执行。例如,如果幻象GPU能够以可接受时延生成线程的结果,则这些线程可以被调度在幻象GPU上,从物理GPU卸载工作。剩余线程被调度在物理GPU上。
在1906,幻象GPU线程被卸载到指定的云服务,其中幻象GPU线程在云服务上被图形处理资源执行。如所提到的,图形处理资源可以包括专门的硬件(例如,光线遍历/交叉硬件、张量执行硬件、全局光照硬件等),并且可以包括CPU、GPU和/或FPGA。结果被云服务提供给幻象GPU,该幻象GPU将结果转发到应用和/或物理GPU。在1907,物理GPU使用结果来生成最终帧,该最终帧被显示在本地显示装置上。
这些实施例所提供的一个优点是,通常能够跨计算资源简单地划分的一些任务(诸如,光线追踪)现在具有位于云上的逻辑实体以促进负载平衡。在分割渲染场景中,该应用不需要感知远程渲染支持。而是,该应用仅需要知道幻象GPU存在并且理解幻象GPU的能力(例如,与各种类型的图形处理相关联的处理度量,包括时延)。
在本发明的一个实施例中,该应用利用多GPU感知API(诸如,DX12或Vulkan)来不同步地创建命令缓冲器并且将它们提交给相应的GPU(本地物理GPU或幻象GPU)。
如图20A中所图示的,可以实现幻象GPU的多层架构。特别地,客户端2010基于如上所述的幻象GPU配置来访问边缘服务2020的处理资源。在该示例中,客户端2010可以包括本地GPU和幻象GPU或可以仅包括幻象GPU(即,不具有本地GPU硬件)。如本文中所使用的,“边缘”服务包括在网络时延方面最接近客户端2010(例如,直接托管在客户端的互联网服务提供商网络或5G网络(在蜂窝提供商的情况下)内)的远程服务。在该实施例中,边缘服务2020包括物理GPU,但还可以包括与一个或多个云服务2030内的远程处理资源相关联的幻象GPU。使用该架构,边缘服务2020内的资源管理器可以评估客户端请求,以确定该资源管理器是将本身执行该处理还是将该处理卸载到云服务2030内的处理资源。
在上述实施例中的任何实施例中,“幻象GPU”或物理GPU可以是幻象xPU或物理xPU,其中,xPU表示处理任何类型的数据处理工作或将其卸载到远程处理器的任何形式的处理器(例如,CPU、数字信号处理单元、张量处理单元、光线追踪处理单元、向量处理单元等)。图20B图示一个实施例,其中客户端2050配备有用于卸载工作的一个或多个幻象xPU,并且可选地配备有一个或多个本地xPU(即,客户端可以具有或可以不具有用于执行处理工作的物理xPU)。类似地,边缘服务2060包括本地xPU和幻象xPU,并且进一步沿层级向上,云服务2070可以包括本地xPU和幻象xPU。例如,在一个实施例中,客户端2010上的向量处理单元(VPU)分配额外的幻象xPU,以执行与VPU类似的计算工作。
在一个实现中,资源管理器将基于与客户端请求相关联的参数和/或时延要求来作出该确定。例如,如果边缘服务2020能够在所指定的时延内并且根据所指定的参数来处理该请求,则该边缘服务2020将在将请求卸载到云服务2030将超过时延的情况下这样做。然而,较高时延是可接受的和/或要求专门的平台(例如,量子计算平台)的某些类型的工作可以经由配置于边缘服务上的幻象GPU而卸载到云服务2030。以此方式,处理资源和幻象GPU的多个层级可以配置成在本地处理工作并且卸载能够被卸载的工作。
另外,额外的层级可以配置于用户的家内。例如,用户的家内的强大的服务器可以服务于多个客户端。该服务器可以包括用来将工作卸载到用户的网络提供商的一个或多个幻象GPU。网络提供商可以执行全部或一些工作,并且经由其自身的幻象GPU来将某些工作卸载到云服务。最终,每个云服务可以本身包括幻象GPU以将工作卸载到其他云服务。
各种参数可以与每个卸载请求相关联。例如,可以与时延和/或性能组合来评估使用远程处理资源的成本。例如,请求可以指定最大时延、最低性能以及最大可允许成本值。然后,客户端2010或边缘服务2020上的调度器可以确定如何分布工作以在使成本最小化的同时满足时延和性能要求。
如所提到的,除了图形工作之外,本发明的实施例还可以卸载其他类型的工作,包括(但不限于)光线追踪操作和机器学习操作。本专利申请的剩余部分提供这些额外的类型的工作的具体示例。
带有机器学习的光线追踪
如上文提到的,光线追踪是一种图形处理技术,其中通过基于物理的渲染来对光传输进行仿真。光线追踪中的关键操作之一是处理可见性查询,该可见性查询要求包围体层级(BVH)中的节点的遍历和交叉测试。
基于光线追踪和路径追踪的技术通过追踪通过每个像素的光线和路径以及使用随机采样计算诸如阴影、光泽度、间接光照等高级效果来计算图像。只使用几个样本是快速的,但产生有噪图像,而使用许多样本产生高质量图像,但成本过高。
机器学习包括能够逐渐改善指定任务的性能或逐渐呈现更准确的预测或决定的任何电路、程序代码或其组合。一些机器学习引擎可执行这些任务或呈现这些预测/决定,而不明确编程成执行任务或呈现预测/决定。存在各种机器学习技术,包括(但不限于)监督和半监督学习、无监督学习和强化学习。
在最近几年中,用于针对实时使用的光线追踪/路径追踪的突破性技术方案已经以“去噪”(使用图像处理技术来从有噪、低样本计数输入中产生高质量的滤波/去噪的图像的过程)的形式出现。最有效的去噪技术依赖于机器学习技术,其中机器学习引擎对如果有噪图像已利用更多样本而被计算则它将可能看起来像什么进行学习。在一个特定实现中,机器学习由卷积神经网络(CNN)执行;然而,本发明的根本原理不限于CNN实现。在这样的实现中,用低样本计数输入和地面真值(ground-truth)产生训练数据。CNN被训练以根据所讨论的像素周围的有噪像素输入的邻域来预测收敛像素。
虽然不完美,但该基于AI的去噪技术已被证明出奇有效。然而,要注意的是,要求良好的训练数据,因为否则网络可能预测错误的结果。例如,如果动画电影工作室在具有陆地上的场景的过去电影上训练去噪CNN并且然后试图使用该经过训练的CNN对来自设置在水上的新电影的帧进行去噪,则去噪操作将表现欠佳。
为了解决该问题,本发明的一个实施例在渲染时动态收集学习数据,并且基于机器学习引擎(诸如CNN)当前运行所针对的数据来持续训练该机器学习引擎,从而为了即将到来的任务而持续改进机器学习引擎。该实施例仍然可以在运行时间之前执行训练阶段,但在运行时间期间根据需要持续调整机器学习权重。附加地,该实施例通过将学习数据的生成限制到每个帧或每N个帧的图像的子区域而避免了计算训练所要求的参考数据的高成本。特别地,生成帧的有噪输入,以用于利用当前网络对完全帧进行去噪。附加地,生成小区域的参考像素并且将其用于持续训练,如下文描述的那样。
尽管关于某些实施例描述了CNN实现,但可以使用任何形式的机器学习引擎,包括但不限于执行监督学习(例如,构建含有输入和期望输出的一组数据的数学模型)、无监督学习(例如,其对某些类型的结构评估输入数据)和/或监督和无监督学习的组合的系统。
现有的去噪实现在训练阶段和运行时间阶段操作。在训练阶段期间,定义网络拓扑,该网络拓扑接收具有诸如像素颜色、深度、法线、法线偏差、图元ID和反射率之类的各种每像素数据通道的N×N个像素的区域,并且生成最终像素颜色。使用相当于一个帧的低样本计数输入来生成一组“代表性”训练数据,并且参考利用非常高样本计数来计算的“期望”像素颜色。向着这些输入来训练网络,从而为网络生成一组“理想”权重。在这些实现中,参考数据用于训练网络的权重,以使网络的输出最接近地与期望结果匹配。
在运行时间,加载给定的经预先计算的理想网络权重并且使网络初始化。对于每个帧,生成去噪输入(即,与用于训练的一样)的低样本计数图像。对于每个像素,像素的输入的给定邻域通过网络来运行以预测“去噪”像素颜色,从而生成去噪帧。
图21图示了初始训练实现的一个实施例。机器学习引擎2100(例如,CNN)接收N×N个像素的区域作为具有诸如像素颜色、深度、法线、法线偏差、图元ID和反射率之类的各种每像素数据通道的高样本计数图像数据2102,并且生成最终像素颜色。使用相当于一个帧的低样本计数输入2101生成代表性训练数据。向着这些输入来训练网络,从而生成一组“理想”权重2105,机器学习引擎2100随后将该组“理想”权重2105用于在运行时间对低样本计数图像去噪。
为了改进上文的技术,本发明的一个实施例增强了去噪阶段以每帧或帧的子集(例如,每N个帧,其中N=2、3、4、10、25等)生成新的训练数据。特别地,如在图22中图示的,该实施例在每个帧中选择一个或多个区域,其在这里称为“新参考区域”2202,用高样本计数将该新参考区域2202渲染到单独的高样本计数缓冲器2204中。低样本计数缓冲器2203存储低样本计数输入帧2201(包括对应于新参考区域2202的低样本区域2204)。
在一个实施例中,随机选择新参考区域2202的位置。备选地,新参考区域2202的位置可以对每个新帧采用预先指定的方式(例如,使用帧之间的区域的预定义移动,限于帧的中心中的指定区域等)来调整。
不管如何选择新参考区域,它都被机器学习引擎2200用来持续改善和更新用于去噪的经过训练的权重2205。特别地,来自每个新参考区域2202的参考像素颜色和来自对应低样本计数区域2207的有噪参考像素输入被渲染。然后使用高样本计数参考区域2202和对应的低样本计数区域2207对机器学习引擎2200执行补充训练。与初始训练形成对比,在运行时间期间对每个新参考区域2202持续执行该训练——由此确保机器学习引擎2200被精确训练。例如,可以评估每像素数据通道(例如,像素颜色、深度、法线、法线偏差等),机器学习引擎2200使用这些每像素数据通道来对经过训练的权重2205进行调整。正如在训练情况(图21)中一样,向着一组理想权重2205训练机器学习引擎2200,以用于从低样本计数输入帧2201去除噪声以生成去噪帧2220。然而,在该实施例中,基于新类型的低样本计数输入帧2201的新图像特性,经过训练的权重2205被持续更新。
在一个实施例中,由机器学习引擎2200执行的重新训练操作在图形处理器单元(GPU)或主机处理器上在后台进程中并发执行。可以被实现为驱动器组件和/或GPU硬件组件的渲染循环持续产生新的训练数据(例如,采用新参考区域2202的形式),该渲染循环将该新的训练数据置于队列中。在GPU或主机处理器上执行的后台训练进程持续从该队列读取新的训练数据、重新训练机器学习引擎2200并且以适当的间隔用新的权重2205来更新它。
图23图示其中后台训练进程2300由主机CPU2310实现的一个这样的实现的示例。特别地,在该实施例中,后台训练进程2300使用高样本计数新参考区域2202和对应的低样本区域2204来持续更新经过训练的权重2205,由此更新机器学习引擎2200。
如图24A中图示的,在一个实现中,诸如在多玩家在线游戏中,不同的主机2420-2422单独地生成参考区域,后台训练进程2300A-C将这些参考区域传送到服务器2400(例如,诸如游戏服务器)。服务器2400然后使用从主机2421-2422中的每个主机接收的新参考区域对机器学习引擎2410执行训练,如之前描述的那样更新权重2405。它将这些权重2405传送到存储权重2205A-C的主机2420,由此更新每个单独机器学习引擎(未示出)。因为可以在短时间段中向服务器2400提供大量参考区域,因此它可高效且精确地对由用户执行的任何给定应用(例如,在线游戏)更新权重。
如图24B中图示的,不同的主机可以生成新的经过训练的权重(例如,基于如之前描述的训练/参考区域2202)并且与服务器2400(例如诸如游戏服务器)共享新的经过训练的权重,或者备选地,使用对等共享协议。服务器上的机器学习管理组件2410使用从主机中的每个主机接收的新的权重生成一组组合权重2405。组合权重2405例如可以是从新权重生成并且如本文描述的那样被持续更新的平均值。一旦生成,组合权重2205A-C的副本就可以被传送并且存储在主机2420-2421中的每个主机上,所述主机2420-2421然后可以使用如本文描述的组合权重来执行去噪操作。
在一个实施例中,该半闭环更新机构可被硬件制造商使用。例如,可以包括参考网络作为由硬件制造商分布的驱动器的部分。在驱动器使用本文描述的技术来生成新的训练数据并且将这些持续提交回硬件制造商时,硬件制造商使用该信息来针对下一驱动器更新继续改进它的机器学习实现。
在一个实现中(例如,在渲染场上的批量电影渲染中),渲染器将新生成的训练区域传送到专用服务器或数据库(在该工作室的渲染场中),该专用服务器或数据库随着时间推移聚集来自多个渲染节点的该数据。单独机器上的单独进程持续改进工作室的专用去噪网络,并且新的渲染作业总是使用最新的经过训练的网络。
根据本发明的一个实施例的方法在图25中图示。该方法可以在本文描述的架构上实现,但不限于任何特定系统或图形处理架构。
在2501,作为初始训练阶段的部分,对多个图像帧生成低样本计数图像数据和高样本计数图像数据。在2502,使用高/低样本计数图像数据训练机器学习去噪引擎。在一个实施例中,例如,与像素特征相关联的一组卷积神经网络权重可以根据训练被更新。然而,可以使用任何机器学习架构。
在2503,在运行时间,生成低样本计数图像帧连同具有高样本计数的至少一个参考区域。在2504,高样本计数参考区域被机器学习引擎和/或单独训练逻辑(例如,后台训练模块2300)用来持续改善机器学习引擎的训练。例如,在一个实施例中,高样本计数参考区域与低样本计数图像的对应部分结合使用以持续教导机器学习引擎2504如何最有效地执行去噪。在CNN实现中,例如,这可以涉及更新与CNN相关联的权重。
可以实现上文描述的实施例的多个变体,诸如将反馈环路配置到机器学习引擎的所采用的方式、生成训练数据的实体、将训练数据反馈给训练引擎所采用的方式以及如何向渲染引擎提供经改进的网络。附加地,尽管上文描述的以上实施例使用单个参考区域执行持续训练,但可以使用任何数量的参考区域。而且,如之前提到的,参考区域可以具有不同大小,可以在不同数量的图像帧上使用,并且可以使用不同技术(例如,随机、根据预定模式等)被定位在图像帧内的不同位置中。
附加地,尽管卷积神经网络(CNN)被描述为机器学习引擎2200的一个示例,但本发明的根本原理可以使用任何形式的机器学习引擎(其能够使用新的训练数据持续改善它的结果)来实现。通过示例且非限制的方式,其他机器实现包括数据处理分组方法(GMDH)、长期短期记忆、深度储备池计算(deep reservoir computing)、深度信念网络、张量深度堆叠网络和深度预测编码网络仅列举几种。
用于高效分布式去噪的装置和方法
如上文描述的,去噪已变成利用平滑、无噪图像的实时光线追踪的关键特征。可跨多个装置上的分布式系统进行渲染,但迄今为止现有的去噪框架全部对单个机器上的单个实例进行操作。如果跨多个装置进行渲染,则它们可能不具有可访问以用于计算图像的去噪部分的所有经渲染的像素。
本发明的一个实施例包括与基于人工智能(AI)和非AI的去噪技术一起工作的分布式去噪算法。已经从分布式渲染操作跨节点分布图像的区域,或者从单个帧缓冲器划分和分布图像的区域。在需要时从相邻节点收集计算充分去噪所需要的相邻区域的重影区域,并且最终所得的贴片组合成最终图像。
分布式处理
图26图示了本发明的一个实施例,其中多个节点2621-2623执行渲染。尽管为了简单起见只图示了三个节点,但本发明的根本原理不限于任何特定数量的节点。实际上,单个节点可以用于实现本发明的某些实施例。
节点2621-2623各自渲染图像的一部分,从而在该示例中产生区域2611-2613。尽管在图26中示出矩形区域2611-2613,但可使用具有任何形状的区域并且任何装置可处理任何数量的区域。节点执行足够平滑的去噪操作所需要的区域被称为重影区域2611-2613。也就是说,重影区域2601-2603表示以指定的质量水平执行去噪所要求的全部数据。降低质量水平使重影区域的大小减少并且因此使所要求的数据量减少,并且提升质量水平使重影区域和所要求的对应数据增加。
在一个实施例中,如果诸如节点2621的节点确实具有以指定质量水平使它的区域2611去噪所要求的重影区域2601的一部分的本地副本,则节点将从一个或多个“邻近”节点检索所要求的数据,该一个或多个邻近节点诸如节点2622,其拥有如图示的重影区域2601的一部分。相似地,如果节点2622确实具有以指定质量水平使它的区域2612去噪所要求的重影区域2602的一部分的本地副本,则节点2622将从节点2621检索所要求的重影区域数据2632。检索可以通过总线、互连、高速存储器组构、网络(例如,高速以太网)执行,或可以甚至是能够在多个节点当中分配渲染工作的多核芯片中的片上互连(例如,用于以极端分辨率或时间变化来渲染大的图像)。在一个实施例中,每个节点2621-2623包括图形处理器内的单独执行单元或执行单元的指定集合。
要发送的特定数据量取决于在使用的去噪技术。而且,来自重影区域的数据可以包括改进每个相应区域的去噪所需要的任何数据。在一个实施例中,例如,重影区域数据包括图像颜色/波长、强度/阿尔法数据和/或法线。然而,本发明的根本原理不限于重影区域数据的任何特定集合。
一个实施例的附加细节
对于较慢网络或互连,可使用现有的通用无损或有损压缩来利用该数据的压缩。示例包括但不限于zlib、gzip和Lempel-Ziv-Markov链算法(LZMA)。通过注意到帧之间的光线命中信息中的增量(delta)可能非常稀疏,可以使用进一步的内容特定压缩,并且在节点已经具有从先前帧收集的增量时只需要发送对该增量有贡献的样本。这些可被选择性地推送到收集那些样本的节点i,或节点i可请求来自其他节点的样本。在一个实施例中,无损压缩用于某些类型的数据和程序代码,而有损数据用于其他类型的数据。
图27图示了根据本发明的一个实施例的节点2621-2622之间的交互的附加细节。每个节点2621-2622包括用于渲染相应的图像区域2611-2612和重影区域2601-2602的光线追踪渲染电路2681-2682。去噪器2700-2711分别对区域2611-2612执行去噪操作,该每个节点2621-2622负责渲染和去噪。去噪器2621-2622例如可以包括电路、软件或其任何组合,以分别生成去噪区域2721-2722。如提到的,在生成去噪区域时,去噪器2621-2622可需要依靠由不同节点拥有的重影区域内的数据(例如,去噪器2700可需要来自由节点2622拥有的重影区域2602的数据)。
从而,在一个实施例中,去噪器2700-2711分别使用来自区域2611-2612和重影区域2601-2602的数据生成去噪区域2721-2722,该数据的至少一部分可以从另一个节点接收。区域数据管理器2701-2702管理来自重影区域2601-2602的数据传输,如本文描述那样。在一个实施例中,压缩器/解压器单元2731-2732分别执行在节点2621-2622之间交换的重影区域数据的压缩和解压。
例如,节点2621的区域数据管理器2701可以在从节点2622请求时将来自重影区域2601的数据发送到压缩器/解压器2731,该压缩器/解压器2731压缩数据来生成它传送到节点2622的经压缩的数据2706,由此减少互连、网络、总线或其他数据通信链路上的带宽。节点2622的压缩器/解压器2732然后对经压缩的数据2706解压并且去噪器2711使用经解压的重影数据来生成比仅利用来自区域2612的数据将可能的质量更高的去噪区域2612。区域数据管理器2702可以将经解压的来自重影区域2601的数据存储在高速缓存、存储器、寄存器堆或其他存储设备中以使得它在生成去噪区域2722时对去噪器2711可用。可以执行操作的类似集合来将来自重影区域2602的数据提供给节点2621上的去噪器2700,该去噪器2700使用该数据结合来自区域2611的数据以生成更高质量的去噪区域2721。
抓取数据或渲染
如果诸如节点2621-2622之类的装置之间的连接是慢的(即,低于阈值时延和/或阈值带宽),则可能更快的是在本地渲染重影区域而不是请求来自其他装置的结果。这可在运行时间通过追踪网络事务速度并且针对重影区域大小而线性外推的渲染次数来确定。在渲染出整个重影区域更快的此类情况下,多个装置可以最终以渲染图像的相同部分。重影区域的经渲染部分的分辨率可以基于基本区域的方差和所确定的模糊程度来调整。
负载平衡
在一个实施例中,静态和/或动态负载平衡方案可以用于在各种节点2621-2623当中分布处理负载。对于动态负载平衡,由去噪滤波器确定的方差可能在去噪中要求更多时间,但驱动用来渲染场景的特定区域的样本量,其中图像的低方差和模糊区域要求较少样本。指派给特定节点的特定区域可以基于来自先前帧的数据而被动态调整或者在装置正在渲染时跨装置被动态传递,使得所有装置将具有相同量的工作。
图28图示其中在每个相应节点2621-2622上运行的监视器2801-2802收集性能度量数据的一个实施例,该性能度量数据包括但不限于通过网络接口2811-2812传送数据消耗的时间、在使区域(具有和没有重影区域数据)去噪时消耗的时间以及渲染每个区域/重影区域消耗的时间。监视器2801-2802将这些性能度量报告回管理器或负载平衡器节点2801,该管理器或负载平衡器节点2801分析数据来标识每个节点2621-2622上的当前工作负载并且潜在地确定处理各种去噪区域2721-2722的更高效模式。管理器节点2801然后根据所检测的负载将对于新区域的新工作负载分配到节点2621-2622。例如,管理器节点2801可以向负载不重的那些节点传送更多工作和/或从过载的那些节点重新分配工作。附加地,负载平衡器节点2801可以传送重配置命令来调整由节点中的每个节点执行渲染和/或去噪所采用的特定方式(其一些示例在上文被描述)。
确定重影区域
在一个实施例中,基于由去噪器2700-2711实现的去噪算法来确定重影区域2601-2602的大小和形状。它们的相应大小然后可基于正在被去噪的样本的所检测的方差而被动态修改。用于AI去噪的学习算法本身可以用于确定合适的区域大小,或在诸如双向模糊之类的其他情况下,预定滤波器宽度将确定重影区域2601-2602的大小。在使用学习算法的实现中,机器学习引擎可以在管理器节点2801上执行和/或机器学习的部分可以在各个节点2621-2623中的每个节点上执行(参见例如图24A-B和上文的相关联文本)。
收集最终图像
在一个实施例中,通过从节点2621-2623中的每个节点收集经渲染和去噪的区域来生成最终图像而无需重影区域或法线。在图28中,例如,将去噪区域2721-2722传送到管理器节点2801的区域处理器2880,其将区域组合来生成最终去噪图像2890,该最终去噪图像2890然后在显示器2890上显示。区域处理器2880可以使用各种2D合成技术来将区域组合。虽然被图示为单独的组件,但区域处理器2880和去噪图像2890可以与显示器2890一体化。在该实施例中,各种节点2621-2622可以使用直接发送技术来传送去噪区域2721-2722并且潜在地使用区域数据的各种有损或无损压缩。
AI去噪仍然是高成本操作并且随着游戏移进云中。这样,可以变得要求将去噪的处理跨多个节点2621-2622分布以便为要求较高帧率的传统游戏或虚拟现实(VR)实现实时帧率。电影工作室经常还在可被利用于较快去噪的大型渲染场中渲染。
在图29中图示用于执行分布式渲染和去噪的方法的一个实施例。可以在上文描述的系统架构的上下文内实现该方法,但不限于任何特定系统架构。
在2901,向执行光线追踪操作来渲染图像帧的区域的多个节点分派图形工作。在一个实施例中,每个节点可已经在存储器中具有执行操作所要求的数据。例如,节点中的两个或多于两个节点可以共享公共存储器或节点的本地存储器可已经存储了来自之前光线追踪操作的数据。备选地,或附加地,某些数据可以被传送到每个节点。
在2902,确定指定去噪水平(即,在可接受的性能水平)所要求的“重影区域”。重影区域包括执行指定去噪水平所要求的任何数据,包括由一个或多个其他节点拥有的数据。
在2903,在节点之间交换与重影区域(或其部分)有关的数据。在2904,每个节点对它的相应区域执行去噪(例如,使用经交换的数据)并且在2905组合结果来生成最终去噪图像帧。
在一个实施例中,诸如图28中示出的管理器节点或主节点向节点分派工作并且然后将由节点执行的工作组合来生成最终图像帧。在另一实施例中,使用基于对等的架构,其中节点是交换数据来渲染最终图像帧并且将最终图像帧去噪的对等。
本文描述的节点(例如,节点2621-2623)可以是经由高速网络互连的图形处理计算系统。替换地,节点可以是耦合至高速存储器组构的各个处理元件。在该实施例中,全部节点可以共享公共虚拟存储器空间和/或公共物理存储器。在另一实施例中,节点可以是CPU和GPU的组合。例如,上文描述的管理器节点2801可以是CPU和/或在CPU上执行的软件并且节点2621-2622可以是GPU和/或在GPU上执行的软件。可以使用各种不同类型的节点,同时仍然遵从本发明的根本原理。
示例神经网络实现
存在许多类型的神经网络;简单类型的神经网络是前馈网络。前馈网络可以实现为其中节点按层布置的非循环图。通常,前馈网络拓扑包括被至少一个隐含层分开的输入层和输出层。隐含层将由输入层接收的输入变换为对在输出层中生成输出有用的表示。网络节点经由到邻近层中的节点的边缘而完全连接,但在每个层内的节点之间没有边缘。在前馈网络的输入层的节点处接收的数据经由激活函数被传播(即,“前馈”)到输出层的节点,该激活函数基于分别与连接层的边缘中的每个边缘相关联的系数(“权重”)来计算网络中每个连续层的节点的状态。根据在执行的算法所表示的特定模型,来自神经网络算法的输出可采取各种形式。
在机器学习算法可用于对特定问题建模之前,使用训练数据集来训练算法。训练神经网络涉及选择网络拓扑、使用代表正被网络建模的问题的一组训练数据以及调整权重直到网络模型对训练数据集的所有实例以最小误差执行。例如,在对神经网络的监督学习训练过程期间,由网络响应于代表训练数据集中的实例的输入而产生的输出与该实例的“正确的”经标记输出比较,计算代表输出与经标记输出之间的差异的误差信号,并且调整与连接相关联的权重以在误差信号通过网络的层向后传播时使该误差最小化。在从训练数据集的实例生成的输出中的每个输出的误差被最小化时,网络被认为“经过训练”。
机器学习算法的精确性可明显受到用于训练算法的数据集的质量影响。训练过程可以是计算密集的并且在常规的通用处理器上可能要求大量时间。因此,并行处理硬件用于训练许多类型的机器学习算法。这对于优化神经网络的训练特别有用,因为在调整神经网络中的系数中执行的计算自然地适用于并行实现。特别地,许多机器学习算法和软件应用已经适于在通用图形处理装置内利用并行处理硬件。
图30是机器学习软件栈3000的通用图。机器学习应用3002可配置成使用训练数据集来训练神经网络或使用经过训练的深度神经网络来实现机器智能。机器学习应用3002可包括能够用于在部署之前训练神经网络的专用软件和/或神经网络的训练和推理功能性。机器学习应用3002可实现任何类型的机器智能,包括但不限于图像识别、地图绘制和定位、自主导航、语音合成、医学成像或语言翻译。
可经由机器学习框架3004而实现对于机器学习应用3002的硬件加速。机器学习框架3004可以提供机器学习原语(machine learning primitive)的库。机器学习原语是机器学习算法通常执行的基本操作。在没有机器学习框架3004的情况下,将要求机器学习算法的开发人员创建和优化与机器学习算法相关联的主要计算逻辑,然后在开发新的并行处理器时重新优化计算逻辑。代替地,机器学习应用可配置成使用机器学习框架3004提供的原语来执行必要的计算。示例性原语包括张量卷积、激活函数和池化,它们是在训练卷积神经网络(CNN)时执行的计算操作。机器学习框架3004还可提供用来实现由许多机器学习算法执行的基本线性代数子程序(诸如矩阵和向量运算)的原语。
机器学习框架3004可处理从机器学习应用3002接收的输入数据并且生成到计算框架3006的合适输入。计算框架3006可抽象提供给GPGPU驱动器3008的底层指令以使机器学习框架3004能够经由GPGPU硬件3010利用硬件加速而不要求机器学习框架3004具有对GPGPU硬件3010的架构的深入了解。附加地,计算框架3006可跨各种类型和世代的GPGPU硬件3010对机器学习框架3004实现硬件加速。
GPGPU机器学习加速
图31图示了根据实施例的多GPU计算系统3100。该多GPU计算系统3100可包括处理器3102,其经由主机接口切换装置3104而耦合至多个GPGPU 3106A-D。在一个实施例中,主机接口切换装置3104是PCI express切换装置,其将处理器3102耦合至PCI express总线,处理器3102可通过该PCI express总线与该组GPGPU 3106A-D通信。多个GPGPU 3106A-D中的每个GPGPU可以是上文描述的GPGPU的实例。GPGPU 3106A-D可以经由一组高速点到点GPU到GPU链路3116而互连。高速GPU到GPU链路可经由专用GPU链路连接到GPGPU 3106A-D中的每个GPGPU。P2P GPU链路3116使得能够在GPGPU 3106A-D中的每个GPGPU之间实现直接通信而不要求通过处理器3102所连接到的主机接口总线通信。利用指向P2P GPU链路的GPU到GPU业务,主机接口总线保持可用于系统存储器访问或例如经由一个或多个网络装置与多GPU计算系统3100的其他实例通信。尽管在图示的实施例中GPGPU 3106A-D经由主机接口切换装置3104连接到处理器3102,但在一个实施例中,处理器3102包括对P2P GPU链路3116的直接支持并且可直接连接到GPGPU 3106A-D。
机器学习神经网络实现
本文描述的实施例提供的计算架构可配置成执行特别适合于训练和部署神经网络以用于机器学习的类型的并行处理。神经网络可概括为具有图表关系的功能的网络。如本领域中公知的,存在在机器学习中使用的各种类型的神经网络实现。一个示例性类型的神经网络是前馈网络,如之前描述的。
第二个示例性类型的神经网络是卷积神经网络(CNN)。CNN是用于处理具有已知的网格状拓扑的数据(诸如图像数据)的专门的前馈神经网络。因此,CNN通常用于计算视觉和图像识别应用,但它们也可用于其他类型的模式识别,诸如语音和语言处理。CNN输入层中的节点被组织为一组“过滤器(filter)”(受在视网膜中发现的接受域启发的特征检测器),并且每组过滤器的输出被传播到网络的连续层中的节点。CNN的计算包括对每个过滤器应用卷积数学运算来产生该过滤器的输出。卷积是由两个函数执行来产生第三函数的专门类型的数学运算,该第三函数是该两个原始函数中的一个的修改版本。在卷积网络术语中,到卷积的第一函数可称为输入,而第二函数可称为卷积内核。输出可称为特征图。例如,到卷积层的输入可以是定义输入图像的各种颜色分量的数据的多维阵列。卷积内核可以是参数的多维阵列,其中这些参数通过对于神经网络的训练过程而被适配。
循环神经网络(RNN)是一系列前馈神经网络,其包括层之间的反馈连接。RNN通过跨神经网络的不同部分共享参数数据而实现对顺序数据的建模。RNN的架构包括循环。循环代表变量的当前值在未来时间对它自身的值的影响,因为来自RNN的输出数据的至少一部分被用作反馈以用于处理序列中的后续输入。由于其中能够组成语言数据的可变性质,该特征使得RNN 对于语言处理特别有用。
下文描述的图呈现示例性前馈、CNN和RNN网络,以及描述用于分别训练和部署那些类型的网络中的每种网络的一般过程。将理解这些描述关于本文描述的任何特定实施例是示例性且非限制性的并且所说明的概念一般大体上可适用于深度神经网络和机器学习技术。
上文描述的示例性神经网络可用于执行深度学习。深度学习是使用深度神经网络的机器学习。在深度学习中使用的深度神经网络是由多个隐含层组成的人工神经网络,这与只包括单个隐含层的浅层神经网络相反。更深的神经网络通常训练更计算密集。然而,网络的附加隐含层实现多步模式识别,其相对于浅层机器学习技术导致减少的输出误差。
在深度学习中使用的深度神经网络通常包括用于执行特征识别的前端网络,其耦合至后端网络,该后端网络代表可基于提供给模型的特征表示来执行操作(例如,对象分类、语音识别等)的数学模型。深度学习使机器学习能够被执行而不要求对模型执行手工特征工程。代替地,深度神经网络可基于输入数据内的统计结构或相关性来学习特征。学得的特征可提供给数学模型,其可将所检测的特征映射到输出。网络所使用的数学模型一般专门针对要执行的特定任务,并且不同的模型将用于执行不同任务。
一旦神经网络被构造,学习模型就可应用于网络来训练网络以执行特定任务。学习模型描述了如何调整模型内的权重来减少网络的输出误差。误差的后向传播是用于训练神经网络的常见方法。向网络呈现输入向量以用于处理。使用损失函数将网络的输出与期望输出比较并且对输出层中的神经元中的每个神经元计算误差值。这些误差值然后被向后传播直到每个神经元具有相关联的误差值,其大致表示它对原始输出的贡献。网络然后可使用算法(诸如随机梯度下降算法)从那些误差中学习,以更新神经网络的权重。
图32-33图示了示例性卷积神经网络。图32图示了CNN内的各种层。如在图32中示出的,用于对图像处理建模的示例性CNN可接收输入3202,其描述输入图像的红、绿和蓝(RGB)分量。输入3202可被多个卷积层(例如,卷积层3204、卷积层3206)处理。来自多个卷积层的输出可以可选地被一组完全连接层3208处理。完全连接层中的神经元具有到之前的层中的所有激活的完全连接,如之前对于前馈网络描述的那样。来自完全连接层3208的输出可用于从网络生成输出结果。完全连接层3208内的激活可使用矩阵乘法而不是卷积来计算。不是所有的CNN实现都利用完全连接层。例如,在一些实现中,卷积层3206可为CNN生成输出。
卷积层是稀疏连接的,这与在完全连接层3208中发现的传统神经网络配置不同。传统神经网络层是完全连接的,使得每个输出单元与每个输入单元交互。然而,因为域的卷积的输出(而不是域中的节点中的每个节点的相应状态值)被输入到后续层的节点,所以卷积层是稀疏连接的,如所图示的。与卷积层相关联的内核执行卷积运算,其输出被发送给下一个层。在卷积层内执行的维度降低是使CNN能够缩放成处理大的图像的一个方面。
图33图示了CNN的卷积层内的示例性计算级。CNN的到卷积层的输入3312可在卷积层3314的三个级中被处理。这三个级可包括卷积级3316、检测器级3318和池化级3320。卷积层3314然后可向连续卷积层输出数据。网络的最后的卷积层可生成输出特征图数据或向完全连接层提供输入,例如以生成对于到CNN的输入的分类值。
在卷积级3316中与产生一组线性激活并行地执行若干卷积。卷积级3316可包括仿射变换,其是可指定为线性变换加平移(translation)的任何变换。仿射变换包括旋转、平移、缩放和这些变换的组合。卷积级计算连接到输入中的特定区域的函数(例如,神经元)的输出,该特定区域可被确定为与神经元相关联的局部区域。神经元计算神经元的权重与神经元所连接到的局部输入中的区域之间的点积。来自卷积级3316的输出定义被卷积层3314的连续级处理的一组线性激活。
线性激活可被检测器级3318处理。在检测器级3318中,每个线性激活被非线性激活函数处理。该非线性激活函数使整体网络的非线性性质增加而不影响卷积层的相应域。可使用若干类型的非线性激活。一个特定类型是修正线性单元(rectified linear unit)(ReLU),其使用定义为f(x)=max(0,x)的激活函数,使得激活阈值在零处。
池化级3320使用池化函数,其用附近输出的汇总统计来代替卷积层3306的输出。池化函数可用于将平移不变性引入神经网络中,使得对输入的小的平移不改变池化输出。局部平移的不变性在其中输入数据中特征的存在比特征的精确位置更重要的情景中可以是有用的。在池化级3320期间可使用各种类型的池化函数,包括最大池化、平均池化和l2范数池化。附加地,一些CNN实现不包括池化级。代替地,这样的实现以相对于之前的卷积级具有增加步长(stride)的附加卷积级替代。
来自卷积层3314的输出然后可被下一层3322处理。下一层3322可以是附加卷积层或完全连接层3308中的一个完全连接层。例如,图33的第一卷积层3304可向第二卷积层3306输出,而第二卷积层可向完全连接层3308的第一层输出。
图34图示了示例性循环神经网络3400。在循环神经网络(RNN)中,网络的先前状态影响网络的当前状态的输出。RNN可使用各种函数采用各种方式来构建。RNN的使用一般围绕着使用数学模型以基于输入的先验序列来预测未来。例如,RNN可用于执行统计语言建模来在给定词的先前序列的情况下预测即将出现的词。所图示的RNN 3400可被描述为具有接收输入向量的输入层3402、实现循环功能的隐含层3404、用来实现先前状态的“记忆”的反馈机制3405和用来输出结果的输出层3406。RNN 3400基于时间步骤来进行操作。RNN在给定时间步骤的状态基于之前的时间步骤经由反馈机构3405而受影响。对于给定时间步骤,隐含层3404的状态由先前状态和当前时间步骤的输入定义。在第一时间步骤的初始输入(x1)可由隐含层3404处理。第二输入(x2)可由隐含层3404使用在初始输入(x1)的处理期间所确定的状态信息来处理。给定状态可计算为s_t=f(Ux_t+ Ws_(t-1)),其中U和W是参数矩阵。函数f一般是非线性的,诸如双曲正切函数(Tanh)或修正函数f(x)=max(0,x)的变体。然而,在隐含层3404中使用的特定数学函数可根据RNN 3400的特定实现细节而变化。
除所描述的基本CNN和RNN网络外,可实现这些网络的变型。一个示例RNN变体是长短期记忆(LSTM)RNN。LSTM RNN能够学习长期依赖性,其对于处理较长语言序列可以是必要的。CNN的变体是卷积深度信念网络,其具有与CNN相似的结构并且采用与深度信念网络相似的方式来训练。深度信念网络(DBN)是生成式神经网络,其由多层的随机性(stochastic)(随机)变量组成。DBN可使用贪婪无监督学习逐层训练。DBN所学得的权重然后可用于通过确定神经网络的权重的最佳初始集合来提供预训练神经网络。
图35图示了深度神经网络的训练和部署。一旦已经为任务构造给定网络,就使用训练数据集3502来训练神经网络。已开发各种训练框架3504来实现训练过程的硬件加速。例如,上文描述的机器学习框架可配置为训练框架。训练框架3504可挂载到未经训练的神经网络3506中并且使该未经训练的神经网能够使用本文描述的并行处理资源而被训练以生成经过训练的神经网3508。
为了开始训练过程,可随机或通过使用深度信念网络的预训练来选择初始权重。然后采用监督或无监督方式执行训练循环。
监督学习是其中训练作为居间操作而被执行的学习方法,诸如当训练数据集3502包括与对输入的期望输出配对的输入时,或在训练数据集包括具有已知输出的输入并且神经网络的输出被人工分级的情况下。网络处理输入并且将所得的输出与一组预期或期望输出相比较。然后将误差通过系统向后传播。训练框架3504可进行调整以调整控制未经训练的神经网络3506的权重。训练框架3504可提供工具用以监测未经训练的神经网络3506在多大程度上向适合基于已知输入数据来生成正确应答的模型收敛。训练过程随着调整网络的权重来改善神经网络生成的输出,反复进行。训练过程可持续直到神经网络达到与经训练的神经网3508相关联的统计上期望的精确度。然后可部署经过训练的神经网络3508来实现任何数量的机器学习操作。
无监督学习是其中网络尝试使用未标记数据来训练其自身的学习方法。因此,对于无监督学习,训练数据集3502将包括输入数据而没有任何相关联的输出数据。未经训练的神经网络3506可学习未标记输入内的分组并且可确定各个输入如何与整体数据集相关。无监督训练可用于生成自组织图,其是能够执行在降低数据的维度方面有用的操作的一类经过训练的神经网络3507。无监督训练还可用于执行异常检测,其允许识别输入数据集中偏离数据的正常模式的数据点。
还可采用监督和无监督训练的变型。半监督学习是其中训练数据集3502包括相同分布的标记和无标记数据的混合的技术。增量式学习是监督学习的变体,其中输入数据被持续用于进一步训练模型。增量式学习使经过训练的神经网络3508能够适应于新的数据3512而不忘记初始训练期间在网络内灌输的知识。
无论是监督还是无监督,尤其针对深度神经网络的训练过程对于单个计算节点来说可能是过于计算密集的。代替使用单个计算节点,计算节点的分布式网络可用于加速训练过程。
图36A是图示分布式学习的示例性框图。分布式学习是使用多个分布式计算节点(诸如上文描述的节点)来执行神经网络的监督或无监督训练的训练模型。分布式计算节点可各自包括一个或多个主机处理器以及通用处理节点中的一个或多个通用处理节点,诸如高度并行通用图形处理单元。如图示的,分布式学习可由模型并行3602、数据并行3604或模型和数据并行的组合执行。
在模型并行3602中,分布式系统中的不同计算节点可对单个网络的不同部分执行训练计算。例如,神经网络的每个层可由分布式系统的不同处理节点训练。模型并行的益处包括缩放到特别大的模型的能力。拆分与神经网络的不同层相关联的计算实现其中所有层的权重将不适合单个计算节点的存储器的非常大的神经网络的训练。在一些实例中,模型并行在执行大的神经网络的无监督训练中可以是特别有用的。
在数据并行3604中,分布式网络的不同节点具有模型的完整实例并且每个节点接收数据的不同部分。来自不同节点的结果然后被组合。尽管数据并行的不同方法是可能的,但数据并行训练方法全部需要将结果组合并且在每个节点之间使模型参数同步的技术。将数据组合的示例性方法包括参数平均和基于更新的数据并行。参数平均在训练数据的子集上训练每个节点并且将全局参数(例如,权重、偏置)设置成来自每个节点的参数的平均值。参数平均使用维护参数数据的中央参数服务器。基于更新的数据并行与参数平均相似,除了对模型的更新被传递,而不是将来自节点的参数传递到参数服务器。另外,可采用去中心化方式执行基于更新的数据并行,其中更新被压缩并且在节点之间传递。
组合模型和数据并行3606可例如在其中每个计算节点包括多个GPU的分布式系统中实现。每个节点可具有模型的完整实例,其中每个节点内的单独GPU用于训练模型的不同部分。
分布式训练相对于在单个机器上的训练具有增加的开销。然而,本文描述的并行处理器和GPGPU可各自实现各种技术以减少分布式训练的开销,所述技术包括用来实现高带宽GPU到GPU数据传递和加速远程数据同步的技术。
示例性机器学习应用
机器学习可应用于解决多种技术问题,其包括但不限于计算机视觉、自主驾驶和导航、语音识别和语言处理。计算机视觉传统上已经是机器学习应用的最活跃研究领域之一。计算机视觉的应用的范围从再现人类视觉能力(诸如识别面部)到创建新类别的视觉能力。例如,计算机视觉应用可配置成识别来自视频中可见的对象中引发的振动的声波。并行处理器加速机器学习使计算机视觉应用能够使用比之前可行的显著更大的训练数据集来训练并且使推理系统能够使用低功率并行处理器来部署。
并行处理器加速机器学习具有自主驾驶应用,其包括车道和道路标志识别、避障、导航和驾驶控制。加速机器学习技术可用于基于定义对特定训练输入的合适响应的数据集来训练驾驶模型。本文描述的并行处理器可实现对用于自主驾驶技术方案的日益复杂的神经网络的快速训练并且实现适合于集成到自主交通工具内的移动平台中的低功率推理处理器的部署。
并行处理器加速深度神经网络已经实现了对于自动语音识别(ASR)的机器学习方法。ASR包括创建函数,该函数在给定输入声音序列的情况下计算最可能的语言序列。使用深度神经网络的加速机器学习已经实现了对之前用于ASR的隐藏马尔可夫模型(HMM)和高斯混合模型(GMM)的替换。
并行处理器加速机器学习还可以用于加速自然语言处理。自动学习过程可利用统计推理算法来产生对错误或不熟悉输入鲁棒的模型。示例性自然语言处理器应用包括人类语言之间的自动机器翻译。
用于机器学习的并行处理平台可以分成训练平台和部署平台。训练平台一般是高度并行的并且包括优化来加速多GPU单节点训练和多节点多GPU训练。适合于训练的示例性并行处理器包括本文描述的高度并行通用图形处理单元和/或多GPU计算系统。相反,部署的机器学习平台一般包括适合于供诸如拍摄装置、自主机器人和自主交通工具之类的产品中使用的较低功率并行处理器。
图36B图示了适合于使用经过训练的模型来执行推理的示例性推理片上系统(SOC)3700。SOC 3700可集成处理组件,其包括媒体处理器3702、视觉处理器3704、GPGPU3706和多核处理器3708。SOC 3700可以附加地包括片上存储器3705,其可实现由处理组件中的每个处理组件可访问的共享片上数据池。处理组件可针对低功率操作而被优化以实现到各种机器学习平台的部署,所述机器学习平台包括自主交通工具和自主机器人。例如,SOC 3700的一个实现可以用作自主交通工具的主控制系统的一部分。在SOC 3700配置成供在自主交通工具中使用的情况下,SOC被设计且配置成符合部署权限的相关功能安全标准。
在操作期间,媒体处理器3702和视觉处理器3704可以协同工作来加速计算机视觉操作。媒体处理器3702可以实现多个高分辨率(例如,4K、8K)视频流的低时延解码。经解码的视频流可写入到片上存储器3705中的缓冲器。视觉处理器3704然后可以解析经解码的视频并且使用经过训练的图像识别模型在准备处理帧时对经解码的视频的帧执行初步处理操作。例如,视觉处理器3704可加速用于对高分辨率视频数据执行图像识别的CNN的卷积运算,而后端模型计算由GPGPU 3706执行。
多核处理器3708可包括控制逻辑以帮助由媒体处理器3702和视觉处理器3704执行的数据传递和共享存储器操作的定序和同步。多核处理器3708还可起应用处理器的作用以执行可利用GPGPU 3706的推理计算能力的软件应用。例如,导航和驾驶逻辑的至少一部分可在多核处理器3708上执行的软件中实现。这样的软件可以直接向GPGPU 3706发布计算工作负载,或者计算工作负载可发布到多核处理器3708,该多核处理器3708然后可向GPGPU3706卸载那些操作的至少一部分。
GPGPU 3706可包括计算集群,诸如高度并行通用图形处理单元DPLAB00内的计算集群DPLAB06A-DPLAB06H的低功率配置。GPGPU 3706内的计算集群可支持被专门优化以在经过训练的神经网络上执行推理计算的指令。例如,GPGPU 3706可支持用来执行诸如8位和4位整数向量运算之类的低精度计算的指令。
光线追踪架构
在一个实现中,图形处理器包括用于执行实时光线追踪的电路和/或程序代码。在一些实施例中,在图形处理器中包括光线追踪核的专用集合以执行本文描述的各种光线追踪操作,包括光线遍历和/或光线交叉操作。除光线追踪核之外,一个实施例还包括用于执行可编程着色操作的多组图形处理核以及用于对张量数据执行矩阵操作的多组张量核。
图37图示了包括布置成多核群组3700A-N的图形处理资源的专用集合的一个此类图形处理单元(GPU)3705的示例性部分。尽管提供了仅单个多核群组3700A的细节,但将领会的是,其他多核群组3700B-N可以被配备有图形处理资源的相同或类似集合。
如所图示的,多核群组3700A可以包括图形核3730的集合、张量核3740的集合和光线追踪核3750的集合。调度器/分派器3710调度和分派图形线程以便在各种核3730、3740、3750上执行。寄存器堆3720的集合存储由核3730、3740、3750在执行图形线程时使用的操作数值。这些寄存器可以包括例如用于存储整数值的整数寄存器、用于存储浮点值的浮点寄存器、用于存储打包数据元素(整数和/或浮点数据元素)的向量寄存器及用于存储张量/矩阵值的贴片寄存器(tile register)。在一个实施例中,贴片寄存器被实现为向量寄存器的组合集合。
一个或多个1级(L1)高速缓存和纹理单元3760在每个多核群组3700A内本地存储图形数据,诸如纹理数据、顶点数据、像素数据、光线数据、包围体数据等。由多核群组3700A-N的全部或其子集共享的2级(L2)高速缓存3780存储用于多个并发图形线程的图形数据和/或指令。如所图示的,L2高速缓存3780可以跨多个多核群组3700A-N被共享。一个或多个存储器控制器3770将GPU 3705耦合到存储器3798,所述存储器3798可以是系统存储器(例如,DRAM)和/或专用图形存储器(例如,GDDR6存储器)。
输入/输出(IO)电路3795将GPU 3705耦合到一个或多个IO装置3795,诸如数字信号处理器(DSP)、网络控制器或用户输入装置。片上互连可以用来将I/O装置3790耦合到GPU3705和存储器3798。IO电路3795的一个或多个IO存储器管理单元(IOMMU)3770将IO装置3790直接耦合到系统存储器3798。在一个实施例中,IOMMU 3770管理页表的多个集合以将虚拟地址映射到系统存储器3798中的物理地址。在此实施例中,IO装置3790、(一个或多个)CPU 3799和(一个或多个)GPU 3705可以共享相同虚拟地址空间。
在一个实现中,IOMMU 3770支持虚拟化。在此情况下,它可以管理页表的第一集合以将客户/图形虚拟地址映射到客户/图形物理地址,并且管理页表的第二集合以将客户/图形物理地址映射到系统/主机物理地址(例如,在系统存储器3798内)。页表的第一和第二集合中的每个集合的基址可以被存储在控制寄存器中并且在上下文切换时被换出(例如,使得为新上下文提供对页表的相关集合的访问)。尽管在图37中未被图示,但核3730、3740、3750和/或多核群组3700A-N中的每个可以包括转换后备缓冲器(TLB)以对客户虚拟到客户物理转换、客户物理到主机物理转换以及客户虚拟到主机物理转换进行高速缓存。
在一个实施例中,CPU 3799、GPU 3705和IO装置3790被集成在单个半导体芯片和/或芯片封装上。图示的存储器3798可以被集成在相同芯片上,或者可以经由芯片外接口被耦合到存储器控制器3770。在一个实现中,存储器3798包括GDDR6存储器,所述GDDR6存储器共享与其他物理系统级存储器相同的虚拟地址空间,虽然本发明的根本原理不限于此特定实现。
在一个实施例中,张量核3740包括特别设计成执行矩阵运算的多个执行单元,所述矩阵运算是用来执行深度学习操作的基本计算操作。例如,同时矩阵乘法运算可以被用于神经网络训练和推理。张量核3740可以使用各种操作数精度来执行矩阵处理,所述各种操作数精度包括单精度浮点(例如,32位)、半精度浮点(例如,16位)、整数字(16位)、字节(8位)和半字节(4位)。在一个实施例中,神经网络实现提取每个经渲染的场景的特征,潜在地组合来自多个帧的细节以构造高质量的最终图像。
在深度学习实现中,可以调度并行矩阵乘法工作以用于在张量核3740上执行。神经网络的训练特别要求大量矩阵点积运算。为处理N x N x N矩阵相乘的内积公式,张量核3740可以包括至少N个点积处理元件。在矩阵相乘开始前,一个完整矩阵被加载到贴片寄存器,并且在N个循环的每个循环,第二矩阵的至少一列被加载。在每个循环,存在被处理的N个点积。
取决于特定实现,可以以不同精度存储矩阵元素,所述不同精度包括16位字、8位字节(例如,INT8)和4位半字节(例如,INT4)。可以为张量核3740指定不同精度模式以确保最高效的精度被用于不同工作负载(例如,诸如能够容许量化到字节和半字节的推理工作负载)。
在一个实施例中,光线追踪核3750对于实时光线追踪和非实时光线追踪实现二者加速光线追踪操作。特别地,光线追踪核3750包括光线遍历/交叉电路,所述光线遍历/交叉电路用于使用包围体层级(BVH)来执行光线遍历并且标识封围在BVH体之内的图元与光线之间的交叉。光线追踪核3750还可以包括用于执行深度测试和剔除(例如,使用Z缓冲器或类似布置)的电路。在一个实现中,光线追踪核3750与本文中描述的图像去噪技术协同来执行遍历和交叉操作,其至少一部分可以在张量核3740上执行。例如,在一个实施例中,张量核3740实现深度学习神经网络以执行由光线追踪核3750生成的帧的去噪。然而,(一个或多个)CPU 3799、图形核3730和/或光线追踪核3750还可以实现去噪和/或深度学习算法的全部或一部分。
另外,如上所述,可以采用用来去噪的分布式方法,其中GPU 3705在通过网络或高速互连耦合到其他计算装置的计算装置中。在该实施例中,互连的计算装置共享神经网络学习/训练数据来改进整个系统学习对不同类型的图像帧和/或不同的图形应用执行去噪所用的速度。
在一个实施例中,光线追踪核3750处理所有BVH遍历和光线-图元交叉,从而使图形核3730免于以每光线的数千个指令而过载。在一个实施例中,每个光线追踪核3750包括用于执行包围盒测试(例如,以用于遍历操作)的专用电路的第一集合和用于执行光线-三角形交叉测试(例如,对已遍历的光线进行交叉)的专用电路的第二集合。因此,在一个实施例中,多核群组3700A能够仅仅启动光线探头,并且光线追踪核3750独立执行光线遍历和交叉并且将命中数据(例如,命中、无命中、多个命中等)返回到线程上下文。在光线追踪核3750执行遍历和交叉操作的同时,其他核3730、3740被释放以执行其他图形或计算工作。
在一个实施例中,每个光线追踪核3750包括用来执行BVH测试操作的遍历单元和执行光线-图元交叉测试的交叉单元。交叉单元生成“命中”、“无命中”或“多个命中”响应,并且交叉单元将该响应提供到适当的线程。在遍历和交叉操作期间,其他核(例如,图形核3730和张量核3740)的执行资源被释放以执行其他形式的图形工作。
在下面描述的一个特定实施例中,使用了混合光栅化/光线追踪方法,其中在图形核3730与光线追踪核3750之间分布工作。
在一个实施例中,光线追踪核3750(和/或其他核3730、3740)包括对诸如Microsoft的DirectX光线追踪(DXR)之类的光线追踪指令集的硬件支持,所述DXR包括DispatchRays命令以及光线生成、最接近命中、任意命中和未命中着色器,这些使得能够对每个对象指派纹理和着色器的独特集合。可以由光线追踪核3750、图形核3730和张量核3740支持的另一光线追踪平台是Vulkan 1.1.85。然而,注意本发明的根本原理不限于任何特定光线追踪ISA。
一般而言,各种核3750、3740、3730可以支持光线追踪指令集,所述光线追踪指令集包括用于光线生成、最接近命中、任意命中、光线-图元交叉、每图元和层级包围盒构造、未命中、访问及异常的指令/功能。更具体地说,一个实施例包括用来执行以下功能的光线追踪指令:
光线生成 – 可以对每个像素、样本或其他用户定义的工作指派执行光线生成指令。
最接近命中 – 可以执行最接近命中指令来用场景内的图元来定位光线的最接近交叉点。
任意命中 – 任意命中指令标识场景内的图元与光线之间的多个交叉,潜在地标识新的最接近交叉点。
交叉 – 交叉指令执行光线-图元交叉测试并且输出结果。
每图元包围盒构造 – 此指令围绕给定图元或图元的群组构建包围盒(例如,在构建新的BVH或其他加速数据结构时)。
未命中 – 指示光线未命中场景或场景的指定区域内的所有几何形状。
访问 – 指示光线将遍历的子体。
异常 – 包括各种类型的异常处理程序(例如,针对各种错误条件而被调取)。
层级光束追踪
包围体层级通常用于提高对图形图元和其他图形对象执行操作的效率。BVH是层级树结构,其基于一组几何对象而被构建。在树结构的顶部是根节点,其包封给定场景中的所有几何对象。各个几何对象被包裹在形成树的叶节点的包围体中。这些节点然后分组为小的集合并且被包封在较大包围体内。这些进而以递归方式也被分组并且被包封在其他较大包围体内,从而最终产生树结构,其在树的顶部具有由根节点表示的单个包围体。包围体层级用于高效地支持对几何对象的集合的各种操作,诸如冲突检测、图元剔除和在光线追踪中使用的光线遍历/交叉操作。
在光线追踪架构中,通过BVH遍历光线来确定光线-图元交叉。例如,如果光线未经过BVH的根节点,则光线不与BVH所包封的图元中的任何图元交叉并且关于该组图元不要求对光线进一步处理。如果光线经过BVH的第一子代节点而不是第二子代节点,则不需要针对第二子代节点所包封的任何图元测试光线。采用该方式,BVH提供用来对光线-图元交叉进行测试的高效机制。
在本发明的一个实施例中,针对BVH测试称为“光束”的连续光线的群组,而不是各个光线。图38图示了通过四个不同光线描绘轮廓的示例性光束3801。与由四个光线限定的补片3800交叉的任何光线被认为在相同的光束内。尽管图38中的光束3801由光线的矩形布置限定,但可以以各种其他方式限定光束同时仍符合本发明的根本原理(例如,圆、椭圆等)。
图39图示了其中GPU 3920的光线追踪引擎3910实现本文描述的光束追踪技术的示例性实施例。特别地,光线生成电路3904生成多个光线,对该多个光线要执行遍历和交叉操作。然而,所图示的实施例使用由光束层级构造电路3905生成的光束层级3907来执行遍历和交叉,而不是对各个光线执行遍历和交叉操作。在一个实施例中,光束层级与包围体层级(BVH)类似。例如,图40提供主光束4000的示例,该主光束4000可以细分成多个不同的分量。特别地,主光束4000可以分成象限4001-4004并且每个象限本身可以分成子象限,诸如象限4004内的子象限A-D。主光束可以采用多种方式细分。例如,在一个实施例中,主光束可以分成两半(而不是象限)并且每一半可以分成两半,以此类推。不管如何进行细分,在一个实施例中,采用与BVH相似的方式生成层级结构,例如具有代表主光束4000的根节点、各自由象限4001-4004表示的第一级的子代节点、针对每个子象限A-D的第二级子代节点等等。
在一个实施例中,一旦构造了光束层级3907,遍历/交叉电路3906就使用光束层级3907和BVH 3908执行遍历/交叉操作。特别地,它可以针对BVH来测试光束并且剔除未与BVH的任何部分交叉的光束的部分。使用图40中示出的数据,例如,如果与子区域4002和4003相关联的子光束未与BVH或BVH的特定分支交叉,则可以关于BVH或分支来剔除它们。通过执行深度优先搜索或其他搜索算法,可以针对BVH测试余下的部分4001、4004。
在图41中图示根据本发明的一个实施例的方法。该方法可以在上文描述的图形处理架构的上下文内实现,但不限于任何特定架构。
在4100,构造主光束,其包括多个光线,并且在4101,光束被细分并且生成层级数据结构来创建光束层级。在一个实施例中,操作4100-4101作为从多个光线构造光束层级的单个集成操作而被执行。在4102,光束层级与BVH一起使用来从BVH剔除节点/图元和/或光线(从光束层级)。在4103,针对余下的光线和图元确定光线-图元交叉。
分布式光线追踪系统中的有损和无损分组压缩
在一个实施例中,光线追踪操作跨通过网络耦合在一起的多个计算节点而分布。图42例如图示光线追踪集群4200,其包括多个光线追踪节点4210-4213,所述多个光线追踪节点4210-4213并行执行光线追踪操作,潜在地将结果在节点之一上组合。在图示的架构中,光线追踪节点4210-4213经由网关通信地耦合至客户端侧光线追踪应用4230。
关于分布式架构的难点之一是必须在光线追踪节点4210-4213中的每个光线追踪节点之间传送的大量分组化(packetized)数据。在一个实施例中,无损压缩技术和有损压缩技术两者用于减少在光线追踪节点4210-4213之间传送的数据。
为了实现无损压缩,发送允许接收节点重建结果的数据或命令,而不是发送用某些类型的操作的结果填充的分组。例如,随机采样的区域光和环境遮蔽(ambientocclusion)(AO)操作不一定需要方向。因此,在一个实施例中,传送节点将仅仅发送随机种子,该随机种子然后被接收节点用于执行随机采样。例如,如果场景跨节点4210-4212分布,以在点p1-p3处对光1进行采样,则只需要向节点4210-4212发送光ID和原点。节点中的每个节点然后可以独立地对光进行随机采样。在一个实施例中,随机种子由接收节点生成。相似地,对于初级光线(primary ray)命中点,可在节点4210-4212上计算环境遮蔽(AO)和软阴影采样而不等待连续帧的原点。附加地,如果已知一组光线将去往相同的点光源,则可以向接收节点发送标识该光源的指令,该接收节点将会将该光源应用于该组光线。作为另一示例,如果有N个环境遮蔽光线穿过单个点,则可以发送命令以从该点生成N个样本。
各种附加技术可以应用于有损压缩。例如,在一个实施例中,可以采用量化因子来将与BVH、图元和光线相关联的所有坐标值量化。另外,用于数据(诸如BVH节点和图元)的32位浮点值可以转换成8位整数值。在一个特定实现中,以全精度存储光线分组的边界,但各个光线点P1-P3作为对于边界的索引偏移而被传送。相似地,可以生成多个局部坐标系,其使用8位整数值作为局部坐标。可以使用全精度(例如,32位浮点)值来编码这些局部坐标系中的每个局部坐标系的原点的位置,有效地连接全局和局部坐标系。
下面是在本发明的一个实施例中采用的无损压缩的示例。在光线追踪程序中内部使用的光线数据格式的示例如下:
Figure 797783DEST_PATH_IMAGE003
代替发送所生成的每个节点的原始数据,该数据可通过将值分组并且通过在可能的情况下使用可适用的元数据来创建隐式光线而被压缩。
对光线数据进行捆绑和分组
一个实施例对具有修饰符的掩码或公共数据使用标志。
Figure 676746DEST_PATH_IMAGE004
例如:
Figure 803971DEST_PATH_IMAGE005
原点全部被共享
所有光线数据被打包,除了跨所有光线仅存储单个原点。为RAYPACKET_COMMON_ORIGIN设置RayPacket.flags。在接收RayPacket时对RayPacket进行解包的时候,由单个原点值填充原点。
只在一些光线当中共享原点
所有光线数据被打包,除了共享原点的光线。对于每组唯一共享的原点,打包操作符,其标识操作(共享的原点)、存储原点并且掩蔽哪些光线共享信息。这样的操作可在节点当中对任何共享值进行,所述共享值诸如材料ID、图元ID、原点、方向、法线等。
Figure 327356DEST_PATH_IMAGE006
发送隐式光线
通常,在接收端上利用用于生成光线数据的最小元信息来导出该光线数据。很常见的示例是生成多个次级光线(secondary ray)来对区域随机采样。代替发送器生成次级光线、发送它并且接收器对它进行操作,发送器可发送需要用任何相关信息生成光线的命令,并且光线在接收端上生成。在光线需要首先被发送器生成来确定要将它发送到哪个接收器的情况下,生成光线并且可发送随机种子来重新生成确切相同的光线。
例如,为了对命中点采样,其中64个阴影光线对区域光源采样,全部64个光线与来自相同计算N4的区域交叉。创建具有共同原点和法线的RayPacket。如果有人希望接收器对所得的像素贡献进行着色则可以发送更多数据,但对于该示例则让我们假设我们希望只返回光线是否命中另一节点数据。针对生成阴影光线操作创建RayOperation,并且对该RayOperation指派要被采样的lightID的值和随机数种子。当N4接收光线分组时,它通过对所有光线填充共享原点数据并且基于用随机数种子随机采样的lightID来设置方向,生成完全填充的光线数据,以生成原始发送器生成的相同光线。当返回结果时,只需要返回每个光线的二进制结果,该二进制结果可通过光线上的掩码递交。
在该示例中发送原始的64个光线将已经使用了104个字节 * 64个光线 = 6656个字节。如果返回光线也采用它们的原始形式来被发送,则这还被加倍到13912个字节。使用无损压缩,其中仅发送共同光线原点和法线、具有种子和ID的光线生成操作,只发送29个字节,其中为交叉掩码返回8个字节。这导致需要通过网络发送~360:1的数据压缩率。这不包括用来处理消息本身的开销,其将需要采用某一方式而被识别,但这取决于实现。可以进行其他操作以用于从初级光线的pixelID重新计算光线原点和方向、基于光线分组中的范围重新计算pixelID,以及用于值的重新计算的其他可能实现。相似的操作可用于所发送的任何单个光线或光线的群组,包括路径追踪中的阴影、反射、折射、环境遮蔽、交叉、体交叉、着色、反弹反射等。
图43图示了执行光线追踪分组的压缩和解压的两个光线追踪节点4310-4311的附加细节。特别地,在一个实施例中,当第一光线追踪引擎4330准备向第二光线追踪引擎4331传送数据时,光线压缩电路4320执行如本文描述的光线追踪数据的有损和/或无损压缩(例如,将32位值转换成8位值、以用来重建数据的指令来替代原始数据等)。经压缩的光线分组4301通过局域网(例如,10Gb/s、100Gb/s以太网)从网络接口4325传送到网络接口4326。光线解压电路然后在适当的时候对光线分组进行解压。例如,它可以执行命令来重建光线追踪数据(例如,使用随机种子来执行随机采样以用于照明操作)。光线追踪引擎4331然后使用所接收的数据来执行光线追踪操作。
在相反方向上,光线压缩电路4341压缩光线数据,网络接口4326通过网络传送经压缩的光线数据(例如,使用本文描述的技术),光线解压电路4340在必要时解压光线数据并且光线追踪引擎4330在光线追踪操作中使用数据。尽管在图43中图示为单独的单元,光线解压电路4340-4341可分别集成在光线追踪引擎4330-4331内。例如,在经压缩的光线数据包括用来重建光线数据的命令的方面来说,这些命令可以由每个相应的光线追踪引擎4330-4331执行。
如在图44中图示的,光线压缩电路4420可以包括:用于执行本文描述的有损压缩技术(例如,将32位浮点坐标转换成8位整数坐标)的有损压缩电路4401以及用于执行无损压缩技术(例如,传送命令和数据以允许光线解压缩电路4421重建数据)的无损压缩电路4403。光线解压电路4421包括有损解压电路4402以及用于执行无损解压的无损解压电路4404。
在图45中图示根据一个实施例的方法。该方法可以在本文描述的光线追踪架构上实现,但不限于任何特定架构。
在4500,接收光线数据,该光线数据将从第一光线追踪节点被传送到第二光线追踪节点。在4501,有损压缩电路对第一光线追踪数据执行有损压缩,并且在4502,无损压缩电路对第二光线追踪数据执行无损压缩。在4503,经压缩的光线追踪数据被传送到第二光线追踪节点。在4504,有损/无损解压电路执行光线追踪数据的有损/无损解压,并且在4505,第二光线追踪节点使用经解压的数据执行光线追踪操作。
具有硬件加速混合光线追踪的图形处理器
本发明的一个实施例包括混合渲染流水线,其在图形核上3730执行光栅化并且在光线追踪核3750、图形核3730和/或CPU 3799核上执行光线追踪操作。例如,可以在图形核3730上执行光栅化和深度测试,来代替初级光线投射级。光线追踪核3750然后可以生成针对光线反射、折射和阴影的次级光线。另外,某些实施例可以选择场景的某些区域,其中光线追踪核3750将执行光线追踪操作(例如,基于材料性质阈值,诸如高反射率水平),而将利用在图形核3730上的光栅化来渲染该场景的其他区域。在一个实施例中,该混合实现用于实时光线追踪应用——其中时延是关键问题。
下文描述的光线遍历架构的一个实施例使用现有的单指令多数据(SIMD)和/或单指令多线程(SIMT)图形处理器执行光线遍历的可编程着色和控制,同时使用专用硬件加速关键功能,诸如BVH遍历和/或交叉。在该实施例中,对于非相干路径的SIMD占有率通过在遍历期间和着色之前在特定点重新分组派生的着色器而得到提高。这是使用在芯片上对着色器动态分类的专用硬件而实现的。通过将函数分割成在返回时执行的延续(continuation)并且在在执行之前对延续重新分组以便提高SIMD占有率来管理递归。
通过将遍历功能性分解成可实现为固定功能硬件的内遍历和在GPU处理器上执行且通过用户定义的遍历着色器来实现可编程控制的外遍历,实现光线遍历/交叉的可编程控制。在硬件与软件之间传输遍历上下文的成本通过在内外遍历之间的转变期间保守地截断内遍历状态而减少。
光线追踪的可编程控制可通过下文的表A中列出的不同着色器类型来表达。针对每个类型可以有多个着色器。例如每个材料可以具有不同的命中着色器。
着色器类型 功能性
启动初级光线
命中 双向反射分布函数(BRDF)采样,启动次级光线
任意命中 计算阿尔法纹理几何形状的透射率
未命中 计算来自光源的辐射
交叉 交叉自定义形状
遍历 实例选择和变换
可调用 通用功能
表A
在一个实施例中,递归光线追踪由API函数发起,该API函数命令图形处理器启动一组主着色器或交叉电路,其可对初级光线派生光线-场景交叉。这进而派生其他着色器,诸如遍历、命中着色器或未命中着色器。派生子代着色器的着色器还可从该子代着色器接收返回值。可调用着色器是通用函数,其能够由另一着色器直接派生并且还能够向进行调用的着色器返回值。
图46图示了图形处理架构的实施例,该图形处理架构包括着色器执行电路4600和固定功能电路4610。通用执行硬件子系统包括多个单指令多数据(SIMD)和/或单指令多线程(SIMT)核/执行单元(EU)4601(即,每个核可以包括多个执行单元)、一个或多个采样器4602,以及1级(L1)高速缓存4603或其他形式的本地存储器。固定功能硬件子系统4610包括消息单元4604、调度器4607、光线-BVH遍历/交叉电路4605、分类电路4608和本地L1高速缓存4606。
在操作中,主分派器4609向调度器4607分派一组初级光线,该调度器4607向在SIMD/SIMT核/EU 4601上执行的着色器调度工作。SIMD核/EU 4601可以是上文描述的光线追踪核3750和/或图形核3730。主着色器的执行派生要执行(例如,要由一个或多个子代着色器和/或固定功能硬件执行)的附加工作。消息单元4604向根据需要访问空闲堆栈池的调度器4607、分类电路4608或光线-BVH交叉电路4605分布由SIMD核/EU 4601派生的工作。如果附加工作被发送给调度器4607,则它被调度以用于在SIMD/SIMT核/EU 4601上进行处理。在调度之前,分类电路4608可以将光线分类为如本文描述的群组或面元(bin)(例如,将具有相似特性的光线分组)。光线-BVH交叉电路4605使用BVH体执行光线的交叉测试。例如,光线-BVH交叉电路4605可以将光线坐标与BVH的每个级别比较来标识被光线交叉的体。
可使用着色器记录、用户分配的结构(其包括指向入口函数的指针)、供应商特定的元数据和对由SIMD核/EU 4601执行的着色器的全局自变量(global argument)来引用着色器。着色器的每个执行实例与调用堆栈相关联,该调用堆栈可以用于存储在父代着色器与子代着色器之间传递的自变量。调用堆栈还可以存储对在调用返回时执行的延续函数的引用。
图47图示了指派的堆栈4701的示例集合,其包括主着色器堆栈、命中着色器堆栈、遍历着色器堆栈、延续函数堆栈和光线-BVH交叉堆栈(其如描述那样可以由固定功能硬件4610执行)。新的着色器调取可以从空闲堆栈池4702实现新的堆栈。可以在本地L1高速缓存4603、4606中将调用堆栈高速缓存来减少访问的时延。
在一个实施例中,存在有限数量的调用堆栈,其各自具有在存储器的连续区域中分配的固定最大大小的“Sstack”。因此,堆栈的基址可根据堆栈索引(SID)直接计算为基址=SID*Sstack。在一个实施例中,堆栈ID由调度器4607在向SIMD核/EU 4601调度工作时分配和解除分配。
在一个实施例中,主分派器4609包括图形处理器命令处理器,其响应于来自主机(例如,CPU)的分派命令来分派主着色器。如果调度器4607能够为每个SIMD通道分配堆栈ID,则调度器4607接收这些分派请求并且在SIMD处理器线程上启动主着色器。从空闲堆栈池4702分配堆栈ID,该空闲堆栈池4702在分派命令开始时被初始化。
执行着色器可通过向消息传递单元4604发送派生消息来派生子代着色器。该命令包括与着色器相关联的堆栈ID并且还包括指向每个活动SIMD通道的子代着色器记录的指针。父代着色器可对活动通道仅发布该消息一次。在一个实施例中,在对所有相关通道发送派生消息后,父代着色器终止。
在SIMD核/EU 4601上执行的着色器还可使用具有为固定功能硬件保留的着色器记录指针的派生消息来派生固定功能任务,诸如光线-BVH交叉。如提到的,消息传递单元4604向固定功能光线-BVH交叉电路4605发送所派生的光线-BVH交叉工作且直接向分类电路4608发送可调用着色器。在一个实施例中,分类电路通过着色器记录指针对着色器分组来导出具有相似特性的SIMD批次。因此,来自不同父代着色器的堆栈ID可被分类电路4608分组在相同批次中。分类电路4608向调度器4607发送经分组的批次,该调度器4607访问来自图形存储器2511或末级高速缓存(LLC)4620的着色器记录并且在处理器线程上启动着色器。
在一个实施例中,延续被视为可调用着色器并且还可以通过着色器记录来被引用。当子代着色器被派生并且向父代着色器返回值时,指向延续着色器的指针被推送在如图47中示出的调用堆栈4701上。当子代着色器返回时,延续着色器记录从调用堆栈4701退栈并且派生延续着色器。所派生的延续经过类似于可调用着色器的分类单元并且在处理器线程上得到启动。
如在图48中图示的,分类电路4608的一个实施例通过着色器记录指针4801A、4801B、4801n对所派生的任务进行分组来创建SIMD批次以用于着色。经分类的批次中的堆栈ID或上下文ID可根据不同的分派和不同的输入SIMD通道来被分组。在一个实施例中,分组电路4810使用内容可寻址存储器(CAM)结构4801来执行分类,该内容可寻址存储器结构4801包括多个条目,其中用标签4801来标识每个条目。如提到的,在一个实施例中,标签4801是对应的着色器记录指针4801A、4801B、4801n。在一个实施例中,CAM结构4801存储有限数量的标签(例如,32、64、128个等),所述标签各自与对应于着色器记录指针的不完整SIMD批次相关联。
对于传入的派生命令,每个SIMD通道具有对应的堆栈ID(在每个CAM条目中示出为16个上下文ID 0-15)和着色器记录指针4801A-B、…、n(充当标签值)。在一个实施例中,分组电路4810将每个通道的着色器记录指针与CAM结构4801中的标签4801相比较来找到匹配批次。如果找到了匹配批次,则将堆栈ID/上下文ID添加到该批次。否则创建具有新着色器记录指针标签的新条目,可能用不完整的批次驱逐较旧的条目。
执行着色器可在调用堆栈为空的时候通过向消息单元发送解除分配消息来对调用堆栈解除分配。解除分配消息被中继给调度器,其向空闲池返回堆栈ID/上下文ID以用于活动SIMD通道。
本发明的一个实施例使用固定功能光线遍历和软件光线遍历的组合来实现用于光线遍历操作的混合方法。因此,它提供软件遍历的灵活性同时维持固定功能遍历的效率。图49示出可以用于混合遍历的加速结构,该加速结构是具有单个顶层BVH 4900和若干底层BVH 4901和4902的两级树。在右边示出图形元素来指示内遍历路径4903、外遍历路径4904、遍历节点4905、具有三角形的叶节点4906和具有自定义图元的叶节点4907。
在顶层BVH 4900中具有三角形的叶节点4906可引用三角形、针对自定义图元的交叉着色器记录或遍历着色器记录。底层BVH 4901-4902的具有三角形的叶节点4906可仅引用三角形和针对自定义图元的交叉着色器记录。引用的类型在叶节点4906内被编码。内遍历4903指每个BVH 4900-4902内的遍历。内遍历操作包括光线-BVH交叉的计算并且跨BVH结构4900-4902的遍历称为外遍历。可在固定功能硬件中高效实现内遍历操作,而可用可编程着色器以可接受的性能执行外遍历操作。因此,本发明的一个实施例使用固定功能电路4610来执行内遍历操作并且使用着色器执行电路4600来执行外遍历操作,该着色器电路4600包括SIMD/SIMT核/EU 4601以用于执行可编程着色器。
注意,为了简单起见,SIMD/SIMT核/EU 4601有时在本文简称为“核”、“SIMD核”、“EU”或“SIMD处理器”。相似地,光线-BVH遍历/交叉电路4605有时简称为“遍历单元”、“遍历/交叉单元”或“遍历/交叉电路”。当使用替换术语时,用于表示相应电路/逻辑的特定名称不改变该电路/逻辑执行的根本功能,如本文描述那样。
此外,尽管出于解释目的在图46中图示为单个组件,遍历/交叉电路4605可以包括不同的遍历单元和单独的交叉单元,其中的每个单元可以在如本文描述的电路和/或逻辑中实现。
在一个实施例中,当在内遍历期间光线与遍历节点交叉时,派生遍历着色器。如图48中所图示的,分类电路4608通过着色器记录指针4801A-B、…、n对这些着色器进行分组来创建SIMD批次,其由调度器4607启动以用于在图形SIMD核/EU 4601上的SIMD执行。遍历着色器可采用若干方式修改遍历,从而实现广泛的应用。例如,遍历着色器可在更粗糙的细节级别(LOD)选择BVH或变换光线以实现刚体变换(rigid body transformation)。遍历着色器然后针对所选的BVH派生内遍历。
内遍历通过遍历BVH并且计算光线箱和光线三角形交叉来计算光线-BVH交叉。采用与着色器相同的方式通过向消息传递电路4604发送消息来派生内遍历,该消息传递电路4604将对应的派生消息中继到计算光线-BVH交叉的光线-BVH交叉电路4605。
在一个实施例中,内遍历的堆栈被本地存储在固定功能电路4610中(例如,在L1高速缓存4606内)。当光线与对应于遍历着色器或交叉着色器的叶节点交叉时,内遍历被终止并且内部堆栈被截断。被截断的堆栈连同指向光线和BVH的指针在由进行调用的着色器指定的位置处被写入存储器并且然后派生对应的遍历着色器或交叉着色器。如果光线在内遍历期间与任何三角形交叉,则对应的命中信息被提供作为对于这些着色器的输入自变量,如下面的代码中示出那样。这些派生的着色器被分类电路4608分组来创建SIMD批次以用于执行。
Figure 553938DEST_PATH_IMAGE007
截断内遍历堆栈减少将内遍历堆栈溢出到存储器的成本。本发明的一个实施例使用在Restart Trail for Stackless BVH Traversal,High Performance Graphics(2010)第107–111页中描述的方法来将堆栈截断成在堆栈的顶部的少量条目,42位重启跟踪(restart trail)和6位深度值。重启跟踪指示已在BVH内部采取的分支并且深度值指示对应于最后一个堆栈条目的遍历深度。这对于在之后的时间恢复内遍历是足够的信息。
当内部堆栈为空并且没有更多BVH节点来测试时完成内遍历。在该情况下,派生外部堆栈处理程序,其将外部堆栈的顶部退栈并且如果外部堆栈不为空则恢复遍历。
在一个实施例中,外遍历执行主遍历状态机并且在由着色器执行电路4600执行的程序代码中实现。它在下列条件下派生内遍历查询:(1)当由命中着色器或主着色器派生新的光线时;(2)当遍历着色器选择BVH以用于遍历时;以及(3)当外部堆栈处理程序恢复BVH的内遍历时。
如在图50中图示的,在派生内遍历之前,在调用堆栈5005上为固定功能电路4610分配空间来存储被截断的内部堆栈5010。到调用堆栈和内部堆栈顶部的偏移5003-5004被维持在遍历状态5000中,该遍历状态5000也被存储在存储器中。遍历状态5000还包括世界空间5001和对象空间5002中的光线以及最接近交叉图元的命中信息。
遍历着色器、交叉着色器和外部堆栈处理程序全部由光线-BVH交叉电路4605派生。遍历着色器在对第二级BVH发起新的内遍历之前在调用堆栈5005上分配。外部堆栈处理程序是负责更新命中信息并且恢复任何未决内遍历任务的着色器。外部堆栈处理程序还负责在遍历完成时派生命中或未命中着色器。遍历在没有未决内遍历查询要派生时完成。当遍历完成并且找到交叉时,派生命中着色器;否则派生未命中着色器。
尽管上文描述的混合遍历方案使用两级BVH层级,但本文描述的本发明的实施例可以使用在外遍历实现中具有对应改变的任意数量的BVH级别。
另外,尽管在上面的实施例中描述固定功能电路4610以用于执行光线-BVH交叉,但在固定功能电路中还可以实现其他系统组件。例如,上面描述的外部堆栈处理程序可以是内部(不是用户可见的)着色器,其可以潜在地在固定功能BVH遍历/交叉电路4605中实现。该实现可以用于减少固定功能交叉硬件4605与处理器之间的往返以及所分派的着色器级的数量。
这里描述的本发明的实施例使得能够使用可在现有和未来GPU处理器上以更大SIMD效率执行的用户定义的功能来实现可编程着色和光线遍历控制。光线遍历的可编程控制实现若干重要特征,诸如过程实例化(procedural instancing)、随机的细节级别选择、自定义图元交叉和惰性BVH更新(lazy BVH update)。
本发明的一个实施例包括支持命中着色器和交叉着色器的推测性执行的可编程多指令多数据(MIMD)光线追踪架构。特别地,一个实施例集中于减少在上面关于图46描述的可编程SIMD/SIMT核/执行单元4601与混合光线追踪架构中的固定功能MIMD遍历/交叉单元4605之间的调度和通信开销。在下文中描述命中着色器和交叉着色器的多个推测性执行方案,能够从遍历硬件以单批的方式分派所述命中着色器和交叉着色器,避免若干遍历和着色往返。一个实施例包括用来实现这些技术的专用电路。
本发明的实施例在根据光线遍历查询期望执行多个命中着色器或交叉着色器(当在没有专用硬件支持的情况下实现时,这将带来显著的开销)的用例中特别有益。这些包括但不限于最近k-命中查询(针对k个最接近交叉而启动命中着色器)和多个可编程交叉着色器。
在此描述的技术可以实现为对在图46中图示(并且关于图46-50描述)的架构的扩展。特别地,本发明的本实施例构建在具有增强的该架构上以改进上文中所提到的用例的性能。
混合光线追踪遍历架构的性能限制是从执行单元启动遍历查询的开销和从光线追踪硬件调取可编程着色器的开销。当在相同光线的遍历期间调取多个命中着色器或交叉着色器时,该开销生成可编程核4601与遍历/交叉单元4605之间的“执行往返”。 这还对需要从各个着色器调取提取SIMD/SIMT相干性的分类单元4608施加额外的压力。
光线追踪的若干方面要求能够可编程控制,其可通过在上面的表A中列出的不同着色器类型(即,主、命中、任意命中、未命中、交叉、遍历以及可调用)而表达。对于每种类型可存在多个着色器。例如,每种材料可具有不同命中着色器。在当前的Microsoft®光线追踪API中定义这些着色器类型中的一些着色器类型。
作为简要回顾,通过API函数发起递归光线追踪,该API函数命令GPU启动能够针对初级光线而派生光线-场景交叉(在硬件和/或软件中实现)的一组主着色器。这又可派生其他着色器(诸如,遍历、命中或未命中着色器)。派生子代着色器的着色器还能够从该着色器接收返回值。可调用着色器是通用函数,其能够由另一着色器直接派生并且还能够向进行调用的着色器返回值。
光线遍历通过在包围体层级(BVH)中对节点进行遍历和交叉来计算光线-场景交叉。最近研究已示出,能够使用更好地适于固定功能硬件的技术(诸如,降低精度算术、BVH压缩、每光线状态机、专用交叉流水线以及定制高速缓存)来提高计算光线-场景交叉的效率超过一个数量级。
图46中所示出的架构包括这样的系统,其中SIMD/SIMT核/执行单元4601的阵列与固定功能光线追踪/交叉单元4605交互,以执行可编程光线追踪。可编程着色器在执行单元/核4601上被映射到SIMD/SIMT线程,其中SIMD/SIMT利用、执行以及数据相干性对于最优性能是关键的。光线查询通常因为各种原因破坏相干性,所述原因诸如:
Figure 123460DEST_PATH_IMAGE001
遍历发散性:BVH遍历的持续时间高度地变化。
Figure 195321DEST_PATH_IMAGE001
在光线之间趋于异步光线处理。
Figure 838792DEST_PATH_IMAGE001
执行发散性:从相同SIMD/SIMT线程的不同通路派生的光线可能导致不同着色器调取。
Figure 501855DEST_PATH_IMAGE001
数据访问发散性:例如,命中不同表面的光线对不同BVH节点和图元进行采样,并且着色器访问不同纹理。各种其他场景可能引起数据访问发散性。
在一个实施例中,固定功能光线追踪/交叉单元4605通过单独地并且乱序处理每束光线来克服前两种挑战。然而,这破坏SIMD/SIMT群组。因此分类单元4608负责形成将再次被分派给执行单元的着色器调取的新的相干的SIMD/SIMT群组。
容易看出这样的架构与直接在SIMD/SIMT处理器上的基于纯软件的光线追踪实现相比的益处。然而,存在与SIMD/SIMT核/执行单元4601(有时在本文中被简称为SIMD/SIMT处理器或核/EU)与MIMD遍历/交叉单元4605之间的消息传递相关联的开销。此外,分类单元4608可能没有从非相干着色器调用中提取理想的SIMD/SIMT利用。
本发明的一个实施例标识这样的用例,其中着色器调取在遍历期间可以是特别地频繁的。描述了对于混合MIMD光线追踪处理器的增强,其用来显著地减少核/EU 4601与遍历/交叉单元4605之间的通信的开销。该实施例在寻找k-最接近交叉和实现可编程交叉着色器时可以是特别地有益的。然而,注意到,在此描述的技术不限于任何特定处理场景。
在下文中提供核/EU 4601与固定功能遍历/交叉单元4605之间的高水平成本的光线追踪上下文切换的概要。大部分的执行开销由每当在单光线遍历期间着色器调取必要时的这两个上下文切换引起。
发射光线的每个SIMD/SIMT通路生成派生消息到与BVH相关联的遍历/交叉单元4605以进行遍历。数据(光线遍历上下文)经由派生消息和(高速缓存的)存储器而中继到遍历/交叉单元4605。在遍历/交叉单元4605准备好将新硬件线程指派给派生消息时,遍历/交叉单元4605加载遍历状态并且在BVH上执行遍历。还存在需要在BVH上的第一遍历步骤之前执行的设置成本。
图51图示根据本发明的一个实施例的可编程光线追踪流水线的操作流程。在所图示的实施例中,包括遍历5102和交叉5103的着色元素在固定功能电路中实现,而剩余元素利用可编程核/执行单元来实现。
初级光线着色器5101将工作发送到通过BVH(或其他加速结构)遍历(一个或多个)当前光线的5102处的遍历电路。在到达叶节点时,遍历电路调用5103处的交叉电路,该交叉电路在标识光线-三角形交叉时调取5104处的任意命中着色器(如所指示的,该命中着色器可以将结果提供回到遍历电路)。
备选地,该遍历可以在到达叶节点和在5107处调取的最接近命中着色器(如果命中被记录)或5106处的未命中着色器(在未命中的情况下)之前终止。
如在5105指示的,如果遍历电路到达定制图元叶节点,则可以调取交叉着色器。定制图元可以是任何非三角形图元(诸如,多边形或多面体(例如,四面体、体素、六面体、楔形、角锥体或其他“非结构化”体积))。交叉着色器5105将光线与定制图元之间的任何交叉标识给实现任意命中处理的任意命中着色器5104。
在一个实施例中,在硬件遍历5102达到可编程阶段时,遍历/交叉单元5105对相关着色器5105-5107生成着色器分派消息,所述相关着色器5105-5107与用于执行着色器的(一个或多个)执行单元的单个SIMD通路对应。由于分派按光线的任意顺序发生,并且分派在所调用的程序中是发散的,因而分类单元4608的一个实施例积累多个分派调用以提取相干的SIMD批次。所更新的遍历状态和可选的着色器自变量可以被遍历/交叉单元4605写入到存储器2511中。
在k-最近交叉问题中,最接近命中着色器5107针对第一k交叉来执行。以常规方式,这将意味着,在找到最接近交叉时结束光线遍历,调取命中着色器,并且从命中着色器派生新光线以寻找下一个最接近交叉(利用光线原点偏移,因此相同交叉将不会再次发生)。容易看出,该实现将针对单个光线将要求k个光线派生。另一实现利用任意命中着色器5104来操作,该任意命中着色器5104针对所有交叉来被调取并且维持最近交叉的全局列表,使用插入分类操作。该方法的主要问题是,不存在任意命中着色器调取的上界。
如所提到的,交叉着色器5105可以在非三角形(定制)图元上被调取。取决于交叉测试和遍历状态(未决节点和图元交叉)的结果,相同光线的遍历可以在交叉着色器5105的执行之后继续。因此,寻找最接近命中可以要求到执行单元的若干往返。
本发明的一个实施例集中于通过改变成遍历硬件和着色器调度模型来减少对于交叉着色器5105和命中着色器5104、5107的SIMD-MIMD上下文切换。首先,光线遍历电路4605通过积累多个潜在调取并且以更大的批次分派它们来使着色器调取延迟。另外,证明是不必要的某些调取可以在该阶段被剔除。此外,着色器调度器4607的一个实施例使来自相同遍历上下文的多个着色器调取聚合成单个SIMD批次,这导致单光线派生消息。在一个实现中,遍历硬件4605暂停遍历线程并且等待多个着色器调取的结果。由于该操作模式允许分派多个着色器,这些着色器中的一些着色器可能在使用顺序调取时不被调用,因而该操作模式在本文中被称为“推测性”着色器执行。
图52A图示其中遍历操作遇到子树中的多个定制图元5250的示例,并且图52B图示这能够如何利用三个交叉分派循环C1-C3来得到解决。特别地,该实施例的调度器4607要求三个循环来将工作提交给SIMD处理器4601,并且遍历电路4605要求三个循环来将结果提供给分类单元4608。遍历电路4605所要求的遍历状态5201存储于存储器(诸如,本地高速缓存(例如,L1高速缓存和/或L2高速缓存))中。
A. 延迟的光线追踪着色器调取
本发明的一个实施例修改管理硬件遍历状态5201的方式以允许多个潜在交叉或命中调取在列表中积累。在遍历期间的给定时间,列表中的每个输入可以用于生成着色器调取。例如,能够在遍历硬件4605上和/或存储器中的遍历状态5201中积累k-最近交叉点,并且如果遍历完成,则能够针对每个元素来调取命中着色器。对于命中着色器,可以针对BVH中的子树来积累多个潜在交叉。
对于最近-k用例,该方法的益处是,代替到SIMD核/EU 4601的k-1个往返和k-1个新光线派生消息,在遍历电路4605上在单个遍历操作期间从相同遍历线程调取所有命中着色器。对于潜在实现的挑战是,保证命中着色器的执行顺序并不是简单的(标准“往返”方法保证最接近交叉的命中着色器首先被执行等)。在一个实施例中,这通过命中着色器的同步或排序的放宽来得到解决。
对于交叉着色器用例,遍历电路4605不提前知道给定的着色器是否将返回肯定的交叉测试。然而,有可能推测性地执行多个交叉着色器,并且如果至少一个返回肯定的命中结果,则将它归并到全局最近命中当中。具体实现需要寻找延迟交叉测试的最优数量,以减少分派调用的数量,但避免调用太多冗余的交叉着色器。
B. 聚合来自遍历电路的着色器调取
当在遍历电路4605上从相同光线派生分派多个着色器时,一个实施例在光线遍历算法的流程中创建分支。这可能对于交叉着色器是有问题的,因为BVH遍历的剩余部分取决于所有分派的交叉测试的结果。这意味着,同步操作对于等待着色器调取的结果是必要的,这在异步硬件上可能是具有挑战性的。
本发明的一个实施例依赖于归并着色器调用的结果的两点: SIMD处理器4601和遍历电路4605。关于SIMD处理器4601,多个着色器能够使用标准编程模型来将它们的结果同步并且聚合。进行该动作的一个相对简单的方式是,使用全局原子并且将存储器中的共享数据结构中的结果聚合,在所述存储器中可以存储多个着色器的交叉结果。然后,最后一个着色器能够解析数据结构并且调用回遍历电路4605以继续遍历。
本发明的一个实施例实现将多个着色器调取的执行限于SIMD处理器4601上的相同SIMD线程的通路的更高效的方法。然后,使用SIMD/SIMT减少操作(而不是依赖于全局原子)来在本地减少交叉测试。该实施例可能依赖于分类单元4608内的新电路来使小批的着色器调取留在相同SIMD批次中。
本发明的一个实施例暂停遍历电路4605上的遍历线程的执行。使用常规执行模型,当着色器在遍历期间被分派时,终止遍历线程,并且光线遍历状态被保存到存储器以允许在执行单元4601处理着色器时执行其他光线派生命令。如果仅仅暂停遍历线程,则遍历状态不需要被存储并且能够单独地等待每个着色器结果。该实施例可以包括用来避免死锁并且提供足够的硬件利用的电路。
图53-54图示利用三个着色器5301来在SIMD核/执行单元4601上调取单个着色器调取的延迟模型的实施例。所有交叉测试在被保存时在相同SIMD/SIMT群组内被评估。结果,也能够在可编程核/执行单元4601上计算最近交叉。
如所提到的,着色器聚合和/或延迟中的全部或一部分可以由遍历/交叉电路4605和/或核/EU调度器4607执行。图53图示一个实施例,其中调度器4607内的着色器延迟/聚合器电路5306延迟与特定SIMD/SIMT线程/通路相关联的着色器的调度,直到所指定的触发事件已发生。在检测到触发事件时,调度器4607将单个SIMD/SIMT批次中的多个聚合的着色器分派到核/EU 4601。
图54图示一个实施例,其中遍历/交叉电路4605内的着色器延迟/聚合器电路5405延迟与特定SIMD线程/通路相关联的着色器的调度,直到指定的触发事件已发生。在检测到触发事件时,遍历/交叉电路4605将聚合的着色器提交给单个SIMD/SIMT批次中的分类单元4608。
然而,注意到,着色器延迟及聚合技术可以在各种其他组件(诸如,分类单元4608)内实现或可以跨多个组件来分布。例如,遍历/交叉电路4605可以执行着色器聚合操作的第一集合,并且调度器4607可以执行着色器聚合操作的第二集合,以确保在核/EU 4601上高效地调度SIMD线程的着色器。
引起聚合着色器被分派给核/EU的“触发事件”可以是处理事件,诸如与特定线程相关联的最小时延或特定数量的积累的着色器。备选地或另外,触发事件可以是时间事件,诸如自第一着色器的延迟起的一定持续时间或特定数量的处理器循环。其他变量(诸如,核/EU 4601和遍历/交叉单元4605上的当前工作负载)也可以被调度器4607评估以确定何时分派着色器的SIMD/SIMT批次。
本发明的不同实施例可以基于所使用的特定系统架构和应用的要求而使用上面的方法的不同组合来实现。
光线追踪指令
下述的光线追踪指令被包括在由CPU 3799和/或GPU 3705的一个实施例支持的指令集架构(ISA)中。如果由CPU执行,则单指令多数据(SIMD)指令可以利用向量/打包源和目的地寄存器来执行所描述的操作,并且可以由CPU核解码并且执行。如果由GPU 3705执行,则指令可以由图形核3730执行。例如,上述的执行单元(EU)4601中的任何EU可以执行指令。备选地或另外,指令可以由光线追踪核3750和/或张量核3740上的执行电路执行。
图55图示下述的用于执行光线追踪指令的架构的一个实施例。所图示的架构可以集成于可以被包括在不同处理器架构中的上面描述的核3730、3740、3750中的一个或多个核内(参见例如图37及相关联的文本)。
在操作中,指令获取单元5503从存储器3798获取光线追踪指令5500,并且解码器5504对指令进行解码。在一个实现中,解码器5504对指令进行解码,以生成可执行操作(例如,微编码的核中的微操作或uop)。备选地,可以在没有解码的情况下执行光线追踪指令5500中的一些或全部,并且这样不要求解码器5504。
在任一实现中,调度器/分派器5505跨功能单元(FU)5510-5512的集合对指令(或操作)进行调度和分派。所图示的实施例包括:用于执行对存储在向量寄存器5515中的多个打包数据元素同时操作的单指令多数据(SIMD)指令的向量FU 5510,以及用于对存储在一个或多个标量寄存器5516中的标量值操作的标量FU 5511。可选的光线追踪FU 5512可以对存储于向量寄存器5515中的打包数据值和/或存储于标量寄存器5516中的标量值操作。在没有专用FU 5512的实施例中,向量FU 5510以及可能的标量FU 5511执行下述光线追踪指令。
各种FU 5510-5512访问执行来自向量寄存器5515、标量寄存器5516和/或本地高速缓存子系统5508(例如,L1高速缓存)的光线追踪指令5500所需要的光线追踪数据5502(例如,遍历/交叉数据)。在一个实施例中,FU 5510-5512还可以经由装载和存储操作来执行对存储器3798的访问,并且高速缓存子系统5508可以独立地操作,以在本地高速缓存数据。
虽然光线追踪指令可以用于提高光线遍历/交叉和BVH构建的性能,但光线追踪指令还可以适用于其他领域,诸如高性能计算(HPC)和通用GPU(GPGPU)实现。
在下面的描述中,术语双字有时缩写为dw,并且,无符号字节缩写为ub。另外,下面所提到的源寄存器和目的地寄存器(例如,src0、src1、dest等)可以指向量寄存器5515,或在一些情况下指向量寄存器5515和标量寄存器5516的组合。通常,如果由指令使用的源值或目的地值包括打包数据元素(例如,其中源或目的地存储N个数据元素),则使用向量寄存器5515。其他值可以使用标量寄存器5516或向量寄存器5515。
去量化
去量化指令的一个实施例将之前量化的值“去量化”。举例来说,在光线追踪实现中,某些BVH子树可以被量化,以降低存储和带宽要求。去量化指令的一个实施例采取去量化destsrc0 src1 src2的形式,其中源寄存器src0存储N个无符号字节,源寄存器src1存储1个无符号字节,源寄存器src2存储1个浮点值,并且目的地寄存器dest存储N个浮点值。全部这些寄存器可以是向量寄存器5515。备选地,src0和dest可以是向量寄存器5515,并且src 1和src2可以是标量寄存器5516。
以下代码序列定义去量化指令的一个特定实现:
Figure 230776DEST_PATH_IMAGE008
在该示例中,ldexp将双精度浮点值与指定的二的整数幂(即,ldexp(x, exp) = x * 2exp)相乘。在上面的代码中,如果与当前SIMD数据元素相关联的执行掩码值(execMask[i])设置成1,则src0中的定位i处的SIMD数据元素转换成浮点值,并且乘以src1中的值的整数幂(2src1 value),并且该值被加到src2中的对应的SIMD数据元素。
选择性最小值或最大值
选择性最小值或最大值指令的一个实施例如位掩码中的位所指示的那样对每通路而执行最小值或最大值操作(即,返回值的集合的最小值或最大值)。位掩码可以利用向量寄存器5515、标量寄存器5516、或掩码寄存器的单独集合(未示出)。以下代码序列定义最小值/最大值指令的一个特定实现:sel_min_max dest src0 src1 src2,其中src0存储N个双字,src1存储N个双字,src2存储一个双字,并且目的地寄存器存储N个双字。
以下代码序列定义选择性最小值/最大值指令的一个特定实现:
Figure 371907DEST_PATH_IMAGE009
在该示例中,(1 < < i) & src2(a 1 left-shifted by i ANDed with src2)的值用于选择src0和src1中的第i个数据元素的最小值或src0和src1中的第i个数据元素的最大值。该操作仅当与当前SIMD数据元素相关联的执行掩码值(execMask[i])设置成1时针对第i个数据元素执行。
混洗索引指令
混洗索引指令的一个实施例能够将输入通路的任何集合复制到输出通路。对于32的SIMD宽度,该指令能够以较低吞吐量执行。该实施例采取如下的形式:shuffle_index destsrc0 src1 <可选标志>,其中,src0存储N个双字,src1存储N个无符号字节(即,索引值),并且dest存储N个双字。
以下码序列定义混洗索引指令的一个特定实现:
Figure 684201DEST_PATH_IMAGE010
在上面的代码中,src1中的索引标识当前通路。如果执行掩码中的第i个值设置成1,则执行校验,以确保源通路处于0至SIMD宽度的范围内。如果是这样,则标志设置为(srcLaneMod),并且目的地的数据元素i设置为等于src0的数据元素i。如果通路处于范围内(即,是有效的),则来自src1的索引值(srcLane 0)用作到src0中的索引(dst[i] = src0[srcLane])。
立即值混洗Up/Dn/XOR指令
在一个实施例中,立即值混洗指令基于指令的立即值来混洗输入数据元素/通路。在一个实现中,立即值可以基于立即值的值来指定将输入通路移位1、2、4、8或16个位置。可选地,额外的标量源寄存器能够指定为填充值。在源通路索引无效时,填充值(若提供)存储到目的地中的数据元素位置。如果未提供填充值,则数据元素位置全部设置成零。
在一个实施例中,标志寄存器用作源掩码。如果源通路的标志位设置成1,则源通路被标记为无效,并且该指令继续进行。
以下是立即值混洗指令的不同实现的示例:
shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <可选src1> <可选标志>
shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <可选src1> <可选标志>
在该实现中,src0存储N个双字,src1为填充值(若存在)存储一个双字,并且dest存储包括结果的N个双字。
以下代码序列定义立即值混洗指令的一个特定实现:
Figure DEST_PATH_IMAGE011
在此,输入数据元素/通路基于立即值的值来移位1、2、4、8或16个位置。寄存器src1是额外的标量源寄存器,其用作在源通路索引无效时存储到目的地中的数据元素位置的填充值。如果未提供填充值,并且源通路索引无效,则目的地中的数据元素位置设置成0。标志寄存器(FLAG)用作源掩码。如上所述的,如果源通路的标志位设置成1,则源通路被标记为无效的,并且该指令继续进行。
间接混洗Up/Dn/XOR指令
间接混洗指令具有控制从源通路到目的地通路的映射的源操作数(src1)。间接混洗指令的一个实施例采取如下的形式:
shuffle_<up/dn/xor> dest src0 src1 <可选标志>
其中src0存储N个双字,src1存储1个双字,并且dest存储N个双字。
以下代码序列定义立即值混洗指令的一个特定实现:
Figure 783744DEST_PATH_IMAGE012
因而,间接混洗指令以与上述的立即值混洗指令类似的方式操作,但源通路到目的地通路的映射由源寄存器src1而非立即值控制。
跨通路最小值/最大值指令
针对浮点和整数数据类型而支持跨通路最小值/最大值指令的实施例。跨通路最小值指令采取lane_min dest src0的形式,并且跨通路最大值指令采取lane_max dest src0的形式,其中src0存储 N个双字,并且dest存储1个双字。
举例来说,以下代码序列定义跨通路最小值的一个特定实现:
Figure DEST_PATH_IMAGE013
在该实施例中,源寄存器的数据元素位置i中的双字值与目的地寄存器中的数据元素比较,并且这两个值的最小值被复制到目的地寄存器。跨通路最大指令以基本上相同的方式操作,唯一差异是位置i中的数据元素和目的地值的最大值被选择。
跨通路最小值/最大值索引指令
跨通路最小值索引指令的实施例采取lane_min_index dest src0的形式,并且跨通路最大值索引指令采取lane_max _index dest src0的形式,其中src0存储N个双字,并且dest存储1个双字。
举例来说,以下代码序列定义跨通路最小值索引指令的一个特定实现:
Figure 859016DEST_PATH_IMAGE014
在该实施例中,目的地索引跨目的地寄存器从0递增至SIMD宽度。如果执行掩码位被设置,则源寄存器中的位置i处的数据元素被复制到暂时存储位置(tmp),并且目的地索引被设置成数据元素位置i。
跨通路排序网络(sorting network)指令
在一个实施例中,跨通路排序网络指令按升序(sortnet_min)或按降序(sortnet_max)使用宽度N的(稳定)排序网络来对所有N个输入元素进行排序。指令的最小值/最大值版本分别采取sortnet_min dest src0和sortnet_maxdest src0的形式。在一个实现中,src0和dest存储N个双字。最小值/最大值排序在src0的N个双字上执行,并且升序的元素(对于最小值)或降序的元素(对于最大值)按其相应排序的顺序存储于dest中。定义指令的码序列的一个示例是:dst = apply_N_wide_sorting_network_min/max(src0)。
跨通路排序网络索引指令
在一个实施例中,跨通路排序网络索引指令使用宽度为N的(稳定)排序网络来对所有N个输入元素进行排序,但按升序(sortnet_min)或按降序(sortnet_max)返回序列改变的索引。指令的最小值/最大值版本采取sortnet_min_index dest src0和sortnet_max_indexdest src0的形式,其中src0和dest各自存储N个双字。定义指令的码序列的一个示例是dst= apply_N_wide_sorting_network_min/max_index (src0)。
用于执行上面的指令中的任何指令的方法的一个实施例在图56中图示。该方法可以在上述的具体处理器架构上实现,但不限于任何特定处理器或系统架构。
在5601,在处理器核上执行主图形线程的指令。这可以包括例如上述的核中的任何核(例如,图形核3730)。当在5602确定在主图形线程内到达光线追踪工作时,光线追踪指令被卸载到光线追踪执行电路,该光线追踪执行电路可以采取诸如上面关于图55描述的功能单元(FU)的形式或可以位于如关于图37描述的专用的光线追踪核3750中。
在5603,光线追踪指令被解码并且从存储器获取,并且在5605,指令被解码成可执行操作(在要求解码器的实施例中)。在5604,光线追踪指令被调度并且分派,以便由光线追踪电路执行。在5605,光线追踪指令由光线追踪电路执行。例如,指令可以被分派并且在上述的FU(例如,向量FU 5510、光线追踪FU5512等等)和/或图形核3730或光线追踪核3750上被执行。
在针对光线追踪指令的执行完成时,在5606,结果被存储(例如,被存储回到存储器3798),并且在5607,通知主图形线程。在5608,在主线程的上下文内处理光线追踪结果(例如,从存储器读取并且集成到图形渲染结果中)。
在上述实施例中,术语“引擎”或“模块”或“逻辑”可以指以下各项、是以下各项的部分或者包括以下各项:执行一个或多个软件或固件程序的专用集成电路(ASIC)、电子电路、处理器(共享、专用或群组)和/或存储器(共享、专用或群组)、组合逻辑电路和/或提供所描述的功能性的其他合适的组件。在实施例中,引擎、模块或逻辑可以在固件、硬件、软件、或者固件、硬件和软件的任何组合中实现。
本发明的实施例可以包括上面已描述的各种步骤。这些步骤可以体现在机器可执行指令中,所述机器可执行指令可以被用来促使通用或专用处理器执行步骤。备选地,这些步骤可以由含有用于执行步骤的硬连线逻辑的特定硬件组件执行,或者由编程的计算机组件和定制硬件组件的任何组合执行。
如本文中所述,指令可以涉及硬件的特定配置(诸如配置成执行某些操作或具有预确定的功能性的专用集成电路(ASIC)),或在非暂态计算机可读介质中体现的存储器中存储的软件指令。因此,使用在一个或多个电子装置(例如,终端站、网络元件等)上存储和执行的代码和数据,能够实现附图中示出的技术。此类电子装置使用计算机机器可读介质(诸如非暂态计算机机器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪速存储器装置;相变存储器)和暂态计算机机器可读通信介质(例如,电信号、光信号、声信号或其他形式的传播信号——诸如载波、红外信号、数字信号等))来存储并传递(在内部和/或通过网络与其他电子装置)代码和数据。
另外,此类电子装置通常包括一组一个或多个处理器,所述一组一个或多个处理器耦合到一个或多个其他组件,诸如一个或多个存储装置(非暂态机器可读存储介质)、用户输入/输出装置(例如,键盘、触摸屏和/或显示器)和网络连接。该组处理器与其他组件的耦合通常通过一个或多个总线和桥接器(也称为总线控制器)。存储装置和携带网络业务的信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定电子装置的存储装置通常存储代码和/或数据以便在该电子装置的该组一个或多个处理器上执行。当然,本发明的实施例的一个或多个部分可以使用软件、固件和/或硬件的不同组合来实现。在此详细描述通篇,为了解释的目的,阐述了许多特定的细节以便提供本发明的详尽理解。然而,本领域的技术人员将明白,可以在没有这些特定细节中的一些特定细节的情况下实践本发明。在某些实例中,没有以详尽细节描述公知的结构和功能,以便避免混淆本发明的主题。因此,应根据随附的权利要求来判断本发明的范围和精神。
本发明还提供了以下技术方案:
技术方案1. 一种方法,包括:
执行具有多个线程的应用;
标识用于在本地图形处理器上执行的所述线程的第一子集和用于在本地处理器的虚拟化表示上执行的所述线程的第二子集;
在所述本地图形处理器上调度线程的所述第一子集;
通过将所述线程或所述线程的表示传送到与所述本地处理器的所述虚拟化表示相关联的基于云的处理资源来调度所述线程的所述第二子集;以及
将在所述本地图形处理器上执行线程的所述第一子集的第一结果与在所述基于云的处理资源上执行线程的所述第二子集的第二结果组合以渲染图像帧。
技术方案2. 如技术方案1所述的方法,还包括:
评估所述多个线程以标识线程的所述第一和第二子集。
技术方案3. 如技术方案2所述的方法,其中评估所述多个线程还包括:考虑与所述本地处理器的所述虚拟化表示上的执行相关联的度量,评估与所述多个线程相关联的执行要求。
技术方案4. 如技术方案3所述的方法,其中所述执行要求包括时延和/或带宽阈值,并且其中所述度量包括与所述本地处理器的所述虚拟化表示上的执行相关联的时延和/或带宽统计。
技术方案5. 如技术方案1所述的方法,还包括:
安装和/或枚举所述本地图形处理器和所述本地处理器的所述虚拟化表示。
技术方案6. 如技术方案1所述的方法,其中与线程的所述第一子集中的第一图形线程相关联的第一命令要存储于第一命令缓冲器中,并且与线程的所述第二子集中的第二图形线程相关联的第二命令要存储于第二命令缓冲器中。
技术方案7. 如技术方案6所述的方法,还包括:
通过将所述第一命令转移到所述本地图形处理器的第一命令队列来在所述本地图形处理器上调度所述第一图形线程,所述本地图形处理器要处理来自所述第一命令队列的所述第一命令。
技术方案8. 如技术方案7所述的方法,还包括:
通过将所述第二命令转移到第二命令队列来在所述第二本地图形处理器的所述虚拟化表示上调度所述第二图形线程,所述基于云的图形执行资源要处理来自所述第二命令队列的所述第二命令。
技术方案9. 如技术方案1所述的方法,其中所述多个线程中的每个线程包括图形工作组内的工作项。
技术方案10. 一种机器可读介质,在所述机器可读介质上存储有程序代码,所述程序代码在由机器执行时,引起所述机器执行以下操作:
执行具有多个线程的应用;
标识用于在本地图形处理器上执行的所述线程的第一子集和用于在本地处理器的虚拟化表示上执行的所述线程的第二子集;
在所述本地图形处理器上调度线程的所述第一子集;
通过将所述线程或所述线程的表示传送到与所述本地处理器的所述虚拟化表示相关联的基于云的处理资源来调度所述线程的所述第二子集;以及
将在所述本地图形处理器上执行线程的所述第一子集的第一结果与在所述基于云的处理资源上执行线程的所述第二子集的第二结果组合以渲染图像帧。
技术方案11. 如技术方案10所述的机器可读介质,还包括用来引起所述机器执行以下操作的程序代码:
评估所述多个线程以标识线程的所述第一和第二子集。
技术方案12. 如技术方案11所述的机器可读介质,其中评估所述多个线程还包括:考虑与所述本地处理器的所述虚拟化表示上的执行相关联的度量,评估与所述多个线程相关联的执行要求。
技术方案13. 如技术方案12所述的机器可读介质,其中所述执行要求包括时延和/或带宽阈值,并且其中所述度量包括与所述本地处理器的所述虚拟化表示上的执行相关联的时延和/或带宽统计。
技术方案14. 如技术方案10所述的机器可读介质,还包括用来引起所述机器执行以下操作的程序代码:
安装和/或枚举所述本地图形处理器和所述本地处理器的所述虚拟化表示。
技术方案15. 如技术方案10所述的机器可读介质,其中与线程的所述第一子集中的第一图形线程相关联的第一命令要存储于第一命令缓冲器中,并且与线程的所述第二子集中的第二图形线程相关联的第二命令要存储于第二命令缓冲器中。
技术方案16. 如技术方案15所述的机器可读介质,还包括用来引起所述机器执行以下操作的程序代码:
通过将所述第一命令转移到所述本地图形处理器的第一命令队列来在所述本地图形处理器上调度所述第一图形线程,所述本地图形处理器要处理来自所述第一命令队列的所述第一命令。
技术方案17. 如技术方案16所述的机器可读介质,还包括用来引起所述机器执行以下操作的程序代码:
通过将所述第二命令转移到第二命令队列来在所述第二本地图形处理器的所述虚拟化表示上调度所述第二图形线程,所述基于云的图形执行资源要处理来自所述第二命令队列的所述第二命令。
技术方案18. 如技术方案10所述的机器可读介质,其中所述多个线程中的每个线程包括图形工作组内的工作项。
技术方案19. 一种设备,包括:
本地图形处理器,所述本地图形处理器用来执行应用的线程;
图形处理器虚拟化电路和/或逻辑,所述图形处理器虚拟化电路和/或逻辑用来生成本地处理器的虚拟化表示;
调度器,所述调度器用来标识用于在本地图形处理器上执行的所述线程的第一子集和用于在本地处理器的虚拟化表示上执行的所述线程的第二子集;
所述调度器用来在所述本地图形处理器上调度线程的所述第一子集并且通过将所述线程或所述线程的表示传送到与所述本地处理器的所述虚拟化表示相关联的基于云的处理资源来调度所述线程的所述第二子集;以及
所述本地图形处理器用来将在所述本地图形处理器上执行线程的所述第一子集的第一结果与在所述基于云的处理资源上执行线程的所述第二子集的第二结果组合以渲染图像帧。
技术方案20. 如技术方案19所述的设备,其中所述调度器包括用来评估所述多个线程以标识线程的所述第一和第二子集的评估电路/逻辑。
技术方案21. 如技术方案20所述的设备,其中评估所述多个线程还包括:考虑与所述本地处理器的所述虚拟化表示上的执行相关联的度量,评估与所述多个线程相关联的执行要求。
技术方案22. 如技术方案21所述的设备,其中所述执行要求包括时延和/或带宽阈值,并且其中所述度量包括与所述本地处理器的所述虚拟化表示上的执行相关联的时延和/或带宽统计。
技术方案23. 如技术方案19所述的设备,还包括用来安装和/或枚举所述本地图形处理器和所述本地处理器的所述虚拟化表示的电路和/或逻辑。
技术方案24. 如技术方案19所述的设备,其中与线程的所述第一子集中的第一图形线程相关联的第一命令要存储于第一命令缓冲器中,并且与线程的所述第二子集中的第二图形线程相关联的第二命令要存储于第二命令缓冲器中。
技术方案25. 如技术方案24所述的设备,其中所述调度器要通过将所述第一命令转移到所述本地图形处理器的第一命令队列来在所述本地图形处理器上调度所述第一图形线程,所述本地图形处理器要处理来自所述第一命令队列的所述第一命令。
技术方案26. 如技术方案25所述的设备,其中所述调度器要通过将所述第二命令转移到第二命令队列来在所述第二本地图形处理器的所述虚拟化表示上调度所述第二图形线程,所述基于云的图形执行资源要处理来自所述第二命令队列的所述第二命令。
技术方案27. 如技术方案19所述的设备,其中所述多个线程中的每个线程包括图形工作组内的工作项。

Claims (25)

1.一种方法,包括:
执行具有多个线程的应用;
标识用于在本地图形处理器上执行的所述线程的第一子集和用于在本地处理器的虚拟化表示上执行的所述线程的第二子集;
在所述本地图形处理器上调度线程的所述第一子集;
通过将所述线程或所述线程的表示传送到与所述本地处理器的所述虚拟化表示相关联的基于云的处理资源来调度所述线程的所述第二子集;以及
将在所述本地图形处理器上执行线程的所述第一子集的第一结果与在所述基于云的处理资源上执行线程的所述第二子集的第二结果组合以渲染图像帧。
2.如权利要求1所述的方法,还包括:
评估所述多个线程以标识线程的所述第一和第二子集。
3.如权利要求2所述的方法,其中评估所述多个线程还包括:考虑与所述本地处理器的所述虚拟化表示上的执行相关联的度量,评估与所述多个线程相关联的执行要求。
4.如权利要求3所述的方法,其中所述执行要求包括时延和/或带宽阈值,并且其中所述度量包括与所述本地处理器的所述虚拟化表示上的执行相关联的时延和/或带宽统计。
5.如权利要求1或4所述的方法,还包括:
安装和/或枚举所述本地图形处理器和所述本地处理器的所述虚拟化表示。
6.如权利要求1或5所述的方法,其中与线程的所述第一子集中的第一图形线程相关联的第一命令要存储于第一命令缓冲器中,并且与线程的所述第二子集中的第二图形线程相关联的第二命令要存储于第二命令缓冲器中。
7.如权利要求6所述的方法,还包括:
通过将所述第一命令转移到所述本地图形处理器的第一命令队列来在所述本地图形处理器上调度所述第一图形线程,所述本地图形处理器要处理来自所述第一命令队列的所述第一命令。
8.如权利要求7所述的方法,还包括:
通过将所述第二命令转移到第二命令队列来在所述第二本地图形处理器的所述虚拟化表示上调度所述第二图形线程,所述基于云的图形执行资源要处理来自所述第二命令队列的所述第二命令。
9.如权利要求1或8所述的方法,其中所述多个线程中的每个线程包括图形工作组内的工作项。
10.一种机器可读介质,在所述机器可读介质上存储有程序代码,所述程序代码在由机器执行时,引起所述机器执行以下操作:
执行具有多个线程的应用;
标识用于在本地图形处理器上执行的所述线程的第一子集和用于在本地处理器的虚拟化表示上执行的所述线程的第二子集;
在所述本地图形处理器上调度线程的所述第一子集;
通过将所述线程或所述线程的表示传送到与所述本地处理器的所述虚拟化表示相关联的基于云的处理资源来调度所述线程的所述第二子集;以及
将在所述本地图形处理器上执行线程的所述第一子集的第一结果与在所述基于云的处理资源上执行线程的所述第二子集的第二结果组合以渲染图像帧。
11.如权利要求10所述的机器可读介质,还包括用来引起所述机器执行以下操作的程序代码:
评估所述多个线程以标识线程的所述第一和第二子集。
12.如权利要求11所述的机器可读介质,其中评估所述多个线程还包括:考虑与所述本地处理器的所述虚拟化表示上的执行相关联的度量,评估与所述多个线程相关联的执行要求。
13.如权利要求12所述的机器可读介质,其中所述执行要求包括时延和/或带宽阈值,并且其中所述度量包括与所述本地处理器的所述虚拟化表示上的执行相关联的时延和/或带宽统计。
14.如权利要求10或13所述的机器可读介质,还包括用来引起所述机器执行以下操作的程序代码:
安装和/或枚举所述本地图形处理器和所述本地处理器的所述虚拟化表示。
15.如权利要求10或14所述的机器可读介质,其中与线程的所述第一子集中的第一图形线程相关联的第一命令要存储于第一命令缓冲器中,并且与线程的所述第二子集中的第二图形线程相关联的第二命令要存储于第二命令缓冲器中。
16.如权利要求15所述的机器可读介质,还包括用来引起所述机器执行以下操作的程序代码:
通过将所述第一命令转移到所述本地图形处理器的第一命令队列来在所述本地图形处理器上调度所述第一图形线程,所述本地图形处理器要处理来自所述第一命令队列的所述第一命令。
17.如权利要求16所述的机器可读介质,还包括用来引起所述机器执行以下操作的程序代码:
通过将所述第二命令转移到第二命令队列来在所述第二本地图形处理器的所述虚拟化表示上调度所述第二图形线程,所述基于云的图形执行资源要处理来自所述第二命令队列的所述第二命令。
18.如权利要求10或17所述的机器可读介质,其中所述多个线程中的每个线程包括图形工作组内的工作项。
19.一种设备,包括:
本地图形处理器,所述本地图形处理器用来执行应用的线程;
图形处理器虚拟化电路和/或逻辑,所述图形处理器虚拟化电路和/或逻辑用来生成本地处理器的虚拟化表示;
调度器,所述调度器用来标识用于在本地图形处理器上执行的所述线程的第一子集和用于在本地处理器的虚拟化表示上执行的所述线程的第二子集;
所述调度器用来在所述本地图形处理器上调度线程的所述第一子集并且通过将所述线程或所述线程的表示传送到与所述本地处理器的所述虚拟化表示相关联的基于云的处理资源来调度所述线程的所述第二子集;以及
所述本地图形处理器用来将在所述本地图形处理器上执行线程的所述第一子集的第一结果与在所述基于云的处理资源上执行线程的所述第二子集的第二结果组合以渲染图像帧。
20.如权利要求19所述的设备,其中所述调度器包括用来评估所述多个线程以标识线程的所述第一和第二子集的评估电路/逻辑。
21.如权利要求20所述的设备,其中评估所述多个线程还包括:考虑与所述本地处理器的所述虚拟化表示上的执行相关联的度量,评估与所述多个线程相关联的执行要求。
22.如权利要求21所述的设备,其中所述执行要求包括时延和/或带宽阈值,并且其中所述度量包括与所述本地处理器的所述虚拟化表示上的执行相关联的时延和/或带宽统计。
23.如权利要求19或22所述的设备,还包括用来安装和/或枚举所述本地图形处理器和所述本地处理器的所述虚拟化表示的电路和/或逻辑。
24.如权利要求19或23所述的设备,其中与线程的所述第一子集中的第一图形线程相关联的第一命令要存储于第一命令缓冲器中,并且与线程的所述第二子集中的第二图形线程相关联的第二命令要存储于第二命令缓冲器中。
25.如权利要求24所述的设备,其中所述调度器要通过将所述第一命令转移到所述本地图形处理器的第一命令队列来在所述本地图形处理器上调度所述第一图形线程,所述本地图形处理器要处理来自所述第一命令队列的所述第一命令。
CN202010589455.7A 2019-09-30 2020-06-24 使用本地和基于云的处理资源的实时图形处理设备和方法 Pending CN112669193A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/588,855 US11127107B2 (en) 2019-09-30 2019-09-30 Apparatus and method for real time graphics processing using local and cloud-based graphics processing resources
US16/588855 2019-09-30

Publications (1)

Publication Number Publication Date
CN112669193A true CN112669193A (zh) 2021-04-16

Family

ID=74872779

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010589455.7A Pending CN112669193A (zh) 2019-09-30 2020-06-24 使用本地和基于云的处理资源的实时图形处理设备和方法

Country Status (5)

Country Link
US (2) US11127107B2 (zh)
JP (1) JP2021057011A (zh)
KR (1) KR20210038294A (zh)
CN (1) CN112669193A (zh)
DE (1) DE102020124932A1 (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113343813A (zh) * 2021-05-31 2021-09-03 太原理工大学 一种基于单节点光子储备池计算的动作视频识别方法
CN113343814A (zh) * 2021-05-31 2021-09-03 太原理工大学 一种基于单节点光子储备池计算的手写数字图像识别方法
CN114491049A (zh) * 2022-02-17 2022-05-13 金陵科技学院 一种基于信息管理的办公系统资产配置方法
CN114723601A (zh) * 2022-04-08 2022-07-08 山东翰林科技有限公司 一种虚拟场景下的模型结构化建模及快速渲染方法
CN113918249B (zh) * 2021-09-14 2023-11-21 北京房江湖科技有限公司 一种背景模糊控件的实现方法及装置

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3973710A4 (en) * 2019-05-22 2023-05-03 Nokia Technologies Oy METHOD, DEVICE AND COMPUTER PROGRAM PRODUCT FOR ENCODING AND DECODING VOLUMETRIC VIDEO
US11579929B2 (en) * 2020-01-31 2023-02-14 Salesforce. Inc. Cross platform application flow orchestration by transmitting the application flow including a transition rule to a plurality of computation layers
JP7368511B2 (ja) * 2020-02-03 2023-10-24 株式会社ソニー・インタラクティブエンタテインメント データ処理システム、データ転送装置およびコンテキストスイッチ方法
US11568021B2 (en) 2020-02-21 2023-01-31 Alibaba Group Holding Limited Vector-vector multiplication techniques for processing systems
US11252226B2 (en) * 2020-03-05 2022-02-15 Qualcomm Incorporated Methods and apparatus for distribution of application computations
US11500680B2 (en) * 2020-04-24 2022-11-15 Alibaba Group Holding Limited Systolic array-friendly data placement and control based on masked write
CN111709870B (zh) * 2020-05-28 2023-10-03 钟杰东 一种zjd应用处理器架构
US11409839B2 (en) * 2020-08-21 2022-08-09 Alibaba Group Holding Limited Programmable and hierarchical control of execution of GEMM operation on accelerator
US11663759B1 (en) 2022-04-04 2023-05-30 Cloudstream Medical Imaging, Inc. System and method for processing multi-dimensional and time-overlapping imaging data in real time with cloud computing
US11690601B1 (en) 2022-04-04 2023-07-04 Cloudstream Medical Imaging, Inc. System and method for processing multi-dimensional ultrasound imaging data on real-time cloud computers
US20230394739A1 (en) * 2022-06-06 2023-12-07 William USHER Apparatus and Method for Approximate Puzzlepiece Compositing
WO2024010125A1 (ko) * 2022-07-08 2024-01-11 엘지전자 주식회사 사이니지 제공을 위한 에지 및 클라우드 간 협업 플랫폼

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9280375B1 (en) * 2014-04-30 2016-03-08 Google Inc. Dynamically adjustable virtual machine
WO2016024874A1 (en) * 2014-08-15 2016-02-18 Intel Corporation Facilitating dynamic thread-safe operations for variable bit-length transactions on computing devices

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113343813A (zh) * 2021-05-31 2021-09-03 太原理工大学 一种基于单节点光子储备池计算的动作视频识别方法
CN113343814A (zh) * 2021-05-31 2021-09-03 太原理工大学 一种基于单节点光子储备池计算的手写数字图像识别方法
CN113343813B (zh) * 2021-05-31 2022-05-10 太原理工大学 一种基于单节点光子储备池计算的动作视频识别方法
CN113343814B (zh) * 2021-05-31 2022-06-14 太原理工大学 一种基于单节点光子储备池计算的手写数字图像识别方法
CN113918249B (zh) * 2021-09-14 2023-11-21 北京房江湖科技有限公司 一种背景模糊控件的实现方法及装置
CN114491049A (zh) * 2022-02-17 2022-05-13 金陵科技学院 一种基于信息管理的办公系统资产配置方法
CN114723601A (zh) * 2022-04-08 2022-07-08 山东翰林科技有限公司 一种虚拟场景下的模型结构化建模及快速渲染方法

Also Published As

Publication number Publication date
US11127107B2 (en) 2021-09-21
US11593909B2 (en) 2023-02-28
US20220148123A1 (en) 2022-05-12
DE102020124932A1 (de) 2021-04-01
JP2021057011A (ja) 2021-04-08
KR20210038294A (ko) 2021-04-07
US20210097641A1 (en) 2021-04-01

Similar Documents

Publication Publication Date Title
US11995767B2 (en) Apparatus and method for compressing ray tracing acceleration structure build data
US11593909B2 (en) Apparatus and method for real time graphics processing using local and cloud-based graphics processing resources
US20210287431A1 (en) Apparatus and method for displaced mesh compression
US11769288B2 (en) Speculative execution of hit and intersection shaders on programmable ray tracing architectures
CN111383159A (zh) 用于加速叶节点中的相交的标量引擎集群
US20210407177A1 (en) Apparatus and method for ray tracing with grid primitives
US11087522B1 (en) Apparatus and method for asynchronous ray tracing
US11670035B2 (en) Apparatus and method for performing non-local means filtering using motion estimation circuitry of a graphics processor
CN111402377A (zh) 基于云的实时光线追踪
US11915357B2 (en) Apparatus and method for throttling a ray tracing pipeline
US11900498B2 (en) Apparatus and method for performing a stable and short latency sorting operation
CN112258620A (zh) 用于光线追踪指令处理和执行的装置和方法
CN113470159A (zh) 用于光线追踪流水线中的双精度光线遍历的设备和方法
CN111383318A (zh) 用于层级光束追踪器的方法和装置
CN111383162A (zh) 用于高效地存储光线遍历数据的装置和方法
CN113470157A (zh) 用于在光线遍历硬件中执行盒查询的设备和方法
CN111383316A (zh) 用于加速数据结构修整的装置和方法
US11989817B2 (en) Apparatus and method for high quality ray-traced level of detail transitions
CN111383317A (zh) 通用光线追踪查询的装置和方法

Legal Events

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