CN109215728B - 用于分布式存储器危险检测和错误恢复的存储器电路和方法 - Google Patents
用于分布式存储器危险检测和错误恢复的存储器电路和方法 Download PDFInfo
- Publication number
- CN109215728B CN109215728B CN201810671312.3A CN201810671312A CN109215728B CN 109215728 B CN109215728 B CN 109215728B CN 201810671312 A CN201810671312 A CN 201810671312A CN 109215728 B CN109215728 B CN 109215728B
- Authority
- CN
- China
- Prior art keywords
- memory
- data
- speculative
- store
- hazard detection
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 965
- 238000001514 detection method Methods 0.000 title claims abstract description 151
- 238000000034 method Methods 0.000 title claims abstract description 112
- 238000011084 recovery Methods 0.000 title abstract description 13
- 238000012545 processing Methods 0.000 claims abstract description 346
- 238000003860 storage Methods 0.000 claims description 57
- 230000004044 response Effects 0.000 claims description 29
- 239000000872 buffer Substances 0.000 description 116
- 239000013598 vector Substances 0.000 description 106
- 238000010586 diagram Methods 0.000 description 79
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 76
- 230000006854 communication Effects 0.000 description 74
- 238000004891 communication Methods 0.000 description 74
- 238000000605 extraction Methods 0.000 description 64
- 238000007667 floating Methods 0.000 description 51
- 239000004744 fabric Substances 0.000 description 49
- 230000006870 function Effects 0.000 description 47
- 238000006073 displacement reaction Methods 0.000 description 41
- 230000001133 acceleration Effects 0.000 description 39
- 230000008901 benefit Effects 0.000 description 32
- 101710130024 1-aminocyclopropane-1-carboxylate oxidase Proteins 0.000 description 31
- 101710098417 1-aminocyclopropane-1-carboxylate oxidase 1 Proteins 0.000 description 31
- 101710098416 1-aminocyclopropane-1-carboxylate oxidase 2 Proteins 0.000 description 31
- 101710098415 1-aminocyclopropane-1-carboxylate oxidase 3 Proteins 0.000 description 31
- 101710098411 1-aminocyclopropane-1-carboxylate oxidase 4 Proteins 0.000 description 31
- 101710163931 2-oxoglutarate-dependent ethylene/succinate-forming enzyme Proteins 0.000 description 31
- 230000007246 mechanism Effects 0.000 description 25
- 230000001419 dependent effect Effects 0.000 description 21
- 238000006243 chemical reaction Methods 0.000 description 17
- 238000003491 array Methods 0.000 description 16
- 102100021809 Chorionic somatomammotropin hormone 1 Human genes 0.000 description 15
- 230000008569 process Effects 0.000 description 15
- 230000003068 static effect Effects 0.000 description 14
- 230000000694 effects Effects 0.000 description 13
- 238000011143 downstream manufacturing Methods 0.000 description 12
- 238000011068 loading method Methods 0.000 description 12
- 239000003795 chemical substances by application Substances 0.000 description 10
- 230000002829 reductive effect Effects 0.000 description 10
- 238000011144 upstream manufacturing Methods 0.000 description 10
- 230000002159 abnormal effect Effects 0.000 description 9
- 230000009471 action Effects 0.000 description 9
- 238000007792 addition Methods 0.000 description 9
- 230000006399 behavior Effects 0.000 description 9
- 230000003139 buffering effect Effects 0.000 description 9
- 238000004422 calculation algorithm Methods 0.000 description 8
- 238000013461 design Methods 0.000 description 8
- 238000004519 manufacturing process Methods 0.000 description 8
- 238000013507 mapping Methods 0.000 description 8
- 102100025093 Zinc fingers and homeoboxes protein 2 Human genes 0.000 description 7
- 230000008859 change Effects 0.000 description 7
- 230000008878 coupling Effects 0.000 description 7
- 238000010168 coupling process Methods 0.000 description 7
- 238000005859 coupling reaction Methods 0.000 description 7
- 238000013501 data transformation Methods 0.000 description 7
- 230000006872 improvement Effects 0.000 description 7
- 238000012546 transfer Methods 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 230000003416 augmentation Effects 0.000 description 6
- 238000013500 data storage Methods 0.000 description 6
- 238000005457 optimization Methods 0.000 description 6
- 230000011664 signaling Effects 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 230000006835 compression Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 238000013075 data extraction Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000014509 gene expression Effects 0.000 description 5
- 239000010410 layer Substances 0.000 description 5
- 239000000203 mixture Substances 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000009467 reduction Effects 0.000 description 5
- 230000008093 supporting effect Effects 0.000 description 5
- 238000013519 translation Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 230000000977 initiatory effect Effects 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 230000000873 masking effect Effects 0.000 description 4
- 238000002156 mixing Methods 0.000 description 4
- 238000010276 construction Methods 0.000 description 3
- 238000007689 inspection Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000005055 memory storage Effects 0.000 description 3
- 230000010076 replication Effects 0.000 description 3
- 230000008672 reprogramming Effects 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 229920002153 Hydroxypropyl cellulose Polymers 0.000 description 2
- 241001272996 Polyphylla fullo Species 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000007175 bidirectional communication Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 239000000470 constituent Substances 0.000 description 2
- 230000001066 destructive effect Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000005265 energy consumption Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 235000003642 hunger Nutrition 0.000 description 2
- 235000010977 hydroxypropyl cellulose Nutrition 0.000 description 2
- 230000001976 improved effect Effects 0.000 description 2
- 239000011229 interlayer Substances 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 230000003446 memory effect Effects 0.000 description 2
- 239000002184 metal Substances 0.000 description 2
- 229910052751 metal Inorganic materials 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000036961 partial effect Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000000246 remedial effect Effects 0.000 description 2
- 229920006395 saturated elastomer Polymers 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 230000037351 starvation Effects 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 244000061520 Angelica archangelica Species 0.000 description 1
- 241000589562 Brucella Species 0.000 description 1
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 235000001287 Guettarda speciosa Nutrition 0.000 description 1
- 101000640056 Homo sapiens Protein strawberry notch homolog 2 Proteins 0.000 description 1
- 101000823782 Homo sapiens Y-box-binding protein 3 Proteins 0.000 description 1
- 235000008694 Humulus lupulus Nutrition 0.000 description 1
- 101100283966 Pectobacterium carotovorum subsp. carotovorum outN gene Proteins 0.000 description 1
- 102100033980 Protein strawberry notch homolog 2 Human genes 0.000 description 1
- 102100022221 Y-box-binding protein 3 Human genes 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000011049 filling Methods 0.000 description 1
- 230000008014 freezing Effects 0.000 description 1
- 238000007710 freezing Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000003116 impacting effect Effects 0.000 description 1
- 238000010348 incorporation Methods 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 230000001404 mediated effect Effects 0.000 description 1
- 150000002739 metals Chemical class 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 238000011017 operating method Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000011045 prefiltration Methods 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000010926 purge Methods 0.000 description 1
- 238000013442 quality metrics Methods 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000006886 spatial memory Effects 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000037303 wrinkles Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/56—External testing equipment for static stores, e.g. automatic test equipment [ATE]; Interfaces therefor
-
- 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/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
- G06F15/7885—Runtime interface, e.g. data exchange, runtime control
- G06F15/7892—Reconfigurable logic embedded in CPU, e.g. reconfigurable unit
-
- 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/0846—Cache with multiple tag or data arrays being simultaneously accessible
-
- 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
- G06F12/0857—Overlapped cache accessing, e.g. pipeline by multiple requestors
-
- 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/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
-
- 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/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- 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
-
- 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/3834—Maintaining memory consistency
-
- 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/34—Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
- G11C16/3404—Convergence or correction of memory cell threshold voltages; Repair or recovery of overerased or overprogrammed cells
-
- 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/50—Control mechanisms for virtual memory, cache or TLB
- G06F2212/507—Control mechanisms for virtual memory, cache or TLB using speculative control
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Physics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请公开了用于分布式存储器危险检测和错误恢复的存储器电路和方法描述了关于分布式存储器危险检测和错误恢复的方法和装置。在一个实施例中,存储器电路包括:存储器接口电路,用于服务来自处理元件的空间阵列的对存储在多个高速缓存区块中的数据的存储器请求;以及在所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路,其中,对于来自所述存储器接口电路的、被标记有潜在的动态数据依赖性的、对第一危险检测电路的第一高速缓存区块内的地址的推测性存储器加载请求,所述第一危险检测电路用于:标记所述地址以跟踪对所述地址的其他存储器请求;将来自所述地址的数据存储在推测性完成存储中;以及当对于所述推测性存储器加载请求接收到存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。
Description
关于联邦资助的研发的声明
本发明是在由国防部授予的合同号H98230-13-D-0124的政府支持下进行的。政府具有本发明的某些权利。
技术领域
本公开总体上关于电子学,更具体地,本公开的实施例关于危险检测电路。
背景技术
处理器或处理器集合执行来自指令集(例如,指令集架构(ISA))的指令。指令集是涉及编程的计算机架构的一部分,并且一般包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(I/O)。应当注意,术语“指令”在本文中一般是指宏指令(例如,提供给处理器供执行的指令),或者指微指令(例如,由处理器的解码器解码宏指令所产生的指令)。
附图说明
在所附附图中以示例方式而非限制方式图示本公开,在附图中,类似的附图标记指示类似的要素,其中:
图1图示根据本公开的实施例的加速器片。
图2图示根据本公开的实施例的耦合至存储器的硬件处理器。
图3A图示根据本公开的实施例的具有潜在的动态数据依赖性的循环。
图3B图示根据本公开的实施例的图3A中的循环的数据流图表示。
图4图示根据本公开的实施例的通过存储器接口电路耦合至存储器的空间阵列。
图5图示根据本公开的实施例的通过存储器接口电路耦合至存储器的空间阵列。
图6图示根据本公开的实施例的危险检测电路。
图7图示根据本公开的实施例的耦合在多个加速器片与多个高速缓存区块之间的多个存储器接口电路(例如,请求地址文件(RAF)电路)。
图8图示根据本公开的实施例的耦合至多个高速缓存区块的多个存储器接口电路(例如,请求地址文件(RAF)电路)中的获益推测。
图9图示根据本公开的实施例的耦合至多个高速缓存区块的多个存储器接口电路(例如,请求地址文件(RAF)电路)中的不获益推测(误推测)。
图10图示根据本公开的实施例的至多个高速缓存区块的多个存储器接口电路(例如,请求地址文件(RAF)电路)中的不获益推测(误推测)。
图11图示根据本公开的实施例的用于推测性完成存储的微架构扩展。
图12图示根据本公开的实施例的危险跟踪***。
图13图示根据本公开的实施例的流程图。
图14A图示根据本公开的实施例的程序源。
图14B图示根据本公开的实施例的针对图14A的程序源的数据流图。
图14C图示根据本公开的实施例的加速器,该加速器具有配置成用于执行图14B的数据流图的多个处理元件。
图15图示根据本公开的实施例的数据流图的示例执行。
图16图示根据本公开的实施例的程序源。
图17图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列。
图18A图示根据本公开的实施例的可配置数据路径网络。
图18B图示根据本公开的实施例的可配置流控制路径网络。
图19图示根据本公开的实施例的包括加速器的硬件处理器片。
图20图示根据本公开的实施例的处理元件。
图21图示根据本公开的实施例的请求地址文件(RAF)电路。
图22图示根据本公开的实施例的耦合在多个加速器片与多个高速缓存区块之间的多个请求地址文件(RAF)电路。
图23图示根据本公开的实施例的分区为三个区域(结果区域、三个潜在的进位区域和门控区域)的浮点乘法器。
图24图示根据本公开的实施例的具有多个处理元件的加速器的飞行中(in-flight)配置。
图25图示根据本公开的实施例的飞行中流水线式提取的快照。
图26图示根据本公开的实施例的用于加速器的编译工具链。
图27图示根据本公开的实施例的用于加速器的编译器。
图28A图示根据本公开的实施例的序列化汇编代码。
图28B图示根据本公开的实施例的针对图28A的序列化汇编代码的数据流汇编代码。
图28C图示根据本公开的实施例的针对加速器的图28B的数据流汇编代码的数据流图。
图29A图示根据本公开的实施例的C源代码。
图29B图示根据本公开的实施例的针对图29A的C源代码的数据流汇编代码。
图29C图示根据本公开的实施例的针对加速器的图29B的数据流汇编代码的数据流图。
图30A图示根据本公开的实施例的C源代码。
图30B图示根据本公开的实施例的针对图30A的C源代码的数据流汇编代码。
图30C图示根据本公开的实施例的针对加速器的图30B的数据流汇编代码的数据流图。
图31A图示根据本公开的实施例的流程图。
图31B图示根据本公开的实施例的流程图。
图32图示根据本公开的实施例的吞吐量相对于每个操作的能量的图表。
图33图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列和本地配置控制器。
图34A-图34C图示根据本公开的实施例的配置数据路径网络的本地配置控制器。
图35图示根据本公开的实施例的配置控制器。
图36图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列、配置高速缓存和本地配置控制器。
图37图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列以及具有重配置电路的配置和异常处置控制器。
图38图示根据本公开的实施例的重配置电路。
图39图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列以及具有重配置电路的配置和异常处置控制器。
图40图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列以及耦合至片级异常聚合器的夹层异常聚合器。
图41图示根据本公开的实施例的具有异常生成器的处理元件。
图42图示根据本公开的实施例的加速器片,该加速器片包括处理元件的阵列和本地提取控制器。
图43A-图43C图示根据本公开的实施例的配置数据路径网络的本地提取控制器。
图44示出根据本公开的实施例的提取控制器。
图45示出根据本公开的实施例的流程图。
图46示出根据本公开的实施例的流程图。
图47A是根据本公开的实施例的***的框图,该***采用***在存储器子***与加速硬件之间的存储器排序电路。
图47B是根据本公开的实施例的图47A中的***的框图,但是该***采用多个存储器排序电路。
图48是图示根据本公开的实施例的进入加速硬件以及离开加速硬件的存储器操作的一般运行的框图。
图49是图示根据本公开的实施例的存储操作的空间依赖性流的框图。
图50是根据本公开的实施例的图47A中的存储器排序电路的详细框图。
图51是根据本公开的实施例的图47A中的存储器排序电路的微架构的流程图。
图52是根据本公开的实施例的可执行确定器电路的框图。
图53是根据本公开的实施例的优先级编码器的框图。
图54是根据本公开的实施例的逻辑和二进制两种形式的示例性加载操作的框图。
图55A是图示根据本公开的实施例的示例代码的逻辑执行的流程图。
图55B是图示根据本公开的实施例的示例代码的展开版本中的存储器级并行性的图55A的流程图。
图56A是根据本公开的实施例的用于加载操作和存储操作的示例性存储器变元(argument)的框图。
图56B是图示根据本公开的实施例的、通过图51中的存储器排序电路的微架构进行加载操作和存储操作(诸如,图56A中的那些操作)的流的框图。
图57A、57B、57C、57D、57E、57F、57G和57H是图示根据本公开的实施例的通过图57B中的微架构的队列对示例性程序进行的加载操作和存储操作的功能性流的框图。
图58是根据本公开的实施例的用于对加速硬件与乱序存储器子***之间的存储器操作进行排序的方法的流程图。
图59A是图示根据本公开的实施例的通用向量友好指令格式及其A类指令模板的框图。
图59B是图示根据本公开的实施例的通用向量友好指令格式及其B类指令模板的框图。
图60A是图示根据本公开的实施例的用于图59A和图59B中的通用向量友好指令格式的字段的框图。
图60B是图示根据本公开的一个实施例的构成完整操作码字段的图60A中的专用向量友好指令格式的字段的框图。
图60C是图示根据本公开的一个实施例的构成寄存器索引字段的图60A中的专用向量友好指令格式的字段的框图。
图60D是图示根据本公开的一个实施例的构成扩充操作字段5950的图60A中的专用向量友好指令格式的字段的框图。
图61是根据本公开的一个实施例的寄存器架构的框图。
图62A是图示根据本公开的实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线两者的框图。
图62B是图示根据本公开的实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核两者的框图。
图63A是根据本公开的实施例的单个处理器核以及其到管芯上互连网络的连接以及它的第2级(L2)高速缓存的本地子集的框图。
图63B是根据本公开的实施例的图63A中的处理器核的一部分的展开图。
图64是根据本公开的实施例的可具有多于一个的核、可具有集成存储器控制器、并且可具有集成图形器件的处理器的框图。
图65是根据本公开的一个实施例的***的框图。
图66是根据本公开的实施例的更具体的示例性***的框图。
图67所示的是根据本公开的实施例的第二更具体的示例性***的框图。
图68示出的是根据本公开的实施例的芯片上***(SoC)的框图。
图69是根据本公开的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在以下描述中,陈述了多个具体细节。然而,应当理解,可不通过这些具体细节来实施本公开的实施例。在其他实例中,未详细示出公知的电路、结构以及技术,以免模糊对本描述的理解。
说明书中对“一个实施例”、“实施例”、“示例实施例”等等的引用表明所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例不一定都包括该特定的特征、结构或特性。此外,此类短语不一定是指同一个实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。
(例如,具有一个或多个核的)处理器可执行指令(例如,指令线程)以对数据操作,从而例如执行算术、逻辑或其他功能。例如,软件可请求操作,并且硬件处理器(例如,该硬件处理器的一个或多个核)可响应于该请求而执行该操作。操作的一个非限制性示例是输入多个向量元素并输出具有经混合的多个元素的向量的混合操作。在某些实施例中,多个操作利用对单条指令的执行来完成。
例如由美国能源部定义的百亿亿次级性能可要求***级浮点性能在给定的(例如,20MW)功率预算内超过每秒1018次浮点操作(exaFLOP)或更多。本文中的某些实施例涉及针对例如处理器的高性能计算(HPC)的处理元件的空间阵列(例如,可配置空间加速器(CSA))。处理元件的空间阵列(例如,CSA)的本文中的某些实施例针对数据流图(或多个数据流图)的直接执行以实现远超常规路线图架构的计算密集但高能效的空间微架构。
空间架构的某些实施例(例如,本文中公开的空间阵列)是用于加速用户应用的高能效且高性能的方法。在某些实施例中,空间阵列(例如,通过(例如,电路交换型)(例如,互连)网络耦合在一起的多个处理元件)用于加速应用,以便例如(例如,比处理器的核更快地)执行单个流程序的某个区域。本文中的空间架构的某些实施例促进序列化程序向空间阵列的映射。本文中的某些实施例提供改进的空间存储器微架构,该改进的空间存储器微架构利用存储器依赖性自动地提取程序的上下文中的并行性。本文中的某些实施例包括检测(例如,检查)高速缓存区块处的危险,这例如与典型的存储器消歧(disambiguation)方案不同。本文中的某些实施例允许将传统序列化代码编译为并行架构。存储器微架构的本文中的某些实施例使经编译的代码能够例如甚至在无法静态地解决的存储器冲突的情况下获得显著的存储器级并行性。
空间架构的某些实施例(例如,本文中公开的空间阵列)用于访问例如与空间阵列中的任何存储器分开的存储器位置。空间架构的某些实施例(例如,本文中公开的空间阵列)包括数据流图的存储器访问(例如,加载或存储)数据流操作器。例如,可通过处理元件的空间阵列(的例如结构区域)使数据从存储器流入和/或从存储器随机地访问数据,随后使数据向外返回至存储器。
空间架构的某些实施例(例如,本文中公开的空间阵列)相对于传统的多核处理器实现卓越的性能效率:与存储器***的扩展形成对照,以PE形式计算可以比(例如,大的)核更简单且更多,并且通信可以是直接的。
然而,在某些实施例中,存储器***并行性在支持并行处理元件(PE)计算方面可能是必要的。如果存储器访问是串行化的(例如,以串行的程序顺序执行),则高并行性可能是无法实现的。为了缓解这一问题或这些问题,本文中的某些实施例例如甚至在存在冲突的访问(例如,明显的静态冲突的访问或实际的动态冲突的访问)的情况下也促进在空间程序中发现存储器级并行性。
例如,可乱序地执行存储器访问(例如,加载(读取)和存储(写入)),并且由于该乱序执行性能,数据危险可能存在。数据危险一般是指(例如,(不按例如,逻辑(程序)顺序)执行的)两个操作(例如,按时间)被执行使得不正确的数据被读取或写入的危险或风险。数据危险的一些示例为写入后读取(RAW)危险、读取后写入(WAR)危险和写入后写入(WAW)危险。使一般程序以空间架构为目标的障碍可能是分布式存储器语义,例如,对于编译器而言,要静态地证明一组存储器访问无别名可能是困难的。
本文中的某些实施例在(例如,未预料到的)存储器地址冲突的情况下提供用于动态检测和恢复的硬件机制。本文中的某些实施例提供空间调整的存储器接口架构。本文中的某些实施例可以或可以不将多个独立的通道提供给存储器。本文中的某些实施例可以或可以不实施这些通道之间的排序,并且例如通道内的访问可被排序。本文中的某些实施例提供硬件,使得排序不(例如,仅)以软件解决。本文中的某些实施例提供不使用(例如,消耗)现场可编程门(FPGA)中的门或空间阵列或粗粒度可配置阵列(CGRA)中的处理元件(PE)的危险检测电路,并且例如不引入面积、吞吐量、等待时间和能量方面的显著开销。本文中的某些实施例直接以硬件(例如,以晶体管)实现。本文中的某些实施例使用存储器请求器处的分布式(例如,非集中式)技术(例如,很好地缩放至大型分布式空间阵列的技术)以获得动态存储器级并行性。本文中的某些实施例使用存储器请求器处的分布式(例如,非集中式)危险检测(例如,很好地缩放至大型分布式空间阵列的技术)以获得动态存储器级并行性。本文中的实施例可与现场可编程门(FPGA)、处理元件的空间阵列或粗粒度可配置阵列(CGRA)一起使用。
某些实施例提供用于空间架构的存储器微架构,该存储器微架构改善具有潜在的动态数据依赖性(例如,无法静态解决的依赖性的存储器访问)的算法的性能。该架构的某些实施例利用置于高速缓存区块处(例如,置于高速缓存区块中)的跟踪硬件(例如,危险检测电路)来跟踪潜在依赖性的访问。存储器操作(例如,尤其是加载)可能不按程序顺序地发生。例如,本文中的某些实施例可将存储器操作置入高速缓存跟踪结构中,但是这些存储器操作的数据被返回,在一个实施例中,如果没有(例如,实际的)冲突发生,则(例如,一旦在获取程序顺序之前获取或释放了程序顺序令牌)该数据可被释放到结构中。在一个实施例中,在获取程序顺序前释放可能意味着整个结构将被摧毁(例如,删除)和/或回滚到检查点。下文中讨论的软件处置程序可将并行性减小到程序顺序推测起作用的程度。通过允许加载请求比程序顺序原本将允许的时间更早地继续进行,本文中的某些实施例可极大地消除虽然在编译时具有潜在的动态数据依赖性但在执行时为非依赖性请求的请求的等待时间。在发现(例如,动态)冲突的情况下,在某些实施例中,高速缓存区块保持足够的数据(例如,元数据)以将经更新的值转发至(多个)请求器,由此例如也减少请求等待时间。本文中的某些实施例提供支持存储器(例如,访问)冲突检测和/或恢复的硬件特征。本文中的某些实施例利用关于读取或写入的源(例如,相对于将访问数据的空间阵列)的信息来标记该数据(例如,高速缓存行或少于高速缓存行的全部的子集)。在某些实施例中,当检测到数据危险(例如,读取接触到由不同的存储器接口写入的行)时,可调用处置程序以例如通过向软件危险处置程序寄存器1216写入来(例如,向软件)通知该问题。本文中的某些实施例也定义提交机制,例如,该提交机制允许空间程序定义当知晓无危险存在时的时刻。
下文也包括对处理元件的空间阵列(例如CSA)及其某些特征的实施例的架构理念的描述。如同任何革命性架构那样,可编程性可能是风险。为了缓解该问题,已利用编译工具链(其也在下文中讨论)对CSA架构的实施例进行共同设计。
引论
百亿亿次级计算目标可要求在急剧的功率预算(例如,20MW)内的巨量***级浮点性能(例如,1个ExaFLOP)。然而,利用经典的冯·诺依曼(von Neumann)架构来同时改善程序执行的性能和能效已变得困难:乱序调度、同时多线程操作、复杂寄存器堆和其他结构提供性能,但是以高能量成本来提供。本文中的某些实施例同时实现性能和能量要求。百亿亿次级计算功率-性能目标可针对每次操作既要求高吞吐量又要求低能耗。本文中的某些实施例通过提供大量低复杂度、高能效的处理(例如,计算)元件来提供此,这些低复杂度、高能效的处理元件极大地消除了先前处理器设计的控制开销。受此观察结果引导,本文中的某些实施例包括处理元件的空间阵列,例如,可配置空间加速器(CSA),该CSA例如包括由轻量型回压式(例如,通信)网络连接的处理元件(PE)的阵列。CSA片的一个示例在图1中描绘。处理(例如,计算)元件的某些实施例是数据流操作器,例如,当既满足(i)输入数据已到达数据流操作器,又满足(ii)具有可用于存储输出数据的空间(例如,否则没有处理正在发生)时仅处理输入数据的多重数据流操作器。(例如,加速器或CSA的)某些实施例不利用被触发的指令。
诸如图1中示出的可配置空间加速器(CAS)的实施例的粗粒度的空间架构是由互连网络连接的轻量型处理元件(PE)的组成物。例如被视为控制流图的程序可通过配置PE和网络而被映射到架构上。一般而言,PE可被配置为数据流操作器,例如,一旦所有的输入操作数到达PE,某个操作就发生,并且以流水线方式将结果向下游转发(到例如(多个)目的地PE)。数据流操作器(例如,底层操作)可以是加载或存储,例如,如下文中参照图21中的请求地址文件(RAF)电路所图示的。数据流操作器可选择逐操作器地消耗传入数据。
本文中的某些实施例扩展空间阵列(例如,CSA)的能力,以例如经由例如存储器子***中的(多个)危险检测电路来执行对存储器的并行访问。
图1图示根据本公开的实施例的处理元件的空间阵列的加速器片100实施例。加速器片100可以是较大的片的部分。加速器片100执行一个或多个数据流图。数据流图一般可以指在对序列化代码的编译时出现的显式并行的程序描述。本文中的某些实施例(例如,CSA)允许数据流图被直接配置到CSA阵列上,例如,不是被变换为序列化的指令流。本文中的某些实施例允许由空间阵列的一个或多个处理元件(PE)执行(例如,多种类型的)存储器访问数据流操作。
数据流图距序列化的编译流的偏离允许CSA的实施例支持熟悉的编程模型并(例如,不使用工作表)直接执行现有的高性能计算(HPC)代码。CSA处理元件(PE)可以是高能效的。在图1中,存储器接口102可耦合至存储器(例如,图2中的存储器202)以允许加速器片100向(例如,管芯或***外)存储器访问(例如,加载和/或存储)数据。所描绘的加速器片100是由经由互连网络105耦合在一起的若干种类的PE组成的异构阵列。加速器片100可将以下一者或多者例如包括为处理元件101的空间阵列的部分:整数算术PE、浮点算术PE、通信电路(例如,网络数据流端点电路)和结构中存储。数据流图(例如,经编译的数据流图)可覆盖在加速器片100上供执行。在一个实施例中,对于特定的数据流图,每一个PE仅处置图中的一个或两个(例如,数据流)操作。PE阵列可以是异构的,例如使得没有PE支持完整的CSA数据流架构和/或一个或多个PE被编程(例如,定制)以执行仅一些但高度高效的操作。本文中的某些实施例因此实现具有相比路线图架构为计算密集型的处理元件的阵列的处理器或加速器,并相对于现有的HPC供应在能效和性能方面实现大约数量级增益。
本文中的某些实施例提供从在处理元件的(例如,密集的)空间阵列(例如,CSA)内的并行执行的性能提升,在该处理元件的(例如,密集的)空间阵列(例如,CSA)中,例如,如果输入数据是可用的,则所利用的每个PE可同时执行其操作。效率提升可源于每一个PE的效率,例如,其中每一个PE的操作(例如,行为)对于每一个配置(例如,映射)步骤被固定一次,并且执行在本地数据到达PE时发生(例如,不考虑其他结构活动)。在某些实施例中,PE是数据流操作器(例如,每一个PE是单个数据流操作器),例如,当既满足(i)输入数据已到达数据流操作器,又满足(ii)具有可用于存储输出数据的空间(例如,否则没有处理正在发生)时仅对输入数据进行操作的数据流操作器。
本文中的某些实施例包括处理元件的空间阵列作为加速用户应用的高能效且高性能的方法。在一个实施例中,(多个)空间阵列经由串行过程来配置,在该串行过程中,配置的等待时间经由全局重置被完全暴露。这其中的一些可源于阵列(例如,现场可编程门阵列(FPGA))的寄存器传送级(RTL)语义。用于在阵列(例如,FPGA)上执行的程序可假定根本性的重置概念,根据该根本性的重置概念,期望设计的每个部分是出自配置重置而操作的。本文中的某些实施例提供数据流式阵列,在该数据流式阵列中,PE(例如,全部PE)符合流控制器微协议。该微协议可产生分布式初始化的效果。该微协议可例如利用区域性(例如,非整个整列)编排而允许流水线式配置和提取机制。本文中的某些实施例提供数据流架构中的危险检测和/或错误恢复(例如,处置)。
本文中的某些实施例跨广泛类别的现有单流和并行程序(例如,所有程序)提供性能的范式转移(paradigm-shifting)等级和极大的能效改善,同时保持熟悉的HPC编程模型。本文中的的某些实施例可针对HPC,使得浮点能效是极其重要的。本文中的某些实施例不但获得令人瞩目的性能改善和能量减少,还将这些增益传递至以主流HPC语言编写的且用于主流HPC框架的现有HPC程序。本文中的架构的某些实施例(例如,具有想到的编译)在对由现代编译器生成的控制数据流内部表示的直接支持中提供若干扩展。本文中的某些实施例涉及CSA数据流编译器(例如,其可接受C、C++和Fortran编程语言)以针对CSA架构。
图2图示根据本公开的实施例的耦合至(例如,连接至)存储器202的硬件处理器200。在一个实施例中,硬件处理器200和存储器202是计算***201。在某些实施例中,加速器中的一个或多个是根据本公开的CSA。在某些实施例中,处理器中的核中的一个或多个核是本文中公开的那些核。硬件处理器200(例如,其每一个核)可包括硬件解码器(例如,解码单元)和硬件执行单元。硬件处理器200可包括寄存器。注意,本文中的附图可能没有描绘所有的数据通信耦合(例如,连接)。本领域技术人员将认识到,这样做是为了不使附图中的某些细节模糊。注意,附图中的单向箭头可以不要求单向通信,例如,它可以指示双向通信(例如,去往或来自那个组件或设备)。注意,附图中的双向箭头可以不要求双向通信,例如,它可以指示单向通信(例如,去往或来自那个组件或设备)。通信路径中的任一路径或所有组合可用于本文中的某些实施例。所描绘的硬件处理器200包括根据本公开的多个核(0至N,其中,N可以是1或更大)和硬件加速器(0至M,其中,M可以是1或更大)。硬件处理器200(例如,其(多个)加速器和/或(多个)核)可例如经由(例如,相应的)存储器接口电路(0至M,其中M可以是1或更大)而耦合至存储器202(例如,数据存储设备)。存储器接口电路可以是例如如下文中所讨论的请求地址文件(RAF)电路。(例如,经由RAF的)本文中的存储器架构可例如经由依赖性令牌来处置存储器依赖性。在存储器架构的某些实施例中,编译器发出经配置的存储器操作,该经配置的存储器操作被配置到存储器接口电路(例如,RAF)上。至RAF的空间阵列(例如,结构)接口可以是基于通道的。本文中的某些实施例扩展存储器操作的定义和RAF的实现以支持程序顺序描述。加载操作可针对来自空间阵列(例如,结构)的存储器请求而接受地址流,并且当请求被满足时,返回数据流。存储操作可接受两个流,例如,一个用于数据,并且一个用于(例如,目的地)地址。在一个实施例中,这些操作中的每个操作对应于源程序中的确切的一个存储器操作。在一个实施例中,多个单独的操作通道被强排序,但是在这些通道之间没有按时顺序。
(例如,核的)硬件解码器可接收(例如,单条)指令(例如,宏指令),并将该指令解码为例如微指令和/或微操作。(例如,核的)硬件执行单元可执行经解码的指令(例如,宏指令)以执行一个或多个操作。存储器202和/或处理器可包括例如危险检测电路204,以检测来自存储器访问(例如,来自(多个)存储器接口电路)的数据危险。
以下第1节讨论用于分布式存储器危险检测和错误恢复的存储器电路(电路***)和方法。以下第2节公开CSA架构的实施例。具体地,公开了在数据流执行模型内集成存储器的新颖的实施例。第3节探究CSA的实施例的微架构细节。在一个实施例中,CSA的主要目的是支持编译器产生的程序。以下第4节检验CSA编译工具链的实施例。在第5节中,在经编译代码的执行中将CSA的实施例的优势与其他架构进行比较。在第6节中讨论CSA微架构的实施例的性能,在第7节中讨论进一步的CSA细节,在第8节中讨论加速硬件(例如,处理元件的空间阵列)的示例存储器排序,并且在第9节中提供总结。
1.用于分布式存储器危险检测和错误恢复的存储器电路和方法
在某些实施例中,如本文中所讨论,处理元件(PE)使用例如通过静态地配置(例如,电路交换型)通信网络而形成的专用虚拟电路来进行通信。这些虚拟电路可以是流受控且完全被回压的,使得例如如果源没有数据或PE的目的地为满,则该PE将停止。在运行时,数据可流经实现经映射数据流图(例如,经映射算法)的PE。例如,可通过处理元件的空间阵列(的例如结构区域)使数据从存储器流入,随后使数据向外返回至存储器。
此类架构相对于传统多核处理器可实现卓越的性能效率:例如与存储器***的扩展形成对照,例如以PE形式计算可以比核更简单且更多,并且通信可以是直接的。在某些实施例中,程序(例如,程序的数据流图)可通过在空间阵列上的执行被加速的程度与该空间阵列(例如,加速器)从存储(例如,存储器)接收(例如,输入)数据和/或向存储(例如,存储器)发送(例如,输出)数据的速度有关。本文中的某些实施例提供用于空间架构的粗粒度的存储器语义实施机制(硬件)。
本文中的某些实施例根据下文中的公开内容,例如,根据参照附图所讨论的实施例来访问存储器。本文中的某些实施例提供对例如参照附图的下文中讨论的存储器排序架构和微架构的微架构改良。
本文中的某些实施例提供用于例如单个存储器接口电路(例如,元件)内的局部化存储器消歧的技术。本文中的某些实施例缩放到大规模并行的(空间)阵列,在该大规模并行的(空间)阵列中,许多潜在冲突的存储器请求器正在同时访问存储器。该可缩放性可源自避免所有潜在冲突的请求器之间的地址交换,所有潜在冲突的请求器之间的地址交换可以是主要的能量、硬件和性能开销。
在本文中的某些实施例中,对单个(例如,高速缓存行)地址的所有请求必定接触例如存储与该单个地址对应的数据的同一高速缓存区块。在此类实施例中,通过将检查硬件放置在高速缓存区块(例如,危险检测电路)处而不是放置在本地存储器(请求)接口(例如,其可以是请求地址文件(RAF)电路)处,可容易地(例如,以低开销)观察任何冲突。该硬件(例如,危险检测电路)的某些实施例实现起来既不昂贵,并且也不需要多个请求器之间的任何通信,例如,其中,通过检验在高速缓存处的请求本身来检测冲突。通过提供此类硬件,本文中的某些实施例引入推测性存储器操作排序。该技术可例如允许加载在所有在先的存储已提交之前继续进行来(例如,基本上)消除存储器顺序跟踪的等待时间。
空间架构可提供加速用户应用的高能效且高性能的方法。此类架构的实施例面临的主要问题中的一个问题是将序列化或部分并行的应用的广泛集合映射到性质上是分布式的且高度并行的空间阵列。由于存在于其他编程环境中的集中式高度顺序的存储器模型,此映射中的主要困难可能是对程序中的存储器访问的(例如,自动的)并行化。考虑图3A中的下列代码。图3A图示根据本公开的实施例的具有潜在的动态数据依赖性的循环300。更具体地,循环300具有在基于输入i的函数“f”(例如,作为进入阵列p的索引)和基于i的函数“g”(例如,作为进入阵列p的索引)两者中使用的引起歧义的指针,例如,具有隐含的读取,随后是写入(读取g,随后按程序(例如,逻辑)顺序写入f)。如果对于同一索引(例如,对于给定i的f(i)和g(i)为相同值)这不按程序顺序发生,则这会导致错误。例如,假定这是存储器复制函数,则如果区域不重叠,则可能具有推测性的(例如,不按程序顺序的)存储器访问,但是如果区域重叠,则可能具有数据危险(例如,可能的错误,例如,过时的数据)。在一个实施例中,该代码的(例如,编译为(二进制)机器语言以在处理器/阵列上运行的)编译器不能够证明f(i)不等于g(i)(例如,对于同一个i值或跨循环体的(例如,所有)迭代,这可被称为指针或存储器别名),因此,该编译器必须使对阵列p的访问串行化(以便例如生成静态正确的代码)。本文中的某些实施例允许硬件甚至对于潜在动态的数据依赖性也提取并行性,从而例如实现高性能。例如,本文中的某些实施例在(例如,在运行时)f(i)和g(i)不相等时,在硬件中允许动态并行性。本文中的某些实施例在不使用诸如加载-存储队列之类的结构的情况下实现动态并行性,以便检查和利用潜在的动态依赖性。本文中的某些实施例允许空间架构对非依赖性访问重排序,由此例如改善存储器利用和总体程序性能。本文中的某些实施例提供了在危险检测电路(例如,其冲突***电路)中寄存对地址(例如,地址区域)的读取,以监测对那个区域的不按程序顺序的任何写入,从而例如避免强制要求所有存储器访问(例如,读取)都按程序顺序。
图3B图示根据本公开的实施例的图3A中的循环300的数据流图301表示。数据流图301被描绘为通过硬件存储器接口电路302来获取存储器访问。图3B图示用于循环300的空间代码如何可以被映射到空间架构,例如,对阵列p的两个访问被映射到存储器接口电路302(例如,RAF电路)。存储器接口电路302(例如,RAF电路)可调度对存储器子***的(例如,推测性的)存储器请求,确保请求按程序顺序返回,并确保通道内的任何现有的数据依赖性被遵守。具体地,对于循环300,从对应于g(i)的存储器加载数据将在(例如,对于每个循环迭代)将按程序(例如,逻辑)顺序将那个数据存储到对应于f(i)之前发生,例如,如利用本文中所讨论的存储器依赖性令牌来完成。
(例如,微架构的)本文中的某些实施例例如甚至在应用具有(例如,来自潜在的动态数据依赖性的)无法静态解决的存储器冲突的情况下并且对于图3A中的示例改善空间应用的存储器级并行性(MLP)。例如,本文中的某些实施例忠实地且以高性能来执行以上架构。
由于空间架构固有地是分布式的,因此本文中的某些实施例也是分布式的,例如,冲突管理硬件(例如,危险检测电路)位于高速缓存区块处以检测危险。硬件检测电路(例如,顺序违背检测机制及其伴随的校正机制)的某些实施例允许存储器接口硬件乱序地发布存储器请求。在一些实施例中,请求可乱序地发布,由此改善存储器级并行性和观察到的等待时间两者。在一些情况下,这些品质值的数量级改善是可能的。
图4图示根据本公开的实施例的通过存储器接口电路404耦合至存储器402的空间阵列401。空间阵列401可以是例如如本文中所讨论的任何空间阵列。在一个实施例中,空间加速器是现场可编程门阵列(FPGA)加速器、粗粒度可配置加速器(CGRA)或固定功能(例如,非可配置)加速器。存储器接口电路可以是空间阵列与存储器之间的任何接口,例如,如本文中所公开的请求地址文件(RAF)电路。可在存储器402中利用例如用于检测来自存储器访问的数据危险的危险检测电路406,例如,对于存储器的每个高速缓存或存储器区块,利用一个危险检测电路406。存储器402可以是高速缓存存储器,例如,管芯上存储器。附加地或替代地,可在存储器接口电路404中利用例如用于检测来自存储器访问的数据危险的危险检测电路410,例如,对于每个存储器接口电路,利用一个危险检测电路410。存储器接口电路404可包括例如与存储器(例如,高速缓存)402分开的推测性完成存储408。推测性完成存储408可存储从存储器推测性地取出的数据以用于存储器访问,例如,那个被推测性地取出的数据被保存在推测性完成存储408中,直到危险检测电路指示对于那个数据(例如,对于存储器访问(例如,加载)请求)没有数据危险。存储器接口电路404可从空间阵列401的电路交换型网络和/或分组交换型网络接收数据访问请求,并且通过存储器402的分组交换型网络来访问存储器402。
图5图示根据本公开的实施例的通过存储器接口电路504耦合至存储器502的空间阵列501。空间阵列501可以是例如如本文中所讨论的任何空间阵列。存储器接口电路可以是空间阵列与存储器之间的任何接口,例如,如本文中所公开的请求地址文件(RAF)电路。可在存储器502中利用例如用于检测来自存储器访问的数据危险的危险检测电路506,例如,对于存储器的每个高速缓存或存储器区块,利用一个危险检测电路506。存储器502可以是高速缓存存储器,例如,管芯上存储器。附加地或替代地,可与存储器接口电路504和/或与存储器502分开地利用例如用于检测来自存储器访问的数据危险的危险检测电路510,例如,对于每个存储器接口电路和/或高速缓存或存储器区块,利用一个危险检测电路510。危险检测电路510可使正在被跟踪数据危险的数据(例如,地址)的任何访问被监测,例如,其他非被跟踪访问可跨越旁路路径512例如从存储器接口电路504直接去往存储器502。存储器接口电路504可包括例如与存储器(例如,高速缓存)502分开的推测性完成存储508。推测性完成存储508可存储从存储器推测性地取出的数据以用于存储器访问,例如,那个被推测性地取出的数据被保存在推测性完成存储508中,直到危险检测电路指示对于那个数据(例如,对于存储器访问(例如,加载)请求)没有数据危险。存储器接口电路504可从空间阵列501的电路交换型网络接收数据访问请求,并且通过存储器502的分组交换型网络来访问存储器502。
图6图示根据本公开的实施例的危险检测电路600。存储器电路可包括例如在分布式环境中的危险检测电路的多个实例。所描绘的危险检测电路600包括例如用于跟踪多个访问(例如,不按程序顺序的访问)的数据地址的冲突***电路602。电路(例如,在处理器上运行的编译器)可将数据(例如,存储器(高速缓存)地址)标记为具有潜在的动态数据依赖性。冲突***电路602可(例如,在注释有数据访问请求的潜在的动态数据依赖性(例如,其字段)的指示的数据访问请求的到达时)进行检测。所描绘的危险检测电路600包括推测性数据(例如,元数据)存储604,该推测性数据(例如,元数据)存储604例如用于(例如,在发现(动态)冲突的情况下)存储用于将经更新的(正确的)值转发到(多个)请求器的足够的元数据和/或关于推测性高速缓存访问的其他信息,该其他信息例如,请求地址、发布存储器接口电路(例如,RAF)和/或推测性完成存储(例如,缓冲器)地址(例如,槽)。所描绘的危险检测电路600包括错误指示生成器电路和/或错误处置器电路606。错误指示生成器电路可在数据危险变成数据错误(例如,错误版本的数据被访问)时生成错误指示,并且例如将该错误指示发送到其他组件(例如,(多个)存储器接口电路)。在一个实施例中,错误指示生成器电路将错误指示发送至软件错误(例如,危险)处置程序。错误处置器电路可将经更新的数据(例如,正确版本的数据)发送至(多个)其他访问器,例如,发送至用于它们的访问请求的存储器接口电路。危险检测电路可包括冲突***电路602、推测性数据(例如,元数据)存储604、错误指示生成器电路和/或错误处置器电路606中的(例如,按任何组合)中的每一个或上述各项的任何组合的一个或多个实例。
图7图示根据本公开的实施例的耦合在多个(加速器)片的空间阵列700与多个高速缓存区块702之间的多个存储器接口电路(例如,请求地址文件(RAF)电路704)。虽然描绘了多个片,但是空间阵列700可以是单个片。虽然描绘了八个高速缓存区块,但是可利用单个高速缓存区块或任何数量的高速缓存区块。在一个实施例中,RAF和高速缓存区块的数量可以按1:1或1:2的比率。高速缓存区块可包含完整的高速缓存行(例如,与按字切分形成对照),例如,其中每一行(例如,地址)具有在该高速缓存中的正好一个原位(home)。高速缓存行可经由伪随机函数被映射至高速缓存区块。CSA可采用共享虚拟存储器(SVM)模型以与其他分片架构集成。某些实施例包括将RAF连接到高速缓存区块的加速器高速缓存接口(互连)(ACI)网络701(例如,分组交换型网络)。该网络可在RAF与高速缓存之间携带地址和数据。ACI网络701的拓扑可以是级联的交叉开关,例如,作为等待时间与实现复杂度之间的折中。高速缓存702可以是第一级(L1)或第二级(L2)高速缓存。高速缓存还可包括(例如,作为下一级(例如,L2或L3)的部分)高速缓存原位代理705(CHA),该高速缓存原位代理705(CHA)例如用于充当局部一致性和高速缓存控制器(例如,高速缓存代理)和/或还充当全局一致性和存储器控制性接口(例如,原位代理)。
在图7中,高速缓存区块702中的每一个都包括危险检测电路706中的其自身的危险检测电路。在一个实施例中,空间阵列700的处理元件(PE)(或其他组件)可请求(例如,对高速缓存区块702)的存储器访问,从而例如执行对高速缓存区块中的数据的加载或存储(或经由CHA 705向外通过其他存储器)。存储器接口电路(例如,RAF)可接收对可以存储在高速缓存区块702中(例如,存储在高速缓存区块702中)的数据的存储器请求。存储器接口电路可(例如,通过将与该存储器请求对应的(例如,散列)地址与存储在相应的高速缓存区块中的存储器地址的列表进行比较来)选择适当的高速缓存区块,并且(例如,经由ACI网络701)将请求发送到那个高速缓存区块。回想一下,在一个实施例中,每个数据项(例如,高速缓存行)(例如,地址)仅被存储在高速缓存中的一个位置中。如果那个数据项(例如,高速缓存行)(例如,基于其地址)正在由(例如,那个高速缓存区块的)危险检测电路跟踪,则可如下文中参照图8-图10所讨论的那样来采取适当的动作。在某些实施例中,适当的动作可以是(例如,当检测到错误时)例如通过以下方式进行的恢复:(i)通过覆盖RAF中的过时的数据;(ii)通过将空间阵列(例如,向提交点)回滚;和/或(iii)通过通知软件。
在下文中参照图8-图10的上下文中讨论提取微架构的存储器级并行性的实施例,但是该方式可适用于广泛的架构集。本文中的某些实施例允许(例如,所有的)推测性加载(例如,在它们匹配存储之前)离开以进行服务,并行于存储器(高速缓存)离开。图8-图10中描绘的电路可以是例如来自图7的组件,但是未描绘作出请求的PE。
图8图示根据本公开的实施例的耦合至多个高速缓存区块(802A、802D)的多个存储器接口电路(例如,请求地址文件(RAF)电路(804A、804C))中的获益推测。虽然未描绘,但是多个存储器接口电路可耦合至例如如图7中那样的(例如,具有多个处理元件的)空间阵列。可由空间阵列的组件(例如,处理元件,例如,如本文中所公开)生成存储器访问请求。
对于下文内容,假定存储器存储请求以及随后的存储器加载请求按代码中的程序顺序存在(例如,它们的排序已例如如上文中图3A中那样被指定),并且例如存储器存储请求和存储器加载请求(例如,被编译器)标记为具有潜在的动态数据依赖性(例如,它们可以但不必向同一存储器位置读取和写入)。
在一个实施例中,在程序已声明对请求的加载和存储操作要求排序的情况下,对请求的这些加载和存储操作被串行化(例如,仅按程序顺序被执行),例如,加载将执行,并且(例如,在完成之后)将依赖性令牌传递给存储,随后,该存储随后在接收到那个依赖性令牌时将执行,例如,如下文中在第8节中所讨论。然而,一般而言,加载和存储(例如,在运行时期间)实际上可能不冲突,因为它们的地址不相同。认识到这一点,(例如,微架构的)本文中的某些实施例例如即便在(例如,存储)地址未知时,寄希望于没有冲突(例如,(不按程序顺序)访问同一地址)实际发生而在早期乐观地发布存储器(例如,加载)请求。此类顺序推测性请求可被标记为推测性的。
图8图示图3A中的循环300(例如,图3B中的数据流图)的获益推测的情况。在此,即便来自RAF 804C的存储按程序顺序在来自RAF 804A的加载之前,加载请求也在逻辑上在先的存储请求被发布(5)至存储器之前被发布(1)至存储器(例如,高速缓存)。由于这两个访问去往不同的区块,因此,可以假定,当每个数据项(例如,高速缓存行)(例如,地址)仅被存储在高速缓存中的一个位置中时不存在地址冲突,并且减小了加载等待时间。
更具体地,加载请求(例如,从处理元件)被接收,并到达存储器接口电路(例如,RAF 804A)。在一个实施例中,RAF 804A包括用于接收和存储(存储器(例如,加载))请求的一个或多个缓冲器812A(例如(多个)寄存器)。例如参见图21,例如,队列和队列的缓冲器。(被示出为RAF 804A的)RAF随后可发送(1)对(被示出为高速缓存区块802A的)高速缓存区块的加载请求,该(被示出为高速缓存区块802A)的高速缓存区块(例如,根据数据的地址)存储将被加载的数据。在一个实施例中,(例如,每个)RAF用于对传入的存储器(例如,加载)请求(例如,该请求正寻求访问的地址)执行散列函数以确定哪个高速缓存区块正在存储那个存储器地址,并且存储器请求随后可(例如,在加速器高速缓存接口(ACI)801网络上)被发送到那个高速缓存区块。在此,那意味着加载请求移向(1)高速缓存区块802A。注意,高速缓存区块802A和RAF 804A是相邻的,但是本公开不限于此。
假定该存储器加载请求是推测性的(例如,被标记为具有潜在的动态数据依赖性),则高速缓存区块802A(例如,高速缓存区块802A的危险检测电路)随后开始对那个地址跟踪危险(例如,错误),例如,对那个地址的其他访问请求。在一个实施例中,存储器请求(例如,存储器请求的标签)的元数据包括用于指示潜在的动态数据依赖性的值(例如,一个或多个位)。在一个实施例中,(例如,来自将在当前的存储器访问之前发生的逻辑上在先的存储器访问的)存储器依赖性令牌存在的缺乏指示存储器访问请求是推测性请求。
在一个实施例中,(例如,危险检测电路的)冲突***电路806A将推测性加载的地址***(2)到推测跟踪数据结构(例如,推测性(元)数据存储808A)中。在一个实施例中,用于现在正在被跟踪的加载请求的元数据(和/或与其他数据)被置于(3)推测性(元)数据存储808A中。元数据可包括指示以下各项的数据:请求地址、RAF以及为那个RAF将那个请求的推测性数据存储在哪个推测性完成存储810A槽中。
随后,高速缓存区块802A可将与来自该地址的请求对应的数据返回(4)到例如作出对加载请求的请求的RAF。在某些实施例中,那个数据(例如,推测性值)例如被保存在RAF中(例如,被保存在RAF的推测性完成存储810A(例如,缓冲器)中),随后,当(例如,通过例如如本文中进一步所讨论的用于当前的存储器访问的(紧邻的)先前的程序顺序的访问的依赖性令牌)获得程序顺序时,该数据被释放。在某些实施例中,推测性完成存储用于存储推测性数据,直到已知该推测性数据是安全可用的。例如,一旦获取了顺序(例如,存储器依赖性)令牌,推测性值就不再是推测性的,并且可被释放到空间阵列(例如,结构)中。通过早发布加载请求,本文中的某些实施例隐藏存储器访问等待时间,并且增加存储器级并行性(MLP)。在一个实施例中,当数据被释放到空间阵列(例如,结构)中时,那个数据可被移除而不被危险检测电路跟踪(例如,作为条目被删除)。在一个实施例中,RAF电路(例如,在将数据释放到空间阵列(例如,结构)中时)用于将消息发送到高速缓存(例如,包括危险检测电路或存储的高速缓存区块),以释放危险检测电路中的推测性状态。在一些实施例中,可由高速缓存向RAF确收该消息。
在某些实施例中,可由(例如,不同的)RAF(例如,由RAF 804C)接收存储请求。RAF可包括一个或多个队列或缓冲器(例如,缓冲器810C和812C)。缓冲器810C可存储用于特定的存储请求的(有效载荷)数据,而缓冲器812C可存储用于该特定的存储请求的的那个数据的目标地址。随后,RAF 804C可将存储请求发送到该数据将(例如,根据该存储的目标地址)被存储在的高速缓存区块(被示出为高速缓存区块802D)。在一个实施例中,(例如,每个)RAF用于对传入的存储器(例如,存储)请求(例如,该请求正寻求访问的地址)执行散列函数以确定哪个高速缓存区块将要存储用于那个存储器地址的数据,并且存储器请求随后可(例如,在加速器高速缓存接口(ACI)801网络上)被发送到那个高速缓存区块。在此,那意味着存储请求移向(5)高速缓存区块802D。假定该存储器存储请求是推测性的(例如,被标记为具有潜在的动态数据依赖性,例如,通过不具有用于那个特定请求的存储器依赖性令牌),则高速缓存区块802D(例如,高速缓存区块802D的危险检测电路)随后开始对那个地址跟踪/检查(6)危险(例如,错误)。在此,加载请求可以是依赖于存储请求的(例如,此类存储器依赖性令牌指示该存储操作旨在在该加载操作之前被执行)。高速缓存区块802D的危险检测电路(例如,冲突***电路806D)可查询其存储(例如,和/或其他危险检测电路的推测性数据存储),并且确定还未进行对那个地址的其他推测性访问,例如,当前不存在危险。随后,高速缓存区块802D的危险检测电路(例如,冲突***电路806D)可将存储请求的针对该加载请求的存储器依赖性令牌在此例如转发(7)到RAF 804A,使得已经被加载到推测性完成存储810A中的数据可被释放(8)(到例如加载请求器和/或空间阵列)。在一个实施例中,存储请求与存储器依赖性令牌一起到来,该存储器依赖性令牌指示(例如,来自RAF804A的)依赖性加载是那个存储器依赖性令牌的目标。在一个实施例中,依赖性令牌的操纵注释有请求,例如,ACI具有用于依赖性令牌的(例如,返回)路径。例如,当存储提交到区块802D中时,电路(例如,区块802D)可将依赖性令牌发送到适当的位置(例如,在此为RAF804A)。作为另一示例,当将被存储的数据通过(例如,没有冲突被检测到)冲突***电路时,但例如在存储提交到区块802D中之前,依赖性令牌可被发送到适当的位置(例如,在此为RAF 804A)。
本文中的某些实施例供应(例如,提供存储空间)以适配未决的存储器请求的最常见的情况,然而,微架构中的有限结构耗尽空间是可能的。在这种情况下,无(例如,非或否定)确收消息(NACK)可被发送到适当的请求器,例如使得该请求器(例如,RAF)将在稍后重新尝试。或者,我们也可在ACI中引入消息类和虚拟通道以实现类似的效果。
本文中的某些实施例通过包括用于对非排序的(例如,无动态数据依赖性的)操作进行注释的硬件来避免在不具有排序要求的那些程序中使用存储器排序。在微架构中,这些操作可以被标记(或不被标记)以指示它们不参与任何顺序检查硬件结构(例如,(多个)危险检测电路)。
在一些情况下,编译器可能能够证明某些存储器访问不与任何其他存储器访问冲突。在这种情况下,例如,该存储器操作可(例如,被编译器)注释为不具有排序(例如,依赖性令牌)要求,并且该存储器操作的操作数一旦可用,该存储器操作就可发布。在存储器操作不具有后续操作的情况下,例如,它可被注释为不产生排序令牌,并且绕过本文中讨论的危险检测电路(例如,冲突***电路)。
在一个实施例中,例如,可由危险检测电路对所有潜在冲突的存储检查危险,并且可由危险检测电路对所有推测性加载检查危险。
在某些实施例中,当推测性请求获取它们实际的存储器依赖性令牌时,它们变成非推测性的,进行提交,并且可从高速缓存跟踪结构(例如,(多个)冲突***电路)中被移除。该移除过程可包括:将消息发送到高速缓存,使得对应的跟踪请求可被移除。在一个实施例中,请求地址与用于停止跟踪那个地址的请求一起存在。在另一实施例中,RAF发送对高速缓存元数据存储的引用以停止跟踪那个地址,该引用可包括地址表示。该方法降低能量、存储面积和网络复杂度。在一个实施例中,当电路(例如,RAF)接收推测性地址时,它伴随着准许从危险检测电路移除跟踪请求的元数据。该元数据可以是原始的请求地址的索引ID或部分。该选择可取决于危险检测电路(例如,冲突检测电路)是用CAM还是用布鲁姆(bloom)过滤器来建立的。在一个实施例中,当请求(例如,按程序顺序)排序或提交时,可使该元数据(例如,索引或地址部分)(例如,从RAF电路)返回到高速缓存区块,使得危险检测电路(例如,冲突检测电路)相应地被更新。
图9图示根据本公开的实施例的多个存储器接口电路(例如,904A、904C)中的不获益推测(误推测)。虽然未描绘,但是多个存储器接口电路可耦合至(例如,具有多个处理元件的)空间阵列。可由空间阵列的组件(例如,处理元件,例如,如本文中所公开)生成存储器访问请求。
对于下文内容,假定存储器存储请求以及随后的存储器加载请求按代码中的程序顺序存在(例如,它们的排序已例如如上文中图3A中那样被指定),并且例如存储器存储请求和存储器加载请求(例如,被编译器)标记为具有潜在的动态数据依赖性(例如,它们可以但不必向同一存储器位置读取和写入)。
在一个实施例中,在程序已声明对请求的加载和存储操作要求排序的情况下,对请求的这些加载和存储操作被串行化(例如,仅按程序顺序被执行),例如,加载将执行,并且(例如,在完成之后)将依赖性令牌传递给存储,随后,该存储随后在接收到那个依赖性令牌时将执行,例如,如下文中在第8节中所讨论。然而,一般而言,加载和存储(例如,在运行时期间)实际上可能不冲突,因为它们的地址不相同。认识到这一点,(例如,微架构的)本文中的某些实施例例如即便在(例如,存储)地址未知时,寄希望于没有冲突(例如,(不按程序顺序)访问同一地址)实际发生而在早期乐观地发布存储器(例如,加载)请求。此类顺序推测性请求可被标记为推测性的。
图9图示图3A中的循环300(例如,图3B中的数据流图)的不获益推测(误推测)的情况。在此,即便来自RAF 904C的存储按程序顺序在来自RAF 904A的加载之前,加载请求也在逻辑上在先的存储请求被发布(5)至存储器之前被发布(1)至存储器(例如,高速缓存)。由于这两个访问去往同一区块(区块902A),因此可能无法假定不存在地址冲突。
更具体地,加载请求(例如,从处理元件)被接收,并到达存储器接口电路(例如,RAF 904A)。在一个实施例中,RAF 904A包括用于接收和存储(存储器(例如,加载))请求的一个或多个缓冲器912A(例如(多个)寄存器)。例如参见图21,例如,队列和队列的缓冲器。(被示出为RAF 904A的)RAF随后可发送(1)对(被示出为高速缓存区块902A的)高速缓存区块的加载请求,该(被示出为高速缓存区块902A)的高速缓存区块(例如,根据数据的地址)存储将被加载的数据。在一个实施例中,(例如,每个)RAF用于对传入的存储器(例如,加载)请求(例如,该请求正寻求访问的地址)执行散列函数以确定哪个高速缓存区块正在存储那个存储器地址,并且存储器请求随后可(例如,在加速器高速缓存接口(ACI)901网络上)被发送到那个高速缓存区块。在此,那意味着加载请求移向(1)高速缓存区块902A。注意,高速缓存区块902A和RAF 904A是相邻的,但是本公开不限于此。
假定该存储器加载请求是推测性的(例如,被标记为具有潜在的动态数据依赖性),则高速缓存区块902A(例如,高速缓存区块902A的危险检测电路)随后开始对那个地址跟踪危险(例如,错误),例如,对那个地址的其他访问请求。在一个实施例中,存储器请求(例如,存储器请求的标签)的元数据包括用于指示潜在的动态数据依赖性的值(例如,一个或多个位)。在一个实施例中,(例如,来自将在当前的存储器访问之前发生的逻辑上在先的存储器访问的)存储器依赖性令牌存在的缺乏指示存储器访问请求是推测性请求。
在一个实施例中,(例如,危险检测电路的)冲突***电路906A将推测性加载的地址***(2)到推测跟踪数据结构(例如,推测性(元)数据存储908A)中。在一个实施例中,用于现在正在被跟踪的加载请求的元数据(和/或与其他数据)被置于(3)推测性(元)数据存储908A中。元数据可包括指示以下各项的数据:请求地址、RAF以及为那个RAF将那个请求的推测性数据存储在哪个推测性完成存储910A槽中。
随后,高速缓存区块902A可将与来自该地址的请求对应的数据905(例如,值)返回(4)到例如作出对加载请求的请求的RAF。在某些实施例中,那个数据(例如,推测性值)例如被保存在RAF中(例如,被保存在RAF的推测性完成存储910A(例如,缓冲器)中),随后,当(例如,通过例如如本文中进一步所讨论的用于当前的存储器访问的(紧邻的)先前的程序顺序的访问的依赖性令牌)获得程序顺序时,该数据被释放(8)。在某些实施例中,推测性完成存储用于存储推测性数据,直到已知该推测性数据是安全可用的。例如,一旦获取了顺序(例如,存储器依赖性)令牌,推测性值就不再是推测性的,并且可被释放到空间阵列(例如,结构)中。通过早发布加载请求,本文中的某些实施例隐藏存储器访问等待时间,并且增加存储器级并行性(MLP)。
在某些实施例中,可由(例如,不同的)RAF(例如,由RAF 904C)接收存储请求。RAF可包括一个或多个队列或缓冲器(例如,缓冲器910C和912C)。缓冲器910C可存储用于特定的存储请求的(有效载荷)数据,而缓冲器912C可存储用于该特定的存储请求的那个数据的目标地址。随后,RAF 904C可将存储请求发送到该数据将(例如,根据该存储的目标地址)被存储在的高速缓存区块(被示出为高速缓存区块902A)。在一个实施例中,(例如,每个)RAF用于对传入的存储器(例如,存储)请求(例如,该请求正寻求访问的地址)执行散列函数以确定哪个高速缓存区块将要存储用于那个存储器地址的数据,并且存储器请求随后可(例如,在加速器高速缓存接口(ACI)901网络上)被发送到那个高速缓存区块。在此,那意味着存储请求移向(5)高速缓存区块902A。假定该存储器存储请求是推测性的(例如,被标记为具有潜在的动态数据依赖性,例如,通过不具有用于那个特定请求的存储器依赖性令牌,或被标记为要求冲突***电路的检查),则高速缓存区块902A(例如,高速缓存区块902A的危险检测电路)随后开始对那个地址跟踪/检查(6)危险(例如,错误)。在此,加载请求可以是依赖于存储请求的(例如,此类存储器依赖性令牌指示该存储操作旨在在该加载操作之前被执行)。高速缓存区块902A的危险检测电路(例如,冲突***电路906A)可查询其存储(例如,和/或其他危险检测电路的推测性数据存储),并且确定已经(例如,由来自RAF 904A的加载请求)进行对那个地址的其他推测性访问,例如,当前存在危险。高速缓存区块902A的危险检测电路(例如,冲突***电路906A)随后可指示存在错误,例如,这可导致例如由错误指示电路/错误处置器电路(例如,图6中的错误指示电路/错误处置器电路606)采取补救动作。在所描绘的实施例中,危险检测电路(例如,错误处置器电路)可将经更新的值907(例如,从存储)发送到作出请求的RAF和/或空间阵列。在一个实施例中,该经更新的值907覆写例如在与推测性完成存储910A相同的槽中的推测性值905。在所描绘的实施例中,危险检测电路(例如,错误处置器电路)可进一步将存储器依赖性令牌909发送(7)到作出请求的RAF和/或空间阵列。在一个实施例中,存储器依赖性令牌909的接收使经更新的值907从推测性完成存储910A被发送到请求器。在一个实施例中,存储请求与存储器依赖性令牌一起到来,该存储器依赖性令牌指示(例如,来自RAF 904A的)依赖性加载是那个存储器依赖性令牌的目标。在一个实施例中,依赖性令牌的操纵注释有请求,例如,ACI具有用于依赖性令牌的返回路径。例如,当存储提交到区块902A中时,电路(例如,区块902A)可将依赖性令牌909发送到适当的位置(例如,在此为RAF 904A)。作为结果,新存储的值被发送到作出请求的RAF。相比基线情况,加载等待时间仍可被减少,例如由于加载数据被直接转发。
错误恢复
在某些情况下,在依赖性存储器访问之间将没有地址冲突。然而,在一些情况下,可能存在地址碰撞。在一种情况下,非推测性写入请求接触与已被置入危险检测电路(例如,其跟踪结构)中的时间上在先但逻辑上在后的读取相同的地址,例如,在图10中,已检测到写入后读取错误。为了校正该错误,高速缓存可转发与传入存储相关联的新值。这甚至在存在地址冲突的情况下也可允许加载等待时间的减少。
例如,如果无法保证新值和依赖性令牌的排序,则错误恢复也可具有竞争条件的可能性。可通过整合新值响应和依赖性令牌来解决竞争条件。在此,接收新值的RAF可将依赖性令牌重传至依赖性RAF。如果多个新值消息被发送,则依赖性令牌也可注释有所发送的更新的数量,例如使得保证依赖性操作直到所有期望的依赖性令牌都已到达才执行。这种情况的示例在图10中示出。
图10图示根据本公开的实施例的耦合至多个高速缓存区块(1002、1008)的多个存储器接口电路(例如,请求地址文件(RAF)电路(1004A、1004C、1004D))中的不获益推测(误推测)。
在此,两个加载(来自RAF 1004A的加载1015和来自RAF 1004D的加载1017)在(来自RAF 1004C的)逻辑上在先的存储之前被发布。然而,存在与在存储之前发生的(推测性的)加载1015的冲突,并且该存储也将会将存储器依赖性令牌发送到(推测性的)加载1017,例如,将相对于与加载1015的冲突对加载1017依赖性排序。由此,在某些实施例中,值更新消息(7)被注释以将存储器依赖性令牌1109转发1011至加载1017(的例如RAF 1004D),并且顺序被维持。在一个实施例中,在RAF 1004D处接收到存储器依赖性令牌1009将允许用于加载1017的数据进入结构,例如,从推测性完成存储1010D被释放(10)。
虽然未描绘,但是多个存储器接口电路可耦合至(例如,具有多个处理元件的)空间阵列。可由空间阵列的组件(例如,处理元件,例如,如本文中所公开)生成存储器访问请求。
对于下文内容,假定存储器存储请求以及随后的两个存储器加载请求按代码中的程序顺序存在,并且例如存储器存储请求和存储器加载请求(例如,被编译器)标记为具有潜在的动态数据依赖性(例如,它们可以但不必向同一存储器位置读取和写入),并且(例如,按程序顺序的)第二加载1017将在该存储之后发生。
在一个实施例中,在程序已声明对请求的加载和存储操作要求排序的情况下,对请求的这些加载和存储操作被串行化(例如,仅按程序顺序被执行),例如,加载将执行,并且(例如,在完成之后)将依赖性令牌传递给存储,随后,该存储随后在接收到那个依赖性令牌时将执行,例如,如下文中在第8节中所讨论。然而,一般而言,加载和存储(例如,在运行时期间)实际上可能不冲突,因为它们的地址不相同。认识到这一点,(例如,微架构的)本文中的某些实施例例如即便在(例如,存储)地址未知时,寄希望于没有冲突(例如,(不按程序顺序)访问同一地址)实际发生而在早期乐观地发布存储器(例如,加载)请求。此类顺序推测性请求可被标记为推测性的。
图10针对加载1015和存储以及从加载1017到该存储的依赖性来图示图3A中的循环300(例如,图3B的数据流图)的无收益推测(误推测)的情况。在此,即便来自RAF 1004C的存储按程序顺序在来自RAF 1004A的加载1015之前,加载请求1015也在逻辑上在先的存储请求被发布(5)至存储器之前被发布(1)至存储器(例如,高速缓存)。由于两个访问去往同一区块(区块1002A),因此可能无法假定不存在地址冲突。
更具体地,加载请求1015(例如,从处理元件)被接收,并到达存储器接口电路(例如,RAF 1004A)。在一个实施例中,RAF 1004A包括用于接收和存储(存储器(例如,加载))请求的一个或多个缓冲器1012A(例如(多个)寄存器)。例如参见图21,例如,队列和队列的缓冲器。(被示出为RAF 1004A的)RAF随后可发送(1)对(被示出为高速缓存区块1002A的)高速缓存区块的加载请求1015,该(被示出为高速缓存区块1002A)的高速缓存区块(例如,根据数据的地址)存储将被加载的数据。在一个实施例中,(例如,每个)RAF用于对传入的存储器(例如,加载)请求(例如,该请求正寻求访问的地址)执行散列函数以确定哪个高速缓存区块正在存储那个存储器地址,并且存储器请求随后可(例如,在加速器高速缓存接口(ACI)1001网络上)被发送到那个高速缓存区块。在此,那意味着加载请求1015移向(1)高速缓存区块1002A。注意,高速缓存区块1002A和RAF 1004A是相邻的,但是本公开不限于此。
假定该存储器加载请求1015是推测性的(例如,被标记为具有潜在的动态数据依赖性),则高速缓存区块1002A(例如,高速缓存区块1002A的危险检测电路)随后开始对那个地址跟踪危险(例如,错误),例如,对那个地址的其他访问请求。在一个实施例中,存储器请求(例如,存储器请求的标签)的元数据包括用于指示潜在的动态数据依赖性的值(例如,一个或多个位)。在一个实施例中,(例如,来自将在当前的存储器访问之前发生的逻辑上在先的存储器访问的)存储器依赖性令牌存在的缺乏指示存储器访问请求是推测性请求。
在一个实施例中,(例如,危险检测电路的)冲突***电路1006A将推测性加载1015的地址***(2)到推测跟踪数据结构(例如,推测性(元)数据存储1008A)中。在一个实施例中,用于现在正在被跟踪的加载请求的元数据(和/或与其他数据)被置于(3)推测性(元)数据存储1008A中。元数据可包括指示以下各项的数据:请求地址、RAF以及为那个RAF将那个请求的推测性数据存储在哪个推测性完成存储1010A槽中。
随后,高速缓存区块1002A可将与来自该地址的请求对应的数据1005(例如,值)返回(4)到例如作出对加载请求的请求的RAF。在某些实施例中,数据(例如,推测性值)例如被保存在RAF中(例如,被保存在RAF的推测性完成存储1010A(例如,缓冲器)中),随后,当(例如,通过例如如本文中进一步所讨论的用于当前的存储器访问的(紧邻的)先前的程序顺序的访问的依赖性令牌)获得程序顺序时,该数据被释放。在某些实施例中,推测性完成存储用于存储推测性数据,直到已知该推测性数据是安全可用的。例如,一旦获取了顺序(例如,存储器依赖性)令牌,推测性值就不再是推测性的,并且可被释放到空间阵列(例如,结构)中。通过早发布加载请求,本文中的某些实施例隐藏存储器访问等待时间,并且增加存储器级并行性(MLP)。
在某些实施例中,可由(例如,不同的)RAF(例如,由RAF 1004C)接收存储请求。RAF可包括一个或多个队列或缓冲器(例如,缓冲器1010C和1012C)。缓冲器1010C可存储用于特定的存储请求的(有效载荷)数据,而缓冲器1012C可存储用于该特定的存储请求的那个数据的目标地址。随后,RAF 1004C可将存储请求发送到该数据将(例如,根据该存储的目标地址)被存储在的高速缓存区块(被示出为高速缓存区块1002A)。在一个实施例中,(例如,每个)RAF用于对传入的存储器(例如,存储)请求(例如,该请求正寻求访问的地址)执行散列函数以确定哪个高速缓存区块将要存储用于那个存储器地址的数据,并且存储器请求随后可(例如,在加速器高速缓存接口(ACI)1001网络上)被发送到那个高速缓存区块。在此,那意味着存储请求移向(5)高速缓存区块1002A。假定该存储器存储请求是推测性的(例如,被标记为具有潜在的动态数据依赖性,例如,通过仍不具有用于那个特定请求的存储器依赖性令牌),则高速缓存区块1002A(例如,高速缓存区块1002A的危险检测电路)随后开始对那个地址跟踪/检查(6)危险(例如,错误)。在此,(多个)加载请求可以是依赖于存储请求的(例如,此类存储器依赖性令牌指示该存储操作旨在在对应的加载操作之前被执行)。与存储器访问对应的时期一般可以指将按给定顺序执行的两个(或更多个)存储器访问,例如,具有用于该第二存储器访问的存储器依赖性令牌,该存储器依赖性令牌使第二存储器访问在第一存储器访问发生(或被提交)之前停止(例如,或者使缓冲器中相关联的数据停止),并由此使用于该第二存储器访问的存储器依赖性令牌被发送(或更新)以指示第一存储器访问的完成。高速缓存区块1002A的危险检测电路(例如,冲突***电路1006A)可查询其存储(例如,和/或其他危险检测电路的推测性数据存储),并且确定还未进行(例如,由来自RAF 1004A的加载请求1015进行的)对那个地址的其他推测性访问,例如,当前存在危险。高速缓存区块1002A的危险检测电路(例如,冲突***电路1006A)可查询其存储(例如,和/或其他危险检测电路的推测性数据存储),并且也确定存储器访问(例如,加载1017)依赖于RAF 1004C中的存储(例如,将从RAF 1004C中的存储接收存储器依赖性令牌)。由此,来自高速缓存区块1002A的消息(例如,值更新消息(7))也可使存储器依赖性令牌1009被转发到RAF 1004D以用于加载1017。本文中的某些实施例由此防止存储器依赖性令牌先于推测性值更新,以便例如防止令牌通过彼此。
高速缓存区块1002A的危险检测电路(例如,冲突***电路1006A)随后可指示存在错误,例如,这可导致例如由错误指示电路/错误处置器电路(例如,图6中的错误指示电路/错误处置器电路606)采取补救动作。在所描绘的实施例中,危险检测电路(例如,错误处置器电路)可将(例如,来自存储的)经更新的值1007发送到作出请求的RAF和/或空间阵列。在一个实施例中,该经更新的值1007覆写例如在与推测性完成存储1010A相同的槽中的推测性值1005。在所描绘的实施例中,危险检测电路(例如,错误处置器电路)可进一步将(例如,与对加载1017的请求对应的)存储器依赖性令牌1009发送(7)到作出请求的RAF和/或空间阵列。在一个实施例中,在RAF 1004A中接收到存储器依赖性令牌1009使该依赖性令牌1009被发送1011到RAF 1004D,例如作为与对加载1017的请求对应的依赖性令牌1009。在一个实施例中,存储请求与存储器依赖性令牌一起到来,该存储器依赖性令牌指示(例如,来自RAF 1004A的)依赖性加载是那个存储器依赖性令牌的目标。在一个实施例中,依赖性令牌的操纵注释有请求,例如,ACI具有用于依赖性令牌的返回路径。例如,当存储提交到区块1002A中时,电路(例如,区块1002A)可将依赖性令牌1009发送到适当的位置(例如,在此为RAF 1004A)。作为结果,新存储的值被发送到作出请求的RAF 1004A,并且存储器依赖性令牌与对该存储的依赖性一起被发送到作出请求的RAF 1004A和RAF 1004D。相比基线情况,加载等待时间仍可被减少,例如由于加载数据被直接转发。
高速缓存区块
在某些实施例中,高速缓存区块包括危险检测电路,例如,每个高速缓存区块都包括危险检测电路。危险检测电路可用于维持现有未决的推测性请求的视图。危险检测电路(例如,其冲突***电路)可基于例如来自RAF的流入请求中存在的标签来访问。
在一个实施例中,危险检测电路包括冲突***电路(例如,图6中的冲突***电路602)和推测性元数据存储(例如,图6中的推测性(元)数据存储604)。可查询冲突***电路以判定特定的地址例如在任何RAF内是否当前是推测性的。在一个实施例中,冲突***电路包括计数型布鲁布过滤器以例如确保对同一地址的多个推测性请求被跟踪。在计数型布鲁姆过滤器中的***和删除可基于访问请求和这些访问请求的完成。或者,冲突***电路可包括用于跟踪对同一地址的多个推测性请求的内容可寻址存储器(CAM)。
推测性元数据存储可包括关于推测性高速缓存访问的信息(例如,元数据),例如,请求地址、RAF和推测性完成存储地址(槽)。在一个实施例中,如果布鲁姆过滤器用于跟踪,则它会具有假肯定,因此,推测性元数据存储可标记有推测性请求地址以允许找到适当的元数据。在这种情况下,可使用像高速缓存那样的关联性存储,包括完全关联性高速缓存。本文中的某些实施例以小于高速缓存行(例如,32位或64位的字)或以高速缓存行层级来管理冲突粒度,例如,较低的层级使用跟踪结构元数据中较多的位。在某些实施例中,所有潜在冲突的存储访问冲突***电路(例如,布鲁姆过滤器),例如,如果过滤器为空,则使用预过滤器来消除一些检查是可能的。
RAF
在某些实施例中,存储器接口电路(例如,RAF)包括推测性完成存储,例如,如图11中所示。存储器接口电路可允许推测性值的概念,例如,存在的但对于程序还不可用(不可见)的值。在一个实施例中,存储器接口电路包括计数器,该计数器在存储器依赖性令牌变得可用(例如,可用于存储在推测性完成存储中的数据)时被更新。推测性完成存储也可被扩展以包含用于将跟踪移除消息往回发送至高速缓存的(例如,任何)高速缓存元数据。
在一个实施例中,存储器接口电路包括用于准许或限制推测操作的控制。在一个实施例中,存储器接口电路包括利用推测性依赖性令牌,例如,与本文中讨论的存储器依赖性令牌类似,但允许它们具有负值,例如,具有可编程的(下)限值。当依赖性令牌余值小于零时,推测会发生。如果余值为非负,则可获取程序顺序,例如,在像上下文切换那样的若干程序管理操作中有用的检查。推测性依赖性令牌可用于对未决的推测性访问的数量施加限制,例如,RAF可限于例如存储在那个RAF的推测性完成存储中的一个或多个(例如,2个、3个、4个、5个、6个、7个、8个、9个、10个等)未决的推测性访问。在一个实施例中,通过将推测限值设置为某个值(例如,零)来禁用推测是可能的。
图11图示根据本公开的实施例的用于推测性完成存储1102的微架构扩展1100。在一个实施例中,存储器接口电路(例如,RAF)维持附加的状态(例如,在图11中的右侧描绘的指针)来反映推测性完成存储的推测性性质。例如,虚线框中的例如“不可见的”数据可能直到(例如,从存储执行)接收到对应的存储器依赖性令牌才可被从虚线框中释放到空间阵列(例如,结构)中。
ACI网络
在一个实施例中,ACI网络包括用于携带与推测性操作有关的各种元数据的网络支持。该元数据可以是相对小的,并且仅在推测的情况下被利用(例如,使用)。
推测性存储
虽然某些实施例通过推测减少了加载等待时间,但是实施例还可适配推测性存储。例如,推测性存储的一个问题可能在于,对同一地址具有多个推测性访问(加载或存储)是可能的。一般而言,这些访问可不被精确地排序。在这种情况下,电路用于既丢弃已发生的无论什么推测性访问,又将存储应当按程序顺序被重试的消息往回发送到RAF。否则,推测性存储的行为可遵循本文中讨论的推测性加载的行为。
上述实施例中的某些实施例一般可将推测性数据存储在存储中(例如,存储在RAF中),并且在该推测性数据被证明是正确的(例如,在接收到存储器依赖性令牌时)之前,不将该推测性数据释放到结构中。在那些实施例中,空间阵列(例如,结构)可以是正确的,例如,由不正确的推测导致的任何发布不被扇出到空间阵列中。
附加地或替代地,实施例可将推测性数据扇出到空间阵列中,并且例如当检测到数据危险(例如,读取接触由不同的存储器接口写入的行)时,可调用处置程序来(例如,向软件)通知该发布。本文中的某些实施例也定义提交机制,例如,该提交机制允许空间程序定义当知晓无危险存在时的时刻。
图12图示根据本公开的实施例的危险跟踪***1200。存储器访问请求(例如,命令)可例如通过(电路交换型)网络1202和/或1204从处理元件(PE)的空间阵列1201流到高速缓存基础结构。访问***位可被存储在存储1206中(例如,被存储在(L2)高速缓存中)以跟踪对存储器的修改。配置位可用于检测冲突的存在。所描绘的空间阵列1201可经由RAF/高速缓存接口1208来与存储器(未示出)对接,例如,如本文中的其他附图中那样(例如,如本文中的第8节中那样)。RAF/高速缓存接口1208可包括一个或多个输入缓冲器1210和输出缓冲器1212。数据可能直到在输出缓冲器1212中接收到用于存储器访问数据的对应的存储器依赖性令牌时才被输出。在一个实施例中,甚至当存储器依赖性令牌不被接收时(例如,对于具有动态数据依赖性的数据访问),***1200(例如,RAF/高速缓存接口1208)也用于从输出缓冲器1212输出数据。但是对于具有动态数据依赖性的访问的数据的那些输出例如利用存储1206中的访问***位来跟踪。由此,去往输入缓冲器1210的存储器依赖性令牌的输入可被检测,并且对照存储1206中的访问***位被检查。如果存在已经(例如,从输出缓冲器1212)输出的依赖性数据,则错误指示可被生成,例如,可被发送到控制寄存器,以便例如使软件危险处置程序执行校正动作(例如,以执行到先前点的回滚)。
图12示出危险检测接口的***级架构。在此,处理元件(例如,PE 1203)可作出存储器访问请求(例如,存储)。对于可能具有存储器危险的那些请求(例如,流)(例如,当还未在例如RAF中接收到存储器依赖性令牌时),可例如使用一些状态位在高速缓存处标记这些访问。如果对于地址另一访问发生(例如,对该地址的另一流访问),同时该另一访问被标记,则这可表示访问错误。在一个实施例中,这导致异常被递送到软件。在一个实施例中,当被标记的行将从高速缓存被驱逐时,异常被递送。在异常发生时,可调用软件来修复潜在的冲突。例如,可使所产生的(例如,所有)经修改的高速缓存值无效,并且软件运行程序的并行性较低的版本,例如,在先前安全的检查点的时刻处的核上的序列化版本。本文中的某些实施例随后可将(例如,误推测的)代码改变为较不具推测性的,例如,包括禁用推测支持。本文中的某些实施例允许添加标签字段(例如,添加至高速缓存)以标识冲突集,从而例如允许更精细的冲突粒度。
本文中的某些实施例利用在空间阵列(例如,结构)软件的部分上检查点操作和通知。空间阵列1201(例如,结构)可开始检查点,并且继续执行。在一些时间之后,空间阵列1201(例如,结构)随后可例如通过发布存储器围栏来使存储器同步。空间阵列1201(例如,结构)随后可向存储器通知该同步,使得存储1206中的访问(冲突)***位可被清除。在该清除操作完成时,下一批空间阵列1201(例如,结构)操作可开始。危险可被标记为是全局的,或在多个通道或通道集合之间。在一个实施例中,如果冲突发生在未经标记的通道之间,则这不是错误,并且没有异常将被生成(例如,无危险通知1214被发送)。
图13图示根据本公开的实施例的流程图1300。所描绘的流程1300包括:1302:利用存储器接口电路接收来自处理元件的空间阵列的对存储在多个高速缓存区块中的数据的存储器请求,该多个高速缓存区块具有在该多个高速缓存区块中的每个高速缓存区块中的危险检测电路;1304:对于来自存储器接口电路的、被标记有潜在的动态数据依赖性的、对第一危险检测电路的第一高速缓存区块内的地址的推测性存储器加载请求,利用该第一危险检测电路标记地址以跟踪对该地址的其他存储器请求;1306:将来自该地址的数据存储在推测性完成存储中;以及1308:当对于推测性存储器加载请求接收到存储器依赖性令牌时,将该数据从推测性完成存储发送到处理元件的空间阵列。
2.CSA架构
CSA的某些实施例的目的是迅速且高效地执行程序(例如,由编译器产生的程序)。CSA架构的某些实施例提供支持编译器技术和编程范式的需求的编程抽象。CSA的实施例执行数据流图,例如,非常像经编译的程序的编译器自身的内部表示(IR)的程序表现形式。在该模型中,程序被表示为由节点(例如,顶点)和边缘组成的数据流图,该节点从(例如,涵盖计算操作和控制操作两者的)架构定义的数据流操作器的集合绘制,该边缘表示数据在数据流操作器之间的传送。执行可通过将数据流令牌(例如,作为数据值或表示数据值的数据流令牌)注入到数据流图中来进展。令牌可在其间流动,并可在每一个节点(例如,顶点)处被转换,从而例如形成完整的计算。在图14A-图14C中示出样本数据流图及其距高级源代码的偏离,并且图16示出数据流图的执行的示例。
通过提供编译器所要求的确切的那些数据流图执行支持,CSA的实施例为数据流图执行进行配置。在一个实施例中,CSA是加速器(例如,图2中的加速器),并且它不寻求提供在通用处理核(例如,图2中的核)上可用的必要但不频繁使用的机制(诸如,***调用)中的一些。因此,在该实施例中,CSA可执行许多代码,但不能够执行所有代码。作为交换,CSA获得显著的性能和能量优势。为了实现以常用的序列化语言编写的代码的加速,本文中的实施例也引入若干新颖的架构特征来辅助编译器。一个具体的新颖性是CSA对存储器的处理,这是先前已被忽略或未被很好地解决的课题。CSA的实施例在将数据流操作器(例如,相比将查找表(LUT))用作其基本架构接口方面也是独一无二的。
往回转到CSA的实施例,下面讨论数据流操作器。
2.1数据流操作器
加速器(例如,CSA)的实施例的关键架构接口是数据流操作器,例如,作为数据流图中的节点的直接表示。从操作的视角来看,数据流操作器流式地或以数据驱动方式表现。数据流操作器的传入操作数一可用,该数据流操作器就可执行。CSA数据流执行可(例如,仅)依赖于高度局部化的状态,从而例如导致伴随着分布式异步执行模型的高度可缩放架构。数据流操作器可包括算术数据流操作器,例如,以下一项或多项:浮点加法和乘法,整数加法、减法和乘法,各种形式的比较、逻辑操作器,以及移位。然而,CSA的实施例也可包括辅助程序图中的数据流令牌管理的丰富的控制操作器的集合。这些控制操作器的示例包括“挑选”操作器(例如,其将两个或更多个逻辑输入通道复用为单个输出通道)和“切换”操作器(例如,其操作为通道解复用器)(例如,从两个或更多个逻辑输入通道输出单个通道)。这些操作器可使编译器实现控制范式(诸如,条件表达式)。CSA的某些实施例可包括(例如,相对于较小数量的操作的)有限的数据流操作器集以实现密集且高能效的PE微架构。某些实施例可包括用于HPC代码中常见的复杂操作的数据流操作器。CSA数据流操作器架构对于部署特定的扩展是高度地可改变的。例如,更多复杂的数学数据流操作器(例如,三角函数)可被包括在某些实施例中以使某些数学密集型HPC工作负荷加速。类似地,神经网络调整的扩展可包括用于向量化、低精度算术的数据流操作器。
图14A图示根据本公开的实施例的程序源。程序源代码包括乘法函数(func)。图14B图示根据本公开的实施例的针对图14A的程序源的数据流图1400。数据流图1400包括挑选节点1404、切换节点1406和乘法节点1408。沿通信路径中的一条或多条通信路径,缓冲器可任选地可被包括。所描绘的数据流图1400可执行以下操作:利用挑选节点1404来选择输入X,将X与Y相乘(例如,乘法节点1408),且随后从切换节点1406的左侧输出输出结果。图14C图示根据本公开的实施例的加速器(例如,CSA),该加速器具有配置成用于执行图14B的数据流图的多个处理元件1401。更具体地,数据流图1400被覆盖到处理元件1401的阵列(以及例如其间的(多个)(例如,互连)网络)中,使得例如数据流图1400中的每一个节点被表示为处理元件1401的阵列中的数据流操作器。例如,某些数据流操作可以利用处理元件来实现,和/或某些数据流操作可以利用通信网络(例如,其网络数据流端点电路)来实现。例如,Pick、PickSingleLeg、PickAny、Switch和/或SwitchAny操作可以利用通信网络(例如,其网络数据流端点电路)的一个或多个组件来实现,例如,与处理元件形成对照。
在一个实施例中,处理元件1401的阵列中的处理元件中的一个或多个用于通过存储器接口1402来访问存储器。在一个实施例中,数据流图1400的挑选节点1404因此对应于挑选操作器1404A(例如,由挑选操作器1404A表示),数据流图1400的切换节点1406因此对应于切换操作器1406A(例如,由切换操作器1406A表示),并且数据流图1400的乘法器节点1408因此对应于乘法器操作器1408A(例如,由乘法器操作器1408A表示)。另一处理元件和/或流控制路径网络可将控制信号(例如,控制令牌)提供给挑选操作器1404A和切换操作器1406A以执行图14A中的操作。在一个实施例中,处理元件1401的阵列配置成用于在执行开始之前执行图14B的数据流图1400。在一个实施例中,编译器执行从图14A到图14B的转换。在一个实施例中,进入处理元件的阵列的数据流图节点的输入在逻辑上将数据流图嵌入到处理元件的阵列中(例如,如下文中进一步所讨论),使得输入/输出路径经配置以产生所需的结果。
2.2等待时间不敏感的通道
通信弧(arc)是数据流图的第二主组件。CSA的某些实施例将这些弧描述为等待时间不敏感的通道,例如,有序、回压式(例如,直到有用于存储输出的空间才产生或发送输出)、点对点通信通道。如同数据流操作器那样,等待时间不敏感的通道在根本上是异步的,从而给予了组合许多类型的网络来实现特定图的通道的自由。等待时间不敏感的通道可具有任意长的等待时间,并仍忠实地实现CSA架构。然而,在某些实施例中,在性能和能量方面具有强烈的动机来使等待时间尽可能小。本文中的第3.2公开了网络微架构,其中,以流水线方式、在不多于一个周期等待时间的情况下实现数据流图通道。等待时间不敏感的通道的实施例提供关键的抽象层,该关键的抽象层可与CSA架构一起利用以向应用编程器提供许多运行时服务。例如,CSA可在实现CSA配置(将程序加载到CSA阵列上)时利用等待时间不敏感的通道。
图15图示根据本公开的实施例的数据流图1500的示例执行。在步骤1,输入值(例如,针对图14B中的X的1以及针对图14B中的Y的2)可被加载在数据流图1500中以执行1*2乘法操作。数据输入值中的一个或多个在操作中可以是静态的(例如,恒定的)(例如,参照图14B,X为1及Y为2)或在操作期间被更新。在步骤2,(例如,流控制路径网络上的)处理元件或其他电路将0输出至挑选节点1504的控制输入(例如,mux控制信号)(例如,从端口获得“1”作为源送至其输出),并输出0以控制切换节点1506的输入(例如,mux控制信号)(例如,以便使其输入离开端口“0”向外提供至目的地(例如,下游处理元件))。在步骤3,数据值1从挑选节点1504(并且例如在挑选节点1504处消耗其控制信号“0”)输出到乘法器节点1508,以便在步骤4处与数据值2相乘。在步骤4,乘法器节点1508的输出到达切换节点1506,例如,其使切换节点1506消耗控制信号“0”以在步骤5处从切换节点1506的端口“0”输出值2。随后,该操作完成。因此可相应地对CSA编程,使得每一个节点的对应数据流操作器执行图15中的操作。虽然在该示例中执行被串行化,但是原则上所有数据流操作可并行地执行。在图15中使用步骤以便将数据流执行与任何物理微架构表现形式区分开。在一个实施例中,下游处理元件用于(例如,在流控制路径网络上)将信号(或不将就绪信号)发送至切换装置1506,以使来自切换装置1506的输出停止,直到下游处理元件为输出做好准备(例如,具有存储空间)。
2.3存储器
数据流架构总体上聚焦通信和数据操纵,较不关注状态。然而,启用实际的软件、尤其是以传统序列化语言编写的程序要求非常关注与存储器的对接。CSA的某些实施例将架构存储器操作用作它们对(例如,大型)状态化存储的主接口。从数据流图的视角看,存储器操作类似于其他数据流操作,例外在于,存储器操作具有更新共享存储的副作用。具体地,本文中的某些实施例的存储器操作具有与每一个其他数据流操作器相同的语义,例如,当它们的操作数(例如,地址)可用且在一些等待时间之后响应被产生时,这些存储器操作“执行”。本文中的某些实施例显式地将操作数输入与结果输出解耦,使得存储器操作器本质上是流水线式的并具有产生许多同时的待决请求的潜力,从而例如使存储器操作器非常适应存储器子***的等待时间和带宽特性。CSA的实施例提供基本存储器操作,诸如,加载和存储,该加载取得地址通道,并以对应于该地址的值填充响应通道。CSA的实施例也提供更高级的操作(诸如,存储器内原子和一致性操作器)。这些操作可具有与其对等的冯·诺依曼操作类似的语义。CSA的实施例可对使用序列化语言(诸如,C和Fortran)描述的现有程序进行加速。支持这些语言模型的结果是对程序存储器顺序进行寻址,例如,对典型地由这些语言规定的存储器操作的串行排序。
图16图示根据本公开的实施例的程序源(例如,C代码)1600。根据C编程语言的存储器语义,存储器复制(memcpy)应当被串行化。然而,如果已知阵列A与阵列B不相交,则memcpy可利用CSA的实施例来并行化。图16进一步图示程序顺序的问题。一般而言,编译器不能够证明阵列A与阵列B不同,例如,无论对于相同索引值还是对于跨循环体的不同索引值。这被称为指针或存储器别名(aliasing)。由于编译器用于生成静态地正确的代码,因此它们经常被迫地使存储器访问串行化。典型地,针对序列化的冯·诺依曼架构的编译器将指令排序用作实施程序顺序的自然手段。然而,CSA的实施例没有如程序计数器所定义的指令排序或基于指令的程序排序的概念。在某些实施例中,传入依赖性令牌(例如,其不包含架构可见信息)像所有其他数据流令牌,并且存储器操作直到它们接收到依赖性令牌才可以执行。在某些实施例中,一旦存储器操作的操作对逻辑上后续的依赖性存储器操作可见,这些存储器操作就产生传出依赖性令牌。在某些实施例中,依赖性令牌类似于数据流图中的其他数据流令牌。例如,由于存储器操作在有条件上下文中发生,因此依赖性令牌也可使用在第2.1节中所述的控制操作器来操纵(例如,像任何其他令牌那样)。依赖性令牌可具有使存储器访问串行化的效果,从而例如向编译器提供在架构上定义存储器访问的顺序的手段。
2.4运行时服务
对CSA的实施例的主要的架构方面考虑涉及用户级程序的实际执行,但是提供巩固该执行的若干支持机制也是理想的。这其中的首要因素是配置(其中,数据流图被加载到CSA中)、提取(其中,执行图的状态被移动到存储器)和异常(其中,结构中的数学、软性和其他类型的错误可能由外部实体检测到并处置)。以下第3.6节讨论用于实现这些功能的高效、高度流水线化的实现方式的CSA的实施例的等待时间不敏感的数据流架构的属性。从概念上说,配置可将数据流图的状态(例如,一般从存储器)加载到互连(和/或通信网络(例如,其网络数据流端点电路))和处理元件(例如,结构)中。在该步骤期间,CSA中的所有结构可被加载有新数据流图,并且任何数据流令牌存活于那个图中例如作为上下文切换的结果。CSA的等待时间不敏感语义可准许结构的分布式异步初始化,例如,PE一经配置,它们就可立即开始执行。未经配置的PE可回压它们的通道,直到这些PE被配置,从而例如防止经配置元件与未经配置元件之间的通信。CAS配置可被分区为特权级和用户级状态。此类两级分区可使结构的主配置在不调用操作***的情况下发生。在提取的一个实施例中,数据流图的逻辑示图被捕捉并被提交到存储器中,例如,包括图中的所有实况的控制和数据流令牌和状态。
提取也可在通过创建结构检查点来提供可靠性保证时发挥作用。CSA中的异常一般可由导致处理器中的异常相同的事件导致,这些事件诸如,非法操作器变元或可靠性、可用性和耐用性(RAS)事件。在某些实施例中,在(例如,校验变元值的)数据流操作器的级别上或通过模块化算术方案检测异常。在检测到异常后,数据流操作器(例如,电路)可停止并发射异常消息,该异常消息例如包含操作标识符和已发生的问题的性质的一些细节两者。在一些实施例中,数据流操作器将保持停止,直到它已被重配置。随后,异常消息可被传递至相关联的处理器(例如,核)以用于服务(例如,其可包括提取图供软件分析)。
2.5片级架构
CSA计算机架构(例如,针对HPC和数据中心用途)的实施例是分片的。图17和图19示出CSA的片级部署。图19示出CSA的全片实现方式,例如,其可以是具有核的处理器的加速器。该架构的主要优势可以是降低的设计风险,例如使得CSA与核在制造时被完全解耦。除了允许更好的组件重新使用之外,这还可允许组件(像CSA高速缓存)仅考虑CSA,而不是例如需要并入对核的更严格的等待时间要求。最终,分开的片可允许CSA与小型核或大型核集成。CSA的一个实施例捕捉大多数向量并行的工作负荷,使得大多数向量型工作负荷直接在CSA上运行,但是在某些实施例中,核中的向量型指令可被包括以例如支持传统的二进制。
3.微架构
在一个实施例中,CSA微架构的目的是提供由CAS架构指定的每一个数据流操作器的高质量实现方式。CSA微架构的实施例提供了:微架构的每一个处理元件(和/或通信网络(例如,其网络数据流端点电路))都对应于架构数据流图中的大约一个节点(例如,实体)。在一个实施例中,数据流图中的节点分布在多个网络数据流端点电路中。在某些实施例中,这导致不仅紧凑而且高能效的架构元件,紧凑导致密集的计算阵列,高能效则例如处理元件(PE)既简单又高度地未经复用(例如,针对CSA的配置(例如,编程)执行单个数据流操)。为了进一步减小能量和实现面积,CSA可包括可配置异构结构样式,其中,其每一个PE仅实现数据流操作器的子集(例如,利用以(多个)网络数据流端点电路实现的数据流操作器的分开的子集)。可供应***和支持子***(诸如,CSA高速缓存)以支持主CSA处理结构自身中的分布式并行性现状。CSA微架构的实现方式可实现存在于架构中的数据流和等待时间不敏感的通信抽象。在某些实施例中,在编译器生成的图中的节点与CSA中的数据流操作器(例如,数据流操作器计算元件)之间(例如,实质上)存在一对一对应关系。
以下是对示例CSA的讨论,随后是对微架构的更详细讨论。本文中的某些实施例提供允许容易的编译的CSA,例如,与现有的FPGA编译器形成对照,现有的FPGA编译器处置编程语言(例如,C或C++)的小子集,并且编译小型程序甚至都需要许多小时。
CSA架构的某些实施例准许像双精度浮点这样的异构粗粒度操作。程序能以较不粗糙粒度的操作表达,例如使得所公开的编译器比传统的空间编译器运行得更快。某些实施例包括具有新处理元件的结构来支持像程序排序的存储器访问这样的序列化概念。某些实施例实现用于支持粗粒度数据流型通信通道的硬件。这种通信模型是抽象的,并且非常接近由编译器使用的控制数据流表示。本文中的某些实施例包括支持单周期等待时间通信的网络实现方式,例如,利用支持单控制数据流操作的(例如,小型)PE。在某些实施例中,这不仅改善能效和性能,而且还简化了编译,因为编译器在在高级数据流构造与结构之间进行一对一映射。本文中的某些实施例因此简化了将现有的(例如,C、C++或Fortran)程序编译至CSA(例如,结构)的任务。
能效可以是现代计算机***中的首要考虑。本文中的某些实施例提供高能效空间架构的新模式。在某些实施例中,这些架构形成结构,该结构具有小型、高能效、面向数据流的处理元件(PE)(和/或分组交换型通信网络(例如,其网络数据流端点电路))与轻量电路交换型通信网络(例如,互连)的异构混合的独特组成,例如,该结构具有对流控制的加强的支持。由于每一者的能量优势,这些组件的组合可形成适用于以极其高能效方式来执行编译器生成的并行程序的空间加速器(例如,作为计算机的部分)。由于该结构是异构的,可通过引入新的域特定的PE来为不同的应用域定制某些实施例。例如,用于高性能计算的结构可包括针对双精度、融合乘-加的某种定制,而针对深度神经网络的结构可包括低精度浮点操作。
空间架构模式(例如,如图17中所例示)是由处理元件(PE)间网络连接的轻量型PE的组成。一般而言,PE可包括数据流操作器,例如,其中一旦(例如,所有的)输入操作数到达数据流操作器,某个操作(例如,微指令或微指令的集合)就被执行,并且结果被转发到下游操作器。因此,控制、调度和数据存储可在多个PE之间分布,从而例如去除主导经典处理器的集中式结构的开销。
程序可通过配置PE和网络而被转换为数据流图以表达该程序的控制数据流图,该数据流图被映射到架构上。通信通道可以是流受控且完全回压的,使得例如如果源通信通道没有数据或者目的地通信信道为满,则PE将停止。在一个实施例中,在运行时,数据流过已被配置成用于实现操作(例如,经加速的算法)的PE和通道。例如,数据可从存储器通过结构而流入,并且随后向外回到存储器。
此类架构的实施例相对于传统多核处理器可实现卓越的性能效率:(例如,以PE形式的)计算相比在较大核中可以更简单、能效更高且更丰富,并且与例如像在典型的多核处理器中那样在宽的全芯片网络上进行形成对照,通信可以是直接的且主要是短途的。此外,由于架构的实施例是极度并行的,因此在不严重影响吞吐量的情况下,许多强大的电路和器件级优化是可能的,例如,低泄漏器件和低工作电压。这些较低级别的优化可实现相对于传统核的甚至更大的性能优势。这些实施例的在架构级、电路级和器件级产出的效率的组合是引人注目的。随着晶体管密度继续增加,该架构的实施例可实现更大的有效区域。
本文中的实施例提供数据流支持和电路交换的独特组合以使结构相比先前的架构能够更小,能效更高,并提供更高的聚合性能。FPGA一般朝着细粒度位操纵来调整,而本文中的实施例朝着HPC应用中发现的双精度浮点操作来调整。本文中的某些实施例除根据本公开的CSA之外还可包括FPGA。
本文中的某些实施例将轻量型网络与高能效数据流处理元件(和/或通信网络(例如,其网络数据流端点电路))组合以形成高吞吐量、低等待时间、高能效HPC结构。该低等待时间网络允许以更少的功能(例如,仅一条或两条指令,并也许只有一个架构可见寄存器,因为将多个PE聚集在一起来形成完整的程序是高效的)来实现处理元件(和/或通信网络(例如,其网络数据流端点电路))的建立。
相对于处理器核,本文中的CSA实施例可提供更多计算密度和能效。例如,当PE(例如,相比核)非常小时,CSA可比核执行多得多的操作,并且可具有比核多得多的计算并行性,例如,也许多达作为向量处理单元(VPU)的FMA的数量的16倍。为了利用所有这些计算元件,在某些实施例中,每个操作的能量非常低。
本申请的数据流架构的实施例的能量优势有许多。并行性在数据流图中是显式的,并且CSA架构的实施例不花费能量或花费最小的能量来提取该并行性,例如,不像乱序处理器,该乱序处理器每当指令被执行时就必须重新发现并行性。在一个实施例中,由于每一个PE负责单个操作,因此寄存器组和端口计数可以是小的,例如经常仅为一个,并因此比在核中的它们的对等物使用更少的能量。某些CSA包括许多PE,这些PE中的每一个保存实况程序值,从而给予传统架构中的巨型寄存器组的聚合效应,这显著地减少了存储器访问。在其中存储器是多端口且分布式的实施例中,CSA相比核可维持多得多的待决存储器请求并利用更多带宽。这些优势可组合以实现现对于裸算术电路的成本仅为小百分比的每瓦能量等级。例如,在整数相乘的情况下,CSA可消耗不比底层乘法电路多25%的能量。相对于核的一个实施例,那个CSA结构中的整数操作消耗每个整数操作能量的小于1/30。
从编程的角度来看,CSA架构的实施例的应用特定的顺应性实现相比向量处理单元(VPU)的显著优势。在传统的非灵活性架构中,像浮点除法或各种超越数学函数这样的功能单元的数量必须在设计时基于一些期望的用例来选择。在CSA架构的实施例中,此类函数可(例如,由用户而非制造商)基于每一个应用的要求配置到结构中。应用吞吐量可由此进一步增加。同时,通过避免固化此类函数并转而供应像浮点乘法那样的基元函数的更多实例,CSA的实施例的计算密度得以改善。这些优势在HPC工作负荷中可以是显著的,HPC工作负荷中的一些在超越函数中花费浮点执行时间的75%。
CSA的某些实施例将显著的进展表示为面向数据流的空间架构,例如,本公开的PE可以更小,但也能效也更高。这些改善可直接源于面向数据流的PE与轻量、电路交换型互连的组合,轻量、电路交换型互连例如具有单周期等待时间,这例如与(例如具有高至少300%的等待时间的)分组交换型网络形成对照。PE的某些实施例支持32位或64位操作。本文中的某些实施例准许引入新的应用特定的PE,例如,用于机器学习或安全,并且不仅是同构组合。本文中的某些实施例将轻量、面向数据流的处理元件与轻量、低等待时间网络组合以形成高能效计算结构。
为使某些空间架构能够成功,编程者将花相对而言很少的功夫来配置它们,例如,同时获得相对于序列化核的显著的功率和性能优越性。本文中的某些实施例提供易于(例如,由编译器)编程、高功率效率且高度并行的CSA(例如,空间结构)。本文中的某些实施例提供实现这三个目标的(例如,互连)网络。从可编程性的角度看,网络的某些实施例提供流受控的通道,该流受控的通道例如对应于编译器中使用的执行的控制数据流图(CDFG)模型。某些网络实施例利用专用电路交换型链路,使得程序性能更易于由人和编译器两者推导出,因为性能是可预测的。某些网络实施例提供高带宽和低等待时间两者。某些网络实施例(例如,静态的、电路交换)提供0至1周期的等待时间(例如,取决于传输距离)。某些网络实施例通过并行地(并例如在低级金属中)布置若干网络来提供高带宽。某些网络实施例在低级金属中且通过短距离来通信,因此功率效率非常高。
网络的某些实施例包括用于流控制的架构支持。例如,在由小型处理元件(PE)组成的空间加速器中,通信等待时间和带宽对于总体程序性能可以是关键的。本文中的某些实施例提供轻量、电路交换型网络以及支持该网络所需的微架构控制特征,该轻量、电路交换型网络促进空间处理阵列(诸如,图17中所示的空间阵列)中的PE之间的通信。网络的某些实施例实现点对点、流受控通信通道的构造,该点对点、流受控通信通道支持面向数据流的处理元件(PE)的通信。除了点对点通信之外,本文中的某些网络还支持多播通信。通信通道可通过静态配置网络以形成PE之间的虚拟电路来形成。本文中的电路交换技术可减小通信等待时间并相应地使网络缓冲最小化,从而例如产生高性能和高能效两者。在网络的某些实施例中,PE间等待时间可低至零个周期,这意味着下游PE可在数据被产生后在该周期内操作该数据。为了获得甚至更高的带宽,并且为了准许更多程序,多个网络可并行地布置,例如,如图17中所示。
空间架构(诸如,图17中所示的空间架构)可以是由PE间网络(和/或通信网络(例如,其网络数据流端点电路))连接的轻量型处理元件的组成。被视为数据流图的程序可通过配置PE和网络而被映射到架构上。一般而言,PE可被配置为数据流操作器,并且一旦(例如,所有的)输入操作数到达PE,随后一些操作就可发生,并且结果被转发到所需的下游PE。PE可通过专用虚拟电路进行通信,该专用虚拟电路通过静态地配置电路交换型通信网络而形成。这些虚拟电路可以是流受控且完全被回压(back pressure)的,使得例如如果源没有数据或目的地为满,则PE将停止。在运行时,数据可流经实现经映射算法的PE。例如,数据可从存储器通过结构而流入,随后向外回到存储器。该架构的实施例相对于传统多核处理器可实现卓越的性能效率:例如,其中,与扩展存储器***相反,以PE形式的计算比较大的核更简单且更多,并且通信是直接的。
图17图示根据本公开的实施例的加速器片1700,该加速器片1700包括处理元件(PE)的阵列。互连网络被描绘为电路交换型、静态配置的通信通道。例如,通道的集合通过切换装置(例如,第一网络中的切换装置1710和第二网络中的切换装置1720)被耦合在一起。第一网络和第二网络可以是分开的或可以耦合在一起。例如,切换装置1710可将四个数据路径1712、1714、1716、1718中的一个或多个耦合在一起,例如,经配置以执行根据数据流图的操作。在一个实施例中,数据路径的数量是任意多个。处理元件(例如,处理元件4604)可如本文中所公开,例如,如图20中那样。加速器片1700包括存储器/高速缓存层次结构接口11802,以便例如将加速器片1700与储存器和/或高速缓存对接。数据路径(例如,1718)可延伸至另一片或可终止于例如片的边缘处。处理元件可包括输入缓冲器(例如,缓冲器1706)和输出缓冲器(例如,缓冲器1708)。
操作可基于这些操作的输入的可用性以及PE的状态来执行。PE可从输入通道获取操作数,并且可将结果写至输出通道,但是也可使用内部寄存器状态。本文中的某些实施例包括可配置数据流友好型PE。图20示出一个此类PE的详细框图:整数PE。该PE由若干I/O缓冲器、ALU、存储寄存器、一些指令寄存器和调度器组成。在每一个周期,调度器可基于输入和输出缓冲器的可用性以及PE的状态来选择供执行的指令。随后,操作的结果被写至输出寄存器,或被写至(例如,PE本地的)寄存器。被写至输出缓冲器的数据可被传输到下游PE用于进一步处理。这种PE样式可以是极其高能效的,例如,与从复杂的多端口寄存器组读取数据不同,PE从寄存器读取该数据。类似地,指令可被直接存储在寄存器中,而不是被存储在虚拟化的指令高速缓存中。
指令寄存器可在特殊的配置步骤期间被设置。在该步骤期间,除PE间网络之外,辅助的控制线和状态也可用于跨包含结构的若干PE使配置流入。作为并行性的结果,此类网络的某些实施例可提供快速的重配置,例如,片尺寸的结构可在小于约10微秒内被配置。
图20表示处理元件的一个示例配置,例如,其中所有架构元件尺寸设定为最小。在其他实施例中,处理元件的多个组件中的每一个组件被独立地缩放以产生新PE。例如,为了处置更多复杂程序,可引入可由PE执行的更多数量的指令。可配置性的第二个维度是PE算术逻辑单元(ALU)的功能。在图20中,整数PE被描绘为其可支持加法、减法和各种逻辑操作。通过将不同种类的功能单元替换到PE中,可以创建其他种类的PE。例如,整数乘法PE可不具有寄存器、具有单条指令,并具有单个输出缓冲器。PE的某些实施例将融合乘加(FMA)解构为分开但紧密耦合的浮点乘法和浮点加法单元以改善对乘-加重型工作负荷的支持。在下文中进一步讨论PE。
图18A图示根据本公开的实施例的(例如,参照图17所讨论的网络一或网络二中的)可配置数据路径网络1800。网络1800包括多个多路复用器(例如,多路复用器1802、1804、1806),这些多路复用器可(例如,经由它们相应的控制信号)经配置以将(例如,来自PE的)一个或多个数据路径连接在一起。图18B图示根据本公开的实施例的(例如,参照图17所讨论的网络一或网络二中的)可配置流控制路径网络1801。网络可以是轻量PE至PE网络。网络的某些实施例可视为用于构建分布式点对点数据通道的组成基元的集合。图18A示出使两个通道(粗体黑线和点状黑线)被启用的网络。粗体黑线通道是多播的,例如,单个输入被发送到两个输出。注意,即便专用的电路交换型路径形成在通道端点之间,通道也可在单个网络内的一些点处交叉。此外,该交叉不会引入两个通道之间的结构危害,使得每一个独立地且以全带宽操作。
实现分布式数据通道可包括图18A-图18B中所示的两个路径。前向或数据路径将数据从生产方携带到消耗方。多路复用器可配置成引导数据和有效位从生产方到消耗方,例如,如图18A中所示。在多播的情况下,数据将被引导到多个消耗方端点。网络的该实施例的第二部分是流控制或回压路径,其与前向数据路径相反地流动,例如,如图18B中所示。消耗方端点可断言它们何时准备好接受新数据。随后,可使用可配置的逻辑结(在图18B中标记为(例如,回流)流控制功能)将这些信号往回引导到生产方。在一个实施例中,每一个流控制功能电路可以是多个切换装置(例如,多个mux),例如,与图18A类似。流控制路径可处置控制数据从消耗方返回到生产方。结可启用多播,例如,其中在生产方假定数据已被接收之前,每一个消耗方准备好接收数据。在一个实施例中,PE是具有作为其架构接口的数据流操作器的PE。附加地或替代地,在一个实施例中,PE可以是(例如,结构中的)任何种类的PE,例如但不限于具有指令指针、经触发指令或基于状态机的架构接口的PE。
除了例如PE被静态地配置之外,网络也可被静态地配置。在该配置步骤期间,配置位可在每一个网络组件处被设置。这些位控制例如mux选择和流控制功能。网络可包括多个网络,例如,数据路径网络和流控制路径网络。网络或多个网络可利用不同宽度(例如,第一宽度以及更窄或更宽的宽度)的路径。在一个实施例中,数据路径网络具有比流控制路径网络的宽度更宽的(例如,位传输)宽度。在一个实施例中,第一网络和第二网络中的每一个都包括它们自身的数据路径网络和流控制路径网络,例如,数据路径网络A和流控制路径网络A以及更宽的数据路径网络B和流控制路径网络B。
网络的某些实施例是无缓冲的,并且数据用于在单个周期中在生产方与消费方之间移动。网络的某些实施例也是无边界的,即,网络跨越整个结构。在一个实施例中,一个PE用于在单个周期中与任何其他PE通信。在一个实施例中,为了改善路由带宽,可在PE的行之间并行地布置若干网络。
相对于FPGA,本文中的网络的某些实施例具有三个优势:面积、频率和程序表达。本文中的网络的某些实施例以粗粒度操作,其例如减少配置位的数量并由此减小网络的面积。网络的某些实施例还通过在电路(例如,硅)中直接实现流控制逻辑来获得面积减小。强化的网络实现方式的某些实施例也享有相对于FPGA的频率优势。由于面积和频率优势,当在吞吐量奇偶校验处使用较低电压的情况下,功率优势可存在。最后,网络的某些实施例提供比FPGA线更好的高级语义,尤其是相对于可变时序方面,因此,那些实施例更容易由编译器针对。本文中的网络的某些实施例可视为用于构建分布式点对点数据通道的组成基元的集合。
在某些实施例中,多播源可能无法断言其数据有效,除非该多播源从每一个接收器(sink)接收到就绪信号。因此,在多播情况下,可利用额外的结和控制位。
像某些PE那样,网络可被静态地配置。在该步骤期间,配置位在每一个网络组件处被设置。这些位控制例如mux选择和流控制功能。本申请的网络的前向路径要求一些位以使该前向路径的mux摇摆。在图18A中示出的示例中,要求每一跳(hop)四个位:东mux和西mux中的每一个利用一个位,而向南的mux利用两个位。在该实施例中,四个位可用于数据路径,但是7个位可用于(例如,流控制路径网络中的)流控制功能。如果例如CSA进一步利用北-南方向,则其他实施例可利用更多位。流控制功能可将控制位用于流控制可从其来的每一个方向。这可实现静态地设置流控制功能的灵敏度。以下表1总结了用于图18B中的网络的流控制功能的布尔代数实现方式,配置位被大写。在该示例中,利用七个位。
表1:流实现方式
对于从图18B中的左边起的第三个流控制框,EAST_WEST_SENSITIVE和NORTH_SOUTH_SENSITIVE被描绘为经设置以分别实现对粗体线通道和点状线通道的流控制。
图19图示根据本公开的实施例的包括加速器1902的硬件处理器片1900。加速器1902可以是根据本公开的CSA。片1900包括多个高速缓存区块(例如,高速缓存区块1908)。请求地址文件(RAF)电路1910可被包括,例如,如在以下第3.2节中所讨论。ODI可以指管芯上互连,例如,跨整个管芯伸展、连接所有片的互连。OTI可以指(例如,跨片伸展,例如,将片上的高速缓存区块连接在一起的)片上互连。
3.1处理元件
在某些实施例中,CSA包括异构PE的阵列,其中,结构由若干类型的PE组成,这些PE中的每一个仅实现数据流操作器的子集。作为示例,图20示出能够实现宽泛的整数和控制操作集的PE的暂定的实现方式。其他PE(包括支持浮点加法、浮点乘法、缓冲和某些控制操作的那些PE)也可具有类似的实现样式,例如,用适当的(数据流操作器)电路替代ALU。在执行开始之前,CSA的PE(例如,数据流操作器)可经配置(例如,编程)以实现来自PE支持的集合中的特定的数据流操作。配置可包括一个或两个控制字,这一个或两个控制字指定控制ALU的操作码、引导PE内的各种多路复用器,并驱使数据流进入PE通道以及离开PE通道。数据流操作器可通过对这些配置位进行微编码来实现。图20中的所描绘的整数PE 2000被组织成从顶部流动到底部的单级逻辑流水线。数据从本地网络集合中的一个本地网络进入PE2000,在PE 2000中,该数据被寄存在输入缓冲器中用于后续操作。每一个PE可支持多个宽的面向数据的通道以及窄的面向控制的通道。所供应的通道的数量可基于PE的功能而有所变化,但是面向整数的PE的一个实施例具有2个宽的以及1-2个窄的输入和输出通道。虽然整数PE被实现为单周期流水线,但是可利用其他流水线式选择。例如,乘法PE可具有多个流水线级。
PE执行可按数据流样式继续进行。基于配置微代码,调度器可检查PE入口和出口缓冲器的状态,并且当用于经配置操作的所有输入都已到达且操作的出口缓冲器可用时,安排由(例如,ALU上的)数据操作器对操作的实际执行。所得到的值可被放置在经配置的出口缓冲器中。当缓冲变得可用时,一个PE的出口缓冲器与另一PE的入口缓冲器之间的传送可异步地发生。在某些实施例中,提供PE使得对于每个周期至少一个数据流操作完成。第2节讨论了涵盖基元操作(诸如,加(add)、异或(xor)或挑选)的数据流操作器。某些实施例可提供在能量、面积、性能和等待时间方面的优势。在一个实施例中,凭借对PE控制路径的扩展,可启用更多融合组合。在一个实施例中,处理元件的宽度为64位,例如用于对HPC中的双精度浮点计算的高度利用,并用于支持64位存储器寻址。
3.2通信网络
CSA微架构的实施例提供多个网络的层次结构,该多个网络一起提供跨多个通信比例的等待时间不敏感的通道的架构抽象的实现方式。CSA通信层次结构的最低级可以是本地网络。本地网络可以是静态地进行电路交换的,例如,使用配置寄存器来使本地网络数据路径中的(多个)多路复用器摇摆,以便在通信PE之间形成固定的电路径。在一个实施例中,对于每个数据流图(例如,在PE配置的同时),对本地网络的配置设置一次。在一个实施例中,静态的电路交换针对能量进行优化,例如,其中CSA通信流量中的绝大多数(也许是大于95%)将跨越本地网络。程序可包括在多个表达式中使用的术语。为了对这种情况进行优化,本文中的实施例提供对本地网络内的多播的硬件支持。若干本地网络可被聚集在一起以形成路由通道,这些路由通道例如在PE的行和列之间散布(为网格)。作为优化,若干本地网络可被包括以携带控制令牌。相比FPGA互连,CSA本地网络能以数据路径的粒度被路由,并且另一区别可以是CSA对控制的处理。CSA本地网络的一个实施例是显式地流受控的(例如,回压)。例如,对于每一个前向数据路径和多路复用器集合,CSA用于提供在物理上与前向数据路径配对的后向流动流控制路径。两个微架构路径的组合可提供等待时间不敏感的通道抽象的低等待时间、低能量、小面积、点对点实现方式。在一个实施例中,CSA的流控制线对于用户程序不是可见的,但是这些流控制线可由维护用户程序的架构操纵。例如,第2.2节中描述的异常处置机制可通过以下方式来实现:在检测到异常条件后,将流控制线拉到“不存在”状态。该动作不仅可温和地停止冒犯性计算中所涉及的流水线的那些部分,而且还可保持机器状态先于异常,以便例如进行诊断分析。第二网络层(例如,夹层网络)可以是共享的分组交换型网络。夹层网络可包括多个分布式网络控制器、网络数据流端点电路。夹层网络(例如,由图33中的虚线框示意性地指示的网络)能以例如等待时间、带宽和能量为代价来提供更一般的长距离通信。在一些程序中,多数通信可在本地网路上发生,因此相比而言,夹层网络供应将显著地减少,例如,每一个PE可连接至多个本地网络,但是CSA针对PE的每一个逻辑邻域将仅供应一个夹层端点。由于夹层实际上是共享网络,因此每一个夹层网络可携带多个逻辑上独立的通道,并例如以多个虚拟通道来供应。在一个实施例中,夹层网络的主要功能是用于提供PE间以及PE与存储器间的宽范围通信。除了该能力之外,夹层还可包括例如用于某些数据流操作的(多个)网络数据流端点电路。除了该能力之外,夹层还可操作为运行时支持网络,例如,通过该运行时支持网络,各种服务能以用户-程序透明的方式来访问完整的结构。在该能力方面,夹层端点可在例如CSA配置期间充当用于其本地邻域的控制器。为了形成跨越CSA片的通道,可利用三个子通道和两个本地网络通道(其携带至夹层网络中的单个通道以及来自夹层网络中的单个通道的流量)。在一个实施例中,利用一个夹层通道,例如,一个夹层和两个本地=总共3个网络跳。
通道跨网络层的可组成性能以片间、管芯间以及结构粒度被扩展到更高级别的网络层。
图20图示根据本公开的实施例的处理元件2000。在一个实施例中,操作配置寄存器2019在配置(例如,映射)期间被加载,并且指定该处理(例如,计算元件)将执行的特定操作(或多个操作)。寄存器2020的活动可由那个操作控制(mux 2016的输出,例如,由调度器2014控制)。例如,当输入数据和控制输入到达时,调度器2014可调度处理元件2000的一个或多个操作。控制输入缓冲器2022连接至本地网络2002(例如,并且本地网络2002可包括如图18A中的数据路径网络和如图18B中的流控制路径网络),并且当值到达(例如,网络具有(多个)数据位和(多个)有效位)时,以该值加载该控制输入缓冲器2022。控制输出缓冲器2032、数据输出缓冲器2034和/或数据输出缓冲器2036可接收处理元件2000的输出(例如,如由操作(mux 2016的输出)控制)。每当ALU 2018执行(也由mux 2016的输出控制)时,状态寄存器2038可被加载。控制输入缓冲器2022和控制输出缓冲器2032中的数据可以是单个位。mux 2021(例如,操作数A)和mux 2023(例如,操作数B)可作为输入的源。
例如,假设该处理(例如,计算)元件的操作是(或包括)在图14B中被称为调用挑选的操作。则处理元件2000用于从数据输入缓冲器2024或数据输入缓冲器2026选择数据,以便例如去往数据输出缓冲器2034(例如,默认情况)或数据输出缓冲器2036。因此,如果从数据输入缓冲器2024选择,则2022中的控制位可以指示0,或者如果从数据输入缓冲器2026选择,则2022中的控制位可指示1。
例如,假设该处理(例如,计算)元件的操作是(或包括)在图14B中被称为调用切换的操作。处理元件2000用于例如从数据输入缓冲器2024(例如,默认情况)或数据输入缓冲器2026将数据输出到数据输出缓冲器2034或数据输出缓冲器2036。因此,如果输出到数据输出缓冲器2034,则2022中的控制位可以指示0,或者如果输出到数据输出缓冲器2036,则2022中的控制位可指示1。
多个网络(例如,互连)(例如,(输入)网络2002、2004、2006以及(输出)网络2008、2010、2012)可连接至处理元件。连接可以是例如参照图18A和图18B所讨论的切换装置。在一个实施例中,每一个网络包括两个子网络(或网络上的两个通道),例如,一个用于图18A中的数据路径网络,一个用于图18B中的流控制(例如,回压)路径网络。作为一个示例,本地网络2002(例如,建立为控制互连)被描绘为被切换(例如,连接)到控制输入缓冲器2022。在该实施例中,数据路径(例如,图18A中的网络)可携带控制输入值(例如,一个或多个位)(例如,控制令牌),并且流控制路径(例如,网络)可携带来自控制输入缓冲器2022的回压信号(例如,回压或无回压令牌),以便例如向上游生产方(例如,PE)指示直到回压信号指示在控制输入缓冲器2022中具有用于(例如,来自上游生产方的控制输出缓冲器的)新控制输入值的空间,该新控制输入值才将被加载到(例如,发送到)控制输入缓冲器2022。在一个实施例中,直到同时满足(i)上游生产方从“控制输入”缓冲器2022接收到“空间可用”回压信号;以及(ii)新控制输入值从上游生产方被发送,该新控制输入值才可进入控制输入缓冲器2022,例如,并且这可使处理元件2000停止,直到那种情况发生(并且(多个)目标、输出缓冲器中的空间可用)。
数据输入缓冲器2024和数据输入缓冲器2026能以类似方式执行,例如,本地网络2004(例如,被建立为数据(与控制相对照)互连)被描绘为被切换(例如,连接)到数据输入缓冲器2024。在该实施例中,数据路径(例如,图18A中的网络)可携带数据输入值(例如,一个或多个位)(例如,数据流令牌),并且流控制路径(例如,网络)可携带来自数据输入缓冲器2024的回压信号(例如,回压或无回压令牌),以便例如向上游生产方(例如,PE)指示直到回压信号指示在数据输入缓冲器2024中具有用于(例如,来自上游生产方的数据输出缓冲器的)新数据输入值的空间,该新数据输入值才将被加载到(例如,发送到)数据输入缓冲器2024。在一个实施例中,直到同时满足(i)上游生产方从“数据输入”缓冲器2024接收到“空间可用”回压信号;以及(ii)新数据输入值从上游生产方被发送,该新数据输入值才可进入数据输入缓冲器2024,例如,并且这可使处理元件2000停止,直到那种情况发生(并且(多个)目标、输出缓冲器中的空间可用)。控制输出值和/或数据输出可在它们相应的输出缓冲器(例如,2032、2034、2036)中被停止,直到回压信号指示在输入缓冲器中具有用于(多个)下游处理元件的可用空间。
处理元件2000可停止执行,直到其操作数(例如,控制输入值以及该控制输入值的一个或多个对应的数据输入值)被接收和/或直到处理元件2000的(多个)输出缓冲器中具有用于将通过执行对那些操作数的操作而产生的数据的空间。
3.3存储器接口
请求地址文件(RAF)电路(在图21中示出其简化版本)可负责执行存储器操作,并充当CSA结构与存储器层次结构之间的中介。由此,RAF的主要微架构任务可以是用于以CSA结构的有序语义使乱序存储器子***合理化。在该能力方面,RAF电路可供应有完成缓冲器(例如,队列状结构),这些完成缓冲器对存储器响应重排序,并按请求顺序将这些存储器请求返回至结构。RAF电路的第二主要功能可以是用于以地址转换和页行走器(walker)的形式提供支持。传入虚拟地址可使用通道关联的转换后备缓冲器(TLB)被转换为物理地址。为了提供充足的存储器带宽,每一个CSA片可包括多个RAF电路。像结构的各种PE那样,RAF电路可通过以下方式以数据流样式操作:在选择要执行的存储器操作之前,检查输入变元和输出缓冲(如果需要)的可用性。然而,与一些PE不同,RAF电路在若干共同定位的存储器操作之间被复用。经复用的RAF电路可用于使其各个子组件的面积开销最小化,从而例如共享加速器高速缓存接口(ACI)端口(在第3.4节中更详细地描述)、共享虚拟存储器(SVM)支持硬件、夹层网络接口和其他硬件管理设施。然而,具有也促进该选择的一些程序特性。在一个实施例中,(例如,有效的)数据流图用于轮循共享虚拟存储器***中的存储器。存储器等待时间受约束程序(像图遍历)可利用许多分开的存储器操作,以便由于依赖于存储器的控制流而使存储器带宽饱和。虽然每一个RAF都可被复用,但是CAS可包括片粒度的多个(例如,在8个与32个之间)RAF以确保足够的高速缓存带宽。RAF可经由本地网络和夹层网络两者来与结构的其余部分通信。在RAF被复用的情况下,每一个RAF可与若干端口一起被供应到本地网络中。这些端口可充当至存储器的最低等待时间、高度确定性路径,供由等待时间敏感的或高带宽存储器操作使用。此外,RAF可被供应有夹层网络端点,例如,该夹层网络端点将存储器访问提供给运行时服务以及远端用户级存储器访问方。
图21图示根据本公开的实施例的请求地址文件(RAF)电路2100。在一个实施例中,在配置时,已经在数据流图中的存储器加载和存储操作在寄存器2110中被指定。随后,至数据流图中的那些存储器操作的弧可连接至输入队列2122、2124和2126。来自那些存储器操作的弧因此用于离开完成缓冲器2128、2130或2132。依赖性令牌(其可以是多个单个的位)到达队列2118和2120。依赖性令牌将从队列2116离开。依赖性令牌计数器2114可以是队列的紧凑表示,并且可跟踪用于任何给定输入队列的依赖性令牌的数量。如果依赖性令牌计数器2114饱和,则没有附加的依赖性令牌可被生成用于新的存储器操作。相应地,存储器排序电路(例如,图22中的RAF)会停止调度新存储器操作,直到依赖性令牌计数器2114变成不饱和。
作为加载的示例,地址到达队列2122,调度器2112将队列2122与2110中的加载匹配。用于该加载的完成缓冲器槽按地址到达的顺序被指派。假定图中的该特定加载没有指定的依赖性,则由调度器(例如,经由存储器命令2142)将该地址和完成缓冲器槽派遣到存储器***。当结果返回到mux 2140时(示意性地示出),该结果被存储到它指定的完成缓冲器槽中(例如,由于该结果沿着通过存储器***全程都携带着目标槽)。完成缓冲器按地址到达的顺序将结果往回发送到本地网络(例如,本地网络2102、2104、2106或2108)中。
存储可以更简单,例外在于,当任何操作被派遣到存储器***之前,地址和数据两者必须到达。
3.4高速缓存
数据流图可能能够并行地生成大量(例如,字粒度)请求。因此,CSA的某些实施例将足够的带宽提供给高速缓存子***以维护CSA。可利用高度区块化的高速缓存微架构(例如,如图22中所示)。图22图示根据本公开的实施例的电路2200,该电路2200具有耦合在多个加速器片2208、2210、2212、2214与多个高速缓存区块(例如,高速缓存区块2202)之间的多个请求地址文件(RAF)电路(例如,RAF电路1)。在一个实施例中,RAF和高速缓存区块的数量可以按1:1或1:2的比率。高速缓存区块可包括完整的高速缓存行(例如,与按字切分形成对照),并且每一行具有在该高数缓存中的确切的一个归属地(home)。高速缓存行可经由伪随机函数被映射至高速缓存区块。CSA可采用SVM模型以与其他分片架构集成。某些实施例包括将RAF连接到高速缓存区块的加速器高速缓存接口(互连)(ACI)网络。该网络可在RAF与高速缓存之间携带地址和数据。ACI的拓扑可以是级联的交叉开关,例如,作为等待时间与实现复杂度之间的折中。
3.5浮点支持
某些HPC应用由它们对于显著的浮点带宽的需求来表征。为了满足该需求,例如取决于片配置,CSA的实施例可被供应有多个(例如,每个可被供应有128个与256个之间的)浮点加法和乘法PE。CSA可提供一些其他扩展精度模式,以便例如简化数学库实现方式。CSA浮点PE可支持单精度和双精度两者,但是较低精度的PE可支持机器学习工作负荷。CSA可提供比处理核高一数量级的浮点性能。在一个实施例中,除了增加浮点带宽之外,为了驱动所有浮点单元,浮点操作中消耗的能量减少。例如,为了减少能量,CSA可选择性地对浮点乘法器阵列的低阶位门控。在检查浮点算术的行为时,乘法阵列的低阶位可能不会经常影响最终经舍入的积。图23图示根据本公开的实施例的分区为三个区域(结果区域、三个潜在的进位区域2302、2304、2306和门控区域)的浮点乘法器2300。在某些实施例中,进位区域可能影响结果区域,而门控区域不太可能影响结果区域。考虑g位的门控区域,最大进位可以是:
给定该最大进位,如果进位区域的结果小于2c-g(其中,进位区域为c位宽),则门控区域可被忽略,因为该门控区域不影响结果区域。增加g意味着更有可能将需要门控区域,而增加c意味着在随机假定下,该门控区域将不被使用,并且可被禁用以避免能耗。在CSA浮点乘法PE的实施例中,利用两级流水线式方式,其中,首先确定进位区域,随后,如果发现门控区域影响结果,则确定该门控区域。如果知晓关于乘法的上下文的更多信息,则CSA更激进地调整门控区域的尺寸。在FMA中,乘法结果可被加到累加器,该累加器经常比被乘数中的任一者大得多。在这种情况下,可在乘法前提前观察加数指数,并且CSDA可相应地调整门控区域。CSA的一个实施例包括一方案,其中,上下文值(其约束计算的最小结果)被提供给相关的乘法器以选择最低能量门控配置。
3.6运行时服务
在某些实施例中,CSA包括异构的分布式结构,因此,运行时服务实现方式用于以并行的分布式方式适应若干种类的PE。虽然CSA中的运行时服务可能是关键的,但是它们相对于用户级计算可能是较不频繁的。因此,某些实施例聚焦于将服务覆盖在硬件资源上。为了满足这些目的,CSA运行时服务可构造为层次结构,例如,每一层对应于CSA网络。在片级,单个面向外部的控制器可接受服务命令,或者可将服务命令发送到与CSA片相关联的核。片级控制器可服务以(例如,使用ACI网络)协调RAF处的区域控制器。区域控制器可转而协调某些夹层网络站(例如,网络数据流端点电路)处的本地控制器。在最低级,服务特定的微协议可(例如,在通过夹层控制器控制的特殊模式期间)在本地网络上执行。微协议可准许每一个PE(例如,通过类型划分的PE类)根据其自身的需求来与运行时服务交互。因此,并行性在该层次结构组织中是隐式的,并且在最低级处的操作可同时发生。例如取决于CSA片的配置尺寸以及CSA片在存储器层次结构中的位置,该并行性可实现在几百纳秒到几微秒之间的对CSA片的配置。因此,CSA的实施例利用数据流图的属性来改善每一个运行时服务的实现方式。一项关键的观察是运行时服务可能仅需要维持数据流图的合法逻辑视图(例如,可通过对数据流操作器执行的某种排序而产生的状态)。服务一般可不需要保证数据流图的时态视图(例如,在给定时刻数据流图在CSA中的状态)。例如,假设服务被安排以维持数据流图的逻辑示图,则这可准许CSA以分布式、流水线式的并行方式进行大多数运行时服务。本地配置微协议可以是覆盖在本地网络上的基于分组的协议。配置目标可被组织为配置链,例如,该配置链在微架构中固定。结构(例如,PE)目标可以一次被配置一个,例如,对于每一个目标使用单个额外寄存器来实现分布式协调。为了开始配置,控制器可驱动带外信号,该带外信号将其邻域内的所有结构目标置入未经配置的、暂停状态,并且将本地网络中的多路复用器摇摆到预定义的构造。当结构(例如,PE)目标被配置(即,它们完全接收到它们的配置分组)时,它们可设置它们的配置微协议寄存器,从而向下一目标(例如,PE)通知该下一目标可使用后续分组来继续进行配置。对于配置分组的尺寸没有限制,并且分组可具有动态可变的长度。例如,配置恒定操作数的PE可具有长度设定为包括恒定字段(例如,图14B-图14C中的X和Y)的配置分组。图24图示根据本公开的实施例的具有多个处理元件(例如,PE 2402、2404、2406、2408)的加速器2400的运行中配置。一旦经配置,PE就可受制于数据流约束来执行。然而,涉及未经配置的PE的通道可由微架构禁用,从而例如防止任何未定义的操作发生。这些属性允许CSA的实施例以分布式方式初始化和执行,而一点也没有集中式控制。来自未经配置的状态,配置可完全并行地发生(例如,也许在短至200纳秒内)。然而,由于对CSA的实施例的分布式初始化,PE可能变得活跃,以便例如当整个结构被配置好之前很久就将请求发送到存储器。提取能以与配置几乎相同的方式继续进行。本地网络可被遵守,以便一次从一个目标提取数据,并且提取用于实现分布式协调的状态位。CSA可将提取安排为是非破坏性的,即,在提取的完成时,每一个可提取目标已返回到其起始状态。在该实现方式中,目标中的所有状态可被传播至以类扫描方式连至本地网络的出口寄存器。然而可通过引入寄存器传送级(RTL)的新路径或使用现有的线以便以更低开销来提供相同功能来实现原位(in-place)提取。类似的配置、层次结构提取并行地实现。
图25图示根据本公开的实施例的飞行中流水线式提取的快照2500。在提取的一些用例(诸如,检查点操作)中,只要结构吞吐量可被维持,等待时间就可以不是关注的问题。在这些情况下,提取能以流水线方式来安排。图25中示出的这种布置准许结构中的大多数继续执行,而窄区域被禁用于提取。配置和提取可被协调和组成以实现流水线式上下文切换。定性地讲,异常可与配置和提取不同,体现在与发生在指定时间不同,异常在运行时期间的任何时刻在结构中的任何地方发生。因此,在一个实施例中,异常微协议可能无法覆盖在本地网络上,并利用其自身的网络,该本地网络在运行时由用户程序占据。然而,从本质上说,异常是稀少的,并且对等待时间和带宽不敏感。因此,CSA的某些实施例利用分组交换型网络将异常携带至本地夹层站,例如,在该本地夹层站处,这些异常被继续沿服务层次结构向上被转发(例如,如图40中所示)。本地异常网络中的分组可以是极小的。在许多情况下,仅2至8位的PE标识(ID)作为完整的分组就足够了,例如因为当分组遍历异常服务层次结构时,CSA可创建唯一的异常标识符。此类方案可以是所期望的,因为它减少了在每一个PE处产生异常的面积开销。
4.编译
将以高级语言编写的程序编译到CSA上对于产业应用可能是必要的。这一节给出用于CSA的实施例的编译策略的高级概览。首先是CSA软件框架的提议,该CSA软件框架说明理想的生产质量工具链的期望属性。其次,讨论了原型编译器框架。接着讨论“控制-数据流转换”,其例如用于将普通的序列化控制流代码转换为CSA数据流汇编代码。
4.1示例生产框架。
图26图示根据本公开的实施例的用于加速器的编译工具链2600。该工具链将高级语言(诸如,C、C++和Fortran)编译为用于将被加速的特定区域的主代码(LLVM)中介表示(IR)的组合。该编译工具链的CSA特定的部分将LLVM IR作为其输入,将该IR优化并编译为CSA汇编,从而例如在等待时间不敏感的通道上增加适当的缓冲以用于性能。随后,它将CSA汇编放置并路由在硬件结构上,并配置PE和网络以用于执行。在一个实施例中,工具链支持CSA特定的编译作为及时(JIT)编译,从而并入来自实际执行的潜在运行时反馈。框架的关键设计特性之一是编译(LLVM)IR以获得CSA,而不是将较高级语言用作输入。虽然以专门为CSA设计的高级编程语言编写的程序可实现最高性能和/或能效,但是采用新的高级语言或编程框架可能由于转换现有代码基础的困难在实践中是慢的且受限的。将(LLVM)IR用作输入使广泛范围的现有程序能够潜在地在CSA上执行,从而例如不需要创建新语言,也不需要显著地修改想要在CSA上运行的新语言的前端。
4.2原型编译器
图27图示根据本公开的实施例的用于加速器的编译器2700。编译器2700最初聚焦于通过(例如,Clang)前端对C或C++的提前编译。为了编译(LLVM)IR,编译器利用三个主要的级在LLVM内实现CSA后端目标。首先,CSA后端将LLVM IR降低为用于序列化单元的目标特定的机器指令,该序列化单元实现大多数CSA操作以及传统的类RISC控制流架构(例如,利用分支和程序计数器)。工具链中的序列化单元可充当对编译器和应用开发器两者有用的辅助,因为该序列化单元允许从控制流(CF)到数据流(DF)的递增式变换,例如,将某时刻的一个代码段从控制流转换到数据流,并且验证程序正确性。序列化单元也可提供用于处置在空间阵列中不适配的代码的模型。随后,编译器将这些控制流指令转换为用于CSA的数据流操作器(例如,代码)。这一阶段稍后在第4.3节中描述。随后,CSA后端可对数据流指令运行其自身的优化轮次。最后,编译器可转储(dump)CSA汇编格式的指令。该汇编格式被取为对后级工具的输入,该后级工具将数据流指令放置并路由在实际的CSA硬件上。
4.3控制至数据流转换
编译器的关键部分可在控制-数据流转换轮次(或简称数据流转换轮次)中实现。该轮次吸收以控制流形式表示的函数,并将该函数转换为数据流函数,该以控制流形式表示的函数例如是具有对虚拟寄存器进行操作的序列化机器指令的控制流图(CFG),该数据流函数在概念上是由等待时间不敏感的通道(LIC)连接的数据流操作(指令)的图。本章节给出对该轮次的高级描述,从而描述在某些实施例中,该轮次如何在概念上处理存储器操作、分支和循环。
直线代码
图28A图示根据本公开的实施例的序列化汇编代码2802。图28B图示根据本公开的实施例的针对图28A的序列化汇编代码2802的数据流汇编代码2804。图28C图示根据本公开的实施例的针对用于加速器的图28B的数据流汇编代码2804的数据流图2806。
首先,考虑将直线序列化代码转换为数据流的简单情况。数据流转换轮次可将基本的序列化代码块(诸如,图28A中示出的代码)转换为图28B中示出的CSA汇编代码。从概念上讲,图28B中的CSA汇编表示图28C中的数据流图。在该示例中,每一条序列化指令被转换为匹配的CSA汇编。(例如,用于数据的).lic声明宣称与序列化代码中的虚拟寄存器(例如,Rdata)相对应的等待时间不敏感的通道。在实践中,对数据流转换轮次的输入可以在经编号的虚拟寄存器中。然而,为清楚起见,本节使用描述性的寄存器名称。注意,在该实施例中,加载和存储操作在CSA架构中受支持,从而相比仅支持纯数据流的架构允许多得多的程序运行。由于对编译器的序列化代码输入是SSA(单静态指派)形式的,因此对于简单的基本块,控制-数据流轮次可将每一个虚拟寄存器定义转换为在等待时间不敏感的通道上的单个值的产生。SSA形式允许对虚拟寄存器(诸如,在Rdata2中)的单个定义的多次使用。为了支持该模型,CSA汇编代码支持对同一LIC(例如,data2)的多次使用,并且模拟器隐式地创建LIC的必要的副本。序列化代码与数据流代码之间的一个关键区别在于对存储器操作的处理。图28A中的代码在概念上是串行的,这意味着在addr和addr3地址重叠的情况下,addr3的load32(ld32)应当显得在addr的st32之后发生。
分支
为了将具有多个基本块和条件语句的程序转换为数据流,编译器生成特殊的数据流操作器来替换分支。更具体地,编译器使用切换操作器以在原始的CFG中的基本块的结尾处引导传出数据,并使用挑选操作器以在基本块的开始处从适当的传入通道中选择值。作为具体的示例,考虑图29A-图29C中的代码和对应的数据流图,该代码和对应的数据流图有条件地基于以下若干输入来计算y的值:a、i、x和n。在计算了分支条件测试之后,则数据流代码使用切换操作器(例如,参见图14B-图14C)以:如果测试为0,则将通道x中的值引导到通道xF,或者如果测试为1,则将通道x中的值引导到通道xT。类似地,挑选操作器(例如,参见图14B-图14C)用于:如果测试为0,则将通道yF发送到y,或者如果测试为1,则将通道yT发送到y。在该示例中,证明了即便a的值仅用于条件语句的真分支中,CSA也将包括切换操作器,该切换操作器在测试为1时将该a的值引导到通道aT,并且当测试为0时消耗(吞噬)该值。后一种情况通过将切换装置的假输出设置为%ign来表达。简单地将通道直接连接到真路径可能不是正确的,因为在执行实际上采用假路径的情况下,该“a”的值将被留在图中,从而导致对于该函数的下一次执行的不正确的a值。该示例突出了控制等效的属性,该属性是正确的数据流转换的实施例中的关键属性。
控制等效:考虑具有两个基本块A和B的单入口单出口控制流图G。如果通过G的所有完成控制流路径都对A和B访问相同次数,则A和B是控制等效的。
LIC替换:在控制流图G中,假定基本块A中的操作定义虚拟寄存器x以及在基本块B中的使用x的操作。那么只有在A和B是控制等效的时,正确的控制-数据流变换才可用等待时间不敏感的通道来替换x。控制等效关系将CFG的基本块分区为强控制依赖性区域。图29A图示根据本公开的实施例的C源代码2902。图29B图示根据本公开的实施例的针对图29A的C源代码2902的数据流汇编代码2904。图29C图示根据本公开的实施例的针对图29B的数据流汇编代码2904的数据流图2906。在图29A-图29C的示例中,在条件语句之前和之后的基本块是彼此控制等效的,但是在真路径和假路径中的基本块各自位于它们的控制依赖性区域中用于将CFG转换为数据流的一个正确算法用于使编译器:(1)***切换装置以对在不是控制等效的基本块之间流动的任何值补偿执行频率的失配;以及(2)在基本块的开始处***挑选装置以便正确地从任何传入值选择到基本块。生成用于这些挑选装置和切换装置的适当的控制信号可以是数据流转换的关键部分。
循环
数据流转换中的另一重要的CFG类别是用于单入口单出口循环的CFG,这是(LLVM)IR中生成的循环的常见形式。这些循环除了从循环的结尾往回到循环头部块的单个后沿以外,可以是几乎非循环的。数据流转换轮次可使用相同的高级策略来像对于分支那样转换循环,例如,数据流转换轮次在循环的结尾***切换装置以将值引导出循环(要么离开循环出口,要么围绕后沿到循环的开始),并且在循环的开始处***挑选装置以在进入循环的初始值与通过后沿到来的值之间进行选择。图30A图示根据本公开的实施例的C源代码3002。图30B图示根据本公开的实施例的针对图30A的C源代码3004的数据流汇编代码3002。图30C图示根据本公开的实施例的针对图30B的数据流汇编代码3004的数据流图3000。图30A-图30C示出用于将循环归纳变量i的值加起来的示例do-while循环的C和CSA汇编代码以及对应的数据流图。对于从概念上讲围绕循环进行循环的每一个变量(i和sum),该图具有控制这些值的流动的对应的挑选/切换装置对。注意,即便n是循环不变量,该示例也使用挑选/切换装置对使n的值围绕循环进行循环。这种n的重复使n的虚拟寄存器能够转化到LIC中,因为它匹配循环外部的n的概念性定义与循环内部对n的一次或多次使用之间的执行频率。一般而言,为了获得正确的数据流转换,当寄存器被转换到LIC中时,对于循环体内部的每一次迭代,登入(live-in)循环的寄存器将被重复一次。类似地,在循环内被更新且从循环登出(live-out)的寄存器将被消耗(例如,利用被发送出循环的单个最终值)。循环将褶皱引入到数据流转换过程中,即,用于循环的顶部处的挑选的控制以及用于循环底部的切换是偏移的。例如,如果图29A中的循环执行三个迭代并退出,则对挑选器的控制应当是0、1、1,而对切换器的控制应当是1、1、0。该控制通过以下方式实现:当函数在循环0(其在汇编中由指示.value 0和.avail 0指定)上开始时,以初始的额外0启动挑选器通道,随后将输出切换器复制到挑选器中。注意,切换器中的最后一个0将最终的0恢复到挑选器中,从而确保数据流图的最终状态匹配其初始状态。
图31A图示根据本公开的实施例的流程图3100。所描绘的流程3100包括:利用处理器的核的解码器将指令解码为经解码指令3102;利用处理器的核的执行单元执行经解码指令以执行第一操作3104;接收包括多个节点的数据流图的输入3106;将数据流图覆盖到处理器的多个处理元件以及处理器的多个处理元件之间的互连网络中,并且每一个节点被表示为多个处理元件中的数据流操作器3108;以及当相应的传入操作数集到达多个处理元件的数据流操作器中每一个时,利用互连网络和多个处理元件执行数据流图的第二操作3110。
图31B图示根据本公开的实施例的流程图3101。所描绘的流程包括:接收包括多个节点的数据流图的输入3103;将数据流图覆盖到处理器的多个处理元件、多个处理元件之间的数据路径网络以及多个处理元件之间的流控制路径网络中,并且每一个节点被表示为多个处理元件中的数据流操作器3105。
在一个实施例中,核将命令写入到存储器队列中,并且CSA(例如,多个处理元件)监测该存储器队列且当该命令被读取时开始执行。在一个实施例中,核执行程序的第一部分,并且CSA(例如,多个处理元件)执行该程序的第二部分。在一个实施例中,当CSA正在执行操作时,核进行其他工作。
5.CSA优势
在某些实施例中,CSA架构和微架构提供相对于路线图处理器架构和FPGA深远的能量、性能、可用性优势。在本节中,这些架构与CSA的实施例进行比较,并且强调CSA在加速并行数据流图中相对于每一者的优越性。
5.1处理器
图32图示根据本公开的实施例的吞吐量相对于每个操作的能量的图表3200。如图32中所示,小型核一般比大型核能效更高,并且在一些工作负荷中,该优势可通过更高的核计数而转换为绝对性能。CSA微架构遵循这些观察结果至它们的结论,并且去除与冯·诺依曼架构相关联的(例如,大多数)能量饥饿型控制结构(包括指令侧微架构中的大多数)。通过去除这些开销并实现简单的单操作PE,CSA的实施例获得密集、高效的空间阵列。与通常非常串行化的小型核不同,CSA可例如经由电路交换型本地网络将其PE聚集在一起以形成显式并行的聚合数据流图。该结果为不仅在并行应用中、而且也在串行应用中的性能。与在面积和能量方面花大代价的核不同,CSA在其原生执行模型中已经是并行的。在某些实施例中,CSA利用推测来提升性能,并且例如它不需要反复地从序列化程序表示中重新提取并行性,由此避免了冯·诺依曼架构中主要能量税负中的两项。CSA的实施例中的大多数结构是分布式、小型且高能效的,这与核中发现的集中式、庞大的能量饥饿型结构形成对照。考虑CSA中的寄存器的情况:每一个PE可具有一些(例如,10个或更少)存储寄存器。单独而言,这些寄存器可比传统的寄存器组更高效。在聚合时,这些寄存器可提供大型结构中寄存器组的效果。作为结果,CSA的实施例避免由经典架构导致的栈溢出和填满中的大多数,同时对于每一次状态访问使用少得多的能量。当然,应用可仍访问存储器。在CSA的实施例中,存储器访问请求和响应是架构上解耦的,从而使工作负荷对于每个面积和能量单位维持多得多的待决存储器访问。该属性对高速缓存约束的工作负荷实现显著更高的性能,并且减少使存储器约束的工作负荷中的主存储器饱和所需的面积和能量。CSA的实施例暴露对非冯·诺依曼架构而言独一无二的新的能效形式。在(例如,大多数)PE处执行单个操作(例如,指令)的一个结果是减少的操作数熵。在递增式操作的情况下,每一次执行会导致少数电路级切换和非常少的能耗,这是在第6.2节中详细检验的情况。相比之下,冯·诺依曼经复用,从而导致大量位转变。CSA的实施例的异步样式也实现微架构优化,诸如,难以在被严格地调度的核流水线中实现的在第3.5节中描述的浮点优化。由于PE可以是相对简单的,并且在特定数据流图中的PE的行为可静态地被知晓,因此时钟门控和功率门控技术可以比在更粗糙架构中更高效地被采用。CSA、PE和网络的实施例的图执行样式、小尺寸和可延展性共同实现了对许多种类并行性的表达:指令、数据、流水线、向量、存储器、线程和任务并行性全都可被实现。例如,在CSA的实施例中,一个应用可使用算术单元来提供高的地址带宽等级,而另一应用可将那些相同的单元用于计算。在许多情况下,多种并行性可被组合以实现甚至更高的性能。许多关键的HPC操作可既被复制又被流水线化,从而导致多个数量级的性能增益。相比之下,冯·诺依曼核典型地针对由架构师仔细选择的一种并行性样式进行优化,从而导致不能够捕捉所有重要的应用内核。正因为CSA的实施例暴露并促进并行性的许多形式,因此它不命令特定的并行性形式,或者更糟糕地,特定的子例程存在于应用中以受益于CSA。例如即便当不进行修改就被编译时,许多应用(包括单流应用)也可从CSA的实施例获得性能和能量益处两者。这与要求大量的编程器努力获得单流应用中的显著性能增益的长期趋势相反。实际上,在一些应用中,相比从已备受煎熬来针对向量指令的其复杂的当代对等代码,CSA的实施例从功能上等效的但较不“现代化的”代码中获得更多性能。
5.2CSA实施例与FPGA的比较
将数据流操作器选作CSA的实施例的基本架构这一选择将那些CSA与FPGA区分开,具体地,CSA作为用于从传统编程语言产生的HPC数据流图的优越的加速器。数据流操作器在根本上是异步的。这使CSA的实施例不仅能够具有在微架构中的实现自由,而且还使CSA的实施例能够简单且简洁地适应抽象架构概念。例如,CSA的实施例利用简单的加载-存储接口自然地适应许多存储器微架构,这些许多存储器微架构基本上是异步的。人们仅需要检查FPGA DRAM控制器来领会复制度的区别。CSA的实施例也利用异步性来提供像配置和提取这样的更快且功能更全的运行时服务,人们相信这比FPGA块4-6个数量级。通过收窄架构接口,CSA的实施例在微架构级提供对大多数时序路径的控制。这允许CSA的实施例以比在FPGA中提供的更一般的控制机制高得多的频率来操作。类似地,在架构上对于FPGA而言可能是根本性的时钟和重置在CSA中是微架构的,从而例如消除了对将时钟和重置作为可编程实体来支持的需求。数据流操作器对于大多数部分可以是粗粒度的。通过仅在粗糙的操作器中进行处理,CSA的实施例改善结构的密度及其能耗两者。CSA直接执行操作而不是利用查找表来对操作进行仿真。粗糙性的第二个结果是简化了放置和路由问题。CSA数据流图比FPGA网络表小许多数量级,并且在CSA的实施例中,放置和路由时间相应减少。CSA的实施例与FPGA之间的显著区别使得CSA作为例如用于从传统编程语言产生的数据流的加速器是优越的。
6.评估
CSA是新颖的计算机架构,具有提供相对于路线图处理器的巨大的性能和能量优势。考虑对于跨阵列行走计算单跨步地址的情况。这种情况在HPC应用(例如,其在计算地址偏移时花费大量整数工作)中可能是重要的。在地址计算、尤其是跨步地址计算中,对于每次计算,一个变元是恒定的,并且另一个变元仅略微变化。因此,在大多数情况下,每个周期仅少数位切换。实际上,使用与第3.5节中描述的对浮点进位位的约束类似的派生,可以显示出对于跨步计算平均而言每次计算少于两个输入位切换,从而对于随机切换分布减少50%能量。如果使用时间复用方式,则这些能量节省中的许多能量节省会丢失。在一个实施例中,CSA实现相对于核的大约3x(3倍)能效,同时获得8x(8倍)性能增益。由CSA的实施例获得的并行性增益会导致减少的程序运行时间,从而实现相应的显著的泄漏能量减少。在PE级,CSA的实施例是极其高能效的。对于CSA的第二个重要问题是CSA是否在片级小号合理量的能量。由于CSA的实施例在每个周期在结构中能够演练每一个浮点PE,引起它充当能量和功率消耗的合理上界,例如使得能量中的大部分进入浮点乘法和加法。
7.未来CSA细节
本节讨论配置和异常处置的进一步细节。
7.1用于配置CSA的微架构
本节公开了如何配置CSA(例如,结构),如何快速实现该配置,以及如何使配置的资源开销最小化的示例。快速地配置结构对于加速较大算法的小部分并因此对于放宽CSA的适用性是极其重要的。本节进一步讨论允许CSA的实施例能够以不同长度的配置来编程的特征。
CSA(例如,结构)的实施例可与传统的核不同,体现在CSA的实施例可利用这样的配置步骤,其中,结构的(例如,大)部分在程序执行之前提前以程序配置来加载。静态配置的优势可以在于,在配置时的运行时,非常少的能量被花费,这例如与几乎每个周期都花费取出配置信息(指令)的能量的序列化核形成对照。配置的先前劣势在于,它是具有潜在的长等待时间的粗粒度步骤,潜在的长等待时间由于上下文切换的代价而对可在结构中被加速的程序的尺寸设定下界。本公开描述了用于迅速地以分布式方式(其例如避免先前的劣势)配置空间阵列的可缩放微架构。
如上文所讨论,CSA可包括由PE间网络连接的轻量型处理元件。通过配置可配置结构元件(CFE)(例如,PE和互连(结构)网络),被视为控制-数据流图的程序随后被映射到架构上。一般而言,PE可被配置为数据流操作器,并且一旦所有输入操作数到达PE,则一些操作发生,并且结果被转发到另外一个或多个PE用于消耗或输出。PE可通过专用虚拟电路进行通信,该专用虚拟电路通过静态地配置电路交换型通信网络而形成。这些虚拟电路可以是流受控且完全被回压的,使得例如如果源没有数据或目的地为满,则PE将停止。在运行时,数据可流经实现经映射算法的PE。例如,数据可从存储器通过结构而流入,随后向外回到存储器。此类空间架构相对于传统多核处理器可实现卓越的性能效率:与扩展存储器***形成对照,以PE形式计算可以比较大的核更简单且更多,并且通信可以是直接的。
CSA的实施例可不利用(例如,软件受控的)分组切换(例如,要求大量软件辅助来实现的分组切换),该分组切换减缓配置。CSA的实施例包括网络中的带外信令(例如,取决于所支持的特征集,仅2-3位的带外信令)和固定的配置拓扑以避免对大量软件支持的需求。
CSA的实施例与在FPGA中使用的方式之间的一个关键区别在于,CSA方式可使用宽数据字,是分布式的,并且包括用于直接从存储器取出程序数据的机制。CSA的实施例可以不用为了面积效率而利用JTAG型单个位通信,例如因为那会要求几毫秒来完全配置大型FPGA结构。
CSA的实施例包括分布式配置协议和微架构来支持此协议。最初,配置状态可驻留在存储器中。多个(例如,分布式)本地配置控制器(箱)(LCC)可例如使用控制信号的小集合与结构提供的网络的组合来将整个程序的多个部分流送到它们在空间结构中的本地区域中。状态元件可在每一个CFE处被使用以形成配置链,从而例如允许各个CFE自编程而无需全局寻址。
CSA的实施例包括对形成配置链的特定硬件支持,例如,不是以增加配置时间为代价来动态地建立这些链的软件。CSA的实施例不纯粹是分组交换型的,并且确实包括额外的带外控制线(例如,控制不通过数据路径被发送,从而要求额外的周期来选通此信息并使该信息重新串行化)CSA的实施例通过固定配置排序并通过提供显式的带外控制来减小配置等待时间(例如,减小至少一半),同时不显著地增加网络复杂度。
CSA的实施例不将串行配置用于其中使用类JTAG协议将数据逐位地流送到结构中的配置。CSA的实施例利用粗粒度结构方式。在某些实施例中,将一些控制线或状态元件加到面向64位或32位的CSA结构相对于将那些相同的控制机制加到4位或6位结构具有更低的成本。
图33图示根据本公开的实施例的加速器片3300,该加速器片3300包括处理元件(PE)的阵列和本地配置控制器3302、3306。每一个PE、每一个网络控制器(例如,网络数据流端点电路)和每一个切换装置可以是可配置结构元件(CFE),例如,该CFE由CSA架构的实施例配置(例如,编程)。
CSA的实施例包括提供对异构空间结构的高效、分布式、低等待时间配置的硬件。这可以根据四项技术来实现。首先,利用硬件实体(本地配置控制器(LCC)),例如,如图33-35中所示。LCC可从(例如,虚拟)存储器取出配置信息的流。其次,配置数据路径可被包括,例如,该配置数据路径与PE结构的原生宽度一样宽,并且可被覆盖在PE结构的顶部上。第三,新控制信号可被接收到安排配置过程的PE结构中。第四,状态元件可位于(例如,在寄存器中)跟踪相邻CFE的状态的每一个可配置端点处,从而允许每一个CFE无需额外的控制信号来明确地自配置。这四个微架构特征可允许CSA配置其CFE的链。为了获得低的配置等待时间,可通过建立许多LCC和CFE链来对配置分区。在配置时,这些可独立地操作以便并行地加载结构,从而例如动态地降低等待时间。作为这些组合的结果,使用CSA架构的实施例配置的结构可以(例如,在几百纳秒内)被完全配置。在下文中,公开了CSA配置网络的实施例的各种组件的详细操作。
图34A-图34C图示根据本公开的实施例的配置数据路径网络的本地配置控制器3402。所描绘的网络包括多个多路复用器(例如,多路复用器3406、3408、3410),这些多路复用器可(例如,经由它们相应的控制信号)经配置以将(例如,来自PE的)一个或多个数据路径连接在一起。图34A图示为一些先前的操作或程序配置(例如,设置)的网络3400(例如,结构)。图34图示选通配置信号的本地配置控制器3402(例如,包括用于发送和/或接收信号的网络接口电路3404),并且本地网络被设置为允许LLC将配置数据发送到所有可配置结构元件(CFE)(例如,mux)的默认配置(例如,如图中所描绘)。图34C图示LCC,该LCC跨网络选通配置信息,从而以预定的(例如,硅定义的)序列配置CFE。在一个实施例中,当CFE被配置时,它们可立即开始操作。在另一实施例中,CFE等待开始操作,直到结构已被完全配置(例如,对于每一个本地配置控制器,由配置终止器(例如,图36中的配置终止器3604和配置终止器3608)用信号通知)。在一个实施例中,LCC通过发送特殊消息或驱动一信号来获得对网络结构的控制。随后,它(例如,在许多周期的时间段内)将配置数据选通到结构中的CFE。在这些附图中,多路复用器网络与在某些附图(例如,图17)中示出的“切换装置”类似。
本地配置控制器
图35图示根据本公开的实施例的(例如,本地)配置控制器3502。本地配置控制器(LCC)可以是负责以下各项的硬件实体:加载结构程序的(例如,在片的子集中或其他位置的)本地部分;解释这些程序部分;随后通过在各种配置线上驱动适当的协议将这些程序部分加载到结构中。;在该能力方面,LLC可以是专用序列化微控制器。
当LLC操作接收到指向代码段的指针时,它可以开始。取决于LCB微架构,(例如,存储在指针寄存器3506中的)该指针要么通过(例如,来自CSA(结构)自身内的)网络要么通过存储器***访问来到LCC。当LLC接收到此类指针时,它可任选地从用于上下文存储的结构的其部分耗尽相关状态,并随后继续进展以立即重配置该结构该LLC所负责的部分。由LCC加载的程序可以是用于结构的配置数据和用于LCC的控制命令的组合,例如,该配置数据和该控制命令被轻度编码。当LLC使程序部分流入时,它可将该程序解释为命令流,并执行适当的经编码动作以配置(例如,加载)结构。
在图33中示出用于LCC的两个不同的微架构,例如,其中之一或两者用于CSA中。第一个微架构将LCC 3302放置在存储器接口处。在这种情况下,LCC可向存储器***做出加载数据的直接请求。在第二种情况下,LCC 3306被放置在存储器网络上,在存储器网络中,LCC3306可仅间接地向存储器作出请求。在这两种情况下,LCB的逻辑操作不改变。在一个实施例中,例如由(例如,OS可见的)控制状态寄存器的集合向LCC通知要加载的程序,该控制状态寄存器的集合将用于向各个LCC通知新程序指针等。
额外的带外控制通道(例如,线)
在某些实施例中,配置依赖于2-8个额外的带外控制通道来改善配置速度,如下文所定义。例如,配置控制器3502可包括以下控制通道:例如,CFG_START控制通道3508、CFG_VALID控制通道3510以及CFG_DONE控制通道3512,每一者的示例在以下表2中讨论
表2:控制通道
一般而言,对配置信息的处置可以被留给特定CFE的实现器。例如,可选择功能CFE可具有供应以便使用现有数据路径来设置寄存器,而固定功能CFE可简单地设置配置寄存器。
由于在对CFE的大型集合编程时的长的线延迟,因此CFG_VALID信号可视为对CFE组件的时钟/锁存启用。由于该信号被用作时钟,因此在一个实施例中,该线的占空比最多为50%。作为结果,配置吞吐量大约减半。可任选地,第二CFG_VALID信号可被添加以允许连续编程。
在一个实施例中,仅CFG_START在独立耦合装置(例如,线)上被严格地传递,例如,CFG_VALID和CFG_DONE可被覆盖在其他网络耦合装置的顶部上。
网络资源的重新使用
为了减少配置的开销,CSA的某些实施例利用现有的网络基础结构来传递配置数据。LCC可利用芯片级存储器层次结构和结构级通信网络两者来将数据从存储移动到结构中。作为结果,在CSA的某些实施例中,配置基础结构向总结构面积和功率增加不多于2%。
在CSA的某些实施例中的网络资源的重新使用可使网络具有对配置机制的某种硬件支持。CSA的实施例的电路交换型网络使LCC在‘CFG_START’信号被断言时以特定的方式来设置这些电路交换型网络的多路复用器以进行配置。分组交换型网络不要求扩展,但是LCC端点(例如,配置终止器)使用分组交换型网络中的特定地址。网络重新使用是可任选的,并且一些实施例可发现专用配置总线是更方便的。
每个CFE状态
每一个CFE可维护表明它是否已经被配置的位(例如,参见图24)。当配置开始信号被驱动时,该位可被解除断言,随后,一旦特定的CFE已被配置,就断言该位。在一个配置协议中,CFE被布置成链,CFE并且配置状态位确定该链的拓扑。CFE可读取紧邻CFE的配置状态位。如果该相邻CFE被配置且当前CFE未被配置,则CFE和确定任何当前的配置数据针是对当前CFE的。当‘CFG_DONE’信号被断言时,CFE可设置其配置位,以便例如使上游CFE能够进行配置。作为配置过程的基本情况,断言其被配置的配置终止器(例如,在图33中的用于LCC3302的配置终止器3404或用于LCC 3306的配置终止器3408)可被包括在链的结尾处。
在CFE内部,该位可用于驱动流控制就绪信号。例如,当配置位被解除断言时,网络控制信号可被自动地箝位为防止数据流动的值,同时在PE内,没有操作或其他动作将被调度。
处理高延迟配置路径
LCC的一个实施例可例如通过许多多路复用器且利用许多加载以在长距离上驱动信号。因此,信号在短时钟周期内到达远端CFE可能是困难的。在某些实施例中,配置信号处于主(例如,CSA)时钟信号的某个分频(例如,分数)以确保配置时的数字时序规则。时钟分频可用于带外信令协议中,并且不要求对主时钟树的任何修改。
确保配置期间一致的结构行为
由于某些配置方案是分布式的且由于程序和存储器效应具有非确定性时序,因此结构的不同部分可在不同时间被配置。作为结果,CSA的某些实施例提供用于防止经配置以及未经配置的CFE之间的不一致操作的机制。总体而言,一致性被视为由CFE自身例如使用内部CFE状态所要求并维持的属性。例如,当CFE处于未经配置状态时,它可宣称其输入缓冲器为满,且其输出为无效。当被配置时,这些值将被设置为缓冲器的真状态。随着结构的足够的部分从配置中出来,这些技术可准许该结构开始操作。例如,如果长等待时间存储器请求在早期被发布,则这具有进一步降低上下文切换等待时间的效果。
可变宽度配置
不同的CFE可具有不同的配置字宽度。对于较小的CFE配置字,实现器可通过跨网络线公平地指派CFE配置加载来使延迟平衡。为了平衡在网络线上的加载,一个选项是将配置位指派给网络线的不同部分以限制任何一根线上的净延迟。宽数据字可通过使用串行化/解串行化技术来处置。这些决策可逐结构地采用以优化特定CSA(例如,结构)的行为。网络控制器(例如,网络控制器3310和网络控制器3312中的一个或多个)可与CSA(例如,结构)的每一个域(例如,子集)通信,以便例如将配置信息发送至一个或多个LCC。网络控制器可以是(例如,与电路交换型网络分开的)通信网络的部分。网络控制器可包括网络数据流端点电路。
7.2用于CSA的低等待时间配置以及用于CSA的配置数据的及时取出的微架构
CSA的实施例可以是对用户应用进行加速的高能效且高性能手段。当考虑程序(例如,程序的数据流图)是否可由加速器成功地加速时,用于配置加速器的时间以及用于运行程序的时间两者可被考虑。如果运行时间为短,则配置时间在确定成功的加速时将发挥大的作用。因此,为了使可加速程序的域最大化,在一些实施例中,使配置时间尽可能短。一个或多个配置高速缓存可被包括在CSA中,例如使得高带宽、低等待时间存储实现快速重配置。接下来是对配置高速缓存的若干实施例的描述。
在一个实施例中,在配置期间,配置硬件(例如,LCC)可任选地访问配置高速缓存以获得新配置信息。配置高速缓存要么可操作为传统的基于地址的高速缓存,要么可处于OS管理的模式,在OS管理的模式中,配置被存储在本地地址空间中,并且通过参引那个地址空间被寻址。如果配置状态位于高速缓存中,则在某些实施例中,没有对后备存储的请求将被进行。在某些实施例中,该配置高速缓存与存储器层次结构中的任何(例如,较低级)共享高速缓存分开。
图36图示根据本公开的实施例的加速器片3600,该加速器片3600包括处理元件的阵列、配置高速缓存(例如,3618或3620)和本地配置控制器(例如,3602或3606)。在一个实施例中,配置高速缓存3614与本地配置控制器3602位于一起。在一个实施例中,配置高速缓存3618位于本地配置控制器3606的配置域中,例如,第一域结束于配置终止器3604,并且第二域结束于配置终止器3608。配置高速缓存可允许本地配置控制器在配置期间可参引配置高速缓存,以便例如希望以比参引存储器更低的等待时间来获得配置状态。配置高速缓存(存储)要么可以是专用的,要么可作为结构内存储元件(例如,本地高速缓存3616)的配置模式来访问。
高速缓存模式
1.需求型高速缓存(Demand Caching)-在该模式中,配置高速缓存作为真高速缓存进行操作。配置控制器发布基于地址的请求,该基于地址的请求被对照着高速缓存中的标签来校验。未命中可被加载到高速缓存中,并且随后可在未来的重新编程期间被重新参引。
2.结构内存储(暂存器)高速缓存——在该模式中,配置高速缓存接收对其自身的小地址空间而不是主机的较大的地址空间中的配置序列的参引。这可改善存储器密度,因为高速缓存的用于存储标签的部分可替代地用于存储配置。
在某些实施例中,配置高速缓存可具有(例如,通过外部指示或内部指示)被预加载到其中的配置数据。这可允许用于加载程序的等待时间的减少。本文中的某些实施例提供至配置高速缓存的结构,该接口例如即便在配置已经正在结构中运行时也准许将新配置状态加载到高速缓存中。该加载的发起可从内部或外部源发生。预加载机制的实施例通过去除来自配置路径的高速缓存加载的等待时间来进一步减小等待时间。
预取模式
1.显式预取——以新命令ConfigurationCachePrefetch(配置高速缓存预取)来扩充配置路径。与对结构编程不同,该命令简单地使相关程序配置加载到配置高速缓存中而无需对结构编程。由于该机制背负在现有的配置基础结构上,因此它既在结构内被暴露,又在例如访问存储器空间的核和其他实体外部被暴露。
2.隐式预取——全局配置控制器可维护预取预测器,并使用它来(例如,以自动化方式)发起对配置高速缓存的显式预取。
7.3用于响应于异常对CSA进行快速重配置的硬件
CSA(例如,空间结构)的某些实施例包括大量指令和配置状态,例如,该配置状态在CSA的操作期间很大程度上是静态的。因此,配置状态可能易受软错误影响。对这些软错误的快速且无错的恢复对于空间***的长期可靠性和性能可能是关键的。
本文中的某些实施例提供快速配置恢复循环,例如,在该快速配置恢复循环中,配置错误被检测,并且结构的多个部分立即被重配置。本文中的某些实施例包括例如具有可靠性、可用性和耐用性(RAS)重编程特征的配置控制器。CSA的某些实施例包括用于在空间结构内进行高速配置、错误报告和奇偶校验的电路。使用这三个特征以及可任选的配置高速缓存的组合,配置/异常处置电路可从配置中的软错误恢复。当被检测到时,软错误可被传送到配置高速缓存,该配置高速缓存发起对结构(例如,结构的那个部分)的立即重配置。某些实施例提供专用重配置电路,例如,该专用重配置电路比将被间接地实现在结构中的任何解决方案快。在某些实施例中,位于一起的异常和配置电路协作,以便在配置错误检测时对结构重新加载。
图37图示根据本公开的实施例的加速器片3700,该加速器片3700包括处理元件的阵列以及具有重配置电路3718、3722的配置和异常处置控制器3702、3706。在一个实施例中,当PE通过其RAS特征检测到配置错误时,它通过其异常生成器将(例如,配置错误或重配置错误)消息发送到配置和异常处置控制器(例如,3702或3706)。在接收到该消息时,配置和异常处置控制器(例如,3702或3706)启动位于一起的重配置电路(例如,分别为3718或3722)以重新加载配置状态。配置微架构继续进行并(例如,仅)重新加载配置状态,并且在某些实施例中,仅重新加载用于PE的报告RAS错误的配置状态。在重配置完成后,结构可恢复正常操作。为了减少等待时间,由配置和异常处置控制器(例如,3702或3706)使用的配置状态可从配置高速缓存源送。作为配置或重配置过程的基本情况,断言其被配置(或重配置)的配置终止器(例如,图37中用于配置和异常处置控制器3702的配置终止器3704或用于配置和异常处置控制器3706的配置终止器3708)可被包括在链的结尾处。
图38图示根据本公开的实施例的重配置电路3818。重配置电路3818包括用于存储配置状态(或指向该配置状态的指针)的配置状态寄存器3820。
7.4用于对CSA进行的结构发起的重配置的硬件
针对CSA(例如,空间阵列)的应用的一些部分可被不频繁地运行,或者相对于程序的其他部分可以是互斥的。为了节约面积,为了改善性能和/或减小功率,在程序数据流图的若干不同部分之间对空间结构的多个部分进行时间复用可能是有用的。本文中的某些实施例包括接口,通过该接口,CSA(例如,经由空间程序)可请求结构的那个部分被重编程。这可使CSA能够根据动态控制流来动态地改变其自身。本文中的某些实施例可允许结构发起的重配置(例如,重编程)。本文中的某些实施例提供用于从结构内触发配置的接口的集合。在一些实施例中,PE基于程序数据流图中的某个决策发布重配置请求。该请求可行进通过网络到我们的新配置接口,在我们的新配置接口处,该请求触发重配置。一旦重配置完成,通知该完成的消息可以可任选地被返回。CSA的某些实施例因此提供程序(例如,数据流图)引导的重配置能力。
图39图示根据本公开的实施例的加速器片3900,该加速器片3900包括处理元件的阵列以及具有重配置电路3918的配置和异常处置控制器3906。在此,结构的部分将对(重)配置的请求发布至例如配置和异常处置控制器3906和/或重配置电路3918的配置域。该域(重)配置其自身,并且当请求已被满足时,配置和异常处置控制器3906和/或重配置电路3918将响应发布至结构,以向该结构通知(重)配置完成。在一个实施例中,配置和异常处置控制器3906和/或重配置电路3918在(重)配置正在进行期间禁用通信,因此在操作期间,程序没有一致性问题。
配置模式
通过地址配置——在该模式中,结构做出从特定地址加载配置数据的直接请求。
通过参引配置——在该模式中,结构例如通过预定义的参引ID做出加载新配置的请求。这可简化对要加载的代码的确定,因为该代码的位置已被抽象。
配置多个域
CSA可包括较高级配置控制器以支持多播机制,从而(例如,经由虚线框所指示的网络)将配置请求播到多个(例如,分布式或本地)配置控制器。这可使单个配置请求跨结构的多个较大部分被复制,从而例如触发宽的重配置。
7.5异常聚合器
CSA的某些实施例也会经历异常(例如,异常条件),例如,浮点下溢(underflow)。当这些条件发生时,特殊的处置程序可被调用,以便要么修正程序,要么终止该程序。本文中的某些实施例提供用于在空间结构中处置异常的***级架构。由于某些空间结构强调面积效率,本文中的实施例在提供通用异常机制的同时使总面积最小化。本文中的某些实施例提供用信号通知发生在CSA(例如,空间阵列)中的异常条件的低面积手段。本文中的某些实施例提供用于传递此类异常以及PE级异常语义的接口和信令协议。本文中的某些实施例是专用异常处置能力,并且例如不要求由编程者进行的显式处置。
CSA异常架构的一个实施例由四个部分组成,例如在图40-图41中示出。这些部分可被布置在层次结构中,在该层次结构中,异常从生产方流出,并最终向上流到片级异常聚合器(例如,处置程序),该片级异常聚合器可与例如核的异常维护器会和。这四个部分可以是:
1.PE异常生成器
2.本地异常网络
3.夹层异常聚合器
4.片级异常聚合器
图40图示根据本公开的实施例的加速器片4000,该加速器片4000包括处理元件的阵列以及耦合至片级异常聚合器4004的夹层异常聚合器4002。图41示出根据本公开的实施例的具有异常生成器4144的处理元件4100。
PE异常生成器
处理元件4100可包括来自图20的处理元件2000,例如,类似的编号是类似的组件,例如,本地网络2002和本地网络4102。附加的网络4113(例如,通道)可以是异常网络。PE可实现至异常网络(例如,图41上的异常网络4113(例如,通道))的接口。例如,图41图示此类接口的微架构,其中,PE具有异常生成器4144(例如,发起异常有限状态机(FSM)4140以将异常分组(例如,BOXID 4142)向外选通到异常网络上)。BOXID 4142可以是用于本地异常网络内的异常产生实体(例如,PE或块)的唯一标识符。当异常被检测时,异常生成器4144感测异常网络,并且当发现网络是空闲的时向外选通BOXID。异常可由许多条件导致,这些条件例如但不限于算术错误、对状态的失败的ECC校验等,然而,情况也可能是这样:利用支持像断点这样的构造的想法,引入异常数据流操作。
异常的发起可以要么通过编程者提供的指令显式地发生,要么当强化的错误条件(例如,浮点下溢)被检测到时隐式地发生。在异常发生时,PE 4100可进入等待状态,在该等待状态中,PE 4100等待由例如该PE 4100外部的最终异常处置程序来维护。异常分组的内容取决于特定PE的实现方式,如下文所述。
本地异常网络
(例如,本地)异常网络将异常分组从PE 4100引导至夹层异常网络。异常网络(例如,4113)可以是串行分组交换型网络,该串行分组交换型网络由例如以例如用于PE的子集的环形或树形拓扑组织的(例如,单个控制线)和一个或多个数据线组成。每一个PE在(例如,本地)异常网络中可具有(例如,环形)站,例如,在该站处,PE可仲裁以将消息注入到异常网络中。
需要注入异常分组的PE端点可观察它们的本地异常网络出口点。如果控制信号指示忙碌,则PE将等待开始注入该PE的分组。如果网络不繁忙,即,下游站没有分组要转发,则PE将继续开始注入。
网络分组可以具有可变或固定长度。每一个分组能以标识该分组的源PE的固定长度的头部字段开始。该头部字段随后可以是包含信息的可变数量的PE特定的字段,这些信息例如包括错误代码、数据值或其他有用的状态信息。
夹层异常聚合器
夹层异常聚合器4004负责将本地异常网络组装为较大的分组,并且将这些较大的分组发送到片级异常聚合器4002。夹层异常聚合器4004可利用本地异常分组自身的唯一ID来预先考虑该本地异常分组,从而例如确保异常消息是明确的。夹层异常聚合器4004可对接至夹层网络中的特殊的仅用于异常的虚拟通道,从而例如确保异常无死锁。
夹层异常聚合器4004也可能能够直接维护异常的某些类别。例如,使用在夹层网络站本地的高速缓冲,来自结构的配置请求可从夹层网络向外分发。
片级异常聚合器
异常***的最终级是片级异常聚合器4002。片级异常聚合器4002负责从各种夹层级异常聚合器(例如,4004)收集异常,并将这些异常转发到适当的维护硬件(例如,核)。由此,片级异常聚合器4002可包括一些用于将特定的消息与处置程序例程相关联的内部表和控制器。这些表可被直接索引或能以小型状态机进行索引,从而引导特定的异常。
像夹层异常聚合器那样,片级异常聚合器可维护一些异常请求。例如,它可以响应于特定的异常而发起对PE结构的大部分的重新编程。
7.6异常控制器
CSA的某些实施例包括用于从结构提取数据的(多个)提取控制器。下文讨论如何快速实现该提取以及如何使数据提取的资源开销最小化的实施例。数据提取可用于诸如异常处置和上下文切换之类的关键任务。本文中的某些实施例通过引入允许具有可变以及动态可变数量的要提取的状态的可提取结构元件(EFE)(例如,PE、网络控制器和/或切换装置)的特征来从异构空间结构提取数据。
CSA的实施例包括分布式数据提取协议和微架构来支持此协议。CSA的某些实施例包括多个本地提取控制器(LEC),这些LEC使用控制信号的(例如,小)集合和结构提供的网络的组合来使程序数据从它们在空间结构中的本地区域中流出。状态元件可在每一个可提取结构元件(EFE)处被使用以形成提取链,从而例如允许各个EFE自提取而无需全局寻址。
CSA的实施例不使用本地网络来提取程序数据。CSA的实施例包括例如用于形成提取链的特定硬件支持(例如,提取控制器),并且不依赖于软件(例如,以增加提取时间为代价)动态地建立这些链。CSA的实施例不纯粹是分组交换型的,并且确实包括额外的带外控制线(例如,控制不通过数据路径被发送,从而要求额外的周期来选通此信息并使该信息重新串行化)CSA的实施例通过固定提取排序并通过提供显式的带外控制来减小提取等待时间(例如,减小至少一半),同时不显著地增加网络复杂度。
CSA的实施例不将串行机制用于其中使用类JTAG协议从结构逐位地流送数据的数据提取。CSA的实施例利用粗粒度结构方式。在某些实施例中,将一些控制线或状态元件加到面向64位或32位的CSA结构相对于将那些相同的控制机制加到4位或6位结构具有更低的成本。
图42图示根据本公开的实施例的加速器片4200,该加速器片4200包括处理元件的阵列和本地提取控制器4202、4206。每一个PE、每一个网络控制器和每一个切换装置可以是可提取结构元件(EFE),例如,该EFE由CSA架构的实施例配置(例如,编程)。
CSA的实施例包括提供对异构空间结构的高效、分布式、低等待时间提取的硬件。这可以根据四项技术来实现。首先,利用硬件实体(本地提取控制器(LEC)),例如,如图42-43中所示。LEC可接受来自主机(例如,处理器核)的命令,例如从空间阵列提取数据流,并将该数据往回写入到虚拟存储器供由该主机检查。其次,提取数据路径可被包括,例如,该提取数据路径与PE结构的原生宽度一样宽,并且可被覆盖在PE结构的顶部上。第三,新控制信号可被接收到安排提取过程的PE结构中。第四,状态元件可位于(例如,在寄存器中)跟踪相邻EFE的状态的每一个可配置端点处,从而允许每一个EFE无需额外的控制信号来明确地输出其状态。这四个微架构特征可允许CSA从EFE的链提取数据。为了获得低的数据提取等待时间,某些实施例可通过将多个(例如,许多)LEC和EFE链包括在结构中来将提取问题分区。在提取时,这些链可独立地操作以便并行地从结构提取数据,从而例如动态地降低等待时间。作为这些组合的结果,CSA可(例如,在几百纳秒内)执行完整的状态转储。
图43A-图43C图示根据本公开的实施例的配置数据路径网络的本地提取控制器4302。所描绘的网络包括多个多路复用器(例如,多路复用器4306、4308、4310),这些多路复用器可(例如,经由它们相应的控制信号)经配置以将(例如,来自PE的)一个或多个数据路径连接在一起。图43A图示为一些先前的操作程序配置(例如,设置)的网络4300(例如,结构)。图43B图示选通提取信号的本地提取控制器4302(例如,包括用于发送和/或接收信号的网络接口电路4304),并且由LEC控制的所有PE进入提取模式。提取链中的最后一个PE(或提取终止器)可主控提取通道(例如,总线),并且根据(1)来自LEC的信号或(2)内部(例如,从PE)产生的信号发送数据。一旦被完成,PE可设置其完成标记,,从而例如使下一个PE能够提取其数据。图43C图示最远的PE已完成提取过程,并且作为结果,该最远的PE已设置其一个或多个提取状态位,例如,该一个或多个提取状态位使mux摇摆到相邻网络以使下一个PE能够开始提取过程。被提取的PE可恢复正常操作。在一些实施例中,PE可保持禁用,直到其他动作被采取。在这些附图中,多路复用器网络与在某些附图(例如,图17)中示出的“切换装置”类似。
下一节描述提取网络的实施例的各种组件的操作
本地提取控制器
图44图示根据本公开的实施例的提取控制器4402。本地提取控制器(LEC)可以是负责接受提取命令、协调EFE的提取过程和/或将被提取数据存储到例如虚拟存储器的硬件实体。在该能力方面,LEC可以是专用序列化微控制器。
当LEC接收到指向结构状态将被写入的缓冲器(例如,在虚拟存储器中)的指针以及可任选地接收到控制结构中的多少将被提取的命令时,LEC操作可以开始。取决于LEC微架构,(例如,存储在指针寄存器4405中的)该指针可以要么通过网络要么通过存储器***访问来到LEC。当LEC接收到此类指针(例如,命令)时,它继续从结构中它所负责的部分提取状态。LEC可将该被提取的数据流送出结构而流送到由外部调用器提供的缓冲器中。
在图42中示出用于LEC的两种不同的微架构。第一个将LEC 4202放置在存储器接口处。在这种情况下,LEC可向存储器***做出写入被提取的数据的直接请求。在第二种情况下,LEC 4206被放置在存储器网络上,在存储器网络中,LCC 4206可仅间接地向存储器作出请求。在这两种情况下,LEC的逻辑操作可以不改变。在一个实施例中,例如由(例如,OS可见的)控制状态寄存器的集合向LEC通知要从结构提取数据的期望,该控制状态寄存器的集合将用于向各个LEC通知新命令。
额外的带外控制通道(例如,线)
在某些实施例中,提取依赖于2-8个额外的带外信号来改善配置速度,如下文所定义。由LEC驱动的信号可被标记为LEC。由EFE(例如,PE)驱动的信号可被标记为EFE。配置控制器4402可包括以下控制通道,例如,LEC_EXTRACT控制通道4506、LEC_START控制通道4408、LEC_STROBE控制通道4410和EFE_COMPLETE控制通道4412,每一者的示例在以下表3中讨论。
表3:提取通道
一般而言,对提取的处置可以被留给特定EFE的实现器。例如,可选择功能EFE可具有供应以便使用现有数据路径来转储寄存器,而固定功能EFE可简单地具有多路复用器。
由于在对EFE的大型集合编程时的长的线延迟,因此LEC_STROBE信号可视为对EFE组件的时钟/锁存启用。由于该信号被用作时钟,因此在一个实施例中,该线的占空比最多为50%。作为结果,提取吞吐量大约减半。可任选地,第二LEC_STROBE信号可被添加以实现连续提取。
在一个实施例中,仅LEC_START在独立耦合装置(例如,线)上被严格地传递,例如,其他控制通道可被覆盖在现有网络(例如,线)上。
网络资源的重新使用
为了减少数据提取的开销,CSA的某些实施例利用现有的网络基础结构来传递提取数据。LEC可利用芯片级存储器层次结构和结构级通信网络两者来将数据从结构移动到存储中。作为结果,在CSA的某些实施例中,提取基础结构向总结构面积和功率增加不多于2%。
在CSA的某些实施例中的网络资源的重新使用可使网络具有对提取协议的某种硬件支持。电路交换型网络要求CSA的某些实施例使LEC在“LEC_START”信号被断言时以特定的方式来设置这些电路交换型网络的多路复用器以进行配置。分组交换型网络不要求扩展,但是LEC端点(例如,提取终止器)使用分组交换型网络中的特定地址。网络重新使用是可任选的,并且一些实施例可发现专用配置总线是更方便的。
每个EFE状态
每一个EFE可维护表明它是否已输出其状态的位。当提取开始信号被驱动时,该位可被解除断言,随后,一旦特定的EFE已完成提取,就断言该位。在一个提取协议中,EFE被布置成以形成链,并且EFE提取状态位确定该链的拓扑。EFE可读取紧邻EFE的提取状态位。如果该相邻的EFE已使其提取位被设置并且当前的EFE没有使其提取位被设置,则该EFE可确定它拥有提取总线。当EFE转储其最后的数据值时,它可驱动“EFE_DONE”信号并设置其提取位,从而例如使上游EFE能够配置用于提取。相邻于该EFE的网络可观察该信号,并且也调整其状态以处置该转变。作为提取过程的基本情况,断言提取完成的提取终止器(例如,在图33中的用于LEC 4202的提取终止器4204或用于LEC 4206的提取终止器4208)可被包括在链的结尾处。
在EFE内部,该位可用于驱动流控制就绪信号。例如,当提取位被解除断言时,网络控制信号可被自动地箝位为防止数据流动的值,同时在PE内,没有操作或动作将被调度。
处理高延迟路径
LEC的一个实施例可例如通过许多多路复用器且利用许多加载以在长距离上驱动信号。因此,信号在短时钟周期内到达远端EFE可能是困难的。在某些实施例中,提取信号处于主(例如,CSA)时钟信号的某个分频(例如,分数)以确保提取时的数字时序规则。时钟分频可用于带外信令协议中,并且不要求对主时钟树的任何修改。
确保提取期间一致的结构行为
由于某些提取方案是分布式的且由于程序和存储器效应具有非确定性时序,因此结构的不同成员可在不同时间处于提取状态。当LEC_EXTRACT被驱动时,所有网络流控制信号可被驱动为逻辑低,例如,由此冻结结构的特定段的操作。
提取过程可以是非破坏性的。因此,一旦提取已完成,PE的集合可认为是运行的。对提取协议的扩展可允许PE在提取后可任选地被禁用。或者,在实施例中,在提取过程期间开始配置将具有类似效果。
单个PE提取
在一些情况下,提取单个PE可能是权宜之计。在该情况下,作为提取过程的开始的部分,可任选的地址信号可被驱动。这可使该PE针对将被直接启用的提取。一旦该PE已被提取,提取过程就伴随着LEC_EXTRACT信号的降低而终止。以此方式,单个PE可例如由本地提取控制器选择性地提取。
处置提取回压
在其中LEC将被提取的数据写入到存储器(例如,对于后处理,例如,在软件中)的实施例中,它可能受制于有限的存储器带宽。在LEC耗尽其缓冲容量或预期它将耗尽其缓冲容量的情况下,该LEC可停止选通LEC_STROBE,直到缓冲问题已被解决。
注意,在某些附图(例如,图33、36、37、39、40和42中),示意性地示出通信。在某些实施例中,那些通信可通过(例如,互连)网络发生。
7.7流程图
图45图示根据本公开的实施例的流程图4500。所描绘的流程4500包括:利用处理器的核的解码器将指令解码为经解码指令4502;利用所述处理器的所述核的执行单元执行所述经解码指令以执行第一操作4504;接收包括多个节点的数据流图的输入4506;将所述数据流图覆盖到所述处理器的处理元件的阵列中,并且每一个节点被表示为所述处理元件的阵列中的数据流操作器4508;以及当传入操作数集到达所述处理元件的阵列处时,利用所述处理元件的阵列执行所述数据流图的第二操作4510。
图46图示根据本公开的实施例的流程图4600。所描绘的流程4600包括:利用处理器的核的解码器将指令解码为经解码指令4602;利用所述处理器的所述核的执行单元执行所述经解码指令以执行第一操作4604;接收包括多个节点的数据流图的输入4606;将所述数据流图覆盖到所述处理器的多个处理元件以及所述处理器的所述多个处理元件之间的互连网络中,并且每一个节点被表示为所述多个处理元件中的数据流操作器4608;以及当传入操作数集到达所述多个处理元件时,利用所述互连网络和所述多个处理元件执行所述数据流图的第二操作4610。
8.加速硬件中(例如,处理元件的空间阵列中)的示例存储器排序
图47A是根据本公开的实施例的***4700的框图,该***4700采用***在存储器子***4710与加速硬件4702之间的存储器排序电路4705。存储器子***4710可包括已知的存储器组件,包括与基于处理器的架构相关联的高速缓存、存储器以及一个或多个存储器控制器。加速硬件4702可以是由通过处理元件(PE)间网络或另一类型的组件间网络连接的轻量型处理元件(或其他类型的处理组件)组成的粗粒度空间架构。
在一个实施例中,被视为控制数据流图的程序可通过配置PE和通信网络而被映射到空间架构上。一般而言,PE被配置为数据流操作器,类似于处理器中的功能单元:一旦输入操作数到达PE,某个操作发生,并且结果被以流水线形式转发到下游PE。数据流操作器(或其他类型的操作器)可选择逐操作器地消耗传入数据。简单操作器(像处置算术表达式的无条件求值的那些操作)常消耗所有传入数据。然而,有时操作器维持状态(例如,在累加中)是有用的。
PE使用专用虚拟电路进行通信,该专用虚拟电路通过静态地配置电路交换型通信网络而形成。这些虚拟电路是流受控且完全被回压(back pressure)的,使得如果源没有数据或目的地为满,则PE将停止。在运行时,根据数据流图实现映射算法的通过PE的数据流在本文中也被称为子程序。例如,数据可从存储器通过加速硬件4702而流入,随后向外回到存储器。此类架构相对于传统多核处理器可实现卓越的性能效率:与扩展存储器子***4710相反,以PE形式计算比较大的核更简单且更多,并且通信是直接的。然而,存储器***并行性帮助支持并行PE计算。如果存储器访问被串行化,则高并行性可能不可实现。为了促进存储器访问的并行性,所公开的存储器排序电路4705包括如将详细解释的存储器排序架构和微架构。在一个实施例中,存储器排序电路4705是请求地址文件电路(或“RAF”)或其他存储器请求电路。
图47B是根据本公开的实施例的图47A中的***4700的框图,但是该***4700采用多个存储器排序电路4705。每一个存储器排序电路4705可充当存储器子***4710与加速硬件4702(例如,处理元件或片的空间阵列)的部分之间的接口。存储器子***4710可包括多个高速缓存片12(例如,在图47B的实施例中,高速缓存片12A、12B、12C和12D)以及某个数量的(在该实施例中为四个)存储器排序电路4705可用于每个高速缓存片12。交叉开关(crossbar)4704(例如,RAF电路)可将存储器排序电路4705连接至构成每一个高速缓存片12A、12B、12C和12D的高速缓存的区块。例如,在一个实施例中,每一个高速缓存片中可以有八个存储器的区块。***4700可实例化在单个管芯上,例如,实例化为芯片上***(SoC)。在一个实施例中,SoC包括加速硬件4702。在替代实施例中,加速硬件4702是外部可编程芯片(诸如,FPGA或CGRA),并且存储器排序电路4705通过输入/输出中枢等与加速硬件4702对接。
每一个存储器排序电路4705可将读取和写入请求接受到存储器子***4710。来自加速硬件4702的请求到达用于发起读取或写入访问(在本文中也称为加载或存储访问)的数据流图的每一个节点的分开的通道中的存储器排序电路4705。也提供缓冲,使得对加载的处理将会将被请求的数据按其被请求的顺序返回到加速硬件4702。换言之,迭代六的数据在迭代七的数据之前被返回,以此类推。此外,注意从存储器排序电路4705到特定高速缓冲区块的请求通道可实现为经排序通道,并且在第二请求之前离开的任何第一请求将在该第二请求之前到达高速缓存区块。
图48是图示根据本公开的实施例的进入加速硬件4702以及离开加速硬件4702的存储器操作的一般运行的框图4800。在加速硬件4702的顶部外发生的操作被理解为去往以及离开存储器子***4710的存储器而进行。注意,作出两个加载请求,随后是对应的加载响应。当加速硬件4702执行对来自加载响应的数据的处理时,第三加载请求和响应发生,这触发附加的加速硬件处理。随后,加速硬件对这三个加载操作的处理的结果被传递到存储操作,因此,最终结果被往回存储到存储器。
通过考虑该操作序列,空间阵列更自然地映射至通道可以是明显的。此外,加速硬件4702在请求和响应通道以及可能发生的固有并行处理方面是等待时间(latency)不敏感的。当与存储器的对接发生在与由加速硬件4702进行的多个处理步骤分开的离散时刻时,加速硬件也可将对程序的执行从存储器子***4710的实现方式(图47A)解耦。例如,对存储器的加载请求以及来自于存储器的加载响应是分开的动作,并且在不同情况下取决于存储器操作的依赖流能以不同方式被调度。将空间结构用于例如处理指令促进了对此类加载请求和加载响应的空间分离和分布。
图49是图示根据本公开的实施例的存储操作4901的空间依赖性流的框图4900。参照存储操作是示例性的,因为相同的流可应用于加载操作(但是没有传入数据),或者可应用于其他操作符(诸如,围栏)。围栏是用于存储器子***的、确保一类型的所有在先存储器操作(诸如,所有存储或所有加载)已完成的排序操作。存储操作4901可接收从加速硬件4702接收的(存储器的)地址4902和数据4904。存储操作4901还可接收传入依赖性令牌4908,并且响应于这三项的可用性,存储操作4901可生成传出依赖性令牌4912。传入依赖性令牌(其可以例如是程序的初始依赖性令牌)可在程序的编译器供应的配置中提供,或者可通过执行存储器映射的输入/输出(I/O)来提供。替代地,如果程序已经运行,则传入依赖性令牌可从加速硬件4702接收,例如,与存储操作4901所依赖的在先存储器操作相关联。传出依赖性令牌4912可基于正由程序后续的存储器操作要求的地址4902和数据4904来生成。
图50是根据本公开的实施例的图47A中的存储器排序电路4705的详细框图。存储器排序电路4705可耦合至乱序存储器子***4710,如所讨论的,乱序存储器子***4710可包括高速缓存和存储器以及(多个)相关联的乱序存储器控制器。存储器排序电路4705可包括或可耦合至通信网络接口20,该通信网络接口20可以是片间(inter-tile)网络接口或片内(intra-tile)网络接口,并且可以是电路切换型网络接口(如图所示),且因此包括电路切换型互连。替代地或附加地,通信网络接口20可包括分组(packet)交换型互连。
存储器排序电路4705可进一步包括但不限于存储器接口5010、操作队列5012、(多个)输入队列5016、完成队列5020、操作配置数据结构5024以及操作管理器电路5030,该操作管理器电路5030可进一步包括调度器电路5032和执行电路5034。在一个实施例中,存储器接口5010可以是电路交换型的,在另一实施例中,存储器接口5010可以是分组交换型的,或者这两者可同时存在。操作队列5012可对正为请求进行处理并因此可对应于进入输入队列5016的地址和数据的(具有对应变元的)存储器操作进行缓冲。
更具体地,输入队列5016可以是至少以下各项的聚合:加载地址队列、存储地址队列、存储数据队列以及依赖性队列。当将输入队列5016实现为被聚合时,存储器排序电路4705可提供对逻辑队列的共享,并且附加的控制逻辑用于在逻辑上将队列分开,这些队列是存储器排序电路的各个通道。这可使输入队列的使用最大化,但是也会要求附加的复杂度和空间供逻辑电路管理被聚合队列的逻辑分离。替代地,如将参照图51所讨论,输入队列5016能以分离方式来实现,其中每一个输入队列具有分开的硬件逻辑。无论是聚合的(图50)还是非聚合的(图51),为本公开目的的实现方式基本上相同,前者使用附加的逻辑来从逻辑上将单个共享硬件队列中的队列分开。
当被共享时,输出队列5016和完成队列5020可实现为固定大小的环形缓冲器。环形缓冲器是具有先入先出(FIFO)数据特性的循环队列的高效实现方式。因此,这些队列可实施存储器操作正被请求所针对的程序的语义顺序。在一个实施例中,(诸如,用于存储地址队列的)环形缓冲器可具有与以相同速率流过相关联的队列(诸如,存储数据队列或依赖性队列)的条目相对应的条目。以此方式,存储地址可保持与对应的存储数据相关联。
更具体地,加载地址队列可对存储器18从中检索数据的传入地址进行缓冲。存储地址队列可对将会向其写入数据的存储器18的传入地址进行缓冲,该数据被缓冲在存储数据队列中。依赖性队列可对与加载地址队列和存储地址队列的地址相关联的依赖性令牌进行缓冲。表示分开的通道的每一个队列能以固定或动态数量的条目来实现。当为固定数量时,越多的条目可用,就可进行越高效的复杂循环处理。但是,具有过多条目花费了要实现的更多面积和能量。在一些情况下(例如,对于聚合式架构),所公开的输入队列5016可共享队列槽。对队列中的槽的使用可静态地分配。
完成队列5020可以是用于响应于由加载操作发布的存储器命令而对从存储器接收的数据进行缓冲的分开的队列集。完成队列5020可用于保存已被调度但用于其的数据还未被接收到的(且因此还未完成)加载操作。因此,完成队列5020可用于对数据和操作流重排序。
操作管理器电路5030(将参照图51至图58更详细地解释)可提供逻辑以用于当将用于提供存储器操作的正确排序的依赖性令牌考虑在内时调度并执行经排队的存储器操作。操作管理器5030可访问操作配置数据结构5024以确定哪些队列被分组在一起来形成给定的存储器操作。例如,操作配置数据结构5024可包括特定的依赖性计数器(或队列)、输入队列、输出队列和完成队列全都分组在一起用于特定的存储器操作。由于每一个连续的存储器操作可被指派不同的队列组,因此对不同队列的访问会跨存储器操作的子程序而交织。知晓所有这些队列,操作管理器电路5030可与操作队列5012、(多个)输入队列5016、(多个)完成队列5020和存储器子***4710对接,以便最初当连续的存储器操作变得“可执行”时将存储器操作发布至存储器子***4710,并随后完成具有来自存储器子***的某个确收的存储器操作。该确收可例如是响应于加载操作命令的数据或对响应于存储操作命令而被存储在存储器中的数据的确收。
图51是根据本公开的实施例的图47A中的存储器排序电路4705的微架构5100的流程图。存储器子***4710可允许由于C语言(以及其他面向对象的程序语言)的语义而对其中存储器操作的排序是错误的程序的非法执行。微架构5100可实施存储器操作(从存储器加载以及向存储器存储的序列)的排序,使得加速硬件4702执行的指令的结果被适当地排序。图示许多本地网络50以表示加速硬件4702中耦合至微架构5100的部分。
从架构的视角看,至少具有两个目的:首先,为了正确地运行总体上顺序的代码;其次,为了在由微架构5100执行的存储器操作中获得高性能。为了确保程序正确性,编译器以某种方式将存储操作与加载操作之间的依赖性表达为阵列p,这将通过将进行解释的依赖性令牌来表达。为了改善性能,微架构5100发现并且并行地发布相对于程序顺序合法的尽可能多的阵列的加载命令。
在一个实施例中,微架构5100可包括上文中参照图50所讨论的操作队列5021、输入队列5016、完成队列5020和操作管理器电路5030,其中各个队列可称为通道。微架构5100可进一步包括多个依赖性令牌计数器5114(例如,每个输入队列一个)、依赖性队列5118的集合(例如,每个输入队列一个)、地址多路复用器5132、存储数据多路复用器5134、完成队列索引多路复用器5136以及加载数据多路复用器5138。在一个实施例中,操作管理器电路5030可指示这些不同的多路复用器生成(将发送至存储器子***4710)的存储器命令5150以及从存储器子***4710往回接收加载命令的响应,如将要解释的那样。
如提及的那样,输入队列5016可包括加载地址队列5122、存储地址队列5124和存储数据队列5126。(小标数字0、1、2是通道标记,并且稍后将在图54和图57A中被引用。)在各种实施例中,这些输入队列可增殖以包含附加通道,从而处理存储器操作处理的附加的并行性。每一个依赖性队列5118可与输入队列5016中的一个相关联。更具体地,标记为B0的依赖性队列5118可与加载地址队列5122相关联,并且标记为B1的依赖性队列可与存储地址队列5124相关联。如果提供了输入队列5016的附加通道,则依赖性队列5118可包括附加的对应通道。
在一个实施例中,完成队列5020可包括输出缓冲器5144和5146的集合,用于从存储器子***4710和完成队列5142接收加载数据以便对地址和数据进行缓冲而根据由操作管理器电路5030维护的索引进行加载操作。操作管理器电路5030可管理索引以确保加载操作的有序执行,并标识被接收到输出缓冲器5144和5146中的、可被移动到完成队列5142中的经调度的加载操作的数据。
更具体地,由于存储器子***4710是乱序的,但是加速硬件4702有序地完成操作,因此微架构5100可利用完成队列5142对存储器操作重排序。可相对于完成队列5142执行三个不同的子操作,即,分配、入列和出列。为了进行分配,操作管理器电路5030可将索引分配到完成队列5142中的完成队列的按顺序的下一个槽中。操作管理器电路可将此索引提供给存储器子***4710,存储器子***4710随后可知晓将用于加载操作的数据写入到其中的槽。为了入列,存储器子***4710可将数据作为条目写入完成队列5142(像随机存取存储器(RAM))中的经索引的按顺序的下一个槽,从而将该条目的状态位置位为有效。为了出列,操作管理器电路5030可呈现存储在该按顺序的下一个槽中的数据以完成加载操作,从而将该条目的状态位置位为无效。无效条目随后可用于新的分配。
在一个实施例中,状态信号5048可以指输入队列5016、完成队列5020、依赖性队列5118和依赖性令牌计数器5114的状态。这些状态例如可包括输入状态、输出状态和控制状态,控制状态可以指与输入或输出相关联的依赖性令牌的存在或缺失。输入状态可包括地址的存在或缺失,而输出状态可包括存储值和可用的完成缓冲器槽的存在或缺失。依赖性令牌计数器5114可以是队列的紧凑表示,并且可跟踪用于任何给定输入队列的依赖性令牌的数量。如果依赖性令牌计数器5114饱和,则没有附加的依赖性令牌可被生成用于新的存储器操作。相应地,存储器排序电路4705会停止调度新存储器操作,直到依赖性令牌计数器5114变成不饱和。
再参照图52,图52是根据本公开的实施例的可执行确定器电路5200的框图。存储器排序电路4705能以若干不同种类的存储器操作(例如,加载和存储)来建立:
ldNo[d,x]result.outN,addr.in64,order.in0,order.out0
stNo[d,x]addr.in64,data.inN,order.in0,order.out0
可执行确定器电路5200可集成为调度器电路5032的部分,并且其可执行逻辑操作以确定给定的存储器操作是否是可执行的以及是否因此准备好被发布至存储器。当对应于队列的存储器变元的队列具有数据且相关联的依赖性令牌存在时,可执行存储器操作。这些存储器变元可包括例如(指示输入队列5016的通道的)输入队列标识符5210、(指示完成队列5020的通道的)输出队列标识符5220、依赖性队列标识符5230(例如,应当参考什么依赖性队列或计数器)和操作类型指示符5240(例如,加载操作或存储操作)。
这些存储器变元可在操作队列5012内被排队,并且用于对与来自存储器和加速硬件4702的传入地址和数据相关联的存储器操作的发布进行调度。(参见图53。)传入状态信号5048可与这些标识符逻辑地组合,随后结果可(例如,通过AND门5250)相加以输出可执行信号,例如,当存储器操作为可执行时,该可执行信号被断言。传入状态信号5048可包括用于输入队列标识符5210的输入状态5212、用于输出队列标识符5220的输出状态5222以及用于依赖性队列标识符5230的控制状态5232(与依赖性令牌相关)。(例如,存储器请求的)字段可例如被包括在上述格式中,上述格式存储用于指示来使用危险检测硬件的一个或多个位。
为了进行加载操作,作为示例,当加载操作具有用于对完成队列5142中的加载结果(输出状态)进行缓冲的地址(输入状态)和空间时,存储器排序电路4705可发布加载命令。类似地,当存储操作既具有地址又具有数据值(输入状态)时,存储器排序电路4705可发布用于存储操作的存储命令。相应地,状态信号5048可传递这些状态信号所涉及的队列的空(或满)等级。随后,操作类型可取决于什么地址和数据应当可用以表明逻辑是否产生可执行信号。
为了实现依赖性排序,调度器电路5032可扩展存储器操作以包括在示例加载和存储操作中的上述划线的依赖性令牌。控制状态5232可指示依赖性令牌在由依赖性队列标识符5230标识的依赖性队列内是否可用,该依赖性队列可以是依赖性队列5118(对于传入存储器操作)或依赖性令牌计数器5114(对于完成的存储器操作)中的一个。在此构想下,依赖性存储器操作在该存储器操作完成时要求附加的排序令牌来执行并生成附加的排序令牌,其中,完成意味着来自存储器操作的结果的数据已变得可用于程序后续的存储器操作。
在一个实施例中,进一步参照图51,取决于当前正在调度加载操作还是存储操作供执行,操作管理器电路5030可指示地址多路复用器5132选择在加载地址队列5122或存储地址队列5124中被缓冲的地址变元。如果它是存储操作,则操作管理器电路5030也可指示存储数据多路复用器5134从存储数据队列5126选择对应数据。操作管理器电路5030也可指示完成队列索引多路复用器5136检索完成队列5020内的根据队列状态和/或程序顺序经索引的加载操作条目,从而完成加载操作。操作管理器电路5030也可指示加载数据多路复用器5138将从存储器子***4710接收的数据选到完成队列5020中,用于正等待完成的加载操作。以此方式,操作管理器电路5030可指示对着手形成存储器命令5150(例如,加载命令或存储命令)或执行电路5034正等待的用于完成存储器操作的输入的选择。
图53是根据本公开的一个实施例的执行电路5034的框图,该执行电路5034可包括优先级编码器5306、选择电路5308,该选择电路5308生成(多个)输出控制线5310。在一个实施例中,执行电路5034可访问已确定为可执行的(图52)(操作队列5012中的)经排队的存储器操作。执行电路5034也可接收调度5304A、5304B、5304C,这些调度5304A、5304B、5304C用于已排好队且也指示为准备好发布至存储器的多个经排队的存储器操作。优先级编码器5306因此可接收已经被调度的可执行存储器操作的标识,并且执行某些规则(或遵循特定逻辑)以从进入的具有要首先被执行的优先级的那些存储器操作中选择存储器操作。优先级编码器5306可输出选择器信号5307,该选择器信号5307标识具有最高优先级且因此已被选择的经调度的存储器操作。
优先级编码器5306例如可以是将多个二进制输入压缩为较少数量的输出(包括可能仅是一个输出)的电路(诸如,状态机或更简单的转换器)。优先级编码器的输出是从最高有效输出位的零开始的原始号码的二进制表示。因此,在一个实施例中,当存储器操作0(“零”)、存储器操作一(“1”)和存储器操作二(“2”)是可执行的且被调度时,分别对应于5304A、5304B和5304C。优先级编码器5306可配置成用于将选择器信号5307输出至选择电路5308,该选择器信号5307将存储器操作零指示为具有最高优先级的存储器操作。在一个实施例中,选择电路5308可以是多路复用器,并且可配置成用于响应于来自优先级编码器5306的选择器信号(且指示对最高优先级的存储器操作的选择)将其(例如,对存储器操作零的)选择输出到控制线5310上作为控制信号。该控制信号可去往如参照图51所讨论的多路复用器5132、5134、5136和/或5138以填充下一个将发布(被发送)到存储器子***4710的存储器命令5150。存储器命令的传输可理解为向存储器子***4710发布存储器操作。
图54是根据本公开的实施例的逻辑和二进制两种形式的示例性加载操作5400的框图。往回参照图52,加载操作5400的逻辑表示可包括作为输入队列标识符5210的(对应于加载地址队列5122的)通道零(“0”)以及作为输出队列标识符5220的(对应于输出缓冲器5144的)完成通道一(“1”)。依赖性队列标识符5230可包括两个标识符:用于传入依赖性令牌的(对应于依赖性队列5118中的第一个的)通道B0以及用于传出依赖性令牌的计数器C0。操作类型5240具有“加载”指示(其也可以是数值指示符)以指示存储器操作是加载操作。在逻辑存储器操作的逻辑表示下方的是出于示例性目的的二进制表示,例如其中加载由“00”来指示。图54中的加载操作可被扩展以包括其他配置,诸如,存储操作(图56A)或其他类型的存储器操作(诸如,围栏)。
出于解释的目的,参照图55A-55B、56A-56B和57A-57G,将利用简化的示例来说明由存储器排序电路4705进行的存储器排序的示例。对于此示例,以下代码包括阵列p,该阵列p通过索引i和i+2来访问:
for(i){
temp=p[i];
p[i+2]=temp;
}
对于此示例,假设阵列p包含0、1、2、3、4、5、6,并且在循环执行的结束时,阵列p将包含0、1、0、1、0、1、0。该代码可通过将循环展开来变化,如图55A和图55B中所示。真实的地址依赖性由图55A中的箭头标注,即,在每一种情况下,加载操作依赖于向相同地址的存储操作。例如,对于此类依赖性中的第一个,向p[2]的存储(例如,写入)需要在从p[2]的加载(例如,读取)之前发生,对于此类依赖性中的第二个,向p[3]的存储需要在从p[3]的加载之前发生,以此类推。由于编译器将是悲观型的,因此编译器标注两个存储器操作load p[i]与store[i+2]之间的依赖性。注意,仅在有些时候读取和写入才确实发生冲突。微架构5100设计成在当没有至相同地址的冲突的同时存储器操作可向前移动的情况下提取存储器级并行性。加载操作尤其是这种情况,由于要等待在先的依赖性存储操作完成,加载操作在代码执行中暴露等待时间。在图55B中的示例代码中,安全的重排序由展开代码左边的箭头标注。
微架构可执行此重排序的方式参照图56A-56B和57A-57G来讨论。注意,此方式不是尽可能最优化的,因为微架构5100可能无法每个周期将存储器命令发送至存储器。然而,利用最少的硬件,微架构通过当操作数(例如,对于存储的地址和数据,或对于加载的地址)和依赖性令牌可用时执行存储器操作来支持依赖性流。
图56A是根据本公开的实施例的用于加载操作5602和存储操作5604的示例性存储器变元的框图。已参照图54讨论的这些或类似的存储器变元,并且在此将不再重复。然而,要注意,存储操作5604不具有用于输出队列标识符的指示符,因为数据正在被输出到加速硬件4702。相反,如输入队列标识符存储器变元中所指示,输入队列5016的通道1中的存储地址和通道2中的数据将被调度,以便在存储器命令中传输至存储器子***4710,从而完成存储操作5604。此外,依赖性队列的输入通道和输出通道两者都以计数器来实现。由于图55A和图55B中所显示的加载操作和存储操作是互相依赖的,因此计数器可在代码流内的加载操作与存储操作之间轮转。
图56B是图示根据本公开的实施例的、通过图51中的存储器排序电路的微架构5100进行加载操作和存储操作(诸如,图55A中的加载操作5602和存储操作5604)的流的框图。为了简化解释,不是所有组件都被显示,但是可往回引用图51中显示的附加组件。指示加载操作5602的“加载”和存储操作5604的“存储”的各个椭圆形覆盖在微架构的组件中的一些组件上,作为对队列的各通道如何正被用作存储器操作,如何通过微架构5100被排队和排序的指示。
图57A、57B、57C、57D、57E、57F、57G和57H是图示根据本公开的实施例的通过图56B中的微架构的队列对图55A和图55B中的示例性程序进行的加载操作和存储操作的功能性流的框图。每一个图可对应于由微架构5100进行的下一处理周期。斜体的值是(进入队列的)传入值,而粗体的值是(离开队列的)传出值。普通字体的所有其他所有值是已经存在于队列中的保留值。
在图57A中,地址p[0]正传入加载地址队列5122,并且地址p[2]正传入存储地址队列5124,从而开始控制流过程。注意,用于加载地址队列的依赖性输入的计数器C0为“1”,而用于依赖性输出的计数器C1为零。相比之下,C0的“1”对于存储操作指示依赖性出值(outvalue)。这指示了对于p[0]的加载操作的传入依赖性以及对于p[2]的存储操作的传出依赖性。然而,这些值还不是活跃的,并且将在图57B中以此方式变得活跃。
在图57B中,地址p[0]是粗体的以指示它在该周期中正传出。新地址p[1]正传入加载地址队列,并且新地址p[3]正传入存储地址队列。完成队列5142中的零(“0”)值位也正传入,其指示针对那个经索引条目存在的任何数据都是无效的。如所提及的那样,计数器C0和C1的值现在被指示为传入,并且因此现在对于该周期是活跃的。
在图57C中,传出地址p[0]现在已离开加载地址队列,并且新地址p[2]正传入加载地址队列。并且数据(“0”)正传入地址p[0]的完成队列。有效性位被置位为“1”以指示完成队列中的数据是有效的。此外,新地址p[4]正传入存储地址队列。计数器C0的值被指示为传出,并且计数器C1的值被指示为传入。C1的值“1”指示向地址p[4]的存储操作的传入依赖性。
注意,用于最新加载操作的地址p[2]依赖于首先需要由针对地址p[2]的存储操作存储的值,其在存储地址队列的顶部。此后,用于从地址p[2]进行的加载操作的完成队列中的经索引条目可保持被缓冲,直到来自向地址p[2]的存储操作的数据完成(参见图57F-57H)。
在图57D中,数据(“0”)正从用于地址p[0]的完成队列传出,因此它正被向外发送到加速硬件4702。此外,新地址p[3]正传入加载地址队列,并且新地址p[5]正传入存储地址队列。计数器C0和C1的值保持不变。
在图57E中,用于地址p[2]的值(“0”)正传入存储数据队列,同时新地址p[4]进入加载地址队列且新地址p[6]进入存储地址队列。计数器C0和C1的值保持不变。
在图57F中,存储数据队列中用于地址p[2]的值(“0”)和存储地址队列中的地址p[2]两者都是传出值。类似地,计数器C1的值被指示为传出,而计数器C0的值(“0”)保持不变。此外,新地址p[5]正传入加载地址队列,并且新地址p[7]正传入存储地址队列。
在图57G中,值(“0”)正传入以指示在完成队列5142中的经索引的值是无效的。地址p[1]是粗体的以指示它正从加载地址队列传出,同时新地址p[6]正传入加载地址队列。新地址p[8]也正传入存储地址队列。计数器C0的值正作为“1”传入,这对应于针对地址p[6]的加载操作的传入依赖性以及针对地址p[8]的存储操作的传出依赖性。计数器C1的值现在是“0”,并且被指示为传出。
在图57H中,数据值“1”正传入完成队列5142,同时有效性位也作为“1”传入,这意味着经缓冲的数据是有效的。这是完成针对地址p[2]的加载操作所需的数据。回忆一下,该数据必须首选被存储到地址p[2],这在图57F中发生。计数器C0的值“0”正传出,而计数器C1的值“1”正传入。此外,新地址p[7]正传入加载地址队列,并且新地址p[9]正传入存储地址队列。
在当前实施例中,凭借用于加载操作和存储操作的“0”和“1”之间的弹跳的(bouncing)依赖性令牌,执行图55A和图55B的代码的过程可继续进行。这是由于p[i]与p[i+2]之间紧密的依赖性。具有较不频繁依赖性的其他代码能以较慢速率生成依赖性令牌,并因此以较慢速率重置计数器C0和C1,从而导致(对应于进一步语义分离的存储器操作的)较高值的令牌的生成。
图58是根据本公开的实施例的用于对加速硬件与乱序存储器子***之间的存储器操作进行排序的方法5800的流程图。方法5800可由包括硬件(例如,电路、专用逻辑和/或可编程逻辑)、软件(例如,在计算机***上可执行以执行硬件仿真的指令)或硬件和软件的组合的***来执行。在说明性示例中,方法5800可由存储器排序电路4705以及该存储器排序电路4705的各子组件执行。
更具体地,参照图58,方法5800可开始于:存储器排序电路在该存储器排序电路的操作队列中对存储器操作排队(5810)。存储器操作和控制变元可构成如经排队的存储器操作,其中,如先前所讨论,存储器操作和控制变元被映射至存储器排序电路内的某些队列。存储器排序电路可运作以将存储器操作发布至与加速硬件相关联的存储器,从而确保这些存储器操作按程序顺序完成。方法5800可继续进行以下步骤:存储器排序电路在输入队列的集合中从加速硬件接收与存储器操作中的第二存储器操作相关联的存储器的地址(5820)。在一个实施例中,输入队列的集合中的加载地址队列是用于接收该地址的通道。在另一实施例中,输入队列的集合中的存储地址队列是用于接收该地址的通道。方法5800可继续进行以下步骤:存储器排序电路从加速硬件接收与该地址相关联的依赖性令牌,其中,该依赖性令牌指示对由存储器操作中的第一存储器操作生成的数据的依赖性,该第一存储器操作先于第二存储器操作(5830)。在一个实施例中,依赖性队列的通道用于接收该依赖性令牌。第一存储器操作可以是加载操作或存储操作。
方法5800可继续进行以下步骤:存储器排序电路响应于接收到该依赖性令牌和与该依赖性令牌相关联的地址而调度第二存储器操作向存储器的发布(5840)。例如,当加载地址队列接收用于加载操作的地址变元的地址且依赖性队列接收用于加载操作的控制变元的依赖性令牌时,存储器排序电路可将第二存储器操作的发布调度为加载操作。方法5800可继续进行以下步骤:存储器排序电路响应于第一存储器操作的完成而(例如,在命令中)将第二存储器操作发布至存储器(5850)。例如,如果第一存储器操作是存储,则完成可通过输入队列的集合中的存储数据队列中的数据已被写入存储器中的地址的确收来验证。类似地,如果第一存储器操作是加载操作,则完成可通过针对加载操作的从存储器接收到数据来验证。
9.总结
ExaFLOP规模的超级计算可能是高性能计算中的挑战,该挑战可能无法由常规的冯·诺依曼架构满足。为了实现ExaFLOP,CSA的实施例提供异构空间阵列,该异构空间阵列针对(例如,编译器产生的)数据流图的直接执行。除了布置CSA的实施例的架构原理之外,上文还描述并评估了CSA的实施例,这些CSA的实施例显示出相比现有产品的高10x(10倍)的性能和能量。编译器生成的代码相比路线图架构可具有显著的性能和能量增益。作为异构的参数化架构,CSA的实施例可易于适配于所有计算用例。例如,CSA的移动版本可调整为32位,而聚焦机器学习的阵列的特征可以是显著数量的向量化8位乘法单元。CSA的实施例的主要优势是与从超级计算和数据中心到物联网的所有形式的计算有关的高性能、极其高能效且具有特性的。
在一个实施例中,存储器电路包括:存储器接口电路,用于服务来自处理元件的空间阵列的对存储在多个高速缓存区块中的数据的存储器请求;以及在所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路,其中,对于来自所述存储器接口电路的、被(例如,被编译器)标记有潜在的动态数据依赖性的、对第一危险检测电路的第一高速缓存区块内的地址的推测性存储器加载请求,所述第一危险检测电路用于:标记所述地址以用于跟踪对所述地址的其他存储器请求;将来自所述地址的数据存储在推测性完成存储中;以及当对于所述推测性存储器加载请求接收到存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。所述推测性完成存储可以在所述存储器接口电路中,并且在由所述存储器接口电路接收到所述存储器依赖性令牌时,可将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。所述存储器电路可进一步包括第二危险检测电路,所述第二危险检测电路用于:对于(例如,在检测到)标记有所述潜在的动态数据依赖性的对应的逻辑上在先的存储请求,当所述对应的逻辑上在先的存储请求针对所述第二危险检测电路的第二高速缓存区块内的且不是所述第一危险检测电路的所述第一高速缓存区块内的地址时,发送所述存储器依赖性令牌,以使来自所述推测性完成存储的数据被发送到处理元件的所述空间阵列。未标记有潜在的动态依赖性的存储器访问可绕过所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路。所述第一危险检测电路在标记有所述潜在的动态数据依赖性的逻辑上在先的存储请求针对所述第一高速缓存区块内的地址时可指示检测到错误。所述第一危险检测电路可进一步响应于所述推测性存储器加载请求,将来自所述逻辑上在先的存储请求的经更新的数据发送到处理元件的所述空间阵列。所述推测性完成存储可以在所述存储器接口电路中,并且所述第一危险检测电路可以用所述经更新的数据替换所述推测性完成存储中的数据,并且可将所述存储器依赖性令牌发送到所述存储器接口电路,以使所述经更新的数据从所述推测性完成存储被发送到处理元件的所述空间阵列。所述存储器接口电路可将所述经更新的数据和所述存储器依赖性令牌发送到第二存储器接口电路,所述第二存储器接口电路具有标记有所述潜在的动态数据依赖性的第二推测性存储器加载请求。该实施例的存储器电路可包括用于检测所述动态数据依赖性的指示的电路,例如,其中所述动态数据依赖性在包括所述推测性存储器加载请求的程序的运行时之前由编译器标记。
在另一实施例中,一种方法包括:利用存储器接口电路,接收来自处理元件的空间阵列的对存储在多个高速缓存区块中的数据的存储器请求,所述多个高速缓存区块具有在所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路;对于来自所述存储器接口电路的、标记有潜在的动态数据依赖性的、对所述第一危险检测电路的第一高速缓存区块内的地址的推测性存储器加载请求,利用所述第一危险检测电路标记所述地址,以跟踪对所述地址的其他存储器请求;将来自所述地址的数据存储在推测性完成存储中;以及当对于所述推测性存储器加载请求接收到存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。所述推测性完成存储可以在所述存储器接口电路中,并且所述方法可进一步包括:在由所述存储器接口电路接收到所述存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。所述方法可包括:对于标记有所述潜在的动态数据依赖性的对应的逻辑上在先的存储请求,当所述对应的逻辑上在先的存储请求针对第二危险检测电路的第二高速缓存区块内的且不是所述第一危险检测电路的所述第一高速缓存区块内的地址时,从所述第二危险检测电路发送所述存储器依赖性令牌,以使来自所述推测性完成存储的数据被发送到处理元件的所述空间阵列。所述方法可包括:对于未标记有潜在的动态依赖性的存储器访问,绕过所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路。所述方法可包括:当标记有所述潜在的动态数据依赖性的逻辑上在先的存储请求针对所述第一高速缓存区块内的地址时,指示检测到错误。所述指示步骤可包括:所述第一危险检测电路响应于所述推测性存储器加载请求,将来自所述逻辑上在先的存储请求的经更新的数据发送到处理元件的所述空间阵列。所述推测性完成存储可以在所述存储器接口电路中,并且所述方法可进一步包括:所述第一危险检测电路用所述经更新的数据替换所述推测性完成存储中的数据,并且将所述存储器依赖性令牌发送到所述存储器接口电路,以使所述经更新的数据从所述推测性完成存储被发送到处理元件的所述空间阵列。所述方法可包括:(例如,所述存储器接口电路)将所述经更新的数据和所述存储器依赖性令牌发送到第二存储器接口电路,所述第二存储器接口电路具有标记有所述潜在的动态数据依赖性的第二推测性存储器加载请求。
在又一实施例中,一种存储代码的非瞬态机器可读介质,所述代码当由机器执行时使所述机器执行方法,所述方法包括:利用存储器接口电路,接收来自处理元件的空间阵列的对存储在多个高速缓存区块中的数据的存储器请求,所述多个高速缓存区块具有在所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路;对于来自所述存储器接口电路的、标记有潜在的动态数据依赖性的、对所述第一危险检测电路的第一高速缓存区块内的地址的推测性存储器加载请求,利用所述第一危险检测电路标记所述地址,以跟踪对所述地址的其他存储器请求;将来自所述地址的数据存储在推测性完成存储中;以及当对于所述推测性存储器加载请求接收到存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。所述推测性完成存储可以在所述存储器接口电路中,并且所述方法可进一步包括:在由所述存储器接口电路接收到所述存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。所述方法可包括:对于标记有所述潜在的动态数据依赖性的对应的逻辑上在先的存储请求,当所述对应的逻辑上在先的存储请求针对第二危险检测电路的第二高速缓存区块内的且不是所述第一危险检测电路的所述第一高速缓存区块内的地址时,从所述第二危险检测电路发送所述存储器依赖性令牌,以使来自所述推测性完成存储的数据被发送到处理元件的所述空间阵列。所述方法可包括:对于未标记有潜在的动态依赖性的存储器访问,绕过所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路。所述方法可包括:当标记有所述潜在的动态数据依赖性的逻辑上在先的存储请求针对所述第一高速缓存区块内的地址时,指示检测到错误。所述指示步骤可包括:所述第一危险检测电路响应于所述推测性存储器加载请求,将来自所述逻辑上在先的存储请求的经更新的数据发送到处理元件的所述空间阵列。所述推测性完成存储可以在所述存储器接口电路中,并且所述方法可进一步包括:所述第一危险检测电路用所述经更新的数据替换所述推测性完成存储中的数据,并且将所述存储器依赖性令牌发送到所述存储器接口电路,以使所述经更新的数据从所述推测性完成存储被发送到处理元件的所述空间阵列。所述方法可包括:(例如,所述存储器接口电路)将所述经更新的数据和所述存储器依赖性令牌发送到第二存储器接口电路,所述第二存储器接口电路具有标记有所述潜在的动态数据依赖性的第二推测性存储器加载请求。
在另一实施例中,一种存储器电路包括:用于服务来自处理元件的空间阵列的对存储在多个高速缓存区块中的数据的存储器请求的装置;以及第一装置,所述第一装置用于:对于来自所述存储器接口电路的、被(例如,编译器)标记有潜在的动态数据依赖性的、对所述第一装置的第一高速缓存区块内的地址的推测性存储器加载请求,标记所述地址以跟踪对所述地址的其他存储器请求;将来自所述地址的数据存储在推测性完成存储中;以及当对于所述推测性存储器加载请求接收到存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。。
在一个实施例中,一种处理器包括:核,所述核具有解码器和执行单元,所述解码器用于将指令解码为经解码指令,所述执行单元用于执行所述经解码指令以执行第一操作;多个处理元件;以及互连网络,在所述多个处理元件之间,所述互连网络用于接收包括多个节点的数据流图的输入,其中,所述数据流图用于被覆盖到所述互连网络和所述多个处理元件中,并且每一个节点被表示为所述多个处理元件中的数据流操作器,并且所述多个处理元件用于当相应的传入操作数集到达所述多个处理元件的数据流操作器中的每一个时执行第二操作。当来自下游处理元件的回压信号指示所述下游处理元件中的存储不可用于所述多个处理元件中的一处理元件时,该处理元件可停止执行。所述处理器可包括流控制路径网络,所述流控制路径网络用于根据所述数据流图携带所述回压信号。数据流令牌可使来自接收所述数据流令牌的数据流操作器的输出被发送到所述多个处理元件中的特定处理元件的输入缓冲器。所述第二操作可包括存储器访问,并且所述多个处理元件包括存储器访问数据流操作器,所述存储器访问数据流操作器用于直到从逻辑上在先的数据流操作器接收到存储器依赖性令牌才执行所述存储器访问。所述多个处理元件可包括第一类型的处理元件以及第二不同类型的处理元件。
在另一实施例中,一种方法包括:利用处理器的核的解码器将指令解码为经解码指令;利用所述处理器的所述核的执行单元执行所述经解码指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图覆盖到所述处理器的多个处理元件以及所述处理器的所述多个处理元件之间的互连网络中,并且每一个节点被表示为所述多个处理元件中的数据流操作器;以及当相应的传入操作数集到达所述多个处理元件的数据流操作器中每一个时,利用所述互连网络和所述多个处理元件执行所述数据流图的第二操作。所述方法可包括:当来自下游处理元件的回压信号指示所述下游处理元件中的存储不可用于所述多个处理元件中的一处理元件的输出时,停止由该处理元件进行的执行。所述方法可包括:根据所述数据流图,在流控制路径上发送所述回压信号。数据流令牌可使来自接收所述数据流令牌的数据流操作器的输出被发送到所述多个处理元件中的特定处理元件的输入缓冲器。所述方法可包括:直到从逻辑上在先的数据流操作器接收到存储器依赖性令牌,才执行存储访问,其中,所述第二操作包括所述存储器访问,并且所述多个处理元件包括存储器访问数据流操作器。所述方法可包括:提供所述多个处理元件中的第一类型的处理元件以及第二不同类型的处理元件。
在又一实施例中,一种装置包括:在多个处理元件之间的数据路径网络;以及在所述多个处理元件之间的流控制路径网络,其中,所述数据路径网络和所述流控制路径网络用于接收包括多个节点的数据流图的输入,所述数据流图用于被覆盖到所述数据路径网络、所述流控制路径网络和所述多个处理元件中,并且每一个节点被表示成所述多个处理元件中的数据流操作器,并且所述多个处理元件用于当相应的传入操作数集到达所述多个处理元件的数据流操作器中的每一个处时执行第二操作。所述流控制路径网络可根据所述数据流图将回压信号携带到多个数据流操作器。在所述数据路径网络上被发送到数据流操作器的数据流令牌可使来自所述数据流操作器的输出在所述数据路径网络上被发送到所述多个处理元件中的特定处理元件的输入缓冲器。所述数据路径网络可以是用于根据所述所述数据流图来将相应的输入操作数集携带到数据流操作器中的每一个的静态电路交换型网络。所述流控制路径网络可根据所述数据流图从下游处理元件传输回压信号以指示所述下游处理元件中的存储不可用于所述处理元件的输出。所述数据路径网络的至少一个数据路径和所述流控制路径网络的至少一个流控制路径可形成具有回压控制的通道化电路。所述流控制路径网络可在所述多个处理元件中的至少两个处理元件处串行地流水线化。
在另一实施例中,一种方法包括:接收包括多个节点的数据流图的输入;将所述数据流图覆盖到处理器的多个处理元件、所述多个处理元件之间的数据路径网络以及所述多个处理元件之间的流控制路径网络中,并且每一个节点被表示为所述多个处理元件中的数据流操作器。所述方法可包括:根据所述数据流图,利用所述流控制路径网络将回压信号携带到多个数据流操作器。所述方法可包括:在所述数据路径网络上将数据流令牌发送到数据流操作器,以使来自所述数据流操作器的输出在所述数据路径网络上被发送到所述多个处理元件中的特定处理元件的输入缓冲器。所述方法可包括:根据所述数据流图设置所述数据路径网络的多个切换装置和/或所述流控制路径网络的多个切换装置以将相应的输入操作数集携带到数据流操作器中的每一个,其中,所述数据路径网络是静态电路交换型网络。所述方法可包括:根据所述数据流图,利用所述流控制路径网络从下游处理元件传输回压信号,以指示所述下游处理元件中的存储不可用于所述处理元件的输出。所述方法可包括:利用所述数据路径网络的至少一个数据路径和所述流控制路径网络的至少一个流控制路径来形成具有回压控制的通道化电路。
在又一实施例中,一种处理器包括:核,所述核具有解码器和执行单元,所述解码器用于将指令解码为经解码指令,所述执行单元用于执行所述经解码指令以执行第一操作;多个处理元件;以及网络装置,在所述多个处理元件之间,所述网络装置用于接收包括多个节点的数据流图的输入,其中,所述数据流图用于被覆盖到所述网络装置和所述多个处理元件中,并且每一个节点被表示为所述多个处理元件中的数据流操作器,并且所述多个处理元件用于当相应的传入操作数集到达所述多个处理元件的数据流操作器中的每一个时执行第二操作。
在另一实施例中,一种设备包括:在多个处理元件之间的数据路径装置;以及在所述多个处理元件之间的流控制路径装置,其中,所述数据路径装置和所述流控制路径装置用于接收包括多个节点的数据流图的输入,所述数据流图用于被覆盖到所述数据路径装置、所述流控制路径装置和所述多个处理元件中,并且每一个节点被表示成所述多个处理元件中的数据流操作器,并且所述多个处理元件用于当相应的传入操作数集到达所述多个处理元件的数据流操作器中的每一个处时执行第二操作。
在一个实施例中,一种处理器包括:核,所述核具有解码器和执行单元,所述解码器用于将指令解码为经解码指令,所述执行单元用于执行所述经解码指令以执行第一操作;以及处理元件的阵列,所述处理元件的阵列用于接收包括多个节点的数据流图的输入,其中,所述数据流图用于被覆盖到所述处理元件的阵列,并且每一个节点被表示为所述处理元件的阵列中的数据流操作器,并且所述处理元件的阵列用于当传入操作数集到达所述处理元件的阵列时执行第二操作。所述处理元件的阵列可以直到传入操作数集到达所述处理元件的阵列且所述处理元件的阵列中的存储可用于所述第二操作的输出时才执行所述第二操作。所述处理元件的阵列可包括用于将数据流令牌和控制令牌携带到多个数据流操作器的网络(或(多个)通道)。所述第二操作可包括存储器访问,并且所述处理元件的阵列可包括存储器访问数据流操作器,所述存储器访问数据流操作器用于直到从逻辑上在先的数据流操作器接收到存储器依赖性令牌才执行所述存储器访问。每一个处理元件可仅执行所述数据流图的一个或两个操作。
在另一实施例中,一种方法包括:利用处理器的核的解码器将指令解码为经解码指令;利用所述处理器的所述核的执行单元执行所述经解码指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图覆盖到所述处理器的处理元件的阵列中,并且每一个节点被表示为所述处理元件的阵列中的数据流操作器;以及当传入操作数集到达所述处理元件的阵列处时,利用所述处理元件的阵列执行所述数据流图的第二操作。所述处理元件的阵列可以直到传入操作数集到达所述处理元件的阵列且所述处理元件的阵列中的存储可用于所述第二操作的输出时才执行所述第二操作。所述处理元件的阵列可包括将数据流令牌和控制令牌携带到多个数据流操作器的网络。所述第二操作可包括存储器访问,并且所述处理元件的阵列包括存储器访问数据流操作器,所述存储器访问数据流操作器用于直到从逻辑上在先的数据流操作器接收到存储器依赖性令牌才执行所述存储器访问。每一个处理元件可仅执行所述数据流图的一个或两个操作。
在又一实施例中,一种非暂态机器可读介质存储有代码,所述代码当由机器执行时使所述机器执行方法,所述方法包括:利用处理器的核的解码器将指令解码为经解码指令;利用所述处理器的所述核的执行单元执行所述经解码指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图覆盖到所述处理器的处理元件的阵列中,并且每一个节点被表示为所述处理元件的阵列中的数据流操作器;以及当传入操作数集到达所述处理元件的阵列处时,利用所述处理元件的阵列执行所述数据流图的第二操作。所述处理元件的阵列可以直到传入操作数集到达所述处理元件的阵列且所述处理元件的阵列中的存储可用于所述第二操作的输出时才执行所述第二操作。所述处理元件的阵列可包括将数据流令牌和控制令牌携带到多个数据流操作器的网络。所述第二操作可包括存储器访问,并且所述处理元件的阵列包括存储器访问数据流操作器,所述存储器访问数据流操作器用于直到从逻辑上在先的数据流操作器接收到存储器依赖性令牌才执行所述存储器访问。每一个处理元件可仅执行所述数据流图的一个或两个操作。
在另一实施例中,一种处理器包括:核,所述核具有解码器和执行单元,所述解码器用于将指令解码为经解码指令,所述执行单元用于执行所述经解码指令以执行第一操作;以及用于接收包括多个节点的数据流图的输入的装置,其中,所述数据流图用于被覆盖到所述装置,并且每一个节点被表示为所述装置中的数据流操作器,并且所述装置用于当传入操作数集到达所述装置时执行第二操作。
在一个实施例中,处理器包括:核,所述核具有解码器和执行单元,所述解码器用于将指令解码为经解码指令,所述执行单元用于执行所述经解码指令以执行第一操作;多个处理元件;以及互连网络,在所述多个处理元件之间,所述互连网络用于接收包括多个节点的数据流图的输入,其中,所述数据流图用于被覆盖到所述互连网络和所述多个处理元件中,并且每一个节点被表示为所述多个处理元件中的数据流操作器,并且所述多个处理元件用于当传入操作数集到达所述多个处理元件时执行第二操作。所述处理器可进一步包括多个配置控制器,每一个配置控制器耦合到所述多个处理元件的相应子集,并且每一个配置控制器用于从存储加载配置信息并且引起所述多个处理元件的相应子集根据所述配置信息耦合。所述处理器可包括多个配置高速缓存,每一个配置控制器耦合至相应的配置高速缓存以取出用于所述多个处理元件的相应子集的配置信息。由所述执行单元执行的所述第一操作可以将配置信息预取到所述多个配置高速缓存中的每一个中。所述多个配置控制器中的每一个可包括重配置电路,所述重配置电路用于:在从所述多个处理元件的相应子集中的至少一个处理元件接收到配置错误消息时引起对所述至少一个处理元件的重配置。所述多个配置控制器中的每一个可包括重配置电路,所述重配置电路用于:在接收到重配置请求消息时引起对所述多个处理元件的相应子集的重配置;以及禁用与所述多个处理元件的相应子集的通信,直到所述重配置完成。所述处理器可包括多个异常聚合器,并且每一个异常聚合器耦合至所述多个处理元件的相应子集,从便从所述多个处理元件的相应子集收集异常并将所述异常转发至所述核以用于维护。所述处理器可包括多个提取控制器,每一个提取控制器耦合至所述多个处理元件的相应子集,并且每一个提取控制器用于使来自所述多个处理元件的相应子集的状态数据被保存到存储器。
在另一实施例中,一种方法包括:利用处理器的核的解码器将指令解码为经解码指令;利用所述处理器的所述核的执行单元执行所述经解码指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图覆盖到所述处理器的多个处理元件以及所述处理器的所述多个处理元件之间的互连网络中,并且每一个节点被表示为所述多个处理元件中的数据流操作器;以及当传入操作数集到达所述多个处理元件时,利用所述互连网络和所述多个处理元件执行所述数据流图的第二操作。所述方法可包括:从存储加载用于所述多个处理元件的相应子集的配置信息;以及根据所述配置信息引起针对所述多个处理元件的每一个相应子集的耦合。所述方法可包括:从多个配置高速缓存中的相应配置高速缓存取出用于所述多个处理元件的相应子集的配置信息。由所述执行单元执行的所述第一操作可以是将配置信息预取到所述多个配置高速缓存中的每一个中。所述方法可包括:在从所述多个处理元件的相应子集中的至少一个处理元件接收到配置错误消息时,引起对所述至少一个处理元件的重配置。所述方法可包括:在接收到重配置请求消息时引起对所述多个处理元件的相应子集的重配置;以及禁用与所述多个处理元件的相应子集的通信,直到所述重配置完成。所述方法可包括:从所述多个处理元件的相应子集收集异常;以及将所述异常转发至核以用于维护。所述方法可包括:使来自所述多个处理元件的相应子集的状态数据被保存到存储器。
在又一实施例中,一种非暂态机器可读介质存储有代码,所述代码当由机器执行时使所述机器执行方法,所述方法包括:利用处理器的核的解码器将指令解码为经解码指令;利用所述处理器的所述核的执行单元执行所述经解码指令以执行第一操作;接收包括多个节点的数据流图的输入;将所述数据流图覆盖到所述处理器的多个处理元件以及所述处理器的所述多个处理元件之间的互连网络中,并且每一个节点被表示为所述多个处理元件中的数据流操作器;以及当传入操作数集到达所述多个处理元件时,利用所述互联网络和所述多个处理元件执行所述数据流图的第二操作。所述方法可包括:从存储加载用于所述多个处理元件的相应子集的配置信息;以及根据所述配置信息引起针对所述多个处理元件的每一个相应子集的耦合。所述方法可包括:从多个配置高速缓存中的相应配置高速缓存取出用于所述多个处理元件的相应子集的配置信息。由所述执行单元执行的所述第一操作可以是将配置信息预取到所述多个配置高速缓存中的每一个中。所述方法可进一步包括:在从所述多个处理元件的相应子集中的至少一个处理元件接收到配置错误消息时,引起对所述至少一个处理元件的重配置。所述方法可包括:在接收到重配置请求消息时引起对所述多个处理元件的相应子集的重配置;以及禁用与所述多个处理元件的相应子集的通信,直到所述重配置完成。所述方法可包括:从所述多个处理元件的相应子集收集异常;以及将所述异常转发至核以用于维护。所述方法可包括:使来自所述多个处理元件的相应子集的状态数据被保存到存储器。
在另一实施例中,一种处理器包括:核,所述核具有解码器和执行单元,所述解码器用于将指令解码为经解码指令,所述执行单元用于执行所述经解码指令以执行第一操作;多个处理元件;以及在所述多个而处理元件之间的装置,所述装置用于接收包括多个节点的数据流图的输入,其中,所述数据流图用于被覆盖到所述装置和所述多个处理元件中,并且每一个节点被表示为所述多个处理元件中的数据流操作器,并且所述多个处理元件用于当传入操作数集到达所述多个处理元件时执行第二操作。
在又一实施例中,一种装置包括数据存储设备,所述数据存储设备存储代码,所述代码当由硬件处理器执行时使所述硬件处理器执行本文中公开的方法。装置可以如在“具体实施方式”中所述。方法可以如在“具体实施方式”中所述。
在另一实施例中,一种非暂态机器可读介质存储有代码,所述代码当由机器执行时使所述机器执行包括如本文中所公开的任何方法的方法。
(例如,供核执行的)指令集可包括一种或多种指令格式。给定的指令格式可定义各种字段(例如,位的数量、位的位置)以指定将要执行的操作(例如,操作码)以及将对其执行该操作的(多个)操作数和/或(多个)其他数据字段(例如,掩码),等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有该指令格式的字段(所包括的字段通常按照相同顺序,但是至少一些字段具有不同的位的位置,因为较少的字段被包括)的不同子集,和/或定义为具有以不同方式进行解释的给定字段。由此,ISA的每一条指令使用给定的指令格式(并且如果经定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作数的字段。例如,示例性ADD(加法)指令具有特定的操作码和指令格式,该特定的指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地以及源2)的操作数字段;并且该ADD指令在指令流中出现将使得在操作数字段中具有选择特定操作数的特定的内容。已经推出和/或发布了被称为高级向量扩展(AVX)(AVX1和AVX2)和利用向量扩展(VEX)编码方案的SIMD扩展集(参见例如2016年6月的64和IA-32架构软件开发者手册;并且参见2016年2月的/>架构指令集扩展编程参考)。
示例性指令格式
本文中所描述的(多条)指令的实施例能以不同的格式体现。另外,在下文中详述示例性***、架构和流水线。(多条)指令的实施例可在此类***、架构和流水线上执行,但是不限于详述的那些***、架构和流水线。
通用向量友好指令格式
向量友好指令格式是适于向量指令(例如,存在专用于向量操作的特定字段)的指令格式。尽管描述了其中通过向量友好指令格式支持向量和标量操作两者的实施例,但是替代实施例仅使用通过向量友好指令格式的向量操作。
图59A-图59B是图示根据本公开的实施例的通用向量友好指令格式及其指令模板的框图。图59A是图示根据本公开的实施例的通用向量友好指令格式及其A类指令模板的框图;而图59B是图示根据本公开的实施例的通用向量友好指令格式及其B类指令模板的框图。具体地,针对通用向量友好指令格式5900定义A类和B类指令模板,这两者都包括无存储器访问5905的指令模板和存储器访问5920的指令模板。在向量友好指令格式的上下文中的术语“通用”是指不束缚于任何特定指令集的指令格式。
尽管将描述其中向量友好指令格式支持以下情况的本公开的实施例:64字节向量操作数长度(或尺寸)与32位(4字节)或64位(8字节)数据元素宽度(或尺寸)(并且由此,64字节向量由16个双字尺寸的元素组成,或者替代地由8个四字尺寸的元素组成);64字节向量操作数长度(或尺寸)与16位(2字节)或8位(1字节)数据元素宽度(或尺寸);32字节向量操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或尺寸);以及16字节向量操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节)、或8位(1字节)数据元素宽度(或尺寸);但是替代实施例可支持更大、更小和/或不同的向量操作数尺寸(例如,256字节向量操作数)与更大、更小或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)。
图59A中的A类指令模板包括:1)在无存储器访问5905的指令模板内,示出无存储器访问的完全舍入控制型操作5910的指令模板、以及无存储器访问的数据变换型操作5915的指令模板;以及2)在存储器访问5920的指令模板内,示出存储器访问的时效性5925的指令模板和存储器访问的非时效性5930的指令模板。图59B中的B类指令模板包括:1)在无存储器访问5905的指令模板内,示出无存储器访问的写掩码控制的部分舍入控制型操作5912的指令模板以及无存储器访问的写掩码控制的vsize型操作5917的指令模板;以及2)在存储器访问5920的指令模板内,示出存储器访问的写掩码控制5927的指令模板。
通用向量友好指令格式5900包括以下列出的按照在图59A-59B中图示的顺序的如下字段。
格式字段5940——该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并且由此标识指令在指令流中以向量友好指令格式出现。由此,该字段对于仅具有通用向量友好指令格式的指令集是不需要的,在这个意义上该字段是任选的。
基础操作字段5942——其内容区分不同的基础操作。
寄存器索引字段5944——其内容直接或者通过地址生成来指定源或目的地操作数在寄存器中或者在存储器中的位置。这些字段包括足够数量的位以从PxQ(例如,32x512、16x128、32x1024、64x1024)个寄存器堆中选择N个寄存器。尽管在一个实施例中N可多达三个源寄存器和一个目的地寄存器,但是替代实施例可支持更多或更少的源和目的地寄存器(例如,可支持多达两个源,其中这些源中的一个源还用作目的地;可支持多达三个源,其中这些源中的一个源还用作目的地;可支持多达两个源和一个目的地)。
修饰符(modifier)字段5946——其内容将指定存储器访问的以通用向量指令格式出现的指令与不指定存储器访问的以通用向量指令格式出现的指令区分开;即在无存储器访问5905的指令模板与存储器访问5920的指令模板之间进行区分。存储器访问操作读取和/或写入到存储器层次(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不这样(例如,源和/或目的地是寄存器)。尽管在一个实施例中,该字段还在三种不同的方式之间选择以执行存储器地址计算,但是替代实施例可支持更多、更少或不同的方式来执行存储器地址计算。
扩充操作字段5950——其内容区分除基础操作以外还要执行各种不同操作中的哪一个操作。该字段是针对上下文的。在本公开的一个实施例中,该字段被分成类字段5968、α字段5952和β字段5954。扩充操作字段5950允许在单条指令而非2条、3条或4条指令中执行多组共同的操作。
比例字段5960——其内容允许用于存储器地址生成(例如,用于使用(2比例*索引+基址)的地址生成)的索引字段的内容的按比例缩放。
位移字段5962A——其内容用作存储器地址生成的一部分(例如,用于使用(2比例*索引+基址+位移)的地址生成)。
位移因数字段5962B(注意,位移字段5962A直接在位移因数字段5962B上的并置指示使用一个或另一个)——其内容用作地址生成的一部分;它指定将按比例缩放存储器访问的尺寸(N)的位移因数——其中N是存储器访问中的字节数量(例如,用于使用(2比例*索引+基址+按比例缩放的位移)的地址生成)。忽略冗余的低阶位,并且因此将位移因数字段的内容乘以存储器操作数总尺寸(N)以生成将在计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于完整操作码字段5974(稍后在本文中描述)和数据操纵字段5954C确定。位移字段5962A和位移因数字段5962B不用于无存储器访问5905的指令模板和/或不同的实施例可实现这两者中的仅一个或不实现这两者中的任一个,在这个意义上,位移字段5962A和位移因数字段5962B是任选的。
数据元素宽度字段5964——其内容区分将使用多个数据元素宽度中的哪一个(在一些实施例中用于所有指令;在其他实施例中只用于指令中的一些指令)。如果支持仅一个数据元素宽度和/或使用操作码的某一方面来支持数据元素宽度,则该字段是不需要的,在这个意义上,该字段是任选的。
写掩码字段5970——其内容逐数据元素位置地控制目的地向量操作数中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并-写掩蔽,而B类指令模板支持合并-写掩蔽和归零-写掩蔽两者。当合并时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集免于更新;在另一实施例中,保持其中对应掩码位具有0的目的地的每一元素的旧值。相反,当归零时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间使目的地中的任何元素集归零;在一个实施例中,目的地的元素在对应掩码位具有0值时被设为0。该功能的子集是控制正被执行的操作的向量长度的能力(即,从第一个到最后一个正被修改的元素的跨度),然而,被修改的元素不一定要是连续的。由此,写掩码字段5970允许部分向量操作,这包括加载、存储、算术、逻辑等。尽管描述了其中写掩码字段5970的内容选择了多个写掩码寄存器中的包含要使用的写掩码的一个写掩码寄存器(并且由此,写掩码字段5970的内容间接地标识要执行的掩蔽)的本公开的实施例,但是替代实施例替代地或附加地允许掩码写字段5970的内容直接指定要执行的掩蔽。
立即数字段5972——其内容允许对立即数的指定。该字段在实现不支持立即数的通用向量友好格式中不存在且在不使用立即数的指令中不存在,在这个意义上,该字段是任选的。
类字段5968——其内容在不同类的指令之间进行区分。参考图59A-图59B,该字段的内容在A类和B类指令之间进行选择。在图59A-图59B中,圆角方形用于指示特定的值存在于字段中(例如,在图59A-图59B中分别用于类字段5968的A类5968A和B类5968B)。
A类指令模板
在A类非存储器访问5905的指令模板的情况下,α字段5952被解释为其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的舍入型操作5910和无存储器访问的数据变换型操作5915的指令模板分别指定舍入5952A.1和数据变换5952A.2)的RS字段5952A,而β字段5954区分要执行所指定类型的操作中的哪一种。在无存储器访问5905的指令模板中,比例字段5960、位移字段5962A和位移比例字段5962B不存在。
无存储器访问的指令模板——完全舍入控制型操作
在无存储器访问的完全舍入控制型操作5910的指令模板中,β字段5954被解释为其(多个)内容提供静态舍入的舍入控制字段5954A。尽管在本公开的所述实施例中舍入控制字段5954A包括抑制所有浮点异常(SAE)字段5956和舍入操作控制字段5958,但是替代实施例可支持这两个概念,可将这两个概念编码为同一字段,或仅具有这些概念/字段中的一个或另一个(例如,可仅具有舍入操作控制字段5958)。
SAE字段5956——其内容区分是否禁用异常事件报告;当SAE字段5956的内容指示启用抑制时,给定的指令不报告任何种类的浮点异常标志,并且不唤起任何浮点异常处置程序。
舍入操作控制字段5958——其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及就近舍入)。由此,舍入操作控制字段5958允许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段5950的内容覆盖(override)该寄存器值。
无存储器访问的指令模板-数据变换型操作
在无存储器访问的数据变换型操作5915的指令模板中,β字段5954被解释为数据变换字段5954B,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、混合、广播)。
在A类存储器访问5920的指令模板的情况下,α字段5952被解释为驱逐提示字段5952B,其内容区分要使用驱逐提示中的哪一个(在图59A中,对于存储器访问时效性5925的指令模板和存储器访问非时效性5930的指令模板分别指定时效性的5952B.1和非时效性的5952B.2),而β字段5954被解释为数据操纵字段5954C,其内容区分要执行多个数据操纵操作(也称为基元(primitive))中的哪一个(例如,无操纵、广播、源的向上转换以及目的地的向下转换)。存储器访问5920的指令模板包括比例字段5960,并任选地包括位移字段5962A或位移比例字段5962B。
向量存储器指令使用转换支持来执行来自存储器的向量加载以及向存储器的向量存储。如同寻常的向量指令,向量存储器指令以数据元素式的方式从/向存储器传输数据,其中实际被传输的元素由被选为写掩码的向量掩码的内容规定。
存储器访问的指令模板——时效性的
时效性的数据是可能足够快地被重新使用以从高速缓存操作受益的数据。然而,这是提示,并且不同的处理器能以不同的方式实现它,包括完全忽略该提示。
存储器访问的指令模板——非时效性的
非时效性的数据是不太可能足够快地被重新使用以从第一级高速缓存中的高速缓存操作受益且应当被给予驱逐优先级的数据。然而,这是提示,并且不同的处理器能以不同的方式实现它,包括完全忽略该提示。
B类指令模板
在B类指令模板的情况下,α字段5952被解释为写掩码控制(Z)字段5952C,其内容区分由写掩码字段5970控制的写掩蔽应当是合并还是归零。
在B类非存储器访问5905的指令模板的情况下,β字段5954的一部分被解释为RL字段5957A,其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的写掩码控制部分舍入控制类型操作5912的指令模板和无存储器访问的写掩码控制VSIZE型操作5917的指令模板分别指定舍入5957A.1和向量长度(VSIZE)5957A.2),而β字段5954的其余部分区分要执行所指定类型的操作中的哪一种。在无存储器访问5905的指令模板中,比例字段5960、位移字段5962A和位移比例字段5962B不存在。
在无存储器访问的写掩码控制部分舍入控制型操作5910的指令模板中,β字段5954的其余部分被解释为舍入操作字段5959A,并且禁用异常事件报告(给定的指令不报告任何种类的浮点异常标志,并且不唤起任何浮点异常处置程序)。
舍入操作控制字段5959A——正如舍入操作控制字段5958,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入以及就近舍入)。由此,舍入操作控制字段5959A允许逐指令地改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段5950的内容覆盖该寄存器值。
在无存储器访问的写掩码控制VSIZE型操作5917的指令模板中,β字段5954的其余部分被解释为向量长度字段5959B,其内容区分要执行多个数据向量长度中的哪一个(例如,128字节、256字节或512字节)。
在B类存储器访问5920的指令模板的情况下,β字段5954的一部分被解释为广播字段5957B,其内容区分是否要执行广播型数据操纵操作,而β字段5954的其余部分被解释为向量长度字段5959B。存储器访问5920的指令模板包括比例字段5960,并任选地包括位移字段5962A或位移比例字段5962B。
针对通用向量友好指令格式5900,示出完整操作码字段5974包括格式字段5940、基础操作字段5942和数据元素宽度字段5964。尽管示出了其中完整操作码字段5974包括所有这些字段的一个实施例,但是在不支持所有这些字段的实施例中,完整操作码字段5974包括少于所有的这些字段。完整操作码字段5974提供操作代码(操作码)。
扩充操作字段5950、数据元素宽度字段5964和写掩码字段5970允许逐指令地以通用向量友好指令格式指定这些特征。
写掩码字段和数据元素宽度字段的组合创建各种类型的指令,因为这些指令允许基于不同的数据元素宽度应用该掩码。
在A类和B类内出现的各种指令模板在不同的情形下是有益的。在本公开的一些实施例中,不同处理器或处理器内的不同核可支持仅A类、仅B类、或者可支持这两类。举例而言,旨在用于通用计算的高性能通用乱序核可仅支持B类,旨在主要用于图形和/或科学(吞吐量)计算的核可仅支持A类,并且旨在用于通用计算和图形和/或科学(吞吐量)计算两者的核可支持A类和B类两者(当然,具有来自这两类的模板和指令的一些混合、但是并非来自这两类的所有模板和指令的核在本公开的范围内)。同样,单个处理器可包括多个核,这多个核全部都支持相同的类,或者其中不同的核支持不同的类。举例而言,在具有单独的图形核和通用核的处理器中,图形核中的旨在主要用于图形和/或科学计算的一个核可仅支持A类,而通用核中的一个或多个可以是具有旨在用于通用计算的仅支持B类的乱序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一处理器可包括既支持A类又支持B类的一个或多个通用有序或乱序核。当然,在本公开的不同实施例中,来自一类的特征也可在其他类中实现。将使以高级语言编写的程序成为(例如,及时编译或静态编译)各种不同的可执行形式,这些可执行形式包括:1)仅具有由用于执行的目标处理器支持的(多个)类的指令的形式;或者2)具有替代例程并具有控制流代码的形式,该替代例程使用所有类的指令的不同组合来编写,该控制流代码选择这些例程以基于由当前正在执行代码的处理器支持的指令来执行。
示例性专用向量友好指令格式
图60是图示根据本公开的实施例的示例性专用向量友好指令格式的框图。图60示出专用向量友好指令格式6000,其指定各字段的位置、尺寸、解释和次序、以及那些字段中的一些字段的值,在这个意义上,该专用向量友好指令格式6000是专用的。专用向量友好指令格式6000可用于扩展x86指令集,并且由此字段中的一些字段与如在现有的x86指令集及其扩展(例如,AVX)中所使用的那些字段类似或相同。该格式保持与具有扩展的现有x86指令集的前缀编码字段、实操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即数字段一致。图示来自图59的字段,来自图60的字段映射到来自图59的字段。
应当理解,虽然出于说明的目的在通用向量友好指令格式5900的上下文中参考专用向量友好指令格式6000描述了本公开的实施例,但是本公开不限于专用向量友好指令格式6000,除非另有声明。例如,通用向量友好指令格式5900构想了各种字段的各种可能的尺寸,而专用向量友好指令格式6000示出为具有特定尺寸的字段。作为具体示例,尽管在专用向量友好指令格式6000中数据元素宽度字段5964被图示为一位字段,但是本公开不限于此(即,通用向量友好指令格式5900构想数据元素宽度字段5964的其他尺寸)。
通用向量友好指令格式5900包括以下列出的按照图60A中图示的顺序的如下字段。
EVEX前缀(字节0-3)6002——以四字节形式进行编码。
格式字段5940(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是格式字段5940,并且它包含0x62(在本公开的一个实施例中,为用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供专用能力的多个位字段。
REX字段6005(EVEX字节1,位[7-5])——由EVEX.R位字段(EVEX字节1,位[7]-R)、EVEX.X位字段(EVEX字节1,位[6]-X)以及(5957BEX字节1,位[5]-B)组成。EVEX.R、EVEX.X和EVEX.B位字段提供与对应的VEX位字段相同的功能,并且使用1补码的形式进行编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。这些指令的其他字段对如在本领域中已知的寄存器索引的较低三个位(rrr、xxx和bbb)进行编码,由此可通过增加EVEX.R、EVEX.X和EVEX.B来形成Rrrr、Xxxx和Bbbb。
REX’字段5910——这是REX’字段5910的第一部分,并且是用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.R’位字段(EVEX字节1,位[4]-R’)。在本公开的一个实施例中,该位与以下指示的其他位一起以位反转的格式存储以(在公知x86的32位模式下)与BOUND指令进行区分,该BOUND指令的实操作码字节是62,但是在MODR/M字段(在下文中描述)中不接受MOD字段中的值11;本公开的替代实施例不以反转的格式存储该指示的位以及以下其他指示的位。值1用于对较低16个寄存器进行编码。换句话说,通过组合EVEX.R’、EVEX.R以及来自其他字段的其他RRR来形成R’Rrrr。
操作码映射字段6015(EVEX字节1,位[3:0]-mmmm)——其内容对隐含的前导操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段5964(EVEX字节2,位[7]-W)——由记号EVEX.W表示。EVEX.W用于定义数据类型(32位数据元素或64位数据元素)的粒度(尺寸)。
EVEX.vvvv 6020(EVEX字节2,位[6:3]-vvvv)——EVEX.vvvv的作用可包括如下:1)EVEX.vvvv对以反转(1补码)形式指定的第一源寄存器操作数进行编码,并且对具有两个或更多个源操作数的指令有效;2)EVEX.vvvv对针对特定向量位移以1补码的形式指定的目的地寄存器操作数进行编码;或者3)EVEX.vvvv不对任何操作数进行编码,该字段被预留,并且应当包含1111b。由此,EVEX.vvvv字段6020对以反转(1补码)的形式存储的第一源寄存器指定符的4个低阶位进行编码。取决于该指令,额外不同的EVEX位字段用于将指定符尺寸扩展到32个寄存器。
EVEX.U 5968类字段(EVEX字节2,位[2]-U)——如果EVEX.U=0,则它指示A类或EVEX.U0;如果EVEX.U=1,则它指示B类或EVEX.U1。
前缀编码字段6025(EVEX字节2,位[1:0]-pp)——提供了用于基础操作字段的附加位。除了对以EVEX前缀格式的传统SSE指令提供支持以外,这也具有压缩SIMD前缀的益处(EVEX前缀仅需要2位,而不是需要字节来表达SIMD前缀)。在一个实施例中,为了支持使用以传统格式和以EVEX前缀格式两者的SIMD前缀(66H、F2H、F3H)的传统SSE指令,将这些传统SIMD前缀编码成SIMD前缀编码字段;并且在运行时在被提供给解码器的PLA之前被扩展成传统SIMD前缀(因此,在无需修改的情况下,PLA既可执行传统格式的这些传统指令又可执行EVEX格式的这些传统指令)。虽然较新的指令可将EVEX前缀编码字段的内容直接用作操作码扩展,但是为了一致性,特定实施例以类似的方式扩展,但允许由这些传统SIMD前缀指定的不同含义。替代实施例可重新设计PLA以支持2位SIMD前缀编码,并且由此不需要扩展。
α字段5952(EVEX字节3,位[7]-EH,也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写掩码控制、以及EVEX.N;也以α图示)——如先前所述,该字段是针对上下文的。
β字段5954(EVEX字节3,位[6:4]-SSS,也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB,还以βββ图示)——如前所述,此字段是针对上下文的。
REX’字段5910——这是REX’字段的其余部分,并且是可用于对扩展的32个寄存器集合的较高16个或较低16个寄存器进行编码的EVEX.V’位字段(EVEX字节3,位[3]-V’)。该位以位反转的格式存储。值1用于对较低16个寄存器进行编码。换句话说,通过组合EVEX.V’、EVEX.vvvv来形成V’VVVV。
写掩码字段5970(EVEX字节3,位[2:0]-kkk)——其内容指定写掩码寄存器中的寄存器的索引,如先前所述。在本公开的一个实施例中,特定值EVEX.kkk=000具有暗示没有写掩码用于特定指令的特殊行为(这能以各种方式实现,包括使用硬连线到所有对象的写掩码或绕过掩蔽硬件的硬件来实现)。
实操作码字段6030(字节4)还被称为操作码字节。操作码的一部分在该字段中被指定。
MOD R/M字段6040(字节5)包括MOD字段6042、Reg字段6044和R/M字段6046。如先前所述的,MOD字段6042的内容将存储器访问操作和非存储器访问操作区分开。Reg字段6044的作用可被归结为两种情形:对目的地寄存器操作数或源寄存器操作数进行编码;或者被视为操作码扩展,并且不用于对任何指令操作数进行编码。R/M字段6046的作用可包括如下:对引用存储器地址的指令操作数进行编码;或者对目的地寄存器操作数或源寄存器操作数进行编码。
比例、索引、基址(SIB)字节(字节6)——如先前所述的,比例字段5950的内容用于存储器地址生成。SIB.xxx 6054和SIB.bbb 6056——先前已经针对寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段5962A(字节7-10)——当MOD字段6042包含10时,字节7-10是位移字段5962A,并且它与传统32位位移(disp32)一样地工作,并且以字节粒度工作。
位移因数字段5962B(字节7)——当MOD字段6042包含01时,字节7是位移因数字段5962B。该字段的位置与以字节粒度工作的传统x86指令集8位位移(disp8)的位置相同。由于disp8是符号扩展的,因此它仅能在-128和127字节偏移之间寻址;在64字节高速缓存行的方面,disp8使用可被设为仅四个真正有用的值-128、-64、0和64的8位;由于常常需要更大的范围,所以使用disp32;然而,disp32需要4个字节。与disp8和disp32对比,位移因数字段5962B是disp8的重新解释;当使用位移因数字段5962B时,通过将位移因数字段的内容乘以存储器操作数访问的尺寸(N)来确定实际位移。该类型的位移被称为disp8*N。这减小了平均指令长度(单个字节用于位移,但具有大得多的范围)。此类经压缩的位移基于有效位移是存储器访问的粒度的倍数的假设,并且由此地址偏移的冗余低阶位不需要被编码。换句话说,位移因数字段5962B替代传统x86指令集8位位移。由此,位移因数字段5962B以与x86指令集8位位移相同的方式被编码(因此,在ModRM/SIB编码规则中没有变化),唯一的不同在于,将disp8超载至disp8*N。换句话说,在编码规则或编码长度方面没有变化,而仅在有硬件对位移值的解释方面有变化(这需要将位移按比例缩放存储器操作数的尺寸以获得字节式地址偏移)。立即数字段5972如先前所述地操作。
完整操作码字段
图60B是图示根据本公开的一个实施例的构成完整操作码字段5974的具有专用向量友好指令格式6000的字段的框图。具体地,完整操作码字段5974包括格式字段5940、基础操作字段5942和数据元素宽度(W)字段5964。基础操作字段5942包括前缀编码字段6025、操作码映射字段6015和实操作码字段6030。
寄存器索引字段
图60C是图示根据本公开的一个实施例的构成寄存器索引字段5944的具有专用向量友好指令格式6000的字段的框图。具体地,寄存器索引字段5944包括REX字段6005、REX’字段6010、MODR/M.reg字段6044、MODR/M.r/m字段6046、VVVV字段6020、xxx字段6054和bbb字段6056。
扩充操作字段
图60D是图示根据本公开的一个实施例的构成扩充操作字段5950的具有专用向量友好指令格式6000的字段的框图。当类(U)字段5968包含0时,它表明EVEX.U0(A类5968A);当它包含1时,它表明EVEX.U1(B类5968B)。当U=0且MOD字段6042包含11(表明无存储器访问操作)时,α字段5952(EVEX字节3,位[7]-EH)被解释为rs字段5952A。当rs字段5952A包含1(舍入5952A.1)时,β字段5954(EVEX字节3,位[6:4]-SSS)被解释为舍入控制字段5954A。舍入控制字段5954A包括一位SAE字段5956和两位舍入操作字段5958。当rs字段5952A包含0(数据变换5952A.2)时,β字段5954(EVEX字节3,位[6:4]-SSS)被解释为三位数据变换字段5954B。当U=0且MOD字段6042包含00、01或10(表明存储器访问操作)时,α字段5952(EVEX字节3,位[7]-EH)被解释为驱逐提示(EH)字段5952B,并且β字段5954(EVEX字节3,位[6:4]-SSS)被解释为三位数据操纵字段5954C。
当U=1时,α字段5952(EVEX字节3,位[7]-EH)被解释为写掩码控制(Z)字段5952C。当U=1且MOD字段6042包含11(表明无存储器访问操作)时,β字段5954的一部分(EVEX字节3,位[4]-S0)被解释为RL字段5957A;当它包含1(舍入5957A.1)时,β字段5954的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为舍入操作字段5959A,而当RL字段5957A包含0(VSIZE5957.A2)时,β字段5954的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为向量长度字段5959B(EVEX字节3,位[6-5]-L1-0)。当U=1且MOD字段6042包含00、01或10(表明存储器访问操作)时,β字段5954(EVEX字节3,位[6:4]-SSS)被解释为向量长度字段5959B(EVEX字节3,位[6-5]-L1-0)和广播字段5957B(EVEX字节3,位[4]-B)。
示例性寄存器架构
图61是根据本公开的一个实施例的寄存器架构6100的框图。在所图示的实施例中,有32个512位宽的向量寄存器6110;这些寄存器被引用为zmm0到zmm31。较低的16个zmm寄存器的较低阶256个位覆盖(overlay)在寄存器ymm0-16上。较低的16个zmm寄存器的较低阶128个位(ymm寄存器的较低阶128个位)覆盖在寄存器xmm0-15上。专用向量友好指令格式6000对这些被覆盖的寄存器堆操作,如在以下表格中所图示。
换句话说,向量长度字段5959B在最大长度与一个或多个其他较短长度之间进行选择,其中每一个此类较短长度是前一长度的一半,并且不具有向量长度字段5959B的指令模板在最大向量长度上操作。此外,在一个实施例中,专用向量友好指令格式6000的B类指令模板对紧缩或标量单/双精度浮点数据以及紧缩或标量整数数据操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于实施例,较高阶数据元素位置要么保持与在指令之前相同,要么归零。
写掩码寄存器6115——在所图示的实施例中,存在8个写掩码寄存器(k0至k7),每一写掩码寄存器的尺寸是64位。在替代实施例中,写掩码寄存器6105的尺寸是16位。如先前所述,在本公开的一个实施例中,向量掩码寄存器k0无法用作写掩码;当将正常指示k0的编码用作写掩码时,它选择硬连线的写掩码0xFFFF,从而有效地禁止写掩蔽用于那条指令。
通用寄存器6125——在所示出的实施例中,有十六个64位通用寄存器,这些寄存器与现有的x86寻址模式一起使用以对存储器操作数寻址。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15来引用。
标量浮点栈寄存器堆(x87栈)6145,在其上面重叠了MMX紧缩整数平坦寄存器堆6150——在所图示的实施例中,x87栈是用于使用x87指令集扩展来对32/64/80位浮点数据执行标量浮点操作的八元素栈;而使用MMX寄存器来对64位紧缩整数数据执行操作,以及为在MMX与XMM寄存器之间执行的一些操作保存操作数。
本公开的替代实施例可以使用更宽的或更窄的寄存器。另外,本公开的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。
示例性核架构、处理器和计算机架构
处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)CPU,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核。此类不同的处理器导致不同的计算机***架构,这些计算机***架构可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但在分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上***,其可以将所描述的CPU(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
示例性核架构
有序和乱序核框图
图62A是图示根据本公开的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图62B是示出根据本公开的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。图62A-图62B中的实线框图示有序流水线和有序核,而虚线框的任选增加图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图62A中,处理器流水线6200包括取出级6202、长度解码级6204、解码级6206、分配级6208、重命名级6210、调度(也被称为分派或发布)级6212、寄存器读取/存储器读取级6214、执行级6216、写回/存储器写入级6218、异常处置级6222和提交级6224。
图62B示出处理器核6290,该处理器核6290包括前端单元6230,该前端单元6230耦合到执行引擎单元6250,并且前端单元6230和执行引擎单元6250两者都耦合到存储器单元6270。核6290可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或替代的核类型。作为又一选项,核6290可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核,等等。
前端单元6230包括分支预测单元6232,该分支预测单元6232耦合到指令高速缓存单元6234,该指令高速缓存单元6234耦合到指令转换后备缓冲器(TLB)6236,该指令转换后备缓冲器6236耦合到指令取出单元6238,该指令取出单元6238耦合到解码单元6240。解码单元6240(或解码器或解码单元)可对指令(例如,宏指令)解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元6240可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核6290包括存储用于某些宏指令的微代码的微代码ROM或其他介质(例如,在解码单元6240中,或以其他方式在前端单元6230内)。解码单元6240耦合到执行引擎单元6250中的重命名/分配器单元6252。
执行引擎单元6250包括重命名/分配器单元6252,该重命名/分配器单元6252耦合到引退单元6254和一个或多个调度器单元的集合6256。(多个)调度器单元6256表示任何数量的不同调度器,包括预留站、中央指令窗等。(多个)调度器单元6256耦合到(多个)物理寄存器堆单元6258。(多个)物理寄存器堆单元6258中的每一个物理寄存器堆单元表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,状态(例如,作为要执行的下一条指令的地址的指令指针)等等。在一个实施例中,(多个)物理寄存器堆单元6258包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(多个)物理寄存器堆单元6258由引退单元6254重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器、(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元6254和(多个)物理寄存器堆单元6258耦合到(多个)执行集群6260。(多个)执行集群6260包括一个或多个执行单元的集合6262以及一个或多个存储器访问单元的集合6264。执行单元6262可执行各种操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。(多个)调度器单元6256、(多个)物理寄存器堆单元6258和(多个)执行集群6260示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器单元、(多个)物理寄存器堆单元和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元6264的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
存储器访问单元的集合6264耦合到存储器单元6270,该存储器单元6270包括数据TLB单元6272,该数据TLB单元6272耦合到数据高速缓存单元6274,该数据高速缓存单元6274耦合到第二级(L2)高速缓存单元6276。在一个示例性实施例中,存储器访问单元6264可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合到存储器单元6270中的数据TLB单元6272。指令高速缓存单元6234还耦合到存储器单元6270中的第二级(L2)高速缓存单元6276。L2高速缓存单元6276耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。
作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线6200:1)指令取出6238执行取出级6202和长度解码级6204;2)解码单元6240执行解码级6206;3)重命名/分配器单元6252执行分配级6208和重命名级6210;4)(多个)调度器单元6256执行调度级6212;5)(多个)物理寄存器堆单元6258和存储器单元6270执行寄存器读取/存储器读取级6214;执行集群6260执行执行级6216;6)存储器单元6270和(多个)物理寄存器堆单元6258执行写回/存储器写入级6218;7)各单元可牵涉到异常处置级6222;以及8)引退单元6254和(多个)物理寄存器堆单元6258执行提交级6224。
核6290可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核6290包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核为物理核正在同时多线程化的线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后的诸如 超线程化技术中的同时多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所图示的处理器的实施例还包括分开的指令和数据高速缓存单元6234/6274以及共享的L2高速缓存单元6276,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如,第一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该***可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
具体的示例性有序核架构
图63A-图63B图示更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)中的一个逻辑块。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其他必要的I/O逻辑进行通信。
图63A是根据本公开的实施例的单个处理器核以及它至管芯上互连网络6302的连接及其第二级(L2)高速缓存的本地子集6304的框图。在一个实施例中,指令解码单元6300支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存6306允许对进入标量和向量单元中的、对高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元6308和向量单元6310使用分开的寄存器集合(分别为标量寄存器6312和向量寄存器6314),并且在这些寄存器之间传输的数据被写入到存储器,并随后从第一级(L1)高速缓存6306读回,但是本公开的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回的通信路径)。
L2高速缓存的本地子集6304是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地子集,每个处理器核一个本地子集。每个处理器核具有到其自身的L2高速缓存的本地子集6304的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存子集6304中,并且可以与其他处理器核访问其自身的本地L2高速缓存子集并行地被快速访问。由处理器核写入的数据被存储在其自身的L2高速缓存子集6304中,并在必要的情况下从其他子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。
图63B是根据本公开的实施例的图63A中的处理器核的一部分的展开图。图63B包括L1高速缓存6304的L1数据高速缓存6306A部分,以及关于向量单元6310和向量寄存器6314的更多细节。具体地,向量单元6310是16宽向量处理单元(VPU)(见16宽ALU 6328),该单元执行整数、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元6320支持对寄存器输入的混合,通过数值转换单元6322A-B支持数值转换,并且通过复制单元6324支持对存储器输入的复制。写掩码寄存器6326允许预测所得的向量写入。
图64是根据本公开的实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器6400的框图。图64中的实线框图示具有单个核6402A、***代理6410、一个或多个总线控制器单元的集合6416的处理器6400,而虚线框的任选增加图示具有多个核6402A-N、***代理单元6410中的一个或多个集成存储器控制器单元的集合6414以及专用逻辑6408的替代处理器6400。
因此,处理器6400的不同实现可包括:1)CPU,其中专用逻辑6408是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核6402A-N是一个或多个通用核(例如,通用有序核、通用乱序核、这两者的组合);2)协处理器,其中核6402A-N是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核6402A-N是大量通用有序核。因此,处理器6400可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、嵌入式处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器6400可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,BiCMOS、CMOS、或NMOS)中的任何技术被实现在一个或多个基板上。
存储器层次结构包括核内的一个或多个高速缓存级别、一个或多个共享高速缓存单元的集合6406、以及耦合到集成存储器控制器单元的集合6414的外部存储器(未示出)。共享高速缓存单元的集合6406可包括一个或多个中间级别的高速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的高速缓存、末级高速缓存(LLC)和/或以上各项的组合。虽然在一个实施例中,基于环的互连单元6412将集成图形逻辑6408、共享高速缓存单元的集合6406以及***代理单元6410/(多个)集成存储器控制器单元6414互连,但是替代实施例可使用任何数量的公知技术来互连此类单元。在一个实施例中,在一个或多个高速缓存单元6406与核6402A-N之间维持一致性。
在一些实施例中,一个或多个核6402A-N能够实现多线程化。***代理6410包括协调和操作核6402A-N的那些组件。***代理单元6410可包括例如功率控制单元(PCU)和显示单元。PCU可以是对核6402A-N以及集成图形逻辑6408的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核6402A-N在架构指令集方面可以是同构的或异构的;即,核6402A-N中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。
示例性计算机架构
图65-68是示例性计算机架构的框图。本领域中已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他***设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的***或电子设备一般都是合适的。
现在参考图65,所示出的是根据本公开一个实施例的***6500的框图。***6500可以包括一个或多个处理器6510、6515,这些处理器耦合到控制器中枢6520。在一个实施例中,控制器中枢6520包括图形存储器控制器中枢(GMCH)6590和输入/输出中枢(IOH)6550(其可以在分开的芯片上);GMCH 6590包括存储器和图形控制器,存储器6540和协处理器6545耦合到该存储器和图形控制器;IOH 6550将输入/输出(I/O)设备6560耦合到GMCH6590。或者,存储器和图形控制器中的一个或这两者被集成在(如本文中所描述的)处理器内,存储器6540和协处理器6545直接耦合到处理器6510,并且控制器中枢6520与IOH 6550处于单个芯片中。存储器6540可包括编译器模块6540A,该编译器模块6540A例如用于存储代码,该代码当被执行时使处理器执行本公开的任何方法。
附加的处理器6515的任选性在图65中通过虚线来表示。每一处理器6510、6515可包括本文中描述的处理核中的一个或多个,并且可以是处理器6400的某一版本。
存储器6540可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢6520经由诸如前端总线(FSB)之类的多分支总线、诸如快速路径互连(QPI)之类的点对点接口、或者类似的连接6595来与(多个)处理器6510、6515进行通信。
在一个实施例中,协处理器6545是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢6520可以包括集成图形加速器。
在物理资源6510、6515之间可以存在包括架构、微架构、热、功耗特性等一系列品质度量方面的各种差异。
在一个实施例中,处理器6510执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器6510将这些协处理器指令识别为具有应当由附连的协处理器6545执行的类型。因此,处理器6510在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器6545。(多个)协处理器6545接受并执行所接收的协处理器指令。
现在参见图66,所示出的是根据本公开的实施例的第一更具体的示例性***6600的框图。如图66中所示,多处理器***6600是点对点互连***,并且包括经由点对点互连6650耦合的第一处理器6670和第二处理器6680。处理器6670和6680中的每一个都可以是处理器6400的某一版本。在本公开的一个实施例中,处理器6670和6680分别是处理器6510和6515,而协处理器6638是协处理器6545。在另一实施例中,处理器6670和6680分别是处理器6510和协处理器6545。
处理器6670和6680示出为分别包括集成存储器控制器(IMC)单元6672和6682。处理器6670还包括作为其总线控制器单元的一部分的点对点(P-P)接口6676和6678;类似地,第二处理器6680包括P-P接口6686和6688。处理器6670、6680可以经由使用点对点(P-P)接口电路6678、6688的P-P接口6650来交换信息。如图66中所示,IMC 6672和6682将处理器耦合到相应的存储器,即存储器6632和存储器6634,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器6670、6680可各自经由使用点对点接口电路6676、6694、6686、6698的各个P-P接口6652、6654来与芯片组6690交换信息。芯片组6690可以任选地经由高性能接口6639来与协处理器6638交换信息。在一个实施例中,协处理器6638是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享高速缓存(未示出)可被包括在任一处理器中,或在这两个处理器的外部但经由P-P互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
芯片组6690可以经由接口6696耦合到第一总线6616。在一个实施例中,第一总线6616可以是***组件互连(PCI)总线或诸如PCI快速总线或另一第三代I/O互连总线之类的总线,但是本公开的范围不限于此。
如图66中所示,各种I/O设备6614可连同总线桥6618一起耦合到第一总线6616,该总线桥6618将第一总线6616耦合到第二总线6620。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器的一个或多个附加处理器6615耦合到第一总线6616。在一个实施例中,第二总线6620可以是低引脚数(LPC)总线。在一个实施例中,各种设备可耦合到第二总线6620,这些设备包括例如键盘和/或鼠标6622、通信设备6627以及存储单元6628,该存储单元6628诸如可包括指令/代码和数据6630的盘驱动器或者其他大容量存储设备。此外,音频I/O 6624可以被耦合到第二总线6620。注意,其他架构是可能的。例如,代替图66的点对点架构,***可以实现多分支总线或其他此类架构。
现在参考图67,示出的是根据本公开的实施例的第二更具体的示例性***6700的框图。图66和67中的类似元件使用类似的附图标记,并且从图67中省略了图66的某些方面以避免混淆图67的其他方面。
图67图示处理器6670、6680可分别包括集成存储器和I/O控制逻辑(“CL”)6672和6682。因此,CL 6672、6682包括集成存储器控制器单元,并包括I/O控制逻辑。图67图示不仅存储器6632、6634耦合到CL 6672、6682,而且I/O设备6714也耦合到控制逻辑6672、6682。传统I/O设备6715被耦合到芯片组6690。
现在参考图68,示出的是根据本公开的实施例的SoC 6800的框图。图64中的类似要素使用类似的附图标记。另外,虚线框是更先进的SoC上的任选的特征。在图68中,(多个)互连单元6802被耦合到:应用处理器6810,其包括一个或多个核的集合202A-N的集合以及(多个)共享高速缓存单元6406;***代理单元6410;(多个)总线控制器单元6416;(多个)集成存储器控制器单元6414;一个或多个协处理器的集合6820,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元6830;直接存储器访问(DMA)单元6832;以及用于耦合到一个或多个外部显示器的显示单元6840。在一个实施例中,(多个)协处理器6820包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器,等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本公开的实施例可实现为在可编程***上执行的计算机程序或程序代码,该可编程***包括至少一个处理器、存储***(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如,图66中图示的代码6630)应用于输入指令,以执行本文中描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理***包括具有处理器的任何***,该处理器诸如例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理***通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“IP核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本公开的实施例还包括非暂态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或***特征。这些实施例也被称为程序产品。
仿真(包括二进制变换、代码变形等)
在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图69是根据本公开的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图69示出可使用x86编译器6904来编译高级语言6902形式的程序,以生成可由具有至少一个x86指令集核的处理器6916原生执行的x86二进制代码6906。具有至少一个x86指令集核的处理器6916表示通过兼容地执行或以其他方式执行以下各项来执行与具有至少一个x86指令集核英特尔处理器基本相同的功能的任何处理器:1)英特尔x86指令集核的指令集的本质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果的应用或其他软件的目标代码版本。x86编译器6904表示可操作用于生成x86二进制代码6906(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器6916上执行。类似地,图69示出可以使用替代的指令集编译器6908来编译高级语言6902形式的程序,以生成可以由不具有至少一个x86指令集核的处理器6914(例如,具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代的指令集二进制代码6910。指令转换器6912用于将x86二进制代码6906转换成可以由不具有x86指令集核的处理器6914原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码6910相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器6912通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码6906的软件、固件、硬件或其组合。
Claims (25)
1.一种存储器电路,包括:
存储器接口电路,用于服务来自处理元件的空间阵列的对存储在多个高速缓存区块中的数据的存储器请求;以及
在所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路,其中,对于来自所述存储器接口电路的、被标记有潜在的动态数据依赖性的、对第一危险检测电路的第一高速缓存区块内的地址的推测性存储器加载请求,所述第一危险检测电路用于:标记所述地址以跟踪对所述地址的其他存储器请求;将来自所述地址的数据存储在推测性完成存储中;以及当对于所述推测性存储器加载请求接收到存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。
2.如权利要求1所述的存储器电路,其中,所述推测性完成存储在所述存储器接口电路中,并且在由所述存储器接口电路接收到所述存储器依赖性令牌时,所述数据将从所述推测性完成存储被发送到处理元件的所述空间阵列。
3.如权利要求1所述的存储器电路,进一步包括第二危险检测电路,所述第二危险检测电路用于:对于标记有所述潜在的动态数据依赖性的对应的逻辑上在先的存储请求,当所述对应的逻辑上在先的存储请求针对所述第二危险检测电路的第二高速缓存区块内的且不是所述第一危险检测电路的所述第一高速缓存区块内的地址时,发送所述存储器依赖性令牌,以使来自所述推测性完成存储的数据被发送到处理元件的所述空间阵列。
4.如权利要求1所述的存储器电路,其中,未标记有潜在的动态依赖性的存储器访问绕过所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路。
5.如权利要求1-4中的任一项所述的存储器电路,其中,所述第一危险检测电路用于:当标记有所述潜在的动态数据依赖性的逻辑上在先的存储请求针对所述第一高速缓存区块内的所述地址时,指示检测到错误。
6.如权利要求5所述的存储器电路,其中,所述第一危险检测电路用于:响应于所述推测性存储器加载请求,进一步将来自所述逻辑上在先的存储请求的经更新的数据发送到处理元件的所述空间阵列。
7.如权利要求6所述的存储器电路,其中,所述推测性完成存储在所述存储器接口电路中,并且所述第一危险检测电路用于:用所述经更新的数据替换所述推测性完成存储中的数据;以及将所述存储器依赖性令牌发送到所述存储器接口电路,以使所述经更新的数据从所述推测性完成存储被发送到处理元件的所述空间阵列。
8.如权利要求7所述的存储器电路,其中,所述存储器接口电路用于:将所述经更新的数据和所述存储器依赖性令牌发送到第二存储器接口电路,所述第二存储器接口电路具有标记有所述潜在的动态数据依赖性的第二推测性存储器加载请求。
9.一种方法,包括:
利用存储器接口电路,接收来自处理元件的空间阵列的对存储在多个高速缓存区块中的数据的存储器请求,所述多个高速缓存区块具有在所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路;
对于来自所述存储器接口电路的、标记有潜在的动态数据依赖性的、对第一危险检测电路的第一高速缓存区块内的地址的推测性存储器加载请求,利用所述第一危险检测电路标记所述地址,以跟踪对所述地址的其他存储器请求;
将来自所述地址的数据存储在推测性完成存储中;以及
当对于所述推测性存储器加载请求接收到存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。
10.如权利要求9所述的方法,其中,所述推测性完成存储在所述存储器接口电路中,并且所述方法进一步包括:在由所述存储器接口电路接收到所述存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。
11.如权利要求9所述的方法,进一步包括:对于标记有所述潜在的动态数据依赖性的对应的逻辑上在先的存储请求,当所述对应的逻辑上在先的存储请求针对第二危险检测电路的第二高速缓存区块内的且不是所述第一危险检测电路的所述第一高速缓存区块内的地址时,从所述第二危险检测电路发送所述存储器依赖性令牌,以使来自所述推测性完成存储的数据被发送到处理元件的所述空间阵列。
12.如权利要求9所述的方法,进一步包括:对于未标记有潜在的动态依赖性的存储器访问,绕过所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路。
13.如权利要求9-12中的任一项所述的方法,进一步包括:当标记有所述潜在的动态数据依赖性的逻辑上在先的存储请求针对所述第一高速缓存区块内的所述地址时,指示检测到错误。
14.如权利要求13所述的方法,其中,所述指示检测到错误的步骤包括:所述第一危险检测电路响应于所述推测性存储器加载请求将来自所述逻辑上在先的存储请求的经更新的数据发送到处理元件的所述空间阵列。
15.如权利要求14所述的方法,其中,所述推测性完成存储在所述存储器接口电路中,并且所述方法进一步包括:所述第一危险检测电路用所述经更新的数据替换所述推测性完成存储中的数据,并且将所述存储器依赖性令牌发送到所述存储器接口电路,以使所述经更新的数据从所述推测性完成存储被发送到处理元件的所述空间阵列。
16.如权利要求15所述的方法,进一步包括:所述存储器接口电路将所述经更新的数据和所述存储器依赖性令牌发送到第二存储器接口电路,所述第二存储器接口电路具有标记有所述潜在的动态数据依赖性的第二推测性存储器加载请求。
17.一种存储代码的非瞬态机器可读介质,所述代码当由机器执行时使所述机器执行方法,所述方法包括:
利用存储器接口电路,接收来自处理元件的空间阵列的对存储在多个高速缓存区块中的数据的存储器请求,所述多个高速缓存区块具有在所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路;
对于来自所述存储器接口电路的、标记有潜在的动态数据依赖性的、对第一危险检测电路的第一高速缓存区块内的地址的推测性存储器加载请求,利用所述第一危险检测电路标记所述地址,以跟踪对所述地址的其他存储器请求;
将来自所述地址的数据存储在推测性完成存储中;以及
当对于所述推测性存储器加载请求接收到存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。
18.如权利要求17所述的非瞬态机器可读介质,其中,所述推测性完成存储在所述存储器接口电路中,并且其中,所述方法进一步包括:在由所述存储器接口电路接收到所述存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。
19.如权利要求17所述的非瞬态机器可读介质,其中,所述方法进一步包括:对于标记有所述潜在的动态数据依赖性的对应的逻辑上在先的存储请求,当所述对应的逻辑上在先的存储请求针对第二危险检测电路的第二高速缓存区块内的且不是所述第一危险检测电路的所述第一高速缓存区块内的地址时,从所述第二危险检测电路发送所述存储器依赖性令牌,以使来自所述推测性完成存储的数据被发送到处理元件的所述空间阵列。
20.如权利要求17所述的非瞬态机器可读介质,其中,所述方法进一步包括:对于未标记有潜在的动态依赖性的存储器访问,绕过所述多个高速缓存区块中的每个高速缓存区块中的危险检测电路。
21.如权利要求17-20中的任一项所述的非瞬态机器可读介质,其中,所述方法进一步包括:当标记有所述潜在的动态数据依赖性的逻辑上在先的存储请求针对所述第一危险检测电路的所述第一高速缓存区块内的所述地址时,指示检测到错误。
22.如权利要求21所述的非瞬态机器可读介质,其中,所述指示检测到错误的步骤包括:所述第一危险检测电路响应于所述推测性存储器加载请求将来自所述逻辑上在先的存储请求的经更新的数据发送到处理元件的所述空间阵列。
23.如权利要求22所述的非瞬态机器可读介质,其中,所述推测性完成存储在所述存储器接口电路中,并且所述方法进一步包括:所述第一危险检测电路用所述经更新的数据替换所述推测性完成存储中的数据,并且将所述存储器依赖性令牌发送到所述存储器接口电路,以使所述经更新的数据从所述推测性完成存储被发送到处理元件的所述空间阵列。
24.如权利要求23所述的非瞬态机器可读介质,其中,所述方法进一步包括:所述存储器接口电路将所述经更新的数据和所述存储器依赖性令牌发送到第二存储器接口电路,所述第二存储器接口电路具有标记有所述潜在的动态数据依赖性的第二推测性存储器加载请求。
25.一种存储器电路,包括:
存储器接口电路,用于服务来自处理元件的空间阵列的对存储在多个高速缓存区块中的数据的存储器请求;以及
用于以下操作的装置:对于来自所述存储器接口电路的、被标记有潜在的动态数据依赖性的、对所述装置的第一高速缓存区块内的地址的推测性存储器加载请求,标记所述地址以跟踪对所述地址的其他存储器请求;将来自所述地址的数据存储在推测性完成存储中;以及当对于所述推测性存储器加载请求接收到存储器依赖性令牌时,将所述数据从所述推测性完成存储发送到处理元件的所述空间阵列。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/640,541 | 2017-07-01 | ||
US15/640,541 US10515049B1 (en) | 2017-07-01 | 2017-07-01 | Memory circuits and methods for distributed memory hazard detection and error recovery |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109215728A CN109215728A (zh) | 2019-01-15 |
CN109215728B true CN109215728B (zh) | 2024-05-03 |
Family
ID=64989846
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810671312.3A Active CN109215728B (zh) | 2017-07-01 | 2018-06-26 | 用于分布式存储器危险检测和错误恢复的存储器电路和方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10515049B1 (zh) |
CN (1) | CN109215728B (zh) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2572578B (en) * | 2018-04-04 | 2020-09-16 | Advanced Risc Mach Ltd | Cache annotations to indicate specultative side-channel condition |
US10884720B2 (en) * | 2018-10-04 | 2021-01-05 | Microsoft Technology Licensing, Llc | Memory ordering annotations for binary emulation |
US11681533B2 (en) | 2019-02-25 | 2023-06-20 | Intel Corporation | Restricted speculative execution mode to prevent observable side effects |
US10959131B2 (en) * | 2019-03-11 | 2021-03-23 | Cisco Technology, Inc. | Dynamic prioritization of roam events based on latency |
US10908987B1 (en) * | 2019-03-28 | 2021-02-02 | Amazon Technologies, Inc. | Handling memory errors in computing systems |
KR102351087B1 (ko) * | 2019-06-04 | 2022-01-14 | 주식회사 딥엑스 | 인공신경망의 데이터 로컬리티 기반의 데이터 캐슁을 이용하여 고속의 인공신경망 오퍼레이션을 지원하는 데이터 관리 장치 |
US10860301B2 (en) * | 2019-06-28 | 2020-12-08 | Intel Corporation | Control speculation in dataflow graphs |
US20200410094A1 (en) * | 2019-06-29 | 2020-12-31 | Intel Corporation | Hardware load hardening for speculative side-channel attacks |
JP2021047863A (ja) * | 2019-09-19 | 2021-03-25 | 三星電子株式会社Samsung Electronics Co.,Ltd. | ストレージ装置及びメッセージトンネリングのためのシステム並びにその方法 |
US11030129B2 (en) * | 2019-09-19 | 2021-06-08 | Samsung Electronics Co., Ltd. | Systems and methods for message tunneling |
CN111045818B (zh) * | 2019-11-21 | 2022-12-16 | 中国航空工业集团公司西安航空计算技术研究所 | 一种多端口Cache的请求预处理电路 |
CN110879805B (zh) * | 2019-11-22 | 2022-04-05 | 北京锐安科技有限公司 | 一种数据异常发现方法、装置、服务器及存储介质 |
US11907713B2 (en) | 2019-12-28 | 2024-02-20 | Intel Corporation | Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator |
CN111240849A (zh) * | 2020-01-09 | 2020-06-05 | 中国人民解放军军事科学院国防科技创新研究院 | 一种异步流水线电路的死锁检测电路和检测方法 |
CN111414266B (zh) * | 2020-03-23 | 2024-04-05 | 浪潮通用软件有限公司 | 一种分布式事务的同步异步通信方法和装置 |
US11562237B2 (en) * | 2020-04-03 | 2023-01-24 | Micron Technology, Inc. | Processing of overwhelming stimuli in vehicle data recorders |
US11507517B2 (en) * | 2020-09-25 | 2022-11-22 | Advanced Micro Devices, Inc. | Scalable region-based directory |
US11507372B2 (en) * | 2020-10-07 | 2022-11-22 | Arm Limited | Processing of instructions fetched from memory |
WO2022094964A1 (zh) * | 2020-11-06 | 2022-05-12 | 华为技术有限公司 | 处理指令的方法以及图计算装置 |
CN114546927B (zh) * | 2020-11-24 | 2023-08-08 | 北京灵汐科技有限公司 | 数据传输方法、核心、计算机可读介质、电子设备 |
US11074142B1 (en) * | 2021-01-15 | 2021-07-27 | Coupang Corp. | Systems and methods for automatically resolving system failure through force supplying cached API data |
CN114610519B (zh) * | 2022-03-17 | 2023-03-14 | 电子科技大学 | 一种处理器寄存器组的异常错误的实时恢复方法及*** |
WO2024049791A1 (en) * | 2022-09-02 | 2024-03-07 | Carnegie Mellon University | Energy-minimal dataflow architecture with programmable on-chip network |
CN116185745B (zh) * | 2023-04-26 | 2023-06-27 | 中国民航大学 | 用于北斗信号处理复杂运算芯片的快速软错误检测方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001028199A (ja) * | 1999-07-14 | 2001-01-30 | Fujitsu Ten Ltd | 被検査デバイステスト方法及びその装置 |
CN1696906A (zh) * | 2004-04-07 | 2005-11-16 | 国际商业机器公司 | 用于存储设备的自主错误恢复方法、*** |
US8004915B1 (en) * | 2009-05-08 | 2011-08-23 | Altera Corporation | Area-efficient memory built-in-self-test circuitry with advanced debug capabilities for distributed memory blocks |
CN104025022A (zh) * | 2011-12-23 | 2014-09-03 | 英特尔公司 | 用于具有推测支持的向量化的装置和方法 |
CN104699577A (zh) * | 2013-12-06 | 2015-06-10 | 英特尔公司 | 用于在分布式码字存储***中定位故障管芯的计数器 |
CN104937539A (zh) * | 2012-11-28 | 2015-09-23 | 英特尔公司 | 用于提供推入缓冲器复制和存储功能的指令和逻辑 |
Family Cites Families (270)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US672177A (en) | 1900-02-08 | 1901-04-16 | William H Metcalf | Inhaler. |
US5093920A (en) | 1987-06-25 | 1992-03-03 | At&T Bell Laboratories | Programmable processing elements interconnected by a communication network including field operation unit for performing field operations |
JPH03500461A (ja) | 1988-07-22 | 1991-01-31 | アメリカ合衆国 | データ駆動式計算用のデータ流れ装置 |
US5241635A (en) | 1988-11-18 | 1993-08-31 | Massachusetts Institute Of Technology | Tagged token data processing system with operand matching in activation frames |
US5141747A (en) | 1989-05-23 | 1992-08-25 | Minnesota Mining And Manufacturing Company | Denatured collagen membrane |
US5655096A (en) | 1990-10-12 | 1997-08-05 | Branigin; Michael H. | Method and apparatus for dynamic scheduling of instructions to ensure sequentially coherent data in a processor employing out-of-order execution |
EP0547247B1 (en) | 1991-07-08 | 2001-04-04 | Seiko Epson Corporation | Extensible risc microprocessor architecture |
US5314503A (en) | 1993-03-23 | 1994-05-24 | Rasor Associates, Inc. | Automatic sheath protection of hypodermic needle |
US5393536A (en) | 1993-04-05 | 1995-02-28 | Crane Plastics Company | Coextrusion apparatus |
JPH0713945A (ja) | 1993-06-16 | 1995-01-17 | Nippon Sheet Glass Co Ltd | 演算処理部および制御・記憶部分離型マルチプロセッサ ・システムのバス構造 |
US5574944A (en) | 1993-12-15 | 1996-11-12 | Convex Computer Corporation | System for accessing distributed memory by breaking each accepted access request into series of instructions by using sets of parameters defined as logical channel context |
US5393454A (en) | 1994-02-03 | 1995-02-28 | Colgate Palmolive Co. | Thickened composition containing polymeric thickener and aliphatic hydrocarbon |
JP3610600B2 (ja) | 1994-08-22 | 2005-01-12 | チッソ株式会社 | 光学活性エンド−2−ノルボルネオール類の製造方法 |
US5787029A (en) | 1994-12-19 | 1998-07-28 | Crystal Semiconductor Corp. | Ultra low power multiplier |
US5734601A (en) | 1995-01-30 | 1998-03-31 | Cirrus Logic, Inc. | Booth multiplier with low power, high performance input circuitry |
US5818743A (en) | 1995-04-21 | 1998-10-06 | Texas Instruments Incorporated | Low power multiplier |
US6020139A (en) | 1995-04-25 | 2000-02-01 | Oridigm Corporation | S-adenosyl methionine regulation of metabolic pathways and its use in diagnosis and therapy |
US5956342A (en) | 1995-07-19 | 1999-09-21 | Fujitsu Network Communications, Inc. | Priority arbitration for point-to-point and multipoint transmission |
US5725364A (en) | 1996-02-20 | 1998-03-10 | Wagner Spray Tech Corporation | Pressure control module |
US5805827A (en) | 1996-03-04 | 1998-09-08 | 3Com Corporation | Distributed signal processing for data channels maintaining channel bandwidth |
US5790821A (en) | 1996-03-08 | 1998-08-04 | Advanced Micro Devices, Inc. | Control bit vector storage for storing control vectors corresponding to instruction operations in a microprocessor |
US6088780A (en) | 1997-03-31 | 2000-07-11 | Institute For The Development Of Emerging Architecture, L.L.C. | Page table walker that uses at least one of a default page size and a page size selected for a virtual address space to position a sliding field in a virtual address |
US5840598A (en) | 1997-08-14 | 1998-11-24 | Micron Technology, Inc. | LOC semiconductor assembled with room temperature adhesive |
US6604120B1 (en) | 1997-09-04 | 2003-08-05 | Cirrus Logic, Inc. | Multiplier power saving design |
US5930484A (en) | 1997-09-18 | 1999-07-27 | International Business Machines Corporation | Method and system for input/output control in a multiprocessor system utilizing simultaneous variable-width bus access |
US6212623B1 (en) | 1998-08-24 | 2001-04-03 | Advanced Micro Devices, Inc. | Universal dependency vector/queue entry |
US6141747A (en) | 1998-09-22 | 2000-10-31 | Advanced Micro Devices, Inc. | System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word |
US6314503B1 (en) | 1998-12-30 | 2001-11-06 | Emc Corporation | Method and apparatus for managing the placement of data in a storage system to achieve increased system performance |
US6295571B1 (en) | 1999-03-19 | 2001-09-25 | Times N Systems, Inc. | Shared memory apparatus and method for multiprocessor systems |
WO2000062182A2 (en) | 1999-04-09 | 2000-10-19 | Clearspeed Technology Limited | Parallel data processing apparatus |
WO2000068784A1 (en) | 1999-05-06 | 2000-11-16 | Koninklijke Philips Electronics N.V. | Data processing device, method for executing load or store instructions and method for compiling programs |
US6393536B1 (en) | 1999-05-18 | 2002-05-21 | Advanced Micro Devices, Inc. | Load/store unit employing last-in-buffer indication for rapid load-hit-store |
US6205533B1 (en) | 1999-08-12 | 2001-03-20 | Norman H. Margolus | Mechanism for efficient data access and communication in parallel computations on an emulated spatial lattice |
US7911960B1 (en) | 1999-08-13 | 2011-03-22 | International Business Machines Corporation | Delayed-start method for minimizing internal switch congestion |
JP2001109661A (ja) | 1999-10-14 | 2001-04-20 | Hitachi Ltd | キャッシュメモリの割当方法及びオペレーティングシステム及びそのオペレーティングシステムを有するコンピュータシステム |
US6601126B1 (en) | 2000-01-20 | 2003-07-29 | Palmchip Corporation | Chip-core framework for systems-on-a-chip |
US6877044B2 (en) | 2000-02-10 | 2005-04-05 | Vicom Systems, Inc. | Distributed storage management platform architecture |
EP1342364A2 (en) | 2000-11-28 | 2003-09-10 | SeaChange International, Inc. | Content/service handling and delivery |
GB2370381B (en) | 2000-12-19 | 2003-12-24 | Picochip Designs Ltd | Processor architecture |
US20020159466A1 (en) | 2001-02-14 | 2002-10-31 | John Rhoades | Lookup engine |
WO2005045692A2 (en) | 2003-08-28 | 2005-05-19 | Pact Xpp Technologies Ag | Data processing device and method |
US6725364B1 (en) | 2001-03-08 | 2004-04-20 | Xilinx, Inc. | Configurable processor system |
GB2374242B (en) | 2001-04-07 | 2005-03-16 | Univ Dundee | Integrated circuit and related improvements |
US6515333B1 (en) | 2001-04-27 | 2003-02-04 | Advanced Micro Devices, Inc. | Removal of heat from SOI device |
WO2002097565A2 (en) | 2001-05-25 | 2002-12-05 | Annapolis Micro Systems, Inc. | Method and apparatus for modeling dataflow systems and realization to hardware |
US20020184291A1 (en) | 2001-05-31 | 2002-12-05 | Hogenauer Eugene B. | Method and system for scheduling in an adaptable computing engine |
US7305492B2 (en) | 2001-07-06 | 2007-12-04 | Juniper Networks, Inc. | Content service aggregation system |
US6874079B2 (en) | 2001-07-25 | 2005-03-29 | Quicksilver Technology | Adaptive computing engine with dataflow graph based sequencing in reconfigurable mini-matrices of composite functional blocks |
US20030023830A1 (en) | 2001-07-25 | 2003-01-30 | Hogenauer Eugene B. | Method and system for encoding instructions for a VLIW that reduces instruction memory requirements |
US8412915B2 (en) | 2001-11-30 | 2013-04-02 | Altera Corporation | Apparatus, system and method for configuration of adaptive integrated circuitry having heterogeneous computational elements |
US20030105799A1 (en) | 2001-12-03 | 2003-06-05 | Avaz Networks, Inc. | Distributed processing architecture with scalable processing layers |
JP3912091B2 (ja) | 2001-12-04 | 2007-05-09 | ソニー株式会社 | データ通信システム、データ送信装置、データ受信装置、および方法、並びにコンピュータ・プログラム |
US20040022094A1 (en) | 2002-02-25 | 2004-02-05 | Sivakumar Radhakrishnan | Cache usage for concurrent multiple streams |
US9170812B2 (en) | 2002-03-21 | 2015-10-27 | Pact Xpp Technologies Ag | Data processing system having integrated pipelined array data processor |
US20040012600A1 (en) | 2002-03-22 | 2004-01-22 | Deering Michael F. | Scalable high performance 3d graphics |
US7987479B1 (en) | 2002-03-28 | 2011-07-26 | Cisco Technology, Inc. | System and method for distribution of content over a network |
US7200735B2 (en) | 2002-04-10 | 2007-04-03 | Tensilica, Inc. | High-performance hybrid processor with configurable execution units |
JP2004005249A (ja) | 2002-05-31 | 2004-01-08 | Fujitsu Ltd | 負荷分散型マルチプロセッサに対する信号振分装置 |
US6986131B2 (en) | 2002-06-18 | 2006-01-10 | Hewlett-Packard Development Company, L.P. | Method and apparatus for efficient code generation for modulo scheduled uncounted loops |
US20040001458A1 (en) | 2002-06-27 | 2004-01-01 | Motorola, Inc. | Method and apparatus for facilitating a fair access to a channel by participating members of a group communication system |
US7486678B1 (en) | 2002-07-03 | 2009-02-03 | Greenfield Networks | Multi-slice network processor |
WO2004021176A2 (de) | 2002-08-07 | 2004-03-11 | Pact Xpp Technologies Ag | Verfahren und vorrichtung zur datenverarbeitung |
US6986023B2 (en) | 2002-08-09 | 2006-01-10 | Intel Corporation | Conditional execution of coprocessor instruction based on main processor arithmetic flags |
US7181578B1 (en) | 2002-09-12 | 2007-02-20 | Copan Systems, Inc. | Method and apparatus for efficient scalable storage management |
US6983456B2 (en) | 2002-10-31 | 2006-01-03 | Src Computers, Inc. | Process for converting programs in high-level programming languages to a unified executable for hybrid computing platforms |
US7415540B2 (en) | 2002-12-31 | 2008-08-19 | Intel Corporation | Scheduling processing threads |
US7047370B1 (en) | 2003-01-14 | 2006-05-16 | Cisco Technology, Inc. | Full access to memory interfaces via remote request |
SE0300742D0 (sv) | 2003-03-17 | 2003-03-17 | Flow Computing Ab | Data Flow Machine |
WO2004114577A2 (en) | 2003-06-18 | 2004-12-29 | Centillium Communications, Inc. | Event scheduling for multi-port xdsl transceivers |
US7714870B2 (en) | 2003-06-23 | 2010-05-11 | Intel Corporation | Apparatus and method for selectable hardware accelerators in a data driven architecture |
US7088371B2 (en) | 2003-06-27 | 2006-08-08 | Intel Corporation | Memory command handler for use in an image signal processor having a data driven architecture |
US20130111188A9 (en) | 2003-07-24 | 2013-05-02 | Martin Vorbach | Low latency massive parallel data processing device |
US7257665B2 (en) | 2003-09-29 | 2007-08-14 | Intel Corporation | Branch-aware FIFO for interprocessor data sharing |
US20050138323A1 (en) | 2003-12-18 | 2005-06-23 | Intel Corporation, A Delaware Corporation | Accumulator shadow register systems and methods |
JP4104538B2 (ja) | 2003-12-22 | 2008-06-18 | 三洋電機株式会社 | リコンフィギュラブル回路、リコンフィギュラブル回路を備えた処理装置、リコンフィギュラブル回路における論理回路の機能決定方法、回路生成方法および回路 |
TWI323584B (en) | 2003-12-26 | 2010-04-11 | Hon Hai Prec Ind Co Ltd | Method and system for burning mac address |
US7490218B2 (en) * | 2004-01-22 | 2009-02-10 | University Of Washington | Building a wavecache |
JP4502650B2 (ja) | 2004-02-03 | 2010-07-14 | 日本電気株式会社 | アレイ型プロセッサ |
US7509484B1 (en) * | 2004-06-30 | 2009-03-24 | Sun Microsystems, Inc. | Handling cache misses by selectively flushing the pipeline |
JP4546775B2 (ja) | 2004-06-30 | 2010-09-15 | 富士通株式会社 | 時分割多重処理可能なリコンフィギュラブル回路 |
US7890735B2 (en) | 2004-08-30 | 2011-02-15 | Texas Instruments Incorporated | Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture |
US7877748B2 (en) | 2004-11-19 | 2011-01-25 | The United States Of America As Represented By The Secretary Of The Air Force | Method and apparatus for timing information flow in a distributed system |
US7594102B2 (en) | 2004-12-15 | 2009-09-22 | Stmicroelectronics, Inc. | Method and apparatus for vector execution on a scalar machine |
US7613886B2 (en) | 2005-02-08 | 2009-11-03 | Sony Computer Entertainment Inc. | Methods and apparatus for synchronizing data access to a local memory in a multi-processor system |
US7676646B2 (en) | 2005-03-02 | 2010-03-09 | Cisco Technology, Inc. | Packet processor with wide register set architecture |
US7546331B2 (en) | 2005-03-17 | 2009-06-09 | Qualcomm Incorporated | Low power array multiplier |
US8694589B2 (en) | 2005-03-31 | 2014-04-08 | Google Inc. | Methods and systems for saving draft electronic communications |
US7373444B2 (en) | 2005-04-15 | 2008-05-13 | Kabushiki Kaisha Toshiba | Systems and methods for manipulating entries in a command buffer using tag information |
US7793040B2 (en) | 2005-06-01 | 2010-09-07 | Microsoft Corporation | Content addressable memory architecture |
JP4536618B2 (ja) | 2005-08-02 | 2010-09-01 | 富士通セミコンダクター株式会社 | リコンフィグ可能な集積回路装置 |
US8275976B2 (en) | 2005-08-29 | 2012-09-25 | The Invention Science Fund I, Llc | Hierarchical instruction scheduler facilitating instruction replay |
US20160098279A1 (en) | 2005-08-29 | 2016-04-07 | Searete Llc | Method and apparatus for segmented sequential storage |
WO2007031696A1 (en) | 2005-09-13 | 2007-03-22 | Arm Limited | Cache miss detection in a data processing apparatus |
JP2007079958A (ja) | 2005-09-14 | 2007-03-29 | Hitachi Ltd | 記憶制御装置、データ処理方法、及びコンピュータプログラム |
US8620623B2 (en) | 2005-11-14 | 2013-12-31 | Globaltrak, Llc | Hierarchical and distributed information processing architecture for a container security system |
US20070143546A1 (en) | 2005-12-21 | 2007-06-21 | Intel Corporation | Partitioned shared cache |
EP1808774A1 (en) | 2005-12-22 | 2007-07-18 | St Microelectronics S.A. | A hierarchical reconfigurable computer architecture |
JP4795025B2 (ja) | 2006-01-13 | 2011-10-19 | キヤノン株式会社 | ダイナミックリコンフィギャラブルデバイス、制御方法、及びプログラム |
US8595279B2 (en) | 2006-02-27 | 2013-11-26 | Qualcomm Incorporated | Floating-point processor with reduced power requirements for selectable subprecision |
US7533244B2 (en) | 2006-05-09 | 2009-05-12 | Le Nguyen Tran | Network-on-chip dataflow architecture |
DE112006003875T5 (de) | 2006-05-16 | 2009-06-18 | Intel Corporation, Santa Clara | Gleitkommaaddition für unterschiedliche Gleitkommaformate |
EP2021921A2 (en) | 2006-05-17 | 2009-02-11 | Nxp B.V. | Multi-processing system and a method of executing a plurality of data processing tasks |
US7594055B2 (en) | 2006-05-24 | 2009-09-22 | International Business Machines Corporation | Systems and methods for providing distributed technology independent memory controllers |
US7613848B2 (en) | 2006-06-13 | 2009-11-03 | International Business Machines Corporation | Dynamic stabilization for a stream processing system |
US7493406B2 (en) | 2006-06-13 | 2009-02-17 | International Business Machines Corporation | Maximal flow scheduling for a stream processing system |
US8456191B2 (en) | 2006-06-21 | 2013-06-04 | Element Cxi, Llc | Data-driven integrated circuit architecture |
US8395414B2 (en) | 2006-06-21 | 2013-03-12 | Element Cxi, Llc | Hierarchically-scalable reconfigurable integrated circuit architecture with unit delay modules |
US20080072113A1 (en) | 2006-08-30 | 2008-03-20 | Siukwin Tsang | Method of locating packet for resend from retry buffer |
US9946547B2 (en) | 2006-09-29 | 2018-04-17 | Arm Finance Overseas Limited | Load/store unit for a processor, and applications thereof |
US8010766B2 (en) | 2006-10-12 | 2011-08-30 | International Business Machines Corporation | Increasing buffer locality during multiple table access operations |
US7660911B2 (en) | 2006-12-20 | 2010-02-09 | Smart Modular Technologies, Inc. | Block-based data striping to flash memory |
JPWO2008087779A1 (ja) | 2007-01-19 | 2010-05-06 | 日本電気株式会社 | アレイ型プロセッサおよびデータ処理システム |
JP4933284B2 (ja) | 2007-01-25 | 2012-05-16 | 株式会社日立製作所 | ストレージ装置及び負荷分散方法 |
US8543742B2 (en) | 2007-02-22 | 2013-09-24 | Super Talent Electronics, Inc. | Flash-memory device with RAID-type controller |
US8321597B2 (en) | 2007-02-22 | 2012-11-27 | Super Talent Electronics, Inc. | Flash-memory device with RAID-type controller |
US7843215B2 (en) | 2007-03-09 | 2010-11-30 | Quadric, Inc. | Reconfigurable array to compute digital algorithms |
US7613909B2 (en) | 2007-04-17 | 2009-11-03 | Xmos Limited | Resuming thread to service ready port transferring data externally at different clock rate than internal circuitry of a processor |
US7779298B2 (en) | 2007-06-11 | 2010-08-17 | International Business Machines Corporation | Distributed job manager recovery |
US9648325B2 (en) | 2007-06-30 | 2017-05-09 | Microsoft Technology Licensing, Llc | Video decoding implementations for a graphics processing unit |
US8347312B2 (en) | 2007-07-06 | 2013-01-01 | Xmos Limited | Thread communications |
US7822951B2 (en) | 2007-08-01 | 2010-10-26 | Advanced Micro Devices, Inc. | System and method of load-store forwarding |
US8295306B2 (en) | 2007-08-28 | 2012-10-23 | Cisco Technologies, Inc. | Layer-4 transparent secure transport protocol for end-to-end application protection |
WO2009035185A1 (en) | 2007-09-11 | 2009-03-19 | Core Logic Inc. | Reconfigurable array processor for floating-point operations |
KR101312281B1 (ko) | 2007-11-06 | 2013-09-30 | 재단법인서울대학교산학협력재단 | 프로세서 및 메모리 제어 방법 |
US7936753B1 (en) | 2007-11-30 | 2011-05-03 | Qlogic, Corporation | Method and system for reliable multicast |
US8078839B2 (en) | 2007-12-13 | 2011-12-13 | Wave Semiconductor | Concurrent processing element system, and method |
US9219603B2 (en) | 2008-01-09 | 2015-12-22 | International Business Machines Corporation | System and method for encryption key management in a mixed infrastructure stream processing framework |
US8160975B2 (en) | 2008-01-25 | 2012-04-17 | Mcafee, Inc. | Granular support vector machine with random granularity |
EP2278873B1 (en) | 2008-03-19 | 2015-05-06 | Cryo-Save AG | Improved cryopreservation of adipose tissue for the isolation of mesenchymal stem cells |
RU2374684C1 (ru) | 2008-05-04 | 2009-11-27 | Государственное образовательное учреждение высшего профессионального образования Курский государственный технический университет | Параллельно-конвейерное устройство для векторизации аэрокосмических изображений земной поверхности |
US8843691B2 (en) | 2008-06-25 | 2014-09-23 | Stec, Inc. | Prioritized erasure of data blocks in a flash storage device |
JP5056644B2 (ja) | 2008-07-18 | 2012-10-24 | 富士通セミコンダクター株式会社 | データ変換装置、データ変換方法及びプログラム |
US8001510B1 (en) | 2008-09-05 | 2011-08-16 | Xilinx, Inc. | Automated method of architecture mapping selection from constrained high level language description via element characterization |
US20100191911A1 (en) | 2008-12-23 | 2010-07-29 | Marco Heddes | System-On-A-Chip Having an Array of Programmable Processing Elements Linked By an On-Chip Network with Distributed On-Chip Shared Memory and External Shared Memory |
US8078848B2 (en) | 2009-01-09 | 2011-12-13 | Micron Technology, Inc. | Memory controller having front end and back end channels for modifying commands |
US8086783B2 (en) | 2009-02-23 | 2011-12-27 | International Business Machines Corporation | High availability memory system |
US8248936B2 (en) | 2009-04-01 | 2012-08-21 | Lockheed Martin Corporation | Tuning congestion control in IP multicast to mitigate the impact of blockage |
US8055816B2 (en) | 2009-04-09 | 2011-11-08 | Micron Technology, Inc. | Memory controllers, memory systems, solid state drives and methods for processing a number of commands |
US8910168B2 (en) | 2009-04-27 | 2014-12-09 | Lsi Corporation | Task backpressure and deletion in a multi-flow network processor architecture |
US8576714B2 (en) | 2009-05-29 | 2013-11-05 | Futurewei Technologies, Inc. | System and method for relay node flow control in a wireless communications system |
GB2471067B (en) | 2009-06-12 | 2011-11-30 | Graeme Roy Smith | Shared resource multi-thread array processor |
US20110004742A1 (en) | 2009-07-06 | 2011-01-06 | Eonsil, Inc. | Variable-Cycle, Event-Driven Multi-Execution Flash Processor |
US8332597B1 (en) | 2009-08-11 | 2012-12-11 | Xilinx, Inc. | Synchronization of external memory accesses in a dataflow machine |
US8650240B2 (en) | 2009-08-17 | 2014-02-11 | International Business Machines Corporation | Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture |
US8301803B2 (en) | 2009-10-23 | 2012-10-30 | Samplify Systems, Inc. | Block floating point compression of signal data |
GB201001621D0 (en) | 2010-02-01 | 2010-03-17 | Univ Catholique Louvain | A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms |
US8578117B2 (en) | 2010-02-10 | 2013-11-05 | Qualcomm Incorporated | Write-through-read (WTR) comparator circuits, systems, and methods use of same with a multiple-port file |
US8495341B2 (en) | 2010-02-17 | 2013-07-23 | International Business Machines Corporation | Instruction length based cracking for instruction of variable length storage operands |
WO2011133030A1 (en) | 2010-04-23 | 2011-10-27 | Vector Fabrics B.V. | Improved embedded system performance |
US8438341B2 (en) | 2010-06-16 | 2013-05-07 | International Business Machines Corporation | Common memory programming |
US8719455B2 (en) | 2010-06-28 | 2014-05-06 | International Business Machines Corporation | DMA-based acceleration of command push buffer between host and target devices |
CN101950282B (zh) | 2010-08-30 | 2012-05-23 | 中国科学院计算技术研究所 | 一种多处理器***及其同步引擎 |
US9201801B2 (en) | 2010-09-15 | 2015-12-01 | International Business Machines Corporation | Computing device with asynchronous auxiliary execution unit |
TWI425357B (zh) | 2010-09-27 | 2014-02-01 | Silicon Motion Inc | 用來進行區塊管理之方法以及記憶裝置及控制器 |
KR101735677B1 (ko) | 2010-11-17 | 2017-05-16 | 삼성전자주식회사 | 부동 소수점의 복합 연산장치 및 그 연산방법 |
US9274962B2 (en) | 2010-12-07 | 2016-03-01 | Intel Corporation | Apparatus, method, and system for instantaneous cache state recovery from speculative abort/commit |
US9026769B1 (en) | 2011-01-31 | 2015-05-05 | Marvell International Ltd. | Detecting and reissuing of loop instructions in reorder structure |
TWI432987B (zh) | 2011-03-15 | 2014-04-01 | Phison Electronics Corp | 記憶體儲存裝置、其記憶體控制器與病毒掃描方法 |
US9170846B2 (en) | 2011-03-29 | 2015-10-27 | Daniel Delling | Distributed data-parallel execution engines for user-defined serial problems using branch-and-bound algorithm |
US8799880B2 (en) | 2011-04-08 | 2014-08-05 | Siemens Aktiengesellschaft | Parallelization of PLC programs for operation in multi-processor environments |
JP5693712B2 (ja) | 2011-04-21 | 2015-04-01 | ルネサスエレクトロニクス株式会社 | 半導体集積回路 |
US9817700B2 (en) | 2011-04-26 | 2017-11-14 | International Business Machines Corporation | Dynamic data partitioning for optimal resource utilization in a parallel data processing system |
US10078620B2 (en) | 2011-05-27 | 2018-09-18 | New York University | Runtime reconfigurable dataflow processor with multi-port memory access module |
US9116634B2 (en) * | 2011-06-10 | 2015-08-25 | International Business Machines Corporation | Configure storage class memory command |
US9727827B2 (en) | 2011-06-24 | 2017-08-08 | Jobvite, Inc. | Method and system for referral tracking |
US20130024875A1 (en) | 2011-07-22 | 2013-01-24 | Yilin Wang | Event System And Methods For Using Same |
US8990452B2 (en) | 2011-07-26 | 2015-03-24 | International Business Machines Corporation | Dynamic reduction of stream backpressure |
US9148495B2 (en) | 2011-07-26 | 2015-09-29 | International Business Machines Corporation | Dynamic runtime choosing of processing communication methods |
US9201817B2 (en) | 2011-08-03 | 2015-12-01 | Montage Technology (Shanghai) Co., Ltd. | Method for allocating addresses to data buffers in distributed buffer chipset |
US8694754B2 (en) | 2011-09-09 | 2014-04-08 | Ocz Technology Group, Inc. | Non-volatile memory-based mass storage devices and methods for writing data thereto |
US8966457B2 (en) * | 2011-11-15 | 2015-02-24 | Global Supercomputing Corporation | Method and system for converting a single-threaded software program into an application-specific supercomputer |
US8898505B2 (en) | 2011-12-01 | 2014-11-25 | International Business Machines Corporation | Dynamically configureable placement engine |
US8892914B2 (en) | 2011-12-08 | 2014-11-18 | Active-Semi, Inc. | Programmable fault protect for processor controlled high-side and low-side drivers |
WO2013100783A1 (en) | 2011-12-29 | 2013-07-04 | Intel Corporation | Method and system for control signalling in a data path module |
KR101968512B1 (ko) | 2012-02-21 | 2019-04-12 | 삼성전자주식회사 | Nfc를 이용한 멀티미디어 데이터 송수신 장치 및 방법 |
US9146775B2 (en) | 2012-04-26 | 2015-09-29 | International Business Machines Corporation | Operator graph changes in response to dynamic connections in stream computing applications |
US9128725B2 (en) | 2012-05-04 | 2015-09-08 | Apple Inc. | Load-store dependency predictor content management |
US8995410B2 (en) | 2012-05-25 | 2015-03-31 | University Of Southern California | Airsync: enabling distributed multiuser MIMO with full multiplexing gain |
US9213571B2 (en) | 2012-06-06 | 2015-12-15 | 2236008 Ontario Inc. | System and method for changing abilities of a process |
US9110713B2 (en) | 2012-08-30 | 2015-08-18 | Qualcomm Incorporated | Microarchitecture for floating point fused multiply-add with exponent scaling |
US9292569B2 (en) | 2012-10-02 | 2016-03-22 | Oracle International Corporation | Semi-join acceleration |
US9632787B2 (en) | 2012-10-23 | 2017-04-25 | Ca, Inc. | Data processing system with data characteristic based identification of corresponding instructions |
US9135051B2 (en) | 2012-11-02 | 2015-09-15 | Red Hat Israel, Ltd. | Redirecting guest-generated events to an event aggregator in a networked virtualization environment |
US8693490B1 (en) | 2012-12-20 | 2014-04-08 | Unbound Networks, Inc. | Parallel processing using multi-core processor |
US9104474B2 (en) | 2012-12-28 | 2015-08-11 | Intel Corporation | Variable precision floating point multiply-add circuit |
US9424045B2 (en) | 2013-01-29 | 2016-08-23 | Arm Limited | Data processing apparatus and method for controlling use of an issue queue to represent an instruction suitable for execution by a wide operand execution unit |
US10467010B2 (en) | 2013-03-15 | 2019-11-05 | Intel Corporation | Method and apparatus for nearest potential store tagging |
US9268528B2 (en) | 2013-05-23 | 2016-02-23 | Nvidia Corporation | System and method for dynamically reducing power consumption of floating-point logic |
US9792252B2 (en) | 2013-05-31 | 2017-10-17 | Microsoft Technology Licensing, Llc | Incorporating a spatial array into one or more programmable processor cores |
US9715389B2 (en) | 2013-06-25 | 2017-07-25 | Advanced Micro Devices, Inc. | Dependent instruction suppression |
US9424079B2 (en) | 2013-06-27 | 2016-08-23 | Microsoft Technology Licensing, Llc | Iteration support in a heterogeneous dataflow engine |
US9524164B2 (en) | 2013-08-30 | 2016-12-20 | Advanced Micro Devices, Inc. | Specialized memory disambiguation mechanisms for different memory read access types |
US9292076B2 (en) | 2013-09-16 | 2016-03-22 | Intel Corporation | Fast recalibration circuitry for input/output (IO) compensation finite state machine power-down-exit |
US9244827B2 (en) | 2013-09-25 | 2016-01-26 | Intel Corporation | Store address prediction for memory disambiguation in a processing device |
US10331583B2 (en) | 2013-09-26 | 2019-06-25 | Intel Corporation | Executing distributed memory operations using processing elements connected by distributed channels |
HUP1300561A2 (en) | 2013-09-27 | 2015-03-30 | Pazmany Peter Katolikus Egyetem | Computer architecture and processing |
US9594720B2 (en) | 2013-10-21 | 2017-03-14 | Xmos Limited | Interface between a bus and a inter-thread interconnect |
JP6446995B2 (ja) | 2013-10-29 | 2019-01-09 | 株式会社リコー | 情報処理システム及び情報処理方法 |
US9274882B2 (en) * | 2013-12-04 | 2016-03-01 | International Business Machines Corporation | Page retirement in a NAND flash memory system |
US9699079B2 (en) | 2013-12-30 | 2017-07-04 | Netspeed Systems | Streaming bridge design with host interfaces and network on chip (NoC) layers |
US10591983B2 (en) | 2014-03-14 | 2020-03-17 | Wisconsin Alumni Research Foundation | Computer accelerator system using a trigger architecture memory access processor |
KR20150126484A (ko) | 2014-05-02 | 2015-11-12 | 삼성전자주식회사 | 소스 코드를 머신 코드로 변환하는 전자 장치 및 방법 |
US9696927B2 (en) * | 2014-06-19 | 2017-07-04 | International Business Machines Corporation | Memory transaction having implicit ordering effects |
WO2016003646A1 (en) | 2014-06-30 | 2016-01-07 | Unisys Corporation | Enterprise management for secure network communications over ipsec |
US10108241B2 (en) | 2014-09-15 | 2018-10-23 | Intel Corporation | Method and apparatus for saving power of a processor socket in a multi-socket computer system |
DE102014113430A1 (de) | 2014-09-17 | 2016-03-17 | Bundesdruckerei Gmbh | Verteilte Datenspeicherung mittels Berechtigungstoken |
US9710279B2 (en) * | 2014-09-26 | 2017-07-18 | Intel Corporation | Method and apparatus for speculative vectorization |
US9836473B2 (en) | 2014-10-03 | 2017-12-05 | International Business Machines Corporation | Hardware acceleration for a compressed computation database |
US9473144B1 (en) | 2014-11-25 | 2016-10-18 | Cypress Semiconductor Corporation | Integrated circuit device with programmable analog subsystem |
US10324768B2 (en) * | 2014-12-17 | 2019-06-18 | Intel Corporation | Lightweight restricted transactional memory for speculative compiler optimization |
US9535787B2 (en) * | 2015-02-12 | 2017-01-03 | International Business Machines Corporation | Dynamic cache row fail accumulation due to catastrophic failure |
US9851945B2 (en) | 2015-02-16 | 2017-12-26 | Advanced Micro Devices, Inc. | Bit remapping mechanism to enhance lossy compression in floating-point applications |
US9658676B1 (en) | 2015-02-19 | 2017-05-23 | Amazon Technologies, Inc. | Sending messages in a network-on-chip and providing a low power state for processing cores |
US9594521B2 (en) | 2015-02-23 | 2017-03-14 | Advanced Micro Devices, Inc. | Scheduling of data migration |
US9946719B2 (en) | 2015-07-27 | 2018-04-17 | Sas Institute Inc. | Distributed data set encryption and decryption |
US10216693B2 (en) | 2015-07-30 | 2019-02-26 | Wisconsin Alumni Research Foundation | Computer with hybrid Von-Neumann/dataflow execution architecture |
US10108417B2 (en) | 2015-08-14 | 2018-10-23 | Qualcomm Incorporated | Storing narrow produced values for instruction operands directly in a register map in an out-of-order processor |
US20170083313A1 (en) | 2015-09-22 | 2017-03-23 | Qualcomm Incorporated | CONFIGURING COARSE-GRAINED RECONFIGURABLE ARRAYS (CGRAs) FOR DATAFLOW INSTRUCTION BLOCK EXECUTION IN BLOCK-BASED DATAFLOW INSTRUCTION SET ARCHITECTURES (ISAs) |
US10121553B2 (en) | 2015-09-30 | 2018-11-06 | Sunrise Memory Corporation | Capacitive-coupled non-volatile thin-film transistor NOR strings in three-dimensional arrays |
US9847783B1 (en) | 2015-10-13 | 2017-12-19 | Altera Corporation | Scalable architecture for IP block integration |
US9762563B2 (en) | 2015-10-14 | 2017-09-12 | FullArmor Corporation | Resource access system and method |
CN105512060B (zh) | 2015-12-04 | 2018-09-14 | 上海兆芯集成电路有限公司 | 输入/输出电路以及数据传输控制方法 |
US9923905B2 (en) | 2016-02-01 | 2018-03-20 | General Electric Company | System and method for zone access control |
US9959068B2 (en) | 2016-03-04 | 2018-05-01 | Western Digital Technologies, Inc. | Intelligent wide port phy usage |
KR20170105353A (ko) | 2016-03-09 | 2017-09-19 | 삼성전자주식회사 | 전자장치 및 그 제어방법 |
US20170286169A1 (en) | 2016-03-31 | 2017-10-05 | National Instruments Corporation | Automatically Mapping Program Functions to Distributed Heterogeneous Platforms Based on Hardware Attributes and Specified Constraints |
GB2565934B (en) | 2016-04-27 | 2022-08-10 | Coda Project Inc | System, method, and apparatus for operating a unified document surface workspace |
US11106467B2 (en) | 2016-04-28 | 2021-08-31 | Microsoft Technology Licensing, Llc | Incremental scheduler for out-of-order block ISA processors |
US10110233B2 (en) | 2016-06-23 | 2018-10-23 | Altera Corporation | Methods for specifying processor architectures for programmable integrated circuits |
US20180081834A1 (en) | 2016-09-16 | 2018-03-22 | Futurewei Technologies, Inc. | Apparatus and method for configuring hardware to operate in multiple modes during runtime |
US20180081806A1 (en) | 2016-09-22 | 2018-03-22 | Qualcomm Incorporated | Memory violation prediction |
US10168758B2 (en) | 2016-09-29 | 2019-01-01 | Intel Corporation | Techniques to enable communication between a processor and voltage regulator |
US10402168B2 (en) | 2016-10-01 | 2019-09-03 | Intel Corporation | Low energy consumption mantissa multiplication for floating point multiply-add operations |
US10037267B2 (en) | 2016-10-21 | 2018-07-31 | Advanced Micro Devices, Inc. | Instruction set architecture and software support for register state migration |
US10416999B2 (en) | 2016-12-30 | 2019-09-17 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10558575B2 (en) | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10474375B2 (en) | 2016-12-30 | 2019-11-12 | Intel Corporation | Runtime address disambiguation in acceleration hardware |
US10572376B2 (en) | 2016-12-30 | 2020-02-25 | Intel Corporation | Memory ordering in acceleration hardware |
US20180189675A1 (en) | 2016-12-31 | 2018-07-05 | Intel Corporation | Hardware accelerator architecture and template for web-scale k-means clustering |
US10180928B2 (en) | 2016-12-31 | 2019-01-15 | Intel Corporation | Heterogeneous hardware accelerator architecture for processing sparse matrix data with skewed non-zero distributions |
US10490251B2 (en) | 2017-01-30 | 2019-11-26 | Micron Technology, Inc. | Apparatuses and methods for distributing row hammer refresh events across a memory device |
US10754829B2 (en) | 2017-04-04 | 2020-08-25 | Oracle International Corporation | Virtual configuration systems and methods |
CN108694014A (zh) | 2017-04-06 | 2018-10-23 | 群晖科技股份有限公司 | 用来进行内存空间保留及管理的方法与装置 |
US10452452B2 (en) | 2017-04-17 | 2019-10-22 | Wave Computing, Inc. | Reconfigurable processor fabric implementation using satisfiability analysis |
US10778767B2 (en) | 2017-04-28 | 2020-09-15 | International Business Machines Corporation | Persistent memory replication in RDMA-capable networks |
US10645448B2 (en) | 2017-05-15 | 2020-05-05 | Omnivision Technologies, Inc. | Buffer-aware transmission rate control for real-time video streaming system |
US10191871B2 (en) | 2017-06-20 | 2019-01-29 | Infineon Technologies Ag | Safe double buffering using DMA safe linked lists |
US10346145B2 (en) | 2017-06-23 | 2019-07-09 | Intel Corporation | Loop execution with predicate computing for dataflow machines |
US10445234B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features |
US10515046B2 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10467183B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods for pipelined runtime services in a spatial array |
US20190004878A1 (en) | 2017-07-01 | 2019-01-03 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with security, power reduction, and performace features |
US10469397B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods with configurable network-based dataflow operator circuits |
US10387319B2 (en) * | 2017-07-01 | 2019-08-20 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features |
US10445451B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features |
US11086816B2 (en) | 2017-09-28 | 2021-08-10 | Intel Corporation | Processors, methods, and systems for debugging a configurable spatial accelerator |
US10496574B2 (en) | 2017-09-28 | 2019-12-03 | Intel Corporation | Processors, methods, and systems for a memory fence in a configurable spatial accelerator |
US10380063B2 (en) * | 2017-09-30 | 2019-08-13 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator |
US20190101952A1 (en) | 2017-09-30 | 2019-04-04 | Intel Corporation | Processors and methods for configurable clock gating in a spatial array |
US10445098B2 (en) | 2017-09-30 | 2019-10-15 | Intel Corporation | Processors and methods for privileged configuration in a spatial array |
US10402176B2 (en) | 2017-12-27 | 2019-09-03 | Intel Corporation | Methods and apparatus to compile code to generate data flow code |
US10565134B2 (en) | 2017-12-30 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for multicast in a configurable spatial accelerator |
US10417175B2 (en) | 2017-12-30 | 2019-09-17 | Intel Corporation | Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator |
US10445250B2 (en) | 2017-12-30 | 2019-10-15 | Intel Corporation | Apparatus, methods, and systems with a configurable spatial accelerator |
US20190303263A1 (en) | 2018-03-30 | 2019-10-03 | Kermin E. Fleming, JR. | Apparatus, methods, and systems for integrated performance monitoring in a configurable spatial accelerator |
US20190303297A1 (en) | 2018-04-02 | 2019-10-03 | Intel Corporation | Apparatus, methods, and systems for remote memory access in a configurable spatial accelerator |
US11307873B2 (en) | 2018-04-03 | 2022-04-19 | Intel Corporation | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
US10564980B2 (en) | 2018-04-03 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator |
US10776087B2 (en) | 2018-06-25 | 2020-09-15 | Intel Corporation | Sequence optimizations in a high-performance computing environment |
US11200186B2 (en) * | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for operations in a configurable spatial accelerator |
-
2017
- 2017-07-01 US US15/640,541 patent/US10515049B1/en active Active
-
2018
- 2018-06-26 CN CN201810671312.3A patent/CN109215728B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001028199A (ja) * | 1999-07-14 | 2001-01-30 | Fujitsu Ten Ltd | 被検査デバイステスト方法及びその装置 |
CN1696906A (zh) * | 2004-04-07 | 2005-11-16 | 国际商业机器公司 | 用于存储设备的自主错误恢复方法、*** |
US8004915B1 (en) * | 2009-05-08 | 2011-08-23 | Altera Corporation | Area-efficient memory built-in-self-test circuitry with advanced debug capabilities for distributed memory blocks |
CN104025022A (zh) * | 2011-12-23 | 2014-09-03 | 英特尔公司 | 用于具有推测支持的向量化的装置和方法 |
CN104937539A (zh) * | 2012-11-28 | 2015-09-23 | 英特尔公司 | 用于提供推入缓冲器复制和存储功能的指令和逻辑 |
CN104699577A (zh) * | 2013-12-06 | 2015-06-10 | 英特尔公司 | 用于在分布式码字存储***中定位故障管芯的计数器 |
Also Published As
Publication number | Publication date |
---|---|
CN109215728A (zh) | 2019-01-15 |
US10515049B1 (en) | 2019-12-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109215728B (zh) | 用于分布式存储器危险检测和错误恢复的存储器电路和方法 | |
CN108268278B (zh) | 具有可配置空间加速器的处理器、方法和*** | |
US10445250B2 (en) | Apparatus, methods, and systems with a configurable spatial accelerator | |
US11307873B2 (en) | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging | |
US10915471B2 (en) | Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator | |
US10380063B2 (en) | Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator | |
US10445234B2 (en) | Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features | |
US10515046B2 (en) | Processors, methods, and systems with a configurable spatial accelerator | |
US10891240B2 (en) | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator | |
CN111868702A (zh) | 用于可配置空间加速器中的远程存储器访问的装置、方法和*** | |
CN111566623A (zh) | 用于可配置空间加速器中的集成性能监视的装置、方法和*** | |
US11029958B1 (en) | Apparatuses, methods, and systems for configurable operand size operations in an operation configurable spatial accelerator | |
US10459866B1 (en) | Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator | |
CN111767080A (zh) | 用于可配置空间加速器中的操作的设备、方法和*** | |
US10853073B2 (en) | Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator | |
US10678724B1 (en) | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator | |
US20220100680A1 (en) | Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits | |
US11037050B2 (en) | Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator | |
US20200409709A1 (en) | Apparatuses, methods, and systems for time-multiplexing in a configurable spatial accelerator | |
US11907713B2 (en) | Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20221031 Address after: Irish Dublin Applicant after: Taihao Research Co.,Ltd. Address before: California, USA Applicant before: INTEL Corp. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |