2. 国家超级计算郑州中心, 郑州 450001
2. National Supercomputing Center in Zhengzhou, Zhengzhou 450001, China
开放科学(资源服务)标志码(OSID):
随着大规模集成电路和信息技术的发展,数字信号处理器(Digital Signal Processor,DSP)受到广泛关注,DSP具有高性能、低功耗等特点,可以满足图像处理实时性以及密集型计算的需求,因此,在图像处理领域得到大范围应用。目前,使用较多的高性能DSP主要有TI的C66X系列,其片上集成8个DSP核心,单核浮点运算能力可达20 GFlops[1-2]。近年来,我国高性能DSP的相关研究也取得了一定的成果,其中,由国防科技大学独立研制的FT-M7002性能较为突出。FT处理器片上集成2个DSP核心和1个CPU核心,浮点运算能力达200 GFlops[3-4]。但是,在目前硬件发展较快的同时也显现出国产DSP平台缺乏相应软件支撑的问题。因此,对国产高性能DSP处理器相应的软件环境以及函数库进行适配与调优,充分发挥国产DSP的特殊硬件架构优势具有重大意义。
边缘检测是图像处理和计算机视觉中的重要研究课题,其目的是识别出图像中那些亮度发生明显变化的点。目前,图像边缘检测[5]广泛应用于图像识别、医学影像处理、机器学习等[6-8]领域。传统边缘检测算子包括Roberts算子、Sobel算子、Canny算子、Prewitt算子等[9]。Sobel算子因其耗时短、具有一定的抗噪性、边缘检测效果好而得到广泛应用。近年来,很多学者基于硬件特性对Sobel算法进行改进,并取得了一定的成果。文献[10]基于FPGA提出一种多核矩阵处理器,其采用同构多核结构使数据并行传输和运算。文献[11]基于CUDA架构,根据GPU的并行结构和硬件特点优化数据存储结构。文献[12]基于Zynq-7000系列平台,将ARM处理器与FPGA组合起来并利用异构多核平台实现加速。但是,由于各平台体系结构存在差异性,导致上述优化算法并不适用于FT系列的高性能DSP。
本文面向FT-M7002高性能处理器,基于该平台特性对Sobel边缘检测算法进行优化。具体地,分析Sobel算法特性,判断其是否可以充分利用FT平台架构进行优化,针对算法中密集型数据访存运算,使用向量化、循环展开等优化手段实现数据级并行性,以提高向量寄存器、向量运算部件等硬件的资源利用率。在此基础上,针对DMA产生的数据传输开销,采用双缓冲区结构使得数据传输与数据计算实现并行,并设计对比实验来测试优化算法的正确性及检测性能。
1 Sobel算法原理与FT-M7002体系结构分析 1.1 Sobel边缘检测算法图像边缘即图像中灰度值变化剧烈的位置,梯度算子就是利用图像边缘灰度的突变来检测边缘[13]。Sobel算子包含2个3×3的矩阵,分别对水平和垂直方向上的像素进行滑动检测。假设一副图像中的某个3×3区域如图 1所示,则Sobel算子水平和垂直梯度模板分别如图 2(a)、图 2(b)所示。
![]() |
Download:
|
图 1 3×3区域示意图 Fig. 1 3×3 area schematic diagram |
![]() |
Download:
|
图 2 Sobel算子的水平和垂直梯度模板 Fig. 2 Horizontal and vertical gradient templates of Sobel operator |
2个二维梯度模板可以拆分为2个一维卷积核,分别如下:
X方向卷积模板为
Y方向卷积模板为
以X方向卷积模板为例,其中,
$ {g}_{x}=({z}_{1}+2\times {z}_{2}+{z}_{3})-({z}_{7}+2\times {z}_{8}+{z}_{9}) $ | (1) |
$ {g}_{y}=({z}_{3}+2\times {z}_{6}+{z}_{9})-({z}_{1}+2\times {z}_{4}+{z}_{7}) $ | (2) |
由式(1)、式(2)可以得到该点横向和纵向的亮度差分近似值,从而检测出横向和纵向的边缘。梯度向量的幅值和方向分别如下:
$ g(x, y)=\sqrt{{g}_{x}^{2}+{g}_{y}^{2}}\approx \left|{g}_{x}\right|+\left|{g}_{y}\right| $ | (3) |
$ \alpha (x, y)=\mathrm{a}\mathrm{r}\mathrm{c}\mathrm{t}\mathrm{a}\mathrm{n}\left[\frac{{g}_{y}}{{g}_{x}}\right] $ | (4) |
根据式(3)可以得到该像素梯度的近似值,最后选取合适的阈值,将计算得到的梯度近似值与阈值进行比较[14],若梯度近似值大于阈值,则该点为图像的边缘点;否则,该点不是图像的边缘点[15-17]。由于Sobel算子对像素的位置影响做了加权,可以降低边缘模糊程度,因此其检测效果优于传统的Prewitt算子、Roberts算子。
1.2 FT-M7002体系结构FT-M7002高性能DSP芯片使用三级存储结构,单个计算核拥有32 KB的一级数据缓存以及512 KB的向量存储空间(AM),所有计算核共享2 MB的全局共享Cache,核外拥有32 GB的大容量DDR存储空间[18-21]。FT-MT2内核基于超长指令字(VLIW)结构,包含一个五流出标量处理单元(SPU)以及六流出向量处理单元(VPU),2个处理单元以紧耦合方式工作[22]。SPU用于支持标量定点和浮点运算,主要负责数据的串行处理工作。VPU内有16个同构运算簇(VPE),负责对运算量大的密集型数据进行并行计算。直接存储访问(DMA)部件为内核提供了高速数据传输通路,通过配置传输参数启动对特定存储资源的访问,DMA部件能够实现标量存储空间、向量存储空间与核外DDR空间之间的数据交互。FT-MT2内核结构如图 3所示。
![]() |
Download:
|
图 3 FT-MT2内核结构 Fig. 3 FT-MT2 kernel structure |
VPE内部集成的4个运算部件可以支持标量定点和浮点运算,即该向量运算单元最多可以同时对16路32位数据进行向量运算并且支持混洗/归约操作。FT-M7002特殊的体系结构为大宽度的向量运算提供了高效的数据存储及传输支持,能够在图像处理这种密集重复型计算中发挥优势。
2 基于FT-M7002的Sobel算法 2.1 算法实现OpenCV中通过获取Sobel边缘检测所需的卷积核进行梯度计算。Sobel的实现是通过分离行卷积和列卷积来进行梯度计算,分别从X方向和Y方向对图片进行卷积操作,每个卷积方向又再次划分了横向卷积与纵向卷积,具体实现流程如图 4所示。在进行X方向卷积计算时,先将图像像素点与横向一维卷积模板相乘,然后再将计算之后的卷积结果与纵向一维卷积模板相乘,Y方向与之相同。使用分离的行、列卷积,能够在很大程度上减少计算量,同时又促进了对内存的连续访问。但是,当处理较大的图片时,内存访问量仍然是影响该算法性能的主要因素。
![]() |
Download:
|
图 4 Sobel算法实现流程 Fig. 4 Sobel algorithm implementation procedure |
Sobel边缘检测的主要计算过程是X方向卷积与Y方向卷积,本文先对其核心计算进行热点分析,发现该部分约占整体运行时间的1/2。因此,本文主要针对该核心计算部分使用SIMD使其并行计算,充分利用FT内核中的向量寄存器资源,减少卷积计算部分数据运算的访存次数,此外,利用DMA传输机制设置双缓冲结构使数据运算与传输并行,最大程度地提高算法并行性,并通过FT内部指令封装数据类型转换接口,从而扩展平台的兼容性。
2.2.1 向量并行优化根据Sobel核心计算部分的特性可知,计算过程存在数据连续访问、迭代次数多、计算量大等特点,而FT处理器的内核向量计算特性可以很好地支持其使用SIMD并行化。
核心计算位于循环体内,因此,首先针对循环体进行循环展开,选择适当的展开因子以保证代码体积不会过大,同时提高软件流水并行性,再利用FT内嵌的向量指令对计算过程进行向量化改写。首先,使用数据传输指令M7002_datatrans_cv将内存中的图片数据传输到向量地址空间,通过vec_svbcast将这些数据从标量空间广播到向量空间;然后,利用vec_ld指令从向量空间连续取出16个数据,使用vec_add、vec_muli每次可以完成16个输入数据的乘加操作,计算完成后将结果保存到向量空间;最后,将结果传输回向量地址空间。以3×3核的行卷积为例,具体核心计算部分代码如下:
算法1 部分向量代码改写
M7002_vector int *src_cn =(M7002_vector int *)0x040000000;//起始地址
M7002_vector int *dst_cn =(M7002_vector int *)0x040040000;//目的地址
M7002_datatrans_cv(src_1,src_cn,(width + cn * 4)* 4);//数据搬移
M7002_vector int x0,x1,x2,x3,x4,x5,x6;
M7002_vector int k0 = vec_svbcast(kx[0]);//向量广播
M7002_vector int k1 = vec_svbcast(kx[1]);
for(;i < = width - 16;i += 16)
{
x0 = vec_ld(i + cn,src_cn);//数据加载
x1 = vec_ld(i + cn*2,src_cn);
x2 = vec_ld(i + cn*3,src_cn);
x3 = vec_add(x0,x2);//向量加
x4 = vec_muli(x3,k1);//向量乘
x5 = vec_muli(x1,k0);
x6 = vec_add(x4,x5);
vec_st(x6,i,dst_cn);//存储
}
M7002_datatrans_cv(dst_cn,dst,i * 4);
2.2.2 DMA传输优化在Sobel进行卷积的实际操作中,输入图片对应的矩阵规模一般大于向量存储空间,因此,输入数据需暂时置于核外DDR中,通过DMA将DDR内的数据传输到AM中。
作为数据传输的“中转站”,DMA的传输时间会影响整个算法的效率。为了提高传输速度,本文针对Sobel行卷积操作中的数据连续访存过程,采用双缓冲区传输结构,如图 5所示,将AM空间分成AM0和AM1两部分。基于此模式,数据从核外DDR中传入AM0空间,在判断为有效数据之后开始计算,同时,DMA将下一块数据传给AM1。当AM1中的数据开始计算时,AM0输出上一次的计算结果并启动新数据传输,即在DMA进行传输循环检测前将数据的运算与传输并行化,减少一部分运算时间,从而达到性能优化的目的。
![]() |
Download:
|
图 5 双缓冲机制示意图 Fig. 5 Schematic diagram of double buffer mechanism |
与行卷积数据传输过程不同的是,列卷积存在不连续的数据访问,无法通过向量指令进行连续存取。本文通过设置DMA的目的索引值作为矩阵每行首元素的地址差,将行卷积矩阵中的每一行按列存储在矩阵中,最终实现矩阵转置。
2.2.3 数据类型转换在图像处理库中,默认图片矩阵类型为8u(unsigned char),但是FT向量处理器没有直接处理8u类型的指令,针对该问题,本文利用VPE内部混洗/规约等部件实现数据类型转换并封装成接口,从而实现unsigned char和unsigned int之间的相互转换,扩充FT平台所支持数据的类型。
FT-M7002向量寄存器可一次加载512位数据到向量寄存器中。由于每个VPU包含16个VPE,因此每个VPE中存放4个unsigned char类型数据,要转换成unsigned int类型,即将每个VPE中的4个数据分别放入4个VPE中。如图 6所示,将每个原始VPE中的数据与0XFF按位相与,即可得到新的VPE中的数据存放,连续操作3次就可实现数据转换。
![]() |
Download:
|
图 6 char to int类型转换(VPE0实现) Fig. 6 char to int type conversion (implementation of VPE0) |
图 6只展示了VPE0的实现,可以对VPU中的VPE0~VPE15分别做上述操作。值得注意的是,上述操作得到的数据并不是按序存放的,因此,需要对这些数据进行一次混洗(shuffle)操作,从而得到正确的数据排列方式。混洗单元通过合理配置混洗模式,可以实现VPE中输入数据的按序存放。
3 实验结果与分析本文以3×3、5×5、7×7卷积核为例,分析不同尺寸输入图片对算法加速比的影响,同时将本文优化算法与TMS320C6678中的Sobel算法进行性能对比,以分析2类处理器的单核计算能力。
3.1 实验环境在飞腾平台的FT-M7002开发板上实现Sobel算法优化,调用定时器的计时函数来测试优化后程序段的执行时间,将FT-M7002与TI平台的高性能数字信号处理器TMS320C6678进行对比分析。实验参数设置如表 1所示。
![]() |
下载CSV 表 1 实验平台参数设置 Table 1 Experimental platform parameters setting |
Sobel边缘检测算法能在FT平台上正确运行是算法优化的基础。为了验证优化算法的正确性,将不同尺寸大小的图片输入优化算法并运行于FT平台,将其结果矩阵与OpenCV图像库中Sobel算法的结果矩阵进行对比,将2个结果图片矩阵按像素点相减取绝对值,小于浮点数后6位则认为结果正确。经验证,本文优化算法均能得到正确的处理结果。
3.3 性能分析以Sobel卷积核3×3、5×5、7×7为例,分别以不同数据类型及尺寸的输入图片运行Sobel串行算法和优化算法,在FT-M7002处理器上的运行结果(时钟周期)如表 2、表 3所示。从中可以看出,对于不同数据类型的输入矩阵,本文优化算法可取得1.66~3.14倍的加速效果。加速效果整体趋势如图 7、图 8所示,其中,横坐标表示输入矩阵规模,纵坐标表示本文优化算法相较串行算法所取得的加速比。
![]() |
下载CSV 表 2 8u类型优化前后的性能比较 Table 2 Performance comparison before and after 8u type optimization |
![]() |
下载CSV 表 3 32f类型优化前后的性能比较 Table 3 Performance comparison before and after 32f type optimization |
![]() |
Download:
|
图 7 8u类型Sobel优化算法相较串行算法的加速比 Fig. 7 The speedup ratio of 8u type Sobel optimization algorithm compared with serial algorithm |
![]() |
Download:
|
图 8 32f类型Sobel优化算法相较串行算法的加速比 Fig. 8 The speedup ratio of 32f type Sobel optimization algorithm compared with serial algorithm |
表 2所示为8u类型不同矩阵规模分别在卷积核为3×3、5×5、7×7上运行时的时钟周期以及加速比,图 7为其对应的加速效果柱状图。可以看出,整体加速比为1.75左右,从趋势上来看,在同一输入矩阵规模下,随着卷积核的增大,计算量也在增大,加速比也增大;在卷积核一定的情况下,加速比随着矩阵规模的增大而缓慢增大,最后趋于平稳,这是因为数据存放在DDR中,随着矩阵规模的增大,虽然使用了DMA双缓冲结构,但是传输仍然耗时从而使得加速效果不明显,另外还需要进行数据类型转换,输入矩阵规模越大,类型转换也就越耗时。
3.3.2 float类型测试结果与分析表 3所示为float类型不同矩阵规模分别在卷积核为3×3、5×5、7×7上运行时的时钟周期以及加速比,图 8为其对应的加速效果柱状图。对比表 2、表 3可以看出,float类型的整体加速效果明显优于unsigned char类型,主要是因为FT向量处理器可以直接处理float类型的数据,不需要进行数据类型转换。对于不同的卷积核,核越大,加速效果越明显,这是因为随着核的不断增大,循环内每次计算的数据规模也就越大,因此,优化算法能更好地提升循环内数据的并行性。
3.3.3 平台对比分析本次实验的对比测试所用图片为unsigned char类型的三通道图片。在TMS320C6678中运行Sobel算法,在FT-M7002中运行本文优化算法,分别使用TI与FT平台的计时函数记录运行时间,FT时钟周期换算为TI时钟周期时需要乘16。测试结果如表 4所示,整体加速效果如图 9所示。从中可以看出,对于不同大小的图片矩阵,FT-M7002向量处理器比TI6678多核处理器快了1.87~2.08倍。因此,对于单核密集型运算,FT-M7002平台相较TI6678平台有一定的计算优势。
![]() |
下载CSV 表 4 FT与TI平台的比较 Table 4 Comparison between FT and TI platforms |
![]() |
Download:
|
图 9 FT-M7002平台较TI6678平台的加速比 Fig. 9 The speedup ratio of FT-M7002 platform compared with TI6678 platform |
本文分析FT-M7002硬件平台架构和Sobel边缘检测算法,基于FT内核结构特点对Sobel算法进行优化。为了充分发挥FT-M7002平台的高性能计算特性,使用FT内嵌指令对算法进行向量并行优化,利用循环展开的优化手段充分发掘数据级并行性。设计DMA双缓冲区传输结构同步数据的传输与运算,对列卷积进行矩阵转置以解决其不能连续访存的不足。针对FT平台向量部件不支持unsigned char类型访存操作的问题,设计相应的数据转换接口。对多种输入图片矩阵规模和卷积核大小进行对比测试,结果表明,在保证正确性的基础上,该优化算法相较串行算法获得了1.66~3.14倍的加速比,相较TMS320C6678处理器也取得了1.87~2.08倍的加速效果,充分验证了本文所使用优化方法的有效性以及FT-M7002平台的高性能计算优势。但是,本文目前仅针对单核进行了优化研究,下一步将探索多核优化问题,并在FT-M7002平台上实现OpenCV图像算法库的整体优化。
[1] |
周佩, 周维超, 王凯凯. TMS320C6678多核DSP并行访问存储器性能的研究[J]. 微型机与应用, 2014, 33(13): 20-24. ZHOU P, ZHOU W C, WANG K K. Research on the performance of TMS320C6678 multicore DSP parallel memory access[J]. Microcomputer & Its Applications, 2014, 33(13): 20-24. (in Chinese) DOI:10.3969/j.issn.1674-7720.2014.13.007 |
[2] |
赵一霈. DSP的发展与应用[J]. 电子技术与软件工程, 2018(6): 92. ZHAO Y P. Development and application of DSP[J]. Electronic Technology & Software Engineering, 2018(6): 92. (in Chinese) |
[3] |
张军阳, 郭阳, 扈啸. 二维矩阵卷积的并行计算方法[J]. 浙江大学学报(工学版), 2018, 52(3): 515-523. ZHANG J Y, GUO Y, HU X. Parallel computing method for two-dimensional matrix convolution[J]. Journal of Zhejiang University(Engineering Science), 2018, 52(3): 515-523. (in Chinese) |
[4] |
李勇, 陈书明, 陈胜刚. 一种基于YHFT-Matrix DSP的去块效应滤波算法的向量化实现[J]. 计算机工程与科学, 2014, 36(2): 206-210. LI Y, CHEN S M, CHEN S G. Vectorizable implementation of adaptive deblocking filter on YHFT-Matrix DSP[J]. Computer Engineering and Science, 2014, 36(2): 206-210. (in Chinese) DOI:10.3969/j.issn.1007-130X.2014.02.003 |
[5] |
LIU F, GUAN G X, ZHAO H M, et al. Fast processing of UAV remote sensing image based on DSP hardware simulation platform[J]. Journal of Physics Conference Series, 2020, 1486(7): 072072. DOI:10.1088/1742-6596/1486/7/072072 |
[6] |
OKAMOTO T, KOIDE T, YOSHIDA S, et al. Implementation of computer-aided diagnosis system on customizable DSP core for colorectal endoscopic images with CNN features and SVM[C]//Proceedings of 2018 IEEE Region Conference. Washington D. C., USA: IEEE Press, 2018: 1663-1666.
|
[7] |
AKASAPU A, SAILAJA V, PRASAD G. Implementation of Sobel filter using CUDA[J]. IOP Conference Series: Materials Science and Engineering, 2021, 1045(1): 012016. DOI:10.1088/1757-899X/1045/1/012016 |
[8] |
罗紫阳, 李雪梅, 陈鹏. 基于FPGA的Sobel算子边缘检测算法的实现[J]. 电子制作, 2020(21): 6-7. LUO Z Y, LI X M, CHEN P. Implementation of Sobel operator edge detection algorithm based on FPGA[J]. Electronic Manufacturing, 2020(21): 6-7. (in Chinese) DOI:10.3969/j.issn.1006-5059.2020.21.002 |
[9] |
YANG S H, HSIAO S J. H. 266/VVC fast intra prediction using Sobel edge features[J]. Electronics Letters, 2021, 57(1): 11-13. DOI:10.1049/ell2.12011 |
[10] |
陈鹏. 图像Sobel处理的FPGA多核矩阵实现[D]. 沈阳: 沈阳理工大学, 2013. CHEN P. FPGA multicore matrix's achieve of the image Sobel processing[D]. Shenyang: Shenyang Ligong University, 2013. (in Chinese) |
[11] |
左颢睿, 张启衡, 徐勇, 等. 基于GPU的快速Sobel边缘检测算法[J]. 光电工程, 2009, 36(1): 8-12. ZUO H R, ZHANG Q H, XU Y, et al. Fast sobel edge detection algorithm based on GPU[J]. Opto-Electronic Engineering, 2009, 36(1): 8-12. (in Chinese) |
[12] |
王威. 基于ARM-FPGA异构多核平台上图像处理算法的加速研究[D]. 西安: 西安电子科技大学, 2019. WANG W. Accelerated research on image processing algorithm based on ARM-FPGA multi-core platform[D]. Xi'an: Xidian University, 2019. (in Chinese) |
[13] |
HADI SAPUTRA V, HERWINDIATI D E, SUTRISNO T. Car shape clustering using Sobel edge detection with divisive average linkage and single linkage algorithm (case: bus, Sedan, citycar, mpv, and truck)[J]. IOP Conference Series: Materials Science and Engineering, 2020, 1007(1): 012136. DOI:10.1088/1757-899X/1007/1/012136 |
[14] |
TIAN R, SUN G L, LIU X C, et al. Sobel edge detection based on weighted nuclear norm minimization image denoising[J]. Electronics, 2021, 10(6): 655. DOI:10.3390/electronics10060655 |
[15] |
李丹阳. 基于Soble算子的图像边缘检测优化设计[J]. 数字技术与应用, 2017(11): 137-138. LI D Y. A optimization design of edge detection based on Soble algorithm[J]. Digital Technology and Application, 2017(11): 137-138. (in Chinese) |
[16] |
缪成根, 刘琛. 基于改进索贝尔算子的灰度图像边缘检测[J]. 物联网技术, 2020, 10(11): 37-38, 41. MIAO C G, LIU C. Gray image edge detection based on improved Sobel operator[J]. Internet of Things Technologies, 2020, 10(11): 37-38, 41. (in Chinese) |
[17] |
RAVIVARMA G, GAVASKAR K, MALATHI D, et al. Implementation of Sobel operator based image edge detection on FPGA[J]. Materials Today: Proceedings, 2021, 45: 2401-2407. DOI:10.1016/j.matpr.2020.10.825 |
[18] |
WANTO A, RIZKI S D, ANDINI S, et al. Combination of Sobel+Prewitt edge detection method with Roberts+Canny on passion flower image identification[J]. Journal of Physics: Conference Series, 2021, 1933(1): 012037. DOI:10.1088/1742-6596/1933/1/012037 |
[19] |
孙广辉, 扈啸, 王蕊. 基于FT-M7002的OpenCV移植与优化[C]//第二十二届计算机工程与工艺年会暨第八届微处理器技术论坛论文集. [出版地不详]: 中国计算机学会计算机工程与工艺专业委员会, 2018: 9. SUN G H, HU X, WANG R. Transplantation and optimization of OpenCV based on FT-M7002 [C]//Proceedings of the 22nd Annual Conference on Computer Engineering and Technology and the 8th Microprocessor Technology Forum. [S. l. ]: Professional Committee of Computer Engineering and Technology of China Computer Society, 2018: 9 (in Chinese) |
[20] |
沈洁, 龙标, 姜浩, 等. 飞腾处理器上向量三角函数的设计实现与优化[J]. 计算机研究与发展, 2020, 57(12): 2610-2620. SHEN J, LONG B, JIANG H, et al. Implementation and optimization of vector trigonometric functions on Phytium processors[J]. Journal of Computer Research and Development, 2020, 57(12): 2610-2620. (in Chinese) DOI:10.7544/issn1000-1239.2020.20190721 |
[21] |
郭恒亮, 柴晓楠, 韩林, 等. Canny边缘检测算法在飞腾平台上的实现与优化[J]. 计算机工程, 2021, 47(7): 37-43. GUO H L, CHAI X N, HAN L, et al. Implementation and optimization of Canny edge detection algorithm on FT platform[J]. Computer Engineering, 2021, 47(7): 37-43. (in Chinese) |
[22] |
孙广辉. 基于FT-M7002的OpenCV移植与优化[D]. 西安: 西安电子科技大学, 2019. SUN G H. OpenCV transplantation and optimization based on FT-M7002[D]. Xi'an: Xidian University, 2019. (in Chinese) |