一种面向共享内存式协处理器的堆内存管理方法和装置制造方法及图纸

技术编号:32683648 阅读:17 留言:0更新日期:2022-03-17 11:42
本申请涉及一种面向共享内存式协处理器的堆内存管理方法和装置。所述方法包括:在执行协处理端程序前,通过第一接口函数申请一片较大的连续堆内存空间,将申请的堆内存空间的虚地址转换为物理地址,并将物理地址传递至协处理器端程序,并将申请的堆内存空间分别组织为可用链表和已分配链表;在协处理器端程序申请内存使用时,通过第二接口函数从可用链表头开始寻找第一块大小可用的内存分配,并将新分配的内存加入已分配链表的链表尾;在协处理器端程序执行过程中,通过第三接口函数释放协处理器端堆内存空间,并将新释放的内存加入可用链表;在协处理器端程序执行完毕后,通过第四接口函数根据虚地址清理协处理器堆内存空间。接口函数根据虚地址清理协处理器堆内存空间。接口函数根据虚地址清理协处理器堆内存空间。

【技术实现步骤摘要】
一种面向共享内存式协处理器的堆内存管理方法和装置


[0001]本申请涉及计算机
,特别是涉及一种面向共享内存式协处理器的堆内存管理方法和装置。

技术介绍

[0002]异构计算以其高性能、高能效的特点在高性能计算领域得到不断发展,涌现出越来越多的协处理器,如GPU(Graphics Processing Unit,图形处理单元)、FPGA(Field

programmable Gate Array,现场可编程逻辑门阵列)等等。通常协处理器以PCIe(Peripheral Component Interconnect Express,快速外围组件互连)外设的形式连接到主机端CPU(Central Processing Unit,中央处理单元)上,且拥有自身独立的存储单元,无法直接与CPU共享内存,属于分离内存式协处理器。分离内存式协处理器在编程时需要显式地将数据在内存和协处理器的存储空间之间进行搬运,增加了编程的难度和程序执行中的开销。
[0003]针对以上问题,共享内存式协处理器直接在片内通过高速总线与CPU连接,能够实现与CPU共享内存,编程时无需进行数据搬运,避免了分离内存式协处理器的显式数据搬运开销,提高了协处理器的可编程性和程序性能。
[0004]程序运行过程中的数据主要存储在内存中,其中有的数据占用空间大小能够在程序编译时确定,而有的数据大小要到程序运行时才能确定,需要在运行过程中动态申请和释放内存空间。共享内存式协处理器与CPU都可以直接访问内存,其中CPU端能够独立运行操作系统,具有虚实地址转换和动态堆内存管理的能力,能够实现动态内存申请和释放功能。但是现有的共享内存式协处理器上无法运行操作系统,不具备虚实地址转换的能力,只能识别物理地址。因此,协处理器本身也不具有动态内存管理能力,无法满足对协处理器端使用动态内存的需求。

技术实现思路

