用于基于软件提示和硬件线程切换来降低寄存器区块冲突的系统和方法与流程

文档序号:18564997发布日期:2019-08-30 23:58阅读:145来源:国知局
用于基于软件提示和硬件线程切换来降低寄存器区块冲突的系统和方法与流程
实施例总体上涉及数据处理,并且更具体地涉及经由通用图形处理单元的数据处理。
背景技术
:当前的并行图形数据处理包括被开发为用于对图形数据执行特定操作的系统和方法,这些特定操作诸如例如,线性插值、曲面细分、光栅化、纹理映射、深度测试等。传统上,图形处理器使用固定功能计算单元来处理图形数据;然而,最近,部分图形处理器已经变得可编程,使得此类处理器能够支持用于处理顶点和片段数据的更多种操作。为了进一步提高性能,图形处理器典型地实现诸如流水线操作之类的处理技术,这些处理技术尝试贯穿图形流水线的不同部分并行地处理尽可能多的图形数据。具有单指令多线程(simt)架构的并行图形处理器被设计成使图形流水线中的并行处理量最大化。在simt架构中,多组并行线程尝试尽可能经常地一起同步执行程序指令,以提高处理效率。可以在shanecook的cuda编程(cudaprogramming)第三章,第37-51页(2013)中找到对simt架构的软件和硬件的总体概述。为了提供gpu中大型且快速的寄存器堆(rf),通常通过将寄存器分组为可以并行访问的不同区块从而使用多区块结构来实现高吞吐量。然而,寄存器区块冲突可能导致流水线停止,并且这可能对于具有非平衡寄存器区块使用的应用具有显著的性能影响。附图说明为了以能够详细理解本实施例的以上记载特征的方式,可通过参考实施例来对以上简要概括的实施例进行更具体的描述,这些实施例中的一些在所附附图中被图示。然而,应当注意,所附附图仅图示出典型实施例,并因此不应被认为是对其范围的限制。图1是根据实施例的处理系统100的框图;图2是处理器200的实施例的框图,该处理器200具有一个或多个处理器核202a-202n、集成存储器控制器214以及集成图形处理器208;图3是图形处理器300的框图,该图形处理器300可以是分立的图形处理单元,或可以是与多个处理核集成的图形处理器;图4是根据一些实施例的图形处理器的图形处理引擎410的框图;图5是根据本文中所描述的一些实施例的图形处理器核500的硬件逻辑的框图;图6a-图6b图示出根据本文中所描述的实施例的包括在图形处理器核中所采用的处理元件阵列的线程执行电路600;图7是图示出根据一些实施例的图形处理器指令格式700的框图;图8是图形处理器800的另一实施例的框图;图9a是图示出根据一些实施例的图形处理器命令格式900的框图;图9b是图示出根据实施例的图形处理器命令序列910的框图;图10图示出根据一些实施例的数据处理系统1000的示例性图形软件架构;图11a是图示出根据实施例的可用于制造集成电路以执行操作的ip核开发系统1100的框图;图11b图示出根据本文中所描述的一些实施例的集成电路封装组件1170的横截面侧视图;图12-图14图示出根据本文中所描述的各实施例的可使用一个或多个ip核制造的示例性集成电路和相关联的图形处理器;图15图示出根据实施例的多区块的寄存器堆;图16a-图16b图示出根据实施例的用于可能区块冲突时的线程切换的方法;图17a-图17b示出了根据实施例的硬件线程切换如何降低区块冲突的示例;图18示出了根据实施例的eu(执行单元)的示例性架构并且每个gpu处理器可具有多个eu。具体实施方式在实施例中,公开了用于基于软件提示和硬件线程切换来降低寄存器区块冲突的机制。由于利用编译器生成的提示,本设计以最小硬件改变降低了寄存器区块冲突,同时还避免了由区块冲突导致的流水线停止。在一些实施例中,用于线程切换的装置包括图形处理单元(gpu),该gpu包括多个寄存器区块以存储操作数,这些操作数被指派给寄存器区块来至少部分地避免寄存器区块冲突。解码电路检查将要由第一线程执行的当前指令的线程切换字段。gpu执行强制线程切换机制,以使得下一指令在当前指令的线程切换字段被设置时将由第二线程来执行。在下列描述中,阐述了众多特定细节来提供更全面的理解。然而,将对本领域技术人员显而易见的是,可在没有这些特定细节中的一个或多个细节的情况下实施本文中所描述的实施例。在其他实例中,未描述公知的特征以避免使本实施例的细节变得模糊。系统概述系统概述图1是根据实施例的处理系统100的框图。在各实施例中,系统100包括一个或多个处理器102以及一个或多个图形处理器108,并且可以是单处理器台式系统、多处理器工作站系统或具有大量处理器102或处理器核107的服务器系统。在一个实施例中,系统100是被并入用于在移动设备、手持式设备或嵌入式设备内使用的芯片上系统(soc)集成电路内的处理平台。在一个实施例中,系统100可以包括基于服务器的游戏平台、游戏控制台,或被并入基于服务器的游戏平台、游戏控制台内,该游戏控制台包括游戏与媒体控制台、移动游戏控制台、手持式游戏控制台、或在线游戏控制台。在一些实施例中,系统100是移动电话、智能电话、平板计算设备或移动互联网设备。处理系统100还可以包括可穿戴设备、与可穿戴设备耦合、或者集成在可穿戴设备中,该可穿戴设备诸如智能手表可穿戴设备、智能眼镜设备、增强现实设备、或虚拟现实设备。在一些实施例中,处理系统100是电视或机顶盒设备,该电视或机顶盒设备具有一个或多个处理器102以及由一个或多个图形处理器108生成的图形界面。在一些实施例中,一个或多个处理器102各自包括用于处理指令的一个或多个处理器核107,这些指令在被执行时执行系统和用户软件的操作。在一些实施例中,一个或多个处理器核107中的每个处理器核被配置成用于处理特定的指令集109。在一些实施例中,指令集109可促进复杂指令集计算(cisc)、精简指令集计算(risc)、或经由超长指令字(vliw)的计算。多个处理器核107可各自处理不同的指令集109,该指令集109可包括用于促进对其他指令集进行仿真的指令。处理器核107还可包括其他处理设备,诸如,数字信号处理器(dsp)。在一些实施例中,处理器102包括高速缓存存储器104。取决于架构,处理器102可以具有单个内部高速缓存或多个层级的内部高速缓存。在一些实施例中,在处理器102的各部件之间共享高速缓存存储器。在一些实施例中,处理器102还使用外部高速缓存(例如,第3级(l3)高速缓存或末级高速缓存(llc))(未示出),可使用已知的高速缓存一致性技术在处理器核107之间共享外部高速缓存。另外,寄存器堆106被包括在处理器102中,该处理器102可包括用于存储不同类型的数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器、以及指令指针寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可特定于处理器102的设计。在一些实施例中,一个或多个处理器102与一个或多个接口总线110耦合,以在处理器102与系统100中的其他部件之间传输诸如地址、数据、或控制信号之类的通信信号。在一个实施例中,接口总线110可以是处理器总线,诸如,直接媒体接口(dmi)总线的版本。然而,处理器总线不限于dmi总线,并且可包括一个或多个外围部件互连总线(例如,pci、pci快速)、存储器总线或其他类型的接口总线。在一个实施例中,(多个)处理器102包括集成存储器控制器116和平台控制器中枢130。存储器控制器116促进存储器设备与系统100的其他部件之间的通信,而平台控制器中枢(pch)130提供经由本地i/o总线至i/o设备的连接。存储器设备120可以是动态随机存取存储器(dram)设备、静态随机存取存储器(sram)设备、闪存设备、相变存储器设备、或具有合适的性能以充当进程存储器的某种其他存储器设备。在一个实施例中,存储器设备120可以作为系统100的系统存储器来进行操作,以存储数据122和指令121,以供在一个或多个处理器102执行应用或进程时使用。存储器控制器116还与任选的外部图形处理器112耦合,该任选的外部图形处理器112可与处理器102中的一个或多个图形处理器108通信以执行图形和媒体操作。在一些实施例中,显示设备111可以连接至(多个)处理器102。显示设备111可以是以下各项中的一项或多项:内部显示设备,如在移动电子设备或膝上型设备中;或经由显示接口(例如,显示端口(displayport)等)附接的外部显示设备。在一个实施例中,显示设备111可以是头戴式显示器(hmd),诸如用于在虚拟现实(vr)应用或增强现实(ar)应用中使用的立体显示设备。在一些实施例中,平台控制器中枢130启用外围设备以经由高速i/o总线连接到存储器设备120和处理器102。i/o外围设备包括但不限于音频控制器146、网络控制器134、固件接口128、无线收发机126、触摸传感器125、数据存储设备124(例如,硬盘驱动器、闪存等)。数据存储设备124可以经由存储接口(例如,sata)或经由诸如外围部件互连总线(例如,pci、pci快速)之类的外围总线来进行连接。触摸传感器125可以包括触摸屏传感器、压力传感器、或指纹传感器。无线收发机126可以是wi-fi收发机、蓝牙收发机、或者诸如3g、4g或长期演进(lte)收发机之类的移动网络收发机。固件接口128实现与系统固件的通信,并且可以是例如统一可扩展固件接口(uefi)。网络控制器134可以实现到有线网络的网络连接。在一些实施例中,高性能网络控制器(未示出)与接口总线110耦合。在一个实施例中,音频控制器146是多通道高清音频控制器。在一个实施例中,系统100包括任选的用于将传统(legacy)(例如,个人系统2(ps/2))设备耦合至系统的传统i/o控制器140。平台控制器中枢130还可以连接至一个或多个通用串行总线(usb)控制器142连接输入设备,这些输入设备诸如键盘和鼠标143的组合、相机144或其他usb输入设备。将会领会,所示的系统100是示例性的而非限制性的,因为也可使用以不同方式配置的其他类型的数据处理系统。例如,存储器控制器116和平台控制器中枢130的实例可被集成到诸如外部图形处理器112之类的分立的外部图形处理器中。在一个实施例中,平台控制器中枢130和/或存储器控制器116可在一个或多个处理器102外部。例如,系统100可以包括外部存储器控制器116和平台控制器中枢130,该外部存储器控制器116和平台控制器中枢130可被配置为在与(多个)处理器102通信的系统芯片组内的存储器控制器中枢和外围控制器中枢。图2是处理器200的实施例的框图,该处理器200具有一个或多个处理器核202a-202n、集成存储器控制器214、以及集成图形处理器208。图2的具有与本文中任何其他附图的元件相同的附图标记(或名称)的那些元件能以与在本文中其他地方描述的方式类似的任何方式进行操作或起作用,但不限于此。处理器200可包括附加核,这些附加核多达且包括由虚线框表示的附加核202n。处理器核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快速总线。系统代理核210提供对各处理器部件的管理功能。在一些实施例中,系统代理核210包括一个或多个集成存储器控制器214,以管理对各外部存储器设备(未示出)的访问。在一些实施例中,处理器核202a-202n中的一个或多个包括对同时多线程的支持。在此类实施例中,系统代理核210包括用于在多线程处理期间对核202a-202n进行协调和操作的部件。系统代理核210可附加地包括功率控制单元(pcu),该功率控制单元包括用于调节处理器核202a-202n以及图形处理器208的功率状态的逻辑和部件。在一些实施例中,处理器200附加地包括用于执行图形处理操作的图形处理器208。在一些实施例中,图形处理器208与共享高速缓存单元的集合206以及系统代理核210耦合,该系统代理核210包括一个或多个集成存储器控制器214。在一些实施例中,系统代理核210还包括显示控制器211,以将图形处理器输出驱动到一个或多个耦合的显示器。在一些实施例中,显示控制器211还可以是经由至少一个互连与图形处理器耦合的分开的模块,或者可被集成在图形处理器208内。在一些实施例中,基于环的互连单元212用于耦合处理器200的内部部件。然而,可使用替代的互连单元,诸如,点对点互连、切换式互连、或其他技术,包括本领域公知的技术。在一些实施例中,图形处理器208经由i/o链路213与环形互连212耦合。示例性i/o链路213表示各种各样的i/o互连中的至少一者,包括促进各处理器部件与高性能嵌入式存储器模块218(诸如,edram模块)之间的通信的封装上i/o互连。在一些实施例中,处理器核202a-202n中的每个处理器核以及图形处理器208将嵌入式存储器模块218用作共享末级高速缓存。在一些实施例中,处理器核202a-202n是执行同一指令集架构的同构核。在另一实施例中,处理器核202a-202n就指令集架构(isa)而言是异构的,其中,处理器核202a-202n中的一者或多者执行第一指令集,而其他核中的至少一者执行第一指令集的子集或不同的指令集。在一个实施例中,处理器核202a-202n就微架构而言是同质的,其中,具有相对较高功耗的一个或多个核与具有较低功耗的一个或多个功率核耦合。另外,处理器200可被实现在一个或多个芯片上或者被实现为除其他部件之外还具有所图示的部件的soc集成电路。图3是图形处理器300的框图,该图形处理器300可以是分立的图形处理单元、或者可以是与多个处理核集成的图形处理器。在一些实施例中,图形处理器经由至图形处理器上的寄存器的存储器映射的i/o接口并且利用被置入处理器存储器中的命令进行通信。在一些实施例中,图形处理器300包括用于访问存储器的存储器接口314。存储器接口314可以是到本地存储器、一个或多个内部高速缓存、一个或多个共享外部高速缓存、和/或到系统存储器的接口。在一些实施例中,图形处理器300还包括用于将显示输出数据驱动到显示设备320的显示控制器302。显示控制器302包括用于显示器的一个或多个重叠平面以及视频或用户接口元件的多个层的组合的硬件。显示设备320可以是内部或外部显示设备。在一个实施例中,显示设备320是头戴式显示设备,诸如,虚拟现实(vr)显示设备或增强现实(ar)显示设备。在一些实施例中,图形处理器300包括视频编解码器引擎306,以将媒体编码、解码或转码为一种或多种媒体编码格式,从一种或多种媒体编码格式编码、解码或转码媒体,或在一种或多种媒体编码格式之间进行对媒体进行编码、解码或转码,这些媒体编码格式包括但不限于:运动图像专家组(mpeg)格式(诸如,mpeg-2)、高级视频译码(avc)格式(诸如,h.264/mpeg-4avc)、以及电影&电视工程师协会(smpte)421m/vc-1、和联合图像专家组(jpeg)格式(诸如,jpeg、以及运动jpeg(mjpeg)格式)。在一些实施例中,图形处理器300包括用于执行包括例如位边界块传递的二维(2d)光栅化器操作的块图像传递(blit)引擎304。然而,在一个实施例中,使用图形处理引擎(gpe)310的一个或多个部件执行2d图形操作。在一些实施例中,gpe310是用于执行图形操作的计算引擎,这些图形操作包括三维(3d)图形操作和媒体操作。在一些实施例中,gpe310包括用于执行3d操作的3d流水线312,3d操作诸如,使用作用于3d图元形状(例如,矩形、三角形等)的处理功能来渲染三维图像和场景。3d流水线312包括可编程的固定功能元件,这些可编程的固定功能元件执行元件内的各种任务和/或将执行线程生成(spawn)至3d/媒体子系统315。虽然3d流水线312可以用于执行媒体操作,但是gpe310的实施例还包括专门用于执行诸如视频后处理和图像增强之类的媒体操作的媒体流水线316。在一些实施例中,媒体流水线316包括固定功能或可编程逻辑单元以便代替、或代表视频编解码器引擎306来执行一种或多种专业的媒体操作,诸如,视频解码加速、视频解交织、以及视频编码加速。在一些实施例中,媒体流水线316附加地包括用于生成供在3d/媒体子系统315上执行的线程的线程生成单元。所生成的线程对3d/媒体子系统315中所包括的一个或多个图形执行单元执行对媒体操作的计算。在一些实施例中,3d/媒体子系统315包括用于执行由3d流水线312和媒体流水线316生成的线程的逻辑。在一个实施例中,流水线向3d/媒体子系统315发送线程执行请求,该3d/媒体子系统包括用于仲裁并将各请求分派到可用的线程执行资源的线程分派逻辑。执行资源包括用于处理3d和媒体线程的图形执行单元阵列。在一些实施例中,3d/媒体子系统315包括用于线程指令和数据的一个或多个内部高速缓存。在一些实施例中,子系统还包括用于在线程之间共享数据并用于存储输出数据的共享存储器,包括寄存器和可寻址存储器。贯穿本文档,术语“逻辑”、“模块”、“部件”、“引擎”、“机制”、“工具”、“电路”和“电路系统”可互换地引用,并且作为示例可包括软件、硬件、固件或其任意组合。图形处理引擎图4是根据一些实施例的图形处理器的图形处理引擎410的框图。在一个实施例中,图形处理引擎(gpe)410是图3中所示的gpe310的一个版本。图4的具有与本文中任何其他附图的元件相同的附图标记(或名称)的那些元件能以与在本文中其他地方描述的方式类似的任何方式进行操作或起作用,但不限于此。例如,图示了图3的3d流水线312和媒体流水线316。媒体流水线316在gpe410的一些实施例中是任选的,并且可以不显式地包括在gpe410内。例如以及在至少一个实施例中,单独的媒体和/或图像处理器耦合至gpe410。在一些实施例中,gpe410与命令流转化器403耦合或包括命令流转化器403,该命令流转化器403向3d流水线312和/或媒体流水线316提供命令流。在一些实施例中,命令流转化器403与存储器耦合,该存储器可以是系统存储器、或者是内部高速缓存存储器和共享高速缓存存储器中的一者或多者。在一些实施例中,命令流转化器403从存储器接收命令并将这些命令发送至3d流水线312和/或媒体流水线316。这些命令是从存储用于3d流水线312和媒体流水线316的环形缓冲器取出的指示。在一个实施例中,环形缓冲器可以附加地包括存储多批多个命令的批命令缓冲器。用于3d流水线312的命令还可以包括对在存储器中存储的数据的引用,诸如但不限于用于3d流水线312的顶点数据和几何数据和/或用于媒体流水线316的图像数据和存储器对象。3d流水线312和媒体流水线316通过以下方式来处理命令和数据:经由相应流水线内的逻辑来执行操作;或将一个或多个执行线程分派给图形核阵列414。在一个实施例中,图形核阵列414包括一个或多个图形核块(例如,(多个)图形核415a、(多个)图形核415b),每个块包括一个或多个图形核。每个图形核包括一组图形执行资源,这些图形执行资源包括:用于执行图形操作和计算操作的通用执行电路和图形专用执行电路;以及固定功能纹理处理逻辑和/或机器学习和人工智能加速逻辑。在各实施例中,3d流水线312包括:固定功能逻辑和可编程逻辑,用于通过处理指令并将执行线程分派给图形核阵列414来处理一个或多个着色器程序,该着色器程序诸如,顶点着色器、几何着色器、像素着色器、片段着色器、计算着色器或其他着色器程序。图形核阵列414提供了供在处理这些着色器程序时使用的统一的执行资源块。图形核阵列414的(多个)图形核415a-414b内的多用途执行电路(例如,执行单元)包括对各种3dapi着色器语言的支持,并且可以执行与多个着色器相关联的多个同时的执行线程。在一些实施例中,图形核阵列414还包括用于执行诸如视频和/或图像处理之类的媒体功能的执行电路。在一个实施例中,执行单元附加地包括通用逻辑,除了图形处理操作之外,该通用逻辑还可编程以执行并行通用计算操作。通用逻辑可以与图1的(多个)处理器核107或如图2中的核202a-202n内的通用逻辑并行地或结合地执行处理操作。由在图形核阵列414上执行的线程生成的输出数据可以将数据输出到统一返回缓冲器(urb)418中的存储器。urb418可以存储多个线程的数据。在一些实施例中,urb418可用于在图形核阵列414上执行的不同线程之间发送数据。在一些实施例中,urb418可另外用于图形核阵列上的线程与共享功能电路420内的固定功能电路之间的同步。在一些实施例中,图形核阵列414是可缩放的,以使得该阵列包括可变数量的图形核,这些图形核各自具有基于gpe410的目标功率和性能水平的可变数量的执行单元。在一个实施例中,执行资源是动态可缩放的,以使得该执行资源可根据需要而被启用或禁用。图形核阵列414与共享功能电路420耦合,该共享功能电路420包括在图形核阵列中的图形核之间共享的多个资源。共享功能电路420内的共享功能是向图形核阵列414提供专业的补充功能的硬件逻辑单元。在各实施例中,共享功能电路420包括但不限于采样器421、数学422和线程间通信(itc)423逻辑。另外,一些实施例实现共享功能电路420内的一个或多个高速缓存425。在给定的专业功能的需求不足以包含在图形核阵列414中的情况下实施共享功能。相反,该专业功能的单个实例化被实现为共享功能电路420中的独立实体并且在图形核阵列414内的执行资源之间共享。在图形核阵列414之间共享并包括在图形核阵列414内的精确的功能的集合在跨实施例而变化。在一些实施例中,共享功能电路420内由图形核阵列414广泛使用的特定共享功能可被包括在图形核阵列414内的共享功能电路416内。在各实施例中,图形核阵列414内的共享功能电路416可以包括共享功能电路420内的一些或所有逻辑。在一个实施例中,共享功能电路420内的所有逻辑元件可在图形核阵列414的共享功能电路416内重复。在一个实施例中,共享功能电路420被排除以有利于图形核阵列414内的共享功能电路416。图5是根据本文中所描述的一些实施例的图形处理器核500的硬件逻辑的框图。图5的具有与本文中任何其他附图的元件相同的附图标记(或名称)的元件能以与在本文中其他地方描述的方式类似的任何方式进行操作或起作用,但不限于此。在一些实施例中,所图示的图形处理器核500被包括在图4的图形核阵列414内。图形处理器核500——有时称为核切片——可以是模块化图形处理器内的一个或多个图形核。图形处理器核500是示例性的一个图形核切片,并且如本文中所描述的图形处理器可包括基于目标功率和性能包络的多个图形核切片。每个图形处理器核500可以包括与多个子核501a-501f(也被称为子切片)耦合的固定功能块530,这些子核包括模块化通用和固定功能电路块。在一些实施例中,固定功能块530包括几何/固定功能流水线536,例如,在低性能和/或低功率图形处理器实施方式中,该几何/固定功能流水线536可以由图形处理器核500中的所有子核共享。在各实施例中,几何/固定功能流水线536包括3d固定功能流水线(例如,如图3和图4中的3d流水线312)、视频前端单元、线程生成器和线程分派器、以及统一返回缓冲器管理器,该统一返回缓冲器管理器管理诸如图4的统一返回缓冲器418之类的统一返回缓冲器。在一个实施例中,固定功能块530还包括图形soc接口537、图形微控制器538和媒体流水线539。图形soc接口537提供了图形处理器核500与芯片上系统集成电路内的其他处理器核之间的接口。图形微控制器538是可配置成用于管理图形处理器500的包括线程分派、调度和先占(pre-emption)在内的各种功能的可编程子处理器。媒体流水线539(例如,图3和图4的媒体流水线316)包括用于促进对包括图像数据和视频数据在内的多媒体数据进行解码、编码、预处理和/或后处理的逻辑。媒体流水线539经由对子核501-501f内的计算或采样逻辑的请求来实现媒体操作。在一个实施例中,soc接口537使得图形处理器核500能够与通用应用处理器核(例如,cpu)和/或soc内的其他部件进行通信,这些其他部件包括诸如共享末级高速缓存存储器之类的存储器层级结构元件、系统ram、和/或嵌入式芯片上或封装上dram。soc接口537还可以使得能够与soc内诸如相机成像流水线之类的固定功能设备进行通信,并且使得能够使用和/或实现可在图形处理器核500与soc内的cpu之间共享的全局存储器原子。soc接口537还可以实现针对图形处理器核500的功率管理控制,并且实现图形核500的时钟域与soc内的其他时钟域之间的接口。在一个实施例中,soc接口537实现命令缓冲器的从被配置成向图形处理器内的一个或多个图形核中的每个图形核提供命令和指令的命令流转化器和全局线程分派器的接收。当媒体操作将要被执行时,这些命令和指令可以被分派给媒体流水线539,或者当图形处理操作将要被执行时,这些命令和指令可以被分派给几何和固定功能流水线(例如,几何和固定功能流水线536、几何和固定功能流水线514)。图形微控制器538可以被配置成用于执行针对图形处理器核500的各种调度任务和管理任务。在一个实施例中,图形微控制器538可以对子核501a-501f内的执行单元(eu)阵列502a-502f、504a-504f内的各图形并行引擎执行图形和/或计算工作负荷调度。在这种调度模型中,在包括图形处理器核500的soc的cpu核上执行的主机软件可以经由多个图形处理器门铃(doorbell)中的一个来提交工作负荷,这调用了对适当图形引擎的调度操作。调度操作包括:确定接下来要运行哪个工作负荷、向命令流转化器提交工作负荷、对在引擎上运行的现有工作负荷进行先占、监测工作负荷的进展、以及通知主机软件何时完成工作负荷。在一个实施例中,图形微控制器538还可以促进图形处理器核500的低功率或空闲状态,从而为图形处理器核500提供独立于操作系统和/或系统上的图形驱动器软件跨低功率状态转换来对图形处理器核500内的寄存器进行保存和恢复的能力。图形处理器核500可具有多于或少于所图示的子核501a-501f的、多达n个的模块化子核。对于每个n个子核的集合,图形处理器核500还可以包括共享功能电路510、共享和/或高速缓存存储器512、几何/固定功能流水线514、以及用于加速各种图形和计算处理操作的附加固定功能电路516。共享功能电路510可以包括与图4的共享功能电路420相关联的逻辑单元(例如,采样器逻辑、数学逻辑、和/或线程间通信逻辑),这些逻辑单元可由图形处理器核500内的每n个子核共享。共享和/或高速缓存存储器512可以是用于图形处理器核500内的n个子核501a-501f的集合的末级高速缓存,并且还可以充当可由多个子核访问的共享存储器。几何/固定功能流水线514可以代替几何/固定功能流水线536被包括在固定功能块530内,并且可以包括相同的或类似的逻辑单元。在一个实施例中,图形处理器核500包括附加固定功能电路516,该附加固定功能电路516可以包括用于由图形处理器核500使用的各种固定功能加速逻辑。在一个实施例中,附加固定功能电路516包括用于在仅位置着色中使用的附加几何流水线。在仅位置着色中,存在两个几何流水线:几何/固定功能流水线516、536内的完全几何流水线;以及拣选流水线,该拣选流水线是可被包括在附加固定功能电路516内的附加几何流水线。在一个实施例中,拣选流水线是完全几何流水线的精简版本。完全流水线和拣选流水线可以执行同一应用的不同实例,每个实例具有单独的上下文。仅位置着色可以隐藏被丢弃的三角形的长拣选运行,从而使得在一些实例中能够更早完成着色。例如并且在一个实施例中,附件固定功能电路516内的拣选流水线逻辑可以与主应用并行地执行位置着色器,并且一般比完全流水线更快地生成关键结果,因为完全流水线仅对顶点的位置属性进行取出和着色,而不向帧缓冲器执行对像素的光栅化和渲染。拣选流水线可以使用所生成的关键结果来计算所有三角形的可见性信息,而无需考虑那些三角形是否被拣选。完全流水线(其在本实例中可被称为重放(replay)流水线)可以消耗可见性信息以便跳过被拣选的三角形从而仅对最终被传递到光栅化阶段的可见三角形进行着色。在一个实施例中,附加固定功能电路516还可以包括用于包括对机器学习训练或推理的优化在内的实现方式的机器学习加速逻辑,诸如固定功能矩阵乘法逻辑。在每个图形子核501a-501f内包括可用于响应于由图形流水线、媒体流水线、或着色器程序的请求而执行图形操作、媒体操作和计算操作的一组执行资源。图形子核501a-501f包括:多个eu阵列502a-502f、504a-504f;线程分派和线程间通信(td/ic)逻辑503a-503f;3d(例如,纹理)采样器505a-505f;媒体采样器506a-506f;着色器处理器507a-507f;以及共享本地存储器(slm)508a-508f。eu阵列502a-502f、504a-504f各自包括多个执行单元,这些执行单元是能够执行浮点逻辑运算和整数/定点逻辑运算以便为图形操作、媒体操作或计算操作(包括图形程序、媒体程序或计算着色器程序)服务的通用图形处理单元,。td/ic逻辑503a-503f执行针对子核内的执行单元的本地线程分派和线程控制操作,并且促进在该子核的执行单元上执行的线程之间的通信。3d采样器505a-505f可以将纹理或其他3d图形相关的数据读取到存储器中。3d采样器可以基于所配置的样本状态以及与给定纹理相关联的纹理格式来以不同方式读取纹理数据。媒体采样器506a-506f可以基于与媒体数据相关联的类型和格式来执行类似的读取操作。在一个实施例中,每个图形子核501a-501f可以替代地包括统一3d和媒体采样器。在子核501a-501f中的每个子核内的执行单元上执行的线程可以利用每个子核内的共享本地存储器508a-508f,以便使得在线程组内执行的线程能够使用公共的芯片上存储器池来执行。执行单元图6a-图6b图示出根据本文中所描述的实施例的线程执行电路600,该线程执行电路600包括在图形处理器核中所采用的处理元件的阵列。图6a-图6b的具有与本文中任何其他附图的元件相同的附图标记(或名称)的元件能以与在本文中其他地方描述的方式类似的任何方式进行操作或起作用,但不限于此。图6a图示出线程执行电路600的概览(或线程执行电路600),该线程执行电路600可以包括被图示为具有图5的每个子核501a-501f的硬件逻辑的变体。图6b图示出执行单元的示例性内部细节。如图6a中所图示,在一些实施例中,线程执行电路600包括着色器处理器602、线程分派器604、指令高速缓存606、包括多个执行单元608a-608n的可缩放执行单元阵列、采样器610、数据高速缓存612、以及数据端口614。在一个实施例中,可缩放执行单元阵列可以通过基于工作负荷的计算要求来启用或禁用一个或多个执行单元(例如,执行单元608a、608b、608c、608d至608n-1和608n中的任一个)来动态地缩放。在一个实施例中,所包括的部件经由互连结构而互连,该互连结构链接到这些部件中的每个部件。在一些实施例中,线程执行电路600包括通过指令高速缓存606、数据端口614、采样器610、以及执行单元阵列608a-608n中的一者或多者到存储器(诸如系统存储器或高速缓存存储器)的一个或多个连接。在一些实施例中,每个执行单元(例如,608a)是能够并行地为每个线程在处理多个数据元素的同时执行多个同时硬件线程的独立可编程通用计算单元。在各实施例中,执行单元608a-608n的阵列是可缩放的,以包括任何数量的单独的执行单元。在一些实施例中,执行单元608a-608n主要用于执行着色器程序。着色器处理器602可以处理各种着色器程序并且经由线程分派器604分派与着色器程序相关联的执行线程。在一个实施例中,线程分派器包括用于对来自图形和媒体流水线的线程发起请求进行仲裁并且在执行单元608a-608n中的一个或多个执行单元上实例化所请求的线程的逻辑。例如,几何流水线可以将顶点、曲面细分或几何着色器分派至线程执行电路以进行处理。在一些实施例中,线程分派器604还可以处理来自执行着色器程序的运行时线程生成请求。在一些实施例中,执行单元608a-608n支持包括对许多标准3d图形着色器指令的原生支持的指令集,从而使得以最小的转换来执行来自图形库(例如,direct3d和opengl)的着色器程序。这些执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如,像素着色器、片段着色器)以及通用处理(例如,计算和媒体着色器)。执行单元608a-608n中的每个执行单元都能够执行多发布的单指令多数据(simd),并且多线程操作能够在面对较高等待时间的存储器访问时实现高效的执行环境。每个执行单元内的每个硬件线程都具有专用的高带宽寄存器堆和相关的独立线程状态。对于能够进行整数、单精度浮点运算和双精度浮点运算、simd分支功能、逻辑运算、超越运算和其他混杂运算的流水线,执行是每个时钟多发布的。在等待来自存储器或共享功能之一的数据时,执行单元608a-608n内的依赖性逻辑使等待线程休眠,直到所请求的数据已被返回。当等待线程正在休眠时,硬件资源可专门用于处理其他线程。例如,在与顶点着色器操作相关联的延迟期间,执行单元可以执行针对像素着色器、片段着色器或包括不同顶点着色器的另一种类型的着色器程序的操作。执行单元608a-608n中的每个执行单元对数据元素的阵列进行操作。数据元素的数量是“执行大小”、或指令的通道数量。执行通道是执行数据元素访问、掩码、和指令内的流控制的逻辑单元。通道的数量可与针对特定图形处理器的物理算术逻辑单元(alu)或浮点单元(fpu)的数量无关。在一些实施例中,执行单元608a-608n支持整数和浮点数据类型。执行单元指令集包括simd指令。各种数据元素可以作为紧缩数据类型被存储在寄存器中,并且执行单元将基于元素的数据大小来处理各种元素。例如,当对256位宽的向量进行操作时,该256位的向量被存储在寄存器中,并且执行单元作为四个单独的64位紧缩数据元素(四字(qw)大小的数据元素)、八个单独的32位紧缩数据元素(双字(dw)大小的数据元素)、十六个单独的16位紧缩数据元素(字(w)大小的数据元素)、或三十二个单独的8位数据元素(字节(b)大小的数据元素)对向量上操作。然而,不同的向量宽度和寄存器大小是可能的。在一个实施例中,可以将一个或多个执行单元组合到融合执行单元609a-609n中,这些融合执行单元具有对于融合eu而言共同的线程控制逻辑(607a-607n)。可以将多个eu融合到eu组中。融合eu组中的每个eu可以被配置成用于执行单独的simd硬件线程。融合eu组中的eu数量可以根据实施例而变化。另外,可以每个eu地执行不同的simd宽度,包括但不限于simd8、simd16和simd32。每个所融合的图形执行单元609a-609n包括至少两个执行单元。例如,所融合的执行单元609a包括第一eu608a、第二eu608b、以及对于第一eu608a和第二eu608b而言共同的线程控制逻辑607a。线程控制逻辑607a控制在所融合的图形执行单元609a上执行的线程,从而允许所融合的执行单元609a-609n内的每个eu使用共同的指令指针寄存器来执行。一个或多个内部指令高速缓存(例如,606)被包括在线程执行电路600中,以便对执行单元的线程指令进行高速缓存。在一些实施例中,一个或多个数据高速缓存(例如,612)被包括,以对在线程执行期间的线程数据进行高速缓存。在一些实施例中,采样器610被包括,从而为3d操作提供纹理采样并且为媒体操作提供媒体采样。在一些实施例中,采样器610包括专业的纹理或媒体采样功能,以便在向执行单元提供所采样的数据之前在采样过程中处理纹理或媒体数据。在执行期间,图形和媒体流水线经由线程生成和分派逻辑向线程执行电路600发送线程发起请求。一旦一组几何对象已经被处理并被光栅化成像素数据,则着色器处理器602内的像素处理器逻辑(例如,像素着色器逻辑、片段着色器逻辑等)被调用以便进一步计算输出信息并且使得结果被写入到输出表面(例如,颜色缓冲器、深度缓冲器、模板印刷(stencil)缓冲器等)。在一些实施例中,像素着色器或片段着色器计算各顶点属性的值,这些顶点属性跨光栅化对象被内插。在一些实施例中,着色器处理器602内的像素处理器逻辑随后执行应用编程接口(api)供应的像素或片段着色器程序。为了执行着色器程序,着色器处理器602经由线程分派器604将线程分派给执行单元(例如,608a)。在一些实施例中,着色器处理器602使用采样器610中的纹理采样逻辑来访问存储器中所存储的纹理图中的纹理数据。对纹理数据和输入几何数据的算术运算计算每个几何片段的像素颜色数据,或丢弃一个或多个像素而不进行进一步处理。在一些实施例中,数据端口614提供存储器访问机制,以供线程执行电路600将经处理的数据输出至存储器以便在图形处理器输出流水线上进行进一步处理。在一些实施例中,数据端口614包括或耦合至一个或多个高速缓存存储器(例如,数据高速缓存612)从而对经由数据端口进行的存储器访问的数据进行高速缓存。如图6b中所图示,图形执行单元608可以包括指令取出单元637、通用寄存器堆阵列(grf)624、架构寄存器堆阵列(arf)626、线程仲裁器622、发送单元630、分支单元632、simd浮点单元(fpu)634的集合、以及在一个实施例中的专用整数simdalu635的集合。grf624和arf626包括与在图形执行单元608中可能活跃的每个同时的硬件线程相关联的通用寄存器堆和架构寄存器堆的集合。在一个实施例中,每线程架构状态被维持在arf626中,而在线程执行期间所使用的数据被存储在grf624中。包括针对每个线程的指令指针的每个线程的执行状态可以保持在arf626中的线程专用寄存器中。在一个实施例中,图形执行单元608具有作为同时多线程化(smt)与细粒度交织多线程化(imt)的组合的架构。该架构具有模块化配置,该模块化配置可以基于每执行单元的目标同时线程数量和目标寄存器数量而在设计时得到微调,在该模块化配置中,跨用于执行多个同时线程的逻辑来划分执行单元资源。在一个实施例中,图形执行单元608可以共同发布多条指令,这些指令可以各自是不同的指令。图形执行单元线程608的线程仲裁器622可以将指令分派给以下各项中的一项以供执行:发送单元630、分支单元632或(多个)simdfpu634。每个执行线程可以访问grf624内的128个通用寄存器,其中,每个寄存器可以存储作为具有32位数据元素的simd8元素向量可访问的32个字节。在一个实施例中,每个执行单元线程访问grf624内的4个千字节,但是实施例并不限于此,并且在其他实施例中可以提供更多或更少的寄存器资源。在一个实施例中,多达七个线程可以同时执行,但是每执行单元的线程数量还可以根据实施例而变化。在其中七个线程可访问4个千字节的实施例中,grf624可以存储总共28千字节。灵活寻址模式可以准许对多个寄存器进行一起寻址,从而高效地建立更宽的寄存器或者表示跨步矩形块数据结构。在一个实施例中,通过由消息传递发送单元630所执行的“发送”指令来分派存储器操作、采样器操作以及其他较长等待时间系统通信。在一个实施例中,分支指令被分派给专用分支单元632以便促进simd发散和最终收敛。在一个实施例中,图形执行单元608包括用于执行浮点运算的一个或多个simd浮点单元(fpu)634。在一个实施例中,(多个)fpu634还支持整数计算。在一个实施例中,(多个)fpu634可以simd执行多达数量m个32位浮点(或整数)运算,或者simd执行多达2m个16位整数或16位浮点运算。在一个实施例中,(多个)fpu中的至少一个提供支持高吞吐量超越数学功能和双精度64位浮点的扩展数学能力。在一些实施例中,8位整数simdalu635的集合还表示并且还可以具体地优化成执行与机器学习计算相关联的运算。在一个实施例中,可以在图形子核分组(例如,子切片)时对图形执行单元608的多个实例的阵列进行实例化。为了可缩放性,产品架构可以选择每子核分组的确切执行单元数量。在一个实施例中,执行单元608可以跨多个执行通道来执行指令。在进一步的实施例中,在图形执行单元608上所执行的每个线程是在不同通道上执行的。图7是图示出根据一些实施例的图形处理器指令格式700的框图。在一个或多个实施例中,图形处理器执行单元支持具有以多种格式的指令的指令集。实线框图示出一般被包括在执行单元指令中的组成部分,而虚线包括任选的或仅被包括在指令子集中的组成部分。在一些实施例中,所描述和图示的指令格式700是宏指令,因为它们是供应至执行单元的指令,这与从一旦指令被处理就进行的指令解码产生的微操作相对照。在一些实施例中,图形处理器执行单元原生地支持采用128位指令格式710的指令。64位紧凑指令格式730可用于基于所选择的指令、多个指令选项和操作数数量的一些指令。原生的128位指令格式710提供对所有指令选项的访问,而一些选项和操作在64位格式730中受限。64位格式730中可用的原生指令根据实施例而不同。在一些实施例中,使用索引字段713中的一组索引值将指令部分地压缩。执行单元硬件基于索引值来引用一组压缩表,并使用压缩表输出来重构采用128位指令格式710的原生指令。针对每种格式,指令操作码712限定执行单元要执行的操作。执行单元跨每个操作数的多个数据元素并行地执行每条指令。例如,响应于添加指令,执行单元跨标识纹理元素或图片元素的每个颜色通道执行同步添加操作。默认地,执行单元跨操作数的所有数据通道执行每条指令。在一些实施例中,指令控制字段714实现对某些执行选项的控制,这些执行选项诸如通道选择(例如,断言)以及数据通道排序(例如,混合)。针对采用128位指令格式710的指令,执行大小字段716限制了将并行地执行的数据通道的数量。在一些实施例中,执行大小字段716不可用于64位紧凑指令格式730。一些执行单元指令具有多达三个操作数,包括两个源操作数src0720、src1722和一个目的地718。在一些实施例中,执行单元支持双目的地指令,其中这些目的地中的一个是隐式的。数据操纵指令可以具有第三源操作数(例如,src2724),其中,指令操作码712确定源操作数的数量。指令的最后的源操作数可以是利用该指令传递的立即数(例如,硬编码的)值。在一些实施例中,128位指令格式710包括访问/地址模式字段726,该访问/地址模式字段726指定例如是使用直接寄存器寻址模式还是间接寄存器寻址模式。当使用直接寄存器寻址模式时,由指令中的位直接提供一个或多个操作数的寄存器地址。在一些实施例中,128位指令格式710包括访问/地址模式字段726,该访问/地址模式字段726指定针对指令的地址模式和/或访问模式。在一个实施例中,访问模式用于限定针对指令的数据访问对齐。一些实施例支持包括16字节对齐访问模式和1字节对齐访问模式的访问模式,其中,访问模式的字节对齐确定指令操作数的访问对齐。例如,当处于第一模式时,指令可将字节对齐的寻址用于源操作数和目的地操作数,并且当处于第二模式时,指令可将16字节对齐的寻址用于所有的源操作数和目的地操作数。在一个实施例中,访问/地址模式字段726的地址模式部分确定指令要使用直接寻址还是间接寻址。当使用直接寄存器寻址模式时,指令中的位直接提供一个或多个操作数的寄存器地址。当使用间接寄存器寻址模式时,可基于指令中的地址寄存器值和地址立即数字段来计算一个或多个操作数的寄存器地址。在一些实施例中,基于操作码712的位字段对指令进行分组从而简化操作码解码740。针对8位的操作码,位4、5、和6允许执行单元确定操作码的类型。所示出的确切的操作码分组仅为示例。在一些实施例中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如,移动(mov)、比较(cmp))。在一些实施例中,移动和逻辑组742共享五个最高有效位(msb),其中移动(mov)指令采用0000xxxxb的形式,并且逻辑指令采用0001xxxxb的形式。流控制指令组744(例如,调用(call)、跳转(jmp))包括采用0010xxxxb形式(例如,0x20)的指令。混杂指令组746包括指令的混合,包括采用0011xxxxb形式(例如,0x30)的同步指令(例如,等待(wait)、发送(send))。并行数学指令组748包括采用0100xxxxb形式(例如,0x40)的按分量的算术指令(例如,加(add)、乘(mul))。并行数学组748跨数据通道并行地执行算术运算。向量数学组750包括采用0101xxxxb形式(例如,0x50)的算术指令(例如,dp4)。向量数学组对向量操作数执行算术运算,诸如,点积计算。图形流水线图8是图形处理器800的另一实施例的框图。图8的具有与本文中任何其他附图中的元件相同的附图标记(或名称)的元件能以与在本文中其他地方描述的方式类似的任何方式进行操作或起作用,但不限于此。在一些实施例中,图形处理器800包括几何流水线820、媒体流水线830、显示引擎840、线程执行电路850、以及渲染输出流水线870。在一些实施例中,图形处理器800是包括一个或多个通用处理核的多核处理系统内的图形处理器。图形处理器通过至一个或多个控制寄存器(未示出)的寄存器写入或者经由通过环形互连802发布至图形处理器800的命令而受控。在一些实施例中,环形互连802将图形处理器800耦合至其他处理部件,其他处理部件诸如其他图形处理器或通用处理器。来自环形互连802的命令由命令流转化器803解译,该命令流转化器803将指令供应至几何流水线820或媒体流水线830的单独部件。在一些实施例中,命令流转化器803引导顶点获取器805的操作,该顶点获取器805从存储器读取顶点数据并执行由命令流转化器803提供的顶点处理命令。在一些实施例中,顶点获取器805将顶点数据提供给顶点着色器807,该顶点着色器807对每个顶点执行坐标空间变换和照明操作。在一些实施例中,顶点获取器805和顶点着色器807通过经由线程分派器831向执行单元852a-852b分派执行线程来执行顶点处理指令。在一些实施例中,执行单元852a-852b是具有用于执行图形和媒体操作的指令集的向量处理器阵列。在一些实施例中,执行单元852a-852b具有专用于每个阵列或在多个阵列之间被共享的附加的l1高速缓存851。高速缓存可以被配置为数据高速缓存、指令高速缓存、或被分区以不同分区中包含数据和指令的单个高速缓存。在一些实施例中,几何流水线820包括用于执行3d对象的硬件加速的曲面细分的曲面细分部件。在一些实施例中,可编程的外壳着色器811配置曲面细分操作。可编程域着色器817提供对曲面细分输出的后端评估。曲面细分器813在外壳着色器811的指示下进行操作,并且包含专用逻辑,该专用逻辑用于基于作为输入被提供至几何流水线820的粗糙的几何模型来生成详细的几何对象的集合。在一些实施例中,如果未使用曲面细分,则可以绕过曲面细分部件(例如,外壳着色器811、曲面细分器813、域着色器817)。在一些实施例中,完整的几何对象可以由几何着色器819经由被分派至所述执行单元852a-852b的一个或多个线程来处理、或者可以直接行进至剪辑器829。在一些实施例中,几何着色器对整个几何对象进行操作,而不是如在图形流水线的先前级中那样对顶点或顶点补片(patch))进行操作。如果禁用曲面细分,则几何着色器819从顶点着色器807接收输入。在一些实施例中,几何着色器819是可由几何着色器程序编程的,以便在曲面细分单元被禁用时执行几何曲面细分。在光栅化之前,剪辑器829处理顶点数据。剪辑器829可以是固定功能剪辑器或者具有剪辑和几何着色器功能的可编程剪辑器。在一些实施例中,渲染输出流水线870中的光栅化器和深度测试部件873分派像素着色器,以将几何对象转换为每像素表示。在一些实施例中,像素着色器逻辑被包括在线程执行电路850中。在一些实施例中,应用可绕过光栅化器和深度测试部件873,并且经由流出单元823访问未光栅化的顶点数据。图形处理器800具有允许数据和消息在处理器的主要部件之间传递的互连总线、互连结构或某个其他互连机制。在一些实施例中,执行单元852a-852b和相关联的逻辑单元(例如,l1高速缓存851、采样器854、纹理高速缓存858等)经由数据端口856进行互连,以执行存储器访问并且与处理器的渲染输出流水线部件进行通信。在一些实施例中,采样器854、高速缓存851、858以及执行单元852a-852b各自都具有单独的存储器访问路径。在一个实施例中,纹理高速缓存858还可以被配置为采样器高速缓存。在一些实施例中,渲染输出流水线870包含光栅化器和深度测试部件873,该光栅化器和深度测试部件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调用转换为可由图形处理器处理的命令。在一些实施例中,为开放图形库(opengl)、开放计算语言(opencl)和/或vulkan图形和计算api(这些全部来自科纳斯组织(khronosgroup))提供支持。在一些实施例中,还可以为来自微软公司的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状态设置命令。这些命令的值至少部分地基于使用中的特定3dapi来确定。在一些实施例中,如果将不使用某些流水线元件,则3d流水线状态930命令还能够选择性地禁用或绕过这些特定的流水线元件。在一些实施例中,3d图元932命令用于提交待由3d流水线处理的3d图元。经由3d图元932命令传递给图形处理器的命令和相关联参数将被转发到图形流水线中的顶点获取功能。顶点获取功能使用3d图元932命令数据来生成顶点数据结构。顶点数据结构被存储在一个或多个返回缓冲器中。在一些实施例中,3d图元932命令用于经由顶点着色器对3d图元执行顶点操作。为了处理顶点着色器,3d流水线922将着色器执行线程分派至图形处理器执行单元。在一些实施例中,经由执行934命令或事件来触发3d流水线922。在一些实施例中,寄存器写入触发命令执行。在一些实施例中,经由命令序列中的‘前进’(‘go’)或‘踢除’(‘kick’)命令来触发执行。在一个实施例中,使用流水线同步命令来触发命令执行,以对通过图形流水线的命令序列进行转储清除。3d流水线将针对3d图元来执行几何处理。一旦完成操作,则对所得到的几何对象进行光栅化,并且像素引擎对所得到的像素进行着色。对于那些操作,还可以包括用于控制像素着色和像素后端操作的附加命令。在一些实施例中,当执行媒体操作时,图形处理器命令序列910跟随媒体流水线924路径。一般地,针对媒体流水线924进行编程的具体用途和方式取决于待执行的媒体或计算操作。在媒体解码期间,特定的媒体解码操作可被卸载到媒体流水线。在一些实施例中,还可绕过媒体流水线,并且可使用由一个或多个通用处理核提供的资源来整体地或部分地执行媒体解码。在一个实施例中,媒体流水线还包括用于通用图形处理器单元(gpgpu)操作的元件,其中,图形处理器用于使用计算着色器程序来执行simd向量运算,该计算着色器程序与渲染图形图元不是显式地相关的。在一些实施例中,以与3d流水线922相似的方式对媒体流水线924进行配置。将一组用于配置媒体流水线状态940的命令分派或放置到命令队列中,在媒体对象命令942之前。在一些实施例中,用于媒体流水线状态的命令940包括用于配置媒体流水线元件的数据,这些媒体流水线元件将用于处理媒体对象。这包括用于在媒体流水线内配置视频解码和视频编码逻辑的数据,诸如,编码或解码格式。在一些实施例中,用于媒体流水线状态940的命令还支持将一个或多个指针用于包含批量的状态设置的“间接”状态元件。在一些实施例中,媒体对象命令942将指针供应至媒体对象以用于由媒体流水线进行处理。媒体对象包括存储器缓冲器,该存储器缓冲器包含待处理的视频数据。在一些实施例中,在发布媒体对象命令942之前,所有的媒体流水线状态必须是有效的。一旦流水线状态被配置并且媒体对象命令942被排队,则经由执行944命令或等效的执行事件(例如,寄存器写入)来触发媒体流水线924。随后可通过由3d流水线922或媒体流水线924提供的操作对来自媒体流水线924的输出进行后处理。在一些实施例中,以与媒体操作类似的方式来配置和执行gpgpu操作。图形软件架构图10图示出根据一些实施例的用于数据处理系统1000的示例性图形软件架构。在一些实施例中,软件架构包括3d图形应用1010、操作系统1020、以及至少一个处理器1030。在一些实施例中,处理器1030包括图形处理器1032以及一个或多个通用处理器核1034。图形应用1010和操作系统1020各自在数据处理系统的系统存储器1050中执行。在一些实施例中,3d图形应用1010包含一个或多个着色器程序,该一个或多个着色器程序包括着色器指令1012。着色器语言指令可以采用高级着色器语言,诸如,高级着色器语言(hlsl)或opengl着色器语言(glsl)。应用还包括可执行指令1014,该可执行指令1014采用适合用于由通用处理器核1034执行的机器语言。应用还包括由顶点数据限定的图形对象1016。在一些实施例中,操作系统1020是来自微软公司的操作系统、专用类unix操作系统、或使用linux内核的变体的开源类unix操作系统。操作系统1020可以支持图形api1022,诸如,direct3dapi、openglapi或vulkanapi。当direct3dapi正在使用时,操作系统1020使用前端着色器编译器1024以将采用hlsl的任何着色器指令1012编译成较低级的着色器语言。编译可以是即时(jit)编译,或者应用可以执行着色器预编译。在一些实施例中,在对3d图形应用1010进行编译期间,将高级着色器编译成低级着色器。在一些实施例中,以中间形式(诸如,由vulkanapi使用的标准可移植中间表示(spir)的版本)提供着色器指令1012。在一些实施例中,用户模式图形驱动器1026包含后端着色器编译器1027,该后端着色器编译器1027用于将着色器指令1012转换为硬件专用的表示。当openglapi正在使用时,将采用glsl高级语言的着色器指令1012传递至用户模式图形驱动器1026以用于编译。在一些实施例中,用户模式图形驱动器1026使用操作系统内核模式功能1028来与内核模式图形驱动器1029进行通信。在一些实施例中,内核模式图形驱动器1029与图形处理器1032进行通信以分派命令和指令。ip核实现至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性代码实现,该机器可读介质表示和/或限定集成电路(诸如,处理器)内的逻辑。例如,机器可读介质可包括表示处理器内的各个逻辑的指令。当由机器读取时,指令可使机器制造用于执行本文中所描述的技术的逻辑。此类表示(称为“ip核”)是集成电路的逻辑的可重复使用单元,这些可重复使用单元可以作为对集成电路的结构进行描述的硬件模型而被存储在有形的机器可读介质上。可将该硬件模型供应给各消费者或制造设施,这些消费者或制造设施将该硬件模型加载在制造集成电路的制造机器上。可制造集成电路,以使得电路执行与本文中所描述的实施例中的任一实施例相关联地描述的操作。图11a是图示出根据实施例的可以用于制造集成电路以执行操作的ip核开发系统1100的框图。ip核开发系统1100可用于生成可以并入到更大的设计中或用于构建整个集成电路(例如,soc集成电路)的模块化、可重复使用的设计。设计设施1130可以采用高级编程语言(例如,c/c++)来生成对ip核设计的软件仿真1110。软件仿真1110可以用于使用仿真模型1112来设计、测试并验证ip核的行为。仿真模型1112可以包括功能、行为和/或时序仿真。然后可以从仿真模型1112创建或合成寄存器传输级(rtl)设计1115。rtl设计1115是对硬件寄存器之间的数字信号的流动进行建模的集成电路(包括使用建模的数字信号执行的相关联的逻辑)的行为的抽象。除了rtl设计1115之外,还可以创建、设计或合成处于逻辑级或晶体管级的较低层级的设计。由此,初始设计和仿真的具体细节可有所不同。可由设计设施将rtl设计1115或等效方案进一步合成为硬件模型1120,该硬件模型1120可采用硬件描述语言(hdl)或物理设计数据的某种其他表示。可以进一步仿真或测试hdl以验证ip核设计。可使用非易失性存储器1140(例如,硬盘、闪存、或任何非易失性存储介质)来存储ip核设计以用于递送至第3方制造设施1165。替代地,可以通过有线连接1150或无线连接1160来传输(例如,经由互联网)ip核设计。制造设施1165随后可制造至少部分地基于ip核设计的集成电路。所制造的集成电路可以被配置成用于执行根据本文中所描述的至少一个实施例的操作。图11b图示出根据本文中所描述的一些实施例的集成电路封装组件1170的截面侧视图。集成电路封装组件1170图示出如本文中所描述的一个或多个处理器或加速器设备的实现方式。封装组件1170包括连接至衬底1180的多个硬件逻辑单元1172、1174。逻辑1172、1174可以至少部分地在可配置逻辑或固定功能逻辑硬件中实现,并且可以包括(多个)处理器核、(多个)图形处理器或本文中所描述的其他加速器设备中的任何一者的一个或多个部分。每个逻辑单元1172、1174可以在半导体管芯内实现并且经由互连结构1173与衬底1180耦合。互连结构1173可以被配置成在逻辑1172、1174与衬底1180之间路由电信号,并且可以包括互连,诸如但不限于凸块或支柱。在一些实施例中,互连结构1173可被配置成用于路由电信号,这些电信号诸如例如,与逻辑1172、1174的操作相关联的输入/输出(i/o)信号和/或功率或接地信号。在一些实施例中,衬底1180是基于环氧树脂的层压衬底。在其他实施例中,封装衬底1180可以包括其他合适类型的衬底。封装体组件1170可以经由封装互连1183连接至其他电气设备。封装互连1183可耦合至衬底1180的表面以便将电信号路由到其他电气设备,诸如母板、其他芯片组或多芯片模块。在一些实施例中,逻辑单元1172、1174与桥接器1182电耦合,该桥接器1182被配置成用于在逻辑1172、1174之间路由电信号。桥接器1182可以是为电信号提供路由的密集互连结构。桥接器1182可包括由玻璃或合适的半导体材料构成的桥接器衬底。电路由特征可以在桥接器衬底上形成以便提供逻辑1172、1174之间的芯片到芯片连接。尽管图示了两个逻辑单元1172、1174和桥接器1182,但是本文中所描述的实施例可包括一个或多个管芯上的更多或更少的逻辑单元。一个或多个管芯可由零个或多个桥接器连接,因为逻辑被包括在单个管芯上时,可以排除桥接器1182。替代地,多个管芯或逻辑单元可以由一个或多个桥接器连接。另外,多个逻辑单元、管芯和桥接器能以包括三维配置的其他可能的配置连接在一起。示例性芯片上系统集成电路图12-图14图示出根据本文中所描述的各实施例的可使用一个或多个ip核来制造的示例性集成电路和相关联的图形处理器。除了所图示的之外,还可包括其他逻辑和电路,包括附加的图形处理器/核、外围接口控制器或通用处理器核。图12是图示出根据实施例的可使用一个或多个ip核来制造的示例性芯片上系统集成电路1200的框图。示例性集成电路1200包括一个或多个应用处理器1205(例如,cpu)、至少一个图形处理器1210,并且可附加地包括图像处理器1215和/或视频处理器1220,其中的任一项都可以是来自相同的或多个不同的设计设施的模块化ip核。集成电路1200包括外围或总线逻辑,该外围或总线逻辑包括usb控制器1225、uart控制器1230、spi/sdio控制器1235和i2s/i2c控制器1240。另外,集成电路可以包括显示设备1245,该显示设备1245耦合至高清晰度多媒体接口(hdmi)控制器1250和移动产业处理器接口(mipi)显示接口1255中的一个或多个。可由闪存子系统1260(包括闪存和闪存控制器)来提供存储。可经由存储器控制器1265来提供存储器接口以访问sdram或sram存储器设备。另外,一些集成电路附加地包括嵌入式安全引擎1270。图13a-图13b是图示出根据本文中所描述的实施例的用于在soc内使用的示例性图形处理器的框图。图13a图示出根据实施例的可使用一个或多个ip核来制造的芯片上系统集成电路的示例性图形处理器1310。图13b图示出根据实施例的可使用一个或多个ip核来制造的芯片上系统集成电路的附加示例性图形处理器1340。图13a的图形处理器1310是低功率图形处理器核的示例。图13b的图形处理器1340是较高性能图形处理器核的示例。图形处理器1310、1340中的每个图形处理器可以是图12的图形处理器1210的变体。如图13a中所示,图形处理器1310包括顶点处理器1305以及一个或多个片段处理器1315a-1315n(例如,1315a、1315b、1315c、1315d至1315n-1和1315n)。图形处理器1310可以经由分开的逻辑执行不同的着色器程序,以使得顶点处理器1305被优化成执行用于顶点着色器程序的操作,而一个或多个片段处理器1315a-1315n执行用于片段或像素着色器程序的片段(例如,像素)着色操作。顶点处理器1305执行3d图形流水线的顶点处理级,并生成图元和顶点数据。(多个)片段处理器1315a-1315n使用由顶点处理器1305生成的图元和顶点数据来产生显示在显示设备上的帧缓冲器。在一个实施例中,(多个)片段处理器1315a-1315n被优化成执行如提供用于openglapi中的片段着色器程序,片段处理器1315a-1315n可用于执行与如提供用于direct3dapi中的像素着色器程序类似的操作。图形处理器1310附加地包括一个或多个存储器管理单元(mmu)1320a-1320b、(多个)高速缓存1325a-1325b和(多个)电路互连1330a-1330b。一个或多个mmu1320a-1320b提供用于图形处理器1310的虚拟到物理地址映射,包括用于顶点处理器1305和/或(多个)片段处理器1315a-1315n的虚拟到物理地址映射,除了存储在一个或多个高速缓存1325a-1325b中的顶点或图像/纹理数据之外,顶点处理器1305和/或(多个)片段处理器1315a-1315n还可引用存储在存储器中的顶点或图像/纹理数据。在一个实施例中,一个或多个mmu1320a-1320b可与系统内的其他mmu同步,以使得每个处理器1205-1220可以参与共享或统一虚拟存储器系统,其他mmu包括与图12的一个或多个应用处理器1205、图像处理器1215和/或视频处理器1220相关联的一个或多个mmu。根据实施例,一个或多个电路互连1330a-1330b使得图形处理器1310能够经由soc的内部总线或经由直接连接与soc内的其他ip核接口连接。如图13b中所示,图形处理器1340包括图13a的图形处理器1310的一个或多个mmu1320a-1320b、高速缓存1325a-1325b和电路互连1330a-1330b。图形处理器1340包括一个或多个着色器核1355a-1355n,该一个或多个着色器核1355a-1355n(例如,1355a、1355b、1355c、1355d、1355e、1355f至1355n-1和1355n)提供统一着色器核架构,在该统一着色器核架构中,单个核或单类型的核可以执行所有类型的可编程着色器代码,包括用于实现顶点着色器、片段着色器和/或计算着色器的着色器程序代码。存在的着色器核的确切数量在各实施例和各实现方式之间可以有所不同。另外,图形处理器1340包括核间任务管理器1345和分块单元(tilingunit)1358,该核间任务管理器1345充当线程分派器以将执行线程分派给一个或多个着色器核1355a-1355n,该分块单元1358用于加速用于基于图块的渲染的分块操作,在用于基于图块的渲染的分块操作中,对场景的渲染操作被细分在图像空间中,从而例如利用场景内的局部空间一致性,或优化内部高速缓存的使用。图14a-图14b图示出根据本文中所描述的实施例的附加示例性图形处理器逻辑。图14a图示出图形核1400,该图形核1400可包括在图12的图形处理器1210内并且可以是如图13b中的统一着色器核1355a-1355n。图14b图示出附加通用图形处理单元1430,该附加通用图形处理单元1430是适合于部署在多芯片模块上的高度并行的通用图形处理单元。如图14a中所示,图形核1400包括对于图形核1400内的执行资源而言共同的共享指令高速缓存1402、纹理单元1418和高速缓存存储器/共享存储器1420。图形核1400可以包括多个切片1401a-1401n或针对每个核的分区,并且图形处理器可以包括图形核1400的多个实例。切片1401a-1401n可以包括支持逻辑,该支持逻辑包括本地指令高速缓存1404a-1404n、线程调度器1406a-1406n、线程分派器1408a-1408n、以及一组寄存器1410a-1410n。为了执行逻辑运算,切片1401a-1401n可以包括一组附加功能单元(afu1412a-1412n)、浮点单元(fpu1414a-1414n)、整数算术逻辑单元(alu1416a-1416n)、寻址计算单元(acu1413a-1413n)、双精度浮点单元(dpfpu1415a-1415n)、以及矩阵处理单元(mpu1417a-1417n)。这些计算单元中的一些以特定精度进行操作。例如,fpu1414a-1414n可以执行单精度(32位)和半精度(16位)浮点运算,而dpfpu1415a-1415n执行双精度(64位)浮点运算。alu1416a-1416n可以以8位精度、16位精度和32位精度执行可变精度整数运算,并且可以被配置用于混合精度运算。mpu1417a1417n也可以被配置用于混合精度矩阵运算,包括半精度浮点运算和8位整数运算。mpu1417a-1417n可以执行各种各样的矩阵运算以便加速机器学习应用框架,包括实现对于加速的通用矩阵-矩阵乘法(gemm)的支持。afu1412a-1412n可以执行不受浮点单元或整数单元支持的附加逻辑运算,包括三角函数运算(例如,正弦、余弦等)。如图14b中所示,通用处理单元(gpgpu)1430可以被配置成使得能够由图形处理单元阵列执行高度并行的计算操作。另外,gpgpu1430可以直接链接到gpgpu的其他实例以便创建多gpu集群,从而提高尤其是深度神经网络的训练速度。gpgpu1430包括用于实现与主机处理器的连接的主机接口1432。在一个实施例中,主机接口1432是pci快速接口。然而,主机接口还可以是供应方特定的通信接口或通信结构。gpgpu1430从主机处理器接收命令并且使用全局调度器1434将与那些命令相关联的执行线程分发给一组计算集群1436a-1436h。计算集群1436a-1436h共享高速缓存存储器1438。高速缓存存储器1438可以充当计算集群1436a-1436h内的高速缓存存储器的较高层级的高速缓存。gpgpu1430包括经由一组存储器控制器1442a-1442b与计算集群1436a-1436h耦合的存储器1444a至1444b。在各实施例中,存储器1444a至1444b可以包括各种类型的存储器设备,包括动态随机存取存储器(dram)或图形随机存取存储器,诸如同步图形随机存取存储器(sgram),包括图形双倍数据速率(gddr)存储器。在一个实施例中,计算集群1436a-1436h各自包括一组图形核(如图14a的图形核1400),这些图形核可以包括多种类型的整数逻辑单元和浮点逻辑单元,这些逻辑单元可以在一定精度范围内执行包括适合于机器学习计算的计算操作。例如并且在一个实施例中,计算集群1436a-1436h中的每个计算集群中的浮点单元的至少一个子集可以被配置成用于执行16位或32位浮点运算,而浮点单元的不同子集可以被配置成用于执行64位浮点运算。gpgpu1430的多个实例可以被配置成作为计算集群进行操作。由计算集群用来进行同步和数据交换的通信机制跨实施例而变化。在一个实施例中,gpgpu1430的多个实例通过主机接口1432进行通信。在一个实施例中,gpgpu1430包括i/o中枢1439,该i/o中枢1439将gpgpu1430与实现到gpgpu的其他实例的直接连接的gpu链路1440耦合。在一个实施例中,gpu链路1440耦合至实现gpgpu1430的多个实例之间的通信和同步的专用gpu到gpu桥接器。在一个实施例中,gpu链路1440与高速互连耦合,以便向其他gpgpu或并行处理器传输和接收数据。在一个实施例中,gpgpu1430的多个实例位于单独的数据处理系统中并且经由可经由主机接口1432访问的网络设备进行通信。在一个实施例中,除了主机接口1432或作为对主机接口1432的替代方案,gpu链路1440还可以被配置成用于实现到主机处理器的连接。尽管gpgpu1430的所图示的配置可以被配置成训练神经网络,但是一个实施例提供了gpgpu1430的替代配置,该替代配置可以被配置成部署在高性能或低功率推断平台内。在推断配置中,gpgpu1430包括计算集群1436a-1436h中与训练配置有关的更少计算集群。另外,与存储器1444a-1444b相关联的存储器技术可在推断配置与训练配置之间不同,其中,更高带宽存储器技术专用于训练配置。在一个实施例中,gpgpu1430的推断配置可以支持推断特定指令。例如,推断配置可以提供对一个或多个8位整数点积指令的支持,这些指令通常在所部署的神经网络的推断操作期间使用。如先前所讨论,为了提供gpu中大型且快速的寄存器堆(rf),通常通过将寄存器分组为可以并行访问的不同区块从而使用多区块的结构来实现高吞吐量。然而,寄存器区块冲突可导致流水线停止,并且这对于具有非平衡寄存器区块使用的应用可能具有显著的性能影响。诸如添加更多寄存器端口和区块、缓冲指令、以及寄存器重命名之类的各种基于硬件的现有方式可以用于降低区块冲突,但是这些基于硬件的方法增加了设计复杂度并且可能使得gpu功率/性能效率更低。另一方面,编译器还可以应用复杂的寄存器分配算法来降低冲突概率,但是该基于编译器的方法往往伴随有更高编译时间的成本或者甚至更坏的溢出/填充和存储器停止的增加。用于减少寄存器区块冲突的本设计包括最小的gpu硬件改变,但是可以利用编译器生成的提示来避免由区块冲突导致的流水线停止。本设计通过利用在现代gpu中可用的零周期(zero-cycle)上下文切换能力来避免区块冲突停止。gpuisa被扩展为具有新的线程切换字段,该线程切换字段指示指令是否可能具有潜在冲突。在寄存器分配之后,编译器检测可能导致区块冲突的指令并且因此延迟(由于该指令与更早的运行中指令使用同一区块),并且标记新的线程切换字段以指示潜在区块冲突。在发布指令之前,gpu硬件首先检查线程切换字段是否被设置,并且如果该字段被设置,则切换到从另一线程发布。对寄存器堆进行分区,以使得由每个线程使用不同的端口来访问它们自己的通用寄存器堆(grf),从而使得来自不同线程的读取和写入可以同时进行。如果新的线程切换字段未被设置,则使用正常线程仲裁。依赖于软件提示和零成本硬件线程切换,本设计以最小开销容易地降低了区块冲突。与传统硬件方式相比,本设计的额外的硬件机制成本非常低,并且仅附加地需要提示检查机制。与传统软件方式相比,由于编译器不必在编译时完全解决区块冲突,本设计可以有助于提高寄存器分配成功的可能性、增加代码调度器的有效性、以及显著地降低寄存器分配算法的复杂度。本设计包括在gpu上实现的多区块的寄存器堆。图15图示出根据一个实施例的多区块的寄存器堆。在gpu处理器的每个执行单元(eu)中,存在多个硬件线程,并且每个线程具有至少128个256位的通用寄存器。在该示例中,寄存器堆1500被分区为众多区块(例如,区块1510、1520),其中每个区块具有128个通用寄存器。每个线程的区块可以被分区为具有双256位宽的读取端口的偶数和奇数区块。在一个示例中,奇数编号的寄存器r1-r63属于端口1530,偶数编号的寄存器r0-r62属于端口1532,奇数编号的寄存器r65-r127属于端口1531,并且偶数编号的寄存器r64-r126属于端口1533。对不同区块的寄存器访问可以并行地发生,来自不同硬件线程的访问也是如此。在一个示例中,指令可以具有多个源操作数(例如,a+b=c、r20、r30等)。当第一和第二指令(或者三源指令的任何两个指令)读取去到同一区块和读取端口时,发生停止。当寄存器读取流水线级中的两个指令来自同一线程时,可能发生本设计的gpu区块冲突。因此,用于降低冲突概率的简单的方式是在每一个周期执行线程切换来降低来自同一线程的两个指令将在同一周期中执行寄存器读取的可能性。然而,由于降低了数据依赖性(例如,指令读取a必须等待指令写入a)的等待时间隐藏机会,此种盲线程切换可能具有性能损失,并且还使得寄存器高速缓存效率更低。仅在可能区块冲突时执行线程切换的编译器引导的方案因此是优选的。指令二进制编码中的一个字段(例如,位)可以用于此目的。图16a-图16b图示出根据实施例的用于可能区块冲突时的线程切换的方法。根据一个实施例,包括编译器、图形驱动器、gpu、图形处理器或多核cpu中的至少一者的处理机制执行图16a的操作。在图16a的操作1602处,处理机制将源指令的源操作数指派给不同的寄存器区块或端口,以至少部分地避免寄存器区块冲突或降低区块冲突。否则,将发生区块冲突。该处理机制将操作数指派给不同的寄存器,以避免区块冲突并降低流水线中的延迟(例如,利用数据依赖性的等待时间隐藏机会)。该处理机制可将大量的操作数或变量指派给有限数量的寄存器。然而,该处理机制不试图完全避免由指令对导致的区块冲突,因为这将不仅仅引入显著的复杂性而且还可能严重限制指令调度器的有效性。在操作1604处,该处理机制执行包括确定指令的次序的指令调度。在操作1606处,该处理机制判定是否可以减少区块冲突。如果是,则该处理机制在操作1608处修改指令调度(例如,修改指令的次序)以减少区块冲突。在操作1610处,处理机制判定在包括第一指令和第二指令的顺序排序的指令之间是否存在任何区块冲突。如果存在区块冲突,则在操作1612处该处理机制对经排序的指令之中的第一指令生成线程切换字段(例如,生成线程切换位)。在一个示例中,生成线程切换字段包括基于检测到寄存器区块冲突而设置第一指令的线程切换位。方法进行以在操作1614处生成指令的编码(例如,二进制编码)。如果不需要线程切换字段,则方法从操作1610进行到操作1614。图16b的操作由接收经编码的指令的硬件部件(例如,执行单元、gpu、图形处理器、处理器)来执行。在操作1620处,该硬件部件的解码电路(例如,电路1805、控制单元、数字电路)检查正在被发布的第一指令(例如,当前指令)的线程切换字段(例如,线程切换位)是否被设置。如果该线程切换字段被设置,则硬件部件执行强制第一线程切换机制,并且这使得将要被发布的下一指令从其他线程中的一个线程被取出。换言之,来自另一线程的下一指令将被加载到流水线,这将同时与当前指令流水线化地执行。否则,在操作1624处,当线程切换字段未被设置时,硬件部件执行正常第二线程切换机制。此种正常第二线程切换机制取决于切换策略,如果当前指令与同一线程中的下一指令之间存在依赖性,则将取出来自其他线程的指令以填充在流水线中,否则,将发布当前线程的下一指令。第一线程切换机制(例如,基于区块冲突软件提示的切换)与正常第二线程切换机制之间的不同是对不同硬件部件的不同利用。对于第一线程切换机制,软件提示使硬件部件检查提示字段,而第二线程切换机制是基于依赖性的,在该第二线程切换机制中,硬件部件检查相邻指令之间的依赖性。在指令执行期间,指令之间可能存在依赖性,第二线程切换机制的示例如下:在第一线程中,下列两个指令连续运行。add(加)r10<r20+r30mul(乘)r50<r10*r40由于流水线,当mul读取r10时,add指令仍未结束执行。在正常执行中,mul指令将在流水线中被停止,并且必须等待直到add指令结束执行。这将导致延迟。利用第二线程切换机制,当硬件部件看到停止时,该硬件部件将自动地切换到另一线程(例如,第二线程)的指令。要选择的线程取决于硬件切换策略和依赖性检查结果。以此种方式,硬件使流水线保持忙碌从而改善性能。在该示例中,在add指令之后将不发布mul指令。在add指令之后将发布来自其他线程(例如,第二线程)的指令。图17a-图17b示出了根据实施例的硬件线程切换如何降低区块冲突的示例。在示例中,图17a包括将要由线程t0和t1执行的指令1702、1704和1706。图17b图示出包括区块1712和1714的存储器区块1710,每个区块具有端口1和2。编译器将源寄存器操作数(例如,r10、r30、r40、r31、r74)指派给这些存储器区块和端口,以避免区块冲突。在一个示例中,操作1602指派源寄存器操作数。操作1604对指令1702、1704和1706进行排序。操作1606判定是否可以降低区块冲突(例如,指令1702的r10和指令1704的r10)。在一个示例中,操作1610判定“add”指令1702与“mad”指令1704之间存在区块冲突,因为r30和r10在同一区块中并使用同一读取端口1,并且作为结果,编译器在操作1612处为“add”指令1702设置切换字段(例如,切换位“{s}”)。关于指令“mad”和“and”,由于r31位于不同于r40和r74的区块中,在其之间不存在区块冲突。表1示出了不具有硬件线程切换情况下的流水线中的指令执行细节。时钟解码arbgrf1grf20t0_add1t0_madt0_add2t0_andt0_madt0_add(r20)3t0_andt0_mad(r10)t0_add(r30)4t0_add(r30)5t0_and(r31)t0_mad(r40,r74)6t0_and(r49)由于在时钟3中存在针对r30和r10读取的区块冲突,时钟4被浪费以读取寄存器r10。解码列指示正在被解码的指令,arb列表示线程分派,grf1列表示针对第一源操作数的寄存器操作(例如,读取第一源操作数),并且grf2列表示针对第二源操作数的寄存器操作(例如,读取第二源操作数)。表2示出了具有线程切换的情况下用于指令1702、1704和1706的流水线细节。时钟解码arbgrf1grf20t0_add1t1_addt0_add2t0_madt1_addt0_add(r20)3t0_andt0_madt1_add(r20)t0_add(r30)4t0_andt0_mad(r10)t1_add(r30)5t0_and(r31)t0_mad(r40,r74)6t0_and(r49)当硬件(例如,gpu、图形核、cpu)在时钟0处看到指令“t0_add”中的线程切换提示位时,硬件在时钟1处从线程t1发布指令“t1_add”,以避免“t0_add”指令与“t0_mad”指令之间的冲突。结果是,在相同的时间时钟中,与不具有基于提示的硬件线程切换的表1中的执行相比,表2中多执行了一个指令(例如,“t1_add”)。图18图示出根据本文中所描述的实施例的附加示例性图形处理器核。图18图示出图形核1800,该图形核1800可被包括在图12的图形处理器1210内并且可以是如图13b的统一着色器核1355a-1355n。如图18中所示,图形核1800包括共享指令高速缓存1804、解码电路1805、纹理单元1818以及高速缓存/共享存储器1870,它们对于图形核1800内的执行资源1810-1819(例如,执行单元、执行电路)是公共的。例如,高速缓存/共享存储器1870对于执行资源是公共的,并且可耦合至每个执行资源(例如,耦合至寄存器、耦合至执行单元等)。图形处理器可以包括图形核1800的多个实例。解码电路1805检查正在被发布的当前指令的线程切换字段(例如,线程切换位)是否被设置。解码电路允许图形处理器确定将要执行什么指令,以使得图形处理器可以确定为了执行该指令其需要取出多少操作数。从存储器取出的操作码被解码以用于接下来的步骤,并且被移动到恰当的寄存器。每个执行资源可以包括支持逻辑,该支持逻辑包括具有本地指令高速缓存1821、1825、…1831、具有指令1822、1826、…1832的硬件线程(例如,硬件线程1820、1824、…1830)。硬件线程是具有对应的线程指令和寄存器堆的执行上下文。在一个示例中,线程1820是具有指令1821和寄存器1822的第一线程。线程1824是具有指令1825和寄存器1826的第二线程。每个执行单元可能具有某个数量的线程(例如,1-7个线程)。当线程切换字段如本文中所描述地被设置时,可以切换执行上下文。支持逻辑进一步包括线程调度器1840和线程仲裁器1850,该线程调度器1840用于线程调度,线程仲裁器1850用于将线程指令分派到执行电路1860的单元中的一个单元以供执行。为了执行逻辑运算,每个执行资源可以包括一组附加功能单元(例如,afu1863)、浮点单元(例如,fpu1861)、整数算术逻辑单元(例如,alu1862)、地址计算单元、双精度浮点单元以及矩阵处理单元。afu(例如,afu1863)可以执行不被浮点或整数单元支持的附加逻辑运算,包括三角函数运算(例如,正弦、余弦等)。在一个示例中,存储器操作、采样器1864的采样器操作以及其他更长等待时间的系统通信经由“send(发送)”指令被分派,这些“send”指令由消息传递发送单元1865执行。本设计通过零成本硬件线程切换降低了区块冲突,扩展指令二进制文件具有软件提示位以触发硬件线程切换,并且执行被添加到编译器的额外的区块冲突分析和设置轮次以设置线程切换提示以用于程序。本设计包括用于降低gpu中的区块冲突问题的机制。本设计采用现有硬件线程切换机制,使用混合硬件和软件方案,以在非常低的硬件和软件成本下降低区块冲突。该机制几乎不对硬件管芯尺寸有影响,该硬件管芯尺寸对于集成gpu是关键的。利用此机制,由于寄存器区块冲突降低和提高的寄存器分配成功比率,可以大大提高应用的性能。前述说明和附图应当被认为是说明性的,而不是限制性的。本领域技术人员将理解,可对本文中所描述的实施例作出各种修改和改变,而不背离如所附权利要求中所阐述的本发明的更宽泛精神和范围。一些实施例涉及包括用于线程切换的装置的示例1,该装置包括图形处理单元(例如,图形处理器200、300、800、1032、1210、1310、1340,通用处理单元(gpgpu)1430,图形处理器核1800),该图形处理单元包括:多个寄存器区块(例如,通用寄存器堆阵列(grf)624,区块1510、1520,寄存器1822、1826、…1832),用于存储操作数,这些操作数被指派以至少部分地避免寄存器区块冲突;以及解码电路(例如,解码电路1805),用于检查将利用第一线程来执行的第一指令的线程切换字段。示例2包括如示例1所述的主题,其中,线程切换字段包括第一指令的线程切换位。示例3包括如示例1-2所述的主题,进一步包括:线程调度器,用于执行第一线程切换机制,以使得第二指令在第一指令的线程切换位被设置时利用第二线程来执行。示例4包括如示例1-3所述的主题,其中,第一线程切换机制由于第一指令的第一操作数与不同的指令的第二操作数之间的寄存器区块冲突而使得第二指令利用第二线程来执行。示例5包括如示例1-4所述的主题,其中,第一操作数和第二操作数被指派给同一寄存器区块和该寄存器区块的同一读取端口。示例6包括如示例2所述的主题,其中,当第一指令的线程切换位未被设置时,线程调度器用于执行第二线程切换机制。一些实施例涉及包括图形处理单元(gpu)的示例7,该图形处理单元包括:寄存器堆阵列,具有多个寄存器区块以存储操作数,这些操作数被指派以至少部分地避免寄存器区块冲突;以及用于检查要利用第一线程来执行的第一指令的线程切换字段的电路。示例8包括如示例7所述的主题,其中,线程切换字段包括第一指令的线程切换位。示例9包括如示例7-8所述的主题,进一步包括:线程调度器,用于执行第一线程切换机制,以使得第二指令在第一指令的线程切换位被设置时利用第二线程来执行。示例10包括如示例7-9所述的主题,其中,第一线程切换机制由于第一指令的第一操作数与不同的指令的第二操作数之间的寄存器区块冲突而使得第二指令利用第二线程来执行。示例11包括如示例7-10所述的主题,其中,第一线程切换机制用于不引起附加的时钟周期,以降低寄存器区块冲突。示例12包括如示例8所述的主题,其中,当第一指令的线程切换位未被设置时,线程调度器用于执行第二线程切换机制。一些实施例涉及包括一种用于线程切换的方法的示例13,该方法包括:利用处理机制来将指令的源操作数指派给不同的寄存器区块或端口,以至少部分地避免寄存器区块冲突。该方法进一步包括:利用处理机制执行指令调度,该指令调度包括确定指令的次序;以及对经排序的指令之中的第一指令生成线程切换字段。示例14包括如示例13所述的主题,其中,生成线程切换字段的步骤包括基于检测到寄存器区块冲突而设置第一指令中的线程切换位。示例15包括如示例13-14所述的主题,进一步包括:利用处理机制来判定在包括第一指令和不同的第二指令的顺序排序的指令之间是否存在任何区块冲突。示例16包括如示例13-15所述的主题,进一步包括:生成指令的二进制编码。示例17包括如示例13-16所述的主题,进一步包括:利用处理机制来判定在指令调度之后是否存在任何区块冲突;以及如果存在区块冲突,则利用该处理机制来修改指令调度,以降低区块冲突。示例18包括如示例13-17所述的主题,进一步包括:利用解码电路来检查第一指令的线程切换位;以及如果该线程切换位被设置,则执行从第一线程到第二线程的强制线程切换。一些实施例涉及包括具有存储于其上的数据的非暂态计算机可读存储介质的示例19,该数据表示指令序列,这些指令序列在由一个或多个处理器执行时,使得该一个或多个处理器执行包括下列各项的操作:将指令的源操作数指派给不同的寄存器区块或端口,以至少部分地避免寄存器区块冲突;执行指令调度,该指令调度包括确定这些指令的次序;以及对经排序的指令之中的第一指令生成线程切换字段。示例20包括如示例19所述的主题,其中,生成线程切换字段包括基于检测到寄存器区块冲突而设置第一指令中的线程切换位。示例21包括如示例19-20所述的主题,进一步包括在由一个或多个处理器执行时使得该一个或多个处理器执行包括下列各项的操作的指令:判定在包括第一指令和不同的第二指令的顺序排序的指令之间是否存在任何区块冲突。前述说明和附图应当被认为是说明性的,而不是限制性的。本领域技术人员将理解,可对本文中所描述的实施例作出各种修改和改变,而不背离如所附权利要求中所阐述的本发明的更宽泛精神和范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1