用于通过信用管理进行共享资源分区的装置和方法与流程

文档序号:17123678发布日期:2019-03-16 00:05阅读:250来源:国知局
用于通过信用管理进行共享资源分区的装置和方法与流程

本申请要求2016年8月11日提交的题为“apparatusandmethodforsharedresourcepartitioningthroughcreditmanagement(用于通过信用管理进行共享资源分区的装置和方法)”的美国专利申请序列号15/234,773的优先权,该申请通过引用整体被结合。



背景技术:

图形芯片支持若干个图形引擎。这些引擎可以使用独立的存储器空间,但是在某些逻辑(例如,转换后备缓冲器(tlb)逻辑和存储器请求逻辑)中使用公共资源。在来自特定引擎的页错误的情况下,这些公共资源可能变成被阻塞的,但是因为它们是公共的,所以有可能错误的引擎将影响全体资源,并且完全阻塞所有的引擎流水线而不仅仅是错误的引擎流水线。计算系统一般要求引擎能够独立地取得进展。此外,通过堵塞与公共资源相关联的整个结构(例如,互连和总线),可能发生死锁场景。

附图说明

从以下给出的具体实施方式并从本公开的各实施例的附图将更全面地理解本公开的实施例,然而这些实施例不应当被理解为将本公开限于特定实施例,而是仅用于解释和理解。

图1图示出根据本公开的一些实施例的数据处理系统的框图,该数据处理系统具有用于通过信用管理进行共享资源分区的装置。

图2图示出根据本公开的一些实施例的处理器的框图,该处理器具有一个或多个处理器核、集成存储器控制器以及集成图形处理器,并且具有用于通过信用管理进行共享资源分区的装置。

图3图示出根据本公开的一些实施例的图形处理器的框图,该图形处理器可以是分立的图形处理单元,或者可以是与多个处理核集成的图形处理器。

图4图示出根据本公开的一些实施例的用于图形处理器的图形处理引擎(gpe)的框图。

图5图示出与执行单元相关的图形处理器的另一实施例的框图。

图6图示出线程执行逻辑,该线程执行逻辑包括在gpe的一些实施例中采用的处理元件的阵列。

图7图示出图示了根据本公开的一些实施例的图形处理器执行单元指令格式的框图。

图8是图形处理器的另一实施例的框图,该图形处理器包括图形流水线、媒体流水线、显示引擎、线程执行逻辑以及渲染输出流水线。

图9a图示出图示了根据一些实施例的图形处理器命令格式的框图。

图9b图示出根据本公开的一些实施例的图形处理器命令序列的框图。

图10图示出根据本公开的一些实施例的用于数据处理系统的图形软件架构。

图11图示出图形引擎的部分,该图形引擎的部分具有使用公共待决缓冲器(cpb)来访问存储器的多个转换后备缓冲器(tlb)引擎。

图12图示出根据本公开的一些实施例的具有使用cpb来访问系统存储器的多个tlb引擎的图形引擎的部分以及用于通过静态信用管理进行共享资源分区的装置。

图13图示出根据本公开的一些实施例的具有使用cpb来访问系统存储器的多个tlb引擎的图形引擎的部分以及用于通过动态信用管理进行共享资源分区的装置。

图14a-图14b图示出根据本公开的一些实施例的用于通过静态信用管理进行共享资源分区的方法的流程图。

图15a-图15b图示出根据本公开的一些实施例的用于通过动态信用管理进行共享资源分区的方法的流程图。

图16图示出根据一些实施例的具有用于通过信用管理进行共享资源分区的装置的智能设备或计算机系统或soc(芯片上系统)。

具体实施方式

解决与公共资源相关联的整个结构的堵塞和死锁场景的一种方式是包括在将时钟周期提交至公共结构之前创建大的保护带。然而,这些保护带的尺寸将被设计成适应最坏情况场景,对这些的确定是具有挑战性的。此处,术语“公共资源”一般是指两个或更多个引擎或逻辑(例如,渲染引擎、过滤引擎、视频后处理、转换后备缓冲器等)共享的资源(例如,系统存储器、共享高速缓存等)。

一些实施例描述了用于对引擎之间的公共资源的可用槽的总数量进行分区的装置和方法,所以每个引擎将接收将要使用的数个信用。在一些实施例中,每当周期(例如,时钟周期或处理周期)被提交至公共资源时,信用就被消耗。在一些实施例中,一旦周期完成,则将信用返回到该引擎的信用池。在一些实施例中,如果不存在对引擎可用的信用,则周期不被提交至该引擎。

在一些实施例中,对信用的分区可以是静态的或动态的。在一些实施例中,静态信用是通过配置寄存器可编程的。在一些实施例中,对于对信用进行静态地分区的情况,固定数量的信用被指派给每一个引擎,并且无论信用实际上是否由引擎使用,这些信用都保持被指派。在一些实施例中,所指派的信用的总和等于相关公共资源的总的可用槽。

在一些实施例中,对于动态地对信用进行分区的情况,初始数量的信用被指派给每个引擎,但是附加的信用组被指派给公共池。随着计算系统开始操作,特定引擎可能比其他引擎更密集地被使用。在一些实施例中,当引擎消耗它的信用(或者其水平达到预定的阈值)时,来自公共池的信用被传输到该引擎。在一些实施例中,如果引擎不是正在使用其信用,则该引擎将其信用释放到公共池。在一些实施例中,当引擎释放其信用时,使得可编程的最小数量的信用对该引擎可用。根据一些实施例,当对公共资源的使用在引擎之间不对称时,动态地对信用进行分区提供了对可用的公共资源的好得多的利用。对信用进行分区(例如,静态地或动态地)的两种方法通过降低恰当运行所需要的保护带的量而显著地改善了对可用共享资源的使用。

在下列描述中,讨论了众多细节,以提供对本公开的实施例的更全面的解释。然而,将对本领域的技术人员显而易见的是,可以在没有这些特定细节的情况下实施本公开的实施例。在其他实例中,以框图形式,而不是详细地示出公知的结构和设备,以避免使本公开的实施例变得模糊。

注意,在实施例对应的附图中,信号用线来表示。一些线可以较粗,以指示更多成份信号路径,和/或在一个或多个末端处具有箭头,以指示主要信息流动方向。此类指示不旨在是限制性的。相反,结合一个或多个示例性实施例来使用线,以促进对电路或逻辑单元的更加容易的理解。如由设计需要或偏好所规定,任何所表示的信号都可实际包括可以在任何一个方向上行进并可利用任何合适类型的信号方案来实现的一个或多个信号。

贯穿说明书及在权利要求书中,术语“连接的”意指所连接的物体之间的诸如电气、机械、或磁性连接之类的无需任何中介设备的直接连接。术语“耦合的”意指直接的或间接的连接,诸如所连接的物体之间的直接电气、机械、或磁性连接或者通过一个或多个无源或有源中介设备的间接连接。术语“电路”或“模块”可指被布置成彼此协作以提供所期望的功能的一个或多个无源和/或有源部件。术语“信号”可指至少一个电流信号、电压信号、磁信号、或数据/时钟信号。“一”、“一个”和“该”的含义包括复数引用。“在……中”的含义包括“在……中”和“在……上”。

术语“缩放”一般指将设计(示意图和布局)从一种工艺技术转换为另一种工艺技术,并随后在布局区域中被减小。术语“缩放”一般还指在同一技术节点内缩小布局和器件尺寸。术语“缩放”还可指相对于另一参数(例如,功率供给水平)对信号频率的调整(例如,减速或加速——即,分别为缩小或放大)。术语“基本上”、“接近”、“近似”、“附近”以及“大约”一般指在目标值的+/-10%之内。

除非以其他方式指定,否则使用序数词“第一”、“第二”及“第三”等对常见的对象的描述,仅指示相同对象的不同的实例正在被引用,而不旨在暗示如此所描述的对象在排序方面或以任何其他方式无论在时间上、在空间上必须按给定次序。

为了本公开的目的,短语“a和/或b”和“a或b”意指(a)、(b)或(a和b)。为了本公开的目的,短语“a、b、和/或c”意指(a)、(b)、(c)、(a和b)、(a和c)、(b和c)或(a、b和c)。在说明书和权利要求书中,术语“左”、“右”、“前”、“后”、“顶”、“底”、“上”、“下”等如果出现,则用于描述的目的,且不一定用于描述永久的相对位置。

为了实施例的目的,此处所描述的各电路和逻辑块中的晶体管是金属氧化物半导体(mos)晶体管或其衍生物,其中mos晶体管包括漏极、源极、栅极和体端子。晶体管和/或mos晶体管衍生物还包括三栅极晶体管和鳍式场效应晶体管、栅极全包围圆柱形晶体管、隧穿fet(tfet)、方形线或矩形带状晶体管、铁电fet(fefet)或实现晶体管功能的其他器件,如碳纳米管或自旋电子器件。mosfet对称的源极端子和漏极端子是完全相同的端子并且在此处被可互换地使用。另一方面,tfet器件具有非对称源极端子和漏极端子。本领域技术人员将理解,其他晶体管(例如,双极面结形晶体管——bjtpnp/npn、bicmos、cmos等)可被使用,而不背离本公开的范围。术语“mn”指示n型晶体管(例如,nmos、npnbjt等),术语“mp”指示p型晶体管(例如,pmos、pnpbjt等)。

图1图示出根据本公开的一些实施例的数据处理系统100的框图,该数据处理系统100具有用于通过信用管理来进行共享资源分区的装置。数据处理系统100包括一个或多个处理器102以及一个或多个图形处理器108,并且可以是单处理器台式系统、多处理器工作站系统或具有大量处理器102或处理器核107的服务器系统。在一些实施例中,数据处理系统100是用于在移动设备、手持式设备或嵌入式设备内使用的芯片上系统集成电路(soc)。

数据处理系统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中的其他部件之间传输数据信号。系统100使用示例性“中枢”系统架构,该示例性“中枢”系统架构包括存储器控制器中枢116和输入输出(i/o)控制器中枢130。存储器控制器中枢116促进存储器设备与系统100的其他部件之间的通信,而i/o控制器中枢(ich)130提供经由本地i/o总线至i/o设备的连接。

在一些实施例中,存储器设备120可以是动态随机存取存储器(dram)设备、静态随机存取存储器(sram)设备、闪存设备、或具有合适的性能以充当进程存储器的某种其他存储器设备。存储器120可以存储数据122和指令121,以供在处理器102执行进程时使用。存储器控制器中枢116还与任选的外部图形处理器112耦合,该任选的外部图形处理器112可与处理器102中的一个或多个图形处理器108通信以执行图形和媒体操作。

ich130使外围设备能够经由高速i/o总线连接到存储器设备120和处理器102。i/o外围设备包括音频控制器146、固件接口128、无线收发机126(例如,wi-fi、蓝牙)、数据存储设备124(例如,硬盘驱动器、闪存等)以及用于将传统(legacy)(例如,个人系统2(ps/2))设备耦合至系统的传统i/o控制器。一个或多个通用串行总线(usb)控制器142连接输入设备,这些输入设备诸如键盘和鼠标144的组合。网络控制器134还可耦合至ich130。在一些实施例中,高性能网络控制器(未示出)耦合至处理器总线110。

图2图示出处理器200的实施例的框图,该处理器200具有一个或多个处理器核202a-n、集成存储器控制器214、以及集成图形处理器208。指出,图2的具有与任何其他附图的元件相同的附图标记(或名称)的那些元件能以与所描述的方式类似的任何方式进行操作或起作用,但不限于此。

处理器200可以包括附加核,这些附加核多达且包括由虚线框表示的附加核202n。核202a-n中的每一个都包括一个或多个内部高速缓存单元204a-n。在一些实施例中,每个核还可访问一个或多个共享高速缓存单元206。

在一些实施例中,内部高速缓存单元204a-n和共享高速缓存单元206表示处理器200内的高速缓存存储器层级结构。高速缓存存储器层级结构可包括每个核内的至少一个层级的指令和数据高速缓存、以及一个或多个层级的共享中级高速缓存,诸如,第2级(l2)、第3级(l3)、第4级(l4)、或其他层级的高速缓存,其中,在外部存储器之前的最高层级的高速缓存被分类为末级高速缓存(llc)。在一些实施例中,高速缓存一致性逻辑维持各高速缓存单元206与204a-n之间的一致性。

在一些实施例中,处理器200还可包括一组一个或多个总线控制器单元216和系统代理210。一个或多个总线控制器单元管理一组外围总线,诸如,一个或多个外围部件互连总线(例如,pci、pci快速)。在一些实施例中,系统代理210提供对各处理器部件的管理功能。在一些实施例中,系统代理210包括一个或多个集成存储器控制器214,以管理对各外部存储器设备(未示出)的访问。

在一些实施例中,核202a-n中的一个或多个包括对同时多线程的支持。在此类实施例中,系统代理210包括用于在多线程处理期间对核202a-n进行协调和操作的部件。在一些实施例中,系统代理210可附加地包括功率控制单元(pcu),该功率控制单元包括用于调节核202a-n以及图形处理器208的功率状态的逻辑和部件。

在一些实施例中,处理器200附加地包括用于执行图形处理操作的图形处理器208。在一些实施例中,图形处理器208与共享高速缓存单元的集合206以及系统代理单元210耦合,该系统代理单元210包括一个或多个集成存储器控制器214。在一些实施例中,显示控制器211与图形处理器208耦合,以将图形处理器输出驱动到一个或多个耦合的显示器。在一些实施例中,显示控制器211可以是经由至少一个互连与图形处理器耦合的分开的模块,或者可被集成在图形处理器208或系统代理210内。

在一些实施例中,基于环的互连单元212用于耦合处理器200的内部部件,然而,可使用替代的互连单元,诸如,点对点互连、切换式互连、或其他技术,包括本领域公知的技术。在一些实施例中,图形处理器208经由i/o链路213与环形互连212耦合。

示例i/o链路213表示各种各样的i/o互连中的至少一者,包括促进各处理器部件与高性能嵌入式存储器模块218(诸如,edram模块)之间的通信的封装上i/o互连。在一些实施例中,核202-n中的每个处理器核以及图形处理器208将嵌入式存储器模块218用作共享末级高速缓存。

在一些实施例中,核202a-n是执行同一指令集架构的同构核。在另一实施例中,核202a-n就指令集架构(isa)而言是异构的,其中,核202a-n中的一者或多者执行第一指令集,而其他核中的至少一者执行第一指令集的子集或不同的指令集。

在一些实施例中,处理器200可以是一个或多个基板的部分,或使用数种工艺技术中的任一技术而实现在一个或多个基板上,所述工艺技术例如,互补式金属-氧化物-半导体(cmos)、双极结型/互补式金属-氧化物-半导体(bicmos)或n型金属-氧化物-半导体逻辑(nmos)。另外,处理器200可以被实现在一个或多个芯片上,或者可以被实现为芯片上系统(soc)集成电路,该soc集成电路除其他组件之外还具有所示组件。

图3图示出图形处理器300的一个实施例的框图,该图形处理器300可以是分立的图形处理单元,或者可以是与多个处理核集成的图形处理器。指出,图3的具有与任何其他附图的元件相同的附图标记(或名称)的那些元件能以与所描述的方式类似的任何方式进行操作或起作用,但不限于此。

在一些实施例中,经由至图形处理器上的寄存器的存储器映射的i/o接口并且经由被置入处理器存储器中的命令来与图形处理器通信。在一些实施例中,图形处理器300包括用于访问存储器的存储器接口314。在一些实施例中,存储器接口314可以是到本地存储器、一个或多个内部高速缓存、一个或多个共享外部高速缓存、和/或到系统存储器的接口。

在一些实施例中,图形处理器300还包括用于将显示输出数据驱动到显示设备320的显示控制器302。在一些实施例中,显示控制器302包括用于显示器的一个或多个重叠平面以及视频或用户接口元件的多个层的组合的硬件。在一些实施例中,图形处理器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图示出图形处理器的gpe410的实施例的框图。指出,图4的具有与任何其他附图的元件相同的附图标记(或名称)的元件能以与所描述的方式类似的任何方式进行操作或起作用,但不限于此。

在一些实施例中,gpe410是参考图3所描述的gpe310的一个版本。返回参考图4,在一些实施例中,gpe410包括3d流水线412和媒体流水线416,其中每一者可以不同于或类似于图3的3d流水线312和媒体流水线316的实现方式。

返回参考图4,在一些实施例中,gpe410与命令流转化器(commandstreamer)403耦合,该命令流转化器403将命令流提供至gpe3d和媒体流水线412、416。在一些实施例中,命令流转化器403耦合至存储器,该存储器可以是系统存储器、或者内部高速缓存存储器和共享高速缓存存储器中的一者或多者。在一些实施例中,命令流转化器403从存储器接收命令,并且将这些命令发送至3d流水线412和/或媒体流水线416。3d和媒体流水线通过以下方式来处理命令:经由相应流水线内的逻辑来执行操作;或将一个或多个执行线程分派给执行单元阵列414。在一些实施例中,执行单元阵列414是可缩放的,以使得该阵列包括基于gpe410的目标功率和性能水平的可变数量的执行单元。

在一些实施例中,采样引擎430与存储器(例如,高速缓存存储器或系统存储器)以及执行单元阵列414耦合。在一些实施例中,采样引擎430提供用于可缩放执行单元阵列414的存储器访问机制,该存储器访问机制允许执行阵列414从存储器读取图形和媒体数据。在一些实施例中,采样引擎430包括用于为媒体执行专业图像采样操作的逻辑。

在一些实施例中,采样引擎430中的专业媒体采样逻辑包括去噪/解交织模块432、运动估计模块434以及图像缩放和过滤模块436。在一些实施例中,去噪/解交织模块432包括用于对经解码的视频数据执行去噪或解交织算法中的一者或多者的逻辑。解交织逻辑将经交织的视频内容的交替场(alternatingfield)组合为单个视频帧。去噪逻辑降低或移除来自视频和图像数据的数据噪声。在一些实施例中,去噪逻辑和解交织逻辑是运动自适应的,并且基于在视频数据中检测到的运动量来使用空间或时域过滤。在一些实施例中,去噪/解交织模块432包括专用运动检测逻辑(例如,在运动估计引擎434内)。

在一些实施例中,运动估计引擎434通过对视频数据执行视频加速功能(诸如,运动向量估计和预测)来提供对视频操作的硬件加速。运动估计引擎确定描述图像数据在连续的视频帧之间的变换的运动向量。在一些实施例中,图形处理器媒体编解码器(codec)使用视频运动估计引擎434以在宏块层级上对视频执行操作,在宏块层级上对视频的操作否则对于使用通用处理器来执行可能是计算密集的。在一些实施例中,运动估计引擎434一般可用于图形处理器部件以辅助视频解码和处理功能,该视频解码和处理功能对视频数据内的运动的方向或幅度是敏感的或自适应于视频数据内的运动的方向或幅度。

在一些实施例中,图像缩放和过滤模块436执行图像处理操作以增强所生成的图像和视频的视觉质量。在一些实施例中,缩放和过滤模块436在将数据提供至执行单元阵列414之前的采样操作期间处理图像和视频数据。

在一些实施例中,gpe410包括数据端口444,该数据端口444为图形子系统提供用于访问存储器的附加机制。在一些实施例中,数据端口444促进用于包括以下各项的操作的存储器访问:渲染目标写入、恒定缓冲器读取、抓取存储器空间读取/写入,以及媒体表面访问。在一些实施例中,数据端口444包括用于对存储器的访问进行高速缓存的高速缓存存储器空间。高速缓存存储器可以是单个数据高速缓存,或者可被分离成用于经由数据端口来访问存储器的多个子系统的多个高速缓存(例如,渲染缓冲器高速缓存、恒定缓冲器高速缓存等)。在一些实施例中,在执行单元阵列414中的执行单元上执行的线程通过经由数据分配互连交换消息来与数据端口通信,该数据分配互连耦合gpe410的子系统中的每个子系统。

