掌桥专利:专业的专利平台
掌桥专利
首页

分布式压缩/解压缩系统

文献发布时间:2024-04-18 19:57:31


分布式压缩/解压缩系统

要求优先权

本申请要求2021年12月23日提交的题为“DISTRIBUTED COMPRESSION/DECOMPRESSION SYSTEM(分布式压缩/解压缩系统)”的第17/561,652号美国专利申请的优先权权益。

技术领域

描述一般涉及图形处理,并且更特别地,描述涉及图形子系统中的压缩。

背景技术

在现代GPU(图形处理单元)系统中,有许多生产者/消费者存储器流可以从存储器压缩中受益。压缩可以减少数据的存储器占用空间,从而增加可以被缓存以供使用的数据量。传统上,GPU系统是单点压缩/解压缩系统,具有直接在存储器路径中的或者在GPU的大存储器缓存和其余部分之间的压缩器/解压缩器对。单点系统限制了缓存的应用,因为所有数据都要经过压缩器/解压器对。

附图说明

以下描述包括对各图的讨论,各图具有通过实现方式的示例的方式给出的图示。附图应当通过示例的方式而非限制的方式来理解。如本文中所使用的,对一个或多个示例的引用应理解为描述包括在本发明的至少一个实现方式中的特定特征、结构或特性。本文中出现的诸如“在一个示例中”或“在替代示例中”之类的短语提供了本发明的实现方式的示例,并且不一定全部指相同的实现方式。然而,它们也不一定相互排斥。

图1是根据示例的处理系统的框图。

图2A-2D图示了由本文中所描述的示例提供的计算系统和图形处理器。

图3A-3C图示了由本文中所描述的示例提供的附加图形处理器和计算加速器体系结构的框图。

图4是根据一些示例的图形处理器的图形处理引擎的框图。

图5A-5B图示了根据本文中所描述示例的线程执行逻辑,包括图形处理器核心中采用的处理元件阵列。

图6图示了根据示例的附加执行单元。

图7是图示了根据一些示例的图形处理器指令格式的框图。

图8是图形处理器的另一示例的框图。

图9A是图示了根据一些示例的图形处理器命令格式的框图。

图9B是图示了根据示例的图形处理器命令序列的框图。

图10图示了根据一些示例的用于数据处理系统的示例性图形软件体系结构。

图11A是图示了根据示例的可以用于制造集成电路以执行操作的IP核心开发系统的框图。

图11B图示了根据本文中所描述的一些示例的集成电路封装组件的截面侧视图。

图11C图示了包括连接到衬底的硬件逻辑小芯片的多个单元的封装组件。

图11D图示了根据示例的包括可互换小芯片的封装组件。

图12、13A和13B图示了根据本文中所描述各个示例的可以使用一个或多个IP核心制造的示例性集成电路及相关联图形处理器。

图14图示了具有向量单元和矩阵单元的图形处理器的示例。

图15图示了具有并行计算集群的图形处理单元的示例。

图16图示了具有用于在图形处理器之间传送的压缩数据分组的系统的示例。

图17图示了图形压缩体系结构的示例。

图18图示了具有分布式压缩和解压缩的系统的示例。

图19图示了具有CCS缓存的分布式压缩和解压缩的示例。

图20是应用分布式压缩的示例的流程图。

图21是应用分布式解压缩的示例的流程图。

接下来是对某些细节和实现方式的描述,包括对各图的非限制性描述,这些描述可以描绘一些或全部示例,以及其他潜在的实现方式。

具体实施方式

如本文中所描述的,图形处理器包括多级存储器单元,包括位于图形部件附近的存储器设备和缓存设备。图形处理器包括分布式压缩/解压缩,包括缓存设备和存储器设备之间的模块。当写入数据从缓存设备移动到存储器设备时,该模块可以执行写入数据的压缩,并且当读取数据从存储器设备移动到缓存设备时,该模块可以执行读取数据的解压缩。图形处理器可以包括第二级缓存,在第一级缓存和第二级缓存之间具有另一压缩模块。

与传统的单点系统相比,这样的系统在数据如何取得缓存方面提供了更大的灵活性。该系统可以混合和匹配各种数据流,从而允许压缩和未压缩数据的数据流流向各种生产者和消费者。分布式压缩/解压缩允许系统动态地重新配置数据将如何被缓存,从而允许更好地利用GPU(图形处理单元)系统中的各种数据流。在一个示例中,缓存可以存储压缩数据和未压缩数据两者,具有各种压缩/解压缩点,以实现灵活的压缩数据流和未压缩数据流。在一个示例中,对于生产者以稀疏方式写入数据的情况,缓存可以作为压缩合并缓冲器来操作。

带有分布式压缩/解压缩的系统选择性地确定数据将在哪里被压缩和解压缩或不压缩的灵活性可以在单点体系结构上改善系统的效率。分布式体系结构可以使得数据不必经过不必要的压缩或解压缩就能够移动,这取决于消费者将如何使用数据。系统可以为每个客户端单独选择数据压缩的位置。在一个示例中,公共缓存或由不同客户端共享的缓存可以存储压缩数据和未压缩数据两者。总体而言,分布式体系结构为相同的管芯区域提供了改善的GPU性能和功率效率。

系统概述

图1是根据示例的处理系统100的框图。系统100可以用于单处理器桌面型电脑系统、多处理器工作站系统或具有大量处理器102或处理器核心107的服务器系统中。在一个示例中,系统100是被并入用于在移动设备、手持式设备或嵌入式设备中,诸如在具有到局域网或广域网的有线或无线连接性的物联网(Internet-of-things,loT)设备内使用的片上系统(system-on-a-chip,SoC)集成电路内的处理平台。

在一个示例中,系统100可以包括以下各项、与以下各项耦合或者被集成在以下各项内:基于服务器的游戏平台;游戏控制台,包括游戏和媒体控制台、移动游戏控制台、手持游戏控制台、或在线游戏控制台。在一些示例中,系统100是移动电话、智能电话、平板计算设备或移动互联网连接设备(诸如具有低内部存储容量的膝上型电脑)的一部分。处理系统100还可以包括以下各项、与以下各项耦合或者被集成在以下各项内:可穿戴设备,诸如智能手表可穿戴设备;智能眼镜或服装,其用增强现实(AR)或虚拟现实(VR)特征来增强以提供视觉、音频或触觉输出,以补充真实世界视觉、音频和触觉体验或者以其他方式提供文本、音频、图形、视频、全息图像或视频,或触觉反馈;其他增强现实(augmentedreality,AR)设备;或其他虚拟现实(virtual reality,VR)设备。在一些示例中,处理系统100包括电视或机顶盒设备或是其一部分。在一个示例中,系统100可以包括以下各项、与以下各项耦合或者被集成在以下各项内:自动驾驶车辆,诸如公共汽车、拖拉机拖车、汽车、摩托车或电动自行车、飞机或滑翔机(或其任何组合)。自动驾驶车辆可以使用系统100来处理车辆周围感测到的环境。

在一些示例中,一个或多个处理器102每个包括用于处理指令的一个或多个处理器核心107,所述指令在被执行时执行系统或用户软件的操作。在一些示例中,一个或多个处理器核心107中的至少一个被配置为处理具体指令集109。在一些示例中,指令集109可以促进复杂指令集计算(Complex Instruction Set Computing,CISC)、精简指令集计算(Reduced Instruction Set Computing,RISC)、或经由超长指令字(Very LongInstruction Word,VLIW)的计算。一个或多个处理器核心107可以处理不同的指令集109,该指令集109可以包括用于促进对其他指令集的仿真的指令。处理器核心107还可以包括其他处理设备,诸如数字信号处理器(Digital Signal Processor,DSP)。

在一些示例中,处理器102包括缓存存储器104。取决于体系结构,处理器102可以具有单个内部缓存或多级内部缓存。在一些示例中,在处理器102的各种部件当中共享缓存存储器。在一些示例中,处理器102还使用外部缓存(例如,第三级(L3)缓存或最后一级缓存(Last Level Cache,LLC))(未示出),可以使用已知的缓存一致性技术来在处理器核心107当中共享外部缓存。寄存器堆106可以附加地包括在处理器102中,并且可以包括用于存储不同类型的数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可以特定于处理器102的设计。

在一些示例中,一个或多个处理器102与一个或多个接口总线110耦合,以在处理器102和系统100中的其他部件之间传输通信信号,诸如地址、数据或控制信号。在一个示例中,接口总线110可以是处理器总线,诸如直接媒体接口(Direct Media Interface,DMI)总线的一个版本。然而,处理器总线不限于DMI总线,并且可以包括一个或多个外围部件互连总线(例如,PCI、PCI express)、存储器总线或其他类型的接口总线。在一个示例中,(一个或多个)处理器102包括集成存储器控制器116和平台控制器中枢130。存储器控制器116促进存储器设备和系统100的其他部件之间的通信,而平台控制器中枢(platformcontrollerhub,PCH)130经由本地I/O总线提供到I/O设备的连接。

存储器设备120可以是动态随机存取存储器(dynamic random-access memory,DRAM)设备、静态随机存取存储器(static random-access memory,SRAM)设备、闪速存储器设备、相变存储器设备或具有合适性能以用作进程存储器的某个其他存储器设备。在一个示例中,存储器设备120可以作为系统100的系统存储器进行操作,以存储数据122和指令121,以供在一个或多个处理器102执行应用或进程时使用。存储器控制器116还与可选的外部图形处理器118耦合,该外部图形处理器118可以与处理器102中的一个或多个图形处理器108通信,以执行图形和媒体操作。在一些示例中,图形、媒体和/或计算操作可以由加速器112辅助,加速器112是可以被配置为执行专门的图形、媒体或计算操作的集合的协处理器。例如,在一个示例中,加速器112是用于优化机器学习或计算操作的矩阵乘法加速器。在一个示例中,加速器112是可以用于与图形处理器108协同执行光线追踪操作的光线追踪加速器。在一个示例中,外部加速器119可以用来代替加速器112或与之协同使用。

在一些示例中,显示设备111可以连接至(一个或多个)处理器102。显示设备111可以是内部显示设备(如在移动电子设备或膝上型电脑设备中)或经由显示接口(例如,显示端口、嵌入式显示端口、MIPI、HDMI等)附接的外部显示设备中的一个或多个。在一个示例中,显示设备111可以是头戴式显示器(head mounted display,HMD),诸如在虚拟现实(VR)应用或增强现实(AR)应用中使用的立体显示设备。

在一些示例中,平台控制器中枢130使得外围设备能够经由高速I/O总线连接至存储器设备120和处理器102。I/O外围设备包括但不限于音频控制器146、网络控制器134、固件接口128、无线收发器126、触摸传感器125、数据存储设备124(例如,非易失性存储器、易失性存储器、硬盘驱动器、闪速存储器、NAND、3DNAND、3D XPoint等)。数据存储设备124可以经由存储接口(例如,SATA(串行高级技术附件))或经由外围总线(诸如外围部件互连总线(例如,PCI、PCI express))连接。触摸传感器125可以包括触摸屏传感器、压力传感器或指纹传感器。无线收发器126可以是Wi-Fi收发器、蓝牙收发器或移动网络收发器,诸如3G、4G、5G或长期演进(Long-TermEvolution,LTE)收发器。固件接口128实现与系统固件的通信,并且可以是例如统一可扩展固件接口(unified extensible firmware interface,UEFI)。网络控制器134可以实现与有线网络的网络连接。在一些示例中,高性能网络控制器(未示出)与接口总线110耦合。在一个示例中,音频控制器146是多通道高清晰度音频控制器。在一个示例中,系统100包括用于将传统(例如,个人系统2(PS/2))设备耦合到系统的可选传统I/O控制器140。平台控制器中枢130还可以连接到一个或多个通用串行总线(UniversalSerial Bus,USB)控制器142连接输入设备,诸如键盘和鼠标143的组合、相机144或其他USB输入设备。

将领会的是,所示系统100是示例性的而非限制性的,因为也可以使用不同配置的其他类型的数据处理系统。例如,存储器控制器116和平台控制器中枢130的实例可以集成到分立的外部图形处理器(诸如外部图形处理器118)中。在一个示例中,平台控制器中枢130和/或存储器控制器116可以在一个或多个处理器102的外部。例如,系统100可以包括外部存储器控制器116和平台控制器中枢130,它们可以被配置为与(一个或多个)处理器102通信的系统芯片组内的存储器控制器中枢和外围控制器中枢。

例如,可以使用电路板(“橇板(sled)”),在电路板上放置的诸如CPU、存储器和其他部件之类的部件被设计用于增加热性能。在一些示例中,诸如处理器之类的处理部件位于橇板的顶侧,而诸如DIMM(双列直插式存储器模块)的近存储器则位于橇板的底侧。由于这种设计提供了增强的气流,因此部件可以以比典型系统中更高的频率和功率水平操作,从而增加了性能。此外,橇板被配置为与机架中的功率和数据通信线缆盲配,从而增强了它们被快速移除、升级、重新安装和/或替换的能力。类似地,位于橇板上的各个部件,诸如处理器、加速器、存储器和数据存储驱动器,由于它们彼此间的间距增加了,因此被配置为容易升级。在说明性示例中,部件附加地包括证明其真实性的硬件认证特征。

