加载和存储单元以及数据高速缓存的排序和带宽改进的制作方法

文档序号:14748449发布日期:2018-06-22 06:16阅读:991来源:国知局

本申请要求2014年10月25日提交的美国临时申请序列号61/895,618的权益,所述申请全文通过引用的方式并入本文。

技术领域

所公开的实施方案通常涉及处理器,且更特定而言,涉及一种用于改进加载/存储操作和数据高速缓存性能以最大化处理器性能的方法、系统和装置。

发明背景

随着硬件性能方面的进展的演进,已演变出两种通用类型的处理器。最初当存在处理器与其它组件(诸如存储器)的交互时,研发了包括复杂指令集计算机(CISC)的处理器指令集,这些计算机是在由从存储器获取的数据和指令导致延迟的前提下研发。复杂指令意味着更有效使用处理器,使用处理器时间更有效,使用若干循环的计算机时钟来完成指令,而不是等待来自存储器源的指令。之后,当存储器性能的演进跟上处理器时,研发了精简指令集计算机(RISC)。这些计算机可以比CISC处理器更小的循环处理指令。一般而言,RISC处理器利用简单加载/存储架构,所述架构简化指令到处理器的传送,但是因为并非所有指令均是均匀或独立的,所以实施数据高速缓存以允许指令的优先并且维持其相关性。随着多核心处理器的研发,发现来自RISC处理器的数据高速缓存架构的原理还具有平衡由多核心处理器处置的指令线程的优点。

已证明RISC处理器设计比CISC类型处理器更具有能量效率且因此在更合乎低成本、便携电池供电设备,诸如(但不限于)智能电话、平板机和笔记本,而CISC处理器在希望有计算性能的应用中是优选的。CISC处理器的实例是x86处理器架构类型,最初由SantaClara,California的Intel公司研发,而高级RISC机器(ARM)架构类型的RISC处理器的实例最初由Cambridge,UK的ARMLtd研发。最近,ARM架构类型的RISC处理器已发布64位配置,其包括使用64位通用寄存器的64位执行状态,以及64位程序计数器(PC)、堆栈指针(SP)和执行链路寄存器(ELR)。64位执行状态提供单指令集,其为使用32位指令编码且向后兼容ARM架构类型的32位配置的固定宽带指令集。此外,计算平台要求利用使用64位配置的一个或多个CISC处理器核心和一个或多个RISC处理器核心的性能能力。在这两个情况中,这些RISC处理器核心配置中的每个的加载/存储架构的常规配置和数据高速缓存在性能能力上的滞后具有造成导致一个或多个处理器核心更长时间处理指令线程的延时的影响。因此,需要改进RISC处理器配置的加载/存储和数据高速缓存能力的方法。

发明概要

在根据本发明的实施方案中,一种系统和方法包括使具有乱序(OOO)重新分配的加载队列(LDQ)的管线化执行单元的无序加载排队,其中LDQ每循环拾取至多2个拾取以使来自存储器的加载排队,并且使用加载顺序队列(LOQ)跟踪乱序完成的加载,从而确保到相同地址的加载看起来像其有序绑定其值一样。

使用加载间互锁(LTLI)内容可寻址存储器(CAM)生成LOQ条目,其中LOQ包括至多16个条目。

LTLICAM重构用于使相同地址的加载交互的寿命关系,仅考虑相同地址的有效加载并且生成不可高速缓存的相同地址的加载的失败状态,使得不可高速缓存的加载保持有序。

LOQ通过在跟踪的地址匹配时一起合并条目而减少队列大小。

在另一实施方案中,执行单元包括多个管线以促进op代码的加载和存储操作,每个op代码可使用对应于来自高速缓存转译后备缓冲器(TLB)中的存储器的物理地址的虚拟地址由执行单元寻址。所述执行单元包括管线化页表遍历器,其支持至多4次同时表遍历。

在另一实施方案中,执行单元包括多个管线以促进op代码的加载和存储操作,每个op代码可使用对应于来自高速缓存转译后备缓冲器(TLB)中的存储器的物理地址的虚拟地址由执行单元寻址。所述执行单元包括管线化页表遍历器,其支持至多4次同时表遍历。

附图简述

可从通过实例的方式结合附图给出的以下描述获得更详细理解,其中:

图1是在其中可实施一个或多个公开实施方案的实例设备的框图;

图2是根据本发明的一个方面的处理器的框图;

图3是根据本发明的一个方面的TLBMAB的页表遍历器的框图;

图4是根据本发明的一个方面的页大小的表的框图;

图5是根据本发明的一个方面的有关CAM标签位的页大小的表;

图6是根据本发明的一个方面的加载队列(LDQ)的框图;

图7是根据本发明的一个方面的使用3地址生成管的加载/存储的框图;

具体实施方式

下文描述本发明的说明性实施方案。出于清晰起见,并未在本说明书中描述实际实施的所有特征。当然,应明白,在研发任何这种实际实施方案时,可作出许多实施方式专用的决策以实现可在实施方式之间变化的研发者的具体目标,诸如与系统相关的兼容和业务相关的约束。此外,应明白,这样的研发努力可能是复杂且耗时的,但是这种努力仍将是所属领域且得益于本公开内容的技术人员的常规任务。

现将参考随附图示描述本发明。在图示中仅为了阐述且不致模糊所公开主题以所属领域技术人员所熟知的细节示意性描绘各种结构、连接、系统和设备。然而,并未包括附图以描述且解释本发明的说明性实例。本文使用的词字和短语应理解且解译为具有与所属领域技术人员理解的那些词字和短于一致的意思。术语或短语并无特殊的定义即不同于如所属领域技术人员所理解的一般和习惯意思的定义旨在暗示一致利用本文的术语和短语。在术语或短语旨在具有特殊意思,即除了所属领域技术人员所理解之外的意思的方面,将在本说明书中以直接且非推断性提供术语或短语的特殊定义的定义方式明确提出这样的特殊定义。

图1是在其中可实施一个或多个公开实施方案的实例设备100的框图。设备100可以包括例如计算机、游戏设备、手持设备、机顶盒、电视机、移动电话或平板计算机。设备100包括处理器102、存储器104、存储装置106、一个或多个输入手部108和一个或多个输出设备110。设备100还可以任选包括输入驱动器112和输出驱动器114。应理解,设备100可以包括图1中未示出的额外组件。

