面向国产异构众核加速计算核心局部存储的管理方法

阅读: 评论:0

著录项
  • CN202210136618.5
  • 20220215
  • CN114579301A
  • 20220603
  • 无锡江南计算技术研究所
  • 黄高阳;郑岩;王星炎;林海南;张含;邹通;宓楠浣
  • G06F9/50
  • G06F9/50

  • 江苏省无锡市滨湖区山水东路699号
  • 江苏(32)
  • 苏州创元专利商标事务所有限公司
  • 王健
摘要
本发明公开一种面向国产异构众核加速计算核心局部存储的管理方法,包括以下步骤:控制核心在内核申请内存空间用作LDM管理结构,并将LDM被使用情况进行标记;控制核心将该管理结构拷贝到各个运算核心的LDM中;运算核心在申请和释放空间时均根据自身的管理结构进行操作,并在管理结构中登记LDM访存情况;若控制核心需要申请LDM空间,则从当前记录的LDM起始地址依次检查各个运算核心是否占用当前LDM地址,LDM地址根据当前运算核心的管理结构中的标记进行查验是否被占用;当控制核心释放LDM空间时,在管理结构中进行标记。本发明可保证核心对于LDM空间的地址分配信息协调一致,进而保证在多个动态库载入时其LDM属性变量的正确可用。
权利要求

1.一种面向国产异构众核加速计算核心局部存储的管理方法,其特征在于,基于以下配置:

在动态库加载时,从LDM中分配一块空间,用于放置LDM属性变量,并根据该空间的地址,完成LDM属性变量的重定位,且该空间的分配遵循如下条件:

新分配的LDM属性变量空间不会跟其它的LDM属性变量空间冲突;

新分配的LDM属性变量空间不会被ldm_malloc申请;

新分配的LDM属性变量空间不会被ldm_free释放;

在LDM中存放管理结构,用于标记核心针对LDM的操作;

所述管理方法包括以下步骤:

步骤1、在应用程序启动时,管理控制核心在内核申请内存空间用作LDM管理结构,并将LDM被使用情况进行标记;

在加速运算核心正式启动之前,管理控制核心将该管理结构拷贝到各个加速运算核心的LDM中;

在得到管理结构后,加速运算核心在申请和释放空间时均根据自身的管理结构进行操作,并在管理结构中登记LDM访存情况;

步骤2、在加速运算核心启动后,若管理控制核心需要申请LDM空间,则从当前记录的LDM起始地址依次检查各个加速运算核心是否占用当前LDM地址,LDM地址根据当前加速运算核心的管理结构中的标记进行查验是否被占用,具体如下:

若在第一次轮查n个加速运算核心时均表示该地址未被占用,则此段内存被管理控制核心申请成功;

若在第一次轮查时,在第k个加速运算核心中检查到该地址被使用,则从该加速运算核心未被占用的LDM地址开始,从第k个加速运算核心开始,开启第二次轮查,直至到n个加速运算核心均未被使用的LDM地址,此时的LDM地址为管理控制核心申请的内存空间;

若多次轮查后依旧未到n个加速运算核心同地址空闲的LDM空间,则管理控制核心申请内存空间失败;

步骤3、当管理控制核心释放LDM空间时,在管理结构中进行标记,进而释放相应的LDM空间。

2.根据权利要求1所述的面向国产异构众核加速计算核心局部存储的管理方法,其特征在于:管理控制核心通过虚拟地址访问到各个加速运算核心中的LDM空间,协同加速运算核心共同管理LDM管理结构。

说明书
技术领域

本发明涉及一种面向国产异构众核加速计算核心局部存储的管理方法,属于国产众核芯片的内存管理技术领域。

