实现函数的方法、图形处理装置、系统和介质与流程

文档序号:28280372发布日期:2021-12-31 21:27阅读:186来源:国知局
实现函数的方法、图形处理装置、系统和介质与流程

1.本技术涉及人工智能(ai)和通用计算领域,且更具体地,涉及一种在处理器中采用硬件模块实现sigmoid(x)函数的计算方法、图形处理装置、系统和计算机可读介质。


背景技术:

2.在实时图形处理、数字信号处理、人工神经网络等领域中,经常需要对非线性函数进行高速计算。其中,在人工神经网络中需要进行大量的非线性函数的计算。因此,研究如何高速地处理非线性函数具有十分重要的意义。在人工神经网络中最为广泛应用的非线性函数是sigmoid函数。
3.sigmoid函数的表达式为 1/(1+



), 是机器学习中比较常见的,通常用于人工神经网络的激活函数的应用场景。图1示出了sigmoid函数的函数图像的示意图。如图1所示,sigmoid函数的取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。在特征相差比较复杂或是相差不是特别大时效果比较好。它的优点是平滑、易于求导。但是,缺点是计算量比较大。
4.现代的图形处理单元(graphics processing unit,gpu)中基本上没有实现单独计算sigmoid函数的硬件逻辑模块。
5.需要设计单独且高效精确计算sigmoid函数的硬件逻辑模块。


技术实现要素:

6.根据本技术的一个方面,提供一种在处理器中采用硬件模块实现sigmoid(x)函数的计算方法,其中x是实数,所述方法包括:从硬件模块中的查表逻辑硬件获得sigmoid(x)函数的查找表格,其中所述sigmoid(x)函数的查找表格是至少按照如下方式建立的:对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格;接收输入x;基于输入的x和所述查表逻辑硬件中存储的sigmoid(x)函数的查找表格来输出sigmoid(x)函数的计算结果。
7.根据本技术的另一方面,提供一种图形处理装置,采用硬件模块实现sigmoid(x)函数的计算,其中x是实数,该图形处理装置包含:查表逻辑硬件,被配置为存储至少按照如下方式建立的sigmoid(x)函数的查找表格:对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格;输入模块,被配置为接收输入x;输出模块,被配置为基于输入的x和所述查表逻辑硬件中存储的sigmoid(x)函数的查找表格来输出sigmoid(x)函数的计算结果。
8.根据本技术的另一方面,提供一种在处理器中采用硬件模块实现sigmoid(x)函数的计算系统,包括:处理器;存储器,存储了计算器可执行指令,其被处理器运行时进行如本技术的各个实施例的在处理器中采用硬件模块实现sigmoid(x)函数的计算方法。
9.根据本技术的另一方面,提供一种计算机可读介质,存储有计算机可读指令,其中当所述计算机可读指令由处理器运行时,进行如本技术的各个实施例的在处理器中采用硬
件模块实现sigmoid(x)函数的计算方法。
10.根据本技术的另一方面,提供一种在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法,包括:对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格;存储所述sigmoid(x)函数的查找表格。
11.根据本技术的另一方面,提供一种在处理器中采用硬件模块实现sigmoid(x)函数的计算系统,包括:处理器;存储器,存储了计算器可执行指令,其被处理器运行时进行如本技术的各个实施例的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法。
12.根据本技术的另一方面,提供一种计算机可读介质,存储有计算机可读指令,其中当所述计算机可读指令由处理器运行时,进行如本技术的各个实施例的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法。
13.如此,设计了单独且高效精确计算sigmoid函数的硬件逻辑模块,使得在图形处理单元gpu中能够集成该硬件逻辑模块加速应用于多种应用场景的sigmoid函数计算。
附图说明
14.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
15.图1示出了sigmoid函数的函数图像的示意图。
16.图2示出了根据本技术的实施例的在处理器中采用硬件模块实现sigmoid(x)函数的计算方法的流程图。
17.图3示出了在处理器中在特殊函数单元sfu中实现sigmoid(x)函数的计算的硬件结构。
18.图4示出了根据本技术的实施例的一种图形处理装置的方框图。
19.图5示出了适于实现根据本技术实施方式的在处理器中采用硬件模块实现sigmoid(x)函数的计算方法的示例性计算机系统的框图。
20.图6示出了根据本公开的实施例的在处理器中采用硬件模块实现sigmoid(x)函数的计算方法的非暂时性计算机可读存储介质的示意图。
21.图7a是根据本技术的实施例的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法的流程图。
22.图7b是根据本技术的另一实施例的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法的流程图。
23.图8示出了适于用来实现本技术实施例的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法的示例性计算机系统的框图。
24.图9示出了根据本公开的实施例的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法的非暂时性计算机可读存储介质的示意图。
具体实施方式
25.现在将详细参照本技术的具体实施例,在附图中例示了本技术的例子。尽管将结
合具体实施例描述本技术,但将理解,不是想要将本技术限于描述的实施例。相反,想要覆盖由所附权利要求限定的在本技术的精神和范围内包括的变更、修改和等价物。应注意,这里描述的方法步骤都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被实现为物理实体或逻辑实体、或者两者的组合。
26.图形处理单元gpu是一种在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上专门做图像和图形相关运算工作的微处理器。其可以减轻中央处理单元cpu的图形处理运算负担。中央处理单元cpu的设计主要以逻辑处理和计算为主。与中央处理单元cpu不同,图形处理单元gpu主要是处理大批量相似但又逻辑无关的数据集合(如:顶点数据,像素数据),因此图形处理单元gpu的设计更适合大规模并行处理图形或图像数据。
27.为了大规模并行处理图形或图像数据,图形处理单元gpu中采用基本处理单元——流处理器(streaming process,sp)。流(stream)是一系列顺序执行的命令,各个流之间相对无序或并发地执行它们的命令。具体的指令和任务都是在流处理器上处理的。图形处理单元gpu进行并行计算,也就是很多个流处理器同时做处理。一个流处理器可以对应一个线程。多个流处理器加上其他的一些资源(例如存储资源、共享内存、寄存器等)组成一个流多处理器(streaming multiprocessor,sm)。一个流多处理器sm中的所有流处理器sp共享同一个内存和指令单元。
28.每个流多处理器通过使用两个特殊函数单元(special function unit, sfu)单元进行超越函数和属性插值函数(根据顶点属性来对像素进行插值)的计算。特殊函数单元sfu用来执行超越函数、插值以及其他特殊运算。
29.由于现在的图形处理单元gpu需要处理越来越多的计算任务,来应用于各种应用场景,例如利用图形处理单元gpu来执行人工神经网络以处理图像的场景。在这些场景中,例如人工神经网络中大量应用了激活层中的激活函数。常用的激活函数,比如sigmoid函数、tanh函数、relu函数等。但是其中sigmoid函数由于其曲线特征,可以将输入的图像相关值或其他输入值输出为0到1之间的数,可作为分类的正例和负例,因此不仅可以应用于神经网络的激活函数的应用场景中,还可广泛地应用于其他图像识别、分类和回归的各种应用场景中。然而,现代的图形处理单元gpu中基本上没有实现单独计算sigmoid函数的硬件逻辑模块,而是采用软件方式实时运算来实现,其计算量巨大且精度不一。
30.对于一些超越函数,例如求倒数、2的n次方等等,图形处理单元gpu通常是通过特殊函数单元 (special function unit,sfu)硬件逻辑来实现。它基于查找表格的多项式拟合法,一般采用泰勒级数展开到2阶导数,即:f(x)=f(x0)/0!+f’(x0)*(x

x0)/1!+f
’’
(x0)*(x

x0)2/2!
……
公式1对于硬件而言,展开式简化成:f(x)=a+b(x

x0)+c(x

x0)2ꢀꢀ……
公式2其中a、b、c为参数。对合适的小区间例如 (0,1] 进行均匀或者非均匀采样,每个采样点

0计算出参数a、b、c,并将它们存储在查找表格中。这是纯软件建表行为,对硬件来说是不可见的。对于任意浮点数,硬件可以先将浮点数转化到小区间,再从查找表格中取出相应的参数a、b、c进行定点乘加,从而求出拟合的结果。
31.查找表格可以由软件实现准备好,并输入一个随机存取存储器(ram)。这对硬件是完全透明的。在事先将输入数据和输出数据写入随机存取存储器ram作为查找表格后,硬件
只要针对输入的x计算表的索引或地址,再查找该查找表格中的表项作为a、b或c。即每当输入一个信号(例如x的值)就等于输入一个地址进行查表,找出该地址对应的内容(即函数计算的结果),然后输出该内容。如此,可以简化硬件的计算过程,不需要在每次输入x时重新进行一遍完整的计算,而是硬件可以通过对输入x来在查找表格中进行查找,以直接得到查找表格的输出结果。
32.现代的图形处理单元gpu也没有在特殊函数单元sfu里实现计算sigmoid函数, 所以只能靠其他的向量(vector)的算术逻辑运算单元(alu)指令和特殊函数单元sfu指令来模拟实现。
33.例如,对于sigmoid函数, 图形处理单元gpu编译器会变成如下指令序列:fmul rd, rx,
ꢀ‑
1.44269502 //vector指令,将e

