CN115115719A - 用于图形处理的可变宽度交织编码 - Google Patents
用于图形处理的可变宽度交织编码 Download PDFInfo
- Publication number
- CN115115719A CN115115719A CN202210154266.6A CN202210154266A CN115115719A CN 115115719 A CN115115719 A CN 115115719A CN 202210154266 A CN202210154266 A CN 202210154266A CN 115115719 A CN115115719 A CN 115115719A
- Authority
- CN
- China
- Prior art keywords
- data
- pipeline
- graphics
- memory
- decoder
- 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
Links
- 238000012545 processing Methods 0.000 title claims abstract description 115
- 230000015654 memory Effects 0.000 claims abstract description 231
- 238000000034 method Methods 0.000 claims description 95
- 230000001360 synchronised effect Effects 0.000 claims description 7
- 230000006870 function Effects 0.000 description 85
- 230000008569 process Effects 0.000 description 67
- 238000004422 calculation algorithm Methods 0.000 description 44
- 238000013461 design Methods 0.000 description 38
- 239000000872 buffer Substances 0.000 description 36
- 238000010586 diagram Methods 0.000 description 30
- 239000000758 substrate Substances 0.000 description 30
- 239000004744 fabric Substances 0.000 description 23
- 238000004891 communication Methods 0.000 description 22
- 239000011159 matrix material Substances 0.000 description 21
- 238000007667 floating Methods 0.000 description 20
- 238000007906 compression Methods 0.000 description 18
- 238000003860 storage Methods 0.000 description 18
- 108091006146 Channels Proteins 0.000 description 17
- 230000006837 decompression Effects 0.000 description 16
- 239000012634 fragment Substances 0.000 description 15
- 238000012360 testing method Methods 0.000 description 15
- 230000006835 compression Effects 0.000 description 14
- 239000000047 product Substances 0.000 description 12
- 238000009877 rendering Methods 0.000 description 11
- 238000004364 calculation method Methods 0.000 description 10
- 230000001133 acceleration Effects 0.000 description 9
- 238000004590 computer program Methods 0.000 description 9
- 238000007726 management method Methods 0.000 description 9
- 230000002093 peripheral effect Effects 0.000 description 9
- 238000013459 approach Methods 0.000 description 8
- 238000010276 construction Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 238000005070 sampling Methods 0.000 description 7
- 229910052710 silicon Inorganic materials 0.000 description 7
- 239000010703 silicon Substances 0.000 description 7
- 238000013528 artificial neural network Methods 0.000 description 6
- 230000006399 behavior Effects 0.000 description 6
- 238000010801 machine learning Methods 0.000 description 6
- 238000004519 manufacturing process Methods 0.000 description 6
- 239000004065 semiconductor Substances 0.000 description 6
- 238000013519 translation Methods 0.000 description 6
- 230000014616 translation Effects 0.000 description 6
- 238000003491 array Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 5
- 238000004088 simulation Methods 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 4
- 230000006978 adaptation Effects 0.000 description 4
- 230000003190 augmentative effect Effects 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 238000013135 deep learning Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000009467 reduction Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 238000012549 training Methods 0.000 description 4
- 239000008186 active pharmaceutical agent Substances 0.000 description 3
- 239000003795 chemical substances by application Substances 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000013144 data compression Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 230000036961 partial effect Effects 0.000 description 3
- 238000012805 post-processing Methods 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 239000004593 Epoxy Substances 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000000739 chaotic effect Effects 0.000 description 2
- 230000001427 coherent effect Effects 0.000 description 2
- 239000011521 glass Substances 0.000 description 2
- 230000001965 increasing effect Effects 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000013403 standard screening design Methods 0.000 description 2
- 230000008685 targeting Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 101100226858 Haemophilus influenzae (strain ATCC 51907 / DSM 11121 / KW20 / Rd) fbpA gene Proteins 0.000 description 1
- 102100030148 Integrator complex subunit 8 Human genes 0.000 description 1
- 101710092891 Integrator complex subunit 8 Proteins 0.000 description 1
- 101100291707 Levilactobacillus brevis mntH gene Proteins 0.000 description 1
- 101100317378 Mus musculus Wnt3 gene Proteins 0.000 description 1
- 101100285331 Neisseria gonorrhoeae hitA gene Proteins 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 210000004556 brain Anatomy 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 230000002860 competitive effect Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 239000000446 fuel Substances 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000000153 supplemental effect Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000009966 trimming Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/005—Statistical coding, e.g. Huffman, run length coding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/40—Analysis of texture
- G06T7/41—Analysis of texture based on statistical description of texture
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Probability & Statistics with Applications (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
Abstract
描述了用于图形处理的可变宽度交织编码。装置的示例包括:一个或多个处理器,包括图形处理器;以及用于存储数据的存储器,所述数据包括用于图形处理的数据;其中,所述图形处理器包括用于提供可变宽度交织编码的编码器流水线和用于解码所述可变宽度交织编码的解码器流水线,并且其中,所述编码器流水线用于:从工作组接收多个比特流;对所述比特流执行并行熵编码来为所述工作组中的每个工作组生成多个编码的比特流;至少部分地基于从所述解码器流水线接收的针对解码的数据要求,对每个工作组的所述比特流执行可变交织;以及将所述工作组中的每个工作组的输出压缩成交织的数据的连续流。
Description
要求优先权
本申请要求Stephen Junkins等人于2021年3月19日提交的题为VARIABLE WIDTHINTERLEAVED HUFFMAN CODING FOR GRAPHICS PROCESSING的美国临时申请序号63/163,685的优先权,其全部内容通过引用并入本文。
技术领域
本公开总体上涉及数据处理,并且更具体地涉及用于图形处理的可变宽度交织编码。
背景技术
在诸如计算机和视频游戏操作的图形操作中,纹理处理需要大量的处理器时间,因此减慢了游戏或其他操作。特别是,纹理解压缩会给视频处理带来负担。纹理超级解压缩是已被添加到新游戏控制台的一项关键架构功能。硬件超级解压缩为游戏玩家提供快速游戏加载和动态纹理流体验。超级解压缩功能可显著提高NVMe(非易失性存储器快速)SSD(固态驱动器)性能、提供更多和更高分辨率的纹理资产以及新的渲染流水线。
因此,PC游戏平台可能需要架构升级以在纹理处理方面保持与新游戏控制台的竞争力。
附图说明
为了可以详细地理解本实施例的上述特征的方式,可以通过参考实施例来对以上简要概述的实施例进行更具体的描述,其中一些实施例在附图中示出。然而,应当注意,附图仅示出了典型的实施例,因此不应被认为是对其范围的限制。
图1是根据实施例的处理系统的框图。
图2A-2D示出了由本文描述的实施例提供的计算系统和图形处理器。
图3A-3C示出了由本文所描述的实施例提供的附加图形处理器和计算加速器架构的框图。
图4是根据一些实施例的图形处理器的图形处理引擎的框图。
图5A-5B示出了根据本文所描述的实施例的线程执行逻辑,其包括在图形处理器核中采用的处理元件的阵列。
图6示出了根据实施例的附加执行单元。
图7是示出根据一些实施例的图形处理器指令格式700的框图。
图8是图形处理器的另一实施例的框图。
图9A是示出根据一些实施例的图形处理器命令格式900的框图。
图9B是示出根据实施例的图形处理器命令序列910的框图。
图10示出了根据一些实施例的用于数据处理系统的示例性图形软件架构。
图11A是示出根据实施例的可用于制造集成电路以执行操作的IP核开发系统的框图。
图11B示出了根据本文所述的一些实施例的集成电路封装组件的截面侧视图。
图11C示出了封装组件,该封装组件包括连接至基板的多个单元的硬件逻辑小芯片。
图11D示出了根据实施例的包括可互换小芯片1195的封装组件。
图12是示出了根据实施例的可以使用一个或多个IP核制造的示例性片上系统集成电路的框图;
图13A-13B是示出了根据本文描述的实施例的用于SoC内的示例性图形处理器的框图;
图14是根据一些实施例的使用可变宽度交织来交织SIMD比特流的图示;
图15示出了根据一些实施例的提供可变宽度比特流交织的三通超压缩霍夫曼熵编码器流水线的操作;
图16示出了根据一些实施例的提供可变宽度比特流交织的超压缩霍夫曼熵解码器流水线的操作;
图17A是根据一些实施例的用于图形处理的可变宽度交织霍夫曼编码的过程的图示;
图17B是根据一些实施例的用于对用于图形处理的可变宽度交织霍夫曼数据进行解码的过程的图示;
图18是可以在一些实施例中解决的纹理并行性的图示;
图19A示出了根据一些实施例的将纹理资产细分为块(chunk)的超压缩创作工具;
图19B示出了根据一些实施例的将纹理资产细分为瓦片(tile)的超压缩创作工具;
图20A示出了根据一些实施例将纹理资产块进一步细分为子块;以及
图20B示出了根据一些实施例的将纹理资产瓦片进一步细分为子块。
具体实施方式
实施例涉及用于图形处理的可变宽度交织编码。
熵编码是指独立于介质特定特性的无损数据压缩操作,因此适用于任何流。通常,熵编码为输入中出现的每个唯一符号创建并指派唯一的无前缀码。然后熵编码器通过用对应的可变长度无前缀输出码字替换每个固定长度输入符号来压缩数据。
特别地,霍夫曼编码指的是一种无损数据压缩算法,其中可变长度码被指派给输入字符,指派码的长度基于编码字符的出现频率。这种编码的目标是让最频繁出现的字符接收最小(最短比特长度)码,而最不频繁出现的字符接收最大(最长比特长度)码。
在一些实施例中,提供了一种用于交织霍夫曼编码器和解码器的装置、系统或过程,以在例如基于GPU的纹理超级解压缩流水线中实现快速熵解码。编码器和解码器的实现可用于为GPU架构中的固定功能硬件实现提供基础。算法选择的相互依赖性可以提供为软件和硬件中的GPU实现量身定制的实施例。鉴于高性能霍夫曼解码的基础重要性以及GPU计算的日益普及,实施例可以提供编码和解码操作的重要创新,该创新特别适用于在高级游戏或其他密集视频实现中使用的PC平台。
系统总览
图1是根据实施例的处理系统100的框图。处理系统100可以用在单处理器台式机系统、多处理器工作站系统或具有大量处理器102或处理器核107的服务器系统中。在一个实施例中,处理系统100是并入片上系统(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还使用外部高速缓存(例如,三级(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是光线追踪加速器,其可以用于与图形处理器108一起执行光线追踪操作。在一个实施例中,可以使用外部加速器119代替加速器112或外部加速器119可以与加速器112一起使用。
在一些实施例中,显示设备111可以连接至处理器102。显示设备111可以是内部显示设备中的一个或多个,例如在移动电子设备或膝上型设备或经由显示接口(例如DisplayPort等)附接的外部显示设备中所见的那些。在一个实施例中,显示设备111可以是头戴式显示器(HMD),诸如用于虚拟现实(VR)应用或增强现实(AR)应用中的立体显示设备。
在一些实施例中,平台控制器中心130使外围设备能够经由高速I/O总线连接到存储器设备120和处理器102。I/O外围设备包括但不限于音频控制器146、网络控制器134、固件接口128、无线收发器126、触摸传感器125、数据存储设备124(例如,非易失性存储器、易失性存储器、硬盘驱动器、闪存、NAND、3D NAND、3D XPoint等)。数据存储设备124可以经由存储接口(例如,SATA)或经由外围总线,例如外围组件互连总线(例如,PCI、PCI express)来连接。触摸传感器125可以包括触摸屏传感器、压力传感器或指纹传感器。无线收发器126可以是Wi-Fi收发器、蓝牙收发器或诸如3G、4G、5G或长期演进(LTE)收发器的移动网络收发器。固件接口128使能与系统固件的通信,并且可以是例如统一可扩展固件接口(UEFI)。网络控制器134可以启用到有线网络的网络连接。在一些实施例中,高性能网络控制器(未示出)与接口总线110耦合。在一个实施例中,音频控制器146是多通道高清音频控制器。在一个实施例中,处理系统100包括可选的传统I/O控制器140,用于将传统(例如,个人系统2(PS/2))设备耦合到系统。平台控制器中心130还可以连接到一个或多个通用串行总线(USB)控制器142,该控制器连接输入设备,例如键盘和鼠标143组合、相机144或其他USB输入设备。
应当理解,所示的处理系统100是示例性的而不是限制性的,因为还可以使用配置不同的其他类型的数据处理系统。例如,存储器控制器116和平台控制器中心130的实例可以被集成到分立的外部图形处理器中,例如外部图形处理器118。在一个实施例中,平台控制器中心130和/或存储器控制器116可以是在一个或多个处理器102的外部。例如,处理系统100可以包括外部存储器控制器116和平台控制器中心130,该外部存储器控制器116和平台控制器中心130可以被配置为与处理器102的通信的系统芯片组内的存储器控制器中心和外围控制器中心。
例如,可以使用电路板(“底座(sled)”),其上放置了诸如CPU、存储器和其他组件之类的组件,其被设计用于提高热性能。在一些示例中,诸如处理器之类的处理组件位于底座的顶侧,而诸如DIMM之类的接近存储器位于底座的底侧。由于此设计提供了增强的气流,因此这些组件可以以比典型系统更高的频率和功率水平运行,从而提高了性能。此外,这些底座被配置为与机架中的电源和数据通信电缆盲配合,从而增强了其快速拆卸、升级、重新安装和/或更换的能力。同样,位于底座上的各个组件(例如处理器、加速器、存储器和数据存储驱动器)由于其相互之间的间距增加而配置为易于升级。在说明性实施例中,组件另外包括硬件证明特征以证明其真实性。
数据中心可以利用支持多种其他网络架构(包括以太网和Omni-Path)的单一网络架构(“结构”)。底座可以经由光纤耦合到交换机,与典型的双绞线电缆(例如,类别5、类别5e、类别6等)相比,其提供更高的带宽和更低的延迟。由于高带宽、低延迟的互连和网络架构,数据中心可能会在使用中池化资源,例如存储器、加速器(例如GPU、图形加速器、FPGA、ASIC、神经网络和/或人工智能加速器,等等),以及经过物理分解的数据存储驱动器,并根据需要将其提供给计算资源(例如,处理器),从而使计算资源能够像本地资源一样访问池化的资源。
供电装置或电源可以向处理系统100或本文所述的任何组件或系统提供电压和/或电流。在一个示例中,供电装置包括AC到DC(交流到直流)适配器,以插入壁装电源插座。这样的AC电源可以是可再生能源(例如,太阳能)电源。在一个示例中,电源包括DC电源,例如外部AC至DC转换器。在一个示例中,电源或供电装置包括无线充电硬件,以经由与充电场的邻近来充电。在一个示例中,电源可以包括内部电池、交流电源、基于运动的电源、太阳能电源或燃料电池源。
图2A-2D示出了本文描述的实施例提供的计算系统和图形处理器。图2A-2D的具有与本文中任何其他附图的元件相同的附图标记(或名称)的元件可以以类似于本文其他各处所描述的任何方式来操作或起作用,但不限于此。
图2A是具有一个或多个处理器核202A-202N、集成存储器控制器214和集成图形处理器208的处理器200的实施例的框图。处理器200可以包括直至并包括用虚线框表示的附加核202N的附加核。每个处理器核202A-202N包括一个或多个内部高速缓存单元204A-204N。在一些实施例中,每个处理器核还可以访问一个或多个共享高速缓存单元206。内部高速缓存单元204A-204N和共享高速缓存单元206表示处理器200内的高速缓存存储器层次结构。高速缓存存储器层次结构可以包括每个处理器核内的至少一个级别的指令和数据高速缓存,以及一个或多个级别的共享中级高速缓存,例如2级(L2)、3级(L3)、4级(L4)、或其他级别的高速缓存,其中外部存储器之前的最高级别的高速缓存归类为LLC。在一些实施例中,高速缓存一致性逻辑维持各种高速缓存单元206和204A-204N之间的一致性。
在一些实施例中,处理器200还可包括一组一个或多个总线控制器单元216和系统代理核210。一个或多个总线控制器单元216管理一组外围总线,例如一个或多个PCI或PCIexpress总线。系统代理核210为各种处理器组件提供管理功能。在一些实施例中,系统代理核210包括一个或多个集成存储器控制器214,以管理对各种外部存储器设备(未示出)的访问。
在一些实施例中,一个或多个处理器核202A-202N包括对同时多线程的支持。在这样的实施例中,系统代理核210包括用于在多线程处理期间协调和操作核202A-202N的组件。系统代理核210可以另外包括电源控制单元(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是执行相同指令集架构的同质核。在另一实施例中,就指令集架构(ISA)而言,处理器核202A-202N是异构的,其中一个或多个处理器核202A-202N执行第一指令集,而至少一个其他核执行该第一指令集的子集或不同的指令集。在一个实施例中,处理器核202A-202N在微架构方面是异构的,其中具有相对较高功耗的一个或多个核与具有较低功耗的一个或多个功率核耦合。在一个实施例中,处理器核202A-202N在计算能力方面是异构的。另外,处理器200可以被实现在一个或多个芯片上,或者被实现为除其他组件之外还具有所示出的组件的SoC集成电路。
图2B是根据本文所述的一些实施例的图形处理器核219的硬件逻辑的框图。具有与本文中任何其他附图的元件相同的附图标记(或名称)的图2B的元件可以以类似于本文中其他地方所描述的任何方式来操作或起作用,但不限于此。图形处理器核219(有时称为核切片)可以是模块化图形处理器中的一个或多个图形核。图形处理器核219是一个图形核切片的示例,并且本文所述的图形处理器可以基于目标功率和性能包络线而包括多个图形核切片。每个图形处理器核219可以包括与多个子核221A-221F耦合的固定功能块230,多个子核221A-221F也称为子切片,其包括通用和固定功能逻辑的模块化块。
在一些实施例中,固定功能块230包括几何形状/固定功能流水线231,其可以例如在较低性能和/或较低功率的图形处理器实现中由图形处理器核219中的所有子核共享。在各种实施例中,几何形状/固定功能流水线231包括3D固定功能流水线(例如,如下所述的图3A和图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使得能够从命令流和全局线程分派器接收命令缓冲器,该命令流和全局线程分派器被配置为向图形处理器内的一个或多个图形核中的每一个提供命令和指令。当要执行媒体操作时,可以将命令和指令分派给媒体流水线234,或者当要执行图形处理操作时,可以将其分派给几何形状和固定功能流水线(例如,几何形状和固定功能流水线231、几何形状和固定功能流水线237)。
图形微控制器233可以被配置为执行用于图形处理器核219的各种调度和管理任务。在一个实施例中,图形微控制器233可以在子核221A-221F中的执行单元(EU)阵列222A-222F,224A-224F内的各种图形并行引擎上执行图形和/或计算工作负载调度。在此调度模型中,在包括图形处理器核219的SoC的CPU核上执行的主机软件可以提交多个图形处理器门铃之一的工作负载,从而调用适当图形引擎上的调度操作。调度操作包括确定接下来要运行哪个工作负载,将工作负载提交给命令流送器(command streamer),抢占在引擎上正在运行的现有工作负载,监视工作负载的进度,以及在工作负载完成时通知主机软件。在一个实施例中,图形微控制器233还可以促进图形处理器核219的低功率或空闲状态,从而为图形处理器核219提供与系统上的操作系统和/或图形驱动程序软件无关地跨低功率状态转换保存和恢复图形处理器核219内的寄存器的能力。
图形处理器核219可具有大于或小于所示的子核221A-221F,最多N个模块化子核。对于每组N个子核,图形处理器核219还可以包括共享功能逻辑235、共享和/或高速缓存存储器236、几何形状/固定功能流水线237以及用于加速各种图形和计算处理操作的附加固定功能逻辑238。共享功能逻辑235可以包括与图4的共享功能逻辑420相关联的逻辑单元(例如,采样器、数学和/或线程间通信逻辑),其可以被图形处理器核219中的每个N个子核共享。共享和/或高速缓存存储器236可以是图形处理器核219内的一组N个子核221A-221F的最后一级高速缓存,并且还可以用作可由多个子核访问的共享存储器。可以在固定功能块230内包括几何形状/固定功能流水线237而不是几何形状/固定功能流水线231,并且几何形状/固定功能流水线237可以包括相同或相似的逻辑单元。
在一个实施例中,图形处理器核219包括附加的固定功能逻辑238,其可以包括供图形处理器核219使用的各种固定功能加速逻辑。在一个实施例中,附加的固定功能逻辑238包括在仅位置着色(shading)中使用的附加的几何形状流水线。在仅位置着色中,存在两个几何形状流水线,几何形状/固定功能流水线238、231中的完整几何形状流水线,以及剔除流水线,该剔除流水线是可以包含在附加固定功能逻辑238中的附加几何形状流水线。一个实施例中,剔除流水线是完整几何形状流水线的修整版。完整流水线和剔除流水线可以执行同一应用程序的不同实例,每个实例具有单独的上下文。仅位置着色可以隐藏丢弃三角形的长时间剔除运行,从而使着色在某些情况下可以更早完成。例如,在一个实施例中,附加固定功能逻辑238内的剔除流水线逻辑可以与主应用程序并行地执行位置着色器,并且通常比完整流水线更快地产生临界结果,因为剔除流水线仅获取和着色顶点的位置属性,而无需执行光栅化和将像素渲染到帧缓冲器的操作。剔除流水线可以使用生成的临界结果来计算所有三角形的可见性信息,而无需考虑这些三角形是否被剔除。完整的流水线(在这种情况下,它可以称为重播流水线)可以消耗可见性信息,以跳过剔除的三角形,以仅对最终传递到光栅化阶段的可见三角形着色。
在一个实施例中,附加的固定功能逻辑238还可以包括机器学习加速逻辑,例如固定功能矩阵乘法逻辑,用于包括针对机器学习训练或推理的优化的实现。
在每个图形子核221A-221F内包括一组执行资源,其可用于响应于图形流水线、媒体流水线或着色器程序的请求来执行图形、媒体和计算操作。图形子核221A-221F包括多个EU阵列222A-222F,224A-224F,线程分派和线程间通信(TD/IC)逻辑223A-223F,3D(例如,纹理)采样器225A-225F,媒体采样器206A-206F,着色器处理器227A-227F,以及共享本地存储器(SLM)228A-228F。EU阵列222A-222F,224A-224F各自包含多个执行单元,它们是通用图形处理单元,能够为图形、媒体或计算操作提供服务,执行浮点和整数/定点逻辑运算,包括图形、媒体或计算着色器/GPGPU程序。TD/IC逻辑223A-223F对子核内的执行单元执行本地线程分派和线程控制操作,并促进在子核的执行单元上执行的线程之间的通信。3D采样器225A-225F可以将与纹理或其他3D图形相关的数据读取到存储器中。3D采样器可以根据配置的采样状态和与给定纹理相关联的纹理格式不同地读取纹理数据。媒体采样器206A-206F可以基于与媒体数据相关联的类型和格式来执行类似的读取操作。在一个实施例中,每个图形子核221A-221F可以可替代地包括统一的3D和媒体采样器。在每个子核221A-221F内的执行单元上执行的线程可以利用每个子核内的共享本地存储器228A-228F,以使在线程组内执行的线程能够使用片上存储器的公用池来执行。
图2C图示了图形处理单元(GPU)239,其包括布置成多核组240A-240N的专用图形处理资源集。说明了多核组240A的细节。多核组240B-240N可以配备相同或相似的图形处理资源组。
如图所示,多核组240A可包括一组图形核243、一组张量核244和一组光线追踪核245。调度器/分派器241调度并分派图形线程以在各个核243、244、245上执行。在一个实施例中,张量核244是具有硬件的稀疏张量核,以使得能够绕过具有零值输入的乘法运算。
一组寄存器文件242可以存储执行图形线程时核243、244、245使用的操作数值。这些可以包括例如用于存储整数值的整数寄存器,用于存储浮点值的浮点寄存器,用于存储打包数据元素(整数和/或浮点数据元素)的矢量寄存器以及用于存储张量/矩阵值的瓦片寄存器。在一个实施例中,瓦片寄存器被实现为矢量寄存器的组合集合。
一个或多个组合的级别1(L1)高速缓存和共享存储器单元247在每个多核组240A中本地存储图形数据,例如纹理数据、顶点数据、像素数据、光线数据、边界体积数据等。一个或多个纹理单元247也可以用于执行纹理化操作,诸如纹理映射和采样。由多核组240A-240N的全部或子集共享的2级(L2)高速缓存253存储多个并发图形线程的图形数据和/或指令。如图所示,L2高速缓存253可以在多个多核组240A-240N之间共享。一个或多个存储器控制器248将GPU 239耦合到存储器249,该存储器可以是系统存储器(例如,DRAM)和/或专用图形存储器(例如,GDDR6存储器)。
输入/输出(I/O)电路250将GPU 239耦合到一个或多个I/O设备252,例如数字信号处理器(DSP)、网络控制器或用户输入设备。片上互连可以用于将I/O设备252耦合到GPU239和存储器249。I/O电路250的一个或多个I/O存储器管理单元(IOMMU)251将I/O设备252直接耦合到存储器249。在一个实施例中,IOMMU 251管理多组页表以将虚拟地址映射到存储器249中的物理地址。在该实施例中,I/O设备252、CPU 246和GPU 239可以共享相同的虚拟地址空间。
在一种实现方式中,IOMMU 251支持虚拟化。在这种情况下,它可以管理第一组页表以将访客/图形虚拟地址映射到访客/图形物理地址,以及管理第二组页表以将访客/图形物理地址映射到系统/主机物理地址(例如,在存储器249中)。可以将第一和第二组页表的每一个的基地址存储在控制寄存器中,并在上下文切换器上换出(例如,以便向新的上下文提供对相关组的页表的访问)。尽管在图2C中未示出,但是核243、244、245和/或多核组240A-240N中的每一个都可以包括转换后备缓冲器(TLB),以缓存访客虚拟到访客物理转换、访客物理到主机物理转换和访客虚拟到主机物理转换。
在一个实施例中,CPU 246、GPU 239和I/O设备252被集成在单个半导体芯片和/或芯片封装上。存储器249可以集成在同一芯片上,或者可以经由片外接口耦合到存储器控制器248。在一种实施方式中,存储器249包括GDDR6存储器,该GDDR6存储器与其他物理系统级存储器共享相同的虚拟地址空间,尽管本发明的基本原理不限于该特定实施方式。
在一个实施例中,张量核244包括多个被特别设计为执行矩阵运算的执行单元,矩阵运算是用于执行深度学习运算的基本计算运算。例如,同时矩阵乘法运算可用于神经网络训练和推理。张量核244可以使用各种操作数精度来执行矩阵处理,包括单精度浮点数(例如32比特),半精度浮点数(例如16比特),整数字(16比特),字节(8比特)和半字节(4比特)。在一个实施例中,神经网络实现提取每个渲染场景的特征,潜在地从多个帧中组合细节,以构造高质量的最终图像。
在深度学习实现中,可以安排并行矩阵乘法工作以在张量核244上执行。神经网络的训练尤其需要大量的矩阵点积运算。为了处理乘以N×N×N个矩阵乘法的内积公式,张量核244可以包括至少N个点积处理元件。在矩阵乘法开始之前,将一个完整的矩阵加载到瓦片寄存器中,并在N个周期的每个周期中加载至少一列第二矩阵。每个周期有N个点积被处理。
取决于特定实现方式,可以以不同的精度存储矩阵元素,包括16比特字、8比特字节(例如INT8)和4比特半字节(例如INT4)。可以为张量核244指定不同的精度模式,以确保将最有效的精度用于不同的工作负载(例如,诸如可以将量化容忍到字节和半字节的推理工作负载)。
在一个实施例中,对于实时光线追踪和非实时光线追踪实施方式,光线追踪核245都加速了光线追踪操作。特别地,光线追踪核245包括光线遍历/相交电路,该光线遍历/相交电路用于使用边界体积层级(BVH)来执行光线遍历并识别光线与包围在BVH体积内的图元之间的相交。光线追踪核245还可以包括用于执行深度测试和剔除(例如,使用Z缓冲器或类似布置)的电路。在一种实施方式中,光线追踪核245与本文所述的图像降噪技术一致地执行遍历和相交操作,其至少一部分可以在张量核244上执行。例如,在一个实施例中,张量核244实施深度学习神经网络以对由光线追踪核245生成的帧执行降噪。但是,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光线追踪(DXR),其包括DispatchRays命令以及光线生成、最近命中、任何命中和缺失的着色器,可为每个对象分配着色器和纹理的特有的组。可以由光线追踪核245、图形核243和张量核244支持的另一个光线追踪平台是Vulkan 1.1.85。然而,请注意,本发明的基本原理不限于任何特定的光线追踪ISA。
通常,各种核245、244、243可以支持光线追踪指令集,该光线追踪指令集包括用于光线生成、最近命中、任何命中、光线图元相交、每图元和分层边界框构造、未命中、访问和例外的指令/功能。更具体地,一个实施例包括执行以下功能的光线追踪指令:
光线生成–可以为每个像素、样本或其他用户定义的工作分配执行光线生成指令。
最近命中–可以执行最近命中指令以定位光线与场景中图元的最近相交点。
任何命中–任何命中指令标识光线与场景中的图元之间的多个相交,从而可能标识新的最近的相交点。
相交–相交指令执行光线图元相交测试并输出结果。
每图元和边界框构造–该指令围绕给定的图元或一组图元构建边界框(例如,在构建新的BVH或其他加速度数据结构时)。
未命中–表示光线未命中场景内或场景指定区域内的所有几何形状。
访问–指示光线将穿过的子体积。
异常–包括各种类型的异常处理程序(例如,针对各种错误条件调用的异常处理程序)。
在一个实施例中,光线追踪核245可以适合于加速通用计算操作,该通用计算操作可以使用类似于光线交叉测试的计算技术来加速。可以提供一个计算框架,使着色器程序能够被编译成低级指令和/或原语,这些指令和/或原语经由光线追踪核执行通用计算操作。可受益于在光线追踪核245上执行的计算操作的示例性计算问题包括涉及坐标空间内的光束、波、光线或粒子传播的计算。可以相对于坐标空间内的几何形状图形或网格计算与该传播相关联的相互作用。例如,与通过环境的电磁信号传播相关联的计算可以经由使用经由光线追踪核执行的指令或原语来加速。环境中的物体对信号的衍射和反射可以计算为直接的光线追踪类比。
光线追踪核245也可以用于执行不直接类似于光线追踪的计算。例如,可以使用光线追踪核245加速网格投影、网格细化和体积采样计算。还可以执行通用坐标空间计算,例如最近邻计算。例如,可以通过在该点周围的坐标空间中定义边界框来发现给定点附近的点集。然后可以使用光线追踪核245内的BVH和光线探测逻辑来确定边界框内的点交叉集。交叉构成原点和该原点的最近邻点。使用光线追踪核245执行的计算可以与在图形核243和张量核244上执行的计算并行地执行。着色器编译器可以配置为将计算着色器或其他通用图形处理程序编译为可以跨图形核243、张量核244和光线追踪核245并行化的低级原语。
图2D是根据本文描述的实施例的可以被配置为图形处理器和/或计算加速器的通用图形处理单元(GPGPU)270的框图。GPGPU 270可以经由一个或多个系统和/或存储器总线与主机处理器(例如,一个或多个CPU 246)和存储器271、272互连。在一个实施例中,存储器271是可以与一个或多个CPU 246共享的系统存储器,而存储器272是专用于GPGPU 270的设备存储器。在一个实施例中,GPGPU 270内的组件和存储器272可被映射到一个或多个CPU246可访问的存储器地址中。可经由存储器控制器268促进对存储器271和272的访问。在一个实施例中,存储器控制器268包括内部直接存储器访问(DMA)控制器269或可包含执行将以另外的方式由DMA控制器执行的操作的逻辑。
GPGPU 270包括多个高速缓存存储器,包括L2高速缓存253、L1高速缓存254、指令高速缓存255和共享存储器256,它们的至少一部分也可以被划分为高速缓存存储器。GPGPU270还包括多个计算单元260A-260N。每个计算单元260A-260N包括一组矢量寄存器261、标量寄存器262、矢量逻辑单元263和标量逻辑单元264。计算单元260A-260N还可以包括本地共享存储器265和程序计数器266。计算单元260A-260N可以与恒定高速缓存267耦合,其可以用于存储恒定数据,该恒定数据是在GPGPU 270上执行的内核或着色器程序的运行期间不会改变的数据。在一个实施例中,恒定高速缓存267是标量数据高速缓存,并且可以将高速缓存的数据直接提取到标量寄存器262中。
在操作期间,一个或多个CPU 246可以将命令写入已映射到可访问地址空间的GPGPU 270中的寄存器或存储器中。命令处理器257可以从寄存器或存储器读取命令,并确定将如何在GPGPU 270内处理那些命令。然后可以使用线程分派器258将线程分派给计算单元260A-260N以执行那些命令。每个计算单元260A-260N可以独立于其他计算单元执行线程。另外,每个计算单元260A-260N可以被独立地配置用于条件计算,并且可以将计算结果有条件地输出到存储器。当提交的命令完成时,命令处理器257可以中断一个或多个CPU246。
图3A-3C示出了由本文描述的实施例提供的附加图形处理器和计算加速器架构的框图。具有与本文中任何其他附图的元件相同的附图标记(或名称)的图3A至图3C的元件可以以类似于本文中其他地方所描述的任何方式来操作或起作用,但不限于此。
图3A是图形处理器300的框图,该图形处理器300可以是分立的图形处理单元,或者可以是与多个处理核或例如但不限于存储器设备或网络接口的其他半导体器件集成在一起的图形处理器。在一些实施例中,图形处理器经由存储器映射的I/O接口与图形处理器上的寄存器以及放置在处理器存储器中的命令进行通信。在一些实施例中,图形处理器300包括用于访问存储器的存储器接口314。存储器接口314可以是本地存储器、一个或多个内部高速缓存、一个或多个共享的外部高速缓存和/或系统存储器的接口。
在一些实施例中,图形处理器300还包括显示控制器302,以将显示输出数据驱动到显示设备318。显示控制器302包括用于一个或多个覆盖平面的硬件,用于显示和合成多层视频或用户界面元素。显示设备318可以是内部或外部显示设备。在一个实施例中,显示设备318是头戴式显示设备,例如虚拟现实(VR)显示设备或增强现实(AR)显示设备。在一些实施例中,图形处理器300包括视频编解码器引擎306,以将媒体编码、解码或转码成一种或多种媒体编码格式,从一种或多种媒体编码格式进行编码、解码或转码,或者在一种或多种媒体编码格式之间进行编码、解码或转码,包括但不限于运动图像专家组(MPEG)格式,例如MPEG-2,高级视频编码(AVC)格式,例如H.264/MPEG-4AVC,H.265/HEVC,开放媒体联盟(AOMedia)VP8,VP9,以及电影电视工程师协会(SMPTE)421M/VC-1,以及诸如JPEG以及Motion JPEG(MJPEG)格式等联合图像专家组(JPEG)格式。
在一些实施例中,图形处理器300包括块图像传送(BLIT)引擎304,以执行包括例如比特边界块传送的二维(2D)光栅化器操作。然而,在一个实施例中,使用图形处理引擎(GPE)310的一个或多个组件来执行2D图形操作。在一些实施例中,GPE 310是用于执行图形操作的计算引擎,包括三维(3D)图形操作和媒体操作。
在一些实施例中,GPE 310包括用于执行3D操作的3D流水线312,例如使用作用于3D图元形状(例如,矩形、三角形等)的处理功能来渲染三维图像和场景。3D流水线312包括可编程和固定功能元件,其在元件内执行各种任务和/或产生到3D/媒体子系统315的执行线程。尽管3D流水线312可用于执行媒体操作,但是GPE 310的实施例还包括媒体流水线316,其专门用于执行媒体操作,例如视频后处理和图像增强。
在一些实施例中,媒体流水线316包括固定功能或可编程逻辑单元,以执行一个或多个专门的媒体操作,例如代替或代表视频编解码器引擎306的视频解码加速、视频解交织和视频编码加速。在一些实施例中,媒体流水线316还包括线程产生单元,以产生线程以在3D/媒体子系统315上执行。产生的线程对3D/媒体子系统315中包括的一个或多个图形执行单元执行媒体操作的计算。
在一些实施例中,3D/媒体子系统315包括用于执行由3D流水线312和媒体流水线316产生的线程的逻辑。在一个实施例中,流水线将线程执行请求发送到3D/媒体子系统315,其包括用于仲裁各种请求并将其分派给可用的线程执行资源的线程分派逻辑。执行资源包括一系列图形执行单元,用于处理3D和媒体线程。在一些实施例中,3D/媒体子系统315包括一个或多个用于线程指令和数据的内部高速缓存。在一些实施例中,子系统还包括共享存储器,包括寄存器和可寻址存储器,用于在线程之间共享数据并存储输出数据。
图3B示出了根据本文所述实施例的具有平铺架构的图形处理器320。在一个实施例中,图形处理器320包括图形处理引擎集群322,其在图形引擎瓦片310A-310D内具有图3A的图形处理引擎310的多个实例。每个图形引擎瓦片310A-310D可以经由一组瓦片互连323A-323F互连。每个图形引擎瓦片310A-310D还可以经由存储器互连325A-325D连接到存储器模块或存储器设备326A-326D。存储器设备326A-326D可以使用任何图形存储器技术。例如,存储器设备326A-326D可以是图形双倍数据速率(GDDR)存储器。在一个实施例中,存储器设备326A-326D是高带宽存储器(HBM)模块,其可以与它们各自的图形引擎瓦片310A-310D一起在管芯上。在一个实施例中,存储器设备326A-326D是可以被堆叠在它们各自的图形引擎瓦片310A-310D之上的堆叠的存储器设备。在一个实施例中,每个图形引擎瓦片310A-310D和相关联的存储器326A-326D驻留在分开的小芯片上,小芯片结合到基础管芯或基础基板,如在图11B-11D中进一步详细描述的。
图形处理器320可以配置有非均匀存储器访问(NUMA)系统,其中存储器设备326A-326D与相关联的图形引擎瓦片310A-310D耦合。一个给定的存储器设备可以由图形引擎瓦片而不是它直接连接的瓦片来访问。然而,当访问本地瓦片时,对存储器设备326A-326D的访问延迟可能是最低的。在一个实施例中,启用缓存一致NUMA(ccNUMA)系统,该系统使用瓦片互连323A-323F来实现图形引擎瓦片310A-310D内的高速缓存控制器之间的通信,以在多于一个高速缓存存储相同的存储器位置时保持一致的存储器映像。
图形处理引擎集群322可以与片上或封装上结构互连324连接。在一个实施例中,结构互连324包括网络处理器、片上网络(NoC)或另一交换处理器以启用结构互连324用作在图形处理器320的组件之间交换数据分组的分组交换结构互连。结构互连324可以实现图形引擎瓦片310A-310D和诸如视频编解码器引擎306之类的组件和一个或多个复制引擎304之间的通信。复制引擎304可用于将数据移出、移入存储器设备326A-326D和图形处理器320外部的存储器(例如,系统存储器)以及在它们之间移动。结构互连324还可以与瓦片互连323A-323F中的一个或多个耦合,以促进或增强图形引擎瓦片310A-310D之间的互连。结构互连324也可配置为互连图形处理器320的多个实例(例如,经由主机接口328),从而实现多个GPU的图形引擎瓦片310A-310D之间的瓦片到瓦片通信。在一个实施例中,多个GPU的图形引擎瓦片310A-310D可以作为单个逻辑设备呈现给主机系统。
图形处理器320可以可选地包括显示控制器302,以实现与显示设备318的连接。图形处理器也可以被配置为图形或计算加速器。在加速器配置中,可以省略显示控制器302和显示设备318。
图形处理器320可以经由主机接口328连接到主机系统。主机接口328可以使能图形处理器320、系统存储器和/或其他系统组件之间的通信。主机接口328可以是例如PCIexpress总线或另一类型的主机系统接口。例如,主机接口328可以是NVLink或NVSwitch接口。主机接口328和结构互连324可以协作以使图形处理器320的多个实例能够充当单个逻辑设备。主机接口328和结构互连324之间的协作还可以使单独的图形引擎瓦片310A-310D能够作为不同的逻辑图形设备呈现给主机系统。
图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互连。可以经由结构互连324促进跨瓦片通信。结构互连324(例如,经由主机接口328)还可以促进计算加速器330的多个实例的计算引擎瓦片340A-340D之间的通信。在一个实施例中,计算加速器330包括大的L3高速缓存336,其可以配置为设备宽度的高速缓存。计算加速器330还可以经由主机接口328以与图3B的图形处理器320类似的方式连接到主机处理器和存储器。
计算加速器330还可以包括集成网络接口342。在一个实施例中,网络接口342包括网络处理器和控制器逻辑,其使得计算引擎集群332能够通过物理层互连344进行通信而不需要数据遍历主机系统的存储器。在一个实施例中,计算引擎瓦片340A-340D之一被网络处理器逻辑替换,并且要经由物理层互连344传输或接收的数据可以直接传输到存储器326A-326D或从存储器326A-326D传输。计算加速器330的多个实例可以经由物理层互连344加入到单个逻辑设备中。可替代地,各种计算引擎瓦片340A-340D可以呈现为不同的网络可访问计算加速器设备。
图形处理引擎
图4是根据一些实施例的图形处理器的图形处理引擎410的框图。在一个实施例中,图形处理引擎(GPE)410是图3A所示的GPE 310的版本,并且还可以表示图3B的图形引擎瓦片310A-310D。具有与本文中任何其他附图的元件相同的附图标记(或名称)的图4中的元件可以以与本文中其他地方所描述的方式类似的任何方式操作或起作用,但不限于此。例如,示出了图3A的3D流水线312和媒体流水线316。媒体流水线316在GPE 410的一些实施例中是可选的,并且可以不明确地包括在GPE 410内。例如并且在至少一个实施例中,单独的媒体和/或图像处理器耦合到GPE 410。
在一些实施例中,GPE 410与命令流送器403耦合或包括命令流送器403,该命令流送器403向3D流水线312和/或媒体流水线316提供命令流。替代地或附加地,命令流送器403可以直接耦合到统一返回缓冲器418。统一返回缓冲器418可以通信地耦合到图形核阵列414。在一些实施例中,命令流传输器403与存储器耦合,该存储器可以是系统内存,或内部高速缓存存储器和共享高速缓存存储器中的一个或多个。在一些实施例中,命令流送器403从存储器接收命令,并将命令发送到3D流水线312和/或媒体流水线316。命令是从环形缓冲器获取的指令,该环形缓冲器存储用于3D流水线312和媒体流水线316的命令。在一个实施例中,环形缓冲器可以另外包括批处理命令缓冲器,其存储多个命令的批次。用于3D流水线312的命令还可以包括对存储在存储器中的数据的引用,例如但不限于用于3D流水线312的顶点和几何形状数据和/或用于媒体流水线316的图像数据和存储器对象。3D流水线312和媒体流水线316通过经由相应流水线内的逻辑执行操作或通过将一个或多个执行线程分派到图形核阵列414来处理命令和数据。在一个实施例中,图形核阵列414包括一个或多个图形核块(例如,图形核415A,图形核415B),每个块包括一个或多个图形核。每个图形核包括一组图形执行资源,这些资源包括用于执行图形和计算操作的通用和特定于图形的执行逻辑,以及固定功能纹理处理和/或机器学习以及人工智能加速逻辑。
在各个实施例中,3D流水线312可以包括固定功能和可编程逻辑,以通过处理指令并向图形核阵列414分派执行线程来处理诸如顶点着色器、几何形状着色器、像素着色器、片段着色器、计算着色器或其他着色器的一个或多个着色器程序和/或GPGPU程序。图形核阵列414提供执行资源的统一块,以用于处理这些着色器程序。图形核阵列414的图形核415A-414B内的多用途执行逻辑(例如,执行单元)包括对各种3D API着色器语言的支持,并且可以执行与多个着色器相关联的多个同时执行线程。
在一些实施例中,图形核阵列414包括执行媒体功能的执行逻辑,例如视频和/或图像处理。在一个实施例中,除了图形处理操作之外,执行单元还包括可编程以执行并行通用计算操作的通用逻辑。通用逻辑可以在图1的处理器核107或如图2A所示的核202A-202N内并行或结合通用逻辑执行处理操作。
由在图形核阵列414上执行的线程生成的输出数据可以将数据输出到统一返回缓冲器(URB)418中的存储器。URB 418可以存储多个线程的数据。在一些实施例中,URB 418可以用于在图形核阵列414上执行的不同线程之间发送数据。在一些实施例中,URB 418可以另外用于图形核阵列上的线程与共享功能逻辑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内的一些或全部逻辑。在一个实施例中,共享功能逻辑420内的所有逻辑元素可以在图形核阵列414的共享功能逻辑416内被复制。在一个实施例中,共享功能逻辑420被排除在外,从而有利于图形核阵列414内的共享功能逻辑416。
执行单元
图5A-5B图示了根据本文描述的实施例的线程执行逻辑500,其包括在图形处理器核中采用的处理元件的阵列。具有与本文中任何其他附图中的元素相同的附图标记(或名称)的图5A-5B中的元素可以以与本文中其他地方所描述的方式相似的任何方式来操作或起作用,但不限于此。图5A-5B示出了线程执行逻辑500的概观,其可以代表图2B的每个子核221A-221F示出的硬件逻辑。图5A表示通用图形处理器内的执行单元,而图5B表示可以在计算加速器内使用的执行单元。
如图5A所示,在一些实施例中,线程执行逻辑500包括着色器处理器502、线程分派器504、指令高速缓存506、包括多个图形执行单元508A-508N的可伸缩执行单元阵列、采样器510、共享本地存储器511、数据高速缓存512和数据端口514。在一个实施例中,可伸缩执行单元阵列可以通过基于工作负载的计算需求启用或禁用一个或多个执行单元(例如,图形执行单元508A,508B,508C,508D,至508N-1和508N中的任何一个)来动态扩展。在一个实施例中,所包括的组件经由互连结构互连,该互连结构链接到每个组件。在一些实施例中,线程执行逻辑500包括通过指令高速缓存506、数据端口514、采样器510和图形执行单元508A-508N中的一个或多个与存储器(例如系统存储器或高速缓存存储器)的一个或多个连接。在一些实施例中,每个执行单元(例如508A)是独立的可编程通用计算单元,其能够执行多个同时的硬件线程,同时针对每个线程并行处理多个数据元素。在各个实施例中,图形执行单元508A-508N的阵列可缩放以包括任意数量的单独执行单元。
在一些实施例中,图形执行单元508A-508N主要用于执行着色器程序。着色器处理器502可以处理各种着色器程序,并经由线程分派器504来分派与着色器程序相关联的执行线程。在一个实施例中,线程分派器包括用于仲裁来自图形和媒体流水线的线程发起请求并实例化图形执行单元508A-508N中的一个或多个执行单元上的所请求的线程的逻辑。例如,几何形状流水线可以将顶点、曲面细分或几何形状着色器分派到线程执行逻辑以进行处理。在一些实施例中,线程分派器504还可以处理来自正在执行的着色器程序的运行时线程产生请求。
在一些实施例中,图形执行单元508A-508N支持指令集,该指令集包括对许多标准3D图形着色器指令的本机支持,使得来自图形库的着色器程序(例如Direct 3D和OpenGL)以最小的翻译执行。执行单元支持顶点和几何形状处理(例如,顶点程序、几何形状程序、顶点着色器)、像素处理(例如,像素着色器、片段着色器)和通用处理(例如,计算和媒体着色器)。每个执行单元508A-508N都能够进行多发出单指令多数据(SIMD)执行,并且面对更高等待时间的存储器访问,多线程操作能够实现高效的执行环境。每个执行单元中的每个硬件线程都有一个专用的高带宽寄存器文件和相关联的独立线程状态。执行是每个时钟多次发出到流水线,该流水线能够进行整数、单精度和双精度浮点运算、SIMD分支功能、逻辑运算、先验运算和其他杂项运算。在等待来自存储器或共享功能之一的数据时,图形执行单元508A-508N内的依赖性逻辑使等待线程休眠直到返回了所请求的数据。在等待线程处于休眠状态时,硬件资源可能会专用于处理其他线程。例如,在与顶点着色器操作相关联的延迟期间,执行单元可以对像素着色器、片段着色器或另一类型的着色器程序(包括不同的顶点着色器)执行操作。各种实施例可以通过使用单指令多线程(SIMT)来代替SIMD的使用或作为SIMD的使用的附加而应用于使用执行。对SIMD核或操作的引用也可以应用于SIMT或与SIMT一起应用于SIMD。
图形执行单元508A-508N中的每个执行单元对数据元素的阵列进行操作。数据元素的数量是“执行大小”或指令的通道数。执行通道是指令中数据元素访问、屏蔽和流控制的执行的逻辑单元。通道的数量可以独立于特定图形处理器的物理算术逻辑单元(ALU)、浮点单元(FPU)或其他逻辑单元(例如,张量核、光线追踪核等)的数量。在一些实施例中,图形执行单元508A-508N支持整数和浮点数据类型。
执行单元指令集包括SIMD指令。可以将各种数据元素作为打包数据类型存储在寄存器中,执行单元将基于元素的数据大小来处理各种元素。例如,当在256位宽的矢量上操作时,该矢量的256比特存储在寄存器中,执行单元在该矢量上作为四个单独的54比特打包数据元素(四字(QW)大小数据元素)进行操作,八个单独的32比特打包数据元素(双字(DW)大小数据元素),十六个单独的16比特打包数据元素(字(W)大小数据元素)或32个单独的8比特数据元素(字节(B)大小数据元素)。但是,可以使用不同的矢量宽度和寄存器大小。
在一个实施例中,可以将一个或多个执行单元组合成具有对融合的EU通用的线程控制逻辑(507A-507N)的融合的执行单元509A-509N。可以将多个EU合并为一个EU组。可以将融合的EU组中的每个EU配置为执行单独的SIMD硬件线程。融合的EU组中的EU的数量可以根据实施例而变化。此外,每个EU可以执行各种SIMD宽度,包括但不限于SIMD8、SIMD16和SIMD32。每个融合的图形执行单元509A-509N包括至少两个执行单元。例如,融合执行单元509A包括第一EU 508A、第二EU 508B以及第一EU 508A和第二EU 508B共有的线程控制逻辑507A。线程控制逻辑507A控制在融合图形执行单元509A上执行的线程,从而允许融合执行单元509A-509N内的每个EU使用公共指令指针寄存器来执行。
线程执行逻辑500中包括一个或多个内部指令高速缓存(例如506),以高速缓存用于执行单元的线程指令。在一些实施例中,包括一个或多个数据高速缓存(例如512)以在线程执行期间高速缓存线程数据。在执行逻辑500上执行的线程也可以将显式管理的数据存储在共享本地存储器511中。在一些实施例中,包括采样器510以提供用于3D操作的纹理采样和用于媒体操作的媒体采样。在一些实施例中,采样器510包括专门的纹理或媒体采样功能,以在将采样数据提供给执行单元之前在采样过程期间处理纹理或媒体数据。
在执行期间,图形和媒体流水线经由线程产生和分派逻辑将线程发起请求发送到线程执行逻辑500。一旦一组几何形状对象已被处理并光栅化成像素数据,则调用着色器处理器502内的像素处理器逻辑(例如,像素着色器逻辑、片段着色器逻辑等)以进一步计算输出信息并使结果被写入到输出表面(例如,颜色缓冲器、深度缓冲器、模板缓冲器等)。在一些实施例中,像素着色器或片段着色器计算将在整个光栅化对象上插值的各种顶点属性的值。在一些实施例中,着色器处理器502内的像素处理器逻辑然后执行应用程序接口(API)提供的像素或片段着色器程序。为了执行着色器程序,着色器处理器502经由线程分派器504将线程分派给执行单元(例如508A)。在一些实施例中,着色器处理器502使用采样器510中的纹理采样逻辑来访问存储在存储器中的纹理映射中的纹理数据。对纹理数据和输入几何形状数据的算术运算为每个几何形状片段计算像素颜色数据,或丢弃一个或多个像素以进行进一步处理。
在一些实施例中,数据端口514提供用于线程执行逻辑500的存储器访问机制,以将处理后的数据输出到存储器以在图形处理器输出流水线上进行进一步处理。在一些实施例中,数据端口514包括或耦合到一个或多个高速缓存存储器(例如,数据高速缓存512),以高速缓存数据以用于经由数据端口的存储器访问。
在一个实施例中,执行逻辑500还可以包括可以提供光线追踪加速功能的光线追踪器505。光线追踪器505可以支持包括用于光线生成的指令/功能的光线追踪指令集。光线追踪指令集可以与图2C中的光线追踪核245所支持的光线追踪指令集相似或不同。
图5B示出了根据实施例的执行单元508的示例性内部细节。图形执行单元508可以包括指令获取单元537、通用寄存器文件阵列(GRF)524、架构寄存器文件阵列(ARF)526、线程仲裁器522、发送单元530、分支单元532,一组SIMD浮点单元(FPU)534,以及在一个实施例中,包括一组专用整数SIMD ALU535。GRF 524和ARF 526包括与可能在图形执行单元508中处于活动状态的每个同时硬件线程相关联的一组通用寄存器文件和架构寄存器文件。在一个实施例中,在ARF 526中维护每个线程的架构状态,而在GRF 524中存储在线程执行过程期间使用的数据。每个线程的执行状态,包括每个线程的指令指针,可以保存在ARF 526中的线程专用寄存器中。
在一个实施例中,图形执行单元508具有作为同时多线程(SMT)和细粒度交织多线程(IMT)的组合的架构。该架构具有模块化配置,可以在设计时根据同时线程的目标数量和每个执行单元的寄存器数量对其进行微调,其中执行单元资源在用于执行多个同时线程的逻辑之间分配。图形执行单元508可以执行的逻辑线程的数量不限于硬件线程的数量,并且可以将多个逻辑线程分配给每个硬件线程。
在一个实施例中,图形执行单元508可以共同发布多个指令,每个指令可以是不同的指令。图形执行单元线程508的线程仲裁器522可以将指令分派到发送单元530、分支单元532或SIMD FPU534之一以执行。每个执行线程可以访问GRF 524中的128个通用寄存器,其中每个寄存器可以存储32个字节,可以作为32比特数据元素的SIMD 8元素矢量进行访问。在一个实施例中,每个执行单元线程可以访问GRF 524中的4KB,尽管实施例不限于此,并且在其他实施例中可以提供更多或更少的寄存器资源。在一个实施例中,图形执行单元508被划分为七个硬件线程,其可以独立地执行计算操作,尽管每个执行单元的线程数量也可以根据实施例而变化。例如,在一个实施例中,最多支持16个硬件线程。在七个线程可以访问4KB的实施例中,GRF 524可以存储总共28KB。在16个线程可以访问4KB的情况下,GRF 524可以存储总共64KB。灵活的寻址模式可以允许将寄存器一起寻址,以有效地构建更宽的寄存器或表示跨步矩形块数据结构。
在一个实施例中,经由由消息传递发送单元530执行的“发送”指令来分派存储器操作、采样器操作以及其他更长等待时间的系统通信。在一个实施例中,将分支指令分派到专用分支单元532以促进SIMD发散和最终收敛。
在一个实施例中,图形执行单元508包括一个或多个SIMD浮点单元(FPU)534以执行浮点操作。在一个实施例中,FPU 534也支持整数计算。在一个实施例中,一个或多个FPU534可以SIMD执行多达M个32比特浮点(或整数)运算,或者SIMD执行多达2M个16比特整数或16比特浮点运算。在一个实施例中,一个或多个FPU中的至少一个提供扩展的数学能力以支持高吞吐量的先验数学函数和双精度54比特浮点。在一些实施例中,还存在一组8比特整数SIMD ALU 535,并且可以被专门优化以执行与机器学习计算相关联的操作。
在一个实施例中,可以在图形子核分组(例如,子切片)中实例化图形执行单元508的多个实例的阵列。为了实现可伸缩性,产品架构师可以为每个子核分组选择确切的执行单元数。在一个实施例中,执行单元508可跨多个执行通道执行指令。在另一个实施例中,在图形执行单元508上执行的每个线程在不同的通道上执行。
图6示出了根据实施例的附加执行单元600。执行单元600可以是用于例如图3C中的计算引擎瓦片340A-340D中的计算优化的执行单元,但不限于此。如图3B所示,执行单元600的变体也可以用在图形引擎瓦片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、脉动阵列612和数学单元613。ALU 611包括算术逻辑单元阵列。ALU 611可配置为跨多个处理通道和数据通道以及针对多个硬件和/或软件线程执行64比特、32比特和16比特整数和浮点运算。ALU 611可以同时执行整数和浮点运算(例如,在同一时钟周期内)。
脉动阵列612包括可用于以脉动方式执行矢量或其他数据并行操作的数据处理单元的W宽和D深的网络。在一个实施例中,脉动阵列612可以被配置为执行各种矩阵运算,包括作为点积、外积和通用矩阵-矩阵乘法(GEMM)运算。在一个实施例中,脉动阵列612支持16比特浮点运算,以及8比特、4比特、2比特和二进制整数运算。除了矩阵乘法运算之外,脉动阵列612还可以被配置为加速特定的机器学习运算。在这样的实施例中,脉动阵列612可以被配置为支持bfloat(大脑浮点)16比特浮点格式或张量浮点32比特浮点格式(TF32),它们相对于电气和电子工程师协会(IEEE)754格式具有不同数量的尾数和指数比特。
脉动阵列612包括加速稀疏矩阵运算的硬件。在一个实施例中,通过跳过具有零值操作数的乘法运算,可以在处理元件级绕过输入数据的稀疏区域的乘法运算。在一个实施例中,可以检测输入矩阵内的稀疏性,并且可以在提交给脉动阵列612的处理元件之前绕过具有已知输出值的操作。另外,可以绕过将零值操作数加载到处理元件中,并且处理元件可以被配置为对非零值输入元件执行乘法运算。可以利用相关联的解压缩或解码元数据以压缩(例如,密集)格式生成输出。输出可以以压缩格式高速缓存。当写入本地存储器或主机系统存储器时,输出可以保持压缩格式。输出也可以在写入本地存储器或主机系统存储器之前解压缩。
在一个实施例中,脉动阵列612包括硬件以实现对具有压缩表示的稀疏数据的操作。稀疏矩阵的压缩表示存储非零值和标识矩阵内非零值位置的元数据。示例性压缩表示包括但不限于压缩张量表示,例如压缩稀疏行(CSR)、压缩稀疏列(CSC)、压缩稀疏纤维(CSF)表示。对压缩表示的支持使得可以对压缩张量格式的输入执行操作,而无需对压缩表示进行解压缩或解码。在这样的实施例中,可以仅对非零输入值执行操作,并且可以将得到的非零输出值映射到输出矩阵中。在一些实施例中,还为在硬件内或跨系统总线传输数据时使用的机器特定无损数据压缩格式提供硬件支持。这样的数据可以以压缩格式保留用于稀疏输入数据,并且脉动阵列612可以使用压缩数据的压缩元数据来使得能够仅对非零值执行操作,或者使得零数据输入块能够被绕过乘法运算。
在一个实施例中,可以包括数学单元613,以比ALU 611有效和低功率的方式执行数学运算的特定子集。数学单元613可以包括可以在其他实施例提供的图形处理引擎的共享功能逻辑中找到的数学逻辑的变体(例如,图4的共享功能逻辑420的数学逻辑422)。在一个实施例中,数学单元613可以被配置为执行32比特和64比特浮点运算。
线程控制单元601包括用于控制执行单元内的线程的执行的逻辑。线程控制单元601可以包括线程仲裁逻辑,以开始、停止和抢占执行单元600内的线程的执行。线程状态单元602可以用于存储分配用于在执行单元600上执行的线程的线程状态。当线程被阻塞或空闲时,存储执行单元600内的线程状态使得能够快速抢占那些线程。指令获取/预取单元603可以从更高级别的执行逻辑的指令高速缓存(例如,如图5A中的指令高速缓存506)获取指令。指令获取/预取单元603还可以基于对当前执行的线程的分析,发出对要加载到指令高速缓存中的指令的预取请求。指令解码单元604可以用于解码要由计算单元执行的指令。在一个实施例中,指令解码单元604可以用作辅助解码器,以将复杂的指令解码为组成的微操作。
执行单元600还包括可由执行单元600上执行的硬件线程使用的寄存器文件606。寄存器文件606中的寄存器可以在用于执行执行单元600的计算单元610中的多个同时线程的逻辑上划分。图形执行单元600可以执行的逻辑线程的数量不限于硬件线程的数量,并且可以将多个逻辑线程分配给每个硬件线程。寄存器文件606的大小可以基于支持的硬件线程的数量而在各实施例中变化。在一个实施例中,寄存器重命名可用于动态地将寄存器分配给硬件线程。
图7是说明根据一些实施例的图形处理器指令格式700的框图。在一个或多个实施例中,图形处理器执行单元支持具有多种格式的指令的指令集。实线框示出了通常包含在执行单元指令中的组件,而虚线包括可选的组件或仅包括在指令的子集中的组件。在一些实施例中,所描述和示出的图形处理器指令格式700是宏指令,因为它们是提供给执行单元的指令,与一旦处理指令后由指令解码产生的微操作相反。因此,单个指令可能导致硬件执行多个微操作。
在一些实施例中,图形处理器执行单元固有地支持128比特指令格式710的指令。基于所选指令、指令选项和操作数的数量,某些指令可以使用64比特压缩指令格式730。本机128比特指令格式710提供对所有指令选项的访问,而某些选项和操作则受64比特格式730的限制。64比特格式730中可用的本机指令因实施例而异。在一些实施例中,使用索引字段713中的一组索引值来部分压缩指令。执行单元硬件基于索引值来引用一组压缩表,并使用压缩表输出来重构128比特指令格式710中的本机指令。可以使用其他尺寸和格式的指令。
对于每种格式,指令操作码712定义执行单元将要执行的操作。执行单元跨每个操作数的多个数据元素并行执行每个指令。例如,响应于添加指令,执行单元跨表示纹理元素或图片元素的每个颜色通道执行同时添加操作。默认情况下,执行单元跨操作数的所有数据通道执行每个指令。在一些实施例中,指令控制字段714使得能够控制某些执行选项,诸如通道选择(例如,预测)和数据通道顺序(例如,混乱(swizzle))。对于128比特指令格式710的指令,执行大小字段716限制将并行执行的数据通道的数量。在一些实施例中,执行大小字段716不可用于64比特紧凑指令格式730。
一些执行单元指令具有多达三个操作数,包括两个源操作数src0 720,src1 722和一个目的地718。在一些实施例中,执行单元支持双目的地指令,其中暗指目的地之一。数据操纵指令可以具有第三源操作数(例如,SRC2 724),其中指令操作码712确定源操作数的数量。指令的最后一个源操作数可以是随指令传递的立即数(例如,硬编码)值。
在一些实施例中,128比特指令格式710包括访问/地址模式字段726,其指定例如使用直接寄存器寻址模式还是间接寄存器寻址模式。当使用直接寄存器寻址模式时,一个或多个操作数的寄存器地址直接由指令中的比特提供。
在一些实施例中,128比特指令格式710包括访问/地址模式字段726,其指定指令的地址模式和/或访问模式。在一个实施例中,访问模式用于为指令定义数据访问对齐。一些实施例支持访问模式,包括16字节对齐的访问模式和1字节对齐的访问模式,其中访问模式的字节对齐确定指令操作数的访问对齐。例如,当处于第一模式时,该指令可将字节对齐的寻址用于源和目标操作数,而当处于第二模式时,该指令可将16字节对齐的寻址用于所有源和目标操作数。
在一个实施例中,访问/地址模式字段726的地址模式部分确定指令是使用直接寻址还是间接寻址。使用直接寄存器寻址模式时,指令中的比特直接提供一个或多个操作数的寄存器地址。当使用间接寄存器寻址模式时,可基于指令中的地址寄存器值和地址立即数字段来计算一个或多个操作数的寄存器地址。
在一些实施例中,基于操作码712比特字段对指令进行分组,以简化操作码解码740。对于8比特操作码,比特4、5和6允许执行单元确定操作码的类型。所示的精确操作码分组仅是示例。在一些实施例中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如,移动(mov)、比较(cmp))。在一些实施例中,移动和逻辑组742共享五个最高有效位(MSB),其中,移动(mov)指令的形式为0000xxxxb,而逻辑指令的形式为0001xxxxb。流控制指令组744(例如,调用、跳转(jmp))包括0010xxxxb(例如,0x20)形式的指令。杂项指令组746包括指令的混合,包括以0011xxxxb(例如0x30)形式的同步指令(例如,等待、发送)。并行数学指令组748包括0100xxxxb(例如0x40)形式的逐组件的算术指令(例如,加、乘(mul))。并行数学指令组748跨数据通道并行执行算术运算。矢量数学组750包括形式为0101xxxxb(例如0x50)的算术指令(例如dp4)。矢量数学组对矢量操作数执行算术运算,例如点积计算。在一个实施例中,所示的操作码解码器740可以用于确定将使用执行单元的哪一部分来执行解码的指令。例如,一些指令可以被指定为将由脉动阵列执行的脉动指令。诸如光线追踪指令(未示出)的其他指令可以被路由到执行逻辑的切片或分区内的光线追踪核或光线追踪逻辑。
图形流水线
图8是图形处理器800的另一实施例的框图。具有与本文中任何其他图的元件相同的附图标记(或名称)的图8的元件可以以类似于本文中其他地方所描述的任何方式来操作或起作用,但不限于此。
在一些实施例中,图形处理器800包括几何形状流水线820、媒体流水线830、显示引擎840、线程执行逻辑850和渲染输出流水线870。在一些实施例中,图形处理器800是位于多核处理系统内的图形处理器,多核处理系统包括一个或多个通用处理核。通过对一个或多个控制寄存器(未示出)的寄存器写操作或通过经由环形互连802发给图形处理器800的命令来控制图形处理器。在一些实施例中,环形互连802将图形处理器800耦合到其他处理组件,例如其他图形处理器或通用处理器。来自环形互连802的命令由命令流送器803解释,该命令流送器803将指令提供给几何形状流水线820或媒体流水线830的各个组件。
在一些实施例中,命令流送器803指导顶点获取器805的操作,该顶点获取器805从存储器读取顶点数据并执行由命令流送器803提供的顶点处理命令。在一些实施例中,顶点获取器805将顶点数据提供给顶点着色器807,它对每个顶点执行坐标空间变换和照明操作。在一些实施例中,顶点获取器805和顶点着色器807通过经由线程分派器831将执行线程分派给执行单元852A-852B来执行顶点处理指令。
在一些实施例中,执行单元852A-852B是矢量处理器的阵列,其具有用于执行图形和媒体操作的指令集。在一些实施例中,执行单元852A-852B具有专用于每个阵列或在阵列之间共享的附加的L1高速缓存851。可以将高速缓存配置为数据高速缓存、指令高速缓存或单个高速缓存,其已分区为包含不同分区中的数据和指令。
在一些实施例中,几何形状流水线820包括曲面细分组件,以执行3D对象的硬件加速的曲面细分。在一些实施例中,可编程的外壳着色器811配置曲面细分操作。可编程域着色器817提供曲面细分输出的后端评估。曲面细分器813在外壳着色器811的方向上操作,并包含特殊用途的逻辑,用于基于作为输入提供给几何形状流水线820的粗略几何形状模型生成一组详细的几何形状对象。在一些实施例中,如果未使用曲面细分,曲面细分组件(例如,外壳着色器811、曲面细分器813和域着色器817)可以被绕过。曲面细分组件可以基于从顶点着色器807接收的数据进行操作。
在一些实施例中,可以经由分派给执行单元852A-852B的一个或多个线程来由几何形状着色器819处理完整的几何形状对象,或者可以直接进行到修剪器829。在一些实施例中,几何形状着色器在整个几何形状对象上进行操作,而不是图形流水线先前阶段中的顶点或顶点补丁。如果禁用了曲面细分,则几何形状着色器819从顶点着色器807接收输入。在一些实施例中,如果禁用了曲面细分单元,则几何形状着色器819可由几何形状着色器程序编程以执行几何形状曲面细分。
在光栅化之前,修剪器829处理顶点数据。修剪器829可以是具有修剪和几何形状着色器功能的固定功能修剪器或可编程修剪器。在一些实施例中,渲染输出流水线870中的光栅化器和深度测试组件873分派像素着色器,以将几何形状对象转换成每像素表示。在一些实施例中,像素着色器逻辑包括在线程执行逻辑850中。在一些实施例中,应用程序可以绕过光栅化器和深度测试组件873,并经由流输出单元823访问未光栅化的顶点数据。
图形处理器800具有允许数据和消息在处理器的主要组件之间传递的互连总线、互连结构或某些其他互连机制。在一些实施例中,执行单元852A-852B和相关联的逻辑单元(例如,L1高速缓存851、采样器854、纹理高速缓存858等)经由数据端口856互连以执行存储器访问并与处理器的渲染输出流水线组件通信。在一些实施例中,采样器854、高速缓存851、858和执行单元852A-852B均具有单独的存储器访问路径。在一个实施例中,纹理高速缓存858也可以被配置为采样器高速缓存。
在一些实施例中,渲染输出流水线870包含光栅化器和深度测试组件873,其将基于顶点的对象转换为相关联的基于像素的表示。在一些实施例中,光栅化器逻辑包括加窗器/掩蔽器单元以执行固定功能的三角形和线光栅化。在一些实施例中,相关联的渲染高速缓存878和深度高速缓存879也是可用的。像素运算组件877对数据执行基于像素的运算,尽管在某些情况下,与2D运算相关联的像素运算(例如,具有混合的比特块图像传输)由2D引擎841执行,或在显示时由使用覆盖显示平面的显示器控制器843替代。在一些实施例中,共享的L3高速缓存875可用于所有图形组件,从而允许在不使用主系统存储器的情况下共享数据。
在一些实施例中,媒体流水线830包括媒体引擎837和视频前端834。在一些实施例中,视频前端834从命令流送器803接收流水线命令。在一些实施例中,媒体流水线830包括一个单独的命令流送器。在一些实施例中,视频前端834在将命令发送给媒体引擎837之前处理媒体命令。在一些实施例中,媒体引擎837包括线程产生功能以产生线程以经由线程分派器831分配给线程执行逻辑850。
在一些实施例中,图形处理器800包括显示引擎840。在一些实施例中,显示引擎840在处理器800的外部并且经由环形互连802或某个其他互连总线或结构与图形处理器耦合。在一些实施例中,显示引擎840包括2D引擎841和显示控制器843。在一些实施例中,显示引擎840包含能够独立于3D流水线运行的专用逻辑。在一些实施例中,显示控制器843与显示设备(未示出)耦合,该显示设备可以是如膝上型计算机中的系统集成显示设备,或者是经由显示设备连接器附接的外部显示设备。
在一些实施例中,几何形状流水线820和媒体流水线830可配置为基于多个图形和媒体编程接口来执行操作,并且不特定于任何一个应用程序编程接口(API)。在一些实施例中,用于图形处理器的驱动器软件将特定于特定图形或媒体库的API调用转换为可由图形处理器处理的命令。在一些实施例中,提供对全部来自Khronos集团的开放图形库(OpenGL)、开放计算语言(OpenCL)和/或Vulkan图形和计算API的支持。在一些实施例中,也可以提供对来自微软公司的Direct3D库的支持。在一些实施例中,可以支持这些库的组合。还可以为开源计算机视觉库(OpenCV)提供支持。如果可以从将来的API的流水线到图形处理器的流水线进行映射,则还将支持具有兼容3D流水线的将来的API。
图形流水线编程
图9A是示出根据一些实施例的可用于对图形处理流水线进行编程的图形处理器命令格式900的框图。图9B是示出根据实施例的图形处理器命令序列910的框图。图9A中的实线框示出了通常包括在图形命令中的组件,而虚线包括可选的组件或仅包括在图形命令的子集中的组件。图9A的示例性图形处理器命令格式900包括用于标识客户端902的数据字段、命令操作代码(操作码)904和用于命令的数据字段906。在某些命令中还包括子操作码905和命令大小908。
在一些实施例中,客户端902指定处理命令数据的图形设备的客户端单元。在一些实施例中,图形处理器命令解析器检查每个命令的客户端字段,以调节该命令的进一步处理并将命令数据路由到适当的客户端单元。在一些实施例中,图形处理器客户端单元包括存储器接口单元、渲染单元、2D单元、3D单元和媒体单元。每个客户端单元都有处理命令的对应的处理流水线。一旦客户端单元接收到该命令,则客户端单元读取操作码904以及子操作码905(如果存在的话)以确定要执行的操作。客户端单元使用数据字段906中的信息来执行命令。对于某些命令,期望明确的命令大小908来指定命令的大小。在一些实施例中,命令解析器基于命令操作码自动确定至少一些命令的大小。在一些实施例中,命令是经由双字的倍数对齐的。可以使用其他命令格式。
图9B中的流程图示出了示例性图形处理器命令序列910。在一些实施例中,以图形处理器的实施例为特征的数据处理系统的软件或固件使用所示的命令序列的版本来建立、执行并终止一组图形操作。仅出于示例目的示出和描述了示例命令序列,因为实施例不限于这些特定命令或该命令序列。此外,命令可以作为命令序列中的一批命令发布,使得图形处理器将至少部分地并发地处理命令序列。
在一些实施例中,图形处理器命令序列910可以以流水线冲洗命令912开始,以使任何活动的图形流水线完成该流水线的当前挂起的命令。在一些实施例中,3D流水线922和媒体流水线924不同时操作。执行流水线冲洗以使活动图形流水线完成所有挂起的命令。响应于流水线冲洗,图形处理器的命令解析器将暂停命令处理,直到活动的绘图引擎完成挂起的操作并且相关的读取高速缓存无效为止。可选地,可以将渲染高速缓存中标记为“脏”的任何数据冲洗到存储器中。在一些实施例中,流水线冲洗命令912可用于流水线同步或在将图形处理器置于低功率状态之前使用。
在一些实施例中,当命令序列需要图形处理器在流水线之间显式切换时,使用流水线选择命令913。在一些实施例中,在发布流水线命令之前,在执行上下文内仅需要流水线选择命令913一次,除非上下文要为两个流水线发布命令。在一些实施例中,紧接在经由流水线选择命令913进行流水线切换之前需要流水线冲洗命令912。
在一些实施例中,流水线控制命令914配置用于操作的图形流水线,并用于对3D流水线922和媒体流水线924进行编程。在一些实施例中,流水线控制命令914为活动流水线配置流水线状态。在一个实施例中,流水线控制命令914用于流水线同步,并在处理一批命令之前从活动流水线内的一个或多个高速缓存存储器中清除数据。
在一些实施例中,与返回缓冲器状态916相关的命令用于为相应的流水线配置一组返回缓冲器以写入数据。一些流水线操作需要分配、选择或配置一个或多个返回缓冲器,在处理过程中操作会将中间数据写入该返回缓冲器中。在一些实施例中,图形处理器还使用一个或多个返回缓冲器来存储输出数据并执行跨线程通信。在一些实施例中,返回缓冲器状态916包括选择用于一组流水线操作的返回缓冲器的大小和数量。
命令序列中的其余命令基于用于操作的活动流水线而不同。基于流水线确定920,以3D流水线状态930开始对3D流水线922定制命令序列,或以媒体流水线状态940开始对媒体流水线924定制命令序列。
配置3D流水线状态930的命令包括用于3D图元命令处理之前要配置的顶点缓冲器状态、顶点元素状态、恒定颜色状态、深度缓冲器状态和其他状态变量的3D状态设置命令。这些命令的值至少部分地基于使用中的特定3D API确定。在一些实施例中,如果将不使用某些流水线元素,则3D流水线状态930命令也能够选择性地禁用或绕过那些元素。
在一些实施例中,3D图元932命令用于提交要由3D流水线处理的3D图元。经由3D图元932命令传递到图形处理器的命令和相关联的参数被转发到图形流水线中的顶点获取功能。顶点获取功能使用3D图元932命令数据来生成顶点数据结构。顶点数据结构存储在一个或多个返回缓冲器中。在一些实施例中,3D图元932命令用于经由顶点着色器对3D图元执行顶点操作。为了处理顶点着色器,3D流水线922将着色器执行线程分派给图形处理器执行单元。
在一些实施例中,经由执行934命令或事件来触发3D流水线922。在一些实施例中,寄存器写触发命令执行。在一些实施例中,经由命令序列中的“执行(go)”或“踢(kick)”命令来触发执行。在一个实施例中,使用流水线同步命令来触发命令执行以通过图形流水线冲洗命令序列。3D流水线将对3D图元执行几何形状处理。一旦操作完成,就对生成的几何形状对象进行栅格化,并且像素引擎为生成的像素着色。对于那些操作,还可以包括用于控制像素着色和像素后端操作的附加命令。
在一些实施例中,当执行媒体操作时,图形处理器命令序列910遵循媒体流水线924路径。通常,用于媒体流水线924的编程的特定用途和方式取决于要执行的媒体或计算操作。在媒体解码期间,可以将特定的媒体解码操作卸载到媒体流水线。在一些实施例中,还可以绕过媒体流水线,并且可以使用一个或多个通用处理核提供的资源来全部或部分地执行媒体解码。在一个实施例中,媒体流水线还包括用于通用图形处理器单元(GPGPU)操作的元件,其中,图形处理器用于使用与图形图元渲染不显式相关的计算着色器程序来执行SIMD矢量操作。
在一些实施例中,以与3D流水线922类似的方式配置媒体流水线924。在媒体对象命令942之前,将配置媒体流水线状态940的一组命令分派或放置到命令队列中。在一些实施例中,用于媒体流水线状态940的命令包括用于配置将用于处理媒体对象的媒体流水线元素的数据。这包括在媒体流水线中配置视频解码和视频编码逻辑的数据,例如编码或解码格式。在一些实施例中,用于媒体流水线状态940的命令还支持使用一个或多个指向包含一批状态设置的“间接”状态元素的指针。
在一些实施例中,媒体对象命令942提供指向媒体对象的指针供媒体流水线进行处理。媒体对象包括包含要处理的视频数据的存储器缓冲器。在一些实施例中,在发布媒体对象命令942之前,所有媒体流水线状态必须是有效的。一旦配置了流水线状态并且将媒体对象命令942排队,则经由执行命令944或等效的执行事件来触发媒体流水线924(例如,寄存器写)。然后,可以通过3D流水线922或媒体流水线924提供的操作对来自媒体流水线924的输出进行后处理。在一些实施例中,以与媒体操作类似的方式配置和执行GPGPU操作。
图形软件架构
图10示出了根据一些实施例的用于数据处理系统1000的示例性图形软件架构。在一些实施例中,软件架构包括3D图形应用程序1010、操作系统1020和至少一个处理器1030。在一些实施例中,处理器1030包括图形处理器1032和一个或多个通用处理器核1034。图形应用程序1010和操作系统1020各自在数据处理系统的系统存储器1050中执行。
在某些实施例中,3D图形应用程序1010包含一个或多个着色器程序,包括着色器指令1012。着色器语言指令可以是高级着色器语言,例如Direct3D的High-Level ShaderLanguage(HLSL)、OpenGL Shader Language(GLSL),等等。该应用程序还包括适合于由通用处理器核1034执行的机器语言的可执行指令1014。该应用程序还包括由顶点数据定义的图形对象1016。
在一些实施例中,操作系统1020是来自微软公司的操作系统、专有的类UNIX操作系统或使用Linux内核的变体的开源的类UNIX操作系统。操作系统1020可以支持图形API 1022,例如Direct3D API、OpenGL API或Vulkan API。当使用Direct3DAPI时,操作系统1020使用前端着色器编译器1024将HLSL中的任何着色器指令1012编译为较低级的着色器语言。该编译可以是即时(JIT)编译,或者应用程序可以执行着色器预编译。在一些实施例中,在3D图形应用程序1010的编译期间将高级着色器编译成低级着色器。在一些实施例中,以中间形式(例如由Vulkan API使用的标准便携式中间表示(SPIR)的版本)提供着色器指令1012。
在一些实施例中,用户模式图形驱动器1026包含后端着色器编译器1027,以将着色器指令1012转换成硬件特定表示。当使用OpenGL API时,将GLSL高级语言的着色器指令1012传递给用户模式图形驱动器1026进行编译。在一些实施例中,用户模式图形驱动器1026使用操作系统内核模式功能1028与内核模式图形驱动器1029通信。在一些实施例中,内核模式图形驱动器1029与图形处理器1032通信以分派命令和指令。
IP核实现
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表代码来实现,该代表代码表示和/或定义诸如处理器之类的集成电路内的逻辑。例如,机器可读介质可以包括代表处理器内的各种逻辑的指令。当由机器读取时,指令可以使机器制造逻辑以执行本文描述的技术。这样的表示称为“IP核”,是集成电路的可重用逻辑单元,可以作为描述集成电路结构的硬件模型存储在有形的机器可读介质中。可以将硬件模型提供给各种客户或制造设施,其将硬件模型加载到制造集成电路的制造机器上。可以制造集成电路,使得该电路执行与本文描述的任何实施例关联地描述的操作。
图11A是示出根据实施例的可用于制造集成电路以执行操作的IP核开发系统1100的框图。IP核开发系统1100可以用于生成模块化的、可重复使用的设计,其可以被并入更大的设计中或者用于构建整个集成电路(例如,SOC集成电路)。设计设施1130可以以高级编程语言(例如,C/C++)生成IP核设计的软件仿真1110。软件仿真1110可以用于使用仿真模型1112来设计、测试和验证IP核的行为。仿真模型1112可以包括功能、行为和/或时序仿真。然后可以从仿真模型1112创建或综合寄存器传送级别(RTL)设计1115。RTL设计1115是集成电路的行为的抽象,其对硬件寄存器之间的数字信号流建模,包括使用建模的数字信号执行的相关联的逻辑。除了RTL设计1115之外,还可以创建、设计或综合逻辑级或晶体管级的较低级设计。因此,初始设计和仿真的特定细节可能会有所不同。
RTL设计1115或等效物可以由设计设施进一步合成为硬件模型1120,其可以是硬件描述语言(HDL)或物理设计数据的某些其他表示。可以进一步模拟或测试HDL以验证IP核设计。可以使用非易失性存储器1140(例如,硬盘、闪存或任何非易失性存储介质)来存储IP核设计,以传递给第三方制造设施1165。可替代地,可以通过有线连接1150或无线连接1160(例如,经由因特网)来发送IP核设计。然后,制造设施1165可以制造至少部分基于IP核设计的集成电路。可以将制造的集成电路配置为执行根据本文所述的至少一个实施例的操作。
图11B示出了根据本文所述的一些实施例的集成电路封装组件1170的截面侧视图。集成电路封装组件1170示出了如本文所述的一个或多个处理器或加速器设备的实施方式。封装组件1170包括连接到基板1180的多个硬件逻辑单元1172、1174。逻辑1172、1174可以至少部分地以可配置逻辑或固定功能逻辑硬件来实现,并且可以包括以下任一项的一个或多个部分:处理器核、图形处理器或此处描述的其他加速器设备。逻辑1172、1174的每个单元可以被实现在半导体管芯内并且经由互连结构1173与基板1180耦合。互连结构1173可以被配置为在逻辑1172、1174和基板1180之间路由电信号,并且可以包括互连,例如但不限于凸块或立柱。在一些实施例中,互连结构1173可以被配置为路由电信号,诸如与逻辑1172、1174的操作相关联的输入/输出(I/O)信号和/或电源或接地信号。在一些实施例中,基板1180是基于环氧树脂的层压基板。在其他实施例中,基板1180可以包括其他合适类型的基板。封装组件1170可以经由封装互连1183连接到其他电子设备。封装互连1183可以耦合到基板1180的表面,以将电信号路由到其他电子设备,例如母板、其他芯片组或多芯片模块。
在一些实施例中,逻辑单元1172、1174与桥1182电耦合,桥1182被配置为在逻辑1172、1174之间路由电信号。桥1182可以是密集的互连结构,其提供电信号的路由。桥1182可以包括由玻璃或合适的半导体材料组成的桥基板。可以在桥基板上形成电路由特征,以在逻辑1172、1174之间提供芯片对芯片的连接。
尽管示出了两个逻辑单元1172、1174和桥1182,但是本文描述的实施例可以在一个或多个管芯上包括更多或更少的逻辑单元。一个或多个管芯可以通过零个或多个桥连接,因为当逻辑被包括在单个管芯中时,可以不包括桥1182。或者,可以通过一个或多个桥来连接多个管芯或逻辑单元。另外,多个逻辑单元、管芯和桥可以以其他可能的配置(包括三维配置)连接在一起。
图11C示出了封装组件1190,该封装组件1190包括连接至基板1180的多个硬件逻辑小芯片单元。如本文所述的图形处理单元、并行处理器和/或计算加速器可以由分别制造的各种硅小芯片组成。在此上下文中,小芯片是至少部分封装的集成电路,其包括可以与其他小芯片组装成更大封装的不同逻辑单元。可以将具有不同IP核逻辑的各种组合的小芯片集合到单个设备中。另外,可以使用有源插入器技术将小芯片集成到基础管芯或基础小芯片中。本文描述的概念使得能够在GPU内的不同形式的IP之间进行互连和通信。IP核可以使用不同的工艺技术进行制造,并在制造过程中进行组合,从而避免了将多个IP(特别是在具有多种IP的大型SoC上)集成到同一制造过程的复杂性。启用多种处理技术的使用缩短了产品上市时间,并提供一种经济的方式来创建多个产品SKU。此外,分解后的IP更适合独立选通供电,可以关闭给定工作负载中未使用的组件的电源,从而降低总体功耗。
在各种实施例中,封装组件1190可以包括通过结构1185和/或一个或多个桥1187互连的组件和小芯片。封装组件1190内的小芯片可以具有使用基板上晶片上芯片堆叠的2.5D布置,其中多个管芯并排堆叠在将小芯片与基板1180耦合的硅中介层1189上。基板1180包括到封装互连1183的电连接。在一个实施例中,硅中介层1189是无源中介层,其包括硅通孔(TSV),以将封装组件1190内的小芯片电耦合到基板1180。在一个实施例中,硅中介层1189是除了TSV之外还包括嵌入式逻辑的有源中介层。在这样的实施例中,封装组件1190内的小芯片使用3D面对面管芯堆叠布置在有源中介层1189的顶部。除了互连结构1185和硅桥1187以外,有源中介层1189还可以包括用于I/O1191的硬件逻辑、高速缓存存储器1192和其他硬件逻辑1193。结构1185实现了各种逻辑小芯片1172、1174和有源中介层1189内的逻辑1191、1193之间的通信。结构1185可以是NoC互连或在封装组件的组件之间交换数据分组的另一形式的分组交换结构。对于复杂的组件,结构1185可以是专用的小芯片,使封装组件1190的各种硬件逻辑之间能够进行通信。
有源中介层1189内的桥结构1187可用于促进例如逻辑或I/O小芯片1174与存储器小芯片1175之间的点对点互连。在一些实施方式中,桥结构1187也可嵌入基板1180内。硬件逻辑小芯片可以包括专用硬件逻辑小芯片1172、逻辑或I/O小芯片1174和/或存储器小芯片1175。硬件逻辑小芯片1172和逻辑或I/O小芯片1174可以至少部分地以可配置逻辑或固定功能逻辑硬件来实现,并且可以包括本文所述的处理器核、图形处理器、并行处理器或其他加速器设备中的任何一个的一个或多个部分。存储器小芯片1175可以是DRAM(例如,GDDR、HBM)存储器或高速缓存(SRAM)存储器。有源中介层1189(或基板1180)内的高速缓存存储器1192可以作为封装组件1190的全局高速缓存、分布式全局高速缓存的一部分、或作为结构1185的专用高速缓存。
每个小芯片可以被制造为单独的半导体管芯并且与嵌入在基板1180内或与基板1180耦合的基础管芯耦合。与基板1180的耦合可以经由互连结构1173来执行。互连结构1173可以被配置为在各个小芯片和基板1180内的逻辑之间路由电信号。互连结构1173可以包括诸如但不限于凸块或立柱的互连。在一些实施例中,互连结构1173可以被配置为路由电信号,诸如与逻辑、I/O和存储器小芯片的操作相关联的输入/输出(I/O)信号和/或电源或接地信号。在一个实施例中,附加互连结构将有源中介层1189与基板1180耦合。
在一些实施例中,基板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可以简单地是从一个小芯片到另一小芯片的直接连接。
图11D示出了根据实施例的包括可互换小芯片1195的封装组件1194。可互换小芯片1195可被组装到一个或多个基础小芯片1196、1198上的标准化插槽中。基础小芯片1196、1198可经由桥互连1197耦合,该桥互连1197可类似于本文所述的其他桥互连,并且可以是,例如,EMIB。存储器小芯片也可以经由桥互连连接到逻辑或I/O小芯片。I/O和逻辑小芯片可以经由互连结构进行通信。每个基础小芯片可支持标准化格式的一个或多个插槽,用于逻辑或I/O或存储器/高速缓存之一。
在一个实施例中,可以将SRAM和电源传送电路制造成一个或多个基础小芯片1196、1198,其可以使用与堆叠在基础小芯片顶部上的可互换小芯片1195不同的工艺技术来制造。例如,可以使用较大的处理技术来制造基础小芯片1196、1198,而可以使用较小的工艺技术来制造可互换小芯片。一个或多个可互换小芯片1195可以是存储器(例如,DRAM)小芯片。可以基于功率和/或使用该封装组件1194的产品的目标性能为封装组件1194选择不同的存储器密度。此外,可以在组装时根据产品的功率和/或目标性能选择具有不同数量的类型的功能单元的逻辑小芯片。此外,可以将包含不同类型的IP逻辑核的小芯片插入可互换小芯片插槽中,从而实现可以混合和匹配不同技术IP块的混合处理器设计。
示例性片上系统集成电路
图12-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。一个或多个MMU 1320A-1320B为图形处理器1310提供虚拟到物理地址的映射,包括顶点处理器1305和/或片段处理器1315A-1315N的虚拟地址到物理地址的映射,除了存储在一个或多个高速缓存1325A-1325B中的顶点或图像/纹理数据之外,它们还可以引用存储在存储器中的顶点或图像/纹理数据。在一个实施例中,一个或多个MMU 1320A-1320B可以与系统内的其他MMU同步,包括与图12的一个或多个应用处理器1205、图像处理器1215和/或视频处理器1220相关联的一个或多个MMU,使得每个处理器1205-1220可以参与共享或统一的虚拟存储系统。根据实施例,一个或多个电路互连1330A-1330B使图形处理器1310能够经由SoC的内部总线或经由直接连接而与SoC内的其他IP核接合。
如图13B所示,图形处理器1340包括图13A的图形处理器1310的一个或多个MMU1320A-1320B、高速缓存1325A-1325B和电路互连1330A-1330B。图形处理器1340包括一个或多个着色器核1355A-1355N(例如,1455A,1355B,1355C,1355D,1355E,1355F,至1355N-1和1355N),其提供了统一的着色器核架构,其中单核或类型或核可以执行所有类型的可编程着色器代码,包括用于实现顶点着色器、片段着色器和/或计算着色器的着色器程序代码。统一着色器核架构也可配置为执行直接编译的高级GPGPU程序(例如,CUDA)。存在的着色器核的确切数量可以在实施例和实施方式之间变化。另外,图形处理器1340包括核间任务管理器1345,其充当线程分派器以将执行线程分派给一个或多个着色器核1355A-1355N,以及平铺单元1358以加速用于基于瓦片的渲染的平铺操作,其中在图像空间中细分场景的渲染操作,例如,以利用场景内的局部空间一致性或优化内部高速缓存的使用。
用于图形处理的可变宽度交织霍夫曼编码
在一些实施例中,装置、系统或过程利用单指令多数据(SIMD)熵编码器和解码器系统提供交织霍夫曼操作。在一些实施例中,装置、系统或过程利用专用的GPU算法在GPU软件或GPU硬件中实现高性能。
在一些实施例中,提供可变宽度交织霍夫曼编码的装置、系统或过程包括:
1.一种用于独立编码的霍夫曼比特流的创新可变宽度SIMD交织算法,其目标是GPU计算和最佳GPU存储器流。在一些实施例中,交织算法用于:
(a)启用不需要元数据开销、不需要比特流同步和不需要冗余计算的霍夫曼解码。
(b)帮助最小化实现方式中的GPU执行发散。
(c)启用高性能GPU存储器访问。
2.以高效GPU解码为目标的霍夫曼码(或其他熵码)查找表构造。在一些实施例中,查找表用于:
(a)进一步帮助最小化执行发散。
(b)创新地使用GPU存储器层次结构。
通常,为熵解码器启用GPU并行性对于实现高性能解码至关重要。并行性挑战包括保持编码器和解码器相对于输入比特流同步,以及算法如何准确理解哪个比特开始特定编码符号序列。理想的算法不需要额外的元数据,这会降低压缩率。
与这样的实施例相比,替代的交织过程可以包括以下:
朴素交织熵编码器:SIMD交织比特流的朴素方法例如可以简单地从每个单独编码的比特流中获取固定的数据单元并将数据单元交织在一起。这个过程可以继续,直到一个或多个比特流不再有比特。每次发生这种情况时,交织的比特流的数量都会减一。以这种方式,最终来自所有比特流的所有比特都被处理。这种交织方法要求每个SIMD通道独立地管理其外部循环迭代,并允许通道在它们用完比特时尽早终止。
然而,这种类型的交织过程的缺点是迭代模式在霍夫曼码被翻译和比特流索引被计算时产生外循环发散以及内循环表查找发散。GPU在执行发散方面效率不高,而良好的性能通常需要避免、限制或约束这种发散的算法。这种方法的另一个缺点是,由于其跨多个执行通道的不均匀完成模式,该过程会产生杂乱无章的解码符号写入,通常无法在GPU上高效处理。这种杂乱无章的写入将需要昂贵的SIMD分散存储和部分写入。
ANS交织熵编码器:熵算法的非对称数字系统(ANS)类定义了用于计算属性状态的方法,这些属性状态可用于控制编码器和解码器何时从存储器读取以及读取多少比特以进行进一步处理。
与ANS熵编码相反,可变宽度交织编码器/解码器的实施例可以替代地提供“程序构造”,其可以提供与ANS相似的友好数学属性,但没有实现ANS熵编码器所需的显式状态管理。基于ANS状态计算方法,一种替代过程提出了ANS熵编码器的交织,它允许快速SIMD解码而无需显著的额外开销。对于编码器或解码器的每次迭代,ANS技术都会计算一个唯一的整数状态。这种独特的状态确保解码器读取比特将处于与写入这些比特的编码器相同的状态。此属性启用多个独立编码比特流的ANS比特流SIMD交织。
基于ANS的熵编码的缺点是要求解码器以与编码器相反的顺序消耗比特。特别是,每个独立编码比特流的最终ANS状态也作为与编码比特一起发送的附加元数据传输。这排除了无限大小的数据的流式传输。此外,因为数据被编码的顺序与数据被解码的顺序不同,所以符号概率的适配是不可能的。相反,可以实现可变宽度交织系统的实施例以提供类似的SIMD并行性,但不排除流式传输或适配。
自同步熵解码器:自同步熵解码器不提供编码比特流的SIMD交织,而是采用朴素SIMD并行分治法来细分要解码的比特流。然后,这种自同步解码旨在利用“自同步”的霍夫曼特性来发现符号代码实际开始的同步点,以及SIMD细分的理想位置。
然而,自同步解码器需要对编码比特流进行额外的冗余计算遍(pass),以确定同步点。实际解码只能在这样的操作之后开始。此外,需要额外的临时元数据来在SIMD通道之间以及工作组之间传达同步点。该计算和元数据是大量开销并且不是实施例所要求的。
另一个缺点是自同步方法需要使用前缀和波内在函数来确定目的地地址。相反地,可变宽度交织系统的实施例可以提供高度结构化的写入,并且不需要波内在函数来计算目的地地址。
间隙阵列熵编码器/解码器:间隙阵列熵编码器/解码器采用并传输称为“间隙阵列”的元数据结构以帮助并行解码。该阵列中的“间隙”表示并行细分流中第一个完整码字的起始比特位置。尽管此类编码器/解码器仍采用自同步来确定SIMD并行起始比特,但它们采用间隙阵列来指示较粗略的GPU工作组之间的起始比特。
间隙阵列增加了元数据开销并且增加了编码器的复杂性。相反,可变宽度交织系统的实施例不需要间隙阵列元数据或自同步所需的冗余计算和临时数据。
图14是根据一些实施例的使用可变宽度交织来交织SIMD比特流的图示。如图所示,可以接收多个独立的比特流1405用于编码。在一些实施例中,接收比特流1405的SIMD编码器1415包括可变宽度交织霍夫曼编码以高效且有效地生成交织流数据1420用于传输或存储,所示编码器1415包括多个并行霍夫曼熵编码器。可变宽度交织霍夫曼编码编码操作可以如图15所示。在一些实施例中,然后可以将数据导向SIMD解码器1425以提供交织解码,例如图16中所示。数据可以包括与基于GPU的纹理超级解压缩流水线有关的数据。在一些实施例中,解码器可以利用查找表1430进行熵解码,如下面进一步描述的。
用于高性能GPU存储器读取和写入的算法——解码器(例如SIMD解码器1425)的GPU存储器读取和存储器写入行为都是高性能视频系统(例如PC游戏系统)的关键设计问题。一般来说,当逻辑上相邻的内核实例可以在存储器中加载或写入逻辑上相邻的数据时,GPU计算软件的性能会显著提高。对于给定的高速缓存行负载,这种邻接模式确保显式加载的值之间没有不必要的数据的间隙。遵循此模式允许内核/着色器编译器以最有效的SIMD矢量加载来实现存储器读取,而不是更通用但速度慢得多的SIMD收集加载。解码器的实施例的设计可用于确保将SIMD矢量加载用于存储器流式读取。
在一些实施例中,解码器对存储器的流式写入类似地用SIMD矢量存储实现,而不是更一般但慢得多的SIMD分散存储。在GPU上避免SIMD分散存储也很重要,因为这避免了昂贵的部分写入,这可能会提供比格式良好的完整高速缓存行写入差两到三倍的性能。实现这种存储器写入行为将有助于最大化存储器高速缓存效率。在一些实施例中,随后的算法设计选择可以一起工作以支持这些最佳存储器行为。
可变宽度比特流交织——超压缩流水线的实施例可以并行使用多个(SIMD n)霍夫曼熵编码器。虽然高性能解码器是最终目标,但编码器的构造和行为对于开发解码器的目标至关重要。并行编码器产生的比特流写入模式需要与并行解码器的比特流读取模式同步。在一些实施例中,基于解码器的需要,比特流交织提供了可以随着每次迭代而变化的交织的比特流的数量。
图15图示了根据一些实施例的提供可变宽度比特流交织的三遍超压缩霍夫曼熵编码器流水线的操作。在一些实施例中,工作组的编码器流水线1500可操作以接收SIMD-n比特流1505,例如图15中所示的n=8比特流,用于编码。相应解码器流水线的实施例可以如图16所示。
如图15所示,流水线1500的编码器流水线操作包括三遍:
第1遍:每个工作组执行并行子块熵编码——每个工作组采用SIMD-n并行霍夫曼编码器来为每个工作组产生SIMD-n编码比特流1510,其中编码比特流1510由熵编码中的可变长度的数据(例如双字(DWord),即,4字节/32比特,数据)组成。
第2遍:每个工作组执行双字数据的并行子块熵SIMD交织——如图所示,编码器流水线操作提供每个工作组内的编码比特流1510的可变SIMD交织。一个实施例是临时记录每个工作组的完整交织比特流的大小。在图15所示的特定示例中,每次迭代可以至少部分地基于解码器流水线的当前数据要求(例如图16所示)包括来自编码比特流的不同数量的双字,例如包括8个双字的迭代0、包括5个双字的迭代1,包括7个双字的迭代2,并继续进行后续迭代。
第3遍:所有工作组的输出被压缩成连续的交织数据的流,没有间隙——使用来自编码器第2遍的大小记录,整个比特流被压缩成数据流,使得没有间隙存在。图15中说明了连续流1520的示例。
图16示出了根据一些实施例的提供可变宽度比特流交织的超压缩霍夫曼熵解码器流水线的操作。解码器流水线1600用于接收由超压缩霍夫曼熵编码流水线生成的交织数据流1605,例如图15中所示。交织的数据包括不同长度的双字数据,例如所示的包括8个双字的迭代0,包括5个双字的迭代1,包括7个双字的迭代2,并继续后续迭代。在一些实施例中,解码器流水线向编码器提供解码器的数据要求,以允许编码器以解码器将读取接收到的数据流的方式生成数据流。然后解码器可以根据这样的数据要求将连续流分离成数据块。解码器然后将执行双字数据的并行子块SIMD交织解码以重新生成输入数据流1610。双字数据的解码可以包括使用查找表来执行霍夫曼编码数据的解码,如以下进一步描述的。
对于编码流水线的每次迭代,被交织的比特流的数量基于解码器的每个SIMD执行通道何时需要新比特来继续解码而可变。这种每次迭代可变性的示例在图15中示出。由于这种可变性并且因为不需要传输元数据来支持它,编码器和解码器的每次迭代都将计算到SIMD交织比特流中的索引。为了能够正确计算交织比特流的这些索引,编码器和解码器的GPU实现将在多个设计选择上进行协作。
在一些实施例中,并行编码器被实现为具有等于目标GPU ISA的SIMD宽度的SIMD宽度。选择取决于特定的实现方式。在示例中,GPU在第一种情况下可能具有32的SIMD宽度(也称为束(warp)大小);在第二种情况下,SIMD宽度(又名波前)可能为32,有时为64;或者在第三种情况下可能具有8、16或32的SIMD宽度。对于GPU上的DirectX游戏应用,SIMD-16是最常见的,尽管可以使用编译器扩展启用SIMD-32。
在一些实施例中,编码器和解码器还选择等于目标GPU SIMD宽度的内核工作组大小。这种工作组大小选择使GPU计算解码内核能够在使用共享本地存储器时避免所有昂贵的屏障调用。该选择还使GPU计算解码内核能够使用仅限于在GPU SIMD宽度下工作的快速波内在函数。
GPU存储器层次结构和GPU执行单元硬件数据路径被设计为利用每个SIMD通道的双字大小(4字节)的数据值进行工作。因此,编码器和解码器将以双字大小的增量写入和读取比特。这种选择同时驱动了比特缓冲器设计和SIMD交织比特流寻址逻辑。该选择还驱动输入霍夫曼符号大小的大小选择为一字节符号。因此,四个一字节符号整齐地打包成一个四字节双字。
算法1
算法1提供了StreamBitsIfNeeded()的伪代码的说明。该算法的每次迭代都将测试是否需要更多比特。如果是这样,则PrefixSum()用于从基数计算偏移索引,并从SIMD交织比特流中流式传输比特。
使用波内在函数计算比特流索引——在一些实施例中,编码器第2遍(如图15中所示)和解码器都使用PrefixSum()和ActiveMax()波内在函数来高效地将索引计算到它们的比特流中。当它们执行时,每次迭代都将测试每个通道的比特缓冲器是否已达到阈值(例如,32比特的完整双字),然后根据需要流式传输更多比特。每次迭代都以所有SIMD通道的基数索引开始。PrefixSum()波内在函数用于确定与该基数索引的偏移量。所有达到阈值的活动通道都将计算偏移索引和流,而非活动通道将不参与。在测试、计算索引和流式传输之后,使用ActiveMax内在函数为下一次迭代计算新的基数索引。相关伪代码如算法1所示。
当编码器第2遍写入其SIMD交织比特流1515时,它使用解码器和算法1的“装备的(instrumented)”版本。算法1的装备的版本的每次迭代不读取比特,而是都通知编码器第2遍如何写入交织的比特流。实际上,解码器将准确地通知编码器解码器将如何读取交织的比特流。
在一些实施例中,与某些先前技术不同,解码器的SIMD交织不需要额外的元数据和冗余计算来确定这种可变性,以及每个比特流的比特所在的位置。装备的解码器完美地预测可变性,以便编码器和解码器完美同步。此外,这种比特流模式支持1)快速SIMD矢量加载2)受约束的执行发散3)快速SIMD矢量存储。
快速SIMD矢量加载:在一些实施例中,编码器比特流模式确保解码器可以执行获取完全连续数据的存储器读取,并且解码器不获取包含未使用数据间隙的高速缓存行。虽然每次迭代可能会读取与高速缓存行边界不完全对齐的连续数据,但获取后任何剩余的高速缓存行都将在下一次迭代中快速消耗,从而避免任何浪费的高速缓存行读取。源比特流交织的连续质量使GPU解码器能够使用快速SIMD矢量加载。
GPU霍夫曼表查找设计——对于霍夫曼熵解码GPU实现的性能的关键是关于查找表驱动的霍夫曼解码的设计选择。虽然霍夫曼编码的教科书经典实现将代码表示为按比特二叉树,但编码和解码都可以写成转换表。由于霍夫曼码的长度可变,解码表的设计需要小心。在一些实施例中,GPU友好的多级霍夫曼查找表被设计为采用每级8比特查找并将最大码长限制为16比特。
多级表设计——在一些实施例中,查找表的第一设计选择可以使用8比特来索引多级查找表中的每级表。与单字节符号选择一样,这与四字节双字比特流交织非常匹配。这种选择还意味着只需要单级查找来解码最常见的符号,这些符号将使用5-8比特范围内的代码进行编码。
在一些实施例中,第二设计选择可以将最大代码大小限制为16比特。这又将多级表查找的深度限制为两个级别。这种选择的一个优点是在GPU解码器解码交织的比特流时最小化SIMD发散。在解码时,给定的迭代最多会发散单级表查找。然而,在实践中,最频繁出现的符号将只需要第一级解码查找,通常不会导致执行发散。
对于这种针对256个符号的8比特索引和16比特最大代码长度的查找表设计,用于存储表的总存储器是基于要编码的源符号的熵概率分布而变化的。用于存储所有表(在所有级别中)的总查找表存储器是可变的。在最坏的情况下,需要的总表存储器=(Entry_Size)*(256+256*256)=4B*256*256=256KB。这种最坏的情况对应于每个符号(64K符号中的每个符号)的最大熵情况是同样可能的。相反,在最佳情况下,所需的总表存储器=(Entry_Size)*256*2=4B*256*2=2KB。这种最佳情况对应于极度偏斜的概率分布,其中有511(255+256)个符号,其中255个符号的概率各自为1/256,其他256个符号的概率为1/(256*256)。
通常,所需的表大小是符号的概率分布的函数。在一些实施方式中,可以实现所需存储器的大约75%的节省。根据经验,在表大小为32KB和64KB时可以看到良好的解码性能结果。GPU高速缓存可以支持这样的表大小,并且适合2级GPU高速缓存,通常甚至适合1级GPU高速缓存。
平面查找表——因为诸如HLSL(高级着色器语言)之类的GPU计算语言通常不支持存储器地址指针并且仅允许将少量缓冲器绑定到计算内核的执行,所以实施例可以“展平”多级解码查找表。在这种情况下,展平是指将所有下一级存储器指针转换为整数索引,然后进行偏移,以便表级别驻留在单个连续缓冲器中。此过程可以在编码器和解码器中使用表之前离线完成。
表条目结构——如上所述,GPU通常设计用于双字数据元素。因此,多级解码查找表可以为每个表条目使用单个双字。在此实现方式中,每个32比特条目专用于:
-24比特:解码符号或下一级索引
-7比特:解码的比特数
-1比特:指示符号或索引的标志。
同时针对GPU共享本地存储器和GPU缓高速存存储器——可以证明,利用上述表格,解码器可以通过将第一级查找表存储在1KB GPU共享本地存储器中来更好地利用GPU架构。一个实施例可以依赖需求驱动的存储器高速缓存来为后续级别提供任何需要的条目。此外,GPU通常使用双字大小的存储器端口实现共享本地存储器,这使得多个GPU SIMD通道能够同时访问不同的相邻双字。在特定的实现方式中,双字大小的表条目的选择与此性能机会保持一致。仅将第一级表查找存储在共享本地存储器中是实施例的附加优势并且将其与其他实现方式区分开来。可以应用所描述的算法和特征以便比现有概念更好地映射到GPU。
假设地,如果解码器将整个表存储在共享本地存储器中,它将花费不必要的周期来加载可能不需要的表值。此外,为每个工作组分配更大量的共享本地存储器(例如24KB、32KB、48KB……)会迅速迫使GPU调度程序降低并发GPU占用率。正如经验测试表明的那样,这两个问题都可能大大降低解码器的性能,而这些问题通过仅加载第一级来避免。对于每个GPU计算工作组,解码器仅分配一个1KB给霍夫曼表存储,4KB分配给流式写入缓冲。这种非常适度的共享本地存储器分配不会影响现代GPU上的GPU占用率。
从用于表查找的HLSL代码导出的实施例的伪代码显示在算法2中。
算法2
算法2:从用于霍夫曼解码的展平查找表的HLSL实现方式中导出的伪代码。在一些实施例中,第一级查找的迭代被中断以便它可以在共享本地存储器中使用,并且任何第二级查找将使用高速缓存的存储器访问。
对表设计的进一步改进——在一些实施例中,存在可以实施以提供额外改进的进一步的表设计考虑,包括:
·消耗比索引比特宽度少的比特的码字在多个索引处重复。这是可以解决的低效率问题。记录大小(每个表条目的大小)可以优化为以下:ceil(log2(alphabet size))+ceil(log2(index size))+1。因此,对于4096个符号的字母表,对于8比特索引只需要16比特记录。如果记录大小优化不足,可以在每个级别的表查找中添加一个额外的间接级别,以进一步降低存储器使用的低效率(以添加索引为代价)。
·可以跨给定纹理资产的块使用共享标准霍夫曼表,或者甚至跨纹理资产使用共享标准霍夫曼表。使用这样的共享表可能会降低压缩率,但它会显著平衡GPU高速缓存层次结构,允许独立解码共享同一个高速缓存表,并确保它在高速缓存中始终是热的。
用于约束执行发散和启用矢量存储的GPU解码器——在描述霍夫曼编码器流水线的构造和霍夫曼多级解码表的设计时,本文描述的若干设计选择也适用于解码器的构造。其中,GPU解码器可以使用相同的算法1来高效地计算SIMD交织比特流的索引。
解码器在图16中概念性地示出。GPU解码器还使用了精心设计的多级查找表,利用算法2高效遍历该查找表。为了支持算法2,解码器还首先将第一级查找表加载到1KB的共享本地存储器中。图16提供根据一些实施例的作为从SIMD交织比特流读取的GPU SIMD通道的解码器的概念视图。
受约束的执行发散——实施例的另一个优点是解码器的SIMD执行发散被限制为仅落在算法1和算法2中所示的两个条件内。算法2的发散的频率将是偶然的。这种有限的发散将在两个条件之后很快得到解决。在特定的实现中,外部循环中没有发散,解码器的执行中也没有其他发散。这种受约束的执行发散与交织比特流上的处理模式一起确保了高度结构化的SIMD执行。
快速SIMD矢量存储——由于实施例的高度结构化执行,在每个SIMD通道中的每个解码器迭代结束时,四个相邻符号将被完全解码并准备好形成完全打包的双字。每个通道的后续迭代将产生更完全打包的双字,这些双字是与先前迭代产生的双字相邻的存储器。尽管任何单次迭代仍然需要较慢的SIMD分散存储和痛苦的部分写入,因为执行是高度结构化的,但该算法可以避免这些并使用GPU共享本地存储器。
使用共享本地存储器缓冲写入——在一些实施例中,将额外的4KB共享本地存储器分配给每个工作组。随着解码器的迭代,它将在本地缓冲多个高速缓存行大小的连续数据运行,这些连续数据由解码器的几次迭代产生。周期性地,随着共享的本地存储器缓冲区被填满,解码器然后写出几个完整的高速缓存行,并具有快速的良好表现的SIMD矢量存储。解码器继续重复这种缓冲到共享本地存储器的周期性模式,然后突发矢量写入,直到交织的比特流被完全解码。注意,虽然这里将其描述为GPU计算软件实现,但它也描述了GPU固定功能硬件的构造。算法3中显示了解码器实施例的伪代码。它演示了必要的迭代模式、这些共享本地存储器分配的管理以及算法1和算法2的调用。算法3提供了从霍夫曼解码器的HLSL GPU实现派生的伪代码的说明。
算法3
注意,算法1、算法2和算法3是特定实现方式的示例,并且实施例不限于这样的示例。
图17A是根据一些实施例的用于图形处理的可变宽度交织霍夫曼编码的过程的图示。在用于可变宽度交织霍夫曼编码的过程1700中,接收多个SIMD比特流用于编码1705。多个工作组中的每一个将在第一遍中执行并行子块熵编码1710。在一些实施例中,每个工作组采用SIMD-n并行霍夫曼编码器为每个工作组产生SIMD-n编码比特流1715,编码比特流由熵编码中可变长度的数据(通常是双字数据)组成。
在一些实施例中,过程1700继续接收解码器流水线的当前数据要求1720。至少部分地基于接收到的解码器流水线的当前数据要求,在第二遍中为当前迭代生成一组双字1725。可以根据算法1的规定来判断是否需要更多的比特。这样,编码操作的每一次迭代都可以根据解码器流水线的当前的数据要求从编码流中获得不同数量的双字。在一些实施例中,该过程包括维护关于每个工作组的完整交织数据流的大小的记录数据1730。
在一些实施例中,过程1700继续将每个工作组的输出压缩成连续的交织数据流1735(其也可以称为连续数据流),其中在连续流的生成中使用关于每个工作组的完整的交织数据流的大小的记录数据。然后可以输出连续的数据流以用于图形处理1740。
图17B是根据一些实施例的用于对用于图形处理的可变宽度交织霍夫曼数据进行解码的过程的图示。在用于可变宽度交织霍夫曼解码的过程1750中,接收交织数据的连续流以用于解码1755,该连续流包括多个工作组的交织数据流,例如根据图17A生成的。
在一些实施例中,过程1750继续,解码器将解码器的数据要求发送到编码器1755,数据要求通知编码器解码器将如何读取接收到的流并因此允许编码器根据解码器的数据要求构建流。
在一些实施例中,至少基于由解码器1760提供给编码器的数据要求,将连续流分成多组不同长度的双字数据。过程1750然后提供双字数据的性能并行解码以重新生成输入数据流1765。
从共享本地存储器缓冲区写入朴素平铺——在一些实施例中,额外的方法改进将允许计算着色器内核(例如霍夫曼解码器)直接写入用于块压缩纹理的朴素平铺GPU格式。这提供了一种新颖的GPU功能,目前在现有实现方式中不存在。此功能将减轻GPU必须运行辅助复制引擎后处理遍以将解码的纹理存储为朴素平铺GPU格式的麻烦。霍夫曼解码器方法对共享本地存储器缓冲的使用将无缝扩展以支持这种功能。该方法无需写入连续的高速缓存行,而是简单地写入朴素平铺模式。
共享本地存储器(SLM)直接存储器访问(DMA)–应注意,特殊功能“SLM DMA”硬件可添加到GPU,用于直接存储器传输进出共享本地存储器。这种SLM DMA在当代GPU中可能不存在,但这将有助于1KB第一级表的加载,并且将消除当前用于加载第一级表的执行单元指令周期。如果SLM DMA也支持写入功能,那么它对于将4KB共享本地存储器缓冲器写入GPU存储器也很有用,并且将消除当前用于执行此操作的执行单元指令周期。
游戏用例-一个实施例可以实现游戏媒体资产的快速解压,并解决PC平台游戏应用程序中的两个最终用户可感知用例:
1.快速的游戏加载;以及
2.游戏资产的动态流式传输。
在快速游戏加载中,在从持久性NVMe SSD存储读取游戏资产时最大化读取带宽以及尽可能快地读取媒体资产集合是至关重要的。目标是为最终用户提供“即时”的游戏启动体验。这允许游戏开发人员避免显示烦人的非交互式游戏内容,例如加载屏幕或过场动画以分散最终用户的注意力,同时在后台缓慢加载游戏内容。
在游戏资产的动态流式传输中,游戏世界可以动态地选择要加载哪个纹理资产甚至哪个纹理MiP级别的哪个瓦片。这可能基于渲染当前场景视图需要哪些资源,或者可能基于细节级别选择,或两者兼而有之。NVMe SSD的更高带宽持久存储以及诸如本文所述的加速资产流式传输系统推动了游戏开发人员的重大新渲染创新。
目标问题域——为了提高从GPU到NVMe SSD的带宽,新的游戏控制台将重要的固定功能定制IP专用于压缩游戏资产的快速读取和内联解压缩。然而,这项技术在传统的PC平台上并不存在。值得注意的是,Microsoft DirectStorage API旨在为未来PC平台上的流式解压服务奠定基础。对于这些服务,提供高性能GPU软件和硬件实现至关重要。
用于GPU渲染的最重要的存储游戏资源是块压缩纹理资产。这些通常以有据可查的块压缩格式存储,例如DirectX的BC1或BC7。通过对现代PC游戏的分析可以确定,此类GPU纹理资产通常会占据游戏资产存储空间的75%、80%或更多。这因特定的游戏内容而异。
流式压缩服务在那些已经块压缩的纹理资产之上提供第二级无损压缩。这种元级无损压缩通常被称为超级压缩,或用于读取情况的超级解压缩。为了支持游戏用例,超级解压缩设计目标是为SSD读取提供~2X或更好的带宽倍增器,为GPU提供高性能超级解压缩实现,并高效地生成可GPU供立即渲染使用的常规块压缩纹理。
可以预期超级解压缩流水线由多个解压算法组成,其中快速熵解码作为关键的基础算法。所描述的实现集中于作为所选熵算法的霍夫曼解码,但是这些技术的实施例可以很好地应用于其他熵编码/解码算法。
纹理解压缩处理并行性——为了最大限度地利用GPU的高度并行化的计算吞吐量,有足够的独立并行工作单元来完成是至关重要的。可以细分超压缩纹理资产的霍夫曼解码以满足GPU并行性的需求。这些级别的纹理解压缩并行化很重要,因为它们构成了可变宽度SIMD交织编码器和解码器的算法基础。
图18是可以在一些实施例中解决的纹理并行性的图示。在快速游戏加载用例中,可以预期游戏启动或游戏关卡加载可能需要数千个纹理资产。这本身可以提供大量的并行工作单元,如图18所示。图18图示了过程中的纹理级并行性。可以预期,游戏和其他3D应用程序将在应用程序启动时尝试加载数千个纹理。对于PC平台游戏题目,最常见的纹理存储格式是BC(块压缩)格式(BCn)BC1-BC7。为了说明起见,提供了第一纹理资产1805、第二纹理资产1810,并继续通过第n纹理资产1815。
块或瓦片并行性——为了促进动态资产流用例,并统一超级解压缩解码器实现,可以预期在这些纹理资产1805-1815的超压缩编码期间,它们将进一步细分为64KB大小的块或瓦片,如图19A-20B中所示。
图19A示出了根据一些实施例的将纹理资产细分为块的超压缩创作工具,以及图19B示出了根据一些实施例的将纹理资产细分为瓦片的超压缩创作工具。图19A示出了被划分为多个块1910的纹理资产1810,而图19B示出了被划分为多个瓦片1905的纹理资产1805。在这些图示中,块1910和瓦片1905的大小各为64KB。然而,实施例不限于任何特定的块或瓦片大小。请注意,如果纹理资产包含纹理数据的多分辨率MiP层次结构,则瓦片将跨越该MiP层次结构。对于最粗略分辨率的MiP级别,可以预期多个级别都将驻留在单个瓦片中。
在各种实施方式中,64KB是一个重要的大小选择,原因有几个。首先,现代PC操作系统、PC GPU和PC CPU通常能够在大小为64KB的存储器页面中为GPU虚拟存储器提供最佳服务。特别是对于动态流用例,如果单个块的纹理超级解压缩可以针对单个64KB存储器页面,则可能更适合性能和存储器管理问题。
其次,≤64KB大小的分配也非常适合NVMe SSD的读取性能最佳点。可以预期SSD带宽和异步请求队列会因许多同时进行中的64KB块/瓦片请求而饱和。64KB也被证明是一个足够大的数据窗口,可以支持良好的压缩率和常用压缩算法(如L7W、LZ77和霍夫曼熵编码)的性能。64KB还允许在块内对齐BC1-BC7区块。最后,一个64KB的页面包含足够的纹理数据,以使人眼在视觉上感兴趣,但实践证明它可以实现合理细粒度的虚拟纹理存储器管理。
基于预期的用例,创作工具可以将纹理资产细分为块排列或瓦片排列,如图所示。当前的熵解码实现并不关心。然而,未来可能还有其他超级压缩算法设计选择,将关注点和标准化只是放在瓦片排列上。
图20A示出了根据一些实施例将纹理资产块进一步细分为子块,并且图20B示出了根据一些实施例将纹理资产瓦片进一步细分为子块。在一些实施例中,每个块或瓦片可以进一步细分为子块,如图20A和20B所示。图20A示出了纹理资产1810的每个块1910被进一步细分为子块2010,并且图20B示出了纹理资产1805的每个瓦片1905被进一步细分为子块2005。在图20A和图20B中示出SIMD 32示例。在一些实施例中,每个块的子块的数量与将执行解码的目标GPU实现的SIMD宽度相匹配。编码器和解码器都需要就SIMD宽度的选择达成一致。
所示的附加细分级别经过精心设计,以支持在目标GPU实现上充分利用SIMD计算资源。需要SIMD并行性以确保每个计算SIMD通道都有独立的工作单元来执行。这种并行性使每个SIMD通道能够独立地负责解码独立编码的比特流。从编码器的角度来看,就好像多个(SIMD n)编码器并行工作,每个编码器都有自己的子块。同样,在解码时,多个解码器并行工作,每个解码器都解码其自己的子块。这些SIMD并行编码器和解码器之间的唯一相互作用是比特如何写入和读取到比特流。
在以上描述中,出于解释的目的,阐述了许多具体细节以便提供对所描述的实施例的透彻理解。然而,对于本领域的技术人员来说显而易见的是,可以在没有这些具体细节中的一些的情况下实践实施例。在其他情况下,众所周知的结构和设备以框图形式显示。所示组件之间可能存在中间结构。本文描述或图示的组件可以具有未图示或描述的附加输入或输出。
各种实施例可以包括各种过程。这些过程可以由硬件组件执行,或者可以体现在计算机程序或机器可执行指令中,这些指令可用于使通用或专用处理器或用指令编程的逻辑电路执行这些过程。可替代地,可以通过硬件和软件的组合来执行这些过程。
各种实施例的部分可以作为计算机程序产品提供,该计算机程序产品可以包括其上存储有计算机程序指令的计算机可读介质,该计算机程序指令可以用于对计算机(或其他电子设备)进行编程以供一个或多个处理器执行来实施根据某些实施例的过程。计算机可读介质可以包括但不限于磁盘、光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、磁卡或光卡、闪存或其他类型的适合存储电子指令的计算机可读介质。此外,实施例也可以作为计算机程序产品下载,其中程序可以从远程计算机传送到请求计算机。
许多方法以其最基本的形式被描述,但是可以从任何方法中添加或删除过程,并且可以从任何描述的消息中添加或减去信息而不背离本发明实施例的基本范围。对本领域技术人员来说显而易见的是,可以进行许多进一步的修改和调整。提供特定实施例不是为了限制概念而是为了说明它。实施例的范围不由以上提供的具体示例确定,而仅由以下权利要求确定。
如果说元件“A”耦合到元件“B”或与元件“B”耦合,则元件A可以直接耦合到元件B或通过例如元件C间接耦合。当说明书或权利要求书陈述组件、特征、结构、过程或特性A“导致”组件、特征、结构、过程或特性B时,这意味着“A”至少是“B”的部分原因,但也可能存在至少一个有助于导致“B”的其他组件、特征、结构、过程或特性。如果说明书表明“可以”、“可能”或“会”包含一个组件、特征、结构、过程或特性,则不要求包含该特定组件、特征、结构、过程或特性。如果说明书或权利要求提到“一”或“一个”元素,这并不意味着只有一个所描述的元素。
实施例是一种实施方式或示例。在说明书中提及“实施例”、“一个实施例”、“一些实施例”或“其他实施例”意味着结合实施例描述的特定特征、结构或特性包括在至少一些实施例中,但是不一定是所有实施例。“实施例”、“一个实施例”或“一些实施例”的各种出现不一定都指代相同的实施例。应当理解,在示例性实施例的前述描述中,为了简化公开内容和帮助理解各种新颖方面中的一个或多个,各个特征有时在单个实施例、图或其描述中组合在一起。然而,该公开方法不应被解释为反映所要求保护的实施例需要比每个权利要求中明确列举的更多特征的意图。相反,如以下权利要求所反映的,新颖的方面在于少于单个前述公开的实施例的所有特征。因此,权利要求特此明确地并入本说明书中,每个权利要求作为单独的实施例独立存在。前面的描述和附图被认为是说明性的而不是限制性的。本领域技术人员将理解,在不脱离所附权利要求中阐述的特征的更广泛精神和范围的情况下,可以对本文描述的实施例进行各种修改和改变。
以下示例涉及某些实施例:
在示例1中,一种装置包括:一个或多个处理器,包括图形处理器;以及用于存储数据的存储器,所述数据包括用于图形处理的数据;其中,所述图形处理器包括提供可变宽度交织编码的编码器流水线和解码所述可变宽度交织编码的解码器流水线,并且其中所述编码器流水线用于:从多个工作组接收多个比特流;对所述比特流执行并行熵编码,为每个所述工作组生成多个编码比特流;至少部分地基于从所述解码器流水线接收的解码的数据要求,对每个工作组的比特流执行可变交织;以及将每个所述工作组的输出压缩成交织数据的连续流。
在示例2中,熵编码包括霍夫曼编码。
在示例3中,所接收的多个比特流包括单指令多数据(SIMD)比特流。
在示例4中,编码器流水线包括用于所述多个工作组中的每一个的多个并行熵编码器;以及解码器流水线包括用于所述多个工作组中的每一个的多个并行熵编码器。
在示例5中,由所述并行熵编码器对于所述多个工作组产生的比特流写入模式将与所述并行熵解码器对于所述多个工作组的比特流读取模式同步。
在示例6中,其中编码的比特流可以具有可变长度。
在示例7中,在所述可变交织中交织的编码的比特流的数量可以随着编码器流水线的每次迭代而变化。
在示例8中,解码器流水线用于:接收所述连续的数据流;向所述编码器流水线提供解码的数据要求;至少部分地基于提供给所述编码器流水线的所述解码的数据要求,将所述连续的数据流分成多组数据;以及执行所述多组数据的并行熵解码以生成多个比特流。
在示例9中,并行熵解码的执行包括熵码查找表的使用。
在示例10中,编码器流水线和所述解码器流水线利用等于目标SIMD宽度的内核工作组大小。
在示例11中,一种或多种非暂时性计算机可读存储介质,其上存储有可执行计算机程序指令,当由一个或多个处理器执行时,所述可执行计算机程序指令使所述一个或多个处理器执行包括以下操作的操作:在编码器流水线处从多个工作组接收多个比特流;对所述比特流进行并行熵编码,为所述每个工作组生成多个编码的比特流;至少部分地基于从解码器流水线接收的解码的数据要求,对每个工作组的比特流执行可变交织;以及将每个所述工作组的输出压缩成交织数据的连续流。
在示例12中,编码器流水线包括用于所述多个工作组中的每一个的多个并行熵编码器;以及解码器流水线包括用于所述多个工作组中的每一个的多个并行熵编码器。
在示例13中,编码的比特流可以具有可变长度,并且其中在所述可变交织中交织的编码的比特流的数量可以随着所述编码器流水线的每次迭代而变化。
在示例14中,指令还包括用于以下操作的指令:在所述解码器流水线接收所述连续的数据流;向所述编码流水线提供解码的数据要求;至少部分地基于提供给所述编码流水线的所述解码的数据要求,将所述连续的数据流分离成多组数据;以及执行所述多组数据的并行熵解码以生成多个比特流。
在示例15中,执行并行熵解码包括熵码查找表的使用。
在示例16中,一种方法,包括:在编码器流水线处从多个工作组接收多个比特流;对所述比特流执行并行熵编码,为每个所述工作组生成多个编码的比特流;至少部分地基于从解码器流水线接收的解码的数据要求,对每个工作组的比特流执行可变交织;以及将每个所述工作组的输出压缩成交织数据的连续流。
在示例17中,编码器流水线包括用于所述多个工作组中的每一个的多个并行熵编码器;以及解码器流水线包括用于所述多个工作组中的每一个的多个并行熵编码器。
在示例18中,编码比特流可以具有可变长度,并且其中在所述可变交织中交织的编码比特流的数量可以随着所述编码器流水线的每次迭代而变化。
在示例19中,该方法还包括:在所述解码器流水线处接收所述连续的数据流;向所述编码流水线提供解码的数据要求;至少部分地基于提供给所述编码流水线的所述解码的数据要求,将所述连续的数据流分成多组数据;以及执行所述多组数据的并行熵解码以生成多个比特流。
在示例20中,执行并行熵解码包括熵码查找表的使用。
在示例21中,一种装置,包括:用于在编码器流水线处从多个工作组接收多个比特流的单元;用于对比特流执行并行熵编码以为每个工作组生成多个编码的比特流的单元;用于至少部分地基于从解码器流水线接收到的解码的数据要求执行每个工作组的比特流的可变交织的单元;以及用于将每个工作组的输出压缩成连续的交织数据流的单元。
在示例22中,编码器流水线包括用于多个工作组中的每一个的多个并行熵编码器;并且解码器流水线包括用于多个工作组中的每一个的多个并行熵编码器。
在示例23中,编码比特流可以具有可变长度,并且其中在可变交织中交织的编码的比特流的数量可以随着编码器流水线的每次迭代而变化。
在示例23中,该装置还包括:用于在解码器流水线处接收连续数据流的单元;用于向编码流水线提供解码的数据要求的单元;用于至少部分地基于提供给编码流水线的解码的数据要求将连续数据流分成多组数据的单元;以及用于对多组数据执行并行熵解码以生成多个比特流的单元。
在示例25中,用于执行并行熵解码的单元包括用于使用熵码查找表的单元。
在以上描述中,出于解释的目的,阐述了许多具体细节以便提供对所描述的实施例的透彻理解。然而,对于本领域的技术人员来说显而易见的是,可以在没有这些具体细节中的一些的情况下实践实施例。在其他情况下,众所周知的结构和设备以框图形式显示。所示组件之间可能存在中间结构。本文描述或图示的组件可以具有未图示或描述的附加输入或输出。
各种实施例可以包括各种过程。这些过程可以由硬件组件执行,或者可以体现在计算机程序或机器可执行指令中,这些指令可用于使通用或专用处理器或用指令编程的逻辑电路执行这些过程。可替代地,可以通过硬件和软件的组合来执行这些过程。
各种实施例的部分可以作为计算机程序产品提供,该计算机程序产品可以包括其上存储有计算机程序指令的计算机可读介质,该计算机程序指令可以用于对计算机(或其他电子设备)进行编程以供一个或多个处理器执行来实施根据某些实施例的过程。计算机可读介质可以包括但不限于磁盘、光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、磁卡或光卡、闪存或其他类型的适合存储电子指令的计算机可读介质。此外,实施例也可以作为计算机程序产品下载,其中程序可以从远程计算机传送到请求计算机。
许多方法以其最基本的形式被描述,但是可以从任何方法中添加或删除过程,并且可以从任何描述的消息中添加或减去信息而不背离本发明实施例的基本范围。对本领域技术人员来说显而易见的是,可以进行许多进一步的修改和调整。提供特定实施例不是为了限制概念而是为了说明它。实施例的范围不由以上提供的具体示例确定,而仅由以下权利要求确定。
如果说元件“A”耦合到元件“B”或与元件“B”耦合,则元件A可以直接耦合到元件B或通过例如元件C间接耦合。当说明书或权利要求书陈述组件、特征、结构、过程或特性A“导致”组件、特征、结构、过程或特性B时,这意味着“A”至少是“B”的部分原因,但也可能存在至少一个有助于导致“B”的其他组件、特征、结构、过程或特性。如果说明书表明“可以”、“可能”或“会”包含一个组件、特征、结构、过程或特性,则不要求包含该特定组件、特征、结构、过程或特性。如果说明书或权利要求提到“一”或“一个”元素,这并不意味着只有一个所描述的元素。
实施例是一种实施方式或示例。在说明书中提及“实施例”、“一个实施例”、“一些实施例”或“其他实施例”意味着结合实施例描述的特定特征、结构或特性包括在至少一些实施例中,但是不一定是所有实施例。“实施例”、“一个实施例”或“一些实施例”的各种出现不一定都指代相同的实施例。应当理解,在示例性实施例的前述描述中,为了简化公开内容和帮助理解各种新颖方面中的一个或多个,各个特征有时在单个实施例、图或其描述中组合在一起。然而,该公开方法不应被解释为反映所要求保护的实施例需要比每个权利要求中明确列举的更多特征的意图。相反,如以下权利要求所反映的,新颖的方面在于少于单个前述公开的实施例的所有特征。因此,权利要求特此明确地并入本说明书中,每个权利要求作为单独的实施例独立存在。
前面的描述和附图被认为是说明性的而不是限制性的。本领域技术人员将理解,在不脱离所附权利要求中阐述的特征的更广泛精神和范围的情况下,可以对本文描述的实施例进行各种修改和改变。
Claims (20)
1.一种装置,包括:
一个或多个处理器,包括图形处理器;以及
用于存储数据的存储器,所述数据包括用于图形处理的数据;
其中,所述图形处理器包括用于提供可变宽度交织编码的编码器流水线和用于解码所述可变宽度交织编码的解码器流水线,并且其中,所述编码器流水线用于:
从多个工作组接收多个比特流;
对所述比特流执行并行熵编码,来为所述工作组中的每个工作组生成多个编码的比特流;
至少部分地基于从所述解码器流水线接收的针对解码的数据要求,对每个工作组的所述比特流执行可变交织;以及
将所述工作组中的每个工作组的输出压缩成交织的数据的连续流。
2.根据权利要求1所述的装置,其中,所述熵编码包括霍夫曼编码。
3.根据权利要求1所述的装置,其中,所接收的多个比特流包括单指令多数据(SIMD)比特流。
4.根据权利要求1所述的装置,其中:
所述编码器流水线包括用于所述多个工作组中的每个工作组的多个并行熵编码器;以及
所述解码器流水线包括用于所述多个工作组中的每个工作组的多个并行熵编码器。
5.根据权利要求4所述的装置,其中,由用于所述多个工作组的所述并行熵编码器产生的比特流写入模式将与用于所述多个工作组的所述并行熵解码器的比特流读取模式同步。
6.根据权利要求1所述的装置,其中,所述编码的比特流可以具有可变长度。
7.根据权利要求6所述的装置,其中,在所述可变交织中交织的编码的比特流的数量可以随着所述编码器流水线的每次迭代而变化。
8.根据权利要求1所述的装置,其中,所述解码器流水线用于:
接收所述连续的数据流;
向所述编码器流水线提供针对解码的所述数据要求;
至少部分地基于提供给所述编码器流水线的针对解码的所述数据要求,将所述连续的数据流分成多组数据;以及
执行所述多组数据的并行熵解码以生成多个比特流。
9.根据权利要求8所述的装置,其中,所述并行熵解码的执行包括熵码查找表的使用。
10.根据权利要求1所述的装置,其中,所述编码器流水线和所述解码器流水线利用等于目标SIMD宽度的内核工作组大小。
11.一种装置,包括:
用于在编码器流水线处从多个工作组接收多个比特流的单元;
用于对所述比特流执行并行熵编码来为所述工作组中的每个工作组生成多个编码的比特流的单元;
用于至少部分地基于从解码器流水线接收的针对解码的数据要求,对每个工作组的所述比特流执行可变交织的单元;以及
用于将所述工作组中的每个工作组的输出压缩成交织的数据的连续流的单元。
12.根据权利要求11所述的装置,其中:
所述编码器流水线包括用于所述多个工作组中的每个工作组的多个并行熵编码器;以及
所述解码器流水线包括用于所述多个工作组中的每个工作组的多个并行熵编码器。
13.根据权利要求11所述的装置,其中,所述编码的比特流可以具有可变长度,并且其中,在所述可变交织中交织的编码的比特流的数量可以随着所述编码器流水线的每次迭代而变化。
14.根据权利要求11所述的装置,还包括:
用于在所述解码器流水线处接收所述连续的数据流的单元;
用于向所述编码流水线提供针对解码的所述数据要求的单元;
用于至少部分地基于提供给所述编码器流水线的针对解码的所述数据要求,将所述连续的数据流分成多组数据的单元;以及
用于执行所述多组数据的并行熵解码以生成多个比特流的单元。
15.根据权利要求14所述的装置,其中,执行并行熵解码包括熵码查找表的使用。
16.一种方法,包括:
在编码器流水线处从多个工作组接收多个比特流;
对所述比特流执行并行熵编码来为所述工作组中的每个工作组生成多个编码的比特流;
至少部分地基于从解码器流水线接收的针对解码的数据要求,对每个工作组的所述比特流执行可变交织;以及
将所述工作组中的每个工作组的输出压缩成交织的数据的连续流。
17.根据权利要求16所述的方法,其中:
所述编码器流水线包括用于所述多个工作组中的每个工作组的多个并行熵编码器;以及
所述解码器流水线包括用于所述多个工作组中的每个工作组的多个并行熵编码器。
18.根据权利要求16所述的方法,其中,所述编码的比特流可以具有可变长度,并且其中,在所述可变交织中交织的编码的比特流的数量可以随着所述编码器流水线的每次迭代而变化。
19.根据权利要求16所述的方法,还包括:
在所述解码器流水线处接收所述连续的数据流;
向所述编码流水线提供针对解码的所述数据要求;
至少部分地基于提供给所述编码器流水线的针对解码的所述数据要求,将所述连续的数据流分成多组数据;以及
执行所述多组数据的并行熵解码以生成多个比特流。
20.根据权利要求19所述的方法,其中,执行并行熵解码包括熵码查找表的使用。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163163685P | 2021-03-19 | 2021-03-19 | |
US63/163,685 | 2021-03-19 | ||
US17/357,038 | 2021-06-24 | ||
US17/357,038 US20220301228A1 (en) | 2021-03-19 | 2021-06-24 | Variable width interleaved coding for graphics processing |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115115719A true CN115115719A (zh) | 2022-09-27 |
Family
ID=83114842
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210154266.6A Pending CN115115719A (zh) | 2021-03-19 | 2022-02-18 | 用于图形处理的可变宽度交织编码 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20220301228A1 (zh) |
CN (1) | CN115115719A (zh) |
DE (1) | DE102022101975A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116703690A (zh) * | 2022-11-02 | 2023-09-05 | 荣耀终端有限公司 | 图像处理方法和设备 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9378560B2 (en) * | 2011-06-17 | 2016-06-28 | Advanced Micro Devices, Inc. | Real time on-chip texture decompression using shader processors |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3978319A (en) * | 1975-10-29 | 1976-08-31 | International Business Machines Corporation | Universal self-clocking code reading method and apparatus |
US7538695B2 (en) * | 2007-06-29 | 2009-05-26 | Rmi Corporation | System and method for deflate processing within a compression engine |
US8572271B2 (en) * | 2009-01-29 | 2013-10-29 | Qualcomm Incorporated | Multimedia management system for seamless multimedia content mobility |
BR112022001981A2 (pt) * | 2019-08-06 | 2022-05-10 | Beijing Bytedance Network Tech Co Ltd | Método e aparelho de processamento de vídeo, e, mídia legível por computador |
-
2021
- 2021-06-24 US US17/357,038 patent/US20220301228A1/en active Pending
-
2022
- 2022-01-28 DE DE102022101975.6A patent/DE102022101975A1/de active Pending
- 2022-02-18 CN CN202210154266.6A patent/CN115115719A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116703690A (zh) * | 2022-11-02 | 2023-09-05 | 荣耀终端有限公司 | 图像处理方法和设备 |
CN116703690B (zh) * | 2022-11-02 | 2024-05-14 | 荣耀终端有限公司 | 图像处理方法和设备 |
Also Published As
Publication number | Publication date |
---|---|
US20220301228A1 (en) | 2022-09-22 |
DE102022101975A1 (de) | 2022-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11204801B2 (en) | Method and apparatus for scheduling thread order to improve cache efficiency | |
US20230367740A1 (en) | Computing efficient cross channel operations in parallel computing machines using systolic arrays | |
CN115129370A (zh) | 在计算架构中支持8位浮点格式操作数 | |
CN113094298A (zh) | 对共享本地存储器进行分区的机制 | |
CN115115719A (zh) | 用于图形处理的可变宽度交织编码 | |
CN113052746A (zh) | 用于多适配器编码的装置和方法 | |
CN113052747A (zh) | 用于基于量化的会聚方向的光线分类的装置和方法 | |
US20220156343A1 (en) | Scalable sparse matrix multiply acceleration using systolic arrays with feedback inputs | |
US11200722B2 (en) | Method and apparatus for viewport shifting of non-real time 3D applications | |
KR20210059603A (ko) | 병렬 압축해제 메커니즘 | |
US20230057492A1 (en) | Interleaving of variable bitrate streams for gpu implementations | |
US20220156068A1 (en) | Method and apparatus for minimally intrusive instruction pointer-aware processing resource activity profiling | |
US20230094696A1 (en) | Efficient caching of resource state for a shared function of a three-dimensional pipeline of a graphics processing unit | |
US11182337B1 (en) | Computing efficient cross channel operations in parallel computing machines using systolic arrays | |
US11204977B2 (en) | Scalable sparse matrix multiply acceleration using systolic arrays with feedback inputs | |
CN115129464A (zh) | 脉动阵列中的随机稀疏度处理 | |
US20240160443A1 (en) | Complex number matrix multiplication processors, methods, systems, and instructions | |
US11295408B2 (en) | Method and apparatus for compression of graphics processing commands | |
US20240168717A1 (en) | Unsigned integer multiply-accumulate processors, methods, systems, and instructions | |
US20240152323A1 (en) | Computation of exact floating point addition | |
US20230099093A1 (en) | Scale up and out compression | |
US20240203025A1 (en) | Content aware foveated asw for low latency rendering | |
US20230297419A1 (en) | Load store bank aware thread scheduling techniques | |
US20240127391A1 (en) | Image processing technologies | |
US20230205704A1 (en) | Distributed compression/decompression system |
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 |