JP2014506692A - Fsmを実装するための専用要素の利用 - Google Patents

Fsmを実装するための専用要素の利用 Download PDF

Info

Publication number
JP2014506692A
JP2014506692A JP2013550670A JP2013550670A JP2014506692A JP 2014506692 A JP2014506692 A JP 2014506692A JP 2013550670 A JP2013550670 A JP 2013550670A JP 2013550670 A JP2013550670 A JP 2013550670A JP 2014506692 A JP2014506692 A JP 2014506692A
Authority
JP
Japan
Prior art keywords
state
computer
quantification
dedicated
counter
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
Application number
JP2013550670A
Other languages
English (en)
Other versions
JP5848778B2 (ja
JP2014506692A5 (ja
Inventor
シュー,ジュンジュエン
グレンデニング,ポール
Original Assignee
マイクロン テクノロジー, インク.
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by マイクロン テクノロジー, インク. filed Critical マイクロン テクノロジー, インク.
Publication of JP2014506692A publication Critical patent/JP2014506692A/ja
Publication of JP2014506692A5 publication Critical patent/JP2014506692A5/ja
Application granted granted Critical
Publication of JP5848778B2 publication Critical patent/JP5848778B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4498Finite 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)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)

Abstract

コンパイラに対する装置、システム、および方法が説明される。1つのかかるコンパイラは、汎用要素および専用要素を含む要素のセットに対応する機械コードを生成する。コンパイラは、専用要素に対応する、関係的に結合された演算子の配列内の部分を識別する。コンパイラは、その部分が、専用要素にマッピングされるための条件を満足するかどうかも判断する。また、コンパイラは、その配列を、複数の状態を含むオートマトンに変換し、その部分が条件を満足する場合、その部分は専用要素に対応する専用状態を使用して変換される。コンパイラは、オートマトンを機械コードにも変換する。追加の装置、システム、および方法が開示される。
【選択図】図3

Description