图5图示出与执行单元有关的图形处理器的另一实施例的框图500。指出,图5的具有与任何其他附图的元件相同的附图标记(或名称)的元件能以与所描述的方式类似的任何方式进行操作或起作用,但不限于此。

在一些实施例中,图形处理器包括环形互连502、流水线前端504、媒体引擎537和图形核580a-n。在一些实施例中,环形互连502将图形处理器耦合至其他处理单元,其他处理单元包括其他图形处理器或者一个或多个通用处理器核。在一些实施例中,图形处理器是集成在多核处理系统内的许多处理器中的一个。

在一些实施例中,图形处理器经由环形互连502接收多批命令。传入的命令由流水线前端534中的命令流转化器503解释。图形处理器包括用于经由(多个)图形核580a-n来执行3d几何处理和媒体处理的可缩放执行逻辑。对于3d几何处理命令,命令流转化器503将命令供应至几何流水线536。对于至少一些媒体处理命令,命令流转化器503将命令供应至视频前端534,该视频前端534与媒体引擎537耦合。在一些实施例中,媒体引擎537包括用于视频和图像后处理的视频质量引擎(vqe)530以及用于提供硬件加速的媒体数据编码和解码的多格式编码/解码(mfx)533引擎。在一些实施例中,几何流水线536和媒体引擎537各自生成用于由至少一个图形核580a提供的线程执行资源的执行线程。

图形处理器包括可缩放线程执行资源,这些可缩放线程执行资源以模块化核580a-n(有时称为核片(coreslice))为特征,这些模块化核各自具有多个子核550a-n、560a-n(有时称为核子片(coresub-slice))。图形处理器可以具有任何数量的图形核580a至580n。在一些实施例中,图形处理器包括图形核580a,该图形核580a至少具有第一子核550a和第二核子核560a。在另一实施例中,图形处理器是具有单个子核(例如,550a)的低功率处理器。在一些实施例中,图形处理器包括多个图形核580a-n,每一个图形核都包括第一子核550a-n的集合以及第二子核560a-n的集合。第一子核550a-n的集合中的每个子核至少包括执行单元552a-n和媒体/纹理采样器554a-n的第一集合。第二子核560a-n的集合中的每一个子核至少包括执行单元562a-n和采样器564a-n的第二集合。在一些实施例中,每个子核550a-n、560a-n共享共享资源570a-n的集合。在一些实施例中,共享资源包括共享高速缓存存储器和像素操作逻辑。其他共享资源也可被包括在图形处理器的各实施例中。

图6图示出线程执行逻辑600,该线程执行逻辑600包括在图形处理引擎的一个实施例中采用的处理元件的阵列。指出,图6的具有与任何其他附图的元件相同的附图标记(或名称)的那些元件能以与所描述的方式类似的任何方式进行操作或起作用,但不限于此。

在一些实施例中,线程执行逻辑600包括像素着色器602、线程分派器604、指令高速缓存606、包括多个执行单元608a-n的可缩放执行单元阵列、采样器610、数据高速缓存612和数据端口614。在一些实施例中,所包括的部件经由互连结构被互连,该互连结构链接至这些部件中的每个部件。在一些实施例中,线程执行逻辑600包括通过指令高速缓存606、数据端口614、采样器610和执行单元阵列608a-n中的一者或多者而至存储器(诸如,系统存储器或高速缓存存储器)的一个或多个连接。在一些实施例中,每个执行单元(例如,608a)是能够为每个线程并行地执行多个同时线程并且处理多个数据元素的单独的向量处理器。在一些实施例中,执行单元阵列608a-n包括任何数量的单独的执行单元。

在一些实施例中,执行单元阵列608a-n主要用于执行“着色器”程序。在一些实施例中,阵列608a-n中的执行单元执行包括对许多标准3d图形着色器指令的原生支持的指令集,从而使得以最小的转换执行来自图形库(例如,direct3d和opengl)的着色器程序。这些执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如,像素着色器、片段着色器)以及通用处理(例如,计算和媒体着色器)。

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

执行单元指令集包括单指令多数据(simd)指令。各种数据元素可作为紧缩数据类型存储在寄存器中,并且执行单元将基于元素的数据大小来处理各种元素。例如,当对256位宽的向量进行操作时,该256位的向量被存储在寄存器中,并且执行单元作为四个单独的64位紧缩数据元素(四字(qw)大小的数据元素)、八个单独的32位紧缩数据元素(双字(dw)大小的数据元素)、十六个单独的16位紧缩数据元素(字(w)大小的数据元素)、或三十二个单独的8位数据元素(字节(b)大小的数据元素)对向量进行操作。然而,不同的向量宽度和寄存器大小是可能的。

一个或多个内部指令高速缓存(例如,606)被包括在线程执行逻辑600中,以对用于执行单元的线程指令进行高速缓存。在一些实施例中,一个或多个数据高速缓存(例如,612)被包括,以对在线程执行期间的线程数据进行高速缓存。在一些实施例中,采样器610被包括,从而为3d操作提供纹理采样并且为媒体操作提供媒体采样。在一些实施例中,采样器610包括专业的纹理或媒体采样功能,以在向执行单元提供所采样的数据之前在采样过程中处理纹理或媒体数据。

在执行期间,图形和媒体流水线经由线程生成和分派逻辑向线程执行逻辑600发送线程发起请求。在一些实施例中,线程执行逻辑600包括本地线程分派器604,该本地线程分派器604仲裁来自图形和媒体流水线的线程发起请求,并且在一个或多个执行单元608a-n上实例化所请求的线程。例如,几何流水线(例如,图5的536)将顶点处理、曲面细分(tessellation)或几何处理线程分派给线程执行逻辑600。返回参考图6,在一些实施例中,线程分派器604还可以处理来自执行着色器程序的运行时线程生成请求。

一旦一组几何对象已经被处理并被光栅化成像素数据,像素着色器602就被调用,以进一步计算输出信息并且使得结果被写入到输出表面(例如,颜色缓冲器、深度缓冲器、模板印刷(stencil)缓冲器等)。在一些实施例中,像素着色器602计算各顶点属性的值,各顶点属性的这些值将跨光栅化的对象被内插。在一些实施例中,像素着色器602随后执行api供应的像素着色器程序。为了执行像素着色器程序,像素着色器602经由线程分派器604将线程分派至执行单元(例如,608a)。在一些实施例中,像素着色器602使用采样器610中的纹理采样逻辑来访问存储器中所存储的纹理图中的纹理数据。对纹理数据和输入几何数据的算术运算计算每个几何片段的像素颜色数据,或丢弃一个或多个像素而不进行进一步处理。

在一些实施例中,数据端口614提供存储器访问机制,以供线程执行逻辑600将经处理的数据输出至存储器以便在图形处理器输出流水线上进行处理。在一些实施例中,数据端口614包括或耦合至一个或多个高速缓存存储器(例如,数据高速缓存612),从而对用于经由数据端口进行的存储器访问的数据进行高速缓存。

图7图示出图示根据本公开的一些实施例的图形处理器执行单元指令格式700的框图。在一些实施例中,图形处理器执行单元支持具有以多种格式的指令的指令集。实线框图示出一般被包括在执行单元指令中的组成部分,而虚线包括任选的或仅被包括在指令子集中的组成部分。如所图示地描述的指令格式700是宏指令,因为它们是供应至执行单元的指令,这与从一旦指令被处理就进行的指令解码产生的微操作相对照。

在一些实施例中,图形处理器执行单元原生地支持采用128位格式710的指令。64位紧凑指令格式730可用于基于所选择的指令、多个指令选项和操作数数量的一些指令。原生的128位格式710提供对所有指令选项的访问,而一些选项和操作在64位格式730中受限。64位格式730中可用的原生指令根据实施例而不同。在一些实施例中,使用索引字段713中的一组索引值将指令部分地压缩。执行单元硬件基于索引值来引用一组压缩表,并使用压缩表输出来重构采用128位格式710的原生指令。

针对每种格式,指令操作码712限定执行单元要执行的操作。执行单元跨每个操作数的多个数据元素并行地执行每条指令。例如,响应于添加指令,执行单元跨标识纹理元素或图片元素的每个颜色通道执行同时的添加操作。默认地,执行单元跨操作数的所有数据通道执行每条指令。在一些实施例中,指令控制字段714实现对某些执行选项的控制,这些执行选项诸如通道选择(例如,断言)以及数据通道排序(例如,混合)。针对128位指令710,执行大小字段716限制了将并行地执行的数据通道的数量。在一些实施例中,执行大小字段716不可用于64位紧凑指令格式730。此处,访问或地址模式以字段726表达。

一些执行单元指令具有多达三个操作数,包括两个源(src)操作数src0720、src1722和一个目的地718。在一些实施例中,执行单元支持双目的地指令,其中这些目的地中的一个是隐式的。数据操纵指令可以具有第三源操作数(例如,src2724),其中,指令操作码712确定源操作数的数量。指令的最后的源操作数可以是利用该指令传递的立即数(例如,硬编码的)值。

在一些实施例中,基于操作码的位字段对指令进行分组从而简化操作码解码740。针对8位的操作码,位4、5、和6允许执行单元确定操作码的类型。所示出的确切的操作码分组仅为示例。在一些实施例中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如,移动(mov)、比较(cmp))。在一些实施例中,移动和逻辑组742共享五个最高有效位(msb),其中移动(mov)指令采用0000xxxxb(例如,0x0x)的形式,并且逻辑指令采用0001xxxxb(例如,0x01)的形式。流控制指令组744(例如,调用(call)、跳转(jmp)等)包括采用0010xxxxb形式(例如,0x20)的指令。混杂指令组746包括指令的混合,包括采用0011xxxxb形式(例如,0x30)的同步指令(例如,等待(wait)、发送(send))。并行数学指令组748包括采用0100xxxxb形式(例如,0x40)的按分量的算术指令(例如,加(add)、乘(mul))。并行数学组748跨数据通道并行地执行算术运算。向量数学组750包括采用0101xxxxb形式(例如,0x50)的算术指令(例如,dp4)。向量数学组对向量操作数执行算术运算,诸如,点积计算。

图8是图形处理器的另一实施例的框图800,该图形处理器包括图形流水线820、媒体流水线830、显示引擎840、线程执行逻辑850、以及渲染输出流水线870。指出,图8的具有与任何其他附图的元件相同的附图标记(或名称)的那些元件能以与所描述的方式类似的任何方式进行操作或起作用,但不限于此。

在一些实施例中,图形处理器是包括一个或多个通用处理核的多核处理系统内的图形处理器。图形处理器通过至一个或多个控制寄存器(未示出)的寄存器写入或者经由通过环形互连802发布至图形处理器的命令而受控。在一些实施例中,环形互连802将图形处理器耦合至其他处理部件,其他处理部件诸如其他图形处理器或通用处理器。来自环形互连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(例如,通过流出框823)。在一些实施例中,几何着色器819对整个几何对象进行操作,而不是如在图形流水线的先前级中那样对顶点或顶点补片(patch))进行操作。如果禁用曲面细分,则几何着色器819从顶点着色器807接收输入。在一些实施例中,几何着色器819是可由几何着色器程序编程的,以便在曲面细分单元被禁用时执行几何曲面细分。

在光栅化之前,由剪辑器829处理顶点数据,该剪辑器829是固定功能剪辑器或者具有剪辑和几何着色器功能的可编程剪辑器。在一些实施例中,渲染输出流水线870中的光栅化器873分派像素着色器,以将几何对象转换为它们的每像素表示。在一些实施例中,像素着色器逻辑被包括在线程执行逻辑850中。

图形引擎具有允许数据和消息在该图形引擎的主要部件之间传递的互连总线、互连结构或某个其他互连机制。在一些实施例中,执行单元852a、852b和(多个)相关联的高速缓存851、纹理和媒体采样器854、以及纹理/采样器高速缓存858经由数据端口856进行互连,以执行存储器访问并且与图形引擎的渲染输出流水线部件进行通信。在一些实施例中,采样器854、高速缓存851、858以及执行单元852a、852b各自都具有单独的存储器访问路径。

在一些实施例中,渲染输出流水线870包含光栅化器和深度测试部件873,该光栅化器和深度测试部件873将基于顶点的对象转换为这些对象的相关联的基于像素的表示。在一些实施例中,光栅化器逻辑包括用于执行固定功能三角形和线光栅化的窗口器/掩蔽器单元。相关联的渲染和深度缓冲器高速缓存878、879在一个实施例中也是可用的。在一些实施例中,像素操作部件877对数据执行基于像素的操作,然而在一些实例中,与2d操作(例如,利用混合的位块图像传递)相关联的像素操作由2d引擎841执行,或者在显示时间由显示控制器843使用重叠显示平面来代替。在一些实施例中,共享l3高速缓存875可用于所有的图形部件,从而允许在无需使用主系统存储器的情况下共享数据。

在一些实施例中,图形处理器媒体流水线830包括媒体引擎337和视频前端834。在一些实施例中,视频前端834从命令流转化器803接收流水线命令。在一些实施例中,媒体流水线830包括单独的命令流转化器。在一些实施例中,视频前端834在将命令发送至媒体引擎837之前处理媒体命令。在一些实施例中,媒体引擎包括用于生成线程以用于经由线程分派器831分派至线程执行逻辑850的线程生成功能。

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

在一些实施例中,图形流水线820和媒体流水线830可被配置成用于基于多个图形和媒体编程接口执行操作,并且并非专用于任何一种应用编程接口(api)。在一些实施例中,图形处理器的驱动器软件将专用于特定图形或媒体库的api调用转换为可由图形处理器处理的命令。在各实施例中,为由khronosgroup支持的开放图形库(opengl)、开放计算语言(opencl),来自微软公司的direct3d库提供支持,或者,在一个实施例中,为opengl和d3d两者提供支持。还可为开源计算机视觉库(opencv)提供支持。如果可做出从未来api的流水线到图形处理器的流水线的映射,则具有兼容的3d流水线的未来api也将受到支持。

图9a图示出图示了根据一些实施例的图形处理器命令格式900的框图,并且图9b图示出根据根据本公开的一些实施例的图形处理器命令序列910的框图。指出,图9a-图9b的具有与任何其他附图的元件相同的附图标记(或名称)的那些元件能以与所描述的方式类似的任何方式进行操作或起作用,但不限于此。

图9a中的实线框图示出一般被包括在图形命令中的组成成分,而虚线包括任选的或者仅被包括在图形命令的子集中的组成部分。图9a的示例图形处理器命令格式900包括用于标识命令的目标客户端902、命令操作代码(操作码)904、以及用于命令的有关数据906的数据字段。在一些实施例中,一些命令中还包括子操作码905和命令大小908。

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

在一些实施例中,图9b中的流程图示出采样命令序列910。虽然流程图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。指出,图10的具有与任何其他附图的元件相同的附图标记(或名称)的那些元件能以与所描述的方式类似的任何方式进行操作或起作用,但不限于此。

在一些实施例中,软件架构包括3d图形应用1010、操作系统1020、以及至少一个处理器1030。在一些实施例中,处理器1030包括图形处理器1032以及一个或多个通用处理器核1034。在一些实施例中,图形应用1010和操作系统1020各自在数据处理系统的系统存储器1050中执行。

在一些实施例中,3d图形应用1010包含一个或多个着色器程序,该一个或多个着色器程序包括着色器指令1012。着色器语言指令可以采用高级着色器语言,诸如,高级着色器语言(hlsl)或opengl着色器语言(glsl)。应用还包括可执行指令1014,该可执行指令1014采用适合用于由通用处理器核1034执行的机器语言。应用还包括由顶点数据限定的图形对象1016。

在一些实施例中,操作系统1020可以是来自微软公司的操作系统、专用类unix操作系统、或使用linux内核的变体的开源类unix操作系统。当direct3dapi正在使用时,操作系统1020使用前端着色器编译器1024以将采用hlsl的任何着色器指令1012编译成较低级的着色器语言。编译可以是即时编译,或者应用可以执行共享预编译。在一个实施例中,在对3d图形应用1010进行编译期间,将高级着色器编译成低级着色器。

在一些实施例中,用户模式图形驱动器1026可包含后端着色器编译器1027,该后端着色器编译器1027用于将着色器指令1012转换为硬件专用的表示。当openglapi正在使用时,将采用glsl高级语言的着色器指令1012传递至用户模式图形驱动器1026以用于编译。在一些实施例中,用户模式图形驱动器1026使用操作系统内核模式功能1028来与内核模式图形驱动器1029进行通信。在一些实施例中,内核模式图形驱动器1029与图形处理器1032进行通信以分派命令和指令。在一些实施例中,操作系统内核模式功能1028用于与图形api(例如,direct3d/opengl)1022进行通信。

就本文中所描述的各种操作和功能的程度而言,它们可被描述或定义为硬件电路、软件代码、指令、配置和/或数据。内容可以被具体化在硬件逻辑中,或可以被具体化为直接可执行的软件(“目标”或“可执行”形式)、源代码、设计成用于在图形引擎上执行的高级着色器代码或用于特定处理器或图形核的指令集中的低级汇编语言代码。本文中所描述的实施例的软件内容可以经由具有存储于其上的内容的制品来提供,或者可经由操作通信接口以经由此通信接口来发送数据的方法来提供。

非暂态机器可读存储介质可以使机器执行所描述的功能或操作,并且包括以可由机器(例如,计算设备、电子系统等)访问的形式存储信息的任何机制,诸如,可记录/非可记录介质(例如,只读存储器(rom)、随机存取存储器(ram)、磁盘存储介质、光存储介质、闪存设备等)。通信接口包括对接至硬连线的、无线的、光学介质等中的任一者以向另一设备通信的任何机制,诸如,存储器总线接口、处理器总线接口、网际连接、盘控制器等。通信接口通过以下方式来配置:提供配置参数;或发送信号以使通信接口准备好提供描述软件内容的数据信号。可经由发送至该通信接口的一个或多个命令或信号来访问此通信接口。

所描述的各部件可以是用于执行所描述的操作或功能的装置。本文中所描述的每个部件包括软件、硬件、或者软件和硬件的组合。部件可以被实现为软件模块、硬件模块、专用硬件(例如,专用硬件、专用集成电路(asic)、数字信号处理器(dsp)等)、嵌入式控制器、硬连线电路等。除了本文中所描述的内容之外,还可以对本发明的所公开的实施例和实现方式进行各种修改而不背离它们的范围。因此,本文中的说明和示例应当被解释成说明性的,而非限制性的。本公开的范围应当仅通过参照所附权利要求书来界定。

出于说明通过信用管理的共享资源管理的目的,使用了转换后备缓冲器(tlb)的示例。在该示例中,数个tlb引擎接收对访问共享资源(例如,存储器1050)的请求。然而,实施例不限于tlb引擎并且不限于存储器1050是该共享资源。在其他实施例中,可能想要访问共享资源的其他引擎可以使用用于管理对共享资源的访问的信用管理装置。例如,渲染引擎、2d引擎841、媒体引擎537等可能想要访问共享资源(诸如,共享资源570a-n),并且可使用用于管理对共享资源的访问的信用管理(动态和/或静态)装置或手段。

图11图示出装置1100,示出了具有使用公共待决缓冲器(cpb)来访问系统存储器的多个tlb引擎的图形引擎的部分。指出,图11的具有与任何其他附图的元件相同的附图标记(或名称)的那些元件能以与所描述的方式类似的任何方式操作或起作用,但不限于此。

装置1100包括tlb引擎11011-n(其中‘n’为整数)、多路复用器1102、公共tlb未命中处理逻辑1103、公共待决缓冲器(cpb)1104、逐引擎错误检测逻辑1105、存储器请求逻辑1106、存储器控制器1107、以及存储器1050。在一些实施例中,存储器控制器1107被集成在gpu(图形处理器单元)中。例如,存储器控制器1107与gpu在同一管芯上。在一些实施例中,存储器控制器1107与gpu分开(例如,存储器控制器1107在gpu外部)。在一些实施例中,存储器1050是系统存储器并且是共享资源。

tlb引擎11011-n耦合至多路复用器1102,该多路复用器1102选择性地向公共tlb未命中处理逻辑1103和cpb1104提供引擎请求。逐引擎错误检测逻辑1105耦合至公共tlb未命中处理逻辑1103。例如,逐引擎错误检测逻辑1105标识引擎请求何时导致存储器页错误。存储器请求逻辑1106耦合至cpb1104和公共tlb未命中处理逻辑1103。存储器控制器1107耦合至存储器请求1106、cpb1104和存储器1050。cpb1104经由1102a接收tlb请求,1102a一次向cpb1104提供一个引擎请求。cpb1104的输出1104a是被提供给存储器请求逻辑1106的最终存储器请求。存储器请求逻辑1106随后将该最终存储器请求调度至存储器控制器1107,该存储器控制器1107访问存储器1050。一旦存储器访问过程完成,则tlb完成消息通过1104b被发送到cpb1104。

在装置1100中,存在‘n’个分开的引擎请求(例如,针对tlb引擎a11011的引擎a请求、针对tlb引擎b11012的引擎b请求、针对tlb引擎n1101n的引擎n请求),这些引擎请求穿过单独的tlb流水线(未示出),经由多路复用器1102而去往公共tlb未命中处理逻辑1103。公共tlb未命中处理逻辑1103使用cpb1104来保持其tlb走查待决的周期。作为tlb处理的部分,页错误可能发生,该页错误可能阻塞所述处理的完成。那些周期可在cpb1104中停留并累积,等待某个页错误处置程序来修复该错误。cpb1104中周期的此种不受束缚的累积可能阻塞整个结构,包括tlb内部流水线(例如,tlb引擎内部的流水线)。此处,结构是指缓冲器和/或互连。

结果是,如果错误未被修复,则整个结构可能被仅仅一个引擎阻塞。这是严重的服务质量(qos)问题,因为一个引擎可以影响或拒绝另一独立引擎的向前进展。此外,为了要修复的错误,可能先前经调度的tlb无效必须完成。但是该无效可能要求结构是暂时干净的以便完成。因此,这构成了死锁场景,在该死锁场景中,cpb1104需要错误被修复,并且该错误由于先前排队的引擎请求而无法被修复。因为无效由于结构充满待决周期等待cpb1104可用而无法完成,所以该死锁场景进一步恶化。使用该流程的架构将可以被运行的适用的工作负荷限制为具有固定页并且不遭遇页错误的那些工作负荷。

为了防止此种场景,在一些实施例中,如果在cpb1104中存在用于来自引擎请求的周期的有保证的空间,则该周期可以被服务。在tlb命中的情况下,不需要公共tlb未命中处理逻辑1103和资源。但是,当引擎请求由多路复用器1102选择以供服务时,假定最坏情况,并且如果该请求恰巧需要tlb未命中处理资源(例如,公共tlb未命中处理逻辑1103),则这些资源对于该请求是可用的。根据一些实施例,如果不需要这些资源(例如,请求命中了tlb),则立即释放信用。

根据一些实施例,这可以通过在飞行中(inflight)周期的总数量可能潜在地达到cpb1104中可用的条目的数量时停止引擎请求来实现。有时,由于现实系统的物理尺寸,信息不是易于得到的,并且在仍然满足这些系统应当符合的激进的周期时间的同时在请求端口处收集该信息可能是不可行的。在一些实施例中,为共享资源管理添加保护带。对于系统上给定数量的引擎和块,这些保护带可能最终消耗可用缓冲器中的大部分或全部。在一些实施例中,可以通过增加cpb1104的尺寸来解决将可用的缓冲器用于所涉及的保护带的以上问题。

图12图示出根据本公开的一些实施例的装置1200,示出了具有使用公共待决缓冲器(cpb)来访问系统存储器的多个tlb引擎的图形引擎的部分以及用于通过静态信用管理进行共享资源分区的装置。指出,图12的具有与任何其他附图的元件相同的附图标记(或名称)的那些元件能以与所描述的方式类似的任何方式操作或起作用,但不限于此。

在一些实施例中,为每个引擎提供引擎信用寄存器12011-n。例如,提供引擎信用寄存器12011以存储用于tlb引擎a的一定数量的信用。在一些实施例中,存储在引擎信用寄存器12011-n中的信用系列表示cpb1104中的槽(slot)。在一些实施例中,当存在独立的多个共享资源时,则每个引擎可具有与那个共享资源相关联的单独的信用寄存器。例如,如果公共tlb未命中处理逻辑1103中存在独立的多个共享资源,则为每个共享资源定义单独的信用。

在一些实施例中,引擎需要信用才能发送请求。在一些实施例中,当信用随着每个请求被消耗时,cpb1104中的槽受到保证。在一些实施例中,提供逻辑(例如,第一逻辑)以在信用由引擎使用以向cpb1104发送引擎请求时从引擎信用寄存器减去一个或多个信用。例如,当tlb引擎a11011向cpb1104(其保证缓冲器中的槽)发送引擎请求时,逻辑从引擎a信用寄存器12011减去信用。在一些实施例中,该逻辑(例如,第一逻辑)驻留在引擎信用寄存器(例如,12011)中。然而,实施例不限于此,并且逻辑可以作为其他逻辑的部分位于任何合适的位置中。

在一些实施例中,一旦引擎已经消耗其所有的信用,则该引擎将停止,直到使更多信用对该引擎可用。例如,当tlb引擎a11011消耗存储在引擎a信用寄存器12011中的其所有的信用时,停止对新的引擎a请求的进一步处理,直到通过1202向引擎a信用寄存器12011提供新的或更多信用。

在一些实施例中,一旦周期不再使用cpb1104,则信用被释放从而被再次用于另一引擎请求。根据一些实施例,所释放的信用由存储器请求逻辑1106经由1202往回提供给信用寄存器12011-n。在一些实施例中,提供逻辑(例如,第二逻辑)以在由cpb1104服务与该引擎相关联的请求之后将信用往回释放到引擎信用寄存器。例如,当由存储器控制器1107服务引擎a请求时,存储器控制器1107将tlb完成消息1104b发送至cpb1104,该tlb完成消息1104b通知第二逻辑将一个信用往回释放到引擎a信用寄存器12011。在一些实施例中,该逻辑(例如,第二逻辑)驻留在引擎信用寄存器(例如,12011)中。然而,实施例不限于此,并且该逻辑可以作为其他逻辑的部分位于任何合适的位置中。在一些实施例中,所有信用寄存器中的信用的总数量匹配cpb1104的位尺寸。

在一些实施例中,针对每个引擎的初始信用计数通过配置寄存器被静态地分配。例如,在上电时通过配置寄存器将固定数量(或预定数量)的信用分配给信用寄存器12011-n。在一些实施例中,根据在gpu上执行的应用(例如,视频渲染)来对用于各引擎和共享资源的信用的数量进行编程。例如,如果引擎将处置许多已知请求而另一引擎将很少处置请求,则可分配给用于处置更多请求的引擎比其他引擎更多的固定信用。

在一些实施例中,所编程的信用数量可以直到下一次对配置寄存器进行重新编程才改变。在一些实施例中,使用任何合适的机制经由操作系统对配置寄存器进行重新编程或编程。在一些实施例中,信用寄存器12011-n中的每个信用寄存器一直具有最小数量的信用,并且一旦(因为信用被消耗)信用的数量达到该最小数量,就用所释放的信用重新填充该信用寄存器。在一些实施例中,留出最小数量的信用以供对信用的高优先级使用,以用于服务引擎请求而不必等待信用释放。

图13图示出根据本公开的一些实施例的装置1300,示出了具有使用cpb1103来访问系统存储器的多个tlb引擎的图形引擎的部分以及用于通过动态信用管理进行共享资源分区的装置。指出,图13的具有与任何其他附图的元件相同的附图标记(或名称)的那些元件能以与所描述的方式类似的任何方式操作或起作用,但不限于此。

在一些实施例中,装置1300包括全局信用管理器或控制器(gcm)1301和全局信用电阻器或池(gcp)1302。在一些实施例中,动态地为活跃的引擎分配信用。此处,活跃的引擎是指具有有待服务的待决请求那些引擎。不活跃的引擎是没有待决请求并且因此可能不需要信用来服务任何请求的那些引擎。

在一个实例中,当tlb引擎11011-n活跃时,由gcm1301动态地分配信用寄存器12011-n中的信用。在一些实施例中,gcp1302维护在引擎请求被服务时所释放的任何信用。在一些实施例中,对于不活跃的引擎,信用被抑制并且不分配信用。这些信用被维持在gcp1302中。这些信用随后可以被分配给需要它们的任何信用寄存器12011-n。例如,如果信用寄存器12011中的引擎a信用大部分被使用并且不存在对引擎a11011的新的请求,则gcm1301可选择不向信用寄存器12011重新填充信用,并且替代地将信用提供给期望使用那些信用以用于即将到来的引擎请求的另一信用寄存器。

在一些实施例中,每一个引擎的信用加上全局信用的总数量等于cpb1104的位尺寸。在一些实施例中,由gcm1301管理gcp1302中的信用。在一些实施例中,gcm1301经由1302b将任何未使用的或所释放的信用往回发送到gcp1302。在一些实施例中,当gcm1301确定引擎因为其接收到需要服务的引擎请求而需要信用时,gcm1301经由1302a从gcp1302得到信用并将其提供给相关的引擎信用寄存器。

在一些实施例中,由gcm1301为每个引擎信用寄存器提供信用释放和信用授权接口。例如,来自引擎a信用寄存器12011的所释放的信用由gcm经由1303a1接收,而授权信用经由1303a2从gcm1301被提供给引擎a信用寄存器12011。类似地,来自引擎b信用寄存器12012的所释放的信用由gcm经由1303a2接收,而授权信用经由1303a2从gcm1301被提供给引擎a信用寄存器12012,并且来自引擎n信用寄存器1201n的所释放的信用由gcm经由1303an接收,而授权信用经由1303bn从gcm1301被提供给引擎a信用寄存器1201n。

