CN1894659B - 在寄存器和存储器之间移动数据的数据处理设备和方法 - Google Patents

在寄存器和存储器之间移动数据的数据处理设备和方法 Download PDF

Info

Publication number
CN1894659B
CN1894659B CN2004800363118A CN200480036311A CN1894659B CN 1894659 B CN1894659 B CN 1894659B CN 2004800363118 A CN2004800363118 A CN 2004800363118A CN 200480036311 A CN200480036311 A CN 200480036311A CN 1894659 B CN1894659 B CN 1894659B
Authority
CN
China
Prior art keywords
register
data
data element
instruction
appointment
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
CN2004800363118A
Other languages
English (en)
Other versions
CN1894659A (zh
Inventor
S·A·福德
D·H·斯梅斯
A·C·罗塞
D·R·鲁茨
C·N·欣德斯
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 CN1894659A publication Critical patent/CN1894659A/zh
Application granted granted Critical
Publication of CN1894659B publication Critical patent/CN1894659B/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
    • 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/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • 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
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • 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/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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

Abstract

一种为在寄存器和存储器之间移动数据而提供的数据处理设备和方法。该数据处理设备包括寄存器数据存储体,具有多个寄存器,可以用来存入数据元素。处理器可以用来并行地对占用该寄存器中至少一个的不同的并行处理通道的多个数据元素执行数据处理操作。提供访问逻辑,所述访问逻辑响应单一访问指令,在指定的寄存器中选定的通道和具有结构格式的存储器内的构之间移动多个数据元素,所述结构格式具有多个分量。单一访问指令识别结构格式中分量的数目,而访问逻辑可以用来来在多个数据元素被移动时将它们这样排列,使得不同分量的数据元素存储在不同的指定的寄存器中选定的通道内,而同时把所述数据元素以所述结构的形式存储在存储器中。

Description

在寄存器和存储器之间移动数据的数据处理设备和方法
发明领域
本发明涉及用于在寄存器和存储器之间移动数据的数据处理设备和方法。
发明背景
当需要对若干个单独的数据元素执行特定的数据处理操作时,一种加速执行这样一种操作的已知方法是使用SIMD(单指令多数据)方法。按照SIMD方法,所述多个数据元素并排地放在寄存器内,然后并行地对那些数据元素执行操作。
但是,SIMD方法实际性能上的优点只有在这些数据元素可以无须重大的系统开销即能以适当的顺序排列在寄存器内才能充分现实。一般,执行SIMD操作之前,这些相关的数据元素需要从存储器装入这些寄存器,而情况往往是,所述SIMD操作所需要的数据元素并非连续地定位在存储器的地址空间内。作为实例,存储器中的数据可能代表像素值的红、绿和蓝分量(亦即,RGB数据),而可能希望对不处在连续存储块中的某些像素的红、绿和蓝分量施行特定的SIMD操作。
因而,这要求从存储器检索数据,送入某些寄存器,然后重新排列数据,使得红、绿和蓝数据元素占用不同的寄存器。将要求多次访问来检索所需的数据,然后一般要求重新安排该数据,以保证数据正确地排列在该寄存器中,以便允许执行SIMD操作。
访问所需的数据元素的一种方法是为每个数据元素发出一条单独的指令,然后把数据元素放置在指定的目的地寄存器内。作为示例,考虑用于上面讨论的像素值的红数据元素,这会使每一行数据元素占用单独的寄存器。然后,可以执行重新排列操作,以便把各个红数据元素采集到一个或多个寄存器中,此后可以对那些数据元素执行SIMD处理。若想对那些元素施行SIMD处理,则对绿和蓝数据元素也需要进行类似的过程。下面将要指出,这样一种方法涉及对存储器的大量的访问,另外,要求在它们重新排列之前,要有相当数目的寄存器来接纳该数据元素。另外,除多重访问对性能造成有害影响以外,在数据排列成可以经受SIMD处理的顺序以前,重新排列数据所用的时间也对性能造成冲击,而这种消极的影响冲击使用SIMD操作可能现实的潜在的性能上的优点。
若该体系结构允许,对上述已知的技术一种可能的增强将是同时检索一个像素的红、绿和蓝数据元素,并把那3个数据元素置入特定的寄存器。尽管这可以减少所需的访问次数,但是它仍旧会要求执行重新排列的操作,以便在能在发生SIMD操作之前,把不同的分量的数据元素移入不同的寄存器。另外,为了为SIMD处理作准备而重新排列所检索的数据元素之前存储它们,仍旧需要相当数量的寄存器。
在矢量处理的不同的技术领域中,已知提供装入指令,它可以通过指定起始地址和步距而从存储器不连续的位置采集各个数据元素。例如,这可以允许每隔二个数据元素从特定的地址开始装入寄存器。还可以提供类似的存储指令。
但是,这个方法一般涉及实现这样的跨越功能所需的装入/存储硬件复杂性增大,尽管这在矢量处理系统中被认为是值得的,但是在大部分其它的数据处理系统是不希望有的。
另外,这种方法有相当大的限制性,因为在为后续的SIMD处理中要采集到寄存器中的数据元素将需要以特定的跨距隔开,而情况往往并非如此。例如,该数据元素可以通过链接表而彼此相关,其中存储器中一个和下一个数据元素之间的间隔因数据元素而异。
另外,考虑早期的示例,其中该数据代表像素的红、绿和蓝分量,然后若需要所有3个分量,则每一个分量都将需要单独的跨距指令。因而,尽管为了支持跨越功能而增大装入/存储单元的复杂性可以允许红分量被采集进入特定的寄存器,蓝分量采集进入另一个寄存器,而绿分量采集进入另一个寄存器(在该受限制的情况下,其中所需的数据元素隔开固定的跨距),但是这要求为每一个分量发出单独的指令。
因此,为了支持有效的SIMD处理操作,最好提供一种改善的技术,用来在指定的寄存器和存储器之间移动数据元素。
发明概要
从第一方面看,本发明提供一种数据处理设备,它包括:寄存器数据存储体,具有多个寄存器,可以用来保存数据元素,保存在每一个寄存器中的数据元素的数目取决于所述数据元素的数据类型;处理器,可以用来并行地对占用所述寄存器中至少一个的不同的并行处理通道的多个数据元素执行数据处理操作;访问逻辑,可以用来响应单一访问指令,在指定的寄存器中所述各通道中选定的一个和存储器中具有结构格式的结构之间移动多个数据元素,所述结构格式具有多个分量;所述单一访问指令包括识别与所述要移动的数据元素相联系的数据类型的数据类型信息,并且所述单一访问指令识别所述结构格式中分量的数目;以及所述访问逻辑可以用来在多个数据元素被移动时对它们进行排列,使得不同分量的数据元素被保存所述选择的通道中不同的指定的寄存器中,同时在存储器中所述数据元素以所述结构格式被保存,所述访问逻辑所执行的所述重新排列取决于所述数据类型。
按照本发明,该数据处理设备具有:具有多个寄存器的寄存器数据存储体,可以用来存储数据元素;和处理器,可以用来并行地对占用这些寄存器中的至少一个的不同的并行处理通道的多个数据元素执行数据处理操作。因而,作为示例,若一个特定的寄存器保存八个截然不同的数据元素,每一个都要独立地经受数据处理操作(亦即,对该八个数据元素执行SIMD操作),则可以认为存在八个并行处理通道。
按照本发明,访问逻辑可以用来响应单一的访问指令,在指定的寄存器中一个选定的通道和具有结构格式存储器内的结构之间移动多个数据元素,该结构格式具有多个分量。相应地,考虑以红、绿和蓝数据元素的形式代表像素数据的早期结构示例,可以看出,若希望对红、绿和蓝数据元素执行不同的操作,则该结构格式具有3个分量。作为另一个示例,若存储器中的数据代表复数,具有实部和虚部,则该结构格式可以有两个分量,一个代表实部的分量和一个代表虚部的分量,假定希望对这些分量执行不同的操作。
下面将指出,这些数据元素可能采取各种各样的形式,而且确实在同一数据处理设备内可以支持数据元素的不同形式。单一访问指令包括数据类型信息,识别与要移动的数据元素相联系的数据类型。数据类型信息可以识别用于规定数据类型的任何相关信息。作为实例,数据类型信息可能识别要移动的数据元素的尺寸。在其他实施例中,它还可以识别其它方面,诸如数据是有符号还是无符号的等。
还安排单一访问指令来识别结构格式中分量的数目,而访问逻辑可以用来在所述多个数据元素被移动时排列所述多个数据元素,使得不同分量的数据元素存入不同的指定的寄存器的选定的通道内,而同时在存储器中所述数据元素是以所述结构的形式存储的。
相应地,所述单一访问指令使同时移动特定的指定结构内的数据元素成为可能,另外,要在所述数据元素被移动时适当地排列它们,使得不同分量的数据元素可以放入不同的寄存器。在采取装入指令形式的单一访问指令方面,这意味着,形成特定的结构的分量的所有数据元素可以在一个操作中装入,并且将它们这样排列,得使它们被放置入所述被选定来接纳该数据元素的寄存器中的特定的通道内。相应地,以具有红、绿和蓝数据元素的像素的早期示例为例,可以用一个装入指令来装入一个像素的红、绿和蓝数据元素,并且这样排列那些数据元素,使得在那些寄存器的选定的通道内,红数据元素进入一个寄存器,绿数据元素进入另一个寄存器,而蓝数据元素进入另一个寄存器。
因而,这提供一种特别有效的技术,用来把一种结构从存储器装入并使组成的数据元素以它们在后续的SIMD处理中有效的形式进入寄存器。
类似地,该单一访问指令也可以采取存储指令的形式,所述存储指令安排来执行类似的过程,以便为特定的结构从指定的寄存器的选定通道提取数据元素,然后这样排列所述数据元素使得那些数据元素以正确的结构格式存回存储器。因而,这使当数据已经经受SIMD处理之后存回存储器时实现性能的重大提高成为可能。
下面将要指出,可以以各种各样的方法指定所述选定的通道。例如,在一个实施例中,预定的通道可以在每次执行单一访问指令时识别,该访问是针对预定的通道进行的。这会允许在循环中多次重复相同的指令,但是可以要求该数据的某些重新排列,例如,保证刚装入的任何数据都不被正在装入的新数据覆盖,或万一进行存储时要保证不同的数据在每一次叠代时存回存储器。
但是,在一个实施例中,所述单一访问指令指定选定的通道,这在为任何特定的访问指令选择通道方面允许有巨大的灵活性。
在一个实施例中,所述访问逻辑响应一序列所述单一访问指令,在指定的寄存器内多个选定的通道和存储器中相应的多个结构之间移动数据元素。因而,通过所述单一访问指令的适当的叠代,多个结构的数据元素可以装入指定的寄存器内选定的通道,此后可以对那些数据元素施行SIMD操作。类似地,通过执行另一个单一访问指令序列,可以以迭代方式把指定的寄存器的不同的通道内的数据元素写回到存储器的所需的存储器地址,而同时按照所述结构格式存储。
所述结构包括多个分量,而所指定的寄存器的数目一般取决于分量的数目。在一个特定的实施例中,该结构包括一个分量,而该指定的寄存器包括一个寄存器。尽管在该实施例中,作为每一个访问指令的结果,只装入或存储一个数据元素,但是在该数据元素定位在指定寄存器的何处方面,仍有巨大的灵活性,因为保存该要访问的数据元素的通道可以针对该访问指令的任何一次叠代而独立地选定。因而,即使在其中该结构包括一个分量的示例中,就数据元素放置在该寄存器的灵活性而言,相对于已知的先有技术也可以实现重大的优势。
下面将指出,参与所述访问的指定的寄存器可以以若干种方法识别。例如,可以使用某些默认寄存器。但是,在一个实施例中,所述单一访问指令识别指定的寄存器,指定的寄存器的数目是分量数目的倍数。通过保证指定的寄存器的数目是分量数目的倍数,所述访问逻辑便可以保证任何特定的寄存器都只存储一个分量的数据元素,还可以容易地确定哪些分量分配给哪些寄存器。例如,若所述结构格式具有3个分量,并且通过所述指令来识别3个指定的寄存器,则显然一个分量可以分配给每一个寄存器。
在某些实施例中,要移动的数据元素可以属于不同数据类型。作为实例,一个分量的数据元素的数据类型可以不同于另一个分量的数据元素。在一个特定实例中,一个分量的数据元素可以具有与另一个分量的数据元素不同尺寸。但是,在一个特定的实施例中,要移动的数据元素中的每一个具有同样的数据类型,而且相应地所述数据类型信息只需要识别关于单一数据类型的信息。因而这简化了单一访问指令内数据类型信息的有效编码。
下面将指出,可以以各种各样的方法识别指定的寄存器。但是,在一个实施例中,所指定的寄存器具有固定的彼此关系。通过对所指定的寄存器的识别设置这样的限制,这便于在单一访问指令范围内对指定的寄存器进行有效的编码。
所述固定的关系可以采取各种各样的形式。但是,在一个实施例中,按照所述固定的关系,所指定的寄存器被n个中间寄存器隔开,其中n是2m-1并且其中m是大于或等于零的整数。在本发明的一个实施例中,寄存器数据存储体内的寄存器可以以若干种方法命名。例如,所述寄存器数据存储体可以考虑包括若干个64位寄存器,它们每一个都可以单独地识别,或者作为另一方案,可以认为由128位寄存器数目的一半构成,其中每一个都可以单独识别。另外,可以动态地改变所述寄存器的样式(view)。因而,可能希望把特定分量的数据元素装入第一64位寄存器,然后把同一分量的其他数据元素装入相邻的64位寄存器。此后,可以把所述两个寄存器看作单一128位寄存器,用于后来的SIMD操作。通过以上述方式定义指定的寄存器之间固定的关系,便可以支持这样的功能。
作为非常具体的实例,当把RGB数据从存储器装入寄存器时,第一单一访问指令可以用来把红分量的数据元素装入第一寄存器,把绿分量的数据元素装入第三寄存器,而把蓝分量的数据元素装入第五寄存器。然后,随后的单一访问指令可以用来把红分量的其他数据元素装入第二寄存器,把绿分量的其他数据元素装入第四寄存器,和把蓝分量的其他数据元素装入第六寄存器。此后,要对所述红分量的数据元素执行的SIMD操作可以把128位寄存器(实际上由所述64位寄存器1和2构成)指定为源寄存器。
虽然可以以上述方式定义所述固定关系以便支持上述功能,但是在一个实施例中,指定的寄存器是所述寄存器数据存储体内的一系列相邻的寄存器。这在所述单一访问指令内提供特别有效的编码。
下面将指出,单一访问指令可以采取各种各样的形式。但是,在一个实施例中,单一访问指令是单一装入指令,所述访问逻辑可以用来响应该单一装入指令,以便把所述多个数据元素从所述连续的存储器块装入所述指定的寄存器,而且在把所述数据元素存储在所述指定的寄存器之前,通过使不同分量的数据元素去交错来重新排列所述数据元素,使得不同分量的数据元素存储在所述指定的寄存器的不同寄存器中。
按照所述实施例,可以用非常有效的方式来管理存储器访问,因为访问连续的存储器块的数据元素,然后使各个数据元素去交错,使得一个分量的数据元素存储在与另一个分量的数据元素不同寄存器中。这避免在所述单一装入指令之后执行其他指令的必要性,以便在可以执行任何SIMD操作以前将所述数据重新排列,因此使更充分地实现SIMD操作的性能优势成为可能。
按照本发明一个实施例,单一访问指令可以是单一存储指令,所述访问逻辑可以用来响应该单一存储指令,把多个数据元素从所述指定的寄存器的选定通道存入存储器的所述结构,并且在把数据元素存入存储器中所述结构之前,安排所述数据元素,使得所述数据元素按所述结构格式存储。
提供一种有效的机构,用于把数据元素从存储器装入寄存器,以便允许在没有延迟的情况下继续进行SIMD操作,下面将指出,从性能观点看,提供一种类似的有效的技术,一旦所述处理器不再需要这些数据元素时,就把它们存回存储器,从性能的观点看来这也是有好处的。按照本发明的这个实施例,访问逻辑响应单一存储指令,排列所述数据元素,使得所述数据元素按结构格式存储在存储器中。再一次发生对存储器的有效访问,因为通过单一次存储器访问来存储一个结构的数据元素。
在一个特定的实施例中,当单一访问指令是单一装入指令时,若结构的数目不足以使指定的寄存器被数据元素填满,则访问逻辑可以用来使指定的寄存器的任何未填满部分被一个或多个预定值填满。下面将指出,所述预定值可以采取各种各样的形式。在一个特定的实施例中,用逻辑零来填充所述指定的寄存器剩余的未填满部分。
下面将指出,存储器的寻址方法可以采取各种各样的形式。但是,在一个实施例中,单一访问指令识别要使用的寻址方式,以便识别要移动的数据元素。在一个特定的实施例中,寻址方式识别连续的存储器块的起始地址。一般,起始地址不直接编码在指令内,而是在所述指令内识别寄存器,并安排所述寄存器来保存所述起始地址。
下面将指出,指定的寄存器可以具有任何适当的尺寸。例如,若不同分量的数据元素具有不同大小,则指定的寄存器具有不同大小可能是适合的。但是,在一个实施例中,所述指定的寄存器具有同样的尺寸。
在本发明的一个实施例中,单一访问指令可以识别要对数据元素进行的变换,而访问逻辑可以用来在数据元素移动时对该数据元素施加所述变换。所述变换可能采取各种各样的形式。但是,作为实例,所述变换可能规定,在数据元素从存储器装入时和存入寄存器之前要对数据元素进行符号扩展。因此,作为具体实例,若数据元素是带符号的8位数据类型,则单一访问指令可以识别变换,应该把这些数据元素符号扩展至16位,然后以带符号的16位值的形式存入寄存器。在所述指令内指定这样的变换的一个路径是指定要访问的数据元素的数据类型和所需的结果数据类型。采用这样一种方法便可以设置有效的机构来允许数据元素在从存储器装入寄存器时,或在把它们从寄存器返回存储到存储器时进行变换。
从第二方面看,本发明提供一种操作数据处理设备的方法,所述设备包括:寄存器数据存储体,具有多个寄存器,可以用来保存数据元素,保存在每一个寄存器中的数据元素的数目取决于所述数据元素的数据类型;以及处理器,可以用来并行地对在至少一个寄存器中的被访问的多个数据元素执行数据处理操作,所述方法包括以下步骤:(a)响应单一访问指令,在指定的寄存器和连续的存储器块之间移动多个数据元素,其中数据元素是以具有结构格式的结构阵列的形式保存的,所述结构格式具有多个分量;所述单一访问指令包括识别与所述要移动的数据元素相联系的数据类型的数据类型信息,并且所述单一访问指令识别所述结构格式中的分量的数目,并且所述方法还包括以下步骤:(b)当数据元素移动时重新排列多个数据元素,使得指定的寄存器保存一个分量的数据元素,而同时以结构阵列的形式把数据元素保存在存储器中,所述执行的重新排列取决于所述数据类型。
从第三方面看,本发明提供一种包括计算机程序的计算机程序产品,所述计算机程序包括至少一个单一访问指令,当执行所述至少一个单一访问指令时使数据处理设备按照本发明第二方面的方法运行。
附图说明
现将只以举例的方式参照在附图中图解说明的本发明的推荐的实施例进一步描述本发明,附图中:
图1示意地图解说明一个集成电路,它既支持传统的标量数据处理,又支持SIMD数据处理;
图2示意地图解说明SIMD寄存器数据存储体的读出和写入端口配置;
图3示意地图解说明SIMD读出和写入操作,其中目的地寄存器是源寄存器宽度的两倍;
图4表示用于不同数据处理操作的源寄存器尺寸和目的地寄存器尺寸之间不同类型的关系;
图5示意地图解说明可以用来按照本技术定义数据处理指令的语法;
图6示意地图解说明看做64位寄存器和128位寄存器的SIMD寄存器数据存储体;
图7示意地图解说明64位和128位寄存器之间的重叠(″alising″);
图8示意地图解说明存储在不同大小的寄存器内的多个数据元素;
图9示意地图解说明引用SIMD矢量寄存器中的标量数值;
图10示意地图解说明数据处理指令,其中处理通道的数目和数据元素尺寸保持恒定;
图11A和11B示意地图解说明数据处理指令,其中处理通道的数目保持恒定而数据元素尺寸发生变化;
图12图解说明SIMD寄存器数据存储体和标量寄存器数据存储体之间的数据转移;
图13,14和15示意地图解说明不同寄存器转移指令的操作;
图16是流程图,图解说明其中也许有效地使用图14和15中图解说明的类型的寄存器转移指令的情况的实例;
图17是示意图,示意地图解说明按照一个实施例数据元素如何从连续的存储器块装入某些指定的寄存器;
图18示意地图解说明按照实施例可能存在于存储器内的不同结构的某些实例;
图19A至19C图解说明按照一个实施例单一存储指令的特定实例的操作;
图20A至20C图解说明按照一个实施例单一装入指令的特定实例的操作;
图21A至21C图解说明按照一个实施例单一装入指令另一个特定实例的操作;
图22A至22C图解说明按照一个实施例单一装入指令的再一个特定实例的操作;
图23是方块图,更详细地图解说明图1的重排序逻辑内设置的逻辑;
图24-26图解说明按照实施例用于单一访问指令四个不同序列的通过重排序逻辑的数据流程;
图27图解说明已知的折叠操作;
图28图解说明一个实施例的折叠操作;
图29图解说明另一个实施例的折叠操作;
图30a至30d图解说明不同折叠指令的操作;
图31示意地图解说明设置成执行设置在图1的SIMD处理逻辑内的折叠操作的逻辑;
图32图解说明矢量-标量(vector-by-scalar)指令的操作;
图33图解说明图1的SIMD寄存器文件中标量操作数的配置;
图34示意地图解说明设置成执行设置在图1的SIMD处理逻辑内的矢量-标量操作的逻辑;
图35表示按照先有技术的右移和高端填充的方法;
图36示意地表示按照本技术一个实施例的右移和变窄(narrow)操作;
图37示意地表示按照本技术的左移和变窄;
图38示意地表示按照本技术实施例的向上类型变换(cast up)和左移;
图39示意地表示数据元素移位不同位数;
图40示意地表示传统的多路复用器;
图41示意地表示其中按位选择源值a或b的实施例;
图42示意地表示其中在数据元素的基础上选择源值a或b的替代实施例;
图43示意地表示与本技术提供的3个多路复用指令对应的多路复用器配置的3个实例;;
图44示意地图解说明取决于字节序方式以不同布局存储多个数据元素的SIMD寄存器;
图45示意地图解说明按照第一实例的存储器访问逻辑和数据元素重排序逻辑的操作;
图46示意地图解说明按照第二实例的存储器访问逻辑和数据元素重排序逻辑的操作;
图47示意地更详细地图解说明图45和46的数据元素重排序逻辑的示范实施例;
图48示意地图解说明包括用作表寄存器、结果寄存器和索引寄存器的两个寄存器的寄存器数据存储体;
图49示意地图解说明查表扩展指令的操作;
图50示意地图解说明其他查表扩展指令重新使用索引寄存器内的索引值以前对索引寄存器执行的处理;
图51示意地图解说明查表指令的操作,其中零值写入结果寄存器中与超位索引值对应的位置上;
图52图解说明按照一个实施例图1的LSU如何与存储系统和存储器管理单元耦合;
图53A至53D是简图,示意地图解说明按照一个实施例要访问的数据块的不同实例;
图54A和54B是简图,示意地图解说明按照一个实施例要访问的数据块的另一个实例;
图55A至55C示意地分别图解说明交错操作、去交错操作和转置操作;
图56A和56B示意地图解说明按照一个实施例如何执行交错和转置操作;
图57A至57C图解说明按照一个实施例的指令序列如何可以用来将图像像素阵列转置;
图58图解说明一个实施例的指令如何可以用来交错复数的实部和虚部;
图59A和59B图解说明按照一个实施例的两个指令的序列如何可以用来并行地执行两个复数的乘法;
图60示意地表示返回高半部部的加法运算及其关联的指令;
图61示意地表示利用四舍五入的返回高半部部的加法运算及其关联的指令;返回高半部
图62示意地表示返回高半部部的减法运算及其关联的指令;返回高半部
图63表示从指令产生的可能的常数表,所述常数表具有数据部分、abcdefgh和与其相联系的控制部分;
图64表示常数产生逻辑;
图65表示具有常数产生逻辑的数据处理器;
图66A和66B示意地表示响应具有产生的常数的两种类型指令的数据处理器;以及
图67表示按照本技术的掩码位屏蔽的产生。
实施例的描述
图1示意地图解说明数据处理系统(集成电路)2,它包括标量数据处理功能和SIMD数据处理功能。可以把标量数据处理部分看作是标准ARM处理器核,ARM处理器核包括标量寄存器数据存储体4、乘法器6、位移器8、加法器10、指令流水线12和标量译码器14以及许多其它电路元件(为清晰起见,图中未示出)。工作时,这样的一个标量处理器核在标量寄存器数据存储体4内存储固定长度的32位数据值并在沿着指令流水线12传送并提供给标量译码器14的数据处理指令的控制下利用乘法器6、位移器8和加法器10处理所述固定长度的32位数据值。标量译码器14产生控制信号,所述控制信号以传统方法控制标量处理元素的操作。
如在图1中图解说明的,集成电路2包括不同专用SIMD处理元素,包括SIMD寄存器数据存储体20、专用SIMD处理逻辑18和重排序逻辑24。装入存储单元22与所述标量部分共享,并且可以是标量处理器内传统上找到的装入存储单元的相同的或修改的版本。
利用附加的流水线级来扩展指令流水线12,所述附加流水线级用来通过专用SIMD译码器16控制SIMD处理操作。(下面将指出,在其他实施例中,可以与标量流水线平行设置SIMD流水线。)SIMD译码器16产生SIMD控制信号,控制SIMD处理元件,诸如读出SIMD寄存器、写入SIMD寄存器和配置SIMD处理逻辑,以便执行所需数据处理操作。SIMD流水线级跟在标量级后面,使得处理器的SIMD部分有效地看到对所述标量部分的不同执行点。这可以造成某些联锁的必要性,如下面将要讨论的。
重排序逻辑24服务于以下目的:把从耦合到集成电路2的存储器(未示出)检索到的数据元素重排序成更适宜于所需的SIMD处理操作的顺序。重排序逻辑24,它的操作和优点将在下面进一步讨论。在装入存储单元(LSU)22和重排序逻辑24之间还设置装入和存储FIFO(先进先出)23和23′。
在所述实例中可以认为标量寄存器数据存储体4分为固定数目的固定长度的寄存器,诸如传统的16个32位ARM寄存器。反之,SIMD寄存器数据存储体20提供存储块,可以根据与所涉及的SIMD数据处理指令相联系的参数,以灵活的方式对它们进行寻址/访问。更具体地说,SIMD数据处理指令指定源和目的地寄存器的数目、数据元素大小和与所述数据处理指令相联系的寄存器大小。这些参数由SIMD译码器16和寄存器数据存储体20的读出/写入端口组合在一起,以便控制不同部分和相应地存储在SIMD寄存器数据存储体20内的数据元素到所访问的寄存器的映射。因而,可以有效地把不同大小的SIMD寄存器、不同数据元素大小等等共同化名(aliased together)(亦即,可以认为这些寄存器是重叠的并且在需要的时候可以通过不同寄存器说明符、寄存器尺寸和数据元素尺寸组合进行访问。在所述示范实施例中,可以认为SIMD译码器16和读出/写入端口提供寄存器访问逻辑)。
图2示意地图解说明可以为SIMD寄存器数据存储体20设置的读出和写入端口配置。在所述实例中,32个SIMD寄存器能够由SIMD数据处理指令内的寄存器指定字段(5位)指定。N个读出端口与SIMD寄存器数据存储体20相联系。所支持的最小粒度是64位寄存器数值。在所述实例中,直接支持的寄存器大小是64位和128位。本领域的技术人员不难理解,可以将这种配置按比例缩放,以便直接支持256位和更高的寄存器大小,或通过利用所支持的指令将尺寸较小的寄存器合成来间接地支持更高的寄存器大小。图2示意地图解说明M个多路分解器用作SIMD寄存器数据存储体20的写入端口。下面将指出,在实践中,这样的多路分解器是以到达SIMD寄存器数据存储体内的存储器元件行的适当的定向使能信号以及多路复用器的把所需的输入路由到它们的目的地的操作的形式来提供的。
图3图解说明特定的实例,其中每一个包含多个数据元素的两个64位SIMD寄存器值(表示为D双字长)相乘,以便产生多个输出数据元素,所述多个输出数据元素一起存储在128位寄存器(标示为Q四倍长字)中。各单独的读出端口设置成从SIMD寄存器数据存储体20读出源SIMD寄存器值D1和D2。两个写入端口共同操作,以便分别允许把128位结果的第一Q[63:0]部分和第二Q[127:64]部分返回写入到SIMD寄存器存储体20。下面将指出,所述D寄存器和所述Q寄存器内的数据元素尺寸可以改变。作为实例,每一个源D寄存器内可以包含四个16-位数据元素,而所述目的地Q寄存器包含一组作为所述乘法的结果的相应的四个32位数据元素。在所述实例中,将会看出,并行处理的通道的数目(四)如何保持恒定,而所述数据元素尺寸根据正在执行的乘法操作的需要如何从16位增大至32位。
图4图解说明可以支持的源寄存器尺寸和目的地寄存器尺寸之间的不同类型的关系。在最上面的实例中假定并行处理通道的数目保持恒定,而且数据元素的尺寸保持恒定。在第二和第四实例中,并行处理的通道的数目保持恒定,但在源和目的地之间,数据元素尺寸发生变化。在第三实例中,两个源元素具有不同的数据元素大小。如下面将进一步描述的,SIMD处理结构和现有系统的技术支持这些不同类型的数据处理指令。最后3个实例是单一输入变量的一元运算。第五实例保持相同的数据元素尺寸。第六实例使数据元素尺寸加大一倍,而第七实例使数据元素的尺寸缩小一倍。
图5示意地图解说明SIMD数据处理指令的语法。所述语法的第一部分指定所涉及的SIMD算符,在这种情况下是乘法操作。这后跟着指示输出数据元素尺寸和输出数据元素的其他特性的字段。在所述实例中,输出数据元素长度是16位,而且是带符号的整数。下一个字段指示输入数据元素的尺寸和特性,在这种情况下,是带符号的8位整数。下一个字段指示目的地寄存器尺寸和寄存器说明符。在所述实例中,具有寄存器说明符12的所述128位四字SIMD寄存器将用作SIMD目的地寄存器。两个源SIMD寄存器各自是具有寄存器说明符(分别是″1″和″4″)的双字64位寄存器。下面描述所述语法的其他信息。
定义一组数据类型来代表不同数据格式。这在表0中描述。大部分指令使用至少一个数据类型限定符来确定精确的操作。但是,操作不一定支持所有数据类型。所述数据类型用作所述字段的后缀,指示数据元素尺寸和特性。
表0
图6图解说明如何可以把SIMD寄存器数据存储体20看作分为32个64位寄存器或16个128位寄存器。这些寄存器映射到相同的物理的SIMD寄存器数据存储体20和相应地在一起用别名称呼。作为实例,寄存器D0内的数据元素也可以作为寄存器Q0内的数据元素被访问。
图7进一步示意地图解说明64位和128位寄存器之间的重叠。如图解说明的,128位寄存器Q(n)对应于两个64位寄存器D(2n+1)和D(2n)。
图8示意地图解说明可以存储在不同大小的SIMD寄存器内的范例数据元素。在图8的上部,以或者包含四个32位数据元素或者包含八个16位数据元素的形式图解说明128位SIMD寄存器。所述数据元素根据需要可以是带符号的或不带符号的整数、浮点数或其它格式的数,并适应要执行的并行处理。
图8的下部图解说明64位SIMD寄存器,它可以或者包含两个带符号的32位整数或者包含四个不带符号的16位整数。可以有许多其它可能性,而且对本技术领域的技术人员将是显而易见的。
图9示意地图解说明如何可以引用SIMD寄存器内的各个标量值。图解说明的SIMD寄存器26包含四个带符号的整数值。若把所述SIMD寄存器看作寄存器Dn,则不同的各自带符号的整数值可以标示为Dn[3]至Dn[0]。例如,当执行选择SIMD寄存器内哪一个数据元素并将其移到标量寄存器数据存储体4内的寄存器或由其中移出的寄存器转移指令时,采取这种引用SIMD寄存器内的各个数据元素的方式。
图10图解说明如何可以在两个源寄存器和目的地寄存器之间在处理通道的数目保持恒定和数据元素尺寸保持恒定的情况下执行SIMD数据处理指令。在所述实例中,源SIMD寄存器是具有四个并行处理通道的D寄存器(64位和包含四个16位数据元素)。目的地SIMD寄存器也是64位D寄存器,包含四个结果16位数据元素值。
与图10形成对照,图11A图解说明其中目的地SIMD寄存器宽度是所述源SIMD寄存器的两倍的实例。处理通道的数目保持恒定,但数据元素尺寸加大一倍。所述类型的行为适合用于SIMD操作,诸如乘法、加法、减法和移位(特别是左移)。图11B图解说明其中目的地SIMD寄存器的宽度是源SIMD寄存器的一半。所述指令类型对加法和移位(特别是右移)是有用的。
在源和目的地之间改变数据元素尺寸而同时处理通道的数目维持不变的能力,允许在不要求作为所执行的数据处理操作产生的数据元素尺寸变化的结果而将数据元素重排序或将指令对折的情况下构建SIMD数据处理指令序列。这在处理速度、代码密度、功率消耗等等方面是重大的优点。
图12示意地图解说明通过寄存器转移逻辑28耦合在一起的标量寄存器数据存储体4和SIMD寄存器数据存储体20。从标量译码器14或SIMD译码器16之一或两个接收的控制信号响应指令流水线12内的寄存器转移指令而控制寄存器转移逻辑28,以便在标量寄存器数据存储体4内的指定的寄存器和SIMD寄存器数据存储体20的指定的寄存器内的指定位置之间移动数据。从标量寄存器向SIMD寄存器移动的数据值也可以拷贝到SIMD寄存器内的所有位置上,如在图13中图解说明的。所述类型的利用复制的寄存器转移指令非常适宜于利用需要通过SIMD处理逻辑18应用于SIMD寄存器内不同的其它操作数的数值,诸如按比例缩放的数值,把所有处理通道快速插装到SIMD寄存器内。
图14图解说明不同类型的寄存器转移指令。在所述实例中,32位标量数值A移动到SIMD寄存器内的指定位置(通道)。其他通道维持它们原来的数值不变。所述标量值不复制到整个标量寄存器中。目的地标量寄存器内的位置可以通过寄存器转移指令内的适当字段值改变。所述类型的操作允许利用从标量寄存器数据存储体检索到的数据值把各个数据元素插装到SIMD寄存器内。
图15图解说明寄存器转移指令的另一种类型。在所述实例中,来自SIMD寄存器内的16位数据元素被从所述SIMD寄存器内的指定可变位置取出并拷贝到所述标量寄存器之一。因为所述标量寄存器是32位寄存器,所以所述数据元素在所述实例中进行符号扩展。所述数据元素可以代之以被零扩展,取决于特定算法或系统的要求。
图16是流程图,示意地图解说明一个实例类型的处理,其中可以有利地使用图14和图15的寄存器转移指令。在步骤30,并行地对多个通道执行某个SIMD处理,其中每个通道都包含它们自己的数据元素。有时,所述处理过程要求执行所述SIMD处理逻辑18不支持的,或只能效率不高地支持的数据处理。在这种情况下,为了允许执行这种复杂的数据操作,希望单独地把各个数据元素在整个标量处理系统中移动。步骤32选择第一个要移动的数据元素。然后,步骤34执行寄存器转移指令,诸如在图15中图解说明的。步骤36对现在处于所述系统标量部分的各个数据元素执行所需的复杂的处理。当所述复杂的处理已经完成时,步骤38执行寄存器转移指令,诸如在图14中图解说明的,以便现在把修改后的数据元素送回它原来的位置。步骤40判断是否已经达到最后一个数据元素,若非如此,则在处理过程回到步骤34以前的步骤42,选择下一个数据元素。若要求对其执行复杂的操作的全部数据元素都已经在所述标量系统移动、对其进行了所需的处理并将其移回到SIMD系统,则处理过程从步骤40进到步骤44,在这里继续进行并行的SIMD处理。
为访问所述寄存器数据存储体而指定SIMD寄存器的数据处理指令包括一个或多个寄存器字段,所述一个或多个寄存器字段把待访问的寄存器的寄存器numver编码。所用的5位寄存器说明符设计成与ARM矢量浮点(VFP)单元使用的相同,就是说,指定寄存器是指令位是:
*对于目的地寄存器:
D=bit[22]
Rd=bits[15:12]
*对于第一源寄存器说明符:
N=bit[7]
Rn=bits[19:16]
*对于第二源寄存器说明符:
m=bit[5]
Rm=bits[3:0]
另外,这样选择这些位的使用,以便分别以与VFP指定双精度和单精度寄存器的方式一致地对Di寄存器和字标量进行编码,并且对Qi寄存器和半字标量的编码遵循相同的原则。以下描述如何使用(D,Rd);(N,Rn)和(M,Rm)用法类似:
Qd:Qi寄存器号是(D,Rd[3],Rd[2],Rd[1]),
相应的Di  寄存器号是(D,Rd[3],Rd[2],Rd[1],0)和(D,Rd[3],Rd[2],Rd[1],1)
Rd[0]应为零
Dd:Di寄存器号是(D,Rd[3],Rd[2],Rd[1],Rd[0])
字标量:
Di寄存器号是(0,Rd[3],Rd[2],Rd[1],Rd[0])
字[D]按小尾端方式选自寄存器
半字标量:
Di寄存器号是(0,0,Rd[2],Rd[1],Rd[0])
半字[(D,Rd[[3)]按小尾端方式选自寄存器。
字节标量:
Di寄存器号是(0,0,0,Rd[1],Rd[0])
字节[(D,Rd[3],Rd[2])]按小尾端方式选自寄存器
因此,可以认为位D,Rd[3],Rd[2],Rd[1]和Rd[0]可以映射到5位连续字段,所述5位连续字段可以旋转若干位的位置,取决于所述寄存器号的寄存器尺寸。在实践中,不是以单独的操作的形式来映射或旋转寄存器编码位的,而是向寄存器提供访问逻辑,以便利用根据寄存器尺寸施加的可移动掩码来形成用于访问所述寄存器数据存储体的行地址和列地址,以便选择正确的位部分用作行和部分列地址。
按照实施例,为在SIMD寄存器文件20(见图1)和存储器之间移动数据而提供装入和存储指令。装入指令可以用来把数据元素从存储器装入指定的寄存器,而存储指令用来把数据元素从指定的寄存器存储到存储器。这些装入和存储指令用来支持利用SIMD处理逻辑18的算法所需的数据的移动。所述实施例的装入和存储指令指定所装入和存储的数据元素的尺寸,而所述信息用来提供寄存器内的相容次序,而与存储系统的字节序无关。
这些实施例的装入和存储指令允许若干数据元素从连续的存储器块装入SIMD寄存器文件20或从SIMD寄存器文件20存储到存储器。按照一个实施例,访问可以以任何字节对齐方式执行,而且装入或存储多达32字节。
一些实施例的装入和存储指令被认为能访问来自存储器的数据,其中数据元素排列成结构,而且每一个结构具有若干分量。按照一个实施例,存储器中所述结构包含一个和四个分量之间,其中一个分量可以具有SIMD处理逻辑18所识别的任何数据类型尺寸,在推荐的实施例中,这些数据类型大小是8,16,32或64位。
实施例中使用的结构格式的某些公用的实例列于下表:
  格式   说明
  (a)   单一分量
  (x,y)   2维位置坐标
  (实部,虚部)   复数
  (x,y,z)   3维向量
  (r,g,b)   像素
  (x,y,z,w)   4维向量
表1
对于任何特定的装入或存储指令,作为访问对象的存储器中的每一个结构都将具有相同的结构格式,相应地将包括相同数目的分量。装入和存储指令设置成识别所述结构格式中分量的数目,而所述信息由重排序逻辑24使用,以便当执行装入操作时,提供数据元素的去交错,而当执行存储操作时,提供数据元素的交错,允许在寄存器中这样设置数据,使得所述结构的不同数据元素出现在不同寄存器。在图17中针对装入指令用来从连续的存储器块把若干数据元素装入3个指定的寄存器的情况,示意地图解说明所述概念。在所述实例中,所述指定的寄存器是3个64位寄存器D0220,D1225和D2230。在所述实例中,所述结构格式是3D矢量格式,相应地每一个结构210在存储器200中具有3个分量215。
如图1所示,把装入指令从指令流水线12路由到标量译码器14,产生适当的存储器访问控制信号,送往装入存储单元(LSU)22。然后,LSU从连续的存储器块访问所需的四个结构A[0],A[1],A[2]和A[3]。相应地,LSU 22可以以它的正常方式运行。此后,通过重排序逻辑24来路由数据,设置成所述重排序逻辑24设置成将每一个结构中的3个分量去交错,使得属于X分量的数据元素被路由到寄存器D0 220,属于Y的数据元素被路由到寄存器D1 225,而属于分量Z的元素被路由到寄存器D2 230。
以装入操作的一部分的形式从结构的阵列装入并把信息分解到各单独的寄存器的能力可以用来允许数据立即就绪用于有效的SIMD处理。
重排序逻辑24还设置成,当把数据从指定的寄存器返回存储到连续的存储器块时,执行类似的处理,在所述实例中,重排序逻辑24执行交错操作,以便在把数据存入存储器之前重现所述结构格式。
如从图1可以看到的,在那些装入指令达到指令流水线12的SIMD各级之前,这些指令从指令流水线被路由到标量译码器14。这使得与在其他情况下可能达到的相比,能够较早出现把数据装入SIMD寄存器文件20的过程,并具有如下好处,即,随后的SIMD处理指令在它开始执行以前一般地不必等待数据装入,由此从而显著地缩短装入操作的传输延迟时间。但是,存储指令将需要通过指令流水线直到它们可以被路由到SIMD译码器16为止,由此可以用适当的控制信号来控制对来自SIMD寄存器文件20的数据的访问,并在数据通过LSU 22被返回存储到所述存储器之前在重排序逻辑24内适当地重排序。但是,可以执行存储指令的某些部分,同时在指令流水线12的ARM部分中例如检查所地址、存储器访问许可等,以便保证所述指令不会导致数据中断。
可以把这些实施例的装入和存储指令看作遵循单一语法。所述语法可以表达如下:
V(LD|ST)<st>,<dt>{@<a>}<reglist>,{<n>,}<addr>
其中
Figure G2004800363118D00251
按照实施例,寻址方式可以采取各种各样的形式,具体地说3种形式图解说明如下:
;//<addr>
[Rn];//address:=Rn
[Rn]!;//address Rn,Rn:=Rn+传输尺寸(其中″传输尺寸″是所访问的存储器数量)
[Rn],Rm;//address:=Rn,Rn:=Rn+Rm
上面讨论的语义允许装入或存储单个结构或多个结构,把逻辑零写入寄存器中不被存储器数据填充的剩余部分,并利用包含标量限定符(例如,D0)的寄存器清单来插入寄存器。下面将指出,在各实施例中,所提供的实际的装入和存储指令一般是上述语法所有可能的组合的子集。
在结构格式方面,图18图解说明三个可能的结构格式实例,和它们对应的”st”值。如可以从图18中可以看到的,第一结构250只有单一个分量,并相应地st值为1。在第二个实例中,结构255具有2个分量,例如,代表复数的实部x和虚部y,而相应地st值为2。最后,在第三个实例中,结构260具有3个分量,代表R,G和B数据元素,相应地st值为3。
为了帮助图解说明利用实施例的装入和存储指令时可用的某些功能,图19-22图解说明装入和存储指令的具体实例。首先考虑条19A-19C,图19A图解说明由存储指令指定的寄存器清单状态
VST 2.16{D0,D1,D2,D3}[r1]
所述指令用来把多个结构从指定的寄存器文件存储到连续的存储器块。如可以看出的,图19A识别包括4个指定的寄存器D0270,D1280,D2290,D3 300的寄存器。如图19B所示,可以认为这些寄存器是被分为”st”(亦即,2)个”dt”尺寸(亦即,16位)数据元素的矢量。在寄存器D0中,这些数据元素用数字275标记,在寄存器D0中,这些数据元素用数字275标记,在D1中用数字285标记,在D2中用数字295标记,在D3中用数字305标记。如图19C所示,重排序逻辑24设置成交错来自这两个矢量的数据元素,使得每一个数据元素314按结构312所需的结构格式存储在存储器310中。
图20A至20C是一组类似的简图,图解说明所述指令执行的操作。
VLD2.16{D0,D1},#1,[r1]
图20A图解说明寄存器清单(reglist)状态的集合,标识寄存器D0270和D1280。然后,图20B图解说明这些寄存器如何被分为dt大小的(亦即,16位)数据元素的st(亦即,2)个矢量。
与图19A至19C的实例形成对照,所述指令指定″n″个参数,标识要访问的结构的数目,在所述实例中,n是1。相应地,对于所述装入指令,需要在有效的地址开始从存储器读出nxst(亦即,1x2)个数据元素,然后从第一矢量的最低的索引元素开始将其以循环分配方式分布在各矢量中。所述处理在图20C中图解说明,并产生写入寄存器D0最低的16位的第一分量314的数据元素xo,而同时第二分量的数据元素yo写入寄存器D1最低的16位。按照所述实施例,一旦全部数据元素都已经装入,所述寄存器状态没有写入的任何部分都设置为零。应该指出,对于等效的存储指令,nxst个数据元素以与装入相反的方式存储。
图21A至21C图解说明另一个特定实例,其中所述指令用的语法扩展到允许指定两个数据类型,就是说,要访问的数据元素用的数据类型和要装入这些寄存器或存储到存储器的结果数据元素用的数据类型。相应地图21A至21C图解说明所述指令所执行的操作
VLD 2.32.S16{D0,D1,D2,D3},[r1]
如图21A所示,收集所述寄存器清单状态,标识寄存器D0 270,D1 280,D2 290和D3 300。然后,如图21B所示,把所述寄存器状态分为dt大小(亦即,32位)的数据元素的st(亦即,2)个矢量,因为所述指令规定:到所述数据元素被存入寄存器时它们的长度是32位。
如所述指令还指定的,存储器中的数据元素是16位长度,因此相应地一旦所述数据元素已经从存储器310被访问,它们将通过用来扩展16位数据元素中的每一个的某些变换逻辑340(它们任选地可以作为重排序逻辑24的一部分被引入)来形成各新的32位数据元素342。将这些数据元素去交错,使得第一分量的数据元素存储在寄存器D0和D1内,而同时第二分量的数据元素存储在寄存器D2和D3内。
图22A至22C图解说明另一个实例并具体地图解说明所述指令的操作。
VLD2.16{D0[2],D1[2]},[r1]
尽管所述指令可以与以前的指令共享相同的语法,但所述指令在概念上是不同类型的指令,因为它不是从连续的存储器块装入数据元素,在所述连续的存储器块中数据元素是以结构的阵列的形式存储的,所述装入指令只装入单个结构。另外,所述装入的单一结构的数据元素可以放入所述指定的寄存器内任何选择的处理通道。因而,当考虑64位宽的寄存器和16位数据元素时,存在四个可能的处理通道,可以把数据元素放入所述四个可能的处理通道内。在推荐的实施例中,选择通过标识特定通道来指示所述寄存器清单数据内的用于特定指令的选择的通道。
考虑图22A,可以看出,当收集寄存器清单状态时,它标识寄存器D0的通道2 320和寄存器D1的通道2 325。如图22B所示,然后它们分为dt大小(亦即,16位)数据元素的st(亦即,2)个矢量。此后,如图22C所示,一旦已经从存储器310访问结构312,重排序逻辑24被安排来把数据元素xo送至寄存器D0 330的通道2,而同时把数据元素yo送至D1寄存器335的通道2。在所述实例中,下面将指出,可以在从0至3的范围内标识这些通道。
对于有兴趣的读者,下表标识可以在特定的实施例中提供的各种不同类型的装入和存储指令:
Figure G2004800363118D00281
Figure G2004800363118D00291
Figure G2004800363118D00301
表2
表3
Figure G2004800363118D00312
表4
Figure G2004800363118D00322
表5
在一个实施例中,图1的重排序逻辑24采取在图23中图解说明的形式。图23的逻辑在它的输入端包括两个多路复用器350、355,它们在装入指令时设置成从与在图1中图解说明的LSU 22相联系的装入FIFO 23接收数据,或在存储指令时设置成从SIMD寄存器存储体20接收数据。另外,在某些情况下,装入指令还可以使图23的逻辑从SIMD寄存器存储体20接收数据。控制多路复用器350、355以便在不同输入之间进行选择,并把选择的输入路由到相关的输入寄存器360、365。在一个实施例中,每一个输入寄存器都能存储64位数据。然后,把存储在所述输入寄存器的数据通过纵横多路复用器375读入到寄存器高速缓存380,纵横控制寄存器370向纵横多路复用器提供驱动信号,以便把从所述输入寄存器接收的数据的各个字节送往寄存器高速缓存中所需的位置。控制寄存器中的值由指令译码器导出。
如图23所示,可以把寄存器高速缓存380看作由四个寄存器构成,并且在一个实施例中,每一个寄存器的长度是64位。
在已经把数据存入寄存器高速缓存380之后,那么可以通过输出多路复用器385将它或者读出到与LSU 22(在存储指令时)相联系的存储数据FIFO 23′,或者读出到SIMD寄存器文件20(装入指令时)。
尽管字节纵横多路复用器375可以以字节粒度读出输入寄存器,并以字节粒度写入寄存器高速缓存,但是写入多路复用器385以64位粒度从寄存器高速缓存读出。
重排序逻辑24在很大程度上是自主的,独立于SIMD处理逻辑18的其余部分,但是以与集成电路内其它功能单元相同的方式获得程序指令中的指令。在一个实施例中,它具有两个控制它本身的寄存器文件读出端口和两个写入端口。为了检测出危险并加于避免,重排序逻辑24可以设置成利用记分板与某些互锁逻辑(未示出)通信。
来自SIMD寄存器文件20的存储指令相对于其它SIMD指令,是超越顺序执行的,但是相对于其它来自SIMD寄存器文件的存储指令仍旧是按顺序执行的。挂起的存储保持在一个队列中,并且当存储数据就绪时,它读出和通过重排序逻辑24传送进入与LSU 22相联系的存储FIFO 23′。
在一个实施例中,所有在存储器和SIMD寄存器文件20之间传递的数据都通过重排序逻辑24确定路由。但是,在一个替代方案实施例中,可以针对确定不必重新排列的情况,设置绕过重排序逻辑24的旁路路径。
寄存器高速缓存380称作″高速缓存″,因为在某些状态下在它们写入SIMD寄存器文件20以前它对寄存器的值起高速缓存作用。寄存器高速缓存以数据从重排序逻辑24输出的格式保存数据。
图24A至24C图解说明重排序逻辑24实现执行VLD3.16{D0,D1,D2},[r1]类型的指令时所需的重排序的操作。
一旦数据已经通过LSU 22装入,便在第一周期(如图24A所示)把检索到的数据的64位通过多路复用器350装入输入寄存器360,而同时通过多路复用器355把下一个64位装入输入寄存器365。在图24A至24C图解说明的实例中,假设所述结构格式代表具有分量x、y、z的3D矢量。在下一个周期,如图24B所示,把输入寄存器内的16位数据元素通过字节纵横多路复用器375读入寄存器高速缓存380,多路复用器375将所述数据重排序,使得与x分量有关的任何数据元素都放入所述寄存器高速缓存的第一寄存器,与y分量有关的任何数据元素都放入第二寄存器,与z分量有关的任何数据元素都放入第三寄存器。另外,在所述周期过程中,来自FIFO 23数据的下一个64位数据通过多路复用器350装入输入寄存器360。
在下一个周期,如图24C所示,来自输入寄存器360的数据元素通过字节纵横多路复用器确定路由,进入所述寄存器高速缓存,同时把x、y和z分量去交错,如较早讨论的。如图24C所示,这使寄存器高速缓存在第一寄存器包含四个x分量,在第二寄存器包含四个y分量,而在第三寄存器包含四z分量。然后,可以通过写入多路复用器385把寄存器高速缓存的内容(一次两个寄存器)输出到由装入指令指定的寄存器。
图25A-25D图解说明通过重排序逻辑(以便执行当执行指令VLD3.16{D0[1],D1[1],D2[1]],[r1]时所需的必要的重排序}的数据流程的第二实例。按照所述指令,数据要装入寄存器D0、D1和D2的特定通道,就是说,那些寄存器内四个16位宽通道中第二个16位宽通道。在数据元素可以存储在特定的寄存器通道以前,需要取出寄存器的当前内容,使得随后写入寄存器时,寄存器的内容作为整体写入。所述特征避免提供任何只把写入SIMD寄存器文件20中寄存器的一部分的必要性。相应地,在第一周期过程中,如图25A所示,寄存器D0和D1的当前内容通过多路复用器350、355从SIMD寄存器文件读出到输入寄存器360、365。在下一个周期,如图25B所示,这些内容通过纵横多路复用器375读出到寄存器高速缓存380,使D0的内容放入第一寄存器,而D1的内容放入寄存器高速缓存的第二寄存器。在同一周期过程中,寄存器D2的内容通过多路复用器350从SIMD寄存器文件取出,并存储在输入寄存器360。
在下一个周期,如图25C所示,寄存器D2的内容通过纵横多路复用器375读出到寄存器高速缓存380,使得它们存储在寄存器高速缓存的第三寄存器。在相同的周期过程中,作为装入对象的数据结构一般已经通过LSU取出,它从装入FIFO 23通过多路复用器350读出到输入寄存器360。在图25C图解说明的实例中,再一次考虑,存储器中的结构代表带有分量x、y和z的3D矢量数据。在下一个周期,如图25D所示,x、y和z分量通过纵横多路复用器375读出到数据元素的第二通道,使得数据元素xo写入寄存器高速缓存,覆盖寄存器D0第二通道以前的内容,分量yo写入寄存器高速缓存内,覆盖寄存器D1第二通道以前存储的数据元素,而分量z0写入寄存器高速缓存,覆盖寄存器D2第二通道以前存储的数据元素。
下面将指出,此刻SIMD寄存器文件中的寄存器D0、D1和D2实际内容尚未改变。但是,存储在寄存器高速缓存中的数据现在可以通过写入多路复用器385返回输出到寄存器D0、D1和D2,以便覆盖以前的内容。结果,可以看出,单一装入指令可以用来把特定结构的分量从存储器装入,然后把所述结构的各个分量插入不同寄存器选择的通道位置上。
图25E至25H图解说明通过重排序逻辑(以便执行当执行与以上参照图25A至25D讨论的装入指令互补的存储指令时所需的必要的重排序)的数据流程的第三实例。相应地,图25E至25H图解说明当执行指令VST 3.16{D0[1],D1[1],D2[1]},[r1]时执行必要的重排序所需的步骤。因而,按照所述指令,数据准备从寄存器D0、D1和D2第二个16位宽的通道返回存储到存储器。如图25E所示,在第一周期过程中,寄存器D0和D1的当前内容通过多路复用器350、355从SIMD寄存器文件读出到输入寄存器360、365。在下一个周期,如图25F所示,第二通道中的数据元素,亦即,xo和yo,通过纵横多路复用器375读入寄存器高速缓存380的第一寄存器。在同一周期过程中,通过多路复用器350从SIMD寄存器文件检索出寄存器D2的内容并将其存储在输入寄存器360中。
在下一个周期,如图25G所示,寄存器D2第二通道中的数据元素通过纵横多路复用器375读出到寄存器高速缓存380的第一寄存器。然后,在下一个周期,如图25H所示,x、y和z分量现在可以由写入多路复用器385输出到LSU,以便返回存储到存储器。下面将指出,在所述阶段,数据元素现在已经重排序成为存储在存储器中所需要的结构格式。
图26A至26E图解说明在执行以下四指令序列过程中,在所述重排序逻辑内发生的重排序:
VLD 3.16{D0,D1,D2},#1,[r1]
VLD 3.16{D0[1],D1[1],D2[1]},[r2]
VLD 3.16{D0[2],D1[2],D2[2]},[r 3]
VLD 3.16{D0[3],D1[3],D2[3]},[r4]
一旦由第一装入指令识别的数据已经通过LSU检索出,便通过多路复用器350将其读出,在第一周期过程中(见图26A)进入输入寄存器360。在下一个周期,通过纵横多路复用器375将所述数据读入到寄存器高速缓存380,使得x、y和z分量被放入寄存器高速缓存的不同寄存器。第一指令内的″#1″象征每一个数据元素都应该放入每一个寄存器的最低位数据通道,而且剩余通道应该用逻辑0值填充,如图26B所示。在该周期过程中,还检索出由第二装入指令识别的数据元素并使其进入输入寄存器360。在下一个周期过程中(见图26C),存储在输入寄存器360的数据元素通过纵横多路复用器375移入寄存器高速缓存380,其中将它们存储在第二通道。在该周期过程中,还把第三个装入指令的数据元素放置在输入寄存器360内。
在下一个周期,把输入寄存器360的内容通过纵横多路复用器375路由到寄存器高速缓存的第三通道,而同时检索出第四装入指令对象的数据元素并使其进入输入寄存器360。这如图26D所示。
最后,如图26E所示,在下一个周期,这些数据元素通过纵横多路复用器375确定路由,进入寄存器高速缓存380,其中它们被存储在第四通道。此后,可以把寄存器高速缓存每一个寄存器中的64位宽的数据块输出到SIMD寄存器文件的指定的寄存器。
应该指出,与在图25A至25D中采取的方法形成对照,使用参照图26A至26E图解说明的第一VLD指令(从而一旦已经把数据元素放入特定通道,剩余通道便用0值填满)避免了在进行任何更新以前从所述SIMD寄存器文件检索寄存器D0至D2中任何一个的当前内容的必要性。观察图26A至26E便可以看出,在所述实例中,寄存器高速缓存380起″直通写入高速缓存″的作用,因为它对用于装入指令序列的数据元素进行高速缓存,而且当完成每一指令时,把数据写到SIMD寄存器文件的相关寄存器。但是,在执行所述序列中的每一个后续指令时通常不必从所述寄存器文件读出。
在数据处理时往往需要通过在所有元素之间施加交换和关联操作符′op′来把所谓元素矢量简化成单一元素。将作为折叠操作来描述这种过程。折叠操作的典型实例是对矢量的元素求和,或求出矢量中元素的最大值。
在并行处理的体系结构中,将参照图27描述用来执行这样的折叠操作的已知的方法。要折叠的数据元素[0]至[3]被包含在寄存器r1中。下面将指出,并行处理体系结构的好处是,它可以允许同时对多个数据元素执行同一操作。这是参照所谓并行处理通道可以更清晰地理解的概念。在所述实例中,每一个并行处理通道包含数据元素[0]至[3]之一。
首先,在步骤A,发出第一指令,使所述数据元素旋转两位,以便在寄存器r2中形成旋转后的数据元素。这把不同数据元素放入每一个处理通道,使得单指令多数据(SIMD)操作在步骤B得以施行。
此后,在步骤B,发布第二指令,以便对每一个通道中的数据元素执行SIMD操作。在所述实例中,把这些多个并行操作结果数据元素存储在寄存器r3。相应地可以看出,现在r3中的各项包含寄存器r1一半数据元素的组合结果(亦即,r3包含:[0]op[2];[1]op[3];[2]op[0];和[3]op[1])。
接着,在步骤C发布第三指令,所述第三指令使存储在寄存器r3中的所述结果被旋转一个并行处理通道并且被存储在寄存器r4。存储在r3中的数据元素相对于r4的数据元素的旋转再一次使不同数据元素能够占用相同的并行处理通道。
最后,在步骤D,发布第四指令,这导致对存储在每一个通道的数据元素执行其他单指令多数据操作,并将结果存储在寄存器r5。
相应地,可以看出,可以通过仅仅利用四个指令来组合整个寄存器的数据元素,而把结果存储在寄存器r5的每一项(亦即,r5中的每一项包含:[0]op[1]op[2]op[3])。可以根据需要从寄存器r5中的四项中的任何一项读出结果数据元素。
图28图解说明一个实施例的折叠指令的原理。不同于并行处理通道的传统配置(参照图27所描述的),在所述并行处理通道传统配置中每一个并行处理通道在整个通道中具有等于一个数据元素宽度的固定宽度,在本实施例中,所述并行处理通道的配置情况就不一样。在新的配置中,在其输入端每一个并行处理通道的宽度等于至少两个源数据元素的宽度,而在其输出端,一般地等于一个结果数据元素的宽度。已经发现,这样安排并行处理通道,较之先有技术配置提供重大的优点,因为单一寄存器内的数据元素组(例如,数据元素对)可以是并行处理操作的对象。如从下面的讨论将会清晰看到的,这免去执行先有技术配置的数据处理操作(亦即,旋转操作)的必要性,因为没有必要为了允许并行地出现多个操作而把数据元素安排在其他寄存器正确的项位置上。
相应地,源数据元素d[0]至d[3]设置在寄存器各自的项中。可以把相邻的源数据元素d[0]和d[1]看作成对的源数据元素。也可以把源数据元素d[2]和d[3]看作成对的源数据元素。因而,在所述实例中,有两对源数据元素。
在步骤(A),对寄存器中的每对源数据元素执行操作,以便产生结果数据元素,对相邻一对源数据元素执行同一操作。
因而,下面将指出,所述源数据元素对和相应的结果数据元素全都占用并行处理的同一通道。可以看出,步骤(A)之后结果数据元素的数目是源数据元素的数目的一半。也可以数据元素d[2]op d[3]和d[0]op d[1]看作成对的源数据元素。
在步骤(B),对一对源数据元素执行另一个相同的操作,以便产生结果数据元素d[0]op d[1]op d[2]op d[3]。可以看出,步骤(B)之后结果数据元素的数目也是源数据元素的数目的一半。如以前指出的,所述操作是交换和关联操作,无论这些源数据元素的组合的精确次序如何,都会产生相同的结果数据元素。
因而,可以看出,源数据元素的数目可以减半,每一个操作的结果是,可以对那些源数据元素执行同一操作,以便产生所需的结果。相应地,可以看出,所需的结果数据元素可以刚好在两个操作中产生,而图27先有技术设施需要执行至少四个操作。下面将指出,通过对源寄存器内的数据元素组执行并行处理操作来实现效率上的改善。尽管为清晰起见,已经用仅仅两对源数据元素进行图解说明,但是下面将指出,任何数目的源数据元素对都可以成为所述操作的对象。另外,尽管为清晰起见,已经图解说明对各源数据元素对进行的操作,但是下面将指出,任何数目的源数据元素(例如,3个、4个或4个以上)都可以作为所述操作的对象。
在实践中,为了提高效率,安排折叠指令来对由寄存器数据文件20中所支持的最小寄存器尺寸确定的最小数目的数据元素执行并行操作。图29图解说明一种实现方案,它产生数目与源数据元素的数目相同的结果数据元素。
在寄存器Dn中提供源数据元素d[0]至d[3]。为了产生相同数目的结果数据元素,还在寄存器Dm中提供源数据元素d[0]至d[3]。下面将指出,寄存器Dn和Dm很可能是带有SIMD处理逻辑18的相同的寄存器,分两次从寄存器Dn读出每一个源数据元素,以便产生重复的结果数据元素。
在步骤(A),发布单一SIMD指令,每对源数据元素都具有对其执行的操作并产生相应的结果数据元素。
在步骤(B),发布另一个单一SIMD指令,使每对源数据元素具有对其执行的操作,以便产生相应的结果数据元素。
相应地,可以看出,已经把所有源数据元素组合起来产生结果数据元素。
图30a至30d图解说明遵循在别处描述的相同的语法的不同折叠指令的操作。下面将指出,其中两个源寄存器表明,它们可以是相同的寄存器。另外,下面将指出,每一个源寄存器都可以被指定为目的地寄存器,以便减少利用的寄存器空间数量。
图30A图解说明SIMD折叠指令的操作,由此,来自相同寄存器的用′n′位代表的源数据元素对具有对其执行的操作,以便产生由2n位代表的结果数据元素。使结果数据元素提升为2n位,减少了出现溢出的几率。当提升结果数据元素时,一般对它们进行符号扩展或用0填充。概括各折叠指令的以下实例支持这样一种操作:
助记符  数据类型    操作数格式    说明
VSUM    .S16.S8     Dd,Dm        (相邻一对元素相加并提升)
        .S32.S16    Qd,Qm
        .S64.S32
        .U16.U8
        .U32.U16
        U64.U32
在图30A所示的特定实例中(VSUM.S32.S16 Dd,Dm),包含四个16位数据元素的64位寄存器Dm被折叠并且被存储在包含两个32位结果数据元素的64位寄存器Dd。
图30b图解说明SIMD折叠指令的操作,由此来自不同寄存器的用′n′位代表的源数据元素对具有对其执行的操作,以便产生也用′n′位代表的结果数据元素。概括最大值和最小值指令的以下实例支持这样一种操作:
助记符  数据类型   操作数格式    说明
VSUM    .I8Dd,    Dn,Dm        (将相邻元素相加)
        .I16
        .I32
        .F32
助记符  数据类型   操作数格式    说明
VFMX    .S8        Dd,Dn,Dm    (求相邻对的最大值)
        .S16
        S32
        .U8
        .U16
        .U32
        .F32
助记符  数据类型    操作数格式    描述
VFMN    .S8         Dd,Dn,Dm    (求相邻对的最小值)
        .S16
        .S32
        .U8
        .U16
        .U32
        .F32
在图30b所示的特定实例中(VSUM.I16 Dd,Dn,Dm),两个64位寄存器Dm,Dn,每一个都包含四个16位数据元素,折叠和存储在包含四个16位结果数据元素的64位寄存器Dd中。
图30c图解说明SIMD折叠指令的操作,由此来自用′n′位代表的同一寄存器的源数据元素对具有对其执行的操作,以便产生也用′n′位代表的结果数据元素。在图30c所示的特定实例中,包含八个16位数据元素的128位寄存器Qm,被折叠和存储在包含四个16位结果数据元素的64位寄存器Dd中。
图30d图解说明类似于图30b的SIMD折叠指令的操作,但是其中Dm=Dn,这使结果数据值复制到目的地寄存器中。来自同一寄存器的用′n′位表达的几个源数据元素对,具有对其执行的操作,以便产生也用′n′位表达的结果数据元素,每一个都复制到寄存器的另一个项目上。在图30d所示的特定实例中,包含四个16位数据元素的64-位寄存器Dm,被折叠和存储在包含两组两个16位结果数据元素的64位寄存器Dd中,。
图31示意地图解说明实例SIMD折叠逻辑,它可以支持折叠指令,而且作为SIMD处理逻辑18的一部分提供。为清晰起见,图中示出的的逻辑用来支持选择每一个相邻对的最大值。但是,下面将指出,所述逻辑可以容易地适合于为其它操作提供支持,如下面将要更详细描述的。
所述逻辑从寄存器Dm接收源数据元素(Dm[0]至Dm[3]),任选地连同来自寄存器Dn的源数据元素(Dn[0]至Dn[3])。作为另一方案,所述逻辑从寄存器Qm接收源数据元素(Qm[0]至Qm[7])。向相关的折叠操作逻辑单元400提供每对相邻的源数据元素。每一个折叠操作逻辑单元400都具有算术单元410,算术单元410把一个源数据元素从另一个源数据元素减去并提供它大于至多路复用器420的路径415的指示。根据经由路径415提供的指示,多路复用器从操作逻辑单元400输出数值较大的源数据元素。因而,可以看出,每一个折叠操作逻辑单元400被安排来经由各自的路径425、435、445,455上输出相关联的相邻数据元素对中的最大值。
选择和分布逻辑450接收结果数据元素并根据需要经由路径431至434提供这些数据,用于存储在SIMD寄存器数据文件20中寄存器Dd的各项,以便支持上述指令。现将描述选择和分布逻辑450的操作。
为了支持在图30a中图解说明的指令,向较低的两个折叠操作逻辑单元400提供源数据元素Dm[0]至Dm[3]。折叠操作逻辑单元400经由路径425和435输出数据元素。路径431和432将以符号扩展或零扩展的格式提供Dm[0]op Dm[1],而同时路径433和434将以符号扩展或零扩展的格式提供Dm[2]op Dm[3]。这是通过SIMD译码器16响应该折叠指令产生信号而达到的,所述折叠指令使多路复用器470选择它们的B输入、使多路复用器460或者选择符号扩展或者选择零扩展、使多路复用器490选择它们的E输入、而使多路复用器480选择它的D输入。
为了支持在图30b中图解说明的指令,向较低的两个折叠操作逻辑单元400提供源数据元素Dm[0]至Dm[3],而同时向较高的两个折叠操作逻辑单元400提供源数据元素Dn[0]至Dn[3]。折叠操作逻辑单元400经由路径425、435、445和455输出数据元素。路径431将提供Dm[0]op Dm[1],路径432将提供Dm[2]op Dm[3],路径433将提供Dn[0]opDn[1],而路径434将提供Dn[2]op Dn[3]。这是通过SIMD译码器16响应该折叠指令产生信号来实现的,所述折叠指令使多路复用器470选择它们的A输入、使多路复用器480选择它们的C输入、而使多路复用器490选择它们的E输入。
为了支持在图30c中图解说明的指令,向折叠操作逻辑单元400逻辑单元提供源数据元素Qm[0]至Qm[7]。折叠操作逻辑单元400经由路径425、435、445和455输出数据元素。路径431将提供Qm[0]opQm[1],路径432将提供Qm[2]op Qm[3],路径433将提供Qm[4]opQm[5],而路径434将提供Qm[6]op Qm[7]。这是通过SIMD译码器16响应该折叠指令产生信号来实现的,所述折叠指令使多路复用器470选择它们的A输入、使多路复用器480选择它们的C输入、而使多路复用器490选择它们的E输入。
为了支持在图30d中图解说明的指令,向较低的两个折叠操作逻辑单元400提供源数据元素Dm[0]至Dm[3]。折叠操作逻辑单元400经由路径425和435输出数据元素。路径431将提供Dm[0]op Dm[1],路径432将提供Dm[2]op Dm[3],路径433将提供Dm[0]op Dm[1],而路径434将提供Dm[2]op Dm[3]。这是通过SIMD译码器16响应该折叠指令产生信号来实现的,所述折叠指令使多路复用器470选择它们的A输入、使多路复用器480选择它们的D输入,而使多路复用器490选择它们的F输入。作为另一方案,下面将指出,作为代替还可以向上面的两个折叠操作逻辑单元400提供源数据元素,并可以执行与参照图30b图解说明的同一操作,这会减少选择和分布逻辑450的复杂性。
相应地,可以看出,所述逻辑能够在一个直接从源数据元素的单一的操作中,从两个相邻源数据元素产生结果数据元素。
如上所述,折叠操作逻辑单元400可以设置成对所述源数据元素执行任何数目的操作。例如,可以容易地设置其他逻辑来选择性地允许多路复用器420经由路径425提供所述源数据元素的最小值。作为另一方案,算术单元410可以设置成选择性地对所述源数据元素进行加法、减去、比较或乘法,并输出结果数据元素。因而,下面将指出,本实施例的方法在可以利用这种配置执行的折叠操作的范围内有利地提供大量灵活性。
另外,下面将指出,尽管参照图31描述的逻辑支持16位操作,但是可以提供类似的逻辑来支持32位或8位或任何其它大小的操作。
图32图解说明矢量-标量(vector-by-scalar)SIMD指令的操作。所述SIMD指令遵循在别处描述的相同的语法。下面将指出,如前所述,其中两个源寄存器表明它们可以是同一寄存器。另外,每一个源寄存器可以被指定作为目的地寄存器,以便减少所使用的寄存器空间数量并允许数据元素的有效的循环。
寄存器Dm存储若干数据元素Dm[0]至Dm[3]。这些数据元素中间的每一个都代表可选的标量操作数。所述矢量-标量SIMD指令指定数据元素之一作为标量操作数,并利用所述标量操作数并行地对另一个寄存器Dn中的所有数据元素执行操作,其结果存储在寄存器Dd中相应的一项。下面将指出,存储在寄存器Dm,Dn和Dd中的数据元素全都具有不同的尺寸。具体地说,可以相对于所述源数据元素提升结果数据元素。提升可能涉及从一种数据类型至另一种的转换的零填充或符号扩展。这可能具有额外的优点,就是确保不会出现溢出。
在涉及数据元素矩阵的情况下,能够为SIMD操作选择一个标量操作数是特别有效的。不同标量操作数可以写入SIMD寄存器文件20,然后容易地选择用于不同的矢量-标量操作,而不必重写数据元素或旋转数据元素。以下范例乘法指令支持这样一个操作:
乘标量
助记符  数据类型    操作数格式        说明
VMUL    .I16        Dd,Dn,Dm[x]     (Vd[i]=Vn[i]*Vm[x])
        .I32        Qd,Qn,Dm[x]
        .F32
        .S32.S16    Qd,Dn,Dm[x]
        .S64.S32
        .U32.U16
        .U64.U32
乘-累计标量
助记符  数据类型   操作数格式         说明
VMLA    .I16       Dd,Dn,Dm[x]      (Vd[i]=Vd[i]+(Vn[i]*Vm[x]))
        .132       Qd,Qn,Dm[x]
        .F32
        .S32.S16   Qd,Dn,Dm[x]
        .S64.S32
        .U32.U16
        .U64.U32
乘-减标量
助记    符数据类型 操作数格式         说明
VMLS    .I16       Dd,Dn,Dm[x]      (Vd[i]:=Vd[i]-(Vn[i]*Vm[x]))
        .132       Qd,Qn,Dm[x]
        .F32
        .S32.S16   Qd,Dn,Dm[x]
        .S64.S32
        .U32.U16
        .U64.U32
Vd,Vn和Vm描述从选择的寄存器格式和选择的数据类型构造的元素的矢量。矢量内的元素利用阵列符号[x]选择。例如,Vd[0]选择矢量Vd中的最低的元素。
用叠代器i来允许矢量定义;对所有i值保持所述语义,其中i小于矢量内元素的数目。所述指令定义提供′数据类型′和′操作数格式′列;通过从每一列取一个来构成有效指令。
图33图解说明S1MD寄存器文件20中的标量操作数H0至H31的配置。如在别处指出的,所述指令字段中用于指定数据元素在SIMD寄存器文件20中的位置的位的最佳数目是5位。这使指定32个可能的位置成为可能。下面将指出,把标量操作数映射到SIMD寄存器文件20的一种可能的办法是把每一个操作数放入寄存器D0到D31中的每一个的第一项。但是,作为代替,SIMD寄存器文件20设置成对可选的标量操作数映射或取别名到SIMD寄存器文件20中第一32逻辑项上。这样映射所述标量操作数提供重大的优点。首先,通过标量操作数在连续项的定位来把用来存储标量操作数的D寄存器的数目减到最小,这本身使可用来存储其它数据元素的D寄存器的数目最大化。通过把标量操作数存储在连续项中来使矢量内所有标量操作数被访问成为可能,这当执行矩阵或滤波操作时特别有利。例如,矩阵-矢量乘法要求对从矢量选择的每一个标量执行矢量-标量操作。另外,以这种方法存储来自至少一些寄存器的可选的标量操作数使从那些寄存器选择所有标量操作数成为可能。
图34示意地图解说明被安排来执行实施例的矢量-标量操作的逻辑。
从寄存器Dm提供源数据元素(Dm[0]至Dm[3])。向标量选择逻辑510提供每一个源数据元素,所述逻辑包括若干多路复用器500。向每一个多路复用器500的一个输入端提供每一个源数据元素(亦即,每一个多路复用器接收源数据元素Dm[0]至Dm[3])。因而,可以看出,每一个多路复用器都可以输出源数据元素Dm[0]至Dm[3]中的任何一个。在所述实施例中,每一个多路复用器设置成输出相同的源数据元素。因而,标量选择逻辑510可以设置成选择和输出标量操作数。这是通过SIMD译码器16响应矢量-标量指令产生信号来实现的,所述指令使多路复用器输出源数据元素Dm[0]至Dm[3]之一作为选择的标量操作数。
矢量-标量操作逻辑520接收选择的标量操作数,而且还接收从寄存器Dn提供的源数据元素Dn[0]至Dn[3]。向矢量-标量操作逻辑520提供每一个源数据元素,所述操作逻辑包括若干操作单元530。向操作单元530之一提供每一个源数据元素(亦即,每一个操作单元接收源数据元素Dm[0]至Dm[[]之一并选择标量操作数)。在支持上述指令时,矢量-标量操作逻辑520对两个数据元素执行操作,并输出结果数据元素,用于存储在SIMD寄存器数据文件20中寄存器的各自的项。这是通过SIMD译码器16响应矢量-标量指令产生信号来实现的,所述指令使操作单元530对所接收的数据元素执行所需的操作。
相应地,可以看出,所述逻辑使源寄存器数据元素之一被选择作为标量操作数并利用相同的标量操作数对来自另一个寄存器的所有源数据元素执行矢量-标量操作成为可能。
图35表示在SIMD处理过程中处理移位和变窄操作的一个已知的办法。如可以看到的,需要3个单独的指令(SHR,SHR和PACKLO)来执行所述操作。为清晰起见,在图35中和在图36和38中,中间值用点线表示。
图36表示按照本技术的右移和变窄操作。本实施例的体系结构特别适用于处理移位和变窄操作,并可以响应单一指令这样做。所述指令由SIMD译码器16(见图1)中的指令译码器译码。在所述实例中,位于SIMD寄存器文件20中寄存器Qn(见图1)中的数据被右移5位,然后剩余数据四舍五入,然后把16个右手侧位传输至也位于SIMD寄存器文件20内的目的地寄存器Dd。根据所述指令,所述硬件能够任选地支持四舍五入和/或数据的饱和。一般地右移指令并不要求饱和,因为当处理整数右移时,一般地产生较小的数。但是,当右移和狭窄时,饱和可能是适当的。
饱和是这样一种处理过程,它可以用来通过选择最接近允许数值来把数据元素限制至某些范围。例如,若两个不带符号的8位整数利用8位寄存器做乘法,那么所述结果可能溢出。在这种情况下,可以给定的最准确的结果是二进制11111111,因而,将使所述数目饱和,以便给出所述数值。当移位和狭窄时,可能出现类似的问题,由此一个变窄后的数目无法装入较窄的空间。在这种情况下,在一个不带符号的数的情况下,当移位步骤中放弃的任何位不是零时,那么,使所述数饱和为最大允许值。在有符号数的情况下,问题就更复杂。在这种情况下,当最高位不同于任何被放弃的位时,那么,必须使所述数饱和至最大允许正数或者最大值允许负数。
在输入的数据元素类型不同于输出的地方,也可能出现饱和,例如,有符号的数值可能被移动和变窄,输出不带符号数值。输出不同数据类型的能力可能是非常有用的。例如,在像素处理时亮度是不带符号的数值,但是,在处理所述数值过程中,把它作为有符号的数值处理可能是适当的。但是,在处理之后应该输出不带符号的数值,从有符号的数值简单地变换为不带符号的数值就会引起问题,除非提供使所述数值饱和的能力。例如,若在处理过程中,由于略微误差,所述亮度数值已经丢失,变为负数,简单地把所述负的有符号的数值作为不带符号的数值输出将是毫无意义的。因而,输出不带符号的数值之前使任何负数饱和至零的能力是非常有用的工具。
下面在表6和7给出用于不同移位指令的可能的格式的实例。如可以看到的,所述指令规定,它是前端具有V的矢量指令,然后用SH指定移位,并且在利用即时存取的移位的情况下,用R或L来表示方向右或左。于是,所述指令包括两种类型,如表0中所示,第一是目的地寄存器中的数据元素尺寸,第二是源寄存器中的元素尺寸。下一个信息包括目的地寄存器和源寄存器的命名,并且随后可以给定即时存取值,所述值表示数据移动的位数前面加一个#号。可以使用对所述指令一般格式的修改符,Q用来指示所述操作使用饱和整数算术,而R用来指示所述操作执行四舍五入。所述指令格式的更多细节在例如表0中描述。
表7表示用于通过符号变量移位的指令。所述指令和通过即时存取左移相同,但是不是提供利用所述指令的即时存取,而是利用所述指令来提供表示其中存储有符号变量的矢量的寄存器地址。在这种情况下,负数指示右手移位。因为要移动的位数存储在矢量中,所以可以为每一个数据元素存储不同的有符号变量,使得它们每一个都可以移动不同数量。所述处理更详细地如图39所示。
表6
通过即时存取移位
即时存取移位使用编码在所述指令内的即时存取值来使源矢量的所有元素移位相同的数量。变窄版本允许使数值向下转型,这可以包括饱和,而同时长版本允许任何定点数向上转型。
提供带有累计版本的移位来支持在许多数字信号处理算法中找到的有效的按比例缩放和累计。右移指令还提供四舍五入选项。四舍五入是通过实际上加入要四舍五入的数的一半执行的。因而,当右移n位时,在它移位之前在所述数值上加上2n-1。因而,在下表中若n>=1,则round(n)=2n-1,若n<=0,则等于0。
包括按位提取指令,以便允许数据的有效填充。
表7
移位有符号的变量
在本节中的移位是对受第二矢量中指定的带符号移位数量控制的元素的一个矢量执行的移位。支持带符号移位数量,允许支持按指数值的移位,它可能合理地是负数;负数控制数值将执行右移。矢量移位允许每一个元素移动不同的数量,但是可以用来通过以下方法将所有通道移位相同的数量:在执行所述移位以前将移位控制操作数复制到矢量的所有通道。带符号移位控制值是具有与要移动的操作数的最小操作数元素尺寸相同的尺寸的元素。但是,只利用每一个通道的低8位来解释位移器变量,以便确定所述移位数量。四舍五入和饱和选项也是可用的。
Figure G2004800363118D00551
因而,如可以看到的,硬件支持既能指定源数据元素尺寸又能指定结果数据元素尺寸,而且有时指定将被移动的数据的位数。这使之变得极其可适配,而且是功能强大的工具。
图36中所示的右移和变窄操作具有若干可能的用途。例如,在涉及要求某种准确度的定点数的计算中,在执行计算的同时向32位数据值的中央某处放置例如16位数,减少数据上溢或下溢风险可能是适当的。计算结束时,可以要求16位数,并因而进行如图36所示的移位和变窄将是适当的。本技术所设想的不同源和目的地寄存器不同大小的可能性在这里特别有效,并允许不同大小的数据,以便在SIMD处理过程中保持在特定通道内。
类似于在图36中图解说明的移位和变窄操作的其他用途可能是彩色像素数据的处理。SIMD处理特别适合于视频数据,因为视频数据包括全都要求对其执行同一操作的许多像素。因而,不同像素数据可以处在寄存器的不同通道中,而且单一的指令可以对全部数据执行相同的操作。视频数据往往以红、绿和蓝数据的形式到来。这需要在可以对其执行有意义的操作以前单独输出。图37表示红、绿和蓝数据的典型实例,它们存在于16位数据元素中。在所述实例中,表示蓝数据可以通过左移3位和变窄操作提取。左移3位把蓝数据发送到所述数据元素中间的右边,如点线寄存器示意地表示的(代表中间数值),所述数据左移所引起的数据值右边的3个空位填充3个零。变窄操作造成蓝数据和所述3个零被转移到结果的8位数据元素。
除移位和变窄以外,本技术也可以用来向上转型和移位,所述处理如图38所示。在这种情况下,执行所述向上转型,后跟左移。所述操作可以用来例如把32位数值转移至64位数值,所述32位数值放入所述64位数值内适当的位置。在所述实例中,表示两个32位值通过放置在通道的最高位,同时作为最低位增加几个零,而转移到64位值。
图39表示利用指示每一个数据元素应该移动的位数的值的矢量的可能性,所述值是带符号的整数,负数指示右移。使用为每一个数据元素保存一个数值的寄存器,而且每一个数据元素移动由位于它的通道中的数值所指定的数量。先前在表7中提出了用于这样的操作的指令。
图40示意地表示简单的多路复用操作。在所述多路复用操作中,多路复用器700或者选择数值a或者选择数值b在D处输出,取决于控制位c的值。c用来在a和b之间选择输出。c往往是根据判决的结果,诸如a>b。所述体系结构的实施例提供在SIMD处理过程中执行多路复用操作的能力。SIMD处理不适用于执行跳转操作,因而,可以不利用标准的if then else指令执行多路复用,而是建立掩码,所述掩码用来指示要选择两个源寄存器a和b的哪些部分。
所述掩码由各控制值构成,所述各控制值用来指示要选择两个源寄存器a和b中哪些部分。在某些实施例中,某些位置之一可能指示将选择b的某些部分,而同时在所述位置上的零指示将选择a的相应的部分。所述掩码存储在通用寄存器中,从而减少对专用寄存器的需求。
所述掩码的产生取决于要执行的多路复用操作并响应该操作而建立。例如,在上面给定的情况下,执行a和b的比较。这可以一部分一部分地执行,例如,对SIMD处理中相应的数据元素进行比较。比较b和a相应的数据元素,并把数值写入通用寄存器所述部分,就是说,根据b大于a或b等于或者小于a,用来存储所述控制值。这可以利用对全部数据元素进行大于指令VCGT的比较来并行地执行。在所述系统的实施例的指令集中提供所述指令。下面表8表示一些由所述体系结构实施例提供的宽范围比较指令。
表8
比较和选择
可以执行对产生掩码的变量的比较和测试,所述比较和测试用来提供数据平面选择和掩蔽。它还提供指令来选择最大值和最小值,包括折叠版本,所述折叠版本可以在矢量化代码结束时使用,以便求出矢量内的最大值或最小值。
Figure G2004800363118D00581
Figure G2004800363118D00591
Figure G2004800363118D00601
一旦已经建立掩码,单指令便可以用来利用包含掩码的通用寄存器,控制寄存器C来选择a或b。因而,数据处理器由C控制来执行a或b选择的多路复用操作。
图41示意地表示所述系统的一个实施例,其中源值a或b的选择是按位执行的。在这种情况下,控制寄存器730已经通过比较寄存器a 710和b 720中的数据元素利用数据填充。因而,例如八位宽的数据元素a0与具有相同尺寸的数据元素b0比较。在这种情况下,a小于或等于b,因而,八个零插入控制寄存器730相应的部分。若a大于b8,则1插入控制寄存器730的相应部分。类似的比较是并行地针对所有数据元素执行的并产生相应的控制位。产生控制矢量的比较操作对应于指令VCGT.S8 c,a,b.。于是,选择可以通过存储在源寄存器的位之间执行简单的逻辑运算非常简单地逐位执行,每一个结果位都写入目的地寄存器,在所述实例中,是寄存器730,亦即,结果覆盖所述控制值。按位选择的优点是它与数据类型和宽度无关,而且适当的话,可以比较不同大小的数据元素。
图42表示替代实施例,其中控制不是按位执行的,而是在数据元素的基础上执行的。在所示实施例中,若控制寄存器C 730中的数据元素大于或等于零,则相应的数据元素在源寄存器b 720中,它写入目的地寄存器(在这种情况下,寄存器720)。如在所述实例中,如果C是带符号的整数,则当决定选择a或b时,只需考虑C的最高位。
在其他实施例中,C的其它特性可以用来确定是选择来自寄存器a 710的数据元素还是来自寄存器b 720的数据。这样的特性的实例包括:C是奇数还是偶数,其中再一次只需要考虑所述控制值的一个位,在这种情况下,是最低位;或者C是否等于零、不等于零或大于零。
一般地说,ARM指令和事实上许多其它RISC指令都只提供带有任何指令的3个操作数。多路复用操作一般要求四个操作数来指定两个源寄存器a和b,控制寄存器C和目的地寄存器D。现有的系统的实施例利用以下事实:一般地说,继多路复用操作之后,不再需要两组源数据或控制数据中至少一组。因而,目的地寄存器选择为或者两个源寄存器之一或者控制寄存器。这只作为控制寄存器起作用,是通用寄存器,而不是特殊寄存器。在所述系统的实施例中,在所述指令集中设置3个不同指令,一个指令专用用来写回源寄存器,另一个指令用来写回其他源寄存器,而第三指令用来写入控制寄存器。每一个指令都要求刚好3个操作数,指定两个源寄存器和一个控制寄存器。这3个指令在下面表9中指定。
表9
逻辑和按位选择
Figure G2004800363118D00611
图43示意地表示与所述系统设置的3个多路复用指令对应的多路复用器装置的3个实例。图43a表示多路复用器701接线来执行所述指令按位选择VBSL。在所述实例中,与在图41和42中图解说明的实例相反,当C为假(0)时,选择A,而当C为真(1)时,选择B。在所图解说明的实施例中,目的地寄存器与控制寄存器相同,使得结果值覆盖所述控制值。若要求反向选择,亦即,当C为真时选择A,而当C为假时选择B,则所述相同的电路可以简单地交换操作数A和B使用。
图43b表示与指令BIT对应的多路复用器702,若真则按位插入,而源寄存器A中的结果同时起源和目的地寄存器的作用,而且用结果数据覆盖。在所述实例中,当C为真时,B写入A,而若C为假则存在于寄存器的数值保持不变。在所述实施例中,若要求反向选择,亦即,若C为假而不是为真时要求写入B,这不可能简单地切换寄存器,因为所述器件没有多路复用器701的对称性。
图43c表示多路复用器703,它编排成对应于图43b的反向选择,亦即,若为假则所述指令BIF按位插入。在所述实施例中,当C为假时,寄存器A中的数值写入寄存器B,而当C为真时,寄存器B中的数值保持不变。因为在图43b中,在所述系统中没有对称性。
图44示意地图解说明存储在存储器内的数据字节序列B0至B7。这些字节是按照字节不变寻址存储的,由此相同的数据字节将响应读出给定的存储器地址而返回,而不管当前的字节序方式。所述存储器还支持不对齐寻址,由此可以从存储器读出半字、字或较大的多字节数据元素,在任意存储器字节地址开始。
当从所述系统的存储器在小尾端方式下读出八个字节的数据B0至B7时,则字节B0至B7按照图44所示的顺序布置在寄存器800内。寄存器800包含四个数据元素,每一个都包括一个16位的半字。图44还表示当所述系统操作在大尾端方式下时,数据B0至B7的相同的八个字节正在读入寄存器802。
在所述实例中,数据一旦从存储器读入各自的SIMD寄存器800、802,便经受调正操作,这使数据元素尺寸加大一倍。相应地,所述结果写入两个目的地SIMD寄存器804、806。如将会从图44看出的,分别写入这些寄存器对804、806中的第一或第二的所述结果值根据所述字节序方式改变,数据已经以该字节序方式从存储器读出。相应地,进一步处理调正后的结果值的SIMD计算机程序可能必需改变来根据所述字节序方式考虑数据的不同布置。这造成不利的后果,即,导致需要产生两个不同形式的计算机程序来以数据已经存储在存储器内所述方式应付不同字节序。
图45通过设置重排序逻辑808解决所述问题。所述数据处理系统包括存储器访问逻辑810,用来从指定的存储器地址开始,从存储器读出数据B0至B7八数据字节,并且利用所述存储器的字节不变寻址特性。存储器访问逻辑810的输出相应地呈现在相同的输出通道从给定的存储器地址读出的字节,而与所述字节序方式无关。因而,在数据元素是半字的图解说明的实例中,在一种字节序方式下从特定的存储器地址恢复的字节可以是半字的最高位部分,而在另一种字节序方式下这是半字的最低位部分。
数据元素重排序逻辑808负责对通过存储器访问逻辑810从存储器检索到的数据元素进行重排序,使得装入SIMD寄存器812的数据元素的形式将与已经存储在小尾端形式中而且不重新排列装入的数据一致,而与存储系统内使用的字节序方式无关。在存储系统内正在使用小尾端方式的情况下,数据元素重排序逻辑808不会将字节重排序,并且不加改变地让其通过。但是,在数据以大尾端形式存储在存储系统内的情况下,数据元素重排序逻辑808用来反转每一个半字内字节从存储器读出的顺序,使得半字数据元素将在SIMD寄存器812内以小尾端形式出现。这样,单一SIMD计算机程序可以对传输进入SIMD寄存器的数据元素执行正确的数据处理操作,而与它们存储在存储器内的字节序方式无关。从图45将会看出,数据元素重排序逻辑808响应表示所述字节序方式正在被存储器使用的信号和表示所涉及的数据元素尺寸的信号。正在使用的字节序方式将控制是否需要求重排序,而若需要,则所述尺寸将控制所施加的重排序的属性。将会看出,当数据以小尾端方式存储在存储器内,而且SIMD寄存器是小尾端时,不需要重排序。相反,若SIMD寄存器采取大尾端形式,则当数据以大尾端形式存储在存储器内时,将不需要重排序,但是当数据以小尾端形式存储在存储器内时,则将需要重排序。
图46图解说明类似于图45的实例,除在所述实例中数据元素是32位数据字外。如将要看出的,当这些数据字以大尾端形式存储在存储器内时,由数据元素重排序逻辑808进行的重排序反转四字节数据元素由存储器访问逻辑810检索到的字节顺序,使得它们以与已经以小尾端形式存所述存储器内并不重排序地装入的数据一致的形式存入SIMD寄存器812内。
下面将指出,在这里处理器系统作为整体描述的上下文中,存储器访问逻辑810和数据元素重排序元件808可能形成以前描述的装入存储单元的一部分。当为标量寄存器内的数据采取特定的字节序而把数据读入标量寄存器时,数据元素重排序逻辑808还可以用来补偿存储系统字节序。
图47更详细地图解说明数据元素重排序逻辑808。将会看出,这是作为3层多路复用器控制通过各自控制信号Z,Y和X形成的。这3层分别负责翻转相邻字节、相邻半字和相邻数据字的位置。当标志指示大尾端方式而尺寸信号分别指示64,32或16位数据元素尺寸时,控制信号X、Y和Z从字节序信号解码,如在图47中图解说明的。下面将指出,数据元素重排序逻辑的许多其它形式都可以用来实现如在图45和46中图解说明的相同的功能结果。
用来执行存储器字节不变寻址的存储器访问指令方便地使用保存在处理器标量寄存器存储体的寄存器内的存储器地址指针。所述处理器支持改变数据元素尺寸的数据处理指令以及对SIMD寄存器内选择的数据元素执行操作的数据处理指令。
图48图解说明寄存器数据存储体900,它包括寄存器清单:各自用作表寄存器D0、D1;索引寄存器D7;以及结果寄存器D5。将会看出,表寄存器D0、D1是寄存器数据存储体900内连续编号的寄存器。结果寄存器D7和索引寄存器D5任意地相对于表寄存器并且彼此相对地定位。该图中示出与数据处理对应的指令的语法。
图49示意地图解说明查表扩展指令的操作。所述指令指定要用作表寄存器块的寄存器清单,诸如通过在清单指定第一寄存器和在清单寄存器的数目(例如,1个至4个)。所述指令还指定要用作索引寄存器D7的寄存器和要用作结果寄存器D5的寄存器。所述查表扩展指令进一步指定存储在表寄存器D0、D1内和准备选择并写入结果寄存器D5的数据元素的数据元素尺寸。在所图解说明的实例中,表寄存器D0、D1每一个都包含八个数据元素。相应地,索引值具有范围内的跨度0至15。在所述预定的范围外的索引值不会引起查表,而代之以所述结果寄存器D5内相应的位置将保持不变。如图解说明的,第四和第六索引值就是这样超范围的。其他索引值指向表寄存器D0、D1内各自的数据元素,而这些数据元素存入结果寄存器D5内相应的位置。在索引寄存器D7内索引值的位置和结果寄存器D5内数据元素位置之间存在一对一的对应关系。结果寄存器D5内标记为″U″的值指示存储在那些位置上的值在查表扩展指令操作过程中保留。因而,无论所述指令执行之前那些位置上存储什么位,所述指令执行之后那些位置内存储的仍旧不变。
图50图解说明来自图49的索引值,然后它经受SIMD减法操作,由此给索引值中的每一个都施加16的偏移量。这使以前的范围内的索引值变为超位值。先前的超位值现在移入范围内。因而,当索引寄存器D7包含现在修改后的索引值在另一个查表扩展指令下重新使用时,第四和第六索引值现在是在范围内,而结果在表寄存器D0、D1中执行查表(或在其它可以在所述第二查表扩展指令中指定的不同寄存器中执行查表),这在第二查表扩展指令执行之前也已经重新装入。因而,索引寄存器D7内的单一组索引值可以加上偏移量,然后以重新装入的表寄存器D0、D1重新使用,以便给出用于较大的表的作用。
图51进一步图解说明除所述查表扩展指令以外可以设置的查表指令。这些指令之间的差异是,当在一个查表指令中遇到超位索引值时,结果寄存器D5内与所述索引值对应的位置写入零值而不是保持不变。所述类型的行为在某些编程情况是有用的。图51的实例图解说明3个表寄存器而不是两个表寄存器。第一、第三、第四、第六和第七索引值超出范围。第二、第五和第八索引值在范围内,并且导致在所述表寄存器内对相应的数据元素进行查表。
如早期所指出的,装入和存储指令是为在SIMD寄存器文件20(见图1)和存储器之间移动数据而设置的。每一个这样的装入和存储指令都将指定起始地址,所述起始地址识别存储器内访问操作(是装入操作还是存储操作)应开始的位置。按照这些实施例的装入和存储指令,作为装入或存储指令对象的数据的数量可以针对每一个指令改变。在特定的实施例中,数据的数量通过识别数据类型″dt″(亦即,每一个数据元素的尺寸)来识别,并通过识别SIMD寄存器清单和任选地识别要访问的数目结构来识别要访问的数据元素的数目。
执行SIMD处理时,往往有这样的情况,即,针对需要的数据元素执行的访问操作往往是不对齐访问(这里亦称为字节对准访问)。换句话说,起始地址往往不对齐,而在这样的情况下,LSU 22需要分配可能要求允许访问操作执行的访问操作最大访问次数。
尽管在可能的实现方案中,LSU 22设置成假定每次访问都是不对齐的,但这意味着LSU 22在起始地址事实上与一定的多个字节对准的情况下不能改善访问操作的效率。
尽管LSU 22将能够根据起始地址确定所述起始地址是否具有预定的对齐方式,但LSU 22一般必须在实际上计算所述起始地址以前一次提交所述访问操作的访问次数。在特定的实施例中,LSU 22具有流水线体系结构,而要用来执行任何特定的访问操作的访问次数在流水线的译码阶段由LSU确定。但是,起始地址往往是在流水线后续执行阶段计算,例如,通过给基地址加入偏移量值,因此LSU 22不能等待在确定多少次访问要分配给所述访问操作以前确定所述起始地址。
按照一个实施例,在所述访问指令内提供对齐方式指定字段,这里亦称为对齐方式限定符来减轻这个问题。在特定的实施例中,对齐方式限定符可以取第一数值,指示起始地址被作为字节对准处理,亦即,不对齐。下面将指出,可以通过对齐方式指定字段的任何预定的编码来提供所述第一数值。另外,所述对齐方式限定符可以采取多个第二值中的任何一个,指示不同的预定对齐方式,所述起始地址将被看作是与所述多个第二值一致,在一个特定的实施例中,所述多个可用的第二值如下表所表明的:
  对齐方式限定符   起始地址格式   约定和有效性
  @16   ..xxxxxxx0   可以认为起始地址是2个字节的倍数适用于传送恰好2个字节的指令
  @32   ..xxxxxx00   可以认为起始地址是4个字节的倍数适用于传送恰好4个字节的指令
  @64   ..xxxxx000   可以认为起始地址是8个字节的倍数适用于传送多个8个字节的指令
  @128   ..xxxx0000   可以认为起始地址是16个字节的倍数适用于传送多个16个字节的指令
  @256   ..xxx00000   可以认为起始地址是32个字节的倍数适用于传送多个32个字节的指令
表10
现将参照图52在一个实施例中描述使用所述对齐方式指定字段信息的方式。如图52所示,LSU 22一般将通过预定宽度的数据总线连接到存储系统。所述存储系统往往由不同层次的存储器构成,存储器的第一层次往往是高速缓存,这是所述LSU通过数据总线进行通信的层次。因此,如图52所示,LSU 22设置成通过数据总线1020与存储器层次1的高速缓存1010通信,在该特定实例中,考虑具有64位宽度的数据总线。高速缓存命中时,进行针对层次1高速缓存的内容的访问,而高速缓存没有命中时,层次1高速缓存1010将通过一个或多个其他总线1030与存储系统1000的其它部件通信。
存储系统的不同部件可以是分布式的,而在图52图解说明的实例中,假设层次1高速缓存1010设置在芯片上,亦即,包含在图1的集成电路2内,而同时存储系统1000的余下部分设置在芯片外。芯片上和芯片外之间的界限由在图52中点线1035表示。但是,本专业的技术人员将会意识到,其它配置也可以使用,例如,存储系统全部可以设置在芯片外,或者可以在存储系统在芯片上的部件和存储系统在芯片外的部件之间设置某些其它界限。
LSU 22也设置成与存储器管理单元(MMU)1005通信,后者一般包括变换后援缓冲器(TLB)1015。如本专业的技术人员将会意识到的,MMU用来执行某些访问控制功能,例如,虚拟地址至物理地址的变换、访问许可的确定(亦即,是否可以进行访问)等。为了做到这些,MMU在TLB 1015内存储从存储器中的页面表获得的描述符。每一个描述符为相应的存储器页面定义与该存储器页面有关的需要的访问控制信息。
LSU 22设置成通过控制路径1025通信告知层次1高速缓存1010和MMU 1005两者的访问的某些细节。具体地说,LSU 22设置成向层次1高速缓存和MMU输出起始地址和要访问的数据块的尺寸的指示。另外,按照一个实施例,LSU 22输出由对齐方式指定字段推演出来的对齐方式信息。现将参照图53A至54B进一步描述LSU 22和/或层次1高速缓存1010和MMU使用对齐方式指定字段信息的方式。
图53A图解说明存储器地址空间,每一个水平实线指示存储器中64位对齐方式。若访问操作指定128位长数据块1040,为了便于论证,我们假定具有起始地址0x4,于是LSU 22需要确定通过64位数据总线1020单独进行的访问次数,分配给该访问操作。另外,如早先讨论的,一般需要在知道什么是起始地址以前需要作出所述决定。在所述实施例中,参照图52可以设想,当确定要分配的访问次数时,LSU 22设置成使用对齐方式指定字段的信息。
在图53A的实例中,起始地址是32位对齐的,而对齐方式指定字段可以识别出该对齐方式。在这种情况下,如从图53A可以看到的,LSU 22假定最坏的情况事态,因此假定将要求3次单独的访问,以便对数据块1040执行必要的访问操作。这与分配给不对齐访问具有相同的访问次数。
但是,若我们现在考察在图53B中图解说明的类似的实例,便可以看出,再一次将访问128位数据块1045,但是在该实例中,起始地址是64位对齐的。若对齐方式指定字段信息识别出64-位对齐方式,或者甚至识别所述数据是128位对齐,则在这种情况下,LSU 22只需要分配两次单独的访问给所述访问操作,由此在效率上提供重大的改善。但若数据总线是128位宽,则若对齐方式指定字段表明128位对齐方式,而不是64-位对齐方式,则LSU 22只需要分配单一次访问。
现在考虑在图53C中的实例,这里可以看出,需要访问96位尺寸的数据块1050,并在所述实例中,假设对齐方式指定字段识别出起始地址是32位对齐。再一次,在所述实例中,尽管LSU 22实际上没有在需要提交访问次数时算出起始地址,但是LSU 22仍旧可以假定只需要向访问操作分配两次访问。图53D图解说明第四实例,其中将访问80位数据块1055,而且其中对齐方式指定字段识别起始地址是16位对齐的。再一次,LSU 22只需要向访问操作分配两次访问。如果不是这样,而是所述对齐方式指定字段已经表明,所述访问要作为不对齐访问处理,那么,很清楚,所述LSU可能要向所述访问操作分配3次访问,如对于在图53C中图解说明的访问,实际上就是这种情况。因此,可以看出,可以通过LSU 22使用对齐方式指定字段的信息,以便在对齐方式指定字段指示起始地址某些预定的对齐方式的情况下显著改善访问的性能。
应该指出,对齐方式指定字段不能认为起始地址(这里亦称为有效地址)一定具有对齐方式,但是确实为LSU 22提供继续进行的假定。若随后起始地址证实不遵循对齐方式指定字段所指定的对齐方式,则在一个实施例中,相关的装入或存储操作设置成产生对齐方式故障。然后,对齐方式故障可以利用若干已知的技术中的任何一个处理。
如早先指出的,对齐方式信息不仅仅由LSU 22使用,而是还通过路径1025既传播到层次1高速缓存1010又传播到MMU 1005。现将参照图54A和54B描述层次1高速缓存或MMU可以使用信息的方式。如在图54A和54B图解说明的,考虑对256位数据块1060、1065的访问,在这些实例中。所述图中的水平实线表示存储器中128位对齐方式。在图54A中,假设数据块是64位对齐的,而同时在图54B中,假设数据块是128位对齐的。在两个实例中,因为数据总线1020只有64位宽,显然LSU 22需要向访问操作分配四次访问。从LSU的观点看,对齐方式指定字段指定起始地址是64位对齐还是128位对齐并不重要。
但是,层次1高速缓存1010内的各高速缓存线路各自能够存储超过256位数据和进一步可能是128位对齐的。在图54A的实例中,因为数据块不是128位对齐的,高速缓存需要假定需要两次访问高速缓存线路。但是,在图54B的实例中,层次1高速缓存1010可以根据对齐方式指定字段确定,只需要对层次1高速缓存内的单一高速缓存线路访问一次,而这可以用来提高层次1高速缓存1010内访问操作的效率。
类似地,必须由MMU进行访问以便在TLB 1015中检索适当的描述符的页面表往往存储超过256位的数据,往往可能是128位对齐的。相应地,MMU 1005可以使用通过路径1025提供的对齐方式信息来确定要访问页面表的次数。尽管在图54A的实例中,MMU 1005可能需要假定需要访问页面表一次以上,在图54B的实例中,所述MMU可以从对齐方式指定字段确定,只需要访问页面表一次,而所述信息可以用来改善MMU 1005执行访问控制功能的效率。
因此,可以看出,装入或存储指令内对齐方式指定字段的使用,如上面描述的,可以用来允许硬件优化访问操作的某些方面,若必须在可以确定起始地址以前提交访问周期数和/或高速缓存访问,这是特别有用的。该方案对指定要访问的不同数据长度装入或存储指令并在LSU和存储系统之间带有不同数据总线大小的处理器上是有用的。
有若干种数据处理操作,它们本身无法以标准SIMD格式执行,其中多个数据元素并排放置在寄存器内,然后并行地对那些数据元素执行所述操作。在图55A至55C中,图解说明某些这样的操作的实例。图55A图解说明交错操作,其中最好在第一寄存器1100内的四个数据元素A,B,C,D与第二寄存器1102内的四个数据元素E,F,G,H交错。在图55A中,所得到的交错数据元素表示在目的地寄存器1104,1106.内。这些目的地寄存器可以是不同于源寄存器1100,1102的寄存器,或者可以是与源寄存器相同的两组寄存器。如从图55A可以看到的,按照所述交错操作,来自每一个源寄存器的第一数据元素并排放置在目的地寄存器内,后跟来自两个源寄存器的第二数据元素,后跟来自两个源寄存器的第三数据元素,后跟来自两个源寄存器的第四数据元素。
图55B图解说明反向去交错操作,其中要求对放入两个源寄存器1108和1110的八个数据元素去交错。按照所述操作,第一、第三、第五和第七数据元素放入目的地寄存器1112,而同时第二、第四、第六和第八数据元素放入第二目的地寄存器1114。如同图55A实例的情况一样,下面将指出,目的地寄存器可以是不同于源寄存器的寄存器,或者可以是相同的寄存器。若在图55A和55B的实例中假设所述寄存器是64位寄存器,则在所述特定实例中,正在重叠或去交错的数据元素是16位宽的数据元素。但下面将指出,没有必要把数据元素重叠或去交错为16位宽,也没有必要把源和目的地寄存器重叠或去交错为64位寄存器。
图55C图解说明通过转置操作执行的功能。按照所述实例,来自第一源寄存器1116的两个数据元素A,B,和来自第二源寄存器1118的两个数据元素C,D被转置,转置的结果是来自第一源寄存器1116的第二数据元素与来自第二源寄存器1118的第一数据元素交换,使得第一目的地寄存器1120内提供数据元素A,C,而同时在第二目的地寄存器1122中提供数据元素B,D。再一次,所述目的地寄存器可以不同于所述源寄存器,但是所述目的地寄存器事实上往往是与所述源寄存器相同的寄存器。在一个实例中,寄存器1116,1118,1120,1122中的每一个都可以看作64位寄存器,在这种情况下,数据元素是32位宽数据元素。但是,没有必要令所述数据元素为32位宽,也没有必要令所述寄存器为64位寄存器。
另外,尽管在全部上述实例中已经假定,所述寄存器的整个内容都表示出来,但是可以设想,所讨论的所述3个操作中的任何一个都可以对相关源寄存器不同部分内的数据元素执行,因此在这种情况下,所述图只图解说明源/目的地寄存器的一部分。
如早期所指出的,标准SIMD方法涉及在寄存器内并排放置多个数据元素,然后并行地对那些数据元素执行操作。换句话说,以所述数据元素的粒度执行所述操作的并行化。尽管以这样一种方式安排所需的数据元素,例如,通过把所需的源数据元素散布在多个寄存器中,会导致操作非常有效的执行,但是以这样的方式安排所需的源数据元素,对数目巨大的操作而言是不实际的,因此以前一直无法利用SIMD方法的这种潜在的速度优点。上述交错、去交错和转置操作就是这样的操作以前一直无法利用SIMD方法速度优点的实例,但是下面将指出,还有许多其它实例,例如,某些类型的算术运算。这样一种算术运算的特定实例是需要应用于由实部和虚部构成的复数的算术运算。
按照一个实施例,通过为某些数据处理指令提供不仅识别数据元素尺寸而且进一步以单独的实体的形式识别通道尺寸(所述通道尺寸是数据元素尺寸倍数)的能力,减轻了所述问题。然后,以所述通道尺寸而不是数据元素尺寸的粒度进行所述数据处理操作的并行化,使得参与特定的数据处理操作实例化的一个以上数据元素可以在相同的源寄存器内共存。因而,用来执行数据处理操作的处理逻辑可以根据通道尺寸规定若干并行处理的通道,然后并行地对通道中的每一个执行数据处理操作,所述数据处理操作适用于并行处理的每一个这样的通道内选择的数据元素。
采用这样一种方法,就有可能以SIMD方式执行诸如以前参照图55A描述的交错操作。具体地说,图56A图解说明当按照一个实施例执行″ZIP″指令时执行的处理。在所述特定实例中,ZIP指令是32|ZIP.8指令。因而所述指令把数据元素识别为8位宽,而所述通道是32位宽。对于图56A的实例,假设ZIP指令已经指定源寄存器为64位寄存器D0 1125和D1 1130。因而,这些寄存器中间每一个都包含八个8位数据元素。每一个通道内交错操作是独立并行地施加的,结果得出如图56A下半所示数据元素的重新排列。在一个实施例中,假设对于ZIP指令,目的地寄存器与源寄存器相同,相应地这些重新排列的数据元素再一次存储在寄存器D0 1125和D1 1130内。如从图56A可以看到的,在通道1内,每一个源寄存器的第一4个数据元素已经交错,而在通道2内,每一个源寄存器的第二4个数据元素已经交错。
不难意识到,通过改变通道尺寸或数据元素尺寸可以执行不同交错形式。例如,若通道尺寸被识别为64位,亦即,造成那里只有一个单一的通道,则可以看出,目的地寄存器D0会包含每一个寄存器每一个第一4个数据元素的交错结果,而同时目的地寄存器D1会包含每一个寄存器的第二4个数据元素的交错结果。下面将指出,可以设置相应的UNZIP指令,以便执行相应的去交错操作,所述UNZIP指令也能够指定通道尺寸和数据元素尺寸。
一般,转置操作被看作相当不同于交错操作或去交错操作的操作,因此一般可以设想,只需要设置单独的指令即可执行转置操作。但是,已经实现的是,当提供具有单独定义通道尺寸和数据元素尺寸的能力的交错或去交错时,事实上当指定两个源寄存器并将通道尺寸设置为数据元素尺寸的两倍时,相同的指令将可以用来执行转置操作。这在图56B中图解说明,其中交错指令ZIP已经设置为识别数据元素的8位和通道尺寸16位(亦即数据元素尺寸的两倍)。假定相同的64位源寄存器D0 1125和D1 1130在图56A中被选择为实例,这定义四个通道的并行处理,如图56B所示。于是,如从图56B下半可以看出,交错处理实际上在每一个通道内导致转置结果的产生,这是因为每一个通道内第二源寄存器的第一数据元素与每一个通道内第一源寄存器的第二数据元素交换。
因而,按照上述实施例,同样的ZIP指令可以用来执行交错或转置操作,取决于如何定义通道尺寸和数据元素尺寸。还应注意,转置也可以利用UNZIP指令以完全相同的方式执行,因此,16|UNZIP.8指令将执行与16|ZIP.8指令完全相同的的转置操作。
图57A至57C图解说明实现这样的ZIP指令的特定实例,其中图像内的4X4像素阵列1135要围绕直线1136转置(见图57A)。每一个像素一般都由用RGB格式表示的红、绿和蓝分量构成。若为了便于论证,我们假定定义每一个像素所需的数据是16位长度,则可以看出,阵列1135中四个像素的每一条水平直线都可以放入单独的源寄存器A,B,C,D。
图57B图解说明若执行以下两个指令则会出现的不同转置:
32|ZIP.16A,B
32|ZIP.16C,D
因而每一个ZIP指令把通道宽度定义32位,而数据元素宽度定义为16位,因而,在每一个通道内第二寄存器中的第一数据元素与第一寄存器中的第二数据元素交换,如在图57B中四个对角线箭头表示的线所示。因而,在4个2X2的块1137,1141,1143和1145中的每一个内出现单独的转置。
然后,图57C图解说明作为执行以下两个指令的结果而发生的转置:
64|ZIP.32A,C
64|ZIP.32B,D
按照这些指令,通道宽度设置为64位(亦即源寄存器的整个宽度),而数据元素宽度选择为32位。因而,执行第一ZIP指令造成寄存器A 1147内第二32位宽的数据元素与寄存器C 1151内第一32位宽数据元素交换。类似地,第二ZIP指令造成寄存器B 1149内第二32位宽数据元素与寄存器D 1153内第一32位数据元素交换。因而,如在图57C中对角线箭头直线所图解说明的,其结果是左上角中的2X1像素块被右下角的2X1像素块替换。因而,如本专业的技术人员将会意识到的,四个ZIP指令的序列已经围绕对角线直线1136转置了像素的整个4X4阵列1135。图58图解说明使用交错指令的一个特定实例。在所述实例中,考虑由实部和虚部构成的复数。这可以是这样的情况,需要对一系列复数的实部执行某些计算,而同时需要对那些复数的虚部执行单独的计算。其结果是,实部可能已经安排在特定的寄存器D0 1155中,而同时虚部可能已经放入单独的寄存器D1 1160内。在某些时刻,这可能要求再联合每一个复数的实部和虚部,使得它们在寄存器内彼此相邻。如在图58中图解说明的,这可以通过使用64|ZIP.16指令实现,它把通道宽度设置为源寄存器的整个宽度,而把数据元素宽度设置为16位,亦即,实部和虚部中的每一个的宽度。如图58下半所示,执行ZIP指令的结果是每一个复数a,b,c,d的实部和虚部中的每一个在寄存器空间内再联合,目的地寄存器D0 1155包含复数a和b的实部和虚部,而目的地寄存器D1 1160包含复数c和d的实部和虚部。
它不仅是象交错和去交错指令的数据重新排列指令,它可以利用与数据元素尺寸无关地指定通道尺寸的能力。例如,图59A和59B图解说明可以用来执行两个复数乘法的两个指令的序列。具体地说,想要用复数B乘以复数A,以便产生结果复数D,如通过以下方程式图解说明的:
Dre=Are*Bre-Aim*Bim
Dim=Are*Bim+Aim*Bim
图59A表示响应以下形式的第一乘法指令执行操作:
32|MUL.16Dd,Dn,Dm[0]
源寄存器是64位寄存器,而乘法指令指定32位的通道宽度和16位的数据元素尺寸。乘法指令安排在每一个通道内,以便使第一源寄存器Dm 1165内所述通道中的第一数据元素乘以第二源寄存器Dn1170内所述通道中的数据元素中的每一个(如图59A所示),结果值存储在目的地寄存器Dd 1175内相应的位置。每一个通道内,目的地寄存器中的第一数据元素考虑代表复数部分结果的实部,而第二数据元素考虑代表复数部分结果的虚部。
在执行图59A中图解说明的指令之后,然后执行以下指令:
32|MASX.16 Dd,Dn,Dm[1]
如图59B图解说明的,所述指令是″乘法加法减法带有交换″指令。按照所述指令,源寄存器Dm的每一个通道内的第二数据元素,以图59B图解说明的方式乘以第二源寄存器Dn的相应的通道内的每一个数据元素。于是,乘法的结果或者加到已经存储在目的地寄存器Dd 1175内的相应的数据元素的值,或者从因其中减去,然后结果放置回目的地寄存器Dd 1175。把图59A和59B的操作与早先识别的通过依次使用这两个指令生成结果复数D的实部和虚部用的方程式加以比较将会意识到,所述计算可以并行地对两组复数执行,由此能够现实SIMD方法的速度好处。
根据上述实例,下面将指出,通过提供除数据元素尺寸以外具有指定通道尺寸能力的指令,潜在地从SIMD实现方案得益的操作的数目增加了,因此在实现以SIMD方式操作方面提供大大改善的灵活性。
本技术提供对矢量执行SIMD处理的能力,其中源和目的地数据元素宽度是不同的。在所述环境下特别有用操作是加法或减法,然后返回高半部SIMD操作。图60表示按照本技术返回高半部的操作的相加的实例。SIMD译码器16内的指令译码器(见图1)对指令VADH.116.I32 Dd,Qn,Qm进行译码,并执行图60中图解说明的返回高半部加法,并在下面陈述。
在图60中,位于SIMD寄存器文件20(见图1)内的两个源寄存器Qn和Qm包含32位数据元素a和b的矢量。它们加在一起形成16位数据元素Dd的矢量,也位于从所述数据和高半部形成的寄存器文件20内:
Qn=[a3 a2 a1 a0]
Qm=[b3 b2 b1 b]
输出
Dd[(a3+b3)>>16,(a2+b2)16,(a1+b1)16,(a0+b0)16].
图61示意地表示类似于图60所示的操作,但在这种情况下,译码的指令是VRADH.I16.I32 Dd,Qn,Qm,所执行的操作是带四舍五入的返回高加法。这是以非常类似于在图60中所图解说明的操作的办法执行的,但是高半部四舍五入。在所述实例中,这是通过加上具有所述数据值下半最高位位置中的1的数据值,并在加法之后和取高半部之前其他地方取1而完成的。
在该图中和在图61一样,为清晰起见,中间值用点线表示。
可以支持的其他指令(图中未示出)是利用饱和的返回高加法或减法。在这种情况下,需要时在取出高半部之前使加法或减法将饱和。
表11表示本技术支持的一些指令的实例。Size<a>返回所述数据类型的尺寸(位),而round<td>返回四舍五入常数1(size<dt>-1)。
Figure G2004800363118D00781
表11
本技术可以对不同类型的数据执行,假定获取数据的高半部是要做的明智的事情。这对定点数执行的处理特别适宜。
上述技术具有许多用途,而且可以例如用来加速SIMD FFT的实现。SIMD对执行FFT(快速富里叶变换)操作特别有用,其中需要对多个数据执行相同的操作。因而,利用SIMD处理允许并行地处理多个数据。对FFT执行的计算往往涉及把复数乘在一起。这涉及数据值的乘法,然后对乘积进行加法或减法。在SIMD处理中这些计算是并行地执行的,以便提高处理速度。
需要执行所述类型的求和的简单的实例在下面给出。
(a+ic)*(b+id)=e+if
因而,实部e等于:a*b-c*d而
虚部f等于:a*d+c*b
图62表示用于求出实部e的计算。如可以看到的,包含16位数据元素的矢量a乘以包含相同尺寸的数据元素的矢量b,而矢量c乘以矢量d。这些乘积产生两个带有32位数据元素的矢量。为了产生e,需要将这些矢量之一从另一个中减去,但是最后的结果只需要达到和原值相同的准确性。因而,要求带有16位数据元素的结果矢量。所述操作可以响应该单一的指令VSBH.16.32 Dd,Qn,Qm执行,如图中所示。因此,所述指令,返回高半部减法,在这种环境下特别有用。另外,它具有允许算术运算以加宽的数据宽度执行,只是在算术运算(减法)之后才变窄。这一般地给出比执行减法之前变窄更准确的结果。
ARM已经为它们的指令集提供指令编码,所述指令编码允许利用某些指令来指定即时存取。显然,若利用所述指令对其进行编码,则即时存取的尺寸应该受到限制。
其尺寸适合于利用指令编码的即时存取值,在其中数据元素并行处理的SIMD处理中用途有限。为了解决该问题,提供带有产生的常数的指令集,它具有与此相关联的受限尺寸的即时存取,但是具有展宽所述即时存取的能力。因而,例如字节大小的即时存取可以扩展,以便产生64位常数或即时存取。这样,所述即时存取可以使用在带有64位源寄存器的逻辑运算中,包括在SIMD处理中的多个源数据元素。
图63表示即时存取abcdefgh,就是说,它与控制数值一起被编码在指令内,这如所述表左手列所示。可以扩展二元即时存取,以便填充64位寄存器,实际的扩展根据指令和与它相联系的控制部分执行。在所示的实例中,8位即时存取abcdefgh,在64位数据值内在不同位置上复制,即时存取放置的位置取决于控制数值。另外,0和/或1可以用来填充其中不放置数值的空的空间。1和/或0的选择由控制数值确定。因而,在所述实例中,可以从具有8位即时存取和4位控制数值的指令产生用于SIMD处理的范围很宽的可能的常数。
在一个实施例中(所述表最后一行),不是在某些位复制即时存取,而是扩展即时存取的每一个位,以便产生新的64位即时存取或常数。
如可以看到的,在某些情况下所述常数在每一个通道是相同的,而在其他情况下在一些通道中出现其他不同常数。在某些实施例中(未示出),还提供反转这些常数的可能性,这也增加可以产生的常数的数目。
下面给出如图63所示可以用来产生常数的指令的格式的实例。所述指令中<value>是数据部分或即时存取,而<mode>是控制部分,它提供在所产生的常数内的<value>部分如何被扩展的指示(如图63的表中不同行所示)。
VMOV Dd,#<va lue>,<mode>
其中<value>是字节
<mode>是所列举扩展功能之一
这些修改后的指令一般地具有相关的数据值,它具有包括即时存取数据部分<value>和控制部分<mode>。如图63所示,控制部分表示即时存取如何被扩展。这可以以各种各样的方法执行,但在某些实施例中,控制部分表示将利用常数产生逻辑来执行常数的哪些扩展。
图64示意地表示常数产生逻辑的实例,它可以用来按照本技术从数据部分1210和与指令相联系的控制部分1200产生常数。在所示的实例中,控制部分1200控制所述控制产生逻辑1220,它包括门1230,以便向要产生的常数1240内每一个位输出数据值1210的一部分,或者1或0。
图65表示类似于图1所示的数据处理器(集成电路),类似的标号代表类似的特征。图65不同于图1在于,它明确地表示常数产生逻辑1220。常数产生逻辑1220可以看作与译码控制部分14、16相邻或形成其一部分。如可以看到的,指令从指令流水线12发送至译码/控制逻辑14、16。它产生控制处理器的SIMD处理逻辑18、装入存储单元22和标量处理部分4、6、8、10的操作控制信号。若在译码/控制部分14、16收到带有常数产生的指令,则常数产生逻辑用来产生用于SIMD处理的常数。可以把所述常数直接发送至SIMD寄存器数据存储体20(点线1222),或者若所述带有常数产生的指令包括SIMD数据处理部分,则把所产生的常数发送述SIMD处理逻辑(直线1224),其中对所产生的常数执行其他操作,以便产生新的数据值。
图66A和B示意地图解说明图65所示的两个不同路径。图66A表示其中所述指令产生常数发送至寄存器存储,亦即,点线1222的常数的情况。图66B表示所述带有常数产生的指令包括数据处理部分的情况。在这种情况下,数据处理操作(OP)是对所产生的常数和另一个源操作数1250执行的,以便响应该指令产生最后的数据值1260,这对应于图65的直线1224。
除图63所示的常数和它们的反演以外,对所产生的常数可以执行附加的数据处理操作,诸如OR、AND、测试、加法或减法,以便产生范围宽得多的数据值。这对应于图13B和在图65中的路径1224。表12给出按位AND(“与”)和按位OR(“或”)的实例,它们可以用来产生某些附加的数据值。
Figure G2004800363118D00811
Figure G2004800363118D00821
对所产生的常数执行其他数据处理操作的能力可以有各种各样的用途。例如,图67表示本技术的实施例可以如何用来产生位屏蔽,以便从矢量中的若干数据元素中提取某一位或一些位。在所示的实例中,从源矢量提取每一个数据元素的第四位。最初通过复制即时存取8来扩展它,然后这后跟逻辑AND指令,它使所产生的常数与源矢量进行AND运算,从每一个数据元素提取所需的位。这些操作是响应以下指令执行的:
VAND Dd,#0b00001000,0b1100
其中<mode>数值1100涉及所产生的常数,包括扩展的数据部分(见图63)。
尽管这里已经描述了特定的实施例,但下面将指出,本发明不限于此,而且在本发明的范围内可以对其进行许多修改和添加。例如,在不脱离本发明的范围的情况下,可以结合独立权项的特征对以下从属权项的特征进行不同组合。

Claims (32)

1.一种数据处理设备,它包括:
寄存器数据存储体,具有多个寄存器,可以用来保存数据元素,保存在每一个寄存器中的数据元素的数目取决于所述数据元素的数据类型;
处理器,可以用来并行地对占用所述寄存器中至少一个的不同的并行处理通道的多个数据元素执行数据处理操作;
访问逻辑,可以用来响应单一访问指令,在指定的寄存器内所述通道中选定的一个和存储器内具有结构格式的结构之间移动多个数据元素,所述结构格式具有多个分量;
所述单一访问指令包括识别与所述要移动的数据元素相联系的数据类型的数据类型信息,并且所述单一访问指令识别所述结构格式中分量的数目;以及
所述访问逻辑可以用来在所述多个数据元素移动时这样排列所述多个数据元素,使得不同分量的数据元素保存在不同的指定的寄存器中选定的通道内,而同时以所述结构的形式把所述数据元素保存在存储器中,所述访问逻辑所执行的所述排列取决于所述数据类型。
2.如权利要求1所述的数据处理设备,其中所述单一访问指令指定所述选定的通道。
3.如权利要求1或权利要求2所述的数据处理设备,其中所述访问逻辑响应一序列所述单一访问指令,在指定的寄存器中多个选定的通道和存储器中相应的多个结构之间移动数据元素。
4.如权利要求1所述的数据处理设备,其中所述结构包括一个分量,而所述指定的寄存器包括一个寄存器。
5.如权利要求1所述的数据处理设备,其中所述单一访问指令识别所述指定的寄存器,所述指定的寄存器的数目是分量数目的倍数。
6.如权利要求1所述的数据处理设备,其中所述要移动的数据元素中的每一个具有相同的数据类型。
7.如权利要求1所述的数据处理设备,其中所述指定的寄存器具有固定的彼此关系。
8.如权利要求7所述的数据处理设备,其中按照所述固定的关系,所述指定的寄存器被n个中间寄存器隔开,其中n是2m-1,而m是大于或等于零的整数。
9.如权利要求7所述的数据处理设备,其中所述指定的寄存器是所述寄存器数据存储体内一系列相邻的寄存器。
10.如权利要求1所述的数据处理设备,其中所述单一访问指令是单一装入指令,所述访问逻辑可以用来响应该单一装入指令,把所述多个数据元素从所述存储器内的所述结构装入所述指定的寄存器的选定通道,而且在所述数据元素存储在所述指定的寄存器的选定通道之前,这样排列所述数据元素,使得不同分量的数据元素存储在所述指定的寄存器的不同寄存器中。
11.如权利要求1所述的数据处理设备,其中所述单一访问指令是单一存储指令,所述访问逻辑可以用来响应该单一存储指令,把所述多个数据元素从所述指定的寄存器的选定通道存入所述存储器内的所述结构,而且在所述数据元素存储在所述结构之前,这样排列所述数据元素,以便以所述结构格式存储所述数据元素。
12.如权利要求10所述的数据处理设备,其中所述访问逻辑可以用来用一个或多个预定的值填充所述指定的寄存器的未填满部分。
13.如权利要求1所述的数据处理设备,其中所述单一访问指令识别要用来识别所述要移动的数据元素的寻址方式。
14.如权利要求13所述的数据处理设备,其中所述寻址方式识别所述存储器内所述结构的起始地址。
15.如权利要求1所述的数据处理设备,其中所述指定的寄存器具有相同的尺寸。
16.如权利要求1所述的数据处理设备,其中所述单一访问指令识别要对所述数据元素施行的转换,而所述访问逻辑可以用来在所述数据元素被移动时对所述数据元素施行所述转换。
17.一种在数据处理设备中移动寄存器和存储器之间数据元素的方法,所述数据处理设备包括:寄存器数据存储体,具有多个寄存器,可以用来保存数据元素,保存在每一个寄存器中的数据元素的数目取决于所述数据元素的数据类型;以及处理器,可以用来并行地对占用所述寄存器中至少一个的不同的并行处理通道的多个数据元素执行数据处理操作,所述方法包括以下步骤:
(a)响应单一访问指令,在指定的寄存器中所述通道中选定的一个通道和存储器内的结构之间移动多个数据元素,所述结构格式具有多个分量;
所述单一访问指令包括识别与所述要移动的数据元素相联系的数据类型的数据类型信息,并且所述单一访问指令识别所述结构格式中分量的数目,并且所述方法还包括以下步骤:
(b)在所述多个数据元素移动时这样排列所述多个数据元素,使得不同的分量的数据元素保存在不同的指定寄存器中选定的通道内,而同时以所述结构的形式把所述数据元素保存在存储器中,所执行的所述排列取决于所述数据类型。
18.如权利要求17所述的方法,其中所述单一访问指令指定所述选定的通道。
19.如权利要求17或权利要求18所述的方法,其中针对一序列所述单一访问指令重复所述步骤(a)和(b),以便在指定的寄存器中多个选定的通道和存储器内相应的多个结构之间移动数据元素。
20.如权利要求17所述的方法,其中所述结构包括一个分量,而所述指定的寄存器包括一个寄存器。
21.如权利要求17所述的方法,其中所述单一访问指令识别指定的寄存器,所述指定的寄存器的数目是分量数目的倍数。
22.如权利要求17所述的方法,其中所述要移动的数据元素中的每一个具有相同的数据类型。
23.如权利要求17所述的方法,其中所述指定的寄存器具有固定的彼此关系。
24.如权利要求23所述的方法,其中按照所述固定的关系,所述指定的寄存器被n个中间寄存器隔开,其中n是2m-1,而m是大于或等于零的整数。
25.如权利要求23所述的方法,其中所述指定的寄存器是所述寄存器数据存储体内一系列相邻的寄存器。
26.如权利要求17所述的方法,其中所述单一访问指令是单一装入指令,并且其中:
所述步骤(a)包括把所述多个数据元素从所述存储器内的所述结构装入所述指定的寄存器的选定通道的步骤;以及
所述步骤(b)包括这样的步骤:在所述数据元素存储在所述指定的寄存器的选定的通道之前,这样排列所述数据元素,使得不同分量的数据元素存储所述指定的寄存器的不同寄存器内。
27.如权利要求17所述的方法,其中所述单一访问指令是单一存储指令,并且其中:
所述步骤(a)包括把所述多个数据元素从所述指定的寄存器的选定通道存入所述存储器内的所述结构的步骤;以及
所述步骤(b)包括这样的步骤:在所述数据元素存储在所述结构之前这样排列所述数据元素,以便以所述结构格式存储所述数据元素。
28.如权利要求26所述的方法,其中还包括用一个或多个预定的值填充所述指定的寄存器的未填满的部分的步骤。
29.如权利要求17所述的方法,其中所述单一访问指令识别要用来识别要移动的数据元素的寻址方式。
30.如权利要求29所述的方法,其中所述寻址方式识别所述存储器内所述结构的起始地址。
31.如权利要求17所述的方法,其中所述指定的寄存器具有相同的尺寸。
32.如权利要求17所述的方法,其中所述单一访问指令识别要对所述数据元素施行的转换,而所述方法还包括在所述数据元素移动时对所述数据元素施行所述转换。
CN2004800363118A 2003-12-09 2004-07-01 在寄存器和存储器之间移动数据的数据处理设备和方法 Active CN1894659B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB0328538.4 2003-12-09
GB0328538A GB2409066B (en) 2003-12-09 2003-12-09 A data processing apparatus and method for moving data between registers and memory
PCT/GB2004/002830 WO2005057405A1 (en) 2003-12-09 2004-07-01 A data processing apparatus and method for moving data between registers and memory

Publications (2)

Publication Number Publication Date
CN1894659A CN1894659A (zh) 2007-01-10
CN1894659B true CN1894659B (zh) 2010-05-26

Family

ID=30129914

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2004800363118A Active CN1894659B (zh) 2003-12-09 2004-07-01 在寄存器和存储器之间移动数据的数据处理设备和方法

Country Status (11)

Country Link
US (1) US7219214B2 (zh)
EP (1) EP1692612B1 (zh)
JP (1) JP4689621B2 (zh)
KR (1) KR101099467B1 (zh)
CN (1) CN1894659B (zh)
GB (1) GB2409066B (zh)
IL (1) IL175588A (zh)
MY (1) MY137354A (zh)
RU (1) RU2006124538A (zh)
TW (1) TWI315034B (zh)
WO (1) WO2005057405A1 (zh)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2409059B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
US8776049B2 (en) * 2004-10-20 2014-07-08 Seagate Technology Llc Address aligned resource set allocation in a memory space
US8127117B2 (en) * 2006-05-10 2012-02-28 Qualcomm Incorporated Method and system to combine corresponding half word units from multiple register units within a microprocessor
US8392674B1 (en) * 2006-07-20 2013-03-05 Altera Corporation Embedded memory data transformation circuitry
US8417922B2 (en) * 2006-08-02 2013-04-09 Qualcomm Incorporated Method and system to combine multiple register units within a microprocessor
US7493475B2 (en) * 2006-11-15 2009-02-17 Stmicroelectronics, Inc. Instruction vector-mode processing in multi-lane processor by multiplex switch replicating instruction in one lane to select others along with updated operand address
GB2444744B (en) * 2006-12-12 2011-05-25 Advanced Risc Mach Ltd Apparatus and method for performing re-arrangement operations on data
US7627743B2 (en) * 2007-01-12 2009-12-01 Andes Technology Corporation Method and circuit implementation for multiple-word transfer into/from memory subsystems
US20090259672A1 (en) * 2008-04-15 2009-10-15 Qualcomm Incorporated Synchronizing timing mismatch by data deletion
US7996647B2 (en) * 2008-07-23 2011-08-09 Microchip Technology Incorporated Enhanced microprocessor or microcontroller
US8484276B2 (en) * 2009-03-18 2013-07-09 International Business Machines Corporation Processing array data on SIMD multi-core processor architectures
US20110082999A1 (en) * 2009-10-07 2011-04-07 Andes Technology Corporation Data processing engine with integrated data endianness control mechanism
US8850166B2 (en) * 2010-02-18 2014-09-30 International Business Machines Corporation Load pair disjoint facility and instruction therefore
US8549182B2 (en) * 2010-06-23 2013-10-01 International Business Machines Corporation Store/store block instructions for communicating with adapters
JP5760532B2 (ja) * 2011-03-14 2015-08-12 株式会社リコー プロセッサ装置及びその演算方法
WO2013095672A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Multi-register gather instruction
US9459867B2 (en) * 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a specified memory boundary indicated by the instruction
US9348601B2 (en) 2012-12-26 2016-05-24 Intel Corporation Coalescing adjacent gather/scatter operations
US9632781B2 (en) 2013-02-26 2017-04-25 Qualcomm Incorporated Vector register addressing and functions based on a scalar register data value
US20140281418A1 (en) * 2013-03-14 2014-09-18 Shihjong J. Kuo Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions
US9424034B2 (en) 2013-06-28 2016-08-23 Intel Corporation Multiple register memory access instructions, processors, methods, and systems
US9292298B2 (en) * 2013-07-08 2016-03-22 Arm Limited Data processing apparatus having SIMD processing circuitry
US9880845B2 (en) 2013-11-15 2018-01-30 Qualcomm Incorporated Vector processing engines (VPEs) employing format conversion circuitry in data flow paths between vector data memory and execution units to provide in-flight format-converting of input vector data to execution units for vector processing operations, and related vector processor systems and methods
JP6253514B2 (ja) * 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ
EP3001307B1 (en) * 2014-09-25 2019-11-13 Intel Corporation Bit shuffle processors, methods, systems, and instructions
CN104991758B (zh) * 2015-07-27 2017-11-21 中国科学院自动化研究所 一种位域覆盖装置及操作方法
US9875214B2 (en) 2015-07-31 2018-01-23 Arm Limited Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers
US20170192781A1 (en) * 2015-12-30 2017-07-06 Robert Valentine Systems, Apparatuses, and Methods for Strided Loads
US20170192783A1 (en) * 2015-12-30 2017-07-06 Elmoustapha Ould-Ahmed-Vall Systems, Apparatuses, and Methods for Stride Load
CN105892993B (zh) * 2016-03-28 2019-02-15 龙芯中科技术有限公司 基于提取插入操作的重组方法、装置及微处理器
US10169040B2 (en) * 2016-11-16 2019-01-01 Ceva D.S.P. Ltd. System and method for sample rate conversion
KR102584031B1 (ko) * 2017-02-23 2023-10-04 에이알엠 리미티드 데이터 처리장치에서의 요소 바이 벡터 연산
KR102235803B1 (ko) 2017-03-31 2021-04-06 삼성전자주식회사 반도체 장치
US10649771B2 (en) 2017-03-31 2020-05-12 Samsung Electronics Co., Ltd. Semiconductor device
US10915319B2 (en) 2017-05-15 2021-02-09 Google Llc Two dimensional masked shift instruction
US11269638B2 (en) * 2017-06-28 2022-03-08 Texas Instruments Incorporated Exposing valid byte lanes as vector predicates to CPU
US20190004878A1 (en) * 2017-07-01 2019-01-03 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with security, power reduction, and performace features
GB2564696B (en) * 2017-07-20 2020-02-05 Advanced Risc Mach Ltd Register-based complex number processing
US10474600B2 (en) * 2017-09-14 2019-11-12 Samsung Electronics Co., Ltd. Heterogeneous accelerator for highly efficient learning systems
CN109614362A (zh) * 2019-03-07 2019-04-12 深兰人工智能芯片研究院(江苏)有限公司 一种数据交换方法及电子设备
US11269631B2 (en) * 2020-07-29 2022-03-08 Ghost Locomotion Inc. Extending fused multiply-add instructions
US11928472B2 (en) 2020-09-26 2024-03-12 Intel Corporation Branch prefetch mechanisms for mitigating frontend branch resteers
US11442729B2 (en) 2020-10-26 2022-09-13 Google Llc Bit-packed array processing using SIMD
US20220261509A1 (en) * 2021-02-13 2022-08-18 Intel Corporation Region-based deterministic memory safety
CN113918883B (zh) * 2021-11-03 2022-05-27 海光信息技术股份有限公司 数据处理方法、装置以及设备和计算机可读存储介质
CN115665335B (zh) * 2022-11-14 2023-03-21 合肥奔图智造有限公司 图像处理方法、装置、图像形成设备及介质
CN115880134B (zh) * 2023-01-31 2024-04-16 南京砺算科技有限公司 采用矢量寄存器的常量数据处理方法及图形处理器、介质
CN115826910B (zh) * 2023-02-07 2023-05-02 成都申威科技有限责任公司 一种向量定点的alu处理系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1007462B (zh) * 1985-04-01 1990-04-04 坦德姆计算机有限公司 多数据通道的中央处理器(cpu)结构
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
US6247116B1 (en) * 1998-04-30 2001-06-12 Intel Corporation Conversion from packed floating point data to packed 16-bit integer data in different architectural registers

Family Cites Families (70)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5615535B2 (zh) * 1974-12-03 1981-04-10
JPS59184944A (ja) * 1983-04-06 1984-10-20 Hitachi Ltd 丸め演算方式
US4876660A (en) * 1987-03-20 1989-10-24 Bipolar Integrated Technology, Inc. Fixed-point multiplier-accumulator architecture
JPH0778735B2 (ja) * 1988-12-05 1995-08-23 松下電器産業株式会社 キャッシュ装置と命令読出し装置
CA2045773A1 (en) * 1990-06-29 1991-12-30 Compaq Computer Corporation Byte-compare operation for high-performance processor
JPH05233281A (ja) * 1992-02-21 1993-09-10 Toshiba Corp 電子計算機
US5408670A (en) * 1992-12-18 1995-04-18 Xerox Corporation Performing arithmetic in parallel on composite operands with packed multi-bit components
US5481743A (en) * 1993-09-30 1996-01-02 Apple Computer, Inc. Minimal instruction set computer architecture and multiple instruction issue method
US5881302A (en) * 1994-05-31 1999-03-09 Nec Corporation Vector processing unit with reconfigurable data buffer
GB9412434D0 (en) 1994-06-21 1994-08-10 Inmos Ltd Computer instruction compression
US6009508A (en) * 1994-06-21 1999-12-28 Sgs-Thomson Microelectronics Limited System and method for addressing plurality of data values with a single address in a multi-value store on FIFO basis
GB9412487D0 (en) * 1994-06-22 1994-08-10 Inmos Ltd A computer system for executing branch instructions
US5761103A (en) * 1995-03-08 1998-06-02 Texas Instruments Incorporated Left and right justification of single precision mantissa in a double precision rounding unit
GB9509988D0 (en) * 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Matrix transposition
GB9509983D0 (en) * 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Replication of data
GB9509989D0 (en) * 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Manipulation of data
GB9509987D0 (en) * 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Manipulation of data
GB9513515D0 (en) * 1995-07-03 1995-09-06 Sgs Thomson Microelectronics Expansion of data
GB9514684D0 (en) * 1995-07-18 1995-09-13 Sgs Thomson Microelectronics An arithmetic unit
GB9514695D0 (en) * 1995-07-18 1995-09-13 Sgs Thomson Microelectronics Combining data values
JP3526976B2 (ja) * 1995-08-03 2004-05-17 株式会社日立製作所 プロセッサおよびデータ処理装置
US6295599B1 (en) * 1995-08-16 2001-09-25 Microunity Systems Engineering System and method for providing a wide operand architecture
US5907865A (en) * 1995-08-28 1999-05-25 Motorola, Inc. Method and data processing system for dynamically accessing both big-endian and little-endian storage schemes
CN1153129C (zh) * 1995-09-01 2004-06-09 菲利浦电子北美公司 用于处理器定制操作的设备
KR0177985B1 (ko) * 1995-11-17 1999-05-15 김광호 프로세서의 벡터 데이터 조정 장치
US6088783A (en) * 1996-02-16 2000-07-11 Morton; Steven G DPS having a plurality of like processors controlled in parallel by an instruction word, and a control processor also controlled by the instruction word
US5937178A (en) * 1996-02-13 1999-08-10 National Semiconductor Corporation Register file for registers with multiple addressable sizes using read-modify-write for register file update
US5808875A (en) * 1996-03-29 1998-09-15 Intel Corporation Integrated circuit solder-rack interconnect module
US6058465A (en) * 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
US5838984A (en) * 1996-08-19 1998-11-17 Samsung Electronics Co., Ltd. Single-instruction-multiple-data processing using multiple banks of vector registers
TW364976B (en) * 1996-09-23 1999-07-21 Arm Corp Input operand control in data processing systems
US5996066A (en) * 1996-10-10 1999-11-30 Sun Microsystems, Inc. Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions
US5909572A (en) * 1996-12-02 1999-06-01 Compaq Computer Corp. System and method for conditionally moving an operand from a source register to a destination register
US6173366B1 (en) * 1996-12-02 2001-01-09 Compaq Computer Corp. Load and store instructions which perform unpacking and packing of data bits in separate vector and integer cache storage
US5893145A (en) * 1996-12-02 1999-04-06 Compaq Computer Corp. System and method for routing operands within partitions of a source register to partitions within a destination register
US5898896A (en) * 1997-04-10 1999-04-27 International Business Machines Corporation Method and apparatus for data ordering of I/O transfers in Bi-modal Endian PowerPC systems
US5973705A (en) * 1997-04-24 1999-10-26 International Business Machines Corporation Geometry pipeline implemented on a SIMD machine
US6047304A (en) * 1997-07-29 2000-04-04 Nortel Networks Corporation Method and apparatus for performing lane arithmetic to perform network processing
US6209017B1 (en) * 1997-08-30 2001-03-27 Lg Electronics Inc. High speed digital signal processor
GB2329810B (en) * 1997-09-29 2002-02-27 Science Res Foundation Generation and use of compressed image data
US5933650A (en) * 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US5864703A (en) * 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
US6223198B1 (en) * 1998-08-14 2001-04-24 Advanced Micro Devices, Inc. Method and apparatus for multi-function arithmetic
US6269384B1 (en) * 1998-03-27 2001-07-31 Advanced Micro Devices, Inc. Method and apparatus for rounding and normalizing results within a multiplier
US6038583A (en) * 1997-10-23 2000-03-14 Advanced Micro Devices, Inc. Method and apparatus for simultaneously multiplying two or more independent pairs of operands and calculating a rounded products
US6144980A (en) * 1998-01-28 2000-11-07 Advanced Micro Devices, Inc. Method and apparatus for performing multiple types of multiplication including signed and unsigned multiplication
US6085213A (en) * 1997-10-23 2000-07-04 Advanced Micro Devices, Inc. Method and apparatus for simultaneously multiplying two or more independent pairs of operands and summing the products
US6223277B1 (en) * 1997-11-21 2001-04-24 Texas Instruments Incorporated Data processing circuit with packed data structure capability
US6223320B1 (en) * 1998-02-10 2001-04-24 International Business Machines Corporation Efficient CRC generation utilizing parallel table lookup operations
US6173393B1 (en) * 1998-03-31 2001-01-09 Intel Corporation System for writing select non-contiguous bytes of data with single instruction having operand identifying byte mask corresponding to respective blocks of packed data
US6334176B1 (en) * 1998-04-17 2001-12-25 Motorola, Inc. Method and apparatus for generating an alignment control vector
JP2000020486A (ja) * 1998-06-29 2000-01-21 Ricoh Co Ltd Simd型演算器
US6839728B2 (en) * 1998-10-09 2005-01-04 Pts Corporation Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture
US6292888B1 (en) * 1999-01-27 2001-09-18 Clearwater Networks, Inc. Register transfer unit for electronic processor
GB2352065B (en) * 1999-07-14 2004-03-03 Element 14 Ltd A memory access system
US6408345B1 (en) * 1999-07-15 2002-06-18 Texas Instruments Incorporated Superscalar memory transfer controller in multilevel memory organization
GB2352536A (en) 1999-07-21 2001-01-31 Element 14 Ltd Conditional instruction execution
US6546480B1 (en) * 1999-10-01 2003-04-08 Hitachi, Ltd. Instructions for arithmetic operations on vectored data
US6629115B1 (en) * 1999-10-01 2003-09-30 Hitachi, Ltd. Method and apparatus for manipulating vectored data
US6748521B1 (en) * 2000-02-18 2004-06-08 Texas Instruments Incorporated Microprocessor with instruction for saturating and packing data
EP1261912A2 (en) * 2000-03-08 2002-12-04 Sun Microsystems, Inc. Processing architecture having sub-word shuffling and opcode modification
JP2002073325A (ja) * 2000-08-25 2002-03-12 Sanyo Electric Co Ltd データ処理装置及び方法
US7155601B2 (en) * 2001-02-14 2006-12-26 Intel Corporation Multi-element operand sub-portion shuffle instruction execution
US7127593B2 (en) * 2001-06-11 2006-10-24 Broadcom Corporation Conditional execution with multiple destination stores
GB2417111B (en) * 2002-04-22 2006-08-16 Micron Technology Inc Providing a register file memory with local addressing in a SIMD parallel processor
GB2402759B (en) * 2003-06-12 2005-12-21 Advanced Risc Mach Ltd Data processing apparatus and method for transferring data values between a register file and a memory
US7315932B2 (en) * 2003-09-08 2008-01-01 Moyer William C Data processing system having instruction specifiers for SIMD register operands and method thereof
GB2409059B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
GB2409060B (en) * 2003-12-09 2006-08-09 Advanced Risc Mach Ltd Moving data between registers of different register data stores
GB2409065B (en) * 2003-12-09 2006-10-25 Advanced Risc Mach Ltd Multiplexing operations in SIMD processing

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1007462B (zh) * 1985-04-01 1990-04-04 坦德姆计算机有限公司 多数据通道的中央处理器(cpu)结构
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
US6247116B1 (en) * 1998-04-30 2001-06-12 Intel Corporation Conversion from packed floating point data to packed 16-bit integer data in different architectural registers

Also Published As

Publication number Publication date
TWI315034B (en) 2009-09-21
US20050125640A1 (en) 2005-06-09
KR20070001902A (ko) 2007-01-04
JP2007535020A (ja) 2007-11-29
GB2409066A (en) 2005-06-15
WO2005057405A1 (en) 2005-06-23
EP1692612A1 (en) 2006-08-23
GB0328538D0 (en) 2004-01-14
JP4689621B2 (ja) 2011-05-25
IL175588A (en) 2010-12-30
MY137354A (en) 2009-01-30
GB2409066B (en) 2006-09-27
RU2006124538A (ru) 2008-01-20
IL175588A0 (en) 2006-09-05
CN1894659A (zh) 2007-01-10
US7219214B2 (en) 2007-05-15
WO2005057405A9 (en) 2006-06-08
EP1692612B1 (en) 2012-12-12
TW200532452A (en) 2005-10-01
KR101099467B1 (ko) 2011-12-28

Similar Documents

Publication Publication Date Title
CN1894659B (zh) 在寄存器和存储器之间移动数据的数据处理设备和方法
CN1890630B (zh) 在寄存器和存储器之间移动数据的数据处理设备和方法
CN1914592B (zh) 执行具有单元大小控制的紧缩数据操作的方法和设备
CN106681693B (zh) 使用写掩码将两个源操作数混合进单个目的地的处理器
US7689811B2 (en) Method and apparatus for constant generation in SIMD processing
JP5366917B2 (ja) データ要素に対するデータ処理操作を並列に実行するためのデータ処理装置及び方法
US7761693B2 (en) Data processing apparatus and method for performing arithmetic operations in SIMD data processing
JP4588413B2 (ja) Simd処理における多重化操作
CN100410919C (zh) 处理器
CN104094182B (zh) 掩码置换指令的装置和方法
US20050125647A1 (en) Endianess compensation within a SIMD data processing system
US6958718B2 (en) Table lookup operation within a data processing system
CN104137053B (zh) 用于响应于单个指令来执行蝴蝶横向和交叉加法或减法的系统、装置和方法
CN108595348A (zh) 无局部性提示的向量存储器访问处理器、方法、系统和指令
CN107111489A (zh) 莫顿坐标调整处理器、方法、系统和指令
CN109992302A (zh) 远程原子操作的空间和时间上的归并
JP2005174298A (ja) “ベクトル×スカラ”演算
US20050125624A1 (en) Data processing apparatus and method for moving data between registers and memory
US20050125631A1 (en) Data element size control within parallel lanes of processing
CN108509219A (zh) 去交织跨距数据元素处理器、方法、系统和指令
CN104025025B (zh) 用于对打包数据元素执行增量编码的系统、装置和方法
CN108369515A (zh) 用于跨步加载的系统、设备和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant