CN108834427B - 处理向量指令 - Google Patents

处理向量指令 Download PDF

Info

Publication number
CN108834427B
CN108834427B CN201780017771.3A CN201780017771A CN108834427B CN 108834427 B CN108834427 B CN 108834427B CN 201780017771 A CN201780017771 A CN 201780017771A CN 108834427 B CN108834427 B CN 108834427B
Authority
CN
China
Prior art keywords
vector
processing
instruction
instructions
beat
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
CN201780017771.3A
Other languages
English (en)
Other versions
CN108834427A (zh
Inventor
托马斯·克里斯多夫·格鲁卡特
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.)
ARM Ltd
Original Assignee
ARM Ltd
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 ARM Ltd filed Critical ARM Ltd
Publication of CN108834427A publication Critical patent/CN108834427A/zh
Application granted granted Critical
Publication of CN108834427B publication Critical patent/CN108834427B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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 or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

处理电路(4)响应于向量指令而执行多个处理差拍,每一差拍包含对应于包括多个数据元素的向量值的一部分的处理。处理电路(4)设定差拍状态信息(22),该状态信息指示两个或两个以上向量指令群组中的哪些差拍已完成。响应于指示返回至给定向量指令的处理的从事件返回请求,处理电路(4)基于差拍状态信息(22)继续处理未完成向量指令的群组,同时抑制已完成的差拍。

Description

处理向量指令
技术领域
本技术涉及数据处理领域。更具体地,本技术涉及向量指令的处理。
背景技术
一些数据处理系统支持向量指令处理,用于该向量指令的指令源操作数或结果值为包括多个数据元素的向量。通过响应于单个指令而支持数个不同数据元素的处理,可改良码密度且降低指令撷取及解码的负担。待处理的数据值数组可通过以下方式更高效地处理:将数据值加载向量操作数的各个元素,及使用单个向量指令每次处理若干元素的数据值。
发明内容
至少一些示例提供一种装置,该装置包括:
处理电路,用以处理向量指令,这些向量指令的源操作数及结果值中的至少一者是包括多个数据元素的向量值;
其中,响应于给定向量指令,该处理电路被配置为执行多个处理差拍,每一差拍包括对应于向量值的一部分的处理;
处理电路被配置为设定差拍状态信息,该信息可指示包括该给定向量指令的多个向量指令中的哪些差拍已完成;以及
响应于事件,处理电路被配置为暂停该给定向量指令的处理;以及
响应于从事件返回请求,该请求指示返回至该给定向量指令的处理,该处理电路被配置为继续该多个向量指令的处理,同时抑制由该差拍状态信息指示为已完成的该多个向量指令的差拍;
其中,向量值包括数据元素,这些数据元素具有数据元素大小信息所指定的多个数据元素大小的一者,处理电路可访问该数据元素大小信息;以及
每一处理差拍包括对应于向量值的固定大小部分的处理,无论该数据元素大小信息指示何种数据元素大小。
至少一些示例提供一种装置,该装置包括:
用于处理向量指令的构件,用于这些指令的源操作数及结果值中的至少一者是包括多个数据元素的向量值;
其中,响应于给定向量指令,该用于处理的构件被配置为执行多个处理差拍,每一差拍包括对应于向量值的一部分的处理;
该用于处理的构件被配置为设定差拍状态信息,该信息可指示包括该给定向量指令的多个向量指令的哪些差拍已完成;以及
响应于事件,该用于处理的构件被配置为暂停该给定向量指令的处理;以及
响应于从事件返回请求,该请求指示返回至该给定向量指令的处理,该用于处理的构件被配置为继续该多个向量指令的处理,同时抑制由该差拍状态信息指示为已完成的该多个向量指令的差拍;
其中,该向量值包括数据元素,这些数据元素具有由数据元素大小信息指定的多个数据元素大小中的一者,该用于处理的构件可访问该数据元素大小信息;以及
每一处理差拍包括对应于向量值的固定大小部分的处理,无论该数据元素大小信息指示何种数据元素大小。
至少一些示例提供一种处理向量指令的方法,用于这些向量指令的源操作数及结果值中的至少一者是包括多个数据元素的向量值;该方法包括:
响应于给定向量指令,执行多个处理差拍,每一差拍包括对应于向量值的一部分的处理;
设定差拍状态信息,该状态信息可指示包括该给定向量指令的多个向量指令的哪些差拍已完成;以及
响应于事件,暂停该给定向量指令的处理;以及
响应于从事件返回请求,该请求指示返回至该给定向量指令的处理,继续该多个向量指令的处理,同时抑制由该差拍状态信息指示为已完成的该多个向量指令的差拍;
其中该向量值包括数据元素,这些数据元素具有由数据元素大小信息指定的多个数据元素大小中的一者;以及
每一处理差拍包括对应于向量值的固定大小部分的处理,无论该数据元素大小信息指示何种数据元素大小。
至少一些示例提供一种虚拟机计算机程序,该计算机程序包括程序指令,这些指令用以控制主机数据处理装置以提供对应于上文论述的装置的指令执行环境。
亦可提供存储虚拟机计算机程序的计算机可读存储介质。该存储介质可为非暂态存储介质。
附图说明
本技术的更多方面、特征及优势将从将结合附图阅读的示例的以下描述中显而易见,其中:
图1示意地图示出支持向量指令处理的数据处理装置的示例;
图2示出了向量指令的重迭执行的示例;
图3示出了在不同的指令执行实例之间,在不同的处理器实施方式之间或在运行时于连续向量指令之间的重迭量按比例缩放的三个示例;
图4示出了标量指令的执行使两个向量指令之间的重迭断开的示例;
图5示出了用于差拍状态信息的示例性编码,该差拍状态信息用于指示多个向量指令块中的哪些差拍已完成;
图6示出了在发生调试事件或异常时记录差拍状态信息的两个示例;
图7示出了在从调试事件或异常返回之后,使用差拍状态信息以继续处理的示例;
图8示出了响应于向量指令的完成而更新状态信息的方法;
图9示出了处理异常事件的方法;
图10示出了从异常事件处理返回的方法;
图11和图12示出了当重迭标量-向量混合指令的差拍时的松弛执行的示例;
图13示出了在处理电路内用于处理不同指令类别的不同硬件单元的示例;
图14示出了当遇到同一类别的两个标量-向量混合指令时阻止重迭执行的示例;
图15是其中示出了通过预定数目的介入指令分隔两个标量-向量混合指令如何有助于避免松弛执行的示例;
图16示出了使用隔离指令以阻止松弛执行的示例;
图17示出了处理标量-向量混合指令的方法;
图18示出了标量-向量混合指令的重迭执行的又一示例;以及
图19示出了可使用的虚拟机实施方式。
具体实施方式
一些特殊的示例将如下所述。将理解,本技术不限于这些确切的示例。
依据给定指令集架构所写的软件可在众多具有不同硬件实施方式的不同数据处理装置上执行。只要给定指令集在执行时给出架构预期的结果,则特定实施方式可以任何方式随意改变其微型架构设计,如此实现此架构的顺应性。例如,对于一些应用程序而言,能量效率可比效能更为重要,因此提供用于执行来自指令集架构的指令的处理电路的微型架构设计可被设计为消耗尽量少的能量,即使会以效能为代价亦如此。其他应用程序可视效能为比能量效率更重要的准则,因此可包括更复杂的硬件结构,这些硬件结构赋能更大的指令通量,但可能消耗更多功率。因此,设计指令集架构以便支持各种不同能量或效能点的按比例缩放是合乎需要的。
一些指令集架构支持用于触发处理电路以执行处理的向量指令,用于该处理的源操作数或结果值(或两者)是包括多个数据元素的向量。一些微型架构实施方式可并行处理向量的全部元素,而其他实施方式可每次处理该向量的一部分。
在给定指令执行线程的处理期间,有时可检测到某一事件,该事件触发当前线程的给定向量指令的暂停,以使得处理电路可执行其他类型处理。例如,事件可为调试事件,该调试事件触发切换至调试状态,在此状态中,外部调试程序可检查处理电路的操作(或通过注入将由处理电路执行的调试指令以读出诸如寄存器状态的内部资源,或通过从外部调试程序直接访问处理电路的内部资源),或指示错误、故障或外部事件的异常事件已发生。一些此类事件可为效能关键的,因为尽快响应事件可能很重要。事件处理之后,从事件返回请求(例如异常返回或从调试状态返回)可随后触发返回到事件发生前正在执行的处理。
本申请中所描述的处理电路被配置为通过执行数个处理差拍来处理向量指令,其中每一差拍包括对应于向量值的一部分的处理。处理电路被配置为设定差拍状态信息,该状态信息指示两个或两个以上向量指令群组中哪些差拍已完成。响应于从事件返回请求,该请求指示返回至给定向量指令的处理,该处理电路使用差拍状态信息以确定哪些差拍已完成,及抑制由该差拍状态信息指示为已完成的两个或两个以上指令的群组的差拍。给定向量指令的给定差拍可被抑制,例如通过完全不执行关联于该差拍的处理操作,或通过掩蔽该处理操作结果到寄存器或其他存储位置的写入。
该配置实现支持向量指令更高效地按比例缩放至不同的效能及能量点的处理架构。通过提供在两个或两个以上向量指令中追踪已完成差拍的差拍状态信息,此向特定的微型架构实施方式给予自由以改变不同向量指令的执行重迭的量,以便有可能同时相互执行不同向量指令的各个差拍,同时仍追踪每一部分执行指令的进程。一些微型架构实施方式可选择完全不重迭各个向量指令的执行,以使得一个向量指令中的所有差拍都在下一指令开始之前完成。其他微型架构可交迭连续向量指令的执行,以使得第二向量指令的第一差拍子集与来自第一向量指令的第二差拍子集并行执行。
无论给定硬件实施方式选择何种特定方式来实施向量指令的执行,通过定义差拍状态信息,便可能更快响应于暂停指令执行线程的事件,因为并非必须等待给定向量指令以在暂停线程之前完成该指令的全部差拍,因为差拍状态信息实现部分完成的指令以在事件处理之后继续。此行为亦可对处理为明确故障的异常十分重要,因为就架构而言,指令无法完成其执行。因为在异常之后继续处理时,异常响应延迟往往可比减少延迟更重要,因此此方法亦可针对异常处理提供优势。
相比之下,仅记录关于单个指令进程的信息,或假定指令群组中的特定差拍组合将在执行线程暂停点已完成的方法将向微型架构硬件设计者提供用以按比例缩放不同向量指令重迭量的更小灵活性。另一替换方法将是将部分执行指令中的已完成差拍的结果存储为推测状态,该状态直至整个指令完成后才确定,但此将需要额外存储及控制不合乎低功率实施方式需要的负担。通过提供指示多个向量指令中哪些特定差拍已完成的差拍状态信息,及使用此以在适当的点处继续处理,指令集架构可更具灵活性,有助于改良各种不同微型架构的效能及能量效率,而无需管理推测状态。
图1示意地示出了数据处理装置2的示例,该数据处理装置支持向量指令处理。将理解,此图是便于说明的简图,实际上该装置可具有众多元件,为简明起见,图1中未示出这些元件。装置2包括用于响应于由指令解码器6解码的指令而执行数据处理的处理电路4。程序指令撷取自存储器系统8及通过指令解码程序解码以生成控制信号,这些控制信号控制处理电路4以按架构定义的方式处理指令。例如,解码器6可解译已解码指令的运算码及指令的任何额外控制字段以生成控制信号,这些控制信号使得处理电路4启动适当的硬件单元以执行诸如算术运算、加载/存储操作或逻辑运算的操作。装置具有一组寄存器10以用于存储将由处理电路4处理的数据值及用于配置处理电路的操作的控制信息。响应于算法或逻辑指令,处理电路4从寄存器10读取操作数且将指令结果写入回寄存器10。响应于加载/存储指令,数据值在寄存器10与存储器系统8之间经由处理电路而转移。存储器系统8可包括一个或更多阶缓存以及主存储器。
寄存器10包括标量寄存器文件12,该文件包括数个标量寄存器以用于存储包含单个数据元素的标量值。指令解码器6与处理电路4支持的一些指令为标量指令,这些标量指令处理从标量寄存器12读取的标量操作数以生成标量结果,该结果被写入回标量寄存器。
寄存器10亦包括向量寄存器文件14,该文件包括数个向量寄存器,每一寄存器用于存储包括多个数据元素的向量值。响应于向量指令,指令解码器6控制处理电路4以对读取自向量寄存器14中的一者的各个向量操作数元素执行数个向量处理路径,以生成将被写入标量寄存器12的标量结果或将被写入向量寄存器14的进一步向量结果。一些向量指令可利用一个或更多个标量操作数生成向量结果,或可对标量寄存器文件中的标量操作数执行额外的标量运算以及对读取自向量寄存器文件14的向量操作数执行向量处理路径。因此,一些指令可为标量-向量混合指令,这些指令的一个或更多个源寄存器和指令目的寄存器中的至少一者是向量寄存器14,且一个或更多个源寄存器与目的寄存器中的另一者是标量寄存器12。向量指令亦可包括向量加载/存储指令,这些指令使得数据值在向量寄存器14与存储器系统8中的位置之间转移。加载/存储指令可包括连续的向量加载/存储指令,这些指令在存储器中的位置对应于连续的地址范围,或可包括分散/聚集类型的向量加载/存储指令,这些指令指定数个离散地址且控制处理电路4以从彼等地址中的每一地址将数据加载向量寄存器的各个元素,或将来自向量寄存器的各个元素的数据存储到离散地址。
处理电路4可支持各种不同数据元素大小的向量的处理。例如,128位向量寄存器14可被分割为例如十六个8位数据元素、八个16位数据元素、四个32位数据元素或两个64位数据元素。寄存器组10内的控制寄存器可指定当前正在使用的数据元素大小,或替代地此可为待执行的给定向量指令的参数。
寄存器10亦包括数个控制寄存器,这些寄存器用于控制处理电路4的处理。例如,这些寄存器可包括程序计数寄存器16、链路寄存器18、堆栈指针寄存器20、以及差拍状态寄存器22;程序计数寄存器16用于存储程序计数器地址,该地址指示对应于正在处理的当前执行点的指令的地址;链路寄存器18用于存储返回地址,在处理函数调用之后,处理将被导向该返回地址;堆栈指针寄存器20指示在堆栈数据结构的存储器系统8内的位置;以及差拍状态寄存器22用于存储差拍状态信息,该状态信息将在下文中更详细地描述。将理解,这些类型仅为可存储的控制信息的一些类型,而实际上,给定架构指令集可存储如由架构所定义的众多其他的控制参数。例如,控制寄存器可指定向量寄存器的全宽,或正在用于给定向量处理示例中的当前数据元素大小。
处理电路4可包括数个不同硬件区块以用于处理不同指令类别。例如,如图13中所示,与存储器系统8交互的加载/存储指令可通过专用加载/存储单元200而处理,而算术或逻辑指令可通过算术逻辑单元(ALU)202、204而处理。ALU自身可进一步分割为:乘法累积单元(MAC)202,用于在涉及乘法的操作中执行;以及又一单元204,用于处理其他种类的ALU运算。亦可提供浮点单元206以用于处理浮点指令。与向量指令相比,不涉及任何向量处理的纯的标量指令亦可通过单独的硬件区块处理,或重新使用相同的硬件区块。
在诸如数字信号处理(DSP)的一些应用程序中,可能有大约相等数目的ALU及加载/存储指令,及因此诸如乘法累积单元的大型区块可闲置达显著时长。在执行资源随着向量路径数目按比例缩放以获取更高效能时,此低效率可能在向量架构上情况加剧。在更小处理器上(例如单次发出,依序核心),可能禁止完全超过尺寸范围的向量管线的面积负担。使面积影响最小化,同时使可用执行资源的利用率更佳的一个方法是重迭执行指令,如图2所示。在此示例中,三个向量指令包括加载指示VLDR、乘法指令VMUL及移位指令VSHR,这些指令全部可同时执行,即使这些指令之间有数据相依性。此是因为VMUL的元素1仅取决于Q1的元素1,而非整个Q1寄存器,因此VMUL的执行可在VLDR的执行已结束之前开始。通过允许指令重迭,如乘法器的高成本区块可保持有效更长时间。
因此,可能需要赋能微型架构实施方式以重迭向量指令的执行。然而,如若架构假定有固定指令重迭量,则尽管此可在微型架构实施方式实际匹配架构假定的指令重迭量时提供高效率,但可在按比例缩放至不同微型架构时导致问题,这些微型架构使用不同的重迭或完全不重迭。
相反,架构可支持各种不同的重迭,如图3的示例所示。向量指令的执行被分成被称作“差拍”的部分,每一差拍对应于向量中具有预定大小的一部分的处理。差拍是向量指令的原子部分,该部分得以完全执行或完全不执行,且无法部分执行。向量中在一个差拍中处理的部分的大小由架构定义,且可为向量的任意部分。在第3图的示例中,差拍定义为对应于向量宽度四分之一的处理,以使得每一向量指令有四个差拍。显然,此仅为一示例,且其他架构可使用不同的差拍数目,例如两个或八个。向量中对应于一个差拍的部分可为相同大小,其大于或小于正在处理的向量的数据元素大小。因此,即使元素大小根据不同实施方式而不同,或在运行时于不同指令之间不同,但差拍是向量处理的某一固定宽度。如若在一个差拍中正在处理的向量中的部分包括多个数据元素,则进位信号可在各个元素之间的边界处去能,以确保每一元素独立处理。如若向量中在一个差拍中处理的部分仅对应于元素的部分,且硬件不足以并行计算数个差拍,则在一个处理差拍期间生成的进位输出可作为进位输入而输入随后的处理差拍,以使得该两个差拍的结果共同形成数据元素。
如图3中所示,处理电路4的不同的微型架构实施方式可在抽象架构时钟的一次“嘀嗒”中执行不同数目个差拍。此时,一次“嘀嗒”对应于架构状态前进单元(例如对于简单架构,每一次嘀嗒可对应于对关联于执行指令的全部架构状态的更新示例,包括更新程序计数器以指向下一指令)。本领域技术人员将理解,诸如管线的已知微型结构技术可意谓单次嘀嗒可需要多个时钟周期以在硬件级别执行,而实际上硬件级别的单个时钟周期可处理多个指令的多个部分。然而,该种微型架构技术却无法用于软件,因为嘀嗒在架构级别是原子级的。为简明起见,本公开的进一步描述中忽略这种微型架构。
如图3的下方示例中所示,一些实施方式可通过提供充足的硬件资源以用于在一次嘀嗒内并行处理所有差拍,而将向量指令的四个差拍全部排程在同一次嘀嗒中。此可适用于更高效能的实施方式。在此情况下,在架构级别的指令之间不需要任何重迭,因为整个指令可在一次嘀嗒中完成。
另一方面,面积效率更高的实施方式可提供更窄的处理单元,这些单元每次嘀嗒仅可处理两个差拍,且如第3图的中间示例中所示,指令执行可与第二向量指令的第一及第二差拍重迭,该第一及第二差拍与第一指令的第三或第四差拍并行执行,在此情况下,这些指令在处理电路内的不同执行单元上执行(例如,在第3图中,第一指令是通过使用加载/存储单元200执行的加载指令,而第二指令是通过使用MAC 202执行的乘法累积指令)。
又一更具能量效率/面积效率的实施方式可提供硬件单元,这些硬件单元更窄,且每次仅能处理一个差拍,而在此情况下,每一次嘀嗒可处理一个差拍,指令执行通过一个差拍而重迭及交迭,如图3的顶部示例所示(在上文图2中示出的示例亦是如此)。
将理解,图3中图示的重迭仅为一些示例,其他实施方式亦有可能。例如,处理电路4的一些实施方式可支持在同一嘀嗒中同时双重发出多个指令,以使得有更大的指令通量。在此情况下,在一个循环中共同开始的两个或两个以上向量指令可具有与在下一循环中开始的两个或两个以上向量指令重迭的一些差拍。
改变不同实施方式的重迭量以按比例缩放至不同的效能点亦是如此,向量指令之间的重迭量亦可在运行时于程序内的不同向量指令执行示例之间变化。因此,处理电路4可配备差拍控制电路系统30,如图1所示,以用于控制相对于先前指令而执行给定指令的时序。此给予微型架构选择在某些更难以实施或取决于指令可用资源的拐角情况下不重迭指令的自由。例如,如若有需要相同资源的给定类型的背对背指令(例如乘法累积),且所有可用的MAC或ALU资源皆正在被另一指令使用,则可能没有充足的空闲资源以开始执行下一指令,且因此,第二指令可等待直到第一指令已完成时才发出,而不是重迭。
如图4中所示,如若有介入标量指令,则亦可阻止两个向量指令之间的重迭。此因为标量指令可取决于向量指令的上次差拍的结果,而第二向量指令可取决于其全部差拍的标量结果,因此避免向量指令与标量指令重迭可为更安全的。
当如上文论述允许重迭时,则可能有多个指令同时执行。程序计数器16可追踪最早未完成指令的地址,该指令具有仍有待完成的至少一个差拍。当向量指令完成其最终差拍时,程序计数器可递增。
尽管允许执行向量指令的各种不同重迭可允许更有效地在众多效能点处使用硬件资源,但此可导致异常或调试事件或其他触发当前线程的执行暂停的事件的处理的某些复杂性。例如,在图2中示出的示例中,如若在第四嘀嗒时发生异常,则寄存器文件将含有来自数个指令的部分更新。处理此情况的一个方式是以推测状态处理部分更新,如若发生异常,则这些状态可复原,但此可能增大所需硬件数量,因为可能必须缓冲存储请求以用于将数据向外存储至存储器系统8,直至这些要求得到确定且在硬件中提供额外寄存器以用于追踪该推测状态。另一方法将是完全去能在向量指令期间部分地发生的异常,并延迟异常的发生直至最早的未完成指令已完成为止,但增加异常处理延迟可能是不合需要的,且在异常是明确故障的情况下,这种行为可能中断关联于该故障的架构担保。
反之,如图5所示,差拍状态寄存器22可用以记录差拍状态值,该值追踪相邻指令群组中在导致当前线程暂停的异常、调试事件或其他事件时有哪些差拍已完成。通过向架构曝露执行的重迭性质,此可有助于减少微型架构复杂性且增大功率及面积效率。
在图5的示例中,差拍状态信息追踪三个向量指令A、B、C群组中的已完成差拍,其中指令A对应于最早的未完成向量指令,指令B是在指令A之后的下一向量指令,且指令C是指令B之后的下一向量指令。注释Ax代表指令A中第x个差拍,其中在4差拍向量实施方式中x处于1与4之间,例如A2是指令A的第二差拍。尽管图5示出了通过使用差拍状态信息追踪三个指令的示例,但在允许在给定点处部分地完成更大数目的指令的其他示例中,差拍状态信息可能追踪更大数目的指令。例如,如若支持二重发出,则可能需要为三个以上指令指示差拍进程。每一差拍状态域值被分配至给定的已完成差拍组合。例如,差拍状态值0011指示指令A的第一及第二差拍且指令B的第一差拍完成。差拍状态信息的特定编码值向各个指令群组的特定差拍集的特定映射是任意的,且可能不同。在此示例中,差拍状态值0000指示没有未完成指令,因此没有未完成指令的已完成差拍。此可能发生在例如当处理器已执行标量指令时。
图6示出了在当前线程执行出现暂停之时记录的差拍状态信息的一些示例。在图6的顶部示例中,向量指令利用每次嘀嗒一个差拍而执行,且在第四嘀嗒时出现调试事件或异常。因此,此时,指令A之前三个差拍、指令B之前两个差拍,且指令C的第一差拍已完成,但差拍A4、B3、C2、D1仍有待执行。因此,差拍状态信息将具有值0111,根据图5中的示例,此值指示差拍A1、A2、A3、B1、B2及C1已完成。
同样,在图6的示例底部中,正在执行的指令使得指令B及C不能重迭(例如因为这些指令需要使用同一硬件单元),因此此次指令C及D在调试事件或异常之时未曾开始。此时,在第四嘀嗒时发生的异常将触发差拍状态信息0110的记录,该状态信息指示差拍A1、A2、A3、B1及B2已完成,但C1未完成。
同样,在图3的每次嘀嗒两个差拍的示例中,如若嘀嗒2发生异常,则仅差拍A1及A2将完成,且差拍状态值将为0010。应注意,尽管差拍状态信息的值0001及0010指示在发生异常时仅一个指令A部分地完成,但差拍状态信息仍指示多个指令群组中哪些差拍已完成,因为该状态信息标识接下来两个指令B、C中无差拍完成。
在图3的每一嘀嗒四个差拍的示例中,无论异常何时发生,差拍状态值将为0000,因为在异常发生时没有部分完成的指令,因为每一指令都在一次嘀嗒内完成。
当调试事件或异常出现时,返回地址设定为程序计数器16的当前值,该值表示最早的未完成指令的地址。因此在图6的示例中,返回地址将设定为指令A地址。返回地址可存储在多种位置,包括在堆栈上相对于堆栈指针寄存器的值的位置,或在返回地址寄存器中。
如图7所示,此赋能处理器响应于从事件返回请求(例如对从调试模式或异常处理程序返回的请求)而从一点处继续处理,该点基于差拍状态寄存器22中的返回地址及差拍状态信息而决定。从事件返回请求可由调试程序在调试事件情况下而进行,或通过异常处理程序在异常事件情况下产生。在从事件返回请求之后,待处理的指令撷取会从返回地址指示的地址处继续,该地址在此情况下对应于指令A。随后是指令B、C及D(此示例对应于图6的顶部示例)。然而,对于返回之后的前几个循环而言,被差拍状态信息指示为已完成的任何差拍均被抑制。处理器可通过完全阻止对应处理操作被执行来抑制这些差拍(例如抑制加载或存储数据的请求,或去能算术逻辑单元或乘法累积单元)。替代地,操作仍能在算术逻辑单元操作的情况下执行,但处理器可抑制操作结果的写入(亦即抑制目的向量寄存器的一部分的更新),以使得该写入不影响寄存器状态。抑制给定差拍的另一方法将设定为目的向量寄存器中对应于给定差拍的一部分的预定值(例如零)。一旦达到第四嘀嗒,则管线已到达先前出现调试事件或异常的点处,随后,处理照常继续。因此,对于异常返回之后的前几个循环而言,处理器可能不执行任何有效功,且基本上仅在原始的异常或调试事件出现时重新撷取飞行中的多个指令。然而,由于异常返回延迟对一些应用程序而言往往并不关键,因此缩短处理异常时的延迟可能是较佳折衷,且此亦有助于减少需要存储在异常上的架构状态的量,因为并非必须推测性存储未完成指令的结果。此方法亦赋能异常的处理,这些异常即为由向量指令差拍而产生的精确故障。
在一些情况下,指示多个指令群组中已完成差拍的差拍状态信息可设定为响应于发生的调试事件或异常。然而,在一些实施方式中,可能更易于每次完成指令便更新差拍状态寄存器,无论是否发生异常,以使得如若在下一嘀嗒中发生异常,则差拍状态寄存器22已指示指令群组中已完成的差拍。因此,图8是示出了当向量指令完成时更新状态的方法的流程图。在步骤50处,给定向量指令的最终差拍完成。作为响应,在步骤52处,程序计数器16更新至可指示下一未完成指令的值。在步骤54处,差拍状态信息更新以指示任何飞行中的未完成指令中的哪些差拍已完成。例如,差拍控制电路系统30可基于其排程一系列向量指令的执行的时序而设定差拍状态寄存器22。
尽管图5示出了差拍状态信息的一个示例性编码,但另一可能性是提供差拍状态信息以用作包括数个位的位映像,这些位中每一者对应于指令A、指令B、指令C等群组中的一个指令的一个差拍,每一位在对应差拍已完成时被设定为一,且在对应差拍未完成时被设定为零(或反之亦然)。然而,实际上因为当给定指令的前一差拍未完成时后一差拍不可能完成,因此无需为每一差拍提供位,且将更小位字段的某些编码分配至已完成差拍的特定组合可能更为有效,如图5中的示例所示。
图9示出了图示出响应于异常事件的示例的流程图。在步骤100处,检测到异常事件。作为响应,在步骤102处,处理电路内的异常控制电路系统触发将寄存器状态(包括标量寄存器12和向量寄存器14,以及差拍状态寄存器22的当前内容)保存至存储器中相对于存储在堆栈指针寄存器20中的堆栈指针的偏移位置。存储寄存器值的存储器位置群组被共同称作异常堆栈框架。堆栈指针表示存储器中提供的堆栈数据结构的顶部或底部(取决于实施方式选择),该数据结构用于暂时存储寄存器状态,以使得响应于异常而调用的异常处理程序能够覆写寄存器中的数据,而不会丢失被执行但正在暂停的线程的先前状态。在一些示例中,当遇到异常时,并非可将所有寄存器12、14的状态保存至堆栈上。有可能将寄存器文件划分为:通过异常处理硬件或通过在异常出现之前执行的软件线程而自动保存的“呼叫者”状态;以及“受话人”状态,该状态下,若这些寄存器将由异常处理程序覆写,则异常处理程序负责将这些寄存器保存至堆栈。此方法可能提供对软件调用指定的更佳遵守,这些指定往往需要在一些寄存器的值被重新使用之前保存这些值的功能。因此,不将这些寄存器保存为硬件异常条目处理的部分可阻止寄存器的冗余双重保存。
在步骤104处,异常堆栈框架中的返回地址位置设定为最早的未完成指令的地址。此提供返回地址,在异常处理程序完成之后,处理可分支至此返回地址以继续先前的处理。视情况,在步骤106处,标量寄存器12或向量寄存器14和/或差拍状态寄存器22中的至少一些寄存器的寄存器状态可被清除,以使得其内容对异常处理程序不可见。为保护寄存器中的安全数据,或在无需使先前执行的线程的进程对于异常处理程序为可见的情况下,此举在某些安全应用程序中可能是合乎需要的。另一方面,如若并不担忧安全性,且使先前执行状态对于异常处理程序为可见是可接受的,则可省略步骤106。
在步骤108处,异常处理硬件检测出现的异常是否是故障事件。异常事件可能包括故障事件及非故障事件。故障事件可能是由特定指令导致的一错误而触发,该特定指令由处理电路4执行。例如,如若尝试执行未定义指令,或如若因为当前执行的处理没有访问目标地址的许可或该目标地址尚未定义虚拟到实体地址的转移,而使加载/存储指令触发存储器故障,则可能触发故障。另一方面,其他种类的非故障异常可能不与特定指令关连,但可能由外部事件(例如用户按装置上的按钮,或接收到来自外部装置或接口装置的信号)或并非由正在执行的程序导致的某个其他事件触发(例如倒定时器到期以用于触发告警或提醒)。如若当前异常事件是故障事件,则在步骤110处,处理器可记录标识哪些未完成指令触发了故障的一些信息。由于上文论述的重迭执行,可能有多个在飞行中的指令,因此仅步骤104中设定的返回地址不足以标识哪些特定指令触发了故障并因此可如何处理故障,因此,记录故障指令的指示可有助于某些故障状态得以恰当处理(例如,如若有多个加载/存储指令在飞行中,则存储器故障可归因于特定指令以使该故障得以寻址,例如通过在所需地址的转换数据中进行分页)。另一方面,如若异常并非故障事件,则省略步骤110,因为异常可在不知道哪些特定指令触发了异常的情况下处理。无论异常事件为何种种类,在步骤112处,处理器对应于检测到的异常事件种类而触发至异常处理程序的分支。例如,处理器可参考基于检测到的异常种类识别符而经索引的异常向量表,且该表可提供对应异常处理程序的地址。
图10示出了图示出当从异常处理返回时执行的操作的流程图。异常处理程序可典型地以异常返回指令结束,该指令指示处理应返回至由异常中断的先前线程,或可通过分支到特别保留地址来执行从异常处理程序的返回,该处理器检测到该地址以作为异常返回请求。因此,返回指令可触发从事件返回请求。当在步骤120处检测到该种异常返回时,在步骤122处,先前保存到堆栈的寄存器状态及差拍状态信息从堆栈指针寄存器20中指示的堆栈位置处复原,并被写入寄存器文件10。在步骤124处,处理电路4继续指令的撷取,该撷取从指令的地址由异常堆栈框架中的返回地址位置所指定的该地址开始。如上所述,此是发生异常时最早的未完成指令的地址。在步骤126处,处理器使用差拍状态信息以抑制指令中由差拍状态信息指示为已完成的差拍的效应。如若重复已完成差拍,尽管一些指令可能仅再次生成相同结果,但如若执行两次给定差拍,则其他种类的指令可生成不同结果。例如,用于在给定存储器位置处原子级递增值的原子存储器更新指令若在异常被处理之前执行一次且在异常之后继续处理之后再次执行,则可能导致错误结果(导致两次递增而非一次)。因此,通过基于差拍状态信息而抑制指令中的已完成差拍,可确保进行正确的处理。同时,无论真实的硬件实施采用何种特定方式处置连续向量指令的处理,通过向差拍状态信息提供灵活性以指示多个指令群组中的已完成差拍的不同模式,此赋能架构按比例更高效地缩放至不同的效能点。
尽管图9和图10示出了使用差拍状态信息处理异常的发生和从异常继续操作的示例,但差拍状态信息亦可用于触发执行线程暂停的任何其他事件。例如,对于触发向调试模式(在该模式下,从外部调试程序注入的调试指令得以执行)的切换的调试事件,差拍状态信息可用以赋能处理以在退出调试模式之后,从多个指令的正确差拍起继续。同样,差拍状态信息可以类似方式用于触发执行线程暂停的任何其他种类的事件。
尽管在上文给定的示例中,在遇到异常时被存储至异常堆栈框架的返回地址被设定为最早向量指令的地址,因为至少一个差拍仍有待完成,但此举并非必需的。返回地址可能是使得将继续进行处理的点能够得以标识的任何地址。在一些情况下,将继续进行处理的点可从返回地址及差拍状态信息处获取。例如,返回地址可能指示至少有一个差拍已开始的最后向量指令,该返回地址连同指示哪些先前指令仅部分完成的差拍状态信息可足以在异常或其他事件处理之后赋能这些指令得以重新撷取。然而,当部分完成的指令群组内有分支时,此方法可能更为复杂。将最早的未完成指令的地址用作返回地址可简化包括分支的指令群组的处理,因为无需经由码返回以尝试标识先前跨于分支执行的指令的地址。
一般而言,上文论述的差拍状态信息指示多个向量指令中哪些差拍已完成。多个向量指令可包含至少最早的向量指令,因为至少一个差拍仍有待完成;以及至少一个后续向量指令。后续向量指令无须接续最早向量指令,例如因为可能有介于其间的标量指令。在一些情况下,因为没有充足的待执行指令,其中原本可执行向量指令的一些执行槽可能为空,因而在此情况下,差拍状态信息将对应差拍指示为未完成。
此方法实现在各种硬件实施方式中的按比例缩放。在一些情况下,处理电路可包含不足以用于并行执行给定向量指令的全部差拍的硬件。因此,在完成给定向量指令的第一差拍子集之后,处理电路可执行给定向量指令的第二差拍子集。第一及第二子集可包含单个差拍或可包含多个差拍,取决于处理器实施方式。
为提高硬件单元利用率,有可能在并行执行第二向量指令的第一差拍子集时执行第一向量指令的第二差拍子集。此举在使用不同硬件单元执行第一及第二向量指令时尤其有用。可提供控制电路系统,以在不同指令间改变一个向量指令中有多少差拍将在后续向量指令的第一差拍开始之前完成。改变运行时的排程赋能处理器以在给定的执行指令示例中响应于可用资源,以选择最适当的排程。
替代地,其他的实施方式可包含支持同时执行给定向量指令的全部差拍的硬件。尽管异常处理及调试对于该种硬件而言更为简单,指令将在发生异常或进入调试模式之时完全完成,但具有该种硬件的处理电路仍可生成及使用如上文所指定的差拍状态信息,但差拍状态信息将通常指示最早的未完成指令没有已完成的差拍;此时,处理暂停(图5中的“无效”情况)。因此,通过定义差拍状态信息,架构可支持各种不同的实施方式。
在一些系统中,差拍状态信息可为处理器用以确定如何继续处理的内部状态,但不可由使用者或在处理器上执行的软件访问。
然而,在其他的示例中,差拍状态信息对于处理电路正在执行的软件、异常处理程序、以及调试程序中至少一者可为完全可见,且曝露于上述软件、异常处理程序、以及调试程序。
视情况,处理电路可被排列以将差拍状态信息保存至堆栈指针寄存器指示的数据存储库中的位置,且必要时响应于异常事件而清除差拍状态信息以使差拍状态信息隐藏于异常处理程序。特定而言,在支持多个安全状态(包括至少一安全状态及安全性较低状态)的系统中,如若异常事件导致安全状态转变至安全性较低状态,则处理电路可响应于异常事件而清除差拍状态信息。
又一选项是处理电路响应于第一异常事件而去能对于差拍状态信息的访问,且响应于异常事件重新赋能访问。如若异常处理程序尝试访问差拍状态信息,或执行包括多个处理差拍的又一向量指令,则差拍状态信息可被迟缓地保存至预定位置。迟缓保存此信息可由处理电路,或由巢套第二异常处理程序自动地执行,该巢套第二异常处理程序由第一异常处理程序的访问差拍状态信息或者执行向量指令的尝试所触发。尽管更为复杂,但此迟缓保存方法可减少在发生异常时要保存的信息量,且因此缩短进入时间十分关键的异常处理程序所耗的时间。
支持如上所论述的向量指令的重迭执行可有助于赋能架构在不同效能点以各种硬件实施方式执行。然而,在执行标量-向量混合指令时可导致一些问题,这些指令涉及标量寄存器文件12和向量寄存器文件14。尽管向量指令一般指定一个或更多个源寄存器及目的寄存器,但其中至少一者是向量寄存器14;这些向量指令的子集是标量-向量混合指令,该子集的一个或更多个源寄存器中的另一者及该目的寄存器是标量寄存器12。图2和图3中示出的类型的重迭执行一般用于纯向量指令,因为相依性趋于留在同一向量处理路径内,无需跨路径相依性。此意谓有可能同时执行不同指令的不同差拍,而不引入由相依性所引起的危险。可能有一些种类的需要跨路径操作的向量指令,如排列指令,及重迭执行不可用于这些指令,但一般而言,大多数向量指令可保留在路径中且可使用重迭技术。
然而,利用标量-向量混合指令,标量值与向量处理路径中的每一路径之间往往存在相依性。例如,当标量寄存器是标量-向量混合指令的源寄存器时,向量处理路径的每一路径可能取决于标量寄存器中的同一标量值。此类标量-向量混合指令的示例可为加载/存储指令,该指令使用标量寄存器以存储指针以用于决定目标地址,该目标地址将用于每一向量路径中的加载/存储操作。另一方面,当标量寄存器是标量-向量混合指令的目的寄存器时,处理电路可生成标量结果以存储至标量寄存器,该标量结果取决于每一向量处理路径的结果。此类指令的示例可为乘法累积指令,此指令在每一路径中执行元素对的乘法且将每一路径的乘法结果累积至标量累加寄存器内。在一些情况下,同一标量寄存器可通过标量-向量混合指令而用作源寄存器及目的寄存器两者。例如,加载/存储指令可使用标量寄存器作为指向所需地址的指针,但亦可基于给定递增更新指针,以确保后续加载/存储指令使用不同的地址。标量寄存器可为来源及目的地的另一示例是乘法累积指令在标量寄存器中的先前值上增添值,而非覆写先前的值。指针更新可在当前加载指令的地址计算得出之前或之后执行。
图11和图12示出了松弛执行的两个示例,该松弛执行可在两个标量-向量混合指令利用重迭执行时发生。在图11的示例中,向量加载(VLDR)指令随后是向量乘法累积(VMLA)指令。因此,在此示例中,第一标量-向量混合指令(VLDR)具有源寄存器,该源寄存器是标量寄存器R0,而第二指令具有目的寄存器R0或R3,该寄存器亦是标量寄存器。对于当前处理结果,第二指令的结果不应影响第一指令的源操作数,亦即较新指令不应影响更早指令的输入。因此,应认为,特定标量寄存器被用作第二指令的目的寄存器,该指令不应影响第一指令的结果。
然而,如图11所示,当两个指令的执行重迭(在此示例中是每一嘀嗒两个差拍重迭)时,VMLA指令在VLDR指令的最终差拍A4已完成的前开始在差拍B1中更新标量寄存器。如若VMLA指令的目的标量寄存器R3不同于如在图11的底部示例中的VLDR指令的源寄存器R0,则VMLA指令不影响加载结果,及差拍A4中执行的加载操作与乘法累积的结果无关。此是正确的结果。然而,如若VMLA指令指定同一标量寄存器R0为VLDR指令,则如图11的顶部示例中所示,加载地址将取决于在VMLA指令的差拍B1中执行的乘法累积操作,以使得第二指令影响第一指令的结果。因此,VLDR指令的差拍A4可提供完全不同的结果(从不同地址加载),这些结果取决于后续VMLA指令是否指定同一标量寄存器。此外,因为VLDR及VMLA重迭量可取决于数个因子,诸如处理电路的实施方式及运行时的可用资源,因此当代码写入或编译时,不可决定VLDR结果是否被后续VMLA破坏。该种不确定性将被视作不合需要及不正确的。
另一方面,在图12的示例中,VMLA指令在VLDR指令之前出现。因此,此时第一标量-向量混合指令具有目的寄存器且第二标量-向量混合指令具有源寄存器,该目的寄存器是标量寄存器,且该源寄存器是标量寄存器。此时,尽管将预期第二指令应取决于第一指令,但重迭执行可能致使第二指令的结果取决于在第一与第二标量-向量混合指令之间执行了多少介入指令。例如,在图12顶部的示例中,介入指令数目是零,因此VLDR的第一差拍B1与VMLA的第二差拍A2并行执行(此示例每次嘀嗒使用一个差拍)。因此,仅VMLA的第一差拍A1在VLDR的差拍B1之前完成,因此VLDR的目标地址将取决于在VMLA指令差拍A1中相乘的元素Q3[1]、Q4[1]的乘积。另一方面,在底部示例中,有一个介入VORR指令,以使得VLDR现在是指令C。此时,VLDR的第一差拍C1与VMLA的差拍A3同时执行,且因此在加载的差拍C1中计算得出的目标地址取决于VMLA前两个差拍的累积(亦即Q3[1]*Q4[1]+Q3[2]*Q4[2]),所以与图12的顶部示例相比,其将从不同的地址加载。
图12的示例将皆被视作不正确,因为加载的正确处理结果将在R0具有值,该值对应于从乘法累积的差拍A1到A4中执行的全部累积的结果。然而,亦被视作不合需要且导致不正确的处理结果的是使给定指令的结果取决于多少介入指令将该给定指令与其依据的指令分隔开。
有多种方法以用于解决此问题。一个方法将是决不重迭标量-向量混合指令的执行。然而,因为对于一些实际应用(例如数字信号处理(DSP))而言,标量-向量混合指令可表示执行向量指令的总数目的显著部分,所以阻止标量-向量混合指令的重迭执行可能首先使重迭向量指令执行的大部分优势无效。此可能导致诸如乘法累积单元或加载/存储单元的硬件区块在大部分时间内闲置,如此降低处理器效率。在多数情况下,连续的标量-向量混合指令不会涉及相同标量寄存器,且在此情况下,重迭执行是可接受的。因此,在可能时将需要赋能此重迭执行。
另一方法可为减少提供于指令集架构中的标量-向量混合指令的数目,以使得大部分向量指令即使在生成标量结果或使用标量操作数的情况下亦从向量文件读取其标量值,或对向量文件写入其标量值;以及单独提供有限数目的种类的标量-向量混合指令,以用于在标量与向量寄存器文件12、14之间转移数据。然而,限制向量指令以仅使用向量寄存器文件会增大向量寄存器文件14的存储容量压力与读取/写入埠压力,此可能影响处理器的效能、面积与功率。因此,继续支持合理数目的标量-向量混合指令可为合乎需要的。
另一方法可为在硬件中提供寄存器相依性检查电路系统,以用于比较由各个标量-向量混合指令指定为标量寄存器的寄存器,于是当一对标量-向量混合指令之间存在同一标量寄存器上的相依性时阻止重迭执行。然而,尤其对于相对低功率的实施方式而言,提供该种相依性检查电路系统可对装置总功耗及电路面积产生显著影响,因为比较器可能在门极计数方面造价相对昂贵。
实际上,在使用向量指令的正规程序代码中,得到具有诸如图11和图12中图示者的标量相依性的机会极少。图11和图12是格外不实际的示例,因为极不可能有人想将乘法之和写入被用作针对负载的指针的寄存器,或从乘法累积指令先前生成的地址加载数据。此指针值及累积的混合从代码观点来看简直毫无意义,且作为不确定性示例而被阐明,该不确定性可能产生于指令的重迭执行。
实际上,本发明者承认更高效的微型架构是可得以构建的,前提是允许某种标量-向量混合指令的组合以产生未知的结果,而这些结果可能是不正确的。因此,图11和图12中示出的两个松弛执行示例在以下情况下是允许的:第一及第二标量-向量混合指令出现时,其间的介入指令数目少于预定数目。本发明者认为,实际上,代码极少包括该种指令组合,因此提供昂贵的相依性检查电路系统以防止该种罕见情况是浪费电力及面积的。实际上,更高效的技术可用以确保在很可能出现相依性的少数情况下可达成正确结果。通过提供允许结果在其他相关情况中为“未知”的指令集架构,整体微型架构硬件实施方式可更为高效。随后,依靠程序人员避免写入落入可能出现未知结果的困境的码(如下所述,架构可定义一些相对简单的规则以指导程序人员避免该种情况),以使得处理硬件自身无需检查这些问题。
因此,当执行包括第一标量-向量混合指令(指定第一标量寄存器)及后续标量-向量混合指令(指定第二标量寄存器)的指示序列时,且第一及后续标量-向量混合指令之间的介入指令数目少于预定数目,处理器可以以下方式之一支持松弛执行:
其中,第一标量寄存器是源寄存器且第二标量寄存器是目的寄存器,处理电路被配置为允许该第一及后续标量-向量混合指令的重迭执行以生成该第一标量-向量混合指令的结果,该结果取决于第二标量寄存器是否与该第一标量寄存器为同一寄存器而有所不同(如图11的示例中所示);
其中,第一标量寄存器是目的寄存器且该第二标量寄存器是源寄存器,且该第一标量寄存器及该第二标量寄存器是同一寄存器(第一与后续标量-向量混合指令之间的介入指令数目等于或少于预期数目),处理电路被配置为允许该第一及后续标量-向量混合指令的该重迭执行,以生成该第二标量-向量混合指令的结果,该结果取决于第一与后续标量-向量混合指令之间的介入指令数目而有所不同(如图12的示例所示)。
此方法极有悖于直觉,因为据预期,此方法将在执行给定指令集的结果中导致不正确的处理结果及不确定性,因为结果可取决于特定的微型架构实施方式选择重迭指令执行的特定方式。然而,通过允许此不确定性,此提供更大自由以改变微型架构及避免相依性检查支出。无论如何,在这些类型的标量-向量混合指令的实用真实世界应用中,程序人员极不可能希望使用发生松弛执行的情况。
注意,在上述所列两个松弛执行示例中的第一个示例中,当第一标量寄存器是源寄存器且第二标量寄存器是目的寄存器时,第一标量寄存器亦可为目的寄存器。同样地,第二标量寄存器可为源寄存器及目的寄存器。或者,在其他的示例中,第一标量寄存器可能仅为源寄存器,并非目的寄存器;或第二标量寄存器可能仅为目的寄存器,并非源寄存器。同样地,在第一标量寄存器是目的寄存器且第二标量寄存器是源寄存器的松弛执行的第二示例中,第一标量寄存器亦可是源寄存器,且第二标量寄存器亦可是目的寄存器。因此,指定特定的标量寄存器是源寄存器或目的寄存器,并不排除标量寄存器亦可为另一类寄存器。
当第一及后续标量-向量混合指令中的至少一者是算术指令时,此方法尤其有用。
实际上,真码中的标量-向量混合指令之间最常见的真实相依性是当来自相关群组的多个指令具有寄存器相依性时出现的。例如,数个存储器指令可能使用相同指针值,或数个乘法累积指令可能累积至同一累积寄存器内,如图14的示例所示。如图13中所示,处理电路4可能包括对应于不同指令类别的数个不同硬件单元200、202、204、206。例如,硬件单元可包括用于执行存储器指令的加载存储单元200、用于执行任何涉及乘法的指令的乘法累积单元202、用于执行除乘法外其他的算术或逻辑指令的算术逻辑单元,及用于执行浮点指令的浮点单元206。因此,指令可根据哪些硬件单元被设计为执行这些指令而经分类。
在此情况下,当同一类别中有多个指令有待执行时,第二指令直到第一指令完成后才能够开始,因为存在针对相同执行资源的竞争。因此,在此情况下,具有自然管线结构的危险能够消除寄存器相依性,无需额外的相依性检查电路系统来比较每一指令的寄存器说明符。因此,该架构可定义不同指令类别,并要求图11或图12中示出类型的松弛执行应在第一及第二标量-向量混合指令皆来自同一类别时被阻止。用于检查指令类别的硬件往往可比用于比较不同指令的寄存器说明符的硬件需要更少的额外负担(因为指令解码器6可能已需要运算码的解码,以便控制硬件单元200、202、204、206中哪一硬件单元处理指令),因此此方法可更具面积及功率效率。
特定的类别定义可针对不同实施例而不同。尽管图13示出了具有四个执行单元的示例,该四个执行单元可被映像到对应于存储器访问指令、乘法指令、非乘法算术指令及浮点指令的四个类别,但类别可扩大为包含其他指令,或这些类别中一者或更多者可能被省略或与另一类别组合。同时,一些向量指令可能不被分配给任何特定类别,以使得其执行可与其他向量指令重迭,无论其具有何种类型。
例如,在可能出现于真实码中的最常见的向量指令之间的标量相依性情况下,两个乘法指令或两个加载指令可使用相同标量寄存器,且因此可足够简单地定义包括至少一加载指令的第一类别及包括至少一乘法指令的第二类别(包括乘法累积)。任何其他向量指令可作为可重迭指令处理,无论其具有何种类型。阻止数个乘法指令或数个加载重迭可足以解决最常见的真实相依性。
更一般而言,处理电路可支持不同类别的标量-向量混合指令,且处理电路可阻止来自同一类别的第一及后续标量-向量混合指令的松弛执行。尽管阻止松弛执行的一个方式可阻止指令重迭,但另一方法可重新映像哪一寄存器是由指令中一个或其他者所指定的,以便这些指令不再彼此相依。例如,在图18中示出的第一标量-向量混合指令使用标量寄存器作为源寄存器(但标量寄存器并未被第一标量-向量混合指令用作目的寄存器)且第二指令使用标量目的寄存器的情况下,可通过以下方式来阻止松弛执行:从第一指令所参考的第一标量寄存器复制标量值到第二指令未参考的另一第三标量寄存器,以使得指令现在指向不同的寄存器。另一方面,此寄存器重新映像亦可在电路面积方面需要一些负担,因此在多数情况下,通过避免这些指令的重迭执行可更高效简单地阻止松弛执行。
尽管这些类别可一般对应于使用相同硬件电路单元的指令类别,但可能有对应于两个或两个以上不同的硬件单元的一些类别。例如,如若指令群组并不足够常见以确保自成一类,实则这些指令可使用任何其他数目的不同硬件电路单元来执行,则该指令群组可分类为“其他”。给定实施方式选择在不同硬件单元上执行各种不同指令的特定方式是微型架构级别的实施方式选择,因此,架构可根据可能的实施方式而简单定义类别,无需考虑实际使用的特定硬件单元。
图15和图16示出了可用于程序代码级别的其他技术以确保两个标量-向量混合指令之间的相依性得以满足。如图15所示,一旦两个标量-向量混合指令被充足数目的介入指令分隔开,则这些标量-向量混合指令之间将没有重迭,且因此将满足相依性要求。确保分隔的介入指令预定数目将取决于特定的微型架构实施方式。例如,在每次嘀嗒处理一个差拍并交迭连续向量指令执行达一个差拍的实施方式中,介入指令的预定数目是N-1(其中N是每一向量指令的差拍数目),例如在上述示例情况下,4差拍向量有3个介入指令。更一般而言,对于单次发出指令的系统,其中向量指令使用2J个处理差拍进行处理,其中J是大于或等于1的整数;以及在重迭执行中,处理电路并行执行第二向量指令的第一差拍与第一向量指令的第(2k+1)个差拍,其中K是整数且0≤K<J,则介入指令的预定数目可为(2(J-K)-1)。对于支持二重发出的系统,介入指令的预定数目可更大。
因此,一般而言,指令的预定数目是两个连续标量-向量混合指令之间的介入指令的最小数目,此数目确保第一标量-向量混合指令中的任何差拍都不可能与第二标量-向量混合指令中的差拍重迭。为向程序人员或编译者提供两个指令的相依性将被承诺的某种确定性,指令集架构可为介入指令的预定数目指定某一最小值,且顺应该架构的微型架构应提供电路系统以用于确保当指令被至少该数目的指令分隔开时,结果是正确且可重复的。然而,此向微型架构给予自由以在程序人员通过数目少于预定数目的指令分隔两个不同类别的标量-向量混合指令时允许不确定结果。
因此,程序人员或编译者可确保两个相关标量-向量混合指令将通过在其间包括至少最小数目的介入指令来满足其相依性,如架构所指定。由于在多数情况下,相关的标量-向量混合指令将通过充足指令而隔开,因此在指定指令更靠近时提供寄存器相依性检查电路系统以防止偶然情况往往是不合理的。
另一方面,如若需要向相关的标量-向量混合指令之间提供数目少于预定数目的介入指令,在这些指令并非如图13和图14所论述的属于同一类别的情况下,则架构亦可能提供重迭隔离指令CSB,该指令可包括在程序代码中以迫使硬件承诺隔离各侧的两个标量-向量混合指令之间的相依性。因此,当存在介入的重迭隔离指令时,处理电路可阻止隔离各侧的标量-向量混合指令的松弛执行,方式是通过阻止重迭或通过重新映像寄存器说明符。
不同的实施方式可以不同方式处理隔离指令。在每一嘀嗒单个差拍的微型架构中,如图2的顶部示例中所示,可提供一些电路系统以检测隔离指令及在管线中插入充足气泡,以允许第二指令在第一指令完成后开始。对于如图2的第二示例所示的双重差拍微型架构而言,单个气泡可能足够,因为两次嘀嗒各处理一半指令,因此可通过执行不操作指令操作来实施隔离指令。对于具有充足执行资源以在一个嘀嗒中执行整体向量操作的四重差拍微型架构而言,无需任何减速或衬垫便将满足相依性,因此更高效能的微型架构不会实际需要对隔离指令采取任何操作,且可在管线早期(例如在撷取或解码阶段)简单地消除隔离指令以改良效能。因此,尽管写入架构的码可包括隔离指令(假如该隔离指令正以重迭向量指令的实施方式执行),但其他微型架构可能不需要实际地注入不操作(no-op)指令且可忽略隔离。
因此,在极罕见的情况下,当程序人员真的希望提供取决于共同的标量寄存器及通过数目少于预定数目的介入指令分隔开的不同类别的标量-向量混合指令时,可使用隔离。基本上,该架构可指定如若程序人员或编译者希望通过少于指令给定数目的指令来分隔指令,其应使用隔离,否则将面临不确定结果的风险。
图17示出了图示出图处理标量-向量混合指令的方法的流程图。在步骤250处,指令解码器检测待处理的指令是否是标量-向量混合指令。如若不是,则根据适合于该类指令的处理来处理该指令。如若指令是标量-向量混合指令,则在步骤252处,差拍控制电路系统30检测是否有先前的未完成标量-向量混合指令,且该指令是否来自与当前标量-向量混合指令相同的类别。请注意,先前的标量-向量混合指令可能尚未开始执行,因为指令检测及差拍排程可能在管线早期阶段发生。替代地,先前的标量-向量混合指令可能部分地执行。
如若有未完成的标量-向量混合指令来自同一类别,则在步骤254处,差拍控制电路系统30采取操作以阻止图11和图12的示例中示出的形式的松弛执行。此操作可能延迟当前标量-向量混合指令的排程以在先前的标量-向量混合指令完成后执行,以此阻止指令重迭。替代地,在当前标量-向量混合指令指定第二标量寄存器为目的寄存器,先前标量-向量混合指令指定第一标量寄存器为源寄存器,且先前标量-向量混合指令尚未开始执行的情况下,操作可包含从第一标量寄存器将值写入不同于第二标量寄存器的第三标量寄存器,且通过使用第三标量寄存器代替第一标量寄存器来执行先前的标量-向量混合指令。请注意如若当前的标量-向量混合指令与先前的标量-向量混合指令来自相同类别,则在步骤254处采取响应操作,无论先前及当前标量-向量混合指令指定的标量寄存器是否实际为同一寄存器,以此防止指定寄存器为同一寄存器,因为硬件中不提供相依性检查电路系统以比较寄存器参考。
在步骤256处,差拍控制电路系统亦检查先前的标量-向量混合指令与当前的标量-向量混合指令之间是否已遇到重迭隔离指令。如若已遇到,则在步骤254处再次采取回应操作,通过重新映像寄存器参考或通过阻止重迭执行以避免松弛执行。尽管图17示出了步骤252和256是连续执行的,且类别检查步骤252在重迭隔离指令检查步骤之前执行,但这些步骤亦可以相反次序或彼此同时执行。
如若先前及当前标量-向量混合指令并非来自同一类别(或来自未对重迭执行施加限制的“其他”指令类型),且两者之间没有重迭隔离指令,则在步骤258处允许重迭执行,即使松弛执行导致图11和图12中示出的类型的未知结果。
总而言之,通过松弛对来自向量指令的标量寄存器更新的相依性检查,及反之更多依靠如上文论述的一些轻型架构机制,可在无需额外检查硬件的情况下满足真实的相依性,以便比较可赋能更高效的实施方式的寄存器说明符。
图19图示出可使用的虚拟机实施方式。尽管本发明早期描述的实施例根据用于操作支持所涉技术的特定处理硬件的装置及方法来实施本发明,但亦有可能提供硬件装置的所谓虚拟机实施方式。这些虚拟机实施方式在主机处理器150上运行,该主机处理器150在支持虚拟机程序130的主机操作系统140上运行。通常,大型高功率处理器需要提供以合理速度执行的虚拟机实施方式,但该种方法在某些环境中可能被调整,如在需要运行另一处理器的本地码以获得兼容性的情况下,或出于再使用原因。虚拟机程序130向客程序120提供虚拟硬件接口,该接口与将由实际硬件提供的硬件接口相同,该实际硬件是通过虚拟机程序130模型化的装置。由此,程序指令(包括上述对存储器访问的控制)可通过使用虚拟机程序130而在客程序120内执行,以对其与虚拟机硬件的交互模型化。客程序120可为原样金属程序,或可为以与主机操作系统140运行虚拟机应用程序130的相似方式运行应用程序的客操作系统。亦将理解,有不同类型的虚拟机,且在一些类型中,虚拟机直接在主机硬件150上运行,无需主机操作系统140。
示例配置在以下条款中阐述:
(1)一种装置,包括:
处理电路,用以处理向量指令,用于这些向量指令的源操作数和结果值中的至少一者是包括多个数据元素的向量值;
其中,响应于给定向量指令,该处理电路被配置为执行多个处理差拍,每一差拍包括对应于该向量值的一部分的处理;
该处理电路被配置为设定差拍状态信息,该状态信息指示包括该给定向量指令的多个向量指令中的哪些差拍已完成;以及
响应于事件,该处理电路被配置为暂停该给定向量指令的处理;以及
响应于从事件返回请求,该请求指示返回至该给定向量指令的处理,该处理电路被配置为继续该多个向量指令的处理,同时抑制由该差拍状态信息指示为已完成的该多个向量指令的差拍。
(2)如条款(1)所述的装置,其中,该处理电路被配置为设定返回地址,该返回地址指示该多个向量指令中的一者的地址;以及
响应于从事件返回请求,该处理电路被配置为标识这样的点,处理将基于返回地址及该差拍状态信息而从此点处继续。
(3)如条款(2)所述的装置,其中,该返回地址指示最早向量指令的地址,该最早向量指令的至少一个差拍仍待完成。
(4)如任一先前条款所述的装置,其中,多个向量指令包含最早向量指令,该向量指令的至少一个差拍仍有待完成;以及至少一个后续向量指令。
(5)如任一先前条款所述的装置,其中,处理电路包括硬件,该硬件不足以并行执行给定向量指令的全部多个差拍。
(6)如任一先前条款所述的装置,其中,处理电路被配置为在给定向量指令的多个差拍的第一子集完成之后,执行给定向量指令的多个差拍的第二子集。
(7)如条款(6)所述的装置,其中,该处理电路被配置为并行执行第一向量指令的第二差拍子集与第二向量指令的第一差拍子集。
(8)如任一先前条款所述的装置,包括控制电路系统,以在不同指令间改变一个向量指令中有多少差拍将在后续向量指令的第一差拍开始之前完成。
(9)如条款(1)至(4)、(6)及(7)中任一条所述的装置,其中,处理电路包括硬件,该硬件被配置为支持并行执行给定向量指令中的全部多个差拍。
(10)如任一先前条款所述的装置,其中,该向量值包括数据元素,这些数据元素具有由数据元素大小信息指定的多个数据元素大小中的一者,处理电路可访问该数据元素大小信息;以及
每一处理差拍包括对应于向量值的一固定大小部分的处理,无论该数据元素大小信息指示何种数据元素大小。
(11)如任一先前条款所述的装置,其中,处理电路被配置为使处理电路执行的软件、异常处理程序及调试程序中的至少一者可访问该差拍状态信息。
(12)如任一先前条款所述的装置,其中,该事件包括调试事件,且该从事件返回请求包括从调试状态返回。
(13)如任一先前条款所述的装置,其中,该事件包括异常事件,且该从事件返回请求包括异常返回。
(14)如条款(13)所述的装置,其中,该异常事件包括故障事件,且响应于该故障事件,该处理电路被配置为设定标识该多个向量指令中的哪一者是检测到该故障事件的该给定向量指令。
(15)如条款(13)及(14)中任一条所述的装置,其中,响应于该异常事件,该处理电路被配置为去能对该差拍状态信息的访问;以及
响应于尝试访问该差拍状态信息的指令或包括多个处理差拍的又一向量指令的至少一种的执行,该处理电路被配置为:
保存该差拍状态信息到一预定位置;或
产生第二异常事件。
(16)如条款(13)及(14)中任一条所述的装置,其中,响应于异常事件,处理电路被配置为相对于堆栈指针寄存器指示的值以一偏移量将差拍状态信息保存到数据存储装置中的一位置。
(17)如条款(16)所述的装置,其中,该处理电路可在多个安全状态下操作,包括至少一安全状态及安全性较低状态,其中回应于导致从该安全状态到该安全性较低状态的转变的异常事件,处理电路被配置为清除差拍状态信息。
(18)如任一先前条款所述的装置,其中,该处理电路被配置为通过以下各者中的一者抑制给定处理差拍:
抑制目的向量寄存器中对应于该给定处理差拍的一部分的更新;以及
抑制关联于该给定处理差拍的处理操作。
(19)一种装置,包括:
用于处理向量指令的构件,用于这些指令的源操作数和结果值中的至少一者是包括多个数据元素的向量值;
其中,响应于给定向量指令,该用于处理的构件被配置为执行多个处理差拍,每一差拍包括对应于向量值中的一部分的处理;
该用于处理的构件被配置为设定差拍状态信息,该信息可指示包括该给定向量指令的多个向量指令中哪些差拍已完成;以及
响应于事件,该用于处理的构件被配置为暂停该给定向量指令的处理;以及
响应于从事件返回请求,该请求指示返回该给定向量指令的处理,该用于处理的构件被配置为继续该多个向量指令的处理,同时抑制由该差拍状态信息指示为已完成的该多个向量指令的差拍。
(20)一种处理向量指令的方法,用于这些向量指令的源操作数和结果值中的至少一者是包括多个数据元素的向量值;该方法包括:
响应于给定向量指令,执行多个处理差拍,每一差拍包括对应于向量值中的一部分的处理;
设定差拍状态信息,该状态信息可指示包括该给定向量指令的多个向量指令中哪些差拍已完成;以及
响应于事件,暂停该给定向量指令的处理;以及
响应于从事件返回请求,该请求指示返回至该给定向量指令的处理,继续该多个向量指令的处理,同时抑制由该差拍状态信息指示为已完成的该多个向量指令的差拍。
(21)一种虚拟机计算机程序,该计算机程序包括程序指令,这些程序指令用以控制主机数据处理装置以提供对应于根据条款(1)到(18)中任一条所述的装置的指令执行环境。
(22)一种装置,包括:
处理电路,用以处理指定一个或更多个源寄存器及目的寄存器的向量指令,其中,该目的寄存器及该一个或更多个源寄存器中的至少一者是用于存储包括多个数据元素的向量值的向量寄存器;
其中,向量指令包括至少一种标量-向量混合指令,用于该指令的该目的寄存器及该一个或更多个源寄存器中的另一者是用于存储标量值的标量寄存器,该标量值包括单个数据元素;
响应于给定向量指令,该处理电路被配置为执行多个处理差拍,每一差拍包括对应于向量值中的一部分的处理;
该处理电路被配置为支持第一向量指令及第二向量指令的重迭执行,其中,第一向量指令的至少一个差拍与第二向量指令的至少一个差拍并行执行;以及
响应于指令序列,该指令序列包括指定第一标量寄存器的第一标量-向量混合指令及指定第二标量寄存器的后续标量-向量混合指令,且第一及后续标量-向量混合指令之间的介入指令数目少于预定数目,该处理电路被配置为支持包括以下各者中至少一者的松弛执行:
其中,该第一标量寄存器是源寄存器且该第二标量寄存器是目的寄存器,处理电路被配置为允许该第一及后续标量-向量混合指令的该重迭执行以生成该第一标量-向量混合指令的结果,该结果取决于第二标量寄存器是否与该第一标量寄存器为同一寄存器而有所不同;以及
其中,该第一标量寄存器是目的寄存器且该第二标量寄存器是源寄存器,且该第一标量寄存器与该第二标量寄存器是相同寄存器,该处理电路被配置为允许该第一及后续标量-向量混合指令的该重迭执行,以生成该第二标量-向量混合指令的结果,该结果取决于第一与后续标量-向量混合指令之间的介入指令数目而不同。
(23)如条款(22)所述的装置,其中,该第一及后续标量-向量混合指令中的至少一者是算术指令。
(24)如条款(22)及(23)中任一条所述的装置,其中,处理电路被配置为支持多个不同类别的标量-向量混合指令的处理;以及
处理电路被配置为在第一及后续标量-向量混合指令皆来自同一类别标量-向量混合指令时阻止第一后续标量-向量混合指令的该松弛执行。
(25)如条款(24)所述的装置,其中,处理电路被配置为通过阻止该第一及后续标量-向量混合指令的该重迭执行而阻止该松弛执行。
(26)如条款(24)及(25)中任一条所述的装置,其中,在该第一标量寄存器是源寄存器且该第二标量寄存器是目的寄存器的情况下,处理电路被配置为通过从第一标量寄存器复制标量值到第三标量寄存器,并通过使用该第三标量寄存器作为源寄存器以替代该第一标量寄存器来执行该第一标量-向量混合指令的至少一个差拍来阻止该松弛执行。
(27)如条款(24)到(26)中任一条所述的装置,其中,处理电路被配置为通过使用相同硬件电路单元处理来自同一类别的标量-向量混合指令。
(28)如条款(27)所述的装置,其中,处理电路将通过使用不同的硬件电路单元处理来自至少一些不同类别的标量-向量混合指令。
(29)如条款(24)到(28)中任一条所述的装置,其中,标量-向量混合指令的该多个类别包括至少:
第一类别,包括至少一加载指令;以及
第二类别,包括至少一执行乘法的指令。
(30)如条款(24)到(29)中任一条所述的装置,其中,该多个标量-向量混合指令的类别包括至少:
第一类别,包括至少存储器访问指令;
第二类别,包括至少一执行乘法的指令;以及
以下各项中的至少一者:
等三类别,包括至少一非乘法算术指令;以及
第四类别,包括至少一浮点指令。
(31)如条款(22)到(30)中任一条所述的装置,其中,处理电路被配置为在该第一与后续标量-向量混合指令之间的介入指令是重迭隔离指令时,阻止该第一及后续标量-向量混合指令的该松弛执行。
(32)如条款(31)所述的装置,其中,在该第一标量寄存器是源寄存器且该第二标量寄存器是目的寄存器的情况下,处理电路被配置为通过从第一标量寄存器复制标量值到第三标量寄存器,并通过使用该第三标量寄存器作为源寄存器以替代该第一标量寄存器来执行该第一标量-向量混合指令的至少一个差拍来阻止该松弛执行。
(33)如条款(31)及(32)中任一条所述的装置,其中,处理电路被配置为执行该重迭隔离指令,以作为至少一个不操作指令操作。
(34)如条款(22)到(33)中任一条所述的装置,其中,响应于所述标量寄存器是所述源寄存器的一者的标量-向量混合指令,处理电路被配置为执行该多个处理差拍中的每一者,此取决于该标量寄存器中的标量值。
(35)如条款(22)到(34)中任一条所述的装置,其中,响应于该标量寄存器是目的寄存器的标量-向量混合指令,将写入该标量寄存器的标量结果值取决于该多个处理差拍中的每一者的结果。
(36)如条款(22)到(35)中任一条所述的装置,其中,对于至少一种标量-向量混合指令,该标量寄存器为源寄存器及目的寄存器两者。
(37)如条款(22)到(36)中任一条所述的装置,其中,处理电路包括硬件,该硬件不足以并行执行给定向量指令的全部多个差拍。
(38)如条款(22)到(37)中任一条所述的装置,其中,在该重迭执行中,处理电路被配置为并行执行该第二向量指令的第一差拍子集与该第一向量指令的第二差拍子集。
(39)如条款(22)到(38)中任一条所述的装置,其中,该多个处理差拍包含2J个处理差拍,其中,J是大于或等于1的整数;
在该重迭执行中,处理电路被配置为并行执行该第二向量指令的第一差拍与该第一向量指令的第(2k+1)个差拍,其中,K是整数且0≤K<J;以及
该介入指令的预定数目包括(2(J-K)-1)。
(40)如条款(22)到(39)中任一条所述的装置,其中,该向量值包括数据元素,这些数据元素具有由数据元素大小信息指定的多个数据元素大小中的一者,处理电路可访问该数据元素大小信息;以及
每一处理差拍包括对应于向量值的一固定大小部分的处理,无论该数据元素大小信息指示何种数据元素大小。
(41)一种装置,包括:
用于处理向量指令的构件,这些指令指定一个或更多个源寄存器及目的寄存器,其中,该目的寄存器及该一个或更多个源寄存器中的至少一者是用于存储包括多个数据元素的向量值的向量寄存器;
其中,向量指令包括至少一种标量-向量混合指令,用于该指令的该目的寄存器及该一个或更多个源寄存器中的另一者是用于存储标量值的标量寄存器,该标量值包括单个数据元素;
响应于给定向量指令,该用于处理的构件被配置为执行多个处理差拍,每一差拍包括对应于向量值中的一部分的处理;
该用于处理的构件被配置为支持第一向量指令及第二向量指令的重迭执行,其中,第一向量指令的至少一个差拍与第二向量指令的至少一个差拍同时执行;以及
响应于指令序列,该指令序列包括指定第一标量寄存器的第一标量-向量混合指令及指定第二标量寄存器的后续标量-向量混合指令,且第一与后续标量-向量混合指令之间的介入指令数目少于预定数目,该用于处理的构件被配置为支持包括以下各者中的至少一者的松弛执行:
其中,该第一标量寄存器是源寄存器且该第二标量寄存器是目的寄存器,该用于处理的构件被配置为允许该第一与后续标量-向量混合指令的该重迭执行以生成该第一标量-向量混合指令的结果,该结果取决于第二标量寄存器是否与该第一标量寄存器为同一寄存器而有所不同;以及
其中,该第一标量寄存器是目的寄存器且该第二标量寄存器是源寄存器,且该第一标量寄存器与该第二标量寄存器是相同寄存器,该用于处理的构件被配置为允许该第一及后续标量-向量混合指令的该重迭执行,以生成该第二标量-向量混合指令的结果,该结果取决于第一与后续标量-向量混合指令之间的介入指令数目而不同。
(42)一种虚拟机计算机程序,该计算机程序包括程序指令,这些程序指令用以控制主机数据处理装置以提供对应于根据条款(22)到(40)中任一条所述的装置的指令执行环境。
在本申请中,使用用语“被配置为”以意指装置的组件具有能够执行所定义操作的配置。在此上下文中,“配置”意指硬件或软件的互连布置或方式。例如,装置可具有提供所定义操作的专用硬件,或者处理器或其他处理装置可被程序化以执行该功能。“被配置为”并不暗指装置组件需要以任何方式改变以便提供所定义操作。
尽管本文已参考所附附图详细地描述本发明的说明性实施例,但应理解,本发明并不限于这些精确实施例且本领域技术人员可在不脱离如所附权利要求所定义的本发明的范围和精神的情况下在其中实施各种改变、添加及修改。