x
转换成2
y
exp rd, rx // 利用特殊函数单元sfu的以自然常数2为底的指数函数(exp函数),对y求2
y
fadd rd, 1, rx // 向量vector指令,求 1+2
y
rcp rd, rx // 利用sfu的倒数rcp函数,求得sigmoid函数的最后结果由此可见,靠其他的向量(vector)的算术逻辑运算单元(alu)指令和特殊函数单元sfu指令来模拟实现sigmoid函数时,需要编译成4条指令,其中有两条特殊函数单元sfu指令,延时会变得很长(大多数特殊函数单元sfu指令需要几十个时钟周期的延迟)。并且每条指令(除了第一条)与它的前一条都有依赖性,即需要完成前一条指令之后才能开始执行这一条指令,从而不仅增加硬件延迟,降低了计算效率,也增加了编译器的复杂性。
34.如果要在特殊函数单元sfu里实现sigmoid函数,它的复杂度很高:sigmoid函数没有办法像其他函数那样可以转化到某一个小的区间例如(0,1]、再基于小区间查找表格来只需很少的表项来覆盖所有的浮点数区间。也就是说,sigmoid函数需要用很多的表项在所难免。
35.由于y=sigmoid(x)的导数可以写成与x无关的表达形式:一阶导数y’=y(1

y)
ꢀꢀꢀꢀꢀꢀ…
公式3二阶导数y
’’
=y(1

y)(1

2y)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ…
公式4三阶导数y
’’’
=y(1

y)(1

6y+6y2)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ…
公式6当x取较小的数,例如x=

16时, y≈y
’ꢀ
≈y
’’ꢀ
≈y
’’’ꢀ
≈1.125351e

7,也约等于0。那么这个特性导致特殊函数单元sfu内统一的参数a、b、c 的比特宽度就完全不够用了:10的负7次方最少需要24个比特才能不表示出0。 那么a(14b)、b(9b)、c(3b)就将全是0(即,14比特宽度的a、9比特宽度的b和3比特宽度的c就只会表示出0)。
36.即使对参数a、b、c多加20

30个比特来表示,扩展成(a+bx+cx2)*2
n
的形式,也不会有效。
37.即使用中央处理单元(cpu)计算sigmoid函数的泰勒级数展开式到3阶导数,与中央处理单元cpu直接计算sigmoid函数对比,仍然都会有很大误差,用泰勒级数展开到2阶导数来用图形处理单元gpu计算的误差会更大。
38.以上问题的根本原因在于当x取较小负数时,y约等于y的一阶导数y’、且约等于y的二阶导数y
’’
甚至约等于y的三阶导数y
’’’
,进而约等于0。
39.本技术的发明人根据sigmoid函数的特性,结合图形处理单元gpu内部特殊函数单
元sfu模块的设计,在特殊函数单元sfu内部实现了高效且精确计算sigmoid函数的硬件逻辑。如此,使得具备sigmoid函数计算能力的硬件逻辑的图形处理单元gpu不仅可以应用于神经网络的激活函数的应用场景,还可广泛地应用于其他图像识别、分类和回归的各种应用场景。
40.图2示出了根据本技术的实施例的在处理器中采用硬件模块实现sigmoid(x)函数的计算方法200的流程图。
41.如图2所示,一种在处理器中采用硬件模块实现sigmoid(x)函数的计算方法200(其中x是实数)方法包括:步骤201,从硬件模块中的查表逻辑硬件获得sigmoid(x)函数的查找表格,其中sigmoid(x)函数的查找表格是至少按照如下方式建立的:步骤2011,对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格;步骤202,接收输入x;步骤203,基于输入的x和查表逻辑硬件中存储的sigmoid(x)函数的查找表格来输出sigmoid(x)函数的计算结果。
42.由于当x较小时,1/(1+e

x
)≈ e
x
,因此可以当x较小时用指数函数来代替,例如用e
x
或2
x*b 来代替sigmoid(x)函数。其中,e和2之间存在数学关系,已知e是一个无限不循环小数,其值约等于2.718281828459, 所以e可以约等于 2的1.44269502次方(当然这里的次方数的小数点后可以取预定数量,而不限于上述举例的8位)。所以,这里的b可以约等于1.44269502,因此b可以取保留小数点后预定数量的数,当然这里的小数点后的预定数量也不限于上述举例的8位,也可以根据精度和硬件性能选择其他位。注意,只有在x为负数且越小时,两者函数值越接近。例如,这里的“x小于或等于预定负数”中的预定负数可以是4,当然也可以是其他值,只要小于这个预定负数就可以用观察到e
x
和sigmoid(x)函数的值很接近,能够e
x
或2
x*b 的指数函数来代替sigmoid(x)函数。
43.由于软件对指数函数通常已经建立了查找表格。如此,在本技术的实施例中对于x小于或等于预定负数的区间,只需要复用在特殊函数单元sfu中已经存在的以2为底的指数exp查找表格,就可以作为sigmoid(x)函数的查找表格,以将其构造在查找逻辑硬件中。在此,编译器可以先用一条向量指令把 e
x 转换成2
x*1.44269502 ,然后再使用作为指数查找表格的sigmoid(x)函数的查找表格来进行查表。原因是如果在特殊函数单元sfu内部计算x*1.44269502再复用以2为底的exp表格,会增加特殊函数单元sfu的管线(pipeline)的深度和延迟。再用一条特殊函数单元sfu指令来查找sigmoid(x)函数的查找表格,得到计算的结果。而且复用现有技术中已经存在的以2为底的指数exp表格,因此减少了软件通过采样和计算来重新建立查找表格的复杂性和成本,且减少了装载表格的只读存储器rom的空间。
44.如此,只需要两条指令,就极大地减少了计算1/(1+e

x
)的如前的四条指令,提高了硬件执行效率,减少了硬件执行延迟,且减少了编译器的复杂性。
45.注意,这里的输入x可以是神经网络中的神经元输入的x,也可以是图像处理中的输入的像素值x,或在其他应用场景中需要计算sigmoid(x)函数的输入x。
46.在一个实施例中,sigmoid(x)函数的查找表格还可以按照如下方式建立:步骤2012,对于x小于或等于0且大于预定负数的区间,划分x的多个子区间,并对多个子区间按各自的采样个数对x进行均匀采样或指数采样并计算sigmoid(x)函数的结果,以建立x和sigmoid(x)函数的结果的查找表格;步骤2013,对于x大于0的区间,根据sigmoid(x) +sigmoid(

x)=1的特性,基于x小
于或等于0的区间的sigmoid(x)函数的查找表格来建立sigmoid(x)函数的查找表格。
47.在这里,在步骤2013中,由于 sigmoid(x) +sigmoid(

x)=1,因此只需要对x≤0 的区间建表。对于右边 x>0 区间的函数值,通过 sigmoid(x) 就可以得到,如此利用对称性进一步减少了表项,也并未增加硬件复杂性。
48.而在步骤2012中,对于x小于或等于0且大于预定负数的区间,可以采用提高精度的纯软件行为,例如基于精度符合要求的经验来进行采样和建表。
49.在该区间中,有多种划分x的多个子区间以及采样和建表的方式:第一,划分x的多个子区间,使得 x的多个子区间中的第一子区间离0的距离大于x的多个子区间中的第二子区间离0的距离,且第一子区间的区间大小大于第二子区间的区间大小,且第一子区间的采样个数多于第二子区间的采样个数。
50.在该方式中,x的子区间距离0越远,则x的子区间的大小越大,且x的子区间的采样个数越多。如此,子区间越大,则采样个数越多可以保证较高的采样精度。
51.在此,在一些情况下, x的一个子区间的采样间隔可以相同。即x的该子区间可以采用均匀采样的方式。
52.例如,在预定负数为例如

20的情况下,可以将x小于或等于0且大于预定负数

20的区间划分为4个子区间:[

12,

20)子区间(第一子区间)、[

6,

12)子区间(第二子区间)、[

2,

6)子区间(第三子区间)、[0,
ꢀ‑
2)子区间(第四子区间)。
[0053]


