CN111984314A - 使用位反转顺序的矢量存储 - Google Patents
使用位反转顺序的矢量存储 Download PDFInfo
- Publication number
- CN111984314A CN111984314A CN202010410200.XA CN202010410200A CN111984314A CN 111984314 A CN111984314 A CN 111984314A CN 202010410200 A CN202010410200 A CN 202010410200A CN 111984314 A CN111984314 A CN 111984314A
- Authority
- CN
- China
- Prior art keywords
- data
- bit
- source
- instruction
- vector
- 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.)
- Pending
Links
- 239000013598 vector Substances 0.000 title claims abstract description 165
- 238000000034 method Methods 0.000 claims abstract description 20
- 230000004044 response Effects 0.000 claims abstract description 11
- 239000000872 buffer Substances 0.000 claims description 58
- 238000004364 calculation method Methods 0.000 claims description 7
- 210000004027 cell Anatomy 0.000 description 47
- 238000012545 processing Methods 0.000 description 22
- 230000009977 dual effect Effects 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 230000017105 transposition Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 210000003771 C cell Anatomy 0.000 description 2
- 101100534231 Xenopus laevis src-b gene Proteins 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 210000004457 myocytus nodalis Anatomy 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/14—Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
- G06F17/141—Discrete Fourier transforms
- G06F17/142—Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/76—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
- G06F7/78—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
-
- 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/30018—Bit or string instructions
-
- 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/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
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- 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
- 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
-
- 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
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
- G06F9/3869—Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
-
- 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
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Discrete Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Advance Control (AREA)
Abstract
本申请公开使用位反转顺序的矢量存储。一种响应于位反转矢量存储指令而在处理器中存储源数据的方法(1600)包括在位反转矢量存储指令的相应字段中指定包含源数据的第一源寄存器和包含地址数据的第二源寄存器(1602)。第一源寄存器包括多个通道,并且每个通道包含具有相关联索引值的初始数据元素。该方法还包括通过以下方式执行位反转矢量存储指令:通过针对每个通道,用相对于初始数据元素的相关联索引值具有位反转索引值的数据元素替换通道中的初始数据元素,来创建重新排序的源数据(1604);以及在由地址数据指定的位置处开始,将重新排序的源数据存储在存储器中的连续位置中(1606)。
Description
背景技术
现代数字信号处理器(DSP)面临多重挑战。DSP可能频繁地执行快速傅立叶变换(FFT),以将信号从时域表示转换为频域表示。通常,当计算FFT时,以位反转的方式提供输出数据。位反转是位的转置(transposition),其中(给定字段宽度的)最高有效位变为最低有效位,依此类推。与计算FFT本身相比,对位反转输出数据进行重新排序可能需要更多的计算开销(例如,DSP周期)。
发明内容
根据本公开的至少一个示例,一种响应于位反转矢量存储指令而在处理器中存储源数据的方法包括在位反转矢量存储指令的相应字段中指定包含源数据的第一源寄存器和包含地址数据的第二源寄存器。第一源寄存器包括多个通道,并且每个通道包含具有相关联索引值的初始数据元素。该方法还包括通过以下方式执行位反转矢量存储指令:通过针对每个通道,用相对于初始数据元素的相关联索引值具有位反转索引值的数据元素替换通道中的初始数据元素,来创建重新排序的源数据;以及在由地址数据指定的位置处开始,将重新排序的源数据存储在存储器中的连续位置中。
根据本公开的另一示例,一种数据处理器包括:第一源寄存器,其被配置为包含源数据;以及第二源寄存器,其被配置为包含地址数据。第一源寄存器包括多个通道,并且每个通道包含具有相关联索引值的初始数据元素。响应于单个位反转矢量存储指令的执行,数据处理器被配置为:通过针对每个通道,用相对于初始数据元素的相关联索引值具有位反转索引值的数据元素替换通道中的初始数据元素,来创建重新排序的源数据;以及在由地址数据指定的位置处开始,将重新排序的源数据存储在存储器中的连续位置中。
附图说明
对于各种示例的详细描述,现在将参考附图,其中:
图1示出了根据各种示例的成双的标量/矢量数据路径处理器;
图2示出了图1所示并且根据各种示例的成双的标量/矢量数据路径处理器中的寄存器和功能单元;
图3示出了示例性全局标量寄存器文件;
图4示出了由算术功能单元共享的示例性局部标量寄存器文件;
图5示出了由多个功能单元共享的示例性局部标量寄存器文件;
图6示出了由加载/存储单元共享的示例性局部标量寄存器文件;
图7示出了示例性全局矢量寄存器文件;
图8示出了示例性断言寄存器文件;
图9示出了由算术功能单元共享的示例性局部矢量寄存器文件;
图10示出了由乘法和相关功能单元共享的示例性局部矢量寄存器文件;
图11示出了根据各种示例的中央处理单元的流水线阶段;
图12示出了根据各种示例的单个提取包的十六个指令;
图13A和图13B示出了根据各种示例的用于不同的字段宽度的位反转操作的示例;
图14A和图14B示出了根据各种示例的响应于执行位反转矢量存储指令而对矢量的数据元素进行重新排序,然后将这样的重新排序的数据元素存储在存储器中的示例;
图15A和图15B示出了根据各种示例的指令的指令编码的示例;和
图16示出了根据各种示例的执行指令的方法的流程图。
具体实施方式
如上所述,DSP频繁地执行FFT以将信号从时域表示转换为频域表示。在某些情况下,希望以有序(例如,不是位反转)的方式存储FFT的输出。但是,与计算FFT本身相比,对FFT的位反转输出数据进行重新排序可能需要更多的计算和指令开销。由于FFT频繁地由DSP执行,因此不希望增加计算和指令开销。
为了至少通过减少有序存储FFT输出数据所需的指令和计算开销来提高执行FFT的DSP的性能并以有序方式提供输出数据,本公开的示例针对位反转矢量存储指令,该指令将包括多个数据元素的源数据存储在存储器(例如,一级数据缓存器)中,其中数据元素根据它们的索引值被位反转。以此方式,通过单个指令也可以撤销FFT的输出数据的位反转,该指令还将输出数据存储到存储器。使用单个位反转矢量存储指令将重新排序的源数据(例如,FFT输出数据)存储到存储器,并且以有序方式进行存储,减少了执行FFT时DSP的计算和指令开销。
在一个示例中,源数据是存储在第一矢量源寄存器中的512位矢量。第二源寄存器包含地址数据,该地址数据用于指定存储器中存储重新排序的(例如,位反转的)源数据的开始位置。第三源寄存器可以包含偏移数据,该偏移数据与地址数据一起用于指定存储器中存储重新排序的源数据的开始位置。
第一源寄存器具有多个通道,每个通道包含初始数据元素。为了在解释源数据元素的位反转时便于参考,每个数据元素都与一个索引值相关联。在一个示例中,每个通道是一个字(例如,32位),并且因此第一源寄存器包括16个这样的通道,通道包含具有索引0-15的数据元素。在另一个示例中,每个通道是双字(例如,64位),并且因此第一源寄存器包括8个这样的通道,通道包含具有索引0-7的数据元素。
对源数据元素进行重新排序(例如,位反转)以创建重新排序的源数据,然后在由第二源寄存器和第三源寄存器指定的地址处将重新排序的源数据存储在存储器中。特别地,对于第一源寄存器的每个通道,该通道中的初始数据元素被相对于初始数据元素的相关联索引值具有位反转索引值的数据元素替换。例如,在第一源寄存器的每个通道是一个字的情况下,源数据中的初始数据元素的顺序可以给出为:
0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15;
其可以被表示为字段宽度为4的二进制数。因此,在对索引进行位反转时,重新排序的源数据中的数据元素的顺序给出为:
0、8、4、12、2、10、6、14、1、9、5、13、3、11、7、15。
类似地,在第一源寄存器的每个通道是双字的情况下,源数据中的初始数据元素的顺序可以给出为:
0、1、2、3、4、5、6、7;
其可以被表示为字段宽度为3的二进制数。因此,在对索引进行位反转时,重新排序的源数据中的数据元素的顺序给出为:
0、4、2、6、1、5、3、7。
通过实现单个位反转矢量存储指令,可以以减少计算和指令开销的有序方式将诸如来自FFT计算的无序输出数据存储在存储器中。由于DSP可能频繁执行FFT计算,因此减少存储FFT输出数据(或更普遍地说,是任何一组位反转无序数据元素)所需的计算和指令开销提高了DSP的性能。
图1说明根据本公开的各种示例的成双的标量/矢量数据路径处理器。处理器100包括分开的一级指令缓存器(L1I)121和一级数据缓存器(L1D)123。处理器100包括二级组合式指令/数据缓存器(L2)130,其保持指令和数据两者。图1说明一级指令缓存器121和二级组合式指令/数据缓存器130之间的连接(总线142)。图1说明一级数据缓存器123和二级组合式指令/数据缓存器130之间的连接(总线145)。在一个示例中,处理器100二级组合式指令/数据缓存器130存储这两个指令以备份一级指令缓存器121并且存储数据以备份一级数据缓存器123。在该示例中,二级组合式指令/数据缓存器130进一步以本领域已知的但图1中未说明的方式连接到更高级的缓存器和/或主存储器。在该示例中,中央处理单元核心110、一级指令缓存器121、一级数据缓存器123以及二级组合式指令/数据缓存器130被形成在单个集成电路上。该信号集成电路可选择地包括其他电路。
中央处理单元核心110在指令提取单元111控制下从一级指令缓存器121提取指令。指令提取单元111确定将被执行的下一个指令并且调用提取包尺寸的一组此类指令。提取包的性质和尺寸在下面进一步详述。如本领域已知的,在缓存命中之后(如果这些指令被存储在一级指令缓存器121中),指令被直接从一级指令缓存器121中提取。在缓存错失之后(指定的指令提取包没有被存储在一级指令缓存器121中),在二级组合式缓存器130中寻找这些指令。在该示例中,一级指令缓存器121中的缓存线的尺寸等于提取包的尺寸。这些指令的存储器位置在二级组合式缓存器130中或命中或错失。命中是由二级组合式缓存器130服务。错失是由更高级缓存器(未图示说明)或由主存储器(未图示说明)服务。如本领域已知的,所请求的指令可以被同时供应到一级指令缓存器121和中央处理单元核心110两者以加速使用。
在一个示例中,中央处理单元核心110包括复数个功能单元以执行指令指定的数据处理任务。指令分派单元112确定每个提取的指令的目标功能单元。在该示例中,中央处理单元110作为超长指令字(VLIW)处理器进行操作,其能够同时处理相应的功能单元中的复数个指令。优选地,编译器组织执行包中一起被执行的指令。指令分派单元112将每个指令引导到其目标功能单元。分配给指令的功能单元完全由编译器产生的指令来指定。中央处理单元核心110的硬件不参与该功能单元分配。在该示例中,指令分派单元12可以并行操作复数个指令。这种并行指令的数量由执行包的尺寸设定。这将在下面进一步详述。
指令分派单元112的分派任务的一部分是确定指令在标量数据路径侧A 115中的功能单元上执行还是在矢量数据路径侧B 116中的功能单元上执行。每个指令中被称为s位的指令位确定该指令控制哪个数据路径。这将在下面进一步详述。
指令解码单元113对当前执行包中的每个指令解码。解码包括识别执行该指令的功能单元、从可能的寄存器文件(RF)中识别用于为相应的数据处理操作供应数据的寄存器以及识别相应的数据处理操作的结果的寄存器目的地。如下面进一步解释的,指令可以包括代替一个寄存器编号操作数字段的常量字段。该解码的结果是信号,这些信号用于控制目标功能单元以便对指定数据执行由相应的指令所指定的数据处理操作。
中央处理单元核心110包括控制寄存器114。控制寄存器114存储用于控制标量数据路径侧A 115和矢量数据路径侧B 116中的功能单元的信息。该信息可以是模式信息等。
来自指令解码器113的已解码的指令和存储在控制寄存器114中的信息被供应到标量数据路径侧A 115和矢量数据路径侧B 116。结果,标量数据路径侧A 115和矢量数据路径侧B 116中的功能单元根据指令指定的数据执行指令指定的数据处理操作并且将结果存储在一个或多个指令指定的数据寄存器中。标量数据路径侧A 115和矢量数据路径侧B 116中的每一个包括优选并行操作的复数个功能单元。这些将结合图2进一步详述。标量数据路径侧A 115和矢量数据路径侧B 116之间存在允许数据交换的数据路径117。
中央处理单元核心110进一步包括非基于指令的模块。仿真单元118允许响应于指令来确定中央处理单元核心110的机器状态。这种能力通常将被用于算法开发。中断/异常单元119使得中央处理单元核心110能够响应外部异步事件(中断)并且回应执行不适当操作的尝试(异常)。
中央处理单元核心110包括流引擎125。该说明的实施例的流引擎125将两个数据流从通常缓存在二级组合式缓存器130中的预定地址供应到矢量数据路径侧B 116的寄存器文件。这提供从存储器(如缓存在二级组合式缓存器130中的)直接到功能单元操作数输入端的受控数据移动。这将在下面进一步详述。
图1说明各个部分之间的总线的示例性数据宽度。一级指令缓存器121将指令经由总线141供应到指令提取单元111。优选地,总线141是512位总线。总线141从一级指令缓存器121单向通到中央处理单元10。二级组合式缓存器130将指令经由总线142供应到一级指令缓存器121。优选地,总线142是512位总线。总线142从二级组合式缓存器130单向通到一级指令缓存器121。
一级数据缓存器123与标量数据路径侧A 115中的寄存器文件经由总线143交换数据。优选地,总线143是64位总线。一级数据缓存器123与矢量数据路径侧B 116中的寄存器文件经由总线144交换数据。优选地,总线144是512位总线。总线143和144被图示说明为双向支持中央处理单元110数据读取和数据写入两者。一级数据缓存器123与二级组合式缓存器130经由总线145交换数据。优选地,总线145是512位总线。总线145被图示说明为双向支持中央处理单元110数据读取和数据写入两者的缓存服务。
如本领域已知的,在缓存命中之后(如果请求的数据存储在一级数据缓存器123中),CPU数据请求直接从一级数据缓存器123提取。在缓存错失之后(指定的数据没有存储在一级数据缓存器123中),在二级组合式缓存器130中寻找该数据。该请求数据的存储器位置在二级组合式缓存器130中或命中或错失。命中是由二级组合式缓存器130服务。错失是由另一级缓存器(未图示说明)或由主存储器(未图示说明)服务。如本领域已知的,所请求的指令可以同时供应到一级数据缓存器123和中央处理单元核心110两者以加速使用。
二级组合式缓存器130将第一数据流的数据经由总线146供应到流引擎125。优选地,总线146是512位总线。流引擎125将该第一数据流的数据经由总线147供应到矢量数据路径侧B116的功能单元。优选地,总线147是512位总线。二级组合式缓存器130将第二数据流的数据经由总线148供应到流引擎125。优选地,总线148是512位总线。流引擎125将该第二数据流的数据经由总线149供应到矢量数据路径侧B116的功能单元。优选地,总线149是512位总线。根据本公开的各种示例,总线146、147、148和149被图示说明为从二级组合式缓存器130单向通到流引擎125并且通到矢量数据路径侧B116。
在缓存命中之后(如果请求的数据存储在二级组合式缓存器130中),流引擎125数据请求直接从二级组合式缓存器130提取。在缓存错失之后(指定的数据没有存储在二级组合式缓存器130中),从另一级缓存器(未图示说明)或从主存储器(未图示说明)寻找该数据。在一些示例中,一级数据缓存器123缓存未存储在二级组合式缓存器130中的数据在技术上是可行的。如果支持该操作,则根据在二级组合式缓存器130中错失的流引擎125数据请求,二级组合式缓存器130应该对于流引擎125请求的数据监听一级数据缓存器123。如果一级数据缓存器123存储该数据,则其监听响应将包括随后被供应以服务流引擎125请求的数据。如果一级数据缓存器123没有存储该数据,则其监听响应将指示此结果并且二级组合式缓存器130必须服务来自另一级缓存器(未图示说明)或来自主存储器(未图示说明)的这一流引擎125请求。
在一个示例中,根据题为“UNIFIED MEMORY SYSTEM ARCHITECTURE INCLUDINGCACHE AND DIRECTLY ADDRESSABLE STATIC RANDOM ACCESS MEMORY”的美国专利No.6,606,686,一级数据缓存器123和二级组合式缓存器130两者都可以被配置为选定数量的缓存器或直接可寻址的存储器。
图2进一步说明标量数据路径侧A 115和矢量数据路径侧B116中的功能单元和寄存器文件的细节。标量数据路径侧A 115包括全局标量寄存器文件(RF)211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213和D1/D2局部寄存器文件214。标量数据路径侧A 115包括L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226。矢量数据路径侧B 116包括全局矢量寄存器文件231、L2/S2局部寄存器文件232、M2/N2/C局部寄存器文件233和断言寄存器文件214。矢量数据路径侧B116包括L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246。在功能单元可以从哪个寄存器文件读取或者可以写入哪个寄存器文件上存在限制。这些将在下面详述。
标量数据路径侧A 115包括L1单元221。L1单元221通常接受两个64位操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211或L1/S1局部寄存器文件212中的指令指定的寄存器调用的。L1单元221优选执行以下指令选择的操作:64位加/减操作;32位最小/最大操作;8位单指令多数据(SIMD)指令(诸如绝对值求和、最小值和最大值确定);循环最小/最大操作以及寄存器文件之间的各种移动操作。结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括S1单元222。S1单元222通常接受两个64位操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211或L1/S1局部寄存器文件212中的指令指定的寄存器调用的。S1单元222优选执行与L1单元211相同类型的操作。由L1单元211和S1单元222支持的数据处理操作之间可以选择性地存在轻微变化。结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括M1单元223。M1单元223通常接受两个64位操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211或M1/N1局部寄存器文件213中的指令指定的寄存器调用的。M1单元223优选执行以下指令选择的操作:8位乘法操作;复杂的点积操作;32位计数操作;复杂的共轭乘法操作以及按位逻辑操作、移位、加和减。结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括N1单元224。N1单元224通常接受两个64位操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211或M1/N1局部寄存器文件213中的指令指定的寄存器调用的。N1单元224优选执行与M1单元223相同类型的操作。可以存在同时采用M1单元223和N1单元224两者的某些双重操作(称为成双发布的指令)。结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括D1单元225和D2单元226。D1单元225和D2单元226通常均接受两个64位操作数并且均产生一个64位结果。D1单元225和D2单元226通常执行地址计算以及相应的加载和存储操作。D1单元225用于64位的标量加载和存储。D2单元226用于512位的矢量加载和存储。优选地,D1单元225和D2单元226也执行:对加载和存储数据进行调换、打包以及拆包;64位SIMD算法操作以及64位按位逻辑操作。D1/D2局部寄存器文件214将通常存储用于对相应的加载和存储进行地址计算的基础地址和偏移地址。这两个操作数都是从全局标量寄存器文件211或D1/D2局部寄存器文件214中的指令指定的寄存器调用的。计算的结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
矢量数据路径侧B116包括L2单元241。L2单元241通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231、L2/S2局部寄存器文件232或断言寄存器文件234中的指令指定的寄存器调用的。除了更宽的512位数据之外,L2单元241优选执行与L1单元221类似的指令。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232、M2/N2/C局部寄存器文件233或断言寄存器文件214的指令指定的寄存器中。
矢量数据路径侧B116包括S2单元242。S2单元242通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231、L2/S2局部寄存器文件232或断言寄存器文件234中的指令指定的寄存器调用的。S2单元242优选与S1单元222类似地执行指令。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232、M2/N2/C局部寄存器文件233或断言寄存器文件214的指令指定的寄存器中。
矢量数据路径侧B116包括M2单元243。M2单元243通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231或M2/N2/C局部寄存器文件233中的指令指定的寄存器调用的。除了更宽的512位数据之外,M2单元243优选执行与M1单元223类似的指令。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232或M2/N2/C局部寄存器文件233的指令指定的寄存器中。
矢量数据路径侧B116包括N2单元244。N2单元244通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231或M2/N2/C局部寄存器文件233中的指令指定的寄存器调用的。N2单元244优选执行与M2单元243相同类型的操作。可以存在同时采用M2单元243和N2单元244两者的某些双重操作(称为成双发布的指令)。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232或M2/N2/C局部寄存器文件233的指令指定的寄存器中。
矢量数据路径侧B116包括C单元245。C单元245通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231或M2/N2/C局部寄存器文件233中的指令指定的寄存器调用的。C单元245优选执行:“搜查”和“搜索”指令;每个时钟周期高达512个2位PN*8位乘法的I/Q复杂乘法;8位和16位的绝对差值求和(SAD)计算,每个时钟周期高达512个SAD;水平加法和水平最小/最大指令;以及矢量排列指令。C单元245还包括用于控制C单元245指令的某些操作的4个矢量控制寄存器(CUCR0到CUCR3)。控制寄存器CUCR0到CUCR3用作某些C单元245操作的操作数。控制寄存器CUCR0到CUCR3优选用于控制通用排列指令(VPERM),并且用作SIMD多重点积操作(DOTPM)和SIMD多重绝对差值求和(SAD)操作的掩码。控制寄存器CUCR0优选用于存储伽罗瓦(Galois)域乘法操作(GFMPY)的多项式。控制寄存器CUCR1优选用于存储伽罗瓦域多项式发生器函数。
矢量数据路径侧B116包括P单元246。P单元246在局部断言寄存器文件234的寄存器上执行基础逻辑操作。P单元246具有从断言寄存器文件234读取和对断言寄存器文件234写入的直接访问权。这些操作包括单寄存器一元操作,诸如:NEG(否定),其将单个寄存器的每个位反转;BITCNT(位计数),其返回单个寄存器中具有预定数字状态(1或0)的位的数量的计数;RMBD(最右位检测),其返回从最低有效位位置(最右)到具有预定数字状态(1或0)的第一位位置的位位置的数量;DECIMATE,其选择待输出的每个指令指定的第N(第1、第2、第4等)位;以及EXPAND,其将每个位重复指令指定的N次(2、4等)。这些操作包括双寄存器二元操作,诸如:AND,其将两个寄存器的数据按位取“与”;NAND,其将两个寄存器的数据按位取“与”和“非”;OR,其将两个寄存器的数据按位取“或”;NOR,其将两个寄存器的数据按位取“或”和“非”;以及XOR,其对两个寄存器的数据取“异或”。这些操作包括将数据从断言寄存器文件234的断言寄存器转移到另一个指定断言寄存器或转移到全局矢量寄存器文件231中的指定数据寄存器。P单元246的普通预期用途包括用于控制进一步SIMD矢量操作的SIMD矢量比较结果的操纵。BITCNT指令可以用于对断言寄存器中“1”的数量进行计数以确定来自断言寄存器的有效数据元素的数量。
图3说明全局标量寄存器文件211。存在16个独立的64位宽标量寄存器,其标记为A0-A15。全局标量寄存器文件211的每个寄存器可以被读取或写入作为64位的标量数据。所有的标量数据路径侧A 115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以对全局标量寄存器文件211读取或写入。全局标量寄存器文件211可以被读取为32位或读取为64位并且可以仅被写入为64位。指令的执行确定读取数据的尺寸。矢量数据路径侧B116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)可以在下面将详述的限制条件下经由交叉路径117从全局标量寄存器文件211读取。
图4说明D1/D2局部寄存器文件214。存在16个独立的64位宽的标量寄存器,其标记为D0-D16。D1/D2局部寄存器文件214的每个寄存器可以被读取或写入作为64位的标量数据。所有的标量数据路径侧A 115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以对全局标量寄存器文件211写入。仅D1单元225和D2单元226可以从D1/D2局部标量寄存器文件214读取。预计存储在D1/D2局部寄存器文件214中的数据将包括用于地址计算的基础地址和偏移地址。
图5说明L1/S1局部寄存器文件212。图5中说明的示例具有8个独立的64位宽的标量寄存器,其标记为AL0-AL7。优选的指令编码(见图15)允许L1/S1局部寄存器文件212包括高达16个寄存器。图5的示例仅实施8个寄存器以降低电路尺寸和复杂性。L1/S1局部寄存器文件212的每个寄存器可以被读取或写入作为64位的标量数据。所有的标量数据路径侧A115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以对L1/S1局部寄存器文件212写入。仅L1单元221和S1单元222可以从L1/S1局部寄存器文件212读取。
图6说明M1/N1局部寄存器文件213。图6中说明的示例具有8个独立的64位宽的标量寄存器,其被标记为AM0-AM7。优选的指令编码(见图15)允许M1/N1局部寄存器文件213包括高达16个寄存器。图6的示例仅实施8个寄存器以降低电路尺寸和复杂性。M1/N1局部寄存器文件213的每个寄存器可以被读取或写入作为64位的标量数据。所有的标量数据路径侧A115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以对M1/N1局部寄存器文件213写入。仅M1单元223和N1单元224可以从M1/N1局部寄存器文件213读取。
图7说明全局矢量寄存器文件231。存在16个独立的512位宽的矢量寄存器。全局矢量寄存器文件231的每个寄存器可以被读取或写入作为64位的标量数据,标记为B0-B15。指令类型确定数据尺寸。所有的矢量数据路径侧B116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)可以对全局矢量寄存器文件231读取或写入。标量数据路径侧A115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以在下面将详述的限制条件下经由交叉路径117从全局矢量寄存器文件231读取。
图8说明P局部寄存器文件234。存了8个独立的64位宽的寄存器,其标记为P0-P7。P局部寄存器文件234的每个寄存器可以被读取或写入作为64位的标量数据。矢量数据路径侧B116功能单元L2单元241、S2单元242、C单元244和P单元246可以对P局部寄存器文件234写入。仅L2单元241、S2单元242和P单元246可以从P局部寄存器文件234读取。P局部寄存器文件234的普通预期用途包括:从L2单元241、S2单元242或C单元244写入一位SIMD矢量比较结果;由P单元246操纵SIMD矢量比较结果;以及使用操纵结果用于控制进一步的SIMD矢量操作。
图9说明L2/S2局部寄存器文件232。图9中说明的示例具有8个独立的512位宽的矢量寄存器。优选的指令编码(见图15)允许L2/S2局部寄存器文件232包括高达16个寄存器。图9的示例仅实施8个寄存器以降低电路尺寸和复杂性。L2/S2局部矢量寄存器文件232的每个寄存器可以被读取或写入作为64位的标量数据,标记为BL0-BL7。L2/S2局部矢量寄存器文件232的每个寄存器可以被读取或写入作为512位的矢量数据,标记为VBL0-VBL7。指令类型确定数据尺寸。所有的矢量数据路径侧B116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)可以对L2/S2局部矢量寄存器文件232写入。仅L2单元241和S2单元242可以从L2/S2局部矢量寄存器文件232读取。
图10说明M2/N2/C局部寄存器文件233。图10中说明的示例具有8个独立的512位宽的矢量寄存器。优选的指令编码(见图15)允许M2/N2/C局部矢量寄存器文件233包括高达16个寄存器。图10的示例仅实施8个寄存器以降低电路尺寸和复杂性。M2/N2/C局部矢量寄存器文件233的每个寄存器可以被读取或写入作为64位的标量数据,标记为BM0-BM7。M2/N2/C局部矢量寄存器文件233的每个寄存器可以被读取或写入作为512位的矢量数据,标记为VML0-VML7。所有的矢量数据路径侧B116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)可以对M2/N2/C局部矢量寄存器文件233写入。仅M2单元243、N2单元244和C单元245可以从M2/N2/C局部矢量寄存器文件233读取。
对由一侧的所有功能区可访问的全局寄存器文件和仅由一侧的一些功能单元可访问的局部寄存器文件的规定是设计选择。本公开的一些示例仅采用对应于所公开的全局寄存器文件的一类寄存器文件。
返回参考图2,交叉路径117允许标量数据路径侧A 115和矢量数据路径侧B 116之间的有限数据交换。在每个操作周期期间,一个64位数据字可以被从全局标量寄存器文件A211调用以用作矢量数据路径侧B116的一个或多个功能单元的操作数,并且一个64位数据字可以被从全局矢量寄存器文件231调用以用作标量数据路径侧A 115的一个或多个功能单元的操作数。任何标量数据路径侧A115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)都可以从全局矢量寄存器文件231读取64位操作数。该64位操作数是全局矢量寄存器文件231的访问的寄存器中的512位数据的最低有效位。复数个标量数据路径侧A115功能单元可以采用与相同操作周期期间的操作数相同的64位交叉路径数据。然而,在任何单个操作周期中,仅一个64位操作数被从矢量数据路径侧B116转移到标量数据路径侧A115。任何矢量数据路径侧B 116(L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)都可以从全局标量寄存器文件211读取64位操作数。如果相应的指令是标量指令,则交叉路径操作数数据被视为任意其他64位操作数。如果相应的指令是矢量指令,则操作数的高448位由零填充。复数个矢量数据路径侧B116功能单元可以采用与相同操作周期期间的操作数相同的64位交叉路径数据。在任何单个操作周期中,仅一个64位操作数被从标量数据路径侧A115转移到矢量数据路径侧B116。
流引擎125在某些受限的情况下传输数据。流引擎125控制两个数据流。一个流由特定类型的元素序列构成。对这些流进行操作的程序顺序读取数据,进而在每个元素上操作。每个流具有下列基本属性。流数据具有良好定义的开始时间和结束时间。在整个流中,流数据具有固定的元素尺寸和类型。流数据具有固定的元素序列。因此程序不能在流中随机寻找。流数据仅在激活时被读取。当程序从流读取时不能同时对该流写入。一旦流被打开,则流引擎125:计算地址;从二级统一缓存器(其可能需要来自更高级的存储器的缓存服务)提取所定义的数据类型;执行数据类型操纵,诸如零扩展、符号扩展、数据元素整理/调换(诸如矩阵转置);以及将数据直接传送到CPU 110中的程序化数据寄存器文件。因此,流引擎125有益于对表现良好的数据的实时数字滤波操作。流引擎125从相应的CPU释放这些存储器提取任务以使能其他处理功能。
流引擎125提供以下益处。流引擎125允许多维存储器访问。流引擎125增加功能单元的可用带宽。由于流缓冲器旁通一级数据缓存器123,流引擎125使缓存错失拖延(stalls)的数量最小化。流引擎125降低维持循环所需要的标量操作的数量。流引擎125管理地址指针。流引擎125处理自动释放用于其他计算的地址生成指令间隙(slot)以及D1单元225和D2单元226的地址生成。
CPU 110对指令流水线进行操作。指令在下面进一步描述的固定长度的指令包中提取。所有指令需要相同数量的流水线阶段来用于提取和解码,但是需要不同数量的执行阶段。
图11说明下列流水线阶段:程序提取阶段1110、分派和解码阶段1120以及执行阶段1130。对于所有指令,程序提取阶段1110包括三级。对于所有指令,分派和解码阶段1120包括三级。执行阶段1130根据指令包括一到四级。
提取阶段1110包括程序地址生成级1111(PG)、程序访问级1112(PA)和程序接收级1113(PR)。在程序地址生成级1111(PG)期间,在CPU中产生程序地址并且将读取请求发送到一级指令缓存器L1I的存储器控制器。在程序访问级1112(PA)期间,一级指令缓存器L1I处理该请求、访问其存储器中的数据并且将提取包发送到CPU边界。在程序接收级1113(PR)期间,CPU寄存该提取包。
指令总是被一次提取十六个32位宽的间隙,构成提取包。图12说明单个提取包的16个指令1201-1216。提取包在512位(16字)边界上对准。一个示例采用固定的32位指令长度。固定长度的指令是有利的,其原因有以下几个。固定长度的指令使得解码器容易对准。恰当对准的指令提取可以将复数个指令加载到并行指令解码器中。当预定指令对准存储在与固定指令包提取耦连的存储器(提取包在512位边界上对准)中时,预定指令对准可以获得这种恰当对准的指令提取。对准的指令提取允许并行解码器在指令尺寸的提取位上的操作。可变长度的指令需要在每个指令可以被解码之前定位每个指令边界的初始步骤。固定长度指令集通常允许更规则的指令字段的布局。这简化每个解码器的结构,有益于宽发布(wide issue)VLIW中央处理器。
个体指令的执行由每个指令中的p位部分地控制。优选地,该p位是32位宽的间隙的位0。p位确定指令是否与下一个指令并行执行。从较低地址到较高地址扫描指令。如果指令的p位是1,则下一个跟随的指令(较高存储器地址)与该指令并行执行(与该指令在同一个周期内)。如果指令的p位是0,则下一个跟随的指令在该指令之后的周期内被执行。
CPU 110和一级指令缓存器L1I 121流水线相互解耦。从一级指令缓存器L1I返回的提取包可以采用不同数量的时钟周期,这取决于外部情况,诸如是否在一级指令缓存器121中命中或在二级组合式缓存器130中命中。因此程序访问级1112(PA)可以采用几个时钟周期来代替如在其他级中的1个时钟周期。
并行执行的指令组成执行包。在一个示例中,执行包可以包括高达十六个指令。执行包中任何两个指令都不可以使用相同的功能单元。间隙是以下五个类型之一:1)在CPU110的功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225、D2单元226、L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)的一个上执行的自持式指令;2)无单位指令,诸如NOP(无操作)指令或多重NOP指令;3)分支指令;4)常量字段扩展;以及5)条件码扩展。这些间隙类型中的一些将在下面进一步解释。
分派和解码阶段1120包括指令分派到适当执行单元级1121(DS);指令预解码级1122(DC1);以及指令解码及操作数读取级1123(DC2)。在指令分派到适当执行单元级1121(DS)期间,提取包被划分成执行包中并且分配给合适的功能单元。在指令预解码级1122(DC1)期间,源寄存器、目的地寄存器和相关联的路径被解码用于执行功能单元中的指令。在指令解码及操作数读取级1123(DC2)期间,完成更加详细的单元解码,并且从寄存器文件读取操作数。
执行阶段1130包括执行级1131-1135(E1-E5)。不同类型的指令需要不同数量的这些级以完成其执行。流水线的这些级对于理解CPU周期边界处的设备状态起到重要的作用。
在执行1级1131(E1)期间,估计指令的条件并且对操作数进行操作。如图11所图示说明的,执行1级1131可以接收来自流缓冲器1141和寄存器文件之一(图示性示出为1142)的操作数。对于加载和存储指令,执行地址生成并且将地址修改写入到寄存器文件。对于分支指令,PG阶段中的分支提取包受到影响。如图11所图示说明的,加载和存储指令访问存储器(在此图示性示出为存储器1151)。对于单周期指令,结果被写入到目的地寄存器文件。这假设指令的任何条件都被估计为正确。如果条件被估计为错误,则在执行1级1131之后指令不写入任何结果或不具有任何流水线操作。
在执行2级1132(E2)期间,加载指令将地址发送到存储器。存储指令将地址和数据发送到存储器。如果发生饱和,则使结果饱和的单周期指令设置控制状态寄存器(CSR)中的SAT位。对于2周期指令,结果被写入目的地寄存器文件。
在执行3级1133(E3)期间,执行数据存储器访问。如果发生饱和,则使结果饱和的任何多重指令设置控制状态寄存器(CSR)中的SAT位。对于3周期指令,结果被写入目的地寄存器文件。
在执行4级1134(E4)期间,加载指令将数据带到CPU边界。对于4周期指令,结果被写入目的地寄存器文件。
在执行5级1135(E5)期间,加载指令将数据写入到寄存器中。这在图11中通过从存储器1151到执行5级1135的输入来图示说明。
在某些情况下,可以调用处理器100(例如,DSP)来计算或执行FFT,其产生相对于输入到FFT计算的数据而言无序或位反转的输出数据。如上所述,可能希望以有序(例如,不是位反转)的方式存储FFT的输出。然而,对FFT的位反转输出数据进行重新排序是计算密集的,并且可能需要多个指令。由于FFT可以由DSP 100频繁地计算,所以不希望增加指令开销和/或计算时间。
另外,位反转数据元素所需的置换(permutation)可能需要置换指令,该置换指令在C单元245上进行调度,从而在FFT计算的最后级期间增加了计算开销,并使C单元245无法用于其他操作。根据本公开的示例,位反转矢量存储指令允许在将FFT计算的输出或结果写入或存储到存储器时发生位反转。位反转矢量存储指令可以提高FFT循环性能,并减少实现FFT计算所需的指令的整体尺寸和复杂性。
图13A和图13B说明了示例性二进制索引值的位反转。图13A示出了表1300,该表1300包括列1302中的有序索引值和列1304中的对应的(例如,同一行)位反转的无序索引值。如所解释的,位反转是位的转置,其中(给定字段宽度的)最高有效位变为最低有效位,依此类推。在图13A的示例性表1300中,对于字段宽度4,在列1302和列1304的对应元素之间执行位反转,从而允许表示0-15的十进制值索引。例如,二进制索引值“0001”经反转变为“1000”,而二进制索引值“1111”经反转(尽管保持不变)变为“1111”。
图13B示出了表1320,该表1320包括在列1322中的有序索引值和在列1324中的对应的(例如,同一行)位反转的无序索引值。在图13B的示例性表1320中,对于字段宽度3,在列1322和列1324的对应元素之间执行位反转,从而允许表示0-7的十进制值索引。例如,二进制索引值“001”经反转变为“100”,而二进制索引值“111”经反转(尽管保持不变)变为“111”。
在图13A和13B中,索引值被示为二进制值,以便以简单的方式说明位反转操作。在下文中,为了易于解释,将索引值称为十进制值。此外,应当理解,给定索引值的位反转结果取决于字段宽度。例如,对于字段宽度3,索引值7(例如,二进制值“111”)在位反转时导致索引值7(例如,二进制值“111”)。然而,对于字段宽度4,索引值7(例如,二进制值“0111”)在位反转时导致索引值14(例如,二进制值“1110”)。
如表1300、表1320所示,位反转是可交换的操作。因此,在一些示例中,可以在对一组数据元素执行FFT之前利用位反转矢量存储指令。例如,当执行16点FFT时,位反转矢量存储指令可以首先用于以位反转方式将16个数据元素存储在存储器(例如,一级数据缓存器123)中。然后,将存储器中的位反转数据元素用作FFT计算的输入,这导致FFT输出元素有序布置。在另一个示例中,对有序输入元素执行16点FFT,这导致无序或位反转输出元素。然后,将位反转矢量存储指令用于以有序方式将FFT计算的无序输出存储在存储器中。
图14A和图14B示出了位反转矢量存储指令在示例性输入/输出矢量对1400、1420上的应用。在图14A的示例中,矢量1400包括512位矢量,并且以双字为基础(例如,矢量1400的每个通道是双字或64位)实现位反转矢量存储指令。因此,矢量1400包括8个通道,其包含具有索引值0-7(具有字段宽度3)的数据元素。输入矢量1402可以包含在矢量寄存器中,诸如上面解释的全局矢量寄存器文件231中包含的那些寄存器。输出矢量1404可以被存储在存储器(例如,一级数据缓存器123)中。矢量寄存器(输入矢量1402)和在存储器中的位置(输出矢量1404)可以由位反转矢量存储指令中标识的源寄存器指定。输入矢量1402的8个元素具有相关联索引值,这些索引值连续地从0到7进行数字标记。数据元素的索引值标识特定的数据元素,并且与它的值无关。出于本示例的目的,数据元素的实际值被视为任意值。
输出矢量1404,其被存储在存储器中的由(一个或多个)源寄存器标识的位置处,该(一个或多个)源寄存器包含地址数据,并且在一些示例中,包括偏移数据。如以上关于图13B所解释的,在将输出矢量1404存储在存储器中之前,对输入矢量1402的数据元素(例如,源数据)进行重新排序以创建输出矢量1404(例如,重新排序的源数据)。特别地,来自输入矢量1402的每个初始数据元素被相对于初始数据元素的相关联索引值具有位反转索引值的数据元素替换。例如,索引值为0(例如,二进制值“000”)的初始数据元素被自身替换,因为值0的位反转也会导致值0;而索引值为1(例如,二进制值“001”的初始数据元素被索引值为4(例如,二进制值“100”)的数据元素替换;以此类推。
在图14B的示例中,矢量1420包括512位矢量,并且以字为基础(例如,矢量1420的每个通道是一个字或32位)实现位反转矢量存储指令。因此,矢量1420包括16个通道,其包含具有索引值0-15(具有字段宽度4)的数据元素。输入矢量1422可以包含在矢量寄存器中,诸如上面解释的全局矢量寄存器文件231中包含的那些。输出矢量1424可以被存储在存储器(例如,一级数据缓存器123)中。矢量寄存器(输入矢量1422)和在存储器中的位置(输出矢量1424)可以由位反转矢量存储指令中标识的源寄存器指定。输入矢量1422的16个元素具有相关联索引值,这些索引值连续地从0到15进行数字标记。数据元素的索引值标识特定的数据元素,并且与它的值无关。出于本示例的目的,数据元素的实际值被视为任意值。
输出矢量1404,其被存储在存储器中的由(一个或多个)源寄存器标识的位置处,该(一个或多个)源寄存器包含地址数据,并且在一些示例中,包括偏移数据。如以上关于图13A所解释的,在将输出矢量1404存储在存储器中之前,对输入矢量1422的数据元素(例如,源数据)进行重新排序以创建输出矢量1424(例如,重新排序的源数据)。特别地,来自输入矢量1422的每个初始数据元素被相对于初始数据元素的相关联索引值具有位反转索引值的数据元素替换。例如,索引值为0(例如,二进制值“0000”)的初始数据元素被自身替换,因为值0的位反转也会导致值0;而索引值为1(例如,二进制值“0001”)的初始数据元素被索引值为8(例如,二进制值“1000”)的数据元素替换;以此类推。
图14A和图14B中给出的特定数字示例(例如,分别是8元素矢量和16元素矢量)无意限制本公开的范围。在另一个示例中,矢量1400、矢量1420可以包括包含数据元素(以及具有字段宽度2的相关联索引值)的4个通道、包含数据元素(以及具有字段宽度5的相关联索引值)的32个通道,等等。此外,尽管矢量1400、1420被描述为512位矢量,但矢量1400、1420也可以具有其他尺寸。
图15A说明本公开的示例使用的功能单元指令的指令编码1500的示例。其他执行编码是可行的并且在本公开的范围内。每个指令由32位组成并且控制各个可控功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225、D2单元226、L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)中的一个的操作。位字段被定义如下。
src3字段1502(位26至位31)在对应的矢量寄存器文件231中指定源寄存器,该源寄存器包含源数据(例如,512位矢量),根据位反转矢量存储指令,在存储在存储器中之前,将根据以上描述重新排序该源数据(例如,具有位反转排序的数据元素)。
在示例性指令编码1500中,位25包含用作占位符的常数值。
src2字段1504(位20至位24)指定偏移数据,而src1字段1506(位15至位19)指定地址数据,偏移数据和地址数据可以结合使用以指定响应于位反转矢量存储指令的执行而将矢量(例如,重新排序的源数据)写入存储器中的起始地址。
模式字段1508(位12至位14)指定寻址模式。
操作码字段1510(位5至位11)指定适当的指令选项(例如,源数据的通道是字(32位)还是双字(64位))。例如,图15A的操作码字段1510对应于双字位反转,例如,如图14A所示。图15B说明了与图15A中所示的指令编码相同的指令编码1520,不同之处在于指令编码1520包括对应于单个字位反转的操作码字段1530(例如,如图14B所示)。单元字段1512(位2至位4)为所使用的功能单元和所执行的操作提供了明确的指明,在这种情况下为D1单元225或D2单元226。除了以上详述的指令选项之外,操作码的详细解释通常超出了本公开的范围。
s位1514(位1)指明标量数据路径侧A 115或矢量数据路径侧B 116。如果s=0,则选择标量数据路径侧A 115。这将功能单元限制到图2中图示说明的L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226以及相应的寄存器文件。类似地,s=1选择矢量数据路径侧B116,其将功能单元限制到图2中图示说明的L2单元241、S2单元242、M2单元243、N2单元244、P单元246以及相应的寄存器文件。
p位1516(位0)标记执行包。p位确定该指令是否与随后的指令并行执行。从较低地址到较高地址扫描p位。如果对于当前指令p=1,则下一个指令与当前指令并行执行。如果对于当前指令p=0,则下一个指令在当前指令之后的周期中执行。并行执行的所有指令组成执行包。执行包可以包含高达十二个指令。执行包中的每个指令必须使用不同的功能单元。
图16示出了根据本公开的示例的方法1600的流程图。方法1600在框1602中开始,其中指定包含源数据的第一源寄存器、包含地址数据的第二源寄存器以及可选地包含偏移数据的第三源寄存器。第一源寄存器、第二源寄存器和第三源寄存器在位反转矢量存储指令的字段中被指定,诸如以上参考图15被描述分别为src1字段1506、src2字段1504和src3字段1502。在某些情况下,源数据包括划分为8个或16个数据元素的512位矢量。然而,在其他情况下,源数据可以具有不同的尺寸,并划分为不同数量的数据元素;本公开的范围不限于特定的寄存器尺寸或划分方案。
方法1600在框1604中继续,其中特别是通过以下方式执行位反转矢量存储指令:通过针对每个通道,用相对于初始数据元素的相关联索引值具有位反转索引值的数据元素替换该通道中的初始数据元素,来创建重新排序的源数据。
方法1600在框1606中继续,其中在由地址数据指定的位置处开始,将重新排序的源数据存储在诸如一级数据缓存器123的存储器中的连续位置中。在另一示例中,存储器中的开始位置由第二源寄存器指定的地址数据和可选地由第三源寄存器指定的偏移数据来确定。
在前述讨论和权利要求中,术语“包括”和“包含”以开放式方式使用,因此应解释为表示“包括但不限于……”。而且,术语“耦合”或“耦接”旨在表示间接或直接连接。因此,如果第一设备耦合到第二设备,则该连接可以是通过直接连接或通过经由其他设备和连接的间接连接。类似地,耦合在第一组件或位置与第二组件或位置之间的设备可以通过直接连接或通过经由其他设备和连接的间接连接。“被配置为”执行任务或功能的元件或特征可以由制造商在制造时进行配置(例如,编程或结构设计)以执行功能和/或可以是由用户在制造后可配置的(或可重新配置的)以执行功能和/或其他附加或替代功能。可以通过设备的固件和/或软件编程、通过设备的硬件组件和互连的构造和/或布局或其组合来进行配置。另外,在前面的讨论中,短语“接地”或类似术语的使用旨在包括机箱接地、大地接地、浮置接地、虚拟接地、数字接地、公共接地和/或适用于或适合于本公开的教导的任何其他形式的接地连接。除非另有说明,否则在值之前的“大约”、“近似”或“基本上”是指所述值的+/-10%。
以上讨论意在说明本公开的原理和各种示例。一旦完全理解上述公开,则许多变化和修改对于本领域技术人员将变得明显。意图将随附权利要求解释为包含所有这样的变化和修改。
Claims (18)
1.一种响应于位反转矢量存储指令而在处理器中存储源数据的方法,所述方法包括:
在所述位反转矢量存储指令的相应字段中,指定包含所述源数据的第一源寄存器和包含地址数据的第二源寄存器,其中所述第一源寄存器包括多个通道,并且每个通道包含具有相关联索引值的初始数据元素;以及
执行所述位反转矢量存储指令,其中执行所述位反转矢量存储指令还包括:
通过针对每个通道,用相对于所述初始数据元素的所述相关联索引值具有位反转索引值的数据元素替换所述通道中的所述初始数据元素,来创建重新排序的源数据;以及
在由所述地址数据指定的位置处开始,将所述重新排序的源数据存储在存储器中的连续位置中。
2.根据权利要求1所述的方法,其中所述源数据包括512位矢量。
3.根据权利要求2所述的方法,其中所述第一源寄存器的所述通道包括32位通道。
4.根据权利要求3所述的方法,其中所述数据元素的所述索引值为0-15,并且所述源数据中的所述初始数据元素的顺序给出为:
0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15;并且
其中所述重新排序的源数据中的所述数据元素的顺序给出为:
0、8、4、12、2、10、6、14、1、9、5、13、3、11、7、15。
5.根据权利要求2所述的方法,其中所述第一源寄存器的所述通道包括64位通道。
6.根据权利要求5所述的方法,其中所述数据元素的所述索引值为0-7,并且所述源数据中的所述初始数据元素的顺序给出为:
0、1、2、3、4、5、6、7;并且
其中所述重新排序的源数据中的所述数据元素的顺序给出为:
0、4、2、6、1、5、3、7。
7.根据权利要求1所述的方法,还包括:
在所述位反转矢量存储指令的字段中指定包含偏移数据的第三源寄存器;以及
在由所述地址数据和所述偏移数据指定的位置处开始,将所述重新排序的源数据存储在所述存储器中的连续位置中。
8.根据权利要求1所述的方法,其中所述存储器包括一级数据缓存器。
9.根据权利要求1所述的方法,其中所述源数据包括快速傅立叶变换计算的输出。
10.一种数据处理器,包括:
第一源寄存器,其被配置为包含源数据;以及
第二源寄存器,其被配置为包含地址数据;
其中所述第一源寄存器包括多个通道,并且每个通道包含具有相关联索引值的初始数据元素;
其中,响应于单个位反转矢量存储指令的执行,所述数据处理器被配置为:
通过针对每个通道,用相对于所述初始数据元素的所述相关联索引值具有位反转索引值的数据元素替换所述通道中的所述初始数据元素,来创建重新排序的源数据;以及
在由所述地址数据指定的位置处开始,将所述重新排序的源数据存储在存储器中的连续位置中。
11.根据权利要求10所述的数据处理器,其中所述源数据包括512位矢量。
12.根据权利要求11所述的数据处理器,其中所述第一源寄存器的所述通道包括32位通道。
13.根据权利要求12所述的数据处理器,其中所述数据元素的所述索引值为0-15,并且所述源数据中的所述初始数据元素的顺序给出为:
0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15;并且
其中所述重新排序的源数据中的所述数据元素的顺序给出为:
0、8、4、12、2、10、6、14、1、9、5、13、3、11、7、15。
14.根据权利要求11所述的数据处理器,其中所述第一源寄存器的所述通道包括64位通道。
15.根据权利要求14所述的数据处理器,其中所述数据元素的所述索引值为0-7,并且所述源数据中的所述初始数据元素的顺序给出为:
0、1、2、3、4、5、6、7;并且
其中所述重新排序的源数据中的所述数据元素的顺序给出为:
0、4、2、6、1、5、3、7。
16.根据权利要求10所述的数据处理器,还包括包含偏移数据的第三源寄存器,其中,响应于所述单个位反转矢量存储指令的执行,所述数据处理器还被配置为:在由所述地址数据和所述偏移数据指定的位置处开始,将所述重新排序的源数据存储在所述存储器中的连续位置中。
17.根据权利要求10所述的数据处理器,其中所述存储器包括一级数据缓存器。
18.根据权利要求10所述的数据处理器,其中所述源数据包括快速傅立叶变换计算的输出。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/422,602 | 2019-05-24 | ||
US16/422,602 US20200371793A1 (en) | 2019-05-24 | 2019-05-24 | Vector store using bit-reversed order |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111984314A true CN111984314A (zh) | 2020-11-24 |
Family
ID=73442292
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010410200.XA Pending CN111984314A (zh) | 2019-05-24 | 2020-05-15 | 使用位反转顺序的矢量存储 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20200371793A1 (zh) |
CN (1) | CN111984314A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114582275A (zh) * | 2022-03-10 | 2022-06-03 | 中科芯集成电路有限公司 | 一种led显示驱动芯片的任意正整数组的均匀打散算法 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6432378A (en) * | 1987-07-29 | 1989-02-02 | Nec Corp | Bit inverting and transposing system |
US6006245A (en) * | 1996-12-20 | 1999-12-21 | Compaq Computer Corporation | Enhanced fast fourier transform technique on vector processor with operand routing and slot-selectable operation |
US6272615B1 (en) * | 1997-05-02 | 2001-08-07 | Texas Instruments Incorporated | Data processing device with an indexed immediate addressing mode |
US6366937B1 (en) * | 1999-03-11 | 2002-04-02 | Hitachi America Ltd. | System and method for performing a fast fourier transform using a matrix-vector multiply instruction |
US7107436B2 (en) * | 2003-09-08 | 2006-09-12 | Freescale Semiconductor, Inc. | Conditional next portion transferring of data stream to or from register based on subsequent instruction aspect |
JP2005209060A (ja) * | 2004-01-26 | 2005-08-04 | Hitachi Ltd | アドレス生成装置を含むシステムおよびそのアドレス生成装置 |
US7836116B1 (en) * | 2006-06-15 | 2010-11-16 | Nvidia Corporation | Fast fourier transforms and related transforms using cooperative thread arrays |
US20080228784A1 (en) * | 2007-03-12 | 2008-09-18 | Dempsey James G | Double word compare and swap implemented by using triple single word compare and swap |
US8572147B2 (en) * | 2008-06-30 | 2013-10-29 | Freescale Semiconductor, Inc. | Method for implementing a bit-reversed increment in a data processing system |
US8572148B1 (en) * | 2009-02-23 | 2013-10-29 | Xilinx, Inc. | Data reorganizer for fourier transformation of parallel data streams |
US9104510B1 (en) * | 2009-07-21 | 2015-08-11 | Audience, Inc. | Multi-function floating point unit |
US20120166511A1 (en) * | 2010-12-22 | 2012-06-28 | Hiremath Chetan D | System, apparatus, and method for improved efficiency of execution in signal processing algorithms |
US8787422B2 (en) * | 2011-12-13 | 2014-07-22 | Qualcomm Incorporated | Dual fixed geometry fast fourier transform (FFT) |
CN104115114B (zh) * | 2011-12-23 | 2018-06-12 | 英特尔公司 | 经改进的提取指令的装置和方法 |
US9645820B2 (en) * | 2013-06-27 | 2017-05-09 | Intel Corporation | Apparatus and method to reserve and permute bits in a mask register |
US10078551B2 (en) * | 2013-07-15 | 2018-09-18 | Texas Instruments Incorporated | Streaming engine with error detection, correction and restart |
US10013253B2 (en) * | 2014-12-23 | 2018-07-03 | Intel Corporation | Method and apparatus for performing a vector bit reversal |
-
2019
- 2019-05-24 US US16/422,602 patent/US20200371793A1/en active Pending
-
2020
- 2020-05-15 CN CN202010410200.XA patent/CN111984314A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114582275A (zh) * | 2022-03-10 | 2022-06-03 | 中科芯集成电路有限公司 | 一种led显示驱动芯片的任意正整数组的均匀打散算法 |
Also Published As
Publication number | Publication date |
---|---|
US20200371793A1 (en) | 2020-11-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11989555B2 (en) | Instructions for remote atomic operations | |
CN109144568B (zh) | 将有效位通道作为矢量断言暴露于cpu | |
US9652392B2 (en) | Using L1 cache as re-order buffer | |
US10963247B2 (en) | Vector floating-point classification | |
US20150019836A1 (en) | Register file structures combining vector and scalar data with global and local accesses | |
US20230418605A1 (en) | Vector load and duplicate operations | |
CN111406286B (zh) | 具有数据元素提升的查找表 | |
CN108139911B (zh) | 在vliw处理器的同一执行包中使用有条件扩展槽的指令的有条件执行规格 | |
US12032961B2 (en) | Vector maximum and minimum with indexing | |
US20240028338A1 (en) | Histogram operation | |
US7805590B2 (en) | Coprocessor receiving target address to process a function and to send data transfer instructions to main processor for execution to preserve cache coherence | |
CN106610817B (zh) | 用于采取vliw处理器中的相同执行数据包中的常数扩展槽指定或扩展常数位数的方法 | |
US20230221955A1 (en) | Vector bit transpose | |
CN111984314A (zh) | 使用位反转顺序的矢量存储 | |
US7925862B2 (en) | Coprocessor forwarding load and store instructions with displacement to main processor for cache coherent execution when program counter value falls within predetermined ranges | |
JP3451921B2 (ja) | プロセッサ | |
US11900112B2 (en) | Vector reverse | |
US20240362021A1 (en) | Instructions for remote atomic operations | |
US20230359385A1 (en) | Quick clearing of registers | |
US20200371784A1 (en) | Vector floating-point scale |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |