本申请和与本申请同时提交的、标题为“Supplemental Write Cache Command For Bandwidth Compression”的美国专利申请No.14/462,763相关,故其全部内容通过引用被并入本文。
背景技术:
无损压缩在系统中用作减少必须从主存储器读取或写回到主存储器的数据量的方式。压缩工作在输入数据的段上,通常是固定大小的段,它们被压缩成更小的块大小。无损压缩使用可配置大小的段。示例将根据算法可以实现的压缩率将256字节段压缩为64字节块、128字节块、192字节块或256字节块。随后,该压缩数据将被存储在缓存中,直到其被写回到主存储器。由于压缩的性质,可能在缓存的物理地址空间中存在未使用的空洞。这些空洞可以发生在缓存行内。当数据通过具有比最小压缩大小倍数更大的缓存行的缓存传播时,导致数据从缓存到主存储器的过度提取(overfetch)。
当从缓存请求小型数据块时,缓存必须填满整个行,但是由于压缩数据中的空洞,因此只有该行的一部分将包含有用数据,因为缓存行中的空洞将填充不相关的数据。这导致缓存对主存储器的过度提取,其中过度提取的一部分是垃圾。例如,如果将段压缩到64字节或192字节并且从具有128字节行的缓存请求段,则在每种情况下额外的64字节的无用数据将被加载到缓存以填满缓存行中的空洞。在良好的压缩方案中,大部分压缩块将是最小大小。因此,带宽压缩的益处被减少,并且消耗不必要的功率提取(fetch)不必要的数据和写回该随机数据。
技术实现要素:
各个方面的方法和装置提供了用于在计算设备上执行针对数据的缓存存储器存取请求的电路和方法,可以包括:将小于缓存行的数据与填充数据组合成被配置为填满缓存行的经组合的数据;以及发送针对所述经组合的数据的写缓存存储器存取请求。
方法的一个方面还可以包括:确定所述数据是否小于缓存行;以及生成所述填充数据,以使得所述填充数据具有在缓存行和所述数据的大小之间的差值的大小。
在一个方面中,确定所述数据是否小于缓存行可以包括:使用所述数据的大小来确定所述数据是否小于缓存行。
方法的一个方面还可以包括:对未压缩数据进行压缩以生成小于缓存行的所述数据,其中,确定所述数据是否小于缓存行包括:使用所述数据的压缩比率来确定所述数据是否小于缓存行。
在一个方面中,所述填充数据是恒定值。在一个方面中,所述填充数据是数据值的模式。
方法的一个方面还可以包括:从处理器接收针对所述经组合的数据的所述写缓存存储器存取请求;将所述经组合的数据存储在所述经组合的数据通过所述写缓存存储器存取请求来寻址到的缓存行中;发送针对所述经组合的数据的写存储器存取请求;从缓存存储器控制器接收针对所述经组合的数据的所述写存储器存取请求;以及将所述经组合的数据存储在存储器中。
一个方面包括一种计算设备,所述计算设备具有彼此通信地连接的处理器、缓存存储器控制器、缓存存储器、存储器控制器和存储器,其中,所述处理器和所述缓存存储器控制器被配置为执行上述方法的方面中的一个或多个方面的操作。
一个方面包括一种其上存储有处理器可执行指令的非暂时性处理器可读介质,所述处理器可执行指令被配置为使得处理器和缓存存储器控制器执行上述方法的方面中的一个或多个方面的操作。
一个方面包括一种计算设备,所述计算设备具有用于执行上述方法的方面中的一个或多个方面的功能的单元。
附图说明
并入本文并构成本说明书的一部分的附图示出了本发明的示例方面,并且与上文给出的总体描述和下文给出的详细描述一起用于说明本发明的特征。
图1是示出了适用于实现一个方面的计算设备的组件框图。
图2是示出了适用于实现一个方面的示例多内核处理器的组件框图。
图3是根据一个方面,示出了包括被配置为实现补充写入缓存命令的缓存存储器控制器的示例片上系统(SoC)的组件框图。
图4是根据一个方面的包括存储压缩数据的缓存行的缓存存储器的一部分的图示。
图5是根据一个方面的包括存储压缩数据的缓存行的缓存存储器的一部分的图示。
图6是根据一个方面的用于从缓存存储器获取压缩数据的、具有补充写入命令的读缓存存储器存取请求的过程和信号流程图。
图7是根据一个方面的用于向缓存存储器写入压缩数据的、具有补充写入命令的写缓存存储器存取请求的过程和信号流程图。
图8是根据一个方面的用于向缓存存储器写入压缩数据的、具有功率感知填充(padding)的写缓存存储器存取请求的过程和信号流程图。
图9是示出了用于实现针对压缩数据的具有补充写入命令的缓存存储器存取请求的方法的方面的过程流程图。
图10是示出了用于实现针对压缩数据的具有功率感知填充的缓存存储器存取请求的方法的方面的过程流程图。
图11是示出了适用于与各个方面一起使用的示例计算设备的组件框图。
图12是示出了适用于与各个方面一起使用的示例移动计算设备的组件框图。
图13是示出了适用于与各个方面一起使用的示例服务器的组件框图。
具体实施方式
将参照附图对各个方面进行详细描述。只要可能的话,遍及附图将使用相同的附图标记来指代相同或相似的部分。对特定示例和实现方式的引用是出于说明性目的,并不旨在限制本发明或权利要求的范围。
术语“计算设备”和“移动计算设备”在本文中可互换地使用,以指代蜂窝电话、智能电话、个人或移动多媒体播放器、个人数字助理(PDA)、膝上型计算机、平板计算机、智能本、超级本、掌上型计算机、无线电子邮件接收机、支持多媒体互联网的蜂窝电话、无线游戏控制器、以及包括存储器和多内核可编程处理器的类似个人电子设备。虽然各个方面对于具有有限的存储器和电池资源的移动计算设备(例如智能电话)特别有用,但是这些方面通常在实现多个存储器设备和有限功率预算的任何电子设备中是有用的,其中降低功率处理器的消耗可以延长移动计算设备的电池操作时间。
本文使用术语“片上系统”(SoC)来指代一组互连的电子电路,通常但不排他性地包括硬件内核、存储器和通信接口。硬件内核可以包括各种不同类型的处理器,诸如通用处理器、中央处理单元(CPU)、数字信号处理器(DSP)、图形处理单元(GPU),加速处理单元(APU)、辅助处理器、单内核处理器和多内核处理器。硬件内核还可以体现其它硬件和硬件组合,诸如现场可编程门阵列(FPGA)、专用集成电路(ASCI)、其它可编程逻辑器件、离散门逻辑、晶体管逻辑、性能监视硬件,看门狗硬件和时间参考。集成电路可以被配置为使得集成电路的组件驻留在单片半导体材料(例如硅)上。
各方面包括用于通过向缓存行的没有被压缩数据填满的部分写入数据值(例如,全“0”)来消除缓存对主存储器的过度提取的方法和实现这样的方法的计算设备。这些方面包括新的补充写入命令,其填满缓存行的其余部分。
当从主存储器请求压缩数据时,数据值可以由缓存存储器控制器写入缓存。接收到具有补充写入命令的混合式读缓存存储器存取请求的缓存存储器控制器可以执行对小于缓存行的压缩数据的读取,并且当压缩数据不在缓存中(缓存缺失)时,可以从主存储器获取压缩数据和写入补充数据(例如,“0”或“1”)以填充缓存行的未使用部分。例如,如果来自处理器的针对来自具有128字节缓存行的缓存的64字节的压缩数据的READ请求导致缓存缺失,则缓存存储器控制器可以分配包含针对所请求的压缩数据的地址的缓存行,并从主存储器请求压缩数据。对主存储器的该请求可以是针对仅压缩数据,而不管缓存行的大小如何。因此,来自缓存存储器控制器的针对压缩数据的请求可以是针对小于缓存行的压缩数据块。响应于这样的请求,缓存存储器控制器可以将从主存储器获取的压缩数据写入所分配的缓存行。作为该写入过程的一部分,缓存存储器控制器还可以向缓存行的剩余部分写入补充数据,诸如全0(或1)。例如,当将64字节的压缩数据写入128字节的缓存行时,缓存行的剩余64字节可以用补充数据来填充。类似地,响应于来自处理器的WRITE请求,缓存存储器控制器可以将缓存行的剩余部分设置为补充数据,以将压缩数据写入缓存。
通过仅请求压缩数据并用补充数据填充缓存行的未使用部分来消除从主存储器获取数据以填充缓存行的未使用部分,消除了从主存储器过度提取。因此,减少了从主存储器获取数据所需的带宽和功率,这是因为在主存储器与缓存之间传递较少的数据。
各方面包括用于将诸如全0(或全1)之类的填充数据作为由缓存从处理器接收的经填充的压缩数据的一部分写入缓存的方法和实现这样的方法的计算设备。这使得处理器能够将数据块压缩到小于缓存行的大小,并且将填充数据添加到压缩数据以填充缓存行的将不被压缩数据填满的部分。处理器可以在对缓存的写入请求中发送包括压缩数据和填充数据的数据分组。在一个示例中,当压缩数据是64字节并且缓存行是128字节时,处理器可以将64字节的填充数据添加到64字节的压缩数据,使得压缩数据加上填充构成128字节数据分组。缓存存储器控制器可以接收数据分组,并将该数据分组写入在写入请求中指定的位置处的缓存行。将数据分组写入缓存行利用压缩数据和填充数据填满缓存行。当经缓存的压缩数据被复制到主存储器时,其可以类似地与填充数据一起存储在缓存行中。当从主存储器获取经缓存的压缩数据时,可以类似地利用填充数据来获取经缓存的压缩数据以填满缓存行。
通过写入与填充数据组合的压缩数据来填充未被指定为存储压缩数据的缓存行的部分,消除了从主存储器过度提取。数据与缓存行具有相同的大小,因此当从主存储器获取压缩数据时,其将包括填充数据,并且不需要从主存储器获取不相关数据以填充缓存行中的缺失数据。此外,获取填充数据(例如一系列全0(或全1))所需的功率小于从主存储器获取变化值所需的功率。
为了便于描述,可以根据其与压缩数据的使用来描述各个方面;然而,这些方面可以用于不完全填满缓存行的任何数据。
图1示出了包括与适用于与各个方面一起使用的远程计算设备50通信的计算设备10的系统。计算设备10可以包括具有处理器14、存储器16、通信接口18和存储接口20的SoC 12。计算设备还可以包括通信组件22(例如有线或无线调制解调器)、存储组件24、用于建立至无线网络30的无线连接32的天线26和/或用于连接到至互联网40的有线连接44的网络接口28。处理器14可以包括多种硬件内核中的任何一种,以及若干个处理器内核。SoC 12可以包括一个或多个处理器14。计算设备10可以包括一个以上SoC 12,从而增加处理器14和处理器内核的数量。计算设备10还可以包括不与SoC 12相关联的处理器14。各个处理器14可以是如下文参照图2所描述的多内核处理器。处理器14可以各自被配置用于可以与计算设备10的其它处理器14相同或不同的特定目的。处理器14中的一个或多个处理器14和相同或不同配置的处理器内核可以被归组在一起。
SoC 12的存储器16可以是易失性或非易失性存储器,其被配置用于存储用于由处理器14存取的数据和处理器可执行代码。在一个方面中,存储器16可以被配置为至少临时地存储数据,诸如由一个或多个处理器14输出的压缩处理数据。在一个方面中,存储器16可以被配置为使用补充写入命令或功率感知填充来存储针对压缩数据的缓存存储器存取请求的信息。存储器16可以包括非易失性只读存储器(ROM),以便保存可由处理器14和/或缓存存储器控制器(如图3中所示)存取的压缩数据。
计算设备10和/或SoC 12可以包括被配置用于各种目的的一个或多个存储器16。在一个方面中,一个或多个存储器16可以被配置为专用于存储用于由特定的处理器14和/或缓存存储器控制器存取的压缩数据。存储器16可以以如下方式来存储压缩数据:使得压缩数据能够由用于使用补充写入命令或功率感知填充来实现针对压缩数据的缓存存储器存取请求的处理器14和/或缓冲存储器控制器存取。
通信接口18、通信组件22、天线26、和/或网络接口28可以一致地工作,以使得计算设备10通过无线网络30经由无线连接32和/或有线网络44与远程计算设备50进行通信。无线网络30可以使用多种无线通信技术来实现,包括例如用于无线通信的射频频谱,以提供计算设备10与互联网40的连接,通过该连接其可以与远程计算设备50交换数据。
存储接口20和存储组件24可以一致地工作,以允许计算设备10将数据存储在非易失性存储介质上。存储组件24可以被配置成很像存储器16的方面,其中,存储组件24可以存储压缩数据,以使得信息可以由一个或多个处理器14和/或缓存存储器控制器存取。即使在计算设备10的电源已被切断之后,作为非易失性的存储组件24也可以保存信息。当电源再次接通并且计算设备10重新启动时,存储在存储组件24上的信息对于计算设备10来说可以是可用的。存储接口20可以控制对存储设备24的存取,并允许处理器14从存储设备24读取数据和向存储设备24写入数据。
计算设备10的组件中的一些或全部可以被不同地布置和/或组合,同时仍供应必须的功能。此外,计算设备10可以不限于这些组件中的每个组件中的一个组件,并且每个组件的多个实例可以被包括在计算设备10的各种配置中。
图2示出了适用于实现一个方面的多内核处理器14。多内核处理器14可以具有多个同构或异构的处理器内核200、201、202、203。处理器内核200、201、202、203可以是同构的,因为单个处理器14的处理器内核200、201、202、203可以被配置用于相同的目的,并且具有相同或相似的性能特性。例如,处理器14可以是通用处理器,并且处理器内核200、201、202、203可以是同构的通用处理器内核。替代地,处理器14可以是图形处理单元或数字信号处理器,并且处理器内核200、201、202、203可以分别是同构的图形处理器内核或数字信号处理器内核。为便于参考,可以在本文中可互换地使用术语“处理器”和“处理器内核”。
处理器内核200、201、202、203可以是异构的,因为单个处理器14的处理器内核200、201、202、203可以被配置用于不同的目的和/或具有不同的性能特性。这样的异构处理器内核的示例可以包括被称为“big.LITTLE”架构的处理器内核,在该架构中,较慢的、低功率处理器内核可以与较强大和耗电(power-hungry)的处理器内核相耦合。
在图2中示出的示例中,多内核处理器14包括四个处理器内核200、201、202、203(即,处理器内核0、处理器内核1、处理器内核2和处理器内核3)。为了便于说明,本文的示例可以指代图2中示出的四个处理器内核200、201、202、203。然而,在图2中所示出和本文所描述的四个处理器内核200、201、202、203仅仅作为示例来提供,无论如何并不意味着将各个方面限制于四内核处理器系统。计算设备10、SoC 12或多内核处理器14可以单独或组合地包括比本文示出和描述的四个处理器内核200、201、202、203更少或更多。
图3示出了示例SoC 12,其包括缓存存储器控制器300和缓存存储器302,缓存存储器302被配置为存储来自处理器14(包括单独的处理器内核)的数据(包括压缩数据和比缓存行小的数据),并通过请求处理器14(包括单独的处理器内核)来允许对数据的访问。SoC 12还可以包括存储器控制器304、存储器16以及诸如上文描述的SoC 12的组件之类的其它组件。缓存存储器302可以被配置为临时地存储数据和程序指令以便比在访问图1的存储组件24或图1的存储器16时更快地访问。缓存存储器302可以专用于由单个处理器14使用或在多个处理器14之间共享。在一个方面中,缓存存储器306可以是处理器14的部分,并且可以专用于由单个处理器内核使用或在处理器14的多个处理器内核之间共享。
缓存存储器控制器300可以管理由SoC 12的各个处理器14和子系统(未示出)对缓存存储器302的访问。缓存存储器控制器300还可以管理针对从缓存存储器控制器300到存储器16的访问的存储器存取请求,以获取可以由处理器14从缓存存储器302请求但在缓存存储器302中未找到的数据。缓存存储器的存取管理的部分可以包括根据各个方面实现补充写入命令,以用于由处理器14向缓存存储器302发出的、针对压缩数据的写和读缓存存储器存取请求。补充写入命令可以用于针对压缩数据的缓存存储器存取请求,其中该压缩数据具有使得该压缩数据不会填满缓存行的大小或压缩比率。
对于针对压缩数据的写或读缓存存储器存取请求,缓存存储器控制器304可以接收作为缓存存储器存取请求的一部分或与缓存存储器存取请求分开的由处理器14发出的补充写入命令。在一个方面中,补充写入命令可以是被开发用于指示补充写入命令的新信号,包括新指令、包括在缓存存储器存取请求中的(一个或多个)持久字段、或与缓存存储器存取请求相关联的通信消息的部分。该信号可以包含用于指示缓存存储器控制器304来实现产生补充写入命令的指令。在一个方面中,缓存存储器控制器304可以被配置为实现补充写入命令并且辨别被配置为触发缓存存储器控制器304来执行补充写入命令的信号。该信号可以是现有信号并且缓存存储器控制器300可以被配置为识别用于触发补充写入命令的现有信号。在一个方面中,缓存存储器控制器304可以被配置为识别何时缓存存储器存取请求是针对特定大小、压缩比率和/或位置的压缩数据,并且确定是否要执行补充写入命令。
当压缩数据可能没有填满其被寻址为占据的一个或多个缓存行时,补充写入命令可以被实现用于针对该压缩数据的任何写缓存存储器存取请求。补充写入命令可以被实现用于针对压缩数据的任何读缓存存储器存取请求,其中在由缓存存储器存取请求的地址指定的缓存行中没有找到该压缩数据(例如,缓存缺失)。可以从存储器16获取压缩数据并将其写入到缓存存储器302。当从存储器16写入到缓存存储器302的压缩数据可能没有填满其被寻址为占据的一个或多个缓存行时,补充写入命令可以被实现用于读缓存存储器请求。
如将在下文更详细讨论的,从处理器14和存储器16接收的用于写入到缓存存储器302的数据可以包括仅压缩数据,而不管压缩数据是否填满其被寻址为占据的一个或多个缓存行。补充写入命令可以被配置为将数据值写入到被写入用于存储压缩数据但没有被压缩数据填满的(一个或多个)缓存行的部分。补充写入命令可以使得缓存存储器控制器300用补充数据值填满(一个或多个)缓存行的剩余部分,补充数据值可以是恒定值或值的模式。在一个方面中,补充写入命令可以使得缓存存储器控制器300用随机数据值填满(一个或多个)缓存行的剩余部分。
从存储器16接收仅压缩数据减少了在计算设备的组件之间传输压缩数据所必需的带宽。传统上,来自存储器16的压缩数据可以被接收作为事务(其还包括过度提取数据)的部分。过度提取数据可以包括随机数据值,其被添加到压缩数据以填满(一个或多个)缓存行的没有被压缩数据填满的部分。例如,对于128字节的缓存行和64字节的压缩数据,将压缩数据写入缓存行可能仅填满大约一半的缓存行。从存储器16接收压缩数据表示事务还可以包括64字节的过度提取数据以填满128字节缓存行。使用补充写入命令,而不是接收64字节压缩数据和64字节过度提取数据,缓存存储器控制器300可以从存储器16接收仅64字节压缩数据。在该示例中,在存储器16与缓存存储器控制器300之间发送的数据是可以在常规系统中被传输的数据的一半。缓存存储器控制器300可以用补充数据填满(一个或多个)缓存行的剩余部分,而不是从存储器16接收过度提取数据。因此,用于在存储器16与缓存存储器控制器300之间传输数据所必需的带宽可以减小。此外,与写入随机的过度提取数据相比,使用恒定值或指定的模式来填满缓存行的剩余部分可以减少用于写入剩余部分的功率。恒定值或模式还可以用来将该补充数据标识为无效数据,而无需设置无效或脏指示符。在一个方面中,由于缓存存储器控制器300负责填满(一个或多个)缓存行,因此其可以知道补充数据是无效的,并且可以避免设置无效或脏指示符,或者可以忽略无效或脏比特。
类似地,对于来自处理器14的使用补充写入命令的写缓存存储器存取请求,缓存存储器控制器300可以处理写入恒定值、值的模式或随机值以填满缓存行的剩余部分。因此,可能会出现类似的功率节省的益处。如上文所讨论的,补充数据可以用于标识无效数据,而无需设置无效或脏指示符。此外,缓存存储器控制器300可以知道补充数据是无效的,并且可以避免设置无效或脏指示符,或者可以忽略无效或脏比特。
在一个方面中,对于写缓存存储器存取请求,处理器14可以实现功率感知填充。如将在下文更详细地讨论的,处理器14可以识别:写缓存存储器存取请求的压缩数据可能没有填满该压缩数据被寻址的(一个或多个)缓存行。处理器14还可以识别何处相对于压缩数据可能存在(一个或多个)缓存行的未填满部分,以及所述未填满部分的大小。处理器14可以在发送写缓存存储器存取请求之前向压缩数据添加填充数据,例如恒定数据值或数据值的模式。处理器14可以一起发送压缩数据和填充数据的组合数据作为写缓存存储器存取请求的部分。缓存存储器控制器300可以接收填充的压缩数据并将填充的压缩数据视为填满数据被寻址到的(一个或多个)缓存行的写缓存存储器存取请求的任何其它数据。例如,对于128字节缓存行和64字节的压缩数据,将压缩数据写入缓存行可能填充只有大约一半的缓存行。已对数据进行压缩的处理器14(其因此知道压缩数据的大小和/或压缩比率并知道可以通过通信总线发送到缓存存储器302的数据量和/或缓存存储器302的缓存行的大小)可以确定压缩数据的大小是否可能没有填满缓存行。利用该信息,处理器内核14可以确定要将填充数据添加到压缩数据以填满该压缩数据被寻址写入的缓存存储器302中的(一个或多个)缓存行。填充信息(其是一个或多个恒定数据值或数据值的模式)还可以实现功率节省,这是因为将填充数据发送并写入到缓存存储器302所需的能量的量减少。
图4和图5根据一个方面,示出了缓存存储器的一部分,包括存储压缩数据408的缓存行400、402、404或由存储压缩数据512的至少一对缓存行508、510构成的缓存块500、502、504。如这些示例中所示出的,每个缓存行400、402、404、508、510可以存储不完全填满所有缓存行400、402、404、508、510的压缩数据,留下未填满部分410、514。如上所述,未填满部分410、514可以使用补充写入命令或功率节省填充来填满。因此,未填满部分410、514可以用补充数据或填充数据来填满。
图4和图5中示出的方面示出了其中可以实现补充写入命令和功率感知填充的常见情形。
参考图4并继续先前的示例,示例缓存行400、402、404、508、510均是128字节。在示出的示例中,压缩数据408是64字节。由于压缩数据408是缓存行400、402、404的大小的一半,其中它可以存储在缓存存储器上,因此缓存行400、402、404的64字节未填满部分410将被创建。每个缓存行400、402、404的64字节未填满部分可以是连续的或当压缩数据408不与缓存行404的任一端对齐时在两个段中。
参考图5,一对缓存行508、510可以均是128字节并且一起形成256字节的缓存块500、502、504。缓存块500、502、504中的压缩数据512可能大于单个缓存行508、510,但小于缓存行508、510的组合。例如,压缩数据512可以是192字节。由于在该示例中的压缩数据512是缓存块500、502、504(或缓存行508、510的组合)的大小的四分之三,其中它存储在缓存存储器上,因此缓存行508、510的未填满部分514被创建。每个缓存行508、510的未填满部分514可以等于64字节的空间,其可以是连续的或当压缩数据512不与缓存块504中的缓存行508、510中的任一端对齐时在两个部分中。
在各个方面中,缓存存储器控制器可以用补充数据填满未填满部分410、514。缓存存储器控制器可以向未填满部分410、514写入补充数据,包括恒定数据值、数据值的模式或随机值。在将压缩数据408、512写入到缓存行400、402、404、508、510之前、与之同时或之后,补充数据可以被写入到未填满部分410、514。缓存存储器控制器可以响应于从处理器接收到补充写入命令,将补充数据写入到未填满部分410、514。
处理器可以用填充数据填满未填满部分410、514。处理器可以将压缩数据408、512与填充数据(包括恒定数据值或数据值的模式)进行组合。处理器可以基于压缩数据的大小和/或压缩比率以及缓存存储器的缓存行的大小,确定压缩数据可能没有填满缓存行400、402、404、508、510。在将压缩数据408、512写入到缓存行400、402、404、508、510的同时,填充数据可以被写入到未填满部分410、514。缓存存储器控制器可以响应于接收到针对来自处理器的具有填充数据的压缩数据的写缓存存储器存取请求,将填充数据写入到未填满部分410、514。
在各个方面中,存储器缓存存储器控制器和/或处理器可以提供对补充写入命令或功率感知填充的完全或有限的支持。在一个方面中,支持可以包括填满未填满部分410、514,而不管压缩数据408、512位于缓存行400、402、404、508、510中何处。在各个方面中,当压缩数据408、512与缓存行400、402、404、508、510的开始和/或结束对齐时,支持可以包括填满未填满部分410、514。
图6根据一个方面,示出了用于从缓存存储器302获取压缩数据的、具有补充写入命令的读缓存存储器存取请求的过程和信号。用于执行具有补充写入命令的读缓存存储器存取请求的信号600-620可以经由一个或多个通信总线和SoC的各种其它组件在处理器14、缓存存储器控制器300、缓存存储器302、存储器控制器304以及存储器16之间进行传输。处理器14可以向缓存存储器控制器300发送具有补充写入命令信号600的读缓存存储器存取请求。接收到具有补充写入命令信号600的读缓存存储器存取请求,缓存存储器控制器300可以向缓存存储器300发送针对由具有补充写入命令信号的读缓存存储器存取请求所请求的数据的获取信号602。从缓存存储器302到缓存存储器控制器300的缓存缺失信号604可以向缓存存储器控制器300指示在缓存中没有找到所请求的数据。虽然处理器14可能期望在缓存存储器302中找到所请求的数据,但是出于各种原因可能没有找到该数据。例如,基于可以被指定用于缓存存储器302的各种数据收回(eviction)方案,所请求的数据可能在尝试获取它之前被收回。
缓存存储器控制器300可以向存储器控制器304发出读存储器存取请求信号606,以尝试获取在存储器16上备份的所请求数据。与上文讨论的存储器16或存储设备相比,缓存存储器302是用于存储相对小量的数据和程序指令以便相对快速存取的易失性存储器。缓存存储器302可以包括是存储在存储器16中或存储设备中的数据和程序指令的复制本的数据和程序指令。在一个方面中,根据各个方案,缓存存储器302中的数据可以被更改并存储回到存储器16或存储设备,以保持计算设备中的数据的完整性。因此,存储器存取控制器300可以知道在存储器16中何处可以备份从缓存存储器302缺失的请求数据。接收到存储器存取请求信号606,存储器控制器304可以向存储器16发送针对由具有补充写入命令的读缓存存储器存取请求所请求的数据的获取信号608。存储器16可以在返回信号610中向存储器控制器304提供排除了任何过度提取数据的所请求的数据。所请求的数据可以在另一个返回信号612中由存储器控制器304转发到缓存存储器控制器300。
接收到具有所请求的数据的返回信号612,缓存存储器控制器300可以向缓存存储器302发送具有所请求的数据的写信号614以将所请求的数据写入到指定地址/(一个或多个)缓存行。缓存存储器控制器300还可以向缓存存储器302发送具有补充数据的补充写入信号616以将补充数据写入到指定地址/(一个或多个)缓存行,其中写入所请求的数据在缓存行中创建了未填满部分。在一个方面中,具有所请求的数据的写入信号614和具有补充数据的写入信号616的顺序可以颠倒。在一个方面中,具有所请求的数据的写入信号614和具有补充数据的写入信号616可以被组合并且作为单个信号被发送,或同时被发送。缓存存储器302可以向缓存存储器控制器300发送具有所请求的数据的返回信号618,并且缓存存储器控制器300可以通过返回信号620向处理器14转发所请求的数据。在一个方面中,具有所请求的数据的返回信号618以及返回信号620可以排除从其中所请求的数据可以被获取的缓存行的补充数据。
图7根据一个方面,示出了用于向缓存存储器302写入压缩数据的、具有补充写入命令的写缓存存储器存取请求的过程和信号。用于执行具有补充写入命令的写缓存存储器存取请求的信号700-712可以经由一个或多个通信总线和SoC的各种其它组件在处理器14、缓存存储器控制器300、缓存存储器302、存储器控制器304以及存储器16之间进行传输。处理器14可以向缓存存储器控制器300发送具有补充写入命令信号700的写缓存存储器存取请求。接收到具有补充写入命令信号600的写缓存存储器存取请求,缓存存储器控制器300可以向缓存存储器302发送具有所请求的数据的写入信号702以将所请求的数据写入到指定地址/(一个或多个)缓存行。缓存存储器控制器300还可以向缓存存储器302发送具有补充数据的补充写入信号704以将补充数据写入到指定地址/(一个或多个)缓存行,其中写入所请求的数据在缓存行中创建了未填满部分。在一个方面中,具有所请求的数据的写入信号702和具有补充数据的写入信号704的顺序可以颠倒。在一个方面中,具有所请求的数据的写入信号702和具有补充数据的写入信号704可以被组合并且作为单个信号被发送,或同时被发送。
如上所述,可以将写入到缓存存储器302的数据备份到存储器16。这样做的话,缓存存储器控制器300可以发送针对所请求的数据的获取信号706。在一个方面中,针对所请求的数据的获取信号706可以与具有补充写入命令信号700的写缓存存储器存取请求在时间上分开,以使得可能已发生一个或多个缓存存储器存取请求。因此,该实例中的所请求的数据被这样命名,以便识别与具有补充写入命令信号700的写缓存存储器存取请求相关的数据,即使可能没有来自处理器14的与所请求的数据相关的待决请求。缓存存储器302可以向缓存存储器控制器300发送具有所请求的数据的返回信号708。缓存存储器控制器300可以向存储器控制器304发出写存储器存取请求信号710以将所请求的数据写入存储器16。在一个方面中,具有所请求的数据的返回信号708以及写存储器存取请求信号710可以排除从其中所请求的数据可以被获取的缓存行的补充数据。接收到具有所请求的数据的写存储器存取请求信号710,存储器存取控制器304可以向存储器16发送具有所请求的数据的写入信号712。
图8根据一个方面,示出了用于向缓存存储器302写入压缩数据的、具有功率感知填充的写缓存存储器存取请求的过程和信号。用于执行具有功率感知填充的写缓存存储器存取请求的信号800-814可以经由一个或多个通信总线和SoC的各种其它组件在处理器14、缓存存储器控制器300、缓存存储器302、存储器控制器304以及存储器16之间进行传输。处理器14可以对针对写缓存存储器存取请求的某一量的数据进行压缩800。处理器14可以确定并组合802填充数据到压缩数据以填满针对写缓存存储器存取请求的(一个或多个)缓存行。处理器14还可以向缓存存储器控制器300发送具有功率感知填充信号804的写缓存存储器存取请求。具有功率感知填充信号804的写缓存存储器存取请求可以包括:包含与填充数据进行组合的压缩数据的请求数据。接收到具有功率感知填充信号804的写缓存存储器存取请求,缓存存储器控制器300可以向缓存存储器302发送具有所请求的数据的写入信号806以将所请求的数据写入到指定地址/(一个或多个)缓存行。
如上所述,可以将写入到缓存存储器302的数据备份到存储器16。这样做的话,缓存存储器控制器300可以发送针对所请求的数据的获取信号808。在一个方面中,针对所请求的数据的获取信号808可以与具有功率感知填充信号804的写缓存存储器存取请求在时间上分开,以使得可能已发生一个或多个缓存存储器存取请求。因此,该实例中的所请求的数据被这样命名,以便识别与具有功率感知填充信号804的写缓存存储器存取请求相关的数据,即使可能没有来自处理器14的与所请求的数据相关的待决请求。缓存存储器302可以向缓存存储器控制器300发送具有所请求的数据的返回信号810。缓存存储器控制器300可以向存储器控制器304发出写存储器存取请求信号812以将所请求的数据写入存储器16。在一个方面中,具有所请求的数据的返回信号810以及写存储器存取请求信号812可以包括从其中所请求的数据可以被获取的缓存行的填充数据。接收到具有所请求的数据的写存储器存取请求信号812,存储器存取控制器304可以向存储器16发送具有所请求的数据的写入信号814。
图9示出了用于实现针对压缩数据的具有补充写入命令的缓存存储器存取请求的方法900的方面。可以在计算设备中使用软件、通用或专用硬件(例如处理器或缓存存储器控制器)、或软件和硬件的组合来执行方法900。在框902中,缓存存储器控制器可以接收用于从缓存存储器读取或向缓存存储器写入的缓存存储器存取请求,其包括补充写入命令。在一个方面中,处理器可以响应于确定在缓存存储器存取请求中请求的数据可能没有填满其被寻址到的所有缓存行,发出具有补充写入命令的缓存存储器存取请求。在一个方面中,该确定可以是基于压缩数据具有某一大小或压缩比率,以使得该压缩数据可能没有填满其被寻址到的所有缓存行。在一个方面中,该确定可以是基于未压缩数据,该未压缩数据可能太小不会填满其被寻址到的所有缓存行。
在判断框904中,缓存存储器控制器可以确定压缩数据是否填满其被寻址到的(一个或多个)缓存行。缓存存储器控制器可以知道缓存存储器的缓存行的大小和每个缓存行的地址。使用该信息,缓存存储器控制器可以比较缓存行和压缩数据的地址和/或大小,以确定压缩数据是否可以填满其被寻址到的缓存行。响应于确定压缩数据将填满其被寻址到的缓存行(即,判断框904=“是”),缓存存储器控制器可以向缓存存储器写入压缩数据,如在框906中所知的。
响应于确定压缩数据将不填满其被寻址到的缓存行(即,判断框904=“否”),缓存存储器控制器可以在判断框908中确定缓存存储器存取请求是用于从缓存存储器读取还是向缓存存储器写入。缓存存储器存取请求可以包含用于指示缓存存储器控制器来实现从缓存存储器读取或向缓存存储器写入的指示。
响应于确定缓存存储器存取请求是用于向缓存存储器写入的缓存写入请求(即,判断框908=“写入”),缓存存储器控制器可以在框910中确定要向(一个或多个)缓存行的未填满部分写入的补充数据。如上所述,补充数据可以包括恒定数据值(例如,全“0”)、数据值的模式或随机数据值。在一个方面中,补充数据可以是在缓存存储器控制器的软件或硬件中预先确定的。在框912中,缓存存储器控制器可以将压缩数据在其被寻址到的缓存行处写入到缓存存储器。在框914中,缓存存储器控制器可以向缓存存储器写入补充数据以填满压缩数据被寻址到的缓存行的未填满部分。在一个方面中,框912和914中的写入操作的顺序可以颠倒。在一个方面中,框912和914中的写入操作可以同时执行。
响应于确定缓存存储器存取请求是用于从缓存存储器读取的缓存读取请求(即,判断框908=“读取”),缓存存储器控制器可以在判断框916中确定压缩数据是否位于其被寻址到的缓存行中。如上文所讨论的,不管处理器是否期望将压缩数据放在缓存存储器的特定地址处,出于各种原因(例如缓存替换方案)可能没有在该特定地址处找到压缩数据。响应于确定压缩数据没有位于其被寻址到的缓存行中,这被称为缓存缺失(即,判断框916=“否”),缓存存储器控制器可以在框918中从存储器获取压缩数据。如上所述,缓存存储器控制器可以向存储器存取控制器发出存储器存取请求以从存储器获取压缩数据。缓存存储器控制器可以从存储器请求并接收仅压缩数据,而不是如传统上所做的获取具有过度提取数据的压缩数据。在存储器与缓存存储器控制器之间发送仅压缩数据,而不是压缩数据加上过度提取数据,减少了对因缓存缺失而产生的存储器存取请求的带宽需求。
在框920中,缓存存储器控制器可以确定要向缓存行的未填满部分写入的补充数据,如上文在框910中所描述的。在框922中,缓存存储器控制器可以将压缩数据在其被寻址到的缓存行处写入到缓存存储器,如上文在框912中所描述的。在框924中,缓存存储器控制器可以向缓存存储器写入压缩数据以填满压缩数据被寻址到的缓存行的未填满部分,如上文在框914中所描述的。在一个方面中,框922和924中的写入操作的顺序可以颠倒。在一个方面中,框922和924中的写入操作可以同时执行。
在框926中,缓存存储器控制器可以响应于读缓存存储器存取请求,将压缩数据返回给处理器。响应于确定压缩数据位于其被寻址到的缓存行中,这被称为缓存命中(即,判断框916=“是”),缓存存储器控制器可以在框928中从缓存存储器获取压缩数据。在框926中,缓存存储器控制器可以响应于读缓存存储器存取请求,将压缩数据返回给处理器。
图10示出了用于实现针对压缩数据的具有功率感知填充的缓存存储器存取请求的方法1000的方面。可以在计算设备中使用软件、通用或专用硬件(例如处理器或缓存存储器控制器)、或软件和硬件的组合来执行方法1000。如上文所提到的,为了简化说明,本文的方面从压缩数据角度是相关的;然而,该方面还可以应用于数据太小不会填满一个或多个缓存行。在可选的框1002中,处理器可以压缩针对写缓存存储器存取请求的数据。在判断框1004中,处理器可以确定压缩数据是否将填满处理器将用于存储的该压缩数据寻址到的缓存存储器的(一个或多个)缓存行。在一个方面中,该确定可以是基于压缩数据具有某一大小或压缩比率,以使得该压缩数据可能没有填满其被寻址到的所有缓存行。在一个方面中,该确定可以是基于未压缩数据,该未压缩数据可能太小不会填满其被寻址到的所有缓存行。响应于确定压缩数据将填满处理器将用于存储的该压缩数据寻址到的缓存存储器的(一个或多个)缓存行(即,判断框1004=“是”),处理器可以发送如所知的针对压缩数据的写缓存存储器存取请求。
响应于确定压缩数据将不会填满处理器将用于存储的该压缩数据寻址到的缓存存储器的(一个或多个)缓存行(即,判断框1004=“否”),处理器可以在框1006中确定要与压缩数据组合的填充数据(例如,恒定值、数据的模式或随机数据),以使得经组合的数据可以填满(一个或多个)缓存行。通常可以从与使用随机数据相比,减少将填充数据发送和写入到缓存存储器和存储器所需的功率的角度确定填充数据。填充数据还可以被选择为特定的值或模式,所述特定的值或模式可以被赋予给处理器、缓存存储器控制器和/或存储器控制器一定意义,诸如将填充数据识别为无效数据。在一个方面中,填充数据可以是在处理器的软件或硬件中预先确定的。
在框1010中,处理器可以将压缩数据与填充数据进行组合。可以以这样的方式来执行该组合:在缓存存储器中针对压缩数据进行寻址可以不会改变并且填充数据可以用于在压缩数据周围填满缓存行地址。在一个方面中,该组合可以更改对压缩数据的寻址以使压缩数据与(一个或多个)缓存行的开始或结束对齐,并且填充数据可以用于填满在(一个或多个)缓存行中的压缩数据之前或之后的缓存行地址。在框1012中,处理器可以向缓存存储器控制器发送具有经组合的数据(包括压缩数据和填充数据)的写缓存存储器存取请求以便将经组合的数据存储在缓存存储器中。
图11示出了适用于与各个方面一起使用的示例移动计算设备。移动计算设备1100可以包括处理器1102,处理器1102耦合到触摸屏控制器1104和内部存储器1106。处理器1102可以是被指定用于通用或特定处理任务的一个或多个多内核集成电路。内部存储器1106可以是易失性或非易失性存储器,并且还可以是安全的和/或加密的存储器、或不安全的和/或未加密的存储器、或其任意组合。可以利用的存储器类型的示例包括但不限于DDR、LPDDR、GDDR、WIDEIO、RAM、SRAM、DRAM、P-RAM、R-RAM、M-RAM、STT-RAM和嵌入式DRAM。触摸屏控制器1104和处理器1102还可以耦合到触摸屏面板1112,诸如电阻式感测触摸屏、电容式感测触摸屏、红外线感测触摸屏等。另外,计算设备1100的显示器不必具有触摸屏能力。
移动计算设备1100可以具有用于发送和接收通信的一个或多个无线电信号收发机1108(例如,Peanut、蓝牙、Zigbee、Wi-Fi、RF无线电)和天线1110,其彼此耦合和/或耦合到处理器1102。收发机1108和天线1110可以与上文提到的电路一起使用以实现各种无线传输协议栈和接口。移动计算设备1100可以包括蜂窝网络无线调制解调器芯片1116,其实现经由蜂窝网络的通信并且耦合到处理器。
移动计算设备1100可以包括耦合到处理器1102的外围设备连接接口1118。外围设备连接接口1118可以被单独地配置为接受一种类型的连接,或者可以被配置为接受各种类型的物理和通信连接,公共或专有的,诸如USB、火线、雷电接口或PCIe。外围设备连接接口1118还可以耦合到类似地配置的外围设备连接端口(未示出)。
移动计算设备1100还可以包括用于提供语音输出的扬声器1114。移动计算设备1100还可以包括壳体1120,其由塑料、金属或材料的组合构成,用于包含本文所讨论的组件中的一些或全部。移动计算设备1100可以包括耦合到处理器1102的电源1122,诸如一次性或可再充电电池。可再充电电池也可以耦合到外围设备连接端口以从在移动计算设备1100外部的源接收充电电流。移动计算设备1100还可以包括用于接收用户输入的物理按钮1124。移动计算设备1100还可以包括用于使移动计算设备1100开启和关闭的电源按钮1126。
如上所述的各个方面还可以实现在多种移动计算设备(例如在图12中示出的膝上型计算机1200)内。许多膝上型计算机包括触摸板触摸表面1217,其用作计算机的定点设备,并且因此可以接收与在配备有触摸屏显示器和上述的计算设备上实现的那些手势类似的拖拽、滚动和轻击手势。膝上型计算机1200通常将包括处理器1211,处理器1211耦合到易失性存储器1212和大容量非易失性存储器,诸如闪存的磁盘驱动器1213。另外,计算机1200可以具有用于发送和接收电磁辐射的一个或多个天线1208,天线1208可以连接到无线数据链路和/或蜂窝收发机1216(其耦合到处理器1211)。计算机1200还可以包括耦合到处理器1211的软盘驱动器1214和压缩盘(CD)驱动器1215。在笔记本配置中,计算机壳体包括触摸板1217、键盘1218和显示器1219,它们都耦合到处理器1211。计算设备的其它配置可以包括如所公知的耦合到处理器的计算机鼠标或跟踪球(例如,经由USB输入),其也可以结合各个方面来使用。
各个方面还可以实现在用于在服务器缓存存储器中对数据进行压缩的多种商业上可用的服务器中的任何一种中。图13中示出了示例服务器1300。这样的服务器1300通常包括一个或多个多内核处理器组装件1301,其耦合到易失性存储器1302和大容量非易失性存储器,诸如磁盘驱动器1304。如图13中所示出的,可以通过将多内核处理器组装件1301插入组装件的架子来将其添加到服务器1300。服务器1300还可以包括耦合到处理器1301的软盘驱动器、压缩盘(CD)或DVD光盘驱动器1306。服务器1300还可以包括耦合到多内核处理器组装件1301的网络接入端口1303,用于与网络1305(例如到其它广播系统计算机和服务器的局域网、互联网、公共交换电话网络和/或蜂窝数据网络(例如,CDMA、TDMA、GSM、PCS、3G、4G、LTE或任何其它类型的蜂窝数据网络))建立网络接口连接。
用于在可编程处理器上执行以实现各个方面的操作的计算机程序代码或“代码”可以以诸如C、C++、C#、Smalltalk、Java、JavaScript、Visual Basic、结构化查询语言(例如,Transact-SQL)、Perl之类的高级编程语言或以各种其它编程语言来编写。如本申请中所使用的,存储在计算机可读存储介质上的程序代码或程序可以指其格式是处理器可理解的机器语言代码(例如,目标代码)。
许多移动计算设备操作系统内核被组织到用户空间(其中,无特权的代码运行)和内核空间(其中,特权代码运行)中。这种分开在安卓和其它通用公共许可(GPL)环境中是特别重要的,在所述其它通用公共许可环境中,作为内核空间的一部分的代码必须是GPL许可的,而运行在用户空间中的代码可以不是GPL许可的。应当理解,除非另外明确声明,否则在此讨论的各种软件组件/模块可以实现在内核空间或用户空间中。
提供前述的方法描述和过程流程图仅仅作为说明性示例,而不旨在需要或暗示各个方面的操作必须按照所给出的顺序执行。如本领域普通技术人员将意识到的,前述方面中的操作的顺序可以按照任何顺序来执行。诸如“此后”、“随后”、“接着”等词不是旨在限制操作的顺序;这些词仅用于引导读者通读方法的描述。此外,任何以单数形式引用权利要求要素,例如,使用冠词“一”、“一个”、“所述”不应被解释为将该元素限制成单数。
结合各个方面所描述的各种说明性的逻辑框、模块、电路和算法操作可以实现成电子硬件、计算机软件、或者两者的组合。为了清楚地描绘硬件和软件的这种可互换性,上文已经对各种说明性的组件、框、模块、电路以及操作围绕其功能进行了总体描述。至于这种功能是实现成硬件还是实现成软件,取决于具体应用和施加在整体系统上的设计约束。本领域技术人员可以针对每个特定应用,以变化的方式实现所描述的功能,但是,这样的实现决定不应被解释为导致脱离本发明的范围。
可以利用被设计为执行本文所描述的功能的通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或晶体管逻辑、分立硬件组件、或者其任意组合来实现或执行用于实施结合本文公开的各方面所描述的各种说明性的逻辑、逻辑块、模块、以及电路的硬件。通用处理器可以是微处理器,但在替代的方案中,处理器可以是任何常规的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器结合DSP内核、或者任何其它这样的配置。或者,一些操作或方法可以由特定于给定功能的电路来执行。
在一个或多个方面中,所述功能可以用硬件、软件、固件或其任意组合来实现。如果用软件实现,则可以将所述功能作为一个或多个指令或代码存储在非暂时性计算机可读介质或者非暂时性处理器可读介质上。本文所公开的方法或算法的操作可以体现在处理器可执行的软件模块中,该处理器可执行的软件模块可以驻留在非暂时性计算机可读的或处理器可读的存储介质上。非暂时性计算机可读的或处理器可读的存储介质可以是可以由计算机或处理器存取的任何存储介质。通过举例而非限制性的方式,这种非暂时性计算机可读的或处理器可读的介质可以包括RAM、ROM、EEPROM、闪存、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备、或者可以用于以指令或数据结构的形式存储期望的程序代码并可以由计算机存取的任何其它介质。如本文所使用的,磁盘和光盘包括压缩盘(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。上述的组合也包括在非暂时性计算机可读和处理器可读介质的范围之内。此外,方法或算法的操作可以作为代码和/或指令中的一个或任何组合、或代码和/或指令集驻留在非暂时性处理器可读介质和/或计算机可读介质上,所述非暂时性处理器可读介质和/或计算机可读介质可以并入计算机程序产品。
提供所公开的方面的以上描述使任何本领域技术人员能够实施或使用本发明。对于本领域技术人员来说,对这些方面的各种修改将是显而易见的,并且在不脱离本发明的精神或范围的情况下,可以将本文定义的总体原理应用于其它方面。因此,本发明并不旨在受限于本文示出的方面,而是要符合与所附权利要求书和本文所公开的原理和新颖特征的相一致的最宽的范围。