CN104487941A - 在向量处理过程中控制处理数据元素的顺序 - Google Patents

在向量处理过程中控制处理数据元素的顺序 Download PDF

Info

Publication number
CN104487941A
CN104487941A CN201380035953.5A CN201380035953A CN104487941A CN 104487941 A CN104487941 A CN 104487941A CN 201380035953 A CN201380035953 A CN 201380035953A CN 104487941 A CN104487941 A CN 104487941A
Authority
CN
China
Prior art keywords
data
vector
instruction
data element
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.)
Granted
Application number
CN201380035953.5A
Other languages
English (en)
Other versions
CN104487941B (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
Advanced Risc Machines 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 Advanced Risc Machines Ltd filed Critical Advanced Risc Machines Ltd
Publication of CN104487941A publication Critical patent/CN104487941A/zh
Application granted granted Critical
Publication of CN104487941B publication Critical patent/CN104487941B/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/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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4451Avoiding pipeline stalls
    • 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/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • G06F9/4451User profiles; Roaming

Landscapes

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

Abstract

公开了一种用于处理对向量执行操作的向量指令流的数据处理装置,所述向量每个都包括多个数据元素。该数据处理装置包括:具有用于存储被处理的向量的多个寄存器的寄存器组;用于处理向量指令流的流水线处理器;该流水线处理器包括被配置为检测由所述向量指令流进行处理并且被存储在所述多个寄存器中的向量的数据相关性并且确定对运行向量指令的时序的约束以使得不产生寄存器数据冒险的电路,所述寄存器数据冒险产生于这样的情况下,在该情况下,对相同寄存器的两个访问以与所述指令流的顺序不同的顺序发生以致所述指令流中较晚发生的访问在所述指令流中较早发生的访问已完成之前开始,其中,所述访问中的至少一个访问为写。该流水线处理器包括数据元素冒险确定电路,该数据元素冒险确定电路被配置为针对数据相关性已被识别的向量内的数据元素中的至少一些数据元素来确定针对这些向量所识别的数据相关性对于数据元素中的至少一些数据元素中的每个数据元素是否存在,如果不存在,则放松所确定的对运行处理数据元素的指令的时序的约束。

Description

在向量处理过程中控制处理数据元素的顺序
技术领域
本发明涉及数据处理领域,并且更具体地涉及向量操作的处理。
背景技术
向量处理涉及对包括许多数据元素的向量的处理。可以对向量内所有的数据元素或选出的数据元素执行操作,这些操作同时彼此并行地被执行。不同的元素可以通过将向量分割成一个或多个元素的各分割进行选择,然后通过特定操作选择用于处理的分割。可替代地,掩码能被用来在向量内选择某些元素而不选择其他元素以通过操作进行处理。
向量分割和对所分割的数据的处理能够通过允许并行执行操作来改善性能,然而,这有可能引入巨大的数据冒险。必须避免这些数据冒险,然而在允许对数据进行并行处理的同时确保这些操作的数据一致性和相关性在附加的硬件、延时和功率方面代价十分昂贵。
最好在处理向量时能够降低一致性和相关性操作的代价,同时仍从与并行处理相关联的改善的性能中获益。
发明内容
本发明的第一方面提供用于处理对向量执行操作的向量指令流的数据处理装置,所述向量每个都包括多个数据元素,所述数据处理装置包括:
寄存器组,所述寄存器组包括用于存储被处理的所述向量的多个寄存器;
流水线处理器,所述流水线处理器用于处理所述向量指令流;
所述流水线处理器包括被配置为检测由所述向量指令流进行处理并且被存储在所述多个寄存器中的所述向量的数据相关性并且确定对运行所述向量指令的时序的约束以使得不产生寄存器数据冒险的电路,所述寄存器数据冒险产生于这样的情况下,在该情况下,对相同寄存器的两个访问以与所述指令流的顺序不同的顺序发生以致所述指令流中较晚发生的访问在所述指令流中较早发生的访问已完成之前开始,其中,所述访问中的至少一个访问为写;
所述流水线处理器包括数据元素冒险确定电路,所述数据元素冒险确定电路被配置为针对数据相关性已被识别的向量内的所述数据元素中的至少一些数据元素,确定针对所述向量所识别的所述数据相关性对于所述数据元素中的所述至少一些数据元素中的每个数据元素是否存在,如果不存在,则放松所确定的对运行处理所述数据元素的指令的时序的约束。
本发明认识到分割后的向量操作提供了许多数据冒险的可能性。正确处理它们可能导致巨大代价。本发明还认识到在典型的应用模式中,尽管这些数据冒险可能存在于向量间,但如果将这些冒险看作向量内各个数据元素之间的冒险,则这些冒险中的许多冒险可以消失。认识到这点使得一些时序约束被放松,所述时序约束是在考虑这些向量时生成的并且所述时序约束确保在做出最优化的情况下它们是安全的且不破坏这些向量中的数据。因此,本发明确定这些向量内的数据元素中的至少一些数据元素之间的数据冒险,并且放松确保向量之间的数据一致性所需要的时序约束,其中,这些时序约束对于实际的数据元素一致性是不需要的。在这方面,放松所确定的对时序的约束可能意味着不需要一个接一个地执行某些操作,而是这些操作可以相互重叠,或者这些操作可以以不同的顺序来执行。
如上所述,数据冒险发生在对相同寄存器的两个访问以与所述指令流的顺序不同的顺序发生的情形中,其中,所述访问中的至少一个访问为写。在这方面,访问被认为是甚至在如下的情形中也以与所述指令流的顺序不同的顺序发生:该情形是指,指令流中较晚的访问在较早的访问完成之前开始,即便较晚访问晚于较早访问完成,在较早访问已经完成之前开始可能导致可能访问错误数据的数据冒险。
在一些实施例中,所述数据处理装置被配置为以预定的访问顺序来访问向量内的数据元素,所述数据元素冒险确定电路被配置为确定当向量内的至少一个数据元素要响应于向量指令而被更新时,所述向量内按所述预定的访问顺序的后续数据元素当前包含可以被修改并且可以被丢弃的值,并且所述数据元素冒险确定电路被配置为向运行电路发送信号以通知响应于至少一个另外的向量指令来更新所述后续数据元素中的至少一个数据元素的至少一个操作能够以相对于所述操作的任意顺序被执行以更新所述数据元素。
本发明的实施例认识到用来更新寄存器的代码一般以特定的顺序这样进行,因此,在许多情形中,第一数据元素被更新,随后为后续数据元素,以此类推。因此,即使在不同的向量操作被执行的情形中,这些操作可以对相同的向量执行,第一操作可能填充前三个数据元素,而下一操作可能填充下三个数据元素。出于这种考虑,数据处理装置被配置为检测数据元素的更新,然后认识到存储在向量中的后续数据元素中的值将稍后被更新,因此,稍后将不需要这些值并且可以丢弃这些值。认知到这一点使得重写这些值的向量操作能够无需等待在先数据元素的更新便立即执行。因此,更新特定向量的后续操作能够相互同时或者以与指令流的顺序不同的顺序相互并行地被执行。
在一些实施例中,所述向量被划分为分区,每个分区包括至少一个数据元素,在分区包括多个数据元素的情况下,所述多个数据元素为相邻的数据元素,所述数据处理装置被配置为以预定的访问顺序访问向量内的所述分区。
尽管向量操作可以对单个数据元素进行操作,但在一些实施例中,向量被分割,并且每个操作对特定分区进行操作。分区可以包含单个数据元素或可以包含多个相邻的数据元素。
在一些实施例中,所述数据元素冒险确定电路包括状态机,所述状态机指示当向量由指令访问时由所述向量内的数据元素所存储的值的状态,所述状态指示所述数据元素存储要被保存的数据值还是可以被丢弃的数据值。
确定数据元素冒险的一种方式是通过使用状态机,所述状态机指示当向量由指令访问时存储在向量的数据元素内的值的状态。在这方面,其确定在做出实际访问之前这一时刻的状态是什么。通过在访问之前完成该操作,收集到的信息能够被用来影响其他操作的时序并且允许执行最优化。状态指示所存储的数据元素需要被保存还是可以被丢弃。其使用访问顺序约束完成该操作以确定向量中的哪些元素仍要被访问从而可以被丢弃,而那些已被更新的元素需要被保存。
在一些实施例中,当确定所述数据相关性时,所述电路响应于与所述向量指令相关联的指示没有数据相关性的注释,其中,所述电路被配置为检测由所述向量指令流处理的所述向量的数据相关性。
本发明的实施例提供了指令,所述指令具有与其相关联的注释,所述注释指示指令在数据相关性可以被预测的情况下实际上不存在数据相关性。在这样的情形中,可以放松对运行与所预测的数据相关性有关的指令的调度的约束。在该方面,存在更新向量中各个元素的指令,尽管从表面上来看,应该按顺序运行用来更新相同向量的后续指令,但是如果这些指令中的每个更新各个不同的元素,则这是不需要的,并且指令中的注释能够指示出来,从而可以放松时序约束。
在一些实施例中,所述状态机包括三种状态:未知状态,所述未知状态指示所有的数据元素包括要被保存的数据值;访问当前状态,所述访问当前状态指示在当前正被所述向量指令访问的所述当前分区之后的所有的数据元素可以被丢弃,并且所有的其他数据元素要被保存;以及由先前分区访问状态,所述由先前分区访问状态指示所述当前分区中的所有数据元素和所有后续的数据元素可以被丢弃,并且所有的先前数据元素具有要被保存的数据值。
尽管状态机可以包括多个状态,但是在一些实施例中,三个状态足以提供所需信息。可以有未知状态,出于安全的目的,在未知状态下,所有的数据元素被标记为应当被保存。在其将被接受的情形中,这防止这些元素被重写。然后存在访问当前状态,当指令访问向量中的特定元素或分区时出现访问当前状态,就此便知道当前元素或分区之后的所有数据元素可以被丢弃,并且所有其他数据元素需要被保存,因为这些数据元素已被更新或正被更新。还有一个状态,即,由先前分区访问状态,该状态指示下一分区要被更新,但还未被更新。因此,当所有的先前数据元素具有要被保存的数据值时,该新的当前分区中的所有数据元素和所有的后续数据元素可以被丢弃。这些状态在确定最优化时很有用。在未知状态,最优化是不可能的。在先前分区状态中,对当前分区的向量操作和对先前分区的向量操作能够以任意顺序来执行,因此可以放松需要首先对先前分区执行操作的任意时序约束。
在一些实施例中,所述数据处理装置包括多个向量控制寄存器和存储设备,所述向量控制寄存器用于控制所述指令要对所述分区中的哪些分区进行操作,所述存储设备用于存储指示所述多个向量控制寄存器中的哪个向量控制寄存器指示当前分区的值,其中,响应于从所存储的值中检测所述向量控制寄存器中指示下一分区不同于指示所述先前分区的所述向量控制寄存器的那个向量控制寄存器,所述状态机被转换为未知状态。
可能存在多于一个的能够控制哪一分区要被访问的向量控制寄存器。这呈现出其自身问题,在这样的情形中,需要数据存储设备来存储表示指示当前分区的向量控制寄存器的值。这样,如果寄存器的下一分区在不同的向量控制寄存器的控制下被访问,则这能够根据所存储的数据值确定,并且状态机中的值对于新的向量控制寄存器不再是有关的,因此,该状态应被设置为未知。
在一些实施例中,所述数据处理装置还包括寄存器重命名电路,所述寄存器重命名电路用于将由所述向量指令内的寄存器标识符所识别的寄存器与所述寄存器组中所述多个寄存器之一进行映射;其中,响应于所述数据元素冒险确定电路确定向量中的至少一个数据元素要响应于向量指令被更新、并且所述向量中按所述预定的访问顺序的后续数据元素当前包含可以被修改并可以被丢弃的值,所述流水线处理器被配置为更新所述寄存器,所述寄存器当前被映射到由所述向量指令中的所述寄存器标识符识别的所述寄存器。
在数据处理装置具有寄存器重命名电路的情形中,当使用向量操作更新寄存器时,由于各个元素不同时被更新,因此针对该向量操作新的寄存器将需要被重命名,并且当操作被执行时,来自先前被重命名的寄存器的数据将需要被融合进该寄存器中。这是非常昂贵的操作。本发明的实施例认识到确定某些数据元素可以被丢弃意味着存储在先前被重映射的寄存器中的值实际上可能不需要,因此,将其融合没有意义,并且这些值可以仅仅利用新的值来进行重写。这带来大量的节省。
因此,可能当响应于向量操作来更新后续的数据元素时,由重命名电路当前映射的物理寄存器能够仅被写入,无需进一步对数据进行重命名或复制。实际上,抑制针对这些操作的寄存器重命名并且节省了大量时间和功率。
在一些实施例中,所述流水线处理器包括附加电路,所述附加电路用于确定向量中按照访问顺序的第一数据元素何时被更新,并且用于传输指示所述向量能被写入任意当前未使用的寄存器的信号。
如果要提供具有附加电路的数据处理装置,则在存在寄存器重命名的情况下,能够将该第一值写入新的寄存器中并且重命名该新的寄存器,其中,所述附加电路确定向量中的第一数据元素何时被更新。当先前被映射的寄存器中的值已被访问时,可以丢弃该先前被映射的寄存器。由于存储在先前被映射的寄存器中的值没有被新的处理重写,因此这可以改善时序约束,并且当通过常用方式结束这些值时,该寄存器将被解除分配。因此,新的写入不需要等待其它值已被使用。实际上,本发明的实施例触发对第一数据元素更新的重命名,并且抑制其后续的更新。
在一些实施例中,所述附加电路包括具有第一状态和至少一个另外的状态的状态机,所述第一状态指示未知状态,所述至少一个另外的状态指示要被访问的所述向量的第一元素将要被更新。
为了确定第一元素何时被更新,可以使用具有至少两个状态的附加状态机:一个状态为第一未知状态,另一状态为指示向量的第一元素要被访问的状态。在一些实施例中,根据实现方式可能还有另外的状态。
在一些实施例中,所述数据处理装置还包括数据存储设备,所述数据存储设备用于存储指示符,所述指示符为向量中每个数据元素提供指示所述数据元素当前存储应该被保存的数据值还是可以被丢弃的数据值的指示,所述元素数据冒险确定电路被配置为更新所述指示符存储设备。
在一些情形中,保持记录哪些数据元素要被保存以及哪些数据元素可以被丢弃是有益的。在存在寄存器重命名的情况下可以在寄存器重命名电路中保持该记录,或者在没有寄存器重命名的情况下可以与向量寄存器相关联地保持记录。所述指示可以是指示符的形式,该指示符针对每个数据元素指示有效数据或无效数据被存储(即,可以被保存或可以被丢弃),或者可以以另一形式来完成,例如,直到元素3的元素应该被保存,超过元素3的元素可以被丢弃。
在一些实施例中,所述数据处理装置被配置为响应于将向量存储于存储器中的指令,针对分区内被标记为存储可以被丢弃的数据值的每个数据元素,存储预定值来代替当前存储在所述数据元素中的值。
在诸如当向量被读取时的情形中存储有效性的指示或其它数据指示可能是有用的。在该情形中不是读取可以从寄存器中丢弃的值,可以仅读取诸如0或1之类的预定的值。这避免不需要的这些数据值从寄存器中被读取,并且这在以下情况下是重要的:安全是个问题并且在当前不需要的数据值包含敏感信息的情形中这些数据值不应该被输出。
在一些实施例中,所述流水线处理器包括用于发布并运行所述向量指令的发布电路和运行电路,所述发布电路包括所述数据元素冒险检测电路。
流水线处理器可以包括发布电路和运行电路。发布电路位于该处理器的前端,并且执行获取指令、解码以及数据相关性检查。在流水线中较早执行这些数据相关性检查意味着该过程中较早确定潜在的最优化,并且这允许执行更多的最优化。
在一些实施例中,所述数据处理装置包括同步电路,所述同步电路被配置为周期性地确定当前正被所述运行电路处理的数据元素的状态,并且将所述状态信息传输至所述发布电路。
在一些实施例中,数据处理装置可以包括同步电路,该同步电路能被用来周期性地确定当前正被处理的数据元素的状态,并且将该信息发送回发布电路。可能出于一些原因,状态机不能正确得到数据状态,并且状态机不易重新获得该信息。如果由于较长的代码发生该情形,则不可能有潜在的最优化。因此,具有同步电路可能是有益的,所述同步电路周期性地激活或响应于可能导致同步错误的某些事件来激活或响应于检测最近没有执行最优化来激活。该同步电路从运行电路检测元素的状态,并且将该状态反馈回发布电路,发布电路重置状态机并允许最优化继续。
在一些实施例中,所述向量包括向量掩码,所述向量掩码被配置以识别向量操作要对其进行操作的数据元素,所述数据元素冒险确定电路被配置为根据所述向量掩码确定针对所述向量所识别的数据相关性对于所述数据元素中的所述至少一些数据元素中的每个数据元素是否存在,如果不存在,则放松所确定的对运行处理所述数据元素的指令的时序的约束。
可以存在识别由向量操作对其进行操作的数据元素以及不对其进行操作的数据元素的向量掩码。在这样的情形中,数据元素冒险检测电路能够根据这些掩码确定何种情况下不会由于仅操作向量中的数据元素的一部分而发生针对向量所识别的数据相关性。因此,通过分析这些掩码,能够放松一些时序。
在一些实施例中,所述向量包括向量掩码,所述向量掩码被配置以识别由向量操作对其进行操作的向量分区中的数据元素,所述数据处理装置被配置为在向量掩码的控制下对向量分区执行一个操作,并且在反转的所述向量掩码的控制下对所述向量分区执行另外的操作,所述状态机包括至少一个另外的状态,所述至少一个另外的状态包括掩蔽访问当前状态,该掩蔽访问当前状态指示在当前正由所述向量指令访问的当前分区之后的所有数据元素以及所述数据分区中的所述掩蔽的数据元素可以被丢弃,所有其他数据元素要被保存。
数据相关性能被放松的一个示例是在分割的向量中使用向量掩码以利用选择其他子集的反转的掩码来选择该分区的子集。在这样的情形中,类似于具有用于所分割的向量的三个状态的状态机,这样的状态机可以被使用但需要一些附加状态,这些附加状态指示被掩码控制的分区的哪些部分可以被丢弃,而哪些部分需要被保存。这样,可以通过知道那些数据能被重写来确定操作的排序。
本发明的第二方面提供了一种在数据处理装置内处理向量指令流的方法,所述向量指令流用于对向量执行操作,所述向量每个均包括多个数据元素,并且被存储在所述数据处理装置的寄存器中,所述方法包括:
检测由所述向量指令流处理并且存储于所述多个寄存器中的所述向量的数据相关性,以确定对运行所述向量指令的时序的约束,以使得不出现寄存器数据冒险,所述寄存器数据冒险出现在这样的情况下,在该情况下,对相同寄存器的两个访问以与所述指令流的顺序不同的顺序发生,以使得所述指令流中较晚发生的访问在所述指令流中较早发生的访问已经完成之前便开始,其中所述访问中的至少一个访问为写;
针对数据相关性已被识别的向量内的所述数据元素中的至少一些数据元素,确定针对所述向量所识别的所述数据相关性对于所述数据元素中的所述至少一些数据元素中的每个数据元素是否存在,如果不存在,则:
放松所确定的对运行处理所述数据元素的指令的时序的约束。
本发明的第三方面提供了一种转换计算机程序的方法,所述计算机程序包括用于对向量执行操作的多个向量指令,所述向量每个均包括多个数据元素,所述编译的方法包括:
分析所述多个向量指令;
检测要由所述多个向量指令处理的所述向量的数据相关性,以确定对运行所述向量指令的时序的约束,以使得不出现寄存器数据冒险,所述寄存器数据冒险出现在这样的情况下,在该情况下,对相同寄存器的两个访问以与所述指令流的顺序不同的顺序发生,以使得所述指令流中较晚发生的访问在所述指令流中较早发生的访问已经完成之前便开始,其中所述访问中的至少一个访问为写;
针对数据相关性已被识别的向量内的所述数据元素中的至少一些数据元素,确定针对所述向量所识别的所述数据相关性对于所述数据元素中的所述至少一些数据元素中的每个数据元素是否存在,如果不存在,则:
放松所确定的对运行处理所述数据元素的指令的时序的约束;
将所述计算机程序转换为适于在数据处理系统上运行的代码。
本发明的第四方面提供了一种计算机程序,当在计算机上运行所述计算机程序时,所述计算机程序将控制所述计算机执行根据本发明的第三方面的方法步骤。
附图说明
将参照附图中所示的实施例仅通过示例的方式对本发明进行进一步地描述,其中:
图1图解地示出根据本发明实施例的数据处理装置;
图2图解地示出根据本发明实施例的具有寄存器重命名电路的数据处理装置;
图3图解地示出根据本发明实施例的寄存器重命名电路;
图4图解地示出根据本发明实施例的向量和数据相关性检测电路;
图5图解地示出根据本发明实施例的状态机;
图6图解地示出根据本发明实施例的用于确定何时执行寄存器重命名的状态机;
图7示出示例代码和状态机的相应状态;
图8图解地示出根据本发明实施例的具有分区和掩码的代码的状态机;
图9示出根据本发明实施例的示出方法中步骤的流程图;
图10示出根据本发明实施例的具有编译器的数据处理装置;以及
图11示出所注释的指令的示例。
具体实施方式
图1图解地示出根据本发明实施例的数据处理装置。该数据处理装置被图解示出,并且该电路与实际存在的其它电路之间可以存在其它互连,这对本领域技术人员而言是清楚的。在所示的数据处理装置中,存在流水线处理器,该流水线处理器包括发布电路10、运行电路20以及回写电路30。发布电路10从指令缓存12中取回指令,并且解码这些指令,还检测由于对向量进行处理而出现的数据相关性,并且将所解码的指令发布给运行电路。
因此,发布电路10具有向量数据相关性电路14,向量数据相关性电路14确定向量之间的数据相关性,并且从回写电路30中取回信息,这使得其知道各种操作何时完成。发布电路10还包括数据元素相关性检测电路16,该数据元素相关性检测电路16检测各个元素之间的数据相关性,并且确定由向量数据相关性电路14施加的时序约束在何种情况下实际能够被放松,尽管这些操作可能导致由于数据元素自身被访问的方式而引起的向量之间的数据相关性,这些数据相关性实际将不会出现,因此,源于向量数据相关性需要以某一顺序被执行的向量操作实际上能够以不同的顺序被执行。该数据元素相关性检测电路16响应于与指示时序约束在何种情况下可以被放松的指令相关联的注释(参见图11)。
数据处理装置5还包括向量控制寄存器40和向量寄存器组50。还有用于存储数据的存储器60。向量寄存器组50包括具有多个数据元素的向量,运行(execution)电路20在从指令缓存12中取回的向量指令的控制下对该多个数据元素进行操作。每个向量操作可以对0、向量中的一个或多个数据元素来执行。向量控制寄存器40将控制要对哪些数据元素执行向量操作。这些向量控制寄存器40可以采用掩码的形式,所述掩码指示当前的操作要对哪些元素进行操作,或者这些向量控制寄存器40可以采用向量分割寄存器的形式,所述向量分割寄存器指示要对向量的哪个分区进行操作。在后者情形中,向量可以被分割为多个分区,稍后将描述每个分区。每个分区可以包括一个或多个数据元素,这些数据元素为相邻元素。向量控制寄存器具有与其相关联的状态机19,状态机19用来跟踪要被更新的第一数据元素,并且能被用来确定寄存器重命名在何种情况下是合适的以及在何种情况下是不合适的,这将相对于图4和图6进行描述。
在一些实施例中,分割可以由多于一个的向量控制寄存器进行控制,在这样的情形中,跟踪对用于特定向量操作的向量控制寄存器的更改是不够的,必须跟踪对所有向量控制寄存器的更改,对于每个向量寄存器,必须跟踪哪个向量控制寄存器被对该寄存器进行的先前分区的向量操作使用。为了跟踪这个,可以使用存储值的数据存储设备,该值指示用于对特定寄存器进行写的上一向量控制寄存器。因此,响应于在某一向量控制寄存器的控制下对特定寄存器进行写,该数据存储设备被检查以确定其是否是控制对该寄存器的先前的写的那个向量控制寄存器,如果是,则可以检查状态机中的当前值,如果不是,则那个寄存器的状态机需要变为未知。
还有与向量寄存器组50相关联的有效性表格70和状态机17,有效性表格70指示寄存器内的哪些数据元素是有效的并且需要被保持、哪些可以被丢弃,而状态机17指示对与当前分区有关的哪些分区进行操作、哪些存储需要被保存的数据以及哪些存储可以被丢弃的数据。图4和图5的描述中提供该状态机的进一步的详情。有效性表格70和状态机17的信息由数据元素相关性检查电路16在分析访问这些数据元素的指令和访问模式时提供。当向量被读取时可以使用该信息,以使得在数据元素被指示为无效(指示这些数据元素可以被丢弃)的情况下,当这些数据元素被读取时能够只使用预定值而不是被存储的任意情形均无效的实际值。这能节省功率,并且还能防止输出这样的数据,即,尽管不再有效但可以包含先前存储的敏感值的数据。因此,这能保护数据的安全。
元素数据相关性电路只需要监控指令流,这很重要,因为这允许指令解码/发布独立于运行(execution),从而避免引入停顿。然而,这引入一些近似值,这些近似值可能意味着即使当最优化是安全的时也不能执行这些最优化。应当注意,这些近似值不会导致错误的行为。
具体地,在VP(向量分区)或向量寄存器被保存到堆中并且然后从该堆中恢复时可能碰到关于状态的信息。丢失关于状态的信息对如下代码是最有害的:该代码大量地使用向量操作,但不使用分割(即,控制寄存器被给出使得向量的所有元素被修改的值,然后许多向量操作被执行)。这是有害的,因为没有/具有少量机会来利用精确信息更新该信息,并且因为精度损失导致不必要的代价。
为了减少上述问题,运行电路20中可以存在同步电路25,同步电路25根据需要将同步信号传输回发布电路10。来自运行电路的返回至发布电路的该另外的路径被用来帮助重新同步这两者。重新同步具有代价,因为当重新同步发生时流水线(pipeline)不得不被停顿,或者因为仅当流水线为空闲或至少稳定(即,没有操作正在修改向量分区VP寄存器)时可以执行重新同步。
可以响应于特定指令和/数据值(例如,当数据处理流水线检测向量控制寄存器具有允许最优化但该最优化未被应用的值)来周期性地执行重新同步,或者机会式地(即,根据重新同步的代价)执行重新同步。
图2示出进一步的数据处理装置,该进一步的数据处理装置类似于图1的数据处理装置,但另外具有寄存器重命名电路75。应当注意,本发明的实施例能被用于顺序(in-order)处理和无序(out-of-order)处理两者。在该方面,被认为是顺序处理器的处理装置一般以指令流的顺序来运行指令。然而,这些处理装置可以允许这些指令重叠或并行地运行以加快运行速度。本发明的实施例能被用来改善这样情况下的并行性:即,向量中的数据元素以向量之间潜在的数据相关性实际不会出现这样的方式被访问。
寄存器重命名电路75可以存在于无序处理器中,并且被用在寄存器组中的多个物理寄存器的数目大于指令集可以命名的寄存器的数目的情况下。因此,寄存器组中的特定寄存器被寄存器重命名电路75映射到指令中指定的寄存器,该映射被存储在重命名表格72中。在该实施例中,寄存器重命名电路还包括有效性表格70,该有效性表格70存储关于向量中哪些元素未被定义的信息。
图3中更详细地示出寄存器重命名电路75。该寄存器重命名电路75包括重命名表格72,该重命名表格72将当前使用的寄存器的指令标识符映射到它们在寄存器组50中的物理位置。在该实施例中,寄存器重命名电路75还包含有效性表格70,该有效性表格70指示寄存器内每个数据元素的有效性。这类似于图1的有效性表格,但在具有寄存器重命名电路的情况下,由于与寄存器重命名几乎同时获取有效信息,存储有效性信息很方便。
本发明的实施例能大幅改善使用重命名的数据处理装置的效率。在向量处理期间寄存器重命名十分昂贵,因为对存储在寄存器中的向量内的数据元素进行操作一般将需要新的寄存器被重命名,存储在先前被重命名的寄存器中并且该操作不对其进行操作的数据元素与新重命名的寄存器进行融合。通过认识到后续的数据元素可以被丢弃,数据的该重命名和复制可以被抑制,从而在功率和时间方面做出大量节省。实际上,如果各种操作要更新特定寄存器,则该特定寄存器只需被重命名一次,并且后续的向量操作只能访问相同的寄存器,并且更新被认为能被丢弃的元素。而且,在向量中的第一元素被访问的情形中,可以支持重命名,新的寄存器可以针对第一元素的该新的更新进行映射。该寄存器然后被用在另外的元素的更新中,先前映射的寄存器将不被重写,如果该先前寄存器用于读取操作,则这能改善时序约束。
图4更详细地示出向量数据相关性电路和元素相关性电路。向量数据相关性电路14从发布级和回写级接收信息,并且据此确定向量数据相关性。然后根据数据元素相关性电路16所确定的相关性对其进行修改,在该实施例中数据元素相关性电路16为状态机17和状态机19的形式,其中,状态机17与向量寄存器组50的向量相关联,状态机19与向量控制寄存器40相关联。在该实施例中,状态机17具有三个状态:未知状态UN、写到当前分区状态WC以及写到先前分区状态WP。这些将相对于图5进行更详细地描述。
在分析向量操作时的操作中,采用关于当前操作的状态更新状态机,这能被用来确定关于所确定的向量数据相关性的最优化是可能的还是不可能的。因此,状态机中的值将指示与当前分区有关的哪些分区正被操作、哪些存储需要被保存的数据以及哪些存储可以被丢弃的数据。这些信息能被用来确定用来避免向量操作之间的数据冒险的时序约束在何种情况下不需要,因为当考虑单个元素时将不会发生这些冒险。
在该实施例中,还有与向量控制寄存器40相关联的状态机19。状态机19能被用来跟踪要被更新的第一数据元素,并且能被用来确定寄存器重命名在何种情况下是合适的、在何种情况下是不合适的,这将相对于图6进行描述。
当对向量使用分区时,生成初始分区P0很常见,P0被用来计算向量寄存器A中的一些值,然后使用P0来生成后继分区P1,P1不与P0重叠,并且P1被用来计算一些另外的值,这些另外的值然后被融合到向量寄存器A中,并且继续生成另外的分区,这些另外的分区不与任何较早的分区重叠,直到已处理足够的元素。
可以以多种方式来执行分割,其中一种方式是“向量分区”寄存器(VP)保持一对识别当前分区的元素索引值。例如,如果VP包含对[0,3],则元素位置0、1、2和3均在当前分区中。分割时使用的两个关键操作为VPCLR(“清除”VP寄存器)和VPNXT(将VP更改至下一分区)。
VPCLR将VP寄存器设置为初始分区,该初始分区不包含活跃元素[0,0](这只是示例,可替换的设计可以将VP设置为[0,7])。
VPNXT操作将VP更改为识别下一分区,该下一分区为出现在当前分区之后的元素序列。例如,基于初始值为[0,0]的VP,使用一次VPNXT可以将VP更改为[0,2],第二次使用VPNXT可以将VP更改为[3,5],并且第三次使用VPNXT可以将VP更改为[6,7]。由此可见,分区从低编号元素移至较高编号的元素,并且由VPNXT生成的连续分区相互不重叠。(分区的确切数目和序列通常是数据相关的)。
VP寄存器的值影响其他向量操作(例如,VADD、VMUL、VLOAD等)应用到的元素:因为只有活跃元素可以被修改。此外,低编号元素的值未被修改,较高编号的元素的值未被定义,因为它们可以稍后被修改并且它们的值能被重写且不需要被保存。
下面给出一些代码的示例。
VPCLR
;VP==[0..0]
VPNXT V5;使用V5中的信息来确定下一分区(0..2,用于说明目的)
;VP==[0..2]
VADD V0,V1,V2;将V1[0..2]的元素加至V2[0..2],得到V0[0..2]
V0
3 5 7
VPNXT V5;使用V5中的信息来确定下一分区(3..5,用于说明目的)
;VP==[3..5]
VSUB V0,V4,V6;将V6[3..5]减去V4[3..5]的元素,得到V0[3..5],保存V0[0..2]
V0
3 5 7 2 1 0
VPNXT V5;使用V5中的信息来确定下一分区(6..7,用于说明目的)
;VP==[6..7]
VADD V0,V8,V9;将V8[6..7]的元素加至V9[6..7],得到V0[6..7]
V0
3 5 7 2 1 0 9 11
在上述代码示例中观察的两个关键问题为:
1)每个向量操作写入与之前操作不同的(非重叠的)元素集。该属性独立于分区的位置,执行一个向量操作、VPNXT被用来移至下一分区、然后执行另一向量操作这些时候都是如此。该观察意味着尽管在寄存器层面存在RAW冒险,但是在元素层面不存在RAW冒险。
2)超过当前分区的元素未被定义(示出为?),并且直到下一VPNXT和后续向量操作之后才能根据这些元素通过程序来得到任意特定值。这消除了元素层面的伪WAR冒险。
结果,可以应用多个最优化:
1)原则上,写入V0的全部三个向量操作能够并行执行或以不同的顺序来执行,因为它们之间没有实际的冒险或相关性。所需要的是将这些结果融合进单个结果寄存器中。
2)当并行或无序地执行涉及相同目的地寄存器的操作时,通常需要使用寄存器重命名以便支持精确异常处理或引入停顿来处理WAW冒险。由于分区中早期的写入使得靠后的元素未被定义,因此,在该示例中不需要使用寄存器重命名或停顿:所有的操作能写入单个物理寄存器。
在描述能够实现多少最优化之前,我们需要检测这些最优化的可能性。这能通过使用状态机17监控指令流(例如,图4中所示)来完成。
图5中示出这样的状态机的状态。这些状态跟随当处理器处理代码(如上面所示的)时可能具有的检测的状态。起初,处理器处于未知状态,在该状态中是安全的,不应用最优化。当执行诸如上面所示的VADD之类的分割向量操作时,目的地寄存器Vd被写入,并且处理器移至新的“WC”状态,即写入当前分区状态。在该状态中,应该保存当前分区和先前分区的值,但是后面的分区未被定义,可以被重写。被执行的任何另外的分割向量操作将使得处理器保持在该状态中,然而,VPNXT指令将处理器移至下一分区,并且在执行将处理器移回WC状态的分割向量操作之前,处理器将处于“WP”状态,该“WP”状态是由先前分区写的状态,在该状态中,当前分区和后续分区中的所有元素均未被定义。可以通过与先前写结合来最优化该状态,由于只重写未定义的值,因此,不会发生数据冒险。因此,认识到该状态是能够执行最优化的触发。
当接收到新的向量分区时,转换至未知状态。
除了该状态机,另外的状态机(图4中的19)有助于一些最优化。该另外的状态机能被用来跟踪要被更新的第一数据元素,并且能被用来确定寄存器重命名在何种情况下是合适的、在何种情况下是不合适的。因此,由图6可知,状态开始于未知VPUN状态。接收VPCLR操作将该状态移至VPZERO,其中,位于初始分区之前并且没有元素是活跃的。VPNXT将该状态移至第一分区,当确定是否执行寄存器重命名时这很重要。在本发明的实施例中,当状态被识别为VPFIRST时,寄存器重命名针对目的地寄存器来实现。对WP状态以及状态机50识别的相同目的地寄存器进行的任意后续操作应该使得寄存器重命名被抑制。
任何更改分区的另外的操作将把状态带到未知,VPFIRST状态仅在响应于被VPFIRST跟随的VPCLR时再次获得。
图7示出示例代码序列和图4的状态机17和状态机19的相应状态。因此,在该情形中,两个状态机开始于未知状态,状态机19响应于VPCLR指令而移至VPZERO状态,并且响应于VPNXT指令而移至VPFIRST,此时,使用寄存器重命名电路来重命名目的地寄存器。状态机17停留在未知状态,直到对第一分区执行向量操作VADD为止,此时,其进入写入当前状态或WC状态。此时,状态机19进入未知状态。响应于指示下一分区的VPNXT V5指令,状态机17进入WP状态,并且利用先前的操作能最优化并并行执行下一操作,针对该操作,寄存器重命名被抑制,以使得其被写入相同的目的地寄存器。
在本发明的总结实施例中,确定在何种情况下不存在WAW元素冒险(即,目的地寄存器上的状态机指示不存在WAW冒险、WP状态),此时,抑制分配新的物理寄存器(寄存器重命名)并且允许新的分割向量操作写入当前物理寄存器中是安全的。这避免必须从一个物理寄存器向另一物理寄存器重复复制当前分区外的元素,并且避免了在相同寄存器上序列化连续的分割操作的问题。
除了在解码和发布逻辑中做出更改,最优化需要在向量寄存器文件中进行更改:不是写入向量寄存器的所有元素,操作只写入当前分区中的那些元素。为此,向量寄存器文件可以针对向量寄存器的每个元素使用“写选择”信号,以使得其能选择只写入(例如)元素3、4和5。这还要求选择要写入哪些元素的控制信号必须被传输回回写级。
在没有RAW元素冒险的情况下(即,在VP寄存器上的状态机指示当前分区包括第一元素的情况下),必须分配新的物理寄存器(触发寄存器重命名),但是不需要从先前物理寄存器中复制任何元素。这消除了在向量操作之间具有附加相关性的部分问题。
这些最优化影响以下处理:分配新的物理寄存器、将寄存器名称转换给物理寄存器以及安排读取寄存器先前的值,因此,这些最优化在执行这些处理的指令解码和发布逻辑中被更好地执行。
该技术不消除所有的复制和所有的相关性:有时,需要复制或相关性,而有时,该技术不能检测不需要复制或相关性。当需要复制时,可以通过两种方式之一来完成。
一种方法为运行逻辑支持分割向量操作的两个变量:一个执行融合,一个为不执行融合的最优化形式。指令发布逻辑能够基于状态机的值来选择合适的变量。
可替代的方法为运行逻辑仅支持分割向量操作的一个变量,但包括能将两个向量的元素融合进单个向量的附加“融合”操作。当该技术检测不存在WAW冒险或不存在RAW冒险时,只需要发布分割向量操作。在所有其他情形中,解码/发布逻辑另外需要发布该“融合”操作以读取寄存器的先前的值、将其与新的结果相融合并且将其写回新的物理寄存器文件。
图8示出具有与分区一起使用的掩码的处理器的状态。可能除了对特定分区执行操作之外,处理器还在掩码的控制下执行这样的操作,其中,该掩码识别应当对其执行操作的分区中的元素。例如,可以使用向量比较操作来设置向量掩码,然后使用该掩码来执行写入向量寄存器V0的向量加,之后,使用反转的该掩码来执行仍写入向量寄存器V0的向量减。这可以根据如何定义掩蔽,将向量加和向量减的结果融合到单个向量中。至于向量分割,向量掩蔽涉及某些常见的代码序列,可以使用简单的状态机来监控这些常见的代码序列。具体地,当与向量分割进行组合时,我们可以将(上面的)WC状态分解为若干个子状态。
图8示出对图5的状态机的扩展,当附加的两个状态WC+和WC-由于掩码的使用而出现时发生该扩展。在该情形中,对由掩码选出的元素执行第一操作,这是WC+情形,在该情形中,当前分区的一些元素未被定义,然后VMNOT操作可以被执行以选择其他元素,之后这些元素被选出以用于操作,但是在操作被执行之前,这些元素是活跃的(被选择)但是还未被定义(更新)。一旦操作已被执行,则处理器进入WC状态,并且响应于VPNXT,指示下一操作的WP状态能通过与先前操作并行执行来最优化。
图9示出根据本发明实施例的示出方法中步骤的流程图。在该方法中,检测要被向量指令流处理的向量内的数据相关性,并且确定对运行向量指令的时序的约束。然后确定所识别的数据相关性对于数据元素是否存在,如果不存在,则对于处理这些数据元素的时序约束可以被放松。该方法可以由计算机响应于计算机程序来执行,并且该方法可以在编译向量指令流的编译器中被执行。在该方面,不是在处理这些指令的过程中确定最优化,而是在编译时来确定最优化。编译器可以位于系统外部,或者编译器可以位于处理装置中,例如如图10所示。
图10示出数据处理装置,在该数据处理装置中,运行时编译器90被用来编译从指令缓存12接收到的代码。该编译器分析代码,并且确定向量数据相关性和相关联的对运行指令的时序的约束,以确保没有数据冒险。然后,该编译器查看各个数据元素的数据相关性,并且确定先前所确定的时序约束在何种情况下能被放松。以这种方式被最优化的编译的代码然后被发送至发布级10,并通过流水线前进。应当注意,尽管此处编译器被示出为运行时编译器,但可以是在处理代码之前用来编译代码的远程编译器。
在本发明的总结实施例中,这些实施例基于识别如下情形来实现最优化:即,冒险不存在并且当冒险存在时抑制行为。在无序处理器中,不必要的寄存器重命名被抑制,因此,抑制不必要的寄存器读取。另外,不必要的流水线停顿被抑制。
在向量操作以部分连续的方式(例如,一次两个元素,直到所有元素被处理)被执行的处理器中,允许写入相同向量的多个操作并行进行。
本发明的实施例在指令解码器中使用监控指令流的监控电路,以查找计算向量分区的指令并且查找被向量分区修改的指令。该监控电路使用小的、简单的状态机来跟踪每个向量寄存器的状态,并且使用向量控制寄存器来识别最优化是可能的且安全的这样的情形,并且触发解码/发布逻辑来做出不同的行动。
无序处理器通常使用寄存器重命名来消除伪寄存器相关性,并且支持精确异常处理。寄存器重命名建立从用在指令中的寄存器名称到物理寄存器名称的转换。当每个指令被解码并且被准备发布时,未使用的物理寄存器被分配以保持该指令的结果,并且输入寄存器名称被转换为它们当前的物理映射。这对于标量指令来说工作较好,但当其被用在向量分割的向量操作时会引入两类低效:
1.由于分割的向量操作将目的地寄存器的先前值与针对当前分区新计算的值进行融合,因此,必须从先前被映射至该寄存器的物理寄存器中读取先前的值。这需要附加的读取端口,并且如果向量操作具有部分连续的实现方式,则可能花费大量时间。该复制处理通常针对每个元素被重复多次:如果向量被分割为N个单独的分区,则第一分割的元素将被复制N-1次。
2.产生对相同寄存器的操作之间附加的相关性:即使对不相交的元素集进行操作,第二操作直到对相同寄存器的第一操作已经产生其结果之后才能完成。这种序列化降低了使用分割的向量操作的程序中潜在的并行性。
针对这些问题,我们的解决方案是使用上述技术来识别没有元素冒险的情况,并且使用它来抑制这些低效中的每个低效。
流水线顺序处理器尝试重叠运行独立的指令,并且依靠冒险检测逻辑(也称互锁(aka interlocks))来检测相关指令和第二相关指令的停顿发布,直到能够得到第一指令的结果为止。
如上所述,分割的向量操作通常遭受寄存器冒险,在没有本技术时,这些寄存器冒险使得指令发布被停顿。将该技术添加至流水线顺序处理器中使得冒险检测逻辑识别没有元素冒险的情况,从而避免引入不必要的停顿。
至于无序处理器,附加的要求是利用写选择信号来修改向量寄存器文件以控制哪些元素被写,并且安排将信号从VP寄存器传输回回写级。
图11示出示例指令,这些指令被注释以指示不同指令之间的数据相关性不存在。该示例示出八个指令中的前两个指令和后两个指令,每个指令用“_first”、“_partial”、“_last”进行注释,以指示缺少可能存在于它们未注释的变量中的一些数据相关性。这些指令的未注释的变量将向量寄存器V0的元素序号0设置到标量寄存器R0的内容中,将向量寄存器V0的元素序号1设置到标量寄存器R1的内容中,...并且将向量寄存器V0的元素序号7设置到标量寄存器R7的内容中。它们未注释的变量还将导致写后写(write-after-write,WAW)冒险,该WAW冒险将导致这些指令顺序运行。这些注释的变量还将相应的元素序号设置为标量寄存器的内容,但是这些注释的变量指示这些指令不产生数据元素冒险,因此,这些指令能够并行地或无序地来运行。
在使用寄存器重命名的处理器中:
-Vset_first指令使得分配被映射至向量寄存器V0的新的物理寄存器P,但是该指令指示先前被映射至V0的物理寄存器的内容不需要被复制到P中。
-Vset_partial指令更新被映射至V0的物理寄存器P合适的元素(不需要分配新的物理寄存器,并且不需要将该寄存器的先前内容与新的元素值进行融合)
-Vset_last指令更新被映射至V0的物理寄存器P的最后的元素(再次,不需要分配新的物理寄存器或融合旧的值)并且指示该寄存器现已被完全更新。
在顺序处理器中,Vset_first指令必须在使用V0的先前指令之后来运行,Vset_last指令必须在使用V0的后续指令之前来运行,而Vset_partial指令能够与此序列中的Vset_first指令、其他Vset_partial指令以及Vset_last指令中的任意指令并行运行。
将认识到,当设置元素序号0时使用“_first”注释,对于元素1到6(在向量中,元素1到6不是最低编号的元素也不是最高编号的元素)使用“_partial”注释,对于元素7使用“_last”注释。这将允许有效指令编码_first、_partial以及_final之间的区别是否通过元素序号来确定。
本发明各个进一步的方面和特征被定义在所附权利要求中。在不背离本发明的范围的情况下,可以对本文之前描述的实施例做出各种修改。

