计算机指令的降功率实现的制作方法

文档序号:14523672阅读:336来源:国知局
计算机指令的降功率实现的制作方法

相关申请的交叉引用

本申请要求2014年12月26日提交的美国正式专利申请序列号第14/583,300的优先权权益。



背景技术:

随着图形逻辑在功率使用和能力上增长,可调用图形逻辑来处理更高需求的任务,包括先前可由系统的中央处理单元(cpu)处理的一些任务。同时,功率约束(诸如,便携式系统中的那些约束)带来挑战。因此,更高效地使用可用的能量源的图形逻辑比较低效地使用可用能量源的图形逻辑更受期望。

另外,图形处理器可提供汇编语言指令集的硬件实现。实现的复杂度越高,(即,实现给定指令集所使用的硬件量越大),则实现会使用的功率量就越大。因此,在许多使用的合计中,对于图形逻辑和/或包括该图形逻辑的系统的总体功率使用和能量效率会有影响。

附图说明

通过阅读以下说明书和所附权利要求书并通过参考以下附图,各实施例的各种优点对本领域技术人员将变得显而易见,在附图中:

图1是根据实施例的图形处理架构的示例的框图;

图2是根据实施例基于操作数特性控制到一个或多个源的功率流的硬件布置的示例的框图;

图3是根据实施例的执行乘法指令的方法的示例的流程图;

图4是根据实施例的执行加法指令的方法的示例的流程图;

图5是根据实施例的执行比较指令的方法的示例的流程图;

图6是根据实施例的执行融合的乘-加指令的方法的示例的流程图;

图7-9是根据实施例的数据处理系统的概览的示例的框图;

图10是根据实施例的图形处理引擎的示例的框图;

图11-13是根据实施例的执行单元的示例的框图;

图14是根据实施例的图形流水线的示例的框图;

图15a-15b是根据实施例的图形流水线编程的示例的框图;以及

图16是根据实施例的图形软件架构的示例的框图。

具体实施方式

对于跨各种形状因子(例如,笔记本、游戏控制台、平板机、智能电话等)有效地缩放性能和/或所耗功率的瓦特(watt)的能量高效的图形逻辑会存在不断增长的需求。到更大能量效率(即,更低功率使用)的一个路径可以是提供可在给定形状因子内动态缩放以满足不同工作负载的操作要求的硬件。本文呈现的是基于对指令可调用以处理的操作数的考虑而动态地变更在执行某些指令中所要求的功率的实施例。

图1示出了可用于本文所公开的实施例的示例中的图形处理单元(gpu)100的示例的框图。gpu100可包括媒体固定功能102、三维(3d)图形固定功能104、存储器接口106、可包括光栅化器108的切片公共块107、3级(l3)高速缓存109和三个子切片(slice)块110、112、114。子切片块110、112、114中的每一个可具有八个执行单元(eu)116以及一个取样器118。如在图1的插图中进一步所示出,给定eu116可包括多个不同的硬件资源(包括加法器、乘法器、舍入器单元、归一化器单元、二补数单元、位移器单元和逻辑块)。前述内容是非穷举性的列表,并且eu总体上也可包括为了节约说明篇幅起见未在图1中示出的其他硬件资源。

eu116可计算数学和逻辑操作,同时取样器可执行纹理处理。对于一些3d工作负载和/或对于一些媒体工作负载可存在由eu116中的一个或多个执行的长内核(kernel),这可增加在上下文中eu的利用率。在一些实施例中,eu116中的一个或多个可以能够执行符合电气和电子工程师协会(ieee)的浮点指令。此外,gpu100可用来执行通用应用以允许中央处理单元(cpu)与gpu100之间的负载平衡,这可进一步强调eu性能(包括相对于功率使用而言的eu性能)。在所解说的实施例中,针对每个子切片,可八倍地利用在eu116中的一个或多个中提供的功率节省。

gpu100中的eu116中的一个或多个用来执行任务的指令集可由对应于各种数学和/或逻辑操作的少于大概100条(左右的)单条指令组成。操作的实现可通过其指令,并且指令一般在它们各自的硬件实现方面可以是彼此相异的。例如,图形指令集(isa)利用大概72条指令。在这些指令中,某些指令比其他的更频繁地使用。因此,指令的重复使用对于功率使用可能有极大的影响。

例如,在图形处理器中可能比其他指令更频繁使用的四条指令包括:用于将浮点数相乘的指令(下文中称为mul);将浮点数相加的指令(下文中称为add);用于将两个浮点数进行比较的指令(下文中称为cmp);以及融合的乘-加指令(下文中称为fma),在fma中执行浮点数的乘法随后是加法,当计算完成时发生单次舍入。相对于图形处理单元(gpu),这四条指令也可在着色器中普遍地使用。因此,由四条指令的硬件实现捕获的功率节省可提供显著的总体功率节省。

已经针对四条指令mul、add、cmp和fma中的每一条发布了各种标准。针对这四条和其他算术指令和/或操作的实现的被广泛接受的技术标准集是由ieee提供的。例如,ieee已经发布了浮点算术的标准集(ieee标准754-2008,ieee浮点算术标准),常称为“ieee754标准”或仅“ieee754”。ieee754标准不规定特定硬件,而是关注可应用于各种各样的硬件实现的各种技术规则。一般而言,ieee754和类似的标准向设计者提供在设计指令的微架构实现的硬件时的界限衡量(measureoflatitude)。然而ieee754和类似的标准可能不一定定义实现的微架构。

在用于mul、add、cmp和/或fma指令和/或操作的硬件实现的示例性实施例中,可用于处理一般情况的功率消耗的硬件逻辑和/或电路在普遍产生的特定情况中可能被禁用,在所述特定情况中,此类逻辑和/或电路对于提供由给定标准定义的正确结果(即,输出)可能不是必需的。特定(即,具体)情况可在操作数方面加以定义。在一些实施例中,给定标准可以是ieee754-2008标准。然而,本文所讨论的实施例可提供也符合其他标准的输出。因此,可通过选择性地对于关闭特定情况和/或情境集可能不需要的逻辑和/或电路来节省功率。此外,可通过除了当某些逻辑和/或电路被使用时否则不向这些逻辑和/或电路供电来节省功率。

可在mul、add、cmp和/或fma指令和/或操作中采用的硬件元件可随指令和/或实现而不同。通常,所述元件包括:

1.用于将数字相加的加法器;

2.用于将浮点数相乘的乘法器;

3.用于将位位移的位移器;

4.用于将结果重归一化并移除前导零的归一化器单元;

5.用于执行舍入操作的舍入器单元;和/或

6.用于将数字从符值(sign-magnitude)格式转换到二补数格式的二补数单元。

这些元件中的任何一个都能以各种方式使用诸如门、触发器、计数器等的硬件而实现在硬件中。此外,这些元件可以实现为算术逻辑单元(alu)的一部分。典型的alu可包括用于处理加法、减法、幅度比较和其他操作的一个或多个逻辑和/或电路。在一些架构中,可提供单独的浮点单元(fpu)。在一些硬件架构中,乘法器可包括alu。

现在转向图2,示出了根据实施例的硬件布置的示例的框图,所述硬件布置可分析诸如操作数特性的操作条件以确定将在执行给定指令时将被提供功率的硬件资源。浮点操作数a和b各自可具有他们相应尾数的23位分数部分(二进制点的左边的前附1可能是隐式的)、8位指数和符号位。逻辑电路202可访问每一个23位分数部分、8位指数、符号位和指令204。此外,逻辑电路202可确定将使用哪些硬件资源。该确定生成可馈给解复用器单元215的选择210,该解复用器单元215可包括进一步的逻辑,所述进一步的逻辑在确定将会将功率212提供给各种硬件资源中的哪些时是有用的。在一个示例中,各种硬件资源可包括加法器、乘法器、位移器单元、归一化器单元、二补数单元、舍入器单元和/或各种其他资源。

浮点乘法的一般情况可如下表示:

a·b=p

其中操作数a是浮点被乘数,操作数b是浮点乘数,且p是浮点积。按纯粹数学的说法,用来表示积的数字的数量可等于每一个操作数中数字的和。可节省在mul指令和/或操作中执行乘法时可用的功率的实施例可按如下方式基于操作数特定的情况:

1.a或b中任一个或这两者=0。在此情况下,我们可将积取为0,而无需将功率提供至典型地用于执行乘法的附加乘法硬件(包括乘法器、舍入器单元和/或归一化器单元)。

2.a或b中任一个或这两者是非数(nan)。根据ieee754标准,nan可通过结合非零分数将指数设置为11111111来指示。如果任一个操作数是nan,则其乘法的输出可指定为如此,并且根据ieee754或类似的标准输出可指示为如此而无需使用乘法硬件。

3.a或b中任一个或这两者是无穷数(inf),无穷数可以指比架构中可表示的更大的数。inf在ieee754中可通过使用全-0分数和全1指数来指示。在此情况下,可类似地将积取为无穷并相应地表示,而无需使用乘法硬件。

4.操作数中的一个是1。在此情况下,积就是另外一个操作数,并可避免使用乘法硬件。

5.a或b中任一个或这两者是反常值(denormal)。对于给定浮点系统,使emin为可由系统表示的最小指数。幅度小于1.0χ2emin的操作数可称为“反常值”。在一些应用编程接口(api)中,反常值数清空为0。例如,(微软公司)api准许反常值清空为0。在此情况下,可乘以反常值可处理为乘以0,并且可如上述示例情况(1)来处理。此外,由于此处理可以是api特定的,因此反常值可不清空,而是在例如将利用其他api和/或其他标准时在后续算术操作中进一步处理。

概括起来,浮点数的乘法可利用在前述情况中不需要完全部署的资源。在这些情况下,除非明确地需要,否则本文所公开的实施例可不向这些资源提供功率。

图3示出了根据实施例的处理浮点乘法(mul)指令和/或操作中的特定情况的方法300的示例的流程图。方法300可实现为存储在机器可读或计算机可读存储介质(诸如,随机存取存储器(ram)、只读存储器(rom)、可编程rom(prom)、闪存等)、存储在可配置逻辑(诸如,可编程逻辑阵列(pla)、现场可编程门阵列(fpga)、复杂可编程逻辑设备(cpld))、存储在使用电路技术(诸如,专用集成电路(asic)、cmos或晶体管-晶体管逻辑(ttl)技术、或其任何组合)的固定功能逻辑硬件中的逻辑指令集。例如,用于执行方法300中所示的操作的计算机程序代码可以用一种或多种编程语言的任何组合来编写,所述编程语言包括面向对象编程语言(诸如,c++等)和常规的过程编程语言(诸如,“c”编程语言或类似的编程语言)。此外,方法300可使用本文述及的电路技术中的任何一种来实现。

在处理框302处,用来执行浮点乘法的某些电路可被门控关闭和/或以其他方式不参与,使得电路不接收电功率。电路可包括乘法器、浮点单元(flp)、归一化器单元、舍入器单元和/或可在浮点乘法的微架构实现中使用的其他硬件。

在处理框304处,可考虑此处指示为a和b的两个操作数。在框306处,可作出操作数中的任一个或这者是否是nan的判定。如果是,则操作数的积可在处理框308处输出为nan,并且mul指令可在处理框310处完成。然而,如果a或b都不是nan,则可在框312处作出任一操作数是否等于0或者是反常值的判定。如果是,则输出可在处理框314处设置为0,并且mul指令的执行可在处理框310处完成。如果a或b都不是反常值或者等于0,则可在框316处作出任一操作数a或b是否是如可针对给定标准而定义的inf的判定。如果是,则输出可在处理框318处设置为inf,并且mul指令可在处理框310处完成。如果a或b都不是inf,则可在框320处作出任一操作数是否等于1(乘法的单元元素)的判定。如是,则在处理框322处,输出可设置为不等于一的无论哪一个操作数,或者,在两者都等于1的事件中,输出可设置为1,并且mul指令可在处理框310处完成。

应理解,前述测试的次序可变化。例如,在其他实施例中,对inf的测试可在对nan的测试之前,0测试可比所示的稍晚发生,等等。在其他实施例中,测试可互相并行地进行。

如果没有操作数等于1,则可在处理框324处向乘法器和/或其他电路提供功率,这可用来执行手头的具体硬件实现中的浮点乘法。伴随着架构可采用的无论什么形式的舍入,积a*b可在处理框326处计算,并且结果可在处理框328处输出。mul指令的执行可在处理框310处完成,并且给乘法电路(例如,乘法器、舍入器单元和/或归一化器单元)的功率可再次关闭。在此类电路可以不需要供电的情况下,可存在能耗的净节省。在一些实施例中,取决于所采用的具体硬件实现,用来做出前述情况的判定的功率可能只是乘法器功率的1%-5%。

另一个指令和/或操作——浮点加法(add)——呈现可使功率使用经济的情况。浮点加法的一般情况可如下表示:

a+b=s

其中a和b是也可称为加数的浮点操作数,且s是得到的和。可使功率使用经济的实施例可按如下方式基于操作数特定的情况:

1.a或b中任一个或这两者等于0。在此情况下,我们可以将和取为非零操作数,或者如果两个操作数都=0,则它们的和=0。此规则可用来确定正确的符合ieee标准的和而无需对用于进行浮点加法所必需的附加硬件(诸如,加法器、位移器单元和/或二补数单元)供电。

2.a或b中任一个或这两者都是非数(nan)。在此情况下,操作的输出可指示为nan,而无需向加法器、位移器单元和/或二补数单元供电。

3.a或b中任一个或这两者都是无穷数(inf)。在此情况下,和可取为无穷并相应地表示,而无需要求加法器、位移器单元和/或二补数单元。

4.a或b中任一个或这两者都是反常值(denormal)。可将此情况看待为就好像操作数为0(由所使用的标准和/或api确定),从而绕过加法器、位移器单元和/或二补数单元。

5.a和b在幅度上相差太远而不能同时考虑二者。当数字a和b以ieee标准规范化形式表达时,a的指数可比b的指数大某个量,使得实际上可将b取为0,且随后输出可取为a。例如,让尾数的分数部分占据32位字的23位并有按照ieee754标准的隐式前附1,指数占用另外的8位并且第32位是符号位。如果a的指数减去b的指数大于或等于(>=)25,则可忽略b(将b取为等于0),并且可绕过加法器。此外,a与b之间的差可以大到使得在舍入到最近偶数模式(rne)下舍入可以不是考虑因素,并且答案可以是a。此示例可发生,因为一旦数字已转换成二补数形式,则24位数字(包括二进制点左边的前导隐式位)现在可以是25位长,其中第25位表示符号。规范化数字的分数部分(诸如,可向它们提供公共指数)的位移可出于计算的目的而有效地将两个数字中较小的一个放到范围外,甚至在rne舍入下也是如此。如果a的指数减去b的指数等于24,可通过实现来绕过加法器,并且取决于舍入模式,输出可以是a或a+1。如果b的指数等于0,则在某些标准中b可取为等于0,在这些情况下,可绕过加法器和位移器。

现在转向图4,示出根据实施例的处理通过add指令实现的浮点加法中的某些情况的方法400的示例的流程图。方法400可实现为存储在机器可读或计算机可读存储介质(诸如,随机存取存储器(ram)、只读存储器(rom)、可编程rom(prom)、闪存等)中、存储在可配置逻辑(诸如,可编程逻辑阵列(pla)、现场可编程门阵列(fpga)、复杂可编程逻辑设备(cpld))中、存储在使用电路技术(诸如,专用集成电路(asic)、cmos或晶体管-晶体管逻辑(ttl)技术或其任何组合)的固定功能逻辑硬件中的逻辑指令集。例如,用于执行方法400中所示的操作的计算机程序代码可以用任何一种或多种编程语言的组合来编写,所述编程语言包括面向对象编程语言(诸如,c++等)和常规的过程编程语言(诸如,“c”编程语言或类似的编程语言)。此外,方法400可使用本文述及的电路技术中的任何一种来实现。

在处理框402处,常用来执行浮点加法的某些电路可被门控关闭和/或以其他方式不参与使得电路不接收任何功率。门控关闭电路包括加法器、位移器单元、二补数单元、或如可在add指令的微架构实现中使用的其他硬件。

在处理框404处,可呈现此处指示为a和b的两个浮点操作数。在框406处,可作出操作数中的任一个是否是nan的判定。如果操作数是nan,则输出可在处理框408处指示为0,并且add指令的执行可在处理框410处完成。然而,如果a或b都不是nan,则可在框412处作出任一操作数是否等于0或者如果反常值和所用的标准这样准许任一操作数是否实际上可这样处理。如果是,则输出可在处理框414处设置为非零操作数,并且指令的执行可在处理框410处完成。如果a或b都不等于0,则当可由给定的架构定义inf(无穷)时,可在框416处作出任一操作数a或b是否为inf(无穷)的判定。如果是,则输出可在处理框418处设置为inf,并且add指令的执行可在处理框410处完成。

应理解,前述测试的次序可变化。例如,在其他实施例中,对inf的测试可在对nan的测试之前,0测试可比所示的稍晚发生,等等。在其他实施例中,测试可互相并行地进行。

如果操作数都不是nan、0、反常值,也都不是inf,则可向加法器和二补数单元提供功率,并且可在处理框424处计算指数之间的差。本文示为expa-expb的差可提供对两个数a和b分隔的二进制数量级差的量的指示。可在框426处作出a和b分隔地足够远而能够落入上文讨论的情况(5)的判定。此判定可取决于所采用的标准,包括诸如所使用的舍入协议和可用来表达浮点数的字长度的考虑。在根据前述的ieee754标准的单精度实施例中,数的尾数的分数部分可占据32位字的23位,并有隐式的前附1,随后是8位指数和在第32个位的位置中的符号位。如果expa-expb>=25,则可忽略b(取为等于0),并且当使用舍入到最近偶数模式(rne)时,加法器和舍入块都可不需要。如果expa-expb=24,则可绕过加法器,并且在使用rne舍入的架构中,取决于舍入操作的具体情况,输出可以是a或a+1。如果b的指数等于0,则在某些标准中b可取为等于0,在这些情况下可绕过加法器。

无论采用的哪个协议和/或标准,如果a与b之间的幅度差如上文所讨论的足够大,则两个操作数中较小的那个(例如,b)可取为等于0,并且在处理框428处,操作数中较大的(例如,a)可取为输出。常规浮点加法操作可能需要的硬件组件(诸如,加法器和/或二补数单元)可在处理框430处断电,并且add指令的执行可在处理框410处完成。另一方面,如果如上文讨论的操作数a和b分隔得不是那么远,则可在处理框440处给予二补数单元的电路功率,并且较小数的尾数可转换成二补数形式。可在处理框442处对位移器电路供电,并且可使较小的操作数与较大的操作数二进制点对齐。然后,在处理框444处,可使用加法器来计算和a+b,并且在框446处,结果可作为输出提供。此刻,在处理框448处,可不再使用并可关闭加法器、位移器、二补数单元和/或其他相关电路并,并且add操作可在处理框410处完成。

所考虑的第三条指令cmp可用来执行浮点比较操作。在一个实施例中,cmp可判定被称为a和b的两个浮点数是否相等。在另一个实施例中,cmp更宽泛地判定a=b、a>b还是b>a。在此实施例中,并与ieee754标准一致,如上文所讨论,浮点数可具有三个字段,包括符号位s、8位的指数字段以及用于尾数的分数部分的23位的字段和用于尾数的隐式的第24位。当以标准化形式呈现时,可以由在二进制点左边的隐式前导1以及尾数的23位分数部分。如果两个数有相同的符号位、指数和尾数,则在给定实现中,这两个数将相等。然而在大量的情况下,并不需要彼此对照来测试三个字段中的每一个以得到答案。

