一种计算芯片的内存管理方法、装置及计算芯片与流程

文档序号:36650778发布日期:2024-01-06 23:35阅读:26来源:国知局
一种计算芯片的内存管理方法、装置及计算芯片与流程

本发明涉及人工智能,特别涉及一种计算芯片的内存管理方法、装置及计算芯片。


背景技术:

1、随着人工智能(artificial intelligence,ai)技术的兴起,使用cpu(centralprocessing unit,中央处理器)加gpu(graphics processing unit,图形处理器)或者cpu加其他计算芯片进行人工智能模型训练和推理的方案被广泛应用于各个行业。内存管理优化技术由于能够利用内存池中的内存块,减少计算内存申请和释放的时间,在计算芯片中得到了广泛的应用。

2、现有技术中,针对计算芯片的内存管理优化,要么是多线程访问单一内存池,要么是为每个线程使用自己的内存池。然而,多线程访问单一内存池的方案由于需要设置互斥锁,以维护内存池中数据的一致性,使得大量线程同时需要申请或者释放内存时,同一时间只有一个线程能够获取到互斥锁,其他线程只能处于等待状态,这会严重影响计算芯片的性能;而每个线程使用自己的内存池的方案,每个内存池中都缓存了一定数量的内存块以供各自线程使用,导致了整个程序会占用计算芯片的大量内存,从而造成了内存资源的浪费。因此,如何能够在提高计算芯片内存申请和释放的性能的基础上,减少计算芯片中内存资源的浪费,是现今急需解决的问题。


技术实现思路

1、本发明的目的是提供一种计算芯片的内存管理方法、装置及计算芯片,以在提高计算芯片内存申请和释放的性能的基础上,减少计算芯片中内存资源的浪费。

2、为解决上述技术问题,本发明提供一种计算芯片的内存管理方法,包括:

3、获取当前线程的申请内存请求;其中,当前线程为计算芯片的任一线程;

4、根据所述申请内存请求的申请内存大小,确定目标内存分配方式;

5、若所述目标内存分配方式为第一分配方式,则利用当前线程的线程内存池,为当前线程分配所述申请内存请求对应的内存空间;其中,所述计算芯片中设置每个所述线程各自的一个线程内存池;

6、若所述目标内存分配方式为第二分配方式,则获取目标内存池的当前线程对应的互斥锁,利用所述目标内存池为当前线程分配所述申请内存请求对应的内存空间;其中,所述目标内存池为所述申请内存大小对应的一个预设内存池;所述目标内存池对应的申请内存大小大于所述线程内存池对应的申请内存大小。

7、在一些实施例中,所述利用当前线程的线程内存池,为当前线程分配所述申请内存请求对应的内存空间,包括:

8、从当前线程的线程内存池中获取目标内存块;其中,所述目标内存块为所述申请内存请求的申请内存大小对应的空闲的预设内存块;

9、将所述目标内存块分配给当前线程。

10、在一些实施例中,所述从当前线程的线程内存池中获取目标内存块,包括:

11、利用当前线程的线程内存管理实例,从当前线程的线程内存池中获取所述目标内存块。

12、在一些实施例中,当前线程的线程内存池包括多种预设大小的预设内存块,所述目标内存块为当前线程的线程内存池中所述申请内存请求的申请内存大小对应的一种预设大小的一个空闲的预设内存块。

13、在一些实施例中,所述从当前线程的线程内存池中获取目标内存块,包括:

14、根据申请内存请求的申请内存大小,确定目标数组下标;其中,当前线程的线程内存池包括空闲内存块数组,所述空闲内存块数组中包括各种所述预设大小各自对应的数组下标的数组元素,每个所述数组元素为各自的数组下标对应的预设大小的空闲的预设内存块的内存块链表,所述目标数组下标为任一所述预设大小对应的数组下标;

15、从所述目标数组下标的内存块链表中查找所述目标内存块。

16、在一些实施例中,所述从当前线程的线程内存池中获取目标内存块,包括:

17、判断当前线程的线程内存池中是否存在所述目标内存块;

18、若当前线程的线程内存池中不存在所述目标内存块,则获取共享内存池的当前线程对应的互斥锁,从所述共享内存池中获取所述目标内存块。

19、在一些实施例中,所述从所述共享内存池中获取所述目标内存块,包括:

20、判断所述共享内存池中是否存在所述目标内存块;