落入这些子区间中时,采用如下方式建表: [0,
ꢀ‑
2)子区间(第四子区间),采用均匀区间建表,采样16个表项。
[0054] [

2,

6)子区间(第三子区间),采用均匀区间建表,采样32个表项。
[0055] [

6,

12)子区间(第二子区间),采用均匀区间建表,采样48个表项。
[0056] [

12,

20)子区间(第一子区间),采用均匀区间建表,采样64个表项。
[0057]
可见,在该例子中,x的子区间距离0越远,则x的子区间的大小越大,且x的子区间中的采样个数越大。
[0058]
在上述例子中,如果均匀采样,则每个子区间的采样间隔是相同的,都是1/8。
[0059]
当然,上述例子是采样个数使得每个子区间的采样个数与其子区间的大小成正比,但是本技术不限于此,采样个数可以根据情况而改变,只要满足x的子区间距离0越远、则x的子区间的大小越大、且x的子区间中的采样个数越大即可。
[0060]
在另一些情况下,x的一个子区间的采样间隔可以不同,例如采样间隔可以是不均匀的、非线性的、或指数型递增的。例如,x的该子区间可以采用指数采样的方式。指数采样指的是在该子区间中的各个采样点与该子区间的最右侧的距离是按照指数增长的。即,在一个子区间内,在x越靠近0采样越密集,而在x越远离0采样越稀疏。
[0061]
这主要是考虑到,根据sigmoid(x)的波形图,如图1所示,x距离0越远,则sigmoid(x)的取值越平滑且趋近于0,或者sigmoid(x)的波形图越趋近于水平线,在这种情况下,如果采用均匀采样,都会在越靠近0的x处的两个x采样点之间的sigmoid(x)的取值相差过大,导致精度不够,而在越远离0的x处的两个x采样点之间的sigmoid(x)的取值相差不大,导致采样效率低下。因此在这种情况下,如果按照指数采样方式,在一个子区间内,在x越靠近0采样越密集,而在x越远离0采样越稀疏(即,采样点的设置是按照指数分布的),则能提高采样效率且同时也保证一定的精度。
[0062]
例如,在预定负数为例如

20的情况下,可以将x小于或等于0且大于预定负数

20的区间划分为4个子区间:[

12,

20)子区间(第一子区间)、[

6,

12)子区间(第二子区间)、[

2,

6)子区间(第三子区间)、[0,
ꢀ‑
2)子区间(第四子区间)。
[0063]


落入这些子区间中时,采用如下方式建表: [0,
ꢀ‑
2)子区间(第四子区间),采用指数区间建表,采样16个表项。
[0064] [

2,

6)子区间(第三子区间),采用指数区间建表,采样32个表项。
[0065] [

6,

12)子区间(第二子区间),采用指数区间建表,采样48个表项。
[0066] [

12,

20)子区间(第一子区间),采用指数区间建表,采样64个表项。
[0067]
可见,在该例子中,x的子区间距离0越远,则x的子区间的大小越大,且x的子区间中的采样个数越大。
[0068]
当然,上述例子是采样个数使得每个子区间的采样个数与其子区间的大小成正比,但是本技术不限于此,采样个数可以根据情况而改变,只要满足x的子区间距离0越远、则x的子区间的大小越大、且x的子区间中的采样个数越大即可。
[0069]
另外,x的各个子区间的采样方式之间也可以不同也可以相同,例如一个或多个子区间采用均匀采样的方式,而另外一个或多个子区间采用指数采样的方式,或更另外一个或多个子区间采用其他采样的方式,等等。
[0070]
第二,x的多个子区间中的第一子区间离0的距离大于x的多个子区间中的第二子区间离0的距离,且第一子区间的区间大小等于第二子区间的区间大小,且第一子区间的采样个数等于第二子区间的采样个数。
[0071]
在该方式中,x的子区间距离0越远,则x的子区间的大小仍相等,且x的子区间的采样个数也相等。这使得子区间的大小和采样个数在所有x的子区间之间都是相等的,保证了较高的采样精度,当然由于在x距离0很远的地方也采用相同的采样精度,可能使得采样效率降低。
[0072]
例如,在预定负数为例如

16的情况下,可以将x小于或等于0且大于预定负数

16的区间划分为4个子区间:[

12,

16)子区间(第一子区间)、[

8,

12)子区间(第二子区间)、[

4,

8)子区间(第三子区间)、[0,
ꢀ‑
4)子区间(第四子区间)。
[0073]


落入这些子区间中时,采用如下方式建表: [0,
ꢀ‑
4)子区间(第四子区间),采用均匀或指数区间建表,采样16个表项。
[0074] [

4,

8)子区间(第三子区间),采用均匀或指数区间建表,采样16个表项。
[0075] [

8,

12)子区间(第二子区间),采用均匀或指数区间建表,采样16个表项。
[0076] [

12,

16)子区间(第一子区间),采用均匀或指数区间建表,采样16个表项。
[0077]
可见,在该例子中,x的子区间的大小相等,且x的子区间中的采样个数也相等。
[0078]
当然,如上,x的各个子区间的采样方式之间也可以不同也可以相同,例如一个或多个子区间采用均匀采样的方式,而另外一个或多个子区间采用指数采样的方式,或更另外一个或多个子区间采用其他采样的方式,等等。
[0079]
第三,上述两种方式均是每个子区间都满足相同的规律,要么满足第一种方式的规律,要么满足第二种方式的规律。但是在一些实施例中,也可以将上述两种方式交叉或混合来对各个子区间进行采样。例如两个子区间的大小和采样个数相等,另外两个子区间的大小和采样个数随着x离0的距离越大而越大等等。
[0080]
在一个实施例中,x的多个子区间包括第一子区间、第二子区间、第三子区间、第四子区间。其中,第一子区间离0的距离大于第二子区间离0的距离,且第一子区间的区间大小大于第二子区间的区间大小,第一子区间的采样个数多于第二子区间的采样个数。第二子区间离0的距离大于第三子区间离0的距离,且第二子区间的区间大小大于第三子区间的区间大小,且第二子区间的采样个数多于第三子区间的采样个数。第三子区间离0的距离大于第四子区间离0的距离,且第三子区间的区间大小等于第四子区间的区间大小,且第三子区间的采样个数等于第四子区间的采样个数,其中,第四子区间采用均匀采样,而其他子区间采用指数采样。
[0081]
例如,在预定负数为例如

16的情况下,可以将x小于或等于0且大于预定负数

16的区间划分为4个子区间:[

8,

16)子区间(第一子区间)、[
‑4‑
8)子区间(第二子区间)、[

2,

4)子区间(第三子区间)、[0,
ꢀ‑
2)子区间(第四子区间)。
[0082]


落入这些子区间中时,采用如下方式建表: [0,
ꢀ‑
2)子区间(第四子区间),采用均匀区间建表,采样32个表项。
[0083] [

2,

4) 子区间(第三子区间),采用指数区间建表,采样32个表项。
[0084] [

4,

8) 子区间(第二子区间),采用指数区间建表,采样64个表项。
[0085] [

8,

16) 子区间(第一子区间),采用指数区间建表,采样128个表项。
[0086]
可见,在该例子中,第四子区间采用均匀采样,而其他子区间采用指数采样。如此,由于在靠近0的子区间[0,
ꢀ‑
2)(第四子区间)采用均匀采样,因为在该子区间内,如图1所示,sigmoid(x)函数的波形更接近于线性函数,因此均匀采样获得精度和采样效率都比较好。而x越远离0,尤其在

的[

2,

4) 子区间(第三子区间)、

的[

4,

8) 子区间(第二子区间)、

的[

8,

16) 子区间(第一子区间)中,sigmoid(x)函数的波形更接近于水平线或更趋近于指数波形,对这些子区间采用指数采样会更符合该波形特点,且获得比较好的采样精度和采样效率。
[0087]
其中,

的[0,
ꢀ‑
2) 子区间和

的[

2,

4) 子区间的区间大小相同,且采样个数相同为32个,即第三子区间的区间大小等于第四子区间的区间大小,且第三子区间的采样个数32等于第四子区间的采样个数32。
[0088]


的[

4,

8) 子区间(第二子区间)的区间大小大于

的[

2,

4) 子区间(第三子区间)的区间大小,且

的[

4,

8) 子区间(第二子区间)的采样个数64多于

的[

2,

4) 子区间(第三子区间)的采样个数32。

的[

8,

16) 子区间(第一子区间)大小大于

的[

4,

8) 子区间(第二子区间)的区间大小,且

的[

8,

16) 子区间(第一子区间)的采样个数128多于

