CN103842959B - 在计算机系统中维持操作数活性信息 - Google Patents

在计算机系统中维持操作数活性信息 Download PDF

Info

Publication number
CN103842959B
CN103842959B CN201280048608.0A CN201280048608A CN103842959B CN 103842959 B CN103842959 B CN 103842959B CN 201280048608 A CN201280048608 A CN 201280048608A CN 103842959 B CN103842959 B CN 103842959B
Authority
CN
China
Prior art keywords
instruction
operand
value
program
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201280048608.0A
Other languages
English (en)
Other versions
CN103842959A (zh
Inventor
M.K.格什温
V.萨拉普拉
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN103842959A publication Critical patent/CN103842959A/zh
Application granted granted Critical
Publication of CN103842959B publication Critical patent/CN103842959B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • G06F9/30127Register windows
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets

Abstract

在对于运行程序的当前架构化的操作数进行上下文切换期间,维持操作数活性状态信息,当前操作数状态信息指示对应的当前操作数是否是对于由第一程序模块使用而言被使能或被禁止中的任一个,该第一程序模块包括用于禁止当前架构化的操作数的指令集架构(ISA)的机器指令,当前操作数被所述第一程序模块的机器指令访问,该访问包括使用当前操作数状态信息来确定之前存储的当前操作数值是否能够被该第一程序模块访问。

Description

在计算机系统中维持操作数活性信息
技术领域
本发明涉及处理器领域,并且更具体地,涉及在计算机系统中基于操作数活性情况来执行操作。
背景技术
根据Wikipedia于8/1/2011日在万维网上发布的,“多线程(Multithreading)计算机”具有硬件支持以有效地运行多个线程。其与多进程(multiprocessing)系统(例如多核系统)的区别在于,线程需要共享单个核心的资源:计算单元、CPU缓存和转换后备缓冲器(TLB)。而多进程系统包括多个完整的处理单元,多线程旨在于通过利用线程级和指令级并行化来增大单个核心的利用度。因为这两个技术是互补的,所以它们有时在具有多个多线程CPU的系统中和在具有多个多线程核心的CPU中组合。
随着进一步开发指令级并行化的努力自20世纪90年代晚期起停止,多线程范式变得更加流行。这使得吞吐率计算的概念从更专门的事务处理领域再度出现称为主导:
尽管难以进一步加速单个线程或单个程序,然而大多计算机系统实际上在多个线程或程序间是多任务的。
允许加速所有任务的全面系统吞吐率的技术将是有意义的性能收益。
用于吞吐率计算的两个主要技术是多进程和多线程。
一些优点包括:
如果一个线程得到许多缓存命中失败(miss),则其它线程可以在利用未使用的计算资源的条件下继续,与这些资源在仅运行单个线程时将空闲相比,这可以引起更快的全面运行。
如果一个线程不能使用CPU的所有计算资源(因为指令取决于彼此的结果),则运行其它线程允许不使其空闲。
如果数个线程在相同的数据集上工作,则它们实际上可以共享其缓存,这引起更好的缓存利用或者在缓存的值方面的同步。
对多线程的一些批评包括:
在共享诸如缓存或转换后备缓冲器(TLB)的硬件资源时,多个线程会彼此干扰。
单个线程的运行时间不会被改进反而会被劣化,即使仅运行一个线程。这归因于较慢的频率和/或为容纳线程切换硬件而需要的附加流水线层。
用于多线程的硬件支持对于软件而言更为可见,因此与多进程相比需要对于应用程序和操作系统两者的更多变化。
存在大量不同类型的多线程,包括:
堵塞多线程(Block multi-threading)
当一个线程运行直至其被通常将创建长延迟暂停(stall)的事件堵塞时,发生最简单类型的多线程。这样的暂停可能是需要访问片外存储器的缓存命中失败,其可能需要数百个CPU周期来将数据回传。替代于等待暂停解除,有线程的处理器将会把运行切换到已就绪的另一线程。只有当用于前一线程的数据到达时,该前一线程才被放回已就绪线程的列表中。
例如
1.周期i:来自线程A的指令j被发布
2.周期i+1:来自线程A的指令j+1被发布
3.周期i+2:来自线程A的指令j+2被发布,加载在所有缓存中命中失败的指令
4.周期i+3:线程调度器被调用,切换到线程B
5.周期i+4:来自线程B的指令k被发布
6.周期i+5:来自线程B的指令k+1被发布
从概念上说,它类似于在实时操作系统中使用的协作多任务处理,在该协作多任务处理中,任务在根据某种类型的事件而需要等待时主动放弃运行时间。
这种类型的多线程已知为堵塞或协作或粗粒度多线程。
硬件成本:
多线程硬件支持的目标是允许在被堵塞的线程与另一已就绪的线程之间进行快速切换。为了实现这一目标,硬件成本是复制程序可见寄存器以及一些处理器控制寄存器(例如程序计数器)。从一个线程切换到另一线程意味着硬件从使用一个寄存器组切换到另一个。
这种附加硬件具有如下益处:
线程切换可以在一个CPU周期中完成。
对于每个线程显得其单独运行并且并不与任意其它线程共享任意硬件资源。这将在应用以及操作系统中需要以支持多线程的软件变更量最小化。
为了在活动的线程之间有效切换,每个活动的线程需要具有其自己的寄存器组。例如为了快速在两个线程之间切换,寄存器硬件需要被实例化两次。
示例:
许多微控制器和嵌入式处理器的系列具有多个寄存器库,以允许针对中断进行快速的上下文切换。这种方案可以被看作一种类型的在用户程序线程与中断线程之间的堵塞式多线程。
交错多线程(Interleaved multi-threading)
1.周期i+1:来自线程B的指令被发布
2.周期i+2:来自线程C的指令被发布
这种类型的多线程的目的是将所有数据依赖性暂停从运行流水线移除。因为一个线程相对独立于其它线程,所以一个流水线层中的一个指令较不可能需要来自该流水线中的较旧指令的输出。
从概念上说,其类似于在操作系统中使用的抢先多任务处理。可以做出如下类推,即,给予每个活动的线程的时间片是一个CPU周期。
该类型的多线程起初叫做筒体处理(Barrel processing),其中桶的桶板代表流水线层和其运行线程。交错或抢先或细粒度或时间片多线程是更现代化的术语。
硬件成本:
除了在堵塞式类型的多线程中讨论过的硬件成本之外,交错式多线程具有附加的成本,即每个流水线层追踪其处理的指令的线程ID。同样,因为在流水线中存在被同时运行的多个线程,所以诸如缓存和TLB的、被共享的资源需要更大,以避免在不同线程之间的冲突(thrashing)。
同步多线程
该最先进类型的多线程适用于超标量处理器。普通的超标量处理器在每个CPU周期从单个线程发布多个指令。在同步多线程(SMT)中,超标量处理器可以在每个CPU周期从多个线程发布指令。在认识到任意单个线程具有有限量的指令级并行化的情况下,该类型的多线程试图开发跨越多个线程可用的并行处理,以减少与未使用的发布时隙(issueslots)关联的浪费。
例如:
1.周期i:来自线程A的指令j和j+1、来自线程B的指令k全都被同时发布
2.周期i+1:来自线程A的指令j+2、来自线程B的指令k+1、来自线程C的指令全都被同时发布
3.周期i+2:来自线程A的指令j+3、来自线程C的指令m+1和m+2全都被同时发布
为了将其它类型的多线程与SMT(同步多线程)相区分,术语“时间多线程(Temporal multithreading)”被用来表示每次能够发布来自仅一个线程的指令的情况。
硬件成本:
除了对交错多线程讨论过的硬件成本,SMT具有附加成本,即每个流水线层追踪被处理的每个指令的线程ID。再次,诸如缓存和TLB的共享资源需要对大量的活动线程来定尺寸。
根据转让给IBM并且通过引用结合于此的、2010年2月11日授权的美国专利7,827,388“Apparatus for adjusting instruction thread priority in a multi-threadprocessor”,大量技术被用于改进数据处理器运行软件程序的速度。这些技术包括增大处理器时钟频率,使用缓冲存储器和使用预测性分支。增大处理器时钟频率允许处理器在给定的时段中执行相对多的运算。缓冲存储器定位在紧邻处理器处,并且以高于主存储器的速度操作,从而降低了处理器需要以访问数据和指令的时间。预测性分支允许处理器基于对较早指令的结果的预测来运行特定的指令,从而避免等待实际结果并且由此改进了处理速度。
这些处理器还采用流水线化的指令运行来增强系统性能。在流水线化的指令运行中,处理任务被分解为多个流水线阶段或层。流水线化可以通过允许后续指令在早先发布的指令完成特定处理之前开始运行的方式来增大处理速度。处理器并不需要等待一个指令被完全处理才开始处理序列中的下一指令。
采用流水线化处理的处理器可以包括专用于处理器中的不同活动的大量不同的流水线层。例如,处理器可以在读取层、解码/分派层、发布层、运行层、结束层和完成层中处理顺序的指令。这些单独的层中的每个都可以采用其自己的流水线层集合,以完成期望的处理任务。
多线程指令处理是可以与流水线化联合使用以增大处理速度的附加技术。多线程指令处理包括将程序指令集合划分为指令的两个或多个不同的组或线程。该多线程技术允许来自一个线程的指令通过流水线被处理,而另一线程可能由于某原因而不能被处理。这避免了在单线程指令处理中遇到的如下情况,在该情况中,当特定指令不能被运行时所有指令都被阻挡,例如,在其中运行特定指令所需的数据并非立即可用的缓存命中失败的情况下。能够处理多个指令线程的数据处理器通常被称作同步多线程(SMT)处理器。
应该在此处注意到的是,在软件界通常使用术语“多线程”的方式与术语“多线程”在计算机架构界中被使用的方式之间存在区别。软件界将“多线程”用于指代划分为多个、相关的线程的单个任务。在计算机架构中,术语“多线程”指的是可以彼此独立的线程。术语“多线程”在本文件中按照与计算机架构界所采用的相同的意义来使用。
为了促进多线程,来自不同线程的指令按某种方式在全面的处理器流水线中的某个点处交错。基本上存在两种技术用以交错用于在SMT处理器中的处理的指令。一个技术包括基于某长延迟事件(诸如在处理一个线程中产生延迟的缓存命中失败)来交错指令。在该技术中,所有处理器资源都专用于单个线程,直至该线程的处理被某长延迟事件延迟。在出现该长延迟事件时,处理器快速切换至另一线程并且提前该线程,直至对于该线程发生某长延迟事件,或者直至暂停另一线程的情况解除。
用于在SMT处理器中交错来自多个指令线程的指令的另一普遍技术包括根据某交错规则(interleaving rule或interleave rule)一个周期一个周期地交错指令。简单的一个周期一个周期的交错技术可以简单地一个个地交错来自不同线程的指令。例如,两线程SMT处理器可以在第一时钟周期中从第一线程得到一个指令,在第二时钟周期中从第二线程得到一个指令,在第三时钟周期中从第一线程得到另一指令等,在两个指令线程之间往返。更复杂的一个周期一个周期的交错技术可以包括将软件指令用于为每个指令线程分配优先级,然后将来自不同线程的指令交错,以执行基于相对线程优先级的某规则。例如,如果两线程SMT处理器中的一个线程被分配了比另一线程高的优先级,则与来自较低优先级的线程的指令相比,简单的交错规则可以需要将两倍多的、来自较高优先级的线程的指令包括在交错的流中。
更复杂的一个周期一个周期的交错规则在当前使用中为每个线程分配从“1”到“7”的优先级,并且将来自较低优先级线程的指令基于函数1/(2|X-Y|+1)放置到交错的指令流中,其中,X是第一线程的软件分配的优先级,并且Y是第二线程的软件分配的优先级。在两个线程具有相同优先级的情况下,例如X=3且Y=3,则该函数产生比率1/2,并且来自两个线程中的每个的指令将在每两个时钟周期中被包括到交错的指令流中一次。如果线程优先级相差2,例如X=2且Y=4,则该函数产生比率1/8,并且来自较低优先级线程的指令将在每八个时钟周期中被包括到交错的指令流中一次。
使用优先级规则选择应多频繁地包括来自特定线程的指令通常旨在于保证处理器资源是基于各个线程的软件分配的优先级来分派的。然而存在其中单纯依靠软件分配的线程优先级无法引起处理器资源的最优分派的情况。具体地,软件分配的线程优先级并不能考虑处理器事件,例如缓存命中失败,其可能影响指令的特定线程通过处理器流水线来提前的能力。因此,某事件在处理器中的发生可以完全或至少部分地破坏在多线程处理器中在不同指令线程之间有效分配处理器资源的目的。
例如,优先级5可以由软件分配给两线程系统中的第一指令线程,而优先级2可以由软件分配给第二指令线程。利用上面描述的优先级规则1/(2|X-Y|+1),这些软件分配的优先级将规定:来自较低优先级线程的指令将每十六个时钟周期才被交错到交错指令流中一次,而来自较高优先级指令线程的指令将每十六个时钟周期被交错十五次。如果来自较高优先级指令线程的指令经历缓存命中失败,则优先级规则将仍然规定每十六个指令中的十五个包括来自较高优先级指令线程的指令,尽管该缓存命中失败的发生将有效暂停相应的指令线程的运行,直至用于该指令的数据变得可用。
在一个实施例中,SMT处理器中的各个指令线程都与软件分配的基础输入处理优先级关联。除非某预定事件或情况在被处理或待被处理的指令情况下发生,否则各个线程的基础输入处理优先级就被用于确定根据某指令交错规则在线程之间的交错频率。然而,当某预定事件或情况在处理器中涉及特定指令线程地发生时,一个或多个指令线程的基础输入处理优先级被调节为产生多一个调节过的优先级值。指令交错规则然后根据调节过的优先级值以及还未经历调节的任意基础输入处理优先级来执行。
超线程在2003年来自公司的“Hyper-ThreadingTechnology,Technical User’s Guide”中被描述,其通过引用结合于此。根据该技术用户指导,用于改进单个处理器系统上的系统性能的努力常规地集中在使得处理器更有能力上。这些针对处理器设计的方法聚焦在使得处理器可以通过较高时钟频率、指令级并行化(ILP)和缓存来更快地处理更多指令。用于实现更高时钟频率的技术包括将微架构流水线化为更细粒度,这也称作超流水线。更高时钟频率可以通过增大每秒可被运行的指令数目来大幅提高性能。但是因为在超流水线化的微架构中存在多得多的正在运行的指令,所以对于干扰流水线的事件(诸如缓存命中失败、中断和分支失败预测)的处理更关键得多并且失败是更高成本的。ILP指的是增大在每个时钟周期运行的指令数目的技术。例如,许多超标量处理器实现具有可以同时处理指令的多个运行单元。在这些超标量实现中,在每个时钟周期可以运行数个指令。然而,借助简单的按顺序运行,简单地具有多个运行单元是不够的。挑战是找到足够多的指令来运行。一个技术是乱序运行,其中一大窗的指令被基于指令依赖关系而不是程序顺序来同时评估并且发送给运行单元。对于系统存储器的访问是缓慢的,尽管快于对硬盘的访问,但是当与处理器的运行速度相比较时,它们慢了数个量级。一个用于减少通过访问系统存储器造成的延时(称作延迟)的技术是增加靠近处理器的快速缓存。缓存提供对于被频繁访问的数据或指令的快速存储器访问。然而,随着缓存速度增大,散热和成本问题也随之增大。出于该原因,处理器通常被设计有缓存层次结构,其中快速的、小的缓存被定位在附近并且以与处理器核心的访问延迟接近的访问延迟来操作。处理较不频繁地被访问的数据或指令的渐渐较大的缓存以较长的访问延迟来实现。然而,会发生所需的数据并不在任何处理器缓存中的情况。处理这种缓存命中失败需要访问系统存储器或硬盘,并且在这些情况下,处理器很可能在等待存储器事物结束期间暂停。用于将处理器性能从一代到下一代改进的大多技术是复杂的,并且通常增加显著的晶粒尺寸和功率成本。由于指令流程中有限的并行化,这些技术中没有能够以100%效率操作的。从而,在处理器中将运行单元加倍并不能将处理器的性能加倍。同样,由于对较慢存储器子系统丢失的处理器周期数目,简单地加倍时钟频率并不能将性能加倍。
多线程
随着处理器能力增大,于是对性能的需求也增大,这以最大效率来对处理器资源施压。注意到处理器在运行单个任务时在等待特定事件完成期间所浪费的时间,软件开发者开始考虑处理器是否在同时能做其他工作。
为了找到解决方案,软件架构师开始写支持运行程序片(称作线程)的操作系统。线程是可以独立运行的小任务。每个线程具有其自己的时间片,于是每个线程代表处理器利用的一个基本单元。线程被组织到由一个或多个线程组成的进程中。一个进程中的所有线程共享对进程资源的访问。
这些多线程操作系统使得一个线程可以在另一线程等待什么事发生期间运行。在Intel的基于处理器的个人计算机和服务器上,如今的操作系统,诸如微软Windows*2000和Windows*XP都支持多线程。事实上,这些操作系统本身都是多线程的。它们的部分可以在其它部分暂停期间运行。
为了从多线程受益,程序需要处理可以并行运行的可运行部分。即,不是被开发为指令的长的单个序列,而是程序被分解为逻辑运算部分。这样,如果应用执行彼此独立运行的运算,则这些运算可以被分解为线程,这些线程的运行被操作系统调度和控制。这些部分可以被创建为做不同的事情,诸如允许Microsof Word*在用户打字期间为文件重编页码。重编页码在一个线程上发生,而处理键击在另一线程上发生。在单个的处理器系统上,这些线程被顺序地,而不是同时运行。处理器在键击线程与重编页码线程之间足够快速地来回切换,使得两个进程显得同时发生。这称作功能上分解的多线程。
多线程程序还可以被写为在并行线程上运行相同任务。这称作数据分解的多线程,其中线程的区别仅在于被处理的数据。例如,图形应用中的场景可以被绘出,从而每个线程在该场景的一半上工作。典型地,数据分解的应用针对吞吐量性能被划分线程,而功能分解的应用针对用户响应或功能性考虑被划分线程。
当多线程的程序在单个处理器机器上运行时,在线程间切换上下文时导致一些开销。因为在线程间切换消耗时间,所以看上去这样运行两个线程比相继运行两个线程效率低。然而,如果一个线程要在系统设备上等待用户,则使另一线程继续操作的能力快速补偿了切换的所有开销。因为一个线程在图形应用示例中处理用户输入,则当然会发生其仅在等待的频繁周期。通过在线程之间切换,支持多线程程序的操作系统可以改进性能和用户响应,即使它们在单个处理器系统上运行。
在现实世界中,使用多线程的大程序通常运行远多于两个线程。诸如数据库引擎的软件对于针对所接收的记录的每个请求都创建新的处理线程。这样,没有单个的I/O操作会阻止来自运行的新请求并且可以避免瓶颈。在一些服务器上,该方法可以意味着数千个线程在相同的机器上同时运行。
多进程
多进程系统具有同时运行的多个处理器。常规的架构多进程系统具有2至约512个处理器。多进程系统允许不同的线程在不同的处理器上运行。该能力相当地加速了程序性能。现在两个线程可以在不需要要求线程切换以获得处理器的资源的情况下或多或少彼此独立地运行。多处理器操作系统本身是多线程的,并且线程可以最优利用单独的处理器。
最初,存在两种多进程:不对称的和对称的。在不对称系统上,一个或多个处理器专用于特定任务,例如运行操作系统。剩余的处理器对所有其它任务(通常来说是用户应用)可用。很快变得显然的是该配置并不是最优的。在一些机器上,操作系统处理器按100%能力运行,同时用户分配的处理器什么都不做。在短期内,系统设计者开始偏好更好地平衡处理负荷的架构:对称的多进程(SMP)。“对称”指的是任意线程(其来自操作系统或用户应用)可以在任意处理器上运行。这样,总的计算负荷跨越所有计算资源地均匀分布。如今,对称的多进程系统是标准,而不对称的设计几乎消失。
SMP系统使用双倍的处理器,然而性能并未加倍。两个阻碍性能简单加倍的因素是:工作负荷能够被多么好地并行化;和系统开销。控制线程之间交互效率的两个因素是:它们如何竞争相同的资源;和它们如何与其它线程通信。
多处理器系统
如今的服务器应用包括能够被并行运行的多个线程或进程。在线事物处理和网络服务具有可以被同时运行以加速性能的大量软件线程。甚至桌面应用变得更加并行。Intel架构已经实现了线程级并行化(TLP),以改进与晶体管数量和功率消耗相关的性能。
在高端和中等服务器市场上,多处理器通常被用来从系统获得更多性能。通过添加更多处理器,应用潜在地通过同时在多个处理器上运行多个线程而获得实质性的性能改进。这些线程可以来自相同应用,来自同时运行的不同应用,来自操作系统服务,或者来自进行背景维护的操作系统线程。多处理器系统被使用了多年,并且程序员熟悉针对更高性能水平而开发多处理器的技术。
通过引用结合于此的、由Barrick等在2011年4月14日公开的美国专利申请公开2011/0087865“Intermediate Register Mapper(中间寄存器映射器)”记载了“一种方法、处理器和计算机程序产品,其在寄存器重命名机制内采用了中间寄存器映射器。逻辑寄存器查找确定是否发生了对与所分派的指令相关联的逻辑寄存器的命中。在该方面,逻辑寄存器查找在包括架构化寄存器映射器、统一主映射器和中间寄存器映射器的一组寄存器映射器中的至少一个寄存器映射器内进行搜索。对于逻辑寄存器的单个命中选自该组寄存器映射器。如果具有在统一主映射器中的映射器项的指令已结束但还未完成,则统一主映射器中的该寄存器映射器项的映射内容被移至中间寄存器映射器,并且该统一寄存器映射器项被释放,从而增加了可用于再利用的大量统一主映射器项。”
通过引用结合于此的、由Levy等人发明的、于1998年4月2日提交的美国专利6,314,511“Mechanism for freeing registers on processors that perform dynamicout-of-order execution of instructions using renaming registers(用于释放使用重命名寄存器执行指令的动态乱序执行的处理器上的寄存器的机制)”公开了“释放在重新限定架构化寄存器的另一指令之前分派给架构化寄存器的重命名寄存器。重命名寄存器被处理器用于在乱序运行指令的单线程或多线程处理器中动态地乱序运行指令。描述了一种用于释放重命名寄存器的机制,该机制包括一组指令,其被编译器用于向处理器指示其何时可以释放被分派给特定的架构化寄存器的物理(重命名)寄存器。该机制允许,一旦重命名寄存器不再被需要分派给该架构化寄存器,就立即将该重命名寄存器重分配或重分派以存储其它值。存在至少三种方式来借助识别待被从分派释放的重命名寄存器的指令来使能处理器:(1)用户可以将参考特定的重命名寄存器的指令明确提供给处理器;(2)操作系统可以在线程空闲时提供参考与该线程关联的一组寄存器的指令;以及(3)编译器可以借助被呈现给处理器的多个指令来包括该指令。存在提供给处理器以释放分派给架构化寄存器的重命名寄存器的指令的至少五个实施例:(1)释放寄存器位;(2)释放寄存器;(3)释放屏蔽部(Mask);(4)释放操作码;以及(5)释放操作码/屏蔽部。释放寄存器位指令提供了对于乱序处理器的最大加速,并且释放寄存器指令提供了最小加速。”
在2010年7月23日发布并且通过引用结合于此的“PowerISATMVersion2.06Revision B”记载了一个示例性的RISC(精简指令集计算机)指令集架构。Power ISA在此将被用于代表示例实施例,然而,本发明并不限于Power ISA或RISC架构。本领域技术人员将容易地理解本发明在多种架构中的使用。
来自并且通过引用结合于此的“z/Architecture Principles ofOperation”SA22-7832-08,版本9(2010年8月)记载了一个示例性CISC(复杂指令集计算机)指令集架构。
发明内容
可以通过程序运行、指示操作数活性变化的机器指令的运行和操作系统控制来控制操作数活性(operand liveness)。在一个实施例中,特定的机器指令指示架构化的寄存器的寄存器操作数的最后使用。最后使用寄存器随后不能由机器指令访问,并且不能被任何物理寄存器支持(backed)。使能指令可以稍后重建该架构化的寄存器,使得物理寄存器被分配给该架构化的寄存器。一个或多个架构化的寄存器可以随时被禁止。在一个实施例中,操作系统对于给定的应用程序仅使能架构化寄存器的一个子集。应用程序可以使能和禁止该子集的架构化寄存器,但是不能使能任何不在该子集中的架构化寄存器。
在本发明的一个方面中,活性信息被维持用于运行程序,该方法包括由处理器维持当前操作数状态信息,当前操作数状态信息指示对应的当前操作数是否是对于由第一程序模块使用而言被使能或禁止中的任一个,该第一程序模块包括指令集架构(ISA)的机器指令,该第一程序模块当前正被处理器执行。当前操作数被所述第一程序模块的机器指令访问,访问包括使用当前操作数状态信息来确定之前存储的当前操作数值是否能够被第一程序模块访问。
在一个实施例中,响应于被禁止的当前操作数,访问包括a)和b)中的至少一个,而a)和b)包括:返回架构特定的值,并且其中该架构特定的值是未定义值、零值、包括全“1”的值或者程序特定的缺省值中的任一个;以及执行告知,其中,告知步骤是抛出异常(raisingan exception),抑制异常,在机器状态的控制下抛出和抑制异常,提供调试信息和将至少一个寄存器设置为指示出现了对被禁止的操作数的访问中的任一个。
在一个实施例中,程序运行被从第一程序模块转移至第二程序模块,并且a)到b)被执行,而a)到b)包括:将第一程序模块的当前操作数状态信息保存在上下文切换保存区域中,从该上下文切换保存区域加载新的操作数状态信息作为待运行的第二程序的当前操作数状态信息;以及利用所加载的当前操作数状态信息发起该第二程序的运行。
在一个实施例中,转移运行是上下文切换操作,其中,当前操作数包括由指令识别的通用寄存器的架构化的通用寄存器值和由指令识别的浮点寄存器的架构化的浮点寄存器值中的任一个,其中,转移运行还包括将第一程序模块的所使能的当前操作数的当前操作数值和程序计数器值保存在上下文切换保存区域中;和从该上下文切换保存区域加载新的所使能的操作数的新操作数值作为待执行的第二程序的当前操作数的当前操作数值,其中,所发起的第二程序的运行使用所加载的当前操作数。
在一个实施例中,当前操作数状态信息还包括操作数使能控制,用于控制当前操作数状态信息是否能由当前程序在被使能和被禁止之间变更。
在一个实施例中,当第一操作数禁止指令被运行时,该运行使得第一操作数的当前操作数状态信息禁止第一操作数,其中,对被禁止的操作数的读取返回架构相关的缺省值;并且第二操作数使能指令被运行,该运行使得第二操作数的当前操作数状态信息使能第二操作数,其中,对被使能的操作数的读取返回之前存储至所述被使能的操作数的值。
在一个实施例中,缺省值包括架构未定义值、之前存储在架构定义缺省值寄存器中的值、全“1”、全“0”、增量值或减量值中的任一个,其中,增量值随着各个读取访问而增大,其中,减量值随着各个读取访问而减小。
在一个实施例中,第一操作数禁止指令是前缀指令,前缀指令的运行向处理器指示:第一操作数应该在被按程序次序跟随该前缀指令的下一后续指令使用之后被禁止。
在一个实施例中,对被禁止的操作数的写操作使得该被禁止的操作数被使能,其中,第二操作数使能指令是用于对第二操作数进行写操作的写指令。
对应于上面总结的方法的系统和计算机程序产品在此同样被描述和要求保护。
附加的特征和优点通过本发明的技术来实现。本发明的其它实施例和方面在此详细描述并且被看作要求保护的本发明的一部分。
附图说明
现在,将参考附图仅通过示例方式描述本发明的实施例,其中:
图1示出了一个示例性处理器系统配置;
图2示出了第一示例性处理器流水线;
图3示出了第二示例性处理器流水线;
图4A-图4C示出了一个示例性的架构化寄存器装置实现方案;
图5示出了一个示例性的架构化寄存器使能/禁止实现方案;
图6示出了从第一程序流程图的示例性转移;
图7示出了至第二程序流程图的示例性转移;以及
图8示出了使能和禁止架构化寄存器的指令的一个示例性流程图。
具体实施方式
乱序(OoO)处理器典型地包含多个运行流水线,其可以见机行事地按照与程序顺序(或者“程序次序”)所规定不同的顺序来运行指令,以便通过降低数据依赖性和将针对不同指令类型而分派的运行流水线的利用率最大化来将每周期速率(cycle rate)的平均指令最大化。指令运行的结果典型地暂时保持在有限深度的一个或多个寄存器栈的物理寄存器中。OoO处理器典型地采用寄存器重命名来避免由于按程序次序的后续指令再次使用给定的架构化寄存器而造成的指令的不必要的序列化。
如在之前提及的美国专利公开2011/0087865中描述的,在寄存器重命名操作下,被指令瞄准的各个架构化(例如逻辑的)寄存器被映射至寄存器栈中独特的物理寄存器。在当前的高性能OoO处理器中,统一主映射器被用于管理多个寄存器栈中的物理寄存器。除了存储“逻辑至物理寄存器翻译”(即在映射器项中)之外,统一主映射器还负责存储依赖性数据(即排队位置数据),其对于根据完成情况进行指令排序是重要的。
在一个基于统一主映射器的重命名方案中,期望为了被OoO处理器再次使用而尽快释放映射器项。然而,在现有技术中,统一主映射器项不能被释放,直至向由该映射器项映射的寄存器进行写操作的指令被完成。该约束被执行,是因为直至完成才存在如下可能性,即,“已经结束”的指令(即,特定运行单元(EU)成功运行了该指令)在该指令能够“完成”之前和在寄存器的架构化的、相干状态被更新之前将仍被刷出(flushed)。
在当前的实现方案中,在统一主映射器处的资源约束通常通过增加统一主映射器项的数目来进行寻址。然而,增大主映射器的尺寸具有在晶粒面积、复杂度、功耗和访问时间方面的伴随损失。
在US2011/0087865中,提供了一种用于管理数据处理系统中的一个或多个物理寄存器的集合的方法。该数据处理系统具有乱序处理指令的处理器,其中,指令参考逻辑寄存器和其中这些逻辑寄存器中的每个都被映射至该一个或多个物理寄存器的集合。响应于一个或多个指令的分派,寄存器管理单元进行逻辑寄存器查找,其确定在一个或多个寄存器映射器中是否发生了与所分派的指令关联的逻辑寄存器命中。在该方面,逻辑寄存器查找在来自包括架构化寄存器映射器、统一主映射器和中间寄存器映射器的一组映射器寄存器中的至少一个映射器寄存器内进行搜索。寄存器管理单元选择对该组映射器寄存器中的逻辑寄存器的单个命中。如果具有统一主映射器中的映射器项的指令已结束但未完成,则寄存器管理单元将该统一主映射器中的统一主映射器项的逻辑至物理寄存器重命名数据移动至中间寄存器映射器,并且该统一主映射器在该指令完成之前释放该统一主映射器项。该统一主映射器项的释放增加了可再次使用的统一主映射器项的数目。
现在参考附图,且具体是图1,示出了数据处理系统100的一个示例,该数据处理系统可以包括OoO处理器,其采用如下面参考图2描述的中间寄存器映射器。如在图1中所示,数据处理系统100具有中央处理单元(CPU)110,其可以借助图2的处理器200来实施。CPU100通过互连部112耦合至不同的其它部件。只读存储器(“ROM”)116耦合至互连部112并且包括基本输入/输出系统(“BIOS”),其控制数据处理系统100的特定基本功能。随机存取存储器(“RAM”)114、I/O适配器118和通信适配器134也耦合至系统总线112。I/O适配器118可以是小计算机系统接口(“SCSI”)适配器,其与存储设备120通信。通信适配器134将互连部112与网络140接口,这使得数据处理系统100能够与其它系统、例如远程计算机142通信。输入/输出设备也经由用户接口适配器122和显示器适配器136连接至互连部112。键盘124、跟踪球132、鼠标126和扬声器128全都经由用户接口适配器122互连至总线112。显示器138通过显示器适配器136连接至系统总线112。以该方式,数据处理系统100例如通过键盘124、跟踪球132和/或鼠标126接收输入,并且例如经由网络142、存储设备120、扬声器128和/或显示器138提供输出。在数据处理系统100中示出的硬件元件并不旨在于穷尽,而是代表一个实施例中的数据处理系统的原理性部件。
数据处理系统100的操作可以由诸如固件和/或软件的程序代码控制,其典型地包括例如为(“AIX”是IBM公司的商标)的操作系统以及一个或多个应用或者中间件程序。
现在参考图2,其示出了超标量处理器200。从存储器(例如图1的RAM114)检索指令并且将其加载到指令排序逻辑(ISL)204中,其包括水平1指令缓存(L1I-cache)206、读取-解码单元208、指令队列210和分派单元212。特别地,指令被加载到ISL204的L1I-cache206中。这些指令保留在L1I-cache206中,直至其被索要,或者被在其不被需要的情况下取代。从L1I-cache206检索指令并且由读取-解码单元208将其解码。在解码当前指令之后,当前指令被加载到指令队列210中。分派单元212将来自指令队列210的指令分派到寄存器管理单元214以及完成单元240中。完成单元240耦合至通用运行单元224和寄存器管理单元214,并且监视所发布的指令何时被完成。
当分派单元212分派当前的指令时,寄存器管理单元214的统一主映射器218将目的地逻辑寄存器号分派和映射至物理寄存器栈232a-232n内的、当前并未被分配给逻辑寄存器的物理寄存器。目的地要被重命名至物理寄存器栈232a-232n中所指定的物理寄存器。统一主映射器218将所分配的物理寄存器从存储在统一主映射器218内的空闲物理寄存器的列表219中移除。所有后来的对目的地逻辑寄存器的参考将指向相同的物理寄存器,直至读取-解码单元208解码了对相同的物理寄存器进行写操作的另一指令。然后,统一主映射器218将逻辑寄存器更名至选自空闲列表219的不同的物理位置,并且该映射器被更新为输入新的逻辑至物理寄存器映射器数据。当该逻辑至物理寄存器映射器数据不再被需要时,这些旧映射的物理寄存器被返回至空闲列表219。如果空闲物理寄存器列表219不再具有足够的物理寄存器,则分派单元212暂缓指令分派,直至所需的物理寄存器变得可用。
在寄存器管理单元214映射了当前指令之后,发布队列222向包括运行单元(EU)230a-230n的通用运行引擎224发布当前指令。运行单元230a-230n是不同类型的,诸如浮点(FP)、不动点(FX)和加载/存储(LS)。通用运行引擎224经由数据缓存234与数据存储器(例如图1的RAM114、ROM116)交换数据。此外,发布队列222可以包含FP类型、FX类型和LS类型的指令。然而,应理解的是任意数目和类型的指令都可以被使用。在运行期间,EU230a-230n从寄存器栈232a-232n中的物理位置获得源操作数值,并且将结果数据(如果有的话)存储在寄存器栈232a-232n和/或数据缓存234中。
还参考图2,寄存器管理单元214包括:(i)映射器簇215,其包括架构化寄存器映射器216、统一主映射器218、中间寄存器映射器220,以及(ii)发布队列222。映射器簇215追踪分配给不同指令的逻辑寄存器的物理寄存器。在一个示例性实施例中,架构化寄存器映射器216具有每种类型16个逻辑(即,非物理映射的)寄存器,其存储逻辑至物理寄存器映射器数据的最后的、有效的(即检验过的)状态。然而,应认识到的是,不同的处理器架构可以具有比在该示例性实施例中所描述的更多或更少的逻辑寄存器。架构化寄存器映射器216包括指针列表,其识别描述被检验过的状态的物理寄存器。物理寄存器栈232a-232n将典型地包含比架构化寄存器映射器216中的项数更多的寄存器。应注意到的是,在重命名映射方案中使用的物理和逻辑寄存器的特定数目可以变化。
相反,统一主映射器218典型地比架构化寄存器映射器216更大(典型地包含直至20项)。统一主映射器218促进对逻辑至物理寄存器映射的瞬时状态的追踪。术语“瞬时的”指的是如下事实,即,统一主映射器218在指令被乱序运行时保持追踪试验性的逻辑至物理寄存器映射数据。OoO运行典型地在如下情况下发生,即,当存在与流水线中的较新指令相比将需要更久(即,利用更多时钟周期)来运行的较旧指令时。然而,如果OoO指令的运行结果出于特定原因(例如分支命中失败预测)而需要该OoO指令被刷出,则处理器可以恢复到由架构化寄存器映射器216维持的检验过的状态,并且从最后的有效的状态开始重新运行。
统一主映射器218在物理寄存器栈232a-232n中的物理寄存器与架构化寄存器映射器216之间建立关联。量化的术语“统一”指的是如下事实,即,统一主映射器218消除了针对寄存器栈232(例如通用寄存器(GPR))、浮点寄存器(FPR)、不动点寄存器(FXP)、异常寄存器(XER)、条件寄存器(CR)等中的每个按定制方式设计专用映射器的复杂性。
除了创建OoO指令的瞬时的、逻辑至物理寄存器映射器项之外,统一主映射器218还保持追踪对于指令排序重要的依赖性数据(即,取决于流水线中较旧指令的结束的指令)。常规地,一旦统一主映射器218输入了指令的逻辑至物理寄存器翻译,指令传递给发布队列222。发布队列222在该指令被发布给运行单元230以运行之前作为守门员。作为通用规则,如果指令取决于较旧指令结束,则其不能离开发布队列222。由于该原因,统一主映射器218通过针对被映射的每个指令存储发布队列位置数据来追踪依赖性数据。一旦指令被通用运行引擎224运行,该指令就被称作“结束了”并且从发布队列222引退。
寄存器管理单元214可以在单个周期中从分派单元212接收多个指令,以便维持填充的、单个的发布流水线。指令的分派受统一主映射器218中可用项的数目限制。在缺少中间寄存器映射器220的常规映射器系统中,如果统一主映射器218具有总共20个映射器项,则存在最多20个可以立即处于未提交(in flight)(即,未检验)的指令。因此,常规映射器系统的分派单元212可以可想而知地与实际上可以从统一主映射器218引退的相比“分派”更多指令。在统一主映射器218处的该瓶颈的原因是出自以下事实,即,常规地,指令的映射器项不能从统一主映射器218引退,直至该指令“被完成”(即,所有较旧指令“结束了”运行)。
根据一个实施例,中间寄存器映射器220用作非时间关键的寄存器,对于其,来自统一主映射器218的“结束了”但“未完成”的指令可以早于该指令的可能完成而引退(即,从统一主映射器218移除)。一旦指令“完成”,完成单元240就将该完成通知给中间寄存器映射器220。中间寄存器映射器220的映射器项然后可以通过取代现在存储在架构化寄存器映射器216中的对应项来更新该架构化寄存器映射器216的架构化的相干状态。
当分派单元212分派指令时,寄存器管理单元214对于架构化寄存器映射器216、统一主映射器218和中间寄存器映射器220中的映射来评估与该指令关联的逻辑寄存器号,以确定在架构化寄存器映射器216、统一主映射器218和/或中间寄存器映射器220中是否呈现匹配(通常称作“命中”)。该评估被称作逻辑寄存器查找。当在多于一个寄存器映射器(即架构化寄存器映射器216、统一主映射器218和/或中间寄存器映射器220)上同时进行查找时,查找被称作并行的逻辑寄存器查找。
更新特定目的地逻辑寄存器的值的各个指令均被分派有新的物理寄存器。只要该逻辑寄存器的新实例被任意其它指令用作源,就必须使用相同的物理寄存器。因为可以存在一个逻辑寄存器的多个实例,所以也可以存在与该逻辑寄存器对应的多个物理寄存器。寄存器管理单元214执行任务:(i)分析哪个物理寄存器对应于被特定指令使用的逻辑寄存器;(ii)以对合适的物理寄存器的参考来替代对该逻辑寄存器的参考(即,寄存器重命名);以及(iii)只要任意逻辑寄存器的新实例被创建,就分派新的物理寄存器(即,物理寄存器分派)。
起初,在任意指令被分派之前,统一主映射器218将不接收命中/匹配,因为不存在当前处于未提交的指令。在这样的情况下,统一主映射器218创建映射项。当随后的指令被分派时,如果对于相同的逻辑寄存器号的逻辑寄存器匹配在架构化寄存器映射器216和统一主映射器218中都未找到,那么给出优先级以选择统一主映射器218的逻辑至物理寄存器映射,因为存在如下可能性:可能存在当前运行OoO的指令(即,映射处于瞬态中)。
在统一主映射器218在其映射器内找到命中/匹配之后,指令传递至发布队列222,以等待用于由运行单元230之一发布运行。在通用运行引擎224运行和“结束”指令之后,但是在该指令“完成”之前,寄存器管理单元214将当前在统一主映射器218中找到的映射项从统一主映射器218引退,并且将该映射项移至中间寄存器映射器220。从而,使得统一主映射器218中的一个时隙可用于映射随后被分派的指令。与统一主映射器218不同,中间寄存器映射器220并不存储相关性数据。因此,转移至中间寄存器映射器220的映射并不取决于(并且并不追踪)与其源映射有关的指令的队列位置。这是因为发布队列222将“结束但未完成的”指令在成功运行之后引退。相反,在缺少中间寄存器映射器的常规重命名映射方案中,统一主映射器继续存储源重命名项,直至该指令完成。在本实施例中,中间寄存器映射器220可以被定位为距其它关键路径元件更远,因为相比于统一主映射器218,它的操作在时间上不是关键的。
一旦统一主映射器218将映射项从统一主映射器218引退并且移至中间寄存器映射器220,映射器簇214就在随后分派的指令上执行并行逻辑寄存器查找,以确定该随后的指令是否包含在架构化寄存器映射器216、统一主映射器218和中间寄存器映射器220中的任一个中的命中/匹配。如果在架构化寄存器映射器216、统一主映射器218和中间寄存器映射器220中的至少两个中找到了对相同的目的地逻辑寄存器号的命中/匹配,则发布队列222中的复用器223通过选择统一主映射器218的逻辑至物理寄存器映射来授予比中间寄存器映射器220的优先级高的优先级,而中间寄存器映射器220又具有比架构化寄存器映射器216高的选择优先级。
在US2011/007865中提出的用以确定选择优先级的机制被讨论如下。根据一个实施例,是一个用于确定在运行指令中使用哪些映射数据值的示例性方法的高级别逻辑流程图。在一个实施例中,分派单元212将一个或多个指令分派给寄存器管理单元214。响应于该指令的分派,寄存器管理单元214经由并行逻辑寄存器查找确定是否发生了对与每个所分派指令关联的逻辑寄存器的“命中”(除了对架构化寄存器映射器216的“命中”以外)。在该方面,应理解的是,架构化寄存器映射器216被假设为总是具有命中/匹配,因为架构化寄存器映射器216存储逻辑至物理寄存器映射器数据的检验过的状态。如果寄存器管理单元214并未检测到在统一主映射器218和/或中间寄存器映射器220中的匹配/命中,则复用器223从架构化寄存器映射器216中选择逻辑至物理寄存器重命名数据。如果寄存器管理单元214检测到在统一主映射器218和/或中间寄存器映射器220中的匹配/命中,则寄存器管理单元214在决策框中确定是否在统一主映射器218和中间寄存器映射器220两者中发生了匹配/命中。如果在两个映射器218和220中都确定了命中/匹配,则寄存器管理单元214确定在统一主映射器218中的映射项是否比中间寄存器映射器220中的映射项“更年轻”(即该映射项的创建是更新近的)。如果统一主映射器218中的映射项比中间寄存器映射器220中的映射项年轻,则复用器223从统一主映射器218中选择逻辑至物理寄存器重命名数据。如果统一主映射器218中的映射项并不比中间寄存器映射器220中的映射项年轻,则复用器223从中间寄存器映射器220中选择逻辑至物理寄存器重命名数据。
如果并未在统一主映射器218和中间寄存器映射器220两者中发生匹配/命中,则确定是否发生了对统一主映射器218的单独匹配/命中。如果发生了对统一主映射器218的单独命中,则复用器223从统一主映射器218选择逻辑至物理寄存器重命名数据。然而,如果并未在统一主映射器218处发生命中/匹配(因此,命中/匹配仅在中间寄存器映射器220处发生),则复用器223从中间寄存器映射器220选择逻辑至物理寄存器重命名数据(框320)。通用运行引擎224将逻辑寄存器查找的输出数据用于运行。
在一个示例实施例中,分派单元212将一个或多个指令分派给寄存器管理单元214。统一主映射器创建新的、逻辑至物理寄存器映射项。发布队列222维持所分派的指令的发布队列位置数据,其利用经由逻辑寄存器查找来选择的映射项(在图3中描述)。通用运行引擎224检测运行中的指令是否有结束的(即,U130中的一个结束了指令的运行)。如果所发布的指令并未结束,则该方法等待指令结束。响应于通用运行引擎224检测到指令结束,统一主映射器218将逻辑至物理寄存器重命名数据从统一主映射器218移至中间寄存器映射器220。统一主映射器218引退与结束了的指令关联的统一的主映射项。完成单元240确定结束了的指令是否已完成。如果结束了的指令并未完成,则完成单元240继续等待,直至其检测到通用运行单元224结束了所有较旧指令。然而,如果完成单元240检测到结束了的指令已完成,则中间寄存器映射器220更新架构化寄存器映射器216的架构化的相干状态,并且该中间寄存器映射器220引退其映射项。
通过引用结合于此的、Gschwind发明的、于2001年2月13日提交的美国专利6,189,088“Forwarding stored data fetched for out-of-order load/read operation toover-taken operation read-accessing same memory location(将提取用于乱序加载/读取操作的存储数据转发到接管操作读取访问的相同存储器位置)”描述了一种示例性的乱序(OoO)处理器。
根据Gschwind,图3是常规计算机处理系统(例如包括超标量处理器)的功能框图,该常规计算机处理系统支持存储器操作的动态重排序以及干扰测试和数据旁路序列的基于硬件的实现。即,图3的系统包括对于利用上面列出的机制支持指令重排序所需的硬件资源,但是并不包括对于在按顺序加载操作之前支持乱序加载操作的运行所需的硬件资源。该系统包括:存储器子系统301;数据缓存302;指令缓存304;和处理器单元300。处理器单元500包括:指令队列303;用于执行加载和存储操作的数个存储器单元(MU)305;用于执行整数、逻辑和浮点运算的数个功能单元(FU)307;分支单元(BU)309;寄存器栈311;寄存器映射表320;空闲寄存器队列322;分派表324;引退队列326;和按顺序映射表328。
在图3中示出的处理器中,指令被在分支单元309控制下从指令缓存304(或者当指令并不在指令缓存304中时从存储器子系统301)读取,置于指令队列303中以及随后从指令队列303分派。由指令用来规定操作数的寄存器名称被根据寄存器映射表320的内容来重命名,该寄存器映射表规定了从架构化的寄存器名称至物理寄存器的当前映射。被指令用来规定用于结果的目的地的架构化寄存器名称是从空闲寄存器队列322提取的所分配的物理寄存器,该空闲寄存器队列包含当前并未被处理器使用的物理寄存器的名称。寄存器映射表320随着物理寄存器的分配而更新为由指令规定的架构化目的地寄存器名称。所有其寄存器都被重命名过的指令被放置在分派表324中。指令还按照程序次序放置在引退队列326中,包括其地址以及其物理和架构化寄存器名称。指令在待由这种指令使用的所有资源都可用(物理寄存器被分配了期望的操作数,并且功能单元空闲)时被从分派表324分派。由指令使用的操作数被从寄存器栈311读取,该寄存器栈典型地包括通用寄存器(GPR)、浮点寄存器(FPR)和条件寄存器(CR)。指令在对应的存储器单元305、功能单元307或分支单元309中被(可能乱序地)运行。在运行完成时,来自指令的结果被放置在寄存器栈311中。分派表324中的、等待由正完成运行的指令设置的物理寄存器的指令被告知。引退队列326被告知了正完成运行的指令,包括它们是否抛出异常(raise an exception)。完成的指令被引退队列326按程序次序(从队列头开始)移除。在引退时间上,如果指令并未抛出异常,则按顺序映射表328被更新,从而引退这样的架构化寄存器名称,其指向寄存器栈311中的包含来自指令的结果的物理寄存器;来自按顺序映射表328的之前的寄存器名称被返回至空闲寄存器队列322。
另一方面,如果指令抛出了异常,则程序控制被设定至正从引退队列326引退的指令的地址。此外,引退队列326被清除(刷出),因此取消所有未引退的指令。此外,寄存器映射表320被设定为按顺序映射表328的内容,并且不在按顺序映射表328中的任意寄存器都被添加至空闲寄存器队列322。
支持相对于之前的加载指令(如图3所示)重新排序加载指令的常规超标量处理器可以如下来增加:
1.一种机制,用于标记相对于之前的加载指令被乱序发布的加载指令;
2.一种机制,用于在指令被读取时为其编号,并且确定指令在指令流中较早还是稍后发生。一个替选机制可以被替换,其用于相对于另一指令确定指令在指令流中较早还是稍后发生。
3.一种机制,用于存储与已被乱序运行的加载操作有关的信息,包括其在程序次序中的地址、其访问的地址、以及对于包含所加载数据的最大保证原子单元而读取的数据值;
4.一种机制,用于当加载指令被相对于一个或多个乱序加载指令按顺序执行时执行干扰测试,并且用于当多个指令干扰加载操作时执行优先级编码;
5.一种机制,用于绕过与造成干扰的加载操作有关的数据;以及
6.一种机制,用于在乱序状态按照程序顺序从引退队列326引退至寄存器栈311时删除在(3)中生成的记录。
由Gschwind公开的机制与在图3中示出的常规乱序处理器中可用的机制联合使用如下。每个指令在进入指令队列303时被编上指令号码。一个加载指令可以与之前的加载指令相比更早地从分派表324被分派。这样的加载指令下面称作“乱序”加载操作。在该情况下,引退队列326中与该加载指令对应的项被标为乱序加载。
优选地以两个计数器,即“加载-读取计数器”和“加载-分派计数器”来检测乱序加载操作从分派表324至存储器单元305的用于运行的分派。加载-读取计数器在将加载操作添加至分派表324时增加。加载-分派计数器在加载操作被发往存储器单元305以用于运行时增加。加载-读取计数器的当前内容在加载指令添加至分派表324时被附接至该加载指令。当加载指令被从分派表324分派至存储器单元305以用于运行时,如果附接至分派表324中的加载指令的值不同于当时加载-分派计数器的内容,则该加载指令被识别为乱序加载操作。请注意,在两个计数器值之间的差对应于这样的加载操作的精确数目,加载指令关于这些加载操作被乱序发布。如果加载次序表中用于添加项的空间可用,则乱序加载指令仅被分派至存储器单元305。
加载次序表是单个的表,其被所有存储器单元305同时访问(即,仅单个逻辑副本被维持,尽管可以维持多个物理副本来加速处理)。请注意,如果使用多个物理副本,则这多个副本的逻辑内容必须总是将相同的状态反映给所有存储器单元305。
正被运行的指令的指令号码和指令是否被推测性地运行的事实针对每个所发布的加载操作被传达给存储器单元305。
由处理器实施的指令集架构(ISA)典型地基于ISA的指令的寄存器区来限定可以访问的、固定数目的架构化通用寄存器。在乱序运行处理器中,分配重命名处理器以保持指令的推测性运行的寄存器结果。当对应的推测性指令运行被“做了”或“完成了”时,重命名寄存器的值被当做架构化寄存器的值。因此,在任意时间点上,并且如由在处理器上运行的程序所观察那样,在一个寄存器重命名实施例中,存在比架构化寄存器多的重命名寄存器。
在一个重命名寄存器的实施例中,独立的寄存器被分配给架构化寄存器和重命名寄存器。在另一实施例中,架构化寄存器和重命名寄存器是融合的寄存器。融合的寄存器包括用于指示该融合的寄存器的状态的标签,其中,在一个状态中,该融合的寄存器是重命名寄存器,并且在另一状态中,该融合的寄存器是架构化寄存器。
在一个融合的寄存器实施例中,作为初始化的一部分(例如,在上下文切换期间,或者当初始化一部分时),头n个物理寄存器被分配为架构化寄存器,其中,n是由指令集架构(ISA)声明的寄存器数目。这些寄存器被设置为处于架构寄存器(AR)状态中;重命名物理寄存器采取可用的状态。当所发布的指令包括目的地寄存器时,需要新的重命名缓冲器。出于该原因,一个物理寄存器被从可用寄存器池中选出并且分派给目的地寄存器。从而,所选的寄存器状态被设置为重命名缓冲器无效状态(NV),并且其有效位被重置。在相关的指令结束运行之后,所产生的结果被写入所选寄存器,其有效位被设定,并且其状态改变为重命名缓冲器(RB),是有效的。稍后,当相关的指令完成时,所分派的重命名缓冲器将被声明为是架构寄存器,其实现在刚完成的指令中规定的目的地寄存器。其状态然后改变为架构寄存器状态(AR)以反映这一点。
虽然寄存器几乎是对性能的通用解决方案,但它们具有缺陷。计算机程序的不同部分都是用其自己的暂时值,并且因此为了这些寄存器的使用而竞争。因为良好地理解运行时的程序流的性质是很困难的,对于开发者来说没有简单途径来提前知晓他们应使用多少寄存器,以及应为程序的其它部分搁置多少。通常这些类型的考虑被忽视,并且开发者和(更可能地)它们使用的编译器试图使用对于它们可见的所有寄存器。在处理器以非常少的寄存器开始的情况下,这也是唯一合理的动作过程。
寄存器窗旨在解决该问题。因为程序的每个部分都想要用于其自己使用的寄存器,所以对于程序的不同部分提供了数个寄存器集。如果这些寄存器可见,则将有更多寄存器被竞争,即,它们需要被变得不可见。
使得这些寄存器不可见可以被有效地实施;CPU在过程调用期间识别从程序的一个部分到另一个部分的移动。其由小数量的指令之一完成(前言),并且以类似的小集合之一结束(结语)。在Berkeley设计中,这些调用将使得寄存器的新集合在那时被“换入”,或者当调用结束时被标为“死的”(或“可循环使用”)。
诸如PowerPC的处理器将状态保存至被预定和被保留的机器寄存器。如果在处理器已经将当前窗的内容用于处理另一异常时发生异常,则处理器将恰在该情况下生成双重故障。
在一个示例性RISC实施例中,总共64个寄存器中仅8个寄存器对于程序可用。寄存器的完整集合被已知为寄存器栈,并且8个的任意特定集合被做为窗。该栈允许直至8个过程调用具有其自己的寄存器集。只要程序并不引起长于8个调用深度的链,寄存器就永不用被溢出,即,保存至主存储器或缓存,这与寄存器访问相比是缓慢的过程。对于许多程序来说,6个的链与程序将行进的一样深。
通过比较,其它架构提供分别到四个8寄存器集合中的同时可见性。这些8寄存器集合分别被“加窗”。8个寄存器(i0到i7)对于当前的过程等级形成输入寄存器。8个寄存器(L0到L7)对于当前的过程等级是本地的(local),并且8个寄存器(o0到o7)是从当前的过程等级至下一被调用等级的输出。当一个过程被调用时,寄存器窗移位16个寄存器,隐藏旧的输入寄存器和旧的本地寄存器,并且使旧的输出寄存器成为新的输入寄存器。公用寄存器(旧的输出寄存器和新的输入寄存器)被用于参数传递。最后,8个寄存器(g0到g7)对于所有过程等级来说是全局可见的。
改进的设计将窗分派为尺寸可变,这有助于在对调用需要少于8个寄存器的普通情况中使用。其也将寄存器分离成有64个寄存器的全局集合和用于窗的附加的128个寄存器。
寄存器窗还提供简单的升级路径。因为附加的寄存器对于程序可见,所以可以随时添加附加的窗。例如,面向对象的编程的使用通常引起较大数目的“较小”调用,其例如可以通过将窗从8个增加到16个来适应。最终结果是较少缓慢的寄存器窗溢出和填充操作,因为这些寄存器窗较少溢出。
指令集架构(ISA)处理器乱序指令实现方案可以直接或者通过使用由硬件指令解码单元调用的固件来运行架构化指令。然而,许多处理器将架构化指令“分裂”为指向处理器内的硬件单元的微操作。此外,复杂的指令集计算机(CISC)架构处理器可以将CISC指令翻译为精简指令集计算机(RISC)架构指令。为了描述本发明的方面,描述ISA机器指令,并且可以在内部将内部操作(iop)用作ISA机器指令,或者用作较小的单元(微操作)或者微代码或者以在现有技术中公知的任意方式,并且在此将仍被称作机器指令。ISA的机器指令具有如ISA限定那样的格式和功能,一旦ISA机器指令被取回和解码,则其可以被变换为iop,用于在处理器内使用。
在一个实施例中,指令集架构(ISA)具有指示操作数“活性”的能力。操作数“活性”可以包括例如对于操作数值将不再被使用的指示、对于还将作出多少读访问、写访问或两者的指示、对于操作数在预定时段(指令的数目、经过的时间等)中将不被访问的指示、对于执行对操作数的访问有多关键的指示(低、中、高)等。在存储器缓存层次结构中,操作数活性可以指示存储操作是对线路的最后存储,对缓存线的存储不必再维持在主存储器中(便签本)。对于操作数值将被最后一次使用的指示保证了对于管理软错误恢复、多等级寄存器栈、主存储器缓存和寄存器重命名逻辑的改进的能力。
在实施例中,提供了编译器,其追踪信息以将信息提供给识别操作数活性(例如,什么值将不再被使用)的处理器。在一个实施例中,编译器将用于指示活性信息的活性指令插入给运行编译过的指令的处理器。
在一个实施例中,执行上下文切换的能力包括保存和恢复与活性有关的信息,包括什么值对于特定的软件模块未被使用。软件模块可以例如是子例程、线程、进程或者系统中的分区(映像)。
当程序A被中断以运行程序B时,执行上下文切换。架构化的设备的上下文(当前状态)(包括寄存器值、条件码值和例如指向下一指令地址(NI)的程序计数值)对于程序A被保存并且用于程序B的上下文被加载。当返回程序A时,所保存的程序A上下文被加载并且程序A在所保存的NI开始运行。
在一个实施例中,活动的程序可以将指定架构化设备值作为“最后使用”值。例如,程序知道寄存器3中的值将不再被使用,于是其运行这样的指令,该指令将ISA的架构化的64个通用寄存器的寄存器3禁止。处理器然后不再需要将寄存器3的状态保持为当前的,并且可以规定待使用的缺省值。当处理器执行上下文切换时,寄存器3不需要被保存或恢复。在一个实施例中,保存这样的信息,其指示当上下文被恢复并且程序被重激活时寄存器3是不活动的。
在一个实施例中,当瞬时故障在指令运行期间发生时,“寄存器活性”信息可以被用于抑制错误恢复和/或错误告知。如果进程、分区或系统由于不可恢复的错误而停止,则错误恢复将劣化性能,错误告知会导致机器停歇。
在一个实施例中,对“死值”(被禁止的寄存器)的访问由这样的程序提供,该程序提供与操作数有关的“最后使用”信息(其中操作数值将不再被程序需要)。最后使用信息可以通过不必保留未使用的值或者通过抑制对最后使用的操作数的告知而使得系统能够优化操作。然而,“最后使用”指示并不保证被指示为最后使用的值将不再被读取-访问。具体地,在码模块边界上,值通常在进入新模块时被保存,并且在从一个模块退出并返回之前的模块时被恢复。
示例:
●在函数之间的转移中,被调用者保存的(callee saved)(“非易失性的”)在函数进入时通过所调用的函数被保存,并且在函数退出时被恢复
●当从应用(进程或线程)转移到操作系统核心(或超级监视者(hypervisor))时,所有寄存器被保存,并且当控制转移回应用时被恢复
●当从系统分区(例如在该分区中的操作系统)转移至虚拟机监视器(VMM)或超级监视者时,所有寄存器被保存,并且当控制转移回应用时被恢复
●当操作系统将运行从一个线程切换到另一线程时,与一个线程关联的所有寄存器被存储,并且所存储的与所述另一线程关联的寄存器被加载
●当超级监视者或虚拟机监视器(VMM)系统将运行从一个分区切换到另一分区时,与一个分区关联的所有寄存器被存储,并且所存储的与所述另一分区关联的寄存器被加载
●在系统z下运行CALL PRORAM时,状态被保存
●因为在从一个第一模块切换到另一模块期间,该另一模块并不知道第一模块可能正在使用何种寄存器,所以该模块将保存和恢复所有寄存器
●在这些访问中,当瞬态故障被登记以为了模块状态的未来恢复而保存该模块状态时,未使用的状态被访问
●为了避免错误恢复和错误告知,优选抑制错误恢复和错误告知中的至少一个
●在这种情况下抑制错误告知是关键的,以便减少在处理这些假错误时的性能劣化。
在一个实施例中,提供了用于对每个寄存器追踪该寄存器是否已被指示为不再有活性(即,最后使用已被指示)的手段。
在一个实施例中,提供了活性信息寄存器(LIR)特殊目的寄存器(SPR)。活性寄存器优选被维持在硬件闭锁部(latch)中,并且对于每个寄存器包含指示寄存器是否有活性的一个比特(位)。LIR值在一个实施例中是程序的上下文,并且在上下文切换期间被保存和恢复。在另一实施例中,LIR值包括识别与该LIR关联的上下文或线程的识别器。
参考图4A,处理器可以具有物理寄存器池402,其被动态地分配为重命名寄存器404以用于推测性运行,和分派为ISA架构化寄存器403。动态分派由架构化寄存器映射器405执行,其中,重命名寄存器在完成对应的乱序(OoO)指令运行时成为架构化寄存器。
ISA的架构化机器指令400包括例如指示待通过运行该指令来执行的功能的操作码(OP1)、中间区(I1)、用于在由寄存器区规定的架构化寄存器位置中定位源操作数的源寄存器区(RA1)、待在该指令的运行中使用的源操作数、和用于定位用来存储运行该指令的结果操作数的架构化寄存器的目标寄存器区(RT1)。
运行单元401接收由处理器生成的指令400(或者内部操作“微操作”(iop)),并且确定其需要在架构化寄存器位置(RA1)或(RA2)访问操作数。运行单元401将寄存器区值发送给架构化寄存器映射器405,其确定哪个物理寄存器与待访问的架构化寄存器关联,并且将该访问指向该架构化寄存器。
参考图4B,引入了架构化寄存器使能/禁止寄存器(AREDR)410。AREDR410确定(由运行单元401)对架构化寄存器的访问是否被允许。在一个实施例中,如果架构化寄存器访问被禁止,则AREDR410引起响应,而不是返回之前存储的架构寄存器操作数值或者存储架构寄存器操作数。响应可以包括例如返回缺省值411,返回全“1”或全“0”,返回增量值,返回减量值,抑制错误或者返回程序异常事件信号。
参考图4C,在上下文切换期间(或者响应于正被运行的调用指令),保持在AREDR410中的架构化寄存器的使能状态在例如主存储器421的保存区域420中被保存和恢复。在一个实施例中,随着其他状态信息,诸如包括当前程序计数器值和当前条件码(标志)值的程序状态字(PSW),架构化存储器的当前值也被存储和恢复。
参考图5,AREDR410在一个实施例中包括使能寄存器501,其具有与各个架构化寄存器对应的位,其中,为“0”的位指示寄存器被禁止,而为“1”的位指示寄存器被使能。使能寄存器501由使能设置/重置逻辑500来设置或重置。在一个实施例中,最后使用指令规定架构化寄存器的最后使用,当被执行时,使得对应的使能寄存器501的位被设置为“0”。在一个实施例中,规定对架构化寄存器的写操作的指令使得对应的使能寄存器501的位被设置为“1”。在一个实施例中,使能寄存器501可以通过由操作系统(OS)使用的指令被读或写。
当指令请求访问架构化寄存器时,架构化寄存器地址507通过比较器504与使能寄存器501相比较,以确定该架构化寄存器是被使能505还是被禁止506。
在一个实施例中,提供了屏蔽寄存器503。该屏蔽寄存器503被屏蔽设置/重置逻辑502响应于正被运行的操作系统指令而设置或重置。屏蔽寄存器503的各个位对应于架构化寄存器,并且控制程序是否能使能对应的寄存器。屏蔽寄存器503通过比较器与使能寄存器501相比较,用于确定架构化寄存器地址507是被使能505还是被禁止506。
架构化寄存器使能逻辑505允许使用架构化寄存器。架构化寄存器禁止动作逻辑505引起与如上面描述那样使用该架构化寄存器不同的动作。
在一个实施例中,屏蔽寄存器503的状态在上下文切换期间随着使能寄存器501的状态被保存和恢复。
在另一实施例中,寄存器活性被隐晦地维持,例如作为寄存器重命名逻辑的状态的部分,并且与线程或程序关联。例如在寄存器重命名表中。
在一个实施例中,从诸如寄存器重命名表的状态管理结构中提取活性信息值,用于执行上下文切换。通过访问映射信息,对于每个架构化寄存器做出了该寄存器是否联接于物理寄存器并且有活性的确定,在有活性情况下,“1”将被插入存储器中的用于该寄存器的活性信息值位置中以保持上下文状态(例如在活性信息寄存器(LIR))中。在另一方面,当架构化寄存器并不被指示为有活性,并且并不联接于物理寄存器时,“0”被插入在对应位置处。根据一个实施例,即使不是LIR寄存器被明确维持,架构仍被规定为包含LIR寄存器,并且至所述LIR寄存器的读操作将使得活性指示值被作为对该寄存器的读操作的结果而生成和返回。本领域技术人员将认识到与这里描述的不同的其它编码也可以与包含于此的教导结合使用。
活性信息在一个实施例中与可靠性动作结合使用。数据访问可以结合R-unit(R单位)函数来执行。R-unit优选包括寄存器活性指示器寄存器。当遇到指示瞬时故障的错误情况时,确定该错误情况是否对应于有活性或无活性的寄存器(或者其它数据存储)中的错误。当该数据错误被针对有活性值而指示时,执行可靠性动作,其中,可靠性动作优选是错误告知和错误校正中的一个。当数据错误被针对无活性寄存器而指示时,可靠性动作可以被抑制。抑制错误校正将节省为了校正不需要的值而损失的能量并且改进性能。抑制针对无活性值的错误告知将增大对于不可恢复错误的系统可靠性,因为架构状态的瞬时变坏通常强制在进程、分区和系统之一中终止运行。在一个实施例中,当错误被指示为不需要可靠性动作时,仍记录“记日志”告知,以便检测劣化的系统和发起服务动作,或者前摄性地(proactively)将频繁失效的部件从服务中取出。
在用于无活性寄存器访问抑制错误的一个实施例中,当错误被指示为不要求可靠性动作时,仍记录“记日志”告知。该日志可以被用于检测劣化的系统和发起服务动作,或者前摄性地将频繁失效的部件从服务中取出。
根据一个实施例,在至少一个情景中,访问无活性寄存器的情况可以对应于编程错误。同样地,微处理器实现方案可以被适配为抛出告知事件(例如,至调试器、操作系统、超级监视者或其它监视程序之一的异常)以指示可能的编程错误。
并非对空闲(被禁止的)寄存器的所有参考都是编程错误的结果。程序可以被在它们并不知道寄存器是否被使用时要求保存寄存器,并且可以行进以保存至存储器(“溢出”)和稍后重新加载(“填充”)这些寄存器(例如,在上下文切换或者函数调用/返回期间)。在一个实施例中,提供了配置寄存器和用于无视可能异常的模式切换中的一个,并且当访问空闲的架构化寄存器时强制返回缺省值。在本发明的另一方面,控制位(例如在架构化程序状态字(PSW)、架构化控制寄存器(CR)或者架构化机器状态寄存器(MSR)状态寄存器中,或者在实现方案控制的HID位中)被设置为由应用程序选择行为。在另一方面,顺序指令的前缀提供指示发生了未使用的参考的能力。在又另一方面,带有良好限定的操作码的指令能够访问因此被放开和释放的寄存器。
在另一实施例中,提供了告知抛出和无告知抛出指令,其抛出或抑制与无活性的、被禁止的操作数对应的告知。编译器生成这样的指令,该指令并不抛出编程错误指示事件(例如所述异常),而是在进行上下文切换时(或被调用者保存溢出/填充寄存器序列)时返回缺省值。根据一个方面,编译器可以将所描述的手段(设置控制,使用前缀或者使用特殊的操作码)之一用于执行键操作,其可以在制作上下文/获得上下文操作期间或者在设置跳跃/长跳跃操作期间参考未使用的寄存器,例如在函数前言和结语中针对被调用者保存的(非易失性的)寄存器的寄存器保存和恢复。在另一实施例中,编译器库或函数也被可选地适配于发射和/或使用和/或运行代码,以保存寄存器活性信息的摘要(“STORELIVENESS”),并且当寄存器被重新加载时恢复这种信息(“LOAD LIVENESS”)。
在其它方面中,操作系统和超级监视者将类似的指令序列用于在上下文切换中保存和恢复上下文。在这种使用的一个方面中,操作系统和超级监视者被预期并无编程错误,并且从不抛出编程错误告知,而是总是替代缺省值。这对诸如zOS和AIX的已知的高可靠性操作系统来说是所希望的。在其中操作系统的制作者预期在操作系统中会有许多编程错误的另一方面,他会使用与应用程序类似的方法,其中OS和超级监视着被适配为指示编程错误(例如使用告知方法),并且使用适配于对诸如上下文切换的操作不提出编程错误告知的指令,其被已知为参考未使用的/空闲的/释放的寄存器。这些方法对通常在名称“Microsoft Windows”下已知的操作系统的制作者来说是所希望的。同样,诸如zOS和AIX的每个稳定的操作系统的制作者都选择在其长质量保证周期(lengthy quality assurancecycle)期间使能告知,以在调试中起辅助作用,并且保留zOS和AIX操作系统中已知的工业领先的稳定性。在另一方面,例如在Linux操作系统中可以切换模式,其中更稳定基础的Linux操作系统可以调用待在OS环境中运行的外部模块和驱动器,操作系统可以切换至这样的模式:编程错误告知在运行所述驱动器或模块期间被使能。
在一个实施例中,保存和恢复活性信息是通过读取和写入活性指示寄存器来提供的。根据一个实施例,可以提供从(或至)SPR(特殊目的寄存器)指令或CONTROL指令的移动。根据一个实施例,系统使用从活性指令的移动,以将活性信息保存在存储器中(或在寄存器中)。根据另一实施例,当至监视者模式进行上下文切换时,活性信息被从活性指示寄存器复制到状态保存/恢复寄存器(SRR)中。在从上下文监视者模式进行上下文切换时(rfi/hrfi),活性信息可以被从状态保存/恢复寄存器(SPR)复制到活性指示寄存器。
在用于保存活性信息的一个实施例中,并无明确的活性指示寄存器被维持。替代地,包括了用于从隐晦状态获得信息和当从活性指示器指令进行移动时构造活性指示寄存器的逻辑。
优选地,对于哪些架构化寄存器被使能或未被使能的指示被保存至用于正被中断的程序(X)的保存区域,并且对于哪些架构化寄存器被使能或未被使能的指示是从用于在上下文切换期间被读取的新程序(Y)的保存区域获得的,其中,该保存区域可以被实现为对操作系统(OS)可用的架构化寄存器位置或者主存储器位置。该指示可以是其中每个位都对应于架构化寄存器项的高位字段,或者范围,或者否则指示被使能的/活动的架构化寄存器。在一个实施例中,仅由OS确定的子集可以被使能。在一个实施例中,多线程处理器的每个线程都具有其自己的被使能的、被禁止的指示器的集合。在另一实施例中,可以通过对活动的程序或线程可用的机器指令明确设置该活动的程序或线程的活动的指示器的值。
在一个实施例中,可以完全通过硬件执行上下文切换。ISA指定必须被保存或恢复的架构化状态信息。保存区域对于硬件被指定。每当上下文切换被调用时,当前状态被保存在保存区域中,并且新状态被从该保存区域中获得。在一个示例中,存在架构上被指定的保存区域,或者所保存区域的等级,并且程序在所指定的等级上运行。由例如计时器事件发起的中断使得用于该程序的状态信息被保存,并且另一等级上的操作系统(OS)通过获得该另一等级的被保存的状态信息和然后开始OS的运行而被调用。
在一个实施例中,至少部分地由软件执行上下文切换。当上下文切换被调用时,当前等级的状态信息由软件保存,并且用于新等级的状态信息由软件获得。
为了在保存和恢复状态方面辅助软件,ISA有时提供特殊指令。在一个实施例中,可以为PowerPC ISA提供特殊寄存器,以保持对ISA的通用寄存器的活性的指示。特殊寄存器可以通过新MFSPR指令被保存至存储器,并且特殊寄存器可以通过新的MTSPR指令被从存储器加载。
mfspr
Move from Special-Purpose Register(x’7C0002A6’)(从特殊目的寄存器移动)
mfspr rD,SPR
(Reserved:保留)
NOTE:*This is a split field.(注:这是分割的字段)
n.spr[5–9]||spr[0–4]
rD.SPR(n)
在PowerPC UISA中,SPR域表示特殊目的寄存器,其被编码为如在表8-9中示出那样。所指定的特殊寄存器的内容被放置到rD中。新的LIR SPR域(LR)识别活性特殊目的寄存器。
Table8·g.PowerPC UlSA SPR Encodings for mfspr
(PowerPC UISA SPR Encodings for mfspr:用于mfspr的PowerPC UISA SPR编码;Decimal:十进制;Register Name:寄存器名称)
**注意:SPR号码的两个5位的一半的次序与实际的指令编码相比被反转。
如果SPR字段包含与表8-9中示出的值之一不同的任意值(并且处理器处于用户模式中),如下之一发生:
●系统非法指令错误处理器被调用。
●系统超级监视者级指令错误处理器被调用。
●结果是有限制地未限定的。
其它寄存器改变:
●无
简化的记忆法:
mfxer rD等效于mfspr rD,1
mflr rD等效于mfspr rD,8
mfctr rD等效于mfspr rD,9
存储双字DS形式
stcf R3.DC,,R.A,I
ifRA=O then b←O
else b←(RA)
EA←b÷EXTS(DS||ObOO
MBM(EA,B)←(RS)
使得有效地址(EA)是和(RA|O)+(DS||ObOO)。(RS)被存储到存储器中由EA寻址的双字中。
特殊寄存器被改变:
从特殊目的寄存器移动
XFX形式
mfspr RT,SPR
n←spr5:9||spr0:4
iflength(SPR(n))=64then
RT←SPR(n)
else
RT←320||SPR(n)
SPR字段表示特殊目的寄存器,如下表示出那样编码。指定的特殊目的寄存器的内容被放置到寄存器RT中。对于32位长的特殊目的寄存器,RT的低次序32位接收特殊目的寄存器的内容,并且RT的高次序32位被设为零。可以添加新的LIR SPR字段(LR),用于指定保持当前架构化寄存器活性指示的SPR,其中每个位是1,例如指示架构化寄存器并未被使能。
(1注意:SPR号码的两个5位的一半的次序被反转。
移动至特殊目的寄存器
XFX形式
mtspr SPR,RS
spr55:9||spr0:4
fn=13then see Book III-S(Power ISATMYersion2.06RevisionB)
else
if length(SPR(n))=64then
SPR(n)←(RS)
else
SPR(n)←(RS)32:63
SPR字段表示特殊目的寄存器,如下表示出那样编码。除非SPR字段包含13(表示AMR<S>),否则寄存器RS的内容就被放置到指定的特殊目的寄存器中。对于32位长的特殊目的寄存器,RS的低次序的32位被放置到SPR中。AMR(授权屏蔽寄存器)被用于服务器环境中的“存储器保护”。可以添加新的LIR SPR字段(LR),用于指定保持当前架构化寄存器活性指示的SPR,其中,每个位是1,例如指示架构化寄存器未被使能。
(decimal:十进制;Register Name:寄存器名称)
1注意:SPR号码的两个5位的一半的次序被反转。
2类别:SPE
3类别:Server(服务器);参见Book III-S。
4类别:Phased-In。参见Book II的部分3.1。
5类别:Server(服务器);参见Book III-S。
根据一个实施例,当LIR(SRR0_LIVENESS)寄存器被写入时,执行如下指示:所有被指示为在被写的LIR值中无活性的寄存器都不再有活性,并且与已经被指示为将无活性的架构化寄存器对应的任何物理寄存器可以可选地被释放。
指示以下寄存器的写操作不改变一个实施例中的对应的LIR项,或者引起告知事件以指示另一实施例中的编程错误:该寄存器1)在运行写操作之前无活性、2)被指示为在写入到LIR寄存器的值中有活性。
上下文切换或者控制操作的转移可以在软件、固件或硬件电路中实施。硬件实施可以不仅有利地利用最后使用信息来将被禁止的架构化寄存器的物理寄存器返回可用物理寄存器池以被架构化寄存器和重命名寄存器两者的其它线程使用,而且还在上下文切换期间仅保存和恢复在上下文切换期间被使能的硬件寄存器。用于基于PowerPC ISA从程序A转移(上下文切换)至程序B的示例A1,首先程序A的状态信息被如下保存:
Set up context save base address for module1in r11(在r11中设置模块1的上下文保存基地址)
Then(然后)
stw r13,GPR13(r11);
stw r14,GPR14(r11);
stw r15,GPR15(r11);
stw r12,GPR12(r11);
stw r9,GPR9(r11);
mfspr r10,SPRN_SPRG_SCRATCH0;
stw r10,GPR10(r11);
mfspr r12,SPRN_SPRG_SCRATCH1;
stw r12,GPR11(r11);
然后程序B的状态信息被如下加载:
Set up context save base address for module2in r11(在r11中设置模块2的上下文保存基地址)
Then(然后)
lw r13,GPR13(r11);
lw r14,GPR14(r11);
lw r15,GPR15(r11);
lw r12,GPR12(r11);
lw r9,GPR9(r11);
mfspr r10,SPRN_SPRG_SCRATCH0;
mfspr r12,SPRN_SPRG_SCRATCH1;
rfi
在如下的示例A2中,从程序B回到程序A的转移被如下完成:
首先,对于程序B如下保存状态信息:
Set up context save base address for module2in r11(在r11中设置模块2的上下文保存基地址)
Then(然后)
stw r13,GPR13(r11);
stw r14,GPR14(r11);
stw r15,GPR15(r11);
stw r12,GPR12(r11);
stw r9,GPR9(r11);
mfspr r10,SPRN_SPRG_SCRATCH0;
stw r10,GPR10(r11);
mfspr r12,SPRN_SPRG_SCRATCH1;
stw r12,GPR11(r11);
然后,对于程序A如下加载状态信息:
Set up context save base address for module2in r11(在r11中设置模块2的上下文保存基地址)
Then(然后)
lw r13,GPR13(r11);
lw r14,GPR14(r11);
lw r15,GPR15(r11);
lw r12,GPR12(r11);
lw r9,GPR9(r11);
mfspr r10,SPRN_SPRG_SCRATCH0;
mfspr r12,SPRN_SPRG_SCRATCH1;
rfi
在用于从程序A转移(上下文切换)至程序B的示例A1、A2中,对于机构化是被使能还是被禁止的每个架构化寄存器保存状态信息。然而,基于LIR,上下文切换不必保存被禁止的寄存器,因为被询问以发现如在示例A2中示出的活性的LIR如下:
用于从程序A转移(上下文切换)至程序B的示例B1,首先程序A的状态信息被如下保存:
Set up context save base address for module1in r11(在r11中设置模块1的上下文保存基地址)
stw r13,GPR13(r11);
stw r14,GPR14(r11);
stw r15,GPR15(r11);
stw r12,GPR12(r11);
stw r9,GPR9(r11);
mfspr r10,SPRN_SPRG_SCRATCH0;
stw r10,GPR10(r11);
mfspr r12,SPRN_SPRG_SCRATCH1;
stw r12,GPR11(r11);
mfspr r12,SRR_LIVENESS
stw r12,SRR_LIVENESS(r11)
在该示例中,活性信息被mfspr12指令获得并且由stw r12指令存储,于是其可用于可能返回至程序A。然后对于程序B如下加载状态信息:
Set up context save base address for module2in r11(在r11中设置模块2的上下文保存基地址)
Then(然后)
lw r12,GPR13(r11);
Mtspr SRR_LIVENESS
lw r13,GPR13(r11);
lw r14,GPR14(r11);
lw r15,GPR15(r11);
lw r12,GPR12(r11);
lw r9,GPR9(r11);
mfspr r10,SPRN_SPRG_SCRATCH0;
mfspr r12,SPRN_SPRG_SCRATCH1;
rfi
在加载状态信息中,lw r12提供程序B的所保存的LIR状态信息的地址,并且Mtspr指令从保存区域加载LIR。
在硬件实现中,可以由逻辑电路进行转移。在一个实施例中,用于目标程序的LIR首先被加载并且仅具有活性的寄存器被加载。在一个实施例中,对于传递正从其进行的程序仅保存有活性的寄存器。
在一个实施例中,活性信息501被维持(410)以运行程序,该方法包括由处理器维持(410)当前操作数状态信息501503,当前操作数状态信息用于指示对应的当前操作数507是否是对于由第一程序模块600使用而言被使能(505)或被禁止(506)中的任一个,第一程序模块600包括指令集架构(ISA)的机器指令,第一程序模块600当前正被处理器运行(602)。当前操作数被所述第一程序模块的机器指令访问(603),该访问包括将当前操作数状态信息501503用于(504)确定之前存储的当前操作数值是否可以由第一程序模块访问(505506)。
在一个实施例中,响应于当前操作数507被禁止(506),访问包括返回架构特定的值411和进行告知动作508中的至少一个,并且其中架构特定的值411是未定义值、零值、包括全“1”的值或程序规定的缺省值中的任一个,并且其中告知动作508是抛出异常、抑制异常、在机器状态的控制下抛出和抑制异常、提供调试信息和将至少一个寄存器设置为指示发生了对被禁止操作数的访问中的任一个。
在一个实施例中,程序运行602被从第一程序模块600传递(603)给第二程序模块601,包括在上下文切换保存区域420中保存(604)第一程序模块600的当前操作数状态信息501503,从上下文切换保存区域420加载(701702)新的操作数状态信息作为待运行的第二程序的当前操作数状态信息,以及利用所加载的当前操作数状态信息501503发起(703)第二程序601的运行。
在一个实施例中,转移(603703)运行是上下文切换操作,其中,当前操作数包括由指令400识别的通用寄存器403的架构化通用寄存器值或者由指令600识别的浮点寄存器的架构化浮点寄存器值中的任一个,其中,转移运行还包括将第一程序模块600的程序计数器值和被使能的当前操作数403的当前操作数值保存在上下文切换保存区域420中;并且从上下文切换保存区域420加载(701702)新的被使能操作数的新操作数值作为待运行的第二程序601的当前操作数403的当前操作数值,其中,第二程序601的所发起的运行602使用所加载的当前操作数403。
在一个实施例中,当前操作数状态信息501503还包括操作数使能控制503,用于控制当前操作数状态信息501是否能在被当前程序600601使能和禁止之间变化。
在一个实施例中,当运行第一操作数禁止指令801时,该运行使得第一操作数403的当前操作数状态信息501禁止第一操作数403,其中对所禁止的操作数403的读取返回架构相关的缺省值411;并且当运行第二操作数使能指令806时,该运行使得(8007)第二操作数的当前操作数状态信息501使能(505)第二操作数403,其中,对被使能的操作数的读取返回之前存储至所述被使能的操作数403的值。
在一个实施例中,缺省值411包括架构未定义值、之前存储在架构限定的缺省值寄存器中的值、全“1”、全“0”、增量值或减量值中的任一个,其中,增量值随着每次读取访问而增加,其中减量值随着每次读取访问而减小。
在一个实施例中,第一操作数禁止指令是前缀指令800,前缀指令800的运行向处理器指示:第一操作数将在被按程序次序跟随该前缀指令的下一顺序指令801使用之后被禁止。
在一个实施例中,向被禁止操作数进行的写操作使得被的禁止操作数被使能,其中,第二操作数使能指令806是用于向第二操作数503进行写操作的写指令。
在一个实施例中,对被禁止的架构化寄存器的访问使得程序异常被指示。
在一个实施例中,被禁止的架构化寄存器通过运行并不向该被禁止的架构化寄存器进行写操作的寄存器使能指令而被使能。
在函数和指令的商业实现中,例如操作系统程序员以汇编语言来编写。这些存储在存储介质114(也已知为主存储库或主存储器)中的指令格式可以天然地在z/Architecture IBM服务器、PowerPC IBM服务器中运行,或者替选地在运行其它架构的机器中运行。它们可以在现有的和未来的IBM服务器中和在IBM的其它机器(例如服务器和服务器)上被仿真。它们可以在通常运行处于仿真模式中的机器中运行。
在仿真模式中,正被仿真的特定指令被解码,并且子例程被构建为实施单个指令,如在C子历程或驱动器中,或者一些其它技术被用于为特定硬件提供驱动器,如在理解了本发明的实施例的描述之后的本领域技术人员中那样。
此外,上面描述的不同实施例仅是示例。可以在不偏离本发明的精神情况下对这些实施例进行多种变化。例如,尽管可以在此描述逻辑上分区的环境,然而这仅是示例。本发明的各方面对于许多类型的环境来说是有利的,包括具有多个区的环境和未分区的其它环境。此外,可能没有中央处理器联合体,但是多个处理器耦合在一起。然而此外,本发明的一个或多个方面适用于单个处理器环境。
尽管在此描述了特定的环境,再次,可以在不偏离本发明的精神的情况下对这些环境进行多种变化。例如,如果环境在逻辑上被分区,则可以将较多或较少的逻辑分区包括在环境中。此外,可以有多个中央处理联合体耦合在一起。这些仅仅是可以在不偏离本发明的精神的情况下做出的变化中的一些。此外,其它变化也是可以的。例如,尽管在此描述的控制器将指令串行化,从而一次执行一个IDTE指令,但是在另一实施例中,可以一次运行多个指令。此外,环境可以包括多个控制器。又此外,(来自一个或多个控制器的)多个静默请求可以在系统中同时突显。附加的变化也是可以的。
如在此使用那样,术语“处理单元”包括可分页的实体,诸如游客、处理器、仿真器和/或其它类似部件。此外,术语“由处理单元”包括代表处理单元。术语“缓冲器”包括存储器的区域,以及不同类型的数据结构,包括但不限于阵列;并且术语“表”可以包括除了表类型之外的数据结构。此外,指令可以包括并非寄存器的事物来指定信息。此外,页、区段和/或区域可以具有与在此描述的那些不同的大小。
本发明的一个或多个能力可以按软件、固件、硬件或其某组合来实施。此外,可以仿真一个或多个能力。
本发明的一个或多个方面可以被包括在制造商品(例如一个或多个计算机程序产品)中,其具有例如计算机可用介质。该介质中实施例如计算机可读程序代码装置或逻辑(例如指令、代码、命令等),以提供和促进本发明的能力。该制造商品可以被包括为计算机系统的一部分或者被单独售卖。介质(也已知为有形存储介质)可以在存储设备120上实施作为固定的或便携的介质,例如在只读存储器(ROM)116中,在随机存取存储器(RAM)114上实施,或者存储在CPU(110)的计算机芯片、I/O适配器118上。
此外,可以提供至少一个程序存储设备120,其包括存储介质,该存储介质可以由实施指令的至少一个程序的机器读取,该程序可以由该机器运行以执行本发明的能力。
在此示出的流程图仅是示例。可以在不偏离本发明的精神的情况下对在此描述的这些图或步骤(或操作)进行多种变化。例如,可以按不同次序执行步骤,或者可以添加、删除或修改步骤。所有这些变化被视作要求保护的本发明的一部分。
尽管在此详细描述和示出了优选实施例,对于本领域技术人员将显然的是,可以在不偏离本发明的精神的情况下做出不同的修改、增加、替代等,并且其因此被看作位于由所附的权利要求限定的本发明的范围中。

Claims (13)

1.一种计算机实现的方法,用于维持活性信息以运行程序,该方法包括:
由处理器维持当前操作数状态信息,所述当前操作数状态信息用于指示对应的当前操作数是否是对于由第一程序模块使用而言被使能或被禁止中的任一个,所述第一程序模块包括指令集架构(ISA)的机器指令,所述第一程序模块当前正由所述处理器运行;
由所述第一程序模块的机器指令访问当前操作数,所述访问包括使用所述当前操作数状态信息来确定之前存储的当前操作数值是否能够被所述第一程序模块访问;
将程序运行从所述第一程序模块转移至第二程序模块,所述转移运行是上下文切换操作,其中所述当前操作数包括由指令识别的通用寄存器的架构化通用寄存器值或者由指令识别的浮点寄存器的架构化浮点寄存器值中的任一个,转移运行还包括执行1)到2):
1)将所述第一程序模块的被使能的当前操作数的当前操作数值和程序计数器值存储在所述上下文切换保存区域中;以及
2)从所述上下文切换保存区域加载新的被使能的操作数的新的操作数值,作为待运行的第二程序的当前操作数的当前操作数值,其中,所发起的所述第二程序的运行使用所加载的当前操作数;
其中,所述当前操作数状态信息还包括操作数使能控制,用于控制当前操作数状态信息是否能够在由当前程序使能和禁止之间改变。
2.根据权利要求1所述的方法,还包括:
响应于所述当前操作数被禁止,所述访问包括a)和b)中的至少一个:
a)返回架构特定的值,并且其中所述架构特定的值是未定义值、零值、包含全“1”的值或者程序特定的缺省值中的任一个;以及
b)进行告知,其中,该告知步骤是抛出异常,抑制异常,在机器状态的控制下抛出和抑制异常,提供调试信息,以及将至少一个寄存器设置为指示对被禁止的操作数的访问的出现中的任一个。
3.根据权利要求1所述的方法,还包括:
运行第一操作数禁止指令,该运行使得第一操作数的当前操作数状态信息禁止所述第一操作数,其中,对被禁止的操作数的读取返回架构相关的缺省值;以及
运行第二操作数使能指令,该运行使得第二操作数的当前操作数状态信息使能所述第二操作数,其中,对被使能的操作数的读取返回早先存储至所述被使能的操作数的值。
4.根据权利要求3所述的方法,其中,所述缺省值包括架构未定义值、早先存储在架构限定的缺省值寄存器中的值、全“1”、全“0”、增量值或减量值中的任一个,其中增量值随着每次读取访问而增加,其中减量值随着每次读取访问而减小。
5.根据权利要求3所述的方法,其中,第一操作数禁止指令是前缀指令,该前缀指令的运行向所述处理器指示:所述第一操作数将在被按照程序次序跟随所述前缀指令的下一顺序指令使用后被禁止。
6.根据权利要求3所述的方法,其中,向被禁止的操作数的写操作使得该被禁止的操作数被使能,其中,所述第二操作数使能指令是用于向所述第二操作数进行写操作的写指令。
7.一种用于维持活性信息以运行程序的计算机系统,该系统包括:
处理器,配置为与主存储器通信,所述处理器包括指令读取器、指令优化器和用于运行优化过的指令的一个或多个运行单元,所述处理器配置为执行根据权利要求1到6中任一项所述的方法。
8.一种计算机实现的系统,用于维持活性信息以运行程序,该系统包括:
被配置为促使处理器维持当前操作数状态信息的模块,所述当前操作数状态信息用于指示对应的当前操作数是否是对于由第一程序模块使用而言被使能或被禁止中的任一个,所述第一程序模块包括指令集架构(ISA)的机器指令,所述第一程序模块当前正由所述处理器运行;
被配置为促使所述第一程序模块的机器指令访问当前操作数的模块,所述访问包括使用所述当前操作数状态信息来确定之前存储的当前操作数值是否能够被所述第一程序模块访问;
被配置为将程序运行从所述第一程序模块转移至第二程序模块的模块,所述转移运行是上下文切换操作,其中所述当前操作数包括由指令识别的通用寄存器的架构化通用寄存器值或者由指令识别的浮点寄存器的架构化浮点寄存器值中的任一个,转移运行还包括执行1)到2):
1)将所述第一程序模块的被使能的当前操作数的当前操作数值和程序计数器值存储在所述上下文切换保存区域中;以及
2)从所述上下文切换保存区域加载新的被使能的操作数的新的操作数值,作为待运行的第二程序的当前操作数的当前操作数值,其中,所发起的所述第二程序的运行使用所加载的当前操作数;
其中,所述当前操作数状态信息还包括操作数使能控制,用于控制当前操作数状态信息是否能够在由当前程序使能和禁止之间改变。
9.根据权利要求8所述的系统,还包括:
被配置为响应于所述当前操作数被禁止的模块,以及被配置为用于所述访问的模块a)和模块b)中的至少一个:
a)被配置为返回架构特定的值的模块,并且其中所述架构特定的值是未定义值、零值、包含全“1”的值或者程序特定的缺省值中的任一个;以及
b)被配置为进行告知的模块,其中,该告知步骤是抛出异常,抑制异常,在机器状态的控制下抛出和抑制异常,提供调试信息,以及将至少一个寄存器设置为指示对被禁止的操作数的访问的出现中的任一个。
10.根据权利要求8所述的系统,还包括:
被配置为运行第一操作数禁止指令的模块,该运行使得第一操作数的当前操作数状态信息禁止所述第一操作数,其中,对被禁止的操作数的读取返回架构相关的缺省值;以及
被配置为运行第二操作数使能指令的模块,该运行使得第二操作数的当前操作数状态信息使能所述第二操作数,其中,对被使能的操作数的读取返回早先存储至所述被使能的操作数的值。
11.根据权利要求10所述的系统,其中,所述缺省值包括架构未定义值、早先存储在架构限定的缺省值寄存器中的值、全“1”、全“0”、增量值或减量值中的任一个,其中增量值随着每次读取访问而增加,其中减量值随着每次读取访问而减小。
12.根据权利要求10所述的系统,其中,第一操作数禁止指令是前缀指令,该前缀指令的运行向所述处理器指示:所述第一操作数将在被按照程序次序跟随所述前缀指令的下一顺序指令使用后被禁止。
13.根据权利要求10所述的系统,其中,向被禁止的操作数的写操作使得该被禁止的操作数被使能,其中,所述第二操作数使能指令是用于向所述第二操作数进行写操作的写指令。
CN201280048608.0A 2011-10-03 2012-09-24 在计算机系统中维持操作数活性信息 Active CN103842959B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/251,441 US10078515B2 (en) 2011-10-03 2011-10-03 Tracking operand liveness information in a computer system and performing function based on the liveness information
US13/251,441 2011-10-03
PCT/IB2012/055070 WO2013050901A1 (en) 2011-10-03 2012-09-24 Maintaining operand liveness information in a computer system

