CN112446815A - 稀疏矩阵乘法加速机制 - Google Patents

稀疏矩阵乘法加速机制 Download PDF

Info

Publication number
CN112446815A
CN112446815A CN202010591833.5A CN202010591833A CN112446815A CN 112446815 A CN112446815 A CN 112446815A CN 202010591833 A CN202010591833 A CN 202010591833A CN 112446815 A CN112446815 A CN 112446815A
Authority
CN
China
Prior art keywords
matrix
data
graphics
hardware
logic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010591833.5A
Other languages
English (en)
Inventor
S·马伊尤兰
M·内文
J·帕拉
A·加尔各
S·马尔瓦哈
S·沙阿
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN112446815A publication Critical patent/CN112446815A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/386Special constructional features
    • G06F2207/3884Pipelining
    • G06F2207/3892Systolic array
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Nonlinear Science (AREA)
  • Image Generation (AREA)

Abstract

一种用于促进加速矩阵乘法运算的装置。该装置包括脉动阵列,该脉动阵列包括:矩阵乘法硬件,其用于对包括来自多个输入矩阵的数据的接收到的矩阵数据执行乘加运算;以及稀疏矩阵加速硬件,其用于检测矩阵数据中的零值,并对矩阵数据执行一个或多个优化以减少要由矩阵乘法硬件执行的乘加运算。

Description