Claims (20)

1.一种处理向量指令的装置,包括:
处理电路,用以处理向量指令,用于这些向量指令的源操作数和结果值中的至少一者是包括多个数据元素的向量值;
其中,响应于给定向量指令,所述处理电路被配置为执行多个处理差拍,每一差拍包括对应于所述向量值中的一部分的处理;
所述处理电路被配置为设定差拍状态信息,该状态信息指示包括所述给定向量指令的多个向量指令中哪些差拍已完成;
其中,所述差拍状态信息的编码标识所述给定向量指令的第一数目的已完成的差拍、以及所述多个向量指令中的后续向量指令的第二数目的已完成的差拍,其中,所述第一数目和所述第二数目二者是可变化的,并且所述第一数目和所述第二数目二者通过所述差拍状态信息的编码来标识;
响应于事件,所述处理电路被配置为暂停所述给定向量指令的处理;以及
响应于从事件返回请求,该请求指示返回至所述给定向量指令的处理,所述处理电路被配置为继续所述多个向量指令的处理,同时抑制由所述差拍状态信息指示为已完成的所述多个向量指令的所述差拍;
其中,所述向量值包括数据元素,这些数据元素具有由数据元素大小信息指定的多个数据元素大小中的一者,所述处理电路能够访问该数据元素大小信息;以及
每一处理差拍包括对应于所述向量值的固定大小部分的处理,无论所述数据元素大小信息指示何种数据元素大小。
2.如权利要求1所述的装置,其中,所述处理电路被配置为设定返回地址,该返回地址指示所述多个向量指令中的一者的地址;以及
响应于所述从事件返回请求,所述处理电路被配置为标识这样的点,处理将基于所述返回地址及所述差拍状态信息而从此点处继续。
3.如权利要求2所述的装置,其中,所述返回地址指示最早向量指令的地址,该最早向量指令的至少一个差拍仍未完成。
4.如任一先前权利要求所述的装置,其中,所述多个向量指令包含:最早向量指令,该向量指令的至少一个差拍仍有待完成;以及至少一个后续向量指令。
5.如权利要求1-3中任一项所述的装置,其中,所述处理电路被配置为在所述给定向量指令的所述多个差拍的第一子集完成之后,执行所述给定向量指令的所述多个差拍的第二子集。
6.如权利要求5所述的装置,其中,所述处理电路被配置为并行执行第一向量指令的所述第二差拍子集与第二向量指令的所述第一差拍子集。
7.如权利要求1-3中任一项所述的装置,包括控制电路系统,以在不同指令间改变一个向量指令中有多少差拍将在后续向量指令的第一差拍开始之前完成。
8.如权利要求1-3中任一项所述的装置,其中,所述处理电路包括硬件,该硬件不足以并行执行所述给定向量指令中的所述全部多个差拍。
9.如权利要求1-3中任一项中任一项所述的装置,其中,所述处理电路包括硬件,该硬件被配置为支持并行执行所述给定向量指令的所述全部多个差拍。
10.如权利要求1-3中任一项所述的装置,其中,所述处理电路被配置为使所述处理电路执行的软件、异常处理程序以及调试程序中的至少一者能够访问所述差拍状态信息。
11.如权利要求1-3中任一项所述的装置,其中,所述事件包括调试事件,且所述从事件返回请求包括从调试状态返回。
12.如权利要求1-3中任一项所述的装置,其中,所述事件包括异常事件,且所述从事件返回请求包括异常返回。
13.如权利要求12所述的装置,其中,所述异常事件包括故障事件,且响应于所述故障事件,所述处理电路被配置为设定标识所述多个向量指令中哪一者是检测到所述故障事件的所述给定向量指令的信息。
14.如权利要求12所述的装置,其中,响应于所述异常事件,所述处理电路被配置为去能对所述差拍状态信息的访问;以及
响应于尝试访问所述差拍状态信息的指令或包括多个处理差拍的至少一种又一向量指令的执行,所述处理电路被配置为:
保存所述差拍状态信息至预定位置;或
发生第二异常事件。
15.如权利要求12所述的装置,其中,响应于所述异常事件,所述处理电路被配置为相对于由堆栈指针寄存器指示的值以偏移量将所述差拍状态信息保存到数据存储装置中的位置。
16.如权利要求15所述的装置,其中,所述处理电路能够在多个安全状态下操作,这些状态包括至少安全状态和安全性较低状态,其中,响应于导致从所述安全状态到所述安全性较低状态的转变的所述异常事件,所述处理电路被配置为清除所述差拍状态信息。
17.如权利要求1-3中任一项所述的装置,其中,所述处理电路被配置为通过以下各项中的一者抑制给定处理差拍:
抑制目的向量寄存器中对应于所述给定处理差拍的一部分的更新;以及
抑制关联于所述给定处理差拍的处理操作。
18.一种处理向量指令的装置,包括:
用于处理向量指令构件,用于这些指令的源操作数和结果值中的至少一者是包括多个数据元素的向量值;
其中,响应于给定向量指令,所述用于处理的构件被配置为执行多个处理差拍,每一差拍包括对应于所述向量值中的一部分的处理;
所述用于处理的构件被配置为设定差拍状态信息,该状态信息指示包括所述给定向量指令的多个向量指令中的哪些差拍已完成;
其中,所述差拍状态信息的编码标识所述给定向量指令的第一数目的已完成的差拍、以及所述多个向量指令中的后续向量指令的第二数目的已完成的差拍,其中,所述第一数目和所述第二数目二者是可变化的,并且所述第一数目和所述第二数目二者通过所述差拍状态信息的编码来标识;
响应于事件,所述用于处理的构件被配置为暂停所述给定向量指令的处理;以及
响应于从事件返回请求,该请求指示返回至所述给定向量指令的处理,所述用于处理的构件被配置为继续所述多个向量指令的处理,同时抑制由所述差拍状态信息指示为已完成的所述多个向量指令的所述差拍;
其中,所述向量值包括数据元素,这些数据元素具有由数据元素大小信息指定的多个数据元素大小中的一者,所述用于处理的构件能够访问该数据元素大小信息;以及
每一处理差拍包括对应于所述向量值的固定大小部分的处理,无论由所述数据元素大小信息指示何种数据元素大小。
19.一种处理向量指令的方法,用于这些向量指令的源操作数和结果值中的至少一者是包括多个数据元素的向量值;该方法包括以下步骤:
响应于给定向量指令,执行多个处理差拍,每一差拍包括对应于所述向量值中的一部分的处理;
设定差拍状态信息,该状态信息指示包括所述给定向量指令的多个向量指令中的哪些差拍已完成;
其中,所述差拍状态信息的编码标识所述给定向量指令的第一数目的已完成的差拍、以及所述多个向量指令中的后续向量指令的第二数目的已完成的差拍,其中,所述第一数目和所述第二数目二者是可变化的,并且所述第一数目和所述第二数目二者通过所述差拍状态信息的编码来标识;
响应于事件,暂停所述给定向量指令的处理;以及
响应于从事件返回请求,所述请求指示返回至所述给定向量指令的处理,继续所述多个向量指令的处理,同时抑制由所述差拍状态信息指示为已完成的所述多个向量指令的差拍;
其中,所述向量值包括数据元素,这些数据元素具有由数据元素大小信息指定的多个数据元素大小中的一者;以及
每一处理差拍包括对应于所述向量值的固定大小部分的处理,无论所述数据元素大小信息指示何种数据元素大小。
20.一种存储有虚拟机计算机程序的计算机可读存储介质,该计算机程序包括程序指令,这些程序指令用以控制主机数据处理装置以提供对应于如权利要求1至17中任一项所述的装置的指令执行环境。
CN201780017771.3A 2016-03-23 2017-03-17 处理向量指令 Active CN108834427B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1604944.7A GB2548601B (en) 2016-03-23 2016-03-23 Processing vector instructions
GB1604944.7 2016-03-23
PCT/GB2017/050736 WO2017163023A1 (en) 2016-03-23 2017-03-17 Processing vector instructions

