CN103443767B - 展开量化以控制自动机的入度和/或出度 - Google Patents
展开量化以控制自动机的入度和/或出度 Download PDFInfo
- Publication number
- CN103443767B CN103443767B CN201280013925.9A CN201280013925A CN103443767B CN 103443767 B CN103443767 B CN 103443767B CN 201280013925 A CN201280013925 A CN 201280013925A CN 103443767 B CN103443767 B CN 103443767B
- Authority
- CN
- China
- Prior art keywords
- automat
- quantification
- degree
- state
- computer implemented
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- 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/4498—Finite state machines
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Devices For Executing Special Programs (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
揭示用于编译程序的设备、***和方法。一个此类编译程序将人类可读表达式剖析成语法树并将所述语法树转换成具有向内转变和向外转变的自动机。转换可包含根据入度限制来展开量化,其中入度限制包含对到所述自动机的状态的转变的数目的限制。所述编译程序也可将所述自动机转换成用于对平行机编程的映像,且发布所述映像。揭示额外的设备、***和方法。
Description
优先权主张
本专利申请案主张2011年1月25日申请的题为“展开量化以控制自动机的入度和/或出度(UNROLLINGQUANTIFICATIONSTOCONTROLIN-DEGREEAND/OROUTDEGREEOFAUTOMATON)”的美国临时专利申请案第61/436,051号的优先权的利益,所述美国临时专利申请案的全文特此以引用方式并入本文中。
技术领域
背景技术
有限状态机(FSM)(也被称作有限状态自动机、自动机或简称为状态机)为状态、状态之间的转变和动作的表示。有限状态机可用以设计数字逻辑、计算机程序,或用于平行机的映像。有限状态机为由有限数目的状态、所述状态之间的转变和输出组成的行为模型。有限状态机可表示为图,其中所述图的顶点对应于有限状态机的状态,且所述图的边对应于归因于到有限状态机的一个或一个以上输入而发生的状态之间的转变。有限状态机还可具有概率转变、模糊状态或其它异事。有限状态机具有有限内部存储器、输入特征和可选输出特征。具有输出的有限状态机可被称作有限状态转换器。
有限状态机的应用包含电子设计自动化、通信协议设计、生物学和人工智能研究,以及用以描述自然语言的文法的语言学。
发明内容
附图说明
图1说明根据本发明的各种实施例的用于可使用自动机将源代码转换成机器代码的编译程序的流程图的实例。
图2说明根据本发明的各种实施例的由编译程序所使用的自动机的实例。
图3说明根据本发明的各种实施例的用于展开量化的方法的实例。
图4A到4C说明根据本发明的各种实施例的用于展开的量化的实例自动机。
图5说明根据本发明的各种实施例的平行机的实例。
图6说明根据本发明的各种实施例的实施为有限状态机引擎的图5的平行机的实例。
图7说明根据本发明的各种实施例的图6的有限状态机引擎的块的实例。
图8说明根据本发明的各种实施例的图7的块的行的实例。
图9说明根据本发明的各种实施例的图8的行的成对群组的实例。
图10说明根据本发明的各种实施例的供编译程序用以将正则表达式转换成经配置以对图5的平行机编程的映像的方法的实例。
图11A和11B说明根据本发明的各种实施例的对应于量化的自动机的实例图。
图12说明根据本发明的各种实施例的对应于量化的自动机的另一实例图。
图13说明根据本发明的各种实施例的对应于量化的自动机的又一实例图。
图14说明根据本发明的各种实施例的对应于量化的自动机的再一实例图。
图15说明根据本发明的各种实施例的计算机的实例。
具体实施方式
以下描述和图式充分地说明了特定实施例以使所属领域的技术人员能够将其付诸实践。其它实施例可并有结构、逻辑、电、过程和其它改变。一些实施例的部分和特征可包含于其它实施例中或可替代其它实施例的部分和特征。权利要求书中所陈述的实施例涵盖所述技术方案的所有可用等效物。
本文档尤其描述了将源代码转换成有限状态机的机器代码实施方案的编译程序。机器代码可对应于目标装置,因为机器代码经配置以在目标装置上实施通过源代码描述的功能。在一实例中,目标装置为平行机,且机器代码包括用于平行机的映像。在另一实例中,目标装置包括具有冯诺依曼架构的计算机,且机器代码包括供计算机中的处理器执行的指令。
在任何情况下,编译程序都会将源代码转换成体现通过源代码描述的功能的有限状态机。在编译源代码的过程中,编译程序将源代码转换成自动机。使用自动机,编译程序可识别并组合源代码中的冗余,以便优化通过机器代码实施的所得有限状态机。另外,编译程序可将在形成自动机时目标装置的方面或限制考虑进来,以便减少所得机器代码的复杂性并提高目标装置的操作效率。
图1说明用于实例编译程序的流程图100。所述编译程序采用源代码作为输入且产生机器代码以在目标装置上实施通过源代码描述的功能。在一个实例中,目标装置包括如下文关于图5到9所描述的平行机。所述平行机包含可设定为多个状态中的一者的多个可编程元件。用于平行机的机器代码包括用于设定所述可编程元件中的一者或一者以上的状态的映像。在另一实例中,目标装置为具有冯诺依曼架构的计算机。所述计算机包含耦合到一个或一个以上存储装置的一个或一个以上处理器,所述一个或一个以上存储装置上具有供所述一个或一个以上处理器执行的软件。用于冯诺依曼架构的机器代码包括供所述一个或一个以上处理器执行的指令。在下文关于图15来描述具有冯诺依曼架构的实例计算机。在任何情况下,编译程序都会通过将自动机用作中间转换来产生机器代码。编译程序使用自动机以便尤其优化所得FSM且转而优化机器代码。
在一实例中,源代码描述用于识别一群符号内的符号的型样的搜索字符串。为了描述所述搜索字符串,源代码可包含多个正则表达式(regex)。正则表达式可为用于描述符号搜索型样的字符串。正则表达式广泛用在各种计算机领域中,例如程序设计语言、文本编辑器、网络安全和其它领域。在一实例中,由编译程序支持的正则表达式包含用于无结构数据的搜索的搜索准则。无结构数据可包含以下数据,其为自由形式的且无索引施加于数据内的字。字可包含数据内的字节(可打印和不可打印)的任何组合。在一实例中,编译程序可支持用于实施正则表达式的多种不同的源代码语言,包含Perl(例如,Perl相容正则表达式(PCRE))、PHP、Java和.NET语言。
返回参看图1,在框102处,编译程序可剖析源代码以形成有关系连接的算子的布置。剖析源代码可创建所述源代码的一般表示。在一实例中,所述一般表示包括源代码中的呈被称为语法树的树形图形式的正则表达式的经编码表示。本文中所描述的实例将所述布置称为语法树(也被称为“抽象语法树”),然而,在其它实例中,可使用具体语法树或其它布置。
由于如上文所提及,编译程序可支持多种语言的源代码,因此,不管是何种语言,剖析都会将源代码转换成非语言特定表示,例如语法树。因此,由编译程序进行的其它处理(框104、106、108、110)可从共同的输入结构来起作用,而不管源代码的语言。
语法树包含有关系连接的多个算子。语法树可包含多种不同类型的算子,其中不同类型的算子对应于通过源代码实施的不同功能。也就是说,不同算子可对应于通过源代码中的正则表达式实施的不同功能。
在框104处,将语法树转换成自动机。自动机包括FSM的软件模型,且可因此分为确定性或非确定性。确定性自动机在给定时间具有单个执行路径,而非确定性自动机具有多个同时的执行路径。自动机包括多个状态。为了将语法树转换成自动机,将语法树中的算子和算子之间的关系转换成状态和状态之间的转变。
为了有效地利用目标装置的元件,编译程序可基于目标装置的元件的方面或限制来形成自动机。举例来说,所述元件可对转变到或转变出自动机中的给定状态的数目具有某些限制。在其它实例中,硬性限制可能不存在,但编译程序可能会限制转变到或转变出给定状态的数目,以便简化编译程序产生机器代码和/或提高目标装置上的机器代码的操作效率所需的处理。在下文关于图3和4A到4C来提供关于限制转变到或转变出给定状态的更多细节。
一旦已形成自动机,在框106处,便可优化自动机以尤其减少其复杂性和大小。可尤其通过组合等效状态来优化自动机。
在框108处,将自动机转换成用于目标装置的机器代码。在一个实例中,机器代码包括用于冯诺依曼架构中的处理器的可执行指令。在此,机器代码可包括可执行程序。在另一实例中,机器代码可包括经配置以对平行机中的硬件元件编程的位。在此,机器代码可包括供加载到平行机上的映像。
在框110处,可由编译程序发布机器代码。在一实例中,可通过将机器代码保存到计算机可读媒体来发布机器代码。在另一实例中,可通过将机器代码发送到另一装置(例如,用于将机器代码加载到平行机上的加载程序)来发布机器代码。在再一实例中,可通过将机器代码加载到平行机上来发布机器代码。在又一实例中,可通过在显示装置上显示机器代码来发布机器代码。
在一实例中,所述编译程序可通过用于具有冯诺依曼架构的计算机的指令来实施。这些指令可使所述计算机上的处理器实施所述编译程序的功能。举例来说,所述指令在由处理器执行时可使处理器对可由处理器存取的源代码执行如框102、104、106、108和110中所描述的动作。具有冯诺依曼架构的实例计算机展示于图15中且在下文描述。
可以用源代码描述的一类正则表达式包含量化。量化在此项技术中为众所周知的,且用以描述重复型样。作为一实例,“A(B){n1,n2}C”为一般正则表达式,其中A、B和C为子表达式,且“(B){n1,n2}”包括量化。如本文中所描述,使用大写字母来表示正则表达式或正则表达式的一部分(例如,子表达式)。可将双引号添加到正则表达式或子表达式周围以避免混淆。因此,描述表达式的大写字母可对应于用于多个输入符号的搜索字符串。举例来说,表达式“A”可对应于输入字符串“abbc”。
此外,应理解,术语表达式和子表达式在本文中仅用于关系描述(例如,子表达式为表达式的一部分),且术语表达式和子表达式不应限于任何特定长度、语法或字符数目。明确地说,源代码可包含大量字符(包含元字符和搜索字符),其中整组字符或其任何个别部分可被视为“表达式”。举例来说,以下各者中的每一者可被视为表达式:“a(bbld?){5,20}c”、“(b){0,10}”、“(bld)”和“b”。
将量化以正则表达式表达为“(B){n1,n2}”,其中B为子表达式,且n1和n2为指定允许前面的子表达式出现多少次的整数。B在本文中被称作重复子表达式,因为B为重复了由n1和n2指定的次数的子表达式。为了匹配量化“(B){n1,n2}”,必须匹配重复子表达式Bn1到n2次。举例来说,正则表达式“(B){5,7)”将要求子表达式B匹配5、6或7次。在正则表达式“A(B){n1,n2}C”中,子表达式A在本文中被称作驱动表达式,因为子表达式A在被匹配时转变到量化。另外,为了继续重复和递增针对所述量化的计数,必须连续地匹配所述量化的重复子表达式。也就是说,当在所述量化的给定循环期间不匹配重复子表达式时,所述量化结束。在一实例中,符号“?”也对应于量化,其中在“?”之前的符号可被识别一次或零次。
图2说明对应于具有量化的正则表达式的实例自动机200。自动机200对应于正则表达式“abb?(blc){1,2}”。自动机200包含初始状态202和最终状态212、204。所述最终状态212、204在图2中被识别为双重圆圈。最初先激活初始状态202并在输入符号“a”之后即刻使其转变到状态206。在输入符号“b”时,状态206转变到状态208和状态210两者。在输入符号“b”时状态208转变到状态210,且在输入符号“b”或“c”时,状态210转变到状态212。同样,在输入符号“b”或“c”时,自动机200从状态212转变到状态204。状态212和204被识别为最终状态,因为状态212或状态204的激活指示自动机200所对应于的正则表达式“abb?(blc){1,2}”的匹配。
图3说明用于将语法树转换成自动机的方法300的实例。明确地说,方法300说明用于通过展开量化算子(在本文中也被简称作“量化”)将量化转换成自动机的方式。举例来说,展开量化可包含用非量化语法来重写所述量化并将所述非量化语法转换成自动机。举例来说,“(blc){1,2}”可重写为“(blc)(blc)?”。展开的优点可包含所得自动机为有向非循环图(DAG),其可较易于在目标装置中实施。
方法300在框302处开始,在框302处,当量化的重复子表达式为可空(nullable)时,将量化转换成不可空形式。如果重复子表达式为不可空,那么方法前进到304而不转换所述量化。当表达式可被空字符串匹配时,所述表达式为可空的。举例来说,表达式(bcl)可被输入符号“bc”或空字符串匹配。因此,表达式(bcl)为可空的,因为所述表达式可被空字符串匹配。为了将对应于可空的重复子表达式的量化转换成具有不可空的重复子表达式的量化,移除重复子表达式的可空部分。举例来说,表达式(bcl)变成(bc)。另外,用以匹配量化的循环的数目从{n1,n2}修改成{0,n2}。举例来说,表达式“AB{n1,n2}C”转换成“AB′{0,n2}C”,其中B′为B的不可空形式。在一实例中,量化“a(bcl){3,5}d”可转换成“a(bc){0,5}d”。
在一实例中,在框304处,任选地确定是否将展开量化。如上文所提及,展开量化可包含用非量化语法来重写所述量化并将所述非量化语法转换成自动机。量化的此重写的结果为通过通用状态(例如,状态机元件)且不通过特殊目的状态(例如,计数器)来实施所得的展开语法。然而,在一些情形中,可希望通过特殊目的元件(例如,计数器)来实施量化且因此不展开量化。在其它情况下,展开量化。当不展开量化时,针对所述量化,方法300结束。当可至少部分展开量化时,方法300继续到框306。以下条件指示何时可通过计数器实施且何时量化不通过计数器实施且得以展开的实例。应理解,尽管下文的某些情形描述为可通过计数器实施,但在其它实例中,这些情形可通过展开来实施。大体上,在需要时,所有量化均可通过展开来实施。
在确定是否可使用计数器来实施量化之前,如果£(B)包含空字符串,那么量化“B{n1,n2}”重写为“B′{0,n2}”,其中B′为B的非空字符串版本,£(B′)=£(B)-Φ。举例来说,“(bcl){10,20}”可重写为“(bc){0,20}”,因为这些正则表达式接受完全相同的数据。
1.当(n1=0,n2=-1)时,所述量化将通过展开来实施。在此,不需要计数器。
2.当(n1=1,n2=-1)时,所述量化将通过展开来实施。在此,不需要计数器。
3.当(n1>1,n2=-1)时,所述量化将***成两个正则表达式B{n1-1}和B+,因为B{n,-1}等于B{n1-1}B+。接着可通过计数器来实施量化B{n1-1},而将通过展开来实施B+。
4.当(n1=0,n2>0)时,将所述量化修改成(B{1,n2})?,因为(B{1,n2})?等于B{0,n2}。接着可通过计数器来实施不可空B{1,n2}。
5.当(n1>0,n2>0)时,可通过计数器将所述量化实施为B{n1,n2}。
总言之,在没有修改的情况下可通过计数器实施的量化可被写成B{n1,n2},其中B为不可空的,n1>0、n2>0且n1≤n2。
在框306处,展开可与单个数目的循环相匹配的量化以形成具有多个连续地连接的重复子表达式的自动机。具有单个数目的循环的量化对应于n1等于n2的量化。举例来说,量化“B{n1}”可展开为“BB...B”,具有B的n1个副本。
在框308处,当n1不等于n2时,且当n1等于1且n2大于1时,展开可与多个数目的循环相匹配的量化。当n1大于1时,将所述量化***成可与n1-1个循环相匹配的第一量化以及可与一个到n2-n1+1个的循环相匹配的第二量化。举例来说,量化B{n1,n2}(其中n1>1、n2>1且n1<n2)可与多个数目的循环相匹配,明确地说,从n1到n2个循环。此量化B{n1,n2}可***成以下量化:B{n1-1}B{1,n2-n1+1}。第一量化为可与数目等于n1-1个的循环相匹配的重复子表达式B。将此第一量化与第二量化串接,所述第二量化具有可与数目为一个到n2-n1+1个的循环相匹配的重复子表达式。如306处所述,展开第一量化B{n1-1}。
可基于所得自动机的入度(in-degree)和/或出度(out-degree)来展开第二量化B{1,n2-n1+1}。展开量化可创建具有大入度或大出度的状态。在一实例中,入度对应于到自动机的状态的转变的数目,且出度对应于从自动机的状态发生的转变的数目。因此,可展开第二量化以控制当将第二量化转换成自动机时进(入度)或出(出度)状态的转变。举例来说,可展开量化以限制每一展开状态的入度使之低于阈值数目。举例来说,限制入度可经执行以考量目标装置中的元件的方面和/或限制。此外,在展开期间限制入度可减少编译程序的后续处理。
在一实例中,当展开量化B{1,n2-n1+1}时,产生自动机,作为入度与出度之间的取舍。因此,减少入度可增加出度,且减少出度可增加入度。在一实例中,为了展开量化B{1,n2-n1+1}的循环结构,进行到或自展开状态的许多转变以使自动机接受B串接了k次的任何字符串,其中1<=k<=n2-n1+1。控制是否进行到或自展开状态的转变可用以控制自动机的入度/出度。
尽管将方法300描述为对应于单个量化,但可针对语法树内的多个量化而重复方法300,且可接着将所得的单独自动机连接到较大自动机中。
图4A说明自动机400的一实例,其中展开表达式AB{1,4}以最小化入度。从经展开以最小化入度的量化产生的自动机在本文中也被称作散射型样。表达式AB{1,4}的散射型样展开版本完全对应于自动机400所对应于的表达式A((((B?)B)?B)?B)。自动机400包含用于量化B{1,4}的驱动状态402和多个展开状态404-408,包含所述量化的第一状态404和所述量化的最后一个状态408。在一实例中,表达式A和B中的每一者可对应于未展示的较小自动机的多个状态。为了最小化自动机400的入度,将所述量化的转变指派为从第一状态404到其它展开状态405-408的向外转变。因此,第一状态404具有大出度(4个向外转变),且所有量化状态404-408具有小入度(1或2个向内转变)。
图4B说明自动机410的一实例,其中展开表达式AB{1,4}以最小化出度。从经展开以最小化出度的量化产生的自动机在本文中也被称作合并型样。表达式AB{1,4}的合并型样展开版本完全对应于展开表达式AB(B(B(B)?)?)?。自动机408包含与自动机400相同的状态402、404-408,但在状态402、404-408之间具有不同转变。为了最小化自动机410的出度,将量化的转变指派为到所述量化的最后一个状态408的向内转变。向内转变是起始于展开状态404-407中的每一者。因此,所有量化状态404-408都具有小出度(1或2个向外转变),但所述量化的最后一个状态408具有大入度(4个向内转变)。
在一实例中,展开具有量化的表达式以限制出度或入度中的一者使之小于阈值。在一实例中,为了展开表达式AB{1,n1}以将入度限制于阈值,可将数目高达所述阈值的量化B{1,n1}的转变指派为到量化B{1,n1}的最后一个状态的向内转变,且可将其它转变指派为针对量化B{1,n1}的第一状态的向外转变。相反地,为了展开表达式AB{1,n1}以将出度限制于阈值,可将数目高达所述阈值的量化B{1,n1}的转变指派为到所述量化的第一状态的向外转变,且可将其它转变指派为针对量化B{1,n1}的最后一个状态的向外转变。
图4C说明自动机412的另一实例,其中展开表达式AB{1,4}以限制任何状态的向内转变使之小于或等于3。自动机412包含与自动机400和408相同的状态402、404-408,但在状态402、404-408之间具有不同转变。在一实例中,为了限制自动机412的入度使之小于或等于三(3)个向内转变,最初将量化的转变指派为到量化B{1,4}的最后一个状态408的向内转变,直到已达到三个的极限为止,且将其它转变指派为从量化状态404-408的向外转变。因此,最后一个状态408以及量化的其它量化状态404-407具有等于或低于极限3的入度,且第一状态404具有为3的出度。
在其它实例中,可将表达式的入度和出度设定为彼此成某一比率(例如,1比1、2比1)。在又其它实例中,可将表达式的入度和出度设定为彼此成某一比率,直到向内转变或向外转变达到阈值为止,且接着可使用另一比率,或可将所有转变分别指派为向内转变或向外转变。
实例实施例
下文关于图5到15所作的描述与在平行机中实施具有有限的入度和/或出度的自动机的实例实施例有关。参看图5到9所作的描述与用于实施量化的实例平行机有关,且参看图10到14所作的描述与用以产生机器代码以对平行机编程以实施量化的实例编译程序有关。
图5说明可用以实施用于分析数据的阶层式结构的实例平行机500。平行机500可接收输入数据并基于所述输入数据提供输出。平行机500可包含用于接收输入数据的数据输入端口510和用于将输出提供到另一装置的输出端口514。数据输入端口510提供用于使数据输入到平行机500的接口。
平行机500包含多个可编程元件,包含通用元件502和特殊目的元件512。通用元件502可包含一个或一个以上输入504和一个或一个以上输出506。可将通用元件502编程到多个状态中的一者。通用元件502的状态决定通用元件502基于给定输入将提供哪一(些)输出。也就是说,通用元件502的状态决定可编程元件基于给定输入将如何反应。输入到数据输入端口510的数据可提供到所述多个通用元件502以使通用元件502对其采取行动。通用元件502的实例可包含下文详细论述的状态机元件(SME),以及可配置逻辑块。在一实例中,SME可被设定在给定状态以当在数据输入端口510处接收到给定输入时提供某一输出(例如,高或“1”信号)。当在数据输入端口510处接收到不同于所述给定输入的输入时,SME可提供不同输出(例如,低或“0”信号)。在一实例中,可配置逻辑块可经设定以基于在数据输入端口510处接收到的输入来执行布尔逻辑函数(例如,“与”(AND)、“或”(OR)、“或非”(NOR)等)。
平行机500还可包含用于将程序(例如,映像)加载到平行机500上的编程接口511。所述映像可编程(例如,设定)通用元件502的状态。也就是说,所述映像可配置通用元件502以按某一方式来对给定输入起反应。举例来说,通用元件502可经设定,以当在数据输入端口510处接收到字符“a”时输出高信号。在一些实例中,平行机500可使用时钟信号来控制通用元件502的操作的时序。在某些实例中,平行机500可包含特殊目的元件512(例如,RAM、逻辑门、计数器、查找表等),用于与通用元件502介接且用于执行特殊目的功能。在一些实施例中,在数据输入端口510处接收到的数据可包含随时间过去或一齐接收到的一组固定的数据或随时间过去而接收到的数据流。数据可从耦合到平行机500的任何来源接收或由耦合到平行机500的任何来源产生,所述任何来源例如数据库、传感器、网络等。
平行机500还包含用于将平行机500的不同元件(例如,通用元件502、数据输入端口510、输出端口514、编程接口511和特殊目的元件512)选择性地耦合在一起的多个可编程开关508。因此,平行机500包括在所述元件间形成的可编程矩阵。在一实例中,可编程开关508可将两个或两个以上元件选择性地耦合到彼此,使得通用元件502的输入504、数据输入端口510、编程接口511或特殊目的元件512可经由一个或一个以上可编程开关508而耦合到通用元件502的输出506、输出端口514、编程接口511或特殊目的元件512。因此,元件之间的信号的路由可通过设定可编程开关508来控制。尽管图5说明了给定元件与可编程开关508之间的某一数目的导体(例如,电线),但应理解,在其它实例中,可使用不同数目的导体。而且,尽管图5说明了每一通用元件502个别地耦合到可编程开关508,但在其它实例中,多个通用元件502可作为群组(例如,框802,如图8中所说明)而耦合到可编程开关508。在一实例中,数据输入端口510、数据输出端口514和/或编程接口511可实施为寄存器,以使得到寄存器的写入将数据提供到相应元件或从相应元件提供数据。
在一实例中,单个平行机500实施于一物理装置上,然而,在其它实例中,两个或两个以上平行机500可实施于单个物理装置(例如,物理芯片)上。在一实例中,多个平行机500中的每一者可包含不同的数据输入端口510、不同的输出端口514、不同的编程接口511,以及一组不同的通用元件502。此外,每一组通用元件502可对其对应输入数据端口510处的数据起反应(例如,输出高或低信号)。举例来说,对应于第一平行机500的第一组通用元件502可对与第一平行机500对应的第一数据输入端口510处的数据起反应。对应于第二平行机500的第二组通用元件502可对与第二平行机500对应的第二数据输入端口510起反应。因此,每一平行机500包含一组通用元件502,其中通用元件502的不同集合可对不同输入数据起反应。类似地,每一平行机500和对应的每一组通用元件502可提供不同输出。在一些实例中,来自第一平行机500的输出端口514可耦合到第二平行机500的输入端口510,使得用于第二平行机500的输入数据可包含来自第一平行机500的输出数据。
在一实例中,用于加载到平行机500上的映像包括用于在平行机500内设定通用元件502的状态、对可编程开关508编程以及配置特殊目的元件512的多个信息位。在一实例中,所述映像可被加载到平行机500上来对平行机500编程以基于某些输入而提供所要输出。输出端口514可基于通用元件502对在数据输入端口510处的数据所起的反应来提供来自平行机500的输出。来自输出端口514的输出可包含指示给定型样的匹配的单个位、包括指示与多个型样的匹配和不匹配的多个位的字,以及对应于在给定时刻所有或某些通用元件502的状态的状态向量。
平行机500的实例用途包含型样辨识(例如,语音辨识、图像辨识等)、信号处理、成像、计算机视觉、密码学和其它。在某些实例中,平行机500可包括有限状态机(FSM)引擎、现场可编程门阵列(FPGA)和其变体。此外,平行机500可为较大装置中的组件,所述较大装置例如计算机、传呼机、蜂窝式电话、个人备忘记事本、便携式音频播放器、网络装置(例如,路由器、防火墙、交换机或其任何组合)、控制电路、摄影机等。
图6到9说明在本文中被称作“FSM引擎600”的平行机的实例。在一实例中,FSM引擎600包括有限状态机的硬件实施方案。因此,FSM引擎600实施对应于FSM中的多个状态的多个可选择性地耦合的硬件元件(例如,可编程元件)。类似于FSM中的状态,硬件元件可分析输入流且基于所述输入流来激活下游硬件元件。
FSM引擎600包含多个可编程元件,包含通用元件和特殊目的元件。通用元件可经编程以实施许多不同功能。这些通用元件包含SME604、605(展示于图9中),所述SME604、605阶层式地组织成行606(展示于图7和8中)和块602(展示于图6和7中)。为了在阶层式组织的SME604、605之间路由信号,使用可编程开关的阶层,所述阶层包含块间开关603(展示于图6和7中)、块内开关608(展示于图7和8中)和行内开关612(展示于图8中)。SME604、605可对应于通过FSM引擎600实施的FSM的状态。如下文所描述,可通过使用可编程开关将SME604、605耦合在一起。因此,可通过对SME604、605编程以对应于状态的功能且通过将SME604、605选择性地耦合在一起以对应于FSM中的状态之间的转变来在FSM引擎600上实施FSM。
图6说明实例FSM引擎600的全图。FSM引擎600包含多个块602,所述块可与可编程块间开关603选择性地耦合在一起。另外,块602可选择性地耦合到用于接收信号(例如,数据)以及将数据提供到块602的输入块609(例如,数据输入端口)。块602还可选择性地耦合到用于将来自块602的信号提供到外部装置(例如,另一FSM引擎600)的输出块613(例如,输出端口)。FSM引擎600还可包含编程接口611以将程序(例如,映像)加载到FSM引擎600上。所述映像可编程(例如,设定)SME604、605的状态。也就是说,所述映像可配置SME604、605以按某一方式对输入块609处的给定输入起反应。举例来说,SME604可经设定,以当在输入块609处接收到字符“a”时输出高信号。
在一实例中,输入块609、输出块613和/或编程接口611可实施为寄存器,以使得到寄存器的写入将数据提供到相应元件或从相应元件提供数据。因此,来自存储于与编程接口611对应的寄存器中的映像的位可加载到SME604、605上。尽管图6说明了块602、输入块609、输出块613和块间开关603之间的某一数目的导体(例如,电线、迹线),但应理解,在其它实例中,可使用更少或更多的导体。
图7说明块602的实例。块602可包含多个行606,所述行可与可编程块内开关608选择性地耦合在一起。另外,行606可通过块间开关603而选择性地耦合到另一块602内的另一行606。在一实例中,包含缓冲器601以控制去往/来自块间开关603的信号的时序。行606包含多个SME604、605,所述多个SME604、605被组织成本文中被称作成对群组(groupoftwo;GOT)610的元件对。在一实例中,块602包括十六(16)个行606。
图8说明行606的实例。GOT610可通过可编程行内开关612而选择性地耦合到所述行606内的其它GOT610和任何其它元件624。GOT610也可通过块内开关608而耦合到其它行606中的其它GOT610,或通过块间开关603而耦合到其它块602中的其它GOT610。在一实例中,GOT610具有第一输入614和第二输入616以及输出618。第一输入614耦合到GOT610的第一SME604,且第二输入614耦合到GOT610的第二SME604。
在一实例中,行606包含第一多个行互连导体620和第二多个行互连导体622。在一实例中,GOT610的输入614、616可耦合到一个或一个以上行互连导体620、622,且输出618可耦合到一个行互连导体620、622。在一实例中,第一多个行互连导体620可耦合到行606内的每一GOT610的每一SME604。第二多个行互连导体622可耦合到行606内的每一GOT610的一个SME604,但不可耦合到GOT610的另一SME604。在一实例中,所述第二多个行互连导体622的前一半可耦合到一行606内的SME604的前一半(来自每一GOT610的一个SME604),且所述第二多个行互连导体622的后一半可耦合到一行606内的SME604的后一半(来自每一GOT610的另一SME604)。所述第二多个行互连导体622与SME604、605之间的有限连接性在本文中被称作“对等性”。
在一实例中,行606还可包含特殊目的元件624,例如计数器、可编程布尔逻辑元件、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、可编程处理器(例如,微处理器)和其它元件。另外,在一实例中,特殊目的元件624在不同行606中为不同的。举例来说,一块602中的行606中的四个可包含布尔逻辑作为特殊目的元件624,而一块602中的其它八个行606可包含计数器作为特殊目的元件624。
在一实例中,特殊目的元件624包含计数器(本文中也被称作计数器624)。在一实例中,计数器624包括12位可编程递减计数器。所述12位可编程计数器624具有计数输入、重置输入,和零计数输出。所述计数输入在被断言时使计数器624的值递减一。所述重置输入在被断言时使计数器624加载来自相关联的寄存器的初始值。对于12位计数器624,可加载高达12位的数字作为初始值。当计数器624的值递减到零(0)时,断言所述零计数输出。计数器624也具有至少两种模式,脉冲和保持。当将计数器624设定为脉冲模式时,在计数器624递减到零时的第一时钟循环期间断言零计数输出,且在接下来的时钟循环时,即使断言了计数输入,也不再断言零计数输出。此状态继续,直到重置输入被断言而重置计数器624为止。当将计数器624设定为保持模式时,在计数器624递减到零时的第一时钟循环期间断言零计数输出,且在断言了计数输入时保持为经断言的,直到重置输入被断言而重置计数器624为止。
图9说明GOT610的实例。GOT610包含第一SME604和第二SME605,其具有输入614、616且具有其耦合到OR门630的输出626、628。通过OR门630将输出626、628一起逻辑OR以形成GOT610的共同输出618。在一实例中,第一SME604和第二SME605展现对等性,其中第一SME604的输入614可耦合到行互连导体622中的一些,且第二SME605的输入616可耦合到其它行互连导体622。在一实例中,可通过设定开关640以将第一SME604的输出626耦合到第二SME605的输入616来将GOT610内的两个SME604、605级联。
在一实例中,状态机元件604、605包括与检测线634并联耦合的多个存储胞元632、例如动态随机存取存储器(DRAM)中所常用的那些存储胞元。一个此类存储胞元632包括可设定为数据状态的存储胞元,所述数据状态例如对应于高或低值(例如,1或0)的状态。存储胞元632的输出耦合到检测线634,且存储胞元632的输入基于数据流线636上的数据而接收信号。在一实例中,对数据流线636上的输入解码以选择存储胞元632中的一者。选定的存储胞元632将其所存储的数据状态作为输出提供到检测线634上。举例来说,在数据输入端口609处接收到的数据可提供到解码器(未图示),且所述解码器可选择数据流线636中的一者。在一实例中,所述解码器可将ACSII字符转换成256位的1。
因此,当存储胞元632被设定为高值且数据流线636上的数据对应于存储胞元632时,存储胞元632输出高信号到检测线634。当数据流线636上的数据对应于存储胞元632且存储胞元632被设定为低值时,存储胞元632输出低信号到检测线634。在检测线634上的来自存储胞元632的输出通过检测电路638来感测。在一实例中,输入线614、616上的信号将相应检测电路638设定为活动或不活动状态。当设定为不活动状态时,检测电路638在相应输出626、628上输出低信号,而不管相应检测线634上的信号。当设定为活动状态时,当检测到来自相应SME604、605的存储胞元634中的一者的高信号时,检测电路638在相应输出线626、628上输出高信号。当处在活动状态时,当来自相应SME604、605的所有存储胞元634的信号为低时,检测电路638在相应输出线626、628上输出低信号。
在一实例中,SME604、605包含256个存储胞元632,且每一存储胞元632耦合到不同的数据流线636。因此,SME604、605可经编程以当数据流线636中的选定的一者或一者以上上面具有高信号时输出高信号。举例来说,SME604可使第一存储胞元632(例如,位0)设定为高且使所有其它存储胞元632(例如,位1-255)设定为低。当相应检测电路638处于活动状态时,当对应于位0的数据流线636上面具有高信号时,SME604在输出626上输出高信号。在其它实例中,SME604可经设定,以当通过将适当的存储胞元632设定为高值而使多个数据流线636中的一者上面具有高信号时输出高信号。
在一实例中,可通过从相关联的寄存器读取位来将存储胞元632设定为高值或低值。因此,可通过将由编译程序创建的映像存储到寄存器中且将寄存器中的位加载到相关联的存储胞元632中来对SME604编程。在一实例中,由编译程序创建的映像包含高和低(例如,1和0)位的二进制映像。所述映像可通过将SME604、605级联而对FSM引擎600编程以操作为FSM。举例来说,可通过将检测电路638设定为活动状态而将第一SME604设定为活动状态。第一SME604可经设定,以当对应于位0的数据流线636上面具有高信号时输出高信号。第二SME605最初可设定为不活动状态,但可经设定以在活动时当对应于位1的数据流线636上面具有高信号时输出高信号。可通过设定第一SME604的输出626以耦合到第二SME605的输入616来将第一SME604与第二SME605级联。因此,当在对应于位0的数据流线636上感测到高信号时,第一SME604在输出626上输出高信号且将第二SME605的检测电路638设定为活动状态。当在对应于位1的数据流线636上感测到高信号时,第二SME605在输出628上输出高信号以激活另一SME605或用于来自FSM引擎600的输出。
图10说明供编译程序用以将源代码转换成经配置以对平行机编程的映像的方法1000的实例。方法1000包含:将源代码剖析成语法树(框1002);将语法树转换成自动机(框1004);优化自动机(框1006);将自动机转换成网表(框1008);将网表放置于硬件上(框1010);对网表进行布线(框1012);以及发布所得映像(框1014)。
在一实例中,所述编译程序包含应用编程接口(API),所述API允许软件开发人员创建用于在FSM引擎600上实施FSM的映像。所述编译程序提供用以将一组输入的正则表达式转换成经配置以对FSM引擎600编程的映像的方法。所述编译程序可通过用于具有冯诺依曼架构的计算机的指令来实施。这些指令可使计算机上的处理器实施所述编译程序的功能。举例来说,所述指令在由处理器执行时可使处理器对可被处理器存取的源代码执行如框1002、1004、1006、1008、1010、1012和1014中所描述的动作。具有冯诺依曼架构的实例计算机展示于图15中且在下文描述。
在框1002处,剖析源代码以形成语法树。如上文关于图3所解释,剖析产生源代码的一般表示。另外,剖析可将FSM引擎600支持和不支持的正则表达式都考虑进来。所支持的正则表达式可转换成适当机器代码实施方案;然而,不受支持的正则表达式可能会(例如)产生错误,或转换成在功能性上接近于不受支持的正则表达式的受支持的机器代码。
在框1004处,将语法树转换成自动机。如上文关于图3所提及,转换语法树是将语法树转换成包括多个状态的自动机。在一实例中,可部分基于FSM引擎600的硬件来转换自动机。
在一实例中,用于自动机的输入符号包含字母、数字0-9和其它可打印字符的符号。在一实例中,所述输入符号通过字节值0到255(包含在内)来表示。在一实例中,自动机可表示为有向图,其中所述图的节点对应于状态集合。在一实例中,在输入符号α时从状态p到状态q的转变(即,δ(p,α))通过从节点p到节点q的有向连接展示。
在一实例中,自动机包括通用状态以及特殊目的状态。所述通用状态和特殊目的状态对应于受目标装置支持的通用元件和特殊目的元件,编译程序正为所述目标装置产生机器代码。不同类型的目标装置可支持不同类型的通用元件以及一种或一种以上不同类型的特殊目的元件。通用元件通常可用以实施广泛范围的功能,而特殊目的元件通常可用以实施较窄范围的功能。然而,在一实例中,特殊目的元件可在其窄的功能范围内实现(例如)较大效率。因此,特殊目的元件可用以(例如)减少在目标装置中实施某些功能所需的机器循环或机器资源。在一些实例中,目标装置仅支持特殊目的元件,其中支持多种不同类型的特殊目的元件。
在编译程序正产生用于FSM引擎600的机器代码的实例中,通用状态可对应于SME604、605,且通用状态因此在本文中被称作“SME状态”。此外,当编译程序正产生用于FSM引擎600的机器代码时,特殊目的状态可对应于计数器624且因此在本文中被称作“计数器状态”。在一实例中,自动机中的SME状态1:1映射到FSM引擎600中的SME(例如,SME604、605),不映射到SME的自动机的开始状态除外。计数器624可能或可能不1:1映射到计数器状态。
在一实例中,在自动机中可使用输入符号范围外的特殊转变符号。这些特殊转变符号可用以(例如)使得能够使用特殊目的元件224。此外,特殊转变符号可用以提供在不同于输入符号的其它事物时发生的转变。举例来说,特殊转变符号可指示当启用第二状态和第三状态两者时将启用(例如,转变到)第一状态。因此,当激活第二状态和第三状态两者时激活第一状态,且到第一状态的转变并非直接取决于输入符号。显著地,指示在启用第二状态和第三状态两者时将启用第一状态的特殊转变符号可用以将(例如)通过布尔逻辑执行的布尔AND函数表示为特殊目的元件224。在一实例中,可使用特殊转变符号来指示计数器状态已达到零,且因此转变到下游状态。
在一实例中,可使用例如Glushkov方法等标准技术中的一者来建构自动机。在一实例中,自动机可为无ε的均齐自动机(homogeneousautomaton)。下文关于图3、4A到4C、11A、11B、12、13和14提供关于将语法树转换成自动机的额外细节。
在框1006处,一旦已将语法树转换成自动机,便优化自动机。所述自动机可经优化以尤其减少其复杂性和大小。可通过组合冗余状态来优化所述自动机。
在框1008处,将经优化的自动机转换成网表。将自动机转换成网表是将自动机的每一状态映射到FSM引擎600的硬件元件(例如,SME604、605、特殊目的元件624)的实例。而且,确定实例之间的连接以创建网表。
在框1010处,对网表进行放置以选择目标装置的对应于网表的每一实例的特定硬件元件(例如,SME604、605、特殊目的元件624)。在一实例中,放置是基于FSM引擎600的一般输入和输出约束而选择每一特定硬件元件。
在框1012处,对经放置的网表进行布线以确定可编程开关(例如,块间开关603、块内开关608和行内开关612)的设定以便将选定硬件元件耦合在一起以实现网表所描述的连接。在一实例中,所述可编程开关的设定是通过确定FSM引擎600的将用以连接选定硬件元件的特定导体来确定。布线可能要考虑比框1010处的放置多的关于硬件元件之间的连接的特定限制。因此,布线可能要调整如由全局放置确定的一些硬件元件的位置,以便在给出对FSM引擎600的导体的实际限制的情况下进行适当连接。
一旦对网表进行了放置和布线,便可将经放置和经布线的网表转换成用于对FSM引擎200编程的多个位。所述多个位在本文中被称作映像。
在框1014处,由编译程序发布映像。所述映像包括用于对FSM引擎600的特定硬件元件和/或可编程开关编程的多个位。在映像包括多个位(例如,0和1)的实施例中,映像可被称作二进制映像。所述位可加载到FSM引擎600上以对SME604、605、特殊目的元件624和可编程开关的状态进行编程,以使得经编程的FSM引擎600实施具有通过源代码描述的功能性的FSM。放置(框1010)和布线(框1012)可将在FSM引擎600中的特定位置处的特定硬件元件映射到自动机中的特定状态。因此,映像中的位可对特定硬件元件和/或可编程开关编程以实施所要功能。在一实例中,可通过将机器代码保存到计算机可读媒体来发布映像。在另一实例中,可通过在显示装置上显示映像来发布映像。在又一实例中,可通过将映像发送到另一装置(例如,用于将映像加载到FSM引擎600上的编程装置)来发布映像。在再一实例中,可通过将映像加载到平行机(例如,FSM引擎600)上来发布映像。
在一实例中,可通过将来自映像的位值直接加载到SME604、605和其它硬件元件624或通过将映像加载到一个或一个以上寄存器中且接着将来自所述寄存器的位值写入到SME604、605和其它硬件元件624来将映像加载到FSM引擎600上。在一实例中,FSM引擎600的硬件元件(例如,SME604、605、其它元件624、可编程开关603、608、612)经存储器映射,以使得编程装置和/或计算机可通过将映像写入到一个或一个以上存储器地址而将映像加载到FSM引擎600上。
返回参看图3和4A到4C,当将语法树转换成自动机时,可控制展开量化的入度和/或出度。在一实例中,基于阈值来控制入度和/或出度。举例来说,所述阈值可基于编译程序正为之准备映像的平行机500的硬件限制。举例来说,如果平行机500的通用元件502可具有最大14个向内转变,那么展开的阈值可被设定为小于或等于14个向内转变。在其它实例中,展开的阈值可经设定,以使得使用最大向内转变的一部分。举例来说,对于具有最大为14个向内转变的通用元件502,阈值可被设定为7个向内转变以将来自并非在正展开的表达式中的表达式的向内转变考虑进去。
展开可被公式化为如下所描述的一般图问题。图11A、11B、12和13说明对下文所论述的问题1的四个解决方案的图,其中入度和出度为受控的。不同解决方案提供不同的最大长度,所述最大长度由入度和出度阈值来确定。因此,取决于所要的入度和出度,可选择给定的解决方案。自动机的所得入度和/或出度取决于给下文所论述的两个问题选择哪个解决方案。
问题1(延长具有入度和出度约束的路径)。给定长度为n的有向路径和两个无正负号的整数p>1和q>1。将n+1个顶点表示为v0->v1->v2->...->vn。路径的开始顶点为v0,且结束顶点为vn。给此路径加上边,使得不引入循环,且对于任何k,1<=k<=n,存在长度为k的从v0到vn的有向路径;而且,所有顶点的入度不得大于p,且所有顶点的出度不得大于q。
问题2(最大化具有入度和出度约束的路径)。给定无限有向路径和两个无正负号的整数p>1和q>1。将顶点表示为v0->v1->v2->...。给此路径加上边且找出结束顶点,表示为vm,使得对于任何k,1<=k<=m,存在长度为k的从v0到vm的有向路径;所有顶点的入度不得大于p,且所有顶点的出度不得大于q。所述图中不允许有循环。优化目标为最大化所得路径的长度m。
在一实例中,首先解决问题2。如果经最大化的路径长度m不小于n,那么可容易地解决问题1。下文参看图11到13描述的四个解决方案得自关于图4A到4C论述的散射和合并型样。最大长度取决于p和q的值。
就图来说,可将散射型样描述为具有q个顶点的路径的延长。除了包括原始路径的边之外,开始顶点v0驱动所有其它顶点。v0的出度为q-1,vq-1为0,且其它顶点v1...vq-2为1。v0的入度为0,v1为1,且v2...vq-1为2。对于所有k,1<=k<=q-1,存在长度为k的从v0到vq-1的路径。
·k=1:v0->vq-1
·k=2:v0->vq-2->vq-1
·k=3:v0->vq-3->vq-2->vq-1
●.....
·k=q-1:v0->v1->v2->...->vq-2->vq-1
同样,就图来说,合并型样可描述为具有p个顶点的路径。除了包括原始路径的边之外,结束顶点vp-1由所有其它顶点驱动。vp-1的入度为p-1,v0为0,且其它顶点v1...vp-2为1。vp-1的出度为0,vp-2为1,且v0...vp-3为2。对于所有k,1<=k<=p-1,存在长度为k的从v0到vp-1的路径。
·k=1:v0->vp-1
·k=2:v0->v1->vp-1
·k=3:v0->v1->v2->vp-1
●.....
·k=q-1:v0->v1->v2->...->vp-2->vp-1
图11A说明对上述问题2的第一个解决方案。建构方法如下。串接重复p-1次的长度q-1的散射型样,且接着在末尾再加多一个顶点v(p-1)(q-1)+1。在串接期间将散射型样的结束和开始顶点合并成一个顶点,表示为接合顶点。连接从所有接合顶点到最后一个顶点v(p-1)(q-1)+1的边。事实上,将接合顶点连接到v(p-1)(q-1)+1是对接合顶点应用合并型样。
现在,顶点vk的出度为
顶点vk的入度为
对于所有k,1<=k<=q,长度为k的从v0到v(p-1)(q-1)+1的路径为
·k=1:v0->v(p-1)(q-1)+1
·k=2:v0->vq-1->v(p-1)(q-1)+1
·k=3:v0->vq-2->vq-1->v(p-1)(q-1)+1
●.....
·k=q:v0->v1->v2->...->vq-1->v(p-1)(q-1)+1
对于所有k,q+1<=k<=2q-1,长度为k的从v0到v(p-1)(q-1)+1的路径为
·k=q+1:v0->v1->v2->...->vq-1->v2q-2->v(p-1)(q-1)+1
·k=q+2:v0->v1->v2->...->vq-1->v2q-1->v2q-2->v(p-1)(q-1)+1
·k=q+3:v0->v1->v2->...->vq-1->v2q-2->vq-1->v2q-2->v(p-1)(q-1)+1
●.....
·k=2q:v0->v1->v2->...->vq-1->vq->vq+1->...->v2q-2->v(p-1)(q-1)+1
对于其它k,2q+1<=k<=(p-1)(q-1)+1,类似地建构路径。因此,解决方案1的所实现的最大路径长度等于(p-1)(q-1)+1。
图11B说明类似于上述第一个解决方案的对问题2的第二个解决方案。在此解决方案中,相对于对问题2的第一个解决方案交换合并型样和散射型样的使用。基本上,合并型样用于子路径,而散射型样应用于接合顶点。关于入度、出度和各种长度的路径的细节类似于解决方案1。解决方案1的所实现的最大路径长度等于(p-1)(q-1)+1。
图12说明对问题2的第三个解决方案。此解决方案为将合并型样应用于子路径和接合顶点两者。解决方案3的所实现的最大路径长度等于p(p-1)+1。
图13说明对问题2的第四个解决方案。此解决方案为将散射型样应用于子路径和接合顶点两者。解决方案4的所实现的最大路径长度等于q(q-1)+1。
图14说明对问题1的解决方案。从上述四个解决方案获得问题1的解决方案为直接的。采用最大长度不小于n(路径长度)的任何解决方案。假定采用解决方案1且n等于(p-2)(q-1)+1。移除索引大于(p-2)(q-1)+1的顶点,且接着将接合顶点重新连接到v(p-2)(q-1)+1。所得图为问题1的解决方案。相同的技术适用于问题2的所有四个解决方案。
本文中所描述的方法实例可至少部分为机器或计算机实施的。一些实例可包含编码有指令的计算机可读媒体或机器可读媒体,所述指令可操作以配置电子装置以执行如上述实例中所描述的方法。此些方法的一实施方案可包含代码,例如微码、汇编语言代码、高级语言代码或其类似者。此类代码可包含用于执行各种方法的计算机可读指令。代码可形成计算机程序产品的部分。另外,代码在执行期间或在其它时间可有形地存储于一个或一个以上易失性或非易失性计算机可读媒体上。这些计算机可读媒体可包含(但不限于)硬盘、可装卸磁盘、可装卸光盘(例如,压缩光盘和数字视频光盘)、磁带盒、存储卡或存储棒、随机存取存储器(RAM)、只读存储器(ROM)以及其类似者。
图15大体上说明具有冯诺依曼架构的计算机1500的实例。在阅读并理解了本发明的内容之后,所属领域的一般技术人员将理解,在基于计算机的***中可从计算机可读媒体加载软件程序以执行以软件程序定义的功能的方式。所属领域的一般技术人员将进一步理解,可使用各种编程语言来创建经设计以实施并执行本文所揭示的方法的一个或一个以上软件程序。可使用面向对象语言(例如,Java、C++或一种或一种以上其它语言)以面向对象格式来结构化所述程序。或者,可使用过程语言(例如,汇编语言、C等)以面向过程格式来结构化所述程序。软件组件可使用所属领域的一般技术人员所熟知的许多机制中的任一者来通信,例如应用编程接口或过程间通信技术,包含远程程序呼叫或其它。各个实施例的教示不限于任何特定编程语言或环境。
因此,可实现其它实施例。举例来说,制造物件(例如,计算机、存储***、磁盘或光盘、某其它存储装置,或任何类型的电子装置或***)可包含一个或一个以上处理器1502,所述一个或一个以上处理器1502耦合到上面存储有指令1524(例如,计算机程序指令)的计算机可读媒体1522,例如存储器(例如,可装卸存储媒体,以及包含电、光或电磁导体的任何存储器),所述指令在由所述一个或一个以上处理器1502执行时致使执行关于上述方法所描述的动作中的任一者。
计算机1500可采取具有处理器1502的计算机***的形式,所述处理器1502直接和/或使用总线1508耦合到多个组件。此些组件可包含主存储器1504、静态或非易失性存储器1506和大容量存储装置1516。耦合到处理器1502的其它组件可包含输出装置1510(例如,视频显示器)、输入装置1512(例如,键盘)和游标控制装置1514(例如,鼠标)。用以将处理器1502和其它组件耦合到网络1526的网络接口装置1520也可耦合到总线1508。可利用许多熟知传输协议(例如,HTTP)中的任一者经由网络接口装置1520在网络1526上进一步发射或接收指令1524。耦合到总线1508的这些元件中的任一者可不存在,单独地存在,或以复数形式存在,此取决于待实现的特定实施例。
在一实例中,处理器1502、存储器1504、1506或存储装置1516中的一者或一者以上可各自包含指令1524,所述指令1524在执行时可使计算机1500执行本文所描述的方法中的任何一者或一者以上。在替代实施例中,计算机1500作为单独装置或可连接(例如,网络连接)到其它装置。在网络环境中,计算机1500可以按照服务器-客户端网络环境中的服务器或客户端装置的能力来操作,或作为对等(或分布式)网络环境中的对等装置。计算机1500可包含个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝式电话、网络设备、网络路由器、交换机或桥接器,或能够执行一组指令(顺序的或其它)的任何装置,所述一组指令指定将由所述装置采取的行动。另外,虽然仅说明了单个计算机1500,但术语“计算机”也应被视为包含个别地或共同地执行一组(或多组)指令以执行本文中所论述的方法中的任何一者或一者以上的装置的任何集合。
计算机1500还可包含用于使用一种或一种以上通信协议(例如,通用串行总线(USB)、IEEE1394等)与***装置通信的输出控制器1528。输出控制器1528可(例如)将映像提供到通信地耦合到计算机1500的编程装置1530。编程装置1530可经配置以对平行机(例如,平行机500、FSM引擎600)编程。在其它实例中,编程装置1530可与计算机1500集成且耦合到总线1508或可经由网络接口装置1520或另一装置与计算机1500通信。
虽然计算机可读媒体1522展示为单个媒体,但术语“计算机可读媒体”应被视为包含存储所述一组或一组以上指令1524的单个媒体或多个媒体(例如,集中式或分布式数据库,或相关联的高速缓冲存储器和服务器,和或各种存储媒体,例如处理器1502寄存器、存储器1504、1506和存储装置1516)。术语“计算机可读媒体”还应被视为包含任何媒体,所述媒体能够存储、编码或载运供计算机执行的一组指令且使所述计算机执行本发明的方法中的任何一者或一者以上,或能够存储、编码或载运供此组指令利用或与此组指令相关联的数据结构。术语“计算机可读媒体”因此应被视为包含(但不限于)有形媒体,例如固态存储器、光媒体和磁性媒体。
提供摘要以遵照37C.F.R.章节1.72(b)中对摘要的要求,摘要将使读者可以确定技术揭示内容的性质和要旨。提交摘要的前提是要理解摘要将不用以限制或解释权利要求书的范畴或涵义。以下权利要求特此并入具体实施方式中,其中每一权利要求依赖于其自身而作为单独实施例。
实例实施例
实例1包含一种计算机实施方法,其包含:将量化转换成自动机,其中转换包含展开所述量化以控制所述自动机的入度;以及将所述自动机转换成对应于目标装置的机器代码。
实例2包含一种计算机可读媒体,其包含指令,所述指令在由所述计算机执行时使所述计算机执行包括以下各者的操作:将量化转换成自动机,其中转换包含展开所述量化以控制所述自动机的出度;以及将所述自动机转换成对应于目标装置的机器代码。
实例3包含一种计算机,其包括:存储器,其上面存储有软件;以及处理器,其通信地耦合到所述存储器。所述软件在由所述处理器执行时使所述处理器:将量化转换成自动机,其中转换包含展开所述量化以控制所述自动机的入度或出度;以及将所述自动机转换成对应于目标装置的机器代码。
实例4包含一种***,其包括计算机,所述计算机经配置以:将量化转换成自动机,其中转换包含展开所述量化以控制所述自动机的入度或出度;以及将所述自动机转换成对应于目标装置的机器代码。
实例5包含一种计算机实施方法,所述方法包括:将量化转换成自动机,其中转换包含展开所述量化以控制所述自动机的出度;以及将所述自动机转换成对应于目标装置的机器代码。
实例6包含一种计算机可读媒体,其包含指令,所述指令在由所述计算机执行时使所述计算机执行包括以下各者的操作:将量化转换成自动机,其中转换包含展开所述量化以控制所述自动机的入度;以及将所述自动机转换成对应于目标装置的机器代码。
在实例7中,实例1到6中任一者的主题可任选地包含将表达式剖析成包含所述量化的非语言特定表示。
在实例8中,实例1到7中任一者的主题可任选地包含,其中将表达式剖析成非语言特定表示包括将正则表达式剖析成语法树。
在实例9中,实例1到8中任一者的主题可任选地包含,其中转换包含当所述量化的重复表达式为可空时将所述量化展开为具有所述重复表达式的不可空形式的量化,所述不可空形式可被匹配零次。
在实例10中,实例1到9中任一者的主题可任选地包含,其中将所述自动机转换成机器代码包括将所述自动机转换成经配置以对平行机编程的映像。
在实例11中,实例1到10中任一者的主题可任选地包含发布所述映像。
在实例12中,实例1到11中任一者的主题可任选地包含,其中展开所述量化以控制所述自动机的入度包括根据入度限制来展开所述量化。
在实例13中,实例1到12中任一者的主题可任选地包含,其中所述入度限制包含对到所述自动机的状态的转变的数目的限制。
在实例14中,实例1到13中任一者的主题可任选地包含,其中展开所述量化以控制所述自动机的入度包括基于所述目标装置的入度约束来进行展开。
在实例15中,实例1到14中任一者的主题可任选地包含,其中所述量化为正则表达式。
在实例16中,实例1到15中任一者的主题可任选地包含,其中展开所述量化以控制所述自动机的入度包括基于阈值来展开所述量化以控制所述自动机的入度。
在实例17中,实例1到16中任一者的主题可任选地包含,其中所述阈值是基于所述平行机的硬件限制。
在实例18中,实例1到17中任一者的主题可任选地包含,其中展开包含限制所述自动机的每一状态的向外转变使之低于阈值数目。
在实例19中,实例1到18中任一者的主题可任选地包含,其中展开包含最小化所述自动机的每一状态的向外转变。
在实例20中,实例1到19中任一者的主题可任选地包含,其中转换包含当所述量化的重复表达式为可空时将所述量化展开为具有所述重复表达式的不可空形式的量化,所述不可空形式可被匹配零次。
在实例21中,实例1到20中任一者的主题可任选地包含,其中转换包含当所述量化可与单个数目的循环相匹配时展开所述量化以形成自动机,所述自动机具有表示数目等于所述单个数目的连续地连接的表达式的状态,其中所述表达式对应于所述量化的重复表达式。
在实例22中,实例1到21中任一者的主题可任选地包含,其中当所述量化可与多个数目的循环相匹配时,所述多个数目的循环包含第一数目n1个循环和第二数目n2个循环,展开所述量化包含将所述量化***成可与n1-1个循环相匹配的第一量化以及可与一个到n2-n1+1个循环相匹配的第二量化。
在实例23中,实例1到22中任一者的主题可任选地包含将所述映像加载到平行机上。
在实例24中,实例1到23中任一者的主题可任选地包含将所述映像存储于计算机可读媒体上。
在实例25中,实例1到24中任一者的主题可任选地包含通过在所述自动机中针对向外转变对向内转变进行取舍来控制入度和出度。
在实例26中,实例1到25中任一者的主题可任选地包含,其中限制每一状态的向内转变使之在展开时低于阈值数目。
在实例27中,实例1到26中任一者的主题可任选地包含,其中限制所述入度使之与所述出度成一比率。
在实例28中,实例1到27中任一者的主题可任选地包含,其中限制所述入度使之与所述出度成所述比率直到达到所述自动机的状态的向内转变的阈值为止。
在实例29中,实例1到28中任一者的主题可任选地包含,其中所述机器代码包括经配置以对平行机编程的映像,且进一步包括通信地耦合到所述计算机且经配置以将所述映像加载到平行机上的装置。
在实例30中,实例1到29中任一者的主题可任选地包含,其中展开所述量化以控制所述自动机的入度包括根据入度限制来展开所述量化。
在实例31中,实例1到30中任一者的主题可任选地包含,其中所述入度限制包含对到所述自动机的状态的转变的数目的限制。
在实例32中,实例1到31中任一者的主题可任选地包含,其中展开所述量化以控制所述自动机的入度包括基于所述目标装置的入度约束来进行展开。
在实例33中,实例1到32中任一者的主题可任选地包含,其中展开所述量化以控制所述自动机的入度包括基于阈值来展开所述量化以控制所述自动机的入度。
在实例34中,实例1到33中任一者的主题可任选地包含,其中所述阈值是基于所述平行机的硬件限制。
在实例35中,实例1到34中任一者的主题可任选地包含将正则表达式剖析成语法树。
在实例36中,实例1到35中任一者的主题可任选地包含,其中将所述自动机转换成机器代码包括将所述自动机转换成经配置以对平行机编程的映像。
在实例37中,实例1到36中任一者的主题可任选地包含发布所述映像。
在实例38中,实例1到37中任一者的主题可任选地包含,其中展开所述量化以控制所述自动机的出度包括根据出度限制来展开所述量化。
在实例39中,实例1到38中任一者的主题可任选地包含,其中所述出度限制包含对从所述自动机的状态向外的转变的数目的限制。
在实例40中,实例1到39中任一者的主题可任选地包含,其中展开所述量化以控制所述自动机的出度包括基于所述目标装置的出度约束来进行展开。
在实例41中,实例1到40中任一者的主题可任选地包含,其中展开所述量化以控制所述自动机的出度包括基于阈值来展开所述量化以控制所述自动机的出度。
在实例42中,实例1到41中任一者的主题可任选地包含,其中所述阈值是基于所述平行机的硬件限制。
在实例43中,实例1到42中任一者的主题可任选地包含,其中展开包含限制所述自动机的每一状态的向内转变使之低于阈值数目。
在实例44中,实例1到43中任一者的主题可任选地包含,其中展开包含最小化所述自动机的每一状态的向内转变。
在实例45中,实例1到44中任一者的主题可任选地包含,其中转换包含当所述量化的重复表达式为可空时将所述量化展开为具有所述重复表达式的不可空形式的量化,所述不可空形式可被匹配零次。
在实例46中,实例1到45中任一者的主题可任选地包含,其中转换包含当所述量化可与单个数目的循环相匹配时展开所述量化以形成自动机,所述自动机具有表示数目等于所述单个数目的连续地连接的表达式的状态,其中所述表达式对应于所述量化的重复表达式。
在实例47中,实例1到46中任一者的主题可任选地包含,其中当所述量化可与多个数目的循环相匹配时,所述多个数目的循环包含第一数目n1个循环和第二数目n2个循环,展开所述量化包含将所述量化***成可与n1-1个循环相匹配的第一量化以及可与一个到n2-n1+1个循环相匹配的第二量化。
实例48包含通过使用实例1到47中任一者的主题产生的映像来编程的平行机。
Claims (39)
1.一种产生机器代码的计算机实施方法,其包括:
将量化转换成自动机,其中转换包含基于目标装置的入度约束来展开所述量化以控制所述自动机的一状态的入度;以及
将所述自动机转换成对应于所述目标装置的机器代码。
2.根据权利要求1所述的计算机实施方法,其进一步包括:
将表达式剖析成包含所述量化的非语言特定表示。
3.根据权利要求2所述的计算机实施方法,其中将表达式剖析成非语言特定表示包括:将正则表达式剖析成语法树。
4.根据权利要求1所述的计算机实施方法,其中转换包含当所述量化的重复表达式为可空时将所述量化展开为具有所述重复表达式的不可空形式的量化,所述不可空形式可被匹配零次。
5.根据权利要求1所述的计算机实施方法,其中将所述自动机转换成机器代码包括:将所述自动机转换成经配置以对平行机编程的映像。
6.根据权利要求5所述的计算机实施方法,其进一步包括:
发布所述映像。
7.根据权利要求1所述的计算机实施方法,其中基于所述目标装置的入度约束来展开所述量化以控制所述自动机的所述状态的入度包括:将所述量化作为入度限制的函数来展开。
8.根据权利要求7所述的计算机实施方法,其中所述入度限制包含对到所述自动机的一状态的转变的数目的限制。
9.根据权利要求1所述的计算机实施方法,其中所述量化为正则表达式。
10.根据权利要求1所述的计算机实施方法,其中基于所述目标装置的入度约束来展开所述量化以控制所述自动机的所述状态的入度包括:基于阈值来展开所述量化以控制所述自动机的状态的入度。
11.根据权利要求10所述的计算机实施方法,其中所述阈值是基于平行机的硬件限制。
12.根据权利要求1所述的计算机实施方法,其中展开包含限制所述自动机的每一状态的向内转变使之低于阈值数目。
13.根据权利要求1所述的计算机实施方法,其中展开包含最小化所述自动机的每一状态的向内转变。
14.根据权利要求1所述的计算机实施方法,其中转换包含当所述量化的重复表达式为可空时将所述量化展开为具有所述重复表达式的不可空形式的量化,所述不可空形式可被匹配零次。
15.根据权利要求1所述的计算机实施方法,其中转换包含:
当所述量化可与单个数目的循环相匹配时,展开所述量化以形成自动机,所述自动机具有表示数目等于所述单个数目的连续地连接的表达式的状态,其中所述表达式对应于所述量化的重复表达式。
16.根据权利要求1所述的计算机实施方法,其中当所述量化可与多个数目的循环相匹配时,所述多个数目的循环包含第一数目n1个循环和第二数目n2个循环,展开所述量化包含:
将所述量化***成可与n1-1个循环相匹配的第一量化以及可与一个到n2-n1+1个循环相匹配的第二量化。
17.一种用于产生机器代码的的装置,其包括:
用于将量化转换成自动机的装置,其中转换包含基于目标装置的入度约束来展开所述量化以控制所述自动机的一状态的入度;以及
用于将所述自动机转换成对应于所述目标装置的机器代码的装置。
18.根据权利要求17所述的装置,进一步包括用于限制每一状态的向内转变使之在展开时低于阈值数目的装置。
19.一种用于产生机器代码的装置,其包括:
用于将量化转换成自动机的装置,其中转换包含基于目标装置的出度约束来展开所述量化以控制所述自动机的一状态的出度;以及
用于将所述自动机转换成对应于所述目标装置的机器代码的装置。
20.根据权利要求19所述的装置,其中所述机器代码包括经配置以对平行机编程的映像,且进一步包括:
通信地耦合到计算机且经配置以将所述映像加载到平行机上的装置。
21.根据权利要求19所述的装置,其中用于基于所述目标装置的出度约束来展开所述量化以控制所述自动机的所述状态的出度的装置包括:用于将所述量化作为出度限制的函数来展开的装置。
22.根据权利要求21所述的装置,其中所述出度限制包含对到所述自动机的一状态的转变的数目的限制。
23.根据权利要求19所述的装置,其中用于基于所述目标装置的出度约束来展开所述量化以控制所述自动机的所述状态的出度的装置包括:用于基于阈值来展开所述量化以控制所述自动机的状态的出度的装置。
24.根据权利要求23所述的装置,其中所述阈值是基于平行机的硬件限制。
25.一种用于产生机器代码的计算机实施方法,其包括:
将量化转换成自动机,其中转换包含基于目标装置的出度约束来展开所述量化以控制所述自动机的一状态的出度;以及
将所述自动机转换成对应于所述目标装置的机器代码。
26.根据权利要求25所述的计算机实施方法,其进一步包括:
将正则表达式剖析成语法树。
27.根据权利要求25所述的计算机实施方法,其中将所述自动机转换成机器代码包括:
将所述自动机转换成经配置以对平行机编程的映像。
28.根据权利要求27所述的计算机实施方法,其进一步包括:
发布所述映像。
29.根据权利要求25所述的计算机实施方法,其中基于所述目标装置的出度约束来展开所述量化以控制所述自动机的所述状态的出度包括:将所述量化作为出度限制的函数来展开。
30.根据权利要求29所述的计算机实施方法,其中所述出度限制包含对从所述自动机的一状态向外的转变的数目的限制。
31.根据权利要求25所述的计算机实施方法,其中基于所述目标装置的出度约束来展开所述量化以控制所述自动机的所述状态的出度包括:基于阈值来展开所述量化以控制所述自动机的状态的出度。
32.根据权利要求31所述的计算机实施方法,其中所述阈值是基于所述目标装置的硬件限制,所述目标装置为平行机。
33.根据权利要求25所述的计算机实施方法,其中展开包含限制所述自动机的每一状态的向外转变使之低于阈值数目。
34.根据权利要求25所述的计算机实施方法,其中展开包含最小化所述自动机的每一状态的向外转变。
35.根据权利要求25所述的计算机实施方法,其中转换包含当所述量化的重复表达式为可空时将所述量化展开为具有所述重复表达式的不可空形式的量化,所述不可空形式可被匹配零次。
36.根据权利要求25所述的计算机实施方法,其中转换包含:
当所述量化可与单个数目的循环相匹配时,展开所述量化以形成自动机,所述自动机具有表示数目等于所述单个数目的连续地连接的表达式的状态,其中所述表达式对应于所述量化的重复表达式。
37.根据权利要求25所述的计算机实施方法,其中当所述量化可与多个数目的循环相匹配时,所述多个数目的循环包含第一数目n1个循环和第二数目n2个循环,展开所述量化包含:
将所述量化***成可与n1-1个循环相匹配的第一量化以及可与一个到n2-n1+1个循环相匹配的第二量化。
38.根据权利要求27所述的计算机实施方法,其进一步包括:
将所述映像加载到平行机上。
39.根据权利要求27所述的计算机实施方法,其进一步包括:
将所述映像存储于计算机可读媒体上。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201161436051P | 2011-01-25 | 2011-01-25 | |
US61/436,051 | 2011-01-25 | ||
PCT/US2012/022441 WO2012103148A2 (en) | 2011-01-25 | 2012-01-24 | Unrolling quantifications to control in-degree and/or out degree of automaton |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103443767A CN103443767A (zh) | 2013-12-11 |
CN103443767B true CN103443767B (zh) | 2016-01-20 |
Family
ID=46545131
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280013925.9A Active CN103443767B (zh) | 2011-01-25 | 2012-01-24 | 展开量化以控制自动机的入度和/或出度 |
Country Status (7)
Country | Link |
---|---|
US (2) | US8726256B2 (zh) |
EP (1) | EP2668577B1 (zh) |
JP (1) | JP5857072B2 (zh) |
KR (1) | KR101607736B1 (zh) |
CN (1) | CN103443767B (zh) |
TW (1) | TWI502501B (zh) |
WO (1) | WO2012103148A2 (zh) |
Families Citing this family (58)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8209521B2 (en) | 2008-10-18 | 2012-06-26 | Micron Technology, Inc. | Methods of indirect register access including automatic modification of a directly accessible address register |
US8938590B2 (en) * | 2008-10-18 | 2015-01-20 | Micron Technology, Inc. | Indirect register access method and system |
US7917684B2 (en) | 2008-11-05 | 2011-03-29 | Micron Technology, Inc. | Bus translator |
US7970964B2 (en) | 2008-11-05 | 2011-06-28 | Micron Technology, Inc. | Methods and systems to accomplish variable width data input |
US8402188B2 (en) | 2008-11-10 | 2013-03-19 | Micron Technology, Inc. | Methods and systems for devices with a self-selecting bus decoder |
US9164945B2 (en) | 2008-12-01 | 2015-10-20 | Micron Technology, Inc. | Devices, systems, and methods to synchronize parallel processing of a single data stream |
US20100138575A1 (en) | 2008-12-01 | 2010-06-03 | Micron Technology, Inc. | Devices, systems, and methods to synchronize simultaneous dma parallel processing of a single data stream by multiple devices |
US9348784B2 (en) | 2008-12-01 | 2016-05-24 | Micron Technology, Inc. | Systems and methods for managing endian mode of a device |
US8140780B2 (en) | 2008-12-31 | 2012-03-20 | Micron Technology, Inc. | Systems, methods, and devices for configuring a device |
US20100174887A1 (en) | 2009-01-07 | 2010-07-08 | Micron Technology Inc. | Buses for Pattern-Recognition Processors |
US8281395B2 (en) | 2009-01-07 | 2012-10-02 | Micron Technology, Inc. | Pattern-recognition processor with matching-data reporting module |
US8214672B2 (en) | 2009-01-07 | 2012-07-03 | Micron Technology, Inc. | Method and systems for power consumption management of a pattern-recognition processor |
US9836555B2 (en) | 2009-06-26 | 2017-12-05 | Micron Technology, Inc. | Methods and devices for saving and/or restoring a state of a pattern-recognition processor |
US9501705B2 (en) | 2009-12-15 | 2016-11-22 | Micron Technology, Inc. | Methods and apparatuses for reducing power consumption in a pattern recognition processor |
US9323994B2 (en) | 2009-12-15 | 2016-04-26 | Micron Technology, Inc. | Multi-level hierarchical routing matrices for pattern-recognition processors |
US8766666B2 (en) * | 2010-06-10 | 2014-07-01 | Micron Technology, Inc. | Programmable device, hierarchical parallel machines, and methods for providing state information |
US8601013B2 (en) | 2010-06-10 | 2013-12-03 | Micron Technology, Inc. | Analyzing data using a hierarchical structure |
WO2012103151A2 (en) | 2011-01-25 | 2012-08-02 | Micron Technology, Inc. | State grouping for element utilization |
EP2668574B1 (en) | 2011-01-25 | 2021-11-24 | Micron Technology, INC. | Utilizing special purpose elements to implement a fsm |
KR101640295B1 (ko) | 2011-01-25 | 2016-07-15 | 마이크론 테크놀로지, 인크. | 정규 표현을 컴파일하기 위한 방법 및 장치 |
KR101607736B1 (ko) | 2011-01-25 | 2016-03-30 | 마이크론 테크놀로지, 인크. | 오토마톤의 진입 차수 및/또는 진출 차수를 제어하기 위한 양화 언롤링 |
US9443156B2 (en) | 2011-12-15 | 2016-09-13 | Micron Technology, Inc. | Methods and systems for data analysis in a state machine |
US8648621B2 (en) | 2011-12-15 | 2014-02-11 | Micron Technology, Inc. | Counter operation in a state machine lattice |
US8680888B2 (en) | 2011-12-15 | 2014-03-25 | Micron Technologies, Inc. | Methods and systems for routing in a state machine |
US8782624B2 (en) * | 2011-12-15 | 2014-07-15 | Micron Technology, Inc. | Methods and systems for detection in a state machine |
US8593175B2 (en) | 2011-12-15 | 2013-11-26 | Micron Technology, Inc. | Boolean logic in a state machine lattice |
US20130275709A1 (en) | 2012-04-12 | 2013-10-17 | Micron Technology, Inc. | Methods for reading data from a storage buffer including delaying activation of a column select |
US9524248B2 (en) | 2012-07-18 | 2016-12-20 | Micron Technology, Inc. | Memory management for a hierarchical memory system |
US9389841B2 (en) * | 2012-07-18 | 2016-07-12 | Micron Technology, Inc. | Methods and systems for using state vector data in a state machine engine |
US9304968B2 (en) | 2012-07-18 | 2016-04-05 | Micron Technology, Inc. | Methods and devices for programming a state machine engine |
US9235798B2 (en) | 2012-07-18 | 2016-01-12 | Micron Technology, Inc. | Methods and systems for handling data received by a state machine engine |
US9075428B2 (en) | 2012-08-31 | 2015-07-07 | Micron Technology, Inc. | Results generation for state machine engines |
US9063532B2 (en) | 2012-08-31 | 2015-06-23 | Micron Technology, Inc. | Instruction insertion in state machine engines |
US9501131B2 (en) | 2012-08-31 | 2016-11-22 | Micron Technology, Inc. | Methods and systems for power management in a pattern recognition processing system |
US9268881B2 (en) | 2012-10-19 | 2016-02-23 | Intel Corporation | Child state pre-fetch in NFAs |
US9747194B2 (en) * | 2012-10-30 | 2017-08-29 | Ebay Inc. | Systems and methods to maintain consistency between software specification and code |
US9117170B2 (en) | 2012-11-19 | 2015-08-25 | Intel Corporation | Complex NFA state matching method that matches input symbols against character classes (CCLs), and compares sequence CCLs in parallel |
US9665664B2 (en) | 2012-11-26 | 2017-05-30 | Intel Corporation | DFA-NFA hybrid |
US9251440B2 (en) * | 2012-12-18 | 2016-02-02 | Intel Corporation | Multiple step non-deterministic finite automaton matching |
US9304768B2 (en) | 2012-12-18 | 2016-04-05 | Intel Corporation | Cache prefetch for deterministic finite automaton instructions |
US9268570B2 (en) | 2013-01-23 | 2016-02-23 | Intel Corporation | DFA compression and execution |
US9448965B2 (en) | 2013-03-15 | 2016-09-20 | Micron Technology, Inc. | Receiving data streams in parallel and providing a first portion of data to a first state machine engine and a second portion to a second state machine |
US9703574B2 (en) | 2013-03-15 | 2017-07-11 | Micron Technology, Inc. | Overflow detection and correction in state machine engines |
US10229104B2 (en) | 2013-08-01 | 2019-03-12 | Sonicwall Inc. | Efficient DFA generation for non-matching characters and character classes in regular expressions |
US9489215B2 (en) * | 2013-08-01 | 2016-11-08 | Dell Software Inc. | Managing an expression-based DFA construction process |
US11366675B2 (en) | 2014-12-30 | 2022-06-21 | Micron Technology, Inc. | Systems and devices for accessing a state machine |
US10430210B2 (en) | 2014-12-30 | 2019-10-01 | Micron Technology, Inc. | Systems and devices for accessing a state machine |
WO2016109571A1 (en) | 2014-12-30 | 2016-07-07 | Micron Technology, Inc | Devices for time division multiplexing of state machine engine signals |
US10691964B2 (en) | 2015-10-06 | 2020-06-23 | Micron Technology, Inc. | Methods and systems for event reporting |
US10846103B2 (en) | 2015-10-06 | 2020-11-24 | Micron Technology, Inc. | Methods and systems for representing processing resources |
US10977309B2 (en) | 2015-10-06 | 2021-04-13 | Micron Technology, Inc. | Methods and systems for creating networks |
US10146555B2 (en) | 2016-07-21 | 2018-12-04 | Micron Technology, Inc. | Adaptive routing to avoid non-repairable memory and logic defects on automata processor |
US10019311B2 (en) | 2016-09-29 | 2018-07-10 | Micron Technology, Inc. | Validation of a symbol response memory |
US10268602B2 (en) | 2016-09-29 | 2019-04-23 | Micron Technology, Inc. | System and method for individual addressing |
US10929764B2 (en) | 2016-10-20 | 2021-02-23 | Micron Technology, Inc. | Boolean satisfiability |
US10592450B2 (en) | 2016-10-20 | 2020-03-17 | Micron Technology, Inc. | Custom compute cores in integrated circuit devices |
US9996328B1 (en) * | 2017-06-22 | 2018-06-12 | Archeo Futurus, Inc. | Compiling and optimizing a computer code by minimizing a number of states in a finite machine corresponding to the computer code |
US10481881B2 (en) * | 2017-06-22 | 2019-11-19 | Archeo Futurus, Inc. | Mapping a computer code to wires and gates |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013452A (zh) * | 2007-02-05 | 2007-08-08 | 江苏大学 | 一种符号化的模型检测方法 |
CN101339501A (zh) * | 2008-08-12 | 2009-01-07 | 北京航空航天大学 | 基于有向图的ws-bpel控制环路检测方法 |
CN101360088A (zh) * | 2007-07-30 | 2009-02-04 | 华为技术有限公司 | 正则表达式编译、匹配***及编译、匹配方法 |
Family Cites Families (78)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5081608A (en) * | 1988-04-18 | 1992-01-14 | Matsushita Electric Industrial Co., Ltd. | Apparatus for processing record-structured data by inserting replacement data of arbitrary length into selected data fields |
JP3130326B2 (ja) | 1991-03-20 | 2001-01-31 | 富士通株式会社 | 階層ネットワーク構成演算素子 |
US5586266A (en) | 1993-10-15 | 1996-12-17 | International Business Machines Corporation | System and method for adaptive, active monitoring of a serial data stream having a characteristic pattern |
US5537580A (en) | 1994-12-21 | 1996-07-16 | Vlsi Technology, Inc. | Integrated circuit fabrication using state machine extraction from behavioral hardware description language |
US5831853A (en) | 1995-06-07 | 1998-11-03 | Xerox Corporation | Automatic construction of digital controllers/device drivers for electro-mechanical systems using component models |
US5729678A (en) * | 1996-03-04 | 1998-03-17 | Ag Communication Systems Corporation | Bus monitor system |
EP0938701B1 (en) | 1996-11-14 | 2003-11-05 | Alcatel USA Sourcing, L.P. | Generic software state machine and method of constructing dynamic objects for an application program |
US5966534A (en) | 1997-06-27 | 1999-10-12 | Cooke; Laurence H. | Method for compiling high level programming languages into an integrated processor with reconfigurable logic |
US6748588B1 (en) | 1999-03-31 | 2004-06-08 | Microsoft Corporation | One-pass greedy-pattern-matching finite-state-machine code generation |
US6262594B1 (en) | 1999-11-05 | 2001-07-17 | Ati International, Srl | Apparatus and method for configurable use of groups of pads of a system on chip |
US6564336B1 (en) * | 1999-12-29 | 2003-05-13 | General Electric Company | Fault tolerant database for picture archiving and communication systems |
US7140018B1 (en) | 2000-06-20 | 2006-11-21 | International Business Machines Corporation | Method of using a distinct flow of computational control as a reusable abstract data object |
US6507903B1 (en) | 2000-06-20 | 2003-01-14 | International Business Machines Corporation | High performance non-blocking parallel storage manager for parallel software executing on coordinates |
US6832378B1 (en) | 2000-06-20 | 2004-12-14 | International Business Machines Corporation | Parallel software processing system |
GB2367917A (en) | 2000-10-12 | 2002-04-17 | Qas Systems Ltd | Retrieving data representing a postal address from a database of postal addresses using a trie structure |
US7020850B2 (en) | 2001-05-02 | 2006-03-28 | The Mathworks, Inc. | Event-based temporal logic |
JP4846924B2 (ja) | 2001-05-31 | 2011-12-28 | キヤノン株式会社 | パターン認識装置 |
US7546354B1 (en) | 2001-07-06 | 2009-06-09 | Emc Corporation | Dynamic network based storage with high availability |
JP2003044184A (ja) | 2001-08-01 | 2003-02-14 | Canon Inc | データ処理装置及び電力制御方法 |
US7170891B2 (en) | 2001-08-30 | 2007-01-30 | Messenger Terabit Networks, Inc. | High speed data classification system |
US20030066050A1 (en) | 2001-09-26 | 2003-04-03 | Wang Douglas W. | Method and system for programming devices using finite state machine descriptions |
US6957371B2 (en) | 2001-12-04 | 2005-10-18 | Intellitech Corporation | Method and apparatus for embedded built-in self-test (BIST) of electronic circuits and systems |
US6785872B2 (en) | 2002-01-22 | 2004-08-31 | Hewlett-Packard Development Company, L.P. | Algorithm-to-hardware system and method for creating a digital circuit |
US20040127207A1 (en) | 2002-09-25 | 2004-07-01 | Interdigital Technology Corporation | Programmable radio interface |
US7124392B2 (en) | 2002-09-27 | 2006-10-17 | Stmicroelectronics, Pvt. Ltd. | Mapping of programmable logic devices |
US7171561B2 (en) | 2002-10-17 | 2007-01-30 | The United States Of America As Represented By The Secretary Of The Air Force | Method and apparatus for detecting and extracting fileprints |
CN1894559A (zh) * | 2003-03-17 | 2007-01-10 | 索尼电子有限公司 | 执行使命引擎的方法和装置 |
JP4620944B2 (ja) | 2003-10-16 | 2011-01-26 | キヤノン株式会社 | 積和演算回路及びその方法 |
US7487542B2 (en) | 2004-01-14 | 2009-02-03 | International Business Machines Corporation | Intrusion detection using a network processor and a parallel pattern detection engine |
US20050268258A1 (en) | 2004-06-01 | 2005-12-01 | Tera Systems, Inc. | Rule-based design consultant and method for integrated circuit design |
US20050283743A1 (en) * | 2004-06-07 | 2005-12-22 | Mulholland Philip J | Method for generating hardware information |
US20060020589A1 (en) | 2004-07-26 | 2006-01-26 | Nokia Corporation | System and method for searching for content stored by one or more media servers |
US8135652B2 (en) | 2004-10-29 | 2012-03-13 | Nec Laboratories America, Inc. | Parallel support vector method and apparatus |
EP1669886A1 (fr) * | 2004-12-08 | 2006-06-14 | France Telecom | Construction d'un automate compilant des règles de transcription graphème/phonème pour un phonétiseur |
US7392229B2 (en) | 2005-02-12 | 2008-06-24 | Curtis L. Harris | General purpose set theoretic processor |
US7761851B2 (en) | 2005-05-31 | 2010-07-20 | International Business Machines Corporation | Computer method and system for integrating software development and deployment |
US7805301B2 (en) | 2005-07-01 | 2010-09-28 | Microsoft Corporation | Covariance estimation for pattern recognition |
WO2007055181A1 (ja) | 2005-11-11 | 2007-05-18 | Matsushita Electric Industrial Co., Ltd. | 対話支援装置 |
JP4528728B2 (ja) | 2006-01-31 | 2010-08-18 | 株式会社東芝 | デジタル回路の自動設計装置、自動設計方法、および自動設計プログラム |
US7427871B2 (en) | 2006-06-21 | 2008-09-23 | Element Cxi, Llc | Fault tolerant integrated circuit architecture |
US8065249B1 (en) | 2006-10-13 | 2011-11-22 | Harris Curtis L | GPSTP with enhanced aggregation functionality |
US7774286B1 (en) | 2006-10-24 | 2010-08-10 | Harris Curtis L | GPSTP with multiple thread functionality |
US20080168013A1 (en) | 2006-12-05 | 2008-07-10 | Paul Cadaret | Scalable pattern recognition system |
US8656381B2 (en) | 2006-12-07 | 2014-02-18 | International Business Machines Corporation | Presenting machine instructions in a machine-independent tree form suitable for post-link optimizations |
US7899977B2 (en) | 2006-12-08 | 2011-03-01 | Pandya Ashish A | Programmable intelligent search memory |
US8561037B2 (en) | 2007-08-29 | 2013-10-15 | Convey Computer | Compiler for generating an executable comprising instructions for a plurality of different instruction sets |
JP4957500B2 (ja) * | 2007-10-12 | 2012-06-20 | 日本電気株式会社 | 文字列照合回路 |
CN101499065B (zh) * | 2008-02-01 | 2011-11-02 | 华为技术有限公司 | 基于fa的表项压缩方法及装置、表项匹配方法及装置 |
JP5321589B2 (ja) * | 2008-08-13 | 2013-10-23 | 日本電気株式会社 | 有限オートマトン生成装置、パターンマッチング装置、有限オートマトン回路生成方法およびプログラム |
US8095494B2 (en) | 2008-10-16 | 2012-01-10 | International Business Machines Corporation | Rules-based cross-FSM transition triggering |
US8209521B2 (en) | 2008-10-18 | 2012-06-26 | Micron Technology, Inc. | Methods of indirect register access including automatic modification of a directly accessible address register |
US8938590B2 (en) | 2008-10-18 | 2015-01-20 | Micron Technology, Inc. | Indirect register access method and system |
US8805686B2 (en) | 2008-10-31 | 2014-08-12 | Soundbound, Inc. | Melodis crystal decoder method and device for searching an utterance by accessing a dictionary divided among multiple parallel processors |
US7917684B2 (en) | 2008-11-05 | 2011-03-29 | Micron Technology, Inc. | Bus translator |
US7970964B2 (en) | 2008-11-05 | 2011-06-28 | Micron Technology, Inc. | Methods and systems to accomplish variable width data input |
US9639493B2 (en) | 2008-11-05 | 2017-05-02 | Micron Technology, Inc. | Pattern-recognition processor with results buffer |
US20100118425A1 (en) | 2008-11-11 | 2010-05-13 | Menachem Rafaelof | Disturbance rejection in a servo control loop using pressure-based disc mode sensor |
US20100138575A1 (en) | 2008-12-01 | 2010-06-03 | Micron Technology, Inc. | Devices, systems, and methods to synchronize simultaneous dma parallel processing of a single data stream by multiple devices |
US9348784B2 (en) | 2008-12-01 | 2016-05-24 | Micron Technology, Inc. | Systems and methods for managing endian mode of a device |
US9164945B2 (en) | 2008-12-01 | 2015-10-20 | Micron Technology, Inc. | Devices, systems, and methods to synchronize parallel processing of a single data stream |
US10007486B2 (en) | 2008-12-01 | 2018-06-26 | Micron Technology, Inc. | Systems and methods to enable identification of different data sets |
TWI395103B (zh) | 2008-12-31 | 2013-05-01 | C Media Electronics Inc | 自動執行訊號處理方法與具有該自動執行功能之裝置 |
US8140780B2 (en) | 2008-12-31 | 2012-03-20 | Micron Technology, Inc. | Systems, methods, and devices for configuring a device |
US8214672B2 (en) | 2009-01-07 | 2012-07-03 | Micron Technology, Inc. | Method and systems for power consumption management of a pattern-recognition processor |
US20100174887A1 (en) | 2009-01-07 | 2010-07-08 | Micron Technology Inc. | Buses for Pattern-Recognition Processors |
US8281395B2 (en) | 2009-01-07 | 2012-10-02 | Micron Technology, Inc. | Pattern-recognition processor with matching-data reporting module |
US8843523B2 (en) * | 2009-01-12 | 2014-09-23 | Micron Technology, Inc. | Devices, systems, and methods for communicating pattern matching results of a parallel pattern search engine |
US20100325633A1 (en) | 2009-06-19 | 2010-12-23 | Microsoft Corporation | Searching Regular Expressions With Virtualized Massively Parallel Programmable Hardware |
US9836555B2 (en) | 2009-06-26 | 2017-12-05 | Micron Technology, Inc. | Methods and devices for saving and/or restoring a state of a pattern-recognition processor |
US9501705B2 (en) | 2009-12-15 | 2016-11-22 | Micron Technology, Inc. | Methods and apparatuses for reducing power consumption in a pattern recognition processor |
US8489534B2 (en) | 2009-12-15 | 2013-07-16 | Paul D. Dlugosch | Adaptive content inspection |
US9323994B2 (en) | 2009-12-15 | 2016-04-26 | Micron Technology, Inc. | Multi-level hierarchical routing matrices for pattern-recognition processors |
US8601013B2 (en) | 2010-06-10 | 2013-12-03 | Micron Technology, Inc. | Analyzing data using a hierarchical structure |
US8766666B2 (en) | 2010-06-10 | 2014-07-01 | Micron Technology, Inc. | Programmable device, hierarchical parallel machines, and methods for providing state information |
KR101640295B1 (ko) | 2011-01-25 | 2016-07-15 | 마이크론 테크놀로지, 인크. | 정규 표현을 컴파일하기 위한 방법 및 장치 |
WO2012103151A2 (en) | 2011-01-25 | 2012-08-02 | Micron Technology, Inc. | State grouping for element utilization |
EP2668574B1 (en) | 2011-01-25 | 2021-11-24 | Micron Technology, INC. | Utilizing special purpose elements to implement a fsm |
KR101607736B1 (ko) | 2011-01-25 | 2016-03-30 | 마이크론 테크놀로지, 인크. | 오토마톤의 진입 차수 및/또는 진출 차수를 제어하기 위한 양화 언롤링 |
-
2012
- 2012-01-24 KR KR1020137022037A patent/KR101607736B1/ko active IP Right Grant
- 2012-01-24 JP JP2013550671A patent/JP5857072B2/ja active Active
- 2012-01-24 WO PCT/US2012/022441 patent/WO2012103148A2/en active Application Filing
- 2012-01-24 EP EP12739652.1A patent/EP2668577B1/en active Active
- 2012-01-24 CN CN201280013925.9A patent/CN103443767B/zh active Active
- 2012-01-24 US US13/357,505 patent/US8726256B2/en active Active
- 2012-01-30 TW TW101102988A patent/TWI502501B/zh active
-
2014
- 2014-04-14 US US14/252,600 patent/US9298437B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013452A (zh) * | 2007-02-05 | 2007-08-08 | 江苏大学 | 一种符号化的模型检测方法 |
CN101360088A (zh) * | 2007-07-30 | 2009-02-04 | 华为技术有限公司 | 正则表达式编译、匹配***及编译、匹配方法 |
US20100131935A1 (en) * | 2007-07-30 | 2010-05-27 | Huawei Technologies Co., Ltd. | System and method for compiling and matching regular expressions |
CN101339501A (zh) * | 2008-08-12 | 2009-01-07 | 北京航空航天大学 | 基于有向图的ws-bpel控制环路检测方法 |
Non-Patent Citations (1)
Title |
---|
《状态机的若干代数性质》;林莉;《CNKI》;20070101;第31-34 * |
Also Published As
Publication number | Publication date |
---|---|
TWI502501B (zh) | 2015-10-01 |
US20140229926A1 (en) | 2014-08-14 |
KR101607736B1 (ko) | 2016-03-30 |
CN103443767A (zh) | 2013-12-11 |
WO2012103148A2 (en) | 2012-08-02 |
WO2012103148A3 (en) | 2012-11-15 |
EP2668577A2 (en) | 2013-12-04 |
JP5857072B2 (ja) | 2016-02-10 |
KR20140018881A (ko) | 2014-02-13 |
US20120192165A1 (en) | 2012-07-26 |
TW201246071A (en) | 2012-11-16 |
EP2668577A4 (en) | 2015-11-18 |
US8726256B2 (en) | 2014-05-13 |
JP2014506693A (ja) | 2014-03-17 |
US9298437B2 (en) | 2016-03-29 |
EP2668577B1 (en) | 2019-08-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103443767B (zh) | 展开量化以控制自动机的入度和/或出度 | |
CN103547999B (zh) | 利用专用元件实施有限状态机 | |
CN103547998B (zh) | 用于编译正则表达式的方法和设备 | |
US9866218B2 (en) | Boolean logic in a state machine lattice | |
CN103430148B (zh) | 用于元件利用的状态分组 | |
JP2014506693A5 (zh) | ||
CN103999035A (zh) | 用于状态机中的数据分析的方法及*** | |
CN104011736A (zh) | 用于状态机中的检测的方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |