CN111512292A - 用于可配置空间加速器中的非结构化数据流的装置、方法和系统 - Google Patents
用于可配置空间加速器中的非结构化数据流的装置、方法和系统 Download PDFInfo
- Publication number
- CN111512292A CN111512292A CN201980006827.4A CN201980006827A CN111512292A CN 111512292 A CN111512292 A CN 111512292A CN 201980006827 A CN201980006827 A CN 201980006827A CN 111512292 A CN111512292 A CN 111512292A
- Authority
- CN
- China
- Prior art keywords
- data
- memory interface
- memory
- network
- input
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 124
- 238000012545 processing Methods 0.000 claims abstract description 686
- 230000015654 memory Effects 0.000 claims description 609
- 239000000872 buffer Substances 0.000 claims description 480
- 230000004044 response Effects 0.000 claims description 41
- 102100021809 Chorionic somatomammotropin hormone 1 Human genes 0.000 description 240
- 238000013519 translation Methods 0.000 description 221
- 238000004891 communication Methods 0.000 description 144
- 238000010586 diagram Methods 0.000 description 113
- 239000004744 fabric Substances 0.000 description 71
- 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 68
- 239000010432 diamond Substances 0.000 description 66
- 238000013507 mapping Methods 0.000 description 54
- 238000007667 floating Methods 0.000 description 40
- 230000006870 function Effects 0.000 description 40
- 238000003197 gene knockdown Methods 0.000 description 40
- 238000003860 storage Methods 0.000 description 40
- 238000000605 extraction Methods 0.000 description 39
- 229910003460 diamond Inorganic materials 0.000 description 36
- 238000006073 displacement reaction Methods 0.000 description 35
- 230000001133 acceleration Effects 0.000 description 33
- 230000008901 benefit Effects 0.000 description 25
- 102100025093 Zinc fingers and homeoboxes protein 2 Human genes 0.000 description 24
- 238000011049 filling Methods 0.000 description 23
- 230000035945 sensitivity Effects 0.000 description 21
- 230000007246 mechanism Effects 0.000 description 20
- 238000011143 downstream manufacturing Methods 0.000 description 19
- 230000008569 process Effects 0.000 description 19
- 230000008878 coupling Effects 0.000 description 18
- 238000010168 coupling process Methods 0.000 description 18
- 238000005859 coupling reaction Methods 0.000 description 18
- 230000000694 effects Effects 0.000 description 17
- 238000004422 calculation algorithm Methods 0.000 description 13
- 230000008093 supporting effect Effects 0.000 description 13
- 229910052799 carbon Inorganic materials 0.000 description 12
- 230000003416 augmentation Effects 0.000 description 11
- 238000006243 chemical reaction Methods 0.000 description 11
- 230000003068 static effect Effects 0.000 description 11
- 125000002015 acyclic group Chemical group 0.000 description 9
- 238000007792 addition Methods 0.000 description 9
- 230000006399 behavior Effects 0.000 description 9
- 238000013459 approach Methods 0.000 description 8
- 238000003491 array Methods 0.000 description 8
- 230000005540 biological transmission Effects 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 8
- 238000013461 design Methods 0.000 description 8
- 230000002829 reductive effect Effects 0.000 description 8
- 238000012360 testing method Methods 0.000 description 8
- 238000011144 upstream manufacturing Methods 0.000 description 8
- 230000009471 action Effects 0.000 description 7
- 238000011068 loading method Methods 0.000 description 7
- 230000003139 buffering effect Effects 0.000 description 6
- 239000003795 chemical substances by application Substances 0.000 description 6
- 239000000284 extract Substances 0.000 description 6
- 230000014509 gene expression Effects 0.000 description 6
- 238000004519 manufacturing process Methods 0.000 description 6
- 238000005457 optimization Methods 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 230000006835 compression Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000006872 improvement Effects 0.000 description 5
- 230000008672 reprogramming Effects 0.000 description 5
- 230000008685 targeting Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 238000013075 data extraction Methods 0.000 description 4
- 239000010410 layer Substances 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 239000000203 mixture Substances 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 4
- 230000036961 partial effect Effects 0.000 description 4
- 230000011664 signaling Effects 0.000 description 4
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 3
- 238000004220 aggregation Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 238000005265 energy consumption Methods 0.000 description 3
- 239000011229 interlayer Substances 0.000 description 3
- 230000001902 propagating effect Effects 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 229910052710 silicon Inorganic materials 0.000 description 3
- 239000010703 silicon Substances 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
- 230000002159 abnormal effect Effects 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000009795 derivation Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 230000003116 impacting effect Effects 0.000 description 2
- 230000000977 initiatory effect Effects 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
- 230000000873 masking effect Effects 0.000 description 2
- 229910052751 metal Inorganic materials 0.000 description 2
- 239000002184 metal Substances 0.000 description 2
- 150000002739 metals Chemical class 0.000 description 2
- 230000001343 mnemonic effect Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 208000033986 Device capturing issue Diseases 0.000 description 1
- 241000283074 Equus asinus Species 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
- 238000009825 accumulation Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000002547 anomalous effect Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013501 data transformation Methods 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 230000000593 degrading effect Effects 0.000 description 1
- 230000001066 destructive effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000008014 freezing Effects 0.000 description 1
- 238000007710 freezing Methods 0.000 description 1
- 230000001976 improved effect Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 230000003446 memory effect Effects 0.000 description 1
- 238000002156 mixing Methods 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
- 238000005192 partition Methods 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000029305 taxis Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/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
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4494—Execution paradigms, e.g. implementations of programming paradigms data driven
-
- 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/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/7825—Globally asynchronous, locally synchronous, e.g. network on chip
-
- 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/82—Architectures of general purpose stored program computers data or demand driven
- G06F15/825—Dataflow computers
-
- 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/3005—Arrangements for executing specific machine instructions to perform operations for flow 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/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Advance Control (AREA)
Abstract
描述了与可配置空间加速器中的非结构化数据流有关的系统、方法和装置。在一个实施例中,一种可配置空间加速器包括:具有第一分支和第二分支的数据路径,并且该数据路径包括至少一个处理元件;开关电路,其包括:开关控制输入,以接收第一开关控制值,以将开关电路的输入耦合到第一分支;以及接收第二开关控制值,以将开关电路的输入耦合到第二分支;拾取电路,包括拾取控制输入,以接收第一拾取控制值,以将拾取电路的输出耦合到第一分支;以及接收第二拾取控制值,以将拾取电路的输出耦合到数据路径的第三分支;谓词传播处理元件,以基于来自开关电路的开关控制输入的开关控制值和第一块谓词值(例如,两者)来输出第一边谓词值和第二边谓词值;以及谓词合并处理元件,以基于第三边谓词值和第一边谓词值或第二边谓词值之一这两者,将拾取控制值输出到拾取电路的拾取控制输入和第二块谓词值。
Description
有关联邦赞助研究和开发的声明
本发明是根据由国防部授予的合同编号H98230-13-D-0124在政府支持下做出的。政府对本发明享有某些权利。
技术领域
本公开一般地涉及电子装置,并且更具体地,本公开的实施例涉及用以控制可配置空间加速器中的非结构化数据流的电路。
背景技术
处理器或处理器集执行来自指令集(例如,指令集架构(ISA))的指令。指令集是与编程有关的计算机架构的一部分,并且一般地包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(I/O)。应该注意的是,本文中的术语指令可以指代宏指令,例如,被提供给处理器以供执行的指令,或者指代微指令,例如,由处理器的解码器对宏指令进行解码所产生的指令。
附图说明
在附图中的各图中作为示例而非限制图示了本公开,其中相似的附图标记指示类似的元件,并且在附图中:
图1图示了根据本公开的实施例的加速器块片(tile)。
图2图示了根据本公开的实施例的耦合到存储器的硬件处理器。
图3A图示了根据本公开的实施例的程序源。
图3B图示了根据本公开的实施例的图3A的程序源的数据流图。
图3C图示了根据本公开的实施例的具有被配置成执行图3B的数据流图的多个处理元件的加速器。
图4图示了根据本公开的实施例的数据流图的示例执行。
图5图示了根据本公开的实施例的程序源。
图6图示了根据本公开的实施例的包括处理元件阵列的加速器块片。
图7A图示了根据本公开的实施例的可配置数据路径网络。
图7B图示了根据本公开的实施例的可配置流控制路径网络。
图8图示了根据本公开的实施例的包括加速器的硬件处理器块片。
图9图示了根据本公开的实施例的处理元件。
图10图示了根据本公开的实施例的请求地址堆(RAF)电路。
图11图示了根据本公开的实施例的耦合在多个加速器块片与多个高速缓存存储体之间的多个请求地址堆(RAF)电路。
图12A图示了根据本公开的实施例的程序代码。
图12B图示了根据本公开的实施例的图12A的程序代码的数据流图。
图13A图示了根据本公开的实施例的结构化程序代码。
图13B图示了根据本公开的实施例的具有与图13A中的代码等效的含义的非结构化程序代码。
图13C图示了根据本公开的实施例的图13B的程序代码的数据流图。
图14图示了根据本公开的实施例的图13C中的谓词的真值表。
图15图示了根据本公开的实施例的具有被配置成执行图13C的数据流图的多个处理元件的加速器。
图16图示了根据本公开的实施例的谓词传播处理元件的真值表。
图17图示了根据本公开的实施例的谓词合并处理元件的真值表。
图18A-18J图示了根据本公开的实施例的实行图13C的数据流图的执行周期的图15的加速器。
图19图示了根据本公开的实施例的用于支持谓词合并操作的处理元件的示例控制电路。
图20图示了根据本公开的实施例的用于支持谓词合并操作的处理元件的示例控制格式化。
图21图示了根据本公开的实施例的用于支持谓词传播操作的处理元件的示例控制电路。
图22图示了根据本公开的实施例的用于支持谓词传播操作的处理元件的示例控制格式化。
图23图示了根据本公开的实施例的用于操作配置值的格式的示例码字样式。
图24图示了根据本公开的实施例的支持谓词传播操作和谓词合并操作的处理元件的组件。
图25图示了根据本公开的实施例的用于谓词合并操作配置值的格式的示例码字样式。
图26图示了根据本公开的实施例的用于支持与图24的处理元件的组件的谓词合并操作的处理元件的示例控制电路。
图27图示了根据本公开的实施例的用于谓词传播操作配置值的格式的示例码字样式。
图28图示了根据本公开的实施例的用于支持与图24的处理元件的组件的谓词传播操作的处理元件的示例控制电路。
图29图示了根据本公开的实施例的用于操作配置值的格式的示例灵敏度样式。
图30图示了根据本公开的实施例的支持谓词传播操作和谓词合并操作的处理元件的调度器电路。
图31图示了根据本公开的实施例的用于处理元件的操作配置值的格式的灵敏度样式的调度器电路,该处理元件支持谓词传播操作和谓词合并操作。
图32图示了根据本公开的实施例的支持谓词传播操作和谓词合并操作的处理元件的组件。
图33图示了根据本公开的实施例的用于谓词合并操作配置值的格式的示例灵敏度样式。
图34图示了根据本公开的实施例的用于支持与图32的处理元件的组件的谓词合并操作的处理元件的示例控制电路。
图35图示了根据本公开的实施例的用于谓词传播操作配置值的格式的示例灵敏度样式。
图36图示了根据本公开的实施例的用于支持与图32的处理元件的组件的谓词传播操作的处理元件的示例控制电路。
图37图示了根据本公开的实施例的流程图。
图38图示了根据本公开的实施例的伪代码函数调用的数据流图。
图39图示了根据本公开的实施例的具有多个网络数据流端点电路的处理元件的空间阵列。
图40图示了根据本公开的实施例的网络数据流端点电路。
图41图示了根据本公开的实施例的用于发送操作和接收操作的数据格式。
图42图示了根据本公开的实施例的用于发送操作的另一种数据格式。
图43图示了根据本公开的实施例的配置电路元件(例如,网络数据流端点电路)数据格式,该数据格式用以针对发送(例如,交换)操作和接收(例如,拾取)操作来配置电路元件(例如,网络数据流端点电路)。
图44图示了根据本公开的实施例的配置数据格式,该配置数据格式用以针对发送操作来配置电路元件(例如,网络数据流端点电路),其中其输入、输出和控制数据被标注在电路上。
图45图示了根据本公开的实施例的配置数据格式,该配置数据格式用以针对所选择的操作来配置电路元件(例如,网络数据流端点电路),其中其输入、输出和控制数据被标注在电路上。
图46图示了根据本公开的实施例的配置数据格式,该配置数据格式用以针对Switch操作来配置电路元件(例如,网络数据流端点电路),其中其输入、输出和控制数据被标注在电路上。
图47图示了根据本公开的实施例的配置数据格式,该配置数据格式用以针对SwitchAny操作来配置电路元件(例如,网络数据流端点电路),其中其输入、输出和控制数据被标注在电路上。
图48图示了根据本公开的实施例的配置数据格式,该配置数据格式用以针对Pick操作来配置电路元件(例如,网络数据流端点电路),其中其输入、输出和控制数据被标注在电路上。
图49图示了根据本公开的实施例的配置数据格式,该配置数据格式用以针对PickAny操作来配置电路元件(例如,网络数据流端点电路),其中其输入、输出和控制数据被标注在电路上。
图50图示了根据本公开的实施例的网络数据流端点电路针对实行的操作选择。
图51图示了根据本公开的实施例的网络数据流端点电路。
图52图示了根据本公开的实施例的在实行拾取操作时接收输入零(0)的网络数据流端点电路。
图53图示了根据本公开的实施例的在实行拾取操作时接收输入一(1)的网络数据流端点电路。
图54图示了根据本公开的实施例的在实行拾取操作时输出所选择的输入的网络数据流端点电路。
图55图示了根据本公开的实施例的流程图。
图56图示了根据本公开的实施例的分割成三个区域(结果区域、三个潜在进位区域和选通区域)的浮点乘法器。
图57图示了根据本公开的实施例的具有多个处理元件的加速器的进行中(in-flight)配置。
图58图示了根据本公开的实施例的进行中流水线提取的快照。
图59图示了根据本公开的实施例的用于加速器的编译工具链。
图60图示了根据本公开的实施例的用于加速器的编译器。
图61A图示了根据本公开的实施例的顺序汇编代码。
图61B图示了根据本公开的实施例的图61A的顺序汇编代码的数据流汇编代码。
图61C图示了根据本公开的实施例的用于加速器的图61B的数据流汇编代码的数据流图。
图62A图示了根据本公开的实施例的C源代码。
图62B图示了根据本公开的实施例的图62A的C源代码的数据流汇编代码。
图62C图示了根据本公开的实施例的用于加速器的图62B的数据流汇编代码的数据流图。
图63A图示了根据本公开的实施例的C源代码。
图63B图示了根据本公开的实施例的图63A的C源代码的数据流汇编代码。
图63C图示了根据本公开的实施例的用于加速器的图63B的数据流汇编代码的数据流图。
图64A图示了根据本公开的实施例的流程图。
图64B图示了根据本公开的实施例的流程图。
图65图示了根据本公开的实施例的吞吐量对比每操作能量图。
图66图示了根据本公开的实施例的包括处理元件阵列和本地配置控制器的加速器块片。
图67A-67C图示了根据本公开的实施例的配置数据路径网络的本地配置控制器。
图68图示了根据本公开的实施例的配置控制器。
图69图示了根据本公开的实施例的包括处理元件阵列、配置高速缓存和本地配置控制器的加速器块片。
图70图示了根据本公开的实施例的包括处理元件阵列以及具有重配置电路的配置和异常处理控制器的加速器块片。
图71图示了根据本公开的实施例的重配置电路。
图72图示了根据本公开的实施例的包括处理元件阵列以及具有重配置电路的配置和异常处理控制器的加速器块片。
图73图示了根据本公开的实施例的包括处理元件阵列和耦合到块片级异常聚合器的夹层异常聚合器的加速器块片。
图74图示了根据本公开的实施例的具有异常生成器的处理元件。
图75图示了根据本公开的实施例的包括处理元件阵列和本地提取控制器的加速器块片。
图76A-76C图示了根据本公开的实施例的配置数据路径网络的本地提取控制器。
图77图示了根据本公开的实施例的提取控制器。
图78图示了根据本公开的实施例的流程图。
图79图示了根据本公开的实施例的流程图。
图80A是根据本公开的实施例的采用插入存储器子系统与加速硬件之间的存储器排序电路的系统的框图。
图80B是根据本公开的实施例的改为采用多个存储器排序电路的图80A的系统的框图。
图81是图示了根据本发明的实施例的入/出加速硬件的存储器操作的一般功能的框图。
图82是图示了根据本公开的实施例的用于存储操作的空间相关性流的框图。
图83是根据本公开的实施例的图80的存储器排序电路的详细框图。
图84是根据本公开的实施例的图80的存储器排序电路的微架构的流程图。
图85是根据本公开的实施例的可执行确定器电路的框图。
图86是根据本发明的实施例的优先级编码器的框图。
图87是根据本公开的实施例的逻辑和二进制两者的示例性加载操作的框图。
图88A是图示了根据本公开的实施例的示例代码的逻辑执行的流程图。
图88B是图示了根据本公开的实施例的示例代码的展开版本的存储器级并行性的图88A的流程图。
图89A是根据本公开的实施例的用于加载操作和用于存储操作的示例性存储器变元(argument)的框图。
图89B是图示了根据本公开的实施例的通过图84的存储器排序电路的微架构的加载操作和存储操作(诸如图89A的那些操作)的流程的框图。
图90A、图90B、图90C、图90D、图90E、图90F、图90G和图90H是图示了根据本公开的实施例的通过图90B的微架构的队列的示例性程序的加载操作和存储操作的功能流程的框图。
图91是根据本公开的实施例的对加速硬件与无序存储器子系统之间的存储器操作进行排序的方法的流程图。
图92A是图示了根据本公开的实施例的通用矢量友好指令格式及其A类指令模板的框图。
图92B是图示了根据本公开的实施例的通用矢量友好指令格式及其B类指令模板的框图。
图93A是图示了根据本公开的实施例的图92A和图92B中的通用矢量友好指令格式的字段的框图。
图93B是图示了根据本公开的一个实施例的组成完整操作码字段的图93A中的具体矢量友好指令格式的字段的框图。
图93C是图示了根据本公开的一个实施例的组成寄存器索引字段的图93A中的具体矢量友好指令格式的字段的框图。
图93D是图示了根据本公开的一个实施例的组成扩增操作字段9250的图93A中的具体矢量友好指令格式的字段的框图。
图94是根据本公开的一个实施例的寄存器架构的框图。
图95A是图示了根据本公开的实施例的示例性有序流水线和示例性寄存器重命名、无序发布/执行流水线二者的框图。
图95B是图示了根据本公开的实施例的要包括在处理器中的有序架构核心和示例性寄存器重命名、无序发布/执行架构核心的示例性实施例二者的框图。
图96A是根据本公开的实施例的单个处理器核心连同其到管芯上互连网络的连接并且与其2级(L2)高速缓存的本地子集的连接的框图。
图96B是根据本公开的实施例的图96A中的处理器核心的部分的展开图。
图97是根据本公开的实施例的处理器的框图,该处理器可以具有多于一个核心,可以具有集成存储器控制器,并且可以具有集成显卡。
图98是依照本公开的一个实施例的系统的框图。
图99是依照本公开的实施例的更具体的示例性系统的框图。
图100示出的是依照本公开的实施例的第二个更具体的示例性系统的框图。
图101示出的是依照本公开的实施例的片上系统(SoC)的框图。
图102是根据本公开的实施例的对比使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
在以下描述中,阐述了众多具体细节。然而,理解的是,可以在没有这些具体细节的情况下实践本公开的实施例。在其它实例中,没有详细地示出众所周知的电路、结构和技术,以免混淆对此描述的理解。
在说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但是可能不是每个实施例都一定包括该特定特征、结构或特性。而且,此类短语不一定指代同一实施例。另外,当结合实施例来描述特定特征、结构或特性时,认为结合其它实施例使用这样的特征、结构或特性(不论是否被明确地描述)是在本领域技术人员的知识范围内的。
处理器(例如,具有一个或多个核心)可以执行指令(例如,指令线程)以对数据进行操作,例如,以实行算术、逻辑或其他功能。例如,软件可以请求操作,并且硬件处理器(例如,其一个或多个核心)可以响应于该请求来实行操作。操作的一个非限制性示例是用以输入多个矢量元素并输出具有混合的多个元素的矢量的混合操作。在某些实施例中,多个操作是利用单个指令的执行来完成的。
例如,如由能源部定义的百亿亿次性能可能要求系统级浮点性能在给定(例如,20MW)功率预算内超过每秒10^18次浮点运算(exaFLOP)或更多。例如,本文中的某些实施例涉及把处理器的高性能计算(HPC)作为目标的处理元件的空间阵列(例如,可配置空间加速器(CSA))。本文中的处理元件的空间阵列(例如,CSA)的某些实施例以直接执行数据流图为目标,以产生计算上密集但节能的空间微架构,其远远超过了常规路线图架构。本文中的某些实施例,例如,除了通信网络在处理元件、存储器等和/或实行其他通信(例如,不是数据处理)操作的通信网络之间的数据的路由之外,还覆盖(例如,高基数)通信网络上的数据流操作。本文中的某些实施例涉及(例如,耦合到)处理元件的空间阵列(例如,CSA)的通信网络(例如,分组交换网络)以实行某些数据流操作,例如,除通信网络在处理元件、存储器等或实行其他通信操作的通信网络之间路由数据之外。本文中的某些实施例涉及网络数据流端点电路,其(例如,均)实行(例如,一部分或全部)数据流操作或多个操作,例如,数据流图的拾取或开关数据流操作。本文中的某些实施例包括扩增的网络端点(例如,网络数据流端点电路)以支持对(一个或多个)数据流操作(例如,多个数据流操作或数据流操作的子集)的控制,例如,利用网络端点来实行(例如,数据流)操作,而不是实行该(例如,数据流)操作的处理元件(例如,核心)或算术逻辑单元(例如,以实行算术和逻辑运算)。在一个实施例中,网络数据流端点电路与空间阵列(例如,其互连或结构)和/或处理元件分离。
以下还包括对处理元件的空间阵列(例如,CSA)的实施例的架构基本原理及其某些特征的描述。与任何革命性架构一样,可编程性可能是风险。为了减轻此问题,已经与编译工具链共同设计了CSA架构的实施例,下面还对编译工具链进行讨论。
引言
百亿亿次计算目标可能在进取功率预算(例如,20 MW)内要求巨大的系统级浮点性能(例如,1个ExaFLOP)。然而,利用经典冯诺依曼架构同时地改进程序执行的性能和能量效率已变得困难:无序调度、同时多线程处理、复杂寄存器堆和其他结构提供了性能,但是以高能量为代价。本文中的某些实施例同时地实现性能和能量需求。百亿亿次计算功率性能目标可能要求高吞吐量和每操作低能耗两者。本文中的某些实施例通过提供大大地消除先前处理器设计的控制开销的大量低复杂度、高能效处理(例如,计算)元件来提供这个。受此观察结果指导,本文中的某些实施例包括处理元件的空间阵列,例如,可配置空间加速器(CSA),例如,包括通过一组轻量级反压(例如,通信)网络连接的处理元件(PE)阵列。在图1中描绘了CSA块片的一个示例。处理(例如,计算)元件的某些实施例是数据流操作符,例如,当(i)输入数据已到达数据流操作符且(ii)存在可用于存储输出数据的空间(例如,否则没有处理在发生)时,仅处理输入数据的多个数据流操作符。某些实施例(例如,加速器或CSA的某些实施例)不利用触发的指令。
图1图示了根据本公开的实施例的处理元件的空间阵列的加速器块片100的实施例。加速器块片100可以是更大块片的一部分。加速器块片100执行一个或多个数据流图。数据流图一般地可以指代在顺序代码的编译中出现的显式并行程序描述。例如,本文中的某些实施例(例如,CSA)允许数据流图被直接地配置到CSA阵列上,而不是被变换成顺序指令流。本文中的某些实施例允许由空间阵列的一个或多个处理元件(PE)实行第一(例如,类型的)数据流操作,并且附加地或替换地,允许由空间阵列的一个或多个网络通信电路(例如,端点)实行第二(例如,不同类型的)数据流操作。
从顺序编译流导出数据流图允许CSA的实施例支持熟悉的编程模型并且直接(例如,在不使用工作表的情况下)执行现有的高性能计算(HPC)代码。CSA处理元件(PE)可以是高能效的。在图1中,存储器接口102可以耦合到存储器(例如,图2中的存储器202)以允许加速器块片100访问(例如,加载和/或存储)数据到(例如,管芯外)存储器。所描绘的加速器块片100是由经由互连网络104耦合在一起的几种PE组成的异构阵列。加速器块片100可以包括整数算术PE、浮点算术PE、通信电路(例如,网络数据流端点电路)和结构内存储中的一个或多个,例如,作为处理元件101的空间阵列的部分。数据流图(例如,编译数据流图)可以覆盖在加速器块片100上以供执行。在一个实施例中,对于特定数据流图,每个PE仅处理该图的一个或两个(例如,数据流)操作。PE阵列可以是异构的,例如,使得没有PE支持完整CSA数据流架构,和/或一个或多个PE被编程(例如,定制)以仅实行几个但高度高效的操作。本文中的某些实施例因此产生具有处理元件阵列的处理器或加速器,该处理元件阵列与路线图架构相比在计算上是密集的,并且相对于现有的HPC产品在能量效率和性能方面仍然实现大致一个数量级的增益。
本文中的某些实施例提供了在处理元件的(例如,密集的)空间阵列(例如,CSA)内的并行执行的性能提高,其中,例如,如果输入数据是可用的,则所利用的每个PE和/或网络数据流端点电路可以同时实行其操作。效率的提高可能来自于每个PE和/或网络数据流端点电路的效率,例如,其中每个PE的操作(例如,行为)在每个配置(例如,映射)步骤固定一次,并且在本地数据到达PE时发生执行,例如,在不考虑其他结构活动的情况下,和/或其中在被配置(例如,映射)时,每个网络数据流端点电路的操作(例如,行为)是可变的(例如,不固定的)。在某些实施例中,PE和/或网络数据流端点电路是(例如,均是单个)数据流操作符,例如,仅当(i)输入数据已到达数据流操作符且(ii)存在可用于存储输出数据的空间(例如,否则没有操作在发生)时才对输入数据进行操作的数据流操作符。
本文中的某些实施例包括处理元件的空间阵列,作为加速用户应用的高能效和高性能的方式。在一个实施例中,应用以极其并行的方式被映射。例如,内部循环可以多次展开以改善并行性。例如,当展开代码的占用率(例如,使用率)很高时,该方法可以提供高性能。然而,如果展开的循环主体中有较少使用的代码路径(例如,像浮点非规范化模式之类的特殊代码路径),则可能浪费处理元件的空间阵列(的结构面积),因此吞吐量会丢失。
在本文中用以减少对处理元件的空间阵列(例如,的结构面积)的压力(例如,在未充分利用的代码段的情况下)的一个实施例是时间复用的。在此模式下,较少使用(例如,较冷)的代码的单个实例可以在多个循环主体当中共享,例如,类似于共享库中的函数调用。在一个实施例中,(例如,处理元件的)空间阵列支持复用代码的直接实现。然而,例如,当在空间阵列中的复用或解复用涉及在许多且远程的目标(例如,共享器)之间进行挑选时,使用数据流操作符(例如,使用处理元件)的直接实现在等待时间、吞吐量、实现面积和/或能量方面可能是低效的。本文中的某些实施例描述了支持(例如,高基数)复用或解复用的硬件机构(例如,网络电路)。本文中的某些实施例(例如,网络数据流端点电路的某些实施例)准许在几乎没有硬件开销或性能影响的情况下聚合许多目标(例如,共享器)。本文中的某些实施例允许将(例如,旧有的)顺序代码编译为空间阵列中的并行架构。
在一个实施例中,例如,如下面参照图39讨论的,多个网络数据流端点电路组合为单个数据流操作符。作为非限制性示例,下面列出了某些(例如,高(例如,4-6)基数)数据流操作符。
“拾取(Pick)”数据流操作符的实施例是要从多个输入通道中选择数据(例如,令牌),并且根据控制数据将该数据作为其(例如,单个)输出来提供。拾取的控制数据可以包括输入选择器值。在一个实施例中,例如,所选择的输入通道要将使其数据(例如,令牌)被去除(例如,被丢弃),以完成该数据流操作(或其数据流操作的一部分)的实行。在一个实施例中,附加地,那些未选择的输入通道也要使它们的数据(例如,令牌)被去除(例如,被丢弃),例如,以完成该数据流操作(或其数据流操作的一部分)的实行。
“PickSingleLeg”数据流操作符的实施例是要从多个输入通道中选择数据(例如,令牌),并且根据控制数据将该数据作为其(例如,单个)输出来提供,但是在某些实施例中,未选择的输入通道被忽略,例如,那些未选择的输入通道不会使其数据(例如,令牌)被去除(例如,被丢弃),例如,以完成该数据流操作(或其数据流的一部分)的实行。PickSingleLeg的控制数据可以包括输入选择器值。在一个实施例中,所选择的输入通道也要使其数据(例如,令牌)被去除(例如,被丢弃),例如,以完成该数据流操作(或其数据流操作的一部分)的实行。
“PickAny”数据流操作符的实施例是要从多个输入通道中选择第一可用的(例如,对实行操作的电路而言可用的)数据(例如,令牌),并且将该数据作为其(例如,单个)输出来提供。在一个实施例中,PickSingleLeg还要输出已选择了其数据的索引(例如,指示多个输入通道中的哪个)。在一个实施例中,例如,所选择的输入通道要使其数据(例如,令牌)被去除(例如,被丢弃),例如,以完成该数据流操作(或其数据流操作的一部分)的实行。在某些实施例中,未选择的输入通道(例如,具有或不具有输入数据)被忽略,例如,那些未选择的输入通道不会使其数据(例如,令牌)被去除(例如,被丢弃),例如,以完成该数据流操作(或其数据流操作的一部分)的实行。PickAny的控制数据可以例如在没有输入选择器值的情况下包括与PickAny相对应的值。
“Switch”数据流操作符的实施例是操纵(例如,单个)输入数据(例如,令牌),以便根据控制数据将该输入数据提供给一个或多个(例如,少于全部)输出。Switch的控制数据可以包括一个或多个(一个或多个)输出选择器值。在一个实施例中,输入数据(例如,来自输入通道的输入数据)要使其数据(例如,令牌)被去除(例如,丢弃),例如,以完成该数据流操作(或其数据流的一部分)的实行。
“SwitchAny”数据流操作符的实施例要操纵(例如,单个)输入数据(例如,令牌),以便例如根据控制数据将该输入数据提供给一个或多个(例如,少于全部)接收该输入数据的输出。在一个实施例中,SwitchAny可以将输入数据提供给在其入口缓冲器(例如,图40中的网络入口缓冲器)中具有可用性(例如,可用存储空间)的任何耦合输出通道。用于SwitchAny的控制数据可以包括与SwitchAny相对应的值,例如,没有一个或多个(一个或多个)输出选择器值。在一个实施例中,输入数据(例如,来自输入通道的输入数据)要使其数据(例如,令牌)被去除(例如,被丢弃),例如,以完成该数据流操作(或其数据流的一部分)的实行。在一个实施例中,SwitchAny还要输出其提供(例如,发送)输入数据的索引(例如,指示多个输出通道中的哪个)。SwitchAny可以被利用来管理空间阵列(例如,展开循环)中的复制子图。
因此,本文中的某些实施例跨越广泛的一类现有单流和并行程序提供了颠覆传统水平的性能和巨大的能量效率改进,例如,全部同时保存熟悉的HPC编程模型。本文中的某些实施例可以把HPC作为目标,使得浮点能量效率极其重要。本文中的某些实施例不仅实现令人瞩目的性能改进和能量减少,它们也将这些收益递送给用主流HPC语言并且为主流HPC框架编写的现有HPC程序。本文中的架构的某些实施例(例如,考虑到编译)提供几种扩展以直接支持由现代编译器生成的控制数据流内部表示。本文的某些实施例涉及例如可以接受C、C++和Fortran编程语言的CSA数据流编译器,以把CSA架构作为目标。
图2图示了根据本公开的实施例的耦合到(例如,连接到)存储器202的硬件处理器200。在一个实施例中,硬件处理器200和存储器202是计算系统201。在某些实施例中,一个或多个加速器是根据本公开的CSA。在某些实施例中,处理器中的一个或多个核心是本文中所公开的那些核心。硬件处理器200(例如,其每个核心)可以包括硬件解码器(例如,解码单元)和硬件执行单元。硬件处理器200可以包括寄存器。注意的是,本文中的图可能未描绘所有数据通信耦合(例如,连接)。本领域的普通技术人员将领会的是,这将不会使图中的某些细节混淆。注意的是,图中的双向箭头可能不需要双向通信,例如,它可以指示单向通信(例如,去往或来自该组件或设备)。可以在本文中的某些实施例中利用通信路径的任何或所有组合。根据本公开的实施例,所描绘的硬件处理器200包括多个核心(O至N,其中N可以是1或更大)和硬件加速器(O至M,其中M可以是1或更大)。硬件处理器200(例如,其(一个或多个)加速器和/或(一个或多个)核心)可以耦合到存储器202(例如,数据存储设备)。硬件解码器(例如,核心的硬件解码器)可以接收(例如,单个)指令(例如,宏指令)并且将该指令例如解码成微指令和/或微操作。硬件执行单元(例如,核心的硬件执行单元)可以执行经解码的指令(例如,宏指令)以实行一个或多个运算。
下面的部分1公开了CSA架构的实施例。特别地,公开了在数据流执行模型内集成存储器的新颖实施例。部分2钻研CSA的实施例的微架构细节。在一个实施例中,CSA的主要目标是为了支持编译器产生的程序。下面的部分3检查了CSA编译工具链的实施例。在部分4中将CSA的实施例的优势与编译代码的执行中的其他架构相比较。最后在部分5讨论CSA微架构的实施例的性能,在部分6中讨论另外的CSA细节,并且在部分7中提供概要。
1.CSA架构
CSA的某些实施例的目标是要快速地且高效地执行程序,例如,由编译器产生的程序。CSA架构的某些实施例提供支持编译器技术和编程范例的需要的编程抽象。CSA的实施例执行数据流图,例如,与编译程序的编译器自己的内部表示(IR)很类似的程序表现形式。在此模型中,程序被表示为由从一组架构定义的数据流操作符(例如,其包含计算和控制操作两者)中汲取的节点(例如,顶点)和表示数据在数据流操作符之间的转移的边组成的数据流图。执行可以通过将数据流令牌(例如,其是或者表示数据值)注入到数据流图中继续进行。令牌可以在每个节点(例如,顶点)之间流动并且在每个节点(例如,顶点)处被变换,例如,形成完整计算。在图3A-3C中示出了样本数据流图及其从高级源代码的导出,并且图5示出了数据流图的执行的示例。
CSA的实施例通过确切地提供编译器所需要的那些数据流图执行支持被配置成用于数据流图执行。在一个实施例中,CSA是加速器(例如,图2中的加速器),并且它不设法提供在通用处理核心(例如,图2中的核心)上可用的一些必要的但不经常使用的机制,诸如系统调用。因此,在此实施例中,CSA可以执行许多代码,但并非全部代码。作为交换,CSA赢得显著的性能和能量优势。为了使得能够实现用常用顺序语言编写的代码的加速,本文中的实施例也引入若干新颖架构特征来协助编译器。一个特别新颖性是CSA对存储器的处理,这是先前已被忽视或者解决得不好的主题。CSA的实施例在数据流操作符的使用方面也是独特的,例如,与查找表(LUT)相反,作为它们的基本架构接口。
转向CSA的实施例,接下来讨论数据流操作符。
1.1数据流操作符
加速器(例如,CSA)的实施例的关键架构接口是数据流操作符,例如,作为数据流图中的节点的直接表示。从运算角度来看,数据流操作符以流或数据驱动方式工作。数据流操作符可以在其传入操作数变得可用时立即执行。CSA数据流执行可以(例如,仅)取决于高度本地化状态,例如,导致具有分布式异步执行模型的高度可伸缩架构。数据流操作符可以包括算术数据流操作符,例如,浮点加法和乘法、整数加法、减法和乘法、各种形式的比较、逻辑操作符和移位中的一种或多种。然而,CSA的实施例也可以包括协助管理程序图中的数据流令牌的一组丰富的控制操作符。这些的示例包括:例如将两个或更多个逻辑输入通道复用成单个输出通道的“拾取”操作符,以及例如作为通道解复用器来操作的“开关”操作符(例如,从两个或更多个逻辑输入通道输出单个通道)。这些操作符可以使得编译器能够实现诸如条件表达式之类的控制范例。CSA的某些实施例可以包括有限的数据流操作符集(例如,到相对少量的运算)以产生密集且高能效的PE微架构。某些实施例可以包括用于在HPC代码中常见的复杂运算的数据流操作符。CSA数据流操作符架构高度服从部署特定扩展。例如,可以在某些实施例中包括更复杂的数学数据流操作符,例如三角函数,以使某些数学密集HPC工作负载加速。类似地,神经网络调谐扩展可以包括用于矢量化低精度算术的数据流操作符。
图3A图示了根据本公开的实施例的程序源。程序源代码包括乘法函数(func)。图3B图示了根据本公开的实施例的图3A的程序源的数据流图300。数据流图300包括拾取节点304、开关节点306和乘法节点308。可以可选地沿着一个或多个通信路径包括缓冲器。所描绘的数据流图300可以实行用拾取节点304选择输入X、将X乘以Y(例如,乘法节点308)、然后从开关节点306的左输出端输出结果的操作。图3C图示了根据本公开的实施例的具有被配置成执行图3B的数据流图的多个处理元件301的加速器(例如,CSA)。更特别地,例如,数据流图300被覆盖到处理元件阵列301(例如,以及其之间的(一个或多个)(例如,互连)网络)中,使得数据流图300的每个节点被表示为处理元件阵列301中的数据流操作符。例如,某些数据流操作可以利用处理元件来实现,和/或某些数据流操作可以利用通信网络(例如,其网络数据流端点电路)来实现。例如,例如与处理元件相比,可以利用通信网络(例如,其网络数据流端点电路)的一个或多个组件来实现Pick、PickSingleLeg、PickAny、Switch和/或SwitchAny操作。
在一个实施例中,处理元件阵列301中的一个或多个处理元件将通过存储器接口302访问存储器。在一个实施例中,数据流图300的拾取节点304因此对应于拾取操作符304A(例如,通过拾取操作符304A来表示),数据流图300的开关节点306因此对应于开关操作符306A(例如,通过开关操作符306A来表示),并且数据流图300的乘法器节点308因此对应于乘法器操作符308A(例如,通过乘法器操作符308A来表示)。另一处理元件和/或流控制路径网络可以向拾取操作符304A和开关操作符306A提供控制信号(例如,控制令牌)以实行图3A中的操作。在一个实施例中,处理元件阵列301被配置成在执行开始之前执行图3B的数据流图300。在一个实施例中,编译器实行来自图3A-3B的转换。在一个实施例中,数据流图节点到处理元件阵列中的输入将数据流图在逻辑上嵌入到处理元件阵列中,例如,如在下面进一步讨论的,使得输入/输出路径被配置成产生所期望的结果。
1.2等待时间不敏感通道
通信弧是数据流图的第二主要组件。CSA的某些实施例将这些弧描述为等待时间不敏感通道,例如,有序、反压(例如,在有地方存储输出之前不产生或者发送输出)、点对点通信通道。与数据流操作符一样,等待时间不敏感通道基本上是异步的,从而给予组成许多类型的网络来实现特定图的通道的自由。等待时间不敏感通道可以具有任意长的等待时间并且仍如实地实现CSA架构。然而,在某些实施例中,在性能和能量方面有使等待时间变得尽可能小的强烈诱因。本文中的部分2.2公开了数据流图通道被以流水线的方式实现为具有等待时间的不多于一个周期的网络微架构。等待时间不敏感通道的实施例提供关键抽象层,该关键抽象层与CSA架构一起被利用来向应用程序设计员提供许多运行时服务。例如,CSA可以在实现CSA配置(将程序加载到CSA阵列上)时利用等待时间不敏感通道。
图4图示了根据本公开的实施例的数据流图400的示例执行。在步骤1处,可以在数据流图400中加载输入值(例如,在图3B中对于X来说为1,并且在图3B中对于Y来说为2)以实行1*2乘法运算。这些数据输入值中的一个或多个在运算中可以是静态的(例如,恒定的)(例如,参考图3B对于X来说为1并且对于Y来说为2),或者在运算期间被更新。在步骤2处,处理元件(例如,在流控制路径网络上)或其他电路向拾取节点404的控制输入端(例如,复用器控制信号)输出零(例如,以从端口“0”到其输出端输入一),并且向开关节点406的控制输入端(例如,复用器控制信号)输出零(例如,以从端口“0”中向目的地(例如,下游处理元件)提供其输入)。在步骤3处,数据值1被从拾取节点404输出(例如,并且在拾取节点404处消费其控制信号“0”)到乘法器节点408,以在步骤4处与数据值2相乘。在步骤4处,乘法器节点408的输出到达开关节点406,例如,这使开关节点406在步骤5处消费控制信号“0”以从开关节点406的端口“0”输出值2。然后该运算完成。CSA因此可以被相应地编程为使得用于每个节点的对应数据流操作符实行图4中的运算。尽管在此示例中执行是序列化的,然而原则上所有数据流操作可以并行地执行。这些步骤在图4中被用来将数据流执行与任何物理微架构表现形式区分开。在一个实施例中,下游处理元件将向开关406发送信号(或者不发送就绪信号)(例如,在流控制路径网络上),以停顿来自开关406的输出,例如,直到下游处理元件为输出做好准备(例如,具有存储空间)为止。
1.3存储器
数据流架构一般地集中于通信和数据操纵,而对状态不太关注。然而,启用真实软件尤其是用旧有顺序语言编写的程序需要重点关注与存储器对接。CSA的某些实施例将架构存储器操作用作其到(例如,大)有状态存储装置的主要接口。从数据流图的角度来看,存储器操作与其他数据流操作类似,只是它们具有更新共享存储的副作用。特别地,本文中的某些实施例的存储器操作具有与每个其他数据流操作符相同的语义,例如,它们在其操作数(例如,地址)可用时“执行”,并且在一定等待时间之后,响应被产生。本文中的某些实施例显式地使操作数输入和结果输出解耦,使得存储器操作符自然地流水线化并且有可能产生许多同时未完成的请求,例如,使它们例外地非常适于存储器子系统的等待时间和带宽特性。CSA的实施例提供诸如加载和存储之类的基本存储器操作,该加载取地址通道并利用与地址相对应的值填充响应通道。CSA的实施例也可以提供更高级的操作,诸如存储器中原子和一致性操作符。这些操作可以具有与其冯诺依曼对应部分类似的语义。CSA的实施例可以加速使用诸如C和Fortran之类的顺序语言描述的现有程序。支持这些语言模型的结果是解决程序存储器排序,例如,通常通过这些语言规定的存储器操作的串行排序。
图5图示了根据本公开的实施例的程序源(例如,C代码)500。根据C编程语言的存储器语义,存储器拷贝(memcpy)应该被序列化。然而,如果已知数组A和B不相交,则可以用CSA的实施例使memcpy并行化。图5进一步图示了程序排序的问题。一般而言,例如,对于索引的相同值或索引跨越循环主体的不同值来说,编译器不能证明数组A与数组B不同。这被称为指针或存储器混叠。因为编译器将生成静态正确的代码,所以它们通常被迫令存储器访问串行化。通常,把顺序冯诺依曼架构作为目标的编译器将指令排序用作实施程序排序的自然手段。然而,CSA的实施例没有如由程序计数器定义的指令或基于指令的程序排序的观念。在某些实施例中,例如不包含架构可见的信息的传入相关性令牌和所有其他数据流令牌一样,并且存储器操作可以不执行直到它们已接收到相关性令牌为止。在某些实施例中,一旦其操作对所有逻辑上后续的从属存储器操作可见,存储器操作就产生传出相关性令牌。在某些实施例中,相关性令牌与数据流图中的其他数据流令牌类似。例如,因为存储器操作发生在条件上下文中,所以也可以使用部分1.1中描述的控制操作符来操纵相关性令牌,例如,像任何其他令牌一样。相关性令牌可以具有使存储器访问串行化(例如,给编译器提供在架构上定义存储器访问的次序的手段)的效果。
1.4运行时服务
CSA的实施例的主要架构考虑事项涉及用户级程序的实际执行,但是它也可能期望提供从下面支持此执行的若干支持机制。这些当中最主要的是配置(其中数据流图被加载到CSA中)、提取(其中执行图的状态被移动到存储器)和异常(其中结构中的数学、软和其他类型的错误被检测和处理,可能由外部实体处理)。下面的部分2.7讨论用以产生这些功能的高效大部分流水线实现方式的CSA的实施例的等待时间不敏感数据流架构的属性。概念上,配置可以将数据流图的状态加载到互连(和/或通信网络(例如,其网络数据流端点电路))和处理元件(例如,结构)中,例如,一般地从存储器加载。在此步骤期间,例如,作为上下文切换的结果,CSA中的所有结构可以被加载有新数据流图并且任何数据流令牌出现在该图中。CSA的等待时间不敏感语义可以准许结构的分布式异步初始化,例如,一旦PE被配置,它们就可以立即开始执行。未配置的PE可以对其通道进行反压处理直到它们被配置为止,例如,阻止配置的元件与未配置的元件之间的通信。可以将CSA配置分割成特许状态和用户级状态。这种两级分割可以使得结构的主要配置能够在不调用操作系统的情况下发生。在提取的一个实施例期间,数据流图的逻辑视图被捕获并提交到存储器中,例如,将所有实时控制及数据流令牌和状态包括在图中。
提取也可以在通过创建结构检查点来提供可靠性保证时起作用。CSA中的异常一般地可以是由在处理器中引起异常的相同事件引起的,该事件诸如是非法操作符变元或可靠性、可用性和可服务性(RAS)事件。在某些实施例中,在数据流操作符级下检测异常,例如,检查变元值或者通过模块化算术方案。在检测到异常时,数据流操作符(例如,电路)可以暂停并发出异常消息,例如,其包含操作标识符和已经发生的问题的性质的一些细节两者。在一个实施例中,数据流操作符将保持暂停直到它已被重配置为止。然后可以将异常消息传送给用于服务的关联处理器(例如,核心),例如,该服务可以包括提取图以供软件分析。
1.5块片级架构
CSA计算机架构的实施例(例如,把HPC和数据中心使用作为目标)被平铺。图6和图8示出了CSA的块片级部署。图8示出了CSA的全块片实现方式,例如,其可以是具有核心的处理器的加速器。此架构的主要优势是可以降低设计风险,例如,使得CSA和核心在制造时被完全解耦。除了允许更好的组件重用之外,这还可以允许像CSA高速缓存这样的组件的设计仅考虑CSA,例如,而不是需要结合核心的更严格的等待时间要求。最后,单独的块片可以允许CSA与小或大核心的集成。CSA的一个实施例捕获大多数矢量并行工作负载,使得大多数矢量样式工作负载直接在CSA上运行,但是在某些实施例中可以包括核心中的矢量样式指令,例如,以支持旧有二进制文件。
2.微架构
在一个实施例中,CSA微架构的目标是为了提供由CSA架构指定的每个数据流操作符的高质量实现方式。CSA微架构的实施例假设微架构的每个处理元件(和/或通信网络(例如,其网络数据流端点电路))对应于架构数据流图中的大致一个节点(例如,实体)。在一个实施例中,数据流图中的节点分布在多个网络数据流端点电路中。在某些实施例中,这产生不仅紧凑(从而产生密集计算阵列)而且高能效(例如,在处理元件(PE)既简单又大部分未复用的情况下,例如,针对CSA的配置(例如,编程)执行单个数据流操作符)的微架构元件。为了进一步减少能量和实现面积,CSA可以包括可配置异构结构样式,其中其每个PE仅实现数据流操作符的子集(例如,具有利用(一个或多个)网络数据流端点电路实现的数据流操作符的单独子集)。外设和支持子系统(诸如CSA高速缓存)可以被提供来在主要CSA处理结构本身中支持现任分布式并行机制。CSA微架构的实现方式可以利用存在于架构中的数据流和等待时间不敏感通信抽象。在某些实施例中,在编译器生成的图中的节点与CSA中的数据流操作符(例如,数据流操作符计算元件)之间存在(例如,实质上)一对一对应。
下面是对示例CSA的讨论,后面是对微架构的更详细讨论。本文中的某些实施例提供允许容易编译实现的CSA,例如,与处理编程语言(例如,C或C++)的小子集并且需要许多小时来编译甚至小程序的现有FPGA编译器形成对照。
CSA架构的某些实施例容许异构粗粒度操作,比如双精度浮点。程序可以用更少的粗粒度操作表示,例如,使得所公开的编译器运行得比传统空间编译器快。某些实施例包括具有新处理元件以支持像程序排序存储器访问这样的顺序概念的结构。某些实施例实现硬件来支持粗粒度数据流样式通信通道。这种通信模型是抽象的,并且非常接近于由编译器使用的控制数据流表示。本文中的某些实施例包括支持单周期等待时间通信的网络实现方式,例如,利用支持单个控制数据流操作的(例如,小)PE。在某些实施例中,这不仅改进能量效率和性能,而且它简化编译,因为编译器在高级数据流构造与结构之间进行一对一映射。本文中的某些实施例因此简化将现有(例如,C、C++或Fortran)程序编译为CSA(例如,结构)的任务。
能量效率可能是现代计算机系统中的首要关注点。本文中的某些实施例提供高能效空间架构的新模式。在某些实施例中,这些架构形成具有小高能效的面向数据流的处理元件(PE)(和/或分组交换通信网络(例如,其网络数据流端点电路))与轻量级电路交换通信网络(例如,互连)的异构混合的独特组成(例如,具有针对流控制的强化支持)的结构。由于每个的能量优势,这些组件的组合可以形成适合于以极其高能效的方式执行编译器生成的并行程序的空间加速器(例如,作为计算机的一部分)。因为此结构是异构的,所以可以通过引入新的域特定PE来为不同的应用域定制某些实施例。例如,用于高性能计算的结构可能包括针对双精度融合乘加的某种定制,而把深度神经网络作为目标的结构可能包括低精度浮点运算。
例如如图6中例示的空间架构模式的实施例是通过PE间网络连接的轻量级处理元件(PE)的组成。一般地,PE可以包括数据流操作符,例如,其中一旦(例如,所有)输入操作数到达数据流操作符,某个操作(例如,微指令或微指令集)就被执行,并且结果被转发给下游操作符。控制、调度和数据存储装置因此可以分布在PE当中,例如,去除支配经典处理器的集中式结构的开销。
可以通过将PE和网络配置成表达程序的控制数据流图来将程序转换为被映射到架构上的数据流图。通信通道可以是流控制的并且是完全反压的,例如,使得如果任何一个源通信通道没有数据或者目的地通信通道是满的,PE就将停顿。在一个实施例中,在运行时,数据流经已被配置成实现该操作(例如,加速算法)的PE和通道。例如,数据可以从存储器流入,通过结构,然后往回流出到存储器。
这种架构的实施例相对于传统多核心处理器可以实现显著的性能效率:与在更大核心中相比,计算(例如,形式为PE)可以是更简单的、更高能效的且更丰富的,并且通信可以是直接的且大部分是短程的,例如,与像在典型的多核心处理器中一样在广泛的全芯片网络上发生相反。而且,因为架构的实施例是极其并行的,所以许多强大的电路和设备级优化在不严重影响吞吐量的情况下是可能的,例如,低泄漏设备和低工作电压。这些更较低级优化相对于传统核心可以使得能够实现甚至更大的性能优势。在这些实施例的架构、电路和设备级良率下的效率的组合是令人瞩目的。随着晶体管密度继续增加,此架构的实施例可以使得能够实现更大的有效面积。
本文中的实施例提供数据流支持和电路交换的独特组合以使得结构能够更小、更高能效,并且与先前的架构相比提供更高的聚合性能。一般地为了细粒度位操纵而对FPGA进行调谐,而本文中的实施例是为了HPC应用中找到的双精度浮点运算而调谐的。本文中的某些实施例除了包括根据本公开的CSA之外还可以包括FPGA。
本文中的某些实施例将轻量级网络与高能效的数据流处理元件(和/或通信网络(例如,其网络数据流端点电路))组合以形成高吞吐量、低等待时间、高能效的HPC结构。此低等待时间网络可以使得能够构建具有更少功能性(例如,仅一个或两个指令以及可能一个架构上可见的寄存器)的处理元件(和/或通信网络(例如,其网络数据流端点电路)),因为将多个PE结合在一起以形成完整程序是高效的。
相对于处理器核心,本文中的CSA实施例可以提供更大计算密度和能量效率。例如,当PE非常小(例如,与核心相比)时,CSA可以实行更多的操作,并且具有比一核心多得多的计算并行性,例如,也许和作为矢量处理单元(VPU)的FMA的数量的16倍一样多。为了利用所有这些计算元件,在某些实施例中每操作能量非常低。
我们的这种数据流架构的实施例的能量优势很多。并行性在数据流图中是显式的,并且CSA架构的实施例不花费或者花费最少能量来提取它,例如,与每次指令被执行时必须重新发现并行性的无序处理器不同。因为在一个实施例中,每个PE负责单个操作,所以寄存器堆和端口计数可以是小的,例如,常常仅为一,并且因此比其在核心中的对应部分使用更少的能量。某些CSA包括许多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)组成的空间加速器中,通信等待时间和带宽可能对总体程序性能至关重要。本文中的某些实施例提供方便空间处理阵列(诸如图6中所示的空间阵列)中的PE之间的通信的轻量级电路交换网络,以及支持此网络所必需的微架构控制特征。网络的某些实施例使得能够构造支持面向数据流的处理元件(PE)的通信的点对点流控制通信通道。除了点对点通信之外,本文中的某些网络也支持多播通信。可以通过静态地配置网络以在PE之间形成虚拟电路来形成通信通道。本文中的电路交换技术可以减小通信等待时间,并且使网络缓冲相称地最小化,例如,导致高性能和高能量效率两者。在网络的某些实施例中,PE间等待时间可以和零周期一样低,意味着下游PE可以在数据被产生之后在该周期中对该数据操作。为了获得甚至更高的带宽,并且为了容许更多的程序,可以并行地布置多个网络,例如,如图6中所示。
空间架构(诸如图6中所示的空间架构)可以是通过PE间网络(和/或通信网络(例如,其网络数据流端点电路))连接的轻量级处理元件的组合。可以通过配置PE和网络将程序(被视为数据流图)映射到架构上。一般地,PE可以被配置为数据流操作符,并且一旦(例如,所有)输入操作数到达PE,就然后可以发生某个操作,并且结果被转发给所期望的下游PE。PE可以通过专用虚拟电路来通信,该专用虚拟电路通过静态地配置电路交换通信网络而形成。这些虚拟电路可以是流控制的且完全反压的,例如,使得如果源没有数据或者目的地是满的,PE就将停顿。在运行时,数据可以流经实现所映射的算法的PE。例如,数据可以从存储器流入,通过结构,然后往回流出到存储器。此架构的实施例相对于传统多核心处理器可以实现显著的性能效率:例如,计算(形式为PE)比更大的核心更简单且更多,并且通信是直接,例如,与存储器系统的扩展相反。
图6图示了根据本公开的实施例的包括处理元件(PE)阵列的加速器块片600。互连网络被描绘为电路交换、静态地配置的通信通道。例如,一组通道通过开关(例如,第一网络中的开关610和第二网络中的开关611)耦合在一起。第一网络和第二网络可以是单独的或者耦合在一起的。例如,开关610可以将四个数据路径(612、614、616、618)中的一个或多个耦合在一起,例如,像被配置成根据数据流图实行操作一样。在一个实施例中,数据路径的数量是任何复数。处理元件(例如,处理元件604)可以如本文中所公开的那样,例如,如在图9中那样。加速器块片600包括存储器/高速缓存层次接口602,例如,以将加速器块片600与存储器和/或高速缓存对接。数据路径(例如,618)可以延伸到另一块片或者例如在块片的边缘处终止。处理元件可以包括输入缓冲器(例如,缓冲器606)和输出缓冲器(例如,缓冲器608)。
操作可以基于其输入的可用性和PE的状态被执行。PE可以从输入通道获得操作数并且将结果写入到输出通道,但是也可以使用内部寄存器状态。本文中的某些实施例包括可配置数据流友好的PE。图9示出了一个这种PE(整数PE)的详细框图。此PE由若干I/O缓冲器、ALU、存储寄存器、一些指令寄存器和调度器构成。每个周期,调度器可以基于输入和输出缓冲器的可用性以及PE的状态选择用于执行的指令。操作的结果然后可以被写入到输出缓冲器或者到(例如,PE本地的)寄存器。写入到输出缓冲器的数据可以被传输到下游PE以用于进一步处理。这种样式的PE可以是极其高能效的,例如,不是从复杂的多端口寄存器堆读取数据,而是PE从寄存器读取数据。类似地,指令可以被直接地存储在寄存器中,而不是存储在虚拟化指令高速缓存中。
可以在特殊配置步骤期间设置指令寄存器。在此步骤期间,除了PE间网络之外的辅助控制线和状态可以用于按照配置跨越包括结构的若干PE流式传输。作为并行性的结果,这种网络的某些实施例可以提供快速重配置,例如,可以在不到大约10微秒内配置块片大小的结构。
图9表示处理元件的一个示例配置,例如,其中所有架构元件是最低限度大小的。在其他实施例中,处理元件的组件中的每一个被独立地定标以产生新PE。例如,为了处理更复杂的程序,可以引入可由PE执行的更大数量的指令。可配置性的第二维度在PE算术逻辑单元(ALU)的功能中。在图9中,描绘了可以支持加法、减法和各种逻辑运算的整数PE。可以通过将不同种类的功能单元代入PE来创建其他种类的PE。例如,整数乘法PE可能没有寄存器、单指令和单输出缓冲器。PE的某些实施例将融合乘加(FMA)分解成单独的但紧耦合的浮点乘和浮点加单元以改进针对乘加重工作负载的支持。在下面进一步对PE进行讨论。
图7A图示了根据本公开的实施例的可配置数据路径网络700(例如,参考图6所讨论的网络一或网络二的)。网络700包括可以(例如,经由其相应的控制信号)被配置成将一个或多个数据路径(例如,从PE起)连接在一起的多个复用器(例如,复用器702、704、706)。图7B图示了根据本公开的实施例的可配置流控制路径网络701(例如,参考图6所讨论的网络一或网络二)。网络可能是轻量级PE到PE网络。网络的某些实施例可以被认为是用于构造分布式点对点数据通道的一组可组成的基元。图7A示出了具有启用的两个通道(粗黑线和虚黑线)的网络。粗黑线通道是多播,例如,单个输入被发送到两个输出。注意的是,即使在通道端点之间形成专用电路交换路径,该通道也可以在单个网络内的某些点处交叉。此外,此交叉可能不在两个通道之间引入结构危险,使得每个通道独立地且以全带宽操作。
实现分布式数据通道可以包括图7A-7B中图示的两个路径。转发或数据路径将数据从生产者载送到消费者。复用器可以被配置成将数据和有效位从生产者引导到消费者,例如,如在图7A中一样。在多播的情况下,数据将被引导到多个消费者端点。网络的此实施例的第二部分是流控制或反压路径,其在正向数据路径的反向上流动,例如,如在图7B中那样。消费者端点可以断言它们何时准备好接受新数据。这些信号然后可以使用可配置逻辑合取(在图7B中被标记为(例如,回流)流控制功能)被导回到生产者。在一个实施例中,每个流控制功能电路可以是多个开关(例如,复用器),例如,与图7A类似。流控制路径可以处理从消费者到生产者的返回控制数据。合取可以启用多播,例如,在生产者假定数据已被接收之前每个消费者准备好接收该数据的情况下。在一个实施例中,PE是具有数据流操作符作为其架构接口的PE。附加地或替换地,在一个实施例中,PE可以是任何种类的PE(例如,在结构中),例如,但不限于具有指令指针、触发指令或基于状态机的架构接口的PE。
例如,除了PE被静态地配置之外,可以静态地配置网络。在配置步骤期间,可以在每个网络组件处设置配置位。这些位控制例如复用器选择和流控制功能。网络可以包括多个网络,例如,数据路径网络和流控制路径网络。一个网络或多个网络可以利用不同宽度(例如,第一宽度和更窄或更宽的宽度)的路径。在一个实施例中,数据路径网络具有比流控制路径网络的宽度更宽的(例如,位传输)宽度。在一个实施例中,第一网络和第二网络中的每一个均包括它们自己的数据路径网络和流控制路径网络,例如,数据路径网络A和流控制路径网络A以及更宽的数据路径网络B和流控制路径网络B。
网络的某些实施例是无缓冲的,并且数据将在单个周期中在生产者与消费者之间移动。网络的某些实施例也是无界的,也就是说,网络横跨整个结构。在一个实施例中,一个PE将在单个周期中与任何其他PE进行通信。在一个实施例中,为了改进路由带宽,可以在多行PE之间并行地布置多个网络。
相对于FPGA,本文中的网络的某些实施例具有三个优势:面积、频率和程序表达。本文中的网络的某些实施例在粗粒度下操作,例如,这减少配置位的数量,并且从而减少网络的面积。网络的某些实施例也通过直接地在电路(例如,硅)中实现流控制逻辑来获得面积减少。强化网络实现方式的某些实施例也享有优于FPGA的频率优势。由于面积和频率优势,可以存在其中在吞吐量均势时使用更低电压的功率优势。最后,网络的某些实施例尤其对于可变定时提供比FPGA线更好的高级语义,并且因此那些特定实施例更容易被编译器作为目标。本文中的网络的某些实施例可以被认为是用于构造分布式点对点数据通道的一组可组成的基元。
在某些实施例中,多播源可以不断言其数据有效,除非它从每个接收器接收到就绪信号。因此,可以在多播情况下使用额外的合取和控制位。
像某些PE一样,可以静态地配置网络。在此步骤期间,在每个网络组件处设置配置位。这些位控制例如复用器选择和流控制功能。我们的网络的正向路径需要一些位来摆动其复用器。在图7A中所示的示例中,每跳需要四个位:东西复用器各自利用一个位,然而南向复用器利用两个位。在此实施例中,四个位可以被用于数据路径,但是7个位可以被用于流控制功能(例如,在流控制路径网络中)。例如,如果CSA进一步利用南北方向,则其他实施例可以利用更多的位。流控制功能可以针对流控制可能来自的每个方向利用控制位。这可以使得能够静态地设置流控制功能的灵敏度。下表1概括了针对图7B中的网络的流控制功能的布尔代数实现方式,其中配置位被大写。在此示例中,利用了七个位。
表1:流实现方式
对于图7B中从左边起的第三流控制框,EAST_WEST_SENSITIVE和NORTH_SOUTH_SENSITIVE分别被描绘为设置来为粗线和虚线通道实现流控制。
图8图示了根据本公开的实施例的包括加速器802的硬件处理器块片800。加速器802可以是根据本公开的CSA。块片800包括多个高速缓存存储体(例如,高速缓存存储体808)。可以包括请求地址堆(RAF)电路810,例如,如在下面在部分2.2中所讨论的。ODI可以指代管芯上互连,例如,跨越将所有块片连接在一起的整个管芯展开的互连。OTI可以指代块片上互连,例如,跨越块片展开,例如,将块片上的高速缓存存储体连接在一起。
2.1 处理元件
在某些实施例中,CSA包括异构PE的阵列,其中结构由各自仅实现数据流操作符的子集的若干类型的PE组成。作为示例,图9示出了能够实现一大组整数和控制操作的PE的临时实现方式。其他PE(包括支持浮点加法、浮点乘法、缓冲和某些控制操作的那些PE)可以具有类似的实现方式样式,例如,其中适当的(数据流操作符)电路取代ALU。CSA的PE(例如,数据流操作符)可以在开始执行之前被配置(例如,编程)以实现来自PE支持的集合当中的特定数据流操作。配置可以包括一个或两个控制字,该控制字指定控制ALU的操作码,引导PE内的各个复用器,并且使数据流进入和离开PE通道。可以通过对这些配置位进行微编码来实现数据流操作符。图9中描绘的整数PE 900被组织为自顶向下流动的单级逻辑流水线。数据从本地网络集之一进入PE 900,其中它被注册在输入缓冲器中以供后续操作。每个PE可以支持许多宽的面向数据的通道和窄的面向控制的通道。提供的通道的数量可以基于PE功能性而变化,但是面向整数的PE的一个实施例具有2个宽的和1-2个窄的输入和输出通道。尽管整数PE被实现为单周期流水线,然而可以利用其他流水线选择。例如,乘法PE可以具有多个流水线级。
PE执行可以以数据流样式进行。基于配置微码,调度器可以检查PE入口和出口缓冲器的状态,以及,当用于所配置的操作的所有输入已到达,并且操作的出口缓冲器可用时,通过数据流操作符(例如,在ALU上)编排操作的实际执行。结果得到的值可以被放在所配置的出口缓冲器中。一个PE的出口缓冲器与另一PE的入口缓冲器之间的转移可以随着缓冲变得可用而异步地发生。在某些实施例中,PE被提供为使得每周期完成至少一个数据流操作。部分2讨论了包含基元操作的数据流操作符,诸如加、异或或拾取。某些实施例可以提供能量、面积、性能和等待时间方面的优势。在一个实施例中,利用对PE控制路径的扩展,可以启用更多的融合组合。在一个实施例中,处理元件的宽度是64位,例如,以得到HPC中的双精度浮点计算的重度利用并且以支持64位存储器寻址。
2.2通信网络
CSA微架构的实施例提供一起提供跨越多个通信规模的等待时间不敏感通道的架构抽象的实现方式的网络的层次。CSA通信层次的最低级别可以是本地网络。本地网络可以是静态电路交换的,例如,使用配置寄存器来摆动本地网络数据路径中的(一个或多个)复用器以在通信PE之间形成固定电路径。在一个实施例中,每数据流图(例如,在与PE配置相同的时间)设置本地网络的配置一次。在一个实施例中,静态电路交换针对能量进行优化,例如,其中CSA通信业务的大多数(也许大于95%)将跨越本地网络。程序可以包括在多个表达式中使用的项。为了针对这种情况进行优化,本文中的实施例为本地网络内的多播提供硬件支持。若干本地网络可以被结合在一起以形成路由通道,例如,其散布(作为网格)在PE的行和列之间。作为优化,可以包括若干本地网络来承载控制令牌。与FPGA互连相比,可以以数据路径的粒度路由CSA本地网络,并且另一差异可以是CSA对控制的处理。CSA本地网络的一个实施例是显式地流控制的(例如,反压的)。例如,对于每个正向数据路径和复用器集,CSA将提供与正向数据路径物理上配对的后向流动流控制路径。两个微架构路径的组合可以提供等待时间不敏感通道抽象的低等待时间、低能量、低面积、点到点实现方式。在一个实施例中,CSA的流控制线对于用户程序不可见,但是它们可以由为用户程序服务的架构来操纵。例如,可以通过在检测到异常状况时将流控制线拉到“不存在”状态来实现在部分1.2中描述的异常处理机制。此动作可以不仅优雅地停顿流水线的在违规计算中涉及的那些部分,而且也可以保存导致异常的机器状态,例如,以用于诊断分析。第二网络层(例如,夹层网络)可以是共享分组交换网络。夹层网络可以包括多个分布式网络控制器、网络数据流端点电路。夹层网络(例如,通过图66中的虚线框示意性地指示的网络)可以例如以等待时间、带宽和能量为代价提供更一般的长距离通信。在一些程序中,大多数通信可以发生在本地网络上,并且因此相比之下将相当大地减少夹层网络提供,例如,每个PE可能连接到多个本地网络,但是CSA将提供每PE的逻辑邻域仅一个夹层端点。因为夹层实际上是共享网络,所以每个夹层网络可以承载多个逻辑上独立的通道,例如,并且被提供有多个虚拟通道。在一个实施例中,夹层网络的主要功能是为了在PE中间并在PE与存储器之间提供宽范围通信。除了这种能力之外,夹层还可以包括(一个或多个)网络数据流端点电路,例如,以实行某些数据流操作。除了这种能力之外,夹层也可以作为运行时支持网络来操作,例如,通过该运行时支持网络,各种服务可以以用户程序透明的方式访问完整结构。以这个身份,夹层端点可以例如在CSA配置期间充当其本地邻域的控制器。为了形成横跨CSA块片的通道,可以利用三个子通道和两个本地网络通道(其承载去往和来自夹层网络中的单个通道的业务)。在一个实施例中,利用一个夹层通道,例如,一个夹层和两个本地=3个总网络跳数。
跨越网络层的通道的可组合性可以被以块片间、管芯间和结构粒度扩展到更高级网络层。
图9图示了根据本公开的实施例的处理元件900。在一个实施例中,操作配置寄存器919在配置(例如,映射)期间被加载并且指定此处理(例如,计算)元件将实行的(一个或多个)特定操作。寄存器920活动可以通过该操作(复用器916的输出,例如,由调度器914控制)来控制。例如,当输入数据和控制输入到达时,调度器914可以对处理元件900的一个或多个操作进行调度。控制输入缓冲器922连接到本地网络902(例如,并且本地网络902可以包括如在图7A中那样的数据路径网络和如在图7B中那样的流控制路径网络)并且在它到达(例如,网络具有(一个或多个)数据位和(一个或多个)有效位)时被加载有一值)。控制输出缓冲器932、数据输出缓冲器934和/或数据输出缓冲器936可以接收例如如通过操作(复用器916的输出)所控制的处理元件900的输出。每当ALU 918执行(也通过复用器916的输出来控制),可以加载状态寄存器938。控制输入缓冲器922和控制输出缓冲器932中的数据可以是多个位。复用器921(例如,操作数A)和复用器923(例如,操作数B)可以获取输入。
例如,假设在图3B中此处理(例如,计算)元件的操作是(或者包括)所谓的调用拾取。处理元件900然后将从数据输入缓冲器924或数据输入缓冲器926中选择数据,例如,以去往数据输出缓冲器934(例如,默认)或数据输出缓冲器936。922中的控制位因此可以在从数据输入缓冲器924中选择的情况下指示0,或者在从数据输入缓冲器926中选择的情况下指示1。
例如,假设在图3B中此处理(例如,计算)元件的操作是(或者包括)所谓的调用开关。处理元件900将例如从数据输入缓冲器924(例如,默认)或数据输入缓冲器926向数据输出缓冲器934或数据输出缓冲器936输出数据。922中的控制位因此可以在向数据输出缓冲器934输出的情况下指示0,或者在向数据输出缓冲器936输出的情况下指示1。
多个网络(例如,互连)可以连接到处理元件,例如,(输入)网络902、904、906和(输出)网络908、910、912。连接可以是开关,例如,如参考图7A和图7B所讨论的。在一个实施例中,每个网络包括两个子网络(或网络上的两个通道),例如,一个用于图7A中的数据路径网络,并且一个用于图7B中的流控制(例如,反压)路径网络。作为一个示例,本地网络902(例如,设置为控制互连)被描绘为切换(例如,连接)到控制输入缓冲器922。在此实施例中,数据路径(例如,如在图7A中那样的网络)可以承载控制输入值(例如,一个或多个位)(例如,控制令牌),并且流控制路径(例如,网络)可以承载来自控制输入缓冲器922的反压信号(例如,反压或非反压令牌),例如,以向上游生产者(例如,PE)指示新控制输入值将未被加载到(例如,发送到)控制输入缓冲器922中,直到反压信号指示在控制输入缓冲器922中存在用于新控制输入值(例如,来自上游生产者的控制输出缓冲器)的空间。在一个实施例中,新控制输入值可以不进入控制输入缓冲器922直到(i)上游生产者从“控制输入”缓冲器922接收到“空间可用”反压信号,并且(ii)新控制输入值被从上游生产者发送为止,例如,并且这可以停顿处理元件900直到那发生(并且(一个或多个)目标输出缓冲器中的空间可用)为止。
数据输入缓冲器924和数据输入缓冲器926可以类似地实行,例如,本地网络904(例如,设置为数据(与控制相反)互连)被描绘为切换(例如,连接)到数据输入缓冲器924。在此实施例中,数据路径(例如,如在图7A中那样的网络)可以承载数据输入值(例如,一个或多个位)(例如,数据流令牌),并且流控制路径(例如,网络)可以承载来自数据输入缓冲器924的反压信号(例如,反压或非反压令牌),例如,以向上游生产者(例如,PE)指示新数据输入值将未被加载到(例如,发送到)数据输入缓冲器924中,直到反压信号指示在数据输入缓冲器924中存在用于新数据输入值(例如,来自上游生产者的数据输出缓冲器)的空间为止。在一个实施例中,新数据输入值可以不进入数据输入缓冲器924直到(i)上游生产者从“数据输入”缓冲器924接收到“空间可用”反压信号,并且(ii)新数据输入值被从上游生产者发送为止,例如,并且这可以停顿处理元件900直到那发生(并且(一个或多个)目标输出缓冲器中的空间可用)为止。可以在其相应的输出缓冲器(例如,932、934、936)中停顿控制输出值和/或数据输出值,直到反压信号指示在输入缓冲器中存在用于(一个或多个)下游处理元件的可用空间为止。
处理元件900可以停顿执行直到其操作数(例如,控制输入值及其对应的一个或多个数据输入值)被接收到为止,和/或直到在处理元件900的(一个或多个)输出缓冲器中存在用于将通过对那些操作数执行操作而产生的数据的空间为止。
2.3 存储器接口
请求地址堆(RAF)电路(其简化版本被示出在图10中)可以负责执行存储器操作并且用作CSA结构与存储器层次之间的媒介。因此,RAF的主要微架构任务可以是为了使具有CSA结构的有序语义的无序存储器子系统合理化。以这个身份,RAF电路可以被提供有完整缓冲器,例如,对存储器响应进行重新排序并且按照请求次序将它们返回给结构的类似队列的结构。RAF电路的第二主要功能性可以是为了以地址转换和页面漫游器的形式提供支持。可以使用通道关联转换后备缓冲器(TLB)来将传入虚拟地址转换为物理地址。为了提供足够的存储器带宽,每个CSA块片可以包括多个RAF电路。像结构的各个PE一样,RAF电路可以在选择要执行的存储器操作之前通过在需要的情况下检查输入变元和输出缓冲的可用性来以数据流样式操作。然而,与一些PE不同,RAF电路在若干共址存储器操作之间复用。可以使用复用的RAF电路来使其各个子组件的面积开销最小化,例如,以共享加速器高速缓存接口(ACI)端口(在部分2.4中更详细地描述)、共享虚拟存储器(SVM)支持硬件、夹层网络接口和其他硬件管理设施。然而,存在也可以推动此选择的一些程序特性。在一个实施例中,(例如,有效的)数据流图将轮询共享虚拟存储器系统中的存储器。存储器等待时间绑定程序(比如图遍历)可以由于存储器相关控制流而利用许多单独的存储器操作以使存储器带宽饱和。尽管每个RAF可以被复用,然而CSA可以在块片粒度下包括多个(例如,在8个与32个之间)RAF以确保适当的高速缓存带宽。RAF可以经由本地网络和夹层网络两者与结构的其余部分进行通信。在RAF被复用的情况下,每个RAF可以被提供有到本地网络中的若干端口。这些端口可以用作到存储器的最小等待时间、高度确定性路径以用于由等待时间敏感或高带宽存储器操作使用。此外,RAF可以被提供有夹层网络端点,例如,其提供对运行时服务和远程用户级存储器访问器的存储器访问。
图10图示了根据本公开的实施例的请求地址堆(RAF)电路1000。在一个实施例中,在配置时间,在数据流图中的存储器加载和存储操作在寄存器1010中被指定。到数据流图中的那些存储器操作的弧然后可以连接到输入队列1022、1024和1026。从那些存储器操作起的弧因此将离开完成缓冲器1028、1030或1032。相关性令牌(其可以是单个位)到达到队列1018和1020中。相关性令牌将从队列1016离开。相关性令牌计数器1014可以是队列的紧凑表示并且跟踪用于任何给定输入队列的相关性令牌的数量。如果相关性令牌计数器1014饱和,则可以不为新存储器操作生成附加相关性令牌。因此,存储器排序电路(例如,图11中的RAF)可以停顿对新存储器操作进行调度,直到相关性令牌计数器1014变得不饱和为止。
作为加载的示例,地址到达调度器1012在1010中与加载相配的队列1022中。用于此加载的完成缓冲器槽被按照地址到达的次序指派。假定图中的这个特定加载没有指定的依赖性,地址和完成缓冲器槽由调度器(例如,经由存储器命令1042)发送到存储器系统。当结果返回到复用器1040(示意性地示出)时,它被存储到它指定的完成缓冲器槽中(例如,随着它贯穿存储器系统承载目标槽)。完成缓冲器按照地址到达的次序将结果发往回发送到本地网络(例如,本地网络1002、1004、1006或1008)中。
除了地址和数据两者必须在任何操作被发送到存储器系统之前到达之外,存储可以是类似的。
2.4高速缓存
数据流图可以能够并行地生成大量(例如,字粒度)请求。因此,CSA的某些实施例给高速缓存子系统提供足够的带宽来为CSA服务。可以利用例如如图11中所示的重度堆积的高速缓存微架构。图11图示了根据本公开的实施例的具有耦合在多个加速器块片(1108、1110、1112、1114)与多个高速缓存存储体(例如,高速缓存存储体1102)之间的多个请求地址堆(RAF)电路(例如,RAF电路(1))的电路1100。在一个实施例中,RAF和高速缓存存储体的数量可以是1:1或1:2的比率。高速缓存存储体可以包含全高速缓存行(例如,与按字共享相反),其中每行在高速缓存中确切地具有一个起始位置。可以经由伪随机函数将高速缓存行映射到高速缓存存储体。CSA可以采纳共享虚拟存储器(SVM)模型来与其他块片架构集成。某些实施例包括将RAF连接到高速缓存存储体的加速器高速缓存接口(ACI)网络。此网络可以在RAF与高速缓存之间承载地址和数据。ACI的拓扑可以是级联交叉杆,例如,作为等待时间与实现复杂度之间的折中。
2.5谓词传播和谓词合并
在某些处理器中,如果控制流传过其任何定义,则值的使用是有效的,例如,控制流传过值定义不是错误,但是不是对该值的使用。在数据流操作符(例如,PE)的反压网络的某些实施例中,必须从运行时确定的实际路径中消耗可以经由多个可能路径定义的值,并且必须消耗或明确地忽略被定义的每个值。未能从正确的通道读取该值可能会导致死锁或导致以错误的次序来处理值。
在某些实施例中,非结构化数据流来自控制流转换,例如,当代码(例如,程序)中的控制流被转换成数据流图时,诸如“if”语句之类的控制构造被转换为开关电路(例如,开关PE),其中基于控制谓词将流到控制构造中的每个值路由到两个数据流分支之一。此分支通常可以被称为数据流发散。如果控制构造的结构良好(例如,具有单个入口和单个出口),并且如果变量在两个互斥的分支中都有定义,则使用拾取电路(例如,拾取PE)选择正确的值,其由与对应的开关电路相同的谓词索引。该选择通常可以被称为数据流收敛。
图12A图示了根据本公开的实施例的程序代码1200。图12B图示了根据本公开的实施例的图12A的程序代码1200的数据流图1201。数据流图1201图示了表示在转换成数据流之后的简单的if语句的框图。块B1定义了值X和条件s1,其用于将X路由到块B2(如果s1为真)或块B3(如果s1为假)。块B2和B3均定义了值Y,该值Y由块B4消耗。在数据流图1201中,开关电路1202(例如,开关PE)将从块B1流出的值X引导到块B2或块B3中的任一个,而不是两者。相反地,拾取电路1204(例如,拾取PE)通过选择从B2或B3中的任一个而不是两者中流动的值来产生流到B4中的值Y。开关和拾取两者都由相同的谓词(即,s1)索引。在所描绘的实施例中未采取的分支(例如,假分支“F”或真分支“T”)没有消耗或产生任何值。下标编号可以用来指代分支或分支的一部分,例如,其中X是分支的输入部分,并且Y在分支的输出部分中(例如,X1,3是如由第一下标指示的从“1”块(B1)延伸到如由第二下标指示的“3”块(B3)的左分支的输入部分。
对于X值序列,将产生一系列Y值。即使来自块B3的(一个或多个)输出要比来自块B2的(一个或多个)输出花费更长的时间(例如,多于1X)或更短时间(例如,多于1X)来计算,在拾取PE 1204处呈现的s1谓词值的排序序列会确保在块B4处呈现的Y的值(例如,始终)以正确的(例如,程序)次序。
然而,在非结构化控制流的情况下,如可能由“goto”语句或通过编译器优化产生的那样,在某些实施例中,数据流发散的点与数据流会聚的点不具有1:1的对应。因此,用于控制拾取电路(例如,拾取PE)的谓词可能确定起来更加复杂。
图13A图示了根据本公开的实施例的结构化程序代码1300A。图13B图示了根据本公开的实施例的非结构化程序代码1300B,其具有与图13A中的代码1300A相同的含义。示例代码1300A的结构良好,例如,每个控件构造都恰好具有一个入口点和一个出口,并且每个语句都直接嵌套在恰好一个控件构造中。示例代码1300B具有等效功能(例如,相同的含义),但不保留干净的结构(例如,外部if语句具有两个出口)。然而,编译器可能会将代码1300A变换为代码1300B,以便节省重复的Y=B4(Y)调用的空间。在某些实施例中,块(例如,块B1等)将例如经由本文中讨论的一个或多个处理元件来实行一个或多个算术和/或逻辑运算。
图13C图示了根据本公开的实施例的图13B的程序代码1300B的数据流图1301。代码可以采用编程语言(例如,C、C++、Fortran等),并且本文中的某些实施例支持执行从该代码编译的数据流图。上面的非结构化代码1300B可以被表示为图13C中的数据流图1301,以及新的谓词传播(predprop)操作符(例如,如本文中所讨论的被实现为谓词传播处理元件)和/或新的谓词合并(predmerge)操作符(例如,如本文中所讨论的被实现为谓词传播处理元件)可以被利用以管理非结构化流。例如,数据流图1301包括第一分支,该第一分支以来自开关1302的假(F)输出开始(例如,要由开关PE实行),但是开关1304可以允许该第一分支上的数据跨接至第二分支,该第二分支以开关1302的真(T)输出开始(例如,可以在拾取1308处在那些分支的末端之前跨接)。将这与图12B中的结构化数据流图1201进行比较,其中以来自开关电路1202的假(F)输出开始的第一分支不能使该第一分支上的数据跨接到以开关电路1202的真(T)输出开始的第二分支(例如,不能在拾取电路1204处在那些分支的末端之前跨接)。
图13C表示由于代码1300B中非结构化使用“goto”语句而产生的数据流图1301。在该数据流图1301中,每个开关1302和1304(例如,由对应的开关PE实行)在其谓词值(分别为开关控制值s1或s3)为真的情况下将数据路由到右分支,并且在其谓词为假的情况下将数据路由到左分支。类似地,每个拾取电路1306和1308(例如,开关PE)在其谓词值(拾取控制值ib4或ib5)为真的情况下从右分支路由数据,并且在其谓词为假的情况下从其左分支路由数据。对于从块B1生成的每个X,有条件地确定谓词ib4和ib5,例如,如图14中的真值表1400中指定的。
图14图示了根据本公开的实施例的图13C中的谓词的真值表1400。值为真(true)可以指代布尔值(例如,二进制)一。值为假(false)可以指代布尔(例如,二进制)零。谓词“ib4”用于指示用于拾取电路1306的拾取控制输入(例如,端口),以控制拾取电路的操作,真和假的值是要输入到“ib4”的拾取控制值。谓词“ib5”用于指示拾取电路1308的拾取控制输入(例如,端口),以控制拾取电路的操作,并且真和假的值是要输入到“ib5”的拾取控制值。谓词“s1”用于指示用于开关1302的开关控制输入(例如,端口),以控制开关电路的操作,并且真和假的值是要输入到“s1”的开关控制值。谓词“s3”用于指示用于开关1304的开关控制输入(例如,端口),以控制开关电路的操作,并且真和假的值是要输入到“s3”的开关控制值。
在此示例中,非结构化数据流导致有条件地消耗的至少一个谓词(例如,s3)和有条件地产生的至少一个谓词(例如,ib4)。一个关键的见解是,为了保留排序,在某些实施例中,将使用占位符类型的令牌来表示拾取操作处的无值谓词,使得后续值不会在非结构化数据流的另一个分支上抢先于计算。例如,假设块B2完成其(一个或多个)操作的速度比块B3完成其(一个或多个)操作的速度快得多,并且第一输入使s1为假,而使s3为真,并且第二输入使s1为真。在此示例中,沿着边X1,2和Y2,4(分别对应于第一输入和s1处的假值)使用占位符令牌,以停顿(例如,保留)块B2的结果,直到块B3的第一结果到达块B4为止;否则,将以错误的次序呈现对块B4的输入。本文中的某些实施例通过例如以硬件(PE)和/或软件(编译器)级别管理这些谓词来改善计算机(例如,其加速器)的功能。在某些实施例中,这允许多个块同时操作,例如,不仅仅是串行执行。
本文中的某些实施例利用一对新的处理元件中的一个或两个(谓词传播和谓词合并)以允许执行非结构化数据流代码(例如,它们的数据流图)。从概念上讲,这些新的PE生成并消耗占位符令牌(例如,值),这些占位符令牌表示给定计算中未采取的路径。在某些实施例中,占位符令牌是控制值(例如,控制令牌),例如,以上参考图9所讨论的控制值。占位符令牌可能会阻止快速计算以免在其他数据流路径上抢先于较慢速计算,因此保存了相对次序。本文中的加速器(例如,本文中讨论的CSA)的某些实施例利用(一个或多个)谓词传播处理元件和/或(一个或多个)谓词合并处理元件来运行非结构化程序。本文中的加速器(例如,本文中讨论的CSA)的某些实施例利用(一个或多个)谓词传播处理元件和/或(一个或多个)谓词合并处理元件来运行非结构化程序,而不是在降低计算速度并相对于加速器增加了能耗的冯诺依曼处理器上运行非结构化程序。本文中的加速器的某些实施例(例如,本文中讨论的CSA)利用(一个或多个)谓词传播处理元件和/或(一个或多个)谓词合并处理元件来运行非结构化程序,而不是复制子图,以便解开控制流,因为复制会消耗过多的数量的处理元件,它们是空间架构中的稀缺资源。
谓词传播处理元件和谓词合并处理元件的某些实施例允许实现非循环数据流算法(例如,用于在空间数据流架构上正确执行非结构化控制流的有效算法)。
接下来,讨论非循环数据流算法的示例,其提供了一种方法,该方法用于计算通过数据流图的所有路径向下的块谓词和边谓词的组合。这之后是谓词传播处理元件和谓词合并处理元件的实施例的另外的细节,以如非循环数据流算法中所描述的那样简洁地处理边谓词的生成和组合。
非循环数据流图可能具有单入口和单出口块(例如,图13C中的B1-B5)。在一个实施例中,将数据流图的不是非循环单入口和单出口的部分模块化为较大的块,这些块遵循非循环(例如,数据令牌的)单入口和(例如,数据令牌的)单出口属性。在数据流图中,对于具有至少一个输入X和至少一个输出Y的每个块B,有去往块B的、表示X的一个或多个传入边,和来自块B的、表示Y的一个或两个传出边。为了消耗来自多个不同源的输入,如在图13C中的块B4和块B5的情况下,在某些实施例中,非循环数据流算法在概念上沿数据流图中的每条边向下传播(例如,1位)控制令牌。对于给定的输入,在数据项沿该边向下流动的情况下,该令牌的值可以为一,并且在数据项不沿该边向下流动的情况下,该令牌的值为零。在一个实施例中,这些控制令牌是通过如下计算数据流图中的谓词来生成的:
1.定义示例:
a. 对于块b,在该块执行的情况下,块谓词Pb为真;在其不执行的情况下为假。
b. 对于具有两个传出边Yj和Yk的块b,切换条件Sb(例如,切换控制值)是由块b计算的条件。如果Pb为假,则不计算Sb(例如,没有值);否则,如果Y的值应跟随边Yj,则Sb为假;并且如果Y的值应跟随边Yk,则Sb为真。
c. 对于具有传出边Yj和Yk的块b,如果Y值沿边Yk向下流动,则第一边谓词Ej为真,否则为假;并且如果Y值沿边Yj向下流动,则第二边谓词Ej为真,否则为假。注意的是,在该实施例中,Ej和Ek从不都为真,但是它们都可以为假,例如,在块谓词Pb为假的情况下。
2.为所有块(对于每组输入)无条件生成(例如,产生)块和边谓词,并且在Pb为真的情况下,计算那些块的切换条件。
a. 对于初始块,Pb为真。
b. 对于具有至少一个真的传入边谓词的块,Pb为真,而对于仅具有假传入边谓词的块则为假。
c. 如果块b产生值Y,并且块b仅具有一个后继,则对于Y,它将具有一个传出边Yj,其中边谓词Ej是块谓词Pb(例如,参见图13C中的块B2)。
d. 如果块B产生值Y,并且b具有两个后继,则对于值Y,它将具有两个传出边Yj和Yk。如果块谓词Pb为假,则边谓词Ej和Ek均为假;否则,Ej是Sb的倒数,而Ek与Sb相同。注意的是,在某些实施例中,即使只有一个后继读取为Y,也必须生成Yj和Yk两者。在某些实施例中,离开块b的所有路径都必须为Y产生一个值,使得可以在合并点处组合来自每个路径的值,并且可以保留次序。
3.对于具有多条传入X边的每个块,所选择的那一个是边谓词为真的那个。如果所有传入边谓词都不为真,则块谓词Pb将为假,并且该块将不会执行。在这里,构造一个对于单个变量,多于一个传入边谓词为真的数据流图是错误的。
因此,在某些实施例中,通过在数据流图的每条边旁边提供1位控制令牌流(在概念上是流动的)来维持执行次序。当在数据流收敛点处合并多个数据路径时,出现在拾取电路(例如,拾取PE)处的数据值不会被消耗,直到在这些实施例中看到其对应的(例如,真,而非假)控制令牌为止,例如,如果应该首先消耗通过不同路径的另一个值,那么在真控制令牌之前将有假控制令牌。假控制令牌将不会被消耗,直到其与来自每一个其他路径的令牌匹配为止。
图15图示了根据本公开的实施例的具有被配置成执行图13C的数据流图的多个处理元件的加速器1500。块可以是例如经由电路交换网络耦合在一起的一个或多个处理元件(PE)。图15中的虚线图示了控制值(例如,控制令牌)流动的路径,并且实线图示了数据值(例如,数据令牌)流动的路径,例如,其中所有这些路径均由电路交换网络形成。加速器1500包括谓词传播处理元件1512(例如,对应于开关电路1502)、谓词传播处理元件1514(例如,对应于开关电路1504)、谓词合并处理元件1516(例如,对应于拾取电路1506)和谓词合并处理元件1518(例如,对应于拾取电路1508)。在某些实施例中,谓词传播处理元件(谓词传播PE)根据块谓词Pb和切换条件Sb(例如,如在图16中的表1600中的),来计算传出边缘谓词Ej和Ek。在某些实施例中,谓词合并处理元件(谓词合并PE)计算块谓词Pb以及拾取控制值(例如,索引ib),以用于从来自传入的两个边谓词Ej和Ek(例如,基于其输入)的两个传入边Xj和Xk当中选择输入X(如图17的表1700中的)。
图16图示了根据本公开的实施例的用于谓词传播处理元件的真值表1600。值为真可以指代布尔(例如,二进制)一。值为假可以指代布尔(例如,二进制)零。N意味着当Pb为假时,PE既不读取也不消耗(例如,删除)输入(例如,通道)Sb。注意的是,没有如图14中的表1400中的空情况(--)。
图17图示了根据本公开实施例的用于谓词合并处理元件的真值表1700。值为真可以指代布尔(例如,二进制)一。值为假可以指代布尔(例如,二进制)零。注意的是,在表1700中,使两个输入边谓词Ej和Ek都为真是错误的,例如,在对于沿两条路径(例如,分支)下来的同一代控制令牌不想要拥有真控制令牌的情况,其中假定数据不能沿任何路径下来,或者只能沿任一路径之一下来。
在某些实施例中,错误条件不应该出现在正确构造的图中。如果对给定块有多于两个传入边,则可以将多个谓词合并PE及其对应的拾取电路布置成树。因为合并操作是关联的,所以在该实施例中,元件的布置并不重要。在正确构造的图的某些实施例中,谓词合并PE的树的两个或更多个传入边中的不超过一个为真。
因此,图15是图13C中的数据流图的所配置的加速器电路1500,其使用谓词传播PE和谓词合并PE来处理非结构化数据流。在图15中的电路图中,谓词传播元件上的标记Ej和Ek与开关元件上的T和F标记类似地使用:要标记每个PE的输出,而不是图的边。注意的是,第一谓词传播PE 1512可以用s1的简单重复来代替,例如,对于左分支则否定它。类似地,由于真值表示出了ib5始终与E4,5相同,因此在某些实施例中可以省略谓词合并PE 1518。
谓词传播和谓词合并操作可以被实现为干净地解决非结构化数据流问题的(例如,一个位)PE。在一个实施例中,每个谓词传播PE是单个PE(例如,不是2个或更多个PE)。在一个实施例中,每个谓词合并PE是单个PE(例如,不是2个或更多个PE)。在某些实施例中,单个PE可以被用作谓词合并PE或谓词传播PE。包括谓词传播处理元件和/或谓词合并处理元件因此减少了电路,节省了功率,并且更直接地表达了非循环数据流算法的构造块。
图18A-18J图示了根据本公开的实施例的实行图13C的数据流图1301的执行周期的图15的加速器1500。下面的讨论假定块B1被调用三次,产生了三个连续的Y值和三个s1的对应值。每对值(Y,s1)定义了触发一系列计算的数据生成。该系列计算中的每个中间值都与同一数据生成相关联。为了易于描述,以下内容不包括中间值的名称(或值),并且用数字代替针对图例中的符号的字母“G”(代)来标记它们所属的代。作为一个示例,具有“G”值为1的数据令牌(例如,数据值)指示这些令牌是最初基于来自块B1的输出X1、作为第一(1)代数据而产生的,具有“G”值为2的数据令牌(例如,数据值)指示这些令牌是最初基于来自块B1的输出X1、作为第二(2)代数据而产生的,具有“G”值为3的数据令牌(例如,数据值)指示这些令牌是最初基于来自块B1的输出X1、作为第三(3)代数据而产生的。图18A-18J中的逐周期动画还使用圆圈来表示数据令牌,空心菱形来表示具有值为假的控制令牌,以及实心菱形来表示具有值为真控制令牌。在某些实施例中,控制令牌的输入/输出上的状态是以下三种状态之一:(i)无控制令牌(例如,无值),(ii)假控制令牌,或(iii)真控制令牌。
在所描绘的实施例中,块B1每个时钟周期产生新的数据生成。作为一个示例,除了块B2之外的所有其他块:拾取1506、拾取1508、开关1502、开关1504、谓词传播处理元件1512(例如,对应于开关电路1502)、谓词传播处理元件1514(例如,对应于开关电路1504)、谓词合并处理元件1516(例如,对应于拾取电路1506)和谓词合并处理元件1518(例如,对应于拾取电路1508)都可能具有一个周期的等待时间(例如,当所有它们的输入在一个周期内满足,则它们在下一个周期中产生输出)。在该示例中,块B2是较高等待时间的操作,其中其输入可用与其输出被产生之间的延迟大于一个周期(例如,5个周期的延迟)。该动画示出了当某些计算比其他计算慢时,由谓词传播PE 1512、1514和谓词合并PE 1516、1518产生的控制令牌如何防止操作以免于无序完成。在一个实施例中,控制令牌是单个位值(例如,无值、布尔一(真)或布尔假(零)),并且不包括它们属于哪个代的任何标识符。因此,在某些实施例中,是根据图16中对于谓词传播PE的真值表以及根据图17中对于谓词合并PE的真值表来使用令牌,来在某些计算比其他计算慢时防止操作以免于无序完成,例如,并且允许块并行处理数据(例如,在第一组件(例如,块)中针对第一代输入来生成输出数据,并且从第二组件(例如,块)中针对不同代的输入来生成输出数据)。
注意图18A-18J中的一对一对应,使得每个开关电路包括相应的谓词传播处理元件,并且每个拾取电路包括相应的谓词合并处理元件。在某些实施例中,(例如,任何)令牌将不会被发送(例如,当要发送令牌的其他条件得到满足时),除非在目标组件处的队列(例如,缓冲器)中有时隙可用来存储令牌,例如,如由在本文中所讨论的反压路径上发送的反压值所指示的可用或不可用的时隙。
在图18A中,块B1已经产生了第一代数据令牌(例如,多个位)和用于第一代数据的第一(真)代控制令牌。在一个实施例中,第一代数据令牌(图示为带圆圈的一)包括由块B1计算的第一代(例如,第一迭代)结果位(例如,32位或64位),例如,如由图15中被指示为X1的第一代输出。在一个实施例中,第一代控制令牌(图示为菱形)包括(例如,是)第一代(例如,第一迭代)(一个或多个)控制位(例如,单个位或多个位,例如,小于32位或小于64位),其由块B1计算(或从中传递),例如,如图15中被指示为S1的第一代输出。在图示的实施例中,第一代控制令牌是真值(例如,布尔一),因此菱形包括数字一(第一代),并且以其他方式填充(非空心)以指示真控制令牌。注意,菱形和圆形格式及其中的数字仅仅是为了在这些图中易于阅读,并且电路中的数据将不具有这样的形状或编号,例如,实际电路中没有表示任何代的信息,这些信息在图中有助于读者理解。
图18A描绘了第一代数据的第一代数据令牌(带圆圈的一)已经作为输入到达开关电路1502,并且第一代数据的第一代控制令牌(填充菱形一)已经作为输入到达控制开关电路1502,以将开关输入耦合到任一开关输出(例如,将来自块B1的输出X1耦合到开关输出X1,3或X1,2中的任一个),并且作为谓词传播处理元件1512的输入到达。
转向图18B,图示的实施例描绘了将来自第一代的数据令牌切换到右侧(例如,真)方向,谓词传播PE 1512向右侧生成真令牌,并且向左侧生成假令牌,它们分别指示数据令牌所采取或不采取的路径,并且块B1为第二代产生另一个数据令牌和假控制令牌。
在图18B中,已经基于第一代控制令牌(填充菱形一)为真,将第一代数据的第一代数据令牌(带圆圈的一)从开关电路1502的输入发送到块B2,因此使第一代数据令牌(带圆圈的一)要被路由到开关电路1502的右开关输出(例如,开关输出X1,2)以到达块B2。还提供了第一代控制令牌(例如,如由S1指示的)作为对谓词传播处理元件1512的输入(例如,对应于开关电路1502),例如,将控制令牌用作输入值来控制开关电路1502和谓词传播处理元件1512两者。
在所描绘的实施例中,谓词传播处理元件1512已根据图16中的表1600进行操作。由于块谓词值Pb(例如,Pb1)作为第一代的真(非假)而被提供给谓词传播处理元件1512,并且控制输入Sb(例如,s1)被提供为第一代的真(非假),所以对于其中Sb=真(例如,布尔一)和Pb=真(例如,布尔一)的两个输入,由谓词传播处理元件1512针对表1600所确定的结果输出为:该第一边谓词值(表1600中的Ej)被输出为假,并且第二边谓词值(表1600中的Ek)被输出为真,因为在所描绘的实施例中,Ej是谓词传播处理元件1512的左输出,而Ek是其右输出,使得在所描绘的路径上,假的第一代控制令牌(空心菱形一)被输出为Ej,并且(例如,同时地)真的第一代控制令牌(填充菱形一)被输出为Ek。再次,注意的是,即使这些控制令牌与被输入到谓词传播处理元件1512的控制令牌不同,但图18A-18J中所示的所有这些第一代控制令牌都是同一代的部分,因为它们基于被输入到该电路中的相同第一代数据值(例如,第一代的X1、s1)。
图18B还图示了块B1产生了用于第二代数据的第二(假)代控制令牌和第二代数据令牌(例如,多个位)。在一个实施例中,第二代数据令牌(被图示为带圆圈的二)包括由块B1计算的第二代(例如,第二迭代)结果位(例如,32位或64位),例如,在图15中被指示为X1的第二代输出。在一个实施例中,第二代控制令牌(图示为菱形)包括(例如,是)第二代(例如,第二迭代)(一个或多个)控制位(例如,单个位或多个位,例如,小于32位或小于64位),其由块B1计算(或从中传递),例如,如图15中被指示为S1的第二代输出。在图示的实施例中,第二代控制令牌是假值(例如,布尔零),因此菱形包括数字二(第二代),并且以其他方式是空心的(未被填充)以指示假控制令牌。菱形和圆形格式仅仅是为了在这些图中易于阅读,并且电路中的数据将不具有这样的形状。
在图18B中,谓词合并处理元件1516尚不产生输出,因为尽管第一(真)代控制令牌已从其右侧输入(例如,图17中的表1700中的Ek)到达(例如,已排队),另一个第一代控制令牌尚未从其左输入到达(例如,图17中的表1700中的Ej)。图18B描绘了第二代数据的第二代数据令牌(带圆圈的二)已经作为输入到达开关电路1502,并且第一代数据的第二代控制令牌(空心菱形一)已经作为输入到达控制开关电路1502以将开关输入耦合到任一开关输出(例如,将来自块B1的输出X1耦合到任一开关输出X1,3或X1,2)。
转向图18C,块B2开始对来自第一代的数据令牌的多循环(例如,高等待时间)计算。从第一谓词传播PE 1512生成的用于第一代的假控制令牌被第二谓词传播PE 1514消耗,并且在两个分支上生成用于第一代的假控制令牌,从而指示没有采取任一分支(例如,由于数据令牌没有进入对应的第二开关1504)。来自第二代的数据令牌被切换到左侧(例如,“假”方向),并且第一preprop PE 1512产生对左侧的真控制令牌和对右侧的假控制令牌,并且块B1产生第三代数据令牌以及用于第三代的假控制令牌。
在图18C中,块B2已经从第一代(带圆圈的一)接收到数据令牌,并且正在继续处理该数据令牌以产生输出数据令牌(例如,这里将不输出控制令牌)。第二谓词传播处理元件1514接收到假第一代控制令牌(空心菱形一)作为块谓词值输入Pb,并且根据图16中的表1600,块谓词值输入Pb(例如,Pb3)值为假指示了第二谓词传播处理元件1514并不读取或消耗输入Sb上的值(例如,s3)。第二谓词传播处理元件1514因此忽略Sb,因为对于第一代,Pb=假(例如,布尔零),并且由谓词传播处理元件1512针对表1600所确定的结果输出是:由于在所描绘的实施例中,Ej是第二谓词传播处理元件1514的左输出,并且Ek是第二谓词传播处理元件1514的右输出,因此第一边谓词值(表1600中的Ej)被输出为假,并且第二边谓词值(表1600中的Ek)被输出为假,所以在所描绘的路径上,假的第一代控制令牌(空心菱形一)被输出为Ej,并且(例如,同时地)假的第一代控制令牌(空心菱形一)被输出为Ek。
在所描绘的实施例中,第一谓词传播处理元件1512将根据图16中的表1600进行操作。由于块谓词值Pb(例如,Pb1)被提供为谓词传播处理元件1512的真(非假),并且控制输入Sb(例如,s1)被提供给第二代为假(非真),则对于这两个输入,其中Sb=假(例如,布尔零)和Pb=真(例如,布尔一),由谓词传播处理元件1512针对表1600所确定的结果输出是:由于在描绘的实施例中,Ej是谓词传播处理元件1512的左输出,并且Ek是谓词传播处理元件1512的右输出,因此第一边谓词值(表1600中的Ej)被输出为真,并且第二边谓词值(表1600中的Ek)被输出为假,所以在描绘的路径上,真的第二代控制令牌(填充菱形二)被输出为Ej,并且(例如,同时地)假的第二代控制令牌(空心菱形二)被输出为Ek。再次,注意的是,即使这些控制令牌与被输入到谓词传播处理元件1512中的控制令牌不同,但图18A-18J中所示的所有这些第二代控制令牌都是同一代的部分,因为它们基于被输入到该电路的第二代数据值(例如,第二代的X1、s1)。
图18C进一步图示了块B1产生了用于第二代数据的第三(假)代控制令牌和第三代数据令牌(例如,多个位)。在一个实施例中,第三代数据令牌(被图示为带圆圈的三)包括由块B1计算的第三代(例如,第三迭代)结果位(例如,32位或64位),例如,在图15中被指示为X1的第三代输出。在一个实施例中,第三代控制令牌(被图示为菱形)包括(例如,是)(一个或多个)控制位(例如,单个位或多个位,例如,小于32位或小于64位),其由块B1计算(或从中传递),例如,如图15中被指示为S1的第三代输入。在图示的实施例中,第三代控制令牌是假值(例如,布尔零),因此菱形包括数字三(第三代),并且以其他方式是空心的(未被填充)以指示假控制令牌。
图18C还图示了第三代数据的第三代数据令牌(带圆圈的三)作为输入到达开关电路1502,并且第三代数据的第三代控制令牌(填充菱形三)作为输入到达控制开关电路1502,以将开关输入耦合到任一开关输出(例如,将来自块B1的输出X1耦合到任一开关输出X1,3或X1,2)。在某些实施例中,控制值为假是要将数据路由到左开关输出,而控制值为真是要将数据路由到右开关输出。在某些其他实施例中,控制值为假是要将数据路由到右开关输出,而控制值为真是要将数据路由到左开关输出。在所描绘的实施例中,第三代控制令牌(空心菱形三)为假,因此第三代数据令牌(带圆圈的三)要被路由到开关电路1502的左开关输出(例如,开关输出X1,3)以到达块B3。还作为输入将第三代控制令牌提供(例如,如由S1所指示的)给谓词传播处理元件1512(例如,对应于开关电路1502),例如,将控制令牌用作输入值来控制开关电路1502和谓词传播处理元件1512两者。
在一个(例如,任何)谓词传播处理元件是图9中的PE 900的一个实施例中,第一输入(例如,Pb)被存储(例如,以先进先出的次序)到第一数据输入缓冲器924中,并且第二输入(例如,Sb)被存储(例如,以先进先出的次序)到第二输入缓冲器926中。在一个实施例中,缓冲器是单个位宽缓冲器。调度器914可以被编程为根据真值表(例如,图16中的真值表1600)进行操作。在一个实施例中,谓词传播处理元件的输出来自PE 900的输出缓冲器,例如,数据输出缓冲器934(例如,用于Ej)和数据输出缓冲器936(例如,用于Ek)。
图18C进一步图示了谓词合并处理元件1516要接收(例如,在其队列中)第一(真)生成控制令牌和第二(假)生成控制令牌两者作为其正确的输入(例如,在图17中的表1700中的Ek)(例如,以所描绘的次序排队),以及第一(假)生成控制令牌作为其左输入(例如,图17中的表1700中的Ej)。在某些实施例中,谓词合并处理元件1516包括用于第一(例如,左)输入的第一队列和用于第二(例如,右)输入的第二队列。参见例如图9和图20。在某些实施例中,谓词合并处理元件1516将不产生输出,直到接收到其第一输入(例如,左输入Ej)及其第二输入(例如,右输入Ek)上的输入,例如,谓词合并处理元件1516停顿,直到接收到两个并行输入(例如,它们将来自同一代)为止。
在其中(例如,任何)谓词合并处理元件是图9中的PE 900的一个实施例中,第一输入(例如,Ej)被存储(例如,以先进先出的次序)到第一数据输入缓冲器924中,并且第二输入(例如,Sb)被存储(例如,以先进先出的次序)到第二输入缓冲器926中。在一实施例中,缓冲器是单个位宽缓冲器。调度器914可以被编程为根据真值表(例如,图17中的真值表1700)进行操作。在一个实施例中,谓词合并处理元件的输出来自PE 900的输出缓冲器,例如,数据输出缓冲器934(例如,用于ib)和数据输出缓冲器936(例如,用于Pb)。
在图18C中,谓词合并处理元件1518已接收到(i)谓词合并处理元件1516的右输入(例如,图17中的表1700中的Ek值)上的第一(真)生成控制令牌和第二(假)生成控制令牌(例如,从右输出排队的);以及(ii)谓词合并处理元件1516的左输入(例如,图17中的表1700中的Ej值)上的第一(假)生成控制令牌。
在图18C中,谓词合并处理元件1518尚未产生输出,因为尽管第一(假)代控制令牌已经从其左输入到达(例如,已经排队)(例如,在图17中的表1700中的Ej),但是另一个第一代控制令牌还没有从其右输入到达(例如,在图17中的表1700中的Ek)。
图18C描绘了第三代数据的第三代数据令牌(带圆圈的三)作为输入已经到达开关电路1502,并且第三代数据的第三代控制令牌(空心菱形三)已经作为输入到达控制开关电路1502,以将开关输入耦合到任一开关输出(例如,以将来自块B1的输出X1耦合到任一开关输出X1,3或X1,2)。
转向图18D,所图示的实施例描绘了第一谓词合并PE 1516生成真控制令牌,以控制第一拾取从正确的输入中获取值,但是由于块B2尚未产生值,因此开关块前进,块B3处理了来自第二代的数据值,该块B3还产生了用于第二代的真控制令牌,并且将来自第三代的数据令牌切换到左侧(假方向),并且第一谓词传播PE 1512针对第三代在其左分支上生成了对应的真控制令牌并且在其右侧分支上生成了假控制令牌。
在图18D中,块B2继续处理来自第一代(带圆圈的一)的数据令牌。块B3已经产生了第二代数据令牌(例如,多个位)和用于第二代数据的第二(真)代控制令牌。在一个实施例中,第二代数据令牌(被图示为带圆圈的二)包括第二代结果位(例如,32位或64位),其基于由块B3计算出的第二代位,例如,基于图15中被指示为Y3的输出的第二代。在一个实施例中,第二代控制令牌(被图示为菱形)包括(例如是)第二代(一个或多个)控制位(例如,单个位或多个位,例如,小于32位或小于64位),其由块B3计算(或从中传递),例如,在图15中被指示为S3。在图示的实施例中,第二代控制令牌是真值(例如,布尔一),因此菱形包括数字二(第二代),并且以其他方式填充(非空心)以指示真控制令牌。
在所描绘的实施例中,谓词传播处理元件1512已经根据图16中的表1600进行操作。由于块谓词值Pb(例如,Pb1)作为第三代的真(非假)被提供给谓词传播处理元件1512,并且控制输入Sb(例如,s1)作为第三代的假来提供,所以对于这两个输入,其中Sb=假(例如,布尔零)和Pb=真(例如,布尔一),由谓词传播处理元件1512针对表1600所确定的结果输出为:该第一边谓词值(表1600中的Ej)被输出为真,并且第二边谓词值(表1600中的Ek)被输出为假,因为在所描绘的实施例中,Ej是谓词传播处理元件1512的左输出而Ek是其右输出,所以在所描绘的路径上,真的第三代控制令牌(填充菱形三)被输出为Ej,并且(例如,同时地)假的第三代控制令牌(空心菱形三)被输出为Ek。
图18D描绘了谓词传播处理元件1514在前一个周期中仅接收(例如,或存储)一个值,其中该值是具有真的第二代控制令牌(填充菱形二)的块谓词值输入Pb。根据图16中的表1600,块谓词值输入Pb(例如,Pb3)值为真,指示第二谓词传播处理元件1514将读取(例如,和消耗)输入Sb上的值(例如,s3)。因此,谓词传播处理元件1514在周期4期间停顿以免操作。另外,图18D描绘了第二代数据的第二代数据令牌(带圆圈的二)已经作为来自块B3的输入到达开关电路1504,并且第二代数据的第二代控制令牌(填充菱形二)已经作为来自块B3的输入到达控制开关电路1504,以将开关输入耦合到任一开关输出(例如,以将来自块B3的输出Y3耦合到任一开关输出Y3,4或Y3,5),并且作为输入Sb(例如,s3)到达谓词传播处理元件1514。
在图18D中,在前一个周期期间,假的第一代控制令牌已经到达谓词合并处理元件1516的左输入(例如,图17中的表1700中的Ej值)(例如,已从左输入排队),因此,谓词合并处理元件1516现在将停止停顿,并且产生输出,因为它具有来自Ej和Ek的输入两者,例如,其中Ej来源于谓词传播处理元件1514,并且Ek来源于谓词传播处理元件1512。在所描绘的实施例中,第一谓词合并处理元件1516将根据图17中的表1700进行操作。由于针对第一代,将边谓词值Ej(例如,E3,4)作为假提供给谓词合并处理元件1516,并且将边谓词值Ek(例如,E2,4)作为真提供给谓词合并处理元件1516,所以对于其中Ej=假(例如,布尔零)和Ej=真(例如,布尔1)的这两个输入,由谓词合并处理元件1516针对表1700所确定的结果输出为:该第一输出(例如,作为用于拾取电路1506的控制输入ib4)(表1700中的ib)被输出为真,并且块谓词值(例如,E2,4)(表1700中的Pb)被输出为假,使得在描绘的路径上,真的第一代控制令牌(填充菱形一)被输出为ib,并且(例如,同时地)(例如,在同一周期中)真的第一代控制令牌(填充菱形一)被输出为Pb。在图18D中,谓词合并处理元件1518停顿,但是将在下一个周期中产生输出,因为另一个第一代控制令牌(从谓词合并PE 1516发送的真控制令牌正被发送到谓词合并处理元件1518的右输入(例如,图17中的表1700中的Ek),并且另一个第一(假)代控制令牌已经从其左输入(例如,图17中的表1700中的Ej)到达(例如,已排队))。
在处理元件的动作上,在某些实施例中,导致动作的输入令牌(例如,值)被消耗(例如,在使用后被删除)。
转向图18E,图示的实施例描绘了来自第二代的数据令牌被切换到右侧(真方向),并且出现在第一拾取电路1506的左输入处,然而,该拾取由于真值存在于其索引端口上而等待其他输入,因此,尽管来自第二代的数据已经比来自第一代的数据提前到了这一点,但是拾取电路1506受谓词合并PE 1516控制,以防止第二代数据实际上超过第一代数据。
在图18E中,块B2继续处理来自第一代(带圆圈的一)的数据令牌。块B3已经产生了第三代数据令牌(例如,多个位)和用于第三代数据的第三(假)代控制令牌。在一个实施例中,第三代数据令牌(图示为带圆圈的三)包括第三代结果位(例如,32位或64位),其基于由块B1计算出的第三代位(例如,基于如图15中X1所指示的输出的第三代)。在一个实施例中,第三代控制令牌(图示为菱形)包括(例如,是)第三代(一个或多个)控制位(例如,单个位或多个位,例如,小于32位或小于64位),其由块B3计算(或从中传递),例如,在图15中被指示为S3的。在图示的实施例中,第三代控制令牌是假值(例如,布尔零),因此菱形包括数字三(第三代),并且以其它方式是空心的(未被填充)以指示假控制令牌。
图18B描绘了第二代数据的第二代数据令牌(带圆圈的二)已经从开关电路1502的输入发送到开关电路的右输出,因为第二代控制令牌为真(填充菱形二)。第二代数据令牌(带圆圈的二)被提供给拾取电路1506的左输入。拾取电路1506包括活动控制值,但是未决控制令牌是真值(即,被描绘为填充菱形一的未决第一代控制令牌),并因此源自于拾取电路1506的真(例如,右)输入(例如,排队输入),而不是拾取电路1506的假(例如,左)输入(例如,排队输入)。因此,在该实施例中,数据令牌二停顿以免离开拾取电路1506,直到假控制令牌到达为止。在其中控制令牌是有序接收并且不能互相传递(例如,先进先出队列)的实施例中,拾取电路1506因此会停顿以免从其输出端口输出任何值,直到数据令牌到达真(例如,右)输入为止。由于真(例如,右)输入被耦合到块B2以提供第一代数据令牌的输出,因此在该实施例中,第二代、第三代等被停顿以免相互传递。
在描绘的实施例中,谓词传播处理元件1514已经根据图16中的表1600进行操作。由于块谓词值Pb(例如,Pb3)作为第二代的真(非假)而被提供给谓词传播处理元件1514,并且控制输入Sb(例如,s3)现在被提供为第二代的真,所以对于其中Sb=真(例如,布尔一)和Pb=真(例如,布尔一)的这两个输入,谓词传播处理元件1514不再停顿,并且由谓词传播处理元件1514针对表1600所确定的结果输出为:第一边谓词值(表1600中的Ej)被输出为假,并且第二边谓词值(表1600中的Ek)被输出为真,因为在所描绘的实施例中,Ej是谓词传播处理元件1514的左输出,而Ek是其右输出,使得在所描绘的路径上,假的第二代控制令牌(空心菱形二)被输出为Ej,并且(例如,同时地)真的第二代控制令牌(填充菱形二)被输出为Ek。
在图18E中,在先前的周期期间,假的第一代控制令牌已经到达谓词合并处理元件1518的左输入(例如,图17中的表1700中的Ej值)(例如,已从左输入排队),因此,谓词合并处理元件1518现在将停止停顿,并且产生输出,因为它具有来自Ej和Ek的输入两者,例如,其中Ej源自于谓词传播处理元件1514,并且Ek源自于谓词合并处理元件1516。在所描绘的实施例中,第二谓词合并处理元件1518将根据图17中的表1700进行操作。由于对于第一代,边谓词值Ej(例如,E3,5)作为假而被提供给谓词合并处理元件1518,并且边谓词值Ek(例如,E4,5)作为真而被提供给谓词合并处理元件1518,所以对于其中Ej=假(例如,布尔零)和Ej=真(例如,布尔一)的两个输入,由谓词合并处理元件1518针对表1700所确定的结果输出为:第一输出(例如,作为拾取电路1508的控制输入ib5)(表1700中的ib)被输出为真,并且块谓词值(例如,Pb)(表1700中的Pb)被输出为真,使得在所描绘的路径上,真的第一代控制令牌(填充菱形一)被输出为ib,并且(例如,同时地)真的第一代控制令牌(填充菱形一)被输出为Pb。在某些实施例中,例如在收敛点处,可以忽略Pb输出。在图18E中,谓词合并处理元件1516停顿,但是将在下一周期中产生输出,因为另一个第二代控制令牌(从谓词传播PE1514发送的真控制令牌)正被发送到谓词合并处理元件1516的左输入(例如,图17中的表1700中的Ej),并且另一个第二(假)代控制令牌已从其右输入(例如,图17中的表1700中的Ek)到达(例如,已排队)。拾取电路1508已经在图18E中接收到控制令牌(菱形填充的一),但是由于在拾取电路处(例如,在其队列中)没有数据令牌,所以拾取电路1508停顿。
转向图18F,图示的实施例描绘了块B2最终完成并产生了与第一代相对应的数据令牌,第一谓词合并PE 1516反映了第一代采取第一右分支,并且第二代采取第一左分支,接着是第二右分支,并且在索引中排队的针对第一拾取的输入(真令牌,然后是假令牌)将对应地路由来自右分支(第1代)接着是左分支(第2代)的数据。
在图18F中,块B2将第一代数据令牌作为输出提供给拾取电路1506的右输入。在所描绘的实施例中,谓词传播处理元件1514已经根据图16中的表1600进行操作。由于块谓词值Pb(例如,Pb3)作为第三代的真(非假)而被提供给谓词传播处理元件1514,并且控制输入Sb(例如,s3)被提供为第三代的假,对于其中Sb=假(例如,布尔零)和Pb=真(例如,布尔一)的两个输入,由谓词传播处理元件1514针对表1600所确定的结果输出为:第一边谓词值(表1600中的Ej)被输出为真,并且第二边谓词值(表1600中的Ek)被输出为假,因为在所描绘的实施例中,Ej是谓词传播处理元件1514的左输出,而Ek是其右输出,使得在所描绘的路径上,真的第三代控制令牌(填充菱形三)被输出为Ej,并且(例如,同时地)假的第三代控制令牌(空心菱形三)被输出为Ek。由于谓词合并PE 1518尚未对来自左输入的第二代控制令牌(空心菱形二)进行操作,因此左输入上的第三代控制令牌(填充菱形三)在第二代控制令牌后面排队。
另外,图18F描绘了第三代数据的第三代数据令牌(带圆圈的三)已经作为来自开关1504的输入到达拾取电路1508。
在图18F中,在先前的周期期间,真的第二代控制令牌已经到达谓词合并处理元件1516的左输入(例如,图17中的表1700中的Ej值),因此谓词合并处理元件1516现在要产生输出,因为它具有来自Ej和Ek的输入两者,例如,其中Ej源自于谓词传播处理元件1514,并且Ek源自于谓词传播处理元件1512。在所描绘的实施例中,第一谓词合并处理元件1516将根据图17中的表1700进行操作。由于对于第二代,边谓词值Ej(例如,E3,4)作为真而被提供给谓词合并处理元件1516,并且边谓词值Ek(例如,E2,4)作为假而被提供给谓词合并处理元件1516,所以对于其中Ej=真(例如,布尔一)和Ej=假(例如,布尔假)的两个输入,由谓词合并处理元件1516针对表1700所确定的结果输出为:该第一输出(例如,作为拾取电路1506的控制输入ib4)(表1700中的ib)被输出为假,并且块谓词值(例如,E4,5)(表1700中的Pb)被输出为真,使得在所描绘的路径上,假的第二代控制令牌(空心菱形二)被输出为ib,并且(例如,同时地)真的第二代控制令牌(填充菱形二)被输出为Pb。在所描绘的实施例中,由于拾取电路1506尚未使用(例如,消耗)用于第一代的控制令牌,因此将假的第二代控制令牌(空心菱形二)排在真的第一代控制令牌(填充菱形一)后面。
转向图18G,所图示的实施例描绘了第一拾取电路1506已经将第一代数据令牌传递给块B4。来自第三代的数据令牌在第二拾取电路1508上排队,但是直到来自第一和第二代的数据令牌通过才能够继续进行,再次维持正确的次序,并且在第二拾取电路1508的索引输入上排队的两个真控制值反映出期望从拾取电路1508的右分支得到两个对应的数据令牌。
在图18G中,在先前的周期期间,第一代数据令牌(带圆圈的一)已经到达拾取电路1506的真(例如,右)输入(例如,排队的输入),并且由于拾取电路1506正在排队(例如,要服务的当前控制令牌)具有真值的控制令牌(即,未决的第一代控制令牌,被描绘为填充菱形一),拾取电路1506将选择第一代数据令牌(带圆圈的一),并且将其从拾取电路1506的输出传递给例如耦合块B4。此后,被描绘为填充菱形一的未决的第一代控制令牌可能被弃用,并且要服务队中的下一个控制令牌(例如,被描绘为空心菱形二的未决的第二代控制令牌)。
在图18G中,在先前的周期期间,假的第三代控制令牌已经到达谓词合并处理元件1516的左输入(例如,图17中的表1700中的Ej值),并且因此谓词合并处理元件1516现在要产生输出,因为它具有来自Ej和Ek的输入两者,例如,其中Ej源自于谓词传播处理元件1514,并且Ek源自于谓词传播处理元件1512。在描绘的实施例中,第一谓词合并处理元件1516将根据图17中的表1700进行操作。由于对于第三代,边谓词值Ej(例如,E3,4)作为假而被提供给谓词合并处理元件1516,并且边谓词值Ek(例如,E2,4)作为假而被提供给谓词合并处理元件1516,所以对于其中Ej=假(例如,布尔零)和Ej=假(例如,布尔假)的两个输入,由谓词合并处理元件1516针对表1700所确定的结果输出为:该第一输出(例如,作为拾取电路1506的控制输入ib4)(表1700中的ib)没有输出,并且块谓词值(例如,E4,5)(表1700中的Pb)被输出为假,使得在所描绘的路径上,没有第二代控制令牌被输出为ib,并且假的第三代控制令牌(空心菱形三)被输出为Pb。
在图18G中,在先前的周期期间,假的第二代控制令牌已经到达谓词合并处理元件1518的左输入(例如,图17中的表1700中的Ej值)(例如,已从左输入排队),并且真的第二代控制令牌已经到达谓词合并处理元件1518的右输入(例如,图17中的表1700中的Ek值)(例如,已从右输入排队),因此,谓词合并处理元件1516现在将产生输出,因为它具有来自Ej和Ek的输入两者,例如,其中Ej源自于谓词传播处理元件1514,并且Ek源自于谓词合并处理元件1516。在所描绘的实施例中,第二谓词合并处理元件1518将根据图17中的表1700进行操作。由于对于第二代,边谓词值Ej(例如,E3,5)作为假而被提供给谓词合并处理元件1518,并且边谓词值Ek(例如,E4,5)作为真而被提供给谓词合并处理元件1518,所以对于其中Ej=否(例如,布尔零)和Ej=真(例如,布尔一)的两个输入,由谓词合并处理元件1518针对表1700所确定的结果输出为:该第一输出(例如,作为拾取电路1508的控制输入ib5)(表1700中的ib)被输出为真,并且块谓词值(例如,Pb)(表1700中的Pb)被输出为真,使得在所描绘的路径上,真的第二代控制令牌(填充菱形二)被输出为ib,并且(例如,同时地)真的第二代控制令牌(填充菱形二)被输出为Pb。在某些实施例中,例如在收敛点处,可以忽略Pb输出。在所描绘的实施例中,由于拾取电路1508尚未使用(例如,消耗)用于第一代的控制令牌,因此真的第二代控制令牌(填充菱形二)在真的第一代控制令牌(填充菱形一)之后排队。用于第三代的数据令牌在拾取电路1506处停顿,并且用于第二代的数据令牌在图18G中的拾取电路1508处停顿。
转向图18H,图示的实施例描述了块B4已经消耗了第一代数据并且产生了附加数据(在这里都被带圆圈的一标记为第一代数据令牌),第二代数据令牌即将进入块B4,第二preprop PE 1514已经看到所有三代控制令牌,并且已经生成了到第二拾取电路1508的三个索引输入,该索引输入为真、真、假,以指示向右、向右、向左,以按正确的次序(例如,程序次序)来获取数据的来源,即使开关1504允许数据令牌在右分支与左分支之间跨接。
在图18H中,块B4将第一代数据令牌作为输出提供给拾取电路1508的右输入。在图18H中,在先前的周期期间,真的第三代控制令牌已经到达谓词合并处理元件1518的左输入(例如,已从左输入排队)(例如,图17中的表1700中的Ej值),并且假的第三代控制令牌已经到达谓词合并处理元件1518的右输入(例如,图17中的表1700中的Ek值)(例如,从右输入排队),因此谓词合并处理元件1516现在将产生输出,因为它具有来自Ej和Ek的输入两者,例如,其中Ej源自于谓词传播处理元件1514,并且Ek源自于谓词合并处理元件1516。在所描绘的实施例中,第二谓词合并处理元件1518将根据图17中的表1700进行操作。由于对于第三代,边谓词值Ej(例如,E3,5)作为真而被提供给谓词合并处理元件1518,并且边谓词值Ek(例如,E4,5)作为假而被提供给谓词合并处理元件1518,所以对于其中Ej=真(例如,布尔一)和Ej=假(例如,布尔零)的两个输入,由谓词合并处理元件1518针对表1700所确定的结果输出为:该第一输出(例如,作为拾取电路1508的控制输入ib5)(表1700中的ib)被输出为假,并且块谓词值(例如,Pb)(表1700中的Pb)被输出为真,使得在描绘的路径上,假的第三代控制令牌(空心菱形三)被输出为ib,并且(例如,同时地)真的第三代控制令牌(填充菱形三)被输出为Pb。在某些实施例中,例如,在收敛点处,可以忽略Pb输出。在描绘的实施例中,由于拾取电路1508尚未使用(例如,消耗)用于第一代的控制令牌,因此假的第三代控制令牌在真的第二代控制令牌(填充菱形二)之后排队,该真的第二代控制令牌在真的第一代控制令牌(填充菱形一)之后排队。用于第三代的数据令牌在拾取电路1508处保持停顿,并且用于第二代的数据令牌已从图18G中的拾取电路1506发出,例如,因为未决的控制令牌是假令牌,因此源自左输入(例如,队列),那里是存储第二代数据令牌的位置。
转向图18I,所图示的实施例描绘了第二拾取电路1508已经将第一代数据令牌路由到块B5。在图18I中,第一代数据令牌(带圆圈的一)已经到达拾取电路1508的真(例如,右)输入(例如,排队输入),并且因为拾取电路1508正在排队(例如,要服务的当前控制令牌)具有真值的控制令牌(即,未决的第一代控制令牌,被描绘为填充菱形一),拾取电路1508将选择第一代数据令牌(带圆圈的一)并且将其从拾取电路1508的输出传递,例如到耦合块B5。此后,被描绘为填充菱形一的未决的第一代控制令牌可能被弃用,并且要服务队中的下一个控制令牌(例如,被描绘为空心菱形二的未决的第二代控制令牌)。
转向图18J,所图示的实施例描绘了第二代数据令牌已经由拾取电路1508路由到块B5,其中第三代数据令牌接下来被发送到块B5。在图18J中,已经发出来自拾取电路1508的真(例如,右)输入(例如,排队的输入)的第二代数据令牌(带圆圈的二),并且因为拾取电路1508正在排队(例如,要服务的当前控制令牌)具有真值的控制令牌(即,作为填充菱形二的未决的第二代控制令牌),拾取电路1508将选择第二代数据令牌(带圆圈的二),并且将其从拾取电路1508的输出传递,例如到耦合块B5。此后,被描绘为填充菱形二的未决的第二代控制令牌可能被弃用,并且要服务队中的下一个控制令牌(例如,被描绘为空心菱形三的未决的第三代控制令牌,以从拾取电路1508的左输入获取第三代数据令牌)。
下面讨论两个示例实现样式:(i)其中每个操作处理其自己的自我调度的码字样式,以及(ii)统一调度器处理调度的某些部分的灵敏度样式。
图19图示了根据本公开的实施例的用于支持谓词合并操作的处理元件的示例控制电路1901。所描绘的谓词合并电路1901将采取图20的表中所列出的两个边谓词输入(e0(或Ej)和e1(或Ek)),并且产生在那里列出的相应的两个输出(谓词结果PEDRES(或Pb)和索引(或ib))。在一个实施例中,控制电路1901被包括在PE的调度器中。控制电路1901可以用于图24中的谓词合并电路2401或图32中的谓词合并电路3201。
图20图示了根据本公开的实施例的用于支持谓词合并操作的处理元件的示例控制格式化2000。该表包括操作名称、助记符(predmerge)和其他控制值(例如,用以操纵图19中的电路)。
图21图示了根据本公开的实施例的用于支持谓词传播操作的处理元件的示例控制电路2103。描绘的谓词传播电路2103将采取在图22的表中列出的两个输入Pb和Sb,并且产生在那里列出的相应的两个输出(边为假(efalse或Ej),边为真(etrue或Ek))。在一个实施例中,控制电路2103被包括在PE的调度器中。控制电路2103可以用于图24中的谓词传播电路2403或图32中的谓词传播电路3203。
图22图示了根据本公开的实施例的用于支持谓词传播操作的处理元件的示例控制格式化2200。该表包括操作名称、助记符(predprop)和其他控制值(例如,用以操纵图21中的电路)。
图23图示了根据本公开的实施例的用于操作配置值的格式2300的示例码字样式。可以将操作配置值存储在操作配置寄存器中,例如,PE 900中的操作配置寄存器919。格式2300可以包括:操作选择字段2302,例如,其包括用以选择谓词传播模式的第一值(例如,使用真值表1600)或用以选择谓词合并模式的第二不同的值(例如,使用真值表1700);结果选择字段2304;条件入队字段2306、条件双端队列字段2308或它们中的任何一个或它们的组合。在本文的某些实施例中,PE被配置有代码字(例如,其中代码字仅摆动复用器),并且调度器判定是否将驱动入队和/或出队信号(例如,来消耗或读取令牌)。因此,某些实施例假定由op字段2302和结果(res)字段2304驱动的复用器将元数据(例如,notFull,notEmpty)提供给谓词合并电路和/或谓词传播电路(例如,包括那些的ALU)以供使用。
图24图示了根据本公开的实施例的支持谓词传播操作和谓词合并操作的处理元件的组件2400。组件可以是处理元件的部分。例如,处理元件900可以利用(例如,其ALU918)来实行根据本公开的操作,例如,以实行谓词传播操作、谓词合并操作或其他类型的操作。在谓词传播模式下,输入缓冲器2424可以接收第一谓词输入(例如,本文中的Pb),并且输入缓冲器2426可以接收第二谓词输入(例如,本文中的Sb)。在谓词合并模式下,输入缓冲器2424可以接收第一合并输入(例如,本文中的Ej),并且输入缓冲器2426可以接收第二合并输入(例如,本文中的Ek)。复用器2421和2423可以至少被用来选择操作(例如,模式)。谓词合并电路2401可以包括用以针对其中的输入而产生表1700中的输出的电路。谓词传播电路2403可以包括用以针对其中的输入而产生表1600中的输出的电路。在谓词传播模式下,输出缓冲器2434可以接收第一谓词输出(例如,本文中的Ej),并且输出缓冲器2436可以接收第二谓词输出(例如,本文中的Ek)。在谓词合并模式下,输出缓冲器2434可以接收第一合并输出(例如,本文中的ib),并且输出缓冲器2436可以接收第二合并输出(例如,本文中的Pb)。复用器(解复用器)2441可以至少被用来从操作(例如,针对模式)中获取数据。输入队列2424可以是图9中的输入缓冲器924。输入队列2426可以是图9中的输入缓冲器926。输出队列2434可以是图9中的输出缓冲器934。输出队列2436可以是图9中的输出缓冲器936。复用器2421可以是图9中的复用器921。复用器2423可以是图9中的复用器923。组件可以用于处理元件的码字样式。网络可以是本文中所讨论的任何网络,例如,电路交换网络。
图25图示了根据本公开的实施例的用于谓词合并操作配置值的格式2500的示例码字样式。格式为2500的操作配置数据可以存储在操作配置寄存器中,例如,操作配置寄存器919。Oppredmerge字段2502包含以下字段,该字段存储(一个或多个)值以摆动结果(resselect)和操作(op select)复用器和/或摆动条件出队(cond deq)和条件入队(cond enq)复用器(例如,参见图24和图26)。Indexsel字段2504可以存储被用来引导数据以校正输出的值。Insel字段2506可以存储被用来引导来自正确输入的数据的值。
图26图示了根据本公开的实施例的用于支持与图24的处理元件的组件的谓词合并操作的处理元件的示例控制电路2600。所利用的值(输入和输出)可以是根据图20和图24-25的。调度器可以包括控制电路2600。或门、与门和复用器(muxes)在本文中以典型符号描绘。非门被描绘为粗体圆圈。对复用器侧面的输入是控制输入(用以输入或输出输入/输出数据)。
图27图示了根据本公开的实施例的用于谓词传播操作配置值的格式2500的示例码字样式。格式为2700的操作配置数据可以存储在操作配置寄存器中,例如,操作配置寄存器919。Oppredprop字段2702包含以下字段,该字段存储(一个或多个)值以摆动结果(resselect)和操作(op select)复用器和/或摆动条件出队(cond deq)和条件入队(cond enq)复用器(例如,参见图24和28)。SBsel字段2704可以存储被用来引导数据以校正输出的值。Esel字段2706可以存储被用来引导来自正确输入的数据的值。
图28图示了根据本公开的实施例的用于支持与图24的处理元件的组件的谓词传播操作的处理元件的示例控制电路2800。所利用的值(输入和输出)可以是根据图22、24和27的。调度器可以包括控制电路2800。或门、与门和复用器(muxes)在本文中以典型符号描绘。非门被描绘为粗体圆圈。对复用器侧面的输入是控制输入(用以输入或输出输入/输出数据)。
图29图示了根据本公开的实施例的用于操作配置值的格式2900的示例灵敏度样式。可以将操作配置值存储在操作配置寄存器中,例如,PE 900中的操作配置寄存器919。格式2900可以包括输出字段2902、输入字段2904、操作选择字段2906,例如,其包括第一值以选择谓词传播模式(例如,使用真值表1600)或第二不同的值以选择谓词合并模式(例如,使用真值表1700)或它们中的任何一个或它们的组合。在某些实施例中,PE被配置有代码字,该代码字包括描述何时可以执行操作的多个灵敏度集合(A,B,…)。在某些实施例中,灵敏度集合指示被用来设置调度器灵敏度和摆动复用器的输出和输入队列,和/或指示基于谓词输入的条件执行。例如,灵敏度样式PE可以在predprop操作中使用,以允许在pb为0且sb不可用时执行。操作选择字段2906可以选择每个PE要以一个操作码执行的操作(例如,predmerge或predprop)。
图30图示了根据本公开的实施例的支持谓词传播操作和谓词合并操作的处理元件的调度器电路3000。在一个实施例中,每个操作都标注有其要执行的要求(例如,其所需的输入、输出、控制令牌),并且这将当前PE状态与这些配置要求进行比较,使得如果满足所有要求,则该配置是可执行的,并且将执行(例如,在下一个周期中)。
图31图示了根据本公开的实施例的用于处理元件的操作配置值的格式的灵敏度样式的调度器电路3100,该处理元件支持谓词传播操作和谓词合并操作。在一个实施例中,调度器将在每个循环的“可执行”灵敏度当中选取一个操作,并且该操作驱动PE控制(例如,将使哪些输入队列出队)。
图32图示了根据本公开的实施例的支持谓词传播操作和谓词合并操作的处理元件的组件3200。组件可以是处理元件的部分。例如,处理元件900可以利用(例如,其ALU918)来实行根据本公开的操作,例如,以实行谓词传播操作、谓词合并操作或其他类型的操作。在谓词传播模式中,输入缓冲器3224可以接收第一谓词输入(例如,本文中的Pb),并且输入缓冲器3226可以接收第二谓词输入(例如,本文中的Sb)。在谓词合并模式下,输入缓冲器3224可以接收第一合并输入(例如,本文中的Ej),并且输入缓冲器3226可以接收第二合并输入(例如,本文中的Ek)。复用器3221和3223可以至少被用来选择操作(例如,模式)。谓词合并电路3201可以包括用以针对其中的输入而产生表1700中的输出的电路。谓词传播电路3203可以包括用以针对其中的输入而产生表1600中的输出的电路。在谓词传播模式下,输出缓冲器3234可以接收第一谓词输出(例如,本文中的Ej),并且输出缓冲器3236可以接收第二谓词输出(例如,本文中的Ek)。在谓词合并模式下,输出缓冲器3234可以接收第一合并输出(例如,本文中的ib),并且输出缓冲器3236可以接收第二合并输出(例如,本文中的Pb)。复用器(解复用器)3241可以至少被用来从操作(例如,用于模式)获取数据。输入队列3224可以是图9中的输入缓冲器924。输入队列3226可以是图9中的输入缓冲器926。输出队列3234可以是图9中的输出缓冲器934。输出队列3236可以是图9中的输出缓冲器936。复用器3221可以是图9中的复用器921。复用器3223可以是图9中的复用器923。组件可以被用于处理元件的灵敏度样式。网络可以是本文中所讨论的任何网络,例如,电路交换网络。请注意此处来自调度器的其他输入值,例如,与图24中的组件相比。
图33图示了根据本公开的实施例的用于谓词合并操作配置值的格式3300的示例灵敏度样式。格式为3300的操作配置数据可以存储在操作配置寄存器中,例如,操作配置寄存器919。Oppredmerge字段3306包含以下字段,其存储(一个或多个)值以摆动结果(resselect)复用器和/或摆动条件出队(cond deq)复用器(例如,参见图32和34)。Indexsel字段3308可以存储被用来操纵数据以校正输出的值。输入敏感字段3302可以存储被用来将数据操纵到正确输出的值。输出敏感字段3304可以存储被用来操纵来自正确输入的数据的值。在某些实现方式中,Oppredmerge字段3306可以包括用以操纵pedres和索引的值。在一个实施例中,字段3302指示所选择的输入操作应该是被用于predmerge操作的那些输入操作。这可能包括灵敏度、复用器摆动(控制值)和控制令牌的极性。在一个实施例中,字段3304指示应选择哪些输出。这可能包括灵敏度和复用器摆动(控制值)。在一个实施例中,第一输入字段和第一输出字段是协调的,并且可以被称为条件集。在一个实施例中,字段3306选择操作码,例如,以摆动输出复用器以选择predmerge控制电路。在一个实施例中,predmerge操作有条件地写入其输出,因此条件入队复用器将被摆动。在一个实施例中,字段3308(indexSel)将pregmerge结果操纵为适当的输出。
图34图示了根据本公开的实施例的用于支持与图32的处理元件的组件的谓词合并操作的处理元件的示例控制电路3400。所利用的值(输入和输出)可以是根据图20和图32-33的。调度器可以包括控制电路3400。或门、与门和复用器(muxes)在本文中以典型符号描绘。对复用器侧面的输入是控制输入(用以输入或输出输入/输出数据)。
图35图示了根据本公开实施例的用于谓词传播操作配置值的格式3500的示例灵敏度样式。格式为3500的操作配置数据可以存储在操作配置寄存器中,例如,操作配置寄存器919。Oppredprop字段3506包含以下字段,该字段存储(一个或多个)值以摆动结果(resselect)复用器和/或摆动条件出队(cond deq)复用器(例如,参见图32和34)。输入敏感字段3502可以存储被用来操纵来自正确输入的数据的值。输出敏感字段3504可以存储被用来操纵来自正确输入的数据的值。Oppredprop字段3506可以包括用以引导efalse(例如,输出Ej)和etrue(例如,输出Ek)的值。在一个实施例中,字段3502指示所选择的输入操作应该是被用于predprop操作的那些输入操作。这可能包括灵敏度、复用器摆动(控制)和控制令牌的极性。在一个实施例中,基于输入灵敏度,predprop具有不同的动作,因此使用两个输入字段。在一个实施例中,predprop操作有条件地消耗其输入,并且这将被编码在输入灵敏度字段3502中。在一个实施例中,字段3504指示应选择哪些输出。这可能包括灵敏度和复用器摆动(控制)。在一个实施例中,第一输入字段和第一输出字段是协调的,并且可以被称为条件集。在一个实施例中,字段3506(OpPredprop)摆动输出复用器。
图36图示了根据本公开的实施例的用于支持与图32的处理元件的组件的谓词传播操作的处理元件的示例控制电路3600。所利用的值(输入和输出)可以是根据图22、32和35的。调度器可以包括控制电路3400。或门、与门和复用器(muxes)在本文中以典型符号描绘。非门被描绘为粗体圆圈。对复用器侧面的输入是控制输入(用以输入或输出输入/输出数据)。
图37图示了根据本公开的实施例的流程图3700。描绘的流程3700包括:在开关电路的开关控制输入上,接收第一开关控制值,以将开关电路的输入耦合到数据路径的第一分支,或接收第二开关控制值,以将开关电路的输入耦合到数据路径的第二分支,该数据路径包括至少一个处理元件3702;在拾取电路的拾取控制输入上,接收第一拾取控制值,以将拾取电路的输出耦合到数据路径的第一分支,以及接收第二拾取控制值,以将拾取电路的输出耦合到数据路径的第三分支3704;由谓词传播处理元件基于来自开关电路的开关控制输入的开关控制值和第一块谓词值两者,同时地输出第一边谓词值和第二边谓词值3706;并且由谓词合并处理元件基于第三边谓词值和第一边谓词值或第二边谓词值之一这两者,将拾取控制值同时地输出到拾取电路的拾取控制输入和第二块谓词值3708。
2.6实行(例如,数据流)操作的网络资源,例如,电路
在某些实施例中,处理元件(PE)使用专用虚拟电路进行通信,该专用虚拟电路通过静态地配置(例如,电路交换)通信网络而形成。这些虚拟电路可以被流控制并且是完全反压的,例如,使得在源没有数据或目的地满了的情况下,PE将停顿。在运行时,数据可以流经实现所映射的数据流图(例如,所映射的算法)的PE。例如,数据可以通过处理元件的空间阵列(例如,其结构面积)从存储器流入,然后往回流出到存储器。
相对于传统的多核处理器,这样的架构可以实现显著的性能效率:例如,以PE形式进行的计算可能比核心更简单且数量更多,并且通信可以是直接的,例如,与存储系统的扩展相反。然而,可以调谐处理元件的空间阵列(例如,其结构面积)以实现编译器生成的表达式树,该表达式树的特征在于很少的复用或解复用。本文中的某些实施例扩展(例如,经由网络资源,诸如但不限于网络数据流端点电路)该架构以支持(例如,高基数)复用和/或解复用,例如,尤其是在函数调用的情境中。
空间阵列(诸如图1中的处理元件101的空间阵列)可以使用(例如,分组交换)网络进行通信。本文中的某些实施例提供了用以在这些网络上覆盖高基数数据流操作以进行通信的电路。例如,本文中的某些实施例利用现有网络进行通信(例如,参照图1所描述的互连网络104),以在空间阵列的处理元件与其他组件之间提供数据路由能力,而且还增大了网络(例如,网络端点)以支持某些(例如,少于全部)数据流操作的性能和/或控制(例如,而不利用处理元件来实行那些数据流操作)。在一个实施例中,(例如,高基数)数据流操作由空间阵列内的特殊硬件结构(例如,网络数据流端点电路)来支持,例如,而不消耗处理资源或降低(例如,处理元件的)性能。
在一个实施例中,在两个点之间(例如,在数据的产生者与消费者之间)的电路交换网络包括在这两个点之间的专用通信线路,例如,其中在两个点之间设置了(例如,物理的)开关以在两个点之间创建(例如,排他的)物理电路。在一个实施例中,在使用两个点之间的连接的开始时建立了两个点之间的电路交换网络,并且在整个连接的使用期间维持该电路交换网络。在另一个实施例中,分组交换网络包括:两个(例如,或更多个)点之间的共享通信线路(例如,通道),例如其中,来自不同连接的分组共享该通信线路(例如,根据每个分组的数据进行路由,例如,在包括报头和有效载荷的分组的报头中)。下面例如参考夹层网络来讨论分组交换网络的示例。
图38图示了根据本公开实施例的伪代码函数调用3801的数据流图3800。函数调用3801将加载两个输入数据操作数(例如,分别由指针*a和*b指示),并将它们相乘,然后返回结果数据。此函数或其他函数可以实行多次(例如,在数据流图中)。图38中的数据流图图示了PickAny数据流操作符3802,以实行以下操作,该操作为选择控制数据(例如,索引)(例如,从调用站点3802A选择),并且利用控制数据(例如,索引)的复制数据流操作符3804复制到第一Pick数据流操作符3806、第二Pick数据流操作符3806和Switch数据流操作符3816中的每一个。在一个实施例中,索引(例如,来自PickAny的索引)因此将数据输入和输出到同一索引方位,例如,方位[0,1...M],其中M是整数。然后,第一Pick数据流操作符3806可以根据控制数据拉取多个输入数据元素3806A中的一个输入数据元素,并且使用该一个输入数据元素作为(*a),然后利用加载数据流操作符3810来加载存储在*a处的输入数据值。然后,第二Pick数据流操作符3808可以根据控制数据来拉取多个输入数据元素3808A中的一个输入数据元素,并且使用一个输入数据元素作为(*b),然后利用加载数据流操作符3812来加载存储在*b处的输入数据值。然后可以通过乘法数据流操作符3814(例如,作为处理元件的一部分)将这两个输入数据值相乘。然后,例如,根据对Switch数据流操作符3816的控制数据(例如,索引),由Switch数据流操作符3816将乘法的结果数据路由(例如,到下游处理元件或其他组件),例如,路由到调用站点3816A。
图38是函数调用的示例,其中被用来管理对数据(例如,令牌)的操纵的数据流操作符的数量可能很大,例如,用以将数据引导到调用站点和/或从调用站点引导数据。在一个示例中,例如,当存在多个(例如,许多)调用站点时,可以利用PickAny数据流操作符3802、第一Pcik数据流操作符3806、第二Pick数据流操作符3806和Switch数据流操作符3816中的一个或多个来路由(例如,引导)数据。在其中引入复用和/或解复用的函数调用的(例如,主要)目标是要减少特定数据流图的实现面积的实施例中,本文中(例如,微架构)的某些实施例减少了对数据流图(例如,数据流图的部分)的这种复用和/或解复用的面积开销。
图39图示了根据本公开的实施例的具有多个网络数据流端点电路(3902、3904、3906)的处理元件(PE)的空间阵列3901。例如,处理元件的空间阵列3901可以包括在组件之间中的通信(例如,互连)网络,如本文中讨论的。在一个实施例中,通信网络是一个或多个分组交换通信网络(例如,分组交换通信网络的通道)。在一个实施例中,通信网络是一个或多个电路交换、静态地配置的通信通道。例如,一组通道通过开关(例如,第一网络中的开关3910和第二网络中的开关3911)耦合在一起。第一网络和第二网络可以是单独的或耦合在一起的。例如,开关3910可以将其中的多个(例如,四个)数据路径中的一个或多个耦合在一起,例如,像被配置成根据数据流图实行操作一样。在一个实施例中,数据路径的数量是任何多个。处理元件(例如,处理元件3908)可以如本文中所公开的那样,例如,如在图9中一样。加速器块片3900包括存储器/高速缓存层次结构接口3912,例如,以使加速器块片3900与存储器和/或高速缓存对接。数据路径可以延伸到另一块片或者例如在块片的边缘处终止。处理元件可以包括输入缓冲器(例如,缓冲器3909)和输出缓冲器。
操作可以基于其输入的可用性和PE的状态被执行。PE可以从输入通道获得操作数并且将结果写入到输出通道,但是也可以使用内部寄存器状态。本文中的某些实施例包括可配置数据流友好的PE。图9示出了一个这种PE(整数PE)的详细框图。此PE由若干I/O缓冲器、ALU、存储寄存器、一些指令寄存器和调度器构成。每个周期,调度器可以基于输入和输出缓冲器的可用性以及PE的状态选择用于执行的指令。操作的结果然后可以被写入到输出缓冲器或者到(例如,PE本地的)寄存器。写入到输出缓冲器的数据可以被传输到下游PE以用于进一步处理。这种样式的PE可以是极其高能效的,例如,不是从复杂的多端口寄存器堆读取数据,而是PE从寄存器读取数据。类似地,指令可以被直接地存储在寄存器中,而不是存储在虚拟化指令高速缓存中。
可以在特殊配置步骤期间设置指令寄存器。在此步骤期间,除了PE间网络之外的辅助控制线和状态可以被用来按照配置跨越包括结构的若干PE流式传输。作为并行性的结果,这种网络的某些实施例可以提供快速重配置,例如,可以在不到大约10微秒内配置块片大小的结构。
此外,所描绘的加速器块片3900包括分组交换通信网络3914,例如,作为夹层网络的部分,例如,如下所述。本文中的某些实施例允许(例如,分布式的)数据流操作(例如,仅路由数据的操作)在通信网络上(例如,在其内部)实行(例如,并且不在(一个或多个)处理元件中)。作为示例,图39中描绘了数据流图的分布式Pick数据流操作。特别地,使用三个单独的网络(例如,全局)端点(例如,网络数据流端点电路(3902、3904、3906))上的三个单独的配置来实现分布式拾取。数据流操作可以被分布,例如,其中几个端点要以协调方式进行配置。例如,编译工具可能理解协调的需求。端点(例如,网络数据流端点电路)可以在几个分布式操作当中共享,例如,数据流操作(例如,拾取)端点可以与关于数据流操作(例如,拾取)的多个发送进行核对。分布式数据流操作(例如,拾取)可以生成与非分布式数据流操作(例如,拾取)相同的结果。在某些实施例中,分布式与非分布式数据流操作之间的区别在于,在分布式数据流操作中,它们的数据(例如,要路由的数据,但可能不包括控制数据)在分组交换通信网络上,例如,具有相关的流量控制和分布式协调。尽管示出了不同大小的处理元件(PE),但是在一个实施例中,每个处理元件具有相同的大小(例如,硅面积)。在一个实施例中,也可以包括例如与处理元件分离的用于缓冲数据的缓冲元件。
作为一个示例,拾取数据流操作可以具有多个输入,并且引导(例如,路由)其中的一个作为输出,例如,如在图38中那样。代替利用处理元件来实行拾取数据流操作,可以利用一个或多个网络通信资源(例如,网络数据流端点电路)来实现。附加地或替换地,网络数据流端点电路可以在处理元件之间路由数据,例如,以供处理元件对数据实行处理操作。因此,本文中的实施例可以利用通信网络来实行(例如,引导)数据流操作。附加地或替换地,网络数据流端点电路可以作为下面所讨论的夹层网络来实行。
在描绘的实施例中,分组交换通信网络3914可以处理某些(例如,配置)通信,例如,以对处理元件和/或电路交换网络(例如,网络3913,其可以包括开关)进行编程。在一个实施例中,电路交换网络被配置(例如,编程)以实行一个或多个操作(例如,数据流图的数据流操作)。
分组交换通信网络3914包括多个端点(例如,网络数据流端点电路(3902、3904、3906)。在一个实施例中,每个端点包括地址或其他指示符值,以允许例如根据数据分组(例如,其报头)将数据路由到该端点和/或从该端点路由数据。
附加地或替换地,为了实行上述内容中的一项或多项,分组交换通信网络3914可以实行数据流操作。网络数据流端点电路(3902,3904,3906)可以被配置(例如,编程)为实行数据流图的(例如,分布式拾取)操作。本文中描述了组件(例如,电路)的编程。参考图40来讨论配置网络数据流端点电路(例如,其操作配置寄存器)的实施例。
作为分布式拾取数据流操作的示例,图39中的网络数据流端点电路(3902,3904,3906)可以被配置(例如,编程)为实行数据流图的分布式拾取操作。参考图40来讨论配置网络数据流端点电路(例如,其操作配置寄存器)的实施例。附加地或替换地,为了配置远程端点电路,还可以根据本公开来配置本地端点电路。
网络数据流端点电路3902可以被配置成从多个源(例如,网络数据流端点电路3904和网络数据流端点电路3906)接收输入数据,并且被配置成例如根据控制数据来输出结果数据,例如,如在图38中那样。网络数据流端点电路3904可以被配置成在接收到来自处理元件3922的输入数据时,将输入数据提供(例如,发送)到网络数据流端点电路3902。这可以在图39中被称为Input 0。在一个实施例中,电路交换网络被配置(例如,编程)为沿路径3924提供处理元件3922与网络数据流端点电路3904之间的专用通信线路。网络数据流端点电路3906可以被配置成例如在接收到来自处理元件3920的输入数据时,将输入数据提供(例如,发送)到网络数据流端点电路3902。这可以在图39中被称为Input 1。在一个实施例中,电路交换网络被配置(例如,编程)为沿路径3916提供处理元件3920与网络数据流端点电路3906之间的专用通信线路。
当网络数据流端点电路3904要将输入数据传输到网络数据流端点电路3902时(例如,当网络数据流端点电路3902具有用于数据的可用存储空间,和/或网络数据流端点电路3904具有其输入数据时),网络数据流端点电路3904可以生成分组(例如,包括输入数据和报头,以将该数据引导到分组交换通信网络3914上的网络数据流端点电路3902(例如,作为该(例如,环形)网络3914上的站点)。这在图39中用虚线3926示意性地图示。尽管图39所示的示例利用了两个源(例如,两个输入),但是可以利用单个或任何多个(例如,大于两个)源(例如,输入)。
当网络数据流端点电路3906要将输入数据传输到网络数据流端点电路3902时(例如,当网络数据流端点电路3902具有用于数据的可用存储空间,和/或网络数据流端点电路3906具有其输入数据时),网络数据流端点电路3904可以生成分组(例如,包括输入数据和报头,以将该数据引导到分组交换通信网络3914上的网络数据流端点电路3902(例如,作为该(例如,环形)网络3914上的站点)。这在图39中用虚线3918示意性地图示。尽管示出了网状网络,但是可以使用其他网络拓扑。
网络数据流端点电路3902(例如,在接收到来自网络数据流端点电路3904的Input0、来自网络数据流端点电路3906的Input 1、和/或控制数据时)可以然后实行编程的数据流操作(例如,在此示例中为Pick操作)。然后,网络数据流端点电路3902可以将来自该操作的相应结果数据输出到例如图39中的处理元件3908。在一个实施例中,电路交换网络被配置(例如,编程)为沿着路径3928提供处理元件3908(例如,其缓冲器)与网络数据流端点电路3902之间的专用通信线路。下面参考图52-54来讨论分布式Pick操作的另外的示例。
在一个实施例中,用以实行操作(例如,拾取操作)的控制数据来自空间阵列的其他组件(例如,处理元件)或通过网络。下文中参考图40讨论了这一点的示例。注意的是,Pick操作符在端点3902中示意性地示出,并且可能不是复用器电路,例如,参见下面对图40中的网络数据流端点电路4000的讨论。
在某些实施例中,数据流图可以具有由处理元件实行的某些操作和由通信网络(例如,一个或多个网络数据流端点电路)实行的某些操作。
图40图示了根据本公开的实施例的网络数据流端点电路4000。尽管在网络数据流端点电路4000中图示了多个组件,但是可以在单个网络数据流端点电路中利用每个组件的一个或多个实例。网络数据流端点电路的实施例可以包括图40中的任何(例如,不是全部)组件。
图40描绘了(例如,夹层)网络接口的微架构,其示出了主数据(实线)和控制数据(虚线)路径的实施例。该微架构提供了配置存储装置和调度器,以使得能够实现(例如,高基数)数据流操作符。本文中的某些实施例包括到调度器的数据路径,以使得能够实现支路选择和描述。图40示出了网络(例如,夹层)端点(例如,站点)的高级微架构,该端点对于上下文可以是环形网络的成员。为了支持(例如,高基数)数据流操作,端点的配置(例如,操作配置存储装置4026)要包括检查多个网络(例如,虚拟)通道(例如,与基线实现方式中的单个虚拟通道相反)的配置。网络数据流端点电路4000的某些实施例包括:从入口到出口的数据路径,以控制选择(例如,操作的拾取和开关类型),和/或以描述在PickAny数据流操作符或SwitchAny数据流操作符的情况下由调度器做出的选择。可以在每个通信通道中,例如,在(例如,分组交换通信)网络和(例如,电路交换)网络(例如,处理元件的空间阵列的结构)中利用流量控制和反压行为。
作为对微架构的实施例的一种描述,拾取数据流操作符可以起作用以例如基于控制数据从输入数据的多个输入中拾取结果数据的一个输出。网络数据流端点电路4000可以被配置成将电路4000的(一个或多个)空间阵列入口缓冲器4002之一(例如,来自结构的数据是控制数据)视为在存储在电路4000的(一个或多个)网络入口缓冲器4024中的多个输入数据元素当中进行选择,以将结果数据引导到电路4000的空间阵列出口缓冲器4008。因此,(一个或多个)网络入口缓冲器4024可以被认为是虚拟复用器的输入,空间阵列入口缓冲器4002是复用器选择,并且空间阵列出口缓冲器4008是复用器输出。在一个实施例中,当(例如,控制数据)值被检测到,和/或到达空间阵列入口缓冲器4002中时,调度器4028(例如,如由存储装置4026中的操作配置所编程的)敏感地检查对应的网络入口通道。当数据在该通道中可用时,将其从网络入口缓冲器4024中去除,并且将其移动到空间阵列出口缓冲器4008。然后可以更新入口和出口两者的控制位,以反映数据的传递。这可能导致控制流令牌或信用(credit)在相关联的网络中传播。在某些实施例中,所有输入(例如,控制或数据)可以在本地或通过网络出现。
最初,似乎使用分组交换网络来实现复用和/或解复用代码的(例如,高基数分段)操作符会影响性能。例如,在一个实施例中,通常共享分组交换网络,并且主叫方和被叫方数据流图可以彼此远离。然而,回想一下,在某些实施例中,支持复用和/或解复用的意图是要减小数据流操作符内不频繁的代码路径(例如,空间阵列)所消耗的面积。因此,本文中的某些实施例减小了面积并且避免消耗更昂贵的结构资源(例如,像PE一样),例如,而不会(实质上)影响个体PE的面积和效率以支持那些(例如,不频繁的)操作。
现在转向图40另外的细节,所描绘的网络数据流端点电路4000包括空间阵列(例如,结构)入口缓冲器4002,例如,以从(例如,电路交换)网络输入数据(例如,控制数据)。如上所述,尽管描绘了单个空间阵列(例如,结构)入口缓冲器4002,但是多个空间阵列(例如,结构)入口缓冲器可以在网络数据流端点电路中。在一个实施例中,空间阵列(例如,结构)入口缓冲器4002要例如从网络4004和网络4006中的一个或多个接收来自空间阵列(例如,处理元件的空间阵列)的通信网络的数据(例如,控制数据)。在一个实施例中,网络4004是图39中的网络3913的部分。
所描绘的网络数据流端点电路4000包括:空间阵列(例如,结构)出口缓冲器4008,例如,以将数据(例如,控制数据)输出到(例如,电路交换)网络。如上所述,尽管描绘了单个空间阵列(例如,结构)出口缓冲器4008,但是多个空间阵列(例如,结构)出口缓冲器可以在网络数据流端点电路中。在一个实施例中,空间阵列(例如,结构)出口缓冲器4008要将数据(例如,控制数据)发送(例如,传输)到空间阵列(例如,处理元件的空间阵列)的通信网络上,例如发送到网络4010和网络4012中的一个或多个上。在一个实施例中,网络4010是图39中的网络3913的部分。
附加地或替换地,网络数据流端点电路4000可以耦合到另一网络4014,例如,分组交换网络。另一网络4014(例如,分组交换网络)可以被用来将(例如,输入和/或结果)数据传输(例如,发送或从其接收)到空间阵列的处理元件或其他组件,和/或传输输入数据或结果数据中的一个或多个。在一个实施例中,网络4014是图39中的分组交换通信网络3914的部分,例如,时分复用网络。
网络缓冲器4018(例如,(一个或多个)寄存器)可以是(例如,环形)网络4014上的站点,例如以从网络4014接收数据。
所描绘的网络数据流端点电路4000包括:网络出口缓冲器4022,例如以将数据(例如,结果数据)输出到(例如,分组交换)网络。如上所述,尽管描绘了单个网络出口缓冲器4022,但是多个网络出口缓冲器可以在网络数据流端点电路中。在一个实施例中,网络出口缓冲器4022要将数据(例如,结果数据)发送(例如,传输)到空间阵列(例如,处理元件的空间阵列)的通信网络上,例如,发送到网络4014上。在一个实施例中,网络4014是图39中的分组交换网络3914的部分。在某些实施例中,网络出口缓冲器4022要将数据(例如,从空间阵列入口缓冲器4002)输出到(例如,分组交换)网络4014,例如,以被路由(例如,引导)到其他组件(例如,(一个或多个)其他网络数据流端点电路)。
描绘的网络数据流端点电路4000包括:网络入口缓冲器4022,例如,以从(例如,分组交换)网络输入数据(例如,所输入的数据)。如上所述,尽管描绘了单个网络入口缓冲器4024,但是多个网络入口缓冲器可以在网络数据流端点电路中。在一个实施例中,网络入口缓冲器4024要例如从网络4014接收(例如,传输)来自空间阵列(例如,处理元件的空间阵列)的通信网络的数据(例如,输入数据)。在一个实施例中,网络4014是图39中的分组交换网络3914的部分。在某些实施例中,网络入口缓冲器4024要从(例如,分组交换)网络4014输入数据(例如,来自空间阵列入口缓冲器4002的数据),例如,以从其他组件(例如,(一个或多个)其他网络数据流端点电路)被路由(例如,引导)在那里(例如,引导到空间阵列出口缓冲器4008)。
在一个实施例中,数据格式(例如,网络4014上的数据的格式)包括:具有数据和报头(例如,具有该数据的目的地)的分组。在一个实施例中,数据格式(例如,网络4004和/或4006上的数据的格式)仅包括数据(例如,不是具有数据和报头(例如,具有该数据的目的地)的分组)。网络数据流端点电路4000可以向分组添加报头(或其他数据)(例如,从电路4000输出的数据),或从分组中去除报头(例如,输入到电路4000中的数据)。耦合4020(例如,线)可以将从网络4014(例如,从网络缓冲器4018)接收到的数据发送到网络入口缓冲器4024和/或复用器4016。复用器4016可以(例如,经由来自调度器4028的控制信号)从网络缓冲器4018或从网络出口缓冲器4022输出数据。在一个实施例中,复用器4016或网络缓冲器4018中的一个或多个是与网络数据流端点电路4000分离的组件。缓冲器可以包括多个(例如,分立的)条目,例如,多个寄存器。
在一个实施例中,操作配置存储装置4026(例如,一个或多个寄存器)在配置(例如,映射)期间被加载,并且指定该网络数据流端点电路4000(例如,不是空间阵列的处理元件)要实行的特定操作(或多个操作)(例如,与逻辑和/或算术运算相反的数据引导操作)。(一个或多个)缓冲器(例如,4002、4008、4022和/或4024)的活动可以通过该操作来控制(例如,通过调度器4028来控制)。调度器4028可以例如在(例如,所有)输入(例如,有效载荷)数据和/或控制数据到达时调度网络数据流端点电路4000的一个或多个操作。往返于调度器4028的虚线指示可以被用于控制数据的路径,例如,往返于调度器4028的路径。调度器还可以控制复用器4016,例如,以将数据引导到网络数据流端点电路4000和网络4014和/或从网络数据流端点电路4000和网络4014引导数据。
参考上面图39中的分布式拾取操作,网络数据流端点电路3902可以被配置成(例如,作为其如图40中的操作配置寄存器4026中的操作)例如根据控制数据(例如,在其如在图40中的空间阵列入口缓冲器4002中),接收(例如,在其如在图40中的网络入口缓冲器4024中(的两个存储位置中))来自网络数据流端点电路3904和网络数据流端点电路3906中的每一个的输入数据,并且输出结果数据(例如,来自其如在图40中的空间阵列出口缓冲器4008)。网络数据流端点电路3904可以被配置成(例如,如在其如在图40中的操作配置寄存器4026中的操作)例如,在接收到来自处理元件3922的输入数据时(例如,在如在图40中的电路3904的空间阵列入口缓冲器4002中),将输入数据提供(例如,经由如在图40中的电路3904的网络出口缓冲器4022发送)给网络数据流端点电路3902。这可以在图39中被称为Input 0。在一个实施例中,电路交换网络被配置(例如,编程)为沿着路径3924提供处理元件3922与网络数据流端点电路3904之间的专用通信线路。网络数据流端点电路3904可以包括(例如,添加)具有接收到的数据的报头分组(例如,在其如在图40中的网络出口缓冲器4022),以将分组(例如,输入数据)引导到网络数据流端点电路3902。网络数据流端点电路3906可以被配置成(例如,作为在其如在图40中的操作配置寄存器4026中的操作)例如,在接收到来自处理元件3920的输入数据时(例如,在如图40中的电路3906的空间阵列入口缓冲器4002中),将输入数据提供(例如,经由如在图40中的电路3906的网络出口缓冲器4022发送)给网络数据流端点电路3902。这可以在图39中被称为Input 1。在一个实施例中,电路交换网络被配置(例如,编程)为沿着路径3916提供处理元件3920与网络数据流端点电路3906之间的专用通信线路。网络数据流端点电路3906可以包括(例如,添加)具有接收到的数据的报头分组(例如,在其如在图40中的网络出口缓冲器4022),以将分组(例如,输入数据)引导到网络数据流端点电路3902。
当网络数据流端点电路3904要将输入数据传输到网络数据流端点电路3902时(例如,当网络数据流端点电路3902具有用于数据的可用存储空间,和/或网络数据流端点电路3904具有其输入数据时),网络数据流端点电路3904可以生成分组(例如,包括输入数据和报头,以将该数据引导到分组交换通信网络3914上的网络数据流端点电路3902(例如,作为该(例如,环形)网络上的站点)。这在图39中用虚线3926示意性地图示。网络3914在图39中用多个虚线框示意性地示出。网络3914可以包括网络控制器3914A,例如,以管理网络3914A上的数据的入口和/或出口。
当网络数据流端点电路3906要将输入数据传输到网络数据流端点电路3902时(例如,当网络数据流端点电路3902具有用于数据的可用存储空间,和/或网络数据流端点电路3906具有其输入数据时),网络数据流端点电路3904可以生成分组(例如,包括输入数据和报头,以将该数据引导到分组交换通信网络3914上的网络数据流电路3902(例如,作为该(例如,环形)网络上的站点)。这在图39中用虚线3918示意性地图示。
数据流端点电路3902(例如,在电路3902的(一个或多个)网络入口缓冲器中接收到来自网络数据流端点电路3904的Input 0时,在电路3902的(一个或多个)网络入口缓冲器中接收到来自网络数据流端点电路3906的Input 1时,和/或在电路3902的空间阵列入口缓冲器中接收到来自处理元件3908的控制数据时)然后可以实行经编程的数据流操作(例如,在该示例中为Pick操作)。然后,网络数据流端点电路3902可以将来自该操作的相应结果数据输出到例如图39中的处理元件3908。在一个实施例中,电路交换网络被配置(例如,编程)为沿着路径3928提供处理元件3908(例如,其缓冲器)与网络数据流端点电路3902之间的专用通信线路。下面参考图52-54来讨论分布式Pick操作的另外的示例。图39中的缓冲器可以是每个PE中未标记的小框。
下面的图41-8包括示例数据格式,但是可以利用其他数据格式。一个或多个字段可以以数据格式(例如,在分组中)被包括。数据格式可以由网络数据流端点电路使用,例如,以在第一组件之间(例如,在第一网络数据流端点电路与第二网络数据流端点电路之间、空间阵列的组件等)传输(例如,发送和/或接收)数据。
图41图示了根据本公开的实施例的用于发送操作4102和接收操作4104的数据格式。在一个实施例中,发送操作4102和接收操作4104是在分组交换通信网络上传输的数据的数据格式。所描绘的发送操作4102数据格式包括:目的地字段4102A(例如,指示要将数据发送到网络中的哪个组件)、通道字段4102B(例如,指示将在其上发送数据的网络上的哪个通道)以及输入字段4102C(例如,要发送的有效载荷或输入数据)。描绘的接收操作4104包括:输出字段,例如,其还可以包括目的地字段(未描绘)。可以使用这些数据格式(例如,用于(一个或多个)分组)来处理将数据移入和移出组件的过程。这些配置可以是可分离的和/或可以并行发生。这些配置可能使用单独的资源。术语“通道”通常可以指代与请求相关联的通信资源(例如,在管理硬件中)。配置和队列管理硬件的关联可能是明确的。
图42图示了根据本公开的实施例的用于发送操作4202的另一种数据格式。在一个实施例中,发送操作4202是在分组交换通信网络上传输的数据的数据格式。所描绘的发送操作4202数据格式包括:类型字段(例如,被用来标注特殊控制分组,诸如但不限于配置、提取或异常分组)、目的地字段4202B(例如,指示数据要发送到网络中的哪个组件)、通道字段4202C(例如,指示将在其上发送数据的网络上的哪个通道)以及输入字段4202D(例如,要发送的有效载荷或输入数据)。
图43图示了根据本公开的实施例的配置数据格式,该配置数据格式用以针对发送(例如,开关)操作4302和接收(例如,拾取)操作4304来配置电路元件(例如,网络数据流端点电路)。在一个实施例中,发送操作4302和接收操作4304是用于以下数据的配置数据格式,该数据要在分组交换通信网络上(例如,在网络数据流端点电路之间)传输。所描绘的发送操作配置数据格式4302包括:目的地字段4302A(例如,指示(输入)数据要发送到网络中的哪(一个或多个)组件)、通道字段4302B(例如,指示将在其上发送(输入)数据的网络上的哪个通道)、输入字段4302C(例如,要发送输入数据的(一个或多个)组件的标识符,例如,该 元件对其敏感的在(例如,结构入口)缓冲器中的一组输入)以及操作字段4302D(例如,指示要实行多个操作中的哪一个)。在一个实施例中,(例如,出站)操作是Switch或SwitchAny数据流操作之一,例如,其对应于数据流图的(例如,同一)数据流操作符。
所描绘的接收操作配置数据格式4304包括:输出字段4304A(例如,指示要将(结果)数据发送到网络中的哪(一个或多个)组件)、输入字段4304B(例如,要发送输入数据的(一个或多个)组件的标识符)以及操作字段4304C(例如,指示要实行多个操作中的哪一个)。在一个实施例中,(例如,入站)操作是Pick、PickSingleLeg、PickAny或Merge数据流操作之一,例如,其对应于数据流图的(例如,同一)数据流操作符。在一个实施例中,合并数据流操作是需要所有操作数并使所有操作数出队(例如,在出口端点接收控制的情况下)的拾取。
本文中利用的配置数据格式可以例如以任何次序包括本文中描述的一个或多个字段。
图44图示了根据本公开的实施例的配置数据格式4402,该配置数据格式4402用以针对发送操作来配置电路元件(例如,网络数据流端点电路),其中其输入、输出和控制数据被标注在电路4400上。所描绘的发送操作配置数据格式4402包括:目的地字段4402A(例如,指示要将数据要发送到网络中的哪个组件)、通道字段4402B(例如,指示将在其上发送数据的(分组交换)网络上的哪个通道)以及输入字段4102C(例如,要发送输入数据的(一个或多个)组件的标识符)。在一个实施例中,电路4400(例如,网络数据流端点电路)要以发送操作配置数据格式4402的数据格式来接收数据的分组,例如,其中目的地指示要将结果发送到多个电路中的哪个电路,通道指示将在其上发送数据的(分组交换)网络的哪个通道,以及输入是要从中接收输入数据的多个电路中的哪个电路。与门4404将允许在输入数据可用且信用状态为是(其(例如,相关性令牌指示)指示例如在目的地的缓冲器中存在用于存储输出数据的空间)时实行操作。在某些实施例中,每个操作都用其要求(例如,输入、输出和控制)进行标注,并且如果满足所有要求,则该配置是由电路(例如,网络数据流端点电路)“可实行的”。
图45图示了根据本公开的实施例的配置数据格式4502,该配置数据格式4502用以针对所选择的(例如,发送)操作来配置电路元件(例如,网络数据流端点电路),其中其输入、输出和控制数据被标注在电路4500上。描述的(例如,发送)操作配置数据格式4502包括:目的地字段4502A(例如,指示要将(输入)数据发送到网络中的哪(一个或多个)组件)、通道字段4502B(例如,指示要在其上发送(输入)数据的网络上的哪个通道)、输入字段4502C(例如,要发送输入数据的(一个或多个)组件的标识符)以及操作字段4502D(例如,指示要实行多个操作中的哪个操作和/或该操作的控制数据源)。在一个实施例中,(例如,出站)操作是发送、Switch或SwitchAny数据流操作之一,例如,其对应于数据流图的(例如,同一)数据流操作符。
在一个实施例中,电路4500(例如,网络数据流端点电路)将以(例如,发送)操作配置数据格式4502的数据格式来接收数据的分组,例如,其中输入是有效载荷(例如,输入数据)的(一个或多个),并且操作字段指示要实行哪个操作(例如,示意性地示为Switch或SwitchAny)。所描绘的复用器4504可以例如基于操作字段4502D中的值,从多个可用操作中选择要实行的操作。在一个实施例中,电路4500将在输入数据可用且信用状态为是(其(例如,相关性令牌指示)指示例如在目的地的缓冲器中存在用于存储输出数据的空间)时实行该操作。
在一个实施例中,除了检查其(一个或多个)输入可用于发送之外,发送操作并不利用控制。这可以使得开关能够实行该操作而无需所有支路上的信用。在一个实施例中,Switch和/或SwitchAny操作包括由存储在操作字段4502D中的值控制的复用器,以选择正确的队列管理电路。
如图46-49所示,存储在操作字段4502D中的值可以在控制选项当中进行选择,例如,具有针对每个操作的不同控制(例如,逻辑)电路。在一些实施例中,信用(例如,网络上的信用)状态是另一输入(例如,如图46-47在这里描绘的)。
图46图示了根据本公开的实施例的配置数据格式,该配置数据格式用以针对Switch操作配置数据格式4602来配置电路元件(例如,网络数据流端点电路),其中其输入、输出和控制数据被标注在电路4600上。在一个实施例中,存储在操作字段4502D中的(例如,出站)操作值用于Switch操作,例如,对应于数据流图的Switch数据流操作符。在一个实施例中,电路4600(例如,网络数据流端点电路)将以Switch操作4602的数据格式来接收数据的分组,例如,其中输入字段4602A中的输入是(一个或多个)什么组件要被发送数据,并且操作字段4602B指示要实行哪个操作(例如,示意性地示为Switch)。所描绘的电路4600可以基于操作字段4602B,从多个可用操作中选择要执行的操作。在一个实施例中,当输入数据(例如,根据输入状态,例如,(一个或多个)目的地中存在用于数据的空间)可用且信用状态(例如,选择操作(OP)状态)为是(例如,网络信用指示网络上存在将该数据发送到(一个或多个)目的地的可用性)时,电路4500要实行该操作。例如,复用器4610、4612、4614可以供针对每个输入的相应输入状态和信用状态使用(例如,在开关操作中,输出数据要发送到的位置),例如,以防止输入显示为可用,直到输入状态(例如,目的地中用于数据的空间)和信用状态(例如,网络上存在到达目的地的空间)二者都为真(例如,是)为止。在一个实施例中,输入状态是以下指示,该指示为例如,在目的地的缓冲器中,存在或不存在存储(输出)数据的空间。在某些实施例中,与门4606将允许在输入数据可用(例如,作为来自复用器4604的输出)且选择操作(例如,控制数据)状态为是(其例如指示选择操作(例如,输入要发送到多个输出中的哪一个,参见例如图38))时实行该操作。在某些实施例中,实行利用控制数据(例如,选择op)的操作是例如根据来自复用器4608的复用器选择位,使来自输入之一的输入数据在一个或多个(例如,多个)输出上输出(例如,如由控制数据指示的)。在一个实施例中,选择op选取将使用开关输出的哪个支路和/或选择解码器创建复用器选择位。
图47图示了根据本公开的实施例的配置数据格式,该配置数据格式用以针对SwitchAny操作配置数据格式4702来配置电路元件(例如,网络数据流端点电路),其中其输入、输出和控制数据被标注在电路4700上。在一个实施例中,存储在操作字段4502D中的(例如,出站)操作值用于SwitchAny操作,例如,其对应于数据流图的SwitchAny数据流操作符。在一个实施例中,电路4700(例如,网络数据流端点电路)将以SwitchAny操作配置数据格式4702的数据格式来接收数据的分组,例如,其中输入字段4702A中的输入是(一个或多个)什么组件要被发送数据,并且操作字段4702B指示要实行哪个操作(例如,示意性地示为SwitchAny)和/或用于该操作的控制数据的源。在一个实施例中,电路4500将在输入数据可用(例如,根据输入状态,例如,(一个或多个)目的地中存在用于数据的空间)和信用状态为是(例如,网络信用指示网络上存在将该数据发送到(一个或多个)目的地的可用性)中的任何一个时实行该操作。例如,复用器4710、4712、4714可以供每个输入的相应输入状态和信用状态使用(例如,在SwitchAny操作中,要将输出数据发送到的位置),例如,以防止输入显示为可用,直到输入状态(例如,目的地中有用于数据的空间)和信用状态(例如,网络上存在到达目的地的空间)两者都为真(例如,是)为止。在一个实施例中,输入状态以下指示,该指示为例如在目的地的缓冲器中,存在或不存在存储(输出)数据的空间。在某些实施例中,当输出中的任一个可用时,或门4704将允许实行该操作。在某些实施例中,该操作的实行是要例如根据来自复用器4706的复用器选择位,使来自输入之一的第一可用输入数据在一个或多个(例如,多个)输出上输出。在一个实施例中,只要有任何输出信用可用,就会发生SwitchAny(例如,与利用选择op的Switch相反)。复用器选择位可以被用来将输入引导到网络数据流端点电路的(例如,网络)出口缓冲器。
图48图示了根据本公开的实施例的配置数据格式,该配置数据格式用以针对Pick操作配置数据格式4802来配置电路元件(例如,网络数据流端点电路),其中其输入、输出和控制数据被标注在电路4800上。在一个实施例中,存储在操作字段4802C中的(例如,入站)操作值用于Pick操作,例如,其对应于数据流图的Pick数据流操作符。在一个实施例中,电路4800(例如,网络数据流端点电路)将以Pick操作配置数据格式4802的数据格式来接收数据的分组,例如,其中输入字段4802B中的数据是(一个或多个)什么组件要被发送输入数据,输出字段4802A中的数据是要发送输入数据的(一个或多个)什么组件,并且操作字段4802C指示要实行哪个操作(例如,示意性地示为Pick)和/或用于该操作的控制数据的源。所描绘的电路4800可以基于操作字段4802C,从多个可用操作中选择要执行的操作。在一个实施例中,电路4800将在输入数据(例如,根据输入(例如,网络入口缓冲器)状态,例如,所有输入数据已经到达)可用、信用状态(例如,输出状态)为是(例如,空间阵列出口缓冲器)(其指示例如在(一个或多个)目的地的缓冲器中存在存储输出数据的空间),并且选择操作(例如,控制数据)状态为是时实行该操作。在某些实施例中,与门4806将允许在一下情况下实行该操作:输入数据可用(例如,作为来自复用器4804的输出)、输出空间可用,并且选择操作(例如,控制数据)状态为是(例如,指示选择操作(例如,输入将被发送到多个输出中的哪一个,参见例如图38))。在某些实施例中,实行利用控制数据(例如,选择op)的操作是例如根据来自复用器4808的复用器选择位,使来自多个输入之一的输入数据(例如,由控制数据指示)在一个或多个(例如,多个)输出上输出。在一个实施例中,选择op选取将使用拾取的哪个支路和/或选择解码器创建复用器选择位。
图49图示了根据本公开的实施例的配置数据格式,该配置数据格式用以针对PickAny操作4902来配置电路元件(例如,网络数据流端点电路),其中其输入、输出和控制数据被标注在电路4900上。在一个实施例中,存储在操作字段4902C中的(例如,入站)操作值用于PickAny操作,例如,其对应于数据流图的PickAny数据流操作符。在一个实施例中,电路4900(例如,网络数据流端点电路)将以PickAny操作配置数据格式4902的数据格式来接收数据的分组,例如,其中输入字段4902B中的数据是(一个或多个)什么组件要被发送数据,输出字段4902A中的数据是(一个或多个)什么组件要被发送输入数据,并且操作字段4902C指示要实行哪个操作(例如,示意性地示为PickAny)。所描绘的电路4900可以基于操作字段4902C,从多个可用操作中选择要执行的操作。在一个实施例中,电路4900将在一下情况下实行该操作,该情况为:任何输入数据(例如,第一个到达的输入数据)(例如,根据输入(例如,网络入口缓冲器)状态,例如,任何输入数据已经到达)可用且信用状态(例如,输出状态)为是(例如,空间阵列出口缓冲器指示)(这指示在(一个或多个)目的地的缓冲器中存在存储输出数据的空间)。在某些实施例中,与门4906将允许在任何输入数据可用(例如,作为来自复用器4904的输出)和输出空间可用中的任何一个时实行该操作。在某些实施例中,该操作的实行是例如根据来自复用器4908的复用器选择位,使来自多个输入之一的(例如,第一个到达的)输入数据在一个或多个(例如,多个)输出上输出。
在一个实施例中,PickAny在任何数据的存在下执行和/或选择解码器创建复用器选择位。
图50图示了根据本公开的实施例的网络数据流端点电路5000针对实行的操作(5002、5004、5006)选择。未决的操作存储装置5001(例如,在图40中的调度器4028中)可以例如根据本文中讨论的(一个或多个)格式来存储一个或多个数据流操作。调度器(例如,基于固定的优先级或最旧的操作(例如,具有其所有操作数))可以调度操作以供实行。例如,调度器可以选择操作5002,并且根据存储在操作字段中的值,从复用器5008和/或复用器5010发送对应的控制信号。作为示例,几个操作可以在单个网络数据流端点电路中同时可执行。假定所有数据都在那里,则“可实行的”信号(例如,如图44-49所示)可以作为信号而被输入到复用器5012中。复用器5012可以发送用于所选操作(例如,操作5002、5004和5006之一)的控制信号作为输出,该控制信号使复用器5008在网络数据流端点电路中配置连接,以实行所选操作(例如,出自(一个或多个)缓冲器或向(一个或多个)缓冲器发送数据)。复用器5012可以发送用于所选操作(例如,操作5002、5004和5006之一)的控制信号作为输出,该控制信号使复用器5010配置网络数据流端点电路中的连接以从(一个或多个)队列去除数据,例如,被消耗的数据。作为示例,参见本文中关于去除数据(例如,令牌)的讨论。图50中的“PE状态”可以是来自PE的控制数据,例如,队列的空指示符和满指示符(例如,反压信号和/或网络信用)。在一个实施例中,PE状态可以包括所有缓冲器和/或数据路径的空位或满位,例如在本文的图40中。图50图示了针对本文中的实施例的通用调度,例如,其中具有针对参考图46-49所讨论的实施例的专用调度。
在一个实施例中,(例如,与调度一样)出队的选择由操作及其动态行为来确定,例如,以在实行之后使操作出队。在一个实施例中,一种电路将使用操作数选择位来使数据(例如,输入、输出和/或控制数据)出队。
图51图示了根据本公开的实施例的网络数据流端点电路5100。与图40相比,网络数据流端点电路5100已经将配置和控制分为两个单独的调度器。在一个实施例中,出口调度器5128A将对要进入(例如,从耦合到数据流端点电路5100的电路交换通信网络进入)数据流端点电路5100(例如,在变元队列5102处,例如如在图40中的空间阵列入口缓冲器4002)并且输出(例如,从与数据流端点电路5100耦合的分组交换通信网络输出)数据流端点电路5100(例如,在网络出口缓冲器5122处,例如如在图40中的网络出口缓冲器4022)的数据的操作进行调度。在一个实施例中,入口调度器5128B将对要进入(例如,从耦合到数据流端点电路5100的分组交换通信网络)数据流端点电路5100(例如,在网络入口缓冲器5124处,例如如在图40中的网络入口缓冲器)并且输出(例如,从耦合到数据流端点电路5100的电路切换通信网络输出)数据流端点电路5100(例如,在输出缓冲器5108处,例如如图40中的空间阵列出口缓冲器5008)的数据的数据进行调度。调度器5128A和/或调度器5128B可以包括电路5100的(例如,操作)状态作为输入,例如,输入的充满度(例如,缓冲器5102A、5102)、输出的充满度(例如,缓冲器5108)、值(例如,5102A中的值)等。调度器5128B可以包括信用返回电路,例如,以表示例如在电路5100的网络入口缓冲器5124中接收到之后,将该信用返回给发送方。
网络5114可以是例如本文中所讨论的电路交换网络。附加地或替换地,也可以利用分组交换网络(例如,如本文中讨论的),例如,其耦合到网络出口缓冲器5122、网络入口缓冲器5124或本文中的其他组件。变元队列5102可以包括控制缓冲器5102A,例如,以指示相应的输入队列(例如,缓冲器)何时包括(新的)数据项,例如,作为单个位。现在转向图52-54,在一个实施例中,这些累积地示出了用以创建分布式拾取的配置。
图52图示了根据本公开的实施例的在实行拾取操作时接收输入零(0)的网络数据流端点电路5200,例如,如以上参考图39所讨论的。在一个实施例中,出口配置5226A(例如,在配置步骤期间)被加载有拾取操作的一部分,该拾取操作的一部分是要将数据发送到不同的网络数据流端点电路(例如,图54中的电路5400)。在一个实施例中,出口调度器5228A将针对(例如,来自处理元件的)输入数据来监视变元队列5202(例如,数据队列)。根据所描绘的数据格式的实施例,“发送”(例如,其二进制值)指示将根据字段X、Y发送的数据,其中X是指示特定目标网络数据流端点电路的值(例如,0是图54中的网络数据流端点电路5400),并且Y是指示该值将存储在哪个网络入口缓冲器(例如,缓冲器5424)的值。在一个实施例中,Y是指示多通道(例如,分组交换)网络中的特定通道的值(例如,0是图54中的网络数据流端点电路5400的通道0和/或缓冲元件0)。当输入数据到达时,然后由网络数据流端点电路5200将其(例如,从网络出口缓冲器5222)发送到不同的网络数据流端点电路(例如,图54中的网络数据流端点电路5400)。
图53图示了根据本公开的实施例的网络数据流端点电路5300,其在实行拾取操作时接收输入一(1),例如,如以上参考图39所讨论的。在一个实施例中,出口配置5326A(例如,在配置步骤期间)被加载有要将数据发送到不同的网络数据流端点电路(例如,图54中的电路5400)的拾取操作的一部分。在一个实施例中,出口调度器5328A将针对(例如,来自处理元件的)输入数据来监视变元队列5320(例如,数据队列5302B)。根据所描绘的数据格式的实施例,“发送”(例如,其二进制值)指示将根据字段X、Y发送的数据,其中X是指示特定目标网络数据流端点电路(例如,0是图54中的网络数据流端点电路5400),并且Y是指示该值将存储在哪个网络入口缓冲器(例如,缓冲器5424)的值。在一个实施例中,Y是指示多通道(例如,分组交换)网络中的特定通道的值(例如,1是图54中的网络数据流端点电路5400的通道1和/或缓冲元件1)。当输入数据到达时,然后由网络数据流端点电路5300将其(例如,从网络出口缓冲器5222)发送到不同的网络数据流端点电路(例如,图54中的网络数据流端点电路5400)。
图54图示了根据本公开的实施例的在实行拾取操作时输出所选输入的网络数据流端点电路5400,如以上参考图39所讨论的。在一个实施例中,其他网络数据流端点电路(例如,电路5200和电路5300)将其输入数据发送到电路5400的网络入口缓冲器5424。在一个实施例中,入口配置5426B(例如,在配置步骤期间)被加载有拾取操作的一部分,该拾取操作将例如根据控制值来拾取被发送到网络数据流端点电路5400的数据。在一个实施例中,控制值将在入口控制5432(例如,缓冲器)中被接收。在一个实施例中,入口调度器5328A将监视控制值和输入值(例如,在网络入口缓冲器5424中)的接收。例如,如果控制值表示从网络入口缓冲器5424的缓冲器元素A(例如,在此示例中为0或1)(例如,从通道A)中拾取,则存储在该缓冲器元素A中的值将例如,当输出缓冲器具有存储空间(例如,如反压信号指示的)时,作为电路5400的操作的结果例如被输出到输出缓冲器5408中。在一个实施例中,当出口缓冲器具有令牌(例如,输入数据和控制数据)并且接收器断言其具有缓冲器(例如,指示存储可用,但是其他资源分配是可能的,此示例仅是说明性的)时,发送出电路5400的输出数据。
图55图示了根据本公开的实施例的流程图5500。所描绘的流程5500包括提供处理元件的空间阵列5502;根据数据流图,利用分组交换通信网络,在处理单元之间在空间阵列内路由数据5504;利用处理元件实行数据流图的第一数据流操作5506;以及利用分组交换通信网络的多个网络数据流端点电路实行数据流图的第二数据流操作5508。
再次参考图8,加速器(例如,CSA)802可以实行(例如,或请求实行)对多个高速缓存存储体(例如,高速缓存存储体808)中的一个或多个的数据访问(例如,加载和/或存储)。例如,如本文中讨论的,可以包括存储器接口电路(例如,(一个或多个)请求地址堆(RAF)电路),以提供存储器(例如,高速缓存存储体)与加速器802之间的访问。再次参考图11,请求电路(例如,处理元件)可以实行(例如,或请求实行)对多个高速缓存存储体中的一个或多个(例如,高速缓存存储体1102)的数据的访问(例如,加载和/或存储)。例如,如本文中讨论的,可以包括存储器接口电路(例如,(一个或多个)请求地址堆(RAF)电路),以提供存储器(例如,高速缓冲存储器的一个或多个存储体)与加速器(例如,一个或多个加速器块片(1108、1110、1112、1114))之间的访问。再次参考图39和/或图40,请求电路(例如,处理元件)可以实行(例如,或请求实行)对多个高速缓存存储体中的一个或多个的数据的访问(例如,加载和/或存储)。例如,如本文中讨论的,可以包括存储器接口电路(例如,(一个或多个)请求地址堆(RAF)电路,例如,RAF/高速缓存接口3912),以提供存储器(例如,高速缓冲存储器的一个或多个存储体)与加速器(例如,处理元件和/或网络数据流端点电路(例如,电路3902、3904、3906)中的一个或多个)之间的访问。
在某些实施例中,加速器(例如,其PE)通过(i)电路交换网络(例如,如本文中例如参考图6-11所讨论的)或(ii)通过分组交换网络(例如,如本文中例如参考图38-55所讨论的)耦合到RAF电路或多个RAF电路。
在某些实施例中,由例如可配置空间加速器的一个或多个请求地址堆电路接收针对存储器(例如,高速缓存)访问请求所接收到的请求数据。空间架构的某些实施例是加速用户应用的高能效且高性能的方式。(一个或多个)空间加速器可以实现能量效率的方式之一是通过空间分布,例如,而不是核心中存在能量消耗大的集中式结构,空间架构通常可以使用较小的、分解的结构(例如,两者都更简单和能效更高)。例如,图11的电路(例如,空间阵列)可以跨越几个RAF分散其负载和存储操作。
2.7浮点支持
某些HPC应用通过它们对显著的浮点带宽的需要来表征。为了满足此需要,例如,取决于块片配置,可以给CSA的实施例提供多个(例如,均在128与256之间)浮点加法和乘法PE。CSA可以提供几个其他扩展精度模式,例如,以简化数学库实现方式。CSA浮点PE可以支持单精度和双精度两者,但是更低精度PE可以支持机器学习工作负载。CSA可以提供比处理器核心高一个数量级的浮点性能。在一个实施例中,除了增加浮点带宽之外,为了给所有的浮点单元供电,在浮点运算中消耗的能量被减少。例如,为了减少能量,CSA可以选择性地选通浮点乘法器阵列的低位比特。在检查浮点算术的行为时,乘法数组的低位比特常常可能不影响最终舍入乘积。图56图示了根据本公开的实施例的分割成三个区域(结果区域、三个潜在进位区域(5602、5604、5606)和选通区域)的浮点乘法器5600。在某些实施例中,进位区域很可能影响结果区域,并且选通区域不太可能影响结果区域。考虑g个位的选通区域,最大进位(carry)可以是:
给定此最大进位,如果进位区域的结果小于2c-g,其中进位区域是c个位宽,则可以忽略选通区域,因为它不影响结果区域。增加g意味着更可能将需要选通区域,然而增加c意味着在随机假定下,选通区域将不使用并且可以被禁用以避免能量消耗。在CSA浮点乘法PE的实施例中,利用了两级流水线方法,其中首先进位区域被确定,然后在它被发现影响结果的情况下选通区域被确定。如果关于乘法的上下文的更多信息已知,则CSA更积极地调谐选通区域的大小。在FMA中,乘法结果可以被加到累加器,该累加器常常比被乘数中的任何一个大得多。在这种情况下,可以在乘法之前观察加数指数并且CSDA可以相应地调整选通区域。CSA的一个实施例包括界定计算的最小结果的上下文值被提供给相关乘法器以便选择最小能量选通配置的方案。
2.8运行时服务
在某些实施例中,CSA包括异构和分布式结构,并且因此,运行时服务实现方式将以并行和分布方式容纳若干种类的PE。尽管CSA中的运行时服务可能是关键的,然而它们相对于用户级计算可以是不频繁的。某些实现方式因此集中于在硬件资源上覆盖服务。为了满足这些目标,可以将CSA运行时服务转换为层次,例如,其中每个层对应于CSA网络。在块片级别下,单个面向外部控制器可以接受服务命令或者向具有CSA块片的关联核心发送服务命令。块片级控制器可以用来例如使用ACI网络来协调RAF处的区域控制器。进而,区域控制器可以协调某些夹层网络站点(例如,网络数据流端点电路)处的本地控制器。在最低级别下,服务特定微协议可以例如在通过夹层控制器控制的特殊模式期间在本地网络上执行。微协议可以许可每个PE(例如,按类型的PE类)根据它自己的需要来与运行时服务交互。并行性因此在此分层组织中是隐含的,并且在最低级别下的操作可以同时地发生。例如,取决于配置大小及其在存储器层次中的位置,此并行性可以使得能够在数百纳秒至几微秒之间配置CSA块片。CSA的实施例因此利用数据流图的属性来改进每个运行时服务的实现方式。一个关键观察结果是运行时服务可能仅需要保存数据流图的合法逻辑视图,例如,可以通过数据流操作符执行的某种排序来产生的状态。服务一般地可能不需要保证数据流图的时间视图,例如,在特定时间点的CSA中的数据流图的状态。这可以许可CSA以分布式、流水线和并行方式执行大多数运行时服务,例如,假设服务被编排以保存数据流图的逻辑视图。本地配置微协议可以是覆盖在本地网络上的基于分组的协议。配置目标可以被组织到配置链中,例如,该配置链被固定在微架构中。结构(例如,PE)目标可以被一次配置一个,例如,使用每目标的单个额外寄存器来实现分布式协调。为了开始配置,控制器可以驱动带外信号,该带外信号将其邻域中的所有结构目标置于未配置的暂停状态中,并且将本地网络中的复用器摆动到预定义形态。随着结构(例如,PE)目标被配置,即它们完全接收到它们的配置分组,它们可以设置它们的配置微协议寄存器,通知紧接在前的目标(例如,PE)它可以继续使用后续分组来配置。对配置分组的大小没有限制,并且分组可以具有动态可变长度。例如,配置常数操作数的PE可以具有被加长以包括常数字段(例如,图3B-3C中的X和Y)的配置分组。图57图示了根据本公开的实施例的具有多个处理元件(例如,PE 5702、5704、5706、5708)的加速器5700的进行中配置。一旦被配置,PE就可以执行经受数据流约束。然而,涉及未配置的PE的通道可以由微架构禁用,例如,阻止任何未定义操作发生。这些属性允许CSA的实施例以分布式方式初始化和执行,而无论如何无需集中式控制。从未配置状态起,配置可以完全并行地发生,例如,可能和200纳秒一样少。然而,由于CSA的实施例的分布式初始化,PE可以变得活跃,例如在整个架构被配置之前很久向存储器发送请求。提取可以以与配置几乎相同的方式进行。本地网络可以遵照一次从一个目标中提取数据,并且提取被用来实现分布式协调的状态位。CSA可以将提取编排为非破坏性的,即,在提取完成时每个可提取目标已返回到其开始状态。在此实现方式中,目标中的所有状态可以以类似扫描的方式传播到束缚于本地网络的出口寄存器。但是可以通过在寄存器转移级(RTL)处引入新路径或者使用现有线路来以更低开销提供相同的功能性来实现就地提取。像配置一样,分层提取被并行地实现。
图58图示了根据本公开的实施例的进行中流水线提取的快照5800。在提取的一些用例(诸如检查点)中,只要结构吞吐量被维持,等待时间就可能不是问题。在这些情况下,可以以流水线方式编排提取。图58中所示的这种布置许可大部分结构继续执行,然而窄区域为了提取而被禁用。可以协调和组成配置和提取以实现流水线上下文切换。异常可以在性质上与配置和提取不同的原因在于,不是在指定的时间发生,而是它们在运行时期间的任何时间点出现在结构中的任何地方。因此,在一个实施例中,异常微协议可以未被覆盖在被用户程序在运行时占用的本地网络上,并且利用它自己的网络。然而,就性质而言,异常对等待时间和带宽而言是稀少的且不敏感的。因此,CSA的某些实施例利用分组交换网络来将异常承载到本地夹层站点,例如,在它们被向服务层次上转发(例如,如在图73中一样)的地方。本地异常网络中的分组可能极其小。在许多情况下,仅两个至八个位的PE标识(ID)足以作为完整分组,例如,因为CSA可以随着分组遍历异常服务层次而创建唯一异常标识符。这种方案可能是合期望的,因为它也减少在每个PE处产生异常的面积开销。
3.编译
将用高级语言编写的程序编译到CSA上的能力对于行业采用来说可能是必要的。此部分给出用于CSA的实施例的编译策略的高级概述。首先是针对图示了理想的生产质量工具链的期望属性的CSA软件框架的提议。接下来,对原型编译器框架进行讨论。然后对“控制到数据流转换”进行讨论,例如,以将普通顺序控制流代码转换成CSA数据流汇编代码。
3.1示例生产框架
图59图示了根据本公开的实施例的用于加速器的编译工具链5900。此工具链将高级语言(诸如C、C++和Fortran)编译成要加速的特定区域的主机代码(LLVM)中间表示(IR)的组合。此编译工具链的CSA特定部分取LLVM IR作为其输入,优化并将此IR编译成CSA汇编,例如,为了性能在等待时间不敏感通道上添加适当的缓冲。它然后在硬件结构上放置并路由CSA汇编,并且配置PE和网络以用于执行。在一个实施例中,工具链支持CSA特定编译作为即时(JIT),结合来自实际执行的潜在运行时反馈。框架的关键设计特性之一是用于CSA的(LLVM)IR的编译,而不是使用更高级语言作为输入。虽然用专门为CSA设计的高级编程语言编写的程序可能实现最大性能和/或能量效率,但是由于转换现有代码库的困难,新的高级语言或编程框架的采纳可能在实践中慢且受限制。使用(LLVM)IR作为输入使得各式各样的现有程序能够可能在CSA上执行,例如,而无需创建新语言或者显著地修改想要在CSA上运行的新语言的前端。
3.2原型编译器
图60图示了根据本公开的实施例的用于加速器的编译器6000。编译器6000最初集中于通过(例如,Clang)前端对C和C++的提前编译。为了编译(LLVM)IR,编译器利用三个主要阶段在LLVM内实现CSA后端目标。首先,CSA后端将LLVM IR降低成用于顺序单元的目标特定机器指令,该顺序单元实现与类似传统RISC的控制流架构(例如,具有分支和程序计数器)组合的大多数CSA操作。工具链中的顺序单元可以用作针对编译器和应用开发者两者的有用帮助,因为它使得能够实现程序从控制流(CF)到数据流(DF)的增量变换,例如,一次将一段代码从控制流程转换为数据流程并且验证程序正确性。顺序单元也可以提供用于处理在空间数组中不适合的代码的模型。接下来,编译器将这些控制流指令转换成用于CSA的数据流操作符(例如,代码)。稍后在部分3.3中对此阶段进行描述。然后,CSA后端可以在数据流指令上运行它自己的优化遍数。最后,编译器可以以CSA汇编格式转储指令。此汇编格式被视为后级工具的输入,该后级工具在实际的CSA硬件上放置并路由数据流指令。
3.3对数据流转换的控制
可以在控制到数据流转换遍数或简称数据流转换遍数中实现编译器的关键部分。此遍数采用以控制流程形式表示的功能,例如,具有在虚拟寄存器上操作的顺序机器指令的控制流程图(CFG),并且将它转换成在概念上为通过等待时间不敏感通道(LIC)连接的数据流操作(指令)的图的数据流功能。此部分给出此遍数的高级描述,描述了在某些实施例中它在概念上如何处理存储器操作、分支和循环。
直线代码
图61A图示了根据本公开的实施例的顺序汇编代码6102。图61B图示了根据本公开的实施例的图61A的顺序汇编代码6102的数据流汇编代码6104。图61C图示了根据本公开的实施例的用于加速器的图61B的数据流汇编代码6104的数据流图6106。
首先,考虑将直线顺序代码转换为数据流的简单情况。数据流转换遍数可以将顺序代码(诸如图61A中所示的代码)的基本块转换成CSA汇编代码,如图61B中所示。在概念上,图61B中的CSA汇编表示图61C中所示的数据流图。在此示例中,每个顺序指令被转换成匹配CSA汇编。.lic语句(例如,用于数据)声明对应于顺序代码中的虚拟寄存器(例如,Rdata)的等待时间不敏感通道。在实践中,数据流转换遍数的输入可以在编号的虚拟寄存器中。然而,为了清楚,此部分使用描述性寄存器名称。注意的是,在此实施例中在CSA架构中支持加载和存储操作,从而与仅支持纯数据流的架构相比允许更多的程序运行。因为输入到编译器的顺序代码采用SSA(单静态指派)形式,所以对于简单的基本块来说,控制到数据流遍数可以将每个虚拟寄存器定义转换成等待时间不敏感通道上的单个值的产生。SSA形式允许虚拟寄存器的单个定义的多次使用,诸如在Rdata2中。为了支持此模型,CSA汇编代码支持相同LIC(例如,data2)的多次使用,同时模拟器隐式地创建LIC的必要副本。顺序代码与数据流代码之间的一个关键差异是在对存储器操作的处理中。图61A中的代码在概念上是串行的,这意味着addr3的load32 (ld32)应该似乎在addr的st32之后发生,以防addr和addr3地址重叠。
分支
为了将具有多个基本块和条件的程序转换为数据流,编译器生成特殊数据流操作符来替换分支。更具体地,编译器使用开关操作符来在原始CFG中的基本块的末尾引导传出数据,并且使用拾取操作符来在基本块的开头从适当的传入通道中选择值。作为具体示例,考虑基于若干输入a、i、x和n有条件地计算y的值的图62A-62C中的代码和对应数据流图。在计算分支条件测试之后,数据流代码使用开关操作符(例如,参见图3B-3C)来在测试为0的情况下将通道x中的值引导到通道xF,或者在测试为1的情况下引导到通道xT。类似地,拾取操作符(例如,参见图3B-3C)用于在测试为0的情况下将通道yF发送到y,或者在测试为1的情况下将通道yT发送到y。在此示例中,事实证明即使在条件的真分支中仅使用a的值,CSA也将包括开关操作符,其在测试为1时将它引导到通道aT,并且在测试为0时消费(吃)该值。此后者情况通过将开关的假输出设置为%ign来表达。简单地将通道a直接地连接到真路径可能不正确,因为在执行实际上采取假路径的情况下,“a”的这个值将留在图中,从而导致a的不正确值用于函数的下一次执行。此示例突出了控制等价的性质,这是正确数据流转换的实施例中的关键属性。
控制等价:考虑具有两个基本块A和B的单入口单出口控制流程图G。如果通过G的所有完整控制流程路径访问A和B相同的次数,则A和B是控制等价的。
LIC替换:在控制流程图G中,假设基本块A中的操作定义虚拟寄存器x,并且基本块B中的操作使用x。然后只有当A和B是控制等价的时候,正确的控制到数据流变换才可用等待时间不敏感通道替换x。控制等价关系将CFG的基本块分割成强控制相关区域。图62A图示了根据本公开的实施例的C源代码6202。图62B图示了根据本公开的实施例的图62A的C源代码6202的数据流汇编代码6204。图62C图示了根据本公开的实施例的用于加速器的图62B的数据流汇编代码6204的数据流图6206。在图62A-62C中的示例中,在条件之前和之后的基本块彼此是控制等价的,但是真路径和假路径中的基本块各自在它们自己的控制相关区域中。用于将CFG转换为数据流的一个正确算法是使编译器插入(1)开关以补偿在不是控制等价的基本块之间流动的任何值的执行频率方面的失配,并且(2)在基本块的开头拾取以从基本块的任何传入值中正确地选择。为这些拾取和开关生成适当的控制信号可以是数据流转换的关键部分。
循环
数据流转换中的另一类重要的CFG是用于单入口单出口循环的CFG,这是在(LLVM)IR中生成的常见形式的循环。除了从循环的末尾回到循环头部块的单回边之外,这些循环可能是几乎非循环的。数据流转换遍数可以在分支方面使用相同的高级策略来转换循环,例如,它在循环的末尾插入开关以将值从循环中(在循环出口外或在到循环的开头的回边附近)导出值,并且在循环的开头插入拾取以在进入循环的初始值与通过回边进来的值之间选择。图63A图示了根据本公开的实施例的C源代码6302。图63B图示了根据本公开的实施例的图63A的C源代码6302的数据流汇编代码6304。图63C图示了根据本公开的实施例的用于加速器的图63B的数据流汇编代码6304的数据流图6306。图63A-63C示出了把循环归纳变量i的值以及所对应的数据流图加起来的示例do-while循环的C和CSA汇编代码。对于在概念上围绕着循环(i和总和)的每个变量,此图有控制这些值的流动的对应拾取/开关对。注意的是,即使n是循环不变的,此示例也使用拾取/开关对来在循环附近使n的值循环。n的这种重复使得能够将n的虚拟寄存器转换成LIC,因为它和n在循环外部的概念定义与n在循环内部的一个或多个使用之间的执行频率匹配。一般而言,为了正确的数据流转换,当寄存器被转换成LIC时住进循环中的寄存器将针对循环体内部的每次迭代被重复一次。类似地,在循环内被更新并且从循环中移出的寄存器将被消费,例如,同时从循环中发送单个最终值。循环将折痕(wrinkle)引入到数据流转换过程中,即针对在循环顶部的拾取和循环的底部的开关的控制偏移。例如,如果图62A中的循环执行三次迭代并退出,则对拾取器的控制应该是0、1、1,然而对转换开关的控制应该是1、1、0。这种控制是通过在函数于周期0(其在汇编中通过指令.value 0和.avail 0来指定)开始时按初始额外0启动拾取器通道,并且然后将输出转换开关复制到拾取器中来实现的。注意的是,转换开关中的最后0使最终0恢复到拾取器中,从而确保数据流图的最终状态与其初始状态匹配。
图64A图示了根据本公开的实施例的流程图2000。描绘的流程6400包括:利用处理器的核心的解码器将指令解码成解码的指令6402;利用处理器的核心的执行单元执行解码的指令以实行第一操作6404;接收包括多个节点的数据流图的输入6406;将数据流图覆盖到处理器的多个处理元件和处理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理元件中的数据流操作符6408;以及通过到达多个处理元件的数据流操作符中的每一个的相应的传入操作数集来利用互连网络和多个处理元件实行数据流图的第二操作6410。
图64B图示了根据本公开的实施例的流程图6401。描绘的流程6401包括:接收包括多个节点的数据流图的输入6403;以及将数据流图覆盖到处理器的多个处理元件、多个处理元件之间的数据路径网络和多个处理元件之间的流控制路径网络中,其中每个节点被表示为多个处理元件中的数据流操作符6405。
在一个实施例中,核心将命令写入到存储器队列中并且CSA(例如,多个处理元件)监视存储器队列并且在命令被读取时开始执行。在一个实施例中,核心执行程序的第一部分并且CSA(例如,多个处理元件)执行程序的第二部分。在一个实施例中,核心在CSA正在执行其操作的同时做其他工作。
4.CSA优势
在某些实施例中,CSA架构和微架构提供优于路线图处理器架构和FPGA的极深的能量、性能和可用性优势。在此部分中,这些架构被与CSA的实施例相比较并且突出CSA在相对于每个使并行数据流图加速时的优越性。
4.1 处理器
图65图示了根据本公开的实施例的吞吐量对每操作能量图6500。如图65中所示,小核心一般地比大核心更高能效,并且,在一些工作负载中,可以通过更高核心计数将此优势转化为绝对性能。CSA微架构遵循这些观察结果到其结论并且去除(例如,大多数)与冯诺依曼架构相关联的耗能多的控制结构,包括大多数的指令侧微架构。通过去除这些开销并且实现简单的单操作PE,CSA的实施例获得密集的高效空间阵列。与通常相当串行的小核心不同,CSA可以例如经由电路交换本地网络将其PE结成在一起,以形成显式并行的聚合数据流图。结果是不仅在并行应用中而且在串行应用中也有性能。与可以在面积和能量方面为性能付出高昂代价的核心不同,CSA在其本机执行模式中已经是并行的。在某些实施例中,CSA既不需要推测来提高性能,它也不需要从顺序程序表示中重复地重新提取并行性,从而避免冯诺依曼架构中的两个主要能量税。CSA的实施例中的大多数结构是分布式的、小的且高能效的,与在核心中找到的集中式、庞大的、耗能多的结构相反。考虑CSA中的寄存器的情况:每个PE可以具有几个(例如,10个或更少)存储寄存器。单独来看,这些寄存器可以比传统寄存器堆更高效。总的来说,这些寄存器可以提供大结构内寄存器堆的效果。结果,CSA的实施例避免由经典架构引发的大多数堆栈溢出和填充,同时每状态访问使用少得多的能量。当然,应用可以仍然访问存储器。在CSA的实施例中,存储器访问请求和响应在架构上解耦,使得工作负载能够每单位面积和能量保持更多未完成的存储器访问。这个属性为受高速缓存限制的工作负载产生大幅地更高的性能,并且减少在受存储器限制的工作负载中使主存储器饱和所需的面积和能量。CSA的实施例暴露了能量效率的非冯诺依曼架构独有的新形式。在(例如,大多数)PE处执行单个操作(例如,指令)的一个结果是操作数熵降低。在增量操作的情况下,每次执行可以导致少量的电路级切换和很少的能量消耗,在部分5.2中详细地检查的情况。相比之下,冯诺依曼架构是复用的,导致大量的位转换。CSA的实施例的异步样式也使得能够实现微架构优化,诸如在部分2.7中描述的难以在严格调度的核心流水线中实现的浮点优化。因为PE可以是相对简单的,并且它们在特定数据流图中的行为是静态已知的,所以与在更粗糙的架构中相比,可以更有效地应用时钟门控和功率门控技术。CSA PE和网络的实施例的图执行样式、小尺寸和可塑性一起使得能够表达许多种类的并行性:指令、数据、流水线、矢量、存储器、线程和任务并行性可以全部被实现。例如,在CSA的实施例中,一个应用可以使用算术单元来提供高度的地址带宽,然而另一应用可以将那些相同的单元用于计算。在许多情况下,可以组合多种并行性以获得甚至更高的性能。许多的关键HPC操作可以既被复制又被流水线化,从而导致数量级性能增益。相比之下,冯诺依曼样式核心通常针对由架构师精心选取的一种样式的并行性进行优化,导致不能捕获所有重要的应用内核。正如CSA的实施例暴露并便于许多形式的并行性一样,它不强制特定形式的并行性,或者更糟糕的是,为了从CSA中受益,特定子例程存在于应用中。例如,即使当在没有修改的情况下编译时,许多应用(包括单流应用)也可以从CSA的实施例获得性能和能量益处两者。这扭转了需要大量程序设计员努力以在单流应用中获得实质上性能增益的长期趋势。实际上,在一些应用中,CSA的实施例从功能上等效的但更少的“现代”代码获得与从它们复杂的当代同辈表亲(cousin)相比更多的性能,该同辈表亲已被折磨为以矢量指令为目标。
4.2 CSA实施例和FGPA的比较
作为CSA的实施例的基本架构的数据流操作符的选择将那些CSA与FGPA区分开,并且特别地,CSA是用于由传统编程语言产生的HPC数据流图的优越加速器。数据流操作符是基本上异步的。这使得CSA的实施例不仅能够在微架构中具有大实现自由度,而且还使得它们能够简单地且简洁地适应抽象架构概念。例如,CSA的实施例自然地适应具有简单加载-存储接口的基本上异步的许多存储器微架构。一个人仅需要检查FPGA DRAM控制器来领会复杂度的差异。CSA的实施例也利用异步来像配置和提取一样提供更快且更全功能的运行时服务,这被认为比FPGA快四到六个数量级。通过使架构接口变窄,CSA的实施例在微架构级别下提供对大多数定时路径的控制。这允许CSA的实施例以比在FPGA中提供的更一般控制机制高得多的频率操作。类似地,时钟和复位(其对FPGA而言可能是架构上基本的)在CSA中是微架构的,例如,消除将它们作为可编程实体来支持的需要。数据流操作符对于大部分来说可以是粗粒度的。通过仅处理粗操作符,CSA的实施例改进结构的密度及其能耗两者:CSA直接地执行操作,而不是用查找表模拟它们。粗糙的第二结果是布局和布线问题的简化。在CSA的实施例中,CSA数据流图比FPGA网络表小许多数量级并且布局和布线时间相应地减少。例如,对于由传统编程语言产生的数据流图来说,CSA和FPGA的实施例之间的显著差异使CSA作为加速器变得更优越。
5.评估
CSA是相对于路线图处理器有潜力提供巨多性能和能量优势的新颖计算机架构。考虑计算单步幅地址以便跨越阵列漫游的情况。这种情况在HPC应用中可能是重要的,例如,HPC应用在计算地址偏移时花费大量整数努力。在地址计算以及尤其是步幅地址计算中,一个变元是恒定的并且另一仅每计算略微变化。因此,在大多数情况下,每周期仅少量位切换。实际上,可以使用与对部分2.7中描述的浮点进位比特的限制类似的推导来示出,输入的不到两个位平均对于步幅运算来说每计算切换,从而在随机切换分布上将能量减少50%。如果使用时分复用方法,则此能量节约的大部分可能丢失。在一个实施例中,CSA在核心上实现近似3倍能量效率,同时递送8倍性能增益。通过CSA的实施例实现的并行性增益可以导致程序运行时间减少,从而产生泄漏能量的成比例的大幅减少。在PE级别下,CSA的实施例是极其高能效的。CSA的第二重要问题是CSA是否在块片级别下消耗合理量的能量。因为CSA的实施例能够在每一周期在结构中执行每一浮点PE,所以它用作用于能量和功率消耗的合理上限,例如,使得大多数能量进入浮点乘法和加法。
6.另外的CSA细节
此部分讨论配置和异常处理的另外的细节。
6.1用于配置CSA的微架构
此部分公开了如何配置CSA(例如,结构)、如何快速地实现此配置以及如何使配置的资源开销最小化的示例。快速地配置结构可能在使更大算法的小部分加速时并且因此在扩大CSA的适用性时具有卓越重要性。该部分还公开了允许CSA的实施例被编程有不同长度的配置的特征。
CSA(例如,结构)的实施例可以不同于传统核心的原因在于它们利用配置步骤,其中结构的(例如,大)部分在程序执行之前被加载有程序配置。静态配置的优势可以是在运行时在配置上花费非常少的能量,例如,与几乎每周期花费能量取出配置信息(指令)的顺序核心相反。配置的先前的缺点是它是具有潜在大的等待时间的粗粒度步骤,这由于上下文切换的成本而对可以在结构中加速的程序的大小设置底限。本公开描述了用于以分布式方式快速地配置空间阵列的可伸缩微架构,例如,其避免了先前的缺点。
如上面所讨论的,CSA可以包括通过PE间网络连接的轻量级处理元件。被视为控制数据流图的程序然后通过配置可配置结构元件(CFE)(例如,PE和互连(结构)网络)被映射到架构上。一般地,PE可以被配置为数据流操作符,并且一旦所有输入操作数到达PE,就发生某个操作,并且结果被转发给另一个或多个PE以供消费或输出。这些PE可以通过专用虚拟电路来通信,该专用虚拟电路通过静态地配置电路交换通信网络而形成。这些虚拟电路可以是流控制的且完全反压的,例如,使得如果源没有数据或者目的地是满的,PE就将停顿。在运行时,数据可以流经实现所映射的算法的PE。例如,数据可以从存储器流入,通过结构,然后往回流出到存储器。这种空间架构可以相对于传统多核心处理器实现显著的性能效率:形式为PE的计算可以比更大核心更简单且更多,并且通信可以是直接的,与存储器系统的扩展相反。
CSA的实施例可能不利用(例如,软件控制的)分组交换,例如,需要大量软件帮助来实现的分组交换,这减慢了配置。CSA的实施例包括网络中的带外信令(例如,仅2-3个位,取决于所支持的特征集)和固定配置拓扑,以避免需要大量软件支持。
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位结构具有更低的成本。
图66图示了根据本公开的实施例的包括处理元件(PE)阵列和本地配置控制器(6602、6606)的加速器块片6600。每个PE、每个网络控制器(例如,网络数据流节点电路)和每个开关可以是例如通过CSA架构的实施例来配置(例如,编程)的可配置结构元件(CFE)。
CSA的实施例包括提供异构空间结构的高效、分布式、低等待时间配置的硬件。可以根据四种技术来实现这个。首先,例如,如在图66-68中一样,硬件实体——本地配置控制器(LCC)被利用。LCC可以从(例如,虚拟)存储器取出配置信息的流。第二,可以包括配置数据路径,例如,其和PE结构的本机宽度一样宽并且其可以被覆盖在PE结构之上。第三,可以将新控制信号接收到编排配置过程的PE结构中。第四,状态元素可以位于(例如,在寄存器中)每个可配置端点处,该每个可配置端点跟踪相邻CFE的状态,从而允许每个CFE在没有额外控制信号的情况下不含糊地自我配置。这四种微架构特征可以允许CSA配置其CFE的链。为了获得低配置等待时间,可以通过构建许多LCC和CFE链来分割配置。在配置时间,这些可以独立地操作以并行地加载结构,例如,显著地减少等待时间。作为这些组合的结果,可以(例如,在几百纳秒中)完全配置使用CSA架构的实施例所配置的结构。在下文中,公开了CSA配置网络的实施例的各种组件的详细操作。
图67A-67C图示了根据本公开的实施例的配置数据路径网络的本地配置控制器6702。描绘的网络包括多个复用器(例如,复用器6706、6708、6710),它们可以被(例如,经由其相应的控制信号)配置成将一个或多个数据路径(例如,来自PE的控制路径)连接在一起。图67A图示了为某个先前的操作或程序而配置(例如,设置)的网络6700(例如,结构)。图67B图示了选通配置信号的本地配置控制器6702(例如,包括用以发送和/或接收信号的网络接口电路6704),并且本地网络被设置为允许LCC向所有可配置结构元件(CFE)(例如,复用器)发送配置数据的默认配置(例如,如所描绘的)。图67C图示了LCC跨越网络选通配置信息,从而按照预定(例如,硅定义的)序列配置CFE。在一个实施例中,当CFE被配置时,它们可以立即开始操作。在另一个实施例中,CFE等待开始操作直到结构已被完全配置(例如,如由配置终端器(例如,图69中的配置终端器6904和配置终端器6908)针对每个本地配置控制器所发信号通知的那样)为止。在一个实施例中,LCC通过发送特殊消息或者驱动信号来获得对网络结构的控制。它然后将配置数据(例如,在许多周期的时段内的数据)选通给结构中的CFE。在这些图中,复用器网络是某些图(例如,图6)中所示的“开关”的类似物。
本地配置控制器
图68图示了根据本公开的实施例的(例如,本地)配置控制器6802。本地配置控制器(LCC)可以是硬件实体,其负责加载结构程序的本地部分(例如,在块片的子集中或以其他方式),解释这些程序部分,然后通过在各种配置线上驱动适当的协议将这些程序部分加载到结构中。以这个身份,LCC可能是专用顺序微控制器。
LCC操作可以在它接收到对代码段的指针时开始。取决于LCB微架构,此指针(例如,存储在指针寄存器6806中)可以在网络上(例如,从CSA(结构)它本身内)或者通过对LCC的存储器系统访问而出现。当它接收到这种指针时,LCC可选地从结构的用于上下文存储的其部分中抽取相关状态,然后继续立即重配置它负责的结构的部分。由LCC加载的程序可以是用于结构的配置数据和用于LCC的控制命令的组合,例如,该控制命令被轻编码。随着LLC在程序部分中流式传输,它可以将程序解释为命令流并且实行适当的编码动作来配置(例如,加载)结构。
在图66中示出了用于LCC的两个不同的微架构,例如,其中在CSA中利用一个或两个。第一个将LCC 6602放置在存储器接口处。在这种情况下,LCC可以对存储器系统做出要加载数据的直接请求。在第二种情况下,LCC 6606被放置在存储器网络上,其中它可以仅间接地对存储器做出请求。在两种情况下,LCB的逻辑操作不变。在一个实施例中,LCC例如通过一组(例如,OS可见的)控制状态寄存器被通知要加载的程序,该控制状态寄存器将用于向个体LCC通知新程序指针等。
额外带外控制通道(例如,线)
在某些实施例中,配置依靠2-8个额外带外控制通道来像在下面所定义的那样改进配置速度。例如,配置控制器6802可以包括以下控制通道,例如,CFG_START控制通道6808、CFG_VALID控制通道6810和CFG_DONE控制通道6812,其中在下表2中对每个的示例进行讨论。
表2:控制通道
CFG_START | 在配置的开头被断言。设置每个CFE处的配置状态并且设置配置总线。 |
CFG_VALID | 表示配置总线上的值的有效性。 |
CFG_DONE | 可选的。表示特定CFE的配置的完成。这允许配置在CFE不需要附加配置的情况下短路。 |
一般地,配置信息的处理可以被留给特定CFE的实施者。例如,可选功能CFE可以具有用于使用现有数据路径来设置寄存器的预防措施,然而固定功能CFE可能简单地设置配置寄存器。
由于当对一大组CFE进行编程时的长线延迟,CFG_VALID信号可以被视为用于CFE组件的时钟/锁存使能。因为此信号被用作时钟,所以在一个实施例中线路的占空比最多为50%。结果,配置吞吐量近似地减半。可选地,可以添加第二CFG_VALID信号以使得能够实现连续编程。
在一个实施例中,在独立耦合(例如,线)上严格地传送仅CFG_START,例如,CFG_VALID和CFG_DONE可以被覆盖在其他网络耦合之上。
网络资源的重用
为了减少配置的开销,CSA的某些实施例利用现有网络基础设施来传送配置数据。LCC可以利用芯片级存储器层次和结构级通信网络两者来将数据从存储装置移动到结构中。结果,在CSA的某些实施例中,配置基础设施对总体结构面积和功率增加不多于2%。
CSA的某些实施例中的网络资源的重用可以使网络对于配置机制具有某种硬件支持。当‘CFG_START’信号被断言时,CSA的实施例的电路交换网络使LCC针对配置以特定方式设置它们的复用器。分组交换网络确实不需要扩展,但是LCC端点(例如,配置终端器)在分组交换网络中使用特定地址。网络重用是可选的,并且一些实施例可以发现专用配置总线是更方便的。
每CFE状态
每个CFE可以维护表示它是否已被配置的位(参见例如图57)。此位在当配置启动信号被驱动时可以被取消断言,然后一旦特定CFE已被配置就被断言。在一种配置协议中,CFE被布置成形成链,其中CFE配置状态位确定该链的拓扑。CFE可以读取紧邻CFE的配置状态位。如果此相邻CFE被配置并且当前CFE未被配置,则CFE可以确定任何当前配置数据针对当前CFE。当‘CFG_DONE’信号被断言时,CFE可以设置其配置位,例如,使得上游CFE能够配置。作为配置过程的基本情况,可以在链的末尾包括断言它被配置的配置终端器(例如,图66中的用于LCC 6602的配置终端器6604或用于LCC 6606的配置终端器6608)。
在CFE内部,此位可以用于驱动流控制就绪信号。例如,当配置位被取消断言时,网络控制信号可以自动地被钳位到防止数据流动的值,然而,在PE内,将不对操作或其他动作进行调度。
处理高等待时间配置路径
LCC的一个实施例可以在长距离上驱动信号,例如,通过许多复用器并且利用许多负载。因此,信号可能难以在短时钟周期内到达遥远的CFE。在某些实施例中,配置信号处于主(例如,CSA)时钟频率的某个分频(例如,分数)下以在配置时确保数字定时规程。时钟分频可以被用在带外信令协议中,而不需要对主时钟树进行任何修改。
在配置期间确保一致结构行为
因为某些配置方案是分布式的,并且由于程序和存储器效果而具有非确定性定时,所以可以在不同的时间配置结构的不同的部分。结果,CSA的某些实施例提供用以防止配置的CFE和未配置的CFE当中的不一致操作的机制。一般地,一致性被视为CFE本身所需要的并且由CFE本身维护的属性,例如,使用内部CFE状态进行的。例如,当CFE处于未配置状态时,它可以宣称其输入缓冲器为满,并且其输出无效。当被配置时,这些值将被设置为缓冲器的真实状态。随着足够的结构由配置产生,这些技术可以许可它开始操作。这具有进一步减少上下文切换等待时间的效果,例如,如果长等待时间存储器请求被很早发出的话。
可变宽度配置
不同的CFE可以具有不同的配置字宽度。对于较小的CFE配置字,实施者可以通过跨越网络线公正地指派CFE配置加载来使延迟平衡。为了使网络线上的加载平衡,一个选项是将配置位指派给网络线的不同部分以限制任何一条线上的净延迟。可以通过使用序列化/反序列化技术来处理宽数据字。可以在每结构基础上进行这些决定以优化特定CSA(例如,结构)的行为。网络控制器(例如,网络控制器6610和网络控制器6612中的一个或多个)可以与CSA(例如,结构)的每个域(例如,子集)进行通信,例如,以向一个或多个LCC发送配置信息。网络控制器可以是通信网络的部分(例如,与电路交换网络分开)。网络控制器可以包括网络数据流端点电路。
6.2用于CSA的低等待时间配置并且用于为CSA及时地取出配置数据的微架构
CSA的实施例可以是使用户应用加速的高能效且高性能手段。当考虑程序(例如,其数据流图)是否可以被加速器成功地加速时,可以考虑用以配置加速器的时间和用以运行程序的时间两者。如果运行时间短,则配置时间可以在确定成功加速时起到大作用。因此,为了使可加速程序的域最大化,在一些实施例中,配置时间变得尽可能短。可以在CSA中包括一个或多个配置高速缓存,例如,使得高带宽、低等待时间存储使得能够实现快速重配置。接下来是配置高速缓存的若干实施例的描述。
在一个实施例中,在配置期间,配置硬件(例如,LCC)可选地访问配置高速缓存以获得新配置信息。配置高速缓存可以作为传统基于地址的高速缓存或者在OS管理模式下操作,在该OS管理模式下配置被存储在本地地址空间中并且通过参考该地址空间来寻址。如果配置状态位于高速缓存中,则在某些实施例中将不对后备暂存器做出请求。在某些实施例中,此配置高速缓存与存储器层次中的任何(例如,更低级)共享高速缓存分离。
图69图示了根据本公开的实施例的包括处理元件阵列、配置高速缓存(例如,6918或6920)和本地配置控制器(例如,6902或6906)的加速器块片6900。在一个实施例中,配置高速缓存6914与本地配置控制器6902位于一处。在一个实施例中,配置高速缓存6918位于本地配置控制器6906的配置域中,例如,其中第一域以配置终端器6904结束并且第二域以配置终端器6908结束)。配置高速缓存可以允许本地配置控制器可以在配置期间参考配置高速缓存,例如,以期与参考存储器相比以更低等待时间获得配置状态。配置高速缓存(存储装置)可以是专用的或者可以作为结构内存储元件(例如,本地高速缓存6916)的配置模式被访问。
高速缓存模式
1. 需求高速缓存 - 在这种模式下,配置高速缓存作为真实高速缓存来操作。配置控制器发出基于地址的请求,其对照高速缓存中的标记被检查。未命中被加载到高速缓存中,然后可以在将来的重新编程期间被重新引用。
2. 结构内存储(便笺式存储器)高速缓存 - 在这种模式下配置高速缓存在它自己的小地址空间而不是主机的更大地址空间中接收对配置序列的引用。这可以提高存储器密度,因为用于存储标记的高速缓存的部分可以替代地用于存储配置。
在某些实施例中,配置高速缓存可以具有例如通过外部方向或内部方向预先加载到它中的配置数据。这可以允许减少加载程序的等待时间。本文中的某些实施例提供到配置高速缓存的接口,例如,即使配置已经正在结构中运行,该接口也许可将新配置状态加载到高速缓存中。此加载的发起可以从内部或外部源发生。预先加载机制的实施例通过从配置路径中去除高速缓存加载的等待时间来进一步减少等待时间。
预取模式
1.显式预取 - 配置路径被扩增有新命令ConfigurationCachePrefetch。不是对结构进行编程,而是此命令简单地将相关程序配置加载到配置高速缓存中,而无需对结构进行编程。因为此机制搭载在现有的配置基础设施上,所以它既在结构内也在外部暴露,例如,暴露给访问存储器空间的核心和其他实体。
2. 隐式预取 - 全局配置控制器可以维护预取预测器,并且使用这个来例如以自动化方式发起对配置高速缓存的显式预取。
6.3用于响应于异常对CSA快速重配置的硬件
CSA(例如,空间结构)的某些实施例包括大量的指令和配置状态,例如,其在CSA的操作期间大半是静态的。因此,配置状态可能易受软错误的影响。对这些软错误的快速无误恢复对于空间系统的长期可靠性和性能而言可能是至关重要的。
本文中的某些实施例提供快速配置恢复回路,例如,其中配置错误被检测并且结构的各部分立即重配置。本文中的某些实施例包括例如具有可靠性、可用性和可服务性(RAS)重新编程特征的配置控制器。CSA的某些实施例包括用于空间结构内的高速配置、错误报告和奇偶校验的电路。使用这三个特征的组合以及可选地配置高速缓存,配置/异常处理电路可以从配置中的软错误恢复。当被检测到时,软错误可以被传达给配置高速缓存,该配置高速缓存发起对结构的(例如,该部分)的立即重配置。某些实施例提供专用重配置电路,例如,其比将在结构中间接地实现的任何解决方案都快。在某些实施例中,位于一处的异常和配置电路协作以在配置错误检测时重新加载结构。
图70图示了根据本公开的实施例的包括处理元件阵列以及具有重配置电路(7018、7022)的配置和异常处理控制器(7002、7006)的加速器块片7000。在一个实施例中,当PE通过其本地RAS特征检测到配置错误时,它通过其异常生成器来向配置和异常处理控制器(例如,7002或7006)发送(例如,配置错误或重配置错误)消息。在接收到此消息时,配置和异常处理控制器(例如,7002或7006)发起位于一处的重配置电路(例如,分别为7018或7022)以重新加载配置状态。配置微架构继续并重新加载(例如,仅)配置状态,并且在某些实施例中,仅针对报告RAS错误的PE的配置状态。在重配置完成时,结构可以恢复正常操作。为了减小等待时间,由配置和异常处理控制器(例如,7002或7006)使用的配置状态可以源自配置高速缓存。作为配置或重配置过程的基本情况,可以在链的末尾包括断言它被配置(或者重配置)的配置终端器(例如,图70中的用于配置和异常处理控制器7002的配置终端器7004或用于配置和异常处理控制器7006的配置终端器7008)。
图71图示了根据本公开的实施例的重配置电路7118。重配置电路7118包括用以存储配置状态(或到其的指针)的配置状态寄存器7120。
7.4 用于结构发起的对CSA重配置的硬件
把CSA(例如,空间阵列)作为目标的应用的一些部分可以被不频繁地运行或者可以与程序的其他部分相互排斥。为了节省面积,为了改进性能和/或降低功率,在程序数据流图的若干不同部分当中时间复用空间结构的各部分可以是有用的。本文中的某些实施例包括CSA(例如,经由空间程序)可以用来请求对结构的一部分进行重新编程的接口。这可以使得CSA能够根据动态控制流动态地改变它自己。本文中的某些实施例允许结构发起的重配置(例如,重新编程)。本文中的某些实施例提供用于从结构内触发配置的一组接口。在一些实施例中,PE基于程序数据流图中的某个决定发出重配置请求。此请求可以游遍网络到我们的新配置界面,在那里它触发重配置。一旦重配置完成,就可以可选地返回通知完成的消息。CSA的某些实施例因此提供程序(例如,数据流图)定向重配置能力。
图72图示了根据本公开的实施例的包括处理元件阵列以及具有重配置电路7218的配置和异常处理控制器7206的加速器块片7200。在这里,结构的一部分向例如配置和异常处理控制器7206和/或重配置电路7218的配置域发出对(重)配置的请求。域(重)配置它自己,并且当已经满足请求时,配置和异常处理控制器7206和/或重配置电路7218向结构发出响应,以通知结构该(重)配置完成。在一个实施例中,配置和异常处理控制器7206和/或重配置电路7218在(重)配置正在进行的时间期间禁用通信,所以程序在操作期间没有一致性问题。
配置模式
按地址配置 - 在这种模式下,结构做出要从特定地址加载配置数据的直接请求。
按参考配置 - 在这种模式下,结构例如通过预定参考ID来做出要加载新配置的请求。这可以简化要加载的代码的确定,因为代码的位置已被抽象。
配置多个域
CSA可以包括更高级配置控制器以支持多播机制来将配置请求投射(例如,经由通过虚线框指示的网络)到多个(例如,分布式或本地的)配置控制器。这可以使得能够跨越结构的更大部分复制单个配置请求,例如,触发广泛的重配置。
6.5异常聚合器
CSA的某些实施例也可能经历异常(例如,异常状况),例如,浮点下溢。当发生这些状况时,可以调用特殊处理程序来校正程序或者终止程序。本文中的某些实施例提供用于处理空间结构中的异常的系统级架构。因为某些空间结构强调面积效率,所以本文中的实施例使总面积最小化,同时提供一般异常机制。本文中的某些实施例提供发信号通知在CSA(例如,空间阵列)内发生的异常状况的低面积手段。本文中的某些实施例提供用于传达此类异常的接口和信令协议,以及PE级异常语义。本文中的某些实施例是专用异常处理能力,例如,并且不需要由程序设计员显式处理。
CSA异常架构的一个实施例由例如图73-74中所示的四个部分构成。这些部分可以被按层次布置,其中异常从生产者流出,并且最终到达可以与例如核心的异常服务程序会合的块片级异常聚合器(例如,处理程序)。该四个部分可以是:
1. PE异常生成器
2. 本地异常网络
3. 夹层异常聚合器
4. 块片级异常聚合器。
图73图示了根据本公开的实施例的包括处理元件阵列和耦合到块片级异常聚合器7304的夹层异常聚合器7302的加速器块片7300。图74图示了根据本公开的实施例的具有异常生成器7444的处理元件7400。
PE异常生成器
处理元件7400可以包括来自图9的处理元件900,例如,其中类似的数字是类似的组件,例如,本地网络902和本地网络7402。附加网络7413(例如,通道)可以是异常网络。PE可以实现到异常网络(例如,图74上的异常网络7413(例如,通道))的接口。例如,图74示出了这种接口的微架构,其中PE具有异常生成器7444(例如,发起异常有限状态机(FSM)7440以将异常分组(例如,BOXID 7442)选通输出到异常网络。BOXID 7442可以是本地异常网络内的异常产生实体(例如,PE或盒)的唯一标识符。当检测到异常时,异常生成器7444感测异常网络并且在网络被发现为空闲时选通输出BOXID。异常可以是由许多状况引起的,例如但不限于算术错误、对状态的失败ECC校验等。然而,也可能是异常数据流操作被引入,其想法是支持像断点这样的构造。
异常的发起可以通过执行程序设计员供应的指令来显式地发生,或者在检测到强化错误状况(例如,浮点下溢)时隐式地发生。在异常时,PE 7400可以进入等待状态,在该等待状态下它等待被例如在PE 7400外部的最终异常处理程序服务。如下所述,异常分组的内容取决于特定PE的实现方式。
本地例外网络
(例如,本地)异常网络将异常分组从PE 7400引导到夹层异常网络。异常网络(例如,7413)可以是由(例如,单条)控制线和一条或多条数据线构成的串行分组交换网络,例如,按照环形或树形拓扑组织的,例如,针对PE的子集。每个PE可以在(例如,本地)异常网络中具有(例如,环形)站点,例如,其中它可以仲裁以将消息注入到异常网络中。
需要注入异常分组的PE端点可以观察其本地异常网络出口点。如果控制信号指示忙,则PE将等待开始注入其分组。如果网络不忙,即,下游站点没有分组要转发,则PE将继续开始注入。
网络分组可以是可变或固定长度的。每个分组可以以标识该分组的源PE的固定长度报头字段开始。这个后面是可变数量的包含信息的PE特定字段,例如,包括错误代码、数据值或其他有用的状态信息。
夹层异常聚合器
夹层异常聚合器7304负责将本地异常网络组装成更大分组,并且将它们发送到块片级异常聚合器7302。夹层异常聚合器7304可以预先挂起具有它自己的唯一ID的本地异常分组,例如,确保异常消息是不含糊的。夹层异常集合器7304可以与夹层网络中的特殊仅异常虚拟通道对接,例如,确保异常的死锁自由度。
夹层异常聚合器7304也可以能够直接地为某些类别的异常服务。例如,可以使用夹层网络站点本地的高速缓存来从夹层网络中服务来自结构的配置请求。
块片级异常聚合器
异常系统的最后级是块片级异常聚合器7302。块片级异常聚合器7302负责收集来自各种夹层级异常聚合器(例如,7304)的异常并且将它们转发到适当的服务硬件(例如,核心)。因此,块片级异常聚合器7302可以包括一些内部表和控制器以使特定消息与处理程序例程相关联。可以直接地或者利用小型状态机为这些表编索引以便引导特定异常。
像夹层异常聚合器一样,块片级异常聚合器可以为一些异常请求服务。例如,它可以响应于特定异常而发起对PE结构的大部分的重新编程。
6.6提取控制器
CSA的某些实施例包括用以从结构中提取数据的(一个或多个)提取控制器。下面讨论如何快速地实现这种提取并且如何使数据提取的资源开销最小化的实施例。数据提取可以被用于如异常处理和上下文切换这样的关键任务。本文中的某些实施例通过引入允许提取具有可变且动态可变量的状态的可提取结构元件(EFE)(例如,PE、网络控制器和/或开关)的特征来从异构空间结构中提取数据。
CSA的实施例包括分布式数据提取协议和用以支持此协议的微架构。CSA的某些实施例包括多个本地提取控制器(LEC),其使用一(例如,小)组控制信号和结构提供的网络的组合来从空间结构的其本地区域中流式传输程序数据。可以在每个可提取结构元件(EFE)处使用状态元素来形成提取链,例如,允许个体EFE在没有全局寻址的情况下自我提取。
CSA的实施例不使用本地网络来提取程序数据。CSA的实施例包括例如用于形成提取链的特定硬件支持(例如,提取控制器),而不依靠软件来动态地建立这些链,例如,以增加提取时间为代价。CSA的实施例不是纯粹分组交换的,并且确实包括额外的带外控制线(例如,不通过需要额外周期的数据路径来发送控制,以选通此信息并使其重新序列化)。CSA的实施例通过固定提取排序并且通过提供显式带外控制(例如,按至少两倍)来减小提取等待时间,同时不显著地增加网络复杂度。
CSA的实施例不将串行机制用于数据提取,其中数据使用类似JTAG的协议来从结构逐比特流式传输。CSA的实施例利用粗粒度结构方法。在某些实施例中,将几条控制线或状态元素添加到面向64或32位CSA结构相对于将那些相同的控制机制添加到4或6位结构具有更低的成本。
图75图示了根据本公开的实施例的包括处理元件阵列和本地提取控制器(7502、7506)的加速器块片7500。每个PE、每个网络控制器和每个开关可以是例如通过CSA架构的实施例来配置(例如,编程)的可提取结构元件(EFE)。
CSA的实施例包括从异构空间结构提供高效的、分布式、低等待时间提取的硬件。可以根据四种技术来实现这一点。首先,例如,如在图75-77中一样,硬件实体本地提取控制器(LEC)被利用。LEC可以接受来自主机(例如,处理器核心)的命令,例如,从空间阵列中提取数据的流,并且将此数据写回到虚拟存储器以由主机检查。第二,可以包括提取数据路径,例如,其和PE结构的本机宽度一样宽并且可以被覆盖在PE结构之上。第三,可以将新控制信号接收到编排提取过程的PE结构中。第四,状态元素可以(例如,在寄存器中)位于每个可配置端点处,该每个可配置端点跟踪相邻EFE的状态,允许每个EFE在没有额外的控制信号的情况下不含糊地导出其状态。这四种微架构特征可以允许CSA从EFE的链中提取数据。为了获得低数据提取等待时间,某些实施例可以通过在结构中包括多个(例如,许多)LEC和EFE链来分割提取问题。在提取时间,这些链可以独立地操作以并行地从结构中提取数据,例如,显著地减少等待时间。作为这些组合的结果,CSA可以实行完整状态转储(例如,在几百纳秒中)。
图76A-76C图示了根据本公开的实施例的配置数据路径网络的本地提取控制器7602。描绘的网络包括可以(例如,经由其相应的控制信号)被配置成将一个或多个数据路径(例如,从PE起)连接在一起的多个复用器(例如,复用器7606、7608、7610)。图76A图示了为某个先前的操作或程序而配置(例如,设置)的网络7600(例如,结构)。图76B图示了选通提取信号的本地提取控制器7602(例如,包括发送和/或接收信号的网络接口电路7604)并且由LEC控制的所有PE进入提取模式。提取链(或提取终端器)中的最后PE可以根据(1)来自LEC的信号或(2)在内部产生的信号(例如,来自PE的信号)来控制提取通道(例如,总线)和正在发送的数据。一旦完成,PE就可以设置其完成标志,例如,使得下一个PE能够提取其数据。图76C图示了最遥远的PE已完成提取过程并且结果它已设置其一个或多个提取状态位,例如,其将复用器摆动到相邻网络中以使得下一个PE能够开始提取过程。所提取的PE可以恢复正常操作。在一些实施例中,PE可以保持被禁用直到采取了其他动作为止。在这些图中,复用器网络是某些图(例如,图6)中所示的“开关”的类似物。
以下部分描述提取网络的实施例的各种组件的操作。
本地提取控制器
图77图示了根据本公开的实施例的提取控制器7702。本地提取控制器(LEC)可以是负责接受提取命令、与EFE一起协调提取过程和/或将所提取的数据存储到例如虚拟存储器的硬件实体。以这个身份,LEC可以是专用顺序微控制器。
LEC操作可以在它接收到将写入结构状态的缓冲器(例如,在虚拟存储器中)的指针以及可选地控制多少结构将被提取的命令时开始。取决于LEC微架构,此指针(例如,存储在指针寄存器7704中)可以在网络上或者通过对LEC的存储器系统访问而出现。当它接收到这种指针(例如,命令)时,LEC继续从它负责的结构的部分中提取状态。LEC可以将此从结构中提取的数据流式传输到由外部调用者提供的缓冲器中。
在图75中示出了用于LEC的两个不同的微架构。第一个将LEC 7502放置在存储器接口处。在这种情况下,LEC可以对存储器系统做出要写入所提取的数据的直接请求。在第二种情况下,LEC 7506被放置在存储器网络上,在该存储器网络中它可以仅间接地对存储器做出请求。在两种情况下,LEC的逻辑操作可以不变。在一个实施例中,例如,通过一组(例如,OS可见的)控制状态寄存器,LEC被通知要从结构中提取数据的期望,该控制状态寄存器将用于向个体LEC通知新命令。
额外的带外控制通道(例如,线)
在某些实施例中,提取依靠2-8个额外的带外信号来改进配置速度,如在下面所定义的那样。由LEC驱动的信号可以被标记为LEC。由EFE(例如,PE)驱动的信号可以被标记为EFE。配置控制器7702可以包括以下控制通道,例如,LEC_EXTRACT控制通道7806、LEC_START控制通道7708、LEC_STROBE控制通道7710和EFE_COMPLETE控制通道7712,其中在下表3中对每个的示例进行讨论。
表3:提取通道
LEC_EXTRACT | 由LEC在提取过程期间断言的可选信号。降低此信号使正常操作恢复。 |
LEC_START | 表示提取的开始的信号,允许建立本地EFE状态 |
LEC_STROBE | 用于控制EFE处的提取相关状态机的可选选通信号。EFE可以在一些实现方式中在内部生成此信号。 |
EFE_COMPLETE | 当EFE已完成转储状态时选通的可选信号。这帮助LEC标识个体EFE转储的完成。 |
一般地,提取的处理可以被留给特定EFE的实施者。例如,可选功能EFE可以具有用于使用现有数据路径来转储寄存器的预防措施,而固定功能EFE可能简单地具有复用器。
由于当对一大组EFE进行编程时的长线延迟,LEC_STROBE信号可以被视为用于EFE组件的时钟/锁存使能。因为此信号被用作时钟,所以在一个实施例中,线路的占空比最多为50%。结果,提取吞吐量近似地减半。可选地,可以添加第二LEC_STROBE信号以使得能够实现连续提取。
在一个实施例中,在独立耦合(例如,线)上严格地传送仅LEC_START,例如,其他控制通道可以被覆盖在现有网络(例如,线)上。
网络资源的重用
为了减少数据提取的开销,CSA的某些实施例利用现有网络基础设施来传送提取数据。LEC可以利用芯片级存储器层次和结构级通信网络两者来将数据从结构移动到存储装置中。结果,在CSA的某些实施例中,提取基础设施对总体结构面积和功率添加不多于2%。
CSA的某些实施例中的网络资源的重用可以使网络对于提取协议具有某种硬件支持。当‘LEC_START’信号被断言时,CSA的某些实施例的电路交换网络需要使得LEC针对配置以特定方式设置其复用器。分组交换网络可能不需要扩展,但是LEC端点(例如,提取终端器)在分组交换网络中使用特定地址。网络重用是可选的,并且一些实施例可以发现专用配置总线是更方便的。
每EFE状态
每个EFE可以维护表示它是否已导出其状态的位。此位可以在提取开始信号被驱动时取消断言,然后一旦特定EFE结束提取就被断言。在一个提取协议中,EFE被布置成形成链,同时EFE提取状态位确定该链的拓扑。EFE可以读取紧邻EFE的提取状态位。如果此相邻EFE使其提取位置位并且当前EFE未使其提取位置位,则EFE可以确定它拥有提取总线。当EFE转储其最后数据值时,它可以驱动‘EFE_DONE’信号,并且设置其提取位,例如,使得上游EFE能够进行配置以用于提取。与EFE相邻的网络可以观察此信号,并且也调整其状态以处理转变。作为提取过程的基本情况,可以在链的末尾包括断言提取完成的提取终端器(例如,图66中的用于LEC 7502的提取终端器7504或用于LEC 7506的提取终端器7508)。
在EFE内部,此位可以被用来驱动流控制就绪信号。例如,当提取位被取消断言时,网络控制信号可以自动地被钳位到防止数据流动的值,然而,在PE内,将不对操作或动作进行调度。
处理高延迟路径
LEC的一个实施例可以例如通过许多复用器并且利用许多负载来在长距离上驱动信号。因此,信号可能难以在短时钟周期内到达遥远的EFE。在某些实施例中,提取信号处于主(例如,CSA)时钟频率的某个分频(例如,分数)下以在提取时确保数字定时规程。时钟分频可以被用在带外信令协议中,并且不需要对主时钟树进行任何修改。
在提取期间确保一致结构行为
因为某些提取方案是分布式的,并且由于程序和存储器效果而具有非确定性定时,所以结构的不同成员可能在不同的时间处于提取之下。在LEC_EXTRACT被驱动的同时,所有网络流控制信号可以被驱动为逻辑上为低,例如,因此冻结了结构的特定部分的操作。
提取过程可以是非破坏性的。因此一旦提取已完成,一组PE就可以被认为是可操作的。对提取协议的扩展可以允许PE可选地在提取后被禁用。替换地,在提取过程期间开始配置在实施例中将具有类似的效果。
单个PE提取
在一些情况下,提取单个PE可能是有利的。在这种情况下,可选地址信号可以作为提取过程的开始的一部分被驱动。这可以使得针对提取的PE能够被直接地启用。一旦此PE已被提取,提取过程就可以随着LEC_EXTRACT信号的降低而停止。以这种方式,可以例如通过本地提取控制器来选择性地提取单个PE。
处理提取反压
在其中LEC将提取的数据写入到存储器(例如,以用于后处理,例如,在软件中)的实施例中,它可以经受有限的存储器带宽。在LEC耗尽其缓冲容量或者预期它将耗尽其缓冲容量的情况下,它可能停止选通LEC_STROBE信号直到缓冲问题已解决为止。
注意的是,在某些图(例如,图66、图69、图70、图72、图73和图75)中示意性地示出了通信。在某些实施例中,那些通信可以发生在(例如,互连)网络上。
6.7流程图
图78图示了根据本公开的实施例的流程图7800。描绘的流程7800包括:利用处理器的核心的解码器将指令解码成解码的指令7802;利用处理器的核心的执行单元执行解码的指令以实行第一操作7804;接收包括多个节点的数据流图的输入7806;将数据流图覆盖到处理器的处理元件阵列中,其中每个节点被表示为处理元件阵列中的数据流操作符7808;以及当传入操作数集到达处理元件阵列时,利用处理元件阵列实行数据流图的第二操作7810。
图79图示了根据本公开的实施例的流程图7900。描绘的流程7900包括:利用处理器的核心的解码器将指令解码成解码的指令7902;利用处理器的核心的执行单元执行解码的指令以实行第一操作7904;接收包括多个节点的数据流图的输入7906;将数据流图覆盖到处理器的多个处理元件和处理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理元件中的数据流操作符7908;以及当传入操作数集到达多个处理元件时利用互连网络和多个处理元件实行数据流图的第二操作7910。
6.8存储器
图80A是根据本公开的实施例的采用插入存储器子系统8010与加速硬件8002之间的存储器排序电路8005的系统8000的框图。存储器子系统8010可以包括已知存储器组件,包括高速缓存、存储器以及与基于处理器的架构关联的一个或多个存储器控制器。加速硬件8002可以是粗粒度空间架构,其由通过处理元件(PE)间网络或者另一种类型的组件间网络所连接的轻量级处理元件(或者其他类型的处理组件)所组成。
在一个实施例中,被视为控制数据流图的程序通过配置PE和通信网络来映射到空间架构上。通常,PE被配置为数据流操作符,其与处理器中的功能单元相似:一旦输入操作数到达PE,就发生某个操作,并且结果以流水线方式转发到下游PE。数据流操作符(或其他类型的操作符)可以选择在每操作符的基础上消耗传入数据。比如处理算术表达式的无条件评估的操作符等的简单操作符常常消耗全部传入数据。然而,操作符例如在累加中维持状态有时是有用的。
PE使用专用虚拟电路(其通过静态地配置电路切换通信网络而形成)进行通信。这些虚拟电路是流控制和完全反压的,使得如果源没有数据或者目的地是满的时,PE就将停顿。在运行时,数据流经根据数据流图实现映射算法的PE,也在本文中被称为子程序。例如,数据可以从存储器流入,通过加速硬件8002,然后往回流出到存储器。这种架构可以相对于传统多核处理器实现显著的性能效率:形式为PE的计算可以比更大核心更简单且更多,并且通信是直接的,如与存储器系统8010的扩展相反。然而,存储器系统并行性帮助支持并行PE计算。如果存储器访问被串行化,则高并行性很可能不可取得。为了便于存储器访问的并行性,所公开的存储器排序电路8005包括存储器排序架构和微架构,如将详细解释的。在一个实施例中,存储器排序电路8005是请求地址堆电路(或“RAF”)或其他存储器请求电路。
图80B是根据本公开的实施例的改为采用多个存储器排序电路8005的图80A的系统8000的框图。每个存储器排序电路8005可以起作用作为存储器子系统8010与加速硬件8002的一部分(例如,处理元件的空间阵列或块片)之间的接口。存储器子系统8010可以包括多个高速缓存层面12(例如,图80B的实施例中的高速缓存层面12A、12B、12C和12D),以及一定数量的存储器排序电路8005(这个实施例中为四个)可以被用于每个高速缓存层面12。交叉杆8004(例如,RAF电路)可以将存储器排序电路8005连接到高速缓存的存储体(其组成每个高速缓存层面12A、12B、12C和12D)。例如,在一个实施例中,每个高速缓存层面中可以有八个存储器的存储体。系统8000可以在例如作为片上系统(SoC)的单个管芯上例示。在一个实施例中,SoC包括加速硬件8002。在替换的实施例中,加速硬件8002是外部可编程芯片(诸如FPGA或CGRA),并且存储器排序电路8005通过输入/输中枢等等与加速硬件8002对接。
每个存储器排序电路8005可以接受对存储器子系统8010的读和写请求。来自加速硬件8002的请求在数据流图的每个节点(其发起读和写访问,在本文中也被称为加载或存储访问)的单独通道中到达存储器排序电路8005。提供缓冲,以使得加载的处理将按照它被请求的次序将所请求的数据返回给加速硬件8002。换言之,迭代六数据在迭代七数据之前返回,以此类推。此外要注意,从存储器排序电路8005到特定的高速缓存存储体的请求通道可以被实现为有序通道,以及在第二请求之前离开的任何第一请求将在第二请求之前到达高速缓存存储体。
图81是图示了根据本公开的实施例的入/出加速硬件8002的存储器操作的一般功能的框图8100。从加速硬件8002的顶部发生的操作被理解为向和从存储器子系统8010的存储器进行。注意的是,进行两个加载请求,之后接着对应的加载响应。在加速硬件8002对来自加载响应的数据实行处理的同时,第三加载请求和响应发生,这触发了附加的加速硬件处理。这三个加载操作的加速硬件处理的结果然后传递到加载操作中,因此最终结果被往回存储到存储器。
通过考虑操作的这个序列,显而易见的是,空间阵列更自然映射到通道。另外,加速硬件8002在请求和响应通道以及可能发生的固有并行处理方面是等待时间不敏感的。加速硬件还可以将程序的执行与存储器子系统8010的实现解耦(图80A),因为与存储器进行对接在与加速硬件8002所采取的多个处理步骤分离的离散时刻发生。例如,对存储器的加载请求以及来自存储器的加载响应是独立的动作,并且可以取决于存储器操作的相关性流程在不同的情况下不同地调度。例如,空间结构针对处理指令的使用便于这样的加载请求和加载响应的空间分离和分布。
图82是图示了根据本公开的实施例的存储操作8201的空间相关性流程的框图8200。对存储操作的参考是示范性的,因为相同的流程可以适用于加载操作(但是没有传入数据)或者适用于其他操作符(诸如,围栏(fence))。围栏是存储器子系统的排序操作,其确保一类型的全部先前存储器操作(诸如,全部存储或全部加载)已经完成。存储操作8201可以接收(存储器的)地址8202以及从加速硬件8002接收到的数据8204。存储操作8201还可以接收传入相关性令牌8208,以及响应这三个项的可用性,存储操作8201可以生成传出相关性令牌8212。传入相关性令牌(其例如可以是程序的初始相关性令牌)可以按照程序的编译器提供配置来提供,或者可以通过存储器映射输入/输出(I/O)的执行来提供。替换地,如果程序已经正在运行,则传入相关性令牌8208可以例如与先前的存储器操作(存储操作8201取决于该操作)相关联地从加速硬件8002接收。传出相关性令牌8212可以基于程序后续存储器操作所要求的地址8202和数据8204来生成。
图83是根据本公开的实施例的图80A的存储器排序电路8005的详细框图。存储器排序电路8005可以耦合到所讨论的无序存储器子系统8010,该无序存储器子系统可以包括高速缓存12和存储器18,以及相关联的(一个或多个)无序存储器控制器。存储器排序电路8005可以包括或可以耦合到通信网络接口20,其可以是块片间或块片内网络接口,并且可以是电路切换网络接口(如图示的),因此包括电路切换互连。替换地或附加地,通信网络接口20可以包括分组切换互连。
存储器排序电路8005可以进一步包括但不限于存储器接口8310、操作队列8312、(一个或多个)输入队列8316、完成队列8320、操作配置数据结构8324和操作管理器电路8330,该操作管理器电路可以进一步包括调度器电路8332和执行电路8334。在一个实施例中,存储器接口8310可以是电路切换的,以及在另一个实施例中,存储器接口8310可以是分组切换的,或者两者可以同时存在。操作队列8312可以缓冲存储器操作(具有对应的变元),针对请求来处理这些存储器操作,并且因此可以对应于进入到输入队列8316中的地址和数据。
更具体来说,输入队列8316可以是至少以下各项的聚合:加载地址队列、存储地址队列、存储数据队列和相关性队列。当将输入队列8316实现为是聚合的时,存储器排序电路8005可以提供逻辑队列与附加控制逻辑的共享,以便使队列在逻辑上分离,其是具有存储器排序电路的个体通道。这可以使输入队列使用最大化,但是还可以要求逻辑电路的附加复杂度和空间以管理聚合队列的逻辑分离。替换地,如将参照图84讨论的,输入队列8316可以按照分离的方式来实现,其中每个具有单独的硬件队列。无论是聚合的(图83)还是分解的(图84),出于本公开的目的的实现方式基本上相同,其中前者使用附加逻辑在逻辑上分离单个共享硬件队列内的队列。
当共享时,输入队列8316和完成队列8320可以被实现为固定大小的环形缓冲器。环形缓冲器是具有先进先出(FIFO)数据特性的循环队列的有效实现方式。因此,这些队列可以增强对其请求存储器操作的程序的语义次序。在一个实施例中,环形缓冲器(诸如针对存储地址队列的)可以具有以相同速率的与流经关联队列(诸如存储数据队列或相关性队列)的条目相对应的条目。以这种方式,存储地址可以保持与对应的存储数据相关联。
更具体来说,加载地址队列可以缓冲存储器18(从其中检索数据)的传入地址。存储地址队列可以缓冲存储器18(对其写入数据)的传入地址,其在存储数据队列中缓冲。相关性队列可以与加载地址队列和存储地址队列的地址相关联地缓冲相关性令牌。每个队列(表示独立通道)可以用固定或动态数量的条目来实现。当固定时,可用的条目越多,就可以使复杂的循环处理更有效。但是,具有过多条目花费更多面积和能量来实现。在一些情况下,例如,利用聚合架构,所公开的输入队列8316可以共享队列时隙。对队列中的时隙的使用可以被静态地指派。
完成队列8320可以是队列的单独集合,以响应于由加载操作发出的存储器命令来缓冲从存储器接收到的数据。完成队列8320可以被用来保持加载操作,其已经被调度但是尚未接收到针对其的数据(因此尚未完成)。因此,完成队列8320可以被用来对数据和操作流程重排序。
操作管理器电路8330(其将参照图84至48更详细地解释)可以在考虑被用来提供存储器操作的正确排序的相关性令牌时提供用于调度和执行排队存储器操作的逻辑。操作管理器8330可以访问操作配置数据结构8324,以确定哪些队列被编组在一起以形成给定存储器操作。例如,操作配置数据结构8324可以包括:特定相关性计数器(或队列)、输入队列、输出队列和完成队列针对特定的存储器操作而被全部编组在一起。由于每个连续存储器操作可以被指派一组不同队列,所以对变化队列的访问可以跨存储器操作的子程序来交错。了解全部这些队列,操作管理器电路8330可以与操作队列8312、(一个或多个)输入队列8316、(一个或多个)完成队列8320和存储器子系统8010对接,以便当连续存储器操作成为“可执行”时向存储器子系统8010首先发布存储器操作,以及随后在具有来自存储器子系统的某个确认的情况下完成存储器操作。这个确认可以是例如响应于加载操作命令的数据或者是响应于存储操作命令而存储在存储器中的数据的确认。
图84是根据本公开的实施例的图80A的存储器排序电路8005的微架构8400的流程图。存储器子系统8010可以允许程序的不合法执行,其中存储器操作的排序由于C语言(和其他面向对象的程序语言)的语义而是错误的。微架构8400可以增强存储器操作的排序(从存储器加载和向存储器存储的序列),使得加速硬件8002执行的指令的结果正确排序。多个本地网络50被图示为表示耦合到微架构8400的加速硬件8002的一部分。
从架构角度来看,存在至少两个目标:首先,正确运行一般顺序代码,以及其次,获得微架构8400所实行的存储器操作中的高性能。为了确保程序正确性,编译器按照某种方式将存储操作与加载操作之间的相关性表达为数组p,其经由相关性令牌来表达,如将进行解释的。为了改进性能,微架构8400并行地查找和发布与针对程序次序是合法的同样多的数组的加载命令。
在一个实施例中,微架构8400可以包括以上参照图83所讨论的操作队列8312、输入队列8316、完成队列8320和操作管理器电路8330,其中个体队列可以被称为通道。微架构8400可以进一步包括多个相关性令牌计数器8414(例如,每输入队列一个)、相关性队列8418的集合(例如,每输入队列一个)、地址复用器8432、存储数据复用器8434、完成队列索引复用器8436和加载数据复用器8438。在一个实施例中,操作管理器电路8330可以在生成存储器命令8450(以便发送给存储器子系统8010)时以及在接收往回来自存储器子系统8010的加载命令的响应时指导这些各种复用器,如将进行解释的。
如提到的,输入队列8316可以包括加载地址队列8422、存储地址队列8424和存储数据队列8426。(小编号0、1、2是通道标签,并且稍后将在图87和图90A中提到。)在各个实施例中,这些输入队列可以相乘,以得到附加通道,以便处理存储器操作处理的附加并行化。每个相关性队列8418可以与输入队列8316之一相关联。更具体来说,标记为B0的相关性队列8418可与以加载地址队列8422相关联,以及标记为B1的相关性队列可以与存储地址队列8424相关联。如果提供输入队列8316的附加通道,则相关性队列8418可以包括附加的对应通道。
在一个实施例中,完成队列8320可以包括输出缓冲器8444和8446的集合,以用于接收来自存储器子系统8010和完成队列8442的加载数据,以便根据操作管理器电路8330所维持的索引来缓冲加载操作的地址和数据。操作管理器电路8330可以管理索引,以确保加载操作的有序执行,以及识别接收到输出缓冲器8444和8446中的数据,其可以被移动到完成队列8442中的调度加载操作。
更具体来说,因为存储器子系统8010是无序的,但是加速硬件8002有序完成操作,所以微架构8400可以通过使用完成队列8442对存储器操作重排序。三个不同子操作可以相对于完成队列8442来实行,即,分配、入队和出队。对于分配,操作管理器电路8330在完成队列的有序下一个时隙中可以将索引分配到完成队列8442。操作管理器电路可以将这个索引提供给存储器子系统8010,其然后可以知道对加载操作要写入数据的时隙。为了入队,存储器子系统8010可以将数据作为条目写到完成队列8442(比如随机存取存储器(RAM))中的索引有序下一个时隙,从而将条目的状态位设置成有效。为了出队,操作管理器电路8330可以呈现这个有序下一个时隙中存储的数据,以完成加载操作,从而将条目的状态位设置成无效。无效条目然后可以可用于新分配。
在一个实施例中,状态信号8348可以指代输入队列8316、完成队列8320、相关性队列8418和相关性令牌计数器8414的状态。这些状态例如可以包括输入状态、输出状态和控制状态,其可以指代与输入或输出关联的相关性令牌的存在或不存在。输入状态可以包括地址的存在或不存在,以及输出状态可以包括存储值和可用完成缓冲器时隙的存在或不存在。相关性令牌计数器8414可以是队列的紧凑表示,并且跟踪被用于任何给定输入队列的相关性令牌的数量。如果相关性令牌计数器8414饱和,则没有附加相关性令牌可以对新存储器操作生成。相应地,存储器排序电路8005可以停顿调度新存储器操作,直到相关性令牌计数器8414变为未饱和为止。
附加地参照图85,图85是根据本公开的实施例的可执行确定器电路8500的框图。存储器排序电路8005可以利用不同种类的存储器操作(例如,加载和存储)来建立:
ldNo[d,x]result.outN, addr.in64, order.in0, order.out0
stNo[d,x]addr.in64, data.inN, order.in0, order.out0
可执行确定器电路8500可以作为调度器电路8332的一部分来集成,并且其可以实行逻辑运算,以确定给定存储器操作是否可执行,因此准备就绪向存储器发布。当与其存储器变元相对应的队列具有数据并且相关联的相关性令牌存在时,可以执行存储器操作。这些存储器变元可以包括例如输入队列标识符8510(指示输入队列8316的通道)、输出队列标识符8520(指示完成队列8320的通道)、相关性队列标识符8530(例如,应当引用哪一个相关性队列或计数器)以及操作类型指示符8540(例如,加载操作或存储操作)。(例如,存储器请求的)字段可以例如按照上述格式被包括,其存储一个或多个位以指示来使用危险检查硬件。
这些存储器变元可以在操作队列8312中排队,并且被用来调度与来自存储器和加速硬件8002的传入地址和数据关联的存储器操作的发布。(参见图86。)传入状态信号8348可以在逻辑上与这些标识符进行组合,然后结果可相加(例如,经过与门8550),以输出可执行信号,例如,其在存储器操作是可执行的时被断言。传入状态信号8348可以包括输入队列标识符8510的输入状态8512、输出队列标识符8520的输出状态8522以及相关性队列标识符8530的控制状态8532(与相关性令牌相关)。
对于加载操作,并且作为示例,存储器排序电路8005可以在加载操作具有地址(输入状态)和缓冲完成队列8442(输出状态)中的加载结果的空间时发布加载命令。类似地,存储器排序电路8005可以在存储操作具有地址和数据值(输入状态)两者时发布存储操作的存储命令。相应地,状态信号8348可以传送状态信号所涉及的队列的空(或满)等级。操作类型然后可以取决于什么地址和数据应当是可用的来规定逻辑是否产生可执行信号。
为了实现相关性排序,调度器电路8332可以将存储器操作扩展成包括如以上在示例加载和存储操作中强调的相关性令牌。控制状态8532可以指示相关性令牌在相关性队列标识符8530所标识的相关性队列内是否可用,其可能是(传入存储器操作的)相关性队列8418或者(完成存储器操作的)相关性令牌计数器8414中的一个。在这个阐述下,相关存储器操作在存储器操作完成时要求附加的排序令牌来执行和生成附加排序令牌,其中完成意味着来自存储器操作的结果的数据变成是程序后续存储器操作可用的。
在一个实施例中,进一步参照图84,操作管理器电路8330可以指导地址复用器8432选择地址变元,其在加载地址队列8422或存储地址队列8424内缓冲,这取决于是加载操作还是存储操作当前正被调度以供执行。如果是存储操作,则操作管理器电路8330还可以指导存储数据复用器8434从存储数据队列8426中选择对应的数据。操作管理器电路8330还可以指导完成队列索引复用器8436检索完成队列8320内的加载操作条目(其根据队列状态和/或程序次序来编索引),以完成加载操作。操作管理器电路8330还可指导加载数据复用器8438选择从存储器子系统8010接收到完成队列8320中的数据,以用于正等待完成的加载操作。以这种方式,操作管理器电路8330可以指导对输入的选择,该输入进入形成存储器命令8450(例如,加载命令或存储命令)或者执行电路8334正等待该输入以完成存储器操作。
图86是根据本公开的一个实施例的执行电路8334的框图,该执行电路可以包括优先级编码器8606和选择电路8608,并且其生成(一条或多条)输出控制线8610。在一个实施例中,执行电路8334可以访问排队存储器操作(在操作队列8312中),其已被确定为可执行(图85)。执行电路8334还可以接收多个排队存储器操作(其已经排队并且还被指示为准备好向存储器发布)的计划表8604A、8604B、8604C。因此,优先级编码器8606可以接收已经调度的可执行存储器操作的识别码,并且执行某些规则(或者沿用特定逻辑)从进入的那些存储器操作中选择具有首先执行的优先级的存储器操作。优先级编码器8606可以输出选择器信号8607,其标识具有最高优先级并且因此已经被选择的所调度的存储器操作。
例如,优先级编码器8606可以是电路(诸如状态机或更简单的转换器),其将多个二进制输入压缩为更少数量的输出,包括有可能仅一个输出。优先级编码器的输出是开始于最高有效输入位的零的原始数值的二进制表示。所以,在一个示例中,存储器操作0(“零”)、存储器操作一(“1”)和存储器操作二(“2”)是可执行的并且被调度,分别对应于8604A、8604B和8604C。优先级编码器8606可以被配置成向选择电路8608输出选择器信号8607,其指示作为具有最高优先级的存储器操作的存储器操作零。在一个实施例中,选择电路8608可以是复用器,并且被配置成响应于来自优先级编码器8606(并且指示对具有最高优先级的存储器操作的选择)的选择器信号而将其(例如,存储器操作零的)选择输出到控制线8610上,作为控制信号。这个控制信号可以去往复用器8432、8434、8436和/或8438(如参照图84所讨论的),以填充存储器命令8450,其随后向存储器子系统8010发布(被发送)。存储器命令的传输可以被理解为存储器操作对存储器子系统8010的发布。
图87是根据本公开的实施例的逻辑上和以二进制形式的示例性加载操作8700的框图。往回参考图85,加载操作8700的逻辑表示可以包括作为输入队列标识符8510的通道零(“0”)(对应于加载地址队列8422)以及作为输出队列标识符8520的完成通道一(“1”)(对应于输出缓冲器8444)。相关性队列标识符8530可以包括两个标识符,即用于传入相关性令牌的通道B0(对应于相关性队列8418的第一个)以及用于传出相关性令牌的计数器C0。操作类型8540具有“Load”的指示,其也可以是数值指示符,以指示该存储器操作是加载操作。在下面,逻辑存储器操作的逻辑表示是出于示例性目的的二进制表示,例如,其中加载通过“00”来指示。图87的加载操作可以扩展成包括其他配置(诸如存储操作(图89A))或者其他类型的存储器操作(诸如围栏)。
由存储器排序电路8005进行的存储器排序的示例将关于图88A-88B、图89A-89B和图90A-90G出于解释的目的以简化的示例图示。对于这个示例,下面的代码包括数组p,其通过指数i和i+2来访问:
对于这个示例,假定数组p包含0、1、2、3、4、5、6,以及在循环执行结束时,数组p将包含0、1、0、1、0、1、0。此代码可以通过展开循环来变换,如图88A和图88B中图示的。地址相关性通过图88A中的箭头标注,其在每种情况下,加载操作与对同一地址的存储操作相关。例如,对于此类相关性的第一个,对p[2]的存储(例如,写入)需要在从p[2]的加载(例如,读取)之前发生,以及对于此类相关性的第二个,对p[3]的存储需要在从p[3]的加载之前发生,依此类推。由于编译器是保守式的,所以编译器标注两个存储器操作(加载p[i]和存储p[i+2])之间的相关性。注意的是,只是有时读取和写入会发生冲突。微架构8400被设计成提取存储器级并行性,其中存储器操作可以在不存在对同一地址的冲突时前移。对加载操作的情况尤其是这样,其由于等待先前的相关存储操作完成而在代码执行时暴露出等待时间。在图88B的示例代码中,安全的重排序由展开代码左边的箭头所示。
参照图89A-89B和图90A-90G来讨论微架构可以实行此重排序的方式。注意的是,这种方式不是尽可能最佳的,因为微架构8400可能不在每一个周期向存储器发送存储器命令。然而,利用最小硬件,微架构通过在操作数(例如,用于存储的地址和数据,或者用于加载的地址)和相关性令牌可用时执行存储器操作,来支持相关性流程。
图89A是根据本公开的实施例的加载操作8902和存储操作8904的示例性存储器变元的框图。关于图87讨论了这些或类似的存储器变元,并且在这里将不再重复。然而,注意的是,存储操作8904没有用于输出队列标识符的指示符,因为没有数据被输出到加速硬件8002。代替地,如输入队列标识符存储器变元所标识的输入队列8316的通道1中的存储地址和通道2中的数据要在存储器命令中被调度用于到存储器子系统8010的传输,以完成存储操作8904。另外,相关性队列的输入通道和输出通道都利用计数器来实现。因为如图88A和图88B中所显示的加载操作和存储操作是相互依赖的,所以计数器可在代码流程之内的加载操作与存储操作之间循环。
图89B是图示了根据本公开的实施例的通过图84的存储器排序电路的微架构8400的加载操作和存储操作(诸如图88A的加载操作8902和存储8904操作)的流程的框图。为了解释的简洁起见,没有显示全部的组件,但是又可以往回参照图84中所显示的附加组件。指示加载操作8902的“Load”以及存储操作8904的“Store”的各种椭圆形覆盖在微架构8400的一些组件上,作为关于被用作存储器操作的队列的各种通道如何通过微架构8400来排队和排序的指示。
图90A、图90B、图90C、图90D、图90E、图90F、图90G和图90H是图示了根据本公开的实施例的通过图89B的微架构的队列的图88A和图88B的示例性程序的加载操作和存储操作的功能流程的框图。每个图可以对应于微架构8400进行的处理的下一个周期。斜体的值是传入值(进入队列),以及粗体的值是传出值(离开队列)。具有正常字体的全部其他值是队列中已经存在的保留值。
在图90A中,地址p[0]进入加载地址队列8422,以及地址p[2]进入存储地址队列8424,开始控制流过程。注意的是,加载地址队列的相关性输入的计数器C0为“1”,并且相关性输出的计数器C1为零。相比之下,C0的“1”指示存储操作的相关性输出值。这指示p[0]的加载操作的传入相关性,以及p[2]的存储操作的传出相关性。然而,这些值还不是活动的,但是将在图90B中按照这种方式变成活动的。
在图90B中,地址p[0]为粗体,以指示它在这个周期中传出。新地址p[1]进入加载地址队列,并且新地址p[3]进入存储地址队列。完成队列8442中的零(“0”)取值位也为传入的,其指示对那个索引条目存在的任何数据都是无效的。如提到的,计数器C0和C1的值现在被指示为是传入的,因此现在在这个周期中是活动的。
在图90C中,传出地址p[0]现在已离开加载地址队列,并且新地址p[2]正进入加载地址队列。以及,数据(“0”)进入地址p[0]的完成队列。有效性位被设置为“1”,以指示完成队列中的数据是有效的。另外,新地址p[4]进入存储地址队列。计数器C0的值被指示为传出的,并且计数器C1的值被指示为传入的。C1的值“1”指示对地址p[4]的存储操作的传入相关性。
注意的是,最新加载操作的地址p[2]取决于首先需要通过地址p[2]的存储操作来存储的值,其在存储地址队列的顶部。稍后,来自地址p[2]的加载操作的完成队列中的索引条目可以保持为被缓冲,直到来自对地址p[2]的存储操作的数据完成为止(参见图90F-90H)。
在图90D中,数据(“0”)从地址p[0]的完成队列传出,其因此向加速硬件8002发出。另外,新地址p[3]进入加载地址队列,并且新地址p[5]进入存储地址队列。计数器C0和C1的值保持不变。
在图90E中,地址p[2]的值(“0”)进入存储数据队列,而新地址p[4]进入加载地址队列,并且新地址p[6]进入存储地址队列。C0和C1的计数器值保持不变。
在图90F中,存储数据队列中的地址p[2]以及存储地址队列中的地址p[2]的值(“0”)都是传出值。同样地,计数器C1的值被指示为传出的,而计数器C0的值(“0”)保持不变。另外,新地址p[5]进入加载地址队列,并且新地址p[7]进入存储地址队列。
在图90G中,值(“0”)进入以指示完成队列8442内的索引值是无效的。地址p[1]为被加粗以指示它从加载地址队列传出,而新地址p[6]进入加载地址队列。新地址p[8]还进入存储地址队列。计数器C0的值作为“1”传入,对应于地址p[6]的加载操作的传入相关性以及地址p[8]的存储操作的传出相关性。计数器C1的值现在为“0”,并且被指示为传出的。
在图90H中,“1”的数据值传入完成队列8442,而有效性位也作为“1”传入,意味着所缓冲的数据是有效的。这是完成p[2]的加载操作所需的数据。记住此数据必须首先被存储到地址p[2],这在图90F中发生。计数器C0的“0”的值为传出的,并且计数器C1的“1”的值为传入的。另外,新地址p[7]进入加载地址队列,并且新地址p[9]进入存储地址队列。
在本实施例中,执行图88A和图88B的代码的过程可以对加载操作和存储操作的“0”与“1”之间的弹回相关性令牌继续进行。这是由于p[i]与p[i+2]之间的密切相关性。具有不太频繁相关性的另一代码可以以更慢的速率生成相关性令牌,因此以更慢的速率重置计数器C0和C1,从而引起具有更高值的令牌的生成(对应于另外的语义分离存储器操作)。
图91是根据本公开的实施例的对加速硬件与无序存储器子系统之间的存储器操作进行排序的方法9100的流程图。方法9100可以由系统来实行,该系统可以包括硬件(例如,电路、专用逻辑和/或可编程逻辑)、软件(例如,计算机系统上可执行以实行硬件模拟的指令)或者其组合。在说明性示例中,方法9100可以由存储器排序电路8005以及存储器排序电路8005的各种子组件来实行。
更具体来说,参考图91,方法9100可以开始于存储器排序电路在存储器排序电路的操作队列中将存储器操作排队(9110)。存储器操作和控制变元可以组成所排队的存储器操作,其中存储器操作和控制变元被映射到存储器排序电路内的某些队列,如先前所讨论的。存储器排序电路可以进行工作,以便与加速硬件关联地向存储器发布存储器操作,以确保存储器操作按照程序次序完成。方法9100可以继续进行存储器排序电路在输入队列的集合中从加速硬件接收与存储器操作的第二存储器操作相关联的存储器的地址(9120)。在一个实施例中,输入队列集合的加载地址队列是用以接收地址的通道。在另一个实施例中,输入队列集合的存储地址队列是用以接收地址的通道。方法9100可以继续进行存储器排序电路从加速硬件接收与地址相关联的相关性令牌,其中,相关性令牌指示对存储器操作的第一存储器操作(其在第二存储器操作之前)所生成的数据的相关性(9130)。在一个实施例中,相关性队列的通道要接收相关性令牌。第一存储器操作可以是加载操作或者是存储操作。
方法9100可以继续进行存储器排序电路响应于接收到相关性令牌和与相关性令牌相关联的地址而调度第二存储器操作对存储器的发布(9140)。例如,当加载地址队列接收加载操作的地址变元的地址,并且相关性队列接收加载操作的控制变元的相关性令牌时,存储器排序电路可以调度作为加载操作的第二存储器操作的发布。方法9100可以继续进行存储器排序电路响应于第一存储器操作的完成而向存储器发布第二存储器操作(例如,以命令的形式)(9150)。例如,如果第一存储器操作是存储,则完成可以通过关于输入队列集合的存储数据队列中的数据已经写到存储器中的地址的确认来检验。类似地,如果第一存储器操作是加载操作,则完成可以通过从存储器接收到用于加载操作的数据来检验。
7.概述
ExaFLOP规模下的超级计算可能是高性能计算中的挑战,是不太可能通过常规冯诺伊曼架构来满足的挑战。为了取得ExaFLOP,CSA的实施例提供异构空间阵列,其将(例如,编译器产生的)数据流图的直接执行作为目标。除了布局CSA的实施例的架构原理之外,上面还描述和评估了CSA的实施例,其示出了优于现有产品的要大10倍的性能和能量。编译器生成的代码可以具有优于路线图架构的显著性能和能量增益。作为异构的参数化架构,CSA的实施例可以容易地适合于全部计算用途。例如,CSA的移动版本可以调谐到32位,而机器学习聚焦阵列可以以大量矢量化8位乘法单元为特征。CSA的实施例的主要优点是高性能和极端能量效率、与范围从超级计算和数据中心到物联网的全部形式的计算有关的特性。
在一个实施例中,一种处理器包括:处理元件的空间阵列;以及分组交换通信网络,以根据数据流图在处理元件之间在空间阵列内路由数据,以实行数据流图的第一数据流操作,其中,该分组交换通信网进一步包括:多个网络数据流端点电路,以实行数据流图的第二数据流操作。多个网络数据流端点电路中的网络数据流端点电路可以包括:网络入口缓冲器,以从分组交换通信网络接收输入数据;以及空间阵列出口缓冲器,以根据对输入数据的第二数据流操作,将结果数据输出到处理元件的空间阵列。该空间阵列出口缓冲器可以基于监视分组交换通信网络的网络数据流端点电路内的调度器来输出结果数据。该空间阵列出口缓冲器可以基于网络数据流端点电路内的调度器来输出结果数据,该调度器监视分组交换通信网络的多个网络虚拟通道中的所选通道。多个网络数据流端点电路中的网络数据流端点电路可以包括:空间阵列入口缓冲器,以从空间阵列接收控制数据,该控制数据使得网络数据流端点电路的网络入口缓冲器根据对输入数据和控制数据的第二数据流操作,将结果数据输出到处理元件的空间阵列,该网络入口缓冲器从分组交换通信网络接收输入数据。当来自处理元件的空间阵列的下游处理元件的反压信号指示:下游处理元件中的存储不可用于网络数据流端点电路的输出时,多个网络数据流端点电路中的网络数据流端点电路可以停顿第二数据流操作的结果数据从网络数据流端点电路的空间阵列出口缓冲器的输出。当网络入口缓冲器不可用时,多个网络数据流端点电路中的网络数据流端点电路可以发送反压信号,以停顿源将分组交换通信网络上的输入数据发送到网络数据流端点电路的网络入口缓冲器。处理元件的空间阵列可以包括:多个处理元件;以及在多个处理元件之间的互连网络,以接收包括多个节点的数据流图的输入,其中,数据流图将被覆盖到互连网络、多个处理元件和多个网络数据流端点中,其中每个节点被表示为多个处理元件和多个网络数据流端点电路中的任一个中的数据流操作符,并且多个处理元件和多个网络数据流端点电路将通过到达多个处理元件和多个网络数据流端点电路中的每一个数据流操作符的传入操作数集合来实行操作。处理元件的空间阵列可以包括电路交换网络,以根据数据流图在处理元件之间在空间阵列内传输数据。
在另一个实施例中,一种方法包括:提供处理元件的空间阵列;利用分组交换通信网络,根据数据流图在处理元件之间在空间阵列内路由数据;利用处理元件实行数据流图的第一数据流操作;以及利用分组交换通信网络的多个网络数据流端点电路实行数据流图的第二数据流操作。该实行第二数据流操作可以包括:利用多个网络数据流端点电路中的网络数据流端点电路的网络入口缓冲器,从分组交换通信网络接收输入数据;以及根据对输入数据的第二数据流操作,将结果数据从网络数据流端点电路的空间阵列出口缓冲器输出到处理元件的空间阵列。该输出可以包括:基于监视分组交换通信网络的网络数据流端点电路内的调度器来输出结果数据。该输出可以包括:基于网络数据流端点电路内的调度器输出结果数据,该调度器监视分组交换通信网络的多个网络虚拟通道中的所选通道。该实行第二数据流操作可以包括:利用多个网络数据流端点电路中的网络数据流端点电路的空间阵列入口缓冲器,从空间阵列接收控制数据;以及配置网络数据流端点电路,以使得网络数据流端点电路的网络入口缓冲器根据对输入数据和控制数据的第二数据流操作,将结果数据输出到处理元件的空间阵列,该网络入口缓冲器从分组交换通信网络接收输入数据。该实行第二数据流操作可以包括:当来自处理元件的空间阵列的下游处理元件的反压信号指示:下游处理元件中的存储不可用于网络数据流端点电路的输出时,停顿第二数据流操作的输出,该输出来自多个网络数据流端点电路中的网络数据流端点电路的空间阵列出口缓冲器。该实行第二数据流操作可以包括:当网络入口缓冲器不可用时,从多个网络数据流端点电路中的网络数据流端点电路发送反压信号,以停顿源将分组交换通信网络上的输入数据发送到网络数据流端点电路的网络入口缓冲器。该实行第一数据流操作以及实行第二数据流操作的路由可以包括:接收包括多个节点的数据流图的输入;将数据流图覆盖到处理元件的空间阵列和多个网络数据流端点电路中,其中每个节点被表示为处理元件和多个网络数据流端点电路中的任一个中的数据流操作符;以及当传入操作数集到达处理元件和多个网络数据流端点电路的每一个数据流操作符时,用处理元件实行第一数据流操作,并且用多个网络数据流端点电路实行第二数据流操作。该方法可以包括:利用空间阵列的电路交换网络、根据数据流图在处理元件之间在空间阵列内传输数据。
在又另一个实施例中,一种存储代码的非暂时性机器可读介质,该代码在由机器执行时使该机器实行一种方法,该方法包括:提供处理元件的空间阵列;利用分组交换通信网络,根据数据流图在处理元件之间在空间阵列内路由数据;用处理元件实行数据流图的第一数据流操作;以及用分组交换通信网络的多个网络数据流端点电路实行数据流图的第二数据流操作。该实行第二数据流操作可以包括:利用多个网络数据流端点电路中的网络数据流端点电路的网络入口缓冲器,从分组交换通信网络接收输入数据;以及根据对输入数据的第二数据流操作,将结果数据从网络数据流端点电路的空间阵列出口缓冲器输出到处理元件的空间阵列。该输出可以包括:基于监视分组交换通信网络的网络数据流端点电路内的调度器来输出结果数据。该输出可以包括:基于网络数据流端点电路内的调度器输出结果数据,该调度器监视分组交换通信网络的多个网络虚拟通道中的所选通道。该实行第二数据流操作可以包括:利用多个网络数据流端点电路中的网络数据流端点电路的空间阵列入口缓冲器,从空间阵列接收控制数据;以及配置网络数据流端点电路,以使得网络数据流端点电路的网络入口缓冲器根据对输入数据和控制数据的第二数据流操作,将结果数据输出到处理元件的空间阵列,该网络入口缓冲器从分组交换通信网络接收输入数据。该实行第二数据流操作可以包括:当来自处理元件的空间阵列的下游处理元件的反压信号指示:下游处理元件中的存储不可用于网络数据流端点电路的输出时,停顿第二数据流操作的输出,该输出来自多个网络数据流端点电路中的网络数据流端点电路的空间阵列出口缓冲器。该实行第二数据流操作可以包括:当网络入口缓冲器不可用时,从多个网络数据流端点电路中的网络数据流端点电路发送反压信号,以停顿源将分组交换通信网络上的输入数据发送到网络数据流端点电路的网络入口缓冲器。该实行第一数据流操作以及实行第二数据流操作的路由可以包括:接收包括多个节点的数据流图的输入;将数据流图覆盖到处理元件的空间阵列和多个网络数据流端点电路中,其中每个节点被表示为处理元件和多个网络数据流端点电路中的任一个中的数据流操作符;以及当传入操作数集到达处理元件和多个网络数据流端点电路的每一个数据流操作符时,用处理元件实行第一数据流操作,并且用多个网络数据流端点电路实行第二数据流操作。该方法可以包括:利用空间阵列的电路交换网络、根据数据流图在处理元件之间在空间阵列内传输数据。
在另一个实施例中,一种处理器包括:处理元件的空间阵列;以及分组交换通信网络,以根据数据流图在处理元件之间在空间阵列内路由数据,以实行数据流图的第一数据流操作,其中,分组交换通信网络进一步包括用以实行数据流图的第二数据流操作的部件。
在一个实施例中,处理器包括:核心,其具有将指令解码为解码指令的解码器;以及执行单元,以执行解码指令从而实行第一操作;多个处理元件;以及在多个处理元件之间的互连网络,以接收包括多个节点的数据流图的输入,其中,数据流图将被覆盖到互连网络和多个处理元件中,其中每个节点被表示为多个处理元件中的数据流操作符,并且多个处理元件将由到达多个处理元件的每一个数据流操作符的相应的传入操作数集来实行第二操作。当来自下游处理元件的反压信号指示:下游处理元件中的存储不可用于该处理元件的输出时,多个处理元件中的处理元件可以停顿执行。处理器可以包括流控制路径网络,以根据数据流图来承载反压信号。数据流令牌可以使来自接收数据流令牌的数据流操作符的输出被发送到多个处理元件中的特定处理元件的输入缓冲器。该第二操作可以包括存储器访问,并且多个处理元件包括存储器访问数据流操作符,该操作符并不实行存储器访问,直到从逻辑上先前的数据流操作符接收到存储器相关性令牌为止。多个处理元件可以包括第一类型的处理元件和第二不同类型的处理元件。
在另一个实施例中,一种方法包括:利用处理器核心的解码器将指令解码为解码指令;利用处理器核心的执行单元执行解码指令以实行第一操作;接收包括多个节点的数据流图的输入;将数据流图覆盖到处理器的多个处理元件和处理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理元件中的数据流操作符;以及通过到达多个处理元件的每一个数据流操作符的相应的传入操作数集,利用互连网络和多个处理元件来实行数据流图的第二操作。该方法可以包括:当来自下游处理元件的反压信号指示:下游处理元件中的存储不可用于处理元件的输出时,由多个处理元件中的处理元件停顿执行。该方法可以包括:根据数据流图在流控制路径网络上发送反压信号。数据流令牌可以使来自接收数据流令牌的数据流操作符的输出被发送到多个处理元件中的特定处理元件的输入缓冲器。该方法可以包括:并不实行存储器访问,直到从逻辑上先前的数据流操作符接收到存储器相关性令牌为止,其中,第二操作包括存储器访问,并且多个处理元件包括存储器访问数据流操作符。该方法可以包括:提供多个处理元件中的第一类型的处理元件和多个处理元件中的第二不同类型的处理元件。
在又另一个实施例中,一种装置包括:多个处理元件之间的数据路径网络;以及多个处理元件之间的流控制路径网络,其中,数据路径网络和流控制路径网络将接收包括多个节点的数据流图的输入,该数据流图将被覆盖到数据路径网络、流控制路径网络和多个处理元件中,其中每个节点被表示为多个处理元件中的数据流操作符,并且多个处理元件将通过到达多个处理器元件的每一个数据流操作符的相应的传入操作数集来实行第二操作。流控制路径网络可以根据数据流图将反压信号承载到多个数据流操作符。在数据路径网络上发送给数据流操作符的数据流令牌可以使得来自数据流操作符的输出被发送到数据路径网络上的多个处理元件中的特定处理元件的输入缓冲器。数据路径网络可以是静态的电路交换网络,以根据数据流图将相应的输入操作数集承载到每一个数据流操作符。流量控制路径网络可以根据数据流图从下游处理元件传输反压信号,以指示下游处理元件中的存储不可用于处理元件的输出。数据路径网络的至少一个数据路径和流控制路径网络的至少一个流控制路径可以形成具有反压控制的通道化电路。流控制路径网络可以串联地将多个处理元件中的至少两个流水线化。
在另一个实施例中,一种方法包括:接收包括多个节点的数据流图的输入;以及将数据流图覆盖到处理器的多个处理元件、多个处理元件之间的数据路径网络以及多个处理元件之间的流控制路径网络,其中每个节点被表示为多个处理元件中的数据流操作符。该方法可以包括:根据数据流图、利用流控制路径网络将反压信号承载到多个数据流操作符。该方法可以包括:在数据路径网络上将数据流令牌发送到数据流操作符,以使得来自数据流操作符的输出被发送到数据路径网络上的多个处理元件的特定处理元件的输入缓冲器。该方法可以包括:根据数据流图,设置数据路径网络的多个开关和/或流控制路径网络的多个开关,以将相应的输入操作数集承载到每一个数据流操作符,其中,数据路径网络是静态的电路交换网络。该方法可以包括:根据来自下游处理元件的数据流图,利用流控制路径网络传输反压信号,以指示下游处理元件中的存储不可用于处理元件的输出。该方法可以包括:形成具有反压控制的通道化电路,该通道化电路具有数据路径网络的至少一个数据路径和流控制路径网络的至少一个流控制路径。
在又另一个实施例中,处理器包括:核心,其具有将指令解码为解码指令的解码器;以及执行单元,以执行解码指令从而实行第一操作;多个处理元件;以及在多个处理元件之间的网络部件,以接收包括多个节点的数据流图的输入,其中,数据流图将被覆盖到网络部件和多个处理元件中,其中每个节点被表示为多个处理元件中的数据流操作符,并且多个处理元件将通过到达多个处理元件的每一个数据流操作符的相应的传入操作数集来实行第二操作。
在另一个实施例中,一种装置包括:多个处理元件之间的数据路径部件;以及在多个处理元件之间的流控制路径部件,其中,数据路径部件和流控制路径部件将接收包括多个节点的数据流图的输入,该数据流图将被覆盖到数据路径部件、流控制路径部件和多个处理元件中,其中每个节点被表示为多个处理元件中的数据流操作符,并且多个处理元件将通过到达多个处理元件的每一个数据流操作符的相应的传入操作数集来实行第二操作。
在一个实施例中,处理器包括:核心,其具有将指令解码为解码指令的解码器;以及执行单元,以执行解码指令从而实行第一操作;以及处理元件阵列,以接收包括多个节点的数据流图的输入,其中,该数据流图将被覆盖到处理元件阵列中,其中每个节点被表示为处理元件阵列中的数据流操作符,以及当传入操作数集到达处理元件阵列时,该处理元件阵列将实行第二操作。处理元件阵列并不实行第二操作,直到传入操作数集到达处理元件阵列,并且处理元件阵列中的存储可用于第二操作的输出为止。处理元件阵列可以包括网络(或(一个或多个)通道),以将数据流令牌和控制令牌承载到多个数据流操作符。第二操作可以包括存储器访问,并且处理元件阵列可以包括存储器访问数据流操作符,该存储器访问数据流操作符并不实行存储器访问,直到从逻辑上先前的数据流操作符接收到存储器相关性令牌为止。每个处理元件可以仅实行数据流图的一个或两个操作。
在另一个实施例中,一种方法包括:利用处理器核心的解码器将指令解码为解码指令;利用处理器核心的执行单元执行解码指令以实行第一操作;接收包括多个节点的数据流图的输入;将数据流图覆盖到处理器的处理元件阵列中,其中每个节点被表示为处理元件阵列中的数据流操作符;以及当传入操作数集到达处理元件阵列时,利用处理元件阵列实行数据流图的第二操作。处理元件阵列并不实行第二操作,直到传入操作数集到达处理元件阵列并且处理元件阵列中的存储可用于第二操作的输出为止。处理元件阵列可以包括:将数据流令牌和控制令牌承载到多个数据流操作符的网络。第二操作可以包括存储器访问,并且处理元件阵列包括存储器访问数据流操作符,该存储器访问数据操作符并不实行存储访问,直到从逻辑上先前的数据流操作符接收到存储器相关性令牌为止。每个处理元件可以仅实行数据流图的一个或两个操作。
在又另一个实施例中,一种存储代码的非暂时性机器可读介质,该代码在由机器执行时使该机器实行一种方法,该方法包括:利用处理器核心的解码器将指令解码为解码指令;利用处理器核心的执行单元执行解码指令以实行第一操作;接收包括多个节点的数据流图的输入;将数据流图覆盖到处理器的处理元件阵列中,其中每个节点被表示为处理元件阵列中的数据流操作符;以及当传入操作数集到达处理元件阵列时,利用处理元件阵列实行数据流图的第二操作。处理元件阵列并不实行第二操作,直到传入操作数集到达处理元件阵列并且处理元件阵列中的存储可用于第二操作的输出为止。处理元件阵列可以包括将数据流令牌和控制令牌承载到多个数据流操作符的网络。第二操作可以包括存储器访问,并且处理元件阵列包括存储器访问数据流操作符,该存储器访问数据流操作符将不实行存储器访问,直到从逻辑上先前的数据流操作符接收到存储器相关性令牌为止。每个处理元件可以仅实行数据流图的一个或两个操作。
在另一个实施例中,一种处理器,包括:核心,其具有将指令解码为解码指令的解码器;以及执行单元,以执行解码指令从而实行第一操作;以及用以接收包括多个节点的数据流图的输入的部件,其中,该数据流图将被覆盖到该部件中,其中每个节点被表示为该部件中的数据流操作符,并且在传入操作数集到达该部件时,该部件将实行第二操作。
在一个实施例中,一种处理器包括:核心,其具有将指令解码为解码指令的解码器;以及执行单元,以执行解码指令从而实行第一操作;多个处理元件;以及在多个处理元件之间的互连网络,以接收包括多个节点的数据流图的输入,其中,数据流图将被覆盖到互连网络和多个处理元件中,其中每个节点被表示为多个处理元件中的数据流操作符,以及当传入操作数集到达多个处理元件时,该多个处理元件将实行第二操作。该处理器可以进一步包括多个配置控制器,每个配置控制器耦合到多个处理元件的相应子集,并且每个配置控制器将从存储中加载配置信息,并且根据该配置信息引起多个处理元件的相应子集的耦合。该处理器可以包括多个配置高速缓存,并且每个配置控制器耦合到相应的配置高速缓存以获取用于多个处理元件的相应子集的配置信息。由执行单元实行的第一操作可以将配置信息预取到多个配置高速缓存的每一个中。该多个配置控制器中的每一个可以包括:重配置电路,以在从至少一个处理元件接收到配置错误消息时,引起对多个处理元件的相应子集中的至少一个处理元件的重配置。多个配置控制器中的每一个可以是重配置电路,以在接收到重配置请求消息时,引起对多个处理元件的相应子集的重配置,并且禁用与多个处理元件的相应子集的通信,直到重配置完成为止。该处理器可以包括多个异常聚合器,并且每个异常聚合器耦合到多个处理元件的相应子集,以从多个处理元件的相应子集收集异常,并且将异常转发给核心以用于服务。该处理器可以包括:多个提取控制器,每个提取控制器耦合到多个处理元件的相应子集,并且每个提取控制器将使得来自多个处理元件的相应子集的状态数据被保存到存储器。
在另一个实施例中,一种方法包括:利用处理器核心的解码器将指令解码为解码指令;利用处理器核心的执行单元执行解码指令以实行第一操作;接收包括多个节点的数据流图的输入;将数据流图覆盖到处理器的多个处理元件和处理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理元件中的数据流操作符;以及当传入操作数集到达多个处理元件时,利用互连网络和多个处理元件实行数据流图的第二操作。该方法可以包括:从存储中加载用于多个处理元件的相应子集的配置信息,以及根据该配置信息引起多个处理元件的相应子集的耦合。该方法可以包括:从多个配置高速缓存中的相应配置高速缓存中获取多个处理元件的相应子集的配置信息。由执行单元实行的第一操作可以是将配置信息预取到多个配置高速缓存中的每一个中。该方法可以包括:在从至少一个处理元件接收到配置错误消息时,引起对多个处理元件的相应子集中的至少一个处理元件的重配置。该方法可以包括:在接收到重配置请求消息时,引起对多个处理元件的相应子集的重配置;以及禁用与多个处理元件的相应子集的通信,直到重配置完成为止。该方法可以包括:从多个处理元件的相应子集收集异常;并且将异常转发给核心以用于服务。该方法可以包括:使得来自多个处理元件的相应子集的状态数据被保存到存储器。
在又另一个实施例中,一种存储代码的非暂时性机器可读介质,该代码在由机器执行时使该机器实行一种方法,该方法包括:利用处理器核心的解码器将指令解码为解码指令;利用处理器核心的执行单元执行解码指令以实行第一操作;接收包括多个节点的数据流图的输入;将数据流图覆盖到处理器的多个处理元件和处理器的多个处理元件之间的互连网络中,其中每个节点被表示为多个处理元件中的数据流操作符;以及当传入操作数集到达多个处理元件时,利用互连网络和多个处理元件实行数据流图的第二操作。该方法可以包括:从存储中加载用于多个处理元件的相应子集的配置信息,以及根据该配置信息引起多个处理元件的相应子集的耦合。该方法可以包括:从多个配置高速缓存中的相应配置高速缓存中获取多个处理元件的相应子集的配置信息。由执行单元实行的第一操作可以是将配置信息预取到多个配置高速缓存中的每一个中。该方法可以包括:在从至少一个处理元件接收到配置错误消息时,引起对多个处理元件的相应子集中的至少一个处理元件的重配置。该方法可以包括:在接收到重配置请求消息时,引起对多个处理元件的相应子集的重配置;以及禁用与多个处理元件的相应子集的通信,直到重配置完成为止。该方法可以包括:从多个处理元件的相应子集收集异常;并且将异常转发给核心以用于服务。该方法可以包括:使得来自多个处理元件的相应子集的状态数据被保存到存储器。
在另一个实施例中,一种处理器包括:核心,其具有将指令解码为解码指令的解码器;以及执行单元,以执行解码指令从而实行第一操作;多个处理元件;以及在多个处理元件之间用以接收包括多个节点的数据流图的输入的部件,其中,该数据流图将被覆盖到m个和多个处理元件中,其中每个节点被表示为多个处理元件中的数据流操作符,以及当传入操作数集到达多个处理元件时,该多个处理元件将实行第二操作。
在一个实施例中,一种装置(例如,处理器)包括:处理元件的空间阵列,其包括通信网络以接收包括多个节点的数据流图的输入,其中,该数据流图将被覆盖到处理元件的空间阵列中,其中每个节点被表示为处理元件的空间阵列中的数据流操作符,并且处理元件的空间阵列将由到达每一个数据流操作符的相应的传入操作数集实行操作;多个请求地址堆电路,其耦合到处理元件的空间阵列和高速缓冲存储器,多个请求地址堆电路中的每个请求地址堆电路要响应于处理元件的空间阵列来访高速缓冲存储器中的数据;多个转换后备缓冲器,其包括多个请求地址堆电路中的每一个中的转换后备缓冲器,以将物理地址的输出提供给虚拟地址的输入;以及转换后备缓冲器管理器电路,其包括比多个转换后备缓冲器更高级别的转换后备缓冲器,该转换后备缓冲器管理器电路要在高速缓冲存储器中实行第一页面漫游,以用于将虚拟地址输入到第一转换后备缓冲器并输入到较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,将来自第一页面漫游的虚拟地址到物理地址的映射存储在较高级别的转换后备缓冲器中,以使得较高级别的转换后备缓冲器将物理地址发送到第一请求地址堆电路中的第一转换后备缓冲器。该转换后备缓冲器管理器电路可以与第一页面漫游同时在高速缓冲存储器中实行第二页面漫游,其中,第二页面漫游针对将虚拟地址输入到第二转换后备缓冲器并输入到较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,将来自第二页面漫游的虚拟地址到物理地址的映射存储在较高级别的转换后备缓冲器中,以使得较高级别的转换后备缓冲器将物理地址发送到第二请求地址堆电路中的第二转换后备缓冲器。在第一转换后备缓冲器中的物理地址的接收可以使得第一请求地址堆电路针对以下数据访问请求来实行数据访问,该数据访问请求来自高速缓冲存储器中的物理地址上的处理元件的空间阵列。转换后备缓冲器管理器电路可以在较高级别的转换后备缓冲器中插入指示符,该指示符针对将虚拟地址输入到第一转换后备缓冲器和较高级别的转换后备缓冲器中的未命中,以防止在第一页面漫游期间对于虚拟地址的输入的附加页面漫游。该转换后备缓冲器管理器电路可以从请求实体接收击落消息,该击落消息针对物理地址到虚拟地址的映射,使较高级别的转换后备缓冲器中的映射无效,并且仅将击落消息发送给多个请求地址堆电路中的在相应的转换后备缓冲器中包括映射的副本的那些,其中,那些多个请求地址堆电路中的每一个将向转换后备缓冲器管理器电路发送确认消息,以及转换后备缓冲器管理器电路在接收到所有确认消息时,将击落完成确认消息发送到请求实体。转换后备缓冲器管理器电路可以从请求实体接收击落消息,该击落消息针对物理地址到虚拟地址的映射,使较高级别的转换后备缓冲器中的映射无效,并且将击落消息发送到所有的多个请求地址堆电路,其中,多个请求地址堆电路中的每一个将把确认消息发送到转换后备缓冲器管理器电路,以及转换后备缓冲器管理器电路在接收到所有确认消息时,将击落完成确认消息发送到请求实体。
在另一个实施例中,一种方法包括:将包括多个节点的数据流图的输入覆盖到包括通信网络的处理元件的空间阵列中,其中每个节点被表示为处理元件的空间阵列中的数据流操作符;将多个请求地址堆电路耦合到处理元件的空间阵列和高速缓冲存储器,其中响应于来自处理元件的空间阵列的数据访问请求,多个请求地址堆电路中的每个请求地址堆电路访问高速缓冲存储器中的数据;提供物理地址的输出,以用于将虚拟地址输入到多个转换后备缓冲器中的转换后备缓冲器中,该转换后备缓冲器包括多个请求地址堆电路中的每一个中的转换后备缓冲器;将包括比多个转换后备缓冲器更高级别的转换后备缓冲器的转换后备缓冲器管理器电路耦合到多个请求地址堆电路和高速缓冲存储器;并且在高速缓冲存储器中实行第一页面漫游,该第一页面漫游针对利用转换后备缓冲器管理器电路来将虚拟地址输入到第一转换后备缓冲器并输入到较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,将来自第一页面漫游的虚拟地址到物理地址的映射存储在较高级别的转换后备缓冲器中,以使得较高级别的转换后备缓冲器将物理地址发送到第一请求地址堆电路中的第一转换后备缓冲器。该方法可以包括:与第一页面漫游同时,利用转换后备缓冲器管理器电路在高速缓冲存储器中实行第二页面漫游,其中,该第二页面漫游针对将虚拟地址输入到第二转换后备存储器中并输入到较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,以及将来自第二页面漫游的虚拟地址到物理地址的映射存储在较高级别的转换后备缓冲器中,以使得较高级别的转换后备缓冲器将物理地址发送到第二请求地址堆电路中的第二转换后备缓冲器。该方法可以包括:响应于在第一转换后备缓冲器中接收到物理地址,使第一请求地址堆电路对以下数据访问请求实行数据访问,该数据访问请求来自高速缓冲存储器中的物理地址上的处理元件的空间阵列。该方法可以包括:利用转换后备缓冲器管理器电路,在较高级别的转换后备缓冲器中插入指示符,该指示符针对将虚拟地址输入到第一转换后备缓冲器和较高级别的转换后备缓冲器中的未命中,以防止在第一页面漫游期间对于虚拟地址的输入的附加页面漫游。该方法可以包括:利用转换后备缓冲器管理器电路,从请求实体接收击落消息,该击落消息针对物理地址到虚拟地址的映射,使较高级别的转换后备缓冲器中的映射无效,并且仅将击落消息发送给多个请求地址堆电路中的在相应的转换后备缓冲器中包括映射的副本的那些,其中,那些多个请求地址堆电路中的每一个将向转换后备缓冲器管理器电路发送确认消息,以及转换后备缓冲器管理器电路在接收到所有确认消息时,将击落完成确认消息发送到请求实体。该方法可以包括:利用转换后备缓冲器管理器电路,从请求实体接收击落消息,该击落消息针对物理地址到虚拟地址的映射,使较高级别的转换后备缓冲器中的映射无效,并且将击落消息发送到所有的多个请求地址堆电路,其中,多个请求地址堆电路中的每一个将把确认消息发送到转换后备缓冲器管理器电路,以及转换后备缓冲器管理器电路在接收到所有确认消息时,将击落完成确认消息发送到请求实体。
在另一个实施例中,一种装置,包括:处理元件的空间阵列,其包括通信网络,以接收包括多个节点的数据流图的输入,其中,该数据流图将被覆盖到处理元件的空间阵列中,其中每个节点被表示为处理元件的空间阵列中的数据流操作符,并且处理元件的空间阵列将由到达每一个数据流操作符的相应的传入操作数集实行操作;多个请求地址堆电路,其耦合到处理元件的空间阵列和多个高速缓冲存储器存储体,响应于来自处理元件的空间阵列的数据访问请求,多个请求地址堆电路中的每个请求地址堆电路访问多个高速缓冲存储器存储体(例如,其中的每一个)中的数据;多个转换后备缓冲器,其包括多个请求地址堆电路中的每一个中的转换后备缓冲器,以将物理地址的输出提供给虚拟地址的输入;与多个转换后备缓冲器相比,多个更高级别的转换后备缓冲器,其包括在多个高速缓冲存储器存储体中的每一个中的较高级别的转换后备缓冲器,以将物理地址的输出提供给虚拟地址的输入;以及转换后备缓冲器管理器电路,以在多个高速缓冲存储器存储体中实行第一页面漫游,该第一页面漫游针对将虚拟地址输入到第一转换后备缓冲器并输入到第一较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,将来自第一页面漫游的虚拟地址到物理地址的映射存储在第一较高级别的转换后备缓冲器中,以使得第一较高级别的转换后备缓冲器将物理地址发送到第一请求地址堆电路中的第一转换后备缓冲器。该转换后备缓冲器管理器电路可以与第一页面漫游同时在多个高速缓冲存储器存储体中实行第二页面漫游,其中,该第二页面漫游针对将虚拟地址输入到第二转换后备缓冲器并输入到第二较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,将来自第二页面漫游的虚拟地址到物理地址的映射存储在第二较高级别的转换后备缓冲器中,以使得该第二较高级别的转换后备缓冲器将物理地址发送到第二请求地址堆电路中的第二转换后备缓冲器。在第一转换后备缓冲器中的物理地址的接收可以使得第一请求地址堆电路针对以下数据访问请求来实行数据访问,该数据访问请求来自多个高速缓冲存储器存储体中的物理地址上的处理元件的空间阵列。转换后备缓冲器管理器电路可以在第一较高级别的转换后备缓冲器中插入指示符,该指示符针对将虚拟地址输入到第一转换后备缓冲器和第一较高级别的转换后备缓冲器中的未命中,以防止在第一页面漫游期间对于虚拟地址的输入的附加页面漫游。该转换后备缓冲器管理器电路可以从请求实体接收击落消息,该击落消息针对物理地址到虚拟地址的映射,使存储映射的较高级别的转换后备缓冲器中的映射无效,并且仅将击落消息发送给多个请求地址堆电路中的在相应的转换后备缓冲器中包括映射的副本的那些,其中,那些多个请求地址堆电路中的每一个将向转换后备缓冲器管理器电路发送确认消息,以及转换后备缓冲器管理器电路在接收到所有确认消息时,将击落完成确认消息发送到请求实体。转换后备缓冲器管理器电路可以从请求实体接收击落消息,该击落消息针对物理地址到虚拟地址的映射,使存储该映射的较高级别的转换后备缓冲器中的映射无效,并且将击落消息发送到所有的多个请求地址堆电路,其中,多个请求地址堆电路中的每一个将把确认消息发送到转换后备缓冲器管理器电路,以及转换后备缓冲器管理器电路在接收到所有确认消息时,将击落完成确认消息发送到请求实体。
在又另一个实施例中,一种方法包括:将包括多个节点的数据流图的输入覆盖到包括通信网络的处理元件的空间阵列中,其中每个节点被表示为处理元件的空间阵列中的数据流操作符;将多个请求地址堆电路耦合到处理元件的空间阵列和多个高速缓冲存储器存储体,其中多个请求地址堆电路中的每个请求地址堆电路响应于来自处理元件的空间阵列的数据访问请求,访问多个高速缓冲存储器存储体中的数据;
将针对虚拟地址的输入的物理地址的输出提供到多个转换后备缓冲器中的转换后备缓冲器中,该转换后备缓冲器包括多个请求地址堆电路中的每一个中的转换后备缓冲器;将针对虚拟地址的输入的物理地址的输出提供到多个较高级别的转换后备缓冲器中的、比多个转换后备缓冲器更高级别的转换后备缓冲器中,该转换后备缓冲器包括多个高速缓冲存储器存储体中的每一个中的较高级别的转换后备缓冲器;将转换后备缓冲器管理器电路耦合到多个请求地址堆电路和多个高速缓冲存储器存储体;以及利用转换后备缓冲器管理器电路,在多个高速缓冲存储器存储体中实行第一页面漫游,该第一页面漫游针对将虚拟地址输入到第一转换后备缓冲器并输入到第一较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,将来自第一页面漫游的虚拟地址到物理地址的映射存储在第一较高级别的转换后备缓冲器中,以使得第一较高级别的转换后备缓冲器将物理地址发送到第一请求地址堆电路中的第一转换后备缓冲器。该方法可以包括:与第一页面漫游同时,利用转换后备缓冲器管理器电路在多个高速缓冲存储器存储体中实行第二页面漫游,其中,该第二页面漫游针对将虚拟地址输入到第二转换后备缓冲器并输入到第二较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,以及将来自第二页面漫游的虚拟地址到物理地址的映射存储在第二较高级别的转换后备缓冲器,以使得第二较高级别的转换后备缓冲器将物理地址发送到第二请求地址堆电路中的第二转换后备缓冲器。该方法可以包括:响应于在第一转换后备缓冲器中接收到物理地址,使第一请求地址堆电路对以下数据访问请求实行数据访问,该数据访问请求来自多个高速缓冲存储器存储体中的物理地址上的处理元件的空间阵列。该方法可以包括:利用转换后备缓冲器管理器电路,在第一较高级别的转换后备缓冲器中插入指示符,该指示符针对将虚拟地址输入到第一转换后备缓冲器和第一较高级别的转换后备缓冲器中的未命中,以防止在第一页面漫游过程期间对于虚拟地址的输入的附加页面漫游。该方法可以包括:利用转换后备缓冲器管理器电路,从请求实体接收击落消息,该击落消息针对物理地址到虚拟地址的映射,使存储该映射的较高级别的转换后备缓冲器中的映射无效;并且仅将击落消息发送给多个请求地址堆电路中的在相应的转换后备缓冲器中包括映射的副本的那些,其中,那些多个请求地址堆电路中的每一个将向转换后备缓冲器管理器发送确认消息,以及转换后备缓冲器管理器电路在接收到所有确认消息时,将击落完成确认消息发送到请求实体。该方法可以包括:利用转换后备缓冲器管理器电路,从请求实体接收击落消息,该击落消息针对物理地址到虚拟地址的映射,使存储该映射的较高级别的转换后备缓冲器中的映射无效;并且将击落消息发送给所有的多个请求地址堆电路,其中,多个请求地址堆电路中的每一个将向转换后备缓冲器管理器电路发送确认消息,以及转换后备缓冲器管理器电路在接收到所有确认消息时,将击落完成确认消息发送到请求实体。
在另一个实施例中,一种系统包括:核心,其具有将指令解码为解码指令的解码器;以及执行单元,以执行解码指令从而实行第一操作;处理元件的空间阵列,其包括通信网络,以接收包括多个节点的数据流图的输入,其中,该数据流图将被覆盖到处理元件的空间阵列中,其中每个节点被表示为在处理元件的空间阵列中的数据流操作符,以及处理元件的空间阵列将通过到达每一个数据流操作符的相应的传入操作数集实行第二操作;多个请求地址堆电路,其耦合到处理元件的空间阵列和高速缓冲存储器,多个请求地址堆电路中的每个请求地址堆电路响应于来自处理元件的空间阵列的数据访问请求,访问高速缓冲存储器中的数据;多个转换后备缓冲器,其包括多个请求地址堆电路中的每一个中的转换后备缓冲器,以将物理地址的输出提供给虚拟地址的输入;以及转换后备缓冲器管理器电路,其包括比多个转换后备缓冲器更高级别的转换后备缓冲器,该转换后备缓冲器管理器电路在高速缓冲存储器中实行第一页面漫游,该第一页面漫游针对将虚拟地址输入到第一转换后备缓冲器并输入到较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,将来自第一页面漫游的虚拟地址到物理地址的映射存储在较高级别的转换后备缓冲器中,以使得较高级别的转换后备缓冲器将物理地址发送到第一请求地址堆电路中的第一转换后备缓冲器。转换后备缓冲器管理器电路可以与第一页面漫游同时在高速缓冲存储器中实行第二页面漫游,其中,第二页面漫游针对将虚拟地址输入到第二转换后备缓冲器并输入到较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,将来自第二页面漫游的虚拟地址到物理地址的映射存储在较高级别的转换后备缓冲器中,以使得较高级别的转换后备缓冲器将物理地址发送到第二请求地址堆电路中的第二转换后备缓冲器。在第一转换后备缓冲器中的物理地址的接收可以使得第一请求地址堆电路针对以下数据访问请求来实行数据访问,该数据访问请求来自高速缓冲存储器中的物理地址上的处理元件的空间阵列。转换后备缓冲器管理器电路可以在较高级别的转换后备缓冲器中插入指示符,该指示符针对将虚拟地址输入到第一转换后备缓冲器和较高级别的转换后备缓冲器中的未命中,以防止在第一页面漫游期间对于虚拟地址的输入的附加页面漫游。转换后备缓冲器管理器电路可以从请求实体接收击落消息,该击落消息针对物理地址到虚拟地址的映射,使较高级别的转换后备缓冲器中的映射无效,并且仅将击落消息发送给多个请求地址堆电路中的在相应的转换后备缓冲器中包括映射的副本的那些,其中,那些多个请求地址堆电路中的每一个将把确认消息发送到转换后备缓冲器管理器电路,以及转换后备缓冲器管理器电路在接收到所有确认消息时,将击落完成确认消息发送到请求实体。转换后备缓冲器管理器电路可以从请求实体接收击落消息,该击落消息针对物理地址到虚拟地址的映射,使较高层级的转换后备缓冲器中的映射无效,并且将击落消息发送到所有的多个请求地堆电路,其中,多个请求地址堆电路中的每一个将把确认消息发送到转换后备缓冲器管理器电路,以及转换后备缓冲器管理器电路在接收到所有确认消息时,将击落完成确认消息发送到请求实体。
在又另一个实施例中,一种系统包括:核心,其具有将指令解码为解码指令的解码器;以及执行单元,以执行解码指令从而实行第一操作;处理元件的空间阵列,包括通信网络,以接收包括多个节点的数据流图的输入,其中,数据流图将被覆盖到处理元件的空间阵列中,其中每个节点被表示为处理元件的空间阵列中的数据流操作符,以及处理元件的空间阵列将通过到达每一个数据流操作符的相应的传入操作数集实行第二操作;多个请求地址堆电路,其耦合到处理元件的空间阵列和多个高速缓冲存储器存储体,响应于来自处理元件的空间阵列的数据访问请求,多个请求地址堆电路中的每个请求地址堆电路访问多个高速缓冲存储器存储体(例如,其中的每一个)中的数据;多个转换后备缓冲器,其包括多个请求地址堆电路中的每一个中的转换后备缓冲器,以将物理地址的输出提供给虚拟地址的输入;与多个转换后备缓冲器相比,多个更高级别的转换后备缓冲器,其包括在多个高速缓冲存储器存储体的每一个中的较高级别的转换后备缓冲器,以将物理地址的输出提供给虚拟地址的输入;以及转换后备缓冲器管理器电路,以在多个高速缓冲存储器存储体中实行第一页面漫游,该第一页面漫游针对将虚拟地址输入到第一转换后备缓冲器并输入到第一较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,将来自第一页面漫游的虚拟地址到物理地址的映射存储在第一较高级别的转换后备缓冲器中,以使得第一较高级别的转换后备缓冲器将物理地址发送到第一请求地址堆电路中的第一转换后备缓冲器。该转换后备缓冲器管理器电路可以与第一页面漫游同时在多个高速缓冲存储器存储体中实行第二页面漫游,其中,该第二页面漫游针对将虚拟地址输入到第二转换后备缓冲器并输入到第二较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,将来自第二页面漫游的虚拟地址到物理地址的映射存储在第二较高级别的转换后备缓冲器中,以使得第二较高级别的转换后备缓冲器将物理地址发送到第二请求地址堆电路中的第二转换后备缓冲器。在第一转换后备缓冲器中的物理地址的接收可以使得第一请求地址堆电路对以下数据访问请求来实行数据访问,该数据访问请求来自多个高速缓冲存储器存储体中的物理地址上的处理元件的空间阵列。转换后备缓冲器管理器电路可以在第一较高级别的转换后备缓冲器中插入指示符,该指示符针对将虚拟地址输入到第一转换后备缓冲器和第一较高级别的转换后备缓冲器中的未命中,以防止在第一页面漫游期间对于虚拟地址的输入的附加页面漫游。该转换后备缓冲器管理器电路可以从请求实体接收击落消息,该击落消息针对物理地址到虚拟地址的映射,使存储该映射的更高级别的转换后备缓冲器中的映射无效,并且仅将击落消息发送给多个请求地址堆电路中的在相应的转换后备缓冲器中包括映射的副本的那些,其中,那些多个请求地址堆电路中的每一个将向转换后备缓冲器管理器电路发送确认消息,以及转换后备缓冲器管理器电路在接收到所有确认消息时,将击落完成确认消息发送到请求实体。转换后备缓冲器管理器电路可以从请求实体接收击落消息,该击落消息针对物理地址到虚拟地址的映射,使存储该映射的更高级别的转换后备缓冲器中的映射无效,并且将击落消息发送到所有的多个请求地址堆电路,其中,多个请求地址堆电路中的每一个将把确认消息发送到转换后备缓冲器管理器电路,以及转换后备缓冲器管理器电路在接收到所有确认消息时,将击落完成确认消息发送到请求实体。
在另一个实施例中,一种装置(例如,处理器)包括:处理元件的空间阵列,其包括通信网络,以接收包括多个节点的数据流图的输入,其中,该数据流图将被覆盖到处理元件的空间阵列中,其中每个节点被表示为处理元件的空间阵列中的数据流操作符,并且处理元件的空间阵列将由到达每一个数据流操作符的相应的传入操作数集实行操作;多个请求地址堆电路,其耦合到处理元件的空间阵列和高速缓冲存储器,响应于来自处理元件的空间阵列的数据访问请求,多个请求地址堆电路中的每个请求地址堆电路访问高速缓冲存储器中的数据;多个转换后备缓冲器,其包括多个请求地址堆电路中的每一个中的转换后备缓冲器,以将物理地址的输出提供给虚拟地址的输入;以及包括比多个转换后备缓冲器更高级别的转换后备缓冲器的部件,该部件在高速缓冲存储器中实行第一页面漫游,该第一页面漫游针对将虚拟地址输入到第一转换后备缓冲器并输入到较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,将来自第一页面漫游的虚拟地址到物理地址的映射存储在较高级别的转换后备缓冲器中,以使得较高级别的转换后备缓冲器将物理地址发送到到第一请求地址堆电路中的第一转换后备缓冲器。
在又另一个实施例中,一种装置,包括:处理元件的空间阵列,其包括通信网络,以接收包括多个节点的数据流图的输入,其中,该数据流图将被覆盖到处理元件的空间阵列中,其中每个节点被表示为处理元件的空间阵列中的数据流操作符,并且处理元件的空间阵列将由到达每一个数据流操作符的相应的传入操作数集实行操作;多个请求地址堆电路,其耦合到处理元件的空间阵列和多个高速缓冲存储器存储体,响应于来自处理元件的空间阵列的数据访问请求,多个请求地址堆电路中的每个请求地址堆电路访问多个高速缓冲存储器存储体(例如,其中的每一个)中的数据;多个转换后备缓冲器,其包括多个请求地址堆电路中的每一个中的转换后备缓冲器,以将物理地址的输出提供给虚拟地址的输入;与多个转换后备缓冲器相比,多个更高级别的转换后备缓冲器,其包括在多个高速缓冲存储器存储体中的每一个中的较高级别的转换后备缓冲器,以将物理地址的输出提供给虚拟地址的输入;以及用以在多个高速缓冲存储器存储体中实行第一页面漫游的部件,该第一页面漫游针对将虚拟地址输入到第一转换后备缓冲器并输入到第一较高级别的转换后备缓冲器中的未命中,以确定被映射到虚拟地址的物理地址,将来自第一页面漫游的虚拟地址到物理地址的映射存储在第一较高级别的转换后备缓冲器中,以使得第一较高级别的转换后备缓冲器将物理地址发送到第一请求地址堆电路中的第一转换后备缓冲器。
在一个实施例中,一种装置(例如,硬件加速器)包括:具有第一分支和第二分支的数据路径,并且该数据路径包括至少一个处理元件;开关电路(例如,开关PE,例如,PE9),其包括开关控制输入,以接收将开关电路的输入耦合到第一分支的第一开关控制值,和将开关电路的输入耦合到第二分支的第二开关控制值;拾取电路(例如,拾取PE,例如,PE9的另一个实例),包括拾取控制输入,以接收将拾取电路的输出耦合到第一分支的第一拾取控制值和将拾取电路的输出耦合到数据路径的第三分支的第二拾取控制值;谓词传播处理元件,以基于来自开关电路的开关控制输入的开关控制值和(例如,来自另一个PE的)第一块谓词值两者来(例如,同时)输出第一边谓词值和第二边谓词值;以及谓词合并处理元件,以基于第三边谓词值和第一边谓词值或第二边谓词值之一两者,(例如,同时)将拾取控制值输出到拾取电路的拾取控制输入和第二块谓词值。第二分支和第三分支可以是数据路径的同一分支。第二谓词传播处理元件可以被耦合到谓词传播处理元件,以至少基于来自数据路径的第二开关电路的开关控制输入的开关控制值,将第一块谓词值发送到谓词传播处理元件。第二谓词传播处理元件可以被耦合到谓词合并处理元件,以至少基于来自数据路径的第二开关电路的开关控制输入的开关控制值,将第三边谓词值发送到谓词合并处理元件。第二谓词合并处理元件可以被耦合到谓词合并处理元件,以至少基于来自数据路径的第二拾取电路的拾取控制输入的拾取控制值,将第三边谓词值发送到谓词合并处理元件。谓词传播处理元件可以输出:当第一块谓词值为假值时,将假值作为第一边谓词值,并且将假值作为第二边谓词值;当第一块谓词值为真值,并且开关控制值为假值时,将真值作为第一边谓词值,并且将假值作为第二边谓词值;以及当第一块谓词值为真值,并且开关控制值为真值时,将假值作为第一边谓词值,并且将真值作为第二边谓词值。谓词合并处理元件可以输出:当第三边谓词值为假值,并且第一边谓词值或第二边谓词值之一为假值时,将假值作为第二块谓词值,并且没有对拾取控制输入的针对拾取控制值的值;当第三边谓词值为真值,并且第一边谓词值或第二边谓词值之一为假值时,将真值作为第二块谓词值,并且将假值作为对拾取控制输入的拾取控制值;以及当第三边谓词值为假值,并且第一边谓词值或第二边谓词值之一为真值时,将真值作为第二块谓词值,并且将真值作为对拾取控制输入的拾取控制值。谓词合并处理元件可以输出:在第三边谓词值为假值,并且第一边谓词值或第二边谓词值之一为假值时,将假值作为第二块谓词值,并且没有对拾取控制输入的针对拾取控制值的值;当第三边谓词为真值,并且第一边谓词值或第二边谓词值之一为假值时,将真值作为第二块谓词值,并且将假值作为对拾取控制输入的拾取控制值;以及当第三边谓词值为假值,并且第一边谓词值或第二边谓词值之一为真值时,将真值作为第二块谓词值,并且将真值作为对拾取控制输入的拾取控制值。当来自谓词合并处理元件的反压信号指示谓词合并处理元件中的存储不可用于第一边谓词值或第二边谓词值之一时,谓词传播处理元件可以停顿第一边谓词值或第二边谓词值之一到谓词合并处理元件的发送。
在另一个实施例中,一种方法包括:在开关电路的开关控制输入上,接收第一开关控制值以将开关电路的输入耦合到数据路径的第一分支,或接收第二开关控制值以将开关电路的输入耦合到数据路径的第二分支,该数据路径包括至少一个处理元件;在拾取电路的拾取控制输入上,接收第一拾取控制值以将拾取电路的输出耦合到第一分支,以及第二拾取控制值以将拾取电路的输出耦合到数据路径的第三分支;由谓词传播处理元件基于来自开关电路的开关控制输入的开关控制值和第一块谓词值两者,同时输出第一边谓词值和第二边谓词值;以及由谓词合并处理元件基于第三边谓词值和第一边谓词值或第二边谓词值之一两者,同时输出对拾取电路的拾取控制输入的拾取控制值和第二块谓词值。该方法可以包括:第二谓词传播处理元件,其至少基于来自数据路径的第二开关电路的开关控制输入的开关控制值,将第一块谓词值发送到谓词传播处理元件。该方法可以包括:第二谓词传播处理元件,其至少基于来自数据路径的第二开关电路的开关控制输入的开关控制值,将第三边谓词值发送到谓词合并处理元件。该方法可以包括:第二谓词合并处理元件,其至少基于来自数据路径的第二拾取电路的拾取控制输入的拾取控制值,将第三边谓词值发送到谓词合并处理元件。该方法可以包括:谓词传播处理元件输出:当第一块谓词值是假值时,将假值作为第一边谓词值,并且将假值作为第二边谓词值;当第一块谓词值为真值,并且开关控制值为假值时,将真值作为第一边谓词值,并且将假值作为第二边谓词值;以及当第一块谓词值为真值,并且切换控制值为真值时,将假值作为第一边谓词值,并且将真值作为第二边谓词值。该方法可以包括:谓词合并处理元件输出:当第三边谓词值是假值,并且第一边谓词值或第二边谓词值之一是假值时,将假值作为第二块谓词值,并且没有对拾取控制输入的针对拾取控制值的值;当第三边缘谓词值为真值,并且第一边谓词值或第二缘谓词值之一为假值时,将真值作为第二块谓词值,并且将假值作为对拾取控制输入的拾取控制值;以及当第三边谓词值为假值,并且第一边谓词值或第二边谓词值之一为真值时,将真值作为第二块谓词值,并且将真值作为对拾取控制输入的拾取控制值。该方法可以包括:谓词合并处理元件输出:当第三边谓词值是假值,并且第一边谓词值或第二边谓词值之一是假值时,将假值作为第二块谓词值,并且没有对拾取控制输入的针对拾取控制值的值;当第三边谓词值为真值,并且第一边谓词值或第二边谓词值之一为假值时,将真值作为第二块谓词值,并且将假值作为对拾取控制输入的拾取控制值;以及当第三边谓词值为假值,并且第一边谓词值或第二边谓词中之一为真值时,将真值作为第二块谓词值,并且将真值作为对拾取控制输入的拾取控制值。该方法可以包括:当来自谓词合并处理元件的反压信号指示谓词合并处理元件中的存储不可用于第一边谓词值或第二边谓词值之一时,谓词传播处理元件将停顿第一边谓词值或第二边谓词值之一到谓词合并处理元件的发送。
在又另一个实施例中,一种存储代码的非暂时性机器可读介质,该代码在由机器执行时使该该机器实行一种方法,该方法包括:在开关电路的开关控制输入上,接收第一开关控制值以将开关电路的输入耦合到数据路径的第一分支,或接收第二开关控制值以将开关电路的输入耦合到数据路径的第二分支,该数据路径包括至少一个处理元件;在拾取电路的拾取控制输入上,接收第一拾取控制值以将拾取电路的输出耦合到第一分支,以及第二拾取控制值以将拾取电路的输出耦合到数据路径的第三分支;由谓词传播处理元件基于来自开关电路的开关控制输入的开关控制值和第一块谓词值两者,同时地输出第一边谓词值和第二边谓词值;以及由谓词合并处理元件基于第三边谓词值和第一边谓词值或第二边谓词值之一这两者,同时地输出对拾取电路的拾取控制输入的拾取控制值和第二块谓词值。该方法可以包括:第二谓词传播处理元件,其至少基于来自数据路径的第二开关电路的开关控制输入的开关控制值,将第一块谓词值发送到谓词传播处理元件。该方法可以包括:第二谓词传播处理元件,其至少基于来自数据路径的第二开关电路的开关控制输入的开关控制值,将第三边谓词值发送到谓词合并处理元件。该方法可以包括:第二谓词合并处理元件,其至少基于来自数据路径的第二拾取电路的拾取控制输入的拾取控制值,将第三边缘谓词值发送到谓词合并处理元件。该方法可以包括:谓词传播处理元件输出:当第一块谓词值为假值时,将假值作为第一边谓词值,并且将假值作为第二边谓词值;当第一块谓词值为真值,并且开关控制值为假值时,将真值作为第一边谓词值,并且将假值作为第二边谓词值;以及当第一块谓词值为真值,并且开关控制值为真值时,将假值作为第一边谓词值,并且将真值作为第二边谓词值。该方法可以包括:谓词合并处理元件输出:当第三边谓词值为假值,并且第一边谓词值或第二边谓词值之一为假值时,将假值作为第二块谓词值,并且没有对拾取控制输入的针对拾取控制值的值;当第三边谓词值为真值,并且第一边谓词值或第二边谓词之一为假值时,将真值作为第二块谓词值,并且将假值作为对拾取控制输入的拾取控制值;以及当第三边谓词为假值,并且第一边谓词值或第二边谓词值之一为真值时,将真值作为第二块谓词值,并且将真值作为对拾取控制输入的拾取控制值。该方法可以包括:谓词合并处理元件输出:当第三边谓词值是假值,并且第一边谓词值或第二边谓词值之一是假值时,将假值作为第二块谓词值,并且没有对拾取控制输入的针对拾取控制值的值;当第三边谓词值为真值,并且第一边谓词值或第二边谓词值之一为假值时,将真值作为第二块谓词值,并且将假值作为对拾取控制输入的拾取控制值;以及当第三边谓词值为假值,并且第一边谓词值或第二边谓词值之一为真值时,将真值作为第二块谓词值,并且将真值作为对拾取控制输入的拾取控制值。该方法可以包括:当来自谓词合并处理元件的反压信号指示谓词合并处理中的存储不可用于第一边谓词值或第二边谓词值之一时,谓词传播处理元件停顿第一边谓词值或第二边谓词值之一到谓词合并处理元件的发送。
在另一个实施例中,一种装置(例如,硬件加速器)包括具有第一分支和第二分支的数据路径,并且该数据路径包括至少一个处理元件;开关电路(例如,开关PE,例如,PE9),其包括开关控制输入,以接收第一开关控制值以将开关电路的输入耦合到第一分支,以及接收第二开关控制值以将开关电路的输入耦合到第二分支;拾取电路(例如,拾取PE,例如,PE 9的另一个实例),包括拾取控制输入,以接收第一拾取控制值以将拾取电路的输出耦合到第一分支,以及第二拾取控制值以将拾取电路的输出耦合到数据路径的第三分支;第一部件,用以基于来自开关电路的开关控制输入的开关控制值和(例如,来自另一个PE的)第一块谓词值(例如,其两者)来(例如,同时)输出第一边谓词值和第二边谓词值;以及第二部件,基于第三边谓词值和第一边谓词值或第二边谓词之一这两者,(例如,同时)将拾取控制值输出到拾取电路的拾取控制输入和第二块谓词值。
在另一个实施例中,一种装置包括数据存储设备,其存储当由硬件处理器执行时使硬件处理器实行本文中所公开的任何方法的代码。装置可以如详细描述中所描述的那样。方法可以如详细描述中所描述的那样。
在又另一实施例中,一种存储代码的非暂时性机器可读介质,该代码当由机器执行时使该机器实行包括本文中所公开的任何方法的方法。
指令集(例如,用于由核心执行)可以包括一种或多种指令格式。除了别的之外,给定指令格式可以定义用以指定要实行的操作(例如,操作码)和将对其实行操作的(一个或多个)操作数的各种字段(例如,位的数量、位的位置)和/或(一个或多个)其他数据字段(例如,掩码)。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定指令格式的指令模板可以被定义成具有指令格式的字段的不同子集(所包括的字段通常以相同的次序,但是至少一些具有不同的位方位,因为包括有更少的字段)和/或定义成具有不同地解释的给定字段。因此,ISA的每条指令均使用给定指令格式(并且如果被定义,则在该指令格式的指令模板中的给定一个中)来表达,并且包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码,以及包括用以指定该操作码的操作码字段和用以选择操作数(源1/目的地和源2)的操作数字段的指令格式;并且在指令流中出现此ADD指令将在选择特定操作数的操作数字段中具有特定内容。被称为高级矢量扩展(AVX)(AVX1和AVX2)并且使用矢量扩展(VEX)编码方案的SIMD扩展集已被释放和/或发布(例如,参见Intel® 64and IA-32 Architectures Software Developer’s Manual(架构软件开发者指南),2018年1月;并且参见Intel® Architecture Instruction Set Extensions ProgrammingReference(架构指令集扩展编程参考), 2018年1月)。
示例性指令格式
可以采用不同的格式来实现本文中所描述的(一个或多个)指令的实施例。附加地,在下面对示例性系统、架构和流水线进行详述。(一个或多个)指令的实施例可以在这样的系统、架构和流水线上被执行,但是不限于详述的那些。
通用矢量友好指令格式
矢量友好指令格式是适于矢量指令的指令格式(例如,存在特定于矢量运算的某些字段)。虽然描述了通过矢量友好指令格式来支持矢量运算和标量运算两者的实施例,但是替换的实施例仅使用矢量友好指令格式的矢量运算。
图92A-92B是图示了根据本公开的实施例的通用矢量友好指令格式及其指令模板的框图。图92A是图示了根据本公开的实施例的通用矢量友好指令格式及其A类指令模板的框图;而图92B是图示了根据本公开的实施例的通用矢量友好指令格式及其B类指令模板的框图。具体地,通用矢量友好指令格式9200是为A类和B类指令模板而定义的,其两者都不包括存储器访问9205指令模板和存储器访问9220指令模板。在矢量友好指令格式的上下文中通用的术语指代不束缚于任何特定指令集的指令格式。
虽然将描述其中矢量友好指令格式支持下列各项的本公开的实施例:具有32位(4字节)或64位(8字节)数据元素宽度(或大小)的64字节矢量操作数长度(或大小)(并且因此,64字节矢量由16个双字大小元素或者替换地8个四字大小元素构成);具有16位(2字节)或8位(1字节)数据元素宽度(或大小)的64字节矢量操作数长度(或大小);具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的32字节矢量操作数长度(或大小);以及具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的16字节矢量操作数长度(或大小);替换的实施例可以支持具有更多的、更少的或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)的更多的、更少的和/或不同的矢量操作数大小(例如,256字节矢量操作数)。
图92A中的A类指令模板包括:1)在无存储器访问9205指令模板内示出了无存储器访问完全舍入控制类型运算9210指令模板和无存储器访问数据变换类型运算9215指令模板;并且2)在存储器访问9220指令模板内示出了存储器访问临时9225指令模板和存储器访问非临时9230指令模板。图92B中的B类指令模板包括:1)在无存储器访问9205指令模板内示出了无存储器访问写入掩码控制、部分舍入控制类型运算9212指令模板和无存储器访问写入掩码控制VSIZE类型运算9217指令模板;并且2)在存储器访问9220指令模板内示出了存储器访问写入掩码控制9227指令模板。
通用矢量友好指令格式9200包括在下面按照图92A-92B中所图示的次序列出的以下字段。
格式字段9240—此字段中的特定值(指令格式标识符值)唯一地标识矢量友好指令格式,并且因此唯一地标识指令流中的采用矢量友好指令格式的指令的出现。照此,此字段在对于仅有通用矢量友好指令格式的指令集来说它是不需要的意义上是可选的。
基础运算字段9242—其内容区分不同的基础运算。
寄存器索引字段9244—其内容直接地或者通过地址生成来指定源操作数和目的地操作数的位置,而无论它们在寄存器中还是在存储器中。这些包括足够数量的位以从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器堆中选择N个寄存器。虽然在一个实施例中,N可以多达三个源和一个目的地寄存器,但是替换的实施例可以支持更多的或更少的源和目的地寄存器(例如,可以支持其中这些源中的一个也作为目的地的多达两个源,可以支持其中这些源中的一个也作为目的地的多达三个源,可以支持多达两个源和一个目的地)。
修饰符字段9246—其内容区分指定存储器访问的采用通用矢量指令格式的指令的出现和不指定存储器访问的那些;即,在无存储器访问9205指令模板与存储器访问9220指令模板之间。存储器访问操作读取和/或写入到存储器层次(在一些情况下使用寄存器中的值来指定源和/或目的地地址),然而非存储器访问操作不这样做(例如,源和目的地是寄存器)。虽然在一个实施例中,此字段也在三种不同的方式之间进行选择以实行存储器地址计算,但是替换的实施例可以支持更多的、更少的或不同的方式来实行存储器地址计算。
扩增运算字段9250—其内容区分除了基础运算之外还要实行各种不同运算中的哪一个运算。此字段是上下文特定的。在本公开的一个实施例中,此字段被划分成类字段9268、α字段9252和β字段9254。扩增运算字段9250允许在单个指令而不是2、3或4个指令中实行公共组运算。
定标字段9260—其内容允许用于存储器地址生成(例如,用于使用2scale * 索引+基址的地址生成)的索引字段的内容的定标实现。
位移字段9262A—其内容被用作存储器地址生成(例如,用于使用2scale * 索引+基址+位移的地址生成)的一部分。
位移因子字段9262B(注意,位移字段9262A直接在位移因子字段9262B上的并置指示一个或另一个被使用)—其内容被用作地址生成的一部分;它指定将按存储器访问的大小(N)来定标的位移因子—其中N是存储器访问中(例如,用于使用2scale * 索引+基址+定标位移的地址生成)的字节的数量。冗余低位比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作数总大小(N)以便生成要在计算有效地址时使用的最终位移。N的值由处理器硬件在运行时基于完整操作码字段9274(稍后在本文中描述)和数据操纵字段9254C来确定。位移字段9262A和位移因子字段9262B在它们未被用于无存储器访问9205指令模板和/或不同的实施例可以仅实现这两个中的一个或者都不实现的意义上是可选的。
数据元素宽度字段9264—其内容区分许多数据元素宽度中的哪一个将被使用(在一些实施例中用于所有指令;在其他实施例中用于仅一些指令)。此字段在如果支持仅一个数据元素宽度和/或使用操作码的某个方面来支持数据元素宽度则它是不需要的意义上是可选的。
写入掩码字段9270—其内容在每数据元素方位基础上控制目的地矢量操作数中的数据元素方位是否反映基础运算和扩增运算的结果。A类指令模板支持合并写入掩码处理,而B类指令模板支持合并写入掩码处理和归零写入掩码处理两者。当合并时,矢量掩码允许目的地中的任何元素集在任何操作(由基础运算和扩增运算指定)的执行期间被保护免于更新;在其他一个实施例中,保存对应掩码位具有0的目的地的每个元素的旧值。相比之下,当归零时矢量掩码允许目的地中的任何元素集在任何操作(由基础运算和扩增运算指定)的执行期间被归零;在一个实施例中,当对应掩码位具有0值时,目的地的元素被设置为0。这个功能性的子集是用以控制正在实行的操作的矢量长度(即,从第一个到最后一个的正在修改的元素的跨度)的能力;然而,被修改的元素不一定是连续的。因此,写入掩码字段9270允许部分矢量运算,包括加载、存储、算术、逻辑等。虽然描述了其中写入掩码字段9270的内容选择许多写入掩码寄存器中的包含要使用的写入掩码的一个(并且因此写入掩码字段9270的内容间接地标识要实行的那个掩码处理)的本公开的实施例,但是替换的实施例代替地或附加地允许掩码写入字段9270的内容直接地指定要实行的掩码处理。
立即数字段9272—其内容允许立即数的指定。此字段在它不存在于不支持立即数的通用矢量友好格式的实现方式中并且它不存在于不使用立即数的指令中的意义上是可选的。
类字段9268—其内容区分不同类的指令。参照图92A-B,此字段的内容在A类指令和B类指令之间选择。在图92A-B中,圆角正方形被用来指示在字段中存在特定值(例如,分别在图92A-B中用于类字段9268的A类9268A和B类9268B)。
A类的指令模板
在A类的非存储器访问9205指令模板的情况下,α字段9252被解释为RS字段9252A,其内容区分不同的扩增运算类型中的哪一种类型将被实行(例如,舍入9252A.1和数据变换9252A.2分别被指定用于无存储器访问、舍入类型运算9210和无存储器访问、数据变换类型运算9215指令模板),而β字段9254区分所指定的类型的运算中的哪一个将被实行。在无存储器访问9205指令模板中,定标字段9260、位移字段9262A和位移定标字段9262B不存在。
无存储器访问指令模板--完全舍入控制类型操作
在无存储器访问完全舍入控制类型运算9210指令模板中,β字段9254被解释为舍入控制字段9254A,其(一个或多个)内容提供静态舍入。虽然在所描述的本公开的实施例中舍入控制字段9254A包括抑制所有浮点异常(SAE)字段9256和舍入运算控制字段9258,但是替换的实施例可以支持可以将这些概念两者编码到相同字段中或者仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入运算控制字段9258)。
SAE字段9256—其内容区分是否禁用异常事件报告;当SAE字段的9256的内容指示抑制被启用时,给定指令不报告任何种类的浮点异常标志并且不产生任何浮点异常处理程序。
舍入运算控制字段9258—其内容区分要实行一组舍入运算中的哪一个(例如,上舍入、下舍入、向零舍入和最近舍入)。因此,舍入运算控制字段9258允许在每指令的基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入运算控制字段9250的内容覆盖(override)该寄存器值。
无存储器访问指令模板--数据变换类型运算
在无存储器访问数据变换类型运算9215指令模板中,β字段9254被解释为数据变换字段9254B,其内容区分许多数据变换中的哪一个将被实行(例如,无数据变换、混合(swizzle)、广播)。
在A类的存储器访问9220指令模板的情况下,α字段9252被解释为驱逐提示字段9252B,其内容区分驱逐提示中的哪一个将被使用(在图92A中,临时9252B.1和非临时9252B.2是分别为存储器访问临时9225指令模板和存储器访问非临时9230指令模板而指定的),然而β字段9254被解释为数据操纵字段9254C,其内容区分许多数据操纵运算(也被称为基元)中的哪一个将被实行(例如,不操纵;广播;对源的上转换;以及对目的地的下转换)。存储器访问9220指令模板包括定标字段9260,并且可选地包括位移字段9262A或位移定标字段9262B。
矢量存储器指令利用转换支持来实行从存储器的矢量加载和到存储器的矢量存储。与规则矢量指令一样,矢量存储器指令以逐数据元素方式转移来自/到存储器的数据,其中被实际地转移的元素通过被选择作为写入掩码的矢量掩码的内容来规定。
存储器访问指令模板—临时
临时数据是很可能被足够快重用以受益于高速缓存的数据。然而,这是提示,并且不同的处理器可以以不同的方式实现它,包括完全地忽略该提示。
存储器访问指令模板--非临时
非临时数据是不太可能被足够快重用以受益于在第一级高速缓存中进行高速缓存的数据并且应该被优先考虑驱逐。然而,这是提示,并且不同的处理器可以以不同的方式实现它,包括完全地忽略该提示。
B类的指令模板
在B类的指令模板的情况下,α字段9252被解释为写入掩码控制(Z)字段9252C,其内容区分通过写入掩码字段9270控制的写入掩码处理应该是合并还是归零。
在B类的非存储器访问9205指令模板的情况下,β字段9254的一部分被解释为RL字段9257A,其内容区分不同的扩增运算类型中的哪一种将被实行(例如,舍入9257A.1和矢量长度(VSIZE)9257A.2是分别为无存储器访问、写入掩码控制、部分舍入控制类型运算9212指令模板和无存储器访问、写入掩码控制、VSIZE类型运算9217指令模板而指定的),然而β字段9254的其余部分区分所指定的类型的运算中的哪一个将被实行。在无存储器访问9205指令模板中,定标字段9260、位移字段9262A和位移定标字段9262B不存在。
在无存储器访问、写入掩码控制、部分舍入控制类型运算9210指令模板中,β字段9254的其余部分被解释为舍入运算字段9259A,并且异常事件报告被禁用(给定指令不报告任何种类的浮点异常标志并且不产生任何浮点异常处理程序)。
舍入运算控制字段9259A—就像舍入运算控制字段9258一样,其内容区分要实行一组舍入运算中的哪一个(例如,上舍入、下舍入、向零舍入和最近舍入)。因此,舍入运算控制字段9259A允许在每指令的基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入运算控制字段9250的内容覆盖该寄存器值。
在无存储器访问、写入掩码控制、VSIZE类型运算9217指令模板中,β字段9254的其余部分被解释为矢量长度字段9259B,其内容区分许多数据矢量长度中的哪一个将被实行(例如,128、256或512字节)。
在B类的存储器访问9220指令模板的情况下,β字段9254的一部分被解释为广播字段9257B,其内容区分广播类型数据操纵运算是否将被实行,然而β字段9254的其余部分被解释为矢量长度字段9259B。存储器访问9220指令模板包括定标字段9260,并且可选地包括位移字段9262A或位移定标字段9262B。
关于通用矢量友好指令格式9200,完整操作码字段9274被示出为包括格式字段9240、基础运算字段9242和数据元素宽度字段9264。虽然示出了其中完整操作码字段9274包括所有这些字段的一个实施例,但是完整操作码字段9274在不支持所有这些字段的实施例中包括不到所有这些字段的字段。完整操作码字段9274提供操作码(opcode)。
扩增运算字段9250、数据元素宽度字段9264和写入掩码字段9270允许以通用矢量友好指令格式在每指令的基础上指定这些特征。
写入掩码字段和数据元素宽度字段的组合创建键入指令,因为它们允许基于不同的数据元素宽度来应用掩码。
在A类和B类内找到的各种指令模板在不同情况下是有益的。在本公开的一些实施例中,不同的处理器或处理器内的不同的核心可以支持仅A类、仅B类或两类。例如,意在供通用计算使用的高性能通用无序核心可以支持仅B类,主要意在供图形和/或科学(吞吐量)计算使用的核心可以支持仅A类,并且意在供两者使用的核心可以支持两者(当然,具有来自两个类的模板和指令而非来自两个类的所有模板和指令的某种混合的核心在本公开的范围内)。而且,单个处理器可以包括多个核心,其中的全部都支持相同的类或者其中不同的核心支持不同的类。例如,在具有单独的图形和通用核心的处理器中,主要意在供图形和/或科学计算使用的图形核心中的一个可以支持仅A类,而通用核心中的一个或多个可以是具有意在供支持仅B类的通用计算使用的无序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可以包括支持A类和B类两者的一个以上通用有序或无序核心。当然,也可在本公开的不同实施例中以其它类实现来自一个类的特征。用高级语言编写的程序将被转换(例如,及时编译或静态地编译)成各种不同的可执行形式,包括:1)仅具有由目标处理器支持以供执行的(一个或多个)类的指令的形式;或者2)具有使用所有类的指令的不同组合编写的替换例程并且具有控制流代码的形式,该控制流代码基于由当前正在执行代码的处理器所支持的指令来选择要执行的例程。
示例性具体矢量友好指令格式
图93是图示了根据本公开的实施例的示例性具体矢量友好指令格式的框图。图93示出了在它指定字段的位置、大小、解释和次序以及用于那些字段中的一些的值的意义上特定的具体矢量友好指令格式9300。具体矢量友好指令格式9300可以被用来扩展x86指令集,并且因此一些字段与在现有x86指令集及其扩展(例如,AVX)中使用的那些字段类似或相同。这种格式保持与具有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段和立即数字段一致。图示了来自图92的字段映射到来自图93的字段中。
应该理解的是,尽管出于说明性目的,在通用矢量友好指令格式9200的上下文中参照具体矢量友好指令格式9300对本公开的实施例进行描述,然而除非在要求保护的情况下,否则本公开并不限于具体矢量友好指令格式9300。例如,通用矢量友好指令格式9200为各种字段设想了各种可能的大小,同时具体矢量友好指令格式9300被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段9264被图示为具体矢量友好指令格式9300中的一个位字段,但是本公开不受如此限制(即,通用矢量友好指令格式9200设想了数据元素宽度字段9264的其他大小)。
通用矢量友好指令格式9200包括在下面按照图92A中图示的次序列出的以下字段。
EVEX前缀(字节0-3)9302—被以四字节形式编码。
格式字段9240(EVEX字节0,位[7:0])—第一字节(EVEX字节0)是格式字段9240,并且它包含0x62(用于在本公开的一个实施例中区分矢量友好指令格式的唯一值)。
第二至第四字节(EVEX字节1-3)包括提供特定能力的许多位字段。
REX字段9305(EVEX字节1,位[7-5])—由EVEX.R位字段(EVEX字节1,位[7]-R)、EVEX.X位字段(EVEX字节1,位[6]-X)和9257 BEX字节1、位[5]-B)构成。EVEX.R、EVEX.X和EVEX.B位字段提供与相对应的VEX位字段相同的功能性,并且使用1s补码形式来编码,即,ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段对如本领域已知的寄存器索引的低三个位(rrr,xxx和bbb)进行编码,使得可以通过加上EVEX.R、EVEX.X和EVEX.B来形成Rrrr、Xxxx和Bbbb。
REX’字段9210—这是REX’字段9210的第一部分,并且是被用来对扩展的32寄存器集的上部16个或下部16个进行编码的EVEX.R’位字段(EVEX字节1,位[4]-R’)。在本公开的一个实施例中,这个位以及如在下面指示的其他位被以位反转格式存储,以(在众所周知的x86 32位模式下)与BOUND指令区分开,该BOUND指令的真实操作码字节是62,但是在MOD R/M字段(在下面描述)中不接受MOD字段中的值11;本公开的替换实施例不以反转格式存储这个位和在下面的其他指示的位。值1被用来对低16个寄存器进行编码。换句话说,R’Rrrr是通过组合EVEX.R’、EVEX.R和来自其他字段的其他RRR而形成的。
操作码映射字段9315(EVEX字节1,位[3:0]-mmmm)—其内容对隐含的前导操作码字节(0F、0F 38或0F 3)进行编码。
数据元素宽度字段9264(EVEX字节2,位[7]-W)—通过表示法EVEX.W来表示。EVEX.W被用来定义数据类型(32位数据元素或64位数据元素)的粒度(大小)。
EVEX.vvvv 9320(EVEX字节2,位[6:3]-vvvv)—EVEX.vvvv的作用可以包括下列内容:1)EVEX.vvvv对以反转(1s补码)形式指定的第一源寄存器操作数进行编码,并且对于具有2个或更多个源操作数的指令来说有效;2)EVEX.vvvv对以1s补码形式为某些矢量移位指定的目的地寄存器操作数进行编码;或者3)EVEX.vvvv不对任何操作数进行编码,该字段被保留并且应该包含1111b。因此,EVEX.vvvv字段9320对以反转(1s补码)形式存储的第一源寄存器说明符的4个低位比特进行编码。取决于指令,额外不同的EVEX位字段被用来将说明符大小扩展到32个寄存器。
EVEX.U 9268类字段(EVEX字节2,位[2]-U)—如果EVEX.U = 0,则它指示A类或EVEX.U0;如果EVEX.U = 1,则它指示B类或EVEX.U1。
前缀编码字段9325(EVEX字节2,位[1:0]-pp)—为基础运算字段提供附加位。除了以EVEX前缀格式为旧有SSE指令提供支持之外,这也具有压缩SIMD前缀的益处(不是需要一字节来表达SIMD前缀,而是EVEX前缀仅需要2个位)。在一个实施例中,为了支持既以旧有格式又以EVEX前缀格式使用SIMD前缀(66H、F2H、F3H)的旧有SSE指令,这些旧有SIMD前缀被编码到SIMD前缀编码字段中;并且在运行时在被提供给解码器的PLA之前被扩展成旧有SIMD前缀(所以PLA可以在没有修改的情况下执行这些旧有指令的旧有格式和EVEX格式两者)。尽管较新的指令可以直接将EVEX前缀编码字段的内容用作操作码扩展,然而某些实施例以类似的方式扩展以得到一致性,但是允许通过这些旧有SIMD前缀来指定不同的含义。替换的实施例可以重新设计PLA以支持2位SIMD前缀编码,并且因此不需要扩展。
α字段9252(EVEX字节3,位[7]-EH;也被称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写入掩码控制和EVEX.N;也用α图示)—如先前所描述的,此字段是上下文特定的。
β字段9254(EVEX字节3,位[6:4]-SSS,也被称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ图示)—如先前所描述的,此字段是上下文特定的。
REX’字段9210—这个是REX’字段的剩余部分,并且是可以被用来对扩展的32个寄存器集的上部16个或下部16个进行编码的EVEX.V’位字段(EVEX字节3,位[3]-V’)。此位被以位反转格式存储。值1被用来对下部16个寄存器进行编码。换句话说,V’VVVV是通过组合EVEX.V’、EVEX.vvvv而形成的。
写入掩码字段9270(EVEX字节3,位[2:0]-kkk)—其内容像先前所描述的那样指定写入掩码寄存器中的寄存器的索引。在本公开的一个实施例中,特定值EVEX.kkk=000具有暗示写入掩码未被用于特定指令的特殊行为(可以以包括使用硬连线到全一的写入掩码或绕过掩码处理硬件的硬件的各种方式实现这个)。
真实操作码字段9330(字节4)也被称为操作码字节。在此字段中指定操作码的一部分。
MOD R/M字段9340(字节5)包括MOD字段9342、Reg字段9344和R/M字段9346。如先前描述的,MOD字段9342的内容区分存储器访问操作和非存储器访问操作。Reg字段9344的作用可被概括为两种情况:对目的地寄存器操作数或源寄存器操作数进行编码,或者被视为操作码扩展,并且不用于对任何指令操作数进行编码。R/M字段9346的作用可以包括以下内容:对引用存储器地址的指令操作数进行编码,或者对目的地寄存器操作数或源寄存器操作数进行编码。
定标、索引、基址(SIB)字节(字节6)—如先前描述的,定标字段5450的内容被用于存储器地址生成。SIB.xxx 9354和SIB.bbb 9356—先前已经关于寄存器索引Xxxx和Bbbb参考了这些字段的内容。
位移字段9262A(字节7-10)—当MOD字段9342包含10时,字节7-10是位移字段9262A,并且它与旧有32位位移(disp32)相同地工作,并且以字节粒度进行工作。
位移因子字段9262B(字节7)—当MOD字段9342包含01时,字节7是位移因子字段9262B。此字段的位置与以字节粒度进行工作的旧有x86指令集8位位移(disp8)的位置相同。因为disp8是符号扩展的,所以它仅可以在-128字节偏移与127字节偏移之间寻址;在64字节高速缓存行方面,disp8使用可以被设置为仅四个真正有用的值-128、-64、0和64的8个位;因为经常需要更大范围,所以使用disp32;然而,disp32需要4个字节。同disp8和disp32相比,位移因子字段9262B是disp8的重新解释;当使用位移因子字段9262B时,实际位移通过位移因子字段乘以存储器操作数访问的大小(N)的内容来确定。这种类型的位移被称为disp8*N。这减小平均指令长度(被用于位移的单个字节但是具有大得多的范围)。这样的压缩位移基于有效位移是存储器访问的粒度的倍数的假设,并且因此,地址偏移的冗余低位比特不需要被编码。换句话说,位移因子字段9262B取代旧有x86指令集8位位移。因此,位移因子字段9262B被以与x86指令集8位移位相同的方式编码(所以ModRM/SIB编码规则没有变化),唯一例外是disp8被重载为disp8*N。换句话说,在编码规则或编码长度方面没有变化,而是仅在由硬件对位移值的解释方面存在变化(这需要按存储器操作数的大小对位移定标以获得逐字节地址偏移)。立即数字段9272像先前所描述的那样操作。
完整操作码字段
图93B是图示了根据本公开的一个实施例的组成完整操作码字段9274的具体矢量友好指令格式9300的字段的框图。具体地,完整操作码字段9274包括格式字段9240、基础运算字段9242和数据元素宽度(W)字段9264。基础运算字段9242包括前缀编码字段9325、操作码映射字段9315和真实操作码字段9330。
寄存器索引字段
图93C是图示了根据本公开的一个实施例的组成寄存器索引字段9244的具体矢量友好指令格式9300的字段的框图。具体地,寄存器索引字段9244包括REX字段9305、REX’字段9310、MODR/M.reg字段9344、MODR/M.r/m字段9346、VVVV字段9320、xxx字段9354和bbb字段9356。
扩增运算字段
图93D是图示了根据本公开的一个实施例的组成扩增运算字段9250的具体矢量友好指令格式9300的字段的框图。当类(U)字段9268包含0时,它表示EVEX.U0(A类9268A);当它包含1时,它表示EVEX.U1(B类9268B)。当U=0并且MOD字段9242包含11(表示无存储器访问操作)时,α字段9252(EVEX字节3,位[7]-EH)被解释为rs字段9252A。当rs字段9252A包含1(舍入9252A.1)时,β字段9254(EVEX字节3,位[6:4]-SSS)被解释为舍入控制字段9254A。舍入控制字段9254A包括一位SAE字段9256和二位舍入运算字段9258。当rs字段9252A包含0(数据变换9252A.2)时,β字段9254(EVEX字节3,位[6:4]-SSS)被解释为三位数据变换字段9254B。当U=0并且MOD字段9242包含00、01或10(表示存储器访问操作)时,β字段9252(EVEX字节3,位[7]-EH)被解释为驱逐提示(EH)字段9252B,并且β字段9254(EVEX字节3,位[6:4]-SSS)被解释为三位数据操纵字段9254C。
当U=1时,α字段9252(EVEX字节3,位[7]-EH)被解释为写入掩码控制(Z)字段9252C。当U=1并且MOD字段9342包含11(表示无存储器访问操作)时,β字段9254的一部分(EVEX字节3,位[4]-S0)被解释为RL字段9257A;当它包含1(舍入9257A.1)时,β字段9254的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为舍入运算字段9259A,而当RL字段9257A包含0(VSIZE 9257.A2)时,β字段9254的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为矢量长度字段9259B(EVEX字节3,位[6-5])-L1-0)。当U=1并且MOD字段9342包含00、01或10(表示存储器访问操作)时,β字段9254(EVEX字节3,位[6:4]-SSS)被解释为矢量长度字段9259B(EVEX字节3,位[6-5]-L1-0)和广播字段9257B(EVEX字节3,位[4]-B)。
示例性寄存器架构
图94是根据本公开的一个实施例的寄存器架构9400的框图。在所图示的实施例中,存在为512位宽的32个矢量寄存器9410;这些寄存器被称为zmm0至zmm31。低16个zmm寄存器的低位256个位被覆盖在寄存器ymm0-16上。低16个zmm寄存器的低位128个位(ymm寄存器的低位128个位)被覆盖在寄存器xmm0-15上。具体矢量友好指令格式9300如下表所说明的那样在这些覆盖寄存器堆上操作。
换句话说,矢量长度字段9259B在最大长度与一个或多个其他较短长度之间选择,其中每个这样的较短长度是先前长度的一半长度;并且没有矢量长度字段9259B的指令模板在最大矢量长度上操作。另外,在一个实施例中,具体矢量友好指令格式9300的B类指令模板在分组或标量单/双精度浮点数据和分组或标量整数数据上操作。标量运算是对zmm/ymm/xmm寄存器中的最低位数据元素方位实行的运算;较高位数据元素方位保持与它们在指令之前相同或者取决于该实施例被归零。
写入掩码寄存器9415—在所图示的实施例中,存在8个写入掩码寄存器(k0至k7),每个大小为64位。在替换的实施例中,写入掩码寄存器9415的大小是16位。如先前描述的,在本公开的一个实施例中,矢量掩码寄存器k0不能被用作写入掩码;当通常将指示k0的编码被用于写入掩码时,它选择0xFFFF的硬连线写入掩码,从而针对该指令有效地禁用写入掩码。
通用寄存器9425—在所图示的实施例中,存在连同现有x86寻址模式一起使用来对存储器操作数进行寻址的十六个64位通用寄存器。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15来引用。
上面混叠了MMX分组整数平面寄存器堆9450的标量浮点堆栈寄存器堆(x87堆栈)9445—在所图示的实施例中,x87堆栈是用于对使用x87指令集扩展的32/64/80位浮点数据实行标量浮点运算的八元素堆栈;然而MMX寄存器用于对64位分组整数数据实行运算,以及用于为在MMX寄存器与XMM寄存器之间实行的一些运算保持操作数。
本公开的替换实施例可以使用更宽或更窄的寄存器。附加地,本公开的替换实施例可以使用更多的、更少的或不同的寄存器堆和寄存器。
示例性核心架构、处理器和计算机架构
可以以不同的方式、出于不同的目的并且在不同的处理器中实现处理器核心。例如,此类核心的实现方式可以包括:1)意在供通用计算使用的通用有序核心;2)意在供通用计算使用的高性能通用无序核心;3)主要意在供图形和/或科学(吞吐量)计算使用的专用核心。不同的处理器的实现方式可以包括:1)CPU,其包括意在供通用计算使用的一个或多个通用有序核心,和/或意在供通用计算使用的一个或多个通用无序核心;以及2)协处理器,其包括主要意在供图形和/或科学(吞吐量)使用的一个或多个专用核心。此类不同的处理器导致不同的计算机系统架构,其可以包括:1)在与CPU分离的芯片上的协处理器;2)在与CPU相同的封装中的单独的芯片上的协处理器;3)在与CPU相同的管芯上的协处理器(在此情况下,这样的协处理器有时被称为专用逻辑,诸如集成图形和/或科学(吞吐量)逻辑,或者称为专用核心);以及4)片上系统,其可以在同一管芯上包括所描述的CPU(有时被称为(一个或多个)应用核心或(一个或多个)应用处理器)、上述协处理器和附加功能性。接下来对示例性核心架构进行描述,接着是示例性处理器和计算机架构的描述。
示例性核心架构
有序和无序核心框图
图95A是图示了根据本公开的实施例的示例性有序流水线和示例性寄存器重命名无序发射/执行流水线两者的框图。图95B是图示了根据本公开的实施例的要包括在处理器中的有序架构核心和示例性寄存器重命名无序发射/执行架构核心两者的示例性实施例的框图。图95A-B中的实线框图示了有序流水线和有序核心,而虚线框的可选添加图示了寄存器重命名无序发射/执行流水线和核心。鉴于有序方面是无序方面的子集,所以将描述无序方面。
在图95A中,处理器流水线9500包括取出级9502、长度解码级9504、解码级9506、分配级9508、重命名级9510、调度(也被称为分派或发射)级9512、寄存器读取/存储器读取级9514、执行级9516、回写/存储器写入级9518、异常处理级9522和提交级9524。
图95B示出了包括耦合到执行引擎单元9550的前端单元9530的处理器核心9590,并且前端单元9530和执行引擎单元9550两者都耦合到存储器单元9570。核心9590可以是精简指令集计算(RISC)核心、复杂指令集计算(CISC)核心、甚长指令字(VLIW)核心或者混合或替换的核心类型。作为又另一个选项,核心9590可以是专用核心,诸如例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(GPGPU)核心、图形核心等等。
前端单元9530包括:耦合到指令高速缓存单元9534的分支预测单元9532,该指令高速缓存单元9534耦合到指令转换后备缓冲器(TLB)9536,该指令转换后备缓冲器(TLB)9536耦合到指令取出单元9538,该指令取出单元9538耦合到解码单元9540。解码单元9540(或解码器或解码器单元)可以对指令(例如,宏指令)进行解码,并且生成从原始指令解码或者以其他方式反映原始指令或者从原始指令得到的一个或多个微运算、微码入口点、微指令、其他指令或其他控制信号作为输出。可以使用各种不同的机制来实现解码单元9540。适合的机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(PLA)、微码只读存储器(ROM)等。在一个实施例中,核心9590包括微码ROM或存储用于某些宏指令的微码的其他介质(例如,在解码单元9540中或者以其他方式在前端单元9530内)。解码单元9540耦合到执行引擎单元9550中的重命名/分配器单元9552。
执行引擎单元9550包括:耦合到收回单元9554和一组一个或多个调度器单元9556的重命名/分配器单元9552。(一个或多个)调度器单元9556表示任何数量的不同的调度器,包括保留站、中央指令窗口等。(一个或多个)调度器单元9556耦合到(一个或多个)物理寄存器堆(一个或多个)单元9558。(一个或多个)物理寄存器堆单元9558中的每一个表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、分组整数、分组浮点、矢量整数、矢量浮点、状态(例如,作为要执行的下一个指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元9558包括矢量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构矢量寄存器、矢量掩码寄存器和通用寄存器。(一个或多个)物理寄存器堆(一个或多个)单元9558被收回单元9554重叠以图示可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)收回寄存器堆;使用(一个或多个)将来堆、(一个或多个)历史缓冲器和(一个或多个)收回寄存器堆;使用寄存器映射和寄存器池等)。收回单元9554和(一个或多个)物理寄存器堆(一个或多个)单元9558耦合到(一个或多个)执行集群9560。(一个或多个)执行集群9560包括一组一个或多个执行单元9562和一组一个或多个存储器访问单元9564。执行单元9562可以实行各种运算(例如,移位、加法、减法、乘法),并且可以对各种类型的数据(例如,标量浮点、分组整数、分组浮点、矢量整数、矢量浮点)实行各种运算(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集的许多执行单元,但是其他实施例可以仅包括一个执行单元或全部实行所有功能的多个执行单元。(一个或多个)调度器单元9556、(一个或多个)物理寄存器堆(一个或多个)单元9558和(一个或多个)执行集群9560被示为有可能是多个,因为某些实施例为某些类型的数据/运算创建单独的流水线(例如,标量整数流水线、标量浮点/分组整数/分组浮点/矢量整数/矢量浮点流水线,和/或各自具有它们自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群的存储器访问流水线—并且在单独的存储器访问流水线的情况下,实现了其中仅此流水线的执行集群具有(一个或多个)存储器访问单元9564的某些实施例)。也应该理解的是,在使用单独的流水线的情况下,这些流水线中的一个或多个可以是无序发射/执行而其余部分是有序发射/执行。
该组存储器访问单元9564耦合到存储器单元9570,该存储器单元9570包括耦合到数据高速缓存单元9574的数据TLB单元9572,该数据高速缓存单元9574耦合到第2级(L2)高速缓存单元9576。在一个示例性实施例中,存储器访问单元9564可以包括加载单元、存储地址单元和存储数据单元,其中的每一个都耦合到存储器单元9570中的数据TLB单元9572。指令高速缓存单元9534进一步耦合到存储器单元9570中的第2级(L2)高速缓存单元9576。L2高速缓存单元9576耦合到一个或多个其他级高速缓存并且最终耦合到主存储器。
作为示例,示例性寄存器重命名、无序发射/执行核心架构可以实现流水线9500如下:1)指令取出9538实行取出级9502和长度解码级9504;2)解码单元9540实行解码级9506;3)重命名/分配器单元9552实行分配级9508和重命名级9510;4)(一个或多个)调度器单元9556实行调度级9512;5)(一个或多个)物理寄存器堆(一个或多个)单元9558和存储器单元9570实行寄存器读取/存储器读取级9514;执行集群9560实行执行级9516;6)存储器单元9570和(一个或多个)物理寄存器堆(一个或多个)单元9558实行写回/存储器写入级9518;7)各种单元可能涉及异常处理级9522;以及8)收回单元9554和(一个或多个)物理寄存器堆(一个或多个)单元9558实行提交级9524。
核心9590可以支持一个或多个指令集(例如,x86指令集(具有已被添加有较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS Technologies的MIPS指令集;加利福尼亚州桑尼维尔的ARM Holdings的ARM指令集(具有诸如NEON之类的可选附加扩展),包括本文中所描述的(一个或多个)指令。在一个实施例中,核心9590包括:用以支持分组数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许使用分组数据来实行由许多多媒体应用使用的运算。
应该理解的是,核心可以支持多线程处理(执行两个或多个并行的运算或线程集),并且可以以各种方式这样做,该各种方式包括时间分片多线程处理、同时多线程处理(其中单个物理核心为物理核心正在同时多线程处理的线程中的每一个提供逻辑核心)或其组合(例如,此后诸如Intel®超线程技术中的时间分片取出和解码及同时多线程处理)。
虽然在无序执行的上下文中对寄存器重命名进行描述,但是应该理解的是,可以在有序架构中使用寄存器重命名。尽管所图示的处理器的实施例也包括单独的指令和数据高速缓存单元9534/9574和共享L2高速缓存单元9576,然而替换的实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如第1级(L1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及在核心和/或处理器外部的外部高速缓存的组合。替换地,所有高速缓存可以在核心和/或处理器外部。
具体示例性有序核心架构
图96A-B图示了更具体的示例性有序核心架构的框图,该核心将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核心)中的一个。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与某个固定功能逻辑、存储器I/O接口和其他必要的I/O逻辑进行通信。
图96A是根据本公开的实施例的单个处理器核心的框图,以及其到管芯上互联网络9602和与第2级(L2)高速缓存9604的其本地子集的连接。在一个实施例中,指令解码单元9600支持具有分组数据指令集扩展的x86指令集。L1高速缓存9606允许对存储器高速缓存到标量和矢量单元中的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元9608和矢量单元9610使用单独的寄存器集(分别为标量寄存器9612和矢量寄存器9614),并且在它们之间转移的数据被写入到存储器,以及然后从第1级(L1)高速缓存9606读回来,然而本公开的替换实施例可以使用不同的方法(例如,使用单个寄存器集,或者包括允许在两个寄存器堆之间转移数据而数据不用被写入和读回的通信路径)。。
L2高速缓存9004的本地子集是全局L2高速缓存的被划分成单独的本地子集的部分,每处理器核心各一个。每个处理器核心具有到它自己的L2高速缓存9604的本地子集的直接访问路径。由处理器核心读取的数据被存储在其L2高速缓存子集9604中,并且可与其他处理器核心访问它们自己的本地L2高速缓存子集并行地被快速地访问。由处理器核心写入的数据被存储在它自己的L2高速缓存子集9604中,并且必要时被从其他子集转储清除。环形网络对于共享数据确保一致性。环形网络是双向的,以允许诸如处理器核心、hf高速缓存和其他逻辑块之类的代理在芯片内相互通信。每个环形数据路径是每方向1012位宽的。
图96B是根据本公开的实施例的图96A中的处理器核心的部分的展开图。图96B包括L1高速缓存9604的L1数据高速缓存9606A部分,以及有关矢量单元9610和矢量寄存器9614的更多细节。具体地,矢量单元9610是16宽矢量处理单元(VPU)(参见16宽ALU 9628),其执行整数指令、单精度浮点指令和双精度浮点指令中的一种或多种。VPU支持利用混合单元9620混合寄存器输入、利用数字转换单元9622A-B进行数值转换、以及利用复制单元9624对存储器输入进行复制。写入掩码寄存器9626允许预测结果得到的矢量写入。
图97是根据本公开的实施例的处理器9700的框图,该处理器9700可以具有多于一个核心,可以具有集成存储器控制器,并且可以具有集成显卡。图97中的实线框图示了具有单个核心9702A、系统代理9710、一组一个或多个总线控制器单元9716的处理器9700,而虚线框的可选添加图示了具有多个核心9702A-N、系统代理单元9710中的一组一个或多个集成存储器控制器单元9714和专用逻辑9708的替换处理器9700。
因此,处理器9700的不同的实现方式可以包括:1)CPU,其具有作为集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心)的专用逻辑9708,以及作为一个或多个通用核心(例如,通用有序核心、通用无序核心、两者的组合)的核心9702A-N;2)具有作为主要意在供图形和/或科学(吞吐量)使用的大量专用核心的核心9702A-N的协处理器;以及3)具有作为大量通用有序核心的核心9702A-N的协处理器。因此,处理器9700可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量多集成核心(MIC)协处理器(包括30个或更多个核心)、嵌入式处理器等等。可以在一个或多个芯片上实现处理器。使用许多工艺技术中的任一种(诸如例如,BiCMOS、CMOS或NMOS),处理器9700可以是一个或多个衬底的一部分,和/或可以被实现在一个或多个衬底上。
存储器层次包括核心内的一级或多级高速缓存、一组一个或多个共享高速缓存单元9706以及耦合到该组集成存储器控制器单元9714的外部存储器(未示出)。该组共享高速缓存单元9706可以包括一个或多个中级高速缓存,诸如第2级(L2)、第3级(L3)、第4级(L4)或其他级别的高速缓存、最后级高速缓存(LLC)和/或其组合。虽然在一个实施例中,基于环形的互连单元9712互连了集成图形逻辑9708、该组共享高速缓存单元9706和系统代理单元9710/(一个或多个)集成存储器控制器单元9714,但是替换的实施例可以使用用于互连这样的单元的任何数量的众所周知的技术。在一个实施例中,在一个或多个高速缓存单元9706与核心9702-A-N之间维持一致性。
在一些实施例中,核心9702A-N中的一个或多个能够多线程处理。系统代理9710包括协调并操作核心9702A-N的那些组件。系统代理单元9710可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或者包括用于调节核心9702A-N和集成图形逻辑9708的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个在外部连接的显示器。
核心9702A-N在架构指令集方面可以是同质的或异构的;即,核心9702A-N中的两个或更多个可以能够执行相同的指令集,然而其他核心可以能够仅执行该指令集的子集或不同的指令集。
示例性计算机架构
图98-101是示例性计算机架构的框图。本领域已知用于膝上型计算机、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络中枢、开关、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其他电子设备的其他系统设计和配置也是适合的。一般而言,能够并入如本文中所公开的处理器和/或其他执行逻辑的各种系统或电子设备通常是适合的。
现在参考图98,示出的是依照本公开的一个实施例的系统9800的框图。系统9800可以包括耦合到控制器中枢9820的一个或多个处理器9810、9815。在一个实施例中,控制器中枢9820包括图形存储器控制器中枢(GMCH) 9890和输入/输出中枢(IOH)9850(其可以在单独的芯片上);GMCH 9890包括耦合到存储器9840和协处理器9845的存储器和图形控制器;IOH 9850将输入/输出(I/O)设备9860耦合到GMCH 9890。替换地,存储器和图形控制器中的一个或两个被集成在处理器内(如本文中描述的),存储器9840和协处理器9845直接地耦合到处理器9810,并且控制器中枢9820与IOH 9850一起在单个芯片中。存储器9840可以包括编译器模块9840A,例如,以存储当被执行时使处理器实行本公开的任何方法的代码。
附加处理器9815的可选性质在图98中用虚线表示。每个处理器9810、9815可以包括本文中所描述的处理核心中的一个或多个,并且可以是处理器9700的某个版本。
存储器9840可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或两者的组合。对于至少一个实施例,控制器中枢9820经由多跳总线(诸如前端总线(FSB))、诸如快速路径互连(QPI)之类的点对点接口或类似的连接9895与(一个或多个)处理器9810、9815进行通信。
在一个实施例中,协处理器9845是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等。在一个实施例中,控制器中枢9820可以包括集成图形加速器。
就包括架构、微架构、热、功耗特性等等的指标的一系列度量而言,在物理资源9810、9815之间可以存在各种差异。
在一个实施例中,处理器9810执行控制一般类型的数据处理运算的指令。嵌入在指令内的可以是协处理器指令。处理器9810将这些协处理器指令识别为应该由附接的协处理器9845执行的类型。因此,处理器9810在协处理器总线或其他互连上向协处理器9845发出这些协处理器指令(或表示协处理器指令的控制信号)。(一个或多个)协处理器9845接受并执行所接收到的协处理器指令。
现在参考图99,示出的是依照本公开的实施例的第一更具体示例性系统9900的框图。如图99中所示,多处理器系统9900是点对点互连系统,并且包括经由点对点互连9950耦合的第一处理器9970和第二处理器9980。处理器9970和9980中的每一个可以是处理器9700的某个版本。在本公开的一个实施例中,处理器9970和9980分别是处理器9810和9815,而协处理器9938是协处理器9845。在另一实施例中,处理器9970和9980分别是处理器9810和协处理器9845。
处理器9770和9980被示出为分别包括集成存储器控制器(IMC)单元9972和9982。处理器9970也包括点对点(P-P)接口9976和9978作为其总线控制器单元的部分;类似地,第二处理器9980包括P-P接口9986和9988。处理器9970、9980可以使用P-P接口电路9978、9988来经由点对点(P-P)接口9950交换信息。如图99中所示,IMC 9972和9982将处理器耦合到相应的存储器,即存储器9932和存储器9934,其可以是在本地附接到相应的处理器的主存储器的各部分。
处理器9970、9980可以各自使用点对点接口电路9976、9994、9986、9998来经由单独的P-P接口9952、9954与芯片组9990交换信息。芯片组9990可以可选地经由高性能接口9939与协处理器9938交换信息。在一个实施例中,协处理器9938是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等。
共享高速缓存(未示出)可以被包括在任一个处理器中或者在两个处理器外部,仍然经由P-P互连与处理器连接,使得如果处理器被置于低功率模式中,则任一个或两个处理器的本地高速缓存信息可以被存储在共享高速缓存中。
芯片组9990可以经由接口9996耦合到第一总线9916。在一个实施例中,第一总线9916可以是外围组件互连(PCI)总线,或者是诸如PCI快速总线或另一第三代I/O互连总线之类的总线,但是本公开的范围不受如此限制。
如图99中所示,各种I/O设备9914可以连同将第一总线9916耦合到第二总线9920的总线桥接器9918一起耦合到第一总线9916。在一个实施例中,一个或多个附加处理器9915(诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器)耦合到第一总线9916。在一个实施例中,第二总线9920可以是低引脚数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线9920,该各种设备包括例如键盘和/或鼠标9922、通信设备9927以及诸如磁盘驱动器之类的存储单元9928或可以包括指令/代码和数据9930的其他大容量存储设备。另外,音频I/O 9924可以耦合到第二总线9920。注意的是,其他架构是可能的。例如,代替图99的点对点架构,系统可以实现多跳总线或其他这样的架构。
现在参考图100,示出的是依照本公开的实施例的第二更具体的示例性系统10000的框图。图99和100中的相似的元件具有相似的附图标记,并且已从图100中省略了图99的某些方面以免使图100的其他方面混淆。
图100图示了处理器9970、9980分别可以包括集成存储器和I/O控制逻辑(“CL”)9972和9982。因此,CL 9972、9982包括集成存储器控制器单元,并且包括I/O控制逻辑。图100图示了不仅存储器9932、9934耦合到CL 9972、9982,而且I/O设备10014也耦合到控制逻辑9972、9982。旧有I/O设备10015耦合到芯片组9990。
现在参考图101,示出的是依照本公开的实施例的SoC 10100的框图。图97中的类似的元件具有相似的附图标记。而且,虚线框是更先进SoC上的可选特征。在图101中,(一个或多个)互连单元10102耦合到:包括一组一个或多个核心202A-N和(一个或多个)共享高速缓存单元9706的应用处理器10110;系统代理单元9710;(一个或多个)总线控制器单元9716;(一个或多个)集成存储器控制器单元9714;可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器的一组一个或多个协处理器10120;静态随机存取存储器(SRAM)单元10130;直接存储器存取(DMA)单元10132;以及用于耦合到一个或多个外部显示器的显示单元10140。在一个实施例中,(一个或多个)协处理器10120包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等等。
本文中所公开的(例如,机制的)实施例可以用硬件、软件、固件或此类实现方式方法的组合加以实现。本公开的实施例可以作为在可编程系统上执行的计算机程序或程序代码被实现,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。
程序代码(诸如图99中图示的代码9930)可以被应用于输入指令以实行本文中所描述的功能并且生成输出信息。可以将输出信息以已知方式应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级过程或面向对象的编程语言加以实现,以与处理系统进行通信。视需要,程序代码也可以用汇编或机器语言加以实现。实际上,本文中描述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可能是编译或解释语言。
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性指令来实现,该代表性指令表示处理器内的各种逻辑,该代表性指令当由机器读取时使机器制作逻辑以实行本文中所描述的技术。被称为“IP核心”的此类表示可以被存储在有形机器可读介质上,并被供应给各种客户或制造设施以加载到实际地做出逻辑或处理器的制作机器中。
此类机器可读存储介质可以包括而不限于由机器或设备制造或形成的物品的非暂时性有形布置,包括诸如硬盘之类的存储介质,包括软盘、光盘、紧凑盘只读存储器(CD-ROM)、可重写紧凑盘(CD-RW)和磁光盘之类的任何其他类型的盘,诸如只读存储器(ROM)之类的半导体器件、诸如动态随机存取存储器(DRAM)之类的随机存取存储器(RAM)、静态随机存取存储器(SRAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁卡或光学卡,或适合于存储电子指令的任何其他类型的介质。
因此,本公开的实施例也包括:包含指令或者包含设计数据(诸如硬件描述语言(HDL))的非暂时性有形机器可读介质,该设计数据定义本文中所描述的结构、电路、装置、处理器和/或系统特征。这样的实施例也可以被称为程序产品。
仿真(包括二进制转换、代码变形等)
在一些情况下,可以使用指令转换器来将指令从源指令集转换为目标指令集。例如,指令转换器可以将指令转换(例如,使用静态二进制转换、包括动态编译的动态二进制转换)、变形、仿真或者以其他方式转换为要由核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或其组合加以实现。指令转换器可以在处理器上,在处理器外,或者部分在处理器上并且部分在处理器外。
图102是根据本公开的实施例的对比使用软件指令转换器来将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但是替换地,指令转换器可以用软件、固件、硬件或其各种组合加以实现。图102示出了可以使用x86编译器10204来编译高级语言10202的程序以生成可以由具有至少一个x86指令集核心10216的处理器在本机执行的x86二进制代码10206。具有至少一个x86指令集核心10216的处理器表示可以通过兼容地执行或者以其他方式处理以下各项来实行与具有至少一个x86指令集核心的Intel处理器基本上相同的功能以便实现与至少具有一个x86指令集核心的Intel处理器基本上相同的结果的任何处理器:(1)Intel x86指令集核心的指令集的基本部分,或者(2)旨在在具有至少一个x86指令集核心的Intel处理器上运行的应用或其他软件的目标代码版本。x86编译器10204表示可操作来生成x86二进制代码10206(例如,目标代码)的编译器,该x86二进制代码10206可以在有或没有附加链接处理的情况下在具有至少一个x86指令集核心10216的处理器上被执行。类似地,图102示出了可以使用替换的指令集编译器10208来编译采用高级语言10202的程序以生成替换的指令集二进制代码10210,该替换的指令集二进制代码10210可以由没有至少一个x86指令集核心10214的处理器(例如,具有执行加利福尼亚州桑尼维尔的MIPS Technologies的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM Holdings的ARM指令集的核心的处理器)在本机执行。指令转换器10212用于将x86二进制代码10206转换成可以由没有x86指令集核心10214的处理器在本机执行的代码。这种转换的代码不大可能与替换的指令集二进制代码10210相同,因为能够做这一点的指令转换器难以制造;然而,转换的代码将完成一般运算,并且由来自替换的指令集的指令组成。因此,指令转换器10212表示软件、固件、硬件或其组合,其通过仿真、模拟或任何其他过程,允许不具有x86指令集处理器或核心的处理器或其他电子设备将来执行x86二进制代码10206。
Claims (25)
1.一种装置,包括:
处理元件的空间阵列中的第一处理元件;
处理元件的空间阵列中的第二处理元件;
高速缓存;
第一存储器接口电路,其耦合到第一处理元件和高速缓存,第一存储器接口电路向高速缓存发出存储器请求,所述存储器请求包括以下字段,所述字段将第二存储器接口电路标识为用于所述存储器请求的数据的接收器;以及
第二存储器接口电路,其耦合到第二处理元件和高速缓存,当用于存储器请求的数据到达第二存储器接口电路时,第二存储器接口电路向第一存储器接口电路发送信用返回值,以使第一存储器接口电路将存储器请求标记为完成,并且第二存储器接口电路的完成配置寄存器被设置为远程响应值。
2.根据权利要求1所述的装置,其中,当用于第二存储器请求的数据到达第二存储器接口电路时,第二存储器接口电路将在第二存储器接口电路内发送第二信用返回值,以使第二存储器接口电路将来自第二存储器接口电路的第二存储器请求标记为完成,并且第二存储器接口电路的完成配置寄存器被设置为本地响应值。
3.根据权利要求1所述的装置,其中,第一存储器接口电路包括:接收器完成流控制寄存器,其在被设置为第一值时使开关从与第二存储器接口电路耦合的输入中获取信用返回值,并且在被设置为时第二值时使开关从第一存储器接口电路获取信用返回值。
4.根据权利要求1所述的装置,其中,第一存储器接口电路将不会向高速缓存发出另一个存储器请求,直到所述存储器请求被标记为完成为止。
5.根据权利要求1所述的装置,其中,当第二处理元件读取了存储用于存储器请求的数据的第二存储器接口电路的完成缓冲器的时隙时,第二存储器接口电路将发送信用返回值。
6.根据权利要求1所述的装置,其中,存储器请求包括:第二字段,用以标识第二存储器接口电路的完成缓冲器的时隙,以存储用于存储器请求的数据。
7.根据权利要求6所述的装置,其中,存储器请求包括:第三字段,用以将第一存储器接口电路标识为用于存储器请求的请求者。
8.根据权利要求1-7中任一项所述的装置,其中,第二存储器接口电路将在处理元件的空间阵列的电路交换网络的通道上发送信用返回值。
9.一种方法,包括:
从耦合到处理元件的空间阵列中的第一处理元件和高速缓存的第一存储器接口电路向高速缓存发出存储器请求,所述存储器请求包括以下字段,所述字段将第二存储器接口电路标识为用于存储器请求的数据的接收器;
将第二存储器接口电路的完成配置寄存器设置为远程响应值;以及
当用于存储器请求的数据到达第二存储器接口电路时,将信用返回值从耦合到处理元件的空间阵列中的第二处理元件和高速缓存的第二存储器接口电路发送到第一存储器接口电路,以使第一存储器接口电路将存储器请求标记为完成,并且第二存储器接口电路的完成配置寄存器被设置为远程响应值。
10.根据权利要求9所述的方法,进一步包括:当用于第二存储器请求的数据到达第二存储器接口电路时,第二存储器接口电路在第二存储器接口电路内发送第二信用返回值,以使第二存储器接口电路将来自第二存储器接口电路的第二存储器请求标记为完成,并且第二存储器接口电路的完成配置寄存器被设置为本地响应值。
11.根据权利要求9所述的方法,进一步包括:
将第一存储器接口电路的接收器完成流控制寄存器设置为第一值,以使开关从与第二存储器接口电路耦合的输入中获取信用返回值;以及
将第一存储器接口电路的接收器完成流控制寄存器设置为第二值,以使开关从第一存储器接口电路获取信用返回值。
12.根据权利要求9所述的方法,进一步包括:第一存储器接口电路不会向高速缓存发出另一个存储器请求,直到所述存储器请求被标记为完成为止。
13.根据权利要求9所述的方法,进一步包括:将用于所述存储器请求的数据存储在第二存储器接口电路的完成缓冲器的时隙中,其中,发送包括:当第二处理元件读取了存储用于所述存储器请求的数据的第二存储器接口电路的完成缓冲器的时隙时,第二存储器接口电路发送信用返回值。
14.根据权利要求9所述的方法,其中,存储器请求包括:第二字段,用以标识第二存储器接口电路的完成缓冲器的时隙,以存储用于存储器请求的数据。
15.根据权利要求14所述的方法,其中,存储器请求包括:第三字段,用以将第一存储器接口电路标识为用于存储器请求的请求者。
16.根据权利要求9-15中任一项所述的方法,进一步包括:第二存储器接口电路在处理元件的空间阵列的电路交换网络的通道上发送信用返回值。
17.一种存储代码的非暂时性机器可读介质,所述代码在由机器执行时使所述机器实行一种方法,包括:
从耦合到处理元件的空间阵列中的第一处理元件和高速缓存的第一存储器接口电路向高速缓存发出存储器请求,所述存储器请求包括以下字段,所述字段将第二存储器接口电路标识为用于存储器请求的数据的接收器;
将第二存储器接口电路的完成配置寄存器设置为远程响应值;以及
当用于存储器请求的数据到达第二存储器接口电路时,将信用返回值从耦合到处理元件的空间阵列中的第二处理元件和高速缓存的第二存储器接口电路发送到第一存储器接口电路,以使第一存储器接口电路将存储器请求标记为完成,并且第二存储器接口电路的完成配置寄存器被设置为远程响应值。
18.根据权利要求17所述的非暂时性机器可读介质,进一步包括:当用于第二存储器请求的数据到达第二存储器接口电路时,第二存储器接口电路在第二存储器接口电路内发送第二信用返回值,以使第二存储器接口电路将来自第二存储器接口电路的第二存储器请求标记为完成,并且第二存储器接口电路的完成配置寄存器被设置为本地响应值。
19.根据权利要求17所述的非暂时性机器可读介质,进一步包括:
将第一存储器接口电路的接收器完成流控制寄存器设置为第一值,以使开关从与第二存储器接口电路耦合的输入中获取信用返回值;以及
将第一存储器接口电路的接收器完成流控制寄存器设置为第二值,以使开关从第一存储器接口电路获取信用返回值。
20.根据权利要求17所述的非暂时性机器可读介质,进一步包括:第一存储器接口电路不会向高速缓存发出另一个存储器请求,直到所述存储器请求被标记为完成为止。
21.根据权利要求17所述的非暂时性机器可读介质,进一步包括:将用于所述存储器请求的数据存储在第二存储器接口电路的完成缓冲器的时隙中,其中,发送包括:当第二处理元件读取了存储用于所述存储器请求的数据的第二存储器接口电路的完成缓冲器的时隙时,第二存储器接口电路发送信用返回值。
22.根据权利要求17所述的非暂时性机器可读介质,其中,存储器请求包括:第二字段,用以标识第二存储器接口电路的完成缓冲器的时隙,以存储用于存储器请求的数据。
23.根据权利要求22所述的非暂时性机器可读介质,其中,存储器请求包括:第三字段,用以将第一存储器接口电路标识为用于存储器请求的请求者。
24.根据权利要求17-23中任一项所述的非暂时性机器可读介质,进一步包括:第二存储器接口电路在处理元件的空间阵列的电路交换网络的通道上发送信用返回值。
25.一种装置,包括:
处理元件的空间阵列中的第一处理元件;
处理元件的空间阵列中的第二处理元件;
高速缓存;
耦合到第一处理元件和高速缓存的第一部件,所述第一部件向高速缓存发出存储器请求,所述存储器请求包括以下字段,所述字段将第二部件标识为用于所述存储器请求的数据的接收器;以
耦合到第二处理元件和高速缓存的第二部件,当用于存储器请求的数据到达第二部件时,第二部件向第一部件发送信用返回值,以使第一部件将存储器请求标记为完成,并且第二部件的完成配置寄存器被设置为远程响应值。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/944546 | 2018-04-03 | ||
US15/944,546 US11307873B2 (en) | 2018-04-03 | 2018-04-03 | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
PCT/US2019/020243 WO2019194915A1 (en) | 2018-04-03 | 2019-03-01 | Apparatuses, methods, and systems for unstructured data flow in a configurable spatial accelerator |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111512292A true CN111512292A (zh) | 2020-08-07 |
Family
ID=68054365
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980006827.4A Pending CN111512292A (zh) | 2018-04-03 | 2019-03-01 | 用于可配置空间加速器中的非结构化数据流的装置、方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11307873B2 (zh) |
EP (1) | EP3776228A4 (zh) |
CN (1) | CN111512292A (zh) |
WO (1) | WO2019194915A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463717A (zh) * | 2020-11-05 | 2021-03-09 | 上海交通大学 | 一种粗粒度可重构架构下条件分支实现方法 |
WO2022134538A1 (zh) * | 2020-12-24 | 2022-06-30 | 北京握奇数据股份有限公司 | 一种微操作系统字节码精简指令集和资源受限装置 |
Families Citing this family (49)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013100783A1 (en) | 2011-12-29 | 2013-07-04 | Intel Corporation | Method and system for control signalling in a data path module |
US10331583B2 (en) | 2013-09-26 | 2019-06-25 | Intel Corporation | Executing distributed memory operations using processing elements connected by distributed channels |
US10572376B2 (en) | 2016-12-30 | 2020-02-25 | Intel Corporation | Memory ordering in acceleration hardware |
US10558575B2 (en) | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10515049B1 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Memory circuits and methods for distributed memory hazard detection and error recovery |
US10515046B2 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
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 |
US10565134B2 (en) | 2017-12-30 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for multicast in a configurable spatial accelerator |
US10564980B2 (en) | 2018-04-03 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator |
US10891240B2 (en) | 2018-06-30 | 2021-01-12 | Intel Corporation | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator |
US11200186B2 (en) | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for operations in a configurable spatial accelerator |
US10884720B2 (en) * | 2018-10-04 | 2021-01-05 | Microsoft Technology Licensing, Llc | Memory ordering annotations for binary emulation |
US11188497B2 (en) * | 2018-11-21 | 2021-11-30 | SambaNova Systems, Inc. | Configuration unload of a reconfigurable data processor |
US10761822B1 (en) * | 2018-12-12 | 2020-09-01 | Amazon Technologies, Inc. | Synchronization of computation engines with non-blocking instructions |
US11714992B1 (en) | 2018-12-13 | 2023-08-01 | Amazon Technologies, Inc. | Neural network processing based on subgraph recognition |
US10678724B1 (en) | 2018-12-29 | 2020-06-09 | Intel Corporation | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator |
US11106437B2 (en) * | 2019-01-14 | 2021-08-31 | Microsoft Technology Licensing, Llc | Lookup table optimization for programming languages that target synchronous digital circuits |
US11113176B2 (en) | 2019-01-14 | 2021-09-07 | Microsoft Technology Licensing, Llc | Generating a debugging network for a synchronous digital circuit during compilation of program source code |
US11275568B2 (en) | 2019-01-14 | 2022-03-15 | Microsoft Technology Licensing, Llc | Generating a synchronous digital circuit from a source code construct defining a function call |
US11144286B2 (en) | 2019-01-14 | 2021-10-12 | Microsoft Technology Licensing, Llc | Generating synchronous digital circuits from source code constructs that map to circuit implementations |
US11093682B2 (en) | 2019-01-14 | 2021-08-17 | Microsoft Technology Licensing, Llc | Language and compiler that generate synchronous digital circuits that maintain thread execution order |
US10810343B2 (en) | 2019-01-14 | 2020-10-20 | Microsoft Technology Licensing, Llc | Mapping software constructs to synchronous digital circuits that do not deadlock |
US10915471B2 (en) | 2019-03-30 | 2021-02-09 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator |
US10817291B2 (en) | 2019-03-30 | 2020-10-27 | Intel Corporation | Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator |
US11029927B2 (en) | 2019-03-30 | 2021-06-08 | Intel Corporation | Methods and apparatus to detect and annotate backedges in a dataflow graph |
US10965536B2 (en) | 2019-03-30 | 2021-03-30 | Intel Corporation | Methods and apparatus to insert buffers in a dataflow graph |
US11204745B2 (en) * | 2019-05-23 | 2021-12-21 | Xilinx, Inc. | Dataflow graph programming environment for a heterogenous processing system |
US11037050B2 (en) | 2019-06-29 | 2021-06-15 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator |
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 |
US11900156B2 (en) | 2019-09-24 | 2024-02-13 | Speedata Ltd. | Inter-thread communication in multi-threaded reconfigurable coarse-grain arrays |
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 |
US11520371B2 (en) * | 2020-02-10 | 2022-12-06 | Northwestern University | Compute-adaptive clock management for machine learning accelerators |
US11175922B1 (en) | 2020-04-28 | 2021-11-16 | Speedata Ltd. | Coarse-grain reconfigurable array processor with concurrent handling of multiple graphs on a single grid |
US11354157B2 (en) * | 2020-04-28 | 2022-06-07 | Speedata Ltd. | Handling multiple graphs, contexts and programs in a coarse-grain reconfigurable array processor |
KR20210145413A (ko) * | 2020-05-25 | 2021-12-02 | 에스케이하이닉스 주식회사 | 메모리 장치 |
CN111985626B (zh) * | 2020-09-25 | 2022-06-07 | 苏州浪潮智能科技有限公司 | 一种加速rnn网络的系统、方法及存储介质 |
US12086080B2 (en) | 2020-09-26 | 2024-09-10 | Intel Corporation | Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits |
US11734224B2 (en) * | 2020-09-28 | 2023-08-22 | Tenstorrent Inc. | Overlay layer hardware unit for network of processor cores |
US11782706B1 (en) * | 2021-06-29 | 2023-10-10 | Amazon Technologies, Inc. | Reconfigurable neural network processing based on subgraph recognition |
US12068745B2 (en) * | 2021-08-31 | 2024-08-20 | Arm Limited | Multi-bit scan chain with error-bit generator |
US11847445B2 (en) * | 2021-12-07 | 2023-12-19 | International Business Machines Corporation | Detecting business code areas in a mainframe application |
US12056506B2 (en) * | 2021-12-21 | 2024-08-06 | SambaNova Systems, Inc. | Access to intermediate values in a dataflow computation |
US12033262B2 (en) * | 2022-03-31 | 2024-07-09 | Electronic Arts Inc. | Learning character model animations with a layer-wise mixture-of-experts network |
US11960885B2 (en) * | 2022-04-11 | 2024-04-16 | Tenstorrent Inc. | Seamless place and route for heterogenous network of processor cores |
US11947487B2 (en) * | 2022-06-28 | 2024-04-02 | Advanced Micro Devices, Inc. | Enabling accelerated processing units to perform dataflow execution |
US20240119000A1 (en) * | 2022-10-10 | 2024-04-11 | International Business Machines Corporation | Input/output (i/o) store protocol for pipelining coherent operations |
WO2024134679A1 (en) * | 2022-12-20 | 2024-06-27 | Morphing Machines Pvt Ltd | Polymorphic computing fabric for static dataflow execution of computation operations represented as dataflow graphs (dfgs) |
Family Cites Families (362)
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 |
GB8717689D0 (en) * | 1987-07-25 | 1987-09-03 | British Petroleum Co Plc | Computers |
US4965716A (en) | 1988-03-11 | 1990-10-23 | International Business Machines Corporation | Fast access priority queue for managing multiple messages at a communications node or managing multiple programs in a multiprogrammed data processor |
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 |
DE69029065T2 (de) | 1989-07-28 | 1997-03-06 | Texas Instruments Inc | Logische Schaltung und Verfahren zum Wiederordnen für einen graphischen Videoanzeigespeicher |
US5239634A (en) | 1989-09-21 | 1993-08-24 | Digital Equipment Corporation | Memory controller for enqueuing/dequeuing process |
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 |
US5689719A (en) | 1991-06-28 | 1997-11-18 | Sanyo Electric O., Ltd. | Parallel computer system including processing elements |
ATE200357T1 (de) | 1991-07-08 | 2001-04-15 | Seiko Epson Corp | Risc-prozessor mit dehnbarer architektur |
EP0592715B1 (en) | 1992-10-15 | 1997-06-11 | Siemens Aktiengesellschaft | Checking design for testability rules with a VHDL simulator |
US5410722A (en) | 1993-01-21 | 1995-04-25 | Conner Peripherals, Inc. | Queue system for dynamically allocating and moving memory registers between a plurality of pseudo queues |
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 | 演算処理部および制御・記憶部分離型マルチプロセッサ ・システムのバス構造 |
US6460131B1 (en) | 1993-08-03 | 2002-10-01 | Xilinx Inc. | FPGA input output buffer with registered tristate enable |
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 |
US6247064B1 (en) | 1994-12-22 | 2001-06-12 | Unisys Corporation | Enqueue instruction in a system architecture for improved message passing and process synchronization |
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 |
US5925099A (en) | 1995-06-15 | 1999-07-20 | Intel Corporation | Method and apparatus for transporting messages between processors in a multiple processor system |
US6115748A (en) | 1995-07-19 | 2000-09-05 | Fujitsu Network Communications, Inc. | Prioritized access to shared buffers |
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 |
US5625630A (en) | 1996-04-24 | 1997-04-29 | Lucent Technologies Inc. | Increasing testability by clock transformation |
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 |
US5948081A (en) | 1997-12-22 | 1999-09-07 | Compaq Computer Corporation | System for flushing queued memory write request corresponding to a queued read request and all prior write requests with counter indicating requests to be flushed |
JP3946873B2 (ja) | 1998-06-19 | 2007-07-18 | 株式会社日立製作所 | ディスクアレイ制御装置 |
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 |
US6611891B1 (en) | 1998-11-23 | 2003-08-26 | Advanced Micro Devices, Inc. | Computer resource configuration mechanism across a multi-pipe communication link |
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 |
AU3829500A (en) | 1999-04-09 | 2000-11-14 | Clearspeed Technology Limited | Parallel data processing apparatus |
EP1093611A1 (en) | 1999-05-06 | 2001-04-25 | 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 |
US6507947B1 (en) * | 1999-08-20 | 2003-01-14 | Hewlett-Packard Company | Programmatic synthesis of processor element arrays |
US6640267B1 (en) | 1999-09-27 | 2003-10-28 | Cypress Semiconductor Corp. | Architecture for multi-queue storage element |
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 |
US7139901B2 (en) | 2000-02-08 | 2006-11-21 | Mips Technologies, Inc. | Extended instruction set for packet processing applications |
US6877044B2 (en) | 2000-02-10 | 2005-04-05 | Vicom Systems, Inc. | Distributed storage management platform architecture |
US6886085B1 (en) | 2000-04-19 | 2005-04-26 | International Business Machines Corporation | Method and apparatus for efficient virtual memory management |
US7210025B1 (en) * | 2000-04-19 | 2007-04-24 | Uht Augustus K | Automatic and transparent hardware conversion of traditional control flow to predicates |
IL156146A0 (en) | 2000-11-28 | 2003-12-23 | Seachange International Inc | Content/service handling and delivery |
US6947416B1 (en) | 2000-12-13 | 2005-09-20 | Cisco Technology, Inc. | Generalized asynchronous HDLC services |
GB2370381B (en) | 2000-12-19 | 2003-12-24 | Picochip Designs Ltd | Processor architecture |
GB2377519B (en) | 2001-02-14 | 2005-06-15 | Clearspeed Technology Ltd | Lookup engine |
US6728945B1 (en) * | 2001-02-26 | 2004-04-27 | Cadence Design Systems, Inc. | Behavioral level observability analysis and its applications |
US7436954B2 (en) | 2001-02-28 | 2008-10-14 | Cavium Networks, Inc. | Security system with an intelligent DMA controller |
US6553448B1 (en) | 2001-03-01 | 2003-04-22 | 3Com Corporation | Method for unit distance encoding of asynchronous pointers for non-power-of-two sized buffers |
WO2005045692A2 (en) | 2003-08-28 | 2005-05-19 | Pact Xpp Technologies Ag | Data processing device and method |
US7844796B2 (en) | 2001-03-05 | 2010-11-30 | Martin Vorbach | 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 |
AU2002344288A1 (en) | 2001-05-25 | 2002-12-09 | 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 |
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 |
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 |
US6834383B2 (en) * | 2001-11-26 | 2004-12-21 | Microsoft Corporation | Method for binary-level branch reversal on computer architectures supporting predicated execution |
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 | ソニー株式会社 | データ通信システム、データ送信装置、データ受信装置、および方法、並びにコンピュータ・プログラム |
US7047374B2 (en) | 2002-02-25 | 2006-05-16 | Intel Corporation | Memory read/write reordering |
US9170812B2 (en) | 2002-03-21 | 2015-10-27 | Pact Xpp Technologies Ag | Data processing system having integrated pipelined array data processor |
AU2003228353A1 (en) | 2002-03-22 | 2003-10-13 | Michael F. Deering | 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 |
US6922714B2 (en) | 2002-05-09 | 2005-07-26 | International Business Machines Corporation | Floating point unit power reduction scheme |
TWI289789B (en) | 2002-05-24 | 2007-11-11 | Nxp Bv | A scalar/vector processor and processing system |
EP1367499A1 (en) | 2002-05-28 | 2003-12-03 | Fujitsu Siemens Computers, LLC | Compute node to mesh interface for highly scalable parallel processing system |
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 |
US7415594B2 (en) | 2002-06-26 | 2008-08-19 | Coherent Logix, Incorporated | Processing system with interspersed stall propagating processors and communication elements |
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 |
US7277449B2 (en) | 2002-07-29 | 2007-10-02 | Freescale Semiconductor, Inc. | On chip network |
US7200137B2 (en) | 2002-07-29 | 2007-04-03 | Freescale Semiconductor, Inc. | On chip network that maximizes interconnect utilization between processing elements |
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 |
US7724740B1 (en) | 2002-08-27 | 2010-05-25 | 3Com Corporation | Computer system and network interface supporting class of service queues |
US7181578B1 (en) | 2002-09-12 | 2007-02-20 | Copan Systems, Inc. | Method and apparatus for efficient scalable storage management |
GB2424503B (en) | 2002-09-17 | 2007-06-20 | Micron Technology Inc | An active memory device |
GB2395299B (en) | 2002-09-17 | 2006-06-21 | Micron Technology Inc | Control of processing elements in parallel processors |
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 |
US7099983B2 (en) | 2002-11-25 | 2006-08-29 | Lsi Logic Corporation | Multi-core communications module, data communications system incorporating a multi-core communications module, and data communications process |
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 |
US7137021B2 (en) | 2003-05-15 | 2006-11-14 | International Business Machines Corporation | Power saving in FPU with gated power based on opcodes and data |
US7058785B1 (en) | 2003-05-23 | 2006-06-06 | Xilinx, Inc. | Addressing objects in a large persistent storage address space |
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 | 日本電気株式会社 | アレイ型プロセッサ |
US20050223131A1 (en) | 2004-04-02 | 2005-10-06 | Goekjian Kenneth S | Context-based direct memory access engine for use with a memory system shared by devices associated with multiple input and output ports |
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 | 富士通株式会社 | 時分割多重処理可能なリコンフィギュラブル回路 |
US7281116B2 (en) | 2004-07-30 | 2007-10-09 | Hewlett-Packard Development Company, L.P. | Multiprocessor system having plural memory locations for respectively storing TLB-shootdown data for plural processor nodes |
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 |
US7136954B2 (en) | 2005-01-31 | 2006-11-14 | International Business Machines Corporation | Data communication method and apparatus utilizing credit-based data transfer protocol and credit loss detection mechanism |
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 |
JP5117383B2 (ja) | 2005-06-30 | 2013-01-16 | アイメック | マルチプロセッサシステムのためのメモリ配列 |
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 |
US8099556B2 (en) | 2005-09-13 | 2012-01-17 | Arm Limited | Cache miss detection in a data processing apparatus |
JP2007079958A (ja) | 2005-09-14 | 2007-03-29 | Hitachi Ltd | 記憶制御装置、データ処理方法、及びコンピュータプログラム |
US7472299B2 (en) | 2005-09-30 | 2008-12-30 | Intel Corporation | Low power arbiters in interconnection routers |
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 |
US8656409B2 (en) | 2005-12-29 | 2014-02-18 | Intel Corporation | High performance queue implementations in multiprocessor systems |
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 |
US7610567B2 (en) | 2006-04-27 | 2009-10-27 | Achronix Semiconductor Corporation | Systems and methods for performing automated conversion of representations of synchronous circuit designs to and from representations of asynchronous circuit designs |
US7533244B2 (en) | 2006-05-09 | 2009-05-12 | Le Nguyen Tran | Network-on-chip dataflow architecture |
US7817652B1 (en) | 2006-05-12 | 2010-10-19 | Integrated Device Technology, Inc. | System and method of constructing data packets in a packet switch |
CN101438232B (zh) | 2006-05-16 | 2015-10-21 | 英特尔公司 | 不同浮点格式的浮点加法 |
US8065459B2 (en) | 2006-05-17 | 2011-11-22 | Nxp B.V. | Multi-processing system and a method of executing a plurality of data processing tasks |
US8194690B1 (en) | 2006-05-24 | 2012-06-05 | Tilera Corporation | Packet processing in a parallel processing environment |
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 |
US8390325B2 (en) | 2006-06-21 | 2013-03-05 | Element Cxi, Llc | Reconfigurable integrated circuit architecture with on-chip configuration and reconfiguration |
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 |
US8095699B2 (en) | 2006-09-29 | 2012-01-10 | Mediatek Inc. | Methods and apparatus for interfacing between a host processor and a coprocessor |
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 |
WO2008087779A1 (ja) | 2007-01-19 | 2008-07-24 | Nec Corporation | アレイ型プロセッサおよびデータ処理システム |
JP4933284B2 (ja) | 2007-01-25 | 2012-05-16 | 株式会社日立製作所 | ストレージ装置及び負荷分散方法 |
US8321597B2 (en) | 2007-02-22 | 2012-11-27 | Super Talent Electronics, Inc. | Flash-memory device with RAID-type controller |
US8543742B2 (en) | 2007-02-22 | 2013-09-24 | 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 |
US20090063747A1 (en) | 2007-08-28 | 2009-03-05 | Rohati Systems, Inc. | Application network appliances with inter-module communications using a universal serial bus |
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 | 재단법인서울대학교산학협력재단 | 프로세서 및 메모리 제어 방법 |
US8032772B2 (en) | 2007-11-15 | 2011-10-04 | Intel Corporation | Method, apparatus, and system for optimizing frequency and performance in a multi-die microprocessor |
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 |
US8365111B2 (en) | 2008-02-29 | 2013-01-29 | Et International, Inc. | Data driven logic simulation |
US7904700B2 (en) | 2008-03-10 | 2011-03-08 | International Business Machines Corporation | Processing unit incorporating special purpose register for use with instruction-based persistent vector multiplexer control |
US8356162B2 (en) | 2008-03-18 | 2013-01-15 | International Business Machines Corporation | Execution unit with data dependent conditional write instructions |
WO2009115581A2 (en) | 2008-03-19 | 2009-09-24 | Cryo-Save Ag | Improved cryopreservation of adipose tissue for the isolation of mesenchymal stem cells |
RU2374684C1 (ru) | 2008-05-04 | 2009-11-27 | Государственное образовательное учреждение высшего профессионального образования Курский государственный технический университет | Параллельно-конвейерное устройство для векторизации аэрокосмических изображений земной поверхности |
US8316252B2 (en) | 2008-05-30 | 2012-11-20 | Advanced Micro Devices, Inc. | Distributed clock gating with centralized state machine control |
US8115659B2 (en) | 2008-06-10 | 2012-02-14 | International Business Machines Corporation | Method and apparatus for efficient gathering of information in a multicore system |
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 |
US9429983B1 (en) | 2013-09-12 | 2016-08-30 | Advanced Processor Architectures, Llc | System clock distribution in a distributed computing environment |
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 |
EP2333673B1 (en) | 2009-12-07 | 2014-04-16 | STMicroelectronics (Research & Development) Limited | Signal sampling and transfer |
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 |
EP2360553B1 (en) | 2010-02-12 | 2017-08-23 | Intel Deutschland GmbH | Circuitry system and method for connecting synchronous clock domains of the circuitry system |
US8495341B2 (en) | 2010-02-17 | 2013-07-23 | International Business Machines Corporation | Instruction length based cracking for instruction of variable length storage operands |
WO2011123151A1 (en) | 2010-04-02 | 2011-10-06 | Tabula Inc. | System and method for reducing reconfiguration power usage |
US9141350B2 (en) | 2010-04-23 | 2015-09-22 | Vector Fabrics B.V. | Embedded system performance |
US9285860B2 (en) | 2010-05-03 | 2016-03-15 | Qualcomm Incorporated | Apparatus and methods employing variable clock gating hysteresis for a communications port |
US8051227B1 (en) | 2010-05-10 | 2011-11-01 | Telefonaktiebolaget L M Ericsson (Publ) | Programmable queue structures for multiprocessors |
US8996906B1 (en) | 2010-05-13 | 2015-03-31 | Tabula, Inc. | Clock management block |
KR101751045B1 (ko) | 2010-05-25 | 2017-06-27 | 삼성전자 주식회사 | 3d 반도체 장치 |
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 |
US9727438B2 (en) | 2010-08-25 | 2017-08-08 | Ab Initio Technology Llc | Evaluating dataflow graph characteristics |
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 |
US9052890B2 (en) | 2010-09-25 | 2015-06-09 | Intel Corporation | Execute at commit state update instructions, apparatus, methods, and systems |
TWI425357B (zh) | 2010-09-27 | 2014-02-01 | Silicon Motion Inc | 用來進行區塊管理之方法以及記憶裝置及控制器 |
KR101735677B1 (ko) | 2010-11-17 | 2017-05-16 | 삼성전자주식회사 | 부동 소수점의 복합 연산장치 및 그 연산방법 |
US8548104B2 (en) | 2010-11-23 | 2013-10-01 | Siano Mobile Silicon Ltd. | Receiver with configurable clock frequencies |
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 |
US9367438B2 (en) | 2011-04-21 | 2016-06-14 | Renesas Electronics Corporation | Semiconductor integrated circuit and method for operating same |
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 |
WO2013016299A1 (en) | 2011-07-22 | 2013-01-31 | Yilin Wang | Event system and methods for using same |
US9148495B2 (en) | 2011-07-26 | 2015-09-29 | International Business Machines Corporation | Dynamic runtime choosing of processing communication methods |
US8990452B2 (en) | 2011-07-26 | 2015-03-24 | International Business Machines Corporation | Dynamic reduction of stream backpressure |
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 |
KR101918464B1 (ko) | 2011-09-14 | 2018-11-15 | 삼성전자 주식회사 | 스위즐드 버추얼 레지스터 기반의 프로세서 및 스위즐 패턴 제공 장치 |
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 |
US20130160028A1 (en) | 2011-12-14 | 2013-06-20 | John E. Black | Method and apparatus for low latency communication and synchronization for multi-thread applications |
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를 이용한 멀티미디어 데이터 송수신 장치 및 방법 |
US9135077B2 (en) | 2012-03-16 | 2015-09-15 | Advanced Micro Devices, Inc. | GPU compute optimization via wavefront reforming |
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 |
US9026705B2 (en) | 2012-08-09 | 2015-05-05 | Oracle International Corporation | Interrupt processing unit for preventing interrupt loss |
KR101667772B1 (ko) | 2012-08-18 | 2016-10-19 | 퀄컴 테크놀로지스, 인크. | 프리페칭을 갖는 변환 색인 버퍼 |
US9110713B2 (en) | 2012-08-30 | 2015-08-18 | Qualcomm Incorporated | Microarchitecture for floating point fused multiply-add with exponent scaling |
US9063974B2 (en) | 2012-10-02 | 2015-06-23 | Oracle International Corporation | Hardware for table scan acceleration |
US9632787B2 (en) | 2012-10-23 | 2017-04-25 | Ca, Inc. | Data processing system with data characteristic based identification of corresponding instructions |
US9829956B2 (en) | 2012-11-21 | 2017-11-28 | Nvidia Corporation | Approach to power reduction in floating-point operations |
US9274971B2 (en) | 2012-11-27 | 2016-03-01 | International Business Machines Corporation | Low latency data exchange |
US10133577B2 (en) | 2012-12-19 | 2018-11-20 | Intel Corporation | Vector mask driven clock gating for power efficiency of a processor |
US8619800B1 (en) | 2012-12-20 | 2013-12-31 | Unbound Networks | 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 |
EP3005078A2 (en) | 2013-05-24 | 2016-04-13 | Coherent Logix Incorporated | Memory-network processor with programmable optimizations |
US9792252B2 (en) | 2013-05-31 | 2017-10-17 | Microsoft Technology Licensing, Llc | Incorporating a spatial array into one or more programmable processor cores |
US9886072B1 (en) | 2013-06-19 | 2018-02-06 | Altera Corporation | Network processor FPGA (npFPGA): multi-die FPGA chip for scalable multi-gigabit network processing |
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 |
US9898303B2 (en) | 2013-08-28 | 2018-02-20 | Via Technologies, Inc. | Multi-core hardware semaphore in non-architectural address space |
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 |
US9996490B2 (en) | 2013-09-19 | 2018-06-12 | Nvidia Corporation | Technique for scaling the bandwidth of a processing element to match the bandwidth of an interconnect |
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 | 株式会社リコー | 情報処理システム及び情報処理方法 |
US8924596B1 (en) | 2013-12-06 | 2014-12-30 | Concurrent Ventures, LLC | System and method for dividing and synchronizing a processing task across multiple processing elements/processors in hardware |
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 |
US20150268963A1 (en) * | 2014-03-23 | 2015-09-24 | Technion Research & Development Foundation Ltd. | Execution of data-parallel programs on coarse-grained reconfigurable architecture hardware |
US9870209B2 (en) | 2014-03-28 | 2018-01-16 | Intel Corporation | Instruction and logic for reducing data cache evictions in an out-of-order 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 |
JP6339240B2 (ja) | 2014-06-24 | 2018-06-06 | インテル コーポレイション | 仮想マシン電力管理 |
WO2016003646A1 (en) | 2014-06-30 | 2016-01-07 | Unisys Corporation | Enterprise management for secure network communications over ipsec |
US10409763B2 (en) | 2014-06-30 | 2019-09-10 | Intel Corporation | Apparatus and method for efficiently implementing a processor pipeline |
US9330433B2 (en) | 2014-06-30 | 2016-05-03 | Intel Corporation | Data distribution fabric in scalable GPUs |
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 |
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 |
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 |
US9928190B2 (en) | 2015-06-15 | 2018-03-27 | International Business Machines Corporation | High bandwidth low latency data exchange between processing elements |
US9743151B2 (en) | 2015-06-24 | 2017-08-22 | Time Warner Cable Enterprises Llc | Multicast video program switching architecture |
US10111024B2 (en) | 2015-07-10 | 2018-10-23 | Lg Electronics Inc. | Method and apparatus for an input data processing via a local computing or offloading based on power harvesting in a wireless communication system |
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 |
US20170062075A1 (en) | 2015-08-31 | 2017-03-02 | Sandisk Technologies Inc. | Apparatus including core and clock gating circuit and method of operating same |
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 |
US20170116154A1 (en) | 2015-10-23 | 2017-04-27 | The Intellisis Corporation | Register communication in a network-on-a-chip architecture |
CN105512060B (zh) | 2015-12-04 | 2018-09-14 | 上海兆芯集成电路有限公司 | 输入/输出电路以及数据传输控制方法 |
US10185755B2 (en) | 2015-12-28 | 2019-01-22 | Business Objects Software Limited | Orchestration of data query processing in a database system |
US9923905B2 (en) | 2016-02-01 | 2018-03-20 | General Electric Company | System and method for zone access control |
US9520876B1 (en) | 2016-02-17 | 2016-12-13 | International Business Machines Corporation | Power gating and clock gating in wiring levels |
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 | 삼성전자주식회사 | 전자장치 및 그 제어방법 |
US20180225403A1 (en) | 2016-03-31 | 2018-08-09 | Wave Computing, Inc. | Dynamic configuration of a reconfigurable hum fabric |
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 |
US10466867B2 (en) | 2016-04-27 | 2019-11-05 | Coda Project, Inc. | Formulas |
US20170315812A1 (en) | 2016-04-28 | 2017-11-02 | Microsoft Technology Licensing, Llc | Parallel instruction scheduler for block isa processor |
US10764781B2 (en) | 2016-05-03 | 2020-09-01 | Qualcomm Incorporated | Systems and methods for reordering data received from a plurality of radio access technologies (RATs) |
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 |
US10795853B2 (en) | 2016-10-10 | 2020-10-06 | Intel Corporation | Multiple dies hardware processors and methods |
US10037267B2 (en) | 2016-10-21 | 2018-07-31 | Advanced Micro Devices, Inc. | Instruction set architecture and software support for register state migration |
US10558575B2 (en) | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10416999B2 (en) | 2016-12-30 | 2019-09-17 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10572376B2 (en) | 2016-12-30 | 2020-02-25 | Intel Corporation | Memory ordering in acceleration hardware |
US10474375B2 (en) | 2016-12-30 | 2019-11-12 | Intel Corporation | Runtime address disambiguation in acceleration hardware |
US10180928B2 (en) | 2016-12-31 | 2019-01-15 | Intel Corporation | Heterogeneous hardware accelerator architecture for processing sparse matrix data with skewed non-zero distributions |
US20180189675A1 (en) | 2016-12-31 | 2018-07-05 | Intel Corporation | Hardware accelerator architecture and template for web-scale k-means clustering |
US11853244B2 (en) | 2017-01-26 | 2023-12-26 | Wisconsin Alumni Research Foundation | Reconfigurable computer accelerator providing stream processor and dataflow processor |
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 |
WO2018193354A1 (en) | 2017-04-17 | 2018-10-25 | Cerebras Systems Inc. | Wavelet representation for accelerated deep learning |
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 |
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 |
US10445234B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features |
US10467183B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods for pipelined runtime services in a spatial array |
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 |
US10469397B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods with configurable network-based dataflow operator circuits |
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 |
US10515046B2 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US11157287B2 (en) | 2017-07-24 | 2021-10-26 | Tesla, Inc. | Computational array microprocessor system with variable latency memory access |
US10461747B2 (en) | 2017-09-20 | 2019-10-29 | Apple Inc. | Low power clock gating circuit |
US10496574B2 (en) | 2017-09-28 | 2019-12-03 | Intel Corporation | Processors, methods, and systems for a memory fence in a configurable spatial accelerator |
US11086816B2 (en) | 2017-09-28 | 2021-08-10 | Intel Corporation | Processors, methods, and systems for debugging 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 |
US10445098B2 (en) | 2017-09-30 | 2019-10-15 | Intel Corporation | Processors and methods for privileged configuration in a spatial array |
US20190101952A1 (en) | 2017-09-30 | 2019-04-04 | Intel Corporation | Processors and methods for configurable clock gating 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 |
US10564980B2 (en) | 2018-04-03 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator |
US10552339B2 (en) | 2018-06-12 | 2020-02-04 | Advanced Micro Devices, Inc. | Dynamically adapting mechanism for translation lookaside buffer shootdowns |
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 |
-
2018
- 2018-04-03 US US15/944,546 patent/US11307873B2/en active Active
-
2019
- 2019-03-01 EP EP19781298.5A patent/EP3776228A4/en not_active Withdrawn
- 2019-03-01 CN CN201980006827.4A patent/CN111512292A/zh active Pending
- 2019-03-01 WO PCT/US2019/020243 patent/WO2019194915A1/en unknown
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463717A (zh) * | 2020-11-05 | 2021-03-09 | 上海交通大学 | 一种粗粒度可重构架构下条件分支实现方法 |
CN112463717B (zh) * | 2020-11-05 | 2022-07-22 | 上海交通大学 | 一种粗粒度可重构架构下条件分支实现方法 |
WO2022134538A1 (zh) * | 2020-12-24 | 2022-06-30 | 北京握奇数据股份有限公司 | 一种微操作系统字节码精简指令集和资源受限装置 |
Also Published As
Publication number | Publication date |
---|---|
EP3776228A1 (en) | 2021-02-17 |
WO2019194915A1 (en) | 2019-10-10 |
US20190303153A1 (en) | 2019-10-03 |
EP3776228A4 (en) | 2022-01-12 |
US11307873B2 (en) | 2022-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111512292A (zh) | 用于可配置空间加速器中的非结构化数据流的装置、方法和系统 | |
CN108268278B (zh) | 具有可配置空间加速器的处理器、方法和系统 | |
US10515046B2 (en) | Processors, methods, and systems with a configurable spatial accelerator | |
US10564980B2 (en) | Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator | |
US10565134B2 (en) | Apparatus, methods, and systems for multicast in a configurable spatial accelerator | |
CN109213723B (zh) | 一种用于数据流图处理的处理器、方法、设备、及一种非暂时性机器可读介质 | |
US10417175B2 (en) | Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator | |
CN109215728B (zh) | 用于分布式存储器危险检测和错误恢复的存储器电路和方法 | |
US10380063B2 (en) | Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator | |
US10915471B2 (en) | Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator | |
US10445451B2 (en) | Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features | |
US10387319B2 (en) | Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features | |
US20190303297A1 (en) | Apparatus, methods, and systems for remote memory access in a configurable spatial accelerator | |
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 | |
US10678724B1 (en) | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator | |
US10853073B2 (en) | Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator | |
US12086080B2 (en) | Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits | |
CN111767080A (zh) | 用于可配置空间加速器中的操作的设备、方法和系统 | |
CN112148647A (zh) | 用于存储器接口电路仲裁的装置、方法和系统 | |
CN112148664A (zh) | 用于可配置空间加速器中的时间复用的装置、方法和系统 | |
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 |