CN107851017A - 用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法 - Google Patents
用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法 Download PDFInfo
- Publication number
- CN107851017A CN107851017A CN201680043357.5A CN201680043357A CN107851017A CN 107851017 A CN107851017 A CN 107851017A CN 201680043357 A CN201680043357 A CN 201680043357A CN 107851017 A CN107851017 A CN 107851017A
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- data structure
- group
- stored
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 257
- 239000013598 vector Substances 0.000 title claims abstract description 148
- 238000000034 method Methods 0.000 title claims abstract description 31
- 239000000872 buffer Substances 0.000 claims abstract description 129
- 230000001419 dependent effect Effects 0.000 claims abstract description 9
- 230000004044 response Effects 0.000 claims abstract description 9
- 238000003860 storage Methods 0.000 claims description 125
- 238000011068 loading method Methods 0.000 claims description 77
- 230000000694 effects Effects 0.000 claims description 13
- 238000003491 array Methods 0.000 claims description 8
- 238000003780 insertion Methods 0.000 claims description 5
- 230000037431 insertion Effects 0.000 claims description 5
- 230000014759 maintenance of location Effects 0.000 claims description 4
- 238000000547 structure data Methods 0.000 claims 2
- 238000002372 labelling Methods 0.000 claims 1
- 238000005381 potential energy Methods 0.000 abstract 1
- 238000012545 processing Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 14
- 230000004087 circulation Effects 0.000 description 13
- 238000005516 engineering process Methods 0.000 description 9
- 230000005611 electricity Effects 0.000 description 8
- 230000006399 behavior Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 108091006146 Channels Proteins 0.000 description 4
- 238000000151 deposition Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000000605 extraction Methods 0.000 description 3
- 239000012536 storage buffer Substances 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 239000002131 composite material Substances 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 235000019580 granularity Nutrition 0.000 description 2
- 206010038743 Restlessness Diseases 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000004134 energy conservation Methods 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013024 troubleshooting Methods 0.000 description 1
Classifications
-
- 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/8053—Vector processors
- G06F15/8061—Details on data memory access
- G06F15/8069—Details on data memory access using a cache
-
- 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
-
- 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/8053—Vector processors
- G06F15/8061—Details on data memory access
-
- 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/8053—Vector processors
- G06F15/8076—Details on data register access
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
-
- 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/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
- 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/30141—Implementation provisions of register files, e.g. ports
-
- 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
- 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, look ahead
- G06F9/3824—Operand accessing
Abstract
本发明提供了一种用于将多个数据结构从存储器传输到存储在寄存器组中的一个或多个数据元素向量中的设备和方法。该设备具有第一接口电路以接收从存储器获取的数据结构,其中每个数据结构具有相关联的标识符并且包括N个数据元素。提供了具有存储元件阵列的多轴缓冲器电路,其中沿着第一轴线该阵列被组织为N个集合的存储元件,每一集合包括许多VL个存储元件,并且其中沿着第二轴线该阵列被组织为多组N个存储元件,其中每一组包括来自所述N个集合中的每一集合的存储元件。访问控制电路随后将接收到的数据结构的N个数据元素存储在依赖于相关联的标识符选择的所述组的一个组中。响应于所有所需的数据结构已被存储在多轴缓冲器电路中的指示,第二接口电路随后输出存储在多个集合的存储元件中的一个或多个集合中的数据元素作为一个或多个对应的数据元素向量以存储在寄存器组中,每个向量均包括VL个数据元素。这种方法可以显著提高处理这种负载操作的性能,并且可以产生潜在的能源节省。
Description
技术领域
本发明的技术涉及用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法。
背景技术
种用于改进数据处理设备的性能的已知技术是提供电路来支持向量操作的执行。对至少一个向量操作数执行向量操作,其中每个向量操作数包括多个数据元素。然后,向量操作的执行涉及跨一或多个向量操作数内的各个数据元素重复地应用操作。
可以使用向量处理电路(通常称为SIMD(单指令多数据)处理电路)来提供多个并行处理通道,以便对向量操作数内的各个数据元素执行并行操作。
虽然使用这种向量操作可以导致显著的性能优点,但是出现了如何在存储器和用于存储向量操作数的寄存器文件的寄存器之间有效移动向量操作所需的数据元素的问题。具体地,所需的各个数据元素可以存储在存储器内的一系列数据结构内,其中每个数据结构均可以包括多个相关数据元素,例如X、Y和Z坐标值,红色、绿色和蓝色像素值,复数的实数部分和虚数部分等。因此,考虑寻求加载特定类型的一系列数据元素(例如一系列X坐标值)以形成用于存储在寄存器文件中的数据元素的期望向量操作数的示例,应当认识到,通常需要对存储器和/或寄存器组进行大量的评估以便在期望的向量寄存器内收集所需的数据元素。
期望提供一种改进这种访问操作的性能的技术。
发明内容
在本发明技术的一个示例性配置中,提供了一种设备,该设备包括:第一接口电路,该第一接口电路用于接收从存储器获取的数据结构,每个数据结构具有相关联的标识符并且包括N个数据元素;多轴缓冲器电路,该多轴缓冲器电路具有存储元件的阵列,沿着第一轴线该阵列被组织为N个集合的存储元件,每一集合包括许多VL个存储元件,并且沿着第二轴线该阵列被组织为多组N个存储元件,每一组均包括来自所述N个集合中的每一集合的存储元件;访问控制电路,该访问控制电路用于将所接收的数据结构的N个数据元素存储在依赖于相关联的标识符而选择的所述组中的一个中;以及第二接口电路,所述第二接口电路响应于所需数据结构已被存储在多轴缓冲器电路中的指示而将存储在所述多个集合的存储元件中的一个或多个集合中的数据元素输出作为一个或多个相应的数据元素向量以存储在寄存器组中,每个向量均包括VL个数据元素。
在另一示例配置中,提供了一种将多个数据结构从存储器传输到存储在寄存器组中的数据元素的一个或多个向量中的方法,该方法包括:从存储器中获取数据结构,每个数据结构均具有相关联的标识符并包括N个数据元素;在缓冲器内提供存储元件的阵列,沿着第一轴线该阵列被组织为N个集合的存储元件,每一集合包括许多VL个存储元件,并且沿着第二轴线该阵列被组织为多组N个存储元件,每一组包括来自所述N个集合中的每一集合的存储元件;将每个获取的数据结构的N个数据元素存储在依赖于相关联的标识符而选择的所述组中的一个中;以及响应于所需数据结构已被存储在缓冲器中的指示,输出存储在所述多个集合的存储元件中的一个或多个集合中的数据元素作为一个或多个相应的数据元素向量以存储在寄存器组中,每个向量均包括VL个数据元素。
在又一示例配置中,提供了一种设备,该设备包括:第一接口装置,该第一接口装置用于接收从存储器获取的数据结构,每个数据结构具有相关联的标识符并且包括N个数据元素;多轴缓冲器装置,该多轴缓冲器装置具有存储元件装置的阵列,沿着第一轴线该阵列被组织为N个集合的存储元件装置,每一集合包括许多VL个存储元件装置,并且沿着第二轴线该阵列被组织为多组N个存储元件装置,每一组包括来自所述N个集合中的每一集合的存储元件装置;访问控制装置,该访问控制装置用于将接收到的数据结构的N个数据元素存储在依赖于相关联的标识符而选择的所述组中的一个中;以及第二接口装置,该第二接口装置响应于所需数据结构已被存储在多轴缓冲器装置中的指示而将存储在所述多个集合的存储元件装置中的一个或多个集合中的数据元素输出作为一个或多个相应的数据元素向量以存储在寄存器组装置中,每个向量均包括VL个数据元素。
附图说明
本技术将仅举例而言参照如附图中所示的本技术的实施例来进一步描述,其中:
图1是根据一个实施例的数据处理设备的框图;
图2是根据一个实施例的设备的框图,该设备当在存储器与存储在图1的寄存器组中的一个或多个数据元素向量之间传输多个数据结构时采用;
图3更详细地示出了根据一个实施例的图2的多轴缓冲器;
图4示出了根据一个实施例如何可以将多轴缓冲器布置到多个区域中;
图5是示出在一个实施例中执行以便利用多轴缓冲器在存储器和存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的一系列步骤的流程图;
图6示意性地示出了采用一个实施例的多轴缓冲器的加载操作和存储操作;
图7示意性地示出了使用根据一个实施例的多轴缓冲器执行的加载操作;
图8是示出在根据一个实施例的多轴缓冲器内提供的存储元件阵列,以及相关的路由电路的图;
图9示出了如何可以将不同大小的数据元素对齐以允许处理一个实施例的多轴缓冲器内的那些数据元素;
图10示出了根据一个实施例的存储元件和相关路由电路的布置,该布置用于支持使用不同大小的数据元素;
图11示出了存储元件和路由电路的另一示例布置,该布置包括附加的复用以允许访问单独的行和列的方式具有增加的灵活性;
图12示出了存储元件和路由电路的又一示例布置,该布置允许将多个数据结构同时存储到阵列中;
图13示出了可以利用图12的布置的示例加载序列;
图14A和图14B示出了根据一个实施例对于无故障和推测性故障情况两者如何处理推测性加载操作;并且
图15示出了在加载操作期间如何可以在检测到推测性故障时更新与多轴缓冲器相关的断言(predicate)存储装置。
具体实施方式
在参考附图讨论实施例之前,提供对实施例的以下描述。
在一个实施例中,提供了一种设备,该设备具有第一接口电路以接收从存储器获取的数据结构,其中每个数据结构具有相关联的标识符并且包括N个数据元素。此外,提供了具有存储元件阵列的多轴缓冲器电路,其中沿着第一轴线该阵列被组织为N个集合的存储元件,每一集合包括许多VL个存储元件,并且其中沿着第二轴线该阵列被组织为多组N个存储元件,每一组包括来自所述N个集合中的每一集合的存储元件。对于由第一接口电路接收的每个数据结构,访问控制电路随后将该接收到的数据结构的N个数据元素存储在依赖于该数据结构的相关联的标识符而选择的多个组中的一个组中。响应于所有所需的数据结构已被存储在多轴缓冲器电路中的指示,第二接口电路随后输出存储在多个集合的存储元件中的一个或多个集合中的数据元素作为一个或多个对应的数据元素向量以存储在寄存器组中,每个向量包括VL个数据元素。
这种方法可以显著减少对存储器和/或寄存器组的访问次数,从而允许在每个数据结构被获取时并行地构建N个向量,并且仅需要访问寄存器组一次就已经基于获取的数据结构构建了一个或多个全向量。此外,多轴缓冲器电路可以轻易地容纳从存储器以任何顺序获取的数据结构,这是因为每个数据结构都具有相关联的标识符,并且该标识符被用于确定获取的特定数据结构存储在沿着第二轴线的哪个组中。
即使在N=1,并且因此每个数据结构仅包括单个数据元素,并且因此仅构建单个向量的情况下,上述设备仍然提供了以下益处:能够轻易地容纳从存储器以任何顺序获取的数据结构,并且仅需要访问寄存器组一次就已经构建了全向量。
然而,在一个实施例中,N是2或更大的整数,在这种情况下,设备允许并行地创建多个向量,从而减少否则将需要的存储器访问次数。
在一个实施例中,所需的数据结构可以连续存储在存储器地址空间内。然而,在另一个实施例中,所需的数据结构中的一个或多个相对于所需的数据结构中的其他所需的数据结构被存储在存储器中的非连续地址处。在这种场景中,例如由于所请求的数据结构中的多个已被缓存而其他未被缓存,所以这增加了存储器以与数据结构被请求的顺序不同的顺序返回所请求的数据结构将更有效的可能性,并且如上所述,由于将与每个数据结构相关联的标识符映射到多轴缓冲器电路内的特定组的存储元件,所以上述实施例的设备可以轻易地容纳这种乱序数据。
在上述实施例中,该设备用于执行加载操作以将多个数据结构从存储器传输到存储在寄存器组中的一个或多个数据元素向量中。然而,在一个实施例中,该设备可以另外用于执行存储操作,以便将来自寄存器组的N个数据元素向量存储到存储器中,作为每个数据结构包括N个数据元素的多个数据结构。具体地,在一个这种实施例中,访问控制电路还被布置成用于通过以下方式来在执行这种存储操作期间重复使用多轴缓冲器电路:使待访问的多轴缓冲器将经由第二接口从寄存器组接收的每一数据元素向量存储在沿着第一轴线的一相关集合的存储元件中。访问控制电路然后使得从沿着第二轴线的一个或多个相关组的存储元件获取一个或多个数据结构,以经由第一接口电路输出到存储器。因此,上述设备提供了用于执行加载操作和存储操作两者的非常有效的机制。
在一个实施例中,将需要特定向量内的所有单独数据元素,并且因此对于先前所述的加载操作,一旦所述组中的每一组已经充满了获取的数据结构,就将出现所需的数据结构已经存储在多轴缓冲器电路中的指示。然而,在一个替代实施例中,该设备包括将某些数据结构标记为不需要的附加功能性,由此进一步减少了所需的存储器访问次数,并且使得向量被更快地输出。具体地,在一个实施例中,该设备还包括断言存储装置,该断言存储装置用于与沿着第二轴线的每一组存储元件相关联地存储指示相关组的存储元件是活动还是不活动的断言值,并且所需的数据结构是与活动组的存储元件相关联的那些数据结构。因此,一旦数据结构已被存储在所有活动组内,第二接口电路就可以输出存储在每一集合的存储元件中的数据元素作为相应的数据元素向量以存储在寄存器组中。
在一个实施例中,第一接口电路被布置成用于抑制从存储器中获取与不活动组的存储元件相关的数据结构。因此,可以参考断言信息以便确定所需的存储器访问次数,并且通过避免对将不包括在合成向量内的任何数据结构执行访问的需要来提高性能。
当执行先前所述的存储操作时,也可以使用此类断言信息。具体地,在此类存储操作期间,第一接口电路被布置成用于抑制将与不活动组的存储元件相关的任何数据结构输出到存储器,因此再次减少了所需的存储器访问次数。
在一个实施例中,第二接口电路包括插入电路,该插入电路用于当输出数据元素向量以存储在寄存器组中时,将预定数据值插入数据元素向量内与不活动组的存储元件相关联的每个数据元素位置中。因此,一旦所有所需的数据结构已被从存储器中获取并存储在相关组的多轴缓冲器电路中,则随着每个向量被读出以存储在寄存器组中,第二接口电路可以在每个不活动的数据元素位置处添加预定数据值。这提供了一种机制来确保输出向量保持所需的向量长度,并且因此相关数据元素中的每一个均占据合成向量内的所需通道。这进一步确保了可预测的“不关心”值被存储在向量内的任何不活动的通道位置内。预定值可以采取各种形式,但是在一个实施例中是逻辑“0”值。
可能的是,特定存储器访问可能不会获取特定数据结构的所有数据元素,并且相应地由特定存储器访问所获取的第一数据元素可能不是数据结构内的初始数据元素。为了适应这种情况,并确保获取的数据元素存储在多轴缓冲器电路的正确存储元件内,在一个实施例中,第一接口电路包括对准电路,该对准电路用于将从存储器获取的数据结构的数据元素与内部总线格式对准。举例来说,如果沿着第二轴的一组存储元件包括分别用于存储数据结构的X、Y和Z坐标的三个存储元件,并且如果当前访问获取该数据结构的Y和Z坐标值,则对准电路将确保那些Y和Z坐标值被存储在该组的第二和第三存储元件内,通常其中第一存储元件不被更新。
在一个具体实施例中,所述设备还包括与所述内部总线格式相关联的写入断言字段,以识别内部总线上的哪些数据元素需要被存储在多轴缓冲器电路中。因此,这使得能够将特定数据元素标记为应当存储在多轴缓冲器电路中的数据元素。因此,考虑到上述具体示例,如果内部总线是三个数据元素宽,则写入断言信息可以将第一数据元素标记为无效并将第二和第三数据元素标记为有效,从而使得Y和Z坐标值被存储在多轴缓冲器电路的相关组的正确存储元件内。
在一个实施例中,该设备还包括分配电路,该分配电路将数据结构的相关联的标识符分配给阵列内的相应组存储元件,以供访问控制电路在确定将接收到的数据结构的N个数据元素存储到哪个组内时使用。因此,特定数据结构被映射到各个组的方式可以由分配电路来控制。
在一个实施例中,分配电路可进一步被布置成用于确定要存储在断言存储装置中的断言值。因此,基于关于待执行的期望的加载或存储操作的信息,分配电路可以确定需要使用哪些组存储元件,并且可以相应地设置断言值。
在一个实施例中,多轴缓冲器电路可以被配置为每次仅用于单个加载操作或单个存储操作。然而,在一个替代实施例中,多轴缓冲器电路可以具有足够大数量的存储元件以使得能够在多轴缓冲器电路中定义多个独立的存储元件阵列,其中每个阵列与特定的加载或存储操作相关联,因此允许在利用上述设备时同时执行多个此类加载或存储操作。
在一个此类实施例中,分配电路还被布置成用于指定多轴缓冲器电路内用于每个此类加载或存储操作的存储元件阵列,并且访问控制电路被布置成用于控制多轴缓冲器电路的使用,以使得能够使用多轴缓冲器电路内的不同存储元件阵列来并行处理多个访问操作。因此,分配电路可以针对任何特定的加载或存储操作,关于数据结构内的数据元素的数量和要访问的数据结构的数量(即向量长度)来配置每个阵列的大小,并且在多轴缓冲器的大小约束内可以潜在地布置待在缓冲器内独立定义的多个此类阵列,以便能够至少部分并行地处理多个加载和存储操作。处理每个此类加载或存储操作可能需要大量访问,并且至少部分地并行化此类操作的能力可以产生显著的性能益处。
在一个实施例中,该分配电路被布置成用于一旦存储在每个集合的存储元件中的数据元素已被输出作为对应的数据元素向量以存储在寄存器组中,就释放存储元件阵列以供与另一访问操作结合使用。具体地,一旦第二接口电路已经将所需的向量输出给寄存器组,就可以向分配电路发出控制信号以使得加载操作被提交,此时可以释放存储元件阵列。一旦最终数据结构已被从多轴缓冲器阵列输出以存储到存储器,就可以发出用于存储操作的类似控制信号。
分配电路可以以各种方式来布置,但是在一个实施例中被设置在解码电路内,该解码电路用于产生一系列微操作以实现加载操作,以将多个数据结构从存储器传输到存储在寄存器组中的一个或多个数据元素向量中。具体地,由于解码电路被用来分析相关指令以确定执行如上所述的加载操作或者实际上的存储操作所需的访问,所以解码电路将访问关于要访问的数据结构的格式和数量的信息,并因此被很好地放置以确定如何配置多轴缓冲器电路内的存储元件阵列。
在一个实施例中,解码电路将为所产生的微操作中的每一个微操作分配微操作标识符以实现加载或存储操作,并且每个数据结构的相关联的标识符可以来源于由解码电路生成的微操作标识符。因此,数据结构标识符可以通过以下方式来较为容易地确定:至少部分地重复使用由解码电路生成的标识符信息以便控制所需的微操作。微操作标识符与数据结构的标识符之间可以是例如一一对应的,例如其中每个微操作从存储器中精确地获取一个数据结构。然而,应当理解,不需要这种一一对应的关系,因为例如一个微操作可能能够获取多个数据结构,或者实际上可能需要多个微操作来获取特定数据结构。
在一个实施例中,数据结构格式和期望的向量长度VL驱动对微操作和与微操作相关联的标识符的确定。
多轴缓冲器电路可以以各种方式布置。然而,在一个实施例中,该设备还包括在多轴缓冲器电路内的路由电路,该路由电路用于使所述多组存储元件能够以任何顺序被更新。在一个实施例中,路由电路进一步提供排出路径以使得在输出每个数据元素向量以存储在寄存器组中时能够连续地访问每一集合的存储元件。这种方法可以减少多轴缓冲器电路内所需路由的复杂性。
此外,在多轴缓冲器电路也与存储操作相关联地使用的一个实施例中,该排出路径可以在该存储操作期间被重复使用以将经由第二接口从寄存器组接收的每个数据元素向量连续地存储在沿着第一轴线的一相关集合的存储元件中。这进一步简化了多轴缓冲器电路内所需的路由电路的构造。
在一个替代实施例中,路由电路包括复用电路以使得每一集合的存储元件能够以任何次序被访问。这因此提供了关于如何访问所述多个集合的存储元件的附加灵活性。
在一个实施例中,多轴缓冲器电路可以与对一种大小的数据元素执行操作的加载/存储操作,以及对不同大小的数据元素执行操作的加载/存储操作两者相关联地使用。具体地,在一个实施例中,路由电路被布置为使得访问控制电路使用多轴缓冲器电路内的相同的存储元件阵列,而不管正在被处理的数据元素具有第一尺寸还是与所述第一尺寸不同的至少另一尺寸。这因此提供了与多种数据元素大小相关联地使用多轴缓冲器电路的有效机制。
在一个实施例中,每次仅可以将单个数据结构写入到多轴缓冲器电路中。然而,在一个替代实施例中,路由电路包括多个端口以使多组存储元件能够同时被更新,从而使得多个数据结构能够被同时写入到多轴缓冲器电路中或者从多轴缓冲器电路同时读取。
如果需要的话,还可以提供多端口方法来访问该多个集合的存储元件,以便使得能够同时访问多于一个集合的存储元件。这可以结合允许多个向量寄存器同时被访问的寄存器组来提高处理速度,特别是在加载操作期间,这使得多个向量能够同时被从多轴缓冲器电路存储到寄存器组中。类似地,对于将数据传递回存储器的存储操作,这种方法将使得从寄存器组读取的多个向量能够被同时存储在多轴缓冲器电路中。
当执行先前所描述类型的加载操作时,在将多个数据结构从存储器传输到存储在寄存器组中的一个或多个数据元素向量中的情况下,可能是这样的情况:所访问的数据结构中的至少一些数据结构被推测性地访问。具体地,当向量化代码以利用可用的向量操作时,加载到向量中的数据结构中的一些数据结构可能是或可能不是处理在适当的时候所实际上需要的。在这种情况下,设备可以注意到在加载操作期间要执行的访问中的一个或多个访问是推测性访问。如果在正常访问期间发生故障,则将通常必须处理该故障,例如通过采取异常(exception)。然而,在一个实施例中,如果在从存储器中推测性地获取一个或多个数据结构期间检测到故障,则不采取此类动作。相反,在一个实施例中,更新断言存储装置以将与导致故障的数据结构相关联的所述组存储元件标记为不活动的,并且此外还将该阵列内的所有后续组存储元件标记为不活动的。然后,当所有所需的数据结构已经被加载到多轴缓冲器中时(注意到不需要与已经被标记为不活动的所述组存储元件相关联的任何数据结构),第二接口电路可以在那时输出存储在每个集合的存储元件中的加载的数据元素作为对应的数据元素向量以存储在寄存器组中。
当与包括用于在与不活动组存储元件相关的每个数据元素位置中插入预定值的插入电路的先前实施例组合时,这将确保在数据结构的推测性获取期间出现故障之后,该推测性获取和所有后续的推测性获取的相关数据元素被设置为输出到寄存器文件的向量内的预定数据值。在这种情况下,不需要提出错误,因此处理可以继续。例如,在某一随后的时间,对此类推测性数据元素的获取可以被重试。可能是这样的情况:例如由于已经加载一个不同的页面,所以不再检测到故障,并且因此先前检测到的页面故障不再适用。也可能是这样的情况:先前被视为推测性的一些访问不再是推测性的。在那种情况下,如何处理任何后续的故障将取决于所讨论的访问是否仍然是推测性的。
现在将参考附图描述具体实施例。
图1是其中可以采用所描述的实施例的技术的系统的框图。在图1所示的示例中,系统采用流水线型处理器的形式。提取电路10从指令缓存15提取指令,该等指令从该提取电路传递穿过解码电路20,该解码电路解码每条指令以产生适当的控制信号来控制流水线型处理器内的下游执行资源,以执行该等指令所要求的操作。形成经解码的指令的控制信号被传递到发布阶段电路25,以发布到流水线型处理器内的一个或多个执行流水线30、35、40。如图1中的虚线框70所示,解码电路20内的分配电路可以被布置成用于分配系统内的某些资源以供在执行某些操作时使用。
发布阶段电路25具有对寄存器组45的访问权限,在该寄存器组中可以存储形成各种操作的源操作数的数据值。这些源操作数可以经由路径47按路径路由到发布阶段电路中,使得可以将那些源操作数连同标识待执行以实现每个经解码指令的一个或多个操作的控制信号一起分发到适当的执行单元。算术运算可以例如连同所需的源操作数一起被转发到算术逻辑单元(ALU)30,以便使得能够对这些源操作数执行算术逻辑运算,其中结果值通常被输出为目的地操作数以存储在寄存器组45的指定寄存器中。
除了ALU 30之外,还可以提供其他执行单元35,例如用于响应于解码的浮点指令来执行浮点操作的浮点单元(FPU)。此外,加载/存储单元(LSU)40被用于执行加载操作以便将来自存储器(包括一个或多个层级的数据缓存50)的数据值加载到寄存器组45的指定寄存器中,并且用于执行存储操作以便将来自寄存器组45的数据值存储回存储器50。
图1中所示的系统可以是其中指令序列按程序顺序执行的按顺序处理系统,或者替代地可以是乱序系统,从而允许执行各种指令的顺序被重新排序,目的是寻求提高的性能。如本领域的技术人员将理解的,在乱序系统中,将提供附加结构(在图1中未明确示出),例如寄存器重命名电路以将由指令指定的架构寄存器映射到来自寄存器组45中的物理寄存器池(物理寄存器池通常大于架构寄存器的数目)中的物理寄存器,从而使得能够去除某些危险,促进了对乱序处理的更多使用。此外,通常将提供重排序缓冲器来跟踪乱序执行,并允许各种指令的执行结果被按顺序提交。
在所描述的实施例中,图1的处理电路被布置成用于对存储在寄存器组45中的向量操作数执行向量操作,其中向量操作数包括多个数据元素。当对这种向量操作数执行向量运算时,跨向量操作数内的各种数据元素重复地施加所需操作。在一个实施例中,寄存器组45是向量寄存器组,其中向量寄存器组内的每个向量寄存器可以存储包括多个数据元素的向量操作数。
当执行加载操作以将所需数据元素作为向量操作数存储在寄存器组45的一个寄存器内时,可能是这种情况:所需的各个数据元素不是连续地位于存储器内,并且因此需要收集操作以从各个存储器位置访问所需的数据元素,并将该等数据元素存储在向量寄存器内的适当位置处。类似地,当执行存储操作时可能需要相应的分散操作,以便将包括在向量寄存器内的数据元素存储回存储器内需要该等数据元素的位置。执行这种收集或分散操作可能需要对存储器系统和/或寄存器组内的相关向量寄存器执行相当多次数的访问。
在本申请中,术语“数据结构”将被用于指代与用于收集或分散操作的存储器地址中的一个相关联的N个连续数据元素。虽然数据结构可以包括单个数据元素(即,其中N=1),并且因此在这种情况下的收集或分散操作涉及在存储器与被布置成用于保持VL个数据元素作为向量操作数的特定向量寄存器之间移动多个数据元素(等于指定的向量长度值VL),当每个数据结构包括多于一个数据元素(即,其中N是2或更大)时,可以补充所需的收集或分散操作以允许并行处理多个向量操作数。例如,如果每个数据结构包括三个数据元素,例如表示X、Y和Z坐标值,则一系列收集操作可以被布置成用于对所有的X数据元素进行整理以存储在第一向量寄存器中,对所有的Y数据元素进行整理以存储在第二向量寄存器中,以及对所有Z数据元素进行整理以存储在第三向量寄存器中。类似地,相应的一系列分散操作可以被布置成用于将这三个向量寄存器的内容存储回存储器。
可以指定多个指令,该多个指令当由解码电路20解码时,使得使用LSU 40来实现这种收集或分散操作。收集或分散操作所需的各种存储器地址可以以多种方式指定,例如使用标量基地址和偏移向量。
根据所描述的实施例,通过使用电路55来增加这种收集和分散操作的性能,该电路55包括由访问控制电路65控制的形成为存储元件阵列的多轴缓冲器60和相关的路由电路。沿着第一轴线,多轴缓冲器阵列被组织为N个集合的存储元件,其中每一集合包括许多VL个存储元件。沿着第二轴线,该阵列被组织为多组N个存储元件,其中每一组包括来自N个集合中的每一集合的存储元件。
当解码电路20根据输入指令流确定一系列数据结构需要收集类型的加载操作,或者此一系列数据结构需要分散类型的存储操作时,解码电路将分配一系列微操作来实现所需的加载或存储操作,并且将会将微操作标识符分配给各个微操作中的每一个。每个数据结构内的数据元素的数量以及向量长度VL和任何断言信息将影响所需的微操作的数量,以及数据缓存50与加载/存储单元40之间的数据总线的大小,以及数据结构的各种存储器地址与缓存线边界的相对对准等。在这个过程期间,分配电路70可以将各个标识符与每个数据结构相关联,并且还可以被配置成用于将多轴缓冲器60配置成提供具有沿着第一轴线的所需数量的集合(取决于每个数据结构中的数据元素的数量)和沿着第二轴线的所需数量的组(取决于向量长度VL)的存储元件阵列。在一个实施例中,分配电路还被布置成用于将数据结构标识符中的一个分配给每组存储元件。
因此,当考虑执行一系列微操作来执行加载操作以从存储器收集多个数据结构来产生数据元素的N个向量操作数时,因为从数据缓存50访问每个数据结构,所以访问控制电路65可以被布置成用于根据接收到的数据结构的相关联的标识符将该数据结构的数据元素存储到多轴缓冲器60的阵列内的多个组中的一个组中。这可以在不考虑执行微操作的顺序的情况下完成,并且因此不管数据结构被访问的顺序如何,由于在阵列内沿着第二轴线的每一组与数据结构标识符中的一个相关联,因此访问控制电路65能够基于接收到的数据结构的标识符来确定将接收到的数据元素存储在多轴缓冲器中的何处。一旦所有所需的数据结构都已被从存储器中获取,则阵列就将包括所需的向量操作数,并且具体地每个集合的存储元件将包括所需的向量操作数中的一个向量操作数。可以随后将每个向量操作数从多轴缓冲器60写入到寄存器组的一个或多个相关寄存器中,通常此类寄存器已经由导致执行加载操作的指令识别。
类似地,对于分散型存储操作,要经历该存储操作的每个向量操作数可以被存储在多轴缓冲器60的多个集合的一个集合中。此后,可以执行一系列存储微操作,以便通过访问沿着第二轴线的多组存储元件中的每一组以便获取单独的数据结构,来将每个所需的数据结构存储到其在数据缓存/存储器50中的相关地址。
通过这种方法,这可以显著减少为了执行这种加载或存储操作所需要的存储器访问次数。此外,还可以减少所需的对寄存器组的寄存器的访问次数,因为每个单独向量操作数可以在加载操作期间一次性写入寄存器组内,或者可以在存储操作期间从寄存器组一次性获取。
图2是更详细地说明电路55的框图。多轴缓冲器60由形成沿着第一轴线(图2中的水平轴线)的N个集合和沿着第二轴线(图2中的垂直轴线)的VL组存储元件的存储元件阵列组成。第一接口电路80(其在一个实施例中可以是LSU 40的一部分)被布置成用于在加载操作期间从存储器接收各个数据结构,或在存储操作期间将各个数据结构输出到存储器,并且在访问控制电路65的控制下可以访问多轴缓冲器内的各个组的存储元件。因此,在加载操作期间,这使得能够在访问控制电路65的控制下,考虑到与每个获取的数据结构相关联的标识符,将每个获取的数据结构存储到多轴缓冲器60内的多个组中的一个指定组中。
第二接口电路85(其在一个实施例中也可以是LSU 40的一部分)被布置成用于在多轴缓冲器60与寄存器组45之间接口连接,并且允许访问多轴缓冲器内的多个集合的存储元件中的一个集合中的单独数据元素向量。例如,在加载操作期间,一旦所有所需的数据结构已被存储在多轴缓冲器内,多轴缓冲器内的一个集合就可以经由第二接口电路85被访问,以便产生所需的数据元素向量以输出到寄存器组内的指定寄存器。对于多轴缓冲器内的每一集合,可以轮流重复这种过程。在存储操作期间,寄存器组内的每个指定向量寄存器中的内容可以经由第二接口电路85输入到多轴缓冲器中的对应集合内,随后由第一接口电路80执行的一系列访问可以使单独数据结构被输出以存储在存储器中。
图3示意性地示出了一个实施例中的图2的多轴缓冲器60的内容。多轴缓冲器包括缓冲器阵列100,该缓冲器阵列包括单独存储元件105的阵列。在这种布置中,为数据结构中的每个数据元素提供了一行存储元件。因此,考虑到具有包括X、Y和Z坐标的三个数据元素的数据结构的先前示例,在缓冲器阵列100内将存在三个行。此外,对于向量长度VL中的每个数据元素而言,缓冲器阵列内存在一个列/通道(lane)。因此,在图3的示例中,假设向量长度是4,相应地存在四列数据元素。特定列内的各种数据元素形成先前所描述的一组存储元件,在第一接口电路80的控制下可以将单独的数据结构存储到该组存储元件中。还与阵列100相关联地提供了标识符存储装置110,从而提供对与每组存储元件相关联的标识符的指示。如前所述,每一组标识符将与被访问的数据结构中的一个数据结构的标识符相对应。
此外,在一个实施例中,还任选地提供了断言存储装置115,从而允许为每组存储元件指定断言值,并且因此在每个数据结构基础上。这可以用于允许在加载或存储操作的处理期间跳过某些数据结构,从而增加如何使用多轴缓冲器的灵活性。在一个实施例中,断言值标识对应组的存储元件是活动还是不活动的。对于任何不活动组,在加载或存储操作期间不访问对应的数据结构,因此减少了对存储器执行的访问次数。对于加载操作而言,这样的结果是,一旦与所有活动组相关联的数据结构已经被存储在多轴缓冲器中,则这是所有所需的数据结构可用的时间点,并且在该时间点可以将每行中的向量输出到寄存器组。在一个实施例中,当数据被输出到寄存器组时,预定的逻辑值可以插入与任何不活动组相关联的数据元素位置处。例如,在一个实施例中,可以在每个相关数据元素位置处插入逻辑“0”值。在存储操作期间,多轴缓冲器可以填充有寄存器组的相关寄存器的内容,并且随后在将数据从多轴缓冲器输出到存储器期间可以仅忽略存储在任何不活动组中的值,并且具体地将任何不活动组的内容输出到存储器不需要执行存储微操作。
在一个实施例中,多轴缓冲器60可以用于每次执行单一加载或存储操作,并且一旦当前加载或存储操作已经完成,则该多轴缓冲器可以被重新分配给后续的加载或存储操作。然而,在一个替代实施例中,多轴缓冲器60可以包括足够大的多个存储元件以使得能够同时定义多个单独的阵列,由此形成如图4中示意性示出的多个区域。这随后使得能够同时执行多个加载或存储操作,其中每个此类操作使用多轴缓冲器。因此,在图4中,多轴缓冲器150可以由多个区域组成,每个区域基于数据结构中的数据元素的数量和向量长度VL而被定义为遇到每个加载或存储操作。例如,在一个实施例中,在每个加载或存储操作被识别并且相关的微操作被创建时,可以由解码电路20内的分配电路70来定义各个区域155、160、165。
图5是示出当在图1的数据处理系统内处理加载或存储操作时为了利用多轴缓冲器电路而执行的步骤的流程图。在步骤200,建立多个微操作以实现要访问多个数据结构的结构化存储器访问。如前所述,在一个实施例中,数据结构可以仅包括单一数据元素,但是在其他实施例中,每个数据结构由多个数据元素组成,例如表示坐标值、RGB值等。此外,在一个实施例中,各个数据结构可以连续地布置在存储器中,但是在一个替代实施例中,数据结构可以不连续地布置在存储器中,其中提供足够的信息以使得能够确定每个数据结构的开始地址,例如通过指定标量基值和偏移向量。
在步骤205,在多轴缓冲器(在本文中也称为MAB)内配置所需区域,并为每个要访问的数据结构分配ID,此外,每个这种ID还与MAB区域内的多个组中的一个相关联。在一个实施例中,步骤205由与图1的解码电路20相关联的分配电路70执行。
在步骤210,确定当前的访问是否是加载访问,并且如果是,则LSU40将启动所需的微操作以便试图从存储器中获取所需的数据结构。然后在步骤215处等待接收数据结构。由于存储器被组织的方式,以及具体地是一个或多个层级的缓存的使用,通常可能是这样的情况:数据结构相对于它们被请求的顺序乱序地返回至LSU,这例如是由于某些数据结构已经驻留在缓存中(并且因此导致缓存命中),而其他数据结构尚未处于缓存中(因此导致缓存未中并且从更低层级的缓存阶层和/或主存储器中提取所需的数据)。
然而,如前所述,由于多轴缓冲器的布置方式,具体地由于每个数据结构标识符与多组存储元件中的一组相关联的事实,可以容易地适应对数据结构的乱序接收。具体地,一旦在步骤215处从缓存接收到数据结构的数据,则随后在访问控制电路65的控制下经由第一接口电路80将该数据路由到多组存储元件中的一个特定组中,具体地该数据结构被路由到标识符与数据结构的标识符匹配的组。这使得在步骤220处使用所需的数据结构值来更新MAB内的一个通道。
在一个实施例中,LSU与数据缓存50之间的总线的带宽足够宽以允许一次获取数据元素的整个数据结构,并且因此在这种情况下多轴缓冲器60中的特定组内的所有存储元件可以被一次性更新。然而,在一个替代实施例中,可能是这样的情况:带宽不足以使数据元素的整个数据结构被一次性获取,或者可能是这样的情况:数据结构关于缓存线边界的对准是使得需要多次访问来获取数据结构的所有数据元素。在这种情况下,在一个实施例中,LSU可以被布置成用于局部地缓冲特定数据结构的数据元素直到所有数据元素都可用,并且随后用于将数据结构的数据元素一次性存储到多轴缓冲器60内的所需组。或者,可以对多轴缓冲器60执行多次访问,其中使用附加控制信息(在稍后讨论的一个实施例中,此附加控制信息被称为写入断言信息)来控制对于任何特定访问更新组内的哪些单独的存储元件。
在步骤225,确定是否已经从存储器中获得所有所需的数据结构。如前所述,在没有参考图3讨论的任选断言信息的情况下,或者在断言信息标识所有组是活动的情况下,当所有组中的所有存储元件都已经写入有从存储器获取的数据时,将确定已经获得了所有所需的数据结构。然而,当使用任选断言信息时,如果该多组存储元件中的任何组被标记为不活动的,则将不需要从存储器获得与这些组相关联的数据结构的数据元素,并且当数据已经被写入每个活动组的存储元件中时,将视为已经获得了所有所需的数据结构。
如果并非已经获得所有所需的数据结构,则过程从步骤225返回到步骤215,以等待从存储器接收下一个数据结构。然而,一旦已经获得了所有所需的数据结构,则在步骤230处可以通过第二接口电路85将MAB区域的内容以向量寄存器单元的形式排出到寄存器缓存。在一个实施例中,设想存储在MAB 60内的每个向量操作数可以容纳在单个向量寄存器内,并且因此对于存储在MAB中的每个向量操作数仅需要访问单个向量寄存器。然而,如果在一个替代实施例中,向量存储在多个向量寄存器中,则可以通过对寄存器组执行多次访问以便将每个向量操作数存储到相关寄存器中而容易地适应这种情况。此外,取决于关于寄存器组可用的写入端口的数量,可能可以将多轴缓冲器内的多个集合的内容同时存储到寄存器组的所需寄存器中。或者,可以顺序地访问每个集合,以便每个周期将一个向量写入寄存器组。
一旦MAB区域的内容已经被排出到寄存器组,则MAB区域可以在步骤235处由分配电路70释放,以用于与后续加载或存储操作相关联地使用。
如果在步骤210处确定当前访问是存储操作,则过程进行到步骤240,在该步骤中用来自寄存器组45的指定向量寄存器的内容填充MAB区域。这可能涉及在每个时钟周期中将单个向量寄存器的内容写入MAB 60中,或者在替代实施例中可以将多个向量寄存器的内容并行地存储到MAB 60中。
一旦所需的寄存器内容已经被存储在MAB内,则可以访问单独的通道(即,第二轴线中的单独组的存储元件)以便获取相关数据结构的数据元素,然后可以从MAB将数据元素经由第一接口电路80输出到LSU内的存储缓冲器。根据标准惯例,然后可以在LSU 40的控制下将存储缓冲器内容输出到数据缓存50。在一个实施例中,还将标识符信息与每个数据结构一起传递给LSU,以使得LSU能够将每个数据结构与用于将该数据输出到存储器的存储微操作相关联,并且还使得能够确定该数据结构所需的存储器地址。
在步骤250,确定是否已经输出了所有所需的数据结构。在没有任选断言信息的情况下,或者在任选断言信息指示所有组都是活动的情况下,则一旦MAB区域内的所有存储元件的内容已经被输出到LSU就将达到此点。在任选断言信息将某些组标识为非活动的情况下,则不需要与这些不活动通道相关的步骤,并且当所有活动组的内容已经输出到LSU时将认为输出了所有所需的数据结构。重复步骤245,直到已经输出了所有所需的数据结构,之后在步骤255,释放MAB区域以便与后续的加载或存储操作结合而重新使用,在一个实施例中,该释放功能由分配电路70执行。
图6示意性地示出了在加载和存储操作期间MAB的使用,加载操作在图的上半部分示出,而存储操作在图的下半部分示出。在这个示例中,假设每个数据结构均包括两个元素,即X和Y坐标值,并且向量长度是4。还假设每个数据结构被存储在存储器内的不连续存储器位置处,如由附图标记300所示的。虽然在一个实施例中每个数据结构可以与先前的数据结构分开共同的步幅值,但是在一个替代实施例中数据结构的存储器地址可以是完全不相关的,并且需要适当的信息以使得能够确定每个数据结构的开始地址,在这个示例中是每个X值的地址。然后可以从标识的每个X值的地址推断每个Y值的位置。
在此实施例中,假设数据结构地址和底层元素大小/数据类型可以不与缓存线边界对准,并且相应地可能需要多次访问以获得特定数据结构的数据元素。然而在一个实施例中在这种情况下,可以将数据局部地保留在LSU内直到提供了数据结构的所有数据元素。在一个替代实施例中在第一接口电路80内提供对准电路305以允许写入断言信息315与获取的数据结构的每个数据元素相关联。这因此使得能够确定使用从存储器获取的对准数据310更新特定组内的哪些数据元素。
在这个示例中,假设MAB 60已经被预先配置为提供三个集合和四个组,由此允许基于从存储器访问到的数据在MAB内同时创建至多三个向量长度为四的向量。然而,在这个具体示例中,假设Z坐标值不是所关注的,因此写入断言信息将总是标识不需要第三数据元素,而不管该信息是否被获取。
在图6所示的示例中,还假设数据结构断言信息是“1101”的形式,指示第三通道不活动。因此,不需要从存储器中获取X2和Y2值,而是在执行所需序列的加载微操作之后,用数据325填充MAB。同样如图6所示的,每个组具有相关的ID 330,该ID结合与总体加载操作相关联的ID340一起,来为每个组提供唯一的ID。由于每个数据结构都是从存储器中获取的,因此使用该ID信息来确定将数据存储在MAB内的哪个组中。任选地,多轴缓冲器还可以包括存储装置335以存储目标寄存器信息。或者,此目标寄存器信息可以被存储在其他地方,例如在先前提到的乱序处理器示例的重排序缓冲器内。
一旦所有所需的数据结构被存储在MAB内,则使用第二接口电路85将内容排出到寄存器文件内的两个目标寄存器360、365中。在此实施例中,使用由复用器电路355组成的调零电路350来使得能够将预定值插入向量内的每个非活动数据元素位置处。在此特定示例中,预定值是逻辑“0”值,其中使用断言信息控制复用器355,以便确定是针对当前行输出特定通道中的数据元素,还是替代地用逻辑“0”值填充数据元素位置。因此,在排出操作之后,存储在两个目标寄存器360、365中的每一个中的内容如图6的右上侧所示。
图6还示出了对应的存储操作,其中指定了两个源向量寄存器370、375。这些寄存器中的每一个均包括四个数据元素,并且再次假设第一寄存器370包括一系列X坐标值,并且第二寄存器375包括一系列Y坐标值。经由第二接口电路85将这些寄存器的内容加载到MAB中以形成数据阵列380,并且再次假设断言信息385是“1101”形式,这意味着第三通道的内容无效。在一个实施例中,可以将X2和Y2值从寄存器组写入到不活动通道中,因为这可以比使用预定值(诸如逻辑“0”值)覆写该数据更简单。然而,在任何情况下,相关通道的断言信息中的逻辑“0”值的存在将确保不执行存储微操作以将来自该通道的内容存储回存储器。与加载操作一样,标识符字段390为每个组指定标识符,该标识符结合与整个存储操作相关联的ID信息395一起,来为每个组提供唯一的标识符。
然后可以经由第一接口电路80访问各个组,以便向LSU提供数据以存储回存储器地址空间300。LSU使用与每个组相关的ID信息来标识被分配用于将数据存储回存储器的一个或多个存储微操作,并且因此标识数据将写入到的相关存储器地址。
图7是说明使用多轴缓冲器的使用的另一个图。如此示例中所示的,解码器20用于分配相关区域405,并用于提供相关控制信息(如果需要的话),诸如断言数据Pg和目标寄存器信息Zd。解码器还提供ID信息,该ID信息用于填充MAB区域内的每个组的ID字段并用于标识与访问操作相关联的整体ID,在这个示例中假设访问操作是加载操作。
对准/命中逻辑305用于经由预定缓存端口宽度来访问1阶缓存内的数据阵列400,在本示例中该预定缓存端口宽度被显示为128位。将获取的数据与用于将数据从对准电路按路径发送到多轴缓冲器的内部总线格式对准。在这个具体示例中,假设通过当前访问获取Y和Z值,并且因此将写入断言信息设置为“011”以标识当前获取的数据中的两个数据元素是Y和Z分量以存储到特定组中的第二和第三存储元件中,其中该组中的第一存储元件不被更新。与访问相关联的标识符信息用于确定写入数据的组。
一旦MAB区域内的所有所需组已经填充有从存储器加载的数据,则多轴缓冲器内的相关组被排出到向量寄存器文件410。在这个示例中,假设每个数据结构均包括三个分量,即X、Y和Z分量,因此有三个向量排出到向量寄存器文件410内的相应向量寄存器。如先前所讨论的,复用器电路355可以用于在不受关注的任何数据元素位置处插入逻辑“0”值,如断言信息所指示的。
一旦信息已经被排出到寄存器组,多轴缓冲器就可以发出控制信号(例如“全部完成”控制信号)到设备内的提交阶段415,此时可以提交加载操作。虽然提交阶段未在图1中示出,但提交阶段可以在逻辑上被认为是各种执行流水线30、35、40之间的共享阶段。在乱序处理器的示例中,提交阶段415可以是用于提交加载操作的重排序缓冲器的功能性的一部分。
同样如图7所示,可以在对准/命中逻辑305与向量寄存器文件410之间提供直接总线路径,以用于未使用多轴缓冲器的情况,例如在正在执行标准加载操作以将来自存储器的数据加载到寄存器文件410的一个寄存器中的情况下。
如前所述,存储操作以类似但相反的方式操作。首先,在MAB内分配一个区域,其次将N个寄存器的内容传输到该MAB中。此后,MAB每个循环排出一个列(组),随后将排出的数据传输给LSU的存储缓冲器内的对应微操作。
图8是示出了MAB阵列的一个示例性实现的示意图,此示例性实现支持单一数据元素大小(单一数据元素大小在一个实施例中可以是32位或者在另一个实施例中可以是64位),每个循环访问每个向量寄存器的最多四个数据元素(即,VL=4)、每个数据结构的最多三个数据元素(即,N最大=3),以及最多一组存储元件。考虑到加载操作,MAB操作如下。对应于一个数据结构的数据元素通过三条路径500到达输入总线,其中数据结构标识符信息被用于选择与特定组存储元件相关联的复用器,以便标识哪个组被更新。在图8所示的示例中,第一组由经由相关联的复用器452、456、459访问的数据元素450、454、458形成,第二组由通过相关联的复用器462、466、469访问的存储元件460、464、468形成,第三组由通过复用器472、476、479访问的存储元件470、474、478形成,并且第四组由通过复用器482、486、489访问的存储元件480、484、488形成。
除了用于标识相关组的数据结构标识符之外,还可以使用与输入总线上的数据相关联地提供的任何写入断言信息来控制相关联的复用器,使得数据结构标识符结合任何这种写入断言信息一起来标识哪个存储元件(其可以例如是正反器)被更新。如先前所讨论的,从存储器到达的数据可能是乱序的,并且在任何特定循环中,可以取决于数据结构标识符访问上述四个组中的任何一个。
一旦已经将所有所需的数据存储到MAB中,则MAB可以以先进先出(FIFO)的方式排出,其中数据通过输出总线线路505输出。在这种特定布置中,三个向量按照X、Y以及然后Z的顺序排出,使得在第一循环中四个存储元件450、460、470、480的内容通过路径505输出,并且与此同时第二行和第三行存储元件的内容经由内部路由线路510向上移动到更靠近输出总线505的相邻组存储元件中。因此,在第二循环中,随后可以访问Y数据元素(由于它们现在驻留在存储元件450、460、470、480中),并且随后最终在第三循环中可以访问Z数据元素,到此时那些数据元素被存储在存储元件450、460、470、480中。通过限制MAB以这种方式运行,这显著降低了路由连接的复杂性。这还确保了当仅加载X和Y数据元素时不会施加额外的惩罚循环,因为在这种情况下不需要最终的输出阶段,因为存储元件458、468、478、488的内容不是所关注的。
在此示例性布置中,当执行存储操作时,以FIFO方式填充MAB,其中访问线路515被布置成用于将X个数据元素的向量按路径发送到存储元件458、468、478、488中。在下一个循环中,将X数据元素经由互连线510上推到存储元件454、464、474、484中,同时将Y数据元素被写入到存储元件458、468、478、488中。在第三循环期间,将Z数据元素存储到存储元件458、468、478、488中,其中X和Y数据元素经由互连线510向上移动一行。这种方法允许重复使用被提供用于加载操作的排出路由路径510,使得它们可以被重复用于在存储操作期间输入向量。如果存储操作仅涉及X和Y坐标,则经由输入路径515的最终加载阶段将“不关心”状态的数据加载到存储元件458、468、478、488中。
在图8的此示例性布置中,随后在存储操作期间,所述多组数据结构也经由输出路径520以FIFO方式排出。内部路由线530确保当每个数据结构从左侧排出时,相邻列中的数据结构向左移动一个列位置,使得在一系列循环中,整个MAB的内容可以经由输出路径520排出。这同样提供了一种简单的结构来允许在这种存储操作期间使用MAB内的存储元件阵列。图8所示的在存储操作期间排出数据结构的顺序已经被发现工作良好,因为向量的后面的元素(即,存储在图8的右侧中的元素)往往比先前的元素可能更不被需要(如由断言信息所标记的),因此性能已经被发现是可接受的。
因此,此类布置的一些关键属性是在加载操作期间,从存储器获取的数据结构可以乱序地到达并存储在MAB内,并且MAB内的大部分数据移动以FIFO方式发生,这允许简单的路由电路(就低面积和等待时间两方面来说)。此外,MAB内的路由延迟(其确定MAB可以被驱动的最大时钟频率)与向量长度VL无关,因此提供潜在的性能益处。
如前所述,利用图8的布置,假设数据将总是具有相同的大小,例如32位数据元素或64位数据元素。然而,在替代实施例中,MAB可以被调整以允许将其与不同大小的数据元素一起使用,这种不同大小的数据元素的示例在图9中示出。图9示出了不同大小的数据元素如何在到MAB的输入总线上对准。图10示出了MAB缓冲器阵列的示例性布置,假设数据按照图9所示的布置在输入总线上对准。图10中所示的所有总线路径、复用器和正反器以32位粒度操作,并且如图9所示,如果正在处理64位数据元素,则它们被处理为两个32位区段,标记为低(L)区段和高(H)区段。
存储元件和相关联的复用器的布置与图8中的基本上相同,并且在图10中已经把那些元件相应地用相同的附图标记表示。如该图的左侧所示,存在六个输入线600,各种输入数据元素可以经由这些输入线转发。如果处理32位数据元素,则仅使用上面三条输入线路,而如果处理64位数据元素,则如图所示使用全部六条输入路径。因此,纯粹举例而言,当处理32位数据元素时,第一组的Y数据元素可以经由复用器456输入到存储元件454中,或者当处理64位数据元素时,还可以使用与用于32位数据元素的Z值相同的输入路径600,经由复用器456将64位Y数据元素的下半部分按路径发送到存储元件454中。
与图8的示例一样,应当理解的是,可以独立访问任何组,并且相应地数据可以从存储器乱序到达。此外,在加载操作期间以与先前参考图8所讨论的相同的方式排出MAB,此时经由四条输出路径605使得每个循环排出一个集合,并且来自每个集合的数据元素经由互连路径610向上移动穿过阵列。
考虑到存储操作,则经由各种输入路径615和互连路径610,以与先前参考图8所讨论的方式相同的方式填充MAB。当处理64位数据元素时,第一列和第三列存储64位数据元素的下半部分,而第二列和第四列经由输入路径615存储64位数据元素的上半部分。
当排出所示结构时,MAB再次以FIFO型方式排出,但是对于每一行有效地存在两个输出路径620,一个用于偶数编号组,另一个用于奇数编号组,并且此外提供了各种输出复用器640。对于32位数据元素而言,在第一循环期间将偶数编号组经由相关路径620发送到输出总线。然后,对应的输出复用器640切换以选择不同的输入,从而允许存储在奇数编号组中的数据元素经由相关输出路径620输出。在此过程中,存储元件内容左移两个组,使得例如存储元件470中的内容移动到存储元件450中,并且存储元件480的内容移动到存储元件460中。在第三循环中,输出复用器再次切换,从而允许输出下一组数据元素(其现在存储在数据元素450、454、458中),并且随后在下一循环期间复用器输出再次切换以允许输出最终数据元素,所述最终数据元素现在存储在存储元件460、464、468中。
上述过程在处理32位数据元素时执行,因此在复用器640的输入之间切换允许从这些复用器通过三条输出路径输出一系列数据结构。
当处理64位数据元素时,将图10左侧所示的所有六个输出路径结合所示的数据元素部分一起使用。当处理64位数据元素时,将会看到,通过将正反器内容向左移位两组,使得当第一组的正反器的初始内容被输出时,第三组470、474、478中的内容移动到第一组450、454、458,并且随后当存储在第二组的正反器中的原始内容被输出时,第四组480、484、488中的内容移位到第二组460、464、468中,这使得每个循环能够输出一组64位元素。具体地,组450、454、458和组460、464、468和组460、464、468的原始内容可以在第一循环中输出,并且然后在第二循环中可以随后输出两个组470、474、478和480、484、488中的原始内容(该等内容此时已经经由转发路径630移动到两个左侧组中)。
因此,通过使用图10所示的方法,与先前参考图8讨论的单个数据类型变体相同的存储要求是必需的,并且所有总线和部件都以32位粒度执行操作,同时支持使用不仅32位数据元素,还有64位数据元素执行操作的能力。
图11示出了MAB阵列和相关的路由电路的又一个示例性布置,该示例性布置与图10中所示的示例的不同之处在于所需的数据移动是使用复用器而不是采用FIFO式布置执行的。具体地,在加载操作期间,在输入路径700上提供数据,并且经由所需的复用器将该数据按路径发送到各种存储元件的输入端中。如可以看出的,可以独立地访问任何组。然后,关于加载排出路径705,每个排出路径均具有相关联的复用电路710和对应的路由路径,从而允许独立地访问任何集合,并且由此允许以任何顺序排出该等集合。此外,考虑到存储操作,在输入路径715上提供的向量可以经由所示路径和输入复用器而按路径发送到存储元件,以使得向量能够以任何顺序输入到该关联集合的存储元件中。此外,关于用于将数据结构输出到加载存储单元以存储在存储器中的存储输出路径720,同样提供了相关的复用器730和对应的路由路径,以便使得能够以任何顺序访问这些组。通过这种方法,可以跳过如例如由先前提到的断言信息所指示的任何不希望组的存储元件。
虽然这种方法增加了复杂性(潜在地在面积和延迟方面),但是其也减少了数据传输期间激活的门的数量,因此可以提高时钟门控的效率。应当进一步注意的是,虽然在图11所示的示例中在用于存储操作的输出路径上提供的各种复用器730被示出为每行一序列分开的复用器,但是该序列/系列复用器可以替代地被合并到一个宽复用器中,以经由相应的输出路径720用于每个32位输出连接器。
在上面讨论的示例实现中,已经假设系统的某些特征(诸如存储器中的各种数据结构之间的偏移,这种数据结构的潜在不对准,以及缓存端口宽度(其在一个示例中是128位))会将从大多数缓存访问获得的结果限制为仅一个数据结构的数据元素。例如,128位的访问通常仅返回32位大小数据元素的一个数据结构,以及64位数据元素的仅部分数据结构。然而,某些数据结构可以表现出在相邻数据结构之间足够小的偏移,以允许每个缓存访问提取多于一个数据结构。当缓存访问窗口增大到256位(例如通过利用两个相邻的缓存端口执行存储器访问)时,这变得更加可能。
图12的示例中所示的填充方案试图通过每个循环服务多达两个数据结构来利用这种可能性。其假设在这样的循环中加载的两个相邻的数据结构对应于一个偶数编索引的数据结构和一个奇数编索引的数据结构。此外,其假设这两种数据结构都是所希望的(即,相关的断言等于一)。如图12所示,一个数据结构的数据元素可以通过输入路径800按路径发送到第一组或第三组存储元件中,与此同时分开的数据结构的数据元素可以通过输入路径802同时按路径发送到第二组或第四组存储元件中。在这个示例中,假设排出路径如先前参考图10的示例所讨论的那样,因此每个循环通过输出路径805排出一个存储元件向量,其中向量经由互连路径810向上移动穿过存储结构阵列。为简单起见,省略了提供用于存储操作的路由选择,但是如果需要的话,可以提供具有双端口的排出路径,以使得存储在相邻组中的两个数据结构能够在相同的循环中排出到加载存储缓冲器,以输出到存储器。然而,在许多情况下,存储与加载相比对性能不那么重要,因此由这种方法引入的复杂性对于存储操作而言可能是不合理的。
图13表明了如何使用128位宽的缓存访问窗口提取包括两个各自32位的数据元素的四个数据结构,然后与输入总线对准的示例。应注意,偶数和奇数32位数据元素的交错允许图12中的电路重新使用64位数据元素的下半部分/上半部分的输入连接来用于偶数/奇数32位数据元素,而不需要专用的路由选择或复用。因此,引入到对准阶段中以执行图13所示的对准的附加电路因为MAB的复杂性降低而偏移。
因此,在图13所示的示例中,MAB填充有从存储器到达的数据,并且数据结构可以如以前那样乱序到达。对应于偶数/奇数数据结构的数据将分别通过对应的输入连接器800、802输入。提供了专用于偶数和奇数数据结构的两个集合的写入断言,并且使用底层数据结构的标识符来确定哪些正反器被更新。然后用于加载操作的排出方案如先前参考图10所讨论的那样。
虽然在一个实施例中,这可能潜在地使32位数据元素的两个数据结构能够被以两个数据结构之间的任意偏移来同时处理,从而允许这种任意偏移可以显著增加对准电路的复杂性。因此,在一个实施例中,为了限制这种复杂性,被同时处理的32位数据元素的数据结构的数量可以被限制为两个,这些数据结构的偏移被限制为零。
图14A示出了利用流水线来处理上述类型的加载操作。在解码流水线阶段期间,通过对用于指定加载操作的一个或多个指令执行解码来确定所需的加载操作,分配所需的MAB区域,标识断言信息,并且指定目标寄存器(在一些实施例中如先前所述的,目标寄存器可以在其他地方保持,而不是与所分配的MAB区域相关联)。此外,各种数据结构的ID被标识并与MAB内的各个组相关联。在1阶数据访问阶段期间,发起对与相关数据结构标识符相关联的数据结构的数据访问,并且当获取数据时,则在对准/命中逻辑阶段,将获取的数据与结果总线对齐,并根据需要设置写入断言信息。在StructLoad缓冲阶段期间,MAB内的标识列(即,与相关数据结构标识符相关联的列)被写入总线上提供的数据,其中参考写入断言信息以识别要更新哪个存储元件。
如图14A所示,对每个数据结构标识符(不包括经由断言信息Pg标记为不需要的任何数据结构标识符)而言,重复这些不同的流水线阶段。一旦将所有所需的数据结构存储在MAB中,则实现MAB排出流水线阶段。对于每个目标寄存器而言,这导致MAB内的一行被输出到该目标寄存器,其中将逻辑“0”值插入与不活动的列相关联的任何数据元素位置。此后,该过程结束于提交阶段,在该提交阶段中提交加载操作,此时释放MAB区域以供与另一加载或存储操作相关联地使用。
在一个实施例中,虽然至少在加载操作中标识的第一数据结构是非推测加载的,但是后续数据结构中正在加载的一个或多个数据结构可能是推测加载的。因此,因为在这种情况下MAB将包括推测状态,所以在提交阶段处过程需要等待,直到在执行提交操作之前已经执行了所有相关的微操作。
在一个实施例中,如图14B所示,在加载访问期间发生故障时,确定在此时访问的数据结构是由于非推测性访问还是推测性访问。如果是由于非推测访问,则故障可能导致产生异常来处理该故障。然而,如果故障与推测性访问相关地发生,则在一个实施例中不会采取异常,而是替代地使用推测性访问中的故障的存在来更新断言信息以将与该推测性访问相关的组和所有后续组(所有后续组也将涉及推测性访问)标记为不活动。然而,该过程可以继续用是活动的并且与在序列中比导致检测到的推测性故障的加载访问更早的非推测性(并且实际上其他是推测性的)加载访问相关联的任何组来填充MAB缓冲区。
因此,在图14B所示的示例中,假设与标识符ID0相关联的非推测性访问如以前那样操作,并且不产生任何故障。然而,假设与标识符ID1相关联的访问是推测性访问,并且在1阶数据访问期间检测到故障。在对准/命中阶段期间,数据被忽略,并且随后在StructLoad缓冲阶段,没有数据被写入到MAB内的相关组中,而是替代地更新断言存储装置以将与当前访问和所有后续访问相关联的断言信息设置为零。基于经修改的断言信息,任何活动的通道将具有从存储器加载的数据,并且随后在接收到所有活动通道的数据时,可以像以前那样实现MAB排出阶段和提交阶段。
图15示意性地示出了用于推测性访问的这种故障处理行为。如框900所示的,初始断言信息是“1101”。如框910所示的,在第一加载访问期间,从存储器加载第一组的X和Y分量并存储在第一组MAB中。然后假设接收到的下一加载数据是与第四列相关联的数据,并且只要该断言是活动的,就将信息存储在该列内,如框915所指示的。应该注意,X、Y坐标X3、Y3的加载涉及推测性访问,但是由于没有发生故障,所以信息被加载并存储在MAB缓冲器内。
然而,假设当加载第二组的数据,即坐标X1、Y1时,检测到了故障。然而,由于该访问涉及推测性访问,因此不会采取异常,而是替代地在更新MAB时,不将X、Y数据添加到缓冲器中,而是替代地更新断言数据以将当前组的断言设置为零,并且还将所有后续组的断言设置为零,如框920所示的。因此,在此时可以看出,唯一剩余的活动组是第一组,并且已经获得了该组的数据。因此,该过程可以行进到MAB排出和提交阶段,此时只有值X0和Y0将被写入相关的目标向量寄存器。
通过这种方法,可以获得执行推测性加载和存储操作的性能益处。然而,在这样的推测性加载操作引起故障被检测到的情况下,此时不需要采取可能会影响性能的异常,而是替代地完成对在导致故障的推测性数据结构之前的任何数据结构的加载操作。可能是当在稍后的时间点试图再次加载导致故障的数据结构时,不会出现这种故障,这是由于例如以下事实:在稍后的时间正确的页面被存储在存储器中,因此当寻求加载数据时不会发生故障。因此,通过避免对与推测性加载访问相关的故障采取异常,可以实现显著的性能益处。
在上述实施例中,在断言信息被用于标识任何不希望的组的情况下,则在一个实施例中描述了使用调零电路来在与逻辑“0”断言相关联的任何数据元素位置处插入逻辑“0”值。在一个替代实施例中,可以执行合并过程,其中首先读取向量寄存器的当前内容,然后执行合并操作以用存储在MAB内的相关集合的任何活动通道中的内容来更新寄存器内容。在此实施例中,不是在与逻辑“0”断言相关联的任何数据元素位置中添加逻辑“0”值,而是保留存储在该数据元素位置处的该向量寄存器中的预先存在的数据元素。
已经发现,上述实施例提供了处理关于由一个或多个数据元素组成的数据结构执行的收集和/或分散操作的特别有效的机制。
上述实施例的技术可以显著提高从存储器加载数据结构和将数据结构存储到存储器的性能。它还可以产生潜在的节能,例如通过由于所需的微操作、缓存访问和寄存器访问的数量减少而减少动态能耗。这也可能导致所需的发送队列和加载存储队列的大小减小,这将降低静态功耗。
在本申请中,词语“被配置成用于......”用来表示设备的元件具有能够执行所定义的操作的配置。在这种情况下,“配置”是指硬件或软件互连的布置或方式。例如,该设备可以具有提供所定义操作的专用硬件,或者处理器或其他处理装置可以经编程以执行所述功能。“被配置成用于......”并非暗示设备元件需要以任何方式改变以提供所定义的操作。
虽然已经参考附图详细描述了本发明的说明性实施例,但是应当理解,本发明不限于这些精确的实施例,并且本领域的技术人员可以在本发明中实现各种改变、添加和修改,而不偏离由所附权利要求书限定的本发明的范围和精神。例如,从属权利要求的特征可以与独立权利要求的特征一起进行各种组合,而不偏离本发明的范围。
Claims (26)
1.一种设备,包括:
第一接口电路,所述第一接口电路用于接收从存储器获取的数据结构,每个数据结构具有相关联的标识符并且包括N个数据元素;
多轴缓冲器电路,所述多轴缓冲器电路具有存储元件阵列,沿着第一轴线所述阵列被组织为N个集合的存储元件,每一集合包括许多VL个存储元件,并且沿着第二轴线所述阵列被组织为多组N个存储元件,每一组包括来自所述N个集合中的每一集合的存储元件;
访问控制电路,所述访问控制电路用于将接收到的数据结构的所述N个数据元素存储在依赖于所述相关联的标识符选择的所述组中的一个组中;以及
第二接口电路,所述第二接口电路响应于所需的数据结构已被存储在所述多轴缓冲器电路中的指示,而输出存储在多个集合的存储元件中的一个或多个集合中的所述数据元素作为一个或多个对应的数据元素向量以存储在寄存器组中,每个向量包括VL个数据元素。
2.根据权利要求1所述的设备,其中,N是2或更大的整数。
3.根据权利要求1或2所述的设备,其中,所述所需的数据结构中的一个或多个所需的数据结构相对于所述所需的数据结构中的其他所需的数据结构被存储在存储器中的非连续地址处。
4.根据前述权利要求中任一项所述的设备,其中,所述访问控制电路还被布置成用于在执行存储操作期间重复使用所述多轴缓冲器电路,以将来自所述寄存器组的N个数据元素向量存储到存储器中以作为每个数据结构包括N个数据元素的多个数据结构,所述访问控制电路使得所述多轴缓冲器被访问以将经由所述第二接口从所述寄存器组接收到的每个数据元素向量存储在沿着所述第一轴线的一个相关集合的存储元件中,并且使得从沿着所述第二轴线的一个或多个相关组的存储元件获取一个或多个数据结构,以经由所述第一接口电路输出到所述存储器。
5.根据前述权利要求中任一项所述的设备,还包括断言存储装置,所述断言存储装置用于与沿着所述第二轴线的每一组的存储元件相关联地存储指示该相关组的存储元件是活动还是不活动的断言值,并且所述所需的数据结构是与活动组的存储元件相关联的那些数据结构。
6.根据权利要求5所述的设备,其中,所述第一接口电路被布置成用于抑制从所述存储器中获取与不活动组的存储元件相关的数据结构。
7.根据从属于权利要求4时的权利要求5所述的设备,其中,在所述存储操作期间所述第一接口电路被布置成用于抑制将与任何不活动组的存储元件相关的数据结构输出到所述存储器。
8.根据权利要求5至7中任一项所述的设备,其中,所述第二接口电路包括插入电路,所述插入电路用于当输出所述数据元素向量以存储在所述寄存器组中时,将预定数据值插入所述数据元素向量内与不活动组的存储元件相关联的每个数据元素位置中。
9.根据权利要求8所述的设备,其中,所述预定值是逻辑零值。
10.根据前述权利要求中任一项所述的设备,其中,所述第一接口电路包括对准电路,所述对准电路用于将从所述存储器获取的数据结构的所述数据元素与内部总线格式对准。
11.根据权利要求10所述的设备,还包括与所述内部总线格式相关联的写入断言字段,用于识别所述内部总线上的哪些数据元素需要被存储在所述多轴缓冲器电路中。
12.根据前述权利要求中任一项所述的设备,还包括:
分配电路,所述分配电路将所述数据结构的所述相关联的标识符分配给所述阵列内的相应组的存储元件,以供所述访问控制电路在确定将接收到的数据结构的所述N个数据元素存储到哪个组内时使用。
13.根据从属于权利要求5时的权利要求12所述的设备,其中,所述分配电路还被布置成用于确定要存储在所述断言存储装置中的所述断言值。
14.根据权利要求12或13所述的设备,其中,所述分配电路还被布置成用于指定所述多轴缓冲器电路内的所述存储元件阵列,所述多轴缓冲器电路具有足够的存储元件以使得能够指定不止一个存储元件阵列,并且所述访问控制电路被布置成用于控制所述多轴缓冲器电路的使用以使得能够使用所述多轴缓冲器电路内的不同存储元件阵列并行地处理多个访问操作。
15.根据权利要求14所述的设备,其中,所述分配电路被布置成用于一旦存储在每个集合的存储元件中的所述数据元素已被输出作为对应的数据元素向量以存储在所述寄存器组中,就释放所述存储元件阵列以供与另一访问操作结合使用。
16.根据权利要求12至15中任一项所述的设备,其中,所述分配电路被提供在解码电路内,所述解码电路用于产生一系列微操作以实现加载操作以将多个数据结构从存储器传输到存储在所述寄存器组中的一个或多个数据元素向量中。
17.根据前述权利要求中任一项所述的设备,还包括解码电路,所述解码电路用于产生一系列微操作以实现加载操作,以将多个数据结构从存储器传输到存储在所述寄存器组中的一个或多个数据元素向量中,每个数据结构的所述相关联的标识符是从由所述解码电路生成的微操作标识符导出的。
18.根据前述权利要求中任一项所述的设备,还包括在所述多轴缓冲器电路内的路由电路,所述路由电路用于使所述多组存储元件能够以任何顺序被更新。
19.根据权利要求18所述的设备,其中,所述路由电路提供排出路径以使得在输出每个数据元素向量以存储在所述寄存器组中时能够连续地访问每一集合的存储元件。
20.根据从属于权利要求4时的权利要求19所述的设备,其中,所述排出路径在所述存储操作期间被重复使用以将经由所述第二接口从所述寄存器组接收的每个数据元素向量连续地存储在沿着所述第一轴线的一个相关集合的存储元件中。
21.根据权利要求18所述的设备,其中,所述路由电路包括复用电路以使得每一集合的存储元件能够以任何顺序被访问。
22.根据权利要求18至21中任一项所述的设备,其中,所述路由电路被布置为使得所述访问控制电路使用所述多轴缓冲器电路内的相同的存储元件阵列,而不管正在被处理的数据元素具有第一尺寸还是与所述第一尺寸不同的至少另一尺寸。
23.根据权利要求18至22中任一项所述的装置,其中,所述路由电路包括多个端口,以使多个组的存储元件能够同时被更新。
24.根据当从属于权利要求5的前述权利要求中任一项所述的设备,其中执行加载操作以将多个数据结构从所述存储器传输到存储在所述寄存器库中的一个或多个数据元素向量中,所述多个数据结构中的一个或多个数据结构是推测性地获取的,并且在从存储器中推测性地获取所述一个或多个数据结构中的一个数据结构期间检测到故障时,更新断言存储装置以将与所述数据结构相关的所述组存储元件、以及所述阵列内的所有后续组的存储元件标记为不活动的。
25.一种用于将多个数据结构从存储器传输到存储在寄存器组中的一个或多个数据元素向量中的方法,包括:
从所述存储器获取所述数据结构,每个数据结构具有相关联的标识符并且包括N个数据元素;
提供在缓冲器内的存储元件阵列,沿着第一轴线所述阵列被组织为N个集合的存储元件,每一集合包括许多VL个存储元件,并且沿着第二轴线所述阵列被组织为多组N个存储元件,每一组包括来自所述N个集合中的每一集合的存储元件;
将每个获取的数据结构的所述N个数据元素存储在依赖于所述相关联的标识符而选择的所述组中的一个组中;以及
响应于所需的数据结构已被存储在所述缓冲器中的指示,而输出存储在所述多个集合的存储元件中的一个或多个集合中的所述数据元素作为一个或多个对应的数据元素向量以存储在所述寄存器组中,每个向量包括VL个数据元素。
26.一种设备,包括:
第一接口装置,所述第一接口装置用于接收从存储器获取的数据结构,每个数据结构具有相关联的标识符并且包括N个数据元素;
多轴缓冲器装置,所述多轴缓冲器装置具有存储元件装置阵列,沿着第一轴线所述阵列被组织为N个集合的存储元件装置,每一集合包括许多VL个存储元件装置,并且沿着第二轴线所述阵列被组织为多组N个存储元件装置,每一组包括来自所述N个集合中的每一集合的存储元件装置;
访问控制装置,所述访问控制装置用于将接收到的数据结构的所述N个数据元素存储在依赖于所述相关联的标识符选择的所述组中的一个组中;以及
第二接口装置,所述第二接口装置响应于所需的数据结构已被存储在所述多轴缓冲器装置中的指示,而输出存储在所述多个集合的存储元件装置中的一个或多个集合中的所述数据元素作为一个或多个对应的数据元素向量以存储在寄存器组装置中,每个向量均包括VL个数据元素。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1513498.4 | 2015-07-31 | ||
GB1513498.4A GB2540940B (en) | 2015-07-31 | 2015-07-31 | An apparatus and method for transferring a plurality of data structures between memory and one or more vectors of data elements stored in a register bank |
PCT/GB2016/051769 WO2017021676A1 (en) | 2015-07-31 | 2016-06-15 | An apparatus and method for transferring a plurality of data structures between memory and one or more vectors of data elements stored in a register bank |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107851017A true CN107851017A (zh) | 2018-03-27 |
CN107851017B CN107851017B (zh) | 2022-05-17 |
Family
ID=54062947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680043357.5A Active CN107851017B (zh) | 2015-07-31 | 2016-06-15 | 用于传输多个数据结构的设备和方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10437594B2 (zh) |
KR (1) | KR102513265B1 (zh) |
CN (1) | CN107851017B (zh) |
GB (1) | GB2540940B (zh) |
WO (1) | WO2017021676A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112005214A (zh) * | 2018-04-21 | 2020-11-27 | 微软技术许可有限责任公司 | 具有包括多端口存储器的向量寄存器文件的矩阵向量乘法器 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2554096B (en) * | 2016-09-20 | 2019-03-20 | Advanced Risc Mach Ltd | Handling of inter-element address hazards for vector instructions |
US11048509B2 (en) * | 2018-06-05 | 2021-06-29 | Qualcomm Incorporated | Providing multi-element multi-vector (MEMV) register file access in vector-processor-based devices |
US11074214B2 (en) | 2019-08-05 | 2021-07-27 | Arm Limited | Data processing |
US11567767B2 (en) | 2020-07-30 | 2023-01-31 | Marvell Asia Pte, Ltd. | Method and apparatus for front end gather/scatter memory coalescing |
US11567771B2 (en) * | 2020-07-30 | 2023-01-31 | Marvell Asia Pte, Ltd. | Method and apparatus for back end gather/scatter memory coalescing |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040103262A1 (en) * | 2000-02-29 | 2004-05-27 | International Business Machines Corporation | Vector register file with arbitrary vector addressing |
CN1662904A (zh) * | 2002-06-26 | 2005-08-31 | 国际商业机器公司 | 具有级联simd结构的数字信号处理器 |
US6941446B2 (en) * | 2002-01-21 | 2005-09-06 | Analog Devices, Inc. | Single instruction multiple data array cell |
CN1866222A (zh) * | 2005-05-17 | 2006-11-22 | 国际商业机器公司 | 用于初始化存储器块的处理器、数据处理系统和方法 |
CN1890630A (zh) * | 2003-12-09 | 2007-01-03 | Arm有限公司 | 在寄存器和存储器之间移动数据的数据处理设备和方法 |
US20070245132A1 (en) * | 1999-04-09 | 2007-10-18 | Dave Stuttard | Parallel data processing apparatus |
CN101243421A (zh) * | 2005-08-19 | 2008-08-13 | 国际商业机器公司 | 在处理器与外部设备之间传送指令和数据的系统和方法 |
CN101542430A (zh) * | 2006-09-29 | 2009-09-23 | Mips技术公司 | 用于处理器的加载/存储单元及其应用 |
CN102870096A (zh) * | 2010-05-20 | 2013-01-09 | 苹果公司 | 子缓冲器对象 |
US20140032879A1 (en) * | 2012-07-26 | 2014-01-30 | VeriSilicon Holdings Co., Ltd | Circuit and method for searching a data array and single-instruction, multiple-data processing unit incorporating the same |
CN103778085A (zh) * | 2012-10-23 | 2014-05-07 | 美国亚德诺半导体公司 | 存储器体系结构 |
CN103927268A (zh) * | 2014-04-08 | 2014-07-16 | 中国科学院微电子研究所 | 一种存储器的访问方法及装置 |
CN104487941A (zh) * | 2012-07-11 | 2015-04-01 | Arm有限公司 | 在向量处理过程中控制处理数据元素的顺序 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4967343A (en) * | 1983-05-18 | 1990-10-30 | International Business Machines Corp. | Pipelined parallel vector processor including parallel configured element processors for processing vector elements in parallel fashion |
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 |
US5805789A (en) * | 1995-12-14 | 1998-09-08 | International Business Machines Corporation | Programmable computer system element with built-in self test method and apparatus for repair during power-on |
US6898691B2 (en) * | 2001-06-06 | 2005-05-24 | Intrinsity, Inc. | Rearranging data between vector and matrix forms in a SIMD matrix processor |
JP4330396B2 (ja) * | 2003-07-24 | 2009-09-16 | 株式会社ルネサステクノロジ | 半導体記憶装置 |
US7196708B2 (en) * | 2004-03-31 | 2007-03-27 | Sony Corporation | Parallel vector processing |
US7343572B1 (en) * | 2005-03-31 | 2008-03-11 | Xilinx, Inc. | Vector interface to shared memory in simulating a circuit design |
US20070150697A1 (en) * | 2005-05-10 | 2007-06-28 | Telairity Semiconductor, Inc. | Vector processor with multi-pipe vector block matching |
US7856246B2 (en) * | 2007-03-21 | 2010-12-21 | Nokia Corporation | Multi-cell data processor |
US8295073B2 (en) * | 2009-01-30 | 2012-10-23 | Unity Semiconductor Corporation | Non-volatile dual port third dimensional memory |
GB2519107B (en) * | 2013-10-09 | 2020-05-13 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing speculative vector access operations |
-
2015
- 2015-07-31 GB GB1513498.4A patent/GB2540940B/en active Active
-
2016
- 2016-06-15 WO PCT/GB2016/051769 patent/WO2017021676A1/en active Application Filing
- 2016-06-15 US US15/746,559 patent/US10437594B2/en active Active
- 2016-06-15 KR KR1020187004345A patent/KR102513265B1/ko active IP Right Grant
- 2016-06-15 CN CN201680043357.5A patent/CN107851017B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070245132A1 (en) * | 1999-04-09 | 2007-10-18 | Dave Stuttard | Parallel data processing apparatus |
US20040103262A1 (en) * | 2000-02-29 | 2004-05-27 | International Business Machines Corporation | Vector register file with arbitrary vector addressing |
US6941446B2 (en) * | 2002-01-21 | 2005-09-06 | Analog Devices, Inc. | Single instruction multiple data array cell |
CN1662904A (zh) * | 2002-06-26 | 2005-08-31 | 国际商业机器公司 | 具有级联simd结构的数字信号处理器 |
CN1890630A (zh) * | 2003-12-09 | 2007-01-03 | Arm有限公司 | 在寄存器和存储器之间移动数据的数据处理设备和方法 |
CN1866222A (zh) * | 2005-05-17 | 2006-11-22 | 国际商业机器公司 | 用于初始化存储器块的处理器、数据处理系统和方法 |
CN101243421A (zh) * | 2005-08-19 | 2008-08-13 | 国际商业机器公司 | 在处理器与外部设备之间传送指令和数据的系统和方法 |
CN101542430A (zh) * | 2006-09-29 | 2009-09-23 | Mips技术公司 | 用于处理器的加载/存储单元及其应用 |
CN102870096A (zh) * | 2010-05-20 | 2013-01-09 | 苹果公司 | 子缓冲器对象 |
CN104487941A (zh) * | 2012-07-11 | 2015-04-01 | Arm有限公司 | 在向量处理过程中控制处理数据元素的顺序 |
US20140032879A1 (en) * | 2012-07-26 | 2014-01-30 | VeriSilicon Holdings Co., Ltd | Circuit and method for searching a data array and single-instruction, multiple-data processing unit incorporating the same |
CN103778085A (zh) * | 2012-10-23 | 2014-05-07 | 美国亚德诺半导体公司 | 存储器体系结构 |
CN103927268A (zh) * | 2014-04-08 | 2014-07-16 | 中国科学院微电子研究所 | 一种存储器的访问方法及装置 |
Non-Patent Citations (1)
Title |
---|
钟升: "基于SIMD PE阵列的DCT数据并行实现方法研究", 《电子学报》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112005214A (zh) * | 2018-04-21 | 2020-11-27 | 微软技术许可有限责任公司 | 具有包括多端口存储器的向量寄存器文件的矩阵向量乘法器 |
CN112005214B (zh) * | 2018-04-21 | 2024-02-20 | 微软技术许可有限责任公司 | 具有包括多端口存储器的向量寄存器文件的矩阵向量乘法器 |
Also Published As
Publication number | Publication date |
---|---|
CN107851017B (zh) | 2022-05-17 |
GB2540940B (en) | 2018-01-03 |
GB2540940A (en) | 2017-02-08 |
KR20180033527A (ko) | 2018-04-03 |
WO2017021676A1 (en) | 2017-02-09 |
US20180217840A1 (en) | 2018-08-02 |
US10437594B2 (en) | 2019-10-08 |
KR102513265B1 (ko) | 2023-03-23 |
GB201513498D0 (en) | 2015-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107851017A (zh) | 用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法 | |
CN114003547B (zh) | 可重构并行处理 | |
US10055228B2 (en) | High performance processor system and method based on general purpose units | |
CN103250131B (zh) | 包括用于早期远分支预测的影子缓存的单周期多分支预测 | |
CN108140232A (zh) | 用于处理图像的图像处理器和方法 | |
CN109785905B (zh) | 一种面向基因比对算法的加速装置 | |
US20130145124A1 (en) | System and method for performing shaped memory access operations | |
CN105453030B (zh) | 向较宽的寄存器进行依赖于模式的部分宽度加载的处理器、方法和系统 | |
CN111656339B (zh) | 存储器装置及其控制方法 | |
JP2016528641A5 (zh) | ||
US20050160253A1 (en) | Method for managing data in an array processor and array processor carrying out this method | |
US10998070B2 (en) | Shift register with reduced wiring complexity | |
TWI666551B (zh) | 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行 | |
DE102012221504A1 (de) | Mehrniveau-Anweisung-Zwischenspeicher-Zuvor-Holen | |
DE102013114351A1 (de) | System und Verfahren für Hardware-Disponierung bedingter Barrieren und ungeduldiger Barrieren | |
CN111630505A (zh) | 深度学习加速器系统及其方法 | |
US10659396B2 (en) | Joining data within a reconfigurable fabric | |
CN105874436A (zh) | 用于自主存储器的方法及系统 | |
DE102012222932A1 (de) | Gestaltetes Register-Datei-Lesen | |
GB2073923A (en) | Branching in computer control store | |
CN105404635B (zh) | 字符串匹配的方法、设备和异构计算系统 | |
CN107408076B (zh) | 数据处理装置 | |
US20180217844A1 (en) | Method and apparatus for asynchronous scheduling | |
US20080235707A1 (en) | Data processing apparatus and method for performing multi-cycle arbitration | |
CN110603521A (zh) | 超线程处理器 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |