王颖颖,庄 毅,孙逸帆
(南京航空航天大学计算机科学与技术学院,江苏 南京 211106)
随着系统复杂度以及器件集成度越来越高,由辐射引起的单粒子效应所带来的危害也越来越被重视。由于单粒子效应导致的软错误会使器件中的数据位发生翻转,破坏数据值或逻辑操作并导致静默数据损坏(Silent Data Corruptions, SDC)、崩溃,或者可以被屏蔽而不会导致可观察到的错误[1-2],进而会引发不可预估的严重后果。集成电路中不同组成部分对软错误的反应也截然不同。特别是存储类的组件对软错误更敏感,而且由于它们的面积很大,所以软错误问题最为严重[3]。例如,2003年的万圣节期间,太阳质子导致一颗地球静止卫星的CPU发生故障,引发了许多科学卫星(如SOHO、ACE、wind、polar和goes等)数据丢失的严重后果。
中央处理器(Central Processing Unit, CPU)是整个系统运算与控制中最核心的信息处理单元和处理单元。此外,在计算机系统中每个软件层的所有操作,在最后都是由中央指令组反馈至CPU中执行的[4]。所以,CPU的可靠性也严重影响整个系统的性能。其中不乏一些在特定环境下广泛应用的CPU,例如在宇航领域和核能领域的低辐射环境中,就对CPU的可靠性提出了更高的要求。
作为可靠性分析与评估的有效手段,为研究对象建立相应的可靠性模型的方法在各个领域被广泛使用。目前最主要的建模方法主要有2类,分别是传统的基于数理统计的模型以及基于智能算法的数据驱动模型。基于数理统计的模型是一种定量进行可靠性分析与评估的方法,通过将大批量的描述研究对象的可靠性统计数据进行对比分析或者基于数学模型的方式来对研究对象进行可靠性分析与评估。基于智能算法的数据驱动模型是通过获取研究对象的真实运行数据进行分析和推演,以达到能够真实反应研究对象可靠性水平的目的。
但是,在多种BP神经网络等智能算法在进行可靠性评估时仍然存在参数优化困难,模型准确率较低等问题。这是因为,在基于失效数据进行可靠性分析与评估的过程中,BP神经网络的学习速度、收敛速度都比较慢,而且极易陷入局部极小值。
针对基于智能算法的数据驱动可靠性评估模型中的问题,本文开展基于粒子群优化BP神经网络的可靠性评估模型的研究。主要贡献如下:1)提出一种基于正弦映射的方法对粒子群算法进行优化,对粒子群算法中的速度方程以及位置方程进行调整;2)提出一种基于粒子群优化BP神经网络的适用于CPU的可靠性评估模型CPU-REM(CPU Reliability Evaluation Model Based on PSO Optimization BP Neural Network),给出完整的可靠性评估算法;3)通过对比实验,验证该评估模型的有效性和准确性。
(1)
(2)
根据式(1)和式(2)来更新粒子本身的移动的速度以及移动的方向,从而可以产生新的种群。其中,Xi=(Xi1,Xi2,…,XiD)表示粒子移动方向的向量,Vi=(Vi1,Vi2,…,ViD)表示粒子的速度向量,pbesti=(pbesti1,pbesti2,…,pbestiD)表示局部最优值,gbesti=(gbesti1,gbesti2,…,gbestiD)是全局最优值。c1和c2表示加速度常数,通常设置为2。rand1和rand2是分布在[0,1]范围内的2个随机均匀值。
(3)
ω=ωmax-((ωmax-ωmin)/itermax)·iter
(4)
其中,ωmin代表开始时粒子的权重,ωmax表示最大迭代次数时的粒子的权重,通常取0.4和0.9,itermax和iter分别表示终止时的迭代次数和当前迭代次数。
反向传播网络(Back Propagation Network, BP),是一种基于误差反向传播算法的多层前馈网络,是目前最成功和应用最广泛的人工神经网络[9-10]。BP网络是一种层次结构,一般由输入层、隐藏层和输出层组成[11]。其中,隐藏层可以不止一层,每一层也是由多个神经元组成。BP网络的训练过程包括2个部分:误差前向传播和反向传播。在前向传播的情况下,样本数据从输入层开始,依次经过隐藏层和输出层,最后输出层输出结果。将输出值与期望值进行比较,并计算误差,然后继续误差的反向传播阶段。对于反向传播,输出误差是从输出层通过隐藏层到输入层的反向计算,并将误差分配给每一层中的每个神经元。一旦所有神经元获得误差信息,每个神经元的权重将根据误差进行校正。通过不断调整的权重使网络最终的输出误差减小到规定的范围内。
在前向传播过程中,输出层的第i个神经元的输出Oi可用式(5)[12]表示:
(5)
其中,ωji表示输出层的第i个神经元与前一层的第j个神经元之间的连接权重,Ii表示第i个神经元的输入,θi表示的是第i个神经元上的阈值。
在前向传播结束后,输出值与期望值之间的误差,可以通过式(6)计算:
(6)
其中,n表示网络中输出向量的维度,m表示网络中输入层向量的维度,dik表示第k个输入向量在第i个输入向量维度上的输出值,oik表示第k个输入向量在第i个输入向量维度上的实际值。
如果计算的误差满足设置的预测精度,则训练结束;否则,可利用式(7)对网络中各层神经元之间的连接权重和阈值进行调整,使得网络的输出值与实际值之间的误差大小在所设置的允许范围内。
Δωij=-λ(∂Ε/∂ωij)
(7)
其中,λ表示学习速率。
BP神经网络具有较强的非线性映射和泛化能力、较高的自学习和自适应能力。但同时BP神经网络也很容易陷入局部极小值问题,而且其收敛速度也较慢,因此需要采用一些方法对BP网络进行优化来改善它的问题。PSO算法利用粒子群中个体的局部信息和全局信息进行搜索,收敛速度快,并且易于实现。通过粒子群算法对BP神经网络进行优化,能很好地弥补BP神经网络的上述不足之处。此外,BP神经网络的预测精度与启发式算法的搜索能力也密切相关,因此改进粒子群算法的搜索性能,以获得更好的网络参数,也可以抑制BP神经网络的过拟合或欠拟合问题。
为了减少BP神经网络预测精度的波动,本文采用粒子群算法对BP神经网络的权值和阈值进行优化。但由于粒子群算法很容易陷入局部最小值和过早收敛,所以本节首先采用正弦映射方法对PSO算法进行改进,然后利用改进的粒子群算法进一步来调整BP神经网络中的参数。所提出的可靠性评估模型的流程如图1所示。
图1 粒子群优化BP神经网络可靠性评估流程
1)位置更新方程的调整。
众所周知,粒子群算法中的全域搜寻能力和局部搜寻能力是互相对立的。想要获取更佳的优化性能,必须要有效地均衡其探索和开发能力。由标准粒子群优化算法的位置更新公式可知,每个粒子新的移动方向主要由该粒子先前的方向向量和移动向量决定。所以,为了进一步提高粒子群的特性,对粒子的位置更新公式从3个方面进行改进,引入一个动态权重、加速度系数和目前位置全局最优位置。
基于以上3个变化的位置更新方程如式(8)[13]所示:
(8)
ωij=ψ=ef(j)/u/(1+e(-f(j)/u))iter
(9)
ω′ij=1-ωij
(10)
其中,f(j)表示第j个粒子的适应度,u是第一次迭代粒子的适应度平均值。
2)惯性权重的调整。
在标准粒子群更新公式中,权重因子ω代表着粒子的搜索能力。当值较大时,算法对全局进行优化的能力相对强,对局部进行优化的能力相对弱;当值较小时,算法对全局进行优化能力就会相对弱,而对局部进行优化的能力就相对强。因此,通过动态改变ω的大小,可以动态地改进算法的搜索能力。到目前为止,最常用的方法是通过线性递减权重[14-15]来动态变化。然而,该方法降低了PSO算法的收敛速度和精度,本节提出一种基于混沌映射调整权重因子的方法。相比于线性递减权值的方式,混沌映射[16-17]可以更快地搜索。
本文通过混沌映射中的Sine映射对权重因子ω进行调整,更新方法如式(11)所示。式中r表示控制系数,其取值范围为[0,4]。
ωiter+1=r·sin(πωiter)/4
(11)
同时,为了提高粒子的搜索能力对式(11)中的控制系数采用线性递减的方式来更新其值,其更新方程如式(12)所示:
r=rmax-((rmax-rmin)/itermax)·iter
(12)
其中,rmax、rmin分别表示最大控制系数和最小控制系数,在这里设置为4和0。
综上,粒子新的速度更新公式可由式(13)表示:
(13)
基于正弦映射法优化的标准PSO算法(Optimizing PSO Algorithm based on Sine Map, SM-PSO)的伪代码如图2所示。
图2 基于正弦映射法的标准粒子群优化算法
基于SM-PSO-BP建立的CPU可靠性评估模型是将其CPU中各个模块的可靠度作为模型的输入,即I=(I1_R,I2_R,I3_R,…,In_R)。其中,I1_R表示功能模块1的可靠度,I2_R表示功能模块2的可靠度,I3_R表示功能模块3的可靠度,In_R表示功能模块n的可靠度。因此,输入层神经元的数量为ni=n;将CPU的可靠度RCPU作为SM-PSO-BP的预期输出O=(RCPU),所以输出神经元的数量可以确定为no=1。其隐藏神经元的个数可以通过经验方程和试错法来确定,经验方程的定义如式(14)[18-19]所示:
(14)
其中,ni、no、nm分别表示输入层、输出层和隐藏层神经元数量。因此,SM-PSO-BP即为一个具有3层结构的BP神经网络评估模型。模型建立的具体过程如下:
1)粒子群优化算法中的粒子的维度D可以通过ni、no和nm,即输入层、输出层和隐藏层的神经元数量来确定,其表达式如式(15)所示:
D=nm+no+ni×nm+no×nm
(15)
2)把输入向量中的第一个分量功能模块1的可靠度与隐藏层中各个神经元的连接权重定义为c1i,第二个输入分量功能模块2的可靠度与隐藏层中各个神经元的连接权重定义为p2i,第三个输入分量功能模块3的可靠度与隐藏层中各个神经元的连接权重定义为m3i,第n个输入分量功能模块n的可靠度与隐藏层中各个神经元的连接权重定义为lni,其中i=1,2,…,nm。所建立的SM-PSO-BP模型的输出层向量中只有一个分量,即CPU的可靠度,所以可以用rj1表示输出层的分量与隐藏层中的各输入分量之间的连接权重。同时,根据隐藏层中的各分量与输出层分量之间的阈值θij、θjk可以确定维度为D的SM-PSO中位置的初始向量X,如式(16)所示:
XD=(c11,…,c1i,p21,…,p2i,m31,…,m3i,…,ln1,…,lni,θij,r11,…,rj1,θjk)
(16)
之后,根据SM-PSO中的位置更新公式对粒子的位置进行更新,即可得到模型中隐藏层神经元i的输出公式,如式(17)所示:
(17)
其中,f(·)表示模型的激活函数,在该模型中为Sigmoid函数。因此,该模型中的CPU的可靠度RCPU的输出公式表示为式(18):
(18)
3)SM-PSO中的粒子的适应度函数,fe是由模型中的期望的CPU可靠度rCPU与通过该模得到的CPU的可靠度RCPU之间的均方误差决定的,其表达式如式(19)所示:
(19)
根据以上流程可建立如图3所示的CPU可靠性评估模型。
图3 CPU可靠性评估模型结构
该模型将SM-PSO搜索的能力与BP神经网络泛化的能力相结合,利用SM-PSO算法寻找BP模型中最优的权值和阈值。SM-PSO-BP模型的训练和评估流程是:首先利用SM-PSO算法修正BP神经网络的初始权重和阈值;之后,利用BP神经网络的本身机制,进一步对确定的权值和阈值进行优化。如果模型的预期输出与实际值之间的差值最小,那么此时的值就是最优的权值和阈值。最后,将CPU中不同模块的可靠度信息作为该模型的输入向量,通过该模型即可得到CPU的可靠性参数。
一般来说,基于SM-PSO-BP的可靠性评估模型的使用过程主要分为模型训练阶段和模型评估阶段。模型训练阶段是将收集到的功能模块1的可靠度I1_R、功能模块2的可靠度I2_R、功能模块3的可靠度I3_R、功能模块n的可靠度In_R信息以及标准CPU可靠度输入到模型,通过层层计算,得到模型训练过程中输出层的输出值即CPU的可靠度,进而可以求得模型输出的可靠度与标准预期的可靠度之间的误差,而该值就是SM-PSO算法中粒子的适应度值,然后对粒子的位置向量进行不断调整,从而完成该模型的训练;第二个阶段是将需要评估的CPU中的各个组件的可靠度数据输入到该模型中,即可完成对该CPU的可靠性的评估。该模型的具体执行步骤如下:
步骤1 设定模型的输入个数、模型中隐藏神经元数量、输出的个数和允许的最大差值,并确定SM-PSO中其它各因子的初始值和终止条件,以进行该模型的初始化;步骤2 模型的输入向量为数据集中各功能模块的可靠度信息,输出向量为预期的CPU可靠度rCPU,然后对模型进行训练;步骤3 根据模型输出的CPU可靠度RCPU公式(19)计算其与预期的CPU可靠度rCPU之间的均方误差,如果该误差小于所设置的最大误差,就执行步骤6;否则,就将计算得到的RCPU与rCPU之间的均方误差作为SM-PSO算法中粒子的适应度值,并通过改进的粒子的移动速度调整方程和改进的粒子移动方向调整方程进行计算,得到粒子的局部最优值和全局最优值;步骤4 通过式(13)和式(8)对SM-PSO算法中粒子的移动速度调整方程和改进的粒子移动方向调整方程进行更新,形成新的粒子种群,以达到对BP神经网络中的权值更新的目的;步骤5 重新计算通过模型SM-PSO-BP的输出层的输出的CPU可靠度值与预期值之间的均方误差。如果所得的值比允许的最大误差小,执行步骤6;如果比允许的最大误差大,执行步骤4;步骤6 如果均方误差在容许的范围内,就把此时训练中的输入神经元与隐藏神经元之间的权值和阈值,以及隐藏神经元与输出神经元之间的权重和阈值保存下来,模型训练完成;步骤7 将要评估的CPU的各个组件的可靠度信息作为模型的输入,记录模型的输出,即是要评估的CPU的可靠度。
本节采用5个经典基准函数[20-21]来评估所提出的SM-PSO方法的性能,这些函数的表达式如表1所示。
表1 基准函数表达式
此外,所有实验功能均在采用Intel i5 7500 CPU、16.0 GB和1 TB RAM的计算机上运行,代码在MATLAB R2020a上编程。通过将SM-PSO与PSO、CPSO以及文献[22]中提出的改进方法CIW-SPSO,进行比较以验证其有效性。为了更清楚地比较所选方法的优缺点,选择最大迭代次数为100,种群大小设置为50。此外,ωmax和ωmin在PSO的取值分别为0.9和0.4,正弦分布控制参数rmax和rmin的值分别设置为3和1。CIW-PSO中的参数与文献[18]中设置相同,μ=4 。基准函数的维度选择50,并以输出值的均差和标准差来比较3种算法的性能。其中均值和标准差的表达式分别如式(20)和式(21)所示:
(20)
(21)
其中,n是迭代次数,Mean是目标值的平均值,SD是标准差。
从图4~图8可以看出,与其它3种算法相比,本文提出的SM-PSO以同样的参数同时搜寻最优值时,其收敛速度明显比其他算法更快,且搜索精度也更高。此外,从表2和表3也可以看出,SM-PSO方法寻找最优值所花费的迭代时间也比其他方法更少。从以上比较结果可以得出结论,SM-PSO方法在相同迭代次数下,其收敛速度、收敛精度都更高于PSO、CPSO和CIW-SPSO方法,可有效避免PSO算法中的局部最优问题。
图4 函数F1的变化曲线对比
图5 函数F2的变化曲线对比
图6 函数F3的变化曲线对比
图8 函数F5的变化曲线对比
表2 性能比较结果(1)
表3 性能比较结果(2)
3.2.1 CPU组成及可靠性分析
CPU是系统运行和控制的核心,是系统中使用最频繁,也是对辐射单粒子效应最敏感的系统组件。虽然不同架构的处理器的设计有很大的差异,但是其具有的功能大都是相似的。由文献[23]可知,CPU通常是由7个部分组成,包括总线接口部分、指令预取部分、译码部分、控制部分、运算部分、存储部分和高速缓冲存储器。其中,运算部分负责的主要是各种运算,包括算术运算(比如加、减、乘、除等)和逻辑运算(比如与、或、非等);控制部分主要是对指令进行读取并分析,然后做出相应的控制;存储部分则是用来存放在运算过程中产生的各种中间结果;总线接口部分则是完成CPU与外部设备的联系。
根据研究项目要求,本文重点对单粒子效应敏感的ARM架构的CPU进行分析,图9为ARM架构的架构图[24]。由于研究对象为软错误下的CPU可靠性,因此本文根据对其架构以及相应的功能分析,把该芯片划分为Cache、PFU、MPU、LSU以及DPU这5个功能模块。Cache,即缓冲存储器,是一个位于CPU和内存中间的存储器,主要用来存储短时间内CPU即将访问的内存数据。PFU,即预取单元,是从主存储器中获取指令,并预测分支指令的结果(例如,条件、循环和函数返回)。MPU,即内存保护单元,用于捕获并中止非授权(即非法)内存访问。LSU,即负载存储单元,可以有效管理所有加载和存储操作。DPU,即数据处理单元,包含浮点单元、硬件乘法累加(MAC)单元和一个用于高性能计算的除法器。此外,预解码阶段用于适应分支预测和指令的队列也能使DPU接受指令。
图9 ARM板架构图
由以上分析可知,CPU是由多个模块共同构成的,在程序运行时其多个模块之间相互协同共同完成特定的功能。本文以串联结构的形式来描述CPU之间多个模块与CPU的连接关系。
根据各个模块的相对独立性以及协同关系,将CPU的故障率定义为各个模块的故障率的累加和。其表达式如式(22):
(22)
其中,ωi表示权重,即每个功能模块的集成度与整个CPU集成度的比值。λi(m)表示模块的故障率。因此,CPU的可靠性可用式(23)来表示
(23)
3.2.2 实验数据
1)数据集构建。
文献[25]将在物理CPU硬件上的光束实验与基于Gem5上的等效CPU模型的微架构故障注入实验相比较,实验结果表明故障注入可以非常准确地用于预测静默数据损坏和应用程序崩溃,而且其结果与光束实验的故障结果之间的总误差率之间的相对差异在一个较小的范围内。因此,本文中实验也采用Gem5[26-27]模拟仿真工具进行模块模拟和故障注入,对CPU的模块进行故障注入并进行结果分析。此外,本文把检测到的由软错误造成的所有故障类型的概率定义为CPU模块发生失效的概率。由于仿真模拟器的限制,本文仅对CPU中的CACHE、PFU、LSU以及DPU模块中的REG、FREG和PC等寄存器进行模拟。实现选取Mibench基准测试程序组作为模拟故障注入实验的测试基准。此外,将可靠性权重ωi定义为模块故障注入空间大小占CPU总的故障注入空间大小的比值。
实验单独进行30组,每组都进行相同的100次故障注入,将得到的20组数据用作模型训练,剩余的10组数据用作测试。
2)实验参数设置。
本节通过分别建立基于BP网络的CPU可靠性评估模型和基于SM-PSO-BP的CPU可靠性评估模型(CPU Reliability Evaluation Model based on Sine Map optimize PSO algorithm, CPU-REM)进行仿真实验。其中,模型中输入层的数量为4。根据分析可知,该模型的输出只有一个,即CPU的可靠度,因此输出层为1。通过试错法和式(14)可以把隐藏层神经元的数量敲定为6,BP神经网络通过标准梯度算法进行训练,允许最大误差为1×10-3,设定学习速率为0.3,训练次数为1000次;CPU-REM模型中PSO种群的规模为50,粒子的空间维度由式(15)确定为37,设置c1=2,c2=2,惯性权重最大值ωmax=0.9,最小值ωmin=0.4,将正弦分布控制参数的值分别设置为rmax=4和rmin=0,粒子群的最大迭代次数为itermax=500。
为了验证该CPU评估模型的学习训练速度,用构建的相同的样本数据对CPU-REM模型进行学习训练,并与传统BP神经网络模型比较。
在训练最小误差达到1×10-3时,经由图10的训练曲线即可得知,BP神经网络的训练次数高达1000次,而在图11中CPU-REM评估模型只训练100次左右就终止了。这主要归功于由正弦映射改进的粒子群算法优化的BP神经网络,更快地确定了BP网络的权值和阈值,从而使得其收敛速率比传统BP网络更快。
图10 BP神经网络训练曲线
图11 CPU-REM模型训练曲线
图12是CPU-REM模型对CPU可靠性进行评估后的与实际值之间的曲线对比图,可以看出该模型对CPU可靠性进行评估的过程中具有较好的精度。图13为采用CPU-REM模型与采用其它模型对CPU可靠度进行评估时与实际可靠度之间的误差曲线图,通过比较可以看出,CPU-REM对CPU的可靠性具有更好的评估能力,可以有效弥补由各种环境因素等对可靠性评估结果造成的偏差,能够全面真实地反映CPU的可靠性。
图12 CPU-REM模型评估
图13 CPU-REM模型与其它模型的评估误差对比
本文提出了一种新的基于粒子群算法优化BP神经网络的可靠性评估模型,并给出了相应的算法和流程。该算法克服了以往基于神经网络的可靠性评估模型中存在的收敛速度慢、评估精度不够准确等问题。仿真及实验结果表明,本文提出的评估模型具有更快的学习速率和更高的评估精度,能够有效地完成对辐射环境下CPU的可靠度进行评估的能力。