Publications (2)

Publication Number Publication Date
CN103842959A CN103842959A (zh) 2014-06-04
CN103842959B true CN103842959B (zh) 2017-05-03

Family

ID=47993791

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201280048608.0A Active CN103842959B (zh) 2011-10-03 2012-09-24 在计算机系统中维持操作数活性信息

Country Status (5)

Country Link
US (2) US10078515B2 (zh)
EP (1) EP2764433A4 (zh)
JP (1) JP6095670B2 (zh)
CN (1) CN103842959B (zh)
WO (1) WO2013050901A1 (zh)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8782434B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time
US9122873B2 (en) 2012-09-14 2015-09-01 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
US9069782B2 (en) 2012-10-01 2015-06-30 The Research Foundation For The State University Of New York System and method for security and privacy aware virtual machine checkpointing
US9619230B2 (en) 2013-06-28 2017-04-11 International Business Machines Corporation Predictive fetching and decoding for selected instructions
US9348596B2 (en) 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
US9372695B2 (en) 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
KR20150019349A (ko) * 2013-08-13 2015-02-25 삼성전자주식회사 다중 쓰레드 실행 프로세서 및 이의 동작 방법
US9958932B2 (en) 2014-11-20 2018-05-01 Apple Inc. Processor including multiple dissimilar processor cores that implement different portions of instruction set architecture
US9928094B2 (en) 2014-11-25 2018-03-27 Microsoft Technology Licensing, Llc Hardware accelerated virtual context switching
US9696992B2 (en) * 2014-12-23 2017-07-04 Intel Corporation Apparatus and method for performing a check to optimize instruction flow
US10318356B2 (en) * 2016-03-31 2019-06-11 International Business Machines Corporation Operation of a multi-slice processor implementing a hardware level transfer of an execution thread
US10699189B2 (en) 2017-02-23 2020-06-30 Cerebras Systems Inc. Accelerated deep learning
US10614357B2 (en) 2017-04-17 2020-04-07 Cerebras Systems Inc. Dataflow triggered tasks for accelerated deep learning
WO2018193370A1 (en) 2017-04-17 2018-10-25 Cerebras Systems Inc. Task activating for accelerated deep learning
US11488004B2 (en) 2017-04-17 2022-11-01 Cerebras Systems Inc. Neuron smearing for accelerated deep learning
US11010192B2 (en) 2017-04-18 2021-05-18 International Business Machines Corporation Register restoration using recovery buffers
US10564977B2 (en) 2017-04-18 2020-02-18 International Business Machines Corporation Selective register allocation
US10740108B2 (en) 2017-04-18 2020-08-11 International Business Machines Corporation Management of store queue based on restoration operation
US10649785B2 (en) 2017-04-18 2020-05-12 International Business Machines Corporation Tracking changes to memory via check and recovery
US10552164B2 (en) 2017-04-18 2020-02-04 International Business Machines Corporation Sharing snapshots between restoration and recovery
US10545766B2 (en) 2017-04-18 2020-01-28 International Business Machines Corporation Register restoration using transactional memory register snapshots
US10540184B2 (en) 2017-04-18 2020-01-21 International Business Machines Corporation Coalescing store instructions for restoration
US10572265B2 (en) 2017-04-18 2020-02-25 International Business Machines Corporation Selecting register restoration or register reloading
US10489382B2 (en) 2017-04-18 2019-11-26 International Business Machines Corporation Register restoration invalidation based on a context switch
US10782979B2 (en) 2017-04-18 2020-09-22 International Business Machines Corporation Restoring saved architected registers and suppressing verification of registers to be restored
US10838733B2 (en) 2017-04-18 2020-11-17 International Business Machines Corporation Register context restoration based on rename register recovery
US10963261B2 (en) 2017-04-18 2021-03-30 International Business Machines Corporation Sharing snapshots across save requests
US10372456B2 (en) * 2017-05-24 2019-08-06 Microsoft Technology Licensing, Llc Tensor processor instruction set architecture
US20190205061A1 (en) * 2017-12-29 2019-07-04 Intel Corporation Processor, method, and system for reducing latency in accessing remote registers
WO2020044152A1 (en) 2018-08-28 2020-03-05 Cerebras Systems Inc. Scaled compute fabric for accelerated deep learning
WO2020044208A1 (en) 2018-08-29 2020-03-05 Cerebras Systems Inc. Isa enhancements for accelerated deep learning
US11328208B2 (en) 2018-08-29 2022-05-10 Cerebras Systems Inc. Processor element redundancy for accelerated deep learning
GB2580327B (en) * 2018-12-31 2021-04-28 Graphcore Ltd Register files in a multi-threaded processor
US11556374B2 (en) 2019-02-15 2023-01-17 International Business Machines Corporation Compiler-optimized context switching with compiler-inserted data table for in-use register identification at a preferred preemption point
US11269634B2 (en) * 2019-08-05 2022-03-08 Arm Limited Data structure relinquishing
CN110647361B (zh) * 2019-09-09 2021-08-27 中国人民解放军国防科技大学 一种空闲物理寄存器的获取方法和装置
US11204767B2 (en) 2020-01-06 2021-12-21 International Business Machines Corporation Context switching locations for compiler-assisted context switching
US11086630B1 (en) 2020-02-27 2021-08-10 International Business Machines Corporation Finish exception handling of an instruction completion table
GB2596872B (en) * 2020-07-10 2022-12-14 Graphcore Ltd Handling injected instructions in a processor
US20220206855A1 (en) * 2020-12-29 2022-06-30 Advanced Micro Devices, Inc. Offloading computations from a processor to remote execution logic

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5414864A (en) * 1989-07-20 1995-05-09 Hitachi, Ltd. Method for selectively saving/restoring first registers and bypassing second registers in register units based on individual lock/unlock status thereof
CN1488096A (zh) * 2001-01-18 2004-04-07 �����ɷ� 可携式数据载体之微处理器电路
CN1856770A (zh) * 2002-05-31 2006-11-01 飞思卡尔半导体公司 具有多寄存器环境的数据处理系统及其方法

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61235985A (ja) 1985-04-11 1986-10-21 Nec Corp ベクトルプロセツサ
US5095526A (en) 1990-01-26 1992-03-10 Apple Computer, Inc. Microprocessor with improved interrupt response with interrupt data saving dependent upon processor status
US5303358A (en) * 1990-01-26 1994-04-12 Apple Computer, Inc. Prefix instruction for modification of a subsequent instruction
JPH05173788A (ja) 1991-06-21 1993-07-13 Toshiba Corp 計算機装置
US5539911A (en) 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
JPH064305A (ja) 1992-06-22 1994-01-14 Nec Corp プロセッサのレジスタ入替え判別回路
JPH06348509A (ja) 1993-06-14 1994-12-22 Hitachi Ltd スタックサイズの変更方法
DE4434895C2 (de) 1993-12-23 1998-12-24 Hewlett Packard Co Verfahren und Vorrichtung zur Behandlung von Ausnahmebedingungen
US5590352A (en) 1994-04-26 1996-12-31 Advanced Micro Devices, Inc. Dependency checking and forwarding of variable width operands
US5481719A (en) 1994-09-09 1996-01-02 International Business Machines Corporation Exception handling method and apparatus for a microkernel data processing system
US5812811A (en) 1995-02-03 1998-09-22 International Business Machines Corporation Executing speculative parallel instructions threads with forking and inter-thread communication
JP3711422B2 (ja) 1995-12-20 2005-11-02 セイコーエプソン株式会社 情報処理回路
JPH10283188A (ja) 1997-04-03 1998-10-23 Matsushita Electric Ind Co Ltd プロセッサにおけるレジスタ保護方法
US6314511B2 (en) * 1997-04-03 2001-11-06 University Of Washington Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers
US6094719A (en) 1997-06-25 2000-07-25 Sun Microsystems, Inc. Reducing data dependent conflicts by converting single precision instructions into microinstructions using renamed phantom registers in a processor having double precision registers
US5944810A (en) 1997-06-27 1999-08-31 Sun Microsystems, Inc. Superscalar processor for retiring multiple instructions in working register file by changing the status bits associated with each execution result to identify valid data
US6199156B1 (en) * 1998-12-16 2001-03-06 Bull Hn Information Systems Inc. System for explicitly referencing a register for its current content when performing processor context switch
US6189088B1 (en) 1999-02-03 2001-02-13 International Business Machines Corporation Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location
US6449710B1 (en) 1999-10-29 2002-09-10 Stmicroelectronics, Inc. Stitching parcels
US6393579B1 (en) 1999-12-21 2002-05-21 Intel Corporation Method and apparatus for saving power and improving performance in a collapsable pipeline using gated clocks
US6748519B1 (en) 2000-06-15 2004-06-08 International Business Machines Corporation Method and apparatus for utilizing renamed registers based upon a functional or defective operational status of the register
US6687806B1 (en) 2000-06-15 2004-02-03 Advanced Micro Devices, Inc. Apparatus and method for generating 64 bit displacement and immediate values
EP1199629A1 (en) 2000-10-17 2002-04-24 STMicroelectronics S.r.l. Processor architecture with variable-stage pipeline
US7228403B2 (en) 2000-12-23 2007-06-05 International Business Machines Corporation Method for handling 32 bit results for an out-of-order processor with a 64 bit architecture
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US6950926B1 (en) 2001-03-02 2005-09-27 Advanced Micro Devices, Inc. Use of a neutral instruction as a dependency indicator for a set of instructions
US20030154419A1 (en) 2002-01-10 2003-08-14 Binyu Zang Register renaming in binary translation using rollback and recovery
JP3856737B2 (ja) 2002-07-19 2006-12-13 株式会社ルネサステクノロジ データ処理装置
US7131017B2 (en) 2002-08-16 2006-10-31 Carnegie Mellon University Programmable pipeline fabric having mechanism to terminate signal propagation
US6934830B2 (en) 2002-09-26 2005-08-23 Sun Microsystems, Inc. Method and apparatus for reducing register file access times in pipelined processors
EP1573490A2 (en) 2002-12-04 2005-09-14 Koninklijke Philips Electronics N.V. Software-based control of microprocessor power dissipation
JP2004220070A (ja) * 2003-01-09 2004-08-05 Japan Science & Technology Agency コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
US7769885B1 (en) 2003-05-23 2010-08-03 Juniper Networks, Inc. Determining liveness of protocols and interfaces
KR100531314B1 (ko) 2004-03-16 2005-11-29 엘지전자 주식회사 영상표시장치
US20050251662A1 (en) 2004-04-22 2005-11-10 Samra Nicholas G Secondary register file mechanism for virtual multithreading
US7395419B1 (en) 2004-04-23 2008-07-01 Apple Inc. Macroscalar processor architecture
US7284092B2 (en) 2004-06-24 2007-10-16 International Business Machines Corporation Digital data processing apparatus having multi-level register file
US20060174089A1 (en) 2005-02-01 2006-08-03 International Business Machines Corporation Method and apparatus for embedding wide instruction words in a fixed-length instruction set architecture
US20060190710A1 (en) 2005-02-24 2006-08-24 Bohuslav Rychlik Suppressing update of a branch history register by loop-ending branches
US7698536B2 (en) 2005-08-10 2010-04-13 Qualcomm Incorporated Method and system for providing an energy efficient register file
US8296550B2 (en) 2005-08-29 2012-10-23 The Invention Science Fund I, Llc Hierarchical register file with operand capture ports
US7380104B2 (en) 2006-04-25 2008-05-27 International Business Machines Corporation Method and apparatus for back to back issue of dependent instructions in an out of order issue queue
JP2007304663A (ja) 2006-05-08 2007-11-22 Univ Nagoya プロセッサ及びそのデータ処理方法
US7506139B2 (en) * 2006-07-12 2009-03-17 International Business Machines Corporation Method and apparatus for register renaming using multiple physical register files and avoiding associative search
US20080148022A1 (en) 2006-12-13 2008-06-19 Arm Limited Marking registers as available for register renaming
US7676653B2 (en) 2007-05-09 2010-03-09 Xmos Limited Compact instruction set encoding
US7818543B2 (en) 2007-07-10 2010-10-19 Globalfoundries Inc. Method and apparatus for length decoding and identifying boundaries of variable length instructions
US7818542B2 (en) 2007-07-10 2010-10-19 Globalfoundries Inc. Method and apparatus for length decoding variable length instructions
US8762692B2 (en) * 2007-09-27 2014-06-24 Intel Corporation Single instruction for specifying and saving a subset of registers, specifying a pointer to a work-monitoring function to be executed after waking, and entering a low-power mode
US8108614B2 (en) 2007-12-31 2012-01-31 Eric Sprangle Mechanism for effectively caching streaming and non-streaming data patterns
US20100312991A1 (en) 2008-05-08 2010-12-09 Mips Technologies, Inc. Microprocessor with Compact Instruction Set Architecture
US20100095286A1 (en) 2008-10-10 2010-04-15 Kaplan David A Register reduction and liveness analysis techniques for program code
JP5471082B2 (ja) 2009-06-30 2014-04-16 富士通株式会社 演算処理装置および演算処理装置の制御方法
US8683180B2 (en) 2009-10-13 2014-03-25 International Business Machines Corporation Intermediate register mapper
US20110161616A1 (en) 2009-12-29 2011-06-30 Nvidia Corporation On demand register allocation and deallocation for a multithreaded processor
US8560816B2 (en) * 2010-06-30 2013-10-15 Oracle International Corporation System and method for performing incremental register checkpointing in transactional memory

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5414864A (en) * 1989-07-20 1995-05-09 Hitachi, Ltd. Method for selectively saving/restoring first registers and bypassing second registers in register units based on individual lock/unlock status thereof
CN1488096A (zh) * 2001-01-18 2004-04-07 �����ɷ� 可携式数据载体之微处理器电路
CN1856770A (zh) * 2002-05-31 2006-11-01 飞思卡尔半导体公司 具有多寄存器环境的数据处理系统及其方法

Also Published As

Publication number Publication date
WO2013050901A1 (en) 2013-04-11
JP2015501019A (ja) 2015-01-08
JP6095670B2 (ja) 2017-03-15
US20130086367A1 (en) 2013-04-04
EP2764433A1 (en) 2014-08-13
EP2764433A4 (en) 2015-06-24
CN103842959A (zh) 2014-06-04
US10078515B2 (en) 2018-09-18
US10061588B2 (en) 2018-08-28
US20140095848A1 (en) 2014-04-03

Similar Documents

Publication Publication Date Title
CN103842959B (zh) 在计算机系统中维持操作数活性信息
US9483267B2 (en) Exploiting an architected last-use operand indication in a system operand resource pool
US6189088B1 (en) Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location
Akkary et al. A dynamic multithreading processor
US9311095B2 (en) Using register last use information to perform decode time computer instruction optimization
US9329869B2 (en) Prefix computer instruction for compatibily extending instruction functionality
US9189233B2 (en) Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US20140047219A1 (en) Managing A Register Cache Based on an Architected Computer Instruction Set having Operand Last-User Information
US6721874B1 (en) Method and system for dynamically shared completion table supporting multiple threads in a processing system
US9690589B2 (en) Computer instructions for activating and deactivating operands
Johnson Superscalar Processor Design
US20040073906A1 (en) Processor with speculative multithreading and hardware to support multithreading software {including global registers and busy bit memory elements}
EP3834083B1 (en) Commit logic and precise exceptions in explicit dataflow graph execution architectures
JP2012508939A (ja) シーケンシャル・プログラムを複数スレッドに分解し、スレッドを実行し、シーケンシャルな実行を再構成するシステム、方法および装置
US20180267807A1 (en) Precise exceptions for edge processors
WO2021236660A1 (en) Methods and systems for utilizing a master-shadow physical register file
Sharafeddine et al. Disjoint out-of-order execution processor
Warg Techniques to reduce thread-level speculation overhead
Mutlu Efficient runahead execution processors
Song Reducing register pressure through LAER algorithm
Zhou Fine-grain state processors
Nunez Development and evaluation of a simultaneous multithreading processor simulator

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant