发明内容
为了满足科学计算任务的需要,本发明提供一种基于光电计算阵列的偏微分方程求解器,用来加速偏微分方程求高精度数值解的算法。本发明的另外一个目的是提供利用该偏微分方程求解器的求解方法。
本发明采用的技术方案如下:
一种基于光电计算阵列的偏微分方程求解器,包括:光电计算阵列,用于矩阵向量乘的计算;所述光电计算阵列由多个光电计算单元周期性排列组成,每个光电计算单元包括发光单元和计算单元,发光单元发出的光入射到计算单元中;每个计算单元包括载流子控制区、耦合区、以及光生载流子收集区和读出区;所述载流子控制区用于控制并调制光生载流子收集区和读出区内的载流子;所述光生载流子收集区和读出区中的收集区用于吸收发光单元发射的光子并收集产生的光生载流子;所述载流子控制区或者光生载流子收集区和读出区中的读出区与电信号连接,读出区用于输出被所述光生载流子和所述电信号作用后的载流子;所述耦合区连接收集区和读出区;驱动器,用于将系数矩阵中的数据作为光输入发送给各个发光单元;控制系统,用于将每一次迭代的输入向量数据发送到光电计算阵列中,并将每一次迭代的结果向量进行AD转换、移位和累加,以及处理非矩阵向量乘运算。
进一步地,所述控制系统包括定浮点转换器,所述定浮点转换器用于将输入的向量数据由单精度或双精度浮点数转换为指定位数的定点数,以及将结果向量的数据由指定位数的定点数转换为单精度或双精度浮点数。
本发明一种基于光电计算阵列的偏微分方程求解器的方法,具体步骤如下:
(1)将多个光电计算单元排列为和待求解偏微分方程中系数矩阵行列数相等的光电计算阵列,其中,每一列计算单元的光生载流子收集区和读出区的输出端依次相连,每一行计算单元的的载流子控制区依次相连;
(2)发光单元发出被设置为系数矩阵中数据的光信号,并入射到对应的计算单元的光生载流子收集区和读出区的输入端,为偏微分方程求解器的系数矩阵输入端;每一行计算单元的载流子控制区输入被设置为代表向量中各个元素的载流子,为偏微分方程求解器的当前迭代次数的偏微分方程未知解向量数据输入端;其中,所述向量中各个元素的数据被转化为二进制后,按照比特位串行的将代表二值化后数据的载流子输入到各个行的载流子控制区;
(3)计算单元的光生载流子收集区和读出区的输出端输出受系数矩阵数据和当前迭代偏微分方程未知解相应比特位数据共同影响的载流子,并在固定电压的驱动下以电流的形式输出,再按列汇聚后经过AD转换,最后按输入的比特位进行移位操作然后累加,再在控制系统中完成其他非矩阵向量乘的运算后,进入下一次迭代;
(4)初始迭代时,第一次迭代的偏微分方程未知解输入每一行计算单元的载流子控制区,从各列计算单元的光生载流子收集区和读出区的输出端获得输出结果后经控制系统处理进入第二次迭代,再将第二次迭代的偏微分方程未知解输入每一行计算单元的载流子控制区,以此类推,完成求解需要的所有迭代后输出结果给控制系统,得到最终的偏微分方程未知解。
进一步地,如果系数矩阵数据位宽超过光输入的限制位宽时:在步骤(2)向量数据输入到载流子控制区后,再根据实际的精度需求,将系数矩阵中的数据按照比特位分割成数等份,不够的比特位用0补足,然后将每一份的数据作为对应计算单元的光输入;在步骤(3)的每一次迭代中,控制系统得到当前迭代的最终结果向量后,将此结果向量再进行同样的分割操作,作为下一次迭代的输入向量。
进一步地,如果输入的向量数据为浮点数时:在步骤(2)中,将输入向量数据的浮点数转换成指定位数的定点数后再输入计算单元;在步骤(4)中,将输出结果转换为浮点数。
本发明提出了一种基于光电计算阵列的偏微分方程求解器及其方法,通过有限差分法和雅克比(Jacobi)迭代法将偏微分方程求解过程转换成矩阵向量乘运算,并映射到光电计算阵列上,可以求出给定偏微分方程的高精度数值解。
具体实施方式
本发明光电计算单元中的计算单元为包括三大功能区的多功能区结构,如图1所示,三大功能区为:载流子控制区、耦合区、光生载流子收集区和读出区,具体功能分别如下:
载流子控制区:负责控制并调制光电计算单元内的载流子,并且作为计算单元的电输入端口,输入其中一个运算量作为电输入量;或者只控制并调制计算单元内的载流子,通过其他区域输入电输入量。
耦合区:负责连接光生载流子收集区和读出区,使得光子入射产生的光生载流子作用于光电计算单元内的载流子,形成运算关系。
光生载流子收集区和读出区:其中收集区负责吸收入射的光子并收集产生的光生载流子,并且作为计算单元的光输入端口,输入其中一个运算量作为光输入量;读出区可以作为计算单元的电输入端口,输入其中一个运算量作为电输入量,并且作为计算单元的输出端口,输出被光输入量和电输入量作用后的载流子作为单元输出量;或者通过其他区域输入电输入量,读出区只作为计算单元的输出端口,输出被光输入量和电输入量作用后的载流子,作为单元输出量。
发光单元发出的光作为入射计算单元光生载流子收集和读出区的光子,参与运算。光电计算阵列包括发光阵列1和计算阵列2,结构如图2所示。发光阵列1由多个发光单元周期性排列组成,计算阵列2由多个计算单元周期性排列组成。
实施例1
如图3所示,本实施例的计算单元包括:作为载流子控制区的控制栅极、作为耦合区的电荷耦合层,以及作为光生载流子收集区和读出区的P型衬底,P型衬底中分为左侧收集区和右侧读出区,其中右侧读出区中包括浅槽隔离、通过离子注入形成的N型源端和N型漏端。浅槽隔离位于半导体衬底中部、收集区和读出区的中间,浅槽隔离通过刻蚀并填充入二氧化硅来形成,以用于隔离收集区和读出区的电信号。N型源端位于读出区内靠近底层介质层的一侧,通过离子注入法掺杂而形成。N型漏端位于半导体衬底中靠近底层介质层与N型源端相对的另一侧,同样通过离子注入法进行掺杂法形成。应理解,本文中提及的左侧、右侧、上方以及下方只代表在通过图中所示视角观察下的相对位置随观察视角变化而变化,并不理解为对具体结构的限制。
在收集区的衬底上施加一个电压范围为负压的脉冲,或在控制栅上施加一个电压范围为正压的脉冲,使得收集区衬底中产生用于光电子收集的耗尽层,并通过右侧读出区读出收集的光电子数量,作为光输入端的输入量。读出时,在控制栅极上施加一正电压,使N型源端和收集区N型漏端间形成导电沟道,再通过在N型源端和N型漏端间施加一个偏置脉冲电压,使得导电沟道内的电子加速形成源漏之间的电流。源漏之间沟道内形成电流的载流子,受到控制栅电压、源漏间电压和收集区收集的光电子数量共同作用,作为被光输入量和电输入量共同作用后的电子,以电流的形式进行输出,其中控制栅电压、源漏间电压可以作为器件的电输入量,光电子数量则为器件的光输入量。
耦合区的电荷耦合层用于连接收集区和读出区,使收集区衬底内耗尽区开始收集光电子以后,收集区衬底表面势就会受到收集的光电子数量影响;通过电荷耦合层的连接,使得读出区半导体衬底表面势受到收集区半导体衬底表面势影响,进而影响读出区源漏间电流大小,从而通过判断读出区源漏间电流来读出收集区收集的光电子数量;
载流子控制区的控制栅,用以在其上施加一个脉冲电压,使得在P型半导体衬底读出区中产生用于激发光电子的耗尽区,同时也可以作为电输入端,输入其中一位运算量。
此外,P型半导体衬底和电荷耦合层之间存在用于隔离的底层介质层;电荷耦合层和控制栅之间亦存在用于隔离的顶层介质层。
实施例2
如图4所示,本实施例的计算单元包括:作为载流子控制区的控制栅极、作为耦合区的电荷耦合层,以及作为光生载流子收集区和读出区的P型半导体衬底,其中P型衬底中包含通过离子注入形成的N型源端和漏端。P型半导体衬底可以同时承担感光和读出的工作。N型源端位于读出区内靠近底层介质层的一侧,通过离子注入法掺杂而形成。N型漏端位于半导体衬底中靠近底层介质层与所述N型源端相对的另一侧,同样通过离子注入法进行掺杂法形成。
感光时,在P型半导体衬底上施加一个电压范围为负压的脉冲,同时在作为载流子控制区的控制栅极上施加一个电压范围为正压的脉冲,使得P型衬底中产生用于光电子收集的耗尽层,产生在耗尽区内的电子在控制栅极和P型衬底两端之间的电场作用下被加速,并在到达获得足够高的能量,穿过P型衬底和电荷耦合层之间的底层介质层势垒,进入电荷耦合层并储存于此,电荷耦合层中的电荷数量,会影响器件开启时的阈值,进而影响读出时的源漏间电流大小;读出时,在控制栅极上施加一脉冲电压,使N型源端和N型漏端间形成导电沟道,再通过在N型源端和N型漏端间施加一个脉冲电压,使得导电沟道内的电子加速形成源漏之间的电流。源漏之间的电流受到控制栅脉冲电压、源漏间电压和电荷耦合层中存储的电子数量共同作用,作为被光输入量和电输入量共同作用后的电子,以电流的形式进行输出,其中控制栅电压、源漏间电压可以作为器件的电输入量,电荷耦合层中存储的光电子数量则为器件的光输入量。
耦合区的电荷耦合层用于储存进入其中的光电子,并改变读出时器件阈值大小,进而影响读出区源漏间电流,从而通过判断读出区源漏间电流来读出感光时产生并且进入电荷耦合层中的光电子数量。
载流子控制区的控制栅,用以在其上施加一个脉冲电压,使得在P型半导体衬底读出区中产生用于激发光电子的耗尽区,同时也可以作为电输入端,输入其中一位运算量。
此外,P型半导体衬底和电荷耦合层之间存在一层用于隔离的底层介质层;电荷耦合层和控制栅之间亦存在一层用于隔离的顶层介质层。
实施例3
如图5所示,本实施例的计算单元包括:作为光生载流子收集和读出区的光电二极管和读出管,其中,光电二极管通过离子掺杂形成,负责感光。光电二极管的N区通过作为耦合区的光电子耦合引线连接到读出管的控制栅和复位管的源端上,读出管的漏端施加一正电压脉冲,作为读出电流的驱动电压;曝光前,复位管打开,复位管漏端电压施加到光电二极管上,使作为收集区的光电二极管处于反偏状态,产生耗尽层;曝光时,复位管关断,光电二极管被电学上隔离,光子入射光电二极管耗尽区后产生光电子,并在二极管中积累,二极管的N区和在电学上通过作为耦合区的光电子耦合引线和N区连接的读出管控制栅电势开始下降,进而影响读出管沟道内的电子浓度。读出管负责读出,其漏端施加一正脉冲电压,源端和选址管漏端连接,读出时,打开选址管,读出管中产生电流电流,电流大小受到复位管漏端电压、读出管漏端电压和入射光子数共同影响,读出管沟道内的电子,作为被光输入量和电输入量共同作用后的电子,以电流的形式输出,其中复位管漏端电压、读出管漏端电压可以作为器件的电输入量,电入射光子数则为器件的光输入量。
耦合区的光电子耦合引线用于连接作为光生载流子收集和读出区中收集区的光电二极管和作为读出区的读出管,将光电二极管N区电势施加到读出管控制栅上。
作为载流子控制区的复位管,通过其漏端输入一个正电压作用于光电二极管,当复位管打开时,正电压即会作用在光电二极管上,使光电二极管产生耗尽区并感光,同时也可以作为电输入端,输入其中一位运算量。
此外,选址管用于控制整个运算器件作为输出量的输出电流的输出,可以在光电计算单元组成阵列时行列选址使用。
实施例4
本实施例使用多个发光单元和实施例1、2或3的计算单元结构组成光电计算阵列,来实现偏微分方程求数值解的运算。
差分方法又称为有限差分方法或网格法,是求偏微分方程定解问题的数值解中应用最广泛的方法之一。它的基本思想是:先对求解区域作网格剖分,将自变量的连续变化区域用有限离散点(网格点)集代替;将问题中出现的连续变量的函数用定义在网格点上离散变量的函数代替;通过用网格点上函数的差商代替导数,将含连续变量的偏微分方程定解问题化成只含有限个未知数的代数方程组(称为差分格式)。如果差分格式有解,且当网格无限变小时其解收敛于原微分方程定解问题的解,则差分格式的解就作为原问题的近似解(数值解)。
以拉普拉斯方程的数值解法为例(别的偏微分方程的求解方法和过程类似),首先写出完整的拉普拉斯方程如下:
现在的问题其实是要在一个给定的二维区域中求解满足方程的每一点(x,y)。一些区域中的点将被用来给出边界条件。
于是将整个二维区域离散化成若干个点,如图6所示为其中的五个相邻点,相邻点的间距为△。
根据偏导数的定义则有:
同理可得:
将上述两个结果带入拉普方程可得:
然后需要使用雅克比(Jacobi)迭代法,假设有一个由n个线性方程组成的系统(线性方程组):
Ax=b (6)
那么Jacobi迭代可以描述为:
其中上标k表示第k轮迭代。
式(5)为离散化后的区域上众多点中的一个点的求解方程,所有点的求解方程合在一起就构成了一个大的方程组。把求解某点(x,y)的方程重写成Jacobi迭代的形式,则有:
重复应用上述迭代式,最后方程就会收敛到解的附近。
本来连续的一个区域经过离散化处理之后就变成了一个网格结构,假设网格的大小是n
2,它们的标签为
如图7所示。
上面这种自然排列的点序可以得出不超过n2个五元线性方程:
xi-n+xi-1-4xi+xi+1+xi+n=0 (9)
对于边界上的点,不使用上述方程,而是带入相关的边界条件。边界条件也体现在第一次迭代的初始未知解向量的数值中。
通过上述过程,成功将偏微分方程的求解过程转换成矩阵向量乘和向量加法的形式,将每一次的迭代公式记为:
Xk+1=B+Xk*A (10)
得到上述迭代公式后,对于实际任务中高精度的计算需求,可能会出现系数矩阵A中的数据位宽超过光输入最大位宽的情况,此外,为了保证所需的精度,光输入实际能使用的位宽可能小于最大位宽。
假定系数矩阵A中的数据位宽为p,实际光电计算阵列中光输入设定为q位,则需要用p/q的上取整个光电计算阵列才能表示系数矩阵A中的数据,记为l个,即:
(l-1)q<p≤lq (11)
这里的p和q均没有考虑符号位,考虑符号位则把p和q分别变成p+1和q+1。
将系数矩阵A中的数据位宽补足为lq位,从最高位开始补零,如果是带符号位的补码形式,就用1补足。
然后将光电计算阵列进行分组,第一组的阵列的光输入均为系数矩阵A中数据的从低到高的第1到第q位,记为A1,第二组的阵列的光输入均为系数矩阵A中数据的从低到高的第q+1到第2q位,记为A2,以此类推,第l组的阵列的光输入均为系数矩阵A中数据的从低到高的第(l-1)q+1到第lq位,记为Al。这里的光输入由驱动器完成。
以计算向量Xk和矩阵Ai的乘法运算Xk*Ai为例,其中Xk为1*n2向量,Ai为n2*n2矩阵,如式(2-1-12),计算示意图如图8所示,图中标有V字符的方框单元即代表计算单元,其中向量Xk中的元素通过电输入端输入,矩阵Ai中的元素通过光输入端输入。
首先,采用串行或并行的电输入方式,将Xk每一个的元素在控制系统中进行二进制转化:
m取决于向量Xk中单个元素的位宽。
将计算单元按照如图8所示的形式排列成光电计算阵列,其中阵列的行数为n2,列数为n2,并且将阵列的所有同一行的计算单元的载流子控制区都相连,输入同样的电输入数据;将阵列的所有同一列的计算单元的载流子收集区和读出区的输出端都相连,使得输出的电流汇聚相加。
输入时,将每一组矩阵A
i中的n
2*n
2个数据,通过光输入端依次输入到该组每一个阵列的n
2*n
2个计算单元中,共l组;将向量X
k中的元素从同行单元相连的控制栅极上串行/并行输入。对于串行的情况,同一元素不同比特位的二值数据分时依次输入,当控制栅上输入的是最低比特位的数据时,矩阵中的元素和向量中元素的最低比特位的二值数据进行对应位的相乘,即等于进行了运算(14);对于并行的情况,向量中各元素的第1比特位,即
将上述二值矩阵的每一个元素分别输入该组阵列中第1小组阵列的各行的载流子控制区上,同样,后续第j比特位,输入到第j小组阵列的载流子控制区上,将二值化后的向量数据一一并行输入到m小组阵列的全部载流子控制区上。对于第1小组阵列,矩阵中的元素和向量中元素的第1比特位的二值数据进行对应位的相乘,即等于进行了运算(14):
电流汇聚前,n2*n2的计算单元阵列,每一个单元的计算结果分别为:
再经每一列的输出端都相连的输出电流电路,即等于进行了按列相加运算,结果(15)经汇聚相加后,最下方的矩阵向量乘法输出端输出为:
此结果即为式(14)的运算结果,完成了向量最低比特位和矩阵的矩阵向量乘法运算。
对于串行输入的情况,将计算结果(16)经过AD转换后输入控制系统,因为其为最低比特位故而左移0+(i-1)q位,再将向量的次低比特位作为电输入端数据输入载流子控制区,得到向量次高比特位和矩阵的矩阵向量乘法结果,输入控制系统后左移1+(i-1)q位,并与之前所述向量最低比特位和矩阵乘法结果进行向量加法,以此类推,所有组串行输入完向量的所有比特位二值数据,在控制系统中依次移位和累加后,即得到最终的矩阵向量乘运算结果,等同于进行了式(17)的运算。
对于并行输入的情况,如图10所示,和上述第1小组阵列的计算过程相似,其他第2到第m小组阵列分别从每一行的控制栅上输入向量第2比特位到第m比特位的二值化数据,分别输出相应的矩阵向量乘法结果后从输出端输出,再将m小组的计算结果经过AD转换后输入控制系统,第j小组阵列的结果向量所有元素左移j-1+(i-1)q位,然后在控制系统中将完成移位后的所有组所有小组的输出结果按照向量加法的规则累加,即得到最终的矩阵向量乘运算结果,等同于进行了式(17)的运算。
之后在控制系统中,完成式(10)所示的剩余向量加法运算,即得到本次迭代的结果向量Xk+1。
对于下一次迭代,将Xk+1在控制系统中进行串行/并行所需的比特位处理,作为下一次迭代的输入向量,输送到各个光电计算阵列中,光输入保持不变。
以此类推,直到完成所有的迭代,得到最终的偏微分方程数值解向量。
运算的过程,串行的情况如图9所示,其中图中的每一个中间写有“串行矩阵向量乘法器”的方框即代表一个n2*n2的单元阵列,为一个阵列组;并行的情况如图11所示,其中图中每一个中间中间写有“并行矩阵向量乘法器”的方框即代表m个n2*n2的单元阵列,为一个阵列组。
装置的示意图,大致如图12所示。控制系统可以是数字电路,也可以是计算机、单片机、FPGA等多种逻辑控制单元。
在控制系统中,为了支持浮点数输入向量和结果向量,设置了定浮点转换器,支持双精度浮点数转换成指定位数的定点数、单精度浮点数转换成指定位数的定点数、指定位数的定点数转换成双精度浮点数、指定位数的定点数转换成单精度浮点数。只要将初始的浮点数输入向量转换成指定位数的定点数,传输进各个光电计算阵列中,再将最后得到的数值解结果向量转换成浮点数即可。
以单精度浮点数转30位定点数为例,如图13所示。对于一个32比特位单精度浮点数,其符号位直接对应于定点形式的符号位,其阶码的最后5比特位(27-23位)和第30位,再加上可配置参数一起经过一个编码器后,得到5比特位移位计数码进入左移/右移模块,表示需要移动的位数,编码器还有1比特位输出,表示左移或者右移。在其尾数前(22-0位)加上一个1,传输进移位模块,共24比特位,输出结果为29比特位,加上符号位即得到所求30比特位定点数的原码。之后根据符号位的不同,若为0则补码等于原码,若为1则将原码取反加1,得到30比特位定点数的补码。
以30位定点数转单精度浮点数为例,如图14所示。对于一个30比特位的定点数补码,其符号位直接对应于30比特位定点数原码和浮点形式的符号位,其它29比特位先经过不变或者取反加1的操作变成30比特位定点数原码后,再分别被传送至编码器和移位模块中。编码器通过寻找第一个非0的位置,再根据可配置的参数值,向移位模块中发送一个6比特位的移位计数码,其中5比特位表示需要移动的次数,1比特位表示左移或者右移。编码器还发送6比特位的阶码,是浮点数的阶码的27-23位和第30位,阶码的29-28位为定值11。移位模块的23比特位输出成为浮点数的位数的22-0位。所得的32比特位数据即为该30比特位定点数的浮点形式。