的[

4,

8) 子区间(第二子区间)的采样个数64。
[0089]
采用上述子区间划分、子区间大小、子区间采样个数以及子区间的采样方式,可以在不增加计算量和硬件复杂性的情况下获得较好的采样精度和采样效率。
[0090]
当然,上述只举例了划分四个子区间、特定的子区间大小、子区间采样个数以及子区间的采样方式,但是本技术不限于此,也可以划分其他数量个子区间,且子区间大小、采样个数、采样方式等等也不限于上述举例的情况。
[0091]
在进行了上述x的采样和计算采样点x处的sigmoid(x)函数的值之后,可以根据该x采样点的值和计算的sigmoid(x)函数的值建立对于x小于或等于0且大于预定负数的区间中的sigmoid(x)函数的查找表格,其中每个x采样点的值对应于对该x计算的sigmoid(x)函
数的值。从而在日后需要计算x的sigmoid(x)函数值时,可以直接搜索在查找逻辑硬件中的该查找表格来直接找到计算的sigmoid(x)函数的值,从而提高计算效率,减少硬件运算负担,改进硬件性能。
[0092]
以上描述了在对于x小于或等于0且大于预定负数的区间中的sigmoid(x)函数的查找表格,接下来,描述对于x小于或等于预定负数的区间如何在查找逻辑硬件中建立sigmoid(x)函数的查找表格。
[0093]
由于当x较小时,1/(1+e

x
)≈ e
x
,因此可以当x较小时用指数函数来代替,例如用e
x
或2
x*b 来代替sigmoid(x)函数。其中,e和2之间存在数学关系,已知e是一个无限不循环小数,其值约等于2.718281828459, 所以e可以约等于 2的1.44269502次方(当然这里的次方数的小数点后可以取预定数量,而不限于上述举例的8位)。所以,这里的b可以约等于1.44269502,因此b可以取保留小数点后预定数量的数,当然这里的小数点后的预定数量也不限于上述举例的8位,也可以根据精度和硬件性能选择其他位。注意,只有在x为负数且越小时,两者函数值越接近。例如,这里的“x小于或等于预定负数”中的预定负数可以是4,当然也可以是其他值,只要小于这个预定负数就可以用观察到e
x
和sigmoid(x)函数的值很接近,能够e
x
或2
x*b 的指数函数来代替sigmoid(x)函数。
[0094]
在一个实施例中,对于x小于或等于预定负数的区间,sigmoid(x)函数与e
x
函数相拟合,其中,对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格包括:对于x小于或等于预定负数的区间,复用e
x
函数的指数查找表格作为sigmoid(x)函数的查找表格。
[0095]
在另一个实施例中,对于x小于或等于预定负数的区间,sigmoid(x)函数与e
x
函数相拟合,其中,对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格包括:将 e
x 函数转换成 2
x*a 函数,其中a是实数;复用2
x*a 函数的指数查找表格作为sigmoid(x)函数的查找表格,其中2
x*a 函数的指数查找表格包括y=x*a和2
y
的计算结果作为x和sigmoid(x)函数的计算结果。
[0096]
在此,a的小数点可以保留小数点后8位,这样可以获得较好的精度。当然这只是示例,可以根据精度的需要保留小数点后其他数量的位,例如4位、6位、10位等等。保留的小数点越多,其计算精度越高,同时计算成本增加,保留的小数点越少,其计算精度越低,同时计算成本减少。因此,可以根据计算精度和计算成本来确定a保留小数点后几位。
[0097]
在这里,编译器可以先用一条向量指令把 e
x 转换成2
x*1.44269502
,然后再使用作为指数查找表格的sigmoid(x)函数的查找表格来进行查表。原因是如果在特殊函数单元sfu内部计算x*1.44269502再复用以2为底的指数exp表格,会增加特殊函数单元sfu的管线(pipeline)的深度和延迟。再用一条特殊函数单元sfu指令来查找sigmoid(x)函数的查找表格,得到计算的结果。
[0098]
如此,只需要两条指令,就极大地减少了计算1/(1+e

x
)的如前的四条指令,提高了硬件执行效率,减少了硬件执行延迟,且减少了编译器的复杂性。而且在查找逻辑硬件中复用现有技术中已经存在的以2为底的指数exp表格,因此减少了通过软件采样和计算来重新建立查找表格的复杂性和成本,且减少了装载表格的只读存储器rom的空间。
[0099]
在此,sigmoid(x)函数的计算方法可以适用于人工神经网络,且处理器可以是图形处理单元gpu或通用计算图形处理单元gpgpu,或其他处理器。
[0100]
如此,在获得了上述方式在查找逻辑硬件中建立的sigmoid(x)函数的查找表格之后,可以根据x值所在的区间,利用如上针对各种区间建立的查找表格,来直接在查找逻辑硬件中查找得到sigmoid(x)函数的计算值。
[0101]
上述方法在硬件实现上仅增加了sigmoid查表逻辑硬件和少量控制逻辑。图3示出了在处理器中在特殊函数单元sfu中实现sigmoid(x)函数的计算的硬件结构。在图3中,比现有的特殊函数单元sfu中的查表逻辑硬件中存储的查找表格lut中增加了如上述方法建立的sig查找表格(即sigmoid lut)。
[0102]
如图3所示,该硬件结构包括执行单元(execution unit,eu) 301。执行单元eu是微处理器中的执行单元,它负责指令的执行,实际是既有控制器的功能,也有运算器的功能。其包括:算术逻辑单元(arithmetic logic unit,alu)、标志寄存器、暂存器、寄存器组、控制单元。
[0103]
执行单元 eu 301先解析发送给特殊函数单元sfu的指令,之后,再向特殊函数单元sfu发出解析后的执行命令由sfu来进行某个函数运算。该指令被输入到特殊函数单元sfu之后,在输入阶段,进行特殊数处理、预处理,然后进入阶段0。在特殊数处理中,预处理一些特殊浮点数,比如非数(not a number, nan)、无穷大(infinite ,inf)、次正规数(denorm)等等。
[0104]
在阶段0中,存在x*x的计算器、以及计算一些函数的查找表。其中x*x是用来计算a + b*x + c*x*x的最后一项x*x。
[0105]
例如,根据具体要计算的函数来决定采用查表逻辑硬件中存储的哪个查找表格lut。例如这些查找表格lut包括计算x元素的倒数的查找表格(rcp)、计算x元素的平方根的倒数的查找表格(rsqrt)、计算以2为底、x为幂的指数的查找表格(exp)、计算x的对数的查找表格(log)、计算x的正弦函数的查找表格(sin)、计算x的余弦函数的查找表格(cos)、以及用于计算sigmoid(x)的查找表格(sig,如本技术中提到的方法建立的查找表格)等等。
[0106]
然后,进入阶段1。在阶段1中,存在c2*x2的计算器、c1*x的计算器、以及存储参数c0的存储器、以及用于计算加法的加法器。其中,c0、c1、c2是参数,也对应于参数a、b、c。阶段1的这些计算器用于定点乘加。
[0107]
然后,进入阶段2。在阶段2中,进行一些标准化或归一化的处理以及后处理。
[0108]
最后,计算的结果被发送到执行单元eu。
[0109]
从指令角度出发,求sigmoid只需要两条指令:fmul
ꢀꢀ
rd, rx, 1.44269502 //向量 vector指令,将e

x
转换成2

y
sigmoid rd, rx // 特殊函数单元sfu指令, 求1/(1+2