21、若不存在所述目标内存块,则在所述共享内存池中存在目标内存区间时,从所述目标内存区间分割获取所述目标内存块;在所述共享内存池中不存在目标内存区间时,获取页面缓存池的当前线程对应的互斥锁,从所述页面缓存池分配目标页面给所述共享内存池,并将所述目标页面作为所述共享内存池的内存区间;其中,所述目标页面为所述目标内存块的内存大小对应的空闲的预设页面空间,所述目标内存区间为所述共享内存池中大于或等于所述目标内存块的内存大小的任一所述内存区间。

22、在一些实施例中,所述页面缓存池包括多种预设页面空间大小的预设页面空间,所述预设页面空间大小包括以预设内存页面大小递增的所述预设内存页面大小至n个所述预设内存页面大小,所述从所述页面缓存池分配目标页面给所述共享内存池,包括:

23、判断所述页面缓存池中是否存在大于或等于所述目标内存块的空闲的预设页面空间;

24、若存在大于或等于所述目标内存块的空闲的预设页面空间,则选择一个最小的大于或等于所述目标内存块的空闲的预设页面空间作为所述目标页面,并将所述目标页面分配给所述共享内存池;

25、若不存在大于或等于所述目标内存块的空闲的预设页面空间,则从所述计算芯片的剩余内存中申请预设内存申请大小的内存空间,并从所述预设内存申请大小的内存空间中分割所述目标内存块给所述共享内存池,将所述预设内存申请大小的内存空间中分割剩余的内存空间放入所述页面缓存池;其中,所述预设内存申请大小大于或等于n个所述预设内存页面大小。

26、在一些实施例中,所述预设大小包括以8字节递增的8字节至128字节、以16递增的144字节至1024字节、以128字节递增的1152字节至8192字节和以1024字节递增9216字节至65536字节,所述根据所述申请内存请求的申请内存大小,确定目标内存分配方式,包括:

27、判断所述申请内存请求的申请内存大小是否大于第一大小阈值;其中,所述第一大小阈值为所述65536字节;

28、若不大于第一大小阈值,则确定所述目标内存分配方式为所述第一分配方式;

29、若大于第一大小阈值,则确定所述目标内存分配方式为所述第二分配方式。

30、在一些实施例中,所述预设内存池包括第一内存池和第二内存池,所述获取目标内存池的当前线程对应的互斥锁之前,还包括:

31、判断所述申请内存请求的申请内存大小是否大于第二大小阈值;

32、若不大于所述第二大小阈值,则将所述第一内存池确定为所述目标内存池;

33、若大于所述第二大小阈值,则将所述第二内存池确定为所述目标内存池;其中,所述第二内存池对应的申请内存大小大于所述第一内存池对应的申请内存大小。

34、在一些实施例中,所述目标内存池为所述第一内存池时,所述利用所述目标内存池为当前线程分配所述申请内存请求对应的内存空间,包括:

35、根据所述申请内存请求的申请内存大小,确定目标内存大小;其中,所述目标内存大小为所述申请内存请求的申请内存大小与第三大小阈值的商向上取整后与第三大小阈值的乘积;

36、判断所述目标内存池是否存在大于或等于所述目标内存大小的空闲的内存块;

37、若存在大于或等于所述目标内存大小的空闲的内存块,则将所述目标内存池中大于或等于所述目标内存大小的空闲的内存块中的最小的内存块分配给当前线程;

38、若不存在大于或等于所述目标内存大小的空闲的内存块,则判断所述计算芯片的剩余内存是否存在目标申请大小的内存空间;其中,所述目标申请大小为所述计算芯片的剩余内存与预设数值的商和所述目标内存大小中的最大值,所述预设数值大于1;

39、若存在所述目标申请大小的内存空间,则从所述计算芯片的剩余内存中申请所述目标申请大小的内存空间,并从所述目标申请大小的内存空间中分割所述目标内存大小的内存空间分配给当前线程,将所述目标申请大小的内存空间中分割剩余的内存空间放入所述目标内存池。

40、在一些实施例中,所述目标内存池为所述第二内存池时,所述利用所述目标内存池为当前线程分配所述申请内存请求对应的内存空间,包括:

41、判断所述目标内存池是否存在大于或等于所述目标内存大小的空闲的内存块;

42、若存在大于或等于所述目标内存大小的空闲的内存块,则将所述目标内存池中大于或等于所述目标内存大小的空闲的内存块中的最小的内存块分配给当前线程;