稀疏矩阵乘法加速机制
技术领域
概括而言,实施例涉及数据处理,并且更具体而言,涉及经由通用图形处理单元的数据处理。
背景技术
深度学习算法当前正在各种机器学习应用中实现,例如音频/视频识别、视频摘要等。各种形式的神经网络(例如,卷积神经网络(CNN)、递归神经网络(RNN)、长短期记忆(LSTM)等)由于其高度并行的性质而被用于执行此类工作负载。机器学习应用通常实现矩阵乘法工作负载,该工作负载具有很大百分比的零(例如,稀疏矩阵)。由于这些运算的结果始终为零,因此必须对这些零执行乘法运算导致不必要的计算。
附图说明
为了可以详细地理解本实施例的上述特征的方式,可以通过参考实施例来对以上简要概述的实施例进行更具体的描述,其中的一些实施例在附图中示出。然而,应当注意,附图仅示出了典型的实施例,并且因此不应被认为是对其范围的限制。
图1是根据实施例的处理系统的框图;
图2A-2D示出了由本文描述的实施例提供的计算系统和图形处理器;
图3A-3C示出了由实施例提供的附加图形处理器和计算加速器架构的框图;
图4是根据一些实施例的图形处理器的图形处理引擎的框图;
图5A-5B示出了根据实施例的线程执行逻辑500,其包括在图形处理器核心中采用的处理元件的阵列;
图6示出了根据实施例的附加执行单元600;
图7是示出根据一些实施例的图形处理器指令格式的框图;
图8是根据另一实施例的图形处理器的框图;
图9A和9B示出了根据一些实施例的图形处理器命令格式和命令序列;
图10示出了根据一些实施例的用于数据处理系统的示例性图形软件架构;
图11A-11D示出了根据一个实施例的集成电路封装组装件;
图12是示出根据实施例的示例性片在系统集成电路的框图;
图13A和13B是示出了附加示例性图形处理器的框图;
图14示出了根据实施例的机器学习软件栈;
图15A-15B示出了示例性深度神经网络的各层;
图16示出了示例性递归神经网络;
图17示出了深度神经网络的训练和部署;
图18是示出分布式学习的框图;
图19示出了采用加速器的计算设备的一个实施例;
图20示出了矩阵乘法运算的一个实施例;
图21A-21C示出了脉动乘法器的实施例;
图22A和22B示出了乘法子运算的实施例;
图23示出了要优化的矩阵元素的一个实施例;
图24A-24C示出了优化后的矩阵元素的实施例;并且
图25是示出用于加速稀疏矩阵乘法的过程的一个实施例的流程图。
具体实施方式
在实施例中,加速器包括脉动矩阵乘法阵列,该脉动矩阵乘法阵列包括稀疏矩阵加速逻辑。在进一步的实施例中,稀疏矩阵加速逻辑被实现为去除具有大量的零值的矩阵中不必要的乘加运算。在乘法运算中,至少一个操作数为零时,这些不必要的运算被确定。这些运算将消耗的资源和时间由其他有用的乘加运算使用,从而提高了性能。
在以下描述中,阐述了许多具体细节以提供更透彻的理解。然而,对于本领域的技术人员显而易见的是,可以在没有这些具体细节中的一个或多个的情况下实践本文描述的实施例。在其他情况下,没有描述公知的特征,以避免使本实施例的细节不清楚。
系统总览
图1是根据实施例的处理系统100的框图。系统100可以用在单处理器台式机系统、多处理器工作站系统或具有大量处理器102或处理器核心107的服务器系统中。在一个实施例中,系统100是并入片上系统(SoC)集成电路内的处理平台,该SoC用于在移动、手持或嵌入式设备中使用,例如在具有到局域网或广域网的有线或无线连接的物联网(IoT)设备内。
在一个实施例中,系统100可以包括以下各项、与以下各项耦合或集成在以下各项内:基于服务器的游戏平台;游戏控制台,包括游戏和媒体控制台;移动游戏控制台、手持游戏控制台或在线游戏控制台。在一些实施例中,系统100是移动电话、智能电话、平板计算设备或诸如具有低内部存储容量的笔记本电脑之类的移动因特网连接设备的一部分。处理系统100还可以包括以下各项、与以下各项耦合或集成在以下各项内:可穿戴设备,例如智能手表可穿戴设备;用增强现实(AR)或虚拟现实(VR)特征增强的智能眼镜或服装,以提供视觉、音频或触觉输出,以补充现实世界视觉、音频或触觉体验,或者以其他方式提供文本、音频、图形、视频、全息图像或视频或触觉反馈;其他增强现实(AR)设备;或其他虚拟现实(VR)设备。在一些实施例中,处理系统100包括电视或机顶盒设备或为电视或机顶盒设备的一部分。在一个实施例中,系统100可以包括以下各项、与以下各项耦合或集成在以下各项内:诸如公共汽车、拖拉机拖车、汽车、电动机或电动自行车、飞机或滑翔机(或其任何组合)之类的自动驾驶载具(vehicle)内。自动驾驶载具可以使用系统100来处理在载具周围感测到的环境。
在一些实施例中,一个或多个处理器102均包括一个或多个处理器核心107以处理指令,该指令在被执行时执行针对系统或用户软件的操作。在一些实施例中,一个或多个处理器核心107中的至少一个被配置为处理特定指令集109。在一些实施例中,指令集109可以促进复杂指令集计算(CISC)、精简指令集计算(RISC)或经由超长指令字(VLIW)的计算。一个或多个处理器核心107可以处理不同的指令集109,该指令集可以包括用于促进仿真其他指令集的指令。处理器核心107还可以包括其他处理设备,例如数字信号处理器(DSP)。
在一些实施例中,处理器102包括高速缓冲存储器104。根据架构,处理器102可以具有单个内部高速缓存或多层内部高速缓存。在一些实施例中,高速缓冲存储器在处理器102的各个组件之间共享。在一些实施例中,处理器102还使用外部高速缓存(例如,三级(L3)高速缓存或最后一级高速缓存(LLC))(未示出),它可以使用已知的高速缓存一致性技术在处理器核心107之间共享。寄存器文件106可以另外地被包括在处理器102中,并且可以包括用于存储不同类型的数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可以特定于处理器102的设计。
在一些实施例中,一个或多个处理器102与一个或多个接口总线110耦合,以在处理器102与系统100中的其他组件之间传输通信信号,例如地址、数据或控制信号。在一个实施例中,接口总线110可以是处理器总线,例如直接媒体接口(DMI)总线的版本。然而,处理器总线不限于DMI总线,并且可以包括一个或多个外围组件互连总线(例如,PCI、PCIExpress)、存储器总线或其他类型的接口总线。在一实施例中,处理器102包括集成存储器控制器116和平台控制器集线器130。存储器控制器116促进存储器设备与系统100的其他组件之间的通信,而平台控制器集线器(PCH)130提供经由本地I/O总线到I/O设备的连接。
存储器设备120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备、相变存储器设备或某个其他具有适当性能而用作过程存储器的存储器设备。在一个实施例中,存储器设备120可以用作系统100的系统存储器,以存储数据122和指令121,以在一个或多个处理器102执行应用或过程时使用。存储器控制器116还与可选的外部图形处理器118耦合,该外部图形处理器可以与处理器102中的一个或多个图形处理器108通信以执行图形和媒体操作。在一些实施例中,图形、媒体和/或计算操作可以由加速器112辅助,该加速器是可以被配置为执行专门的一组图形、媒体或计算操作的协处理器。例如,在一个实施例中,加速器112是用于优化机器学习或计算操作的矩阵乘法加速器。在一个实施例中,加速器112是光线追踪(ray-tracing)加速器,其可以用于与图形处理器108一起执行光线追踪操作。在一个实施例中,可以使用外部加速器119来代替加速器112或与加速器112一起使用。
在一些实施例中,显示设备111可以连接至处理器102。显示设备111可以是内部显示设备中的一个或多个,如在移动电子设备或膝上型计算机设备或经由显示接口(例如,DisplayPort等)附接的外部显示设备中的。在一个实施例中,显示设备111可以是头戴式显示器(HMD),例如用于虚拟现实(VR)应用或增强现实(AR)应用中的立体显示设备。
在一些实施例中,平台控制器集线器130使外围设备能够经由高速I/O总线连接到存储器设备120和处理器102。I/O外围设备包括但不限于音频控制器146、网络控制器134、固件接口128、无线收发器126、触摸传感器125、数据存储设备124(例如,非易失性存储器、易失性存储器、硬盘驱动器、闪存、NAND、3D NAND、3D XPoint等)。数据存储设备124可以经由存储接口(例如,SATA)或经由外围总线(例如,外围组件互连总线(例如,PCI、PCIExpress))来连接。触摸传感器125可以包括触摸屏传感器、压力传感器或指纹传感器。无线收发器126可以是Wi-Fi收发器、蓝牙收发器或诸如3G、4G、5G或长期演进(LTE)收发器之类的移动网络收发器。固件接口128实现与系统固件的通信,并且可以是例如统一可扩展固件接口(UEFI)。网络控制器134可以实现到有线网络的网络连接。在一些实施例中,高性能网络控制器(未示出)与接口总线110耦合。在一个实施例中,音频控制器146是多通道高清音频控制器。在一个实施例中,系统100包括可选的传统I/O控制器140,以用于将传统(例如,个人系统2(PS/2))设备耦合到系统。平台控制器集线器130还可以连接到一个或多个通用串行总线(USB)控制器142,该控制器连接输入设备,例如键盘和鼠标143组合、相机144或其他USB输入设备。
应当理解,所示的系统100是示例性的而不是限制性的,因为还可以使用被不同地配置的其他类型的数据处理系统。例如,存储器控制器116和平台控制器集线器130的实例可以被集成到分立的外部图形处理器中,例如外部图形处理器118。在一个实施例中,平台控制器集线器130和/或存储器控制器116可以在一个或多个处理器102的外部。例如,系统100可以包括外部存储器控制器116和平台控制器集线器130,该外部存储器控制器116和平台控制器集线器130可以被配置为与处理器102的通信的系统芯片组内的存储器控制器集线器和外围控制器集线器。
例如,可以使用电路板(“托架(sled)”),其上放置了诸如CPU、存储器和其他组件之类的组件,以提高热力性能。在一些示例中,诸如处理器之类的处理组件位于托架的顶侧,而诸如DIMM之类的接近存储器位于托架的底侧。由于此设计提供了增强的气流,因此这些组件可以以比典型系统中更高的频率和功率水平操作,从而提高了性能。此外,这些托架被配置为与机架中的电源和数据通信电缆盲配对,从而增强了其快速拆卸、升级、重新安装和/或更换的能力。同样,位于托架上的个体组件(例如,处理器、加速器、存储器和数据存储驱动器)被配置为由于其相互之间的间距增加而易于升级。在说明性实施例中,组件另外包括硬件证明特征以证明其真实性。
数据中心可以利用支持多种其他网络架构(包括以太网和Omni-Path)的单一网络架构(“结构”)。托架可以经由光纤耦合到交换机,与典型的双绞线电缆(例如,类别5、类别5e、类别6等)相比,这可以提供更高的带宽和更低的延时。由于高带宽、低延时的互连和网络架构,数据中心可能会在使用中池化资源,例如存储器、加速器(例如,GPU、图形加速器、FPGA、ASIC、神经网络和/或人工智能加速器等),以及物理上解聚的数据存储驱动器,并根据需要将它们提供给计算资源(例如,处理器),从而使计算资源能够像它们是本地的一样访问池化的资源。
供电装置或电源可以向系统100或本文所述的任何组件或系统提供电压和/或电流。在一个示例中,供电装置包括AC到DC(交流到直流)适配器,以插入壁装插座中。这样的AC电源可以是可再生能源(例如,太阳能)电源。在一示例中,电源包括DC电源,例如外部AC至DC转换器。在一个示例中,电源或供电装置包括无线充电硬件,以经由与充电场的邻近来充电。在一个示例中,电源可以包括内部电池、交流电源、基于运动的电源、太阳能电源或燃料电池源。
图2A-2D示出了本文描述的实施例提供的计算系统和图形处理器。图2A-2D的具有与本文中任何其他附图的元件相同的附图标记(或名称)的元件可以以类似于本文其他各处所描述的任何方式来操作或起作用,但不限于此。
图2A是具有一个或多个处理器核心202A-202N、集成存储器控制器214和集成图形处理器208的处理器200的实施例的框图。处理器200可以包括直至并包括用虚线框表示的附加核心202N的附加核心。每个处理器核心202A-202N包括一个或多个内部高速缓存单元204A-204N。在一些实施例中,每个处理器核心还可以访问一个或多个共享高速缓存单元206。内部高速缓存单元204A-204N和共享高速缓存单元206表示处理器200内的高速缓冲存储器层次结构。高速缓冲存储器层次结构可以包括每个处理器核心内的至少一个级别的指令和数据高速缓存,以及一个或多个级别的共享中级高速缓存(例如,2级(L2)、3级(L3)、4级(L4)或其他级别的高速缓存),其中,外部存储器之前的更高级别的高速缓存归类为LLC。在一些实施例中,高速缓存一致性逻辑维持各种高速缓存单元206和204A-204N之间的一致性。
在一些实施例中,处理器200还可以包括一组一个或多个总线控制器单元216和系统代理核心210。一个或多个总线控制器单元216管理一组外围总线,例如一个或多个PCI或PCI Express总线。系统代理核心210为各种处理器组件提供管理功能。在一些实施例中,系统代理核心210包括一个或多个集成存储器控制器214,以管理对各种外部存储器设备(未示出)的访问。
在一些实施例中,一个或多个处理器核心202A-202N包括对同时多线程的支持。在这样的实施例中,系统代理核心210包括用于在多线程处理期间协调和操作核心202A-202N的组件。系统代理核心210可以另外包括功率控制单元(PCU),该PCU包括用于调节处理器核心202A-202N和图形处理器208的功率状态的逻辑和组件。
在一些实施例中,处理器200另外包括图形处理器208以执行图形处理操作。在一些实施例中,图形处理器208与以下各项耦合:一组共享高速缓存单元206,以及系统代理核心210,包括一个或多个集成存储器控制器214。在一些实施例中,系统代理核心210还包括显示控制器211以驱动图形处理器输出到一个或多个耦合的显示器。在一些实施例中,显示控制器211也可以是经由至少一个互连与图形处理器耦合的独立模块,或者可以集成在图形处理器208内。
在一些实施例中,基于环的互连单元212用于耦合处理器200的内部组件。然而,可以使用替代的互连单元,例如点到点互连、交换互连或其他技术,包括本领域公知的技术。在一些实施例中,图形处理器208经由I/O链路213与环形互连212耦合。
示例性I/O链路213代表多种I/O互连中的至少一种,包括促进各种处理器组件与高性能嵌入式存储器模块218(例如,eDRAM模块)之间的通信的封装上I/O互连。在一些实施例中,处理器核心202A-202N和图形处理器208中的每一个可以使用嵌入式存储器模块218作为共享的最后一级高速缓存。
在一些实施例中,处理器核心202A-202N是执行相同指令集架构的同构核心。在另一实施例中,就指令集架构(ISA)而言,处理器核心202A-202N是异构的,其中,一个或多个处理器核心202A-202N执行第一指令集,而至少一个其他核心执行该第一指令集的子集或不同指令集。在一个实施例中,处理器核心202A-202N在微架构方面是异构的,其中,具有相对较高功耗的一个或多个核心与具有较低功耗的一个或多个功率核心耦合。在一个实施例中,处理器核心202A-202N在计算能力方面是异构的。另外,处理器200可以被实现在一个或多个芯片上,或者被实现为具有附加于其他组件的所示出的组件的SoC集成电路。
图2B是根据本文所述的一些实施例的图形处理器核心219的硬件逻辑的框图。具有与本文中任何其他附图的元件相同的附图标记(或名称)的图2B的元件可以以类似于本文中其他地方所描述的任何方式来操作或起作用,但不限于此。图形处理器核心219(有时称为核心切片)可以是模块化图形处理器内的一个或多个图形核心。图形处理器核心219是一个图形核心切片的示例,并且本文所述的图形处理器可以包括基于目标功率和性能包络线的多个图形核心切片。每个图形处理器核心219可以包括与多个子核心221A-221F(也称为子切片)耦合的固定功能块230,该多个子核心包括通用和固定功能逻辑的模块化块。
在一些实施例中,固定功能块230包括几何/固定功能管线231,其可以例如在较低性能和/或较低功率的图形处理器实施方式中由图形处理器核心219中的所有子核心共享。在各种实施例中,几何/固定功能管线231包括3D固定功能管线(例如,如下所述的图3和图4中的3D管线312)、视频前端单元、线程产生器和线程分派器、以及统一返回缓冲器管理器,该统一返回缓冲器管理器管理统一返回缓冲器(例如,图4中的统一返回缓冲器418,如下所述)。
在一个实施例中,固定功能块230还包括图形SoC接口232、图形微控制器233和媒体管线234。图形SoC接口232在图形处理器核心219和片上系统集成电路内的其他处理器核心之间提供接口。图形微控制器233是可编程子处理器,其可配置为管理图形处理器核心219的各种功能,包括线程分派、调度和抢占。媒体管线234(例如,图3和图4的媒体管线316)包括用于促进对包括图像和视频数据的多媒体数据进行解码、编码、预处理和/或后处理的逻辑。媒体管线234经由到子核心221-221F内的计算或采样逻辑的请求来实现媒体操作。
在一个实施例中,SoC接口232使图形处理器核心219能够与通用应用处理器核心(例如,CPU)和/或SoC内的其他组件通信,包括诸如共享的最后一级高速缓存之类的存储器层次结构元素、系统RAM和/或嵌入式片上或封装上DRAM。SoC接口232还可以使得能够与SoC内的固定功能设备(例如,相机成像管线)的通信,并且使得能够使用和/或实现可以在图形处理器核心219和SoC内的CPU之间共享的全局存储器原子。SoC接口232还可以实现用于图形处理器核心219的功率管理控制,并且实现图形核心219的时钟域与SoC内的其他时钟域之间的接口。在一个实施例中,SoC接口232使得能够从命令流式传输器(commandstreamer)和全局线程分派器接收命令缓冲器,该命令流式传输器和全局线程分派器被配置为向图形处理器内的一个或多个图形核心中的每一个提供命令和指令。当要执行媒体操作时,可以将命令和指令分派给媒体管线234,或者当要执行图形处理操作时,可以将其分派给几何和固定功能管线(例如,几何和固定功能管线231、几何和固定功能管线237)。
图形微控制器233可以被配置为执行用于图形处理器核心219的各种调度和管理任务。在一个实施例中,图形微控制器233可以在子核心221A-221F内的执行单元(EU)阵列222A-222F、224A-224F内的各种图形并行引擎上执行图形和/或计算工作负载调度。在此调度模型中,在包括图形处理器核心219的SoC的CPU核心上执行的主机软件可以提交多个图形处理器门铃之一的工作负载,其调用适当图形引擎上的调度操作。调度操作包括确定接下来要运行哪个工作负载,将工作负载提交给命令流式传输器,抢占引擎上正在运行的现有工作负载,监视工作负载的进度,以及在工作负载完成时通知主机软件。在一个实施例中,图形微控制器233还可以促进图形处理器核心219的低功率或空闲状态,从而为图形处理器核心219提供与系统上的操作系统和/或图形驱动程序软件无关的跨低功率状态转换保存和恢复图形处理器核心219内的寄存器的能力。
图形处理器核心219可以具有大于或小于所示的子核心221A-221F,多达N个模块化子核心。对于每组N个子核心,图形处理器核心219还可以包括共享功能逻辑235、共享和/或高速缓冲存储器236、几何/固定功能管线237以及用于加速各种图形和计算处理操作的附加固定功能逻辑238。共享功能逻辑235可以包括与图4的共享功能逻辑420相关联的逻辑单元(例如,采样器、数学和/或线程间通信逻辑),其可以被图形处理器核心219内的每N个子核心共享。共享和/或高速缓冲存储器236可以是图形处理器核心219内的一组N个子核心221A-221F的最后一级高速缓存,并且还可以用作可由多个子核心访问的共享存储器。可以在固定功能块230内包括几何/固定功能管线237而不是几何/固定功能管线231,并且可以包括相同或相似的逻辑单元。
在一个实施例中,图形处理器核心219包括附加的固定功能逻辑238,其可以包括供图形处理器核心219使用的各种固定功能加速逻辑。在一个实施例中,附加的固定功能逻辑238包括在仅位置阴影(position only shading)中使用的附加的几何管线。在仅位置阴影中,存在两个几何管线,几何/固定功能管线238、231内的完整几何管线,以及剔除管线,该剔除管线是可以被包括在附加固定功能逻辑238内的附加几何管线。在一个实施例中,剔除管线是完整几何管线的精简版。完整管线和剔除管线可以执行同一应用的不同实例,每个实例具有单独的上下文。仅位置阴影可以隐藏丢弃三角形的长时间剔除运行,从而使阴影在一些情况下能够更早完成。例如并且在一个实施例中,附加固定功能逻辑238内的剔除管线逻辑可以与主应用并行地执行位置着色器,并且通常比完整管线更快地产生临界结果,因为剔除管线仅获取和着色顶点的位置属性,而不执行光栅化和将像素渲染到帧缓冲器。剔除管线可以使用生成的临界结果来计算用于所有三角形的可见性信息,而不考虑那些三角形是否被剔除。完整的管线(在这种情况下,它可以称为重播管线)可以消耗可见性信息,以跳过剔除的三角形,以仅对最终传递到光栅化阶段的可见三角形着色。
在一个实施例中,附加的固定功能逻辑238还可以包括机器学习加速逻辑,例如固定功能矩阵乘法逻辑,以用于包括针对机器学习训练或推理的优化的实施方式。
在每个图形子核心221A-221F内包括一组执行资源,其可以用于响应于图形管线、媒体管线或着色器程序的请求来执行图形、媒体和计算操作。图形子核心221A-221F包括多个EU阵列222A-222F、224A-224F、线程分派和线程间通信(TD/IC)逻辑223A-223F、3D(例如,纹理)采样器225A-225F、媒体采样器206A-206F、着色器处理器227A-227F以及共享本地存储器(SLM)228A-228F。EU阵列222A-222F、224A-224F均包括多个执行单元,它们是能够服务于图形、媒体或计算操作(包括图形、媒体或计算着色器程序)而执行浮点和整数/定点逻辑运算的通用图形处理单元。TD/IC逻辑223A-223F对子核心内的执行单元执行本地线程分派和线程控制操作,并促进在子核心的执行单元上执行的线程之间的通信。3D采样器225A-225F可以将与纹理或其他3D图形相关的数据读取到存储器中。3D采样器可以基于配置的样本状态和与给定纹理关联的纹理格式不同地读取纹理数据。媒体采样器206A-206F可以基于与媒体数据相关联的类型和格式来执行类似的读取操作。在一个实施例中,每个图形子核心221A-221F可以替代地包括统一的3D和媒体采样器。在每个子核心221A-221F内的执行单元上执行的线程可以利用每个子核心内的共享本地存储器228A-228F,以使在线程组内执行的线程能够使用片上存储器的公共池来执行。
图2C示出了图形处理单元(GPU)239,其包括布置成多核组240A-240N的专用图形处理资源集。尽管仅提供了单个多核组240A的细节,但是应当理解,其他多核组240B-240N可以配备有相同或相似的图形处理资源集。
如图所示,多核组240A可以包括一组图形核心243、一组张量核心244和一组光线追踪核心245。调度器/分派器241调度并分派图形线程以供在各个核心243、244、245上执行。一组寄存器文件242存储在执行图形线程时由核心243、244、245使用的操作数值。这些可以包括例如用于存储整数值的整数寄存器、用于存储浮点值的浮点寄存器、用于存储打包数据元素(整数和/或浮点数据元素)的向量寄存器以及用于存储张量/矩阵值的分片寄存器(tile register)。在一个实施例中,分片寄存器被实现为向量寄存器的组合集。
一个或多个组合的1级(L1)高速缓存和共享存储器单元247在每个多核组240A内本地地存储图形数据,例如纹理数据、顶点数据、像素数据、光线数据、边界体积数据等。一个或多个纹理单元247也可以用于执行纹理化操作,例如纹理映射和采样。由多核组240A-240N的全部或子集共享的2级(L2)高速缓存253存储用于多个并发图形线程的图形数据和/或指令。如图所示,L2高速缓存253可以跨多个多核组240A-240N共享。一个或多个存储器控制器248将GPU 239耦合到存储器249,该存储器可以是系统存储器(例如,DRAM)和/或专用图形存储器(例如,GDDR6存储器)。
输入/输出(I/O)电路250将GPU 239耦合到一个或多个I/O设备252,例如数字信号处理器(DSP)、网络控制器或用户输入设备。片上互连可以用于将I/O设备252耦合到GPU239和存储器249。I/O电路250的一个或多个I/O存储器管理单元(IOMMU)251将I/O设备252直接耦合到系统存储器249。在一个实施例中,IOMMU 251管理多组页表以将虚拟地址映射到系统存储器249中的物理地址。在该实施例中,I/O设备252、CPU 246和GPU 239可以共享相同的虚拟地址空间。
在一种实施方式中,IOMMU 251支持虚拟化。在这种情况下,它可以管理第一组页表以将访客/图形虚拟地址映射到访客/图形物理地址,以及管理第二组页表以将访客/图形物理地址映射到系统/主机物理地址(例如,在系统存储器249内)。可以将第一和第二组页表中的每一个的基址存储在控制寄存器中,并在上下文切换器上换出(例如,使得新的上下文被提供有对相关组的页表的访问)。尽管在图2C中未示出,但是核心243、244、245和/或多核组240A-240N中的每一个都可以包括翻译后备缓冲器(TLB),以将访客虚拟到访客物理转换、访客物理到主机物理转换和访客虚拟到主机物理转换进行缓存。
在一个实施例中,CPU 246、GPU 239和I/O设备252被集成在单个半导体芯片和/或芯片封装上。所示的存储器249可以集成在同一芯片上,或者可以经由片外接口耦合到存储器控制器248。在一种实施方式中,存储器249包括GDDR6存储器,该GDDR6存储器共享与其他物理系统级存储器相同的虚拟地址空间,但本发明的基本原理不限于该特定实施方式。
在一个实施例中,张量核心244包括多个被设计为执行矩阵运算的执行单元,所述矩阵运算是用于执行深度学习运算的基本计算运算。例如,同时矩阵乘法运算可以用于神经网络训练和推理。张量核心244可以使用各种操作数精度来执行矩阵处理,包括单精度浮点数(例如,32位)、半精度浮点数(例如,16位)、整数字(16位)、字节(8位)和半字节(4位)。在一个实施例中,神经网络实施方式提取每个渲染场景的特征,潜在地从多个帧组合细节,以构造高质量的最终图像。
在深度学习实施方式中,并行矩阵乘法工作可以被调度为在张量核心244上执行。神经网络的训练尤其需要大量的矩阵点积运算。为了处理乘以N×N×N个矩阵乘法的内积公式,张量核心244可以包括至少N个点积处理元件。在矩阵乘法开始之前,将一个完整的矩阵加载到分片寄存器中,并在N个周期内每个周期加载至少一列第二矩阵。每个周期,存在N个点积被处理。
取决于特定实施方式,可以以不同的精度存储矩阵元素,包括16位字、8位字节(例如,INT8)和4位半字节(例如,INT4)。可以为张量核心244指定不同的精度模式,以确保将最有效的精度用于不同的工作负载(例如,可以将量化容忍到字节和半字节的推理工作负载)。
在一个实施例中,对于实时光线追踪实施方式和非实时光线追踪实施方式二者,光线追踪核心245都加速光线追踪操作。特别地,光线追踪核心245包括光线遍历/相交电路,该光线遍历/相交电路用于使用边界体积层级(BVH)来执行光线遍历并标识光线与包围在BVH体积内的图元之间的交集。光线追踪核心245还可以包括用于执行深度测试和剔除(例如,使用Z缓冲器或类似布置)的电路。在一种实施方式中,光线追踪核心245与本文所述的图像降噪技术一起执行遍历和相交操作,其至少一部分可以在张量核心244上执行。例如,在一个实施例中,张量核心244实现深度学习神经网络以对由光线追踪核心245生成的帧执行降噪。然而,CPU 246、图形核心243和/或光线追踪核心245也可以实现降噪和/或深度学习算法的全部或一部分。
另外,如上所述,可以采用分布式方法来降噪,其中,GPU 239在通过网络或高速互连耦合到其他计算设备的计算设备中。在该实施例中,互连的计算设备共享神经网络学习/训练数据,以提高整个系统学习针对不同类型的图像帧和/或不同图形应用执行降噪的速度。
在一个实施例中,光线追踪核心245处理所有的BVH遍历和光线图元相交,从而避免了图形核心243被每光线数千条指令所超载。在一个实施例中,每个光线追踪核心245包括用于执行边界框测试(例如,用于遍历操作)的第一组专用电路和用于执行光线-三角形相交测试(例如,已被遍历的相交光线)的第二组专用电路。因此,在一个实施例中,多核组240A可以简单地发射光线探测器(probe),并且光线追踪核心245独立地执行光线遍历和相交并返回命中数据(例如,命中、无命中、多次命中等)到线程上下文。当光线追踪核心245执行遍历和相交操作的同时,其他核心243、244被释放以执行其他图形或计算工作。
在一个实施例中,每个光线追踪核心245包括用于执行BVH测试操作的遍历单元和执行光线图元相交测试的相交单元。相交单元生成“命中”、“无命中”或“多次命中”响应,其将所述响应提供给适当的线程。在遍历和相交操作期间,释放其他核心(例如,图形核心243和张量核心244)的执行资源以执行其他形式的图形工作。
在下面描述的一个特定实施例中,使用混合光栅化/光线追踪方法,其中,工作分布在图形核心243和光线追踪核心245之间。
在一个实施例中,光线追踪核心245(和/或其他核心243、244)包括对光线追踪指令集的硬件支持,例如微软的DirectX光线追踪(DXR),其包括DispatchRays命令以及光线生成、最接近命中、任何命中和未命中着色器,其实现为每个对象分配唯一的着色器和纹理集。可以由光线追踪核心245、图形核心243和张量核心244支持的另一个光线追踪平台是Vulkan 1.1.85。然而,请注意,本发明的基本原理不限于任何特定的光线追踪ISA。
通常,各种核心245、244、243可以支持光线追踪指令集,该光线追踪指令集包括用于光线生成、最接近命中、任何命中、光线图元相交、每图元和层次结构边界框构造、未命中、访问和例外的指令/功能。更具体地,一个实施例包括用于执行以下功能的光线追踪指令:
光线生成–可以针对每个像素、样本或其他用户定义的工作分配执行光线生成指令。
最接近命中–可以执行最接近命中指令以定位光线与场景内图元的最接近的交点。
任何命中–任何命中指令标识光线与场景内的图元之间的多个相交,从而潜在地标识新的最接近的交点。
相交–相交指令执行光线图元相交测试并输出结果。
每图元边界框构造–该指令围绕给定的图元或一组图元构建边界框(例如,在构建新的BVH或其他加速度数据结构时)。
未命中–指示光线未命中场景或场景的指定区域内的所有几何结构。
访问–指示光线将穿过的子体积。
异常–包括各种类型的异常处理程序(例如,针对各种错误条件调用的)。
图2D是根据本文描述的实施例的可以被配置为图形处理器和/或计算加速器的通用图形处理单元(GPGPU)270的框图。GPGPU 270可以经由一个或多个系统和/或存储器总线与主机处理器(例如,一个或多个CPU 246)和存储器271、272互连。在一个实施例中,存储器271是可以与一个或多个CPU 246共享的系统存储器,而存储器272是专用于GPGPU 270的设备存储器。在一个实施例中,GPGPU 270内的组件和设备存储器272可以被映射到可由一个或多个CPU 246访问的存储器地址中。可以经由存储器控制器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的框图,该图形处理器可以是分立的图形处理单元,或者可以是与多个处理核心或例如但不限于存储设备或网络接口的其他半导体器件集成在一起的图形处理器。在一些实施例中,图形处理器经由存储器映射的I/O接口与图形处理器上的寄存器以及放置在处理器存储器中的命令进行通信。在一些实施例中,图形处理器300包括用于访问存储器的存储器接口314。存储器接口314可以是到本地存储器、一个或多个内部高速缓存、一个或多个共享的外部高速缓存和/或系统存储器的接口。
在一些实施例中,图形处理器300还包括显示控制器302,以将显示输出数据驱动到显示设备318。显示控制器302包括用于一个或多个覆盖平面的硬件,以用于显示和合成多层视频或用户界面元素。显示设备318可以是内部或外部显示设备。在一个实施例中,显示设备318是头戴式显示设备,例如虚拟现实(VR)显示设备或增强现实(AR)显示设备。在一些实施例中,图形处理器300包括视频编解码器引擎306,以将媒体编码成一种或多种媒体编码格式、从一种或多种媒体编码格式进行解码、或者在一种或多种媒体编码格式之间进行转码,包括但不限于运动图像专家组(MPEG)格式,例如MPEG-2、高级视频编码(AVC)格式(例如,H.264/MPEG-4AVC)H.265/HEVC、开放媒体联盟(AOMedia)VP8、VP9、以及电影电视工程师协会(SMPTE)421M/VC-1、以及诸如JPEG以及Motion JPEG(MJPEG)格式之类联合图像专家组(JPEG)格式。
在一些实施例中,图形处理器300包括块图像传送(BLIT)引擎304,以执行包括例如位边界块传送的二维(2D)光栅化器操作。然而,在一个实施例中,使用图形处理引擎(GPE)310的一个或多个组件来执行2D图形操作。在一些实施例中,GPE 310是用于执行图形操作的计算引擎,包括三维(3D)图形操作和媒体操作。
在一些实施例中,GPE 310包括用于执行3D操作的3D管线312,例如使用作用于3D图元形状(例如,矩形、三角形等)的处理功能来渲染三维图像和场景。3D管线312包括可编程和固定功能元件,其在元件内执行各种任务和/或产生到3D/媒体子系统315的执行线程。尽管3D管线312可以用于执行媒体操作,但是GPE 310的实施例还包括媒体管线316,其专门用于执行媒体操作,例如视频后处理和图像增强。
在一些实施例中,媒体管线316包括固定功能或可编程逻辑单元,以执行一个或多个专门的媒体操作,例如代替或代表视频编解码器引擎306的视频解码加速、视频解交织和视频编码加速。在一些实施例中,媒体管线316还包括线程产生单元,以产生用于在3D/媒体子系统315上执行的线程。所产生的线程对3D/媒体子系统315中包括的一个或多个图形执行单元执行媒体操作的计算。
在一些实施例中,3D/媒体子系统315包括用于执行由3D管线312和媒体管线316产生的线程的逻辑。在一个实施例中,管线将线程执行请求发送到3D/媒体子系统315,其包括用于仲裁各种请求并将其分派给可用的线程执行资源的线程分派逻辑。执行资源包括图形执行单元阵列,以用于处理3D和媒体线程。在一些实施例中,3D/媒体子系统315包括一个或多个用于线程指令和数据的内部高速缓存。在一些实施例中,子系统还包括共享存储器(包括寄存器和可寻址存储器),以用于在线程之间共享数据并存储输出数据。
图3B示出了根据本文所述实施例的具有分片式架构的图形处理器320。在一个实施例中,图形处理器320包括图形处理引擎集群322,其在图形引擎分片310A-310D内具有图3A的图形处理引擎310的多个实例。每个图形引擎分片310A-310D可以经由一组分片互连323A-323F来互连。每个图形引擎分片310A-310D还可以经由存储器互连325A-325D连接到存储器模块或存储器设备326A-326D。存储器设备326A-326D可以使用任何图形存储器技术。例如,存储器设备326A-326D可以是图形双倍数据速率(GDDR)存储器。在一个实施例中,存储设备326A-326D是高带宽存储器(HBM)模块,其可以与它们相应的图形引擎分片310A-310D一起在管芯上。在一个实施例中,存储器设备326A-326D是可以被堆叠在它们相应的图形引擎分片310A-310D之上的堆叠的存储器设备。在一个实施例中,每个图形引擎分片310A-310D和相关联的存储器326A-326D驻留在单独的小芯片(chiplet)上,所述小芯片结合到基础管芯或基础衬底,如在图11B-11D中进一步详细描述的。
图形处理引擎群集322可以与片上或封装上结构互连324连接。结构互连324可以实现图形引擎分片310A-310D与诸如视频编解码器306和一个或多个复制引擎304之类的组件之间的通信。复制引擎304可以用于将数据移出存储器设备326A-326D、移入这些存储器设备、以及在这些存储器设备和图形处理器320外部的存储器(例如,系统存储器)之间移动数据。结构互连324也可以用于互连图形引擎分片310A-310D。图形处理器320可以可选地包括显示控制器302,以实现与外部显示设备318的连接。图形处理器也可以被配置为图形或计算加速器。在加速器配置中,可以省略显示控制器302和显示设备318。
图形处理器320可以经由主机接口328连接到主机系统。主机接口328可以实现图形处理器320、系统存储器和/或其他系统组件之间的通信。主机接口328可以是例如PCIExpress总线或另一类型的主机系统接口。
图3C示出了根据本文描述的实施例的计算加速器330。计算加速器330可以包括与图3B的图形处理器320的架构相似性,并且针对计算加速进行了优化。计算引擎集群332可以包括一组计算引擎分片340A-340D,其包括针对并行或基于向量的通用计算操作而优化的执行逻辑。在一些实施例中,计算引擎分片340A-340D不包括固定功能图形处理逻辑,但在一个实施例中,计算引擎分片340A-340D中的一个或多个可以包括用于执行媒体加速的逻辑。计算引擎分片340A-340D可以经由存储器互连325A-325D连接到存储器326A-326D。存储器326A-326D和存储器互连325A-325D可以是与图形处理器320中的技术类似的技术,或者可以是不同的。图形计算引擎分片340A-340D还可以经由一组分片互连323A-323F来互连,并且可以与结构互连324连接和/或通过结构互连324互连。在一个实施例中,计算加速器330包括大的L3高速缓存336,其可以被配置为设备范围的高速缓存(device-widecache)。计算加速器330还可以经由主机接口328以与图3B的图形处理器320类似的方式连接到主机处理器和存储器。
图形处理引擎
图4是根据一些实施例的图形处理器的图形处理引擎410的框图。在一个实施例中,图形处理引擎(GPE)410是图3A所示的GPE 310的版本,并且还可以表示图3B的图形引擎分片310A-310D。具有与本文中任何其他附图的元件相同的附图标记(或名称)的图4中的元件可以以与本文中其他地方所描述的方式类似的任何方式操作或起作用,但不限于此。例如,示出了图3A的3D管线312和媒体管线316。媒体管线316在GPE 410的一些实施例中是可选的,并且可以不显式地包括在GPE 410内。例如并且在至少一个实施例中,单独的媒体和/或图像处理器耦合到GPE 410。
在一些实施例中,GPE 410与命令流式传输器403耦合或包括该命令流式传输器,该命令流式传输器向3D管线312和/或媒体管线316提供命令流式传输器。在一些实施例中,命令流式传输器403与存储器耦合,该存储器可以是系统存储器,或者内部高速缓冲存储器和共享高速缓冲存储器中的一个或多个。在一些实施例中,命令流式传输器403从存储器接收命令,并将命令发送到3D管线312和/或媒体管线316。命令是从环形缓冲器获取的指令,该环形缓冲器存储用于3D管线312和媒体管线316的命令。在一个实施例中,环形缓冲器可以附加地包括批处理命令缓冲器,其存储多个命令的批次。用于3D管线312的命令还可以包括对存储在存储器中的数据的引用,例如但不限于用于3D管线312的顶点和几何数据和/或用于媒体管线316的图像数据和存储器对象。3D管线312和媒体管线316通过经由相应管线内的逻辑执行操作或通过将一个或多个执行线程分派到图形核心阵列414来处理命令和数据。在一个实施例中,图形核心阵列414包括一个或多个块的图形核心(例如,图形核心415A、图形核心415B),每个块包括一个或多个图形核心。每个图形核心包括一组图形执行资源,这些资源包括用于执行图形和计算操作的通用和特定于图形的执行逻辑,以及固定功能纹理处理和/或机器学习以及人工智能加速逻辑。
在各个实施例中,3D管线312可以包括固定功能和可编程逻辑,以通过处理指令并向图形核心阵列414分派执行线程来处理诸如阴影着色器、几何着色器、像素着色器、片段着色器、计算着色器或其他着色器程序之类的一个或多个着色器程序。图形核心阵列414提供执行资源的统一块,以在处理这些着色器程序中使用。图形核心阵列414的图形核心415A-414B内的多用途执行逻辑(例如,执行单元)包括对各种3D API着色器语言的支持,并且可以执行与多个着色器相关联的多个同时执行线程。
在一些实施例中,图形核心阵列414包括用于执行媒体功能的执行逻辑,所述媒体功能例如视频和/或图像处理。在一个实施例中,除了图形处理操作之外,执行单元还包括可编程以执行并行通用计算操作的通用逻辑。通用逻辑可以并行或结合图1的处理器核心107或如图2A所示的核心202A-202N内的通用逻辑执行处理操作。
由在图形核心阵列414上执行的线程生成的输出数据可以将数据输出到统一返回缓冲器(URB)418中的存储器。URB 418可以存储多个线程的数据。在一些实施例中,URB 418可以用于在图形核心阵列414上执行的不同线程之间发送数据。在一些实施例中,URB 418可以附加地用于图形核心阵列上的线程与共享功能逻辑420内的固定功能逻辑之间的同步。
在一些实施例中,图形核心阵列414是可缩放的,使得该阵列包括可变数量的图形核心,每个图形核心具有基于GPE 410的目标功率和性能水平的可变数量的执行单元。在一个实施例中,执行资源是动态可缩放的,使得可以根据需要启用或禁用执行资源。
图形核心阵列414与共享功能逻辑420耦合,该共享功能逻辑包括在图形核心阵列中的图形核心之间共享的多个资源。共享功能逻辑420内的共享功能是向图形核心阵列414提供专门的补充功能的硬件逻辑单元。在各个实施例中,共享功能逻辑420包括但不限于采样器421、数学422和线程间通信(ITC)423逻辑。另外,一些实施例在共享功能逻辑420内实现一个或多个高速缓存425。
至少在对于给定专门功能的需求不足以被包括在图形核心阵列414内的情况下,实现共享功能。相反,将该专门功能的单个实例化被实现为共享功能逻辑420中的独立的实体并且在图形核心阵列414内的执行资源之间共享。在图形核心阵列414之间共享并被包括在图形核心阵列414内的精确功能集在各实施例中有所不同。在一些实施例中,由图形核心阵列414广泛使用的共享功能逻辑420内的特定共享功能可以被包括在图形核心阵列414内的共享功能逻辑416内。在各个实施例中,图形核心阵列414内的共享功能逻辑416可以包括共享功能逻辑420内的一些或全部逻辑。在一个实施例中,共享功能逻辑420内的所有逻辑元素可以在图形核心阵列414的共享功能逻辑416内被复制。在一个实施例中,共享功能逻辑420被排除在外,以有利于图形核心阵列414内的共享功能逻辑416。
执行单元
图5A-5B示出了根据本文描述的实施例的线程执行逻辑500,其包括在图形处理器核心中采用的处理元件的阵列。具有与本文中任何其他附图中的元件相同的附图标记(或名称)的图5A-5B中的元件可以以与本文中其他地方所描述的方式相似的任何方式来操作或起作用,但不限于此。图5A-5B示出了线程执行逻辑500的概观,该线程执行逻辑可以表示用图2B的每个子核心221A-221F示出的硬件逻辑。图5A表示通用图形处理器内的执行单元,而图5B表示可以在计算加速器内使用的执行单元。
如图5A所示,在一些实施例中,线程执行逻辑500包括着色器处理器502、线程分派器504、指令高速缓存506、包括多个执行单元508A-508N的可缩放执行单元阵列、采样器510、共享本地存储器511、数据高速缓存512和数据端口514。在一个实施例中,可缩放执行单元阵列可以通过基于工作负载的计算需求启用或禁用一个或多个执行单元(例如,执行单元508A、508B、508C、508D,直到508N-1和508N中的任何一个)来动态缩放。在一个实施例中,所包括的组件经由互连结构互连,该互连结构链接到每个组件。在一些实施例中,线程执行逻辑500包括通过指令高速缓存506、数据端口514、采样器510和执行单元508A-508N中的一个或多个到存储器(例如,系统存储器或高速缓冲存储器)的一个或多个连接。在一些实施例中,每个执行单元(例如,508A)是独立的可编程通用计算单元,其能够执行多个同时硬件线程,同时针对每个线程并行处理多个数据元素。在各个实施例中,执行单元508A-508N的阵列可缩放以包括任何数量的个体执行单元。
在一些实施例中,执行单元508A-508N主要用于执行着色器程序。着色器处理器502可以处理各种着色器程序,并经由线程分派器504来分派与着色器程序相关联的执行线程。在一个实施例中,线程分派器包括用于仲裁来自图形和媒体管线的线程发起请求并实例化执行单元508A-508N中的一个或多个执行单元上的所请求的线程的逻辑。例如,几何管线可以将顶点、曲面细分或几何着色器分派到线程执行逻辑以进行处理。在一些实施例中,线程分派器504还可以处理来自正在执行的着色器程序的运行时线程产生请求。
在一些实施例中,执行单元508A-508N支持指令集,该指令集包括对许多标准3D图形着色器指令的本机支持,使得来自图形库的着色器程序(例如,Direct 3D和OpenGL)以最小的翻译执行。执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如,像素着色器、片段着色器)和通用处理(例如,计算和媒体着色器)。每个执行单元508A-508N都能够进行多发出单指令多数据(SIMD)执行,并且面对更高延时的存储器访问,多线程操作实现高效的执行环境。每个执行单元内的每个硬件线程都有专用的高带宽寄存器文件和相关联的独立线程状态。执行是每时钟多发出到管线,该管线能够进行整数、单精度和双精度浮点运算、SIMD分支功能、逻辑运算、先验运算和其他杂项运算。在等待来自存储器或共享功能之一的数据时,执行单元508A-508N内的依赖性逻辑使等待线程休眠直到已经返回了所请求的数据。在等待线程在休眠时,硬件资源可以专用于处理其他线程。例如,在与顶点着色器操作相关联的延迟期间,执行单元可以对像素着色器、片段着色器或另一类型的着色器程序(包括不同的顶点着色器)执行操作。各种实施例可以通过使用单指令多线程(SIMT)来代替SIMD的使用或附加于SIMD的使用而应用于执行。对SIMD核心或操作的引用也可以应用于SIMT或与SIMT组合地应用于SIMD。
执行单元508A-508N中的每个执行单元对数据元素的阵列进行操作。数据元素的数量是“执行大小”或指令的通道数量。执行通道是用于指令内数据元素访问、屏蔽和流控制的执行的逻辑单元。通道的数量可以独立于特定图形处理器的物理算术逻辑单元(ALU)或浮点单元(FPU)的数量。在一些实施例中,执行单元508A-508N支持整数和浮点数据类型。
执行单元指令集包括SIMD指令。可以将各种数据元素作为打包数据类型存储在寄存器中,并且执行单元将基于元素的数据大小来处理各种元素。例如,当对256位宽的向量进行操作时,该向量的256位被存储在寄存器中,并且执行单元将该向量作为四个单独的54位打包数据元素(四字(QW)大小数据元素)、八个单独的32位打包数据元素(双字(DW)大小数据元素)、十六个单独的16位打包数据元素(字(W)大小数据元素)或32个单独的8位数据元素(字节(B)大小数据元素)进行操作。然而,不同的向量宽度和寄存器大小是可能。
在一个实施例中,可以将一个或多个执行单元组合成具有对融合的EU公共的线程控制逻辑(507A-507N)的融合的执行单元509A-509N。可以将多个EU融合成EU组。可以将融合的EU组中的每个EU配置为执行单独的SIMD硬件线程。融合的EU组中的EU的数量可以根据实施例而变化。此外,每EU可以执行各种SIMD宽度,包括但不限于SIMD8、SIMD16和SIMD32。每个融合的图形执行单元509A-509N包括至少两个执行单元。例如,融合的执行单元509A包括第一EU 508A、第二EU 508B以及对于第一EU 508A和第二EU 508B公共的线程控制逻辑507A。线程控制逻辑507A控制在融合的图形执行单元509A上执行的线程,从而允许融合的执行单元509A-509N内的每个EU使用公共指令指针寄存器来执行。
线程执行逻辑500中包括一个或多个内部指令高速缓存(例如,506),以对用于执行单元的线程指令进行缓存。在一些实施例中,一个或多个数据高速缓存(例如,512)被包括以在线程执行期间对线程数据进行缓存。在执行逻辑500上执行的线程也可以将显式管理的数据存储在共享本地存储器511中。在一些实施例中,采样器510被包括以提供用于3D操作的纹理采样和用于媒体操作的媒体采样。在一些实施例中,采样器510包括专门的纹理或媒体采样功能,以在将采样数据提供给执行单元之前在采样过程期间处理纹理或媒体数据。
在执行期间,图形和媒体管线经由线程产生和分派逻辑将线程发起请求发送到线程执行逻辑500。一旦一组几何对象已被处理并光栅化成像素数据,则调用着色器处理器502内的像素处理器逻辑(例如,像素着色器逻辑、片段着色器逻辑等)以进一步计算输出信息并使结果被写入到输出表面(例如,颜色缓冲器、深度缓冲器、模板缓冲器等)。在一些实施例中,像素着色器或片段着色器计算将跨光栅化对象插值的各种顶点属性的值。在一些实施例中,着色器处理器502内的像素处理器逻辑然后执行应用编程接口(API)提供的像素或片段着色器程序。为了执行着色器程序,着色器处理器502经由线程分派器504将线程分派给执行单元(例如,508A)。在一些实施例中,着色器处理器502使用采样器510中的纹理采样逻辑来访问存储在存储器中的纹理映射中的纹理数据。对纹理数据和输入几何数据的算术运算为每个几何片段计算像素颜色数据,或丢弃一个或多个像素以避免进一步处理。
在一些实施例中,数据端口514提供了用于线程执行逻辑500的存储器访问机制,以将处理后的数据输出到存储器以在图形处理器输出管线上进行进一步处理。在一些实施例中,数据端口514包括或耦合到一个或多个高速缓冲存储器(例如,数据高速缓存512),以对数据进行缓存以用于经由数据端口的存储器访问。
在一个实施例中,执行逻辑500还可以包括可以提供光线追踪加速功能的光线追踪器505。光线追踪器505可以支持包括用于光线生成的指令/功能的光线追踪指令集。光线追踪指令集可以与图2C中的光线追踪核心245所支持的光线追踪指令集相似或不同。
图5B示出了根据实施例的执行单元508的示例性内部细节。图形执行单元508可以包括指令获取单元537、通用寄存器文件阵列(GRF)524、架构寄存器文件阵列(ARF)526、线程仲裁器522、发送单元530、分支单元532,一组SIM浮点单元(FPU)534,以及在一个实施例中,一组专用整数SIMD ALU535。GRF 524和ARF 526包括与每个可以在图形执行单元508中活动的每个同时硬件线程相关联的一组通用寄存器文件和架构寄存器文件。在一个实施例中,在ARF 526中维护每线程的架构状态,而在GRF 524中存储在线程执行期间使用的数据。每个线程的执行状态(包括用于每个线程的指令指针)可以保存在ARF 526中的特定于线程的寄存器中。
在一个实施例中,图形执行单元508具有是同时多线程(SMT)和细粒度交错多线程(IMT)的组合的架构。该架构具有模块化配置,可以在设计时基于同时线程的目标数量和每执行单元的寄存器数量对该模块化配置进行微调,其中,执行单元资源在用于执行多个同时线程的逻辑上划分。图形执行单元508可以执行的逻辑线程的数量不限于硬件线程的数量,并且可以将多个逻辑线程分配给每个硬件线程。
在一个实施例中,图形执行单元508可以共同发出多个指令,每个指令可以是不同的指令。图形执行单元线程508的线程仲裁器522可以将指令分派到发送单元530、分支单元532或SIMD FPU 534之一以进行执行。每个执行线程可以访问GRF 524内的128个通用寄存器,其中,每个寄存器可以存储32个字节,其可作为32位数据元素的SIMD 8元素向量进行访问。在一个实施例中,每个执行单元线程可以访问GRF 524内的4KB,但实施例不限于此,并且在其他实施例中可以提供更多或更少的寄存器资源。在一个实施例中,图形执行单元508被划分为七个硬件线程,其可以独立地执行计算操作,但每执行单元的线程数量也可以根据实施例而变化。例如,在一个实施例中,支持了多达16个硬件线程。在七个线程可以访问4KB的实施例中,GRF 524可以存储总共28KB。在16个线程可以访问4KB的情况下,GRF 524可以存储总共64KB。灵活的寻址模式可以允许将寄存器一起寻址,以有效地构建更宽的寄存器或表示跨步矩形块数据结构(strided rectangular block data structure)。
在一个实施例中,经由由消息传递发送单元530执行的“发送”指令来分派存储器操作、采样器操作以及其他较长延时的系统通信。在一个实施例中,将分支指令分派到专用分支单元532以促进SIMD发散和最终收敛。
在一个实施例中,图形执行单元508包括一个或多个SIMD浮点单元(FPU)534以执行浮点操作。在一个实施例中,FPU 534也支持整数计算。在一个实施例中,FPU 534可以SIMD执行多达M个32位浮点(或整数)运算,或者SIMD执行多达2M个16位整数或16位浮点运算。在一个实施例中,FPU中的至少一个提供扩展的数学能力以支持高吞吐量的先验数学函数和双精度54位浮点。在一些实施例中,还存在一组8位整数SIMD ALU535,并且其可以被专门优化以执行与机器学习计算相关联的操作。
在一个实施例中,可以在图形子核心分组(例如,子切片)中实例化图形执行单元508的多个实例的阵列。为了可缩放性,产品架构师可以每子核心分组选择确切数量的执行单元。在一个实施例中,执行单元508可以跨多个执行通道执行指令。在另一个实施例中,在图形执行单元508上执行的每个线程在不同的通道上执行。
图6示出了根据实施例的附加执行单元600。执行单元600可以是用于例如图3C中的计算引擎分片340A-340D中的计算优化的执行单元,但不限于此。执行单元600的变型也可以用于如图3B所示的图形引擎分片310A-310D中。在一个实施例中,执行单元600包括线程控制单元601、线程状态单元602、指令获取/预取单元603和指令解码单元604。执行单元600还包括寄存器文件606,该寄存器文件存储可以分配给执行单元内的硬件线程的寄存器。执行单元600还包括发送单元607和分支单元608。在一个实施例中,发送单元607和分支单元608可以与图5B的图形执行单元508的发送单元530和分支单元532类似地操作。
执行单元600还包括计算单元610,其包括多种不同类型的功能单元。在一个实施例中,计算单元610包括ALU单元611,其包括算术逻辑单元的阵列。ALU单元611可以被配置为执行64位、32位和16位的整数和浮点运算。整数和浮点运算可以同时执行。计算单元610还可以包括脉动阵列612和数学单元613。脉动阵列612包括可以用于以脉动方式执行向量或其他数据并行操作的数据处理单元的W宽和D深的网络。在一个实施例中,脉动阵列612可以被配置为执行矩阵运算,例如矩阵点积运算。在一实施例中,脉动阵列612支持16位浮点运算以及8位和4位整数运算。在一个实施例中,脉动阵列612可以被配置为加速机器学习操作。在这样的实施例中,脉动阵列612可以被配置为支持bfloat 16位浮点格式。在一个实施例中,可以包括数学单元613,以与ALU单元611相比有效和较低功率的方式执行数学运算的特定子集。数学单元613可以包括可以在由其他实施例提供的图形处理引擎的共享功能逻辑中找到的数学逻辑的变型(例如,图4的共享功能逻辑420的数学逻辑422)。在一个实施例中,数学单元613可以被配置为执行32位和64位浮点运算。
线程控制单元601包括用于控制执行单元内的线程的执行的逻辑。线程控制单元601可以包括线程仲裁逻辑,以开始、停止和抢占执行单元600内的线程。线程状态单元602可以用于存储被分配以在执行单元600上执行的线程的线程状态。当线程被阻塞或空闲时,执行单元600内的线程状态使得能够快速抢占那些线程。指令获取/预取单元603可以从更高级别的执行逻辑的指令高速缓存(例如,如图5A中的指令高速缓存506)获取指令。指令获取/预取单元603还可以基于对当前执行的线程的分析,发出对要加载到指令高速缓存中的指令的预取请求。指令解码单元604可以用于解码要由计算单元执行的指令。在一个实施例中,指令解码单元604可以用作辅助解码器,以将复杂的指令解码为组分微操作。
执行单元600还包括可以由执行单元600上执行的硬件线程使用的寄存器文件606。寄存器文件606中的寄存器可以在用于执行执行单元600的计算单元610内的多个同时线程的逻辑上划分。图形执行单元600可以执行的逻辑线程的数量不限于硬件线程的数量,并且可以将多个逻辑线程分配给每个硬件线程。寄存器文件606的大小可以基于支持的硬件线程的数量而在各实施例中变化。在一实施例中,寄存器重命名可以用于动态地将寄存器分配给硬件线程。
图7是示出根据一些实施例的图形处理器指令格式700的框图。在一个或多个实施例中,图形处理器执行单元支持具有多种格式的指令的指令集。实线框示出了通常被包括在执行单元指令中的组件,而虚线包括可选的组件或仅被包括在指令的子集中的组件。在一些实施例中,所描述和示出的指令格式700是宏指令,因为它们是被提供给执行单元的指令,与一旦处理指令后就由指令解码产生的微操作相反。
在一些实施例中,图形处理器执行单元本机地支持128位指令格式710的指令。基于所选择的指令、指令选项和操作数的数量,64位压缩指令格式730对于一些指令是可用的。本机128位指令格式710提供对所有指令选项的访问,而一些选项和操作则限制于64位格式730。64位格式730中可用的本机指令因实施例而异。在一些实施例中,使用索引字段713中的一组索引值来部分压缩指令。执行单元硬件基于索引值来引用一组压缩表,并使用压缩表输出来重构128位指令格式710的本机指令。可以使用其他尺寸和指令格式。
对于每种格式,指令操作码712定义执行单元要执行的操作。执行单元跨每个操作数的多个数据元素并行执行每个指令。例如,响应于相加指令,执行单元跨表示纹理元素或图片元素的每个颜色通道执行同时相加操作。默认情况下,执行单元跨操作数的所有数据通道执行每个指令。在一些实施例中,指令控制字段714使得能够控制某些执行选项,例如通道选择(例如,预测)和数据通道顺序(例如,混乱)。对于128位指令格式710的指令,执行大小(exec-size)字段716限制将并行执行的数据通道的数量。在一些实施例中,执行大小字段716不可用于64位紧凑指令格式730。
一些执行单元指令具有多达三个操作数,包括两个源操作数src0 720、src1 722和一个目的地718。在一些实施例中,执行单元支持双目的地指令,其中,目的地之一被暗示。数据操纵指令可以具有第三源操作数(例如,SRC2 724),其中,指令操作码712确定源操作数的数量。指令的最后一个源操作数可以是随指令传递的立即数(例如,硬编码)值。
在一些实施例中,128位指令格式710包括访问/地址模式字段726,其指定例如是使用直接寄存器寻址模式还是间接寄存器寻址模式。当使用直接寄存器寻址模式时,一个或多个操作数的寄存器地址直接由指令中的位提供。
在一些实施例中,128位指令格式710包括访问/地址模式字段726,其指定指令的地址模式和/或访问模式。在一个实施例中,访问模式用于为指令定义数据访问对齐。一些实施例支持访问模式,包括16字节对齐的访问模式和1字节对齐的访问模式,其中,访问模式的字节对齐确定指令操作数的访问对齐。例如,当处于第一模式时,该指令可以将字节对齐的寻址用于源和目的地操作数,而当处于第二模式时,该指令可以将16字节对齐的寻址用于所有源和目的地操作数。
在一个实施例中,访问/地址模式字段726的地址模式部分确定指令是使用直接寻址还是间接寻址。当使用直接寄存器寻址模式时,指令中的位直接提供一个或多个操作数的寄存器地址。当使用间接寄存器寻址模式时,可以基于指令中的地址寄存器值和地址立即数字段来计算一个或多个操作数的寄存器地址。
在一些实施例中,基于操作码712位字段对指令进行分组,以简化操作码解码740。对于8位操作码,位4、5和6允许执行单元确定操作码的类型。所示的精确操作码分组仅是示例。在一些实施例中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如,移动(mov)、比较(cmp))。在一些实施例中,移动和逻辑组742共享五个最高有效位(MSB),其中,移动(mov)指令的形式为0000xxxxb,而逻辑指令的形式为0001xxxxb。流控制指令组744(例如,调用、跳转(jmp))包括0010xxxxb(例如,0x20)形式的指令。杂项指令组746包括指令的混合,包括0011xxxxb(例如,0x30)形式的同步指令(例如,等待、发送)。并行数学指令组748包括0100xxxxb(例如,0x40)形式的逐组件的算术指令(例如,加法、乘法(mul))。并行数学组748跨数据通道并行执行算术运算。向量数学组750包括形式为0101xxxxb(例如,0x50)的算术指令(例如,dp4)。向量数学组对向量操作数执行算术运算,例如点积计算。在一个实施例中,所示的操作码解码器740可以用于确定将使用执行单元的哪个部分来执行解码的指令。例如,一些指令可以被指定为将由脉动阵列执行的脉动指令。诸如光线追踪指令(未示出)之类的其他指令可以被路由到执行逻辑的切片或分区内的光线追踪核心或光线追踪逻辑。
图形管线
图8是图形处理器800的另一实施例的框图。具有与本文中任何其他图的元件相同的附图标记(或名称)的图8的元件可以以类似于本文中其他地方所描述的任何方式来操作或起作用,但不限于此。
在一些实施例中,图形处理器800包括几何管线820、媒体管线830、显示引擎840、线程执行逻辑850和渲染输出管线870。在一些实施例中,图形处理器800是多核处理系统内的图形处理器,该多核处理系统包括一个或多个通用处理核心。通过对一个或多个控制寄存器(未示出)的寄存器写操作或通过经由环形互连802发出给图形处理器800的命令来控制图形处理器。在一些实施例中,环形互连802将图形处理器800耦合到其他处理组件,例如其他图形处理器或通用处理器。来自环形互连802的命令由命令流式传输器803解释,该命令流式传输器将指令提供给几何管线820或媒体管线830的个体组件。
在一些实施例中,命令流式传输器803指示顶点获取器805的操作,该顶点获取器从存储器读取顶点数据并执行由命令流式传输器803提供的顶点处理命令。在一些实施例中,顶点获取器805将顶点数据提供给顶点着色器807,它对每个顶点执行坐标空间变换和照明操作。在一些实施例中,顶点获取器805和顶点着色器807通过经由线程分派器831将执行线程分派给执行单元852A-852B来执行顶点处理指令。
在一些实施例中,执行单元852A-852B是向量处理器的阵列,其具有用于执行图形和媒体操作的指令集。在一些实施例中,执行单元852A-852B具有特定于每个阵列或在阵列之间共享的附接的L1高速缓存851。可以将高速缓存配置为数据高速缓存、指令高速缓存或单个高速缓存,该单个高速缓存被分区为在不同分区中包含数据和指令。
在一些实施例中,几何管线820包括曲面细分组件,以执行3D对象的硬件加速的曲面细分。在一些实施例中,可编程的外壳着色器811配置曲面细分操作。可编程域着色器817提供曲面细分输出的后端评估。曲面细分器813在外壳着色器811的方向上操作,并包含专用的逻辑,以基于作为输入提供给几何管线820的粗略几何模型生成一组详细的几何对象。在一些实施例中,如果未使用曲面细分,则曲面细分组件(例如,外壳着色器811、曲面细分器813和域着色器817)可以被绕过。
在一些实施例中,可以通过分派给执行单元852A-852B的一个或多个线程由几何着色器819处理完整的几何对象,或者可以直接进行到修剪器829。在一些实施例中,几何着色器在整个几何对象上进行操作,而不是图形管线先前阶段中的顶点或顶点补丁。如果禁用了曲面细分,则几何着色器819从顶点着色器807接收输入。在一些实施例中,如果禁用了曲面细分单元,则几何着色器819可由几何着色器程序编程以执行几何曲面细分。
在光栅化之前,修剪器829处理顶点数据。修剪器829可以是具有修剪和几何着色器功能的固定功能修剪器或可编程修剪器。在一些实施例中,渲染输出管线870中的光栅化器和深度测试组件873分派像素着色器,以将几何对象转换成每像素表示。在一些实施例中,像素着色器逻辑被包括在线程执行逻辑850中。在一些实施例中,应用可以绕过光栅化器和深度测试组件873,并经由流输出单元823访问未光栅化的顶点数据。
图形处理器800具有允许数据和消息在处理器的主要组件之间传递的互连总线、互连结构或某个其他互连机制。在一些实施例中,执行单元852A-852B和相关联的逻辑单元(例如,L1高速缓存851、采样器854、纹理高速缓存858等)经由数据端口856互连以执行存储器访问并与处理器的渲染输出管线组件通信。在一些实施例中,采样器854、高速缓存851、858和执行单元852A-852B均具有单独的存储器访问路径。在一个实施例中,纹理高速缓存858也可以被配置为采样器高速缓存。
在一些实施例中,渲染输出管线870包含光栅化器和深度测试组件873,其将基于顶点的对象转换为相关联的基于像素的表示。在一些实施例中,光栅化器逻辑包括加窗器/掩蔽器单元以执行固定功能的三角形和线光栅化。在一些实施例中,相关联的渲染高速缓存878和深度高速缓存879也是可用的。像素操作组件877对数据执行基于像素的操作,但在一些情况下,与2D操作相关联的像素操作(例如,具有混合的位块图像传输)由2D引擎841执行,或在显示时由显示器使用覆盖显示平面的控制器843替代。在一些实施例中,共享的L3高速缓存875可用于所有图形组件,从而允许在不使用主系统存储器的情况下共享数据。
在一些实施例中,图形处理器媒体管线830包括媒体引擎837和视频前端834。在一些实施例中,视频前端834从命令流式传输器803接收管线命令。在一些实施例中,媒体管线830包括单独的命令流式传输器。在一些实施例中,视频前端834在将命令发送给媒体引擎837之前处理媒体命令。在一些实施例中,媒体引擎837包括线程产生功能以产生线程以经由线程分派器831分派给线程执行逻辑850。
在一些实施例中,图形处理器800包括显示引擎840。在一些实施例中,显示引擎840在处理器800的外部并且经由环形互连802或某个其他互连总线或结构与图形处理器耦合。在一些实施例中,显示引擎840包括2D引擎841和显示控制器843。在一些实施例中,显示引擎840包含能够独立于3D管线操作的专用逻辑。在一些实施例中,显示控制器843与显示设备(未示出)耦合,该显示设备可以是如膝上型计算机中的系统集成显示设备,或者是经由显示设备连接器附接的外部显示设备。
在一些实施例中,几何结构管线820和媒体管线830可配置为基于多个图形和媒体编程接口来执行操作,并且不特定于任何一个应用编程接口(API)。在一些实施例中,用于图形处理器的驱动程序软件将特定于特定图形或媒体库的API调用转换为可以由图形处理器处理的命令。在一些实施例中,提供对全部来自Khronos集团的开放图形库(OpenGL)、开放计算语言(OpenCL)和/或Vulkan图形和计算API的支持。在一些实施例中,也可以提供对来自微软公司的Direct3D库的支持。在一些实施例中,可以支持这些库的组合。还可以为开源计算机视觉库(OpenCV)提供支持。如果可以从将来的API的管线到图形处理器的管线进行映射,则还将支持具有兼容3D管线的将来的API。
图形管线编程
图9A是说明根据一些实施例的图形处理器命令格式900的框图。图9B是示出根据实施例的图形处理器命令序列910的框图。图9A中的实线框示出了通常被包括在图形命令中的组件,而虚线包括可选的组件或仅被包括在图形命令的子集中的组件。图9A的示例性图形处理器命令格式900包括用于标识客户端902的数据字段、命令操作代码(操作码)904和用于命令的数据906。在一些命令中还包括子操作码905和命令大小908。
在一些实施例中,客户端902指定处理命令数据的图形设备的客户端单元。在一些实施例中,图形处理器命令解析器检查每个命令的客户端字段,以调节该命令的进一步处理并将命令数据路由到适当的客户端单元。在一些实施例中,图形处理器客户端单元包括存储器接口单元、渲染单元、2D单元、3D单元和媒体单元。每个客户端单元都有处理命令的对应处理管线。一旦客户端单元接收到该命令,客户端单元就读取操作码904以及子操作码905(如果存在的话)以确定要执行的操作。客户端单元使用数据字段906中的信息来执行命令。对于一些命令,期望显式的命令大小908来指定命令的大小。在一些实施例中,命令解析器基于命令操作码来自动确定至少一些命令的大小。在一些实施例中,命令是经由双字的倍数对齐的。可以使用其他命令格式。
图9B中的流程图示出了示例性图形处理器命令序列910。在一些实施例中,以图形处理器的实施例为特征的数据处理系统的软件或固件使用所示的命令序列的版本来建立、执行并终止一组图形操作。仅出于示例目的示出和描述了示例命令序列,因为实施例不限于这些特定命令或该命令序列。此外,命令可以作为命令序列中的一批命令发出,使得图形处理器将至少部分同时处理命令序列。
在一些实施例中,图形处理器命令序列910可以以管线刷新命令912开始,以使任何活动的图形管线完成该管线的当前挂起的命令。在一些实施例中,3D管线922和媒体管线924不同时操作。执行管线刷新以使活动图形管线完成所有挂起的命令。响应于管线刷新,图形处理器的命令解析器将暂停命令处理,直到活动的绘图引擎完成挂起的操作并且相关的读取缓存被无效为止。可选地,可以将渲染高速缓存中标记为“脏”的任何数据刷新到存储器。在一些实施例中,管线刷新命令912可以用于管线同步或在将图形处理器置于低功率状态之前使用。
在一些实施例中,当命令序列需要图形处理器在管线之间显式切换时,使用管线选择命令913。在一些实施例中,在发出管线命令之前,在执行上下文内仅需要管线选择命令913一次,除非上下文要为两个管线发出命令。在一些实施例中,紧接在经由管线选择命令913的管线切换之前需要管线刷新命令912。
在一些实施例中,管线控制命令914配置用于操作的图形管线,并用于对3D管线922和媒体管线924进行编程。在一些实施例中,管线控制命令914为活动管线配置管线状态。在一个实施例中,管线控制命令914用于管线同步,并在处理一批命令之前从活动管线内的一个或多个高速缓冲存储器中清除数据。
在一些实施例中,返回缓冲器状态命令916用于为相应的管线配置一组返回缓冲器以写入数据。一些管线操作需要分配、选择或配置一个或多个返回缓冲器,在处理期间操作将中间数据写入该返回缓冲器中。在一些实施例中,图形处理器还使用一个或多个返回缓冲器来存储输出数据并执行跨线程通信。在一些实施例中,返回缓冲器状态916包括选择用于一组管线操作的返回缓冲器的大小和数量。
命令序列中的其余命令基于用于操作的活动管线而不同。基于管线确定920,命令序列针对以3D管线状态930开始的3D管线922进行定制,或针对以媒体管线状态940开始的媒体管线924进行定制。
用于配置3D管线状态930的命令包括用于要在3D图元命令处理之前配置的顶点缓冲器状态、顶点元素状态、恒定颜色状态、深度缓冲器状态和其他状态变量的3D状态设置命令。这些命令的值至少部分地基于使用中的特定3D API来确定。在一些实施例中,如果将不使用某些管线元素,则3D管线状态930命令也能够选择性地禁用或绕过那些元素。
在一些实施例中,3D图元932命令用于提交要由3D管线处理的3D图元。经由3D图元932命令传递到图形处理器的命令和相关联的参数将转发到图形管线中的顶点获取功能。顶点获取功能使用3D图元932命令数据来生成顶点数据结构。顶点数据结构存储在一个或多个返回缓冲器中。在一些实施例中,3D图元932命令用于经由顶点着色器对3D图元执行顶点操作。为了处理顶点着色器,3D管线922将着色器执行线程分派给图形处理器执行单元。
在一些实施例中,经由执行934命令或事件来触发3D管线922。在一些实施例中,寄存器写触发命令执行。在一些实施例中,经由命令序列中的“执行(go)”或“踢”命令来触发执行。在一个实施例中,使用管线同步命令来触发命令执行以通过图形管线刷新命令序列。3D管线将对3D图元执行几何处理。一旦操作完成,就对所得的几何对象进行栅格化,并且像素引擎为所得的像素进行着色。对于那些操作,还可以包括用于控制像素着色和像素后端操作的附加命令。
在一些实施例中,当执行媒体操作时,图形处理器命令序列910遵循媒体管线924路径。通常,用于媒体管线924的编程的特定用途和方式取决于要执行的媒体或计算操作。在媒体解码期间,可以将特定的媒体解码操作卸载到媒体管线。在一些实施例中,还可以绕过媒体管线,并且可以使用由一个或多个通用处理核心提供的资源来全部或部分地执行媒体解码。在一个实施例中,媒体管线还包括用于通用图形处理器单元(GPGPU)操作的元件,其中,图形处理器用于使用与图形图元渲染不显式相关的计算着色器程序来执行SIMD向量操作。
在一些实施例中,以与3D管线922类似的方式配置媒体管线924。在媒体对象命令942之前,将用于配置媒体管线状态940的一组命令分派或放置到命令队列中。在一些实施例中,用于媒体管线状态940的命令包括用于配置将用于处理媒体对象的媒体管线元素的数据。这包括在媒体管线内配置视频解码和视频编码逻辑的数据,例如编码或解码格式。在一些实施例中,用于媒体管线状态940的命令还支持使用一个或多个指向包含一批状态设置的“间接”状态元素的指针。
在一些实施例中,媒体对象命令942提供指向媒体对象的指针以供媒体管线处理。媒体对象包括包含要处理的视频数据的存储器缓冲器。在一些实施例中,在发出媒体对象命令942之前,所有媒体管线状态必须是有效的。一旦配置了管线状态并且将媒体对象命令942排队,则经由执行命令944或等效的执行事件来触发媒体管线924(例如,寄存器写)。然后,可以通过3D管线922或媒体管线924提供的操作对来自媒体管线924的输出进行后处理。在一些实施例中,以与媒体操作类似的方式配置和执行GPGPU操作。
图形软件架构
图10示出了根据一些实施例的用于数据处理系统1000的示例性图形软件架构。在一些实施例中,软件架构包括3D图形应用1010、操作系统1020和至少一个处理器1030。在一些实施例中,处理器1030包括图形处理器1032和一个或多个通用处理器核心1034。图形应用1010和操作系统1020均在数据处理系统的系统存储器1050中执行。
在一些实施例中,3D图形应用1010包含一个或多个着色器程序,包括着色器指令1012。着色器语言指令可以采用高级着色器语言,例如Direct3D的高级着色器语言(HLSL)、OpenGL Shader Language(GLSL),等等。该应用还包括适合于由通用处理器核心1034执行的机器语言的可执行指令1014。该应用还包括由顶点数据定义的图形对象1016。
在一些实施例中,操作系统1020是来自微软公司的微软
Figure BDA0002555852740000361
操作系统、专有的类UNIX操作系统或使用Linux内核的变型的开源的类UNIX操作系统。操作系统1020可以支持图形API 1022,例如Direct3D API、OpenGL API或Vulkan API。当使用Direct3DAPI时,操作系统1020使用前端着色器编译器1024将HLSL的任何着色器指令1012编译为较低级的着色器语言。该编译可以是即时(JIT)编译,或者应用可以执行着色器预编译。在一些实施例中,在3D图形应用1010的编译期间将高级着色器编译为低级着色器。在一些实施例中,以中间形式(例如,由Vulkan API使用的标准便携式中间表示(SPIR)的版本)提供着色器指令1012。
在一些实施例中,用户模式图形驱动程序1026包含后端着色器编译器1027,以将着色器指令1012转换成特定于硬件的表示。当使用OpenGL API时,将GLSL高级语言的着色器指令1012传递给用户模式图形驱动程序1026以进行编译。在一些实施例中,用户模式图形驱动程序1026使用操作系统内核模式功能1028与内核模式图形驱动程序1029通信。在一些实施例中,内核模式图形驱动程序1029与图形处理器1032通信以分派命令和指令。
IP核心实施方式
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性代码来实现,该代表代码表示和/或定义诸如处理器之类的集成电路内的逻辑。例如,机器可读介质可以包括表示处理器内的各种逻辑的指令。当由机器读取时,指令可以使机器制造逻辑以执行本文描述的技术。这样的表示(称为“IP核心”)是集成电路的可重用逻辑单元,其可以作为描述集成电路结构的硬件模型存储在有形的机器可读介质中。可以将硬件模型提供给各种客户或制造设施,其将硬件模型加载到制造集成电路的制造机器上。可以制造集成电路,使得该电路执行与本文描述的任何实施例相关联地描述的操作。
图11A是示出根据实施例的可以用于制造集成电路以执行操作的IP核心开发系统1100的框图。IP核心开发系统1100可以用于生成模块化的可重用的设计,其可以被并入更大的设计中或者用于构建整个集成电路(例如,SOC集成电路)。设计设施1130可以以高级编程语言(例如,C/C++)生成IP核心设计的软件仿真1110。软件仿真1110可以用于使用仿真模型1112来设计、测试和验证IP核心的行为。仿真模型1112可以包括功能、行为和/或时序仿真。然后可以从仿真模型1112创建或合成寄存器传送级别(RTL)设计1115。RTL设计1115是集成电路的行为的抽象,该行为对硬件寄存器之间的数字信号流建模,包括使用建模的数字信号执行的相关联的逻辑。除了RTL设计1115之外,还可以创建、设计或合成逻辑级别或晶体管级别的较低级别设计。因此,初始设计和仿真的特定细节可以不同。
RTL设计1115或等同物可以由设计设施进一步合成为硬件模型1120,其可以采用硬件描述语言(HDL)或物理设计数据的某个其他表示。可以进一步模拟或测试HDL以验证IP核心设计。可以使用非易失性存储器1140(例如,硬盘、闪存或任何非易失性存储介质)来存储IP核心设计,以传递给第三方制造设施1165。替代地,可以通过有线连接1150或无线连接1160(例如,经由因特网)来发送IP核心设计。然后,制造设施1165可以制造至少部分基于IP核心设计的集成电路。可以将制造的集成电路配置为执行根据本文所述的至少一个实施例的操作。
图11B示出了根据本文所述的一些实施例的集成电路封装组装件1170的截面侧视图。集成电路封装组装件1170示出了如本文所述的一个或多个处理器或加速器设备的实施方式。封装组装件1170包括连接到衬底1180的多个硬件逻辑单元1172、1174。逻辑1172、1174可以至少部分地以可配置逻辑或固定功能逻辑硬件来实现,并且可以包括以下各项中的任一项的一个或多个部分:处理器核心、图形处理器或本文描述的其他加速器设备。每个逻辑单元1172、1174可以被实现在半导体管芯内并且经由互连结构1173与衬底1180耦合。互连结构1173可以被配置为在逻辑1172、1174和衬底1180之间路由电信号,并且可以包括互连,例如但不限于凸块或立柱。在一些实施例中,互连结构1173可以被配置为路由电信号,例如与逻辑1172、1174的操作相关联的输入/输出(I/O)信号和/或电源或接地信号。在一些实施例中,衬底1180是基于环氧树脂的层压衬底。在其他实施例中,衬底1180可以包括其他合适类型的衬底。封装组装件1170可以经由封装互连1183连接到其他电子设备。封装互连1183可以耦合到衬底1180的表面,以将电信号路由到其他电子设备,例如母板、其他芯片组或多芯片模块。
在一些实施例中,逻辑单元1172、1174与桥1182电耦合,该桥被配置为在逻辑1172、1174之间路由电信号。桥1182可以是密集的互连结构,其提供对电信号的路由。桥1182可以包括由玻璃或合适的半导体材料组成的桥衬底。可以在桥衬底上形成电路由特征,以在逻辑1172、1174之间提供芯片到芯片的连接。
尽管示出了两个逻辑单元1172、1174和桥1182,但是本文描述的实施例可以在一个或多个管芯上包括更多或更少的逻辑单元。一个或多个管芯可以通过零个或更多个桥连接,因为当逻辑被包括在单个管芯上时,可以不包括桥1182。替代地,可以通过一个或多个桥来连接多个管芯或逻辑单元。另外,多个逻辑单元、管芯和桥可以以其他可能的配置(包括三维配置)连接在一起。
图11C示出了封装组装件1190,该封装组装件包括连接至衬底1180(例如,基础管芯)的多个硬件逻辑小芯片单元。如本文所述的图形处理单元、并行处理器和/或计算加速器可以由单独制造的各种硅小芯片组成。在此上下文中,小芯片是至少部分封装的集成电路,其包括可以与其他小芯片组装成更大封装的不同逻辑单元。可以将具有不同IP核心逻辑的各种小芯片集组装成单个器件。另外,可以使用有源插入器技术将小芯片集成为基础管芯或基础小芯片。本文描述的概念使得能够在GPU内的不同形式的IP之间进行互连和通信。IP核心可以使用不同的工艺技术进行制造,并在制造器件进行组合,这避免了将多个IP(特别是在具有若干个IP的大型SoC上的)集成到相同制造过程的复杂性。使得能够使用多种工艺技术可以缩短产品上市时间,并提供有成本效益的方式来创建多个产品SKU。此外,解聚的IP更适合独立选通供电,可以将给定工作负载中未使用的组件断电,从而降低总体功耗。
硬件逻辑小芯片可以包括专用硬件逻辑小芯片1172、逻辑或I/O小芯片1174和/或存储器小芯片1175。硬件逻辑小芯片1172和逻辑或I/O小芯片1174可以至少部分地以可配置逻辑或固定功能逻辑硬件来实现,并且可以包括本文所述的处理器核心、图形处理器、并行处理器或其他加速器设备中的任何一个的一个或多个部分。存储器小芯片1175可以是DRAM(例如,GDDR、HBM)存储器或高速缓冲(SRAM)存储器。
每个小芯片可以被制造为单独的半导体管芯并且经由互连结构1173与衬底1180耦合。互连结构1173可以被配置为在各个小芯片和衬底1180内的逻辑之间路由电信号。互连结构1173可以包括例如但不限于凸块或立柱的互连。在一些实施例中,互连结构1173可以被配置为路由电信号,例如与逻辑、I/O和存储器小芯片的操作相关联的输入/输出(I/O)信号和/或电源或接地信号。
在一些实施例中,衬底1180是基于环氧树脂的层压衬底。在其他实施例中,衬底1180可以包括其他合适类型的衬底。封装组装件1190可以经由封装互连1183连接到其他电子设备。封装互连1183可以耦合到衬底1180的表面,以将电信号路由到其他电子设备,例如母板、其他芯片组或多芯片模块。
在一些实施例中,逻辑或I/O小芯片1174和存储器小芯片1175可以经由桥1187电耦合,该桥被配置为在逻辑或I/O小芯片1174和存储器小芯片1175之间路由电信号。桥1187可以是为电信号提供路由的密集互连结构。桥1187可以包括由玻璃或合适的半导体材料构成的桥衬底。可以在桥衬底上形成电路由特征,以在逻辑或I/O小芯片1174和存储器小芯片1175之间提供芯片到芯片的连接。桥1187也可以称为硅桥或互连桥。例如,在一些实施例中,桥1187是嵌入式多管芯互连桥(EMIB)。在一些实施例中,桥1187可以简单地是从一个小芯片到另一小芯片的直接连接。
衬底1180可以包括用于I/O 1191、高速缓冲存储器1192和其他硬件逻辑1193的硬件组件。可以将结构1185嵌入在衬底1180中,以实现各种逻辑小芯片与衬底1180内的逻辑1191、1193之间的通信。在一个实施例中,I/O 1191、结构1185、高速缓存、桥和其他硬件逻辑1193可以集成到层叠在衬底1180之上的基础管芯中。
在各个实施例中,封装组装件1190可以包括通过结构1185或一个或多个桥1187互连的更少或更多数量的组件和小芯片。封装组装件1190内的小芯片可以3D或2.5D排列来布置。通常,桥结构1187可以用于促进例如逻辑或I/O小芯片与存储器小芯片之间的点到点互连。结构1185可以用于将各种逻辑和/或I/O小芯片(例如,小芯片1172、1174、1191、1193)与其他逻辑和/或I/O小芯片互连。在一个实施例中,衬底内的高速缓冲存储器1192可以用作封装组装件1190的全局高速缓存、分布式全局高速缓存的一部分,或者用作结构1185的专用高速缓存。
图11D示出了根据实施例的包括可互换小芯片1195的封装组装件1194。可互换小芯片1195可以被组装到一个或多个基础小芯片1196、1198上的标准化插槽中。基础小芯片1196、1198可以经由桥互连1197耦合,该桥互连可以类似于本文所述的其他桥互连,并且可以是例如EMIB。存储器小芯片也可以经由桥互连连接到逻辑或I/O小芯片。I/O和逻辑小芯片可以经由互连结构进行通信。基础小芯片均可以支持标准化格式的一个或多个插槽,以用于逻辑或I/O或存储器/高速缓存之一。
在一个实施例中,可以将SRAM和功率输送电路制造成基础小芯片1196、1198中的一个或多个,其可以使用与堆叠在基础小芯片之上的可互换小芯片1195不同的工艺技术来制造。例如,可以使用较大的工艺技术来制造基础小芯片1196、1198,而可以使用较小的工艺技术来制造可互换小芯片。可互换小芯片1195中的一个或多个可以是存储器(例如,DRAM)小芯片。可以基于功率和/或使用该封装组装件1194的产品的目标性能为封装组装件1194选择不同的存储器密度。此外,可以在组装时基于功率和/或产品的目标性能选择具有不同数量功能单元类型的逻辑小芯片。此外,可以将包含不同类型IP逻辑核心的小芯片插入可互换小芯片插槽中,从而实现可以混合和匹配不同技术IP块的混合处理器设计。
示例性片上系统集成电路
图12-13示出了根据本文所述的各种实施例的示例性集成电路和相关联的图形处理器,其可以使用一个或多个IP核心来制造。除了所示内容之外,还可以包括其他逻辑和电路,包括附加的图形处理器/核心、外围接口控制器或通用处理器核心。
图12是示出根据实施例的可以使用一个或多个IP核心来制造的示例性片上系统集成电路1200的框图。示例性集成电路1200包括一个或多个应用处理器1205(例如,CPU)、至少一个图形处理器1210,并且可以附加地包括图像处理器1215和/或视频处理器1220,它们中的任何一个可以是来自相同或多个不同设计设施的模块化的IP核心。集成电路1200包括外围或总线逻辑,该外围或总线逻辑包括USB控制器1225、UART控制器1230、SPI/SDIO控制器1235和I2S/I2C控制器1240。另外,集成电路可以包括耦合至高清晰度多媒体接口(HDMI)控制器1250和移动工业处理器接口(MIPI)显示接口1255中的一个或多个的显示设备1245。可以由包括闪存和闪存控制器的闪存子系统1260提供存储装置。可以经由存储器控制器1265提供存储器接口以用于访问SDRAM或SRAM存储器设备。一些集成电路还包括嵌入式安全引擎1270。
图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中的顶点或图像/纹理数据之外,所述图形处理器还可以引用存储在存储器中的顶点或图像/纹理数据。在一个实施例中,一个或多个MMU1320A-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),其提供了统一的着色器核心架构,其中,单个核心或单个核心类型可以执行所有类型的可编程着色器代码,包括用于实现顶点着色器、片段着色器和/或计算着色器的着色器程序代码。存在的着色器核心的确切数量可以在实施例和实施方式之间变化。另外,图形处理器1340包括核心间任务管理器1345,其充当线程分派器以将执行线程分派给一个或多个着色器核心1355A-1355N,以及分片单元1358以加速用于基于分片的渲染的分片操作,其中,在图像空间中细分用于场景的渲染操作,例如以利用场景内的局部空间一致性或以优化内部高速缓存的使用。
机器学习概述
机器学习算法是可以基于一组数据进行学习的算法。机器学习算法的实施例可以被设计为对数据集内的高级抽象进行建模。例如,图像识别算法可以用于确定给定输入所属的若干个类别中的哪一个;回归算法可以在给定输入的情况下输出数值;并且模式识别算法可以用于生成翻译的文本或执行文本到语音和/或语音识别。
机器学习算法的示例性类型是神经网络。存在许多类型的神经网络;一种简单类型的神经网络是前馈网络。前馈网络可以被实现为非循环图,其中,节点按层排列。典型地,前馈网络拓扑包括被至少一个隐藏层分开的输入层和输出层。隐藏层将由输入层接收的输入转换为对于在输出层中生成输出有用的表示形式。网络节点经由边完全连接到相邻层中的节点,但是每一层内的节点之间没有边。在前馈网络的输入层的节点处接收的数据经由激活函数传播(即,“前馈”)到输出层的节点,该激活函数基于分别与连接层的每个边相关联的系数(“权重”)来计算网络中每个连续层的节点的状态。取决于正被执行的算法所表示的特定模型,来自神经网络算法的输出可以采用各种形式。
在机器学习算法可以用于对特定问题进行建模之前,使用训练数据集来对算法进行训练。训练神经网络涉及选择网络拓扑,使用表示正由网络建模的问题的训练数据集,以及调整权重,直到网络模型对训练数据集的所有实例以最小误差执行。例如,在神经网络的监督学习训练过程期间,将由网络响应于表示训练数据集中实例的输入而产生的输出与该实例的“正确”标记的输出进行比较,计算表示输出和标记的输出之间的差的误差信号,并且调整与连接相关联的权重,以在误差信号反向传播通过网络各层时最小化该误差。当从训练数据集的实例生成的每个输出的误差最小时,该网络被认为是“经训练的”。
机器学习算法的准确性受到用于训练算法的数据集质量的显著影响。训练过程可能是计算密集的,并且在常规的通用处理器上可能需要大量时间。因此,并行处理硬件用于训练许多类型的机器学习算法。这对于优化神经网络的训练特别有用,因为在调整神经网络中的系数时执行的计算自然地适合于并行实施方式。具体而言,许多机器学习算法和软件应用已被适应为利用通用图形处理设备内的并行处理硬件。
图14是机器学习软件栈1400的概括图。机器学习应用1402可以被配置为使用训练数据集来训练神经网络,或使用经训练的深度神经网络来实现机器智能。机器学习应用1402可以包括用于神经网络的训练和推理功能和/或可以在部署之前用于训练神经网络的专用软件。机器学习应用1402可以实现任何类型的机器智能,包括但不限于图像识别、映射和定位、自主导航、语音合成、医学成像或语言翻译。
可以经由机器学习框架1404实现对机器学习应用1402的硬件加速。机器学习框架1404可以提供机器学习原语的库。机器学习原语是由机器学习算法通常执行的基本操作。在没有机器学习框架1404的情况下,将需要机器学习算法的开发者创建和优化与机器学习算法相关联的主要计算逻辑,然后在开发新的并行处理器时重新优化计算逻辑。相反,机器学习应用可以配置为使用由机器学习框架1404提供的原语来执行必要的计算。示例性原语包括张量卷积、激活函数和池化,它们是在训练卷积神经网络(CNN)的同时执行的计算操作。机器学习框架1404还可以提供原语以实现由许多机器学习算法执行的基本线性代数子程序,例如矩阵和向量运算。
机器学习框架1404可以处理从机器学习应用1402接收的输入数据,并且向计算框架1406生成适当的输入。计算框架1406可以对提供给GPGPU驱动程序1408的基础指令进行抽象以使得机器学习框架1404能够利用经由GPGPU硬件1410的硬件加速而无需机器学习框架1404深入了解GPGPU硬件1410的架构。另外,计算框架1406可以实现跨GPGPU硬件1410的各种类型和代的机器学习框架1404的硬件加速。
机器学习神经网络实施方式
由本文描述的实施例提供的计算架构可以被配置为执行特别适合于训练和部署用于机器学习的神经网络的并行处理类型。神经网络可以概括为具有图关系的功能网络。如本领域中已知的,在机器学习中使用多种类型的神经网络实施方式。如前所述,一种示例性类型的神经网络是前馈网络。
第二种示例性类型的神经网络的是卷积神经网络(CNN)。CNN是专门的前馈神经网络,其用于处理具有已知的网格状拓扑的数据,例如图像数据。因此,CNN通常用于计算视觉和图像识别应用,但是它们也可以用于其他类型的模式识别,例如语音和语言处理。CNN输入层中的节点被组织为一组“过滤器”(受视网膜中感受野启发的特征检测器),并且每组过滤器的输出均传播到网络的连续层中的节点。用于CNN的计算包括将卷积数学运算应用于每个过滤器以产生该过滤器的输出。卷积是一种专门的数学运算,其由两个函数执行以产生第三函数,该第三函数是两个原始函数之一的修改版本。在卷积网络术语中,卷积的第一函数可以称为输入,而第二函数可以称为卷积内核。输出可以被称为特征图。例如,卷积层的输入可以是定义输入图像的各种颜色分量的数据的多维数组。卷积内核可以是参数的多维数组,其中,参数通过针对神经网络的训练过程进行适应。
递归神经网络(RNN)是前馈神经网络的一族,其包括层之间的反馈连接。RNN通过跨神经网络的不同部分共享参数数据来实现顺序数据的建模。用于RNN的架构包括循环。循环表示变量的当前值对将来某个时间的其自身值的影响,因为来自RNN的输出数据的至少一部分用作反馈,以用于处理序列中的后续输入。由于可以组成语言数据的可变性质,此特征使RNN对语言处理特别有用。
下面描述的图呈现了示例性前馈、CNN和RNN网络,并且描述了用于分别训练和部署那些类型的网络中的每一种的一般过程。将理解的是,这些描述对于本文描述的任何特定实施例是示例性的并且非限制性的,并且所示出的概念通常可以总体上应用于深度神经网络和机器学习技术。
上述示例性神经网络可以用于执行深度学习。深度学习是使用深度神经网络的机器学习。深度学习中使用的深度神经网络是由多个隐藏层组成的人工神经网络,与仅包括单个隐藏层的浅神经网络相反。要训练更深的神经网络通常更加计算密集。然而,网络的附加隐藏层实现多步模式识别,其相对于浅机器学习技术得到减少的输出误差。
深度学习中使用的深度神经网络通常包括用于执行特征识别的前端网络,该前端网络耦合到表示可以基于提供给模型的特征表示来执行操作(例如,对象分类、语音识别等)的数学模型的后端网络。深度学习使机器学习能够在不需要为模型执行手工制作的特征工程的情况下被执行。相反,深度神经网络可以基于输入数据内的统计结构或相关性来学习特征。可以将学习到的特征提供给数学模型,该数学模型可以将检测到的特征映射到输出。由网络使用的数学模型通常专用于要执行的特定任务,并且将使用不同的模型来执行不同的任务。
一旦构建了神经网络,就可以将学习模型应用于网络以训练网络执行特定任务。学习模型描述了如何在模型内调整权重以减少网络的输出误差。误差的反向传播是用于训练神经网络的常用方法。输入向量被呈现给网络以进行处理。使用损失函数将网络的输出与所需的输出进行比较,并为输出层中的每个神经元计算误差值。然后将误差值反向传播,直到每个神经元都有相关联的误差值,该误差值大致表示其对原始输出的贡献。然后,网络可以使用算法(例如,随机梯度下降算法)从那些误差中学习,以更新神经网络的权重。
图15A-15B示出了示例性卷积神经网络。图15A示出了CNN内的各个层。如图15A所示,用于对图像处理进行建模的示例性CNN可以接收描述输入图像的红、绿和蓝(RGB)分量的输入1502。输入1502可以由多个卷积层(例如,第一卷积层1504、第二卷积层1506)处理。来自多个卷积层的输出可以可选地由一组全连接层1508处理。全连接层中的神经元具有到前一层中所有激活的完全连接,如先前针对前馈网络所述。来自全连接层1508的输出可以用于生成来自网络的输出结果。可以使用矩阵乘法而不是卷积来计算全连接层1508内的激活。并非所有的CNN实施方式都利用全连接层1508。例如,在一些实施方式中,第二卷积层1506可以为CNN生成输出。
卷积层是稀疏连接的,这与在全连接层1508中发现的传统神经网络配置不同。传统的神经网络层是完全连接的,使得每个输出单元都与每个输入单元交互。然而,卷积层是稀疏连接的,因为字段的卷积的输出(而不是该字段中每个节点的相应状态值)被输入到后续层的节点,如图所示。与卷积层相关联的内核执行卷积运算,其输出被发送到下一层。在卷积层内执行的降维是使CNN能够缩放以处理大图像的一个方面。
图15B示出了CNN的卷积层内的示例性计算阶段。可以在卷积层1514的三个阶段中处理CNN的卷积层的输入1512。这三个阶段可以包括卷积阶段1516、检测器阶段1518和池化阶段1520。卷积层1514然后可以输出数据到连续的卷积层。网络的最终卷积层可以生成输出特征图数据或将输入提供给全连接层,例如,以生成用于CNN的输入的分类值。
在卷积阶段1516并行执行若干个卷积以产生一组线性激活。卷积阶段1516可以包括仿射变换,其是可以被指定为线性变换加上平移的任何变换。仿射变换包括旋转、平移、缩放以及这些变换的组合。卷积阶段计算连接到输入中的特定区域的功能(例如,神经元)的输出,该特定区域可以被确定为与神经元相关联的局部区域。神经元计算神经元的权重与神经元所连接的局部输入区域之间的点积。来自卷积阶段1516的输出定义了一组线性激活,这些线性激活由卷积层1514的连续阶段处理。
线性激活可以由检测器阶段1518处理。在检测器阶段1518中,每个线性激活由非线性激活函数处理。非线性激活函数增加整个网络的非线性特性,而不影响卷积层的感受野。可以使用若干种类型的非线性激活函数。一种特定类型是整流线性单元(ReLU),其使用定义为f(x)=max(0,x)的激活函数,使得将激活门限设为零。
池化阶段1520使用池化功能,该池化功能将第二卷积层1506的输出替换为附近输出的摘要统计量。池化功能可以用于将平移不变性引入神经网络,使得对输入的小平移不会更改池化的输出。在输入数据中特征的存在比该特征的精确位置更为重要的情况下,本地转换的不变性可以有用。在池化阶段1520期间可以使用各种类型的池化功能,包括最大池化、平均池化和l2-范数池化。此外,一些CNN实施方式不包括池化阶段。相反,这样的实施方式替代了相对于先前的卷积阶段具有增加的步幅的附加卷积阶段。
来自卷积层1514的输出然后可以由下一层1522处理。下一层1522可以是附加的卷积层或全连接层1508之一。例如,图15A的第一卷积层1504可以输出至第二卷积层1506,而第二卷积层可以输出到全连接层1508的第一层。
图16示出了示例性递归神经网络。在递归神经网络(RNN)中,网络的先前状态影响网络当前状态的输出。可以使用各种功能以多种方式构建RNN。RNN的使用通常围绕使用数学模型基于先前的输入序列来预测未来。例如,RNN可以用于执行统计语言建模以在给定单词的先前序列的情况下预测即将到来的单词。所示RNN 1600可以描述为具有:输入层1602,其接收输入向量;隐藏层1604,以实现递归功能;反馈机制1605,以实现先前状态的“记忆”;以及输出层1606,以输出结果。RNN 1600基于时间步进行操作。RNN在给定时间步的状态经由反馈机制1605基于先前时间步受到影响。对于给定时间步,隐藏层1604的状态由先前状态和当前时间步下的输入定义。隐藏层1604可以处理第一时间步下的初始输入(x1)。隐藏层1604可以使用在初始输入(x1)的处理期间确定的状态信息来处理第二输入(x2)。可以将给定状态计算为st=f(Uxt+Wst-1),其中,U和W是参数矩阵。函数f通常是非线性的,例如双曲正切函数(Tanh)或整流函数f(x)=max(0,x)的变型。然而,在隐藏层1604中使用的特定数学函数可以取决于RNN 1600的特定实施方式细节而变化。
除了所描述的基本CNN和RNN网络之外,还可以实现那些网络上的变型。一个示例性RNN变型是长短期记忆(LSTM)RNN。LSTM RNN能够学习长期依赖关系,这对于处理更长的语言序列可能是必要的。CNN上的变型是卷积深度置信网络,其具有类似于CNN的结构,并且以类似于深度置信网络的方式进行训练。深度置信网络(DBN)是生成神经网络,其由多层随机(任意)变量组成。可以使用贪婪无监督学习逐层训练DBN。然后,通过确定神经网络的最佳权重初始集,可以将学习到的DBN权重用于提供预训练神经网络。
图17示出了深度神经网络的训练和部署。一旦已经针对任务构造了给定的网络,就使用训练数据集1702来训练神经网络。已经开发了各种训练框架以实现对训练过程的硬件加速。例如,图14的机器学习框架1404可以被配置为训练框架1704。训练框架1704可以挂接到未经训练的神经网络1706中,并且使得能够使用本文所述的并行处理资源来训练未经训练的神经网络以生成经训练的神经网络1708。为了开始训练过程,可以随机地活着通过使用深度置信网络的预训练来选择初始权重。然后,以有监督或无监督的方式执行训练循环。
监督学习是这样的学习方法,其中,训练作为中介操作执行,例如当训练数据集1702包括与输入的期望输出配对的输入时,或者在训练数据集包括具有已知输出的输入且对神经网络输出被人工分级的情况下。网络处理输入,并将所得输出与一组预期或期望的输出进行比较。误差然后通过系统反向传播。训练框架1704可以调整以调整控制未经训练的神经网络1706的权重。训练框架1704可以提供工具以监视未经训练的神经网络1706朝着适于基于已知输入数据生成正确答案的模型收敛的程度。调整网络的权重以细化神经网络生成的输出时,训练过程重复发生。训练过程可以继续,直到神经网络达到与经训练的神经网络1708相关联的统计上期望的精度为止。然后可以部署经训练的神经网络1708来实现任何数量的机器学习操作,以基于新数据812的输入来生成推理结果814。
无监督学习是这样的学习方法,其中,网络尝试使用未标记的数据来训练自己。因此,对于无监督学习,训练数据集1702将包括输入数据而没有任何相关联的输出数据。未经训练的神经网络1706可以学习未标记的输入内的分组,并且可以确定个体输入如何与整个数据集相关。可以使用无监督训练来生成自组织图,该自组织图是一种经训练的神经网络1708,其能够执行对减少数据的维数有用的操作。无监督训练也可以用于执行异常检测,这允许识别输入数据集中偏离数据正常模式的数据点。
也可以采用有监督和无监督训练的变型。半监督学习是这样的技术,其中,训练数据集1702中包括具有相同分布的标记数据和未标记数据的混合。增量学习是监督学习的变型,其中,连续使用输入数据来进一步训练模型。增量学习使经训练的神经网络1708能够适应新数据1712,而不忘记在初始训练期间注入网络内的知识。
不管是有监督的还是无监督的,对于单个计算节点而言,用于特别深的神经网络的训练过程可能过于计算密集。代替使用单个计算节点,可以使用计算节点的分布式网络来加速训练过程。
图18是示出分布式学习的框图。分布式学习是这样的训练模型,其使用多个分布式计算节点来执行神经网络的有监督或无监督训练。分布式计算节点可以均包括一个或多个主机处理器和一个或多个通用处理节点。如图所示,可以通过模型并行性1802、数据并行性1804或模型与数据并行性的组合1806来执行分布式学习。
在模型并行性1802中,分布式系统中的不同计算节点可以对单个网络的不同部分执行训练计算。例如,神经网络的每一层都可以由分布式系统的不同处理节点进行训练。模型并行性的好处包括缩放到特别大的模型的能力。拆分与神经网络不同层相关联的计算实现训练非常大的神经网络,其中,所有层的权重将无法放入单个计算节点的存储器中。在一些情况下,模型并行性在执行大型神经网络的无监督训练中尤其有用。
在数据并行性1804中,分布式网络的不同节点具有模型的完整实例,并且每个节点接收数据的不同部分。然后将来自不同节点的结果合并。尽管用于数据并行性的不同方法是可能的,但数据并行训练方法都需要组合结果并在每个节点之间同步模型参数的技术。用于组合数据的示例性方法包括参数平均和基于更新的数据并行性。参数平均在训练数据的子集上训练每个节点,并将全局参数(例如,权重、偏差)设置为来自每个节点的参数的平均值。参数平均使用维护参数数据的中央参数服务器。基于更新的数据并行性类似于参数平均,除了不是将参数从节点传输到参数服务器,而是传输对模型的更新。另外,可以以去中心化的方式执行基于更新的数据并行性,其中,更新被压缩并在节点之间传输。
可以例如在其中每个计算节点包括多个GPU的分布式系统中实现组合的模型和数据并行性1806。每个节点可以具有模型的完整实例,其中,每个节点内的单独GPU用于训练模型的不同部分。
相对于单个机器上的训练,分布式训练已经增加了开销。然而,本文所述的并行处理器和GPGPU均可以实现各种技术来减少分布式训练的开销,包括用于实现高带宽GPU到GPU数据传输和加速的远程数据同步的技术。
示例性机器学习应用
机器学习可以被应用于解决各种技术问题,包括但不限于计算机视觉、自主驾驶和导航、语音识别以及语言处理。传统上,计算机视觉一直是机器学习应用的最活跃的研究领域之一。计算机视觉的应用范围从再现人类的视觉能力(例如,识别面部)到创建视觉能力的新类别。例如,计算机视觉应用可以被配置为识别来自视频中可见的对象中感应到的振动的声波。并行处理器加速的机器学习使计算机视觉应用能够使用比以前可行的大得多的训练数据集进行训练,并使推理系统能够使用低功耗并行处理器进行部署。
并行处理器加速的机器学习具有自主驾驶应用,包括车道和道路标志识别、避障、导航和驾驶控制。加速的机器学习技术可以用于基于定义对特定训练输入的适当响应的数据集来训练驾驶模型。本文描述的并行处理器可以实现对用于自主驾驶解决方案的日益复杂的神经网络的快速训练,并实现在适合于集成到自主载具的移动平台中部署低功耗推理处理器。
并行处理器加速的深度神经网络已经实现了用于自动语音识别(ASR)的机器学习方法。ASR包括在给定输入声音序列的情况下计算最可能的语言序列的函数的创建。使用深度神经网络的加速的机器学习已实现替换先前用于ASR的隐马尔可夫模型(HMM)和高斯混合模型(GMM)。
并行处理器加速的机器学习也可以用于加速自然语言处理。自动学习流程可以利用统计推断算法来产生对错误或陌生输入具有鲁棒性的模型。示例性自然语言处理器应用包括人类语言之间的自动机器翻译。
用于机器学习的并行处理平台可以划分为训练平台和部署平台。训练平台通常是高度并行的,并且包括优化以加速多GPU单节点训练和多节点多GPU训练,而部署的机器学习(例如,推理)平台通常包括适用于以下产品的较低功耗并行处理器:相机、自主机器人和自主载具。
图19示出了采用加速器1910的计算设备1900的一个实施例。计算设备1900(例如,智能可穿戴设备、虚拟现实(VR)设备、头戴式显示器(HMD)、移动计算机、物联网(IoT)设备、膝上型计算机、台式计算机、服务器计算机等)可以与图1的数据处理系统100相同,并且因此为了简洁、清楚和易于理解,上面参考图1-18所述的许多细节在下文中不再进一步讨论或重复。如图所示,在一个实施例中,计算设备1900被示为托管加速器1910。尽管被示出为独立组件,但是其他实施例可以以被包括在GPU 1914内的加速器1910为特征。在又一些其他实施例中,加速器1910可以被包括在CPU1912内。
在整个文档中,诸如“图形域”之类的术语可以与“图形处理单元”、“图形处理器”或简单地“GPU”可互换地引用,并且类似地,“CPU域”或“主机域”可以与“计算机处理单元”、“应用处理器”或简单地“CPU”可互换地引用。
计算设备1900可以包括任何数量和类型的通信设备,例如大型计算系统,例如服务器计算机、台式计算机等,并且还可以包括机顶盒(例如,基于因特网的有线电视机顶盒等)、基于全球定位系统(GPS)的设备等。计算设备1900可以包括用作通信设备的移动计算设备,例如包括智能手机的蜂窝电话、个人数字助理(PDA)、平板电脑、膝上型计算机、电子阅读器、智能电视、电视平台、可穿戴设备(例如眼镜、手表、手镯、智能卡、珠宝、衣物等)、媒体播放器等。例如,在一个实施例中,计算设备1900可以包括采用计算机平台的移动计算设备,该计算机平台托管诸如片上系统(“SoC”或“SOC”)之类的集成电路(“IC”),其将计算设备1900的各种硬件和/或软件组件集成在单个芯片上。
如所示,在一个实施例中,计算设备1900可以包括任何数量和类型的硬件和/或软件组件,例如(但不限于)GPU 1914、图形驱动程序(也称为“GPU驱动程序”、“图形驱动程序逻辑”、“驱动程序逻辑”、用户模式驱动程序(UMD)、UMD、用户模式驱动程序框架(UMDF)、UMDF或简称为“驱动程序”)1916、CPU 1912、存储器1908、网络设备、驱动程序等,以及输入/输出(I/O)源1904,例如触摸屏、触摸面板、触摸板、虚拟或常规键盘、虚拟或常规鼠标、端口、连接器等。
计算设备1900可以包括用作计算机设备1900的硬件和/或物理资源与用户之间的接口的操作系统(OS)1906。可以想到,CPU 1912可以包括一个或多个处理器,例如图1的处理器102,而GPU 1914可以包括一个或多个图形处理器(或多处理器)。
要注意的是,贯穿本文档可以可互换地使用诸如“节点”、“计算节点”、“服务器”、“服务器设备”、“云计算机”、“云服务器”、“云服务器计算机”、“机器”、“主机”、“设备”、“计算设备”、“计算机”、“计算系统”等术语。还要注意,贯穿本文档可以可互换地使用诸如“应用”、“软件应用”、“程序”、“软件程序”、“包”、“软件包”等术语。同样,在贯穿本文档可以可互换地使用诸如“作业”、“输入”、“请求”、“消息”等的术语。
可以想到并且如参考图1-13进一步描述的,如上所述的图形管线的一些过程在软件中实现,而其余过程在硬件中实现。图形管线可以在图形协处理器设计中实现,其中,CPU1912被设计为与GPU 1914一起工作,该GPU 1914可以被包括在CPU 1912中或与CPU 1912共置。在一个实施例中,GPU 1914可以采用:任何数量和类型的常规软件和硬件逻辑来执行与图形渲染有关的常规功能,以及新颖的软件和硬件逻辑以执行任何数量和类型的指令。
如前所述,存储器1908可以包括随机存取存储器(RAM),其包括具有对象信息的应用数据库。诸如图1的存储器集线器105之类的存储器控制器集线器可以访问RAM中的数据并将其转发到GPU 1914以用于图形管线处理。RAM可以包括双倍数据速率RAM(DDR RAM)、扩展数据输出RAM(EDO RAM)等。CPU1912与硬件图形管线交互以共享图形管线功能。
处理后的数据被存储在硬件图形管线中的缓冲器中,并且状态信息被存储在存储器1908中。然后,所得的图像被传输到I/O源1904,例如用于显示图像的显示组件。可以想到的是,显示设备可以是各种类型的,例如阴极光线管(CRT)、薄膜晶体管(TFT)、液晶显示器(LCD)、有机发光二极管(OLED)阵列等,以向用户显示信息。
存储器1908可以包括缓冲器(例如,帧缓冲器)的预分配区域;然而,本领域普通技术人员应该理解,实施例不限于此,并且可以使用较低图形管线可访问的任何存储器。计算设备1900可以进一步包括如图1所引用的输入/输出(I/O)控制集线器(ICH)107,作为一个或多个I/O源1904等。
CPU 1912可以包括一个或多个处理器以执行指令,以便执行计算系统实现的无论什么软件例程。指令经常涉及对数据执行的某种操作。数据和指令二者都可以存储在系统存储器1908和任何相关联的高速缓存中。高速缓存通常设计为比系统存储器1908具有更短的延时;例如,高速缓存可以与处理器集成在相同的硅芯片上和/或用更快的静态RAM(SRAM)单元构造,而系统存储器1908可以用较慢的动态RAM(DRAM)单元构造。通过倾向于将更频繁使用的指令和数据存储在高速缓存(与系统存储器1908相对)中,计算设备1900的总体性能效率提高了。预期在一些实施例中,GPU 1914可以作为CPU 1912的一部分(例如,物理CPU封装的一部分)存在,在这种情况下,存储器1908可以由CPU 1912和GPU 1914共享或保持分开。
可以使得系统存储器1908对计算设备1900内的其他组件可用。例如,从到计算设备1900的各种接口(例如,键盘和鼠标、打印机端口、局域网(LAN)端口、调制解调器端口等)接收的任何数据(例如,输入图形数据)或从计算机设备1900的内部存储元件(例如,硬盘驱动器)取回的任何数据通常在软件程序的实施方式中被一个或多个处理器操作之前临时地在系统存储器1908中排队。类似地,软件程序确定的应通过计算系统接口之一从计算设备1900发送到外部实体或存储到内部存储元件中的数据通常在被发送或存储之前临时在系统存储器1908中排队。
此外,例如ICH可以用于确保这样的数据在系统存储器1908和其适当的对应的计算系统接口(如果是这样设计计算系统的话,还包括内部存储设备)之间适当地传递,并且可以具有自身与观察到的I/O源/设备1904之间的双向点到点链路。类似地,平台控制集线器(PCH)可以用于管理CPU 1912和GPU 1914、可以在时间上相对彼此近似出现的接口和内部存储元件之间对系统存储器1908访问的各种竞争请求。
I/O源1904可以包括一个或多个I/O设备,其被实现用于传输去往和/或来自计算设备1900(例如,网络适配器)的数据;或者,用于计算设备1900内的大规模非易失性存储装置(例如,硬盘驱动器)。包括字母数字和其他键的用户输入设备可以用于将信息和命令选择传达给GPU 1914。另一类用户输入设备是光标控件,例如鼠标、轨迹球、触摸屏、触摸板或光标方向键,以用于将方向信息和命令选择传达给GPU 1914,并控制光标在显示设备上的移动。可以采用计算机设备1900的相机和麦克风阵列来观察手势、记录音频和视频并且接收和发送视觉和音频命令。
计算设备1900可以进一步包括网络接口,以提供对网络的访问,该网络例如LAN、广域网(WAN)、城域网(MAN)、个域网(PAN)、蓝牙、云网络、移动网络(例如,第三代(3G)、第四代(4G)等)、内联网、因特网等。网络接口可以包括例如具有天线的无线网络接口,该天线可以表示一个或多个天线。网络接口也可以包括例如有线网络接口,以经由网络电缆与远程设备通信,该网络电缆可以是例如以太网电缆、同轴电缆、光纤电缆、串行电缆或并行电缆。
网络接口可以例如通过遵循IEEE 802.11b和/或IEEE 802.11g标准来提供对LAN的访问,和/或无线网络接口可以例如通过符合蓝牙标准来提供对个域网的访问。也可以支持其他无线网络接口和/或协议,包括标准的先前和后续版本。附加于或代替经由无线LAN标准的通信,网络接口可以使用例如时分多址(TDMA)协议、全球移动通信系统(GSM)协议、码分多址(CDMA)协议和/或任何其他类型的无线通信协议来提供无线通信。
网络接口可以包括一个或多个通信接口,例如调制解调器、网络接口卡或其他公知的接口设备,例如用于耦合到以太网、令牌环的接口设备,或出于提供通信链路以支持LAN或WAN的目的的其他类型的物理有线或无线附件。以这种方式,计算机系统还可以经由常规的网络基础设施(例如,包括内联网或因特网)耦合到多个外围设备、客户端、控制表面、控制台或服务器。
应当理解,对于某些实施方式,比上述示例更少或更多装备的系统可以是优选的。因此,计算设备1900的配置可以取决于多种因素(例如,价格约束、性能要求、技术改进或其他情况)而因实施方式而异。电子设备或计算机系统1900的示例可以包括(但不限于)移动设备、个人数字助理、移动计算设备、智能电话、蜂窝电话、手持机、单向寻呼机、双向寻呼机、消息收发设备、计算机、个人计算机(PC)、台式计算机、膝上型计算机、笔记本计算机、手持式计算机、平板计算机、服务器、服务器阵列或服务器场、web服务器、网络服务器、因特网服务器、工作站、小型计算机、大型计算机、超级计算机、网络设备、web设备、分布式计算系统、多处理器系统、基于处理器的系统、消费者电子产品、可编程消费者电子设备、电视、数字电视、机顶盒、无线接入点、基站、订户站、移动订户中心、无线电网络控制器、路由器、集线器、网关、桥、交换机、机器或其组合。
实施例可以被实现为以下各项中的任何一种或其组合:使用母板互连的一个或多个微芯片或集成电路,硬连线逻辑,由存储设备存储并由微处理器执行的软件,固件,专用集成电路(ASIC)和/或现场可编程门阵列(FPGA)。术语“逻辑”例如可以包括软件或硬件和/或软件和硬件的组合。
例如,可以提供实施例作为计算机程序产品,该计算机程序产品可以包括其上存储有机器可执行指令的一个或多个机器可读介质,该机器可执行指令在由诸如计算机之类的一个或多个机器、计算机网络或其它电子设备执行时可以引起一个或多个机器执行根据本文描述的实施例的操作。机器可读介质可以包括但不限于软盘、光盘、CD-ROM(烟锁盘只读存储器)和磁光盘、ROM、RAM、EPROM(可擦可编程只读存储器)、EEPROM(电可擦可编程只读存储器)、磁卡或光卡、闪存或适用于存储机器可执行指令的其他类型的介质/机器可读介质。
此外,可以将实施例作为计算机程序产品下载,其中,可以通过一个或多个数据信号经由通信链路(例如,调制解调器和/或网络连接)从远程计算机(例如,服务器)传输到请求计算机(例如,客户端),该一个或多个数据信号体现在载波或其他传播介质中和/或由载波或其他传播介质调制。
根据一个实施例,加速器1910包括具有用于执行机器学习矩阵乘法运算的逻辑的阵列1913(例如,脉动阵列)。在这样的实施例中,可以通过将矩阵分开(或分割)为较小的矩阵(例如,8×8),在较大的矩阵(例如,16×16)上执行运算。因此,处理矩阵涉及大量的矩阵乘法,包括大量的乘加运算。如上所述,许多矩阵包含大量零元素(或值),它们大多数出现在被乘数中。这些零为消除涉及零值的乘加运算提供了机会。
在一个实施例中,阵列1913执行包括以下的运算:SRC1*SRC2+SRC0=OUTPUT,其中,SRC0、SRC1和SRC2是输入矩阵,而OUTPUT是输出矩阵。图20示出了对分解成四个8×8矩阵的16×16矩阵执行的矩阵乘法运算的一个实施例。在一个实施例中,SRC1包括四个8×8矩阵(A、B、C、D),SRC2包括(E、F、G、H),SRC0包括(I、J、K、L),其中,输出为(W、X、Y、Z)。根据一个实施例,阵列1913包括稀疏矩阵加速逻辑1915,以在检测到SRC1和SRC2中包括大量的零元素时执行优化以加速乘法运算。在另一个实施例中,优化通过实现消除零被乘数值的乘加运算来减小将由矩阵乘法逻辑执行的乘加运算的数量。
为了在阵列1913处加速乘法,加速器1910还包括压缩引擎1917以压缩稀疏矩阵数据以传输到阵列1913以及从阵列1913接收OUTPUT结果。在这样的实施例中,SRC1和SRC2可以通过去除零元素并打包非零元素来进行压缩。另外,生成指示符向量以识别打包数据内的零元素的位置,并将其与打包数据一起发送。
在没有压缩的情况下,每个时钟将由8个矩阵元素组成的多达256位传输到矩阵乘法逻辑,这将花费8*4=32个时钟来传输SRC1矩阵。然而,在压缩率为50%的情况下,在考虑到压缩开销之后,压缩引擎1917以大约时钟周期数的一半将图20中的SRC1和SRC2发送到阵列1913内的矩阵乘法逻辑。
图21A示出了被实现为执行图20所示的矩阵运算的常规脉动乘法器。如在图21A中水平移动所示,一个处理元件(PE)将其计算出的乘加值传送给四个元件的邻居。第四个和第八个元素将其输出传递给最终加法器,在最后加法器中它们被相加以获得中间或最终OUTPUT矩阵的一个元素。请注意,在常规的脉动乘法器中,在所有PE上垂直使用相同的SRC1值。对于每个垂直PE集合,每八个时钟更新一次SRC2。
根据一个实施例,稀疏矩阵加速逻辑1915通过将每个矩阵元素与零进行比较来检测接收到的矩阵数据内的零。然而,在压缩实施例中,稀疏矩阵加速逻辑1915检测接收到的指示符向量内的零元素位置。一旦检测到零,则稀疏矩阵加速逻辑1915就执行各种优化。一种这样的优化包括SRC1的每个8×8子矩阵的行与相同子矩阵的其他行的交换,以实现具有预定门限(例如,50%)的零值的最大相邻行数。
随后,对SRC2矩阵和要相加到乘法运算结果中的SRC0矩阵执行相同的交换,以保持操作数的顺序。根据基本矩阵乘法规则,此交换将导致OUTPUT行也被交换。因此,反向交换稍后将对OUTPUT矩阵执行。在一个实施例中,通过添加附加逻辑来反转OUTPUT矩阵中的交换。然而,在其他实施例中,通过控制对最终存储的写地址来反转OUTPUT矩阵中的交换。
图22A示出了交换之前的子矩阵的一个实施例。如图21A所示,将子矩阵A和E相乘,并且将子矩阵I相加以生成中间矩阵K,“*”表示矩阵相乘,并且“+”表示矩阵相加。图22B示出了在已经执行交换过程之后的子矩阵的一个实施例。如图22B所示,SRC1矩阵现在有具有50%或更多零元素的相邻行。
在一个实施例中,稀疏性优化引起SRC1先进先出(FIFO)缓冲器被不同地输入,并且SRC2像每个时钟一次一样快地更新每个垂直的处理元素集。优化的第二部分包括执行行调整,本文参考两种情况对其进行讨论:1)SRC1矩阵具有相邻的行,每一行具有预定门限(例如,50%或更多)的零;以及2)SRC1矩阵具有相邻的行,当其被合并时,它们具有预定门限的零。
对于情况1,可以通过将每一行中的所有非零值向左移动来调整具有大于50%或更多零的每一行。例如,考虑图23所示的矩阵元素的前两行,可以将每一行中的值向左移动以获得图24A中所示的值。在另一个实施例中,具有大于50%或更多的零的相邻行可以被合并。例如,将图23中的行合并以获得图24B中所示的值。
在又一个实施例中,可以通过执行上述的行移位和行合并二者来执行行调整。例如,将图23中的行被移位合并以获得图24C中所示的值。一旦执行了优化,就将SRC2输入到脉动乘法器的PE中,使得矩阵乘法是正确的。在一个实施例中,每组PE每个时钟接收SRC2值的独立更新。结果,实现了8个读取端口RAM,以跨所有SRC2FIFO共享读取地址。在另一实施例中,在四个PE之后提供一个输出元件,从而得到在SRC1/2被压缩到原始大小的一半的情况下每个时钟最多两个输出。图21B示出了包括针对情况1实现的脉动乘法器2200的矩阵乘法逻辑的一个实施例。
一旦执行乘法,就解决了SRC0和输出的潜在带宽问题。在上述实施例中,执行SRC1*SRC2+SRC0运算的时钟周期数减少完全50%将花费16个时钟周期。因此,只需要16个时钟就可以将SRC0写入矩阵乘法阵列,并将最终OUTPUT写回主存储装置。然而,如果需要将中间矩阵乘法值(此处为示例中的A*E)写回到主存储装置并将其读回以进行进一步处理,则会出现带宽问题。根据一个实施例,脉动乘法器2200本地存储中间矩阵乘积值以避免这种问题。
对于情况2,类似于以上关于情况1所讨论的实施例,执行优化,并且输入SRC2。然而,在情况2中,可以从任何PE接收输出(与情况1中的第4PE和第8PE相对),并且还可以在任何PE处接收SRC0(与情况1中的第1PE和第5PE相对)。例如,在情况1中,SRC0在第一PE和第六PE处输入,而在第五PE和第八PE处接收输出。在情况2中,第一PE处的一个SRC0输入和第八PE处的一个输出可以固定。然而,所有其他SRC0输入和输出都可以在任何PE处发生。在这样的实施例中,提供了复用器2210。下面为一行示出了该结构的图示。图21C示出了对于情况2在阵列1913中被实现为机器学习矩阵乘法逻辑的脉动乘法器2250的一个实施例。
尽管上面关于存储在FIFO缓冲器中的SRC1值和经由RAM提供的SRC2进行了描述,但是稀疏矩阵加速逻辑1915可以检测到SRC2矩阵比SRC1矩阵具有更多的零值。在这种情况下,应对SRC2执行优化。根据一个实施例,稀疏矩阵加速逻辑1915对SRC1和SRC2矩阵进行转置,以使得能够在脉动乘法器处进行精确的计算。在这样的实施例中,输出矩阵还必须在乘加运算之后转置以获得作为原始矩阵的乘法的结果。
图25是示出用于加速稀疏矩阵乘法的过程的一个实施例的流程图。在处理框2510处,在阵列处接收压缩矩阵数据。如上所述,压缩数据与指示符向量一起被接收,该指示符向量示出零元素在压缩数据内的位置。在处理框2520处,使用指示符向量检测压缩矩阵数据中的零。在处理框2530处,对SRC1矩阵行元素并且在矩阵SRC0和SRC2中执行交换操作,使得相邻行具有50%或更多的零元素。然而,如上所述,可以执行矩阵转置来切换SRC1和SRC2矩阵。在这种情况下,交换基于SRC2。
在处理框2540处,对具有预定门限的零元素的行元素执行SRC1行调整(例如,移位行、合并相邻行、或移位并合并行)。在处理框2550处,执行矩阵乘法。如上所述,输出矩阵被本地存储以用作后续矩阵乘法的输入。在处理框2560处,一旦乘法完成就执行反向交换操作。在处理框2570处,存储输出矩阵。根据一个实施例,可以通过交换存储地址来执行反向交换操作。
前述描述和附图应被认为是说明性而非限制性的。本领域技术人员将理解,在不背离所附权利要求书中所阐述的本发明的更广泛精神和范围的情况下,可以对本文所述的实施例进行各种修改和改变。
一些实施例涉及示例1,该示例包括一种用于促进矩阵乘法运算的加速的装置,包括:脉动阵列,其包括矩阵乘法硬件,以对接收到的矩阵数据执行乘加运算,所述接收到的矩阵数据包括来自多个输入矩阵的数据;以及稀疏矩阵加速硬件,其用于检测所述矩阵数据中的零值,并且对所述矩阵数据执行一个或多个优化,以减少要由所述矩阵乘法硬件执行的乘加运算。
示例2包括示例1的主题,其中,所述稀疏矩阵加速硬件通过将每个矩阵值与零值进行比较来检测所述接收到的矩阵数据内的零。
示例3包括示例1和2的主题,还包括用于压缩所述矩阵数据的压缩硬件。
示例4包括示例1-3的主题,其中,压缩所述矩阵数据包括:通过从所述矩阵数据中去除零值来生成打包矩阵数据,以及生成指示符向量以标识所述零值在所述打包矩阵数据中的位置。
示例5包括示例1-4的主题,其中,所述稀疏矩阵加速硬件接收压缩矩阵数据,并且基于所述指示符向量来识别所述压缩矩阵数据中的所述零值。
示例6包括示例1-5的主题,其中,所述稀疏矩阵加速硬件优化所述矩阵数据包括:交换所述多个输入矩阵中的第一输入矩阵的多个子矩阵中的每个子矩阵中的行,以达到具有预定门限的零值的最大相邻行数。
示例7包括示例1-6的主题,其中,所述稀疏矩阵加速硬件优化所述矩阵数据还包括:交换所述多个输入矩阵中的第二输入矩阵的多个子矩阵中的每个子矩阵中的行,以相加至所述第一矩阵和所述多个输入矩阵中的第三输入矩阵的乘法运算的结果。
示例8包括示例1-7的主题,其中,所述稀疏矩阵加速硬件优化所述矩阵数据还包括:对输出矩阵执行反向交换。
示例9包括示例1-8的主题,其中,所述稀疏矩阵加速硬件优化所述矩阵数据还包括:在所述第一矩阵中执行行调整。
示例10包括示例1-9的主题,根据权利要求9所述的装置,其中,执行所述行调整包括:对具有多于预定数量的零值的行的所有非零值进行移位。
示例11包括示例1-10的主题,其中,执行所述行调整包括:合并具有多于预定数量的零值的相邻行。
示例12包括示例1-11的主题,其中,所述矩阵乘法硬件包括脉动乘法器,包括:第一组先进先出(FIFO)缓冲器,其用于将数据存储在所述第一输入矩阵中;第二组FIFO缓冲器,其用于将数据存储在所述第二输入矩阵中;多个处理元件(PE),每个所述处理元件被耦合以从所述第一组FIFO缓冲器中的至少一个和所述第二组FIFO缓冲器中的至少一个接收数据;以及多个存储元件,其用于本地地存储中间矩阵乘法值。
一些实施例涉及示例13,该示例包括一种用于促进矩阵乘法运算的加速的方法,包括:检测包括来自多个输入矩阵的数据的矩阵数据中的零值;对所述矩阵数据执行一个或多个优化,以消除要对所述矩阵数据执行的多个乘加运算;以及在矩阵乘法硬件处对优化后的矩阵数据执行乘加运算。
示例14包括示例13的主题,其中,对所述矩阵数据执行所述一个或多个优化包括:交换所述多个输入矩阵中的第一输入矩阵的多个子矩阵中的每个子矩阵中的行,以达到具有预定门限的零值的最大相邻行数。
示例15包括示例13和14的主题,其中,对所述矩阵数据执行所述一个或多个优化还包括:在所述第一矩阵中执行行调整。
示例16包括示例13-15的主题,其中,对所述矩阵数据执行所述一个或多个优化还包括:对从所述乘加运算得到的输出矩阵执行反向交换。
一些实施例涉及示例17,该示例包括一种硬件加速器,包括:脉动阵列,其包括:矩阵乘法硬件,其用于对接收到的矩阵数据执行乘加运算,所述接收到的数据包括来自多个输入矩阵的数据;以及稀疏矩阵加速硬件,其用于检测所述矩阵数据中的零值,并且对所述矩阵数据执行一个或多个优化,以减少要由所述矩阵乘法硬件执行的乘加运算。
示例18包括示例17的主题,还包括用于压缩所述矩阵数据的压缩硬件。
示例19包括示例17和18的主题,其中,压缩所述矩阵数据包括:通过从所述矩阵数据中去除零值来生成打包矩阵数据,以及生成指示符向量以标识所述零值在所述打包矩阵数据中的位置。
示例20包括示例17-19的主题,其中,所述稀疏矩阵加速硬件接收压缩矩阵数据,并且基于所述指示符向量来识别所述压缩矩阵数据中的所述零值。
前面的描述和附图应被认为是说明性而非限制性的。本领域技术人员将理解,在不背离所附权利要求书中所阐述的本发明的更广泛精神和范围的情况下,可以对本文所述的实施例进行各种修改和改变。

Claims (20)

1.一种用于促进矩阵乘法运算的加速的装置,包括:
脉动阵列,其包括矩阵乘法硬件,以对接收到的矩阵数据执行乘加运算,所述接收到的矩阵数据包括来自多个输入矩阵的数据;以及
稀疏矩阵加速硬件,其用于检测所述矩阵数据中的零值,并且对所述矩阵数据执行一个或多个优化,以减少要由所述矩阵乘法硬件执行的乘加运算。
2.根据权利要求1所述的装置,其中,所述稀疏矩阵加速硬件通过将每个矩阵值与零值进行比较来检测所述接收到的矩阵数据内的零。
3.根据权利要求1所述的装置,还包括用于压缩所述矩阵数据的压缩硬件。
4.根据权利要求3所述的装置,其中,压缩所述矩阵数据包括:通过从所述矩阵数据中去除零值来生成打包矩阵数据,以及生成指示符向量以标识所述零值在所述打包矩阵数据中的位置。
5.根据权利要求4所述的装置,其中,所述稀疏矩阵加速硬件接收压缩矩阵数据,并且基于所述指示符向量来识别所述压缩矩阵数据中的所述零值。
6.根据权利要求1所述的装置,其中,所述稀疏矩阵加速硬件优化所述矩阵数据包括:交换所述多个输入矩阵中的第一输入矩阵的多个子矩阵中的每个子矩阵中的行,以达到具有预定门限的零值的最大相邻行数。
7.根据权利要求6所述的装置,其中,所述稀疏矩阵加速硬件优化所述矩阵数据还包括:交换所述多个输入矩阵中的第二输入矩阵的多个子矩阵中的每个子矩阵中的行,以相加至所述第一矩阵和所述多个输入矩阵中的第三输入矩阵的乘法运算的结果。
8.根据权利要求7所述的装置,其中,所述稀疏矩阵加速硬件优化所述矩阵数据还包括:对输出矩阵执行反向交换。
9.根据权利要求7所述的装置,其中,所述稀疏矩阵加速硬件优化所述矩阵数据还包括:在所述第一矩阵中执行行调整。
10.根据权利要求9所述的装置,其中,执行所述行调整包括:对具有多于预定数量的零值的行的所有非零值进行移位。
11.根据权利要求9所述的装置,其中,执行所述行调整包括:合并具有多于预定数量的零值的相邻行。
12.根据权利要求9所述的装置,其中,所述矩阵乘法硬件包括脉动乘法器,包括:
第一组先进先出(FIFO)缓冲器,其用于将数据存储在所述第一输入矩阵中;
第二组FIFO缓冲器,其用于将数据存储在所述第二输入矩阵中;
多个处理元件(PE),每个所述处理元件被耦合以从所述第一组FIFO缓冲器中的至少一个和所述第二组FIFO缓冲器中的至少一个接收数据;以及
多个存储元件,其用于本地地存储中间矩阵乘法值。
13.一种用于促进矩阵乘法运算的加速的方法,包括:
检测包括来自多个输入矩阵的数据的矩阵数据中的零值;
对所述矩阵数据执行一个或多个优化,以消除要对所述矩阵数据执行的多个乘加运算;以及
在矩阵乘法硬件处对优化后的矩阵数据执行乘加运算。
14.根据权利要求13所述的方法,其中,对所述矩阵数据执行所述一个或多个优化包括:交换所述多个输入矩阵中的第一输入矩阵的多个子矩阵中的每个子矩阵中的行,以达到具有预定门限的零值的最大相邻行数。
15.根据权利要求14所述的方法,其中,对所述矩阵数据执行所述一个或多个优化还包括:在所述第一矩阵中执行行调整。
16.根据权利要求15所述的方法,其中,对所述矩阵数据执行所述一个或多个优化还包括:对从所述乘加运算得到的输出矩阵执行反向交换。
17.一种硬件加速器,包括:
脉动阵列,其包括:
矩阵乘法硬件,其用于对接收到的矩阵数据执行乘加运算,所述接收到的数据包括来自多个输入矩阵的数据;以及
稀疏矩阵加速硬件,其用于检测所述矩阵数据中的零值,并且对所述矩阵数据执行一个或多个优化,以减少要由所述矩阵乘法硬件执行的乘加运算。
18.根据权利要求17所述的加速器,还包括用于压缩所述矩阵数据的压缩硬件。
19.根据权利要求18所述的加速器,其中,压缩所述矩阵数据包括:通过从所述矩阵数据中去除零值来生成打包矩阵数据,以及生成指示符向量以标识所述零值在所述打包矩阵数据中的位置。
20.根据权利要求19所述的加速器,其中,所述稀疏矩阵加速硬件接收压缩矩阵数据,并且基于所述指示符向量来识别所述压缩矩阵数据中的所述零值。
CN202010591833.5A 2019-09-05 2020-06-24 稀疏矩阵乘法加速机制 Pending CN112446815A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/561,715 US11188618B2 (en) 2019-09-05 2019-09-05 Sparse matrix multiplication acceleration mechanism
US16/561,715 2019-09-05