Publications (2)

Publication Number Publication Date
CN108834427A CN108834427A (zh) 2018-11-16
CN108834427B true CN108834427B (zh) 2023-03-03

Family

ID=55968774

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780017771.3A Active CN108834427B (zh) 2016-03-23 2017-03-17 处理向量指令

Country Status (9)

Country Link
US (1) US11269649B2 (zh)
EP (1) EP3433724B1 (zh)
JP (1) JP6882320B2 (zh)
KR (1) KR102379886B1 (zh)
CN (1) CN108834427B (zh)
GB (1) GB2548601B (zh)
IL (1) IL261309B (zh)
TW (1) TWI756212B (zh)
WO (1) WO2017163023A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2620381A (en) * 2022-06-30 2024-01-10 Advanced Risc Mach Ltd Vector extract and merge instruction

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0205809A2 (en) * 1985-06-17 1986-12-30 International Business Machines Corporation Vector processing
US4782441A (en) * 1985-06-14 1988-11-01 Hitachi, Ltd. Vector processor capable of parallely executing instructions and reserving execution status order for restarting interrupted executions
WO2005114441A2 (en) * 2004-05-19 2005-12-01 Arc International (Uk) Limited Microprocessor architecture
CN102804135A (zh) * 2009-06-05 2012-11-28 Arm有限公司 用于处理向量指令的数据处理设备和方法
CN104487941A (zh) * 2012-07-11 2015-04-01 Arm有限公司 在向量处理过程中控制处理数据元素的顺序

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5113521A (en) 1988-03-18 1992-05-12 Digital Equipment Corporation Method and apparatus for handling faults of vector instructions causing memory management exceptions
EP0333365A3 (en) * 1988-03-18 1991-05-08 Digital Equipment Corporation Method and apparatus for handling asynchronous memory management exceptions by a vector processor
US5008812A (en) 1988-03-18 1991-04-16 Digital Equipment Corporation Context switching method and apparatus for use in a vector processing system
US5623650A (en) 1989-12-29 1997-04-22 Cray Research, Inc. Method of processing a sequence of conditional vector IF statements
US6317819B1 (en) 1996-01-11 2001-11-13 Steven G. Morton Digital signal processor containing scalar processor and a plurality of vector processors operating from a single instruction
US6304963B1 (en) * 1998-05-14 2001-10-16 Arm Limited Handling exceptions occuring during processing of vector instructions
US6530011B1 (en) 1999-10-20 2003-03-04 Sandcraft, Inc. Method and apparatus for vector register with scalar values
US6857061B1 (en) 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
US6701424B1 (en) * 2000-04-07 2004-03-02 Nintendo Co., Ltd. Method and apparatus for efficient loading and storing of vectors
GB2376100B (en) 2001-05-31 2005-03-09 Advanced Risc Mach Ltd Data processing using multiple instruction sets
US20030221086A1 (en) 2002-02-13 2003-11-27 Simovich Slobodan A. Configurable stream processor apparatus and methods
US7043616B1 (en) * 2002-04-18 2006-05-09 Advanced Micro Devices, Inc. Method of controlling access to model specific registers of a microprocessor
US7594102B2 (en) 2004-12-15 2009-09-22 Stmicroelectronics, Inc. Method and apparatus for vector execution on a scalar machine
US8098251B2 (en) 2008-02-22 2012-01-17 Qualcomm Incorporated System and method for instruction latency reduction in graphics processing
US10175990B2 (en) * 2009-12-22 2019-01-08 Intel Corporation Gathering and scattering multiple data elements
US8893306B2 (en) * 2010-08-31 2014-11-18 International Business Machines Corporation Resource management and security system
US9552206B2 (en) * 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
US20120216011A1 (en) * 2011-02-18 2012-08-23 Darryl Gove Apparatus and method of single-instruction, multiple-data vector operation masking
GB2489914B (en) 2011-04-04 2019-12-18 Advanced Risc Mach Ltd A data processing apparatus and method for performing vector operations
KR101877347B1 (ko) 2011-09-26 2018-07-12 인텔 코포레이션 벡터 로드-op/저장-op에 스트라이드 기능을 제공하는 명령어 및 로직
US9202071B2 (en) * 2012-02-08 2015-12-01 Arm Limited Exception handling in a data processing apparatus having a secure domain and a less secure domain
US20140188961A1 (en) 2012-12-27 2014-07-03 Mikhail Plotnikov Vectorization Of Collapsed Multi-Nested Loops
KR102179385B1 (ko) 2013-11-29 2020-11-16 삼성전자주식회사 명령어를 실행하는 방법 및 프로세서, 명령어를 부호화하는 방법 및 장치 및 기록매체
US10387150B2 (en) 2015-06-24 2019-08-20 International Business Machines Corporation Instructions to count contiguous register elements having a specific value in a selected location
US11275590B2 (en) 2015-08-26 2022-03-15 Huawei Technologies Co., Ltd. Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4782441A (en) * 1985-06-14 1988-11-01 Hitachi, Ltd. Vector processor capable of parallely executing instructions and reserving execution status order for restarting interrupted executions
EP0205809A2 (en) * 1985-06-17 1986-12-30 International Business Machines Corporation Vector processing
WO2005114441A2 (en) * 2004-05-19 2005-12-01 Arc International (Uk) Limited Microprocessor architecture
CN102804135A (zh) * 2009-06-05 2012-11-28 Arm有限公司 用于处理向量指令的数据处理设备和方法
CN104487941A (zh) * 2012-07-11 2015-04-01 Arm有限公司 在向量处理过程中控制处理数据元素的顺序

