CN1890630A - 在寄存器和存储器之间移动数据的数据处理设备和方法 - Google Patents
在寄存器和存储器之间移动数据的数据处理设备和方法 Download PDFInfo
- Publication number
- CN1890630A CN1890630A CNA2004800363090A CN200480036309A CN1890630A CN 1890630 A CN1890630 A CN 1890630A CN A2004800363090 A CNA2004800363090 A CN A2004800363090A CN 200480036309 A CN200480036309 A CN 200480036309A CN 1890630 A CN1890630 A CN 1890630A
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 117
- 238000012545 processing Methods 0.000 title abstract description 122
- 230000004044 response Effects 0.000 claims abstract description 12
- 238000012856 packing Methods 0.000 claims description 80
- 238000003860 storage Methods 0.000 claims description 59
- 238000006243 chemical reaction Methods 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 9
- 238000011112 process operation Methods 0.000 claims description 6
- 230000007812 deficiency Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 149
- 239000013598 vector Substances 0.000 description 53
- 230000008569 process Effects 0.000 description 37
- 238000006073 displacement reaction Methods 0.000 description 29
- 229920006395 saturated elastomer Polymers 0.000 description 21
- 230000008901 benefit Effects 0.000 description 19
- 230000006870 function Effects 0.000 description 13
- 239000011159 matrix material Substances 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 10
- 230000017105 transposition Effects 0.000 description 10
- 230000008859 change Effects 0.000 description 9
- 230000014509 gene expression Effects 0.000 description 9
- 230000000737 periodic effect Effects 0.000 description 7
- 235000019580 granularity Nutrition 0.000 description 5
- 101100313728 Vitis vinifera VINST1 gene Proteins 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 230000007704 transition Effects 0.000 description 4
- 101100317049 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) VLD1 gene Proteins 0.000 description 3
- 230000033228 biological regulation Effects 0.000 description 3
- 238000000605 extraction Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 239000003550 marker Substances 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000008707 rearrangement Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000003446 memory effect Effects 0.000 description 1
- 239000013642 negative control Substances 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种数据处理设备和方法是为在寄存器和存储器之间移动数据而设置的。数据处理设备包括具有多个可以用来存入数据元素的寄存器的寄存器数据存储体。处理器可以用来并行地对在至少一个寄存器中访问的多个数据元素执行数据处理操作。访问逻辑可以用来响应单一访问指令,在指定的寄存器和连续的存储器块之间移动多个数据元素,数据元素以具有结构格式的结构阵列的形式存储在连续的存储器块中,所述结构格式具有多个分量。单一访问指令识别结构格式中分量的数目,而访问逻辑还可以用来在多个数据元素被移动时重新排列所述多个数据元素,使得每一个指定的寄存器存储一个分量的数据元素,而同时所述数据元素以结构阵列的形式存储在存储器中。
Description
发明领域
本发明涉及用于在寄存器和存储器之间移动数据的数据处理设备和方法。
发明背景
当需要对若干个单独的数据元素执行特定的数据处理操作时,一种加速执行这样一种操作的已知方法是使用SIMD(单指令多数据)方法。按照SIMD方法,所述多个数据元素并排地放在寄存器内,然后并行地对那些数据元素执行操作。
但是,SIMD方法实际性能上的优点只有在这些数据元素可以无须重大的***开销即能以适当的顺序排列在寄存器内才能充分现实。一般,执行SIMD操作之前,这些相关的数据元素需要从存储器装入这些寄存器,而情况往往是,所述SIMD操作所需要的数据元素并非连续地定位在存储器的地址空间内。作为实例,存储器中的数据可能代表像素值的红、绿和蓝分量(亦即,RGB数据),而相应地当数据从连续的存储器块装入寄存器时,寄存器内的这些数据元素也将代表对每一个像素重复的红、绿和蓝分量。可能希望对检索到的全部红分量执行特定的操作,于是相应地出现了如何将红分量安排成能够对其施行SIMD操作的问题。
按照一种已知的技术,来自连续的存储器块的数据(包括要进行SIMD处理的所需的数据元素)从存储器装入一个或多个寄存器。如果认为寄存器内的每一个数据元素占用不同处理通道,则处理器可以设置成以不同方法对不同通道执行操作,以便对特定的数据元素执行所需的SIMD处理。作为另一方案,可以为特定的操作开发某些定制的指令。尽管这些技术的使用可以避免在执行SIMD操作以前对数据进行重排序的必要性,但是这些方法都相对比较复杂,而且要为不同操作定义的不同指令和/或处理,使所需代码尺寸明显增大。因此,这样的方法并非通用的解决方案。
另外,可以看出,这样的方法在浪费资源带宽方面造成巨大的***开销。例如,若特定的寄存器具有存入八个数据元素的能力,但是该寄存器内的一些位置包含不准备经受SIMD操作的数据元素,则不可能从使用SIMD操作得到最大的潜在益处。作为具体实例,若在特定的寄存器内只有四个数据元素要经受SIMD操作,则只利用了寄存器支持的一半的潜在带宽。
一个替换的先有技术方法是用与上述相同的方法把所需的数据从存储器装入一个或多个寄存器,但是这时为了对数据进行重排序,使得要经受SIMD操作的数据元素并排放置在一个或多个寄存器内,要使用附加的指令来指定某些重新排列的操作。尽管这使后来的SIMD操作最大限度地使用寄存器的可用带宽成为可能,但为了根据需要将数据重排序,要求在执行SIMD操作之前执行一个或多个其他指令,由此对性能造成明显的冲击。这可能对从使用SIMD操作现实的潜在益处造成明显的消极影响。
在矢量处理的不同技术领域中,已知提供装入(load)指令,它可以通过指定起始地址和步距从存储器中不连续的地址收集各个数据元素。这例如,可以允许从特定的地址起每隔二个数据元素装入寄存器。也可以设置类似的存储指令。
在矢量处理***中,这样一种方法可以是有利的,因为这样的***一般地并不在存储***中使用高速缓存,而且一般不寻求访问各连续的存储器块。因此,在实现这样的跨越功能所需的装入/存储硬件中增大复杂性被认为是值得的。
但是,可以用来对并排放置在特定的寄存器内的数据元素执行早先描述的SIMD操作的数据处理***通常希望访问各连续的存储器块,并且相应地不希望为了支持这样的跨越功能而增大基本的装入/存储硬件的复杂性。作为实例,考虑早先的实例,其中这些数据代表像素的红、绿和蓝分量,这时它可能要求针对特定的像素顺序访问这些红、绿和蓝数据元素,而这些数据元素一般被存储在连续的存储器块内。尽管增大装入/存储单元的复杂性,以便支持跨越功能,使把红分量引入一个特定的寄存器,把蓝分量引入另一个寄存器而把绿分量引入另一个寄存器成为可能,但这会要求为每个分量发出单独的指令,还会明显增大检索所述数据所需的存储器访问次数。具体地说,可以看出,在所述实例中每个数据元素都是从不连续的存储器位置访问的,而且因而潜在地要为每个数据元素单独进行访问,而事实上,所需的数据确实占用连续的存储器块。因此,下面将指出,使用这样一种方法不只增大所述装入/存储硬件的复杂性,而且对访问数据的速度发生非常重大的有害影响。
因此,为了支持有效的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中描述。大部分指令使用至少一个数据类型限定符来确定精确的操作。但是,操作不一定支持所有数据类型。所述数据类型用作所述字段的后缀,指示数据元素尺寸和特性。
数据类型限定符 | 说明 |
.<size> | <size>位的任何元素 |
.I<size> | <size>位的带符号或不带符号的模整数 |
.F<size> | <size>位浮点数 |
.P<size> | 小于<size>的{0,1}度多项式 |
.S<size> | <size>位的带符号的整数 |
.U<size> | <size>位的不带符号的整数 |
表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分量的数据元素被路由到寄存器D0220,属于Y的数据元素被路由到寄存器D1225,而属于分量Z的元素被路由到寄存器D2230。
以装入操作的一部分的形式从结构的阵列装入并把信息分解到各单独的寄存器的能力可以用来允许数据立即就绪用于有效的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>
其中
<st>结构格式把存储器中的数据元素看作具有<st>个分量的结构的阵列。所述信息用来使数据元素在它们在存储器和SIMD寄存器存储体之间移动时进行交错和去交错,以便允许进行有效的SIMD处理。 |
<dt>数据类型这确定要装入的数据元素尺寸 |
<a>对齐方式指定字段(任选的) |
<reglist>SIMD寄存器清单这确定SIMD寄存器的将写入其中或由其中读出状态。对于装入,这就是SIMD寄存器文件受指令影响的部分。把寄存器清单看作尺寸为<dt>的数据元素的集合,拆分为<st>个长度相等的量。应当指出,寄存器清单内的字节数不一定与所访问的存储器的字节数相同。见<n>选项和图20A至20C。 |
<n>结构个数(任选的)这定义要装入或存储的结构的数目。这允许寄存器清单只是部分 |
地以存储器数据装入,而剩余部分被清零。当不提供时,取默认值,这意味着所述寄存器清单和存储器访问尺寸是相同的。默认<n>:=元素<dt>(<reglist>)/<st> |
<addr>用于所述访问的寻址方式 |
按照实施例,寻址方式可以采取各种各样的形式,具体地说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,而相应地s t值为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,D3300的寄存器。如图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)状态的集合,标识寄存器D0 270和D1 280。然后,图20B图解说明这些寄存器如何被分为dt大小的(亦即,16位)数据元素的st(亦即,2)个矢量。
与图19A至19C的实例形成对照,所述指令指定″n″个参数,标识要访问的结构的数目,在所述实例中,n是1。相应地,对于所述装入指令,需要在有效的地址开始从存储器读出n×st(亦即,1×2)个数据元素,然后从第一矢量的最低的索引元素开始将其以循环分配方式分布在各矢量中。所述处理在图20C中图解说明,并产生写入寄存器D0最低的16位的第一分量314的数据元素xo,而同时第二分量的数据元素yo写入寄存器D1最低的16位。按照所述实施例,一旦全部数据元素都已经装入,所述寄存器状态没有写入的任何部分都设置为零。应该指出,对于等效的存储指令,n×st个数据元素以与装入相反的方式存储。
图21A至21C图解说明另一个特定实例,其中所述指令用的语法扩展到允许指定两个数据类型,就是说,要访问的数据元素用的数据类型和要装入这些寄存器或存储到存储器的结果数据元素用的数据类型。相应地图21A至21C图解说明所述指令所执行的操作
VLD 2.32.S 16{D0,D1,D2,D 3},[r1]
如图21A所示,收集所述寄存器清单状态,标识寄存器D0270,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的范围内标识这些通道。
对于有兴趣的读者,下表标识可以在特定的实施例中提供的各种不同类型的装入和存储指令:
助记符 | 数据类型 | 操作数格式 | 说明 |
VLD1 | .8.16.32.64 | <list>,<addr><list>:={Dn}|{Dn,Dn+1}|{Dn,Dn+1,Dn+2}|{Dn,Dn+1,Dn+2,Dn+3} | 装入多个元素 |
VLD1 | .8.16.32 | <list>,#UIMM,<addr><list>:={Dn}:={Dn,Dn+1} | 装入多个元素和零UIMM_1reg=(1)(a-1)UIMM_2reg=(a+1)(b-1)其中a=(64/size<dt>)b=(128/size<dt>) |
VLD1 | .8.16.32 | Dd[x],<addr> | 装入单个元素 |
VST1 | .8.16.32.64 | <list>,<addr><list>:={Dn}|{Dn,Dn+1}|{Dn,Dn+1,Dn+2}|{Dn,Dn+1,Dn+2,Dn+3} | 存储多个元素 |
VST1 | .8.16.32 | <list>,#UIMM,<addr><list>:={Dn}{Dn,Dn+1} | 存储多个元素UIMM_1reg=(2)...(a-1)UIMM_2reg=(a+1)..(b-1)其中a=(64/size<dt>)b=(128/size<dt>) |
VST1 | .8.16.32 | Dd[x],<addr> | 存储单个元素 |
VST1 | |||
实例 | |||
VLD1.16VLD1.8VLD1.8VLD1.16VST1.32VST1.32VST1.8 | D0,[R1]{D0,D1},[R2]!Q2,#10,[R2],R7D20[3],[R8],R1{D8,D9,D10,D11},[R0]!Q7,#3,[R10]D30[0],[R0],R14 |
表2
助记符 | 数据类型 | 操作数格式 | 说明 |
VLD2 | .8.16.32 | <list>,<addr><list>:={Dn,Dn+1}|{Dn,Dn+2}|{Dn,Dn+1,Dn+2,Dn+s} | 装入多个2元素结构 |
VLD2 | .8.16.32 | <list>,#1,<addr><list>:={Dn,Dn+1}|{Dn,Dn+2} | 装入单个2元素结构和零 |
VLD2 | .8.16.32 | <list>,<addr><list>:={D[x],Dn+1[x]}|{Dn[X],Dn+2[X]) | 装入单个2元素结构其中list{Dn[x],Dn+2[x]}不可用当dt=8时 |
VST2 | .8.16.32 | <list>,<addr><list>:={Dn,Dn+1}|{Dn,Dn+2}|{Dn,Dn+1,Dn+2,Dn+3} | 存储多个2元素结构 |
VST2 | .8.16 | <list>,<addr> | 存储单个2元素结构其中 |
.32 | <list>:={Dn[x],Dn+1[x]}|{Dn[x],Dn+2[x]} | list{Dn[x],Dn+2[x]不可用当dt=8时 | |
实例 | |||
VLD2.16VLD2.32VLD2.8VLD2.16VST2.8VST2.32 | {D0,D1},[R1]{D2,D3,D4,D5},[R3]{D0,D1},#1,[R1],R7{D2[1],D4[1]},[R6]{D20,D21},[R0]{D20[0],D21[0]},[R5],R6 | ! |
表3
助记符 | 数据类型 | 操作数格式 | 说明 |
VLD3 | .8.16.32 | <list>,<addr><list>:={Dn,Dn+1,Dn+2}|{Dn,Dn+2,Dn+4} | 装入多个3元素结构 |
VLD3 | .8.16.32 | <list>,#1,<addr><list>:={Dn,Dn+1,Dn+2}|{Dn,Dn+2,Dn+4} | 装入单个3元素结构和零 |
VLD3 | .8.16.32 | <list>,<addr><list>:={Dn[X],Dn+1[X], Dn+2[X]}|{Dn[X],Dn+2[X],Dn+4[X]} | 装入单个3元素结构其中当dt=8时list{Dn[x],Dn+2[x],Dn+4[X]}不可用 |
VST3 | .8.16.32 | <list>,<addr><list>:={Dn,Dn+1,Dn+2}{Dn,Dn+2,Dn+4} | 存储多个3元素结构 |
VST3 | .8.16.32 | <list>,<addr><list>:={Dn[X],Dn+1[x],Dn+2[X]} | 存储单个3元素结构其中当dt=8时 list{Dn[x],Dn+2[x],Dn+4[x]}不可用 |
|{Dn[x],Dn+2[x],Dn+4[X]} | |||
实例 | |||
VLD3.8VLD3.16VLD3.16VST3.32VST3.8 | {D0,D1,D2},[R1]!{D2,D3,D4},#1,[R3],R4{D2[1],D3[1],D41]},[R3],R4{D20,D22,D24},[R7]{D0[0],D1[0],D2t0]},[R103,R14 |
表4
助记符 | 数据类型 | 操作数格式 | 说明 |
VLD4 | .8.16.32 | <list>,<addr><list>:={Dn,Dn+1,Dn+2,Dn+3}|{Dn,Dn+2,Dn+4,Dn+6} | 装入多个4元素结构 |
VLD4 | .8.16.32 | <list>,#1,<addr><list>:={Dn,Dn+1,Dn+2,Dn+3}|{Dn,Dn+2,Dn+4,Dn+6} | 装入单个4元素结构和零 |
VLD4用 | .8.16.32 | <list>,<addr><list>:={Dn[x],Dn+1[x],Dn+2[x],Dn+3[x]}|{Dn[X],Dn+2[X],Dn+4[X],Dn+6[X]} | 装入单个4元素结构其中当dt=8时list{Dn[x],Dn+2[x],Dn+4[x],Dn+6[x]}不可 |
VST4 | .8.16.32 | <list>,<addr><list>:={Dn,Dn+1,Dn+2,Dn+3}{Dn,Dn+2,Dn+4,Dn+6} | 存储多个4元素结构 |
VST4 | .8.16.32 | <list>,<addr>存<list>:={Dn[X],Dn+1[X],Dn+2[x],Dn+3[x]} | 存储单个4元素结构其中当dt=8时list{Dn[x],Dn+2[x],Dn+4[x],Dn+6[X]}不可用 |
|{Dn[X],Dn+2[X],Dn+4[X],Dn+6[X]} | |||
实例 | |||
VLD4.8VLD4.16VLD4.16VST4.32VST4.8 | {D0,D1,D2,D3},[R1]!{D2,D3,D4,D5},#1,[R3]{D2[1],D4[1],D6[1],D8[1]},[R3],R4{D20,D22,D24,D26},[R7]{D20[5],D21[5],D22[5],D23[5]},[R1],R4 |
表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]},[r3]
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.S16Dd,Dm),包含四个16位数据元素的64位寄存器Dm被折叠并且被存储在包含两个32位结果数据元素的64位寄存器Dd。
图30b图解说明SIMD折叠指令的操作,由此来自不同寄存器的用′n′位代表的源数据元素对具有对其执行的操作,以便产生也用′n′位代表的结果数据元素。概括最大值和最小值指令的以下实例支持这样一种操作:
助记符 数据类型 操作数格式 说明
VSUM .I8 Dd,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.I16Dd,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]。这是通过S IMD译码器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]。这是通过S IMD译码器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。
包括按位提取指令,以便允许数据的有效填充。
助记符 | 数据类型 | 操作数格式 | 说明 |
VSHR | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,#UIMMDd,Dn,#UIMM | 通过即时存取的右移Vd[i]:=Vn[i]>>UIMM |
S8.S16.S16.S32.S32.S64.U8.U16.U16.U32.U32.U64 | Dd,Qn,#UIMM | 通过即时存取和变窄的右移Vd[i]:=Vn[i] UIMM | |
VRSHR | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,#UIMMQd,Qn,#UIMM | 通过带四舍五入的即时存取的右移Vd[i]:=(Vn[i]+round(UIMM))>>UIMM |
VQSHR | .S8.S16.S16.S32.S32.S64.U8.U16.U16.U32.U32.U64.S8.S16.S16.S32.S32.S64.U8.U16.U16.U32.U32.U64.U8.S16.U16.S32.U32.S64 | Dd,Qn,#UIMMDd,Qn,#UIMM | 通过带四舍五入的即时存取和变窄的右移Vd[i]:=(Vn[i]+round(UIMM))>>UIMM通过即时存取和变窄的饱和右移Vd[i]:=sat<td>(Vn[i]>>UIMM) |
VQRSHR | .S8.S16.S16.S32.S32.S64.U8.U16.U16.U32.U32.U64.U8.S16.U16.S32.U32.S64 | Dd,Qn,#UIMM | 通过带四舍五入的即时存取和变窄的饱和右移Vd[i]:=sat<td>((Vn[i]+round(UIMM))>>UIMM) |
VSRA | .S8.S16.S32 | Dd,Dn,#UIMMQd,Qn,#UIMM | 通过即时存取和累计的右移Vd[i]:=Vd[i]+(Vn[i]UIMM) |
.S64.U8.U16.U32.U64 | |||
VQSRA | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,#UIMMQd,Qn,#UIMM | 通过即时存取和累计的饱和右移Vd[i]:=sat<td>(Vd[il+(Vn[i]>>UIMM)) |
VRSRA | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,#UIMMQd,Qn,#UIMM | 通过带四舍五入的即时存取和累计的右移Vd[i]:=Vd[i]+((Vn[i]+round(UIMM))>>UIMM) |
VQRSRA | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,#UIMMQd,Qn,#UIMM | 通过带四舍五入的即时存取和变窄的饱和右移Vd[i]:=sat<td>(Vd[i]+((Vn[i]+round(UIMM))#UIMM)) |
VSHL | .I8.I16.I32.I64 | Dd,Dn,#UIMMQd,Qn,#UIMM | 通过即时存取的左移Vd[i]:=Vn[i]<<UIMM |
.S16.S8.S32.S16.S64.S32.U16.U8.U32.U16.U64.U32 | Qd,Dn,#UIMM | 通过即时存取的左长移Vd[i]:=Vn[i]#UIMM | |
VQSHL | .S8.S16 | Dd,Dn,#UIMMQd,Qn,#UIMM | 通过即时存取的饱和左移Vd[i]:=sat<td>(Vn[i]#UIMM) |
.S32.S64.U8.U16.U32.U64.U8.S8.U16.S16.U32.S32.U64.S64 |
表7
移位有符号的变量
在本节中的移位是对受第二矢量中指定的带符号移位数量控制的元素的一个矢量执行的移位。支持带符号移位数量,允许支持按指数值的移位,它可能合理地是负数;负数控制数值将执行右移。矢量移位允许每一个元素移动不同的数量,但是可以用来通过以下方法将所有通道移位相同的数量:在执行所述移位以前将移位控制操作数复制到矢量的所有通道。带符号移位控制值是具有与要移动的操作数的最小操作数元素尺寸相同的尺寸的元素。但是,只利用每一个通道的低8位来解释位移器变量,以便确定所述移位数量。四舍五入和饱和选项也是可用的。
助记符 | 数据类型 | 操作数格式 | 说明 |
VSHL | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,DmQd,Qn,Qm | 通过带符号变量的左移Vd[i]:=Vn[i]<<Vm[i] |
VQSHL | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,DmQd,Qn,Qm | 通过带符号变量的饱和左移Vd[i]:=sat<td>(Vn[i]<<Vm[i] |
VRSHL | .S8.S16.S32.S64.U8.U16.U32.U64 | Dd,Dn,DmQd,Qn,Qm | 通过带符号变量的四舍五入左移Vd:=(Vn[i]+round(-Vm[i]))<<Vm[i] |
VQRSHL | .S8.S1.S32.S64.U8.U16.U32.U64 | Dd,Dn,DmQd,Qn,Qm | 通过带符号变量的饱和四舍五入左移Vd[i]:=sat<td>((Vn[i]+round(-Vm[i]))<<Vm[i]) |
因而,如可以看到的,硬件支持既能指定源数据元素尺寸又能指定结果数据元素尺寸,而且有时指定将被移动的数据的位数。这使之变得极其可适配,而且是功能强大的工具。
图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
比较和选择
可以执行对产生掩码的变量的比较和测试,所述比较和测试用来提供数据平面选择和掩蔽。它还提供指令来选择最大值和最小值,包括折叠版本,所述折叠版本可以在矢量化代码结束时使用,以便求出矢量内的最大值或最小值。
助记符 | 数据类型 | 操作数格式 | 说明 |
VCEQ | .18.I16.I32.F32 | Dd,Dn,DmQd,Qn,Qm | 比较相等Vd[i]:=(Vn[i]==Vm[i])?:1:0 |
VCGE | .S8.S16.S32.U8.U16 | Dd,Dn,DmQd,Qn,Qm | 比较大于或等于Vd[i]:=(Vn[i]>=Vm[i])?1:0 |
.U32.F32 | |||
VCGT | .S8.S16.S32.U8.U16.U32.F32 | Dd,Dn,DmQd,Qn,Qm | 比较大于Vd[i]:=(Vn[i]>Vm[i])?1:0 |
VCAGE | .F32 | Dd,Dn,DmQd,Qn,Qm | 比较绝对值大于或等于Vd[i]:(|Vn[i]|>=|Vm[i]|)?1:0 |
VCAGT | .F32 | Dd,Dn,DmQd,Qn,Qm | 比较绝对值大于Vd[i]:=(|Vn[i]|>|Vm[i]|)?1:0 |
VCEQZ | .18.I16.I32.F32 | Dd,DmQd,Qm | 比较等于0Vd[i]:=(Vm[i]==0)?1:0 |
VCGEZ | .S8.S16.F32 | Dd,DmQd,Qm | 比较大于或等于0Vd[i]:=(Vm[i]>=0)?1:0 |
VCGTZ | .S8.S16.S32.F32 | Dd,DmQd,Qm | 比较大于0Vd[i]:=(Vm[i]>0)?1:0 |
VCLEZ | .F32 | Dd,DmQd,Qm | 比较小于或等于0Vd[i]:=(vm[i]<=0)?1:0备注:整数a<=0==!(a>0) |
VCLTZ | .F32 | Dd,DmQd,Qm | 比较小于0Vd[i]:=(Vm[i]<0)?:1:0备注:整数a<0==!(a>=0) |
VTST | .I8.I16.I32 | Dd,Dn,DmQd,Qn,Qm | 位测试Vd[i]:=((Vn[i]&vm[i])!=0)?1:0 |
VMAX | .S8.S16.S32.U8.U16 | Dd,Dn,DmQd,Qn,Qm | 求最大值Vd[i]:=(Vn[i]>=Vm[i])?Vn[i]:Vm[i] |
.U32.F32 | |||
VMIN | .S8.S16.S32.U16.U32.F32 | Dd,Dn,DmQd,Qn,Qm | 求最小值Vd[i]:=(Vn[i]>=Vm[i])?Vm[i]:Vn[i] |
一旦已经建立掩码,单指令便可以用来利用包含掩码的通用寄存器,控制寄存器C来选择a或b。因而,数据处理器由C控制来执行a或b选择的多路复用操作。
图41示意地表示所述***的一个实施例,其中源值a或b的选择是按位执行的。在这种情况下,控制寄存器730已经通过比较寄存器a710和b720中的数据元素利用数据填充。因而,例如八位宽的数据元素a0与具有相同尺寸的数据元素b0比较。在这种情况下,a小于或等于b,因而,八个零***控制寄存器730相应的部分。若a大于b8,则1***控制寄存器730的相应部分。类似的比较是并行地针对所有数据元素执行的并产生相应的控制位。产生控制矢量的比较操作对应于指令VCGT.S8c,a,b.。于是,选择可以通过存储在源寄存器的位之间执行简单的逻辑运算非常简单地逐位执行,每一个结果位都写入目的地寄存器,在所述实例中,是寄存器730,亦即,结果覆盖所述控制值。按位选择的优点是它与数据类型和宽度无关,而且适当的话,可以比较不同大小的数据元素。
图42表示替代实施例,其中控制不是按位执行的,而是在数据元素的基础上执行的。在所示实施例中,若控制寄存器C730中的数据元素大于或等于零,则相应的数据元素在源寄存器b720中,它写入目的地寄存器(在这种情况下,寄存器720)。如在所述实例中,如果C是带符号的整数,则当决定选择a或b时,只需考虑C的最高位。
在其他实施例中,C的其它特性可以用来确定是选择来自寄存器a710的数据元素还是来自寄存器b720的数据。这样的特性的实例包括:C是奇数还是偶数,其中再一次只需要考虑所述控制值的一个位,在这种情况下,是最低位;或者C是否等于零、不等于零或大于零。
一般地说,ARM指令和事实上许多其它RISC指令都只提供带有任何指令的3个操作数。多路复用操作一般要求四个操作数来指定两个源寄存器a和b,控制寄存器C和目的地寄存器D。现有的***的实施例利用以下事实:一般地说,继多路复用操作之后,不再需要两组源数据或控制数据中至少一组。因而,目的地寄存器选择为或者两个源寄存器之一或者控制寄存器。这只作为控制寄存器起作用,是通用寄存器,而不是特殊寄存器。在所述***的实施例中,在所述指令集中设置3个不同指令,一个指令专用用来写回源寄存器,另一个指令用来写回其他源寄存器,而第三指令用来写入控制寄存器。每一个指令都要求刚好3个操作数,指定两个源寄存器和一个控制寄存器。这3个指令在下面表9中指定。
表9
逻辑和按位选择
助记符 | 数据类型 | 操作数格式 | 说明 |
VBIT | 无 | Dd,Dn,DmQd,Qn,Qm | 若真则按位***Vd:=(Vm)?Vn:Vd |
VBIF | 无 | Dd,Dn,DmQd,Qn,Qm | 若假则按位***Vd:=(Vm)?Vd:Vn |
VBSL | 无 | Dd,Dn,DmQd,Qn,Qm | 按位选择Vd:=(Vd)?Vn:Vm |
图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,为了便于论证,我们假定具有起始地址0×4,于是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个2×2的块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中对角线箭头直线所图解说明的,其结果是左上角中的2×1像素块被右下角的2×1像素块替换。因而,如本专业的技术人员将会意识到的,四个ZIP指令的序列已经围绕对角线直线1136转置了像素的整个4×4阵列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*Bre
图59A表示响应以下形式的第一乘法指令执行操作:
32|MUL.16 Dd,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)。
助记符 | 数据类型 | 操作数格式 | 说明 |
VADH | .18.I16.I16.I32.I32.64 | Dd,Qn,Qm | 返回高半部加法Vd[i]:=(Vn[i]+Vm[i])#size<td> |
VRADH | .18.I16.I16.I32.132.164 | Dd,Qn,Qm | 带四舍五入的返回高半部加法Vd[i]:=(Vn[i]+Vm[i]+round<td>)size<td> |
VSBH | .I8.I16.I16.I32.I32.I64 | Dd,Qn,Qm | 返回高半部减法Vd[i]:=(Vn[i]-Vm[i])size<td> |
VRSBH | .I8.I16.I16.I32.I32.I64 | Dd,Qn,Qm | 带四舍五入的返回高半部减法Vd[i]:=(Vn[i]-Vm[i]+round<td>)#size<td> |
表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.32Dd,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,#<value>,<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(“或”)的实例,它们可以用来产生某些附加的数据值。
助记符 | 数据类型 | 操作数格式 | 说明 |
VAND | 无 | Dd,#<value>,<mode> | 与所产生的常数按位“与”Vd:=Vd&<所产生的常数> |
VORR | 无 | Dd,#<value>,<mode> | 与所产生的常数按位“或”Vd:=Vd|<所产生的常数> |
对所产生的常数执行其他数据处理操作的能力可以有各种各样的用途。例如,图67表示本技术的实施例可以如何用来产生位屏蔽,以便从矢量中的若干数据元素中提取某一位或一些位。在所示的实例中,从源矢量提取每一个数据元素的第四位。最初通过复制即时存取8来扩展它,然后这后跟逻辑AND指令,它使所产生的常数与源矢量进行AND运算,从每一个数据元素提取所需的位。这些操作是响应以下指令执行的:
VAND Dd,#0b00001000,0b1100
其中<mode>数值1100涉及所产生的常数,包括扩展的数据部分(见图63)。
尽管这里已经描述了特定的实施例,但下面将指出,本发明不限于此,而且在本发明的范围内可以对其进行许多修改和添加。例如,在不脱离本发明的范围的情况下,可以结合独立权项的特征对以下从属权项的特征进行不同组合。
Claims (31)
1.一种数据处理设备,它包括:
具有多个寄存器的寄存器数据存储体,可以用来保存数据元素;
处理器,可以用来并行地对在至少一个所述寄存器中访问的多个数据元素执行数据处理操作;
访问逻辑,可以用来响应单一访问指令,在指定的寄存器和连续的存储器块之间移动多个数据元素,在所述连续的存储器块中数据元素以具有结构格式的结构阵列的形式保存,所述结构格式具有多个分量;
所述单一访问指令识别所述结构格式中的所述分量数目;以及
所述访问逻辑可以用来在所述多个数据元素移动时将所述多个数据元素重新排列,使得每一个指定的寄存器保存一个分量的数据元素,而同时所述数据元素以所述结构阵列的形式保存在存储器中。
2.如权利要求1所述的数据处理设备,其中所述单一访问指令识别所述指定的寄存器,所述指定的寄存器的数目是所述分量数目的倍数。
3.如权利要求1或权利要求2所述的数据处理设备,其中所述单一访问指令包括识别与所述要移动的数据元素相联系的数据类型的数据类型信息。
4.如权利要求3所述的数据处理设备,其中所述要移动的数据元素中的每一个具有相同的数据类型。
5.如上述权利要求中任何一个所述的数据处理设备,其中所述指定的寄存器具有固定的彼此关系。
6.如权利要求5所述的数据处理设备,其中按照所述固定的关系所述各指定的寄存器被n个中间寄存器隔开,其中n是2m-1并且其中m是大于或等于零的整数。
7.如权利要求5或权利要求6所述的数据处理设备,其中所述指定的寄存器是所述寄存器数据存储体内一系列相邻的寄存器。
8.如上述权利要求中任何一个所述的数据处理设备,其中所述单一访问指令是单一装入指令,所述访问逻辑可以用来响应该单一装入指令,以便把所述多个数据元素从所述连续的存储器块装入所述指定的寄存器,并且在把所述数据元素存储在所述指定的寄存器之前,通过把所述不同分量的数据元素去交错,重新排列所述数据元素,以便把不同分量的数据元素存储在所述指定的寄存器的不同寄存器中。
9.如权利要求1至7中任何一项所述的数据处理设备,其中所述单一访问指令是单一存储指令,所述访问逻辑可以用来响应该单一存储指令,把所述多个数据元素从所述指定的寄存器存入所述连续的存储器块,并且在把所述数据元素存储在所述连续的存储器块之前,通过交错所述不同分量的数据元素,重新排列所述数据元素,使得所述数据元素以所述结构的阵列的形式存储在所述连续的存储器块中。
10.如上述权利要求中任何一个所述的数据处理设备,其中所述单一访问指令识别要访问的结构数目。
11.如附属于权利要求8的权利要求10所述的数据处理设备,其中若所述结构的数目不足以使所述指定的寄存器被数据元素填满,则所述访问逻辑可以用来用一个或多个预定的值填充所述指定的寄存器任何未填满部分。
12.如上述权利要求中任何一个所述的数据处理设备,其中所述单一访问指令识别用来识别所述要移动的数据元素的寻址方式。
13.如权利要求12所述的数据处理设备,其中所述寻址方式识别所述连续的存储器块的起始地址。
14.如上述权利要求中任何一个所述的数据处理设备,其中所述指定的寄存器具有相同的尺寸。
15.如上述权利要求中任何一个所述的数据处理设备,其中所述单一访问指令识别要对所述数据元素进行的变换,并且所述访问逻辑可以用来在所述数据元素被移动时对所述数据元素进行所述变换。
16.一种操作数据处理设备的方法,所述设备包括:具有多个寄存器的寄存器数据存储体,可以用来保存数据元素;以及处理器,可以用来并行地对在至少一个所述寄存器中访问的多个数据元素执行数据处理操作,所述方法包括以下步骤:
(a)响应单一访问指令而在指定的寄存器和连续的存储器块之间移动多个数据元素,数据元素以具有结构格式的结构阵列的形式保存在所述连续的存储器块中,所述结构格式具有多个分量;
所述单一访问指令识别所述结构格式中分量的数目,并且所述方法还包括以下步骤:
(b)在所述多个数据元素移动时重新排列所述多个数据元素,使得每一个指定的寄存器保存一个分量的数据元素,而同时所述数据元素以所述结构阵列的形式被保存在存储器中。
17.如权利要求16所述的方法,其中所述单一访问指令识别所述指定的寄存器,所述指定的寄存器的数目是所述分量的数目的倍数。
18.如权利要求16所述的方法,其中所述单一访问指令包括识别与所述要移动的数据元素相联系的数据类型的数据类型信息。
19.如权利要求18所述的方法,其中所述要移动的数据元素中的每一个具有相同的数据类型。
20.如权利要求16至19中任何一项所述的方法,其中所述指定的寄存器具有固定的彼此关系。
21.如权利要求20所述的方法,其中按照所述固定的关系,所述各指定的寄存器被n个中间寄存器隔开,其中n是2m-1并且其中m是大于或等于零的整数。
22.如权利要求20或权利要求21所述的方法,其中所述指定的寄存器是所述寄存器数据存储体内一系列相邻的寄存器。
23.如权利要求16至22中任何一项所述的方法,其中所述单一访问指令是单一装入指令,并且其中:
所述步骤(a)包括把所述多个数据元素从所述连续的存储器块装入所述指定的寄存器的步骤;以及
在把所述数据元素存储在所述指定的寄存器之前,所述步骤(b)包括以下步骤:通过把所述不同分量的数据元素的去交错,重新排列所述数据元素,以便把不同分量的数据元素存储在所述指定的寄存器的不同寄存器中。
24.如权利要求16至22中任何一项所述的方法,其中所述单一访问指令是单一存储指令,并且其中:
所述步骤(a)包括把所述多个数据元素从所述指定的寄存器存储至所述连续的存储器块;以及
在把所述数据元素存储在所述连续的存储器块之前,所述步骤(b)包括以下步骤:通过交错所述不同分量的数据元素,将所述数据元素重新排列,以便将所述数据元素以所述结构阵列的形式存储在所述连续的存储器块中。
25.如权利要求16至24中任何一项所述的方法,其中所述单一访问指令识别要访问的结构的数目。
26.如附属于权利要求23的权利要求25所述的方法,其中若所述结构的数目不足以使所述指定的寄存器被数据元素填满,则所述方法还包括以下步骤:
用一个或多个预定的值填充所述指定的寄存器的任何未填满部分。
27.如权利要求16至26中任何一项所述的方法,其中所述单一访问指令识别用来识别所述要移动的数据元素的寻址方式。
28.如权利要求27所述的方法,其中所述寻址方式识别所述连续的存储器块的起始地址。
29.如权利要求16至28中任何一项所述的方法,其中所述指定的寄存器具有相同的尺寸。
30.如权利要求16至29中任何一项所述的方法,其中所述单一访问指令识别要施加于所述数据元素的变换,并且所述方法还包括在所述数据元素被移动时对所述数据元素施加所述变换的步骤。
31.一种包括计算机程序的计算机程序产品,所述计算机程序包括至少一个单一访问指令,当执行所述至少一个单一访问指令时,所述至少一个单一访问指令使数据处理设备按照权利要求16至30中任何一项所述的方法运行。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB0328503.8 | 2003-12-09 | ||
GB0328503A GB2409059B (en) | 2003-12-09 | 2003-12-09 | A data processing apparatus and method for moving data between registers and memory |
PCT/GB2004/002847 WO2005057406A1 (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 |
---|---|
CN1890630A true CN1890630A (zh) | 2007-01-03 |
CN1890630B CN1890630B (zh) | 2010-10-13 |
Family
ID=30129886
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2004800363090A Expired - Lifetime CN1890630B (zh) | 2003-12-09 | 2004-07-01 | 在寄存器和存储器之间移动数据的数据处理设备和方法 |
Country Status (11)
Country | Link |
---|---|
US (1) | US7219215B2 (zh) |
EP (1) | EP1692613B1 (zh) |
JP (1) | JP4689622B2 (zh) |
KR (1) | KR100991984B1 (zh) |
CN (1) | CN1890630B (zh) |
GB (1) | GB2409059B (zh) |
IL (1) | IL173622A (zh) |
MY (1) | MY138193A (zh) |
RU (1) | RU2006120158A (zh) |
TW (1) | TWI345703B (zh) |
WO (1) | WO2005057406A1 (zh) |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102200964A (zh) * | 2011-06-17 | 2011-09-28 | 孙瑞琛 | 基于并行处理的fft装置及其方法 |
CN102622318A (zh) * | 2012-02-27 | 2012-08-01 | 中国科学院声学研究所 | 一种存储器控制电路及其控制的向量数据寻址方法 |
CN104008021A (zh) * | 2013-02-22 | 2014-08-27 | Mips技术公司 | 针对多数据体系结构的精确的异常信号发送 |
CN104115114A (zh) * | 2011-12-23 | 2014-10-22 | 英特尔公司 | 经改进的提取指令的装置和方法 |
CN104951277A (zh) * | 2011-04-01 | 2015-09-30 | 英特尔公司 | 向量友好指令格式及其执行 |
CN105247477A (zh) * | 2013-06-28 | 2016-01-13 | 英特尔公司 | 多寄存器存储器访问指令、处理器、方法和*** |
US9619236B2 (en) | 2011-12-23 | 2017-04-11 | Intel Corporation | Apparatus and method of improved insert instructions |
US9632980B2 (en) | 2011-12-23 | 2017-04-25 | Intel Corporation | Apparatus and method of mask permute instructions |
US9658850B2 (en) | 2011-12-23 | 2017-05-23 | Intel Corporation | Apparatus and method of improved permute instructions |
CN107851014A (zh) * | 2015-07-31 | 2018-03-27 | Arm 有限公司 | 用于转换存储器与多个向量寄存器之间的多个数据结构的设备及方法 |
CN107851017A (zh) * | 2015-07-31 | 2018-03-27 | Arm 有限公司 | 用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法 |
US9946540B2 (en) | 2011-12-23 | 2018-04-17 | Intel Corporation | Apparatus and method of improved permute instructions with multiple granularities |
CN107967149A (zh) * | 2011-12-23 | 2018-04-27 | 英特尔公司 | 从源写掩码寄存器在目的地写掩码寄存器中设置输出掩码的***、装置和方法 |
CN108369573A (zh) * | 2015-12-18 | 2018-08-03 | 英特尔公司 | 用于设置多个向量元素的操作的指令和逻辑 |
US10157061B2 (en) | 2011-12-22 | 2018-12-18 | Intel Corporation | Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks |
CN109416633A (zh) * | 2016-07-08 | 2019-03-01 | Arm有限公司 | 用于执行重新排列操作的设备及方法 |
CN109614362A (zh) * | 2019-03-07 | 2019-04-12 | 深兰人工智能芯片研究院(江苏)有限公司 | 一种数据交换方法及电子设备 |
CN110023915A (zh) * | 2016-11-28 | 2019-07-16 | Arm有限公司 | 数据移动引擎 |
CN111459856A (zh) * | 2020-03-20 | 2020-07-28 | 中国科学院计算技术研究所 | 一种数据传输装置及传输方法 |
CN112199159A (zh) * | 2020-10-16 | 2021-01-08 | 常熟理工学院 | 对操作数栈和变量表的读写方法、装置、设备及存储介质 |
CN115373628A (zh) * | 2022-10-27 | 2022-11-22 | 北京象帝先计算技术有限公司 | 先进先出存储器、***、装置、设备及数据读取方法 |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2409066B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
US20070255903A1 (en) * | 2006-05-01 | 2007-11-01 | Meir Tsadik | Device, system and method of accessing a memory |
US7594094B2 (en) * | 2006-05-19 | 2009-09-22 | International Business Machines Corporation | Move data facility with optional specifications |
US7949701B2 (en) | 2006-08-02 | 2011-05-24 | Qualcomm Incorporated | Method and system to perform shifting and rounding operations within a microprocessor |
US8190624B2 (en) * | 2007-11-29 | 2012-05-29 | Microsoft Corporation | Data parallel production and consumption |
KR20100101586A (ko) * | 2007-12-05 | 2010-09-17 | 샌드브리지 테크놀로지스, 인코포레이티드 | 데이터 처리에 있어서 레지스터 시프트 및 회전을 포함하는 방법 및 명령어 세트 |
NO329837B1 (no) * | 2008-07-09 | 2011-01-03 | Tandberg Telecom As | Fremgangsmate for prosessor-effektivt deblokkingsfiltrering |
US8484276B2 (en) * | 2009-03-18 | 2013-07-09 | International Business Machines Corporation | Processing array data on SIMD multi-core processor architectures |
UA94521C2 (ru) * | 2010-02-08 | 2011-05-10 | Виктор Владимирович Гребеников | Привод устройства регулирования напряжения силового трансформатора под нагрузкой |
KR20120077164A (ko) | 2010-12-30 | 2012-07-10 | 삼성전자주식회사 | Simd 구조를 사용하는 복소수 연산을 위한 사용하는 장치 및 방법 |
JP5760532B2 (ja) * | 2011-03-14 | 2015-08-12 | 株式会社リコー | プロセッサ装置及びその演算方法 |
US9378019B2 (en) | 2011-04-07 | 2016-06-28 | Via Technologies, Inc. | Conditional load instructions in an out-of-order execution microprocessor |
US9128701B2 (en) | 2011-04-07 | 2015-09-08 | Via Technologies, Inc. | Generating constant for microinstructions from modified immediate field during instruction translation |
US9292470B2 (en) | 2011-04-07 | 2016-03-22 | Via Technologies, Inc. | Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program |
US9645822B2 (en) | 2011-04-07 | 2017-05-09 | Via Technologies, Inc | Conditional store instructions in an out-of-order execution microprocessor |
US9043580B2 (en) | 2011-04-07 | 2015-05-26 | Via Technologies, Inc. | Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA) |
US9176733B2 (en) | 2011-04-07 | 2015-11-03 | Via Technologies, Inc. | Load multiple and store multiple instructions in a microprocessor that emulates banked registers |
US8924695B2 (en) | 2011-04-07 | 2014-12-30 | Via Technologies, Inc. | Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor |
US9146742B2 (en) | 2011-04-07 | 2015-09-29 | Via Technologies, Inc. | Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA |
US8880857B2 (en) | 2011-04-07 | 2014-11-04 | Via Technologies, Inc. | Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor |
US9244686B2 (en) | 2011-04-07 | 2016-01-26 | Via Technologies, Inc. | Microprocessor that translates conditional load/store instructions into variable number of microinstructions |
US9141389B2 (en) | 2011-04-07 | 2015-09-22 | Via Technologies, Inc. | Heterogeneous ISA microprocessor with shared hardware ISA registers |
US9032189B2 (en) | 2011-04-07 | 2015-05-12 | Via Technologies, Inc. | Efficient conditional ALU instruction in read-port limited register file microprocessor |
US9898291B2 (en) | 2011-04-07 | 2018-02-20 | Via Technologies, Inc. | Microprocessor with arm and X86 instruction length decoders |
US9336180B2 (en) | 2011-04-07 | 2016-05-10 | Via Technologies, Inc. | Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode |
US9274795B2 (en) | 2011-04-07 | 2016-03-01 | Via Technologies, Inc. | Conditional non-branch instruction prediction |
US9317288B2 (en) | 2011-04-07 | 2016-04-19 | Via Technologies, Inc. | Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
US8880851B2 (en) | 2011-04-07 | 2014-11-04 | Via Technologies, Inc. | Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
US9823928B2 (en) | 2011-09-30 | 2017-11-21 | Qualcomm Incorporated | FIFO load instruction |
US10203954B2 (en) * | 2011-11-25 | 2019-02-12 | Intel Corporation | Instruction and logic to provide conversions between a mask register and a general purpose register or memory |
US10223204B2 (en) | 2011-12-22 | 2019-03-05 | Intel Corporation | Apparatus and method for detecting and recovering from data fetch errors |
WO2014105011A1 (en) | 2012-12-26 | 2014-07-03 | Intel Corporation | Coalescing adjacent gather/scatter operations |
US10402198B2 (en) | 2013-06-18 | 2019-09-03 | Nxp Usa, Inc. | Signal processing device and method of performing a pack-insert operation |
US9747104B2 (en) | 2014-05-12 | 2017-08-29 | Qualcomm Incorporated | Utilizing pipeline registers as intermediate storage |
US9772849B2 (en) | 2014-11-14 | 2017-09-26 | Intel Corporation | Four-dimensional morton coordinate conversion processors, methods, systems, and instructions |
US9772848B2 (en) | 2014-11-14 | 2017-09-26 | Intel Corporation | Three-dimensional morton coordinate conversion processors, methods, systems, and instructions |
US20160139919A1 (en) * | 2014-11-14 | 2016-05-19 | Intel Corporation | Machine Level Instructions to Compute a 3D Z-Curve Index from 3D Coordinates |
US9772850B2 (en) | 2014-11-14 | 2017-09-26 | Intel Corporation | Morton coordinate adjustment processors, methods, systems, and instructions |
GB2552154B (en) * | 2016-07-08 | 2019-03-06 | Advanced Risc Mach Ltd | Vector register access |
US10216479B2 (en) * | 2016-12-06 | 2019-02-26 | Arm Limited | Apparatus and method for performing arithmetic operations to accumulate floating-point numbers |
IL267998B2 (en) * | 2017-02-23 | 2023-12-01 | Advanced Risc Mach Ltd | Element by vector operations in a data processing device |
GB2564696B (en) * | 2017-07-20 | 2020-02-05 | Advanced Risc Mach Ltd | Register-based complex number processing |
US20230267043A1 (en) * | 2022-02-23 | 2023-08-24 | Micron Technology, Inc. | Parity-based error management for a processing system |
CN114816566B (zh) * | 2022-04-08 | 2024-05-24 | 山东云海国创云计算装备产业创新中心有限公司 | 一种指令搬移方法、***、设备以及介质 |
CN117271437B (zh) * | 2023-11-21 | 2024-02-23 | 英特尔(中国)研究中心有限公司 | 一种处理器 |
Family Cites Families (69)
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 |
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 |
GB9412434D0 (en) | 1994-06-21 | 1994-08-10 | Inmos Ltd | Computer instruction compression |
GB9412487D0 (en) | 1994-06-22 | 1994-08-10 | Inmos Ltd | A computer system for executing branch instructions |
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 |
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 |
GB9509987D0 (en) | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Manipulation of data |
GB9509989D0 (en) | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Manipulation of data |
GB9509983D0 (en) | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Replication of data |
GB9509988D0 (en) | 1995-05-17 | 1995-07-12 | Sgs Thomson Microelectronics | Matrix transposition |
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 |
WO1997009679A1 (en) | 1995-09-01 | 1997-03-13 | Philips Electronics North America Corporation | Method and apparatus for custom processor operations |
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 |
US5838984A (en) | 1996-08-19 | 1998-11-17 | Samsung Electronics Co., Ltd. | Single-instruction-multiple-data processing using multiple banks of vector registers |
US6058465A (en) | 1996-08-19 | 2000-05-02 | Nguyen; Le Trong | Single-instruction-multiple-data processing in a multimedia signal processor |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
US6629115B1 (en) * | 1999-10-01 | 2003-09-30 | Hitachi, Ltd. | Method and apparatus for manipulating vectored data |
US6546480B1 (en) | 1999-10-01 | 2003-04-08 | Hitachi, Ltd. | Instructions for arithmetic operations on vectored data |
US6748521B1 (en) | 2000-02-18 | 2004-06-08 | Texas Instruments Incorporated | Microprocessor with instruction for saturating and packing data |
AU2001249122A1 (en) * | 2000-03-08 | 2001-09-17 | Sun Microsystems, Inc. | Processing architecture having field swapping capability |
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 |
GB2419006B (en) * | 2002-04-22 | 2006-06-07 | 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 |
GB2409065B (en) * | 2003-12-09 | 2006-10-25 | Advanced Risc Mach Ltd | Multiplexing operations in SIMD processing |
GB2409060B (en) * | 2003-12-09 | 2006-08-09 | Advanced Risc Mach Ltd | Moving data between registers of different register data stores |
GB2409066B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
-
2003
- 2003-12-09 GB GB0328503A patent/GB2409059B/en not_active Expired - Lifetime
-
2004
- 2004-07-01 KR KR1020067010780A patent/KR100991984B1/ko active IP Right Grant
- 2004-07-01 JP JP2006543599A patent/JP4689622B2/ja not_active Expired - Lifetime
- 2004-07-01 CN CN2004800363090A patent/CN1890630B/zh not_active Expired - Lifetime
- 2004-07-01 WO PCT/GB2004/002847 patent/WO2005057406A1/en active Application Filing
- 2004-07-01 EP EP04743193.7A patent/EP1692613B1/en not_active Expired - Lifetime
- 2004-07-01 RU RU2006120158/09A patent/RU2006120158A/ru not_active Application Discontinuation
- 2004-07-13 US US10/889,367 patent/US7219215B2/en active Active
- 2004-08-10 MY MYPI20043247A patent/MY138193A/en unknown
- 2004-08-11 TW TW093124106A patent/TWI345703B/zh active
-
2006
- 2006-02-08 IL IL173622A patent/IL173622A/en active IP Right Grant
Cited By (49)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104951277B (zh) * | 2011-04-01 | 2017-11-21 | 英特尔公司 | 向量友好指令格式及其执行 |
US11740904B2 (en) | 2011-04-01 | 2023-08-29 | Intel Corporation | Vector friendly instruction format and execution thereof |
US11210096B2 (en) | 2011-04-01 | 2021-12-28 | Intel Corporation | Vector friendly instruction format and execution thereof |
US10795680B2 (en) | 2011-04-01 | 2020-10-06 | Intel Corporation | Vector friendly instruction format and execution thereof |
CN104951277A (zh) * | 2011-04-01 | 2015-09-30 | 英特尔公司 | 向量友好指令格式及其执行 |
CN102200964A (zh) * | 2011-06-17 | 2011-09-28 | 孙瑞琛 | 基于并行处理的fft装置及其方法 |
US10157061B2 (en) | 2011-12-22 | 2018-12-18 | Intel Corporation | Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks |
CN107967149B (zh) * | 2011-12-23 | 2021-12-10 | 英特尔公司 | 从源写掩码寄存器在目的地写掩码寄存器中设置输出掩码的***、装置和方法 |
US9632980B2 (en) | 2011-12-23 | 2017-04-25 | Intel Corporation | Apparatus and method of mask permute instructions |
CN107967149A (zh) * | 2011-12-23 | 2018-04-27 | 英特尔公司 | 从源写掩码寄存器在目的地写掩码寄存器中设置输出掩码的***、装置和方法 |
US9588764B2 (en) | 2011-12-23 | 2017-03-07 | Intel Corporation | Apparatus and method of improved extract instructions |
US9946540B2 (en) | 2011-12-23 | 2018-04-17 | Intel Corporation | Apparatus and method of improved permute instructions with multiple granularities |
US11354124B2 (en) | 2011-12-23 | 2022-06-07 | Intel Corporation | Apparatus and method of improved insert instructions |
US11347502B2 (en) | 2011-12-23 | 2022-05-31 | Intel Corporation | Apparatus and method of improved insert instructions |
US11275583B2 (en) | 2011-12-23 | 2022-03-15 | Intel Corporation | Apparatus and method of improved insert instructions |
CN104115114A (zh) * | 2011-12-23 | 2014-10-22 | 英特尔公司 | 经改进的提取指令的装置和方法 |
US9619236B2 (en) | 2011-12-23 | 2017-04-11 | Intel Corporation | Apparatus and method of improved insert instructions |
US9658850B2 (en) | 2011-12-23 | 2017-05-23 | Intel Corporation | Apparatus and method of improved permute instructions |
US10467185B2 (en) | 2011-12-23 | 2019-11-05 | Intel Corporation | Apparatus and method of mask permute instructions |
US10459728B2 (en) | 2011-12-23 | 2019-10-29 | Intel Corporation | Apparatus and method of improved insert instructions |
US10474459B2 (en) | 2011-12-23 | 2019-11-12 | Intel Corporation | Apparatus and method of improved permute instructions |
US10719316B2 (en) | 2011-12-23 | 2020-07-21 | Intel Corporation | Apparatus and method of improved packed integer permute instruction |
CN102622318B (zh) * | 2012-02-27 | 2014-09-10 | 中国科学院声学研究所 | 一种存储器控制电路及其控制的向量数据寻址方法 |
CN102622318A (zh) * | 2012-02-27 | 2012-08-01 | 中国科学院声学研究所 | 一种存储器控制电路及其控制的向量数据寻址方法 |
CN104008021A (zh) * | 2013-02-22 | 2014-08-27 | Mips技术公司 | 针对多数据体系结构的精确的异常信号发送 |
CN105247477B (zh) * | 2013-06-28 | 2018-06-19 | 英特尔公司 | 多寄存器存储器访问指令、处理器、方法和*** |
US10102888B2 (en) | 2013-06-28 | 2018-10-16 | Intel Corporation | Multiple register memory access instructions, processors, methods, and systems |
US9786338B2 (en) | 2013-06-28 | 2017-10-10 | Intel Corporation | Multiple register memory access instructions, processors, methods, and systems |
CN108845826B (zh) * | 2013-06-28 | 2022-10-14 | 英特尔公司 | 多寄存器存储器访问指令、处理器、方法和*** |
CN105247477A (zh) * | 2013-06-28 | 2016-01-13 | 英特尔公司 | 多寄存器存储器访问指令、处理器、方法和*** |
US10163468B2 (en) | 2013-06-28 | 2018-12-25 | Intel Corporation | Multiple register memory access instructions, processors, methods, and systems |
US10153012B2 (en) | 2013-06-28 | 2018-12-11 | Intel Corporation | Multiple register memory access instructions, processors, methods, and systems |
US10153011B2 (en) | 2013-06-28 | 2018-12-11 | Intel Corporation | Multiple register memory access instructions, processors, methods, and systems |
US10141033B2 (en) | 2013-06-28 | 2018-11-27 | Intel Corporation | Multiple register memory access instructions, processors, methods, and systems |
US10170165B2 (en) | 2013-06-28 | 2019-01-01 | Intel Corporation | Multiple register memory access instructions, processors, methods, and systems |
CN108845826A (zh) * | 2013-06-28 | 2018-11-20 | 英特尔公司 | 多寄存器存储器访问指令、处理器、方法和*** |
CN107851014A (zh) * | 2015-07-31 | 2018-03-27 | Arm 有限公司 | 用于转换存储器与多个向量寄存器之间的多个数据结构的设备及方法 |
CN107851017A (zh) * | 2015-07-31 | 2018-03-27 | Arm 有限公司 | 用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法 |
CN108369573A (zh) * | 2015-12-18 | 2018-08-03 | 英特尔公司 | 用于设置多个向量元素的操作的指令和逻辑 |
CN109416633B (zh) * | 2016-07-08 | 2023-02-28 | Arm有限公司 | 用于执行重新排列操作的设备及方法 |
CN109416633A (zh) * | 2016-07-08 | 2019-03-01 | Arm有限公司 | 用于执行重新排列操作的设备及方法 |
CN110023915A (zh) * | 2016-11-28 | 2019-07-16 | Arm有限公司 | 数据移动引擎 |
CN110023915B (zh) * | 2016-11-28 | 2023-03-07 | Arm有限公司 | 数据处理***和方法 |
CN109614362A (zh) * | 2019-03-07 | 2019-04-12 | 深兰人工智能芯片研究院(江苏)有限公司 | 一种数据交换方法及电子设备 |
CN111459856B (zh) * | 2020-03-20 | 2022-02-18 | 中国科学院计算技术研究所 | 一种数据传输装置及传输方法 |
CN111459856A (zh) * | 2020-03-20 | 2020-07-28 | 中国科学院计算技术研究所 | 一种数据传输装置及传输方法 |
CN112199159A (zh) * | 2020-10-16 | 2021-01-08 | 常熟理工学院 | 对操作数栈和变量表的读写方法、装置、设备及存储介质 |
CN115373628A (zh) * | 2022-10-27 | 2022-11-22 | 北京象帝先计算技术有限公司 | 先进先出存储器、***、装置、设备及数据读取方法 |
CN115373628B (zh) * | 2022-10-27 | 2023-02-03 | 北京象帝先计算技术有限公司 | 先进先出存储器、***、装置、设备及数据读取方法 |
Also Published As
Publication number | Publication date |
---|---|
MY138193A (en) | 2009-05-29 |
IL173622A0 (en) | 2006-07-05 |
JP4689622B2 (ja) | 2011-05-25 |
RU2006120158A (ru) | 2007-12-27 |
WO2005057406A1 (en) | 2005-06-23 |
GB2409059A (en) | 2005-06-15 |
TWI345703B (en) | 2011-07-21 |
EP1692613A1 (en) | 2006-08-23 |
KR20060135642A (ko) | 2006-12-29 |
TW200527203A (en) | 2005-08-16 |
CN1890630B (zh) | 2010-10-13 |
GB0328503D0 (en) | 2004-01-14 |
KR100991984B1 (ko) | 2010-11-04 |
JP2007514227A (ja) | 2007-05-31 |
EP1692613B1 (en) | 2018-03-21 |
IL173622A (en) | 2010-11-30 |
US7219215B2 (en) | 2007-05-15 |
GB2409059B (en) | 2006-09-27 |
US20050125641A1 (en) | 2005-06-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1890630A (zh) | 在寄存器和存储器之间移动数据的数据处理设备和方法 | |
CN1894659A (zh) | 在寄存器和存储器之间移动数据的数据处理设备和方法 | |
CN1914592A (zh) | 执行具有单元大小控制的紧缩数据操作的方法和设备 | |
CN1027198C (zh) | 计算装置 | |
CN1135468C (zh) | 对存储设备中信号数据字执行数字信号处理的方法和装置 | |
CN1265280C (zh) | 扩展整数的计算域的范围 | |
CN1993709A (zh) | 信号处理设备 | |
CN1319210A (zh) | 可配置的硬件块的配置方法 | |
CN1095114C (zh) | 算术机逻辑单元的运算方法以及算术和逻辑单元 | |
CN1684058A (zh) | 处理器 | |
CN86107558A (zh) | 具有带式随机存取存储器和地址发生器装置的单指令多数据单元阵列处理机 | |
CN1860441A (zh) | 用于可重新配置环境中的高效高性能数据操作元件 | |
CN1260054A (zh) | 协处理器的数据访问控制 | |
CN1509475A (zh) | 存储单元电路、存储设备、运动矢量检测器、和运动补偿预测编码器 | |
CN1107983A (zh) | 一种数据处理***及其方法 | |
CN1076378A (zh) | 用于电视游戏***等具有可编程图形处理器的外部存储*** | |
CN86108178A (zh) | 使用动态可重构向量位片的单指令多数据单元阵列处理机 | |
CN1442797A (zh) | 数据处理装置和程序 | |
CN1886744A (zh) | 在可扩展的处理器架构中增加高级指令所用的方法和装置 | |
CN1273893C (zh) | 模块化计算机***以及相关方法 | |
CN101038560A (zh) | 并行处理方法中的作业分配方法及并行处理方法 | |
CN1115631C (zh) | 具有risc结构的八位微控制器 | |
CN1279435C (zh) | 数字信号处理器 | |
CN1445679A (zh) | 多维存储器的数据传送装置、传送程序以及传送方法 | |
CN1231740A (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 | ||
CX01 | Expiry of patent term |
Granted publication date: 20101013 |