Publications (1)

Publication Number Publication Date
CN112446815A true CN112446815A (zh) 2021-03-05

Family

ID=70738381

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010591833.5A Pending CN112446815A (zh) 2019-09-05 2020-06-24 稀疏矩阵乘法加速机制

Country Status (3)

Country Link
US (2) US11188618B2 (zh)
EP (1) EP3789893A1 (zh)
CN (1) CN112446815A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022235213A1 (zh) * 2021-05-07 2022-11-10 脸萌有限公司 一种矩阵乘法电路模块及方法

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11409995B2 (en) * 2019-08-28 2022-08-09 Nxp B.V. Anomaly detection by classifying past behavior
US11188618B2 (en) 2019-09-05 2021-11-30 Intel Corporation Sparse matrix multiplication acceleration mechanism
US11568021B2 (en) 2020-02-21 2023-01-31 Alibaba Group Holding Limited Vector-vector multiplication techniques for processing systems
CN111798363B (zh) * 2020-07-06 2024-06-04 格兰菲智能科技有限公司 图形处理器
US11429394B2 (en) * 2020-08-19 2022-08-30 Meta Platforms Technologies, Llc Efficient multiply-accumulation based on sparse matrix
CN113434813B (zh) * 2021-06-26 2024-05-14 上海寒武纪信息科技有限公司 一种基于神经网络的矩阵乘运算方法及相关装置
CN115344525B (zh) * 2022-08-16 2023-04-18 江南信安(北京)科技有限公司 一种椭圆曲线点加硬件加速方法及装置
CN117851744A (zh) * 2024-03-07 2024-04-09 北京象帝先计算技术有限公司 矩阵运算电路、处理器、集成电路系统、电子组件及设备

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8417758B1 (en) 2009-09-01 2013-04-09 Xilinx, Inc. Left and right matrix multiplication using a systolic array
US8510364B1 (en) 2009-09-01 2013-08-13 Xilinx, Inc. Systolic array for matrix triangularization and back-substitution
WO2011156247A2 (en) * 2010-06-11 2011-12-15 Massachusetts Institute Of Technology Processor for large graph algorithm computations and matrix operations
US8924455B1 (en) * 2011-02-25 2014-12-30 Xilinx, Inc. Multiplication of matrices using systolic arrays
US10762164B2 (en) * 2016-01-20 2020-09-01 Cambricon Technologies Corporation Limited Vector and matrix computing device
US10810484B2 (en) * 2016-08-12 2020-10-20 Xilinx, Inc. Hardware accelerator for compressed GRU on FPGA
US10146738B2 (en) * 2016-12-31 2018-12-04 Intel Corporation Hardware accelerator architecture for processing very-sparse and hyper-sparse matrix data
US10180928B2 (en) 2016-12-31 2019-01-15 Intel Corporation Heterogeneous hardware accelerator architecture for processing sparse matrix data with skewed non-zero distributions
US10372507B2 (en) * 2016-12-31 2019-08-06 Intel Corporation Compute engine architecture to support data-parallel loops with reduction operations
EP3602278B1 (en) * 2017-03-20 2022-09-28 Intel Corporation Systems, methods, and apparatuses for tile matrix multiplication and accumulation
US10698974B2 (en) 2017-05-17 2020-06-30 Google Llc Low latency matrix multiply unit
US10482156B2 (en) 2017-12-29 2019-11-19 Facebook, Inc. Sparsity-aware hardware accelerators
JP2019148969A (ja) * 2018-02-27 2019-09-05 富士通株式会社 行列演算装置、行列演算方法および行列演算プログラム
US10846363B2 (en) * 2018-11-19 2020-11-24 Microsoft Technology Licensing, Llc Compression-encoding scheduled inputs for matrix computations
US11188618B2 (en) 2019-09-05 2021-11-30 Intel Corporation Sparse matrix multiplication acceleration mechanism

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022235213A1 (zh) * 2021-05-07 2022-11-10 脸萌有限公司 一种矩阵乘法电路模块及方法

