System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及自动驾驶,特别涉及一种自动驾驶应用层内存分配方法、装置、计算机设备及介质。
技术介绍
1、自动驾驶不同模块进程间大数据块通信性能非常重要。在自动驾驶系统中,传感器模块会不断地采集车辆周围的数据,并将其传输到感知模块进行处理。这些数据通常包含大量的信息,因此需要高效地进行通信和传输。
2、同时,由于多个模块基于有历史背景,已经成型的处理结构,像感知模块,决策模块,融合模块,控制模块等对数据一般有特定的数据结构要求。在一般的自动驾驶系统中,数据空间的申请与销毁使用操作系统的统一接口,不同模块会使用不同的数据结构定义。
3、因此,上述的多个模块常出现需要在收到各项数据后,对数据进行重新组织,由于自动驾驶的输入数据的数据量偏大,数据拷贝所占用的时间不可忽略。
4、另外,反复的构造不同大小的大数据块也可能会造成内存空间的碎片化,进一步影响系统运行速度。
5、目前常见的性能优化手段有重构各模块的接口,将整体数据结构拆分为多个独立的数据段,以避免为数据结构调整而进行的大量数据拷贝动作。
6、因此,常见的优化措施下,各模块调整输入数据形式,将数据拆分成不同的数据结构,但是,这个处理方式首先需要各模块修改主体实现,修改后需要重新进行测试,同时有些模块对数据结构的依赖是有连续性要求的,这样即使修改了对外的接口,实际上在开始推理或其它处理前还是需要通过前处理将数据整理成连续数据,还是非常耗时,效率低。
技术实现思路
1、有鉴于此,
2、对应用层中各模块的数据结构进行统一定义,所述数据结构依次包括第一区域、第二区域以及第三区域,所述第二区域用于放置大体量数据,所述第一区域和所述第三区域用于放置小体量数据,所述大体量数据为采集的自动驾驶数据,所述小体量数据为与各模块的功能相对应的数据;
3、分别对各模块中的所述第一区域的数据长度和所述第三区域的数据长度进行比较,将所述第一区域的数据长度设置为各模块中所述第一区域的最大数据长度,将所述第三区域的数据长度设置为各模块中所述第三区域的最大数据长度;
4、各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块所对应的数据结构的类型,并将与所述下一模块的功能相对应的数据写入到所述下一模块的所述第一区域和/或所述第三区域。
5、本专利技术实施例还提供了一种自动驾驶应用层内存分配装置,以解决现有技术中自动驾驶不同模块进程间通信耗时较大、效率低的技术问题。该装置包括:
6、数据结构定义模块,用于对应用层中各模块的数据结构进行统一定义,所述数据结构依次包括第一区域、第二区域以及第三区域,所述第二区域用于放置大体量数据,所述第一区域和所述第三区域用于放置小体量数据,所述大体量数据为采集的自动驾驶数据,所述小体量数据为与各模块的功能相对应的数据;
7、数据长度设置模块,用于分别对各模块中的所述第一区域的数据长度和所述第三区域的数据长度进行比较,将所述第一区域的数据长度设置为各模块中所述第一区域的最大数据长度,将所述第三区域的数据长度设置为各模块中所述第三区域的最大数据长度;
8、通信模块,用于各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块所对应的数据结构的类型,并将与所述下一模块的功能相对应的数据写入到所述下一模块的所述第一区域和/或所述第三区域。
9、本专利技术实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的自动驾驶应用层内存分配方法,以解决现有技术中自动驾驶不同模块进程间通信耗时较大、效率低的技术问题。
10、本专利技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的自动驾驶应用层内存分配方法的计算机程序,以解决现有技术中自动驾驶不同模块进程间通信耗时较大、效率低的技术问题。
11、与现有技术相比,本说明书实施例采用的上述至少一个技术方案能够达到的有益效果至少包括:对应用层中各模块的数据结构进行统一定义,数据结构依次包括第一区域、第二区域以及第三区域,第二区域用于放置大体量数据,第一区域和第三区域用于放置小体量数据;将第一区域的数据长度设置为各模块中第一区域的最大数据长度,将第三区域的数据长度设置为各模块中第三区域的最大数据长度;各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块对应的类型,并将与下一模块的功能相对应的数据写入到第一区域和/或第三区域。通过将大体量数据设置在各模块的数据结构的中间区域,并采用合适的数据结构来组织数据,可以实现有效的读取和写入操作;不同模块中以大体量数据为中心设计数据结构体,以满足目标模块数据结构为首要目标,使得每个模块都可以独立地操作其数据结构体,而不会干扰其他模块;并且在各模块之间的通信过程中,避免了在内存中移动数据带来的开销,从而降低了传递数据对数据空间大小的敏感度,提高了数据处理效率,以及提高了系统的可靠性和稳定性。此外,本申请的方法还具有可扩展性良好、可重用性高、易于维护和易于集成等优点,对其能够应用于各种大规模数据处理系统提供了支持。
本文档来自技高网...【技术保护点】
1.一种自动驾驶应用层内存分配方法,其特征在于,包括:
2.如权利要求1所述的自动驾驶应用层内存分配方法,其特征在于,所述应用层中的模块包括自动驾驶数据读取模块、自动驾驶数据处理模块和消息发布模块。
3.如权利要求2所述的自动驾驶应用层内存分配方法,其特征在于,所述各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块所对应的数据结构的类型,并将与所述下一模块的功能相对应的数据写入到所述下一模块的所述第一区域和/或所述第三区域,包括:
4.如权利要求3所述的自动驾驶应用层内存分配方法,其特征在于,所述将所述第一数据块发送至所述自动驾驶数据处理模块,以及所述将所述第二数据块发送至所述消息发布模块的过程中采用进程间零拷贝方法进行数据传递,各模块间发送数据的一方定义为消息发布者,接收数据的一方定义为消息订阅者,所述进程间零拷贝方法包括以下步骤:
5.如权利要求4所述的自动驾驶应用层内存分配方法,其特征在于,所述基于每个所述内存块的所述编号形成空闲内存块列表,包括:
6.如权利要求2所述的自动驾驶应用层内存分配方法,
7.如权利要求1-6任一项所述的自动驾驶应用层内存分配方法,其特征在于,所述采集的自动驾驶数据包括图像数据、点云数据和障碍物列表数据。
8.一种自动驾驶应用层内存分配装置,其特征在于,包括:
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的自动驾驶应用层内存分配方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至7中任一项所述的自动驾驶应用层内存分配方法的计算机程序。
...【技术特征摘要】
1.一种自动驾驶应用层内存分配方法,其特征在于,包括:
2.如权利要求1所述的自动驾驶应用层内存分配方法,其特征在于,所述应用层中的模块包括自动驾驶数据读取模块、自动驾驶数据处理模块和消息发布模块。
3.如权利要求2所述的自动驾驶应用层内存分配方法,其特征在于,所述各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块所对应的数据结构的类型,并将与所述下一模块的功能相对应的数据写入到所述下一模块的所述第一区域和/或所述第三区域,包括:
4.如权利要求3所述的自动驾驶应用层内存分配方法,其特征在于,所述将所述第一数据块发送至所述自动驾驶数据处理模块,以及所述将所述第二数据块发送至所述消息发布模块的过程中采用进程间零拷贝方法进行数据传递,各模块间发送数据的一方定义为消息发布者,接收数据的一方定义为消息订阅者,所述进程间零拷贝方法包括以下步骤:
5.如权利要求4所述的自动驾驶应用层内存分配...
【专利技术属性】
技术研发人员:陈悠湛,梁爽,彭天帅,杨海平,罗进,
申请(专利权)人:北京超星未来科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。