用于基于当前状态来更新着色器程序的方法和装置与流程

文档序号:11935115阅读:403来源:国知局
用于基于当前状态来更新着色器程序的方法和装置与流程

技术领域

本发明总体涉及计算机处理器领域。更具体地,本发明涉及用于基于当前状态来更新着色器程序的装置和方法。

相关技术描述

在图形应用编程接口(API)(诸如,OpenGL或DirectX)中,可能存在与固定功能单元和着色程序(称为“着色器”)相关联的显著的状态。具体而言,在由此状态定义的环境中的图形处理单元(GPU)上执行着色器。由于图形API描述抽象的机器模型,因此,总是存在将此模型状态转换至当前硬件架构的某种形式的转换。由此,状态可描述固定功能单元的功能,所述固定功能单元典型地通过执行着色器程序在现有硬件中进行仿真。例如,在一些实现方式中,多个执行单元(EU)可执行处于特定状态的着色器程序来仿真固定功能单元的图形功能。

在大多数情况下,由于硬件设计,此类仿真是必需的,并且通过在由应用提供的着色器程序中添加或修改的指令来完成此类仿真。此类设计导致以下情形:着色器程序可能依赖于当前状态,并且此类状态的改变要求重新编译着色器代码。此类状态可称为“非正交状态”(“NOS”)。

由于着色器程序依赖于NOS,因此在一些实现方式中,在图像帧渲染期间可重新编译着色器以反映当前的NOS。当编译过程是复杂且耗时的时候,这可能导致渲染过程停止以及动画的参差不齐(jagging)。为了防止此类情形,对于大多数流行的NOS设置,可将着色器编译为不同的版本,随后进行高速缓存。这减少了着色器重新编译的量,但是未完全消除着色器重新编译,因为存在过多的NOS排列。它也引入了与以下各项相关联的成本:存储所编译的着色器的附加副本所需的附加存储器;以及编译这些副本所需的附加功耗。

附图说明

结合以下附图,从以下具体实施方式中可获得对本发明更好的理解,其中:

图1是具有处理器的计算机系统的实施例的框图,所述处理器具有一个或多个处理器核以及图形处理器;

图2是处理器的一个实施例的框图,所述处理器具有一个或多个处理器核、集成存储器控制器以及集成图形处理器;

图3是图形处理器的一个实施例的框图,所述图形处理器可以是分立的图形处理单元,或可以是与多个处理核集成的图形处理器;

图4是用于图形处理器的图形处理引擎的实施例的框图;

图5是图形处理器的另一实施例的框图;

图6是包括处理元件的阵列的线程执行逻辑的框图;

图7示出根据实施例的图形处理器执行单元指令格式;

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

图9A是示出根据实施例的图形处理器命令格式的框图;

图9B是示出根据实施例的图形处理器命令序列的框图;

图10示出根据实施例的用于数据处理系统的示例性图形软件架构;

图11示出用于基于当前状态来更新着色器程序的架构的一个实施例;

图12示出用于基于当前状态来更新着色器程序的架构的附加细节;以及

图13示出用于基于当前状态来更新着色器程序的方法的一个实施例。

具体实施方式

在下面的描述中,为了进行解释,阐述了众多具体细节以便提供对以下描述的本发明的多个实施例的透彻理解。然而,对本领域技术人员显而易见的是,可以在没有这些具体细节中的一些细节的情况下实施本发明的各实施例。在其他实例中,公知的结构和设备以框图形式示出,以避免使本发明的多个实施例的基本原理模糊。

示例性图形处理器架构和数据类型

概述——图1-3

图1是根据实施例的数据处理系统100的框图。数据处理系统100包括一个或多个处理器102以及一个或多个图形处理器108,并且可以是单处理器台式系统、多核工作站系统或具有大量处理器102或处理器核107的服务器系统。在一个实施例中,数据处理系统100是在移动设备、手持式设备或嵌入式设备中使用的片上系统集成电路(SOC)。

