1.本公开涉及计算机领域,具体而言,涉及用于预取数据的方法、装置和介质。
背景技术:2.高速缓冲存储器(也可称为高速缓存或cache)的预取技术被广泛应用于处理器中,用于在实际需要指令或数据之前,将该指令或数据从其原始存储区(位于较慢存储器中)取出到较快的本地存储器中。高速缓存预取技术可以提升执行性能。现今,处理器采用高速、本地的高速缓冲存储器来存储预取的数据或指令。当数据或指令被预取时,原始存储区和本地存储器之间的带宽可能是有限的。此外,不同类型的数据可能具有不同的访问模式,这会影响预取方案的设计并导致低效率。
技术实现要素:3.本公开的一个目的在于提高数据预取的效率。
4.本公开的实施例提供了一种预取数据的方法。所述方法包括:检查存储在系统的高速缓存中的目标缓存行的预取标签,其中所述目标缓存行的所述预取标签指示所述目标缓存行的已被访问的部分;确定所述预取标签是否已达到所述缓存的预取阈值;以及响应于确定出所述预取标签未达到所述预取阈值,暂停将数据预取至所述高速缓存中一个或多个周期。
5.本公开的实施例还提供了一种用于预取数据的装置。所述装置包括:处理器,所述处理器包括具有多个级别的存储系统,所述处理器被配置为:检查存储在所述存储系统的高速缓存中的目标缓存行的预取标签,其中,所述目标缓存行的预取标签指示所述目标缓存行的已被访问的部分;确定所述预取标签是否已达到所述高速缓存的预取阈值;以及响应于确定出所述预取标签未达到所述预取阈值,暂停将数据预取至所述高速缓存中一个或多个周期。
6.本公开实施例中,当高速缓存的目标缓存行的已被访问的部分未达到预取阈值时,暂停将数据预取至所述高速缓存中一个或多个周期,从而有效缓解原始存储器和高速缓存之间的带宽有限的问题,提高数据预取的效率。
7.应当理解,前面的一般描述和下面的详细描述仅是示例性的和解释性的,而不用于对要求保护的本公开的实施例进行限制。
附图说明
8.通过参考以下附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
9.图1a示出了根据本公开一些实施例的稀疏神经网络的示例性访问模式;
10.图1b示出了根据本公开一些实施例的流式数据的示例性访问模式;
11.图2a示出了符合本公开一些实施例的示例性的加速器架构;
12.图2b示出了根据本公开一些实施例的示例性核心架构;
13.图2c示出了根据本公开一些实施例的结合了加速器200的示例性云系统的示意图;
14.图3示出了根据本公开一些实施例的处理器的存储子系统架构的示例;
15.图4示出了根据本公开一些实施例的处理器的一种新的存储子系统架构的示例;
16.图5示出了根据本公开一些实施例的用于实现新的预取机制的方法的示例性流程示意图;
17.图6示出了根据本公开一些实施例的提升了预取效率的示例性系统的示意图;
18.图7示出了图6中根据本公开一些实施例的系统600的示例性系统配置;
19.图8示出了图7所示的根据本公开一些实施例的应用于图6中系统600上的系统配置的示例性性能评估。
具体实施方式
20.下面将具体地参考示例性的实施例来描述,附图示出了这些实施例的示例。在以下描述所参照的附图中,不同附图中相同或相似的数字表示相同或类似的要素,除非另有说明。下文对示例性的实施例进行了描述,其中阐述的实施方式并不能代表符合本发明的全部实施方式,而仅仅是与所附权利要求书所要求的发明的相关方面相符合的装置和方法的示例。
21.许多计算机应用都涉及到获取和访问流式数据。流式数据是由一个或多个源连续生成的数据。流式数据通常用于大数据的上下文中,大数据可以由多个不同的源以高速产生。例如,物联网(internet of things,iot)是由嵌有传感器、软件和技术的物理对象所形成的网络,其中,数据可以通过互联网与其他设备交换。iot中的每个传感器可以随时间累积数据,并且这些数据可以统称为流式数据。其他应用,例如视频应用和音频应用,也可以从一个或多个源连续地生成数据。数据中心和云系统可以收集来自各种源的流式数据,并使用处理器对收集到的流式数据进行处理。例如,流式数据在应用于大数据的上下文中时,可以用来训练神经网络,云系统可以使用通用或专用的处理器来获取和处理流式数据。
22.流式数据可以具有独特的访问模式。访问模式中的一些特征包括在应用移动到下一个数据块之前对当前数据块进行集中访问。图1a示出了根据本公开一些实施例的稀疏神经网络的示例性访问模式。如图1a所示,没有阴影的数据条目是尚未被用于运行稀疏神经网络的处理器所访问的数据。相同阴影图案的数据条目是已被并发地访问的条目。如图1a所示,具有阴影的条目采用集中访问模式。在当前数据块的至少一部分数据已经被访问之前,应用不会移动到下一个数据块。例如,如图1a所示,条目9、8、14、11、9、20和23一起被访问,并且这些访问操作仅在所有具有其他不同阴影图案的条目被访问之后才进行。这些具有其他阴影图案的条目倾向于集中在条目1至10。因此,确定何时可以从存储器中预取下一个数据块,可能是一个挑战。图1b示出了根据本公开一些实施例的流式数据的示例性访问模式。图1a示出了流式数据的线性高速缓存访问模式的示例。在图1b中,x轴表示cpu时钟周期索引(clock tick index),y轴表示数据包(data packet)在高速缓冲存储器中的地址。在该示例中,随着基于流式数据的应用程序的执行,高速缓冲存储器的访问地址逐渐改变,如图1b中的实线所示。在一些实施例中,图1b所示的访问模式可以采用产业化的cpu模拟器
(例如gem5)来获得。
23.在现今的计算机体系架构中,诸如中央处理单元(cpu)、图形处理单元(gpu)或加速器(例如,神经网络加速器)的处理器可以采用硬件高速缓存,以减少从主存储器中访问数据的时间成本。高速缓存通常由存储空间小的存储器来实现,但由于高速缓存通常与处理器邻近设置,所以高速缓存的访问速度快得多。高速缓存的预取技术被广泛应用于处理器中,用于在实际需要指令或数据之前,将该指令或数据从其原始存储区(位于较慢存储器中)中取出到较快的本地存储器中。处理器可以具有多个级别的高速缓存。例如,cpu可以具有第1级(l1)高速缓存、第2级(l2)高速缓存、第3级(l3)高速缓存,等等。各级高速缓存的大小可以不同,并且各级高速缓存可以具有不同的访问速度。当预取数据时,被预取的数据可以在不同级别的高速缓存之间传输。
24.处理器的种类很多,其中的一些处理器可以配置为用于处理流式数据和预取流式数据。图2a示出了根据本公开一些实施例的加速器架构。如图2a所示,加速器200可以是神经网络加速器。在本公开的上下文中,神经网络加速器也可以被称为机器学习(例如,神经网络)加速器或深度学习加速器。在一些实施例中,加速器200可以被称为神经网络处理单元(neural network processing unit,npu)200。如图2a所示,加速器200可包括多个核202、命令处理器204、直接存储器访问(direct memory access,dma)单元208、联合测试动作组(joint test action group,jtag)/测试访问端(test access end,tap)控制器210、外围接口212、总线214等。
25.应当理解,核202可以基于所传输的数据执行算法操作。核202可以包括一个或多个处理元件,所述处理元件可以包括单指令、多数据(single instruction,multiple data,简称simd)体系结构,该体系结构包括一个或多个处理单元,各所述处理单元被配置为基于来自命令处理器204的命令来执行一个或多个操作(例如,乘法、加法、乘积累加操作等)。为了对所传输的数据包执行操作,核202可以包括用于处理数据包中的信息的一个或多个处理元件。每个处理元件可以包括任何数量的处理单元。根据本公开的一些实施例,加速器200可以包括多个核202,例如四个核。在一些实施例中,多个核202可以相互耦合通信。例如,多个核202可以连接至单向环形总线,其支持用于大规模神经网络模型的高效流水线。核202的体系架构将参照图2b进行详细说明。
26.命令处理器204可以与主机单元220交互,并将相关的命令和数据传递至相应的核202。在一些实施例中,命令处理器204可以在内核模式驱动程序(kernel mode driver,kmd)的监管下与主机单元220交互。在一些实施例中,命令处理器204可以对传递至各个核202的相关命令进行修改,使得多个核202可以尽可能地并行工作。修改后的命令可以存储在指令缓冲器中。在一些实施例中,命令处理器204可被配置以适于协调一个或多个核202,从而实现并行执行。
27.dma单元208可帮助在主存储器221和加速器200之间传输数据。例如,dma单元208可帮助将数据或指令从主机存储器221加载到核202的本地存储器中。dma单元208还可帮助在多个加速器之间传输数据。dma单元208可以允许片外设备访问片上和片外存储器而不引起主机cpu的中断。此外,dma单元208可帮助在加速器200的组件之间传输数据。例如,dma单元208可帮助在多个核202之间或各个核之内传输数据。因此,dma单元208还可以生成存储地址并启动存储器的读周期或写周期。dma单元208还可以包含可由一个或多个处理器写入
和读取的若干个硬件寄存器,包括存储地址寄存器、字节计数寄存器、一个或多个控制寄存器和其它类型的寄存器。这些寄存器可以用于指定以下一个或多个的组合:源、目标、传输方向(从输入/输出(input/output,i/o)设备中读取或向i/o设备写入)、传输单元的大小或在突发(burst)中传输的字节数。应当理解,加速器200可以包括第二dma单元,该第二dma单元可用于在其他加速器之间传输数据,以允许多个加速器直接通信,而不牵涉到主机cpu。
28.jtag/tap控制器210可以指定用于实现串行通信接口(例如,jtag接口)的专用调试端口,以便于低成本地访问加速器,而不需要对系统地址和数据总线进行直接外部访问。jtag/tap控制器210还可以具有片上测试访问接口(例如,tap接口),用于实现访问一组测试寄存器的协议,该组测试寄存器指示各种部件的设备能力和芯片逻辑电平。
29.如果存在外围接口212(诸如pcie接口),则用作(且通常为)芯片间总线,用于实现加速器与其它设备之间的通信。
30.总线214(例如i2c总线)包括芯片内总线和芯片间总线。芯片内总线按照系统架构的要求将所有内部组件相互连接。虽然不是所有组件都与其自身之外的其他组件相连接,但各组件都会具有一些连接关系,以便与其需要通信的其他组件相连接。芯片间总线将加速器与其他设备(如片外存储器或外围设备)连接起来。例如,总线214可用于提供跨核202的高速通信,并且还可以将核202与诸如片外存储器或外围设备的其他单元连接。如果存在外围接口212(例如,芯片间总线),则总线214通常仅与芯片内总线有关,虽然在一些实现方式中总线214还可以与专用的总线间通信有关。
31.加速器200还可以与主机单元220通信。主机单元220可以是一个或多个处理单元(例如,x86中央处理单元)。如图2a所示,主机单元220可以与主机存储器221相关联。在一些实施例中,主机存储器221可以是与主机单元220相关联的外部存储器或集成存储器。在一些实施例中,主机存储器221可以包括主机磁盘,主机磁盘是外部存储器,其被配置以用于为主机单元220提供额外的存储空间。主机存储器221可以是双倍数据速率同步动态随机存取存储器(double data rate synchronous dynamic random-access memory,例如ddr sdram)等。与集成在加速器芯片内的片上存储器(作为更高级别的高速缓存)相比,主机存储器221可以被配置为具有较慢的访问速度并存储大量数据。存储在主机存储器221中的数据可以被传输至加速器200以用于执行神经网络模型。
32.在一些实施例中,具有主机单元220和主机存储器221的主机系统可以包括编译器(未示出)。编译器是一种程序或计算机软件,其将采用某种编程语言编写的计算机代码转换为加速器200的指令,以创建可执行程序。在机器学习应用中,编译器可以执行多种操作,例如,预处理、词法分析、解析、语义分析、输入程序到中间表示的转换、神经网络的初始化、代码优化和代码生成,或这些操作中的多个操作的组合。例如,编译器可以编译神经网络以生成静态参数,例如神经元之间的连接和神经元的权重。
33.在一些实施例中,包括编译器的主机系统可以将一个或多个命令推入到加速器200中。如上所述,这些命令可被加速器200的命令处理器204进一步处理,并可临时地存储在加速器200的指令缓冲器中,还可被分配给相应的一个或多个核(例如,图2a示出的核202)或处理元件。一些命令可以指示dma单元(例如,图2a示出的dma单元208)将指令和数据从主机存储器(例如,图2a示出的主机存储器221)加载到加速器200中。之后,被加载的指令可以被分发给分配有相应任务的各个核(例如,图2a示出的核202),并且这一个或多个核可
以处理这些指令。
34.应当理解,由核202接收的前几条指令可以指示核202将来自主机存储器221的数据加载/存储到核的一个或多个本地存储器(例如,图2b示出的本地存储器2032)中。之后,各个核202可以启动指令流水线,指令流水线包括:从指令缓冲器取出指令(例如,经由序列控制器)、解码指令(例如,经由图2a示出的dma单元208)、生成本地存储地址(例如,对应于操作数)、读源数据,执行或加载/存储操作,然后写回结果。
35.根据一些实施例,加速器200还可以包括用作主存储器的全局存储器(未示出),全局存储器具有存储块存例如具有4个由8gb第二代高带宽存储器(second generation of high bandwidth memory,hbm2)实现的存储块。在一些实施例中,全局存储器可以存储经由dma单元208获得的、来源于主机存储器221的指令和数据。然后,指令可以被分发到分配有相应任务的各个核的指令缓冲器中,并且接收到这些指令的各个核可以相应地处理这些指令。
36.在一些实施例中,加速器200还可以包括存储控制器(未示出),其用于管理对全局存储器内的特定存储块(例如,hbm2)的数据的读写。例如,存储控制器可以对来自另一加速器的核(例如,来自dma单元208或对应于另一加速器的dma单元)或来自核202(例如,来自核202中的本地存储器)的读/写数据进行管理。应当理解,在加速器200中可以包括一个以上的存储控制器。例如,全局存储器内的每个存储块(例如,hbm2)可以分别对应有一个存储控制器。
37.存储控制器可以产生存储地址并启动存储器的读周期或写周期。存储控制器可包含若干个硬件寄存器,用于被一个或多个处理器写入和读取。寄存器可以包括存储地址寄存器、字节计数寄存器、一个或多个控制寄存器和其它类型的寄存器。这些寄存器可以指定以下一个或多个的组合:源、目标、传输方向(从i/o设备读取或向i/o设备写入)、传输单元的大小、在突发(burst)中传输的字节数或存储控制器的其他典型特征。
38.图2a所示的加速器200可以用于各种神经网络,例如深度神经网络(deep neural network,dnn)、递归神经网络(recurrent neural network,rnn)、卷积神经网络(convolutional neural network,cnn)、稀疏神经网络(sparse neural network)等。此外,一些实施例可以被配置以用于各种处理架构,诸如神经网络处理单元(neural network processing unit,npu)、图形处理单元(graphics processing unit,gpu)、现场可编程门阵列(field programmable gate array,fpga)、张量处理单元(tensor processing unit,tpu)、专用集成电路(application-specific integrated circuit,asic)、任何其他类型的异构加速器处理单元(heterogeneous accelerator processing unit,hapu)等。
39.图2b示出了根据本公开一些实施例的示例性核心架构。如图2b所示,核202可以包括一个或多个操作单元,例如第一操作单元2020和第二操作单元2022、存储器引擎2024、序列控制器2026、指令缓冲器2028、常数缓冲器2030、本地存储器2032等。
40.一个或多个操作单元可以包括第一操作单元2020和第二操作单元2022。第一操作单元2020可以被配置以用于对接收到的数据(例如,矩阵)执行操作。在一些实施例中,第一操作单元2020可以包括一个或多个处理单元,各处理单元被配置以用于执行一个或多个操作(例如,乘法、加法、乘积累加、按元素操作等)。在一些实施例中,第一操作单元2020被配置以用于对卷积运算或矩阵乘法运算的执行进行加速。
41.第二操作单元2022可以被配置以用于执行池操作(pooling operation)、插值操作(interpolation operation)、感兴趣区域(region-of-interest,roi)操作等。在一些实施例中,第二操作单元2022可以包括插值单元、池数据路径等。
42.存储器引擎2024可被配置以用于在相应的核202之内或在两个核之间执行数据复制。dma单元208可帮助在相应的核之内或两个核之间复制数据。例如,dma单元208可支持存储器引擎2024将数据从本地存储器(例如,图2b示出的本地存储器2032)复制到相应操作单元。存储器引擎2024还可被配置以用于执行矩阵转置,以使矩阵适用于操作单元。
43.序列控制器2026可以与指令缓冲器2028耦合,并且被配置以用于:检索命令,并将命令分发到核202的组件。例如,序列控制器2026可将卷积命令或乘法命令分发给第一操作单元2020,将池化命令分发给第二操作单元2022,或将数据复制命令分发给存储器引擎2024。序列控制器2026还可以被配置以监控神经网络任务的执行,并将神经网络任务的多个子任务进行并行化处理以提高执行效率。在一些实施例中,第一操作单元2020、第二操作单元2022和存储器引擎2024可以在序列控制器2026的控制下根据存储在指令缓冲器2028中的指令并行运行。
44.指令缓冲器2028可以被配置以存储属于相应的核202的指令。在一些实施例中,指令缓冲器2028与序列控制器2026耦合,并且向序列控制器2026提供指令。在一些实施例中,存储在指令缓冲器2028中的指令可以被命令处理器204传输或修改。
45.常数缓冲器2030可以被配置以存储常数值。在一些实施例中,存储在常数缓冲器2030中的常数值可被操作单元(诸如第一操作单元2020或第二操作单元2022)利用,以实现批归一化、量化、去量化等。
46.本地存储器2032可以提供具有高速的读/写速度的存储空间。为了减少与全局存储器之间可能发生的交互,本地存储器2032的存储空间可以具有大容量。基于大容量的存储空间,大部分数据访问可以在核202内执行,从而减少了由数据访问引起的等待时间。在一些实施例中,为了实现数据加载等待时间和能量消耗的最小化,本地存储器2032可采用片上集成的静态随机存取存储器(static random access memory,sram)。在一些实施例中,本地存储器2032可以具有192mb或更高的容量。根据本公开的一些实施例,本地存储器2032可均匀地分布在芯片上,以缓解密集布线以及发热问题。
47.图2c示出了根据本公开一些实施例的结合了加速器200的示例性云系统的示意图。如图2c所示,云系统230可以提供具有人工智能(artificial intelligence,ai)功能的云服务,并且可以包括多个计算服务器(例如,232和234)。在一些实施例中,计算服务器232例如可以包含/结合图2a所示的神经网络加速器200。为了简单和清楚,神经网络加速器200以简化的方式示于图2c中。应当理解,云系统230可作为神经网络的一部分以用于处理的流式数据。
48.在神经网络加速器200的作用下,云系统230可以提供图像识别、面部识别、翻译、3d建模等的扩展ai功能。此外,云系统230可以被配置以用于处理流式数据(例如在ai应用中使用的流式数据)。应当理解,神经网络加速器200可以以其他形式部署在计算设备中。例如,神经网络加速器200还可以被集成在诸如智能手机、平板电脑和可穿戴设备的计算设备中。
49.图3示出了根据本公开一些实施例的处理器的存储子系统架构的示例。在一些实
施例中,处理器300可以是图2a所示的加速器200,核302可以是图2a和2b所示的核202。应当理解,为了能简单和清楚地表述,图3中省略了处理器300的一些组件。作为示例,图3示出了处理器300上的四个核302。
50.如图3所示,处理器300可以具有包含多个级别的存储层级结构。例如,处理器300可包括第一级(l1)存储器310_1、第二级(l2)存储器310_2和第三级(l3)存储器310_3。在一些实施例中,处理器300可以具有多个l1存储器310_1,例如图3所示,每个核302分别可以具有属于自己的l1存储器310_1。在一些实施例中,两个或更多个核302可以共享一个l2存储器310_2,作为示例,例如图3所示,两个核302可共用一个l2存储器310_2。在一些实施例中,处理器300可包括支持多个核302的l3存储器310_3,例如图3所示,四个核302可共用一个l3存储器310_3。在一些实施例中,l3存储器310_3可以是处理器300的主存储器或全局存储器。如图3所示,处理器300可以与l4存储器310_4通信。在该示例中,l4存储器310_4可以是外部存储器。在一些实施例中,l4存储器310_4可以是处理器300的片外存储器或主机端存储器(例如,图2a所示的主机存储器221)。
51.当核302启动一执行程序时,数据可以经由与核302相对应的l3存储器310_3、l2存储器310_2和l1存储器310_1从l4存储器310_4传送到核302。当核302完成该执行程序时,结果数据可经由l1存储器310_1、l2存储器310_2和l3存储器310_3从核302传回至l4存储器(310_4)。在一些实施例中,较低级别的存储器装置可以具有比较高级别的存储器装置更小的容量和更高的速度。例如,l1存储器310_1具有比l2存储器310_2更小的容量,但l1存储器310_1具有比l2存储器310_2更快的速度。虽然图3示出的处理器300所采用的的存储层级结构包括4个级别,但应当理解,任何级别数目的存储层级结构都可以作为处理器300中的存储子系统。
52.应当理解,根据本公开的一些实施例,图3示出的处理器体系架构是可被扩展或缩减的。如图3所示,第一组320_1中的组件(例如,核302、l1存储器310_1和l2存储器310_2)不与第二组320_2中的组件互连。由此,可以通过添加类似于第一组320_1和第二组320_2的另一组组件来实现处理器300的尺寸的扩展。例如,可以在处理器300中添加第三组和第四组(未示出),第三组和第四组中的每组包括至少两个核。在这一示例中,处理器300的存储子系统可通过添加被第一至第四组中的所有核共用的另一级别的存储器,来将存储层级结构的深度从三个级别(例如,l1至l3存储器310_1至310_3)增加到四个级别。本公开的一些实施例可以提供gemm平铺(tiling)及其执行的控制方案,其可以适配于各种存储子系统的架构。
53.为了实现高速缓存的数据预取,基于硬件的预取方案被广泛采用。在基于硬件的预取方案中,处理器中设置有一个专门的硬件机制来跟踪正在执行的应用所请求的数据流。该硬件机制可以基于数据流识别该应用接下来可能需要的几个元素,并将所需要的元素预取到处理器的高速缓存中。
54.高速缓存的预取方案有多种类型,例如标记预取器(tagged prefetcher)、跨距预取器(stride prefetcher)和块预取器(block prefetcher)。在标记预取器中,对存储器的每个块可以分别设置相关联的标记位。标记位可用于检测被预取的块是否已被首次引用。如果该块已被首次引用,则下一个或多个块可以被预取。
55.跨距预取器利用了这样一种惯例,即,如果存储地址未命中,那么相对于该未命中
的地址偏移了一段距离的地址很可能在近期也不会被命中。因此,当一地址未被处理器高速缓存被命中时,相对于该未命中的地址偏移了一段距离的地址中的数据可以被预取到处理器高速缓存中。当一地址被处理器高速缓存命中时,相对于该命中的地址偏移了一段距离的地址中的数据也可以被预取到处理器高速缓存中。块预取器可以对一地址相邻的一个或多个数据块进行预取。
56.目前,高速缓存预取器的设计存在许多问题。首先,许多高速缓存预取器专注于处理数据中的不规律模式。对于采用更规律的访问模式的数据块,例如流式数据,这些高速缓存预取器可能是不合适的。第二,基于硬件的预取器往往具有有限的可见窗口(visible window)。因此,基于硬件的预取器可能无法充分利用不同高速缓存级别之间以及存储器和高速缓存之间的带宽。第三,预取器,例如标记预取器,虽然可能适用于采用更规律的访问模式的数据,但可能无法以高效的方式实现提前预取。第四,目前基于软件的预取器仅在l1高速缓存中被启用。这些基于软件的预取器可能无法充分利用其它高速缓存级别之间或存储器与高速缓存之间的带宽。而且,这些基于软件的预取器可能无法实现速度自适应,并且,即使近期内程序的执行还会需要用到已预取过的数据,但未使用的数据也可能会覆盖已预取的数据。
57.本公开的实施例提供了解决上述问题的方法和系统。图4示出了根据本公开一些实施例的处理器的一种新的存储子系统架构的示例。可以理解,图4所示的存储系统400可以应用于图2a所示的加速器200、图2b所示的核202、图2c所示的云系统230或图3所示的处理器300中。
58.如图4所示,存储系统400包括cpu 410、l1数据高速缓存(例如,l1-d)420、总线430、l2高速缓存440和存储器450。在一些实施例中,l2高速缓存440还包括一个或多个未命中状态保持寄存器(miss status holding register,mshr)441和写缓冲器442。mshr 441可以是用于对l2高速缓存440中的未命中事件进行处理的硬件结构。例如,当l2高速缓存440中发生未命中时,可以对mshr 441进行查找以确定高速缓存块是否已经被获取。在一些实施例中,l1数据高速缓存420可以类似于图3所示的l1存储器310_1,l2高速缓存440可以类似于图3所示l2存储器310_2。在一些实施例中,存储系统400可以包括其它级别的高速缓存(图4中未示出),类似于图3所示的l3存储器310_3和l4存储器310_4。在一些实施例中,存储器450可以是随机存取存储器(random-access memory,ram),例如同步动态随机存取存储器(synchronous dynamic ram,sdram)或双倍速率同步动态随机存取存储器(double data rate sdram,ddr sdram)。当cpu 410正在运行应用程序(例如,稀疏神经网络)时,与该应用程序相关联的数据(例如,流式数据)可以从存储系统400中被获取或预取到l2高速缓存440或l1数据高速缓存420中。
59.在一些实施例中,如图4所示,对不同级别的高速缓存的预取操作可以通过基于软件实现的初始化过程被同步初始化。例如,如图4所示,用于l1数据高速缓存420和l2高速缓存440的预取器可以通过软件指令被同步初始化。该初始化过程可包括:对用于预取的起始地址进行设置,或对获取数据的块尺寸进行设置。块尺寸可以指示存储系统一次获取的存储块的容量大小。在一些实施例中,对于存储系统中不同级别的高速缓存,块尺寸可以是不同的。例如,如图4所示,l1数据高速缓存420可以具有不同于l2高速缓存440的块尺寸。因此,当l1数据高速缓存420读取数据时,被读取或访问的数据块的大小可以不同于被l2高速
缓存读取或访问的数据块的大小。
60.图5示出了根据本公开一些实施例的用于实现新的预取机制的方法的示例性流程示意图。应当理解,图5所示方法5000可以被图4所示的存储系统400执行。在一些实施例中,如图5所示,方法5000可用于预取流式数据。
61.在步骤5010中,启动处理器中的存储系统。在一些实施例中,存储系统包括一个或多个高速缓冲存储器。例如,如图4所示,存储系统400包括l1数据高速缓存420和l2高速缓存440。在一些实施例中,存储系统包括具有多个级别的存储层级结构。例如,如图4所示,l1数据高速缓存420和l2高速缓存440是不同级别的高速缓存,它们的大小和访问速度可能不同。
62.在一些实施例中,存储系统的启动是基于软件实现的。例如,如图4所示,可以使用软件指令来启动存储系统400。所述启动可以包括:启动存储系统400中的预取机制。在一些实施例中,当存储系统被启动时,包括了起始地址或块尺寸的信息可以被确定。块尺寸可以指示存储系统一次可获取的存储块的容量大小。在一些实施例中,对于存储系统中不同级别的高速缓存,块尺寸可以是不同的。例如,如图4所示,l1数据高速缓存420可以具有与l2高速缓存440不同的块尺寸。因此,当l1数据高速缓存420读取数据时,被读取或访问的数据块的大小可以不同于被l2高速缓存440读取的数据块的大小。
63.在步骤5020中,可以根据目标缓存行来确定预取地址。在一些实施例中,目标缓存行指的是存储在存储系统中的数据块。在一些实施例中,预取地址可以是紧接在目标缓存行之后的数据块的地址。
64.在步骤5030中,检查目标缓存行的预取标志。在一些实施例中,预取标志指示目标缓存行的已被应用或程序访问的部分。例如,目标缓存行可以包括4个数据条目。如果4个数据条目中的2个已经被访问,则预取标签的值可以为0.5。如果4个数据条目中的3个已经被访问,则预取标签的值可以为0.75。应当理解,预取标签也可以是十进制数以外的形式。例如,预取标签也可以是整数,其记录缓存行中已被访问的条目数量。例如,如果4个数据条目中的3个已经被访问,则用于缓存行的预取标签的值可以为3。在一些实施例中,缓存行的尺寸等于块尺寸,块尺寸可以在步骤5010中被初始化。在一些实施例中,预取标志可以采用软件来实现。例如,如图4所示,用于提供与预取操作相关联的标志的预取机制,可以基于软件实现。
65.在步骤5040中,确定预取标签的值是否大于预取阈值。例如,预取阈值可以是0.5。如果缓存行中的4个数据条目中的3个已经被访问,则预取标签的值为0.75。作为结论,预取标签的值大于预取阈值。如果缓存行中4个数据条目中的1个已被访问,则预取标签的值为0.25。作为结论,预取标签的值不大于预取阈值。如果确定出预取标签的值不大于预取阈值,则执行步骤5050。如果确定出预取标签的值大于预取阈值,则执行步骤5060。
66.在一些实施例中,存储系统包括不同级别的高速缓存(例如,图4所示的l1数据高速缓存420和l2高速缓存440)。不同级别的高速缓存可以具有不同的预取阈值。例如,如图4所示,l1数据高速缓存420可以具有0.5的预取阈值,而l2高速缓存440可以具有0.75的预取阈值。因此,对于不同级别的高速缓存的预取机制可以是异步的。在一些实施例中,可以实时地调整预取阈值。例如,如图4所示,在存储系统400上执行方法5000的过程中,可实时调整l1数据高速缓存420和l2高速缓存440的预取阈值。在一些实施例中,l1数据高速缓存420
和l2高速缓存440所采用的预取阈值可以不同,并且各预取阈值可以分别被独立地调整。
67.再参见图5,在步骤5050中,存储系统保持暂停对数据进行预取一个或多个时钟周期。在一些实施例中,存储系统包括不同级别的高速缓存(例如,图4所示的l1数据高速缓存420和l2高速缓存440)。不同级别的高速缓存可以异步地进行预取。例如,如图4所示,在l1数据高速缓存420在一个时钟周期期间暂停预取数据的情况下,l2高速缓存440仍可在同一时钟周期期间预取数据。
68.在一些实施例中,在存储系统在一个或多个时钟周期内暂停预取数据的情况下,在存储系统上运行的应用程序仍然可以访问缓存行中的数据。在应用程序访问缓存行中的数据且该数据未曾被访问过的情况下,可以对该缓存行的预取标签进行更新。例如,缓存行的预取标签的值为2,其指示了高速缓存行中的2个条目已被访问。在当存储系统保持暂停预取的情况下,缓存行中的另一个条目被访问,则缓存行的预取标签可以被更新为3。在存储系统在一个或多个时钟周期内暂停预取数据的步骤结束后,可以执行步骤5030,并且缓存行的预取标签可以被再次检查以确定预取标签是否大于预取阈值(例如,步骤5040)。
69.参见图5,在步骤5060中,根据预取地址启动预取。例如,如图4所示,l1数据高速缓存420可以从步骤5020确定的预取地址处启动对数据块的预取。在一些实施例中,被预取的数据块的尺寸等于步骤5010中启用的块尺寸。在一些实施例中,步骤5020可以作为步骤5060的一部分被执行。例如,预取地址在步骤5060被执行之前不能确定,而直至步骤5060被执行,才可以确定预取地址。因此,如果在步骤5040中确定出预取标签不大于预取阈值,则可能不需要确定预取地址,这可以使方法5000的执行更高效。
70.在一些实施例中,方法5000还包括步骤5070。步骤5070在步骤5060之后被执行。在步骤5070中,确定是否存在需要被预取到存储系统中的附加数据。例如,应用程序要使用的全部数据具有一个数据量。如果该数据量大于已被取出到存储系统中的数据量,则可以确定仍有附加数据可被预取。作为结果,步骤5020可以被再次执行,并且预取地址可以被更新为下一个需要被获取的地址。如果上述数据量等于或小于已被取出到存储系统中的数据量,则可以确定不再有需要被预取的数据。作为结果,预取机制可以结束。
71.在如图5所示的方法5000中,预取阈值可以确定各个高速缓存预取数据的速度。如果目标缓存行中的被访问的条目的数目未达到预取阈值,则高速缓存可保持在一个或多个时钟周期期间暂停预取数据。由于不同级别的高速缓存可以具有不同的预取阈值,因此这些不同级别的高速缓存可以按照不同的速度进行预取。例如,如图4所示,l1数据高速缓存420的预取阈值可以不同于l2高速缓存440的预取阈值。因此,各级高速缓存可以按照不同的速度进行预取,并且各级高速缓存的预取机制可以是异步的。这一设计可以充分利用存储带宽,而对于不同级别的高速缓存,存储带宽可以是不同的。例如,如图4所示,存储器450和l2高速缓存440之间的存储带宽可以不同于l2高速缓存440和l1数据高速缓存420之间的存储带宽。由于不同级别的高速缓存可以按照不同的速度进行预取,因此存储系统可以充分利用不同的存储带宽。在一些实施例中,预取的速度可以被实时调整。例如,基于预取机制的性能,存储系统可以调整预取阈值的值(例如采用软件实现)。因此,预取机制可以基于存储系统的性能实现自适应。
72.在一些实施例中,方法5000可用于优化对流式数据的预取。流式数据往往是连续的,且按顺序被访问。同时,某些类型的流式数据(例如稀疏神经网络中使用的数据)的访问
模式会在应用移动到下一数据范围或下一数据块之前集中于特定的数据范围(例如,图1a所示)。因此,方法5000对于预取流式数据是有利的,因为,在目标缓存行中没有足够多的条目被访问的情况下,方法5000不预取数据,而直到目标缓存行中已有足够的条目被访问的情况下,方法5000才预取数据。这种机制可以防止新的数据过早地替换当前的数据。
73.在一些实施例中,可以采用软件实现步骤5010的初始化、步骤5030中的预取标签以及步骤5040中的预取阈值。因此,为了实现方法5000,仅需要对硬件进行小幅度调整,甚至不需要调整。在一些实施例中,由于步骤5010中的初始化可以在软件中实现,因此不同级别的高速缓存(例如,图4所示的l1数据高速缓存420和l2高速缓存440)可以被同时初始化,这进一步提高了存储系统实现预取数据的效率。
74.相比于许多传统的预取方案(例如标记预取器、跨步预取器和块预取器),如图5所示的方法5000可以显著地提升效率。此外,方法5000广泛地适用于各种处理器或加速器,以提供改进。
75.图6示出了根据本公开一些实施例的提升了预取效率的示例性系统的示意图。如图6所示,系统600包括处理器610、l1高速缓存620、紧耦合存储器(tightly coupled memory,tcm)630、l2高速缓存640和dram 650。处理器610可与l1高速缓存620和tcm 630耦合通信,l1高速缓存620可与l2高速缓存640耦合通信,l2高速缓存640可与dram 650耦合通信。应当理解,图6所示的系统600可以类似于图4所示存储系统400。应当理解,系统600可以类似于图4所示存储系统400。例如,l1高速缓存620可以类似于图4所示l1数据高速缓存420,l2高速缓存640可以类似于图4所示l2高速缓存420。在一些实施例中,如图6所示,l1高速缓存620的大小可以为64kb,l2高速缓存640的大小可以为1mb。
76.图7示出了图6中根据本公开一些实施例的系统600的示例性系统配置。如图7所示,系统可以被仿真以达到测试的目的。在一些实施例中,采用的仿真器(simulator,或称为模拟器)可以由开源软件(例如,gem5)实现。如图7所示,系统600的处理器类型可以是具有可缩放矢量扩展(scalable vector extension,sve)的arm。处理器610可以是arm v8.2a处理器,其矢量长度为128bit。在一些实施例中,处理器610的矢量长度可以是16位的8个元素。tcm 630可以采用3周期访问以及8个存储单元(bank)。l1高速缓存620可以采用2周期访问,并且多个预取器(例如,标记预取器、跨距预取器、块预取器和块标记预取器)可应用于l1高速缓存620。l2高速缓存640可以采用20周期访问,并且多个预取器(例如,标记预取器、跨距预取器、块预取器和块标记预取器)可应用于l2高速缓存640。在一些实施例中,系统600的内核可以是spmv_bucket_vertial或spmv_block_vertial。在一些实施例中,作为仿真的一部分,被用作需要预取的输入数据的数据集可以是具有50线性k层和0.9稀疏度的残差神经网络(residual neural network,resnet)。
77.图8示出了图7所示的根据本公开实施例的应用于图6中的系统600上的系统配置的示例性性能评估。如图8所示,根据图7所示的系统配置,对两种不同的内核进行了评估。在内核spmv_bucket中,自适应块预取器(例如,用于实现图5所示的方法5000)与传统预取器(包括跨距预取器、标记预取器和块预取器)相比,使用的周期数目明显较少。此外,在内核spmv_block中,自适应块预取器与传统预取器(包括跨距预取器、标记预取器和块预取器)相比,使用的周期数目也明显减少。因此,对于流式数据(例如图7所示的数据集),自适应块预取器明显比许多传统的预取器更为高效。
78.本公开实施例包括数据库系统、方法和实体的非暂时性计算机可读介质。各方法例如可以由至少一个处理器执行,所述至少一个处理器从实体的非暂时性计算机可读存储介质(诸如主机系统的存储介质,该主机系统可具有图2a所示的主机单元220和主机存储器221)接收指令。类似地,符合本公开的系统可以包括至少一个处理器和存储器,并且存储器可以是实体的非暂时性计算机可读存储介质。本公开采用的实体的非暂时性计算机可读存储介质是指其上可存储至少一个处理器可读的信息或数据的任何类型的物理存储器,例如:随机存取存储器(random access memory,ram)、只读存储器(read-only memory,rom)、易失性存储器(volatile memory)、非易失性存储器(non-volatile memory)、硬盘驱动器(hard drive)、光盘只读存储器(cd rom)、数字化视频光盘(digital video disk,dvd)、闪存驱动器(flash drive)、磁盘(disk)、寄存器、高速缓存和任何其它已知的物理存储介质。单数形式的术语,例如“存储器”和“计算机可读存储介质”,可以另外指代多个结构,例如多个存储器或多个计算机可读存储介质。如本文所述,“存储器”可以包括任何类型的计算机可读存储介质,除非另有规定。计算机可读存储介质可以存储指令(用于由至少一个处理器执行),包括用于使处理器执行符合本文实施例的步骤或阶段的指令。另外,一个或多个计算机可读存储介质可被用于实现计算机实现方法。“非暂时性计算机可读存储介质”这一术语应理解为包括有形的物体,而不包括载波和暂时性信号。
79.应当注意的是,本文中的关系术语如“第一”和“第二”仅用于将一个实体或操作与另一个实体或操作区分开来,并且不要求或暗示这些实体或操作之间的任何实际关系或顺序。此外,“包括”、“具有”、“包含”和“包括”等词和其他类似形式的意思是等同的,并且是开放的,因为跟随在这些词中任何一个后面的一个或多个项目并不意味着这一个或多个项目是这类项目的详细列表,也不意味着这类项目仅限于所列出的一个或多个项目。
80.在本公开的描述中,除非另有特别说明,词语“或”包括所有可能情况的组合(除非组合不可行)。例如,如果声明数据库可以包括a或b,那么除非特别声明或不可行,否则数据库可以包括a或b,或者a和b。作为第二示例,如果声明数据库可以包括a、b或c,那么除非特别声明或不可行,否则数据库可以包括a或b或c,或者a和b,或者a和c,或者b和c,或者a和b和c,或者a和b和c。
81.应当理解,上述实施例可以通过硬件、或软件(程序代码)、或硬件和软件的组合来实现。如果通过软件实现,则可将该软件存储在上述计算机可读介质中。该软件可以被处理器执行,以便执行本公开提供的各方法。本公开中描述的计算单元和其它功能单元可以通过硬件、或软件、或硬件和软件的组合来实现。本领域普通技术人员还可以理解,上述模块/单元中的多个模块/单元可组合为一个模块/单元,且上述模块/单元中的每一个可进一步被划分为多个子模块/子单元。
82.进一步地,本公开实施例还可以采用以下条款来描述:
83.1、一种预取数据的方法,包括:
84.检查目标缓存行的预取标签,所述目标缓存行存储于系统的高速缓存中,其中,所述目标缓存行的所述预取标签指示所述目标缓存行的已被访问的部分;
85.确定所述预取标签是否已达到所述高速缓存的预取阈值;
86.响应于确定出所述预取标签未达到所述预取阈值,暂停将数据预取到所述高速缓存中一个或多个周期。
87.2、根据条款1所述的方法,还包括:
88.响应于确定出所述预取标签已达到所述预取阈值,将数据预取到所述高速缓存中。
89.3、根据条款1所述的方法,其中:
90.所述系统包括第二高速缓存,以及
91.所述第二高速缓存具有第二预取阈值,用于确定是否要将数据预取到所述第二高速缓存中。
92.4、根据条款3所述的方法,其中:
93.所述第二预取阈值不同于所述预取阈值。
94.5、根据条款3所述的方法,其中:
95.所述系统为处理器,
96.所述高速缓存是所述处理器的第一级(l1)高速缓存,并且
97.所述第二高速缓存是所述处理器的第二级(l2)高速缓存。
98.6、根据条款5所述的方法,其中:
99.所述第一级(l1)高速缓存专用于所述处理器的一个核,并且
100.所述第二级(l2)高速缓存被所述处理器的至少两个核共用。
101.7、根据条款1所述的方法,其中,还包括:
102.确定缓存行中的数据是否已被首次访问;以及
103.响应于确定出所述目标缓存行中的所述数据已被首次访问,更新所述目标缓存行的所述预取标签。
104.8、根据条款1所述的方法,其中,所述预取标签的值是根据所述目标缓存行中已被访问的条目的数目来确定的。
105.9、根据条款1所述的方法,其中,被预取的所述数据是流式数据。
106.10、根据条款1所述方法,其中,所述预取标签和所述预取阈值是采用软件实现的。
107.11、一种预取数据的装置,其中,包括:
108.处理器,所述处理器包括具有多个级别的存储系统,并被配置为:
109.检查目标缓存行的预取标签,所述目标缓存行存储在所述存储系统的高速缓存中,其中,所述目标缓存行的所述预取标签指示所述目标缓存行的已被访问的部分;
110.确定所述预取标签是否已达到所述高速缓存的预取阈值;
111.响应于确定出所述预取标签未达到所述预取阈值,暂停将数据预取到所述高速缓存中一个或多个周期。
112.12、根据条款11所述的装置,其中,所述处理器还被配置为:
113.响应于确定出所述预取标签已达到所述预取阈值,将数据预取到所述高速缓存中。
114.13、根据条款11所述的装置,其中:
115.所述存储器系统包括第二高速缓存,并且
116.所述第二高速缓存具有第二预取阈值,用于确定是否要将数据预取到所述第二高速缓存中。
117.14、根据条款13所述的装置,其中:
118.所述第二预取阈值不同于所述预取阈值。
119.15、根据条款13所述的装置,其中:
120.所述高速缓存是所述存储系统的第1级(l1)高速缓存,并且
121.所述第二高速缓存是所述存储系统的第二级(l2)高速缓存。
122.16、根据条款15所述的装置,其中:
123.所述第一级(l1)高速缓存专用于所述处理器的一个核,并且
124.所述第二级(l2)高速缓存被所述处理器的至少两个核共用。
125.17、根据条款11所述的装置,其中,所述处理器还被配置为:
126.确定所述目标缓存行中的数据是否已被首次访问;以及
127.响应于确定出所述目标缓存行中的所述数据已被首次访问的情况下,更新所述目标缓存行的所述预取标签。
128.18、根据条款11所述的装置,其中,根据所述目标缓存行中已被访问的条目的数目来确定所述预取标签的值。
129.19、根据条款11所述的装置,其中,被预取的所述数据是流式数据。
130.20、根据条款11所述的装置,其中,所述预取标签和所述预取阈值是采用软件实现的。
131.21、一种非暂时性计算机可读介质,其存储一组指令,所述指令可由装置的一个或多个处理器执行,以使所述装置启动用于预取数据的方法,所述方法包括:
132.检查目标缓存行的预取标签,所述目标缓存行存储于系统的高速缓存中,其中,所述目标缓存行的所述预取标签指示所述目标缓存行的已被访问的部分;
133.确定所述预取标签是否已达到所述高速缓存的预取阈值;
134.响应于确定出所述预取标签未达到所述预取阈值,暂停将数据预取到所述高速缓存中一个或多个周期。
135.22、根据条款21所述的非暂时性计算机可读介质,其中,所述方法还包括:
136.响应于确定出所述预取标签已达到所述预取阈值,将数据预取到所述高速缓存中。
137.23、根据条款21所述的非暂时性计算机可读介质,其中:
138.所述系统包括第二高速缓存,以及
139.所述第二高速缓存具有第二预取阈值,用于确定是否要将数据预取到所述第二高速缓存中。
140.24、根据条款23所述的非暂时性计算机可读介质,其中:
141.所述第二预取阈值不同于所述预取阈值。
142.25、根据条款23所述的非暂时性计算机可读介质,其中:
143.所述系统为处理器,
144.所述高速缓存是所述处理器的第一级(l1)高速缓存,并且
145.所述第二高速缓存是所述处理器的第二级(l2)高速缓存。
146.26、根据条款25所述的非暂时性计算机可读介质,其中:
147.所述第一级(l1)高速缓存专用于所述处理器的一个核,并且
148.所述第二级(l2)高速缓存被所述处理器的至少两个核共用。
149.27、根据条款21所述的非暂时性计算机可读介质,其中,所述方法还包括:
150.确定所述目标缓存行中的数据是否已被首次访问;以及
151.响应于确定出所述目标缓存行中的所述数据已被首次访问,更新所述目标缓存行的所述预取标签。
152.28、根据条款21所述的非暂时性计算机可读介质,其中,所述预取标签的值是根据所述目标缓存行中已被访问的条目的数目来确定的。
153.29、根据条款21所述的非暂时性计算机可读介质,其中,被预取的所述数据是流式数据。
154.30、根据条款21所述的非暂时性计算机可读介质,其中,所述预取标签和所述预取阈值是采用软件实现的。
155.在前述说明书中,各实施例的描述参考了可随不同实现方式而改变的众多特定细节。可以对所描述的实施例进行某些自适应和修改。考虑到在此公开发明的说明书和实践,其它实施例对于本领域技术人员来说是显而易见的。本说明书和实施例仅被认为是示例性的,本发明的真正范围和精神由以下权利要求书来表示。图中所示的步骤顺序仅用于说明目的,而不用于限制任何特定的步骤顺序。因此,本领域技术人员可以理解,这些步骤可以在实现相同方法的同时按照不同的顺序被执行。
156.在附图和说明书中,已经公开了示例性实施例。然而,可以对这些实施例进行许多变化和修改。基于此,虽然本公开使用了具体的术语,但这些术语仅具有一般性和描述性的意义,而并非用于对本公开进行限制。