(57)【要約】データを分析するための装置、システムおよび方法が説明される。データは階層構造を使用して分析できる。１つのかかる階層構造は複数の層を含み、各層は、入力データに対する分析を実行し、その分析に基づいた出力を提供する。階層構造の下層からの出力は、上位層に対する入力として提供できる。このようにして、下層は下位レベルの分析（たとえば、基本的／根本的な分析）を実行できる。一方、上位層は、１つまたは複数の下層からの出力を使用して高レベルの分析（たとえば、より複雑な分析）を実行できる。例では、階層構造は、パターン認識を実行する。【選択図】図５
2013533542.tif 000002
【特許請求の範囲】
【請求項１】
第１の並行処理機械を使用して第１のデータを分析することと、
前記第１の並行処理機械から第２のデータを出力することであって、前記第２のデータが、前記第１のデータを分析した結果の表示を提供する、出力することと、
第２の並行処理機械を使用して前記第２のデータを分析することと、
前記第２のデータを分析した結果を、前記第２の並行処理機械から出力することと、
を含むデータを分析するための方法。
【請求項２】
第１のデータを分析することが、前記第１のデータが第１のパターンと一致するかどうかを決定することを含む、請求項１に記載の方法。
【請求項３】
前記第２のデータが、前記第１のデータが前記第１のパターンと一致するかどうかの表示を提供する、請求項２に記載の方法。
【請求項４】
前記第２のデータを分析することが、前記第２のデータが第２のパターンと一致するかどうかを決定することを含む、請求項３に記載の方法。
【請求項５】
前記第２のデータを分析する結果が、前記第２のデータが前記第２のパターンと一致したかどうかの表示を含む、請求項４に記載の方法。
【請求項６】
前記第２のデータが、前記第１のパターンとの一致を示す単一のビットを含む、請求項１に記載の方法。
【請求項７】
前記第２のデータが、複数のパターンに対する一致および非一致を示す複数のビットを備えるワードを備え、前記複数のパターンが前記第１のパターンを含む、請求項１に記載の方法。
【請求項８】
前記第２のデータが、前記第１の並行処理機械のプログラマブル要素の状態に対応する状態ベクトルを含む、請求項１に記載の方法。
【請求項９】
第１のデータを分析することが、前記第１のデータが関心のあるシーケンスを含むかどうかを決定することを含む、請求項１に記載の方法。
【請求項１０】
前記第１の並行処理機械から第２のデータを出力することが、前記第１のデータに対する、前記第１の並行処理機械のプログラマブル要素の反応に基づいて第２のデータを出力することを含む、請求項１に記載の方法。
【請求項１１】
第１のデータを分析することが、データシーケンスが、前記第１のデータ内で認識されるかどうかを決定することを含む、請求項１に記載の方法。
【請求項１２】
前記第１のデータが未処理データを備える、請求項１に記載の方法。
【請求項１３】
前記第２のデータを分析することが、前記第２の並行処理機械を使用して前記第１のデータを分析することも含む、請求項１に記載の方法。
【請求項１４】
前記第２のデータが、前記第１の並行処理機械の検出状態の表示を提供する、請求項１に記載の方法。
【請求項１５】
前記第２のデータが、前記第１の並行処理機械の検出状態の表示を提供する、請求項１に記載の方法。
【請求項１６】
前記第２の並行処理機械に、前記第２のデータを分析する前記結果をフィードバックすることをさらに含み、前記第２の並行処理機械を使用して前記第２のデータを分析することが、前記第２のデータを分析する前記結果を分析することをさらに含む、請求項１に記載の方法。
【請求項１７】
前記第２のパターンが、前記第１のデータで認識されるパターンの内のパターンを備える、請求項５に記載の方法。
【請求項１８】
前記第２のデータで認識されるパターンに基づいて、前記第１の並行処理機械を構成すること、
をさらに含む、請求項１に記載の方法。
【請求項１９】
前記第１の並行処理機械を構成することが、
前記第２のデータで認識される前記パターンを分析することと、前記第２のデータで認識される前記パターンに基づいて前記第１の並行処理機械のためのプログラムをコンパイルすることとを含む、請求項３に記載の方法。
【請求項２０】
前記プログラムが、更新されたプログラムを備える、請求項１９に記載の方法。
【請求項２１】
前記第２のデータが第２のパターンと一致するかどうかを決定することが、
前記第２のデータが、第２の複数のパターンの内の１つまたは複数に一致するかどうかを決定することを含み、結果を出力することが、
第３のデータを出力することであって、前記第３のデータが、前記第２の複数のパターンの内の１つまたは複数が前記第２のデータで認識されたかどうかの表示を提供する、出力することを含み、さらに
前記第３のデータが、第３の並行処理機械を使用して、第３の複数のパターンの１つまたは複数と一致するかどうかを決定することと、
前記第３の複数のパターンの内の１つまたは複数が、前記第３のデータで認識されたかどうかの表示を、前記第３の並行処理機械から出力することを含む、
請求項４に記載の方法。
【請求項２２】
前記第３の並行処理機械からの出力に基づいて、前記第１の並行処理機械および前記第２の並行処理機械の内の少なくとも１つを構成すること、
をさらに含む、請求項２１に記載の方法。
【請求項２３】
第１のデータ入力ポートおよび第１の出力ポートを有する第１の並行処理機械であって、
前記並行処理機械が、
前記第１のデータ入力ポートで第１のデータを受け取り、
第１のパターンが、前記第１のデータで認識されるかどうかに基づいて前記第１の出力ポートで第２のデータを出力するように構成される第１の並行処理機械と、
第２のデータ入力ポートおよび第２の出力ポートを有する第２の並行処理機械であって、前記第２のデータ入力ポートが前記第１の並行処理機械の前記第１の出力ポートに結合され、前記第２の並行処理機械が、
前記第２のデータ入力ポートで前記第２のデータを受け取り、
第２のパターンが前記第２の出力ポートにある前記第２のデータで認識されるかどうかの表示を出力するように構成される第２の並行処理機械と、
を備えるデータを処理するための装置。
【請求項２４】
第３のデータ入力ポート、および第３の出力ポートを有する第３の並行処理機械であって、前記第３の出力ポートが、前記第２の並行処理機械の前記第２のデータ入力ポートに結合される、第３の並行処理機械をさらに備える、請求項２３に記載の装置。
【請求項２５】
前記第２の並行処理機械が、さらに、
前記第２のデータ入力ポートで前記第１のデータストリームを受け取るように構成され、前記第２のデータおよび前記第１のデータの組合せで前記第２のパターンを認識するようにさらに構成される、請求項２３に記載の装置。
【請求項２６】
前記第１の並行処理機械が、前記第２のデータに基づいてプログラムを受け取るように構成されるプログラミングインタフェースを含み、前記プログラムが、前記第１の並行処理機械を再プログラムするように構成される、請求項２３に記載の装置。
【請求項２７】
前記プログラムが、更新されたプログラムを含み、前記更新されたプログラムが、前記第１の並行処理機械にすでにロードされたプログラムを更新するように構成される、請求項２６に記載の装置。
【請求項２８】
前記プログラムが、前記第１の並行処理機械のためのオリジナルプログラムを備える、請求項２６に記載の装置。
【請求項２９】
前記第２の並行処理機械の前記出力ポートに結合され、前記第２の並行処理機械の前記出力ポートを分析し、前記第２の並行処理機械からの前記第２のデータストリーム出力の関数として、前記第１の並行処理機械のための更新プログラムをコンパイルするように構成される処理装置をさらに備え、
前記第１の並行処理機械が、前記処理装置から更新されたプログラムを受け取るように構成される、
請求項２６に記載の装置。
【請求項３０】
第３のデータ入力ポートおよび第３の出力ポートを有する第３の並行処理機械であって、
前記第３の並行処理機械が、
前記第２の並行処理機械からの前記表示を受け取り、
第３のパターンが前記表示内にあるかどうかを決定し、
出力を生成するように構成される第３の並行処理機械、
を備える、請求項２９に記載の装置。
【請求項３１】
第１の並行処理機械で第１のデータを受け取ることと、
前記第１のデータの分析に基づいて、前記第１の並行処理機械から第２のデータを出力することと、
第２の並行処理機械で前記第２のデータを受け取ることと、
前記第２のデータの分析に基づいて、前記第２の並行処理機械から第３のデータを出力することと、
前記３のデータに基づいて、前記第１の並行処理機械を構成することと、
を含む、データを分析するための方法。
【請求項３２】
構成することが再プログラムすることを含む、請求項３１に記載の方法。
【請求項３３】
前記第１の並行処理機械を構成することが、
前記第３のデータに基づいて前記第１の並行処理機械のための更新されたプログラムをコンパイルすることと、
前記第１の並行処理機械に前記更新プログラムをロードすることと、
を含む、請求項３１に記載の方法。
【請求項３４】
前記第１の並行処理機械が、前記第１のデータで第１のパターンを識別するように構成され、前記第２の並行処理機械が、前記第２のデータで第２のパターンを識別するように構成される、請求項３１に記載の方法。
【請求項３５】
前記第２の並行処理機械で前記第１のデータを受け取ることをさらに含み、前記第２の並行処理機械から第３のデータを出力することが、前記第１のデータおよび前記第２のデータの分析に基づいて第３のデータを出力することを含む、
請求項３１に記載の方法。
【請求項３６】
第１の並行処理機械で第１のデータを分析することと、
前記第１のデータに関する第２のデータについての第２の並行処理機械による分析に基づき、前記第１の並行処理機械を構成することと、
を含む方法。
【請求項３７】
前記第２の並行処理機械が、前記第１のデータを分析し、前記分析に基づいて前記第２のデータを生成する、請求項３６に記載の方法。
【請求項３８】
前記第２の並行処理機械が、前記第１の並行処理機械からの出力を分析し、前記分析に基づいて前記第２のデータを生成する、請求項３６に記載の方法。
【請求項３９】
処理装置が前記第２のデータを受け取り、前記第２のデータを分析し、前記第２のデータに基づいて前記第１の並行処理機械のための更新されたプログラムをコンパイルし、前記第１の並行処理機械を構成することが、前記第１の並行処理機械の上に前記更新されたプログラムをロードすることを含む、請求項３６に記載の方法。
【請求項４０】
前記第１の並行処理機械および前記第２の並行処理機械がパターン認識を実行する、請求項３６に記載の方法。
【請求項４１】
階層構造の第１の層で、入力データに関する下位レベルの分析を実行し、前記下位レベルの分析に基づいて出力を提供することと、
階層構造の第２の層で、前記下層によって提供される前記出力に関する高レベルの分析を実行することと、
を含む方法。
【請求項４２】
前記分析が、パターン認識を備える、請求項４１に記載の方法。
【請求項４３】
前記構造の前記第１の層が、第１の並行処理機械によって実装され、前記構造の第２の層が、第２の並行処理機械によって実装される、請求項４１に記載の方法。
【請求項４４】
前記第１の並行処理機械および前記第２の並行処理機械が、カスケード式でともに結合される、請求項４３に記載の方法。
【請求項４５】
前記第１の並行処理機械および前記第２の並行処理機械が、直列で結合される、請求項４３に記載の方法。
【請求項４６】
分析の前記レベルの内の１つからの情報が、分析の前記他のレベルで実行される前記分析を修正するために使用される、請求項４１に記載の方法。
【請求項４７】
前記構造の前記第２の層から、前記構造の前記第１の層にフィードバック情報を提供することをさらに含む、請求項４１に記載の方法。
【請求項４８】
前記フィードバック情報が、前記下位レベルの分析を更新するために使用される、請求項４７に記載の方法。
【請求項４９】
前記フィードバック情報が、前記下位レベルの分析を実行するために使用されるプログラムを更新するために使用される、請求項４８に記載の方法。
【請求項５０】
前記フィードバック情報は、前記入力データに相当する情報を識別することを含む、請求項４８に記載の方法。
【請求項５１】
前記構造の前記第１の層が、並行処理機械の第１の部分によって実装され、前記構造の前記第２の層が、前記並行処理機械の第２の部分によって実装される、請求項４１に記載の方法。
【請求項５２】
前記高レベルの分析に基づいて前記下位レベルの分析を構成することをさらに含む、請求項４１に記載の方法。
【請求項５３】
前記下位レベルの分析に基づいて前記高レベルの分析を構成することをさらに含む、請求項４１に記載の方法。
【請求項５４】
前記構造の両方の層が、フォンノイマンアーキテクチャを有する機械上でソフトウェアで実装される、請求項４１に記載の方法。
【請求項５５】
前記高レベルの分析に基づいて前記下位レベルの分析を修正することをさらに含む、請求項４１に記載の方法。
【請求項５６】
前記出力が、検出状態情報を備える、請求項４１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（優先権主張）
本特許出願は、参照することによりともに本明細書に含まれる、２０１０年６月１０日に出願された「Hierarchical Pattern Recognition」と題する米国仮特許出願番号第６１／３５３，５４６号に対し、合衆国法典第３５巻、第１１９条（ｅ）の下で利益を主張する、２０１０年１１月１０日に出願された「Analyzing Data Using A Hierarchical Structure」と題する米国出願番号第１２／９４３，５５１号に基づく優先権を主張する。
【背景技術】
【０００２】
複雑なパターン認識は、従来のフォンノイマン型コンピュータで実行するには不十分である場合がある。しかし、生物学的な脳、特に人間の脳は、パターン認識の実行に長けている。現在の研究は、人間の脳が新皮質の一連の階層的に編成された神経細胞層を使用してパターン認識を実行していることを示唆している。階層の下層の神経細胞は、たとえば感覚器官からの「未処理信号」を分析する。一方、上位層の神経細胞は下位レベルの神経細胞からの信号出力を分析する。新皮質のこの階層システムが、おそらくは脳の他の領域と組み合わされて、人間が空間推論、意識的思考、および複雑な言語等の高レベルの機能を実行できるようにする複雑なパターン認識を達成している。
【図面の簡単な説明】
【０００３】
【図１】本発明の多様な実施形態に係る並行処理機械の例を示す図である。
【図２】本発明の多様な実施形態に係る有限状態機械の例を示す図である。
【図３】本発明の多様な実施形態に従って並行処理機械で実装される２レベル階層の例を示す図である。
【図４】本発明の多様な実施形態に従って並行処理機械で実装される２レベル階層の別の例を示す図である。
【図５】本発明の多様な実施形態に従って並行処理機械で実装される４レベル階層の例を示す図である。
【図６】本発明の多様な実施形態に従って並行処理機械で実装されるフィードバックを有する４レベル階層の例を示す図である。
【図７】本発明の多様な実施形態に従って並行処理機械で実装されるフィードバックを有する４レベル階層の別の例を示す図である。
【図８】本発明の多様な実施形態に従って有限状態機械エンジンとして実装される、図１の並行処理機械の例を示す図である。
【図９】本発明の多様な実施形態に係る図８の有限状態機械エンジンのブロックの例を示す図である。
【図１０】本発明の多様な実施形態に係る図９のブロックの行の例を示す図である。
【図１１】本発明の多様な実施形態に係る図１０の行の２のグループの例を示す図である。
【図１２】コンパイラが、本発明の多様な実施形態に従って図８の並行処理機械のプログラミングのための画像にソースコードを変換する方法の例を示す図である。
【図１３】本発明の多様な実施形態に係るフォンノイマンをベースにしたアーキテクチャを有するコンピュータの例を示す図である。
【発明を実施するための形態】
【０００４】
以下の説明および図面は特定の実施形態を十分に示し、当業者がそれらを実行できるようにする。他の実施形態は、構造上の変更、論理的変更、電気的変更、プロセス変更、および他の変更を組み込んでよい。いくつかの実施形態の部分および特長は、他の実施形態の部分および特長の中に含まれてよい、または他の実施形態の部分および特長に代わってよい。
【０００５】
本書は、とりわけ、階層構造を使用してデータを分析するための方法および装置を説明する。階層構造は複数の層を含むことがあり、各層は、入力データに対する分析を実行し、その分析に基づいた出力を提供する。階層構造の下層からの出力は、上位層に対する入力として提供できる。このようにして、下層は下位レベルの分析（たとえば、基本的／根本的な分析）を実行できる。一方、上位層は、１つまたは複数の下層からの出力を使用して高レベルの分析（たとえば、より複雑な分析）を実行できる。例では、階層構造は、パターン認識を実行する。例では、パターン認識は、記号のシーケンスを識別することを含む。パターンの識別のための例の記号は、音素（音声）、画像中のピクセル、ＡＳＣＩＩ文字、機械データ（たとえば０と１）に相当することがある。
【０００６】
例では、階層構造は、カスケード式でともに結合された複数の並行処理機械で実装される。たとえば、第１の並行処理機械および第２の並行処理機械は、第２の並行処理機械が、第１の並行処理機械からの出力を入力として受け取るように、直列で結合できる。任意の数の並行処理機械が、この階層構造でともに結合できる。
【０００７】
階層構造を使用してデータを分析することに加えて、本書は、階層のあるレベルで実行される分析からの情報を使用して、階層の別のレベルで実行される分析を修正するための方法および装置も説明する。高レベルの分析を実現する第２の並行処理機械は、上述された並行処理機械の例を使用して、下位レベルの分析を実現する第１の並行処理機械にフィードバック情報を提供することができる。フィードバック情報は、第１の並行処理機械によって使用され、生物学的な脳での学習に類似した方法で第１の並行処理機械によって実行される分析を更新できる。
【０００８】
図１は、データを分析するための階層構造を実装するために使用できる例の並行処理機械１００を示す。並行処理機械１００は、入力データを受け取り、その入力データに基づいた出力を提供することができる。並行処理機械１００は、入力データを受け取るためのデータ入力ポート１１０、および別の装置に出力を提供するための出力ポート１１４を含むことがある。データ入力ポート１１０は、並行処理機械１００に入力されるためのデータにインタフェースを提供する。
【０００９】
並行処理機械１００は、それぞれが１つまたは複数の入力１０４、および１つまたは複数の出力１０６を有する複数のプログラマブル要素１０２を含む。プログラマブル要素１０２は、複数の状態の内の１つにプログラムすることができる。プログラマブル要素１０２の状態は、プログラマブル要素１０２が、所与の入力（複数の場合がある）に基づいてどの出力（複数の場合がある）を提供するのかを決定する。すなわち、プログラマブル要素１０２の状態は、所与の入力に基づいて、プログラマブル要素がどのように反応するのかを決定する。データ入力ポート１１０に対するデータ入力は、複数のプログラマブル要素１０２に提供され、プログラマブル要素１０２にそれに対して処置を講じさせることができる。プログラマブル要素１０２の例は、以下に説明される状態機械要素（ＳＭＥ）、および構成可能論理ブロックを含むことがある。例では、ＳＭＥは、所与の入力がデータ入力ポート１１０で受け取られるときに、特定の出力（たとえば、高、つまり「１」信号）を提供するように所与の状態で設定できる。所与の入力以外の入力がデータ入力ポート１１０で受け取られるとき、ＳＭＥは異なる出力（たとえば、低、つまり「０」信号）を提供できる。例では、構成可能な論理ブロックは、データ入力ポート１１０で受け取られる入力に基づいてブール論理関数（たとえば、ＡＮＤ、ＯＲ、ＮＯＲ、ｅｘｔ．）を実行するように設定できる。
【００１０】
並行処理機械１００は、並行処理機械１００の上にプログラム（たとえば、画像）をロードするためのプログラミングインタフェース１１１も含むことがある。画像は、プログラマブル要素１０２の状態をプログラム（たとえば、設定）できる。つまり、画像は、所与の入力に特定のやり方で反応するようにプログラマブル要素１０２を構成できる。たとえば、プログラマブル要素１０２は、文字「ａ」がデータ入力ポート１１０で受け取られるときに高信号を出力するように設定できる。いくつかの例では、並行処理機械１００は、プログラマブル要素１０２の動作のタイミングを制御するためのクロック信号を使用できる。特定の例では、並列処理機械１００は、プログラマブル要素１０２とのインタフェースをとるため、および特殊目的の機能を実行するための特殊目的要素１１２（たとえば、ＲＡＭ、論理ゲート、カウンタ、ルックアップテーブル等）を含むことがある。いくつかの実施形態では、データ入力ポート１１０で受け取られるデータは、経時的にまたは一度に受け取られるデータの固定セット、もしくは経時的に受け取られるデータのストリームを含むことがある。データは、並行処理機械１００に結合される、データベース、センサ、ネットワーク等の任意のソースから受け取られてよい、または任意のソースによって生成されてよい。
【００１１】
並行処理機械１００は、並行処理機械１００の異なる要素（たとえば、プログラマブル要素１０２、データ入力ポート１１０、出力ポート１１４、プログラミングインタフェース１１１、および特殊目的要素１１２）をともに選択的に結合するための複数のプログラマブルスイッチ１０８も含む。したがって、並行処理機械１００は、要素の間で形成されるプログラマブルマトリックスを含む。例では、プログラマブルスイッチ１０８は、プログラマブル要素１０２、データ入力ポート１１０、プログラミングインタフェース１１１、または特殊目的要素１１２の入力１０４が、１つまたは複数のプログラマブルスイッチ１０８を通して、プログラマブル要素１０２、出力ポート１１４、プログラミングインタフェース１１１、または特殊目的要素１１２の出力１０６に結合できるように、２つ以上の要素を選択的に互いに結合できる。したがって、要素間の信号の経路選択は、プログラマブルスイッチ１０８を設定することによって制御できる。図１は、所与の要素とプログラマブルスイッチ１０８との間の特定数の導線（たとえばワイヤ）を示しているが、他の例では、異なる数の導線を使用できることが理解されるべきである。また、図１は、プログラマブルスイッチ１０８に個々に結合される各プログラマブル要素１０２を示しているが、他の例では、複数のプログラマブル要素１０２が、プログラマブルスイッチ１０８に対するグループ（たとえば、図８に示されるようなブロック８０２）として結合できる。例では、データ入力ポート１１０、データ出力ポート１１４、および／またはプログラミングインタフェース１１１は、レジスタへの書込みがそれぞれの要素へデータを提供する、またはそれぞれの要素からデータを提供するようにレジスタとして実装できる。
【００１２】
例では、単一の並行処理機械１００が、物理デバイス上に実装されているが、他の例では、２台以上の並行処理機械１００を単一の物理デバイス（たとえば、物理チップ）上に実装することができる。例では、複数の並行処理装置１００のそれぞれが、別個のデータ入力ポート１１０、別個の出力ポート１１４、別個のプログラミングインタフェース１１１、プログラマブル要素１０２の別個のセットを含むことがある。さらに、プログラマブル要素１０２の各セットは、その対応する入力データポート１１０でデータに反応する（たとえば、高信号または低信号を出力する）ことができる。たとえば、第１の並行処理機械１００に対応するプログラマブル要素１０２の第１のセットは、第１の並行処理機械１００に対応する第１のデータ入力ポート１１０でデータに反応できる。第２の並行処理機械１００に対応するプログラマブル要素１０２の第２のセットは、第２の並行処理機械１００に対応する第２のデータ入力ポート１１０に反応できる。したがって、各並行処理機械１００は、プログラマブル要素１０２のセットを含み、プログラマブル要素１０２の異なるセットが、異なる入力データに反応できる。同様に、各並行処理機械１００、およびプログラマブル要素１０２の対応する各セットは、別個の出力を提供できる。いくつかの例では、第１の並行処理機械１００からの出力ポート１１４は、第２の並行処理機械１００の入力ポート１１０に結合でき、したがって、第２の並行処理機械１００のための入力データは、第１の並行処理機械１００からの出力データを含むことができる。
【００１３】
例では、並行処理機械１００にロードするための画像は、プログラマブル要素１０２の状態を設定し、プログラマブルスイッチ１０８をプログラムし、並行処理機械１００内部で特殊目的要素１１２を構成するための複数のビットの情報を含む。例では、画像は、特定の入力に基づいて所望される出力を提供するように並行処理機械１００をプログラムするために、並行処理機械１００にロードできる。出力ポート１１４は、データ入力ポート１１０でのデータに対するプログラマブル要素１０２の反応に基づいて並行処理機械１００から出力を提供できる。出力ポート１１４からの出力は、所与のパターンの一致を示す単一ビット、複数のパターンに対する一致および不一致を示す複数ビットを含むワード、および所与の瞬間でのすべてのまたは特定のプログラマブル要素１０２の状態に対応する状態ベクトルを含むことがある。
【００１４】
並行処理機械１００の例の使用は、パターン認識（たとえば、音声認識、画像認識等）信号処理、画像処理、コンピュータビジョン、暗号法および他を含む。特定の例では、並行処理機械１００は、有限状態機械（ＦＳＭ）エンジン、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、およびその変形を含むことがある。さらに、並行処理機械１００は、コンピュータ、ページャ、セルラー電話、個人用整理手帳、携帯型オーディオプレーヤー、ネットワーク装置（たとえば、ルータ、ファイアウォール、スイッチ、または任意のその組み合わせ）、制御回路、カメラ等のより大きな装置内の構成要素であってよい。
【００１５】
図２は、並行処理機械１００によって実装できる有限状態機械（ＦＳＭ）の例のモデルを示す。並行処理機械１００は、ＦＳＭの物理的な実装として構成（たとえば、プログラム）できる。ＦＳＭは、１つまたは複数のルートノード２０２を含む、グラフ２００（たとえば、有向グラフ、無向グラフ、準グラフ）として表現できる。ルートノード２０２に加えて、ＦＳＭは、いくつかの標準ノード２０４、ならびに１つまたは複数のエッジ２０６を通してルートノード２０２および他の標準ノード２０４に接続される端末ノード２０８から構成できる。ノード２０２、２０４、２０８は、ＦＳＭ内の状態に相当する。エッジ２０６は、状態間の遷移に相当する。
【００１６】
ノード（２０２、２０４、２０８）のそれぞれは、アクティブ状態または非アクティブ状態のどちらかであることがある。非アクティブ状態にあるとき、ノード（２０２、２０４、２０８）は、入力データに反応（たとえば、応答）しない。アクティブ状態にあるとき、ノード（２０２、２０４、２０８）は、入力データに反応できる。上流ノード（２０２、２０４）は、入力データが、上流ノード（２０２、２０４）と下流ノード（２０４、２０８）との間でエッジ２０６によって指定される基準に一致するときに、そのノードから下流にあるノード（２０４、２０８）を活性化することによって入力ノードに反応できる。たとえば、文字「ｂ」を指定する第１のノード２０４は、第１のノード２０４がアクティブで、文字「ｂ」が入力データとして受け取られるときに、エッジ２０６によって第１のノード２０４に接続される第２のノード２０４を活性化する。本明細書に使用されるように、「上流」は、１つまたは複数の他のノードの上流（またはループの場合にはそれ自体の上流）にある第１のノードが、第１のノードが１つまたは複数の他のノードを活性化できる（またはループの場合にはそれ自体を活性化できる）状態を指す、１つまたは複数のノード間の関係性を指す。同様に、「下流」は、１つまたは複数の他のノードの下流（ループの場合はそれ自体の下流）にある第１のノードが、１つまたは複数の他のノードによって活性化できる（またはループの場合はそれ自体によって活性化できる）関係性を指す。したがって、用語「上流」および「下流」は、本明細書中で、１つまたは複数のノード間の関係性を指すために使用されるが、これらの用語は、ノード間のループまたは他の非線形経路の使用を排除しない。
【００１７】
グラフ２００では、ルートノード２０２は初期に活性化され、入力データが、ルートノード２０２からのエッジ２０６に一致するときに下流ノード２０４、２０８を活性化できる。グラフ２００全体でノード２０４、２０８は、入力データが受け取られると、このようにして活性化できる。端末ノード２０８は、入力データによる関心のあるシーケンスの一致に相当する。したがって、端末ノード２０８の活性化は、入力データとして関心のあるシーケンスが受け取られたことを示す。パターン認識機能を実装する並行処理機械１００との関連で、端末ノード２０８に到達することは、関心のある特定のパターンが、入力データで検出されたことを示すことができる。
【００１８】
例では、それぞれのルートノード２０２、標準ノード２０４、および端末ノード２０８は、並行処理機械１００のプログラマブル要素１０２に相当することがある。各エッジ２０６は、プログラマブル要素１０２間の接続に相当することがある。したがって、別の標準ノード２０４または端末ノード２０８に遷移する（たとえば、別の標準ノード２０４または端末ノード２０８に接続するエッジ２０６を有する）標準ノード２０４は、別のプログラマブル要素１０２に遷移する（たとえば、別のプログラマブル要素１０２に出力を提供する）プログラマブル要素１０２に相当する。いくつかの例では、ルートノード２０２は、対応するプログラム要素１０２を有していない。
【００１９】
並行処理機械１００がＦＳＭとしてプログラムされるとき、プログラマブル要素１０２のそれぞれも、アクティブ状態または非アクティブ状態のどちらかであることがある。非アクティブであるときの所与のプログラマブル要素１０２は、その対応するデータ入力ポート１１０での入力データに反応しない。アクティブプログラマブル要素１０２は、入力データおよびデータ入力ポート１１０に反応することができ、入力データがプログラマブル要素１０２の設定に一致するときに下流のプログラマブル要素１０２を活性化できる。プログラマブル要素１０２が、端末ノード２０８に相当するとき、プログラマブル要素１０２は、出力ポート１１４に結合され、外部装置に一致の表示を提供できる。
【００２０】
プログラミングインタフェース１１１を介して並行処理機械１００にロードされる画像は、所望されるＦＳＭがデータ入力ポート１１０でのデータの反応に基づいてノードの順次的な活性化によって実装されるように、プログラマブル要素１０２と他の要素１１２との間の接続だけではなく、プログラマブル要素１０２および他の要素１１２も構成できる。例では、プログラマブル要素１０２は、単一のデータサイクル（たとえば、単一文字、文字のセット、単一クロックサイクル）の間活性のままとなり、次いで上流のプログラマブル要素１０２によって再活性化されない限り、非アクティブに切り替わる。
【００２１】
端末ノード２０８は、過去のイベントの圧縮履歴を記憶するために検討できる。たとえば、端末ノード２０８に達するために必要とされる入力データの１つまたは複数のパターンは、その端末ノード２０８の活性化によって表すことができる。例では、端末ノード２０８によって提供される出力はバイナリである。すなわち、出力は、関心のあるパターンが一致しているかどうかを示す。グラフ２００中の端末ノード２０８の標準ノード２０４に対する率はきわめて小さい場合がある。言い換えると、ＦＳＭに高い複雑度がある場合があるが、ＦＳＭの出力は、比較すると小さい場合がある。
【００２２】
例では、並行処理機械１００の出力は、並行処理機械用の状態ベクトルを含むことがある。状態ベクトルは並行処理機械１００のプログラマブル要素１０２の状態（たとえば、活性化済みまたは未活性）を含む。例では、状態ベクトルは、端末ノード２０８に相当するプログラマブル要素１０２のための状態を含む。したがって、出力は、グラフ２００のすべての端末ノード２０８によって提供される表示の集合体を含むことがある。状態ベクトルはワードとして表すことができ、各端末ノード２０８によって提供されるバイナリ表示は、１ビットのワードを含む。端末ノード２０８のこの符号化は、並行処理機械１００のための検出状態（たとえば、関心のあるシーケンスが検出されたかどうか、および関心のあるどのシーケンスが検出されたのか）の効果的な表示を提供できる。別の例では、状態ベクトルは、プログラマブル要素１０２が端末ノード２０８に相当するかどうかに関係なく、プログラマブル要素１０２のすべてまたは部分集合の状態を含むことがある。
【００２３】
上述されたように、並行処理機械１００は、パターン認識機能を実装するようにプログラムできる。たとえば、並行処理機械１００によって実装されるＦＳＭは、入力データ中の１つまたは複数のデータシーケンス（たとえば、シグナチャ、パターン）を認識するように構成できる。関心のあるデータシーケンスが並行処理機械１００によって認識されるとき、その認識の表示は、出力ポート１１４で提供できる。例では、パターン認識は、たとえば、ネットワークデータ中のマルウェアまたは他の情報を識別するために記号（たとえば、ＡＳＣＩＩ文字）の文字列を認識できる。
【００２４】
図３は、階層構造３００を使用してデータを分析するように構成された第１の並行処理機械３０２および第２の並行処理機械３０４の例を示す。それぞれの並行処理機械３０２、３０４は、データ入力ポート３０２Ａ、３０４Ａ、プログラミングインタフェース３０２Ｂ、３０４Ｂ、および出力ポート３０２Ｃ、３０４Ｃを含む。
【００２５】
第１の並行処理機械３０２は、入力データ、たとえばデータ入力ポート３０２Ａでの未処理データを受け取るように構成される。第１の並行処理機械３０２は、上述されたように入力データに応答し、出力ポート３０２Ｃで出力を提供する。第１の並行処理機械３０２からの出力は、第２の並行処理機械３０４のデータ入力ポート３０４Ａに送信される。次いで、第２の並行処理機械３０４は、第１の並行処理機械３０２によって提供される出力に基づいて反応し、出力ポート３０４Ｃで対応する出力を提供できる。２つの並行処理機械３０２、３０４の直列でのこの階層上の結合は、第１の並行処理機械３０２から第２の並行処理機械３０４に圧縮ワードで過去のイベントに関する情報を転送するための手段を提供する。転送される情報は、事実上、第１の並行処理機械３０２によって記録された複雑なイベントの要約（たとえば、関心のあるシーケンス）である場合がある。
【００２６】
図３に示される並行処理機械３０２、３０４の２レベル階層３００は、２つの独立したプログラムが、同じデータストリームに基づいて動作できるようにする。２段階階層は、異なる部位としてモデル化される生物学的な脳内での視覚的な認識に類似する場合がある。このモデルの下では、部位は、事実上、異なるパターン認識エンジンであり、それぞれが類似する計算機能（パターン一致）を実行するが、他のプログラム（シグナチャ）を使用する。複数の並行処理機械３０２、３０４をともに接続することによって、データストリーム入力について高められた知識が取得され得る。
【００２７】
（第１の並行処理機械３０２によって実装される）階層の第１のレベルは、未処理データストリームに対して直接的に処理を実行する。すなわち、未処理データストリームは入力インタフェース３０２Ａで受け取られ、第１の並行処理機械３０２のプログラマブル要素が未処理データストリームに反応できる。階層の（第２の並行処理機械３０４によって実装される）第２のレベルは、第１のレベルからの出力を処理する。すなわち、第２の並行処理機械３０４は、入力インタフェース３０４Ｂで第１の並行処理機械３０２から出力を受け取り、第２の並行処理機械３０４のプログラマブル要素は第１の並行処理機械３０２の出力に反応できる。したがって、この例では、第２の並行処理機械３０４が入力として未処理データストリームを受け取るのではなく、むしろ、第１の並行処理機械３０２によって決定される未処理データストリームが一致する関心のあるパターンの表示を受け取る。第２の並行処理機械３０４は、第１の並行処理機械３０２からの出力データストリーム中のパターンを認識するＦＳＭでプログラムできる。
【００２８】
図４は、階層の１つのレベルが複数の並行処理機械で実装される２レベル階層４００の別の例を示す。ここでは、階層４００の第１のレベルは、３つの並行処理機械４０２で実装される。３つの第１のレベルの並行処理機械４０２のそれぞれからの出力が、第１のレベルの並行処理機械４０２からの出力でパターンを認識する（たとえば、識別する）単一の第２のレベルの並行処理機械４０４に提供される。他の例では、異なる数の並行処理機械が、異なるレベルで実装できる。各並行処理機械４０２、４０４は、データ入力ポート４０２Ａ、４０４、プログラミングインタフェース４０２Ｂ、４０４Ｂ、および出力ポート４０２Ｃ、４０４Ｃを含む。
【００２９】
図５は、４台の並行処理機械５０２、５０４、５０６、および５０８で実装され、各レベルによって識別されるパターンの例を示す４レベル階層５００を示す。上述されたように、各並行処理機械５０２、５０４、５０６おおび５０８は、データ入力ポート５０２Ａ、５０４Ａ、５０６Ａ、および５０８Ａ、プログラミングインタフェース５０２Ｂ、５０４Ｂ、５０６Ｂ、および５０８Ｂ、ならびに出力ポート５０２Ｃ、５０４Ｃ、５０６Ｃ、および５０８Ｃを含む。４レベル階層５００は、画像中の黒のピクセルまたは白のピクセルに基づいた作成された言語の視角的な識別に相当する。階層が高レベルに進むにつれ、入力ストリームの蓄積された知識は相応して増大する。並行処理機械５０２、５０４、５０６、５０８は、階層認識機能を達成するためにカスケードされる。階層５００のそれぞれの連続レベルは、従前のレベルの圧縮された出力に適用される新しい規則（パターンシグナチャ）を実装できる。このようにして、きわめて詳細なオブジェクトが、基本的なプリミティブな情報の初期検出に基づいて識別できる。
【００３０】
たとえば、レベル１（第１の並行処理機械５０２）に対する未処理データ入力ストリームは、視角映像のための情報（たとえば、所与のビットが黒なのか／白なのか、ＯＮか／ＯＦＦか）を含むことがある。第１の並行処理機械５０２は、ピクセル情報によって形成されるプリミティブパターンを識別するようにプログラムできる。たとえば、第１の並行処理機械５０２は、隣接するピクセルが垂直線、水平線、弧等をいつ形成するのかを識別するように構成できる。これらのパターン（たとえば、垂直線、水平線弧等）のそれぞれは、第１の並行処理機械５０２からのそれぞれの出力ビット（または信号）によって示すことができる。たとえば、第１の並行処理機械５０２が少なくとも３ビットの垂直線を識別するとき、高信号（たとえば、論理「１」）が、第２の並行処理機械５０４に対する出力ワードの第１のビットで出力できる。第１の並行処理機械５０２が少なくとも３ビットの水平線を識別するとき、高信号が、第２の並行処理機械５０４に対する初期ワードの第２のビットで出力できる。
【００３１】
第２のレベル（第２の並行処理機械５０４）は、第１の並行処理機械５０２からの出力信号のパターンを識別するようにプログラムできる。たとえば、第２の並行処理機械５０２は、第１の並行処理機械５０２によって識別されるプリミティブパターン（線、弧、他）の組合せによって形成されるパターンを識別するようにプログラムできる。第２の並行処理機械５０４は、水平線および垂直線がいつ交差し、文字「ｔ」を形成するのかを識別するようにプログラムできる。上述されたように、第２の並行処理機械５０４によって実装されるＦＳＭ内のノードは、第１の並行処理機械５０２からの出力に反応する。したがって、プリミティブパターンの組合せは、第１の並行処理機械５０２からの出力ビット中のパターンを識別することによって識別される。
【００３２】
次いで、第２の並行処理機械５０４からの出力が、第２の並行処理機械５０６によって識別される文字の組合せからワードを識別できる第３のレベル（第３の並行処理機械５０６）に入力される。第４のレベル（第４の並行処理機械５０８）は、次いで、第３の並行処理機械５０６によって識別されるワードによって形成されるフレーズを識別できる。したがって、高レベルが、下位レベルの出力のパターンを識別するようにプログラムできる。さらに、下位レベルが、高レベルで識別されるパターンを構成する構成要素を識別するようにプログラムできる。
【００３３】
ピクセル情報からの文字、ワードおよびフレーズの視覚的な識別は、例として使用される。ただし、本明細書に説明される階層方法および装置は、他のデータに、および他の用途のために適用できる。たとえば、階層分析は、音声に対応するデータで使用され、第１のレベルで音素の組合せから音節を、第２のレベルで音節の組合せからワードを識別できる。他の例では、階層分析は、それ自体を階層状に構築する機械データ（たとえば、未処理の０および１）に適用できる。
【００３４】
図５は、層間での特定の接続および個々の接続を示しているが、１つのレベルからの出力が階層の他のレベルに前方にまたは後方に送られる階層が、実装できることが理解されるべきである。たとえば、第２の並行処理機械５０４からの出力は、第４の並行処理機械５０８に送信できるだろう。一方、第４の並行処理機械５０８からの出力は、第３の並行処理機械５０６にフィードバックされる可能性がある。一般的には、階層は、並行処理機械からの検出状態情報が、他の並行処理機械の１台または複数台もしくはすべてに送られるように実装できる。
【００３５】
いくつかの例では、フィードバックは、階層構造内で使用され、１つまたは複数のレベルで使用されるプログラムを更新する。たとえば、第１のレベルからの出力は、第２のレベルに提供され、第２のレベルを再プログラムできる。これは、第１のレベルで識別される（または識別されない）パターンに基づいて第２のレベルによって適用される規則を更新するために使用できる。例では、第１のレベルは、第２のレベルよりも階層では高レベルである。たとえば、下位レベルは、高レベルによって識別されるパターンに基づいてプログラムによって最初に指定されなかった追加のパターンを探すように再プログラムできる。別の例では、下位レベルは、下位レベルによって識別される特定のパターンが、特定のパターンが他のパターンと結合し、重要なイベントを形成するという点で重要であることを通知され得る。さらに別の例では、下位レベルは、識別された特定のパターンが特定の値を有さず、したがって下位レベルがそのパターンを識別するのを停止できると通知されてよい。例では、再プログラミングは経時的に実行でき、したがって所与のレベルのプログラムは、一定期間での小さな調整によって増分的に修正される。
【００３６】
図６は、フィードバックを使用して階層の部分を再プログラムする４レベル階層６００の例を示す。４レベル階層６００は、それぞれが、データ入力ポート６０２Ａ、６０４Ａ、６０６Ａ、６０８Ａ、プログラミングインタフェース６０２Ｂ、６０４Ｂ、６０６Ｂ、６０８Ｂ、および出力ポート６０２Ｃ、６０４Ｃ、６０６Ｃ、６０８Ｃを有する４つの並行処理機械６０２、６０４、６０６、６０８で実装される。第１の並行処理機械６０２は、階層６００の第１のレベルを実装し、階層６００の第２のレベルを実装する第２の並行処理機械６０４に出力を提供する。第３の並行処理機械および第４の並行処理機械６０６、６０８は、同様に、階層６００の第３のレベルおよび第４のレベルを実装する。例では、第４の並行処理機械６０８からの出力が、第１の並行処理機械６０２によって受け取られる入力データに関する階層６００の分析に基づいた階層６００の出力として外部装置に送られる。したがって、第４の並行処理機械６０８からの出力は、階層６００のための集合的な出力に相当する。他の例では、他の並行処理機械６０８からの出力は、階層６００のための集合的な出力に相当することがある。
【００３７】
第２の、第３のおよび第４の並列処理機械６０４、６０６、６０８は、それぞれ下のレベルで平行処理機械６０２、６０４、６０６のプログラミングインタフェース６０２Ｂ、６０４Ｂ、６０６Ｂにフィードバックされる。たとえば、第４の並行処理機械６０８からの出力は、第３の並行処理機械６０６のプログラミングインタフェース６０６Ｂにフィードバックされる。したがって、第３の並行処理機械６０６は、第４の並行処理機械６０８からの出力に基づいて再プログラムできる。相応して、第３の並行処理機械６０８は、実行時間にそのプログラムを修正できる。第１の並行処理機械および第２の並行処理機械６０２、６０４は、それぞれ第２のおよび第３の並行処理機械６０４、６０６からの出力に基づいて実行時間に同様に再プログラムできる。
【００３８】
例では、並行処理機械６０４、６０６、６０８が分析され、コンパイルされて、並行処理機械６０２、６０４、６０６を再プログラムするためのプログラム（たとえば、画像）を形成する。たとえば、並行処理機械４０８からの出力は、プログラミングインタフェース６０６Ｂに送られる前に処理装置６１４によって分析され、コンパイルされる。処理装置６１４は、並行処理機械６０８からの出力に基づいて並行処理機械６０６のための更新プログラムを生成できる。処理装置６１４は、出力を分析し、第３の並行処理装置６０６のための更新されたプログラムをコンパイルできる。更新されたプログラムは、次いで、プログラミングインタフェース６０６Ｂを通して第３の並行処理機械６０６にロードされ、第３の並行処理機械６０６を再プログラムできる。例では、更新されたプログラムは、現在のプログラムからの部分的な変更だけを含んでよい。したがって、例では、更新されたプログラムは、並行処理機械６０２、６０４、６０６、６０８上で現在のプログラムの一部だけを置換できる。別の例では、更新されたプログラムは現在のプログラムのすべてまたはより大部分を置換する。同様に、処理装置６１０、６１２は、第２のおよび第３の並行処理機械６０４、６０６からの出力に基づいて、同様にフィードバックを分析し、更新されたプログラムをコンパイルできる。処理装置６１０、６１２、６１４は、１つまたは複数の追加の並行処理機械で実装できる、または異なるタイプの機械（たとえば、フォンノイマンアーキテクチャを有するコンピュータ）で実装できる。
【００３９】
いくつかの例では、処理装置６１０、６１２、６１４は、新しいプログラムをコンパイルする前に高レベルからの出力を分析する。例では、処理装置６１０、６１２、６１４は、出力を分析して、下位レベルのプログラムを更新する方法を決定して、次いで新しい（たとえば、更新された、最初の）下位レベルのプログラムを分析に基づいてコンパイルする。階層６００では、所与の並行処理機械でのフィードバックは、所与の並行処理機械のすぐ上のレベルから受け取られるが、フィードバックは、任意の並行処理機械から高レベル、下位レベル、または同レベルで別の並行処理機械になる場合がある。たとえば、フィードバックは、その同じ並行処理機械の出力から、または同じレベル、高レベル、または下位レベルでの別の並行処理機械の出力から、並行処理機械のプログラミング入力で受け取ることができる。さらに、並行処理機械は、複数の異なる並行処理機械からフィードバックを受け取ることができる。フィードバックに基づいた並行処理機械の再プログラミングは、入力データのパターンの識別から時間内に（たとえば、未処理データの処理とリアルタイムではない）切断されてよい。
【００４０】
情報を階層下方に送り返し、下位レベルの再プログラミングに影響を及ぼす目的は、下位レベルが関心のあるパターンの差異を認識することにより効率的になるためである場合がある。情報を下方に送る別の目的は、下位レベルで高レベルの鋭さを達成することである。いくつかの例では、階層の高レベルに情報を転送するには時間を要することを認識し、情報を高レベルに送るプロセスは、可能な時には回避される。いくつかの例では、高レベルは、本来、システムにとって新しいパターンの識別を解決するために使用できる。これは、生物学的な脳の新皮質で起こる、使用されているプロセスに類似することがある。例では、パターンが下位レベルで完全に解決できるのであれば、パターンは解決されるべきである。フィードバック機構は、階層の下位レベルに「学習」を転送する１つの方法である。階層を下方に情報を押し下げるこのプロセスは、新しいパターンまたは見慣れていないパターンを処理するために階層の上位レベルを保存するのに役立つ。さらに、認識プロセス全体は、階層の多様なレベルを通したデータ転送の量を削減することによって加速できる。
【００４１】
フィードバックは、階層の下位レベルを、入力時にデータストリームに対してより鋭く敏感にすることができる。この情報の「押し下げ」の結果として、決定は、階層の下位レベルで下すことができ、非常に迅速に下すことができる。したがって、例では、下位レベルの並行処理機械（たとえば、第１の並行処理機械６０２）からの出力は、第４の並行処理機械６０８からの出力とともに、階層６００から別の装置への集合的な出力に相当することがある。外部装置は、たとえば、これらの並行処理機械６０２、６０８のそれぞれからの出力を監視して、いつ階層６００によってパターンが識別されたかを決定できる。
【００４２】
例では、フィードバック情報は、分析されるデータストリームに対応する識別情報を含む場合がある。たとえば、識別情報は、データの識別特性、データのフォーマット、データのプロトコル、および／または任意の他のタイプの識別情報を含むことがある。識別情報は、たとえば、処理装置６１０による入力データのための分析方法を修正する（たとえば、適応する）ために収集され、分析され、使用されてよい。並行処理機械１００は、次いで適応された分析方法でプログラムされてよい。識別情報は、たとえば、入力データの言語を含むことがある。並行処理機械１００は、初期に、入力データの言語を決定するためにプログラムすることができ、いったん言語が入力に対応して識別されると、実行時の間に適応され（たとえば、再プログラムされ）てよい。並行処理機械１００のための適応された分析方法は、より具体的には、識別された言語に対する分析方法に相当することがある。最後に、並行処理機械１００は、適応された分析方法を使用してさらに入力データを分析してよい。フィードバックプロセスは、反復的であってよく、したがって追加の識別情報が入力データで検出され、分析方法のさらなる適応化を可能にする。
【００４３】
並行処理機械１００にロードするためのプログラム（たとえば、画像）は、図１２に関して以下に説明されるコンパイラによって生成できる。一般に、コンパイルは、計算集約的なプロセスである場合があり、初めてパターンシグナチャの大型データベースをコンパイルする際に最も明白になることがある。実行時動作では、高レベルの並行処理機械１００が、下位レベルの並行処理機械のための増分プログラム更新の形で下位レベルにフィードバックを提供できる。したがって、下位レベルの並行処理機械に対するフィードバック情報は、コンパイルするにはより計算集約的ではない元のプログラムに対するはるかに小さい、増分更新である場合がある。
【００４４】
図７は、４つの並行処理機械７０２、７０４、７０６、７０８で実装される４レベル階層７００の別の例を示す。それぞれがデータ入力ポート７０２Ａ、７０４Ａ、７０６Ａ、７０８Ａ、プログラミングインタフェース７０２Ｂ、７０４Ｂ、７０６Ｂ、７０８Ｂ、および出力ポート７０２Ｃ、７０４Ｃ、７０６Ｃ、７０８Ｃを有する４つの並行処理機械７０２、７０４、７０６、７０８。さらに、いくつかの例では、４レベル階層７００は、処理装置７１０、７１２、７１４を含み、並行処理機械７０２、７０４、および７０６のためのプログラムをコンパイルできる。４レベル階層７００では、第２レベルの、第３レベルの、および第４レベルの並行処理機械７０４、７０６、７０８が、未処理データストリームからの入力データだけではなく、下位レベルの並行処理機械７０２、７０４、７０６の出力からの入力データも受け取る。したがって、レベル２、レベル３、およびレベル４は、下位レベルからのパターンおよび未処理データの組合せからパターンを識別できる。
【００４５】
図６および図７からわかるように、並行処理機械１００は、並行処理機械１００からの出力だけではなく、階層に対する未処理データ入力も、それ自体を含む他の任意の並行処理機械１００に送ることができる場合にほぼ任意の方法でカスケードできる。さらに、所与の並行処理機械１００からの出力は、データ入力ポート１１０に対する入力データとして、および／または並行処理機械１００のためのプログラムを更新するためのフィードバックとして別の並行処理機械１００に送信できる。
【００４６】
並行処理機械１００が、入力データの１つのデータサイクル（たとえば、ビット、ワード）を処理するための時間のため、並行処理機械１００を直列でカスケードすることは、すべての並行処理機械１００を通して入力データストリームを完全に処理して、階層のための集合的な出力を生成するために要する時間を増加することがある。階層の下位レベルは、下位（最も粒状の）レベルの入力を受け取ることができるので、下位レベルは、高レベルの出力よりもよりアクティブであることが予想されるべきである。つまり、階層の中の各連続レベルは、高レベルのオブジェクトをアセンブルできる。例では、並行処理機械１００は、並行処理機械１００にどれほど早く入力データを送ることができるのかを制限する最大入力レートを有する。この入力速度は、単一のデータサイクルとして考えることができる。それぞれの連続データサイクルで、並行処理機械１００は、多くの端末ノードを活性化する可能性を有する。これによって、（特に階層の下位レベルにある）並行処理機械１００は、かなりの量の出力データを生成するだろう。たとえば、入力が最下位レベルの並行処理機械１００にバイトのストリームとして提供される場合、並行処理機械１００が、任意の所与のデータサイクルで、結果情報の複数のバイトを生成することが可能である場合がある。１バイトの情報が複数のバイトの情報を生成できる場合、次いで並行処理機械１００の階層全体は、上方が階層の上方に渡されるように同期される必要がある。いくつかの例では、フィードバックは同期される必要がない。ただし、フィードバックが下位レベルで受け取られるのが早いほど、下位レベルが適応するのが早くなり、分析はより効果的になる。
【００４７】
例として、（単一の並行処理機械１００で実装される）階層のレベルごとの最大サイズ出力は、１０２４バイトに等しくなることがあり、階層の深さは４レベルに等しくなることがある。並行処理機械１００の入力データストリームのデータ転送速度は、１２８ＭＢ／秒に等しくなることがある。以上の条件の場合、階層の各レベルは、７．６３マイクロ秒で横断できるだろう。４レベル階層を用いる場合、並行処理機械１００のスタック全体の総整定時間は、７．６３マイクロ秒の４倍、つまり３０．５マイクロ秒となるだろう。３０．５マイクロ秒の整定時間では、入力データ周波数が３２ＫＢ／秒に制限される必要があるようである。
【００４８】
とりわけ、これは、並行処理機械１００の構成にきわめて左右される。並行処理機械１００は、入力データ転送速度対状態機械のサイズをトレードオフするように構成可能である。さらに、並行処理機械に対する入力ワードサイズは、並行処理機械１００上にロードされる個々の画像を生成したコンパイラに対して対応する修正が行われる場合、調整できる。
【００４９】
例では、上述された階層構造は、フォンノイマンアーキテクチャを有する機械でソフトウェアにより実装できるだろう。したがって、ソフトウェア命令が、プロセッサに、未処理データに対する第１のレベルの分析ＦＳＭを実装させるだろう。第１のレベルのＦＳＭからの出力は、次いで、第２のレベルの分析等々を使用してプロセッサによって処理できるだろう。さらに、上述されたフィードバックループは、第１のレベルの分析が、たとえば第２のレベルの分析の出力に基づいて修正されるように実装できるだろう。
【００５０】
図８から図１１は、本明細書で「ＦＳＭエンジン８００」と呼ばれている並行処理機械の例を示す。例では、ＦＳＭエンジン８００は、有限状態機械のハードウェア実装を含む。したがって、ＦＳＭエンジン８００は、ＦＳＭ内の複数の状態に相当する、複数の選択的に結合可能なハードウェア要素（たとえば、プログラマブル要素）を実装する。ＦＳＭ内の状態と同様に、ハードウェア要素は、入力ストリームを分析し、その入力ストリームに基づいて下流のハードウェア要素を活性化できる。
【００５１】
ＦＳＭエンジン８００は、汎用要素および特殊目的要素を含む複数のプログラマブル要素を含む。汎用要素は、多くの異なる機能を実装するようにプログラムできる。これらの汎用要素は、行８０６（図９および図１０に示される）に階層状に編成されるＳＭＥ８０４、８０５（図１１に図示）、およびブロック８０２（図８および図９に図示）を含む。階層状に編成されたＳＭＥ８０４、８０５の間で信号の経路を定めるために、ブロック間スイッチ８０３（図８および図９に図示）、ブロック内スイッチ８０８（図９および図１０に図示）、ならびに行内スイッチ８１２（図１０に図示）を含む、プログラマブルスイッチの階層が使用される。ＳＭＥ８０４、８０５は、ＦＳＭエンジン８００によって実装されるＦＳＭの状態に相当することがある。ＳＭＥ８０４、８０５は、以下に説明されるプログラマブルスイッチを使用することによって結合できる。したがって、ＦＳＭは、ＳＭＥ８０４、８０５を、状態の機能に対応するようにプログラムすることによって、およびＦＳＭ内の状態間の遷移に相当するようにＳＭＥ８０４、８０５をともに選択的に結合することによってＦＳＭエンジン８００上で実装できる。
【００５２】
図８は、例のＦＳＭエンジン８００の全体図を示す。ＦＳＭエンジン８００は、プログラマブルブロック間スイッチ８０３とともに選択的に結合できる複数のブロック８０２を含む。さらに、ブロック８０２は、信号（たとえば、データ）を受信し、そのデータをブロック８０２に提供するための入力ブロック８０９（たとえば、データ入力ポート）に選択的に結合できる。また、ブロック８０２は、ブロック８０２からの信号を外部装置（たとえば、別のＦＳＭエンジン８００）に提供するための出力ブロック８１３（たとえば、出力ポート）に選択的に結合できる。ＦＳＭエンジン８００は、ＦＳＭエンジン８００の上にプログラム（たとえば、画像）をロードするためのプログラミングインタフェース８１１も含むことがある。画像は、ＳＭＥ８０４、８０５の状態をプログラム（たとえば、設定）できる。つまり、画像は、入力ブロック８０９で所与の入力に特定のやり方で反応するようにＳＭＥ８０４、８０５を構成できる。たとえば、ＳＭＥ８０４は、文字「ａ」が入力ブロック８０９で受け取られるときに高信号を出力するように設定できる。
【００５３】
例では、入力ブロック８０９、出力ブロック８１３、および／またはプログラミングインタフェース８１１は、レジスタへの書込みがそれぞれの要素へデータを提供する、またはそれぞれの要素からデータを提供するようにレジスタとして実装できる。したがって、プログラミングインタフェース８１１に相当するレジスタに記憶される画像からのビットは、ＳＭＥ８０４、８０５にロードできる。図８は、ブロック８０２と、入力ブロック８０９と、出力ブロック８１３と、ブロック間スイッチ８０３との間の特定数の導線（たとえば、ワイヤ、トレース）を示しているが、他の例では、より少ない導線またはより多い導線を使用できることが理解されるべきである。
【００５４】
図９は、ブロック８０２の例を示す。ブロック８０２は、プログラマブルブロック内スイッチ８０８と選択的に結合できる複数の行８０６を含むことがある。さらに、行８０６は、ブロック間スイッチ８０３により、別のブロック８０２内の別の行８０６に選択的に結合できる。例では、バッファ８０１が、ブロック間スイッチ８０３への／ブロック間スイッチ８０３からの信号のタイミングを制御するために含まれる。本明細書で行８０６は、２のグループ（ＧＯＴ）８１０と呼ばれる要素の組に編成される複数のＳＭＥ８０４、８０５を含む。例では、ブロック８０２は、十六（１６）の行８０６を含む。
【００５５】
図１０は、行８０６の例を示す。ＧＯＴ８１０は、プログラマブル行内スイッチ８１２によって他のＧＯＴ８１０、および行８０６内の任意の他の要素８２４に選択的に結合できる。ＧＯＴ８１０は、ブロック内スイッチ８０８で他の行８０６内の他のＧＯＴ８１０に、またはブロック間スイッチ８０３で他のブロック８０２内の他のＧＯＴ８１０に結合することもできる。例では、ＧＯＴ８１０は、第１の入力および第２の入力８１４および８１６、ならびに出力８１８を有する。第１の入力８１４は、ＧＯＴ８１０の第１のＳＭＥ８０４に結合され、第２の入力８１４は、ＧＴＯ８１０の第２のＳＭＥ８０４に結合される。
【００５６】
例では、行８０６は、第１のおよび第２の複数の行相互接続導線８２０、８２２を含む。例では、ＧＯＴ８１０の入力８１４、８１６は、１本または複数の行相互接続導線８２０、８２２に結合することができ、出力８１８は、１つの行相互接続導線８２０、８２２に結合できる。例では、第１の複数の行相互接続導線８２０は、行８０６内の各ＧＯＴ８１０の各ＳＭＥ８０４に結合できる。第２の複数の行相互接続導線８２２は、行８０６内の各ＧＯＴ８１０の１つのＳＭＥ８０４に結合できるが、ＧＯＴ８１０の他のＳＭＥ８０４には結合できない。例では、第２の複数の行相互接続導線８２２の第１の半分が、行８０６内部のＳＭＥ８０４の第１の半分（各ＧＯＴ８１０から１つのＳＭＥ８０４）に結合でき、第２の複数の行相互接続導線８２２の第２の半分は行８０６内のＳＭＥ８０４の第２の半分（各ＧＯＴ８１０からの他のＳＭＥ８０４）に結合できる。第２の複数の行相互接続導線８２２とＳＭＥ８０４、８０５との間の限られた接続性が、本明細書では「パリティ」と呼ばれている。例では、行８０６は、カウンタ、プログラマブルブール論理要素、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルプロセッサ（たとえば、マイクロプロセッサ）、および他の要素等の特殊目的要素８２４を含むこともある。
【００５７】
例では、特殊目的要素８２４は、カウンタ（本明細書では、カウンタ８２４とも呼ばれている）を含む。例では、カウンタ８２４は、１２ビットプログラマブルダウンカウンタを含む。１２ビットプログラマブルカウンタ８２４は、計数入力、リセット入力、およびゼロカウント出力を有する。計数入力は、アサート時、カウンタ８２４の値を１、減分する。リセット入力は、アサート時、カウンタ８２４に、関連するレジスタからの初期値をロードさせる。１２ビットカウンタ８２４の場合、最高１２ビットの数が初期値としてロードできる。カウンタ８２４の値がゼロ（０）に減分されるとき、ゼロカウント出力がアサートされる。カウンタ８２４は、少なくとも２つのモード、パルスおよび保持を有する。カウンタ８２４がパルスモードに設定されるとき、ゼロカウント出力は、カウンタ８２４がゼロに減分するときのクロックサイクル中にアサートされ、次のクロックサイクルでは、ゼロカウント出力はもはやアサートされない。カウンタ８２４が保持モードに設定されるとき、ゼロカウント出力は、カウンタ８２４がゼロに減分するときのクロックサイクル中にアサートされ、カウンタ８２４が、アサートされているリセット入力によってリセットされるまでアサートされた状態のままとなる。例では、特殊目的要素８２４はブール論理を含む。いくつかの例では、このブール論理は、ＦＳＭエンジン８００の端末状態ＳＭＥから情報を抽出するために使用できる。抽出された情報は、他のＦＳＭエンジン８００に状態情報を転送するため、および／またはＦＳＭエンジン８００を再プログラムするために使用されるプログラミング情報を転送するため、または別のＦＳＭエンジン８００を再プログラムするために使用できる。
【００５８】
図１１は、ＧＯＴ８１０の例を示す。ＧＯＴ８１０は、入力８１４、８１６を有し、ＯＲゲート８３０および３対１マルチプレクサ８４２に結合されるそれらの出力８２６、８２８を有する、第１のＳＭＥ８０４および第２のＳＭＥ８０５を含む。３対１マルチプレクサ８４２は、ＧＯＴ８１０の出力８１８を、第１のＳＭＥ８０４、第２のＳＭＥ８０５、またはＯＲゲート８３０に結合するように設定できる。ＯＲゲート８３０を使用して、両方の出力８２６、８２８を結合し、ＧＯＴ８１０の共通の出力８１８を形成できる。例では、第１のＳＭＥおよび第２のＳＭＥ８０４、８０５は、上述されたパリティを示し、第１のＳＭＥ８０４の入力８１４は、行相互接続導線８２２のいくつかに結合することができ、第２のＳＭＥ８０５の入力８１６は、他の行相互接続導線８２２に結合できる。例では、ＧＯＴ８１０内の２つのＳＭＥ８０４、８０５は、スイッチ８４０のどちらかまたは両方を設定することによってそれら自体にカスケードおよびまたはループバックすることができる。ＳＭＥ８０４、８０５は、ＳＭＥ８０４、８０５の出力８２６、８２８を、他のＳＭＥ８０４、８０５の入力８１４、８１６に結合することによってカスケードできる。ＳＭＥ８０４、８０５は、出力８２６、８２８をそれら自体の入力８１４、８１６に結合することによってそれら自体にループバックできる。したがって、第１のＳＭＥ８０４の出力８２６は、第１のＳＭＥ８０４の入力８１４および第２のＳＭＥ８０５の入力８１６のどれにも結合できないか、そのうちの１つに結合できるか、または両方に結合できる。
【００５９】
例では、状態機械要素８０４、８０５は、検出ライン８３４に並列で結合される、多くの場合、動的ランダムアクセスメモリ（ＤＲＡＭ）で使用されるセル等の複数のメモリセル８３２を含む。１つのかかるメモリセル８３２は、高値または低値（たとえば、１または０）のどちらかに対応する状態等のデータ状態に設定できるメモリセルを含む。メモリセル８３２の出力は、検出ライン８３４に結合され、メモリセル８３２に対する入力は、データストリームライン８３６でのデータに基づいて信号を受信する。例では、データストリームライン８３６での入力は、メモリセル８３２の内の１つを選択するために復号される。選択されたメモリセル８３２は、その記憶されたデータ状態を検出ライン８３４に対する出力として提供する。たとえば、データ入力ポート８０９で受信されたデータは、デコーダ（不図示）に提供することができ、デコーダはデータストリームライン８３６の内の１つを選択できる。例では、デコーダはＡＳＣＩＩ文字を、２５６ビットの内の１に変換できる。
【００６０】
したがって、メモリセル８３２は、メモリセル８３２が高値に設定され、データストリームライン８３６上のデータがメモリセル８３２に相当するときに、検出ライン８３４に高信号を出力する。データストリームライン８３６上のデータがメモリセル８３２に相当し、メモリセル８３２が低値に設定されると、メモリセル８３２は、検出ライン８３４に低信号を出力する。検出ライン８３４上でのメモリセル８３２からの出力は、検出回路８３８によって感知される。例では、入力ライン８１４、８１６上の信号は、それぞれの検出回路８３８をアクティブ状態または非アクティブ状態のどちらかに設定する。非アクティブ状態に設定されると、検出回路８３８はそれぞれの検出ライン８３４上の信号に関わりなく、それぞれの出力８２６、８２８上で低信号を出力する。アクティブ状態に設定されると、検出回路８３８は、それぞれのＳＭＥ８０４、８０５のメモリセル８３４の内の１つから高信号が検出されるときに、それぞれの出力ライン８２６、８２８上で高信号を出力する。アクティブ状態にあるとき、検出回路８３８は、それぞれのＳＭＥ８０４、８０５のメモリセル８３４の内のすべてからの信号が低であるときに、それぞれの出力ライン８２６、８２８上で低信号を出力する。
【００６１】
例では、ＳＭＥ８０４、８０５は、２５６個のメモリセル８３２を含み、各メモリセル８３２は異なるデータストリームライン８３６に結合される。したがって、ＳＭＥ８０４、８０５は、データストリームライン８３６の内の選択された１つまたは複数がその上に高信号を有するときに高信号を出力するようにプログラムできる。たとえば、ＳＭＥ８０４は、第１のメモリセル８３２（たとえば、ビット０）を高に設定させ、他のすべてのメモリセル８３２（たとえば、ビット１から２５５）を低に設定させることができる。それぞれの検出回路８３８がアクティブ状態にあるときに、ＳＭＥ８０４は、ビット０に対応するデータストリームライン８３６がその上に高信号を有すると出力８２６に対する高信号を出力する。他の例では、ＳＭＥ８０４は、複数のデータストリームライン８３６の内の１つが、適切なメモリセル８３２を高値に設定することによってその上に高信号を有するときに高信号を出力するように設定できる。
【００６２】
例では、メモリセル８３２は、関連するレジスタからビットを読み取ることによって高値または低値に設定できる。したがって、ＳＭＥ８０４は、コンパイラによって作成された画像をレジスタの中に記憶し、関連するメモリセル８３２の中にレジスタ内のビットをロードすることによってプログラムできる。例では、コンパイラによって作成される画像は、高ビットおよび低ビット（たとえば、１および０）のバイナリ画像を含む。画像は、ＳＭＥ８０４、８０５をカスケードすることによってＦＳＭとして動作するようにＦＳＭエンジン８００をプログラムできる。たとえば、第１のＳＭＥ８０４は、検出回路８３８をアクティブ状態に設定することによってアクティブ状態に設定できる。第１のＳＭＥ８０４は、ビット０に対応するデータストリームライン８３６がその上に高信号を有するときに高信号を出力するように設定できる。第２のＳＭＥ８０５は、当初、非アクティブ状態に設定できるが、アクティブ時、ビット１に対応するデータストリームライン８３６がその上に高信号を有すると高信号を出力するように設定できる。第１のＳＭＥ８０４および第２のＳＭＥ８０５は、第２のＳＭＥ８０５の入力８１６に結合するように、第１のＳＭＥ８０４の出力８２６を設定することによってカスケードできる。したがって、高信号がビット０に対応するデータストリームライン８３６で検知されるとき、第１のＳＭＥ８０４は出力８２６で高信号を出力し、第２のＳＭＥ８０５の検出回路８３８をアクティブ状態に設定する。高信号がビット１に対応するデータストリームライン８３６で検知されるとき、第２のＳＭＥ８０５は別のＳＭＥ８０５を活性化するために出力８２８で、またはＦＳＭエンジン８００からの出力のために高信号を出力する。
【００６３】
図１０は、コンパイラが、ソースコードを、並行処理機械をプログラムするように構成された画像に変換するための方法１０００の例を示す。方法１０００は、構文木にソースコードをパースすること（ブロック１００２）と、構文木をオートマトンに変換すること（ブロック１００４）と、オートマトンを最適化すること（ブロック１００６）と、オートマトンをネットリストに変換すること（ブロック１００８）と、ハードウェア上にネットリストを格納すること（ブロック１０１０）と、ネットリストの経路を定めること（ブロック１０１２）と、結果として生じる画像を公開すること（ブロック１０１４）とを含む。
【００６４】
例では、コンパイラは、ソフトウェア開発者が、ＦＳＭエンジン８００上でＦＳＭを実装するために画像を作成できるようにするアプリケーションプログラミングインタフェース（ＡＰＩ）を含む。コンパイラは、ソースコードの正規表現の入力セットを、ＦＳＭエンジン８００をプログラムするように構成される画像に変換する方法を提供する。コンパイラは、フォンノイマンアーキテクチャを有するコンピュータ用の命令によって実装できる。これらの命令は、コンピュータ上のプロセッサにコンパイラの機能を実行させることができる。たとえば、命令は、プロセッサによって実行されるときに、プロセッサがアクセス可能であるソースコードに対して、ブロック１００２、１００４、１００６、１００８、１０１０、１０１２、および１０１４で説明されるアクションをプロセッサに実行させることができる。フォンノイマンアーキテクチャを有する例のコンピュータは、図１３に示され、後述される。
【００６５】
例では、ソースコードは、記号のグループ内で記号のパターンを識別するためのサーチ文字列を記述する。サーチ文字列を説明するために、ソースコードは、複数の正規表現（ｒｅｇｅｘ）を含むことがある。ｒｅｇｅｘは、記号検索パターンを記述するための文字列である場合がある。ｒｅｇｅｘは、プログラミング言語、テキストエディタ、ネットワークセキュリティ、および他等の多様なコンピュータの領域で幅広く使用されている。例では、コンパイラによってサポートされている正規表現は、非構造化データの検索のための検索基準を含む。非構造化データは、自由形式を有し、データ内のワードに何のインデクシングも適用されないデータを含むことがある。ワードは、データの内部にバイト、プリンタブルおよび非プリンタブルの任意の組合せを含むことがある。例では、コンパイラは、Ｐｅｒｌ（Ｐｅｒｌ互換性正規表現（ＰＣＲＥ））言語、ＰＨＰ言語、Ｊａｖａ（登録商標）言語、および．ＮＥＴ言語を含むｒｅｇｅｘを実装するための複数の異なるソースコード言語をサポートできる。
【００６６】
ブロック１００２で、コンパイラはソースコードを分析し、相対的に接続された演算子の配列を形成することができ、異なるタイプの演算子は、ソースコードによって実装される異なる関数（たとえば、ソースコード内でｒｅｇｅｘによって実装される異なる関数）に相当する。ソースコードを分析すると、ソースコードの一般的表現を生じさせることがある。例では、一般的表現は、構文木として知られているツリーグラフの形でソースコード内のｒｅｇｅｘの符号化された表現を含む。本明細書に説明されている例は、他の例では構文木（「抽象構文木」としても知られている）としての配置を指すが、具象構文木または他の配置も使用できる。
【００６７】
上述されたように、コンパイラはソースコードの複数の言語をサポートできるので、分析は、言語に関わりなく、たとえば構文木等の非言語特性表現にソースコードを変換する。したがって、コンパイラによる追加の処理（ブロック１００４、ブロック１００６、ブロック１００８、ブロック１０１０）は、ソースコードの言語に関わりなく、共通の入力構造から作業できる。
【００６８】
上記に留意されたように、構文木は、相対的に接続されている複数の演算子を含む。構文木は、複数の異なるタイプの演算子を含むことがある。つまり、異なる演算子は、ソースコード内のｒｅｇｅｘによって実装される異なる関数に相当することがある。
【００６９】
ブロック１００４で、構文木はオートマトンに変換される。オートマトンは、ＦＳＭのソフトウェアモデルを含み、相応して決定論的または非決定論的と分類できる。決定論的オートマトンは、所与のときに実行の単一の経路を有する。一方、非決定論的オートマトンは、実行の複数の並行経路を有する。オートマトンは、複数の状態を含む。構文木をオートマトンに変換するために、演算子および構文木内の演算子間の関係性が、状態間の遷移を含む状態に変換される。例では、オートマトンは、ＦＳＭエンジン８００のハードウェアに部分的に基づいて変換できる。
【００７０】
例では、オートマトンの入力記号は、アルファベット、数字０から９、および他のプリンタブル文字を含む。例では、入力記号は、０から２５５を含めたバイト値によって表される。例では、オートマトンは、グラフのノードが状態のセットに対応する有向グラフとして表すことができる。例では、入力記号α上の状態ｐから状態ｑへの遷移、つまりδ(ｐ， α)は、ノードｐからノードｑへの有向接続によって示される。例では、オートマトンの逆転は、なんらかの記号α上の各遷移ｐ→ｑが、同じ記号上で逆転されるｑ→ｐである新規オートマトンを生じさせる。逆転では、開始状態は最終状態になり、最終状態が開始状態になる。例では、オートマトンによって受け入れられる（たとえば、一致される）言語は、オートマトンに順次に入力されるときに最終状態に到達するすべての考えられる文字列のセットである。オートマトンによって受け入れられる言語の各文字列は、開始状態から１つまたは複数の最終状態への経路をたどる。
【００７１】
ブロック１００６で、オートマトンが構築されたのち、オートマトンは、とりわけその複雑度およびサイズを削減するために最適化される。オートマトンは、冗長な状態を組み合わせることによって最適化できる。
【００７２】
ブロック１００８で、最適化されたオートマトンが、ネットリストに変換される。オートマトンをネットリストに変換すると、オートマトンの各状態はＦＳＭエンジン８００上のハードウェア要素（たとえば、ＳＭＥ８０４、８０５、他の要素８２４）にマッピングされ、ハードウェア要素間の接続が決定される。
【００７３】
ブロック１０１０で、ネットリストは、ネットリストの各ノードに対応するターゲット装置（たとえば、ＳＭＥ８０４、８０５、特殊目的要素８２４）の特定のハードウェア要素を選択するために格納される。例では、格納すると、ＦＳＭエンジン８００のための一般的な入力および出力の制約に基づいて、それぞれの特定のハードウェア要素が選択される。
【００７４】
ブロック１０１２で、格納されたネットリストは、選択されたハードウェア要素をともに結合して、ネットリストによって記述される接続を達成するために、プログラマブルスイッチ（たとえば、ブロック間スイッチ８０３、ブロック内スイッチ８０８、および行内スイッチ８１２）のための設定値を決定するために経路が選択される。例では、プログラマブルスイッチのための設定が、選択されたハードウェア要素、およびプログラマブルスイッチのための設定値を接続するために使用されるＰＳＭエンジン８００の特定の導線を決定することによって決定される。経路選択は、ブロック１０１０での格納、ハードウェア要素間の接続のより多くの制限を考慮に入れることがある。したがって、経路選択は、ＦＳＭエンジン８００に対する導線の実際の制限を考えると、適切な接続を行うために大局的な格納で決定されるハードウェア要素のいくつかの場所を調整してよい。
【００７５】
いったんネットリストが格納され、経路選択されると、格納され、経路選択されたネットリストは、ＦＳＭエンジン８００のプログラミングのための複数のビットに変換できる。この複数のビットは、本明細書で画像と呼ばれている。
【００７６】
ブロック１０１４で、画像はコンパイラによって公表される。画像は、特定のハードウェア要素および／またはＦＳＭエンジン８００のプログラマブルスイッチをプログラムするための複数のビットを含む。画像が複数のビット（たとえば、０および１）を含む実施形態では、画像はバイナリ画像と呼ぶことができる。ビットは、ＦＳＭエンジン８００にロードされ、プログラムされたＦＳＭエンジン８００が、ソースコードによって記述される機能性を有するＦＳＭを実装するように、ＳＭＥ８０４、８０５、特殊目的要素８２４、およびプログラマブルスイッチの状態をプログラムできる。格納（ブロック１０１０）および経路選択（１０１２）は、ＦＳＭエンジン８００内での特定の場所にある特定のハードウェア要素を、オートマトンの特定の状態にマッピングできる。したがって、画像内のビットは、特定のハードウェア要素および／またはプログラマブルスイッチをプログラムし、記述される関数（複数の場合がある）を実装できる。例では、画像は、コンピュータ可読媒体に機械コードを保存することによって公表できる。別の例では、画像は、画像を表示装置上で表示することによって公表できる。さらに別の例では、画像は、ＦＳＭエンジン８００上に画像をロードするためのプログラミング装置等の別の装置に画像を送ることによって公表できる。さらに別の例では、画像は、並行処理機械（たとえば、ＦＳＭエンジン８００）上に画像をロードすることによって公表できる。
【００７７】
例では、画像は、画像からのビット値をＳＭＥ８０４、８０５および他のハードウェア要素８２４に直接的にロードする、もしくは１つまたは複数のレジスタの中に画像をロードし、次いでＳＭＥ８０４、８０５および他のハードウェア要素８２４にレジスタからのビット値を書き込むかのどちらかによってＦＳＭエンジン８００上にロードできる。例では、プログラマブルスイッチ（たとえば、ブロック間スイッチ８０３、ブロック内スイッチ８０８、および行内スイッチ８１２）の状態。例では、ＦＳＭエンジン８００のハードウェア要素（たとえば、ＳＭＥ８０４、８０５、他の要素８２４、プログラマブルスイッチ８０３、８０８、８１２）は、プログラミング装置および／またはコンピュータが、１つまたは複数のメモリアドレスに画像を書き込むことによってＦＳＭエンジン８００上に画像をロードできるように、メモリマッピングされる。
【００７８】
本明細書に説明される方法の例は、少なくとも部分的に機械でまたはコンピュータで実装できる。いくつかの例は、上記の例に説明される方法を実行するように電子機器を構成するために動作可能な命令で符号化されたコンピュータ可読媒体または機械可読媒体を含むことがある。かかる方法の実装は、マイクロコード、アセンブリ言語コード、高水準言語コード等のコードを含むことがある。かかるコードは、多様な方法を実行するためのコンピュータ可読命令を含むことがある。コードは、コンピュータプログラム製品の部分を形成してよい。さらに、コードは、実行中、または他のときに１つまたは複数の揮発性の、または不揮発性のコンピュータ可読媒体で有形で記憶されてよい。これらのコンピュータ可読媒体は、ハードディスク、リムーバブル磁気ディスク、リムーバブル光ディスク（たとえば、コンパクトディスクおよびデジタルビデオディスク）、磁気カセット、メモリカードまたはメモリスティック、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）等を含んでよいが、これらに限定されない。
【００７９】
図１３は、一般に、フォンノイマンアーキテクチャを有するコンピュータ１５００の例を示す。本開示の内容を読み、理解すると、当業者は、ソフトウェアプログラムがどのようにしてコンピュータベースのシステムでコンピュータ可読媒体から起動され、ソフトウェアプログラムに定められる関数機能を実行するのかを理解するだろう。当業者は、本明細書に開示される方法を実装し、実行するように設計される１つまたは複数のソフトウェアプログラムを作成するために利用できる多様なプログラミング言語もさらに理解するだろう。プログラムは、Ｊａｖａ（登録商標）言語、Ｃ＋＋言語、もしくは１つまたは複数の言語等のオブジェクト指向言語を使用するオブジェクト指向フォーマットで構造化できる。代わりに、プログラムは、アセンブリ、Ｃ等の手続き言語を使用して手続き指向フォーマットで構造化できる。ソフトウェア構成要素は、リモートプロシージャコールまたは他を含む、アプリケーションプログラムインタフェース、またはプロセス間通信技法等の、当業者にとって周知の多くの機構の内のどれかを使用して通信できる。多様な実施形態の教示は、任意の特定のプログラミング言語または環境に制限されていない。
【００８０】
したがって、他の実施形態は実現できる。たとえば、コンピュータ、メモリシステム、磁気ディスクまたは光ディスク、なんらかの他の記憶装置、もしくは任意のタイプの電子機器またはシステム等の製造品は、１台または複数のプロセッサ１５０２によって実行されるときに上記方法に関して説明されるアクションのいずれかを実行することになる、その上に命令１５２４（たとえば、コンピュータプログラム命令）が記憶されるメモリ（たとえば、電気的な導体、光学的な導体、または電磁的な導体を含む任意のメモリだけではなく、リムーバブル記憶媒体等の）等のコンピュータ可読媒体１５２２に結合される１台または複数のプロセッサ１５０２を含むことがある。
【００８１】
コンピュータ１５００は、多くの構成要素に直接的に結合されるプロセッサ１５０２を有する、および／またはバス１５０８を使用するコンピュータシステムの形をとることができる。かかる構成要素は、メインメモリ１５０４、スタティックメモリまたは不揮発性メモリ１５０６、およびマスストレージ１５１６を含むことがある。プロセッサ１５０２に結合される他の構成要素は、ビデオディスプレイ等の出力装置１５１０、キーボード等の入力装置１５１２、およびマウス等のカーソル制御装置１５１４を含むことがある。プロセッサ１５０２および他の構成部品をネットワーク１５２６に結合するためのネットワークインタフェース装置１５２０は、バス１５０８に結合することもできる。命令１５２４は、多くの周知の転送プロトコル（たとえば、ＨＴＴＰ）の内の任意の１つを活用するネットワークインタフェース装置１５２０を介して、ネットワーク１５２６上でさらに送信または受信できる。バス１５０８に結合されるこれらの要素のいずれかは、実現される特定の実施形態に応じて、存在しない、単独で存在する、または複数の数で存在することがある。
【００８２】
例では、プロセッサ１５０２、メモリ１５０４、１５０６、または記憶装置１５１６の内の１つまたは複数が、実行時にコンピュータ１５００に本明細書に説明される方法の内の任意の１つまたは複数を実行させることができる命令１５２４を含むことがある。代替実施形態では、コンピュータ１５００は、スタンドアロン装置として動作する、または他の装置に接続する（たとえば、ネットワーク化する）ことができる。ネットワーク化された環境では、コンピュータ１５００は、サーバ−クライアントネットワーク環境でのサーバ装置またはクライアント装置の資格で、もしくはピアツーピア（または分散型）ネットワーク環境でピアデバイスとして動作できる。コンピュータ１５００は、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、セットトップボックス（ＳＴＢ）、パーソナルデジタルアシスタント（ＰＤＡ）、セルラー電話、ウェブ機器、ネットワークルータ、ネットワークスイッチまたはネットワークブリッジ、もしくはその装置によって講じられるアクションを指定する命令のセット（順次またはそれ以外）を実行できる任意の装置を含むことがある。さらに、単一のコンピュータ１５００だけが示されているが、用語「コンピュータ」は、本明細書に説明される方法論の任意の１つまたは複数を実行するために命令のセット（または複数のセット）を個別にまたは共同で実行する装置の任意の集合体を含むとも解釈されるものとする。
【００８３】
コンピュータ１５００は、１つまたは複数の通信プロトコル（たとえば、ユニバーサルシリアルバス（ＵＳＢ）、ＩＥＥＥ１３９４等）を使用して周辺装置と通信するための出力コントローラ１５２８を含むこともある。出力コントローラ１５２８は、たとえば、コンピュータ１５００に通信で結合されるプログラミング装置１５３０に画像を提供できる。プログラミング装置１５３０は、並行処理機械（たとえば、並行処理機械１００、ＦＳＭエンジン８００）をプログラムするように構成できる。他の例では、プログラミング装置１５３０は、コンピュータ１５００と統合され、バス１５０８に結合できるか、ネットワークインタフェース装置１５２０または別の装置を介してコンピュータ１５００と通信することができる。
【００８４】
コンピュータ可読媒体１５２４は、単一の媒体として示されているが、「コンピュータ可読媒体」は、命令１５２４の１つまたは複数のセットを記憶する、単一の媒体または複数の媒体（たとえば、集中データベースまたは分散型データベース、もしくは関連付けられたキャッシュおよびサーバ、ならびにもしくはプロセッサ１５０２レジスタ、メモリ１５０４、１５０６、および記憶装置１５１６等のいろいろな記憶媒体等）を含むと解釈されるべきである。また、用語「コンピュータ可読媒体」は、コンピュータによる実行のための命令のセットを記憶する、符号化する、または搬送することができる、および本発明の方法論の任意の１つまたは複数をコンピュータによって実行させる、またはかかる命令のセットによって活用される、またはかかる命令のセットと関連付けられるデータ構造を記憶する、符号化する、または搬送することができる任意の媒体を含むとも解釈されるものとする。用語「コンピュータ可読媒体」は、したがって、ソリッドステートメモリ、光媒体、および磁気媒体等の有形的表現媒体を含むが、これらに限定されないと解釈されるものとする。
【００８５】
要約書は、読者が技術的な開示の性質および要旨を確かめることを可能にする要約書を要求する、連邦法施行規則第３７巻、第１．７２（ｂ）項に準拠するために提供される。要約書は、それが請求項の範囲または意味を制限する、または解釈するために使用されないという理解で提出される。以下の特許請求の範囲は、発明を実施するための形態にこれにより組み込まれ、各請求項は、それ自体、別個の実施形態として効力がある。
【図１】
2013533542.tif 000003
【図２】
2013533542.tif 000004
【図３】
2013533542.tif 000005
【図４】
2013533542.tif 000006
【図５】
2013533542.tif 000007
【図６】
2013533542.tif 000008
【図７】
2013533542.tif 000009
【図８】
2013533542.tif 000010
【図９】
2013533542.tif 000011
【図１０】
2013533542.tif 000012
【図１１】
2013533542.tif 000013
【図１２】
2013533542.tif 000014
【図１３】
2013533542.tif 000015
【国際調査報告】
2013533542.tif 000016
2013533542.tif 000017