数据处理系统100的实施例可包括或可并入以下各项内:基于服务器的游戏平台、游戏控制台(包括游戏和媒体控制台、移动游戏控制台、手持式游戏控制台或在线游戏控制台)。在一个实施例中,数据处理系统100是移动电话、智能电话、平板计算设备或移动互联网设备。数据处理系统100也可包括可穿戴设备,可与可穿戴设备耦合或可集成在可穿戴设备内,所述可穿戴设备诸如,智能手表可穿戴设备、智能眼镜设备、增强现实设备或虚拟现实设备。在一个实施例中,数据处理系统100是电视机或机顶盒设备,所述电视机或机顶盒设备具有一个或多个处理器102以及由一个或多个图形处理器108生成的图形界面。

一个或多个处理器102各自都包括一个或多个处理器核107,所述一个或多个处理器核107用于处理指令,所述指令当被执行时,执行用于系统和用户软件的操作。在一个实施例中,一个或多个处理器核107中的每一个都配置成处理特定的指令集109。指令集109可促进复杂指令集计算(CISC)、精简指令集计算(RISC)或经由超长指令字(VLIW)的计算。多个处理器核107各自都可处理不同的指令集109,不同的指令集109可包括用于促进对其他指令集的仿真的指令。处理器核107也可包括其他处理设备,诸如,数字信号处理器(DSP)。

在一个实施例中,处理器102包括高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。在一个实施例中,高速缓存存储器在处理器102的各种组件之间共享。在一个实施例中,处理器102也使用利用高速缓存一致性技术而可在处理器核107之间共享的外部高速缓存(例如,第3级(L3)高速缓存或末级高速缓存(LLC))(未示出)。寄存器组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可存储用于在处理器102执行进程时使用的数据122和指令121。存储器控制器中枢116也与任选的外部图形处理器112耦合,所述任选的外部图形处理器112可与处理器120中的一个或多个图形处理器108通信以执行图形和媒体操作。

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

图2是处理器200的实施例的框图,所述处理器具有一个或多个处理器核202A-N,集成存储器控制器214以及集成图形处理器208。处理器200可包括附加的核,所述附加的核多至由虚线框标识的附加核202N并包括由虚线框标识的附加核202N。核202A-N中的每一个都包括一个或多个内部高速缓存单元204A-N。在一个实施例中,每一个核都具有对一个或多个共享高速缓存单元206的访问权。

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

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

在一些实施例中,核202A-N中的一个或多个包括对同时的多线程操作的支持。在此类实施例中,系统代理210包括用于在多线程处理期间协调并操作核202A-N的组件。系统代理210可附加地包括功率控制单元(PCU),所述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互连中的至少一者,所述I/O互连包括促进各种处理器组件与高性能嵌入式存储器模块218(诸如,eDRAM)模块之间的通信的封装上I/O互连。在一个实施例中,核202-N和图形处理器208中的每一者都将嵌入式存储器模块218用作共享的末级高速缓存。

在一个实施例中,核202A-N是执行相同的指令集架构的同构核。在另一实施例中,核202A-N就指令集架构(ISA)方面而言是异构的,其中,核202A-N中的一个或多个执行第一指令集,而其他核中的至少一个执行第一指令集的子集或不同的指令集。

处理器200可以是一个或多个基板的部分,或可使用各种工艺技术中的任一技术而实现在一个或多个基板上,所述工艺技术例如,互补式金属-氧化物半导体(CMOS)、双极结型/互补式金属-氧化物半导体(CMOS)(BiCMOS)或N型金属-氧化物-半导体逻辑(NMOS)。附加地,处理器200可实现在一个或多个芯片上,或可实现为片上系统(SOC)集成电路,所述SOC集成电路除其他组件之外还具有所示组件。

图3是图形处理器300的一个实施例的框图,所述图形处理器300可以是分立的图形处理单元,或可以是与多个处理核集成的图形处理器。在一个实施例中,经由至图形处理器上的寄存器的存储器映射的I/O接口,并且经由置入处理器存储器中的命令来与图形处理器通信。图形处理器300包括用于访问存储器的存储器接口314。存储器接口314可以是至以下各项的接口:本地存储器、一个或多个内部高速缓存、一个或多个共享外部高速缓存和/或系统存储器。