在一些实施例中,当引擎得到新的请求时,它的剩余信用计数将减少,并且当该计数降到低于可编程最小量时,引擎作出到gcm1301的对更多信用的请求。在一些实施例中,如果gcm1301具有可用的信用(来自全局信用池1302),则该gcm1301将向引擎授权该信用请求。例如,引擎a信用寄存器可经由1303b1接收对信用请求的授权。

在一些实施例中,gcm1301可批量地授权信用或者单独地为每个单个引擎请求授权信用。在一些实施例中,当引擎接收到gcm授权时,该引擎将其对应的信用计数增加所授权的量,同时gcm1301将全局信用池计数减少同一个量。在一些实施例中,为每个引擎所定义的信用的最小数量和批量信用释放被调整为允许从一个引擎流送而不引起停止。

在一些实施例中,当信用由cpb1104消耗时,该信用被添加到gcp1302。在一些实施例中,对于从引擎释放到gcp1302的信用,每个引擎可附加地通告未使用的信用的数量。在一些实施例中,gcm1301可请求具有未使用的信用的引擎将这些未使用的信用释放到gcp1302。在一些实施例中,信用释放标准为另一引擎何时请求信用。在一些实施例中,信用释放标准为针对未使用的信用的超时。根据一些实施例,通过具有该信用撤回机制,gcm1301可以最佳地使用可用的共享资源,并且将批量的信用授权给活跃引擎。

在一些实施例中,对授权给不同引擎的信用的数量的此种动态调整允许请求流送从一个引擎到另一引擎的无缝切换。根据一些实施例,在多个引擎在同一时间进行流送的情况下,gcm1301中的动态信用平衡方案允许在活跃引擎之间最佳地确立信用分配。例如,取决于来自活跃引擎的请求率,使信用在这些引擎之间平衡。例如,假设两个引擎a和b是活跃的,并且a的请求率为n且b的请求率为2n,则信用的数量将确立为具有用于引擎a的33%的信用和用于引擎b的66%的信用。

在一些实施例中,通过为(由gcm1301管理的)任何给定引擎保持最小预留量的信用,允许任何引擎不被另一独立引擎的活动完全阻塞。由此,可以满足使得多个引擎运行多个独立的工作负荷(每个工作负荷能遭遇页错误)的系统要求。

图14a-图14b图示出根据本公开的一些实施例的用于通过静态信用管理来进行共享资源分区的方法的流程图1400。图14a经由标记‘a’、‘β’和‘c’连接至图14b。

在框1401处,对计算机系统(包括gpu)进行上电。许多事件序列在上电之后开始(例如,一些顺序被重置,一些有限状态机开始操作等)。在这些事件之中,在框1402处,静态地为引擎分配信用。例如,固定数量的信用被指派给tlb引擎a11011、tlb引擎b11012、tlb引擎n1101n以及其他引擎。在一些实施例中,从存储器或寄存器串读取用于每个引擎的信用。在一些实施例中,这些信用可由硬件(例如,熔丝)或软件(例如,经由操作系统)编程在存储器或寄存器串中。可给不同的引擎分配不同数量的固定信用。例如,预期比另一引擎服务更多请求的引擎可接收到更多固定数量的信用。

在框1403处,作出关于对于任何引擎可用的任何新的请求的判定。例如,逻辑检查每个tlb引擎(例如,11011-1101n)的内部流水线,以判定这些内部流水线(例如,先入先出(fifo)流水线)中的任一个是否接收到新的引擎请求。如果这些引擎中的任一引擎未接收到引擎请求,则过程等待(例如,循环返回至框1403)并再次检查内部流水线。如果这些引擎中的任一引擎接收到请求(例如,该引擎中的内部流水线中的一个接收到请求),则过程进行至框1404。

在框1404处,作出关于与每个请求引擎相关联的信用的当前数量的判定。例如,对于用于处理请求的任何引擎,其必须具有信用来这样做。由此,在框1404处,作出请求引擎是否具有多于零个信用的判定。如果是,则过程进行至框1406,并且引擎请求被标记为合格的请求。如果请求引擎不具有信用,则过程进行至框1405。在框1405处,该请求引擎的请求被标记为对于处理不是合格的,并且该引擎请求不被授权cpb1104中的槽,除非如由框1407所指示cpb1104为空。

返回参考框1406,在引擎请求被标记为合格请求(例如,因为引擎具有非零个信用)之后,过程进行至框1407,并且作出请求队列(例如,请求引擎的内部流水线和/或cpb1104)是否为空的判定。如果请求队列为空,则如由标识符‘a’所标记,过程进行至框1412。在一些实施例中,当请求队列为空时,认为引擎请求被服务。由此,在框1412处,将信用从已完成的操作返回至使用该信用的原始引擎。例如,当与tlb引擎a11011相关联的引擎a请求完成时,使用于服务该请求的引擎a信用往回返回到12011。过程随后如标识符‘c’所标记进行到框1403。

如果请求队列不为空,则如由标识符‘b’所标记,过程从框1407进行至框1408。在框1408处,选择对各引擎的引擎请求以进行服务。在一些实施例中,引擎可具有它们自身的流水线(例如,寄存器系列),这些流水线在引擎请求到达那个引擎时存储这些引擎请求。例如,引擎可具有fifo(先入先出)流水线,该fifo流水线在引擎请求到达时对这些引擎请求定序,并且随后按照接收这些引擎请求的次序将其输出到多路复用器1102。

在框1408处,从各引擎请求之中选择引擎请求,并且向外发送该引擎请求以供进一步处理。例如,使得其通过该引擎的内部流水线的引擎请求随后由多路复用器1102选择。在一些实施例中,对多路复用器1102的控制一次一个地(例如,以轮循(roundrobin)方式)从每个引擎选择引擎请求。然而,多路复用器1102可以使用任何方案来选择来自引擎的引擎请求以进行服务。

在框1409处,将所选择的引擎请求发送给cpb1104和公共tlb未命中处理逻辑1103。在一些实施例中,一旦cpb1104中的槽被引擎请求占据,则认为与该引擎请求相关联的信用被使用。在一些实施例中,在引擎请求到达存储器请求逻辑1106并且由存储器控制器1107服务引擎请求之后,随后认为与该引擎请求相关联的信用被使用。各种架构可使用不同的事件来标识何时认为信用被使用。

在框1410处,取决于确定何时认为信用被使用的架构,计数器从与该引擎相关联的信用的总数量倒计数一个信用。例如,当引擎a请求占据cpb1104中的槽时,计数器对来自引擎a信用12011的信用进行倒计数。可以将计数器放置在任何合适的逻辑中。例如,计数器可以是引擎a信用逻辑12011的部分。由此,每个信用逻辑可具有其相关联的计数器,以在信用被分配时和在信用被使用时对信用的数量进行跟踪。在框1411处,对引擎请求进行服务。在一些实施例中,在框1410之前执行框1411。在对引擎请求进行服务之后和/或在框1410处更新信用计数之后,过程进行至框1412。

在框1412处,将信用从已完成的操作返回至使用该信用的原始引擎。例如,当与tlb引擎a11011相关联的引擎a请求完成时,将用于服务该请求的引擎a信用往回返回到12011。过程随后如由标识符‘c’所标记进行至框1403。

图14a-图14b的流程图可以由有限状态机或任何合适的逻辑执行。在一些实施例中,流程图1400的部分或全部由软件模块执行,该软件模块由gpu执行。在一些实施例中,流程图1400的部分由软件执行,并且流程图1400的部分由硬件执行。例如,框1402可由软件执行或控制,而框1403-1412由如参考图11-图12所描述的各种硬件来执行。

图15a-图15b图示出根据本公开的一些实施例的用于通过动态信用管理来进行共享资源分区的方法的流程图1500。

在框1501处,对计算机系统(包括gpu)进行上电。许多事件序列在上电之后开始(例如,一些顺序被重置,一些有限状态机开始操作等)。在这些事件之中,在框1502处,将最小数量的信用静态地分配给引擎。例如,引擎a接收信用a,引擎b接收信用b,等等。参考框1503描述另一此类事件。在框1503处,定义或分配用于gcp1302的信用。在一些实施例中,gcp1302是在各引擎之间交换的信用的储存库。例如,可将未使用的信用从引擎往回传输到gcp1302。同样地,当引擎需要信用时,其可查看gcp1302以根据需求获得那些信用。

在一些实施例中,gcm1301管理针对各引擎的信用分配和减除。可给不同的引擎分配不同数量的固定信用。例如,预期比另一引擎服务更多请求的引擎可接收到更多固定数量的信用。

在框1504处,作出关于对于任何引擎可用的任何新的请求的判定。例如,逻辑检查每个tlb引擎(例如,11011-1101n)的内部流水线,以判定这些内部流水线(例如,先入先出(fifo)流水线)中的任一个是否接收到新的引擎请求。如果这些引擎中的任一引擎未接收到引擎请求,则过程等待(例如,循环返回至框1504)并再次检查内部流水线。如果这些引擎中的任一引擎接收到请求(例如,该引擎中的内部流水线中的一个接收到请求),则过程进行至框1505。

在框1505处,作出关于与每个请求引擎相关联的信用的当前数量的判定。例如,对于用于处理请求的任何引擎,其必须具有信用来这样做。由此,在框1505处,作出请求引擎是否具有多于零个信用的判定。如果是,则过程进行至框1506,并且引擎请求被标记为合格的请求。如果请求引擎不具有信用,则过程进行至框1508。在框1508处,该请求引擎的请求被标记为对于处理不是合格的,并且该引擎请求不被授权cpb1104中的槽,除非如由框1507所指示cpb1104为空。

返回参考框1506,在引擎请求被标记为合格请求(例如,因为引擎具有非零个信用)之后,过程进行至框1507,并且作出请求队列(例如,请求引擎的内部流水线和/或cpb1104)是否为空的判定。如果请求队列为空,则如由标识符‘a’所标记,过程进行至框1512。

