掌桥专利:专业的专利平台
掌桥专利
首页

增强的低精度二进制浮点格式化

文献发布时间:2023-06-19 09:29:07


增强的低精度二进制浮点格式化

背景技术

本发明涉及浮点数格式化。

发明内容

以下呈现了概述以提供对所公开的主题的一个或多个实施例的基本理解。本概述不旨在标识关键或重要元素,或描述特定实施例的任何范围或权利要求的任何范围。其唯一目的是以简化形式呈现概念,作为稍后呈现的更详细描述的序言。在本文描述的一个或多个实施例中,提供了可以有助于形成包括螺旋导电结构的电子器件的系统、器件、结构、计算机实现的方法、装置和/或计算机程序产品。

根据实施例,一种系统可以包括存储计算机可执行组件的存储器;以及处理器,其可操作地耦合到存储器,执行计算机可执行组件。计算机可执行组件可包括计算器组件,该计算器组件便于结合应用的执行由处理器根据定义的浮点数格式对二进制浮点数进行操作和计算,其中定义的浮点数格式利用指数字段中的六位。

另一实施例涉及一种计算机实现的方法,该方法可以包括:由操作地耦合到处理器的系统生成定义的浮点数格式的相应数字字段,其中所述相应数字字段包括符号字段、指数字段和尾数字段,其中所述定义的浮点数格式利用指数字段中的六位。该方法还可以包括由系统结合应用程序的执行根据所定义的浮点数格式来计算二进制浮点数。

另一实施例涉及一种促进计算浮点数的计算机程序产品,所述计算机程序产品包括其中包含有程序指令的计算机可读存储媒体。所述程序指令可由处理器执行以使所述处理器以定义的浮点数格式创建相应字段,其中所述相应字段包括符号字段、指数字段和小数字段,其中所述定义的浮点数格式包含用于指数字段中的指数的六位。所述程序指令还可由所述处理器执行以致使所述处理器结合应用程序的利用根据所述所定义的浮点数格式计算所述浮点数。

又一实施例涉及一种计算机实现的方法,该方法可以包括由操作地耦合到处理器的系统生成定义的浮点数格式的相应数字字段,其中所述相应数字字段包括符号字段、指数字段和小数字段。该方法还可以包括由系统结合应用程序的执行根据所定义的浮点数格式计算二进制浮点数,其中所定义的浮点数格式利用二进制码来表示零和正规数,其中所述二进制码与由零组成的指数字段的位的位值相关联。

从以下结合附图阅读的对本发明的说明性实施例的详细描述中,这些和其它特征将变得显而易见。

附图说明

图1说明根据所公开的主题的各种方面和实施例的可用以使用增强浮点数格式对浮点数进行操作、产生浮点数和/或计算浮点数的实例非限制性系统的框图。

图2示出根据所所公开主题的各种方面和实施例的增强浮点数格式的示例增强的位结构的框图。

图3呈现根据所所公开主题的的各种方面和实施例的实例数线的图,所述数线可说明当以浮点数格式利用非正规数时非正规数和正规数沿着数线的位置。

图4示出了根据所公开主题的各个方面和实施例的与语音识别相关的性能结果的示例图的示图。

图5示出了根据所公开主题的各个方面和实施例的与图像识别相关的性能结果的示例图的示图。

图6示出了根据所公开主题的各个方面和实施例的与Shakespeare文本生成有关的性能结果的示例图的示图。

图7示出根据所公开主题的各种方面和实施例的实例非限制性系统的框图,所述系统可针对计算的第一部分使用较低精度计算引擎以使用增强浮点数格式产生或计算浮点数,且可针对计算的第二部分使用较高精度计算引擎。

图8示出了根据所公开主题的各个方面和实施例的用于使用增强浮点数格式对数据执行操作(包括计算)的示例性非限制性方法的流程图。

图9示出了根据所公开的主题的各个方面和实施例的用于使用增强浮点数格式对数据执行操作(包括计算)的另一示例、非限制性方法的流程图。

图10示出了其中可促进此处所描述的一个或多个实施例的示例、非限制性操作环境的框图。

具体实施方式

以下详细描述仅是说明性的,并且不旨在限制实施例和/或实施例的应用或使用。此外,并不意图受前面的背景技术或发明内容部分或具体实施方式部分中呈现的任何明示或暗示的信息的约束。

现在参考附图描述一个或多个实施例,其中相同的附图标记始终用于表示相同的元件。在以下描述中,出于解释的目的,阐述了许多具体细节以便提供对一个或多个实施例的更透彻理解。然而,在各种情况下,显然可在没有这些特定细节的情况下实践所述一个或一个以上实施例。

某些类型的应用(例如,深度学习应用)可能具有可能对资源要求较高(例如,可能对计算要求较高)的工作负荷。例如,即使在使用包括多个图形处理单元(GPU)的系统时,训练深度网络也会花费大量时间(例如,多天或数周)。用于一些深度学习基准的训练算法可能花费大量时间(例如,数周)来收敛于包括多个GPU的系统。