数据中心可以利用支持多种其他网络体系结构(包括以太网和Omni-Path)的单个网络体系结构(“结构”)。橇板可以经由光纤耦合到交换机,这与典型的双绞线布线(例如,5类、5e类、6类等)相比提供更高的带宽和更低的等待时间。由于高带宽、低等待时间互连和网络体系结构,数据中心在使用中可以汇集物理上解聚的资源,诸如存储器、加速器(例如,GPU、图形加速器、FPGA(现场可编程门阵列)、ASIC、神经网络和/或人工智能加速器等)、和数据存储驱动器,并且在按需的基础上将它们提供给计算资源(例如,处理器),使得计算资源能够访问汇集的资源,就好像它们是本地的一样。

电源或功率源可以向系统100或本文中所描述的任何部件或系统提供电压和/或电流。在一个示例中,电源包括AC至DC(交流至直流)适配器,以插入墙壁插座。这样的AC功率可以是可再生能量(例如,太阳能)功率源。在一个示例中,功率源包括DC功率源,诸如外部AC至DC转换器。在一个示例中,功率源或电源包括无线充电硬件,以经由接近充电场进行充电。在一个示例中,功率源可以包括内部电池、交流供应、基于运动的电源、太阳能供应或燃料电池源。

图2A-2D图示了由本文中所描述的示例提供的计算系统和图形处理器。图2A-2D的具有与本文中任何其他图的元件相同的附图标记(或名称)的元件可以以类似于本文中其他地方描述的任何方式操作或起作用,但不限于此。

图2A是处理器200的示例的框图,处理器200具有一个或多个处理器核心202A-202N、集成存储器控制器214和集成图形处理器208。处理器200可以包括多达且包括由虚线框表示的附加核心202N的附加核心。处理器核心202A-202N中的每一个包括一个或多个内部缓存单元204A-204N。在一些示例中,每个处理器核心还能够访问一个或多个共享的缓存单元206。内部缓存单元204A-204N和共享缓存单元206表示处理器200内的缓存存储器层次体系。缓存存储器层次体系可以包括每个处理器核心内的至少一级指令和数据缓存,以及一级或多级共享中级缓存,诸如第二级(L2)、第三级(L3)、第四级(L4)或其他级的缓存,其中最高级的缓存在外部存储器之前被分类为LLC。在一些示例中,缓存一致性逻辑维持各种缓存单元206和204A-204N之间的一致性。

在一些示例中,处理器200还可以包括一个或多个总线控制器单元216和系统代理核心210的集合。一个或多个总线控制器单元216管理外围总线集合,诸如一个或多个PCI或PCI express总线。系统代理核心210提供针对各处理器部件的管理功能性。在一些示例中,系统代理核心210包括一个或多个集成存储器控制器214,用于管理对各种外部存储器设备(未示出)的访问。