在框1512处,作出关于用于引擎的信用的当前数量以及用于引擎的信用的当前数量是否小于最小阈值的判定。如果信用的该当前数量降到低于最小数量的阈值,则过程进行至框1513。在框1513处,gcm1301从gcp1302请求用于该引擎的信用。过程随后进行至框1514。如果用于该引擎的信用的当前数量大于最小阈值,则过程进行至框1518。

在框1518处,将信用从已完成的操作返回到gcp1302。例如,当与tlb引擎a11011相关联的引擎a请求完成时,将用于服务该请求的引擎a信用返回到gcp1302。过程随后如标识符‘c’所标记进行至框1504。

返回参考框1507,当确定请求队列不为空时,如由标记‘β’所指示,过程随后进行至框1509。在框1509处,选择对各引擎的引擎请求以进行服务。在一些实施例中,引擎可具有它们自身的流水线(例如,寄存器系列),这些流水线在引擎请求到达那个引擎时存储这些引擎请求。例如,引擎可具有fifo(先入先出)流水线,该fifo流水线在引擎请求到达时对这些引擎请求定序,并且随后按照接收这些引擎请求的次序将其输出到多路复用器1102。

在框1509处,从各引擎请求之中选择引擎请求,并且向外发送该引擎请求以供进一步处理。例如,通过该引擎的内部流水线的引擎请求随后由多路复用器1102选择。在一些实施例中,对多路复用器1102的控制一次一个地(例如,以轮循方式)从每个引擎选择引擎请求。然而,多路复用器1102可以使用任何方案来选择来自引擎的引擎请求以进行服务。

在框1509处,将所选择的引擎请求发送给cpb1104和公共tlb未命中处理逻辑1103。在一些实施例中,一旦cpb1104中的槽被引擎请求占据,则认为与该引擎请求相关联的信用被使用。在一些实施例中,在引擎请求到达存储器请求逻辑1106并且由存储器控制器1107服务引擎请求之后,随后认为与该引擎请求相关联的信用被使用。各种架构可使用不同的事件来标识何时认为信用被使用。

在框1510处,取决于确定何时认为信用被使用的架构,计数器从与该引擎相关联的信用的总数量倒计数一个信用。例如,当引擎a请求占据cpb1104中的槽时,计数器对来自引擎a信用12011的信用进行倒计数。可以将计数器放置在任何合适的逻辑中。例如,计数器可以是引擎a信用逻辑12011的部分或者gcm1301的部分。在一个示例中,每个信用逻辑可具有其相关联的计数器,以在信用被分配时和在信用被使用时对信用的数量进行跟踪。在框1511处,对引擎请求进行服务。在一些实施例中,在框1510之前执行框1511。在对引擎请求进行服务之后和/或在框1510处更新信用计数之后,过程进行至框1512。

在框1512处,作出关于用于引擎的信用的当前数量以及用于引擎的信用的当前数量是否小于最小阈值的判定。如果信用的该当前数量降到低于最小数量的阈值,则过程进行至框1513。在框1513处,gcm1301从gcp1302请求用于该引擎的信用。过程随后进行至框1514。如果用于该引擎的信用的当前数量大于最小阈值,则过程进行至框1518。

在从gcp1302请求信用之后,过程进行至框1514。在框1514处,gcm1301作出在gcp1302中信用是否可用的判定。如果在gcp1302中信用可用,则过程进行至框1516。在框1516处,将一个或多个信用从gcp1302传输或移动到请求引擎。过程随后进行至框1518。如果gcp1302为空,则gcp1302从各引擎请求未使用的信用。在框1515处,gcp1302请求多达用于引擎的信用的最小数量的未使用信用。由此,每个引擎具有最小数量的信用。在框1517处,gcm1301将未使用的信用从各引擎移动到gcp1302。过程随后进行至框1518。

在一些实施例中,gcm1301动态地将来自gcp1302的信用分配给活跃的引擎。此处,活跃的引擎是指具有有待服务的待决请求那些引擎。不活跃的引擎是没有待决请求并且因此可能不需要信用来服务任何请求的那些引擎。此处,术语“动态地”与术语“静态地”对比地使用,这体现在对信用的动态分配可指根据需求向引擎的信用分配、基于所预测的由引擎对请求进行的服务向引擎的信用分配、基于过去的所服务或所接收的引擎请求的数量向引擎的信用分配等。

虽然参考图14-图15的框以特定次序示出,但是可以修改动作的次序。因此,所图示出的各实施例能以不同的次序来执行,并且一些动作/框可并行地执行。根据某些实施例,图14-图15中所列举的框中的一些是任选的。所呈现的框的编号是为了清楚起见,并且不旨在规定各框必须按其发生的操作次序。另外,来自各流程的操作能以各种组合来采用。

图16图示出根据一些实施例的具有用于通过信用管理进行共享资源分区的装置的智能设备或计算机系统或soc(芯片上系统)。指出,图16中的具有与任何其他附图的元件相同的附图标记(或名称)的那些元件能以与所描述的方式类似的任何方式操作或起作用,但不限于此。

图16图示出移动设备的实施例的框图,其中可以使用平面接口连接器。在一些实施例中,计算设备1600表示移动计算设备,诸如计算平板、移动电话或智能电话、启用无线的电子阅读器、或其他无线移动设备。将会理解,某些部件被概示地示出,并且并非此类设备的所有部件都被示出在计算设备1600中。

在一些实施例中,根据所讨论的一些实施例,计算设备1600包括具有数据保留和供给噪声缓解的装置的第一处理器2110。计算设备1600的其他块也可包括一些实施例的用于数据保留和供给噪声缓解的装置。本公开的各实施例还可包括2170内的网络接口(诸如,无线接口),使得系统实施例可被结合至无线设备(例如,蜂窝电话或个人数字助理)中。

在一个实施例中,处理器2110可以包括一个或多个物理设备,诸如微处理器、应用处理器、微控制器、可编程逻辑器件或其他处理装置。由处理器2110执行的处理操作包括操作平台或操作系统的执行,应用和/或设备功能在该操作平台或操作系统上被执行。处理操作包括与同人类用户或同其他设备进行的i/o(输入/输出)相关的操作、与功率管理相关的操作、和/或与将计算设备1600连接至另一设备相关的操作。处理操作还可包括与音频i/o和/或显示i/o相关的操作。

在一个实施例中,计算设备1600包括音频子系统2120,该音频子系统2120表示与向计算设备提供音频功能相关联的硬件(例如,音频硬件和音频电路)和软件(例如,驱动器、编解码器)部件。音频功能可以包括扬声器和/或头戴式耳机输出以及话筒输入。用于此类功能的设备可以被集成至计算设备1600中,或被连接至计算设备1600。在一个实施例中,用户通过提供由处理器2110接收并处理的音频命令来与计算设备1600进行交互。

显示子系统2130表示提供视觉和/或触觉显示以供用户与计算设备1600交互的硬件(例如,显示设备)和软件(例如,驱动器)部件。显示子系统2130包括显示接口2132,该显示接口2132包括用于向用户提供显示的特定屏幕或硬件设备。在一个实施例中,显示接口2132包括与处理器2110分开的、用于执行与显示相关的至少一些处理的逻辑。在一个实施例中,显示子系统2130包括向用户提供输出和输入两者的触摸屏(或触摸板)设备。

i/o控制器2140表示与同用户的交互相关的硬件设备和软件部件。i/o控制器2140可操作以管理作为音频子系统2120和/或显示子系统2130的部分的硬件。另外,i/o控制器2140图示出用于附加设备的连接点,该附加设备连接至计算设备1600,用户可通过计算设备1600与系统进行交互。例如,可被附连至计算设备1600的设备可包括话筒设备、扬声器或立体声系统、视频系统或其他显示设备、键盘或小键盘设备、或用于与特定应用一起使用的其他i/o设备(诸如,读卡器或其他设备)。

如以上所提到,i/o控制器2140可以与音频子系统2120和/或显示子系统2130进行交互。例如,通过话筒或其他音频设备的输入可以提供用于计算设备1600的一个或多个应用或功能的输入或命令。另外,音频输出可以被提供作为显示输出的替代或附加。在另一示例中,如果显示子系统2130包括触摸屏,则显示设备还充当可以至少部分地由i/o控制器2140管理的输入设备。在计算设备1600上还可以存在附加的按钮或开关,以提供由i/o控制器2140管理的i/o功能。

在一个实施例中,i/o控制器2140管理多个设备,诸如,加速度计、相机、光传感器或其他环境传感器、或者可以被包括在计算设备1600中的其他硬件。该输入可以是直接用户交互的部分,以及向系统提供环境输入以影响其操作(诸如,过滤噪声、调整显示器以进行亮度检测、应用相机的闪光灯或其他特征)。

在一个实施例中,计算设备1600包括功率管理2150,该功率管理2150管理电池功率使用、对电池的充电、以及与功率节省操作相关的特征。存储器子系统2160包括用于在计算设备1600中存储信息的存储器设备。存储器可以包括非易失性(如果到存储器设备的功率中断,则状态不改变)和/或易失性(如果到存储器设备的功率中断,则状态不确定)存储器设备。存储器子系统2160可以存储应用数据、用户数据、音乐、照片、文档或其他数据、以及与计算设备1600的应用和功能的执行相关的系统数据(不论是长期的还是暂时的)。

还提供实施例的要素作为用于存储计算机可执行指令(例如,用于实现本文中所讨论的任何其他过程的指令)的机器可读介质(例如,存储器2160)。该机器可读介质(例如,存储器2160)可包括但不限于闪存、光盘、cd-rom、dvdrom、ram、eprom、eeprom、磁卡或光卡、相变存储器(pcm)或适合用于存储电子指令或计算机可执行指令的其他类型的机器可读介质。例如,本公开的实施例可作为计算机程序(例如,bios)来下载,其可通过数据信号的方式经由通信链路(例如,调制解调器或网络连接)从远程计算机(例如,服务器)转移至请求计算机(例如,客户机)。

连接性装置2170包括用于使计算设备1600能够与外部设备通信的硬件设备(例如,无线和/或有线连接器和通信硬件)和软件部件(例如,驱动器、协议栈)。计算设备1600可以是诸如其他计算设备、无线接入点或基站之类的分开的设备,以及诸如头戴式设备、打印机之类的外围设备或者其他设备。