专用加速器可以用于显著地加速这些类型的应用。这种可以提供用于浮点计算的相对大的吞吐量密度的专用加速器,在面积(例如,吞吐量/毫米2(MM2)和功率(吞吐量/瓦特)方面,对于未来的深度学习系统可能是非常有用的。

双(例如,64位)精度和单(例如,32位)精度表示的使用对于认知计算工作负荷可能是不必要的和低效的。对于诸如认知计算工作负荷的繁重计算工作负荷,一种改善面积和功耗度量的方式可以是使用较小位宽浮点表示来执行大多数计算。例如,可使用单精度格式来执行诸如对舍入误差相对敏感的计算等计算的相对较小部分,而可使用较低精度(例如,16位)格式来执行大多数计算(例如,对舍入误差基本不敏感的计算)。在单精度格式与较低精度格式之间的计算的这种划分可允许使用期望数量(例如,许多)的较低精度引擎(例如,使用较低精度格式)和相对较小数量的较高精度引擎(例如,使用较高(例如,单)精度格式)。

可以构造较低精度(例如16位)格式的一种方式是具有1/5/10格式(例如IEEE 754半精度(1/5/10)格式),其可以具有单符号位、5位指数和10位尾数,其可以用作数据交换格式。然而,1/5/10格式可能不适合具有大量计算的应用,特别是深度神经网络的训练,因为该格式可能具有相对有限的动态范围。当使用单精度格式执行更关键的计算(例如,对舍入误差敏感的计算)并且使用1/5/10格式执行大多数计算时,与多个基准应用的基线相比,训练网络的质量显著下降。例如,当在训练期间使用1/5/10格式用于大多数计算时,对于沃森自然语言训练,准确度降到低于60%的适合性基准(例如,指示准确度是不适合的),并且对于AlexNet图像分类训练,计算根本不收敛。

然而,为了提高吞吐量密度,可能希望使用较低精度(例如,16位)的浮点运算。然而,为了使用较低精度浮点数格式是可行的(例如,在具有大量计算的应用中,诸如深度神经网络的训练和其他深度学习训练),可能期望具有较低精度浮点数格式,其允许与计算密集型应用相关联的程序和算法的足够快的收敛,以及用于计算密集型应用的足够小的错误率,诸如例如机器训练和深度学习训练任务。

本文描述的各种实施例涉及使用增强浮点数格式(例如,增强的较低精度浮点数格式)对浮点数(例如,二进制浮点数)进行操作、生成和计算。所述增强浮点数格式可足以用于广泛范围的机器训练和深度学习训练任务,且可允许融合乘法加法16位浮点单元(融合乘法加法16位FPU)的面积和功率有效实施方案。增强浮点数格式(例如,增强的低精度(例如,16位)浮点数格式)可具有1/6/9格式,其可具有单符号位、6位指数和9位尾数,其可用作算数计算格式以及数据交换格式。与1/5/10格式相比,增强浮点数格式可多一个指数位,且小数的可少一位。增强浮点数格式的指数的六位具有额外(例如,第6)指数位,可以提供额外的指数范围,该范围是期望的,以便使机器训练和深度学习训练算法足够快速地收敛,并且增强浮点数格式还可以具有期望的低错误率,用于计算密集型应用,诸如机器训练和深度学习应用以及相关任务。

增强浮点数格式还可采用最低二进制码的指定定义(例如,指数字段为全零的数据点)。其它浮点数格式(例如,较低精度浮点数格式),例如1/5/10格式,可使用用于次正规数和零的最低二进制码。相反,根据增强浮点数格式中最低二进制码的指定定义,最低二进制码可以用于零和正规数。在增强浮点数格式的指数字段比1/5/10格式宽一位的情况下,增强浮点数格式(例如1/6/9格式)即使在最后一个二进制码中具有正规数的情况下也能比具有次正规数的1/5/10格式更接近0值。对次正规数的硬件支持可相对昂贵,且可添加到典型的融合乘法加法浮点单元(fused-multiply-add floating-point unit)的深度(例如,总门延迟)。通过采用最低二进制码的指定定义,所公开的主题可避免使用次正规数,其可导致所公开的主题在硬件使用和支持方面更有效,且可避免与例如1/5/10格式等其它格式相比,增加到融合乘法加法16位FPU的深度(例如,总门延迟)。

增强浮点数格式还可利用最高二进制码的指定定义(例如,具有指数字段的数据点都是1)。某些其它浮点数格式仅对特殊值使用最高的二进制码,例如非数(NaN)和无穷大(infinity)。相反,在一些实施例中,根据增强浮点数格式中最高二进制的指定定义,最高二进制的期望部分(例如,大部分)可用于有限数,最高二进制的一个数据点可用于特殊值,例如非数和无穷大(例如,合并非数/无穷大)。与诸如1/5/10格式等其它浮点数格式(例如,较低精度浮点数格式)相比,通过利用这种指定的最高二进制码的定义,增强浮点数格式可允许相对较大的数据范围,并可利用相对不复杂的硬件,因为除其它原因之外,增强浮点数格式所采用的逻辑不必区分非数和无穷大值。

在一些实施例中,增强浮点数格式可将零的符号定义为“无关紧要”项,与其它浮点数格式,例如1/5/10格式相比,这可使零符号的处理不那么复杂。例如,像1/5/10格式的其它格式可能具有关于如何获得零的符号的相对复杂的规则。然而,对于许多应用,例如深度学习应用,零的符号无关紧要。在这样的应用中,增强浮点数格式可说明零的符号而不是零散乱,其中在增强浮点数格式中,零的符号可以是“无关紧要”项。例如,当浮点数为零时,可为符号字段生成(例如,通过处理器组件或计算器组件)任意值,以表示零值的符号的项或符号。可产生系统(例如,处理器组件或计算器组件)方便或有效(例如,最方便或最有效)产生的任何任意值或符号并将其插入到符号字段中。这可使得结合增强浮点数格式使用的硬件和逻辑能够相对不复杂,并且与用于其它浮点数格式(例如1/5/10格式)的硬件相比,可使用更少的硬件和硬件资源(和更少的逻辑资源)。

在某些实施例中,增强浮点数格式可将合并的NaN/infinity符号的符号定义为“无关紧要”项,与在其它格式(例如1/5/10格式)中如何处理NaN和无穷大符号相比,这可使合并的NaN/无穷大符号的处理相对不太复杂。例如,某些其它格式可能具有关于如何获得NaN的符号和无穷大的相对复杂的规则,尤其对于加/减和乘加操作。然而,对于许多应用,包括深度学习应用,NaN和无穷大的符号无关紧要。在这种情况下,在增强浮点数格式中,合并的NaN/infinity符号的符号可以是“无关紧要”项。例如,当浮点数是NaN或infinity时,可为符号字段生成(例如,由处理器组件或计算器组件)任意值以表示合并的NaN/infinity符号的项或符号。可以生成对于系统(例如,处理器组件或计算器组件)生成而言方便或高效(例如,最方便或最高效)的任何任意值或符号,并将其插入到与合并的NaN/Infinity符号相关联的符号字段中。这可使结合增强浮点数格式使用的硬件和逻辑能够相对不复杂,并且与用于其它格式(例如1/5/10格式)的硬件相比,可使用更少的硬件和硬件资源(和更少的逻辑资源)。

增强浮点数格式还可采用舍入模式,其比由其它类型的格式,如1/5/10格式,所使用的舍入模式实现起来更简单。例如,增强浮点数格式可使用单个舍入模式(singlerounding mode),其可用于舍入到最近(rounding toward nearest up)。一些其它类型的格式(例如1/5/10格式)可以采用更复杂的舍入模式,例如向上舍入到最近(rounding tonearest up)、向下舍入到最近(rounding to nearest down)、或者舍入到偶数(roundingto even)、舍入到0(rounding towards 0)、舍入到+无穷大(rounding towards+infinity)以及舍入到-无穷大(rounding towards-infinity)。通过增强浮点数格式使用单个且相对较不复杂的舍入模式,例如舍入到最近的向上舍入模式,可以对工作负荷的性能没有影响,或者至少几乎没有影响,包括系统(例如机器训练或深度学习训练)的训练的质量和性能的速度,同时显著减少用于舍入浮点数的硬件和逻辑的量。

现在将参照附图描述所公开的主题的这些和其它方面和实施例。

图1说明根据所公开的主题的各种方面和实施例的可用以使用增强浮点数格式对浮点数(例如,二进制浮点数)进行操作、产生和/或计算浮点数的示例非限制性系统100的框图。系统100的增强浮点数格式可足以用于广泛范围的机器学习或深度学习训练任务,且可允许融合乘法加法16位浮点单元(融合乘法加法16位(FPU))的面积及功率有效实施方案。根据各种实施例,系统100可包括一个或一个以上融合乘法加法16位FPU的一部分或与其相关联。

增强浮点数格式(例如,增强的低精度(例如,16位)浮点数格式)可包含1/6/9浮点数格式,其可具有单符号位、6位指数和9位尾数,其可用作数算计算格式以及数据交换格式。部分地,通过使用六位用于指数(例如,与使用五位用于指数相反),增强浮点数格式可提供额外的指数范围,其可为合乎需要的以便使机器学习算法、深度学习训练算法和/或其它计算密集型算法足够快速地收敛,且增强浮点数格式还可具有合乎需要的用于计算密集型应用(例如,机器训练或深度学习应用)的低错误率。本文更全面地描述增强浮点数格式的其它方面和实施例。

系统100可包括可与数据存储104和计算器组件106相关联的处理器组件102。处理器组件102可与其它组件(例如,数据存储104、计算器组件106、…)协同工作以便于执行系统100的各种功能。处理器组件102可以采用一个或多个处理器、微处理器或控制器,其可以处理数据,诸如与增强浮点数格式相关的信息,对浮点数进行操作、生成和/或计算浮点数,应用(例如,机器学习、深度学习或认知计算应用),机器或系统训练,与数字格式化或计算相关的参数,数据业务流(例如,在组件或设备之间,和/或跨网络),算法(例如,应用相关的算法,增强浮点数格式化算法,浮点数计算算法,数字舍入算法…),协议、策略、接口、工具和/或其他信息,以促进系统100的操作,如本文更完整地公开的,并且控制系统100的组件之间的数据流,控制系统100和与系统100相关联的其他组件或设备(例如,计算机、计算机网络设备、数据源、应用…)之间的数据流。在一些实施例中,处理器组件102可包括一个或一个以上FPU,例如一个或一个以上融合乘法加法16位FPU。

数据存储104可存储数据结构(例如,用户数据、元数据)、代码结构(例如,模块、对象、散列、类、过程)或指令、与增强浮点数格式相关的信息、对浮点数的操作、生成和/或计算浮点数、应用(例如,机器学习、深度学习或认知计算应用)、机器或系统训练、与数字格式化或计算相关的参数、数据业务流、算法(例如,应用相关的算法、增强浮点数格式化算法、浮点数计算算法、数字舍入算法…)、协议、策略、接口、工具和/或其他信息,以促进控制与系统100相关联的操作。在一方面,处理器组件102可在功能上(例如,通过存储器总线或其它总线)耦合到数据存储104以便存储和检索操作所需的信息和/或至少部分地将功能授予计算器组件106和/或系统100的其它组件和/或系统100的基本上任何其它操作方面。

处理器组件102还可(例如,经由总线)与程序存储组件108相关联(例如,通信地和/或功能地连接到该程序存储组件),其中程序存储组件108可包括(例如,可存储)计算器组件106。程序存储组件108可以存储机器可执行(例如,计算机可执行)组件或指令,其可以由处理器组件102访问以便由处理器组件102执行。例如,处理器组件102可访问程序存储组件108中的计算器组件106,并可结合根据增强浮点数格式对数据(例如,二进制浮点数)执行操作的处理器组件102来利用计算器组件106,如本文中更全面地描述的。

例如,处理器组件102和计算器组件106可进行操作(例如,彼此协同操作)以对数据执行操作,包括根据(例如,使用)增强格式组件110的增强浮点数格式(例如,1/6/9浮点数格式)对浮点数(例如,二进制浮点数)进行操作(例如,对其执行数学计算)、生成和/或计算。在一些实施例中,处理器组件102和/或计算器组件106可使用增强格式组件110的增强浮点数格式来操作、生成和/或计算浮点数,以便于机器训练、深度学习训练、认知计算和/或其他计算密集型任务、操作或应用。例如,处理器组件102和/或计算器组件106可使用增强浮点数格式来操作、生成和/或计算浮点数,以便于获得可涉及要结合机器或深度学习训练来解决的问题(例如,认知计算问题)的解决方案的结果。例如,要解决的问题可涉及机器训练、深度学习、认知计算、人工智能、神经网络、和/或其他计算密集型任务、问题、或应用。作为几个非限制性示例,问题可涉及识别或标识图像或视频中的对象(例如,人、地点和/或事物)的图像识别、识别或标识音频内容中的单词和/或语音身份(例如,语音、与音频一起的广播、歌曲和/或与音频一起的节目)的语音识别、或识别或标识文本内容(例如,书、手稿、电子邮件或文档集,…)中的文本数据(例如,单词、字母数字字符)的文本识别。

处理器组件102和计算器组件106可与诸如应用程序112等一个或多个应用程序(例如,机器训练或深度学习应用程序)相关联,以对与应用程序112相关联的数据执行操作。例如,处理器组件102和计算器组件106可从应用程序112接收数据,可至少部分地基于该数据、根据增强型浮点数格式来生成或确定(例如,计算)数值结果(例如,二进制浮点数),并且可将数值结果提供给应用程序112和/或另一期望的目的地。

简要地参照图2(连同图1),图2示出了根据所公开的主题的各个方面和实施例的增强浮点数格式的示例增强位结构200的框图。增强位结构200可包括可表示浮点数(例如,二进制浮点数)的符号的一个数据位的符号字段202。

增强位结构200还可以包括可以与符号字段202相邻的指数(e)字段204。指数字段204可包括可表示浮点数的指数的6位数据。通过采用额外的(例如,第6个)指数位(例如,与1/5/10格式相比),增强浮点数格式可提供增强的(例如,改进的或额外的)指数范围,其可为期望的,以便使机器训练或深度学习训练算法(例如,在半精度(例如,16位)模式中操作的单精度(例如,32位)机器训练或深度学习算法)足够快速地收敛,同时还实现用于计算密集型应用的相对小的错误率,所述计算密集型应用诸如例如机器训练和深度学习训练应用以及相关联的机器训练和深度学习任务。

增强位结构200还可以包括可以与指数字段204相邻的小数(f)字段206。小数字段206可包括可表示浮点数的小数(例如,小数值)的9个数据位。用于增强浮点数格式的小数中的9位足以提供用于机器训练算法、深度学习算法和/或其它计算密集型算法(例如,单精度(例如,32位)机器训练、深度学习或以半精度(例如,16位)模式操作的其它计算密集型算法)的期望的小数精度,即使小数中的9位比1/5/10格式少一位。还应注意,如果在小数中仅存在8位(例如,在小数中8位,指数中7位),则在没有对这种算法的至少一些修改的情况下,小数中8位将不能提供足够的小数精度,以用于机器训练算法或深度学习算法(例如,在半精度模式下操作的单精度机器训练或深度学习算法),如果这种算法修改甚至是可能的话。

数x=(s,e,f)的值可以定义为

value(x)=(-1)

其中[e]可以是有偏指数的值,以及(i.f)可以是二进制尾数或有效数,其中f是小数,而i是隐含位。根据增强浮点数格式,i的值对于所有有限非零数可为1(且对于真零可为0)。在使用有偏指数的增强浮点数格式的情况下,所述偏差可允许指数表示为无符号二进制整数。

表1示出了增强浮点数格式(在此也称为增强1/6/9格式)和1/5/10格式之间的各种不同。

表1

从表1可以看出,使用增强格式组件110的增强浮点数格式,最小可表示的正数是2

关于浮点数,可存在一组二进制码,其中二进制码可以是一组二进制浮点值,其中这组二进制浮点值中的每一个可具有相同的指数。增强浮点数格式可包括64个二进制码。增强浮点数格式的二进制码可包括第一个二进制码和最后一个二进制码。对于第一个(例如,最低)二进制码,指数字段204可为全0(例如,6个位中的每一个为0),且对于最后一个二进制码,指数字段204可为全1(例如,6个位中的每一个为1)。增强格式组件110的增强浮点数格式可对第一个二进制码和最后一个二进制码中的数据点使用各自的指定定义,其中对第一个二进制码和最后一个二进制码中的数据点的这种指定定义可与关于其它格式的第一个和最后一个二进制码的数据点使用的定义不同,例如1/5/10格式。

可以具有非极值指数(例如,不是由全1或全0组成的指数)的其它二进制代码可以用来表示正规数。隐含位可以是1(i=1),这可以导致尾数1.f。指数字段204的指数值可以被导出为[e]=e–bias。如所公开的,增强浮点数格式可不同于1/5/10格式,部分是由于指数字段204中的指数比1/5/10格式宽一位,小数字段206中的小数比1/5/10格式短一位,且增强浮点数格式的偏差可不同于1/5/10格式。

如本文更全面公开的,在浮点数格式(尤其是半精度(例如,16位)浮点数格式)中使用次正规(例如,非正规)数可能效率低下且/或成本相对较高。简要参看图3(连同图1和图2),图3呈现根据所公开的主题的各种方面和实施例的实例数线300的图,其可说明当在浮点数格式中利用非正规数时非正规数和正规数沿着数线的位置。如数线300所示,对于浮点数格式,例如32位(例如1/8/23)浮点数格式,可以是非正规数(非正规)(这里也称为次正规数)的数的第一子集302的范围可以从大于0到2

如本文所公开的,利用增强浮点数格式,最小可表示的正数可以是2

进一步关于最低(例如,第一)二进制码,增强浮点数格式可对最低二进制码的数据点(例如,指数字段全为零的数据点)采用指定的定义。在增强浮点数格式中最低二进制码的指定定义下,处理器组件102和/或计算器组件106可将最低二进制码用于零和正规数,同时消除次正规数。对于0小数,该值可以是零。对于非零小数,该值可以是非零的正规数。关于增强浮点数格式,在表示的最小正数是(2

而且,根据增强浮点数格式,可忽略符号,这可使得硬件实施方案能够比使用其它浮点数格式(例如,1/5/10格式)的其它系统或装置较不复杂且更有效。例如,当处理器组件102和/或计算器组件106生成或计算零结果时,符号位的值可以是未定义的或因实现而异的。举例来说,零可为0x0000或0x8000,其中符号位可表示为“无关紧要”项。当处理器组件102和/或计算器组件106操作、生成或计算非零小数时,该值可以是正数,其中例如隐含位可以是1(i=1),这可以导致尾数1.f,并且其中指数值可以是[e]=e-bias=0-bias。

如所述,增强浮点数格式可将零的符号定义为“无关紧要”项,这可使零符号的处理与其它格式如1/5/10格式相比不太复杂。例如,某些其它浮点数格式,诸如1/5/10格式,可能具有关于如何获得零的符号的相对复杂的规则。然而,对于包括深度学习应用的许多应用,零的符号无关紧要。因此,根据增强浮点数格式,处理器组件102和/或计算器组件106可将零的符号表示为“无关紧要”项。例如,“无关紧要”项可以表示根据增强浮点数格式的定义值,该定义值可以指示零的符号与零的值无关。当浮点数为零时,处理器组件102和/或计算器组件106可在增强浮点数格式的符号字段中生成任何任意值或符号,这对于处理器组件102或计算器组件106生成并插入到符号字段中是方便或有效的(例如,最方便或最有效的)。例如,处理器组件102和/或计算器组件106可生成或便于生成可利用最少量资源(例如,处理或计算资源)或至少可利用比原本将使用的资源少的资源的任意值,以确定并生成用于符号字段的非任意值来表示零值的符号。通过采用增强浮点数格式,包括其对与零值相关联的符号的处理,所公开的主题由此可使得系统100结合增强浮点数格式使用的硬件相对不太复杂,且与用于其它浮点数格式(例如1/5/10格式)的硬件相比,可使用更少的硬件和硬件资源(和更少的逻辑资源)。

而且,与增强浮点数格式相比,某些其它浮点数格式(例如1/5/10格式)将最低二进制码用于次正规(例如,非正规)数和零。如本文所公开的,在增强浮点数格式的指数字段比1/5/10格式宽一位的情况下,即使在最后的二进制码中具有正规数,增强浮点数格式也可以比具有次正规数的1/5/10格式更接近0的值。

对次正规数的硬件支持可能相对昂贵,并且可能增加典型的融合乘法加法FPU的深度(例如,总门延迟),并且对次正规数的进一步支持可能不期望地增加逻辑复杂度。通过对最低二进制码采用这种指定定义,所公开的主题可避免使用次正规数,与诸如1/5/10格式等其它浮点数格式相比,这可导致所公开的主题在硬件使用和支持方面更高效(例如,可减少所使用的硬件和硬件资源的量),并可避免增加到融合乘法加法FPU的深度(例如,总门延迟)。

进一步关于最高(例如,最后)的二进制码,增强浮点数格式可以利用最高二进制码的指定定义(例如,关于指数字段的数据点都是1)。根据增强浮点数格式中最高二进制码的指定定义,处理器组件102和/或计算器组件106可以将最高二进制码的期望部分(例如,大部分)用于有限数,并且可以将最高二进制码的一个数据点用于特殊值,例如非数(NaN)和无穷大(infinity)(例如,合并的NaN/infinity)。

表2说明根据所公开的主题的一些实施例,将最高二进码中的大多数(例如,除一个数据点以外的所有)用于有限数且将最高二进制码中的一个数据点用于合并NaN/Infinity的特定值,如下:

表2

应当理解和明白,根据各种其它实施方式,可以保留针对不同风格的NaN的更多尾数码,并且相应地由处理器组件102和/或计算器组件106利用。例如,如果需要,根据增强浮点数格式,可针对NaN的相应(例如,不同的)风格(例如,由处理器部件102和/或计算器部件106)采用两个或更多个尾数码。作为另一示例实施例,如果需要,指数为111111,尾数范围为000…000至111…101,数据点可以是正规数,尾数为1.f和[e]=32;对于尾数111…101,取决于符号字段202中的符号位的值,数据点可以表示+无穷大或-无穷大;对于所有1值的尾数,数据点可以表示NaN,其中符号字段202中的符号位可以是“无关紧要”项。

增强浮点数格式还可将合并的NaN/infinity符号的符号定义为“无关紧要”项,与在其它浮点数格式(例如1/5/10格式)中如何处理NaN和无穷大的符号相比,这可使合并的NaN/infinity符号的处理相对不复杂。例如,某些其它浮点数格式可具有关于如何获得NaN和无穷大的符号的相对复杂的规则,尤其对于加/减和乘加运算。然而,对于许多应用,包括深度学习应用,NaN和无穷大的符号无关紧要。

因此,根据增强浮点数格式,处理器组件102和/或计算器组件106可将合并的NaN/infinity符号的符号表示为“无关紧要”项。例如,“无关紧要”项可以表示定义的值,该定义的值可以指示根据增强浮点数格式,合并的NaN/Infinity符号的符号相对于合并的NaN/Infinity符号的值无关紧要。当无穷大或NaN是浮点数结果时,处理器组件102和/或计算器组件106可生成或便于生成与无穷大和/或NaN的值相关联的符号字段中的任意值(例如,合并的NaN/infinity符号、单个NaN值、或单个无穷大值)以表示无穷大和/或NaN的值的符号的项或符号。根据增强浮点数格式,处理器部件102和/或计算器部件106可以生成或促进生成与无穷大和/或NaN的(多个)值相关联的符号字段中的任何任意值或符号,这对于处理器部件102或计算器部件106生成并插入到这样的符号字段中是方便或高效的(例如,最方便或最高效的)。例如,处理器组件102和/或计算器组件106可生成或便于生成可利用最少量资源(例如,处理或计算资源)或至少可利用比原本将使用的资源更少的资源的任意值,以确定并生成用于符号字段的非任意值来表示无穷大和/或NaN的值的符号。通过采用增强浮点数格式,包括其对无穷大、NaN和与无穷大和NaN相关联的符号的处理,所公开的主题由此可使得系统100结合增强浮点数格式所利用的硬件能够相对不复杂,并且与用于其它浮点数格式(例如1/5/10格式)的硬件相比,可利用更少的硬件和硬件资源(和更少的逻辑资源)。

此外,与增强浮点数格式下的最高二进制的指定定义相比,某些其它浮点数格式,例如1/5/10格式,仅对NaN和无穷大这一特殊值使用最高二进制,其中对于零小数,该值可以是+/-无穷大,这取决于符号位,而对于非零小数,数据点可以表示NaN。这些特殊值对于处理拐角条件(corner condition)可能有些用处。无穷大可用于指示计算确实溢出了有效数据范围。在算术运算中,无穷大可以服从代数规则,例如无穷大-x=无穷大,对于任何有限数x,在这样的某些其它浮点格式中,NaN可以用于表示数学上未定义的情形,例如负数的平方根或具有相同符号的两个无穷大之间的差。注意,在浮点数格式中,例如1/5/10格式,可以存在NaN的多个表示。当算术运算具有至少一个NaN操作数时,结果必须是操作数NaN之一,例如,必须传递其有效载荷。

虽然当指数具有8位或更多位时,例如对于较高精度浮点数格式(例如32位或64位浮点数格式),仅使用一个二进制码用于NaN和无穷大的这些特定值通常不会是显著的损失,但是对于较小的位宽,例如与较低精度浮点数格式(例如16位浮点数格式,诸如增强的1/6/9格式和1/5/10格式)相关联的较小位宽,仅使用一个二进制码用于NaN和无穷大的这些特定值可能是不可接受的代价。

与诸如1/5/10格式等其它浮点数格式相比,通过利用此类针对本文描述的最高二进制码的指定定义,增强浮点数格式可允许相对较大的数据范围,并可利用相对不复杂的硬件,因为系统100(例如,由处理器组件102和/或计算器组件106)用于增强浮点数格式的逻辑不必区分NaN和无穷大值。

在一些实施例中,增强型浮点数格式可使用舍入模式,其可比由其它类型的格式利用的舍入模式实现起来更简单。例如,增强浮点数格式可使用四舍五入的舍入模式而不使用其它舍入模式。一些其它类型的格式(例如1/5/10格式)采用更复杂的舍入模式,例如向上舍入到最近、向下舍入到最近和舍入到偶数,以及向0舍入、向+无穷大舍入和向-无穷大舍入。通过增强浮点数格式使用不太复杂的舍入模式(例如,向最近的向上舍入),而不使用其他舍入模式,可以对工作负载的性能没有影响,或者至少几乎没有影响,包括系统训练(例如,机器或深度学习训练)的性能和质量的速度,同时显著减少用于舍入浮点数的硬件和逻辑的量。

通过采用增强浮点数格式,所公开的主题可有助于显著减少用于计算密集型应用(例如,机器训练或深度学习训练应用)的硬件、硬件资源、逻辑资源和其他计算相关资源的数量,例如,如本文更全面描述的。在一些实施例中,所公开的主题通过采用增强型浮点数格式还可采用可比某些双精度(例如,64位)FPU小约25倍的16位FPU。此外,通过采用增强浮点数格式,预期(例如,估计或预计)所公开的主题采用16位FPU,其可比拟的半精度(例如,16位)FPU(例如,使用1/5/10格式的半精度FPU)小约25%到30%。

图4、图5和图6可示出示例性能结果,这些结果可将增强浮点数格式(例如增强的半精度(例如16位)浮点数格式)的性能与半精度(例如16位)浮点数格式(例如1/5/10格式)的性能结果和32位(例如全精度)浮点数格式的性能结果进行比较。简要地参照图4,图4示出了根据所公开的主题的各个方面和实施例的与语音识别有关的性能结果的示例性曲线图400的图示。曲线图400可以示出针对增强浮点数格式、半精度浮点数格式和32位浮点数格式的相应语音识别性能结果,用于50小时广播新闻数据集上的语音深度神经网络(语音-DNN)。曲线图400在y轴上绘制了相对于沿x轴的训练时段的音素误差率(%)。

如在性能结果的曲线图400中可以观察到的,增强浮点数格式(增强格式)(以及关联的16位硬件和软件)的语音识别性能结果402可以相当好地收敛,并且可以提供相对接近32位浮点数格式(全精度格式)(以及关联的32位硬件和软件)的语音识别性能结果404的比较有利的结果。此外,如从曲线图400中可以观察到的,半精度浮点数格式(半精度格式)(以及相关联的16位硬件和软件)的语音识别性能结果406根本不能收敛,并且因此不能提供任何有意义的语音识别结果。

图5示出了根据所公开主题的各个方面和实施例的与图像识别相关的性能结果的示例性曲线图500的图示。曲线图500可以示出针对增强浮点数格式、半精度浮点数格式和32位浮点数格式的相应图像识别性能结果,其关于2012-ImageNet数据集上的AlexNet,具有1K个输出类。曲线图500在y轴上绘制了相对于沿x轴的训练时段的测试误差率(%)。

如在性能结果的曲线图500中可以看到的,增强浮点数格式(和关联的16位硬件和软件)的图像识别性能结果502可以相当好地收敛,并可以提供可以相当有利地与32位浮点数格式(和关联的32位硬件和软件)的图像识别性能结果504相比(例如,可以基本上接近的结果)的结果。此外,如可从曲线图500观察到的,半精度浮点数格式(以及相关联的16位硬件和软件)的图像识别性能结果506根本不能收敛,且因此不能提供任何有意义的图像识别结果。

关于图6,图6示出了根据所公开的主题的各个方面和实施例的与Shakespeare文本生成有关的性能结果的示例性曲线图600的图示。当采用具有两个堆叠的长短期记忆(LSTM)(每个512个单元)的字符循环神经网络(Char-RNN)时,曲线图600可以示出增强浮点数格式、半精度浮点数格式和32位浮点数格式的关于Shakespeare文本的相应文本生成性能结果。曲线图600在y轴上绘制了相对于沿x轴的训练时段的训练误差。

如在性能结果的曲线图600中可以观察到的,增强浮点数格式(和相关的16位硬件和软件)的文本生成性能结果602能很好地收敛,并能提供能与32位浮点数格式(和相关的32位硬件和软件)的文本生成性能结果604相当有利(例如能基本接近)的结果。此外,如可从曲线图600观察到的,半精度浮点数格式(和相关联的16位硬件和软件)的文本生成性能结果606虽然能够收敛,但几乎不如增强浮点数格式的文本生成性能结果602或32位浮点数格式的文本生成性能结果604好。

转向图7,图7示出根据所公开的主题的各种方面和实施例的实例非限制性系统700的框图,其可针对计算的第一部分使用较低精度计算引擎以使用增强型浮点数格式产生或计算浮点数(例如,二进制浮点数),且可针对计算的第二部分使用较高精度计算引擎。为了简洁起见,在此描述的其它实施例中采用的类似元件的重复描述被或可以被省略。

系统700可以包括处理器组件702、数据存储704和计算器组件706。处理器组件702可以与数据存储704和程序存储组件708相关联(例如,通信地连接到它们)(例如,经由总线),其中程序存储组件708可以包括计算器组件706。计算器组件706可包括增强格式组件710,其可使得处理器组件702和计算器组件706能够以增强型浮点数格式操作(例如,对其执行数学计算)、生成、和/或计算浮点数(例如,二进制浮点数),如本文中更全面地描述的。

处理器组件702和计算器组件706可与诸如应用程序712等一个或多个应用程序(例如,机器或深度学习应用)相关联,以对与应用程序712相关联的数据(例如,数值数据)执行操作。例如,处理器组件702和/或计算器组件706可以从应用程序712接收数据,可以根据增强浮点数格式至少部分地基于数据来操作、生成或确定(例如,计算)数值或结果(例如,二进制浮点数),并且可以将数值或结果提供给应用程序712和/或另一期望的目的地(例如,另一应用程序、组件或设备)。

在一些实施例中,处理器组件702可包括一组较低精度计算引擎,诸如较低精度计算引擎

处理器部件702还可以包括一组更高精度的计算引擎,例如更高精度的计算引擎

结合应用程序712(例如,与机器或深度学习训练相关或涉及机器或深度学习训练的应用)的执行或使用,可以存在可以由处理器组件702和/或计算器组件706执行的各种不同类型的计算或其他操作。例如,一些类型的计算可能比其它类型的计算对诸如舍入误差的误差相对更敏感。在许多甚至大多数情况下,与应用程序710相关联的大多数计算可以是对误差不是特别敏感的计算类型,并且计算的相对小部分可以是对误差诸如舍入误差相对更敏感的计算类型。

为了促进由处理器组件702、计算器组件706和系统700的其他组件进行的包括计算的操作的高效执行,系统700可以包括操作管理组件726,其可以与处理器组件702、数据存储704和程序存储组件708相关联(例如,通信地连接到它们)。操作管理组件726可控制系统700的组件的操作,包括处理器组件702、数据存储704、计算器组件706、程序存储组件708、一组较低精度计算引擎(例如,714、716、718)和一组较高精度计算引擎(例如,720、722、724)。

例如,为了促进对数据(例如,数值数据)的计算的高效执行,操作管理组件726可将第一部分操作(例如,计算操作)和相关联的数据分配给该组较低精度计算引擎(例如,714、716、718),其中该组较低精度计算引擎可对这些数据执行这些操作。第一部分操作可以涉及对数据执行计算或其他操作,其中,计算或其他操作对诸如舍入误差之类的误差不是特别敏感。操作管理组件726还可以将第二部分操作(例如,计算操作)和相关联的数据分配给该组高精度计算引擎(例如,720、722、724),其中该组高精度计算引擎可以对这样的数据执行这样的操作。第二部分运算可以涉及对数据执行计算或其他运算,其中,计算或其他运算可以是对诸如舍入误差之类的误差相对更敏感的计算类型,因此,使用更高精度的计算引擎来执行这些更敏感的计算或其他运算可能是期望的。

通常(例如,频繁地),与可能对误差敏感的计算的数量(例如,操作的第二部分)相比,可能存在显著更多的对误差不是特别敏感的计算(例如,操作的第一部分),在一些实施例中,较低精度计算引擎的集合(例如,714、716、718)中的计算引擎的数量(例如,M)可能大于较高精度计算引擎的集合(例如,720、722、724)中的计算引擎的数量(例如,N)。然而,如所期望的(例如,取决于要执行的应用或训练任务的类型),在其他实施例中,在较低精度计算引擎(例如,714、716、718)的集合和较高精度计算引擎(例如,720、722、724)的集合中可以存在相等数量的计算引擎,或者较高精度计算引擎(例如,720、722、724)的集合可以具有比较低精度计算引擎(例如,714、716、718)的集合更多数量的计算引擎。

应当理解和明白,根据各实施例,系统700可以包括一个或多个处理器组件、计算器组件、较低精度计算引擎、较高精度计算引擎、图形处理单元(GPU)、加速器、现场可编程门阵列(FPGA)和/或其他处理单元,以执行或促进对数据执行操作,包括对数据(例如,数值数据)执行计算。

图8示出了根据所公开的主题的各个方面和实施例的用于使用增强浮点数格式对数据执行操作(包括计算)的示例性非限制性方法800的流程图。方法800可由例如处理器组件和/或计算器组件使用增强格式组件来执行。为了简洁起见,在此描述的其它实施例中采用的类似元件的重复描述被或可以被省略。

在802,可以以定义的浮点数格式(例如增强浮点数格式)生成相应的数字字段,其中相应的数字字段可包括符号字段、指数字段和尾数字段,且其中定义的浮点数格式可使用指数字段中的六位。处理器组件和/或计算器组件可生成或便于生成所定义的浮点数格式的相应数字字段。

在804处,可以结合应用程序的执行,根据所定义的浮点数格式来计算二进制浮点数。处理器组件和/或计算器组件可结合应用程序的执行根据所定义的浮点数格式来计算或以其它方式对二进制浮点数进行操作。例如,处理器组件和/或计算器组件可根据所定义的浮点数格式来计算或以其他方式对二进制浮点数进行操作,以便于结合应用程序的执行来收敛程序、算法(例如,与程序相关联的算法)和/或数据点(例如,与程序或算法相关联的),以获得与对要解决的问题的解决方案有关的结果。要解决的问题可以涉及机器训练、深度学习、认知计算、人工智能、神经网络和/或其它计算密集型任务、问题或应用。例如,问题可涉及识别或标识图像中的对象(例如,人、地点和/或事物)的图像识别、识别或标识音频内容中的单词和/或语音的身份的语音识别、或识别或标识文本内容(例如,书、手稿、电子邮件、…)中的文本数据(例如,单词、字母数字字符)的文本识别。

图9示出了根据所公开的主题的各个方面和实施例的用于使用增强浮点数格式对数据执行操作(包括计算)的另一示例、非限制性方法900的流程图。方法900可由例如处理器组件和/或计算器组件采用增强格式组件来执行。为了简洁起见,在此描述的其它实施例中采用的类似元件的重复描述被或可以被省略。

在902,可以根据增强浮点数格式生成相应的字段,其中相应的字段可以包括符号字段、指数字段和尾数字段。处理器组件和/或计算器组件可生成或便于生成增强浮点数格式的相应场。所定义的浮点数格式可为16位格式,其中符号字段可包括单个位,指数字段可包括6个位,且尾数字段可包括9个位。

在904处,可根据增强浮点数格式对二进制浮点数进行运算。处理器组件和/或计算器组件可根据增强浮点数格式对二进制浮点数进行操作、生成和/或计算二进制浮点数,例如以便于根据所定义的收敛准则收敛与应用程序相关联的程序。所定义的收敛准则可以涉及例如程序(例如,程序的算法和/或数据点)收敛以获得针对要结合应用的执行来解决的问题的结果的时间量、程序收敛以获得结果的可实现性、和/或与结果相关联的错误率。

在906,根据增强浮点数格式,第一二进制码可用于表示零和正规数,其中所述第一二进制码与具有全零的指数字段相关联。处理器组件和/或计算器组件可根据增强浮点数格式利用第一二进制码来表示零和正规数。例如,第一二进制码可以是最低的二进制码。第一二进制码可以包括数据点集合,其中具有全零的小数的集合的数据点可以表示零。数据点集合的其它数据点可以表示正规数。

正规数可以是具有大于或等于最小值的量值的有限非零浮点数,所述最小值可以被确定为与增强浮点数格式相关联的基数和最小指数的函数。例如,一个正规数可以是一个具有大于或等于r

在908,根据增强浮点数格式,第二二进制码的精简子集可被用来表示无穷大值和NaN值。处理器组件和/或计算器组件可根据增强浮点数格式利用第二二进制码的精简子集来表示无穷大值和NaN值。第二二进制码可以是例如最高的二进制码,其中第二二进制码可以与指数字段的具有值1的所有位相关联。

增强浮点格式可被构造为利用第二二进制码的数据点集合中的精简(例如,较小的)数据点子集来表示无穷大值和NaN值。所述精简数据点集合可以包括比与整个所述第二二进制码相关联的数据点集合更少的数据点。在一些实施例中,增强浮点格式可被构造为利用第二二进制码的数据点集合中的单个数据点来将无穷大值和NaN值两者表示为单个合并的符号。即,精简数据点子集可具有可表示无穷大值和NaN值的单个合并码元的单个数据点。在其他实施例中,精简数据点子集可以包括可以表示无穷大值的数据点和可以表示NaN值的另一数据点。第二二进制码的数据点集合中不在精简数据点集合中的其他数据点可被用于表示有限数,这可进一步增强或扩展可使用增强浮点数格式来表示的浮点数的范围。

在910处,当浮点数为零时,根据增强型浮点数格式,零的符号可表示为“无关紧要”项。当浮点数为零时,根据增强浮点数格式,处理器组件和/或计算器组件可将零的符号表示为“无关紧要”项。“无关紧要”项可以是可指示符号相对于零值无关紧要的项或符号。

在912,当浮点数为零时,可在符号字段中为零值生成任意值以表示零的符号的项。处理器组件和/或计算器组件可在符号字段中生成任意值以表示例如当零是浮点数时零值的符号的项或符号。处理器组件和/或计算器组件可在增强浮点数格式的符号字段中产生任何任意值或符号,其对于处理器组件或计算器组件产生并插入到符号字段中是方便或有效的(例如,最方便或最有效的)。例如,处理器组件和/或计算器组件可生成可利用最少量资源(例如,处理或计算资源)的任意值,或者至少可利用比原本将用于确定和生成用于符号字段的非任意值以表示零值的符号的资源更少的资源。

在914,当浮点数是无穷大和/或NaN时,根据增强的浮点数格式,无穷大和/或NaN的符号可被表示为“无关紧要”项。当浮点数为无穷大和/或NaN时,根据增强浮点数格式,处理器部件和/或计算器部件可将无穷大和/或NaN的符号表示为“无关紧要”项。“无关紧要”项可以是可指示该符号与无穷大值和/或NaN值无关的项或符号。在一些实施例中,无穷大值和NaN值可被表示为合并的符号。在其它实施例中,无穷大值和NaN值可以单独表示。

在916,当浮点数为无穷大和/或NaN时,可在与无穷大和/或NaN的(多个)值相关联的符号字段中生成任意值,以表示无穷大和/或NaN的(多个)值的符号的(多个)项。例如,当无穷大或NaN是浮点数结果时,处理器组件和/或计算器组件可生成与无穷大和/或NaN的值相关联的符号字段中的任意值,以表示无穷大和/或NaN的值的符号的项或符号。如本文所述,在一些实施例中,无穷大值和NaN值可被表示为合并的符号,而在其他实施例中,无穷大值和NaN值可被单独地表示。

根据增强浮点数格式,处理器部件和/或计算器部件可在与无限和/或NaN的值相关联的符号字段中生成任何任意值或符号,这对于处理器部件或计算器部件生成并插入到这种符号字段中是方便或有效的(例如,最方便或最有效)。例如,处理器组件和/或计算器组件可以生成可以利用最少量资源(例如,处理或计算资源)的任意值,或者至少可以利用比以其他方式用于确定和生成符号字段的非任意值以表示无穷大和/或NaN的值的符号的资源更少的资源。

在918,当要舍入浮点数时,根据增强浮点数格式,可使用单个舍入模式来舍入二进制浮点数。当需要对数进行舍入时,处理器组件和/或计算器组件可以使用单一舍入模式来对中间二进制浮点数(例如,初步计算的数值)进行舍入,以根据所定义的浮点数格式对中间二进制浮点数进行舍入,以便于对二进制浮点数进行运算或计算二进制浮点数。在一些实施例中,所述单一舍入模式可以是舍入最近值模式。所公开的主题通过仅利用舍入最近值模式对浮点数执行舍入可通过减少用以执行应用程序且对二进制浮点数进行运算或计算的硬件(例如,硬件或硬件资源的量和/或类型)来改进效率。

为了解释的简单,方法和/或计算机实现的方法被示出和描述为一系列动作。但是可以理解和明白,所公开的主题不受所示动作和/或动作次序的限制,例如,动作可以按各种次序和/或并发地发生,并且可以与本文未呈现和描述的其它动作一起发生。此外,并非所有示出的动作都是实现根据所公开的主题的计算机实现的方法所必需的。另外,本领域技术人员将理解和明白,计算机实现的方法可以替换地经由状态图或事件被表示为一系列相互关联的状态。另外,还应当理解,下文以及本说明书通篇公开的计算机实现的方法能够被存储在制品上,以便于将这样的计算机实现的方法传输和转移到计算机。如本文所使用的术语制品旨在涵盖可从任何计算机可读设备或存储介质访问的计算机程序。

为了提供所公开的主题的各个方面的上下文,图10以及以下讨论旨在提供对其中可实现所公开的主题的各个方面的合适环境的一般描述。图10示出了其中可促进此处所描述的一个或多个实施例的示例、非限制性操作环境的框图。为了简洁起见,在此描述的其它实施例中采用的类似元件的重复描述被或可以被省略。参考图10,用于实现本公开的各方面的合适的操作环境1000还可包括计算机1012。计算机1012还可以包括处理单元1014、系统存储器1016和系统总线1018。系统总线1018将包括但不限于系统存储器1016的系统组件耦合到处理单元1014。处理单元1014可以是各种可用处理器中的任一种。双微处理器和其它多处理器体系结构也可用作处理单元1014。系统总线1018可以是若干类型的总线结构中的任何一种,包括存储器总线或存储器控制器、外围总线或外部总线、和/或使用任何各种可用总线体系结构的局部总线,这些总线体系结构包括但不限于工业标准体系结构(ISA)、微通道体系结构(MSA)、扩展ISA(EISA)、智能驱动电子设备(IDE)、VESA局部总线(VLB)、外围部件互连(PCI)、卡总线、通用串行总线(USB)、高级图形端口(AGP)、火线(IEEE 1394)、和小型计算机系统接口(SCSI)。系统存储器1016还可以包括易失性存储器1020和非易失性存储器1022。基本输入/输出系统(BIOS)包含诸如在启动期间在计算机1012内的元件之间传输信息的基本例程,它被存储在非易失性存储器1022中。作为说明而非限制,非易失性存储器1022可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存或非易失性随机存取存储器(RAM)(例如,铁电RAM(FeRAM))。易失性存储器1020还可以包括随机存取存储器(RAM),其充当外部高速缓冲存储器。作为说明而非限制,RAM可以以许多形式获得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据速率SDRAM(DDR SDRAM)、增强型SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)、直接RambusRAM(DRRAM)、直接Rambus动态RAM(DRDRAM)和Rambus动态RAM。

计算机1012还可包括可移动/不可移动、易失性/非易失性计算机存储介质。例如,图10示出了盘存储1024。盘存储1024还可包括但不限于,诸如磁盘驱动器、软盘驱动器、磁带驱动器、Jaz驱动器、Zip驱动器、LS-100驱动器、闪存卡、或记忆棒等设备。盘存储1024还可包括单独的存储介质或与其它存储介质组合的存储介质,其它存储介质包括但不限于,诸如紧致盘ROM设备(CD-ROM)、CD可记录驱动器(CD-R驱动器)、CD可重写驱动器(CD-RW驱动器)或数字多功能盘ROM驱动器(DVD-ROM)等光盘驱动器。为了便于将盘存储1024连接到系统总线1018,通常使用诸如接口1026等可移动或不可移动接口。图10还示出了充当用户和在合适的操作环境1000中描述的基本计算机资源之间的中介的软件。这样的软件还可以包括例如操作系统1028。可存储在盘存储1024上的操作系统1028用于控制和分配计算机1012的资源。系统应用程序1030利用操作系统1028通过例如存储在系统存储器1016或盘存储1024上的程序模块1032和程序数据1034对资源的管理。应当理解,本公开可以用各种操作系统或操作系统的组合来实现。用户通过输入设备1036把命令或信息输入到计算机1012中。输入设备1036包括但不限于诸如鼠标、跟踪球、指示笔、触摸垫等定点设备、键盘、话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、TV调谐卡、数码相机、数码摄像机、web摄像头等等。这些和其它输入设备通过系统总线1018经由接口端口1038连接到处理单元1014。接口端口1038包括,例如,串行端口、并行端口、游戏端口、以及通用串行总线(USB)。(一个或多个)输出设备1040使用与(一个或多个)输入设备1036相同类型的端口中的一些端口。因此,例如,USB端口可用于向计算机1012提供输入,并从计算机1012向输出设备1040输出信息。提供输出适配器1042来说明存在某些输出设备1040,如监视器、扬声器和打印机,以及其它输出设备1040,它们需要专用适配器。作为示例而非限制,输出适配器1042包括提供输出设备1040和系统总线1018之间的连接方法的显卡和声卡。应当注意,其它设备和/或设备的系统提供输入和输出能力,诸如远程计算机1044。

计算机1012可使用至一个或多个远程计算机,诸如远程计算机1044的逻辑连接在网络化环境中操作。远程计算机1044可以是计算机、服务器、路由器、网络PC、工作站、基于微处理器的电器、对等设备或其它常见的网络节点等,且通常还可包括相对于计算机1012所描述的许多或所有元件。为了简洁起见,仅存储器存储设备1046与远程计算机1044一起示出。远程计算机1044通过网络接口1048被逻辑地连接到计算机1012,然后经由通信连接1050被物理地连接。网络接口1048包括有线和/或无线通信网络,例如局域网(LAN)、广域网(WAN)、蜂窝网络等。LAN技术包括光纤分布式数据接口(FDDI)、铜线分布式数据接口(CDDI)、以太网、令牌环等。WAN技术包括,但不限于,点对点链路、像综合业务数字网(ISDN)及其变型那样的电路交换网络、分组交换网络、以及数字用户线(DSL)。通信连接1050是指用于将网络接口1048连接到系统总线1018的硬件/软件。虽然为了清楚地说明,通信连接1050被示为在计算机1012内部,但是它也可以在计算机1012外部。仅出于示例性目的,用于连接到网络接口1048的硬件/软件还可以包括内部和外部技术,诸如包括常规电话级调制解调器、电缆调制解调器和DSL调制解调器的调制解调器、ISDN适配器和以太网卡。

一个或多个实施例可以是任何可能的技术细节集成水平的系统、方法、装置和/或计算机程序产品。计算机程序产品可以包括其上具有计算机可读程序指令的计算机可读存储介质(或多个介质),所述计算机可读程序指令用于使处理器执行一个或多个实施例的各方面。计算机可读存储介质可以是能够保留和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述的任何合适的组合。计算机可读存储介质的更具体示例的非穷举列表还可以包括以下:便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式光盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、诸如上面记录有指令的打孔卡或凹槽中的凸起结构的机械编码装置,以及上述的任何适当组合。如本文所使用的计算机可读存储介质不应被解释为暂时性信号本身,诸如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,通过光纤线缆的光脉冲)、或通过导线传输的电信号。