Claims (21)

1.一种用于处理向量指令流的数据处理装置,所述向量指令流用于对向量执行操作,所述向量每个都包括多个数据元素,所述数据处理装置包括:
寄存器组,所述寄存器组包括用于存储被处理的所述向量的多个寄存器;
流水线处理器,所述流水线处理器用于处理所述向量指令流;
所述流水线处理器包括被配置为检测由所述向量指令流进行处理并且被存储在所述多个寄存器中的所述向量的数据相关性并且确定对运行所述向量指令的时序的约束以使得不产生寄存器数据冒险的电路,所述寄存器数据冒险产生于这样的情况,在该情况下,对相同寄存器的两个访问以与所述指令流的顺序不同的顺序发生以致所述指令流中较晚发生的访问在所述指令流中较早发生的访问完成之前开始,其中,所述访问中的至少一个访问为写;
所述流水线处理器包括数据元素冒险确定电路,所述数据元素冒险确定电路被配置为针对数据相关性已被识别的向量内的所述数据元素中的至少一些数据元素来确定针对所述向量所识别的所述数据相关性对于所述数据元素中的所述至少一些数据元素中的每个数据元素是否存在,如果不存在,则放松所确定的对运行处理所述数据元素的指令的时序的约束。
2.根据权利要求1所述的数据处理装置,其中,所述数据处理装置被配置为以预定的访问顺序来访问向量内的数据元素,所述数据元素冒险确定电路被配置为确定当向量内的至少一个数据元素要响应于向量指令而被更新时,所述向量内按所述预定的访问顺序的后续数据元素当前包含可以被修改并且可以被丢弃的值,并且所述数据元素冒险确定电路被配置为向运行电路发送信号以通知响应于至少一个另外的向量指令来更新所述后续数据元素中的至少一个数据元素的至少一个操作能够以相对于所述操作的任意顺序被执行以更新所述数据元素。
3.根据权利要求2所述的数据处理装置,其中,所述向量被划分为多个分区,每个分区包括至少一个数据元素,在分区包括多个数据元素的情况下,所述多个数据元素为相邻的数据元素,所述数据处理装置被配置为以预定的访问顺序访问向量内的所述分区。
4.根据前面任意权利要求所述的数据处理装置,其中,所述数据元素冒险确定电路包括状态机,所述状态机指示当向量由指令访问时由所述向量内的数据元素所存储的值的状态,所述状态指示所述数据元素存储要被保存的数据值还是能够被丢弃的数据值。
5.根据权利要求3或权利要求4从属于权利要求3时所述的数据处理装置,其中,
所述数据元素冒险确定电路包括状态机,所述状态机指示当向量由指令访问时由所述向量内的数据元素所存储的值的状态,所述状态指示所述数据元素存储要被保存的数据值还是能够被丢弃的数据值;并且
所述状态机包括三种状态:未知状态,所述未知状态指示所有的数据元素包括要被保存的数据值;访问当前状态,所述访问当前状态指示在当前正被所述向量指令访问的所述当前分区之后的所有的数据元素能够被丢弃,并且所有的其他数据元素要被保存;以及由先前分区访问状态,所述由先前分区访问状态指示所述当前分区中的所有数据元素和所有后续的数据元素可以被丢弃,并且所有的先前数据元素具有要被保存的数据值。
6.根据权利要求5所述的数据处理装置,其中,所述数据处理装置包括多个向量控制寄存器和存储设备,所述向量控制寄存器用于控制所述指令要对所述分区中的哪些分区进行操作,所述存储设备用于存储指示所述多个向量控制寄存器中的哪个向量控制寄存器指示当前分区的值,其中,响应于从所述存储的值检测出所述向量控制寄存器中指示下一分区的向量控制寄存器不同于指示所述先前分区的所述向量控制寄存器,所述状态机被切换为未知状态。
7.根据权利要求5或权利要求6所述的数据处理装置,其中,所述由先前分区访问状态向所述数据元素冒险确定电路指示对所述当前分区的所述向量操作和对先前分区的所述向量操作能够以任意顺序来执行。
8.根据前面任意权利要求所述的数据处理装置,其中,当确定所述数据相关性时,所述被配置为检测由所述向量指令流进行处理的所述向量的数据相关性的电路响应于与所述向量指令相关联的注释,所述注释指示没有数据相关性。
9.根据权利要求2或权利要求3至8从属于权利要求2时的所述的数据处理装置,其中,所述数据处理装置还包括寄存器重命名电路,所述寄存器重命名电路用于将由所述向量指令内的寄存器标识符所识别的寄存器与所述寄存器组中所述多个寄存器之一进行映射;其中,
响应于所述数据元素冒险确定电路确定向量中的至少一个数据元素要响应于向量指令被更新、并且所述向量中按所述预定的访问顺序的后续数据元素当前包含可以被修改并能够被丢弃的值,所述流水线处理器被配置为更新当前被映射到由所述向量指令内的寄存器标识符所识别的寄存器的寄存器。
10.根据权利要求9所述的数据处理装置,其中,所述流水线处理器包括附加电路,所述附加电路用于确定向量中按照访问顺序的第一数据元素何时被更新,并且用于传输指示所述向量能被写入任意当前未使用的寄存器的信号。
11.根据权利要求10所述的数据处理装置,其中,所述附加电路包括具有第一状态和至少一个另外的状态的第一元素状态机,所述第一状态指示未知状态,所述至少一个另外的状态指示要被访问的所述向量的第一元素要被更新。
12.根据前面任意权利要求所述的数据处理装置,所述数据处理装置还包括数据存储设备,所述数据存储设备用于存储指示符,所述指示符为向量中每个数据元素提供指示所述数据元素当前存储应该被保存的数据值还是能够被丢弃的数据值的指示,所述元素数据冒险确定电路被配置为更新所述指示符存储设备。
13.根据权利要求12所述的数据处理装置,所述数据处理装置被配置为响应于读取向量寄存器元素的指令,针对分区内被标记为存储能够被丢弃的数据值的每个数据元素,存储预定值来代替当前存储在所述数据元素中的值。
14.根据前面任意权利要求所述的数据处理装置,其中,所述流水线处理器包括用于发布并运行所述向量指令的发布电路和运行电路,所述发布电路包括所述数据元素冒险检测电路。
15.根据权利要求14所述的数据处理装置,所述数据处理装置包括同步电路,所述同步电路被配置为周期性地确定当前被所述运行电路处理的数据元素的状态,并且将所述状态信息传输至所述发布电路。
16.根据前面任意权利要求所述的数据处理装置,其中,所述向量包括向量掩码,所述向量掩码被配置为识别向量操作要对其进行操作的数据元素,所述数据元素冒险确定电路被配置为根据所述向量掩码确定针对所述向量所识别的所述数据相关性对于所述数据元素中的所述至少一些数据元素中的每个数据元素是否存在,如果不存在,则放松所确定的对运行处理所述数据元素的指令的时序的约束。
17.根据权利要求5或权利要求6至15从属于权利要求5时所述的数据处理装置,其中,所述向量具有与其相关联的向量掩码,所述向量掩码被配置以识别由向量操作对其进行操作的向量分区中的数据元素,所述数据处理装置被配置为在向量掩码的控制下对向量分区执行一个操作,并且在反转的所述向量掩码的控制下对所述向量分区执行另外的操作,所述状态机包括至少一个另外的状态,所述至少一个另外的状态包括掩蔽访问当前状态,该掩蔽访问当前状态指示当前由所述向量指令访问的所述当前分区之后的所有数据元素以及所述数据分区中的所述掩蔽的数据元素能够被丢弃,而所有其他数据元素要被保存。
18.一种在数据处理装置内处理向量指令流的方法,所述向量指令流用于对向量执行操作,所述向量每个均包括多个数据元素并且被存储在所述数据处理装置的寄存器中,所述方法包括:
检测由所述向量指令流处理并且被存储于所述多个寄存器中的所述向量的数据相关性,以确定对运行所述向量指令的时序的约束,以使得不出现寄存器数据冒险,所述寄存器数据冒险出现在这样的情况下,在该情况下,对相同寄存器的两个访问以与所述指令流的顺序不同的顺序发生,以使得所述指令流中较晚发生的访问在所述指令流中较早发生的访问完成之前开始,其中所述访问中的至少一个访问为写;
针对数据相关性已被识别的向量内的所述数据元素中的至少一些数据元素,确定针对所述向量所识别的所述数据相关性对于所述数据元素中的所述至少一些数据元素中的每个数据元素是否存在,如果不存在,则:
放松所确定的对运行处理所述数据元素的指令的时序的约束。
19.根据权利要求18所述的方法,所述数据处理装置被配置为以预定的访问顺序访问向量中的数据元素,并且所述放松所确定的对运行的时序的约束的步骤包括:
确定当向量内的至少一个数据元素要响应于向量指令而被更新时,所述向量内按所述预定的访问顺序的后续数据元素当前包含可以被修改并且能够被丢弃的值;以及
向运行电路发送信号以通知响应于至少一个另外的向量指令来更新所述后续数据元素中的至少一个数据元素的至少一个操作能够以相对于所述操作的任意顺序被执行以更新所述数据元素。
20.一种转换计算机程序的方法,所述计算机程序包括用于对向量执行操作的多个向量指令,所述向量每个均包括多个数据元素,所述编译方法包括:
分析所述多个向量指令;
检测要由所述多个向量指令处理的所述向量的数据相关性,以确定对运行所述向量指令的时序的约束,以使得不出现寄存器数据冒险,所述寄存器数据冒险出现在这样的情况下,在该情况下,对相同寄存器的两个访问以与所述指令流的顺序不同的顺序发生,以使得所述指令流中较晚发生的访问在所述指令流中较早发生的访问完成之前开始,其中所述访问中的至少一个访问为写;
针对数据相关性已被识别的所述向量内的所述数据元素中的至少一些数据元素,确定针对所述向量所识别的所述数据相关性对于所述数据元素中的所述至少一些数据元素中的每个数据元素是否存在,如果不存在,则:
放松所确定的对运行处理所述数据元素的指令的时序的约束;
将所述计算机程序转换为适于在数据处理系统上运行的代码。
21.一种计算机程序,当在计算机上运行所述计算机程序时,所述计算机程序控制所述计算机执行根据权利要求20的方法步骤。
CN201380035953.5A 2012-07-11 2013-06-11 在向量处理过程中控制处理数据元素的顺序 Active CN104487941B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/546,227 US9098265B2 (en) 2012-07-11 2012-07-11 Controlling an order for processing data elements during vector processing
US13/546,227 2012-07-11
PCT/GB2013/051530 WO2014009689A2 (en) 2012-07-11 2013-06-11 Controlling an order for processing data elements during vector processing

