CN117608874A - 自动驾驶应用层内存分配方法、装置、计算机设备及介质 - Google Patents
自动驾驶应用层内存分配方法、装置、计算机设备及介质 Download PDFInfo
- Publication number
- CN117608874A CN117608874A CN202311568745.3A CN202311568745A CN117608874A CN 117608874 A CN117608874 A CN 117608874A CN 202311568745 A CN202311568745 A CN 202311568745A CN 117608874 A CN117608874 A CN 117608874A
- Authority
- CN
- China
- Prior art keywords
- data
- area
- module
- message
- memory block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 73
- 238000012545 processing Methods 0.000 claims description 40
- 230000006870 function Effects 0.000 claims description 32
- 230000006854 communication Effects 0.000 claims description 25
- 238000004891 communication Methods 0.000 claims description 22
- 230000008569 process Effects 0.000 claims description 19
- 238000013528 artificial neural network Methods 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 9
- 238000012546 transfer Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 4
- 230000008447 perception Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000002452 interceptive effect Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000035945 sensitivity Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/70—Arrangements for image or video recognition or understanding using pattern recognition or machine learning
- G06V10/82—Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/94—Hardware or software architectures specially adapted for image or video understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V20/00—Scenes; Scene-specific elements
- G06V20/50—Context or environment of the image
- G06V20/56—Context or environment of the image exterior to a vehicle by using sensors mounted on the vehicle
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- General Engineering & Computer Science (AREA)
- Evolutionary Computation (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Computing Systems (AREA)
- Databases & Information Systems (AREA)
- General Health & Medical Sciences (AREA)
- Medical Informatics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种自动驾驶应用层内存分配方法、装置、计算机设备及介质,涉及自动驾驶技术领域,该方法包括对应用层中各模块的数据结构进行统一定义,数据结构依次包括第一区域、第二区域以及第三区域,第二区域用于放置大体量数据,第一区域和第三区域用于放置小体量数据;将第一区域的数据长度设置为各模块中第一区域的最大数据长度,将第三区域的数据长度设置为各模块中第三区域的最大数据长度;各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块对应的类型,并将与下一模块的功能相对应的数据写入到第一区域和/或第三区域。该方案减少了大数据搬移,提高了系统性能。
Description
技术领域
本发明涉及自动驾驶技术领域,特别涉及一种自动驾驶应用层内存分配方法、装置、计算机设备及介质。
背景技术
自动驾驶不同模块进程间大数据块通信性能非常重要。在自动驾驶系统中,传感器模块会不断地采集车辆周围的数据,并将其传输到感知模块进行处理。这些数据通常包含大量的信息,因此需要高效地进行通信和传输。
同时,由于多个模块基于有历史背景,已经成型的处理结构,像感知模块,决策模块,融合模块,控制模块等对数据一般有特定的数据结构要求。在一般的自动驾驶系统中,数据空间的申请与销毁使用操作系统的统一接口,不同模块会使用不同的数据结构定义。
因此,上述的多个模块常出现需要在收到各项数据后,对数据进行重新组织,由于自动驾驶的输入数据的数据量偏大,数据拷贝所占用的时间不可忽略。
另外,反复的构造不同大小的大数据块也可能会造成内存空间的碎片化,进一步影响系统运行速度。
目前常见的性能优化手段有重构各模块的接口,将整体数据结构拆分为多个独立的数据段,以避免为数据结构调整而进行的大量数据拷贝动作。
因此,常见的优化措施下,各模块调整输入数据形式,将数据拆分成不同的数据结构,但是,这个处理方式首先需要各模块修改主体实现,修改后需要重新进行测试,同时有些模块对数据结构的依赖是有连续性要求的,这样即使修改了对外的接口,实际上在开始推理或其它处理前还是需要通过前处理将数据整理成连续数据,还是非常耗时,效率低。
发明内容
有鉴于此,本发明实施例提供了一种自动驾驶应用层内存分配方法,以解决现有技术中自动驾驶不同模块进程间通信耗时较大、效率低的技术问题。该方法包括:
对应用层中各模块的数据结构进行统一定义,所述数据结构依次包括第一区域、第二区域以及第三区域,所述第二区域用于放置大体量数据,所述第一区域和所述第三区域用于放置小体量数据,所述大体量数据为采集的自动驾驶数据,所述小体量数据为与各模块的功能相对应的数据;
分别对各模块中的所述第一区域的数据长度和所述第三区域的数据长度进行比较,将所述第一区域的数据长度设置为各模块中所述第一区域的最大数据长度,将所述第三区域的数据长度设置为各模块中所述第三区域的最大数据长度;
各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块所对应的数据结构的类型,并将与所述下一模块的功能相对应的数据写入到所述下一模块的所述第一区域和/或所述第三区域。
本发明实施例还提供了一种自动驾驶应用层内存分配装置,以解决现有技术中自动驾驶不同模块进程间通信耗时较大、效率低的技术问题。该装置包括:
数据结构定义模块,用于对应用层中各模块的数据结构进行统一定义,所述数据结构依次包括第一区域、第二区域以及第三区域,所述第二区域用于放置大体量数据,所述第一区域和所述第三区域用于放置小体量数据,所述大体量数据为采集的自动驾驶数据,所述小体量数据为与各模块的功能相对应的数据;
数据长度设置模块,用于分别对各模块中的所述第一区域的数据长度和所述第三区域的数据长度进行比较,将所述第一区域的数据长度设置为各模块中所述第一区域的最大数据长度,将所述第三区域的数据长度设置为各模块中所述第三区域的最大数据长度;
通信模块,用于各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块所对应的数据结构的类型,并将与所述下一模块的功能相对应的数据写入到所述下一模块的所述第一区域和/或所述第三区域。
本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的自动驾驶应用层内存分配方法,以解决现有技术中自动驾驶不同模块进程间通信耗时较大、效率低的技术问题。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的自动驾驶应用层内存分配方法的计算机程序,以解决现有技术中自动驾驶不同模块进程间通信耗时较大、效率低的技术问题。
与现有技术相比,本说明书实施例采用的上述至少一个技术方案能够达到的有益效果至少包括:对应用层中各模块的数据结构进行统一定义,数据结构依次包括第一区域、第二区域以及第三区域,第二区域用于放置大体量数据,第一区域和第三区域用于放置小体量数据;将第一区域的数据长度设置为各模块中第一区域的最大数据长度,将第三区域的数据长度设置为各模块中第三区域的最大数据长度;各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块对应的类型,并将与下一模块的功能相对应的数据写入到第一区域和/或第三区域。通过将大体量数据设置在各模块的数据结构的中间区域,并采用合适的数据结构来组织数据,可以实现有效的读取和写入操作;不同模块中以大体量数据为中心设计数据结构体,以满足目标模块数据结构为首要目标,使得每个模块都可以独立地操作其数据结构体,而不会干扰其他模块;并且在各模块之间的通信过程中,避免了在内存中移动数据带来的开销,从而降低了传递数据对数据空间大小的敏感度,提高了数据处理效率,以及提高了系统的可靠性和稳定性。此外,本申请的方法还具有可扩展性良好、可重用性高、易于维护和易于集成等优点,对其能够应用于各种大规模数据处理系统提供了支持。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明实施例提供的自动驾驶应用层内存分配方法的流程图;
图2是本发明实施例提供的感知模块对数据结构的排布要求示意图;
图3是本发明实施例提供的消息发布模块对数据结构的排布要求示意图;
图4是本发明实施例提供的应用层的数据结构示意图;
图5是本发明实施例提供的一种计算机设备的结构框图;
图6是本发明实施例提供的一种自动驾驶应用层内存分配装置的结构框图;
图7是本发明实施例提供的消息发布模块对数据结构的另一排布要求示意图。
具体实施方式
下面结合附图对本申请实施例进行详细描述。
以下通过特定的具体实例说明本申请的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本申请的其他优点与功效。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。本申请还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本申请的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本发明实施例中,提供了一种自动驾驶应用层内存分配方法,如图1所示,该方法包括以下步骤:
步骤S101、对应用层中各模块的数据结构进行统一定义,所述数据结构依次包括第一区域、第二区域以及第三区域,所述第二区域用于放置大体量数据,所述第一区域和所述第三区域用于放置小体量数据,所述大体量数据为采集的自动驾驶数据,所述小体量数据为与各模块的功能相对应的数据;
步骤S102、分别对各模块中的所述第一区域的数据长度和所述第三区域的数据长度进行比较,将所述第一区域的数据长度设置为各模块中所述第一区域的最大数据长度,将所述第三区域的数据长度设置为各模块中所述第三区域的最大数据长度;
步骤S103、各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块所对应的数据结构的类型,并将与所述下一模块的功能相对应的数据写入到所述下一模块的所述第一区域和/或所述第三区域。
在本实施例中,通过将大体量数据设置在各模块的数据结构的中间区域,并采用合适的数据结构来组织数据,可以实现有效的读取和写入操作;不同模块中以大体量数据为中心设计数据结构体,以满足目标模块数据结构为首要目标,使得每个模块都可以独立地操作其数据结构体,而不会干扰其他模块;并且在各模块之间的通信过程中,避免了在内存中移动数据带来的开销,从而降低了传递数据对数据空间大小的敏感度,提高了数据处理效率,以及提高了系统的可靠性和稳定性。
在一个实施例中,所述应用层中的模块包括自动驾驶数据读取模块、自动驾驶数据处理模块和消息发布模块。在自动驾驶过程中,传感器会不断地采集车辆周围的数据,即通过自动驾驶数据读取模块读取传感器采集的数据,自动驾驶数据处理模块对采集到的数据进行处理,消息发布模块再将处理的结果发送至数据需求端。
在一个实施例中,所述采集的自动驾驶数据包括图像数据、点云数据和障碍物列表数据。本实施例中所例举的数据仅为示例,还可包括自动驾驶过程中采集的其他类型数据。
下面以一个具体的实施例对本申请的自动驾驶应用层内存分配方法进行描述。当采集的自动驾驶数据为点云数据时,则涉及的自动驾驶模块分别为点云读取模块(自动驾驶数据读取模块)、感知模块(自动驾驶数据处理模块)和消息发布模块,点云读取模块发布的消息主体内容为大体量数据的点云数据。感知模块需要将自己整理的参数、点云数据按特定的结构传递给神经网络进行数据处理,消息发布模块需要将点云与处理结果按特定的结构传递出去以满足数据需求端(数据接收端)的要求。其中,感知模块中的参数即为与该模块的功能相对应的数据,消息发布模块中的处理结果即为与该模块的功能相对应的数据,需要解释的是,与各模块的功能相对应的数据不局限于本实施例中所列举的。例如,感知模块中的参数包括神经网络参数A和神经网络参数B,消息发布模块中还包括附加信息等数据。
因此,对于感知模块的数据结构参照图2所示,将大体量的点云数据放置在数据结构的中间区域(第二区域),将小体量数据,如神经网络参数A和神经网络参数B分别放置于大体量的点云数据的两侧(低地址一侧为第一区域,高地址一侧为第三区域)。对于消息发布模块的数据结构参照图3所示,将大体量的点云数据放置在数据结构的中间区域(第二区域),将小体量数据,如附加信息C和识别结果分别放置于大体量的点云数据的两侧(低地址一侧为第一区域,高地址一侧为第三区域)。
在上述实施例中,数据结构的设计目标是点云数据在整个通信链路中不进行搬移,即将点云数据放置在数据结构体的中心,点云数据的左侧数据长度取所有排布的最大值,如本例中采用神经网络参数A、附加信息C两者的大值,若神经网络参数A的长度大于附加信息C的长度,则将分配的数据结构的第一区域的长度使用神经网络参数A的长度,然后比较点云数据的后端神经网络参数B与识别结果的长度,若识别结果长度大于神经网络参数B的长度,则将分配的数据结构的后端部分使用识别结果的长度。因此,定义的应用层中的数据结构参照图4所示,将点云数据设置在中间位置,点云左侧位置的数据长度设置为神经网络参数A的数据长度,点云右侧位置的数据长度设置为识别结果的数据长度。当点云数据传递至不同模块中时,点云数据仍然设置于中间位置,并将当前模块中的其他小体量数据填入到点云数据的两侧。
需要说明的是,在各个模块中,对于小体量数据不局限于上述实施例中所列举的,第一区域或第三区域可写入的数据可包括多种数据,并不局限于一种数据。
在一个实施例中,所述各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块所对应的数据结构的类型,并将与所述下一模块的功能相对应的数据写入到所述下一模块的所述第一区域和/或所述第三区域,包括:
在所述自动驾驶数据读取模块和所述自动驾驶数据处理模块之间建立通信链接;
由所述自动驾驶数据读取模块从共享内存的若干个内存块中申请目标内存块,将所述大体量数据放置在所述目标内存块的所述第二区域中,所述目标内存块的第一区域和所述第三区域空闲,形成第一数据块;
将所述第一数据块发送至所述自动驾驶数据处理模块,在所述第一区域和/或所述第三区域中填写与所述自动驾驶数据处理模块的功能相对应的数据形成第二数据块;
将所述第二数据块的类型强转为所述消息发布模块的类型,并将所述第二数据块发送至所述消息发布模块;
在所述第一区域和/或所述第三区域中填写与所述消息发布模块的功能相对应的数据,形成第三数据块;
将所述第三数据块发送至外部的数据接收端。
具体实施时,对于点云数据实际的使用流程,具体包括以下步骤:
点云接收模块首先申请一块儿内存空间(从共享内存的若干个内存块中申请目标内存块),使用对应的数据偏移,直接将点云数据放置到图4所示的点云数据的区域,其它位置保持空闲;
然后使用进程间零拷贝方法将该空间发送到感知模块,感知模块在点云数据前方填写神经网络参数A的内容,在点云数据后方填写神经网络参数B的内容,然后将整块数据传递给神经网络推理;
得到结果后,将该原始信息强转为消息发布模块对应的类型,然后使用进程间零拷贝方法将数据发送到消息发布模块,将识别结果填写到识别结果区域,将附加信息C填写到对应区域,然后发布给数据接收端。
在本实施例中,在整个数据传递过程中,点云数据这个大体量数据在整个数据流中不存在拷贝过程,减少了大数据搬移,因此,可以有效提高系统处理速度,提高系统性能。
在一个实施例中,所述将所述第一数据块发送至所述自动驾驶数据处理模块,以及所述将所述第二数据块发送至所述消息发布模块的过程中采用进程间零拷贝方法进行数据传递,各模块间发送数据的一方定义为消息发布者,接收数据的一方定义为消息订阅者,所述进程间零拷贝方法包括以下步骤:
对所述共享内存的若干个内存块进行唯一编号;
基于每个所述内存块的所述编号形成空闲内存块列表,通过所述空闲内存块列表根据所述编号对所述若干个内存块进行使用状态管理;
在所述消息订阅者和所述消息发布者的进程之间建立通信链接;
当消息发布者从所述若干个内存块中申请目标内存块后,将消息发布者待发送的数据按照所述数据结构写入所述目标内存块,并将目标内存块对应的编号从所述空闲内存块列表中移除,将目标内存块对应的编号由消息发布者持有;
当接收到消息发布者判断目标内存块中的数据是需要发送的消息时,对目标内存块写入校验计数,将目标内存块对应的编号和所述校验计数发送至消息订阅者,同时维护一个先进先出的历史消息队列,将所述编号放入所述历史消息队列中,当所述历史消息队列中最先进入的编号被删除时,将所述最先进入的编号对应的目标内存块归还给所述空闲内存块列表进行管理,其中,所述编号和所述校验计数为消息订阅者获取所述数据的依据;
当接收到消息发布者判断目标内存块中的数据是不需要发送的消息时,将目标内存块归还给所述空闲内存块列表进行管理。
在上述的进程间零拷贝方法中,通过使用一块shm(shared Memory,共享内存)空间承载一个主题中所有消息的思想,大幅提高通信性能。具体的,为实现shm分块使用的思想,通过设置history队列(历史队列)和空闲内存块列表,支持数据发送前直接回收的策略,同时结合count_num(编号)用以保存一次发送的消息内容的方法,实现了消息订阅者收到消息后无需再与消息发布者通信即可完成数据的生命周期管理。并允许消息发布者在逻辑处理的早期就申请多块空间用于数据处理判断,最终消息发布者可根据逻辑决定该消息数据是否需要发送,避免了消息发送时再拷贝数据,从而减少数据拷贝量,提高了通信效率。因此,实现了无需信号同步的进程间零拷贝,使用多个进程能共同访问的内存空间,解决了多个节点参与时的数据有效期问题。
在一个实施例中,所述基于每个所述内存块的所述编号形成空闲内存块列表,包括:
基于每个所述内存块的首地址和所述编号形成一个结构体;
将每个所述内存块对应的所述结构体依次连接形成所述空闲内存块列表。
例如,假设某主题A,需要最大支持10条历史消息,这块内存被分为20个内存块,将每个内存块的首地址和编号作为一个结构体,则20个内存块形成20个结构体,并根据各内存块的编号顺序依次将20个结构体连接,形成一个freebuf列表(空闲内存块列表),利用freebuf列表对内存块进行管理。
具体实施时,管理内存的管理者处于与消息发布者相同的进程中,在消息订阅者和消息发布者链接建立后,
通过消息订阅者获取所述共享内存的基本信息,所述基本信息包括文件描述符、总字节长度和内存块分块数目;
基于所述基本信息在消息订阅者的进程中映射形成一个链表,所述链表中包含有与所述每个内存块分别对应的管理块,所述管理块中包含内存块的编号和首地址。
例如,所有主题A的订阅者将通过其它方式在初始化过程中获取到该共享内存的基本信息。所述的其它方式,比如:发布者会通过DDS广播另一个以”shminfo”为主题名称的主题,订阅者从这个主题中得到shm的文件描述符(fd)、内存长度和内存块分块数目。并完成内存映射等工作,在订阅者自己的进程中使用相同的映射规则得到一个index与内存首地址的对应表,命名为topicbuf链表。例如,共享内存被分为20个内存块,每个内存块对应一个topicbuf链表中的一个管理块,该管理块中包含与内存块对应的index和首地址。
具体实施时,进程间零拷贝方法还包括以下步骤:
根据消息订阅者收到的所述编号在所述链表中找到与该编号对应的首地址;
根据消息订阅者收到的所述编号和与该编号对应的首地址定位当前消息的数据所在的写入数据的空闲;
提取定位到的写入数据的空闲中的所述校验计数;
将提取到的所述校验计数与消息订阅者收到的所述校验计数进行比较;
当提取到的所述校验计数与消息订阅者收到的所述校验计数相同时,则使用定位到的写入数据的空闲中的数据;
当提取到的所述校验计数与消息订阅者收到的所述校验计数不相同时,表明消息已过了生命周期,当前消息不再有效,则不使用定位到的写入数据的空闲中的数据。
在本实施例中,消息订阅者通过两个途径会得到两个count_num,一个途径是消息发布者发送出来的,另一个途径是在订阅者的进程中映射了共享内存后从共享内存块中的对应位置取出来的,然后将这两个count_num进行比对,通过比较这两个count_num是否一致即可知晓消息是否已过了生命周期。从而实现了订阅者收到消息后无需再与发布者通信即可完成数据的生命周期管理,解决了多个节点参与时的数据有效期问题。
具体实施时,将目标内存块归还给所述空闲内存块列表进行管理,包括:
根据目标内存块对应的所述编号和所述首地址定位到目标内存块;
如果目标内存块中存在所述校验计数,则将所述校验计数清除;
将目标内存块对应的所述结构体添加到所述空闲内存块列表中进行管理。
本实施例中,通过利用空闲内存块列表对各个内存块进行管理,可以清楚地了解到哪些内存块为目标内存块可以被利用,提高了进程间的处理效率。
在一个实施例中,与所述自动驾驶数据处理模块的功能相对应的数据包括神经网络参数数据,与所述消息发布模块的功能相对应的数据包括附加信息和处理结果,参照图7所示,与所述消息发布模块的功能相对应的数据还可包括配置信息等,分别在点云数据的两侧。此外,如图7中的配置字段、结果字段以及附加信息,每个类型的数据不限于一个。
在本实施例中,提供了一种计算机设备,如图5所示,包括存储器501、处理器502及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的自动驾驶应用层内存分配方法。
具体的,该计算机设备可以是计算机终端、服务器或者类似的运算装置。
在本实施例中,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的自动驾驶应用层内存分配方法的计算机程序。
具体的,计算机可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机可读存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读存储介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
基于同一发明构思,本发明实施例中还提供了一种自动驾驶应用层内存分配装置,如下面的实施例所述。由于自动驾驶应用层内存分配装置解决问题的原理与自动驾驶应用层内存分配方法相似,因此自动驾驶应用层内存分配装置的实施可以参见自动驾驶应用层内存分配方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图6是本发明实施例的自动驾驶应用层内存分配装置的一种结构框图,如图6所示,包括:数据结构定义模块601、数据长度设置模块602和通信模块603,下面对该结构进行说明。
数据结构定义模块601,用于对应用层中各模块的数据结构进行统一定义,所述数据结构依次包括第一区域、第二区域以及第三区域,所述第二区域用于放置大体量数据,所述第一区域和所述第三区域用于放置小体量数据,所述大体量数据为采集的自动驾驶数据,所述小体量数据为与各模块的功能相对应的数据;
数据长度设置模块602,用于分别对各模块中的所述第一区域的数据长度和所述第三区域的数据长度进行比较,将所述第一区域的数据长度设置为各模块中所述第一区域的最大数据长度,将所述第三区域的数据长度设置为各模块中所述第三区域的最大数据长度;
通信模块603,用于各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块所对应的数据结构的类型,并将与所述下一模块的功能相对应的数据写入到所述下一模块的所述第一区域和/或所述第三区域。
具体实施时,所述应用层中的模块包括自动驾驶数据读取模块、自动驾驶数据处理模块和消息发布模块。
具体实施时,通信模块603还用于:
在所述自动驾驶数据读取模块和所述自动驾驶数据处理模块之间建立通信链接;
由所述自动驾驶数据读取模块从共享内存的若干个内存块中申请目标内存块,将所述大体量数据放置在所述目标内存块的所述第二区域中,所述目标内存块的第一区域和所述第三区域空闲,形成第一数据块;
将所述第一数据块发送至所述自动驾驶数据处理模块,在所述第一区域和/或所述第三区域中填写与所述自动驾驶数据处理模块的功能相对应的数据形成第二数据块;
将所述第二数据块的类型强转为所述消息发布模块的类型,并将所述第二数据块发送至所述消息发布模块;
在所述第一区域和/或所述第三区域中填写与所述消息发布模块的功能相对应的数据,形成第三数据块;
将所述第三数据块发送至外部的数据接收端。
具体实施时,通信模块603,还用于:将所述第一数据块发送至所述自动驾驶数据处理模块,以及所述将所述第二数据块发送至所述消息发布模块的过程中采用进程间零拷贝方法进行数据传递,各模块间发送数据的一方定义为消息发布者,接收数据的一方定义为消息订阅者,所述进程间零拷贝方法包括以下步骤:
对所述共享内存的若干个内存块进行唯一编号;
基于每个所述内存块的所述编号形成空闲内存块列表,通过所述空闲内存块列表根据所述编号对所述若干个内存块进行使用状态管理;
在所述消息订阅者和所述消息发布者的进程之间建立通信链接;
当消息发布者从所述若干个内存块中申请目标内存块后,将消息发布者待发送的数据按照所述数据结构写入所述目标内存块,并将目标内存块对应的编号从所述空闲内存块列表中移除,将目标内存块对应的编号由消息发布者持有;
当接收到消息发布者判断目标内存块中的数据是需要发送的消息时,对目标内存块写入校验计数,将目标内存块对应的编号和所述校验计数发送至消息订阅者,同时维护一个先进先出的历史消息队列,将所述编号放入所述历史消息队列中,当所述历史消息队列中最先进入的编号被删除时,将所述最先进入的编号对应的目标内存块归还给所述空闲内存块列表进行管理,其中,所述编号和所述校验计数为消息订阅者获取所述数据的依据;
当接收到消息发布者判断目标内存块中的数据是不需要发送的消息时,将目标内存块归还给所述空闲内存块列表进行管理。
具体实施时,通信模块603,还用于:
基于每个所述内存块的首地址和所述编号形成一个结构体;
将每个所述内存块对应的所述结构体依次连接形成所述空闲内存块列表。
具体实施时,在数据结构定义模块601中的与所述自动驾驶数据处理模块的功能相对应的数据包括神经网络参数数据,与所述消息发布模块的功能相对应的数据包括附加信息和处理结果。
具体实施时,在数据结构定义模块601中的所述采集的自动驾驶数据包括图像数据、点云数据和障碍物列表数据。
本发明实施例实现了如下技术效果:对应用层中各模块的数据结构进行统一定义,数据结构依次包括第一区域、第二区域以及第三区域,第二区域用于放置大体量数据,第一区域和第三区域用于放置小体量数据;将第一区域的数据长度设置为各模块中第一区域的最大数据长度,将第三区域的数据长度设置为各模块中第三区域的最大数据长度;各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块对应的类型,并将与下一模块的功能相对应的数据写入到第一区域和/或第三区域。通过将大体量数据设置在各模块的数据结构的中间区域,并采用合适的数据结构来组织数据,可以实现有效的读取和写入操作;不同模块中以大体量数据为中心设计数据结构体,以满足目标模块数据结构为首要目标,使得每个模块都可以独立地操作其数据结构体,而不会干扰其他模块;并且在各模块之间的通信过程中,避免了在内存中移动数据带来的开销,从而降低了传递数据对数据空间大小的敏感度,提高了数据处理效率,以及提高了系统的可靠性和稳定性。此外,本申请的方法还具有可扩展性良好、可重用性高、易于维护和易于集成等优点,对其能够应用于各种大规模数据处理系统提供了支持。
显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种自动驾驶应用层内存分配方法,其特征在于,包括:
对应用层中各模块的数据结构进行统一定义,所述数据结构依次包括第一区域、第二区域以及第三区域,所述第二区域用于放置大体量数据,所述第一区域和所述第三区域用于放置小体量数据,所述大体量数据为采集的自动驾驶数据,所述小体量数据为与各模块的功能相对应的数据;
分别对各模块中的所述第一区域的数据长度和所述第三区域的数据长度进行比较,将所述第一区域的数据长度设置为各模块中所述第一区域的最大数据长度,将所述第三区域的数据长度设置为各模块中所述第三区域的最大数据长度;
各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块所对应的数据结构的类型,并将与所述下一模块的功能相对应的数据写入到所述下一模块的所述第一区域和/或所述第三区域。
2.如权利要求1所述的自动驾驶应用层内存分配方法,其特征在于,所述应用层中的模块包括自动驾驶数据读取模块、自动驾驶数据处理模块和消息发布模块。
3.如权利要求2所述的自动驾驶应用层内存分配方法,其特征在于,所述各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块所对应的数据结构的类型,并将与所述下一模块的功能相对应的数据写入到所述下一模块的所述第一区域和/或所述第三区域,包括:
在所述自动驾驶数据读取模块和所述自动驾驶数据处理模块之间建立通信链接;
由所述自动驾驶数据读取模块从共享内存的若干个内存块中申请目标内存块,将所述大体量数据放置在所述目标内存块的所述第二区域中,所述目标内存块的第一区域和所述第三区域空闲,形成第一数据块;
将所述第一数据块发送至所述自动驾驶数据处理模块,在所述第一区域和/或所述第三区域中填写与所述自动驾驶数据处理模块的功能相对应的数据形成第二数据块;
将所述第二数据块的类型强转为所述消息发布模块的类型,并将所述第二数据块发送至所述消息发布模块;
在所述第一区域和/或所述第三区域中填写与所述消息发布模块的功能相对应的数据,形成第三数据块;
将所述第三数据块发送至外部的数据接收端。
4.如权利要求3所述的自动驾驶应用层内存分配方法,其特征在于,所述将所述第一数据块发送至所述自动驾驶数据处理模块,以及所述将所述第二数据块发送至所述消息发布模块的过程中采用进程间零拷贝方法进行数据传递,各模块间发送数据的一方定义为消息发布者,接收数据的一方定义为消息订阅者,所述进程间零拷贝方法包括以下步骤:
对所述共享内存的若干个内存块进行唯一编号;
基于每个所述内存块的所述编号形成空闲内存块列表,通过所述空闲内存块列表根据所述编号对所述若干个内存块进行使用状态管理;
在所述消息订阅者和所述消息发布者的进程之间建立通信链接;
当消息发布者从所述若干个内存块中申请目标内存块后,将消息发布者待发送的数据按照所述数据结构写入所述目标内存块,并将目标内存块对应的编号从所述空闲内存块列表中移除,将目标内存块对应的编号由消息发布者持有;
当接收到消息发布者判断目标内存块中的数据是需要发送的消息时,对目标内存块写入校验计数,将目标内存块对应的编号和所述校验计数发送至消息订阅者,同时维护一个先进先出的历史消息队列,将所述编号放入所述历史消息队列中,当所述历史消息队列中最先进入的编号被删除时,将所述最先进入的编号对应的目标内存块归还给所述空闲内存块列表进行管理,其中,所述编号和所述校验计数为消息订阅者获取所述数据的依据;
当接收到消息发布者判断目标内存块中的数据是不需要发送的消息时,将目标内存块归还给所述空闲内存块列表进行管理。
5.如权利要求4所述的自动驾驶应用层内存分配方法,其特征在于,所述基于每个所述内存块的所述编号形成空闲内存块列表,包括:
基于每个所述内存块的首地址和所述编号形成一个结构体;
将每个所述内存块对应的所述结构体依次连接形成所述空闲内存块列表。
6.如权利要求2所述的自动驾驶应用层内存分配方法,其特征在于,与所述自动驾驶数据处理模块的功能相对应的数据包括神经网络参数数据,与所述消息发布模块的功能相对应的数据包括附加信息和处理结果。
7.如权利要求1-6任一项所述的自动驾驶应用层内存分配方法,其特征在于,所述采集的自动驾驶数据包括图像数据、点云数据和障碍物列表数据。
8.一种自动驾驶应用层内存分配装置,其特征在于,包括:
数据结构定义模块,用于对应用层中各模块的数据结构进行统一定义,所述数据结构依次包括第一区域、第二区域以及第三区域,所述第二区域用于放置大体量数据,所述第一区域和所述第三区域用于放置小体量数据,所述大体量数据为采集的自动驾驶数据,所述小体量数据为与各模块的功能相对应的数据;
数据长度设置模块,用于分别对各模块中的所述第一区域的数据长度和所述第三区域的数据长度进行比较,将所述第一区域的数据长度设置为各模块中所述第一区域的最大数据长度,将所述第三区域的数据长度设置为各模块中所述第三区域的最大数据长度;
通信模块,用于各模块之间进行通信时,将当前模块对应的数据结构的类型强转为下一模块所对应的数据结构的类型,并将与所述下一模块的功能相对应的数据写入到所述下一模块的所述第一区域和/或所述第三区域。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的自动驾驶应用层内存分配方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至7中任一项所述的自动驾驶应用层内存分配方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311568745.3A CN117608874A (zh) | 2023-11-22 | 2023-11-22 | 自动驾驶应用层内存分配方法、装置、计算机设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311568745.3A CN117608874A (zh) | 2023-11-22 | 2023-11-22 | 自动驾驶应用层内存分配方法、装置、计算机设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117608874A true CN117608874A (zh) | 2024-02-27 |
Family
ID=89950791
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311568745.3A Pending CN117608874A (zh) | 2023-11-22 | 2023-11-22 | 自动驾驶应用层内存分配方法、装置、计算机设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117608874A (zh) |
-
2023
- 2023-11-22 CN CN202311568745.3A patent/CN117608874A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103425538B (zh) | 进程通讯方法及系统 | |
CN103324533B (zh) | 分布式数据处理方法、装置及系统 | |
CN107888657A (zh) | 低延迟分布式存储系统 | |
EP2710477B1 (en) | Distributed caching and cache analysis | |
CN110119304B (zh) | 一种中断处理方法、装置及服务器 | |
CN111124277A (zh) | 一种深度学习数据集缓存方法、系统、终端及存储介质 | |
CN109564502B (zh) | 应用于存储设备中的访问请求的处理方法和装置 | |
CN107329704A (zh) | 一种缓存镜像方法及控制器 | |
US9380127B2 (en) | Distributed caching and cache analysis | |
CN112000287A (zh) | 一种io请求处理装置、方法、设备及可读存储介质 | |
CN110933173A (zh) | 一种基于区块链技术的组网方法和装置 | |
US10057348B2 (en) | Storage fabric address based data block retrieval | |
CN114500546B (zh) | 基于负载均衡集群的通信消息发送方法、装置及设备 | |
US20140351536A1 (en) | Efficient replication of changes to a byte-addressable persistent memory over a network | |
US20090248989A1 (en) | Multiprocessor computer system with reduced directory requirement | |
CN107493309B (zh) | 一种分布式系统中的文件写入方法及装置 | |
CN117806833A (zh) | 一种数据处理系统、方法及介质 | |
CN105978744B (zh) | 一种资源分配方法、装置及系统 | |
CN105162869A (zh) | 一种用于数据备份管理的方法与设备 | |
CN109274721B (zh) | 一种基于虚拟磁盘映射的LAN-free传输方法及系统 | |
CN111399753A (zh) | 写入图片的方法和装置 | |
CN117076140B (zh) | 一种分布式计算方法、装置、设备、系统及可读存储介质 | |
CN114172916A (zh) | 一种Spark集群中的数据传输方法、系统及相关装置 | |
CN108920095A (zh) | 一种基于crush的数据存储优化方法和装置 | |
CN102650932A (zh) | 数据的访问方法、设备和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |