摘要:
研究背景 今天,图像分类、目标检测、人脸识别等机器视觉(CV)应用已广泛应用于我们的日常生活中。随着IoT(物联网)技术的快速发展,为满足实时性要求,嵌入式系统中的多媒体应用需要对图像和视频数据进行高效处理。由于机器视觉算法在计算时能够被简单分割成更小的数据单位进行计算,这些计算特性使得机器视觉工作负载特别适合使用能够在一次执行中处理多个数据项的单指令多数据(SIMD)指令进行处理。和传统的指令集架构(ISA),如x86以及ARM等相比,RISC-V作为新进提出的开放指令集架构,在向量扩展中采用了增量和模块化设计,并支持可配置的数据长度以及寄存器分组。我们采用机器视觉算法对RISC-V的向量扩展(简称为RV-V)进行了评测,研究表明相比于采用标量指令实现的典型机器视觉算法(如灰度算法、Mean filter、边缘检测等),其对应的向量版本在指令数量上降低了约24倍。然而指令数量的降低并不能直接转换为性能的提升,具体的性能提升情况还取决于RISC-V处理器的具体实现。在玄铁C906上,我们的评测结果显示:通过采用向量指令,典型机器视觉算法能够获得相比于标量实现约2.98倍的性能提升。
目的 采用典型的机器视觉算法,对RISC-V的向量扩展进行综合评测。对相同算法,对比采用和不采用向量扩展的情况,以及对比在RISC-V平台和ARM平台上执行的性能。
方法 从纵向和横向两个维度,对RISC-V向量环境下运行的机器视觉算法进行评测。纵向上,比较采用RISC-V向量实现的算法,与采用RISC-V标量指令实现的算法,在指令数量、执行所消耗的时钟数量上的差别。横向上,对比在相同数据集上执行的相同机器视觉算法,在RISC-V平台(采用典型RV-V加速器)以及ARM平台(采用NEON加速器)的性能差距。
结果 1)使用RISC-V的向量扩展(RV-V)可以有效提高机器视觉算法的性能。与使用RISC-V标量指令实现的机器视觉算法相比,其默认设置LMUL=1(不打开寄存器分组的情况下)的RV-V实现减少了约3倍的指令数,在我们评估中使用的玄铁 C906 处理器上,实际性能提升(执行的指令周期数减少)大约是 1.83 倍。2)对于机器视觉算法而言,考虑到真实图像的尺寸,RV-V 的可变向量长度特征对进一步提高 CV 算法的性能几乎没有帮助。 RV-V 的可变向量长度特性使程序员免于处理数据长度小于向量长度的情况。然而,由于在现实世界的图像中这种案例的部分很小,并不能有效地提高 CV 算法的整体性能。3)RV-V 的寄存器分组特性,即连接多个向量寄存器形成长向量,对于进一步提高机器视觉算法的性能是有效的。我们的实验表明,与默认的不打开寄存器分组的情况相比,将8 个向量寄存器分到一组(LMUL=8)能够进一步减少了机器视觉算法的指令数约 8 倍,意味着相比于标量实现,减少了24 倍。4)然而,寄存器分组对循环计数(实际性能加速)的减少是由 RV-V 协处理器的底层架构决定的。例如,使用玄铁C906的RV-V协处理器(有8条执行通道),最大级别的寄存器分组(即LMUL=8)相比于默认未打开寄存器分组的情况(LMUL=1),机器视觉算法能够获得1.63倍的性能提升。总的来说,对于运行在玄铁 C906 处理器上的典型机器视觉算法,通过使用RISC-V的向量指令,机器视觉算法总共能够获得的性能加速约为2.98倍。
结论 我们研究了 RISC-V 矢量扩展 (RV-V) 在执行机器视觉算法方面的潜力。实验结果表明,对于典型的 CV 算法,使用向量指令的机器视觉算法的指令数比使用标量指令实现的相同算法的指令数减少达到了24倍。尽管如此,我们的实验还表明,将RV-V在算法指令数量上的减少转化为实际性能时,还必须考虑实际的SIMD协处理器的架构。我们在实现了RISC-V指令集的玄铁 C906 处理器上的评测结果就表明,采用RISC-V向量指令相比于采用标量指令,最多只能获得约2.98倍的性能加速。