Publications (2)

Publication Number Publication Date
CN104487941A true CN104487941A (zh) 2015-04-01
CN104487941B CN104487941B (zh) 2017-09-29

Family

ID=48670609

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380035953.5A Active CN104487941B (zh) 2012-07-11 2013-06-11 在向量处理过程中控制处理数据元素的顺序

Country Status (9)

Country Link
US (1) US9098265B2 (zh)
EP (1) EP2872988B1 (zh)
JP (1) JP6236443B2 (zh)
KR (1) KR102071272B1 (zh)
CN (1) CN104487941B (zh)
GB (1) GB2517877B (zh)
IL (1) IL236572A (zh)
MY (1) MY174573A (zh)
WO (1) WO2014009689A2 (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107851017A (zh) * 2015-07-31 2018-03-27 Arm 有限公司 用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法
CN108139910A (zh) * 2015-10-22 2018-06-08 Arm有限公司 处理用于向量算术指令的例外状况
CN108710505A (zh) * 2018-05-18 2018-10-26 南京大学 一种基于fpga的可扩展稀疏矩阵向量乘处理器
CN108834427A (zh) * 2016-03-23 2018-11-16 Arm有限公司 处理向量指令
CN108959179A (zh) * 2017-05-25 2018-12-07 三星电子株式会社 向量处理器的序列对齐方法
CN109074256A (zh) * 2016-04-26 2018-12-21 Arm有限公司 在执行向量操作时管理地址冲突的装置及方法
CN109416634A (zh) * 2016-07-08 2019-03-01 Arm有限公司 向量寄存器存取
CN109416633A (zh) * 2016-07-08 2019-03-01 Arm有限公司 用于执行重新排列操作的设备及方法
CN110073331A (zh) * 2016-12-13 2019-07-30 Arm有限公司 复制元素指令
CN110971401A (zh) * 2019-11-19 2020-04-07 武汉大学 一种基于交叉互锁机制的认证密钥协商方法及其实施装置

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11544214B2 (en) * 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
US10762164B2 (en) 2016-01-20 2020-09-01 Cambricon Technologies Corporation Limited Vector and matrix computing device
CN111580864B (zh) * 2016-01-20 2024-05-07 中科寒武纪科技股份有限公司 一种向量运算装置及运算方法
EP3336691B1 (en) 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
CN107291425B (zh) * 2017-06-23 2020-11-24 上海兆芯集成电路有限公司 合并解决重命名尺寸问题的部分写入结果的系统和方法
JP7078380B2 (ja) * 2017-11-01 2022-05-31 Necプラットフォームズ株式会社 命令制御装置、命令制御方法およびプログラム
US20210157598A1 (en) * 2019-11-26 2021-05-27 Advanced Micro Devices, Inc. Register write suppression
US11301252B2 (en) * 2020-01-15 2022-04-12 Arm Limited Executing mutually exclusive vector instructions according to a vector predicate instruction

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1811745A (zh) * 2005-01-13 2006-08-02 索尼计算机娱乐公司 使能/禁止控制simd处理器切片的方法和设备
US7822951B2 (en) * 2007-08-01 2010-10-26 Advanced Micro Devices, Inc. System and method of load-store forwarding
TW201140447A (en) * 2009-12-30 2011-11-16 Ibm Parallel execution unit that extracts data parallelism at runtime
US8131979B2 (en) * 2008-08-15 2012-03-06 Apple Inc. Check-hazard instructions for processing vectors

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0644270B2 (ja) * 1984-06-13 1994-06-08 富士通株式会社 ベクトルプロセッサの制御処理方式
JPH0721154A (ja) * 1993-06-21 1995-01-24 Hitachi Ltd ベクトル処理装置
US6988183B1 (en) * 1998-06-26 2006-01-17 Derek Chi-Lan Wong Methods for increasing instruction-level parallelism in microprocessors and digital system
JP4800582B2 (ja) * 2004-02-20 2011-10-26 セイコーエプソン株式会社 演算処理装置
JP3988144B2 (ja) * 2004-02-23 2007-10-10 日本電気株式会社 ベクトル処理装置、及び、追い越し制御回路
WO2007039837A2 (en) * 2005-09-15 2007-04-12 Dharmasena Suminda Sirinath Sa Implied instruction set computing (iisc) / dual instruction set computing (disc) / single instruction set computing (sisc) / recurring multiple instruction set computing (rmisc) based computing machine / apparatus / processor
JP5403661B2 (ja) * 2009-03-16 2014-01-29 エヌイーシーコンピュータテクノ株式会社 ベクトル演算装置及びベクトル演算方法
US8214831B2 (en) 2009-05-05 2012-07-03 International Business Machines Corporation Runtime dependence-aware scheduling using assist thread
JP5699554B2 (ja) * 2010-11-11 2015-04-15 富士通株式会社 ベクトル処理回路、命令発行制御方法、及びプロセッサシステム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1811745A (zh) * 2005-01-13 2006-08-02 索尼计算机娱乐公司 使能/禁止控制simd处理器切片的方法和设备
US7822951B2 (en) * 2007-08-01 2010-10-26 Advanced Micro Devices, Inc. System and method of load-store forwarding
US8131979B2 (en) * 2008-08-15 2012-03-06 Apple Inc. Check-hazard instructions for processing vectors
TW201140447A (en) * 2009-12-30 2011-11-16 Ibm Parallel execution unit that extracts data parallelism at runtime

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107851017A (zh) * 2015-07-31 2018-03-27 Arm 有限公司 用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法
CN108139910B (zh) * 2015-10-22 2022-07-19 Arm有限公司 处理用于向量算术指令的例外状况
CN108139910A (zh) * 2015-10-22 2018-06-08 Arm有限公司 处理用于向量算术指令的例外状况
CN108834427A (zh) * 2016-03-23 2018-11-16 Arm有限公司 处理向量指令
CN108834427B (zh) * 2016-03-23 2023-03-03 Arm有限公司 处理向量指令
CN109074256A (zh) * 2016-04-26 2018-12-21 Arm有限公司 在执行向量操作时管理地址冲突的装置及方法
CN109074256B (zh) * 2016-04-26 2023-02-28 Arm有限公司 在执行向量操作时管理地址冲突的装置及方法
CN109416634B (zh) * 2016-07-08 2023-07-18 Arm有限公司 数据处理设备和用于制造该设备的方法
CN109416634A (zh) * 2016-07-08 2019-03-01 Arm有限公司 向量寄存器存取
CN109416633A (zh) * 2016-07-08 2019-03-01 Arm有限公司 用于执行重新排列操作的设备及方法
CN109416633B (zh) * 2016-07-08 2023-02-28 Arm有限公司 用于执行重新排列操作的设备及方法
CN110073331A (zh) * 2016-12-13 2019-07-30 Arm有限公司 复制元素指令
CN110073331B (zh) * 2016-12-13 2023-09-12 Arm有限公司 复制元素指令
US11947962B2 (en) 2016-12-13 2024-04-02 Arm Limited Replicate partition instruction
CN108959179A (zh) * 2017-05-25 2018-12-07 三星电子株式会社 向量处理器的序列对齐方法
CN108959179B (zh) * 2017-05-25 2023-12-01 三星电子株式会社 向量处理器的序列对齐方法
CN108710505A (zh) * 2018-05-18 2018-10-26 南京大学 一种基于fpga的可扩展稀疏矩阵向量乘处理器
CN110971401B (zh) * 2019-11-19 2021-10-22 武汉大学 一种基于交叉互锁机制的认证密钥协商方法及其实施装置
CN110971401A (zh) * 2019-11-19 2020-04-07 武汉大学 一种基于交叉互锁机制的认证密钥协商方法及其实施装置

Also Published As

Publication number Publication date
EP2872988A2 (en) 2015-05-20
CN104487941B (zh) 2017-09-29
IL236572A0 (en) 2015-02-26
IL236572A (en) 2017-12-31
EP2872988B1 (en) 2016-12-14
WO2014009689A2 (en) 2014-01-16
JP2015522196A (ja) 2015-08-03
US20140019728A1 (en) 2014-01-16
MY174573A (en) 2020-04-27
GB2517877A (en) 2015-03-04
KR20150037951A (ko) 2015-04-08
US9098265B2 (en) 2015-08-04
JP6236443B2 (ja) 2017-11-22
KR102071272B1 (ko) 2020-01-30
GB2517877B (en) 2020-08-26
WO2014009689A3 (en) 2014-03-27

Similar Documents

Publication Publication Date Title
CN104487941A (zh) 在向量处理过程中控制处理数据元素的顺序
CN106257411B (zh) 单指令多线程计算系统及其方法
US6721875B1 (en) Method and apparatus for implementing a single-syllable IP-relative branch instruction and a long IP-relative branch instruction in a processor which fetches instructions in bundle form
JP6095670B2 (ja) コンピュータ・システム内のオペランド活性情報の維持
US6738892B1 (en) Use of enable bits to control execution of selected instructions
CN102934075B (zh) 用于使用预先通知技术改变程序的顺序流程的方法和设备
US7797521B2 (en) Method, system, and computer program product for path-correlated indirect address predictions
US7003629B1 (en) System and method of identifying liveness groups within traces stored in a trace cache
US8683185B2 (en) Ceasing parallel processing of first set of loops upon selectable number of monitored terminations and processing second set
CN108139910B (zh) 处理用于向量算术指令的例外状况
US20090150890A1 (en) Strand-based computing hardware and dynamically optimizing strandware for a high performance microprocessor system
US20100274972A1 (en) Systems, methods, and apparatuses for parallel computing
US20090217020A1 (en) Commit Groups for Strand-Based Computing
US20100058034A1 (en) Creating register dependencies to model hazardous memory dependencies
KR20150111990A (ko) 하드웨어 포인터를 이용한 simd 코어 내 분기 해법
TWI733798B (zh) 在執行向量操作時管理位址衝突的設備及方法
JPH07271579A (ja) 計算機システムにおける演算方法および計算機システム
CN105074657B (zh) 并行管道中的发散分支的硬件和软件解决方案
KR102013582B1 (ko) 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
WO2009076324A2 (en) Strand-based computing hardware and dynamically optimizing strandware for a high performance microprocessor system
CN108920190A (zh) 用于确定从其恢复指令执行的恢复点的装置和方法
US7694110B1 (en) System and method of implementing microcode operations as subroutines
US6651164B1 (en) System and method for detecting an erroneous data hazard between instructions of an instruction group and resulting from a compiler grouping error
Warg Techniques to reduce thread-level speculation overhead
KR102379886B1 (ko) 벡터 명령 처리

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