图形处理器300也包括用于将显示输出数据驱动到显示设备320的显示控制器302。显示控制器302包括用于显示的一个或多个上层(overlay)平面以及视频或用户接口元件的多个层的综合的硬件。在一个实施例中,图形处理器300包括用于将媒体编码至一个或多个媒体编码格式、从一个或多个媒体编码格式解码或在一个或多个媒体编码格式之间转码的视频编解码引擎306,所述媒体编码格式包括但不限于:移动图片专家组(MPEG)格式(诸如,MPEG-2)、高级视频译码(AVC)格式(诸如,H.264/MPEG-4AVC)以及电影电视工程师协会(SMPTE)421M/VC-1,以及联合图像专家组(JPEG)格式(诸如,JPEG和运动JPEG(MJPEG)格式)。

在一个实施例中,图形处理器300包括用于执行二维(2D)光栅化(rasterizer)操作(包括例如位边界块转移)的块图像转移(BLIT)引擎304。然而,在一个实施例中,使用图形处理引擎(GPE)310的一个或多个组件来执行2D图形操作。图形处理引擎310是用于执行图形操作(包括三维(3D)图形操作和媒体操作)的计算引擎。

GPE 310包括用于执行3D操作的3D流水线312,所述3D操作诸如,使用作用于3D基元形状(例如,矩形、三角形等)的处理函数来渲染三维图像和场景。3D流水线312包括可编程和固定功能元件,所述可编程和固定功能元件执行元件内的各种任务和/或繁衍(spawn)执行线程至3D/媒体子系统315。当3D流水线312可用于执行媒体操作时,GPE 310的实施例也包括专门用于执行媒体操作(诸如,视频后处理和图像增强)的媒体流水线316。

在一个实施例中,媒体流水线316包括用于执行一个或多个专业媒体操作的固定功能或可编程逻辑单元,所述专业媒体操作诸如,取代或代表视频编解码引擎306的视频解码加速、视频去隔行(de-interlacing)以及视频编码加速。在一个实施例中,媒体流水线316附加地包括用于繁衍供在3D/媒体子系统315上执行的线程的线程繁衍单元。所繁衍的线程在3D/媒体子系统中所包括的一个或多个图形执行单元上执行用于媒体操作的计算。

3D/媒体子系统315包括用于执行由3D流水线312和媒体流水线316繁衍的线程的逻辑。在一个实施例中,流水线将线程执行请求发送至3D媒体子系统315,所述3D媒体子系统315包括用于仲裁各种请求并将各种请求分派至可用的线程执行资源的线程分派逻辑。执行资源包括用于处理3D和媒体线程的图形执行单元的阵列。在一个实施例中,3D/媒体子系统315包括用于线程指令和数据的一个或多个内部高速缓存。在一个实施例中,子系统也包括用于在多个线程之间共享数据并用于存储输出数据的共享存储器,所述共享存储器包括寄存器和可寻址存储器。

3D/媒体处理——图4

图4是用于图形处理器的图形处理引擎410的实施例的框图。在一个实施例中,图形处理引擎(GPE)410是图3中示出的GPE 310的某个版本。GPE 410包括3D流水线412和媒体流水线416,其中的每一者可以与图3的3D流水线312和媒体流水线316的实现方式不同或类似。

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

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

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

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

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

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

执行单元——图5-7

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

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