根据一个实施例,如果两个数a和b的符号不同,则要判定一个数是否大于另一个可以不需要经过完整的加法或减法。为正的无论哪个数大于为负的那个数。如果符号相同但一个数具有比另一个数大的指数,则由于符号是相同的且数已经用不需要位移的标准形式来表示,因此具有较大指数的数是两个数中较大的。即使两个数的符号和指数二者都相等且将对每一个的尾数部分进行加法操作(此刻,功率供应至加法器),也可以不使用位移器电路或多路复用器,因为要达到这一点,对于两个数,指数和符号可以是相同的。通过在这个和其他情况下使用较少的硬件电路,可消耗更少的功率。

图5示出了根据实施例的方法500的示例的流程图,方法500用于判定称为a和b并且每一个都以如上所指示的标准形式呈现的两个浮点数是否相等,或者如果不相等哪一个较大。方法500可实现为存储在机器可读或计算机可读存储介质(诸如,随机存取存储器(ram)、只读存储器(rom)、可编程rom(prom)、闪存等)中、存储在可配置逻辑(诸如,可编程逻辑阵列(pla)、现场可编程门阵列(fpga)、复杂可编程逻辑设备(cpld))中、存储在使用电路技术(诸如,专用集成电路(asic)、cmos或晶体管-晶体管逻辑(ttl))技术、或其任何组合)的固定功能逻辑硬件中的逻辑指令集。例如,用于执行方法500中所示的操作的计算机程序代码可以用任何一种或多种编程语言的组合来编写,所述编程语言包括面向对象编程语言(诸如,c++等)和常规的过程编程语言(诸如,“c”编程语言或类似的编程语言)。此外,方法500可使用本文述及的电路技术中的任何一种来实现。

在处理框502处,某些硬件在功率方面可被门控关闭。硬件可包括二补数单元、加法器、和/或位移器单元。可在处理框504处提供数,所述数包括相应的符号位sa和sb、指数expa和expb和分数尾数部分ma和mb。

在框506处,可作出符号位sa和sb是否相同的判定。测试的一个可能的硬件实现可以是将位sa和sb馈给xnor(同或)门,xnor可以在仅当位sa和sb是相同值时返回逻辑1。其他硬件实现使用其他门,诸如xor(异或)(xor)、nand(与非)、and(与)、(or)或,等等。如果符号位sa和sb不相同,则数在符号上不同。对a的符号位的测试可在框508处完成以判定其是否是0并因此判定是否为正(例如,在0符号位对应于正数的实现中)。如果a的符号位不是0,则b可以是正的,并且a可以认为是负的,处理框510可确定b>a,并且指令可在框512处完成。如果a的符号位=0,则处理框514可确定a>b,并且指令的执行可在框512处完成。

如果框506确定a和b的符号相同,则可在框516处作出数a和b的指数部分(分别是expa和expb)是否相等的判定。如果不是,则可在框520处作出是否expa>expb的判定。指数expa和expb之间的差的计算可使用在芯片架构中普遍可用的8位减法器来完成。如果a具有较大的指数,则处理框524可确定a>b。否则,处理框528可确定输出是b>a,并且指令可在处理框512处完成。注意,做出判定无需使用二补数单元、位移器单元和/或加法器,在此可关闭它们。

如果框516确定两个数a和b有完全相同的指数,则可在处理框532处向二补数单元和/或加法器提供功率,并且框536可测试尾数ma和mb以判定a的尾数是否大于b的尾数。如果是,则处理框538可确定输出是a>b。否则,处理框540可确定输出是a>b。可在处理框544处将二补数单元和/或加法器关闭,并且指令的执行可在处理框512处完成。在此实施例中,要进行比较可以不使用位移器和/或可以不对位移器通电,从而进一步节省功率。

此处呈现的实施例可为其提供功率节省的另一条指令是融合的乘-加(fma)。fma指令是复合操作,所述复合操作可包括可在一个步骤中执行的浮点乘法以及随后的浮点加法操作,并且随后有单个舍入。

在一个示例中,使a、c和x是浮点数。于是,fma计算:

c·x+a=输出

我们可以进一步定义浮点变量d=c·x,以便更紧凑地表示:

d+a=输出

此操作足够频繁地发生,使得它可在指令集中作为指令出现。此处呈现的实施例标识其中可以不需要fma的完全硬件实现的某些普遍发生的情形。以下情况在根据实施例的某些实现中可提供功率节省:

1.a、c或x中的任何一个等于0。如果a=0,则输出将是cx。在此情况下,加法器从电源处门控关闭,因为在计算fma输出时可以不用到它。如果c或x中任一个=0,则输出可以是a,并且乘法器和加法器两者都被门控关闭,因为为了提供正确的fma输出可以不需要使用它们。

2.a、c或x中的任何一个是非数(nan)。根据ieee754标准,nan可通过结合非零分数将指数设置为11111111来指示。在此情况下,fma输出类似地是非数,并且根据标准可以如此指示,而不需要涉及加法器和/或乘法器。

3.a、c或x中的任何一个是无穷数(inf)(例如,指比架构中可表示的更大的数)。inf在ieee754中可通过使用全0分数和全1指数来指示。在此情况下,可类似地将fma输出取为无穷并相应地表示而无需使用乘法器和/或加法器。

4.c或者x=1。在此情况下,积就是另外一个操作数,并可绕过乘法硬件。

5.a、c或x中的任何一个是反常值。取决于所使用的标准和/或api,此情况可以看成好像该数是零,或者可以看成可能需要进一步计算的小的数。在ieee754标准中或者在一些api中,可作为0来对待。在一些标准中,具有指数-127的规范化数可取为等于0。因此,如果a的指数是-127,则输出将是d,其中对d的计算可利用乘法器和/或舍入器单元,并且其中绕过加法器。在d举具有指数-127的情况下,则在一些实施例中输出可以是a,并且加法器、乘法器和舍入器单元中的任何一个都可以不使用。

6.当以规范化形式表示时,二进制点(基数)可分隔地很远以至于a可以比ox大得足够多,并且输出可取为a。此情况可以不要求使用乘法器电路、加法器电路或位移器电路。在一些情况下(取决于标准和/或api)也可免除舍入器电路。

现在转向图6,示出根据实施例的用于计算fma指令的正确输出的方法600的示例的流程图。方法600可实现为存储在机器可读或计算机可读存储介质(诸如,随机存取存储器(ram)、只读存储器(rom)、可编程rom(prom)、闪存等)中、存储在可配置逻辑(诸如,可编程逻辑阵列(pla)、现场可编程门阵列(fpga)、复杂可编程逻辑设备(cpld))中,存储在使用电路技术(诸如,专用集成电路(asic)、cmos或晶体管-晶体管逻辑(ttl)技术、或其任何组合)的固定功能逻辑硬件中的逻辑指令集。例如,用于执行方法600中所示的操作的计算机程序代码可以用任何一种或多种编程语言的组合来编写,所述编程语言包括面向对象编程语言(诸如,c++等)和常规的过程编程语言(诸如,“c”编程语言或类似的编程语言)。此外,方法600可使用本文述及的电路技术中的任何一种来实现。

在处理框622处,所选择的硬件电路可门控关闭,使得不对电路供电。硬件电路可包括加法器、乘法器、位移器单元和/或二补数单元。在处理框603处,可呈现浮点数a、c和x。在所解说的示例中,数a、b和x可以是ieee标准化的形式,具有符号位、8位指数以及23位分数尾数,所述23位分数尾数具有在二进制点左边的隐式前导位。在其他实施例中,可使用更长或更短的数的表示,包括数的双精度描述。

在框604处,可作出数a、c或x中的任何一个在所使用的标准下是否是非数(nan)的判定。如果a、c或x是非数,则可在处理框605处给出nan的输出,并且指令可在处理框613处完成。

如果没有操作数(例如,数a、c或x)是nan,则在框607处,可作出c或x是否是0的判定。如果c或x中的任一个为0,则在处理框610处,可将输出设为a,a对于此情况是正确的fma输出。注意,可无需使用加法器、乘法器、位移器单元和/或二补数单元来获得此输出,从而节省接通功率,因为可以关闭它们。如果c或x都不等于0,则在框616处可作出a是否等于0的判定。如果是,则在处理框618处,可向乘法器和/或乘法电路提供功率,并且可在处理框620处计算积c·x,在处理框623处,该积可作为输出来提供。在处理框625处,可在此将给乘法器和/或乘法电路的功率门控关闭,并且fma指令的执行可在处理框613处完成。对0的先前测试也包含对是反常值的数的一个或多个测试,因为在各种标准和/或api中,此类数可看成好像是相等的。

另一方面,如果在框616处确定了a不等于0,则在框627处,可作出根据所采用的算术标准,数c、x或a是否是无穷(inf)的判定。如果是,则在处理框629处的输出可以为inf,并且指令可在处理框613处完成。

应理解,前述测试的次序可变化。例如,在其他实施例中,对inf的测试可在对nan的测试之前,对0的测试可在对inf的测试之后发生,等等。在其他实施例中,测试可互相并行地进行。

如果操作数每一个都不是无穷、0、或nan,则在处理框632处,可将功率提供至加法器的电路。在框635处,c的指数和x的指数可加到一起,这可提供对积d=c·x的大小的幅度的衡量。在处理框638处,可通过计算a的指数与d的指数之间的差来将积d的幅度与a的幅度比较。

处理框641可辨别其中a和d的相应二进制点可分隔足够远以保证在确定fma输出时将进行的某些简化计算的几种情况。为了记法的紧凑,给定数的指数部分引用为expn,使得a的指数部分是expa、x的指数部分是expx、c的指数是expc、且d的指数是expd(因为expd=expx+expc)。

实施例考虑以下情况中的全部或一些:

1.expa-expd>=25。在此情况下,d可取为等于0,并且fma指令的输出可设为a而无需依赖于乘法器、加法器和/或舍入器单元。

2.expa-expd>=50。在此实施例中,浮点数a、c和x可以是24位长,包括二进制点左边的隐式前导位,使得积d=c·x的宽度可以是48位。此外,包括用于符号的位以及用于辅助溢出考虑的位,在此实施例中可考虑50位。在此情况下,当expd-expa>=50时,a可取为等于0,并且fma指令的输出可以是d而无需依赖于加法器。乘法器和/或舍入器可在计算积d和fma指令的输出时使用。