本文所述的计算机可读程序指令可以从计算机可读存储介质下载到相应的计算/处理设备,或者通过网络(例如,互联网、局域网、广域网和/或无线网络)下载到外部计算机或外部存储设备。该网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并转发计算机可读程序指令以存储在相应的计算/处理设备内的计算机可读存储介质中。用于执行所公开的主题的操作的计算机可读程序指令可以是汇编指令,指令集架构(ISA)指令,机器指令,机器相关指令,微代码,固件指令,状态设置数据,集成电路的配置数据,或以一种或多种编程语言(包括面向对象的编程语言,例如Smalltalk,C++等)和过程编程语言(例如,“C”编程语言或类似语言)的任意组合编写的源代码或目标代码编程语言。计算机可读程序指令可以完全在用户计算机上,部分在用户计算机上,作为独立软件包执行,部分在用户计算机上并且部分在远程计算机上或完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接到用户计算机,或者可以与外部计算机建立连接(用于例如,通过使用Internet服务提供商的Internet)。在一些实施例中,包括例如可编程逻辑电路,现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令来个性化电子电路,以执行所公开主题的各方面。

本文参考根据本主题公开的实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或框图来描述所公开的主题的各方面。将理解,流程图和/或框图的每个框以及流程图和/或框图中的框的组合可以由计算机可读程序指令来实现。这些计算机可读程序指令可以被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现流程图和/或框图的一个或多个框中指定的功能/动作的方法。这些计算机可读程序指令还可以存储在计算机可读存储介质中,其可以引导计算机、可编程数据处理装置和/或其他设备以特定方式工作,使得其中存储有指令的计算机可读存储介质包括制品,该制品包括实现流程图和/或框图的一个或多个框中指定的功能/动作的各方面的指令。计算机可读程序指令还可以被加载到计算机、其他可编程数据处理装置或其他设备上,以使得在计算机、其他可编程装置或其他设备上执行一系列操作动作,以产生计算机实现的过程,使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框图的一个或多个框中指定的功能/动作。

附图中的流程图和框图示出了根据所公开的主题的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。在这点上,流程图或框图中的每个框可以表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些替代实施方案中,框中所注明的功能可不按图中所注明的次序发生。例如,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行,这取决于所涉及的功能。还将注意,框图和/或流程图图示的每个框以及框图和/或流程图图示中的框的组合可以由执行指定功能或动作或执行专用硬件和计算机指令的组合的专用的基于硬件的系统来实现。

尽管以上在运行在一个和/或多个计算机上的计算机程序产品的计算机可执行指令的一般上下文中描述了本主题,但本领域的技术人员将认识到,本公开也可结合其它程序模块来实现。通常,程序模块包括执行特定任务和/或实现特定抽象数据类型的例程、程序、组件、数据结构等。此外,本领域技术人员将理解,此处所公开的计算机实现的方法可以用其它计算机系统配置来实践,包括单处理器或多处理器计算机系统、小型计算设备、大型计算机、以及计算机、手持式计算设备(例如,PDA、电话)、基于微处理器的或可编程的消费或工业电子产品等。所示的各方面也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实践。然而,本公开的一些方面,如果不是所有方面,可以在独立计算机上实践。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。

如本申请中所使用的,术语“组件”、“系统”、“平台”、“接口”等可以指代和/或可以包括计算机相关的实体或与具有一个或多个特定功能的操作机器相关的实体。这里公开的实体可以是硬件、硬件和软件的组合、软件、或执行中的软件。例如,组件可以是,但不限于,在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或计算机。作为说明,在服务器上运行的应用程序和服务器都可以是组件。一个或多个组件可以驻留在进程和/或执行的线程内,并且组件可以位于一个计算机上和/或分布在两个或更多计算机之间。在另一示例中,相应组件可从其上存储有各种数据结构的各种计算机可读介质执行。这些组件可以经由本地和/或远程进程进行通信,例如根据具有一个或多个数据分组的信号(例如,来自一个组件的数据,该组件经由该信号与本地系统、分布式系统中的另一个组件进行交互和/或通过诸如因特网之类的网络与其它系统进行交互)。作为另一个示例,组件可以是具有由电气或电子电路操作的机械部件提供的特定功能的装置,该电气或电子电路由处理器执行的软件或固件应用程序操作。在这种情况下,处理器可以在装置的内部或外部,并且可以执行软件或固件应用程序的至少一部分。作为又一示例,组件可以是通过电子组件而不是机械部件来提供特定功能的装置,其中电子组件可以包括处理器或其他方法以执行至少部分地赋予电子组件的功能的软件或固件。在一方面,组件可经由虚拟机来仿真电子组件,例如在云计算系统内。

