CN112764668A - 扩展gpu存储器的方法、电子设备和计算机程序产品 - Google Patents

扩展gpu存储器的方法、电子设备和计算机程序产品 Download PDF

Info

Publication number
CN112764668A
CN112764668A CN201911058577.7A CN201911058577A CN112764668A CN 112764668 A CN112764668 A CN 112764668A CN 201911058577 A CN201911058577 A CN 201911058577A CN 112764668 A CN112764668 A CN 112764668A
Authority
CN
China
Prior art keywords
data
memory
processing unit
graphics processing
storage device
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.)
Granted
Application number
CN201911058577.7A
Other languages
English (en)
Other versions
CN112764668B (zh
Inventor
刘福财
侯安州
贾真
胡晨曦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
EMC Corp
Original Assignee
EMC IP Holding Co LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by EMC IP Holding Co LLC filed Critical EMC IP Holding Co LLC
Priority to CN201911058577.7A priority Critical patent/CN112764668B/zh
Priority to US16/799,104 priority patent/US11055813B2/en
Publication of CN112764668A publication Critical patent/CN112764668A/zh
Application granted granted Critical
Publication of CN112764668B publication Critical patent/CN112764668B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • G06F3/0623Securing storage systems in relation to content
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/283Plural cache memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/302In image processor or graphics adapter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/311In host system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/455Image or video data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Computer Graphics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开的实施例涉及用于扩展图形处理单元的存储器的方法、电子设备和计算机程序产品。一种方法包括:从与主机耦合的图形处理单元接收该图形处理单元将要访问的数据在该图形处理单元的存储器中缺失的指示,其中该数据被存储在与主机耦合的存储设备中;响应于接收到该指示,从多个候选路径中确定用于将存储设备中的数据迁移至图形处理单元的存储器中的路径;使得该数据经由确定的路径从存储设备被迁移至图形处理单元的存储器中;以及指示图形处理单元从图形处理单元的存储器访问该数据。本公开的实施例能够利用外部存储设备来扩展图形处理单元的存储器。

Description

扩展GPU存储器的方法、电子设备和计算机程序产品
技术领域
本公开的实施例总体涉及数据存储领域,具体涉及用于扩展图形处理单元(GPU)存储器的方法、电子设备和计算机程序产品。
背景技术
当前,机器学习和深度学习被广泛应用。GPU是机器学习和深度学习领域最重要的加速器之一。然而,在许多场景下,GPU的存储器可能是不够用的,例如,在GPU多租户模式下、在深度神经网络层数较多时、或者在处理超高分辨率的图像时(CT扫描图像)。GPU的程序员不得不小心谨慎地分配和使用GPU的存储器。
发明内容
本公开的实施例提供了用于扩展GPU存储器的方法、电子设备和计算机程序产品。
在本公开的第一方面,提供了一种用于扩展GPU存储器的方法。该方法包括:从与主机耦合的图形处理单元接收该图形处理单元将要访问的数据在该图形处理单元的存储器中缺失的指示,其中该数据被存储在与主机耦合的存储设备中;响应于接收到该指示,从多个候选路径中确定用于将存储设备中的数据迁移至图形处理单元的存储器中的路径;使得该数据经由确定的路径从存储设备被迁移至图形处理单元的存储器中;以及指示图形处理单元从图形处理单元的存储器访问该数据。
在本公开的第二方面,提供了一种电子设备。该设备包括至少一个处理单元和至少一个存储器。至少一个存储器被耦合到至少一个处理单元并且存储用于由至少一个处理单元执行的指令。该指令当由至少一个处理单元执行时使得设备执行动作,动作包括:从与主机耦合的图形处理单元接收该图形处理单元将要访问的数据在该图形处理单元的存储器中缺失的指示,其中该数据被存储在与主机耦合的存储设备中;响应于接收到该指示,从多个候选路径中确定用于将存储设备中的数据迁移至图形处理单元的存储器中的路径;使得该数据经由确定的路径从存储设备被迁移至图形处理单元的存储器中;以及指示图形处理单元从图形处理单元的存储器访问该数据。
在本公开的第三方面,提供了一种计算机程序产品。该计算机程序产品被有形地存储在非瞬态计算机存储介质中并且包括机器可执行指令。该机器可执行指令在由设备执行时使该设备执行根据本公开的第一方面所描述的方法。
提供发明内容部分是为了以简化的形式来介绍对概念的选择,它们在下文的具体实施方式中将被进一步描述。发明内容部分无意标识本公开的关键特征或必要特征,也无意限制本公开的范围。
附图说明
通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施例中,相同的参考标号通常代表相同部件。
图1示出了本公开的实施例能够在其中被实施的示例系统的框图;
图2示出了根据本公开的实施例的用于扩展GPU存储器的示例过程的流程图;
图3示出了根据本公开的实施例的经由主机缓存在存储设备和GPU存储器之间迁移数据的示意图;
图4示出了根据本公开的实施例的不经由主机缓存而直接在存储设备和GPU存储器之间迁移数据的示意图;以及
图5示出了可以用来实施本公开内容的实施例的示例设备的示意性框图。
在各个附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
如上所述,机器学习和深度学习被广泛应用。GPU是机器学习和深度学习领域最重要的加速器之一。然而,在许多场景下,GPU的存储器可能是不够用的,例如,在GPU多租户模式下、在深度神经网络层数较多时、或者在处理超高分辨率的图像时(CT扫描图像)。
一些传统方案利用模型并行化来解决GPU存储器不足的问题。然而,这类方案在GPU多租户模式和处理超高分辨率图像场景下是无效的。另一些传统方案利用数据压缩和新的深度神经网络架构来解决GPU存储器不足的问题。然而,这类方案由于要求数据解压缩操作,因此会引入更大的延迟。还有一些传统方案利用统一存储器架构(即,主机和GPU共享虚拟存储器地址空间)来解决GPU存储器不足的问题。然而,这类方案往往受限于主机存储器的大小。此外,还有一些传统方案结合统一存储器架构和文件I/O来解决GPU存储器不足的问题。然而,这类方案往往具有较差的性能并且需要人工管理存储器。
本公开的实施例提出了一种用于扩展GPU存储器的方案。该方案基于统一存储器架构并且利用外部存储设备来扩展GPU存储器,外部存储设备例如为支持非易失性存储器标准(NVMe)的固态盘等。当GPU将要访问的数据不在GPU存储器中时,GPU将触发缺页故障并且该缺页故障的指示将被主机(例如,GPU驱动程序)捕获。主机可以使存储在外部存储设备中的数据经由多个候选路径之一被迁移至GPU存储器中,然后通知GPU从GPU存储器中访问该数据。以此方式,本公开的实施例能够利用外部存储设备来扩展GPU存储器,并且扩展过程对于GPU程序员而言是透明的。
以下将进一步结合附图来详细描述本公开的实施例。图1示出了本公开的实施例能够在其中被实现的示例系统100的框图。应当理解,仅出于示例性的目的描述系统100的结构,而不暗示对于本公开的范围的任何限制。
如图1所示,系统100可以包括主机110、GPU 120和存储设备130。主机110例如可以是X86架构或者任何其他架构的通用计算机,其可以包括CPU 111和至少一个存储器,例如缓存112。GPU 120可以经由外围组件快速互联(PCI-e)接口与主机110耦合。GPU 120可以包括存储管理单元(MMU)121和存储器122,其中MMU 121用于管理GPU存储器122。存储设备130也可以经由PCI-e接口与主机110耦合。存储设备130的示例包括但不限于支持非易失性存储器标准(NVMe)的固态盘(SSD)等。
CPU 111可以运行有GPU驱动程序(图1中未示出)。GPU 120例如可以运行有机器学习或深度学习的程序。当GPU 120上的程序要访问的数据不在GPU存储器122中时,MMU 121将触发GPU缺页故障,并且该缺页故障的指示可以由CPU 111上运行的GPU驱动程序捕获。GPU 120要访问的数据例如可以被存储在存储设备130中,并且在一些情况下可以被读取到主机缓存112中进行缓存。CPU 111上的驱动程序可以使得该数据经由多个候选路径之一从存储设备130或主机缓存112被迁移至GPU存储器122中。多个候选路径可以包括经由缓存112在存储设备130和GPU存储器122之间迁移数据的路径、以及直接在存储设备130和GPU存储器122之间迁移数据的路径,例如如图1中的虚线箭头所示。然后,CPU 111可以通知GPU120从其存储器122中访问该数据。
图2示出了根据本公开的实施例的用于扩展GPU存储器的示例过程200的流程图。例如,过程200可以在如图1所示的主机110处执行。以下将结合图1来描述过程200。应当理解,过程200还可以包括未示出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
如图2所示,在框210处,主机110从GPU 120接收缺页故障的指示,其中该缺页故障指示GPU 120将要访问的数据在GPU 120的存储器122中缺失。例如,GPU 120将要读取的数据在GPU 120的存储器122中缺失,或者GPU 120将要修改的某个地址的数据在GPU 120的存储器122中缺失。在一些实施例中,GPU 120将要访问的数据例如可以被存储在存储设备130中,并且在一些情况下,例如当该数据或该数据附近的数据被主机110访问时,该数据可以被读取到缓存112中进行缓存。
在框220处,响应于接收到该指示,主机110从多个候选路径中确定用于将存储设备130中的该数据迁移至GPU存储器122中的路径。
在一些实施例中,多个候选路径至少可以包括第一候选路径和第二候选路径。例如,第一候选路径可以指示经由主机缓存112在存储设备130和GPU存储器122之间进行数据迁移,而第二候选路径可以指示不经由主机缓存112而直接在存储设备130和GPU存储器122之间进行数据迁移。在本文中,第一候选路径也被称为“缓存路径”,而第二候选路径也被称为“点对点路径”或“P2P路径”。
在一些实施例中,当要访问的数据为只读数据或者只写数据时,主机110可以将第二候选路径(也即,P2P路径)选择为用于将存储设备130中的该数据迁移至GPU存储器122中的路径,从而实现更低的传输延迟。备选地,当要访问的数据为可读写的数据时,主机110可以将第一候选路径(也即,缓存路径)选择为用于将存储设备130中的该数据迁移至GPU存储器122中的路径,从而实现更高的传输带宽。
在框230处,主机110使得数据经由确定的路径从存储设备130被迁移至GPU存储器122中。然后,在框240处,响应于数据被迁移至GPU存储器122中,主机110可以指示GPU 120从GPU存储器122访问该数据。
图3示出了根据本公开的实施例的经由缓存路径在存储设备和GPU存储器之间迁移数据的示意图。
如图3所示,GPU 120中运行的程序123例如包括语句“a=in[tid]”,其意图访问由主机110和GPU 120共享的虚拟地址空间320中的虚拟地址301处的数据。当MMU 121检测到该数据在GPU存储器122中缺失时,MMU 121可以触发GPU缺页故障,并且GPU缺页故障的指示可以由主机110(例如,CPU 111上运行的GPU驱动程序)捕获。主机110可以因此执行如图3所示的过程310。在一些实施例中,过程310例如可以由CPU 111上运行的GPU驱动程序来执行。
主机110可以从GPU 120接收311GPU缺页故障的指示。响应于接收到该指示,主机110可以确定312是利用缓存路径还是P2P路径来将存储设备130中的该数据迁移至GPU存储器122中。在此假设要访问的数据为可读写的数据。如上所述,主机110可以选择缓存路径作为将存储设备130中的该数据迁移至GPU存储器122中的路径,从而实现更高的传输带宽。
响应于缓存路径被选择,主机110可以确定313缓存112中与虚拟地址301相对应的页面地址,例如,如图3所示的页面地址302。在一些实施例中,虚拟地址与主机缓存地址之间的映射关系可以是预先确定,并且由主机110维护的。主机110可以基于该映射关系来确定与虚拟地址301相对应的页面地址302。
在一些实施例中,当页面地址302处未缓存所需数据或者所缓存的数据是脏数据(即,与存储设备130中所存储的数据不一致)时,主机110可以从存储设备中的对应位置303读取(如图3中的虚线箭头P1所示)该数据并将该数据缓存在页面地址302处。附加地或备选地,在一些实施例中,当存储设备中的位置303中的数据被读取到缓存112时,该位置303附近的数据也可以被预先读取到缓存112中(如图3中的虚线箭头P1’所示),以供后续访问使用。预先读取的机制有助于提高缓存112的命中率。
然后,主机110可以确定314GPU存储器122中用于存储该数据的存储块。在一些实施例中,如图3所示,GPU存储器122可以被划分成多个存储块。主机110可以确定多个存储块中是否存在未使用的存储块。如果存在未使用的存储块(例如,存储块304),主机110可以将该未使用的存储块确定为将要用于存储该数据的存储块。备选地,在一些实施例中,如果主机110确定GPU存储器122中的多个存储块全部被使用,主机110可以使多个存储块中的已使用的存储块中的数据被迁移至主机缓存112,然后将该已使用的存储块确定为将要用于存储该数据的存储块。例如,在图3中,在GPU存储器122中的所有存储块都被使用的情况,已使用的存储块305中的数据可以被迁移至主机缓存112中的页面地址306处(如图3中的虚线箭头P3所示),并且在之后被写回到存储设备130中的对应位置307处(如图3中的虚线箭头P4所示)。
响应于用于存储该数据的存储块被确定,主机110可以触发315DMA数据传输,使得GPU 120经由直接存储器访问(DMA)将数据从缓存112中的页面地址302迁移至所确定的存储块(例如,存储块304或305)中。然后,主机110可以通知316GPU 120从GPU存储器122访问该数据(例如,读取或修改该数据)。
图4示出了根据本公开的实施例的经由P2P路径在存储设备和GPU存储器之间迁移数据的示意图。
如图4所示,GPU 120中运行的程序123例如包括语句“a=in[tid]”,其意图访问由主机110和GPU 120共享的虚拟地址空间320中的虚拟地址301处的数据。当MMU 121检测到该数据在GPU存储器122中缺失时,MMU 121可以触发GPU缺页故障,并且GPU缺页故障的指示可以由主机110(例如,CPU 111上运行的GPU驱动程序)捕获。主机110可以因此执行如图4所示的过程410。在一些实施例中,过程410例如可以由CPU 111上运行的GPU驱动程序来执行。
主机110可以从GPU 120接收411GPU缺页故障的指示。响应于接收到该指示,主机110可以确定412是利用缓存路径还是P2P路径来将存储设备130中的该数据迁移至GPU存储器122中。在此假设要访问的数据为只读或只写数据。如上所述,主机110可以选择P2P路径作为将存储设备130中的该数据迁移至GPU存储器122中的路径,从而实现更低的传输延迟。
响应于P2P路径被选择,主机110可以确定413GPU存储器122中用于存储该数据的存储块。确定存储块的动作413可以与如图3所示的动作314类似,在此不再赘述。例如,所确定的存储块为如图4所示的存储块304。然后,主机110可以基于所确定的存储块304来确定414数据将被迁移至的目的地址(例如,GPU存储器的总线地址)。
响应于确定目的地址,主机110可以在主机存储器中分配415缓冲区,并且将目的地址写入416到所分配的缓冲区中。在主机存储器中分配缓冲区的原因在于,后续要发起的直接I/O请求通常要求目的缓冲区驻留在主机本地存储器中,并且GPU存储器中的缓冲区往往不被支持。此外,主机110需要在存储设备130的驱动程序(例如,NVMe驱动程序)可见的位置(例如,页表)处设置417与该缓冲区相关联的P2P标签,以指示该缓冲区并非真正的目的缓冲区,而是存储有目的地址的缓冲区。如以下将描述的,存储设备130的驱动程序将基于检测到该P2P标签来对该缓冲区进行特殊处理。
如图4所示,响应于P2P标签被设置,主机110可以利用存储有目的地址的缓冲区向存储设备130的驱动程序发起418直接I/O请求。响应于接收到直接I/O请求,存储设备130的驱动程序可以执行如图4所示的过程420。例如,该驱动程序可以检测421P2P标签是否被设置。响应于确定P2P标签被设置,该驱动程序可以从直接I/O请求的缓冲区中提取422目的地址。然后,该驱动程序可以基于该目的地址来生成I/O命令并且将其发送423给存储设备130。响应于该I/O命令,存储设备130将经由DMA将数据从位置303迁移至GPU存储器122中的存储块304中(如图4中的虚线箭头P5所示)。然后,主机110可以通知419GPU 120从GPU存储器122访问该数据(例如,读取或修改该数据)。
从以上描述可以看出,本公开的实施例提出了一种用于扩展GPU存储器的方案。该方案基于统一存储器架构并且利用外部存储设备来扩展GPU存储器,外部存储设备例如为支持非易失性存储器标准(NVMe)的固态盘等。当GPU将要访问的数据不在GPU存储器中时,GPU将触发缺页故障并且该缺页故障的指示将被主机(例如,GPU驱动程序)捕获。主机可以使存储在外部存储设备中的数据经由多个候选路径之一被迁移至GPU存储器中,然后通知GPU从GPU存储器中访问该数据。以此方式,本公开的实施例能够利用外部存储设备来扩展GPU存储器,并且扩展过程对于GPU程序员而言是透明的。
图5示出了可以用来实施本公开内容的实施例的示例设备500的示意性框图。例如,如图1所示的主机110可以由设备500实施。如图5所示,设备500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的计算机程序指令或者从存储页面508加载到随机访问存储器(RAM)503中的计算机程序指令,来执行各种适当的动作和处理。在RAM503中,还可存储设备500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
设备500中的多个部件连接至I/O接口505,包括:输入单元506,例如键盘、鼠标等;输出单元507,例如各种类型的显示器、扬声器等;存储页面508,例如磁盘、光盘等;以及通信单元509,例如网卡、调制解调器、无线通信收发机等。通信单元509允许设备500通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
上文所描述的各个过程和处理,例如过程200、310、410和/或420,可由处理单元501执行。例如,在一些实施例中,过程200、310、410和/或420可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储页面508。在一些实施例中,计算机程序的部分或者全部可以经由ROM 502和/或通信单元509而被载入和/或安装到设备500上。当计算机程序被加载到RAM 503并由CPU 501执行时,可以执行上文描述的过程200、310、410和/或420的一个或多个动作。
本公开可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是——但不限于——电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

Claims (27)

1.一种用于扩展图形处理单元的存储器的方法,包括:
从与主机耦合的图形处理单元接收所述图形处理单元将要访问的数据在所述图形处理单元的存储器中缺失的指示,其中所述数据被存储在与所述主机耦合的存储设备中;
响应于接收到所述指示,从多个候选路径中确定用于将所述存储设备中的所述数据迁移至所述图形处理单元的所述存储器中的路径;
使得所述数据经由确定的所述路径从所述存储设备被迁移至所述图形处理单元的所述存储器中;以及
指示所述图形处理单元从所述图形处理单元的所述存储器访问所述数据。
2.根据权利要求1所述的方法,其中所述多个候选路径包括第一候选路径和第二候选路径,所述第一候选路径指示经由所述主机的缓存在所述存储设备和所述图形处理单元的所述存储器之间进行数据迁移,所述第二候选路径指示在所述存储设备和所述图形处理单元的所述存储器之间直接进行数据迁移。
3.根据权利要求2所述的方法,其中确定所述路径包括:
响应于确定所述数据是只读数据或者只写数据,将所述第二候选路径确定为所述路径。
4.根据权利要求2所述的方法,其中确定所述路径还包括:
响应于确定所述数据是可读写的数据,将所述第一候选路径确定为所述路径。
5.根据权利要求2所述的方法,其中使得所述数据经由确定的所述路径从所述存储设备被迁移至所述图形处理单元的所述存储器包括:
响应于所述第一候选路径被确定为所述路径,
确定所述缓存中与所述图形处理单元将要访问的所述数据的虚拟地址相对应的页面地址,其中所述存储设备中的所述数据将被缓存到所述页面地址中;
确定所述图形处理单元的所述存储器中用于存储所述数据的存储块;以及
使得所述数据从所述缓存中的所述页面地址被迁移至所述存储块中。
6.根据权利要求2所述的方法,其中使得所述数据经由确定的所述路径从所述存储设备被迁移至所述图形处理单元的所述存储器包括:
响应于所述第二候选路径被确定为所述路径,
确定所述图形处理单元的所述存储器中用于存储所述数据的存储块;
基于所述存储块,确定所述数据将被迁移至的目的地址;以及
向所述存储设备指示所述目的地址,以使得所述存储设备将所述数据迁移至所述目的地址。
7.根据权利要求5或6所述的方法,其中所述图形处理单元的所述存储器包括多个存储块,并且确定所述存储块包括:
响应于确定所述多个存储块中存在未使用的存储块,将所述未使用的存储块确定为用于存储所述数据的所述存储块。
8.根据权利要求5或6所述的方法,其中所述图形处理单元的所述存储器包括多个存储块,并且确定所述存储块包括:
响应于确定所述多个存储块中不存在未使用的存储块,使得所述多个存储块中的已使用的存储块中的数据被迁移至所述缓存中;以及
将所述已使用的存储块确定为用于存储所述数据的所述存储块。
9.根据权利要求5所述的方法,其中使得所述数据从所述缓存中的所述页面地址被迁移至所述存储块中包括:
使得所述图形处理单元经由直接存储器访问(DMA)将所述数据从所述缓存中的所述页面地址迁移至所述存储块中。
10.根据权利要求6所述的方法,其中向所述存储设备指示所述目的地址包括:
从所述主机的存储器中分配缓冲区;
将所述目的地址存储在所述缓冲区中;以及
利用所述缓冲区向所述存储设备的驱动器发送直接I/O请求,以使得所述驱动器响应于接收到所述直接I/O请求,从所述缓冲区中提取所述目的地地址并且向所述存储设备发送基于所述目的地地址而生成的I/O命令。
11.根据权利要求6所述的方法,其中所述存储设备经由直接存储器访问(DMA)将所述数据迁移至所述目的地址。
12.根据权利要求1所述的方法,其中所述存储设备包括支持非易失性存储器标准(NVMe)的固态盘。
13.根据权利要求1所述的方法,其中所述图形处理单元和所述存储设备分别经由外围组件快速互联(PCI-e)接口与所述主机耦合。
14.一种电子设备,包括:
至少一个处理单元;
至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理单元并且存储用于由所述至少一个处理单元执行的指令,所述指令当由所述至少一个处理单元执行时,使得所述设备执行动作,所述动作包括:
从与主机耦合的图形处理单元接收所述图形处理单元将要访问的数据在所述图形处理单元的存储器中缺失的指示,其中所述数据被存储在与所述主机耦合的存储设备中;
响应于接收到所述指示,从多个候选路径中确定用于将所述存储设备中的所述数据迁移至所述图形处理单元的所述存储器中的路径;
使得所述数据经由确定的所述路径从所述存储设备被迁移至所述图形处理单元的所述存储器中;以及
指示所述图形处理单元从所述图形处理单元的所述存储器访问所述数据。
15.根据权利要求14所述的设备,其中所述多个候选路径包括第一候选路径和第二候选路径,所述第一候选路径指示经由所述主机的缓存在所述存储设备和所述图形处理单元的所述存储器之间进行数据迁移,所述第二候选路径指示在所述存储设备和所述图形处理单元的所述存储器之间直接进行数据迁移。
16.根据权利要求15所述的设备,其中确定所述路径包括:
响应于确定所述数据是只读数据或者只写数据,将所述第二候选路径确定为所述路径。
17.根据权利要求15所述的设备,其中确定所述路径包括:
响应于确定所述数据是可读写的数据,将所述第一候选路径确定为所述路径。
18.根据权利要求15所述的设备,其中使得所述数据经由确定的所述路径从所述存储设备被迁移至所述图形处理单元的所述存储器包括:
响应于所述第一候选路径被确定为所述路径,
确定所述缓存中与所述图形处理单元将要访问的所述数据的虚拟地址相对应的页面地址,其中所述存储设备中的所述数据将被缓存到所述页面地址中;
确定所述图形处理单元的所述存储器中用于存储所述数据的存储块;以及
使得所述数据从所述缓存中的所述页面地址被迁移至所述存储块中。
19.根据权利要求15所述的设备,其中使得所述数据经由确定的所述路径从所述存储设备被迁移至所述图形处理单元的所述存储器包括:
响应于所述第二候选路径被确定为所述路径,
确定所述图形处理单元的所述存储器中用于存储所述数据的存储块;
基于所述存储块,确定所述数据将被迁移至的目的地址;以及
向所述存储设备指示所述目的地址,以使得所述存储设备将所述数据迁移至所述目的地址。
20.根据权利要求18或19所述的设备,其中所述图形处理单元的所述存储器包括多个存储块,并且确定所述存储块包括:
响应于确定所述多个存储块中存在未使用的存储块,将所述未使用的存储块确定为用于存储所述数据的所述存储块。
21.根据权利要求18或19所述的设备,其中所述图形处理单元的所述存储器包括多个存储块,并且确定所述存储块包括:
响应于确定所述多个存储块中不存在未使用的存储块,使得所述多个存储块中的已使用的存储块中的数据被迁移至所述缓存中;以及
将所述已使用的存储块确定为用于存储所述数据的所述存储块。
22.根据权利要求18所述的设备,其中使得所述数据从所述缓存中的所述页面地址被迁移至所述存储块中包括:
使得所述图形处理单元经由直接存储器访问(DMA)将所述数据从所述缓存中的所述页面地址迁移至所述存储块中。
23.根据权利要求19所述的设备,其中向所述存储设备指示所述目的地址包括:
从所述主机的所述至少一个存储器中分配缓冲区;
将所述目的地址存储在所述缓冲区中;以及
利用所述缓冲区向所述存储设备的驱动器发送直接I/O请求,以使得所述驱动器响应于接收到所述直接I/O请求,从所述缓冲区中提取所述目的地地址并且向所述存储设备发送基于所述目的地地址而生成的I/O命令。
24.根据权利要求19所述的设备,其中所述存储设备经由直接存储器访问(DMA)将所述数据迁移至所述目的地址。
25.根据权利要求14所述的设备,其中所述存储设备包括支持非易失性存储器标准(NVMe)的固态盘。
26.根据权利要求14所述的设备,其中所述图形处理单元和所述存储设备分别经由外围组件快速互联(PCI-e)接口与所述主机耦合。
27.一种计算机程序产品,所述计算机程序产品被有形地存储在计算机存储介质中并且包括机器可执行指令,所述机器可执行指令在由设备执行时使所述设备执行根据权利要求1-13中的任一项所述的方法。
CN201911058577.7A 2019-11-01 2019-11-01 扩展gpu存储器的方法、电子设备和计算机程序产品 Active CN112764668B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201911058577.7A CN112764668B (zh) 2019-11-01 2019-11-01 扩展gpu存储器的方法、电子设备和计算机程序产品
US16/799,104 US11055813B2 (en) 2019-11-01 2020-02-24 Method, electronic device and computer program product for expanding memory of GPU

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911058577.7A CN112764668B (zh) 2019-11-01 2019-11-01 扩展gpu存储器的方法、电子设备和计算机程序产品

Publications (2)

Publication Number Publication Date
CN112764668A true CN112764668A (zh) 2021-05-07
CN112764668B CN112764668B (zh) 2024-07-05

Family

ID=75687641

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911058577.7A Active CN112764668B (zh) 2019-11-01 2019-11-01 扩展gpu存储器的方法、电子设备和计算机程序产品

Country Status (2)

Country Link
US (1) US11055813B2 (zh)
CN (1) CN112764668B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114237859A (zh) * 2022-02-25 2022-03-25 中瓴智行(成都)科技有限公司 分布式的智能终端gpu算力提升方法、终端、系统及介质
CN118132273A (zh) * 2024-04-29 2024-06-04 阿里云计算有限公司 数据处理方法、装置及设备

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114168316A (zh) * 2021-11-05 2022-03-11 支付宝(杭州)信息技术有限公司 显存分配处理方法、装置、设备及系统
CN118279126B (zh) * 2024-05-31 2024-08-30 浪潮电子信息产业股份有限公司 图形处理单元显存处理方法、服务器、产品、设备及介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7089397B1 (en) * 2003-07-03 2006-08-08 Transmeta Corporation Method and system for caching attribute data for matching attributes with physical addresses
US20070294681A1 (en) * 2006-06-20 2007-12-20 Tuck Nathan D Systems and methods for profiling an application running on a parallel-processing computer system
CN102262774A (zh) * 2010-05-29 2011-11-30 英特尔公司 用于图形硬件的非易失性存储
CN103109274A (zh) * 2010-09-20 2013-05-15 高通股份有限公司 多处理器计算平台中的处理器间通信技术
CN103927277A (zh) * 2014-04-14 2014-07-16 中国人民解放军国防科学技术大学 Cpu和gpu共享片上高速缓存的方法及装置
CN104956321A (zh) * 2012-12-29 2015-09-30 英特尔公司 标识gpu阶段以便在运行时期间确定gpu扩展性
US20180285261A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Dynamic fill policy for a shared cache
CN108734298A (zh) * 2017-04-17 2018-11-02 英特尔公司 扩展gpu/cpu一致性到多gpu核
CN110032450A (zh) * 2019-04-17 2019-07-19 中山大学 一种基于固态盘扩展内存的大规模深度学习方法及系统

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6295068B1 (en) * 1999-04-06 2001-09-25 Neomagic Corp. Advanced graphics port (AGP) display driver with restricted execute mode for transparently transferring textures to a local texture cache
US6604179B2 (en) * 2000-03-23 2003-08-05 Intel Corporation Reading a FIFO in dual clock domains
JP2008225765A (ja) * 2007-03-12 2008-09-25 Nec Corp ネットワークストレージ・システムとその管理方法及び制御プログラム
US8830246B2 (en) * 2011-11-30 2014-09-09 Qualcomm Incorporated Switching between direct rendering and binning in graphics processing
US8949544B2 (en) * 2012-11-19 2015-02-03 Advanced Micro Devices, Inc. Bypassing a cache when handling memory requests
GB2536205A (en) * 2015-03-03 2016-09-14 Advanced Risc Mach Ltd Cache maintenance instruction
US10198849B1 (en) * 2017-10-26 2019-02-05 Advanced Micro Devices, Inc. Preloading translation and data caches using on-chip DMA engine with fast data discard
US10884637B2 (en) * 2018-04-03 2021-01-05 Elastic Flash Inc. Workload based storage optimization

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7089397B1 (en) * 2003-07-03 2006-08-08 Transmeta Corporation Method and system for caching attribute data for matching attributes with physical addresses
US20070294681A1 (en) * 2006-06-20 2007-12-20 Tuck Nathan D Systems and methods for profiling an application running on a parallel-processing computer system
CN102262774A (zh) * 2010-05-29 2011-11-30 英特尔公司 用于图形硬件的非易失性存储
CN103109274A (zh) * 2010-09-20 2013-05-15 高通股份有限公司 多处理器计算平台中的处理器间通信技术
CN104956321A (zh) * 2012-12-29 2015-09-30 英特尔公司 标识gpu阶段以便在运行时期间确定gpu扩展性
CN103927277A (zh) * 2014-04-14 2014-07-16 中国人民解放军国防科学技术大学 Cpu和gpu共享片上高速缓存的方法及装置
US20180285261A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Dynamic fill policy for a shared cache
CN108734298A (zh) * 2017-04-17 2018-11-02 英特尔公司 扩展gpu/cpu一致性到多gpu核
CN110032450A (zh) * 2019-04-17 2019-07-19 中山大学 一种基于固态盘扩展内存的大规模深度学习方法及系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114237859A (zh) * 2022-02-25 2022-03-25 中瓴智行(成都)科技有限公司 分布式的智能终端gpu算力提升方法、终端、系统及介质
CN118132273A (zh) * 2024-04-29 2024-06-04 阿里云计算有限公司 数据处理方法、装置及设备

Also Published As

Publication number Publication date
US11055813B2 (en) 2021-07-06
CN112764668B (zh) 2024-07-05
US20210133918A1 (en) 2021-05-06

Similar Documents

Publication Publication Date Title
US11126353B2 (en) Method and apparatus for data copy
US9880941B2 (en) Sharing an accelerator context across multiple processes
US10831654B2 (en) Cache management using multiple cache history lists
CN112764668B (zh) 扩展gpu存储器的方法、电子设备和计算机程序产品
CN111949605B (zh) 用于实现文件系统的方法、设备和计算机程序产品
CN107870728B (zh) 用于移动数据的方法和设备
US11593272B2 (en) Method, apparatus and computer program product for managing data access
US9836397B2 (en) Direct memory access of dynamically allocated memory
CN111183411B (zh) 用于虚拟机的动态地址转换
US9529618B2 (en) Migrating processes between source host and destination host using a shared virtual file system
US10169247B2 (en) Direct memory access between an accelerator and a processor using a coherency adapter
US11068418B2 (en) Determining memory access categories for tasks coded in a computer program
US11048422B2 (en) Method, device, and computer readable storage medium for allocating access rights to data among storage processors
US20150278090A1 (en) Cache Driver Management of Hot Data
CN110765036A (zh) 在控制设备处管理元数据的方法、设备和计算机程序产品
US10204060B2 (en) Determining memory access categories to use to assign tasks to processor cores to execute
US9189405B2 (en) Placement of data in shards on a storage device
CN113032088A (zh) 脏页记录方法、装置、电子设备及计算机可读介质
US20210072967A1 (en) Utilizing memory coherency to improve bandwidth performance
US9857979B2 (en) Optimizing page boundary crossing in system memory using a reference bit and a change bit

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