处理器102可以包括中央处理单元(CPU)、图形处理单元(GPU)、位于相同晶粒上的CPU和GPU、或一个或多个处理器核心,其中每个处理器核心可以是CPU或GPU。存储器104可以位于相同晶粒作为处理器102,或者可以独立于处理器102定位。存储器104可以包括易失性或非易失性存储器,例如随机存取存储器(RAM)、动态RAM或高速缓存。

储存装置106可以包括固定或可移动存储装置,例如硬盘驱动器、固态驱动器、光盘或闪存驱动器。输入设备108可包括键盘、小型键盘、触摸屏、触摸板、检测器、麦克风、加速计、陀螺仪、生物特征扫描仪或网络连接(例如,无线局域网传输卡和/或无线IEEE802接受信号)。输出设备110可包括显示器、扬声器、打印机、触觉反馈设备、一个或多个灯、天线或网络连接(例如,无线局域网传输卡和/或无线IEEE802接受信号)。

输入驱动器112与处理器102和输入设备108通信,并且允许处理器102从输入设备108接收输入。输出驱动器114与处理器102和输出设备110通信,并且允许处理器102将输出发送到输出设备110。应注意,输入驱动器112和输出驱动器114是任选组件,并且如果输入驱动器112和输出驱动器114不存在,那么设备100将以相同方式操作。

图2是可用作独立处理器或多核操作环境的处理器核心200的示例性实施方案。处理器核心是64位RISC处理器核心,诸如Aarch64架构类型处理器,其最初通过在其中指令在进入解码引擎且被共享执行引擎208和浮点引擎210处理之前被馈送给指令高速缓存(Icache)和预取引擎204的分支预测和地址生成引擎202处理指令线程。加载/存储队列引擎(LS)212与执行引擎交互以处置来自处理器存储器请求且由L1数据高速缓存214处置由能够存储数据和指令信息的L2高速缓存216支持的加载和存储指令。本示例性实施方案的L1数据高速缓存被定大小在具有8路(way)关联性的32千字节(KB)。虚拟地址与物理地址之间的存储器管理由页表遍历器218和数据转译后备缓冲器(DTLB)220处置。DTLB220条目可以包括虚拟地址、页大小、物理地址和存储器属性组。

页表遍历器(PTW)

典型页表遍历器是经过一系列步骤的状态机。对于诸如支持嵌套分页的二级转译的“x86”和ARMv8的架构而言,这个转译可存在多达20-30个主要步骤。对于改进性能且一次进行多次页表遍历的典型页表遍历器而言,所属领域技术人员应明白必须复制状态机及其相关联逻辑,这会导致显著成本。通常,处理页表遍历花费的显著比例的时间等待执行页表遍历过程中进行的存储器访问,因此大多数时间并未使用多数状态机逻辑。在实施方案中,页表遍历器允许存储与缓冲器中部分完成的页表遍历相关联的状态,使得可腾出状态机逻辑以在等待第一个页表遍历时可处理另一页表遍历。状态机逻辑被进一步“管线化”,使得每循环可以发起新的页表遍历,并且并发页表遍历的数目仅受限于可用缓冲器条目的数目。缓冲器具有选择接着进行哪个遍历的“拾取器”。虽然示例性实施方案拾取就绪用于其下个步骤的最旧条目,但是这个拾取器可使用任何数目的算法(先入先出、最旧者就绪、随机等)。因为所有的状态被存储在每次拾取遍历以流向管线之间的缓冲器中,所以状态机逻辑的单个副本可以处置多个并发页表遍历。

参考图3,示例性实施方案包括为管线化状态机的页表遍历器300,其支持四个同时表遍历和对包括在图2的Icache和获取控制中的LS和指令获取(IF)用的L2高速缓存转译后备缓冲器(L2TLB)302的访问。当解析TLB丢失给故障处理路径增加了显著过载时,将上下文切换到OS。为了解决这个问题,页表遍历器提供使用内置硬件来读取页表和将虚拟到物理转译自动加载到TLB中的选项。页表遍历器避免了到OS的昂贵过渡,但是需要转译处于适于硬件理解的固定格式。PTW的主要结构为:

a)L2高速缓存转译后备缓冲器(L2TLB)302,其包括1024个条目,具有8路倾斜关联且支持具有部分转译能力的4KB/64KB/1M大小的页;

b)页遍历器高速缓存(PWC)304,其具有64个条目,具有完全关联能力且支持具有部分转译能力的16M和512M大小的页;

c)转译后备缓冲器-丢失地址缓冲器(TLBMAB)306,包括4条目可拾取队列,其保存待决表遍历的地址、属性和状态;

d)IF请求缓冲器308信息,诸如在ITLB(指令转译后备缓冲器)丢失之后处理来自Icache的转译请求所需的虚拟地址和处理状态;

e)L2请求缓冲器310信息,诸如在DTLB(数据转译后备缓冲器)丢失之后处理来自Dcache的转译请求所需的虚拟地址和处理状态;

f)地址空间标识符(ASID)/虚拟机标识符(VMID)重新映射器312;

PTW管线的基本流将拾取来自TLBMAB的待决请求、访问L2TLB和PWC、确定属性/故障和下个状态、发送填充、请求LS访问存储器、处理遍历页表的填充响应,以及将部分和最终转译写入L1TLB、L2TLB、PWC和IF中。PTW支持嵌套分页、地址/数据(A/D)位更新、重新映射ASID/VMID和来自L2的TLB/IC管理清除。

PTW分页支持

本章节并不试图复制应用于表遍历的所有架构规则,因此,假定所属领域技术人员将对诸如AArch64架构类型的RISC处理器的分页架构有基本的理解,以便充分明白本描述。但是应理解,本示例性实施方案的页表遍历器支持以下分页特征:

-来自2级页表遍历的属性通常应用于1级转译但不是相反的。

-转译表基址寄存器(TTBR)的EL1(异常级1)1级可以定义两个TTBR,所有其它地址空间定义单个TTBR。

-表遍历器得到存储器类型(memtype),诸如其来自TTBR、转译控制寄存器(TCR)或虚拟转译表基址寄存器(VTTBR)的填充请求的数据或地址。

-TTBR其本身仅可产生中间物理地址(IPA)且在支持2级时需要进行转译。

-当没有定义完整地址空间时,可在L0之外的级别开始如由表大小(TSize)定义的遍历。对于64KB区组(granule)和短描述符而言这始终如此。

-当顶层不超过16个条目时,2级表可连结在一起。

-当2级支持页(backingpage)是4KB时,64KB表可分裂,导致多个TLB条目用于顶层表,例如当1级O/S指示64KB区组时,那么2级O/S指示4KB页。64KB顶层表可以具有512(4KB/8B)以上个条目。通常期望这个顶层是存储器中全部是相同属性的连续块。但是,管理程序(hypervisor)可对其施加具有不同属性的非连续4KB块。

-页表指针或条目的位字段由RISC处理器架构定义。为了进一步理解的目的(但非限制性),其中RISC处理器是Aarch64架构类型,可以查阅英国剑桥的ARMHoldingsPLC发布的ARMv8-A技术参考手册(ARMDDI0487A.C),其以引用的方式并入本文。

-所有共享性被忽略且被视为可在外部共享,其中可在外部共享指的是在总线上被桥分开的设备。

-外部memtypes被忽略,并且仅使用内部memtypes。

-表遍历在其遇到故障时停止,除非其可以由地址/数据位(A位/D位)更新非特殊性解析。

-当禁用MMU时,PTW使用常规定义的memtypes而将4KB转译返回到L1TLB和IFTLB。

-当启用MMU时,PTW发送TLB清除。

MMU(存储器管理单元)是所述架构的常规部分且实施在加载/存储单元内,主要在页表遍历器中。

页尺寸

图4的表示出常规指定页尺寸及其在示例性实施方案中的大小实施。由于不支持每个页大小,有些可能会分成更小的页。粗体指示需要旋转适当位的多循环清除的页分裂。然而,将连续页分裂成基本不连续页大小因其只是个提示而不需要额外清除。行L1C、L2C和L3C表示“连续”页。PWC的数目和L2TLB的数目基于由架构支持的常规寻址模式在其中划分所支持的页大小。管理程序可以对操作系统(O/S)施加基于2级查找而分裂的页大小,其中这些条目被标签为HypSplinter且在使用虚拟地址(VA)型的清除时全被清除,因为无法通过位翻转找到所有匹配页。部分转译/嵌套和最终LS转译被存储在L2TLB和PWC中,但是最终指令高速缓存(IC)转译并非如此。

图5的表中指示高速缓存不同大小页/部分的结构,其中内容可寻址存储器(CAM)标签位的地址也是地址的转译位。当使用常规64位寄存器时物理地址可以是至多位47,且当使用常规32位寄存器时物理地址可以是至多位31。

页分裂

根据图3的页大小表,出于实施便利而使页分裂。其在实施方案中可任选标签为分裂。当管理程序页大小比O/S页大小更小时,安装的页使用管理程序大小且将条目标记为HypervisorSplintered。当VA使TLB无效(TLBI)发生时,假定HypervisorSplintered页在VA中匹配且在操作模式CAM的剩余部分匹配时被清除。以这种方式进行分裂将造成VA的清除生成3次清除,一次通过请求的地址生成,且一次通过翻转位来得到1GB页的其它512MB页生成,且一次通过翻转位来得到2MB页的其它1MB页而生成。后两个清除仅影响通过此方法分裂的页;除非TLB没有实施该位,那么可以是任何匹配页。

在实施方案中,可以在重新映射器中优化VMID/ASID且将其做标签为具有保存的任何分页以不必要地生成额外清除。

MemType表

实施的MemTypes:

常规存储器属性间接寄存器(MAIR)编码被映射到实施方案的支持的memtypes中以保持跨平台的兼容性。PTW负责将MAIR/简短描述符编码转换成更严格的支持memtypes。2级memtypes可对1级memtype施加更多限制。在总是在上表中拾取更少/更多限制的MAIR/简短描述符编码时组合Memtypes。应注意,Hypervisor设备存储器被具体编码,以辅助将设备对齐故障捕获在正确位置。Mbit-1级支持、VMbit-2级支持、Ibit-IC支持、Cbit-DC支持的作用和DCbit-DefaultCacheable如ARMv8-A技术参考手册(ARMDDI0487A.C.)中所常规定义般被重叠在所得memtype上。

访问权限表

使用常规64位架构编码编码访问权限。当访问权限位(AP[0])是访问旗标时,其在权限检查中被假定为1。管理程序权限被单独记录以指示在哪儿指导故障。AP表影响在TLBMAB中积累供最终转译和部分写入中使用。

故障

在实施方案中,页遍历器在推断性请求上遇到的故障将告知需要被非推断性执行的加载/存储/指令。已经安装在L1TLB中遇到的权限故障被处理为TLB丢失。转译/访问旗标/地址大小故障未被写入TLB中。导致故障转译的非故障部分被高速缓存在TLB中。非推断性请求将重复来自高速缓存部分的遍历。TLB并未被完全清除来重新开始来自存储器的遍历。然后,未被安装的推断性故障(SpecFaulting)转译稍后被清除。非推断性(NonSpec)请求上可能不会发生故障,if存储器变为解析故障且现在观察到所述存储器更改。NonSpec故障将在遇到故障之后适当更新数据故障状态寄存器(DFSR)、数据故障地址寄存器(DFAR)、异常综合征寄存器(ESR)。然后LD/ST将流动且寻找异常。对IF给出所有信息来记录其本身的预取中止信息。根据在查找VA或IPA时是否产生故障而将故障以及级别记录为1级或2级。

A/D位违规:

当支持访问旗标时,可在未支持硬件管理且未设置旗标时导致故障。当支持硬件管理时,如果未设置旗标,那么推断性遍历将出故障;非推断性遍历将原子地设置位。脏位(Dirty-bit)更新同样如此,不同的是转译先前可能已由加载高速缓存。

安全故障:

如果非安全访问尝试访问安全的物理地址(PA)范围,那么生成故障。

地址范围故障:

在实施方案中,设备专用PA范围被禁止访问且导致尝试故障。

权限故障

AP和HypAP定义是否允许读或写给定页。如果在Abit/Dbit更新期间页遍历器尝试在遍历或写期间不具有权限时进行读取,那么其本身可触发2级权限故障。如果处理器尝试访问权不允许的数据访问,那么生成数据中止异常。例如,如果处理器在PL0且尝试访问被标记为仅可访问授权存储器访问的存储器区,那么生成数据中止异常。除了用户(USER)发起的存储器访问之外,授权存储器访问是在PL1或更高处的执行期间进行的访问。未授权存储器访问是由于在以下情况中的一个中执行的加载或存储操作而进行的访问:

-当处理器在PL0时。

-当处理器在PL1且USER进行存储器访问时。

