第1の並行処理機械を使用して第1のデータを分析することと、前記第1の並行処理機械から第2のデータを出力することであって、前記第2のデータが、前記第1のデータを分析した結果の表示を提供する、出力することと、第2の並行処理機械を使用して前記第2のデータを分析することと、前記第2のデータを分析した結果を、前記第2の並行処理機械から出力することと、を含むデータを分析するための方法。第1のデータを分析することが、前記第1のデータが第1のパターンと一致するかどうかを決定することを含む、請求項1に記載の方法。前記第2のデータが、前記第1のデータが前記第1のパターンと一致するかどうかの表示を提供する、請求項2に記載の方法。前記第2のデータを分析することが、前記第2のデータが第2のパターンと一致するかどうかを決定することを含む、請求項3に記載の方法。前記第2のデータを分析する結果が、前記第2のデータが前記第2のパターンと一致したかどうかの表示を含む、請求項4に記載の方法。前記第2のデータが、前記第1のパターンとの一致を示す単一のビットを含む、請求項1に記載の方法。前記第2のデータが、複数のパターンに対する一致および非一致を示す複数のビットを備えるワードを備え、前記複数のパターンが前記第1のパターンを含む、請求項1に記載の方法。前記第2のデータが、前記第1の並行処理機械のプログラマブル要素の状態に対応する状態ベクトルを含む、請求項1に記載の方法。第1のデータを分析することが、前記第1のデータが関心のあるシーケンスを含むかどうかを決定することを含む、請求項1に記載の方法。前記第1の並行処理機械から第2のデータを出力することが、前記第1のデータに対する、前記第1の並行処理機械のプログラマブル要素の反応に基づいて第2のデータを出力することを含む、請求項1に記載の方法。第1のデータを分析することが、データシーケンスが、前記第1のデータ内で認識されるかどうかを決定することを含む、請求項1に記載の方法。前記第1のデータが未処理データを備える、請求項1に記載の方法。前記第2のデータを分析することが、前記第2の並行処理機械を使用して前記第1のデータを分析することも含む、請求項1に記載の方法。前記第2のデータが、前記第1の並行処理機械の検出状態の表示を提供する、請求項1に記載の方法。前記第2のデータが、前記第1の並行処理機械の検出状態の表示を提供する、請求項1に記載の方法。前記第2の並行処理機械に、前記第2のデータを分析する前記結果をフィードバックすることをさらに含み、前記第2の並行処理機械を使用して前記第2のデータを分析することが、前記第2のデータを分析する前記結果を分析することをさらに含む、請求項1に記載の方法。前記第2のパターンが、前記第1のデータで認識されるパターンの内のパターンを備える、請求項5に記載の方法。前記第2のデータで認識されるパターンに基づいて、前記第1の並行処理機械を構成すること、をさらに含む、請求項1に記載の方法。前記第1の並行処理機械を構成することが、前記第2のデータで認識される前記パターンを分析することと、前記第2のデータで認識される前記パターンに基づいて前記第1の並行処理機械のためのプログラムをコンパイルすることとを含む、請求項3に記載の方法。前記プログラムが、更新されたプログラムを備える、請求項19に記載の方法。前記第2のデータが第2のパターンと一致するかどうかを決定することが、前記第2のデータが、第2の複数のパターンの内の1つまたは複数に一致するかどうかを決定することを含み、結果を出力することが、第3のデータを出力することであって、前記第3のデータが、前記第2の複数のパターンの内の1つまたは複数が前記第2のデータで認識されたかどうかの表示を提供する、出力することを含み、さらに前記第3のデータが、第3の並行処理機械を使用して、第3の複数のパターンの1つまたは複数と一致するかどうかを決定することと、前記第3の複数のパターンの内の1つまたは複数が、前記第3のデータで認識されたかどうかの表示を、前記第3の並行処理機械から出力することを含む、請求項4に記載の方法。前記第3の並行処理機械からの出力に基づいて、前記第1の並行処理機械および前記第2の並行処理機械の内の少なくとも1つを構成すること、をさらに含む、請求項21に記載の方法。第1のデータ入力ポートおよび第1の出力ポートを有する第1の並行処理機械であって、前記並行処理機械が、前記第1のデータ入力ポートで第1のデータを受け取り、第1のパターンが、前記第1のデータで認識されるかどうかに基づいて前記第1の出力ポートで第2のデータを出力するように構成される第1の並行処理機械と、第2のデータ入力ポートおよび第2の出力ポートを有する第2の並行処理機械であって、前記第2のデータ入力ポートが前記第1の並行処理機械の前記第1の出力ポートに結合され、前記第2の並行処理機械が、前記第2のデータ入力ポートで前記第2のデータを受け取り、第2のパターンが前記第2の出力ポートにある前記第2のデータで認識されるかどうかの表示を出力するように構成される第2の並行処理機械と、を備えるデータを処理するための装置。第3のデータ入力ポート、および第3の出力ポートを有する第3の並行処理機械であって、前記第3の出力ポートが、前記第2の並行処理機械の前記第2のデータ入力ポートに結合される、第3の並行処理機械をさらに備える、請求項23に記載の装置。前記第2の並行処理機械が、さらに、前記第2のデータ入力ポートで前記第1のデータストリームを受け取るように構成され、前記第2のデータおよび前記第1のデータの組合せで前記第2のパターンを認識するようにさらに構成される、請求項23に記載の装置。前記第1の並行処理機械が、前記第2のデータに基づいてプログラムを受け取るように構成されるプログラミングインタフェースを含み、前記プログラムが、前記第1の並行処理機械を再プログラムするように構成される、請求項23に記載の装置。前記プログラムが、更新されたプログラムを含み、前記更新されたプログラムが、前記第1の並行処理機械にすでにロードされたプログラムを更新するように構成される、請求項26に記載の装置。前記プログラムが、前記第1の並行処理機械のためのオリジナルプログラムを備える、請求項26に記載の装置。前記第2の並行処理機械の前記出力ポートに結合され、前記第2の並行処理機械の前記出力ポートを分析し、前記第2の並行処理機械からの前記第2のデータストリーム出力の関数として、前記第1の並行処理機械のための更新プログラムをコンパイルするように構成される処理装置をさらに備え、前記第1の並行処理機械が、前記処理装置から更新されたプログラムを受け取るように構成される、請求項26に記載の装置。第3のデータ入力ポートおよび第3の出力ポートを有する第3の並行処理機械であって、前記第3の並行処理機械が、前記第2の並行処理機械からの前記表示を受け取り、第3のパターンが前記表示内にあるかどうかを決定し、出力を生成するように構成される第3の並行処理機械、を備える、請求項29に記載の装置。第1の並行処理機械で第1のデータを受け取ることと、前記第1のデータの分析に基づいて、前記第1の並行処理機械から第2のデータを出力することと、第2の並行処理機械で前記第2のデータを受け取ることと、前記第2のデータの分析に基づいて、前記第2の並行処理機械から第3のデータを出力することと、前記3のデータに基づいて、前記第1の並行処理機械を構成することと、を含む、データを分析するための方法。構成することが再プログラムすることを含む、請求項31に記載の方法。前記第1の並行処理機械を構成することが、前記第3のデータに基づいて前記第1の並行処理機械のための更新されたプログラムをコンパイルすることと、前記第1の並行処理機械に前記更新プログラムをロードすることと、を含む、請求項31に記載の方法。前記第1の並行処理機械が、前記第1のデータで第1のパターンを識別するように構成され、前記第2の並行処理機械が、前記第2のデータで第2のパターンを識別するように構成される、請求項31に記載の方法。前記第2の並行処理機械で前記第1のデータを受け取ることをさらに含み、前記第2の並行処理機械から第3のデータを出力することが、前記第1のデータおよび前記第2のデータの分析に基づいて第3のデータを出力することを含む、請求項31に記載の方法。第1の並行処理機械で第1のデータを分析することと、前記第1のデータに関する第2のデータについての第2の並行処理機械による分析に基づき、前記第1の並行処理機械を構成することと、を含む方法。前記第2の並行処理機械が、前記第1のデータを分析し、前記分析に基づいて前記第2のデータを生成する、請求項36に記載の方法。前記第2の並行処理機械が、前記第1の並行処理機械からの出力を分析し、前記分析に基づいて前記第2のデータを生成する、請求項36に記載の方法。処理装置が前記第2のデータを受け取り、前記第2のデータを分析し、前記第2のデータに基づいて前記第1の並行処理機械のための更新されたプログラムをコンパイルし、前記第1の並行処理機械を構成することが、前記第1の並行処理機械の上に前記更新されたプログラムをロードすることを含む、請求項36に記載の方法。前記第1の並行処理機械および前記第2の並行処理機械がパターン認識を実行する、請求項36に記載の方法。階層構造の第1の層で、入力データに関する下位レベルの分析を実行し、前記下位レベルの分析に基づいて出力を提供することと、階層構造の第2の層で、前記下層によって提供される前記出力に関する高レベルの分析を実行することと、を含む方法。前記分析が、パターン認識を備える、請求項41に記載の方法。前記構造の前記第1の層が、第1の並行処理機械によって実装され、前記構造の第2の層が、第2の並行処理機械によって実装される、請求項41に記載の方法。前記第1の並行処理機械および前記第2の並行処理機械が、カスケード式でともに結合される、請求項43に記載の方法。前記第1の並行処理機械および前記第2の並行処理機械が、直列で結合される、請求項43に記載の方法。分析の前記レベルの内の1つからの情報が、分析の前記他のレベルで実行される前記分析を修正するために使用される、請求項41に記載の方法。前記構造の前記第2の層から、前記構造の前記第1の層にフィードバック情報を提供することをさらに含む、請求項41に記載の方法。前記フィードバック情報が、前記下位レベルの分析を更新するために使用される、請求項47に記載の方法。前記フィードバック情報が、前記下位レベルの分析を実行するために使用されるプログラムを更新するために使用される、請求項48に記載の方法。前記フィードバック情報は、前記入力データに相当する情報を識別することを含む、請求項48に記載の方法。前記構造の前記第1の層が、並行処理機械の第1の部分によって実装され、前記構造の前記第2の層が、前記並行処理機械の第2の部分によって実装される、請求項41に記載の方法。前記高レベルの分析に基づいて前記下位レベルの分析を構成することをさらに含む、請求項41に記載の方法。前記下位レベルの分析に基づいて前記高レベルの分析を構成することをさらに含む、請求項41に記載の方法。前記構造の両方の層が、フォンノイマンアーキテクチャを有する機械上でソフトウェアで実装される、請求項41に記載の方法。前記高レベルの分析に基づいて前記下位レベルの分析を修正することをさらに含む、請求項41に記載の方法。前記出力が、検出状態情報を備える、請求項41に記載の方法。以下の説明および図面は特定の実施形態を十分に示し、当業者がそれらを実行できるようにする。他の実施形態は、構造上の変更、論理的変更、電気的変更、プロセス変更、および他の変更を組み込んでよい。いくつかの実施形態の部分および特長は、他の実施形態の部分および特長の中に含まれてよい、または他の実施形態の部分および特長に代わってよい。本書は、とりわけ、階層構造を使用してデータを分析するための方法および装置を説明する。階層構造は複数の層を含むことがあり、各層は、入力データに対する分析を実行し、その分析に基づいた出力を提供する。階層構造の下層からの出力は、上位層に対する入力として提供できる。このようにして、下層は下位レベルの分析たとえば、基本的/根本的な分析を実行できる。一方、上位層は、1つまたは複数の下層からの出力を使用して高レベルの分析たとえば、より複雑な分析を実行できる。例では、階層構造は、パターン認識を実行する。例では、パターン認識は、記号のシーケンスを識別することを含む。パターンの識別のための例の記号は、音素音声、画像中のピクセル、ASCII文字、機械データたとえば0と1に相当することがある。例では、階層構造は、カスケード式でともに結合された複数の並行処理機械で実装される。たとえば、第1の並行処理機械および第2の並行処理機械は、第2の並行処理機械が、第1の並行処理機械からの出力を入力として受け取るように、直列で結合できる。任意の数の並行処理機械が、この階層構造でともに結合できる。階層構造を使用してデータを分析することに加えて、本書は、階層のあるレベルで実行される分析からの情報を使用して、階層の別のレベルで実行される分析を修正するための方法および装置も説明する。高レベルの分析を実現する第2の並行処理機械は、上述された並行処理機械の例を使用して、下位レベルの分析を実現する第1の並行処理機械にフィードバック情報を提供することができる。フィードバック情報は、第1の並行処理機械によって使用され、生物学的な脳での学習に類似した方法で第1の並行処理機械によって実行される分析を更新できる。図1は、データを分析するための階層構造を実装するために使用できる例の並行処理機械100を示す。並行処理機械100は、入力データを受け取り、その入力データに基づいた出力を提供することができる。並行処理機械100は、入力データを受け取るためのデータ入力ポート110、および別の装置に出力を提供するための出力ポート114を含むことがある。データ入力ポート110は、並行処理機械100に入力されるためのデータにインタフェースを提供する。並行処理機械100は、それぞれが1つまたは複数の入力104、および1つまたは複数の出力106を有する複数のプログラマブル要素102を含む。プログラマブル要素102は、複数の状態の内の1つにプログラムすることができる。プログラマブル要素102の状態は、プログラマブル要素102が、所与の入力複数の場合があるに基づいてどの出力複数の場合があるを提供するのかを決定する。すなわち、プログラマブル要素102の状態は、所与の入力に基づいて、プログラマブル要素がどのように反応するのかを決定する。データ入力ポート110に対するデータ入力は、複数のプログラマブル要素102に提供され、プログラマブル要素102にそれに対して処置を講じさせることができる。プログラマブル要素102の例は、以下に説明される状態機械要素SME、および構成可能論理ブロックを含むことがある。例では、SMEは、所与の入力がデータ入力ポート110で受け取られるときに、特定の出力たとえば、高、つまり1信号を提供するように所与の状態で設定できる。所与の入力以外の入力がデータ入力ポート110で受け取られるとき、SMEは異なる出力たとえば、低、つまり0信号を提供できる。例では、構成可能な論理ブロックは、データ入力ポート110で受け取られる入力に基づいてブール論理関数たとえば、AND、OR、NOR、ext.を実行するように設定できる。並行処理機械100は、並行処理機械100の上にプログラムたとえば、画像をロードするためのプログラミングインタフェース111も含むことがある。画像は、プログラマブル要素102の状態をプログラムたとえば、設定できる。つまり、画像は、所与の入力に特定のやり方で反応するようにプログラマブル要素102を構成できる。たとえば、プログラマブル要素102は、文字aがデータ入力ポート110で受け取られるときに高信号を出力するように設定できる。いくつかの例では、並行処理機械100は、プログラマブル要素102の動作のタイミングを制御するためのクロック信号を使用できる。特定の例では、並列処理機械100は、プログラマブル要素102とのインタフェースをとるため、および特殊目的の機能を実行するための特殊目的要素112たとえば、RAM、論理ゲート、カウンタ、ルックアップテーブル等を含むことがある。いくつかの実施形態では、データ入力ポート110で受け取られるデータは、経時的にまたは一度に受け取られるデータの固定セット、もしくは経時的に受け取られるデータのストリームを含むことがある。データは、並行処理機械100に結合される、データベース、センサ、ネットワーク等の任意のソースから受け取られてよい、または任意のソースによって生成されてよい。並行処理機械100は、並行処理機械100の異なる要素たとえば、プログラマブル要素102、データ入力ポート110、出力ポート114、プログラミングインタフェース111、および特殊目的要素112をともに選択的に結合するための複数のプログラマブルスイッチ108も含む。したがって、並行処理機械100は、要素の間で形成されるプログラマブルマトリックスを含む。例では、プログラマブルスイッチ108は、プログラマブル要素102、データ入力ポート110、プログラミングインタフェース111、または特殊目的要素112の入力104が、1つまたは複数のプログラマブルスイッチ108を通して、プログラマブル要素102、出力ポート114、プログラミングインタフェース111、または特殊目的要素112の出力106に結合できるように、2つ以上の要素を選択的に互いに結合できる。したがって、要素間の信号の経路選択は、プログラマブルスイッチ108を設定することによって制御できる。図1は、所与の要素とプログラマブルスイッチ108との間の特定数の導線たとえばワイヤを示しているが、他の例では、異なる数の導線を使用できることが理解されるべきである。また、図1は、プログラマブルスイッチ108に個々に結合される各プログラマブル要素102を示しているが、他の例では、複数のプログラマブル要素102が、プログラマブルスイッチ108に対するグループたとえば、図8に示されるようなブロック802として結合できる。例では、データ入力ポート110、データ出力ポート114、および/またはプログラミングインタフェース111は、レジスタへの書込みがそれぞれの要素へデータを提供する、またはそれぞれの要素からデータを提供するようにレジスタとして実装できる。例では、単一の並行処理機械100が、物理デバイス上に実装されているが、他の例では、2台以上の並行処理機械100を単一の物理デバイスたとえば、物理チップ上に実装することができる。例では、複数の並行処理装置100のそれぞれが、別個のデータ入力ポート110、別個の出力ポート114、別個のプログラミングインタフェース111、プログラマブル要素102の別個のセットを含むことがある。さらに、プログラマブル要素102の各セットは、その対応する入力データポート110でデータに反応するたとえば、高信号または低信号を出力することができる。たとえば、第1の並行処理機械100に対応するプログラマブル要素102の第1のセットは、第1の並行処理機械100に対応する第1のデータ入力ポート110でデータに反応できる。第2の並行処理機械100に対応するプログラマブル要素102の第2のセットは、第2の並行処理機械100に対応する第2のデータ入力ポート110に反応できる。したがって、各並行処理機械100は、プログラマブル要素102のセットを含み、プログラマブル要素102の異なるセットが、異なる入力データに反応できる。同様に、各並行処理機械100、およびプログラマブル要素102の対応する各セットは、別個の出力を提供できる。いくつかの例では、第1の並行処理機械100からの出力ポート114は、第2の並行処理機械100の入力ポート110に結合でき、したがって、第2の並行処理機械100のための入力データは、第1の並行処理機械100からの出力データを含むことができる。例では、並行処理機械100にロードするための画像は、プログラマブル要素102の状態を設定し、プログラマブルスイッチ108をプログラムし、並行処理機械100内部で特殊目的要素112を構成するための複数のビットの情報を含む。例では、画像は、特定の入力に基づいて所望される出力を提供するように並行処理機械100をプログラムするために、並行処理機械100にロードできる。出力ポート114は、データ入力ポート110でのデータに対するプログラマブル要素102の反応に基づいて並行処理機械100から出力を提供できる。出力ポート114からの出力は、所与のパターンの一致を示す単一ビット、複数のパターンに対する一致および不一致を示す複数ビットを含むワード、および所与の瞬間でのすべてのまたは特定のプログラマブル要素102の状態に対応する状態ベクトルを含むことがある。並行処理機械100の例の使用は、パターン認識たとえば、音声認識、画像認識等信号処理、画像処理、コンピュータビジョン、暗号法および他を含む。特定の例では、並行処理機械100は、有限状態機械FSMエンジン、フィールドプログラマブルゲートアレイFPGA、およびその変形を含むことがある。さらに、並行処理機械100は、コンピュータ、ページャ、セルラー電話、個人用整理手帳、携帯型オーディオプレーヤー、ネットワーク装置たとえば、ルータ、ファイアウォール、スイッチ、または任意のその組み合わせ、制御回路、カメラ等のより大きな装置内の構成要素であってよい。図2は、並行処理機械100によって実装できる有限状態機械FSMの例のモデルを示す。並行処理機械100は、FSMの物理的な実装として構成たとえば、プログラムできる。FSMは、1つまたは複数のルートノード202を含む、グラフ200たとえば、有向グラフ、無向グラフ、準グラフとして表現できる。ルートノード202に加えて、FSMは、いくつかの標準ノード204、ならびに1つまたは複数のエッジ206を通してルートノード202および他の標準ノード204に接続される端末ノード208から構成できる。ノード202、204、208は、FSM内の状態に相当する。エッジ206は、状態間の遷移に相当する。ノード202、204、208のそれぞれは、アクティブ状態または非アクティブ状態のどちらかであることがある。非アクティブ状態にあるとき、ノード202、204、208は、入力データに反応たとえば、応答しない。アクティブ状態にあるとき、ノード202、204、208は、入力データに反応できる。上流ノード202、204は、入力データが、上流ノード202、204と下流ノード204、208との間でエッジ206によって指定される基準に一致するときに、そのノードから下流にあるノード204、208を活性化することによって入力ノードに反応できる。たとえば、文字bを指定する第1のノード204は、第1のノード204がアクティブで、文字bが入力データとして受け取られるときに、エッジ206によって第1のノード204に接続される第2のノード204を活性化する。本明細書に使用されるように、上流は、1つまたは複数の他のノードの上流またはループの場合にはそれ自体の上流にある第1のノードが、第1のノードが1つまたは複数の他のノードを活性化できるまたはループの場合にはそれ自体を活性化できる状態を指す、1つまたは複数のノード間の関係性を指す。同様に、下流は、1つまたは複数の他のノードの下流ループの場合はそれ自体の下流にある第1のノードが、1つまたは複数の他のノードによって活性化できるまたはループの場合はそれ自体によって活性化できる関係性を指す。したがって、用語上流および下流は、本明細書中で、1つまたは複数のノード間の関係性を指すために使用されるが、これらの用語は、ノード間のループまたは他の非線形経路の使用を排除しない。グラフ200では、ルートノード202は初期に活性化され、入力データが、ルートノード202からのエッジ206に一致するときに下流ノード204、208を活性化できる。グラフ200全体でノード204、208は、入力データが受け取られると、このようにして活性化できる。端末ノード208は、入力データによる関心のあるシーケンスの一致に相当する。したがって、端末ノード208の活性化は、入力データとして関心のあるシーケンスが受け取られたことを示す。パターン認識機能を実装する並行処理機械100との関連で、端末ノード208に到達することは、関心のある特定のパターンが、入力データで検出されたことを示すことができる。例では、それぞれのルートノード202、標準ノード204、および端末ノード208は、並行処理機械100のプログラマブル要素102に相当することがある。各エッジ206は、プログラマブル要素102間の接続に相当することがある。したがって、別の標準ノード204または端末ノード208に遷移するたとえば、別の標準ノード204または端末ノード208に接続するエッジ206を有する標準ノード204は、別のプログラマブル要素102に遷移するたとえば、別のプログラマブル要素102に出力を提供するプログラマブル要素102に相当する。いくつかの例では、ルートノード202は、対応するプログラム要素102を有していない。並行処理機械100がFSMとしてプログラムされるとき、プログラマブル要素102のそれぞれも、アクティブ状態または非アクティブ状態のどちらかであることがある。非アクティブであるときの所与のプログラマブル要素102は、その対応するデータ入力ポート110での入力データに反応しない。アクティブプログラマブル要素102は、入力データおよびデータ入力ポート110に反応することができ、入力データがプログラマブル要素102の設定に一致するときに下流のプログラマブル要素102を活性化できる。プログラマブル要素102が、端末ノード208に相当するとき、プログラマブル要素102は、出力ポート114に結合され、外部装置に一致の表示を提供できる。プログラミングインタフェース111を介して並行処理機械100にロードされる画像は、所望されるFSMがデータ入力ポート110でのデータの反応に基づいてノードの順次的な活性化によって実装されるように、プログラマブル要素102と他の要素112との間の接続だけではなく、プログラマブル要素102および他の要素112も構成できる。例では、プログラマブル要素102は、単一のデータサイクルたとえば、単一文字、文字のセット、単一クロックサイクルの間活性のままとなり、次いで上流のプログラマブル要素102によって再活性化されない限り、非アクティブに切り替わる。端末ノード208は、過去のイベントの圧縮履歴を記憶するために検討できる。たとえば、端末ノード208に達するために必要とされる入力データの1つまたは複数のパターンは、その端末ノード208の活性化によって表すことができる。例では、端末ノード208によって提供される出力はバイナリである。すなわち、出力は、関心のあるパターンが一致しているかどうかを示す。グラフ200中の端末ノード208の標準ノード204に対する率はきわめて小さい場合がある。言い換えると、FSMに高い複雑度がある場合があるが、FSMの出力は、比較すると小さい場合がある。例では、並行処理機械100の出力は、並行処理機械用の状態ベクトルを含むことがある。状態ベクトルは並行処理機械100のプログラマブル要素102の状態たとえば、活性化済みまたは未活性を含む。例では、状態ベクトルは、端末ノード208に相当するプログラマブル要素102のための状態を含む。したがって、出力は、グラフ200のすべての端末ノード208によって提供される表示の集合体を含むことがある。状態ベクトルはワードとして表すことができ、各端末ノード208によって提供されるバイナリ表示は、1ビットのワードを含む。端末ノード208のこの符号化は、並行処理機械100のための検出状態たとえば、関心のあるシーケンスが検出されたかどうか、および関心のあるどのシーケンスが検出されたのかの効果的な表示を提供できる。別の例では、状態ベクトルは、プログラマブル要素102が端末ノード208に相当するかどうかに関係なく、プログラマブル要素102のすべてまたは部分集合の状態を含むことがある。上述されたように、並行処理機械100は、パターン認識機能を実装するようにプログラムできる。たとえば、並行処理機械100によって実装されるFSMは、入力データ中の1つまたは複数のデータシーケンスたとえば、シグナチャ、パターンを認識するように構成できる。関心のあるデータシーケンスが並行処理機械100によって認識されるとき、その認識の表示は、出力ポート114で提供できる。例では、パターン認識は、たとえば、ネットワークデータ中のマルウェアまたは他の情報を識別するために記号たとえば、ASCII文字の文字列を認識できる。図3は、階層構造300を使用してデータを分析するように構成された第1の並行処理機械302および第2の並行処理機械304の例を示す。それぞれの並行処理機械302、304は、データ入力ポート302A、304A、プログラミングインタフェース302B、304B、および出力ポート302C、304Cを含む。第1の並行処理機械302は、入力データ、たとえばデータ入力ポート302Aでの未処理データを受け取るように構成される。第1の並行処理機械302は、上述されたように入力データに応答し、出力ポート302Cで出力を提供する。第1の並行処理機械302からの出力は、第2の並行処理機械304のデータ入力ポート304Aに送信される。次いで、第2の並行処理機械304は、第1の並行処理機械302によって提供される出力に基づいて反応し、出力ポート304Cで対応する出力を提供できる。2つの並行処理機械302、304の直列でのこの階層上の結合は、第1の並行処理機械302から第2の並行処理機械304に圧縮ワードで過去のイベントに関する情報を転送するための手段を提供する。転送される情報は、事実上、第1の並行処理機械302によって記録された複雑なイベントの要約たとえば、関心のあるシーケンスである場合がある。図3に示される並行処理機械302、304の2レベル階層300は、2つの独立したプログラムが、同じデータストリームに基づいて動作できるようにする。2段階階層は、異なる部位としてモデル化される生物学的な脳内での視覚的な認識に類似する場合がある。このモデルの下では、部位は、事実上、異なるパターン認識エンジンであり、それぞれが類似する計算機能パターン一致を実行するが、他のプログラムシグナチャを使用する。複数の並行処理機械302、304をともに接続することによって、データストリーム入力について高められた知識が取得され得る。第1の並行処理機械302によって実装される階層の第1のレベルは、未処理データストリームに対して直接的に処理を実行する。すなわち、未処理データストリームは入力インタフェース302Aで受け取られ、第1の並行処理機械302のプログラマブル要素が未処理データストリームに反応できる。階層の第2の並行処理機械304によって実装される第2のレベルは、第1のレベルからの出力を処理する。すなわち、第2の並行処理機械304は、入力インタフェース304Bで第1の並行処理機械302から出力を受け取り、第2の並行処理機械304のプログラマブル要素は第1の並行処理機械302の出力に反応できる。したがって、この例では、第2の並行処理機械304が入力として未処理データストリームを受け取るのではなく、むしろ、第1の並行処理機械302によって決定される未処理データストリームが一致する関心のあるパターンの表示を受け取る。第2の並行処理機械304は、第1の並行処理機械302からの出力データストリーム中のパターンを認識するFSMでプログラムできる。図4は、階層の1つのレベルが複数の並行処理機械で実装される2レベル階層400の別の例を示す。ここでは、階層400の第1のレベルは、3つの並行処理機械402で実装される。3つの第1のレベルの並行処理機械402のそれぞれからの出力が、第1のレベルの並行処理機械402からの出力でパターンを認識するたとえば、識別する単一の第2のレベルの並行処理機械404に提供される。他の例では、異なる数の並行処理機械が、異なるレベルで実装できる。各並行処理機械402、404は、データ入力ポート402A、404、プログラミングインタフェース402B、404B、および出力ポート402C、404Cを含む。図5は、4台の並行処理機械502、504、506、および508で実装され、各レベルによって識別されるパターンの例を示す4レベル階層500を示す。上述されたように、各並行処理機械502、504、506おおび508は、データ入力ポート502A、504A、506A、および508A、プログラミングインタフェース502B、504B、506B、および508B、ならびに出力ポート502C、504C、506C、および508Cを含む。4レベル階層500は、画像中の黒のピクセルまたは白のピクセルに基づいた作成された言語の視角的な識別に相当する。階層が高レベルに進むにつれ、入力ストリームの蓄積された知識は相応して増大する。並行処理機械502、504、506、508は、階層認識機能を達成するためにカスケードされる。階層500のそれぞれの連続レベルは、従前のレベルの圧縮された出力に適用される新しい規則パターンシグナチャを実装できる。このようにして、きわめて詳細なオブジェクトが、基本的なプリミティブな情報の初期検出に基づいて識別できる。たとえば、レベル1第1の並行処理機械502に対する未処理データ入力ストリームは、視角映像のための情報たとえば、所与のビットが黒なのか/白なのか、ONか/OFFかを含むことがある。第1の並行処理機械502は、ピクセル情報によって形成されるプリミティブパターンを識別するようにプログラムできる。たとえば、第1の並行処理機械502は、隣接するピクセルが垂直線、水平線、弧等をいつ形成するのかを識別するように構成できる。これらのパターンたとえば、垂直線、水平線弧等のそれぞれは、第1の並行処理機械502からのそれぞれの出力ビットまたは信号によって示すことができる。たとえば、第1の並行処理機械502が少なくとも3ビットの垂直線を識別するとき、高信号たとえば、論理1が、第2の並行処理機械504に対する出力ワードの第1のビットで出力できる。第1の並行処理機械502が少なくとも3ビットの水平線を識別するとき、高信号が、第2の並行処理機械504に対する初期ワードの第2のビットで出力できる。第2のレベル第2の並行処理機械504は、第1の並行処理機械502からの出力信号のパターンを識別するようにプログラムできる。たとえば、第2の並行処理機械502は、第1の並行処理機械502によって識別されるプリミティブパターン線、弧、他の組合せによって形成されるパターンを識別するようにプログラムできる。第2の並行処理機械504は、水平線および垂直線がいつ交差し、文字tを形成するのかを識別するようにプログラムできる。上述されたように、第2の並行処理機械504によって実装されるFSM内のノードは、第1の並行処理機械502からの出力に反応する。したがって、プリミティブパターンの組合せは、第1の並行処理機械502からの出力ビット中のパターンを識別することによって識別される。次いで、第2の並行処理機械504からの出力が、第2の並行処理機械506によって識別される文字の組合せからワードを識別できる第3のレベル第3の並行処理機械506に入力される。第4のレベル第4の並行処理機械508は、次いで、第3の並行処理機械506によって識別されるワードによって形成されるフレーズを識別できる。したがって、高レベルが、下位レベルの出力のパターンを識別するようにプログラムできる。さらに、下位レベルが、高レベルで識別されるパターンを構成する構成要素を識別するようにプログラムできる。ピクセル情報からの文字、ワードおよびフレーズの視覚的な識別は、例として使用される。ただし、本明細書に説明される階層方法および装置は、他のデータに、および他の用途のために適用できる。たとえば、階層分析は、音声に対応するデータで使用され、第1のレベルで音素の組合せから音節を、第2のレベルで音節の組合せからワードを識別できる。他の例では、階層分析は、それ自体を階層状に構築する機械データたとえば、未処理の0および1に適用できる。図5は、層間での特定の接続および個々の接続を示しているが、1つのレベルからの出力が階層の他のレベルに前方にまたは後方に送られる階層が、実装できることが理解されるべきである。たとえば、第2の並行処理機械504からの出力は、第4の並行処理機械508に送信できるだろう。一方、第4の並行処理機械508からの出力は、第3の並行処理機械506にフィードバックされる可能性がある。一般的には、階層は、並行処理機械からの検出状態情報が、他の並行処理機械の1台または複数台もしくはすべてに送られるように実装できる。いくつかの例では、フィードバックは、階層構造内で使用され、1つまたは複数のレベルで使用されるプログラムを更新する。たとえば、第1のレベルからの出力は、第2のレベルに提供され、第2のレベルを再プログラムできる。これは、第1のレベルで識別されるまたは識別されないパターンに基づいて第2のレベルによって適用される規則を更新するために使用できる。例では、第1のレベルは、第2のレベルよりも階層では高レベルである。たとえば、下位レベルは、高レベルによって識別されるパターンに基づいてプログラムによって最初に指定されなかった追加のパターンを探すように再プログラムできる。別の例では、下位レベルは、下位レベルによって識別される特定のパターンが、特定のパターンが他のパターンと結合し、重要なイベントを形成するという点で重要であることを通知され得る。さらに別の例では、下位レベルは、識別された特定のパターンが特定の値を有さず、したがって下位レベルがそのパターンを識別するのを停止できると通知されてよい。例では、再プログラミングは経時的に実行でき、したがって所与のレベルのプログラムは、一定期間での小さな調整によって増分的に修正される。図6は、フィードバックを使用して階層の部分を再プログラムする4レベル階層600の例を示す。4レベル階層600は、それぞれが、データ入力ポート602A、604A、606A、608A、プログラミングインタフェース602B、604B、606B、608B、および出力ポート602C、604C、606C、608Cを有する4つの並行処理機械602、604、606、608で実装される。第1の並行処理機械602は、階層600の第1のレベルを実装し、階層600の第2のレベルを実装する第2の並行処理機械604に出力を提供する。第3の並行処理機械および第4の並行処理機械606、608は、同様に、階層600の第3のレベルおよび第4のレベルを実装する。例では、第4の並行処理機械608からの出力が、第1の並行処理機械602によって受け取られる入力データに関する階層600の分析に基づいた階層600の出力として外部装置に送られる。したがって、第4の並行処理機械608からの出力は、階層600のための集合的な出力に相当する。他の例では、他の並行処理機械608からの出力は、階層600のための集合的な出力に相当することがある。第2の、第3のおよび第4の並列処理機械604、606、608は、それぞれ下のレベルで平行処理機械602、604、606のプログラミングインタフェース602B、604B、606Bにフィードバックされる。たとえば、第4の並行処理機械608からの出力は、第3の並行処理機械606のプログラミングインタフェース606Bにフィードバックされる。したがって、第3の並行処理機械606は、第4の並行処理機械608からの出力に基づいて再プログラムできる。相応して、第3の並行処理機械608は、実行時間にそのプログラムを修正できる。第1の並行処理機械および第2の並行処理機械602、604は、それぞれ第2のおよび第3の並行処理機械604、606からの出力に基づいて実行時間に同様に再プログラムできる。例では、並行処理機械604、606、608が分析され、コンパイルされて、並行処理機械602、604、606を再プログラムするためのプログラムたとえば、画像を形成する。たとえば、並行処理機械408からの出力は、プログラミングインタフェース606Bに送られる前に処理装置614によって分析され、コンパイルされる。処理装置614は、並行処理機械608からの出力に基づいて並行処理機械606のための更新プログラムを生成できる。処理装置614は、出力を分析し、第3の並行処理装置606のための更新されたプログラムをコンパイルできる。更新されたプログラムは、次いで、プログラミングインタフェース606Bを通して第3の並行処理機械606にロードされ、第3の並行処理機械606を再プログラムできる。例では、更新されたプログラムは、現在のプログラムからの部分的な変更だけを含んでよい。したがって、例では、更新されたプログラムは、並行処理機械602、604、606、608上で現在のプログラムの一部だけを置換できる。別の例では、更新されたプログラムは現在のプログラムのすべてまたはより大部分を置換する。同様に、処理装置610、612は、第2のおよび第3の並行処理機械604、606からの出力に基づいて、同様にフィードバックを分析し、更新されたプログラムをコンパイルできる。処理装置610、612、614は、1つまたは複数の追加の並行処理機械で実装できる、または異なるタイプの機械たとえば、フォンノイマンアーキテクチャを有するコンピュータで実装できる。いくつかの例では、処理装置610、612、614は、新しいプログラムをコンパイルする前に高レベルからの出力を分析する。例では、処理装置610、612、614は、出力を分析して、下位レベルのプログラムを更新する方法を決定して、次いで新しいたとえば、更新された、最初の下位レベルのプログラムを分析に基づいてコンパイルする。階層600では、所与の並行処理機械でのフィードバックは、所与の並行処理機械のすぐ上のレベルから受け取られるが、フィードバックは、任意の並行処理機械から高レベル、下位レベル、または同レベルで別の並行処理機械になる場合がある。たとえば、フィードバックは、その同じ並行処理機械の出力から、または同じレベル、高レベル、または下位レベルでの別の並行処理機械の出力から、並行処理機械のプログラミング入力で受け取ることができる。さらに、並行処理機械は、複数の異なる並行処理機械からフィードバックを受け取ることができる。フィードバックに基づいた並行処理機械の再プログラミングは、入力データのパターンの識別から時間内にたとえば、未処理データの処理とリアルタイムではない切断されてよい。情報を階層下方に送り返し、下位レベルの再プログラミングに影響を及ぼす目的は、下位レベルが関心のあるパターンの差異を認識することにより効率的になるためである場合がある。情報を下方に送る別の目的は、下位レベルで高レベルの鋭さを達成することである。いくつかの例では、階層の高レベルに情報を転送するには時間を要することを認識し、情報を高レベルに送るプロセスは、可能な時には回避される。いくつかの例では、高レベルは、本来、システムにとって新しいパターンの識別を解決するために使用できる。これは、生物学的な脳の新皮質で起こる、使用されているプロセスに類似することがある。例では、パターンが下位レベルで完全に解決できるのであれば、パターンは解決されるべきである。フィードバック機構は、階層の下位レベルに学習を転送する1つの方法である。階層を下方に情報を押し下げるこのプロセスは、新しいパターンまたは見慣れていないパターンを処理するために階層の上位レベルを保存するのに役立つ。さらに、認識プロセス全体は、階層の多様なレベルを通したデータ転送の量を削減することによって加速できる。フィードバックは、階層の下位レベルを、入力時にデータストリームに対してより鋭く敏感にすることができる。この情報の押し下げの結果として、決定は、階層の下位レベルで下すことができ、非常に迅速に下すことができる。したがって、例では、下位レベルの並行処理機械たとえば、第1の並行処理機械602からの出力は、第4の並行処理機械608からの出力とともに、階層600から別の装置への集合的な出力に相当することがある。外部装置は、たとえば、これらの並行処理機械602、608のそれぞれからの出力を監視して、いつ階層600によってパターンが識別されたかを決定できる。例では、フィードバック情報は、分析されるデータストリームに対応する識別情報を含む場合がある。たとえば、識別情報は、データの識別特性、データのフォーマット、データのプロトコル、および/または任意の他のタイプの識別情報を含むことがある。識別情報は、たとえば、処理装置610による入力データのための分析方法を修正するたとえば、適応するために収集され、分析され、使用されてよい。並行処理機械100は、次いで適応された分析方法でプログラムされてよい。識別情報は、たとえば、入力データの言語を含むことがある。並行処理機械100は、初期に、入力データの言語を決定するためにプログラムすることができ、いったん言語が入力に対応して識別されると、実行時の間に適応されたとえば、再プログラムされてよい。並行処理機械100のための適応された分析方法は、より具体的には、識別された言語に対する分析方法に相当することがある。最後に、並行処理機械100は、適応された分析方法を使用してさらに入力データを分析してよい。フィードバックプロセスは、反復的であってよく、したがって追加の識別情報が入力データで検出され、分析方法のさらなる適応化を可能にする。並行処理機械100にロードするためのプログラムたとえば、画像は、図12に関して以下に説明されるコンパイラによって生成できる。一般に、コンパイルは、計算集約的なプロセスである場合があり、初めてパターンシグナチャの大型データベースをコンパイルする際に最も明白になることがある。実行時動作では、高レベルの並行処理機械100が、下位レベルの並行処理機械のための増分プログラム更新の形で下位レベルにフィードバックを提供できる。したがって、下位レベルの並行処理機械に対するフィードバック情報は、コンパイルするにはより計算集約的ではない元のプログラムに対するはるかに小さい、増分更新である場合がある。図7は、4つの並行処理機械702、704、706、708で実装される4レベル階層700の別の例を示す。それぞれがデータ入力ポート702A、704A、706A、708A、プログラミングインタフェース702B、704B、706B、708B、および出力ポート702C、704C、706C、708Cを有する4つの並行処理機械702、704、706、708。さらに、いくつかの例では、4レベル階層700は、処理装置710、712、714を含み、並行処理機械702、704、および706のためのプログラムをコンパイルできる。4レベル階層700では、第2レベルの、第3レベルの、および第4レベルの並行処理機械704、706、708が、未処理データストリームからの入力データだけではなく、下位レベルの並行処理機械702、704、706の出力からの入力データも受け取る。したがって、レベル2、レベル3、およびレベル4は、下位レベルからのパターンおよび未処理データの組合せからパターンを識別できる。図6および図7からわかるように、並行処理機械100は、並行処理機械100からの出力だけではなく、階層に対する未処理データ入力も、それ自体を含む他の任意の並行処理機械100に送ることができる場合にほぼ任意の方法でカスケードできる。さらに、所与の並行処理機械100からの出力は、データ入力ポート110に対する入力データとして、および/または並行処理機械100のためのプログラムを更新するためのフィードバックとして別の並行処理機械100に送信できる。並行処理機械100が、入力データの1つのデータサイクルたとえば、ビット、ワードを処理するための時間のため、並行処理機械100を直列でカスケードすることは、すべての並行処理機械100を通して入力データストリームを完全に処理して、階層のための集合的な出力を生成するために要する時間を増加することがある。階層の下位レベルは、下位最も粒状のレベルの入力を受け取ることができるので、下位レベルは、高レベルの出力よりもよりアクティブであることが予想されるべきである。つまり、階層の中の各連続レベルは、高レベルのオブジェクトをアセンブルできる。例では、並行処理機械100は、並行処理機械100にどれほど早く入力データを送ることができるのかを制限する最大入力レートを有する。この入力速度は、単一のデータサイクルとして考えることができる。それぞれの連続データサイクルで、並行処理機械100は、多くの端末ノードを活性化する可能性を有する。これによって、特に階層の下位レベルにある並行処理機械100は、かなりの量の出力データを生成するだろう。たとえば、入力が最下位レベルの並行処理機械100にバイトのストリームとして提供される場合、並行処理機械100が、任意の所与のデータサイクルで、結果情報の複数のバイトを生成することが可能である場合がある。1バイトの情報が複数のバイトの情報を生成できる場合、次いで並行処理機械100の階層全体は、上方が階層の上方に渡されるように同期される必要がある。いくつかの例では、フィードバックは同期される必要がない。ただし、フィードバックが下位レベルで受け取られるのが早いほど、下位レベルが適応するのが早くなり、分析はより効果的になる。例として、単一の並行処理機械100で実装される階層のレベルごとの最大サイズ出力は、1024バイトに等しくなることがあり、階層の深さは4レベルに等しくなることがある。並行処理機械100の入力データストリームのデータ転送速度は、128MB/秒に等しくなることがある。以上の条件の場合、階層の各レベルは、7.63マイクロ秒で横断できるだろう。4レベル階層を用いる場合、並行処理機械100のスタック全体の総整定時間は、7.63マイクロ秒の4倍、つまり30.5マイクロ秒となるだろう。30.5マイクロ秒の整定時間では、入力データ周波数が32KB/秒に制限される必要があるようである。とりわけ、これは、並行処理機械100の構成にきわめて左右される。並行処理機械100は、入力データ転送速度対状態機械のサイズをトレードオフするように構成可能である。さらに、並行処理機械に対する入力ワードサイズは、並行処理機械100上にロードされる個々の画像を生成したコンパイラに対して対応する修正が行われる場合、調整できる。例では、上述された階層構造は、フォンノイマンアーキテクチャを有する機械でソフトウェアにより実装できるだろう。したがって、ソフトウェア命令が、プロセッサに、未処理データに対する第1のレベルの分析FSMを実装させるだろう。第1のレベルのFSMからの出力は、次いで、第2のレベルの分析等々を使用してプロセッサによって処理できるだろう。さらに、上述されたフィードバックループは、第1のレベルの分析が、たとえば第2のレベルの分析の出力に基づいて修正されるように実装できるだろう。図8から図11は、本明細書でFSMエンジン800と呼ばれている並行処理機械の例を示す。例では、FSMエンジン800は、有限状態機械のハードウェア実装を含む。したがって、FSMエンジン800は、FSM内の複数の状態に相当する、複数の選択的に結合可能なハードウェア要素たとえば、プログラマブル要素を実装する。FSM内の状態と同様に、ハードウェア要素は、入力ストリームを分析し、その入力ストリームに基づいて下流のハードウェア要素を活性化できる。FSMエンジン800は、汎用要素および特殊目的要素を含む複数のプログラマブル要素を含む。汎用要素は、多くの異なる機能を実装するようにプログラムできる。これらの汎用要素は、行806図9および図10に示されるに階層状に編成されるSME804、805図11に図示、およびブロック802図8および図9に図示を含む。階層状に編成されたSME804、805の間で信号の経路を定めるために、ブロック間スイッチ803図8および図9に図示、ブロック内スイッチ808図9および図10に図示、ならびに行内スイッチ812図10に図示を含む、プログラマブルスイッチの階層が使用される。SME804、805は、FSMエンジン800によって実装されるFSMの状態に相当することがある。SME804、805は、以下に説明されるプログラマブルスイッチを使用することによって結合できる。したがって、FSMは、SME804、805を、状態の機能に対応するようにプログラムすることによって、およびFSM内の状態間の遷移に相当するようにSME804、805をともに選択的に結合することによってFSMエンジン800上で実装できる。図8は、例のFSMエンジン800の全体図を示す。FSMエンジン800は、プログラマブルブロック間スイッチ803とともに選択的に結合できる複数のブロック802を含む。さらに、ブロック802は、信号たとえば、データを受信し、そのデータをブロック802に提供するための入力ブロック809たとえば、データ入力ポートに選択的に結合できる。また、ブロック802は、ブロック802からの信号を外部装置たとえば、別のFSMエンジン800に提供するための出力ブロック813たとえば、出力ポートに選択的に結合できる。FSMエンジン800は、FSMエンジン800の上にプログラムたとえば、画像をロードするためのプログラミングインタフェース811も含むことがある。画像は、SME804、805の状態をプログラムたとえば、設定できる。つまり、画像は、入力ブロック809で所与の入力に特定のやり方で反応するようにSME804、805を構成できる。たとえば、SME804は、文字aが入力ブロック809で受け取られるときに高信号を出力するように設定できる。例では、入力ブロック809、出力ブロック813、および/またはプログラミングインタフェース811は、レジスタへの書込みがそれぞれの要素へデータを提供する、またはそれぞれの要素からデータを提供するようにレジスタとして実装できる。したがって、プログラミングインタフェース811に相当するレジスタに記憶される画像からのビットは、SME804、805にロードできる。図8は、ブロック802と、入力ブロック809と、出力ブロック813と、ブロック間スイッチ803との間の特定数の導線たとえば、ワイヤ、トレースを示しているが、他の例では、より少ない導線またはより多い導線を使用できることが理解されるべきである。図9は、ブロック802の例を示す。ブロック802は、プログラマブルブロック内スイッチ808と選択的に結合できる複数の行806を含むことがある。さらに、行806は、ブロック間スイッチ803により、別のブロック802内の別の行806に選択的に結合できる。例では、バッファ801が、ブロック間スイッチ803への/ブロック間スイッチ803からの信号のタイミングを制御するために含まれる。本明細書で行806は、2のグループGOT810と呼ばれる要素の組に編成される複数のSME804、805を含む。例では、ブロック802は、十六16の行806を含む。図10は、行806の例を示す。GOT810は、プログラマブル行内スイッチ812によって他のGOT810、および行806内の任意の他の要素824に選択的に結合できる。GOT810は、ブロック内スイッチ808で他の行806内の他のGOT810に、またはブロック間スイッチ803で他のブロック802内の他のGOT810に結合することもできる。例では、GOT810は、第1の入力および第2の入力814および816、ならびに出力818を有する。第1の入力814は、GOT810の第1のSME804に結合され、第2の入力814は、GTO810の第2のSME804に結合される。例では、行806は、第1のおよび第2の複数の行相互接続導線820、822を含む。例では、GOT810の入力814、816は、1本または複数の行相互接続導線820、822に結合することができ、出力818は、1つの行相互接続導線820、822に結合できる。例では、第1の複数の行相互接続導線820は、行806内の各GOT810の各SME804に結合できる。第2の複数の行相互接続導線822は、行806内の各GOT810の1つのSME804に結合できるが、GOT810の他のSME804には結合できない。例では、第2の複数の行相互接続導線822の第1の半分が、行806内部のSME804の第1の半分各GOT810から1つのSME804に結合でき、第2の複数の行相互接続導線822の第2の半分は行806内のSME804の第2の半分各GOT810からの他のSME804に結合できる。第2の複数の行相互接続導線822とSME804、805との間の限られた接続性が、本明細書ではパリティと呼ばれている。例では、行806は、カウンタ、プログラマブルブール論理要素、フィールドプログラマブルゲートアレイFPGA、特定用途向け集積回路ASIC、プログラマブルプロセッサたとえば、マイクロプロセッサ、および他の要素等の特殊目的要素824を含むこともある。例では、特殊目的要素824は、カウンタ本明細書では、カウンタ824とも呼ばれているを含む。例では、カウンタ824は、12ビットプログラマブルダウンカウンタを含む。12ビットプログラマブルカウンタ824は、計数入力、リセット入力、およびゼロカウント出力を有する。計数入力は、アサート時、カウンタ824の値を1、減分する。リセット入力は、アサート時、カウンタ824に、関連するレジスタからの初期値をロードさせる。12ビットカウンタ824の場合、最高12ビットの数が初期値としてロードできる。カウンタ824の値がゼロ0に減分されるとき、ゼロカウント出力がアサートされる。カウンタ824は、少なくとも2つのモード、パルスおよび保持を有する。カウンタ824がパルスモードに設定されるとき、ゼロカウント出力は、カウンタ824がゼロに減分するときのクロックサイクル中にアサートされ、次のクロックサイクルでは、ゼロカウント出力はもはやアサートされない。カウンタ824が保持モードに設定されるとき、ゼロカウント出力は、カウンタ824がゼロに減分するときのクロックサイクル中にアサートされ、カウンタ824が、アサートされているリセット入力によってリセットされるまでアサートされた状態のままとなる。例では、特殊目的要素824はブール論理を含む。いくつかの例では、このブール論理は、FSMエンジン800の端末状態SMEから情報を抽出するために使用できる。抽出された情報は、他のFSMエンジン800に状態情報を転送するため、および/またはFSMエンジン800を再プログラムするために使用されるプログラミング情報を転送するため、または別のFSMエンジン800を再プログラムするために使用できる。図11は、GOT810の例を示す。GOT810は、入力814、816を有し、ORゲート830および3対1マルチプレクサ842に結合されるそれらの出力826、828を有する、第1のSME804および第2のSME805を含む。3対1マルチプレクサ842は、GOT810の出力818を、第1のSME804、第2のSME805、またはORゲート830に結合するように設定できる。ORゲート830を使用して、両方の出力826、828を結合し、GOT810の共通の出力818を形成できる。例では、第1のSMEおよび第2のSME804、805は、上述されたパリティを示し、第1のSME804の入力814は、行相互接続導線822のいくつかに結合することができ、第2のSME805の入力816は、他の行相互接続導線822に結合できる。例では、GOT810内の2つのSME804、805は、スイッチ840のどちらかまたは両方を設定することによってそれら自体にカスケードおよびまたはループバックすることができる。SME804、805は、SME804、805の出力826、828を、他のSME804、805の入力814、816に結合することによってカスケードできる。SME804、805は、出力826、828をそれら自体の入力814、816に結合することによってそれら自体にループバックできる。したがって、第1のSME804の出力826は、第1のSME804の入力814および第2のSME805の入力816のどれにも結合できないか、そのうちの1つに結合できるか、または両方に結合できる。例では、状態機械要素804、805は、検出ライン834に並列で結合される、多くの場合、動的ランダムアクセスメモリDRAMで使用されるセル等の複数のメモリセル832を含む。1つのかかるメモリセル832は、高値または低値たとえば、1または0のどちらかに対応する状態等のデータ状態に設定できるメモリセルを含む。メモリセル832の出力は、検出ライン834に結合され、メモリセル832に対する入力は、データストリームライン836でのデータに基づいて信号を受信する。例では、データストリームライン836での入力は、メモリセル832の内の1つを選択するために復号される。選択されたメモリセル832は、その記憶されたデータ状態を検出ライン834に対する出力として提供する。たとえば、データ入力ポート809で受信されたデータは、デコーダ不図示に提供することができ、デコーダはデータストリームライン836の内の1つを選択できる。例では、デコーダはASCII文字を、256ビットの内の1に変換できる。したがって、メモリセル832は、メモリセル832が高値に設定され、データストリームライン836上のデータがメモリセル832に相当するときに、検出ライン834に高信号を出力する。データストリームライン836上のデータがメモリセル832に相当し、メモリセル832が低値に設定されると、メモリセル832は、検出ライン834に低信号を出力する。検出ライン834上でのメモリセル832からの出力は、検出回路838によって感知される。例では、入力ライン814、816上の信号は、それぞれの検出回路838をアクティブ状態または非アクティブ状態のどちらかに設定する。非アクティブ状態に設定されると、検出回路838はそれぞれの検出ライン834上の信号に関わりなく、それぞれの出力826、828上で低信号を出力する。アクティブ状態に設定されると、検出回路838は、それぞれのSME804、805のメモリセル834の内の1つから高信号が検出されるときに、それぞれの出力ライン826、828上で高信号を出力する。アクティブ状態にあるとき、検出回路838は、それぞれのSME804、805のメモリセル834の内のすべてからの信号が低であるときに、それぞれの出力ライン826、828上で低信号を出力する。例では、SME804、805は、256個のメモリセル832を含み、各メモリセル832は異なるデータストリームライン836に結合される。したがって、SME804、805は、データストリームライン836の内の選択された1つまたは複数がその上に高信号を有するときに高信号を出力するようにプログラムできる。たとえば、SME804は、第1のメモリセル832たとえば、ビット0を高に設定させ、他のすべてのメモリセル832たとえば、ビット1から255を低に設定させることができる。それぞれの検出回路838がアクティブ状態にあるときに、SME804は、ビット0に対応するデータストリームライン836がその上に高信号を有すると出力826に対する高信号を出力する。他の例では、SME804は、複数のデータストリームライン836の内の1つが、適切なメモリセル832を高値に設定することによってその上に高信号を有するときに高信号を出力するように設定できる。例では、メモリセル832は、関連するレジスタからビットを読み取ることによって高値または低値に設定できる。したがって、SME804は、コンパイラによって作成された画像をレジスタの中に記憶し、関連するメモリセル832の中にレジスタ内のビットをロードすることによってプログラムできる。例では、コンパイラによって作成される画像は、高ビットおよび低ビットたとえば、1および0のバイナリ画像を含む。画像は、SME804、805をカスケードすることによってFSMとして動作するようにFSMエンジン800をプログラムできる。たとえば、第1のSME804は、検出回路838をアクティブ状態に設定することによってアクティブ状態に設定できる。第1のSME804は、ビット0に対応するデータストリームライン836がその上に高信号を有するときに高信号を出力するように設定できる。第2のSME805は、当初、非アクティブ状態に設定できるが、アクティブ時、ビット1に対応するデータストリームライン836がその上に高信号を有すると高信号を出力するように設定できる。第1のSME804および第2のSME805は、第2のSME805の入力816に結合するように、第1のSME804の出力826を設定することによってカスケードできる。したがって、高信号がビット0に対応するデータストリームライン836で検知されるとき、第1のSME804は出力826で高信号を出力し、第2のSME805の検出回路838をアクティブ状態に設定する。高信号がビット1に対応するデータストリームライン836で検知されるとき、第2のSME805は別のSME805を活性化するために出力828で、またはFSMエンジン800からの出力のために高信号を出力する。図10は、コンパイラが、ソースコードを、並行処理機械をプログラムするように構成された画像に変換するための方法1000の例を示す。方法1000は、構文木にソースコードをパースすることブロック1002と、構文木をオートマトンに変換することブロック1004と、オートマトンを最適化することブロック1006と、オートマトンをネットリストに変換することブロック1008と、ハードウェア上にネットリストを格納することブロック1010と、ネットリストの経路を定めることブロック1012と、結果として生じる画像を公開することブロック1014とを含む。例では、コンパイラは、ソフトウェア開発者が、FSMエンジン800上でFSMを実装するために画像を作成できるようにするアプリケーションプログラミングインタフェースAPIを含む。コンパイラは、ソースコードの正規表現の入力セットを、FSMエンジン800をプログラムするように構成される画像に変換する方法を提供する。コンパイラは、フォンノイマンアーキテクチャを有するコンピュータ用の命令によって実装できる。これらの命令は、コンピュータ上のプロセッサにコンパイラの機能を実行させることができる。たとえば、命令は、プロセッサによって実行されるときに、プロセッサがアクセス可能であるソースコードに対して、ブロック1002、1004、1006、1008、1010、1012、および1014で説明されるアクションをプロセッサに実行させることができる。フォンノイマンアーキテクチャを有する例のコンピュータは、図13に示され、後述される。例では、ソースコードは、記号のグループ内で記号のパターンを識別するためのサーチ文字列を記述する。サーチ文字列を説明するために、ソースコードは、複数の正規表現regexを含むことがある。regexは、記号検索パターンを記述するための文字列である場合がある。regexは、プログラミング言語、テキストエディタ、ネットワークセキュリティ、および他等の多様なコンピュータの領域で幅広く使用されている。例では、コンパイラによってサポートされている正規表現は、非構造化データの検索のための検索基準を含む。非構造化データは、自由形式を有し、データ内のワードに何のインデクシングも適用されないデータを含むことがある。ワードは、データの内部にバイト、プリンタブルおよび非プリンタブルの任意の組合せを含むことがある。例では、コンパイラは、PerlPerl互換性正規表現PCRE言語、PHP言語、Java登録商標言語、および.NET言語を含むregexを実装するための複数の異なるソースコード言語をサポートできる。ブロック1002で、コンパイラはソースコードを分析し、相対的に接続された演算子の配列を形成することができ、異なるタイプの演算子は、ソースコードによって実装される異なる関数たとえば、ソースコード内でregexによって実装される異なる関数に相当する。ソースコードを分析すると、ソースコードの一般的表現を生じさせることがある。例では、一般的表現は、構文木として知られているツリーグラフの形でソースコード内のregexの符号化された表現を含む。本明細書に説明されている例は、他の例では構文木抽象構文木としても知られているとしての配置を指すが、具象構文木または他の配置も使用できる。上述されたように、コンパイラはソースコードの複数の言語をサポートできるので、分析は、言語に関わりなく、たとえば構文木等の非言語特性表現にソースコードを変換する。したがって、コンパイラによる追加の処理ブロック1004、ブロック1006、ブロック1008、ブロック1010は、ソースコードの言語に関わりなく、共通の入力構造から作業できる。上記に留意されたように、構文木は、相対的に接続されている複数の演算子を含む。構文木は、複数の異なるタイプの演算子を含むことがある。つまり、異なる演算子は、ソースコード内のregexによって実装される異なる関数に相当することがある。ブロック1004で、構文木はオートマトンに変換される。オートマトンは、FSMのソフトウェアモデルを含み、相応して決定論的または非決定論的と分類できる。決定論的オートマトンは、所与のときに実行の単一の経路を有する。一方、非決定論的オートマトンは、実行の複数の並行経路を有する。オートマトンは、複数の状態を含む。構文木をオートマトンに変換するために、演算子および構文木内の演算子間の関係性が、状態間の遷移を含む状態に変換される。例では、オートマトンは、FSMエンジン800のハードウェアに部分的に基づいて変換できる。例では、オートマトンの入力記号は、アルファベット、数字0から9、および他のプリンタブル文字を含む。例では、入力記号は、0から255を含めたバイト値によって表される。例では、オートマトンは、グラフのノードが状態のセットに対応する有向グラフとして表すことができる。例では、入力記号α上の状態pから状態qへの遷移、つまりδは、ノードpからノードqへの有向接続によって示される。例では、オートマトンの逆転は、なんらかの記号α上の各遷移p→qが、同じ記号上で逆転されるq→pである新規オートマトンを生じさせる。逆転では、開始状態は最終状態になり、最終状態が開始状態になる。例では、オートマトンによって受け入れられるたとえば、一致される言語は、オートマトンに順次に入力されるときに最終状態に到達するすべての考えられる文字列のセットである。オートマトンによって受け入れられる言語の各文字列は、開始状態から1つまたは複数の最終状態への経路をたどる。ブロック1006で、オートマトンが構築されたのち、オートマトンは、とりわけその複雑度およびサイズを削減するために最適化される。オートマトンは、冗長な状態を組み合わせることによって最適化できる。ブロック1008で、最適化されたオートマトンが、ネットリストに変換される。オートマトンをネットリストに変換すると、オートマトンの各状態はFSMエンジン800上のハードウェア要素たとえば、SME804、805、他の要素824にマッピングされ、ハードウェア要素間の接続が決定される。ブロック1010で、ネットリストは、ネットリストの各ノードに対応するターゲット装置たとえば、SME804、805、特殊目的要素824の特定のハードウェア要素を選択するために格納される。例では、格納すると、FSMエンジン800のための一般的な入力および出力の制約に基づいて、それぞれの特定のハードウェア要素が選択される。ブロック1012で、格納されたネットリストは、選択されたハードウェア要素をともに結合して、ネットリストによって記述される接続を達成するために、プログラマブルスイッチたとえば、ブロック間スイッチ803、ブロック内スイッチ808、および行内スイッチ812のための設定値を決定するために経路が選択される。例では、プログラマブルスイッチのための設定が、選択されたハードウェア要素、およびプログラマブルスイッチのための設定値を接続するために使用されるPSMエンジン800の特定の導線を決定することによって決定される。経路選択は、ブロック1010での格納、ハードウェア要素間の接続のより多くの制限を考慮に入れることがある。したがって、経路選択は、FSMエンジン800に対する導線の実際の制限を考えると、適切な接続を行うために大局的な格納で決定されるハードウェア要素のいくつかの場所を調整してよい。いったんネットリストが格納され、経路選択されると、格納され、経路選択されたネットリストは、FSMエンジン800のプログラミングのための複数のビットに変換できる。この複数のビットは、本明細書で画像と呼ばれている。ブロック1014で、画像はコンパイラによって公表される。画像は、特定のハードウェア要素および/またはFSMエンジン800のプログラマブルスイッチをプログラムするための複数のビットを含む。画像が複数のビットたとえば、0および1を含む実施形態では、画像はバイナリ画像と呼ぶことができる。ビットは、FSMエンジン800にロードされ、プログラムされたFSMエンジン800が、ソースコードによって記述される機能性を有するFSMを実装するように、SME804、805、特殊目的要素824、およびプログラマブルスイッチの状態をプログラムできる。格納ブロック1010および経路選択1012は、FSMエンジン800内での特定の場所にある特定のハードウェア要素を、オートマトンの特定の状態にマッピングできる。したがって、画像内のビットは、特定のハードウェア要素および/またはプログラマブルスイッチをプログラムし、記述される関数複数の場合があるを実装できる。例では、画像は、コンピュータ可読媒体に機械コードを保存することによって公表できる。別の例では、画像は、画像を表示装置上で表示することによって公表できる。さらに別の例では、画像は、FSMエンジン800上に画像をロードするためのプログラミング装置等の別の装置に画像を送ることによって公表できる。さらに別の例では、画像は、並行処理機械たとえば、FSMエンジン800上に画像をロードすることによって公表できる。例では、画像は、画像からのビット値をSME804、805および他のハードウェア要素824に直接的にロードする、もしくは1つまたは複数のレジスタの中に画像をロードし、次いでSME804、805および他のハードウェア要素824にレジスタからのビット値を書き込むかのどちらかによってFSMエンジン800上にロードできる。例では、プログラマブルスイッチたとえば、ブロック間スイッチ803、ブロック内スイッチ808、および行内スイッチ812の状態。例では、FSMエンジン800のハードウェア要素たとえば、SME804、805、他の要素824、プログラマブルスイッチ803、808、812は、プログラミング装置および/またはコンピュータが、1つまたは複数のメモリアドレスに画像を書き込むことによってFSMエンジン800上に画像をロードできるように、メモリマッピングされる。本明細書に説明される方法の例は、少なくとも部分的に機械でまたはコンピュータで実装できる。いくつかの例は、上記の例に説明される方法を実行するように電子機器を構成するために動作可能な命令で符号化されたコンピュータ可読媒体または機械可読媒体を含むことがある。かかる方法の実装は、マイクロコード、アセンブリ言語コード、高水準言語コード等のコードを含むことがある。かかるコードは、多様な方法を実行するためのコンピュータ可読命令を含むことがある。コードは、コンピュータプログラム製品の部分を形成してよい。さらに、コードは、実行中、または他のときに1つまたは複数の揮発性の、または不揮発性のコンピュータ可読媒体で有形で記憶されてよい。これらのコンピュータ可読媒体は、ハードディスク、リムーバブル磁気ディスク、リムーバブル光ディスクたとえば、コンパクトディスクおよびデジタルビデオディスク、磁気カセット、メモリカードまたはメモリスティック、ランダムアクセスメモリRAM、読取専用メモリROM等を含んでよいが、これらに限定されない。図13は、一般に、フォンノイマンアーキテクチャを有するコンピュータ1500の例を示す。本開示の内容を読み、理解すると、当業者は、ソフトウェアプログラムがどのようにしてコンピュータベースのシステムでコンピュータ可読媒体から起動され、ソフトウェアプログラムに定められる関数機能を実行するのかを理解するだろう。当業者は、本明細書に開示される方法を実装し、実行するように設計される1つまたは複数のソフトウェアプログラムを作成するために利用できる多様なプログラミング言語もさらに理解するだろう。プログラムは、Java登録商標言語、C言語、もしくは1つまたは複数の言語等のオブジェクト指向言語を使用するオブジェクト指向フォーマットで構造化できる。代わりに、プログラムは、アセンブリ、C等の手続き言語を使用して手続き指向フォーマットで構造化できる。ソフトウェア構成要素は、リモートプロシージャコールまたは他を含む、アプリケーションプログラムインタフェース、またはプロセス間通信技法等の、当業者にとって周知の多くの機構の内のどれかを使用して通信できる。多様な実施形態の教示は、任意の特定のプログラミング言語または環境に制限されていない。したがって、他の実施形態は実現できる。たとえば、コンピュータ、メモリシステム、磁気ディスクまたは光ディスク、なんらかの他の記憶装置、もしくは任意のタイプの電子機器またはシステム等の製造品は、1台または複数のプロセッサ1502によって実行されるときに上記方法に関して説明されるアクションのいずれかを実行することになる、その上に命令1524たとえば、コンピュータプログラム命令が記憶されるメモリたとえば、電気的な導体、光学的な導体、または電磁的な導体を含む任意のメモリだけではなく、リムーバブル記憶媒体等の等のコンピュータ可読媒体1522に結合される1台または複数のプロセッサ1502を含むことがある。コンピュータ1500は、多くの構成要素に直接的に結合されるプロセッサ1502を有する、および/またはバス1508を使用するコンピュータシステムの形をとることができる。かかる構成要素は、メインメモリ1504、スタティックメモリまたは不揮発性メモリ1506、およびマスストレージ1516を含むことがある。プロセッサ1502に結合される他の構成要素は、ビデオディスプレイ等の出力装置1510、キーボード等の入力装置1512、およびマウス等のカーソル制御装置1514を含むことがある。プロセッサ1502および他の構成部品をネットワーク1526に結合するためのネットワークインタフェース装置1520は、バス1508に結合することもできる。命令1524は、多くの周知の転送プロトコルたとえば、HTTPの内の任意の1つを活用するネットワークインタフェース装置1520を介して、ネットワーク1526上でさらに送信または受信できる。バス1508に結合されるこれらの要素のいずれかは、実現される特定の実施形態に応じて、存在しない、単独で存在する、または複数の数で存在することがある。例では、プロセッサ1502、メモリ1504、1506、または記憶装置1516の内の1つまたは複数が、実行時にコンピュータ1500に本明細書に説明される方法の内の任意の1つまたは複数を実行させることができる命令1524を含むことがある。代替実施形態では、コンピュータ1500は、スタンドアロン装置として動作する、または他の装置に接続するたとえば、ネットワーク化することができる。ネットワーク化された環境では、コンピュータ1500は、サーバ-クライアントネットワーク環境でのサーバ装置またはクライアント装置の資格で、もしくはピアツーピアまたは分散型ネットワーク環境でピアデバイスとして動作できる。コンピュータ1500は、パーソナルコンピュータPC、タブレットPC、セットトップボックスSTB、パーソナルデジタルアシスタントPDA、セルラー電話、ウェブ機器、ネットワークルータ、ネットワークスイッチまたはネットワークブリッジ、もしくはその装置によって講じられるアクションを指定する命令のセット順次またはそれ以外を実行できる任意の装置を含むことがある。さらに、単一のコンピュータ1500だけが示されているが、用語コンピュータは、本明細書に説明される方法論の任意の1つまたは複数を実行するために命令のセットまたは複数のセットを個別にまたは共同で実行する装置の任意の集合体を含むとも解釈されるものとする。コンピュータ1500は、1つまたは複数の通信プロトコルたとえば、ユニバーサルシリアルバスUSB、IEEE1394等を使用して周辺装置と通信するための出力コントローラ1528を含むこともある。出力コントローラ1528は、たとえば、コンピュータ1500に通信で結合されるプログラミング装置1530に画像を提供できる。プログラミング装置1530は、並行処理機械たとえば、並行処理機械100、FSMエンジン800をプログラムするように構成できる。他の例では、プログラミング装置1530は、コンピュータ1500と統合され、バス1508に結合できるか、ネットワークインタフェース装置1520または別の装置を介してコンピュータ1500と通信することができる。コンピュータ可読媒体1524は、単一の媒体として示されているが、コンピュータ可読媒体は、命令1524の1つまたは複数のセットを記憶する、単一の媒体または複数の媒体たとえば、集中データベースまたは分散型データベース、もしくは関連付けられたキャッシュおよびサーバ、ならびにもしくはプロセッサ1502レジスタ、メモリ1504、1506、および記憶装置1516等のいろいろな記憶媒体等を含むと解釈されるべきである。また、用語コンピュータ可読媒体は、コンピュータによる実行のための命令のセットを記憶する、符号化する、または搬送することができる、および本発明の方法論の任意の1つまたは複数をコンピュータによって実行させる、またはかかる命令のセットによって活用される、またはかかる命令のセットと関連付けられるデータ構造を記憶する、符号化する、または搬送することができる任意の媒体を含むとも解釈されるものとする。用語コンピュータ可読媒体は、したがって、ソリッドステートメモリ、光媒体、および磁気媒体等の有形的表現媒体を含むが、これらに限定されないと解釈されるものとする。要約書は、読者が技術的な開示の性質および要旨を確かめることを可能にする要約書を要求する、連邦法施行規則第37巻、第1.72b項に準拠するために提供される。要約書は、それが請求項の範囲または意味を制限する、または解釈するために使用されないという理解で提出される。以下の特許請求の範囲は、発明を実施するための形態にこれにより組み込まれ、各請求項は、それ自体、別個の実施形態として効力がある。