仮想化超並列プログラマブルハードウェアによる正規表現の検索
プログラマブルハードウェアデバイスでの実行に適切な論理および状態情報は、コーパスに対して正規表現を評価するように、タスクから生成することができる。プログラマブルハードウェアデバイスでの論理および状態情報のハードウェア容量の要件を推定することができる。推定されると、複数のタスクから生成された複数の論理および状態情報は、各セットの論理および状態情報がプログラマブルハードウェアデバイスのハードウェア容量内に収まるように、セットに配分することができる。各セット内のタスクは、プログラマブルハードウェアデバイスで並列に実行するように構成することができる。次いで、セットは順次に実行されてもよく、リソースの仮想化が可能になる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想化超並列プログラマブルハードウェアによる正規表現の検索に関する。
【背景技術】
【0002】
正規表現検索は、電子メールスパムフィルタリングおよびネットワーク侵入検出から一般的な調査に至るまで、多種多様なアプリケーションに共通する操作である。正規表現(「reg ex」または「RE」)は、特定の文字、単語、または文字のパターンのような、関心対象のストリングを識別するための簡潔で柔軟な手段をもたらす。たとえば、テキストファイルを解析する場合の「*car*」の正規表現は、「car」、「cartoon」、「vicar」などを識別することができる。
【0003】
従来より、reg exsは、ソフトウェアベースまたはハードウェアベースの検索ソリューションを使用して実行されてきた。残念なことに、それらのソリューションは、膨大な数の複合検索を実行する場合には問題に遭遇する。
【発明の概要】
【発明が解決しようとする課題】
【0004】
ソフトウェアベースの検索では、スループットに関連する根本的な問題が生じる。プロセッサベースのシステムは、原則的に任意の複合検索を大量に実行できるその柔軟性ゆえに普及しているが、その速度は、検索の数および複雑さが増大するにつれて低下し一貫性を失う。言い換えれば、膨大量のデータ(「コーパス」)でのreg ex検索は、実際的ではない。
【0005】
一方、既存のハードウェアベースの検索ソリューションは、適応能力に根本的な問題がある。これらのシステムは、システム自体にマップすることができる検索に対しては高速で一貫性のあるパフォーマンスを備えることができるが、既存のデバイスには、詳細な専門知識と手操作による介入なしでサポート可能な検索の数および複雑さに関して厳しい制限がある。言い換えれば、ハードウェア検索は高速であるが、制限されている。
【0006】
したがって、正規表現検索のようなアルゴリズムのハードウェアベースの処理に、ソフトウェアと同様の柔軟性をもたらすことを求める切迫した需要がある。
【課題を解決するための手段】
【0007】
この課題を解決するための手段は、後段の発明を実施するための形態においてさらに説明される一連の概念を簡略化された形態で示すために提供される。この課題を解決するための手段は、請求項に係る主題の重要な特徴または基本的特徴を特定することを意図するものではなく、また請求項に係る主題の範囲を限定するために使用されることを意図するものでもない。
【0008】
正規表現を含む(ただし、これに限定されることはない)計算タスクは、対応する論理および状態方程式に変換することができる。論理および状態方程式を実行するためにどのくらいのプログラマブルハードウェアデバイスが必要であるかなど、物理リソース要件は、コンピュータ支援設計(CAD)ツールを通じて反復の試行錯誤を行なうことなく推定されてもよい。推定された後、計算タスクはセットに配分されてもよく、そこで各セットは個々の使用可能な物理リソース内に収まる。たとえば、計算タスクのセットは、フィールドプログラマブルゲートアレイ(FPGA)のような、プログラマブルハードウェアデバイスに収まることができる。制御および通信論理が各セットに追加されてもよく、ハードウェア定義言語(HDL)ファイルは、各セットに対して生成される。複数のHDLファイルにわたる計算タスクの分割方法、HDLファイルの実行シーケンスなどを詳述する構成仕様も生成されてもよい。各HDLファイルから、構成バイナリが生成されてもよい。次いで、プログラマブルハードウェアデバイスは、構成バイナリを実行する。
【0009】
ユーザインターフェイスは、ユーザを、タスク管理の複雑さ、構成バイナリの作成、構成バイナリにわたる計算タスクの配分などから隔離する。プログラマブルハードウェアの速度および再構成可能性を併せ持つ簡単なユーザインターフェイスは、正規表現検索の実際の実施および実行をユーザに意識させないようにする。プログラマブルハードウェアの面倒な手操作による構成に代わって、自動化システムは、ユーザのために構成バイナリを生成し、それらを実行して、結果の整理統合を管理する。
【0010】
信頼性を向上させるためのフォールトトレランスのサポートは、再配分、スペアリングなどを含む。パフォーマンスの向上は、フラグメンテーションの緩和および優先順位付けを通じて可能となる。
【図面の簡単な説明】
【0011】
詳細な説明は、添付の図面を参照して示される。図面において、参照番号の左端の数字(複数可)は、参照番号が最初に出現する図面を識別する。異なる図面において同じ参照番号が使用される場合、それは類似または同一の項目を指示する。
【0012】
【図1】正規表現処理システムの保持に適したアーキテクチャの選択されたコンポーネントを示すブロック図である。
【図2】図1から選択されたコンパイルモジュールのコンポーネント、およびコンパイルモジュールにより生成されうる構成情報を示すブロック図である。
【図3】図1のアーキテクチャにより生成される構成バイナリの選択されたコンポーネントを示すブロック図である。
【図4】図1のアーキテクチャにより生成される構成仕様の選択されたコンポーネントを示すブロック図である。
【図5】図1のアーキテクチャから選択されたプログラマブルハードウェアシステムコントローラ(PHSC)のコンポーネントを示すブロック図である。
【図6】PHSCによる構成バイナリの実行を示す流れ図である。
【図7】構成バイナリからの状態情報の格納を含む、PHSCによる構成バイナリの実行を示す流れ図である。
【図8】正規表現処理システムとのユーザ対話を示す流れ図である。
【図9】正規表現に基づく構成情報の生成を示す流れ図である。
【図10】正規表現のセットに対する物理リソース要件の推定を示す流れ図である。
【図11】プログラマブルハードウェアにおける生成された構成の実行を示す流れ図である。
【図12】正規表現の動的な変更を示す流れ図である。
【図13】残りの機能可能なプログラマブルハードウェアデバイスに構成バイナリを再配分することによるフォールトトレランスのサポートを示す流れ図である。
【図14】残りの機能可能なプログラマブルハードウェアデバイスに構成バイナリを再配分することによるフォールトトレランスのサポートを示す流れ図である。
【図15】残りの機能可能なプログラマブルハードウェアデバイスに構成バイナリを再配分することによるフォールトトレランスのサポートを示す流れ図である。
【図16】予備の機能可能なプログラマブルハードウェアデバイスの使用を介するフォールトトレランスのサポートを示す流れ図である。
【図17】予備の機能可能なプログラマブルハードウェアデバイスの使用を介するフォールトトレランスのサポートを示す流れ図である。
【図18】予備の機能可能なプログラマブルハードウェアデバイスの使用を介するフォールトトレランスのサポートを示す流れ図である。
【図19】構成バイナリにわたる正規表現のフラグメンテーション緩和を示す概略図である。
【図20】コンパイルリソースが制限されている場合のような、正規表現の一部および対応する構成バイナリの選択的な再コンパイルによるフラグメンテーション緩和を示す概略図である。
【図21】正規表現の優先度を認識するハードウェア割り当て、ならびにそれらの正規表現の構成バイナリへのパッキングおよびスケジューリングを示す概略図である。
【図22】構成バイナリの実行を再配分することによるアイドルプログラマブルハードウェアリソースの再利用を示す流れ図である。
【図23】構成バイナリおよびその内部の正規表現の優先順位付けを示す流れ図である。
【図24】構成バイナリおよびその内部の正規表現の優先順位付けを示す流れ図である。
【図25】コンパイルおよび実行における複数のユーザ/アプリケーションによる正規表現のマージを示す流れ図である。
【図26】構成バイナリの遅延構成ページングを示す流れ図である。
【図27】後に完全な構成バイナリを作成するよう結合されうる構成バイナリサブエレメントのコンパイルを示す流れ図である。
【図28】正規表現を結合する計算を示す概略図である。
【図29】重複するかまたは類似する部分を有する正規表現のスーパーセットを示す概略図である。
【発明を実施するための形態】
【0013】
正規表現(「reg ex」または「RE」)は、特定の文字、単語、または文字のパターンのような、関心対象のストリングを識別するための簡潔で柔軟な手段をもたらす。たとえば、テキストファイルを解析する場合の「*car*」の正規表現は、「car」、「cartoon」、「vicar」などの単語を識別することができる。
【0014】
正規表現検索は、要求していない広告電子メール(「スパム」)フィルタリングから一般的な調査に至るまで、多種多様な分野において幅広く使用される。たとえば、電子メールサーバは、所与の電子メールがスパムであるかどうかを決定するために、「mortgage」または「credit card」または「enhancement」の出現をすべて検索することができる。もう1つの例において、医師は、癌の素因を指示する「GGCCCAGCATAGATTACA」という配列を見つけるために患者のDNAを調べることができる。したがって、reg exは、多くの用途において有用なツールである。残念なことに、前述のように、reg exを実施する従来の方法には、ソフトウェアにおいては遅い速度、またはハードウェアにおいては処理されるreg exの変化に対して適応能力が限られているという深刻な欠点があった。
【0015】
本開示において、正規表現は、プログラマブルハードウェアデバイスで実行するための対応する論理および状態方程式に自動的に変換される。この自動変換のプロセスの一環として、各正規表現を実行するために必要なプログラマブルハードウェアのサイズは、厄介な試行錯誤を行なうことなく推定されてもよい。一部の実施形態において、コンパイルレポートから派生したフィードバックを使用する、および実際のリソース利用率を使用して構成を変更するなどのような、自動制御の下で試行錯誤が使用されてもよい。推定された後、正規表現はセットに配分されてもよく、そこで各セットは個々のプログラマブルハードウェアデバイスの物理リソースの制約の範囲内に収まる。たとえば、500の正規表現のセットは、特定のFPGA内に収めることができる。
【0016】
通信および制御(CC)論理は各セットに追加されてもよく、それによりプログラマブルハードウェアがコントローラと通信して、プログラマブルハードウェアでの実行を管理することができるようになる。プログラマブルハードウェアは、イーサネット(登録商標)のようなデータネットワーク、PCI(peripheral component interconnect)のような入出力バスインターフェイス、またはHyperTransportコンソーシアムにより記述されているHyperTransport(商標)のような中央演算処理装置バスベースのインターフェイスを介してコントローラと通信することができる。コンパイラは、各セットに対して、正規表現およびCC論理を含むハードウェア定義言語(HDL)ファイルを生成する。コンパイラはまた、複数のHDLファイルにわたる正規表現の配分、実行シーケンスなどを詳述する構成仕様も生成することができる。CADツールは、各HDLファイルから構成バイナリを生成することができる。次いで、プログラマブルハードウェアデバイスは、構成バイナリを実行することができる。
【0017】
実行中、各プログラマブルハードウェアデバイス内の正規表現は並列で実行するので、大幅な速度の増大をもたらす。たとえば、特定のFPGA内に収まる前述の500の正規表現のセットは、FPGA内で並列に実行される。
【0018】
(構成バイナリの形態の)異なるセットは、プログラマブルハードウェアデバイスで順次にロードされて実行される。それにより、使用可能なプログラマブルハードウェアの容量を通常であれば超えるであろう正規表現検索を行なうことが可能になる。たとえば、前述の第1のセットは500の正規表現を有するが、第2のセットは300の正規表現を有する。合わせると、それらの800の正規表現は、単一のプログラマブルハードウェアデバイスにとっては大量過ぎる。しかし、2つの構成バイナリに分割して、順次に実行される場合、単一のプログラマブルハードウェアデバイスは、800の正規表現全体を実行することができる。
【0019】
ユーザインターフェイスは、ユーザが、タスク管理の複雑さ、構成バイナリの作成、構成バイナリにわたる配分などを見なくてすむようにする。この簡単なユーザインターフェイスにより、プログラマブルハードウェアの速度および再構成可能性を活用して、正規表現をデータのコーパスと比較するような計算タスクの実行の大幅な増大をもたらすことができる。
【0020】
プログラマブルハードウェアを使用してreg exを実行することは、2つの利点をもたらす。第1は、プログラマブルハードウェアによって提供される並列操作により、システムの容量が、プログラマブルハードウェアデバイス自体の容量と相関することである。したがって、プログラマブルハードウェアベースのソリューションが、別の構成バイナリを実行シーケンスに追加する必要が生じるまで、一定のスループットを備えることが可能である。たとえば、FPGA内に収まりうる300の表現によるセットは、同じFPGAに収まる上記の500の表現と同時に実行する。これは、300の表現の場合よりも500の表現のほうが評価に多くの時間を要するように、パフォーマンスが所望の検索の数に関して線形に低下(または悪化)するソフトウェアのソリューションとは対照的である。
【0021】
プログラマブルハードウェアベースの正規表現検索がもたらす第2の利点は、プログラマブルハードウェアで構成される回路が確定的パフォーマンスを提供することである。前述のように、プログラマブルハードウェアデバイス内に収まるように構成された正規表現のセットは、既知の時間で実行する。これとは対照的に、プロセッサで稼働しているソフトウェアのスループットは、所望される検索の特性(多少複雑な検索)および入力データの特性(低いヒット率の入力ストリームに対する高いヒット率の入力ストリーム)によって異なる可能性がある。加えて、キャッシュミスのような、その他の予測不能なイベントがパフォーマンスに変化をもたらすことがある。
【0022】
再配分、スペアリングなどが、フォールトトレランスを可能にする。パフォーマンスは、選択的または完全な再コンパイルを通じた取り消しまたは変更から正規表現のフラグメンテーションを緩和することにより保持される。正規表現はまた、パッキング、スケジューリング、および実行順序付けを通じてさまざまに変化する優先度レベルを割り当てられてもよい。
【0023】
例示のアーキテクチャ
図1は、正規表現処理システム102の実施に適したアーキテクチャの選択されたコンポーネントを示すブロック図100である。限定の目的ではなく説明のために、会社が、一般に「スパム」として知られる要求していない広告電子メールをその電子メールサーバからフィルタリングしようとしていると仮定する。スパムに関連付けられていたストリングを組み入れる正規表現のセットが保持される。たとえば、「mortgage rate」および「credit card」といった語句は、スパム電子メールを指示すると決定されている。システムアドミニストレータまたはスパムユーティリティアプリケーションは、それらの語句に対する正規表現を生成する。
【0024】
会社のサーバでの電子メールの収集は、潜在的なスパムを除去するために正規表現(reg ex)のこのリストを使用してフィルタされるデータのコーパスを形成する。実際には、そのようなreg exのリストは、数千から数百万にさえも及ぶことがある。現在のソフトウェアのみの正規表現検索に必要とされる計算要件を考えれば、これは重大なサーバの負荷をもたらし、それに応じてタスク、出力、冷却などに割り振られるサーバのようなリソース要件の増大もまねく。
【0025】
正規表現処理システム102内には、メモリ106に格納されているモジュールを実行するように構成されたプロセッサ104があってもよい。一部の実施形態において、プロセッサ104は、多重コアプロセッサ、または複数プロセッサの集合であってもよい。正規表現処理システム内にはまた、メモリ106があってもよい。メモリ106は、正規表現108(1)、108(2)、...、108(R)を格納することができる。本出願の図1から図29において使用される、「(R)」または「(P)」のような括弧で囲まれた文字は、ゼロよりも大きい任意の整数を示す。これらの正規表現は、それらを表すブロックの可変サイズによって指示されるように、さまざまなサイズおよび/または複雑さであってもよい。
【0026】
また、メモリ106内には、正規表現を受け入れて、同様にメモリ106にあるコンパイルモジュール112により処理するためにそれらの正規表現を搬送するように構成されたユーザインターフェイス110もある。コンパイルモジュール112は、プログラマブルハードウェアでのロードおよび実行に適した構成情報を生成するように構成され、後段で図2に関してさらに詳細に説明される。
【0027】
コンパイルモジュール112は、プログラマブルハードウェアシステムコントローラ(PHSC)114と通信し、メモリ106に格納されてもよい。PHSC114は、プログラマブルハードウェアの操作を管理するように構成され、後段で図5に関してさらに詳細に説明される。PHSC114は、ソフトウェアモジュールとして(示されるように)、ハードウェアデバイスとして、または組み合わせとして実行されてもよい。
【0028】
PHSC114はまた、処理のためにメモリ106内のコーパスデータ116またはその他の外部データを受け入れるように構成される。一部の実施態様において、このコーパスデータは、正規表現が実行されるべき情報を含むことができる。たとえば、正規表現として表されるスパム語句が検索される電子メールメッセージの集合。
【0029】
PHSC114は、プログラマブルハードウェア118(1)、118(2)、...、118(P)と通信する。プログラマブルハードウェア118は、フィールドプログラマブルゲートアレイ(FPGA)、複合プログラマブル論理デバイス(CPLD:complex programmable logic device)、またはその他の再構成可能なハードウェアデバイスであってもよい。プログラマブルハードウェア118は、(同じ製造業者による同じモデルのFPGAのように)類似していても、(異なる製造業者によるFPGAのように)異なっていてもよい。各プログラマブルハードウェア118内には、正規表現108(1)〜(R)のプログラマブルハードウェア内の物理的な具現ならびに任意の必須の通信および制御(CC)論理である1つまたは複数の計算論理ブロック120(1)、120(2)、...、120(L)があってもよい。
【0030】
PHSC114は、計算論理120を作成するプログラマブルハードウェア118に構成をロードする。計算論理120が実行した後、プログラマブルハードウェア118内のCC論理は、その結果をPHSC114に転送することができ、次いでPHSC114は結果122をメモリ106またはその他の外部データ宛先に出力することができる。プログラマブルハードウェアデバイス118で実行するための構成に含まれてはいない正規表現108は、補助の正規表現処理モジュール124において実行されてもよい。たとえば、新しく追加されたスパム語句「roofing repair」は、正規表現のリストに追加されてもよいが、ハードウェア実行のために構成バイナリにコンパイルされなくてもよい。コンパイルされるまで、この新しく追加されたスパム語句の正規表現は、補助の正規表現処理モジュール124を使用して処理されてもよい。補助の正規表現処理モジュール124は、メモリ106に格納されてもよく、コンパイルモジュール112およびPHSC114と通信してもよい。
【0031】
並列に正規表現を実行するように構成されたプログラマブルハードウェア118のパフォーマンスの利点を考えれば、プログラマブルハードウェア118は、課せられた要求をゆうに超えることができる。その結果、プログラマブルハードウェア118が十分に活用されない場合もある。プログラマブルハードウェア118を動的に再構成することにより、過剰なパフォーマンスと交換に仮想容量を提供することが可能になる。その結果、より小さいプログラマブルハードウェアデバイスが使用されてもよい。または、単一のプログラマブルハードウェアがもはやreg ex108(1)〜108(R)のすべてを含むことができなくなるところまで要求が高まる場合、reg exは複数の計算論路120(1)〜120(L)を作成するように分割され、逐次ロードされて実行されてもよい。計算論理の逐次実行は若干遅いが、プログラマブルハードウェア118の容量を超える計算論理をロードする場合に生じるであろう完全故障をはるかにしのぐ。
【0032】
正規表現処理システム102はまた、サーバ、ワークステーション、ネットワーク接続FPGAデバイスなどのような他のデバイスと通信するように構成可能なネットワークインターフェイス126を組み入れることもできる。
【0033】
図2は、図1から選択されたコンパイルモジュール112のコンポーネントを示すブロック図200である。正規表現108(1)〜180(R)は、ユーザインターフェイス110などを介して、コンパイルモジュール112に提供される。コンパイルモジュール112は、正規表現を、プログラマブルハードウェア118により実行可能な形態にコンパイルするように構成される。正規表現−ハードウェア定義言語(HDL)コンパイラ202は、正規表現108のHDL表現を生成する。
【0034】
ハードウェア定義言語(ハードウェア記述言語としても知られる)は、計算を実行するように構成されたデジタル論理および電子回路の記述を表す。コンピュータコードがアルゴリズムを表す場合、HDLステートメントは実際の回路素子を表す。
【0035】
米国電気電子学会(IEEE)規格IEEE1076によって説明されるように、1つのHDLは、超高速集積回路ハードウェア記述言語(VHDL)である。もう1つのHDLは、IEEE規格1364−2001に説明されているVerilogである。その他のHDLも使用可能であり、同様に使用されてもよい。
【0036】
正規表現−HDLコンパイラ202がreg ex108をコンパイルしてHDLファイルを生成すると、構成仕様204(1)、204(2)、...、204(S)は、コンパイルの結果得られた情報に基づいて生成されてもよい。構成仕様は、構成バイナリにわたり配分されるreg ex108の数などのような詳細を含み、後段で図4に関してさらに詳細に説明される。
【0037】
コンパイラ202は、HDLファイル206を、プログラマブルハードウェアのコンピュータ支援設計(CAD)ツール208に提供する。このCADツール208は、HDLファイル206を受け入れ、プログラマブルハードウェアデバイス118による実行に適した構成バイナリ210(1)、210(2)、...、210(B)を生成する。参照を簡単にするために、構成仕様204および構成バイナリ210は、構成情報212とみなされてもよい。1つの実施態様において、複数の構成バイナリ210(1)〜210(B)に関連する単一の構成仕様204が生成されてもよい。もう1つの実施態様において、複数の構成仕様204(1)〜204(S)は、複数の構成バイナリ210(1)〜210(B)に対応して生成されてもよい。一部の実施態様において、構成情報212(1)、212(2)、...、212(F)があってもよい。
【0038】
図3は、図1のアーキテクチャにより生成される例示の構成バイナリの選択されたコンポーネントを示すブロック図300である。この図において、破線302は、プログラマブルハードウェア118の容量の輪郭を描いている。構成バイナリ210内、およびこの容量302内には、コンパイルモジュール112によって生成されたバイナリ構成命令のような、バイナリ構成命令304として表現されるreg exがあってもよい。さらに、構成バイナリ210に含まれるのは、PHSC114とプログラマブルハードウェアデバイス118との結合を可能にするように構成された通信および制御(CC)論理306であってもよい。一部の実施態様において、ローカル状態ストレージ308もまた、構成バイナリ210内に提供されてもよい。
【0039】
この図において、構成バイナリ210(1)は、reg ex108(1)、108(2)、108(6)、およびCC306(1)を含む。構成バイナリ210(2)は、reg ex108(3)、108(4)、およびCC306(2)を含む。構成バイナリ210(3)は、reg ex108(5)、ローカル状態ストレージ308(1)、およびCC306(3)を含む。reg exは、内部の正規表現のサイズ/複雑さの相違を示すように、異なる幅で表されていることに留意されたい。したがって、reg ex108(5)は、使用可能な計算論理容量のほとんどを必要とするので、構成バイナリ210(3)内の唯一のreg exである。
【0040】
各構成バイナリ210は、内部のreg exが並列実行のために設計されるように構成されてもよい310。たとえば、構成バイナリ210(1)がプログラマブルハードウェア118において実行されると、reg ex108108(1)、108(2)、および108(6)が並列に実行される。ハードウェアにおいて複数のreg exを並列に実行できるこの機能は、結果として単一プロセッサ上で順次に実行するソフトウェアにまさる重大な速度の増加をもたらす。図1の例に戻ると、プログラマブルハードウェア118による構成バイナリ210(1)の実行は、ソフトウェアで行なわれる逐次処理とは対照的に、3つのreg exの検索を一度に行なう。
【0041】
図4は、図1のアーキテクチャにより生成される構成仕様204の選択されたコンポーネントを示すブロック図400である。構成仕様204は、複数の情報を含むことができる。生成される構成バイナリ402(1)のカウントは、格納されてもよい。たとえば、コンパイルされた正規表現は、3つの構成バイナリを生成する。構成バイナリ間の正規表現の配分の記述402(2)もまた、格納されてもよい。たとえば、これは、reg ex108(1)、108(2)、および108(6)が構成バイナリ210(1)内にあることを指示することができる。構成バイナリ402(3)の実行のシーケンスが含まれてもよい。たとえば、構成バイナリ210(1)を最初に実行し、続いて210(3)、次いで210(2)が実行して、特定の正規表現の優先順位付けを説明する。以下の図21では、優先順位付けをさらに詳細に説明する。構成仕様204(1)はまた、どの許可または「正当な」プログラマブルハードウェアデバイス118が正規表現処理システム102内にあるのかを含むこともできる。たとえば、現在システム内で使用可能なプログラマブルハードウェアデバイスは、製造業者XによるFPGAタイプAおよびB、ならびに製造業者YによるFPGAタイプCを含む。コンパイル日付/時間、アプリケーション識別および/またはユーザ識別などのような、その他の情報402(Y)もまた、構成仕様204(1)に含まれてもよい。
【0042】
図5は、図1のアーキテクチャから選択されたプログラマブルハードウェアシステムコントローラ(PHSC)のコンポーネントを示すブロック図500である。この図において、PHSC114は、構成仕様204(1)および対応する構成バイナリ210(1)〜210(3)を、コーパスデータ116と共に受け入れる。たとえば、構成仕様は、スパム検索のために正規表現108(1)〜108(R)に対応する表現を含むことができるが、コーパスは、スパムがないかどうか確認される電子メールストアを含むことができる。
【0043】
PHSC114は、入力を受信して、結果122を提供することを含む、PHSC114のアクションを協調するように構成された制御モジュール502を含むことができる。プログラマブルハードウェアデバイス118と通信して、構成バイナリのロードおよびアンロード、結果122の転送などのようなタスクを管理するように構成されたプログラマブルハードウェアインターフェイスモジュール504もまた、PHSC114に含まれてもよい。構成バイナリ順序付けモジュール506もまた存在してもよい。構成バイナリ順序付けモジュール506は、プログラマブルハードウェア118内の構成バイナリ210の処理のための実行シーケンス508(この説明図において破線で示される)を決定することができる。たとえば、実行シーケンス508は、構成バイナリ210(1)、構成バイナリ210(2)、次いで構成バイナリ210(3)が続いてもよい。実行シーケンス508は、構成仕様204からの構成バイナリ402(3)の実行のシーケンスに基づいてもよい。一部の実施態様において、実行シーケンス508は、優先度の変更、ハードウェアが使用できないこと、処理ロード、およびPHSC114に使用可能なその他の因子により、実行のシーケンス402(3)とは異なっていてもよい。
【0044】
例示の実行
図6は、プログラマブルハードウェア118でのPHSC114による構成バイナリの実行を示す流れ図600である。この例の場合、単一のプログラマブルハードウェアデバイス118(1)があり、矢印602により指示されるようにページを下方に進むと時間が増大すると仮定する。reg ex108(1)〜108(R)はコンパイルされて構成バイナリ210(1)〜210(B)を形成し、構成バイナリ210(1)〜210(B)のロードおよび構成が行なわれるとプログラマブルハードウェアデバイス118は計算論理120となる。プログラマブルハードウェア118(1)にロードされると、計算論理120は、604内部で符号化された正規表現検索を並列に実行する。構成バイナリのシーケンスは、1つずつ構成バイナリが次々と606で順次にロードされ処理される。
【0045】
たとえば、608において、PHSC114のプログラマブルハードウェアインターフェイスモジュール(PHIM)504は、構成バイナリ210(1)をプログラマブルハードウェア118(1)にロードする。ロードされると、プログラマブルハードウェア118(1)内で結果として得られる回路の物理的配列は、計算論理120(1)である。計算論理120(1)は実行し、その結果はPHIM504に渡される。
【0046】
610において、PHIM504は、PHSC114の実行シーケンス508で次の順位にあった構成バイナリ210(2)を、計算論理120(2)を形成するプログラマブルハードウェア118(1)にロードする。計算論理120(2)は実行し、その結果はPHIM504に返される。
【0047】
612において、PHIM504は、PHSC114の実行シーケンス508で次の順位にあった構成バイナリ210(3)を、計算論理120(3)を形成するプログラマブルハードウェア118(1)にロードする。計算論理120(3)は実行し、その結果はPHIM504に返される。
【0048】
このように連続的に構成バイナリをロードして結果の計算論理を実行することにより、プログラマブルハードウェアの仮想化が可能になり、仮想化計算ファブリックを作成することができる。たとえば、処理されるべきすべての正規表現を実行するのに十分な大きさのプログラマブルハードウェア118を個々に必要とするのではなく、reg exは1つまたは複数のプログラマブルハードウェアデバイス118にわたり実行するように分割されてもよい。使用可能なプログラマブルハードウェアデバイスが十分ではなく、同時操作ができない場合(たとえば、reg exの要求がプログラマブルハードウェアデバイスの使用可能容量を超える場合)、reg exは複数の構成バイナリにわたり配分されてもよく、次いで限られた数のプログラマブルハードウェア118にわたり配分されてもよい、および/または同じプログラマブルハードウェア118で順次に実行されてもよい。スパム検索のための800の正規表現に関する前述の例に戻ると、800すべてが単一のFPGAに収まるわけではないが、500は収まる。したがって、第1の構成バイナリは500の正規表現で作成されるが、第2の構成バイナリは残りの300の正規表現で作成される。1つのプログラマブルハードウェア118デバイスが使用可能であるので、第1の構成バイナリがロードされて実行され、次いで第2の構成バイナリがロードされて実行される。
【0049】
パフォーマンスを向上させるため、および/または一連の構成バイナリが先行のステップの結果に基づいて反復して実行できる(すなわち、パイプライン制御される)ようにするため、状態情報が格納されてもよい。図7は、構成バイナリからの状態情報の格納を伴う、PHSC114による構成バイナリの実行を示す流れ図700である。上記で図6に関して説明されたとおり、矢印702により指示されるようにページを下方に進むと時間が増大する。また上記のように、この例において、構成バイナリから結果として得られた計算論理に表される正規表現は並列に実行され704、複数の構成バイナリは、単一のプログラマブルハードウェア118(1)で逐次ロードされ実行される706。計算論理に接続されたローカルメモリは、708において、または計算論理内で具現されるもう1つの実施態様において、状態情報を格納する。たとえば、計算論理に接続されたローカルメモリの1つの実施態様において、メモリは、接続されたフラッシュメモリのような、プログラマブルハードウェアデバイスに外部のメモリであってもよい。プログラマブルハードウェア118(1)に直接アクセス可能なメモリ708を使用することで、速度を増大させ、PHSC114を通じて状態を転送して格納する必要をなくす。
【0050】
710において、PHIM504は構成バイナリ210(1)をロードし、その結果計算論理120(1)が得られ、これが実行して、ローカル状態情報308(1)をローカルメモリ708に格納することができる。712において、PHIM504は構成バイナリ210(2)をロードし、その結果計算論理120(2)が得られ、これがローカル状態情報308(1)にアクセスして、メモリ708との間で情報を読み取りおよび/または書き込みすることができる。714において、PHIM504は構成バイナリ210(3)をロードし、その結果計算論理120(3)が得られ、これもまたローカル状態情報308(1)にアクセスして、メモリ708との間で情報を読み取りおよび/または書き込みすることができる。したがって、情報は、構成バイナリの実行の間で持続することができる。
【0051】
たとえば、構成バイナリ210(1)内のreg ex108(1)はストリング「car」のreg exであるが、構成バイナリ210(2)内のreg ex108(3)はストリング「car loan」のreg exであり、構成バイナリ210(3)内のreg ex108(5)はストリング「car loan refinancing」のreg exであると仮定する。構成バイナリの実行中、状態情報308(1)は、構成バイナリ210(3)が、次に構成バイナリ210(1)からの結果を使用する構成バイナリ210(2)からの結果を使用するように、メモリ708に格納されてもよい。したがって、プログラマブルハードウェア118によって直接アクセス可能なメモリに格納されている状態情報にアクセスすることにより、処理速度が加速される。さらに、ストレージは、大きすぎて単一のプログラマブルハードウェアデバイスの容量を超えるreg exの分割を容易にすることができる。
【0052】
プロセスの例示
図8は、図1〜図7に示されるアーキテクチャを使用して実施されうる(ただし、必須ではない)正規表現処理システム102とのユーザ対話を説明する流れ図を示す。フロー800(および図9〜図12のフロー)は、論理フローグラフにおいてブロックの集合として示され、ブロックはハードウェア、ソフトウェア、またはその組み合わせにおいて実施されうる操作のシーケンスを表す。ソフトウェアのコンテキストにおいて、ブロックは、1つまたは複数のプロセッサによって実行される場合、列挙された操作を実行するコンピュータ実行可能命令を表す。一般に、コンピュータ実行可能命令は、特定の機能を実行するか、または特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造体などを含む。操作が説明される順序は、限定として解釈されることを意図されておらず、任意の数の説明されるブロックは、任意の順序および/または並列に組み合わされてプロセスを実施することができる。説明のために、プロセスは、図1〜図7のアーキテクチャのコンテキストで説明される。
【0053】
ブロック802は、正規表現のリストを受信する。たとえば、正規表現として表されるスパム検索基準のリスト。ブロック804は、正規表現に基づいて構成情報を生成する。これは、図9に関して後段でさらに詳細に説明される。
【0054】
ユーザには、ブロック806において明示または暗黙のいずれのユーザインターフェイスが選択されているかに応じて異なるインターフェイスが表示される。ブロック806において暗黙ユーザインターフェイスが選択されると、ブロック808は、生成された構成情報をプログラマブルハードウェアで実行する。ブロック810は、プログラマブルハードウェアからの結果を提供する。
【0055】
ブロック806において暗黙ユーザインターフェイスが選択されると、ブロック812は、構成情報(構成仕様204および構成バイナリ210(1)〜210(R))を検査および/または変更のためにユーザに提示する。たとえば、自動的に生成された構成バイナリを手操作で調整したいと考えるユーザは、明示インターフェイスを選択することができる。この提示が完了すると、フローはブロック808において再開し、前述のように、生成された構成情報をプログラマブルハードウェアで実行することができる。
【0056】
選択されたインターフェイスには関わりなく、このユーザインターフェイスは、reg exの複雑さとは無関係にプログラマブルハードウェアとの単純な対話をもたらす。そうすることで、ユーザは、プログラマブルハードウェアの詳細を認識する必要、または気に掛ける必要からも解放される。さらにこれは、異なるプログラマブルハードウェア118にわたる検索ポータビリティをもたらす。たとえば、reg ex108(1)〜108(R)は、異なるプログラマブルハードウェアデバイス118(1)〜118(P)にわたり実行するようにコンパイルされて、処理に使用可能になるとそれらのプログラマブルハードウェアデバイスにわたり配分されてもよい。このインターフェイスを使用することで、この複雑さをユーザの目から隠す。
【0057】
図9は、図8に関して上記で述べた、正規表現804に基づく構成情報の生成を表す流れ図を示す。ブロック902は、正規表現のリストを解析し、それらを対応する論理および状態方程式に変換する。この変換は、前述のように、コンパイルモジュール112内で行ってもよい。ブロック904は、各正規表現の物理リソース要件を推定する。たとえば、reg ex108(1)が、プログラマブルハードウェアデバイス118(1)で2,000の計算素子を必要とすると推定されることもあり、reg ex108(5)は、7,000の計算素子を必要とすると推定されることもある。
【0058】
ブロック906は正規表現をセットに配分し、ここで各セットはプログラマブルハードウェア118において使用可能な物理リソース内に収まる。この推定はまた、通信および制御(CC)論理、ならびにローカルストレージ要件を含むことができる。たとえば、上記の図3において、使用可能な物理リソースはプログラマブルハードウェアの計算論理容量302であり、セットのうちの1つはreg ex108(1)、108(2)、108(6)、およびCC306(1)を含む。
【0059】
ブロック908は、各セットにカスタマイズされた制御および通信論理を追加し、ブロック910は、各セットに対してHDLファイルを生成する。ブロック912は、構成仕様204(1)のような構成仕様を生成する。ブロック914は、各HDLファイルから構成バイナリを生成する。たとえば、HDLファイルは、結果として構成バイナリ201(1)をもたらすことができる。
【0060】
図10は、図9に関して前述された正規表現904による物理リソース要件の推定を表す流れ図を示す。ブロック1002は、正規表現を特定の計算論理配列に関連付ける。たとえば、ストリング「home」の正規表現は、200の回路素子の特定の配列を伴うことがある。この関連付けは、正規表現を生成するブロック1002(1)、ハードウェアCADツールがreg ex内の項目を論理方程式に変換する方法を決定するブロック1002(2)、reg exの回路要件を決定するブロック1002(3)により作成されてもよい。たとえば、サンプルの正規表現は、CADツールによる論理方程式に変換されてもよく、結果の要件が監視される。したがって、正規表現入力に基づいて回路要件の予測を可能にするモデルが構築されてもよい。
【0061】
関連付けが行なわれると、ブロック1004は、冗長論理を識別し、それらの冗長を除去するように統合して、統合された論理を形成する。たとえば、複数の正規表現は、共通のルートストリングを伴うか、または回路で表現される場合に冗長回路をもたらすこともあるその他の共通性を有することができる。これらの冗長性は除去することができ、効率を高めることができる。その1つの実施態様は、図29に関して後段で、スーパーセットのコンテキストでさらに詳細に説明される。
【0062】
ブロック1006は、ローカル状態ストレージ308が呼び出されるかどうか、および呼び出される場合に必要とされるメモリリソースなどのような、ローカルストレージ要件を推定する。ブロック1008は、CADツール固有の修正率を統合された論理およびローカルストレージ要件に適用する。たとえば、特定のCADツールは、特定のreg exによって呼び出された論理方程式を例外的な方法で計算ブロックに変換することができ、したがって物理リソースの推定がさらに正確になるように修正率が入力されてもよい。
【0063】
ブロック1010は、推定される物理リソース要件を生成する。たとえば、「credit card」を検索するためのreg exは、製造業者XによるFPGAタイプAで推定一千の回路素子を必要とすることがある。この推定は、reg exがプログラマブルハードウェア118の物理リソース内に収まるかどうかを決定するために使用されるブルートフォースの試行錯誤と比較すると、大幅に高速で、リソース集約的ではなく、人間の対話をほとんどまたは全く必要としない。さらに、このプロセスは、さまざまな容量を備えるプログラマブルハードウェアの複数のタイプに容易に適用することができ、新しいハードウェアへのreg exの迅速な再配置が可能になる。
【0064】
図11は、図8に関して前述されたプログラマブルハードウェア808での生成された構成情報の実行を表す流れ図である。1つの実施態様において、後続のブロックは、PHSC114によって実行されてもよい。
【0065】
ブロック1102は、構成情報212およびコーパスデータ116を受信する。たとえば、構成ファイルは、スパム検索のために正規表現108を具現する構成バイナリ210を含むことができ、コーパスデータは、スパムを検索される未加工の電子メールであってもよい。
【0066】
ブロック1104は、実行シーケンス508からの実行されていない構成バイナリをプログラマブルハードウェア118にロードする。ブロック1106は、コーパス116の全部または一部を処理のためにプログラマブルハードウェア118にロードする。ブロック1108は、ロードされたコーパスデータ116に対してプログラマブルハードウェア118で計算論理120を実行する。ブロック1110は、計算論理のプログラマブルハードウェアの実行からの結果を提供する。コーパスの追加の部分が残っている場合、ブロック1112は、フローをブロック1106に戻し、コーパスの別の部分を処理のためにプログラマブルハードウェア118にロードする。それ以外の場合で、ブロック1112においてコーパスの追加の部分が残っていなければブロック1114は、追加の構成バイナリが実行シーケンス508に存在するかどうかを決定する。追加の構成バイナリが実行シーケンス508に残っている場合、ブロック1116は、実行シーケンスを次の構成バイナリに増分して、フローを1104に戻す。追加の構成バイナリが実行シーケンス508に残っていない場合、ブロック1118は、1つまたは複数の構成バイナリの実行により得られた結果を統合する。
【0067】
図12は、正規表現の動的な変更を示す流れ図1200である。reg exは、時間の経過に伴って変化してもよい。たとえば、インコの売れ行きの新たな一時的流行により、「parakeet」がスパム検索リストに追加されるという結果をもたらすこともある。あるいは、新種のクレジットカードビジネスが加わって、「credit card」がスパム検索リストから削除されるという結果をもたらすこともある。
【0068】
限定の目的ではなく説明を簡単にするため、正規表現のリストへの変更は一般に、新しい正規表現の追加、または既存の正規表現の削除という2つのカテゴリに分類されると考えられてもよい。新しい正規表現が追加されるべきであるとブロック1202が決定する場合、ブロック1204は、新しい正規表現の構成バイナリを生成する。次いで、ブロック1206は、この構成バイナリを実行のシーケンス508に追加する。
【0069】
変更は既存の正規表現の削除であるとブロック1202が決定する場合、ブロック1208は正規表現を廃棄リストに追加する。プログラマブルハードウェア118で計算論理120を実行した後、ブロック1210は、reg exからの結果を廃棄する。一部の実施態様において、この廃棄はアクティブな削除であってもよく、また他の実施態様において、廃棄されたreg exからの結果はPHSC114によってレポートされていなくてもよい。廃棄リストでreg exの処理を続行することは無駄が多いと思われることもあるが、各構成バイナリ内のreg exの並列処理を考えると、実際には非常に効率的である。図6に関して前述されているように、構成バイナリ内のreg exは並列に実行される。したがって、構成バイナリが大量にフラグメント化した状態になるまでは、構成バイナリ全体を再コンパイルするよりも、多数のreg exを並列に実行して、それらの結果のうちの1つを廃棄するほうが安価である。さらに、ユーザは、廃棄リストからreg exを単に除去してそれを再イネーブルすることにより、以前廃棄されたreg exを容易に復元することができる。未使用の/取り消されたreg exにより生じたフラグメンテーションに対処するための再コンパイルをどのように、いつ行なうかについての決定は、後段で図19〜図20関してさらに詳細に説明される。
【0070】
ブロック1212は、プログラマブルハードウェア118からの結果を、現在の構成に含まれていない追加の正規表現の結果でパッチする。これは、最近システムに追加されたが、まだプログラマブルハードウェア118での実行のために構成バイナリ210にはコンパイルされていないreg exの場合のように、一部のreg exが補助の正規表現処理モジュール124で実行される場合に有用となることがある。
【0071】
ブロック1214は、補助の正規表現処理モジュール124で実行されている正規表現のような、現在の構成には含まれていない正規表現を、現在の構成に追加することができる。これらの正規表現は、実行シーケンス508の一部である構成バイナリ210に組み入れるためにコンパイルモジュール112によってコンパイルされてもよい。ブロック1216は、新しい構成バイナリの生成中に、廃棄リストに存在する正規表現を除去して、廃棄を一掃する。
【0072】
再配分を介するフォールトトレランス
プログラマブルハードウェアデバイス118を含む機器は、故障することもある。図13〜図15は、残りの機能可能なプログラマブルハードウェアデバイスに構成バイナリを再配分することによるフォールトトレランスのサポートを示す流れ図1300である。これらの図において、矢印1302により指示されるようにページを下方に進むと時間が増大する。図13を始めとして、PHIM504は、2つのプログラマブルハードウェアデバイス118(1)および118(2)に結合されることが示される。この例の場合、プログラマブルハードウェア118(1)および118(2)がバイナリ互換である1304、すなわち、いずれのプログラマブルハードウェアでも再コンパイルすることなく同一の構成バイナリ210が実行されてもよいと仮定する。また、実行シーケンス508が、構成バイナリ210(1)、210(2)、210(3)、210(4)、210(1)、210(2)、210(3)、210(4)のためのものであるというように仮定する。図13は、通常の操作1306を示す。通常の操作1360中に、1308において、PHIM504は、構成バイナリ210(1)および210(2)をそれぞれプログラマブルハードウェア118(1)および118(2)にロードする。その結果得られた計算論理120(1)および120(2)は実行し、その結果はPHIM504に返される。同様に、1310において、構成バイナリ210(3)および210(4)はロードされて実行される。1312において、シーケンスは繰り返し、処理のために構成バイナリ210(1)および210(2)をロードする。これは、プログラマブルハードウェアを仮想化することの汎用性を示す。4つの構成バイナリ210(1)〜210(4)は、2つのプログラマブルハードウェア118(1)および118(2)だけで実行される。
【0073】
図14は、この流れ図を継続して、故障の発生および移行1402を説明する。1314において、構成バイナリ210(3)はプログラマブルハードウェア118(1)に正常にロードされ、一方構成バイナリ210(4)のプログラマブルハードウェア118(2)へのロードは試みられたが、使用不可能であったために失敗した。1316において、構成バイナリ210(3)に基づいて計算論理12(3)からPHIM504に結果が返された後、PHIM504は、構成バイナリ210(4)を処理のためにプログラマブルハードウェア118(1)にロードする。
【0074】
フローを図15に継続して、フェイルセーフ操作1502が示される。プログラマブルハードウェア118(2)は引き続き使用不可能であり、プログラマブルハードウェア118(1)は、実行シーケンス508にリストされている構成バイナリの実行を処理する。1318において、プログラマブルハードウェア118(1)は、実行シーケンス508で次の順番の構成バイナリ210(1)をロードして実行する。1320において、プログラマブルハードウェア118(1)は構成バイナリ210(2)をロードして実行し、1322において、構成バイナリ(3)がロードされて実行され、さらに1324において、構成バイナリ210(4)がロードされて実行される。このように、実行シーケンス508内に存在するリストは完全に実行されており、実行シーケンス508によって呼び出されると続行することができる。プログラマブルハードウェア118(2)の損失により実行パフォーマンスは低下しているが、reg ex108(1)〜108(R)の処理は引き続き継続することができた。構成が仮想であるため、この動的な再配分が可能になる。スパムフィルタリングの例に戻ると、プログラマブルハードウェア118(2)の故障は、システムが完全に使用不可となる結果をまねくのではなく、単にスパムフィルタリングのパフォーマンスを低下させる。
【0075】
複数のプログラマブルハードウェア118を有する一部の実施態様において、構成バイナリは故障に備えるために過小に割り振られてもよい。たとえば、各プログラマブルハードウェアデバイスの実行シーケンスは、後に故障中に消費されうるアイドル状態のプレースホルダを含むことができる。
【0076】
スペアリングを介するフォールトトレランス
図16〜図18は、予備の機能可能なプログラマブルハードウェアデバイスの使用を介するフォールトトレランスのサポートを示す流れ図1600を備える。上記と同様に、これらの図において、矢印1602により指示されるようにページを下方に進むと時間が増大する。
【0077】
図16を始めとして、PHIM504は、2つのプログラマブルハードウェアデバイス118(1)および118(2)に結合されることが示される。上記のように、この例の場合、プログラマブルハードウェア118(1)および118(2)がバイナリ互換である1604、すなわち、いずれのプログラマブルハードウェアでも再コンパイルすることなく同一の構成バイナリ210が実行されてもよいと仮定する。また、実行シーケンス508が、構成バイナリ210(1)、210(2)、210(3)、210(4)、210(1)、210(2)、210(3)、210(4)のためのものであるというように仮定する。
【0078】
図16は、通常の操作1606を示す。通常の操作1606中に、1608において、PHIM504は、構成バイナリ210(1)および210(2)をそれぞれプログラマブルハードウェア118(1)および118(2)にロードする。その結果得られた計算論理120(1)および120(2)は実行し、その結果はPHIM504に返される。同様に、1610において、構成バイナリ210(3)および210(4)はロードされて実行される。1612において、シーケンスは繰り返し、処理のために構成バイナリ210(1)および210(2)をロードする。
【0079】
図17は、フロー1600を継続して、故障の発生およびスペアリング1702を説明する。この図において、1614において、プログラマブルハードウェア118(1)は構成バイナリ210(3)を正常にロードし、一方プログラマブルハードウェア118(2)は構成バイナリ210(4)をロードすることができなくなった。プログラマブルハードウェア118(2)が失敗したと決定すると、PHIM504は、構成バイナリ210(4)を備えてあった予備のプログラマブルハードウェアデバイス118(3)にリダイレクトすることができる。
【0080】
図18は、予備のプログラマブルハードウェアに構成バイナリをリダイレクトすることによる通常の操作の再開1802を示す図である。1616において、プログラマブルハードウェア118(1)は構成バイナリ210(1)をロードし、一方予備のプログラマブルハードウェア118(3)は構成バイナリ210(4)をロードした。
【0081】
1618において、PHIM504は、実行シーケンス508に指定されているように構成バイナリをロードして実行する。したがって、構成バイナリ210(2)および210(3)は、それぞれプログラマブルハードウェア118(1)および118(3)にロードされる。1620において、構成バイナリ210(4)および210(1)は、それぞれプログラマブルハードウェア118(1)および118(3)にロードされ、実行シーケンス508を再度開始する。
【0082】
プログラマブルハードウェア118のコンテキストにおけるスペアリングは、いくつかの利点をもたらす。構成バイナリが完全構成をカプセル化するので、構成バイナリはプログラマブルハードウェアに迅速にロードおよびアンロードされる。これは、サーバインスタンスを導入するために必要な操作の複雑さおよび時間とは対照的である。したがって、予備のプログラマブルハードウェアデバイスは、非常に迅速にアクセスしてサービスに参加させることができる。
【0083】
フラグメンテーションの緩和
前述のように、時間の経過に伴って、処理されるべき正規表現のリストは変化する。スパムフィルタリングの例において、新しいreg exは、他のreg exが除去される間に追加される。図19は、構成バイナリにわたる正規表現のフラグメンテーション緩和を示す概略図1900である。1つの実施態様において、フラグメンテーション緩和は、PHSC114内で実行されてもよい。
【0084】
この追加および除去は、時間の経過に伴って、「ライブ(生き)の」すなわち廃棄されたreg exの中で引き続き必要なreg exのフラグメンテーションをまねくことになる。1902において、複数のフラグメント化された構成バイナリが、フラグメンテーション緩和の前に示される。この図において、網掛けは、未使用の/取り消されたreg exを示す1904。この例において、reg ex108(1)、108(3)、108(5)、108(7)、および108(9)は、取り消されている。たとえば、これらは、会社の新種のクレジットカードビジネスにより現在はスパムリストから削除されている「credit card」および変種のスパムフィルタに関連する可能性もある。reg ex108(2)、108(4)、108(6)、および108(8)は、引き続き使用されている。そのため、それらのreg exを含む4つの構成バイナリ210(20)〜210(23)がフラグメント化された状態になり、わずかな望ましいreg exの間にいくつかの未使用のreg exが散在している。これらのフラグメント化された構成バイナリを実行することで、使用可能なプログラマブルハードウェアのリソースを浪費する。したがって、このフラグメンテーションを緩和することが望ましい。
【0085】
1906において、新しく追加されたreg ex108(10)は、補助のreg ex処理モジュール124で実行する。次回の構成バイナリのコンパイル中に、構成バイナリ内にスペースが使用可能である場合、reg ex108(10)は、プログラマブルハードウェア118で実行するために、処理モジュール124での実行から構成バイナリ210へ転送されてもよい。
【0086】
1908において、フラグメンテーション緩和後の構成バイナリが示される。未使用のreg exは廃棄されており、1910において、引き続き使用されたそれらのreg exおよびreg ex108(10)は、2つの新しい構成バイナリにコンパイルされた。4つの構成バイナリがソフトウェアにおいて1つのreg exで実行されていたが、ここで2つの構成バイナリが実行する。
【0087】
図19は、すべてのアクティブなreg ex108の完全な再コンパイルを示す。しかし、コンパイルは、時間およびシステムリソースの点から高価である。一部の実施態様において、完全再コンパイルをあまり頻繁には実行しない間、システムコストを最小化するために選択的に再コンパイルを行なうことが望ましいこともある。
【0088】
図20は、選択的な再コンパイルによるフラグメンテーション緩和を示す概略図2000である。選択的または完全に再コンパイルするかどうかに関する決定は、コンパイル時間に対してハードウェアおよびソフトウェアの潜在的な実行効率を重み付けすることを伴う。
【0089】
2002において、フラグメンテーション緩和前の構成バイナリ210(30)〜210(33)が示される。上記のように、未使用のまたは取り消されたreg exは網掛けで示される2004。この例において、reg ex108(1)、108(3)、108(5)、108(7)、および108(9)は、取り消されている。reg ex108(2)、108(4)、108(6)、および108(8)は、引き続き使用されている。2006において、新しく追加されたreg ex108(10)は、次の構成バイナリのコンパイルを待つ間、補助のreg ex処理モジュール124で実行する。
【0090】
この図において、コンパイル時間に対してハードウェアおよびソフトウェアの潜在的な実行効率を重み付けすることは、結果として1つの再コンパイルのリソースが使用可能になると仮定する。初期コンパイル中に生成されたリソース推定情報は取り出され、構成バイナリは最大の未使用のスペースから最小の未使用のスペースにソートされる。構成バイナリ210(30)は100%の未使用スペースを有し、構成バイナリ210(31)は約66%の未使用スペースを有し、構成バイナリ210(32)は約55%の未使用スペースを有し、構成バイナリ210(33)は約33%の未使用スペースを有する、
【0091】
1つの実施態様において、選択的再コンパイルは、補助のreg ex処理モジュール124によって実行されているreg ex108(1)をハードウェアに移動し、次いでreg exを最大の未使用スペースを持つ構成バイナリに移動することを伴うことができる。この図において、構成バイナリ210(30)および210(31)は、破線によって指示されるように2008、選択的再コンパイルのために選択される。
【0092】
アクティブなreg exは、N個の構成(1つのコンパイルが使用可能なので、この場合はN=1)が満たされるまで結合される。この図において、構成バイナリ210(30)は空になると廃棄され、構成バイナリ210(31)のreg ex108(2)は、2010においてreg ex108(2)と結合されて構成バイナリ210(34)を生成する。2012において、新しくコンパイルされた構成バイナリ210(34)および変更なしの構成バイナリ210(32)および210(33)を示す、選択的フラグメンテーション移行後の結果が表される。これは、ソフトウェアベースのreg exの数を0に減少させ、合計ハードウェア構成の数を4から3に減少させる。したがって、最小のコンパイルリソースが使用され、しかも全体的なフラグメンテーションを軽減している。
【0093】
タスクの優先順位付け、およびリソースの再利用
一部の実施態様において、タスクを優先順位付けすることが有益である場合がある。たとえば、今日のスパムが主に「クレジットカード」広告を扱うこともあり、したがってこの語句を見つけるように設計されるreg exは、これらの広く行き渡る出現を素早く除去するために、より高い優先度を与えられてもよい。
【0094】
図21は、正規表現の優先度を認識するハードウェア割り当て、ならびにそれらの正規表現の構成バイナリへのパッキングおよびスケジューリングを示す概略図2100である。この図において、通常の優先度のreg exは白で指定され、中程度の優先度のreg exは斜線で指定され、最高の優先度のreg exは影付きである。2102において、実行のための正規表現が示される。それらの中で、reg ex108(1)、108(6)、および108(8)は、最高の優先度である。reg ex108(5)は中程度の優先度として設計され、残りの108(2)、108(3)、108(4)、108(7)、108(9)、および108(10)は通常の優先度である。
【0095】
2104において、パックされ、コンパイルされて、実行のために順序付けられたreg exが示される。より高い優先度を有するreg exは共にパックされ、一部の実施態様において、より高速なプログラマブルハードウェアデバイス118で実行するよう設計されるか、実行シーケンス508の優先度を受信するか、またはさらに頻繁な実行のために実行シーケンス508の複数ポイントに配置されてもよい。示されているように、構成バイナリ210(41)は、すべての高い優先度のreg exに対して十分な容量を有する。構成バイナリ210(42)は、中程度の優先度のreg ex108(5)を含み、使用できる残りの追加の容量があったので通常の優先度の108(4)も含む。構成バイナリ210(41)および210(42)は共に、そのより高い優先度の内容を考慮してより高速なプログラマブルハードウェアデバイスで実行するために2106により示されるように指定されてもよい。通常の優先度のreg exを含む構成バイナリ210(43)および210(44)は、より遅いプログラマブルハードウェアデバイスで実行するように2108指定されてもよい。
【0096】
構成バイナリのパッキングおよび/または構成バイナリの実行シーケンスの優先度割り当ては、特定のタスクが先に実行されて、それらの結果が後の処理に影響を及ぼすようにするか、または後の処理全体を除去するように行なわれてもよい。たとえば、「zero down home mortgage financing bonanza」を探すreg exは、この項目の組み合わせがスパムメッセージのさらに容易な識別に役立つ可能性があることを前提に、「home mortgage」のreg exよりも高い優先度を与えられてもよい。
【0097】
図22は、構成バイナリの実行を再配分することによるアイドルプログラマブルハードウェアリソースの再利用を示す流れ図2200である。上記と同様に、この図において、矢印2202により指示されるようにページを下方に進むと時間が増大する。
【0098】
この例の場合、プログラマブルハードウェア118(1)および118(2)がバイナリ互換である2204、すなわち、いずれのプログラマブルハードウェアでも再コンパイルすることなく同一の構成バイナリ210が実行されてもよいと仮定する。また、初期実行シーケンス508が、構成バイナリ210(1)、210(2)、210(3)、210(4)、210(1)、210(2)、210(3)、210(4)のためのものであるというように仮定する。
【0099】
図2206において、通常の操作が示される。2208において、PHIM504は、構成バイナリ210(1)および210(2)をそれぞれプログラマブルハードウェア118(1)および118(2)にロードする。結果が返され、2210において、PHIM504は、構成バイナリ210(3)および210(4)をそれぞれプログラマブルハードウェア118(1)および118(2)にロードする。このプロセスは、初期実行シーケンス508全体を通過するように続行することができる。
【0100】
しかし、それぞれ構成バイナリ210(2)および210(4)に基づく計算論理120(2)および120(4)がアイドルであると仮定する。おそらくは、それらの計算論理は中断されていたか、または計算論理120(1)および120(3)の前に完了していた。初期実行シーケンスが連続して続行していた場合、プログラマブルハードウェアリソースは、これらのアイドル構成バイナリを待つか、または中断された構成バイナリを実行して浪費されていたであろう。したがって、この例において、初期実行シーケンスは、リソースを再利用するように変更される。
【0101】
2212において、このアイドル時間の再利用は、引き続きアクティブな構成バイナリの再配分を通じて示される。したがって、2214において、PHIM504は、構成バイナリ210(1)および210(3)をそれぞれプログラマブルハードウェア118(1)および118(2)にロードする。2216において、プログラマブルハードウェア118(1)および118(2)は、再度、構成バイナリ210(1)および210(3)に基づく計算論理120(1)および120(3)を実行する。計算論理120(2)および120(4)はアイドルであるので、これらはロードされて実行されることはない。したがって、120(2)および120(3)のような引き続き実行するよう指定されている計算論理は、アイドルまたは中断した計算論理によって妨げられることなく実行し続ける。
【0102】
前述のように、特定のreg exが他のreg exよりもさらに重要である場合、これらはさらに多くのリソースを与えられてもよい。図23および図24は、構成バイナリおよびその内部の正規表現の優先順位付けを示す流れ図2300である。この図において、矢印2302により指示されるようにページを下方に進むと時間が増大する。プログラマブルハードウェア118(1)および118(2)は、バイナリ互換であると仮定する2304。
【0103】
図23を参照すると、2306において、等しい優先度の操作が示される。任意の計算論理内のタスクには優先度が与えられない。実行シーケンス508は、構成バイナリ210(1)、210(2)、210(3)、210(4)、210(1)、210(2)、210(3)、210(4)などのためのものである。2308において、構成バイナリ210(1)および210(2)は、実行のために、それぞれプログラマブルハードウェア118(1)および118(2)にロードされる。2310において、構成バイナリ210(3)および210(4)は、実行のために、それぞれプログラマブルハードウェア118(1)および118(2)にロードされる。
【0104】
図24にフローを続行すると、2402において、構成バイナリ210(1)内のreg exは高い優先度を与えられており、そのほんのわずかなタイムスライスが増大されている。したがって、実行シーケンス508は、構成バイナリ210(1)、210(1)、210(1)、210(1)、210(1)、210(2)、210(1)、210(3)、210(1)、210(4)を実行するように変更される。したがって、2312において、構成バイナリ210(1)は、プログラマブルハードウェア118(1)および118(2)の両方にロードされる。2314において、両プログラマブルハードウェア上に計算論理120(1)がすでに存在するので、構成バイナリはロードされず、計算論理が再度実行される。
【0105】
2316において、計算論理120(1)は再度プログラマブルハードウェア118(1)で実行し、構成バイナリ210(2)はプログラマブルハードウェア118(2)にロードされて実行される。2318において、計算論理120(1)は再度実行し、構成バイナリ210(3)はロードされてプログラマブルハードウェア118(2)で実行される。2320において、計算論理120(1)は再度実行し、構成バイナリ210(4)はPHIM504によってプログラマブルハードウェア118(2)にロードされる。したがって、この例において、構成バイナリ210(1)内に含まれる高い優先度のreg exは、時間の70%で実行された。
【0106】
タスクのマージ
正規表現処理システム102の操作中、複数のユーザおよび/またはアプリケーションからのreg exが受信されてもよい。たとえば、スパムフィルタリングシステムは、ユーザまたは分析ソフトウェアによりフラグ設定されたスパムのようなスパムを指示する複数のストリングのストリームを受信することができる。図25は、コンパイルおよび/または実行における複数のユーザ/アプリケーションによる正規表現のマージャーを示す流れ図2500である。そのようなマージは、時間およびシステムリソースの点から比較的高価であるプログラマブルハードウェアの再構成を最小化することにより速度を増大させる。
【0107】
コンパイルマージ中、2502において、reg ex108(1)はユーザAから受信され、reg ex108(2)はユーザBから受信される。2504において、コンパイルモジュール112はこれらのreg exを処理し、これらがいずれも同じ構成バイナリで実行できることを決定し、2506において、reg ex108(1)および108(2)を含む構成バイナリ210(51)を生成する。2508において、ユーザAおよびBからの入力がPHSC114において受信される。2510において、PHIM504は、実行のために構成バイナリ210(51)をロードし、2512においてプログラマブルハードウェアは構成バイナリを実行して、結果をPHIM504に返す。次いで、PHSC114は、結果をそれぞれのユーザに返す。利点の中でも特に、マージは、コンテキスト切り替えの必要性をなくす。たとえば、マージしなければ、ユーザAとユーザBとの間でコンテキストを切り替えることが必要になる。したがって、ユーザAのreg ex108(1)は、reg ex108(2)が待機している間に実行していることになる。reg ex108(1)が完了すると、reg ex108(2)は実行する。マージにより、両方が同時に実行することができる。
【0108】
このプロセスのセキュリティは、単に基礎をなすコンパイルモジュール112およびPHSC114はそれらの2つの異なるreg exが同時に実行されたことを認識しているので、マージ中に保持される。ユーザAおよびユーザBは、マージャーに気付いてはおらず、それぞれの結果は別々のままである。
【0109】
遅延構成ページング
マージに加えて、複数のアプリケーションまたはユーザは、正規表現処理システム102の操作中にリソースを共有することができる。図26は、この共有を容易にするための構成バイナリの遅延構成ページングを示す流れ図2600である。遅延ページングは、タスクの遅延を考慮に入れて、それらのタスクの統合を可能にし、プログラマブルハードウェアの再構成を最小化することができる。
【0110】
この図において、矢印2602により指示されるようにページを下方に進むと時間が増大する。2604において、PHSC114は、コーパスの第1の部分のような、入力Aを持つreg ex108(80)を受信する。PHSC114は、プログラマブルハードウェアでの実行のためにreg exをPHIM504に渡し、結果をユーザに返す。
【0111】
2606において、PHSC114は、処理のためにreg ex108(81)を受信する。しかし、reg ex108(80)の追加の処理が発生することが予想されていた。その結果、reg ex108(81)の処理が遅延する。
【0112】
2608において、コーパスの第2の部分のような、今回は入力Bを持つreg ex108(80)が再度要求される。プログラマブルハードウェア118(2)はすでに、ロードされたreg ex108(80)を組み入れる構成210(80)を有しているので、再構成のための遅延はなく、処理は開始することができる。次いで、これらの結果はユーザに返される。
【0113】
2610において、reg ex108(80)は完了し、遅延したreg ex108(81)はここでロードされてプログラマブルハードウェア118(2)によって実行されてもよい。次いで、これらの結果はユーザに返されてもよい。
【0114】
したがって、一部の実施態様において、作業は、現在ロードされておらず、受信された順序と比較して順不同に実行される構成バイナリ210について格納されてもよい。それにより、プログラマブルハードウェア118への構成バイナリ210のロードの回数と頻度を最小化することによって、さらに大幅に効率を高めることができる。
【0115】
サブバイナリコンパイル
コンパイルは、プログラマブルハードウェア118を使用するように設計された構成バイナリ全体の細分性を下回る細分性のレベルにおいて生じることがある。一部の再構成可能なハードウェアデバイスは、部分的な動的再構成、すなわち、デバイス全体よりも少ない細分性における再構成を考慮に入れる。図27は、後に完全な構成バイナリを作成するよう結合されうる構成バイナリサブエレメントのコンパイルを示す流れ図2700である。
【0116】
プログラマブルハードウェア208のCADツールによって必要とされる実行時間は、計算論理120のサイズに対して超線形に増大する。そのため、パフォーマンスの利点は、より大きい構成バイナリまたはHDLファイルをより小さいファイルに分割して、それらのより小さいファイルを別個にコンパイルすることによって認識することができる。次いで、結果として得られるサブエレメントは、完全な計算論理を形成するように結合されてもよい。より高速なCADツール208のコンパイル時間に加えて、バイナリは、多大なリソースおよび時間を要する全構成バイナリの再コンパイルを必要とするのではなく、それらの事前構成されたサブエレメントを操作することができるので、デフラグおよび再構成を行ないやすい。それらのサブエレメントのパッキングは、(構成全体に対し静的に1回ではなく)動的に行なわれてもよい。
【0117】
この図において、正規表現108(1)および108(2)、ならびに通信および制御論理(CC)306は、サブエレメントのコンパイルのために構成されたコンパイルモジュール112によって受信される。HDLコンパイラ202は、各々に対してHDLファイルを作成する。したがって、RE108(1)に対してHDLファイル2702(1)、RE108(2)に対してHDLファイル2702(2)、RE108(3)に対してHDLファイル2702(3)がコンパイルされる。CADツール208は、サブエレメントの作成のためにそれらのHDLファイル2702(1)〜2702(3)を受け入れる。結果としてreg ex108(1)は構成バイナリサブエレメント2704(1)をもたらし、reg ex108(2)は構成バイナリサブエレメント2704(2)をもたらし、CC306は構成バイナリサブエレメント2704(3)をもたらす。
【0118】
バイナリサブエレメントは実行のために選択されてもよいので、バイナリマージモジュール2706は、これらのサブエレメントをまとめて結合構成バイナリ2708を生成することができる。次いで、この結合構成バイナリ2708は、ロードされてプログラマブルハードウェア118によって実行されてもよい。
【0119】
計算の結合およびスーパーセット
追加のパフォーマンスの利点は、計算およびスーパーセットの組み合わせを通じて達成されうる。図28は、正規表現を結合する計算を示す概略図2800である。類似または重複するreg exのような計算は、結合されてもよい。たとえば、いくつかのスパムフィルタリングアプリケーションおよびユーザが、処理のためにreg exのグループをサブミットすると仮定する。それらのグループ内に、共通の実行のために見出されてパックされうる重複があってもよい。
【0120】
2802において、実行のための正規表現が示される。これらは、2804において、reg ex108(1)〜108(6)を含むタスクAを含む。さらに実行のためにreg exに含まれるのは、2806において、reg ex108(1)、108(4)、108(6)、108(7)、108(8)、および108(9)を含むタスクBである。重複するreg exは、影付きで示される。reg ex108(1)、108(4)、および108(6)は、2つのタスク間で共通である。計算の結合を行なわない場合、12のreg exすべてを包含するために4つの構成バイナリが必要であったことになる。
【0121】
しかし、計算の結合を通じて、この数は3つの構成バイナリに減少されうる。2808において、結合されてコンパイルされたreg exが示される。構成バイナリ210(61)は、reg ex108(1)、108(4)、および108(6)を含み、構成バイナリ210(62)および210(63)は、重複することなく、残りの正規表現を組み入れる。追加の利点は、タスクA2804とタスクB2806間を切り替える場合に、4つではなく、1つの再構成しか必要ないということである。
【0122】
図29は、重複するかまたは類似する部分を有する正規表現のスーパーセットを示す概略図2900である。上記のように、reg exの重複または類似する部分は網掛けで示される。2902において、実行のための正規表現が示される。reg ex108(1)、108(2)、および108(3)は、実行を待っている。ここで示されるように、reg ex108(2)の一部は、reg ex108(1)と類似している。たとえば、reg ex108(1)がストリング「home mortgage」用であり、reg ex108(2)がストリング「refinancing およびequity from your home mortage」用であると仮定する。したがって、108(2)は、ストリング「home mortgage」の一部の、108(1)と類似する部分を含み、それは影付きで示される。
【0123】
コンパイルモジュール112によるコンパイル中に、類似または同一の部分は結合される。2904において、パックされてコンパイルされた正規表現のスーパーセットが示される。構成バイナリ210(71)内に、reg ex108(2)が、108(1)に共通な部分、108(3)、およびCC306(1)と共に示される。同じ作業がreg ex108(2)の共通部分によって行なわれるので、reg ex108(1)は構成バイナリ210(71)に含まれていない。実行後、PHSC114は、結果を分離して、それらを108(1)がプログラマブルハードウェアで別々に実行されたかのように返す。
【0124】
スーパーセットにより、実行に必要な計算リソースの低減が可能になる。スーパーセットはまた、より多くの等価の正規表現を、より少ない構成バイナリで実行できるようにすることで、再構成の必要性を減少させる。
【0125】
異種のFPGAの処理
システム102内のプログラマブルハードウェア118は、同一である必要はないか、またはビットストリーム互換でさえなくてもよい。システム102は、さまざまなサイズ、速度、グレード、製造業者、オンボードメモリ容量などのデバイスを含むことができる。異種ハードウェアが存在する場合、プログラマブルハードウェアデバイス118は、既存のreg ex配分、およびデバイスのワークロード(他のデバイスよりも使用されることが少ないデバイスもある)、およびreg ex優先度に応じて使用の対象とされてもよい。
【0126】
対象となるプログラマブルハードウェア118の選択は、複数の因子に影響を及ぼす。それらの因子は、異なるハードウェアに基づくリソース要件の推定の変動を含む。たとえば、ある製造業者が他の製造業者とは異なる基本論理素子を使用し、その結果reg exがプログラマブルハードウェア118で実施される方法に差異が生じることもある。
【0127】
対象となるプログラマブルハードウェア118の選択により影響を受けるもう1つの因子は、パッキング能力である。パッキング能力は、プログラマブルハードウェア118の容量を反映する。たとえば、より大きいデバイスは、小さいデバイスよりも多くのreg exを保持することができる。これは、複数の構成にわたりreg exが分割されうる場所および方法に影響を及ぼす。
【0128】
部分的なreg exをマップするための実現可能性もまた、対象プログラマブルハードウェアの決定中に影響を受けることがある。たとえば、時として、中間データのサイズが入力コーパスデータとほぼ同じ規模である場合、オンボードメモリはパフォーマンスにとって有益となりうる。そのような状況において、対象プログラマブルハードウェアの決定は、ハードウェアがそれを処理する実現可能性を考慮に入れることができる。
【0129】
システムコントローラの操作は、さまざまなデバイスがさまざまなコマンドで制御されうることを考えると、対象プログラマブルハードウェアによっても影響を受ける。最終的に、仮想化の「ポータビリティ」は、対象となるプログラマブルハードウェアの差異により影響を受ける。たとえば、スペアリングまたは再配分のような、フォールトトレランスを迅速に調整することに関して、本来故障したデバイスに割り振られるreg exは、再コンパイルを行なうことなく他のビットストリーム互換のプログラマブルハードウェアに移行することができる。
【0130】
構成の事前取り出し/ページング
複数のアプリケーションまたはユーザが同じ物理プラットフォームを共有する場合、固有の構成バイナリ210またはサブエレメントの呼び出しが予測されることもある。したがって、構成バイナリは、メモリ事前取り出しおよび投機的実行と類似する方法でプリロードされてもよい。
【0131】
FPGAとの直接通信
前述のように、一部の実施態様において、PHSC114は、ユーザとの間のスケジューリングおよびデータフローを処理することができる。次いで、プログラマブルハードウェア118は、入力データの再生、出力データの再配列、再構成の順序付けなどを処理する機能を含むことができる。この実施態様におけるプログラマブルハードウェア118は、状態情報を格納するための追加の外部メモリを必要とすることがある。
【0132】
もう1つの実施態様において、プログラマブルハードウェア118は、自ら、最初に入力データの受信を最初に処理することができる。この実施態様において、プログラマブルハードウェア118は、入力データを受信し、現在ロードされている計算論理120による検索の実行を開始する。プログラマブルハードウェア118は、入力データを、ソフトウェアで実行しているPHSC114の一部に中継して返す。PHSC114のこのソフトウェアベースの部分は、データの再生、出力データの再配列、およびプログラマブルハードウェア118の再構成に責任を負う。
【0133】
結論
例示の方法の特定の詳細は、本明細書において提示される図面およびその他の流れ図に関して説明されるが、図面に示される特定の動作が説明されている順序で実行される必要はなく、変更されてもよく、および/または状況に応じて全体が省略されてもよいことを理解されたい。本出願において説明されるように、モジュールおよびエンジンは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせとして実施されてもよい。さらに、説明される動作および方法は、コンピュータ、プロセッサ、またはメモリに格納された命令に基づくその他のコンピューティングデバイスにより実施されてもよく、メモリは1つまたは複数のコンピュータ可読ストレージ媒体(CRSM)を備える。
【0134】
CRSMは、格納されている命令を実施するためにコンピューティングデバイスによってアクセス可能な任意の使用可能な物理媒体であってもよい。CRSMは、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電気的消去再書き込み可能読み出し専用メモリ(EEPROM)、フラッシュメモリその他のソリッドステートメモリ技術、コンパクトディスク読み取り専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)またはその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたはその他の磁気記憶装置、もしくは望ましい情報を格納するために使用することができ、コンピューティングデバイスによってアクセスすることができる任意の他の媒体を含むことができるが、これらに限定されることはない。
【技術分野】
【0001】
本発明は、仮想化超並列プログラマブルハードウェアによる正規表現の検索に関する。
【背景技術】
【0002】
正規表現検索は、電子メールスパムフィルタリングおよびネットワーク侵入検出から一般的な調査に至るまで、多種多様なアプリケーションに共通する操作である。正規表現(「reg ex」または「RE」)は、特定の文字、単語、または文字のパターンのような、関心対象のストリングを識別するための簡潔で柔軟な手段をもたらす。たとえば、テキストファイルを解析する場合の「*car*」の正規表現は、「car」、「cartoon」、「vicar」などを識別することができる。
【0003】
従来より、reg exsは、ソフトウェアベースまたはハードウェアベースの検索ソリューションを使用して実行されてきた。残念なことに、それらのソリューションは、膨大な数の複合検索を実行する場合には問題に遭遇する。
【発明の概要】
【発明が解決しようとする課題】
【0004】
ソフトウェアベースの検索では、スループットに関連する根本的な問題が生じる。プロセッサベースのシステムは、原則的に任意の複合検索を大量に実行できるその柔軟性ゆえに普及しているが、その速度は、検索の数および複雑さが増大するにつれて低下し一貫性を失う。言い換えれば、膨大量のデータ(「コーパス」)でのreg ex検索は、実際的ではない。
【0005】
一方、既存のハードウェアベースの検索ソリューションは、適応能力に根本的な問題がある。これらのシステムは、システム自体にマップすることができる検索に対しては高速で一貫性のあるパフォーマンスを備えることができるが、既存のデバイスには、詳細な専門知識と手操作による介入なしでサポート可能な検索の数および複雑さに関して厳しい制限がある。言い換えれば、ハードウェア検索は高速であるが、制限されている。
【0006】
したがって、正規表現検索のようなアルゴリズムのハードウェアベースの処理に、ソフトウェアと同様の柔軟性をもたらすことを求める切迫した需要がある。
【課題を解決するための手段】
【0007】
この課題を解決するための手段は、後段の発明を実施するための形態においてさらに説明される一連の概念を簡略化された形態で示すために提供される。この課題を解決するための手段は、請求項に係る主題の重要な特徴または基本的特徴を特定することを意図するものではなく、また請求項に係る主題の範囲を限定するために使用されることを意図するものでもない。
【0008】
正規表現を含む(ただし、これに限定されることはない)計算タスクは、対応する論理および状態方程式に変換することができる。論理および状態方程式を実行するためにどのくらいのプログラマブルハードウェアデバイスが必要であるかなど、物理リソース要件は、コンピュータ支援設計(CAD)ツールを通じて反復の試行錯誤を行なうことなく推定されてもよい。推定された後、計算タスクはセットに配分されてもよく、そこで各セットは個々の使用可能な物理リソース内に収まる。たとえば、計算タスクのセットは、フィールドプログラマブルゲートアレイ(FPGA)のような、プログラマブルハードウェアデバイスに収まることができる。制御および通信論理が各セットに追加されてもよく、ハードウェア定義言語(HDL)ファイルは、各セットに対して生成される。複数のHDLファイルにわたる計算タスクの分割方法、HDLファイルの実行シーケンスなどを詳述する構成仕様も生成されてもよい。各HDLファイルから、構成バイナリが生成されてもよい。次いで、プログラマブルハードウェアデバイスは、構成バイナリを実行する。
【0009】
ユーザインターフェイスは、ユーザを、タスク管理の複雑さ、構成バイナリの作成、構成バイナリにわたる計算タスクの配分などから隔離する。プログラマブルハードウェアの速度および再構成可能性を併せ持つ簡単なユーザインターフェイスは、正規表現検索の実際の実施および実行をユーザに意識させないようにする。プログラマブルハードウェアの面倒な手操作による構成に代わって、自動化システムは、ユーザのために構成バイナリを生成し、それらを実行して、結果の整理統合を管理する。
【0010】
信頼性を向上させるためのフォールトトレランスのサポートは、再配分、スペアリングなどを含む。パフォーマンスの向上は、フラグメンテーションの緩和および優先順位付けを通じて可能となる。
【図面の簡単な説明】
【0011】
詳細な説明は、添付の図面を参照して示される。図面において、参照番号の左端の数字(複数可)は、参照番号が最初に出現する図面を識別する。異なる図面において同じ参照番号が使用される場合、それは類似または同一の項目を指示する。
【0012】
【図1】正規表現処理システムの保持に適したアーキテクチャの選択されたコンポーネントを示すブロック図である。
【図2】図1から選択されたコンパイルモジュールのコンポーネント、およびコンパイルモジュールにより生成されうる構成情報を示すブロック図である。
【図3】図1のアーキテクチャにより生成される構成バイナリの選択されたコンポーネントを示すブロック図である。
【図4】図1のアーキテクチャにより生成される構成仕様の選択されたコンポーネントを示すブロック図である。
【図5】図1のアーキテクチャから選択されたプログラマブルハードウェアシステムコントローラ(PHSC)のコンポーネントを示すブロック図である。
【図6】PHSCによる構成バイナリの実行を示す流れ図である。
【図7】構成バイナリからの状態情報の格納を含む、PHSCによる構成バイナリの実行を示す流れ図である。
【図8】正規表現処理システムとのユーザ対話を示す流れ図である。
【図9】正規表現に基づく構成情報の生成を示す流れ図である。
【図10】正規表現のセットに対する物理リソース要件の推定を示す流れ図である。
【図11】プログラマブルハードウェアにおける生成された構成の実行を示す流れ図である。
【図12】正規表現の動的な変更を示す流れ図である。
【図13】残りの機能可能なプログラマブルハードウェアデバイスに構成バイナリを再配分することによるフォールトトレランスのサポートを示す流れ図である。
【図14】残りの機能可能なプログラマブルハードウェアデバイスに構成バイナリを再配分することによるフォールトトレランスのサポートを示す流れ図である。
【図15】残りの機能可能なプログラマブルハードウェアデバイスに構成バイナリを再配分することによるフォールトトレランスのサポートを示す流れ図である。
【図16】予備の機能可能なプログラマブルハードウェアデバイスの使用を介するフォールトトレランスのサポートを示す流れ図である。
【図17】予備の機能可能なプログラマブルハードウェアデバイスの使用を介するフォールトトレランスのサポートを示す流れ図である。
【図18】予備の機能可能なプログラマブルハードウェアデバイスの使用を介するフォールトトレランスのサポートを示す流れ図である。
【図19】構成バイナリにわたる正規表現のフラグメンテーション緩和を示す概略図である。
【図20】コンパイルリソースが制限されている場合のような、正規表現の一部および対応する構成バイナリの選択的な再コンパイルによるフラグメンテーション緩和を示す概略図である。
【図21】正規表現の優先度を認識するハードウェア割り当て、ならびにそれらの正規表現の構成バイナリへのパッキングおよびスケジューリングを示す概略図である。
【図22】構成バイナリの実行を再配分することによるアイドルプログラマブルハードウェアリソースの再利用を示す流れ図である。
【図23】構成バイナリおよびその内部の正規表現の優先順位付けを示す流れ図である。
【図24】構成バイナリおよびその内部の正規表現の優先順位付けを示す流れ図である。
【図25】コンパイルおよび実行における複数のユーザ/アプリケーションによる正規表現のマージを示す流れ図である。
【図26】構成バイナリの遅延構成ページングを示す流れ図である。
【図27】後に完全な構成バイナリを作成するよう結合されうる構成バイナリサブエレメントのコンパイルを示す流れ図である。
【図28】正規表現を結合する計算を示す概略図である。
【図29】重複するかまたは類似する部分を有する正規表現のスーパーセットを示す概略図である。
【発明を実施するための形態】
【0013】
正規表現(「reg ex」または「RE」)は、特定の文字、単語、または文字のパターンのような、関心対象のストリングを識別するための簡潔で柔軟な手段をもたらす。たとえば、テキストファイルを解析する場合の「*car*」の正規表現は、「car」、「cartoon」、「vicar」などの単語を識別することができる。
【0014】
正規表現検索は、要求していない広告電子メール(「スパム」)フィルタリングから一般的な調査に至るまで、多種多様な分野において幅広く使用される。たとえば、電子メールサーバは、所与の電子メールがスパムであるかどうかを決定するために、「mortgage」または「credit card」または「enhancement」の出現をすべて検索することができる。もう1つの例において、医師は、癌の素因を指示する「GGCCCAGCATAGATTACA」という配列を見つけるために患者のDNAを調べることができる。したがって、reg exは、多くの用途において有用なツールである。残念なことに、前述のように、reg exを実施する従来の方法には、ソフトウェアにおいては遅い速度、またはハードウェアにおいては処理されるreg exの変化に対して適応能力が限られているという深刻な欠点があった。
【0015】
本開示において、正規表現は、プログラマブルハードウェアデバイスで実行するための対応する論理および状態方程式に自動的に変換される。この自動変換のプロセスの一環として、各正規表現を実行するために必要なプログラマブルハードウェアのサイズは、厄介な試行錯誤を行なうことなく推定されてもよい。一部の実施形態において、コンパイルレポートから派生したフィードバックを使用する、および実際のリソース利用率を使用して構成を変更するなどのような、自動制御の下で試行錯誤が使用されてもよい。推定された後、正規表現はセットに配分されてもよく、そこで各セットは個々のプログラマブルハードウェアデバイスの物理リソースの制約の範囲内に収まる。たとえば、500の正規表現のセットは、特定のFPGA内に収めることができる。
【0016】
通信および制御(CC)論理は各セットに追加されてもよく、それによりプログラマブルハードウェアがコントローラと通信して、プログラマブルハードウェアでの実行を管理することができるようになる。プログラマブルハードウェアは、イーサネット(登録商標)のようなデータネットワーク、PCI(peripheral component interconnect)のような入出力バスインターフェイス、またはHyperTransportコンソーシアムにより記述されているHyperTransport(商標)のような中央演算処理装置バスベースのインターフェイスを介してコントローラと通信することができる。コンパイラは、各セットに対して、正規表現およびCC論理を含むハードウェア定義言語(HDL)ファイルを生成する。コンパイラはまた、複数のHDLファイルにわたる正規表現の配分、実行シーケンスなどを詳述する構成仕様も生成することができる。CADツールは、各HDLファイルから構成バイナリを生成することができる。次いで、プログラマブルハードウェアデバイスは、構成バイナリを実行することができる。
【0017】
実行中、各プログラマブルハードウェアデバイス内の正規表現は並列で実行するので、大幅な速度の増大をもたらす。たとえば、特定のFPGA内に収まる前述の500の正規表現のセットは、FPGA内で並列に実行される。
【0018】
(構成バイナリの形態の)異なるセットは、プログラマブルハードウェアデバイスで順次にロードされて実行される。それにより、使用可能なプログラマブルハードウェアの容量を通常であれば超えるであろう正規表現検索を行なうことが可能になる。たとえば、前述の第1のセットは500の正規表現を有するが、第2のセットは300の正規表現を有する。合わせると、それらの800の正規表現は、単一のプログラマブルハードウェアデバイスにとっては大量過ぎる。しかし、2つの構成バイナリに分割して、順次に実行される場合、単一のプログラマブルハードウェアデバイスは、800の正規表現全体を実行することができる。
【0019】
ユーザインターフェイスは、ユーザが、タスク管理の複雑さ、構成バイナリの作成、構成バイナリにわたる配分などを見なくてすむようにする。この簡単なユーザインターフェイスにより、プログラマブルハードウェアの速度および再構成可能性を活用して、正規表現をデータのコーパスと比較するような計算タスクの実行の大幅な増大をもたらすことができる。
【0020】
プログラマブルハードウェアを使用してreg exを実行することは、2つの利点をもたらす。第1は、プログラマブルハードウェアによって提供される並列操作により、システムの容量が、プログラマブルハードウェアデバイス自体の容量と相関することである。したがって、プログラマブルハードウェアベースのソリューションが、別の構成バイナリを実行シーケンスに追加する必要が生じるまで、一定のスループットを備えることが可能である。たとえば、FPGA内に収まりうる300の表現によるセットは、同じFPGAに収まる上記の500の表現と同時に実行する。これは、300の表現の場合よりも500の表現のほうが評価に多くの時間を要するように、パフォーマンスが所望の検索の数に関して線形に低下(または悪化)するソフトウェアのソリューションとは対照的である。
【0021】
プログラマブルハードウェアベースの正規表現検索がもたらす第2の利点は、プログラマブルハードウェアで構成される回路が確定的パフォーマンスを提供することである。前述のように、プログラマブルハードウェアデバイス内に収まるように構成された正規表現のセットは、既知の時間で実行する。これとは対照的に、プロセッサで稼働しているソフトウェアのスループットは、所望される検索の特性(多少複雑な検索)および入力データの特性(低いヒット率の入力ストリームに対する高いヒット率の入力ストリーム)によって異なる可能性がある。加えて、キャッシュミスのような、その他の予測不能なイベントがパフォーマンスに変化をもたらすことがある。
【0022】
再配分、スペアリングなどが、フォールトトレランスを可能にする。パフォーマンスは、選択的または完全な再コンパイルを通じた取り消しまたは変更から正規表現のフラグメンテーションを緩和することにより保持される。正規表現はまた、パッキング、スケジューリング、および実行順序付けを通じてさまざまに変化する優先度レベルを割り当てられてもよい。
【0023】
例示のアーキテクチャ
図1は、正規表現処理システム102の実施に適したアーキテクチャの選択されたコンポーネントを示すブロック図100である。限定の目的ではなく説明のために、会社が、一般に「スパム」として知られる要求していない広告電子メールをその電子メールサーバからフィルタリングしようとしていると仮定する。スパムに関連付けられていたストリングを組み入れる正規表現のセットが保持される。たとえば、「mortgage rate」および「credit card」といった語句は、スパム電子メールを指示すると決定されている。システムアドミニストレータまたはスパムユーティリティアプリケーションは、それらの語句に対する正規表現を生成する。
【0024】
会社のサーバでの電子メールの収集は、潜在的なスパムを除去するために正規表現(reg ex)のこのリストを使用してフィルタされるデータのコーパスを形成する。実際には、そのようなreg exのリストは、数千から数百万にさえも及ぶことがある。現在のソフトウェアのみの正規表現検索に必要とされる計算要件を考えれば、これは重大なサーバの負荷をもたらし、それに応じてタスク、出力、冷却などに割り振られるサーバのようなリソース要件の増大もまねく。
【0025】
正規表現処理システム102内には、メモリ106に格納されているモジュールを実行するように構成されたプロセッサ104があってもよい。一部の実施形態において、プロセッサ104は、多重コアプロセッサ、または複数プロセッサの集合であってもよい。正規表現処理システム内にはまた、メモリ106があってもよい。メモリ106は、正規表現108(1)、108(2)、...、108(R)を格納することができる。本出願の図1から図29において使用される、「(R)」または「(P)」のような括弧で囲まれた文字は、ゼロよりも大きい任意の整数を示す。これらの正規表現は、それらを表すブロックの可変サイズによって指示されるように、さまざまなサイズおよび/または複雑さであってもよい。
【0026】
また、メモリ106内には、正規表現を受け入れて、同様にメモリ106にあるコンパイルモジュール112により処理するためにそれらの正規表現を搬送するように構成されたユーザインターフェイス110もある。コンパイルモジュール112は、プログラマブルハードウェアでのロードおよび実行に適した構成情報を生成するように構成され、後段で図2に関してさらに詳細に説明される。
【0027】
コンパイルモジュール112は、プログラマブルハードウェアシステムコントローラ(PHSC)114と通信し、メモリ106に格納されてもよい。PHSC114は、プログラマブルハードウェアの操作を管理するように構成され、後段で図5に関してさらに詳細に説明される。PHSC114は、ソフトウェアモジュールとして(示されるように)、ハードウェアデバイスとして、または組み合わせとして実行されてもよい。
【0028】
PHSC114はまた、処理のためにメモリ106内のコーパスデータ116またはその他の外部データを受け入れるように構成される。一部の実施態様において、このコーパスデータは、正規表現が実行されるべき情報を含むことができる。たとえば、正規表現として表されるスパム語句が検索される電子メールメッセージの集合。
【0029】
PHSC114は、プログラマブルハードウェア118(1)、118(2)、...、118(P)と通信する。プログラマブルハードウェア118は、フィールドプログラマブルゲートアレイ(FPGA)、複合プログラマブル論理デバイス(CPLD:complex programmable logic device)、またはその他の再構成可能なハードウェアデバイスであってもよい。プログラマブルハードウェア118は、(同じ製造業者による同じモデルのFPGAのように)類似していても、(異なる製造業者によるFPGAのように)異なっていてもよい。各プログラマブルハードウェア118内には、正規表現108(1)〜(R)のプログラマブルハードウェア内の物理的な具現ならびに任意の必須の通信および制御(CC)論理である1つまたは複数の計算論理ブロック120(1)、120(2)、...、120(L)があってもよい。
【0030】
PHSC114は、計算論理120を作成するプログラマブルハードウェア118に構成をロードする。計算論理120が実行した後、プログラマブルハードウェア118内のCC論理は、その結果をPHSC114に転送することができ、次いでPHSC114は結果122をメモリ106またはその他の外部データ宛先に出力することができる。プログラマブルハードウェアデバイス118で実行するための構成に含まれてはいない正規表現108は、補助の正規表現処理モジュール124において実行されてもよい。たとえば、新しく追加されたスパム語句「roofing repair」は、正規表現のリストに追加されてもよいが、ハードウェア実行のために構成バイナリにコンパイルされなくてもよい。コンパイルされるまで、この新しく追加されたスパム語句の正規表現は、補助の正規表現処理モジュール124を使用して処理されてもよい。補助の正規表現処理モジュール124は、メモリ106に格納されてもよく、コンパイルモジュール112およびPHSC114と通信してもよい。
【0031】
並列に正規表現を実行するように構成されたプログラマブルハードウェア118のパフォーマンスの利点を考えれば、プログラマブルハードウェア118は、課せられた要求をゆうに超えることができる。その結果、プログラマブルハードウェア118が十分に活用されない場合もある。プログラマブルハードウェア118を動的に再構成することにより、過剰なパフォーマンスと交換に仮想容量を提供することが可能になる。その結果、より小さいプログラマブルハードウェアデバイスが使用されてもよい。または、単一のプログラマブルハードウェアがもはやreg ex108(1)〜108(R)のすべてを含むことができなくなるところまで要求が高まる場合、reg exは複数の計算論路120(1)〜120(L)を作成するように分割され、逐次ロードされて実行されてもよい。計算論理の逐次実行は若干遅いが、プログラマブルハードウェア118の容量を超える計算論理をロードする場合に生じるであろう完全故障をはるかにしのぐ。
【0032】
正規表現処理システム102はまた、サーバ、ワークステーション、ネットワーク接続FPGAデバイスなどのような他のデバイスと通信するように構成可能なネットワークインターフェイス126を組み入れることもできる。
【0033】
図2は、図1から選択されたコンパイルモジュール112のコンポーネントを示すブロック図200である。正規表現108(1)〜180(R)は、ユーザインターフェイス110などを介して、コンパイルモジュール112に提供される。コンパイルモジュール112は、正規表現を、プログラマブルハードウェア118により実行可能な形態にコンパイルするように構成される。正規表現−ハードウェア定義言語(HDL)コンパイラ202は、正規表現108のHDL表現を生成する。
【0034】
ハードウェア定義言語(ハードウェア記述言語としても知られる)は、計算を実行するように構成されたデジタル論理および電子回路の記述を表す。コンピュータコードがアルゴリズムを表す場合、HDLステートメントは実際の回路素子を表す。
【0035】
米国電気電子学会(IEEE)規格IEEE1076によって説明されるように、1つのHDLは、超高速集積回路ハードウェア記述言語(VHDL)である。もう1つのHDLは、IEEE規格1364−2001に説明されているVerilogである。その他のHDLも使用可能であり、同様に使用されてもよい。
【0036】
正規表現−HDLコンパイラ202がreg ex108をコンパイルしてHDLファイルを生成すると、構成仕様204(1)、204(2)、...、204(S)は、コンパイルの結果得られた情報に基づいて生成されてもよい。構成仕様は、構成バイナリにわたり配分されるreg ex108の数などのような詳細を含み、後段で図4に関してさらに詳細に説明される。
【0037】
コンパイラ202は、HDLファイル206を、プログラマブルハードウェアのコンピュータ支援設計(CAD)ツール208に提供する。このCADツール208は、HDLファイル206を受け入れ、プログラマブルハードウェアデバイス118による実行に適した構成バイナリ210(1)、210(2)、...、210(B)を生成する。参照を簡単にするために、構成仕様204および構成バイナリ210は、構成情報212とみなされてもよい。1つの実施態様において、複数の構成バイナリ210(1)〜210(B)に関連する単一の構成仕様204が生成されてもよい。もう1つの実施態様において、複数の構成仕様204(1)〜204(S)は、複数の構成バイナリ210(1)〜210(B)に対応して生成されてもよい。一部の実施態様において、構成情報212(1)、212(2)、...、212(F)があってもよい。
【0038】
図3は、図1のアーキテクチャにより生成される例示の構成バイナリの選択されたコンポーネントを示すブロック図300である。この図において、破線302は、プログラマブルハードウェア118の容量の輪郭を描いている。構成バイナリ210内、およびこの容量302内には、コンパイルモジュール112によって生成されたバイナリ構成命令のような、バイナリ構成命令304として表現されるreg exがあってもよい。さらに、構成バイナリ210に含まれるのは、PHSC114とプログラマブルハードウェアデバイス118との結合を可能にするように構成された通信および制御(CC)論理306であってもよい。一部の実施態様において、ローカル状態ストレージ308もまた、構成バイナリ210内に提供されてもよい。
【0039】
この図において、構成バイナリ210(1)は、reg ex108(1)、108(2)、108(6)、およびCC306(1)を含む。構成バイナリ210(2)は、reg ex108(3)、108(4)、およびCC306(2)を含む。構成バイナリ210(3)は、reg ex108(5)、ローカル状態ストレージ308(1)、およびCC306(3)を含む。reg exは、内部の正規表現のサイズ/複雑さの相違を示すように、異なる幅で表されていることに留意されたい。したがって、reg ex108(5)は、使用可能な計算論理容量のほとんどを必要とするので、構成バイナリ210(3)内の唯一のreg exである。
【0040】
各構成バイナリ210は、内部のreg exが並列実行のために設計されるように構成されてもよい310。たとえば、構成バイナリ210(1)がプログラマブルハードウェア118において実行されると、reg ex108108(1)、108(2)、および108(6)が並列に実行される。ハードウェアにおいて複数のreg exを並列に実行できるこの機能は、結果として単一プロセッサ上で順次に実行するソフトウェアにまさる重大な速度の増加をもたらす。図1の例に戻ると、プログラマブルハードウェア118による構成バイナリ210(1)の実行は、ソフトウェアで行なわれる逐次処理とは対照的に、3つのreg exの検索を一度に行なう。
【0041】
図4は、図1のアーキテクチャにより生成される構成仕様204の選択されたコンポーネントを示すブロック図400である。構成仕様204は、複数の情報を含むことができる。生成される構成バイナリ402(1)のカウントは、格納されてもよい。たとえば、コンパイルされた正規表現は、3つの構成バイナリを生成する。構成バイナリ間の正規表現の配分の記述402(2)もまた、格納されてもよい。たとえば、これは、reg ex108(1)、108(2)、および108(6)が構成バイナリ210(1)内にあることを指示することができる。構成バイナリ402(3)の実行のシーケンスが含まれてもよい。たとえば、構成バイナリ210(1)を最初に実行し、続いて210(3)、次いで210(2)が実行して、特定の正規表現の優先順位付けを説明する。以下の図21では、優先順位付けをさらに詳細に説明する。構成仕様204(1)はまた、どの許可または「正当な」プログラマブルハードウェアデバイス118が正規表現処理システム102内にあるのかを含むこともできる。たとえば、現在システム内で使用可能なプログラマブルハードウェアデバイスは、製造業者XによるFPGAタイプAおよびB、ならびに製造業者YによるFPGAタイプCを含む。コンパイル日付/時間、アプリケーション識別および/またはユーザ識別などのような、その他の情報402(Y)もまた、構成仕様204(1)に含まれてもよい。
【0042】
図5は、図1のアーキテクチャから選択されたプログラマブルハードウェアシステムコントローラ(PHSC)のコンポーネントを示すブロック図500である。この図において、PHSC114は、構成仕様204(1)および対応する構成バイナリ210(1)〜210(3)を、コーパスデータ116と共に受け入れる。たとえば、構成仕様は、スパム検索のために正規表現108(1)〜108(R)に対応する表現を含むことができるが、コーパスは、スパムがないかどうか確認される電子メールストアを含むことができる。
【0043】
PHSC114は、入力を受信して、結果122を提供することを含む、PHSC114のアクションを協調するように構成された制御モジュール502を含むことができる。プログラマブルハードウェアデバイス118と通信して、構成バイナリのロードおよびアンロード、結果122の転送などのようなタスクを管理するように構成されたプログラマブルハードウェアインターフェイスモジュール504もまた、PHSC114に含まれてもよい。構成バイナリ順序付けモジュール506もまた存在してもよい。構成バイナリ順序付けモジュール506は、プログラマブルハードウェア118内の構成バイナリ210の処理のための実行シーケンス508(この説明図において破線で示される)を決定することができる。たとえば、実行シーケンス508は、構成バイナリ210(1)、構成バイナリ210(2)、次いで構成バイナリ210(3)が続いてもよい。実行シーケンス508は、構成仕様204からの構成バイナリ402(3)の実行のシーケンスに基づいてもよい。一部の実施態様において、実行シーケンス508は、優先度の変更、ハードウェアが使用できないこと、処理ロード、およびPHSC114に使用可能なその他の因子により、実行のシーケンス402(3)とは異なっていてもよい。
【0044】
例示の実行
図6は、プログラマブルハードウェア118でのPHSC114による構成バイナリの実行を示す流れ図600である。この例の場合、単一のプログラマブルハードウェアデバイス118(1)があり、矢印602により指示されるようにページを下方に進むと時間が増大すると仮定する。reg ex108(1)〜108(R)はコンパイルされて構成バイナリ210(1)〜210(B)を形成し、構成バイナリ210(1)〜210(B)のロードおよび構成が行なわれるとプログラマブルハードウェアデバイス118は計算論理120となる。プログラマブルハードウェア118(1)にロードされると、計算論理120は、604内部で符号化された正規表現検索を並列に実行する。構成バイナリのシーケンスは、1つずつ構成バイナリが次々と606で順次にロードされ処理される。
【0045】
たとえば、608において、PHSC114のプログラマブルハードウェアインターフェイスモジュール(PHIM)504は、構成バイナリ210(1)をプログラマブルハードウェア118(1)にロードする。ロードされると、プログラマブルハードウェア118(1)内で結果として得られる回路の物理的配列は、計算論理120(1)である。計算論理120(1)は実行し、その結果はPHIM504に渡される。
【0046】
610において、PHIM504は、PHSC114の実行シーケンス508で次の順位にあった構成バイナリ210(2)を、計算論理120(2)を形成するプログラマブルハードウェア118(1)にロードする。計算論理120(2)は実行し、その結果はPHIM504に返される。
【0047】
612において、PHIM504は、PHSC114の実行シーケンス508で次の順位にあった構成バイナリ210(3)を、計算論理120(3)を形成するプログラマブルハードウェア118(1)にロードする。計算論理120(3)は実行し、その結果はPHIM504に返される。
【0048】
このように連続的に構成バイナリをロードして結果の計算論理を実行することにより、プログラマブルハードウェアの仮想化が可能になり、仮想化計算ファブリックを作成することができる。たとえば、処理されるべきすべての正規表現を実行するのに十分な大きさのプログラマブルハードウェア118を個々に必要とするのではなく、reg exは1つまたは複数のプログラマブルハードウェアデバイス118にわたり実行するように分割されてもよい。使用可能なプログラマブルハードウェアデバイスが十分ではなく、同時操作ができない場合(たとえば、reg exの要求がプログラマブルハードウェアデバイスの使用可能容量を超える場合)、reg exは複数の構成バイナリにわたり配分されてもよく、次いで限られた数のプログラマブルハードウェア118にわたり配分されてもよい、および/または同じプログラマブルハードウェア118で順次に実行されてもよい。スパム検索のための800の正規表現に関する前述の例に戻ると、800すべてが単一のFPGAに収まるわけではないが、500は収まる。したがって、第1の構成バイナリは500の正規表現で作成されるが、第2の構成バイナリは残りの300の正規表現で作成される。1つのプログラマブルハードウェア118デバイスが使用可能であるので、第1の構成バイナリがロードされて実行され、次いで第2の構成バイナリがロードされて実行される。
【0049】
パフォーマンスを向上させるため、および/または一連の構成バイナリが先行のステップの結果に基づいて反復して実行できる(すなわち、パイプライン制御される)ようにするため、状態情報が格納されてもよい。図7は、構成バイナリからの状態情報の格納を伴う、PHSC114による構成バイナリの実行を示す流れ図700である。上記で図6に関して説明されたとおり、矢印702により指示されるようにページを下方に進むと時間が増大する。また上記のように、この例において、構成バイナリから結果として得られた計算論理に表される正規表現は並列に実行され704、複数の構成バイナリは、単一のプログラマブルハードウェア118(1)で逐次ロードされ実行される706。計算論理に接続されたローカルメモリは、708において、または計算論理内で具現されるもう1つの実施態様において、状態情報を格納する。たとえば、計算論理に接続されたローカルメモリの1つの実施態様において、メモリは、接続されたフラッシュメモリのような、プログラマブルハードウェアデバイスに外部のメモリであってもよい。プログラマブルハードウェア118(1)に直接アクセス可能なメモリ708を使用することで、速度を増大させ、PHSC114を通じて状態を転送して格納する必要をなくす。
【0050】
710において、PHIM504は構成バイナリ210(1)をロードし、その結果計算論理120(1)が得られ、これが実行して、ローカル状態情報308(1)をローカルメモリ708に格納することができる。712において、PHIM504は構成バイナリ210(2)をロードし、その結果計算論理120(2)が得られ、これがローカル状態情報308(1)にアクセスして、メモリ708との間で情報を読み取りおよび/または書き込みすることができる。714において、PHIM504は構成バイナリ210(3)をロードし、その結果計算論理120(3)が得られ、これもまたローカル状態情報308(1)にアクセスして、メモリ708との間で情報を読み取りおよび/または書き込みすることができる。したがって、情報は、構成バイナリの実行の間で持続することができる。
【0051】
たとえば、構成バイナリ210(1)内のreg ex108(1)はストリング「car」のreg exであるが、構成バイナリ210(2)内のreg ex108(3)はストリング「car loan」のreg exであり、構成バイナリ210(3)内のreg ex108(5)はストリング「car loan refinancing」のreg exであると仮定する。構成バイナリの実行中、状態情報308(1)は、構成バイナリ210(3)が、次に構成バイナリ210(1)からの結果を使用する構成バイナリ210(2)からの結果を使用するように、メモリ708に格納されてもよい。したがって、プログラマブルハードウェア118によって直接アクセス可能なメモリに格納されている状態情報にアクセスすることにより、処理速度が加速される。さらに、ストレージは、大きすぎて単一のプログラマブルハードウェアデバイスの容量を超えるreg exの分割を容易にすることができる。
【0052】
プロセスの例示
図8は、図1〜図7に示されるアーキテクチャを使用して実施されうる(ただし、必須ではない)正規表現処理システム102とのユーザ対話を説明する流れ図を示す。フロー800(および図9〜図12のフロー)は、論理フローグラフにおいてブロックの集合として示され、ブロックはハードウェア、ソフトウェア、またはその組み合わせにおいて実施されうる操作のシーケンスを表す。ソフトウェアのコンテキストにおいて、ブロックは、1つまたは複数のプロセッサによって実行される場合、列挙された操作を実行するコンピュータ実行可能命令を表す。一般に、コンピュータ実行可能命令は、特定の機能を実行するか、または特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造体などを含む。操作が説明される順序は、限定として解釈されることを意図されておらず、任意の数の説明されるブロックは、任意の順序および/または並列に組み合わされてプロセスを実施することができる。説明のために、プロセスは、図1〜図7のアーキテクチャのコンテキストで説明される。
【0053】
ブロック802は、正規表現のリストを受信する。たとえば、正規表現として表されるスパム検索基準のリスト。ブロック804は、正規表現に基づいて構成情報を生成する。これは、図9に関して後段でさらに詳細に説明される。
【0054】
ユーザには、ブロック806において明示または暗黙のいずれのユーザインターフェイスが選択されているかに応じて異なるインターフェイスが表示される。ブロック806において暗黙ユーザインターフェイスが選択されると、ブロック808は、生成された構成情報をプログラマブルハードウェアで実行する。ブロック810は、プログラマブルハードウェアからの結果を提供する。
【0055】
ブロック806において暗黙ユーザインターフェイスが選択されると、ブロック812は、構成情報(構成仕様204および構成バイナリ210(1)〜210(R))を検査および/または変更のためにユーザに提示する。たとえば、自動的に生成された構成バイナリを手操作で調整したいと考えるユーザは、明示インターフェイスを選択することができる。この提示が完了すると、フローはブロック808において再開し、前述のように、生成された構成情報をプログラマブルハードウェアで実行することができる。
【0056】
選択されたインターフェイスには関わりなく、このユーザインターフェイスは、reg exの複雑さとは無関係にプログラマブルハードウェアとの単純な対話をもたらす。そうすることで、ユーザは、プログラマブルハードウェアの詳細を認識する必要、または気に掛ける必要からも解放される。さらにこれは、異なるプログラマブルハードウェア118にわたる検索ポータビリティをもたらす。たとえば、reg ex108(1)〜108(R)は、異なるプログラマブルハードウェアデバイス118(1)〜118(P)にわたり実行するようにコンパイルされて、処理に使用可能になるとそれらのプログラマブルハードウェアデバイスにわたり配分されてもよい。このインターフェイスを使用することで、この複雑さをユーザの目から隠す。
【0057】
図9は、図8に関して上記で述べた、正規表現804に基づく構成情報の生成を表す流れ図を示す。ブロック902は、正規表現のリストを解析し、それらを対応する論理および状態方程式に変換する。この変換は、前述のように、コンパイルモジュール112内で行ってもよい。ブロック904は、各正規表現の物理リソース要件を推定する。たとえば、reg ex108(1)が、プログラマブルハードウェアデバイス118(1)で2,000の計算素子を必要とすると推定されることもあり、reg ex108(5)は、7,000の計算素子を必要とすると推定されることもある。
【0058】
ブロック906は正規表現をセットに配分し、ここで各セットはプログラマブルハードウェア118において使用可能な物理リソース内に収まる。この推定はまた、通信および制御(CC)論理、ならびにローカルストレージ要件を含むことができる。たとえば、上記の図3において、使用可能な物理リソースはプログラマブルハードウェアの計算論理容量302であり、セットのうちの1つはreg ex108(1)、108(2)、108(6)、およびCC306(1)を含む。
【0059】
ブロック908は、各セットにカスタマイズされた制御および通信論理を追加し、ブロック910は、各セットに対してHDLファイルを生成する。ブロック912は、構成仕様204(1)のような構成仕様を生成する。ブロック914は、各HDLファイルから構成バイナリを生成する。たとえば、HDLファイルは、結果として構成バイナリ201(1)をもたらすことができる。
【0060】
図10は、図9に関して前述された正規表現904による物理リソース要件の推定を表す流れ図を示す。ブロック1002は、正規表現を特定の計算論理配列に関連付ける。たとえば、ストリング「home」の正規表現は、200の回路素子の特定の配列を伴うことがある。この関連付けは、正規表現を生成するブロック1002(1)、ハードウェアCADツールがreg ex内の項目を論理方程式に変換する方法を決定するブロック1002(2)、reg exの回路要件を決定するブロック1002(3)により作成されてもよい。たとえば、サンプルの正規表現は、CADツールによる論理方程式に変換されてもよく、結果の要件が監視される。したがって、正規表現入力に基づいて回路要件の予測を可能にするモデルが構築されてもよい。
【0061】
関連付けが行なわれると、ブロック1004は、冗長論理を識別し、それらの冗長を除去するように統合して、統合された論理を形成する。たとえば、複数の正規表現は、共通のルートストリングを伴うか、または回路で表現される場合に冗長回路をもたらすこともあるその他の共通性を有することができる。これらの冗長性は除去することができ、効率を高めることができる。その1つの実施態様は、図29に関して後段で、スーパーセットのコンテキストでさらに詳細に説明される。
【0062】
ブロック1006は、ローカル状態ストレージ308が呼び出されるかどうか、および呼び出される場合に必要とされるメモリリソースなどのような、ローカルストレージ要件を推定する。ブロック1008は、CADツール固有の修正率を統合された論理およびローカルストレージ要件に適用する。たとえば、特定のCADツールは、特定のreg exによって呼び出された論理方程式を例外的な方法で計算ブロックに変換することができ、したがって物理リソースの推定がさらに正確になるように修正率が入力されてもよい。
【0063】
ブロック1010は、推定される物理リソース要件を生成する。たとえば、「credit card」を検索するためのreg exは、製造業者XによるFPGAタイプAで推定一千の回路素子を必要とすることがある。この推定は、reg exがプログラマブルハードウェア118の物理リソース内に収まるかどうかを決定するために使用されるブルートフォースの試行錯誤と比較すると、大幅に高速で、リソース集約的ではなく、人間の対話をほとんどまたは全く必要としない。さらに、このプロセスは、さまざまな容量を備えるプログラマブルハードウェアの複数のタイプに容易に適用することができ、新しいハードウェアへのreg exの迅速な再配置が可能になる。
【0064】
図11は、図8に関して前述されたプログラマブルハードウェア808での生成された構成情報の実行を表す流れ図である。1つの実施態様において、後続のブロックは、PHSC114によって実行されてもよい。
【0065】
ブロック1102は、構成情報212およびコーパスデータ116を受信する。たとえば、構成ファイルは、スパム検索のために正規表現108を具現する構成バイナリ210を含むことができ、コーパスデータは、スパムを検索される未加工の電子メールであってもよい。
【0066】
ブロック1104は、実行シーケンス508からの実行されていない構成バイナリをプログラマブルハードウェア118にロードする。ブロック1106は、コーパス116の全部または一部を処理のためにプログラマブルハードウェア118にロードする。ブロック1108は、ロードされたコーパスデータ116に対してプログラマブルハードウェア118で計算論理120を実行する。ブロック1110は、計算論理のプログラマブルハードウェアの実行からの結果を提供する。コーパスの追加の部分が残っている場合、ブロック1112は、フローをブロック1106に戻し、コーパスの別の部分を処理のためにプログラマブルハードウェア118にロードする。それ以外の場合で、ブロック1112においてコーパスの追加の部分が残っていなければブロック1114は、追加の構成バイナリが実行シーケンス508に存在するかどうかを決定する。追加の構成バイナリが実行シーケンス508に残っている場合、ブロック1116は、実行シーケンスを次の構成バイナリに増分して、フローを1104に戻す。追加の構成バイナリが実行シーケンス508に残っていない場合、ブロック1118は、1つまたは複数の構成バイナリの実行により得られた結果を統合する。
【0067】
図12は、正規表現の動的な変更を示す流れ図1200である。reg exは、時間の経過に伴って変化してもよい。たとえば、インコの売れ行きの新たな一時的流行により、「parakeet」がスパム検索リストに追加されるという結果をもたらすこともある。あるいは、新種のクレジットカードビジネスが加わって、「credit card」がスパム検索リストから削除されるという結果をもたらすこともある。
【0068】
限定の目的ではなく説明を簡単にするため、正規表現のリストへの変更は一般に、新しい正規表現の追加、または既存の正規表現の削除という2つのカテゴリに分類されると考えられてもよい。新しい正規表現が追加されるべきであるとブロック1202が決定する場合、ブロック1204は、新しい正規表現の構成バイナリを生成する。次いで、ブロック1206は、この構成バイナリを実行のシーケンス508に追加する。
【0069】
変更は既存の正規表現の削除であるとブロック1202が決定する場合、ブロック1208は正規表現を廃棄リストに追加する。プログラマブルハードウェア118で計算論理120を実行した後、ブロック1210は、reg exからの結果を廃棄する。一部の実施態様において、この廃棄はアクティブな削除であってもよく、また他の実施態様において、廃棄されたreg exからの結果はPHSC114によってレポートされていなくてもよい。廃棄リストでreg exの処理を続行することは無駄が多いと思われることもあるが、各構成バイナリ内のreg exの並列処理を考えると、実際には非常に効率的である。図6に関して前述されているように、構成バイナリ内のreg exは並列に実行される。したがって、構成バイナリが大量にフラグメント化した状態になるまでは、構成バイナリ全体を再コンパイルするよりも、多数のreg exを並列に実行して、それらの結果のうちの1つを廃棄するほうが安価である。さらに、ユーザは、廃棄リストからreg exを単に除去してそれを再イネーブルすることにより、以前廃棄されたreg exを容易に復元することができる。未使用の/取り消されたreg exにより生じたフラグメンテーションに対処するための再コンパイルをどのように、いつ行なうかについての決定は、後段で図19〜図20関してさらに詳細に説明される。
【0070】
ブロック1212は、プログラマブルハードウェア118からの結果を、現在の構成に含まれていない追加の正規表現の結果でパッチする。これは、最近システムに追加されたが、まだプログラマブルハードウェア118での実行のために構成バイナリ210にはコンパイルされていないreg exの場合のように、一部のreg exが補助の正規表現処理モジュール124で実行される場合に有用となることがある。
【0071】
ブロック1214は、補助の正規表現処理モジュール124で実行されている正規表現のような、現在の構成には含まれていない正規表現を、現在の構成に追加することができる。これらの正規表現は、実行シーケンス508の一部である構成バイナリ210に組み入れるためにコンパイルモジュール112によってコンパイルされてもよい。ブロック1216は、新しい構成バイナリの生成中に、廃棄リストに存在する正規表現を除去して、廃棄を一掃する。
【0072】
再配分を介するフォールトトレランス
プログラマブルハードウェアデバイス118を含む機器は、故障することもある。図13〜図15は、残りの機能可能なプログラマブルハードウェアデバイスに構成バイナリを再配分することによるフォールトトレランスのサポートを示す流れ図1300である。これらの図において、矢印1302により指示されるようにページを下方に進むと時間が増大する。図13を始めとして、PHIM504は、2つのプログラマブルハードウェアデバイス118(1)および118(2)に結合されることが示される。この例の場合、プログラマブルハードウェア118(1)および118(2)がバイナリ互換である1304、すなわち、いずれのプログラマブルハードウェアでも再コンパイルすることなく同一の構成バイナリ210が実行されてもよいと仮定する。また、実行シーケンス508が、構成バイナリ210(1)、210(2)、210(3)、210(4)、210(1)、210(2)、210(3)、210(4)のためのものであるというように仮定する。図13は、通常の操作1306を示す。通常の操作1360中に、1308において、PHIM504は、構成バイナリ210(1)および210(2)をそれぞれプログラマブルハードウェア118(1)および118(2)にロードする。その結果得られた計算論理120(1)および120(2)は実行し、その結果はPHIM504に返される。同様に、1310において、構成バイナリ210(3)および210(4)はロードされて実行される。1312において、シーケンスは繰り返し、処理のために構成バイナリ210(1)および210(2)をロードする。これは、プログラマブルハードウェアを仮想化することの汎用性を示す。4つの構成バイナリ210(1)〜210(4)は、2つのプログラマブルハードウェア118(1)および118(2)だけで実行される。
【0073】
図14は、この流れ図を継続して、故障の発生および移行1402を説明する。1314において、構成バイナリ210(3)はプログラマブルハードウェア118(1)に正常にロードされ、一方構成バイナリ210(4)のプログラマブルハードウェア118(2)へのロードは試みられたが、使用不可能であったために失敗した。1316において、構成バイナリ210(3)に基づいて計算論理12(3)からPHIM504に結果が返された後、PHIM504は、構成バイナリ210(4)を処理のためにプログラマブルハードウェア118(1)にロードする。
【0074】
フローを図15に継続して、フェイルセーフ操作1502が示される。プログラマブルハードウェア118(2)は引き続き使用不可能であり、プログラマブルハードウェア118(1)は、実行シーケンス508にリストされている構成バイナリの実行を処理する。1318において、プログラマブルハードウェア118(1)は、実行シーケンス508で次の順番の構成バイナリ210(1)をロードして実行する。1320において、プログラマブルハードウェア118(1)は構成バイナリ210(2)をロードして実行し、1322において、構成バイナリ(3)がロードされて実行され、さらに1324において、構成バイナリ210(4)がロードされて実行される。このように、実行シーケンス508内に存在するリストは完全に実行されており、実行シーケンス508によって呼び出されると続行することができる。プログラマブルハードウェア118(2)の損失により実行パフォーマンスは低下しているが、reg ex108(1)〜108(R)の処理は引き続き継続することができた。構成が仮想であるため、この動的な再配分が可能になる。スパムフィルタリングの例に戻ると、プログラマブルハードウェア118(2)の故障は、システムが完全に使用不可となる結果をまねくのではなく、単にスパムフィルタリングのパフォーマンスを低下させる。
【0075】
複数のプログラマブルハードウェア118を有する一部の実施態様において、構成バイナリは故障に備えるために過小に割り振られてもよい。たとえば、各プログラマブルハードウェアデバイスの実行シーケンスは、後に故障中に消費されうるアイドル状態のプレースホルダを含むことができる。
【0076】
スペアリングを介するフォールトトレランス
図16〜図18は、予備の機能可能なプログラマブルハードウェアデバイスの使用を介するフォールトトレランスのサポートを示す流れ図1600を備える。上記と同様に、これらの図において、矢印1602により指示されるようにページを下方に進むと時間が増大する。
【0077】
図16を始めとして、PHIM504は、2つのプログラマブルハードウェアデバイス118(1)および118(2)に結合されることが示される。上記のように、この例の場合、プログラマブルハードウェア118(1)および118(2)がバイナリ互換である1604、すなわち、いずれのプログラマブルハードウェアでも再コンパイルすることなく同一の構成バイナリ210が実行されてもよいと仮定する。また、実行シーケンス508が、構成バイナリ210(1)、210(2)、210(3)、210(4)、210(1)、210(2)、210(3)、210(4)のためのものであるというように仮定する。
【0078】
図16は、通常の操作1606を示す。通常の操作1606中に、1608において、PHIM504は、構成バイナリ210(1)および210(2)をそれぞれプログラマブルハードウェア118(1)および118(2)にロードする。その結果得られた計算論理120(1)および120(2)は実行し、その結果はPHIM504に返される。同様に、1610において、構成バイナリ210(3)および210(4)はロードされて実行される。1612において、シーケンスは繰り返し、処理のために構成バイナリ210(1)および210(2)をロードする。
【0079】
図17は、フロー1600を継続して、故障の発生およびスペアリング1702を説明する。この図において、1614において、プログラマブルハードウェア118(1)は構成バイナリ210(3)を正常にロードし、一方プログラマブルハードウェア118(2)は構成バイナリ210(4)をロードすることができなくなった。プログラマブルハードウェア118(2)が失敗したと決定すると、PHIM504は、構成バイナリ210(4)を備えてあった予備のプログラマブルハードウェアデバイス118(3)にリダイレクトすることができる。
【0080】
図18は、予備のプログラマブルハードウェアに構成バイナリをリダイレクトすることによる通常の操作の再開1802を示す図である。1616において、プログラマブルハードウェア118(1)は構成バイナリ210(1)をロードし、一方予備のプログラマブルハードウェア118(3)は構成バイナリ210(4)をロードした。
【0081】
1618において、PHIM504は、実行シーケンス508に指定されているように構成バイナリをロードして実行する。したがって、構成バイナリ210(2)および210(3)は、それぞれプログラマブルハードウェア118(1)および118(3)にロードされる。1620において、構成バイナリ210(4)および210(1)は、それぞれプログラマブルハードウェア118(1)および118(3)にロードされ、実行シーケンス508を再度開始する。
【0082】
プログラマブルハードウェア118のコンテキストにおけるスペアリングは、いくつかの利点をもたらす。構成バイナリが完全構成をカプセル化するので、構成バイナリはプログラマブルハードウェアに迅速にロードおよびアンロードされる。これは、サーバインスタンスを導入するために必要な操作の複雑さおよび時間とは対照的である。したがって、予備のプログラマブルハードウェアデバイスは、非常に迅速にアクセスしてサービスに参加させることができる。
【0083】
フラグメンテーションの緩和
前述のように、時間の経過に伴って、処理されるべき正規表現のリストは変化する。スパムフィルタリングの例において、新しいreg exは、他のreg exが除去される間に追加される。図19は、構成バイナリにわたる正規表現のフラグメンテーション緩和を示す概略図1900である。1つの実施態様において、フラグメンテーション緩和は、PHSC114内で実行されてもよい。
【0084】
この追加および除去は、時間の経過に伴って、「ライブ(生き)の」すなわち廃棄されたreg exの中で引き続き必要なreg exのフラグメンテーションをまねくことになる。1902において、複数のフラグメント化された構成バイナリが、フラグメンテーション緩和の前に示される。この図において、網掛けは、未使用の/取り消されたreg exを示す1904。この例において、reg ex108(1)、108(3)、108(5)、108(7)、および108(9)は、取り消されている。たとえば、これらは、会社の新種のクレジットカードビジネスにより現在はスパムリストから削除されている「credit card」および変種のスパムフィルタに関連する可能性もある。reg ex108(2)、108(4)、108(6)、および108(8)は、引き続き使用されている。そのため、それらのreg exを含む4つの構成バイナリ210(20)〜210(23)がフラグメント化された状態になり、わずかな望ましいreg exの間にいくつかの未使用のreg exが散在している。これらのフラグメント化された構成バイナリを実行することで、使用可能なプログラマブルハードウェアのリソースを浪費する。したがって、このフラグメンテーションを緩和することが望ましい。
【0085】
1906において、新しく追加されたreg ex108(10)は、補助のreg ex処理モジュール124で実行する。次回の構成バイナリのコンパイル中に、構成バイナリ内にスペースが使用可能である場合、reg ex108(10)は、プログラマブルハードウェア118で実行するために、処理モジュール124での実行から構成バイナリ210へ転送されてもよい。
【0086】
1908において、フラグメンテーション緩和後の構成バイナリが示される。未使用のreg exは廃棄されており、1910において、引き続き使用されたそれらのreg exおよびreg ex108(10)は、2つの新しい構成バイナリにコンパイルされた。4つの構成バイナリがソフトウェアにおいて1つのreg exで実行されていたが、ここで2つの構成バイナリが実行する。
【0087】
図19は、すべてのアクティブなreg ex108の完全な再コンパイルを示す。しかし、コンパイルは、時間およびシステムリソースの点から高価である。一部の実施態様において、完全再コンパイルをあまり頻繁には実行しない間、システムコストを最小化するために選択的に再コンパイルを行なうことが望ましいこともある。
【0088】
図20は、選択的な再コンパイルによるフラグメンテーション緩和を示す概略図2000である。選択的または完全に再コンパイルするかどうかに関する決定は、コンパイル時間に対してハードウェアおよびソフトウェアの潜在的な実行効率を重み付けすることを伴う。
【0089】
2002において、フラグメンテーション緩和前の構成バイナリ210(30)〜210(33)が示される。上記のように、未使用のまたは取り消されたreg exは網掛けで示される2004。この例において、reg ex108(1)、108(3)、108(5)、108(7)、および108(9)は、取り消されている。reg ex108(2)、108(4)、108(6)、および108(8)は、引き続き使用されている。2006において、新しく追加されたreg ex108(10)は、次の構成バイナリのコンパイルを待つ間、補助のreg ex処理モジュール124で実行する。
【0090】
この図において、コンパイル時間に対してハードウェアおよびソフトウェアの潜在的な実行効率を重み付けすることは、結果として1つの再コンパイルのリソースが使用可能になると仮定する。初期コンパイル中に生成されたリソース推定情報は取り出され、構成バイナリは最大の未使用のスペースから最小の未使用のスペースにソートされる。構成バイナリ210(30)は100%の未使用スペースを有し、構成バイナリ210(31)は約66%の未使用スペースを有し、構成バイナリ210(32)は約55%の未使用スペースを有し、構成バイナリ210(33)は約33%の未使用スペースを有する、
【0091】
1つの実施態様において、選択的再コンパイルは、補助のreg ex処理モジュール124によって実行されているreg ex108(1)をハードウェアに移動し、次いでreg exを最大の未使用スペースを持つ構成バイナリに移動することを伴うことができる。この図において、構成バイナリ210(30)および210(31)は、破線によって指示されるように2008、選択的再コンパイルのために選択される。
【0092】
アクティブなreg exは、N個の構成(1つのコンパイルが使用可能なので、この場合はN=1)が満たされるまで結合される。この図において、構成バイナリ210(30)は空になると廃棄され、構成バイナリ210(31)のreg ex108(2)は、2010においてreg ex108(2)と結合されて構成バイナリ210(34)を生成する。2012において、新しくコンパイルされた構成バイナリ210(34)および変更なしの構成バイナリ210(32)および210(33)を示す、選択的フラグメンテーション移行後の結果が表される。これは、ソフトウェアベースのreg exの数を0に減少させ、合計ハードウェア構成の数を4から3に減少させる。したがって、最小のコンパイルリソースが使用され、しかも全体的なフラグメンテーションを軽減している。
【0093】
タスクの優先順位付け、およびリソースの再利用
一部の実施態様において、タスクを優先順位付けすることが有益である場合がある。たとえば、今日のスパムが主に「クレジットカード」広告を扱うこともあり、したがってこの語句を見つけるように設計されるreg exは、これらの広く行き渡る出現を素早く除去するために、より高い優先度を与えられてもよい。
【0094】
図21は、正規表現の優先度を認識するハードウェア割り当て、ならびにそれらの正規表現の構成バイナリへのパッキングおよびスケジューリングを示す概略図2100である。この図において、通常の優先度のreg exは白で指定され、中程度の優先度のreg exは斜線で指定され、最高の優先度のreg exは影付きである。2102において、実行のための正規表現が示される。それらの中で、reg ex108(1)、108(6)、および108(8)は、最高の優先度である。reg ex108(5)は中程度の優先度として設計され、残りの108(2)、108(3)、108(4)、108(7)、108(9)、および108(10)は通常の優先度である。
【0095】
2104において、パックされ、コンパイルされて、実行のために順序付けられたreg exが示される。より高い優先度を有するreg exは共にパックされ、一部の実施態様において、より高速なプログラマブルハードウェアデバイス118で実行するよう設計されるか、実行シーケンス508の優先度を受信するか、またはさらに頻繁な実行のために実行シーケンス508の複数ポイントに配置されてもよい。示されているように、構成バイナリ210(41)は、すべての高い優先度のreg exに対して十分な容量を有する。構成バイナリ210(42)は、中程度の優先度のreg ex108(5)を含み、使用できる残りの追加の容量があったので通常の優先度の108(4)も含む。構成バイナリ210(41)および210(42)は共に、そのより高い優先度の内容を考慮してより高速なプログラマブルハードウェアデバイスで実行するために2106により示されるように指定されてもよい。通常の優先度のreg exを含む構成バイナリ210(43)および210(44)は、より遅いプログラマブルハードウェアデバイスで実行するように2108指定されてもよい。
【0096】
構成バイナリのパッキングおよび/または構成バイナリの実行シーケンスの優先度割り当ては、特定のタスクが先に実行されて、それらの結果が後の処理に影響を及ぼすようにするか、または後の処理全体を除去するように行なわれてもよい。たとえば、「zero down home mortgage financing bonanza」を探すreg exは、この項目の組み合わせがスパムメッセージのさらに容易な識別に役立つ可能性があることを前提に、「home mortgage」のreg exよりも高い優先度を与えられてもよい。
【0097】
図22は、構成バイナリの実行を再配分することによるアイドルプログラマブルハードウェアリソースの再利用を示す流れ図2200である。上記と同様に、この図において、矢印2202により指示されるようにページを下方に進むと時間が増大する。
【0098】
この例の場合、プログラマブルハードウェア118(1)および118(2)がバイナリ互換である2204、すなわち、いずれのプログラマブルハードウェアでも再コンパイルすることなく同一の構成バイナリ210が実行されてもよいと仮定する。また、初期実行シーケンス508が、構成バイナリ210(1)、210(2)、210(3)、210(4)、210(1)、210(2)、210(3)、210(4)のためのものであるというように仮定する。
【0099】
図2206において、通常の操作が示される。2208において、PHIM504は、構成バイナリ210(1)および210(2)をそれぞれプログラマブルハードウェア118(1)および118(2)にロードする。結果が返され、2210において、PHIM504は、構成バイナリ210(3)および210(4)をそれぞれプログラマブルハードウェア118(1)および118(2)にロードする。このプロセスは、初期実行シーケンス508全体を通過するように続行することができる。
【0100】
しかし、それぞれ構成バイナリ210(2)および210(4)に基づく計算論理120(2)および120(4)がアイドルであると仮定する。おそらくは、それらの計算論理は中断されていたか、または計算論理120(1)および120(3)の前に完了していた。初期実行シーケンスが連続して続行していた場合、プログラマブルハードウェアリソースは、これらのアイドル構成バイナリを待つか、または中断された構成バイナリを実行して浪費されていたであろう。したがって、この例において、初期実行シーケンスは、リソースを再利用するように変更される。
【0101】
2212において、このアイドル時間の再利用は、引き続きアクティブな構成バイナリの再配分を通じて示される。したがって、2214において、PHIM504は、構成バイナリ210(1)および210(3)をそれぞれプログラマブルハードウェア118(1)および118(2)にロードする。2216において、プログラマブルハードウェア118(1)および118(2)は、再度、構成バイナリ210(1)および210(3)に基づく計算論理120(1)および120(3)を実行する。計算論理120(2)および120(4)はアイドルであるので、これらはロードされて実行されることはない。したがって、120(2)および120(3)のような引き続き実行するよう指定されている計算論理は、アイドルまたは中断した計算論理によって妨げられることなく実行し続ける。
【0102】
前述のように、特定のreg exが他のreg exよりもさらに重要である場合、これらはさらに多くのリソースを与えられてもよい。図23および図24は、構成バイナリおよびその内部の正規表現の優先順位付けを示す流れ図2300である。この図において、矢印2302により指示されるようにページを下方に進むと時間が増大する。プログラマブルハードウェア118(1)および118(2)は、バイナリ互換であると仮定する2304。
【0103】
図23を参照すると、2306において、等しい優先度の操作が示される。任意の計算論理内のタスクには優先度が与えられない。実行シーケンス508は、構成バイナリ210(1)、210(2)、210(3)、210(4)、210(1)、210(2)、210(3)、210(4)などのためのものである。2308において、構成バイナリ210(1)および210(2)は、実行のために、それぞれプログラマブルハードウェア118(1)および118(2)にロードされる。2310において、構成バイナリ210(3)および210(4)は、実行のために、それぞれプログラマブルハードウェア118(1)および118(2)にロードされる。
【0104】
図24にフローを続行すると、2402において、構成バイナリ210(1)内のreg exは高い優先度を与えられており、そのほんのわずかなタイムスライスが増大されている。したがって、実行シーケンス508は、構成バイナリ210(1)、210(1)、210(1)、210(1)、210(1)、210(2)、210(1)、210(3)、210(1)、210(4)を実行するように変更される。したがって、2312において、構成バイナリ210(1)は、プログラマブルハードウェア118(1)および118(2)の両方にロードされる。2314において、両プログラマブルハードウェア上に計算論理120(1)がすでに存在するので、構成バイナリはロードされず、計算論理が再度実行される。
【0105】
2316において、計算論理120(1)は再度プログラマブルハードウェア118(1)で実行し、構成バイナリ210(2)はプログラマブルハードウェア118(2)にロードされて実行される。2318において、計算論理120(1)は再度実行し、構成バイナリ210(3)はロードされてプログラマブルハードウェア118(2)で実行される。2320において、計算論理120(1)は再度実行し、構成バイナリ210(4)はPHIM504によってプログラマブルハードウェア118(2)にロードされる。したがって、この例において、構成バイナリ210(1)内に含まれる高い優先度のreg exは、時間の70%で実行された。
【0106】
タスクのマージ
正規表現処理システム102の操作中、複数のユーザおよび/またはアプリケーションからのreg exが受信されてもよい。たとえば、スパムフィルタリングシステムは、ユーザまたは分析ソフトウェアによりフラグ設定されたスパムのようなスパムを指示する複数のストリングのストリームを受信することができる。図25は、コンパイルおよび/または実行における複数のユーザ/アプリケーションによる正規表現のマージャーを示す流れ図2500である。そのようなマージは、時間およびシステムリソースの点から比較的高価であるプログラマブルハードウェアの再構成を最小化することにより速度を増大させる。
【0107】
コンパイルマージ中、2502において、reg ex108(1)はユーザAから受信され、reg ex108(2)はユーザBから受信される。2504において、コンパイルモジュール112はこれらのreg exを処理し、これらがいずれも同じ構成バイナリで実行できることを決定し、2506において、reg ex108(1)および108(2)を含む構成バイナリ210(51)を生成する。2508において、ユーザAおよびBからの入力がPHSC114において受信される。2510において、PHIM504は、実行のために構成バイナリ210(51)をロードし、2512においてプログラマブルハードウェアは構成バイナリを実行して、結果をPHIM504に返す。次いで、PHSC114は、結果をそれぞれのユーザに返す。利点の中でも特に、マージは、コンテキスト切り替えの必要性をなくす。たとえば、マージしなければ、ユーザAとユーザBとの間でコンテキストを切り替えることが必要になる。したがって、ユーザAのreg ex108(1)は、reg ex108(2)が待機している間に実行していることになる。reg ex108(1)が完了すると、reg ex108(2)は実行する。マージにより、両方が同時に実行することができる。
【0108】
このプロセスのセキュリティは、単に基礎をなすコンパイルモジュール112およびPHSC114はそれらの2つの異なるreg exが同時に実行されたことを認識しているので、マージ中に保持される。ユーザAおよびユーザBは、マージャーに気付いてはおらず、それぞれの結果は別々のままである。
【0109】
遅延構成ページング
マージに加えて、複数のアプリケーションまたはユーザは、正規表現処理システム102の操作中にリソースを共有することができる。図26は、この共有を容易にするための構成バイナリの遅延構成ページングを示す流れ図2600である。遅延ページングは、タスクの遅延を考慮に入れて、それらのタスクの統合を可能にし、プログラマブルハードウェアの再構成を最小化することができる。
【0110】
この図において、矢印2602により指示されるようにページを下方に進むと時間が増大する。2604において、PHSC114は、コーパスの第1の部分のような、入力Aを持つreg ex108(80)を受信する。PHSC114は、プログラマブルハードウェアでの実行のためにreg exをPHIM504に渡し、結果をユーザに返す。
【0111】
2606において、PHSC114は、処理のためにreg ex108(81)を受信する。しかし、reg ex108(80)の追加の処理が発生することが予想されていた。その結果、reg ex108(81)の処理が遅延する。
【0112】
2608において、コーパスの第2の部分のような、今回は入力Bを持つreg ex108(80)が再度要求される。プログラマブルハードウェア118(2)はすでに、ロードされたreg ex108(80)を組み入れる構成210(80)を有しているので、再構成のための遅延はなく、処理は開始することができる。次いで、これらの結果はユーザに返される。
【0113】
2610において、reg ex108(80)は完了し、遅延したreg ex108(81)はここでロードされてプログラマブルハードウェア118(2)によって実行されてもよい。次いで、これらの結果はユーザに返されてもよい。
【0114】
したがって、一部の実施態様において、作業は、現在ロードされておらず、受信された順序と比較して順不同に実行される構成バイナリ210について格納されてもよい。それにより、プログラマブルハードウェア118への構成バイナリ210のロードの回数と頻度を最小化することによって、さらに大幅に効率を高めることができる。
【0115】
サブバイナリコンパイル
コンパイルは、プログラマブルハードウェア118を使用するように設計された構成バイナリ全体の細分性を下回る細分性のレベルにおいて生じることがある。一部の再構成可能なハードウェアデバイスは、部分的な動的再構成、すなわち、デバイス全体よりも少ない細分性における再構成を考慮に入れる。図27は、後に完全な構成バイナリを作成するよう結合されうる構成バイナリサブエレメントのコンパイルを示す流れ図2700である。
【0116】
プログラマブルハードウェア208のCADツールによって必要とされる実行時間は、計算論理120のサイズに対して超線形に増大する。そのため、パフォーマンスの利点は、より大きい構成バイナリまたはHDLファイルをより小さいファイルに分割して、それらのより小さいファイルを別個にコンパイルすることによって認識することができる。次いで、結果として得られるサブエレメントは、完全な計算論理を形成するように結合されてもよい。より高速なCADツール208のコンパイル時間に加えて、バイナリは、多大なリソースおよび時間を要する全構成バイナリの再コンパイルを必要とするのではなく、それらの事前構成されたサブエレメントを操作することができるので、デフラグおよび再構成を行ないやすい。それらのサブエレメントのパッキングは、(構成全体に対し静的に1回ではなく)動的に行なわれてもよい。
【0117】
この図において、正規表現108(1)および108(2)、ならびに通信および制御論理(CC)306は、サブエレメントのコンパイルのために構成されたコンパイルモジュール112によって受信される。HDLコンパイラ202は、各々に対してHDLファイルを作成する。したがって、RE108(1)に対してHDLファイル2702(1)、RE108(2)に対してHDLファイル2702(2)、RE108(3)に対してHDLファイル2702(3)がコンパイルされる。CADツール208は、サブエレメントの作成のためにそれらのHDLファイル2702(1)〜2702(3)を受け入れる。結果としてreg ex108(1)は構成バイナリサブエレメント2704(1)をもたらし、reg ex108(2)は構成バイナリサブエレメント2704(2)をもたらし、CC306は構成バイナリサブエレメント2704(3)をもたらす。
【0118】
バイナリサブエレメントは実行のために選択されてもよいので、バイナリマージモジュール2706は、これらのサブエレメントをまとめて結合構成バイナリ2708を生成することができる。次いで、この結合構成バイナリ2708は、ロードされてプログラマブルハードウェア118によって実行されてもよい。
【0119】
計算の結合およびスーパーセット
追加のパフォーマンスの利点は、計算およびスーパーセットの組み合わせを通じて達成されうる。図28は、正規表現を結合する計算を示す概略図2800である。類似または重複するreg exのような計算は、結合されてもよい。たとえば、いくつかのスパムフィルタリングアプリケーションおよびユーザが、処理のためにreg exのグループをサブミットすると仮定する。それらのグループ内に、共通の実行のために見出されてパックされうる重複があってもよい。
【0120】
2802において、実行のための正規表現が示される。これらは、2804において、reg ex108(1)〜108(6)を含むタスクAを含む。さらに実行のためにreg exに含まれるのは、2806において、reg ex108(1)、108(4)、108(6)、108(7)、108(8)、および108(9)を含むタスクBである。重複するreg exは、影付きで示される。reg ex108(1)、108(4)、および108(6)は、2つのタスク間で共通である。計算の結合を行なわない場合、12のreg exすべてを包含するために4つの構成バイナリが必要であったことになる。
【0121】
しかし、計算の結合を通じて、この数は3つの構成バイナリに減少されうる。2808において、結合されてコンパイルされたreg exが示される。構成バイナリ210(61)は、reg ex108(1)、108(4)、および108(6)を含み、構成バイナリ210(62)および210(63)は、重複することなく、残りの正規表現を組み入れる。追加の利点は、タスクA2804とタスクB2806間を切り替える場合に、4つではなく、1つの再構成しか必要ないということである。
【0122】
図29は、重複するかまたは類似する部分を有する正規表現のスーパーセットを示す概略図2900である。上記のように、reg exの重複または類似する部分は網掛けで示される。2902において、実行のための正規表現が示される。reg ex108(1)、108(2)、および108(3)は、実行を待っている。ここで示されるように、reg ex108(2)の一部は、reg ex108(1)と類似している。たとえば、reg ex108(1)がストリング「home mortgage」用であり、reg ex108(2)がストリング「refinancing およびequity from your home mortage」用であると仮定する。したがって、108(2)は、ストリング「home mortgage」の一部の、108(1)と類似する部分を含み、それは影付きで示される。
【0123】
コンパイルモジュール112によるコンパイル中に、類似または同一の部分は結合される。2904において、パックされてコンパイルされた正規表現のスーパーセットが示される。構成バイナリ210(71)内に、reg ex108(2)が、108(1)に共通な部分、108(3)、およびCC306(1)と共に示される。同じ作業がreg ex108(2)の共通部分によって行なわれるので、reg ex108(1)は構成バイナリ210(71)に含まれていない。実行後、PHSC114は、結果を分離して、それらを108(1)がプログラマブルハードウェアで別々に実行されたかのように返す。
【0124】
スーパーセットにより、実行に必要な計算リソースの低減が可能になる。スーパーセットはまた、より多くの等価の正規表現を、より少ない構成バイナリで実行できるようにすることで、再構成の必要性を減少させる。
【0125】
異種のFPGAの処理
システム102内のプログラマブルハードウェア118は、同一である必要はないか、またはビットストリーム互換でさえなくてもよい。システム102は、さまざまなサイズ、速度、グレード、製造業者、オンボードメモリ容量などのデバイスを含むことができる。異種ハードウェアが存在する場合、プログラマブルハードウェアデバイス118は、既存のreg ex配分、およびデバイスのワークロード(他のデバイスよりも使用されることが少ないデバイスもある)、およびreg ex優先度に応じて使用の対象とされてもよい。
【0126】
対象となるプログラマブルハードウェア118の選択は、複数の因子に影響を及ぼす。それらの因子は、異なるハードウェアに基づくリソース要件の推定の変動を含む。たとえば、ある製造業者が他の製造業者とは異なる基本論理素子を使用し、その結果reg exがプログラマブルハードウェア118で実施される方法に差異が生じることもある。
【0127】
対象となるプログラマブルハードウェア118の選択により影響を受けるもう1つの因子は、パッキング能力である。パッキング能力は、プログラマブルハードウェア118の容量を反映する。たとえば、より大きいデバイスは、小さいデバイスよりも多くのreg exを保持することができる。これは、複数の構成にわたりreg exが分割されうる場所および方法に影響を及ぼす。
【0128】
部分的なreg exをマップするための実現可能性もまた、対象プログラマブルハードウェアの決定中に影響を受けることがある。たとえば、時として、中間データのサイズが入力コーパスデータとほぼ同じ規模である場合、オンボードメモリはパフォーマンスにとって有益となりうる。そのような状況において、対象プログラマブルハードウェアの決定は、ハードウェアがそれを処理する実現可能性を考慮に入れることができる。
【0129】
システムコントローラの操作は、さまざまなデバイスがさまざまなコマンドで制御されうることを考えると、対象プログラマブルハードウェアによっても影響を受ける。最終的に、仮想化の「ポータビリティ」は、対象となるプログラマブルハードウェアの差異により影響を受ける。たとえば、スペアリングまたは再配分のような、フォールトトレランスを迅速に調整することに関して、本来故障したデバイスに割り振られるreg exは、再コンパイルを行なうことなく他のビットストリーム互換のプログラマブルハードウェアに移行することができる。
【0130】
構成の事前取り出し/ページング
複数のアプリケーションまたはユーザが同じ物理プラットフォームを共有する場合、固有の構成バイナリ210またはサブエレメントの呼び出しが予測されることもある。したがって、構成バイナリは、メモリ事前取り出しおよび投機的実行と類似する方法でプリロードされてもよい。
【0131】
FPGAとの直接通信
前述のように、一部の実施態様において、PHSC114は、ユーザとの間のスケジューリングおよびデータフローを処理することができる。次いで、プログラマブルハードウェア118は、入力データの再生、出力データの再配列、再構成の順序付けなどを処理する機能を含むことができる。この実施態様におけるプログラマブルハードウェア118は、状態情報を格納するための追加の外部メモリを必要とすることがある。
【0132】
もう1つの実施態様において、プログラマブルハードウェア118は、自ら、最初に入力データの受信を最初に処理することができる。この実施態様において、プログラマブルハードウェア118は、入力データを受信し、現在ロードされている計算論理120による検索の実行を開始する。プログラマブルハードウェア118は、入力データを、ソフトウェアで実行しているPHSC114の一部に中継して返す。PHSC114のこのソフトウェアベースの部分は、データの再生、出力データの再配列、およびプログラマブルハードウェア118の再構成に責任を負う。
【0133】
結論
例示の方法の特定の詳細は、本明細書において提示される図面およびその他の流れ図に関して説明されるが、図面に示される特定の動作が説明されている順序で実行される必要はなく、変更されてもよく、および/または状況に応じて全体が省略されてもよいことを理解されたい。本出願において説明されるように、モジュールおよびエンジンは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせとして実施されてもよい。さらに、説明される動作および方法は、コンピュータ、プロセッサ、またはメモリに格納された命令に基づくその他のコンピューティングデバイスにより実施されてもよく、メモリは1つまたは複数のコンピュータ可読ストレージ媒体(CRSM)を備える。
【0134】
CRSMは、格納されている命令を実施するためにコンピューティングデバイスによってアクセス可能な任意の使用可能な物理媒体であってもよい。CRSMは、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電気的消去再書き込み可能読み出し専用メモリ(EEPROM)、フラッシュメモリその他のソリッドステートメモリ技術、コンパクトディスク読み取り専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)またはその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたはその他の磁気記憶装置、もしくは望ましい情報を格納するために使用することができ、コンピューティングデバイスによってアクセスすることができる任意の他の媒体を含むことができるが、これらに限定されることはない。
【特許請求の範囲】
【請求項1】
1つまたは複数のコンピュータ可読ストレージ媒体であって、プロセッサによって実行される場合、前記プロセッサに、
正規表現のリストを解析し、正規表現の前記リストを対応する論理および状態方程式に変換するステップ(902)と、
プログラマブルハードウェアデバイスで前記論理および状態方程式を実施するための物理リソース要件を推定するステップ(904)と、
前記論理および状態方程式をセットに配分するステップであって、前記推定される物理リソース要件に基づき、各セットは、制御および通信論理と結合される場合、前記プログラマブルハードウェアデバイス内に収まるようにサイズ調整されるステップ(906)と、
前記制御および通信論理を各セットに追加するステップ(908)と、
各セットに対してハードウェア定義言語(HDL)ファイルを生成するステップ(910)と、
各HDLファイルから構成バイナリを生成するステップ(914)であって、各構成バイナリは前記プログラマブルハードウェアデバイスで実行するように構成されるステップと
を備える動作を実行させる命令を格納することを特徴とするコンピュータ可読ストレージ媒体。
【請求項2】
前記セットのうちの1つまたは複数の構成仕様を生成するステップ(912)をさらに備えることを特徴とする請求項1に記載のコンピュータ可読ストレージ媒体。
【請求項3】
計算論理を生成するために、前記構成バイナリを前記プログラマブルハードウェアデバイスにロードするステップ(1104)と、
コーパスの少なくとも一部を前記プログラマブルハードウェアデバイスにロードするステップ(1106)と、
前記ロードされたコーパスに対して前記プログラマブルハードウェアデバイスで前記計算論理を実行するステップ(1108)と
をさらに備えることを特徴とする請求項1または2のいずれか一項に記載のコンピュータ可読ストレージ媒体。
【請求項4】
前記物理リソース要件を推定するステップは、
特定の正規表現を前記プログラマブルハードウェアデバイスの計算論理に関連付けるステップ(1002)と、
統合された論理を形成するために、前記計算論理内から冗長な論理を識別して除去するステップ(1004)と、
前記プログラマブルハードウェアデバイスでの前記統合された論理のローカルストレージ要件を推定するステップ(1006)と、
コンピュータ支援設計ツール固有の修正率を前記統合された論理およびローカルストレージ要件に適用するステップ(1008)と、
前記推定された統合された論理およびローカルストレージ要件に基づいて推定された物理リソース要件を生成するステップと
を備えることを特徴とする請求項1から3のいずれか一項に記載のコンピュータ可読ストレージ媒体。
【請求項5】
前記リストの正規表現を廃棄リストに追加するステップ(1210)と、
前記廃棄リストの前記正規表現に関連付けられている実行結果を廃棄するステップ(1212)と
をさらに備えることを特徴とする請求項1から4のいずれか一項に記載のコンピュータ可読ストレージ媒体。
【請求項6】
実行結果を、対応する論理および状態方程式によって表される正規表現の前記リストに含まれていない追加の正規表現でパッチするステップ(1214)をさらに備えることを特徴とする請求項3に記載のコンピュータ可読ストレージ媒体。
【請求項7】
使用不可能なプログラマブルハードウェアデバイスから使用可能なプログラマブルハードウェアデバイスに構成バイナリの前記ロードを動的にリダイレクトするステップ(1402)をさらに備えることを特徴とする請求項3に記載のコンピュータ可読ストレージ媒体。
【請求項8】
廃棄された正規表現に関連付けられている計算論理を前記セットから除去するステップ(1902)と、
残りの計算論理と制御および通信論理を新しい1つまたは複数のセットに再配分するステップ(1908)と
をさらに備えることを特徴とする請求項1から7のいずれか一項に記載のコンピュータ可読ストレージ媒体。
【請求項9】
前記構成バイナリは、複数の構成バイナリサブエレメントを備える(2700)ことを特徴とする請求項1から8のいずれか一項に記載のコンピュータ可読ストレージ媒体。
【請求項10】
プログラマブルハードウェアデバイスでの実行に適切なプロセッサ論理および状態情報を生成するステップであって、前記実行は結果として複数のタスクの処理をもたらすステップと、
前記論理および状態情報を処理するために前記プログラマブルハードウェアデバイスによって必要とされるハードウェア容量を推定するステップと、
前記推定されたハードウェア容量の要件に基づいて、各セットの前記論理および状態情報が前記プログラマブルハードウェアデバイスのハードウェア容量内に収まるように、前記論理および状態情報をセットに配分するステップと
を備えることを特徴とする方法。
【請求項11】
前記プログラマブルハードウェアデバイスで実行するように構成される構成バイナリを各セットに対して生成するステップと、
前記構成バイナリに基づいて構成仕様を生成するステップと
をさらに備えることを特徴とする請求項10に記載の方法。
【請求項12】
前記プログラマブルハードウェアデバイスでの前記セットの実行優先度を決定するステップであって、前記実行優先度は高い優先度のタスクおよび低い優先度のタスクを含むステップと、
低い優先度のタスクを実行するプログラマブルハードウェアよりも速いプログラマブルハードウェアで高い優先度のタスクを含む前記セットを実行するように順序付けるステップと
をさらに備えることを特徴とする請求項10または11のいずれか一項に記載の方法。
【請求項13】
前記プログラマブルハードウェアデバイスでの実行のためにタスクを優先度レベルにより順序付けるステップと、
高い優先度のタスクが、最初に実行されるかまたは低い優先度のセットよりも頻繁に実行されるセットに配分されるように、セット内で前記タスクを配分するステップと
をさらに備えることを特徴とする請求項10から12のいずれか一項に記載の方法。
【請求項14】
プロセッサと、
前記プロセッサに結合されたメモリと、
前記メモリに格納され、前記プロセッサで実行するように構成されたユーザインターフェイスと、
前記ユーザインターフェイスを通じて取得され、前記メモリに格納された複数のタスクと、
メモリに格納されたコンパイルモジュールであって、
前記複数のタスクの少なくとも一部を対応する論理および状態方程式に変換し、
プログラマブルハードウェアデバイスで前記論理および状態方程式を実施するための物理リソース要件を推定し、
前記推定される物理リソース要件に基づいて前記論理および状態方程式をセットに配分し、各セットは、制御および通信論理と結合される場合、前記プログラマブルハードウェアデバイス内に収まるようにサイズ調整され、
各セットの構成バイナリを生成するように構成されたコンパイルモジュールと、
前記プログラマブルハードウェアデバイスに対する前記構成および入出力データのマーシャリングを管理するために前記プロセッサで実行するように構成されたプログラマブルハードウェアシステムコントローラと
を備えることを特徴とするシステム。
【請求項15】
前記ユーザインターフェイスにより取得され、メモリに格納された前記複数のタスクは、データのコーパスに対して実行されるように構成された正規表現であることを特徴とする請求項14に記載のシステム。
【請求項1】
1つまたは複数のコンピュータ可読ストレージ媒体であって、プロセッサによって実行される場合、前記プロセッサに、
正規表現のリストを解析し、正規表現の前記リストを対応する論理および状態方程式に変換するステップ(902)と、
プログラマブルハードウェアデバイスで前記論理および状態方程式を実施するための物理リソース要件を推定するステップ(904)と、
前記論理および状態方程式をセットに配分するステップであって、前記推定される物理リソース要件に基づき、各セットは、制御および通信論理と結合される場合、前記プログラマブルハードウェアデバイス内に収まるようにサイズ調整されるステップ(906)と、
前記制御および通信論理を各セットに追加するステップ(908)と、
各セットに対してハードウェア定義言語(HDL)ファイルを生成するステップ(910)と、
各HDLファイルから構成バイナリを生成するステップ(914)であって、各構成バイナリは前記プログラマブルハードウェアデバイスで実行するように構成されるステップと
を備える動作を実行させる命令を格納することを特徴とするコンピュータ可読ストレージ媒体。
【請求項2】
前記セットのうちの1つまたは複数の構成仕様を生成するステップ(912)をさらに備えることを特徴とする請求項1に記載のコンピュータ可読ストレージ媒体。
【請求項3】
計算論理を生成するために、前記構成バイナリを前記プログラマブルハードウェアデバイスにロードするステップ(1104)と、
コーパスの少なくとも一部を前記プログラマブルハードウェアデバイスにロードするステップ(1106)と、
前記ロードされたコーパスに対して前記プログラマブルハードウェアデバイスで前記計算論理を実行するステップ(1108)と
をさらに備えることを特徴とする請求項1または2のいずれか一項に記載のコンピュータ可読ストレージ媒体。
【請求項4】
前記物理リソース要件を推定するステップは、
特定の正規表現を前記プログラマブルハードウェアデバイスの計算論理に関連付けるステップ(1002)と、
統合された論理を形成するために、前記計算論理内から冗長な論理を識別して除去するステップ(1004)と、
前記プログラマブルハードウェアデバイスでの前記統合された論理のローカルストレージ要件を推定するステップ(1006)と、
コンピュータ支援設計ツール固有の修正率を前記統合された論理およびローカルストレージ要件に適用するステップ(1008)と、
前記推定された統合された論理およびローカルストレージ要件に基づいて推定された物理リソース要件を生成するステップと
を備えることを特徴とする請求項1から3のいずれか一項に記載のコンピュータ可読ストレージ媒体。
【請求項5】
前記リストの正規表現を廃棄リストに追加するステップ(1210)と、
前記廃棄リストの前記正規表現に関連付けられている実行結果を廃棄するステップ(1212)と
をさらに備えることを特徴とする請求項1から4のいずれか一項に記載のコンピュータ可読ストレージ媒体。
【請求項6】
実行結果を、対応する論理および状態方程式によって表される正規表現の前記リストに含まれていない追加の正規表現でパッチするステップ(1214)をさらに備えることを特徴とする請求項3に記載のコンピュータ可読ストレージ媒体。
【請求項7】
使用不可能なプログラマブルハードウェアデバイスから使用可能なプログラマブルハードウェアデバイスに構成バイナリの前記ロードを動的にリダイレクトするステップ(1402)をさらに備えることを特徴とする請求項3に記載のコンピュータ可読ストレージ媒体。
【請求項8】
廃棄された正規表現に関連付けられている計算論理を前記セットから除去するステップ(1902)と、
残りの計算論理と制御および通信論理を新しい1つまたは複数のセットに再配分するステップ(1908)と
をさらに備えることを特徴とする請求項1から7のいずれか一項に記載のコンピュータ可読ストレージ媒体。
【請求項9】
前記構成バイナリは、複数の構成バイナリサブエレメントを備える(2700)ことを特徴とする請求項1から8のいずれか一項に記載のコンピュータ可読ストレージ媒体。
【請求項10】
プログラマブルハードウェアデバイスでの実行に適切なプロセッサ論理および状態情報を生成するステップであって、前記実行は結果として複数のタスクの処理をもたらすステップと、
前記論理および状態情報を処理するために前記プログラマブルハードウェアデバイスによって必要とされるハードウェア容量を推定するステップと、
前記推定されたハードウェア容量の要件に基づいて、各セットの前記論理および状態情報が前記プログラマブルハードウェアデバイスのハードウェア容量内に収まるように、前記論理および状態情報をセットに配分するステップと
を備えることを特徴とする方法。
【請求項11】
前記プログラマブルハードウェアデバイスで実行するように構成される構成バイナリを各セットに対して生成するステップと、
前記構成バイナリに基づいて構成仕様を生成するステップと
をさらに備えることを特徴とする請求項10に記載の方法。
【請求項12】
前記プログラマブルハードウェアデバイスでの前記セットの実行優先度を決定するステップであって、前記実行優先度は高い優先度のタスクおよび低い優先度のタスクを含むステップと、
低い優先度のタスクを実行するプログラマブルハードウェアよりも速いプログラマブルハードウェアで高い優先度のタスクを含む前記セットを実行するように順序付けるステップと
をさらに備えることを特徴とする請求項10または11のいずれか一項に記載の方法。
【請求項13】
前記プログラマブルハードウェアデバイスでの実行のためにタスクを優先度レベルにより順序付けるステップと、
高い優先度のタスクが、最初に実行されるかまたは低い優先度のセットよりも頻繁に実行されるセットに配分されるように、セット内で前記タスクを配分するステップと
をさらに備えることを特徴とする請求項10から12のいずれか一項に記載の方法。
【請求項14】
プロセッサと、
前記プロセッサに結合されたメモリと、
前記メモリに格納され、前記プロセッサで実行するように構成されたユーザインターフェイスと、
前記ユーザインターフェイスを通じて取得され、前記メモリに格納された複数のタスクと、
メモリに格納されたコンパイルモジュールであって、
前記複数のタスクの少なくとも一部を対応する論理および状態方程式に変換し、
プログラマブルハードウェアデバイスで前記論理および状態方程式を実施するための物理リソース要件を推定し、
前記推定される物理リソース要件に基づいて前記論理および状態方程式をセットに配分し、各セットは、制御および通信論理と結合される場合、前記プログラマブルハードウェアデバイス内に収まるようにサイズ調整され、
各セットの構成バイナリを生成するように構成されたコンパイルモジュールと、
前記プログラマブルハードウェアデバイスに対する前記構成および入出力データのマーシャリングを管理するために前記プロセッサで実行するように構成されたプログラマブルハードウェアシステムコントローラと
を備えることを特徴とするシステム。
【請求項15】
前記ユーザインターフェイスにより取得され、メモリに格納された前記複数のタスクは、データのコーパスに対して実行されるように構成された正規表現であることを特徴とする請求項14に記載のシステム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【公表番号】特表2012−530976(P2012−530976A)
【公表日】平成24年12月6日(2012.12.6)
【国際特許分類】
【出願番号】特願2012−516360(P2012−516360)
【出願日】平成22年6月18日(2010.6.18)
【国際出願番号】PCT/US2010/039271
【国際公開番号】WO2010/148367
【国際公開日】平成22年12月23日(2010.12.23)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】
【公表日】平成24年12月6日(2012.12.6)
【国際特許分類】
【出願日】平成22年6月18日(2010.6.18)
【国際出願番号】PCT/US2010/039271
【国際公開番号】WO2010/148367
【国際公開日】平成22年12月23日(2010.12.23)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】
[ Back to top ]