PTWLS请求

LS请求由L1TLB仲裁并且被发送到TLBMAB,其中L1TLB和LS在请求中确保线程公平。LS请求与IF请求进行仲裁以分配到TLBMAB中。公平是当两者均希望分配时后者分配错失的轮询调度(roundrobin)。没有条目保留在TLBMAB中用于IF或者具体线程。到TLBMAB中的分配是公平的,尝试分配上次并未分配的请求者。因为IF位于缓冲器中且每循环在LS将回流来重试时进行尝试,所以当活锁微件(livelockwidget)生效时,将必须记住LSnonspecop需要TLBMAB且推迟分配其它IF请求直至LS成功分配给TLBMAB。在分配以查找相同4K页的匹配之前,LS请求CAMTLBMAB。如果找到匹配,那么不分配新TLBMAB且匹配标签被发送回LS。如果TLBMAB已满,那么出于op睡眠或重试而将完整信号发送回LS。

PTWIF请求

在实施方案中,IF请求分配到令牌受控的两个条目FIFO中。随着请求被读出且进入TLBMAB中,令牌返回到IF。IF负责线程请求之间的公平。IF请求的第一次流动要求抑制IF的早期唤醒指示,且因此必须失败并且重试,即使其在L2TLB或PWC中命中。IF具有其自身的L2TLB;因此,LS不在LSL2TLB中存储最终IF转译。在极少数情况下,LS和IF可共享页,且因此在IF遍历的第一流动上一起命中L2TLB或PWC。但是在普通情况中,为了节省电力且唤醒IF,如果在这个情形中存在命中(这是极少的),那么PTW代之以抑制将早期PW0唤醒发送给IF并且进行简单重试。IF请求接收确定IF专用权限故障和日志转译、大小等一般遍历故障所需的所有信息。

PTWL2请求

L2高速缓存可通过IF探测接口将IC或TLBI清除发送到PTW。如果TLBI,那么请求分配在两个循环上捕获清除信息的两个条目缓冲器。请求可能占用至多四个循环来生成如上文讨论的页分裂的适当清除。清除请求在PW0拾取中被给予最低优先。IC清除流过PTW而不做任何事情,被发送到过载遍历响应总线上的PW3中的IF。当缓冲器已满时,不应答L2请求。TLBI清除流向管且在被发送到L2TLB和PWC之前如上文清除两者。在过载遍历响应总线上进行LS和IF,其中这种清除在访问CAM之前查找如下文的重新映射器。每个条目具有用于基于VA的清除翻转适当位以移除如上文更详细讨论的分裂页。

PTW状态机

PTW状态机被编码为Level、HypLevel,其中IpaVal准予遍历当前是否在使用VA的1级或使用IPA的2级。当~TtbrIsPa时,TtbrIsPa准予遍历当前是否尝试将IPA转移为PA。所属领域技术人员应理解,状态机可能由于在命中区组大小的页之前命中叶节点而跳过状态或者由于具有更少级别的更小表而跳过级别。状态根据TLBMAB条目而得以维持且在PW3中更新。Level或者HypLevel指示页表中的哪个级别L0、L1、L2、L3正被有效查找。遍历是在00,00,0,0处开始,{Level,HypLevel,IpaVal,TtbrIsPA}寻找L0条目。在2级分页的情况下,可能必须在找到L0条目之前首先转译TTBR(00,00-11)。仅在1级或2级开始沿表尽可能远地遍历时查找L2TLB和PWC。之后,遍历从具有被写入L2TLB和/或PWC中的条目的存储器前行以促进未来的遍历。如NoWr和Abit/Dbit需求需要可再次重新支持查找。L2TLB和/或PWC命中指示命中条目的级别以推进状态机。来自存储器中的页表的填充响应推进状态机一个状态,直至遇到叶节点或故障。

PTW管线逻辑:

PW0负2:

-LSL1TLBCAM

-IF请求写FIFO

PW0负1:

-仲裁LS与IF请求

-LS请求相同4KB滤除

-L2请求写FIFO

-填充/流动唤醒

PW0:

-TLBMAB拾取-最旧就绪(如果定序失败,那么从就绪op备份FF1)

-L2清除拾取-如果没有TLBMAB拾取或者如果饥饿的L2TLB读取预解码,那么L2请求被拾取-每路选择PgSz且部分解码索引(这是关键路径)

PW1:

-L2TLB8路读取和地址/模式比较;优先混合命中

-PWCCAM和优先混合命中

PW2:

-L2TLBRAM读取

-PWCRAM读取

-优先混合数据源

-组合属性

-确定下个状态

PW3:

-发送填充请求给LS管

-返回最终响应给IF/LS

-重叠遍历的TLBMABNoWrCAM

-L2TLB写预解码

-如果重试,那么TLBMAB更新、标记就绪

-产生Abit/Dbit存储

PW4:

-L2TLB写

-PWC写

-LSL1TLB写

-LDQ/STQ写

重试和睡眠条件:

-如果遍历的LS管请求接收坏状态指示且无法分配MAB或者无法满足锁定请求或作为响应接收到~DecTedOk,那么遍历将重试。

-如果遍历在L2TLB宏写之后遇到读取冲突,那么遍历将重试。

-在遇到L2TLB/PWC多命中或奇偶校验误差且使其无效之后,遍历将重试。

-遍历将重试以从VA切换到IPA流睡眠,等待拾取LS管请求。

-睡眠等待填充请求从L2返回。

-如果标记为重叠的遍历,那么睡眠,直至完成前导遍历

在每个TLBMAB条目和L2Flush请求具有8位(可编程)饱和计数器时可能发生前送进程/饥饿。在另一遍历结束时,清空分配或增量的计数器。如果计数器通过符合阈值而饱和,那么仅可拾取该条目直至其结束,其它条目被掩码成未就绪。当存在同时预期的多个页遍历时,通过FF1从底部解析这个条件。

PTW填充请求

这些图示出PTW和LS管交互的各个情况。当PTW在最终转译中并未命中时,其必须沿LS(AG和DC)管发送加载以便抓取数据(通过EX往回路由)。数据被写入TLBMAB且唤醒PTWop以与数据汇合。如果存在L1丢失,那么PTWop生成第二加载以与来自L2的填充数据汇合。Abit/Dbit更新需要加载得到锁且产生存储以更新存储器中的页表。

上文示出实例PTW管/LS管交互

因此当未拾取遍历来在AG/DC管中立即流动时,PTW无须回流,写2条目FIFO。

