《武汉工程大学学报》  2015年11期 74-78   出版日期:2015-12-30   ISSN:1674-2869   CN:42-1779/TQ
多视点去模糊算法在双核DSP上的并行优化


0 引 言去模糊是数字图像处理中的一个重要分支,它能将原始的模糊图像处理变成目标可识别的清晰图像[1-3]. 一般图像去模糊算法主要在PC机上运行处理,但是PC的体积大,成本高,专用性不好,并不适用于特定场合下的专用领域[4]. 目前DSP在图像处理领域通常采用的是单核DSP,或者是使用多片DSP级联的方式[5-6]. 经过近几年的发展,陆续出现了各种多核DSP芯片,这种高性能,低功耗的芯片,相比于目前市场上的主流图像处理芯片在性能,外设,架构方面都更加强大,更加适合运行复杂的图像处理算法[7-8],如在医疗影像以及基础设施设备等方面的运用[9]. 本研究将多视点去模糊算法移植到了TMS320C6657双核DSP芯片上,使整个图像处理系统的体积,成本,功耗等大大减小,运用范围变得更加广泛. 根据DSP的双核架构[10],采用了多核并行处理的思想[11],对程序中矩阵相乘部分作了相应的优化调整. 实验结果表明,优化后的算法缩短了多视点去模糊算法在DSP上的运行时间,提高了运算效率. 1 多视点去模糊算法在双核DSP上的移植与优化1.1 多视点去模糊算法的移植与改进方向分析多视点去模糊算法移植以CCSv5.2作为软件开发平台. 在算法程序的移植过程中,主要使用CCSV5.2编译调试程序,查看实验图像,校准实验结果. 基本过程为:先在CCS上新建一个工程,将现有的多视点去模糊程序根据开发板的硬件结构,修改定义变量的存储空间,编译通过后,进入软件或硬件调试模式,将图像数据以.dat文件加载到指定的内存中,然后开始运行直至得到实验结果.多视点去模糊算法相对其他算法来讲更加复杂,各种运算繁多,调用到的子函数种类也很多. 如果对程序中的每个函数都进行分析优化,工作量大,具有盲目性,是不切合实际的. 为了提高优化效率,让算法更加快速稳定的在硬件上运行,我们需要对算法的初次移植实验结果中各个部分以某一个预定指标来做一个分析对比,找到算法程序中计算效率低,占用资源空间大,耗费时间长的部分,然后对这部分做针对性的改进和优化. 在时间层面上的优化设计是程序优化当中的一个重要指标,通过对整个程序当中各个功能函数的运行时间测定来确定哪个函数是最耗费时间的,然后以减少时间消耗为目标,再来分析算法中的函数,判断是否具有改进的空间,最后进行针对性的修改,从而实现程序的快速运行. 1.2 程序在DSP中运行时间的测定在调试多视点去模糊程序的过程中,如何精确测量某个函数或某段代码的时间消耗量是必须要解决的问题. 在C66xx系列DSP上每个核都具有TSCL,TSCH这两个计数寄存器,我们以这两个寄存器作为计时工具. TSC全称为时间戳计数器,它具有与CPU相同的频率,共同表示一个64 bit数,每当CPU运行一个周期,该寄存器就加1,这两个寄存器的值精确地反映了CPU在某个执行段中消耗的周期数量. 使用这种方法测量时间的基本公式为: t=(a1-a0)■ (1)式(1)中,a0表示待测试代码段前获取的CPU运行的周期数;a1表示待测试代码段执行完成后获取的CPU运行周期数;f表示CPU的运行频率;a1-a0表示CPU运行的周期数,t为所求的CPU运行时间. TMS320C6657的运行频率f为1 000 MHz,带入公式中就能计算得到时间t. 我们可以将多视点去模糊的程序划分为几个基本的功能函数,然后使用这种方法统计出每个功能函数运行所消耗的时间. 表1为以128*128大小的灰度图作为输入图像,运算过程中各部分功能函数所用时间.表1 4种功能函数运行时间的统计Table1 Statistics of the running time of four performance functions从表1的数据分析中可以看到,多视点去模糊最耗费时间的是功能函数03,即求解图像的psf (点扩散函数)部分. 为了具体确定功能函数03当中哪一部分子函数的运算时间最长,我们可以再按照这种方法以一幅128*128灰度图为例将求解psf这个功能函数中调用到的5个不同子函数的运行时间做进一步的统计,实验结果如图1所示. 图1 5个不同子函数的运行时间统计Fig.1 Statistics of the running time of five different sub-functions 从图1中可以看到运算量几乎都集中在func03和func05这两个子函数上,其中func03运算量占比最大,消耗时间最长. 通过对以上图像复原的时间统计结果的分析,可以得出对函数func03的修改,对整个程序在时间消耗量的优化上的作用是最为明显的. 1.3 对去模糊程序中矩阵相乘算法的改进通过对图像去模糊算法和程序的分析,可以发现func03内包含了大量的矩阵运算,其中以两个矩阵相乘求解一个对称矩阵当中所用到的输入数据量最多的,运算量也是最大的. 其计算公式为: A[i][k]×B[k][j]=C[i][j](2)式(2)中,0<i<m,0<j<n,0<k<l. m表示矩阵A的行数,n表示矩阵B的列数,l表示A的列数. 从对应的算法中已知C为对称矩阵,即:矩阵A与矩阵B相乘只需计算0<i<m,0<j<i,0<k<l部分,也就是求出的下三角部分的数据,然后再根据矩阵位置的对应关系直接赋值就能求得整个矩阵C. 在这部分函数运算过程中,因为输入的矩阵数组A和矩阵数组B的数据量都十分巨大,所以计算消耗掉了大量的时间. 根据TMS320C6657DSP的双核架构,对于某些带有大量运算的复杂算法可以修改为双核运行. 为了实现双核并行处理,我们设定了一个分界点d. 这个分界点将矩阵运算过程分解为两块,只要选取的分界点合适就可以将两部分的运算量做到尽量相等,从而每个核都能被得到充分的利用,此时效率也是最高的. 图2和图3分别表示矩阵相乘在单核上运行和在双核上运行. 从上述矩阵相乘的算法结构中可以看出,算法的运算量与输入的数组A和数组B的行数,列数相关;同时,加法的计算量和乘法的计算量是相等的. 单核运行的过程中,A[i][k]×B[k][j]的计算量为m×l次;双核运行过程中,对于A[i][k]×B[k][j]的计算,取0<i<d的部分在核0上运行,取d<i<m的部分在核1上运行,两个核分到的计算量相等,于是可以推导出下列等式: l×(1+d)×■=(d+1+m)×■×l(3)式 (3) 中,参数d表示计算量分界点;参数m表示矩阵A的行数,参数l表示矩阵A的列数,公式两边分别表示核0和核1的计算量. 由上述等式可以推导出对分界点d的计算公式为: d=■(4)利用公式(4)将求得的分界点d带入程序中就可以将func03中矩阵相乘求解矩阵C的过程划分为计算量相等的两块,分别在核0与核1上运行,实现程序的双核并行运算. 同样可以用一幅128*128大小的灰度图像为例,仅针对求解矩阵C这部分算法在单核与双核模式下运行时间的测定来验证优化是否有效,结果如表2所示.图3 双核运行 Fig.3 Dual-core operation表2 不同模式下的运行结果Table 2 The operation results under different mode通过表2中的实验数据,可以得出同一函数使用不同的算法分别在单核与双核上运行求出结果所需的时间是大不相同的. 优化后的算法在双核模式下最长的运算时间与单核模式下的运算时间之比约为1∶2,同时双核模式下两个核的运算时间相近,验证了以上公式对分界点d求解的正确性. 2 多视点去模糊的移植实验为了验证多视点去模糊算法优化前后的最终效果,采用5个镜头,从5个角度同时拍摄5张图片作为实验图片. 这里以拍摄所得的128*128大小的灰度图作为模糊图像进行去模糊实验. 先将拍摄的图像转换成带有图像数据的.dat文件,然后在调试模式中下载到程序指定的内存地址上,最后运行程序. 计算完成后在图像分析器里配置对应的图像属性查看实验结果,同时在控制台窗口中可以得到打印出的函数运行时间和运行状况等相关实验数据. 图4 模糊图像Fig.4 Blurred images图5 多视点去模糊图像Fig.5 Multi-view deblurred images从图4和图5的对比中可以很容易的看出各个角度拍摄到的模糊图像与复原图像的区别. 复原图像轮廓更加清晰,对比度更高,达到了预期的复原效果. 表3记录了以上5幅模糊图在整个图像复原中所需时间. 通过表3中的整个图像运行时间的对比,可以看出将改进后的算法运用在双核上后,运算时间明显缩短,DSP的计算效率得到提高,达到了减少时间的目标,验证了算法优化的有效性. 表3 多视点去模糊所需的时间统计Table 3 The statistics of time required for multi-view image deblurring3 结 语本研究实现了多视点去模糊算法在DSP上的移植,对每个功能函数在运行时间上做出了分析. 对求解点扩散函数中矩阵相乘部分算法作了优化,并通过实验结果对比验证了对分界点求解的正确性. 优化后的算法在整个去模糊的过程中减少了时间消耗,效果明显,为后续算法在时间层面上的优化改进提供了方向. 致 谢本工作得到国家自然科学基金委员会,湖北省科学技术厅和武汉市科技局提供的资金资助,在此一并致以衷心的感谢!