Also Published As

Publication number Publication date
EP3433724B1 (en) 2022-09-07
TWI756212B (zh) 2022-03-01
GB201604944D0 (en) 2016-05-04
WO2017163023A1 (en) 2017-09-28
EP3433724A1 (en) 2019-01-30
CN108834427A (zh) 2018-11-16
IL261309A (en) 2018-10-31
JP2019510313A (ja) 2019-04-11
GB2548601A (en) 2017-09-27
TW201734769A (zh) 2017-10-01
US11269649B2 (en) 2022-03-08
GB2548601B (en) 2019-02-13
JP6882320B2 (ja) 2021-06-02
KR20180126518A (ko) 2018-11-27
US20190056933A1 (en) 2019-02-21
IL261309B (en) 2020-08-31
KR102379886B1 (ko) 2022-03-30

Similar Documents

Publication Publication Date Title
US11263073B2 (en) Error recovery for intra-core lockstep mode
US10599428B2 (en) Relaxed execution of overlapping mixed-scalar-vector instructions
US7836430B2 (en) Reversing execution of instructions in a debugger
EP3574405B1 (en) Error detection using vector processing circuitry
WO2011131469A1 (en) Debugging multithreaded code
JPH07160501A (ja) データ処理システム
JPH07248897A (ja) コンピュータ・システムにおける例外からの回復方法、及びそのための装置
CN108834427B (zh) 处理向量指令
US9471317B2 (en) Execution of additional instructions in conjunction atomically as specified in instruction field
EP3912028A1 (en) Data structure relinquishing
US6990569B2 (en) Handling problematic events in a data processing apparatus
EP0806723A2 (en) Method and apparatus for handling multiple precise events in a pipelined digital processor
JP2004508607A (ja) 例外ルーチンを有するプロセッサのレジスタライトトラフィックを減じる装置及び方法
Pulka et al. Multithread RISC architecture based on programmable interleaved pipelining
Guo et al. Verifying preemptive kernel code with preemption control support
WO2001082059A2 (en) Method and apparatus to improve context switch times in a computing system
Kong Interrupt Support on the ρ-VEX processor

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
GR01 Patent grant
GR01 Patent grant