3.expa-expd=24。取决于所采用的舍入,输出可取为等于a或a+1。可绕过加法器。在一些实施例中,可对乘法器和舍入器单元供电以启用对a的舍入的计算。

4.expd-expa=50。在此情况下(其中我们可以考虑用于积d的50位),取决于所采用的舍入,输出可取为等于d或d+1。可绕过加法器,并且可在计算中使用乘法器和舍入器。

回到图6,从框641起向前进展,将讨论几种示例性情况。在框641处,可作出是否|expd-expa|>=50的判定。如果是,则从框641可采取“是”分支,并且可以不将功率供应至加法器、舍入器单元和/或乘法器。在框646处,可作出是否d>a的判定。如果不是,则fma操作的标准的正确输出可以是a,这可以是处理框648处的输出。在此可以不使用至加法器、乘法器和/或舍入器单元的功率,并且操作可在处理框613处完成。

另一方面,如果在框646处确定了d>a,则在处理框652处,可将功率提供至乘法器,并且取决于实现,也将功率提供至舍入器单元供电以促进在处理框654处对d的计算,在框654处可计算d=c·x。在框656处,可作出是否要进行加法的判定,并且在一个实施例中,该判定可以基于上文所讨论的操作数条件。在此情况下,在此可不执行加法,因为d比a大得多,并且可采取至处理框660的“否”分支,其中,在处理框660处,输出可取为d。在处理框664处可对乘法器断电(如果以使用舍入器单元,也对舍入器单元断电),并且fma指令可在处理框613处完成。

当二进制点不是如上文所讨论地分隔地过远时,在处理框652处,可将功率提供至乘法器,并且在处理框670处也将功率提供至二补数单元和/或位移器单元。在处理框654处可计算d=c·x,并且在框656处可作出是否将在此使用加法器的判定。一般情况下,可使用加法器以形成和a+d,使得在框682处,可连同至舍入器单元的功率一起提供至加法器的功率。处理框685可计算和a+d,这可使用处理框674和处理框678中提供的结果,处理框674可将a转换成二补数形式,处理框678可将a位移成正确地与d对齐使得加法器可在处理框685中执行和。在处理框688处,输出可设为a+d,并且在处理框690处,可关闭加法器、位移器单元、舍入器单元、乘法器和/或二补数单元,因为fma指令可在处理框613处完成。

概览-图7-9。

图7是根据实施例的数据处理系统1100的框图。数据处理系统1100包括一个或多个处理器1102和一个或多个图形处理器1108,并可以是单处理器台式系统、多处理器工作站系统、或具有大量处理器1102或处理器核1107的服务器系统。在一个实施例中,数据处理系统1100是供用在移动、手持式或嵌入式设备中的片上系统(soc)集成电路。

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

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

在一个实施例中,处理器1102包括高速缓存存储器1104。取决于架构,处理器1102可具有单个内部高速缓存或者多个层级的内部高速缓存。在一个实施例中,高速缓存存储器在处理器1102的各种组件之间共享。在一个实施例中,处理器1102也使用可使用已知的高速缓存一致性技术而在处理器核1107之间共享的外部高速缓存(例如,3级(l3)高速缓存或末级高速缓存(llc))(未示出)。寄存器组1106额外地包括在处理器1102中,处理器1102可包括用于存储不同类型的数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可专用于处理器1102的设计。

处理器1102耦合至处理器总线1110以在处理器1102与系统1100中的其他组件之间传输数据信号。系统1100使用示例性“中枢”系统架构(包括存储器控制器中枢1116和输入输出(i/o)控制器中枢1130)。存储器控制器中枢1116促进存储器设备与系统1100的其他组件之间的通信,而i/o控制器中枢(ich)1130提供经由本地i/o总线到i/o设备的连接。

存储器设备1120可以是动态随机存取存储器(dram)设备、静态随机存取存储器(sram)设备、闪存设备、或具有适合的性能来用作进程存储器的某个其他存储器设备。存储器1120可以存储数据1122和指令1121以供在处理器1102执行进程时使用。存储器控制器中枢1116也与可选的外部图形处理器1112耦合,该外部图形处理器1112与处理器1102中的一个或多个图形处理器1108通信以执行图形和媒体操作。

ich1130使外设能够经由高速i/o总线连接到存储器1120和处理器1102。i/o外设包括音频控制器1146、固件接口1128、无线收发机1126(例如,wi-fi、蓝牙)、数据存储设备1124(例如,硬盘、闪存等)和用于将传统(例如,个人系统2(ps/2))设备耦合至系统的传统i/o控制器1140。一个或多个通用串行总线(usb)控制器1142连接诸如键盘和鼠标1144组合的输入设备。网络控制器1134还可以耦合至ich1130。在一个实施例中,高性能网络控制器(未示出)耦合至处理器总线1110。

图8是具有一个或多个处理器核1202a-n、集成的存储器控制器1214和集成图形处理器1208的处理器1200的实施例的框图。处理器1200可以包括额外的核,所述额外的核多至由虚线框表示的额外的核1202n并包括由虚线框表示的额外的核1202n。核1202a-n的每一个都包括一个或多个内部高速缓存单元1204a-n。在一个实施例中,每一个核还有对一个或多个共享高速缓存单元1206的访问权。

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

处理器1200还可包括一个或多个总线控制器单元1216集和系统代理1210。一个或多个总线控制器单元1216管理外设总线的集合,外设总线诸如一个或多个外设组件互连总线(例如,pci、pciexpress)。系统代理1210提供对于各种处理器组件的管理功能。在一个实施例中,系统代理1210包括一个或多个集成存储器控制器1214以管理对各种外部存储器设备(未示出)的访问。

在一个实施例中,核1202a-n中的一个或多个核包括对同时多线程的支持。在此类实施例中,系统代理1210包括用于在多线程处理期间协调并操作核1202a-n的组件。系统代理1210可额外包括功率控制单元(pcu),所述pcu包括用于调节核1202a-n和图形处理器1208的功率状态的逻辑和组件。

处理器1200额外地包括用于执行图形处理操作的图形处理器1208。在一个实施例中,图形处理器1208与共享高速缓存单元1206的集合以及包括一个或多个集成存储器控制器1214的系统代理单元1210耦合。在一个实施例中,显示控制器1211与图形处理器1208耦合以将图形处理器输出驱动到一个或多个耦合的显示器。显示控制器1211可以是经由至少一个互连与图形处理器耦合的分开的模块,或者可以集成在图形处理器1208或系统代理1210内。

在一个实施例中,使用基于环的互连单元1212来耦合处理器1200的内部组件,然而也可使用替换性互连单元,诸如,点到点互连、交换互连或包括本领域内公知的技术的其他技术。在一个实施例中,图形处理器1208经由i/o链路1213与环互连1212耦合。

示例性i/o链路1213表示i/o互连的多个变体中的至少一种,包括促进各种处理器组件与高性能嵌入式存储器模块1218(诸如,edram模块)之间的通信的封装上i/o互连。在一个实施例中,核1202a-n中的每一个和图形处理器1208将嵌入式存储器模块1218用作共享的末级高速缓存。

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

处理器1200可以是使用多种工艺技术中的任一种的一个或多个衬底的一部分或实现在使用多种工艺技术中的任一种的一个或多个衬底上,所述工艺技术例如,互补式金属-氧化物-半导体(cmos)、双极结型/互补式金属-氧化物-半导体(bicmos)或n型金属-氧化物-半导体(nmos)。此外,处理器1200可以实现在一个或多个芯片上或实现为片上系统(soc)集成电路,所述soc集成电路具有所解说的组件,还有其他组件。

图9是图形处理器1300的一个实施例的框图,该图形处理器1300可以是分立的图形处理单元,或者可以是与多个处理核集成的图形处理器。在一个实施例中,经由映射至图形处理器上的寄存器的存储器映射的i/o接口以及被置入处理器存储器中的命令来与图形处理器通信,。图形处理器1300包括用于访问存储器的存储器接口1314。存储器接口1314可以是到本地存储器、一个或多个内部高速缓存、一个或多个共享的外部高速缓存和/或系统存储器的接口。

图形处理器1300还包括用于将显示输出数据驱动到显示设备1320的显示控制器1302。显示控制器1302包括用于多个视频层或用户接口元件的显示和合成的一个或多个覆盖平面的硬件。在一个实施例中,图形处理器1300包括视频编解码器引擎1306,所述视频编解码器引擎1306用于对媒体进行编码、解码或将媒体转码到一个或多个媒体编码格式、从一个或多个媒体编码格式转码媒体或在一个或多个媒体编码格式之间转码媒体,所述媒体编码格式包括但不限于:运动图像专家组(mpeg)格式(诸如,mpeg-2)、高级视频编码(avc)格式(诸如,h.264/mpeg-4avc)以及电影电视工程师协会(smpte)421m/vc-1、和联合图像专家组(jpeg)格式(诸如,jpeg、和运动jpeg(mjpeg)格式)。

在一个实施例中,图形处理器1300包括用于执行二维光栅化器操作(例如,位边界块传送)的块图像传送(blit)引擎1304。然而,在一个实施例中,2d图形操作是使用图形处理引擎(gpe)1310的一个或多个组件来执行的。图形处理引擎1310是用于执行包括三维(3d)图形操作和媒体操作的图形操作的计算引擎。

gpe1310包括用于执行3d操作的3d流水线1312,3d操作诸如,使用作用于3d图元形状(例如,矩形、三角形等)的处理功能来渲染三维图像和场景。3d流水线1312包括可编程和固定功能元件,所述可编程和固定功能元件执行元件内的各种任务和/或将执行线程派生到3d/媒体子系统1315。尽管3d流水线1312可以用来执行媒体操作,但是gpe1310的实施例还包括媒体流水线1316,所述媒体流水线专门用来执行诸如视频张贴处理和图像增强的媒体操作。

在一个实施例中,媒体流水线1316包括固定功能或可编程逻辑单元以代替或代表视频编解码器引擎1306执行一个或多个专业媒体操作,诸如,视频解码加速、视频去交错和视频编码加速。在一个实施例中,媒体流水线1316额外地包括用于派生线程以供在3d/媒体子系统1315上执行的线程派生单元。所派生的线程在3d/媒体子系统中所包括的一个或多个图形执行单元上执行针对媒体操作的计算。

3d/媒体子系统1315包括用于执行由3d流水线1312和媒体流水线1316派生的线程的逻辑。在一个实施例中,流水线向3d/媒体子系统1315发送线程执行请求,该3d/媒体子系统包括用于仲裁各种请求并将各种请求分派到可用的线程执行资源的线程分派逻辑。执行资源包括用于处理3d和媒体线程的图形执行单元的阵列。在一个实施例中,3d/媒体子系统1315包括用于线程指令和数据的一个或多个内部高速缓存。在一个实施例中,子系统还包括用于在线程之间共享数据以及用于存储输出数据共享存储器(包括寄存器和可寻址存储器)。

3d/媒体处理-图10

图10是用于图形处理器的图形处理引擎1410的实施例的框图。在一个实施例中,图形处理引擎(gpe)1410是图9中示出的gpe1310的一个版本。gpe1410包括3d流水线1412和媒体流水线1416,它们中的每一个都可以与图9的3d流水线1312和媒体流水线1316的实现不同或类似。

在一个实施例中,gpe1410与命令流送器1403耦合,命令流送器1403向gpe3d和媒体流水线1412、1416提供命令流。命令流送器1403耦合至存储器,该存储器可以是系统存储器或内部高速缓存存储器和共享高速缓存存储器中的一个或多个。命令流送器1403从存储器接收命令,并向3d流水线1412和/或媒体流水线1416发送命令。3d和媒体流水线通过经由相应流水线内的逻辑执行操作或通过将一个或多个执行线程分派到执行单元1414来处理命令。在一个实施例中,执行单元阵列1414是可缩放的,使得阵列包括基于gpe1410的目标功率和性能级别的可变数量的执行单元。

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

取样引擎1430中的专用媒体取样逻辑包括去噪声/去交错模块1432、运动估计模块1434和图像缩放和过滤模块1436。去噪声/去交错模块1432包括用于对经解码的视频数据执行去噪声或去交错算法中的一个或多个的逻辑。去交错逻辑将交错的视频内容的替换性字段组合进单个视频帧中。去噪声逻辑从视频和图像数据中降低或移除数据噪声。在一个实施例中,去噪声逻辑和去交错逻辑是运动自适应的,并使用基于在视频数据中检测到的运动量的空间或时间过滤。在一个实施例中,去噪声/去交错模块1432包括专用运动检测逻辑(例如,在运动估计引擎1434内)。

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

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

在一个实施例中,图形处理引擎1410包括数据端口1444,所述数据端口1444为图形子系统提供访问存储器的额外机制。数据端口1444促进用于操作的存储器访问,所述操作包括渲染目标写、常量缓冲区读、抓取(scratch)存储器空间读/写和媒体表面访问。在一个实施例中,数据端口1444包括高速缓存存储器空间以缓存对存储器的访问。高速缓存存储器可以是单个数据高速缓存,或者对经由数据端口访问存储器的多个子系统可分割成多个高速缓存(例如,渲染缓冲器高速缓存、常量缓冲器高速缓存等)。在一个实施例中,在执行单元阵列1414中的执行单元上执行的线程通过经由将图形处理引擎1410的子系统的每一个耦合起来的数据分布互连交换消息来与数据端口通信。

执行单元-图11-13

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

图形处理器经由环互连1502接收批量命令。传入命令由流水线前端1504中的命令流送器1503解释。图形处理器包括用于经由(多个)图形核1580a-n来执行3d几何处理和媒体处理的可缩放执行逻辑。对于3d几何处理命令,命令流送器1503向几何流水线1536供应命令。对于至少一些媒体处理命令,命令流送器1503向与媒体引擎1537耦合的视频前端1534供应命令。媒体引擎1537包括用于视频和图像张贴处理的视频质量引擎(vqe)1530以及用于提供硬件加速的媒体数据编码和解码的多格式编码/解码(mfx)1533引擎。几何流水线1536和媒体引擎1537的各自都为由至少一个图形核1580a提供的线程执行资源生成执行线程。

图形处理器包括可缩放线程执行资源特征化模块核1580a-n(有时候称为核切片),其各自都有多个子核1550a-n、1560a-n(有时候称为核子切片)。图形处理器可具有任何数量的图形核1580a到1580n。在一个实施例中,图形处理器包括至少具有第一子核1550a和第二核子核1560a的图形核1580a。在另一个实施例中,图形处理器是具有单个子核(例如,1550a)的低功率处理器。在一个实施例中,图形处理器包括多个图形核1580a-n,其中的每一个都包括第一子核集1550a-n和第二子核集1560a-n集。第一子核集1550a-n中的每一个子核至少包括第一执行单元集1552a-n和媒体/纹理取样器1554a-n。第二子核集1560a-n中的每一个子核至少包括第二执行单元集1562a-n和取样器1564a-n。在一个实施例中,每一个子核1550a-n、1560a-n共享共享的资源集1570a-n。在一个实施例中,共享的资源包括共享的高速缓存存储器和像素操作逻辑。其他共享的资源还可被包括在图形处理器的各种实施例中。

图12解说了线程执行逻辑1600,所述线程执行逻辑包括在图形处理引擎的一个实施例中采用的处理元件的阵列。在一个实施例中,线程执行逻辑1600包括像素着色器1602、线程分派器1604、指令高速缓存1606、包括多个执行单元的可缩放执行单元阵列1608a-n、取样器1610、数据高速缓存1612和数据端口1614。在一个实施例中,所包括的组件经由链接到组件中的每一个的互连结构来互连。线程执行逻辑1600包括通过指令高速缓存1606、数据端口1614、取样器1610和执行单元阵列1608a-n中的一个或多个到存储器(诸如,系统存储器或高速缓存存储器)的一个或多个连接。在一个实施例中,每一个执行单元(例如,1608a)是能够执行多个同时线程并对每一个线程并行地处理多个数据元素的单独矢量处理器。执行单元阵列1608a-n包括任何数量的单独执行单元。

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

执行单元阵列1608a-n中的每一个执行单元对数据元素阵列操作。数据元素的数量是“执行大小”或者用于指令的通道数量。执行通道是用于数据元素访问、掩码和指令内的流控制的执行的逻辑单元。对于特定图形处理器,通道的数量可以独立于物理alu或fpu的数量。执行单元1608a-n支持整数和浮点数据类型。

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

一个或多个内部指令高速缓存(例如,1606)被包括在线程执行逻辑1600中以对用于执行单元的线程指令进行高速缓存。在一个实施例中,一个或多个数据高速缓存(例如,1612)被包括以在线程执行期间对线程数据进行高速缓存。取样器1610被包括以提供对3d操作的纹理取样和对媒体操作的媒体取样。在一个实施例中,取样器1610包括专用纹理或媒体取样功能,用于在向执行单元提供取样的数据之前在取样过程期间处理纹理或媒体数据。

在执行期间,图形和媒体流水线经由线程派生和分派逻辑向线程执行逻辑1600发送线程发起请求。线程执行逻辑1600包括本地线程分派器1604,所述本地线程分派器1604仲裁来自图形和媒体流水线的线程发起请求,并且在一个或多个执行单元1608a-n上实例化所请求的线程。例如,几何流水线(例如,图11的1536)将顶点处理、镶嵌或几何处理线程分派给线程执行逻辑1600。线程分派器1604还可以处理来自正在执行的着色器程序的运行时线程派生请求。

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

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

图13是解说根据实施例的图形处理器执行单元指令格式1700的框图。在一个实施例中,图形处理器执行单元支持具有多种格式的指令的指令集。实线框解说一般包括在执行单元指令中的成分,而虚线包括可选的或者仅包括在指令的子集中的成分。所描述和解说的指令格式是宏指令,体现在它们是被供应至执行单元的指令,这与微操作相反,微操作源自一旦指令经处理而进行的指令解码。

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

