CN109240602B - 数据存取方法 - Google Patents
数据存取方法 Download PDFInfo
- Publication number
- CN109240602B CN109240602B CN201810886838.3A CN201810886838A CN109240602B CN 109240602 B CN109240602 B CN 109240602B CN 201810886838 A CN201810886838 A CN 201810886838A CN 109240602 B CN109240602 B CN 109240602B
- Authority
- CN
- China
- Prior art keywords
- storage area
- virtual storage
- computing device
- base address
- virtual
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0662—Virtualisation aspects
- G06F3/0665—Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
Abstract
本公开提供了一种用于第一计算设备的数据存取方法,包括:在所述第一计算设备的存储区域中生成第一虚拟存储区域;将所述第一虚拟存储区域的基址发送到第二计算设备,其中:所述第一虚拟存储区域的基址用于在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域;以及所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。本公开还提供了一种用于第三计算设备的数据存取方法以及一种数据存取方法。
Description
技术领域
本公开涉及一种数据存取方法。
背景技术
开放运算语言(Open Computing Language,简称OpenCL)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DPS)等其他并行处理器,在多种领域具有广泛的发展前景。
在OpenCL设备池化管理与分配应用中,需要对OpenCL Runtime库进行远程虚拟。在OpenCL2.0中引入了共享虚拟内存(Shared Virtual Memory,简称SVM)的概念,主机(Host)和设备(Device)内核可以直接共享复杂的、包含指针的数据结构,大大提高编程灵活性,避免冗余的数据转移,例如,申请出来的缓冲(Buffer)虚拟地址在Host端与OpenCL计算设备端是一样的。但是,在操作系统,如linux或windows的远程虚拟模拟中,无法达到如此特殊的要求,例如,在两个普通的应用程序中,无法申请相同缓冲虚拟地址的内存块。
发明内容
本公开的一个方面提供了一种数据存取放方法,可以应用于第一计算设备,所述方法可以包括如下操作,首先,在所述第一计算设备的存储区域中生成第一虚拟存储区域,然后将所述第一虚拟存储区域的基址发送到第二计算设备,其中,所述第一虚拟存储区域的基址用于在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。这样就可以实现在远程虚拟模拟中,在两个普通的应用程序中申请相同缓冲虚拟地址的内存块。
可选地,所述方法还可以包括如下操作,在生成第一虚拟存储区域之前,获取生成所述第三虚拟存储区域的需求参数及参数值,相应地,所述在所述第一计算设备的存储区域中生成第一虚拟存储区域包括根据所述需求参数及参数值在所述第一计算设备的存储区域中生成第一虚拟存储区域。
可选地,在一个实施例中,所述需求参数包括以下任意一种或多种:第三计算设备生成第三虚拟存储区域的大小或者第三计算设备对内存对齐的要求,相应地,所述获取生成所述第三虚拟存储区域的需求参数及参数值包括根据所述第三计算设备的设备属性获取生成所述第三虚拟存储区域的需求参数及参数值。
可选地,在一个实施例中,所述第一虚拟存储区域通过调用开放运算语言的第一函数生成,所述第一虚拟存储区域为共享虚拟内存,在另一个实施例中,所述第一虚拟存储区域通过调用统一计算设备架构的函数生成。
本公开的另一个方面提供了一种数据存取方法,应用于第三计算机设备,所述方法可以包括如下操作,首先获取第一计算设备生成的第一虚拟存储区域的基址,然后根据所述第一虚拟存储区域的基址,在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,其中,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
可选地,所述第二计算设备和所述第三计算设备通过符合外设部件高速互联(Peripheral Component Interconnect Express,简称PCIE)标准的通道相连,所述第三计算设备为PCIE设备。
可选地,在一个实施例中,所述第二虚拟存储区域和所述第三虚拟存储区域通过调用开放运算语言的第二函数生成,所述第二虚拟存储区域和所述第三虚拟存储区域为共享虚拟内存,在另一个实施例中,所述第二虚拟存储区域和所述第三虚拟存储区域通过调用统一计算设备架构的函数生成。
可选地,所述第二函数包括PCIE设备内存基址指定参数;所述第二函数利用所述PCIE设备内存基址指定参数指定所述第三虚拟存储区域的基址与所述第一虚拟存储区域的基址相同,并返回所述第二虚拟存储区域的基址。
本公开的另一个方面提供了一种数据存取方法,该方法可以包括如下操作,首先,在第一计算设备的存储区域中生成第一虚拟存储区域,然后,将所述第一虚拟存储区域的基址发送到第二计算设备,接着,根据所述第一虚拟存储区域的基址,在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,其中,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
可选地,在一个实施例中,所述第一计算设备给所述第二计算设备发送所述第三虚拟存储区域中地址对应的数据请求,所述第二计算设备响应于接收到所述数据请求,通过映射函数和/或解除映射函数得到所述数据请求对应的数据,接着,所述第二计算设备将所述数据请求对应的数据发送给所述第一计算设备。
本公开的另一个方面提供了一种数据存取装置,该数据存取装置可以包括第一虚拟存储区域生成模块和基址发送模块,其中,所述第一虚拟存储区域生成模块用于在所述第一计算设备的存储区域中生成第一虚拟存储区域,所述基址发送模块用于将所述第一虚拟存储区域的基址发送到第二计算设备,所述第一虚拟存储区域的基址用于在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
可选地,所述数据存取装置还可以包括参数获取模块,该参数获取模块用于在生成第一虚拟存储区域之前,获取生成所述第三虚拟存储区域的需求参数及参数值,相应地,所述第一虚拟存储区域生成模块具体用于根据所述需求参数及参数值在所述第一计算设备的存储区域中生成第一虚拟存储区域。
可选地,所述需求参数可以包括以下任意一种或多种:第三计算设备生成第三虚拟存储区域的大小或者第三计算设备对内存对齐的要求,相应地,所述参数获取模块具体用于根据所述第三计算设备的设备属性获取生成所述第三虚拟存储区域的需求参数及参数值。
可选地,在一个实施例中,所述第一虚拟存储区域通过调用开放运算语言的第一函数生成,所述第一虚拟存储区域为共享虚拟内存,在另一个实施例中,所述第一虚拟存储区域通过调用统一计算设备架构的函数生成。
本公开的另一个方面提供了一种数据存取装置,该数据存取装置可以包括第一基址获取模块、第二虚拟存储区域生成模块和第三虚拟存储区域生成模块,其中,所述第一基址获取模块用于获取第一计算设备生成的第一虚拟存储区域的基址,所述第二虚拟存储区域生成模块用于根据所述第一虚拟存储区域的基址,在所述第二计算设备的存储区域中生成第二虚拟存储区域,所述第三虚拟存储区域生成模块用于根据所述第一虚拟存储区域的基址,在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
可选地,在一个实施例中,所述第二计算设备和所述第三计算设备通过符合PCIE标准的通道相连,所述第三计算设备为PCIE设备。
可选地,在一个实施例中,所述第二虚拟存储区域生成模块和所述第三虚拟存储区域生成模块可以通过调用开放运算语言的第二函数生成所述第二虚拟存储区域和所述第三虚拟存储区域,所述第二虚拟存储区域和所述第三虚拟存储区域为共享虚拟内存,在另一个实施例中,所述第二虚拟存储区域生成模块和所述第三虚拟存储区域生成模块可以通过调用统一计算设备架构的函数生成所述第二虚拟存储区域和所述第三虚拟存储区域。
可选地,所述第二函数可以包括PCIE设备内存基址指定参数,所述第二函数利用所述PCIE设备内存基址指定参数指定所述第三虚拟存储区域的基址与所述第一虚拟存储区域的基址相同,并返回所述第二虚拟存储区域的基址。
本公开的另一个方面提供了一种数据存取系统,该数据存取系统可以包括第一虚拟存储区域生成单元、发送单元、第二虚拟存储区域生成单元和第三虚拟存储区域生成单元,其中,所述第一虚拟存储区域生成单元用于在第一计算设备的存储区域中生成第一虚拟存储区域,所述发送单元用于将所述第一虚拟存储区域的基址发送到第二计算设备,所述第二虚拟存储区域生成单元用于根据所述第一虚拟存储区域的基址,在所述第二计算设备的存储区域中生成第二虚拟存储区域,所述第三虚拟存储区域生成单元用于根据所述第一虚拟存储区域的基址,在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
可选地,所述数据存取系统还可以包括数据请求单元、数据获取单元和数据发送单元,其中,所述数据请求单元用于给所述第二计算设备发送所述第三虚拟存储区域中地址对应的数据请求,所述数据获取单元用于响应于接收到所述数据请求,通过映射函数和/或解除映射函数得到所述数据请求对应的数据,所述数据发送单元用于将所述数据请求对应的数据发送给所述第一计算设备。
本公开的另一个方面提供了一种第一计算设备,包括:一个或多个处理器,以及存储装置,用于存储可执行指令,所述可执行指令在被所述处理器执行时,实现如上所述的方法。
本公开的另一个方面提供了一种第二计算设备,包括:一个或多个处理器,以及存储装置,用于存储可执行指令,所述可执行指令在被所述处理器执行时,实现如上所述的方法。
本公开的另一个方面提供了一种第三计算设备,包括:一个或多个处理器,以及存储装置,用于存储可执行指令,所述可执行指令在被所述处理器执行时,实现如上所述的方法。
本公开的另一方面提供了一种非易失性存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
本公开的另一方面提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
附图说明
为了更完整地理解本公开及其优势,现在将参考结合附图的以下描述,其中:
图1示意性示出了根据本公开实施例的数据存取方法的应用场景;
图2A示意性示出了根据本公开实施例的适用于第一计算设备的数据存取方法的一种流程图;
图2B示意性示出了根据本公开实施例的虚拟存储区域的示意图;
图3A示意性示出了根据本公开实施例的适用于第二计算设备的数据存取方法的一种流程图;
图3B示意性示出了根据本公开实施例的第二计算设备和第三计算设备的连接示意图;
图4示意性示出了根据本公开实施例的数据存取方法的一种流程图;
图5A示意性示出了根据本公开实施例的数据存取装置的一种框图;
图5B示意性示出了根据本公开另一实施例的数据存取装置的一种框图;
图5C示意性示出了根据本公开实施例的数据存取系统的一种框图;
图5D示意性示出了根据本公开实施例的数据存取系统的一种示意图;
图6示意性示出了根据本公开实施例的计算设备的框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。本领域技术人员还应理解,实质上任意表示两个或更多可选项目的转折连词和/或短语,无论是在说明书、权利要求书还是附图中,都应被理解为给出了包括这些项目之一、这些项目任一方、或两个项目的可能性。例如,短语“A或B”应当被理解为包括“A”或“B”、或“A和B”的可能性。
附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。
因此,本公开的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。另外,本公开的技术可以采取存储有指令的计算机可读介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。在本公开的上下文中,计算机可读介质可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,计算机可读介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。计算机可读介质的具体示例包括:磁存储装置,如磁带或硬盘(HDD);光存储装置,如光盘(CD-ROM);存储器,如随机存取存储器(RAM)或闪存;和/或有线/无线通信链路。
本公开的实施例提供了一种数据存取方法,可以应用于第一计算设备,所述方法包括第一虚拟存储区域生成过程和基址发送过程。在第一虚拟存储区域生成过程中,在所述第一计算设备的存储区域中生成第一虚拟存储区域,这样可以得到第一虚拟存储区域的基址。在生成第一虚拟存储区域之后,进入基址发送过程,将所述第一虚拟存储区域的基址发送到第二计算设备,其中,所述第一虚拟存储区域的基址用于在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。此外,本公开的实施例还提供了一种数据存取方法,应用于第三计算机设备,所述方法可以包括基址接收过程和虚拟存储区域生成过程。在基址接收过程,获取第一计算设备生成的第一虚拟存储区域的基址,这样可以得到第一计算设备生成的第一虚拟存储区域的基址,然后在虚拟存储区域生成过程中,根据所述第一虚拟存储区域的基址,在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,其中,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。另外,本公开的实施例还提供了一种数据存取方法,该方法可以包括第一虚拟存储区域生成过程、基址发送过程和虚拟存储区域生成过程,其中,在第一虚拟存储区域生成过程中,在第一计算设备的存储区域中生成第一虚拟存储区域,在基址发送过程中,将所述第一虚拟存储区域的基址发送到第二计算设备,在虚拟存储区域生成过程,根据所述第一虚拟存储区域的基址,在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。本公开的实施例在共享虚拟内存的基础上,增加指定设备内存基址的功能,借此实现设备内存块地址与客户端虚拟地址相同,即所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址,来满足在远程虚拟模拟中(如linux/windows),现有技术无法达到在两个普通的应用程序中申请相同基址的内存块的需求。
图1示意性示出了根据本公开实施例的数据存取方法的应用场景。需要注意的是,图1所示仅为可以应用本公开实施例的场景的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,根据该实施例的系统架构100可以包括第一计算设备101、102、103,网络104,第二计算设备105和第三计算设备106、107。网络104用以在第一计算设备101、102、103和第二计算设备105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用第一计算设备101、102、103通过网络104与第二计算设备105交互,以接收或发送信息等。第一计算设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
第一计算设备101、102、103可以是具有显示屏并且支持一种或多种APP的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
第二计算设备105可以是提供各种服务的计算设备,例如对用户利用第一计算设备101、102、103所浏览的网站、所运行的应用APP等提供支持的服务器,如后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析、处理等,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给第一计算设备101、102、103。第三计算设备106、107可以为提供计算能力的计算设备,如图形处理设备提供图形运算结果等,第二计算设备105和第三计算设备106、107之间可以通过总线等相连来提升数据传输能力,例如,通过外设部件高速互联(Peripheral Component InterconnectExpress,简称PCIE)总线相连等。
需要说明的是,本公开实施例所提供的数据存取方法一般可以由第一计算设备101、102、103和/或第二计算设备105执行,也可以由第一计算设备101、102、103、第二计算设备105和/或第三计算设备106、107执行。相应地,本公开实施例所提供的数据存取装置一般可以设置于第一计算设备101、102、103和/或第二计算设备105中,也可以设置于第一计算设备101、102、103、第二计算设备105和/或第三计算设备106、107中。本公开实施例所提供的数据存取方法也可以由不同于第二计算设备105且能够与第一计算设备101、102、103和第三计算设备106、107通信的服务器或服务器集群执行。相应地,本公开实施例所提供的数据存取装置也可以设置于不同于第二计算设备105且能够与第一计算设备101、102、103和第三计算设备106、107通信的服务器或服务器集群中。
应该理解,图1中的第一计算设备101、102、103、网络104、第二计算设备105和第三计算设备106、107的数目仅仅是示意性的。根据实现需要,可以具有任意数目的第一计算设备101、102、103、网络104、第二计算设备105和第三计算设备106、107。
图2A示意性示出了根据本公开实施例的适用于第一计算设备的数据存取方法的一种流程图。
如图2A所示,该方法可以包括操作S201~S202。
在操作S201中,在所述第一计算设备的存储区域中生成第一虚拟存储区域。
在本实施例中,第一虚拟存储区域实际上是一种逻辑存储区域,实质是对物理存储设备进行逻辑化的处理。从统一计算设备架构(Computer Unified DeviceArchitecture,简称CUDA)的CUDA6以后,如图形处理器(GPU)与中央处理器(CPU)之间支持统一寻址(Unified Memory)。OpenCL2.0中,引入了共享虚拟内存(Shared VirtualMemory,简称SVM),使得如GPU和CPU之间可以直接访问彼此的地址空间,可以处理链表数据等,而避免了人为的数据拷贝。以下以OpenCL为例进行说明。
对于SVM的创建,可以采用如下两种方式,一种是缓冲分配(buffer allocation),另一种是系统分配(System allocation)。本公开中主要针对缓冲分配,例如,可以使用OpenCL API函数clSVMAlloc来进行分配,然后使用clSetKernelArgSVMPionter把分配的SVM作为内核参数传入。对于SVM类型可以分为两种类型,一种是粗粒度(Coarse-grained),另一种是细粒度(fine-grained),本公开主要针对粗粒度SVM。该粗粒度SVM指的是共享发生在OpenCL缓冲内存对象区域粒度,在同步点强制内存一致性,使用映射map/解除映射unmap命令来更新主机与设备间的数据。粗粒度的SVM与OpenCL1.2中使用缓冲对象类似,但是在OpenCL2.0中的设备与主机之间不需要来回拷贝数据,设备与主机之间可以直接访问对方的数据。在本实施例中,该第一虚拟存储区域优选为粗粒度缓冲(Coarse-grainedBuffer)SVM。
在另一个实施例中,所述方法还可以包括操作S203。
在操作S203中,在生成第一虚拟存储区域之前,获取生成所述第三虚拟存储区域的需求参数及参数值。
在本实施例中,例如,由于第一计算设备通过互联网与所第二计算设备,所述第二计算设备与所述第三计算设备相连,或者第一计算设备通过互联网与所述第二计算设备和第三计算设备相连,而第三计算设备中可以存储有所述第三虚拟存储区域的需求参数及参数值,例如,第三计算设备中由厂商固化的所述第三虚拟存储区域的需求参数及参数值,这样使得所述第一计算设备可以通过网络得到所述第三虚拟存储区域的需求参数及参数值,当然,也可以通过移动存储介质等进行第三虚拟存储区域的需求参数及参数值的传递,还可以是通过第三计算设备的厂商或厂商的服务平台等得到第三虚拟存储区域的需求参数及参数值,在此不做限定。
相应地,所述在所述第一计算设备的存储区域中生成第一虚拟存储区域包括根据所述需求参数及参数值在所述第一计算设备的存储区域中生成第一虚拟存储区域。
在一个具体实施例中,所述需求参数可以包括以下任意一种或多种:第三计算设备生成第三虚拟存储区域的大小或者第三计算设备对内存对齐(alignment)的要求。相应地,所述获取生成所述第三虚拟存储区域的需求参数及参数值包括根据所述第三计算设备的设备属性(device property)获取生成所述第三虚拟存储区域的需求参数及参数值。
所述第一虚拟存储区域通过调用开放运算语言的第一函数生成,所述第一虚拟存储区域为共享虚拟内存。该第一函数可以如下所示。
void*clSVMAlloc(cl_context context,
cl_svm_mem_flags flags,
cl_uint alignment)
其中,该第一函数返回本地内存地址pF,cl_context context表示缓存区所属的上下文,用来创建缓存对象。flags是位域,用来表明如何分配以及怎样使用所分配的缓存对象,如果flags为0,则使用缺省值。cl_uint alignment表示内存块对齐要求。对齐要求和数据在内存中的位置有关,为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有某些特性,比如4字节的int型,它的起始地址应该位于4字节的边界上,即起始地址能够被4整除。如果一个变量的内存地址正好位于它长度的整数倍,则为自然对齐。对于标准数据类型,它的地址只要是它的长度的整数倍即可;对于数组,按照基本数据类型对齐,第一个对齐了后面的自然也就对齐了;对于联合,按其包含的长度最大的数据类型对齐;对于结构体,结构体中每个数据类型都要对齐。对于32位机来说,4字节对齐能够使CPU访问速度提高,比如说一个long类型的变量,如果跨越了4字节边界存储,那么CPU要读取两次,这样效率较低。但是在32位机中使用1字节或2字节对齐,反而会使变量访问速度降低,所以对齐要求需要考虑处理器类型,另外还需要考虑编译器的类型。在两个普通的应用程序中,申请相同缓冲虚拟地址的内存块的应用场景中,第一计算设备,如客户端(client)APP调用clSVMAlloc申请SVM,根据设备SVM内存对齐要求申请本地内存并返回本地内存地址pF的值。
在另一个具体实施例中,所述第一虚拟存储区域通过调用统一计算设备架构(CUDA)的函数生成,在此不再详述。
在操作S202中,将所述第一虚拟存储区域的基址发送到第二计算设备。其中,所述第一虚拟存储区域的基址用于在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,以及所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
在本实施例中,在第一计算设备生成第一虚拟存储区域之后得到该第一虚拟存储区域的基址,即起始地址,将该第一虚拟存储区域的基址发送给第二计算设备,以在第三计算设备上生成与所述第一虚拟存储区域的基址相同的第三虚拟存储区域,同时也在第二计算设备上生成第二虚拟存储区域,该第二虚拟存储区域的基址可以与第三虚拟存储区域的基址不同。第二虚拟存储区域和第三虚拟存储区域共同构成共享虚拟内存。
具体地,第二虚拟存储区域和第三虚拟存储区域同样是一种逻辑存储区域,实质是对物理存储设备进行逻辑化的处理。第二虚拟存储区域和第三虚拟存储区域的生成方式可以同第一虚拟存储区域的生成方式,例如,通过调用开放运算语言的函数生成或者调用统一计算设备架构的函数生成,以OpenCL为例进行说明,生成的第二虚拟存储区域和第三虚拟存储区域为粗粒度缓冲SVM,其中,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。由于需要指定所述第三虚拟存储区域的基址,所调用的OpenCL的函数不同于上述第一函数,其中,需要增加参数device_ptr用于指定第三计算设备的内存块的基址,此外,由于第一函数中已经考虑内存块对齐要求,使得第一函数返回的第一虚拟存储区域的基址满足对齐要求,因此,第二函数中无需再包括内存块对齐要求。
图2B示意性示出了根据本公开实施例的虚拟存储区域的示意图。
如图2B所示,第一虚拟存储区域的基址为pF,第二虚拟存储区域的基址为pB,第三虚拟存储区域的基址为pD,其中,pF与pD的值相同,pB的值可以与pF、pD的值不同。
本公开提供的数据存取方法,在共享虚拟内存的基础上,增加指定设定内存基址的功能,借此实现设备内内存块地址与客户端虚拟地址相同,即所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址,来满足在远程虚拟模拟中(如linux/windows),现有技术无法达到在两个普通的应用程序中申请相同基址的内存块的需求。
图3A示意性示出了根据本公开实施例的适用于第二计算设备的数据存取方法的一种流程图。
如图3A所示,该方法可以包括操作S301~S302。
在操作S301中,获取第一计算设备生成的第一虚拟存储区域的基址。在本实施例中,可以接收第一计算设备生成第一虚拟存储区域后发送的第一虚拟存储区域的基址。
在操作S302中,根据所述第一虚拟存储区域的基址,在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,其中,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
图3B示意性示出了根据本公开实施例的第二计算设备和第三计算设备的连接示意图。在一个实施例中,如图3B所示,位于上方的设备为第三计算设备,位于下方的设备为第二计算设备,所述第二计算设备和所述第三计算设备通过符合PCIE标准的通道相连,所述第三计算设备为PCIE设备。例如,该第二计算设备可以为包括CPU的计算设备,第三计算设备可以为需要整合的一种或多种处理器,如CPU、GPU、数字信号处理器(Digital SingnalProcessor,DSP)等。第三计算设备通过PCIE插卡J1-1插接在第二计算设备的PCIE插槽J1-2中。
在一个具体实施例中,以OpenCL为例进行说明,所述第二虚拟存储区域和所述第三虚拟存储区域通过调用开放运算语言的第二函数生成,所述第二虚拟存储区域和所述第三虚拟存储区域为共享虚拟内存。所述第二函数可以包括PCIE设备内存基址指定参数,所述第二函数利用所述PCIE设备内存基址指定参数指定所述第三虚拟存储区域的基址与所述第一虚拟存储区域的基址相同,并返回所述第二虚拟存储区域的基址。所述第二函数可以如下所示。
void*clSVMAllocEx(cl_context context,
cl_svm_flags flags,
void*device_ptr,
size_t size)
其中,context是OpenCL上下文,用来创建缓存对象;flags是位域,用来表明如何分配以及怎样使用所分配的缓存对象,如果flags为0,则使用缺省值;size即所要分配缓存对象的大小,单位为字节,其大小必须大于或等于size。第二函数和现有的生成虚拟存储区域的OpenCL函数相比,增加了参数device_ptr用于指定设备内内存块的基址,即指定第三虚拟存储区域的基址。此外,第二函数相较于现有的生成虚拟存储区域的OpenCL函数相比,去除了参数alignment,具体如上所述,第一函数中已经具有参数alignment,因此,第一参数给出的基址已满足对齐要求,因此,第二函数中无需参数alignment。该第二函数可以由第三计算设备的厂商实现。
在另一个实施例中,所述第二虚拟存储区域和所述第三虚拟存储区域通过调用统一计算设备架构的函数生成,在此不再详述。
在两个普通的应用程序中,申请相同缓冲虚拟地址的内存块的应用场景中,以OpenCL为例进行说明,第二计算设备如主机端(Host)通过调用第二函数clSVMAllocEx申请第三计算设备,如设备端(Device)的第三虚拟存储区域的基址为pF的SVM,即指定pD的值与pF的值相同,第二函数clSVMAllocEx返回第二虚拟存储区域的基址pB。第一虚拟存储区域与第三虚拟存储区域的内存同步点同第二函数申请的SVM中Host与Device同步点,如映射Map/解除映射Unmap等。
本公开提供的数据存取方法,过调用第二函数clSVMAllocEx申请第三计算设备的第三虚拟存储区域的基址为pF的SVM,这样就使得在远程虚拟模拟中,在两个普通的应用程序中申请相同基址的内存块,满足了用户的特殊需求,可以提高数据存取效率。
图4示意性示出了根据本公开实施例的数据存取方法的一种流程图。
如图4所示,该数据存取方法可以包括操作S401~操作S403。
在操作S401中,在第一计算设备的存储区域中生成第一虚拟存储区域。
在操作S402中,将所述第一虚拟存储区域的基址发送到第二计算设备。
在操作S403中,根据所述第一虚拟存储区域的基址,在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,其中,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
需要说明的是,以OpenCL为例,本实施例公开的数据存取方法不仅支持上述第一函数和第二函数,还可以直接支持或另增函数支持OpenCL的其它函数,例如还可以支持如下所示的函数。
clEnqueueSVMMap
clEnqueueSVMUnmap
clEnqueueMapBuffer
clEnqueueUnmapMemObject
其中,clEnqueueSVMMap为主机端通过该函数来进行SVM缓冲区与指针的映射。clEnqueueSVMUnmap为主机端通过该函数来解除SVM缓冲区映射。clEnqueueMapBuffer为通过该函数进行传输数据,对于已经通过malloc和mmap分配空间的buffer,传输开销除了网络连接(interconnect)传输外,还包括一个memcpy过程,该过程把buffer拷贝进mappeddevice buffer。clEnqueueUnmapMemObject,为传输数据后解除映射,由于buffer被映射成只读的,没有实际数据传输,所以解除映射的成本很低。
在另一个实施例中,可以通过如下操作S404~S406进行数据存取。
在操作S404中,所述第一计算设备给所述第二计算设备发送所述第三虚拟存储区域中地址对应的数据请求。
在操作S405中,所述第二计算设备响应于接收到所述数据请求,通过映射函数和/或解除映射函数得到所述数据请求对应的数据。
在操作S406中,所述第二计算设备将所述数据请求对应的数据发送给所述第一计算设备。
在一个具体实施例中,第二计算设备给第三计算设备发送数据时,第二计算设备采用clEnqueueMapBuffer函数进行映射,由于缓冲被映射为只写write-only,所以没有数据从第二计算设备传输到第三计算设备,映射开销较小。一个指向pinned host buffer的指针被返回。然后,第二计算设备通过memset(ptr,srcptr)或者fread(ptr)或者直接CPU写入。接着,clEnqueueUnmapMemObject解除映射。第三计算设备给第二计算设备发送数据时,clEnqueueMapBuffer函数启动第三计算设备到第二计算设备数据传输,数据传输到一个pre-pinned的临时缓冲中。返回一个指向pinned memory的指针。第二计算设备读数据或者处理数据或者执行mempcy、fwrite等类似的函数。接着,clEnqueueUnmapMemObject解除映射。由于buffer被映射成只读的,没有实际数据传输,所有解除映射操作的成本较低。
本公开提供的数据存取方法,在两个普通的应用程序中申请相同基址的内存块,避免了一些不必要的数据拷贝过程,而是通过映射/解除映射操作实现数据传输,可以提高数据存取效率。
图5A示意性示出了根据本公开实施例的数据存取装置的一种框图。
如图5A所示,本公开的另一个方面提供了一种数据存取装置500,该数据存取装置500可以包括第一虚拟存储区域生成模块501和基址发送模块502,其中,所述第一虚拟存储区域生成模块501用于在所述第一计算设备的存储区域中生成第一虚拟存储区域,所述基址发送模块502用于将所述第一虚拟存储区域的基址发送到第二计算设备,所述第一虚拟存储区域的基址用于在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
在一个实施例中,所述数据存取装置500还可以包括参数获取模块503,该参数获取模块503用于在生成第一虚拟存储区域之前,获取生成所述第三虚拟存储区域的需求参数及参数值,相应地,所述第一虚拟存储区域生成模块501具体用于根据所述需求参数及参数值在所述第一计算设备的存储区域中生成第一虚拟存储区域。
其中,所述需求参数可以包括以下任意一种或多种:第三计算设备生成第三虚拟存储区域的大小或者第三计算设备对内存对齐的要求,相应地,所述参数获取模块503具体用于根据所述第三计算设备的设备属性获取生成所述第三虚拟存储区域的需求参数及参数值。
优选地,所述第一虚拟存储区域通过调用开放运算语言的第一函数生成,所述第一虚拟存储区域为共享虚拟内存,在另一个实施例中,所述第一虚拟存储区域通过调用统一计算设备架构的函数生成。
图5B示意性示出了根据本公开另一实施例的数据存取装置的一种框图。
如图5B所示,本公开的另一个方面提供了一种数据存取装置400,该数据存取装置400可以包括第一基址获取模块504、第二虚拟存储区域生成模块505和第三虚拟存储区域生成模块506,其中,所述第一基址获取模块504用于获取第一计算设备生成的第一虚拟存储区域的基址,所述第二虚拟存储区域生成模块505用于根据所述第一虚拟存储区域的基址,在所述第二计算设备的存储区域中生成第二虚拟存储区域,所述第三虚拟存储区域生成模块506用于根据所述第一虚拟存储区域的基址,在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
在一个实施例中,所述第二计算设备和所述第三计算设备通过符合PCIE标准的通道相连,所述第三计算设备为PCIE设备。
在另一个实施例中,所述第二虚拟存储区域生成模块505和所述第三虚拟存储区域生成模块506可以通过调用开放运算语言的第二函数生成所述第二虚拟存储区域和所述第三虚拟存储区域,所述第二虚拟存储区域和所述第三虚拟存储区域为共享虚拟内存,在另一个实施例中,所述第二虚拟存储区域生成模块505和所述第三虚拟存储区域生成模块506可以通过调用统一计算设备架构的函数生成所述第二虚拟存储区域和所述第三虚拟存储区域。
优选地,所述第二函数可以包括PCIE设备内存基址指定参数,所述第二函数利用所述PCIE设备内存基址指定参数指定所述第三虚拟存储区域的基址与所述第一虚拟存储区域的基址相同,并返回所述第二虚拟存储区域的基址。
图5C示意性示出了根据本公开实施例的数据存取系统的一种框图。
如图5C所示,本公开的另一个方面提供了一种数据存取系统300,该数据存取系统300可以包括第一虚拟存储区域生成单元507、发送单元508、第二虚拟存储区域生成单元509和第三虚拟存储区域生成单元510,其中,所述第一虚拟存储区域生成单元507用于在第一计算设备的存储区域中生成第一虚拟存储区域,所述发送单元508用于将所述第一虚拟存储区域的基址发送到第二计算设备,所述第二虚拟存储区域生成单元509用于根据所述第一虚拟存储区域的基址,在所述第二计算设备的存储区域中生成第二虚拟存储区域,所述第三虚拟存储区域生成单元510用于根据所述第一虚拟存储区域的基址,在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域,所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
在一个实施例中,所述数据存取系统还可以包括数据请求单元、数据获取单元和数据发送单元,其中,所述数据请求单元用于给所述第二计算设备发送所述第三虚拟存储区域中地址对应的数据请求,所述数据获取单元用于响应于接收到所述数据请求,通过映射函数和/或解除映射函数得到所述数据请求对应的数据,所述数据发送单元用于将所述数据请求对应的数据发送给所述第一计算设备。
图5D示意性示出了根据本公开实施例的数据存取系统的一种示意图。
如图5D所示,客户端的APP通过调用clSVMAlloc申请SVM,libRocl.so(库)根据设备SVM内存对齐要求申请客户端本地内存并返回本地第一虚拟存储区域的基址pF的值,将该第一虚拟存储区域的基址的值通过网络发送给主机端的端伺服器,主机端中可以具有设备厂商实现的libOpenCL.so(库),主机端可以通过clSVMAllocEx申请设备端的第三虚拟存储区域的基址pD与pF相同的SVM,这样就使得所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。clSVMAllocEx返回主机端的第二虚拟存储区域的基址pB。设备端通过PCIE通路与客户端的驱动相连。
根据本公开的实施例,数据存取系统的数据存取方法,可以参见上面的描述,这里不再重复。
根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
例如,第一虚拟存储区域生成模块501、基址发送模块502、参数获取模块503、第一基址获取模块504、第二虚拟存储区域生成模块505、第三虚拟存储区域生成模块506、第一虚拟存储区域生成单元507、发送单元508、第二虚拟存储区域生成单元509和第三虚拟存储区域生成单元510中的任意多个可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,第一虚拟存储区域生成模块501、基址发送模块502、参数获取模块503、第一基址获取模块504、第二虚拟存储区域生成模块505、第三虚拟存储区域生成模块506、第一虚拟存储区域生成单元507、发送单元508、第二虚拟存储区域生成单元509和第三虚拟存储区域生成单元510中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,第一虚拟存储区域生成模块501、基址发送模块502、参数获取模块503、第一基址获取模块504、第二虚拟存储区域生成模块505、第三虚拟存储区域生成模块506、第一虚拟存储区域生成单元507、发送单元508、第二虚拟存储区域生成单元509和第三虚拟存储区域生成单元510中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图6示意性示出了根据本公开实施例的计算设备的框图。图6示出的计算设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,所述计算设备600包括:一个或多个处理器610和计算机可读存储介质620。该计算设备可以执行根据本公开实施例的方法。
具体地,处理器610例如可以包括通用微处理器、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器610还可以包括用于缓存用途的板载存储器。处理器610可以是用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
计算机可读存储介质620,例如可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,可读存储介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。可读存储介质的具体示例包括:磁存储装置,如磁带或硬盘(HDD);光存储装置,如光盘(CD-ROM);存储器,如随机存取存储器(RAM)或闪存;和/或有线/无线通信链路。
计算机可读存储介质620可以包括程序621,该程序621可以包括代码/计算机可执行指令,其在由处理器610执行时使得处理器610执行根据本公开实施例的方法或其任何变形。
程序621可被配置为具有例如包括计算机程序模块的计算机程序代码。例如,在示例实施例中,程序621中的代码可以包括一个或多个程序模块,例如包括程序模块621A、程序模块621B、……。应当注意,程序模块的划分方式和个数并不是固定的,本领域技术人员可以根据实际情况使用合适的程序模块或程序模块组合,当这些程序模块组合被处理器610执行时,使得处理器610可以执行根据本公开实施例的方法或其任何变形。
根据本公开的实施例,处理器610可以与计算机可读存储介质620进行交互,来执行根据本公开实施例的方法或其任何变形。
根据本公开的实施例,第一虚拟存储区域生成模块501、基址发送模块502、参数获取模块503、第一基址获取模块504、第二虚拟存储区域生成模块505、第三虚拟存储区域生成模块506、第一虚拟存储区域生成单元507、发送单元508、第二虚拟存储区域生成单元509和第三虚拟存储区域生成单元510中的至少一个可以实现为参考图6描述的程序模块,其在被处理器610执行时,可以实现上面描述的相应操作。
本公开还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现如上所述的方法。
根据本公开的实施例,计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线、光缆、射频信号等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。
Claims (10)
1.一种数据存取方法,应用于第一计算设备,所述方法包括:
在所述第一计算设备的存储区域中生成第一虚拟存储区域;
将所述第一虚拟存储区域的基址发送到第二计算设备,
其中:
所述第一虚拟存储区域的基址用于在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域;以及
所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
2.根据权利要求1所述的方法,还包括:
在生成第一虚拟存储区域之前,获取生成所述第三虚拟存储区域的需求参数及参数值;
所述在所述第一计算设备的存储区域中生成第一虚拟存储区域包括根据所述需求参数及参数值在所述第一计算设备的存储区域中生成第一虚拟存储区域。
3.根据权利要求2所述的方法,其中,所述需求参数包括以下任意一种或多种:
第三计算设备生成第三虚拟存储区域的大小或者第三计算设备对内存对齐的要求;
所述获取生成所述第三虚拟存储区域的需求参数及参数值包括根据所述第三计算设备的设备属性获取生成所述第三虚拟存储区域的需求参数及参数值。
4.根据权利要求1所述的方法,其中,
所述第一虚拟存储区域通过调用开放运算语言的第一函数生成,所述第一虚拟存储区域为共享虚拟内存;或者
所述第一虚拟存储区域通过调用统一计算设备架构的函数生成。
5.一种数据存取方法,应用于第三计算机设备,所述方法包括:
获取第一计算设备生成的第一虚拟存储区域的基址;
根据所述第一虚拟存储区域的基址,在第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域;以及
所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
6.根据权利要求5所述的方法,其中,所述第二计算设备和所述第三计算设备通过符合PCIE标准的通道相连,所述第三计算设备为PCIE设备。
7.根据权利要求6所述的方法,其中,所述第二虚拟存储区域和所述第三虚拟存储区域通过调用开放运算语言的第二函数生成,所述第二虚拟存储区域和所述第三虚拟存储区域为共享虚拟内存;或者,
所述第二虚拟存储区域和所述第三虚拟存储区域通过调用统一计算设备架构的函数生成。
8.根据权利要求7所述的方法,其中,所述第二函数包括PCIE设备内存基址指定参数;
所述第二函数利用所述PCIE设备内存基址指定参数指定所述第三虚拟存储区域的基址与所述第一虚拟存储区域的基址相同,并返回所述第二虚拟存储区域的基址。
9.一种数据存取方法,包括:
在第一计算设备的存储区域中生成第一虚拟存储区域;
将所述第一虚拟存储区域的基址发送到第二计算设备;
根据所述第一虚拟存储区域的基址,在所述第二计算设备的存储区域中生成第二虚拟存储区域和在与所述第二计算设备相连的第三计算设备的存储区域中生成第三虚拟存储区域;以及
所述第一虚拟存储区域和所述第三虚拟存储区域具有相同的基址。
10.根据权利要求9所述的方法,其中,
所述第一计算设备给所述第二计算设备发送所述第三虚拟存储区域中地址对应的数据请求;
所述第二计算设备响应于接收到所述数据请求,通过映射函数和/或解除映射函数得到所述数据请求对应的数据;
所述第二计算设备将所述数据请求对应的数据发送给所述第一计算设备。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810886838.3A CN109240602B (zh) | 2018-08-06 | 2018-08-06 | 数据存取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810886838.3A CN109240602B (zh) | 2018-08-06 | 2018-08-06 | 数据存取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109240602A CN109240602A (zh) | 2019-01-18 |
CN109240602B true CN109240602B (zh) | 2021-01-15 |
Family
ID=65070941
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810886838.3A Active CN109240602B (zh) | 2018-08-06 | 2018-08-06 | 数据存取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109240602B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111552478B (zh) * | 2020-04-30 | 2024-03-22 | 上海商汤智能科技有限公司 | 用于生成cuda程序的设备、方法和存储介质 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7340489B2 (en) * | 2002-04-10 | 2008-03-04 | Emc Corporation | Virtual storage devices |
US7490191B2 (en) * | 2006-09-22 | 2009-02-10 | Intel Corporation | Sharing information between guests in a virtual machine environment |
US8769207B2 (en) * | 2008-01-16 | 2014-07-01 | Via Technologies, Inc. | Caching method and apparatus for a vertex shader and geometry shader |
US8359437B2 (en) * | 2008-05-13 | 2013-01-22 | International Business Machines Corporation | Virtual computing memory stacking |
CN104536740B (zh) * | 2010-09-24 | 2018-05-08 | 英特尔公司 | 计算平台的异质处理器之间的共享虚拟存储器中的虚函数共享 |
CN103902459B (zh) * | 2012-12-25 | 2017-07-28 | 华为技术有限公司 | 确定共享虚拟内存页面管理模式的方法和相关设备 |
US9311011B2 (en) * | 2013-08-07 | 2016-04-12 | Qualcomm Incorporated | Dynamic address negotiation for shared memory regions in heterogenous multiprocessor systems |
CN103593147B (zh) * | 2013-11-07 | 2016-08-17 | 华为技术有限公司 | 一种数据读取的方法及装置 |
CN104679486B (zh) * | 2013-11-28 | 2019-05-28 | 华为技术有限公司 | 一种图形数据的处理方法、装置及系统 |
CN105868028B (zh) * | 2015-01-23 | 2021-05-18 | 深圳市链科网络科技有限公司 | 一种进程间共享数据的方法、装置及终端 |
CN106100953B (zh) * | 2016-05-20 | 2019-10-18 | 北京百度网讯科技有限公司 | PCIe设备共享网络的生成方法、装置及系统 |
-
2018
- 2018-08-06 CN CN201810886838.3A patent/CN109240602B/zh active Active
Non-Patent Citations (1)
Title |
---|
宋平 等.一种支持细粒度并行的SDN虚拟化编程框架.《软件学报》.2014, * |
Also Published As
Publication number | Publication date |
---|---|
CN109240602A (zh) | 2019-01-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113287286B (zh) | 通过rdma进行分布式存储节点中的输入/输出处理 | |
US10248607B1 (en) | Dynamic interface port assignment for communication transaction | |
JP5765748B2 (ja) | Rdmaセマンティクスの高速記憶装置へのマッピング | |
US11048447B2 (en) | Providing direct data access between accelerators and storage in a computing environment, wherein the direct data access is independent of host CPU and the host CPU transfers object map identifying object of the data | |
CN114077480B (zh) | 一种主机与虚拟机共享内存方法、装置、设备及介质 | |
US11546431B2 (en) | Efficient and extensive function groups with multi-instance function support for cloud based processing | |
US20190007339A1 (en) | Method and device for managing stateful application on server | |
CN114625481B (zh) | 数据处理方法、装置、可读介质及电子设备 | |
US20200412788A1 (en) | Asynchronous workflow and task api for cloud based processing | |
WO2023174013A1 (zh) | 显存分配方法、装置、介质及电子设备 | |
CN114089920A (zh) | 数据存储方法、装置、可读介质及电子设备 | |
CN107800779B (zh) | 优化负载均衡的方法及系统 | |
CN109478171B (zh) | 提高openfabrics环境中的吞吐量 | |
CN116774933A (zh) | 存储设备的虚拟化处理方法、桥接设备、系统及介质 | |
CN105677491A (zh) | 一种数据传输方法及装置 | |
CN113886019A (zh) | 虚拟机创建方法、装置、系统、介质和设备 | |
US9058239B2 (en) | Hypervisor subpartition as concurrent upgrade | |
CN109240602B (zh) | 数据存取方法 | |
US9577841B2 (en) | System and method for packet encapsulation wherein translation control entries (TCEs) may redirect DMA for software defined networks | |
Shim et al. | Design and implementation of initial OpenSHMEM on PCIe NTB based cloud computing | |
CN116257320B (zh) | 一种基于dpu虚拟化配置管理方法、装置、设备及介质 | |
CN114116263A (zh) | 用于浏览器中多页签通信的系统、方法、设备及介质 | |
US20210073033A1 (en) | Memory management using coherent accelerator functionality | |
CN113032088A (zh) | 脏页记录方法、装置、电子设备及计算机可读介质 | |
US11765236B2 (en) | Efficient and extensive function groups with multi-instance function support for cloud based processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |