CN108345547A - 乱序加载的基于锁的和基于同步的方法 - Google Patents

乱序加载的基于锁的和基于同步的方法 Download PDF

Info

Publication number
CN108345547A
CN108345547A CN201810036825.7A CN201810036825A CN108345547A CN 108345547 A CN108345547 A CN 108345547A CN 201810036825 A CN201810036825 A CN 201810036825A CN 108345547 A CN108345547 A CN 108345547A
Authority
CN
China
Prior art keywords
load
storage
cache line
word
queue
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.)
Pending
Application number
CN201810036825.7A
Other languages
English (en)
Inventor
M·阿布达拉
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN108345547A publication Critical patent/CN108345547A/zh
Pending legal-status Critical Current

Links

Classifications

    • 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, look ahead
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • 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/3017Runtime instruction translation, e.g. macros
    • 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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/0877Cache access modes
    • G06F12/0886Variable-length word access
    • 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/6022Using a prefetch buffer or dedicated prefetch cache

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请公开了乱序加载的基于锁的和基于同步的方法。在一个实施例中,提供一种用于在使用共享存储器资源的存储器一致性模型中执行乱序加载的、在处理器中的、基于锁的方法,所述方法包括:定义能够由多个异步核访问的存储器资源;以及由访问掩码跟踪高速缓存线的哪些字由加载访问,其中,所述高速缓存线包括所述存储器资源,其中所述访问掩码内的掩码位在所述加载访问所述高速缓存线的字时被设置,并且其中,所述掩码位阻止由来自所述多个异步核的其他加载对所述高速缓存线的所述字的访问。

Description

乱序加载的基于锁的和基于同步的方法
本申请是PCT国际申请号为PCT/US2013/045497、国际申请日为2013 年6月12日、进入中国国家阶段的申请号为201380042996.6,题为“乱序 加载的基于锁的和基于同步的方法”的发明专利申请的分案申请。
原申请要求2012年6月15日由Mohammad A.Abdallah提交的题为“A LOCK-BASEDAND SYNCH-BASED METHOD FOR OUT OF ORDER LOADS IN A MEMORY CONSISTENCY MODELUSING SHARED MEMORY RESOURCES”的共同待决共同转 让的美国临时专利申请序号61/660,521的权益,并且该申请被整体地并入 到本文中。
技术领域
本发明总体涉及数字计算机系统,更具体地涉及用于选择指令(包括 指令序列)的系统和方法。
背景技术
要求处理器来处理相关或完全独立的多个任务。此类处理器的内部状 态通常由在程序执行的每个特定时刻可能保持不同的值的寄存器组成。在 程序执行的每个时刻,将内部状态图像称为处理器的架构状态。
当架构代码执行切换成运行另一功能(例如,另一线程、进程或程序) 时,然后必须保存机器/处理器的状态,使得新功能可以利用内部寄存器以 构建其新状态。一旦新功能已终止,则可以丢弃其状态,并且先前情境的 状态将被恢复且该执行又继续。此类切换过程称为情境切换,并且通常包 括10个或数百个循环,尤其是在采用大量寄存器(例如,64、128、256) 和/或乱序执行的现代架构的情况下。
在线程感知硬件架构中,硬件支持用于有限数目的硬件支持线程的多 个情境状态是正常的。在这种情况下,硬件复制用于每个所支持线程的所 有架构状态元素。这消除了在执行新线程时的情境切换的需要。然而,这 仍具有多个缺点,即复制用于用硬件中所支持的每个附加线程的所有架构 状态元素(即,寄存器)的面积、功率和复杂性。另外,如果软件线程的 数目超过明确支持的硬件线程的数目,则仍必须执行情境切换。
这变得常见,因为在要求大量线程的细粒度基础上需要并行性。具有 复制情境状态硬件存储的硬件线程感知架构无助于非线程软件代码,并且 仅仅减少了用于被线程化的软件的情境切换的次数。然而,那些线程通常 是针对粗粒并行性而构造的,并且导致用于发起和同步、离开细粒并行性 的沉重软件开销,诸如函数调用和回路并行执行,而没有高效的线程化发 起/自动生成。此类所述开销伴随着针对非明确/容易并行化/线程化软件代 码而使用现有技术编译程序或用户并行化技术进行此类代码的自动并行化 的困难。
发明内容
在一个实施例中,将本发明实现为一种用于在使用共享存储器资源的 存储器一致性模型中的乱序加载的基于锁的方法。该方法包括:实现能够 由多个核心访问的存储器资源;以及实现访问掩码,该访问掩码通过跟踪 高速缓存的哪些字经由加载被访问来运行,其中高速缓存线包括存储器资 源,其中乱序加载在访问高速缓存线的字时设置访问掩码内的掩码位,并 且其中掩码位阻止从多个核心的来自其他加载的访问。该方法还包括:在 执行从多个核心到高速缓存线的后续存储时检查访问掩码;以及当到高速 缓存线的部分的后续存储在访问掩码中见到来自加载的在先标记时引发缺 失预测,其中后续存储将通过使用跟踪符寄存器和线程ID寄存器来用信号 发送对应于该加载的加载队列条目。
前述是概要且因此必要地包含细节的简化、一般化以及省略;因此, 本领域的技术人员将认识到的是该概要仅仅是说明性的且并不意图以任何 方式是限制性的。单独地由权利要求定义的本发明的其他方面、发明特征 以及优点在下面阐述的非限制性详细描述中将变得显而易见。
附图说明
在附图中以示例的方式而不是以限制的方式举例说明本发明,并且在 附图中相同的附图标记指示类似元件。
图1示出了根据本发明的一个实施例的加载队列和存储队列。
图2示出了根据本发明的一个实施例的加载和存储指令分离的第一 图。
图3示出了根据本发明的一个实施例的加载和存储指令分离的第二 图。
图4示出了根据本发明的一个实施例的过程的步骤的流程图,其中图 示出用于实现从由加载存储重新排序和优化所引发的推测性转发缺失预测 /错误中恢复的规则。
图5示出了图示出根据本发明的一个实施例的用处理器的加载队列和 存储队列资源来实现过程300的规则的方式的图。
图6示出了图示出根据本发明的一个实施例的用处理器的加载队列和 存储队列资源来实现过程300的规则的方式的另一图。
图7示出了图示出根据本发明的一个实施例的用处理器的加载队列和 存储队列资源来实现过程300的规则的方式的另一图。
图8示出了根据本发明的一个实施例的其中在加载之后分派存储的分 派功能的概述的过程的流程图。
图9示出了根据本发明的一个实施例的其中在存储之后分派存储的分 派功能的概述的过程的流程图。
图10示出了根据本发明的一个实施例的统一加载队列的图。
图11示出了示出根据本发明的一个实施例的滑动加载分派窗口的统 一加载队列。
图12示出了根据本发明的一个实施例的分布式加载队列。
图13示出了根据本发明的一个实施例的具有按序连续性的分布式加 载队列。
图14示出了根据本发明的一个实施例的用于多核处理器的分段存储 器子系统的图。
图15示出了如何通过本发明的实施例来处理加载和存储的图。
图16示出了根据本发明的一个实施例的存储过滤算法的图。
图17示出了根据本发明的一个实施例的在组成按序从存储器进行读 取的加载的存储器一致性模型中具有乱序加载的信号量实现方式。
图18示出了根据本发明的一个实施例的到通过使用基于锁的模型和 基于事务的模型两者而组成按序的用于存储器的加载读取的存储器一致性 模型中的乱序加载。
图19示出了根据本发明的一个实施例的多核分段存储器子系统的多 个核心。
图20示出了根据本发明的一个实施例的访问统一存储队列的异步核 心的图,其中存储可以基于存储资历而从任一线程获得。
图21示出了描绘根据本发明的一个实施例的其中存储相比于其他线 程中的对应存储而言具有资历的功能的图。
图22示出了根据本发明的一个实施例的非消歧乱序加载存储队列退 出实现方式。
图23示出了根据本发明的一个实施例的非消歧乱序加载存储队列重 新排序实现方式的重新排序实现方式。
图24示出了根据本发明的一个实施例的指令序列(例如,踪迹)重新 排序的推测性执行实现方式。
图25示出了根据本发明的一个实施例的示例性微处理器管线的图。
具体实施方式
虽然已结合一个实施例描述了本发明,但本发明并不意图局限于本文 中所阐述的特定形式。相反地,其意图涵盖可以适当地包括在由所附权利 要求定义的本发明的范围内的此类替换、修改以及等同物。
在以下详细描述中,已阐述了许多特定细节,诸如特定方法顺序、结 构、元件以及连接。然而应理解的是不需要利用这些及其他特定细节来实 施本发明的实施例。在其他情况下,已省略众所周知的结构、元件或连接 或未特别详细地描述以避免不必要地使本描述含糊。
在本说明书内对“一个实施例”或“实施例”的引用意图指示在本发 明的至少一个实施例中包括结合该实施例所述的特定特征、结构或特性。 短语“在一个实施例中”在本说明书内的各种位置上的出现并不一定全部 参考同一实施例,也不是其他实施例的互斥的单独或替换实施例。此外, 描述了某些实施例可展示出而其他的没有的各种特征。同样地,描述了对 于某些实施例而言可能是要求但其他实施例并非如此的各种要求。
随后的详细描述的某些部分是在对计算机存储器内的数据位的操作的 程序、步骤、逻辑块、处理及其他符号表示方面提出的。这些算法描述和 表示是数据处理领域的技术人员用来最有效地向本领域的其他人传达其工 作的实质的手段。程序、计算机执行步骤、逻辑块、过程等在这里且一般 地被设想为是导致期望结果的步骤或指令的自相一致序列。该步骤是要求 物理量的物理操作的那些。通常但不一定,这些量采取计算机可读存储介 质的电或磁信号的形式,并且能够在计算机系统中被存储、传输、组合、 比较以及操纵。主要由于一般使用的原因,已证明将这些信号称为位、值、 元素、符号、字符、项、数字等有时是方便的。
然而,应记住的是所有这些和类似术语将与适当的物理量相关联且仅 仅是应用于这些量的方便标记。如从以下讨论显而易见的那样,除非另外 具体地说,应认识到的是遍及本发明,利用诸如“处理”或“访问”或“写” 或“存储”或“复制”等等术语的讨论指的是计算机系统或类似电子计算 设备的动作或过程,其对在计算机系统的寄存器和存储器及其他计算机可 读介质内表示为物理(例如,电子)量的数据进行操纵并变换成在计算机 系统存储器或寄存器或其他此类信息存储、传输或显示设备内同样地表示 为物理量的其他数据。
本发明的实施例实现了乱序指令调度过程,其中允许输入指令序列内 的指令在处理器资源可用于执行它们时就立即乱序发出。本发明的实施例 能够确保外部代理见到指令按序执行(例如,存储器一致性规则/模型)。
确保指令对外部代理可见地按序执行,从而确保无错误程序执行。本发 明的实施例确保处理器的存储器分级结构(例如,L1高速缓存、L2高速缓 存、系统存储器等)见到指令的一致按序执行。
图1示出了根据本发明的一个实施例的加载队列和存储队列。图1还 示出了输入指令序列。如上所述,处理器的存储器分级结构(例如,L1高 速缓存、L2高速缓存、系统存储器等)见到指令的一致性按序执行。其后 常常称为加载/存储队列的加载队列和存储队列可以用来保持按序执行的 语义。
另外,加载和存储的乱序执行引发推测性执行。当执行推测性执行时, 机器需要识别推测性错误。在图1的实施例中,加载/存储队列提供了一种 用于实现从由加载存储重新排序和优化引发的推测性转发或缺失预测/错 误中恢复的系统。加载/存储队列包括允许从作为转发、分支和错误的结果 而由加载存储重新排序/优化引发的推测性错误中恢复的硬件支持。为了允 许机器从推测性错误中恢复,将推测性执行的结果保持在加载队列和存储 队列中。加载队列和存储队列保持推测性执行的结果直至可以修正错误且 可以使存储结果退出(retire)至存储器为止。加载队列和存储队列的推 测性执行内容对于外部代理而言是不可见的。相对于可见性,存储需要按 序退出至存储器。
图2示出了根据本发明的一个实施例的加载和存储指令分离的第一 图。本发明的一个特征是这样的事实,即加载被分离成两个宏指令,第一 个进行地址计算并取读到临时位置(加载存储队列),并且第二个是存储 器地址内容(数据)到寄存器或ALU目的地的加载。应注意的是虽然在将 加载和存储指令分离成两个相应宏指令并将其重新排序的情境内描述了本 发明的实施例,但可以通过在微代码情境内将加载和存储指令分离成两个 相应微指令并将其重新排序来实现该方法和系统。
该功能对于存储而言是相同的。存储也被分离成两个宏指令。第一指 令是存储地址和取读,第二指令是该地址处的数据的存储。存储和两个指 令的分离遵循与下面针对加载所述的相同规则。
加载到两个指令的分离允许运行时间优化器在给定指令序列内早得多 地调度地址计算和取读指令。这允许通过将数据预取读到与高速缓存分级 结构分离的临时缓冲器中而更容易地从存储器缺失恢复。使用临时缓冲器 以便保证关于LA/SA和LD/SD之间的一一对应的经预取读的数据的可用性。 如果存在与处于加载地址与加载数据之间的窗口中的在先存储的别名使用 (例如,如果从先前的存储检测到转发情况)或者如果地址计算存在任何 错误问题(例如,页面错误),则对应的加载数据指令可以重新发出。另 外,将加载分离成两个指令还可以包括将信息复制到两个指令中。此类信 息可以是地址信息、源信息、其他附加标识符等。此复制允许在不存在LA/SA 的情况下进行两个指令的LD/SD的独立分派。
加载地址和取读指令可以在不等待加载数据返回的情况下从实际机器 退出窗口退出,由此甚至在高速缓存缺失该地址(例如,在段落开头处提 到的加载地址)的情况下允许机器向前进行。例如,在高速缓存缺失该地 址(例如,地址X)时,机器可能停顿达几百个循环等待从存储器分级结构 取读数据。通过在不等待加载数据返回的情况下使加载地址和取读指令从 实际机器退出窗口退出,机器仍可以向前进行。
应注意的是指令的分离使得本发明的实施例的关键优点能够将LA/SA 指令重新排序得早于且更加远离LD/SD指令序列以使得能够实现加载和存 储的较早分派和执行。
图3示出了根据本发明的一个实施例的加载和存储指令分离的第二 图。图2实施例示出了如何使用复制特征以便规定加载指令的分离。在本 实施例中,将加载复制成两个宏指令,第一个是地址计算和取读到临时位 置(加载存储队列)中,并且第二个是存储器地址内容(数据)到寄存器 或ALU目的地中的加载。应注意的是虽然在将加载和存储指令复制成两个 相应宏指令并将其重新排序的情境下描述本发明的实施例,但可以通过在 微代码情境下将加载和存储指令复制成两个相应微指令并将其重新排序来 实现该方法和系统。
现在描述根据本发明的一个实施例的指令分离功能的更详细描述。在 一个实施例中,指令集不具有到LA、SA、LD或SD的直接模拟指令。在此 类实施例中,用指令前缀LAF、SAF、LASAF和伴随后缀指令的组合来实现 这些概念。并且粗略地确实映射到LA上的指令集具有LAD且SA具有SAD, 并且可以实现组合LADSAD。还可以将这些概念实现为微代码内的微指令。
a)可以将在这里被定义为LAF—前缀+后缀指令的描述为‘LD’。
b)可以将在这里被定义为SAF—前缀+后缀指令的描述为‘SD’。
c)可以将在这里被定义为LAD指令的描述为‘LA’。
d)可以将在这里被定义为SAD指令的描述为‘SA’。
e)此外,我们具有LASAF指令和LADSAD指令。这些指令包括可以用来实 现信号量(锁定原子)操作的组合LAF/SAF—前缀+后缀指令。还可能定义组合 LAD—SAD指令以再次地预取读存储器操作数,结果产生硬件的复杂化。
LAD代表‘LA-去融合’
LAD指令发起到执行管线中的数据预取读。其与正常预取读的不同之 处在于其直接地加载到执行管线中,可承担比一级高速缓存更低的执行时 延。在一个实施例中,通过将固定储存装置用于可以使用在LA—LD对之间 的ID链路(例如QID数)来标记的LA—LD对来实现此功能。LAD指令计算 有效存储器地址(例如,来自潜在复杂规范),指定操作数大小(字节、 半字、字、双字或更大);发起存储器引用;通过TLB和高速缓存分级结 构。记录例外(翻页缺失、特权、保护)以在LAF+后缀执行时报告,或者 替换实现方式可以使Q条目取消/无效,迫使LAF+后缀指令重新执行,并且 其将出现例外。
LAD指令具有一般格式和操作数:
LAD(os) QID,M[EA]
·EA—是有效地址规范,其可以是基础寄存器、索引寄存器、移位因数 和/或索引偏移的组合。例如M[B,RI,sf,offset]
·os—是要读取的字节数的指示
·QID—将被用于存储器引用操作的加载存储器QID。其还用来链接LAD 的操作和后续LAF前缀的指令。QID在1至N范围内,N是实现特定值。期望 值是31、63、127。QID=0被预留给不具有前LAD的LAF指令的特殊情况。QID =0始终立即被LAF使用,因为其不可用于LAD。
LAF代表‘LA-融合’。
LAF是指令前缀,意味着其必须与后缀指令直接耦合(或融合)。后 缀指令可以是独立的。后缀指令可以是具有至少一个源寄存器的任何指令。 作为前缀的LAF必须被耦合。LAF前缀改变后缀指令的性质。其寄存器操作 数中的一个或多个被前缀重新定义为存储器队列标识符(QID)。此外,被 关联为源自于寄存器的数据现在源自于存储器队列。
LAF-前缀+后缀指令可具有也可不具有前LAD指令。如果QID==0,则 LAF没有前LAD。如果QID!=0,则LAF具有或曾具有前LAD。当意图创建 加载指令到LA和LD的分离时,则LAF将具有QID!=0且将用在LAF前面的 同一QID将LAD实例化(例如,这基本上创建LA/LD对)。
当LAF/后缀执行且具有QID==0时,使用存储器队列的0条目来完成 ‘LA’操作、存储器读、将数据升级到存储器队列,并且然后通过将数据 加载到后缀指令源来完成,将所应用的操作与潜在其他源组合,并将结果 写入一个或多个后缀指令目的地寄存器。另一方面,如果QID!=0,则针对 匹配QID查阅存储器队列(查找),如果存在的话,则从存储器队列读取 数据,并且应用后缀指令的操作,并将结果写入目的地寄存器。如果匹配 QID是有效但不完整的,则数据停顿直至数据可用为止。如果QID是无效的, 则LAF具有足够的信息(地址和数据操作操作数大小)以重新开始该操作。 匹配的QID可能由于多种原因而不存在,其中的某些是:
a)前LAD从未执行、坏编码或其他原因。
b)LAF与前LAD之间的执行流程被例外或中断所打断
c)居间的存储操作与LAD的地址别名使用且使其数据完整性无效。
在这些情况中的任何一个中,LAF前缀+后缀具有足以重复LAD(LA) 操作的信息。这种能力使得我们的LAD指令成为暗示。LAD不必成功地执行 或者在这方面甚至超过作为用于正确代码的NOP以使用它之外而实现。
具有后缀指令的LAF指令的一般格式和操作数是:
LAF M[ea]
SUFFIX(os) Rt,QID,….
LAF指令借用是操作数大小、QID,并且来自后缀指令的编码。如果后 缀是SIMD,则其还从后缀借用操作的SIMD宽度。始终在后缀指令的源寄存 器规范字段中的一个中对QID进行编码。在SMI的特定实现方式中,这始 终是位23:18,但情况不必如此。
SAD代表‘SA-去融合’
SAD是到仅用于存储的LAD的并行指令。其也预取读数据,将数据送到高 速缓存以用于修改。此外,其创建存储器存储队列条目。主要SAD具有2个主 要用途:
a)作为预取读,读取以用于数据的修改
b)保持正确的存储器排序并暴露并处理在存储(写)之前促进加载(读) 之后的潜在读后写危险
SAD是暗示指令。SAD指令计算有效存储器地址(潜在地来自复杂规 范),指定凑作数大小(字节、半字、字、双字等);发起存储器引用; 通过TLB、高速缓存/存储器分级结构。在SAF+后缀执行时记录例外(翻页 缺失、特权、保护)以重新执行且其出现例外。
SAD指令具有一般格式和操作数:
SAD(os) M[ea],QID
·Ea—是有效地址规范,其可以是基础寄存器、索引寄存器、移位因数 和/或索引偏移的组合。例如M[B,RI,sf,offset]
·Os—是要写入Ea的字节数的指示
·QID—将被用于存储器引用操作的存储存储器QID。其还用来链接SAD 的操作和后续SAF前缀指令。QID在1至N范围内,N是实现特定值。期望值 是31、63、127。QID=0被预留给不具有前SAD的SAF指令的特殊情况。此QID 始终立即被SAF使用。
SAF代表‘SA-融合’
SAF是LAF前缀的并行前缀,仅用于存储。作为前缀,其必须与后缀 指令直接地耦合(或融合)。后缀指令可以是独立的。后缀指令可以是具 有至少一个目标寄存器的任何指令。作为前缀的SAF耦必须被合。SAF改变 后缀指令的性质:目的地寄存器操作数中的一个或多个,其正常地是到存 储器存储队列标识符(QID)中的寄存器选择索引,并且操作从以寄存器为 目标到以存储器(更确切地存储器队列条目)为目标。同样地,其将寄存 器操作变成存储存储器操作。
SAF指令可具有也可不具有前SAD。如果QID==0,则SAF没有前SAD。 如果QID!=0,则SAF具有或曾具有前SAD。当SAF/后缀执行时,如果QID==0, 则使用存储器队列的0条目来完成‘SA’操作,存储器写,将数据升级到 存储器队列,并且然后通过存储由后缀指令源供应的数据来完成。另一方 面,如果QID!=0,则针对匹配QID查阅存储器队列(查找),如果存在的 话,数据将在应用后缀指令时被写入存储器队列条目。如果匹配QID是有 效但不完整的,则数据停顿直至数据可用为止。如果QID是无效的,则SAF 具有足够的信息(地址和数据操作操作数大小)以又继续该操作并完成存 储器写操作。。匹配QID可能由于多种原因而不存在,其中的某些是:
a)前SAD从未执行、坏编码或其他原因。
b)SAF与前SAD之间的执行流程被例外或中断所打断
在这些情况中的任何一个中,SAF前缀+后缀具有足以重复SAD(SA) 操作的信息。这种能力使得我们的SAD指令称为暗示。SAD不必成功地执行 或者在这方面甚至超过作为用于正确代码的NOP以使用它之外而实现。
LASAF是指令前缀
作为前缀的LASAF修改与源和目的地具有相同寄存器的指令。LASAF 将此类指令变成原子存储器引用读/写一次操作。使用来自加载存储器队列 的一个和来自存储存储器队列的一个。不存在前LAD或SAD指令。
LASAF M[ea3]
ADD QID1,QID2,R1
LASAF创建加载和存储存储器队列两者中的QID条目。并且其将使用 QID2来读取存储器[ea3],添加R1并将结果存储在存储存储器QID1中,实 行M[ea3]的原子读修改写。
SMI实现(如果我们将实现它)将要求QID1==QID2==0。但是我们不想 只局限于该实现方式。
我们可以具有LASAD指令,认为是这样,但我们必须始终向存储器队 列中进行嗅探以完成它。使命中的嗅探上的两个条目都无效。并且在LASAF 上重新执行加载/存储。
示例性使用:
A.远远在数据的使用之前在促进加载之后保存寄存器资源。
假设原始代码为
LDR R1,M[ea1]
ADD32 Rt,R1,R2
为了隐藏存储器访问时延,我们希望在执行流程中在R1数据(ADD) 的使用之上尽快地促进LDR。
LDR R1,M[ea1]
...许多指令
ADD32 Rt,R1,R2
这样做的一个负面效应是其保持R1寄存器‘忙碌’等待数据,并且其 不能被用于其他目的。存储器队列扩展资源池以保持数据。因此我们将LDR 转换成LAD和后续LAD:
LAD QID,M[ea1]
...许多指令
LAF M[ea1]
ADD32 Rt,QID,R2
由于加载队列条目QID被使用,R1被自由地用于其他目的。
或者加载具有Rt-QID的差的Rt,或者如果QID不存在,则从M[ea1] 重新加载数据,从其减去R2,并将结果放置在Rt中。
应足以的是用上述实现方式,不需要存储器地址计算在2个加载之间 匹配。如果两个地址计算不同且QID仍是有效的,则很有可能存在不好的 程序员。OS(在我们的示例32中)也不必在LAD与LAF之间匹配。比所需 更多的数据可被LAD读取,在这种情况下,将使用数据读取的最低有效字 节。或者LAF+后缀可能需要比LAD读更多的数据,在这种情况下将使用由 LAD读取的最低有效字节,后面是0直至后缀操作足够为止。此外,地址计 算操作数不必在LAD与LAF之间匹配,虽然为了有良好的编码,其应获得 相同的结果产生的有效地址。
B.通过使正常ALU寄存器—寄存器操作变成ALU寄存器存储器操作, 节省执行循环。
在这里,我们正在使用特殊QID=0(%0)仅仅是为了将正常寄存器— 寄存器ADD指令变成存储器引用。由于LAF是前缀且必须直接耦合到ADD, 所以在中间不存在指令。QID=0始终可供使用,因为其立即被使用。
LAF M[ea1]
ADD32 Rt,%qO,R2
LAF有效地将以上指令变成
ADD32 Rt,M[eal],R2
我们还可以使用SAF来将ALU寄存器—寄存器操作变体成将ALU操作 的结果存储到存储器中的操作。
SAF M[ea1]
ADD %qO,R2,R3
将把将R2和R3相加的结果在地址ea1处存储到存储器中。
C.促进存储之上加载时,保持顺序语义
另一问题是我们想要促进存储(STR)之上加载(LDR),其可以也可 不与加载的地址别名使用。别名:ea1的某些或所有数据地址与ea2相同.
STR M[ea2]
LDR R1,M[ea1]
ADD32 Rt,R1,R2
变成
LDR R1,M[ea2]
0至许多指令
STR M[ea2],R3
0至许多指令
ADD32 Rt,Rl,R2
为了安全地完成此操作(生成正确代码),我们需要工具以完成此操 作。在这里,我们使用LAD和SAD指令两者及其相应的LAF和SAF前缀+后 缀指令,并且能够保持执行顺序且生成正确的代码。
LOOP:
SAD M[ea2],R3
0至许多指令
a)
LAD R1,M[ea1]
0至许多指令
b)
SAF M[ea1],R3
0至许多指令
c)
saf-后缀
LAF M[ea1]
d)
BRN回路
在以上代码中,必须促进LAD和SAD两者且其保持相同的排序。可能 发生什么?在每个点a、b、c、d处指示替换。
a1)中断,使SAD无效,后续SAF将不许重新执行a2,LAD与SAD别 名使用,使SAD无效,或者将相反地不会被插入存储器队列中
b1)中断,使SAD和LAD无效
b2)SAF与LAD别名使用,并且使LAD无效
b3)SAF使用仍有效的SAF或者重新执行,
c1)中断,使LAD无效,
c2)如果仍有效,则LAF使用LAD的数据,否则重新执行。
c3)循环,利用硬件,用IP标记和执行序列ID的组合,并且适当的管理 QID、LAD/SAD/LAF/SAF。
在LA/SA和LD/SD的上述描述中,使用LA和SA相对程序顺序位置来 强制执行用于转发目的的顺序。在另一实施例中,可以使用LD/SD相对程 序顺序位置来强制执行用于转发目的的顺序(例如,如下所述)。
图4示出了根据本发明的一个实施例的其中图示出用于实现从由加载 存储重新排序和优化引发的推测性转发缺失预测/错误中恢复的规则的过 程400的步骤的流程图。
如步骤401所示,本发明的实施例的目的是在该存储与该加载之间有 地址匹配时找到向加载进行转发的存储。在步骤402处,最近的早先存储 (例如,按机器顺序)向加载进行转发。
在步骤403中,当按机器顺序来分配LD/SD时,针对LA/SA更新实际 年龄。为LA/SA实际年龄指派(assign)以与LD/SD年龄相同的值。LD/SD 保持实际年龄并执行原始程序顺序语义。
步骤404—407示出了用于在支持推测性执行的同时保持程序连续语 义的规则。步骤404—407被示为被相互水平地布置以指示同时地实现这些 规则功能的机制。如步骤404中所示,如果存储具有实际年龄但加载还没 有获得实际年龄,则存储早于加载。如步骤405中所示,如果加载具有实 际年龄但存储还没有获得实际年龄,则加载早于存储。如在步骤406中所 示,如果加载或存储都没有获得实际年龄,则将使用虚拟标识符(VID)来 找出哪个较早(例如,在某些实施例中,与加载/存储指令相关联的QID表 示VID)。如步骤407中所示,如果加载和存储两者都已经获得实际年龄, 则使用实际年龄来找出哪个较早。
应注意的是用来确定加载与存储之间的相对年龄的图4实施例所述的 算法还可以用来确定多个存储之间的相对年龄。这在如下面在图4和后续 图中所述的更新存储年龄戳时有用。
图5示出了图示出根据本发明的一个实施例的用处理器的加载队列和 存储队列资源来实现过程400的规则的方式的图。图5实施例示出了其中 指令回路已解开成两个相同指令序列401—402的示例。应注意的是SA和 LA可以自由地重新排序,然而,SD和LD必须保持其相对程序顺序。较早 的存储可以向较晚的加载进行转发。较早意味着较小的VID(例如,保持在 虚拟ID表中)或较小的年龄。如果SA具有VID但没有年龄,则SA比具有 年龄的加载晚。LA/SA的实际年龄在LD/SD分配时被更新,并被指派LD/SD 的相同年龄。如果存储或加载具有实际年龄,则其与实际年龄相比较,否 则使用VID年龄。
应注意的是VID表通过经由存储对应于每个VID唯一标识符的LA/SA 对应的机器ID和机器资源来跟踪LA/SA与LD/SD指令之间的关联而运行。 还应注意的是术语“VID”与术语“QID”是同义词,如在图4的讨论中所 描述的。
现在描述图4实施例的操作示例。最初,考虑其中分配指针410最 初为3的情况。V3LA已在加载队列条目#4中分派和分配。V1 SA和V2 SA 两者都已分派。它们与V3 LA相比较,并且由于V2 SA小于V3 LA且比V1 SA 更接近于V3 LA,所以其潜在地向V3 LA进行转发,并且因此其更新用于 V3 LA加载队列条目的存储初始年龄。
分配指针现在移动至6。V2 SA(#5)的存储实际年龄现在更新V3 LA 加载队列条目(因为V2 SA是已被加戳成向此加载进行转发的记录的存储)。 V4 SA现在分派并与加载初始年龄相比较,并且由于V4大于V3 LA,所以 其并不进行转发。分配指针现在移动至11。在分配V3 LD时,其用V3 LD (#7)的实际年龄来更新加载队列条目#4。现在分派V1 SA#11。由于V3 LA #1现在具有实际年龄但V1 SA#11没有,则加载早于存储,并且因此转发 是不可能的。
预测表用于检测其中默认假设不正确的情况。该默认假设是没有存 储向加载进行转发。一旦针对加载存储对检测到转发,则记录加载存储对 的程序计数器,使得加载将始终等待该存储地址被分配和被计算的地址以 找出该加载地址是否与该存储地址匹配且因此需要从其进行转发。
应注意的是在一个实施例中,本文所述的特征促进给定指令序列中 的在分支之前或在分支范围内的LA/SA的重新排序,其中,允许LD/SD在 不存在LA/SA的情况下进行分派。如果由于分支而跳过LA和SA,或者由于 已引发存储器例外情况而将其忽视,则LD和SD仍可以正确地运行,因为 其包括分派两次所需的信息:第一次作为LA/SA,并且第二次作为LD/SD。 在这种情况下,LD/SD的第一分派是执行地址计算(例如,加载地址)。随 后,同一LD/SD可以再次地分派以满足加载或存储(例如,加载数据)的 消耗部分。可以将此机制称为加载和存储指令的“双重分派”。
应注意的是在一个实施例中,LD/SD的双重分派在对应的经去融合 的LA/SA不存在时发生(例如,如经融合的LD/SD的情况一样),或者如 果由于分支而跳过LA/SA,或者其由于已引发存储器例外情况而被忽视等。
上述双重分派功能确保LD/SD不依赖于被丢失、忽视和/或跳过 LA/SA而正确地执行。由上述特征提供的益处是由加载/存储指定的数据的 预取读可以通过甚至在存在分支、潜在错误、例外情况等情况下较早地调 度LA/SA而按照程序顺序较早地开始(例如,减少时延)。
图6示出了图示出根据本发明的另一个实施例的用处理器的加载队 列和存储队列资源来实现过程400的规则的方式的另一图。在图6实施例 中,考虑其中分配指针最初为3的情况。V3 LA已在加载队列条目#4中分 派和分配。分配指针现在移动至6。V1和V2(#4,#5)的存储实际年龄现 在用机器ID 2和3来更新对应的SA。V4 SA现在分派并与加载初始年龄相 比较,并且由于V4 SA大于V3 LA,所以其并不转发。分配指针现在移动至 11。在分配V3 LD时,其用V3 LD(#7)的实际年龄来更新加载队列条目#4。 现在分派ID 10的V1 LA。
现在分派机器ID 2的V1 SA和机器ID 3的V2 SA两者。其与ID 10 的V1 LA相比较,并且由于ID 10的V1 LA不具有机器年龄(其对应的LD 尚未分配),所以虽然机器ID 2的V1SA和机器ID 3的V2 SA具有实际 年龄,然后已知V1和V2存储比V1更早/更旧。然后,这两个存储(V2) 中最新的一个可以向ID 10的V1进行转发。现在分派SA(V2)#11。由于 V1 LA和V2SA不具有实际年龄,但其VID被用于比较,并且未检测到转发。 分配指针现在移动至16。现在分派ID 16的V4 SA,并且其与ID 10的V1 LA 相比较,并且由于V1 LA具有实际年龄但V4SA不具有,所以V4 SA比V1 LA 晚。因此,不可能从此存储向此较早的加载进行转发。
图7示出了图示出根据本发明的另一个个实施例的用处理器的加载 队列和存储队列资源来实现过程400的规则的方式的另一图。在图7实施 例中,考虑其中分配指针最初为3的情况。在存储队列条目#4和#5中已分 派并分配V1 SA和V2 SA。分配指针现在移动至6并分派V4 SA。V1 SA和 V2 SA两者都获得其4和5的实际年龄。
分配指针现在移动至11。V3 LA获得7的实际年龄。分派V1 SA#10 V2 SA#11。分派V3 LA且其将其地址与存储队列条目相比较,并且找到跨 V1 SA、V2 SA和V4 SA和V2 SA#11的匹配。由于V3 LA的实际年龄为7, 其将其实际年龄与最接近它的存储年龄相比较,其为5岁,属于V2 SA,并 且因此该加载将从第一存储进行转发,并在加载队列中被这样标记。
图8示出了根据本发明的一个实施例的其中在加载之后分派存储的 分派功能的概述的过程800的流程图。
过程800在步骤801中开始,其中将存储指令分离成SA和SD。如 先前所述,SA指令随SD指令保持语义以在在分离的SA与刚刚分配的SD 之间不存在VID表中的匹配的情况下允许双重分派。在步骤802中,将SA 重新排序成较早的机器可见程序顺序,并且使用VID表来跟踪SA以留存原 始SD程序顺序。在步骤803中,在分派SA时,针对加载队列中的所有加载进行检查针对SA的地址匹配。
在步骤804中,在有地址匹配时,通过使用加载和SA的VID号或者 使用加载和存储的实际年龄而比较匹配加载的程序顺序与SA的程序顺序。 这是在图3的讨论中较早图示出的过程。如果存储具有实际年龄但加载没 有,则存储早于加载。如果加载具有实际年龄但存储没有,则加载早于存 储。如果加载或存储任一具有实际年龄,则可以使用虚拟标识符(VID)来 找出哪个较早。如果加载和存储两者都具有实际年龄,则使用实际年龄来 找出哪个较早。如上所述,VID号允许跟踪原始程序顺序及重新排序的SA 和LA。VID表中的条目允许对应的SD和LD在其被分配时变得与指派给SA 和LA的机器资源相关联。
在步骤805中,针对按程序顺序较晚的加载,存储将进行检查以查 看该加载是否已由其他存储向其进行转发。在步骤806中,如果是这样, 则存储检查先前向此加载进行转发的存储的戳以查看该存储是否按照程序 顺序比其本身早。在步骤807中,如果是这样,则存储检查先前向此加载 进行转发的存储的戳以查看该存储是否按照程序顺序比其本身早。在步骤 808中,如果不是,则存储不向此加载进行转发。
图9示出了根据本发明的一个实施例的其中在存储之后加载被分派 的分派功能的概述的过程900的流程图。
在步骤901中,以上述方式将加载指令分离成LA和LD。在步骤902 中,将LA重新排序成较早的机器可见程序顺序并使用VID表来跟踪,如上 所述。作为903的替代,针对存储队列中的所有存储而检查LA针对加载的 地址匹配。
在904中,在有地址匹配时,通过使用加载和SA的VID号或者使用 加载和存储的实际年龄而比较匹配加载的程序顺序与存储的程序顺序。这 是在图3的讨论中较早图示出的过程。如果存储具有实际年龄但加载没有, 则存储早于加载。如果加载具有实际年龄但存储没有,则加载早于存储。 如果加载或存储任一具有实际年龄,则可以使用虚拟标识符(VID)来找出 哪个较早。如果加载和存储两者都具有实际年龄,则使用实际年龄来找出 哪个较早。如上所述,VID号允许跟踪原始程序顺序及重新排序的SA和LA。 随后,在步骤905中,使加载消耗来自按程序顺序最接近于其自己的程序 顺序的存储的数据。
图10示出了根据本发明的一个实施例的统一加载队列的图。虚拟加 载/存储队列的目的是允许处理器在机器中分配比使用其加载/存储队列的 实际物理大小可以容纳的更多的加载/存储。作为回报,这允许处理器超过 其处理器的加载/存储队列的物理大小限制分配除加载/存储之外的其他指 令。即使某些加载/存储在加载/存储队列中仍不具有空间,这些其他指令 仍可以被分派和执行。
随着加载从加载队列退出,加载分派窗口移动至序列中的后续指令, 并且将包括针对与已经从加载队列退出的加载数目等同的分派要考虑的更 多已分配加载。在此图中,加载分派窗口将从左向右移动。
在一个实施例中,加载分派窗口将始终包括与加载队列中的条目的 数目相等的加载数目。在任何时间不能在加载分派窗口之外分派加载。除 加载之外的调度器窗口中的其他指令(例如,Sub、Add等)可以分派。加 载分派窗口内的所有加载可以每当其准备就绪时分派。
图11示出了根据本发明的实施例的示出滑动加载分派窗口的统一 加载队列。图11示出了与图10相比较的后续时刻。随着加载退出加载队 列,加载分派窗口移动至序列中的后续指令,并且将包括针对与已经从加 载队列退出的加载数目等同的分派要考虑的更多已分配加载。加载分派窗 口将始终包括与加载队列中的条目数目相等的加载数目。在任何时间不能 在加载分派窗口之外分派加载。除加载之外的调度器窗口中的其他指令(例如,Sub、Add等)可以分派。加载分派窗口内的所有加载可以每当其准备 就绪时分派。因此,用此方案获得的一个益处是如果超过加载或存储队列 容量,到调度器的分配不停止,替代地,尽管已超过加载或存储队列容量, 我们继续在调度器内部分配指令,包括加载和存储,加载和存储动态窗口 将确保将不会分派在加载或存储队列的容量之外的加载或存储。
图12示出了根据本发明的一个实施例的分布式加载队列。图12实 施例的目的是实现分布式加载队列和分布式存储队列,其保持单个程序/线 程连续语义,但仍允许跨多个核心/存储器片段进行加载和存储的乱序分 派。
图12图示出了避免死锁的加载队列扩展解决方案。创建加载/存储 队列的扩展并从引发死锁的加载/存储点(从该点向前)按程序顺序向该扩 展队列分配死锁加载/存储直至加载/存储队列具有可用的自由的条目。在 图12情形中,LD 3加载取决于SD,SD又取决于由于load_Q B已满而不能 被分派的LD 2(具有映射到load_Q B的地址)。在此死锁情形中,在检测 到死锁时,允许LD 1和LD 2按序一个接一个地向预留部分B中分派和退 出。用于分布式加载/存储队列的保守策略是为每个加载/存储预留每个加 载/存储分布式队列中的条目。在此图中,每个分配的加载需要预留load_Q A中的条目和load_Q B中的另一条目。
应注意的是在分布式加载/存储队列中,存在关于已分配加载/存储 的问题,因为其地址在分配时是未知的。因此,在乱序分派时仅知道给定 加载或存储将占用哪个分布式队列。
本发明的实施例可以采用用于分布式加载/存储队列的三个不同解 决方案来避免关于乱序分派的死锁。
1.在死锁(不具有分派给加载/存储缓冲器的空间)的最早加载/ 存储处引发缺失预测和清刷并开始按序分派加载/存储达一段时间,或者通 过其中每个加载/存储在所有分布式队列中分配空间的保守分配。一旦(在 分派时)知道该加载/存储的地址,因此知道将接收该加载/存储的特定加 载队列,其可以将其他队列中的预留空间解除分配。
2.创建加载/存储队列的扩展并用来从引发死锁的加载/存储点按 程序顺序向该扩展队列分配死锁加载/存储(图9)。
3.动态分派窗口大小确定,其中,在连续性窗口之外的未分派加载 的和应小于或等于该特定加载队列中的自由非预留空间的数目(例如,图 11)。
图13示出了根据本发明的一个实施例的具有按序连续性窗口的分 布式加载队列。确定动态分派窗口大小确定,使得在连续性窗口之外的未 分派加载的和应小于或等于该特定加载队列中的自由非预留空间的数目。 每个加载队列将使用如这里所示的其相应分派窗口来跟踪其条目。在任何 时间用于每个加载队列的动态窗口大小=该队列的实际物理大小加虚拟条 目(在这种情况下6+4=10),因此在这种情况下,窗口大小应仅覆盖10个负载。请注意,不对用于其他队列的负载进行计数(例如,LD 4)。
预留的预订比是3。该预订比是竞争每个预留空间的按序加载的数 目。在本示例中,只有前两个按序未分派加载(从左向右扫描按序连续性 窗口)可以向预留分配进行分派(假设队列的2个条目被分配给预留)。 因此,虚拟条目的数目=(预订比-1)*预留条目的数目=(3-1)*2=4。
关于按序连续性窗口大小确定,未被分派给加载队列中的条目(被 捕捉空间)的在任何时间的加载数目(从最旧的至最新的进行计数)加到 预留空间的分派加载的数目必须小于或等于(预订比*预留条目的数目)。 在这种情况下,加载的数目必须小于或等于3。该预订比是设计可配置性能 度量,其确定预留空间的已接受(占用VS预订)比是什么。这在最早的未 分派加载不能找到要分派到预留条目外面的队列空间的情况中实行。在这 种情况下,从最早(最旧)加载开始的那些加载将竞争预留空间,预订比 确定多少加载将等待占用每个预留条目,预留条目始终被首先分配给最旧 的未分派加载,并且一旦该加载退出,则下一个最旧加载可以占用条目(预 订比确定从所分派的最旧的一个开始一个接一个地占用预留条目的那些加 载的数目)。
应注意的是在一个实施例中,来自每个队列的按序连续性窗口的加载可以 在该队列的未预留部分中未留下空间(按序从最旧加载开始)时向该队列的预 留空间进行分派。还应注意的是在一个实施例中,在任一队列的按序连续性窗 口外面和在该队列的动态分派窗口内的加载不能向该队列的预留部分进行分 派。
还应注意的是只要在队列的未预留部分中存在空间,该队列的整个 动态分派窗口内的任何加载就可以向任何分布式队列的未预留部分的任何 条目进行乱序分派。每个循环调整任一队列的按序连续性窗口和动态分派 窗口两者的大小以反映每个加载分派或退出之后的在上文提供的等式中所 述的其大小限制。
图14示出了根据本发明的一个实施例的用于多核处理器的分段存 储器子系统的图。图13示出了线程之间和/或一般地加载和存储之间的同 步方案的全面方案和实现。该方案描述跨加载/存储架构和/或跨存储器引 用和/或线程的存储器访问的存储器引用的同步和消歧的优选方法。在图15 中,示出了寄存器堆(地址和或数据寄存器)的多个分段以及执行单元、 地址计算单元和1层高速缓存和/或加载存储缓冲器的片段和/或2层高速 缓存和地址寄存器互连1200和地址计算单元互连1201。那些分段元素可以 通过将其集中式资源分段并分布到多个引擎中而在一个核心/处理器内构 造,或者其可由采取多核心/多处理器配置的不同核心/处理器的元件构成。 那些片段1211中的一个在图中被示为片段1号;可以将片段按比例缩放至 大的数目(一般地至N个片段,如图中所示)。
这种机制还充当用于那些引擎/核心/处理器之间的存储器架构的相 干性方案。此方案通过来自一个片段/核心/处理器中的地址计算单元中的 一个的地址请求开始。例如,假设由片段1(例如,1211)请求地址。其可 以使用属于其自己的片段的地址寄存器和或使用地址互连总线1200根据跨 其他片段的寄存器来获得并计算其地址。在计算该地址之后,其创建用来 访问高速缓存和存储器的32位地址或64位地址的引用地址。此地址通常被分段成标签字段及设定和线路字段。此特定片段/引擎/核心将把地址存 储到其加载存储缓冲器和/或L1和/或L2地址阵列1202中,同时其将通过 使用压缩技术来创建标签的压缩版本(具有比地址的原始标签字段更小的 位数)。
此外,不同的片段/引擎/核心/处理器将使用设定字段或设定字段的 子集作为索引来识别地址被保持在哪个片段/核心/处理器中。由地址设定 字段位进行的此片段编索引确保不包括特定片段/核心/引擎中的地址的所 有权,即使对应于该地址的存储器数据可以存在于另一或多个其他片段/引 擎/核心/处理器中。即使在每个片段中将地址CAM/标签阵列1202/1026示 为与数据阵列1207耦合,其也可能仅在放置和布局的物理接近区域中被耦 合,或者甚至由于两者都属于特定引擎/核心/处理器但在保持在地址阵列 的地址与一个片段内部的数据阵列中的数据之间不存在关系的事实。
图15示出了如何由本发明的实施例来处理加载和存储的图。如图 15中所描绘的,每个片段与其加载存储缓冲器和存储退出缓冲器相关联。 针对任何给定片段,指定与该片段或另一片段相关联的地址范围的加载和 存储被发送到该片段的加载存储缓冲器以用于处理。应注意的是其可随着 核心乱序执行指令而乱序到达。在每个核心内,核心不仅可访问其自己的 寄存器堆,而且可访问其他核心的寄存器堆中的每一个。
本发明的实施例实现分布式加载存储排序系统。该系统跨多个片段 分布。在片段内,由该片段来执行本地数据相关性检查。这是因为该片段 仅在该特定片段的存储退出缓冲器内加载和存储。这限制了必须注意其他 片段以保持数据相干性的需要。以这种方式,本地地执行片段内的数据相 关性。
关于数据一致性,存储分派门根据严格的按程序顺序存储器一致性 规则来强制执行存储退出。存储乱序到达加载存储缓冲器处。加载也乱序 到达加载存储缓冲器处。同时,乱序加载和存储被转发到存储退出缓冲器 以用于处理。应注意的是虽然存储在给定片段内按序退出,但随着其转到 存储分派门,其可以乱序从多个片段出来。存储分派门强制执行这样的策 略,即确保即使存储可乱序跨存储退出缓冲器而驻留,并且即使缓冲器可相对于其他缓冲器的存储乱序将存储转发到存储分派门,分派门也确保其 被严格地按序转发到片段存储器。这是因为存储分派门具有存储退出的全 局视图,并且仅允许存储跨所有片段、例如全局地按序离开至存储器的全 局可见侧。以这种方式,存储分派门充当全局观察者以确保存储最终跨所 有片段按序返回到存储器。
图16示出了根据本发明的一个实施例的存储过滤算法的图。图16 实施例的目的是过滤存储以防止所有存储必须针对加载队列中的所有条目 进行检查。
存储针对地址匹配而嗅探高速缓存以保持相干性。如果线程/核心X 加载从高速缓存线进行读取,则其标记其从那里加载数据的高速缓存线的 部分。在另一线程/核心Y存储嗅探高速缓存时,如果任何此类存储与该高 速缓存线部分重叠,则针对线程/核心X的该加载引发缺失预测。
用于过滤这些嗅探的一个解决方案是跟踪加载队列条目的引用。在 这种情况下,存储不需要嗅探加载队列。如果存储具有与访问掩码的匹配, 则从引用跟踪符获得的加载队列条目将引发该加载条目进行缺失预测。
在另一解决方案(其中不存在引用跟踪符)中,如果存储与访问掩 码具有匹配,则该存储地址将嗅探加载队列条目并将引发匹配的加载条目 进行缺失预测。
用两个解决方案,一旦加载从高速缓存线进行读取,其设定相应的 访问掩码位。当该加载退出时,其将该位重置。
图17示出了根据本发明的一个实施例的具有组成从存储器按序进 行读取的存储器一致性模型中的乱序加载的信号量实现方式。本文所使用 的术语信号量指的是为多个线程/核心提供对公共资源的访问控制的数据 构造。
在图17的实施例中,使用访问掩码来控制由多个线程/核心对存储 器资源的访问。访问掩码通过跟踪高速缓存线的哪些字具有待决加载而运 行。乱序加载在访问高速缓存线的字时设定掩码位,并在该加载退出时清 除掩码位。如果来自另一线程/核心的存储在设定掩码位的同时向该字进行 写入,则其将用信号通知对应于该加载的加载队列条目(例如,经由跟踪 符)以被缺失预测/清刷或用其从属指令重试。访问掩码还跟踪线程/核心。
以这种方式,访问掩码确保正确地实现存储器一致性规则。存储器 一致性规则规定对于此信号量而言存储按序更新存储器且加载按序从存储 器读取以跨两个核心/线程工作。因此,由核心1和核心2执行的代码将被 正确地执行,其中,其两者都访问存储器位置“标志”和“数据”。
图18示出了根据本发明的一个实施例的通过使用基于锁的模型和 基于事务的模型两者而组成针对存储器进行按序读取的加载的到存储器一 致性模型中的乱序加载。
如上所述,存储器一致性规则规定存储按序更新存储器且加载按序 引用存储器以便两个核心/线程适当地进行通信。在图18中的右侧底部, 示出了两个核心,核心1和核心2。使用两个存储器资源,标志和数据,实 现通信并正确地在核心1与核心2之间共享数据。例如,当核心1想要将 数据传递至核心2时,如核心1内的代码所指示的,其将存储数据且然后 设定标志。如核心2内的代码所指示的,核心2将加载标志并检查标志是 否等于1。如果标志不等于1,则核心2将向后转移并保持检查标志直至其 确实等于1。在该时间点处,其将加载数据。
用其中加载和存储乱序执行的乱序架构,可以使用基于锁的存储器 一致性模型来确保两个实体(例如,核心1和核心2)保持按序存储器一致 性语义。这通过使用访问掩码、线程ID寄存器以及跟踪符寄存器而示出。 通过在代码的关键段内设置任何加载的对应访问掩码位来设定该锁。如果 发生从另一线程/核心到该高速缓存线字的任何访问,则锁将阻止该访问。 在一个实施例中,这可以通过将访问示为缺失来实现。当该锁被清除时,允许对该字的访问。
替换地,可以使用基于事务的方法来保持按序存储器一致性语义。 用基于事务的方法,通过设置事务内的任何加载的对应访问掩码位来设定 原子数。如果在设定掩码位的同时发生从另一线程/核心或并行事务到该高 速缓存线的任何访问,则其将用信号通知对应于该加载的加载队列条目(例 如,经由跟踪符)以被缺失预测/清刷或用其从属指令重试。访问掩码还跟 踪线程/核心。当该事务结束时,掩码位将被清除。使用线程ID寄存器来跟踪哪个线程正在访问统一存储队列条目的哪个字。
图19示出了根据本发明的一个实施例的多核分段存储器子系统的 多个核心。本实施例示出了将如何防止来自多核分段存储器子系统内的加 载访问被标记为进行中的事务的一部分(例如,看类似于锁定情况)的字。
应注意的是如果此多核分段子系统是较大集群的一部分,则存在具 有共享存储器子系统的外部处理器/核心/集群。在这种情况下,属于其他 外部处理器/核心/集群的加载将继续进行且将不会被防止从任何存储器位 置进行加载,无论该存储器位置是否是事务访问的一部分。然而,所有加 载将对访问掩码进行标记以通知作为事务的一部分的未来存储。
来自其他处理器的嗅探存储将其地址与掩码相比较。如果存储见到 其正在尝试存储的地址在来自另一线程加载(作为事务的一部分的加载) 的访问掩码中被标记,则存储将引发该加载被缺失预测。否则,将在该加 载退出时清除该标记(例如,由此完成事务)。
图20示出了根据本发明的一个实施例的访问统一存储队列的异步 核心的图,其中存储可以基于存储资历而将数据转发到任一线程中的加载。
如上所述,存储器一致性规则规定存储按序更新存储器且加载按序 从存储器进行读取,使得核心/线程适当地进行通信。在图20中的右侧底 部,示出了两个核心,核心1和核心2。两个核心是异步的,并执行在每个 核心内所指示的代码以访问标志和数据存储器资源。
在图20的实施例中,统一存储队列对于可以访问它的多个线程中的 任何线程而言是不可知的。在本实现方式中,来自不同线程的存储可以向 不同线程的加载进行转发,而同时通过遵循一组算法规则而仍保持按序存 储器一致性语义。线程可以基于存储资历而从彼此进行转发。
当在同一线程中的在一存储的前面的所有加载和存储都已被执行 时,该存储是资深的。从另一线程接收到转发的线程不能独立地退出加载/ 存储。线程必须在它们从其接收到转发的其他线程已进行缺失预测的情况 下有条件地进行缺失预测。特定加载可以从同一线程转发存储或从不同的 线程资深存储进行转发,如果在同一线程内不存在向其进行转发的存储的 话。
用图20方法,通过设置对统一存储队列条目中的字内的字节的任何 访问的对应访问掩码位来设定原子数。如果在设定掩码位的同时发生从另 一线程/核心或并行事务到该存储队列条目的任何访问,则其将用信号通知 对应于该加载的加载队列条目(例如,经由跟踪符)以被缺失预测/清刷或 用其从属指令重试。访问掩码还跟踪线程/核心。当该事务结束时,掩码位 将被清除。
图21示出了根据本发明的一个实施例的描绘其中存储具有资历的 功能的图。如图21中所描绘的,特定加载将从同一线程转发存储进行转发。 如果不存在来自线程内的传送,则其可以从不同的线程资深存储进行转发。 此原理在其中多个核心/线程正在访问共享存储器的情况下起作用。在这种 情况下,存储可以基于存储资历从任一线程向来自任一线程的加载进行转 发,然而,只有当不存在从线程内向特定加载的转发时。当在同一线程中 的在一存储前面的所有加载和存储都已被执行时,该存储是资深的。
另外,应注意的是线程不能独立地退出加载/存储。线程在它从其接 收到转发的另一线程进行存储缺失预测或清刷时必须进行加载缺失预测。
图21直观地描述了两个异步核心/线程(例如,核心/线程1和核心 /线程2)之间的执行的示例性流。线2101—2105示出了存储基于其资历而 向不同的加载进行转发的方式。为了帮助举例说明资历如何从存储向存储 进展,紧挨着每个指令示出了数字以示出随着其从0进展至14的执行的不 同阶段。特别地,根据上述规则,应注意线2103所指示的存储向同一线程 内的加载进行转发的方式。因此,如上所述,从其自己的线程内进行转发 的加载不能从任何相邻线程进行转发。这用跨转发线的黑色十字形示出。
图22示出了非推测性的根据本发明的一个实施例的未消歧乱序加 载存储队列退出实现方式(例如,提供低功率、低裸片面积以及较低的定 时紧迫性)。
加载退出/重新排序缓冲器(SRB)可以以两个实现方式、退出实现 方式和重新排序实现方式进行操作。
在退出实现方式中,在存储退出时按照原始程序顺序从存储队列将 存储加载到SRB中,使得按照原始程序顺序较早的存储在SRB的顶部处。 后续加载然后寻找地址匹配(例如,使用地址CAM),并从SRB/存储高速 缓存中的匹配条目进行转发。在其中存在两个或更多地址匹配的情况下, 优先级编码器可以通过扫描第一个来定位正确的转发条目。这节省了到存 储器的转移并允许机器向前继续进行。如果分派了加载且向其进行转发的 存储已退出到SRB/存储高速缓存,则该加载从SRB/存储高速缓存进行转发 并将配对关系记录在预测表中。为了检测其中在向加载进行转发的存储退 出到SRB/存储高速缓存之前分派加载的情况,加载必须创建地址掩码,其 在那里标记其自己的地址。这可以以不同的方式来实现(例如,图17的实 施例)。
如上文所讨论的,图17描述访问掩码,其通过跟踪高速缓存线的哪 些字具有待决加载而运行。乱序加载在访问高速缓存线的字时设定掩码, 并在该加载退出时清除掩码位。如果来自同一线程/核心的存储在其退出时 检测到其在掩码位被设置的同时向该字进行写入,则其将用信号通知对应 于该加载的加载队列条目(经由跟踪符)以被缺失预测/清刷或用其从属指 令重试。访问掩码还跟踪线程/核心。
图22是非消歧加载存储队列,因为其不包括用以将乱序加载和存储 消歧的对应硬件的事实。加载和存储根据机器资源允许而乱序分派。传统 上,在加载队列和存储队列两者中使用地址匹配和对应的消歧硬件以确保 正确的存储队列条目被转发到请求加载队列条目,如上所述(例如,图5 和图6)。加载队列和存储队列的内容对外面的核心/线程不可见。
在图22中,分派的加载和存储地址并未相对于存储队列或加载队列 中的条目而被消歧。加载/存储队里现在是具有减小的裸片面积、功率消耗 以及定时要求的改进的缓冲器实现方式。SRB将执行消歧功能。在SRB中检 测到第一匹配时,使用那些匹配来填充存储至加载转发预测表中的条目以 随着指令序列的执行向前进行而强制执行转发。
在加载被分派时,其检查预测表以查看其是否与对应的存储配对。 如果加载被配对且该特定存储已被分派,则加载将从在预测表中记录的该 存储队列条目号进行转发。如果该存储尚未被分派,则加载将其加载队列 条目号寄存在预测表中并将在加载队列中标记其本身以等待存储数据被转 发。当稍后分派存储时,其检查预测表以获得加载队列条目号并向该加载 进行转发。
一旦针对加载存储对检测到转发,则记录加载存储对的PC和地址, 使得地址匹配被验证。如果地址匹配,则加载将不会分派直至存储数据被 分派,并且该加载将被标记为从其进行转发。使用预测阈值来设置加载存 储对之间的转发关系中的置信度水平。
图23示出了根据本发明的一个实施例的未消歧乱序加载存储队列 重新排序实现方式的重新排序实现方式。图23还提供非推测性的低功率、 低裸片面积以及较低的定时紧迫性。
加载退出/重新排序缓冲器(SRB)可以以两个实现方式、退出实现 方式和重新排序实现方式进行操作。
在图23的重新排序实现方式中,从存储队列将存储地址乱序加载到SRB中(例如,根据资源允许)。在分配每个存储时,其接收序列号。SRB 然后通过根据它们的序列号将存储重新排序而运行,使得它们按照原始程 序顺序而驻留于SRB中。按照程序顺序较早的存储在SRB的顶部处。后续 加载然后寻找地址匹配和分配年龄(在加载和存储的分配时间给定的程序 顺序序列号)。随着加载被分派,其查看SRB,如果其见到尚未分派(尚无 地址计算)的较早存储(与其自己的序列号相比),则可以实现两个解决 方案中的一个。
1.加载不分派,其在其将其本身分派之前等到所有较早存储都已分 派。
2.加载分派并在高速缓存的访问掩码中标记其地址(如图17中所 示)。后续存储检查访问掩码并遵循相同的方法,如图17中所描述的。
应注意的是优先级编码器如上所述地运行以定位正确的转发条目。
图24示出了根据本发明的一个实施例的指令序列(例如,踪迹)重 新排序的推测性执行实现方式。在推测性模式下,存储在存储退出时按照 原始程序顺序从存储队列移动至SRB中,使得按照原始程序顺序较早的存 储在SRB的顶部处。后续加载然后寻找地址匹配(例如,使用地址CAM), 并从SRB/存储高速缓存中的匹配条目进行转发。在其中存在两个或更多地 址匹配的情况下,优先级编码器可以通过扫描第一个来定位正确的转发条 目。这允许机器向前继续进行。如果分派了加载(其第一次检查SRB))且 向其进行转发的存储退出到SRB/存储高速缓存,则该加载从SRB/存储高速 缓存进行转发并将其配对关系记录在预测表中。为了检测其中在向加载进 行转发的存储退出到SRB/存储高速缓存之前分派加载的情况,退出时的加 载将再一次检查存储队列。如果加载发现转发存储匹配,则其将用信号通 知对应于该加载的加载队列条目以使其被缺失预测/清刷或用其从属指令 进行重试。转发预测器将从此缺失转发进行学习。
应注意的是加载将能够针对先前的存储在SRB中检查匹配地址,因 为并非SRB中的所有存储都将被提交给外部高速缓存/存储高速缓存架构上 可见状态(将SRB存储装置留给可见存储器)直至包括所述加载的踪迹中 的所有指令都已达到踪迹提交(commit)状态(例如,全部变成非推测性 的且踪迹整体上准备好提交)。
存储退出/重新排序缓冲器在功能上启用推测性执行。可以将推测性 执行的结果保存在存储退出/重新排序缓冲器中直至已知推测性结果。推测 性结果并不是在架构上可见的。一旦提交推测性状态,则可以将存储提交 到存储高速缓存。在提交该状态之前,需要重新尝试的任何例外或加载和 存储将用信号通知将防止状态提交的例外或缺失预测。存储与对应的加载 之间的转发缺失预测可以是固定的(例如,通过引发在缺失=转发加载点处清刷机器的缺失预测等)。
在2012年1月27日由Mohammad Abdallah提交的代理人档案号 SMII-033、“HARDWARE ACCELERATION COMPONENTS FOR TRANSLATING GUEST INSTRUCTIONS TONATIVE INSTRUCTIONS”的美国专利申请13/360,024中 可以找到SRB功能的附加描述。
图25示出了根据本发明的一个实施例的示例性微处理器管线2500 的图。微处理器管线2500包括取读模块2501,其实现用于识别并提取包括 执行的指令的过程的功能,如上所述。在图25的实施例中,取读模块后面 是解码模块2502、分配模块2503、分派模块2504、执行模块2505和退出 模块2506。应注意的是微处理器管线2500仅仅是实现上述本发明的实施例 的功能的管线的一个示例。本领域的技术人员将认识到可以实现包括上述 解码模块的功能的其他微处理器管线。
出于说明的目的,前述描述参考并不意图为穷举的或限制本发明的特定 实施例。根据以上讲授内容,可以有许多修改和变更。选择和描述实施例 是为了最好地解释本发明的原理及其实际应用,从而使得本领域的技术人 员在有和适合于其特定使用的各种修改的情况下最好地利用本发明及其各 种实施例。

