具体实施方式
下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。
如前文所描述,在传统的用于访问图形处理器的内存的方案中,CPU通过GPU PCIe总线的地址空间访问GPU的内存。例如,以4GB GPU内存访问寻址为例。如果GPU PCIe 总线的内存基址寄存器(memory bar)的尺寸为4GB,4GB的GPU在CPU地址空间的地址为:[GPU_MEM_BAR, GPU_MEM_BAR + 0x0_FFFFFFFF ]。4GB的 GPU在GPU地址空间的地址为:[ GPU_internal_base, GPU_internal_base + 0x0_FFFFFFFF ]。如果CPU所访问的GPU内存地址为X,内存地址的偏移量为X - GPU_MEM_BAR,则GPU的实际物理地址Z例如根据如下公式(1)加以计算:
Z=X - GPU_MEM_BAR + GPU_internal_base (1)
在上述公式(1)中,Z代表经转换的所访问的GPU的实际物理地址。GPU_MEM_BAR 代表GPU PCIe基址寄存器的基地址。GPU_internal_base代表GPU 内部基地址。X代表CPU所访问的GPU内存地址。由此可见,传统的用于访问图形处理器的内存的方案适用于GPU内存的地址是线性连续的情形,并且仅能支持针对某一种内存格式GPU的访问,其他的内存格式或者多种不同格式的GPU将无法被访问。
应当理解,GPU内存具有多种格式,一些格式的GPU内存的地址配置方式并非是线性的。以下结合图1说明不同GPU内存格式的地址配置方式。例如,CPU所访问的GPU可以配置有16个内存区段。每一个内存区段例如是512字节的隔行(interleave)尺寸。
再例如,GPU的16个内存区段例如是由4个UMA_4组成的。0到8GB字节的地址编码例如由第一UMA_4进行配置;8GB到16GB字节的地址编码例如由第二UMA_4进行配置;16GB到24GB字节的地址编码例如由第三UMA_4进行配置;24GB到32GB字节的地址编码例如由第四UMA_4进行配置。图1示意性示出了NUMA格式和UMA格式的GPU内存的地址配置方式示意图。如图1所示,标记110指示的是1个UMA_4_512格式的GPU内存,即配置有4个内存区段,每个内存区段的隔行字节个数为512字节的UMA格式的GPU内存。UMA_4_512的地址配置方式如图1所示,4个内存区段,即第一内存区段CORE0、第二内存区段CORE1、第三内存区段CORE2、第四内存区段CORE3的内存地址的配置方式包括:如箭头112所示,从第一内存区段至第四内存区段连续进行地址编码,直到达到换行地址。然后,如箭头114所示,再从第一内存区段至第四内存区段连续进行地址编码,直到达到下一换行地址。
如图1所示,标记130指示的是4个NUMA_1_512,即配置有4个内存区段,每个内存区段的隔行字节个数为512字节的NUMA格式的GPU。
NUMA_4_512的地址配置方式如图1所示,对于第一内存区段按照箭头132所示方式自左向右进行地址编码,直到达到换行地址。然后,如箭头134所示,再从第一内存区段的下一行自左向右进行地址编码直到达到下一换行地址,如此往复,直至达到第一内存区段的最大地址编码。之后,从第二内存区段按照箭头136所示方式自左向右进行地址编码,直到达到换行地址。然后,如箭头138所示,再从第二内存区段的第二行自左向右进行地址编码直到达到下一换行地址,如此往复,直至达到第二内存区段的最大地址编码。显然,传统的用于访问图形处理器的内存的方案无法同时支持图1所示的UMA_4_512和NUMA_4_512格式的GPU内存的内存访问。
图2示出了NUMA和UMA混合格式的GPU内存的地址配置方式示意图。如图2所示,标记210所指示的UMA从第一内存区段CORE0至第八内存区段CORE7连续进行地址编码。标记220所指示的UMA-N从第五内存区段CORE4至第八内存区段CORE7连续进行地址编码。标记230所指示的NUMA的第二内存区段CORE1和第三内存区段CORE2各自进行地址编码。显然,传统的用于访问图形处理器的内存的方案也无法支持图2所示的NUMA和UMA混合格式的GPU的内存访问。
因此,传统的用于访问图形处理器的内存的方案只能选择其中一种格式的GPU内存来寻址,不能支持对多种格式GPU内存的寻址。应当理解,本公开的图形处理器包括但不限于通用图形处理器(GPGPU,General Purpose GPU)。
为了至少部分地解决上述问题以及其他潜在问题中的一个或者多个,本公开的示例实施例提出了一种用于访问图形处理器的内存的方法、计算设备、计算系统和计算机可读存储介质。在本公开方法中:通过解析基址寄存器的扩展位来确定待访问GPU的格式,然后利用所确定的内存的格式和访问命令中所指示的内存地址偏移数据来计算目标地址偏移量;以及目标图形处理器的内存的基地址和所计算的目标地址偏移量,寻址至目标图形处理器的内存,本公开能够针对多种不同格式的GPU内存进行访问。
图3示出了用于实施根据本公开的实施例的用于访问图形处理器的内存的方法的计算系统300的示意图。
如图3所示,计算系统300包括:主机(host)310和一个或者多个总线设备330(图3中仅仅示例性示出了一个总线设备,总线设备330例如而不限于是PCIe设备)。关于主机310,其例如包括至少一个中央处理器312、总线314、系统内存(System Memory)316等。总线例如可以是高速周边组件互连(Peripheral Component Interconnect Express,PCIe)总线或者其他总线。
关于中央处理器312,其例如被配置为:发送关于总线设备中的图形处理器的访问命令,访问命令至少指示所访问目标图形处理器的内存地址偏移数据和与目标图形处理器相关联的基址寄存器的基地址。
关于总线314,其至少用于中央处理器与总线设备之间的数据交互。
关于总线设备330,其例如为计算设备。总线设备330例如包括图形处理器(GPU)332、图形处理器的一个或多个内存334、地址解析模块336和基址寄存器338(PCIe Memorybase address registers,BAR)等。每个总线设备330通过总线314接入到主机310上。地址解析模块336与基址寄存器338和图形处理器的内存334电连接。图形处理器332与图形处理器的内存334电连接。
关于图形处理器的内存334,应当理解,每个总线设备330可以配置有大量(例如16GB、32GB等)的图形处理器的内存334。图形处理器的内存334可以被图形处理器332所访问。图形处理器的内存334也可以被主机310的中央处理器312访问。但是,中央处理器312和图形处理器332之间的内存并不互相可见,即中央处理器312无法直接图形处理器的内存,图形处理器332也无法直接看到中央处理器312初始化后的数据。主机310的中央处理器312可以通过总线314、基址寄存器338来访问总线设备330中的图形处理器332及图形处理器的内存334。
关于基址寄存器,其至少配置有扩展位和对应于图形处理器的内存的地址位,扩展位存储有用于标识图形处理器的内存的格式的标识数据。基址寄存器例如位于 总线设备配置空间(configuration space)的配置头(configuration header)中,以用于提供图形处理器的内存映射的寄存器窗口和用于标识图形处理器的内存的格式。
关于基址寄存器的扩展位,其不同于基址寄存器的地址位,在一些实施例中,扩展位为高于地址位的一位或者多位。以GPU内存为4GB为例,基址寄存器可以配置有32位的数据/地址位和多个扩展位。例如,基址寄存器的第0位和第31位为数据/地址位。数据/地址位配置有图形处理器的内存对应的PCIe基地址(PCIe_BASE_Addr)。基址寄存器的第32位和第35位例如为扩展位,用于标识目标图形处理器的内存的格式。在一些实施例中,基址寄存器的第32位和第33位为扩展位。应当理解,基址寄存器所配置的扩展位不仅仅局限于第32位和第35位中的部分或者全部,扩展位也可以是数据/地址位之外的一位或多位。
关于地址解析模块336,其被配置为:解析与图形处理器相关联的基址寄存器的扩展位所存储的标识数据,以便基于标识数据确定图形处理器的内存的格式;基于所确定内存的格式和内存地址偏移数据,计算目标地址偏移量;以及基于图形处理器的内存的基地址和所计算的目标地址偏移量,寻址至图形处理器的内存。
以下结合图4说明用于访问图形处理器的内存的方法400。图4示出了根据本公开的一些实施例的用于访问图形处理器的内存的方法400的流程图。应当理解,方法400例如可以在图3所描述的总线设备330处执行,也可以本公开所描述的计算设备执行。应当理解,方法400还可以包括未示出的附加组成部分、动作和/或可以省略所示出的组成部分、动作,本公开的范围在此方面不受限制。
在步骤402处,总线设备330获取关于图形处理器的访问命令,访问命令至少指示所访问目标图形处理器的内存地址偏移数据。
关于目标图形处理器的内存地址偏移数据的确定方式,其例如包括:基于所访问目标图形处理器的内存地址和与目标图形处理器相关联的基址寄存器的基地址,确定内存地址偏移数据。例如,内存地址偏移数据=所访问目标图形处理器的内存地址-GPU PCIe基址寄存器的基地址。
关于访问命令,其例如来自主机的CPU。例如,CPU发送用于访问目标图形处理器的内存的访问命令,该访问格式例如包括表达式(2)所示地址信息:
GPU_MEM_BAR + X’ (2)
在上述表达式(2)中,X’代表目标图形处理器的内存地址偏移数据。GPU_MEM_BAR代表与目标图形处理器相关联的基址寄存器的基地址。目标图形处理器的内存地址偏移数据 X’的范围例如为:[0x1_00000000, 0x1_FFFFFFFF]。
在步骤404处,总线设备330解析基址寄存器的扩展位所存储的标识数据,以便基于标识数据确定目标图形处理器的内存的格式。关于确定目标图形处理器的内存的格式的方法,其例如包括:经由地址解析模块,解析与目标图形处理器相关联的基址寄存器的扩展位所存储的标识数据,标识数据指示目标图形处理器的内存的格式,基址寄存器的扩展位不同于基址寄存器的地址位。
关于基址寄存器的扩展位,其例如为高于地址位的一位或者多位。例如,扩展位为基址寄存器的第32位至第35位中的一位或者多位。基址寄存器的扩展位的位数是由图形处理器的内存的格式的数量所确定。例如,如果图形处理器的内存的格式的数量为4种,基址寄存器的扩展位的位数为2位;如果图形处理器的内存的格式的数量为8种,基址寄存器的扩展位的位数为3位;如果图形处理器的内存的格式的数量为16种,基址寄存器的扩展位的位数为4位。
在一些实施例中,扩展位中的一位或多位用于标识隔行的尺寸类型,扩展位中的一位或多位用于指示目标图形处理器的内存区段的类型。例如,扩展位例如为基址寄存器的第32位至第35位中的四位。具体而言,基址寄存器的第32位至第35位中的一位(例如而不限于是第35位)的标识数据指示隔行的尺寸类型,基址寄存器的第32位至第35位中的其他三位(例如而不限于是第32位至第34位)的标识数据指示内存区段(例如,HBM段)的类型。应当理解,扩展位不一定局限于基址寄存器的第32位至第35位。事实上,扩展位可以根据具体情况可以变化。例如,如果GPU内存为4GB时,则扩展位可以从第32位开始。如果GPU内存为8GB时,则扩展位可以从第33位开始。以此类推,在此,不再赘述。
例如,如果扩展位指示的内存区段的类型为第一类型(例如,如果基址寄存器的第35位的标识数据指示“0”,其指示扩展位标识的隔行的尺寸类型为第一预设类型),确定目标图形处理器的内存的隔行的尺寸为512字节;以及如果扩展位标识的隔行的尺寸类型为第二预设类型,确定目标图形处理器的内存的隔行的尺寸为4K字节。例如,如果确定基址寄存器的第35位的标识数据指示 “1”,其指示扩展位标识的隔行的尺寸类型为第二预设类型,确定目标图形处理器的内存的隔行的尺寸为4K字节。
如果扩展位指示的内存区段的类型为第一类型,确定目标图形处理器的内存的格式为非统一内存访问格式。例如,如果确定基址寄存器的第32位至第34位的标识数据指示“0”,其例如指示内存区段的类型为第一类型,则确定目标图形处理器的内存的格式为NUMA。
如果扩展位指示的内存区段的类型为第二类型,确定目标图形处理器的内存的格式为4个内存区段的一致性内存访问格式。例如,如果确定基址寄存器的第32位至第34位的标识数据指示“1”,其例如指示内存区段的类型为第二类型,则确定目标图形处理器的内存的格式为UMA_4。
如果扩展位指示的内存区段的类型为第三类型,则确定目标图形处理器的内存的格式为8个内存区段的一致性内存访问格式。例如,如果确定基址寄存器的第32位至第34位的标识数据指示 “2”,其例如指示内存区段的类型为第三类型,则确定目标图形处理器的内存的格式为UMA_8。
如果扩展位指示的内存区段的类型为第四类型,确定目标图形处理器的内存的格式为16个内存区段的一致性内存访问格式。例如,如果确定基址寄存器的第32位至第34位的标识数据指示 “3”,其例如指示的内存区段的类型为第四类型,则确定目标图形处理器的内存的格式为UMA_16。
如果扩展位指示的内存区段的类型为第五类型,确定目标图形处理器的内存的格式为32个内存区段的一致性内存访问格式。例如,如果确定基址寄存器的第32位至第34位的标识数据指示 “4”,其例如指示内存区段的类型为第五类型,则确定目标图形处理器的内存的格式为UMA_32。
例如,以下表1示例出第32位至第35位的标识数据所标识的图形处理器的内存格式。
表1
例如,步骤404处经由地址解析模块,解析基址寄存器的扩展位所存储的标识数据为0001,该标识数据指示图形处理器的内存格式为UMA_4_512。
在步骤406处,总线设备330基于所确定内存的格式和内存地址偏移数据,计算目标地址偏移量。
例如,所确定的图形处理器的内存格式为UMA_4_512。应当理解,UMA_4_512包括4个内存区段,从第一内存区段至第四内存区段连续进行地址编码,直到达到换行地址。每一个换行地址间隔512*4,即2048。例如,当前访问命令所指示的目标图形处理器的内存地址偏移数据为32K,则地址解析模块基于内存地址偏移数据(例如32K),计算对应于32K的目标地址偏移量例如指向第四内存区段的第16行上的地址。
再例如,解析基址寄存器的扩展位所存储的标识数据为0003,步骤406所确定的图形处理器的内存格式为UMA_8_512。从第一内存区段至第十六内存区段连续进行地址编码,直到达到换行地址。每一个换行地址间隔512*8,即4096。则地址解析模块基于内存地址偏移数据(例如32K),计算的目标地址偏移量例如指向第十六内存区段的第8行上的地址。
在步骤408处,总线设备330基于目标图形处理器的内存的基地址和所计算的目标地址偏移量,寻址至目标图形处理器的内存。
例如,地址解析模块发出关于目标图形处理器的内存的实际物理地址的目标访问命令,该目标访问命令例如指示如下表达式(3)所示的地址信息:
GPU_internal_base + Y (3)
在上述表达式(3)中,Y代表步骤406处所计算的目标地址偏移量。GPU_internal_base代表目标图形处理器的内存的基地址。
在上述方案中,通过解析基址寄存器的扩展位所存储的表示数据来确定待访问的GPU的内存格式,然后利用所确定的内存的格式和访问命令中所指示的内存地址偏移数据来计算目标地址偏移量;以及基于目标图形处理器的内存的基地址和所计算的目标地址偏移量,访问目标图形处理器的内存,本公开能够针对多种不同格式的GPU内存进行访问。
在一些实施例中,方法400还包括用于配置基址寄存器的方法500。以下结合图5说明用于配置基址寄存器的方法500。图5示出了根据本公开的一些实施例的用于配置基址寄存器的方法500的流程图。应当理解,方法500例如可以在图3所描述的总线设备330处执行,也可以由本公开所描述的计算设备执行。应当理解,方法500还可以包括未示出的附加组成部分、动作和/或可以省略所示出的组成部分、动作,本公开的范围在此方面不受限制。
在步骤502处,基于总线设备所配置的图形处理器的内存的格式的数量,确定基址寄存器的扩展位的位数。
在一些实施例中,通过总线设备配置图形处理器的一个或多个内存,一个或多个内存中的至少部分内存具有多种不同的格式。
关于确定基址寄存器的扩展位的位数的方法,其例如包括:如果图形处理器的内存的格式的数量为4种,基址寄存器的扩展位的位数为2位;如果图形处理器的内存的格式的数量为8种,基址寄存器的扩展位的位数为3位;如果图形处理器的内存的格式的数量为16种,基址寄存器的扩展位的位数为4位。
例如,以4GB图形处理器的内存为例,图形处理器的内存的格式可以是UMA_global_512、UMA_GLOBAL_4k、NUMA_512和NUMA_4K。上述图形处理器的内存的格式的数量为4种,基址寄存器的扩展位的位数被确定为2位。
在步骤504处,基于所确定的扩展位的位数,调整基址寄存器的地址空间,使得经调整的地址空间与总线设备所配置的图形处理器的内存相对应。
应当理解,通过总线设备配置图形处理器的一个或多个内存,一个或多个内存中的至少部分内存具有多种不同的格式。
例如,确定总线设备是否被初始化。如果确定总线设备未被初始化,继续等待以便确定总线设备是否被初始化。如果确定总线设备被初始化,基于所确定的扩展位的位数,调整基址寄存器的地址空间,使得经调整的地址空间与总线设备所配置的图形处理器的内存相对应。
例如,基址寄存器的扩展位的位数被确定为2位,则将总线设备的基址寄存器的地址空间调整为基址寄存器实际大小的4倍,以便将经调整的地址空间对应于4个图形处理器的内存。即,总线设备的基址寄存器的地址空间尺寸调整为4GB x 4 = 16GB。
在步骤506处,基于总线设备所配置的图形处理器的内存的格式,配置基址寄存器的扩展位。
关于基址寄存器的扩展位,其不同于基址寄存器的地址位,在一些实施例中,扩展位为高于地址位的一位或者多位。例如,基址寄存器的扩展位为基址寄存器的最高两位,例如为第32位至第33位。当主机中的CPU访问总线设备中的GPU内存时,总线设备中的地址解析模块(该地址解析模块例如由硬件引擎所构成)会解析基址寄存器的最高两位,并将基址寄存器的最高两位所存储的标识数据视为操作码,以便基于所确定内存的格式和内存地址偏移数据计算目标地址偏移量;以及寻址至目标图形处理器的实际物理地址。
例如,总线设备的4GB的图形处理器的在CPU地址空间的地址为:[GPU_MEM_BAR,GPU_MEM_BAR + 0x0_FFFFFFFF ]。4GB的图形处理器在GPU地址空间的地址为:[ GPU_internal_base, GPU_internal_base + 0x0_FFFFFFFF ]。例如,利用经调整的16GB基址寄存器的地址空间的第32至33位的标识数据(即,bit32,33)进行编码来标识总线设备的图形处理器的内存的格式。
例如,如果bit32,33 = b00, 4GB的图形处理器的在CPU地址空间的地址为[GPU_MEM_BAR, GPU_MEM_BAR+ 0x0_FFFFFFFF] ,标识所访问目标图形处理器的内存为UMA_global_512格式内存。
如果bit32,33 = b01, 4GB的图形处理器的在CPU地址空间的地址为[GPU_MEM_BAR+0x1_0000000, GPU_MEM_BAR+ 0x1_FFFFFFFF] , 则标识所访问目标图形处理器的内存为UMA_GLOBAL_4k格式内存。其中,地址是连续的,即,0x0_FFFFFFFF + 1 = 0x1_00000000。
如果bit32,33 = b10, 4GB的图形处理器的在CPU地址空间的地址为[GPU_MEM_BAR+0x2_0000000, GPU_MEM_BAR+ 0x2_FFFFFFFF] ,则标识所访问目标图形处理器的内存为NUMA_512格式内存。
如果bit32,33 = b11, 4GB的图形处理器的在CPU地址空间的地址为[GPU_mem_bar+0x3_00000000, GPU_mem_bar + 0x3_FFFFFFFF ] ,则标识所访问目标图形处理器的内存为NUMA_4K格式内存。
通过采用上述手段,本公开可以使总线设备进行数据交互的Host 端和其他设备(NIC)可以利用基址寄存器的不同地址段(即扩展位)来访问不同格式的GPU内存。另外,本公开还利于增加软件编程的灵活性,实现硬件加速操作等,以及增强硬件的除错(DEBUG)能力。
上文所描述的各个过程和处理,例如方法400、500,可由计算设备处执行。该计算设备例如包括:至少一个处理器(至少一个图形处理器和至少一个中央处理器);以及与至少一个处理器通信连接的存储器;其中存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行。在一些实施例中,方法400、500,可被实现为计算机软件程序,其被有形地包含于机器可读介质。在一些实施例中,计算机程序的部分或者全部可以经由ROM和/或通信单元而被载入和/或安装到计算设备上。当计算机程序被加载到RAM并由GPU和CPU执行时,可以执行上文描述的方法400、500,的一个或多个动作。
本公开可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的中央处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的中央处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。