y
)比如,fmul指令可以在执行单元(eu, execution unit)中进行, sigmoid函数指令可以在特殊功能单元(sfu, special function unit)中完成。而且,根据本技术的实施例,计算的精度也能满足要求。本发明人测试了硬件实现的所有的浮点数区间,与cpu执行sigmoid的结果相比,在限制格式为1.8.7精度的情况下,只有1 ulp的误差。如果格式的精度(例如1.8.11)提高,那只需要增加对应的参数a、b、c 的比特宽度即可。
[0110]
如此,本技术在处理器、例如图形处理单元gpu的特殊函数单元sfu里实现了计算sigmoid函数的硬件逻辑,在查找逻辑硬件中复用了特殊函数单元sfu里原本就存在的定点乘加逻辑和以2为底的指数exp表格,减少了软件通过采样和计算来重新建立查找表格的复
杂性和成本,且减少了装载表格的只读存储器rom的空间,增加了硬件执行效率,减少了硬件执行延迟,且减少了编译器的复杂性。硬件逻辑设计简单,只是增加了sigmoid查表逻辑硬件和少量控制逻辑,只是sigmoid查找表格的构造区分了不同区间,将复杂性转到了软件。而且本技术将指令数量减少到只需要两条指令(一条向量vector指令,一条特殊函数单元sfu指令),增强了硬件执行效率,简化了编译器。
[0111]
图4示出了根据本技术的实施例的一种图形处理装置400的方框图。
[0112]
该图形处理装置400采用硬件模块实现sigmoid(x)函数的计算,其中x是实数。与图3所示的硬件结构不同,在图形处理装置400中示出了实现sigmoid(x)函数的计算的基本硬件结构,以突出本技术的发明原理。
[0113]
如图4所示,该图形处理装置包含:查表逻辑硬件401,被配置为存储至少按照如下方式建立的sigmoid(x)函数的查找表格:对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格;输入模块402,被配置为接收输入x;输出模块403,被配置为基于输入的x和查表逻辑硬件中存储的sigmoid(x)函数的查找表格来输出sigmoid(x)函数的计算结果。
[0114]
如此,在本技术的实施例中对于x小于或等于预定负数的区间,只需要在查找逻辑硬件中复用在特殊函数单元sfu中已经存在的指数查找表格,就可以作为sigmoid(x)函数的查找表格,因此减少了软件通过采样和计算来重新建立查找表格的复杂性和成本,且减少了装载表格的只读存储器rom的空间。
[0115]
在一个实施例中,查表逻辑硬件还被配置为存储按照如下方式建立的sigmoid(x)函数的查找表格:对于x小于或等于0且大于预定负数的区间,划分x的多个子区间,并对多个子区间按各自的采样个数对x采样并计算sigmoid(x)函数的结果,以建立x和sigmoid(x)函数的结果的查找表格。
[0116]
在这里,对于x小于或等于0且大于预定负数的区间,可以采用提高精度的纯软件行为,例如基于精度符合要求的经验来进行采样和建表。
[0117]
在一个实施例中,查表逻辑硬件还被配置为存储按照如下方式建立的sigmoid(x)函数的查找表格:对于x大于0的区间,根据sigmoid(x) +sigmoid(

x)=1的特性,基于x小于或等于0的区间的sigmoid(x)函数的查找表格来建立sigmoid(x)函数的查找表格。
[0118]
在这里,由于 sigmoid(x) +sigmoid(

x)=1,因此只需要对 x≤0 的区间建表。对于右边 x>0 区间的函数值,通过 sigmoid(x) 就可以得到,如此利用对称性进一步减少了表项,也并未增加硬件复杂性。
[0119]
在一个实施例中, x的多个子区间中的第一子区间离0的距离大于x的多个子区间中的第二子区间离0的距离,且第一子区间的区间大小大于第二子区间的区间大小,第一子区间的采样个数多于第二子区间的采样个数。
[0120]
在该方式中,x的子区间距离0越远,则x的子区间的大小越大,且x的子区间的采样个数越多。如此,子区间越大,则采样个数越多可以保证较高的采样精度。
[0121]
在一个实施例中,x的多个子区间中的第一子区间离0的距离大于x的多个子区间中的第二子区间离0的距离,且第一子区间的区间大小等于第二子区间的区间大小,且第一子区间的采样个数等于第二子区间的采样个数。
[0122]
在该方式中,x的子区间距离0越远,则x的子区间的大小仍相等,且x的子区间的采
样个数也相等。这使得子区间的大小和采样个数在所有x的子区间之间都是相等的,保证了较高的采样精度,当然由于在x距离0很远的地方也采用相同的采样精度,可能使得采样效率降低。
[0123]
上述两种方式均是每个子区间都满足相同的规律,要么满足第一种方式的规律,要么满足第二种方式的规律。但是在一些实施例中,也可以将上述两种方式交叉或混合来对各个子区间进行采样。例如两个子区间的大小和采样个数相等,另外两个子区间的大小和采样个数随着x离0的距离越大而越大等等。
[0124]
在一个实施例中,x的多个子区间包括第一子区间、第二子区间、第三子区间、第四子区间,其中,第一子区间离0的距离大于第二子区间离0的距离,且第一子区间的区间大小大于第二子区间的区间大小,第一子区间的采样个数多于第二子区间的采样个数,第二子区间离0的距离大于第三子区间离0的距离,且第二子区间的区间大小大于第三子区间的区间大小,且第二子区间的采样个数多于第三子区间的采样个数,第三子区间离0的距离大于第四子区间离0的距离,且第三子区间的区间大小等于第四子区间的区间大小,且第三子区间的采样个数等于第四子区间的采样个数,其中,第四子区间采用均匀采样,而其他子区间采用指数采样。
[0125]
如此,根据sigmoid(x)函数的波形特点,距离0较远的这些x的子区间的大小较大,且采样个数较多,且对距离0较远的这些子区间采用指数采样会更符合该波形特点,而距离0较近的一些子区间的大小和采样个数相同,且采用均匀采样,如此,多个子区间都能获得比较好的采样精度和采样效率。
[0126]
在一个实施例中,对于x小于或等于预定负数的区间,sigmoid(x)函数与e
x
函数相拟合,其中,对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格包括:将 e
x 函数转换成 2
x*a 函数,其中a是实数;复用2
x*a 函数的指数查找表格作为sigmoid(x)函数的查找表格,其中2
x*a 函数的指数查找表格包括y=x*a和2
y
的计算结果作为x和sigmoid(x)函数的计算结果。在一个实施例中,a可以保留小数点后8位。
[0127]
在这里,编译器可以先用一条向量指令把 e
x 转换成2
x*1.44269502 ,然后再使用作为指数查找表格的sigmoid(x)函数的查找表格来进行查表。原因是如果在特殊函数单元sfu内部计算x*1.44269502,再复用以2为底的指数exp表格,会增加特殊函数单元sfu的管线(pipeline)的深度和延迟。再用一条特殊函数单元sfu指令来查找sigmoid(x)函数的查找表格,得到计算的结果。
[0128]
如此,只需要两条指令,就极大地减少了计算1/(1+e

x
)的如前的四条指令,提高了硬件执行效率,减少了硬件执行延迟,且减少了编译器的复杂性。而且在查找逻辑硬件中复用现有技术中已经存在的以2为底的指数exp表格,因此减少了软件通过采样和计算来重新建立查找表格的复杂性和成本,且减少了装载表格的只读存储器rom的空间。
[0129]
该图形处理装置也可以是图形处理单元gpu或通用计算图形处理单元gpgpu等。且该图形处理装置也可以用于人工神经网络领域。
[0130]
图5示出了适于实现根据本技术实施方式的在处理器中采用硬件模块实现sigmoid(x)函数的计算方法的示例性计算机系统的框图。
[0131]
计算机系统可以包括处理器(501);存储器(502),耦合于处理器(501),且在其中存储计算机可执行指令,用于在由处理器执行时进行本技术的在处理器中采用硬件模块实
现sigmoid(x)函数的计算方法的实施例的各个方法的步骤。
[0132]
处理器(501)可以包括但不限于例如一个或者多个处理器或者或微处理器等。
[0133]
存储器(502)可以包括但不限于例如,随机存取存储器(ram)、只读存储器rom、快闪存储器、eprom存储器、eeprom存储器、寄存器、计算机存储介质(例如硬碟、软碟、固态硬盘、可移动碟、cd

rom、dvd

rom、蓝光盘等)。
[0134]
除此之外,该计算机系统还可以包括数据总线(503)、输入/输出(i/o)总线(504),显示器(505)以及输入/输出设备(506)(例如,键盘、鼠标、扬声器等)等。
[0135]
处理器(501)可以通过i/o总线(504)经由有线或无线网络(未示出)与外部设备(505、506等)通信。
[0136]
存储器(502)还可以存储至少一个计算机可执行指令,用于在由处理器(501)运行时执行本技术所描述的在处理器采用硬件模块中实现sigmoid(x)函数的计算方法的实施例中的各个功能和/或方法的步骤。
[0137]
在一个实施例中,该至少一个计算机可执行指令也可以被编译为或组成一种软件产品,其中一个或多个计算机可执行指令被处理器运行时执行本技术所描述的在处理器中采用硬件模块实现sigmoid(x)函数的计算方法的实施例中的各个功能和/或方法的步骤。
[0138]
如此,只需要两条指令,就极大地减少了计算1/(1+e

x
)的如前的四条指令,提高了硬件执行效率,减少了硬件执行延迟,且减少了编译器的复杂性。而且在查找逻辑硬件中复用现有技术中已经存在的指数exp表格,因此减少了软件通过采样和计算来重新建立查找表格的复杂性和成本,且减少了装载表格的只读存储器rom的空间。
[0139]
图6示出了根据本公开的实施例的在处理器中采用硬件模块实现sigmoid(x)函数的计算方法的非暂时性计算机可读存储介质的示意图。
[0140]
如图6所示,计算机可读存储介质620上存储有指令,指令例如是计算机可读指令610。当计算机可读指令610由处理器运行时,可以执行参照以上描述的各个方法。计算机可读存储介质包括但不限于例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器rom、硬盘、闪存等。例如,计算机可读存储介质620可以连接于诸如计算机等的计算设备,接着,在计算设备运行计算机可读存储介质620上存储的计算机可读指令610的情况下,可以进行如上描述的实现sigmoid(x)函数的计算方法。
[0141]
如此,只需要两条指令,就极大地减少了计算1/(1+e

x
)的如前的四条指令,提高了硬件执行效率,减少了硬件执行延迟,且减少了编译器的复杂性。而且在查找逻辑硬件中复用现有技术中已经存在的指数exp表格,因此减少了软件通过采样和计算来重新建立查找表格的复杂性和成本,且减少了装载表格的只读存储器rom的空间。
[0142]
图7a是根据本技术的实施例的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法700的流程图。
[0143]
如图7a所示,在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法700包括:步骤701,对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格;步骤702,在查表逻辑硬件中存储sigmoid(x)函数的查找表格。
[0144]
如此,在本技术的实施例中对于x小于或等于预定负数的区间,只需要在查找逻辑硬件中复用在特殊函数单元sfu中已经存在的指数查找表格,就可以作为sigmoid(x)函数
的查找表格,因此减少了软件通过采样和计算来重新建立查找表格的复杂性和成本,且减少了装载表格的只读存储器rom的空间。
[0145]
图7b是根据本技术的另一实施例的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法700的流程图。
[0146]
在一个实施例中,在步骤702之前,方法700还包括:步骤703,对于x小于或等于0且大于预定负数的区间,划分x的多个子区间,并对多个子区间按各自的采样个数对x进行均匀采样或指数采样并计算sigmoid(x)函数的结果,以在查找逻辑硬件中建立x和sigmoid(x)函数的结果的查找表格。
[0147]
在这里,对于x小于或等于0且大于预定负数的区间,可以采用提高精度的纯软件行为,例如基于精度符合要求的经验来进行采样和建表。
[0148]
在一个实施例中,在步骤702之前,方法700还包括:步骤704,对于x大于0的区间,根据sigmoid(x)+sigmoid(

x)=1的特性,基于x小于或等于0的区间的sigmoid(x)函数的查找表格来建立sigmoid(x)函数的查找表格。
[0149]
在这里,由于 sigmoid(x) +sigmoid(

x)=1,因此只需要对 x≤0 的区间建表。对于右边 x>0 区间的函数值,通过 1
‑ꢀ
sigmoid(x) 就可以得到,如此利用对称性进一步减少了表项,也并未增加硬件复杂性。
[0150]
在步骤703的一个实施例中,x的多个子区间中的第一子区间离0的距离大于x的多个子区间中的第二子区间离0的距离,且第一子区间的区间大小大于第二子区间的区间大小,且第一子区间的采样个数多于第二子区间的采样个数。
[0151]
在该方式中,x的子区间距离0越远,则x的子区间的大小越大,且x的子区间的采样个数越多。如此,子区间越大,则采样个数越多可以保证较高的采样精度。
[0152]
在步骤703的一个实施例中,x的多个子区间中的第一子区间离0的距离大于x的多个子区间中的第二子区间离0的距离,且第一子区间的区间大小等于第二子区间的区间大小,且第一子区间的采样个数等于第二子区间的采样个数。
[0153]
在该方式中,x的子区间距离0越远,则x的子区间的大小仍相等,且x的子区间的采样个数也相等。这使得子区间的大小和采样个数在所有x的子区间之间都是相等的,保证了较高的采样精度,当然由于在x距离0很远的地方也采用相同的采样精度,可能使得采样效率降低。
[0154]
上述两种方式均是每个子区间都满足相同的规律,要么满足第一种方式的规律,要么满足第二种方式的规律。但是在一些实施例中,也可以将上述两种方式交叉或混合来对各个子区间进行采样。例如两个子区间的大小和采样个数相等,另外两个子区间的大小和采样个数随着x离0的距离越大而越大等等。
[0155]
在步骤703的一个实施例中,x的多个子区间包括第一子区间、第二子区间、第三子区间、第四子区间,其中,第一子区间离0的距离大于第二子区间离0的距离,且第一子区间的区间大小大于第二子区间的区间大小,第一子区间的采样个数多于第二子区间的采样个数,第二子区间离0的距离大于第三子区间离0的距离,且第二子区间的区间大小大于第三子区间的区间大小,且第二子区间的采样个数多于第三子区间的采样个数,第三子区间离0的距离大于第四子区间离0的距离,且第三子区间的区间大小等于第四子区间的区间大小,且第三子区间的采样个数等于第四子区间的采样个数。
[0156]
如此,根据sigmoid(x)函数的波形特点,距离0较远的这些x的子区间的大小较大,且采样个数较多,且对距离0较远的这些子区间采用指数采样会更符合该波形特点,而距离0较近的一些子区间的大小和采样个数相同,且采用均匀采样,如此,多个子区间都能获得比较好的采样精度和采样效率。
[0157]
在一个实施例中,在步骤701中,对于x小于或等于预定负数的区间,sigmoid(x)函数与e
x
函数相拟合,其中,对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格包括:将 e
x 函数转换成 2
x*a 函数,其中a是实数;复用2
x*a 函数的指数查找表格作为sigmoid(x)函数的查找表格,其中2
x*a 函数的指数查找表格包括y=x*a和2
y
的计算结果作为x和sigmoid(x)函数的计算结果。
[0158]
在一个实施例中,在步骤701中,a保留小数点后8位。
[0159]
在这里,编译器可以先用一条向量指令把 e
x 转换成 2
x*1.44269502
,然后再使用作为指数查找表格的sigmoid(x)函数的查找表格来进行查表。原因是如果在特殊函数单元sfu内部计算x*1.44269502,再复用以2为底的指数exp表格,会增加特殊函数单元sfu的管线(pipeline)的深度和延迟。再用一条特殊函数单元sfu指令来查找sigmoid(x)函数的查找表格,得到计算的结果。
[0160]
如此根据本技术的实施例在查找逻辑硬件中建立了sigmoid(x)函数的查找表格,只需要两条指令,就极大地减少了计算1/(1+e

x
)的如前的四条指令,提高了硬件执行效率,减少了硬件执行延迟,且减少了编译器的复杂性。而且在查找逻辑硬件中复用现有技术中已经存在的指数exp表格,因此减少了软件通过采样和计算来重新建立查找表格的复杂性和成本,且减少了装载表格的只读存储器rom的空间。
[0161]
图8示出了适于用来实现本技术实施例的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法的示例性计算机系统的框图。
[0162]
计算机系统可以包括处理器(801);存储器(802),耦合于处理器(801),且在其中存储计算机可执行指令,用于在由处理器执行时进行本技术的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法的实施例的各个方法的步骤。
[0163]
处理器(801)可以包括但不限于例如一个或者多个处理器或者或微处理器等。
[0164]
存储器(802)可以包括但不限于例如,随机存取存储器(ram)、只读存储器rom、快闪存储器、eprom存储器、eeprom存储器、寄存器、计算机存储介质(例如硬碟、软碟、固态硬盘、可移动碟、cd

rom、dvd

rom、蓝光盘等)。
[0165]
除此之外,该计算机系统还可以包括数据总线(803)、输入/输出(i/o)总线(804),显示器(805)以及输入/输出设备(806)(例如,键盘、鼠标、扬声器等)等。
[0166]
处理器(801)可以通过i/o总线(804)经由有线或无线网络(未示出)与外部设备(805、806等)通信。
[0167]
存储器(802)还可以存储至少一个计算机可执行指令,用于在由处理器(801)运行时执行本技术所描述的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法的实施例中的各个功能和/或方法的步骤。
[0168]
在一个实施例中,该至少一个计算机可执行指令也可以被编译为或组成一种软件产品,其中一个或多个计算机可执行指令被处理器运行时执行本技术所描述的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法的实施例中的各个功能和/或方法的步骤。
[0169]
如此根据本技术的实施例在查找逻辑硬件中建立了sigmoid(x)函数的查找表格,只需要两条指令,就极大地减少了计算1/(1+e

x
)的如前的四条指令,提高了硬件执行效率,减少了硬件执行延迟,且减少了编译器的复杂性。而且在查找逻辑硬件中复用现有技术中已经存在的指数exp表格,因此减少了软件通过采样和计算来重新建立查找表格的复杂性和成本,且减少了装载表格的只读存储器rom的空间。
[0170]
图9示出了根据本公开的实施例的在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法的非暂时性计算机可读存储介质的示意图。
[0171]
如图9所示,计算机可读存储介质920上存储有指令,指令例如是计算机可读指令910。当计算机可读指令910由处理器运行时,可以执行参照以上描述的各个方法。计算机可读存储介质包括但不限于例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器rom、硬盘、闪存等。例如,计算机可读存储介质920可以连接于诸如计算机等的计算设备,接着,在计算设备运行计算机可读存储介质920上存储的计算机可读指令910的情况下,可以进行如上描述的建立sigmoid(x)函数的查找表格的方法。
[0172]
如此根据本技术的实施例在查找逻辑硬件中建立了sigmoid(x)函数的查找表格,只需要两条指令,就极大地减少了计算1/(1+e

x
)的如前的四条指令,提高了硬件执行效率,减少了硬件执行延迟,且减少了编译器的复杂性。而且在查找逻辑硬件中复用现有技术中已经存在的指数exp表格,因此减少了软件通过采样和计算来重新建立查找表格的复杂性和成本,且减少了装载表格的只读存储器rom的空间。
[0173]
本技术提供如下方面:方面1. 一种在处理器中采用硬件模块实现sigmoid(x)函数的计算方法,其中x是实数,所述方法包括:从硬件模块中的查表逻辑硬件获得sigmoid(x)函数的查找表格,其中所述sigmoid(x)函数的查找表格是至少按照如下方式建立的:对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格;接收输入x;基于输入的x和所述查表逻辑硬件中存储的sigmoid(x)函数的查找表格来输出sigmoid(x)函数的计算结果。
[0174]
方面2. 根据方面1所述的方法,其中所述sigmoid(x)函数的查找表格还按照如下方式建立:对于x小于或等于0且大于预定负数的区间,划分x的多个子区间,并对多个子区间按各自的采样个数对x进行均匀采样或指数采样并计算sigmoid(x)函数的结果,以建立x和所述sigmoid(x)函数的结果的查找表格;对于x大于0的区间,根据sigmoid(x)+sigmoid(

x)=1的特性,基于x小于或等于0的区间的sigmoid(x)函数的查找表格来建立sigmoid(x)函数的查找表格。
[0175]
方面3. 根据方面2所述的方法,其中, x的多个子区间中的第一子区间离0的距离大于x的多个子区间中的第二子区间离0的距离,且所述第一子区间的区间大小大于所述第二子区间的区间大小,且所述第一子区间的采样个数多于所述第二子区间的采样个数。
[0176]
方面4. 根据方面2所述的方法,其中,x的多个子区间中的第一子区间离0的距离大于x的多个子区间中的第二子区间离0的距离,且所述第一子区间的区间大小等于所述第二子区间的区间大小,且所述第一子区间的采样个数等于所述第二子区间的采样个数。
[0177]
方面5. 根据方面2所述的方法,其中,所述x的多个子区间包括第一子区间、第二子区间、第三子区间、第四子区间,其中,所述第一子区间离0的距离大于所述第二子区间离0的距离,且所述第一子区间的区间大小大于所述第二子区间的区间大小,第一子区间的采样个数多于所述第二子区间的采样个数,所述第二子区间离0的距离大于所述第三子区间离0的距离,且所述第二子区间的区间大小大于所述第三子区间的区间大小,且所述第二子区间的采样个数多于所述第三子区间的采样个数,所述第三子区间离0的距离大于所述第四子区间离0的距离,且所述第三子区间的区间大小等于所述第四子区间的区间大小,且所述第三子区间的采样个数等于所述第四子区间的采样个数。
[0178]
方面6. 根据方面2

5中任一所述的方法,其中,各个子区间采用均匀采样的方式或指数采样的方式。
[0179]
方面7. 根据方面1所述的方法,其中,对于x小于或等于所述预定负数的区间,所述sigmoid(x)函数与e
x
函数相拟合,其中,所述对于x小于或等于所述预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格包括:将e
x 函数转换成2
x*a 函数,其中a是实数;复用2
x*a 函数的指数查找表格作为sigmoid(x)函数的查找表格,其中2
x*a 函数的指数查找表格包括y=x*a和2
y
的计算结果作为x和sigmoid(x)函数的计算结果。
[0180]
方面8. 根据方面1所述的方法,其中,所述sigmoid(x)函数的计算方法适用于人工神经网络,且所述处理器是图形处理单元gpu或通用计算图形处理单元gpgpu。
[0181]
方面9. 一种图形处理装置,采用硬件模块实现sigmoid(x)函数的计算,其中x是实数,该图形处理装置包含:查表逻辑硬件,被配置为存储至少按照如下方式建立的sigmoid(x)函数的查找表格:对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格;输入模块,被配置为接收输入x;输出模块,被配置为基于输入的x和所述查表逻辑硬件中存储的sigmoid(x)函数的查找表格来输出sigmoid(x)函数的计算结果。
[0182]
方面10. 根据方面9所述的图形处理装置,其中所述查表逻辑硬件还被配置为存储按照如下方式建立的sigmoid(x)函数的查找表格:对于x小于或等于0且大于预定负数的区间,划分x的多个子区间,并对多个子区间按各自的采样个数对x采样并计算sigmoid(x)函数的结果,以建立x和所述sigmoid(x)函数的结果的查找表格;
对于x大于0的区间,根据sigmoid(x)+sigmoid(

x)=1的特性,基于x小于或等于0的区间的sigmoid(x)函数的查找表格来建立sigmoid(x)函数的查找表格。
[0183]
方面11. 根据方面10所述的图形处理装置,其中, x的多个子区间中的第一子区间离0的距离大于x的多个子区间中的第二子区间离0的距离,且所述第一子区间的区间大小大于所述第二子区间的区间大小,第一子区间的采样个数多于所述第二子区间的采样个数。
[0184]
方面12. 根据方面10所述的图形处理装置,其中,x的多个子区间中的第一子区间离0的距离大于x的多个子区间中的第二子区间离0的距离,且所述第一子区间的区间大小等于所述第二子区间的区间大小,且所述第一子区间的采样个数等于所述第二子区间的采样个数。
[0185]
方面13. 根据方面10所述的图形处理装置,其中,所述x的多个子区间包括第一子区间、第二子区间、第三子区间、第四子区间,其中,所述第一子区间离0的距离大于所述第二子区间离0的距离,且所述第一子区间的区间大小大于所述第二子区间的区间大小,第一子区间的采样个数多于所述第二子区间的采样个数,所述第二子区间离0的距离大于所述第三子区间离0的距离,且所述第二子区间的区间大小大于所述第三子区间的区间大小,且所述第二子区间的采样个数多于所述第三子区间的采样个数,所述第三子区间离0的距离大于所述第四子区间离0的距离,且所述第三子区间的区间大小等于所述第四子区间的区间大小,且所述第三子区间的采样个数等于所述第四子区间的采样个数,其中,所述第四子区间采用均匀采样,而其他子区间采用指数采样。
[0186]
方面14. 根据方面9所述的图形处理装置,其中,对于x小于或等于所述预定负数的区间,所述sigmoid(x)函数与e
x
函数相拟合,其中,所述对于x小于或等于所述预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格包括:将e
x
函数转换成2
x*a 函数,其中a是实数;复用2
x*a 函数的指数查找表格作为sigmoid(x)函数的查找表格,其中2
x*a 函数的指数查找表格包括y=x*a和2
y
的计算结果作为x和sigmoid(x)函数的计算结果。
[0187]
方面15. 一种在处理器中采用硬件模块实现sigmoid(x)函数的计算系统,包括:处理器;存储器,存储了计算器可执行指令,其被处理器运行时进行如方面1

8中任一所述的方法。
[0188]
方面16. 一种计算机可读介质,存储有计算机可读指令,其中当所述计算机可读指令由处理器运行时,进行如方面1

8中任一所述的方法。
[0189]
方面17. 一种在查找逻辑硬件中建立sigmoid(x)函数的查找表格的方法,包括:对于x小于或等于预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格;在查找逻辑硬件中存储所述sigmoid(x)函数的查找表格。
[0190]
方面18. 根据方面17所述的方法,还包括:对于x小于或等于0且大于预定负数的区间,划分x的多个子区间,并对多个子区间按各自的采样个数对x进行均匀采样或指数采样并计算sigmoid(x)函数的结果,以建立x和所述sigmoid(x)函数的结果的查找表格;对于x大于0的区间,根据sigmoid(x)+sigmoid(

x)=1的特性,基于x小于或等于0的区间的sigmoid(x)函数的查找表格来建立sigmoid(x)函数的查找表格。
[0191]
方面19. 根据方面18所述的方法,其中, x的多个子区间中的第一子区间离0的距离大于x的多个子区间中的第二子区间离0的距离,且所述第一子区间的区间大小大于所述第二子区间的区间大小,且所述第一子区间的采样个数多于所述第二子区间的采样个数。
[0192]
方面20. 根据方面18所述的方法,其中,x的多个子区间中的第一子区间离0的距离大于x的多个子区间中的第二子区间离0的距离,且所述第一子区间的区间大小等于所述第二子区间的区间大小,且所述第一子区间的采样个数等于所述第二子区间的采样个数。
[0193]
方面21. 根据方面18所述的方法,其中,所述x的多个子区间包括第一子区间、第二子区间、第三子区间、第四子区间,其中,所述第一子区间离0的距离大于所述第二子区间离0的距离,且所述第一子区间的区间大小大于所述第二子区间的区间大小,第一子区间的采样个数多于所述第二子区间的采样个数,所述第二子区间离0的距离大于所述第三子区间离0的距离,且所述第二子区间的区间大小大于所述第三子区间的区间大小,且所述第二子区间的采样个数多于所述第三子区间的采样个数,所述第三子区间离0的距离大于所述第四子区间离0的距离,且所述第三子区间的区间大小等于所述第四子区间的区间大小,且所述第三子区间的采样个数等于所述第四子区间的采样个数。
[0194]
方面22. 根据方面17所述的方法,其中,对于x小于或等于所述预定负数的区间,所述sigmoid(x)函数与e
x
函数相拟合,其中,所述对于x小于或等于所述预定负数的区间,复用指数查找表格作为sigmoid(x)函数的查找表格包括:将 e
x 函数转换成 2
x*a 函数,其中a是实数;复用2
x*a 函数的指数查找表格作为sigmoid(x)函数的查找表格,其中2
x*a 函数的指数查找表格包括y=x*a和2
y
的计算结果作为x和sigmoid(x)函数的计算结果。
[0195]
方面23. 根据方面22所述的方法,其中,a保留小数点后8位。
[0196]
方面24. 一种在查找逻辑硬件中建立sigmoid(x)函数的查找表格的系统,包括:处理器;存储器,存储了计算器可执行指令,其被处理器运行时进行如权利要求17