43、若不存在大于或等于所述目标内存大小的空闲的内存块,则判断所述计算芯片的剩余内存是否存在所述目标内存大小的内存空间;

44、若存在所述目标内存大小的内存空间,则判断所述计算芯片的剩余内存是否存在所述目标内存大小的内存空间;

45、若不存在所述目标内存大小的内存空间,则控制所述第一内存池和第二内存池释放各自的完整内存空间;其中,所述完整内存空间为之前向所述计算芯片申请的整个空闲的内存空间;

46、若存在所述目标内存大小的内存空间,则申请所述计算芯片的全部剩余内存,并判断所述全部剩余内存的内存大小与所述目标内存大小的差是否大于或等于所述第二大小阈值;

47、若大于或等于所述第二大小阈值,则从所述全部剩余内存中分割所述目标内存大小的内存空间分配给当前线程,将所述全部剩余内存中分割剩余的内存空间放入所述目标内存池;

48、若小于所述第二大小阈值,则将所述全部剩余内存分配给当前线程。

49、在一些实施例中,该方法还包括:

50、获取当前线程的释放内存请求;

51、根据所述释放内存请求的释放内存大小,确定目标内存分配方式;

52、若所述目标内存分配方式为第一分配方式,则根据所述释放内存请求中的内存指针,将所述内存指针对应的内存空间释放到当前线程的线程内存池;

53、若所述目标内存分配方式为第二分配方式,则获取目标内存池的当前线程对应的互斥锁,根据所述释放内存请求中的内存指针,将所述内存指针对应的内存空间释放到目标释放内存池;其中,所述目标释放内存池为所述释放内存大小对应的一个预设内存池;所述目标释放内存池对应的释放内存大小大于所述线程内存池对应的释放内存大小。

54、在一些实施例中,所述将所述内存指针对应的内存空间释放到目标释放内存池之后,还包括:

55、判断所述目标释放内存池中所述内存指针对应的内存空间是否为分割过的内存空间;

56、若为分割过的内存空间,则在所述目标释放内存池中递归查找并合并所述内存指针对应的内存空间相邻的空闲的内存空间。

57、本发明还提供了一种计算芯片的内存管理装置,包括:

58、申请获取模块,用于获取当前线程的申请内存请求;其中,当前线程为计算芯片的任一线程;

59、分配确定模块,用于根据所述申请内存请求的申请内存大小,确定目标内存分配方式;

60、第一申请模块,用于若所述目标内存分配方式为第一分配方式,则利用当前线程的线程内存池,为当前线程分配所述申请内存请求对应的内存空间;其中,所述计算芯片中设置每个所述线程各自的一个线程内存池;

61、第二申请模块,用于若所述目标内存分配方式为第二分配方式,则获取目标内存池的当前线程对应的互斥锁,利用所述目标内存池为当前线程分配所述申请内存请求对应的内存空间;其中,所述目标内存池为所述申请内存大小对应的一个预设内存池;所述目标内存池对应的申请内存大小大于所述线程内存池对应的申请内存大小。

62、此外,本发明还提供了一种计算芯片,包括:

63、存储器,用于存储计算机程序;

64、处理器,用于执行所述计算机程序时实现如上述所述的计算芯片的内存管理方法的步骤。

65、本发明所提供的一种计算芯片的内存管理方法,包括:获取当前线程的申请内存请求;其中,当前线程为计算芯片的任一线程;根据申请内存请求的申请内存大小,确定目标内存分配方式;若目标内存分配方式为第一分配方式,则利用当前线程的线程内存池,为当前线程分配申请内存请求对应的内存空间;其中,计算芯片中设置每个线程各自的一个线程内存池;若目标内存分配方式为第二分配方式,则获取目标内存池的当前线程对应的互斥锁,利用目标内存池为当前线程分配申请内存请求对应的内存空间;其中,目标内存池为申请内存大小对应的一个预设内存池;目标内存池对应的申请内存大小大于线程内存池对应的申请内存大小;

66、可见,本发明通过预设内存池和各线程的线程内存池的设置,利用各线程各自的线程内存池处理内存较小的内存请求,无需获取互斥锁,减少了计算芯片的内存申请和释放的时间,能够提升计算芯片内存申请和释放的性能;并且对内存较大的内存请求使用的带互斥锁的预设内存池进行处理,仅对内存较小的内存请求使用的线程内存池进行处理,减少了计算芯片中内存资源的浪费。此外,本发明还提供了一种计算芯片的内存管理装置及计算芯片,同样具有上述有益效果。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1