随着高性能计算技术的发展,利用异构硬件加速方式提升CPU的处理性能已逐渐成为主流。当前国产众核处理器主要用于解决一些科学计算问题,此类课题可通过使用静态编译的方式来运行,因此对LDM的使用要求不高,不需要对LDM空间进行主从的协同管理。但随着人工智能的发展,应用高性能计算处理人工智能应用也成为了高性能计算发展的一种趋势,而人工智能应用的框架如Tensorflow等,则很多是基于python语言的;Python本身作为一个解释器,是动态链接的,依赖动态库libpython.so及基础动态库,如强行改成静态链接会出现运行错误,而采用动态库的方式,则不可避免的会遇到LDM变量加载的问题。因此,为有效支持动态库在众核芯片上的应用,有必要设计一套主从协同的LDM管理方法。

在国产众核芯片中,管理控制核心和加速运算核心两者需要协同在一起管理计算资源。在加速运算核心中具有一块高速的本地局部数据存储空间(Local Data Memory,LDM),该空间需要由软件进行合理的管理分配和使用。LDM被加速运算核心本身独立管理,快速访问,提高高性能应用程序的效率。

使用LDM空间通常有2种方式,一是LDM属性变量,二是LDM malloc/free方法;目前,针对LDM的管理和使用主要有以下三个方面问题:

(1)LDM管理处于用户空间,因而链接器无法进行ldm_malloc/free存储LDM属性变量;

(2)管理控制核心仅在应用程序刚执行时申请LDM空间用于存储LDM属性变量,当在应用程序运行过程中,由于ldm_malloc/free仅适用于用户空间,因而管理控制核心无法再次申请使用LDM空间;

(3)在静态链接的程序中,LDM属性的变量地址编排可以由编译器完成,在程序的声明周期内,变量的地址是固定不变的;但动态链接的程序则有不同,由于动态库中使用相对地址,多个动态库中的LDM属性变量需要被重新地址编排,才能保证变量不会被相互覆盖。通常,动态链接器运行在管理控制核心,因而目前对于LDM属性变量的加载会出现相互篡改现象。

LDM属性的变量的地址编址首先要由编译器进行编排。针对静态链接的程序,只需要由编译器进行一次性的静态编排即可,针对动态链接的程序,如仍采用静态编排的方式,在多个动态库中,LDM属性的变量可能会被编译器编排到相同的地址,从而导致访问冲突。现有技术下,由于LDM属性变量可能存在的地址冲突,需要程序员保证,在多个动态库执行时,只有当前动态库的LDM属性变量是有效的,且有可能会被改写,正确性不能保证。另外,还需保证在加速核心运行过程中,加速核心采用ldm_malloc申请的空间与管理核心分配的ldm变量空间不会存在冲突。

本发明的目的是提供一种面向国产异构众核加速计算核心局部存储的管理方法,以支持多个动态库中的LDM属性变量的地址编排和访问的正确性,不会发生内容被覆盖、地址冲突等问题。

为达到上述目的,本发明提供一种面向国产异构众核加速计算核心局部存储的管理方法,基于以下配置:

在动态库加载时,从LDM中分配一块空间,用于放置LDM属性变量,并根据该空间的地址,完成LDM属性变量的重定位,且该空间的分配遵循如下条件:

新分配的LDM属性变量空间不会跟其它的LDM属性变量空间冲突;

新分配的LDM属性变量空间不会被ldm_malloc申请;

新分配的LDM属性变量空间不会被ldm_free释放;

在LDM中存放管理结构,用于标记核心针对LDM的操作;

所述管理方法包括以下步骤:

步骤1、在应用程序启动时,管理控制核心在内核申请内存空间用作LDM管理结构,并将LDM被使用情况进行标记;

在加速运算核心正式启动之前,管理控制核心将该管理结构拷贝到各个加速运算核心的LDM中;

在得到管理结构后,加速运算核心在申请和释放空间时均根据自身的管理结构进行操作,并在管理结构中登记LDM访存情况;

步骤2、在加速运算核心启动后,若管理控制核心需要申请LDM空间,则从当前记录的LDM起始地址依次检查各个加速运算核心是否占用当前LDM地址,LDM地址根据当前加速运算核心的管理结构中的标记进行查验是否被占用,具体如下:

若在第一次轮查n个加速运算核心时均表示该地址未被占用,则此段内存被管理控制核心申请成功;

若在第一次轮查时,在第k个加速运算核心中检查到该地址被使用,则从该加速运算核心未被占用的LDM地址开始,从第k个加速运算核心开始,开启第二次轮查,直至到n个加速运算核心均未被使用的LDM地址,此时的LDM地址为管理控制核心申请的内存空间;

若多次轮查后依旧未到n个加速运算核心同地址空闲的LDM空间,则管理控制核心申请内存空间失败;

步骤3、当管理控制核心释放LDM空间时,在管理结构中进行标记,进而释放相应的LDM空间。

上述技术方案中进一步改进的方案如下:

上述方案中,管理控制核心通过虚拟地址访问到各个加速运算核心中的LDM空间,协同加速运算核心共同管理LDM管理结构。

由于上述技术方案的运用,本发明与现有技术相比具有下列优点:

本发明面向国产异构众核加速计算核心局部存储的管理方法,其通过管理控制核心和加速计算核心协同管理LDM空间,能够及时的获得LDM的使用情况,保证核心对于LDM空间的地址分配信息协调一致,使得该内存得到高效准确的应用,进而保证在多个动态库载入时其LDM属性变量的正确可用。

附图1为本发明中LDM管理结构的示意图。

实施例:本发明提供一种面向国产异构众核加速计算核心局部存储的管理方法,基于以下配置:

在动态库加载时,从LDM中分配一块空间,用于放置LDM属性变量,并根据该空间的地址,完成LDM属性变量的重定位,且该空间的分配遵循如下条件:

新分配的LDM属性变量空间不会跟其它的LDM属性变量空间冲突;

新分配的LDM属性变量空间不会被ldm_malloc申请;

新分配的LDM属性变量空间不会被ldm_free释放;

在LDM中存放管理结构,用于标记核心针对LDM的操作;

所述管理方法包括以下步骤:

步骤1、在应用程序启动时,管理控制核心在内核申请内存空间用作LDM管理结构,并将LDM被使用情况进行标记;

在加速运算核心正式启动之前,管理控制核心将该管理结构拷贝到各个加速运算核心的LDM中;

在得到管理结构后,加速运算核心在申请和释放空间时均根据自身的管理结构进行操作,并在管理结构中登记LDM访存情况;

步骤2、在加速运算核心启动后,若管理控制核心需要申请LDM空间,则从当前记录的LDM起始地址依次检查各个加速运算核心是否占用当前LDM地址,LDM地址根据当前加速运算核心的管理结构中的标记进行查验是否被占用,具体如下:

若在第一次轮查n个加速运算核心时均表示该地址未被占用,则此段内存被管理控制核心申请成功;

若在第一次轮查时,在第k个加速运算核心中检查到该地址被使用,则从该加速运算核心未被占用的LDM地址开始,从第k个加速运算核心开始,开启第二次轮查,直至到n个加速运算核心均未被使用的LDM地址,此时的LDM地址为管理控制核心申请的内存空间;

若多次轮查后依旧未到n个加速运算核心同地址空闲的LDM空间,则管理控制核心申请内存空间失败;

步骤3、当管理控制核心释放LDM空间时,在管理结构中进行标记,进而释放相应的LDM空间。

管理控制核心通过虚拟地址访问到各个加速运算核心中的LDM空间,协同加速运算核心共同管理LDM管理结构。

对上述实施例的进一步解释如下:

为解决动态链接库中的LDM变量使用问题,首先需要编译器在针对动态库进行LDM属性变量的地址编排时,采用重定位的方式,动态库加载时完成对LDM属性变量的重定位;

在动态库加载时,需要从LDM中分配一块空间,用于放置LDM属性变量,并根据该空间的地址,来完成LDM属性变量的重定位,该空间的分配必须遵循如下条件:

1. 新分配的LDM属性变量空间不会跟其它的LDM属性变量空间冲突;