当拾取遍历在LS管中流动时,在PTW中唤醒条目以与返回的数据汇合。

如果流进行MAB请求,那么在MABTAG上使表遍历睡眠。

当填充响应来临时,再次写FIFO来注入加载以与填充绕过(FillBypass)中的数据汇合。PTW供应加载的memtype和PA;且还供应其是否锁定的指示。PTW设备存储器读取可以推断性发生且不使用NcBuffer,但是必须使用FillBypass。基于分页模式,请求是32位或64位:始终对齐。来自LS的响应数据通过EX路由且被保存在TLBMAB中用于在其流动时遍历读取。损坏数据(Poisondata)响应导致故障;重新获取来自L1或L2的具有可校正ECC误差的数据。

PTWA/D位更新

当支持访问和脏旗标且支持硬件更新时,PTW执行原子RMW以视需要在存储器中更新页表。找到Abit或Dbit违规的推断性流动将须被重新请求的推断性故障视为non-spec。推断性遍历可以发生Abit更新,但是仅在页表位于WB存储器中且高速缓存锁可行时。

找到Abit或Dbit违规的non-spec流将对LS进行锁定加载请求,其中PTW产生流向LS管的加载且获取锁并且在锁撷取之后返回数据。当线被锁(或总线被锁)时,这个请求将数据返回给PTW。如果仍需要修改页,那么将存储发送给PW3/PW4中的SCB以更新页表并且释放锁。如果无法修改页或者已经设置位,那么取消锁。当TLBMAB条目紧接在接收表数据之后流动,那么其发送两个字节未锁存储给SCB以更新存储器中的页表。

如果non-spec更新代表可更新Dbit的存储,那么一起设置Abit和Dbit两者。因为Abit违规不在TLB中高速缓存,non-spec请求可以首先在LS管中进行未锁加载以发现Abit更新的需要。因为Dbit违规可高速缓存,所以匹配的L2TLB/PWC条目在流中无效以宛如其被清除般消耗锁定的数据,其中当流到达PW4时写新条目。由于LRU拾取首先使条目无效,如果管线中没有预先的写,那么这可以是相同的条目。现有匹配的写的L1TLBCAM遵循dbit更新。

PTWASID/VMID重新映射器

ASID重新映射器是16位ASID的32条目表且VMID重新映射器是16位VMID的8条目表。当VMID或ASID改变时,其CAM适当表来查看是否将重新映射的值分派给该全值。如果存在丢失,那么LRU条目被覆写且为该条目生成核心本地清除。

-如果正重新使用VMID,那么发布基于VMID的清除。

-如果正重新使用ASID,那么发布基于ASID的清除。

-这些清除在PW0拾取中具有最高优先。

-每个线程可能需要至多两个清除。

PTWA/D位更新20

如果存在命中,那么重新映射的值被驱动给LS和IF用于TLBCAM。L2请求在拾取上CAM两个表以找到重新映射的值来在清除中使用。

-如果不存在ASID命中且ASID用于清除匹配,那么清除为NOP。

-如果不存在VMID命中且VMID用于清除匹配,那么清除为NOP。

-重新映射的值被发送到L2TLB、PWC、L1TLB和IF用于清除。

-如果清除是针对VMID或ASID的所有条目,那么对应条目在重新映射器中被标记为无效。

首先拾取在LRU条目之前使用的无效条目。在表中分配新条目不会更新LRU。每条目维持4位(可编程)饱和计数器。为条目分配TLBMAB会增加计数器。当计数器饱和或操作模式切换到具有饱和计数器的条目时,条目变为MRU。LRU维持为VMID的7位树和ASID的第二次几率。

PTW特殊行为

为了防止相同页大小的条目的多次匹配,进行PWC、L2TLB和/或L1TLB的任何写。CAM重叠遍历的TLBMAB,其中命中的遍历被防止写PWC、L2TLB和/或L1TLB,直至其再次查找PWC和/或L2TLB,且还使其睡眠直至前导遍历完成。

加载间互锁(LTLI)

在如图6所示的实施方案中,常规排序规则仅需要相同地址的加载保持有序。使加载队列(LDQ)600无序以允许在较旧加载保持未完成时完成非交互加载。为了重构交互加载的寿命关系,在流动时间执行类似于存储与加载的互锁(STLI)CAM602的加载间互锁(LTLI)CAM602。LTLICAM结果用来对不可高速缓存的加载排序、分配加载顺序队列(LOQ)604,并且为较旧op提供可拾取掩码。对于不可高速缓存的加载,相同地址的加载必须保持有序且将使LTLI命中上的状态失败。对于可高速缓存加载,相同地址的加载必须保持有序且将在LTLI命中上分配LOQ604。为了接近寿命,Ebit拾取的一个支部使用LTLI命中的寿命部分以确定较旧的合格加载并且提供反馈以使拾取趋向较旧加载。

仅考虑相同线程的有效加载用来匹配。加载间互锁CAM由寿命对比和地址匹配组成。

寿命比较:

寿命比较检查是流动加载的RetTag+Wrap与LDQ中的加载之间的比较。CAM的这个部分是在DC1中进行,每个循环在未更新LDQ的管线中为较旧完成的加载增加绕过。

地址匹配:

LTLI的地址匹配在DC3中绕过较旧流动加载进行。仍未生成地址的加载被视为命中。如果索引匹配,那么生成地址但是未得到PA的加载被视为命中。如果索引和PA散列(hash)匹配,那么具有PA的加载被视为命中。未对齐LDQ条目检查MA1或MA2地址上的命中,其中页未对齐MA2不具有要检查的单独PA散列且是唯一的索引匹配。

加载顺序队列

LOQ是16条目LDQ扩展,其跟踪乱序完成的加载以确保到相同地址的加载看起来像其有序绑定其值一样。LOQ视需要观察探测和重新同步(resync)加载以维持排序。为了减少队列的整体大小,可在跟踪的地址匹配时一起合并条目。

每条目存储表:

LOQ分配

在无外部写入器时,到相同地址的加载可乱序执行且仍返回相同数据。对于其中较新加载观察比较旧加载更旧的数据的少有情况,较新加载必须重新同步且重新获得新数据。因此,如果存在外部写入器,那么可腾空LDQ,分配较轻权值LOQ条目以跟踪这个加载-加载关系。加载基于DC3中返回的良好状态且命中DC3中的LTLIcam而分配或合并入DC4中的LOQ中。如果相同线程存在较旧、不完全相同地址或未知地址加载,那么加载需要LOQ条目。

由于LOQ已满或已到达线程阈值而无法分配的加载必须睡眠,直至LOQ重新分配且对寄存器施加坏状态。为了避免根据线程保留条目用于最旧加载(可能未对齐),还可通过最旧加载重新分配唤醒在LOQ重新分配上睡眠的加载。即使没有可用令牌,在LTLI中丢失的加载仍可继续完成。如果由于LTLI丢失或LOQ合并而不需要分配,那么令牌在DC3中被推断性消耗且在下个循环中返回。

高速缓存线交叉加载被视为LOQ的两个单独加载。如果组合加载交叉高速缓存线,那么独立处理加载对的部分。

为了与现有条目合并,DC4加载CAMLOQ以找到匹配线程、索引和路或散列的条目。如果找到CAM匹配,那么来自DC4加载的LTLI命中向量被OR到条目的加载顺序队列加载向量(LoqLdVec)中。如果在Idx+Way和Idx+Hash两者中找到匹配,那么加载被合并到Idx+Way匹配中。每个DC加载管(A和B)执行合并CAM。

新条目分配:

完成加载CAMDC4中的LOQ以确定异常状态(见下文的匹配)和可能的合并。如果不存在可能的合并,那么加载在其线程存在空间时分配新条目。分配条目记录来自较旧地址匹配加载的LTLIcam的48位匹配。

如果加载是DC命中,那么其设置WayVal并且在LOQ中记录Idx+Way。

如果加载是DC丢失,那么其设置~WayVal并且在LOQ中记录Idx+PaHash。

如果不存在LTLI匹配(在考虑相同管阶段、相对管之后),那么加载不会分配LOQ条目。

如果仅一个条目为空闲,那么加载管均可在相同循环中分配,较旧加载得到优先权。

相同循环加载交互

两个管可具有在相同管阶段中流动的交互加载是可能的。掩码中本身在相对管LTLICAM外部的良好状态加载导致加载无法为相同循环中提交的到相同地址的乱序*加载应看见相同数据。如果两者是良好状态,为了避免多匹配,在Idx+Way+Hash+Thread中比较两个加载:

-如果它们是相同的,那么LTLI结果被一起OR以分配或合并到相同条目中。

如果散列匹配而不是路匹配,那么加载在DC4中的合并时忽略Idx+Way匹配。

当流动加载在DC3中时,在DC4、DC5、DC6中的完成加载也从LTLI结果中掩码,其中如果较旧加载在管中,那么其可能仍未更新Ldq,因此将呈现在LDQ的LTLIcam中且在其完成时需要被屏蔽/绕过。

LOQ匹配

探测(包括驱逐)和流动加载查找LOQ以便找到乱序完成的交互加载。如果检测到有序违规,那么必须重新分派较新加载以获得新数据。当较旧加载的地址变为已知时,还可移除LTLICAM的地址匹配的假阳性(Falsepositives)。

探测匹配

上下文中的探测意味着外部无效探测,其它线程的SMT别名响应,和L1驱逐-移除各自线程的线的可读性的任何事件。探测CAMRS6中的LOQ,其中Thread+Idx+Way+PaHash具有通过WayVal选择的Way对PaHash,使得驱逐基于PA散列正跟踪条目的来自LOQ的指示而读取标签阵列以得到PA位。基于RS3中的标签匹配,来自L2的探测产生Idx+Way。对于别名响应,RS5中的状态读取确定线的最终状态且确定是否需要探测给定LOQ线程。

命中LOQ条目的探测将标记视需要resync的条目;下文描述resync动作。对于分配LOQ条目而来不及观察探测的流动op,STA处置这个探测对比且视需要分配LOQ条目以resync,其中这个窗是DC4-RS6,直到DC2-RS8。

流动加载匹配

仅DC管加载查找LOQ。以良好状态完成的加载查找在DC4中LOQ以找到LdVec匹配流动加载的LdqIndx(由较新加载的LTLI填入)的条目。如果条目具有LoqResync且LdVec中的对应位位置用于流动、完成加载组,那么流动加载被标记成resync捕获为完成状态且LdVec位位置被清空。重新使用合并CAM的PaHash,如果加载并不匹配,那么LdVec中用于全部匹配条目的对应位位置被清空,使得无需在这个流中无需完成流动加载以在不匹配上移除其自身。

LOQ重新分配

当乱序完成较新加载时,其注释哪个较旧加载可潜在的交互。一旦完成这些加载,就可在不再可能观察乱序数据时重新使用LOQ条目。LDQ清除会产生用来在LdVec的所有LOQ条目中清空对应位的经清除的加载向量,其中如果较新加载不退出,那么以较旧加载推断性填入LOQ条目的加载无法移除那些较旧加载。

当LOQ条目已清空其全部LdVec位时,其被重新分配且返回令牌。许多LOQ条目可以在相同循环中重新分配。重新分配发送信号给LDQ以唤醒可能已经等待条目变为空闲的任何加载。

LOQ特殊行为

LOQ未经奇偶校验保护,因此将存在禁用合并CAM的位。

加载和存储管线

分派管

在分派期间,关于单个op的所有静态信息由DE提供。这包括op类型,但是排除稍后由EX提供的地址。分派管的目的是捕获在加载/存储队列中所提供的信息且反馈给使用条目的EX。这允许可每循环(至多4个加载和4个存储)分派至多6个op。DI1中的早期分派信号用于选用且允许下个循环的任何可能的分派,其中在下个循环中分派的加载的量被提供在DI1中。这个信号是包含性推断的且可指示比在下个循环中实际分派的加载更多(但不少)的加载;然而,所分派的推断性加载的量不应超过可用令牌的量。在上下文中,应注意,无法重新使用用于在下个循环中未分派的推断性加载的令牌,直至下个循环。例如:如果仅留下一个令牌,那么针对两个连续循环,即使未分派实际加载,SpecDispLdVal不应为高。

LSDC返回所分派加载的四个LDQ索引,所返回索引不应处于,在其中在DI2中分派加载和存储的任何具体顺序。LSDC返回分配存储的一个STQ索引,从所提供索引起,所分配的存储将为至多下四个。有效位和其它有效加载结构被写入DI4中。从底部扫描有效位和先前选定条目的组合以找到下4个空闲LDQ条目。

地址生成(AG)管

参考图7,在地址生成700(也称为agen,SC拾取或AG拾取)期间,op被排程器拾取而流向EX管且生成还提供给LS的地址702。在agen之后,op将流向AG管(可能在有限延迟之后)且LS还尝试使其流向LS管(如果可用),使得op还可在该流上完成。EX每循环(至多2个加载和2个存储)可地址生成3个op。存在3个agen管(即0、1、2)或(B、A、C)704、705、706。加载712可以再次在管0或1上(管1仅可处置加载),存储714可再次在管0或2上(管2仅可处置存储)。agen管上的所有op将在AG1中查找μTAG阵列710以确定路,其中将视需要在AG3处的有效加载中捕获所述路。未对齐op将停顿且查找μTAG710两次,并且在MA2查找期间agen的op地址将被捕获在4条目侧滑(skid)缓冲器中。应注意,侧滑缓冲器每agen使用一个条目(即使未对齐),使得侧滑缓冲器是严格的FIFO,没有op重新排序且侧滑缓冲器中没有op可被清除且不会被标记为无效。如果侧滑缓冲器已满,那么将通过断言StallAgen信号而暂停来自EX的agen。在StallAgen断言之后,可能存在这些额外op还需符合侧滑缓冲器的两个以上agen。LS与相同控制块(SCB)720和写组合缓冲器(WCB)722同步。如果DC管上的各自op无需TLB口,那么op可在AG1中查找TLB716。通常,DC管上的op具有优于AG管上的op的优先。如果物理地址并未绕到DC管中,那么其将被捕获在AG3中的有效加载中。加载op使用AG1中的VA散列和AG2中的索引-路/索引-PA而camMAB。进行AG1cam以防止相同地址匹配上的推断性L2请求以节省电力。进行索引-路/PAcam以防止多次填充到相同路/地址。在AG3循环中分配MAB且将其发送到L2。存储无法从AG管C发布MAB请求(可以小鸡位(chickenbit)禁用来自AG管A的存储填充)。agen管上的op还可绕到L1的数据管724中,其中这是最常见的情况(AG1/DC1)。侧滑缓冲器确保AG和DC管即使对于未对齐op仍保持sync。此外,侧滑缓冲器还用来避免单循环绕过,即,DC管追踪AG管一个循环,使得这通过查看拾取器是否仅具有一个合格流动op而完成。所属领域技术人员然后将理解AG2/DC1因此是不可行的,AG3/DC1和AG3/DC0是特殊的绕过情况且当基于μTAG命中在AG2中做出重新拾取决策时AG4/DC0被拾取逻辑向前覆盖。

数据管

在实施方案中,存在称为0、1、2的三个管,其中加载可以在管0或1上流动且存储可在管0或2上流动。如果不存在LS拾取,那么AG管0绕到DC管0中,这同样适用于不存在交叉管绕过(例如,AG0绕到DC1中)的管1和管2。LS拾取具有优于SC拾取的优先(即,AG管绕过),除非DC管被先前SC拾取的未对齐循环占用。如果到DC管中的AG绕过与单个DC拾取冲突(如果未对齐,一个循环或两个循环),那么AG。op将等待侧滑缓冲器且任何绕到DC管中。

下表示出相同opAG与DC管流动之间的关系:

实施方案:

1.一种集成电路实施方案,其包括:

高速缓存存储器;

执行单元,其具有促进op代码的加载和存储操作的多个管线,每个管线被配置来处理由执行单元与高速缓存存储器之间的op代码表示的指令;和

指令获取控制器,其被控制来请求在所述多个管线中包括的地址生成管线的加载和存储指令队列中进行排队以在单个循环中同时加载和存储。

2.根据实施方案1所述的集成电路,其中地址生成管线包括被配置来进行加载或存储操作的至少一个专用加载地址生成管线和至少一个地址生成管线。

3.根据实施方案1-2中任一项所述的集成电路,其中地址生成管线包括被配置来进行加载或存储操作的至少一个专用存储地址生成管线和至少一个地址生成管线。

4.根据实施方案1-3中任一项所述的集成电路,其中地址生成管线包括至少一个专用加载地址生成管线。

5.根据实施方案1-4中任一项所述的集成电路,其中地址生成管线包括三个管线,使得在具有至多两个加载或两个存储的单个循环中处理至多三个指令。

6.根据实施方案1-5中任一项所述的集成电路,其中地址生成管线包括微型TAG查找以确定op代码定序。

7.根据实施方案1-6中任一项所述的集成电路,其中地址生成管线包括微型TAG查找以确定op代码定序。

8.根据实施方案1-7中任一项所述的集成电路,其中由微型标签查找确定为未对齐的op代码在后续循环中停顿且由微型TAG查找处理。

9.根据实施方案1-8中任一项所述的集成电路,其中在后续循环中由微型标签查找确定为未对齐的op代码被发送到侧滑缓冲器。

10.根据实施方案1-9中任一项所述的集成电路,其中高速缓存存储器是2级高速缓存。

11.根据实施方案1-10中任一项所述的集成电路,其中所述集成电路被配置来在地址生成管上执行μTAG查找。

12.根据实施方案1-11中任一项所述的集成电路,其中μTAG查找是路预测器(WP)查找。

13.根据实施方案1-12中任一项所述的集成电路,其中所述集成电路被配置来在地址生成(AGEN)管上执行地址转译。

14.根据实施方案1-13中任一项所述的集成电路,其中所述集成电路被配置来执行写组合缓冲器(WCB)控制。

15.根据实施方案1-14中任一项所述的集成电路,其中所述集成电路包括用于别名支持的额外全关联μTAG结构。

16.一种用于处理由具有多个管线的执行单元中的操作码表示的指令的方法实施方案,所述方法包括:

处理由执行单元与高速缓存存储器之间的op代码表示的指令;和

在所述多个管线中包括的地址生成管线的加载和存储指令队列中进行排队以在单个循环中同时加载和存储。

17.根据实施方案16所述的方法,其中加载排队使用至多两个管线,包括一个管线专用于加载请求且一个管线用于处置加载或存储请求。

18.根据实施方案16-17中任一项所述的方法,其中两个加载的排队包括使用包括专用于存储请求的一个管线的至多三个管线对一个存储请求进行排队。

19.根据实施方案16-18中任一项所述的方法,其中存储排队使用至多两个管线,包括一个管线专用于存储请求且一个管线用于处置加载或存储请求。

20.根据实施方案16-19中任一项所述的方法,其中两个存储的排队包括使用包括专用于加载请求的一个管线的至多三个管线对一个存储请求进行排队。

21.根据实施方案16-20中任一项所述的集成电路,其中高速缓存存储器是2级高速缓存。

22.根据实施方案16-21中任一项所述的方法,其包括在地址生成管上查找μTAG。

23.根据实施方案16-22中任一项所述的集成电路,其中μTAG查找是路预测器(WP)查找。

24.根据实施方案16-23中任一项所述的方法,其包括在地址生成(AGEN)管上请求地址转译。

25.一种用于存储指令集的计算机可读、有形存储介质实施方案,所述指令集用于由一个或多个处理器执行以促进集成电路(IC)的设计或制造,所述IC包括:

执行单元,其具有促进op代码的加载和存储操作的多个管线,每个管线被配置来处理由执行单元与高速缓存存储器之间的op代码表示的指令;和

指令获取控制器,其被控制来请求在所述多个管线中包括的地址生成管线的加载和存储指令队列中进行排队以在单个循环中同时加载和存储。

26.根据实施方案25所述的计算机可读存储介质,其中指令是用于设备的制造的硬件描述语言(HDL)指令。

27.一种集成电路实施方案,其包括:

存储器;

执行单元,其具有多个管线以促进op代码的加载和存储操作,每个op代码可使用对应于来自高速缓存转译后备缓冲器(TLB)中的存储器的物理地址的虚拟地址由执行单元寻址;和

管线页表遍历器,其支持至多4次同时表遍历。

28.根据实施方案27所述的集成电路,其中页表遍历器包括64个条目全关联页表遍历高速缓存(PWC)。

29.根据实施方案27-28中任一项所述的集成电路,其包括转译后备缓冲器-丢失地址缓冲器(TLBMAB)。

30.根据实施方案27-29中任一项中所述的集成电路,其中TLBMAB包括保存待决表遍历的地址、属性和状态的4条目可拾取队列。

31.根据实施方案27-30中任一项所述的集成电路,其中页表遍历器在TLBMAB队列中选择至多四个条目。

32.根据实施方案27-31中任一项所述的集成电路,其中页表遍历器访问TLB以将虚拟地址与物理地址相关联的遍历装入TLB。

33.根据实施方案27-32中任一项的集成电路,其中TLB选自由1级TLB(DTLB)和2级TLB(L2TLB)组成的群组。

34.根据实施方案27-33中任一项所述的集成电路,其中:

DTLB是64条目DTLB;

L2TLB是1024条目L2TLB;且

页表遍历器包括64条目页表高速缓存(PWC)。

35.一种方法实施方案,其包括:

促进执行单元与存储器之间的op代码的加载和存储操作,每个op代码可使用对应于高速缓存转译后备缓冲器(TLB)中的物理地址的虚拟地址由执行单元寻址;和

提供管线页表遍历器以支持同时至多4个页表遍历。

36.根据实施方案35所述的方法,在保存待决表遍历的地址、属性和状态的转译后备缓冲器-丢失地址缓冲器(TLBMAB)中从4条目可拾取队列选择多达四个遍历器任务。

37.根据实施方案35-36中任一项所述的方法,其包括由页表遍历器访问TLB以将虚拟地址与物理地址相关联的遍历装入TLB。

38.根据实施方案35-37中任一项的方法,其中TLB选自由1级TLB(DTLB)和2级TLB(L2TLB)组成的群组。

39.根据实施方案35-38中任一项所述的方法,其中:

DTLB是64条目DTLB;

L2TLB是1024条目L2TLB;且

页表遍历器包括64条目页表高速缓存(PWC)。

40.一种用于存储指令集的计算机可读、有形存储介质实施方案,所述指令集用于由一个或多个处理器执行以促进集成电路(IC)的设计或制造,所述IC包括:

执行单元,其具有多个管线以促进op代码的加载和存储操作,每个op代码可使用对应于来自高速缓存转译后备缓冲器(TLB)中的存储器的物理地址的虚拟地址由执行单元寻址;和

管线页表遍历器,其支持至多4次同时表遍历。

41.根据实施方案40所述的计算机可读存储介质,其中指令是用于设备的制造的硬件描述语言(HDL)指令。

42.根据实施方案40-41中任一项所述的计算机可读存储介质,其包括转译后备缓冲器-丢失地址缓冲器(TLBMAB)。

43.根据实施方案40-42中任一项所述的计算机可读存储介质,其中TLBMAB包括保存待决表遍历的地址、属性和状态的4条目可拾取队列。

44.根据实施方案40-43中任一项所述的计算机可读存储介质,其中页表遍历器在TLBMAB队列中选择至多四个条目。

45.根据实施方案40-44中任一项所述的计算机可读存储介质,其中页表遍历器访问TLB以将虚拟地址与物理地址相关联的遍历装入TLB。

46.根据实施方案40-45中任一项所述的计算机可读存储介质,其中TLB选自由1级TLB(DTLB)和2级TLB(L2TLB)组成的群组。

47.根据实施方案40-46中任一项所述的计算机可读存储介质,其中:

DTLB是64条目DTLB;

L2TLB是1024条目L2TLB;且

页表遍历器包括64条目页表高速缓存(PWC)。

应理解,基于本文公开的许多变动是可行的。虽然上文在特定组合中描述了特征和元件,但是每个特征或元件可单独使用,且没有其它特征和元件或具有或不具有其它特征和元件的各种组合。

所提供的方法可在通用计算机、处理器或处理器核心中实施。合适处理器包括(例如)通用处理器、专用处理器、常规处理器、数字信号处理器(DSP)、多个微处理器、结合DSP核心的一个或多个微处理器、控制器、微控制器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)电路、任何其它类型的集成电路(IC)和/或状态机。这样的处理器可通过使用经处理硬件描述语言(HDL)指令的结果和包括网表的其它中间数据(这样的指令能够存储在计算机可读介质上)配置制造程序而制成。这样的处理的结果可为掩码作品,其然后在半导体制程中用来制造实施所述实施方案的方面的处理器。

本文提供的方法或流程图可在结合于用于由通用计算机或处理器执行的非暂时性可读存储介质中的计算机程序、软件或固件中实施。非暂时性可读存储介质的实例包括只读存储器(ROM)、随机存取存储器(RAM)、寄存器、高速缓存存储器、半导体存储器设备、诸如内置硬盘和可移动磁盘的磁性介质、磁光介质和诸如CD-ROM磁盘的光学介质以及数字通用光盘(DVD)。

***

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1