连接性装置2170可以包括多种不同类型的连接性装置。为了概述,图示出计算设备1600具有蜂窝连接性装置2172和无线连接性装置2174。蜂窝连接性装置2172一般是指由无线载波提供的蜂窝网络连接性装置,诸如经由gsm(全球移动通信系统)或其变型或衍生类型、cdma(码分多址)或其变型或衍生类型、tdm(时分复用)或其变型或衍生类型、或者其他蜂窝服务标准提供。无线连接性装置(或无线接口)2174是指不是蜂窝式的无线连接性装置,并且可以包括个域网(诸如,蓝牙、近场等)、局域网(诸如,wi-fi)和/或广域网(诸如,wimax)或其他无线通信。

外围连接2180包括用于进行外围连接的硬件接口和连接器以及软件部件(例如,驱动器、协议栈)。将会理解,计算设备1600既可以是连接至其他计算设备的外围设备(“至”2182),也可具有连接至计算设备1600的外围设备(“自”2184)。计算设备1600通常具有“对接”连接器以连接至其他计算设备,以用于诸如管理(例如,下载和/或上载、改变、同步)计算设备1600上的内容之类的目的。另外,对接连接器可以允许计算设备1600连接至某些外围设备,这些外围设备允许计算设备1600控制例如对视听或其他系统的内容输出。

除了专用对接连接器或其他专用连接硬件之外,计算设备1600还可以经由常见的或基于标准的连接器来建立外围连接1680。常见类型可以包括通用串行总线(usb)连接器(其可以包括数种不同硬件接口中的任何一种)、包括minidisplayport(微型显示端口)(mdp)的displayport(显示端口)、高清晰度多媒体接口(hdmi)、火线或其他类型。

说明书中对“实施例”、“一个实施例”、“一些实施例”、或“其他实施例”等的引用意指结合这些实施例所描述的特定特征、结构或特征被包括在至少一些实施例中,但不一定包括在所有实施例中。“实施例”、“一个实施例”或“一些实施例”的各种出现不一定都指相同实施例。如果说明书陈述“可能”、“可以”或“能够”包括部件、特征、结构或特性,则不一定必须包括该特定部件、特征、结构或特性。如果说明书或权利要求书引用“一(a或an)”要素,则并不意指仅存在一个该要素。如果说明书或权利要求书引用“附加”要素,则不排除存在多于一个的该附加要素。

此外,可在一个或多个实施例中以任何合适的方式组合特定特征、结构、功能或特性。例如,在与第一实施例和第二实施例相关联的特定特征、结构、功能或特性不相互排斥的任何情况下都可将第一实施例与第二实施例组合。

尽管结合本公开的特定实施例描述了本公开,但根据前面的描述,此类实施例的许多替代方案、修改和变型对本领域普通技术人员来说将是显而易见的。本公开的实施例旨在涵盖落入所附权利要求书的宽泛范围之内的所有此类替代方案、修改和变型。

另外,为了说明和讨论简单起见并且为了不使本公开模糊,在所呈现的附图内可以或可以不示出公知的到集成电路(ic)芯片和其他部件的功率/接地连接。进一步地,为了避免使本公开模糊,并且还考虑到关于此类框图布置的实现方式的细节很大程度上取决于将实现本公开的平台的事实,能以框图形式示出布置(即,此类细节完全应当在本领域技术人员的认知范围内)。在陈述特定细节(例如,电路)以描述本公开的示例实施例的情况下,对本领域普通技术人员应当显而易见的是,可以在没有这些特定细节或在这些特定细节的变型的情况下实施本公开。说明书因此被视为是说明性的而不是限制性的。

下列示例涉及进一步的实施例。可在一个或多个实施例中的任何地方使用示例中的细节。本文中所描述的装置的所有任选特征也可相对于方法或过程来实现。

例如,提供了一种装置,该装置包括:第一引擎缓冲器,用于接收第一引擎请求;第一引擎寄存器,耦合至第一引擎缓冲器,其中,该第一引擎寄存器用于存储与第一引擎缓冲器相关联的一个或多个第一引擎信用;第二引擎缓冲器,用于接收第二引擎请求;第二引擎寄存器,耦合至第二引擎缓冲器,其中,该第二引擎寄存器用于存储与第二引擎缓冲器相关联的一个或多个第二引擎信用;以及公共缓冲器,该公共缓冲器对于第一引擎和第二引擎是公共的,其中,一个或多个第一引擎信用表示公共缓冲器中用于服务对访问公共资源的第一引擎请求的一个或多个槽,并且其中,一个或多个第二引擎信用表示公共缓冲器中用于服务对访问公共资源的第二引擎请求的一个或多个槽。

在一些实施例中,第一和第二引擎分别是第一和第二转换后备缓冲器(tlb),并且其中,公共资源是存储器。在一些实施例中,装置包括用于在第一引擎缓冲器向公共缓冲器提供第一引擎请求时从一个或多个第一引擎信用减去一个或多个信用的第一逻辑。在一些实施例中,装置包括用于在第二引擎缓冲器向公共缓冲器提供第二引擎请求时从一个或多个第二引擎信用减去一个或多个信用的逻辑。在一些实施例中,装置包括第二逻辑,该第二逻辑用于:在第一引擎请求由公共缓冲器服务之后将信用往回释放到第一引擎寄存器;以及在第二引擎请求由公共缓冲器服务之后将信用往回释放到第二引擎寄存器。

在一些实施例中,公共缓冲器用于保持来自第一和第二引擎缓冲器的待决请求的时钟周期。在一些实施例中,信用的总数量等于公共缓冲器的位尺寸。在一些实施例中,一个或多个第一和/或第二引擎信用是预定的固定数量的信用。在一些实施例中,一个或多个第一和/或第二引擎信用是可由操作系统(os)编程的固定数量的信用。在一些实施例中,装置包括用于根据由第一和第二引擎对公共缓冲器的需求来动态地调整一个或多个第一和/或第二引擎信用的数量的逻辑。在一些实施例中,当对装置进行上电时,第一和第二引擎寄存器一直具有最小数量的信用。在一些实施例中,装置包括用于存储信用的存储器,其中,该存储器用于存储来自第一和第二引擎的未使用的信用。在一些实施例中,装置包括用于应来自第一和/或第二引擎的请求而将信用从存储器移动到第一和/或第二引擎的逻辑。

在另一示例中,提供了一种系统,该系统包括:存储器;图形处理器,耦合至存储器,该图形处理器包括根据以上所描述的装置的装置;以及无线接口,用于允许处理器与另一设备进行通信。

在另一示例中,提供了一种方法,该方法包括:为第一引擎缓冲器分配第一引擎信用,以用于服务第一引擎请求;为第二引擎缓冲器分配第二引擎信用,以用于服务第二引擎请求;向公共缓冲器提供第一引擎请求的经缓冲的版本,其中,该公共缓冲器对于第一和第二引擎是公共的,其中,第一引擎信用表示公共缓冲器中用于服务对访问公共资源的第一引擎请求的一个或多个槽,并且其中,第二引擎信用表示公共缓冲器中用于服务对访问公共资源的第二引擎请求的一个或多个槽;服务第一引擎请求;以及当该第一引擎请求被服务时,对第一引擎信用的数量进行倒计数。

在一些实施例中,该方法包括:在对第一引擎请求的服务完成之后,恢复原始数量的第一引擎信用。在一些实施例中,分配第一和第二引擎信用包括:在上电时分配固定数量的第一和第二引擎信用,以使得信用的总数量等于公共缓冲器的位尺寸。在一些实施例中,分配第一和第二引擎信用包括:根据由第一和第二引擎对公共缓冲器的需求来分配动态数量的第一和第二引擎信用。在一些实施例中,该方法包括:为第一引擎缓冲器维持第一最小数量的信用,以用于服务未来第一引擎请求;以及为第二引擎缓冲器维持第二最小数量的信用,以用于服务未来第二引擎请求。

在另一示例中,提供了一种机器可读存储介质,该机器可读存储介质具有存储于其上的指令,这些指令在被执行时使得图形处理器执行根据以上所描述的方法的操作。

在另一示例中,提供了一种设备,该设备包括:用于为第一引擎缓冲器分配第一引擎信用以用于服务第一引擎请求的装置;用于为第二引擎缓冲器分配第二引擎信用以用于服务第二引擎请求的装置;用于向公共缓冲器提供第一引擎请求的经缓冲的版本的装置,其中,该公共缓冲器对于第一和第二引擎是公共的,其中,第一引擎信用表示公共缓冲器中用于服务对访问公共资源的第一引擎请求的一个或多个槽,并且其中,第二引擎信用表示公共缓冲器中用于服务对访问公共资源的第二引擎请求的一个或多个槽;用于服务第一引擎请求的装置;以及用于在该第一引擎请求被服务时对第一引擎信用的数量进行倒计数的装置。

在一些实施例中,该设备包括:用于在对第一引擎请求的服务完成之后恢复原始数量的第一引擎信用的装置。在一些实施例中,用于分配第一和第二引擎信用的装置包括:用于在上电时分配固定数量的第一和第二引擎信用以使得信用的总数量等于公共缓冲器的位尺寸的装置。在一些实施例中,用于分配第一和第二引擎信用的装置包括:用于根据由第一和第二引擎对公共缓冲器的需求来分配动态数量的第一和第二引擎信用的装置。在一些实施例中,该设备包括:用于为第一引擎缓冲器维持第一最小数量的信用以用于服务未来第一引擎请求的装置;以及用于为第二引擎缓冲器维持第二最小数量的信用以用于服务未来第二引擎请求的装置。

在另一示例中,提供了一种系统,该系统包括:存储器;图形处理器,耦合至存储器,该图形处理器包括根据以上所描述的设备的设备;以及无线接口,用于允许处理器与另一设备进行通信。

提供了将允许读者弄清本技术公开的本质和主旨的摘要。应当理解,摘要将不用来限制权利要求的范围或含义。所附的权利要求由此被结合到具体实施方式中,每一项权利要求本身作为单独的实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1