发明内容
针对上述问题,本发明提供了一种用于访问设备内存的方法、用于管理设备内存的方法、计算设备和计算机存储介质,使得CPU能够直接访问设备内存中具有UMA特性的内存区间,以及设备内的计算内核和 CPU能够便捷地针对同一内存地址的交互操作。
根据本发明的第一方面,提供了一种用于访问设备内存的方法,该方法包括:
在一些实施例中,用于访问设备内存的方法还包括:经由设备驱动程序配置设备页表;以及基于访问需求配置设备区块表所包括的至少部分表项,以便将经配置的设备区块表写入设备区块表模块或者设备内存,设备区块表模块设置在设备的***总线的入口处。
在一些实施例中,基于访问需求配置设备区块表所包括的至少部分表项包括:如果确定多个计算内核所需数据为局部数据,内核驱动程序将设备区块表中的、与用于存储所述局部数据的对应内存区块相关联的表项所指示的UMA类型更新为非一致内存访问(NUMA)模式;以及如果确定多个计算内核所需数据为全局数据,内核驱动程序将设备区块表中的、与用于存储所述局部数据的对应内存区块相关联的表项所指示的UMA类型更新为UMA模式。
在一些实施例中,计算UMA地址包括:基于所获得的对应的UMA类型、内存区间的数量,计算用于指示内存区块的交织特征的UMA地址。
在一些实施例中,基于访问需求配置设备区块表所包括的至少部分表项包括:基于设备区块表所包括的表项数量和各个表项所指示的UMA类型,经由设备驱动程序,将设备内存配置为具有2n个内存区块的区块内存池,n指示设备区块表的表项数量。
在一些实施例中,设备区块表包括多个表项,多个表项中的每个表项包括用于指示对应UMA类型的数据位。
在一些实施例中,所述UMA类型为NUMA模式、在2M个不同的内存区间上交织的UMA模式、以及UMA模式中的一种,M为正整数。
根据本发明的第二方面,提供了一种用于访问设备内存的方法,该方法包括:经由设备驱动程序,基于访问需求配置设备区块表所包括的至少部分表项,以便确定至少部分表项所分别指示的一致内存访问(UMA)类型,所述UMA类型指示对应内存区块的内存管理模式;将经配置的设备区块表写入设备区块表模块或者设备内存;以及基于至少部分表项所分别指示的UMA类型,配置设备内存中与对应表项相关联的内存区块,以用于基于设备区块表中对应表项所指示的UMA类型访问设备内存。
在一些实施例中,设备区块表模块设置在设备的***总线的入口处,基于访问需求配置设备区块表所包括的至少部分表项包括:配置设备区块表所包括的表项数量和与表项相关联的内存区块的内存大小。
在一些实施例中,配置设备内存中与对应表项相关联的内存区块包括:基于表项所分别指示的UMA类型、以及内存区间的数量,分别计算用于指示表项所对应内存区块的交织特征的UMA地址;以及基于所计算的UMA地址、交织粒度和内存区块的粒度,重新排布内存区块的地址位。
根据本发明的第三方面,提供了一种计算设备,包括:至少一个处理器;以及与所述至少一个处理器连接的存储器;所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明的第一方面或第二方面的方法。
在本发明的第四方面中,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中所述计算机指令用于使计算机执行本发明的第一方面或第二方面的方法。
应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
图1示出了现有技术中的用于访问设备内存的方法的示意图。如图1所示,CPU110通过***总线112(例如,PCIe)与设备114进行数据交互,例如经由***总线112通过DMA的方法访问设备114的内存。设备114例如而不限于是AI计算芯片。设备114例如包括的多个计算内核116(例如,CC0至CCn)。设备114的片上内存管理方式可以具有UMM特性。例如可以是UMA(uniform memory access,一致内存访问)模式和NUMA(non-uniform memory access,非一致内存访问)模式。UMA模式下,设备114例如将可用的芯片内片上内存以连续的方式组织起来,设备114内的各个计算内核以同样的速度访问片上内存。在NUMA模式下,设备内的各个计算内核拥有各自的本地片上内存,由此,可以支持特别快速的本地访问。但是标准的***总线112和通用的CPU110无法获知设备114中的UMA特性,因此,CPU110无法直接访问设备114的内存中具有UMA特性的内存区间(例如,section0至section3,如图1中示出的sec0至sec3)。另外,设备114内的各个计算内核一般通过地址转换页表项PTE获得UMA特性。而通过标准的***总线访问设备内存的CPU110无法获知设备114中的UMA特性,因此设备114内的计算内核和 CPU110对同一内存地址的交互操作存在困难。因此,传统的用于访问或管理设备内存的方案存在的不足之处在于:CPU无法直接访问设备内存中具有UMA特性的内存区间,以及设备内的计算内核和 CPU难以针对同一内存地址的交互操作。
为了至少部分地解决上述问题以及其他潜在问题中的一个或者多个,本发明的示例实施例提出了一种用于访问设备内存的方案。在该方案中,通过当任务经由用户程序分发至设备,处理器基于与任务相关的通信需求生成读/写指令以用于访问设备内存;设备总线接口收到该读/写指令之后,查找经由设备驱动程序预先配置的设备区块表以获得对应的UMA类型(该UMA类型指示对应内存区块的内存管理模式);基于所获得的UMA类型计算UMA地址,进而转换至内存区间地址以便实现基于UMA特性的设备内存访问,本发明能够使得CPU可以经由设备总线接口查找设备区块表,进而获知设备内存区块的对应UMA类型,并经由地址转换直接访问设备内存中具有UMA特性的内存区块,相应的设备内的计算内核和CPU能够便捷地针对同一内存地址的交互操作。
以下结合图2至图4说明用于访问设备内存的方法200。图2示出了根据本发明的实施例的用于访问设备内存的方法200的流程图。图3示出了根据本发明的实施例的用于实施访问设备内存的方法的***的示意图。图4示出了根据本发明的实施例的设备区块表和对应内存区块的示意图。应当理解的是,方法200还可以包括未示出的附加框和/或可以省略所示出的框,本发明的范围在此方面不受限制。
在步骤202,如果任务经由用户程序分发至设备,处理器基于与任务相关的通信需求生成读/写指令,以便访问设备内存。
关于设备,其例如而不限于是AI 加速设备、图形处理器(Graphics ProcessingUnits,GPU)、通用图形处理器(General Purpose Graphics Processing Units,GPGPU)。在图3中,设备例如是GPU 320。设备端***总线(例如为PCIe)入口处通常有设备总线接口322(例如,HOST interface),用以对接片上网络(Network On Chip ,NOC)328,以便通过HOSTinterface访问设备内存通道(Device Memory channels),例如,双倍速率同步动态随机存储器(DDR)的内存区间(Sections)。GPU 320例如配置有8 Channel的Section,总计64GByte内存。如图3所示,GPU 320的内存例如包括多个内存区间(section),例如第一内存区间sec0、第二内存区间sec1、第三内存区间sec2和第四内存区间sec3,其中,标记326例如指示第一内存区间sec0。CPU 310例如通过***总线312访问GPU 320。根据方法200,如果用户程序将任务分发至GPU 320,CPU 310基于该任务相关的访问需求生成读/写指令,以便经由***总线312发送至GPU 320。
在一些实施例中,在步骤202之前,方法200还包括:经由设备驱动程序配置设备页表;以及基于访问需求配置设备区块表所包括的至少部分表项(部分表项或者全部表项),以便将经配置的设备区块表写入设备区块表模块或者设备内存,设备区块表模块设置在设备的***总线的入口处。例如,在任务运行生命周期(run time),在分配内存的同时,通过设备驱动程序增加配置设备页表动作。应当理解,在传统的用于访问或管理设备内存的方法中,在分配内存之前,经由设备驱动程序配置设备页表,而CPU通过传统的设备页表无法获知设备内内存的UMA方式。而本发明中,设备驱动程序在配置设备页表的同时还会配置设备区块表,以便经由设置在设备的***总线的入口处的设备区块表模块查询设备区块表。应当理解,由于设备区块表模块设置在设备的***总线的入口处,CPU经由***总线能够便捷地获知设备内存的UMA特性。下文将结合图5具体说明关于基于访问需求配置设备区块表所包括的至少部分表项的方法500,在此,不再赘述。
在步骤204,如果经由设备总线接口收到所述读/写指令,查找经由设备驱动程序预先配置的设备区块表,以便获得对应的一致内存访问(UMA)类型,所述UMA类型指示对应内存区块的内存管理模式。例如,如果GPU 320的设备总线接口322 接收到来自***总线312的读/写指令,经由设备区块表模块324查询设备区块表,以便获得用于指示对应内存区块的内存管理模式的UMA类型。
关于获得对应的UMA类型的方法,其例如包括:获取***总线地址;经由设备总线接口的基地址寄存器(Base Address Register ,Bar)处理,获取用于指示64GB存储空间的地址信息(例如为35bit的地址信息);基于该地址信息经由设备区块表模块查询设备区块表,以获得内存区块的索引信息(该索引信息例如是m);基于所获取的索引信息获取对应的UMA类型(该UMA类型例如是k)。索引信息m例如可以索引到对应内存区块的UMA类型。
关于设备区块表模块324,其设置在设备的***总线的入口处,用于存储和查询设备区块表。如图3所示,设备区块表模块324与设备总线接口322相连。应当理解,可以采用多种硬件实现方式来构建设备区块表模块。例如,可以采用Flop器件构建设备区块表模块。在一些实施例中,基于 SRAM 工艺的查找表(Look Up Table, LUT)结构实现设备区块表模块。在一些实施例中,在设备内存中内置设备区块表。应当理解,上述实现设备区块表模块的不同方式对于查找设备区块表的表项,存在不同程度的延迟。例如,采用Flop器件构建设备区块表模块的方式可以实现实时查找设备区块表的表项。而基于SRAM 工艺构建设备区块表模块的方式,存在1至2个读写操作周期(Cycle)的延迟。而在设备内存中内置设备区块表的方式,存在高达100个Cycle的延迟。
如图所示,图4中的左侧部分示例出设备区块表410。设备区块表410例如包括32K个表项(例如,第一表项412至第32K表项422),每个表项例如对应设备内存中具有2MB粒度的内存区块(例如,第一表项412对应第一内存区块430,第二表项414对应第二内存区块440)。32K个表项例如对应设备所具有的64GB内存。每个表项包括用于指示对应UMA类型的数据位。数据位由2位二进制数据所表示,用于指示对应内存区块的内存管理模式(内存管理模式例如是UMA类型)。因此,设备区块表410例如包括32K *2 bit,用来分别指示设备内存中与各个表项分别对应的32K个2MB粒度内存区块的UMA类型。从处理器侧看,设备区块表410为线性的地址,该线性的地址与设备64GB的内存相映射。设备64GB内存的物理地址被划分为32K个内存区块,每个2MB粒度的内存区块对应设备区块表410中经由设备驱动程序预先配置的表项、每个表项包括用于指示对应内存区块的UMA类型的数据位。
该所述UMA类型为非一致内存访问方式模式(即,NUMA模式或UMA_1模式)、在2M个不同的内存区间上交织的UMA模式(M为正整数,例如,UMA_2模式、UMA_4模式、UMA_8模式、UMA_16模式等)、以及UMA模式(即,UMA_VM模式或者UMA_ALL)中的一种。例如,第二表项414所对应的第二内存区块的UMA类型为NUMA模式,第六表项418所对应的第六内存区块的UMA类型为UMA_2模式,第一表项412所对应的第一内存区块430的UMA类型为UMA_ALL模式(或者称为“UMA_VM”模式、或 “UMA模式”)。应当理解,UMA类型也可以支持更多内存访问方式的区块模式。图4所示的UMA类型仅为示例性的。
应当理解,不同的UMA类型,在设备内存的对应内存区块上地址排序方式是不同。由此实现了非固定的地址映射关系。设备内存的地址不再是线性的,或者并非按照同一种方式进行配置,而是随着UMA类型的变化,地址的排列方式也随之变化。藉由本发明,CPU不仅能够访问具有UMA特性的设备内存,而且可以访问兼具多种不同UMA特性的设备内存。
图4的右侧部分示出了设备内存的实际的内存区间(section)的分布。如图4所示,设备内存分为4列,每一列是一个内存区间。4个内存区间例如分别为section 0至section3,分别标记为sec0、sec1、sec2和sec3。每个内存区间包括多个存储单元。每个存储单元例如为4KB粒度。每个设备区块表的表项所对应的内存区块例如是2MB粒度,其包括512个4KB的存储单元。应当理解,设备内存可以包括更多个内存区间。
如图4所示,第一表项412所对应的第一内存区块430的UMA类型为UMA_ALL模式。关于UMA_ALL类型(或者称为“UMA_VM”),其意味着以interleave的方式在所有的内存区间上存放。UMA_ ALL模式的地址分配方式是:设备内存的地址分配均是以所有数量的section的对应存储单元为一行,每行从最左侧section的对应存储单元至最右侧section的对应存储单元逐次递增地排列地址,并且自下向上交织(interleave)地逐行排列地址。因此,在UMA_ALL模式下,第一内存区块430所包括的512个4KB(4KB为一个page的最小粒度)的存储单元的地址分配方式为:自第一行的第1个存储单元(即,存储单元434)开始,按照从section 0至section 3的箭头432所指方向逐次递增地排列,再按照箭头438所指示交织(interleave)至第二行,随后,从第二行的section 0的对应存储单元至section 3的对应存储单元逐次递增排列,直至排列至第128行的section 3,即,第512个存储单元(标记436所指示的存储单元)。由此,设备内存的地址分配可以不按照页(page)的粒度(例如4KB)进行分配,而可以按照内存区块的更粗的粒度(例如2MB)进行分配。进而可以得到具有一定存储空间并且UMA特性的区块内存池,可以以内存区块的整数倍来分配和回收存储器内存。软件编程的时候可以利用具有不同UMA特性的内存区块的内存空间进行计算。
如图4所示,第二表项414至第五表项416所分别对应的第二内存区块440至第五内存区块450的UMA类型为NUMA模式。关于NUMA模式,其地址分配方式是:针对每个设备内存区间(section),自下向上逐次排列地址。例如,在NUMA模式下,第二内存区块440所包括的512个4KB的存储单元的地址分配方式为:自第一个存储单元442开始,按照箭头446的指示方向自下向上逐次排列地址,直至第512个存储单元444。
如图4所示,第六表项418至第七表项420所分别对应的第六内存区块460至第七内存区块470的UMA类型为UMA_2模式。关于UMA_2模式,其意味着数据以interleave的方式在2个内存区间存放。其地址分配方式例如是:以2个section的对应存储单元为一行,每行从section 0的对应存储单元至section 1的对应存储单元(或者,从section2的对应存储单元至section3的对应存储单元)逐次递增地排列地址,并且从自下向上交织(interleave)地逐行排列地址。例如,在UMA_2模式下,第六内存区块460所包括的512个4KB的存储单元的地址分配方式为:自第一行的第1个存储单元(即,存储单元462)开始,按照从section 0至section 1的箭头464所指方向逐次递增地排列至第一行的第2个存储单元,再按照箭头466所指示交织(interleave)至第二行,以此类推,排列至第255行的第二个存储单元。
关于UMA_4模式,其意味着数据以交织(interleave)的方式在4个内存区间存放。UMA_4模式的地址分配方式例如是:以4个section的对应存储单元为一行,每行从section0的对应存储单元至section 3的对应存储单元逐次递增地排列地址,并且自下向上交织(interleave)地逐行排列地址。
在步骤206,基于所获得的对应的UMA类型,计算UMA地址。UMA地址指示内存区块的交织特征。
关于计算UMA地址的方式,其例如包括:基于所获得的对应的UMA类型、内存区间(sections)的数量,计算用于指示内存区块的交织特征的UMA地址。以下结合表达式(1)和(2)示意性说明用于计算UMA地址的方法。
在上述表达式(1)和(2)中,F(N)代表内存区间(sections)的数量,N代表内存区间数量的计算因子,N为自然数。k指示UMA类型,例如,
。当k=0时,代表对应的内存区块的UMA类型为NUMA模式。k=1时,代表UMA_2模式。k=2时,代表UMA_4模式。
代表UMA地址,该UMA地址指示内存区块的交织特征。例如,对于NUMA模式(k=0);4个sections(N=2)的情形。基于表达式(2)可计算出用于指示对应的内存区块的交织特征的UMA地址位为 [13:12]。对于UMA_2模式(k=1),4个sections(N=2)的情形,基于表达式(2)可计算出用于指示对应的内存区块的交织特征的UMA地址位为[13:13] 。再例如,对于UMA_4模式(k=2);4个sections(N=2)的情形。用于指示对应的内存区块的交织特征的UMA地址位为 [13:14] (当最低有效位大于最高有效位时,即不存在该地址位空间)。
在步骤208,将所计算的UMA地址转换至内存区间地址,以便实现基于UMA特性的设备内存访问。
关于将所计算的UMA地址转换至内存区间地址的方法,其例如包括:基于***总线地址和所计算的UMA地址,获得经转换的内存区间(section)地址。例如,在所获得的***总线地址中,将基于UMA类型计算的UMA地址位由低地址位区间挪至高地址位区间,以便获得经由地址重新排布的内存区间(section)地址,进而基于内存区间(section)地址实现基于UMA特性的设备内存访问。由此,本发明可以实现有UMA属性的地址翻译过程。
以下结合表达式(3)和(4)示意性说明用于将所计算的UMA地址转换至内存区间地址的方法。
在上述表达式(3)和(4)中,m代表内存区块的索引信息(或者为表项的索引信息)。以图4为例,每个索引信息对应4*128个存储单元(以图4中每行包括4个4K粒度的存储单元为例,每个索引信息对应一组128行的存储单元)。例如,m=5,则索引信息5对应第5组128行的存储单元。
在上述表达式(3)和(4)中,k指示UMA类型,例如,
。表达式(3)代表***总线地址(PCIe 地址),该地址例如而不限于是对应于64GB存储空间的35bit地址。表达式(3)中示例出三段地址,分别是:对应交织粒度的地址[11:0]、以12bit为起点的对应于2MB的内存区块(block)的地址/>
、以及代表与索引信息m相关的2MB粒度的地址/>
。其中,/>
指示设备区块表操作的粒度信息。表达式(4)代表经由UMA地址转换后的section 地址。根据表达式(4)可知,基于索引信息m、UMA类型k、以及与交织粒度相关联的起始地址位12,将所计算的UMA地址
挪到对应2MB地址的高地址区间,即,UMA地址被从低地址位区段挪至/>
左侧的高地址位。根据表达式(4)可知,在转换后的section 地址中,
对应的地址位指示section的目标区段。表达式(3)至表达式(4)的转换过程示意性示出了将基于UMA类型所计算UMA地址由低地址位区间挪至指示section的目标区段的高地址位区间,上述UMA地址代表交织方式的改变。通过上述基于UMA类型的地址的重新排列,将指示section的目标区段的地址位挪到对应2MB存储空间的地址的高地址区间,由此实现存储器地址的重新排布,进而获得符合UMA特征的物理地址。应当理解,上述表达式(3)和(4)中对应交织粒度的地址[11:0]、以及以12bit为起点的对应于2MB的内存区块(block)的地址/>
仅是示例性的。也可以基于其他对应交织粒度配置上述地址。
关于设备内存的访问方式或者寻址方式,本公开仍然采用现有的寻址方式,即,按照行优先的、先行后列、会跨多个内存区间(section)的方式进行寻址。
图4所示出的具有UMA特性的内存区块的粒度为2MB。例如, 2MB的内存区块是设备内存可以支持UMA模式的最小内存区块粒度。应当理解,内存区块的粒度也可以变化为4MB、8MB等。当增大设备的内存区块粒度时,可以减少设备区块表410的表项规模。
在上述方案中,本发明能够使得 CPU可以经由设备总线接口查找设备区块表,进而获知设备内存区块的对应UMA类型,并经由地址转换直接访问设备内存中具有UMA特性的内存区间,相应的设备内的计算内核和 CPU能够便捷地针对同一内存地址的交互操作。
在一些实施例中,方法200还包括用于基于访问需求配置设备区块表所包括的至少部分表项的方法500。图5示出了根据本发明的实施例的用于基于访问需求配置设备区块表所包括的至少部分表项的方法500的流程图。应当理解的是,方法500还可以包括未示出的附加框和/或可以省略所示出的框,本发明的范围在此方面不受限制。
在步骤502,如果确定多个计算内核所需数据为局部数据,内核驱动程序将设备区块表中的、与用于存储所述局部数据的对应内存区块相关联的表项所指示的UMA类型更新为非一致内存访问(NUMA)模式。设备例如是大尺寸的芯片,其包括多个计算内核。多个计算内核的远近高低存在差异,因此在***总线上会得到不同延迟程度的响应。应当理解,距离计算内核较近的内存其计算延迟较小,而距离计算内核较远的内存其计算延迟较大。因此,对于各个计算内核而言,如果专属于计算内核的数据(即,局部数据)在本地内存计算,则延迟较少,此时与用于存储所述局部数据的对应内存区块相关联的表项所指示的UMA类型被更新为NUMA模式。由此,本发明可以提供访问的便捷性。
在步骤504,如果确定多个计算内核所需数据为全局数据,内核驱动程序将设备区块表中的、与用于存储所述局部数据的对应内存区块相关联的表项所指示的UMA类型更新为UMA模式。
例如,如果多个计算内核例如计算共同的任务,需要共享全局数据,则全局数据需要均等地放在所有的存储区间。由此,存储所述全部数据的对应内存区块的UMA类型位被设定为UMA模式,由此,本发明可以降低数据的存储量。
通过采用上述方案,本发明可以基于计算任务使用数据特点差异,利用不同UMA类型技术优化局部性数据(专用数据)和全局性数据(共享数据)的使用,减少数据迁移和提高利用率;避免因为大尺寸芯片所造成的距离和总线拥塞。
以下结合图6和图7说明用于管理设备内存的方法600。图6示出了根据本发明的实施例的用于管理设备内存的方法600的流程图。图7示出了根据本发明的实施例的用于配置设备内存中与对应表项相关联的内存区块的方法的示意图。应当理解的是,方法600还可以包括未示出的附加框和/或可以省略所示出的框,本发明的范围在此方面不受限制。
在步骤602,经由设备驱动程序,基于访问需求配置设备区块表所包括的至少部分表项,以便确定至少部分表项所分别指示的一致内存访问(UMA)类型,所述UMA类型指示对应内存区块的内存管理模式。
关于确定至少部分表项所分别指示的一致内存访问(UMA)类型的方法,其例如包括:如果确定多个计算内核所需数据为局部数据,内核驱动程序将设备区块表中的、与用于存储所述局部数据的对应内存区块相关联的表项所指示的UMA类型更新为非一致内存访问(NUMA)模式;以及如果确定多个计算内核所需数据为全局数据,内核驱动程序将设备区块表中的、与用于存储所述局部数据的对应内存区块相关联的表项所指示的UMA类型更新为UMA模式。在一些实施例中,关于确定至少部分表项所分别指示的一致内存访问(UMA)类型的方法例如还包括:配置设备区块表所包括的表项数量和与表项相关联的内存区块的内存大小。
在步骤604,将经配置的设备区块表写入设备区块表模块或者设备内存。设备区块表模块设置在设备的***总线的入口处,例如,设备区块表模块与设备总线接口相连。设备区块表模块配置在设备的***总线的入口处,例如与设备总线接口相邻,由此可以设置在设备的***总线的最前端。
在步骤606,基于至少部分表项所分别指示的UMA类型,配置设备内存中与对应表项相关联的内存区块,以用于基于设备区块表中对应表项所指示的UMA类型访问设备内存。
例如,基于表项所分别指示的UMA类型、内存区间(sections)的数量,分别计算用于指示表项所对应内存区块的交织特征的UMA地址;基于所计算的UMA地址、交织粒度和内存区块的粒度,重新排布内存区块的地址位(例如,将UMA地址挪至section地址的目标区段)。关于基于UMA地址重新排布存储器地址的方式,步骤208给出了具体的说明和示例,在此,不再赘述。
例如,设备驱动程序基于设备区块表所包括的表项数量和各个表项所指示的UMA类型将设备内存配置为具有2n个内存区块的区块内存池,n指示设备区块表的表项数量。如图7所示,图7的左侧部分示意基于多种UMA类型配置的内存区块池。内存区块池中的内存区块720的UMA类型例如是UMA模式(或者称“UMA_ALL模式”)。内存区块722的UMA类型例如是NUMA模式。内存区块724的UMA类型例如是UMA_2模式。内存区块池所包括的内存区块可以具有不同的UMA类型,不同内存区块的地址排序方式是不同的,藉此,内存区块池可以不按照同一种方式进行地址分配,以便适应不同计算任务所需的差异化的数据存储方式;但是映射至CPU端的地址是线性连续的,如图7的所示,从箭头730的起始端所指示的存储单元至箭头732的起始端所指示的存储单元的地址映射到CPU端的64位的***总线地址(64 bitPCIe Addr)是线性连续的。由此,有利于CPU便捷地访问兼具多种不同UMA特性的设备内存。
通过采用上述技术手段,本发明的设备内存的管理方式不仅可以利用不同的UMA特性适应于不同类型计算任务差异化的数据存储需求,而且便于CPU可以便捷地访问兼具多种不同UMA特性的设备内存。
在一个或多个示例性设计中,可以用硬件、软件、固件或它们的任意组合来实现本发明所述的功能。例如,如果用软件来实现,则可以将所述功能作为一个或多个指令或代码存储在计算机可读介质上,或者作为计算机可读介质上的一个或多个指令或代码来传输。
本文公开的计算***的各个组成部分可以使用分立硬件组件来实现,也可以集成地实现在一个硬件组件上。例如,可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或者晶体管逻辑、分立硬件组件或用于执行本文所述的功能的任意组合来实现或执行结合本发明所描述的各种示例性的逻辑块、模块和电路。
本领域普通技术人员还应当理解,结合本发明的实施例描述的各种示例性的逻辑块、模块、电路和算法步骤可以实现成电子硬件、计算机软件或二者的组合。
本发明的以上描述用于使本领域的任何普通技术人员能够实现或使用本发明。对于本领域普通技术人员来说,本发明的各种修改都是显而易见的,并且本文定义的一般性原理也可以在不脱离本发明的精神和保护范围的情况下应用于其它变形。因此,本发明并不限于本文所述的实例和设计,而是与本文公开的原理和新颖性特性的最广范围相一致。