〔優先権主張〕
本特許出願は、2011年1月25日に出願された、「UTILIZING SPECIAL PURPOSE ELEMENTS TO IMPLEMENT A FSM」という名称の米国仮特許出願整理番号61/436,022に対する優先権の利益を主張し、これによって、参照によりその全体として本明細書に組み込まれる。
有限状態機械(FSM)(有限状態オートマトン、オートマトン、または単に状態機械とも呼ばれる)は、状態、状態間の遷移、および動作の表現である。有限状態機械は、並列マシン用のデジタル論理、コンピュータプログラム、またはイメージを設計するために使用できる。有限状態機械は、有限数の状態、それら状態間の遷移、および出力から成る挙動のモデルである。有限状態機械は、グラフとして表すことができ、グラフのバーテックスがFSMの状態に対応し、グラフのエッジが、有限状態機械に対する1つまたは複数の入力に起因して生じる状態間の遷移に対応する。有限状態機械は、確率的遷移、ファジー状態、または他の奇妙な事柄(oddity)も持つことができる。有限状態機械は、入力特徴、および随意の出力特徴を有する有限内部メモリとして機能できる。出力を有する有限状態機械は、有限状態トランスデューサと呼ぶことができる。
有限状態機械の用途には、コンピュータによる電子設計の自動化、通信プロトコル設計、生物学および人工知能研究、ならびに自然言語の文法を説明する言語学を含む。
本発明の様々な実施形態に従った、決定性有限状態機械の一例を示す。 本発明の様々な実施形態に従った、非決定性有限状態機械の一例を示す。 本発明の様々な実施形態に従って、コンパイラがソースコードを機械コードに変換するための方法の一例を示す。 本発明の様々な実施形態に従って、構文木をオートマトンに変換するための方法を示す。 本発明の様々な実施形態に従った、並列マシンの一例を示す。 本発明の様々な実施形態に従って、有限状態機械エンジンとして実装された図5の並列マシンの一例を示す。 本発明の様々な実施形態に従って、図6の有限状態機械エンジンのブロックの一例を示す。 本発明の様々な実施形態に従って、図7のブロックの行(row)の一例を示す。 本発明の様々な実施形態に従って、図8の行の2つのグループの一例を示す。 本発明の様々な実施形態に従って、コンパイラがソースコードを、図5の並列マシンをプログラムするように構成されたイメージに変換するための方法の一例を示す。 本発明の様々な実施形態に従った、専用カウンタ状態を有するオートマトンの一例を示す。 本発明の様々な実施形態に従った、専用カウンタ状態を有するオートマトンの別の例を示す。 本発明の様々な実施形態に従った、オートマトン例を示す。 本発明の様々な実施形態に従った、オートマトン例を示す。 本発明の様々な実施形態に従った、プレフィックスなし条件を満足しない数量化を有する正規表現のためのオートマトン例を示す。 本発明の様々な実施形態に従った、フォンノイマン型アーキテクチャを有するコンピュータの一例を示す。
以下の説明および図は、特定の実施形態を当業者が実施できるように十分に説明する。他の実施形態は、構造的、論理的、電気的、プロセス、および他の変更を包含し得る。いくつかの実施形態の部分および特徴は、他の実施形態に含まれ得るか、または他の実施形態のそれらと置き換えられ得る。請求項に規定される実施形態は、それらの請求項の全ての利用可能な均等物を包含する。
本文書では、特に、ソースコードを、有限状態機械の機械コード実装に変換するコンパイラを説明する。機械コードが、ソースコードによって記述された機能を対象装置上で実装するように構成されているという点において、機械コードは、対象装置に対応できる。一例では、対象装置は並列マシンであり、機械コードは、その並列マシン用のイメージを含む。別の例では、対象装置は、フォンノイマン型アーキテクチャを有するコンピュータを含み、機械コードは、そのコンピュータ内のプロセッサによって実行するための命令を含む。
いかなる場合にも、コンパイラは、ソースコードを、そのソースコードによって記述された機能を実施する有限状態機械を実装する機械コードにコンパイルできる。ソースコードをコンパイルするプロセスにおいて、コンパイラは、ソースコードをオートマトンに変換する。オートマトンを使用すると、コンパイラは、機械コードで実装された、結果として得られる有限状態機械を最適化するために、ソースコード内の冗長性を識別し、結合できる。さらに、コンパイラは、オートマトンの部分を識別し、対象装置に対応する要素にマッピングできる。対象装置が並列マシンである場合、要素は、並列マシンのハードウェア要素を含むことができる。対象装置がフォンノイマン型アーキテクチャを有するコンピュータである場合、要素は、プロセッサによって実行するための命令を含むことができる。マッピング中、有限状態機械の特定の部分が、例えば、結果として得られる機械コードの効率を高めるために、特定の(例えば、専用)要素にマッピングできる。
図1は、有限状態機械(FSM)例100を示す。有限状態機械100は、容器内の水位を1/4満杯と3/4満杯との間に保つための方法に対応する。状態102で、容器内の水位を減少させるために、ポンプが作動される。水位が1/4満杯より下に下がると、FSM 100は、ポンプが動作を停止される、状態104に遷移する。一方、状態104では、水位が3/4満杯を超えると、FSM 100は、ポンプが再度作動される、状態102に遷移して戻る。FSM 100に対する入力は容器内の水位であり、出力はポンプのオン/オフ信号である。
FSMは、決定性および非決定性の2つのクラスに分類される。決定性FSMは、一時に、単一経路の実行を有するが、他方、非決定性FSMは、複数の並列経路の実行を有する。N個の状態をもつ非決定性FSMは、通常、最悪の場合で2のN乗個の状態をもつ決定性FSMに変換できる。しかし、非決定性から決定性FSMへのこの指数関数的な状態拡張は、しばしば、非決定性FSMを、有限のマシンリソースと時間をもつ最も実用的な実装にする。
FSM 100は、決定性FSMの一例であり、この決定性FSM 100は、大規模な非決定性FSMの一部であり得る。例えば、図2は、決定性FSM 100がその部分を構成する、非決定性FSM 200を示す。FSM 200は、水位を維持するFSM 100に対して管圧力のモニターを追加する。FSM 200では、ポンプの稼働中、管圧力がモニターされ、管圧力が一定期間、過負荷である場合、ポンプが停止される。FSM 200では、状態102でポンプが作動されている間に管圧力が過負荷である場合、FSM 200は、タイマーが起動される状態106に遷移する。さらに、管が過負荷である場合、状態102はそれ自身に遷移して、ポンプをオン状態に維持する。その結果、FSM 200内のこの位置で、状態102、「ポンプオン」状態、および状態106、「タイマーオン」状態の両方が同時にアクティブである。状態102および状態106は同時にアクティブであり得るので、複数経路の実行が存在し、FSM 200はその結果、非決定性である。FSM 200は、管内の圧力がもはや過負荷でない場合、状態106から、状態102に遷移する。また、FSM 200は、タイマーの満了時にポンプをオフ状態に設定するため、状態102および状態106の両方から状態104に遷移する。
図3は、コンパイラ例に対する流れ図300を示す。コンパイラは、ソースコードを入力として受け取り、ソースコードによって記述された機能を対象装置上で実装する機械コードを生成する。一例では、対象装置は、図5〜図9に関して後述するように、並列マシンを含む。並列マシンは、複数の状態のうちの1つに設定できる複数のプログラム可能要素を含む。並列マシンに対する機械コードは、1つまたは複数のプログラム可能要素の状態を設定するためのイメージを含む。別の例では、対象装置は、フォンノイマン型アーキテクチャを有するコンピュータである。コンピュータは、1つまたは複数のプロセッサによって実行するためにその上にソフトウェアを有する、1つまたは複数の記憶装置に結合された1つまたは複数のプロセッサを含む。フォンノイマン型アーキテクチャのための機械コードは、1つまたは複数のプロセッサによって実行するための命令を含む。フォンノイマン型アーキテクチャを有するコンピュータの例は、図15に関して後述される。いかなる場合にも、コンパイラは、オートマトンを中間変換として使用することにより、機械コードを生成する。コンパイラは、オートマトンを、特に、結果として得られるFSMを最適化するため、また、その結果として、機械コードを最適化するために使用する。
一例では、ソースコードは、シンボルグループ内のシンボルのパターンを識別するための検索文字列を記述する。検索文字列を記述するため、ソースコードは、複数の正規表現(regex)を含むことができる。正規表現は、シンボル検索パターンを記述するための文字列であり得る。正規表現は、プログラミング言語、テキストエディタ、ネットワークセキュリティ、およびその他などの、様々なコンピュータドメインで幅広く使用されている。一例では、コンパイラによってサポートされる正規表現は、非構造化データを検索するための検索基準を含む。非構造化データは、自由形式のデータを含み得、データ内のワード(word)に適用された指標付けがない。ワードは、データ内に、印刷可能および印字不能な、バイトの任意の組合せを含み得る。一例では、コンパイラは、Perl(例えば、Perl互換正規表現(PCRE))、PHP、Java(登録商標)、および.NET言語を含む、正規表現を実装するための、複数の異なるソースコード言語をサポートできる。
図3を再度参照すると、ブロック302で、コンパイラは、ソースコードを解析して、関係的に結合された演算子の配列(arrangement)を形成できる。ソースコードの解析により、ソースコードの一般的表現を作成できる。一例では、一般的表現は、ソースコード内の正規表現の、構文木として知られているツリーグラフの形でコード化された表現を含む。本明細書で説明する例は、その配列を構文木(「抽象構文木」としても知られている)と呼ぶ。しかし、他の例では、具象構文木または他の配列も使用できる。
前述したように、コンパイラは、複数言語のソースコードをサポートできるので、解析は、その言語にかかわらず、ソースコードを、例えば、構文木などの、言語固有でない表現に変換する。従って、コンパイラによるさらなる処理(ブロック304、306、308、310)は、ソースコードの言語にかかわらず、共通の入力構造から動作できる。
構文木は、関係的に結合されている複数の演算子を含む。構文木は、複数の異なるタイプの演算子を含むことができ、そこでは、異なるタイプの演算子は、ソースコードによって実装された異なる機能に対応する。すなわち、異なる演算子は、ソースコード内の正規表現によって実装された異なる機能に対応できる。
ブロック304で、構文木はオートマトンに変換される。オートマトンは、FSMのソフトウェアモデルを含み、それに応じて、決定性または非決定性として分類できる。決定性オートマトンは、一時に、単一経路の実行を有するが、他方、非決定性オートマトンは、複数の並列経路の実行を有する。オートマトンは、複数の状態を含む。構文木をオートマトンに変換するために、構文木内の演算子および演算子間の関係は、状態間の遷移をもつ状態に変換される。
一例では、オートマトンは、汎用状態および専用状態を含む。汎用状態および専用状態は、コンパイラがそれに対して機械コードを生成している対象装置によってサポートされる汎用要素および専用要素に対応する。異なるタイプの対象装置は、異なるタイプの汎用要素ならびに1つまたは複数の異なるタイプの専用要素をサポートできる。汎用要素は、通常、幅広い範囲の機能を実装するために使用でき、他方、専用要素は、通常、もっと狭い範囲の機能を実装するために使用できる。しかし、一例では、専用要素は、例えば、その狭い範囲の適用性内でより大きな効果を得ることができる。その結果、専用要素は、例えば、対象装置において特定の機能を実装するために必要なマシンサイクルまたはマシンリソースを削減するために使用できる。いくつかの例では、対象装置は、単に専用要素をサポートし、そこで、複数の異なるタイプの専用要素がサポートされる。
対象装置のタイプは、その対象装置によってサポートされている要素のタイプを主として制御できる。一例では、対象装置は、フォンノイマン型アーキテクチャを有するコンピュータであり、サポートされる要素は、そのコンピュータのプロセッサに対応する命令セットを含む。命令セットは、加算、減算、読取り、および書込みなどの汎用命令、ならびに、複数格納(multiple store)および大きなブロックのメモリの移動などの専用命令を含むことができる。別の例では、対象装置は、図5〜図9に関連して以下で説明するように、並列マシンである。並列マシンによってサポートされる要素は、並列マシンのハードウェア要素を含む。ハードウェアコンポーネントは、状態機械要素などの汎用要素、ならびに、カウンタなどの専用要素を含み得る。いくつかの例では、特に、並列マシンの例では、対象装置は、比較的少数の専用要素に比べて、多数の汎用要素をサポートできる。その結果、いくつかの例では、ほとんどの機能が、汎用要素で実装されるであろうが、他方、選択された少ない機能が専用要素で実装される。
対象装置の要素を効果的に利用するために、コンパイラは、対象装置によってサポートされる専用要素に対応するオートマトン内の専用状態を使用して、構文木の適切な部分を変換する。専用状態を使用して変換されない構文木の部分は、対象装置によってサポートされる汎用要素に対応する汎用状態に変換できる。コンパイラは、構文木を解析して、どの部分が専用状態を使用して変換でき、また、どの部分を汎用状態に変換すべきかを判断できる。いくつかの例では、ほとんどのオートマトンは、1つまたは複数の汎用状態に変換されるが、他方、わずかな割合が、1つまたは複数の専用状態を使用して変換される。
専用状態を使用してオートマトンのいくつかの部分を変換すると、例えば、状態の数を減らすか、かつ/またはオートマトンを単純化することができ、従って、機械コードによって実装されたFSMを単純化することができる。例えば、構文木のある部分は、どの専用状態も使用することなく、汎用状態を使用して変換される場合、多数の状態という結果になり得る。状態数を減らすため、これら同一の部分が、1つまたは複数の専用状態を、おそらくは1つまたは複数の汎用状態と組み合わせて使用して、変換され得る。少数の専用状態が、多数の汎用状態に取って代わることができ得る。汎用状態の数がしばしば、結果として生じる機械コードによって使用される汎用要素の数に対応するので、汎用状態の数を減らすと、使用される汎用要素が少なくなることに起因して、結果として生じる機械コードの複雑性が減少し、効率が向上する。
いかなる場合にも、コンパイラは、構文木内のある部分をあるタイプの状態に変換し、構文木内の他の部分を他のタイプの状態に変換する。状態のタイプが、対象装置によってサポートされる要素のタイプに対応するので、変換は、ソースコードによって実装されるある機能を、並列マシンによってサポートされる特定のタイプの要素にマッピングする効果があり得る。対象装置が、フォンノイマン型アーキテクチャを有するコンピュータである例では、ソースコード内のある機能が、フォンノイマン型コンピュータによってサポートされる命令セットの特定タイプの命令にマッピングできる。対象装置が並列マシンである例では、ソースコードのある機能が、状態機械要素などの汎用要素にマッピングでき、他の機能は、カウンタなどの専用要素にマッピングできる。構文木のオートマトンへの変換に関するさらなる詳細は、図4に関連して以下で説明される。
オートマトンが形成されると、ブロック306で、オートマトンは、とりわけ、その複雑性およびサイズを縮小するように最適化される。オートマトンは、特に、同等な状態を結合することにより最適化できる。
ブロック308で、オートマトンが、対象装置用の機械コードに変換される。オートマトンの各部分は、ブロック304でマッピングされたように、対象装置の要素に対応する機械コードに変換される。一例では、機械コードは、フォンノイマン型アーキテクチャのプロセッサ用の実行可能な命令を含む。ここで、機械コードは、実行可能プログラムを含むことができる。別の例では、機械コードは、並列マシン内のハードウェア要素をプログラムするためのビットを含むことができる。ここで、機械コードは、並列マシン上にロードするためのイメージを含むことができる。
ブロック310で、機械コードは、コンパイラによって公開できる。一例では、機械コードは、機械コードをコンピュータ可読媒体に保存することによって公開できる。別の例では、機械コードは、機械コードを並列マシン上にロードするためのプログラミング装置など、別の装置に機械コードを送信することによって公開できる。さらに別の例では、機械コードは、機械コードを並列マシン上にロードすることによって公開できる。さらにまた別の例では、機械コードは、機械コードをディスプレイ装置上に表示することによって公開できる。
一例では、コンパイラは、フォンノイマン型アーキテクチャを有するコンピュータ用の命令によって実装できる。これらの命令は、コンピュータ上のプロセッサにコンパイラの機能を実装させることができる。例えば、命令は、プロセッサによって実行される場合、プロセッサがアクセス可能なソースコード上のブロック302、304、306、308、および310に記述する動作をプロセッサに実行させることができる。フォンノイマン型アーキテクチャを有するコンピュータ例が図15に示され、以下で説明される。
図4は、構文木などの配列をオートマトンに変換するための方法400を示しており、そこでは、構文木のある部分が、専用状態を使用して変換される。オートマトン内の専用状態を利用するために、ブロック402で、コンパイラはまず、対象装置によってサポートされる専用要素に対応する構文木の部分を識別する。例えば、並列マシンでは、所望であれば、構文木全体を汎用状態で実装することが通常可能である。これは、汎用状態が、並列マシンによってサポートされる全ての機能を実装する、ある方法で結合できるからである。しかし、前述したように、専用要素は、ある機能のみを実装することを目的としている。それ故、コンパイラは、専用要素によって実装できるか、または効果的に実装できる構文木内の演算子を識別する。これらの演算子および構文木の周囲の部分が、次いで、以下で説明するように、専用状態を使用して、変換できる。
一例では、専用状態に対応する構文木の部分が、構文木内の演算子の機能に基づいて識別される。実際のところ、コンパイラによって識別される演算子の機能は、対象装置の専用要素が実装することを目的としている特定の機能に対応できる。一例では、コンパイラは、対象装置がカウンタを専用要素としてサポートする場合、構文木内の数量化を専用要素に対応するとして識別できる。数量化およびカウンタに関するさらなる詳細については、図5〜図14に関連して説明される。
ブロック404で、部分が、専用要素に対応するとして識別されると、その識別された部分は、専用要素にマッピングされるための特定の条件に一致するかどうかを判断するためにさらに解析され得る。一例では、条件には、識別された部分に対応するオートマトンが決定性であるかどうかを含む。すなわち、条件は、汎用状態のオートマトンに変換される場合、識別された部分がその一部である、より大きなオートマトン(例えば、構文木全体に基づいて形成されたオートマトン)が決定性であるかどうかに関わらず、識別された部分が決定性であるかどうかに対応する。識別された部分に対応するオートマトンが決定性である場合には、ブロック406で、識別された部分が、1つまたは複数の専用状態を使用して変換される。オートマトンが決定性でない場合には、ブロック408で、識別された部分が、どの専用状態も使用することなく、1つまたは複数の汎用状態を使用して変換される。他の例では、オートマトンは、識別された部分を、識別された部分が決定性である場合は第1のタイプの専用状態を使用して、また、識別された部分が決定性でない場合には別のタイプの専用状態を使用して、変換できる。さらに別の例では、構文木の識別された部分を変換する際にどのタイプの状態を使用するかを判断するために他の条件が使用できる。
一例では、ブロック404で、構文木の識別された部分が決定性であるかどうかを判断するために、コンパイラは、その識別された部分が、オートマトンに変換される場合、一時に1つのアクティブ状態だけを有するかどうかを判断できる。これは、例えば、識別された部分との干渉条件があるかどうかを見つけることによって、判断できる。例えば、識別された部分が数量化である場合、コンパイラは、オートマトンを解析して、オートマトンが「再入なし(no re−entrance)」条件または「プレフィックスなし」条件を満足するかどうかを判断できる。再入なし条件またはプレフィックスなし条件に関する更なる詳細は、図10〜図14に関連して以下で説明される。
これらの判断を使用して、構文木内の各演算子が、オートマトンの1つまたは複数の状態に変換できる。いくつかの演算子は、演算子によって実装された特定の機能を識別し、適切な場合には、オートマトン内の1つまたは複数の専用状態を使用して、それらの機能を変換することにより、前述したように変換できる。1つまたは複数の専用状態を使用して変換されない演算子は、デフォルト設定により、1つまたは複数の汎用状態に変換できる。例えば、構文木は、全ての適用可能な演算子を識別し、並列マシン内のカウンタにマッピングするために解析できる。全ての適用可能な演算子が1つまたは複数のカウンタにマッピングされると、残りの演算子は、1つまたは複数の状態機械要素にマッピングできる。他の例では、構文木の全ての部分が、特定の部分に対応する1つまたは複数の特定の要素を識別することによりマッピングされる。
〔実施形態例〕
図5〜図15に関連した以下の説明は、並列マシン内の専用要素を使用してFSMを実装する実施形態例に関する。一例では、並列マシン内の専用要素はカウンタを含む。カウンタは、ソースコード内の数量化を実装することを目的としている。図5〜図9に関連した説明は、並列マシン例に関し、図10〜図14に関連した記述では、並列マシンをプログラムする機械コードを生成するためのコンパイラについて説明する。
図5は、データ解析のための階層構造を実装するために使用できる、並列マシン500の例を示す。並列マシン500は、入力データを受信し、その入力データに基づいて出力を提供できる。並列マシン500は、入力データを受信するためのデータ入力ポート510および出力を別の装置に提供するための出力ポート514を含むことができる。データ入力ポート510は、並列マシン500に入力されるデータ用のインタフェースを提供する。
並列マシン500は、汎用要素502および専用要素512を含む、複数のプログラム可能要素を含む。汎用要素502は、1つまたは複数の入力504および1つまたは複数の出力506を含み得る。汎用要素502は、複数の状態のうちの1つにプログラムされ得る。汎用要素502の状態は、汎用要素502が、所与の入力に基づいて、何の出力を提供するかを決定する。すなわち、汎用要素502の状態は、プログラム可能要素が所与の入力に基づいてどのように反応するかを決定する。データ入力ポート510に対するデータ入力は、汎用要素502にそれに対する処置を取らせるため、複数の汎用要素502に提供され得る。汎用要素502の例には、以下で詳細に説明する状態機械要素(SME)、および構成可能論理ブロックを含むことができる。一例では、SMEは、所与の入力がデータ入力ポート510で受信される場合に、特定の出力(例えば、高信号つまり「1」信号)を提供するため、所与の状態に設定され得る。所与の入力以外の入力がデータ入力ポート510で受信される場合、SMEは異なる出力(例えば、低信号つまり「0」信号)を提供し得る。一例では、構成可能論理ブロックは、データ入力ポート510で受信された入力に基づいて、ブール論理関数(例えば、AND、OR、NORなど)を実行するように設定できる。
並列マシン500は、プログラム(例えば、イメージ)を並列マシン500上にロードするためのプログラミングインタフェース511も含むことができる。イメージは、汎用要素502の状態をプログラム(例えば、設定)できる。すなわち、イメージは、所与の入力に対して特定の方法で反応するように汎用要素502を構成できる。例えば、汎用要素502は、文字‘a’がデータ入力ポート510で受信される場合、高信号を出力するように設定できる。いくつかの例では、並列マシン500は、汎用要素502の動作のタイミングを制御するためのクロック信号を使用できる。ある例では、並列マシン500は、汎用要素502とやりとりするため、および専用機能を実行するために、専用要素512(例えば、RAM、論理ゲート、カウンタ、ルックアップテーブルなど)を含むことができる。いくつかの実施形態では、データ入力ポート510で受信されるデータは、長い時間をかけて、もしくは一度にそろって受信されたデータの一定のセット、または長い時間をかけて受信されたデータのストリームを含むことができる。データは、並列マシン500に結合された、データベース、センサー、ネットワークなどの任意のソースから受信され得るか、または生成され得る。
並列マシン500は、並列マシン500の異なる要素(例えば、汎用要素502、データ入力ポート510、出力ポート514、プログラミングインタフェース511、および専用要素512)を選択的に共に結合するための複数のプログラム可能スイッチ508も含む。その結果、並列マシン500は、要素間で形成されたプログラム可能マトリックス(programmable matrix)を含む。一例では、汎用要素502の入力504、データ入力ポート510、プログラミングインタフェース511、または専用要素512が、1つまたは複数のプログラム可能スイッチ508を通して、汎用要素502の出力506、出力ポート514、プログラミングインタフェース511、または専用要素512に結合できるように、プログラム可能スイッチ508が、2つ以上の要素を選択的に互いに結合できる。従って、要素間の信号のルーティングが、プログラム可能スイッチ508を設定することによって制御できる。図5は、所与の要素とプログラム可能スイッチ508との間の特定数の導体(例えば、ワイヤー)を示しているが、他の例では、異なる数の導体が使用できることが理解されるはずである。また、図5は、個別にプログラム可能スイッチ508に結合された各汎用要素502を示しているが、他の例では、複数の汎用要素502がグループ(例えば、図8に示すような、ブロック802)としてプログラム可能スイッチ508に結合できる。一例では、データ入力ポート510、データ出力ポート514、および/またはプログラミングインタフェース511はレジスタとして実装でき、レジスタへの書込みが、それぞれの要素へデータを提供するか、またはそれぞれの要素からデータを提供するようにする。
一例では、単一の並列マシン500が物理デバイス上に実装されるが、他の例では、2つ以上の並列マシン500が単一の物理デバイス(例えば、物理チップ)上に実装できる。一例では、複数の並列マシン500の各々が、別個のデータ入力ポート510、別個の出力ポート514、別個のプログラミングインタフェース511、および汎用要素502の別個のセットを含むことができる。さらに、汎用要素502の各セットは、それらの対応する入力データポート510でデータに反応(例えば、高信号または低信号を出力)できる。例えば、第1の並列マシン500に対応する汎用要素502の第1のセットは、第1の並列マシン500に対応する第1のデータ入力ポート510でデータに反応できる。第2の並列マシン500に対応する汎用要素502の第2のセットは、第2の並列マシン500に対応する第2のデータ入力ポート510に反応できる。その結果、各並列マシン500は、1セットの汎用要素502を含み、異なるセットの汎用要素502は、異なる入力データに反応できる。同様に、各並列マシン500、および汎用要素502の各対応するセットは、別個の出力を提供できる。いくつかの例では、第2の並列マシン500に対する入力データが、第1の並列マシン500からの出力データを含むことができるように、第1の並列マシン500からの出力ポート514が、第2の並列マシン500の入力ポート510に結合できる。
一例では、並列マシン100上にロードするためのイメージは、プログラム可能要素102の状態を設定するため、プログラム可能スイッチ108をプログラミングするため、および並列マシン100内で専用要素112を構成するための複数のビットの情報を含む。一例では、ある入力に基づいて所望の出力を提供するように並列マシン100をプログラムするために、イメージが並列マシン100上にロードできる。出力ポート114は、データ入力ポート110でのプログラム可能要素102のデータに対する反応に基づいて、並列マシン100からの出力を提供できる。出力ポート114からの出力は、所与のパターンの一致を示す単一ビット、複数のパターンに対する一致および不一致を示す複数のビットを含むワード(word)、複数のアクティブ状態および非アクティブ状態を示す複数のビットを含むワード、ならびに所与の時に全てまたは特定の汎用要素102の状態に対応する状態ベクトルを含むことができる。
並列マシン500に関する使用例には、パターン認識(例えば、音声認識、画像認識など)、信号処理、画像処理、コンピュータビジョン、暗号化、およびその他を含む。ある例では、並列マシン500は、有限状態機械(FSM)エンジン、フィールドプログラマブルゲートアレイ(FPGA)、およびそれらの変形を含むことができる。さらに、並列マシン500は、コンピュータ、ポケットベル、携帯電話、電子手帳、携帯音楽プレーヤ、ネットワーク装置(例えば、ルータ、ファイアウォール、スイッチ、またはそれらの任意の組合せ)、制御回路、カメラなどの、大きな装置内のコンポーネントであり得る。
図6〜図9は、本明細書で「FSMエンジン600」と呼ぶ並列マシンの一例を示す。一例では、FSMエンジン600は、有限状態機械のハードウェア実装を含む。その結果、FSMエンジン600は、FSM内の複数の状態に対応する、複数の選択的に結合可能なハードウェア要素(例えば、プログラム可能要素)を実装する。FSM内の状態と同様に、ハードウェア要素は、入力ストリームを解析し、その入力ストリームに基づいて下流のハードウェア要素をアクティブにできる。
FSMエンジン600は、汎用要素および専用要素を含む、複数のプログラム可能要素を含む。汎用要素は、多数の異なる機能を実装するようにプログラムされ得る。これらの汎用要素は、行(row)606(図7および図8に示す)およびブロック602(図6および図7に示す)に階層的に編成されているSME 604、605(図9に示す)を含む。階層的に編成されたSME 604、605間で信号をルーティングするために、ブロック間スイッチ603(図6および図7に示す)、ブロック内スイッチ608(図7および図8に示す)、ならびに行内(intra−row)スイッチ612(図8に示す)を含む、プログラム可能スイッチの階層が使用される。SME 604、605は、FSMエンジン600によって実装されたFSMの状態に対応できる。SME 604、605は、以下で説明するように、プログラム可能スイッチの使用によって共に結合できる。その結果、FSMは、状態の機能に対応するようにSME 604、605をプログラミングすることにより、また、FSM内の状態間の遷移に対応するため、SME 604、605を選択的に共に結合することにより、FSMエンジン600上に実装できる。
図6は、FSMエンジン例600の全体図を示す。FSMエンジン600は、プログラム可能ブロック間スイッチ603と選択的に共に結合できる複数のブロック602を含む。さらに、ブロック602は、信号(例えば、データ)を受信するため、およびデータをブロック602に提供するために、入力ブロック609(例えば、データ入力ポート)に選択的に結合できる。ブロック602は、ブロック602から外部デバイス(例えば、別のFSMエンジン600)に信号を提供するために、出力ブロック613(例えば、出力ポート)にも選択的に結合できる。FSMエンジン600は、プログラム(例えば、イメージ)をFSMエンジン600上にロードするために、プログラミングインタフェース611も含み得る。イメージは、SME 604、605の状態をプログラム(設定)できる。すなわち、イメージは、入力ブロック609で所与の入力に対して特定の方法で反応するように、SME 604、605を構成できる。例えば、SME 604は、入力ブロック609で文字‘a’が受信される場合、高信号を出力するように設定できる。
一例では、入力ブロック609、出力ブロック613、および/またはプログラミングインタフェース611はレジスタとして実装でき、そのレジスタへの書込みがそれぞれの要素に対して、またはそれぞれの要素から、データを提供できるようにする。その結果、プログラミングインタフェース611に対応するレジスタ内に格納されているイメージからのビットが、SME 604、605上にロードできる。図6は、ブロック602、入力ブロック609、出力ブロック613、およびブロック間スイッチ603の間に特定数の導体(例えば、ワイヤ、線)を示しているが、他の例では、もっと少ないかまたは多い導体が使用できることが理解されるはずである。
図7は、ブロック602の一例を示す。ブロック602は、プログラム可能ブロック内スイッチ608と選択的に共に結合できる複数の行606を含むことができる。その結果、行606は、ブロック間スイッチ603で、別のブロック602内の別の行606と選択的に結合できる。一例では、バッファ601は、ブロック間スイッチ603への/ブロック間スイッチ603からの信号のタイミングを制御するために含まれる。行606は、本明細書で2つのグループ(GOT:group of two)610として参照される要素のペアに編成された複数のSME 604、605を含む。一例では、ブロック602は、16個の行606を含む。
図8は、行606の一例を示す。GOT 610は、プログラム可能行内スイッチ612によって、行606内の他のGOT 610および任意の他の要素624と選択的に結合できる。また、GOT 610は、ブロック内スイッチ608で他の行606内の他のGOT 610と、またはブロック間スイッチ603で他のブロック602内の他のGOT 610とも結合できる。一例では、GOT 610は、第1および第2の入力614、616ならびに出力618を有する。第1の入力614は、GOT 610の第1のSME 604と結合され、第2の入力614は、GOT 610の第2のSME 604と結合される。
一例では、行606は、第1および第2の複数の行相互接続導体620、622を含む。一例では、GOT 610の入力614、616は、1つまたは複数の行相互接続導体620、622に結合でき、出力618は、1つの行相互接続導体620、622に結合できる。一例では、第1の複数の行相互接続導体620は、行606内の各GOT 610の各SME 604に結合できる。第2の複数の行相互接続導体622は、行606内の各GOT 610の1つのSME 604に結合できるが、そのGOT 610の他のSME 604には結合できない。一例では、第2の複数の行相互接続導体622の半分の第1の方が、行606内のSME 604の半分の第1の方(各GOT 610からの1つのSME 604)と結合でき、第2の複数の行相互接続導体622の半分の第2の方が、行606内のSME 604の半分の第2の方(各GOT 610からのその他のSME 604)と結合できる。第2の複数の行相互接続導体622とSME 604、605との間の制限された接続性は、本明細書では「パリティ」と呼ばれる。
一例では、行606は、カウンタ、プログラム可能ブール論理要素、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、プログラム可能プロセッサ(例えば、マイクロプロセッサ)、および他の要素などの、専用要素624も含むことができる。追加として、一例では、専用要素624は、異なる行606内では異なる。例えば、ブロック602内の4つの行606が、専用要素624としてブール論理を含むことができ、ブロック602内の他の8つの行606が、専用要素624としてカウンタを含むことができる。
一例では、専用要素624は、カウンタ(本明細書ではカウンタ624とも呼ばれる)を含む。一例では、カウンタ624は、12ビットのプログラマブル減算カウンタを含む。12ビットのプログラマブルカウンタ224は、カウント入力、リセット入力、およびゼロカウント出力を有する。カウント入力は、アサート時に、カウンタ624の値を1だけ減算する。リセット入力は、アサート時に、カウンタ624に、関連したレジスタから初期値をロードさせる。12ビットのカウンタ624に対して、最大で12ビット数が初期値としてロードできる。カウンタ624の値がゼロ(0)に減算されると、ゼロカウント出力がアサートされる。カウンタ624は、少なくとも2つのモード、パルスおよび保留(hold)を有する。カウンタ624がパルスモードに設定されている場合、カウンタ624がゼロに減算されると、第1のクロック周期中にゼロカウント出力がアサートされ、また、次のクロック周期では、たとえカウント入力がアサートされても、ゼロカウント出力はもはやアサートされない。この状態は、カウンタ624が、アサートされているリセット入力によってリセットされるまで、継続する。カウンタ624が保留モードに設定されている場合、カウンタ624がゼロに減算されると、第1のクロック周期中にゼロカウント出力がアサートされ、また、カウント入力がアサートされる場合、カウンタ624が、アサートされているリセット入力によってリセットされるまで、アサートされたままである。
図9は、GOT 610の一例を示す。GOT 610は、入力614、616を有し、かつそれらの出力626、628がORゲート630に結合されている、第1および第2のSME 604、605を含む。出力626、628は、GOT 610の共通の出力618を形成するため、ORゲート630で一緒に論理ORされている。一例では、第1および第2のSME 604、605はパリティを示し、そこで、第1のSME 604の入力614は、行相互接続導体622のいくつかに結合でき、第2のSME 605の入力616は、他の行相互接続導体622に結合できる。一例では、GOT 610内の2つのSME 604、605は、第1のSME 604の出力626を第2のSME 605の入力616に結合するために、スイッチ640を設定することにより、カスケード接続できる。
一例では、状態機械要素604、605は、検出線634と平行に結合された、ダイナミックランダムアクセスメモリ(DRAM)でしばしば使用されるような、複数のメモリセル632を含む。1つのかかるメモリセル632は、高値または低値(例えば、1または0)のいずれかに対応するものなどの、データ状態に設定できるメモリセルを含む。メモリセル632の出力は、検出線634に結合され、メモリセル632への入力は、データストリーム線636上のデータに基づいて、信号を受信する。一例では、データストリーム線636上の入力が、メモリセル632の1つを選択するために復号される。選択されたメモリセル632は、その格納されたデータ状態を出力として検出線634上に提供する。例えば、データ入力ポート609で受信されたデータがデコーダ(図示せず)に提供でき、デコーダは、データストリーム線636のうちの1本を選択できる。一例では、デコーダは、ASCII文字を256ビットのうちの1つに変換できる。
メモリセル632は、それ故、メモリセル632が高値に設定され、かつ、データストリーム線636上のデータがメモリセル632に対応する場合、高信号を検出線634に出力する。データストリーム線636上のデータがメモリセル632に対応し、メモリセル632が低値に設定されている場合、メモリセル632は、低信号を検出線634に出力する。メモリセル632からの検出線634上への出力は、検出回路638によって検知される。一例では、入力線614、616上の信号は、それぞれの検出回路638をアクティブ状態または非アクティブ状態のいずれかに設定する。非アクティブ状態に設定されると、検出回路638は、それぞれの検出線634上の信号にかかわらず、低信号をそれぞれの出力626、628上に出力する。アクティブ状態に設定されると、高信号がそれぞれのSME 604、605のメモリセル632の1つから検出される場合、検出回路638は、高信号をそれぞれの出力線626、628上に出力する。アクティブ状態にある場合、それぞれのSME 604、605のメモリセル632の全てからの信号が低ければ、検出回路638は、低信号をそれぞれの出力線626、628上に出力する。
一例では、SME 604、605は、256のメモリセル632を含み、各メモリセル632は、異なるデータストリーム線636に結合される。それ故、SME 604、605は、選択された1つまたは複数のデータストリーム線636がその上に高信号を有する場合、高信号を出力するようにプログラムされ得る。例えば、SME 604は、第1のメモリセル632(例えば、ビット0)を高に設定し、他の全てのメモリセル632(例えば、ビット1〜255)を低に設定できる。それぞれの検出回路638がアクティブ状態にあるとき、SME 604は、ビット0に対応するデータストリーム線636がその上に高信号を有する場合、高信号を出力626上に出力する。他の例では、複数のデータストリーム線636のうちの1本が、適切なメモリセル632を高値に設定することにより、その上に高信号を有する場合、SME 604は、高信号を出力するように設定できる。
一例では、メモリセル632は、関連したレジスタからビットを読み取ることにより、高値または低値に設定できる。その結果、SME 604は、コンパイラによって作成されたイメージをレジスタ内に格納し、レジスタ内のビットを関連したメモリセル632にロードすることにより、プログラムされ得る。一例では、コンパイラによって作成されたイメージは、高および低(例えば、1および0)ビットのバイナリイメージを含む。イメージは、SME 604、605をカスケード接続することにより、FSMエンジン600をFSMとして動作するようにプログラムできる。例えば、第1のSME 604は、検出回路638をアクティブ状態に設定することにより、アクティブ状態に設定できる。第1のSME 604は、ビット0に対応するデータストリーム線636がその上に高信号を有する場合、高信号を出力するように設定できる。第2のSME 605は、最初は非アクティブ状態に設定できるが、アクティブなとき、ビット1に対応するデータストリーム線636がその上に高信号を有する場合、高信号を出力するように設定できる。第1のSME 604および第2のSME 605は、第1のSME 604の出力626を第2のSME 605の入力616に結合するように設定することにより、カスケード接続できる。従って、高信号が、ビット0に対応するデータストリーム線636上で検知される場合、第1のSME 604は、高信号を出力626上に出力し、第2のSME 605の検出回路638をアクティブ状態に設定する。高信号が、ビット1に対応するデータストリーム線636上で検知される場合、第2のSME 605は、別のSME 605をアクティブにするため、またはFSMエンジン600からの出力のため、高信号を出力628上に出力する。
図10は、コンパイラがソースコードを、並列マシンをプログラムするように構成されたイメージに変換するための方法1000の一例を示す。方法1000は、ソースコードを構文木に解析すること(ブロック1002)、構文木をオートマトンに変換すること(ブロック1004)、オートマトンを最適化すること(ブロック1006)、オートマトンをネットリストに変換すること(ブロック1008)、ネットリストをハードウェア上に配置すること(ブロック1010)、ネットリストをルーティングすること(ブロック1012)、および結果として生じるイメージを公開すること(ブロック1014)を含む。
一例では、コンパイラは、ソフトウェア開発者がFSMエンジン600上でFSMを実装するために、イメージを作成できるようにする、アプリケーションプログラミングインタフェース(API)を含む。コンパイラは、ソースコード内の正規表現の入力セットを、FSMエンジン600をプログラムするように構成されているイメージに変換するための方法を提供する。コンパイラは、フォンノイマン型アーキテクチャを有するコンピュータ用の命令によって実装できる。これらの命令は、コンピュータ上のプロセッサにコンパイラの機能を実装させることができる。例えば、命令は、プロセッサによって実行される場合、プロセッサがアクセス可能なソースコード上のブロック1002、1004、1006、1008、1010、1012、および1014に記述する動作をプロセッサに実行させることができる。フォンノイマン型アーキテクチャを有するコンピュータ例が図15に示され、以下で説明される。
ブロック1002で、構文木を形成するために正規表現が解析される。解析することで、図3に関して上述したように、ソースコードの一般的表現が作成される。さらに、解析することで、FSMエンジン600によってサポートされている正規表現、およびサポートされていない正規表現を考慮に入れることができる。サポートされている正規表現は、適切な機械コード実装に変換できるが、サポートされていない正規表現は、例えば、エラーを生じ得るか、または、機能において、サポートされていない正規表現に近い、サポートされた機械コードに変換され得る。
ブロック1004で、構文木が、オートマトンに変換される。図3に関連して前述したように、構文木の変換は、構文木を、複数の状態を含むオートマトンに変換する。一例では、オートマトンは、FSMエンジン600のハードウェアに一部基づいて、変換され得る。
一例では、オートマトンに対する入力シンボルは、アルファベット、0〜9の数字、および他の印刷可能な文字のシンボルを含む。一例では、入力シンボルは、バイト値0〜255で表される。一例では、オートマトンは、グラフのノードが状態の集合に対応する有向グラフとして表され得る。一例では、オートマトンによって受け入れられた(例えば、一致した)データは、オートマトンに連続して入力される場合に、最終状態に達し得る全ての可能なデータの集合である。オートマトンによって受け入れられたデータ内の各シンボルは、開始状態から1つまたは複数の最終状態への経路を辿る。正規表現によって受け入れられたデータは、正規表現に一致する全ての可能な文字列の集合である。正規表現“R”と仮定すると、“R”の受け入れられたデータを£(R)として示す。
一例では、オートマトンは、汎用状態ならびに専用状態を含む。コンパイラがFSMエンジン600に対して機械コードを生成している例では、汎用状態はSME 604、605に対応でき、汎用状態はそれに応じて本明細書では「SME状態」と呼ばれる。さらに、コンパイラがFSMエンジン600に対して機械コードを生成している場合、専用状態は、カウンタ624に対応でき、それに応じて本明細書では「カウンタ状態」と呼ばれる。一例では、オートマトン内のSME状態は、SMEにマッピングしないオートマトンの開始状態を除いて、FSMエンジン600内のSME(例えば、SME 604、605)に1:1でマッピングする。カウンタ624は、カウンタ状態に1:1でマッピングすることもあれば、しないこともある。
一例では、入力シンボル範囲外の特別な遷移シンボルが、オートマトン内で使用され得る。これらの特別な遷移シンボルは、例えば、専用要素224の使用を可能にするために使用できる。さらに、特別な遷移シンボルは、入力シンボル以外の何かを受けて起こる遷移を提供するために使用できる。例えば、特別な遷移シンボルは、第2の状態および第3の状態の両方が有効な場合に、第1の状態が有効にされる(例えば、遷移される)ことを示し得る。その結果、第1の状態は、第2の状態および第3の状態の両方がアクティブにされる場合にアクティブにされ、また、第1の状態への遷移は、入力シンボルに直接依存しない。特に、第2の状態および第3の状態の両方が有効な場合に、第1の状態が有効にされることを示す特別な遷移シンボルは、例えば、専用要素224としてのブール論理によって実行されるブールAND関数を表すために使用できる。一例では、特別な遷移シンボルは、カウンタ状態がゼロに達したこと、従って下流の状態への遷移を示すために使用できる。
一例では、オートマトンは、グルシコフの方法などの、標準的な方法の1つを使用して構築できる。一例では、オートマトンは、εのない(ε−free)均質な(homogenous)オートマトンであり得る。構文木のオートマトンへの変換に関するさらなる詳細は、以下で、図4、図11、図12、図13A、図13B、および図14に関連して説明される。
ブロック1006で、構文木がオートマトンに変換されると、オートマトンが最適化される。オートマトンは、とりわけ、その複雑性およびサイズを縮小するように最適化され得る。オートマトンは、重複する状態を結合することにより最適化できる。
ブロック1008で、最適化されたオートマトンがネットリストに変換される。オートマトンをネットリストに変換することは、オートマトンの各状態をFSMエンジン600上のハードウェア要素(例えば、SME 604、605、専用要素624)のインスタンスにマッピングする。また、インスタンス間の接続が、ネットリストを作成するために決定される。
ブロック1010で、ネットリストの各インスタンスに対して、対象装置の特定のハードウェア要素(例えば、SME 604、605、専用要素624)を選択するために、ネットリストが位置付けられる。一例では、位置付けられると、FSMエンジン600に対する一般入力制約および出力制約に基づいて、各特定のハードウェア要素が選択される。
ブロック1012で、ネットリストによって記述された接続を達成するために、選択されたハードウェア要素を共に結合するため、位置付けられたネットリストが、プログラム可能スイッチ(例えば、ブロック間スイッチ603、ブロック内スイッチ608、および行内スイッチ612)に対する設定を決定するようにルーティングされる。一例では、プログラム可能スイッチに対する設定が、選択されたハードウェア要素を接続するために使用されるFSMエンジン600の特定の導体を決定することにより決定される。ルーティングは、ブロック1010で位置付けるハードウェア要素間の接続のさらに詳しい制限を考慮に入れることができる。その結果、ルーティングは、FSMエンジン600上の導体の実際の制限を前提として、適切な接続を行うために、グローバルな位置付けによって決定された通りに、いくつかのハードウェア要素の位置付けを調整し得る。
ネットリストが位置付けられルーティングされると、位置付けられルーティングされたネットリストは、FSMエンジン200のプログラミング用に複数のビットに変換できる。複数のビットはここではイメージと呼ばれる。
ブロック1014で、イメージがコンパイラによって公開される。イメージは、FSMエンジン600の特定のハードウェア要素および/またはプログラム可能スイッチをプログラミングするための複数のビットを含む。イメージが複数のビット(例えば、0および1)を含む実施形態では、イメージは、バイナリイメージと呼ぶことができる。ビットは、プログラム化されたFSMエンジン600が、ソースコードによって記述された機能を有するFSMを実装するように、SME 604、605の状態、専用要素624、およびプログラム可能スイッチをプログラムするためにFSMエンジン600上にロードできる。位置付け(ブロック1010)およびルーティング(ブロック1012)は、特定のハードウェア要素をFSMエンジン600内の特定の位置で、オートマトン内の特定の状態にマッピングできる。その結果、イメージ内のビットは、特定のハードウェア要素および/またはプログラム可能スイッチを所望の機能を実装するようにプログラムできる。一例では、イメージは、機械コードをコンピュータ可読媒体に保存することにより公開できる。別の例では、イメージは、イメージをディスプレイ装置上に表示することにより公開できる。さらに別の例では、イメージは、イメージをFSMエンジン600上にロードするためのプログラミング装置などの、別の装置にイメージを送信することにより、公開できる。さらにまた別の例では、イメージは、イメージを並列マシン(例えば、FSMエンジン600)上にロードすることにより、公開できる。
一例では、イメージは、イメージからのビット値をSME 604、605、および他のハードウェア要素624に直接ロードするか、またはイメージを1つまたは複数のレジスタにロードし、次いで、レジスタからのビット値をSME 604、605、および他のハードウェア要素624に書き込むかのいずれかにより、FSMエンジン600上にロードできる。一例では、コンピュータ(例えば、コンピュータに結合されているか、またはコンピュータと一体になったプログラミング装置)が、イメージを1つまたは複数のメモリアドレスに書き込むことにより、イメージをFSMエンジン600上にロードできるように、FSMエンジン600のハードウェア要素(例えば、SME 604、605、他の要素624、プログラム可能スイッチ603、608、612)がメモリマップされる。
図4は、前述したように、構文木をオートマトンに変換するための方法400を詳述する。以下の説明は、対象装置が、例えば、FSMエンジン600などの並列マシンである場合に、構文木をオートマトンに変換するためのさらなる詳細を提供する。
ソースコード内に記述できる正規表現の1つのタイプは、数量化を含む。数量化は、当技術分野で周知であり、繰返しパターンを記述するために使用される。一例として、“A(B){n1,n2}C”は、一般的な正規表現であり、ここで、A、BおよびCは部分式であり、また、“(B){n1,n2}”は数量化を含む。本明細書では、大文字は、正規表現または正規表現の一部(例えば、部分式)を表すために使用される。混乱を避けるために、二重引用符が、正規表現または部分式の前後に追加され得る。その結果、式を記述する大文字は、複数の入力シンボルに対する検索文字列に対応できる。例えば、式“A”は、入力文字列‘abbc’に対応できる。
さらに、本明細書では、式および部分式という用語が関係記述のみのために使用される(例えば、部分式は式の一部である)こと、ならびに式および部分式という用語は、いかなる特定の長さ、構文、または文字数に限定されるべきではないことが理解されるはずである。特に、ソースコードは、文字セット全体またはその任意の個々の部分が「式」と考えられる多数の文字(メタ文字および検索文字を含む)を含むことができる。例えば、以下の各々は、式と見なされ得る:“a(bb|d?){5,20}c”、“(b){0,10}”、“(b|d)”、および“b”。
数量化は、“(B){n1,n2}”のような正規表現で表され、ここで、Bは、部分式であり、n1およびn2は、先行する部分式が何回出現できるかを指定する整数である。Bは、n1およびn2によって指定された回数だけ繰り返される部分式なので、Bは、本明細書では、繰返し部分式(repeated sub−expression)と呼ばれる。数量化“(B){n1,n2}”が一致するため、繰返し部分式Bは、n1〜n2回、一致しなければならない。例えば、正規表現“(B){5,7}”は、部分式Bが5、6、または7回、一致することを必要とするであろう。正規表現“A(B){n1,n2}C”では、部分式Aは、一致する場合、数量化に遷移するので、部分式Aは本明細書では、駆動式(drive expression)と呼ばれる。さらに、数量化のための繰返しおよびカウントの増分を継続するために、数量化の繰返し部分式が連続して一致しなければならない。つまり、数量化の所与のループ中、繰返し部分式が一致しない場合、数量化が終了する。一例では、シンボル‘?’も数量化に対応し、ここで、‘?’に先行するシンボルは、1回またはゼロ回のどちらかに識別できる。
対象装置がFSMエンジン600である場合、方法400は、ある数量化を識別し、FSMエンジン600上のカウンタ624にマッピングできる。ある数量化をカウンタ624で実装すると、状態機械要素604、605での数量化の実装よりも効率化をもたらし得る。その結果、オートマトンおよびFSMエンジン600に対して結果として得られるイメージが単純化される。例えば、数量化を実装する構文木の部分は、実装するために大量のSME 604、605を必要とし得る。しかし、一例では、これらの数量化のいくつかは、SME 604、605によって必要とされ得るよりも少ない状態で、カウンタ624を使用して実装できる。
ブロック402で、コンパイラは、FSMエンジン600内のカウンタ624を用いて可能な実装のため、数量化に対応する構文木の部分を識別する。構文木の部分が数量化に対応しない場合、方法400はブロック408に進み、そこで、部分が、SME 604、605での実装のために汎用状態に変換される。構文木の部分が数量化に対応する場合には、識別された部分がカウンタ624で実装できるかどうかを判断するため、数量化がさらに解析される。
数量化がおそらくカウンタ624で実装できるかどうかを判断する前に、£(B)が空文字列を含む場合、“B{n1,n2}”の数量化が“B´{0,n2}”として書き換えられ、ここで、B´は、Bの非空文字列(no−empty−string)バージョンであり、£(B´)=£(B)−Φである。例えば、“(bc|){10,20}”は“(bc){0,20}”と書き換えられるが、これは、これらの正規表現が全く同じデータを受け付けるからである。次いで、以下の条件に従って、所与の数量化B{n1,n2}に対して、数量化がカウンタでおそらく実装できる(方法はブロック404に進む)か、あるいは、SMEで、カウンタを使用せずに実装できる(方法はブロック408に進む):
1) (n1=0,n2=−1)の場合、数量化は、SME 604、605で、かつカウンタ624なしで実装される(ブロック408)。ここで、カウンタ624は必要ない。
2) (n1=1,n2=−1)の場合、数量化は、SME 604、605で、かつカウンタ624なしで実装される(ブロック408)。ここで、カウンタ624は必要ない。
3) (n1>1,n2=−1)の場合、B{n,−1}がB{n1−1}B+と等しいので、数量化は2つの正規表現B{n1−1}およびB+に分割される。数量化B{n1−1}は、次いで、カウンタでおそらく実装でき(ブロック404)、他方B+は、SME 604、605で、かつカウンタ624なしで実装される(ブロック408)。B+に対して、カウンタ624は必要ない。
4) (n1=0,n2>0)の場合、(B{1,n2})?がB{0,n2}と等しいので、数量化は(B{1,n2})?に修正される。空値不能なB{1,n2}が、次いで、おそらくはカウンタ624で実装できる(ブロック404)。
5) (n1>0,n2>0)の場合、数量化は、カウンタ624でB{n1,n2}としておそらく実装され得る(ブロック404)。
要約として、修正することなく、カウンタ624でおそらく実装できる(ブロック404)数量化は、B{n1,n2}として記述でき、ここで、Bは空値可能でなく、n1>0、n2>0、およびn1≦n2である。
ブロック404で、コンパイラが、カウンタ624でおそらく実装できる数量化を識別すると、コンパイラは、その識別された部分に対応する構文木の部分が決定性であるかどうかを判断する。識別された部分が決定性である場合、識別された部分は1つまたは複数のカウンタ624で実装でき、方法400はブロック406に進み、そこで、識別された部分が、1つまたは複数のSME状態とともに、1つまたは複数のカウンタ状態に変換される。識別された部分が非決定性である場合、識別された部分はカウンタ624を使用して実装されず、方法400はブロック408に進み、そこで、識別された部分が、1つまたは複数のSME状態に変換される。
一般に、ブロック406およびブロック408は、数量化をオートマトンに変換する2つの方法に対応する。ブロック406では、数量化をループとして実装するため、おそらくは1つまたは複数のSME状態とともに、数量化が1つまたは複数のカウンタ状態を使用して変換される。ブロック408では、数量化は、SME状態の使用を含むがカウンタ状態のない数量化を「展開する」ことによって変換される。展開することは、数量化を非数量化構文で書き換えることを含む。例えば、正規表現“(b|c){1,2}”は、“(b|c)(b|c)?”と展開できる。展開の利点は、(1)結果として得られるオートマトンが有向非巡回グラフ(DAG)であり、解析および実装が容易であり得ること、ならびに(2)結果として得られるオートマトンが、専用要素の代わりに、汎用要素、特に、状態機械要素で実装できることを含む。しかし、展開された数量化を実装するために使用される汎用状態の数、従って状態機械要素は、n1およびn2に対して線形である。従って、状態の数は、n1またはn2が多数である場合、多数であり得る。特に、実際のリソースには制限があり、それ故、いくつかの例では、この展開技法は、数量化の限られたカテゴリに対してのみ使用される。
しかし、対象装置が、カウンタ624などの、カウント機能を実装するように設計された専用要素を有する場合、展開は、ある状況において回避できる。この方法の利点は、オートマトン内で必要とされる繰返し式のコピーが少ないことであり、また、コピーの数は、n1およびn2とは無関係である。従って、かなりのリソースが節約できる。例えば、繰返し式および1つまたは複数のカウンタ624をもつループを作成することにより、1つまたは複数のカウンタ624が、数量化を実装するために使用できる。繰返し式が一致するたびに、カウンタ624が増分できる(または減分できる)。繰返し式は、次いで、別の一を探すために再度アクティブにされる。カウンタ624が、数量化によって提示された回数に等しい回数増分される(または減分される)と、カウンタ624は、数量化に続く状態をアクティブにできる。その結果、繰返し式を実装するために使用されたSMEが再度使用されるので、数量化は、より少ないSME 604、605で実装できる。しかし、オートマトン全体(例えば、構文木全体に対応する)の並行性、すなわち、同時にアクティブにできる複数の状態、に起因して、いくつかの例では、カウンタ624のみが、オートマトン全体の決定性部分に対応する数量化で使用できる。
図11は、数量化を実装するために、専用カウンタ状態1102を使用して、オートマトン1100に変換された正規表現の一例を示す。オートマトン1100は、正規表現“A(B){n1,n1}C”に対応し、ここで、数量化の両方のカウント値(例えば、n1、n2)は等しい。両方のカウント値が等しいので、数量化を実装するために単一のカウンタ624が使用される。図11に示すように、オートマトン1100は、グラフのノードが状態の集合に対応する、有向グラフとして表すことができる。
正規表現“A(B){n1,n1}C”は、いくつかのSME状態1104、1106、1110、1108、およびカウンタ状態1102に変換される。SME状態1104、1106、1108、1110は、部分式“A”、“B”、および“C”に対応する。SME状態1104、1106、1110、1108は、SME 604、605で実装できるが、他方、カウンタ状態1102は、カウンタ624で実装できる。オートマトン1110が、FSMエンジン600上で実装される場合、カウンタ状態1102に対応するカウンタ624は、最初は値n1でロードされ、カウンタ624内の値がゼロに達すると、ゼロカウント出力をアサートするように設定される。n1がn2に等しい場合、カウンタ624は、ストップ0およびパルス出力モードに設定できるが、これは、カウンタ624は、その値がゼロに達すると、その出力をアサートすることを意味し、また、カウンタ624がリセットされるまで、カウンタ624はゼロのままで、いかなる信号も出さない。
オートマトン1100は、状態1104から始まり、部分式“A”に一致すると、状態1106に遷移する。状態1106での間、部分式“B”が一致するたびに、カウンタ状態1102のINポートがアクティブにされ、カウンタ状態1102が1だけ減分される。さらに、部分式“B”が一致するたびに、状態1106は、状態1110をアクティブにするだけでなく、自分自身をアクティブにする。カウンタ状態1102がゼロに達すると、出力がアクティブにされ、オートマトン1100は、次いで、部分式“C”を探す。次のサイクルでは、2つのシナリオが生じるであろう:第1のシナリオは、“〜B”が一致する場合に生じる。〜B”が一致すると、カウンタ状態1102がリセットされ、その値がn1に再度設定される。その結果、部分式“A”が次に一致するとき、プロセスは状態1104からやり直す。第2にシナリオでは、状態1106の自己ループが依然としてアクティブであり、部分式“B”が一致すると、カウンタ1102のINポートが、継続してトリガーされる。カウンタ状態1102はパルスモードで構成されているので、状態1106の自己ループがアクティブなままであるが、カウンタ状態1102は、その出力を再度アクティブにしないであろう。
部分式“B”の否定バージョンは、本明細書では“〜B”としても参照される。一例では、部分式“B”の否定バージョンは、カウンタ状態1102のリセットポートをアクティブにするために使用される。これは、“B”が、数量化“(B){n1,n2}”の繰返し式であるからであり、B以外の何か(例えば、“B”の否定バージョン)が入力で受信される場合(状態1106がアクティブにされていると)、数量化が終了し、カウンタがそれに応じてリセットされる。その結果、状態1110がアクティブにされると、部分式“B”の否定バージョンが一致する場合、カウンタ状態1102がリセットされ、数量化は一致しない。一例では、繰返し式は、標準的なオートマトン理論を使用して否定される。
n1がn2に等しい場合、単一のカウンタ状態624が示されて、数量化を実装するように説明されているが、単一のカウンタ624によってサポートされるよりも多くの数をカウントするように、複数のカウンタ624がカスケード接続できることが認識されるはずである。
図12は、数量化のある正規表現を実装するために、複数の専用カウンタ状態1202、1204を使用して、オートマトン1200に変換された正規表現の別の例を示す。オートマトン1200は、正規表現“A(B){n1,n2}C”に対応し、ここで、n1はn2より小さい。数量化“(B){n1,n2}”においてn1はn2より小さいので、2つのカウンタ状態1202、1204が使用される。カウンタ状態1202、1204は、ストップ0および保留(hold)モードに構成されており、それは、カウンタ状態1202、1204がゼロに達すると、カウンタ状態1202、1204がそれらの出力をアクティブにすることを意味し、また、カウンタ状態1202、1204がリセットされる前、カウンタ状態1202、1204はゼロのままに維持され、INポートがアクティブにされるたびにそれらの出力をアクティブに保つ。この例では、カウンタ状態1202からカウンタ状態1204への待ち時間は、2サイクルかかる。
カウンタ状態1202は、最初はn1に設定され、また、カウンタ状態1204は、最初はn2に設定される。オートマトンは、部分式“A”が一致する場合に、状態1206から状態1208に遷移する。状態1208がアクティブにされると、部分式“B”が一致するたびに、カウンタ状態1202およびカウンタ状態1204の両方のINポートがアクティブにされる。その結果、カウンタ状態1202およびカウンタ状態1204の両方が1だけ減分される。カウンタ状態1202がゼロに達すると、その出力がアクティブにされ、オートマトン1200は、次いで、部分式“C”の一致を探し、状態1210をアクティブにする。部分式“B”がn1回一致していると、カウンタ状態1204の値は、n2−n1である。その後、部分式“B”が一致するたびに、カウンタ状態1202のINポートがアクティブにされ、カウンタ状態1202の値がゼロのままに維持され、その出力は依然としてアクティブにされている。その一方で、カウンタ状態1204は継続して減分される。部分式“B”がn2回一致するとき、カウンタ状態1204もゼロに達し、その出力がアクティブにされて、カウンタ状態1202のリセットポートを駆動する。カウンタ状態1204からカウンタ状態1202への待ち時間は2サイクルであるので、カウンタ状態1202は、状態1210へのその出力を継続してアクティブにする。次のサイクルで、カウンタ状態1202が、カウンタ状態1204の出力からリセットされ、カウンタ状態1202からの出力がアサートされない。次のサイクルでは、2つのシナリオが生じるであろう。第1のシナリオでは、“〜B”が一致する。カウンタ状態1202およびカウンタ状態1204の両方が、状態1212によってリセットされ、それらの値が、それぞれn1およびn2に設定される。その結果、状態1206が次にアクティブにされるとき、および部分式“A”が次に一致するときに、状態1208がアクティブにされ、カウンタ状態1202、1204が再度減分される。第2のシナリオでは、状態1208の自己ループがアクティブのままに維持され、カウンタ状態1202、1204の両方のINポートがアクティブにされる。カウンタ状態1204は、その出力を継続してアクティブにするので、カウンタ状態1202は継続してリセットされ、状態1208の自己ループがアクティブである限り、その出力をアクティブにしない。
さらに、状態1208がアクティブである間に部分式“B”が一致すると、状態1212をアクティブにする。状態1212がアクティブにされ、かつ、“〜B”が一致すると、カウンタ状態1202、1204がリセットされ、数量化は一致しない。“B”は、数量化“(B){n1,n2}”の繰返し式であるため、部分式“B”の否定バージョンが使用される。その結果、状態1208で、式‘B’が、n1からn2回まで繰り返して一致し得る。単一のカウンタが示され、それぞれ、下限(例えば、n1)および上限(例えば、n2)の閾値を実装するように説明されているが、単一のカウンタによってサポートされるよりも多くの数をカウントするために、当業者には知られているように、複数のカウンタがカスケード接続できることが認識されるはずである。
カウンタ状態を使用して数量化を変換する前に、コンパイラは、ブロック404で、数量化に対応するオートマトンが決定性であるかどうかを判断する。一例では、式が、以下で説明する、プレフィックスなし条件および再入なし条件の両方を満足する場合、オートマトンは決定性である。すなわち、数量化がカウンタ624にマッピングされるために、数量化は、以下で説明するように、プレフィックスなし条件および再入なし条件を満足しなければならない。
図12のオートマトン1200を参照すると、再入なし条件は、カウンタ状態1202がアクティブである間(例えば、カウンタ状態1202がカウントしている間)、状態1206から状態1208へのエッジがアクティブにできないことを必要とする。すなわち、数量化が既に処理されている間に、数量化に対する駆動式が一致できるかどうかが判断される。駆動式に一致することは、数量化の直前の状態が、数量化に対応する状態に遷移することを意味する。その結果、カウンタ状態が繰返し式をまだ処理している間に、数量化が「再入」される。FSMエンジン600のこの例では、カウンタ624は、いつでも単一ループしか実装できないので、ループが既に処理されている間に数量化に遷移することは、所与のループ中に、カウンタ624に間違ってカウントさせ得る。
図13Aおよび図13Bは、再入なし条件をさらに説明するために使用できる、オートマトン1300および1314を示す。図13Aは、構文木内の数量化に対応するオートマトン例1300を示し、そこで、コンパイラは、数量化に対応するオートマトンが決定性であるかどうかを判断するために解析できる。
オートマトン1300は、正規表現“abb?(b|c){1,2}”に対応し、開始状態1302および最終状態1312、1304を含む。最終状態は、図13Aでは、二重丸で識別される。開始状態1302が最初にアクティブにされ、入力シンボル‘a’で、状態1306に遷移する。状態1306は、入力シンボル‘b’で、状態1308および状態1310の両方に遷移する。状態1308は、入力シンボル‘b’で状態1310に遷移し、状態1310は、入力シンボル‘b’または‘c’のどちらかで、状態1312に遷移する。オートマトン1300は、入力シンボル‘b’または‘c’のどちらかで、状態1312から状態1304に遷移する。
オートマトン1300は、正規表現“abb?(b|c){1,2}”に対するオートマトンを含み、それは、再入なし条件の順守をチェックされる。オートマトン1314は、オートマトン1300の正規表現“abb?(b|c){1,2}”から導出された正規表現SS(“abb?”,“(b|c){2}”)のオートマトンを含む。SS(M,N)は、M,Nから導出された正規表現として定義される。導出ステップは次を含む:1)MおよびNを連結し、結果が“MN”として示される。2)“MN”に対するオートマトンを構築し、A(MN)として示される。3)A(MN)を以下のように修正する:a)他の全ての状態を駆動するA(MN)の開始状態を作成し、そして、b)“N”に対応する全ての状態を最終状態にする。最後に、4)修正されたオートマトンに対する正規表現をSS(M,N)として示す。SS(M,N)の受け入れられたデータは、“MN”の任意の状態から始まり、Nの任意の状態で終わる、部分文字列から成る。
再入なし条件は、以下のように定義できる。数量化“AB{n1,n2}C”のある正規表現を仮定すると、再入なし条件は、£(SS(A,B{n1,n2})∩£(A)=Φであることを必要とする。言い換えれば、部分式“A”が一致し、カウンタ状態1202がカウントを開始すると、再入なし条件を満足するために、“B{n1,n2}”が完了する(一致または失敗する)まで、状態1206から状態1208へのエッジは再度アクティブにされないであろう。例えば、“abb”∈£(“abb?”)∩£(SS(“abb?”,“(b|c){2}”)、従って、“abb?(b|c){1,2}”は、カウンタ624で正しく実装されないであろう。
ここで図14を参照すると、プレフィックスなし条件が、オートマトン1400に関連して説明される。プレフィックスなし条件は、£(B)の任意の文字列が、£(B)の別の文字列のプレフィックスであってはならないことを提示し、それは、Bがカウンタに2回以上カウントさせないことを保証する。言い換えれば、数量化の第1の繰返し部分式が、数量化の第2の繰返し部分式のプレフィックスである場合、数量化は、カウンタ624として実装されない(従って、それに変換されない)。正式なステートメントは、全てのl、l∈£(B)、l≠lに対して、{l.*}∩{l.*}=Φであることを必要とする。
例えば、正規表現“a(b|bc){3}”は、プレフィックスなし条件を満足しない。その結果、正規表現“a(b|bc){3}”は、カウンタ状態を使用して変換されず、したって、カウンタ624で実装されないであろう。代わりに、正規表現“a(b|bc){3}”は、カウンタ状態のない、汎用状態に変換されるであろう。
正規表現“a(b|bc){3}”がカウンタ624で実装された場合、入力“abbc”は、誤って一致するであろう。例えば、オートマトン1400は、カウンタ状態1412を使用して、正規表現“a(b|bc){3}”を仮想的に変換した結果である。以下で説明するように、この変換は、カウンタ状態1412の誤動作という結果となる。状態1402が最初にアクティブにされ、入力‘“a”で、状態1402が状態1404をアクティブにする。状態1404をアクティブにして、入力シンボル“b”で、状態1404が、状態1406、1408をアクティブにし、それ自身、状態1404を再度アクティブにする。また、入力シンボル“b”で、状態1404は、カウンタ1412のINポートをアクティブにし、そこで、カウンタ状態1412の初期値が3で、次いで、2に減らされる。状態1404、1406、および1408をアクティブにして、別の入力“b”で、カウンタ状態1412のINポートが、状態1404によって再度アクティブにされ、カウンタ状態1412の値が1に減らされる。この時点で、状態1404、1406、および1408はアクティブにされている。次いで、入力値“c”で、状態1408によってアクティブにされるカウンタ状態1412のINポートが、カウンタ1412内の値を0に減らす。カウンタ1412内の値がゼロで、出力がアクティブにされ、状態1414がアクティブにされて、一致を示す。しかし、シーケンス“abbc”が正規表現“a(b|bc){3}”を満足しない場合に、入力“abbc”が一致を引き起こしているので、この一致は誤判定である。その結果、正規表現“a(b|bc){3}”は、プレフィックスなし条件を満足せず、カウンタ状態を使用して変換されるべきではなく、また、カウンタ624で実装されるべきではない。
ブロック404で、数量化が、プレフィックスなし条件および再入なし条件の両方を満足する場合、数量化は、ブロック406で、専用カウンタ状態を使用して変換される。数量化は、上で図12および図13に関連して説明したように、変換できる。しかし、数量化が、プレフィックスなし条件または再入なし条件のどちらかを満足しない場合、数量化は、ブロック408で、数量化を展開し、カウンタ状態624なしで、汎用状態に変換することにより、変換される。数量化は、その結果、カウンタ624ではなく、SME 604、605で実装される。
本明細書で説明する方法例は、少なくとも一部は、機械またはコンピュータ実装できる。いくつかの例は、上の例で説明した方法を実行する電子装置を構成するように動作可能な命令でコード化されたコンピュータ可読媒体または機械可読媒体を含み得る。かかる方法の実装は、マイクロコード、アセンブリ言語コード、高水準言語コード、または同様のものなどの、コードを含み得る。かかるコードは、様々な方法を実行するためのコンピュータ可読命令を含み得る。コードは、コンピュータプログラム製品の一部を形成し得る。さらに、コードは、実行中または他の時に、1つもしくは複数の揮発性または不揮発性のコンピュータ可読媒体上に有形的に格納され得る。これらのコンピュータ可読媒体は、ハードディスク、取り外し可能磁気ディスク、取り外し可能光ディスク(例えば、コンパクトディスクおよびデジタルビデオディスク)、磁気カセット、メモリカードまたはメモリスティック、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、および同様のものを含み得るが、これらに限定されない。
図15は、フォンノイマン型アーキテクチャを有するコンピュータ1500の例をおおまかに示す。本開示の内容を読んで理解すると、当業者であれば、ソフトウェアプログラム内に定義された機能を実行するために、ソフトウェアプログラムが、コンピュータベースシステム内のコンピュータ可読媒体から起動できる方法を理解するであろう。当業者は、さらに、本明細書で開示する方法を実装および実行するように設計された1つまたは複数のソフトウェアプログラムを作成するために採用できる様々なプログラム言語を理解するであろう。プログラムは、Java、C++、または1つもしくは複数の他の言語などのオブジェクト指向言語を使用して、オブジェクト指向フォーマットで構造化できる。代替として、プログラムは、アセンブリ、C、などの手続き型言語を使用して、手続き指向フォーマットで構造化できる。ソフトウェアコンポーネントは、リモートプロシージャコールまたはその他を含む、アプリケーションプログラムインタフェースまたはプロセス間通信技術など、当業者に周知の任意の数の機構を使用して、通信できる。様々な実施形態の技術は、任意の特定のプログラム言語または環境に制限されない。
このようにして、他の実施形態が実現できる。例えば、コンピュータ、メモリシステム、磁気ディスクもしくは光ディスク、何らかの他の記憶装置、または任意のタイプの電子装置もしくはシステムなどの、製品は、その上に格納された命令1524(例えば、コンピュータプログラム命令)を有するメモリ(例えば、取り外し可能記憶媒体、ならびに電気導体、光導体、または電磁導体を含む任意のメモリ)などの、コンピュータ可読媒体1522に結合された1つまたは複数のプロセッサ1502を含み得、それは、1つまたは複数のプロセッサ1502で実行される場合に、上の方法に関して説明した動作のいずれかを実行する結果となる。
コンピュータ1500は、いくつかのコンポーネントに直接、および/またはバス1508を使用して、結合されたプロセッサ1502を有するコンピュータシステムの形をとることができる。かかるコンポーネントには、メインメモリ1504、スタティックまたは不揮発性メモリ1506、および大容量記憶1516を含み得る。プロセッサ1502に結合された他のコンポーネントには、ビデオディスプレイなどの出力装置1510、キーボードなどの入力装置1512、およびマウスなどのカーソル制御装置1514を含み得る。プロセッサ1502および他のコンポーネントをネットワーク1526に結合するためのネットワークインタフェース装置1520は、バス1508にも結合できる。命令1524は、いくつかの周知の転送プロトコル(例えば、HTTP)のうちの任意の1つを利用するネットワークインタフェース装置1520を経由し、ネットワーク1526を通して、さらに転送または受信され得る。バス1508に結合されたこれら要素のいずれかは、実現される特定の実施形態に応じて、存在しないか、単独で存在し得るか、または複数で存在し得る。
一例では、1つまたは複数のプロセッサ1502、メモリ1504、1506、または記憶装置1516は各々、コンピュータ1500に、実行時に、本明細書に記載する方法のいずれか1つまたは複数を実行させ得る、命令1524を含むことができる。代替実施形態では、コンピュータ1500は、スタンドアロン装置として動作するか、または他の装置に接続(例えば、ネットワーク接続)できる。ネットワーク化された環境では、コンピュータ1500は、サーバークライアントネットワーク環境内のサーバーもしくはクライアント装置の資格で、または、ピアツーピア(もしくは分散)ネットワーク環境内のピア装置として、動作できる。コンピュータ1500には、パーソナルコンピュータ(PC)、タブレットPC、セットトップボックス(STB)、携帯情報端末(PDA)、携帯電話、ウェブアプライアンス、ネットワークルーター、スイッチもしくはブリッジ、またはその装置によってとられる動作を指定する命令のセットを(連続して、もしくは他の方法で)実行可能な任意の装置を含み得る。さらに、単一のコンピュータ1500のみが示されているが、「コンピュータ」という用語は、本明細書で説明する方法のいずれか1つまたは複数を実行するための命令のセット(または複数のセット)を単独に、または一緒に実行する装置の任意の集合を含むようにも解釈されるものとする。
コンピュータ1500は、1つまたは複数の通信プロトコル(例えば、ユニバーサルシリアルバス(USB)、IEEE 1394など)を使用して周辺機器と通信するための出力コントローラ1528も含むことができる。出力コントローラ1528は、例えば、コンピュータ1500に通信的に結合されているプログラミング装置1530にイメージを提供できる。プログラミング装置1530は、並列マシン(例えば、並列マシン500、FSMエンジン600)をプログラムするように構成できる。他の例では、プログラミング装置1530は、コンピュータ1500と統合されて、バス1508に結合できるか、またはネットワークインタフェース装置1520または別の装置を経由してコンピュータ1500と通信できる。
コンピュータ可読媒体1524は単一の媒体として示されているが、「コンピュータ可読媒体」という用語は、命令1524の1つまたは複数のセットを格納する単一の媒体または複数の媒体(例えば、集中型もしくは分散型データベース、または関連するキャッシュおよびサーバー、ならびに/またはプロセッサ1502レジスタ、メモリ1504、1506、および記憶装置1516などの様々な記憶媒体)を含むように解釈されるべきである。「コンピュータ可読媒体」という用語は、コンピュータによって実行するための命令のセットを格納、コード化、または運搬可能であり、かつ、コンピュータに本発明の方法のいずれか1つまたは複数を実行させるか、または命令のかかるセットによって利用されるか、またはそれに関連したデータ構造を格納、コード化、または運搬可能である、任意の媒体を含むように解釈されるものとする。「コンピュータ可読媒体」という用語は、その結果、ソリッドステートメモリ、光媒体、および磁気媒体などの、有形的媒体を含むように解釈されるものとするが、それらに限定されない。
要約は、読者が技術的開示の本質および要点を確認できるようにする要約を要求する米国特許規則(37 C.F.R)1.72(b)項に準拠するために提供されている。それは、請求項の範囲または意味を制限または解釈するために使用されないという理解で提示されている。以下の請求項は、これによって詳細な説明に組み込まれ、各請求項が別個の実施形態として権利を主張する。
〔実施形態例〕
例1は、汎用要素および専用要素を含む、要素のセットに対応する機械コードを生成するためのコンピュータ実装方法を含み、本方法は、関係的に結合された演算子の配列内の部分が、専用要素にマッピングされるための条件を満足するかどうかを判断すること;その部分が条件を満足する場合に、その部分を専用要素にマッピングすること;および関係的に結合された演算子の配列を機械コードに変換することを含む。
例2は、命令を含むコンピュータ可読媒体を含み、それは、コンピュータによって実行されるときに、そのコンピュータに:対象装置のための専用要素に対応する、関係的に結合された演算子の配列内の部分を識別することであって、対象装置が汎用要素も含む、配列内の部分を識別すること;その部分が、専用要素にマッピングされるための条件を満足するかどうかを判断すること;その配列を、複数の状態を含むオートマトンに変換することであって、その部分が条件を満足する場合に、その部分が、専用要素に対応する専用状態を使用して変換される、その配列をオートマトンに変換すること;およびオートマトンを機械コードに変換すること;を含む動作を実行させる。
例3は、ソフトウェアがその上に格納されたメモリ;およびそのメモリに通信的に結合されたプロセッサを含むコンピュータを含み、そのソフトウェアは、プロセッサによって実行されるとき、そのプロセッサに、正規表現を、対象装置用のコードにコンパイルさせ、対象装置は、第1のタイプの要素および少なくとも他のタイプの要素をサポートし;コンパイルすることが、第1のタイプの要素に対応する第1の正規表現を第1のタイプの要素にマッピングすることを含み;また、コンパイルすることが、第1のタイプの要素に対応しない第2の正規表現を、少なくとも1つの他のタイプの要素にマッピングすることを含む。
例4は、コンピュータであって、対象装置の専用要素に対応する、関係的に結合された演算子の配列内の部分を識別することであって、対象装置が汎用要素も含む、配列内の部分を識別すること;その部分が、専用要素にマッピングされるための条件を満足するかどうかを判断すること;配列を、複数の相互接続状態を含むオートマトンに変換することであって、第1の部分が条件を満足する場合に、専用要素に対応する専用状態にその部分が変換される、配列をオートマトンに変換すること;および、オートマトンを機械コードに変換すること、を行うように構成されたコンピュータ;ならびに、並列マシンをプログラムするための装置であって、その装置が機械コードを並列マシン上にロードするように構成されている、装置;を含むシステムを含む。
例5では、例1〜4のいずれかの主題が、機械コードが、並列マシンのためのイメージを含むこと、を随意に含み得る。
例6では、例1〜5のいずれかの主題が、要素のセットが、プロセッサ上で実装するための命令のセットを含むこと、および、専用要素が専用命令を含むこと、を随意に含み得る。
例7では、例1〜6のいずれかの主題が、専用要素に対応する、関係的に結合された演算子の配列内の部分を識別することであって、部分が条件を満足するかどうかを判断することが、識別される部分が条件を満足するかどうかを判断し;マッピングすることが、配列を、複数の状態を含むオートマトンに変換することを含み、その部分が条件を満足する場合に、その部分が、専用要素に対応する専用状態を使用して、変換され;かつ、配列を変換することが、オートマトンを機械コードに変換することを含む、配列内の部分を識別することを含むこと、を随意に含み得る。
例8では、例1〜7のいずれかの主題が、専用要素に対応する配列内の部分を識別することが、専用要素を使用して実装できる、関係的に結合された演算子の演算子を識別することを含むこと、を随意に含み得る。
例9では、例1〜8のいずれかの主題が、配列をオートマトンに変換することが、その配列内の各演算子を複数の状態のうちの1つまたは複数に変換することを含むこと、を随意に含み得る。
例10では、例1〜9のいずれかの主題が、部分が条件を満足しない場合に、その部分が、専用要素に対応する専用状態を使用するのではなく、汎用状態を使用して変換され、汎用状態が汎用要素に対応すること、を随意に含み得る。
例11では、例1〜10のいずれかの主題が、部分が第1の部分を含み、配列の第2の部分が専用要素に対応するとして識別されない場合に、配列の第2の部分が、専用要素に対応する専用状態を使用するのではなく、汎用状態を使用して変換され、汎用状態が汎用要素に対応すること、を随意に含み得る。
例12では、例1〜11のいずれかの主題が、要素のセットが並列マシンのハードウェア要素のセットを含み、汎用要素がプログラム可能要素を含み、かつ、専用要素がカウンタを含むこと、を随意に含み得る。
例13では、例1〜12のいずれかの主題が、プログラム可能要素が状態機械要素を含むこと、を随意に含み得る。
例14では、例1〜13のいずれかの主題が、状態機械要素がメモリセルを含むこと、を随意に含み得る。
例15では、例1〜13のいずれかの主題が、メモリセルが揮発性メモリセルを含むこと、を随意に含み得る。
例16では、例1〜15のいずれかの主題が、機械コードを公開することをさらに含むこと、を随意に含み得る。
例17では、例1〜16のいずれかの主題が、機械コードを公開することが、その機械コードを並列マシン上にロードすることを含むこと、を随意に含み得る。
例18では、例1〜17のいずれかの主題が、機械コードを公開することが、機械コードをコンピュータ可読媒体上に格納することを含むこと、を随意に含み得る。
例19では、例1〜18のいずれかの主題が、命令が、コンピュータに、ソースコードを配列に変換すること;および機械コードを公開すること、を含む動作を実行させること、を随意に含み得る。
例20では、例1〜19のいずれかの主題が、部分が、専用要素にマッピングされるための条件を満足するかどうかを判断することが、その部分が決定性であるかどうかを判断することを含むこと、を随意に含み得る。
例21では、例1〜20のいずれかの主題が、配列の部分を識別することが、数量化を識別することを含み、かつ、その部分が決定性であるかどうかを判断することが、数量化に対する駆動式が、数量化が処理されている間に、一致できるかどうかを判断することを含むこと、を随意に含み得る。
例22では、例1〜21のいずれかの主題が、配列の部分を識別することが、数量化を識別することを含み、かつ、その部分が決定性であるかどうかを判断することが、数量化の繰返し式が、数量化の別の繰返し式のプレフィックスであるかどうかを判断することを含むこと、を随意に含み得る。
例23では、例1〜22のいずれかの主題が、配列内の部分を識別することが、数量化を識別することを含むこと、を随意に含み得る。
例24では、例1〜23のいずれかの主題が、部分が決定性であるかどうかを判断することが、数量化に対する駆動式が、その数量化が処理されている間に一致できるかどうかを判断すること、および、数量化の繰返し式が、数量化の別の繰返し式のプレフィックスであるかどうかを判断することを含むこと、を随意に含み得る。
例25では、例1〜24のいずれかの主題が、専用要素が、オートマトン内に対応するカウンタ状態を有するカウンタを含み、かつ、汎用要素が、オートマトン内に対応する状態機械要素状態を有する状態機械要素を含むこと、を随意に含み得る。
例26では、例1〜25のいずれかの主題が、部分が数量化に対応し、かつ部分が決定性である場合、その部分が、数量化の繰返し式およびカウンタ状態を含むループとして実装され、そのカウンタ状態が、繰返し式が一致する回数をカウントするように構成されていて、また、繰返し式が、数量化によって指定された回数一致する場合に、カウンタ状態が下流状態をアクティブにすること、を随意に含み得る。
例27では、例1〜26のいずれかの主題が、ループが、繰返し式の否定バージョンとの一致によって終了されること、を随意に含み得る。
例28では、例1〜27のいずれかの主題が、数量化が、単一のループ数と一致し得る場合に、繰返し式を、カウンタ状態のカウント入力をアサートするように構成し;繰返し式の否定バージョンを、カウンタ状態をリセットするように構成し;かつ、カウンタ状態がリセットされることなく、カウント入力が、ループ数に等しい回数アサートされている場合に、出力をアサートするようにカウンタ状態を構成すること、を随意に含み得る。
例29では、例1〜28のいずれかの主題が、数量化が複数個のループ数と一致し得る場合に、第1のカウンタ状態のカウント入力および第2のカウンタ状態のカウント入力をアサートするように繰返し式を構成し;第1のカウンタ状態のリセット入力および第2のカウンタ状態のリセット入力をアサートするように繰返し式を構成し;第1のカウンタ状態のカウント入力が、第1のカウンタ状態がリセットされることなく、複数個のループ数の下限閾値に等しい回数アサートされている場合に、出力をアサートするように第1のカウンタ状態を構成し;かつ、第2のカウンタ状態のカウント入力が、第2のカウンタ状態がリセットされることなく、複数個のループ数の上限閾値に等しい回数アサートされている場合に、第2のカウンタ状態の出力をアサートするように第2のカウンタ状態を構成することであって、第2のカウンタ状態の出力が、第1のカウンタ状態のリセット入力をアサートするように構成されている、第2のカウンタ状態を構成すること、を随意に含み得る。
例30では、例1〜29のいずれかの主題が、対象装置が並列マシンを含むこと、および、第1のタイプの要素が第1のタイプのハードウェア要素であり、かつ、少なくとも1つの他のタイプの要素が第2のタイプのハードウェア要素を含むこと、を随意に含み得る。
例31では、例1〜30のいずれかの主題が、第2のタイプのハードウェア要素が、入力ストリームを受信し、その入力ストリームに応じて出力を提供でき、かつ、第1のタイプのハードウェア要素が、入力ストリームを受信せず、対象装置の他の要素からの入力に応じて出力を提供すること、を随意に含み得る。
例32では、例1〜31のいずれかの主題が、第1のタイプの要素がカウンタであり、かつ、第2のタイプの要素が状態機械要素であること、を随意に含み得る。
例33では、例1〜32のいずれかの主題が、正規表現が、第1のタイプの要素に対応するタイプであるかどうかを判断すること、および、正規表現が、第1のタイプの要素に対応するタイプではない場合に、正規表現を少なくとも1つの他のタイプの要素にマッピングすること、を随意に含み得る。
例34では、例1〜33のいずれかの主題が、正規表現が、第1のタイプの要素に対応するタイプであるかどうかを判断することが、正規表現が、数量化であるかどうかを判断することを含むこと、および、正規表現が、数量化ではない場合に、正規表現を、少なくとも1つの他のタイプの要素にマッピングすること、を随意に含み得る。
例35では、例1〜34のいずれかの主題が、数量化が決定性であるかどうかを判断すること;数量化が決定性である場合に、正規表現を、第1のタイプの要素にマッピングすること;および、数量化が決定性でない場合に、正規表現を、少なくとも1つの他のタイプの要素にマッピングすること、を随意に含み得る。
例36では、例1〜35のいずれかの主題が、数量化が決定性であるかどうかを判断することが、数量化が処理されている間に、数量化に対する駆動式が一致できるかどうか、および数量化の繰返し式が、数量化の別の繰返し式のプレフィックスであるかどうかを判断することを含むこと、を随意に含み得る。
例37では、例1〜36のいずれかの主題が、コンパイルすることが、構文木を形成するために正規表現を解析すること;構文木をオートマトンに変換すること;オートマトンをネットリストに変換すること;ネットリストのインスタンスを位置づけること;およびネットリストのインスタンス間の接続をルーティングすることを含むこと、を随意に含み得る。
例38では、例1〜37のいずれかの主題が、正規表現が、非構造化データを検索するための基準を含むこと、を随意に含み得る。
例39では、例1〜38のいずれかの主題が、部分が、専用要素にマッピングされるための条件を満足するかどうかを判断することが、その部分が決定性であるかどうかを判断することを含むこと、を随意に含み得る。
例40では、例1〜39のいずれかの主題が、配列の部分を識別することが、数量化を識別することを含み;その部分が決定性であるかどうかを判断することが、数量化が処理されている間に、数量化に対する駆動式が一致できるかどうか、および数量化の繰返し式が、数量化の別の繰返し式のプレフィックスであるかどうかを判断することを含むこと、を随意に含み得る。
例41は、請求項1〜請求項40のいずれかの主題を使用して生成されたイメージによってプログラム化された並列マシンを含む。

Claims (41)

  1. 汎用要素および専用要素を含む、要素のセットに対応する機械コードを生成するためのコンピュータ実装方法であって、
    関係的に結合された演算子の配列内の部分が、専用要素にマッピングされるための条件を満足するかどうかを判断することと、
    前記部分が前記条件を満足する場合に、前記部分を専用要素にマッピングすることと、
    関係的に結合された演算子の前記配列を機械コードに変換することと
    を含むコンピュータ実装方法。
  2. 前記機械コードが、並列マシンのためのイメージを含む、請求項1に記載のコンピュータ実装方法。
  3. 要素の前記セットが、プロセッサ上で実装するための命令のセットを含み、かつ、前記専用要素が専用命令を含む、請求項1に記載のコンピュータ実装方法。
  4. 専用要素に対応する、関係的に結合された演算子の前記配列内の部分を識別することであって、部分が条件を満足するかどうかを判断することが、識別される前記部分が条件を満足するかどうかを判断する、部分を識別することを含み、
    マッピングすることが、前記配列を、複数の状態を含むオートマトンに変換することを含み、前記部分が前記条件を満足する場合に、前記部分が、前記専用要素に対応する専用状態を使用して、変換され、かつ、
    前記配列を変換することが、前記オートマトンを機械コードに変換することを含む、
    請求項1に記載のコンピュータ実装方法。
  5. 専用要素に対応する前記配列内の部分を識別することが、前記専用要素を使用して実装できる、前記関係的に結合された演算子の演算子を識別することを含む、請求項4に記載のコンピュータ実装方法。
  6. 前記配列をオートマトンに変換することが、前記配列内の前記演算子の各々を前記複数の状態のうちの1つまたは複数に変換することを含む、請求項4に記載のコンピュータ実装方法。
  7. 前記部分が前記条件を満足しない場合に、前記部分が、専用要素に対応する専用状態を使用するのではなく、汎用状態を使用して変換され、前記汎用状態が前記汎用要素に対応する、請求項4に記載のコンピュータ実装方法。
  8. 前記部分が第1の部分を含み、かつ、前記配列の第2の部分が専用要素に対応するとして識別されない場合に、前記第2の部分が、専用要素に対応する専用状態を使用するのではなく、汎用状態を使用して変換され、前記汎用状態が前記汎用要素に対応する、請求項4に記載のコンピュータ実装方法。
  9. 要素の前記セットが並列マシンのハードウェア要素のセットを含み、前記汎用要素がプログラム可能要素を含み、かつ、前記専用要素がカウンタを含む、請求項1に記載のコンピュータ実装方法。
  10. 前記プログラム可能要素が状態機械要素を含む、請求項9に記載のコンピュータ実装方法。
  11. 前記状態機械要素がメモリセルを含む、請求項10に記載のコンピュータ実装方法。
  12. 前記メモリセルが揮発性メモリセルを含む、請求項11に記載のコンピュータ実装方法。
  13. 前記機械コードを公開することをさらに含む、請求項1に記載のコンピュータ実装方法。
  14. 前記機械コードを公開することが、前記機械コードを並列マシン上にロードすることを含む、請求項13に記載のコンピュータ実装方法。
  15. 前記機械コードを公開することが、前記機械コードをコンピュータ可読媒体上に格納することを含む、請求項13に記載のコンピュータ実装方法。
  16. 命令を含むコンピュータ可読媒体であって、
    前記命令が前記コンピュータによって実行される際に、前記コンピュータに:
    対象装置のための専用要素に対応する、関係的に結合された演算子の配列内の部分を識別することであって、前記対象装置が汎用要素も含む、配列内の部分を識別することと、
    前記部分が、前記専用要素にマッピングされるための条件を満足するかどうかを判断することと、
    前記配列を、複数の状態を含むオートマトンに変換することであって、前記部分が前記条件を満足する場合に、前記部分が、前記専用要素に対応する専用状態を使用して変換される、前記配列をオートマトンに変換することと、
    前記オートマトンを機械コードに変換することと
    を含む動作を実行させる、
    コンピュータ可読媒体。
  17. 前記命令が、前記コンピュータに:
    ソースコードを前記配列に変換することと、
    前記機械コードを公開することと
    を含む動作を実行させる、請求項16に記載のコンピュータ可読媒体。
  18. 前記部分が、専用要素にマッピングされるための条件を満足するかどうかを判断することが、前記部分が決定性であるかどうかを判断することを含む、請求項16に記載のコンピュータ可読媒体。
  19. 前記配列の部分を識別することが
    数量化を識別することを含み、かつ、
    前記部分が決定性であるかどうかを判断することが、前記数量化に対する駆動式が、前記数量化が処理されている間に、一致できるかどうかを判断することを含む、
    請求項18に記載のコンピュータ可読媒体。
  20. 前記配列の部分を識別することが、
    数量化を識別することを含み、かつ、
    前記部分が決定性であるかどうかを判断することが、前記数量化の繰返し式が、前記数量化の別の繰返し式のプレフィックスであるかどうかを判断することを含む、
    請求項18に記載のコンピュータ可読媒体。
  21. 前記配列内の部分を識別することが、数量化を識別することを含む、請求項18に記載のコンピュータ可読媒体。
  22. 部分が決定性であるかどうかを判断することが、前記数量化に対する駆動式が、前記数量化が処理されている間に一致できるかどうかを判断すること、および、前記数量化の繰返し式が、前記数量化の別の繰返し式のプレフィックスであるかどうかを判断することを含む、請求項21に記載のコンピュータ可読媒体。
  23. 前記専用要素が、前記オートマトン内に対応するカウンタ状態を有するカウンタを含み、かつ、前記汎用要素が、前記オートマトン内に対応する状態機械要素状態を有する状態機械要素を含む、請求項22に記載のコンピュータ可読媒体。
  24. 前記部分が数量化に対応し、かつ前記部分が決定性である場合、前記部分が、前記数量化の繰返し式およびカウンタ状態を含むループとして実装され、前記カウンタ状態が、前記繰返し式が一致する回数をカウントするように構成されていて、また、前記繰返し式が、前記数量化によって指定された回数一致する場合に、前記カウンタ状態が下流の状態をアクティブにする、請求項23に記載のコンピュータ可読媒体。
  25. 前記ループが、前記繰返し式の否定バージョンとの一致によって終了される、請求項24に記載のコンピュータ可読媒体。
  26. 前記数量化が、単一のループ数と一致し得る場合に、
    前記繰返し式を、前記カウンタ状態のカウント入力をアサートするように構成し、
    前記繰返し式の否定バージョンを、前記カウンタ状態をリセットするように構成し、かつ
    前記カウント入力が、カウンタ状態がリセットされることなく、前記ループ数に等しい回数アサートされている場合に、出力をアサートするように前記カウンタ状態を構成する、
    請求項24に記載のコンピュータ可読媒体。
  27. 前記数量化が複数個のループ数と一致し得る場合に、
    第1のカウンタ状態のカウント入力および第2のカウンタ状態のカウント入力をアサートするように前記繰返し式を構成し;
    前記第1のカウンタ状態のリセット入力および前記第2のカウンタ状態のリセット入力をアサートするように前記繰返し式を構成し;
    前記第1のカウンタ状態の前記カウント入力が、前記第1のカウンタ状態がリセットされることなく、前記複数個のループ数の下限閾値に等しい回数アサートされている場合に、出力をアサートするように前記第1のカウンタ状態を構成し;かつ、
    前記第2のカウンタ状態の前記カウント入力が、前記第2のカウンタ状態がリセットされることなく、前記複数個のループ数の上限閾値に等しい回数アサートされている場合に、前記第2のカウンタ状態の出力をアサートするように前記第2のカウンタ状態を構成することであって、前記第2のカウンタ状態の前記出力が、前記第1のカウンタ状態の前記リセット入力をアサートするように構成されている、前記第2のカウンタ状態を構成する、
    請求項24に記載のコンピュータ可読媒体。
  28. コンピュータであって、
    ソフトウェアがその上に格納されたメモリと、
    前記メモリに通信的に結合されたプロセッサとを備え、
    前記ソフトウェアが、前記プロセッサによって実行される際に、前記プロセッサに、正規表現を、対象装置用のコードにコンパイルさせ、
    前記対象装置が、第1のタイプの要素および少なくとも他のタイプの要素をサポートし;
    コンパイルすることが、前記第1のタイプの要素に対応する第1の正規表現を、前記第1のタイプの要素にマッピングすることを含み;かつ
    コンパイルすることが、前記第1のタイプの要素に対応しない第2の正規表現を、前記少なくとも1つの他のタイプの要素にマッピングすることを含む、
    コンピュータ。
  29. 前記対象装置が並列マシンを含み、また、前記第1のタイプの要素が第1のタイプのハードウェア要素であり、かつ、前記少なくとも1つの他のタイプの要素が第2のタイプのハードウェア要素を含む、請求項28に記載のコンピュータ。
  30. 前記第2のタイプのハードウェア要素が、入力ストリームを受信し、前記入力ストリームに応じて出力を提供でき、かつ、
    前記第1のタイプのハードウェア要素が、前記入力ストリームを受信せず、前記対象装置の他の要素からの入力に応じて出力を提供する、
    請求項29に記載のコンピュータ。
  31. 前記第1のタイプの要素がカウンタであり、かつ、前記第2のタイプの要素が状態機械要素である、請求項30に記載のコンピュータ。
  32. 前記ソフトウェアが、前記プロセッサに:
    正規表現が、前記第1のタイプの要素に対応するタイプであるかどうかを判断させ;かつ、
    前記正規表現が、前記第1のタイプの要素に対応するタイプではない場合に、前記正規表現を前記少なくとも1つの他のタイプの要素にマッピングさせる、
    請求項28に記載のコンピュータ。
  33. 正規表現が、前記第1のタイプの要素に対応するタイプであるかどうかを判断することが:
    前記正規表現が、数量化であるかどうかを判断することと、
    前記正規表現が数量化ではない場合に、前記正規表現を、前記少なくとも1つの他のタイプの要素にマッピングすることと
    を含む、請求項32に記載のコンピュータ。
  34. 前記ソフトウェアが、前記プロセッサに:
    前記数量化が決定性であるかどうかを判断させ;
    前記数量化が決定性である場合に、前記正規表現を、前記第1のタイプの要素にマッピングさせ;そして、
    前記数量化が決定性でない場合には、前記正規表現を、前記少なくとも1つの他のタイプの要素にマッピングさせる、
    請求項33に記載のコンピュータ。
  35. 前記数量化が決定性であるかどうかを判断することが、前記数量化が処理されている間に、前記数量化に対する駆動式が一致できるかどうか、および前記数量化の繰返し式が、前記数量化の別の繰返し式のプレフィックスであるかどうかを判断することを含む、請求項34に記載のコンピュータ。
  36. コンパイルすることが、
    構文木を形成するために前記正規表現を解析することと、
    前記構文木をオートマトンに変換することと、
    前記オートマトンをネットリストに変換することと、
    前記ネットリストのインスタンスを位置づけることと、
    前記ネットリストの前記インスタンス間の接続をルーティングすることと
    を含む、請求項28に記載のコンピュータ。
  37. 前記正規表現が、非構造化データを検索するための基準を含む、請求項36に記載のコンピュータ。
  38. コンピュータであって、
    対象装置の専用要素に対応する、関係的に結合された演算子の配列内の部分を識別することであって、前記対象装置が汎用要素も含む、配列内の部分を識別することと;
    前記部分が、前記専用要素にマッピングされるための条件を満足するかどうかを判断することと;
    前記配列を、複数の相互接続状態を含むオートマトンに変換することであって、前記第1の部分が前記条件を満足する場合に、前記専用要素に対応する専用状態に前記部分が変換される、前記配列をオートマトンに変換することと;
    前記オートマトンを機械コードに変換することと
    を行うように構成されたコンピュータと、
    並列マシンをプログラムするための装置であって、前記装置が前記機械コードを前記並列マシン上にロードするように構成されている、装置と
    を備えるシステム。
  39. 前記部分が、専用要素にマッピングされるための条件を満足するかどうかを判断することが、前記部分が決定性であるかどうかを判断することを含む、請求項38に記載のシステム。
  40. 前記配列の部分を識別することが、
    数量化を識別することを含み、
    前記部分が決定性であるかどうかを判断することが、前記数量化が処理されている間に、前記数量化に対する駆動式が一致できるかどうか、および前記数量化の繰返し式が、前記数量化の別の繰返し式のプレフィックスであるかどうかを判断することを含む、
    請求項38に記載のシステム。
  41. 請求項1の前記プロセスを使用して生成されたイメージによってプログラム化された並列マシン。
JP2013550670A 2011-01-25 2012-01-24 Fsmを実装するための専用要素の利用 Active JP5848778B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201161436022P 2011-01-25 2011-01-25
US61/436,022 2011-01-25
PCT/US2012/022439 WO2012103146A2 (en) 2011-01-25 2012-01-24 Utilizing special purpose elements to implement a fsm

Publications (3)

Publication Number Publication Date
JP2014506692A true JP2014506692A (ja) 2014-03-17
JP2014506692A5 JP2014506692A5 (ja) 2015-03-19
JP5848778B2 JP5848778B2 (ja) 2016-01-27

Family

ID=46545130

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013550670A Active JP5848778B2 (ja) 2011-01-25 2012-01-24 Fsmを実装するための専用要素の利用

Country Status (7)

Country Link
US (3) US8843911B2 (ja)
EP (1) EP2668574B1 (ja)
JP (1) JP5848778B2 (ja)
KR (1) KR101606622B1 (ja)
CN (1) CN103547999B (ja)
TW (1) TWI517036B (ja)
WO (1) WO2012103146A2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019516167A (ja) * 2016-03-23 2019-06-13 フォグホーン システムズ, インコーポレイテッドFoghorn Systems, Inc. リアルタイムデータフロープログラミング言語のためのツールおよび方法
JP2023046367A (ja) * 2021-09-23 2023-04-04 延世大学校 産学協力団 グルシコフオートマタ生成とハイブリッドマッチングを活用した正規表現式エンジンに関するオートマタ処理装置及び方法

Families Citing this family (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8938590B2 (en) 2008-10-18 2015-01-20 Micron Technology, Inc. Indirect register access method and system
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
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
US9348784B2 (en) 2008-12-01 2016-05-24 Micron Technology, Inc. Systems and methods for managing endian mode of a device
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
US9164945B2 (en) 2008-12-01 2015-10-20 Micron Technology, Inc. Devices, systems, and methods to synchronize parallel processing of a single data stream
US8140780B2 (en) 2008-12-31 2012-03-20 Micron Technology, Inc. Systems, methods, and devices for configuring a device
US8281395B2 (en) 2009-01-07 2012-10-02 Micron Technology, Inc. Pattern-recognition processor with matching-data reporting module
US20100174887A1 (en) 2009-01-07 2010-07-08 Micron Technology Inc. Buses for Pattern-Recognition Processors
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
US9323994B2 (en) * 2009-12-15 2016-04-26 Micron Technology, Inc. Multi-level hierarchical routing matrices for pattern-recognition processors
US9501705B2 (en) 2009-12-15 2016-11-22 Micron Technology, Inc. Methods and apparatuses for reducing power consumption in a pattern recognition processor
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
CN103443767B (zh) 2011-01-25 2016-01-20 美光科技公司 展开量化以控制自动机的入度和/或出度
JP5763783B2 (ja) 2011-01-25 2015-08-12 マイクロン テクノロジー, インク. 正規表現をコンパイルするための方法および装置
EP2668574B1 (en) * 2011-01-25 2021-11-24 Micron Technology, INC. Utilizing special purpose elements to implement a fsm
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
US8593175B2 (en) 2011-12-15 2013-11-26 Micron Technology, Inc. Boolean logic 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
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
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
US9524248B2 (en) 2012-07-18 2016-12-20 Micron Technology, Inc. Memory management for a hierarchical memory system
US9501131B2 (en) 2012-08-31 2016-11-22 Micron Technology, Inc. Methods and systems for power management in a pattern recognition processing system
US9063532B2 (en) 2012-08-31 2015-06-23 Micron Technology, Inc. Instruction insertion in state machine engines
US9075428B2 (en) 2012-08-31 2015-07-07 Micron Technology, Inc. Results generation for state machine engines
GB2511072A (en) * 2013-02-22 2014-08-27 Ibm Non-deterministic finite state machine module for use in a regular expression matching system
US9703574B2 (en) 2013-03-15 2017-07-11 Micron Technology, Inc. Overflow detection and correction in state machine engines
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
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
US11366675B2 (en) 2014-12-30 2022-06-21 Micron Technology, Inc. Systems and devices for accessing a state machine
TWI547822B (zh) * 2015-07-06 2016-09-01 緯創資通股份有限公司 資料處理方法及系統
US10846103B2 (en) 2015-10-06 2020-11-24 Micron Technology, Inc. Methods and systems for representing processing resources
US10691964B2 (en) 2015-10-06 2020-06-23 Micron Technology, Inc. Methods and systems for event reporting
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
US10592450B2 (en) 2016-10-20 2020-03-17 Micron Technology, Inc. Custom compute cores in integrated circuit devices
US10929764B2 (en) 2016-10-20 2021-02-23 Micron Technology, Inc. Boolean satisfiability
US10481881B2 (en) * 2017-06-22 2019-11-19 Archeo Futurus, Inc. Mapping a computer code to wires and gates
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
KR101997012B1 (ko) * 2018-12-18 2019-07-05 한국과학기술정보연구원 오토마타 상태 복잡도에 기초한 프로그램의 리소스 예측 방법 및 이를 적용한 장치
CN109753713B (zh) * 2018-12-28 2023-06-02 中国人民解放军国防科技大学 基于内部实体状态转移的数字电路功能建模方法及系统
US11948855B1 (en) * 2019-09-27 2024-04-02 Rockwell Collins, Inc. Integrated circuit (IC) package with cantilever multi-chip module (MCM) heat spreader

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005353061A (ja) * 2004-06-07 2005-12-22 Ip Flex Kk ハードウェア情報を生成する方法
JP2009093599A (ja) * 2007-10-12 2009-04-30 Nec Corp 文字列照合回路
WO2010018710A1 (ja) * 2008-08-13 2010-02-18 日本電気株式会社 有限オートマトン生成装置、パターンマッチング装置、有限オートマトン回路生成方法およびプログラム
US20100185647A1 (en) * 2009-01-12 2010-07-22 Micron Technology, Inc. Devices, systems, and methods for communicating pattern matching results of a parallel pattern search engine

Family Cites Families (85)

* Cited by examiner, † Cited by third party
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
AU5355098A (en) 1996-11-14 1998-06-03 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
US7464254B2 (en) 2003-01-09 2008-12-09 Cisco Technology, Inc. Programmable processor apparatus integrating dedicated search registers and dedicated state machine registers with associated execution hardware to support rapid application of rulesets to data
CN1894559A (zh) 2003-03-17 2007-01-10 索尼电子有限公司 执行使命引擎的方法和装置
ATE542176T1 (de) 2003-10-16 2012-02-15 Canon Kk Betriebsschaltung und betriebssteuerverfahren dafür
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
WO2005119531A2 (en) 2004-06-01 2005-12-15 Tera Systems, Inc. Rule-based design consultant and method for integrated circuit design
WO2006013428A1 (en) 2004-07-26 2006-02-09 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
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
US20070112701A1 (en) 2005-08-15 2007-05-17 Microsoft Corporation Optimization of cascaded classifiers
CN101099147B (zh) 2005-11-11 2010-05-19 松下电器产业株式会社 对话支持装置
JP4528728B2 (ja) 2006-01-31 2010-08-18 株式会社東芝 デジタル回路の自動設計装置、自動設計方法、および自動設計プログラム
US7427871B2 (en) 2006-06-21 2008-09-23 Element Cxi, Llc Fault tolerant integrated circuit architecture
US7809723B2 (en) 2006-06-26 2010-10-05 Microsoft Corporation Distributed hierarchical text classification framework
CN1877531A (zh) 2006-06-30 2006-12-13 浙江大学 一种嵌入式编译体系扫描器的实现方法
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
US7962428B2 (en) 2006-11-30 2011-06-14 Siemens Medical Solutions Usa, Inc. System and method for joint optimization of cascaded classifiers for computer aided detection
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
CN101013452A (zh) 2007-02-05 2007-08-08 江苏大学 一种符号化的模型检测方法
US7693806B2 (en) 2007-06-21 2010-04-06 Microsoft Corporation Classification using a cascade approach
CN101360088B (zh) * 2007-07-30 2011-09-14 华为技术有限公司 正则表达式编译、匹配系统及编译、匹配方法
US8561037B2 (en) 2007-08-29 2013-10-15 Convey Computer Compiler for generating an executable comprising instructions for a plurality of different instruction sets
CN101201836B (zh) 2007-09-04 2010-04-14 浙江大学 基于带记忆确定有限自动机的正则表达式匹配加速方法
CN101499065B (zh) 2008-02-01 2011-11-02 华为技术有限公司 基于fa的表项压缩方法及装置、表项匹配方法及装置
CN101339501B (zh) 2008-08-12 2012-07-18 北京航空航天大学 基于有向图的ws-bpel控制环路检测方法
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
WO2010051542A2 (en) 2008-10-31 2010-05-06 Melodis Corporation Melodis crystal decoder method and device
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
US7917684B2 (en) 2008-11-05 2011-03-29 Micron Technology, Inc. Bus translator
US20100118425A1 (en) 2008-11-11 2010-05-13 Menachem Rafaelof Disturbance rejection in a servo control loop using pressure-based disc mode sensor
US10007486B2 (en) 2008-12-01 2018-06-26 Micron Technology, Inc. Systems and methods to enable identification of different data sets
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
TWI395103B (zh) 2008-12-31 2013-05-01 C Media Electronics Inc 自動執行訊號處理方法與具有該自動執行功能之裝置
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
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
EP2482911B1 (en) 2009-09-29 2022-08-17 Edwards Lifesciences Corporation Devices for delivering an endocardial device
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
US9501705B2 (en) 2009-12-15 2016-11-22 Micron Technology, Inc. Methods and apparatuses for reducing power consumption in a pattern recognition processor
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
JP5763783B2 (ja) 2011-01-25 2015-08-12 マイクロン テクノロジー, インク. 正規表現をコンパイルするための方法および装置
CN103443767B (zh) 2011-01-25 2016-01-20 美光科技公司 展开量化以控制自动机的入度和/或出度
EP2668574B1 (en) 2011-01-25 2021-11-24 Micron Technology, INC. Utilizing special purpose elements to implement a fsm
WO2012103151A2 (en) 2011-01-25 2012-08-02 Micron Technology, Inc. State grouping for element utilization

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005353061A (ja) * 2004-06-07 2005-12-22 Ip Flex Kk ハードウェア情報を生成する方法
JP2009093599A (ja) * 2007-10-12 2009-04-30 Nec Corp 文字列照合回路
WO2010018710A1 (ja) * 2008-08-13 2010-02-18 日本電気株式会社 有限オートマトン生成装置、パターンマッチング装置、有限オートマトン回路生成方法およびプログラム
US20100185647A1 (en) * 2009-01-12 2010-07-22 Micron Technology, Inc. Devices, systems, and methods for communicating pattern matching results of a parallel pattern search engine

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSNJ201410033024; 新屋良磨、河野真治: '動的なコード生成を用いた正規表現マッチャの実装' 情報処理学会>シンポジウム>プログラミング・シンポジウム>冬>52回[online]第52回プログラ , 20110107, p.173-180, 一般社団法人情報処理学会 *
JPN6015011306; 新屋良磨、河野真治: '動的なコード生成を用いた正規表現マッチャの実装' 情報処理学会>シンポジウム>プログラミング・シンポジウム>冬>52回[online]第52回プログラ , 20110107, p.173-180, 一般社団法人情報処理学会 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019516167A (ja) * 2016-03-23 2019-06-13 フォグホーン システムズ, インコーポレイテッドFoghorn Systems, Inc. リアルタイムデータフロープログラミング言語のためのツールおよび方法
JP2022062060A (ja) * 2016-03-23 2022-04-19 フォグホーン システムズ,インコーポレイテッド リアルタイムデータフロープログラミング言語のためのツールおよび方法
JP7371141B2 (ja) 2016-03-23 2023-10-30 フォグホーン システムズ,インコーポレイテッド リアルタイムデータフロープログラミング言語のためのツールおよび方法
JP2023046367A (ja) * 2021-09-23 2023-04-04 延世大学校 産学協力団 グルシコフオートマタ生成とハイブリッドマッチングを活用した正規表現式エンジンに関するオートマタ処理装置及び方法
JP7307784B2 (ja) 2021-09-23 2023-07-12 延世大学校 産学協力団 グルシコフオートマタ生成とハイブリッドマッチングを活用した正規表現式エンジンに関するオートマタ処理装置及び方法

Also Published As

Publication number Publication date
WO2012103146A2 (en) 2012-08-02
US20160170728A1 (en) 2016-06-16
US20140380288A1 (en) 2014-12-25
JP5848778B2 (ja) 2016-01-27
CN103547999B (zh) 2017-05-17
EP2668574A2 (en) 2013-12-04
WO2012103146A3 (en) 2012-11-15
CN103547999A (zh) 2014-01-29
US20120192164A1 (en) 2012-07-26
EP2668574A4 (en) 2014-06-25
US9916145B2 (en) 2018-03-13
US9471290B2 (en) 2016-10-18
KR20140006911A (ko) 2014-01-16
TWI517036B (zh) 2016-01-11
KR101606622B1 (ko) 2016-03-25
US8843911B2 (en) 2014-09-23
EP2668574B1 (en) 2021-11-24
TW201237748A (en) 2012-09-16

Similar Documents

Publication Publication Date Title
JP5848778B2 (ja) Fsmを実装するための専用要素の利用
JP5763783B2 (ja) 正規表現をコンパイルするための方法および装置
JP5857072B2 (ja) オートマトンの入次数および/または出次数を制御するための量化子の展開
JP5763784B2 (ja) 要素利用のための状態のグループ化
JP2014506693A5 (ja)

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150122

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20150122

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150122

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20150206

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20150206

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20150213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150324

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150611

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20150611

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150721

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151009

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20151009

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151117

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151127

R150 Certificate of patent or registration of utility model

Ref document number: 5848778

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250