2. 新分配的LDM属性变量空间不会被ldm_malloc申请;

3. 新分配的LDM属性变量空间不会被ldm_free。

根据以上的条件,本发明针对整个LDM采用一种管理结构进行管理,合理地为LDM属性变量分配空间;该管理结构存放于LDM中,核心针对LDM的操作均在其中进行标记,核心对于ldm_malloc/ldm_free,也会根据在管理结构中标记,从而提高LDM的好用性。

以下首先介绍该技术的LDM管理结构,其次从管理控制核心和加速运算核心两方面阐述如何协同管理LDM:

1、LDM内存管理结构

每个加速运算核心LDM空间具有256KB,用512B的管理结构进行管理,其中每一比特标记LDM的64B内存;当某个64B被占用时,管理结构中所对应的比特位被标记为1,管理结构示意图如附图1所示;

2、管理控制核心访存LDM空间

当应用程序在运行时需要加载动态库中的LDM属性变量时,假设动态应用程序需要1个管理控制核心和n个加速运算核心执行,其管理运算核心LDM空间管理流程如下:

(1)管理控制核心在应用程序启动时在内核申请512B的内存空间用作LDM管理结构,然后将LDM被使用情况进行标记;

在加速运算核心正式启动之前,将该管理结构拷贝到各个加速运算核心的LDM中,此时的LDM已经被占用了512B;

管理控制核心可以通过虚拟地址访问到各个加速运算核心中的LDM空间,从而可以协同加速运算核心共同管理LDM管理结构。

(2)在加速运算核心启动后,若管理控制核心需要申请LDM空间,那么它会从当前记录的LDM起始地址,然后依次检查各个加速运算核心是否占用当前LDM地址;LDM地址根据当前加速运算核心的管理结构中的标记进行查验是否被占用。

1)若在第一次轮查n个加速运算核心时均表示该地址未被占用,则此段内存被管理控制核心申请成功;

2)若在第一次轮查时,在第k个加速运算核心中检查到该地址被使用,则从该加速运算核心未被占用的LDM地址开始,从第k个加速运算核心开始,开启第二次轮查(加速运算核心k到加速运算核心k-1),直至到n个加速运算核心均未被使用的LDM地址,那么此时的LDM地址为管理控制核心申请的内存空间;

3)若多次轮查后依旧未到n个加速运算核心同地址空闲的LDM空间,则表示管理控制核心申请失败。

(3)当管理控制核心释放LDM空间时,将在管理结构中进行标记,进而释放所相应的LDM空间。

3、加速运算核心访存LDM空间

在得到管理结构后,加速运算核心在申请和释放都会根据自身的管理结构进行操作,并在管理结构中登记LDM访存情况。

为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:

国产众核芯片:将少量的管理控制用处理器核心和大量的加速计算用处理器核心进行集成的异构众核芯片,提供强大的并行计算能力。

管理控制核心:国产众核芯片上用于芯片管理和控制功能的处理器核心。管理控制核心上运行管理用操作系统(如Linux),负责整个芯片的管理和控制功能。

加速计算核心:国产众核芯片上用于进行并行加速计算的处理器核心。

局部存储(Local Data Memory,LDM):加速计算核心内部的本地高速内部局部数据存储空间。

动态链接:编译系统在链接阶段并不把目标文件和函数文件链接在一起,而是等到应用程序在执行过程中需要时才链接函数库。

采用上述面向国产异构众核加速计算核心局部存储的管理方法时,其通过管理控制核心和加速计算核心协同管理LDM空间,能够及时的获得LDM的使用情况,保证核心对于LDM空间的地址分配信息协调一致,使得该内存得到高效准确的应用,极大地避免了内存数据被篡改、错乱的现象以及数据在该内存空间中所造成的混乱,进而保证在多个动态库载入时其LDM属性变量的正确可用和应用程序的正确运行。

上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。

本文发布于:2023-04-13 21:29:30,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/86229.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图