"複数のプログラム可能要素を含むプログラム可能装置であって、前記プログラム可能要素が1つまたは複数の有限状態機械を実装するように構成され、前記複数のプログラム可能要素が、N桁の入力を受信し、かつ前記N桁の入力に応じてM桁の出力を提供するように構成され、前記M桁の出力が全部より少ないプログラム可能要素からの状態情報を含む、プログラム可能装置。前記複数のプログラム可能要素がプログラム可能要素の2つ以上のグループのうちの1つを含む、請求項1に記載のプログラム可能装置。プログラム可能要素の前記1つのグループに結合され、かつ前記N桁の入力を受信するように構成されたN桁の入力インタフェースと、プログラム可能要素の前記1つのグループに結合され、かつ前記M桁の出力を提供するように構成されたM桁の出力インタフェースとをさらに含む、請求項2に記載のプログラム可能装置。プログラム可能要素の前記1つのグループが、プログラム可能要素のブロックを含む、請求項2に記載のプログラム可能装置。プログラム可能要素の前記ブロックが、プログラム可能要素の複数の行を含み、前記行の各々が複数のブロック内スイッチのそれぞれ1つと結合されている、請求項4に記載のプログラム可能装置。前記行の各々内の前記プログラム可能要素が、2つの状態機械要素の複数のグループと別のプログラム可能要素を含む、請求項5に記載のプログラム可能装置。プログラム可能要素の前記1つのグループを、プログラム可能要素の別の1つのグループ、入力ポート、および/または出力ポートと選択的に結合するように構成されたプログラム可能スイッチをさらに含む、請求項2に記載のプログラム可能装置。前記複数のプログラム可能要素および前記複数のプログラム可能スイッチをプログラムするように構成されたプログラムを格納するように構成されたレジスタをさらに含む、請求項7に記載のプログラム可能装置。NがMと等しい、請求項1に記載のプログラム可能装置。MがNの整数倍である、請求項1に記載のプログラム可能装置。前記有限状態機械の同じ1つを実装するために使用された2つ以上の前記プログラム可能要素からの出力を統合するように構成されたOR論理をさらに含む、請求項1に記載のプログラム可能装置。前記プログラム可能要素がN個の状態機械の論理グループを実装するように構成され、前記N個の状態機械の前記出力が前記M桁の出力を提供するように統合される、請求項11に記載のプログラム可能装置。前記論理がORゲートを含む、請求項11に記載のプログラム可能装置。前記M桁の出力に含まれる前記状態情報が圧縮された状態情報を含む、請求項1に記載のプログラム可能装置。前記複数のプログラム可能要素が状態機械要素を含む、請求項1に記載のプログラム可能装置。前記M桁の出力が差分ベクトルを含む、請求項1に記載のプログラム可能装置。前記実装された1つまたは複数の有限状態機械内の各状態が、状態ベクトル内のそれぞれの桁に対応し、かつ、前記差分ベクトルが、前記プログラム可能装置に提供された入力シンボルに応じて変化する前記状態ベクトル内の桁のみを含む、請求項16に記載のプログラム可能装置。前記実装された1つまたは複数の有限状態機械内の各状態が、状態ベクトル内のそれぞれの桁に対応し、かつ、前記M桁の出力が前記状態ベクトル内の前記桁のサブセットのみを含む、請求項1に記載のプログラム可能装置。前記桁の前記サブセットが前記1つまたは複数の有限状態機械内の最終状態に対応する桁を含む、請求項1に記載のプログラム可能装置。前記装置で実装された全ての状態機械が前記N桁の入力を受信する、請求項1に記載のプログラム可能装置。前記複数のプログラム可能要素がプログラム可能要素の2つ以上のグループのうちの1つを含み、前記グループの各々がそれ自身の専用入力を有する、請求項1に記載のプログラム可能装置。前記N桁の入力が半導体ダイの底面上にあり、かつ、前記M桁の出力が半導体ダイの上にある、請求項1に記載のプログラム可能装置。前記複数のプログラム可能要素がプログラム可能要素の2つ以上のグループのうちの1つを含み、かつ、前記プログラム可能装置が状態情報を、前記プログラム可能装置内の前記グループの1つから前記グループの別の1つに提供するように構成されている、請求項1に記載のプログラム可能装置。複数のプログラム可能要素を含む第1の並列マシンであって、前記プログラム可能要素が1つまたは複数の有限状態機械を実装するように構成され、前記複数のプログラム可能要素がN桁の入力を受信し、前記N桁の入力に応じてM桁の出力を提供するように構成され、前記M桁の出力が全部より少ない前記プログラム可能要素からの状態情報を含む、第1の並列マシンと、前記M桁の出力の少なくとも一部を受信および処理するように構成された第2の並列マシンとを備える階層型並列マシン。前記第2の並列マシンが、前記M桁の出力全体を受信および処理するように構成されている、請求項24に記載の階層型並列マシン。前記第1の並列マシンに結合され、前記N桁の入力を提供するように構成された、入力バスと、前記第1の並列マシンと前記第2の並列マシンとの間に結合され、前記M桁の出力の少なくとも一部を前記第2の並列マシンに提供するように構成された、出力バスとをさらに含む、請求項24に記載の階層型並列マシン。前記入力バスおよび出力バスが同じサイズである、請求項26に記載の階層型並列マシン。前記第1および第2の並列マシン内の前記対応するグループが相互接続のそれぞれのグループによって結合されている、請求項27に記載の階層型並列マシン。前記M桁の出力が、前記第2の並列マシン内で実装された各状態機械に提供される、請求項24に記載の階層型並列マシン。前記第2の並列マシンが複数のグループに分類された複数のプログラム可能要素を含み、前記M桁の出力が事前定義した方法に従って前記グループのそれぞれ1つに提供される、請求項24に記載の階層型並列マシン。前記第2の並列マシンが、アドレス情報を前記第2の並列マシンに送信するように構成された複数のプログラム可能要素を含み、前記アドレス情報が、前記第2の並列マシン内の前記グループのいずれに前記M桁の出力が提供されているかを示す、請求項24に記載の階層型並列マシン。前記並列マシンが積み重ねられている、請求項24に記載の階層型並列マシン。前記複数のプログラム可能要素がプログラム可能要素の2つ以上のグループのうちの1つを含み、さらに、各グループに対応する論理を含み、前記グループのそれぞれ1つに対応する前記論理がそのグループ内の2つ以上のプログラム可能要素からの状態情報を統合し、かつ、そのグループからの前記M桁の出力の1つまたは複数の桁がかかる論理の関数である、請求項24に記載の階層型並列マシン。前記M桁の出力が前記プログラム可能要素からの状態情報を圧縮することによって形成される、請求項24に記載の階層型並列マシン。複数のプログラム可能要素であって、前記プログラム可能要素が1つまたは複数の有限状態機械を実装するように構成され、前記複数のプログラム可能要素がN桁の入力を受信し、前記N桁の入力に応じてM桁の出力を提供するように構成され、前記M桁の出力が前記プログラム可能要素の各々からの状態情報を圧縮することによって形成される、複数のプログラム可能要素を備える、プログラム可能装置。NがMと等しい、請求項35に記載のプログラム可能装置。MがNの整数倍である、請求項35に記載のプログラム可能装置。前記有限状態機械の同じ1つを実装するために使用された2つ以上の前記プログラム可能要素からの出力を統合するように構成された論理をさらに含む、請求項35に記載のプログラム可能装置。前記プログラム可能要素がN個の状態機械の論理グループを実装するように構成され、前記N個の状態機械の前記出力が前記M桁の出力を提供するように統合される、請求項38に記載のプログラム可能装置。複数のプログラム可能要素を含む第1の並列マシンであって、前記プログラム可能要素が1つまたは複数の有限状態機械を実装するように構成され、前記複数のプログラム可能要素がN桁の入力を受信し、前記N桁の入力に応じてM桁の出力を提供するように構成され、前記M桁の出力が前記プログラム可能要素の各々からの状態情報を圧縮することによって形成される、第1の並列マシンを備える階層型並列マシン。NがMと等しい、請求項40に記載の階層型並列マシン。MがNの整数倍である、請求項40に記載の階層型並列マシン。並列マシンからの状態情報を別の装置に提供する方法であり、前記並列マシンが複数のプログラム可能要素を含み、前記プログラム可能要素の各々が対応する状態を有するように構成された方法であって、前記並列マシン内の前記プログラム可能要素の各々の前記状態を含む、状態情報を決定することと、前記状態情報を圧縮することと、前記圧縮された状態情報を前記他の装置に提供することとを含む方法。前記状態情報を圧縮することが無損失圧縮アルゴリズムを前記状態情報に適用することを含む、請求項43に記載の方法。前記圧縮された状態情報を前記他の装置に提供することが、前記圧縮された状態情報を別の並列マシンに提供することを含む、請求項43に記載の方法。前記圧縮された状態情報を前記他の装置に提供することが、前記圧縮された状態情報をシステムメモリに提供することを含む、請求項43に記載の方法。前記状態情報を圧縮することが前記並列マシン上で実装された有限状態機械内の最終状態を統合することを含む、請求項43に記載の方法。少なくとも1つのN桁の入力および複数のN桁の出力を有する第1のレベルの並列マシンであって、前記N桁の出力の各々が、前記第1のレベルの並列マシン上で実装されているN個の状態機械のそれぞれのグループに対応する、第1のレベルの並列マシンを備える、階層型並列マシン。前記第1のレベルの並列マシン上で実装された少なくとも1つの前記状態機械が、前記少なくとも1つの状態機械の複数の最終状態に対応する複数のプログラム可能要素を含み、前記複数の最終状態に対応する前記複数のプログラム可能要素の前記出力が、前記N桁の出力のうちの1つの1桁を提供するために共に統合される、請求項48に記載の階層型並列マシン。前記N桁の出力の1つに提供されたデータが、前記第1のレベルの並列マシン上で実装されたN個の状態機械のそれぞれのグループに対する前記最終状態の前記状態をコード化する、請求項48に記載の階層型並列マシン。前記第1のレベルの並列マシンが有限状態機械エンジンを含む、請求項48に記載の階層型並列マシン。前記有限状態機械エンジンがプログラム可能要素のグループの配列を含み、かつ、プログラム可能要素の前記グループの各々が前記N桁の出力のそれぞれ1つに結合されている、請求項51に記載の階層型並列マシン。前記第1のレベルの並列マシンが複数のN桁の入力を有し、かつ、プログラム可能要素の前記グループの各々が前記第1のレベルの並列マシンの前記N桁の入力のそれぞれ1つに結合されている、請求項52に記載の階層型並列マシン。前記第2のレベルの並列マシンが有限状態機械エンジンを含む、請求項48に記載の階層型並列マシン。前記有限状態機械エンジンがプログラム可能要素のグループの配列を含み、かつ、プログラム可能要素の前記グループの各々が前記N桁の入力のそれぞれ1つに結合されている、請求項54に記載の階層型並列マシン。前記第2のレベルの並列マシンが複数のN桁の出力を有し、かつ、プログラム可能要素の前記グループの各々が、前記第2のレベルの並列マシンの前記N桁の出力のそれぞれ1つに結合されている、請求項55に記載の階層型並列マシン。前記第1の並列マシンが第1のダイを含み、かつ前記第2の並列マシンが前記第1のダイで積み重ねられた第2のダイを含む、請求項48に記載の階層型並列マシン。第3の並列マシンおよびバスをさらに含み、前記第3の並列マシンが、前記第1のダイおよび前記第2のダイで積み重ねられた第3のダイを含み、前記第2のダイが前記スタック内の前記第1のダイと前記第3のダイとの間にあり、かつ、前記バスが前記第1の並列マシンと前記第3の並列マシンとの間で状態情報を転送するように構成されている、請求項57に記載の階層型並列マシン。前記バスが複数の相互接続を含む、請求項58に記載の階層型並列マシン。前記相互接続が貫通ビア相互接続を含む、請求項59に記載の階層型並列マシン。前記並列マシンが有限状態機械エンジンを含む、請求項48に記載の階層型並列マシン。前記有限状態機械エンジンがパターン認識プロセッサを含む、請求項61に記載の階層型並列マシン。前記並列マシンがフィールドプログラマブルゲートアレイを含む、請求項48に記載の階層型並列マシン。前記第1のレベルの並列マシンの前記少なくとも1つのN桁の入力が、生データを受信するように構成された、請求項48に記載の階層型並列マシン。前記第2のレベルの並列マシンの前記N桁の入力の各々が、前記第2のレベルの並列マシン上で実装されたN個の状態機械のそれぞれのグループに対応し、前記第2のレベルの並列マシン上で実装されたN個の状態機械の各グループが、前記第1のレベルの並列マシン上で実装された最大N個の状態機械により駆動される、請求項48に記載の階層型並列マシン。少なくとも1つの有限状態機械を実装するように構成された複数のプログラム可能要素を含む並列マシンであって、前記プログラム可能要素の各々の前記状態を含む、状態情報を決定し、前記状態情報を圧縮し、前記圧縮された状態情報を別の装置に提供するように構成された、並列マシン。前記他の装置が第2の並列マシンを含み、前記第2の並列マシンが、前記圧縮された状態情報を受信および処理するように構成された、請求項66に記載の並列マシン。前記状態情報を圧縮するように構成されている前記並列マシンが、前記並列マシン上で実装された有限状態機械の最終状態を統合するように構成されている前記並列マシンを含む、請求項66に記載の並列マシン。前記最終状態を統合するように構成されたブール論理をさらに含む、請求項68に記載の並列マシン。前記状態情報を圧縮するように構成されている前記並列マシンが、差分ベクトルを出力するように構成されている前記並列マシンを含み、前記差分ベクトルが、入力シンボルに応じて変化している状態のみを識別する、請求項66に記載の並列マシン。前記状態情報を圧縮するように構成されている前記並列マシンが、出力ベクトルを出力するように構成されている前記並列マシンを含み、前記出力ベクトルが、前記並列マシン上で実装された有限状態機械内の最終状態に対する状態情報のみを提供する、請求項66に記載の並列マシン。以下の説明および図は、当業者が特定の実施形態を実施できるように十分に説明する。他の実施形態は、構造的、論理的、電気的、プロセス、および他の変更を組み込み得る。いくつかの実施形態の部分および特徴は、他の実施形態のそれらに含まれ得るか、またはそれらと置き換えられ得る。本明細書では、とりわけ、階層型有限状態機械HFSMエンジンなどの階層型並列マシン、および関連する方法を説明する。1つのかかる階層型並列マシン10を図1に示す。各階層型並列マシン10は、2つ以上の有限状態機械FSMエンジン12などの、2つ以上の並列マシンを含む。各有限状態機械エンジン12は、入力バス16上のデータ例えば、データストリームを受信して反応し、受信したデータに応じて出力を提供例えば、生成する装置である。各有限状態機械エンジン12は、任意に複雑であり得る。図1に示すような、一実施形態では、有限状態機械エンジン12は、カスケード接続されて、少なくとも1つの有限状態機械エンジン12の出力例えば、状態が、全体または部分的に、カスケード接続の下流で1つまたは複数の有限状態機械エンジン12に提供される例えば、渡される。一例では、カスケード接続内の最後の有限状態機械エンジンが結果を生成し、それを、結果バス20などの、出力バス上に提供できる。一実施形態では、有限状態機械エンジン12の各々は、例えば、プログラム例えば、イメージを有限状態機械エンジン12上にプログラムバス14を用いてロード例えば、格納するなどにより、それぞれのプログラムバス14を介してプログラムできる。いくつかの実施形態では、HPRP10でデータを処理するのに必要な時間を削減することが重要であり得る。HPRP10でデータを処理する時間は、少なくとも一部は、有限状態機械エンジン12の間に渡されるデータ例えば、状態ベクトルなどの状態情報の量によって制限され得る。いくつかのかかる実施形態では、有限状態機械エンジン12は、階層構成で接続され、有限状態機械エンジン12の間のインタフェースがリアルタイム操作に近づくように設計できる。とりわけ、本明細書では、かかる検討事項について説明し、FSMエンジン12の階層セットなど、並列マシンの階層セットを物理的に実装するための一般的な方法を提言する。一実施形態では、図2に示すように、階層型パターン認識プロセッサHPRP30が実装される。パターン認識プロセッサは、データ例えば、シンボルのシーケンスを受信し、対象のシーケンスが認識例えば、検出されると、ある種の通知を提供する出力を生成する装置である。単純な場合には、入力シンボルの単一ストリームが、入力バス36上のHPRP30に提供される。HPRP30は、プログラムバス34を介して入力シンボルの特定のシーケンスまたは複数を検出するようにプログラムされる。結果検出されたシーケンスが生成され、結果バス40上に提供できる。HPRP30の論理インタフェースプログラムインタフェース34およびデータ入力36を図2に示す。図示の実施形態では、HPRP30は、パターン認識プロセッサPRP32としてプログラムされた、2つ以上の有限状態機械エンジンを含み得る。各PRP32は、それぞれのデータストリーム入力バス36または入力バス42のいずれかの上のデータストリームなど内のシンボルのシーケンスを検出できる装置である。例えば、各PRP32は、それぞれのデータストリーム内のそれぞれのパターンを照合することができる。図示した実施形態では、第2のPRP32は、その入力として、第1のPRP32の出力を受信し出力バス38上に提供されるように、結果バス40上に結果を生成する。一実施形態では、PRP32の各々は、それぞれのプログラムバス34を介してプログラムできる。PRP32の例を、図15~図18内容検査プロセッサとも呼ばれるに関連して、以下で説明する。ある例では、HPRP30は、有限状態機械FSMエンジンあるいはフィールドプログラマブルゲートアレイFPGA、あるいはそれらの変形、または並列マシンの別の実施形態を用いて実装される。階層型並列マシン10および30の2レベル例えば、段階階層は、2つの独立したプログラムが同じデータストリームに基づいて動作できるようにする。2レベル階層は、異なる領域としてモデル化される人間の脳内の視覚認識と類似し得る。このモデルでは、領域は、有効に異なるパターン認識プロセッサであり、各々が、異なるプログラム例えば、シグネチャを使用しているが、類似のコンピュータ機能データストリーム内のシンボルのシーケンスの検出を実行している。複数の並列マシンを連結することにより、データストリームに関するより深い知識が取得され得る。階層の第1のレベル第1のFSMエンジン12または第1のPRP32によって実装されたものなどは、例えば、生データストリームの処理を直接実行できる。すなわち、第1のFSM12または第1のPRP32は、出力データストリーム例えば、生データストリーム内の一致の表示を入力バス16または入力バス36上の生データストリームに応じて、それぞれ生成できる。図1に示すように、第2のレベル第2のFSMエンジン12または第2のPRP32によって実装されたものなどは、第1のレベルからの出力データストリームを処理する。例えば、第2のFSMエンジン12は、第1のFSMエンジン12からの出力バス18上に提供された出力データストリームを受信し、第2のFSMエンジン12は、第1のFSMエンジン12の出力データストリームを処理する。その結果、第2のFSMエンジン12は、入力として生データストリームを受信するのではなく、第1のFSMエンジン12によって生成された出力データストリームを受信する。第2のFSMエンジン12は、第1のFSMエンジン12によって生成された出力データストリーム内のシーケンスを検出するために、第1のイメージでプログラムできる。第2のFSMエンジン12は、第2のイメージを受信するために、別個のプログラミングインタフェース例えば、プログラムバス14によってに結合され得る。一例では、HPRP30は、パターン認識機能を実装するようにプログラムできる。例えば、HPRP30によって実装されたFSMは、HPRP30に入力されるデータストリーム内で1つまたは複数のデータシーケンス例えば、シグネチャを認識するように構成できる。データストリーム内で対象のシーケンスが第1のPRP32によって認識例えば、合致される場合、その認識を示す出力データストリームが出力バス38上に提供できる。一例では、パターン認識は、例えば、ネットワークデータ内のマルウェアまたは他の情報を識別するために、一連のシンボル例えば、ASCII文字を認識することができる。この出力データストリーム例えば、出力ワード、検出状態などは、図2に示すように、第1のPRP32の出力バス38から別のPRP32の入力バス42に供給できる。2つのPRP32の連続したこの接続は、過去のイベントに関する情報を圧縮したワードで第1のPRP32から第2のPRP32に提供する手段を提供する。情報のこの提供は、有効に、第1のPRP32によって認識された複雑なイベント例えば、データストリームのシーケンスの要約であり得る。前述のとおり、いくつかの実施形態では、PRPのレベル間で出力を渡すために必要な時間を削減することが重要であり得る。いくつかのかかる実施形態では、PRP32の間のインタフェースが、HPRP30の各レベルのリアルタイム操作をサポートするように設計できる。本明細書では、かかる検討事項について説明し、例えば、HPRP30を物理的に実装するための一般的な方法を提言する。本明細書では、とりわけ、階層構造を用いてデータを処理するための方法および装置について説明する。階層構造は、複数のレベル例えば、層を含むことができ、各レベルはデータを処理例えば、分析して、例えば、分析に基づいて出力を提供する。階層構造内の低いレベルからの出力が、高いレベルへの入力として提供できる。このようにして、より低いレベルがより基本的/根本的な分析を実行でき、他方、より高いレベルが1つまたは複数の低いレベルからの出力を用いて、より複雑な分析を実行できる。一例では、階層構造はパターン認識を実行する。一例では、階層構造は、カスケード方式で連結された複数の有限状態機械エンジンで実装される。例えば、第1および第2の有限状態機械エンジンは、第2の有限状態機械エンジンが、入力として、第1の有限状態機械エンジンからの出力を受信するように、連続して結合できる。この階層構造では、任意の数の有限状態機械エンジンが連結できる。階層構造を用いたデータ処理に加えて、本明細書では、別の有限状態機械エンジンによって実行される処理を変更するために、1つの有限状態機械エンジンからの出力を使用するための方法および装置についても説明する。前述した有限状態機械エンジンの例を用いると、より高いレベルの処理を実装する第2の有限状態機械エンジンが、より低いレベルの処理を実装する第1の有限状態機械エンジンにフィードバック情報を提供できる。フィードバック情報は、生物学的な脳における学習と似た方法で処理を変更例えば、更新するために、第1の有限状態機械エンジンによって使用できる。図3は、有限状態機械エンジンまたはパターン認識プロセッサの実装に使用できる並列マシン100の例を示す。並列マシン100は、入力データを受信し、入力データに基づいて出力を提供できる。並列マシン100は、入力データを受信するためのデータ入力ポート110および出力を別の装置に提供するための出力ポート114を含むことができる。データ入力ポート110は、データを並列マシン100に入力するためのインタフェースを提供する。並列マシン100は、汎用要素102および専用specialpurpose要素112を含む複数のプログラム可能要素を含む。汎用要素102は、1つまたは複数の入力104および1つまたは複数の出力106を含むことができる。汎用要素102は、複数の状態のうちの1つにプログラムできる。汎用要素102の状態は、汎用要素102が所与の入力に基づいてどの出力を提供するかを決定する。すなわち、汎用要素102の状態は、プログラム可能要素が所与の入力に対してどのように反応例えば、応答するかを決定する。データ入力ポート110に対するデータ入力は、複数の汎用要素102に提供でき、汎用要素102にそれに対して処置を講じさせる。汎用要素102の例には、例えば、以下で詳述する、状態機械要素SME、カウンタ、および/または、他のプログラム可能要素の中で特に、構成可能論理ブロックを含むことができる。一例では、SMEは、所与の入力がデータ入力ポート110で受信されると、ある出力例えば、高または1信号を提供するようにプログラム例えば、設定できる。所与の入力以外の入力がデータ入力ポート110で受信されると、SMEは、異なる出力例えば、低または0信号を提供できる。一例では、構成可能論理ブロックは、データ入力ポート110で受信した入力に基づいて、ブール論理関数例えば、AND、OR、NORなどを実行するように設定できる。カウンタの一例については、本明細書で後述する。専用要素112には、メモリ例えば、RAM、論理ゲート、カウンタ、ルックアップテーブル、フィールドプログラマブルゲートアレイFPGA、および他のハードウェア要素を含むことができる。専用要素112は、汎用要素102と情報をやりとりして、特殊目的機能を実行できる。並列マシン100は、プログラム例えば、イメージを並列マシン100上にロードするためのプログラミングインタフェース111も含むことができる。イメージは、汎用要素102の状態をプログラム例えば、設定できる。すなわち、イメージは、汎用要素102を、所与の入力に対してある方法で反応するように構成できる。例えば、汎用要素102は、データ入力ポート110で文字aが受信されると、高信号を出力するように設定できる。いくつかの例では、並列マシン100は、汎用要素102の動作のタイミングを制御するためにクロック信号を使用できる。いくつかの実施形態では、データ入力ポート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を設定することによって制御できる。図3では、所与の要素とプログラム可能スイッチ108との間に、ある数の導体例えば、ワイヤーが示されているが、他の例では、異なる数の導体が使用できることが理解されるべきである。また、図3では、個々にプログラム可能スイッチ108に結合された各汎用要素102が示されているが、他の例では、複数の汎用要素102がグループ例えば、図15に示すような、ブロック802としてプログラム可能スイッチ108に結合できる。一例では、データ入力ポート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および専用要素112の状態に対応する出力ベクトルを含むことができる。並列マシン100の使用例には、パターン認識例えば、音声認識、画像認識など、信号処理、画像処理、コンピュータビジョン、暗号化などを含む。ある例では、並列マシン100は、有限状態機械FSMエンジン、フィールドプログラマブルゲートアレイFPGA、およびそれらの変形を含むことができる。さらに、並列マシン100は、コンピュータ、ポケットベル、携帯電話、電子手帳、携帯音楽プレーヤ、ネットワーク装置例えば、ルーター、ファイアウォール、スイッチ、またはそれらの任意の組合わせ、制御回路、カメラなどの、もっと大きな装置内のコンポーネントであり得る。並列マシン例えば、FSMエンジン、PRP、または同類のものは、状態機械を実装できる。状態機械は、有向グラフとして表すことができる。図4は、ワードDOG内で見つかる文字のシーケンスを表す単純な状態機械図150を示す。状態152は、状態機械図150に対する入力状態である。状態154は、中間状態である。図4では、最終状態156時々、終端状態とも呼ばれるは、G状態の周囲の点線の境界によって識別される。一般的な場合には、最終状態に達すると、何らかのメカニズムを通して一致条件が示される。この一致条件は、並列マシン100例えば、FSMエンジン12、PRP32からの明示的な信号によって表され得るか、または2進ワードとしてコード化され、メモリレジスタに格納され得る。状態機械のサイズには理論的限界がない。一般的な場合、PRPまたはFSMエンジンは、PRPまたはFSMエンジンによって検出できる各特定シーケンスのシンボルに対して別個の状態機械を実装し得る。所望であれば、重複共通パスを除外するために、例えば、状態機械を組み合わせてもっと大きな実装にするか、または特定の状態機械実装のサイズを最小化するなど、状態機械に対して最適化を実行することができる。かかる最適化は、状態機械実装の統合サイズを削減し、従って、例えば、状態機械エンジンが状態機械を実装する。この最適化が完了すると、単一の大規模な状態機械が実装され得る。図5は、大規模な状態機械図200を示す。一般的な場合、状態機械の実装は、前方および後方の両方で、複雑な結合を有し得る。図5に示す例では、1つの入力状態202が、2つの中間状態204を供給する。かかる状態機械では、多数の最終状態208および多数の他の中間状態204があり得る。状態機械内の各状態は、その状態がアクティブか否かを示す瞬間状態を有する。アクティブな状態のみが入力シンボルに反応することができる。一実施形態では、入力シンボルが入力バス36上で受信されると、状態機械内の各アクティブな状態は、アクティブ化信号を生成すべきかを決定するためにそのシンボルを分析する。このアクティブ化信号は、シーケンス内の次の状態をアクティブにするために使用される。例えば、文字bを指定する第1の状態204は、第1のノード204がアクティブであり、文字bが入力データとして受信される場合、入力文字b上で、遷移206によって第1の状態204に結合された、第2の状態204をアクティブにする。略図200では、入力状態202が最初にアクティブにでき、入力データが入力ノード202からの遷移206に一致する場合、下流の状態204をアクティブにできる。略図200全体に渡って、状態204、208は、入力データが受信されると、このようにアクティブにできる。アクティブにされた最終状態208は、入力データによる対象のシーケンスの一致に対応する。その結果、最終状態208のアクティブ化は、対象のシーケンスが入力データで受信されていることを示す。パターン認識機能を実装する有限状態機械エンジン100のコンテキストでは、最終状態208のアクティブ化は、対象の特定パターンが入力データ上で検出されていることを示すことができる。一例では、各中間状態204および最終状態208は、有限状態機械エンジン100内の汎用要素102に対応できる。各遷移206は、汎用要素102間の接続に対応できる。従って、別の中間状態204または最終状態208に遷移する例えば、それらに接続している遷移206を有する中間状態204は、別の汎用要素102に結合できる汎用要素102に対応する。いくつかの特別な場合には、開始状態202は、必ずしも対応する汎用要素102を有し得ない。有限状態機械エンジン100がFSMを実装するようにプログラムされている場合、汎用要素102の各々は、アクティブまたは非アクティブ状態のいずれかであり得る。非アクティブな汎用要素102は、入力インタフェース110においてデータストリームに反応しない。アクティブな汎用要素102は、入力インタフェース110においてデータストリームに反応することができ、入力データストリームが汎用要素102の設定と一致する場合、下流の汎用要素102をアクティブ化できる。汎用要素102が最終状態208に対応する場合、汎用要素102は、外部装置に対して一致の表示を提供するために、出力ポート114に結合でき、その外部装置は、いくつかの場合には、別の有限状態機械エンジン100であり得る。プログラミングインタフェース111を介して有限状態機械エンジン100上にロードされたイメージが、所望のFSMが入力インタフェース110でのデータストリームに対する応答に基づき、下流の状態のアクティブ化を通して実装できるように、汎用要素102および汎用要素102間の接続を構成できる。一例では、汎用要素102は、単一のデータサイクル例えば、単一の文字、文字セット、単一のクロックサイクルの間アクティブのままであり、次いで、上流の汎用要素102によって再アクティブ化されない限り非アクティブへ切り替えられる。最終状態208は、過去のイベントの圧縮した履歴を格納すると考えることができる。例えば、最終状態208をアクティブ化するために必要な入力データの1つまたは複数のシーケンスは、その最終状態208のアクティブ化によって表すことができる。一例では、最終状態208によって提供された出力は2進であり、すなわち、出力は、対応する対象のシーケンスが一致しているか否かを示す。FSM内にける最終状態208の中間状態204に対する比は、極めて小さい可能性がある。言い換えれば、FSM内には高い複雑性があり得るが、FSMの出力は、比較すると小さい可能性がある。FSMエンジンが単一の結合最適化した状態機械を実装するか、または多数の独立した状態機械を実装するかにかかわらず、状態ベクトルの概念が存在する。状態ベクトルは、実装した状態機械内の個々の状態と、ベクトル内の個々の桁例えば、ビット位置との間に1対1対応を有する一次元ベクトルである。すなわち、状態機械内の各状態は、状態ベクトル内の桁に対応する。図4の場合、状態ベクトルは3ビット幅1ビットが、状態152、154、および156の各々の状態を示すである。図5の場合、状態ベクトルは74ビット幅である。状態機械は、任意に複雑であり得、それ故、理論上は、機械の全体サイズに関する制限がない。その結果として、状態ベクトルは無限に長い可能性がある。しかし、並列マシンで実際の状態機械を実装するためには、通常、状態機械のサイズに何らかの有限制限が設けられる。この制限は厳密には定義されず、状態機械の実装に使用される並列マシンの特性に基づいて決定できる。別のHFSM400を図6に示す。図6に示すHFSM400では、3つの有限状態機械エンジン402がそれらそれぞれの状態に関連する情報を、それらそれぞれ全ての状態ベクトル桁の全部または一部を使用して、1つの有限状態機械エンジン404に提供する。示す例では、各状態機械エンジン402、404は、そのそれぞれのプログラミングインタフェースPROGを介してプログラムされる。他の実施形態では、FSMエンジンの各々からのデータがFSMエンジン404をプログラムするために使用される。いくつかのかかる実施形態では、FSMエンジン404は、FSMエンジン402から受信した状態情報に適合するように設計される。もっと複雑なHFSM500を図7に示す。図7のHFSM500では、複数のFSMエンジン502、504、506、508が一緒に接続されて、FSMエンジン502がバス510を介してFSMエンジン504に状態情報を提供例えば、供給し、FSMエンジン504がバス512を介してFSMエンジン506に状態情報を供給し、そして、FSMエンジン506がバス514を介してFSMエンジン508に状態情報を供給する。複数のFSMレベル502~508のこの接続では、階層の各レベルが異なる状態機械の実装を可能にする。いくつかのHFSM例では、階層の各レベルは、異なるタイプのパターンを感知できる。これらのHFSM例では、HFSM500にあるように、階層レベルのこの分離により、HFSMが、より高レベルの認識を達成するために、階層の様々なレベルを通過する低レベル認識を実装できるようにする。一例では、結果が、例えば、特定パターン例えば、フレーズの識別など、HFSM500の結果バス516上に提供される。他の例では、結果はFSMエンジン502、504、506、および508の1つまたは複数からの状態ビットの組合わせである。図7に示すように、個々のFSMエンジンを階層的な方法で接続するための1つのアプローチは、1つのFSMエンジンの出力を階層内で次に高いレベルのFSMエンジンの入力に接続することである。HFSM500は、1つのレベルからの状態情報が階層内の任意の他のレベルに提供例えば、前方または後方へ供給されるように実装され得ることを理解すべきである。例えば、FSMエンジン502からの状態情報は、FSMエンジン506に送信され得、他方、FSMエンジン508からの状態情報は、FSMエンジン502にフィードバックされ得る。大まかに言えば、1つまたは複数のFSMエンジンからの状態情報が、必要であると考えられるどんな構成であっても、1つまたは複数例えば、全部の他のFSMエンジンに提供できる。図7に示す例は、書かれた言語の視覚的識別に対応する。処理が階層の高いレベルに進むにつれて、データストリームの蓄積された知識がそれに応じて増大する。例示した実施形態では、各レベルのFSMエンジンFSMエンジン502、504、506および508が、階層的認識機能を達成するために、カスケード接続されている。階層の各連続したレベルは、前のレベルの出力に適用される新しい規則パターンシグネチャを実装できる。このようにして、非常に詳細なオブジェクトが、ごく根本的な基本情報の検出に基づいて識別できる。例えば、レベル1例えば、第1のFSMエンジン502への生データ入力ストリームは、イメージに対するピクセル情報例えば、所与のビットが黒/白またはオン/オフを含むことができる。FSMエンジン502は、ビットで形成された基本パターンを認識例えば、識別するようにプログラムできる。一例では、FSMエンジン502は、隣接したビットのグループが、縦線、横線、円弧などを形成する場合を識別するように構成される。これらのパターンの各々は、FSMエンジン502からの別個の出力ビットまたは信号によって識別できる。例えば、FSMエンジン502が、少なくとも3ビットの縦線を認識すると、高信号例えば、論理的1が、FSMエンジン504への出力ワードの第1ビット上に送信できる。FSMエンジン502が、少なくとも3ビットの横線を認識すると、高信号が、FSMエンジン504への出力ワードの第2ビット上に送信できる。FSMエンジン504は、その一方で、FSMエンジン502からの出力510によって形成されたパターンを識別するようにプログラムできる。例えば、FSMエンジン504は、FSMエンジン502によって識別された基本パターン例えば、線、円弧などの組合わせによって形成されたパターンを識別するようにプログラムできる。FSMエンジン504は、例えば、横線と縦線が交差して文字tを形成している場合を識別するようにプログラムできる。前述したように、FSMエンジン504を用いて実装されたHFSM500は、FSMエンジン502からの出力に反応する。従って、基本パターンの組合わせは、FSMエンジン502からの出力ビット内のパターンを識別することによって識別される。FSMエンジン504からの出力512は、次いで、FSMエンジン506への入力であり、それは、FSMエンジン504によって識別された文字の組合わせからワードを識別できる。第4のレベルFSMエンジン508は、次いで、FSMエンジン506によって識別されたワードによって形成されたフレーズを識別できる。それに応じて、より低レベルの出力内のパターンを識別するように高レベルがプログラムできる。その結果、より高レベル内で識別されたパターンを構成するコンポーネントを識別するように低レベルがプログラムできる低レベルへのフィードバック。文字の視覚的識別が一例として使用される。しかし、本明細書で説明する階層的方法およびシステムは、他のデータに適用できる。例えば、音声に対応するデータの階層的処理は、レベル1において音素の組合わせから音節を、およびレベル2において音節の組合わせからワードを識別できる。他の例では、階層的処理は、自身を階層的方法で構築する機械データに適用できる。HPRPまたは、HFSM500などのHFSMを実装する際に、遭遇する可能性のある1つの問題は、入力データと出力データとの間の非対称関係である。この非対称は、実装されている状態機械が十分に大規模になると、悪化する。処理される各入力シンボルに対して、FSMエンジンの状態ベクトルが、入力シンボルに応答して変わり得る。一実施形態では、各FSMは、例えば、最大で2の16乗64Kの状態を含む。各状態が状態ベクトル内の対応する桁を有する場合、状態ベクトルは64Kビット長である。その長さのベクトルをFSMエンジン間で渡すのは困難であり得る。入力データのサイズと出力データのサイズとの間でこの非対称を削減する方法について、次で説明する。一実施形態では、データは、バス上のFSMエンジン間で送信される。Nビット幅のバスは、64Kb状態ベクトルを64Kb/Nサイクルで渡すことができる。他の実施形態では、状態ベクトルは、入力シンボルに応答して変わるベクトル内の数字のみが他のFSMエンジンに伝搬するように、圧縮される。例えば、各バスサイクルは、以前のシンボルサイクルで変わった状態ベクトル内の数字の位置を含み得る。この場合、出力は差分ベクトルと呼ぶことができる。さらに別の実施形態では、各FSMエンジンが状態ベクトルから数字のサブセットのみを他のFSMエンジンに送信するように設計される。かかる一実施形態では、各FSMエンジンは、他のFSMエンジンに渡された状態情報のみが最終状態の情報であるようにプログラムされる。一般的な場合、最終状態の数は、状態の総数よりも少ない。PRP32における最終状態の全体の状態に対する比は、例えば、PRPで実装される状態機械によって決まる。比率は、例えば、高い1:5か、またはかなり低い1:10,000可能性がある。最終状態の全体の状態に対する比が1:10であり、かつ状態ベクトルが64Kbである実施例では、これは、出力ベクトルが64Kb/10つまり6,554ビットであることを意味する。この例では、PRP8ビットシンボルのすべての入力サイクルが、対応する6,544ビットの出力ベクトルを生成するであろう。例を進めるため、ASCII文字セットが入力シンボル言語である例を使用する。この場合、各入力シンボルは、8ビットの2進ワードによって表される。代替実施形態では、各入力シンボルがNビットの2進ワードであるなど、他のシンボルが使用できる。例えば、一実施形態では、図2に示すような、HPRP30内の第2のレベルのPRP32に送信された出力ベクトルは、第1のレベルのPRP32の最終状態のみを表し得る。別の例では、図7に示すような、HFSM500では、FSMエンジン504は、その最終状態を表す出力ベクトルを生成し、その出力ベクトルを出力バス514上のFSMエンジン506に送信できる。かかる一例では、出力バス514は、8ビット幅のバスである。前の例から引用した8:6,554の比を使用すると、6,554ビットの出力ベクトルを提供する転送するために必要なサイクル数は、6,554/8つまり820サイクルであろう。すなわち、階層の各連続したレベルは、前のレベルからの出力ワードを処理するために、820入力サイクルを必要とするであろう。この効果は、階層に直線的に波及し、そのため、各連続した状態は、その入力ワードを解決するために820入力サイクルを必要とする。この場合、所与の比率では、PRPの6レベル階層は、入力シンボルが、最高レベルで結果が生成されるまで、波及できるようにするため、4,1005×820入力サイクルを必要とするであろう。これらの数は、例として役立つだけである。最終状態の全体の状態に対する比が増加すると、波及時間が増加する。同様に、階層のレベル数が増加すると、波及時間が、各連続したレベルに対して直線的に増加する。上で使用した例に基づき、HFSMまたはHPRPが結果を生じるために、数桁分の入力サイクルに対して遅延があり得る。このタイプの遅延は、リアルタイムアプリケーションにおいて許容できない。前述したように、例えば、バスのサイズを増やすことにより、状態情報の転送に必要なサイクル数を削減できる。状態情報の転送に必要な時間を削減するために、バスサイクル時間も削減できる。さらに、前述したように、最後のシンボルの結果として変わった状態ベクトルの数字のみを識別する差分ベクトルを送信できる。他の無損失圧縮メカニズムも同様に使用できる。入力と出力との間に1:1関係を実装するなど、この遅延を減らすための他の方法について、次で説明する。HFSM500などのHFSMにおいて、入力と出力との間に1:1関係を得るための1つの方法は、サイズ幅の等しい入力バス518および出力バス510を作成することである。出力バス510の幅は、HFSM500自体によって決定できる。例えば、出力バス510のサイズは、状態機械エンジン502内の最終状態の数によって決定され得る。一般的に言えば、FSMエンジンは、多数の異なるパターンを一度に認識するようにプログラムされる。これらパターンの各々は、個々の状態機械として実装され得る。このようにして、FSMエンジンは、全て並行して実行する、状態機械のセットを実装し得る。図8は、単一のFSMエンジン内で全て並行して実行する、状態機械532のグループ530の例を示す。図8では、8つの状態機械532が示されている。実際には、FSMエンジンは、何千もの別個の状態機械を実装し得る。ステップ1:状態機械出力最終状態の統合図9に示すように、各個々の状態機械532は、1つまたは複数の最終状態208を有し得る。いくつかの最終状態208があり得るが、特定の状態機械532のいずれの最終状態も同じか、または関連した意味を有する。これを言うもう1つの方法は、状態機械のいずれかの最終状態208に達する場合、状態機械532は一致を有すると考えられる。有効に、これは、単一の状態機械532の最終状態208が、図9に示すような単一の出力542を提供するために、最終状態に対応するプログラム可能要素の出力を連結するためにORゲート540を使用することなどにより、統合され得る例えば、共にORされることを意味する。図9に示す例では、状態機械532は、3つの最終状態208を共にORする。理解され得るように、最終状態208を統合するために、他の論理が使用できる。一例では、各状態機械532の最終状態208が統合され例えば、ORされて、結果がN個の状態機械532の論理グループに分類例えば、収集され、ここで、Nは、それぞれの入力シンボル言語内の桁数に等しい。第1レベルの入力シンボル言語が8ビット入力ワードを含む例では、8つの個々の状態機械出力542が、階層の次のレベルに提供される入力シンボル546の1つを提供するために、統合され得る。図7では、例えば、階層の第1レベルのみが、標準語ASCIIまたはその他と相関する入力シンボルを受信する。その例では、次いで、FSMエンジン502が出力バス510上のFSMエンジン504に提供される8ビットの出力ベクトルを生成し得る。階層の次のレベルが、前のレベルによって決定される意味を有する入力シンボルを受信する。8のセットにおけるように、状態機械がグループ化されると、入力および出力ベクトルを正規化する第1レベルが完了している。本開示で使用する例からの数を使用すると、820の最終状態が103の8ビットワードで表すことができる。これらの8ビットワードの各々が、8つの個々の状態機械532に対して最終状態の状況をコード化する。この8ビットの出力ベクトルでコード化された最終状態の総数は、8よりもはるかに多いことを心に留めておかれたい。これは、同じ状態機械532内で最終状態208に関して実行されたORする関数が、9以上の状態を一緒にORし得るからである。一実施形態では、各FSMエンジンは、Nビット幅の入力ポートおよびNビット幅の出力ポートを含む。一実施形態では、各レベルからの状態情報例えば、状態ベクトルの全部もしくは一部、または異なるベクトルなど、出力ベクトルの形式では、Nビットバスを経由して次のFSMエンジンに配信される。例えば、FSMエンジン502は、状態情報を、Nビットの出力バス510を用いて、FSMエンジン504に配信する。一実施形態では、同じNビットの出力ベクトルが、FSMエンジン504内の各状態機械に提供例えば、配信される。別の実施形態では、FSMエンジン504内のプログラム可能要素がグループ例えば、ブロックに分類され、FSMエンジン502の出力ポートがNビットワードのシーケンスをFSMエンジン504に書き込み、そのワードのシーケンスがFSMエンジン504内の状態機械要素のブロックに事前定義した方法連続してなどで配信される。かかるアプローチは、追加の状態情報をFSMエンジン504に配信できるようにするが、完全な状態情報を転送するための追加のバスサイクルを必要とする。一実施形態では、プログラム可能要素の1つのグループに対する状態情報が、FSMエンジンの表示およびFSMエンジン内のグループのアドレスを含むアドレス情報を送信することにより、別のFSMエンジン内のプログラム可能要素のグループに送信される。その情報は、例えば、図7のバス510上に配信され得る。ステップ2:PRP上の入力バスの数の拡大FSM12またはPRP32の一実施態様は、入力シンボルを、PRP内で実装された全ての状態機械532に一斉送信する単一のストリーム入力を有する。しかし、FSM12およびPRP32の定義は、2つ以上のストリーム入力それぞれ、16および36を実装するように拡張され得る。前述の例では、独立したストリーム入力の総数は103に等しい。完全に実装するため、例えば、HPRPは、次いで、各PRP32に対して、103の8ビット入力または820ビットの入力バスを必要とする。一実施形態では、FSM12またはPRP32は、状態機械要素SMEなど、プログラム可能要素の配列560上で実装される。一例では、各SMEは、同種の二次元配列560内にある。この配列560は、各領域がそれ自身の専用ストリーム入力それぞれ、16および36を有する、個々の領域に細分され得る。図11は、SME要素のかかる二次元配列560を示す。図11は、SMEグループ562の配列560に細分され、SMEの各グループ562は、例えば、有限状態機械エンジン800内のブロック802に対応し得る。全体の配列560は、例えば、16×16のSMEグループ全部で256グループを含み、各グループ562は2つのSMEGOTの128グループを含む例えば、各グループ562は、図16に示す行806など、16行のGOTを含む。いくつかの実施形態では、GOTの各行は8つのGOT、追加のプログラム可能要素例えば、ブール論理またはカウンタを含み、2つの出力を出力バス18、38に提供できる。利用可能な全ての出力がFSM12およびPRP32にわたって使用される場合、かかる配列は、例えば、次のレベルPRP32まで進めるために、最大で8192ビットを有し得る。HFSM500が図7に示すように構築される場合、FSMエンジン502および504などの、2つの異なる半導体素子内のSMEグループ562の二次元配列は、一緒に接続され得る。2つの半導体素子を一緒に接続する様々な手段がある。入出力カウントが十分に高くなる場合、例えば、ダイ間相互接続が利用され得る。図12に示すような、一実施態様例では、HPRP570内の256個のSMEグループ562のうちの各1つが、ダイの底面上の8ビットインタフェース例えば、入力バス36、42およびダイの上の8ビットインタフェース例えば、出力バス38、40を持ち得る。これらのインタフェースが事前定義した位置に配置されると、PRP582の1レベルPRP1を、低いレベルのPRPPRP0の上に直接、積み重ねることができ、入力および出力インタフェースが自然に位置合わせされ、相互接続574などの相互接続例えば、貫通シリコンビアを使用して接続される。この位置合わせは、列の各レベルが同じダイ上に含まれるSMEのグループを表す、SME列入力パス572、出力パス578、ならびに相互接続574および576によって定義されるの概念を有効に作成する。前述した数の例を継続して使用すると、各PRPレベル580、582および584上で、SMEグループ562は、前のレベル上で実装された最大8つの状態機械によって進められ得る。前のレベルからの8つの状態機械は、SMEグループ562によって課される制限まで任意に複雑であり得る。図12は、SME列のうちの1つを強調表示した、3レベルのHPRP側面図の例を示す。各レベルでは、SMEのグループ化により、そのレベル例えば、コード化した8ビットワードから次に高いレベルへ状態情報を提供する。全体としては、このように構成された場合、HPRPは、PRP階層の各レベルに対して、1つの入力クロックサイクルのみの遅延で、実質的に瞬間的な結果を提供できる。入力および出力ワードの非対称性によってもたらされる問題が解決され、全体の階層は、ストリーム入力572と同期して動作し得る。ある実施形態では、1つのFSMエンジン12からの状態情報が、2つ以上の他のFSMエンジン12に送信される。かかる実施形態を図6に示す。かかる実施形態を、例えば、図12に示すHPRP570を参照して説明すると、PRP580からの状態情報は、PRP584に送信できる。かかる一実施形態では、相互接続576および574は、状態情報を列内の任意のブロックに伝送するバスを形成する。例えば、相互接続574および576は、1つまたは複数の貫通ビア相互接続を含み得、状態情報を非隣接のPRPに渡すために、各列内に提供できる。かかる一実施形態では、スタック内の各PRPが貫通ビアに接続され、そこから情報を受信する。別の実施形態では、PRPの入力が、製造プロセス中に随時、貫通ビアに選択的に接続される。他の実施形態では、SMEの1つのグループからの状態情報が、同じPRP32内の隣接するブロックに、そして、それらのブロックを通して他のPRP32例えば、同じブロック列内のに配信される。一実施形態では、1つもしくは複数のPRP32からの状態情報、またはその状態情報から引き出された情報が、階層内の他のPRP32を再プログラムするために使用される。図13は、階層の部分を再プログラムするためにフィードバックを使用する4レベル階層の例を示す。一般に、所与のPRP32例えば、第1の有限状態機械エンジン602は、高いか、もしくは低いレベルの有限状態機械エンジンからの出力に基づいて、またはそれ自身の出力に基づいて、再プログラムできる。従って、第1の有限状態機械エンジン602は、ランタイム中に変化する状態に適合するように変えることができる。一例では、フィードバックは、より高いレベルに基づいて学習再プログラムするために、低いレベルに対して使用できる。例として有限状態機械エンジン602を用いると、フィードバックは、プログラミングインタフェース602Bで受信でき、有限状態機械エンジン602に対して、新規または更新されたプログラムの形式であり得る。一例では、更新されたプログラムは、有限状態機械エンジン602の一部または全てを再プログラムできる。図13に示す4レベル階層600は、4つの有限状態機械エンジン602、604、606、608で実装され、その各々が入力ポート602A、604A、606A、608A、プログラミングインタフェース602B、604B、606C、608B、および出力ポート602C、604C、606C、608Cを有する。第1の有限状態機械エンジン602は、階層600の第1のレベルを実装し、階層600の第2のレベルを実装する第2の有限状態機械エンジン604に出力を提供する。第3および第4の有限状態機械エンジン606、608は同様に、階層600の第3および第4のレベルを実装する。一例では、第4の有限状態機械エンジン608からの出力が、第1の有限状態機械エンジン602によって受信された入力データに関する階層600の分析に基づき、階層600の出力として外部装置に送信される。その結果、第4の有限状態機械エンジン608からの出力が、階層600に対する集合的な出力に対応する。他の例では、有限状態機械エンジン602、604、または606のうちの他のものからの出力が、階層600に対する集合的な出力に対応し得る。第2、第3および第4の有限状態機械エンジン604、606、608からの出力は各々、下のレベルで、有限状態機械エンジン602、604、606のプログラミングインタフェース602B、604B、606Bに対してフィードバックできる。例えば、第4の有限状態機械エンジン608からの出力が、第3の有限状態機械エンジン606のプログラミングインタフェース606Bに対してフィードバックされる。第3の有限状態機械エンジン606は、それ故、第4の有限状態機械エンジン608からの出力に基づいて再プログラムできる。その結果、第3の有限状態機械エンジン606は、ランタイム中にそのプログラムを修正できる。第1および第2の有限状態機械エンジン602、604は、同様に、それぞれ第2および第3の有限状態機械エンジン604、606からの出力に基づいて、ランタイム中に再プログラムできる。一例では、有限状態機械エンジン604、606、608からの出力からのフィードバックが、有限状態機械エンジン602、604、606を再プログラムするためのプログラムを形成するために処理例えば、分析およびコンパイルされる。例えば、有限状態機械エンジン608からの出力が、プログラミングインタフェース606Bに送信される前に、処理装置614によって分析およびコンパイルされ得る。処理装置614は、有限状態機械エンジン608からの出力に基づき、有限状態機械エンジン606に対して更新されたプログラムを生成できる。処理装置614は、出力を分析し、更新されたプログラムを第3の有限状態機械エンジン606用にコンパイルできる。更新されたプログラムは、次いで、第3の有限状態機械エンジン606を再プログラムするために、プログラミングインタフェース606Bを介して、第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から別の装置への集合的な出力に対応できる。外部装置は、例えば、パターンが階層600によっていつ識別されたかを判断するために、これらの有限状態機械エンジン602、608の各々からの出力をモニタリングできる。一例では、フィードバック情報は、分析したデータストリームに対応する識別情報を含むことができる。例えば、識別情報は、データの識別特性、データのフォーマット、データのプロトコル、および/または他のタイプの識別情報を含むことができる。識別情報は、例えば、処理装置610により、入力データに対する分析方法を適合させるために、収集、分析、および使用され得る。有限状態機械エンジンは、次いで、その適合した分析方法でプログラムされ得る。識別情報は、例えば、入力データの言語を含むことができる。有限状態機械エンジンは、入力データの言語を決定するために最初にプログラムでき、そして、言語が入力に対応して識別されると、ランタイム中に適合例えば、再プログラムされ得る。有限状態機械エンジンに対する適合した分析方法は、識別した言語に対する分析方法にもっと明確に対応できる。最後に、有限状態機械エンジンは、適合した分析方法を用いて、将来の入力データを分析し得る。フィードバックプロセスは、分析方法の将来の適合を可能にするため、追加の識別情報が入力データ内で見つかり得るように、反復的であり得る。有限状態機械エンジン上にロードするためのプログラム本明細書ではイメージとも呼ぶは、図19に関して以下で説明するように、コンパイラによって生成できる。一般に、コンパイルは、計算的に集中的なプロセスであり、パターンシグネチャの大規模なデータベースを初めてコンパイルする際に最も顕著であり得る。ランタイム操作では、高いレベルの有限状態機械エンジンは、低いレベルの有限状態機械エンジンに対する増分プログラム更新の形で、フィードバックを低いレベルに提供することができる。従って、低いレベルの有限状態機械エンジンに対するフィードバック情報は、コンパイルするのに計算的にそれほど集中的でない、元のプログラムに対するかなり小さい増分更新であり得る。図14は、4つの有限状態機械エンジン702、704、706、708で実装された4レベル階層700の別の例を示す。ここでは、第2、第3、および第4のレベルの有限状態機械エンジン704、706、708が、生データストリームのみならず、低いレベルからの入力を受信する。それに応じて、レベル2、3、および4は、低いレベルからのパターンと生データとの組合わせからのパターンを識別できる。図13および図14から分かるように、有限状態機械エンジンは、階層に対する生データ入力が、有限状態機械エンジンからの出力と同様に、自身を含めて、任意の他の有限状態機械エンジンに送信できる、ほぼいかなる方法でも、カスケード接続できる。さらに、所与の有限状態機械エンジンからの出力が、入力データとして、および/または有限状態機械エンジンに対するプログラムを更新するためのフィードバックとして、別の有限状態機械エンジンに送信できる。上で述べたように、有限状態機械エンジンが入力データストリームの1ビットまたはワードを処理する時間に起因して、有限状態機械エンジンを順番にカスケード接続すると、全ての有限状態機械エンジンを通って、入力データストリームを完全に処理する時間が増加し得る。階層の最も低いレベルは、しばしば、最も低い最も粒度の大きいレベルの入力を受信する。その結果、低いレベルは、高いレベルの出力よりもアクティブであると期待されるはずである。すなわち、階層内の各連続するレベルは、より高いレベルのオブジェクトを組み立てることができる。一例では、有限状態機械エンジンは、入力データがその有限状態機械エンジンに対してどれくらい速く供給できるかを制限する最大入力レートを有する。この入力レートは、単一のデータサイクルと考えることができる。各連続するデータサイクルにおいて、有限状態機械エンジンは、多数の最終状態をアクティブ化する潜在能力を有する。これは、特に、階層の最も低いレベルで有限状態機械エンジンに相当量の出力一致データを生成させ得る。例えば、入力がバイトのストリームとして最も低いレベルの有限状態機械エンジンに提供される場合、任意の所与のデータサイクルについて、有限状態機械エンジンが複数バイトの状態情報を生成することが可能になり得る。1バイトの情報が複数バイトの状態情報を生成できる場合、有限状態機械エンジンの階層全体は、情報が階層の上に渡されるように、同期されるべきである。しかし、フィードバックは、同期される必要はなく、フィードバックが低いレベルで迅速に受信されれば、低いレベルはそれだけ迅速に適合でき、かつ、分析がより効果的になる。一例として、単一の有限状態機械エンジンで実装された階層の各レベルに対する最大サイズの出力は、1024バイトに等しい可能性があり、階層の深さは、4レベルに等しい可能性がある。有限状態機械エンジンに対する入力データストリームのデータレートは、128MB/秒に等しい可能性がある。これらの条件で、階層の各レベルは、7.63マイクロ秒で横断され得る。4レベル階層では、有限状態機械エンジンのスタック全体の総解決時間は、4×7.63マイクロ秒、つまり30.5マイクロ秒である。30.5マイクロ秒の解決時間では、どうやら入力データ周波数は32KB/sに制限されるべきのようである。特に、これは、有限状態機械エンジンの構成に高度に依存する。有限状態機械エンジンは、入力データレートと状態機械サイズを対比してトレードオフするように構成可能であり得る。さらに、有限状態機械エンジンに対する入力ワードのサイズは、対応する修正が、その有限状態機械エンジン上にロードされた個々のイメージを作成したコンパイラに対して行われる場合、調整できる。一例では、図1~図14に関連して説明したように、1つまたは複数のFSMを実装するための方法は、フォンノイマンアーキテクチャを有するマシン上のソフトウェアで実装できる。その結果、ソフトウェア命令は、プロセッサに、生データストリームに関する第1のレベルの分析FSMを実装させ得る。第1のレベルのFSMからの出力は、次いで、第2のレベルのFSMに従ってプロセッサにより処理され、同様に続く。さらに、前述したフィードバックループが、FSMのレベルからの出力を分析し、それを使用して1つまたは複数のレベルに対して新しいFSMを生成するプロセッサによって実装され得る。図15~図18は、本明細書でFSMエンジン800と呼ぶ並列マシンの例を示す。一例では、FSMエンジン800は、有限状態機械のハードウェア実装を含む。その結果、FSMエンジン800は、FSM内の複数の状態に対応する、複数の選択的に接続可能なハードウェア要素例えば、プログラム可能要素を実装する。FSM内の状態と同様に、ハードウェア要素は、入力ストリームを分析し、その入力ストリームに基づいて下流のハードウェア要素をアクティブ化できる。FSMエンジン800は、汎用要素および専用要素を含む複数のプログラム可能要素を含む。汎用要素は、多数の異なる機能を実装するようにプログラムできる。これらの汎用要素は、行806図16および図17に示すおよびブロック802図15および図16に示すに階層的に構成されたSME804、805図18に示すを含む。階層的に構成されたSME804、805の間で信号をルーティングするために、ブロック間スイッチ803図15および図16に示す、ブロック内スイッチ808図9および図10に示すおよび行内スイッチ812図17に示すを含めて、プログラム可能スイッチの階層が使用される。SME804、805は、FSMエンジン800によって実装されたFSMの状態に対応できる。SME804、805は、以下で説明するように、プログラム可能スイッチを用いて連結できる。その結果、FSMは、SME804、805を状態関数に対応するようにプログラムすることにより、かつ、FSM内の状態間の遷移に対応するようにSME804、805を選択的に連結することにより、FSMエンジン800上で実装できる。図15は、FSMエンジン800の例の全体図を示す。FSMエンジン800は、プログラム可能ブロック間スイッチ803と選択的に連結できる複数のブロック802を含む。さらに、ブロック802は、信号例えば、データを受信し、そのデータをブロック802に提供するために、入力ブロック809例えば、データ入力ポートに選択的に結合できる。また、ブロック802は、ブロック802から外部装置例えば、別のFSMエンジン800に信号を提供するために、出力ブロック813例えば、出力ポートにも選択的に結合できる。FSMエンジン800は、プログラム例えば、イメージをFSMエンジン800にロードするために、プログラミングインタフェース811も含むことができる。イメージは、SME804、805の状態をプログラム例えば、設定できる。すなわち、イメージは、SME804、805を、入力ブロック809で所与の入力に対してある方法で反応するように構成できる。例えば、SME804は、入力ブロック809で文字aが受信されると、高信号を出力するように設定できる。一例では、入力ブロック809、出力ブロック813、および/またはプログラミングインタフェース811は、レジスタとして実装でき、それらのレジスタへの書込みは、それぞれの要素に対して、またはそれらの要素から、データを提供できるようになる。その結果、プログラミングインタフェース811に対応するレジスタ内に格納されているイメージからのビットが、SME804、805上にロードできる。図15では、ブロック802、入力ブロック809、出力ブロック813、およびブロック間スイッチ803の間に、ある数の導体例えば、ワイヤー、配線が示されているが、他の例では、もっと少ないか、またはもっと多くの導体が使用できることが理解されるべきである。図16は、ブロック802の例を示す。ブロック802は、プログラム可能ブロック内スイッチ808と選択的に連結できる複数の行806を含むことができる。さらに、行806は、ブロック間スイッチ803を備えた別のブロック802内の別の行806に選択的に結合できる。一例では、バッファー801が、ブロック間スイッチ803へ/からの信号のタイミングを制御するために含まれる。行806は、本明細書で2のグループGOT:groupoftwo810と呼ぶ要素のペアに編成された複数のSME804、805を含む。一例では、ブロック802に、16の行806が含まれる。図17は、行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の入力816は、GOT810の第2のSME805に結合される。一例では、行806は、第1および第2の複数の行相互接続導体820、822を含む。一例では、GOT810の入力814、816が、1つまたは複数の行相互接続導体820、822に結合でき、出力は、1つの行相互接続導体820、822に結合できる。一例では、第1の複数の行相互接続導体820は、行806内の各GOT810の各SME804に結合できる。第2の複数の行相互接続導体822は、行806内の各GOT810の1つのSME804に結合できるが、GOT810の他のSME805に結合できない。一例では、第2の複数の行相互接続導体822の前半は、行806内のSME804の前半各GOT810から1つのSME804に結合でき、第2の複数の行相互接続導体822の後半は、行806内のSME805の後半各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つのモード、パルスpulseおよびホールドholdも有する。カウンタ824が、パルスモードに設定されると、カウンタ824がゼロまで減少されるとき、クロックサイクル中にゼロカウント出力がアサートされ、次のクロックサイクルではゼロカウント出力はもはやアサートされていない。カウンタ824が、ホールドモードに設定されると、カウンタ824がゼロまで減少されるとき、クロックサイクル中にゼロカウント出力がアサートされ、アサートされているリセット入力によってカウンタ824がリセットされるまで、アサートされたままである。一例では、専用要素824は、ブール論理を含む。いくつかの例では、このブール論理は、FSMエンジン800内の終端状態SMEから情報を抽出するために使用できる。抽出された情報は、状態情報を他のFSMエンジン800に転送するため、および/またはFSMエンジン800の再プログラムもしくは別のFSMエンジン800の再プログラムに使用したプログラミング情報を転送するために、使用できる。図18は、GOT810の例を示す。GOT810は、第1のSME804および第2のSME805を含み、それらは、入力814、816を有し、ORゲート830および3入力3-to-1マルチプレクサ842に結合された出力826、828を有する。3入力マルチプレクサ842は、GOT810の出力808を、第1のSME804、第2のSME805、またはORゲート830のいずれかに結合するように設定できる。ORゲート830は、GOT810の共通の出力818を形成するために、出力826、828の両方を連結するために使用できる。一例では、第1および第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に出力する。メモリセル832から検出線834上への出力は、検出回路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は、選択された1つまたは複数のデータストリーム線836が、その上に高信号を有する場合、高信号を出力するようにプログラムできる。例えば、SME804は、第1のメモリセル832例えば、ビット0を高く設定し、他の全てのメモリセル832例えば、ビット1~255を低く設定できる。それぞれの検出回路838がアクティブ状態のとき、SME804は、ビット0に対応するデータストリーム線836がその上に高信号を有する場合、出力826上に高信号を出力する。他の例では、SME804は、複数のデータストリーム線836のうちの1本が、適切なメモリセル832を高値に設定することにより、その上に高信号を有する場合、高信号を出力するように設定できる。一例では、メモリセル832は、関連するレジスタからビットを読み取ることによって、高値または低値に設定できる。その結果、SME804は、コンパイラによって作成されたイメージをレジスタ内に格納し、レジスタ内のビットを関連するメモリセル832にロードすることにより、プログラムできる。一例では、コンパイラによって作成されたイメージは、高および低例えば、1および0ビットのバイナリイメージを含む。イメージは、FSMエンジン800を、SME804、805をカスケード接続することによりFSMとして動作するようにプログラムできる。例えば、第1のSME804は、検出回路838をアクティブ状態に設定することにより、アクティブ状態に設定できる。第1のSME804は、ビット0に対応するデータストリーム線836がその上に高信号を有する場合、高信号を出力するように設定できる。第2のSME805は、最初は非アクティブ状態に設定され得るが、アクティブな場合は、ビット1に対応するデータストリーム線836がその上に高信号を有する場合、高信号を出力するように設定できる。第1のSME804および第2のSME805は、第1のSME804の出力826を第2のSME805の入力816に結合するように設定することによりカスケード接続できる。従って、高信号が、ビット0に対応するデータストリーム線836上で検知される場合、第1のSME804は、高信号を出力826上に出力し、第2のSME805の検出回路838をアクティブ状態に設定する。高信号が、ビット1に対応するデータストリーム線836上で検知される場合、第2のSME805は、別のSME504、SME805をアクティブ化するため、またはFSMエンジン800からの出力に対して、高信号を出力826上に出力する。図19は、コンパイラが、ソースコードを、並列マシンをプログラムするように構成されたイメージに変換するための方法1000の例を示す。方法1000は、ソースコードを構文木に解析することブロック1002、構文木をオートマトンに変換することブロック1004、オートマトンを最適化することブロック1006、オートマトンをネットリストに変換することブロック1008、ネットリストをハードウェア上に配置することブロック1010、ネットリストをルーティングすることブロック1012、および結果として生じるイメージを公開することブロック1014を含む。一例では、コンパイラは、ソフトウェア開発者がFSMエンジン800上でFSMを実装するためのイメージを作成できるようにするアプリケーションプログラミングインタフェースAPIを含む。コンパイラは、ソースコード内の正規表現の入力セットを、FSMエンジン800をプログラムするように構成されたイメージに変換するための方法を提供する。コンパイラは、フォンノイマンアーキテクチャを有するコンピュータに対する命令によって実装できる。これらの命令は、コンピュータ上のプロセッサに、コンパイラの機能を実装させることができる。例えば、命令は、プロセッサによって実行される場合、プロセッサに、プロセッサがアクセス可能なソースコード上のブロック1002、1004、1006、1008、1010、1012、および1014で説明した動作を実行させることができる。フォンノイマンアーキテクチャを有するコンピュータの例を図20に示し、以下で説明する。一例では、ソースコードは、シンボルのグループ内でシンボルのパターンを識別するための検索文字列を記述する。検索文字列を記述するために、ソースコードは、複数の正規表現regexを含むことができる。正規表現は、シンボル検索パターンを記述するための文字列であり得る。正規表現は、例えば、プログラミング言語、テキストエディタ、ネットワークセキュリティなど、様々なコンピュータドメイン内で広く使用される。一例では、コンパイラでサポートされる正規表現は、非構造化データの検索に対する検索基準を含む。非構造化データは、データ内のワードに適用されたインデックスがなく、かつ自由な形式のデータを含むことができる。ワードは、データ内に、印字可能および印字不能な、バイトの任意の組合わせを含むことができる。一例では、コンパイラは、Perl、例えば、Perl互換の正規表現PCRE、PHP、Java登録商標、および.NET言語を含む、正規表現を実装するための複数の異なるソースコード言語をサポートできる。ブロック1002で、コンパイラは、関係的に接続された演算子の配置を形成するためにソースコードを解析でき、異なるタイプの演算子は、ソースコードで実装された異なる関数例えば、ソースコード内の正規表現によって実装された異なる関数に対応する。ソースコードを解析すると、ソースコードの一般的表現を作成することができる。一例では、一般的表現は、構文木として知られる木グラフの形で、ソースコード内の正規表現のコード化表現を含む。本明細書で説明する例は、その配置を構文木抽象構文木としても知られると呼ぶが、他の例では、具体的な構文木または他の配置も使用できる。前述のとおり、コンパイラは、複数の言語のソースコードをサポートできるので、解析は、言語にかかわらず、ソースコードを、例えば、構文木などの、非言語固有表現に変換する。従って、コンパイラによるさらなる処理ブロック1004、1006、1008、1010は、ソースコードの言語にかかわらず、共通の入力構造から作業することができる。前述したように、構文木は、関係的に接続された複数の演算子を含む。構文木は、複数の異なるタイプの演算子を含むことができる。すなわち、異なる演算子は、ソースコード内の正規表現によって実装された異なる関数に対応できる。ブロック1004では、構文木は、オートマトンに変換される。オートマトンは、FSMのソフトウェアモデルを含み、それに応じて、決定性または非決定性として分類できる。決定性オートマトンは、所与の時間に、実行の単一パスを有するが、非決定性オートマトンは、実行の複数の並列パスを有する。オートマトンは、複数の状態を含む。構文木をオートマトンに変換するため、演算子および構文木内での演算子間の関係が、状態間での遷移を有する状態に変換される。一例では、オートマトンは、FSMエンジン800のハードウェアに部分的に基づいて、変換できる。一例では、オートマトンの入力シンボルは、アルファベット、数字0~9、および他の印字可能文字を含む。一例では、入力シンボルは、0~255まで0と255を含めてのバイト値によって表される。一例では、オートマトンは、グラフのノードが状態のセットに対応する有向グラフとして表すことができる。一例では、入力シンボルαに関して、状態pから状態qへの遷移、すなわちδp,αが、ノードpからノードqへの有向接続directedconnectionによって示される。一例では、オートマトンを反転すると、何らかのシンボルαに関する各遷移p→qが、同じシンボルに関してq→pと反転されている、新しいオートマトンが生成される。反転では、開始状態が最終状態になり、最終状態が開始状態になる。一例では、オートマトンによって受け入れられた例えば、一致した言語は、オートマトンに連続して入力する場合に、最終状態に達する、全ての可能な文字列のセットである。オートマトンによって受け入れられた言語内の各文字列は、開始状態から1つまたは複数の最終状態へのパスを追跡する。ブロック1006では、オートマトンが構築された後、オートマトンは、とりわけ、その複雑性およびサイズを削減するように最適化される。オートマトンは、重複する状態を組み合わせることにより最適化できる。ブロック1008では、最適化されたオートマトンは、ネットリストに変換される。オートマトンのネットリストへの変換は、オートマトンの各状態をFSMエンジン800上のハードウェア要素例えば、SME804、805、他の要素824へマッピングし、ハードウェア要素間の接続を決定する。ブロック1010では、ネットリストの各ノードに対応する対象装置の特定のハードウェア要素例えば、SME804、805、専用要素824を選択するために、ネットリストが配置される。一例では、配置により、FSMエンジン800に対する一般的な入力および出力制約に基づいて各特定のハードウェア要素が選択される。ブロック1012では、配置されたネットリストが、選択されたハードウェア要素を、ネットリストによって記述される接続を達成するように連結するために、プログラム可能スイッチ例えば、ブロック間スイッチ803、ブロック内スイッチ808、および行内スイッチ812に対する設定を決定するようにルーティングされる。一例では、プログラム可能スイッチに対する設定が、選択されたハードウェア要素を接続するために使用されるFSMエンジン800の特定の導体の決定、およびプログラム可能スイッチに対する設定によって決定される。ルーティングすると、ブロック1010での配置よりも、ハードウェア要素間の接続のもっと明確な制限を考慮に入れることができる。その結果、ルーティングは、FSMエンジン800上の導体の実際の制限を前提として、適切な接続を行うために、全体配置によって決定されたように、いくつかのハードウェア要素の位置を調整し得る。ネットリストが配置され、ルーティングされると、配置され、ルーティングされたネットリストは、FSMエンジン800のプログラミングのために、複数のビットに変換できる。複数のビットは、本明細書ではイメージと呼ばれる。ブロック1014では、イメージがコンパイラによって公開される。イメージは、FSMエンジン800の特定のハードウェア要素および/またはプログラム可能スイッチをプログラムするための複数のビットを含む。イメージが複数のビット例えば、0および1を含む実施形態では、イメージはバイナリイメージと呼ぶことができる。そのビットは、SME804、805、専用要素824、およびプログラム可能スイッチをプログラムするために、FSMエンジン800上にロードでき、プログラムされたFSMエンジン800は、ソースコードによって記述された機能性を有するFSMを実装できるようになる。配置ブロック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、および同類のものを含み得るが、それらに限定されない。図20は、フォンノイマンアーキテクチャを有するコンピュータ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は各々、実行される際に、コンピュータに、本明細書で説明する方法の任意の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つもしくは複数を実行させるか、または命令のかかるセットで利用されるか、もしくはそれらに関連するデータ構造を格納、コード化もしくは保持できる、任意の媒体を含むとも解釈すべきである。コンピュータ可読媒体という用語は、その結果、ソリッドステートメモリ、光、および磁気媒体など、有形的媒体を含むが、それらに限定されないと解釈すべきである。読み手が技術的開示の本質および要点を確認できるようにする要約を要求する37C.F.R.セクション1.72bに従うために、要約が提供されている。それは、特許請求の範囲または意味を制限または解釈するために使用されないという理解で提出されている。以下の特許請求の範囲は、本明細書によって詳細な説明に組み込まれ、各請求項は、そのままで別個の実施形態として存在する。実施形態例例1は、複数のプログラム可能要素を有するプログラム可能装置を含み、そのプログラム可能要素は、1つまたは複数の有限状態機械を実装するように構成され、その複数のプログラム可能要素は、N桁の入力を受信し、そのN桁の入力に応じてM桁の出力を提供するように構成され、そのM桁の出力は全部より少ないプログラム可能要素からの状態情報を含む。例2は、複数のプログラム可能要素を含む第1の並列マシンであって、そのプログラム可能要素が1つまたは複数の有限状態機械を実装するように構成され、その複数のプログラム可能要素がN桁の入力を受信し、そのN桁の入力に応じてM桁の出力を提供するように構成され、そのM桁の出力が全部より少ないプログラム可能要素からの状態情報を含む、第1の並列マシンと、そのM桁の出力の少なくとも一部を受信し、処理するように構成されている第2の並列マシンとを有する階層型並列マシンを含む。例3は、複数のプログラム可能要素を有するプログラム可能装置を含み、そのプログラム可能要素が、1つまたは複数の有限状態機械を実装するように構成され、その複数のプログラム可能要素が、N桁の入力を受信し、そのN桁の入力に応じてM桁の出力を提供するように構成され、そのM桁の出力が、プログラム可能要素の各々からの状態情報を圧縮することによって形成される。例4は、複数のプログラム可能要素を含む第1の並列マシンを有する階層型並列マシンを含み、そのプログラム可能要素が、1つまたは複数の有限状態機械を実装するように構成され、その複数のプログラム可能要素が、N桁の入力を受信し、そのN桁の入力に応じてM桁の出力を提供するように構成され、そのM桁の出力が、プログラム可能要素の各々からの状態情報を圧縮することによって形成される。例5は、並列マシンから別の装置へ状態情報を提供する方法を含み、その並列マシンが、複数のプログラム可能要素を含み、そのプログラム可能要素の各々が、対応する状態を有するように構成されている。本方法は、並列マシン内のプログラム可能要素の各々の状態を含む、状態情報を決定することと、その状態情報を圧縮することと、その圧縮した状態情報を別の装置に提供することとを含む。例6は、少なくとも1つのN桁の入力および複数のN桁の出力を有する第1のレベルの並列マシンを有する階層型並列マシンを含み、そのN桁の出力の各々が、第1レベルの並列マシン上で実装されたN個の状態機械のそれぞれのグループに対応する。例7は、少なくとも1つの有限状態機械を実装するように構成された複数のプログラム可能要素を含む並列マシンを含む。その並列マシンは、プログラム可能要素の各々の状態を含む状態情報を決定し、その状態情報を圧縮し、そして、その圧縮した状態情報を別の装置に提供するように構成される。例8では、例1~例7の任意の主題が、随意に、複数のプログラム可能要素がプログラム可能要素の2つ以上のグループのうちの1つを含むことを含むことができる。例9では、例1~例8の任意の主題が、随意に、プログラム可能要素の1つのグループに結合され、かつ、N桁の入力を受信するように構成された、N桁の入力インタフェース、およびプログラム可能要素の1つのグループに結合され、かつ、M桁の出力を提供するように構成された、M桁の出力インタフェースを含むことができる。例10では、例1~例9の任意の主題が、随意に、プログラム可能要素の1つのグループがプログラム可能要素のブロックを含むことができる。例11では、例1~例10の任意の主題が、随意に、プログラム可能要素のブロックがプログラム可能要素の複数の行を含むことができ、その行の各々は複数のブロック内スイッチのうちのそれぞれ1つに結合されている。例12では、例1~例11の任意の主題が、随意に、各行内のプログラム可能要素が、2つの状態機械要素の複数のグループ、および別のプログラム可能要素を含むことを含むことができる。例13では、例1~例12の任意の主題が、随意に、プログラム可能要素の1つのグループをプログラム可能要素の別の1つのグループ、入力ポート、および/または出力ポートに選択的に結合するように構成されたプログラム可能スイッチを含む。例14では、例1~例13の任意の主題が、随意に、複数のプログラム可能要素および複数のプログラム可能スイッチをプログラムするように構成されたプログラムを格納するように構成されたレジスタを含むことができる。例15では、例1~例14の任意の主題が、随意に、NがMに等しいことを含むことができる。例16では、例1~例15の任意の主題が、随意に、MがNの整数倍であることを含むことができる。例17では、例1~例16の任意の主題が、随意に、有限状態機械のうちの同じ1つを実装するために使用されたプログラム可能要素の2つ以上からの出力を統合するように構成されたOR論理を含むことができる。例18では、例1~例17の任意の主題が、随意に、プログラム可能要素がN個の状態機械の論理グループを実装するように構成され、N個の状態機械の出力は、M桁の出力を提供するために統合されることを含むことができる。例19では、例1~例18の任意の主題が、随意に、論理がORゲートを含むことを含むことができる。例20では、例1~例19の任意の主題が、随意に、M桁の出力内に含まれている状態情報が圧縮された状態情報をどのように含むことを含むことができる。例21では、例1~例20の任意の主題が、随意に、複数のプログラム可能要素が状態機械要素を含むことを含むことができる。例22では、例1~例21の任意の主題が、随意に、M桁の出力が異なるベクトルをどのように含むことを含むことができる。例23では、例1~例22の任意の主題が、随意に、実装された1つまたは複数の有限状態機械内の各状態が、状態ベクトル内のそれぞれの桁に対応するか、かつ、異なるベクトルが、プログラム可能装置に提供された入力シンボルに応じて変わる状態ベクトル内の桁のみを含むことを含むことができる。例24では、例1~例23の任意の主題が、随意に、実装された1つまたは複数の有限状態機械内の各状態が、状態ベクトル内のそれぞれの桁に対応するか、かつ、M桁の出力が状態ベクトル内の桁のサブセットのみを含むことを含むことができる。例25では、例1~例24の任意の主題が、随意に、桁のサブセットが、1つまたは複数の有限状態機械内の最終状態に対応するそれらの桁を含むことを含むことができる。例26では、例1~例25の任意の主題が、随意に、装置内で実装された全ての状態機械がN桁の入力を受信することを含むことができる。例27では、例1~例26の任意の主題が、随意に、複数のプログラム可能要素がプログラム可能要素2つ以上のグループの1つを含むか、そのグループの各々がそれ自身の専用入力を有することを含むことができる。例28では、例1~例27の任意の主題が、随意に、N桁の入力が半導体ダイの底面上にあるか、かつM桁の出力が半導体ダイの上にあることを含むことができる。例29では、例1~例28の任意の主題が、随意に、複数のプログラム可能要素が、プログラム可能要素の2つ以上のグループの1つを含むか、かつ、プログラム可能装置が、プログラム可能装置内のグループの1つからグループの別の1つに状態情報を提供することを含むことができる。例30では、例1~例29の任意の主題が、随意に、第2の並列マシンが、M桁の出力全体を受信し、処理するように構成されていることを含むことができる。例31では、例1~例30の任意の主題が、随意に、第1の並列マシンに結合され、N桁の入力を提供するように構成された入力バス、および第1の並列マシンと第2の並列マシンとの間に結合され、M桁の出力の少なくとも一部を第2の並列マシンに提供するように構成されている出力バスを含むことができる。例32では、例1~例31の任意の主題が、随意に、入力バスおよび出力バスのサイズが等しいことを含むことができる。例33では、例1~例32の任意の主題が、随意に、第1および第2の並列マシン内の対応するグループが、相互接続のそれぞれのグループによって結合されていることを含むことができる。例34では、例1~例33の任意の主題が、随意に、M桁の出力が、第2の並列マシン内で実装されている各状態機械に提供されることを含むことができる。例35では、例1~例34の任意の主題が、随意に、第2の並列マシンが、複数のグループに分類された複数のプログラム可能要素を含むか、M桁の出力が事前定義された方法でグループのそれぞれ1つに提供されることを含むことができる。例36では、例1~例35の任意の主題が、随意に、第2の並列マシンが、アドレス情報を第2の並列マシンに送信するように構成された複数のプログラム可能要素を含むか、アドレス情報が、第2の並列マシン内のどのグループにM桁の出力が提供されているかを示すことを含むことができる。例37では、例1~例36の任意の主題が、随意に、並列マシンがスタックされることを含むことができる。例38では、例1~例37の任意の主題が、随意に、複数のプログラム可能要素がプログラム可能要素の2つ以上のグループのうちの1つを含み、さらに各グループに対応する論理を含むか、グループのそれぞれ1つに対応する論理がそのグループ内の2つ以上のプログラム可能要素からの状態情報を統合するか、かつ、そのグループからのM桁の出力の1つまたは複数の桁がかかる論理の関数であることを含むことができる。例39では、例1~例38の任意の主題が、随意に、M桁の出力が、プログラム可能要素からの状態情報を圧縮することにより形成されることを含むことができる。例40では、例1~例39の任意の主題が、随意に、有限状態機械のうちの同じ1つを実装するために使用されたプログラム可能要素の2つ以上からの出力を統合するように構成された論理を含むことができる。例41では、例1~例40の任意の主題が、随意に、プログラム可能要素が、N個の状態機械の論理グループを実装するように構成されているか、N個の状態機械の出力がM桁の出力を提供するために統合されることを含むことができる。例42では、例1~例41の任意の主題が、随意に、状態情報を圧縮することが状態情報に対して無損失圧縮アルゴリズムを適用することを含むことを含むことができる。例43では、例1~例42の任意の主題が、随意に、圧縮された状態情報を他の装置に提供することが、圧縮された状態情報を別の並列マシンに提供することを含むことを含むことができる。例44では、例1~例43の任意の主題が、随意に、圧縮された状態情報を他の装置に提供することが、圧縮された状態情報をシステムメモリに提供することを含むことを含むことができる。例45では、例1~例44の任意の主題が、随意に、状態情報を圧縮することが、並列マシン上で実装された有限状態機械内の最終状態を統合することを含むことを含むことができる。例46では、例1~例45の任意の主題が、随意に、少なくとも1つのN桁の入力および複数のN桁の出力を有する第1のレベルの並列マシンを含むことができ、N桁の出力の各々が、第1のレベルの並列マシン上で実装されているN個の状態機械のそれぞれのグループに対応する。例47では、例1~例46の任意の主題が、随意に、第1のレベルの並列マシン上で実装された少なくとも1つの状態機械が、少なくとも1つの状態機械の複数の最終状態に対応する複数のプログラム可能要素を含み、複数の最終状態に対応する複数のプログラム可能要素の出力が、N桁の出力のうちの1つの1桁を提供するために共に統合されることを含むことができる。例48では、例1~例47の任意の主題が、随意に、N桁の出力の1つに提供されたデータが、第1のレベルの並列マシン上で実装されたN個の状態機械のそれぞれのグループに対する最終状態の状態をコード化することを含むことができる。例49では、例1~例48の任意の主題が、随意に、第1のレベルの並列マシンが有限状態機械エンジンを含むことを含むことができる。例50では、例1~例49の任意の主題が、随意に、有限状態機械エンジンがプログラム可能要素のグループの配列を含み、かつ、プログラム可能要素のグループの各々がN桁の出力のそれぞれ1つに結合されていることを含むことができる。例51では、例1~例50の任意の主題が、随意に、第1のレベルの並列マシンが複数のN桁の出力を有し、かつ、プログラム可能要素のグループの各々が第1のレベルの並列マシンのN桁の入力のそれぞれ1つに結合されていることを含むことができる。例52では、例1~例51の任意の主題が、随意に、第2のレベルの並列マシンが有限状態機械エンジンを含むことを含むことができる。例53では、例1~例52の任意の主題が、随意に、有限状態機械エンジンがプログラム可能要素のグループの配列を含み、かつ、プログラム可能要素のグループの各々がN桁の入力のそれぞれ1つに結合されていることを含むことができる。例54では、例1~例53の任意の主題が、随意に、第2のレベルの並列マシンが複数のN桁の出力を有し、かつ、プログラム可能要素のグループの各々が第2のレベルの並列マシンのN桁の出力のそれぞれ1つに結合されていることを含むことができる。例55では、例1~例54の任意の主題が、随意に、第1の並列マシンが第1のダイを含み、かつ第2の並列マシンが第1のダイで積み重ねられた第2のダイを含むことを含むことができる。例56では、例1~例55の任意の主題が、随意に、第3の並列マシンおよびバスをさらに含むことができ、その第3の並列マシンは、第1のダイおよび第2のダイで積み重ねられた第3のダイを含み、その第2のダイがスタック内の第1のダイと第3のダイとの間にあり、そのバスは第1の並列マシンと第3の並列マシンとの間で状態情報を転送するように構成される。例57では、例1~例56の任意の主題が、随意に、バスが複数の相互接続を含むことを含むことができる。例58では、例1~例57の任意の主題が、随意に、相互接続が貫通ビア相互接続を含むことを含むことができる。例59では、例1~例58の任意の主題が、随意に、並列マシンが有限状態機械エンジンを含むことを含むことができる。例60では、例1~例59の任意の主題が、随意に、どのように有限状態機械エンジンがパターン認識プロセッサを含むことを含むことができる。例61では、例1~例60の任意の主題が、随意に、並列マシンがフィールドプログラマブルゲートアレイを含むことを含むことができる。例62では、例1~例61の任意の主題が、随意に、第1のレベルの並列マシンの少なくとも1つのN桁の入力が生データを受信するように構成されることを含むことができる。例63では、例1~例62の任意の主題が、随意に、第2のレベルの並列マシンのN桁の入力の各々が、第2のレベルの並列マシン上で実装されたN個の状態機械のそれぞれのグループに対応し、第2のレベルの並列マシン上で実装されたN個の状態機械のそれぞれのグループが、第1のレベルの並列マシン上で実装された最大N個の状態機械により駆動されることを含むことができる。例64では、例1~例63の任意の主題が、随意に、他の装置が、圧縮された状態情報を受信および処理するように構成された、第2の並列マシンを含むことを含むことができる。例65では、例1~例64の任意の主題が、随意に、状態情報を圧縮するように構成されている並列マシンが、その並列マシン上で実装された有限状態機械の最終状態を統合するように構成されている並列マシンを含むことを含むことができる。例66では、例1~例65の任意の主題が、随意に、最終状態を統合するように構成されたブール論理を含むことができる。例67では、例1~例66の任意の主題が、随意に、状態情報を圧縮するように構成されている並列マシンが、入力シンボルに応じて変化している状態のみを識別する差分ベクトルを出力するように構成されている並列マシンを含むことを含むことができる。例68では、例1~例67の任意の主題が、随意に、状態情報を圧縮するように構成されている並列マシンが、出力ベクトルを出力するように構成されている並列マシンを含むことを含むことができ、その出力ベクトルは、並列マシン上で実装された有限状態機械内の最終状態に対する状態情報のみを提供する。"