一种向量计算装置及方法
技术领域
本申请实施例涉及计算机领域,尤其涉及一种向量计算装置及方法。
背景技术
基础数学库是高性能计算机系统的核心,主要用于完成科学、工程中常见的数值密集型运算。基础数学库的计算性能直接影响上层各种科学、工程的计算效率,因此,提高基础数学库的计算效率有着十分重要的意义。
随着单指令流多数据(single instruction multiple data,SIMD)技术的提出,采用SIMD技术开发的向量基础数学库广泛应用。较传统的标量基础数学库而言,向量基础数学库在处理包含多个标量数据的向量时,将传统的串行处理方式转换为并行处理,可以加速数据的处理性能,使基础数学库的计算速率显著提高。在多媒体和信号处理等领域的应用过程中,采用上述向量基础数据库进行数值计算时,数据处理效率明显提升。
当前,向量基础数学库的计算过程为:首先,获取需要计算的向量数值和计算函数;然后,串行检测向量中包括的多个标量数值的状态,判断向量中的每个标量数值是否正常,若所有标量数值均处于正常状态,则将计算函数采用幂级数转换为多项式,再用SIMD指令集并行将所有标量数值代入多项式计算,得到多项式计算结果输出;若向量中的至少一个标量值存在异常状态时,则以串行方式对每个标量数值进行处理,对异常状态的标量数值输出异常信息,对正常状态的标量数值进行多项式计算输出结果。
可以看出,当前的向量基础数学库计算过程,耗时长、处理效率低,指令读取次数多、访存事务数量大,功耗消耗大。
发明内容
本申请提供一种向量计算装置及方法,减少了向量计算过程的耗时,降低了向量计算过程的功耗,提高了向量计算的效率。
为了达到上述目的,本申请采用如下技术方案:
第一方面,本申请提供一种向量计算装置,该装置可以包括:获取单元、处理单元、确定单元和计算单元。该装置配置了逻辑模块,该逻辑模块可以包括多组并联的算术逻辑单元(arithmetic and logic unit,ALU)。其中,获取单元,用于获取待计算向量和第一函数,待计算向量包括多个标量数值;处理单元,用于通过多组并联的ALU,并行将待计算向量的标量数值分别与规则条件对比,得到待计算向量中每个标量数值的状态信息;其中,规则条件用于判断标量数值是否正常,一个标量数值的状态信息用于指示一个标量数值与规则条件对比处于正常状态或者异常状态;确定单元,用于确定待计算向量中存在标量数值处于正常状态;计算单元,用于将待计算向量中处于正常状态的标量数值并行代入第一函数计算,得到待计算向量的第一函数的计算结果。
通过本申请提供的向量计算装置,在向量计算时,并行检测向量中每个标量数值的状态;在向量中存在标量数值正常时,并行对正常状态的标量数值进行函数计算,减少了向量计算过程中指令读取次数和访存事务数量;进一步减少了向量计算过程的耗时,降低了向量计算过程的功耗,提高了向量计算的效率。
其中,ALU可以指执行算术和逻辑运算的组合逻辑电路。逻辑模块中包括了多组并联的ALU,用于执行并行操作。
规则条件的内容可以根据实际需求进行配置,本申请对此不予限定。
第一函数为待计算向量要参与的计算,本文所称的第一函数可以为第一函数的表达式,或者也可以为第一函数转换后的多项式,或者其他。
结合第一方面或上述一种可能的实现方式中,在另一种可能的实现方式中,该处理单元具体用于:调用第一指令,以启动多组并联的ALU,通过多组并联的ALU,并行将待计算向量的标量数值分别与规则条件对比,得到待计算向量中每个标量数值的状态信息。在该可能的实现方式中,通过配置的第一指令实现了并行的对比检测,与通过多条指令实现相比,减少了向量计算过程中指令读取次数和访存事务数量;进一步减少了向量计算过程的耗时,降低了向量计算过程的功耗,提高了向量计算的效率。
结合第一方面或上述任一种可能的实现方式,在另一种可能的实现方式中,该确定单元具体用于:调用第二指令,以启动多组并联的ALU,通过多组并联的ALU,并行将待计算向量中每个标量数值的状态信息与判断条件对比,确定待计算向量中存在标量数值处于正常状态。在该可能的实现方式中,通过配置的第二指令实现了并行判断待计算向量中是否存在标量数值处于正常状态,与通过多个指令实现相比,减少了向量计算过程中指令读取次数和访存事务数量;进一步减少了向量计算过程的耗时,降低了向量计算过程的功耗,提高了向量计算的效率。
其中,判断条件可以根据用户的实际需求进行配置,本申请不做具体限定。
结合第一方面或上述任一种可能的实现方式,在另一种可能的实现方式中,获取单元还可以用于,获取第一函数转换后的多项式系数向量;该计算单元具体用于:调用三指令,以启动多组并联的ALU,通过多组并联的ALU,并行对待计算向量中处于正常状态的标量数值和系数向量进行乘加计算,得到待计算向量中处于正常状态的标量数值的多项式值。在该可能的实现方式中,通过配置的第三指令实现了并行多项式计算,与通过多个指令实现相比,减少了向量计算过程中指令读取次数和访存事务数量;进一步减少了向量计算过程的耗时,降低了向量计算过程的功耗,提高了向量计算的效率。
结合第一方面或上述任一种可能的实现方式,在另一种可能的实现方式中,该向量计算装置还可以包括配置单元,用于配置启动多组并联的ALU的指令。
其中,配置单元配置的启动多组并联的ALU的指令可以为下述一项或多项:第一指令、第二指令、第三指令。
结合第一方面或上述任一种可能的实现方式,在另一种可能的实现方式中,逻辑模块可以包括第一逻辑子模块、第二逻辑子模块及第三逻辑子模块;不同逻辑子模块分别包括并联的ALU,用于执行不同的并行操作。其中,一个逻辑子模块包括的并联的ALU为逻辑模块包括的多组并联的ALU的子集。
结合第一方面或上述任一种可能的实现方式,在另一种可能的实现方式中,规则条件可以包括下述一项或多项:是否大于最大阈值、是否小于最小阈值、是否为非数(not anumber,NaN)、是否为负无穷、是否为正无穷。
状态信息可以包括与每个规则条件项的对比结果。
结合第一方面或上述任一种可能的实现方式,在另一种可能的实现方式中,规则条件可以为:是否属于规定范围内。
结合第一方面或上述任一种可能的实现方式,在另一种可能的实现方式中,该向量计算装置还可以包括输出单元,用于输出待计算向量的第一函数的计算结果。
结合第一方面或上述任一种可能的实现方式,在另一种可能的实现方式中,输出单元还可以用于,在待计算向量中存在处于异常状态的标量数值时,对待计算向量中处于异常状态的标量数值进行异常输出。
第二方面,本申请提供一种向量计算方法,该向量计算方法可以包括:获取待计算向量和第一函数,待计算向量包括多个标量数值;并行将待计算向量的标量数值分别与规则条件对比,得到待计算向量中每个标量数值的状态信息;其中,规则条件用于判断标量数值是否正常,一个标量数值的状态信息用于指示一个标量数值与规则条件对比处于正常状态或者异常状态;确定待计算向量中存在标量数值处于正常状态;将待计算向量中处于正常状态的标量数值并行代入第一函数计算,得到待计算向量的第一函数的计算结果。
通过本申请提供的向量计算方法,在向量计算时,并行检测向量中每个标量数值的状态;在向量中存在标量数值正常时,并行对正常状态的标量数值进行函数计算,减少了向量计算过程中指令读取次数和访存事务数量;进一步减少了向量计算过程的耗时,降低了向量计算过程的功耗,提高了向量计算的效率。
结合第二方面,在一种可能的实现方式中,并行将待计算向量的标量数值分别与规则条件对比,得到待计算向量中每个标量数值的状态信息,包括:调用第一指令,执行并行将待计算向量的标量数值分别与规则条件对比,得到待计算向量中每个标量数值的状态信息。在该可能的实现方式中,通过配置的第一指令实现了并行的对比检测,与通过多条指令实现相比,减少了向量计算过程中指令读取次数和访存事务数量;进一步减少了向量计算过程的耗时,降低了向量计算过程的功耗,提高了向量计算的效率。
结合第二方面或一种可能的实现方式中,在另一种可能的实现方式中,确定待计算向量中存在标量数值处于正常状态,包括:调用第二指令,执行并行将待计算向量中每个标量数值的状态信息与判断条件对比,确定待计算向量中存在标量数值处于正常状态。在该可能的实现方式中,通过配置的第二指令实现了并行判断待计算向量中是否存在标量数值处于正常状态,与通过多个指令实现相比,减少了向量计算过程中指令读取次数和访存事务数量;进一步减少了向量计算过程的耗时,降低了向量计算过程的功耗,提高了向量计算的效率。
结合第二方面或上述任一种可能的实现方式中,在另一种可能的实现方式中,该向量计算方法还可以包括:获取第一函数转换后的多项式系数向量;将待计算向量中处于正常状态的标量数值并行代入第一函数计算,得到待计算向量的第一函数的计算结果,包括:调用第三指令,执行并行对待计算向量中处于正常状态的标量数值和系数向量进行乘加计算,得到待计算向量中处于正常状态的标量数值的多项式值。在该可能的实现方式中,通过配置的第三指令实现了并行多项式计算,与通过多个指令实现相比,减少了向量计算过程中指令读取次数和访存事务数量;进一步减少了向量计算过程的耗时,降低了向量计算过程的功耗,提高了向量计算的效率。
结合第二方面或上述任一种可能的实现方式中,在另一种可能的实现方式中,该向量计算方法还可以包括:配置启动多组并联的ALU的指令,该并联的ALU用于执行并行操作。
结合第二方面或上述任一种可能的实现方式中,在另一种可能的实现方式中,规则条件可以包括下述一项或多项:是否大于最大阈值、是否小于最小阈值、是否为非数NaN、是否为负无穷、是否为正无穷。状态信息可以包括与每个规则条件项的对比结果。
第三方面,本申请提供另一种向量计算装置,该向量计算装置可以实现上述装置示例中的功能,所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个上述功能相应的模块。该向量计算装置可以以芯片的产品形态存在。
结合第三方面,在一种可能的实现方式中,该向量计算装置的结构中包括处理器和存储器,该处理器被配置为支持该向量计算装置执行上述方法中相应的功能。该存储器用于与处理器耦合,其保存该向量计算装置必要的程序指令和数据。
第四方面,提供了一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行上述任一方面或任一种可能的实现方式提供的向量计算方法。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一方面或任一种可能的实现方式提供的向量计算方法。
第六方面,本申请实施例提供了一种芯片系统,该芯片系统包括处理器,还可以包括存储器,用于实现上述方法中的功能。该芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。
其中,需要说明的是,上述各个方面中的任意一个方面的各种可能的实现方式,在方案不矛盾的前提下,均可以进行组合。
附图说明
图1为现有技术提供的一种标量数值的函数值计算流程示意图;
图2为现有技术提供的一种向量的函数值的计算流程示意图;
图3为本申请实施例提供的一种应用场景示意图;
图4为本申请实施例提供的一种向量计算装置的结构示意图;
图5为本申请实施例提供的另一种向量计算装置结构示意图;
图6为本申请实施例提供的另一种向量计算装置的结构示意图;
图7为本申请实施例提供的一种向量的状态信息的存储结构示意图;
图8为本申请实施例提供的一种向量的状态信息的存储结构示意图;
图9为本申请实施例提供的另一种向量计算装置的结构示意图;
图10为本申请实施例提供的一种处理单元与逻辑模块的连接结构示意图;
图11为本申请实施例提供一种确定单元与逻辑模块的连接结构示意图;
图12为本申请实施例提供的另一种确定单元与逻辑模块的连接结构示意图;
图13为本申请实施例提供的一种计算单元与逻辑模块的连接结构示意图;
图14为本申请实施例提供的一种向量计算方法的流程示意图。
具体实施方式
本申请说明书和权利要求书及上述附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于限定特定顺序。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念,便于理解。
在本申请的描述中,除非另有说明,“/”表示前后关联的对象是一种“或”的关系,例如,A/B可以表示A或B;本申请中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。并且,在本申请的描述中,除非另有说明,“多个”是指两个或多于两个。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
在本申请实施例中,至少一个还可以描述为一个或多个,多个可以是两个、三个、四个或者更多个,本申请不做限制。
为了便于理解,先对本申请涉及的名词进行解释。
标量数值,可以指量化后的数字或者数学表达。其中,可以将一个标量数值称为一个道(lane)。例如,标量数值可以为0,或者标量数值可以为
向量,可以指由多个标量数值组成的数学表达。
数学库的计算,可以指对数值(标量数值或者向量)进行数学函数计算,得到该数值对应的函数值的过程。
待计算向量,可以指需要进行函数计算的向量。其中,待计算向量可以包括多个标量数值。例如,待计算向量可以为[1,2,3,4]。
为了清楚说明数学库的计算过程,首先对数学库中一个标量数值的计算过程进行详细说明。图1示意了一种标量数值的函数值计算流程,用于计算标量数值H的函数M的值。其中,标量数值H可以为任何一个需要计算的数值,函数M可以为数学库中的任意一个函数。该过程可以包括S101至S103。
S101、检测标量数值H的状态。
S101可以实现为:先判断标量数值H是否为正无穷(infinitas,INF)或者负无穷,若标量数值H是正无穷或者负无穷,则认为标量数值H处于异常状态。若标量数值H不是正无穷且标量数值H不是负无穷,然后将标量数值H与用户设置的正常数值范围作比较,若标量数值H没有处于该正常数值范围内,则认为标量数值H处于异常状态,若标量数值H处于该正常数值范围内,则认为标量数值H处于正常状态。
若标量数值H处于正常状态,执行S102。若标量数值H处于异常状态,执行S103。
S102、计算标量数值H的函数M的值。
具体的,获取函数M转换后的多项式,然后将标量数值H代入该多项式,得到多项式的值,作为标量数值H的函数M的值。
S103、对标量数值H进行异常输出。
一种可能的实现方式中,S103中的异常输出可以指数学上或者数学库约定上函数M在输入为某种异常值时应输出的值。
例如,约定函数M在输入为正无穷时输出NaN,假设标量数值H为正无穷,在S103中可以输出NaN。
另一种可能的实现方式中,在S103中可以输出异常状态的标量数值H的函数M值的值。
例如,假如函数M为lnx,正常数值范围为:大于0。当标量数值H为0时,可以对标量数值H进行函数M计算,计算结果为负无穷,S103中可以输出负无穷。
需要说明的是,当异常状态的标量数值H无法进行函数M计算时,S103中可以输出约定值。例如,该约定值可以为NaN。
再一种可能的实现方式中,在S103中可以输出标量数值H及其对应的异常状态;或者,可以输出标量数值H异常。
例如,假设标量数值H为正无穷,输出结果可以为:标量数值H为正无穷。
再例如,假设标量数值H为正无穷,输出结果可以为:标量数值H输入异常。
当前,向量数学库中向量(包括多个标量数值)的函数值的计算过程可以如图2所示,包括下述S201至S203,用于计算向量I的函数N的值。其中,向量I可以为任何一个待计算的向量,向量I包括多个标量数值;函数N可以为数学库中的任意一个函数。
S201、检测向量I中每个标量数值的状态。
S201实现为:串行的检测向量I中每个标量数值的状态。
具体的,每个标量数值的检测过程可以参考S101,不再一一赘述。
进一步的,若向量I中每个标量数值均处于正常状态,执行S202;若向量I中存在标量数值处于异常状态,执行S203。
S202、计算向量I的函数N的值。
具体的,获取函数N进行幂级数转换后的多项式,然后将向量I中的每个标量数值分别代入该多项式,并行计算得到每个标量数值的多项式值,作为向量I的函数N的值。
例如,可以采用SIMD指令集中的相关指令计算向量I的多项式值,函数N转换后的多项式N为:y=a0+a1x+a2x2,其中,向量a为多项式N的系数向量,a=[a0 a1 a2]。采用SIMD指令集中的相关指令计算向量I的多项式值的过程可以包括:
VLD:A=a[2];
VMUL:Y=A*X;
VLD:A=a[1];
VFMA:Y=Y*X+A;
VLD:A=a[0];
VFMA:Y=Y*X+A。
其中,VLD为加载指令,VMUL为乘积指令,VFMA为乘加指令,当X的值为向量I,计算后的Y值为向量I的多项式值,也可以称为向量I的函数N的值。
S203、串行对向量I中的每个标量数值进行处理。
具体的,在S203中,分别串行计算向量I中处于正常状态的标量数值的函数N的值,其中,计算向量I中每个处于正常状态的标量数值的函数N的值的实现可以参考S102,不再一一赘述。
进一步的,S203中对向量I中处于异常状态的标量数值进行异常输出,对向量I中每个处于异常状态的标量数值进行异常输出的实现可以参考S103,不再一一赘述。
由上可知,现有的向量计算过程中,需要串行的检测向量中每个标量数值的状态,存在标量数值处于异常状态时,需要对向量中的各标量数值采用串行的处理方式(串行的计算或异常输出),使得向量计算过程中指令读取次数多、访存事务数量大,导致向量的计算耗时长,效率不高,功耗较大。
基于此,本申请实施例提供一种向量计算装置及方法,在向量计算时,并行检测向量中每个标量数值的状态;在向量中存在标量数值正常时,即并行对正常状态的标量数值进行函数计算,减少了向量计算过程中指令读取次数和访存事务数量;进一步减少了向量计算过程的耗时,降低了向量计算过程的功耗,提高了向量计算的效率。
下面将结合附图对本申请实施例的实施方式进行详细描述。
本申请实施例提供的方案可以应用于图3所示的应用场景中。如图3所示,该应用场景可以包括服务器301、管理员302。管理员302可以根据实际需求对服务器301进行管理。例如,管理员302可以直接将待计算向量输入至服务器301,服务器301对输入的向量进行处理(执行向量计算和/或异常处理),然后将结果输出。
可选的,该应用场景还可以包括终端设备303,管理员302可以通过终端设备303对服务器301进行管理。例如,管理员302可以通过终端设备303将待计算向量输入至服务器301,服务器301对输入的向量进行处理(执行向量计算和/或异常处理),然后将结果通过终端设备303进行输出。
其中,服务器301可以为处理器、计算机、物理服务器,或者云服务器,或者其他具有数据处理能力与存储能力的设备,本申请对此不予限定。
终端设备303可以为电脑、上网本、电视机、手机等具有输入与显示功能的电子设备。
下面结合附图,对本申请的实施例提供的方案进行具体阐述。
一方面,本申请实施例提供一种向量计算装置,该向量计算装置可以部署于图3所示的服务器301中,该向量计算装置可以为服务器301的部分或者全部。或者,该向量计算装置也可以单独部署,例如,向量计算装置为与服务器301可以通信的具有相关数据处理与存储能力的电子设备或者芯片系统。
图4示意了本申请实施例提供的一种向量计算装置40。如图4所示,向量计算装置40可以包括处理器401、存储器402以及收发器403。
下面结合图4对向量计算装置40的各个构成部件进行具体的介绍:
存储器402可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);或者非易失性存储器(non-volatile memory),例如只读存储器(read-only memory,ROM),快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);或者上述种类的存储器的组合,用于存储可实现本申请方法的程序代码、配置文件、数据信息或者其他内容。
收发器403用于向量计算装置40与其他设备的信息交互。
处理器401可以是向量计算装置40的控制中心。例如,处理器401可以是一个中央处理器(central processing unit,CPU),也可以是特定集成电路(application specificintegrated circuit,ASIC),或者是被配置成实施本申请实施例的一个或多个集成电路,例如:一个或多个微处理器(digital singnal processor,DSP),或,一个或者多个现场可编程门阵列(field programmable gate array,FPGA)。
具体的,处理器401可以通过运行或执行存储在存储器402内的软件程序和/或模块,执行如下功能:
获取待计算向量和第一函数,待计算向量包括多个标量数值;并行将待计算向量的标量数值分别与规则条件对比,得到待计算向量中每个标量数值的状态信息;其中,规则条件用于判断标量数值是否正常,一个标量数值的状态信息用于指示一个标量数值与规则条件对比处于正常状态或者异常状态;确定待计算向量中存在标量数值处于正常状态;将待计算向量中处于正常状态的标量数值并行代入第一函数计算,得到待计算向量的第一函数的计算结果。
需要说明的是,完成向量计算的系统框架可以根据实际情况进行配置,本申请不作具体限定。
图5示意了本申请实施例提供的另一种向量计算装置50。如图5所示,该向量计算装置50可以包括:取指单元51、第一指令译码单元52、第二指令译码单元53、源寄存器54、第一ALU 55、第二ALU 56、访存单元57以及目标寄存器58。
其中,取指单元51,用于读取待执行的指令。
第一指令译码单元52,用于根据标准指令生成硬件控制信号,读取源寄存器54中的内容。
第二指令译码单元53,用于根据自定义的数学库相关指令(例如,本申请实施例中的第一指令)生成硬件控制信号,读取源寄存器54中的内容。
源寄存器54,用于存储向量计算的相关源数据。例如,源寄存器54可以用于存储待计算向量的多个标量数值。
第一ALU 55,用于执行标准指令对应的算术逻辑计算,以及访存地址计算。
第二ALU 56,用于执行自定义的数学库相关指令对应的算术逻辑计算(各并行操作),以及访存地址计算。
访存单元57,用于发出访存请求。
目标寄存器58,用于存储计算或访存结果。
其中,如图5所示,向量计算装置50完成向量计算的过程可以包括5个阶段,分别为:取指阶段501、译码阶段502、执行阶段503、访存阶段504和写回阶段505。
其中,取指阶段501:取指单元51读取待执行的指令。
译码阶段502:第一指令译码单元52与第二指令译码单元53根据指令生成硬件控制信号,读取源寄存器54中的内容。
执行阶段503:第一ALU 55与第二ALU 56执行指令对应的算术逻辑计算,访存地址计算。
访存阶段504:访存单元57发出访存请求。
写回阶段505:将计算或访存结果写回目标寄存器58。
另一方面,本申请实施例提供另一种向量计算装置,图6为本申请实施例提供的向量计算装置60的结构示意图。图6所示,该向量计算装置60可以包括:逻辑模块601、获取单元602、处理单元603、确定单元604和计算单元605。
该向量计算装置60中配置的逻辑模块601可以包括多组并联的ALU,向量计算装置60可以通过调用指令,以启动逻辑模块601中的多组并联的ALU,进行并行的操作。
可选的,逻辑模块601可以包括多个逻辑子模块,每个逻辑子模块分别包括并联的ALU,不同逻辑子模块可以通过调用指令,以启动自身包括的并联的ALU,不同逻辑子模块可以进行不同的并行操作。一个逻辑子模块包括的并联的ALU为逻辑模块601中的多组并联的ALU的子集。
例如,逻辑模块601可以包括第一逻辑子模块、第二逻辑子模块及第三逻辑子模块。其中,第一逻辑子模块、第二逻辑子模块及第三逻辑子模块分别包括并联的ALU,分别用于执行不同的并行操作(实现不同功能)。第一逻辑子模块包括的并联的ALU可以为逻辑模块601中的多组并联的ALU的子集,第二逻辑子模块包括的并联的ALU可以为逻辑模块601中的多组并联的ALU的子集,第三逻辑子模块包括的并联的ALU可以为逻辑模块601中的多组并联的ALU的子集。
其中,获取单元602,用于获取待计算向量和第一函数。
处理单元603,用于通过逻辑模块601中的多组并联的ALU,并行将待计算向量的标量数值分别与规则条件对比,得到待计算向量中每个标量数值的状态信息。
其中,规则条件用于判断标量数值是否正常。
具体的,用户可以根据实际需求对规则条件的内容进行配置,本申请对此不予限定。
一种可能的实现方式中,规则条件可以包括下述一项或多项:是否大于最大阈值、是否小于最小阈值、是否为NaN、是否为负无穷、是否为正无穷。
另一种可能的实现方式中,规则条件可以为:是否属于规定范围内。例如,规则条件可以为:是否大于或等于0。
其中,一个标量数值的状态信息用于指示一个标量数值与规则条件对比处于正常状态或者异常状态。
具体的,状态信息可以包括与每个规则条件项的对比结果。状态信息可以包括多个状态类型,状态信息中的一个状态类型对应规则条件的一项。
其中,状态信息的具体存储结构可以见下述例子A与例子B。
例子A,图7示意了一种向量的状态信息的存储结构。其中,该向量包括4个lane(lane0、lane1、lane2、lane3),4个lane的状态信息分别存储于固定的位置。每个lane(标量数值)的状态信息包括5个状态类型(状态位),分别为:LO、HI、NaN、IN、IP。LO表示标量数值是否小于最小阈值,HI表示标量数值是否大于最大阈值、NaN表示标量数值是否为非数、IN表示标量数值是否为负无穷、IP表示标量数值是否为正无穷。其中,状态位的内容为0时,表示否定该状态位的描述;状态位的内容为1时,表示肯定该状态位的描述;即若一个标量数值的状态信息中的LO状态位的内容为1,则表示该标量数值小于最小阈值;若一个标量数值的状态信息中的LO状态位的内容为0,则表示该标量数值大于最小阈值。
具体的,当标量数值的状态信息以图7所示的结构存储时,若一个标量数值的状态信息中存在一个或多个状态位的内容为1,则表示该标量数值处于异常状态;若一个标量数值的所有状态类型的内容均为0,则表示该标量数值处于正常状态。
例子B,向量的状态信息的存储结构还可以如图8所示。图8所示的状态信息在图7所示的状态信息结构上增加了状态标识位Y,Y用于直接表示对应的标量数值处于正常状态(1)或者处于异常状态(0)。具体的,若一个标量数值的状态信息中存在一个或多个状态位的内容为1,则直接将状态标识位Y置0,表示该标量数值处于异常状态;若一个标量数值的所有状态位的内容均为0,则直接将状态标识位Y置1,表示该标量数值处于正常状态。
确定单元604,用于确定待计算向量中存在标量数值处于正常状态。
计算单元605,用于将待计算向量中处于正常状态的标量数值并行代入第一函数计算,得到待计算向量的第一函数的计算结果。
可选的,第一函数为待计算向量要参与的计算,本文所称的第一函数可以为第一函数的表达式,或者也可以为第一函数转换后的多项式,或者其他,本申请实施例对此不予限定。
进一步的,如图9所示,向量计算装置60还可以包括配置单元606,用于配置启动逻辑模块601中的多组并联的ALU的指令,该指令可以指示启动逻辑模块601中的部分或全部ALU。
进一步的,如图9所示,向量计算装置60还可以包括输出单元607,用于输出待计算向量的第一函数的计算结果。
可选的,输出单元607还可以用于,在待计算向量中存在处于异常状态的标量数值时,对待计算向量中处于异常状态的标量数值进行异常输出。
需要说明的是,输出单元607的具体实现可以参考S203的实现,不再一一赘述。
下面对各个单元进行具体描述。
获取单元602获取的待计算向量可以包括多个标量数值。第一函数为待计算向量参与的计算,本申请对于第一函数的类型及形式不予限定。
具体的,获取单元602可以获取用户输入的向量、函数,分别作为待计算向量、第一函数;或者获取某个计算过程中的指定的向量、函数,分别作为待计算向量、第一函数;或者通过其他方式获取向量和函数,分别作为待计算向量、第一函数。本申请对此不予具体限定。
进一步的,若第一函数是可以转换为多项式的函数,获取单元602还可以用于获取第一函数转换后的多项式系数向量。
示例性的,程序开发阶段可以将第一函数进行幂级数转换(切比雪夫多项式转换或者有理函数近似或者其他转换)为多项式,将转换后的多项式系数存储于指定的寄存器中。获取单元602可以直接在指定的寄存器中获取第一函数转换后的多项式系数向量。其中,第一函数转换后的多项式可以以系数向量的形式存储于寄存器中,当然也可以为其他形式,本申请不予限定。
一种可能的实现方式中,配置单元606可以用于配置第一指令,该第一指令可以用于指示启动逻辑模块601中第一指令对应的并联的ALU,以执行并行将待计算向量的标量数值分别与规则条件对比,得到待计算向量中每个标量数值的状态信息。
其中,当逻辑模块601中包括的多组并联的ALU被多个指令所复用,第一指令对应的并联的ALU即逻辑模块601中包括的多组并联的ALU。当逻辑模块601中包括与不同指令对应的不同的逻辑子模块,则第一指令用于指示启动逻辑模块601中第一指令对应的第一逻辑子模块中的并联的ALU。
相应的,处理单元603具体可以用于:调用第一指令,以启动逻辑模块601中多组并联的ALU,通过逻辑模块601中多组并联的ALU,并行将待计算向量的标量数值分别与规则条件对比,得到待计算向量中每个标量数值的状态信息。
例如,图10示意了处理单元603与逻辑模块601的连接结构。假设规则条件包括:是否大于最大阈值、是否小于最小阈值、是否为NaN、是否为负无穷、是否为正无穷。如图10所示,处理单元603可以包括第一向量寄存器1001、第二寄存器1002、第三寄存器1003和第四向量寄存器1004。其中,第一向量寄存器1001、第二寄存器1002、第三寄存器1003为输入寄存器,第四向量寄存器1004为输出寄存器。第一向量寄存器1001用于存储待计算向量中的多个标量数值。第二寄存器1002用于存储规则条件中的最小阈值、第三寄存器1003用于存储规则条件中的最大阈值。第四向量寄存器1004用于存储比较结果(待计算向量中每个标量数值的状态信息)。
其中,上述第二寄存器1002、第三寄存器1003可以为向量寄存器,也可以为标量寄存器,本申请实施例对于第二寄存器1002、第三寄存器1003的类型不予限定。
具体的,图10中的虚线框为逻辑单元601中包括第一指令对应的多组并联的ALU。如图10所示,处理单元603调用第一指令,启动逻辑模块601中第一指令对应的多组并联的ALU,将正无穷、负无穷、NaN、最小阈值、和最大阈值分别输入第一指令对应的多组并联的ALU中不同的ALU,作为每个ALU的参考值,然后将待检测向量中的每个标量数值输入第一指令对应的多组并联的ALU中每个ALU,每个ALU将输入其中的标量数值与自身的参考值做比较输出结果,第一指令对应的多组并联的ALU并行操作,实现了并行将待检测向量中的每个标量数值分别与正无穷、负无穷、NaN、最小阈值、和最大阈值作比较,得到每个标量数值的比较结果(是否大于最大阈值、是否小于最小阈值、是否为NaN、是否为正无穷以及是否为负无穷),作为待计算向量中每个标量数值的状态信息,存储于第四向量寄存器1004中。
需要说明的是,在处理单元603的处理过程中,若逻辑模块中包括的并联的ALU的组数小于规则条件的项数时(例如,在图10对应的例子中,逻辑模块中包括的并联的ALU的组数小于5时),处理单元603可以采用多周期复用的方式实现相应的功能。
其中,判断条件可以根据用户的实际需求进行配置,本申请不做具体限定。例如,判断条件为,至少一个标量数值处于正常状态,或者不存在标量数值处于异常状态。
另一种可能的实现方式中,配置单元606还可以用于配置第二指令,该第二指令可以用于指示启动逻辑模块601中第二指令对应的并联的ALU,以执行将待计算向量中每个标量数值的状态信息与判断条件对比,确定待计算向量中存在标量数值处于正常状态。
其中,当逻辑模块601中包括的多组并联的ALU被多个指令所复用,第二指令对应的并联的ALU即逻辑模块601中包括的多组并联的ALU。当逻辑模块601中包括与不同指令对应的不同的逻辑子模块,则第二指令用于指示启动逻辑模块601中第二指令对应的第二逻辑子模块中的并联的ALU。
相应的,确定单元604可以用于:调用第二指令,以启动逻辑模块601中多组并联的ALU,通过逻辑模块601中多组并联的ALU,并行将待计算向量中每个标量数值的状态信息与判断条件对比,确定待计算向量中存在标量数值处于正常状态。
其中,确定单元604与逻辑模块601的连接结构可以包括下述例子1与例子2。
例子1、针对图7所示的状态信息的存储结构,图11示意了一种确定单元604与与逻辑模块601的连接结构。如图11所示,确定单元604可以包括:状态寄存器1101、状态条件、判断条件和目标地址。状态寄存器1101用于存储待计算向量中每个标量数值的状态信息。例如,状态寄存器可以为第一指令的输出向量寄存器。状态条件用于选择查询的一个或多个状态类型;具体的,将状态条件设置为遍历每一个状态类型。判断条件为至少一个标量数值处于正常状态。目标地址用于指示计算单元605开始相应的操作。
具体的,图11中的虚线框为逻辑单元601中包括第二指令对应的多组并联的ALU。如图11所示,确定单元604调用第二指令,启动逻辑模块601中第二指令对应的多组并联的ALU,分别读取状态寄存器中的每个标量数值在所有状态类型的信息,得到待计算向量中每个标量数值的状态(异常或者正常),然后判断得到的待计算向量中每个标量数值的状态是否与判断条件相符合,确定得到的待计算向量中至少一个标量数值处于正常状态时,指示计算单元605开始相应的操作。
例子2、针对图8所示的状态信息的存结构,图12示意了另一种确定单元604与逻辑模块601的连接结构。如图12所示,确定单元604可以包括:状态寄存器1201、判断条件和目标地址。状态寄存器1201用于存储待计算向量中每个标量数值的状态信息。例如,状态寄存器为第一指令的输出向量寄存器。判断条件为至少一个标量数值处于正常状态。目标地址用于指示计算单元605开始相应的操作。
具体的,图12中的虚线框为逻辑单元601中包括第二指令对应的多组并联的ALU。如图12所示,确定单元604调用第二指令,启动逻辑模块601中第二指令对应的多组并联的ALU,分别读取状态寄存器中的每个标量数值的状态信息中的状态标识位的内容,得到待机算下向量中每个标量数值的状态(异常或者正常),然后判断得到的待计算向量中每个标量数值的状态是否与判断条件相符合,确定得到的待计算向量中至少一个标量数值处于正常状态时,指示计算单元605开始相应的操作。
再一种可能的实现方式中,配置单元606还可以用于配置第三指令,该第三指令可以用于指示启动逻辑模块601中第三指令对应的并联的ALU,以执行并行对待计算向量中处于正常状态的标量数值和系数向量进行乘加计算,得到待计算向量中处于正常状态的标量数值的多项式值。
其中,当逻辑模块601中包括的多组并联的ALU被多个指令所复用,第三指令对应的并联的ALU即逻辑模块601中包括的多组并联的ALU。当逻辑模块601中包括与不同指令对应的不同的逻辑子模块,则第三指令用于指示启动逻辑模块601中第三指令对应的第三逻辑子模块中的并联的ALU。
相应的,计算单元605具体可用于:调用第三指令,以启动逻辑模块601中多组并联的ALU,通过逻辑模块601中多组并联的ALU,并行对待计算向量中处于正常状态的标量数值代入第一函数计算,得到待计算向量中处于正常状态的标量数值的第一函数值。
例如,当第一函数可以转换为多项式时,计算单元605具体可用于:调用第三指令,以启动逻辑模块601中多组并联的ALU,通过逻辑模块601中多组并联的ALU,并行对待计算向量中处于正常状态的标量数值和系数向量进行乘加计算,得到待计算向量中处于正常状态的标量数值的多项式值。其中,系数向量为获取单元602获取的系数向量。
例如,图13示意了计算单元605与逻辑模块601的连接结构。如图13所示,计算单元605可以包括第五向量寄存器1301、第六向量寄存器1302、第七向量寄存器1303。其中,第五向量寄存器1301、第六向量寄存器1302为输入寄存器,第七向量寄存器1303为输出寄存器。第五向量寄存器1301用于存储待计算向量中的处于正常状态的标量数值、第六向量寄存器1302用于存储系数向量(例如,该系数向量为[a0 a1 a2 a3]),第七向量寄存器1303用于存储计算结果(待计算向量中处于正常状态的标量数值的第一函数值)。
具体的,图13中的虚线框为逻辑单元601中包括第三指令对应的多组并联的ALU。如图13所示,处理单元603调用第一指令,启动逻辑模块601中多组并联的ALU,通过逻辑模块中多组并联的ALU,将待计算向量中的处于正常状态的标量数值与获取单元602获取的系数向量,分别输入第三指令对应的多组并联的ALU中,并行进行乘加运算,得到待计算向量中处于正常状态的标量数值的第一函数值,作为待计算向量的第一函数的计算结果,存储于输出向量寄存器(第七向量状态寄存器1303)中。
通过本申请实施例提供一种向量计算装置,在向量计算时,并行检测向量中每个标量数值的状态;在向量中存在标量数值正常时,即并行对正常状态的标量数值进行函数计算,减少了向量计算过程中指令读取次数和访存事务数量;进一步减少了向量计算过程的耗时,降低了向量计算过程的功耗,提高了向量计算的效率。
下面以计算向量A的函数f(x)值为例,对本申请实施例提供的向量计算装置在进行向量计算时,各单元功能的实现进行详细说明。
首先,获取单元获取向量A,以及函数f(x)转换后的多项式系数向量。
其中,A=[2 36 98996475 12];对f(x)进行幂级数展开后的多项式为f(x)=a0+a1x+a2x2+a3x3。具体的,a0=1,a1=1,a2=0,a3=1,所以获取的多项式系数向量为[1 1 01]。
然后,处理单元调用第一指令,启动逻辑模块中多组并联的ALU,通过逻辑模块中多组并联的ALU,并行将向量A的标量数值分别与规则条件对比,得到向量A中每个数值的状态信息。
其中,规则条件为:是否大于最大阈值(100000)、是否小于最小阈值(-100000)、是否为NaN、是否为正无穷、是否为负无穷。
具体的,数值2与各对比值比较后,得到数值2不大于最大阈值(100000)、数值2不小于最小阈值(-100000)、数值2不属于NaN、数值2不属于正无穷、数值2不属于负无穷,进一步得到数值2处于正常状态;同时,得到向量A中的数值36和数值12也处于正常状态;同时,也可以得到向量A中的数值98996475大于最大阈值(100000),进一步得到数值98996475处于异常状态。
确定单元确定向量A中的存在三个数值(数值2、数值36、数值12)处于正常状态,A中的存在一个数值(数值98996475)处于异常状态。
配置单元配置第三指令。
计算单元,通过配置的第三指令,并行计算(数值2、数值36、数值12)的函数值。具体的,将A=[2 36/12]与系数向量为[1 1 0 1]进行乘加计算,得到的多项式值为[1146693/1741]。
输出单元输出多项式值[11 46693/1741],输出98996475大于最大阈值。
另一方面,本申请实施例提供一种向量计算方法,该方法可以由前述向量计算装置执行。如图14所示,该方法可以包括:
S1401、向量计算装置获取待计算向量和第一函数。
其中,S1401的实现过程可以参考前述获取单元602的具体实现,此处不再一一赘述。
S1402、向量计算装置并行将待计算向量的标量数值分别与规则条件对比,得到待计算向量中每个标量数值的状态信息。
其中,S1402的实现过程可以参考前述配置单元606、处理单元603的具体实现,此处不再一一赘述。
S1403、向量计算装置确定待计算向量中存在标量数值处于正常状态。
其中,S1403的实现过程可以参考前述配置单元606、确定单元604的具体实现,此处不再一一赘述。
S1404、向量计算装置将待计算向量中处于正常状态的标量数值并行代入第一函数计算,得到待计算向量的第一函数的计算结果。
其中,S1404的实现过程可以参考前述配置单元606、计算单元605的具体实现,此处不再一一赘述。
进一步的,如图14所示,本申请实施例提供的向量计算方法还可以包括:
S1405、向量计算装置将待计算向量的第一函数的计算结果输出。
进一步的,如图14所示,本申请实施例提供的向量计算方法还可以包括:
若待计算向量中存在标量数值处于异常状态,对处于异常状态的标量数值执行S1406。
若待计算向量中不存在处于异常状态的标量数值,执行完S1405后结束流程。
S1406、向量计算装置对待计算向量中处于异常状态的标量数值进行异常输出。
需要说明的是,S1406的具体实现可以参考S103,不再一一赘述。
需要说明的是,本申请对于S1401到S1406的执行顺序不作具体限定,用户可以根据实际需求对执行顺序进行配置与调整。例如,S1406可以在S1404之前执行,S1406也可以在S1404之后执行,或者S1406还可以在在S1405之后执行。
作为本实施例的另一种形式,提供一种计算机可读存储介质,其上存储有指令,该指令被执行时执行上述方法实施例中的向量计算方法。
作为本实施例的另一种形式,提供一种包含指令的计算机程序产品,该指令被执行时执行上述方法实施例中的向量计算方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
- 上一篇:石墨接头机器人自动装卡簧、装栓机
- 下一篇:随机数种子生成器及其方法