图形处理器包括可缩放线程执行资源,所述可缩放线程执行单元特征为模块化核580A-N(有时称为核片(core slice)),每一个模块化核都具有多个子核550A-N、560A-N(有时称为核子片(core sub-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包括在图形处理引擎的一个实施例中采用的处理元件的阵列。在一个实施例中,线程执行逻辑600包括像素着色器602、线程分派器604、指令高速缓存606、包括多个执行单元608A-N的可缩放执行单元阵列、采样器610、数据高速缓存612和数据端口614。在一个实施例中,所包括的组件经由互连结构被互连,所述互连结构链接至组件中的每一个组件。线程执行逻辑600包括通过指令高速缓存606、数据端口614、采样器610和执行单元阵列608A-N中的一者或多者而至存储器(诸如,系统存储器或高速缓存存储器)的一个或多个连接。在一个实施例中,每一个执行单元(例如,608A)是能够为每一个线程并行地执行多个同时的线程并处理多个数据元素的单独的向量处理器。执行单元阵列608A-N包括任何数量的单独执行单元。

在一个实施例中,执行单元阵列608A-N主要用于执行“着色器”程序。在一个实施例中,阵列608A-N中的执行单元执行包括对许多标准的3D图形着色器指令的原生支持的指令集,使得以最少的转换来执行来自图形库(例如,Direct 3D和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。线程分派器604也可处理来自执行着色器程序的运行时线程繁衍请求。

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

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

图7是示出根据实施例的图形处理器执行单元指令格式的框图。在一个实施例中,图形处理器执行单元支持具有按照多种格式的指令的指令集。实线框示出一般被包括在执行单元指令中的组件,而虚线框包括任选的且仅被包括在指令的子集中的组件。所述和所示的指令是宏指令,体现在它们是供应至执行单元的指令,这与源自一旦指令经处理就进行的指令解码的微操作相对照。

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

对于每一种格式,指令操作码712定义执行单元将执行的操作。执行单元跨每一个操作数的多个数据元素并行地执行每一个指令。例如,响应于加法指令,执行单元跨表示纹理元素或图片元素的每一个颜色通道执行同时的加法操作。默认地,执行单元跨操作数的所有数据通道执行每一条指令。指令控制字段712允许对某些执行选项(诸如,通道选择(例如,预测)和数据通道顺序(例如,拌和(swizzle)))的控制。对于128位指令710,执行尺寸字段716限制将被并行地执行的数据通道的数量。执行尺寸字段716不可用于64位紧凑的指令格式730。

一些执行单元指令具有多达三个操作数,这三个操作数包括两个源操作数scr0 722、scr1 722以及一个目的地718。在一个实施例中,执行单元支持双目的地指令,其中目的地中的一个是隐含的。数据操纵指令可具有第三源操作数(例如,SRC2 724),其中,指令操作码JJ12确定源操作数的数量。指令的最后一个源操作数可以是利用指令传递的立即数(例如,硬编码的)值。

在一个实施例中,基于操作码位字段对指令分组以简化操作码解码740。对于8位操作码,位4、5和6允许执行单元确定操作码的类型。示出的精确的操作码分组是示例性的。在一个实施例中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如,mov,cmp)。移动和逻辑组742共享五个最高有效位(MSB),其中,移动指令是0000xxxxb(例如,0x0x)形式的,并且逻辑指令是0001xxxxb(例如,0x01)形式的。流控制指令组744(例如,call,jmp)包括0010xxxxb(例如,0x20)形式的指令。混杂的指令组746包括指令的拌和,包括0011xxxxb(e.g.,0x30)形式的同步指令(例如,wait,send)。并行的数学指令组748包括0100xxxxb(e.g.,0x40)形式的逐成分的算术指令(例如,add,mul)。并行的数学组748跨数据通道并行地执行算术操作。向量数学组750包括0101xxxxb(e.g.,0x50)形式的算术指令(例如,dp4)。向量数学组对向量操作数执行算术(诸如,点积计算)。

图形流水线——图8

图8是图形处理器的另一实施例的框图,所述图形处理器包括图形流水线820、媒体流水线830、显示引擎840、线程执行单元850以及渲染输出流水线870。在一个实施例中,图形处理器是包括一个或多个通用处理核的多核处理系统内的图形处理器。图形处理器通过对一个或多个控制寄存器(未示出)的寄存器写入或经由通过环形互连802而发布至图形处理器的命令而受控。环形互连820将图形处理器耦合至其他处理组件(诸如,其他图形处理器或通用处理器)。由命令流送器803解释来自环形互连的命令,所述命令流送器803将指令供应至图形流水线820或媒体流水线830的各个组件。

命令流送器803指导顶点取出器805组件的操作,所述顶点取出器805从存储器读取顶点数据,并且执行由命令流送器803提供的顶点处理命令。顶点取出器805将顶点数据提供给顶点着色器807,所述顶点着色器807对每一个顶点执行坐标空间变换和照明操作。顶点取出器805和顶点着色器通过经由线程分派器831将执行线程分派至执行单元852A、852B来执行顶点处理指令。

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

在一个实施例中,图形流水线820包括用于执行硬件加速的对3D对象的曲面细分的曲面细分组件。可编程壳体(hull)着色器811配置曲面细分操作。可编程域着色器817提供对曲面细分输出的后端评估。曲面细分器813在壳体着色器811的指示下操作,并且包含专用逻辑,所述专用逻辑用于基于作为输入而被提供至图形流水线820的粗糙的几何模型来生成精细的几何对象的集合。如果不使用曲面细分,则可绕过曲面细分组件811、813、817。

可由几何着色器819经由分派至执行单元852A、852B的一个或多个线程来处理完整的几何对象,或完整的几何对象可直接继续到裁剪器829。几何着色器对整个几何对象操作,而不是像在图形流水线的先前的级中那样对顶点或顶点微片处理。如果禁用曲面细分,则几何着色器819从顶点着色器807接收输入。几何着色器819是可由几何着色器程序编程的,以便在禁用曲面细分单元时执行几何曲面细分。

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

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

在一个实施例中,渲染输出流水线870包含将基于顶点的对象转换为它们相关联的基于像素的表示的光栅化器和深度测试组件873。在一个实施例中,光栅化逻辑包括用于执行固定功能三角和直线光栅化的窗口器/掩码器单元。在一个实施例中,相关联的渲染和深度缓冲器高速缓存878、879也是可用的。像素操作组件877对数据执行基于像素的操作,但是在一些实例中,与2D操作相关联的像素操作(例如,利用混合(blend)进行的位块图像转移)由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调用转化为可由图形处理器处理的命令。在各种实施例中,为Khronos Group所支持的开放图形库(OpenGL)和开放计算语言(OpenCL)、来自微软公司的Direct3D库提供支持,或者在一个实施例中,为OpenGL和D3D两者提供支持。也可为开放源计算机视觉库(OpenCV)提供支持。如果可完成从未来API的流水线至图形处理器的流水线的映射,则也将支持兼容3D流水线的未来API。

图形流水线编程——图9A-9B

图9A是示出根据实施例的图形处理器命令格式的框图,图9B是示出根据实施例的图形处理器命令序列的框图。图9A中的实线框示出一般被包括在图形命令中的组件,而虚线包括任选的且仅被包括在图形命令的子集中的组件。图9A的示例性图形处理器命令格式900包括用于标识该命令的目标客户机的数据字段902、命令操作码(操作码)904以及用于命令的相关数据906。子操作码905和命令尺寸908也包括在一些命令中。

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

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

取样命令序列910能以流水线转储清除(flush)命令912开始,以使任何活动的流水线完成用于流水线的当前待定的命令。在一个实施例中,3D流水线922和媒体流水线924不并发地操作。执行流水线转储清除以使活动的图形流水线完成任何待定的命令。响应于流水线转储清除,用于图形处理器的命令解析器将暂停命令处理,直到活动的绘制引擎完成待定的操作且相关读取高速缓存被无效为止。任选地,渲染高速缓存中被标记为“脏(dirty)”的任何数据可转储清除至存储器。流水线转储清除命令912可用于流水线同步,或可在将图形处理器置于低功率状态之前使用。

当命令序列要求图形处理器在多个流水线之间显式地切换时,使用流水线选择命令913。除非上下文将为两个流水线发布命令,否则在发布流水线命令之前,在执行上下文内,流水线选择命令913仅需要一次。在一个实施例中,紧接着经由流水线选择命令913进行的流水线切换之前,需要流水线转储清除命令912。

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

返回缓冲器状态命令916用于配置供相应的流水线用于写入数据的返回缓冲器的集合。一些流水线操作需要对一个或多个返回缓冲器的分配、选择或配置,在处理期间,操作将中间数据写入到所述一个或多个返回缓冲器中。图形处理器也使用一个或多个返回缓冲器以存储输出数据并执行跨线程通信。返回缓冲器状态916包括选择用于流水线操作集合的返回缓冲器的尺寸和数量。

命令序列中的其余命令基于用于操作的活动的流水线而有所不同。基于流水线确定920,命令序列被定制至以3D流水线状态930开始的3D流水线922或以媒体流水线状态940开始的媒体流水线924。

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

3D基元932命令用于提交将由3D流水线处理的3D基元。经由3D基元932命令而被传递至图形处理器的命令和相关联的参数被转发至图形流水线中的顶点取出函数。顶点取出函数使用3D基元932命令数据来生成顶点数据结构。顶点数据结构被存储在一个或多个返回缓冲器中。3D基元932命令用于经由顶点着色器对3D基元执行顶点操作。为了处理顶点着色器,3D流水线922将着色器执行线程分派至图形处理器执行单元。

3D流水线922经由执行934命令或事件来触发。在一个实施例中,寄存器写入触发命令执行。在一个实施例中,经由命令序列中的“go”(“走”)或“kick”(“踢除”)命令来触发执行。在一个实施例中,使用流水线同步命令以通过图形流水线来转储清除命令序列来触发命令执行。3D流水线将为3D基元执行几何处理。一旦操作完成,得到的几何对象被光栅化,并且像素引擎对得到的像素上色。用于控制像素着色和像素后端操作的附加命令也可被包括以用于那些操作。

当执行媒体操作时,采样命令序列910跟随媒体流水线924路径。一般而言,用于媒体流水线924的编程的特定使用和方式取决于将执行的媒体或计算操作。在媒体解码期间,特定的媒体解码操作可卸载至媒体流水线。也可绕过媒体流水线,并且可使用由一个或多个通用处理核提供的资源完全地或部分地执行媒体解码。在一个实施例中,媒体流水线也包括用于通用图形处理器单元(GPGPU)操作的元件,其中,图形处理器用于使用与图形基元的渲染不是显式相关的计算着色器程序来执行SIMD向量操作。

以与3D流水线922类似的方式来配置媒体流水线924。媒体流水线状态命令940的集合被分派或置入到命令序列中并在媒体对象命令942之前。媒体流水线状态命令940包括用于配置将用于处理媒体对象的媒体流水线元件的数据。这包括用于配置媒体流水线内的视频解码和视频编码逻辑的数据,诸如,编码或解码格式。媒体流水线状态命令940也支持使用指向包含批量状态设置的“间接”状态元素的一个或多个指针。

媒体对象命令942提供指向用于由媒体流水线处理的媒体对象的指针。媒体对象包括包含待处理的视频数据的存储器缓冲器。在一个实施例中,在发布媒体对象命令942之前,所有媒体流水线状态都必须是有效的。一旦流水线状态经配置,并且媒体对象命令942经排队列,媒体流水线924就经由执行934命令或等效的执行事件(例如,寄存器写入)来触发。随后,可通过由3D流水线922或媒体流水线924提供的操作对来自媒体流水线924的输出进行后处理。在一个实施例中,以与媒体操作类似的方式来配置和执行GPGPU操作。

图形软件架构——图10

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

在一个实施例中,3D图形应用1010包含一个或多个着色器程序,所述着色器程序包括着色器指令1012。着色器语言指令可以是高级着色器语言(诸如,高级着色器语言(HLSL)或OpenGL着色器语言(GLSL))中的。应用也包括适用于由通用处理器核1034执行的机器语言中的可执行指令1014。应用也包括由顶点数据定义的图形对象1016。

操作系统1020可以是来自微软公司的操作系统、专属的类UNIX操作系统、或使用Linux内核的变体的开放源类UNIX操作系统。当Direct3D API在使用中时,操作系统1020使用前端着色器编译器1024以将HLSL中的任何着色器指令1012编译为低级着色器语言。编译可以是即时(just-in-time)编译,或应用可执行共享预编译。在一个实施例中,在3D图形应用1010的编译期间,高级着色器被编译为低级着色器。

用户模式图形驱动器1026可包含后端着色器编译器1027以将着色器指令1012编译为硬件专用表示。当OpenGL API在使用中时,GLSL高级语言中的着色器指令1012被传递至用于模式图形驱动器1026以进行编译。用户模式图形驱动器使用操作系统内核模式函数1028来与内核模式图形驱动器1029通信。内核模式图形驱动器1029与图形处理器1032通信以分派命令和指令。

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

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

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

用于基于当前状态来更新着色器程序的装置和方法

编译过程是复杂的,并且需要若干中介语言表示以在编译的不同步骤处描述着色器代码。在生成最终的着色器程序内核之前,在被称为低级中介表示(LLIR)的程序指令的抽象表示上执行最耗时的操作。

为了减小运行时期间这些耗时的重新编译操作的负面影响,本发明的一个实施例一直到结束阶段才编译着色器程序,并且如果最终指令与任何非正交状态(NOS)交互,则标记最终指令。随后,经编译的着色器程序被保存为可修补(patchable)着色器内核。在执行期间,随后可针对当前的NOS动态地修补经标记的指令以生成在GPU硬件上执行的经修补的着色器内核。

如图11中一般地所示,在本发明的一个实施例中,由具有指令标记逻辑的编译器1123编译着色器源代码1124,以便为依赖于不同的NOS的指令生成经标记的着色器指令1104,并且为不依赖于NOS的指令生成未经标记的着色器指令1125。在一个实施例中,使用原本将不用于给定的指令集架构的位的序列来标记指令。此序列中的每一个位可指示指令是否依赖于特定的NOS。例如,位0可指示指令是否依赖于NOS#0(例如,1=依赖于NOS,0=不依赖于NOS);位1可指示指令是否依赖于NOS#1;位2可指示指令是否依赖于NOS#2,等等。然而,应当注意,本发明的基本原理不限于用于标识对NOS的依赖性的任何特定编码。

在执行时,根据当前的NOS来修补经标记的着色器指令1104。例如,在图11中,指令修补逻辑1103根据当前的NOS 1101动态地修补经标记的着色器指令1104以生成经修补的着色器指令1105。经修补的着色器指令1105和未经标记的着色器指令1125可一起被保存在经修补的着色器内核(由于经修补的着色器指令,所述经修补的着色器内核专门适用于当前的NOS)中。

如图11中所示,随后,调度器/分派单元1110可分派经修补的着色器指令1105和未经标记的着色器指令1125,用于在一个或多个执行单元1111-1118上执行以实现着色器。可为任何类型的着色器(包括上文讨论的那些着色器)实现本发明的基本原理。这可包括例如图6中的像素着色器602、图8中的顶点着色器807、几何着色器819、壳体着色器811和域着色器817(仅举数例)。此外,在一个实施例中,图10中示出的后端着色器编译器1027(实现在用户模式图形驱动器1026内)可用于生成如本文中所述的经标记的着色器指令和经修补的着色器指令。

在图12中示出本发明的一个实施例的附加细节,图12包括:应用组件1120,所述应用组件1120使用图形API(例如,Direct3D、OpenGL等);驱动器组件1130,用于如本文中所述根据NOS来标记指令并修补指令;以及硬件组件1140,用于执行经修补的指令。由应用1220调用的API编译函数1201将着色语言代码(诸如,高级着色器语言(HLSL)代码或OpenGL着色语言(GLSL)代码)编译为低级着色器语言。具体而言,响应于编译函数1201,HLSL或GLSL代码被输入到驱动器组件1230内的编译器块1203,所述编译器块1203执行包括以下各项的各种编译操作:将代码转换为低级中介表示(LLIR);执行LLIR优化;以及生成寄存器分配信息。此外,编译器块1203评估指令以标识依赖于NOS的指令,且随后标记依赖于NOS的指令(在图12中标识为“X_NOS”指令)。随后,经标记的指令和未经标记的指令被组合到可修补着色器内核1204中,以便在执行时使用。

在执行时,响应于由应用1220调用的设置状态函数1205和设置着色器函数1209,驱动器1130的进程状态模块1206确定实现着色器1204的可修补内核将在其中执行的当前NOS 1207。具体而言,着色器函数1209指向将被使用的可修补着色器内核1204,并且如图12中的虚线箭头所指示,进程状态1206可依赖于着色器内核1204。

驱动器的指令修补模块1208标识可修补着色器内核1204内依赖于当前NOS 1207的那些经标记的指令。随后,指令修补模块1208根据当前的NOS1207(例如,响应于执行函数1211,其指示内核将被执行)来修补用于执行的指令。经修补的指令(以及未经修补的指令)用于生成在硬件组件1240的执行资源1214(如先前所描述,它们可实现为多个执行单元)上执行的经修补的着色器内核1213。硬件单元状态1212也被更新以反映当前的进程状态1206(例如,已针对其修补了经修补的内核1213的指令的当前的NOS)。

在图13中示出根据本发明的一个实施例的方法。方法可实现在上文所述的(例如,如图11-12中所示的)系统架构的上下文内,但是方法不限于任何特定的系统架构。

在1301处,标识依赖于NOS的指令,并且在1302处,将传入的着色器编译至可修补二进制内核,在所述可修补二进制内核中,依赖于NOS的指令经标记以指示与不同的NOS的依赖关系。例如,如上文所述,每一条指令的位字段可用于指示该指令依赖于的那些NOS(例如,位字段的每一个位的位置指示不同的NOS)。在1303处,保存包括依赖于NOS的指令的经优化的可修补内核。

在1304处,在着色器执行期间(例如,响应于执行着色器),确定当前的NOS。在1305处,修改每一条专门标记(在操作1302中标记)的指令以实现当前的NOS规范(即,基于检测到的当前NOS)。所得到的经标记的指令被包括在经修补的着色器内核中。在1306处,根据当前的NOS执行经修补的着色器内核。

在一个实施例中,可仅部分地使用上述技术。例如,在一个实施例中,可直接编译在大多数情况下以相同方式配置的NOS(而不是使用本文中所述的修补技术)。

使用本文中所述的技术消除了以指令的多个实例(对于每一个NOS为一个)来对着色器内核进行高速缓存的需求,因为可动态地修补内核。此类方法减少了编译时间、性能和功率使用,由此改善了最终用户体验。

本发明的多个实施例可包括上述各个步骤。可在可用于使通用或专用处理器执行这些步骤的机器可执行指令中具体化这些步骤。或者,可由包含用于执行这些步骤的硬连线逻辑的专用硬件组件,或可由被编程的计算机组件和自定义硬件组件的任何组合来执行这些步骤。

如本文中所述,指令可以指硬件的具体配置,例如,配置成用于执行某些操作或具有预定功能的专用集成电路(ASIC),或者被存储在被具体化在非暂态计算机可读介质中的存储器中的软件指令。因此,可使用存储在一个或多个电子设备(例如,终端站、网络元件等)上并在其上被执行的代码和数据来执行附图中所示的技术。此类电子设备使用诸如非暂态计算机机器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪存设备;相变存储器)之类的计算机机器可读介质和暂态计算机机器可读通信介质(例如,电、光、声或其他形式的传播信号——诸如载波、红外信号、数字信号等)来(内部地和/或在网络上与其他电子设备之间进行)存储和传递代码和数据。另外,此类电子设备一般包括耦合至一个或多个其他组件的一个或多个处理器的集合,所述一个或多个其他组件例如是一个或多个存储设备(非暂态机器可读存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或显示器)以及网络连接。该组处理器和其他组件的耦合一般是通过一个或多个总线和桥(也称为总线控制器)实现的。存储设备和携带网络话务的信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定电子设备的存储设备通常存储用于在该电子设备的一个或多个处理器的集合上执行的代码和/或数据。当然,本发明的实施例的一个或多个部分可使用软件、固件和/或硬件的不同组合来实现。贯穿此具体实施方式,为了进行解释,陈述了众多具体细节以提供对本发明的透彻理解。然而,对本领域技术人员显而易见的是,没有这些具体细节中的一些细节也可实施本发明。在某些实例中,并不详细描述公知的结构和功能,以免使本发明的主题模糊。因此,本发明的范围和精神应根据所附权利要求书来确定。

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