在一些示例中,处理器核心202A-202N中的一个或多个包括对同时多线程的支持。在这样的示例中,系统代理核心210包括用于在多线程处理期间协调和操作核心202A-202N的部件。系统代理核心210可以附加地包括功率控制单元(power control unit,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互连中的至少一种,包括促进各处理器部件和高性能嵌入式存储器模块218(诸如eDRAM模块)之间通信的封装上I/O互连。在一些示例中,处理器核心202A-202N中的每一个以及图形处理器208可以将嵌入式存储器模块218用作共享最后一级缓存。

在一些示例中,处理器核心202A-202N是执行相同指令集体系结构的同质核心。在另一示例中,处理器核心202A-202N在指令集体系结构(instruction set architecture,ISA)方面是异构的,其中处理器核心202A-202N中的一个或多个执行第一指令集,而其他核心中的至少一个执行第一指令集的子集或不同的指令集。在一个示例中,处理器核心202A-202N在微体系结构方面是异构的,其中具有相对较高功耗的一个或多个核心与具有较低功耗的一个或多个功率核心耦合。在一个示例中,处理器核心202A-202N在计算能力方面是异构的。此外,处理器200可以实现在一个或多个芯片上或者被实现为具有除其他部件之外的所图示部件的SoC集成电路。

图2B是根据本文中所描述的一些示例的图形处理器核心219的硬件逻辑的框图。图2B的具有与本文中任何其他图的元件相同的附图标记(或名称)的元件可以以类似于本文中其他地方描述的任何方式操作或起作用,但不限于此。图形处理器核心219,有时被称为核心切片,可以是模块化图形处理器内的一个或多个图形核心。图形处理器核心219是一个图形核心切片的例示,并且如本文中所描述的图形处理器可以包括基于目标功率和性能包络的多个图形核心切片。每个图形处理器核心219可以包括与多个子核心221A-221F(也被称为子切片)耦合的固定功能块230,子核心221A-221F包括通用和固定功能逻辑的模块化块。

在一些示例中,固定功能块230包括例如在较低性能和/或较低功率的图形处理器实现方式中可以由图形处理器核心219中的所有子核心共享的几何/固定功能管线231。在各种示例中,几何/固定功能管线231包括3D固定功能管线(例如,如下面所描述的图3和图4中的3D管线312)、视频前端单元、线程生成器和线程调遣器,以及管理统一返回缓冲器(例如,如下面所描述的图4中的统一返回缓冲器418)的统一返回缓冲器管理器。

在一个示例中,固定功能块230还包括图形SoC接口232、图形微控制器233和媒体管线234。图形SoC接口232提供图形处理器核心219与片上系统集成电路内的其他处理器核心之间的接口。图形微控制器233是可编程子处理器,其可配置为管理图形处理器核心219的包括线程调遣、调度和抢占的各种功能。媒体管线234(例如,图3和图4的媒体管线316)包括用于促进多媒体数据(包括图像和视频数据)的解码、编码、预处理和/或后处理的逻辑。媒体管线234经由对子核心221-221F内的计算或采样逻辑的请求来实现媒体操作。

在一个示例中,SoC接口232使得图形处理器核心219能够与通用应用处理器核心(例如,CPU)和/或SoC内的其他部件通信,包括诸如共享最后一级缓存存储器的存储器层次体系元件、系统RAM和/或嵌入式芯片上或封装上DRAM。SoC接口232还可以使得能够与SoC内的固定功能设备(诸如相机成像管线)通信,并且使得能够使用和/或实现可以在图形处理器核心219和SoC内的CPU之间共享的全局存储器原子。SoC接口232还可以实现对图形处理器核心219的功率管理控制,并且启用图形核心219的时钟域与SoC内的其他时钟域之间的接口。在一个示例中,SoC接口232使得能够从命令流转化器(streamer)和全局线程调遣器接收命令缓冲器,该命令缓冲器被配置为向图形处理器内的一个或多个图形核心中的每一个提供命令和指令。当要执行媒体操作时,可以将命令和指令调遣到媒体管线234,或者当要执行图形处理操作时,可以将命令和指令调遣到几何和固定功能管线(例如,几何和固定功能管线231、几何和固定功能管线237)。

图形微控制器233可以被配置为执行针对图形处理器核心219的各种调度和管理任务。在一个示例中,图形微控制器233可以对子核心221A-221F内的执行单元(EU)阵列222A-222F、224A-224F内的各种图形并行引擎执行图形和/或计算工作负载调度。在该调度模型中,在包括图形处理器核心219的SoC的CPU核心上执行的主机软件可以将工作负载提交给多个图形处理器门铃(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可以代替几何/固定功能管线231被包括在固定功能块230内,并且可以包括相同或类似的逻辑单元。

在一个示例中,图形处理器核心219包括附加固定功能逻辑238,其可以包括供图形处理器核心219使用的各种固定功能加速逻辑。在一个示例中,附加固定功能逻辑238包括用于在仅位置着色中使用的附加几何管线。在仅位置着色中,存在两个几何管线,即几何/固定功能管线238、231内的完全几何管线,以及剔除管线,其是可以被包括在附加固定功能逻辑238内的附加几何管线。在一个示例中,剔除管线是完全几何管线的缩减版本。完全管线和剔除管线可以执行同一应用的不同实例,每个实例具有单独的上下文。仅位置着色可以隐藏丢弃的三角形的长剔除运行,从而使得在一些情况下能够更早地完成着色。在一个示例中,附加固定功能逻辑238内的剔除管线逻辑可以与主应用并行地执行位置着色器,并且一般比完全管线更快地生成关键结果,因为剔除管线仅对顶点的位置属性进行取得和着色,而不向帧缓冲器执行对像素的栅格化和渲染。剔除管线可以使用所生成的关键结果来计算所有三角形的可见性信息,而不考虑那些三角形是否被剔除。完全管线(其在这种实例中可以被称为重放管线)可以消耗可见性信息以跳过被剔除的三角形,从而仅对最终传递到栅格化阶段的可见三角形进行着色。

在一个示例中,附加固定功能逻辑238还可以包括用于包括针对机器学习训练或推断的优化的实现方式的机器学习加速逻辑,诸如固定功能矩阵乘法逻辑。

在每个图形子核心221A-221F内包括可以用于响应于由图形管线、媒体管线、或着色器程序的请求而执行图形操作、媒体操作和计算操作的执行资源集合。图形子核心221A-221F包括多个EU阵列222A-222F、224A-224F、线程调遣和线程间通信(TD/IC)逻辑223A-223F、3D(例如,纹理)采样器225A-225F、媒体采样器226A-226F、着色器处理器227A-227F和共享本地存储器(shared local memory,SLM)228A-228F。EU阵列222A-222F、224A-224F每个包括多个执行单元,这些执行单元是能够执行浮点逻辑操作和整数/定点逻辑操作以便为图形操作、媒体操作或计算操作(包括图形程序、媒体程序或计算着色器程序)服务的通用图形处理单元。TD/IC逻辑223A-223F执行针对子核心内的执行单元的本地线程调遣和线程控制操作,并且促进在子核心的执行单元上执行的线程之间的通信。3D采样器225A-225F可以将纹理或其他3D图形相关数据读入存储器中。3D采样器可以基于配置的样本状态和与给定纹理相关联的纹理格式来以不同方式读取纹理数据。媒体采样器226A-226F可以基于与媒体数据相关联的类型和格式来执行类似的读取操作。在一个示例中,每个图形子核心221A-221F可以交替地包括统一3D和媒体采样器。在子核心221A-221F中的每一个内的执行单元上执行的线程可以利用每个子核心内的共享本地存储器228A-228F,以使得在线程组内执行的线程能够使用公共的芯片上存储器池来执行。

图2C图示了图形处理单元(GPU)239,其包括被布置成多核心组240A-240N的专用图形处理资源集合。虽然仅提供了单个多核心组240A的细节,但是将领会,其他多核心组240B-240N可以装备有相同或类似的图形处理资源集合。

如所图示,多核心组240A可以包括图形核心的集合243、张量核心的集合244和光线追踪核心的集合245。调度器/调遣器241调度和调遣图形线程以供在各种核心243、244、245上执行。寄存器堆242集合存储核心243、244、245在执行图形线程时使用的操作对象值。例如,这些可以包括用于存储整数值的整数寄存器、用于存储浮点值的浮点寄存器、用于存储紧缩(packed)数据元素(整数和/或浮点数据元素)的向量寄存器以及用于存储张量/矩阵值的片寄存器。在一个示例中,片寄存器被实现为向量寄存器的经组合的集合。

一个或多个经组合的第一级(L1)缓存和共享存储器单元247在每个多核心组240A内本地存储图形数据,诸如纹理数据、顶点数据、像素数据、光线数据、包围体(boundingvolume)数据等。一个或多个纹理单元247也可以用于执行纹理化操作,诸如纹理映射和采样。由多核心组240A-240N的全部或子集共享的第二级(L2)缓存253存储用于多个并发图形线程的图形数据和/或指令。如所图示,L2缓存253可以跨多个多核心组240A-240N共享。一个或多个存储器控制器248将GPU 239耦合到存储器249,存储器249可以是系统存储器(例如,DRAM)和/或专用图形存储器(例如,GDDR6存储器)。

输入/输出(Input/output,I/O)电路250将GPU 239耦合到一个或多个I/O设备252,诸如数字信号处理器(digital signal processor,DSP)、网络控制器或用户输入设备。芯片上互连可以用于将I/O设备252耦合到GPU 239和存储器249。I/O电路250的一个或多个I/O存储器管理单元(I/O memory management unit,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中的每一个可以包括转译后备缓冲器(translationlookaside buffer,TLB),这些TLB用于对宾客虚拟至宾客物理转译、宾客物理至主机物理转译以及宾客虚拟至主机物理转译进行缓存。

在一个示例中,CPU 246、GPU 239和I/O设备252集成在单个半导体芯片和/或芯片封装上。所图示的存储器249可以集成在同一芯片上,或者可以经由片外接口耦合到存储器控制器248。在一个实现方式中,存储器249包括GDDR6存储器,其与其他物理系统级存储器共享相同的虚拟地址空间,尽管本发明的基本原理不限于该具体实现方式。

在一个示例中,张量核心244包括专门设计用于执行矩阵操作的多个执行单元,矩阵操作是用于执行深度学习操作的基本计算操作。例如,同时矩阵乘法操作可以用于神经网络训练和推断。张量核心244可以使用各种操作对象精度来执行矩阵处理,包括单精度浮点(例如,32比特)、半精度浮点(如,16比特)、整数字(16比特),字节(8比特)和半字节(4比特)。在一个示例中,神经网络实现方式提取每个经渲染场景的特征,潜在地组合来自多个帧的细节,以构建高质量的最终图像。

在深度学习实现方式中,可以调度并行矩阵乘法工作以便在张量核心244上执行。神经网络的训练特别需要大量的矩阵点积操作。为了处理N×N×N矩阵乘法的内积公式化,张量核心244可以包括至少N个点积处理元件。在矩阵乘法开始之前,将一个完整的矩阵加载到片寄存器中,并且对于N个循环中的每个循环,第二矩阵的至少一列被加载。对于每个循环,存在被处理的N个点积。

取决于特定的实现方式,可以以不同的精度存储矩阵元素,包括16比特字、8比特字节(例如,INT8)和4比特半字节(例如,INT4)。可以为张量核心244指定不同的精度模式,以确保针对不同的工作负载(诸如可以容忍量化为字节和半字节的推断工作负载)使用最高效的精度。

在一个示例中,光线追踪核心245使针对实时光线追踪和非实时光线追踪实现方式两者的光线追踪操作加速。特别地,光线追踪核心245包括光线遍历/相交电路,用于使用包围体层次体系(bounding volume hierarchy,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)包括对光线追踪指令集的硬件支持,光线追踪指令集诸如:微软的DirectX光线追踪(DirectXRay Tracing,DXR),其包括DispatchRays命令;以及光线生成着色器、最近命中着色器、任何命中着色器和未命中着色器,它们使得能够为每个对象指派唯一的着色器和纹理集合。可以由光线追踪核心245、图形核心243和张量核心244支持的另一光线追踪平台是Vulkan 1.1.85。然而,要注意,本发明的基本原理不限于任何特定的光线追踪ISA。

一般而言,各个核心245、244、243可以支持包括用于以下各项的指令/函数的光线追踪指令集:光线生成、最近命中、任何命中、光线-基元相交、逐基元和层次体系包围盒构建、未命中、拜访和异常。更具体地,一个实施例包括用于执行以下功能的光线追踪指令:

光线生成——可以为每个像素、样本或其他用户定义的工作指派执行光线生成指令。

最近命中——可以执行最近命中指令以对场景内光线与基元的最近交点定位。

任何命中——任何命中指令标识场景内光线与基元之间的多个相交,从而潜在地标识新的最近交点。

相交——相交指令执行光线-基元相交测试并输出结果。

逐基元包围盒构建——该指令围绕给定的基元或基元组建立包围盒(例如,当建立新BVH或其他加速数据结构时)。

未命中——指示光线未命中场景或场景的指定区域内的所有几何体。

拜访——指示光线将遍历的子容体。

异常——包括各种类型的异常处置器(例如,针对各种错误条件被调用)。

图2D是根据本文中描述的示例的通用图形处理单元(general-purpose graphicsprocessing unit,GPGPU)270的框图,该GPGPU 270可以被配置为图形处理器和/或计算加速器。GPGPU270可以经由一个或多个系统和/或存储器总线与主机处理器(例如,一个或多个CPU 246)和存储器271、272互连。在一个示例中,存储器271是可以与一个或多个CPU 246进行共享的系统存储器,而存储器272是专用于GPGPU 270的设备存储器。在一个示例中,GPGPU 270和设备存储器272内的部件可以被映射到可由一个或多个CPU 246访问的存储器地址中。可以经由存储器控制器268来促进对存储器271和272的访问。在一个示例中,存储器控制器268包括内部直接存储器存取(directmemory access,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是标量数据缓存,并且经缓存的数据可以被直接取到标量寄存器262中。

在操作期间,一个或多个CPU 246可以将命令写入到GPGPU 270中的寄存器中,或写入到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,所述一种或多种媒体编码格式包括但不限于:移动图片专家组(Moving PictureExperts Group,MPEG)格式(诸如MPEG-2)、高级视频译码(Advanced Video Coding,AVC)格式(诸如H.264/MPEG-4AVC、H.265/HEVC、开放媒体联盟(Alliance for Open Media,AOMedia)VP8、VP9)、以及电影和电视工程师协会(the Society of Motion Picture&Television Engineers,SMPTE)421M/VC-1、和联合图像专家组(Joint PhotographicExperts Group,JPEG)格式(诸如JPEG、以及运动JPEG(Motion JPEG,MJPEG)格式)。

在一些示例中,图形处理器300包括块图像传送(block image transfer,BLIT)引擎,用于执行二维(2D)栅格化器操作,包括例如,比特边界块传送。然而,在一个示例中,使用图形处理引擎(graphics processing engine,GPE)310的一个或多个部件执行2D图形操作。在一些示例中,GPE 310是用于执行图形操作的计算引擎,这些图形操作包括三维(3D)图形操作和媒体操作。

在一些示例中,GPE 310包括用于执行3D操作的3D管线312,该3D操作诸如使用作用于3D基元形状(例如,矩形、三角形等)的处理函数来渲染三维图像和场景。3D管线312包括可编程和固定功能元件,这些可编程和固定功能元件执行元件内的各种任务和/或生成到3D/媒体子系统315的执行线程。虽然3D管线312可以用于执行媒体操作,但是GPE 310的实施例还包括媒体管线316,该媒体管线316专门用于执行媒体操作,诸如视频后处理和图像增强。

在一些示例中,媒体管线316包括固定功能或可编程逻辑单元,用于代替、或代表视频编解码器引擎306来执行一个或多个专业的媒体操作,诸如视频解码加速、视频去隔行以及视频编码加速。在一些示例中,媒体管线316附加地包括线程生成单元,用于生成线程以供在3D/媒体子系统315上执行。所生成的线程在3D/媒体子系统315中所包括的一个或多个图形核心上执行用于媒体操作的计算。

在一些示例中,3D/媒体子系统315包括用于执行由3D管线312和媒体管线316生成的线程的逻辑。在一个示例中,管线将线程执行请求发送到3D/媒体子系统315,该3D/媒体子系统315包括用于对可用的线程执行资源的各种请求进行仲裁和调遣的线程调遣逻辑。执行资源包括用于处理3D线程和媒体线程的图形执行单元的阵列。在一些示例中,3D/媒体子系统315包括用于线程指令和数据的一个或多个内部缓存。在一些示例中,子系统还包括用于在线程之间共享数据并用于存储输出数据的共享存储器,其包括寄存器和可寻址存储器。

图3B图示了根据本文中描述的实施例的图形处理器320,该图形处理器320具有分片体系结构。在一个示例中,图形处理器320包括图形处理引擎集群322,该图形处理引擎集群322在图形引擎片310A-310D内具有图3A的图形处理器引擎310的多个实例。每个图形引擎片310A-310D可以经由片互连的集合323A-323F被互连。每个图形引擎片310A-310D还可以经由存储器互连325A-325D被连接到存储器模块或存储器设备326A-326D。存储器设备326A-326D可以使用任何图形存储器技术。例如,存储器设备326A-326D可以是图形双倍数据速率(graphics doubledatarate,GDDR)存储器。在一个示例中,存储器设备326A-326D是高带宽存储器(high-bandwidth memory,HBM)模块,这些HBM模块可以与其相应的图形引擎片310A-310D一起在管芯上。在一个示例中,存储器设备326A-326D是可以被堆叠在其相应的图形引擎片310A-310D的顶部上的堆叠式存储器设备。在一个示例中,每个图形引擎片310A-310D和相关联的存储器326A-326D驻留在单独的小芯片上,这些单独的小芯片被接合到基础管芯或基础衬底,如在图11B-图11D中进一步详细描述的。

图形处理引擎集群322可以与芯片上或封装上结构互连324连接。结构互连324可以实现图形引擎片310A-310D与诸如视频编解码器306和一个或多个复制引擎304之类的部件之间的通信。复制引擎304可以用于将数据移出存储器设备326A-326D和在图形处理器320外部的存储器(例如,系统存储器),将数据移入存储器设备326A-326D和在图形处理器320外部的存储器(例如,系统存储器),并且在存储器设备326A-326D与在图形处理器320外部的存储器(例如,系统存储器)之间移动数据。结构互连324还可以用于互连图形引擎片310A-310D。图形处理器320可以可选地包括显示控制器302,以实现与外部显示设备318的连接。图形处理器也可以被配置为图形或计算加速器。在加速器配置中,可以省略显示控制器302和显示设备318。

图形处理器320可以经由主机接口328连接到主机系统。主机接口328可以实现图形处理器320、系统存储器和/或其他系统部件之间的通信。主机接口328可以是例如PCIexpress总线或另一类型的主机系统接口。

图3C图示了根据本文中描述的示例的计算加速器330。计算加速器330可以包括与图3B的图形处理器320类似的体系结构,并且被优化用于计算加速。计算引擎集群332可以包括计算引擎片的集合340A-340D,其包括被优化用于并行或基于向量的通用计算操作的执行逻辑。在一些示例中,计算引擎片340A-340D不包括固定功能图形处理逻辑,尽管在一个示例中,计算引擎片340A-340D中的一个或多个可以包括用于执行媒体加速的逻辑。计算引擎片340A-340D可以经由存储器互连325A-325D连接到存储器326A-326D。存储器326A-326D和存储器互连325A-325D可以是与图形处理器320中类似的技术,或者可以是不同的。图形计算引擎片340A-340D也可以经由片互连323A-323F的集合被互连,并且可以与结构互连324连接和/或通过结构互连324被互连。在一个示例中,计算加速器330包括可以被配置为设备范围缓存的大型L3缓存336。计算加速器330还可以以与图3B的图形处理器320类似的方式经由主机接口328连接到主机处理器和存储器。

图形处理引擎

图4是根据一些示例的图形处理器的图形处理引擎410的框图。在一个示例中,图形处理引擎(GPE)410是图3A中所示的GPE 310的一个版本,并且也可以表示图3B的图形引擎片310A-310D。图4的具有与本文中任何其他图的元件相同的附图标记(或名称)的元件可以以类似于本文中其他地方描述的任何方式操作或起作用,但不限于此。例如,图示了图3A的3D管线312和媒体管线316。在GPE 410的一些示例中,媒体管线316是可选的,并且可以不显式地包括在GPE 310内。例如,并且在至少一个示例中,单独的媒体和/或图像处理器耦合到GPE 410。

在一些示例中,GPE410与命令流转化器403耦合或包括命令流转化器403,命令流转化器403向3D管线312和/或媒体管线316提供命令流。在一些示例中,命令流转化器403与存储器耦合,该存储器可以是系统存储器,或内部缓存存储器和共享缓存存储器中的一个或多个。在一些示例中,命令流转化器403从存储器接收命令,并且将命令发送到3D管线312和/或媒体管线316。这些命令是从环形缓冲器取得的指示,该环形缓冲器存储用于3D管线312和媒体管线316的命令。在一个示例中,环形缓冲器可以附加地包括存储批量的多个命令的批量命令缓冲器。用于3D管线312的命令还可以包括对存储在存储器中的数据的引用,诸如但不限于用于3D管线312的顶点和几何数据和/或用于媒体管线316的图像数据和存储器对象。3D管线312和媒体管线316通过经由相应管线内的逻辑执行操作或者通过将一个或多个执行线程调遣到图形核心阵列414来处理命令和数据。在一个示例中,图形核心阵列414包括一个或多个图形核心块(例如,(一个或多个)图形核心415A、(一个或多个)图形核心415B),每个块包括一个或多个图形核心。每个图形核心包括图形执行资源集合,其包括用于执行图形和计算操作的通用和图形专用执行逻辑,以及固定功能纹理处理和/或机器学习和人工智能加速逻辑。

在各种示例中,3D管线312可以包括固定功能和可编程逻辑,以通过处理指令和向图形核心阵列414调遣执行线程来处理一个或多个着色器程序,诸如顶点着色器、几何着色器、像素着色器、片段着色器、计算着色器或其他着色器程序。图形核心阵列414提供了统一的执行资源块,以供在处理这些着色器程序时使用。图形核心阵列414的(一个或多个)图形核心415A-414B内的多功能执行逻辑(例如,执行单元)包括对各种3D API着色器语言的支持,并且可以执行与多个着色器相关联的多个同时执行线程。

在一些示例中,图形核心阵列414包括用于执行诸如视频和/或图像处理之类的媒体功能的执行逻辑。在一个示例中,执行单元包括通用逻辑,除了图形处理操作之外,该通用逻辑可编程以执行并行通用计算操作。通用逻辑可以与图1的(一个或多个)处理器核心107或如图2A中的核心202A-202N内的通用逻辑并行地或结合地执行处理操作。

由在图形核心阵列414上执行的线程生成的输出数据可以将数据输出至统一返回缓冲器(unified return buffer,URB)418中的存储器。URB 418可以存储用于多个线程的数据。在一些示例中,URB 418可以用于在图形核心阵列414上执行的不同线程之间发送数据。在一些示例中,URB 418可以附加地用于图形核心阵列上的线程和共享功能逻辑420内的固定功能逻辑之间的同步。

在一些示例中,图形核心阵列414是可缩放的,使得该阵列包括可变数量的图形核心,每个图形核心具有基于GPE 410的目标功率和性能水平的可变数量的执行单元。在一个示例中,执行资源是动态可缩放的,使得可以根据需要启用或禁用执行资源。

图形核心阵列414与共享功能逻辑420耦合,共享功能逻辑420包括在图形核心阵列中的图形核心之间共享的多个资源。共享功能逻辑420内的共享功能是向图形核心阵列414提供专业的补充功能性的硬件逻辑单元。在各种示例中,共享功能逻辑420包括但不限于采样器421、数学422和线程间通信(inter-thread communication,ITC)423逻辑。此外,一些示例在共享功能逻辑420内实现一个或多个缓存425。

至少在其中对于给定的专业功能的需求不足以包括在图形核心阵列414内的情况下实现共享功能。代替地,那个专业功能的单个实例化被实现为共享功能逻辑420中的独立实体,并且在图形核心阵列414内的执行资源之间被共享。在图形核心阵列414之间被共享并被包括在图形核心阵列414内的精确的功能集跨示例而变化。在一些示例中,共享功能逻辑420内的由图形核心阵列414广泛使用的特定共享功能可以被包括在图形核心阵列414内的共享功能逻辑416内。在各种示例中,图形核心阵列414内的共享功能逻辑416可以包括共享功能逻辑420内的一些或所有逻辑。在一个示例中,共享功能逻辑420内的所有逻辑元件可以在图形核心阵列414的共享功能逻辑416内被复制。在一个示例中,共享功能逻辑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中的一个或多个执行单元上实例化所请求的线程的逻辑。例如,几何管线可以将顶点、曲面细分或几何着色器调遣到线程执行逻辑进行处理。在一些示例中,线程调遣器504还可以处理来自正在执行的着色器程序的运行时线程生成请求。

在一些示例中,执行单元508A-508N支持包括对许多标准的3D图形着色器指令的原生支持的指令集,使得以最小的转译来执行来自图形库(例如,Direct 3D和OpenGL)的着色器程序。执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如,像素着色器、片段着色器)和通用处理(例如,计算着色器和媒体着色器)。执行单元508A-508N中的每一个能够进行多发布单指令多数据(SIMD)执行,并且多线程操作使得能够在面对较高等待时间的存储器访问时实现高效的执行环境。每个执行单元内的每个硬件线程都有专用的高带宽寄存器堆和相关联的独立线程状态。执行是对能够进行整数、单精度和双精度浮点操作、SIMD分支能力、逻辑操作、超越操作和其他混杂操作的管线的每时钟多发布。在等待来自存储器或共享功能之一的数据时,执行单元508A-508N内的依赖性逻辑引起等待线程休眠,直到所请求的数据已被返回。当等待线程正在休眠时,硬件资源可以致力于处理其他线程。例如,在与顶点着色器操作相关联的延迟期间,执行单元可以执行针对像素着色器、片段着色器或包括不同顶点着色器的另一类型的着色器程序的操作。作为使用SIMD的替代或除了使用SIMD之外,各种示例可以适用于通过使用单指令多线程(SIMT)来使用执行。对SIMD核心或操作的引用也可以适用于SIMT或适用于SIMD与SIMT的组合。

执行单元508A-508N中的每个执行单元对数据元素阵列进行操作。数据元素的数量是“执行大小”,或指令的通道数量。执行通道是执行数据元素访问、掩蔽、和指令内的流控制的逻辑单元。通道的数量可以与针对特定图形处理器的物理算术逻辑单元(ALU)或浮点单元(FPU)的数量无关。在一些示例中,执行单元508A-508N支持整数和浮点数据类型。

执行单元指令集包括SIMD指令。各种数据元素可以作为紧缩数据类型存储在寄存器中,并且执行单元将基于元素的数据大小来处理各种元素。例如,当对256比特宽的向量进行操作时,向量的256比特被存储在寄存器中,并且执行单元作为四个单独的54比特紧缩数据元素(四字(Quad-Word,QW)大小的数据元素)、八个单独的32比特紧缩数据元素(双字(Double Word,DW)大小的数据元素)、十六个单独的16比特紧缩数据元素(字(Word,W)大小的数据元素)、或三十二个单独的8比特数据元素(字节(byte,B)大小的数据元素)在向量上进行操作。然而,不同的向量宽度和寄存器大小是可能的。

在一个示例中,可以将一个或多个执行单元组合到融合执行单元509A-509N中,这些融合执行单元具有对于融合EU而言共同的线程控制逻辑(507A-507N)。可以将多个EU融合成EU组。融合EU组中的每个EU可以被配置为执行单独的SIMD硬件线程。融合EU组中的EU数量可以根据示例而变化。此外,每EU可以执行各种SIMD宽度,包括但不限于SIMD8、SIMD16和SIMD32。每个所融合的图形执行单元509A-509N包括至少两个执行单元。例如,所融合的执行单元509A包括第一EU 508A、第二EU 508B、以及对于第一EU 508A和第二EU 508B而言共同的线程控制逻辑507A。线程控制逻辑507A控制在所融合的图形执行单元509A上执行的线程,从而允许所融合的执行单元509A-509N内的每个EU使用共同的指令指针寄存器来执行。

一个或多个内部指令缓存(例如,506)被包括在线程执行逻辑500中,以缓存用于执行单元的线程指令。在一些示例中,包括一个或多个数据缓存(例如,512),以在线程执行期间缓存线程数据。在执行逻辑500上执行的线程也可以将显式管理的数据存储在共享本地存储器511中。在一些示例中,包括采样器510,以为3D操作提供纹理采样并且为媒体操作提供媒体采样。在一些示例中,采样器510包括专业的纹理或媒体采样功能性,以在向执行单元提供采样的数据之前,在采样过程期间处理纹理或媒体数据。

在执行期间,图形和媒体管线经由线程生成和调遣逻辑向线程执行逻辑500发送线程发起请求。一旦一组几何对象已经被处理并被栅格化成像素数据,则着色器处理器502内的像素处理器逻辑(例如,像素着色器逻辑、片段着色器逻辑等)被调用以进一步计算输出信息,并且引起结果被写入到输出表面(例如,颜色缓冲器、深度缓冲器、模板印制缓冲器等)。在一些示例中,像素着色器或片段着色器计算要跨栅格化对象内插的各种顶点属性的值。在一些示例中,着色器处理器502内的像素处理器逻辑随后执行应用编程接口(API)供应的像素或片段着色器程序。为了执行着色器程序,着色器处理器502经由线程调遣器504将线程调遣到执行单元(例如,508A)。在一些示例中,着色器处理器502使用采样器510中的纹理采样逻辑来访问存储在存储器中的纹理图中的纹理数据。对纹理数据和输入几何数据的算术操作计算每个几何片段的像素颜色数据,或者丢弃一个或多个像素而不进行进一步处理。

在一些示例中,数据端口514提供存储器访问机制,以供线程执行逻辑500将经处理的数据输出至存储器,以便在图形处理器输出管线上进行进一步处理。在一些示例中,数据端口614包括或耦合至一个或多个缓存存储器(例如,数据缓存512),以缓存经由数据端口进行的存储器访问的数据。

在一个示例中,执行逻辑500还可以包括可以提供光线追踪加速功能性的光线追踪器505。光线追踪器505可以支持包括用于光线生成的指令/功能的光线追踪指令集。光线追踪指令集可以与图2C中的光线追踪核心245所支持的光线追踪指令集类似或不同。

图5B图示了根据示例的执行单元508的示例性内部细节。图形执行单元508可以包括指令取得单元537、通用寄存器堆阵列(general register file,GRF)524、体系结构寄存器堆阵列(architectural register file,ARF)526、线程仲裁器522、发送单元530、分支单元532、SIMD浮点单元(floating point unit,FPU)534的集合、以及在一个示例中的专用整数SIMD ALU 535的集合。

GRF 524和ARF 526包括与在图形执行单元508中可能活跃的每个同时硬件线程相关联的通用寄存器堆和体系结构寄存器堆的集合。在一个示例中,每线程体系结构状态被维持在ARF 526中,而在线程执行期间使用的数据被存储在GRF 524中。包括针对每个线程的指令指针的每个线程的执行状态可以保持在ARF 526中的线程特定寄存器中。

在一个示例中,图形执行单元508具有作为同步多线程(Simultaneous Multi-Threading,SMT)与细粒度交织多线程(Interleaved Multi-Threading,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个千字节。灵活的寻址模式可以准许寄存器被一起寻址,以有效地建立较宽的寄存器或者表示跨步式矩形块数据结构。

在一个示例中,经由由消息传递发送单元530执行的“发送”指令来调遣存储器操作、采样器操作以及其他较长等待时间的系统通信。在一个示例中,分支指令被调遣给专用分支单元532,以促进SIMD分散和最终的汇聚。

在一个示例中,图形执行单元508包括用于执行浮点操作的一个或多个SIMD浮点单元(FPU)534。在一个示例中,(一个或多个)FPU 534还支持整数计算。在一个示例中,(一个或多个)FPU 534可以SIMD执行多达M个32比特浮点(或整数)操作,或者SIMD执行多达2M个16比特整数或16比特浮点操作。在一个示例中,(一个或多个)FPU中的至少一个提供支持高吞吐量超越数学函数和双精度54比特浮点的扩展数学能力。在一些示例中,还存在8比特整数SIMD ALU 535的集合并且可以具体地优化以执行与机器学习计算相关联的操作。

在一个示例中,可以在图形子核心分组(例如,子切片)中对图形执行单元508的多个实例的阵列进行实例化。为了可缩放性,产品架构师可以选择每个子核心分组的执行单元的确切数量。在一个示例中,执行单元508可以跨多个执行通道执行指令。在进一步的示例中,在图形执行单元508上执行的每个线程在不同的通道上执行。

图6图示了根据示例的附加执行单元600。执行单元600可以是用于在例如如图3C中的计算引擎片340A-340D中使用的计算优化执行单元,但不限于此。执行单元600的变体也可以用在如图3B中的图形引擎片310A-310D中。在一个示例中,执行单元600包括线程控制单元601、线程状态单元602、指令取得/预取单元603和指令解码单元604。执行单元600附加地包括寄存器堆606,其存储可以指派给执行单元内的硬件线程的寄存器。执行单元600附加地包括发送单元607和分支单元608。在一个示例中,发送单元607和分支单元608可以与图5B的图形执行单元508的发送单元530和分支单元532类似地操作。

执行单元600还包括计算单元610,计算单元610包括多个不同类型的功能单元。在一个示例中,计算单元610包括ALU单元611,ALU单元611包括算术逻辑单元阵列。ALU单元611可以被配置为执行64比特、32比特和16比特整数和浮点操作。可以同时执行整数和浮点操作。计算单元610还可以包括脉动阵列612和数学单元613。脉动阵列612包括W宽且D深的数据处理单元网络,其可以用于以脉动方式执行向量或其他数据并行操作。在一个示例中,脉动阵列612可以被配置为执行矩阵操作,诸如矩阵点积操作。在一个示例中,脉动阵列612支持16比特浮点操作以及8比特和4比特整数操作。在一个示例中,脉动阵列612可以被配置为加速机器学习操作。在这样的示例中,脉动阵列612可以被配置为支持bfloat 16比特浮点格式。在一个示例中,可以包括数学单元613,从而以比ALU单元611高效且低功率的方式执行数学操作的特定子集。数学单元613可以包括数学逻辑的变体,其可以在由其他示例提供的图形处理引擎的共享功能逻辑中找到(例如,图4的共享功能逻辑420的数学逻辑422)。在一个示例中,数学单元613可以被配置为执行32比特和64比特浮点操作。

线程控制单元601包括用于控制执行单元内线程执行的逻辑。线程控制单元601可以包括用于启动、停止和抢占执行单元600内线程执行的线程仲裁逻辑。线程状态单元602可以用于存储被指派在执行单元600上执行的线程的线程状态。将线程状态存储在执行单元600内使得能够在那些线程变得阻塞或空闲时快速抢占线程。指令取得/预取单元603可以从更高级执行逻辑的指令缓存(例如,如图5A中的指令缓存506)取得指令。指令取得/预取单元603还可以基于对当前执行线程的分析,发出对要加载到指令缓存中的指令的预取请求。指令解码单元604可以用于解码要由计算单元执行的指令。在一个示例中,指令解码单元604可以用作次级解码器,以将复杂指令解码成组成微操作。

执行单元600附加地包括可以由在执行单元600上执行的硬件线程使用的寄存器堆606。可以跨用于在执行单元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、src1722以及一个目的地718。在一些示例中,执行单元支持双目的地指令,其中目的地中的一个是隐式的。数据操纵指令可以具有第三源操作对象(例如,SRC2724),其中指令操作码712确定源操作对象的数量。指令的最后一个源操作对象可以是与指令一起被传递的立即数(例如,硬编码的)值。

在一些示例中,128比特指令格式710包括访问/寻址模式字段726,该访问/寻址模式字段726例如指定使用直接寄存器寻址模式还是间接寄存器寻址模式。当使用直接寄存器寻址模式时,由指令中的比特直接提供一个或多个操作对象的寄存器地址。

在一些示例中,128比特指令格式710包括访问/寻址模式字段726,该访问/寻址模式字段726指定指令的寻址模式和/或访问模式。在一个示例中,访问模式用于限定指令的数据访问对齐。一些示例支持包括16字节对齐访问模式和1字节对齐访问模式的访问模式,其中,访问模式的字节对齐确定指令操作对象的访问对齐。例如,当处于第一模式时,指令可以将字节对齐的寻址用于源操作对象和目的地操作对象,并且当处于第二模式时,指令可以将16字节对齐的寻址用于所有的源操作对象和目的地操作对象。

在一个示例中,访问/寻址模式字段726的寻址模式部分确定指令要使用直接寻址还是间接寻址。当使用直接寄存器寻址模式时,指令中的比特直接提供一个或多个操作对象的寄存器地址。当使用间接寄存器寻址模式时,可以基于指令中的地址寄存器值和地址立即数字段来计算一个或多个操作对象的寄存器地址。

在一些示例中,基于操作码712比特字段对指令进行分组从而简化操作码解码740。针对8比特的操作码,比特4、比特5、和比特6允许执行单元确定操作码的类型。所示出的精确的操作码分组仅是示例。在一些示例中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如,移动(mov)、比较(cmp))。在一些示例中,移动和逻辑组742共享五个最高有效的比特(most significantbit,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耦合至其他处理部件(诸如其他图形处理器或通用处理器)。由命令流转化器803解释来自环形互连802的命令,该命令流转化器803将指令供应至几何管线820或媒体管线830的各个部件。

在一些示例中,命令流转化器803引导顶点取得器805的操作,该顶点取得器805从存储器读取顶点数据,并执行由命令流转化器803提供的顶点处理命令。在一些示例中,顶点取得器805将顶点数据提供给顶点着色器807,该顶点着色器807对每个顶点执行坐标空间变换和照明操作。在一些示例中,顶点取得器805和顶点着色器807通过经由线程调遣器831将执行线程调遣给执行单元852A-852B来执行顶点处理指令。

在一些示例中,执行单元852A-852B是具有用于执行图形操作和媒体操作的指令集的向量处理器的阵列。在一些示例中,执行单元852A-852B具有特定于每个阵列或在阵列之间被共享的所附接的L1缓存851。缓存可以被配置为数据缓存、指令缓存、或被分区为在不同分区中包含数据和指令的单个缓存。

在一些示例中,几何管线820包括用于执行3D对象的硬件加速曲面细分的曲面细分部件。在一些示例中,可编程壳体着色器811配置曲面细分操作。可编程域着色器817提供对曲面细分输出的后端评估。曲面细分器813在外壳着色器811的指示下进行操作,并且包含用于基于粗糙的几何模型来生成详细的几何对象集合的专用逻辑,该粗糙的几何模型作为输入被提供给几何管线820。在一些示例中,如果不使用曲面细分,则可以绕过曲面细分部件(例如,外壳着色器811、曲面细分器813和域着色器817)。

在一些示例中,完整的几何对象可以由几何着色器819经由被调遣给执行单元852A-852B的一个或多个线程来处理,或者可以直接行进至裁剪器829。在一些示例中,几何着色器对整个几何对象操作,而不是如在图形管线的先前的阶段中那样对顶点或顶点的补片进行操作。如果曲面细分被禁用,则几何着色器819从顶点着色器807接收输入。在一些示例中,几何着色器819是可由几何着色器程序编程的,以在曲面细分单元被禁用的情况下执行几何曲面细分。

在栅格化之前,裁剪器829处理顶点数据。裁剪器829可以是固定功能裁剪器或具有裁剪和几何着色器功能的可编程裁剪器。在一些示例中,渲染输出管线870中的栅格化器和深度测试部件873调遣像素着色器以将几何对象转换为逐像素表示。在一些示例中,像素着色器逻辑被包括在线程执行逻辑850中。在一些示例中,应用可以绕过栅格化器和深度测试部件873,并且经由流出单元823访问未栅格化的顶点数据。

图形处理器800具有互连总线、互连结构、或允许数据和消息在处理器的主要部件之间传递的某个其他互连机制。在一些示例中,执行单元852A-852B和相关联的逻辑单元(例如,L1缓存851、采样器854、纹理缓存858等)经由数据端口856进行互连,以执行存储器访问并且与处理器的渲染输出管线部件进行通信。在一些示例中,采样器854、缓存851、858和执行单元852A-852B每个具有单独的存储器访问路径。在一个示例中,纹理缓存858也可以被配置为采样器缓存。

在一些示例中,渲染输出管线870包含栅格化器和深度测试部件873,该栅格化器和深度测试部件873将基于顶点的对象转换为相关联的基于像素的表示。在一些示例中,栅格化器逻辑包括用于执行固定功能三角形和线栅格化的窗口器/掩码器单元。在一些示例中,相关联的渲染缓存878和深度缓存879也是可用的。像素操作部件877对数据执行基于像素的操作,但是在一些实例中,与2D操作相关联的像素操作(例如,利用混合的比特块图像传送)由2D引擎841执行,或者在显示时由显示控制器843使用叠加显示平面来代替。在一些示例中,共享的L3缓存875可用于所有的图形部件,从而允许在不使用主系统存储器的情况下共享数据。

在一些示例中,图形处理器媒体管线830包括媒体引擎837和视频前端834。在一些示例中,视频前端834从命令流转化器803接收管线命令。在一些示例中,媒体管线830包括单独的命令流转化器。在一些示例中,视频前端834在将媒体命令发送到媒体引擎837之前处理该媒体命令。在一些示例中,媒体引擎837包括用于生成线程以用于经由线程调遣器831调遣给线程执行逻辑850的线程生成功能性。

在一些示例中,图形处理器800包括显示引擎840。在一些示例中,该显示引擎840在处理器800外部,并且经由环形互连802、或某个其他互连总线或结构与图形处理器耦合。在一些示例中,显示引擎840包括2D引擎841和显示控制器843。在一些示例中,显示引擎840包含能够独立于3D管线进行操作的专用逻辑。在一些示例中,显示控制器843与显示设备(未示出)耦合,该显示设备可以是如在膝上型电脑中的系统集成的显示设备或经由显示设备连接器而附接的外部显示设备。

在一些示例中,几何管线820和媒体管线830可配置成用于基于多个图形和媒体编程接口来执行操作,并且不特定于任何一个应用编程接口(API)。在一些示例中,用于图形处理器的驱动器软件将特定于特定图形或媒体库的API调用转换为可以由图形处理器处理的命令。在一些示例中,为全部来自Khronos Group的开放图形库(Open GraphicsLibrary,OpenGL)、开放计算语言(Open Computing Language,OpenCL)和/或Vulkan图形和计算API提供支持。在一些示例中,也可以为来自微软公司的Direct3D库提供支持。在一些示例中,可以支持这些库的组合。还可以为开源计算机视觉库(Open Source ComputerVision Library,OpenCV)提供支持。如果可以进行从未来API的管线到图形处理器的管线的映射,则具有兼容3D管线的未来API也将受到支持。

图形管线编程

图9A是图示根据一些示例的图形处理器命令格式900的框图。图9B是图示根据示例的图形处理器命令序列910的框图。图9A中的实线框图示一般被包括在图形命令中的组成部分,而虚线包括可选的或仅被包括在图形命令的子集中的组成部分。图9A的示例性图形处理器命令格式900包括用于标识命令的客户端902、命令操作代码(操作码)904和数据906的数据字段。子操作码905和命令大小908也被包括在一些命令中。

在一些示例中,客户端902指定图形设备的、处理命令数据的客户端单元。在一些示例中,图形处理器命令解析器检查每个命令的客户端字段以调整对命令的进一步的处理,并且将命令数据路由至适当的客户端单元。在一些示例中,图形处理器客户端单元包括存储器接口单元、渲染单元、2D单元、3D单元和媒体单元。每个客户端单元具有处理命令的对应的处理管线。一旦由客户端单元接收到命令,客户端单元就读取操作码904以及子操作码905(如果存在)以确定要执行的操作。客户端单元使用数据字段906中的信息来执行命令。针对一些命令,预期显式的命令大小908指定命令的大小。在一些示例中,命令解析器基于命令操作码自动地确定命令中的至少一些命令的大小。在一些示例中,命令经由双字的倍数被对齐。可以使用其他命令格式。

图9B中的流程图示示例性图形处理器命令序列910。在一些示例中,以图形处理器的示例为特征的数据处理系统的软件或固件使用所示出的命令序列的版本来建立、执行并终止图形操作的集合。仅出于示例目的示出并描述样本命令序列,因为示例不限于这些特定的命令或该命令序列。此外,命令可以作为批量的命令在命令序列中被发出,使得图形处理器将以至少部分地并发的方式处理命令序列。

在一些示例中,图形处理器命令序列910可以以管线转储清除命令912开始,以使任何活跃的图形管线完成用于管线的当前未决的命令。在一些示例中,3D管线922和媒体管线924不并发地操作。执行管线转储清除以使活跃的图形管线完成任何未决命令。响应于管线转储清除,用于图形处理器的命令解析器将暂停命令处理,直到活跃的绘画引擎完成未决操作并且相关的读缓存被无效。可选地,渲染缓存中被标记为“脏”的任何数据可以被转储清除到存储器。在一些示例中,管线转储清除命令912可以用于管线同步,或可以在将图形处理器置于低功率状态之前被使用。

在一些示例中,当命令序列需要图形处理器在管线之间显式地切换时,使用管线选择命令913。在一些示例中,在发出管线命令之前在执行上下文内仅需要一次管线选择命令913,除非上下文是发出针对这两条管线的命令。在一些示例中,紧接在经由管线选择命令913进行的管线切换之前需要管线转储清除命令912。

在一些示例中,管线控制命令914配置用于操作的图形管线,并且用于对3D管线922和媒体管线924进行编程。在一些示例中,管线控制命令914为活跃的管线配置管线状态。在一个示例中,管线控制命令914用于管线同步,并且用于在处理批量的命令之前清除来自活跃管线内的一个或多个缓存存储器的数据。

在一些示例中,返回缓冲器状态命令916用于将用于相应管线的返回缓冲器的集合配置成用于写入数据。一些管线操作需要对一个或多个返回缓冲器的分配、选择或配置,在处理期间操作将中间数据写入这一个或多个返回缓冲器中。在一些示例中,图形处理器还使用一个或多个返回缓冲器以存储输出数据并执行跨线程通信。在一些示例中,返回缓冲器状态916包括选择要用于管线操作的集合的返回缓冲器的大小和数量。

命令序列中的其余命令基于用于操作的活跃管线而不同。基于管线确定920,命令序列被定制成用于以3D管线状态930开始的3D管线922、或者在媒体管线状态940处开始的媒体管线924。

用于配置3D管线状态930的命令包括用于顶点缓冲器状态、顶点元素状态、常量颜色状态、深度缓冲器状态、以及将在处理3D基元命令之前配置的其他状态变量的3D状态设置命令。这些命令的值至少部分地基于使用中的特定3D API来确定。在一些示例中,3D管线状态930命令也能够在将不会使用某些管线元件的情况下选择性地禁用或绕过那些元件。

在一些示例中,3D基元932命令用于提交要由3D管线处理的3D基元。经由3D基元932命令传递给图形处理器的命令和相关联的参数被转发到图形管线中的顶点取得功能。顶点取得功能使用3D基元932命令数据来生成顶点数据结构。顶点数据结构被存储在一个或多个返回缓冲器中。在一些示例中,3D基元932命令用于经由顶点着色器对3D基元执行顶点操作。为了处理顶点着色器,3D管线922将着色器执行线程调遣给图像处理器执行单元。

在一些示例中,3D管线922经由执行934命令或事件来触发。在一些示例中,寄存器写入触发命令执行。在一些示例中,经由命令序列中的“去往(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的高级着色器语言(High-Level Shader Language,HLSL)、OpenGL着色器语言(OpenGLShader Language,GLSL),等等。应用还包括采用适用于由通用处理器核心1034执行的机器语言的可执行指令1014。应用还包括由顶点数据限定的图形对象1016。

在一些示例中,操作系统1020是来自微软公司的

在一些示例中,用户模式图形驱动器1026包含后端着色器编译器1027以将着色器指令1012编译为硬件特定表示。当OpenGLAPI在使用中时,将采用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创建或合成寄存器传送级(register transfer level,RTL)设计1115。RTL设计1115是对硬件寄存器之间的数字信号的流进行建模的集成电路(包括使用建模的数字信号来执行的相关联的逻辑)的行为的抽象。除了RTL设计1115之外,还可以创建、设计或合成逻辑级或晶体管级的较低级别设计。因此,初始设计和仿真的特定细节可以有所不同。

可以由设计设施进一步将RTL设计1115或等效方案合成到硬件模型1120中,该硬件模型1120可以采用硬件描述语言(hardware description language,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图示封装组件1190,该封装组件1190包括连接到衬底1180(例如,基础管芯)的多个单元的硬件逻辑小芯片。如本文中所描述的图形处理单元、并行处理器和/或计算加速器可以由分开制造的各种硅小芯片构成。在此上下文中,小芯片是至少部分封装的集成电路,其包括可以与其他小芯片组装到较大封装中的逻辑的不同单元。具有不同IP核心逻辑的各种集合的小芯片可以被组装到单个设备中。此外,小芯片可以使用有源中介层技术而被集成到基础管芯或基础小芯片中。本文中描述的概念启用GPU内的不同形式的IP之间的互连和通信。IP核心可以使用不同的工艺技术来制造并在制造期间被构成,这避免了尤其是对于具有若干风格的IP的大型SoC的将多个IP汇聚到同一制造工艺的复杂性。使得能够使用多种工艺技术改善了上市时间,并提供具有成本效益的方法来创建多个产品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是嵌入式多管芯互连桥接器(Embedded Multi-die Interconnect Bridge,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和图13A-13B图示了根据本文中所描述各个示例的可以使用一个或多个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。

图13A-13B是图示根据本文中所描述示例的供SoC内使用的示例性图形处理器的框图。图13A图示了根据示例的可以使用一个或多个IP核心来制造的片上系统集成电路的示例性图形处理器1310。图13B图示了根据示例的可以使用一个或多个IP核心来制造的片上系统集成电路的附加示例性图形处理器1340。图13A的图形处理器1310是低功率图形处理器核心的示例。图13B的图形处理器1340是更高性能图形处理器核心的示例。图形处理器1310、1340中的每一个可以是图12的图形处理器1210的变体。

如图13A中所示,图形处理器1310包括顶点处理器1305和一个或多个片段处理器1315A-1315N(例如,1315A、1315B、1315C、1315D,一直到1315N-1和1315N)。图形处理器1310可以经由单独的逻辑执行不同的着色器程序,使得顶点处理器1305被优化以执行用于顶点着色器程序的操作,而一个或多个片段处理器1315A-1315N执行用于片段或像素着色器程序的片段(例如,像素)着色操作。顶点处理器1305执行3D图形管线的顶点处理阶段,并生成基元和顶点数据。(一个或多个)片段处理器1315A-1315N使用由顶点处理器1305生成的基元数据和顶点数据来产生被显示在显示设备上的帧缓冲器。在一个示例中,(一个或多个)片段处理器1315A-1315N被优化以执行如在OpenGL API中提供的片段着色器程序,这些片段着色器程序可以用于执行与如在Direct 3D API中提供的像素着色器程序类似的操作。

图形处理器1310附加地包括一个或多个存储器管理单元(MMU)1320A-1320B、(一个或多个)缓存1325A-1325B以及(一个或多个)电路互连1330A-1330B。所述一个或多个MMU1320A-1320B为图形处理器1310(包括为顶点处理器1305和/或(一个或多个)片段处理器1315A-1315N)提供虚拟到物理地址映射,除了存储在一个或多个缓存1325A-1325B中的顶点数据或图像/纹理数据之外,该虚拟到物理地址映射还可以引用存储在存储器中的顶点数据或图像/纹理数据。在一个示例中,一个或多个MMU 1320A-1320B可以与系统内的其他MMU同步,使得每个处理器1205-1220可以参与共享或统一的虚拟存储器系统,系统内的其他MMU包括与图12的一个或多个应用处理器1205、图像处理器1215和/或视频处理器1220相关联的一个或多个MMU。根据示例,一个或多个电路互连131330A-1330B使得图形处理器1310能够经由SoC的内部总线或经由直接连接来与SoC内的其他IP核心对接。

如图13B中所示,图形处理器1340包括图13A的图形处理器1310的一个或多个MMU1320A-1320B、缓存1325A-1325B和电路互连1330A-1330B。图形处理器1340包括一个或多个着色器核心1355A-1355N(例如,1455A、1355B、1355C、1355D、1355E、1355F,一直到1355N-1和1355N),其提供统一的着色器核心体系结构,其中,单个核心或类型或核心可以执行所有类型的可编程着色器代码,包括用于实现顶点着色器、片段着色器和/或计算着色器的着色器程序代码。存在的着色器核心的确切数量可以在实施例和实现方式之间变化。此外,图形处理器1340包括核心间任务管理器1345,该核心间任务管理器1345充当用于将执行线程调遣给一个或多个着色器核心1355A-1355N的线程调遣器和用于加速对基于片的渲染的分片操作的分片单元1358,在基于片的渲染中,针对场景的渲染操作在图像空间中被细分,例如以利用场景内的局部空间一致性或优化内部缓存的使用。

图14图示了具有向量单元和矩阵单元的图形处理器的示例。图形单元1400是图形处理单元的示例,其可以包括集成到公共SOC(片上系统)上的多个芯片。图形单元1400可以是图形处理器。

图形单元1400包括硬件调度器1402,其表示用于跨图形单元1400的不同计算核心执行调度的电路。图形单元1400包括共享指令缓存1404,其表示用于不同计算单元的指令的暂时性存储装置。在一个示例中,每个切片1410具有在该切片上的计算核心之间共享的单独的指令缓存。在一个示例中,共享指令缓存1404表示硬件调度器1402的一部分,以分发用于在图形单元1400中并行执行的指令。

在一个示例中,图形单元1400包括由N个切片——切片1410[0:(N-1)](统称为切片1410)共享的纹理单元1462。在一个示例中,图形单元1400包括由切片1410共享的栅格化器1464。图形单元1400可以包括多个切片1410[10:(N-1)]或分区,每个切片或分区包括多个图形核心。切片1410可以包括支持逻辑,该支持逻辑包括本地指令缓存1412、本地线程调度器1414和线程调遣器1416。本地指令缓存1412可以缓存用于单独切片中的核心的指令,本地线程调度器1414可以将指令分发到切片中的并行计算核心。线程调遣器1416可以负责对并行指令分发进行计时。在一个示例中,切片1410包括寄存器/寄存器堆1418,其表示用于存储数据或指令以供计算核心使用的寄存器。在一个示例中,寄存器/寄存器堆1418表示用于保持用于迭代计算的值的结构化寄存器集合。

在一个示例中,切片1410包括向量单元1422和矩阵乘法(MXM)单元1424。向量单元1422和MXM单元1424可以执行逻辑操作。向量单元1422和MXM单元1424可以包括用于执行逻辑操作的计算的计算单元。计算单元可以包括附加功能单元(AFU)1432、浮点单元(FPU)1434、整数算术逻辑单元(ALU)1436、地址计算单元(ACU)1438、双精度浮点单元(DPFPU)1440和矩阵处理单元(MPU)1442。向量单元1422可以不包括所有计算单元(例如,向量单元1421可以不包括MPU 1442)。类似地,MXM 1424可以不包括所有计算单元。

计算单元中的一些以具体精度进行操作。例如,FPU 1434可以执行单精度(32比特)和半精度(16比特)浮点操作,而DPFPU 1440执行双精度(64比特)浮点操作。ALU 1436可以以8比特、16比特和32比特精度执行可变精度整数操作,并且可以被配置用于混合精度操作。MPU 1442也可以被配置用于混合精度矩阵操作,包括半精度浮点操作和8比特整数操作。MPU 1442可以执行各种矩阵操作以加速机器学习应用框架,包括实现对于加速的通用矩阵到矩阵乘法(general matrixto matrixmultiplication,GEMM)的支持。AFU 1432可以执行不受浮点单元或整数单元支持的附加逻辑操作,包括三角函数操作(例如,正弦、余弦等)。

在一个示例中,切片1410包括在计算单元之间共享的渲染单元。渲染1450表示渲染单元,其可以包括光线追踪1452和采样器1454。渲染1450可以包括其他渲染单元。在一个示例中,图形单元1400包括在切片1410之间共享的缓存/共享存储器1470。在一个示例中,缓存/共享存储器1470表示第二级(L2)缓存。在一个示例中,缓存/共享存储器1470是可以作为计算单元之间的通信结构操作的存储器结构的一部分。

图15图示了具有并行计算集群的图形处理单元的示例。系统1500表示适用于部署在多芯片模块或SOC上的高度并行的通用图形处理单元(GPGPU)。

系统1500使得能够由图形处理单元阵列执行高度并行的计算操作。在一个示例中,系统1500表示直接链接到其他GPGPU实例的GPGPU实例,以创建具有高带宽、高速操作的多GPU集群,用于诸如深度神经网络的较快训练的应用。系统1500包括用于与诸如CPU或CPUSOC之类的主机处理器对接的主机接口1512。在一个示例中,主机接口1512是PCI Express接口。替代地,主机接口1512可以是供应方特定的通信接口或通信结构。

系统1500包括全局调度器1514,用于将与主机接口1512接收的命令相关联的执行线程分发给计算集群1520[0:3](统称为计算集群1520)。系统1500图示了四个计算集群1520,但是将理解,系统1500可以包括更多或更少的计算机集群。在一个示例中,计算集群1520共享缓存存储器1530。缓存存储器1530提供用于计算集群1520内的缓存存储器(未具体示出)的更高级别的缓存。

系统1500包括存储器1552A和存储器1552B,统称为存储器1552。存储器1552A和存储器1552B可以表示不同的存储器通道。系统1500可以包括更多或更少的存储器通道。不管系统1500中包括多少个存储器通道或多少存储器,存储器1552都可以包括通过存储器控制器1550A和存储器控制器1550B(统称为存储器控制器1550)与计算集群1520的耦合,以分别与存储器1552A和存储器1552B耦合。存储器控制器1550管理对相关联的存储器设备的访问。存储器1552可以是或包括不同类型的存储器设备,诸如动态随机存取存储器(DRAM)或诸如同步图形随机存取存储器(SGRAM)之类的图形随机存取存储器,包括图形双倍数据速率(GDDR)存储器。

在一个示例中,计算集群1520中的每一个表示根据图形单元1400的切片1410的示例的切片。计算集群1520可以每个包括多种类型的整数和浮点逻辑单元,从而以不同的精度执行计算操作。例如,计算集群1520中的每一个中的浮点单元的至少一个子集可以被配置为执行16比特或32比特浮点操作,而浮点单元的不同子集可以被配置为执行64比特浮点操作。

计算集群1520可以使用不同的同步和数据交换机制彼此通信。在一个示例中,计算集群1520经由主机接口1512通信。在一个示例中,系统1500包括将系统1500与GPU链路1544耦合的I/O中枢1542。在一个示例中,GPU链路1544被耦合到专用的GPU到GPU桥接器,该专用的GPU到GPU桥接器实现系统1500的多个实例之间以及不同计算集群之间的通信和同步。在一个示例中,GPU链路1544与高速互连耦合,以向其他GPGPU或并行处理器传输数据并从其接收数据。在一个示例中,系统1500的多个实例可以位于单独的数据处理系统中,并且经由可经由主机接口1512访问的网络设备进行通信。在一个示例中,除了主机接口1512之外,或者作为主机接口1512的替代,GPU链路1544可以被配置为实现到主机处理器的连接。

分布式压缩和解压缩体系结构

图16图示了具有用于在图形处理器之间传送的压缩数据分组的系统的示例。系统1600表示具有CPU 1610和GPU 1650[0:(N-1)](统称为GPU 1650)的计算机系统。GPU 1650表示图形单元,其可以是独立的图形处理单元,或者图形处理单元的部分或分区。在一个示例中,GPU 1650表示具有计算核心的切片或芯片。

CPU 1610表示通用处理器。CPU 1610可以包括一个或多个核心1612。核心1612执行通用操作(GP OPS)1614或通用计算。GP OPS 1614可以表示计算机设备上的任何类型的计算或操作。CPU 1610可以访问存储器,并且可以基于由核心1612执行的操作向GPU 1650发送操作。

在一个示例中,系统1600包括非易失性存储器1632,用于存储GPU 1650或CPU1610未在活跃使用的数据。非易失性存储器1632表示系统1600中的存储装置,即使在系统断电时,该存储装置也维持确定状态。CPU 1610可以包括作为非易失性文件系统应用的文件系统1630或作为操作系统(OS)或主要执行例程的一部分的CPU 1610上的其他文件系统服务。OS提供包括系统硬件接口管理和驱动程序的软件平台,以允许在OS下运行的应用访问计算环境的硬件资源。OS可以通过文件系统1630管理对非易失性存储器1632的访问。

统一存储器1642表示用于系统1600的系统存储器或主存储器。统一存储器1642通常是或包括易失性存储器,如果存储器断电长于一个短时段(即毫秒),则该易失性存储器具有不确定状态。在一个示例中,统一存储器1642包括GPGPU存储器1644,其表示被分配以供GPU 1650使用的存储器。CPU 1610的存储器控制器1620管理CPU 1610对统一存储器1642的访问。

CPU 1610可以通过总线1640通信地耦合到GPU 1650和统一存储器1642。总线1640表示CPU 1610和GPU 1650以及存储器之间的高速通信连接。在一个示例中,总线1640是PCIe(外围部件快速互连)总线。在CPU 1610和GPU 1650之间可以使用其他总线或互连。CPU1610可以通过在GPU 1650上发起应用实例来将操作卸载给GPU 1650。在一个示例中,系统1600包括用于互连GPU 1650的GPU链路1660。在一个示例中,GPU链路1660与总线1640相同。在一个示例中,GPU 1650包括单独的GPU到GPU链路或结构,以互连用于GPU 1650之间的数据交换。

GPU 1650包括图形核心1652或其他图形处理硬件。在一个示例中,GPU 1650包括缓存1654,其表示对核心1652可用的一级或多级缓存。在一个示例中,缓存1654包括第一级缓存(L1或Ll$)和第二级缓存(L2或L2$)。在一个示例中,GPU 1650包括存储压缩数据的L2缓存,并且当数据从L1移动到L2时,系统按需提供压缩,以及当数据从L2移动到L1时,系统按需提供解压缩。压缩/解压缩(COMP/DECOMP)1658表示GPU 1650中的压缩和解压缩引擎,以按需提供压缩/解压缩操作。压缩/解压缩1658可以是或包括分布式压缩管理器硬件。

在一个示例中,GPU 1650包括存储器1656,其表示具体GPU实例的本地存储器资源。存储器1656可以表示特定于GPU实例的易失性存储器资源。系统1600可以包括用于GPU1650的共享存储器。存储器1656表示一个GPU上的非共享资源。

NIC(网络接口电路)1662[0:(N-1)](统称为NIC 1662)表示使得相应GPU 1650能够通过GPU链路1660访问其他GPU的电路。系统1600可以包括将数据块作为压缩数据存储在缓存1654或存储器1656中的第一图形处理器(例如,GPU 1650[0])。压缩数据具有数据块,这些数据块具有共同的占用空间但具有可变的数据量,这取决于存储在压缩块中的数据的压缩比。例如,无损压缩系统可以以8:8(无压缩)到8:1(最高压缩)之间的任一处的比率压缩数据。

在一个示例中,CPU 1610包括压缩管理器1622,其表示CPU 1610中的压缩/解压缩逻辑。当(一个或多个)压缩管理器贯穿系统1600以分布式方式实现时,系统1600中的(一个或多个)压缩管理器可以在系统1600中按需提供压缩和解压缩。按需压缩和解压缩允许数据选择性地作为压缩数据或未压缩数据通过不同的数据流移动。压缩所选择的流中的数据的能力可以减少某些数据交换的数据的带宽使用。交换所选择的流的未压缩数据的能力可以通过绕过它们可能创建性能瓶颈的压缩和解压缩操作来改善性能。

图17图示了图形压缩体系结构的示例。体系结构1700表示根据系统1600的示例的系统的压缩体系结构。体系结构1700提供了用于压缩数据的数据分组的替代结构。

存储器1710表示压缩数据的存储器存储装置。如所图示,压缩数据在缓存或存储器设备中使用恒定的占用空间,但是存储的数据量因压缩比而有所不同。例如,考虑在D2(压缩比8:1)下存储的数据量与在D1(压缩比8:6)下存储的数据量相比的差异。所图示的其他压缩比是8:2、8:4和8:5。存储的数据量不一定是按比例的,但是不同的数据块图示了基于压缩比的相对差异。

在一个示例中,体系结构1700表示针对具有内部无损压缩的GPU体系结构的压缩细节。在一个示例中,体系结构1700包括CCS(压缩控制表面)表1720。CCS表1720包括追踪存储器1710的离散存储器块的压缩大小的多个CCS条目。每个CCS条目可以表示一个块压缩比状态。CCS表1720被图示为具有与存储器1710可比较的布局,以表示数据块具有相关联的CCS条目以指示其压缩比的事实。因此,像存储器1710一样,CCS表1720具有由字母(A、B、C、D、E、…)指示的行和由数字(1、2、3、4、…)指示的列。将理解,并没有图示出所有数据。数据可以按数据块组进行访问。

在一个示例中,存储器1710的数据块大小为256B,并且支持以32B大小增量进行8:1到8:8之间压缩的压缩比。在一个示例中,这些块作为具有恒定占用空间布局的压缩数据存储在本地存储器中。对于恒定的占用空间布局,无论压缩比如何,每个块在存储器中的起始位置都基于完全的块大小。照此,压缩不一定会节省存储器空间,但是确实会节省用于从存储器读取的存储器带宽。

可以将存储器1710的数据及其相关联的CCS条目连结在一起以形成固定大小的分组,以便在系统中的部件之间传输。在一个示例中,分组的大小是固定的,其中相同的分组大小将用于每次传输。然而,在分组中包括的数据块的数量可以基于压缩比而变化。因此,固定大小的分组将包含可变量的数据。

块1740表示具有报头1750的数据块实现方式,具有多个压缩数据块。报头1750可以是用于存储CCS元数据和压缩格式(CMF)信息的报头。在一个示例中,报头1750包括CMF1752,以指示用于压缩块1740的压缩格式。

在一个示例中,报头1750包括作为块的CCS信息的CCS条目1754。在一个示例中,报头1750包括其他信息1756。其他信息1756可以包括可以存储在报头中用于指示关于压缩块的一些信息的任何其他元数据。块1740包括表示块1740中的压缩数据块的压缩数据1742。

报头1750可以被称为存储块的属性。在一个示例中,CMF 1752可以具有多个比特(例如,4个比特或其他数量)来指示不同的压缩实现方式。在一个示例中,CMF 1752指示作为解压缩器的查找表的条目以标识压缩格式的值,并应用它来对数据块解压缩。

图18图示了具有分布式压缩和解压缩的系统的示例。系统1800表示传送数据的系统,根据系统1600的示例,该系统1800可以包括压缩数据。在一个示例中,系统1800表示图形单元。在一个示例中,系统1800表示分立图形单元。

在一个示例中,系统1800包括在中央大型L2缓存1830周围的若干个块处的分布式压缩/解压缩。压缩和解压缩的选择性应用提供了对L2缓存1830的更高效的使用。虽然中央缓存被表示为L2缓存1830,但是共享中央缓存可以替代地是第三级(L3)缓存或其他更高级缓存。

在一个示例中,存储器1810表示动态随机存取存储器(DRAM)设备。在一个示例中,DRAM设备是高带宽存储器(HBM)设备。在一个示例中,L1缓存1872和L1缓存1842表示静态随机存取存储器(SRAM)设备。在一个示例中,L1缓存表示寄存器堆或寄存器组。在一个示例中,L2缓存1830是SRAM设备。

在一个示例中,系统1800包括用于存储数据1812的存储器1810。数据1812表示压缩数据。存储器1810可以存储与数据1812相关联的CCS信息。在一个示例中,系统1800包括L2缓存1830或由多个图形部件共享的其他更高级缓存。在一个示例中,L2缓存1830可以存储由数据1832表示的未压缩数据和由数据1834表示的压缩数据。

在系统1800的一个示例中,该系统具有分散化的压缩管理。在一个示例中,系统1800包括存储器1810附近的压缩引擎或压缩管理器。压缩管理器可以实现为硬件压缩管理器或硬件和软件的组合。压缩器1822表示压缩引擎的压缩器,以接收未压缩数据(灰色箭头),对其进行压缩,并将压缩数据(阴影箭头)提供给存储器1810以供存储。解压缩器1824表示压缩引擎的解压缩器,以接收压缩数据,对其进行解压缩,并将解压缩的数据提供给L2缓存1830。

系统1800提供了各种类型的客户端单元的表示,其中一些客户端单元具有连接到L2缓存1830的它们自己的L1缓存。客户端单元可以具有不同的读/写特性,这些特性规定了数据压缩的最高效位置。当处于压缩形式时,数据仅可以以压缩块粒度进行更新。因此,系统将需要以原子方式更新整个数据块,这意味着对于部分块更新,必须首先对数据进行解压缩,与新数据合并,然后再次重新压缩。

此外,当读取压缩数据时,必须从本地存储器中取得整个压缩块以进行解压缩。对于在一次操作中只读取块的子集的客户端单元,缓存未压缩的数据是有益的,从而避免多次从存储器中取得整个块并重复解压缩过程。

在一个示例中,压缩器1852可以从系统1800的部件的未压缩数据生成压缩数据作为压缩数据1834,以存储在L2缓存1830中。在一个示例中,解压缩器1854可以将压缩数据1834从L2解压缩到系统1800的部件。压缩器1852和解压缩器1854可以是系统1800中用于分布式压缩的另一压缩引擎的一部分。

系统1800提供了可以耦合到L2缓存1830的各种客户端单元的示例。在一个示例中,某些客户端单元是对数据执行操作的计算单元。在一个示例中,某些客户端单元是流式互连。在一个示例中,某些客户端单元是通信链路。各种客户端单元可以具有不同的操作细节,这些操作细节可以通知它们是否应该具有用于压缩和解压缩的压缩管理器。

在一个示例中,系统1800包括客户端单元1840,客户端单元1840包括L1缓存1842。L1缓存1842可以存储用于客户端单元1840的未压缩数据1844。在一个示例中,客户端单元1840是数据的消费者和生产者。L1缓存1842可以直接耦合到L2缓存1830,而不通过压缩引擎。L1缓存1842可以与L2缓存1830交换未压缩数据1832。

客户端单元1840可以表示以小的不连续组块产生数据的客户端,不与压缩块大小对齐。客户端单元1840可以表示以不连续的小组块消耗数据的客户端。如果客户端单元1840频繁地对其数据执行读-修改-写(RMW)操作,则到L2缓存1830的最佳连接将没有专用的压缩器/解压缩器。因此,在L1缓存1842和L2缓存1830之间不存在压缩管理器。该示例中的客户端单元1840将受益于存储未压缩的数据并且表现得像大的压缩合并缓冲器的L2缓存1830。

在一个示例中,系统1800包括客户端单元1860,客户端单元1860是数据的消费者。客户端单元1860表示通过压缩管理器耦合到L2缓存1830而不具有本地L1缓存的部件。客户端单元1860可以在不具有缓存设备的情况下缓冲产生的数据或缓冲用于消耗的数据。

客户端单元1860可以将消耗大量只读表面的消费者设备表示为大的、连续的数据组块。对于这样的消费者客户端单元,到L2缓存1830的最优连接可以具有用于以压缩形式存储较大量数据的增加的L2容量。解压缩器1854可以按需对数据1834进行解压缩以提供给客户端单元1860。

在一个示例中,系统1800包括客户端单元1870,客户端单元1840包括L1缓存1872。L1缓存1872可以存储用于客户端单元1870的未压缩数据1874。在一个示例中,客户端单元1870是数据的消费者和生产者。L1缓存1872可以通过压缩引擎耦合到L2缓存1830。压缩器1852和解压缩器1854可以提供从L1缓存1872到L2缓存1830的数据的压缩以及从L2缓存1880到L1缓存872的压缩数据的解压缩。

客户端单元1870可以表示在与压缩块大小对齐的连续组块中产生数据的客户端。客户端单元1870可以表示以大的连续组块消耗数据的客户端。对于这样的客户端,到L2缓存1830的最优连接可以在L1缓存1872和L2缓存1870之间具有专用的压缩器/解压缩器。L1缓存1872可以充当压缩合并缓冲器,用于向压缩器1852提供数据以压缩存储在L2缓存1830中。客户端单元1870可以受益于以压缩形式存储数据以增加其容量的L2缓存1830。

在一个示例中,系统1800允许绕过压缩引擎。例如,L2缓存1830可以直接向存储器1810提供压缩数据,并且存储器1810可以直接将压缩数据传递到L2缓存1830,而不进行解压缩。在一个示例中,L1缓存1872可以直接从L2缓存1830接收未压缩数据,而不需要由压缩引擎解压缩。在一个示例中,客户端单元1860可以直接从L2缓存1830接收未压缩的数据,而不需要由压缩引擎进行解压缩。

在一个示例中,系统1800包括耦合到L2缓存1830的NIC 1880。在一个示例中,NIC1880可以与L2缓存1830交换压缩数据。在一个示例中,NIC 1880可以与L2缓存1830交换未压缩数据。在一个示例中,系统1800包括NIC 1880和L2缓存1830之间的压缩管理器。在一个示例中,NIC 1880可以通过与一个或多个其他部件共享的压缩管理器来传递数据。

系统1800中的压缩管理器被图示为“在部件和L2缓存之间”。在一个示例中,压缩管理器是部件的一部分。分布在部件中的压缩管理器可以最大限度地使用本地缓存,并且通过减少结构带宽来降低SOC负载。在一个示例中,压缩管理器包括压缩器/解压缩器核心和用于存储CCS信息的控制平面缓存。压缩管理器的分布可以在系统1800的不同层提供压缩/解压缩核心。

在系统1800中,数据的压缩状态是指给定数据块是否被压缩的指示。压缩状态可以包含关于块的压缩存储器占用空间的信息。在一个示例中,存储器1810包括专用于每个数据块的CCS(压缩控制表面),以追踪该块的压缩状态。当块被写出到存储器1810时,表面可以以新的状态更新。当从存储器1810读取块时,系统可以咨询CCS以知道要读取多少存储器。在一个示例中,当数据块被压缩时,它在存储器1810中占据的块大小小于总的块大小。

在一个示例中,L2缓存1830追踪所有缓存块的压缩/未压缩数据状态。L2缓存1830可以有效地将CCS数据连同块内容一起进行缓存。以压缩形式存储的数据受益于占用空间压缩,从而使L2缓存1830的有效容量倍增。存储压缩数据的缺点在于,来自客户端单元的部分缓存线更新不能立即与压缩数据合并。部分写入要求L2缓存1830以压缩形式重新取得数据。当L2缓存1830以未压缩形式存储数据时,它允许立即合并、部分缓存线更新。

在一个示例中,当存在L2命中时,具有专用解压缩器的客户端可以消耗压缩存储在L2缓存1830中的数据。没有专用解压缩器的客户端不能直接消耗压缩存储在L2缓存1830中的数据。这样的客户端可以直接消耗未压缩存储在L2缓存1830中的数据。对于压缩存储的数据,没有解压缩器的客户端将需要把数据逐出并取回解压缩到L2缓存1830中。

图19图示了具有CCS缓存的分布式压缩和解压缩的示例。系统1900表示传送数据的系统,根据系统1600的示例,该系统1900可以包括压缩数据。在一个示例中,系统1900表示图形单元。在一个示例中,系统1900表示分立图形单元。

在一个示例中,系统1900包括用于未耦合到中央L2缓存或共享更高级缓存的客户端单元的分布式压缩/解压缩。压缩和解压缩的选择性应用为客户端单元提供了更高效的数据传送,即使不使用L2缓存。

系统1900可以具有直接放置在本地存储器1910和L1缓存1932之间的专用压缩器/解压缩器对,其中L1缓存1932是用于客户端单元1930的缓存。在一个示例中,压缩器/解压缩器块可以具有用于CCS数据的专用缓存。

在一个示例中,存储器1910表示DRAM设备。在一个示例中,DRAM设备是HBM设备。在一个示例中,L1缓存1932表示SRAM设备。在一个示例中,L1缓存1932表示寄存器堆或寄存器组。在一个示例中,系统1900包括用于存储数据1912的存储器1910。数据1912表示压缩数据。存储器1910可以存储与数据1912相关联的CCS信息。

系统1900包括客户端单元1930,客户端单元1930连接到存储器1910,并且不通过更高级的缓存连接。客户端单元1930具有L1缓存1932。L1缓存1932可以存储用于客户端单元1930的未压缩数据1934。在一个示例中,客户端单元1930是数据的消费者和生产者。L1缓存1932可以通过压缩引擎耦合到存储器1910。压缩器1922和解压缩器1924可以提供从L1缓存1932到存储器1910的数据的压缩和从存储器1910到L1缓存1932的压缩数据的解压缩。在一个示例中,压缩器1922和解压缩器1924表示包括专用CCS缓存1926的压缩管理器的部件。CCS缓存1926可以缓存用于压缩管理器中的压缩和解压缩应用的CCS信息。

图20是应用分布式压缩的示例的流程图。过程2000表示用于以分布式方式选择性地应用压缩的过程。在一个示例中,在2002处,客户端单元生成数据。客户端单元可以与本文中的任何示例一致。

在2004处,客户端单元可以可选地将未压缩数据存储在L1缓存中。并非所有的客户端单元都将具有L1缓存。在一个示例中,L1缓存将数据逐出到L2缓存或其他更高级的缓存。在一个示例中,L1缓存可以直接耦合到本地存储器。该系统可以包括用于在系统的不同级别执行压缩和解压缩的分布式压缩管理。

在2006处,系统可以确定数据是否要被压缩用于L2或另一本地存储器。如果系统要压缩数据,则在2008处“是”分支,在一个示例中,在2010处,系统利用L1缓存和L2缓存或本地存储器之间的分布式压缩器应用压缩。

在一个示例中,如果系统不压缩数据,则在2008处“否”分支,在2012处,系统可以将未压缩的数据发送到L2缓存或存储器。在一个示例中,未压缩数据的传递可以绕过压缩器/解压缩器部件,以避免执行压缩或避免执行解压缩。在一个示例中,在2010处生成压缩数据之后,在2012处,系统可以将压缩的数据发送到L2缓存或存储器。

图21是应用分布式解压缩的示例的流程图。过程2100表示用于以分布式方式选择性地应用解压缩的过程。在一个示例中,在2102处,客户端单元请求数据。客户端单元可以与本文中的任何示例一致。

在2104处,系统可以确定L2缓存或本地存储器中所请求的数据是否被压缩存储。如果L2缓存或存储器中的数据是压缩存储的,则在2106处“是”分支,在一个示例中,在2108处,系统访问压缩的数据,并利用L2缓存或本地存储器与L1缓存之间的分布式解压缩器应用解压缩。在一个示例中,系统可以可选地传递压缩数据,绕过解压缩器以避免执行解压缩。

在一个示例中,如果数据未被压缩,则在2106处“否”分支,在2110处,系统可以向L1缓存提供未压缩的数据。在一个示例中,在2108处对压缩数据解压缩之后,在2110处,系统可以向L1缓存提供未压缩的数据。

一般而言,关于本文中的描述,在一个示例中,图形处理器包括:缓存设备;存储器设备;以及在缓存设备和存储器设备之间的压缩模块,当写入数据从缓存设备移动到存储器设备时,该压缩模块用于执行写入数据的压缩,并且当读取数据从存储器设备移动到缓存设备时,该压缩模块用于执行读取数据的解压缩。

在图形处理器的一个示例中,存储器设备用于存储压缩数据和相关联压缩控制表面(CCS),以指示压缩数据的压缩,其中压缩模块包括专用CCS缓存,用于存储用于从存储器设备读取时解压缩的CCS信息,并且存储用于向存储器设备写入时压缩的CCS信息。根据图形处理器的任何前述示例,在一个示例中,缓存设备包括由多个客户端单元共享的共享L2(第二级)缓存。根据图形处理器的任何前述示例,在一个示例中,共享L2缓存用于存储压缩数据和未压缩数据两者。根据图形处理器的任何前述示例,在一个示例中,压缩模块包括压缩旁路路径,以可选地在共享L2缓存和存储器设备之间移动未压缩数据。根据图形处理器的任何前述示例,在一个示例中,图形处理器包括:耦合到共享L2缓存的L1(第一级)缓存,其中L1缓存用于存储未压缩数据并在共享L2缓存和L1缓存之间移动未压缩数据。根据图形处理器的任何前述示例,在一个示例中,压缩模块包括第一压缩模块,其中图形处理器包括:L1(第一级)缓存;以及在L1缓存和共享L2缓存之间的第二压缩模块,当写入数据从L1缓存移动到共享L2缓存时,第二压缩模块用于执行写入数据的压缩,并且当读取数据从共享L2缓存移动到L1缓存时,第二压缩模块用于执行读取数据的解压缩。根据图形处理器的任何前述示例,在一个示例中,第二压缩包括压缩旁路路径,以可选地在L1缓存和共享L2缓存之间移动未压缩数据。

一般而言,关于本文中的描述,在一个示例中,计算机系统包括:用于执行一般操作的中央处理单元;包括具有相关联的L1(第一级)缓存的多个图形部件的图形处理器;耦合到L1缓存的共享L2(第二级)缓存;以及在第一L1缓存和共享L2缓存之间的压缩模块,当写入数据从第一L1缓存移动到共享L2缓存时,该压缩模块用于执行写入数据的压缩,并且当读取数据从共享L2缓存移动到第一L1缓存时,该压缩模块用于执行读取数据的解压缩。

在计算机系统的一个示例中,共享L2缓存用于存储压缩数据和未压缩数据两者。根据计算机系统的任何前述示例,在一个示例中,压缩模块包括压缩旁路路径,以可选地在共享L2缓存和第一L1缓存之间移动未压缩数据。根据计算机系统的任何前述示例,在一个示例中,计算机系统包括:耦合到共享L2缓存的第二L1(第一级)缓存,其中第二L1缓存用于存储未压缩数据并在共享L2缓存和第二L1缓存之间移动未压缩数据。根据计算机系统的任何前述示例,在一个示例中,压缩模块包括第一压缩模块,并且其中图形处理器包括:存储器设备;以及在共享L2缓存和存储器设备之间的第二压缩模块,当写入数据从共享L2缓存移动到存储器设备时,第二压缩模块用于执行写入数据的压缩,并且当读取数据从存储器设备移动到共享L2缓存时,第二压缩模块用于执行读取数据的解压缩。根据计算机系统的任何前述示例,在一个示例中,第二压缩模块包括压缩旁路路径,以可选地在L1缓存和共享L2缓存之间移动未压缩数据。根据计算机系统的任何前述示例,在一个示例中,存储器设备用于存储压缩数据和相关联压缩控制表面(CCS),以指示压缩数据的压缩,其中压缩模块包括专用CCS缓存,用于存储用于从存储器设备读取时解压缩的CCS信息,并且存储用于向存储器设备写入时压缩的CCS信息。

一般而言,关于本文中的描述,在一个示例中,处理单元之间的通信方法包括:在缓存设备和存储器单元之间的压缩模块处接收数据;当接收到的数据是要从缓存设备移动到存储器单元的写入数据时,利用压缩模块执行压缩;以及当接收到的数据是要从存储器单元移动到缓存设备的读取数据时,利用压缩模块执行解压缩。

在该方法的一个示例中,缓存设备包括由多个计算单元共享的共享L2(第二级)缓存,并且存储器单元包括图形处理器的本地存储器设备,其中共享L2缓存用于存储压缩数据和未压缩数据两者。根据该方法的任何前述示例,在一个示例中,执行压缩包括:确定写入数据是作为压缩写入数据还是作为未压缩写入数据进行存储;以及当写入数据要作为未压缩写入数据进行存储时绕过压缩模块以避免执行压缩;否则,当写入数据要作为压缩写入数据进行存储时,利用压缩模块执行压缩。根据该方法的任何前述示例,在一个示例中,执行解压缩包括:确定读取数据是压缩读取数据还是未压缩读取数据;以及当读取数据是未压缩读取数据时绕过压缩模块以避免执行解压缩;否则,当读取数据是压缩读取数据时,利用压缩模块执行解压缩。根据该方法的任何前述示例,在一个示例中,缓存设备包括客户端单元的L1(第一级)缓存,并且存储器单元包括共享L2(第二级)缓存。

本文中所图示的流程图提供了各种过程动作的顺序的示例。流程图可以指示要由软件或固件例程执行的操作,以及物理操作。流程图可以图示可以以硬件和/或软件实现的有限状态机(FSM)的状态的实现方式的示例。尽管以特定的顺序或次序示出,但是除非另有指定,否则可以修改动作的次序。因此,所图示的图应该仅被理解为示例,并且该过程可以按不同的次序执行,并且一些动作可以并行执行。此外,可以省略一个或多个动作;因此,并非所有的实现方式都将执行所有的动作。

在本文中所描述的各种操作或功能的程度上,它们可以被描述或定义为软件代码、指令、配置和/或数据。内容可以是直接可执行的(“对象”或“可执行”形式)、源代码或差异代码(“Δ”或“补片”代码)。本文中描述的软件内容可以经由其上存储有内容的制品来提供,或者经由操作通信接口以经由通信接口发送数据的方法来提供。机器可读存储介质可以使机器执行所描述的功能或操作,并且包括以机器(例如,计算设备、电子系统等)可访问的形式存储信息的任何机制,诸如可记录/不可记录介质(例如,只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光学存储介质、闪速存储器设备等)。通信接口包括对接到硬连线的、无线的、光学的等介质中的任何介质以与另一设备通信的任何机制,诸如存储器总线接口、处理器总线接口、互联网连接、磁盘控制器等。可以通过提供配置参数和/或发送信号来配置通信接口,以准备通信接口来提供描述软件内容的数据信号。可以经由发送到通信接口的一个或多个命令或信号来访问通信接口。

本文中所描述的各种部件可以是用于执行所描述的操作或功能的装置。本文中所描述的每个部件包括软件、硬件或这些的组合。这些部件可以实现为软件模块、硬件模块、专用硬件(例如,专用硬件、专用集成电路(ASIC)、数字信号处理器(DSP)等)、嵌入式控制器、硬连线电路等。

除本文中所描述的内容外,在不脱离其范围的情况下,还可以对本发明的公开内容和实现方式进行各种修改。因此,本文中的图示和示例应当被解释为说明性的,而不是限制性的。本发明的范围应当仅参考以下权利要求来度量。

相关技术
  • 用于有机电致发光显示装置的光学膜、用于有机电致发光显示装置的偏振膜、用于有机电致发光显示装置的带粘合剂层的偏振膜、以及有机电致发光显示装置
  • 显示装置的测试方法、显示装置的贴合方法和显示装置
  • 发光元件、显示装置及发光元件与显示装置的制造方法
  • 显示装置及制造该显示装置的方法
  • 显示装置和显示装置的制作方法
  • 显示装置用基板、显示装置用基板的制造方法、显示装置、液晶显示装置、液晶显示装置的制造方法和有机电致发光显示装置
  • 显示装置用基板、显示装置用基板的制造方法、显示装置、液晶显示装置、液晶显示装置的制造方法和有机电致发光显示装置
技术分类

06120116458687