CN109032668B - 具有高带宽和低功率向量寄存器堆的流处理器 - Google Patents
具有高带宽和低功率向量寄存器堆的流处理器 Download PDFInfo
- Publication number
- CN109032668B CN109032668B CN201710434300.4A CN201710434300A CN109032668B CN 109032668 B CN109032668 B CN 109032668B CN 201710434300 A CN201710434300 A CN 201710434300A CN 109032668 B CN109032668 B CN 109032668B
- Authority
- CN
- China
- Prior art keywords
- vector
- cache
- valu
- register file
- cache line
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 claims abstract description 42
- 230000004044 response Effects 0.000 claims description 38
- 230000015654 memory Effects 0.000 claims description 20
- 238000003672 processing method Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000004064 recycling Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 241000699670 Mus sp. Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000003134 recirculating effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
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/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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0855—Overlapped cache accessing, e.g. pipeline
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0891—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
-
- 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/3001—Arithmetic 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/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- 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/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- 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/3012—Organisation of register space, e.g. banked or distributed register file
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- 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/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
-
- 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/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- 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/3824—Operand accessing
- G06F9/383—Operand prefetching
- G06F9/3832—Value prediction for operands; operand history buffers
-
- 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/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- 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
-
- 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]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明涉及一种具有高带宽和低功率向量寄存器堆的流处理器。公开了用于实现由并行处理器使用的高带宽低功率的向量寄存器堆的系统、装置和方法。在一个实施方式中,系统至少包括具有多个处理流水线的并行处理单元。并行处理单元包括向量运算逻辑单元和高带宽低功率向量寄存器堆。向量寄存器堆包括满足寄存器带宽要求的多内存库高密度随机存取存储器(RAM)。并行处理单元还包括指令请求队列和指令操作数缓冲器,以便为VALU指令和向量I/O指令提供足够的本地带宽。此外,并行处理单元被配置为利用RAM的输出触发器作为最后一级高速缓存来减少多个指令之间的重复操作数请求。并行处理单元包括向量目标高速缓存以向向量寄存器堆提供附加的R/W带宽。
Description
技术领域
本发明涉及计算机领域,更具体地涉及具有高带宽和低功率向量寄存器堆的流处理器。
背景技术
许多不同类型的计算系统包括向量处理器或单指令多数据(SIMD)处理器。任务可以在这些类型的处理器上并行执行,以增加计算系统的吞吐量。这些任务的一些指令可以利用大部分共享资源,这会降低处理器的性能。因此,共享资源的争用可能导致以低效的方式执行并行任务。另外,用于在并行任务之间共享资源的传统方案可导致功耗的增加。
并行处理器通常是流水线式的。理想情况下,每个时钟周期都会对流水线的每个阶段的指令进行有用的执行。为了利用每个时钟周期,需要为处理流水线提供针对各种指令的处于其各个执行阶段的数据。然而,流水线之间的资源共享可能导致这些资源的争用,并且导致流水线的部分空闲且不执行有用的工作。这降低了处理流水线的效率。例如,当访问寄存器堆随机存取存储器(RAM)的任何两个指令冲突时,流水线将在冲突解决时停止。
发明内容
本文公开了用于实现由流处理器使用的高带宽低功率向量寄存器堆的系统、装置和方法。本公开的一些方面可以具体描述如下:
1.一种系统,其包括:
存储器;和
耦合到所述存储器的处理器,其中所述处理器包括:
向量寄存器堆;
源操作数缓冲器;
向量算术逻辑单元(VALU);和
用于存储由所述VALU执行的指令的结果的向量目标高速缓存;
其中所述处理器被配置为:
从所述向量目标高速缓存逐出第一高速缓存线;以及
响应于确定所述第一高速缓存线包括由待决指令针对的一个或多个源操作数,将所述第一高速缓存线写到所述源操作数缓冲器。
2.如条款1所述的系统,其中所述处理器还被配置为:
识别第一指令的一个或多个源操作数;
确定是否将所述一个或多个源操作数从所述向量寄存器堆、源操作数缓冲器或向量目标高速缓存转发到所述VALU;
等待直到所述VALU的最后一个流水线阶段在所述向量目标高速缓存中分配高速缓存线;以及
将所述第一指令的结果存储在所述向量目标高速缓存中分配的所述高速缓存线中。
3.如条款2所述的系统,其中所述处理器被配置为:
响应于确定所述一个或多个源操作数存储在所述源操作数缓冲器中,从所述源操作数缓冲器转发所述一个或多个源操作数;
响应于确定所述一个或多个源操作数存储在所述向量寄存器堆中,从所述向量寄存器堆中预取所述一个或多个源操作数并将所述一个或多个源操作数存储在所述源操作数缓冲器中;以及
响应于向所述VALU发出第一指令,将所述一个或多个源操作数从所述源操作数缓冲器传送到所述VALU。
4.如条款1所述的系统,其中所述处理器还包括在所述向量寄存器堆的输出上的多个触发器。
5.根据条款4所述的系统,其中所述向量寄存器堆包括多个内存库,并且其中所述处理器还被配置为:
判定第一操作数是否与所述向量寄存器堆的给定内存库上的先前结果相匹配;以及
响应于确定所述第一操作数与所述向量寄存器堆的所述给定内存库上的所述先前结果相匹配,绕过所述源操作数缓冲器来从所述给定内存库的输出上的所述触发器中检索所述第一操作数。
6.根据条款1所述的系统,其中所述处理器还被配置为在所述处理器不能在所述向量目标高速缓存中分配高速缓存线的情况下暂停所述VALU。
7.如条款1所述的系统,其中,所述处理器被配置为等待以在所述向量目标高速缓存中分配高速缓存线,直到由所述VALU生成结果。
8.一种方法,包括:
从向量目标高速缓存中逐出第一高速缓存线;以及
响应于确定所述第一高速缓存线包括由未决指令针对的一个或多个源操作数,将所述第一高速缓存线写到所述源操作数缓冲器。
9.如条款8所述的方法,还包括:
识别第一指令的一个或多个源操作数;
根据一个或多个条件确定是否将所述一个或多个源操作数从向量寄存器堆、源操作数缓冲器或向量目标高速缓存转发到向量算术逻辑单元(VALU);
等待直到所述VALU的最后一个流水线阶段在所述向量目标高速缓存中分配高速缓存线;以及
将所述第一指令的结果存储在所述向量目标高速缓存中分配的所述高速缓存线中。
10.如条款9所述的方法,其中:
响应于确定所述一个或多个源操作数存储在所述源操作数缓冲器中,从所述源操作数缓冲器转发所述一个或多个源操作数;
响应于确定所述一个或多个源操作数存储在所述向量寄存器堆中,从所述向量寄存器堆预取所述一个或多个源操作数并且将所述一个或多个源操作数存储在所述源操作数缓冲器中;以及
响应于向所述VALU发出所述第一指令,将所述一个或多个源操作数从所述源操作数缓冲器传送到所述VALU。
11.根据条款8所述的方法,其中多个触发器位于所述向量寄存器堆的输出上。
12.根据条款11所述的方法,还包括:
判定第一操作数是否与所述向量寄存器堆的给定内存库上的先前结果相匹配;以及
响应于确定所述第一操作数与所述向量寄存器堆的所述给定内存库上的所述先前结果相匹配,绕过所述源操作数缓冲器来从所述给定内存库的输出上的所述触发器中检索第一操作数。
13.根据条款8所述的方法,还包括响应于不能在所述向量目标高速缓存中分配高速缓存线来暂停所述VALU。
14.根据条款8所述的方法,还包括:等待以在所述向量目标高速缓存中分配高速缓存线,直到由所述VALU生成结果。
15.一种装置,包括:
向量寄存器堆;
源操作数缓冲器;
向量算术逻辑单元(VALU);和
用于存储由所述VALU执行的指令的结果的向量目标高速缓存;
其中所述装置被配置为:
从所述向量目标高速缓存中逐出第一高速缓存线;以及
响应于确定所述第一高速缓存线包括由待决指令针对的一个或多个源操作数,将所述第一高速缓存线写到所述源操作数缓冲器。
16.根据条款15所述的装置,其中,所述装置还被配置为:
识别第一指令的一个或多个源操作数;
根据一个或多个条件判定是否将所述一个或多个源操作数从所述向量寄存器堆、源操作数缓冲器或向量目标高速缓存转发到所述VALU;
等待直到所述VALU的最后一个流水线阶段直到在所述向量目标高速缓存中分配高速缓存线;以及
将所述第一指令的结果存储在所述向量目标高速缓存中分配的所述高速缓存线中。
17.根据条款16所述的装置,其中,所述装置还被配置为:
响应于确定所述一个或多个源操作数存储在所述源操作数缓冲器中,从所述源操作数缓冲器转发所述一个或多个源操作数;
响应于确定所述一个或多个源操作数存储在所述向量寄存器堆中,从所述向量寄存器堆预取所述一个或多个源操作数并且将所述一个或多个源操作数存储在所述源操作数缓冲器中;以及
响应于向所述VALU发出所述第一指令,将所述一个或多个源操作数从所述源操作数缓冲器传送到所述VALU。
18.根据条款15所述的装置,其中,所述装置还包括在所述向量寄存器堆的输出上的多个触发器。
19.根据条款18所述的装置,其中所述向量寄存器堆包括多个内存库,并且其中所述装置还被配置为:
判定第一操作数是否与所述向量寄存器堆的给定内存库上的先前结果相匹配;以及
响应于确定所述第一操作数与所述向量寄存器堆的所述给定内存库上的所述先前结果相匹配,绕过所述源操作数缓冲器来从所述给定内存库的输出上的所述触发器中检索第一操作数。
20.根据条款15所述的装置,其中,所述装置还被配置为在所述装置不能在所述向量目标高速缓存中分配高速缓存线的情况下暂停所述VALU。
附图说明
通过结合附图参考以下描述可以更好地理解本文描述的方法和机制的优点,其中:
图1是计算系统的一个实施方式的框图。
图2是流处理器的一个实施方式的框图。
图3是流处理器的一部分的一个实施方式的框图。
图4是示出用于在流处理器中处理指令的方法的一个实施方式的一般流程图。
图5是示出用于实现指令调度子程序的方法的一个实施方式的一般流程图。
图6是示出用于实现VGPR内存库请求仲裁的方法的一个实施方式的一般流程图。
图7是示出用于在向量目标高速缓存中分配和再循环的方法的一个实施方式的一般流程图。
具体实施方式
在下面的描述中,阐述了许多具体细节以提供对本文呈现的方法和机制的透彻理解。然而,本领域普通技术人员应该认识到,可以在没有这些具体细节的情况下实践各种实施方式。在一些情况下,未详细示出公知的结构、组件、信号、计算机程序指令和技术,以免模糊本文描述的方法。应当理解,为了说明的简单和清楚,附图中所示的元件未必按比例绘制。例如,一些元件的尺寸可能相对于其它元件被夸大。
本文公开了用于实现由流处理器使用的高带宽低功率向量寄存器堆的系统、装置和方法。在一个实施方式中,系统至少包括具有多个流处理器的处理单元。每个流处理器包括向量算术逻辑单元(VALU)和高带宽低功率向量寄存器堆。向量寄存器堆包括满足寄存器带宽要求的多内存库(multi-bank)高密度随机存取存储器(RAM)。流处理器还包括指令请求队列和源操作数缓冲器(source operand buffer)来为向量算术逻辑单元(VALU)指令和向量输入/输出(I/O)指令提供足够的本地带宽。此外,流处理器被配置为利用RAM的输出触发器作为最后一级高速缓存来减少多个指令之间的重复操作数请求。此外,流处理器包括向量目标高速缓存,以为向量寄存器堆提供额外的写入和读取带宽。
在各种实施方式中,流处理器能够通过避免同一指令中操作数的重复来降低功耗。此外,流处理器配置为在可能的情况下直接从向量寄存器堆RAM输出触发器进行读取来绕过源操作数缓冲器。此外,向量目标高速缓存包括多个用于从VALU访问的读取端口,以允许VALU旁路访问(bypass accessing)向量寄存器堆内存库RAM。此外,流处理器被配置为执行向量目标高速缓存的按需分配以增加向量目标高速缓存的存储利用。另外,流处理器包括缓存再循环机制,以避免重取操作数,并提供经扩展的数据依赖性检查窗。
在一个实施方式中,流处理器被配置为识别第一指令的一个或多个源操作数。流处理器被配置为根据一个或多个条件来确定是否将一个或多个源操作数从向量寄存器堆、源操作数缓冲器或向量目标高速缓存转发到VALU。当流处理器执行第一指令时,流处理器等待直到VALU的最后一个流水线阶段,直到在向量目标高速缓存中分配高速缓存线。然后,将第一指令的结果存储在向量目标高速缓存中分配的高速缓存线中。
现在参考图1。参考图1,示出了计算系统100的一个实施方式的框图。在一个实施方式中,计算系统100至少包括一或多个处理器110、输入/输出(I/O)接口120,总线125和一或多个存储器设备130。在其它实施方式中,计算系统100可以包括其它组件,和/或计算系统100可以不同地布置。
一或多个处理器110代表任何数量和类型的处理单元(例如,中央处理单元(CPU),图形处理单元(GPU),数字信号处理器(DSP),现场可编程门阵列(FPGA),专用集成电路(ASIC))。在一个实施方式中,一或多个处理器110包括具有多个流处理器的向量处理器。每个流处理器也可以被称为处理器或处理通道。在一个实施方式中,每个流处理器包括向量算术逻辑单元(VALU)和高带宽低功率向量寄存器堆。向量寄存器堆包括满足寄存器带宽要求的多内存库高密度随机存取存储器(RAM)。流处理器还包括指令请求队列和指令操作数缓冲器,以为向量算术逻辑单元(VALU)指令和向量输入/输出(I/O)指令提供足够的局部带宽。此外,流处理器被配置为利用RAM的输出触发器作为最后一级高速缓存来减少多个指令之间的重复操作数请求。此外,流处理器包括向量目标高速缓存,以向向量寄存器堆提供额外的写入和读取带宽。
一或多个存储器设备130代表任何数量和类型的存储器设备。例如,在一或多个存储器设备130中的存储器类型可以包括动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、NAND闪存、NOR闪存、铁电随机存取存储器(FeRAM)或其它。一或多个存储器设备130可由一或多个处理器110访问。I/O接口120代表任何数量和类型的I/O接口(例如,外围组件互连(PCI)总线、PCI-扩展(PCI-X)、PCIE(PCI Express)总线、千兆以太网(GBE)总线、通用串行总线(USB))。各种外围设备可以耦合到I/O接口120。这样的外围设备包括(但不限于)显示器、键盘、鼠标、打印机、扫描仪、操纵杆或其它类型的游戏控制器、媒体记录设备、外部存储设备、网络接口卡等。
现在转到图2,示出了流处理器200的一个实施方式的框图。流处理器200包括向量算术逻辑单元(ALU)245。根据实施方式,向量ALU 245可以包括任何数量的ALU。在一个实施方式中,向量ALU 245包括16个ALU。在其它实施方式中,向量ALU 245包括其它数量的ALU。
到向量ALU 245的输入是从操作数缓冲器240提供。在一个实施方式中,操作数缓冲器240被配置为在给定时钟周期内向向量ALU 245中的每个ALU提供多个操作数。向量ALU245的输出连接到向量目标(VDST)高速缓存235。在一个实施方式中,当向量ALU 245中的给定ALU产生结果时,给定ALU在VDST高速缓存235中针对结果执行高速缓存线(cache line)的延迟分配。换句话说,给定ALU针对结果执行缓存行的按需分配。
如果VDST高速缓存235不能为给定ALU的结果分配高速缓存线,则向量ALU 245的给定ALU将被暂停(stalled),直到结果可以存储在VDST高速缓存235中。在一个实施方式中,VDST高速缓存235被配置为执行高速缓存线再循环(recycling)。例如,如果非脏(un-dirty)的高速缓存线被逐出以便为给定ALU的结果分配新的高速缓存线,则如果非脏的高速缓存线包括随后的请求所针对的一个或更多的操作数,该非脏高速缓存线可被再循环到操作数缓冲器240。
VDST高速缓存235耦合到给向量通用寄存器(VGPR)内存库220A-D馈送数据的多路复用器215A-D的输入。VDST高速缓存235也耦合到操作数缓冲器240。注意,VGPR在本文也可以被称为向量寄存器堆。根据实施方式,任何数量的输入可以耦合到多路复用器215A-D。例如,在一个实施方式中,本地数据共享(LDS)返回数据、纹理返回数据(texture returndata)、VGPR初始化输入和来自VDST高速缓存235的输入耦合到多路复用器215A-D的输入。在其它实施方式中,其它输入可以耦合到多路复用器215A-D。多路复用器215A-D的输出耦合到VGPR内存库220A-D。注意,在其它实施方式中,流处理器200可以包括其它数量的多路复用器215A-D和/或其它数量的VGPR内存库220A-D。
在一个实施方式中,可以独立于其它VGPR内存库220A-D访问每个VGPR内存库220A-D。VGPR内存库220A-D耦合到操作数缓冲器240。每个VGPR内存库220A-D包括N个寄存器,其中N的值根据实施方式的不同而变化。VGPR内存库220A-D中的寄存器的大小也可以根据实施方式的不同而变化。在一个实施方式中,操作数缓冲器240包括专用缓冲器,其可为向量ALU 245的每个ALU提供三个不同的操作数,以服务于例如执行a*b+c操作的融合乘加(FusedMultiply-Add,FMA)操作之类的操作。
将向量ALU(VALU)命令提供给等待指令队列255。然后,命令被传送到依赖性检查微指令调度单元260,以检查指令之间的相关性。然后,VALU命令被传送到收集指令队列265。然后,VALU命令从收集指令队列265传送到ALU 245的各个ALU。
向量输入/输出(I/O)命令(VECIO)由向量I/O命令队列270接收,并通过操作数缓冲器240传送到向量I/O请求单元275。针对向量I/O命令所生成的操作数被传送到耦合到向量I/O块(未示出)的向量I/O请求单元275。根据实施方式,流处理器200可以包括任何数量的向量I/O请求单元275。
现在参考图3,示出了流处理器300的一部分的一个实施方式的框图。图3所示的流处理器300的部分包括单个ALU流水线。在一个实施方式中,流处理器200(图2)包括图3所示的多个ALU流水线。整个流处理器包括任何数量的流水线,流水线的数量从实施方式到实施方式不同。例如,在单指令的多数据(SIMD)宽度为16的处理器中,流处理器将包括图3所示的16个流水线的情况。
流处理器300包括多个VGPR内存库315A-D。在一个实施方式中,VGPR包括4个内存库。在其它实施方式中,VGPR可以包括其它数量的内存库。在一个实施方式中,每个内存库可以每个周期执行1次读取和1次写入。在一个实施方式中,一旦对VGPR内存库进行读取请求,读取结果就被存储在读取FLOP 320A-D中。如果未决指令所需的操作数存储在读取FLOP320中,则操作数可以通过绕过源操作数缓冲器330而从读取FLOP 320直接提供给ALU流水线。
源操作数缓冲器330可以容纳多个VALU指令的源操作数,其中操作数的数量从实施方式到实施方式变化。在一个实施方式中,源操作数缓冲器330容纳多达6个VALU指令的源操作数。在一个实施方式中,源操作数缓冲器330包括专用缓冲器,专用缓冲器用于在每个时钟周期提供3个不同的操作数,以服务诸如执行a*b+c的融合乘加运算的指令。
在一个实施方式中,纵横式交换矩阵(crossbar)325将VGPR内存库的读取结果从输出触发器320A-B路由到操作数缓冲器330。在一个实施方式中,每个单独的操作数存储器可以从任何内存库315A-D接收读取。如果操作数请求相同的VGPR地址,则单个内存库的写入可以传播到多个操作数存储位置。纵横式交换矩阵325还可以将数据从VGPR内存库315读取路由到向量I/O请求单元345,以提供用于向量I/O块(未示出)的操作数。
在一个实施方式中,如果可以直接从RAM输出触发器320A-D检索VALU操作数,则源操作数缓冲器330被绕过(bypass)。从RAM输出触发器320A-D直接检索VALU操作数有助于保存对源操作数缓冲器330的读写功能,并且还减少指令发出延迟。在一个实施方式中,源操作数缓冲器330在每个循环为多级VALU流水线350提供3个操作数读取,每个循环其还写1个操作数作为输出。可以从向量目标高速缓存360转发多级VALU流水线350的三个源操作数中的任何一个。
在一个实施方式中,在ALU流水线350的最后阶段,为VALU目标操作数按需分配高速缓存线。如果向量目标高速缓存控制器找不到新的高速缓存线或不能重新分配非脏的高速缓存线到对应于VALU目标操作数的请求,则VALU流水线350可以暂停。虽然一些VALU指令(例如,FMA指令)仅产生一个目标操作数,但其它VALU指令(例如,双精度FMA操作)产生两个目标操作数。在一个实施方式中,当VALU流水线350被暂停时,不对源操作数缓冲器330执行读取来发出下一条指令。在一个实施方式中,仍然可以执行从未决指令队列和服务向量I/O请求到VGPR内存库315A-D的操作数请求。
在一个实施方式中,向量目标高速缓存360可以具有多个内存库360A-B。例如,在一个实施方式中,向量目标高速缓存360可以包括2个内存库。在本实施方式中,向量目标高速缓存360的偶数内存库360A可以对属于VGPR堆的内存库315A和内存库315C的VGPR进行高速缓存,并且向量目标高速缓存360的奇数内存库360B可以高速缓存属于VGPR堆的存库315B和内存库315D。
根据实施方式,每个向量目标高速缓存内存库360A-B可以具有一个或多个写端口。如果源操作数在向量目标高速缓存360中命中,则每个向量目标高速缓存内存库360A-B可以具有多个转发读端口以提供额外的VGPR读带宽。每个向量目标高速缓存内存库360A-B可以提供多个写回读端口来将脏(dirty)的高速缓存线写回到VGPR 315。在一个实施方式中,写回读端口与向量I/O读请求共享。向量目标高速缓存360还将源转发(sourceforwarding)提供给ALU流水线350的开始,以绕过源操作数缓冲器330。
在一个实施方式中,向量目标高速缓存360提供用于高速缓存再循环的特殊专用读端口355,其中读端口的数量取决于系统可以分配的高速缓存线的数量。向量目标高速缓存360可以存储多个条目,其中条目的数量根据实施方式而变化。在一个实施方式中,向量目标高速缓存的每个内存库360A-B保存4个条目,2个内存库则总共8个条目。向量I/O写可以直接写到VGPR 315,而不是写到向量目标高速缓存360。在一个实施方式中,当向VGPR315直接执行向量I/O写操作时,写操作将阻塞向量目标高速缓存360对应内存库的写回路径。向量目标高速缓存360可以在下一个周期中重试写回。如果向量I/O写与向量目标高速缓存360的高速缓存线匹配,则向量目标高速缓存360的高速缓存线将被无效,以保持向量目标高速缓存360与VGPR 315之间的数据一致性。
现在转到图4,示出了用于在流处理器中处理指令的方法400的一个实施方式。为了讨论的目的,本实施方式中的步骤与图5-7中的步骤以顺序方式显示。然而,应当注意,在所描述的方法的各种实施方式中,所描述的要素中的一或多个要素被同时执行,以与所示不同的顺序执行,或完全省略。还可以根据需要执行其它附加要素。本文描述的各种系统或装置中的任何一个被配置为实现方法400。
流处理器从指令定序器接收指令命令(框405),并将指令命令存储到用于VALU指令的未决队列中(框410)。指令调度单元从未决队列的前面取出VALU指令(方框415),并且当请求队列有空时将VALU指令发送到请求队列(方框420)。VGPR内存库请求仲裁器检查所有未决指令的有效源操作数,并向VGPR内存库作出请求以充分利用VGPR内存库的读带宽(框425)。
VALU发布单元(issue unit)检查下一请求队列前面的指令的状态,并且如果已经从VGPR内存库中获取了所有所需的操作数(决策框430,“是”支路),并且VALU流水线没有暂停(决策框435,“否”支路),并且所有相关操作数都准备就绪(决策框445,“是”支路),则发布框向VALU发布指令(框450)。如果VALU流水线暂停(决策框435,“是”支路),则VALU发布单元在返回到决策框435之前等待(框440)。在框450之后,指令通过多级指令执行流水线进行(框455)。VALU指令可能需要在VALU流水线中执行多个周期。例如,典型的FMA操作可能需要4到5个流水线阶段才能完成执行。
在VALU流水线的结束处(在一个实施方式中为图3的示例流水线的舍入级(rounding stage)),流水线请求向量目标高速缓存控制器来为结果分配高速缓存线。如果向量目标高速缓存未满(决策框460,“否”支路),则向量目标高速缓存控制器为结果分配高速缓存线(框465)。一旦为完成的VALU指令分配了所需的高速缓存线,则结果被提交到向量目标高速缓存(框470),并且在必要时被写回主VGPR内存库。在框470之后,方法400结束。如果向量目标高速缓存控制器找不到新的高速缓存线(决策框460,“是”支路),则VALU流水线被暂停(方框475),并将结果保存在触发器中用于下一循环来重试。
现在参考图5,示出了用于实现指令调度子程序的方法500的一个实施方式。在一个实施方式中,方法500被实现为(图4的)方法400的框415(即,指令调度框)。在一个实施方式中,指令调度单元负责将指令从未决队列移动到请求队列(决策框505)。如果请求队列未满(决策框510,“是”支路),则从未决队列的顶部的指令被取出并存储在请求队列中(框515)。
指令分派单元对请求队列中的指令进行依赖性检查(框520)。任何指令的源操作数可以取决于位于请求队列中的未执行的指令,或者源操作数可以取决于VALU流水线中的执行指令,或者取决于其结果在向量目标高速缓存中可用的任何先前执行的指令。如果源操作数具有依赖关系,那么在某些情况下,可能不需要从VGPR中获取任何数据,这有助于节省VGPR内存库的带宽并节省功率。
例如,如果可以从向量目标高速缓存取出源操作数,则可以直接从向量目标高速缓存读取源操作数,以保存VGPR内存库的带宽和功率。一些指令是复杂的指令,其可能需要多个周期或需要3个以上的操作数作为FMA指令。这些指令可能需要源操作数缓冲器中的多个插槽(slot)。调度框还将负责将指令推送到请求队列(框525)。在框525之后,方法500结束。
现在转到图6,示出了用于实现VGPR内存库请求仲裁器的方法600的一个实施方式。可能有多个指令(向量I/O和VALU)存在于需要VGPR内存库请求仲裁器选择哪些操作数可以从哪些VGPR内存库读取的队列中。仲裁器针对每个内存库检查所有未决请求(向量I/O和VALU)。对于VGPR的任何一个内存库,向量I/O请求将具有较高的优先级。如果没有针对内存库的向量I/O请求,则仲裁器将选择最旧的VALU未决指令的第一个未获取操作数并对该操作数进行请求,如果满足某些条件则不这样做。例如,如果VALU操作数取决于未完成的上一条指令,或者如果VALU操作数与向量目标高速缓存中的高速缓存线匹配,则仲裁器不需要向VGPR发出请求。如果当前VALU请求与内存库的未决请求相匹配,或者如果当前VALU请求与RAM的输出触发器上可用的数据匹配,则仲裁器不会发送该请求,而是将通知指令发布逻辑来直接从RAM输出触发器获取数据并将数据写到源操作数缓冲器。
在图6的方法600的流程图中示出了仲裁器的示例循环。循环在框605开始,仲裁器以等于0的内存库ID开始(框610)。如果内存库ID小于或等于VGPR内存库的总数(决策框615,“是”支路),则仲裁器从向量I/O请求队列确定是否存在任何对内存库的向量I/O请求(决策框620)。否则,如果内存库ID大于VGPR内存库的总数(决策框615,“否”支路),则循环结束(框625)。
如果存在对内存库的向量I/O请求(决策框620,“是”支路),则仲裁器针对由向量I/O请求所针对的操作数发出对该内存库的请求(框630)。然后,仲裁器增大内存库ID(方框635),方法600返回到决策框615。如果不存在对内存库的向量I/O请求(决策框620,“否”支路)),则仲裁器经由VALU请求队列判定是否存在对内存库的待决VALU请求(决策框640)。如果存在对内存库的待决VALU请求(决策框640,“是”支路),则仲裁器判定未决VALU请求是否与最后一级高速缓存中的数据匹配(决策框645)。注意,VGPR内存库的输出上的触发器可以被称为“最后一级高速缓存”。如果没有对内存库的待决VALU请求(决策框640,“否”支路),则方法600跳转到框635以增大内存库ID。
如果未决VALU请求与最后一级高速缓存中的数据相匹配(决策框645,“是”支路),则仲裁器通知发布逻辑以直接从内存库的输出触发器读取数据(框650)。然后,仲裁器检查对该内存库的下一个VALU未决请求(框655),然后方法600返回到决策框640。如果未决VALU请求与最后一级高速缓存中的数据不匹配(决策框645,否“支路),则方法600跳转到方框630,其中仲裁器向VALU请求所针对的操作数发出对该内存库的请求。注意,在一个实施方式中,方法600由仲裁器在每个时钟周期期间执行。
现在参考图7,示出了用于在向量目标高速缓存中分配和再循环的方法700的一个实施方式。完成的向量ALU(VALU)指令可以请求向量目标高速缓存中的一个或多个高速缓存线来提交其结果。响应于接收到VALU写请求(框705),向量目标高速缓存控制器检查在向量目标高速缓存中是否存在任何空的高速缓存线(决策框710)。注意,为了简洁起见,在图7的讨论中向量目标高速缓存控制器可以被称为高速缓存控制器。在一个实施方式中,向量目标高速缓存具有多个内存库,并且向量目标高速缓存内存库ID由VALU结果的VGPR地址的LSB确定。在其它实施方式中,可以以其它方式确定向量目标高速缓存内存库ID。如果存在用于保存VALU结果的空的高速缓存线(决策框710,“是”支路),则为结果分配新的高速缓存线(框715)。然后,VALU将结果提交到所分配的高速缓存线(框720)。
如果没有空条目来保持VALU结果(决策框710,“否”支路),则高速缓存控制器确定是否存在可以针对新的VALU结果重新分配的任何非脏的高速缓存线(决策框725)。注意,非脏的高速缓存线是指未修改的或干净的高速缓存线(即,未设置脏位(dirty bit))。如果高速缓存没有任何非脏的高速缓存线(决策框725,“否”支路),则VALU结果不能被提交,VALU流水线暂停,并且状态保持下一个周期以重试(框730)。高速缓存控制器的写回逻辑可以释放一些能够在下一个周期中重新使用的空间。
如果高速缓存控制器找到要替换的非脏高速缓存线(决策框725,“是”支路),则高速缓存控制器为新条目选择非脏高速缓存线,其中选择基于高速缓存替换策略(框735)。接下来,高速缓存控制器判定非脏高速缓存线是否包括VALU请求队列中的请求所需的相关操作数(决策框740)。如果非脏高速缓存线具有VALU请求队列中的请求所需的操作数(决策框740,“是”支路),则来自非脏高速缓存线的数据被写回到源操作数缓冲器(框745)。接下来,使用来自新的VALU写入请求的数据替换非脏高速缓存线(框750)。然后,更新高速缓存线存在时间(框755)。在框755之后,方法700结束。再循环退出的高速缓存线的一个好处是避免必须从请求队列中的未决指令的VGPR中提取操作数。此外,一旦VALU指令在执行依赖性检查之后被推入到请求队列中,可以直接从流水线或向量目标高速缓存中的先前指令获取的操作数就不需要从VGPR内存库中获取数据。
在各种实施方式中,软件应用的程序指令用于实现先前描述的方法和/或机制。程序指令描述了诸如C语言之类的高级编程语言中的硬件行为。或者,使用诸如Verilog之类的硬件设计语言(HDL)。程序指令存储在非暂态计算机可读存储介质上。有多种类型的存储介质可用。在使用期间,存储介质可由计算系统访问,以将程序指令和附带数据提供给计算系统以用于程序执行。计算系统包括至少一个或多个存储器和被配置为执行程序指令的一个或多个处理器。
应当强调,上述实施方式仅是实现方案的非限制性示例。对于本领域技术人员而言,一旦完全理解了上述公开内容,许多变化和修改将变得显而易见。旨在将以下权利要求解释为包括所有这些变化和修改。
Claims (20)
1.一种数据处理系统,其包括:
存储器;和
耦合到所述存储器的处理器,其中所述处理器包括:
向量寄存器堆;
源操作数缓冲器;
向量算术逻辑单元VALU;和
用于存储由所述VALU执行的指令的结果的向量目标高速缓存;
其中所述处理器被配置为:
响应于确定所述VALU具有结果数据以写到所述向量目标高速缓存,以及所述向量目标高速缓存中不存在空的高速缓存线:
基于高速缓存替换策略选择所述向量目标高速缓存的第一高速缓存线;
从所述向量目标高速缓存逐出选择的所述第一高速缓存线;以及
响应于确定所述第一高速缓存线是干净的高速缓存线,以及所述第一高速缓存线包括由待决指令针对的一个或多个源操作数:
将所述第一高速缓存线写到所述源操作数缓冲器。
2.如权利要求1所述的系统,其中所述处理器还被配置为:
识别第一指令的一个或多个源操作数;
确定是否将所述一个或多个源操作数从所述向量寄存器堆、所述源操作数缓冲器和所述向量目标高速缓存中的一者转发到所述VALU;
等待直到所述VALU的最后一个流水线阶段直到在所述向量目标高速缓存中分配高速缓存线;以及
将所述第一指令的结果存储在所述向量目标高速缓存中分配的所述高速缓存线中。
3.如权利要求2所述的系统,其中所述处理器被配置为:
响应于确定所述一个或多个源操作数存储在所述源操作数缓冲器中,从所述源操作数缓冲器转发所述一个或多个源操作数;
响应于确定所述一个或多个源操作数存储在所述向量寄存器堆中,从所述向量寄存器堆中预取所述一个或多个源操作数并将所述一个或多个源操作数存储在所述源操作数缓冲器中;以及
响应于向所述VALU发出第一指令,将所述一个或多个源操作数从所述源操作数缓冲器传送到所述VALU。
4.如权利要求1所述的系统,其中所述处理器还包括在所述向量寄存器堆的输出上的多个触发器。
5.根据权利要求4所述的系统,其中所述向量寄存器堆包括多个内存库,并且其中所述处理器还被配置为:
判定第一操作数是否与所述向量寄存器堆的给定内存库上的先前结果相匹配;以及
响应于确定所述第一操作数与所述向量寄存器堆的所述给定内存库上的所述先前结果相匹配,绕过所述源操作数缓冲器来从所述给定内存库的输出上的所述触发器中检索所述第一操作数。
6.根据权利要求1所述的系统,其中所述处理器还被配置为:
在所述处理器不能在所述向量目标高速缓存中分配高速缓存线的情况下暂停所述VALU;以及
等待以在所述向量目标高速缓存中分配高速缓存线,直到由所述VALU生成结果。
7.如权利要求1所述的系统,其中,所述处理器被配置为响应于确定所述第一高速缓存线是脏的高速缓存线,将所述第一高速缓存线写到所述向量寄存器堆。
8.一种数据处理方法,包括:
响应于确定向量算术逻辑单元VALU具有结果数据以写到向量目标高速缓存,以及所述向量目标高速缓存中不存在空的高速缓存线:
基于高速缓存替换策略选择所述向量目标高速缓存的第一高速缓存线;
从所述向量目标高速缓存中逐出选择的所述第一高速缓存线;以及
响应于确定所述第一高速缓存线是干净的高速缓存线,以及所述第一高速缓存线包括由未决指令针对的一个或多个源操作数:
将所述第一高速缓存线写到源操作数缓冲器。
9.如权利要求8所述的方法,还包括:
识别第一指令的一个或多个源操作数;
根据一个或多个条件确定是否将所述一个或多个源操作数从向量寄存器堆、所述源操作数缓冲器和所述向量目标高速缓存中的一者转发到所述VALU;
等待直到所述VALU的最后一个流水线阶段直到在所述向量目标高速缓存中分配高速缓存线;以及
将所述第一指令的结果存储在所述向量目标高速缓存中分配的所述高速缓存线中。
10.如权利要求9所述的方法,其中:
响应于确定所述一个或多个源操作数存储在所述源操作数缓冲器中,从所述源操作数缓冲器转发所述一个或多个源操作数;
响应于确定所述一个或多个源操作数存储在所述向量寄存器堆中,从所述向量寄存器堆预取所述一个或多个源操作数并且将所述一个或多个源操作数存储在所述源操作数缓冲器中;以及
响应于向所述VALU发出所述第一指令,将所述一个或多个源操作数从所述源操作数缓冲器传送到所述VALU。
11.根据权利要求9所述的方法,其中多个触发器位于所述向量寄存器堆的输出上。
12.根据权利要求11所述的方法,还包括:
判定第一操作数是否与所述向量寄存器堆的给定内存库上的先前结果相匹配;以及
响应于确定所述第一操作数与所述向量寄存器堆的所述给定内存库上的所述先前结果相匹配,绕过所述源操作数缓冲器来从所述给定内存库的输出上的所述触发器中检索第一操作数。
13.根据权利要求8所述的方法,还包括:
响应于不能在所述向量目标高速缓存中分配高速缓存线来暂停所述VALU;以及
等待以在所述向量目标高速缓存中分配高速缓存线,直到由所述VALU生成结果。
14.根据权利要求8所述的方法,还包括响应于确定所述第一高速缓存线是脏的高速缓存线,将所述第一高速缓存线写到向量寄存器堆。
15.一种数据处理装置,包括:
向量寄存器堆;
源操作数缓冲器;
向量算术逻辑单元VALU;和
用于存储由所述VALU执行的指令的结果的向量目标高速缓存;
其中所述装置被配置为:
响应于确定所述VALU具有结果数据以写到所述向量目标高速缓存,以及所述向量目标高速缓存中不存在空的高速缓存线:
基于高速缓存替换策略选择所述向量目标高速缓存的第一高速缓存线;
从所述向量目标高速缓存中逐出选择的所述第一高速缓存线;以及
响应于确定所述第一高速缓存线是干净的高速缓存线,以及所述第一高速缓存线包括由待决指令针对的一个或多个源操作数:
将所述第一高速缓存线写到所述源操作数缓冲器。
16.根据权利要求15所述的装置,其中,所述装置还被配置为:
识别第一指令的一个或多个源操作数;
根据一个或多个条件判定是否将所述一个或多个源操作数从所述向量寄存器堆、所述源操作数缓冲器和所述向量目标高速缓存中的一者转发到所述VALU;
等待直到所述VALU的最后一个流水线阶段直到在所述向量目标高速缓存中分配高速缓存线;以及
将所述第一指令的结果存储在所述向量目标高速缓存中分配的所述高速缓存线中。
17.根据权利要求16所述的装置,其中,所述装置还被配置为:
响应于确定所述一个或多个源操作数存储在所述源操作数缓冲器中,从所述源操作数缓冲器转发所述一个或多个源操作数;
响应于确定所述一个或多个源操作数存储在所述向量寄存器堆中,从所述向量寄存器堆预取所述一个或多个源操作数并且将所述一个或多个源操作数存储在所述源操作数缓冲器中;以及
响应于向所述VALU发出所述第一指令,将所述一个或多个源操作数从所述源操作数缓冲器传送到所述VALU。
18.根据权利要求15所述的装置,其中,所述装置还包括在所述向量寄存器堆的输出上的多个触发器。
19.根据权利要求18所述的装置,其中所述向量寄存器堆包括多个内存库,并且其中所述装置还被配置为:
判定第一操作数是否与所述向量寄存器堆的给定内存库上的先前结果相匹配;以及
响应于确定所述第一操作数与所述向量寄存器堆的所述给定内存库上的所述先前结果相匹配,绕过所述源操作数缓冲器来从所述给定内存库的输出上的所述触发器中检索第一操作数。
20.根据权利要求15所述的装置,其中,所述装置还被配置为在所述装置不能在所述向量目标高速缓存中分配高速缓存线的情况下暂停所述VALU。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710434300.4A CN109032668B (zh) | 2017-06-09 | 2017-06-09 | 具有高带宽和低功率向量寄存器堆的流处理器 |
US15/644,045 US10817302B2 (en) | 2017-06-09 | 2017-07-07 | Processor support for bypassing vector source operands |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710434300.4A CN109032668B (zh) | 2017-06-09 | 2017-06-09 | 具有高带宽和低功率向量寄存器堆的流处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109032668A CN109032668A (zh) | 2018-12-18 |
CN109032668B true CN109032668B (zh) | 2023-09-19 |
Family
ID=64563526
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710434300.4A Active CN109032668B (zh) | 2017-06-09 | 2017-06-09 | 具有高带宽和低功率向量寄存器堆的流处理器 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10817302B2 (zh) |
CN (1) | CN109032668B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10346163B2 (en) | 2017-11-01 | 2019-07-09 | Apple Inc. | Matrix computation engine |
US10970078B2 (en) * | 2018-04-05 | 2021-04-06 | Apple Inc. | Computation engine with upsize/interleave and downsize/deinterleave options |
US10642620B2 (en) | 2018-04-05 | 2020-05-05 | Apple Inc. | Computation engine with strided dot product |
US10754649B2 (en) | 2018-07-24 | 2020-08-25 | Apple Inc. | Computation engine that operates in matrix and vector modes |
US10831488B1 (en) * | 2018-08-20 | 2020-11-10 | Apple Inc. | Computation engine with extract instructions to minimize memory access |
US11144367B2 (en) | 2019-02-08 | 2021-10-12 | International Business Machines Corporation | Write power optimization for hardware employing pipe-based duplicate register files |
US11094103B2 (en) * | 2019-03-26 | 2021-08-17 | Qualcomm Incorporated | General purpose register and wave slot allocation in graphics processing |
US11630667B2 (en) * | 2019-11-27 | 2023-04-18 | Advanced Micro Devices, Inc. | Dedicated vector sub-processor system |
KR20220139304A (ko) * | 2019-12-30 | 2022-10-14 | 스타 알리 인터내셔널 리미티드 | 구성 가능한 병렬 계산을 위한 프로세서 |
CN116348849A (zh) * | 2020-10-15 | 2023-06-27 | 加利福尼亚大学董事会 | 呼吸操作数窗口以利用图形处理单元中的旁路 |
CN117707625B (zh) * | 2024-02-05 | 2024-05-10 | 上海登临科技有限公司 | 支持指令多发的计算单元、方法及相应图形处理器 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6542986B1 (en) * | 1999-11-09 | 2003-04-01 | Advanced Micro Devices, Inc. | Resolving dependencies among concurrently dispatched instructions in a superscalar microprocessor |
CN101739235A (zh) * | 2008-11-26 | 2010-06-16 | 中国科学院微电子研究所 | 将32位dsp与通用risc cpu无缝混链的处理器装置 |
CN103197916A (zh) * | 2011-12-14 | 2013-07-10 | 辉达公司 | 用于源操作数收集器高速缓存的方法和装置 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7197625B1 (en) | 1997-10-09 | 2007-03-27 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
US6550059B1 (en) | 1999-10-04 | 2003-04-15 | Advanced Micro Devices, Inc. | Method for generating optimized vector instructions from high level programming languages |
US7159099B2 (en) | 2002-06-28 | 2007-01-02 | Motorola, Inc. | Streaming vector processor with reconfigurable interconnection switch |
US7610466B2 (en) | 2003-09-05 | 2009-10-27 | Freescale Semiconductor, Inc. | Data processing system using independent memory and register operand size specifiers and method thereof |
US7464255B1 (en) | 2005-07-28 | 2008-12-09 | Advanced Micro Devices, Inc. | Using a shuffle unit to implement shift operations in a processor |
KR100837400B1 (ko) * | 2006-07-20 | 2008-06-12 | 삼성전자주식회사 | 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치 |
US7634633B2 (en) | 2006-11-30 | 2009-12-15 | Motorola, Inc. | Method and apparatus for memory address generation using dynamic stream descriptors |
US8458439B2 (en) * | 2008-12-16 | 2013-06-04 | International Business Machines Corporation | Block driven computation using a caching policy specified in an operand data structure |
US8635431B2 (en) | 2010-12-08 | 2014-01-21 | International Business Machines Corporation | Vector gather buffer for multiple address vector loads |
US9600288B1 (en) * | 2011-07-18 | 2017-03-21 | Apple Inc. | Result bypass cache |
US8966461B2 (en) | 2011-09-29 | 2015-02-24 | Advanced Micro Devices, Inc. | Vector width-aware synchronization-elision for vector processors |
US9342334B2 (en) | 2012-06-22 | 2016-05-17 | Advanced Micro Devices, Inc. | Simulating vector execution |
US9594395B2 (en) * | 2014-01-21 | 2017-03-14 | Apple Inc. | Clock routing techniques |
US10353708B2 (en) | 2016-09-23 | 2019-07-16 | Advanced Micro Devices, Inc. | Strided loading of non-sequential memory locations by skipping memory locations between consecutive loads |
US10613987B2 (en) * | 2016-09-23 | 2020-04-07 | Apple Inc. | Operand cache coherence for SIMD processor supporting predication |
CN108009976A (zh) * | 2016-10-27 | 2018-05-08 | 超威半导体公司 | 用于图形处理单元(gpu)计算的超级单指令多数据(超级simd) |
-
2017
- 2017-06-09 CN CN201710434300.4A patent/CN109032668B/zh active Active
- 2017-07-07 US US15/644,045 patent/US10817302B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6542986B1 (en) * | 1999-11-09 | 2003-04-01 | Advanced Micro Devices, Inc. | Resolving dependencies among concurrently dispatched instructions in a superscalar microprocessor |
CN101739235A (zh) * | 2008-11-26 | 2010-06-16 | 中国科学院微电子研究所 | 将32位dsp与通用risc cpu无缝混链的处理器装置 |
CN103197916A (zh) * | 2011-12-14 | 2013-07-10 | 辉达公司 | 用于源操作数收集器高速缓存的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
US10817302B2 (en) | 2020-10-27 |
US20180357064A1 (en) | 2018-12-13 |
CN109032668A (zh) | 2018-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109032668B (zh) | 具有高带宽和低功率向量寄存器堆的流处理器 | |
CN108027804B (zh) | 片上原子事务引擎 | |
US8639882B2 (en) | Methods and apparatus for source operand collector caching | |
US8732711B2 (en) | Two-level scheduler for multi-threaded processing | |
US8180981B2 (en) | Cache coherent support for flash in a memory hierarchy | |
US20170371654A1 (en) | System and method for using virtual vector register files | |
US8266337B2 (en) | Dynamic logical data channel assignment using channel bitmap | |
Elteir et al. | StreamMR: an optimized MapReduce framework for AMD GPUs | |
US20180349280A1 (en) | Snoop filtering for multi-processor-core systems | |
US20080141268A1 (en) | Utility function execution using scout threads | |
US9069609B2 (en) | Scheduling and execution of compute tasks | |
US9547593B2 (en) | Systems and methods for reconfiguring cache memory | |
KR102524565B1 (ko) | 로드 스토어 유닛들을 바이패싱하여 스토어 및 로드 추적 | |
Mathew et al. | Design of a parallel vector access unit for SDRAM memory systems | |
US11537397B2 (en) | Compiler-assisted inter-SIMD-group register sharing | |
US20140025891A1 (en) | Relaxed coherency between different caches | |
US20130166877A1 (en) | Shaped register file reads | |
US20190004807A1 (en) | Stream processor with overlapping execution | |
US9715413B2 (en) | Execution state analysis for assigning tasks to streaming multiprocessors | |
US9442759B2 (en) | Concurrent execution of independent streams in multi-channel time slice groups | |
US11726918B2 (en) | Dynamically coalescing atomic memory operations for memory-local computing | |
CN109564510B (zh) | 用于在地址生成时间分配加载和存储队列的系统和方法 | |
US10853070B1 (en) | Processor suspension buffer and instruction queue | |
JP5541491B2 (ja) | マルチプロセッサ、これを用いたコンピュータシステム、およびマルチプロセッサの処理方法 | |
WO2009156920A1 (en) | Method, register file system, and processing unit device enabling substantially direct cache memory access |
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 |