[0005]基于此,有必要针对上述技术问题,提供一种能够实现协处理器动态内存管理能力的面向共享内存式协处理器的堆内存管理方法、装置、计算机设备和存储介质。
[0006]一种面向共享内存式协处理器的堆内存管理方法,所述方法包括:获取协处理器要申请的协处理器堆内存空间大小信息,根据所述协处理器堆内存空间大小信息通过第一接口函数申请堆内存空间,将申请的所述堆内存空间的虚地址转换为物理地址,并将所述物理地址传递至协处理器端程序;通过所述第一接口函数将所述申请的堆内存空间分别组织为可用链表和已分配链表;在协处理器端程序申请内存使用时,通过第二接口函数从可用链表头开始寻找第一块大小可用的内存分配,并将新分配的内存加入所述已分配链表的链表尾;在协处理器端程序执行过程中,通过第三接口函数释放协处理器端堆内存空间,
并将新释放的内存加入所述可用链表;在协处理器端程序执行完毕后,通过第四接口函数根据所述虚地址清理协处理器堆内存空间。
[0007]在其中一个实施例中,还包括:通过所述第一接口函数初始化可用链表和已分配链表;所述可用链表和所述已分配链表的每个节点存储的信息包括:当前节点的内存大小,指向下一节点的指针next;将所述可用链表的可用链表头指针指向所述物理地址;将所述已分配链表的可分配链表头指针赋值为空。
[0008]在其中一个实施例中,还包括:在协处理器端程序申请内存使用时,通过第二接口函数将所述可用链表头指针赋值给当前内存块指针;若当前内存块的大小大于等于申请内存的大小,则将所述当前内存块指针作为分配的物理地址返回;否则,将下一内存块指针作为当前内存块指针,判断所述当前内存块的大小是否满足申请内存的大小,直到找到大小合适的内存块,并将其指针作为分配的物理地址返回;将新分配的内存加入所述已分配链表的链表尾。
[0009]在其中一个实施例中,还包括:获取当前内存块的大小;获取申请内存的大小;将所述当前内存块的大小减去所述申请内存的大小,作为当前空闲内存块的大小;将所述当前空闲内存块加入所述可用链表。
[0010]在其中一个实施例中,还包括:在协处理器端程序执行过程中,通过第三接口函数获取需要释放的内存块的物理地址;从已分配链表头开始,依次比较所述已分配链表中当前内存块的指针和所述需要释放的内存块的物理地址,若两者相等,将所述已分配链表中当前内存块前一内存块的指向下一节点的指针赋值为当前内存块向后第二块内存的地址。
[0011]在其中一个实施例中,还包括:若新释放的内存与所述可用链表中的空闲内存块相邻,则将所述新释放的内存与所述可用链表中相邻的内存块合并;若新释放的内存与所述可用链表中的空闲内存块不相邻,则遍历所述可用链表,按照内存地址的先后顺序将所述新释放的内存块加入所述可用链表中。
[0012]在其中一个实施例中,还包括:从可用链表头开始,依次比较所述可用链表中当前内存块指针加上当前内存块大小后,是否与所述新释放的内存块的物理地址相等,若相等,将所述可用链表中当前内存块和所述新释放的内存块合并;其中,所述可用链表中当前内存块在前,所述新释放的内存块在后;若不相等,将所述新释放的内存块指针加上所述新释放的内存块的大小,与所述可用链表中当前内存块指针依次相比,若相等,将所述新释放的内存块和所述可用链表中当前内存块合并;其中,所述新释放的内存块在前,所述可用链表中当前内存块在后。
[0013]一种面向共享内存式协处理器的堆内存管理装置,所述装置包括:堆内存空间申请模块,用于获取协处理器要申请的协处理器堆内存空间大小信息,根据所述协处理器堆内存空间大小信息通过第一接口函数申请堆内存空间,将申请的
所述堆内存空间的虚地址转换为物理地址,并将所述物理地址传递至协处理器端程序;链表组织模块,用于通过所述第一接口函数将所述申请的堆内存空间分别组织为可用链表和已分配链表;堆内存空间分配模块,用于在协处理器端程序申请内存使用时,通过第二接口函数从可用链表头开始寻找第一块大小可用的内存分配,并将新分配的内存加入所述已分配链表的链表尾;堆内存空间释放模块,用于在协处理器端程序执行过程中,通过第三接口函数释放协处理器端堆内存空间,并将新释放的内存加入所述可用链表;堆内存空间清理模块,用于在协处理器端程序执行完毕后,通过第四接口函数根据所述虚地址清理协处理器堆内存空间。
[0014]一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:获取协处理器要申请的协处理器堆内存空间大小信息,根据所述协处理器堆内存空间大小信息通过第一接口函数申请堆内存空间,将申请的所述堆内存空间的虚地址转换为物理地址,并将所述物理地址传递至协处理器端程序;通过所述第一接口函数将所述申请的堆内存空间分别组织为可用链表和已分配链表;在协处理器端程序申请内存使用时,通过第二接口函数从可用链表头开始寻找第一块大小可用的内存分配,并将新分配的内存加入所述已分配链表的链表尾;在协处理器端程序执行过程中,通过第三接口函数释放协处理器端堆内存空间,并将新释放的内存加入所述可用链表;在协处本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种面向共享内存式协处理器的堆内存管理方法,其特征在于,所述方法包括:获取协处理器要申请的协处理器堆内存空间大小信息,根据所述协处理器堆内存空间大小信息通过第一接口函数申请堆内存空间,将申请的所述堆内存空间的虚地址转换为物理地址,并将所述物理地址传递至协处理器端程序;通过所述第一接口函数将所述申请的堆内存空间分别组织为可用链表和已分配链表;在协处理器端程序申请内存使用时,通过第二接口函数从可用链表头开始寻找第一块大小可用的内存分配,并将新分配的内存加入所述已分配链表的链表尾;在协处理器端程序执行过程中,通过第三接口函数释放协处理器端堆内存空间,并将新释放的内存加入所述可用链表;在协处理器端程序执行完毕后,通过第四接口函数根据所述虚地址清理协处理器堆内存空间。2.根据权利要求1所述的方法,其特征在于,通过所述第一接口函数将所述申请的堆内存空间分别组织为可用链表和已分配链表,包括:通过所述第一接口函数初始化可用链表和已分配链表;所述可用链表和所述已分配链表的每个节点存储的信息包括:当前节点的内存大小,指向下一节点的指针;将所述可用链表的可用链表头指针指向所述物理地址;将所述已分配链表的可分配链表头指针赋值为空。3.根据权利要求2所述的方法,其特征在于,在协处理器端程序申请内存使用时,通过第二接口函数从可用链表头开始寻找第一块大小可用的内存分配,并将新分配的内存加入所述已分配链表的链表尾,包括:在协处理器端程序申请内存使用时,通过第二接口函数将所述可用链表头指针赋值给当前内存块指针;若当前内存块的大小大于等于申请内存的大小,则将所述当前内存块指针作为分配的物理地址返回;否则,将下一内存块指针作为当前内存块指针,判断所述当前内存块的大小是否满足申请内存的大小,直到找到大小合适的内存块,并将其指针作为分配的物理地址返回;将新分配的内存加入所述已分配链表的链表尾。4.根据权利要求3所述的方法,其特征在于,若当前内存块的大小大于等于申请内存的大小,则将所述当前内存块指针作为分配的物理地址返回之后还包括:获取当前内存块的大小;获取申请内存的大小;将所述当前内存块的大小减去所述申请内存的大小,作为当前空闲内存块的大小;将所述当前空闲内存块加入所述可用链表。5.根据权利要求4所述的方法,其特征在于,在协处理器端程序执行过程中,通过第三接口函数释放协处理器端堆内存空间,包括:在协处理器端程序执行过程中,通过第三接口函数获取需要释放的内存块的物理地址;从已分配链表头开始,依次比较所述已分配链表中当前内存块的指针和所述需要释放的内存块的物理地址,若两者相等,将所述已分配链表中当前内存块前一内存块的指向下
一节点的指针赋值为当前内存块向后第二块内存的地址。6.根据权利要求5所述的方法,其特征在于,所述将新释放的内存加入所述可用链表,包括:若新释放的内存与所...

【专利技术属性】
技术研发人员:张昂廖湘科崔英博杨灿群黄春唐滔彭林夏泽宇郭逸飞
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1