对于每一种格式,指令操作码1712定义执行单元将执行的操作。执行单元跨每一个操作数的多个数据元素并行地执行每一条指令。例如,响应于加法指令,执行单元跨表示纹理元素或者图片元素的每一个颜色通道执行同时的加法操作。执行单元默认跨操作数的所有数据通道执行每一条指令。指令控制字段1714启用对某些执行选项(诸如,通道选择(例如,预测)和数据通道次序(例如,混合(swizzle))的控制。对于128位指令1710,执行大小(exec-size)字段1716限制将并行地执行的数据通道的数量。执行大小字段1716对于64位紧凑指令格式1730不可用。

一些执行单元指令具有多达三个操作数,包括两个源操作数src0(源0)1720、src1(源1)1722和一个目的地1718。在一个实施例中,执行单元支持双目的地指令,其中目的地中的一个被暗示。数据操纵指令可以有第三个源操作数(例如,src2(源2)1724),其中指令操作码1712确定源操作数的数量。指令的最末源操作数可以是随该指令传递的立即数(例如,硬编码的)。

在一个实施例中,基于操作码位字段对指令分组以简化操作码解码1740。对于8位操作码,位4、5和6允许执行单元确定操作码的类型。示出的简要的操作码分组是示例性的。在一个实施例中,移动和逻辑操作码分组1742包括数据移动和逻辑指令(例如,mov、cmp)。移动和逻辑分组1742共享5个最高有效位(msb),其中移动指令是ooooxxxxb的形式(例如,oxox)且逻辑指令是ooolxxxxb的形式(例如,0x01)。流控制指令分组1744(例如,call、jmp)包括ooloxxxxb形式(例如,0x20)的指令。杂项指令分组1746包括指令的混合,包括oollxxxxb形式(例如,0x30)的同步指令(例如,wait、send)。并行数学指令分组1748包括olooxxxxb形式(例如,0x40)的逐成分的算术指令(例如,add、mul)。并行数学分组1748跨数据通道并行地执行算术操作。矢量数学分组1750包括ololxxxxb形式(例如,0x50)的算术指令(例如,dp4)。矢量数学分组执行诸如对矢量操作数的点积计算的算术。

图形流水线-图14

图14是包括图形流水线1820、媒体流水线1830、显示引擎1840、线程执行逻辑1850和渲染输出流水线1870的图形处理器的另一个实施例的框图。在一个实施例中,图形处理器是包括一个或多个通用处理核的多核处理系统内的图形处理器。图像处理器通过对一个或多个控制寄存器(未示出)的寄存器写或者经由经环互连1802而发布至图形处理器的命令来控制。环互连1802将图形处理器耦合至其他处理单元(诸如,其他图形处理器或通用处理器)。来自环互连的命令由命令流送器1803解释,命令流送器1803向图形流水线1820或媒体流水线1830的各个组件供应指令。

命令流送器1803指示顶点拾取器1805组件的操作,该操作从存储器读顶点数据并执行由命令流送器1803提供的顶点处理命令。顶点拾取器1805向顶点着色器1807提供顶点数据,该顶点着色器1807执行对每一个顶点的坐标空间变换和照亮操作。顶点拾取器1805和顶点着色器1807通过经由线程分派器1831将执行线程分派给执行单元1852a、1852b来执行顶点处理指令。

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

在一个实施例中,图形流水线1820包括用于执行3d对象的硬件加速的镶嵌的镶嵌组件。可编程壳着色器1811配置镶嵌操作。可编程域着色器1817提供镶嵌输出的后端评估。镶嵌器1813在壳着色器1811的指示下操作,并包含用于基于作为输入提供给图形流水线1820的粗糙几何模型而生成详细几何对象集的专用逻辑。如果未使用镶嵌,则可以绕过镶嵌组件1811、1813、1817。

完整的几何对象可以由几何着色器1819经由一个或多个分派给执行单元1852a、1852b的线程来处理,或者可以直接进行到剪切器1829。几何着色器对整个几何对象操作,而不是如图形流水线的先前级中一样对顶点或顶点块操作。如果禁用了镶嵌,则几何着色器1819从顶点着色器1807接收收入。如果禁用镶嵌单元,则几何着色器1819可由几何着色器程序编程以执行几何镶嵌。

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

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

在一个实施例中,渲染输出流水线1870包含将基于顶点的对象转换成它们相关联的基于像素的表示的光栅化器和深度测试组件1873。在一个实施例中,光栅化器逻辑包括用于执行固定功能三角形和线光栅化的窗口器/掩码器。在一个实施例中,相关联的渲染和深度缓冲器高速缓存1878、1879也是可用的。像素操作组件1877对数据执行基于像素的操作,然而在一些实例中,与2d操作相关联的像素操作(例如,利用混合的位块图像传送)由2d引擎1841执行,或者在显示时间由显示控制器1843使用重叠显示平面替代。在一个实施例中,共享的l3高速缓存1875对所有图形组件可用,从而允许无需使用主系统存储器来进行数据的共享。

图形处理器媒体流水线1830包括媒体引擎1837和视频前端1834。在一个实施例中,视频前端1834从命令流送器1803接收流水线命令。然而,在一个实施例中,媒体流水线1830包括分开的命令流送器。视频前端1834在将命令发送到媒体引擎1837之前处理媒体命令。在一个实施例中,媒体引擎1837包括线程派生功能,用于派生线程以经由线程分派器1831分派到线程执行逻辑1850。

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

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

图形流水线编程-图15a-b

图15a是解说根据实施例的图形处理器命令格式的框图,并且图15b是解说根据实施例的图形处理器命令序列的框图。图15a中的实线框解说一般被包括在图形命令中的成分,而虚线包括可选的或者仅包括在图形命令的子集中的成分。图15a的示例性图形处理器命令格式1900包括用于标识命令的目标客户端1902、命令操作代码(操作码opcode)1904和命令的相关数据1906的数据字段。一些命令中还包括子操作码1905和命令大小1980。

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

图15b中的流程图示出了样本命令序列1910。在一个实施例中,以图形处理器的实施例为特征的数据处理系统的软件或固件使用所示出的命令序列的一版本来设置、执行和终止图形操作集。出于示例性的目的示出并描述了样本命令序列,然而实施例不限于这些命令或这个命令序列。此外,命令可作为命令序列中的批量命令而发布,使得图形处理器将以至少部分并发的方式来处理命令的序列。

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

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

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

返回缓冲器状态命令1916用来配置返回缓冲器集供相应的流水线来写数据。一些流水线操作要求对操作在处理期间将中间数据写入其中的一个或多个返回缓冲器的分配、选择或配置。图形处理器还使用一个或多个返回缓冲器来存储输出数据并执行跨线程通信。返回缓冲器状态命令1916包括选择将用于流水线操作集的返回缓冲器的大小和数量。

命令序列中其余的命令基于操作的活跃流水线而不同。基于流水线确定1920,命令序列定制到以3d流水线状态1930开始的3d流水线1922或以媒体流水线状态1940开始的媒体流水线1924。

用于3d流水线状态1930的命令包括用于以下各项的状态设置命令:顶点缓冲器状态、顶点元素状态、常量颜色状态、深度缓冲器状态和将在3d图元命令被处理之前配置的其他状态变量。这些命令的值至少部分地基于所使用的特定3dapi而确定。如果流水线元件将不被使用,则3d流水线状态1930命令还能够选择性地禁用或者绕过那些流水线元件。

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

3d流水线1922经由执行1934命令或事件而触发。在一个实施例中,寄存器写触发命令执行。在一个实施例中,执行是经由命令序列中的“去(go)”或者“踢(kick)”命令而触发的。在一个实施例中,命令执行是使用流水线同步命令通过图形流水线对命令序列进行转储清除来触发的。3d流水线将执行对3d图元的几何处理。一旦操作完成,所产生的几何对象被光栅化,并且像素引擎对所产生的像素上色。也可包括用于控制像素着色和像素后端操作的额外命令用于那些操作。

样本命令序列1910在执行媒体操作时遵循媒体流水线924路径。一般而言,对媒体流水线的编程的具体使用和方式取决于将要执行的媒体或计算操作。在媒体解码期间,具体的媒体解码操作可卸载到媒体流水线。还可以绕过媒体流水线,并且媒体解码可以使用由一个或多个通用处理核提供的资源全部或者部分地执行。在一个实施例中,媒体流水线还包括用于通用图形处理器单元(gpgpu)的元件,其中图形处理器用来使用不显式地与图形图元的渲染相关的计算性着色器程序来执行simd矢量操作。

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

媒体对象命令1942供应指向供由媒体流水线处理额媒体对象的指针。媒体对象包括包含将要处理的视频数据的存储器缓冲器。在一个实施例中,在发布媒体对象命令1942之前,所有的媒体流水线状态必须是有效的。一旦配置了流水线状态,并且媒体对象命令1942排定队列,媒体流水线1924就经由执行1944命令或等效执行事件(例如,寄存器写)而触发。随后,来自媒体流水线1924的输出可由经3d流水线1922或媒体流水线1924提供的操作进行后处理。在一个实施例中,gpgpu操作以与媒体操作类似的方式来配置和执行。

图形软件架构-图16

图16解说根据实施例的用于数据处理系统的示例性图形软件架构。软件架构包括3d图形应用2010、操作系统2020和至少一个处理器2030。处理器2030包括图形处理器2032和一个或多个通用处理器核2034。图形应用2010和操作系统2020各自都在数据处理器系统的系统存储器2050中执行。

在一个实施例中,3d图形应用2010包含一个或多个包括着色器指令2012的着色器程序。着色器语言指令可以是高级着色器语言,诸如,高级着色器语言(hlsl)或者opengl着色器语言(glsl)。应用还包括适于由通用处理器核2034执行的机器语言中的可执行指令2014。应用还包括由顶点数据定义的图形对象2016。

操作系统2020可以是来自微软公司的操作系统、类unix操作系统或使用linux内核的变体的开源类unix操作系统。当使用direct3dapi时,操作系统2020使用前端着色器编译器2024以将任何hlsl中的着色器指令2012编译成较低级着色器语言。编译可以是即时(just-in-time)编译或者应用可以执行共享预编译。在一个实施例中,高级着色器在3d图形应用2010的编译期间被编译成低级着色器。

用户模式图形驱动器2026可包含用于将着色器指令2012转换成硬件特定的表示的后端着色器编译器2027。当使用openglapi时,glsl高级语言中的着色器指令2012被传递给用户模式图形驱动器2026供编译。用户模式图形驱动器使用操作系统内核模式功能2028来与内核模式图形驱动器2029通信。内核模式图形驱动器2029与图形处理器2032通信以分派命令和指令。

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

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

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

附加注释和示例:

示例1可包括一种用于在处理器中执行指令的方法,所述方法包括:确定第一操作条件集,在所述第一操作条件集中,将对第一逻辑电路集供电以供指令的执行以产生正确的输出;以及确定第二操作条件集,在所述第二操作条件集中,将对第二逻辑电路集供电以供所述指令的执行以产生正确的输出,其中所述第二逻辑电路集是所述第一集的真子集,并且其中所述指令的执行当在所述第二操作条件集下执行时比当在所述第一操作条件集下执行时要求更少的功率。

示例2可包括示例1的方法,其中所述第一逻辑电路集包括加法器、位移器单元、乘法器、或二补数单元中的一个或多个。

示例3可包括示例1到2中任何一个的方法,还包括:检查所述指令所操作的操作数以确定所述第一操作条件集和所述第二操作条件集中的哪一个优先。

示例4可包括示例1到3中任何一个的方法,其中所述指令将两个浮点数相加。

示例5可包括示例1到4中任何一个的方法,其中所述指令将两个浮点数相乘。

示例6可包括示例1到5中任何一个的方法,其中所述指令将两个浮点数相比较。

示例7可包括示例1到6中任何一个的方法,其中所述指令执行融合的乘-加指令。

示例8可包括示例1到7中任何一个的方法,其中确定所述第二操作条件集包括:检查所述操作数以判定所述操作数中的一个或多个是否是零、无穷、反常值、单位值或者非有效数。

示例9可包括示例1到8中任何一个的方法,其中判定是否在所述指令执行之后提供了正确的输出是参考所述指令的已知标准来判定的。

示例10可包括示例1到9中任何一个的方法,其中确定所述第二操作条件集包括:比较至少两个操作数的幅度;以及如果幅度相差大于预定的量,则在所述第二操作条件集下执行所述指令。

示例11可包括示例1到10中任何一个的方法,其中确定所述第二操作条件集包括:考虑舍入条件。

示例12可包括一种用于执行指令的处理器,所述处理器包括:逻辑,该逻辑至少部分地实现在固定功能硬件中,用于:确定第一操作条件集,在所述第一操作条件集中,将对第一逻辑电路集供电以供指令的执行以产生正确的输出;以及确定第二操作条件集,在所述第二操作条件集中,将对第二逻辑电路集供电以供所述指令的执行以产生正确的输出,其中所述第二逻辑电路集将是所述第一集的真子集,并且其中所述指令的执行当在所述第二操作条件集下执行时比当在所述第一操作条件集下执行时要求更少的功率。

示例13可包括示例12的处理器,其中所述第一逻辑电路集包括加法器、位移器单元、乘法器、或二补数单元中的一个或多个。

示例14可包括示例12到13中任何一个的处理器,还包括至少部分地实现在固定功能硬件中以用于以下操作的逻辑:检查所述指令将操作的操作数以确定所述第一操作条件集和所述第二操作条件集中的哪一个优先。

示例15可包括示例12到14中任何一个的处理器,其中所述逻辑用于准许两个浮点数相加。

示例16可包括示例12到15中任何一个的处理器,其中所述逻辑用于准许两个浮点数相乘。

示例17可包括示例12到16中任何一个的处理器,其中所述逻辑用于准许两个浮点数相比较。

示例18可包括示例12到17中任何一个的处理器,其中所述逻辑用于准许融合的乘-加指令的执行。

示例19可包括示例12到18中任何一个的处理器,其中所述逻辑用于:检查操作数以判定所述操作数中的一个或多个是否是零、无穷、反常值、单位值或者非有效数;以及至少部分地基于判定所述操作数中的一个或多个是否是零、无穷、反常值、单位值或者非有效数而确定哪一个操作条件集优先。

示例20可包括一种图形处理系统,所述图形处理系统包括至少一个着色器单元、至少一个取样器、和多个执行单元,所述执行单元中的至少一个包括至少部分地实现在固定功能硬件中的逻辑,所述逻辑用于:确定第一操作条件集,在所述第一操作条件集中,将对第一逻辑电路集供电以供指令的执行以产生正确的输出;以及确定第二操作条件集,在所述第二操作条件集中,将对第二逻辑电路集供电以供所述指令的执行以产生正确的输出,其中所述第二逻辑电路集将是所述第一集的真子集,并且其中所述指令的执行当在所述第二操作条件集下执行时比当在所述第一操作条件集下执行时要求更少的功率。

示例21可包括示例20的图形处理器系统,其中所述第一逻辑电路集包括加法器、位移器单元、乘法器、或二补数单元中的一个或多个。

示例22可包括示例20到21中任何一个的图形处理系统,还包括至少部分地实现在固定功能硬件中以执行以下操作的逻辑:检查所述指令将操作的操作数以确定所述第一操作条件集和所述第二操作条件集中的哪一个优先。

示例23可包括示例20到22中任何一个的图形处理系统,其中所述逻辑用于准许以下一者或多者:两个浮点数相加;两个浮点数相乘;两个浮点数相比较;或三个浮点数的融合的乘-加;。

示例24可包括示例20到23中任何一个的图形处理系统,其中所述逻辑用于检查操作数以判定所述操作数中的一个或多个是否是零、无穷、反常值、单位值或者非有效数;以及至少部分地基于判定所述操作数中的一个或多个是否是零、无穷、反常值、单位值或者非有效数而确定哪一个操作条件集优先。

示例25可包括示例20到24中任何一个的图形处理系统,其中所述逻辑用于:比较至少两个操作数的幅度;以及如果幅度相差大于预定的量,则在所述第二操作条件集下执行所述指令。

示例26可包括一种用于执行指令的处理器,所述处理器包括:用于确定第一操作条件集的装置,在所述第一操作条件集中,将对第一逻辑电路集供电以供指令的执行以产生正确的输出;以及用于确定第二操作条件集的装置,在所述第二操作条件集中,将对第二逻辑电路集供电以供所述指令的执行以产生正确的输出,其中所述第二逻辑电路集是所述第一集的真子集,并且其中所述指令的执行当在所述第二操作条件集下执行时比当在所述第一操作条件集下执行时要求更少的功率。

示例27可包括示例26的处理器,还包括:用于准许两个浮点数相加的装置。

示例28可包括示例26到27中任何一个的处理器,还包括:用于准许两个浮点数相乘的装置。

示例29可包括示例26到28中任何一个的处理器,还包括:用于准许两个浮点数相比较的装置。

示例30可包括示例26到29中任何一个的处理器,还包括:用于准许融合的乘-加指令的执行的装置。

示例31可包括示例26到30中任何一个的处理器,其中所述第一逻辑电路集包括加法器、位移器单元、乘法器、或二补数单元中的一个或多个。

示例32可包括示例26到31中任何一个的处理器,还包括:用于检查所述指令所操作的操作数以确定所述第一操作条件集和所述第二操作条件集中的哪一个优先的装置。

示例33可包括示例27到32中任何一个的处理器,还包括:用于检查操作数以判定所述操作数中的一个或多个是否是零、无穷、反常值、单位值或者非有效数的装置;以及用于至少部分地基于判定所述操作数中的一个或多个是否是零、无穷、反常值、单位值或者非有效数的判断而确定哪一个操作条件集优先的装置。

示例34可包括用于当执行指令时降低处理器中的功率使用的方法,所述包括:确定一般用在所述指令的执行中的第一逻辑电路集;确定将在特定情况下用于所述指令的执行中的第二逻辑电路集,其中所述第二集将比所述第一集小;以及检查操作数以确定需要哪一个电路集。

示例35可包括示例34的的方法,其中所述特定情况涉及等于零或一的操作数。

示例36可包括示例34到35中任何一个的方法,其中所述特定情况涉及确定所述操作数的幅度。

示例37可包括示例34到36中任何一个的方法,其中在使用所述第二逻辑电路集来执行的指令的执行期间消耗比当使用所述第一逻辑电路集来执行时由相同指令消耗的功率更少的功率。

示例38可包括示例34到37中任何一个的方法,其中所述指令取至少一个浮点数作为操作数。

示例39可包括示例34到38中任何一个的方法,其中所述指令将两个数相乘。

示例40可包括示例34到39中任何一个的方法,其中所述指令将两个数相比较。

示例41可包括示例34到40中任何一个的方法,其中所述指令执行融合的乘-加操作。

示例42可包括示例34到41中任何一个的方法,其中所述数中的至少一个是浮点数。

示例43可包括一种用于在处理器中执行指令的方法,所述方法包括:确定第一操作数特性集,在第一操作数特性集中,将对第一逻辑电路集供电以供指令的执行以产生正确的输出;以及确定第二操作数特性集,在所述第二操作数特性集中,将对第二逻辑电路集供电以供所述指令的执行以产生正确的输出,其中所述第二逻辑电路集是所述第一集的真子集,并且其中指令的执行当在所述第二操作数特性集下执行时比当在所述第一操作数特性集下执行时要求更少的功率。

示例44可包括示例43的的方法,其中所述第二操作数特性集包括:一个操作数是零或反常值。

示例45可包括示例43到44中任何一个的方法,其中所述第二操作数特性集包括:一个操作数是无穷。

示例46可包括示例43到45中任何一个的方法,其中所述第二操作数特性集包括:一个操作数是非数。

示例47可包括示例43到46中任何一个的方法,其中所述第二操作数特性集包括:至少有两个操作数,其中一个比另一个在至少大24个二进制数量级。

示例48可包括示例43到47中任何一个的方法,其中所述第二操作数特性集包括:至少有两个操作数,其中一个比另一个至少大25个二进制数量级。

示例49可包括示例43到48中任何一个的方法,其中至少有三个操作数,其中两个操作数当相乘时产生比第三个操作数至少大50个二进制数量级的数。

示例50可包括示例43到49中任何一个的方法,其中至少有三个操作数,其中两个操作数当相乘时产生比第三个操作数至少大48个二进制数量级的数。

示例51可包括至少一种计算机可读存储介质,所述计算机可读介质包括一条或多条指令,所述指令当在计算设备上执行时导致所述计算设备:确定第一操作条件集,在所述第一操作条件集中,将对第一逻辑电路集供电以供指令的执行以产生正确的输出;以及确定第二操作条件集,在所述第二操作条件集中,将对第二逻辑电路集供电以供所述指令的执行以产生正确的输出,其中所述第二逻辑电路集将是所述第一集的真子集,且其中所述指令的执行当在所述第二操作条件集下执行时比当在所述第一操作条件集下执行时要求更少的功率。

示例52可包括示例51的至少一种计算机可读存储介质,其中所述指令当执行时导致计算系统实现加法器、位移器单元、乘法器、或二补数单元中的一个或多个。

示例53可包括示例51到52中任何一个的至少一种计算机可读存储介质,其中所述指令当执行时导致计算系统:检查用于产生正确输出的所述指令将操作的操作数以确定所述第一操作条件集和所述第二操作条件集中的哪一个优先。

示例54可包括示例51到53中任何一个的至少一种计算机可读存储介质,其中用于产生正确输出的所述指令用于将两个浮点数相加。

示例55可包括示例51到54中任何一个的至少一种计算机可读存储介质,其中用于产生正确输出的所述指令用于将两个浮点数相乘。

示例56可包括示例51到55中任何一个的至少一种计算机可读存储介质,其中用于产生正确输出的所述指令用于将两个浮点数相比较。

示例57可包括示例51到56中任何一个的至少一种计算机可读存储介质,其中所述指令当执行时导致计算系统执行融合的乘-加指令。

示例58可包括示例51到57中任何一个的至少一种计算机可读存储介质,其中确定所述第二操作条件集包括:检查所述操作数以判定所述操作数中的一个或多个是否是零、无穷、反常值、单位值或者非有效数。

示例59可包括示例51到58中任何一个的至少一种计算机可读存储介质,其中确定是否在所述指令执行之后提供了正确的输出是参考所述指令的已知标准来确定的。

示例60包括示例51到59中任何一个的至少一种计算机可读存储介质,其中确定所述第二操作条件集包括:比较至少两个操作数的幅度;以及如果幅度相差大于预定的量,则在所述第二操作条件集下执行所述指令。

示例61可包括示例51到60中任何一个的至少一种计算机可读存储介质,其中确定所述第二操作条件集包括:考虑舍入条件。

本文所述的技术和结构可因此降低图形处理器中的功耗,并且也适用于其他类型的处理器。结果,在其中使用这些技术和结构的图形处理器和其他类型的处理器提供相对更高的能量效率。

在一些实施例中,提供给执行给定指令不需要的硬件资源的功率可以不是零,但仍少于通常在其操作中所使用的,这可降低功耗。

各种实施例和各种模块可以使用硬件元件、软件元件或这两者的组合来实现。硬件元件的示例可包括处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、电感器等)、集成电路、专用集成电路(asic)、可编程逻辑器件(pld)、数字信号处理器(dsp)、现场可编程门阵列(fpga)、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等。软件的示例可包括软件组件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(api)、指令集、计算代码、计算机代码、代码段、计算机代码段、文字、值、符号、或上述各项的任何组合。确定实施例是否使用硬件元件和/或软件元件来实现可以根据任何数量的因素而变化,这些因素诸如,所需的计算速率、功率级、热熔线、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度以及其它设计或性能约束。

