CN101189573A - 通过内容可寻址存储器和并行计算执行模型的条件执行 - Google Patents
通过内容可寻址存储器和并行计算执行模型的条件执行 Download PDFInfo
- Publication number
- CN101189573A CN101189573A CNA2006800194763A CN200680019476A CN101189573A CN 101189573 A CN101189573 A CN 101189573A CN A2006800194763 A CNA2006800194763 A CN A2006800194763A CN 200680019476 A CN200680019476 A CN 200680019476A CN 101189573 A CN101189573 A CN 101189573A
- Authority
- CN
- China
- Prior art keywords
- operand
- data
- configuration
- function
- mark
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 75
- 230000006870 function Effects 0.000 claims abstract description 119
- 238000011156 evaluation Methods 0.000 claims abstract description 8
- 238000000034 method Methods 0.000 claims description 47
- 230000007246 mechanism Effects 0.000 claims description 14
- 238000004364 calculation method Methods 0.000 claims description 7
- 230000005540 biological transmission Effects 0.000 claims description 3
- 238000012545 processing Methods 0.000 abstract description 41
- 230000014509 gene expression Effects 0.000 description 30
- 238000010586 diagram Methods 0.000 description 25
- 239000013598 vector Substances 0.000 description 24
- 239000011159 matrix material Substances 0.000 description 23
- 230000008569 process Effects 0.000 description 20
- 238000003860 storage Methods 0.000 description 18
- 230000008901 benefit Effects 0.000 description 17
- 230000015572 biosynthetic process Effects 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 11
- 230000008859 change Effects 0.000 description 10
- 230000005055 memory storage Effects 0.000 description 10
- 238000004422 calculation algorithm Methods 0.000 description 9
- 230000008878 coupling Effects 0.000 description 9
- 238000010168 coupling process Methods 0.000 description 9
- 238000005859 coupling reaction Methods 0.000 description 9
- 238000013461 design Methods 0.000 description 8
- 238000012360 testing method Methods 0.000 description 8
- 230000009471 action Effects 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 7
- 230000004888 barrier function Effects 0.000 description 6
- 230000002349 favourable effect Effects 0.000 description 5
- 230000036961 partial effect Effects 0.000 description 5
- 230000002829 reductive effect Effects 0.000 description 5
- 230000000712 assembly Effects 0.000 description 4
- 238000000429 assembly Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 239000003550 marker Substances 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 230000001133 acceleration Effects 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 3
- 238000004220 aggregation Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000008520 organization Effects 0.000 description 3
- 235000005282 vitamin D3 Nutrition 0.000 description 3
- 239000011647 vitamin D3 Substances 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 2
- 238000013480 data collection Methods 0.000 description 2
- 238000007418 data mining Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 230000002708 enhancing effect Effects 0.000 description 2
- 230000012010 growth Effects 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 230000004807 localization Effects 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000010813 municipal solid waste Substances 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000000153 supplemental effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000001131 transforming effect Effects 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 239000003990 capacitor Substances 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 239000006185 dispersion Substances 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000005243 fluidization Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000017525 heat dissipation Effects 0.000 description 1
- 238000003709 image segmentation Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002028 premature Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 1
- 238000013517 stratification Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000005303 weighing Methods 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/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
-
- 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
-
- 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
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/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/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Electrophonic Musical Instruments (AREA)
- Electrically Operated Instructional Devices (AREA)
- Multi Processors (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
以内容可寻址存储器(CAM)体系结构使用基于配置的执行模型能够实现各个计算概念,包括条件执行,(举例来说,If-Then语句和while循环)、函数调用和递归。通过使用仅从CAM中发出完成的操作数集合以便处理的CAM特征来实现if-then和while循环;为不同的条件评估结果生成不同的种子操作数,并且将种子操作数与用于if-then分支或者退出while循环之后计算出的数据进行匹配。因此,下游运算符仅检索完成的操作数。通过使用返回标记作为操作数连同函数参数数据进入函数的输入标记空间来处理函数调用和递归。将递归函数分成两半,递归前部分和在递归前部分调用之后执行的递归后部分。
Description
技术领域
本发明通常涉及计算机***、处理器和存储器,特别涉及并行计算。
背景技术
在相当长的时间,计算机程序开发者和使用者已经能够受益于使芯片特征尺寸不断减少的技术的进步。随着可以被生产的设备(举例来说,微处理器和存储器)的尺寸越来越小,因此设备变得更快、更便宜并且可被紧凑包装。这些进步的结果是允许当代计算继续使用控制驱动(冯·诺依曼)执行模型,其中在该执行模型中,由程序员编写一系列的指令以便处理器遵循执行,并且当按次序执行的时候,这些指令可以执行所需的计算。
然而,传统计算技术的极限也快要达到了。这是因为随着芯片特征尺寸继续减少,也随之出现了多种问题。比如,当芯片变得越来越紧凑包装的时候,串扰,电容负载、缺陷密度以及热耗散将变得更加明显。
因此,为试图继续改进计算功率,制造商正进入基于一定数量的并行计算的解决方案。比如,现代处理器通过试图发现可以以任意次序执行的操作,因此可并行执行而不会改变结果来试图自动地从控制驱动码中提取某种并行性。然而,以这种方式提取并行性是一个非常复杂的问题,可能不是特别成功或者有效的,因为它需要对指令的相当大数量的预测或者回顾,以确定可以并行进行那些操作,如果存在这些操作的话。尽管如此复杂度,但计算机产业仍正在向并行计算发展。所需要的是用于并行计算的更好的体系结构。
发明内容
简要的说,本发明针对一种***和方法,通过该***和方法,基于配置的执行模型结合内容可寻址存储器体系结构提供能够实现多个计算概念的装置,这些概念包括条件执行, (举例来说,if-Then语句和while循环),函数调用和递归。
内容可寻址存储器使用标记来标识输入到计算硬件配置的操作数。通过使用CAM特征来实现If-then语句,其中CAM特征仅仅发送来自CAM的完成的操作数集合以用于处理;其中,对于条件的两个分支,每个都具有自己独特的输入标记空间,具有独特的操作数集合。在执行期间,可以生成任意一个分支所需的值,以及对该值进行标记,以便于这些值落入适当分支的输入标记空间。由图中的条件节点生成附加的种子令牌,作为在分支的任一端上的操作数集合的一部分。当为每个测试条件评估条件节点的时候,为该条件的真或者假的分支中任何一个生成种子令牌,以为条件的正确分支完成操作数集合,同时相对的分支未完成。因此,下游运算符仅仅检索完成的操作数集合,并且丢弃未完成的集合。
while循环使用完成的操作数集合概念和标记空间。使用两个标记空间,一个用于对while循环的输入,另一个用于在数据流图中的接下来的配置。条件运算符生成种子令牌,该种子令牌导致循环继续while循环迭代,或者停止迭代而当前数据值的至少一个数据值作为一个操作数,另外一个操作数指示迭代完成。下游运算符可以处理一个或者多个被指示为完成的数据操作数,尽管可能发生阻塞,直到已经通过while循环处理并完成了多个输入的完成集合。
通过放置函数的返回标记作为伴随函数参数数据进入函数的输入标记空间的操作数,经由CAM体系结构来处理函数调用;;在函数调用中传送返回标记直到已经计算了函数的输出。当函数调用结束的时候,以返回标记来标记输出数据,输出数据被指定为在调用程序之后返回到配置的输入标记空间中。
通过操作标记来处理递归,便于它们可以返回到它们的递归双亲的输入标记空间中。将递归函数分成两半,递归前部分和递归后部分。执行递归调用,直到达到终止条件。递归函数中每一个也都执行到(包括)递归调用它们自身。当终止条件达到时,并且所有的递归前调用都已经结束了执行,接着将每个函数调用的第二部分以逆向调用的次序执行,以便结束函数评估。
促进了并行计算的其它方面,包括标记清除、高速缓存管理、和常量。通过使用标记以标识唯一操作数集合,允许计算无序进行、并且稍后为进一步的处理进行重新聚集。这允许通过同时计算大型操作数集合的多个并行处理单元或者通过当操作数集合可用时抓住时机地取回和执行操作数集合提供的更高的计算速度。
当结合附图的时候,从下面的详细描述中,其它的优点将变得明显,附图中:
附图的简要说明
图1是通常表示可在其中包括本发明的计算环境的框图;
图2是根据本发明的各个方面、通常表示计算硬件的节点和其中数据操作数流的数据流图,其中图可以是配置的部分或者全部;
图3是根据本发明的各个方面、通常表示内容可寻址存储器(CAM)体系结构的框图;
图4是根据本发明的各个方面、用于操作CAM体系结构中使用的标记以标识和存储数据的各种方式的表示;
图5和6是根据本发明的各个方面、用于安排标记的各种方式的表示,诸如以固定前缀来安排;
图7是根据本发明的各个方面、从CAM发送到由图节点表示的请求计算硬件的完成的操作集合的表示;
图8是根据本发明的各个方面、通过函数输入标记模型处理矩阵乘法的例子,其中数据从CAM流到计算硬件;
图9是根据本发明的各个方面、函数输入标记空间模型的概念的示例表示;
图10是根据本发明的各个方面、基于函数关系而改变输入标记的示例表示;
图11-13是根据本发明的各个方面、函数输入标记空间模型中可能的某些示例性输入标记空间函数的表示;
图14是根据本发明的各个方面、函数输入标记空间模型中可能的示例性函数标记空间矩阵索引操作的表示;
图15和16是根据本发明的各个方面、分别示出可能的聚集和分散存储器存取的固定前缀和函数输入标记空间表示;
图17是根据本发明的各个方面、示出函数输入标记规格的交错标记空间的基于矢量的函数的表示;
图18是根据本发明的各个方面、示出函数输入标记规格的紧凑标记空间的矩阵乘法操作的表示;
图19是根据本发明的各个方面、示出一对多函数输入标记空间关系的矩阵乘法操作的表示;
图20和21是根据本发明的各个方面、使用函数输入标记空间模型的高速缓存管理例子的表示;
图22是根据本发明的各个方面、通过CAM的处理稀疏矢量/矩阵的示例表示;
图23是根据本发明的各个方面、由节点表示的计算硬件配置的示例表示;
图24是根据本发明的各个方面、表示用于管理(计算硬件的)功能单元的配置的示例状态机的框图;
图25是根据本发明的各个方面、在管理配置中使用的执行记录的表示;
图26A和26B是根据本发明的各个方面、表示随着操作数集合完成和配置被执行的配置和相应执行记录的图;
图27是根据本发明的各个方面、关于如何将CAM操作数用于执行条件if-then语句的表示;
图28和29是根据本发明的各个方面、关于如何将CAM操作数用于执行和实现while循环的表示;
图30是根据本发明的各个方面、关于如何以及何时在配置输出合并之后执行标记清除的示例表示;
图31-33是根据本发明的各个方面、表示为阻塞输入数据流一段时间直到图中的其他数据已经被处理而使用标志的示例性图;
图34是根据本发明的各个方面、例示配置加载的调度的优化的表示;
图35A和35B是根据本发明的各个方面、表示对用于处理递归函数的返回标记的使用的图;
图36是根据本发明的各个方面、在处理递归函数中使用的前向和递归后码输入标记格式的表示;
图37-44是根据本发明的各个方面、当处理图35A和35B的示例递归函数时所生成的标记和结果的重复;
图45是根据本发明的各个方面、标记如何在外部存储器中划分的表示;
图46是根据本发明的各个方面、示例多层TRIE实现形式的示例外部存储器数据结构分层结构的表示;以及
图47-52是根据本发明的各个方面、管理外部存储器中的标记和数据时使用的各种表格的表示。
详细描述
内容可寻址存储器(CAM)体系结构
本发明的内容可寻址存储器(CAM)体系结构一般旨在以一种易于编程、具有实际实现并可被应用到通用的问题中的方式为执行相对高要求的计算任务提供平台。存可并行处理的各种计算问题和任务,比如图形、语音处理、人工智能、仿真和建模、生物合成、数据挖掘、数据处理、数据库、服务器应用等。这些应用中的很多应用是众所周知的,并且属于巨型计算机领域。
但是,本发明不仅仅局限于任何特定的数据处理应用。通常,当本发明所描述的一个示例体系结构试图解决上述标识的问题和任务中的一些或者全部的时候,可以将CAM体系结构缩小到一定程度。因此,由CAM体系结构提供的高速计算可为大量市场用户使用;举例来说,很多基于CAM的特征可被包括在消费者计算环境中,比如文字处理、数据库和游戏程序。
图1显示比如计算机器100的一般计算环境,其中在该计算机器中,可以实现本发明的各个方面。在图1中,机器包括具有一些计算硬件102的芯片,其中计算硬件102通过互连网络104和CAM控制器硬件105耦合到在片上(on-chip)CAM存储区域106。注意到CAM控制器硬件105至少在某种程度上可以与互连网络104组合,为了更高的效率和/或更好的实现。
并且也如图1所示的:一些随机存取存储器107包括片外(off-chip)CAM存储区域108。通常,并且如下所述,片上(on-chip)CAM存储缓冲区106是快速高速缓存,片外(off-chip)CAM存储区域108用作片上(on-chip)CAM存储缓冲区106较慢存取但较大的支持存储。注意到片外(off-chip)CAM存储108自身可以是由持久存储器113比如硬盘驱动器支持的虚拟存储器。存储器管理器115或者类似物(自身部分加载在RAM中)可以以众所周知的方式处理这样的RAM/持续存储虚拟化。各种与CAM相关的组件在下面进行更详细的描述。
根据本发明的各个方面,CAM(包括它的各种组件)提供了标识和跟踪数据以便并行执行的一种方式。和其中程序员为处理器编写一系列的指令以便依次序执行所玩控制驱动的体系结构形成对比,本发明可以使用数据驱动,或者数据流程序,其中当指令的另外一种解释可以给出相同的结果时,在处理上不用强加严格的次序。尽管数据流驱动结构明确地显示操作(或者步骤)之间的必要依赖关系,但没有对可以并行执行的操作给出任何限制。相反,数据流处理器使用数据流程序作为输入,接着将按照明确指定的依赖性所允许一样多的并行性应用到问题中。
如图2中所表示的,可以将数据流程序指定为连接运算符的图(表示为节点NA-NC),因此通常将程序称为数据流图。操作数(举例来说,i0-i3和s1s2和O0)包括在连接的圆弧上隐含地流动的数据。无论何时,运算符在它所有的输入圆弧上均具有操作数,比如节点NA有操作数i0和i1存在,允许该操作数点火(执行它的操作)并产生用于下一计算的一个或者多个输出操作数(举例来说,S1)。
数据流处理以从数据流过图的方式来得到其名称。在图2的例子中,如果每条指令花费一个单位时间来执行,则数据流程序可以在两个时间步骤中执行,因为允许两个乘法操作在第一时间步骤中并行执行,仅仅执行总和需要第二时间步骤。与此相反,控制驱动的程序将在三个时间步骤中执行(一个用于第一乘法,一个用于第二乘法以及一个用于总和操作)。
数据流图的一个特性是可以认为图中的每个节点均是孤立的***;节点等待输入,并且当输入存在时,产生输出。通常,除了排队输入以及以某种流控制方案产生输出以外,节点是不需要考虑其周围其他节点的动作的。因此,可以将***设计成:在该***中(可能相对的简单),处理器专门用于这些节点的每一个,并且处理器可以并行操作。比如,在图2中,一个处理器可以处理节点NA上的乘法操作,另一处理器处理节点NB上的乘法操作,并且又一处理器处理节点NC上的总和操作。然而注意到,因为通常这样的图远大于可使用每个处理器节点方法来实现的图,所以数据流体系结构试图处理这样一个问题:将大的数据流图映射到计算资源的小得多的集合上。注意到如下所述的,硬件在运行时是可重新配置的(举例来说,通过类似现场可编程门阵列的硬件),由此如果需要的话,可以配置数据流图或者其中的一部分。
此外,一旦处理器执行操作,独立于下游处理,处理器一接收到它的输入操作数的完成集合,就可以自由地执行其它操作。节点因此是独立的。为此目的,节点可以从CAM接收其操作数,比如在FIFO队列中,并且将它的输出放置在类似的FIFO队列(举例来说,一组硬件寄存器)中,其中FIFO队列又由下游处理器或者CAM消费。或者,当队列可以连接处理节点的时候,可以直接连接处理节点使得在它们之间没有队列,或者队列长度为1。在运行操作数进入计算节点之前,通过建造完成的操作数集合,来保证必要的值是可用的,由此一旦操作数集合被运行,计算中即不需要延迟以等待值,减少或者消除了队列的需要。实际上,CAM用作数据的全局队列,并且当完成的操作数集合变得可用的时候,将其从全局队列中拉出来。但是,可以使用不需要在运行前完全集合完成的操作数集合的硬件来提供其它优势。此外,对于一个给定的输入,存在产生多于一个输出的操作模式,因此在节点之间的队列是有优势的。而且,因为图中的不同节点需要不同数目的时钟周期来完成计算,可能有必要使用节点之间的固定延迟队列,以便对来自供应共同的孩子节点的两个兄弟节点的输出进行路径长度匹配。
除并行计算以外,节点的独立提供了集合处理数据的能力,基本上如一批操作数。因此,比如,与控制驱动程序不同,一旦节点NA点火之后,一具有它的输入时,节点NA就可以再次点火。这意味着当节点NC正在点火的时候,比如在第二时间单位上,节点NA和NB也可以在相同的第二时间单位上点火,比如使用输入操作数i4到i7(没有示出)。因此,在节点NA和NB点火一次之后,图2中所表示的三个节点可以在同样的时间点火,直到在CAM中没有数据可用于输入给节点NA和NB。应该可以意识到,通过考虑成千上万个数据输入集合,比如,除了数据的第一和最后一个集合以外均是在两个时间步骤中由三个并行操作处理的。比如,给定四个数据输入的1000个集合(i0到i3999),以及每个操作一个时间步骤,需要1001个时间步骤来处理整个集合;时间T0可以开始i0-i3的集合S0(半处理),时间T1将结束集合S0并且开始集合S1,时间T2将结束集合S1并且开始S2等依此类推,直到时间T1000结束集合S999。可以看出,与对每个集合其需要三个操作(乘法、乘法、接着加法)然后开始下一集合,从而在以上示例中总共3000个时间单位的控制驱动的程序不同在使用大量数据的情况下,通过这样的并行实现了计算速度上的巨大增益(在上述例子中约为三倍)。通常,图越复杂(举例来说,越宽),计算速度上的增益就越大。
可以看出,由数据流方法提供的加速与算法允许的并行性直接相关。对每个算法,程序中存在的并行性的量会有相当大的不同,但是存在很多展示高度并行性并可受益于计算的数据流模型的众多应用。这些领域包括图形、神经网络、数字信号处理、通信、网络服务器、语音处理、数据挖掘、天气预报、各种仿真器和一般的科学计算。数据流程序可以大大加速这些类型的应用,只要给定能够使用明确指定的并行性的计算机。
尽管对本发明不是很必要的,数据流计算很好地对应于运行时的重配置(RTR)的概念。更具体地,数据流编程模型是指定独立操作的计算节点的集合之间的连接的一种模型,而运行时重配置是使硬件实现这些节点的动作的一种可能的方式。为此,与将函数蚀刻在芯片上并且从不改变,相反仅由控制驱动程序的指令引导的传统的芯片技术不同,运行时可重配置***试图以这样的方式构造设备的逻辑:它们可以在运行时重定目标以适应当前的任务。在图2的数据流例子中,在设备上可以有三个通用的节点,并且对于这些程序,将两个配置成乘法器,同时将第三个配置成加法器。因此,运行时可重配置的机器试图更好地使用可用芯片。不仅可重配置能力是不同的,而且运行时可重配置***不同于在管芯上固定三个通用的处理器,比如,因为运行时可重配置***中的通用节点通常是更加简单的。比如,相对于成百个或者上千个具有完全特征的通用处理器,具有成百个或者上千个简单可重配置功能单元将是更实际的。
因此,可以使用运行时可重配置芯片来转换处理元素的集合,以实现给定的函数,并且从而执行并行计算,并且对固定函数通用处理器实现加速。当获取加速的优势后,如果期望的话,可以通过使用加速来节约功率。换句话说,较高速的执行意味着需要执行计算所需时钟周期较少,因此,相比于较慢的、通用处理器,可使较快的运行时可重配置***消耗较少的功率。
因此可以理解,可以各种方式连接的可配置计算元素的大型集合非常好地映射到数据流计算。运行时可重配置***具有某个有限数目的这些计算元素(或者功能单元),并且将不同的配置(整个图或者子图)在运行时编程到这些功能单元中。如下所述,在需求基础上将配置分页到硬件中,类似于如何在传统的计算机中处理虚拟存储器的方式。当产生数据集的时候,将其相应的配置分页到硬件中,并且接着在其上运行数据集。接着生成新的数据集,其可以导致新的配置进入页面依此类推通过程序。
在图3中描述了通用CAM***体系结构,其中在计算硬件比如包括计算逻辑的功能单元302和CAM片上(on-chip)高速缓存组件306之间的连接是通过互连网络304的,比如通过纵横制互连网络。根据空间限制,如果必要的话可以经由分层结构对纵横制互连网络可以进行尺寸限制。比如,可以将功能单元分成群集,每个群集包括连接到芯片级的纵横制互连网络上的本地纵横制互连网络。
功能单元302包括用于处理逻辑操作、整数操作和其它操作的硬件,操作比如是数字串行浮点操作(如下所述)。可以将功能单元302构造成以固定已知延迟进行操作,使得它们可以流水线方式通过互连网络(纵横制互连网络)304进行连接,而不用引入流水线停顿或气泡(bubble)。在一些情况下,有必要要将额外的流水线级延迟引入数据流图中,以获取这样的结果。此外,因为通过图的路径不必是相同长度的(举例来说,按照节点个数),对于两个具有不同等待时间的合并路径,可以使用这些延迟来进行路径长度均等化。这样的流水线级可以被包括在功能单元302、互连(路由)网络304中,和/或作为连接到互连网络304的单独元件。然而,注意到不同的延迟也是可行的,如同在功能单元的输出处排队一样。
如图3所示,CAM包括两个组件,片上(on-chip)高速缓存组件306和从传统RAM中构造的片外主存储器组件308的;(这些组件被统称为内容可寻址存储器,即CAM 310)。片上(on-chip)高速缓存组件306是是用于将数据提供给功能单元302的较小的快速存储器,其试图通过存储可能在不久的将来即需要的数据的影子(shadow)副本来最小化片外存取。相对于片上高速缓存306,片外存储器308的存储容量大得多但是速度比较慢,并且由硬件通过使用如下所述的数据结构来进行管理。如参考图1所述,并且如图3中所提示的,可通过将部分数据存储在磁盘上,如同众所周知的虚拟存储器一样,来虚拟化片外存储器308以便获得更多的容量。
根据本发明的一个方面,CAM体系结构以不同于正常处理器的方式来虚拟化主存储器。更具体地,使用也被称为关联存储器的CAM 310作为机器的主存储和同步化机构。为此,并且一般而言,向***中的每个数据分配用于引用该数据的唯一标记。使用硬件管理的分配***将数据及其相关联的标记存储在存储器中。因此,通过使用各种聪明的存储技术,硬件可以帮助阻止随机存取模式。
在CAM体系结构中使用的一个适当的示例标记生成机制是标记的数据项目用来从数据流图的一个部分行进到下一部分的一个过程,。该过程在以下描述,但是一般而言,在图4的概念模型中表示了标记生成硬件的一个概念。在图4中,根据输入标记生成输出标记。各种掩码技术、布尔操作、移位操作和加法可以将期望的输入标记转换成期望的输出标记。注意到如下所述,CAM处理标记生成,以及仅发送到计算硬件的数据;(注意到有时随数据将与标记相关的值发送到计算硬件中)。此外,注意到如图4中所示的操作仅仅旨在大体上描述概念,并不旨在表示给定的机器中可能所需的功能的全部集合。
因此,除了作为存储器以外,CAM 310也提供***的同步机制。当产生标记/数据对的时候,将它们收集起来,并且将它们组织起来以用于后面的检索。比如,CAM具有用于标识要输入到计算硬件的数据的标记,其以操作数的形式提供数据给计算硬件以便消费(举例来说,在一FIFO队列中),并且基于相应数据的输入标记将结果输出数据(例如,在另一FIFO队列中)与输出标记重新关联。生成标记以便由以下配置在同一操作中使用的数据值在存储器中具有相邻的位置,这样可以便于快速检索。
当创建数据的时候,通过存储器分层结构转发数据,以便于(通常地)其可以在与后面将要使用的其它操作数非常近的位置中停下来。比如,如果计算了数量A,那么将其转发以便在与B相邻的地方停下来,使得当执行C=A+B的时候,A和B可以位于存储器中物理位置非常接近的地方。下面将参考操作数集合描述这个概念。
进一步的增强通过类似地放置给定操作序列将需要处于邻近处的所有数据或者大多数数据而得到其它增强。换句话说,不仅仅上述计算的单个A和B元素是相邻的,并且如果存在需要加在一起的好几对A和B,这些对在主存储器中物理上也是相邻的。相比于其它方式,其便于更快的存储器存取。
根据本发明的一个方面,通过标记,CAM体系结构引入了硬件级对象的概念,其包括简化编程模型的装置,以及将并行性引入***的机制。通常,CAM体系结构中使用的每个操作数可以被认为是由唯一标记引用的对象,如上所述,这允许跟踪中间计算中使用的操作数。将这些操作数组合起来以形成较大的对象,接着作为整体被代码模块引用并且被处理。
在面向对象的编程模型中数据流机器工作良好。现在已经在众多处理器上定义和使用了面向对象语言,然而,在现代处理器上运行的代码没有对象的概念,并且实际上,面向对象的模型仅仅向程序员呈现了面向对象行为的假像。因此面向对象编程对于程序员来说是仅是语法深度上的一个组织工具。比如,尽管有可能编写以下形式的矢量加法操作的源代码:
C=A+B;(其中A、B和C是矢量),
在内部,源代码将最终导致如下代码被执行:
for(i=0;i<n;i++)C[i]=A[i]+B[i].
根据本发明,特定对象的元素可共享引用对象的标记位的公共模式(举例来说,前缀)。在上述例子中的索引i被表示为标记中的变量位,它们用于将标记空间中的迭代保持分离。比如,在上述例子中的矢量A和B具有公共的标记前缀,并且允许每个索引i使用标记的低位来选择特定的A[i]、B[i]对。硬件提供用于管理这些对象(标记空间)的机制,以用于有效地替代在更传统***中的垃圾收集器。
为了试图最大化对可能的并行性的使用,CAM处理器使用面向对象的编程风格作为一种机制。如下所述,当用户指定两个对象之间的操作时,迭代变量是隐含的。接着允许硬件来以任何次序处理这些对象的元素,使用尽可能多的并行性。其本质上等于在硬件级进行循环展开。
这个技术允许空间和时间并行性两者。依赖于对象中元素的数目、处理流水线的有效设置时间以及每个元素的处理时间,硬件可以选择配置宽的、高度并行的处理配置,可能在一个节点仅仅处理一个元素。换句话说,也可以将硬件以更流水线的方式进行配置,比如非常狭窄的配置仅仅具有一个处理元素。可以在运行时作出这些类型的决策,以符合处理器上所存在的执行条件。
此外,如果对象的一些元素需要长于其它元素的处理时间,或者如果一些元素已经准备被处理,而其它的元素还没有准备好,本发明通常让元素进行无序的处理,以便对计算资源进行更优化的使用。比如,在对矢量的元素进行迭代的循环中,一些元素需要比其它元素更多的迭代。在这样的处理中,允许早期终止的元素落入用于进一步处理的循环中,而同时允许需要更多迭代的元素留在后面是非常有益的。总的来说,这是非常有益的,因为如果元素需要依次序退出迭代步骤的话,并且比如,第一元素碰巧需要更多迭代,相比这种情况本发明允许算法的后面级早点开始执行。
另外一个优势是使计算流水线更满。作为示例,如果流水线是五个时间周期长,那么特定操作数的每次迭代将需要五个时钟周期来完成。如果第一操作数需要五个迭代,那么将在该一个计算上花费二十五个时钟周期。然而,在这些相同的二十五个时钟周期期间,其它的操作数将占用“空”的流水线级。如果这些其它的操作数需要较少的迭代,那么它们将更迅速地停止迭代,从而在流水线中释放它们的时间槽供新操作数使用。因此,在也可以执行该一个二十五时钟周期长的计算的同时,许多其它的操作数也有可能完成循环。
作为一个额外的增益,这种类型的并行性具有平均元素之间的迭代步骤的执行时间的作用,以便于将对于落入循环并且快速离开的较快迭代元素来平衡需要很多迭代的一些单个元素。这对调度是非常重要的,因为对数据流图中的执行路径长度进行匹配以实现最佳性能。
作为示例,考虑矢量,其中期望使用Newton的方法来找到每个元素的平方根。事先不知道计算根所需的迭代的确切数目,并且每个元素需要不同数目的迭代。然而,对矢量使用面向对象的方法,可以任何次序处理和完成元素,同时确保在相当程度上占用计算节点。
因此,CAM体系结构通过将整个数据集合作为关于存储器***的对象,进一步对各种其它的模型进行了改进。对于特定标记空间的所有操作数集合,可以从处理节点中发出单个请求。接着可按照电路交换的方式使用网络来传送满足请求的操作数集合,每个操作具有非常小的管理开销。相反的,单独操作每个标记/数据对的***具有更加开销密集的任务。通过管理由多个操作数组成的对象,而不是各个操作数本身,***可以添加额外的计算节点以按比例增加处理性能。因为将CAM310处理为更加整体的结构,作为预处理节点相关联存储器的尺寸的结果,溢出和死锁的问题较少。
并行***的另外一个目标是可缩放性,其中将更多的计算资源添加到***中,产生了更快的解决时间。其为真的程度依赖于计算和体系结构。每个计算问题都具有对可进行多少个并行计算的限制,并且CAM体系结构允许通过对象(标记空间)的使用表示算法的自然并行性。如此处所述的,***接着应用尽可能多的并行性来完成任务。
根据体系结构的约束,瓶颈可能出现在机器的数据处理部分,或者机器的控制部分。数据流计算模型的一个好处是其固有地将计算问题的数据依赖性减少到正确完成计算所需的最小的可能。此外,对每个处理节点来说,操作是本地的,因此有可能使用分布式控制结构来有效地处理数据流图。对每个节点来说,数据也是本地的,给出了相同的好处。通过构造机器体系结构来利用数据和控制的本地性,以允许完全分布式的处理,固有地得到了可缩放性。
可以从图3中看出,与具有内部高速缓存的处理器不同,本发明的CAM体系结构将相关联存储器(CAM)310从处理元件(功能单元)302中分离开,并且作为计算网络上的分离的共享资源来访问存储器。因此,可以添加单独的处理元件作为可缩放性的单位。当处理元件执行的时候,该元件请求包括很多操作数的对象(标记空间),当操作元件的操作数集合完成的时候,每个操作数可以在处理元件上运行。注意到与此相反的,其它的数据流体系结构将机器划分成节点,每个节点包括用于操作数匹配的相关联存储器以及处理元件;可缩放性的单位是相关联存储器/处理元件对。此外,在传统的处理中,在主存储器中检索数据并且存储数据,其中主存储器具有限的带宽。传统的微处理器硬件通过使用高速缓存存储器的分层结构继之以片外主存,试图减少数据检索和存储的带宽相关问题。当预期将来的访问将请求相同的数据、或者位于最后一次数据访问邻近处的数据时,使用小而快的高速缓存来作为较大、较慢、片外存储器的镜像。然而,传统的硬件对软件选择使用的存储器访问模式没有许多控制。因此,正常微处理器上的程序有可能以高速缓存提供小到没有(little-to-no)的好处的方式来访问存储器。
转到另一个一般的设计方面,计算机应用程序往往是“处理器绑定”或者“I/O绑定”的,其中将处理器绑定应用程序定义为花费较多的资源(和时间)来执行计算而较少的时间来移动数据,然而I/O绑定应用程序往往花费较多的资源(和时间)来移动数据而较少的时间来执行代码。通常,因为比如磁盘和片外存储器的I/O子***的限制,构建一个用于I/O绑定应用程序的机器比构建一个用于处理器绑定应用程序的机器,要困难很多。此外,设计用于I/O绑定应用程序的体系结构通常在执行处理器绑定应用程序时,要比处理器绑定的体系结构执行I/O绑定计算执行得好。如可容易理解的,当可以置于单个芯片上的计算能力的数量增加的时候,应用程序将变得越来越I/O绑定的。
很多具有高度并行性的应用程序也是I/O绑定的,并且因此本发明的CAM体系结构的设计试图提供I/O能力。机器(举例来说,运行时可重配置)的体系结构通常包括可编程计算元件(功能单元)302、用于在它们之间移动数据的路由网络304、某种类型的控制和存储器。良好的I/O性能的要素包括路由网络和存储器。
路由网络304确定在功能单元302之间的连接的灵活性。更复杂的网络,比如纵横制互连网络,以更多芯片面积为代价允许任意或者接近任意的连接模式。较不复杂的网络,比如总线,仍然允许小面积成本下的任意连接,但是因时间复用而以性能为代价。其它网络,比如网格,通过向最近的邻居提供良好的连接,是两个极端之间的折衷。这没有遭受总线的全部性能损失,但是也没有提供纵横制互连网络的全部灵活性。在尝试满足数据流图可允许的任意模式的时候,这可以导致功能单元的内部分段,因此可以结束功能单元资源的浪费。此外,由网络强加的路由约束可以强制数据流图被分成较小的片,导致需要额外的缓冲,而这可以落在片外存储器中。
因为CAM体系结构主要是用于,为可能展示I/O绑定行为的高度并行问题提供高性能机器,期望在最小化对芯片区域的影响的同时,能够维持最大的连通性。因此,一种实现使用纵横制互连网络作为主要片上互连304。注意到可以减少其一般较大的空间需求,比如通过数字串行算术方案的选择。
更具体地,数字串行算术包括可用来表示浮点数的交替数字表示技术。数字串行算术从最高位数字处理到最低位数字,而非很多程序员和机器设计员所熟悉的最低位到最高位方法。可以实现这些,是因为在某个容许度范围内,允许后面的数字对前面的数字进行校正。容许度可以被认为是按照任何给定数字步长的计算的间隔。
尽管对本发明不是必要的,但存在使用数字串行算术作为机器的表示方案的优势,包括数字串行技术首先产生最高位数字,这样字面上有可能在前一个结束之前开始下一个计算。可以在逐个数字的级别上、从一个操作到下一个操作对数字串行机器进行流水化。根据流水线结构,在操作的限制下,可以将任何功能都减少成单个时钟周期。此外,数字串行数据路径可以比典型的字宽路径狭窄。这减少了数据路由所需的面积,并且使得***中可能有更丰富的互连结构。更多的互连意味着可以在芯片上并发表示更大的数据流图,以及使得映射问题变得更加简单。也意味着在芯片上包括更多的功能单元,因为现在它们有更多空间。
用于数字串行的单个数字操作可以是相当简单的,比如移位和加法。因此,可能以非常高的速率对这样的机器进行时钟同步。也可能在单个数字串行节点中构造比标准加、减、乘和除更复杂函数。比如,可以实现超越函数,以及所感兴趣的其它函数。此外,简单地通过修改一些起始参数,即可以改变特定节点的功能,这很好地适合可重配置的体系结构。但是,尽管数字串行算术可以是CAM体系结构中以及其它的体系结构中的主要计算方法,但CAM体系结构也可以在不使用数字串行算术的情况下起作用。
在某个程度上,CAM与正常的RAM相类似,因为数据被存储在特定的地址中,并且可以使用这个地址来检索该数据。然而,在CAM和RAM之间存在很多差异,包括CAM 310便于快速并行搜索和检索操作,包括通过请求特定标记以查看其是否存在于存储器中。与RAM不同,CAM 310允许部分指定的标记来匹配在CAM 310中的单个标记的范围,并且连续对它们全部进行检索。虽然在RAM中是可能的,但这样的操作需要软件搜索。
然而,可以使用CAM 310作为硬件管理的分类设备,其中硬件提供了用于特定算法的较大的加速。在CAM 310中通过使用键值作为标记的一部分,接着允许以分类的次序从CAM 310中检索标记范围以完成分类操作。注意到标记不必以分类的次序进行检索;相反,用于分类的键值可作为标记的一部分被包括,这将产生类似的效果。即使可无次序地检索标记本身,键值被包括在标记中的事实可以允许各种机制获知特定标记在集合中的相对次序。
此外,在CAM 310中,标记的尺寸可以比相应的RAM的地址宽度宽很多。换句话说,在四吉字节的RAM上存在三十二条地址线,在直接寻址方案中,这可将标记宽度限为基本上32位。然而,CAM 310管理存储器,使得即使存储器的物理尺寸可以是例如四吉字节,但标记宽度可以大得多,举例来说,64位或者更多。如下所述,对于一些操作来说,比如,需要很多的标记的递归,宽标记宽度是有价值的。
标记它们本身没有暴露给计算硬件302。相反,如下所述,除了当被包括为数据流的一部分以用于进一步的操作和计算以外,它们被整体维护在CAM组件306和308中,。如上所述,将批量数据运行进入计算硬件302中,并且当它们返回的时候重新将其与其标记相关联。因此,当其数据运行的时候,可以在FIFO中存储输入标记,并且然后当数据批量从功能单元302中的实例化的子图返回时以FIFO次序检索该标记。在CAM体系结构中,不需要在计算硬件302中进行标记转换,由此可以通过将它们整个包括在CAM 310中来以保存一些资源。换句话说,无需维持用于标记与数据流并行的硬件路径;相反,可以将数据运行到***中,并将其相关联标记留在CAM中,以便当数据返回的时候重新联结。
通常如上所述,操作数集合是生成一个结果所需的值的集合。比如,当评估2*(3+7)的时候,存在三个操作数,即2、3和7;当这三个操作数都可用时,汇编了一个完成的操作数集合。操作数集合由与数据值相关联的标记指定。在下面描述了指定和使用与数据相关联的标记以形成操作数集合的两种方法,即固定的前缀模型和函数输入标记空间模型。注意到这些方法仅仅是非限制性的例子,并且其它的方法也是可行的。
当已经汇编了用于给定操作数集合的所有操作数的时候,当运行时该操作数集合有资格从CAM传送到其相应的配置中。通常,仅从CAM中发射完成的操作数集合。
根据本发明的一个方面,通过使用标记来标识唯一操作数集合,允许计算被无序处理,并且为进一步的处理而在稍后进行重新收集。无序处理以多个方式允许较大的计算速度,包括多个并行处理单元可以同时计算操作数集合的大型集合。这可以将标记空间再细分成更小的固定尺寸区域,或者当操作数集合变为可用时,处理单元可以抓住时机地取回并执行操作数集合。因为未强加任何计算的人工的边界,抓住时机的取回方法具有潜在较短处理时间的优势,而再细分的标记空间可以允许更好的高速缓存管理。
如果计算具有可变的等待时间,则非有序处理也是有优势的。这是其中每个操作数集合的精确的运行时间不同的众多迭代算法的情况。在这种情况下,抓住时机从标记空间读出操作数集合的一组处理单元尤其有利,因为数据的任何给定的子集合的总处理时间是未知的。
如上所述,使用标记作为***中每个数据操作数的唯一标签或者标识符。一种类型的标记使用操作数集合组合件的固定前缀输入标记空间概念,这是非常直截了当的。在图5和6中表示了这个***中的典型标记的例子。标记空间由其所包含的数据值的标记中的前缀位的公共集合来定义。除了公共前缀之外,该标记空间内的各个操作数集合按中间位的公共集合来标识。使用这些中间位来区分比如迭代次数、矢量索引和操作数数目等。通过使用来自数据流的键值来替代它们,也可以使用它们来进行检索和分类操作。因此给定操作数集合的各个操作数通常仅在它们各自标记的一些低位上是不同的。
在图5的例子中,标记的高16位指定标记所属的标记空间。注意到每个配置具有唯一的输入标记空间,并且区分了这些位是如何唯一的。
跟随其后的是例子中29位“用户空间”。这些位不需要是相邻的,并且在所使用的值上不存在真正的限制。这些位可以用于对特定的应用有意义的任何目的,,然而在实践中,使用这些位来分开一配置的输入标记空间中的操作数集合。因为中间的29位指定标记所属的特定操作数集合,具有共同的16位前缀和这29位的任意两个标记将被放置在同一操作数集合中。
使用最低的三位(也被称为数据(或者图5中的位置位)),来指示与该标记相关联的数据将在操作数集合中占用哪个“槽”。举例来说,该槽将被耦合到配置中的特定路径上,比如除法运算符的右端。在图5的例子中,最低的3位指示相关联数据旨在填入操作数集合内八个可能的操作数中的哪一个。
然而,注意到,根据这个标记空间的操作数集合的大小,在某种程度上用户位和位置位是可以权衡的。因此,如图6中所示,可以允许操作数集合中的操作数的数目发生变化,其中在图6中,在操作数集合中存在四个操作数。如果标记空间使用四个操作数的操作数集合,那么将存在三十个用户位和两个位置位。如果标记空间使用各自一个操作数的操作数集合,那么将存在三十一个用户位和一个位置位。然而,注意到,图5和6的例子使用48位标记,且可使用更宽的标记。
在图7中进一步描述了固定前缀输入标记空间的概念,其中在图的左边表示了CAM内容,具有以公共标记前缀0x1236形成的若干操作数集合。注意到形成这个例子中的完成操作数集合需要八个操作数(四个操作数,每个都需要两个操作数来点火)。最高的集合(前缀0x1234)具有两个操作数,下一个集合(前缀0x1235)具有一个操作数,下一个集合(无影子,前缀0x1236)具有全部的八个操作数而最低的集合(前缀0x1238)具有七个操作数。因为该无影子的集合具有完成数目的操作数,即这个例子中的八个,所以将集合发送给配置以便处理,如由从标记内容连接到图的右端上的节点的箭头所表示。其余的操作数集合保持在CAM 310中处于空闲状态,直到它们完成。
如果操作数集合的所有成员操作数都是有效的,那么该操作数集合完成。CAM体系结构的每个配置(计算内核)具有单个输入标记空间规格,即公共的前缀位。在执行时,CAM 310从空间开始发出标记以用于处理。通常,CAM仅从输入标记空间发出完成的操作数集合,(尽管存在期望发出没有完成的操作数集合的异常)。当配置执行的时候,CAM 310发出与作为输入标记的函数的新的标记相关联的新数据值。这些新的标记落入它们的消费者配置的输入标记空间以用于以后的处理。
以这种方式,标记的产生是“前向供给”,本质上意味着给定消费者的标记的生产者将其标记引导至相同的标记空间。这帮助硬件路由数据,并且将其形成为***的自然分区。可以很容易地在存储器中安排标记,使得根据标记值相邻的标记在存储器中也是相邻的。该存储器相邻性允许硬件使用快速RAM突发访问以流入完成的操作数集合中,该操作数集合然后可被转发给计算硬件302以用于处理。
这个计算的模型试图确保在同一计算中将一起使用的值在RAM中彼此物理上相邻,使得可以在执行时快速地对其检索。注意到与其中从潜在的具有较大差异的存储器位置中检索数据的很多控制驱动程序形成对比。访问RAM地址空间中非接近位置,具有根据从外部RAM较长访问时间的成本,因为需要启动额外的总线周期和RAM页面改变的可能而这是非常昂贵的。可以通过高速缓存接近不同位置中每一个的其它的数据来将这些影响减轻到一定的程度,但是其效率有限。
注意到在固定前缀输入标记空间概念中,数据需要在处理的某个阶段被混洗和安排,基本上是在数据产生期间。当产生每个数据值的时候,基于程序员提供的常量和对输入标记的函数关系,为其生成相关联的标记。接着将新的标记/数据对发送到CAM 310中,在那里它被路由到片上高速缓存306以及外部RAM存储器***308中的适当位置。
在这个阶段,所生成的标记/数据对有可能被发送给完全不同的存储器位置。然而,通常,相比于读分散影响,更易于处理写分散影响。如果发出相应于太多不同的位置的读请求,硬件不得不访问外部存储器***,并且读取所有的数据,可能以及来自每一位置的额外数据,因预期将在稍后需要这些数据。可将对不同位置的写请求保存在高速缓存中一段时间,期望将发出对接近先前写请求之一的其它位置的其它写请求。在这样的情况中,硬件可以积累可作为一单位向RAM的单个区域发出的好几个写请求,而不用处理昂贵的RAM页改变。通常在最坏的情况发生的时候,可以将特定的写请求发给单独的位置,在其附近没有发出其它的写请求。尽管如此,这种情形在一种实现中是优选的,因为对目标位置仅仅需完成单个写操作,而不是可由高速缓存执行的、期望满足可能永远也不会到达的某些将来的读请求的一系列的读请求。
固定前缀模型的扩展包括函数输入标记空间模型,它试图解决固定模型的问题同时也提供增强的功能。注意到任何固定前缀输入标记空间***均可以使用函数输入标记空间模型来实现,举例来说,使用非常简单的函数。在函数模型中,其中根据输入标记的函数来生成一个标记,用户位域实质上整个延伸到左边,由此前缀没有特定的含义,并且将操作数集合概念处理为片上高速缓存抽象。使用相同的数据结构,函数相关的标记仍可被存储在物理存储器的相同位置中。位置位仍可以指示操作数集合内的操作数数目,尽管它也可以是所计算出的位之一,从而对各个操作数有所不同。因为一种实现支持对标记的低位的索引,程序员通常应该为最高效率而作同样的事情。
固定前缀模型的问题之一是在某些情况中需要数据复制。考虑到正常矩阵乘法:
将A的每行与B的每列相乘,来获得结果。固定前缀输入标记空间模型需要A的每行复制三次,每个副本接着与B的一列相匹配。如图8所示,这产生九个不同的乘积,接着再对它们进行适当的求和。需要A中每个元素的三个副本,以便于它们可以与B的元素形成唯一操作数集合,并且产生唯一的乘积。将这些操作数集合置于乘法运算符的输入标记空间中,并且然后对其进行处理。在图8的例子中,示出了三个乘法节点,但是该例也可以使用单个乘法节点。
这种类型的数据复制对片上和片外带宽通常是有害的,因为产生了重复的数据,***没有选择,不得不将其作为唯一数据进行处理。因为在该例中的数据的三个副本中的每一个都具有唯一的标记,***也仅可以假定数据是唯一的。这个过量的数据导致片上高速缓存306中的需求不必要地增加,可将其自己或者其它的数据推到片外。由于外部存储器访问速度较低,这样的情况是不受欢迎的。
相反,通过允许操作数集合引用A的元素而不用实际上复制数据,可以实现更好的模型。这要求用于被允许是操作数集合的一部分的标记的更通用的规格机制。在图9中示出了一种构建操作数集合的方法,其中在操作数集合中的每个位置中具有不同的输入标记说明符,而不是其中操作数集合中的所有操作数共享相同的前缀和用户位,仅在位置上不同的固定前缀方案。在完全灵活的***中,可将任意标记说明符放置在所示的四个位置的每一个中,使得***需要维持大的数据结构,以便跟踪哪些标记形成了用于每个运算符的操作数集合;然而,尽管是灵活的设计,但为了跟踪很多关系,可能要承受性能的损失。
改进的***是不需要大型关系表,但是仍允许使用足够的规格灵活性的一个***。如可以理解,固定前缀输入标记规格可能是最不灵活的***,因为它仅允许输入标记之间的单个隐含关系。对于标记操作,并且后面的数据操纵,固定前缀输入标记规格依赖于这样一个事实:标记可以在输出之后发生改变,以落入目的地标记空间中。然而,如同所示的,因此它可能导致其自身的问题。改进的解决方案使用输入标记之间的函数关系。更具体地,如果每个标记可使用程序员指定的函数从任意另一标记得到,则不需要潜在较大的关系表,并且对输入标记计进行有价值的操作来创建操作数集合也是有可能的。
输入标记之间的函数关系的所期望的复杂度是依赖于特定的应用的。然而,在图10中表示了简单的函数输入标记空间的例子,其中在标记生成时使用了通配符。在图10中,输入标记A的规格显示了不变前缀E67以及较低四位(半字节)中的通配符“?”。输入标记B的规格有前四位中的不变前缀4、接下来的四位中的四位通配符“?”以及低八位中的不变的F0。当机器试图构造操作数集合的时候,它访问CAM***以试图为标记A规格找到匹配。它所找到的第一匹配是E671,它现在将通配符位置固定为1。将通配符值1代入标记B的通配符位置,得到41F0。机器然后将试图检索标记41F0,并且在这个例子中,找到了该标记,完成了操作数集合。如果41F0不存在,则操作数集合未被完成,机器将移动到下一个匹配标记A,而不对计算硬件进行发送。从图10的例子中可以看出,存在匹配标记A规格的四个标记,并且每个都在CAM中具有用于标记B的匹配条目。所找到的任何完成的操作数集合将导致相关联的数据被转发转发到计算硬件302中(图3)以便进一步处理。
通常,***搜索匹配标记之一的规格的任何条目,然后通过应用所指定的变换函数派生出与之相关的标记。函数关系可比简单的通配符替换更加复杂。考虑到下面的矢量,以及图11-13的例子,其中,使用了通配符变量i和x:
VectorA[a0 a1 a2 a3 ] VectorB[b0 b1 b2 b3]
在图11所示的例子中,A的元素成对地加到B的元素上,然而,以逆序访问B的元素。在图12中,“连续”例子的类似Fibonacci的序列显示了如何从相同的矢量中引用值,图13的“蝴蝶”的例子也是如此。可以看出,可以对通配符位应用有趣的数学或者位混合(swizzling)函数,以获取派生的输入标记。这些函数类似于可对在输出标记的位上执行的函数,并且实际上,其在功能上可能是一样的。
在图14中显示了用于矩阵乘法的索引交换的例子。在图14中,索引i跨四个不同的输入标记指示符的四个域进行移动,可能同时将四个不同的矩阵相乘。
可以将输入标记规格认为是大型存储器中带有允许它匹配多个存储器位置的通配符的地址。在运行时使用用于每个存储器位置、匹配地址模式中完全指定的位的特定的位来填充通配符。尽管这些例子显示通配符位在标记中是相邻的,但不必是这样的情况。比如,可为输入标记空间之间的任何遍历关系按照输入标记空间之间的任意模式打乱通配符位。同样地,在每个输入标记空间中不变保存的位是独立的,并且是可个别控制的。因为可以通过改变输入标记说明符之间的位模式和/或函数关系来对标记空间进行重新定义,标记空间的概念变得更加柔韧。
当函数输入标记空间模型向***添加了灵活性,并且允许容易地解决重复数据问题的时候,它也引入了潜在的其它问题。考虑到图15和16中表示的数据访问模式,它表示固定前缀对比函数输入标记空间存储器访问模式。
固定前缀模型(图15)将操作数集合的成员限于具有仅在最低的两个三个位中变化的标记。这样的限制使得这个模型能够容易地群集存储器中操作数集合的成员,使得可以使用对RAM的快速突发读取来访问这些成员。这是可能的,因为操作数操纵在簇的输出阶段发生,此时应用了标记变换函数并且将新得到的标记及其相关联的数据被归纳到CAM中以进行分类。一旦位于CAM 310中即将标记/数据对导入存储器中传统上置于与其操作数集合的其它成员直接相邻的适当位置中。最后,可如所示地显现访问模式,,访问模式在配置的输入端上为线性聚集存储器访问,在输出端上为潜在“散弹枪(shotgun)”模式的分散存储器访问。
相反地,图16的函数输入标记空间模型允许构成操作数集合的规格中有更多的自由度。输入操作数之间的函数关系可以导致对配置的输入的随机读模式,并且也可以展示随机写模式。
如上所述,线性存取允许快速的外部RAM突发模式。这即是固定前缀模型在配置的输入端上所允许的,尽管配置的输出端仍然是相当随机的。然而,相比于随机读访问,随机写访问稍易于处理,因为对随机读的正常解决方案是将靠近实际读目标的一行值突发读入高速缓存中,期望在同一邻近处将需要另外一个值。这是非常投机的,并且消耗外部总线带宽、内部高速缓存资源,可能或者可能不会提供就将来的高速缓存命中而言的好处。另一方面,期望在不久的将来将对与之前的写相邻、或者非常接近的位置执行另一写,可在一段时间上内部地高速缓存随机写。当到了要从高速缓存上驱逐写数据的时间的时候,可以将位于第一写附近的数据作为块突发输出给存储器。因此,对于写,在将已知有效的数据流传送给存储器之前,高速缓存可用于缓冲该数据一段时间,然而对于读,强制高速缓存对潜在无用的数据进行投机性的读取,期望它将在将来被访问。
理想上,数据的访问模式没有随机性,而将存在禁止大量潜在应用的过度限制的要求。因此,经常必需使用各种有趣的方式来访问数据,比如对FFT(快速傅立叶变换)操作。在一种实施例中,选择随机写,由此当可能的时候,即使使用函数输入标记空间模型,也在配置的输出端而不是在输入端完成标记操作。
然而,存在这样的时候:禁止输入端标记操作将导致大量的数据复制,这可能在甚至大于高速缓存的投机读取的程度上不利地影响片外带宽。比如,足够小以适合整个在高速缓存的内部的矩阵允许任何输入端遍历模式,或者对相同元素的多次访问,来适应没有外部存储器访问。如果输入标记空间模型强制进行数据复制,同一矩阵的多个副本(举例来说,八个或者更多)将被强制放入高速缓存中,这可能使存储器溢出,或者至少使其他的数据离开高速缓存,因此生成外部存储器访问。在一个实施例中,因此也向软件提供函数输入标记空间模型的灵活性,因为也可以将其安排成作为固定前缀模型行动,并且应当理解,如果使用不当,这可能导致问题。
存在减轻函数输入标记空间模型的固有聚集问题的各种方法,包括向程序员提供底层硬件体系结构的一些知识,以便于程序员可以为其进行软件优化。然而,尽管不是完全期望的,可以提供基本知识,比如认识到特定的数据集将适合放入高速缓存中和/或者对其进行细分,使得它将适合放入高速缓存中,这对该数据集的重复或随机访问都是有益的。维护数据本地化的一些概念也是非常有益的,举例来说,如果知道将在将来的操作中一起使用两个不同的对象,那么可以有利地交错它们的标记空间,比如图17中,它显示了用于函数输入标记的交错的标记空间。
在图17中,以交错的标记空间安排了矢量A、B和C,使得它们将在存储器中以交错模式被安排。软件通过配置设定向硬件提供提示,指示操作数集合的元素是交错的。这利用了快速外部RAM突发访问以单个突发读取来读入整个操作数集合,而不是必须从潜在不同的RAM页面执行三个不同突发读取以读入相同的数据。
相反的,如果存在大量的数据重复,或者如果在很多不同的位置上使用了相同的对象,则对对象进行打包使其占用连续的标记位置仍是有利的。比如,这可能是在多个计算中使用了矩阵A的情况。在那种情况下,如在图18中所示,可以将其在标记空间中从而在存储器中的表示进行打包,图18显示了用于函数输入标记规格的紧凑标记空间。
可能需要基于程序分析来决定替换方式。然而,任何所需的分析应根据程序是以数据流格式进行编写的事实来简化,这使得这样的依赖关系明确。这种类型的优化依赖于连续标记将占用连续的存储器位置的假设,如同在鼓励数据流模型的模型CAM体系结构中。
转到输入标记说明符之间的一对多映射的概念,可见,在其它的方面中,这产生了矩阵乘法的更加紧凑的表示。考虑下面图19的矩阵乘法,它示出一对多函数输入标记空间关系。在图19中,A的输入标记说明符具有两个通配符域i和j。它们可以匹配矩阵A的任意元素。在找到匹配后,如所示的,仅仅将j域传播给矩阵B的输入标记说明符。这将B说明符的k域留作第二通配符,它然后能自由地匹配B中匹配j域的任何元素。在图19的左下方中,将该过程示为A的i和j域并绑定到0,0,然后将B的j域固定为0,但是允许k域绑定到0、1和2。以这种方式,如右侧成对的列所示,生成执行矩阵乘法所需的元素排列。这种映射方案的结果是A的每个元素都将被取回到高速缓存中,并且可用于与B的元素进行所有可能的排列,然后可被丢弃。这促进了对标记空间关系所定义的每个数据子空间的引用的本地化,保存了片外存储器的带宽。
通配符概念的这种扩展提供了超出数据组织之外的多个潜在的使用,包括通过输入操作数进行的通配符传播而创建的标记之间的关系可用于构造标记空间中的关系数据库。也可以将这种关系视为是逻辑***的传递特性,可以在多个不同的应用中使用,比如人工智能、数学操作、自动的证明***等。此外,可使用类似这样的***,很容易地实现类似Prolog和Lisp的语言,因为这两种语言(在某种意义上)都是基于某种约束在状态空间上进行搜索的数据库构造。
可以看出,函数输入标记空间规范模型允许有力的数据操作,同时在存在负值数据的情况中提供优于固定前缀模型性能优化。通过输入标记空间有计划的定义和构造,可以最小化输入聚集问题,并且仍可以在函数输入标记空间规范模型内实现前缀模型。
函数输入标记空间模型的其它使用包括高速缓存管理。更具体地,通过仔细选择配置中使用的标记模式,有可能保证那些模式所引用的数据的量适合放入高速缓存中以便避免溢出。比如,考虑到下面提出的4×4矩阵乘法的例子:
为了执行这个运算,需要执行总共6*4=64个逐个元素的乘法。希望CAM高速缓存306包括所有64个输出操作数,如同32个输入操作数,以便于可以执行元素上的各种遍历,而不用付出转到外部RAM308的代价。作为例子,考虑不足以保存这些数据,并且需要在数据适合填入之前将其分成四份的高速缓存。如图20中所示的,函数输入标记空间模型允许输入数据可以很容易地被细分,图20显示了矩阵A列0,矩阵B行0的例子。
通过在j通配符域中放置常量,乘法该阶段所涉及的元素的数目已经减少到8,并且输出的数目已经减少到了16。注意到已经选择了标记掩码,以便于将由这个计算覆盖A的列0和B的行0。因此,在这个输入标记集耗尽了以后,不再需要高速缓存中的任何输入值,并且为此计算引用同一输入操作数的相继输入标记集不会导致任何其它的高速缓存未命中。
注意到此时仅仅完成了工作的四分之一,从而需要再处理三个输入标记空间。图21是对上述的高速缓存管理例子中剩余标记空间的处理的表示。
这些输入规格中的每一个覆盖了它们所引用的元素的乘积,因此避免了对于这个输入数据的将来的高速缓存未命中。一旦计算了乘积对之后,定义了一个或者多个输入标记集,这些输入标记集合管理总和来产生矩阵乘法的最后输出。然而,可以看出,以这种方式使用函数输入标记空间模型允许程序员对数据进行分割,由此可对大型数据集保证高速缓存的有效使用。
当处理稀疏的矢量和矩阵的时候,操作数集合的概念可以有其它优点。在逐个元素的基础上,可以将两个稀疏矢量聚集到操作数集合中。变量位用于矢量中每个元素的索引位置。在图22中描述了这样的稀疏矢量/矩阵处理例子的矢量点积操作。从图22中可以看出,在点积中矢量v和矢量n是点乘在一起的。首先,将两个矢量逐个元素地***CAM中,使用元素索引作为可变的标记位。CAM安排这些元素以便于相等的元素索引彼此相邻。具有对应集的任何元素集形成了完成的操作数集合,并且从CAM中发出。将完成的操作数集转发给乘法累积配置,而不发送任何“单个”元素(n2、v3和n4)。后来将这些单个元素从CAM中删除,因为不需要它们,因为它们在另一矢量中没有匹配的元素,有效地将它们与零相乘。然而注意到,CAM除去了它们,而不是在计算硬件中将其实际与零相乘。
对一般需要补零的任何操作而言,该相同类型的处理是有用的。比如,图像处理应用程序通常需要在图像边缘补零,FFT(快速傅立叶变换)操作通常需要补零直到2幂的边界。如果需要单个的元素,如矢量加法运算的情况,则通过另外一个配置从CAM中将单个元素检索出来,稍后与求和的对一起被合并回来。
执行模型
在理想情况下,整个数据流图都将在机器中被实例化,当操作数集合完成时数据将以批量数据的形式从中流过。然而,给定现有的硬件,所感兴趣的大部分图都太大了,以至于不能适应于装入机器,所以有必要将图像分割成更多的可管理的小片即子图像。将这些子图像称为配置。这些配置是互不重叠的,并且形成原始数据流的完成的覆盖集。
在图23中表示了配置的示例组,图中每个虚线框表示了不同的配置(配置A-配置E)。
如上所述,配置从CAM接受完成的操作数集合作为输入,并且产生被发回给CAM的输出,在那里它们与一个或多个输出标记空间相关联。配置通过消耗来自于其指定的输入标记空间的完成的操作数集合直到操作数集合被耗尽来继续执行。此时,在一些可能的清除操作之后,该配置将被另外的配置所替代。依赖于正在执行的确切函数,这些清除操作可包括删除标记空间中剩余的任何部分填满的操作数集合。然而注意到,偶尔地可使用不完成的操作数集合作为输入,如上所述的稀疏矢量加法的例子中。
如上所述,可由运行时可重配置的硬件便于将数据流图分成静态子图的动态执行集。通常,将配置编程到运行使可重配置硬件中的过程类似于在控制驱动机器中的操作码的取回。它表示仅间接有助于机器加速的开销。因此,它有利于尽可能快地重新配置,和/或使用等待时间隐藏技术来最小化它对机器执行时间的影响。在CAM的体系结构中,这是以两种主要的方式来实现的。
首先,与将配置编程到硬件中所需的时钟周期的数目相比,处理标记空间中的操作数所需的时钟周期的数目被假定为较大。实际上,假设了正在处理的数据集较大,这对很多有意义的并行应用而言是真实的假设。这是很多运行时可重配置***的假设,但是根据编程配置所需的实际时钟周期数,它或多或少是合理的。在一些体系体系结构中,配置通道可以窄到一个单个的位,很显然这往往将减慢配置进程。为加速处理,CAM体系结构使用合理宽的配置通道。
第二等待时间隐藏技术在运行时可重配置硬件中使用影子控制寄存器的库。更具体地,当寄存器的活动集正在为另一个配置处理数据时,将下一配置写入影子硬件控制寄存器。基本上,当数据正运行在相同的硬件上时,将下一配置写入到控制寄存器的后台“页”中,因此当先前的配置完成时,活动的配置可迅速改变。
配置的使用或执行可因很多***事件触发。在一个直截了当的例子中,可因一个或多个其它的配置的完成来触发配置以便执行。每个配置具有它所依赖来形成完衡的操作数集合的一个输入列表。当提供输入的每个配置完成时,加载其相关配置的列表,并且在每一个中对相关标志置位。当每个相关标志置位时,为该配置检查完成的标志集合。如果对任何配置的所有输入状态标志均被置位,那么调度该配置以便执行。
在图24中表示了这样的执行状态机机制的示例概念图,其中可见,形成了反馈循环。CAM310和/或功能单元阵列302生成前往配置控制单元2420的触发事件。配置控制单元(控制器)2420更新配置存储器2422中的标志,最终指示当前的配置以完成执行,且得到的数据被存放在一个或更多的输出标记空间中。如果对任何相关配置的所有标志均被置位,那么将该相关配置放置在执行队列2424中以便调度。
并且,举例来说,配置控制器2420基本上同时地将从执行序列2424中移除待处理的配置,并且使用其来自配置存储器2422中的配置数据来配置运行时可重配置硬件的影子寄存器。一旦当前的配置完成,将通过配置装载器2426使影子寄存器活动,并且功能单元硬件302将通过新的配置开始处理数据。注意到一旦先前的配置从影子寄存器被传送到活动硬件中,那么待处理的配置即可以出列,并且被编程到影子寄存器中。这允许进行后台重新配置,以及有效地将配置时间流水化(或隐藏)为对实际数据处理的后台操作。
可以看到,形成了执行循环,当配置结束时,它们为要调度执行的下一配置集更新输入状态(就绪)标志,然后执行并更新依赖于其的输入状态标志。
在图25中表示了执行记录的模型,图26A显示了各种配置以及配置A,B和E的执行记录。如经由执行记录中的数据可见,在图26A所表示的时刻,配置A正在运行,从其输入标记空间中拉出完成的操作数集合,处理它们并产生落入配置E的输入标记空间的输出。注意到为配置块A对所有的4个输入状态标志置位(如由二进制值1111表示),这是调度它来执行的触发条件。也注意到,对配置块B的所有输入状态标志置位,但它仍然位于执行队列2424中,等待被配置到机器上。有可能在当配置A执行的时候,配置B正在被编程到同一硬件的影子控制寄存器中。注意到,也有可能使配置B被加载并与配置A同时运行,然而为这个例子的目的,可以假设由于有限的计算资源,一次只能加载一个配置。当配置A运行的时候,它消耗从CAM中接收到的操作数集合,举例来说,被指定为处于输入标记空间内的任何操作数集合。
图26B表示了在配置A耗尽了来自于其输入标记空间的完成的操作数集合之后,且当配置B开始执行时的记录A、B和E。注意到在配置A完成之后,已经将其执行记录的输入状态标志复位为0,并准备好接收新一批的操作数集合(如果有的话)。同样注意到,已经对配置E的执行记录的输入状态标志的第一位进行了置位,指示由配置A的完成产生了第一操作数集合。
当配置B完成执行时,执行以配置C和D继续(为简洁的目的,在此不单独显示和描述它们的记录)直到满足了配置E的所有四个输入依赖关系。此时,配置E将被置入执行队列2424以便调度。
注意到,这样是可行的:在***中加载新的配置而不是等待配置全部完成,好像(例如从历史分析)了解到该另一配置将等待片刻来完成。比如,配置A可执行一段时间,但正在等待没有就绪的操作数集合。在此时,可加载并执行配置B,并且完成它的操作数集合,使得执行工作而不是简单地等待可能在稍后发生的配置A完成。尽管可行,但在众多类型的数据处理应用程序中不太可能,并且由于额外的重新配置和/或者刷新A中已经位于片上高速缓存中的数据,仅为了重新加载配置A及其所需数据两者,可能耗费更多的时间。
条件执行
在CAM体系结构中,如if-then语句或者while循环这样的条件执行,是使用操作数集合的概念进行处理的,实质上是通过在条件满足之前不完成操作数集合来进行的。条件执行在运行时可重配置机器上是稍稍较难的问题,由于需要取决于条件函数的评估,在逐个操作数的基础上通过不同的硬件路径操纵数据。
If/Then语句是通过使用仅从CAM发出完成的操作数集合以便处理的CAM特征来实现的。因为条件的两个分支通常将需要执行不同的代码,条件的每一分支具有各自不同的输入标记空间,并具有不同的操作数集合。在执行过程中,可以生成每个分支所需要的值,并且将对其进行标记,使得这些值可以落入适当分支的输入标记空间中。
下面的代码提供了一个条件的例子:
if(A<B)
C=D1+D2;
else
C=E1-E2;
如图27所通常表示的,为了处理分支,也指定附加的种子令牌,作为分支的任何一端上的操作数集合的一部分,由此除非且直到种子令牌可用,否再将不从CAM中发出操作数集合。当为给定测试条件评估操作数(分支之前)时,由图中的条件节点来生成种子令牌。注意到图27中的节点是一个简单的例子,条件节点实际上可能是复杂的条件配置。
当为每个测试条件评估条件节点时,它为条件的真或假分支中的任一个生成种子令牌。因此,在图27的例子中,给定A0和B0操作数集合,看起来A0不小于B0,由此为E01和E02生成了种子假令牌SF0,而不是D01或D02。对于A1和B1以及A2和B2操作数集合,基于它们的各自评估,生成真种子令牌ST1和ST2来完成{D11,D12}和{D21,D22}操作数集合。生成种子假令牌SF3来完成馈送到条件节点的A3和B3操作数集合的操作数集合{E31,E32}。
种子令牌因此为条件的正确分支完成了操作数集合,而留下相对的分支还没有完成。因此,下游运算符仅检索完成的操作数集合,而未完成的操作数集合将被丢弃。如上所示,(for i=0 to 3),Ai<Bi的第一和第四评估结果为假,而第二和第三评估为真。因此条件节点发出真种子令牌ST1和ST2,完成这些操作数集合,由此CAM将向真分支发出{ST1,D11,D12}和{ST2,D21,D22},且加法节点将评估C1=D11+D12和C2=D21+D22两者。已经为SF0和SF3发出了假种子令牌,使CAM向假分支发出{SF0,E01,E02}和{SF3,E31,E32},这将执行C0=E01-E02和C3=E31-E32。注意到由于分离的需要,真分支和假分支将具有两个不同的输入标记空间,但这些分支的输出通过发出位于“C”输入标记空间(C0-C3)的令牌被合并以便进行后续的计算。
注意到,某些“短路评估”是可能的,因为一旦A和B的值准备好被使用,这些种子令牌即可被发出和使用。因此,条件计算可用有效地短路(退出)未使用分支所需要的任何计算。例如,考虑完全为该条件分支的使用计算D1的值。在这种情况下,来自该条件的种子令牌可被用作计算D1的门函数,仅允许计算所必需的D1的值。相反,如果在该条件以及图中除该条件以外的某个部分使用了D2的值,则短路将不会节省任何东西;在此处的真分支的输入标记空间以及其它位置中均可使用D2的值,以防止对D2的潜在重复计算。
此外,迄今所述的执行模型在配置和配置之间流动,而不管数据流将可能发生什么情况。有可能在图中遇到条件分支,其中所有数据从分支的一边流下,而没有数据从相对的一边流下。因为两边都取决于分支点,两者都可被调度以用于执行。然而,有可能用标记检测硬件来确定对给定的执行分支是否确实生成了任何标记。如果没有生成标记,那么该整个执行边(该子图)实质上可通过留下该边的输入状态标志保持未置位而被“短路”。
while循环使用类似于if/Then语句的形式,并再次使用操作数集合的概念。在概念上,创建如图28中表示的while循环。使用了两个标记空间,一个作为对while循环的输入,另一个属于数据流图的下面的配置。使用条件运算符来产生种子令牌,该种子令牌或者使循环继续迭代,或者停止迭代并允许计算继续。作为一个例子,考虑下面的循环,如在寻找根的问题中所使用的:
while(abs(f(x)-Target)>Delta)
x=Update(x);
在图29中表示了这种while循环实现的一种数据流表示,在数据流中,大于“>”比较运算符发出两个种子令牌中的一个。如果迭代继续的话,那么将种子继续令牌发回到while循环的输入标记空间。如果迭代停止的话,则将种子停止令牌发到下一标记空间。
因此,在这个例子中,输入x值(可能被更新)作为下一标记空间的一个操作数被输出。随后对更新后的x值应用该函数和目标减法,接着是绝对值函数,然后将该修改后的值与delta比较。如果小于delta,则发出种子停止,完成下一标记空间操作数集合,由此配置将执行。否则,通过产生种子继续操作数来继续更新x,完成更新x循环的输入操作数集合,这将更新x直到满足delta准则。
注意到,在循环的输入标记空间以及下一图的输入标记空间中都使用x更新后的值;种子令牌和更新后的x值为while循环或者下一图形成了操作数集合。只要在循环的输入标记空间中存在完成的操作数集合,循环就将继续执行,使得向循环的输入标记空间发出种子令牌将使x值在循环中再次运行直到条件满足。
执行中未执行的边可能在CAM中留下未完成的操作数集合,因为其它配置可能对其标记空间有所影响。同样,稀疏向量点积也可能在CAM中留下部分操作数集合。它们在数据流图中诸如两个执行边重新合并的稍后节点处以删除操作从CAM中清除。
图30中描述了这样一个标记清除的例子,其中条件节点包含在配置A中,它适当地为配置B和C产生种子令牌。配置B和C仅向CAM检索完成的操作数集合,并且均产生落入配置D的标记空间中的输出和标记,这就是上面暗示的“合并”操作。所使用的输入标记空间规范***将确定何时删除任何未完成的操作数集合是安全的。
如果使用了固定前缀输入标记规格,那么配置B的输入标记空间中任何未完成的操作数集合可在配置B已经检索了所有的完成的操作数集合之后,随时被删除。同样地,在配置C向CAM检索了所有的完成操作数集合之后,可从其输入标记空间中删除未完成的操作数集合。
或者,如果使用了函数输入标记空间规格,那么某些数据有可能在配置B和C中是公共的。在这样的事件中,有必要在从CAM删除数据之前等待直到配置B和C均完成。便于上述操作的时间是在配置D完成之后,自此以后不需要任何附加的与逻辑来控制删除命令的发布。
转向条件执行的另一方面,执行引擎中存在这样一些情况:有必要阻塞输入数据流一段时间,直到已经处理了图中更下方的数据。这种情况可能在处理while循环时产生,例如,当有必要保证,在新的数据被允许进入循环之前,输入集合完全完成了循环的执行。这允许多个“xi”的输入流过同一while循环,随其迭代或者达到某种条件而继续或退出。如果必须要保证输入数据是以集合处理的而不是作为自由流,那么也可以对图的主要输入进行阻塞。
可以利用执行记录中的输入状态标志来完成这种类型的同步。通常,加上用作新输入不能跨越的屏障的输入状态标志。屏障标志取决于信号通知阻塞期结束的配置的完成。
为了举例说明数据阻塞的实现,图31中显示了上面的“寻找根”的while循环的例子,该循环被分成四个不同的配置块,包含生成配置块3140、更新配置块3142、测试配置块3144和下一配置块3146。在图31中,图上显示的配置之间的实线弧是数据通道,也是执行记录中的依赖关系。一条从下一配置块3146运行到生成配置块3140的虚线弧是屏障弧。没有数据流过屏障弧。注意到在图31中,没有显示生成配置块3140、更新配置块3142和下一配置块3146的内容,因为对于这个例子来说,它们没有关系。它们自己本身各自可能包含一种以上的配置,但相同的同步技术仍然可用。
在图32中表示了用于该图的执行记录之间的依赖关系。执行记录的依赖关系以及各自的输入状态标志,形成了CAM体系结构遍历的执行状态机。
在图33中表示了数据阻塞例子中的输入状态标志的状态转移。如上所述,无论何时用于配置的所有输入状态标志均被置位,即调度该配置以便执行。在执行过程中,生成到给定的输入标记空间的新X值将重写旧值。图33中表示的示例性事件序列如下进行:
1.图的启动条件,其显示位于“初始”块下方的标志,示出生成配置准备就绪以便执行,因为它的屏障标志和输入标志都被置位,分别指示循环不忙,并且新数据已经放入到CAM中以便检索。
2.配置生成配置以便执行,并且清空它的两个输入状态标志。该配置为循环创建了X值以便处理,以及每个X的种子值。因为生成配置生成了完成的操作数集合{种子值,X值},每个X值将运行通过循环评估。当生成配置耗尽了来自于CAM中的所有的启动输入时,它对更新配置的两个输入状态标志进行置位,即种子标志和X标志。最终的状态在状态表的“生成配置之后”列中显示。
3.因为更新配置的两个输入状态标志都被置位,接下来它将执行且其输入状态标志将被清除。更新配置将计算更新后的X值,该值将被三种相关的配置使用:它自身、测试配置和下一配置。在耗尽了来自输入标记空间中的所有完成的操作数集合以后,它对所有三种相关配置的“X标志”输入状态标志置位。
4.接着加载测试配置,因为现在它所有的输入状态标志均被置位。其输入状态标志立刻被清除。该配置将所有的X值与容许规范相比较,然后产生在逐个值的基础上指示循环应继续还是结束的种子标记。如果给定的X值不够接近,则将生成继续种子,这将与在更新配置的输入标记空间中匹配X值成对。如果给定的X值足够接近,将生成停止种子,这将被与在下一配置中匹配X值成对。当测试了所有的X值时,那么将更新相关的执行记录中的一条。如果任何X值继续迭代,那么更新配置执行记录的种子标志将被置位。否则,下一配置执行记录的种子标志将被置位。因此,将仅仅允许继续一条或另一条执行路径。
5.在这个例子中,迭代将继续N次,每次重新调用更新配置直到每个X值都处于所允许的容许范围内。在最后一次迭代时,当所有的X值都处于容许范围中时,下一配置的种子标志被置位,且将更新配置的种子标志保持清除。
6.因此调度下一配置用于配置,并且它立即清除它的输入状态标志。X值继续通过计算的下一阶段。然而,由于在更新配置和测试配置的输入处存在一些未完成的操作数集合,仍需进行清除。这些当下一配置完成时自动被删除。因为现在已经对while循环清除了无关的数据,下一配置也对生成配置的屏障标志置位,有效地起动它来接收新的输入集。
这种机制允许CAM体系结构保证数据借助迭代运算符和其它分支结构以完成的集合流过图像。阻塞操作数实质上是通过检测条件运算符种子值的生成,然后只为应被允许继续的分支对输入状态标志置位而工作的。各个数据值的种子可能自身沿条件分支适当地被生成,它们将沿着每条弧完成操作数集合,使得操作数集合机制可以用于仅检索和处理所需的那些数据值。
注意到当X值落在容许范围内时,不必产生各个停止种子。在这样的情况中,使用下一配置种子标志来阻塞执行的继续,直到所有的X值都已经通过(fallthrough)了循环,这样已经足够了。为了清楚地说明,每个操作数的种子都被包含在其中,尽管实际中移除这样的弧将减少程序的带宽需求。
转向高速缓存和配置调度考虑,为了保存片外带宽,期望试图最大地利用已经被移到片上的数据。在控制驱动体系结构中,高速缓存经由最近最少使用高速缓存策略即通过将最近访问过那些数据尽可能长时间地保持在芯片上来达到这样的目的的;通常仅在需要检索更新的数据,且没有其它空闲高速缓存可用时,才从片上高速缓存中驱逐数据。此时,常规高速缓存管理器将寻找闲置时间最长的数据,并且将它们发送到片外送往主存储器。
在CAM体系结构中,硬件具有这样的优势:来自数据流图的提示向其告知什么数据将由任何给定的配置需要。由于配置需要预先指定它的输入标记空间,硬件可以精确地知道它需要什么数据(与必须处理控制驱动程序的近似随机数访问模式不同)。利用这种信息可在多方面体现优势。例如,当配置完成时,执行记录向硬件告知关于何种配置正在等待以消费刚刚产生的数据。然后有可能调度那些相关配置中的一个来立即消费新的数据,尽管数据仍处于片上存储器中。
而且,为了对某些配置保证片上数据的存在,有可能分析数据流图。例如,在图34的代表性图中,有可能要为优化作一些预测调度。配置控制器2420(图24)具有调度配置A或者配置C的选择,因为两个配置都应被放置在执行队列2424中。然而,一种依赖关系进一步延伸到图的下方,可以看出除了配置B所需的来自配置A中的数据以外,配置B已经准备就绪。另一方面,配置D将仍在等待数据,即使配置C将要立即执行。选择调度配置A而不是配置C,具有期望的结果:将生成配置A的输出,并且立即允许配置B执行。因为配置A刚刚完成,很可能其至少某些示出仍然存在于片上CAM高速缓存306(图3)中,省去了存储器***向片外存储器308检索它们。如果相反,在配置A之前调度配置C来执行,则配置C的输出将在没有立即消费者的情况下被生成,由此更有可能需要将它们从移动到片外存储器308。此外,在配置C之后调度的无论何种配置然后将潜在地需要从片外主存308将其所有输入带回。
在这种情况下,非常明显地,调度配置A是更有利的,由此配置B立刻准备好被执行,有可能还具有使片上数据等待它的优势。使用这种类型的预测调度,可以改进节约节省和因此的执行效率。如果程序编译器具有体系结构调度策略和顺序的知识,则这可在一定程度上由程序编译器预先完成。引导体系结构的执行模式可能同安排执行记录中列出依赖关系的顺序一样简单。这种静态优化只要数据到达模式预知即可起作用。
在数据到达模式未知的情况下,尤其在条件执行的情况下,硬件仍可执行一些有用的分析。这可能与观察哪些标记空间目前位于片上高速缓存中并对使用该数据的配置给出执行偏好一样直接。可以更复杂,比如在运行时对数据流图进行动态分析,期望找到最佳执行路径。尽管动态分析的一个更有限的版本可能会有用,但是动态分析的完全实现可能是一个特别复杂的任务。这样的实现可以基于数据流图的执行记录中的“双亲”指针。
递归是另一个数据流计算机的概念,它通常与图像自身的动态生长和折叠相当。在固有的函数编程体系结构中创建堆栈的等效物同样是一个问题。一般,相同的问题通常在稍小一些的范围上对函数调用发生。
函数调用通常由CAM体系结构处理,通过当需要函数调用时,将函数的返回标记作为操作数与函数参数数据一起放置在函数的输入标记空间内。直到函数的输出被计算出来之后,返回标记才穿过函数调用。以返回标记对输出数据加标签,函数调用结束。将返回标记设计成以在调用程序之后落回到配置的输入标记空间,并且调用完成。函数调用因此是相当直截了当的,并且这种机制同样足够处理尾递归,因为它本质上相当于一个带有嵌入式函数调用的while循环。
通过操纵标记使得它们将落回到其递归双亲的输入标记空间来处理真递归。为此,将递归函数分为两半,递归前部分和递归后部分。直到递归调用本身时的所有内容都位于递归前部分中。在执行模式方面,进行相同的划分。首先,执行所有的递归调用,直到命中终止条件。每个都是执行到并且包括递归调用本身。当终止条件命中时,所有的递归前调用都已经结束执行,于是每个函数调用的第二部分以逆向调用顺序被执行以结束函数评估。
图35A和35B提供了过程函数f(x)的递归和子图调用的概念上的范例表述,该函数可用来递归计算特定个数的Fibonacci值,如下代码所示:
int f(int x){
if(x<2)
return x;
else
return f(x-2)+f(x-1);
}
注意到在图35A和35B中,Xij等于X在递归调用j上的实例i的值;并且实线代表立即结果,而虚线表述延迟结果。图35A和35B显示了数据流图递归调用的调用树,同时图36表示分别用于递归前和递归后调用的标记的格式。
如图36所示,递归前调用操作数集合包括两个操作数,即返回标记和当前X值。将标记本身分为四个域,包括用于指定所属的标记空间的公共标记前缀、对单个X值共享的实例值、用于为相同的X值区分分离的递归调用的迭代值j以及指示这是操作数集合中的第一还是第二操作数的数据或操作数编号。实质上,(例如递增地)操作i、j和k的值以保持处于正确的标记空间中,并防止在该标记空间内发生冲突。注意到在这个例子中,为标记仅使用了四个半字节;但实际上,为避免冲突可能有必要使用更宽的标记空间。
递归后调用操作数集合包括四个操作数,即返回标记、部分结果操作数(在本例中未使用)、f(X-2)的值和f(X-1)的值。也将这些集合的标记域分为相同的各个域,除了所使用的标记前缀使这些标记落入图的递归后部分的输入标记空间中,且存在四个不同的操作数位置指示符值。
返回图35A,作为迭代运算的例子,将输入值放入递归前部分的输入标记空间,并对其调度以便执行。将输入操作数中j迭代的值(图36所示)置为0。递归前部分开始从CAM 310读入完成的操作数集合。对其读取的每一个集合,它将检查终止条件是否满足。如果条件满足,则发出带有“返回标记”的适当的值作为它的标记值,并且该递归调用结束。否则,该调用未命中终止条件,该过程继续。这样,由于终止条件为x是否小于2,因此输入值1或0将结束,而输入值2或以上将继续。下面的例子使用f(3),并且也参考图37-44进行描述。
当继续时,创建三个新的操作数集合,其中两个用于新的递归调用f(X-2)和f(X-1),另一个用于该调用的递归后代码。用于递归后代码的操作数集合将包括向其传送的同一“返回标记”、递归前代码计算的任何部分结果、以及与两个未解决的递归调用相对应的两个未知(将来)值。这些未知值不能被立即填入,并且它们将在两个递归调用完成后获解。用于该操作数集合的标记将落入递归后代码的输入标记空间,表示为示意图中的Y标记前缀。一旦发出用于新操作数集合的标记之后,k参数(图36)将递增。
对于两个新递归调用中的每个调用来说,发出从上落入正确未知值槽(slot)中的返回标记,以及更新后的函数参数值。除了每一个的j值将递增一次之外,用于这两个新调用的标记落回到递归前代码的输入标记空间内。由于它们位于同一输入标记空间内,将由同一递归前配置将这些标记读回,并且随后被处理为新的函数调用。
当递归前代码耗尽其输入标记空间内的所有操作数集合时,每个初始的X值应该已经命中了它们各自的终止条件,尽管这些函数的值仍然未解。唯一可以求解的函数值是那些在没有递归调用的立即终止的函数。此时,配制递归后代码以便执行。
递归后代码开始向它的输入标记空间检索完成的操作数集合。首先,在它的输入标记空间中应当有很多未完成的操作数集合,并且可能有一个与递归调用相对应的完成的集合,其中孩子调用均命中终止条件。当检索到完成的操作数集合时,将部分结果f(X-2)和f(X-1)的值相加以形成一结果。然后,使用作为操作数传入的相关联的“结果标记”将该结果随后写回到CAM。这个动作将完成函数的评估,潜在地完成CAM中另一个操作数集合,这将触发另一个函数评估的完成,等等。递归后代码将继续执行直到从CAM中耗尽了所有完成的操作数集合。当耗尽了所有的操作数集合时,将已经评估了所有的递归调用。
这个过程已经在一系列的CAM的快照中被进一步描述,如图37-44所示。该例子评估了其中对f(3)进行了单个调用的情况,这与上面的调用图中所描述的例子相匹配。在这个例子中,递归前代码的输入标记空间具有公共前缀0xA000,
递归后代码具有公共前缀0xB000,输出或最终返回标记空间为0xC000。这个算法起始于初始时间T1,此时调用程序将返回标记值(在此例中为0xC000)和X值(3)写入到递归前代码的输入标记空间(0xA000)中,如图37所示。
加载递归前配置,且它仅读入它的输入标记空间(0xA00)中完成的操作数集合。使用自变量3,递归前代码未命中终止条件,所以它创建三个新的操作数集合。第一个集合用于递归后代码,因此并与返回标记和部分结果域两者一起被写入0xB000的标记空间,对于这个例子,该部分结果域为0。如图38所示,在该时间T2时,也通过将标记和f(X-2)和f(X-1)的操作数写出到标记0xA010和0xA020来创建另两个操作数集合。注意到与这些相关联的返回标记被设计成完成来自新创建的递归后操作数集合缺少的操作数。
递归前代码继续向它的输入标记空间检索完成的操作数集合,并且拉出0xA010标记。此次终止条件命中,因为X=1,由此计算出适当的返回值(在此例中恰好为1),并且将其输出到所指定的返回标记0xB002,这将其放入递归后操作数集合的缺少操作数的位置之一中。图39中显示了该第二个递归前操作即快照时刻T3。
在T4时刻,递归前代码然后检索0xA020行。此行还没有满足终止条件X<2,这时同样产生三个新的操作数集合,一个递归后集合和两个新的递归前集合,分别写入到0xB010、0xA030和0xA040。图40显示了这种状态。
此后,递归前代码取回0xA030,确定X=0的值满足终止条件,且以返回标记值0xB012来写出该值,它被填入0xB010递归后操作数集合的第一缺少位置中。图41中显示了快照时刻T5的状态。
在递归例子的T6时刻,递归前代码从它的输入标记空间取回了0xA040操作数集合,发现X=1满足终止条件,并以标记值0xB013输出值1,完成0xB010操作数集合。图42显示了这种状态。
递归前输入标记空间现在为空,于是配置终止。然而,递归后代码有操作数,因此调度并加载递归后代码。当在递归后代码中搜索完成的操作数集合时,在它的输入标记空间中发现0xB010集合。按照代码,它将f(X-2)+f(X-1)相加得到1,并且以其返回标记0xB003写出。这个动作完成了0xB000操作数集合,如图43中快照时刻T7所示。
因为现在完成了操作数集合0xB000,递归后代码检索该操作数就和,并执行f(X-2)+f(X-1)=1+1=2。将其写入它的返回标记0xC000中,这完成了递归评估,如图44中快照时刻T8所示。
如可见,使用这种方法,为执行递归配置中不存在切换和清空(trash)。递归前部分被加载并执行一次,递归后部分被加载并执行一次。这是有益的,因为执行配置操作的开销应尽可能避免。相反的,根据本发明,使用CAM空间来存储中间结果,直到那些结果可以被完全评估。相当有可能的是,需要一个以上的配置来实现递归前或递归后代码,但在递归前代码的执行结束和递归后代码执行开始之间存在明显的裂口。
由于使用CAM来存储结果,递归的深度受限于CAM的大小以及标记中j或k迭代域的宽度。对于这个特定的例子,j的增长速度是k的两倍,所以它成为限制因素。如果j域“倾翻”,问题(冲突)将跟着发生。
递归计算不会受到控制驱动***中存在的子例程调用和返回的开销的影响。此外,标记的结构和分离允许以并行和/或流水线的方式评估众多不同的X值。例如,有可能使两个或两个以上的递归前代码的实例并行操作,对递归后代码同样也是。而且,可以观察到,对于任一单个X值,有必要向CAM返回值然后并且在执行可继续之前检索这些值。这可能增加计算的等待时间,然而如果存在一个以上的初始X值正在进行同时评估,这可能通过流水化来隐藏。
转而考虑常量,数据流图中的常量提供有意义的问题。通常,使用常量通过配置的每个操作数集合需要使该常量可用。并不期望复制常量作为每个操作数集合的一部分,因为这将消耗片上和片外带宽、资源和时钟周期。例如,如果创建向流过它的每个操作数加上10的一个节点,希望避免必须为每个匹配操作数通过体系结构来操作值10。此外,常量可能需要在程序的控制下进行周期性的改变。这些问题的解决方案取决于所使用的输入标记空间模型。
使用固定前缀输入标记空间模型,一个解决方案是向CAM体系结构中的功能单元提供一组影子值寄存器。当功能单元检测到新的操作数正启动时,功能单元可以从影子寄存器加载常量的值并在该操作数持续时间内与这些值工作。当新的操作数被启动时,再次加载影子寄存器。对常量的更新可能通过在使用它们的配置头部的特定域中存储常量。在配置时,从这些域加载常量,且常量的更新被写入到这些域中。
如果使用函数输入标记空间模型,则情况得到改善。在这种情况下,向要使用的常量给定由配置中的所有操作数集合所引用的单个固定标记。每个配置引用同一数据,这意味着将仅占用单个高速缓存行且不需要从片外读取,节约了片上资源和片外带宽。用于改变常量的更新机制为:简单地将新值写入到该固定标记位置。
同样考虑数字串行算术,因为值被表示为以串行方式通过机器的数字串。通过观察到数字串行计算维护节点中算术状态的某些概念,可以应用相同的解决方案。这种状态可被认为是需要被制成表格的算术余数,并且可能由表示节点当前值的有理式的两个或更多的整数表示。
对固定前缀输入标记空间模型,当新的输入数字串开始时,可以使用影子寄存器来预加载节点的内部状态。以此方式,所需常量被预加载并将作为算术过程的一部分被发出。根据数字串行实现的结构,该方法也可用于乘以或除以常量,以及加上或减去常量。输入值的任意线性组合也是可能的。
如果函数输入标记空间模型用于数字串行算术,则解决方案是将常量分配到固定标记位置并且如任何其它操作数那样读取该常量。然而,能够执行一些这里描述的常量缩放或偏移量操作可能仍然是有益的,并且由于这样的原因,可能期望包括影子寄存器。
硬件构造
转而考虑如何在真实的硬件中构建这些构造的各种实际的例子,在一个实施例中,由于片上存储器和片外处理器之间的速度差异,以主要考虑保存芯片带宽来设计***的外部存储器结构。在时钟对时钟的基础上,相比于片外芯片,可以快得多地在片上访问数据(举例来说,至少快四倍)即使假设外部数据的确切位置是已知的;此外,片上存储器访问时间和片外访问时间之间的差趋向于增长。通常,对于带有标记的数据***,因为可能是典型的控制驱动处理器,所以预先不知道数据的确切位置,因此激化了问题。如果标记精确对应于物理RAM地址,那么可以帮助解决问题,但是这限制了标记的大小。
应注意到,片上存储器和片外处理器之间的速度上的差异,可以是类似于主存储器与硬盘驱动器之间的速度差异。因此,可应用软件所使用来处理大型数据库的很多外部存储器算法。
通常,在外部存储器操作的意义上,由CAM体系结构使用的数据结构需要在线,由此当维持运行时CAM的完整性的同时,可以***和删除(实质上类似于数据库)各个数据项。为令牌匹配起见,数据结构也需要支持对CAM中特定条目的快速搜索。当从配置中写出新的数据值的时候,其相关联的标记需要被发送给CAM,并且被存储在正确的位置中以便于稍后的快速检索。
将CAM一般配置成支持基于公共标记前缀的流动范围查询。这将在配置开始运行,并且请求完成的操作数集合作为输入的时候需要。尽管其它的数据流体系结构使用了散列作为变量标记匹配策略,但散列也不是特别顺应该需求。
因为以硬件实现结构,数据结构需要相对易于维护,因为维护将由芯片上的状态机来执行。此外,易于维护通常意味着用于内务处理的较少的存储器访问,这将有助于减少侵入片外带宽上的开销的数目。这个约束以一些浪费的外部RAM为代价,因为可以观察到RAM大小继续跟随指数级增长趋势。必须观察和供应现代同步RAM的特定属性。比如,能够以八个字的持续突发访问数据将有速度收益。而且,在RAM库之间进行移动性能有损失,但是在同一库内移动是几乎没有损失的。
这些约束导致选择多层TRIE作为一个适合的数据结构。为了支持这个,在一个实施例中,标记如图45所示进行细分,显示了标记的外部存储器分区。在图45中,使用域来对表分层结构中的指针进行索引,以访问所感兴趣的标记/数据。如图46所表示的,在存储器中,这显现为外部存储器数据结构分层结构。注意到在此处所示的外部存储器组织仅仅是有效实现的一个示例概念,并且其它组织和/或实现是可行的。
使用标记前缀来索引到跳转表内,该表可具有图47的外部存储器标记空间跳转表中所示的格式。该表包括用于每个标记空间的单独的TRIE的基本地址。如果指针为NULL,那么这个标记空间当前并不在使用。每个TRIE的根采用图48中所示的外部存储器高位索引(high index)表形式。由以上在标记中所示的高位空间域来对该表进行索引,以得到指向另外一个表的指针,该另一个表基本上是相同的,如图49的外部存储器低位索引(low index)表所示。接着由上述低位空间域来对外部存储器低位索引表进行索引,并且给出指向页面表的指针。
然而,页面表是不同的。由来自标记的页面域来索引页面表,并且每个条目包括指向真实数据值的页面的指针,但是它也包括用于目标数据表中所包含的每个操作数集合中的每个操作数的状态位。图50,连续到图51,显示了带有每个页指针128个操作数集合的外部存储器页表,以及带有操作数集合状态位的16个页指针。
将页表分成16个区域(页面指针0到15),其中的每一个包括指向相关联数据页的指针,以及用于每个操作数的存在标志。如果数据页是空的,那么可以将该指针置为NULL。如所示的,对每个操作数集合存在一个字节的存在信息,并且将每个字节的一个位与该集合中八个可能的操作数之一相关联。
如图52中所表示的,数据页本身概念上显现为具有128个操作数集合的数据页,每个操作数集合有8个操作数。因为在***中,为数据的每个字维护存在标志,存储这些标志需要深思熟虑。在典型的使用模式中,CAM控制器2420(图24)或者可以试图找到特定的条目并写入新值,在这种情况下,需要对适当的存在位置位。或者,CAM控制器将执行读操作,其中它可以期望仅拉出完成的操作数集合。尤其在读情景中,将数据页存在位存储在分层结构中至少比实际数据本身高一个层次上是有利的,因为可以使用该信息来引导以流化流水线的方式从数据页本身进行将来的突发读取。此外,可能碰巧存在完全由未完成的操作数集合构成的页,而在该层次上访问存在位将允许整个页面被跳过,同时避免浪费的RAM库交换的可能。注意到每个页表条目按设计包括空的空间,预料到随着时间流逝,可能需要更多的标志。
在初始标记空间跳转表以后,其它子表是相同大小的,在此处示为正常4K字节。具有相同大小的表的优势在于简化了存储器分配方案,且不会存在如果在分层结构的每个层次上使用不同大小的表而可能产生的碎片问题。这种方法的不利之处在于,对稀疏标记集合,可能会浪费空间。比如,如果创建标记空间,使得仅占用任何给定数据页的一个操作数集合。如所示的,存储器分配器可以维护可用页的单向链列,并且不加区别地将其少量发放给分层结构的任何层次。当然,从同一RAM库中在给定的TRIE存储器内分配所有的节点有优势,因为可以避免库交换损失。
这样的设计也适用于突发RAM体系结构,因为相关数据被放置在连续的存储器位置中。比如,八个操作数集合的所有操作数可以使用四个读取的突发读取从数据页中读入。并且,数据页的所有存在位可使用两个八个读取的突发读取从页表中读取。
注意到数据结构设计退化来支持小于八个操作数的操作数集合(尽管在这个例子中使用了八个)。存在检测位域,以及数据页本身,通过改为这些域的较窄的解释,可以很容易地将其细分来支持每个操作数集合8、4、2或者1个操作数。同样地,可以很容易适于大小为7、6、5或者3的操作数集合而浪费很小或者没有。所需的精确大小可以在运行时由配置数据指定。
为了避免当标记空间读取操作扫描数据结构以为了供给配置的时候、不得不重新读取较高层次的表,在片上高速缓存一些较高层次的表是有利的。尽管没有要求特定的大小,但一般4k的页面大小是适宜的。在本实现中,尽管有可能高速缓存活动标记空间的指针,但是主标记空间跳转表太大了以至于不能高速缓存在片上。
从前面的详细描述中可以看出,为并行计算提供了一种改进的体系结构。该体系结构提供固定或者基于函数的标记来便于无序处理,提供配置(可能可重配置的)来执行数据流图,并且允许实现多个计算概念,包括条件执行,(举例来说,if-then语句和while循环)、函数调用和递归。
尽管易于对本发明进行各种修改、和替换构造,但其某些示出的实施例在附图中显示并在以上详细描述了。然而,应当理解,没有旨在将本发明限与所公开的特定形式,相反,旨在覆盖落入本发明的精神和范围内的所有修改、替换构造以及等效方式。
Claims (15)
1.在计算环境中,一种方法包括:
从内容可寻址存储器发送包括操作数的第一操作数集合的数据,所述内容可寻址存储器维护与标记关联的数据,从所述内容可寻址存储器发送到计算硬件的所述数据包括条件运算符;
从所述计算硬件接收提供对应于所述输入数据的条件结果的输出数据;
基于所述条件结果生成种子标记;
如果所述条件结果为真,则将所述种子标记与第二操作数集合相关联,或者如果所述条件结果为假,则将所述种子标记与第三操作数集合相关联,使得仅所述第二或者仅所述第三操作数集合是完成的操作数集合;以及
仅将所述完成的操作数集合发送到所述计算硬件中。
2.如权利要求1所述的方法,其中所述条件运算符对应于if/then语句,并且其中基于条件结果生成种子标记使所述完成的操作数集合被发送给所述计算硬件中的两个分支中的一个。
3.如权利要求1所述的方法,其中所述条件运算符对应于while循环,并且其中基于条件结果生成种子标记使所述完成的操作数集合处于一个标记空间或者另外一个标记空间中,每个标记空间对应于所述计算硬件中的一位置,使得所述完成的操作数集合被发送给所述计算硬件的两个位置中的一个。
4.如权利要求1所述的方法,还包括:评估任何标记的操作数集合是否是完成的,以便沿所述计算硬件中的特定路径向下发送,并且如果未完成,则跳过对应于所述特定路径的配置。
5.如权利要求1所述的方法,还包括丢弃未完成的操作数集合。
6.至少一种具有计算机可执行指令的计算机可读介质,当所述指令被执行的时候执行如权利要求1所述的方法。
7.在计算环境中,一种方法包括:
安排函数参数数据和返回标记作为进入函数的输入标记空间的操作数;
在所述函数中传送所述返回标记,直到输出数据由函数计算出来;以及
以所述返回标记来标记所述输出数据。
8.如权利要求7的方法,其中所述返回标记对应于跟随调用所述函数的第一配置之后的第二配置的输入标记空间。
9.如权利要求7的方法,其中所述函数被递归调用,包括将所述函数划分成递归前部分和递归后部分,执行所述递归前部分中的递归调用直到达到终止条件,并且以逆调用顺序执行所述递归后部分以完成所述函数的评估。
10.如权利要求7所述的方法,其中对于每个递归函数调用,所述返回标记对应于递归双亲调用程序的输入标记空间。
11.至少一种具有计算机可执行指令的计算机可读介质,当所述指令被执行的时候执行如权利要求1所述的方法。
12.在计算环境中,一种***包括:
计算硬件;
内容可寻址存储器机构,包括当一个或多个操作数集合被所述内容可寻址存储器认为是完成的时候、将其发送给所述计算硬件的机构;
在所述计算硬件中加载的配置,所述配置包括作为条件运算符操作的至少一个元素;
所述条件运算符,它接收第一操作数集合、针对条件评估所述第一操作数集合、生成包括指示针对所述条件的评估结果的信息的结果操作数、以及返回给所述内容可寻址存储器结构;以及
所述内容可寻址存储器,它在第二操作数集合中包括所述结果操作数。
13.如权利要求12所述的***,其中所述条件运算符对应于if/then语句,并且其中所述结果操作数包括完成所述第二操作数集合的真种子令牌或者假种子令牌。
14.如权利要求12所述的***,其中所述条件运算符对应于while循环,并且其中所述结果操作数包括完成所述第二操作数集合的继续种子令牌或者结束种子令牌。
15.如权利要求12所述的***,还包括用于丢弃未完成的操作数集合的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/143,308 | 2005-06-01 | ||
US11/143,308 US7707387B2 (en) | 2005-06-01 | 2005-06-01 | Conditional execution via content addressable memory and parallel computing execution model |
PCT/US2006/021576 WO2006130861A2 (en) | 2005-06-01 | 2006-06-01 | Conditional execution via content addressable memory and parallel computing execution model |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101189573A true CN101189573A (zh) | 2008-05-28 |
CN101189573B CN101189573B (zh) | 2012-07-18 |
Family
ID=37482366
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006800194763A Active CN101189573B (zh) | 2005-06-01 | 2006-06-01 | 通过内容可寻址存储器和并行计算执行模型的条件执行的方法和*** |
Country Status (6)
Country | Link |
---|---|
US (1) | US7707387B2 (zh) |
EP (1) | EP1891510B1 (zh) |
KR (1) | KR101247072B1 (zh) |
CN (1) | CN101189573B (zh) |
AT (1) | ATE510254T1 (zh) |
WO (1) | WO2006130861A2 (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103853526A (zh) * | 2014-02-20 | 2014-06-11 | 清华大学 | 可重构处理器及可重构处理器的条件执行方法 |
CN104077170A (zh) * | 2013-03-27 | 2014-10-01 | 株式会社特博睿 | 平台相关模型编译器优化装置及方法 |
CN104126171A (zh) * | 2011-12-27 | 2014-10-29 | 英特尔公司 | 用于基于两个源写掩码寄存器生成依赖向量的***、装置和方法 |
CN104699739A (zh) * | 2013-12-06 | 2015-06-10 | 国际商业机器公司 | 针对文件不同版本生成内容可寻址存储签名的方法和*** |
WO2015123848A1 (zh) * | 2014-02-20 | 2015-08-27 | 清华大学 | 可重构处理器及可重构处理器的条件执行方法 |
CN106648452A (zh) * | 2015-11-02 | 2017-05-10 | 爱思开海力士有限公司 | 存储器***及其操作方法 |
CN106796615A (zh) * | 2014-09-15 | 2017-05-31 | 欧特克公司 | 使用自下而上方法的并行处理 |
CN107846597A (zh) * | 2016-09-20 | 2018-03-27 | 上海澜至半导体有限公司 | 用于视频解码器的数据缓存方法和装置 |
CN107894957A (zh) * | 2017-11-14 | 2018-04-10 | 河南鼎视智能科技有限公司 | 面向卷积神经网络的存储器数据访问与插零方法及装置 |
CN108351849A (zh) * | 2015-10-23 | 2018-07-31 | 高通股份有限公司 | 具有经掩蔽写入的射频前端设备 |
CN108681465A (zh) * | 2011-12-22 | 2018-10-19 | 英特尔公司 | 用于产生整数序列的处理器、处理器核及*** |
CN109189994A (zh) * | 2018-06-27 | 2019-01-11 | 北京中科睿芯科技有限公司 | 一种面向图计算应用的cam结构存储*** |
CN109710226A (zh) * | 2018-09-06 | 2019-05-03 | 天翼电子商务有限公司 | 一种编译器后端指令选择学习***及具有该***的编译器和指令选择方法 |
US10372678B2 (en) | 2013-12-06 | 2019-08-06 | International Business Machines Corporation | Files having unallocated portions within content addressable storage |
CN110457340A (zh) * | 2018-05-07 | 2019-11-15 | 吕纪竹 | 一种实时寻找大数据自身重复规律的方法 |
CN111651200A (zh) * | 2016-04-26 | 2020-09-11 | 中科寒武纪科技股份有限公司 | 一种用于执行向量超越函数运算的装置和方法 |
CN112771498A (zh) * | 2018-07-05 | 2021-05-07 | 米西克有限公司 | 用于实施智能处理计算架构的***和方法 |
CN113671924A (zh) * | 2021-10-25 | 2021-11-19 | 西安热工研究院有限公司 | Dcs实时值置值方法和***、设备及存储介质 |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7908259B2 (en) * | 2006-08-25 | 2011-03-15 | Teradata Us, Inc. | Hardware accelerated reconfigurable processor for accelerating database operations and queries |
US7774189B2 (en) * | 2006-12-01 | 2010-08-10 | International Business Machines Corporation | System and method for simulating data flow using dataflow computing system |
US7860863B2 (en) * | 2007-09-05 | 2010-12-28 | International Business Machines Corporation | Optimization model for processing hierarchical data in stream systems |
US7941460B2 (en) * | 2007-09-05 | 2011-05-10 | International Business Machines Corporation | Compilation model for processing hierarchical data in stream systems |
US8601457B1 (en) * | 2008-01-31 | 2013-12-03 | The Mathworks, Inc. | Checking for access problems with data stores |
US8161380B2 (en) * | 2008-06-26 | 2012-04-17 | International Business Machines Corporation | Pipeline optimization based on polymorphic schema knowledge |
GB2474250B (en) * | 2009-10-07 | 2015-05-06 | Advanced Risc Mach Ltd | Video reference frame retrieval |
US20120331153A1 (en) * | 2011-06-22 | 2012-12-27 | International Business Machines Corporation | Establishing A Data Communications Connection Between A Lightweight Kernel In A Compute Node Of A Parallel Computer And An Input-Output ('I/O') Node Of The Parallel Computer |
US20140068173A1 (en) * | 2012-08-28 | 2014-03-06 | Laurence H. Cooke | Content addressable memory scheduling |
KR101975534B1 (ko) | 2012-09-11 | 2019-05-07 | 삼성전자주식회사 | 연산기능을 갖는 반도체 메모리 장치 |
US10235176B2 (en) | 2015-12-17 | 2019-03-19 | The Charles Stark Draper Laboratory, Inc. | Techniques for metadata processing |
US10936713B2 (en) * | 2015-12-17 | 2021-03-02 | The Charles Stark Draper Laboratory, Inc. | Techniques for metadata processing |
US20210026934A1 (en) | 2018-02-02 | 2021-01-28 | Dover Microsystems, Inc. | Systems and methods for policy linking and/or loading for secure initialization |
US11150910B2 (en) | 2018-02-02 | 2021-10-19 | The Charles Stark Draper Laboratory, Inc. | Systems and methods for policy execution processing |
US10635397B2 (en) * | 2018-03-08 | 2020-04-28 | Gsi Technology Inc. | System and method for long addition and long multiplication in associative memory |
US11797398B2 (en) | 2018-04-30 | 2023-10-24 | Dover Microsystems, Inc. | Systems and methods for checking safety properties |
CN108829880B (zh) * | 2018-06-27 | 2020-12-01 | 烽火通信科技股份有限公司 | 一种光网络终端设备的配置管理的方法 |
TW202022678A (zh) | 2018-11-06 | 2020-06-16 | 美商多佛微系統公司 | 用於停滯主處理器的系統和方法 |
WO2020132012A1 (en) | 2018-12-18 | 2020-06-25 | Dover Microsystems, Inc. | Systems and methods for data lifecycle protection |
US10824370B2 (en) * | 2019-02-07 | 2020-11-03 | quadric.io, Inc. | Systems and methods for implementing random access memory in a flow-based machine perception and dense algorithm integrated circuit based on computing and coalescing of indices |
US20220092700A1 (en) * | 2020-09-22 | 2022-03-24 | Briza, Inc. | Evaluation response system and method |
Family Cites Families (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6126155A (ja) | 1984-07-06 | 1986-02-05 | アムペックス コーポレーシヨン | バツクアツプデータ記憶方法および装置 |
US4972314A (en) | 1985-05-20 | 1990-11-20 | Hughes Aircraft Company | Data flow signal processor method and apparatus |
JPH03500461A (ja) | 1988-07-22 | 1991-01-31 | アメリカ合衆国 | データ駆動式計算用のデータ流れ装置 |
DE68926783T2 (de) | 1988-10-07 | 1996-11-28 | Martin Marietta Corp | Paralleler datenprozessor |
US5226126A (en) | 1989-02-24 | 1993-07-06 | Nexgen Microsystems | Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags |
US5835740A (en) | 1992-06-30 | 1998-11-10 | Discovision Associates | Data pipeline system and data encoding method |
DE69427265T2 (de) | 1993-10-29 | 2002-05-02 | Advanced Micro Devices, Inc. | Superskalarbefehlsdekoder |
US6711665B1 (en) | 1993-12-12 | 2004-03-23 | Neomagic Israel Ltd. | Associative processor |
US5694574A (en) | 1994-01-04 | 1997-12-02 | Intel Corporation | Method and apparatus for performing load operations in a computer system |
US5696937A (en) | 1995-04-28 | 1997-12-09 | Unisys Corporation | Cache controller utilizing a state machine for controlling invalidations in a network with dual system busses |
JP3720094B2 (ja) | 1995-10-18 | 2005-11-24 | シャープ株式会社 | データ駆動型情報処理装置 |
US6041389A (en) | 1995-11-16 | 2000-03-21 | E Cirrus Logic, Inc. | Memory architecture using content addressable memory, and systems and methods using the same |
JPH1049369A (ja) | 1996-08-07 | 1998-02-20 | Ricoh Co Ltd | データ処理装置 |
US5819308A (en) | 1997-02-27 | 1998-10-06 | Industrial Technology Research Institute | Method for buffering and issuing instructions for use in high-performance superscalar microprocessors |
US6047233A (en) | 1997-04-25 | 2000-04-04 | Northrop Grumman Corporation | Display management method, system and article of manufacture for managing icons, tags and leader lines |
US6507898B1 (en) | 1997-04-30 | 2003-01-14 | Canon Kabushiki Kaisha | Reconfigurable data cache controller |
US6151658A (en) | 1998-01-16 | 2000-11-21 | Advanced Micro Devices, Inc. | Write-buffer FIFO architecture with random access snooping capability |
US6219834B1 (en) | 1998-05-15 | 2001-04-17 | International Business Machines Corporation | Extensible compiler and method |
US6205537B1 (en) | 1998-07-16 | 2001-03-20 | University Of Rochester | Mechanism for dynamically adapting the complexity of a microprocessor |
US6112283A (en) | 1998-08-06 | 2000-08-29 | Intel Corporation | Out-of-order snooping for multiprocessor computer systems |
US6311253B1 (en) | 1999-06-21 | 2001-10-30 | International Business Machines Corporation | Methods for caching cache tags |
US6553453B1 (en) | 1999-09-10 | 2003-04-22 | Sibercore Technologies, Inc. | Variable width content addressable memory device for searching variable width data |
US6934795B2 (en) | 1999-09-23 | 2005-08-23 | Netlogic Microsystems, Inc. | Content addressable memory with programmable word width and programmable priority |
US6526474B1 (en) | 1999-10-25 | 2003-02-25 | Cisco Technology, Inc. | Content addressable memory (CAM) with accesses to multiple CAM arrays used to generate result for various matching sizes |
US6687789B1 (en) | 2000-01-03 | 2004-02-03 | Advanced Micro Devices, Inc. | Cache which provides partial tags from non-predicted ways to direct search if way prediction misses |
US6505269B1 (en) | 2000-05-16 | 2003-01-07 | Cisco Technology, Inc. | Dynamic addressing mapping to eliminate memory resource contention in a symmetric multiprocessor system |
EP2226732A3 (de) | 2000-06-13 | 2016-04-06 | PACT XPP Technologies AG | Cachehierarchie für einen Multicore-Prozessor |
US20020112116A1 (en) | 2000-11-17 | 2002-08-15 | Nelson Mark Edward | Methods, systems, and computer program products for storing data in collections of tagged data pieces |
US20020126672A1 (en) | 2001-01-10 | 2002-09-12 | Nelson Chow | Method and apparatus for a flexible and reconfigurable packet classifier using content addressable memory |
US6643739B2 (en) | 2001-03-13 | 2003-11-04 | Koninklijke Philips Electronics N.V. | Cache way prediction based on instruction base register |
US6671791B1 (en) | 2001-06-15 | 2003-12-30 | Advanced Micro Devices, Inc. | Processor including a translation unit for selectively translating virtual addresses of different sizes using a plurality of paging tables and mapping mechanisms |
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 |
US6868476B2 (en) | 2001-08-27 | 2005-03-15 | Intel Corporation | Software controlled content addressable memory in a general purpose execution datapath |
US20030043800A1 (en) | 2001-08-30 | 2003-03-06 | Sonksen Bradley Stephen | Dynamic data item processing |
US6700809B1 (en) | 2002-02-01 | 2004-03-02 | Netlogic Microsystems, Inc. | Entry relocation in a content addressable memory device |
US7275163B2 (en) | 2002-02-28 | 2007-09-25 | The Directv Group, Inc. | Asynchronous configuration |
US6661686B1 (en) | 2002-03-29 | 2003-12-09 | Netlogic Microsystems, Inc. | Content addressable memory having dynamic match resolution |
US7043667B2 (en) | 2002-05-14 | 2006-05-09 | Intel Corporation | Debug information provided through tag space |
US7062601B2 (en) | 2002-06-28 | 2006-06-13 | Mosaid Technologies Incorporated | Method and apparatus for interconnecting content addressable memory devices |
US6775166B2 (en) | 2002-08-30 | 2004-08-10 | Mosaid Technologies, Inc. | Content addressable memory architecture |
FR2849228A1 (fr) | 2002-12-23 | 2004-06-25 | St Microelectronics Sa | Dispositif de transfert de donnees entre deux sous-systemes asynchrones disposant d'une memoire tampon |
US7187570B2 (en) | 2003-03-20 | 2007-03-06 | Stmicroelectronics Pvt. Ltd. | Content addressable memory architecture providing improved speed |
US6906938B2 (en) | 2003-08-15 | 2005-06-14 | Micron Technology, Inc. | CAM memory architecture and a method of forming and operating a device according to a CAM memory architecture |
-
2005
- 2005-06-01 US US11/143,308 patent/US7707387B2/en active Active
-
2006
- 2006-06-01 AT AT06772037T patent/ATE510254T1/de not_active IP Right Cessation
- 2006-06-01 CN CN2006800194763A patent/CN101189573B/zh active Active
- 2006-06-01 WO PCT/US2006/021576 patent/WO2006130861A2/en active Application Filing
- 2006-06-01 KR KR1020077028014A patent/KR101247072B1/ko active IP Right Grant
- 2006-06-01 EP EP06772037A patent/EP1891510B1/en active Active
Cited By (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108681465A (zh) * | 2011-12-22 | 2018-10-19 | 英特尔公司 | 用于产生整数序列的处理器、处理器核及*** |
CN104126171A (zh) * | 2011-12-27 | 2014-10-29 | 英特尔公司 | 用于基于两个源写掩码寄存器生成依赖向量的***、装置和方法 |
CN104126171B (zh) * | 2011-12-27 | 2018-08-07 | 英特尔公司 | 用于基于两个源写掩码寄存器生成依赖向量的***、装置和方法 |
CN104077170B (zh) * | 2013-03-27 | 2017-03-01 | 株式会社特迈数据 | 平台相关模型编译器优化装置及方法 |
CN104077170A (zh) * | 2013-03-27 | 2014-10-01 | 株式会社特博睿 | 平台相关模型编译器优化装置及方法 |
CN104699739A (zh) * | 2013-12-06 | 2015-06-10 | 国际商业机器公司 | 针对文件不同版本生成内容可寻址存储签名的方法和*** |
US11409703B2 (en) | 2013-12-06 | 2022-08-09 | International Business Machines Corporation | File versions within content addressable storage |
CN104699739B (zh) * | 2013-12-06 | 2018-02-16 | 国际商业机器公司 | 针对文件不同版本生成内容可寻址存储签名的方法和*** |
US11360938B2 (en) | 2013-12-06 | 2022-06-14 | International Business Machines Corporation | Files having unallocated portions within content addressable storage |
US10372679B2 (en) | 2013-12-06 | 2019-08-06 | International Business Machines Corporation | File versions within content addressable storage |
US10372678B2 (en) | 2013-12-06 | 2019-08-06 | International Business Machines Corporation | Files having unallocated portions within content addressable storage |
CN103853526B (zh) * | 2014-02-20 | 2017-02-15 | 清华大学 | 可重构处理器及可重构处理器的条件执行方法 |
CN103853526A (zh) * | 2014-02-20 | 2014-06-11 | 清华大学 | 可重构处理器及可重构处理器的条件执行方法 |
WO2015123848A1 (zh) * | 2014-02-20 | 2015-08-27 | 清华大学 | 可重构处理器及可重构处理器的条件执行方法 |
US10203960B2 (en) | 2014-02-20 | 2019-02-12 | Tsinghua University | Reconfigurable processor and conditional execution method for the same |
CN106796615A (zh) * | 2014-09-15 | 2017-05-31 | 欧特克公司 | 使用自下而上方法的并行处理 |
CN108351849A (zh) * | 2015-10-23 | 2018-07-31 | 高通股份有限公司 | 具有经掩蔽写入的射频前端设备 |
CN106648452A (zh) * | 2015-11-02 | 2017-05-10 | 爱思开海力士有限公司 | 存储器***及其操作方法 |
CN111651200A (zh) * | 2016-04-26 | 2020-09-11 | 中科寒武纪科技股份有限公司 | 一种用于执行向量超越函数运算的装置和方法 |
CN111651200B (zh) * | 2016-04-26 | 2023-09-26 | 中科寒武纪科技股份有限公司 | 一种用于执行向量超越函数运算的装置和方法 |
CN107846597A (zh) * | 2016-09-20 | 2018-03-27 | 上海澜至半导体有限公司 | 用于视频解码器的数据缓存方法和装置 |
CN107846597B (zh) * | 2016-09-20 | 2019-12-10 | 上海澜至半导体有限公司 | 用于视频解码器的数据缓存方法和装置 |
US10542276B2 (en) | 2016-09-20 | 2020-01-21 | Montage Lz Semiconductor (Shanghai) Co., Ltd. | Data caching method and apparatus for video decoder |
CN107894957B (zh) * | 2017-11-14 | 2020-09-01 | 河南鼎视智能科技有限公司 | 面向卷积神经网络的存储器数据访问与插零方法及装置 |
CN107894957A (zh) * | 2017-11-14 | 2018-04-10 | 河南鼎视智能科技有限公司 | 面向卷积神经网络的存储器数据访问与插零方法及装置 |
CN110457340A (zh) * | 2018-05-07 | 2019-11-15 | 吕纪竹 | 一种实时寻找大数据自身重复规律的方法 |
CN110457340B (zh) * | 2018-05-07 | 2024-04-09 | 吕纪竹 | 一种实时寻找大数据自身重复规律的方法 |
CN109189994B (zh) * | 2018-06-27 | 2021-11-09 | 北京中科睿芯科技集团有限公司 | 一种面向图计算应用的cam结构存储*** |
CN109189994A (zh) * | 2018-06-27 | 2019-01-11 | 北京中科睿芯科技有限公司 | 一种面向图计算应用的cam结构存储*** |
CN112771498A (zh) * | 2018-07-05 | 2021-05-07 | 米西克有限公司 | 用于实施智能处理计算架构的***和方法 |
CN109710226A (zh) * | 2018-09-06 | 2019-05-03 | 天翼电子商务有限公司 | 一种编译器后端指令选择学习***及具有该***的编译器和指令选择方法 |
CN113671924A (zh) * | 2021-10-25 | 2021-11-19 | 西安热工研究院有限公司 | Dcs实时值置值方法和***、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
ATE510254T1 (de) | 2011-06-15 |
US7707387B2 (en) | 2010-04-27 |
KR20080011682A (ko) | 2008-02-05 |
EP1891510A4 (en) | 2009-10-21 |
EP1891510B1 (en) | 2011-05-18 |
KR101247072B1 (ko) | 2013-03-25 |
WO2006130861A3 (en) | 2007-04-12 |
CN101189573B (zh) | 2012-07-18 |
EP1891510A2 (en) | 2008-02-27 |
US20060277392A1 (en) | 2006-12-07 |
WO2006130861A2 (en) | 2006-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101189573B (zh) | 通过内容可寻址存储器和并行计算执行模型的条件执行的方法和*** | |
US7793040B2 (en) | Content addressable memory architecture | |
US7856523B2 (en) | Random Access Memory (RAM) based Content Addressable Memory (CAM) management | |
US7451297B2 (en) | Computing system and method that determines current configuration dependent on operand input from another configuration | |
US9547830B2 (en) | Scalable, memory-efficient machine learning and prediction for ensembles of decision trees for homogeneous and heterogeneous datasets | |
US6615340B1 (en) | Extended operand management indicator structure and method | |
CN108027766A (zh) | 预取指令块 | |
CN109074261A (zh) | 用于乱序块isa处理器的增量调度器 | |
US20080250227A1 (en) | General Purpose Multiprocessor Programming Apparatus And Method | |
CN107810477A (zh) | 解码的指令的重复使用 | |
CN104040492A (zh) | 微处理器加速的代码优化器和依赖性重排序方法 | |
CN104040490A (zh) | 用于多引擎微处理器的加速的代码优化器 | |
CN108027770A (zh) | 用于数据流isa的密集读取编码 | |
Morrison | Condensed graphs: Unifying availability-driven, coercion-driven and control-driven computing | |
Rucker et al. | Revet: A language and compiler for dataflow threads | |
Cong et al. | Architecture and compilation for data bandwidth improvement in configurable embedded processors | |
Kavi et al. | Concurrency, Synchronization, and Speculation—The Dataflow Way | |
Khouri et al. | Memory binding for performance optimization of control-flow intensive behaviors | |
Fernandes | A clustered VLIW architecture based on queue register files | |
Vilim | In-Database Machine Learning on Reconfigurable Dataflow Accelerators | |
Manocha | Optimizing Data Supply and Memory Management for Graph Applications in Post-Moore Hardware-Software Systems | |
Subramanian | Architectural techniques to unlock ordered and nested speculative parallelism. | |
Liu et al. | Programming Model | |
Balasubramanian | Compiler Design for Accelerating Applications on Coarse-Grained Reconfigurable Architectures | |
Nicolau et al. | ROPE: a statically scheduled supercomputer architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150514 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20150514 Address after: Washington State Patentee after: Micro soft technique license Co., Ltd Address before: Washington State Patentee before: Microsoft Corp. |