Also Published As

Publication number Publication date
US20220171827A1 (en) 2022-06-02
US11188618B2 (en) 2021-11-30
US20210073318A1 (en) 2021-03-11
US12008067B2 (en) 2024-06-11
EP3789893A1 (en) 2021-03-10

Similar Documents

Publication Publication Date Title
US11842423B2 (en) Dot product operations on sparse matrix elements
US20220129521A1 (en) Systolic disaggregation within a matrix accelerator architecture
EP3561738B1 (en) Machine learning accelerator architecture
US11494163B2 (en) Conversion hardware mechanism
US12008067B2 (en) Sparse matrix multiplication acceleration mechanism
CN113853608A (zh) 利用稀疏三维(3d)分组卷积的通用模块化稀疏3d卷积设计
KR20210153514A (ko) 적응적 슈퍼샘플링을 위한 딥 러닝 기반의 샘플 선택
US11669329B2 (en) Instructions and logic for vector multiply add with zero skipping
US11409579B2 (en) Multiple independent synchonization named barrier within a thread group
US20240053985A1 (en) Sharing register file usage between fused processing resources
CN112950448A (zh) 稀疏矩阵优化机制
EP3920021A1 (en) Apparatus and method for loading a matrix into an accelerator and instructions therefor
US20230195519A1 (en) Low power inference engine pipeline in a graphics processing unit
US20220383580A1 (en) Real-time temporally consistent object segmented style transfer in media and gaming
US11416580B2 (en) Dot product multiplier mechanism
CN115439589A (zh) 神经帧外推渲染机制
TWI842948B (zh) 促進矩陣乘法運算的裝置、方法及硬體加速器

Legal Events

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