尽管在本文中呈现了实施例的硬件和软件实现两者,但可利用硬件实现来通过使用减少数量的指令来提供功率节省。

可以给定示例大小/模型/值/范围,但实施例不限于与之相同。随着制造技术随时间成熟,期望可以制造更小尺寸和更小可触元件尺寸的设备。此外,出于简化说明和讨论的目的并且为了不使实施例的某些方面含糊,可能在附图中示出了或未示出公知的电气或流体组件。此外,为了避免使实施例含糊鉴于以下事实,能以框图形式示出各布置:相对于此类框图布置的实现方式的细节高度依赖于将在其中实现实施例的平台,即,此类细节应当很好地落在本领域技术人员的认知范围内。在阐述了具体细节(例如,电路)以描述示例实施例的情况下,对本领域技术人员应显而易见的是,可在不需要这些具体细节或其变体的情况下来实践实施例。因此,描述应被认为是说明性的而不是限制性的。

本文术语“耦合的”可以用来指所讨论的组件之间任何类型的关系(直接或间接的),并可以应用于电气、机械、流体、光学、电磁、电机或其它连接。此外,在本文中可以使用术语“第一”、“第二”等仅用来便于讨论,并且不传递任何具体的时域或时间顺序的显著性,除非另外指明。此外,应理解,不定冠词“一”或“一个”承载“一个或多个”或“至少一个”的意思。

本领域技术人员从前述描述将理解,实施例的宽泛技术可以用多种形式实现。因此,尽管实施例是结合其具体示例描述的,但是实施例的真实范围不应如此限制,因为在学习了附图、说明书和所附权利要求书之后,其它修改对本领域技术人员将变得显而易见。

权利要求书(按照条约第19条的修改)

1.一种用于在处理器中执行指令的方法,所述方法包括:

确定第一操作条件集,在所述第一操作条件集中,将对第一逻辑电路集供电以供指令的执行以产生正确的输出;以及

确定第二操作条件集,在所述第二操作条件集中,将对第二逻辑电路集供电以供所述指令的执行以产生正确的输出,其中所述第二逻辑电路集是所述第一逻辑电路集的真子集,并且其中所述指令的执行当在所述第二操作条件集下执行时比当在所述第一操作条件集下执行时要求更少的功率。

2.如权利要求1所述的方法,其特征在于,所述第一逻辑电路集包括加法器、位移器单元、乘法器、或二补数单元中的一个或多个。

3.如权利要求1或2中任一项所述的方法,其特征在于,还包括:检查所述指令所操作的操作数以确定所述第一条件集和所述第二操作条件集中的哪一个优先。

4.如权利要求1所述的方法,其特征在于,所述指令将两个浮点数相加。

5.如权利要求1所述的方法,其特征在于,所述指令将两个浮点数相乘。

6.如权利要求1所述的方法,其特征在于,所述指令将两个浮点数相比较。

7.如权利要求1所述的方法,其特征在于,所述指令执行融合的乘-加指令。

8.如权利要求1或4-7中任一项所述的方法,其特征在于,确定所述第二操作条件集包括:检查所述操作数以判定所述操作数中的一个或多个是否是零、无穷、反常值、单位值或者非有效数。

9.如权利要求1或4-7中任一项所述的方法,其特征在于,判定是否在所述指令执行之后提供了正确的输出是参考所述指令的已知标准来判定的。

10.如权利要求1所述的方法,其特征在于,确定所述第二操作条件集包括:比较至少两个操作数的幅度;以及如果所述幅度相差大于预定量,则在所述第二操作条件集下执行所述指令。

11.如权利要求10所述的方法,其特征在于,确定所述第二操作条件集包括:考虑舍入条件。

12.一种用于执行指令的处理器,所述处理器包括:

逻辑,所述逻辑至少部分地实现在固定功能硬件中,用于:

确定第一操作条件集,在所述第一操作条件集中,对第一逻辑电路集供电以供指令的执行以产生正确的输出;以及

确定第二操作条件集,在所述第二操作条件集中,对第二逻辑电路集供电以供所述指令的执行以产生正确的输出,其中所述第二逻辑电路集是所述第一逻辑电路集的真子集,并且其中所述指令的执行当在所述第二操作条件集下执行时比当在所述第一操作条件集下执行时要求更少的功率。

13.如权利要求12所述的处理器,其特征在于,所述第一逻辑电路集包括加法器、位移器单元、乘法器、或二补数单元中的一个或多个。

14.如权利要求12-13中任一项所述的处理器,其特征在于,还包括至少部分地实现在固定功能硬件中以执行以下操作的逻辑:检查所述指令将操作的操作数以确定所述第一操作条件集和所述第二操作条件集中的哪一个优先。

15.如权利要求12所述的处理器,其特征在于,所述逻辑用于准许两个浮点数相加。

16.如权利要求12所述的处理器,其特征在于,所述逻辑用于准许两个浮点数相乘。

17.如权利要求12所述的处理器,其特征在于,所述逻辑用于准许两个浮点数相比较。

18.如权利要求12所述的处理器,其特征在于,所述逻辑用于准许融合的乘-加指令的执行。

19.如权利要求12或15-18中任一项所述的处理器,其特征在于,所述逻辑用于:

检查操作数以判定所述操作数中的一个或多个是否是零、无穷、反常值、单位值或者非有效数;以及

至少部分地基于判定所述操作数中的一个或多个是否是零、无穷、反常值、单位值或者非有效数而确定哪一个操作条件集优先。

20.一种图形处理系统,所述图形处理系统包括:

至少一个着色器单元;

至少一个取样器;以及

多个执行单元,所述执行单元中的至少一个包括至少部分地实现在固定功能硬件中的逻辑,所述逻辑用于:

确定第一操作条件集,在所述第一操作条件集中,将对第一逻辑电路集供电以供指令的执行以产生正确的输出;以及

确定第二操作条件集,在所述第二操作条件集中,将对第二逻辑电路集供电以供所述指令的执行以产生正确的输出,其中所述第二逻辑电路集是所述第一逻辑电路集的真子集,并且其中所述指令的执行当在所述第二操作条件集下执行时比当在所述第一操作条件集下执行时要求更少的功率。

21.如权利要求20所述的图形处理系统,其特征在于,所述第一逻辑电路集包括加法器、位移器单元、乘法器、或二补数单元中的一个或多个。

22.如权利要求20-21中任一项所述的图形处理系统,其特征在于,还包括至少部分地实现在固定功能硬件中以执行以下操作的逻辑:检查所述指令将操作的操作数以确定所述第一操作条件集和所述第二操作条件集中的哪一个优先。

23.如权利要求20所述的图形处理系统,其特征在于,所述逻辑用于准许以下一者或多者:两个浮点数相加;两个浮点数相乘;两个浮点数相比较;或三个浮点数的融合的乘-加。

24.如权利要求22所述的图形处理系统,其特征在于,所述逻辑用于:

检查操作数以判定所述操作数中的一个或多个是否是零、无穷、反常值、单位值或者非有效数;以及

至少部分地基于判定所述操作数的一个或多个是否是零、无穷、反常值、单位值或者非有效数而确定哪一个操作条件集优先。

25.如权利要求20或23-24中任一项所述的图形处理系统,其特征在于,所述逻辑用于:比较至少两个操作数的幅度;以及如果所述幅度相差大于预定的量,则在所述第二操作条件集下执行所述指令。

说明或声明(按照条约第19条的修改)

根据pct条约第19条修改声明

作出修改,通过更明确地陈述“第一集的真子集”是指“第一逻辑电路集”以使权利要求的语言更清楚。此修改的基础可在原始公开的申请的说明书部分的第4页第15-26行以及第39页第9行中找到。

在权利要求书中

在所附权利要求部分的替换页第48-51页中请参见并入题述申请的以下修改。在权利要求1、第6行中,“逻辑电路”进一步加在“第一集的真子集”后。在权利要求12、第7行中,“逻辑电路”进一步加在“第一集的真子集”后。在权利要求20、第10行中,“逻辑电路”进一步加在“第一集的真子集”后。

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