Claims (20)

1.一种用于在使用共享存储器资源的存储器一致性模型中执行乱序加载的、在处理器中的、基于锁的方法,所述方法包括:
定义能够由多个异步核访问的存储器资源;以及
由访问掩码跟踪高速缓存线的哪些字由加载访问,其中,所述高速缓存线包括所述存储器资源,其中所述访问掩码内的掩码位在所述加载访问所述高速缓存线的字时被设置,并且其中,所述掩码位阻止由来自所述多个异步核的其他加载对所述高速缓存线的所述字的访问。
2.如权利要求1所述的方法,进一步包括:
在由所述多个异构核中的一个异构核执行向所述高速缓存线的后续存储时,检查所述访问掩码;以及
当对应于所述加载的、向所述高速缓存线的所述字的所述后续存储检测到所述访问掩码中的、对应于由所述加载访问的字的掩码位被设置时,引发缺失预测。
3.如权利要求2所述的方法,其中,所述后续存储通过使用跟踪符寄存器来用信号发送对应于所述加载的加载队列条目,并且引发所述加载连同依赖于所述加载的指令一起进行缺失预测。
4.如权利要求1所述的方法,进一步包括:
响应于确定了后续加载正从高速缓存线的部分读取,设置对应于所述高速缓存线的所述部分的相应的访问掩码位。
5.如权利要求1所述的方法,进一步包括:
当访问了所述高速缓存线的、与所述掩码位相关联的所述字的所述加载退出时,清除所述掩码位。
6.如权利要求1所述的方法,进一步包括:
由加载队列条目引用寄存器跟踪加载队列条目引用,其中,当存储将数据保存到所述高速缓存线的、与所述加载队列条目引用寄存器中的匹配相对应的部分时,引发对应的加载队列条目进行缺失预测。
7.如权利要求1所述的方法,其中所述存储器资源包括标志资源和数据资源,并且所述存储器资源能够由多个线程访问。
8.一种微处理器,包括:
多个异步核;
存储器资源,所述存储器资源能够由所述多个异步核访问;以及
访问掩码,所述访问掩码用于跟踪高速缓存线的哪些字由加载访问,其中,所述高速缓存线包括所述存储器资源,其中,所述加载在访问所述高速缓存线的字时设置所述访问掩码内的掩码位,并且其中,所述掩码位阻止由来自所述多个异步核的其他加载对所述高速缓存线的所述字的访问。
9.如权利要求8所述的微处理器,其中,在由所述多个异构核中的一个异构核执行向所述高速缓存线的后续存储时,检查所述访问掩码,并且其中,当对应于所述加载的、向所述高速缓存线的所述字的所述后续存储检测到所述访问掩码中的、对应于由所述加载访问的字的掩码位被设置时,引发缺失预测。
10.如权利要求9所述的微处理器,其中,所述后续存储通过使用跟踪符寄存器来用信号发送对应于所述加载的加载队列条目,并且引发所述加载连同依赖于所述加载的指令一起进行缺失预测。
11.如权利要求8所述的微处理器,其中,响应于确定了后续加载正从高速缓存线的部分读取,设置对应于所述高速缓存线的所述部分的相应的访问掩码位。
12.如权利要求10所述的微控制器,其中,当访问了所述高速缓存线的、与所述掩码位相关联的所述字的所述加载退出时,清除所述掩码位。
13.如权利要求8所述的微控制器,其中,实现加载队列条目引用寄存器以跟踪加载队列条目引用,其中,当存储将数据保存到所述高速缓存线的、与所述加载队列条目引用寄存器中的匹配相对应的部分时,引发对应的加载队列条目进行缺失预测。
14.如权利要求8所述的微控制器,其中所述存储器资源包括标志资源和数据资源,并且所述存储器资源能够由多个线程访问。
15.一种非瞬态计算机可读存储介质,存储有指令,所述指令当由计算设备的一个或多个处理器的集合执行时,使所述计算设备:
定义能够由多个异步核访问的存储器资源;以及
由访问掩码跟踪高速缓存线的哪些字由加载访问,其中,所述高速缓存线包括所述存储器资源,其中所述加载在访问所述高速缓存线的字时设置所述访问掩码内的掩码位,并且其中,所述掩码位阻止由来自所述多个异步核的其他加载对所述高速缓存线的所述字的访问。
16.如权利要求15所述的非瞬态计算机可读存储介质,其中,所述指令当由一个或多个处理器的所述集合执行时,进一步使所述计算设备:
在由所述多个异构核中的一个异构核执行向所述高速缓存线的后续存储时,检查所述访问掩码;以及
当对应于所述加载的、向所述高速缓存线的所述字的所述后续存储检测到所述访问掩码中的、对应于由所述加载访问的字的掩码位被设置时,引发缺失预测。
17.如权利要求15所述的非瞬态计算机可读存储介质,其中,所述指令当由一个或多个处理器的所述集合执行时,进一步使所述计算设备:
确定后续加载正从高速缓存线的部分读取;以及
设置对应于所述高速缓存线的所述部分的相应的访问掩码位。
18.如权利要求15所述的非瞬态计算机可读存储介质,其中,所述指令当由一个或多个处理器的所述集合执行时,进一步使所述计算设备:
当访问了所述高速缓存线的、与所述掩码位相关联的所述字的所述加载退出时,清除所述掩码位。
19.如权利要求15所述的非瞬态计算机可读存储介质,其中,实现加载队列条目引用寄存器以跟踪加载队列条目引用,其中,当存储将数据保存到所述高速缓存线的、与所述加载队列条目引用寄存器中的匹配相对应的部分时,引发对应的加载队列条目进行缺失预测。
20.如权利要求15所述的非瞬态计算机可读存储介质,其中所述存储器资源包括标志资源和数据资源,并且所述存储器资源能够由多个线程访问。
CN201810036825.7A 2012-06-15 2013-06-12 乱序加载的基于锁的和基于同步的方法 Pending CN108345547A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201261660521P 2012-06-15 2012-06-15
US61/660,521 2012-06-15
CN201380042996.6A CN104583942B (zh) 2012-06-15 2013-06-12 乱序加载的基于锁的和基于同步的方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201380042996.6A Division CN104583942B (zh) 2012-06-15 2013-06-12 乱序加载的基于锁的和基于同步的方法

