VINS/VIO的并行化与工程化(DSP篇)

我们的工作一直都是重点针对VSLAM和VIO的工程化,放假回来更新一篇新的首发,也算是给CPU+DSP未来相关的工作做个抛砖引玉。

不知何年何月开始,摩尔定律就已经失效了(貌似是2009年?)

然后我们的时代正式进入了多核化工程化,有没有一种感觉被智子锁定了的感觉~哈哈

在晶体管数量无法再在18个月翻番的基础上,科学家们只好用各种各样的处理器来进行工作的负荷分担,以实现我们所需要的工程并完成我们的产品。

其中最常见的就是GPU了,这个在前篇已经详述。

VIO的实时处理可以通过各种方法来实现。一个是GPU加速,它可以提高VIO性能。这种解决方案非常适合于对重量或大小限制不大的轮式机器人。但对于手动设备或无人机,这种耗电的解决方案其实是不好用的。

另一个很好的解决方案是在远程设备(如台式计算机、服务器)远程计算繁重的任务(如BA)。在这种情况下系统只需要发送测量数据并检索其他位置的姿态。虽然这是一个相当有效的解决方案,但它依赖于无线连接,另外会导致数据传输问题(失去连接,信号强度…)。

另外2个大类主要是DSPFPGA,FPGA整体很复杂而且周期很长,后续如果写可能得分成几个系列,今天重点写一下DSP。

这篇文章的主体知识来自于2021年KTH的LOUIS MUFFANG的一篇论文和其中几篇很重要的引文:

其中有3块最重要的引文,尤其是第1篇,如果以后要在这一侧深化一定要完整阅读和实践,用的Xilinix-ZYNQ平台:

图像处理(特征检测)和IMU预测之间的并行化[1]。

Jonathan Piat, Philippe Fillatreau, Daniel T¨ortei, Francois Brenot, and
Michel Devy. Hw/sw co-design of a visual slam application. Journal of
Real-Time Image Processing , 11 2018

使用线缓冲区[2]动态计算整个图像,从而避免使用全图存储

Zhengdong Zhang, Amr Suleiman, Luca Carlone, Vivienne Sze, and Sertac
Karaman. Visual-inertial odometry on chip: An algorithm-and-hardware
co-design approach. 07 2017

内存管理或利用线性化系统[3]中的矩阵的结构来存储内存管理

Amr Suleiman, Zhengdong Zhang, Luca Carlone, Sertac Karaman, and
Vivienne Sze. Navion: A 2-mw fully integrated real-time visual-inertial
odometry accelerator for autonomous navigation of nano drones. IEEE
Journal of Solid-State Circuits , PP:1–14, 01 2019

这篇应该在海内外VIO和VSLAM研究者的相关研究中是很冷门的一篇。他的这篇写得很长,其中包含了大量的综述和VIO历史演进,我拜托老同事抽出其中的重点部分进行了一些实验发现确实可行,于是把重点部分写一下。

DSP就是数字信号处理器,这类东西在安防行业中过去一直用得很多,但是过去门槛实在是高,如果不是足够的懂时钟时隙根本就不适合去研究这个方向,过去在这个领域至少要深耕10年以上才能称之为合格的工程师。 但是我们当今的时代宛如三体里的“黄金时代”,基础科学并没有什么真正的鸟进步,应用技术却得到了极大发展,各种各样好用的工具如雨后春笋,给无数的工程师们提供了无所不能的错觉。~ 就如同今时今日的DSP,再也不是高不可攀。

后述是重点优化一种先进的单目视觉惯性里程计(VIO)算法,用于实时嵌入式系统资源应用。其中使用一个配备有数字信号处理器(DSP的多处理器单元来加速和从CPU中分担任务。其目标是在不损害算法的速度精度性能的情况下降低资源消耗。为此,团队将首先确定OPEN-VINS作为这项工作的合适算法,并找到需要优化的功能。当将优化后的DSP+算法和原始版本进行比较时,我们获得了类似的性能精度,在CPU上节省了超过×1.5的功耗,节省了超过×2的内存。这项工作在每个嵌入式系统中都发现了它的重要性。

主体拆解至DSP的部分也还是FASTKLT,这2个东西是大通用就不赘述了,能找到的资料太多了,各家实现路径基本完全一致。

在嵌入式系统上,选择正确的硬件来保存大多数重复可利用资源是至关重要的。只有CPU的平台不适用于特定的任务,因为存在更有效的手段。当前的世界大量主流SOC配备了基于ARM的处理器和FPGA 或DSP ,允许针对特定任务的CPU负荷分担。

对FPGA和ASIC进行全硬件优化的是一个相当复杂的过程。FPGAs是一种硬件可编程的集成电路。使用VHDL (VHSIC-HDL,高速的集成电路硬件描述语言)。工程师们可以知道该采取哪个门来做某个操作。因此,FPGAs在矩阵运算、乘法和循环方面非常有效,功耗低。然而,FPGAs需要很长的开发时间,VHDL是相当挑剔的。

ASIC甚至比FPGA更节能,但它必须为特定的程序而设计和构建,这需要好十几个月的开发。这就是传说中的流片了:) 没钱就别想着搞啦,哈哈。

