CN114667508B - 为加速器取回数据的方法和系统 - Google Patents

为加速器取回数据的方法和系统 Download PDF

Info

Publication number
CN114667508B
CN114667508B CN202080077721.6A CN202080077721A CN114667508B CN 114667508 B CN114667508 B CN 114667508B CN 202080077721 A CN202080077721 A CN 202080077721A CN 114667508 B CN114667508 B CN 114667508B
Authority
CN
China
Prior art keywords
data
page
accelerator
prefetch
memory
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
Application number
CN202080077721.6A
Other languages
English (en)
Other versions
CN114667508A (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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Publication of CN114667508A publication Critical patent/CN114667508A/zh
Application granted granted Critical
Publication of CN114667508B publication Critical patent/CN114667508B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Landscapes

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

Abstract

本公开提供了为加速器取回数据的方法、系统和非暂时性计算机可读介质。该方法包括:检测对未存储在加速器的主存储单元上的第一数据页的访问尝试;响应于检测到对第一数据页的访问尝试:评估加速器的活动;基于加速器的活动评估,确定预取粒度大小;以及将预取粒度大小的连续页的数据块从与加速器耦接的存储器系统传送到主存储单元中,其中,所传送的连续页的数据块包括第一数据页。

Description

为加速器取回数据的方法和系统
本公开要求申请号为16/901,497,于2020年6月15日提交的美国申请的优先权,该美国申请要求申请号为62/940,027,于2019年11月25日提交的美国临时申请的优先权,这两件申请通过引用并入本文。
技术领域
本公开一般涉及加速器,更具体地涉及用于通过加速器为我们取回数据的方法、系统和非暂时性计算机可读介质。
背景技术
采用加速器的异构计算机系统已成为许多现代计算机系统的重要组成部分。许多这样的计算机系统采用统一的虚拟存储器架构,它允许中央处理单元和加速器共享虚拟存储器空间。虽然虚拟存储器空间的统一管理是有益的,但它也带来了挑战,存储器过度订阅(memory oversubscription)、主存储单元之间频繁的页迁移(page migration)以及存储器使用效率低下都会潜在地造成系统性能下降。处理这些挑战的一个重要组成部分是预取(prefetching),但如果预取的执行效率低下,则又可能降低系统性能。
发明内容
本公开的实施例提供了一种为加速器取回数据的方法、系统和非暂时性计算机可读介质。所述方法包括:检测对未存储在加速器的主存储单元上的第一数据页的访问尝试;响应于检测到对所述第一数据页的访问尝试:评估加速器的活动;基于加速器的活动评估,确定预取粒度大小;以及将预取粒度大小的连续页的数据块从与加速器耦接的存储器系统传送到所述主存储单元中,其中,所传送的连续页的数据块包括第一数据页。
本公开的实施例的附加目的和优点的一部分在下面的描述中阐述,而一部分则从描述中体现,或者通过实施例的实践学习到。本公开的实施例的目的和优点通过权利要求中提出的元素和组合来实现和获得。
应当理解,上面的一般描述和以下的详细描述仅是示例性和说明性的,而不是用于限制本发明。
附图说明
在下面的详细描述和附图中说明了本公开的实施例和各个方面。图中所示的各个特征没有按比例绘制。
图1是通用的冯·诺依曼架构(general Von Neumann architecture)的简化图。
图2是基本的冯·诺依曼架构(basic Von Neumann architecture)的简化图。
图3是中央处理单元的内部架构的简化图。
图4是冯·诺依曼架构的变体的简化图。
图5是操作系统结构的简化图。
图6是在应用页表的虚拟分页系统(virtual paging system)如何将虚拟地址映射到物理地址的示意图。
图7是被许多现代计算机系统所采用的改进后的冯·诺依曼架构的简化图。
图8也是被许多现代计算机系统所采用的架构的简化图。
图9是加速器的简化图。
图10是根据本公开的一些实施例的采用管理加速器的主存储单元的方法的示例性计算机系统的示意图。
图11是根据本公开的一些实施例的加速器的存储器管理单元(MMU)的简化图。
图12是根据本公开的一些实施例的用于管理加速器的主存储单元的示例性方法的流程图。
图13是根据本公开的一些实施例的示例性加速器的架构的更详细的示意图。
图14是根据本公开的一些实施例的示例性加速器的核的架构的示意图。
图15是根据本公开的一些实施例的示例性加速器的替代架构的示意图。
图16是根据本公开的一些实施例的安装有加速器的示例性云系统的示意图。
图17是根据本公开的一些实施例的如何由主机系统决定和设置已取回页的租赁持续时间(lease duration of a fetched page)的简化图。
图18是根据本公开的一些实施例的连续页的字节对齐块的示意图。
具体实施例
下面将详细介绍示例性的实施例,其示例在附图中示出。下面参照附图进行描述,其中除非另有说明,否则不同附图中相同数字表示相同的或类似元素。示例性的实施例的以下描述所阐述的实现并不代表与本公开一致的所有实现。相反,它们仅仅是与所附权利要求中所述的与本公开有关的方面一致的装置和方法的示例。下面更详细地描述本公开的特定方面。这里提供的术语和定义如果与通过引用合并的术语和/或定义冲突,则以本文提供的术语和定义为准。
对于大多数现代计算机系统来说,计算机系统的存储器(memory)的设计、结构和性能是特别重要的。由于源自于大多数现代计算硬件所使用的材料的物理特性(例如,硅的使用)的多种因素,计算机系统的存储器的性能往往是系统性能的瓶颈。由于这个原因,在大多数现代系统中,大量的系统资源(例如,相当大比例的电路)被投入到复杂的存储器子系统(memory subsystems)中,以减少和改善这种存储器瓶颈(memory bottleneck)的影响。
很大程度上,存储器对计算机系统性能的重要性可以归因于大多数现代计算机系统所使用的基本底层架构(basic underlying architecture)。当然,这种架构的使用本身是由各种底层物理约束所驱动的,这使得它成为(目前)比替代架构更好的选择,尽管它引入了潜在的性能瓶颈。
为了更好地理解为什么存储器常常是许多计算机系统的性能瓶颈,有必要对它们的基本设计进行概述。从最基本的开始,在抽象意义上,计算机可以被认为是一种能够自动执行一系列操作的设备。这些操作是原子性的(primitive),这意味着计算机系统可以在没有额外解释的情况下执行这些操作,非正式地讲,计算机系统理解这些操作。由于这一要求,原子性操作通常(但不是必须地)相对简单,导致大多数此类操作是某种基于算术或逻辑的过程(例如,“将这两个数字相加”)。当然,这些操作可以组合在一起以获得更复杂的结果,这本质上就是程序,即专门用于特定任务的一系列的操作。此外,一个操作几乎总是有一个相关的标签,即指令,可以用来识别(以及指示计算机执行)一个特定的操作。
“计算机”的这个基本定义是一个非常宽泛的定义,因为这个定义涵盖了大多数能够自动执行一系列操作的系统,而不管其结构或架构如何(即,不管其实现细节如何)。由于这种开放性,这个定义允许大量可能的系统以及可以用来制造一台“计算机”的通用的系统架构。这种变化主要涉及哪些原子性操作是可用的、决定执行哪些操作的指令如何被处理,以及如何处理这些操作的输入和输出。对于计算机科学和相关领域来说,几乎可以使用这些架构中的任何一种,尽管通常选择简单的、更容易使用的架构(例如,“图灵机(TuringMachine)”)。然而,要在物理现实中实现计算机,就必须与物理施加的各种限制进行斗争,尤其是可用材料的特性带来的限制。最终,基于各种因素,大多数现代计算机系统发现最适合的架构是冯·诺依曼架构或基于冯·诺依曼架构的变体。
从概念上讲,基于冯·诺依曼架构的计算机可以被认为是两个相互作用的子系统:数据处理子系统和数据存储子系统。正如其名称所暗示的,数据处理子系统负责执行计算机系统的各种(原子性的)操作。数据处理子系统的主要任务是执行由计算机系统执行的实际计算。另一方面,数据存储子系统负责存储用于指导数据处理子系统的程序(程序由指令构成)。另外,数据存储子系统还负责存储作为数据处理子系统执行的各种操作的输入(或作为数据处理子系统执行的各种操作的输出)的各种数据。这些数据可以在程序的初始化/启动时(例如,在数据处理子系统开始执行由程序的第一条指令指示的操作之前或当时)被包含进来,或者这些数据可以源于数据处理子系统之前执行的某些操作的存储输出。
现代计算机系统一般采用冯·诺依曼架构的广义变体。在这些广义变体中,数据处理子系统可以包含多种数据处理元件。同样,在广义冯·诺依曼架构中,数据存储子系统可以包含多种数据存储元件。通常,数据处理子系统包括被称为中央处理单元(CPU)的核心元件。一般说来,CPU能够恰当地处理各种任务(例如,CPU有多种原子性操作可用)。CPU通常还负责管理和协调其他数据处理元件的活动。这些其他数据处理元件通常是异构的。也就是说,这些数据处理元件具有不同的性能特性,并且对于特定的工作负载具有不同的性能。这些附加的数据处理元件被称为加速器,它们通常专用于提高特定操作和工作负载的性能,并通常以降低其他工作负载的性能为代价。
类似地,数据存储子系统通常包含被称为主存储单元(primary storage unit,PSU)的核心元件。通常,PSU可由数据处理子系统(例如,CPU)直接访问,并负责存储数据处理子系统使用的指令和数据。一般说来,PSU是为速度而优化的,这意味着PSU可以快速处理往来于CPU(以及通常的数据处理元件)的数据传输。然而,作为折衷,PSU通常具有低存储密度、高存储成本和易失性,这意味着PSU在失去电源时不会保留数据。因此,数据存储系统通常也采用异构的多个数据存储元件。也就是说,这些数据存储元件具有不同的性能特性,并且对于特定的工作负载具有不同的性能。这些附加的数据存储元件被称为数据存储设备,并且它们通常专门用于增加数据存储和非易失性,并通常以降低速度和增加延迟为代价。
图1是通用的冯·诺依曼架构(general Von Neumann architecture)的简化图。根据图1,冯·诺依曼架构100由数据处理子系统110和数据存储子系统120组成。图上还示出了I/O 130,其可以向数据处理子系统110和数据存储子系统120提供输入和输出。如图1所示,数据处理子系统110由多种数据处理元件组成,图上示出了数据处理元件111、112、113和114。类似地,数据存储子系统也由多种数据存储元件组成,图上示出了数据存储元件121、122、123和124。如箭头所示,数据处理子系统110和数据存储子系统120可以相互通信和传送数据。
在冯·诺依曼架构的基本版本中,数据处理子系统仅由CPU组成,数据存储子系统仅由PSU组成。通常,PSU可由数据处理子系统(例如,CPU)直接访问,并负责存储数据处理子系统使用的指令和数据。在运行时,数据处理子系统和数据存储子系统紧密地交织在一起,尤其是CPU和PSU。要进行操作,CPU通常需从PSU中取回指示CPU将要执行的下一个操作的下一个指令(表示为数据)。该指令(更准确地说,该指令指示的操作)然后可以触发与PSU上的更多数据(例如,取回算术/逻辑操作的输入、存储算术/逻辑操作的输出等)的交互。
图2是基本的冯·诺依曼架构(basic Von Neumann architecture)的简化图。根据图2,基本的冯诺伊曼架构由数据处理子系统210和数据存储子系统220组成。如图上所示,数据处理子系统210仅由一个数据处理元件:中央处理单元211组成。类似地,数据存储子系统220也仅由一个数据存储元件:主存储单元221组成。图上还示出了I/O 230,其可以向中央处理单元211和主存储单元221提供输入和输出。图上还出了CPU 211的一些内部组件,包括控制单元212、算术逻辑单元213和处理器寄存器214。
频繁的通信需要使得数据处理子系统对数据处理子系统的交互做出响应或反应的速度成为整个计算机系统性能的潜在瓶颈。这个瓶颈被称为“冯·诺依曼瓶颈”。不幸的是,在大多数现代计算机系统中,冯·诺依曼瓶颈是一个显著问题。由于各种原因,处理子系统(尤其是CPU)与存储子系统的操作/交互的速度明显快于存储子系统(尤其是PSU)与处理子系统的操作/交互的速度。这种趋势有时被称为“内存墙(memory wall)”或“带宽墙(bandwidth wall)”。由于这种速度差异,大多数现代计算机系统采用各种策略来减少或减轻冯·诺依曼瓶颈和内存墙的影响。
为了理解使用的一些其他策略,有必要更详细地理解数据处理子系统如何与数据存储子系统交互,特别注意CPU如何与PSU交互。反过来,为了理解CPU如何与PSU交互,有必要了解大多数CPU(这也适用于大多数其他数据处理元件)和大多数PSU的一些内部设计和体系结构。首先,作为一个普遍问题,大多数现代计算机基于二进制逻辑。这意味着计算机中的几乎所有数据都被存储/表示为一系列的比特位(一种信息单位,只能是两个符号中的一个,通常表示为“0”和“1”)。每个离散的比特位的集合表示一个二进制数(例如,以2为基的数,例如0b0001101110001111,“0b”表示该数以2为基,该数是以10为基的7055)。为了更好的可读性,二进制数通常被写成十六进制数(即,以16为基)(例如,之前的二进制数字0b0001101110001111是0x1B8F,其中“0x”表示该数以16为基)。
对于数据存储子系统,大多数PSU包括多个被称为“存储器位置(memorylocations)”的基本单元。每个存储器位置指向一组离散数据,其通常具有相同的固定的长度/大小。一个“存储器位置”可以由一个被称为物理地址的、与存储器位置相关联的唯一标识符进行标识和寻址。“第一”物理地址通常从0x00000000开始编号,并且对于每个顺序单元继续递增1(例如,对于32位地址,0x00000001、0x00000002、0x00000003、...、0xFC4A95E3等,以及对于64位地址,0x0000000000001、0x00000000002、...、0x000009BCFC4A95E3等)。因为大多数现代计算机都基于二进制数据,所以大多数PSU的存储器位置的大小是比特位的一些倍数(注意,存储器位置可以由被称为存储器单元的更小单元组成,存储器单元通常存储单个比特的值;然而,存储器单元通常不能直接访问)。对于大多数现代系统,存储器位置的大小是8个比特,也称为字节。这种存储器设计被称为“字节寻址”。同样,因为大多数现代计算机使用二进制数字表示数据时,物理地址通常也是固定位数的二进制数,为了方便起见,物理地址通常也是固定数目的字节(例如,16位(2字节)的物理地址,32位(4字节)的物理地址,64位(8字节)的物理地址)。离散的大于一个字节的数据块被存储在一个连续的地址序列中。注意,虽然存储在大多数PSU上的所有数据为二进制数,但对该数所代表的内容(例如,其数据类型,例如字符串、浮点数等)的解释可能会基于正在执行的程序/指令或正在执行的操作而变化。
至于数据处理子系统,CPU(和大多数数据处理元件)有一组它们可以执行的、通常是基本的操作/动作。这些操作/动作的每一个都由一个指令代表和标识,由于计算机的二进制性质,指令通常由二进制数表示。CPU所使用的整个指令集(以及指令集所代表的操作/动作)的设计称为指令集架构。在高层,大多数现代计算机系统的指令集架构将指令分为两大类:存储器操作和算术/逻辑操作。这通常被称为加载-存储体系结构(load-storearchitecture)。这种分离的原因是,大多数CPU(和通常的大多数数据处理元件)不能在算术操作中直接使用存储在PSU中的数据(例如,作为输入),大多数CPU也不能直接使用算术操作的输出来在PSU上存储数据。相反,要使用PSU上的数据,该数据必须首先传输/存储在CPU的处理器寄存器中。处理器寄存器是一个较小的内存保存区域,用来保存CPU正在使用(或生成)的数据。处理器寄存器通常是固定大小,称为字(word)。与PSU的物理地址类似,字是一定数量的比特,为了方便起见,字的大小通常也是多个字节(例如,16比特(2字节)的字大小,32比特(4字节)的字大小,64比特(8字节)的字大小)。只有位于这些处理器寄存器中的数据可以用作算术/逻辑运算的输入,并且只有位于这些寄存器中的数据可以存储到PSU上。
在使用加载-存储体系结构的CPU中,为了将数据传送(例如,复制)到CPU的处理器寄存器中,必须指示CPU从PSU读取数据并将数据复制到处理器寄存器中。CPU读取特定数据,并使用内存操作将数据复制到特定寄存器(使用相应的指令指示执行此操作)。类似地,CPU被指示使用不同的存储器操作(由相应的不同指令表示)将寄存器中的特定数据写入PSU中。因此,为了使用两个不同的数值执行算术/逻辑操作,CPU通常必须取回加载指令、取回第一输入、取回第二加载指令、取回第二输入、取回第三指令,并使用刚刚取回的两个数值作为输入执行所指示的操作。
图3是如上所述的中央处理单元的内部架构的简化图。根据图3,中央处理单元的基本架构包括控制单元310、算术逻辑单元320和处理器寄存器330。控制单元310包含指令寄存器311和程序计数器312。控制单元310还具有到PSU的连接(未示出),控制单元310可以从PSU中取回数据和指令。如上所述,控制单元310可以从PSU取回指令并将这些指令存储在指令寄存器311中。控制单元310还可以使用程序计数器312来存储下一个要执行的指令位于PSU上的物理地址。如图3所示,控制单元310连接到算术逻辑单元320。基于存储在指令寄存器311中的指令,控制单元310可以配置算术逻辑单元以执行各种操作。算术逻辑单元320可以通过改变存储在处理器寄存器330中的数据来执行这些操作,在这里示出了处理器寄存器331、332、333、334、335和336。
注意,有些系统使用被称为寄存器-存储器架构的指令集架构。在这些指令集中,算术操作可以指定PSU上的数据,似乎允许PSU上的数据由算术/逻辑操作(例如,用作输入或由输出设置)处理,而无需首先复制到处理器寄存器或从处理器寄存器复制出来。然而,在大多数这样的系统中,这些指令实际上是由一个更深、更基本的指令层(被称为微码)来实现的,它将给定的指令分成几个更小、更基本的微指令。然后,微指令集合执行上述过程,即,在CPU使用输入数据之前,首先取回输入数据并将其放入到处理器寄存器中。这意味着微指令在使用任何输入数据执行算术/逻辑操作之前,从PSU中取回该输入数据(位于PSU上且当前不在处理器寄存器中),并将取回的输入数据放入处理器寄存器中。类似地,这也意味着微指令在使用任何输出数据执行内存操作之前,首先将执行算术/逻辑操作产生的该输出数据放到处理器寄存器中。
因此,在基本的冯·诺依曼架构的高级概述中,数据存储子系统的CPU通常以(1)取指令->(2)执行指令->(3)取指令->(4)执行指令->…的模式与存储器的存储子系统的PSU交互。几乎在每一种情况下,CPU取回它的下一条指令都涉及从PSU取回指令(表示为数据)。另外,如果取回的指令是存储器操作,则CPU还将与PSU交互(例如,从PSU取回数据或在PSU上存储/修改数据)。因此,CPU不断地与PSU交互,以确定它的下一个操作(即,取回它的下一个指令),并且在许多情况下执行该操作。
给定CPU与PSU相互交互的频率(以及通常数据处理子系统与数据存储子系统相互交互的频率),能够减少或改善冯·诺依曼瓶颈或存储器墙的影响,例如,PSU与CPU相比速度不足的趋势是整个计算机系统性能的核心考虑因素。为了达到这个目的,现代计算机系统采用各种策略来减少或减轻数据处理子系统和数据存储子系统之间的性能差异。所采用的最古老和最基本的策略之一是优化PSU以帮助减少速度差异。正是由于这个原因,PSU通常被优化为具有高速度和低延迟。
所采用的最古老和最基本的策略之一是对大多数数据存储子系统的主要部件PSU进行大量优化,使其具有高速度和低延迟。虽然这有助于减少数据处理子系统(或其主要组件的CPU)和数据存储子系统之间的性能差距,但高速优化PSU带来各种折衷。例如,PSU通常具有较低的存储密度(例如,每单位体积存储的数据量较低),并且通常具有较高的存储成本(例如,每单位数据存储的成本较高)。然而,最重要的是,高速度和低延迟的优化导致大多数PSU是易失的,这意味着如果断电,PSU不会保留数据。
在技术意义上,对于计算机系统来说,非易失性存储器并不是绝对必要的。如果有某种方法从外部加载必要的数据(例如,要执行的程序)和某种方法可以取回任何期望的输出(例如,程序的结果),计算机系统的正常运行就只需要一种在执行期间存储和保留数据的方法。此功能正是PSU所提供的。这类似于人类的“工作记忆”,即负责为当前正在进行的任务保留/记住信息的神经系统。然而,虽然不是绝对必要的,大多数现代计算机系统发现长期存储数据的能力是有必要的。
因此,由于拥有非易失性存储通常是有必要的,大多数数据存储子系统还采用被称为辅助存储单元(secondary storage unit,SSU)的附加组件。就像PSU类似于人类的“工作记忆”一样,SSU类似于人类的“长期记忆”,这是一种负责保留/记住当前未被使用的记忆和信息的神经系统,通常是长期和潜在永久的。考虑到SSU在数据存储子系统中的作用,与PSU不同,SSU通常被优化为高存储容量和长期数据保留,包括非易失性。因而,作为后果,无论是在带宽(在一个时间间隔内能够传输的数据量)还是在等待时间(响应I/O请求所花费的时间)方面,SSU通常比PSU更慢。
因此,在大多数计算机系统中,数据存储子系统具有PSU和SSU,其中PSU用作与由CPU(或数据处理子系统的其他数据处理元件)正执行的处理/任务相关的数据的高速存储库,而SSU用作与当前正在执行的任何处理/任务无关的数据和信息的慢速存储库。然而,由于SSU的低性能(例如,较慢的速度和较高的等待时间)在SSU和CPU(或其他数据处理元件)之间产生更大的速度差,大多数计算机系统不直接将数据从SSU传送到数据处理子系统。
虽然CPU和SSU之间的直接交换在理论上并不是不可能的,但大多数计算机系统的结构都是这样的,即CPU(或数据处理子系统的其他元件)要访问存储在SSU上的数据,SSU上的数据必须是首先传送到PSU,然后再将该数据传送到数据处理子系统。显而易见,该数据存储层次结构的原因是避免在数据被从SSU取回时,数据处理子系统(例如,CPU)花费和空闲大量的计算时间(例如,多个时钟周期)。相反,当数据处理子系统处理其他任务时,数据首先被读取到PSU。在完成到PSU的传输后的某个时候,数据处理子系统然后可以从速度更快的PSU中取回数据(并处理相关的任务),从而避免计算时间的大量浪费。
图4是如上所述的冯·诺依曼架构的变体的简化图。根据图4,该架构由数据处理子系统410和数据存储子系统420组成。如图上所示,数据处理子系统410仅由一个数据处理元件:中央处理单元411组成,而数据存储子系统420则由两个数据存储元件:主存储单元421和辅助存储单元422组成。图上还存有I/O 430,其可以向中央处理单元411和主存储单元421提供输入和输出。图4还示有中央处理单元411的一些内部组件,包括控制单元412、算术逻辑单元413和处理器寄存器414。图上还示出了中央处理单元411和主存储单元421之间的连接。如这些连接所示,数据可以在中央处理单元411和主存储单元421之间传送。图上还以类似的方式示出了主存储单元421和辅助存储单元422之间的连接。
当然,现代计算机系统除了优化PSU的速度之外,还采用了多种额外的策略来改善冯·诺依曼瓶颈。在许多情况下,这些策略还同时处理施加在计算机系统的物理约束上的其他问题。这点值得注意,因为在处理这些其他约束时,有时会做出与进一步改善冯·诺依曼瓶颈的权衡。
在现实生活中的计算机系统中,这些额外的复杂性之一包含操作系统(OS)。操作系统可以被认为是管理计算机系统的硬件和各种低级操作的“中央”或“主”程序。从高层次上讲,操作系统的主要好处之一是,操作系统允许其他程序/应用程序安全地忽略(即,抽象掉)计算机系统以及可能同时运行的其他应用程序的各种底层细节。作为这种抽象的一部分,操作系统通常管理数据存储子系统的操作,这项任务称为“存储器管理(memorymanagement)”。操作系统使用的存储器管理最有用、最广泛的方面之一是使用“分页虚拟内存”
图5是上文所述的操作系统的结构的简化图。根据图5,计算机系统可以由各种硬件520组成,这些硬件520可以具有在其上执行的操作系统510。操作系统510可以具有提供各种功能的各种系统组件,在图上示出了系统组件511、512和513。这样的系统组件的一个例子是存储器管理(memory management)。在操作系统之上运行的是用户应用程序500,在图上示出了应用程序501、502和503。用户应用程序500可以利用由操作系统510通过系统组件511、512和513提供的各种特征和服务,以一种简化的方式与硬件520进行接合。
作为背景,大多数现代计算机系统提供允许多个程序同时执行的能力。该特性通常由操作系统实现,在操作系统中,这种特性不被称为并发执行,而是更多地被称为多任务处理。多任务处理可以通过交叉执行各种程序,让每个程序都有一定的运行时间。这一过程被称为“分时管理”。多任务处理也可以利用具有多个核的CPU(或其他数据处理元件),通过允许在不同的核上执行不同的程序来实现。在任何一种情况下,允许多个程序同时处于执行中会导致它们在存储器使用方面的潜在冲突。具体地说,如上所述,程序使用各种存储器地址(以及所表示的存储器位置)来存储其数据。但是,当两个程序试图使用相同的物理地址空间时,冲突就可能产生。事实上,这种冲突特别有可能发生,因为大多数程序使用的地址空间从0x00000000开始,直到达到应用程序所能使用的内存总量为止。这可能导致程序覆盖或以其他方式更改彼此的数据。除了数据损坏之外,这通常会导致错误的结果(例如,如果更改的值被用作其他操作的输入),并且通常会导致数据被更改的程序失败(例如,崩溃)。
分页虚拟内存作为操作系统的一种手段,透明地(对程序而言)协调任何正在执行的程序使用存储器,以解决了这些问题。这从本质上(从程序视角)抽象了协调存储器使用的细节,即允许编写一个程序,而不必考虑它可能与哪些其他程序同时运行。特别的是,分页虚拟内存是两种相关内存管理技术的组合:分页内存和虚拟内存。
在利用虚拟内存的计算机系统中,操作系统为每个程序分配虚拟地址空间。从程序视角看,“虚拟地址空间”与“物理地址空间”相同。但是,因为每个程序都被分配在它自己的虚拟地址空间中,每个程序可以自由地使用任何虚拟内存地址,而不必考虑任何并发执行的其他程序的存储器使用。为了实际实现每个程序的虚拟地址空间,操作系统可以分配一个足够大部分的物理地址空间,并创建一个数据结构,该数据结构记录一个程序的虚拟存储器地址和来自所分配的物理地址空间的相应的物理存储器地址之间的映射。然后可以使用该数据结构将该程序的虚拟地址映射到相应的物理地址。通过确保这部分的物理地址空间仅映射到该程序的虚拟地址空间,操作系统可以确保没有两个程序试图使用相同的物理地址,以避免并发执行多个程序的存储器协调问题。虚拟寻址通常由CPU通过其存储器管理单元(MMU)提供硬件辅助。MMU主要执行虚拟存储器地址到物理地址的转换,以加快处理速度。
但是“虚拟内存”有几个低效之处。首先,如果没有某种存储器的分段方案(如分页),分配给程序的虚拟地址空间的物理地址空间必须是连续的。这会导致存储器的碎片的问题,减少了PSU上有效的可用存储器的大小。其次,在某些版本的虚拟内存中,每个正在执行的程序必须被分配一个物理地址空间,直到程序完成执行。由于PSU的容量有限,这会很快耗尽PSU的可用内存,从而没有足够的存储器来执行额外的程序。分页是一种分段方案,可以应用于虚拟存储器以避免第一个问题。分页也天然地适用于另一种被称为按需分页的变体,这有助于解决第二个问题。
特别地,分页虚拟内存涉及将每个程序的虚拟内存分成大小相等的段,称为页(有时称为“虚拟页”),典型的页的大小为4KB。类似地,系统的物理内存被划分成大小相等的块,称为页框(有时也称为“物理页”)。为了提高效率,页框的大小通常与页的大小相同(不过,偶尔页框会增加或减少2的某个幂)。然后,不是将程序的整个虚拟地址空间映射到某个(连续的)物理地址空间,而是将程序的虚拟内存的每一个页映射到物理内存的一个页帧。操作系统维护被称为页表的数据结构,该数据结构记录每个页映射到的物理帧。虽然这一版本的分页避免了必须将程序的虚拟内存映射到相邻段的物理存储器产生的碎片问题,但它不能解决必须将一个程序的所有虚拟内存映射到物理存储器上的问题,而不管该程序是否所有虚拟内存当前都在使用中。然而,分页的一种变体被称为按需分页,则解决了这个问题。
图6是一种应用页表的虚拟分页系统(virtual paging system)如何将虚拟地址映射到物理地址的示意图。特别的,图6示出了用于将虚拟地址映射到物理地址的两级页表。首先,在每个页表系统中,控制寄存器601包含最高级别的页表的开始物理地址。在两级页表方案中,最高级别的页表是页目录。页目录中的每个条目都是下一级别(也是最低级别)的页表的开始物理地址,页表中的每个条目都是实际存储所需数据的物理帧的地址。在操作中,两级页表方案中的虚拟地址(页目录索引611、页表索引631和物理页偏移量651的组合)被分成三个分量:第一分量(页目录索引611)是页目录620中的对应页表的索引,第二分量(页表索引631)是页表640中的对应物理帧的地址索引。第三个分量是到物理帧的偏移量,没有映射。相反,第三分量被附加到物理帧地址,以决定虚拟地址映射到的完整物理地址。
按需分页本质上与分页虚拟内存相同,只是按需分页利用SSU的存在。在按需分页中,程序只有一些页被指定(被支持/存储在)页帧,通常这些页是正在使用的页。对于页框未支持的页,这些未支持的页将被存储(交换出)到SSU。用于此目的的SSU的这一部分通常被称为交换空间。这允许操作系统/计算机系统一次可以分配比物理内存更多的虚拟内存,因为操作系统可以在任何给定的时间自由地交换由页帧所支持的页。通过类比,人们可以认为存储在SSU上的页有点类似于人类的“中期记忆”的概念。通常,SSU用于存储数据以便长期保留,而大多数数据目前在任何给定时间都不被使用。这类似于人类的“长期记忆”。然而,用于交换空间的SSU的部分通常不打算长期保留。相反,存储在交换空间中的数据是仅在中间未来(例如,分钟级)使用的,而不是在字面上的当前时刻或短期未来(例如,秒级)。这类似于人类的短期的中期记忆,它存储的信息虽然与当前任务相关,但并不用于在确切可想见的时刻执行的操作。
因为按需分页涉及将一些页存储在PSU上,而将其他页存储在SSU上,所以操作系统应该有一些方法来确定哪些页应该在PSU上,哪些页应该在SSU上。在应用程序开始时,有一个初始问题,即在初始化时应该将哪些页放到PSU上。此后,当应用程序运行时,存在两个独立但相互关联的问题,即何时将额外的页从SSU转移到PSU(页导入)和(如果有的话)何时将页从PSU转移回SSU(页导出)。
由于一个页通常必须驻留在PSU中,以便CPU执行它的指令(或访问它的数据),所以一个程序在开始执行时必须在PSU中至少有一个页。此后,至少,当需要引用新的页时,则新页被导入。更确切地说,引用/访问当前未被导入(例如,当前被交换到SSU)的页(更确切地说,是页上的虚拟地址)被称为页故障。每当发生页故障时,操作系统就介入到被引用的页中(即,将被引用的页从SSU导入到PSU上)。按需分页的变体还可以选择加载其他非引用页(称为预取),或在不出现页故障的情况下加载页。几乎每个操作系统也进行反向操作,即,将当前导入的页(例如,当前加载到PSU)导出到PSU中的交换空间。用于决定选中哪个页导出的标准被称为页面替换算法,不同算法使用不同标准。虽然理论上不需要页导出,但按需分页引入的要解决的问题,即确保PSU中保留可用空间,可能会再次发生,例如,所有可用物理内存,即每个页帧,最终都被使用。这可能会导致内存耗尽,如果程序试图访问当前已导出的页,则会导致问题。
按需分页的基本变体是“纯按需分页”,它只在发生页故障时才进行分页。虽然这确实解决了PSU上可用物理内存有限的问题,但纯按需分页通过加剧存储器瓶颈的影响引入了另一个问题。具体地说,由于只有在发生页故障时才会加载页,所以每当首次访问页时,操作系统通常会介入将被引用的页加载到PSU上。由于页相对较小,这种情况很可能经常发生。然而,这个问题在于,因为SSU和数据处理子系统的各个元件(如CPU)之间存在着巨大的速度差异,当发生页故障时,CPU通常必须等待很长时间(相对于每个时钟周期所用的时间)以将相关页从SSU取回到PSU中的刚刚映射的页帧中。为了帮助减少页故障的发生,许多操作系统使用一种按需分页的变体,该变体被称为预期分页,与纯按需分页对应。
在预期分页中,如其名称所示,操作系统试图预测进程将很快访问或引用哪些页(即,操作系统试图预测进程在近期内将试图与哪些虚拟内存地址交互),然后在访问发生之前预加载,例如预取,那些被预测将被很快访问的页,在访问发生时,页已经映射到页帧并将其数据加载到PSU的相应内存位置上。然而,不幸的是,不可能总是完全预先知道进程将试图引用哪个页(或者更具体地说,哪些虚拟地址),至少,在不运行程序的完整模拟的情况下是不可能的,但这种模拟又是冗余的。因此,预期分页的每个实现都使用启发法来猜测在不久的将来将引用哪些页(更具体地说,哪些虚拟地址),然后预加载这些页(更具体地说,包含虚拟地址的页)。页面替换算法也同样使用启发法来猜测哪些页面在不久的将来不会被引用,然后将这些页面导出。
预期分页的许多变体所使用的启发法都基于引用的区域性(locality ofreference)。引用的区域性是指程序(尤其是程序中的特定指令)在短时间内重复引用附近存储器位置的趋势。这反过来意味着,对一个页(的虚拟地址)的引用暗示着可能访问其附近页(的虚拟地址)。预期分页方案可以利用这一点,由于在不久的将来也可能访问相邻页,则当发生页故障时,导入页故障触发的页以及页故障触发的页的相邻页(如果相邻页被导出)。通常,这些功能由CPU的MMU提供硬件支持。
虽然刚才描述的分页虚拟内存系统帮助改善了一些由冯·诺依曼瓶颈造成的性能下降,但即使不是大多数,许多性能下降仍然存在。由于这个原因,大多数现代计算机系统采用了一种额外的策略来进一步降低性能损失:缓存。更具体地说,数据处理子系统的几乎所有现代组件,尤其是CPU,都使用称为硬件缓存的内部存储器。硬件缓存的功能非常类似于高于PSU但低于内部的处理器寄存器的更高层级的存储器。更具体地说,硬件缓存通常比PSU更快(就像PSU比SSU更快),但在存储容量方面也比PSU小(就像PSU的存储容量比SSU更小)。硬件高速缓存在许多方面与PSU类似,只是为了方便起见,硬件高速缓存只存储PSU上的数据的副本。换句话说,高速缓存用于保存频繁访问的数据的副本,从而可以比从PSU取回数据更快地访问数据。如果数据被修改,则在被写回PSU之前,可以将数据保留在高速缓存中(如果该数据仍在被使用和/或修改),因而,实际上高速缓存保存的是数据的当前副本。
硬件高速缓存和PSU之间的交互也类似于PSU和SSU之间的交互,因为包含硬件高速缓存的CPU(或其他数据处理元件)决定将哪些数据保留在硬件高速缓存中,并且还决定将哪些保留的数据移除(或写回,如果数据进行了修改但尚未写入PSU)。这在很大程度上类似于操作系统在决定哪些页面要导入到PSU和哪些页面要导出到SSU时所执行的内存管理功能。决定何时将数据取回到缓存中或何时从缓存中剔除数据的标准称为缓存算法。这种情况有些复杂,因为大多数现代CPU(和大多数其他现代数据处理元件)都有几层硬件高速缓存(称为多级缓存),这形成了缓存层次结构。硬件高速缓存通常被标记为L1、L2等,其中L1的位置最靠近处理器寄存器(即,位于高速缓存层次结构的顶部),L2的位置次靠近处理器寄存器,以此类推。多缓存遵循存储器层次结构的一般趋势,即硬件高速缓存更靠近处理器寄存器(例如,L1高速缓存)更快,但具有更小的存储容量,而更靠近PSU的硬件高速缓存更慢,但具有更大的存储容量。数据在不同高速缓存层之间的移动方式与数据在最外层高速缓存和PSU之间的移动方式大致相同。然而,硬件高速缓存和PSU的不同之处在于,不是操作系统负责数据的导入和导出,而是由CPU(或其他数据存储元件)负责在PSU和最后一级高速缓存之间或在不同级别的高速缓存之间移动数据(以及确定要移动的数据)。
如前所述,大多数现代计算机系统都使用基本的冯·诺依曼架构的修改版本。大多数现代计算机不是仅由CPU组成的数据处理子系统,而是也包含其他数据处理元件。这些其他的数据处理元件,被称为加速器,比CPU更专业。加速器不同于CPU,它使用一种特殊的架构,这种架构对于加速器所设计的特定任务来说更有效(例如,更大的串行速度、更多的并行性、更少的能量消耗)。这就是“加速器”一词的由来,加速器被设计来加速一个或多个工作负载。然而,作为对一组任务进行加速的代价,加速器在其他组任务上往往效果更差。这类加速器的一个常见例子是GPU,GPU在需要处理大量简单操作的任务上,比CPU更快,这种任务,例如经常出现在机器学习的应用中。
图7是被许多现代计算机系统所采用的改进后的冯·诺依曼架构的简化图。根据图7,该架构由数据处理子系统710和数据存储子系统720组成。如图7所示,数据处理子系统710由各种数据处理元件组成,包括中央处理单元711和加速器715。如图所示,数据处理子系统710可以具有多个中央处理单元,在图上示出了CPU 712和CPU 713,以及多个加速器,在图上示出了加速器716和加速器717。类似地,数据存储子系统720也由各种数据存储元件组成,包括主存储单元721和辅助存储单元725。如图所示,数据存储子系统720可以具有多个主存储单元,在图上示出了主存储单元(PSU)722和723,以及多个辅助存储单元,在图上示出了辅助存储单元(SSU)726和727。图上还示出了总线740,总线740连接数据处理子系统710和数据存储子系统720。总线740还可以将数据处理子系统710和数据存储子系统720的内部组件连接在一起。另外,总线740可以将数据处理子系统710和数据存储子系统720连接到I/O 730,I/O 730可以向这些子系统提供输入和输出。
图8也是被许多现代计算机系统,尤其是异构的计算机系统,所采用的架构的简化图。根据图8,主机系统801可以包括中央处理单元802、互连单元808和数据存储子系统805。中央处理单元802可以包含核803和CPU MMU 804。类似地,数据存储子系统805可以包括主存储单元806和辅助存储单元807。CPU 802可以通过互连单元808与数据存储子系统805通信(并且最终可以与主存储单元806和辅助存储单元807通信)。主机系统801还可以通过互连单元808连接到多个加速器单元,图上示出了加速器单元820和830。根据图8所示,加速器单元,例如加速器单元820,包括核(例如核821)、MMU(例如MMU 822)和主存储单元(例如主存储单元813)。
然而,尽管存在这种差异,加速器确实与CPU有一个特定的、相关联的相似之处;加速器仍然从PSU中获取要执行的指令和要使用的数据。在一些计算机系统中,加速器可以将指令和数据从PSU中提取到内部的硬件缓存中,就像CPU所做的那样。然而,由于通常必须使用复杂的系统来确保数据的一致性,这样的系统带来了复杂性。换句话说,有必要使用附加系统来确保加速器不访问正在由另一数据处理元件(例如,CPU或其他加速器)修改的PSU上的数据,由于这可能导致竞争或使用过时和无效的数据。另外,让加速器与CPU共享PSU会导致加速器和CPU之间争夺存储空间,这可能会降低系统的性能。
作为一种替代方法,在一些计算机系统中,加速器可以有自身的只有该加速器使用的内部PSU。在这种方法中,为了让加速器获取指令或数据,指令首先从中央PSU拷贝到加速器的PSU中。换句话说,增加了一个额外的步骤,加速器的内部PSU以类似于CPU处理SSU的方式处理中央PSU。请注意,在这种复杂程度下,某些系统可能存在加速器可以直接从中央PSU取回数据或直接将数据从SSU传输到其内部PSU的场景。虽然这解决了上述共享中央PSU带来的一些问题,但让加速器拥有自己的内部PSU会带来另一个低效率。即,在基本实现中,加速器的内部PSU是不透明的,相反,加速器的内部PSU暴露给使用加速器的程序,这些程序必须对其使用负责。再加上GPU上运行的程序的虚拟存储器地址与CPU上运行的同一程序的虚拟地址的不协调,这意味着零拷贝操作是不可能的。
为了解决这个限制,一些计算机系统使用系统来实现统一内存,例如异构系统架构。这允许协调中央PSU和加速器的内部PSU上使用的虚拟内存,以便在加速器上运行的程序之间和CPU(或者使用中央PSU的其他加速器)上运行的程序之间自由共享指针。换句话说,统一内存允许CPU和加速器(例如GPU)使用相同的虚拟内存空间(对于给定的程序)。
然而,当使用具有统一内存的系统时,例如异构系统架构,出于一致性的原因,加速器使用的页可能仍然必须传送到加速器的PSU中。但是,就像系统的PSU一样,加速器的PSU的空间有限。因此,页在加速器的PSU和系统的PSU之间移动的方式与页在系统的PSU和SSU之间移动的方式大致相同。但是,需要小心地管理,以避免诸如页抖动(pagethrashing)之类的问题。在许多情况下,加速器的PSU上的数据由加速器的MMU、在主机系统/OS上运行的加速器的驱动程序、或这两个元件之间的协作来管理,例如,加速器的PSU的存储器管理功能由加速器的MMU、在主机系统/OS上运行的加速器的驱动程序、或这两个元件之间的协作来管理。
图9是以上所述的加速器的简化图。如图9所示,计算机系统900可以包括主机920,主机920连接到加速器901。主机920可以包含CPU 921和数据存储子系统922。数据存储子系统922可以包括多个连接的存储器系统,图上示出了连接的存储器系统923、924和925。通常,连接的存储器系统923、924和925可以是各种存储器设备,例如,DRAM(例如,主存储单元)、SSD(例如,辅助存储单元)、HDD、磁带盘等。另外,CPU 921连接到数据存储子系统922,并且可以与数据存储子系统922交换数据。关于加速器901,根据图9,加速器901包括加速器核902、主存储单元906、存储器管理单元910和I/O集线器912。如图上所示,加速器核902可包含多个加速器核,图上示出了加速器核903、904和905。类似地,主存储单元906可以包含多个主存储单元,图上示出了主存储单元907、908和909。此外,存储器管理单元910连接到加速器核902、主存储单元906和I/O集线器912。I/O集线器912本身连接到主机920。
加速器的内存管理的一个关键部分是预取页,以避免不必要的页故障,因为从系统的CPU取回页通常需要大量的时间。然而,以前的预取方法效率较低。例如,顺序预取涉及预取固定数量的数据页,这通常导致预取的数据太少,并导致许多不必要的页故障。
为了解决在异构计算机系统中使用统一的虚拟内存将数据有效且高效地预取到加速器的主存储器上的问题,本公开的一些实施例从检测对当前未存储在加速器的主存储单元上的第一个数据页的访问尝试开始。在一些实施例中,检测对当前未存储在加速器的主存储单元上的数据页的访问尝试包括检测页故障。页故障可能是加速器上正在运行的核试图访问当前未存储在加速器的PSU上的虚拟存储器地址的结果。例如,虚拟存储器地址对应的页存储在主机系统的PSU上,或者被导出到主机系统的SSU中。在一些实施例中,检测到对当前未存储在加速器的主存储单元上的第一个数据页的访问尝试是在加速器上正在运行的核在不久的将来可能访问该页的预测结果。例如,如果核一直在以基本连续的顺序访问连续的页,那么可以预测核将会试图访问顺序稍远且尚未加载到加速器的PSU中的页。
在检测对当前未存储在加速器的主存储单元上的第一个数据页的访问尝试之后,一些实施例可以响应于检测到的访问尝试来评估加速器的活动(例如,通过图11的活动评估单元1104或图17的加速器的活动处理单元1715进行评估)。在一些实施例中,加速器的活动包括在加速器上正在运行的核的活动。核的活动可以包括更广泛的核活动,例如,当前运行的核的数量、正在由核使用的存储器的大小、已经由核引用/访问的存储器的大小,等等。加速器的活动还可以包括特定核活动,例如,特定核或一组核的活动,例如核运行的时长、正被核使用的存储器的大小、正在由核实际上引用/访问的存储器的大小、核的存储器访问模式(例如,已被引用或访问的页以及它们之间的关系)、等等。加速器的活动还可以包括最近的或历史的核的活动(包括一般的和特定的)。例如,一些实施例可以考虑最近x秒数的活动,以评估正在执行的一般意义上的核活动、或者特定核或一组核的活动的平均值或者确定正在执行的一般意义上的核活动、或者特定核或一组核的活动的趋势。加速器的活动还可以包括预测的未来的核活动,无论是一般意义上的核的活动的预测还是专用于特定核或一组核的活动预测。
另外,在一些实施例中,加速器的活动包括加速器的主存储单元的使用情况。在一些实施例中,主存储单元的使用情况包括更一般的使用情况,诸如已存储数据的页的总量、剩余的空闲/未使用空间的总量、对主存储单元中存储的页总体上的存储器访问模式、这些存储器访问的相对布置等。加速器的活动还可以包括更具体的用途,例如为特定的核存储的页总量、特定核对这些页总体上的存储器访问模式、一页或一组页在主存储单元中的停留时间、一页或一组页被引用/访问的次数,一页或一组页自上次被引用/访问以来的时间、一页或一组页是否经常被不同处理器(例如,主机系统的CPU)使用、特定页是否显示抖动迹象等。加速器的活动还可以包括主存储单元的最近或历史使用情况(包括一般的和特定的)。例如,一些实施例可以考虑主存储单元最近x秒数的使用情况,以评估主存储单元使用情况的平均值或确定主存储单元使用情况的趋势,无论是属于特定核的特定页或一组页的使用情况,或者一组页的一个页的使用情况。加速器的活动还可以包括主存储单元的预测使用情况(包括一般使用或基于特定页的使用)。
此外,在一些实施例中,加速器的活动包括与加速器有关的附加信息,例如未决核(pending kernel)的数量(例如,排队等待运行但尚未运行的核)、未决核的性质、加速器的当前温度、当前温度和最高工作温度的剩余空间(remaining headroom)、加速器当前的功率使用情况等。加速器的活动还可以包括这些与加速器有关的附加信息的最近或历史信息。例如,一些实施例可以考虑这些附加信息的最近x秒的数据,以评估主存储单元的使用情况的平均值或确定主存储单元的使用情况的趋势。加速器的活动还可以包括基于这一额外信息的预测的未来数据。
在评估加速器的活动之后,一些实施例可以确定预取粒度大小(例如,通过图11的预取粒度确定单元1106或通过图17的预取粒度处理单元1717)。在一些实施例中,预取粒度大小可以直接指示要与第一数据页一起预取的页的数量。例如,在一些实施例中,预取粒度大小可以指示包括第一数据页在内的要预取的页数是十六页。另外,在一些实施例中,预取粒度大小可以间接指示要与第一数据页一起预取的页的数量。例如,在一些实施例中,页是固定大小的(例如,4KiB),并且这些预取粒度大小可以指示要取回的数据(包括第一数据页)的数据总量(例如,256KiB)。例如,在此示例中,256KiB/4KiB=64,因此要取回的页数总计为64页。
在一些实施例中,预取粒度大小基于对加速器的活动评估。在一些实施例中,预取粒度大小还可以基于第一数据页和其周围连续的数据页的特征,各种预取粒度大小将导致相应数据页被获取或被预取。例如,在一些实施例中,预取粒度大小部分地基于页面先前被提取或逐出(evict)的次数(如果有的话)等。另外,在一些实施例中,所选择的预取粒度大小基于获取策略(fetching strategy)。获取策略包括确定要获取/预取的最佳页数的标准/算法,所述获取策略可能还包括用于评估(或估计)不同预取粒度大小将导致被获取的页或页组(group of pages)的特征的启发法。
在一些实施例中,在已确定预取粒度大小之后,预取粒度大小的连续页的数据块(包含第一数据页)被从连接到加速器的存储器系统传送到加速器的PSU中(例如,通过图11的获取单元1102或通过图17的数据迁移控制模块1714)。在一些实施例中,这涉及从加速器连接到的主机系统的CPU正在使用的主存储单元取出数据(例如,从图10的数据存储子系统1022取回数据或者从图17的存储子系统1723中取回数据)。在一些实施例中,这涉及从连接到同一系统的其他加速器的主存储单元中取回数据。此外,在一些实施例中,这涉及直接从连接到该系统的辅助存储单元中取回数据。
图10是根据本公开的一些实施例的采用管理加速器的主存储单元的方法的示例性计算机系统1000的示意图。虽然一般性地描述了系统1000,但系统1000可以在配置为执行例如图11所描述的方法的任何计算机上实现,例如,服务器、台式计算机、笔记本电脑、平板电脑,等等。如图10所示,计算机系统1000包括主机1020,主机1020连接到加速器1001。主机1020包含CPU 1021和数据存储子系统1022。数据存储子系统1022可以包括多个连接的存储器系统,图上示出了连接的存储器系统1023、1024和1025。通常,连接的存储器系统1023、1024和1025可以是各种存储器设备,例如DRAM(例如,主存储单元)、SSD(例如,辅助存储单元)、HDD、磁带盘等。另外,CPU 1021连接到数据存储子系统1022,并且可以与数据存储子系统1022交换数据。
根据图10,关于加速器1001,加速器1001包括加速器核1002、主存储单元1006、存储器管理单元1010和I/O集线器1012。如图上所示,加速器核1002可包含多个加速器核,图上示出了加速器核1003、1004和1005。类似地,主存储单元1006可以包含多个主存储单元,图上示出了主存储单元1007、1008和1009。另外,存储器管理单元1010还具有预取引擎1011,该预取引擎1011例如可以实现图12所描述的方法。此外,存储器管理单元1010连接到加速器核1002、主存储单元1006和I/O集线器1012。I/O集线器1012本身连接到主机1020。
图11是根据本公开的一些实施例的加速器的存储器管理单元(MMU)的简化图。根据图11,存储器管理单元1010(来自图10)可以具有页故障处理单元1101、获取单元1102、页表1103和预取引擎1011(来自图10)。预取引擎1011本身具有活动评估单元1104、合并单元1105和预取粒度确定单元1106。如输入箭头所示,加速器的存储器管理单元1010可以接收页故障。当接收到页故障时,页故障处理单元1101通过准备取回页故障中引用的页来响应,页故障处理单元1101可以立即这样做,也可以在响应之前等待一定的时间。在任何情况下,一旦页故障处理单元1101开始响应页故障,它可以提示活动评估单元1104基于加速器的存储器状态(momory stage)和内核信息(例如,关于在加速器上运行的进程的信息)来评估加速器的活动。
基于活动评估单元1104的活动评估和在页故障中请求的页,预取粒度确定单元1106可以确定预取粒度大小。获取单元1102然后可以获取预取粒度大小的、由页组成的数据块,该数据块包含在页故障中引用的第一数据页。在一些实施例中,预取粒度大小的数据块可以与预取粒度大小进行字节对齐(例如,如果预取粒度大小是64KiB,那么块是64KiB的字节对齐)。在取回预取粒度大小的数据块时,获取单元1102可以在页表1103中为它们创建条目。然后,获取单元1102可以将取回的页存储到加速器的主存储单元(例如,图10的一个主存储单元1006,例如PSU 1007)中。
另外,在页故障处理单元1101接收到第一页故障之后,但在预取粒度确定单元1106确定预取粒度大小之前,页故障处理单元1101可以接收引用第二数据页的第二页故障。在此事件中,页故障处理单元可以提示合并单元1105以确定页故障是否将被合并到一个取回操作中。基于活动评估单元1104的活动评估和页故障中请求的页,合并单元1105可以确定是否应该将在第一页故障中引用的第一数据页和在第二页故障中引用的第二数据页作为一个连续页的块取回。为此,合并单元1105可以与预取粒度确定单元1106合作,以确定是否设置预取粒度大小,使得连续页的块包括第一数据页和第二数据页。如果预取粒度确定单元1106利用来自合并单元1105的输入设置预取粒度大小,使得连续页的块包括第一数据页和第二数据页,则合并单元1105将第一数据页的取回和第二数据页的取回合并为一个取回操作。否则,合并单元1105可以向页故障处理单元1101报告第二页故障将不会与第一页故障合并,从而提示页故障处理单元1101可自行响应第二页故障(例如,以处理第一页故障的相同方式)。
通常,预取引擎1011可以包括硬件、软件、或硬件和软件的组合。例如,获取单元1102可以通过GPU上的电路来实现,该电路接收存储器地址,然后使用存储器地址从连接的存储器系统中取回页并将它们存储在加速器的PSU上。类似地,在一些实施例中,加速器的存储器管理单元1010可以具有用于初始接收来自在加速器上运行的核的页故障的电路(图上示出页故障处理单元1101)。该电路可以反过来触发页故障处理例程。页故障处理例程可以是GPU上的固件,该电路触发该固件在在GPU上开始执行(以类似于CPU上的应用程序的页故障异常如何触发上下文切换到内核模式并执行内核的页故障处理单元的方式)。然后,该页故障处理例程可以通过检查存储器状态(例如,加速器的PSU的上下文)来评估加速器的活动来实现活动评估单元1104。页故障处理单元还可以通过使用活动评估和在第一页故障中引用的页来确定预取粒度大小(例如,预取哪些页,如果有的话)来实现预取粒度确定单元1106。然后,页故障处理单元可以通过使用活动评估和在第二页故障中引用的页来确定预取粒度大小是否将使得连续页的块包括第一数据页和第二数据页两者来实现合并单元1105。
然而,在一些实施例中,活动评估单元1104(或活动评估单元1104的一部分)可以替换为硬件实现的电路。例如,加速器的存储器管理单元1010可以具有专用于监视由加速器上正在运行的核访问或引用的页的电路。该信息可以存储在加速器的存储器管理单元1010内部的缓冲器中。然后,当页故障发生时,页故障处理单元可以触发固件例程,该固件例程使用存储在缓冲器中的信息,并可能结合对加速器的PSU的状态和使用的分析,以得出更完整的活动评估。以类似的方式,预取粒度确定单元1106可以利用固件来选择预取粒度大小,但随后使用专用电路处理从连接的存储器系统取回的页面中的预取粒度大小的转换。此外,获取单元1102的一部分可以实现为固件。例如,获取单元1102内的专用电路可以执行取回操作,但可以调用固件来更新页表1103。
图12是根据本公开的一些实施例的用于管理加速器的主存储单元的示例性方法的流程图。如图上所示,在步骤1202中,检测到第一数据页的访问尝试。例如,加速器的存储器管理单元1010可以检测由在加速器上运行的核执行的引用特定虚拟存储器地址的指令。接下来,在步骤1203中,确定第一数据页是否存储在加速器的主存储单元上。这可以例如由存储器管理单元1010来执行,其可以查阅所触发的核的页表,以确定包含所引用的虚拟存储器地址的页是否在加速器的主存储单元中被分配了相应的物理地址。如果第一数据页存储在加速器的主存储单元上,则该方法返回到步骤1202。另一方面,如果第一数据页没有存储在加速器的主存储单元上,则该方法前进到步骤1204。
在步骤1204,评估加速器的活动。例如,预取引擎1011的活动评估单元1104可以检查加速器的当前的存储器状态。在一些实施例中,这可能涉及分析正被使用的加速器的PSU的大小、那些页的访问模式,等等。然后,在步骤1205中,选择预取粒度大小。例如,预取粒度确定单元1106可以基于第一数据页和活动评估,选择要取回的、一定页数的数据(例如64KiB)。在一些实施例中,这可能涉及将加速器的主存储单元的页的大小乘以2的倍数。通常,可基于步骤1204所评估的加速器的活动和获取策略来选择预取粒度大小。
在步骤1205之后,在步骤1206中,从连接到加速器的存储器系统将预取粒度大小的连续页的数据块取回到加速器的主存储单元中。这可以包括,例如,获取单元1102访问连接的存储器系统(例如,图10的连接的存储器系统1022),以将数据页从连接的存储器系统复制到缓冲器或加速器的PSU中。在步骤1206之后,该方法结束。
图13是根据本公开的一些实施例的示例性的加速器的架构的更详细的示意图。具体来说,图13示出了神经网络处理架构1300,其可以是用于人工神经网络的加速器单元、FPGA、ASIC、或各种其他类型的加速器。如图13所示,处理架构1300可以包括加速器处理系统1302、存储器控制器1304、直接存储器访问(DMA)单元1306、全局存储器1308、联合测试动作组(JTAG)/测试访问端(TAP)控制器1310、外围接口1312、总线1314等。应当理解,加速器处理系统1302可以基于所通信的数据执行算法操作(例如,机器学习的操作)。
加速器处理系统1302可以包括命令处理器1320和多个加速器核1330。命令处理器1320可用于控制和协调一个或多个加速器核,图上示出了加速器核1331、1332、1333、1334、1335、1336、1337、1338和1339。加速器核1330中的每一个可以提供用于并行计算的一组突触/神经元电路(例如,人工神经网络)。例如,图13中的加速器核1330的第一层可以提供表示人工神经网络的输入层的电路,而加速器核1330的第二层可以提供表示人工神经网络的隐藏层的电路。在一些实施例中,加速器处理系统1302可以实现为一个或多个GPU、NPU、TPU、FPGA、ASIC、或其他异构加速器单元。
例如,加速器核1330可以包括一个或多个处理元件,每个处理元件包括单指令多数据(SIMD)架构,该架构包括一个或多个处理单元,该一个或多个处理单元被配置为基于从命令处理器1320接收的指令执行一个或多个操作(例如,乘法、加法、乘-累加等)。为了对所通信的数据包执行操作,加速器核1330可以包括用于处理数据包中的信息的一个或多个处理元件。每个处理元件可以包括任意数量的处理单元。在一些实施例中,加速器核1330可以被认为是一个瓦片(tile)等。在一些实施例中,多个加速器核1330可以彼此通信耦合。例如,多个加速器核1330可以与单个定向环形总线耦接,以支持用于大型神经网络模型的高效流水线。下面将参照图13详细说明加速器核1330的结构。
加速器的处理架构1300还可以与主机单元1340通信。主机单元1340可以是一个或多个处理单元(例如,X86中央处理单元)。如图13所示,主机单元1340可以与主机存储器1342相关联。在一些实施例中,主机存储器1342可以是与主机单元1340相关联的内部存储器或外部存储器。在一些实施例中,主机存储器1342可以包括主机磁盘,主机磁盘是被配置为向主机单元1340提供附加存储器的外部存储器。主机存储器1342可以是双倍数据速率同步动态随机存取存储器(例如,DDR SDRAM)等。与集成在一个或多个处理器内部的片上存储器(充当更高级别的高速缓存)相比,主机存储器1342可以被配置为以较慢的访问速度存储大量数据。存储在主机存储器1342中的数据可以被传送到加速器的处理架构1300以用于执行神经网络模型。
在一些实施例中,具有主机单元1340和主机存储器1342的主机系统可以包括编译器(未示出)。编译器是将用一种编程语言编写的计算机代码转换成NPU指令以创建可执行程序的程序或计算机软件。在机器学习的应用中,编译器可以执行各种操作,例如,预处理、词法分析、解析、语义分析、将输入程序转换为中间表示、代码优化和代码生成,或其组合。例如,编译器可以编译神经网络以生成静态参数,例如神经元之间的连接和神经元的权重。
在一些实施例中,主机系统1340可以推送一个或多个命令到加速器处理系统1302。如上文所述,这些命令可由加速器处理系统1302的命令处理器1320进一步处理,先临时存储在加速器的处理架构1300的指令缓冲器中,再分配给一个或多个对应的加速器核(例如,加速器核1331和1332)或处理元件。一些命令可以指示DMA单元1306将指令(由编译器生成)和数据从主机存储器1342加载到全局存储器1308中。然后可以将已加载的指令分配给已指派有相应任务的每个加速器核,并且这些加速器核可以处理这些指令。
可以理解,由加速器核1330接收的前几个指令可以指示加速器核1330将来自主机存储器1342的数据加载/存储到加速器核的一个或多个本地存储器(例如,图14的本地存储器1412)中。加速器核1330中的每一个然后可以启动指令流水线,这包括从指令缓冲器中获取指令(例如,经由序列器)、解码指令(例如,经由DMA单元1306)、生成本地存储器地址(例如,对应于操作数)、读取源数据、执行或加载/存储操作,然后写回结果。
命令处理器1320可以与主机单元1340交互并将相关命令和数据传递到加速器处理系统1302。在一些实施例中,命令处理器1320可以在内核模式驱动程序(KMD)的监督下与主机单元1340交互。在一些实施例中,命令处理器1320可以修改给每个加速器核的相关命令,使得加速器核1330可以尽可能并行地工作。修改后的命令可以存储在指令缓冲器中。在一些实施例中,命令处理器1320可被配置为协调一个或多个加速器核来并行执行。
存储器控制器1304,也被称为存储器管理单元,可以管理从具有片上存储器块(例如,第二代高带宽内存块(HBM2))的全局存储器1308中的特定存储器块读或写数据,所述片上存储器块作为加速器的主存储单元/主存储器。例如,存储器控制器1304可以管理从加速器处理系统1302外部(例如,来自DMA单元1306或与另一NPU对应的DMA单元)或从加速器处理系统1302内部(例如,来自加速器核的本地存储器,例如,加速器核1331,并经由2D网格控制的命令处理器1320)读/写数据。此外,尽管图13中示出了一个存储器控制器,可以理解,在加速器单元1300中可以提供多于一个的存储器控制器。例如,全局存储器1308内的每个存储器块(例如HBM2)都有一个存储器控制器。在一些实施例中,全局存储器1308可以经由DMA单元1306存储来自主机存储器1342的指令和数据。然后,这些指令可以被分发到已指派了相应任务的每个加速器核的指令缓冲器中,并且这些加速器核相应地处理这些指令。
存储器控制器1304可以生成存储器地址并启动存储器读或写周期。存储器控制器1304可包含可由一个或多个处理器写入和读取的若干个硬件寄存器。这些寄存器可以包括存储器地址寄存器、字节计数寄存器、一个或多个控制寄存器以及其他类型的寄存器。这些寄存器可以指定源、目的地、传输方向(从输入/输出(I/O)设备读取或写入到I/O设备)、传输单元的大小、在一个脉冲中传输的字节数、或存储器控制器的其他典型特征的某种组合。存储器控制器1304还可以具有预取引擎(未示出),例如图10和图11中的预取引擎1011。存储器控制器1304中的预取引擎可以控制从主机存储器1342预取到的页的数量。
DMA单元1306可以协助在主存储器1342和全局存储器1308之间传送数据。例如,DMA单元1306可以协助将数据或指令从主机存储器1342加载到加速器核1330的本地存储器中。DMA单元1306还可以协助在多个加速器之间传送数据。此外,DMA单元1306可以协助在多个NPU(例如,在NPU上实现的加速器处理系统1302)之间传送数据。例如,DMA单元1306可以协助在多个加速器核1330之间或在每个加速器核的内部传送数据。DMA单元1306可以允许片外设备访问片上存储器和片外存储器,而不引起CPU中断。因此,DMA单元1306还可以生成存储器地址并启动存储器读或写周期。DMA单元1306还可以包含可由一个或多个处理器写入和读取的若干个硬件寄存器,这些硬件寄存器包括存储器地址寄存器、字节计数寄存器、一个或多个控制寄存器、和其他类型的寄存器。这些寄存器可以指定源、目的地、传输方向(从I/O设备读取或写入I/O设备)、传输单元的大小、或在一个脉冲中传输的字节数的某种组合。应当理解,加速器单元1300可包括第二DMA单元,第二DMA单元可用于在其他多个神经网络处理架构之间传输数据,以允许多个神经网络处理架构在不涉及主机CPU的情况下直接通信。
JTAG/TAP控制器1310可以指定专用调试端口实现串行通信接口(例如,JTAG接口),以低开销地访问NPU,而不需要对系统地址和数据总线的直接外部访问。JTAG/TAP控制器1310还可以具有片上测试访问接口(例如,TAP接口),该接口实现对一组测试寄存器进行访问的协议,这些测试寄存器用于呈现各个部分的芯片逻辑电平和设备能力。
外围接口1312(例如外围组件互连快线(PCIe)接口)如果存在,则用作(并且通常是)芯片间总线,以提供加速器单元1300和其他设备之间的通信。总线1314(例如I2C总线)包括芯片内总线和芯片间总线。芯片内总线将系统架构要求的所有内部组件相互连接。虽然并非所有组件都连接到每个其他组件,但所有组件都有一些与它们需要通信的其他组件的连接。芯片间总线将NPU与其他设备连接起来,例如片外存储器或外围设备。例如,总线1314可以提供跨加速器核的高速通信,并且还可以(经由加速器处理系统1302)将加速器核1330与诸如片外存储器或外围设备的其他单元连接。通常,如果存在外围接口1312(例如,芯片间总线),总线1314仅与芯片内总线有关,尽管在一些实现中,总线1314仍可与专用的总线间通信有关。
加速器处理系统1302可以被配置为基于人工神经网络执行操作。尽管在本公开的一些实施例中,加速器处理架构1300可用于卷积神经网络(CNN),但应当理解,加速器处理架构1300可用于各种神经网络,例如深度神经网络(DNN)、递归神经网络(RNN)等。此外,一些实施例可被配置为用于各种处理架构,例如CPU、GPGPU、GPU、NPU、TPU、FPGA、ASIC、任何其他类型的异构加速器的处理单元(HAPU)等。
操作时,根据本公开的一些实施例,可以使用DMA单元1306将人工神经网络从主机存储器1342传送到加速器单元1300。主机单元1340可以经由外围接口1312连接到加速器处理架构1300。在一些实施例中,人工神经网络和人工神经网络的中间值可以存储在由存储器控制器1304控制的全局存储器1308中。最后,在AI处理器1302上运行人工神经网络,命令处理器1320管理人工神经网络输入的处理。
图14是根据本公开的一些实施例的示例性的加速器核的架构的示意图。如图14所示,加速器核1401(例如,图13的加速器核1330)可以包括一个或多个操作单元,例如第一操作单元1402和第二操作单元1404、存储器引擎1406、定序器1408、指令缓冲器1410、常数缓冲器1414、本地存储器1412等。
一个或多个操作单元可以包括第一操作单元1402和第二操作单元1404。第一操作单元1402可以被配置成对接收的数据(例如,矩阵)执行操作。在一些实施例中,第一操作单元1402可以包括被配置为执行一个或多个操作(例如,乘法、加法、乘-累加、元素操作等)的一个或多个处理单元。在一些实施例中,第一操作单元1402被配置成加速卷积操作或矩阵乘法操作的执行。第二操作单元1404被配置为执行池化操作、插值操作、感兴趣区域(ROI)操作等。在一些实施例中,第二操作单元1404包括插值单元、池化数据路径等。
存储器引擎1406可以被配置为在对应的加速器核1401内部或在两个加速器核之间执行数据拷贝。DMA单元1306(来自图13)可以协助在对应的加速器核1401内部或在两个加速器核之间拷贝数据。例如,DMA单元1306可以支持存储器引擎1406执行从本地存储器(例如,图14的本地存储器1412)到相应操作单元的数据拷贝。存储器引擎1406还可以被配置为执行矩阵转置以使矩阵适合于在操作单元中使用。
定序器1408可以与指令缓冲器1410耦合,并被配置成取回命令并将命令分发给加速器核1401的组件。例如,定序器1408可以将卷积命令或乘法命令分发给第一操作单元1402,将池化命令分发给第二操作单元1404,或者将数据拷贝命令分发给存储器引擎1406。定序器1408还可以被配置成监视神经网络任务的执行,并将神经网络任务的子任务并行化,以提高执行效率。在一些实施例中,第一操作单元1402、第二操作单元1404和存储器引擎1406可以根据存储在指令缓冲器1410中的指令在定序器1408的控制下并行运行。
指令缓冲器1410可以被配置为存储属于相应的加速器核1401的指令。在一些实施例中,指令缓冲器1410与定序器1408耦合并向定序器1408提供指令。在一些实施例中,存储在指令缓冲器1410中的指令可以由命令处理器1320(来自图13)传送或修改。常数缓冲器1414可以被配置为存储常数值。在一些实施例中,存储在常数缓冲器1414中的常数值可由诸如第一操作单元1402或第二操作单元1404的操作单元使用,以用于批量归一化、量化、反量化(de-quantization)等。
本地存储器1412可以提供具有快速读/写速度的存储空间。为了减少与全局存储器的可能交互,可以以大容量实现本地存储器1412的存储空间。利用大容量的存储空间,可以在加速器核1401内执行大部分数据访问从而减少数据访问引起的延迟。在一些实施例中,为了最小化数据加载造成的延迟和能量消耗,集成在芯片上的静态随机存取存储器(SRAM)可以用作本地存储器1412。在一些实施例中,本地存储器1412可以具有192MB或以上的容量。根据本公开的一些实施例,本地存储器1412可均匀地分布在芯片上,以缓解密集布线和发热问题。
图15是根据本公开的一些实施例的示例性的加速器的替代架构的示意图。类似于图13的示例性的加速器架构,图15示出了可以在其上实现本公开的一些实施例的加速器架构1500。在各种实施例中,加速器架构1500可以是用于人工神经网络的加速器、FPGA、ASIC、或各种其他类型的加速器。如图15所示,架构1500可以包括异构计算单元(HCU)1501、对应的主机单元1510和主机存储器1511等。应当理解,HCU 1501可以是用于促进神经网络计算任务的专用计算设备。例如,HCU 1501可以基于所通信的数据执行算法操作(例如,机器学习操作)。HCU 1501可以是加速器,例如GPU、NPU、TPU、FPGA、ASIC等。
HCU 1501可以包括一个或多个计算单元1502、存储器分层结构1505、控制器1506和互连单元1507。每个计算单元1502可以从存储器分层结构1505中读取数据并将数据写入到存储器分层结构1505中,并且对数据执行算法操作(例如,乘法、加法、乘-累加等)。在一些实施例中,计算单元1502可以包括用于执行不同操作的多个引擎。例如,如图15所示,计算单元1502可以包括点积引擎1503、向量引擎1504等。点积引擎1503可以执行诸如乘法和卷积的点积操作。向量引擎1504可以执行诸如加法的向量操作。
存储器分层结构1505可以具有片上存储器块(例如4个HBM2的块)来作为主存储单元/主存储器。存储器分层结构1505还可以具有未示出的存储器控制器或存储器管理单元。存储器分层结构1505可以存储数据和指令,并向诸如计算单元1502和互连单元1507的其他组件提供对其存储的数据和指令的高速访问。互连单元1507可以在HCU 1502和诸如主机单元或另一HCU的其他外部组件之间传送数据。互连单元1507可以包括PCIe接口1508和芯片间连接1509。PCIe接口1508提供HCU与主机单元1510或以太网之间的通信。芯片间连接1509作为芯片间总线,将HCU与诸如其他HCU、芯片外存储器或外围设备的其他设备连接起来。存储器分层结构1505的存储器管理单元还可以具有预取引擎(未示出),例如图10中的预取引擎1011。存储器管理单元中的预取引擎可以控制从主机存储器1511预取的页的数量。
控制器1506可以控制和协调诸如计算单元1502、互连单元1507和存储器分层结构1505的其他组件的操作。例如,控制器1506可以控制计算单元1502中的点积引擎1503或向量引擎1504以及互连单元1507,以促进这些组件之间的并行化。
主机存储器1511可以是片外存储器,例如主机CPU的存储器。例如,主机存储器1511可以是DDR存储器(例如DDR SDRAM)等。与集成在一个或多个处理器内的片上存储器相比(作为更高级别的高速缓存),主机存储器1511被配置为以较慢的访问速度存储大量数据。主机单元1510可以是一个或多个处理单元(例如,X86 CPU)。在一些实施例中,具有主机单元1510和主机存储器1511的主机系统可以包括编译器(未示出)。编译器是将用一种编程语言编写的计算机代码转换成用于HCU 1501的指令以创建可执行程序的程序或计算机软件。在机器学习的应用中,编译器可以执行各种操作,例如,预处理、词法分析、解析、语义分析、将输入程序转换为中间表示、代码优化、和代码生成,或其组合。
图16示出了根据本公开的实施例的安装有神经网络处理架构1601的示例性的云系统1606的示意图。如图16所示,云系统1606可以提供具有人工智能(AI)能力的云服务,并且可以包括多个计算服务器(例如,计算服务器1607和1608)。在一些实施例中,计算服务器1607例如可以安装有加速器架构1300(如图13所示)或加速器架构1500(如图15所示)。为了简单明了,图16示出的神经网络处理架构1601是加速器架构1500的简化版本。
在神经网络处理架构1500的协助下,云系统1606可以提供图像识别、面部识别、翻译、3D建模等扩展的AI能力。可以理解,神经网络处理架构1500可以以其他形式部署到计算设备。例如,神经网络处理架构1500也可以集成在计算设备中,例如智能手机、平板电脑和可穿戴设备。此外,尽管图13至图16示出了具体的架构,但可以理解,可以使用任何提供执行并行计算能力的HCU或加速器。
图17是示出如何由主机系统,例如通过设备驱动程序,来决定和设置预取粒度大小的简化图。更准确地说,图17示出了主机系统1721的CPU 1722如何执行加速器1701的驱动器1710,以允许主机1720与加速器1701接口。具体地,主机系统1721利用驱动器1710的存储器管理组件1711来确定取回在页故障中引用的页的预取粒度大小。根据图17,图形处理单元(GPU)1702的GMMU 1703可以将关于页故障的信息、核信息(例如,触发页故障的核的信息)和存储器状态信息(例如,关于加速器的主存储单元的使用信息)一起发送到驱动器1710的存储器管理组件1711。
存储器管理组件1711可通过页故障处理单元1713响应页故障,其可触发存储器管理组件1711使用加速器的活动处理单元1715来基于加速器的存储器状态和核信息(例如,关于运行在加速器上的进程的信息)来评估加速器的活动。在一些实施例中,加速器的活动处理单元1715可以是在CPU 1722上执行的软件,其分析当前状态和加速器的PSU的使用信息(或者该信息作为页故障的一部分被提供),以产生对加速器活动的评估。基于加速器的活动处理单元1715的活动评估和在页故障中请求的页面,预取粒度处理单元1717可以确定预取粒度大小。在一些实施例中,预取粒度处理单元1717可以是在CPU 1722上执行的软件,其使用由活动评估处理单元1715产生的评估来确定要预取的页数(如果有的话)。
接下来,数据迁移控制模块1714然后可以取回预取粒度大小的页的数据块,该块包含了在页故障中引用的第一数据页。这些页可能通过与CPU 1722的接口从主机系统1721的存储器子系统1723取回。在一些实施例中,预取粒度大小的页的数据块可以是预取粒度大小的字节对齐块(例如,如果预取粒度大小是64KiB,那么块是64KiB的字节对齐块)。最后,数据迁移控制模块1714然后可以将这些页发送到GPU(例如,执行页迁移)。
在一些实施例中,预取粒度大小可以基于对与页故障中引用的第一数据页相邻的页在一定时间跨度内被取回并随后被移出的频率的评估。例如,有必要检测被重复预取但未被使用的例子。例如,有必要检测页抖动的例子(例如,当页频繁地被移出然后被取回,导致性能下降时)。在一些实施例中,这涉及例如记录哪些页面被移出。这些日志还可以包括移出发生时的时间戳,只能保留x个最近的条目,只能保留一定时间的条目,或者只保留用于取回的x个页的一个条目。在一些实施例中,将移出的页的日志(或跟踪哪些页被移出的其他方法)与各种潜在的预取粒度大小都会导致被预取的页进行比较。
相关地,在一些实施例中,预取粒度大小可以基于对触发核的存储器访问模式的评估。例如,在一些实施例中,可以评估触发核的最近的页引用(例如,包含在这些页中的虚拟地址)。如果这些引用指示触发核正在使用的页彼此接近或呈现出空间区域性,那么预取粒度大小可以增加(既然基于触发核过去的活动,它很可能使用这些页)。相反地,如果触发核的引用指示所述引用是对彼此相隔很远的页的引用,并且不表现出空间区域性,则可减小预取粒度大小(既然基于触发核过去的活动,它不太可能使用这些页)。以类似的方式,可评估核对所有页的引用(或它们的某些子集)以确定核的页访问是否倾向于呈现出空间区域性的总体趋势。
在一些实施例中,每次试图访问未存储在加速器的主存储单元上的数据页时(例如,每个页故障),都可以确定预取粒度大小。相反,在一些实施例中,预取粒度大小可能不是针对每个页故障确定的。例如,在一些实施例中,可以在核开始运行时为每个核静态地设置预取粒度大小。在其他实施例中,预取粒度大小可改为仅以设定的间隔改变。例如,在一些实施例中,预取粒度大小只能在经过一定时长或发生一定量的页故障之后改变。类似地,在一些实施例中,可以在某些事件发生时改变预取粒度大小。作为示例,一些实施例当特定时间间隔内发生特定数量的页故障时更新预取粒度大小(例如,这指示页抖动正在发生)。
在一些实施例中,预取粒度大小基于用于响应由触发核引起的先前的页故障的预取粒度大小。另外,在一些实施例中,预取粒度大小也可以基于获取策略。在一些实施例中,获取策略基于对已被取回并且当前存储在加速器的主存储单元上的与第一数据页相邻的数据页的数量的评估。在一些实施例中,获取策略基于对邻近第一数据页的数据页可能在设定时间范围内被访问的可能性的评估。在一些实施例中,获取策略可以基于对触发核以特定时间跨度访问/使用的数据页的空间区域性的评估。
在一些实施例中,预取粒度大小可以是2的整数倍(例如,21,22,23,……)。相关地,在一些实施例中,预取粒度大小的连续页的块按预取粒度大小字节对齐(例如,如果预取粒度大小是64KiB,那么连续页的块是64KiB字节对齐)。换句话说,预取粒度大小的块可以在预取粒度大小的倍数的存储器地址处开始。例如,如果预取粒度大小为512KB,则预取粒度大小的块可以从以8000(例如,0xXXXXXXXXXXX80000)或以00000(例如,0xXXXXXXXXXXX00000)为结尾的虚拟存储器地址开始。通常,正在取回的页(而不是正在预取的周围页)可能出现在预取粒度大小的块中的任何地方;该页可以出现在开头(意味着所有预取的页都在它后面)、结尾(意味着所有预取的页都在它前面)或中间(意味着预取的页都在它前面和后面)。
图18是根据本公开的一些实施例的连续页的字节对齐块的示意图。如图18所示,正在取回的页(例如,在页故障中引用的页)可能出现在页块的开始、中间或结尾。也如图18所示,预取粒度大小如何基于主存储单元的当前正在使用的存储器大小和尚未提取的页的数量而变化。
在一些实施例中,立即响应对未存储在加速器的PSU上的数据页的访问尝试(例如,页故障)。在一些其他实施例中,不会立即响应页故障。例如,在一些实施例中,可仅在自接收到页故障之后经过一定时长之后才响应页故障。在一些实施例中,只能以设定的间隔响应页故障。例如,在一些实施例中,可仅每x微秒响应一次页故障。
在一些实施例中,合并(例如,合并在一起)对未存储在加速器的PSU上的数据页的多个访问尝试。例如,在一些实施例中,在接收到第一页故障之后,但是在响应它之前,收到来自同一触发核的第二页故障。在一些实施例中,当已经接收到来自相同核的多个页故障但尚未响应时,可以将两个页故障合并在一起(例如,通过图11的合并单元1105或通过图17的合并处理单元1716)。例如,在一些实施例中,可以比较第一页(由第一页故障引用的)和第二页(由第二页故障引用的)。如果两个页的数据彼此足够接近,则可以设置预取粒度大小,使得基于第一数据页预取的多个页包括第二数据页。是否将预取粒度大小设置为足够的大小以一并预取第二数据页和第一数据页可以取决于加速器的活动评估。在一些实施例中,如果预取粒度大小未设置为使得第二数据页与第一数据页一并预取的大小,则页故障不会被合并。
相关地,在一些实施例中,可以在接收到第一页故障、确定预取粒度大小以及开始取回页块的过程之后接收第二页故障。在这种情况下,在一些实施例中,确定在第二页故障中引用的数据页是否包含在响应于第一页故障而取回的预取粒度大小的页块中,如果在第二页故障中引用的页包括在该页块中,则既然第二数据页已经作为响应第一页故障的一部分被取回,第二页故障与第一页故障合并。
在一些实施例中,预取粒度大小被设置为第一数据页的大小(例如,设置为不预取任何页面,而只取回第一数据页)。在一些实施例中,在加速器的主存储单元接近某一容量阈值时(例如,当少于5%的加速器的PSU未使用时)进行。在一些实施例中,当核使用的第一数据页接近存储在加速器的PSU上的一定数量的页(就数据而言)时,预取粒度大小可以设置为第一数据页的大小。这可以是相对的(例如,当核使用的加速器的PSU存储容量超过40%时)或绝对的(当核使用加速器的PSU超过10GiB时)。
在一些实施例中,当在加速器运行的核尝试访问一个或多个所引用的页时触发取回一个或多个页。
在一些实施例中,从中取回数据页的存储器系统是主机系统(例如,加速器正在其中运行的系统)的主存储单元。在这些实施例中的一些中,加速器和主机系统都可以实现统一的虚拟存储器系统。
在一些实施例中,加速器可以是图形处理单元(GPU)、神经网络处理单元(NPU)、张量处理单元(TPU)、现场可编程门阵列(FPGA)、或专用集成电路(ASIC)、或其他异构加速器单元。
在一些实施例中,还提供了存储指令的非暂时性计算机可读存储介质,并且指令可以由设备执行以执行上述方法。非暂时性介质的常见形式包括,例如,软盘、磁盘、硬盘、固态驱动器、磁带、或任何其他磁性数据存储介质、CD-ROM、任何其他光学数据存储介质、具有孔图案的任何物理介质、RAM、PROM、和EPROM、FLASH-EPROM、或任何其他闪存、NVRAM、高速缓存、寄存器、任何其他存储芯片或盒式存储器、以及它们的联网版本。该设备可以包括一个或多个处理器(CPU)、输入/输出接口、网络接口、和/或存储器。
可以使用以下句子进一步描述各个实施例。
1、一种为加速器取回数据的方法,所述方法包括:
检测对未存储在所述加速器的主存储单元上的第一数据页的访问尝试;
响应于检测到对所述第一数据页的访问尝试:
评估所述加速器的活动;
基于所述加速器的活动评估,确定预取粒度大小;以及
将所述预取粒度大小的连续页的数据块从与所述加速器耦接的存储器系统传送到所述主存储单元中,其中,所传送的所述连续页的数据块包括所述第一数据页。
2、根据项1所述的方法,其中,所述预取粒度大小基于先前的预取粒度大小,所述先前的预取粒度大小用于响应由触发核引起的先前的页故障。
3、根据项1至2任意一项所述的方法,还包括:
检测对未存储在所述加速器的主存储单元上的第二数据页的第二访问尝试;以及
基于所述第一数据页和第二数据页的相邻性,合并页故障并设置所述预取粒度大小,使得所述连续页的数据块包括所述第一数据页和所述第二数据页。
4、如项1-3任一项所述的方法,其中,当所述加速器的主存储单元上未被所述加速器上运行的任意核使用的所述主存储单元的大小小于所述主存储单元的存储容量的5%时,所述预取粒度大小为所述第一数据页的大小。
5、根据项1-4任一项所述的方法,其中,所述连续页的数据块按所述预取粒度大小字节对齐。
6、根据项5所述的方法,其中,所述预取粒度大小为64KiB、128KiB、256KiB、512KiB、1MiB、2MiB、4MiB、8MiB或16MiB。
7、根据项1-6任一项所述的方法,其中,所述预取粒度大小基于获取策略,和所述获取策略基于:
与已存储在所述主存储单元上的第一数据页相邻的页的数量、与所述第一数据页相邻的页在设定时间范围内被访问的可能性、或正被触发核使用的数据页的空间区域性,其中,所述触发核正在所述加速器上执行并且试图访问所述第一数据页。
8、根据项1-7任一项所述的方法,其中,所述检测对所述第一数据页的访问尝试包括接收由试图访问所述第一数据页的触发核所触发的页故障。
9、根据项1-8任一项所述的方法,其中,所述存储器系统为主机系统的主存储单元,所述加速器和所述主机系统使用统一的虚拟存储器系统。
10、根据项1-9任一项所述的方法,其中,所述加速器的活动包括:
所述加速器的主存储单元上被所述加速器上运行的触发核使用的所述主存储单元的大小,所述触发核触发对所述第一数据页的访问;
所述加速器的主存储单元上被所述加速器上运行的非触发核的任意核使用的所述主存储单元的大小;
所述加速器的主存储单元上未被所述加速器上运行的非触发核的任意核使用的所述主存储单元的大小;
所述加速器的主存储单元上未被所述加速器上运行的非触发核的任意核使用的所述主存储单元的大小;
触发核的存储器访问模式的数量;
所述加速器上运行的、非触发核的任意核的存储器访问模式的数量。
11、一种用于为加速器取回数据的系统,所述系统包括:
主存储单元,用于保存多个数据页;
检测单元,用于检测对未存储在所述加速器的主存储单元上的第一数据页的访问尝试;
评估单元,用于响应于所述检测单元检测到对所述第一数据页的访问尝试,评估所述加速器的活动;
确定单元,用于响应于所述检测单元检测到对所述第一数据页的访问尝试,确定预取粒度大小,其中,所述预取粒度大小的确定基于所述加速器的活动评估;
提取单元,用于将所述预取粒度大小的连续页的数据块从与所述加速器耦接的存储器系统传送到所述主存储单元中,其中,所传送的所述连续页的数据块包括所述第一数据页。
12、根据项11所述的系统,其中,所述预取粒度大小基于先前的预取粒度大小,所述先前的预取粒度大小用于响应由触发核引起的先前的页故障。
13、根据项11-12任一项所述的系统,还包括合并单元,其中,
所述检测单元还用于检测对未存储在所述加速器的主存储单元上的第二数据页的第二访问尝试;
所述合并单元用于基于所述第一数据页和第二数据页的相邻性,合并页故障;以及
所述确定单元,还用于设置所述预取粒度大小,使得所述连续页的数据块包括所述第一数据页和所述第二数据页。
14、根据项11-13任一项所述的系统,其中,所述连续页的数据块按所述预取粒度大小字节对齐。
15、根据项11-14任一项所述的系统,其中,所述预取粒度大小基于获取策略,和所述获取策略基于:
与已存储在所述主存储单元上的第一数据页相邻的页的数量、与所述第一数据页相邻的页在设定时间范围内被访问的可能性、或正被触发核使用的数据页的空间区域性,其中,所述触发核正在所述加速器上执行并且试图访问所述第一数据页。
16、一种非暂时性计算机可读介质,其存储一组指令集,该指令集可由计算机系统的至少一个处理器执行,以使计算机系统执行用于为加速器取回数据的方法,所述方法包括:
检测对未存储在所述加速器的主存储单元上的第一数据页的访问尝试;
响应于检测到对所述第一数据页的访问尝试:
评估所述加速器的活动;
基于所述加速器的活动评估,确定预取粒度大小;以及
将所述预取粒度大小的连续页的数据块从与所述加速器耦接的存储器系统传送到所述主存储单元中,其中,所传送的所述连续页的数据块包括所述第一数据页。
17.如项16所述的非暂时性计算机可读介质,其中所述预取粒度大小基于先前的预取粒度大小,所述先前的预取粒度大小用于响应由触发核引起的先前的页故障。
18、根据项16-17任一项所述的非暂时性计算机可读介质,其中,所述指令集可由所述计算机系统的所述至少一个处理器执行,以使所述计算机系统进一步执行:
检测对未存储在所述加速器的主存储单元上的第二数据页的第二访问尝试;以及
基于所述第一数据页和第二数据页的相邻性,合并页故障并设置所述预取粒度大小,使得所述连续页的数据块包括所述第一数据页和所述第二数据页。
19、根据项16-18任一项所述的非暂时性计算机可读介质,其中,所述连续页的数据块按所述预取粒度大小字节对齐。
20、根据项16-19任一项所述的非暂时性计算机可读介质,其中,所述预取粒度大小基于获取策略,和所述获取策略基于:
与已存储在所述主存储单元上的第一数据页相邻的页的数量、与所述第一数据页相邻的页在设定时间范围内被访问的可能性、或正被触发核使用的数据页的空间区域性,其中,所述触发核正在所述加速器上执行并且试图访问所述第一数据页。
应当注意的是,这里的关系术语如“第一”和“第二”仅用于区分一个实体或操作与另一个实体或操作,并不要求或暗示这些实体或操作之间的任何实际的关系或顺序。此外“包括”、“具有”、“包含”等词和其他类似形式的含义是等同的,并且是开放式的,因为在这些词中的任何一个之后的一个或多个项目并不意味着详尽地列出这些项目,也不意味着仅限于所列出的一个或多个项目。
如本文所用,除非另有特别说明,术语“或”包括所有可能的组合,不可行的除外。例如,如果声明组件可以包括A或B,则除非另有具体说明或不可行,否则组件可以包括A或B,或A和B。作为第二示例,如果声明组件可以包括A、B或C,则除非另有具体说明或不可行,否则组件可以包括A或B,或C,或A和B,或A和C,或B和C,或A和B和C。
可以理解,上述实施例可以通过硬件或软件(程序代码)或硬件和软件的组合来实现。如果通过软件实现,则可以将其存储在上述计算机可读介质中。当由处理器执行时,该软件可以执行所公开的方法。本公开中描述的设备、模块和其他功能单元可以通过硬件或软件或硬件和软件的组合来实现。本领域普通技术人员还应理解,上述设备、模块和其他功能单元可以组合或进一步划分为多个子单元。
在前述说明书中,已经参考许多具体细节描述了实施例,这些具体细节可以随实施方式而变化。可以对所描述的实施例进行某些适配和修改。通过考虑本文所公开的说明书和实践,其他实施例对本领域技术人员来说是显而易见的。本说明书和实施例仅被认为是示例性的,本公开的真正范围和精神由权利要求书指示。图中所示的步骤序列仅用于说明目的,而不限于任何特定的步骤序列。因此,本领域技术人员可以理解,在实现相同方法的同时,可以以不同的顺序执行这些步骤。
在附图和说明书中,已经公开了示例性的实施例。然而,可以对这些实施例进行许多变化和修改。因此,虽然使用了具体的术语,但它们仅用于一般性和描述性的意义,而不是为了限制的目的。

Claims (17)

1.一种为加速器取回数据的方法,所述方法包括:
检测对未存储在所述加速器的主存储设备上的第一数据页的访问尝试和对未存储在所述加速器的主存储设备上的第二数据页的第二访问尝试;
响应于检测到对所述第一数据页的访问尝试和对所述第二数据页的访问尝试:
评估所述加速器的活动;
基于所述加速器的活动评估以及所述第一数据页与所述第二数据页的相邻性,确定预取粒度大小,其中,所述确定预取粒度大小包括合并页故障并设置所述预取粒度大小;以及
将所述预取粒度大小的连续页的数据块从与所述加速器耦接的存储器系统传送到所述主存储设备中,其中,所传送的所述连续页的数据块包括所述第一数据页和所述第二数据页。
2.根据权利要求1所述的方法,其中,所述预取粒度大小基于先前的预取粒度大小,所述先前的预取粒度大小用于响应由触发核引起的先前的页故障。
3.根据权利要求1所述的方法,其中,当所述加速器的主存储设备上未被所述加速器上运行的任意核使用的所述主存储设备的大小小于所述主存储设备的存储容量的5%时,所述预取粒度大小为所述第一数据页的大小。
4.根据权利要求1所述的方法,其中,所述连续页的数据块按所述预取粒度大小字节对齐。
5.根据权利要求4所述的方法,其中,所述预取粒度大小为64KiB、128KiB、256KiB、512KiB、1MiB、2MiB、4MiB、8MiB或16MiB。
6.根据权利要求1所述的方法,其中,所述预取粒度大小基于获取策略,和所述获取策略基于:
与已存储在所述主存储设备上的第一数据页相邻的页的数量、与所述第一数据页相邻的页在设定时间范围内被访问的可能性、或正被触发核使用的数据页的空间区域性,其中,所述触发核正在所述加速器上执行并且试图访问所述第一数据页。
7.根据权利要求1所述的方法,其中,所述检测对所述第一数据页的访问尝试包括接收由试图访问所述第一数据页的触发核所触发的页故障。
8.根据权利要求1所述的方法,其中,所述存储器系统为主机系统的主存储设备,所述加速器和所述主机系统使用统一的虚拟存储器系统。
9.根据权利要求1所述的方法,其中,所述加速器的活动包括:
所述加速器的主存储设备上被所述加速器上运行的触发核使用的所述主存储设备的大小,所述触发核触发对所述第一数据页的访问;
所述加速器的主存储设备上被所述加速器上运行的非触发核的任意核使用的所述主存储设备的大小;
所述加速器的主存储设备上未被所述加速器上运行的非触发核的任意核使用的所述主存储设备的大小;
触发核的存储器访问模式的数量;或
所述加速器上运行的非触发核的任意核的存储器访问模式的数量。
10.一种用于为加速器取回数据的系统,所述系统包括:
存储设备,用于存储指令;
一个或多个处理器,用于执行存储在所述存储设备中的指令,以使系统执行:
检测对未存储在所述加速器的主存储设备上的第一数据页的访问尝试和对未存储在所述加速器的主存储设备上的第二数据页的第二访问尝试;
响应于检测到对所述第一数据页的访问尝试和对所述第二数据页的访问尝试,评估所述加速器的活动;
基于所述加速器的活动评估以及所述第一数据页与所述第二数据页的相邻性,确定预取粒度大小,其中,所述确定预取粒度大小包括合并页故障并设置所述预取粒度大小;以及
将所述预取粒度大小的连续页的数据块从与所述加速器耦接的存储器系统传送到所述主存储设备中,其中,所传送的所述连续页的数据块包括所述第一数据页和所述第二数据页。
11.根据权利要求10所述的系统,其中,所述预取粒度大小基于先前的预取粒度大小,所述先前的预取粒度大小用于响应由触发核引起的先前的页故障。
12.根据权利要求10所述的系统,其中,所述连续页的数据块按所述预取粒度大小字节对齐。
13.根据权利要求10所述的系统,其中,所述预取粒度大小基于获取策略,和所述获取策略基于:
与已存储在所述主存储设备上的第一数据页相邻的页的数量、与所述第一数据页相邻的页在设定时间范围内被访问的可能性、或正被触发核使用的数据页的空间区域性,其中,所述触发核正在所述加速器上执行并且试图访问所述第一数据页。
14.一种非暂时性计算机可读介质,其存储一组指令集,所述指令集可由计算机系统的至少一个处理器执行,以使计算机系统执行用于为加速器取回数据的方法,所述方法包括:
检测对未存储在所述加速器的主存储设备上的第一数据页的访问尝试和对未存储在所述加速器的主存储设备上的第二数据页的第二访问尝试;
响应于检测到对所述第一数据页的访问尝试和对所述第二数据页的访问尝试:
评估所述加速器的活动;
基于所述加速器的活动评估以及所述第一数据页与所述第二数据页的相邻性,确定预取粒度大小,其中,所述确定预取粒度大小包括合并页故障并设置所述预取粒度大小;以及
将所述预取粒度大小的连续页的数据块从与所述加速器耦接的存储器系统传送到所述主存储设备中,其中,所传送的所述连续页的数据块包括所述第一数据页和所述第二数据页。
15.根据权利要求14所述的非暂时性计算机可读介质,其中所述预取粒度大小基于先前的预取粒度大小,所述先前的预取粒度大小用于响应由触发核引起的先前的页故障。
16.根据权利要求14所述的非暂时性计算机可读介质,其中,所述连续页的数据块按所述预取粒度大小字节对齐。
17.根据权利要求14所述的非暂时性计算机可读介质,其中,所述预取粒度大小基于获取策略,和所述获取策略基于:
与已存储在所述主存储设备上的第一数据页相邻的页的数量、与所述第一数据页相邻的页在设定时间范围内被访问的可能性、或正被触发核使用的数据页的空间区域性,其中,所述触发核正在所述加速器上执行并且试图访问所述第一数据页。
CN202080077721.6A 2019-11-25 2020-10-28 为加速器取回数据的方法和系统 Active CN114667508B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201962940027P 2019-11-25 2019-11-25
US62/940,027 2019-11-25
US16/901,497 2020-06-15
US16/901,497 US11231930B2 (en) 2019-11-25 2020-06-15 Methods and systems for fetching data for an accelerator
PCT/US2020/057676 WO2021108061A1 (en) 2019-11-25 2020-10-28 Methods and systems for fetching data for an accelerator

Publications (2)

Publication Number Publication Date
CN114667508A CN114667508A (zh) 2022-06-24
CN114667508B true CN114667508B (zh) 2022-09-20

Family

ID=75974225

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080077721.6A Active CN114667508B (zh) 2019-11-25 2020-10-28 为加速器取回数据的方法和系统

Country Status (3)

Country Link
US (1) US11231930B2 (zh)
CN (1) CN114667508B (zh)
WO (1) WO2021108061A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11947821B2 (en) * 2019-11-25 2024-04-02 Alibaba Group Holding Limited Methods and systems for managing an accelerator's primary storage unit
US11755685B2 (en) * 2020-09-30 2023-09-12 Piecemakers Technology, Inc. Apparatus for data processing in conjunction with memory array access
US20220198318A1 (en) * 2020-12-17 2022-06-23 SiMa Technologies, Inc. Instruction streaming for a machine learning accelerator
US11513961B2 (en) * 2021-01-28 2022-11-29 EMC IP Holding Company LLC Online heuristic sequentiality detection over input/output streams for cache systems in large address spaces
US11989142B2 (en) * 2021-12-10 2024-05-21 Samsung Electronics Co., Ltd. Efficient and concurrent model execution
US20240086102A1 (en) * 2022-09-08 2024-03-14 Samsung Electronics Co., Ltd. Systems and methods for executing data processing functions

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2005712A2 (en) * 2006-04-12 2008-12-24 Citrix Systems, Inc. Systems and methods for accelerating delivery of a computing environment to remote user
CN110347431A (zh) * 2018-04-06 2019-10-18 英特尔公司 自适应空间访问预取器装置和方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7975109B2 (en) 2007-05-30 2011-07-05 Schooner Information Technology, Inc. System including a fine-grained memory and a less-fine-grained memory
US8589600B2 (en) 2009-12-14 2013-11-19 Maxeler Technologies, Ltd. Method of transferring data with offsets
US20110161620A1 (en) * 2009-12-29 2011-06-30 Advanced Micro Devices, Inc. Systems and methods implementing shared page tables for sharing memory resources managed by a main operating system with accelerator devices
US8380680B2 (en) * 2010-06-23 2013-02-19 International Business Machines Corporation Piecemeal list prefetch
US8756601B2 (en) 2011-09-23 2014-06-17 Qualcomm Incorporated Memory coherency acceleration via virtual machine migration
US9361116B2 (en) 2012-12-28 2016-06-07 Intel Corporation Apparatus and method for low-latency invocation of accelerators
US9696933B2 (en) * 2014-08-15 2017-07-04 International Business Machines Corporation Virtual machine manager initiated page-in of kernel pages
US9652375B2 (en) 2015-06-22 2017-05-16 Intel Corporation Multiple chunk support for memory corruption detection architectures
US10203747B2 (en) * 2016-03-22 2019-02-12 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Workload placement based on heterogeneous compute performance per watt
US10866897B2 (en) * 2016-09-26 2020-12-15 Samsung Electronics Co., Ltd. Byte-addressable flash-based memory module with prefetch mode that is adjusted based on feedback from prefetch accuracy that is calculated by comparing first decoded address and second decoded address, where the first decoded address is sent to memory controller, and the second decoded address is sent to prefetch buffer
US11010092B2 (en) * 2018-05-09 2021-05-18 Micron Technology, Inc. Prefetch signaling in memory system or sub-system
US10817433B2 (en) * 2019-06-28 2020-10-27 Intel Corporation Page tables for granular allocation of memory pages

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2005712A2 (en) * 2006-04-12 2008-12-24 Citrix Systems, Inc. Systems and methods for accelerating delivery of a computing environment to remote user
CN110347431A (zh) * 2018-04-06 2019-10-18 英特尔公司 自适应空间访问预取器装置和方法

Also Published As

Publication number Publication date
CN114667508A (zh) 2022-06-24
US20210157593A1 (en) 2021-05-27
WO2021108061A1 (en) 2021-06-03
US11231930B2 (en) 2022-01-25

Similar Documents

Publication Publication Date Title
CN114667508B (zh) 为加速器取回数据的方法和系统
US11500778B2 (en) Prefetch kernels on data-parallel processors
Seshadri et al. Simple operations in memory to reduce data movement
EP2542973B1 (en) Gpu support for garbage collection
Silberstein et al. GPUfs: Integrating a file system with GPUs
US11947821B2 (en) Methods and systems for managing an accelerator's primary storage unit
US8180981B2 (en) Cache coherent support for flash in a memory hierarchy
EP3531292A1 (en) Methods and apparatus for supporting persistent memory
CN108268385B (zh) 具有集成目录高速缓存的优化的高速缓存代理
EP1994469B1 (en) Method, system, apparatus and article of manufacture for performing cacheline polling utilizing a store and reserve instruction
US7581067B2 (en) Load when reservation lost instruction for performing cacheline polling
US11868306B2 (en) Processing-in-memory concurrent processing system and method
WO2023173642A1 (zh) 指令调度的方法、处理电路和电子设备
US11372768B2 (en) Methods and systems for fetching data for an accelerator
US20180121353A1 (en) System, method, and apparatus for reducing redundant writes to memory by early detection and roi-based throttling
WO2023103397A1 (zh) 用于存储管理的方法、介质、程序产品、系统和装置
Bae et al. Ssdstreamer: Specializing i/o stack for large-scale machine learning
Li et al. REMOC: efficient request managements for on-chip memories of GPUs
US20240134803A1 (en) Hardware assisted memory access tracking
CN115145837A (zh) 预取数据的方法、装置和介质
Agarwal Memory access patterns and page promotion in hybrid memory systems
CN117083599A (zh) 硬件辅助的存储器访问跟踪
CN115934584A (zh) 设备私有存储器中的存储器访问跟踪器
Zhao Rethinking the memory hierarchy design with nonvolatile memory technologies

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