Publications (1)

Publication Number Publication Date
CN108345547A true CN108345547A (zh) 2018-07-31

Family

ID=49758697

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201810036825.7A Pending CN108345547A (zh) 2012-06-15 2013-06-12 乱序加载的基于锁的和基于同步的方法
CN201380042996.6A Active CN104583942B (zh) 2012-06-15 2013-06-12 乱序加载的基于锁的和基于同步的方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201380042996.6A Active CN104583942B (zh) 2012-06-15 2013-06-12 乱序加载的基于锁的和基于同步的方法

Country Status (6)

Country Link
US (1) US20150095588A1 (zh)
EP (1) EP2862063B1 (zh)
KR (2) KR20170066700A (zh)
CN (2) CN108345547A (zh)
TW (2) TWI637318B (zh)
WO (1) WO2013188588A1 (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013188701A1 (en) 2012-06-15 2013-12-19 Soft Machines, Inc. A method and system for implementing recovery from speculative forwarding miss-predictions/errors resulting from load store reordering and optimization
EP2862062B1 (en) 2012-06-15 2024-03-06 Intel Corporation A virtual load store queue having a dynamic dispatch window with a distributed structure
TWI646422B (zh) 2012-06-15 2019-01-01 英特爾股份有限公司 在處理器中之免消歧義失序載入/儲存佇列方法、微處理器、和非暫態性電腦可讀取儲存媒體
CN104823154B (zh) 2012-06-15 2017-12-29 英特尔公司 包括虚拟加载存储队列的处理器和系统
EP2862069A4 (en) 2012-06-15 2016-12-28 Soft Machines Inc DEFINING INSTRUCTIONS TO REORDER AND OPTIMIZE LOADING AND STORAGE
WO2013188306A1 (en) 2012-06-15 2013-12-19 Soft Machines, Inc. Reordered speculative instruction sequences with a disambiguation-free out of order load store queue
GB2529899B (en) * 2014-09-08 2021-06-23 Advanced Risc Mach Ltd Shared Resources in a Data Processing Apparatus for Executing a Plurality of Threads
US9760511B2 (en) * 2014-10-08 2017-09-12 International Business Machines Corporation Efficient interruption routing for a multithreaded processor
US11132233B2 (en) * 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
US10671512B2 (en) * 2018-10-23 2020-06-02 Microsoft Technology Licensing, Llc Processor memory reordering hints in a bit-accurate trace
US10853078B2 (en) * 2018-12-21 2020-12-01 Intel Corporation Method and apparatus for supporting speculative memory optimizations
US11593109B2 (en) 2021-06-07 2023-02-28 International Business Machines Corporation Sharing instruction cache lines between multiple threads
US11593108B2 (en) 2021-06-07 2023-02-28 International Business Machines Corporation Sharing instruction cache footprint between multiple threads

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020199063A1 (en) * 2001-06-26 2002-12-26 Shailender Chaudhry Method and apparatus for facilitating speculative stores in a multiprocessor system
US20050154832A1 (en) * 2004-01-13 2005-07-14 Steely Simon C.Jr. Consistency evaluation of program execution across at least one memory barrier
CN1980186A (zh) * 2005-12-02 2007-06-13 北京中创信测科技股份有限公司 一种实现异步传输模式适配层功能的装置
CN101243421A (zh) * 2005-08-19 2008-08-13 国际商业机器公司 在处理器与外部设备之间传送指令和数据的系统和方法
US20100281220A1 (en) * 2009-04-30 2010-11-04 International Business Machines Corporation Predictive ownership control of shared memory computing system data
US20100299484A1 (en) * 2009-05-21 2010-11-25 Via Technologies, Inc. Low power high speed load-store collision detector
US20110010503A1 (en) * 2009-07-09 2011-01-13 Fujitsu Limited Cache memory

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5748937A (en) * 1993-08-26 1998-05-05 Intel Corporation Computer system that maintains processor ordering consistency by snooping an external bus for conflicts during out of order execution of memory access instructions
US6185660B1 (en) * 1997-09-23 2001-02-06 Hewlett-Packard Company Pending access queue for providing data to a target register during an intermediate pipeline phase after a computer cache miss
US6484254B1 (en) * 1999-12-30 2002-11-19 Intel Corporation Method, apparatus, and system for maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses
US6877085B2 (en) * 2001-11-30 2005-04-05 Broadcom Corporation Mechanism for processing speclative LL and SC instructions in a pipelined processor
US7181598B2 (en) * 2002-05-17 2007-02-20 Intel Corporation Prediction of load-store dependencies in a processing agent
US6986010B2 (en) * 2002-12-13 2006-01-10 Intel Corporation Cache lock mechanism with speculative allocation
US7080209B2 (en) * 2002-12-24 2006-07-18 Intel Corporation Method and apparatus for processing a load-lock instruction using a relaxed lock protocol
US7114042B2 (en) * 2003-05-22 2006-09-26 International Business Machines Corporation Method to provide atomic update primitives in an asymmetric heterogeneous multiprocessor environment
US7703098B1 (en) * 2004-07-20 2010-04-20 Sun Microsystems, Inc. Technique to allow a first transaction to wait on condition that affects its working set
JP4520788B2 (ja) * 2004-07-29 2010-08-11 富士通株式会社 マルチスレッドプロセッサ
US20060026371A1 (en) * 2004-07-30 2006-02-02 Chrysos George Z Method and apparatus for implementing memory order models with order vectors
US7315926B2 (en) * 2004-09-21 2008-01-01 Emc Corporation Lock management for concurrent access to a single file from multiple data mover computers
US20070234014A1 (en) * 2006-03-28 2007-10-04 Ryotaro Kobayashi Processor apparatus for executing instructions with local slack prediction of instructions and processing method therefor
US8185700B2 (en) * 2006-05-30 2012-05-22 Intel Corporation Enabling speculative state information in a cache coherency protocol
US9262326B2 (en) * 2006-08-14 2016-02-16 Qualcomm Incorporated Method and apparatus to enable the cooperative signaling of a shared bus interrupt in a multi-rank memory subsystem
US7594079B2 (en) * 2006-09-29 2009-09-22 Mips Technologies, Inc. Data cache virtual hint way prediction, and applications thereof
EP2527972A3 (en) * 2006-11-14 2014-08-06 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US8037252B2 (en) * 2007-08-28 2011-10-11 International Business Machines Corporation Method for reducing coherence enforcement by selective directory update on replacement of unmodified cache blocks in a directory-based coherent multiprocessor
US8464009B2 (en) * 2008-06-04 2013-06-11 Oracle America, Inc. Method for memory interleave support with a ceiling mask
US20100274972A1 (en) * 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
US20110119469A1 (en) * 2009-11-13 2011-05-19 International Business Machines Corporation Balancing workload in a multiprocessor system responsive to programmable adjustments in a syncronization instruction
TWI484335B (zh) * 2010-01-07 2015-05-11 Alibaba Group Holding Ltd Cached data processing method, processing system, and means
US8756374B2 (en) * 2010-11-05 2014-06-17 Oracle International Corporation Store queue supporting ordered and unordered stores
US8321635B2 (en) * 2010-11-08 2012-11-27 Lsi Corporation Synchronizing commands for preventing data corruption
US9529594B2 (en) * 2010-11-30 2016-12-27 Oracle International Corporation Miss buffer for a multi-threaded processor
US9043363B2 (en) * 2011-06-03 2015-05-26 Oracle International Corporation System and method for performing memory management using hardware transactions
US9244837B2 (en) * 2012-10-11 2016-01-26 Texas Instruments Incorporated Zero cycle clock invalidate operation
US9448936B2 (en) * 2014-01-13 2016-09-20 Apple Inc. Concurrent store and load operations

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020199063A1 (en) * 2001-06-26 2002-12-26 Shailender Chaudhry Method and apparatus for facilitating speculative stores in a multiprocessor system
US20050154832A1 (en) * 2004-01-13 2005-07-14 Steely Simon C.Jr. Consistency evaluation of program execution across at least one memory barrier
CN101243421A (zh) * 2005-08-19 2008-08-13 国际商业机器公司 在处理器与外部设备之间传送指令和数据的系统和方法
CN1980186A (zh) * 2005-12-02 2007-06-13 北京中创信测科技股份有限公司 一种实现异步传输模式适配层功能的装置
US20100281220A1 (en) * 2009-04-30 2010-11-04 International Business Machines Corporation Predictive ownership control of shared memory computing system data
US20100299484A1 (en) * 2009-05-21 2010-11-25 Via Technologies, Inc. Low power high speed load-store collision detector
US20110010503A1 (en) * 2009-07-09 2011-01-13 Fujitsu Limited Cache memory

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
林伟: "众核处理器中使用写掩码实现混合写回/写穿透策略", 《计算机学报》 *

Also Published As

Publication number Publication date
KR20170066700A (ko) 2017-06-14
WO2013188588A1 (en) 2013-12-19
US20150095588A1 (en) 2015-04-02
CN104583942B (zh) 2018-02-13
TW201741870A (zh) 2017-12-01
EP2862063A4 (en) 2016-12-21
CN104583942A (zh) 2015-04-29
KR20150020244A (ko) 2015-02-25
KR101745640B1 (ko) 2017-06-09
TWI637318B (zh) 2018-10-01
TWI585685B (zh) 2017-06-01
EP2862063B1 (en) 2022-09-14
TW201428619A (zh) 2014-07-16
EP2862063A1 (en) 2015-04-22

Similar Documents

Publication Publication Date Title
CN104620223B (zh) 对于基于存储资历实现从不同线程进行转发的线程不可知的加载存储缓冲器
CN104583957B (zh) 具有无消歧乱序加载存储队列的重新排序的推测性指令序列
CN104583943B (zh) 拥有具有分布式结构的动态分派窗口的虚拟加载存储队列
CN104583975B (zh) 无消歧乱序加载存储队列
CN104823154B (zh) 包括虚拟加载存储队列的处理器和系统
CN104583936B (zh) 具有组成按序从存储器进行读取的加载的存储器一致性模型中的乱序加载的信号量方法和系统
CN104823168B (zh) 用于实现从由加载存储重新排序和优化导致的推测性转发遗漏预测/错误中恢复的方法和系统
CN104583942B (zh) 乱序加载的基于锁的和基于同步的方法
CN104583956B (zh) 用于实现加载存储重新排序和优化的指令定义
CN104583939B (zh) 用于选择指令的系统和方法

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20180731