数字信号处理器(DSP):它可以专门用于VIO算法所需的复杂数学操作。与FPGA相比,DSP在能耗和性能上更差,但DSP比FPGA提供了更多的灵活性和简单性,因为近年来的它们可以直接运行C/C++或汇编代码。这可以极大的减少DSPs的开发时间。其中高通Qualcomm公司就像GPU领域的NV一样,是做出了巨大贡献的。

高通-骁龙8系列处理器除了CPU之外,还有一个集成的DSP,可以通过他们的软件开发工具包Hexagon sdk进行管理。这个DSP有不同的单元,用于特定的处理任务,例如,用于音频的ADSP或用于最新设备上的图像处理(高通-骁龙845及更高版本)的CDSP。

在特定硬件上的加速代码需要严格的方法。正如在引文[1]中所看到的,作者对他们的EKF解决方案进行了不同的迭代,从在CPU上运行它开始到FPGA实现。这方面的工作将使用类似的迭代方法。

软件优化部分:

软件和硬件的优化是非常接近的,因为他们紧密的关联着。因此,其余的工作将集中在带有CPU和DSP处理器的SOC上。

内存管理:

在DSP上和许多其他SOC一样,高通的SOC有其特定的内存管理。CPU和DSP共享缓存,但不共享RAM。随机存取内存(RAM)存储CPU使用的数据,而缓存更小更快,位于传统计算机上的RAMCPU之间。这允许CPU(在本例中是DSP)更有效地获取数据。

内存分配应该正确地完成。非连续的内存块不适合用于DSP,因为它增加了读取数据的时间,并降低了程序的速度。虽然连续的物理内存将被优先排序,但最新的处理器提供了一个系统内存管理单元(SMMU),它添加了一个转换层来优化非连续内存块的处理。

内存在逻辑上分为三个部分:一个用于高级操作系统(HL-OS),由CPU使用,一个共享内存应该是连续的,以便DSP可以最优地读取它,以及一些变量可以在DSP上本地分配(见图2.6)。使用转换前向缓冲区(TLBS)将物理地址转换为每个处理单元的不同的虚拟地址。

RPC:远程调用

人们不能在一个ARM-CPU上以同样的方式在DSP上编译和运行代码。CPU需要通过远程过程RPC来调用DSP的相关函数。RPC是一种请求-响应协议,在此期间,客户端请求一个远程服务器(通常是另一台计算机)执行一个子例程,然后服务器响应该客户端。在一个多处理单元中,如这里有一个CPU和一个在同一芯片上的DSP,客户端是CPU,而“远程”服务器是DSP

 

对于骁龙处理器,CPU通过FASTRPC与DSP通信,这是高通公司基于RPC的框架(资料挺多的),以便在CPU和DSP之间进行远程方法调用。其体系结构如图2.7所示。

ADSPRPC驱动程序对调用队列并等待的响应,而AD框架使消息的队列。子码由编译器生成,负责处理参数封送和解封送。

在来自客户端的每个调用时,存根代码从函数调用生成一个RPCC消息,ADSPRPC将其排队(队列化)。当接收到消息时,ADSPRPC框架将消息发送到SKEL代码,该代码将解封送参数并入调用对象中实现。处理完成后,反向重复类似的过程,将值返回给客户端。

骁龙845处理器允许在CPU和DSP之间处理异步消息。这有一些好处,因为CPU可以在不等待DSP队列时中发送许多新请求(负荷分担+加速)。例如,这可以用于处理同一图像的不同区域。一些值得一提的关键概念是:图像处理(特征检测)和IMU预测之间的并行化。

结合CPU负荷分担,可以使用上述方法来访问该算法。此外,高通还提供了一个计算机视觉库FASTCV,为他们的DSP进行了优化。不幸的是,它的详细实现和源代码还不可用,目前可用的功能也很有限

最后给一个我个人非常重要的结论和经验:CPU+GPU能够对原有的前端进行更好的加速,但是对后端的处理基本没有助益,而DSP由于本身时钟频率较低,更多的时候只是起到了降低功耗负荷分担(当然负荷分担本身也是一种加速)的作用,可以分别承接前后端的开销,另外可以大大节约内存。GPU的工作做不深的话远不如DSP,两者从长远看都不如FPGA,最终相信24个月左右之后,会有真正针对VIO的强力ASIC。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值