CN105593808A - 用于执行推测向量存取操作的数据处理装置和方法 - Google Patents

用于执行推测向量存取操作的数据处理装置和方法 Download PDF

Info

Publication number
CN105593808A
CN105593808A CN201480054794.8A CN201480054794A CN105593808A CN 105593808 A CN105593808 A CN 105593808A CN 201480054794 A CN201480054794 A CN 201480054794A CN 105593808 A CN105593808 A CN 105593808A
Authority
CN
China
Prior art keywords
vector
data
address
buffer
instruction
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
CN201480054794.8A
Other languages
English (en)
Other versions
CN105593808B (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 CN105593808A publication Critical patent/CN105593808A/zh
Application granted granted Critical
Publication of CN105593808B publication Critical patent/CN105593808B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation 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/30098Register arrangements
    • 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
    • G06F9/30109Register structure having multiple operands in a single register
    • 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/3824Operand accessing
    • 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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3875Pipelining a single stage, e.g. superpipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明提供了用于执行向量存取操作的数据处理装置和方法。该数据处理装置具有可重构的缓冲器,该可重构的缓冲器可由向量数据存取电路存取并且包括存储阵列以用于存储包含N个向量元素的多达M个向量。该向量数据存取电路执行推测数据写入操作,以使来自向量寄存器组中的所选向量操作数的向量元素被存储到可重构的缓冲器中。当出现提交条件时,将当前存储在可重构的缓冲器中的向量元素写入到数据存储设备中。推测控制电路维持指示存储在可重构的缓冲器中的每一个所选向量操作数的向量元素的数目的推测宽度指示。推测宽度指示被初始化为初始值,但是当在可重构的缓冲器内检测到溢出条件时,修改推测宽度指示以减小存储在可重构的缓冲器中的每一个所选向量操作数的向量元素的数目。然后,可重构的缓冲器响应于推测宽度指示的变化而重构存储阵列,以增加向量的数目M并减小每一个向量中所包含的向量元素的数目N。这提供了用于支持推测数据写入操作的执行的有效机制。

Description

用于执行推测向量存取操作的数据处理装置和方法
技术领域
本发明涉及用于执行推测向量存取操作的数据处理装置和方法。
背景技术
一种用于改良数据处理装置的性能的已知技术为提供用以支持向量操作的执行的电路。对至少一个向量操作数执行向量操作,其中每一个向量操作数包括多个向量元素。向量操作的执行则涉及对(一个或多个)向量操作数中的各个向量元素重复地应用一操作。
在支持向量操作的执行的典型数据处理系统中,将提供向量寄存器组以用于存储向量操作数。因此,通过示例的方式,向量寄存器组中的每一个向量寄存器可以存储包括多个向量元素的向量操作数。
在高性能实施方式中,也已知提供可以对向量操作数中的各个向量元素并行地执行所需操作的向量处理电路(通常被称为SIMD(单指令多数据(SingleInstructionMultipleData))处理电路)。在替代性实施例中,标量处理电路仍可被用于实施向量操作,但是在这种情况下,经由标量处理电路迭代执行操作来实施该向量操作,其中每一次迭代对向量操作数的不同向量元素进行操作。
与一系列等效的标量操作相比,经由使用向量操作可以实现显着的性能益处。
一种类型的向量操作是向量存取操作,向量存取操作可采取向量加载操作或者向量存储操作的形式,其中向量加载操作用于将来自缓存/存储器的至少一个向量操作数加载到向量寄存器组中,而向量存储操作用于将来自向量寄存器组的至少一个向量操作数存储到缓存/存储器(在本文中缓存/存储器也被称作数据存储设备)中。
当设法增进向量处理的性能益处时,已知设法向量化一系列标量操作,以便用一系列等效的向量操作来替换这些标量操作。例如,对于包含一系列标量指令的循环,可能可以通过使用一系列等效的向量指令替换这一系列标量指令来向量化该循环,其中向量操作数包含关于初始标量循环的不同迭代的元素以作为向量元素。
然而,虽然这种方法在初始标量循环所需的迭代次数被预先确定的情况可以有效作用,但是在迭代次数未被预先确定的情况下很难向量化这样的循环。具体来说,因为迭代次数未被预先确定,因此不能预先确定在每一个向量操作数中将需要多少个向量元素。
在上述类型的一些情形中可能执行推测向量处理,其中推测是针对所需的向量元素的数目做出的,并且稍后当确定所需的向量元素的准确数目时,采取补救措施。考虑到先前提及的向量存取操作,熟知的是结合向量加载操作执行此类推测,因为如果做出过度推测,这将仅会导致数据被存储在向量寄存器组中,稍后在确定所需的向量元素的准确数目时,可以删除存储该数据以作为补救措施的一部分。然而,此类推测对于向量存储操作而言是有问题的,因为向量存储操作会致使缓存/存储器的内容被更新,这可能妨碍采取所需的补救措施。
由KAsanovic于1998年在Berkeley发表的标题为“VectorMicroprocessors(向量微处理器)”的博士论文的第116-121页教导了一种提供推测存储加载的限制方法为:在每一存储区段后提供预读取缓冲区。此预读取将确保对有效指针之后的一些区域的读取不会导致地址错误。然而,此软件技术方法仅提供针对单位步幅和小步幅存储加载的推测,因此当利用更复杂的存储存取模式向量化程序时,此方法不适用。此外,这将无法使能推测向量存储操作的执行。
因此,当标量指令的循环包括一个或多个存储指令并且循环的迭代次数未被预先确定时,传统上将这样的循环视为不能经受推测向量化。
发明内容
从第一方面来看,本发明提供了一种数据处理装置,该数据处理装置包括:向量寄存器组,该向量寄存器组被配置为存储由处理电路存取的向量操作数,每一个向量操作数包括多个向量元素;向量数据存取电路,其用于执行向量存取操作,以使向量操作数在向量寄存器组和数据存储设备之间移动;可重构的缓冲器,该可重构的缓冲器可由向量数据存取电路存取并且包括用于存储包含N个向量元素的多达M个向量的存储阵列,其中M和N的值是可重构的;该向量数据存取电路被配置为执行推测数据写入操作,以使来自向量寄存器组中的所选向量操作数的向量元素被存储到可重构的缓冲器中,当出现提交条件时,向量数据存取电路被进一步配置为使当前存储在可重构的缓冲器中的向量元素被写入到数据存储设备中;推测控制电路被配置为维持推测宽度指示,该推测宽度指示指示被存储在可重构的缓冲器中的每一个所选向量操作数的向量元素的数目,该推测宽度指示被初始化为初始值,并且当检测到可重构的缓冲器内的溢出条件时,修改该推测宽度指示以减少被存储在可重构的缓冲器中的每一个所选向量操作数的向量元素的数目;以及可重构的缓冲器响应于该推测宽度指示的变化而重构存储阵列,以增加向量的数目M并减少每一个向量中所包含的向量元素的数目N。
根据本发明,提供了一种可重构的缓冲器,该可重构的缓冲器包括用于存储包含N个向量元素的多达M个向量的存储阵列,其中M和N的值是可重构的。向量数据存取电路然后可以被布置为执行推测数据写入操作,其中并非将数据直接写入到数据存储设备中,而是将相关的向量元素存储到可重构的缓冲器中。随后,后续出现的提交条件使向量数据存取电路将当前存储在可重构的缓冲器中的向量元素从该缓冲器存储到数据存储设备中。此外,推测宽度指示被维持以指示存储在可重构的缓冲器中的每一个向量操作数中的向量元素的数目。该推测宽度指示被初始化为初始值,例如指示待被存储的向量元素的最大数目的值(由此识别最大值N以及最小值M)。当检测到溢出条件时,推测控制电路被用来修改推测宽度指示,以减少存储在可重构的缓冲器中的向量元素的数目(即,减小N的值)。可重构的缓冲器随后基于该经修改的推测宽度重构存储阵列,从而增大向量的数目M并减小每个向量中所包含的向量元素的数目N。
通过这样的方法,可能向量化包括一个或多个存储指令的标量指令序列,并且允许对生成的向量操作的推测性执行。具体来说,当执行推测数据写入操作(在本文也被称作推测存储指令)时,相关的向量元素首先被存储到可重构的缓冲器中,并且在出现提交条件后,仅被发送给数据存储设备,从而确保在提交条件发生之前不更新数据存储设备的状态。通常,在提交条件发生时,将已经做出关于适当的推测宽度的决定,从而将做出关于将从缓冲器存储到数据存储设备中的向量元素的适当数目的决定。
此外,根据本发明,如果考虑到当前的推测宽度指示,在出现提交条件之前可重构的缓冲器达到不能再存储向量元素中的另外的向量的点(这种情形在本文中被称作溢出条件),则减小推测宽度,并且相应地重构可重构的缓冲器以便允许更多的向量被存储在可重构的缓冲器中,每一个向量具有更少数目的向量元素。这使得在推测数据写入操作的执行期间推测宽度被动态地减小,同时维持可重构的缓冲器内的向量元素,随后在出现提交条件时这些向量元素被写入到数据存储设备中。
推测宽度指示可以采取各种形式。例如,推测宽度指示可以由屏蔽(mask)指定,或者由标识特定元素位置(例如,起始元素位置和/或终止元素位置)的一个或多个寄存器的内容指定。在一个实施例中,推测宽度指示不仅指示每一个向量操作数中的经历推测数据写入操作的向量元素的数目,还进一步识别每一个向量操作数的经历该推测数据写入操作的第一向量元素。以这种方式识别的第一向量元素不必为位于向量操作数的元素位置0处的向量元素。
虽然经历推测数据写入操作的向量元素的数目不必占据一系列相邻的向量元素位置,但是在一个实施例中推测宽度指示确实将每一个向量操作数中的经历推测数据写入操作的向量元素的数目识别为从该第一向量元素开始的连续的向量元素的特定数目。
相应地,存储在可重构的缓冲器中的第一向量元素将不一定是位于向量操作数的元素位置0处的向量元素。
存在可将向量数据存取电路布置为执行推测数据写入操作的许多方式。例如,可以提供特定的推测数据写入指令,该指令使向量数据存取电路执行推测数据写入操作。可替代地或附加地,在一个实施例中,推测控制电路响应于起始推测指令的执行而触发推测操作模式,在该推测操作模式期间,向量数据存取电路被配置为执行该推测数据写入操作。因此,在这样的实施例中,装置被置于在其间执行推测数据写入操作的推测操作模式中。
存在可以触发提交条件的许多方式。在一个实施例中,推测控制电路响应于提交指令的执行而向向量数据存取电路指示提交条件的出现并且终止推测。在使用推测操作模式的实施例中,提交指令的执行通常将通过使装置退出推测操作模式来终止推测。
推测宽度指示可以各种方式被初始化为初始值。在使用上述起始推测指令与提交指令的实施例中,通常将使用这些指令中的一个来初始化推测宽度指示。
在一个实施例中,推测控制电路将响应于溢出条件的反复出现而进一步减小推测宽度。然而,在一个实施例中,如果推测控制电路响应于溢出条件而修改推测宽度指示以指示将每一个所选向量操作数中的仅一个向量元素存储在可重构的缓冲器中,则推测控制电路被配置为使向量数据存取电路将当前存储在可重构的缓冲器中的每一个向量的第一向量元素写入到数据存储设备中。这种方法避免了甚至在向量仅包含一个向量元素的情况下可重构的缓冲器可能溢出的潜在情形的出现。作为替代,按顺序执行所有待定写入,即将每一个向量的第一元素写入到存储器中,从而使缓冲器被排空,由此避免了一旦推测宽度已经被减小到一个向量元素时,可重构的缓冲器溢出的可能性。此后,在一个实施例中,在提交条件之前发生的所有后续推测写入操作可以被继续写入到可重构的缓冲器中,这是因为排空可重构的缓冲器的当前内容将确保存在用于这些进一步写入的空间。
可替代地,在一个实施例中,一旦推测宽度已经被减小到一个向量元素,则推测控制电路被配置为终止推测。从而,发生在提交条件之前的任何后续数据写入操作将不被当做是推测性的,作为替代,这些写入操作中每一个写入操作的第一数据元素将被写入到数据存储设备中,而非写入到可重构的缓冲器中。这意味着写入将在提交条件之前发生,不过这是没有问题的,因为在此阶段推测宽度已经被减小到一个向量元素,并且将第一向量元素取出并写入到数据存储设备中始终是安全的,因为实际上在这种情形中并未执行推测。
在一个实施例中,对于每一个推测数据写入操作(不管当前的推测宽度指示如何),每一个所选向量操作数的第一向量元素被写入到数据存储设备中而非可重构的缓冲器中,并且由推测宽度指示指示的任何剩余向量元素被存储到可重构的缓冲器中。因为将第一向量元素写入到数据存储设备中将始终是安全的,所以这种方法仍将确保正确操作,并且使存储设备必须存储从可重构的缓冲器中删除的每一个向量的第一向量元素。由此使得可重构的缓冲器的大小被减小。
在出现溢出条件之后,推测控制电路被配置为修改推测宽度指示的方式可以取决于实施方式而变化。然而,在一个实施例中,推测控制电路被配置为每当检测到溢出条件时,就修改推测宽度指示以将每一个向量中的向量元素数目N减小到原来的二分之一。这种方法可以简化可重构的缓冲器的重构操作。
在一个实施例中,当响应于经修改的推测宽度指示而重构存储阵列时,可重构的缓冲器被布置为清除在该可重构的缓冲器中的超出经修改的推测宽度所指示的向量元素数目的任何向量元素。这是没有问题的,因为被清除的向量元素涉及较高层级的推测,且在该数据处理装置上执行的软件可以被布置为在一系列后续的推测数据写入操作期间设法将那些被清除的向量元素写入。
在一个实施例中,除了执行推测数据写入操作以外,向量数据存取电路还被配置为执行推测数据读取操作,以使所选向量操作数中的向量元素从数据存储设备中被读取出来以存储在向量寄存器组中,每一个所选向量操作数的向量元素的数目取决于推测宽度指示。因此,正如推测数据写入操作的情况,推测宽度指示被用来控制每一个向量操作数内的经历推测数据读取操作的向量元素的数目。
虽然可以将由推测数据读取操作读取的向量元素直接存储到向量寄存器组中,但是当同时执行推测数据写入操作和推测数据读取操作二者时,可能需要检查所执行的读取与写入之间的任何危险。例如,如果较早的数据写入操作已经将数据值写入到了特定地址,但是该数据值仍被保存在可重构的缓冲器内,并且因此尚未被写入到数据存储设备中,则在取出可重构的缓冲器的内容并将其写入到数据存储设备之前直接从数据存储设备获取数据值的情况下,将获取错误的值。
在一个实施例中,对这样的危险检查的提供是经由对可重构的缓冲器的修改来实施的。具体来说,在一个实施例中,可重构的缓冲器被配置为针对所执行的每一个推测数据写入操作而存储形成要被写入的写入向量的向量元素以及用于确定该写入向量的每一个向量元素的地址的地址指示数据,可重构的缓冲器还被配置为针对每一个推测数据读取操作而存储地址指示数据,该地址指示数据用于识别形成要被该推测数据读取操作读取的读取向量的每一个向量元素的地址。因此,对于推测写入操作,形成写入向量的向量元素和相关联的地址指示数据二者被存储到可重构的缓冲器中。对于每一个推测读取操作,不需要存储读取数据,但是与被读取的向量元素相关联的地址指示数据被存储在可重构的缓冲器内。这提供了可用于执行危险检查的地址信息的存储库。地址指示数据可以采取各种形式,例如其可是表示一系列连续地址(或者存储器的连续区域)的“单位步幅”,可以是表示一系列均匀间隔的地址的“步幅”,或者可以是由地址的向量表示的“索引”,每一个向量元素有一个地址指示数据。
具体来说,在一个实施例中,每一个写入向量和每一个读取向量包括从最初的起始位置K到位置X的元素位置,其中K与X取决于推测宽度指示,并且该装置还包括地址比较电路,该地址比较电路被配置为确定与当前的推测数据存取操作相关联的第一向量元素的地址是否与与存储在该可重构的缓冲器中的地址指示数据相关联的第二向量元素的地址匹配。在确定匹配的情况下,并且如果第一向量元素与第二向量元素中的至少一个形成写入向量的一部分,并且第二向量元素位于高于第一向量元素的元素位置,则推测控制电路被配置为修改推测宽度指示,以减小每一个写入向量和每一个读取向量中的向量元素的数目。
因此,根据此方法,地址比较电路检查潜在的危险状态,以及随后通过减小推测宽度来移除危险状态。
存在多种方式可以减小推测宽度,从而移除潜在的写入后读取(RAW)、读取后写入(WAR)和写入后写入(WAW)危险。在一个实施例中,如果第二向量元素位于元素位置K和X之间的元素位置j,则推测控制电路被配置为修改推测宽度指示,以减小每一个写入向量和每一个读取向量中的向量元素的数目以包括向量元素位置K到j-1。减小推测宽度至仅包括向量元素位置K到j-1导致位于元素位置j的向量元素被清除,从而移除所识别的危险。
因此,根据上述技术,将与当前的推测数据存取操作相关联的每一个向量元素的地址和由缓冲器中的地址指示数据识别的先前读取或写入操作的每一个向量元素的地址比较,比较后者向量元素的元素位置是否大于新的向量元素(即,当前的推测数据存取操作的向量元素)的元素位置。应注意如果当前的推测数据存取操作是推测数据读取操作,则不需要比较当前的推测数据读取操作的每一个向量元素的地址和任何与在可重构的缓冲器中识别的读取向量有关的地址。
有可能上述地址比较过程可导致多个匹配。在一个实施例中,在地址比较电路确定当前的推测数据存取操作内的第一向量元素的地址匹配与存储在可重构的缓冲器中的地址指示数据相关联的多个第二向量元素的地址的情况下,地址比较电路被配置为将多个第二向量元素中的具有最低元素位置的第二向量元素确定作为匹配第二向量元素,并且推测控制电路被配置为考虑该匹配第二向量元素的元素位置来修改推测宽度指示。因此,考虑到最低元素位置处的匹配向量元素而减小推测宽度,从而移除由多个匹配识别的潜在危险。
在一个实施例中,如果当前的推测数据存取操作数据是当前的推测数据写入操作,则地址比较电路被配置为比较当前的推测数据写入操作的地址指示数据与存储在可重构的缓冲器中的每一个地址指示数据,以检测当前的推测数据写入操作的向量元素的地址与由存储在可重构的缓冲器中的地址指示数据识别的每一个写入向量和每个读取向量的向量元素的地址之间的任何匹配。
然而,如果当前的推测数据存取操作是当前的推测数据读取操作,则地址比较电路被配置为比较当前的推测数据读取操作的地址指示数据与存储在可重构的缓冲器中的每一个写入向量的地址指示数据,以检测当前的推测数据读取操作的向量元素的地址与存储在该可重构的缓冲器中的每一个写入向量的向量元素的地址之间的任何匹配。
除了支持对读取/写入与写入/写入危险的检测和消除之外,如先前所描述的,可重构的缓冲器也可被用于将写入数据递送给后续的读取操作。具体来说,地址比较电路可以被配置为确定与当前的推测数据读取操作相关联的第一向量元素的地址是否匹配存储在可重构的缓冲器中的写入向量的第三向量元素的地址。在确定匹配的情况下,并且如果第三向量元素位于低于第一向量元素的元素位置,或者位于与第一向量元素相同的元素位置,则地址比较电路被配置为从可重构的缓冲器输出第三向量元素,以形成当前的推测数据读取操作的读取向量的第一向量元素。因此这样识别了以下情形:其中读取操作设法从与当前存储在可重构的缓冲器内并且尚未被写入到数据存储设备中的写入数据相关联的地址进行读取,并且确保该写入数据随后被返回作为正确的读取数据。
同样,这样的地址比较过程有可能导致多个匹配。在一个实施例中,在地址比较电路确定当前的推测数据读取操作中的第一向量元素的地址匹配与存储在可重构的缓冲器中的写入向量相关联的多个第三向量元素的地址的情况下,地址比较电路被配置为经多个第三向量元素中的具有最高元素位置的第三向量元素确定作为匹配第三向量元素,并且地址比较电路被配置为从可重构的缓冲器输出匹配第三向量元素,以形成当前的推测数据读取操作的读取向量的第一向量元素。位于最高元素位置的匹配第三向量元素将是最新的写入数据,并且相应地是适当的、用以返回以形成当前的推测数据读取操作的读取数据的写入数据。
在一个实施例中,当多个第三向量元素中存在一个以上具有最高的元素位置的第三向量元素时,地址比较电路被配置为将多个第三向量元素中该一个以上的第三向量元素中的与最近的推测数据写入操作相关联的第三向量元素确定作为匹配第三向量元素。同样,这样确保了返回正确的写入数据以形成读取数据。
需要由地址比较电路执行的地址比较的次数将取决于可重构的缓冲器的大小,但是可能需要由地址比较电路执行相当次数的地址比较。在一个实施例中,为了改良地址比较电路的性能,地址比较电路包括精确比较区段和粗略比较区段,其中粗略比较区段被用于执行关于比所选元素位置高的元素位置的地址的比较。较高的元素位置是那些具有较高推测程度的元素位置,并且仅通过执行关于这些较高元素位置的粗略比较,就可以实现地址比较电路的性能的显着增加。如果粗略比较的结果指示可能存在与该粗略比较所涵盖的元素位置中的一个元素位置的匹配,则可以在后续迭代中使用精确比较区段以执行精确的比较,或者替代地可以如先前所描述地减小推测宽度以移除粗略比较所涵盖的元素位置的地址的任何潜在危险。
可以取决于情况来选择执行上述粗略比较的所选元素位置。例如,如果当前的推测数据存取操作是数据写入操作,则所选的元素位置可以是任何期望的位置。如果当前的推测数据存取操作是推测数据读取操作,那么如果使用先前提及的写入数据递送方法,则可能需要执行精确的比较(除非减小推测宽度来移除RAW危险),并且因此对所选元素位置的选择将取决于当时正在考虑的当前的推测数据读取操作的特定元素位置。
可以使用各种已知的技术来形成粗略比较区段。然而,在一个实施例中,粗略比较区段包括布隆(Bloom)过滤电路。
虽然在一个实施例中,地址比较电路可能需要针对所有的推测数据存取操作执行上述所识别的地址比较,但是在一个替代性实施例中,推测数据存取操作具有与此地址比较相关联的比较状态指示,并且由地址比较电路执行的地址比较取决于比较状态指示。比较状态指示可以被全局性地设置或者可以针对每一个推测数据存取操作被分别识别。
在一个实施例中,如果比较状态指示具有针对当前的推测数据存取操作的第一值,则地址比较电路被配置为不执行针对该当前的推测数据存取操作的地址比较。因此,如果程序员已知作为推测向量存取操作的对象的向量不可能具有与可重构的缓冲器中的任何内容的匹配地址,则状态信息可以被设置为第一值,以使该特定向量存取操作绕过该地址比较电路。
可替代地,如果读取与写入由可彼此匹配的一个读取/写入集合A和可彼此匹配的第二读取/写入集合B组成,则可重构的缓冲器可以维持与每一个向量相关联的标志以识别向量与集合A有关还是与集合B有关,并且随后针对被识别为与集合A有关或与集合B有关的当前的推测数据存取操作,可以减小地址比较的次数,具体来说地址比较电路仅比较可重构的缓冲器内的相关向量。
从第二方面来看,本发明提供了一种在数据处理装置中执行推测向量写入操作的方法,该数据处理装置包括:用于存储供处理电路存取的向量操作数的向量寄存器组,每一个向量操作数包括多个向量元素;以及向量数据存取电路,用于执行向量存取操作以在向量寄存器组和数据存储设备之间移动向量操作数,该方法包括:提供可重构的缓冲器,该缓冲器可由向量数据存取电路存取并且包括用于存储包含N个向量元素的多达M个向量的存储阵列,其中M与N的值是可重构的;使用向量数据存取电路执行推测数据写入操作,以使来自向量寄存器组中的所选向量操作数的向量元素被存储到可重构的缓冲器中;当出现提交条件时,将当前存储在可重构的缓冲器中的向量元素写入到数据存储设备中;维持指示存储在可重构的缓冲器中的每一个所选向量操作数的向量元素的数目的推测宽度指示,该推测宽度指示被初始化为初始值;当在可重构的缓冲器内检测到溢出条件时,修改推测宽度指示来减小存储在可重构的缓冲器中的每一个所选向量操作数的向量元素的数目;以及响应于推测宽度指示的变化,重构可重构的缓冲器的存储阵列,以增加向量的数目M并减小每一个向量中所包含的向量元素的数目N。
从第三方面来看,本发明提供了一种以非暂态形式存储计算机程序的计算机程序产品,该计算机程序用于控制计算机以提供用于与根据本发明的第一方面的数据处理装置相对应的程序指令的虚拟机执行环境。
从第四方面来看,本发明提供了一种数据处理装置,该数据处理装置包括:向量寄存器组装置,该向量寄存器组装置用于存储由处理装置存取的向量操作数,每一个向量操作数包括多个向量元素;向量数据存取装置,用于执行向量存取操作,从而使向量操作数在向量寄存器组装置和数据存储装置之间移动;可重构的缓冲器装置,该缓冲器装置可由向量数据存取装置存取并且包括用于存储包含N个向量元素的多达M个向量的存储阵列装置,其中M与N的值是可重构的;向量数据存取装置用于执行推测数据写入操作,以使来自向量寄存器组装置中的所选向量操作数的向量元素被存储到可重构的缓冲器装置中,当出现提交条件时,向量数据存取装置用于使当前存储在可重构的缓冲器装置中的向量元素被写入到数据存储装置中;推测控制装置,该推测控制装置用于维持指示存储在可重构的缓冲器装置中的每一个所选向量操作数的向量元素的数目的推测宽度指示,该推测宽度指示被初始化为初始值,并且当检测到可重构的缓冲器装置内的溢出条件时,修改推测宽度指示以减小存储在可重构的缓冲器装置中的每一个所选向量操作数的向量元素的数目;以及可重构的缓冲器装置响应于推测宽度指示的变化而重构存储阵列装置,以增加向量的数目M并减少每一个向量中所包含的向量元素的数目N。
附图说明
仅通过举例的方式,并参考在附图中所示出的本发明的实施例来进一步描述本发明,其中:
图1是根据一个实施例的数据处理装置的框图;
图2A至图2C根据一个实施例示意性地示出在图1的推测控制电路中所提供的各种控制寄存器;
图3是根据一个实施例示出如何使用图1的电路来执行推测向量写入操作的流程图;
图4是根据一个实施例更详细地示出当执行图3的处理时如何检测到溢出条件的流程图;
图5示意性地示出可以使用所描述的实施例的技术来向量化的标量指令的循环;
图6和图7根据一个实施例示意性地示出用于向量化图5的标量循环的向量指令的序列;
图8A根据一个实施例示出响应于提交指令而执行的一系列步骤;
图8B根据一个实施例示出响应于起始推测指令而执行的一系列步骤;
图9根据一个实施例示意性地示出响应于检测到溢出条件而重构图1的缓冲器;
图10根据替代性的实施例示意性地示出数据处理装置;
图11根据一个实施例示意性地示出图10的缓冲器的内容,并且具体来说示出了存储在该缓冲器内的、与和推测写入和读取操作相关联的写入向量和读取向量有关的信息;
图12是示出当处理当前的推测写入操作时,图10的地址比较电路的操作的流程图;
图13是示出当处理当前的推测读取操作时,图10的地址比较电路的操作的流程图;
图14根据一个实施例示意性地示出当处理当前的推测读取操作时,可在图10的电路内使用的写入递送机制;
图15A至图15C根据一个实施例示意性地示出可以如何根据图10的地址比较电路所执行的比较操作的输出来减小推测宽度;
图16A到图16C示意性地示出一个实施例的写入递送机制;
图17根据一个实施例示意性地示出图10的地址比较电路的布置;以及
图18根据一个实施例示意性地示出数据处理装置的虚拟机实施方式。
具体实施方式
图1根据一个实施例示出了数据处理装置5的一部分。图1仅示出了向量处理部分,并且还可能存在标量处理电路、标量加载/存储单元以及标量寄存器组,以使得可以解码和执行向量和标量指令二者。
指令队列10被提供用于保存待执行的指令,这些指令被路由到解码电路20,该解码电路20被布置为解码指令并发送控制信号到图1的装置内的适当的电路。具体来说,对于一般的向量处理指令,解码电路20将发出控制信号到向量处理电路30,向量处理电路30将根据存储在向量寄存器组40内的一个或多个向量源操作数而执行所需的向量处理操作。通常,这种操作的结果也被存储回向量寄存器组40以作为一个或多个向量目的操作数。
对于任何向量数据存取指令而言,对这些指令的解码将会使控制信号被发送到向量加载/存储单元50,该向量加载/存储单元50包括加载/存储电路52,该加载/存储电路52用于使一个或多个数据操作数在向量寄存器组和缓存/存储器(缓存/存储器在本文中被称作数据存储设备)之间于两个方向中的任意一者移动。具体来说,如果向量数据存取指令是向量加载指令,则加载/存储电路52将会把来自数据存储设备的至少一个向量操作数加载到向量寄存器组40中。类似地,如果向量数据存取指令是向量存储指令,则加载/存储电路52将会把至少一个向量操作数从向量寄存器组40取出并存储到数据存储设备中。
根据图1所示的实施例,向量加载/存储单元50还包含有加载/存储电路52可存取的缓冲器54。虽然图1中的缓冲器5被示为在向量加载/存储器50的内部,但是应理解的是根据需要,该缓冲器可以替代地被提供在向量加载/存储单元50的外部。
根据所描述的实施例,加载/存储电路52可以被布置为执行推测写入操作,其中(一个或多个)所选操作数不是从向量寄存器组直接存储到数据存储设备中,而是替代地将来自该(一个或多个)所选操作数的向量元素存储在缓冲器54内,并且仅当确定后续提交条件时,才将缓冲器的当前内容取出并写入到数据存储设备中。在推测数据写入操作期间,推测控制电路60在控制寄存器62内维持指示将在该推测写入操作期间处理的每一个操作数的向量元素的数目的推测宽度指示。在一个实施例中,在推测开始时,将推测宽度设置为某个预先确定的最大值。考虑到缓冲器54的有限大小,这将意味着该缓冲器54具有存储确定的向量的数目M的容量,其中每一个向量包括N个向量元素,N的值由推测宽度指示。
取决于在检测到提交条件之前执行了多少次推测写入操作,可能已经达到缓冲器的容量,但是仍然存在待执行的推测写入操作。如下文将更加详细论述的,根据所描述的实施例,缓冲器54是可重构的,并且如果确定缓冲器54不再具有存储后续写入向量的空间,则推测控制电路60被配置为减小推测宽度指示所指示的推测宽度。从而,缓冲器54重构其自身以便减小每个向量中的有效向量元素的数目N,从而增加可以存储的向量的数目M。清除当前在缓冲器中超过新的最大向量元素位置的任何向量元素。这样不会导致任何重要数据的丢失,因为这时装置是以推测操作模式工作,并且位于较高元素位置的向量元素与较高的推测程度有关。如果在这时清除数据,则在该装置上执行的软件可以布置用于在当前的一系列推测存储操作之后执行的另一系列的存储操作期间存储这些数据。
通过这样的方法,当向量化代码时可能支持推测写入操作,同时确保在已达到提交点之前写入数据不被提交到数据存储设备中。缓冲器是可重构的并与推测控制电路结合,这使得推测宽度动态地减小,以容纳来自推测写入操作所处理的每一个向量的至少一个向量元素。
控制寄存器62可以采取各种形式,且图2A示出可以存储在控制寄存器内的许多参数。首先,维持推测宽度指示70,并且在一个实施例中推测宽度指示70可以采取在一至八之间的值,以指示存储在缓冲器54内的每一个向量将包含一至八个向量元素。在一个实施例中,初始推测宽度被设置为八,并且按需要以及当需要时,该初始推测宽度被选择性地减小,这是由于例如在缓冲器中检测到溢出条件。
在一个实施例中,控制寄存器62还包括推测标志72,该推测标志72被设置以指示推测是开启还是关闭。当推测关闭时,向量写入操作是以非推测方式执行的,因此从向量寄存器组40获取的数据将会被取出并直接写入到数据存储设备中。然而,当推测开启时,如先前所论述的,这样的数据将会替代地首先被路由到缓冲器54,并且仅在已达到提交点时提交到数据存储设备。
在一个实施例中,控制寄存器62还包括一些额外信息。具体来说,维持识别存储在缓冲器内的向量的数目的向量数指示74。在一个实施例中,缓冲器54具有使其能够存储多达4个向量(其中每一个向量包含8个向量元素)的容量。此外,推测宽度可以被减小到最小值一,这时将有32个向量,每一个向量包括一个向量元素。因此,将理解当推测被开启时,向量数指示将采用0到32之间的值。
此外,在一个实施例中,缓冲器大小指示76被维持在控制寄存器62内。通常该缓冲器大小指示是指示存储在该缓冲器内的元素的最大数目的固定值。通过上述示例,将理解在该实施例中的缓冲器大小将会是32。
可以用多种方式规定推测宽度指示70。然而,在一个实施例中,控制寄存器65包括第一元素位置寄存器80和推测宽度寄存器85两者。第一元素位置寄存器80识别将经历推测数据写入操作的向量操作数的第一向量元素位置,同时推测宽度寄存器85则识别最末的向量元素位置,向量操作数90内的推测宽度则由这两个寄存器的内容之间的差来指示。
在推测数据写入操作序列的第一次迭代期间,情况可能是第一元素位置寄存器指向位于向量操作数90内的元素位置0处的向量元素,而推测宽度寄存器85可以例如指向最末的向量元素,由此指定整个向量宽度。在推测数据写入操作的执行期间,可以改变推测宽度寄存器的内容以识别减小的推测宽度。如果在达到提交点的时刻,推测宽度已经被减小到小于在该提交点处所确定的所需向量元素的数目,则可以执行数据写入操作的后续迭代,并且此时第一元素位置寄存器80将被设置为识别尚未经由先前的推测数据写入操作的迭代处理的第一所需向量元素。推测宽度寄存器85则将被设置为识别所需的推测宽度以用于后续迭代。
因此将理解存储在可重构的缓冲器内的第一向量元素将是由寄存器80的内容识别的向量元素,但未必是相关的向量操作数中的第一向量元素。
虽然在图2B的示例中维持两个单独的寄存器,但是在替代性的实施例中,屏蔽寄存器95可被提供用于识别推测宽度指示,如图2C所示。具体来说,该屏蔽可以包含用于向量操作数90内的每一个元素位置的位,其中这些位被设置为0或1以识别推测宽度。在一个实施例中,推测宽度将由被包含在屏蔽内的一系列逻辑1值表示,其中随着推测宽度的减小,在该操作的执行期间通过将这些逻辑1值中的某些转换成逻辑0值来识别减小后的推测宽度,从而更新屏蔽的内容。将理解的是在替代性实施例中归于屏蔽内的逻辑1值和逻辑0值的含义可以被互换。
图3是示出当执行写入操作时图1的电路的操作的流程图。在步骤100处确定是否存在待执行的写入操作,并且如果存在,则在步骤105处确定该写入操作是否应被视为推测写入操作。在一个实施例中,这将取决于控制寄存器62内的推测标志72的状态。该标志可以用多种方式来设置。例如,在一个实施例中,特定的起始推测指令可以被用于使推测控制电路60设置控制寄存器62内的推测标志72。可替代地,指令集可包括推测性版本和非推测性版本的写入指令,以便使标志取决于由解码电路20解码的写入指令的类型来设置。
如果在步骤105处确定没有待执行的推测,则过程进行到步骤110,其中写入操作以标准方式被执行,以使数据被取出并写入到缓存/存储器中,随后过程返回到步骤100。
然而,如果在步骤105处确定推测被开启,则过程进行到步骤115,在步骤115中确定是否已经检测到溢出条件。如先前所论述的,考虑到当前的推测宽度,如果确定缓冲器54不具有存储针对当前的写入操作的写入向量的空间,则将检测到此条件。如果未检测到溢出条件,则在步骤120处执行推测写入,使来自所选向量操作数的许多向量元素被写入到缓冲器54中。这时,向量数指示74被增加以识别另一向量已经被存储在缓冲器内,随后过程返回到步骤100。
如果在115处检测到溢出条件,则过程进行到步骤125,其中由推测控制电路60减小推测宽度。存在多种可以减小推测宽度的方式,但是在一个实施例中推测控制电路60被配置为将推测宽度减小到原来的2的乘方分之一。已经发现这种方法提供了针对缓冲器54的更简便的重构。因此,如果当前的推测宽度是8,则其将被减小到4,如果当前的推测宽度是4,则其将被减小到2,以及如果当前的推测宽度是2,则其将被减小到1。如下文将参照图3的其余部分论述的,推测宽度绝对不会被减小到1以下,从而在执行推测时确保了一定的递送进展。
一旦推测宽度已经被减小,则在步骤130处缓冲器54清除缓冲器中超过新的推测宽度的向量元素。缓冲器还被重构,以便容纳增加数目的向量,每一个向量具有减小的宽度。
随后,在步骤135处执行写入操作,在写入操作期间所选向量操作数的许多向量元素(向量元素的数目由新的减小的推测宽度指示)存储在该缓冲器54内。
在步骤140处,随后确定当前的推测宽度是否为1。如果否,则不需要进一步的动作并且过程返回到步骤100。然而,如果确定当前的推测宽度是1,则清空(flush)缓冲器的当前内容以将当前有效的缓冲器内容取出并写入到缓存/存储器中。这时,将重置向量数指示74,因为一旦已经清空缓冲器,在该缓冲器内将不会有有效的向量元素。在步骤145之后,随后在步骤150处关闭推测,此后过程返回到步骤100。
由于推测被关闭,这将意味着在达到提交点之前所需的任何进一步写入操作将被视为非推测写入操作,并且因此将会遵循图3的步骤105和110的路径。假定当前的推测宽度将是1,可以针对该非推测性指令设置屏蔽,以确保每一个写入操作将使所选向量操作数的第一向量元素被取出并写入到缓存/存储器中。
将每一个推测写入操作的第一向量元素取出并写入始终是安全的,因为实际上一旦推测宽度已经被减小到1,那么写入操作就不再是推测性的。
作为图3所论述的方法的替代性方法,当在步骤145处清空缓冲器时,将有可能将后续的写入操作处理成推测性的,其中每一个已经识别的向量操作数中的第一向量元素被写入到缓冲器中。假设缓冲器被至少像执行新的写入操作一般快速地排空,并且维持向量数指示74以识别仍然在该缓冲器中的有效向量的总数,则这将允许推测被保持开启,直至达到提交点。将理解的是随后将不必在步骤150处关闭推测,而是在推测被关闭之前等待提交点的达到。最终效果将是相同的,因为每一个向量的第一向量元素都将被写入到缓存/存储器中。
作为另一替代性的实施例,当执行任何推测写入操作时,可以布置加载/存储电路52以便直接将每一个向量操作数的第一向量元素存储到数据存储设备中,并且随后(考虑当前指定的推测宽度)将所有剩余的向量元素置于缓冲器54中。因为将第一向量元素取出并且写入到数据存储设备中始终是安全的,所以这仍将确保正确的操作,并且将降低对缓冲器54的大小要求。
存在在图3的步骤115处可检测溢出条件的多种方式,并且图4的流程图示出了一种示例性方法。在步骤170处,通过用推测宽度指示70除以缓冲器大小指示76来确定向量的最大数目(MAX)。此后,确定值“向量数+1”是否大于步骤170处所计算的向量的最大数目。如果否,则不存在溢出条件(步骤185),而如果是,则存在溢出条件(步骤180)。
图5示意性地示出可以使用先前描述的实施例来向量化的标量循环。此标量指令的循环包括一系列存储指令(STR),这些存储指令中的一些在执行条件测试以确定是否退出该循环之前发生,而这些存储指令中的另一些则在条件测试之后发生。在所示出的示例性序列中,循环经历了三次完整的迭代200、205、210,并且随后条件测试被评估为指示该循环应该在进行第四次迭代215的一半时于点220处结束。通常情况是这样的条件测试无法得知所需的迭代次数,并且因此虽然在该示例中该循环在经历第四次迭代的一半时终止,但是在其他示例中可能直至已经执行了更多次迭代后才终止,或者实际上可能更早地终止。
当执行推测向量操作以向量化这样的标量循环时,用向量存储指令替换每一个标量存储指令,其中指定的向量操作数包括多个向量元素,每一个向量元素与不同的迭代有关。由于不知道标量循环将会在哪次迭代时退出,所以无法通过指定具有特定数目的向量元素的向量操作数来向量化该循环。作为替代,如图6所示,对于在条件测试之前发生的该标量存储指令的等效向量存储指令(VSTR),使用推测宽度来推测所需的向量元素的数目。如先前所论述的,在一个实施例中推测宽度最初被设置为8,因此这些向量存储指令中的每一个的执行最初将是重复执行等效存储指令八次(即,每次进行8个单独的迭代中的每一者)。如果在条件测试/提交点之前发生的向量存储指令的数目为使缓冲器不具有存储所有写入向量的足够空间,则如先前所论述的,推测宽度将被相应地减小以使得来自每一个写入向量的至少一个向量元素可以存储在缓冲器中。
随后当评估条件测试时,则可以确定需要多少个向量元素。例如,可能评估出等效标量循环将在第三次迭代结束,并且因此所需的推测宽度是四(因为在初始标量循环中接近该循环顶端的指令执行了四次,而在条件测试之后的指令仅执行了三次,因此在该等效向量循环的顶端的推测性代码必须处理至少四个元素,而在该循环底部的非推测性代码必须处理三个元素)。假定推测宽度仍然至少大于四,则所有所需的写入数据将被存储在缓冲器中,并且在提交过程期间,所有的所需数据可以被取出并且存储到数据存储设备中。然而,如果当前的推测宽度小于由条件测试指示的迭代次数,则在缓冲器中的数据可以被提交,但是随后将需要执行对向量存储序列的至少另一次迭代。
在提交点之后,非推测性地执行其余的向量存储指令。然而,考虑到在条件测试分析期间识别的宽度,可以设置屏蔽来确保仅将所需数目的向量元素取出并存储到数据存储设备中。该过程随后将会有条件地退出。具体来说,如果条件测试指示已经写入所有所需的数据,则该过程将退出,否则该过程将会重复至少另一次。
图7示出用于其中使用特定的推测指令和提交指令的情况的向量循环。该推测指令被用于开启推测,并且由此设置推测标志72。其后对用于识别每一个向量操作数中的向量元素的数目的推测宽度70推测性地执行一系列指令。这些指令将包括如先前所论述的一个或多个存储指令,并且将导致向量元素被写入到缓冲器中。同样如先前所论述的,缓冲器将按需要动态地进行重构,以确保来自每一个写入向量的至少一个向量元素被存储在缓冲器内。此后,将执行一个或多个指令来确定将提交到数据存储设备的适当宽度,并且此后将会执行单独的提交指令以使缓冲器的内容被存储到存储器中并且关闭推测。在此之后将执行一系列非推测指令,并且如先前所论述的,屏蔽或长度值可以与这些指令结合使用,以考虑在提交点之前做出的决定来适当地设置向量元素宽度。分支指令随后可用来确定是否应该重复该循环或者是否应该退出该循环。
图8A是示出当执行该提交指令时实施的步骤的流程图。在一个实施例中,当解码电路20解码提交指令时,其发送控制信号到推测控制电路60。这将导致推测控制电路60在步骤250处指导缓冲器清空其缓冲器内容。由于缓冲器内容被清空,也就是说每一个有效的向量元素被取出并写入到数据存储设备中,所以由推测控制电路维持的向量数指示将被减小,以使得当所有的有效元素已经被清空时,向量数指示74将被重置为零。
在步骤255处,随后推测将被关闭以使得任何后续指令非推测性地执行,直至推测再次开启。在一个实施例中,提交指令的执行也可导致在步骤260处将推测宽度重置为最大值。
图8B是示意性地示出当执行起始推测指令时实施的步骤的流程图。当解码电路20解码起始推测指令时,其发送控制信号到推测控制电路60,这在一个实施例中使推测宽度被设置为最大值(步骤265),随后在步骤270处开启推测。将理解的是,如果起始推测指令用于开启推测,则在步骤260处提交指令不需要重置推测宽度,因为这是起始推测指令在步骤265处进行的步骤。然而,在替代性的实施例中,可能不需要明确的起始推测指令。例如,如先前所论述的,指令集可包括推测性版本和非推测性版本的某些指令,包括向量写入指令,由此取决于在指令队列中出现的实际指令可以开启和关闭推测。在这类实施例中,提交指令仍然可以用于使缓冲器的内容被清空并关闭推测,并且在这类情况中使用提交指令可有助于将推测宽度重置为最大值。
图9示意性地示出缓冲器响应于溢出条件的反复出现可以如何进行重构。在本示例中,假设缓冲器54可以保存32个向量元素,并且初始被配置为如图9中的条目300所示的能够存储多达4个向量,其中每一个向量包括8个向量元素。当出现溢出条件时,推测控制电路将推测宽度调整为4,这导致缓冲器被重构为如图9中的单元305所示,从而缓冲器现在可保存多达8个向量,其中每一个向量含4个向量元素。
如果检测到另一溢出条件(即,在提交点之前需要维持大于8个写入向量),则推测控制电路60将推测宽度减小为2,使得缓冲器被重构为如图9中的单元310所示,以便存储多达16个向量,其中每一个向量包含2个向量元素。最终,如果检测到另一溢出条件,则推测控制电路60将推测宽度减小为1,使缓冲器采取图9中所示的形式315,其中缓冲器可以存储多达32个向量,其中每一个向量具有一个向量元素。
在一个实施例中,向量加载/存储单元50还配置为支持推测向量加载指令的执行。虽然将通过这类加载操作获取的读取数据直接存储到向量寄存器组40中是安全的,但是因为在过度推测的情况下有可能采取校正措施来校正向量寄存器组40的内容,所以可能需要检查向量读取操作与向量写入操作之间的危险状态(也被称为检测内存相关性)。根据图10所示出的一个实施例,通过将缓冲器54修改为还保持关于执行中的推测读取操作的某些信息,移除了添加另外的指令到用于这类内存相关性的测试中的需要,其中地址比较电路350被提供在向量加载/存储单元50内以执行维持在缓冲器内的地址信息与经历推测读取或者推测写入操作的向量元素的地址之间的地址比较。
图11示意性地示出当使用图10的方法时保存在缓冲器54中的信息。对于保存在缓冲器54中的每一个写入向量,保存地址指示信息362和相关的写入向量元素364,该地址指示数据足以识别与关联的写入向量中的每一个向量元素相关联的地址。此外,缓冲器中与写入向量相关联的条目355还包括标志360,该标志360被设置为识别该条目与写入向量有关。此外,条目375还变成与所执行的每一个推测读取操作有关。虽然不需要将实际的读取向量数据存储在缓冲器中,但是地址指示信息372被存储在缓冲器中,并且标志370被设置为识别地址指示与读取向量有关。
图12是示出当执行写入操作时如何使用地址比较电路350的流程图。在步骤400处,新的向量A通过向量加载/存储单元50而经历推测写入操作。在步骤405处,对于向量A中的每一个元素位置,地址比较电路350被布置为确定元素位置的地址是否匹配与存储在缓冲器中的地址指示相关联的任何向量元素的地址。虽然地址比较器可以执行对存储在缓冲器中的所有地址指示的比较,但是在一个实施例中对于所考虑的向量A中的任何特定元素位置而言,地址比较器可以将它的比较压缩为评估与在缓冲器54内识别的向量的较高元素位置相关联的地址指示数据。在步骤410处,在i小于j的情况下,确定向量A中的元素位置i和与存储在缓冲器中的地址指示相关联的向量的元素位置j之间是否存在任何地址匹配。在此情况下,这指示了当前的推测写入操作设法执行关于特定元素位置的写入操作,在该特定元素位置处,地址匹配由先前的向量数据存取操作执行的更多推测写入或者读取操作。
为了移除此潜在的内存相关性危险,在步骤415处,最低的匹配元素位置j被选择以形成参数jSELECTED。由此,如果存在仅单个匹配,则该匹配元素位置j被选为jSELECTED。类似地,如果检测到存在大于一个匹配,则导致匹配的最低元素位置j形成jSELECTED
此后,在步骤420处,推测宽度被减小以识别jSELECTED向量元素。假定第一向量元素是向量元素零,则这意味着与缓冲器中的条目相关联的每一个向量现在将包含向量元素0到jSELECTED-1。此后过程结束于步骤425。如果在步骤410处未检测到匹配,则过程直接从步骤410进行到步骤425,在步骤425处过程结束。将理解在图12中所描述的过程也可以其他方式完成。例如,可以通过顺序地测试逐渐增高的元素位置中的元素的地址并且在发现第一匹配时终止来执行该过程。
图13是示出当当前的推测数据存取操作是推测读取操作时如何使用地址比较器的流程图。在步骤430处,识别新的向量A,该新的向量A通过加载/存储单元50而经历推测读取操作。在步骤435处,对于向量A中的每一个元素位置,确定元素位置的地址是否匹配存储在缓冲器中的任何写入向量的向量元素的地址。因为当前的推测存取是读取存取,所以不必比较在缓冲器中识别的其他读取向量的地址,并且替代地比较可以限于与写入向量相关的那些条目。
在步骤440处,在i小于j的情况下,确定向量A中的元素位置i和存储在缓冲器中的写入向量的元素位置j之间是否存在任何地址匹配。
如果存在匹配,则如同先前图12所描述的一般,选择最低的匹配元素位置j以在步骤445处形成参数jSELECTED,并且随后在步骤450处减小推测宽度以识别jSELECTED向量元素。
在过程终止于步骤460之前,该过程可选地经由写入递送比较过程450进行。如果在步骤440处未检测到匹配,则过程直接进行到步骤450、460。
当执行推测读取操作时,有可能该推测读取操作可以试图读取来自与仍存储在缓冲器54中且尚未被提交到数据存储设备中的写入向量的向量元素相关联的地址的数据。在一个实施例中,可以通过使用地址比较器350执行图14所示的过程来检测这种情况。即使地址比较器350不能用来执行参考图13所描述的推测宽度减小机制,也可通过这种方式使用该地址比较器。可替代地,比较电路可以被布置为执行上述两个过程,以使得图14的过程实施图13的步骤450。
图14的步骤470和475对应于图13的步骤430和435,并且如果执行图13和图14两者的过程,则图14无需重复步骤470和475,而是来自步骤435的结果可以直接用于图14中的步骤480。
在步骤480处,在i大于或等于j的情况下,确定向量A中的元素位置i和存储在缓冲器中的写入向量的元素位置j之间是否存在任何地址匹配。这指示了以下情形:当前的推测读取操作试图从一旦先前的写入向量已被提交到数据存储设备,该数据将已经由该写入向量写入到的地址读取数据。
在这种情形中,过程进行到步骤485,其中对于针对其确定匹配的向量A中的每一个元素位置i来说,选择最高的匹配元素位置j并且将来自该最高匹配元素位置的写入向量元素输出作为当前的推测读取操作的元素位置i的读取数据。由输出最高的匹配元素位置j(针对i大于或等于j的情形),这将确保将最新的数据提供作为元素位置i的读取数据。
在步骤485之后,过程结束于步骤490,或者实际上如果未检测到匹配,则过程从步骤480进行到步骤490。
图15A到图15C示意性地示出可以如何取决于根据图12或图13所执行的比较操作的输出来减小推测宽度。如图15A所示,如果检测到新的向量505中的元素位置3的地址与已经在缓冲器54中识别的向量500中的元素位置6的地址之间的匹配,则在步骤510处,如果新的向量505与向量500中的至少一个是写入向量,则在步骤515处推测宽度被减小,并且具体来说被减小到值j(即,在此实例中为6),以产生匹配。因此,被修改的向量如图15A中的单元525、520所示。具体来说,在元素位置6与7处的向量元素被清除。如图15A所示,推测宽度指示70将被更新以识别被修改的推测宽度为六。
图15B示出在存在与新的向量中的单个元素位置的多个匹配时发生的情况,该单个元素位置被示为图15B中的元素位置530。如果该元素位置的地址匹配于已经被保存在缓冲器中的向量的元素位置535和540两者的地址,则选择最低的匹配元素位置,即元素位置535,并且基于该选择的匹配元素位置来减小推测宽度。
如图15C所示,即使多个匹配元素位置与新的向量中的不同元素位置有关,相同的基本原理也仍然适用。例如,如果在新的向量中的元素位置545处的地址匹配于在缓冲器中的向量的元素位置550处的地址,并且在新的向量中的元素位置555的地址匹配于已经在缓冲器中的元素位置560的地址,则此过程仍然选择该多个匹配元素位置中的最低的匹配元素位置,并且相应地减小推测宽度。
图16A到图16C示意性地示出参考图14论述的写入递送机制。如果新的向量575中的元素位置577的地址匹配于已经存储在写入缓冲器中的写入向量570中的元素位置572的地址,新的向量与推测读取操作有关,那么如果在步骤580处确定j大于或等于j,则在写入向量Z中的位置j处的向量元素形成新的读取向量X中的位置i的读取向量元素。
图16B示出在具有与读取向量中的特定元素位置的多个匹配时发生的情形。具体来说,元素位置585具有与缓冲器内的不同写入向量中的元素位置587和589的地址都匹配的地址。在这种情形下,选择具有最高的元素位置的匹配向量作为将用作新的读取向量的元素位置585的读取数据的向量。
图16C示出如果缓冲器中的多个匹配驻留在相同的元素位置时发生的情形。在这种情形下,新的读取向量中的向量元素590的地址匹配于缓冲器的不同写入向量中的向量元素592、594的地址。然而,最近写入向量为如图16C所示的在缓冲器底部的向量,因此在这种情形下选择向量元素592作为新的读取向量的元素位置590的读取数据,因为这将代表最新的数据。
取决于缓冲器54的大小,地址比较电路350可以具有许多待执行的地址比较。虽然可以针对缓冲器中的每一个元素位置执行精确地址比较,但是在一个实施例中地址比较器可以被用于针对一些元素位置执行精确的比较并且针对其他元素位置执行不精确的比较。例如,如图17所示,在一个实施例中在缓冲器中较高的元素位置可以经历不精确的比较方法,因为它们与较高的推测程度有关。具体来说,如图所示,当考虑新的向量610时,在比较该向量内的元素位置的地址和向量缓冲器中较低的元素位置的地址时,该向量内的元素位置的地址可经历精确比较615,但是在比较该向量中的元素位置的地址与缓冲器中较高的元素位置的地址时,该向量中的元素位置的地址可经历不精确的比较方法620。
将理解存在许多现有技术中已知的不精确的比较方法。一种可能的机制是Bloom过滤器机制,其中基于针对缓冲器中的某些区域内的所有元素位置(在本示例中为每一个向量的元素位置4到7)的地址指示信息而生成位阵列,并且随后将新的向量610中的当前元素位置的地址用于生成到该位阵列的索引,其中输出指示明确地不存在匹配,或者可能存在匹配。
如果明确地不存在匹配,则不需要进一步动作。如果可能存在匹配,则可以取决于实施例而改变所采取的动作。例如,一种可能性是仅减小推测宽度以便移除可能有匹配的所有元素位置,因此在图17的示例中这将涉及将推测宽度从8减小到4。或者可以基于缓冲器的上半部中的每一个元素位置的地址指示,在后续步骤中重新使用精确比较电路来执行精确比较。通过这种方法,有可能减小需要由比较器执行的比较的数量,从而增加性能。应当注意的是对于使用图14的写入递送方法的实施例而言,将仍需要执行关于小于或等于被视为新的读取向量的当前元素位置的缓冲器内的每一个元素位置的精确比较。
虽然在一个实施例中,地址比较电路350可能需要针对所有的推测数据存取操作执行上文所论述的地址比较,但是在替代性实施例中推测数据存取操作可具有与该地址比较相关联的比较状态指示,并且地址比较电路所执行的地址比较取决于该比较状态指示。比较状态指示可以被全局性地设置或者可以针对每一个推测数据存取操作而被单独识别。
在一个实施例中,如果比较状态指示具有针对当前的推测数据存取操作的第一值,则地址比较电路被配置为不执行针对该当前的推测数据存取操作的地址比较。因此,如果程序员已知作为推测向量存取操作的对象的向量不可能具有与可重构的缓冲器中的任何内容的匹配地址,则状态信息可以被设置为第一值,以使该特定向量存取操作绕过地址比较电路。
可替代地,如果读取与写入由可彼此匹配的读取/写入的一个集合A和可彼此匹配的读取/写入的第二集合B的组成,则可重构的缓冲器可以维持与每一个向量相关联的标志以识别该向量与集合A有关还是与集合B有关,并且随后针对已被识别为与集合A或集合B有关的当前的推测数据存取操作,可以减少地址比较的次数,具体来说地址比较电路仅比较可重构的缓冲器内的相关向量。
图18示出可以使用的虚拟机(VM)实施方式。虽然先前所描述的实施例根据用于操作支持相关技术的特定的处理硬件的装置和方法来实施本发明,但是还可以提供硬设备的所谓的虚拟机实施方式。这种虚拟机实施方式在主处理器730上执行,主处理器730通常运行支持虚拟机程序710的主机操作系统(OS)720。往往需要大功率的处理器来提供以合理的速率执行的虚拟机实施方式,但是这样的方法在某些情况下可进行调整,诸如当出于兼容性或再利用的原因需要执行原属于另一处理器的代码时。该虚拟机程序710能够执行应用程序(或者操作系统)700,以给出与由这种真实的硬设备执行该程序将得到的同样的结果。因此,可以使用虚拟机程序710从应用程序700内执行程序指令(包括如上所述的推测写入及读取指令)。
从上述实施例的描述将理解到,这样的实施例提供了用于实施推测向量写入操作的有效机制,由此使得较广泛种类的标量程序能够被向量化。此外,用于支持此类推测向量写入操作的缓冲器也可以被用于检测推测读取操作和推测写入操作之间的内存相关性,并且在执行这种推测处理时采取措施来移除危险。此外,缓冲器可以被用于支持将写入数据递送到读取操作。
尽管本文已经描述了特定的实施例,但是将理解的是本发明并不限于此,并且在本发明的范畴内可以进行对这些实施例的许多修改和添加。例如,在不背离本发明的范畴的情况下,可实现独立权利要求的特征与从属权利要求的特征的各种组合。

Claims (29)

1.一种数据处理装置,包括:
向量寄存器组,该向量寄存器组被配置为存储由处理电路存取的向量操作数,每一个向量操作数包括多个向量元素;
向量数据存取电路,用于执行向量存取操作,以使向量操作数在所述向量寄存器组和数据存储设备之间移动;
可重构的缓冲器,该可重构的缓冲器可由所述向量数据存取电路存取并且包括存储阵列,该存储阵列用于存储包含N个向量元素的多达M个向量,其中M和N的值是可重构的;
所述向量数据存取电路被配置为执行推测数据写入操作,以使来自所述向量寄存器组中的所选向量操作数的向量元素被存储到所述可重构的缓冲器中,当出现提交条件的时候,所述向量数据存取电路被进一步配置为使当前存储在所述可重构的缓冲器中的向量元素被写入到所述数据存储设备中;
推测控制电路,该推测控制电路被配置为维持指示存储在所述可重构的缓冲器中的每一个所选向量操作数的向量元素的数目的推测宽度指示,该推测宽度指示被初始化为初始值,并且当检测到所述可重构的缓冲器内的溢出条件时,修改所述推测宽度指示以减少存储在所述可重构的缓冲器中的每一个所选向量操作数的向量元素的数目;以及
所述可重构的缓冲器响应于所述推测宽度指示的变化,重构所述存储阵列以增加向量的数目M并减小每一个向量中所包含的向量元素的数目N。
2.如权利要求1所述的数据处理装置,其中所述推测控制电路响应于起始推测指令的执行触发推测操作模式,在所述推测操作模式期间,所述向量数据存取电路被配置为执行所述推测数据写入操作。
3.如权利要求1或2所述的数据处理装置,其中所述推测控制电路响应于提交指令的执行向所述向量数据存取电路指示所述提交条件的出现并且终止推测。
4.如权利要求3所述的数据处理装置,其中所述推测控制电路响应于所述起始推测指令和所述提交指令中的一者的执行,将所述推测宽度指示初始化为所述初始值。
5.如任何前述权利要求所述的数据处理装置,其中如果所述推测控制电路响应于所述溢出条件修改所述推测宽度指示以指示将每一个所选向量操作数中的仅一个向量元素存储在所述可重构的缓冲器中,则所述推测控制电路被配置为使所述向量数据存取电路将当前存储在所述可重构的缓冲器中的每一个向量的第一向量元素写入到所述数据存储设备中。
6.如权利要求5所述的数据处理装置,其中如果所述推测控制电路响应于所述溢出条件修改所述推测宽度指示以指示将每一个向量操作数的仅一个向量元素存储在所述可重构的缓冲器中,则所述推测控制电路被配置为终止推测。
7.如权利要求6所述的数据处理装置,其中所述向量数据存取电路响应于在所述提交条件出现之前发生的后续数据写入操作,使所述所选向量操作数的第一向量元素被写入到所述数据存储设备中而非被写入到所述可重构的缓冲器中。
8.如任何前述权利要求所述的数据处理装置,其中对于每一个推测数据写入操作,每一个所选向量操作数的第一向量元素被写入到所述数据存储设备中而非被写入到所述可重构的缓冲器中,并且所述推测宽度指示所指示的任何剩余向量元素被存储到所述可重构的缓冲器中。
9.如任何前述权利要求所述的数据处理装置,其中每当检测到所述溢出条件时,所述推测控制电路被配置为修改所述推测宽度指示以便将每一个向量中的向量元素的数目N减小为原来的二分之一。
10.如任何前述权利要求所述的数据处理装置,其中当响应于被修改的推测宽度指示而重构所述存储阵列时,所述可重构的缓冲器被布置为删除在所述可重构的缓冲器中超出所述被修改的推测宽度所指示的向量元素的数目的任何向量元素。
11.如任何前述权利要求所述的数据处理装置,其中:
所述向量数据存取电路还被配置为执行推测数据读取操作,以使所选向量操作数中的向量元素从所述数据存储设备中被读取以用于存储在所述向量寄存器组中,每一个所选向量操作数的向量元素的数目取决于所述推测宽度指示。
12.如权利要求11所述的数据处理装置,其中:
所述可重构的缓冲器被配置为针对所执行的每一个推测数据写入操作存储形成将被写入的写入向量的向量元素以及用于确定所述写入向量的每一个向量元素的地址的地址指示数据,所述可重构的缓冲器还被配置为针对每一个推测数据读取操作存储地址指示数据,该地址指示数据被用于识别形成将由该推测数据读取操作读取的读取向量的每一个向量元素的地址。
13.如权利要求12所述的数据处理装置,其中每一个写入向量和每一个读取向量包括从最初的起始位置K到位置X的元素位置,其中K和X取决于所述推测宽度指示,所述装置还包括:
地址比较电路,该地址比较电路被配置为确定与当前推测数据存取操作相关联的第一向量元素的地址是否匹配于与存储在所述可重构的缓冲器中的地址指示数据相关联的第二向量元素的地址;
在确定所述匹配的情况下,如果所述第一向量元素和所述第二向量元素中的至少一者形成写入向量的一部分,并且所述第二向量元素位于高于所述第一向量元素的元素位置,则所述推测控制电路被配置为修改所述推测宽度指示,以减小每一个写入向量和每一个读取向量中的向量元素的数目。
14.如权利要求13所述的数据处理装置,其中如果所述第二向量元素位于元素位置K和X之间的元素位置j处,则所述推测控制电路被配置为修改所述推测宽度指示,以减小每一个写入向量和每一个读取向量中的向量元素的数目,以包括向量元素位置K到j-1。
15.如权利要求13或14所述的数据处理装置,其中在所述地址比较电路确定当前推测数据存取操作内的第一向量元素的地址匹配于与存储在所述可重构的缓冲器中的地址指示数据相关联的多个第二向量元素的地址的情况下,所述地址比较电路被配置为将所述多个第二向量元素中具有最低元素位置的第二向量元素确定作为匹配第二向量元素,并且所述推测控制电路被配置为考虑所述匹配第二向量元素的元素位置来修改所述推测宽度指示。
16.如权利要求13至15中的任意项所述的数据处理装置,其中如果所述当前推测数据存取操作是当前推测数据写入操作,则所述地址比较电路被配置为比较所述当前推测数据写入操作的地址指示数据和存储在所述可重构的缓冲器中的每一个地址指示数据,以检测所述当前推测数据写入操作的向量元素的地址与由存储在所述可重构的缓冲器中的地址指示数据识别的每一个写入向量和每一个读取向量的向量元素的地址之间的任何匹配。
17.如权利要求13至15中的任意项所述的数据处理装置,其中如果所述当前推测数据存取操作是当前推测数据读取操作,则所述地址比较电路被配置为比较所述当前推测数据读取操作的地址指示数据和存储在所述可重构的缓冲器中的每一个写入向量的地址指示数据,以检测所述当前推测数据读取操作的向量元素的地址和存储在所述可重构的缓冲器中的每一个写入向量的向量元素的地址之间的任何匹配。
18.如从属于权利要求12的任何前述权利要求所述的数据处理装置,其中每一个写入向量和每一个读取向量包括从最初的起始位置K到位置X的元素位置,其中K和X取决于所述推测宽度指示,所述装置还包括:
地址比较电路,该地址比较电路被配置为确定与当前推测数据读取操作相关联的第一向量元素的地址是否匹配于存储在所述可重构的缓冲器中的写入向量的第三向量元素的地址;以及
在所述匹配被确定的情况下,如果所述第三向量元素位于低于所述第一向量元素的元素位置,或者位于与所述第一向量元素相同的元素位置,则所述地址比较电路被配置为从所述可重构的缓冲器输出所述第三向量元素,以形成所述当前推测数据读取操作的读取向量的第一向量元素。
19.如权利要求18所述的数据处理装置,其中在所述地址比较电路确定当前推测数据读取操作内的第一向量元素的地址匹配于与存储在所述可重构的缓冲器中的写入向量相关联的多个第三向量元素的地址的情况下,所述地址比较电路被配置为将所述多个第三向量元素中具有最高元素位置的第三向量元素确定作为匹配第三向量元素,并且所述地址比较电路被配置为从所述可重构的缓冲器输出所述匹配第三向量元素,以形成所述当前推测数据读取操作的读取向量的第一向量元素。
20.如权利要求19所述的数据处理装置,其中当所述多个第三向量元素中存在一个以上具有所述最高元素位置的第三向量元素时,所述地址比较电路被配置为将所述多个第三向量元素中的所述一个以上的第三向量元素中与最近的推测数据写入操作有关的第三向量元素作为所述匹配第三向量元素。
21.如权利要求13至20中的任意项所述的数据处理装置,其中所述地址比较电路包括精确比较区段和粗略比较区段,所述粗略比较区段被用于执行关于比所选元素位置高的元素位置的地址的比较。
22.如权利要求21所述的数据处理装置,其中所述粗略比较区段包括布隆(Bloom)过滤器电路。
23.如权利要求13至22中的任意项所述的数据处理装置,其中所述推测数据存取操作具有与其相关联的比较状态指示,并且由所述地址比较电路执行的所述地址比较取决于所述比较状态指示。
24.如权利要求23所述的数据处理装置,其中如果所述比较状态指示具有针对所述当前推测数据存取操作的第一值,则所述地址比较电路被配置为不执行针对该当前推测数据存取操作的地址比较。
25.如任何前述权利要求所述的数据处理装置,其中所述推测宽度指示还识别要经历所述推测数据写入操作的每一个向量操作数的第一向量元素。
26.如权利要求25所述的数据处理装置,其中所述推测宽度指示将要经历所述推测数据写入操作的每一个向量操作数的向量元素的数目识别为从所述第一向量元素开始的序列性向量元素的特定数目。
27.一种在数据处理装置中执行推测向量写入操作的方法,该数据处理装置包括向量寄存器组和向量数据存取电路,该向量寄存器组用于存储供处理电路存取的向量操作数,每一个向量操作数包括多个向量元素,该向量数据存取电路用于执行向量存取操作以在所述向量寄存器组和数据存储设备之间移动向量操作数,所述方法包括:
提供可重构的缓冲器,该可重构的缓冲器可由所述向量数据存取电路存取并且包括存储阵列,所述存储阵列用于存储包含N个向量元素的多达M个向量,其中M和N的值是可重构的;
使用所述向量数据存取电路执行推测数据写入操作,以使来自所述向量寄存器组中的所选向量操作数的向量元素被存储到所述可重构的缓冲器中;
当出现提交条件时,使当前存储在所述可重构的缓冲器中的向量元素被写入到所述数据存储设备中;
维持指示存储在所述可重构的缓冲器中的每一个所选向量操作数的向量元素的数目的推测宽度指示,所述推测宽度指示被初始化为初始值;
当在所述可重构的缓冲器内检测到溢出条件时,修改所述推测宽度指示来减小存储在所述可重构的缓冲器中的每一个所选向量操作数的向量元素的数目;以及
响应于所述推测宽度指示的变化,重构所述可重构的缓冲器的存储阵列,以增加向量的数目M并减小每一个向量中所包含的向量元素的数目N。
28.一种以非暂态形式存储计算机程序的计算机程序产品,该计算机程序用于控制计算机提供针对与如权利要求1至26中的任意项所述的数据处理装置相对应的程序指令的虚拟机执行环境。
29.一种数据处理设备,包括:
向量寄存器组装置,用于存储由处理装置存取的向量操作数,每一个向量操作数包括多个向量元素;
向量数据存取装置,用于执行向量存取操作,以使向量操作数在所述向量寄存器组装置和数据存储装置之间移动;
可重构的缓冲器装置,该可重构的缓冲器装置用于由所述向量数据存取装置存取并且包括存储阵列装置,该存储阵列装置用于存储包含N个向量元素的多达M个向量,其中M和N的值是可重构的;
所述向量数据存取装置用于执行推测数据写入操作,以使来自所述向量寄存器组装置中所选向量操作数的向量元素被存储到所述可重构的缓冲器装置中,当出现提交条件时,所述向量数据存取装置用于使当前存储在所述可重构的缓冲器装置中的向量元素被写入到所述数据存储装置中;
推测控制装置,所述推测控制装置用于维持指示存储在所述可重构的缓冲器装置中的每一个所选向量操作数的向量元素的数目的推测宽度指示,所述推测宽度指示被初始化为初始值,并且当检测到所述可重构的缓冲器装置内的溢出条件时,修改所述推测宽度指示以减小存储在所述可重构的缓冲器装置中的每一个所选向量操作数的向量元素的数目;以及
所述可重构的缓冲器装置响应于所述推测宽度指示的变化而重构所述存储阵列装置,以增加向量的数目M并减小每一个向量中所包含的向量元素的数目N。
CN201480054794.8A 2013-10-09 2014-08-14 用于执行推测向量存取操作的数据处理装置和方法 Active CN105593808B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1317874.4 2013-10-09
GB1317874.4A GB2519107B (en) 2013-10-09 2013-10-09 A data processing apparatus and method for performing speculative vector access operations
PCT/GB2014/052507 WO2015052484A1 (en) 2013-10-09 2014-08-14 A data processing apparatus and method for performing speculative vector access operations

Publications (2)

Publication Number Publication Date
CN105593808A true CN105593808A (zh) 2016-05-18
CN105593808B CN105593808B (zh) 2019-08-16

Family

ID=49630435

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480054794.8A Active CN105593808B (zh) 2013-10-09 2014-08-14 用于执行推测向量存取操作的数据处理装置和方法

Country Status (6)

Country Link
US (1) US9483438B2 (zh)
KR (1) KR102183761B1 (zh)
CN (1) CN105593808B (zh)
GB (1) GB2519107B (zh)
TW (1) TWI644254B (zh)
WO (1) WO2015052484A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108139910A (zh) * 2015-10-22 2018-06-08 Arm有限公司 处理用于向量算术指令的例外状况
CN109690476A (zh) * 2016-09-20 2019-04-26 Arm有限公司 处理针对向量指令的元素间地址危害
CN109997109A (zh) * 2016-12-20 2019-07-09 德州仪器公司 具有提取提前滞后的流引擎

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10303525B2 (en) * 2014-12-24 2019-05-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
GB2540940B (en) * 2015-07-31 2018-01-03 Advanced Risc Mach Ltd An apparatus and method for transferring a plurality of data structures between memory and one or more vectors of data elements stored in a register bank
GB2549737B (en) * 2016-04-26 2019-05-08 Advanced Risc Mach Ltd An apparatus and method for managing address collisions when performing vector operations
US10216515B2 (en) * 2016-10-18 2019-02-26 Oracle International Corporation Processor load using a bit vector to calculate effective address
EP3336691B1 (en) * 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
GB2585202B (en) * 2019-07-01 2021-11-24 Advanced Risc Mach Ltd An apparatus and method for speculatively vectorising program code

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002084451A2 (en) * 2001-02-06 2002-10-24 Victor Demjanenko Vector processor architecture and methods performed therein
US7606979B1 (en) * 2003-08-21 2009-10-20 Guillermo Rozas Method and system for conservatively managing store capacity available to a processor issuing stores
US20090288075A1 (en) * 2008-05-19 2009-11-19 Yonghong Song Parallelizing non-countable loops with hardware transactional memory
US7739456B1 (en) * 2007-03-06 2010-06-15 Oracle America, Inc. Method and apparatus for supporting very large transactions
CN102804135A (zh) * 2009-06-05 2012-11-28 Arm有限公司 用于处理向量指令的数据处理设备和方法

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5887183A (en) * 1995-01-04 1999-03-23 International Business Machines Corporation Method and system in a data processing system for loading and storing vectors in a plurality of modes
US5909587A (en) * 1997-10-24 1999-06-01 Advanced Micro Devices, Inc. Multi-chip superscalar microprocessor module
US20040215941A1 (en) * 2003-04-24 2004-10-28 Sun Microsystems, Inc. Method and system to handle register window fill and spill
US7149946B2 (en) 2003-06-13 2006-12-12 Microsoft Corporation Systems and methods for enhanced stored data verification utilizing pageable pool memory
US7500087B2 (en) * 2004-03-09 2009-03-03 Intel Corporation Synchronization of parallel processes using speculative execution of synchronization instructions
WO2005106648A2 (en) * 2004-04-15 2005-11-10 Sun Microsystems, Inc. Entering scout-mode when speculatiive stores exceed the capacity of the store buffer
US7395419B1 (en) * 2004-04-23 2008-07-01 Apple Inc. Macroscalar processor architecture
US20060259737A1 (en) 2005-05-10 2006-11-16 Telairity Semiconductor, Inc. Vector processor with special purpose registers and high speed memory access
US8019976B2 (en) 2007-05-14 2011-09-13 Apple, Inc. Memory-hazard detection and avoidance instructions for vector processing
US8078847B2 (en) 2007-05-14 2011-12-13 Apple Inc. Detecting memory-hazard conflicts during vector processing
US8019977B2 (en) 2007-05-14 2011-09-13 Apple Inc. Generating predicate values during vector processing
US8060728B2 (en) 2007-05-14 2011-11-15 Apple Inc. Generating stop indicators during vector processing
US9529592B2 (en) * 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US8521961B2 (en) * 2009-08-20 2013-08-27 International Business Machines Corporation Checkpointing in speculative versioning caches
US8572341B2 (en) * 2009-09-15 2013-10-29 International Business Machines Corporation Overflow handling of speculative store buffers
US9552206B2 (en) * 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
WO2013095608A1 (en) 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for vectorization with speculation support
US9116686B2 (en) 2012-04-02 2015-08-25 Apple Inc. Selective suppression of branch prediction in vector partitioning loops until dependency vector is available for predicate generating instruction
US9501276B2 (en) * 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002084451A2 (en) * 2001-02-06 2002-10-24 Victor Demjanenko Vector processor architecture and methods performed therein
US7606979B1 (en) * 2003-08-21 2009-10-20 Guillermo Rozas Method and system for conservatively managing store capacity available to a processor issuing stores
US7739456B1 (en) * 2007-03-06 2010-06-15 Oracle America, Inc. Method and apparatus for supporting very large transactions
US20090288075A1 (en) * 2008-05-19 2009-11-19 Yonghong Song Parallelizing non-countable loops with hardware transactional memory
CN102804135A (zh) * 2009-06-05 2012-11-28 Arm有限公司 用于处理向量指令的数据处理设备和方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108139910A (zh) * 2015-10-22 2018-06-08 Arm有限公司 处理用于向量算术指令的例外状况
CN108139910B (zh) * 2015-10-22 2022-07-19 Arm有限公司 处理用于向量算术指令的例外状况
CN109690476A (zh) * 2016-09-20 2019-04-26 Arm有限公司 处理针对向量指令的元素间地址危害
CN109690476B (zh) * 2016-09-20 2023-02-28 Arm有限公司 数据处理装置和方法
CN109997109A (zh) * 2016-12-20 2019-07-09 德州仪器公司 具有提取提前滞后的流引擎
CN109997109B (zh) * 2016-12-20 2023-07-21 德州仪器公司 具有提取提前滞后的流引擎

Also Published As

Publication number Publication date
GB201317874D0 (en) 2013-11-20
GB2519107A (en) 2015-04-15
KR102183761B1 (ko) 2020-11-30
US20150100754A1 (en) 2015-04-09
US9483438B2 (en) 2016-11-01
GB2519107B (en) 2020-05-13
CN105593808B (zh) 2019-08-16
KR20160065144A (ko) 2016-06-08
TWI644254B (zh) 2018-12-11
WO2015052484A1 (en) 2015-04-16
TW201514852A (zh) 2015-04-16

Similar Documents

Publication Publication Date Title
CN105593808A (zh) 用于执行推测向量存取操作的数据处理装置和方法
US10698833B2 (en) Method and apparatus for supporting a plurality of load accesses of a cache in a single cycle to maintain throughput
US9904551B2 (en) Branch prediction using multiple versions of history data
CN106020778B (zh) 用于还原寄存器重命名映射的方法和装置
CN103282877B (zh) 用于将程序自动分解成多个并行线程的硬件和软件系统的系统、设备和方法
CN102804135B (zh) 用于处理向量指令的数据处理设备和方法
CN103999036B (zh) 在支持事务的计算机体系结构中使用异常进行代码专业化的方法和系统
US10853249B2 (en) Read and write sets for transactions of a multithreaded computing environment
CN107851019B (zh) 用于执行叠接操作的设备和方法
JP7007371B2 (ja) ベクトル命令のための要素間アドレス・ハザードの取扱い
TWI733798B (zh) 在執行向量操作時管理位址衝突的設備及方法
US9940139B2 (en) Split-level history buffer in a computer processing unit
CN106233248B (zh) 用于在多线程处理器上执行发散操作的方法和设备
US10725900B2 (en) Read and write sets for ranges of instructions of transactions
CN103930883A (zh) 响应于矢量访问指令发出的交叉数据访问
CN109416637A (zh) 为了向后兼容性而导出应用程序特定的操作参数
Adiga et al. The ibm z15 high frequency mainframe branch predictor industrial product
KR20010085584A (ko) 저장 어드레스 생성과 범용 종속 벡터에 관한 적재 블록을위한 메커니즘
EP3550428A2 (en) Secure speculative instruction execution in a data processing system
US11507379B2 (en) Managing load and store instructions for memory barrier handling
CN104615408A (zh) 微处理器、集成电路与提供微码指令储存空间的方法
US20220214827A1 (en) Background processing during remote memory access
US20200019405A1 (en) Multiple Level History Buffer for Transaction Memory Support

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