此外,术语“或”旨在表示包含性的“或”而不是排他性的“或”。也就是说,除非另外指定,或者从上下文中清楚,否则“X采用A或B”旨在表示任何自然的包含性排列。也就是说,如果X采用A;X采用B;或者X采用A和B两者,则在任何前述实例下都满足“X采用A或B”。此外,除非另外指定或从上下文中清楚是指单数形式,否则如在本说明书和附图中使用的冠词“一个(a)”和“一个(an)”一般应被解释为表示“一个或多个”。如本文所使用的,术语“示例”和/或“示例性的”用于表示用作示例、实例或说明。为了避免疑惑,本文公开的主题不受这些示例限制。此外,本文中描述为“示例”和/或“示例性”的任何方面或设计不一定被解释为比其它方面或设计优选或有利,也不意味着排除本领域普通技术人员已知的等效示例性结构和技术。

如在本说明书中所采用的,术语“处理器”可以指基本上任何计算处理单元或设备,包括但不限于单核处理器;具有软件多线程执行能力的单处理器;多核处理器;具有软件多线程执行能力的多核处理器;具有硬件多线程技术的多核处理器;平行平台;以及具有分布式共享存储器的并行平台。另外,处理器可以指被设计为执行本文描述的功能的集成电路、专用集成电路(ASIC)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、可编程逻辑控制器(PLC)、复杂可编程逻辑器件(CPLD)、分立门或晶体管逻辑、分立硬件组件或其任意组合。此外,处理器可以采用纳米级架构,例如但不限于基于分子和量子点的晶体管、开关和门,以便优化空间使用或增强用户设备的性能。处理器也可以实现为计算处理单元的组合。在本公开中,诸如“存储”、“存储器”、“数据存储”、“数据存储器”、“数据库”以及与组件的操作和功能相关的基本上任何其他信息存储组件之类的术语被用来指代“存储器组件”、在“存储器”中包含的实体”或包括存储器的组件。应了解,本文所描述的存储器和/或存储器组件可为易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。作为说明而非限制,非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除ROM(EEPROM)、闪存或非易失性随机存取存储器(RAM)(例如,铁电RAM(FeRAM))。易失性存储器可以包括RAM,例如,其可以充当外部高速缓冲存储器。作为说明而非限制,RAM可以以许多形式获得,诸如同步RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据速率SDRAM(DDR SDRAM)、增强SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)、直接RambusRAM(DRRAM)、直接Rambus动态RAM(DRDRAM)和Rambus动态RAM(RDRAM)。另外,本文公开的系统或计算机实现的方法的存储器组件旨在包括但不限于这些和任何其他合适类型的存储器。

以上描述的内容仅包括系统和计算机实现的方法的示例。当然,不可能为了描述本公开而描述组件或计算机实现的方法的每个可想到的组合,但是本领域的普通技术人员可以认识到,本公开的许多进一步的组合和置换是可能的。此外,就在详细描述、权利要求书、附录和附图中使用术语“包括”、“具有”、“拥有”等来说,这些术语旨在以与术语“包含”在权利要求书中用作过渡词时所解释的类似的方式为包含性的。已经出于说明的目的呈现了对各种实施例的描述,但是不旨在是穷举的或限于所公开的实施例。在不背离所描述的实施例的范围和精神的情况下,许多修改和变化对于本领域的普通技术人员将是显而易见的。选择本文所使用的术语以最好地解释实施例的原理、实际应用或对市场上存在的技术改进,或使本领域的其他普通技术人员能够理解本文所公开的实施例。

技术分类

06120112181464