23中任一所述的方法。
[0197]
方面25. 一种计算机可读介质,存储有计算机可读指令,其中当所述计算机可读指令由处理器运行时,进行如权利要求17

23中任一所述的方法。
[0198]
当然,上述的具体实施例仅是例子而非限制,且本领域技术人员可以根据本技术的构思从上述分开描述的各个实施例中合并和组合一些步骤和装置来实现本技术的效果,
这种合并和组合而成的实施例也被包括在本技术中,在此不一一描述这种合并和组合。
[0199]
注意,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本技术的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本技术为必须采用上述具体的细节来实现。
[0200]
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
[0201]
本公开中的步骤流程图以及以上方法描述仅作为例示性的例子并且不意图要求或暗示必须按照给出的顺序进行各个实施例的步骤。如本领域技术人员将认识到的,可以按任意顺序进行以上实施例中的步骤的顺序。诸如“其后”、“然后”、“接下来”等等的词语不意图限制步骤的顺序;这些词语仅用于引导读者通读这些方法的描述。此外,例如使用冠词“一个”、“一”或者“该”对于单数的要素的任何引用不被解释为将该要素限制为单数。
[0202]
另外,本文中的各个实施例中的步骤和装置并非仅限定于某个实施例中实行,事实上,可以根据本技术的概念来结合本文中的各个实施例中相关的部分步骤和部分装置以构思新的实施例,而这些新的实施例也包括在本技术的范围内。
[0203]
以上描述的方法的各个操作可以通过能够进行相应的功能的任何适当的手段而进行。该手段可以包括各种硬件和/或软件组件和/或模块,包括但不限于硬件的电路、专用集成电路(asic)或处理器。
[0204]
可以利用被设计用于进行在此描述的功能的通用处理器、数字信号处理器(dsp)、asic、场可编程门阵列信号(fpga)或其他可编程逻辑器件(pld)、离散门或晶体管逻辑、离散的硬件组件或者其任意组合而实现或进行描述的各个例示的逻辑块、模块和电路。通用处理器可以是微处理器,但是作为替换,该处理器可以是任何商业上可获得的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如dsp和微处理器的组合,多个微处理器、与dsp核协作的微处理器或任何其他这样的配置。
[0205]
结合本公开描述的方法或算法的步骤可以直接嵌入在硬件中、处理器执行的软件模块中或者这两种的组合中。软件模块可以存在于任何形式的有形存储介质中。可以使用的存储介质的一些例子包括随机存取存储器ram、只读存储器rom、快闪存储器、eprom存储器、eeprom存储器、寄存器、硬碟、可移动碟、cd

rom等。存储介质可以耦接到处理器以便该处理器可以从该存储介质读取信息以及向该存储介质写信息。在替换方式中,存储介质可以与处理器是整体的。软件模块可以是单个指令或者许多指令,并且可以分布在几个不同的代码段上、不同的程序之间以及跨过多个存储介质。
[0206]
在此公开的方法包括用于实现描述的方法的动作。方法和/或动作可以彼此互换而不脱离权利要求的范围。换句话说,除非指定了动作的具体顺序,否则可以修改具体动作的顺序和/或使用而不脱离权利要求的范围。
[0207]
上述功能可以按硬件、软件、固件或其任意组合而实现。如果以软件实现,功能可
以作为指令存储在切实的计算机可读介质上。存储介质可以是可以由计算机访问的任何可用的切实介质。通过例子而不是限制,这样的计算机可读介质可以包括ram、rom、eeprom、cd

rom或其他光碟存储、磁碟存储或其他磁存储器件或者可以用于携带或存储指令或数据结构形式的期望的程序代码并且可以由计算机访问的任何其他切实介质。如在此使用的,碟(disk)和盘(disc)包括紧凑盘(cd)、激光盘、光盘、数字通用盘(dvd)、软碟和蓝光盘,其中碟通常磁地再现数据,而盘利用激光光学地再现数据。
[0208]
因此,计算机程序产品可以进行在此给出的操作。例如,这样的计算机程序产品可以是具有有形存储(和/或编码)在其上的指令的计算机可读的有形介质,该指令可由处理器执行以进行在此描述的操作。计算机程序产品可以包括包装的材料。
[0209]
软件或指令也可以通过传输介质而传输。例如,可以使用诸如同轴电缆、光纤光缆、双绞线、数字订户线(dsl)或诸如红外、无线电或微波的无线技术的传输介质从网站、服务器或者其他远程源传输软件。
[0210]
此外,用于进行在此描述的方法和技术的模块和/或其他适当的手段可以在适当时由用户终端和/或基站下载和/或其他方式获得。例如,这样的设备可以耦接到服务器以促进用于进行在此描述的方法的手段的传送。或者,在此描述的各种方法可以经由存储部件(例如ram、rom、诸如cd或软碟等的物理存储介质)提供,以便用户终端和/或基站可以在耦接到该设备或者向该设备提供存储部件时获得各种方法。此外,可以利用用于将在此描述的方法和技术提供给设备的任何其他适当的技术。
[0211]
其他例子和实现方式在本公开和所附权利要求的范围和精神内。例如,由于软件的本质,以上描述的功能可以使用由处理器、硬件、固件、硬连线或这些的任意的组合执行的软件实现。实现功能的特征也可以物理地位于各个位置,包括被分发以便功能的部分在不同的物理位置处实现。而且,如在此使用的,包括在权利要求中使用的,在以“至少一个”开始的项的列举中使用的“或”指示分离的列举,以便例如“a、b或c的至少一个”的列举意味着a或b或c,或ab或ac或bc,或abc(即a和b和c)。此外,措辞“示例的”不意味着描述的例子是优选的或者比其他例子更好。
[0212]
可以不脱离由所附权利要求定义的教导的技术而进行对在此描述的技术的各种改变、替换和更改。此外,本公开的权利要求的范围不限于以上描述的处理、机器、制造、事件的组成、手段、方法和动作的具体方面。可以利用与在此描述的相应方面进行基本相同的功能或者实现基本相同的结果的当前存在的或者稍后要开发的处理、机器、制造、事件的组成、手段、方法或动作。因而,所附权利要求包括在其范围内的这样的处理、机器、制造、事件的组成、手段、方法或动作。
[0213]
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本技术。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本技术的范围。因此,本技术不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
[0214]
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本技术的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1