(58)【調査した分野】(Int.Cl.,DB名)
前記バッファは、前記リザルトデータを前記複数のレコードに書き込むように構成される書込み制御モジュールと、前記複数のレコードからデータを読み出すように構成される読出し制御モジュールとを含む、
ことを特徴とする請求項11に記載の装置。
前記リザルトデータは、1つの基準の充足、1つの検索基準を充足する前記複数のデータフローのうちの1つからのタームのシーケンス、1つの基準を充足する前記複数のデータフローのうちの1つの部分を識別する識別子、前記複数のデータフローのうちの1つの部分が1つの基準を充足する期間、またはこれらの任意の組合せを含む、
ことを特徴とする請求項11に記載の装置。
【発明を実施するための最良の形態】
【0005】
図1は、データストリーム12を検索するシステム10の一実施例を示す。システム10は、検索基準16に従ってデータストリーム12を検索するパターン認識プロセッサ14を含んでもよい。
【0006】
各検索基準は、一つ以上の対象表現、すなわちパターンを特定してもよい。“対象表現”という用語は、パターン認識プロセッサ14が検索するためのデータシーケンスのことを称する。対象表現の例は、ある単語を綴る文字配列、遺伝子を特定する遺伝子塩基対シーケンス、画像の一部を形成する画像ファイルもしくはビデオファイルにおけるビットシーケンス、プログラムの一部を形成する実行可能ファイルにおけるビットシーケンス、または、歌もしくは口語表現の一部を形成するオーディオファイルにおけるビットシーケンスを含む。
【0007】
検索基準は、一つ以上の対象表現を特定してもよい。例えば、検索基準は、文字列“cl”で始まる全5文字の単語、文字列“cl”で始まるあらゆる単語、3回以上“cloud”という単語を含む段落などを特定してもよい。対象表現のうちで生じうる組の数は、任意の大きさであり、例えば、データストリームが表わすことが可能であるデータの順列が存在するのと同一数の対象表現が存在する可能性がある。検索基準は、種々のフォーマットで表現されてもよく、そのフォーマットは、正規表現として、各対象表現を必ずしも記載することなく、対象表現の組を簡潔に特定するプログラミング言語を含む。
【0008】
各検索基準は、一つ以上の検索ターム(項目)から構成されてもよい。したがって、検索基準の各対象表現は一つ以上の検索タームを含み、幾つかの対象表現は、共通の検索タームを使用してもよい。本明細書で使用されるように、“検索ターム”という用語は、単一の検索周期の間に検索されるデータのシーケンスのことを称する。データのシーケンスは、バイナリフォーマットもしくは、例えば、10進法、ASCIIなどの他のフォーマットにおける複数ビットのデータを含んでもよい。シーケンスは、単一のディジットもしくは複数のディジット(例えば幾つかのバイナリディジット)でデータをエンコードしてもよい。例えば、パターン認識プロセッサ14は、一度に一文字をテキストデータストリーム12から検索し、検索タームは、例えば、文字“a”、文字“a”か“e”のいずれか、または、全ての単一文字の組を特定するワイルドカード検索タームなど、単一文字の組を特定してもよい。
【0009】
検索タームは、文字(もしくは、データストリームによって表現される情報の他の書記素(grapheme)、すなわち基本単位、例えば、音符、遺伝子塩基対、10進法のディジット、サブピクセル)を特定するビット数よりも小さいか、または大きくてもよい。例えば、検索タームは8ビットであり、単一文字は16ビットであり、この場合には、二つの連続した検索タームは単一文字を特定してもよい。
【0010】
検索基準16は、コンパイラ18によってパターン認識プロセッサ14のためにフォーマットされてもよい。フォーマットするステップは、検索基準から検索タームを分解するステップを含んでもよい。例えば、データストリーム12によって表現された書記素が検索タームよりも大きい場合、コンパイラは単一の書記素を検索するために、複数の検索タームへと検索基準を分解してもよい。同様に、データストリーム12によって表現された書記素が検索タームよりも小さい場合、コンパイラ18は、各個別の書記素に対して、使用されていないビットを単一の検索タームに提供してもよい。コンパイラ18は、パターン認識プロセッサ14によって本来サポートされていない種々の正規表現演算子をサポートするために、検索基準16をフォーマットしてもよい。
【0011】
パターン認識プロセッサ14は、データストリーム12から各新規タームを評価することによって、データストリーム12を検索してもよい。本明細書における“ターム”という用語は、検索タームに一致しうるデータ量のことを称する。検索周期の間、パターン認識プロセッサ14は、現在提示されているタームが検索基準において現在の検索タームに一致するかどうかを決定してもよい。タームが検索タームと一致する場合には、評価は“進行”し、すなわち、次のタームが検索基準における次の検索タームと比較される。そのタームが一致しない場合には、次のタームは、検索基準における第一のタームと比較され、それによって検索をリセットする。
【0012】
各検索基準は、パターン認識プロセッサ14における異なる有限ステートマシンへとコンパイルされてもよい。有限ステートマシンは、パラレルに(並行して)実行してもよく、検索基準16に従ってデータストリーム12を検索する。有限ステートマシンは、先行する検索タームがデータストリーム12によって一致する場合に検索基準における連続する各検索タームへと進んでもよい。または、検索タームが一致しない場合には、有限ステートマシンは検索基準における第一の検索タームの検索を開始してもよい。
【0013】
パターン認識プロセッサ14は、幾つかの検索基準に従って各新規タームを評価し、ほぼ同時に、例えば、単一のデバイス周期の間に其々の検索タームを評価してもよい。パラレルな有限ステートマシンは、ほぼ同時にデータストリーム12からタームを各々受信し、パラレルな有限ステートマシンの各々は、そのタームが、パラレルな有限ステートマシンを検索基準における次の検索タームへと進めるかどうかを決定してもよい。パラレルな有限ステートマシンは、比較的多数例えば、100以上、1000以上、もしくは10000以上の検索基準に従って、タームを評価してもよい。それらはパラレルに動作するため、データストリームを遅延させることなく、例えば、64MB毎秒もしくは128MB毎秒より大きいかほぼ同一のデータストリーム12の比較的高いバンド幅を有するデータストリーム12に対して検索基準を適用してもよい。幾つかの実施形態においては、検索周期の継続期間は、検索基準の数によって増減しないため、検索基準の数はパターン認識プロセッサ14の性能にあまりまたは全く影響を与えることはない。
【0014】
検索基準が充足されるとき(すなわち、最後の検索タームに進行してそれが一致した後)、パターン認識プロセッサ14は、中央処理装置(CPU)20などの処理装置に対して基準を充足したことを報告してもよい。中央処理装置20は、パターン認識プロセッサ14およびシステム10の他の部分を制御してもよい。
【0015】
システム10は、データのストリームを検索する種々のシステムもしくはデバイスのうちのいずれであってもよい。例えば、システム10は、データストリーム12を監視するデスクトップ、ラップトップ、ハンドヘルドもしくは他のタイプのコンピュータであってもよい。システム10は、ルータ、サーバ、もしくはクライアント(例えば、前述されたタイプのコンピュータのうちの一つ)などのネットワークノードであってもよい。システム10は、コピー機、スキャナ、プリンタ、ゲーム機、テレビ、セットトップビデオ分配もしくは録画システム、ケーブルボックス、パーソナルデジタルメディアプレイヤー、工場自動化システム、自動車用コンピュータシステムもしくは医療デバイスなどの他の種類の何らかの電子デバイスであってもよい。(これらの種々のシステムの実施例を記述するために使用される用語は、本明細書で使用される他の多くの用語と同様に、幾つかの指示対象を共有し、それ自体は、列挙された他のタームによって、範囲を狭めて構成されるべきではない。)
【0016】
データストリーム12は、ユーザもしくは他の主体が検索を望む可能性のある、種々のタイプの一つ以上のデータストリームであってもよい。例えば、データストリーム12は、インターネットを介して受信されたパケット、または、携帯電話ネットワークを介して受信された音声もしくはデータなど、ネットワークを介して受信されたデータのストリームであってもよい。データストリーム12は、画像センサ、温度センサ、加速度計などもしくはその組み合わせなど、システム10と通信するセンサから受信されたデータであってもよい。データストリーム12は、シリアルデータストリームとしてシステム10によって受信され、データは、時間的、語彙的、もしくは意味的に意義のある順序など、意味のある順序で受信される。または、データストリーム12は、パラレルにもしくはバラバラの順序で受信され、その後、例えば、インターネットを介して受信されたパケットを順序づけることによって、シリアルデータストリームへと変換される。幾つかの実施形態においては、データストリーム12は、タームをシリアルに提示してもよいが、各タームを表すビットはパラレルに受信されてもよい。データストリーム12は、システム10に対して外部ソースから受信されてもよいか、または、メモリデバイスにインテロゲート(伝送)し、格納されたデータからデータストリーム12を形成することによって形成されてもよい。
【0017】
データストリーム12におけるデータのタイプに依存して、異なるタイプの検索基準が設計者によって選択されてもよい。例えば、検索基準16は、ウイルス定義ファイルであってもよい。ウイルスもしくは他のマルウェアは特徴づけられ、マルウェアの態様は、データストリーム12がマルウェアを伝送しうるかどうかを示す検索基準を形成するために使用されてもよい。結果として生じる検索基準はサーバに格納され、クライアントシステムのオペレータはシステム10へと検索基準をダウンロードするサービスに登録してもよい。検索基準16は、異なるタイプのマルウェアが現れたとき、サーバから定期的にアップデートされてもよい。検索基準は、ネットワークを介して受信される可能性のある望ましくないコンテンツ(例えば、(スパムとしてよく知られている)迷惑電子メールもしくはユーザが望まない他のコンテンツ)を特定するために使用されてもよい。
【0018】
データストリーム12はシステム10によって受信されたデータに対して関心を持っている第三者によって検索されてもよい。例えば、データストリーム12は、著作物において生じる文字列、音声シーケンス、ビデオシーケンスに関して監視されてもよい。データストリーム12は、刑事捜査もしくは民事手続きに関係する発話、もしくは使用者にとって関心のある発話に対して監視されてもよい。
【0019】
検索基準16は、例えば、CPU20もしくはパターン認識プロセッサ14によってアドレス可能なメモリにおいて、翻訳が可能であるデータストリーム12におけるパターンを含んでもよい。例えば、検索基準16は、対応するスペイン語がメモリに格納された英単語を各々特定してもよい。別の実施例においては、検索基準16は、例えば、デコードされたバージョンのデータストリーム12が使用可能であるMP3、MPEG4、FLAC、Ogg Vorbisなど、エンコードされたバージョンのデータストリーム12を特定してもよいし、その逆を特定してもよい。
【0020】
パターン認識プロセッサ14は、CPU20と共に(単一のデバイスなどの)単一の構成部分に統合されたハードウェアであってもよいし、別個の構成部分として形成されてもよい。例えば、パターン認識プロセッサ14は別個の集積回路であってもよい。パターン認識プロセッサ14は、“コプロセッサ”もしくは“パターン認識コプロセッサ”と称されてもよい。
【0021】
図2は、パターン認識プロセッサ14の一実施例を示す。パターン認識プロセッサ14は、認識モジュール22および出力バッファ51を有する集約モジュール24を含んでもよい。出力バッファ51は、リザルトバッファ25を含んでもよい。認識モジュール22は、受信されたタームを検索タームと比較するように構成され、認識モジュール22および集約モジュール24の双方は、検索タームとタームが一致することが検索基準を充足するかどうかを決定するように協力してもよい。リザルトバッファ25はパターン認識プロセッサ14の他の部分からのリザルトデータをバッファリングしてもよく、これは
図14に関連して以下に説明される。
【0022】
認識モジュール22は、行デコーダ28および複数のフィーチャセル30を含んでもよい。各フィーチャ(feature)セル30は検索タームを特定し、フィーチャセル30のグループは、検索基準を形成するパラレルな有限ステートマシンを形成してもよい。フィーチャセル30のコンポーネントは、検索タームアレイ32、検出アレイ34およびアクティブ化ルーティングマトリクス36を形成してもよい。検索タームアレイ32は複数の入力導体37を含み、入力導体37の各々は、行デコーダ28と通信する各フィーチャセル30を配置してもよい。
【0023】
行デコーダ28は、データストリーム12のコンテンツに基づいて、複数の入力導体37中の特定の導体を選択してもよい。例えば、行デコーダ28は、1タームを表現する可能性がある受信されたバイトの値に基づいて、256行のうちの1つをアクティブ化する1バイトから256への行デコーダであってもよい。00000000の1バイトタームは、複数の入力導体37のうち最も上の行に対応し、11111111の1バイトタームは、複数の入力導体37のうちの最も下の行に対応してもよい。したがって、異なる入力導体37は、どのタームがデータストリーム12から受信されるかに依存して選択されてもよい。異なるタームが受信されると、行デコーダ28は、前のタームに対応する行を非アクティブ化し、新規タームに対応する行をアクティブ化してもよい。
【0024】
検出アレイ34は、検索基準を完全にもしくは部分的に充足することを示す信号を集約モジュール24に対して出力する検出バス38に結合してもよい。アクティブ化ルーティングマトリクス36は、一致した検索基準における検索ターム数に基づいて、フィーチャセル30を選択的にアクティブ化する、ならびに非アクティブ化してもよい。
【0025】
集約モジュール24は、ラッチマトリクス40、集約ルーティングマトリクス42、閾値論理マトリクス44、論理積マトリクス46、論理和マトリクス48および初期化ルーティングマトリクス50を含んでもよい。
【0026】
ラッチマトリクス40は、ある検索基準の一部を実施してもよい。例えば、幾つかの正規表現などの幾つかの検索基準は、最初に一致(もしくは複数の一致)が発生したときのみ計算する。ラッチマトリクス40は、一致が生じたかどうかを記録するラッチを含んでもよい。検索基準が充足されたとき、もしくはそれ以上充足されないと判定された、すなわち、その検索基準が充足されるより前に前の検索タームを再度マッチングさせる必要があるとき、ラッチは初期化の間にクリアされ、動作中に定期的に再初期化されてもよい。
【0027】
集約ルーティングマトリクス42は、アクティブ化ルーティングマトリクス36と類似した機能を果たしてもよい。集約ルーティングマトリクス42は、検出バス38における一致を示す信号を受信し、閾値論理マトリクス44に接続する異なるグループ論理ライン53へと信号を送信してもよい。集約ルーティングマトリクス42は、検索基準が充足された、もしくはこれ以上充足されないと判定されたとき、検出アレイ34の一部をリセットするために、検出アレイ34へと初期化ルーティングマトリクス50の出力を送信してもよい。
【0028】
閾値論理マトリクス44は、例えば、数を数える(カウントアップする)、または数を逆に数える(カウントダウンする)ように構成された32ビットカウンタなどの、複数のカウンタを含んでもよい。閾値論理マトリクス44は、初期カウントでロードされ、認識モジュールによって信号通知された一致時のカウント値から、カウントアップもしくはカウントダウンしてもよい。例えば、閾値論理マトリクス44は、ある長さの文字列の単語が現れた数を数えてもよい。
【0029】
閾値論理マトリクス44の出力は、論理積マトリクス46に対する入力であってもよい。論理積マトリクス46は、“積”の結果(例えば、ブール論理における“AND”関数)を選択的に生成してもよい。論理積マトリクス46は、正方行列として実施され、出力積の数は、閾値論理マトリクス44からの入力ラインの数と同一であるか、または、論理積マトリクス46は、出力とは異なる数の入力を有してもよい。結果として生じる積の値は、論理和マトリクス48に対する出力であってもよい。
【0030】
論理和マトリクス48は、和(例えば、ブール論理における“OR”関数)を選択的に生成してもよい。論理和マトリクス48もまた、正方行列として実施されるか、または、論理和マトリクス48は、出力とは異なる数の入力を有してもよい。入力は論理積であるため、論理和マトリクス48の出力は、論理的な積和(例えば、ブール論理での積和(SOP)形)であってもよい。論理和マトリクス48の出力は、初期化ルーティングマトリクス50によって受信されてもよい。
【0031】
初期化ルーティングマトリクス50は、集約ルーティングマトリクス42を介して、検出アレイ34および集約モジュール24の一部をリセットしてもよい。初期化ルーティングマトリクス50は、正方行列として実装されるか、または、初期化ルーティングマトリクス50は、出力とは異なる数の入力を有してもよい。初期化ルーティングマトリクス50は、論理和マトリクス48からの信号に応じて、例えば、検索基準が充足されたとき、または、検索基準がこれ以上充足されないと判定されたとき、パターン認識プロセッサ14の他の部分を再初期化してもよい。
【0032】
集約モジュール24は、閾値論理マトリクス44、集約ルーティングマトリクス42、および論理和マトリクス48の出力を受信する出力バッファ51を含んでもよい。集約モジュール24の出力は、出力バッファ51から出力バス26上のCPU20(
図1)へと伝送されてもよい。幾つかの実施形態においては、出力マルチプレクサは、これらのコンポーネント42、44および48からの信号を多重化し、基準を充足したことを示す信号、もしくは検索タームの一致を示す信号をCPU20(
図1)へと出力してもよい。他の実施形態においては、パターン認識プロセッサ14からのリザルトは、出力マルチプレクサを介して信号を伝送することなく報告されてもよいが、このことは、本明細書で記述されたあらゆる他の特性が省略される可能性がないことを示唆するものではない。例えば、閾値論理マトリクス44、論理積マトリクス46、論理和マトリクス48もしくは初期化ルーティングマトリクス50からの信号は、出力バス26上をパラレルにCPUへと伝送されてもよい。
【0033】
図3は、検索タームセル54として本明細書で称されるコンポーネントである、検索タームアレイ32(
図2)における単一のフィーチャセル30の一部を示す。検索タームセル54は、出力導体56および複数のメモリセル58を含んでもよい。各メモリセル58は、出力導体56および複数の入力導体37の中の導体の一つの両方へと結合されてもよい。入力導体37が選択されるのに応じて、各メモリセル58は、格納された値を示す値を出力し、出力導体56を介してデータを出力する。幾つかの実施形態においては、複数の入力導体37は“ワード線”と称され、出力導体56は“データ線”と称されてもよい。
【0034】
メモリセル58は、種々のタイプのメモリセルのうちのいずれを含んでもよい。例えば、メモリセル58は、トランジスタとキャパシタを有するダイナミックランダムアクセスメモリ(DRAM)セルなどの揮発性メモリであってもよい。トランジスタのソースおよびドレインは、其々、キャパシタのプレートおよび出力導体56へと接続され、トランジスタのゲートは入力導体37のうちの一つへと接続されてもよい。揮発性メモリの別の実施例においては、各メモリセル58は、スタティックランダムアクセスメモリ(SRAM)セルを含んでもよい。SRAMセルは、入力導体37の一つによって制御されるアクセストランジスタによって、出力導体56へと選択的に結合された出力を有してもよい。メモリセル58は、相変化メモリ(例えば、オボニック(ovonic)デバイス)、フラッシュメモリ、シリコン・酸化物・窒化物・酸化物・シリコン(SONOS)メモリ、磁気抵抗メモリもしくは他のタイプの不揮発性メモリなどの不揮発性メモリをも含んでもよい。メモリセル58は、フリップフロップ、例えば、論理ゲートによって形成されたメモリセルをも含んでもよい。
【0035】
図4および
図5は、検索タームセル54の一実施例の動作を示す。
図4は、セルの検索タームに一致しないタームを受信する検索タームセル54を示し、
図5は、セルの検索タームに一致するタームを受信する検索タームセル54を示す。
【0036】
図4によって示されるように、検索タームセル54は、メモリセル58にデータを格納することによって、一つ以上のタームを検索するように構成されてもよい。メモリセル58は、例えば
図3において、データストリーム12が提示する可能性のあるタームを各々表し、各メモリセル58は文字“a”で開始し、数字“9”で終了する単一の文字もしくは数字を表す。検索タームを充足するタームを表すメモリセル58は、第一の値を格納するようにプログラムされ、検索タームを充足するタームを表していないメモリセル58は、異なる値を格納するようにプログラムされてもよい。示された実施例においては、検索タームセル54は、文字“b”を検索するように構成される。“b”を表すメモリセル58は、1もしくは論理的なハイを格納し、“b”を表していないメモリセル58は、0、もしくは論理的なロウを格納するようにプログラムされてもよい。
【0037】
データストリーム12からのタームを検索タームと比較するために、行デコーダ28は、受信されたタームを表すメモリセル58に結合された入力導体37を選択してもよい。
図4においては、データストリーム12は、小文字の“e”を示す。このタームは、8ビットASCIIコード形式でデータストリーム12によって示され、行デコーダ28は、行アドレスとしてこのバイトを解釈し、導体60に電圧を印加することによって、導体60上に信号を出力する。
【0038】
それに応じて、導体60によって制御されるメモリセル58は、メモリセル58が格納するデータを示す信号を出力し、その信号は出力導体56によって伝送されてもよい。この場合には、文字“e”は、検索タームセル54によって特定されたタームのうちの一つではないため、検索タームとは一致せず、検索タームセル54は0値を出力し、それは一致が見つからなかったことを示している。
【0039】
図5においては、データストリーム12は、文字“b”を示す。再度、行デコーダ28はこのタームをアドレスとして解釈し、行デコーダ28は導体62を選択してもよい。それに応じて、文字“b”を表すメモリセル58は、格納された値を出力し、この場合には、それは1であり、一致を示している。
【0040】
検索タームセル54は一度に一つ以上のタームを検索するように構成されてもよい。複数のメモリセル58は、1を格納するようにプログラムされ、一つ以上のタームと一致する検索タームを特定する。例えば、小文字“a”および大文字“A”を表すメモリセル58は、1を格納するようにプログラムされ、検索タームセル54は、いずれかのタームを検索してもよい。別の実施例においては、検索タームセル54は、いかなる文字が受信された場合にも一致を出力するように構成されてもよい。全メモリセル58は、1を格納するようにプログラムされてもよく、検索タームセル54は、検索基準におけるワイルドカードタームとして機能してもよい。
【0041】
図6−
図8は、例えば一単語など複数ターム検索基準に従って検索する認識モジュール22を示す。具体的には、
図6は一単語の最初の文字を検出する認識モジュール22を示し、
図7は、第二の文字の検出を示し、
図8は、最後の文字の検出を示す。
【0042】
図6によって示されるように、認識モジュール22は、単語“big”を検索するように構成されてもよい。3個の隣接するフィーチャセル63、64および66が示される。フィーチャセル63は、文字“b”を検出するように構成される。フィーチャセル64は、文字“i”を検出するように構成される。フィーチャセル66は、文字“g”を検出し、検索基準が充足されたことを示すように構成される。
【0043】
図6は、検出アレイ34のさらなる詳細をも示す。検出アレイ34は、各フィーチャセル63、64および66における検出セル68を含んでもよい。各検出セル68は、上述されたタイプのメモリセルのうちの一つ(例えば、フリップフロップ)のような、メモリセル70を含んでもよく、メモリセル70は、フィーチャセル63、64もしくは66がアクティブか非アクティブかを示す。検出セル68は、両方の検出セルがアクティブであり、一致を示す関連付けられた検索タームセル54から信号を受信したかどうかを示す信号を、アクティブ化ルーティングマトリクス36へと出力するように構成されてもよい。非アクティブなフィーチャセル63、64および66は、一致を無視してもよい。各検出セル68は、メモリセル70および出力導体56からの入力を有する、ANDゲートを含んでもよい。ANDゲートの出力は、検出バス38およびアクティブ化ルーティングマトリクス36の両方へ、またはそのどちらか一方へと送信されてもよい。
【0044】
今度は、アクティブ化ルーティングマトリクス36は、検出アレイ34におけるメモリセル70へと書き込むことによって、フィーチャセル63、64および66を選択的にアクティブ化してもよい。アクティブ化ルーティングマトリクス36は、検索基準ならびに次にどの検索タームがデータストリーム12において検索されるかに従って、フィーチャセル63、64もしくは66をアクティブ化してもよい。
【0045】
図6においては、データストリーム12は文字“b”を示す。それに応じて、各フィーチャセル63、64および66は、その出力導体56上に信号を出力し、文字“b”を表す導体62に接続されたメモリセル58に格納された値を示す。検出セル56は、その後、一致を示す信号を受信したかどうか、ならびに検出セル56がアクティブかどうかを各々決定してもよい。フィーチャセル63は文字“b”を検出するように構成され、そのメモリセル70によって示されるようにアクティブであるため、フィーチャセル63における検出セル68は、アクティブ化ルーティングマトリクス36へと信号を出力して、検索基準のうちの第一の検索タームが一致したことを示す。
【0046】
図7によって示されるように、第一の検索タームが一致した後、アクティブ化ルーティングマトリクス36は、検出セル68におけるメモリセル70へと1を書き込むことによって、次のフィーチャセル64をアクティブ化してもよい。次のタームが第一の検索タームを充足する場合(例えば、タームのシーケンス“bbig”が受信された場合)アクティブ化ルーティングマトリクス36はフィーチャセル63のアクティブ状態を維持してもよい。検索基準のうちの第一の検索タームは、データストリーム12が検索される時間のうちの一部もしくは実質的に全期間の間、アクティブ状態に維持されてもよい。
【0047】
図7においては、データストリーム12は認識モジュール22へ文字“i”を出力する。それに応じて、各フィーチャセル63、64および66は、その出力導体56上に信号を出力し、文字“i”を表す導体72へと接続されたメモリセル58に格納された値を示す。検出セル56は、その後、一致を示す信号を受信したかどうか、ならびに検出セル56がアクティブかどうかを各々決定してもよい。フィーチャセル64は文字“i”を検出するように構成され、メモリセル70によって示されるようにアクティブであるため、フィーチャセル64における検出セル68は、アクティブ化ルーティングマトリクス36へと信号を出力し、検索基準の次の検索タームが一致したことを示す。
【0048】
続いて、
図8に示されるように、アクティブ化ルーティングマトリクス36はフィーチャセル66をアクティブ化してもよい。次のタームを評価する前に、フィーチャセル64は非アクティブ化されてもよい。フィーチャセル64は、その検出セル68によって非アクティブ化され、検出周期の間そのメモリセル70をリセットするか、または、例えば、アクティブ化ルーティングマトリクス36はフィーチャセル64を非アクティブ化してもよい。
【0049】
図8においては、データストリーム12は行デコーダ28へと、ターム“g”を出力し、行デコーダ28はターム“g”を表す導体74を選択する。それに応じて、各フィーチャセル63、64および66は、その出力導体56上に信号を出力し、文字“g”を表す導体74へと接続されたメモリセル58に格納された値を示す。検出セル56は、その後、一致を示す信号を受信したかどうか、ならびに検出セル56がアクティブかどうかを各々決定してもよい。フィーチャセル66は文字“g”を検出するように構成され、そのメモリセル70によって示されるようにアクティブであるため、フィーチャセル66における検出セル68は、アクティブ化ルーティングマトリクス36へと信号を出力し、検索基準の最後の検索タームが一致したことを示す。
【0050】
検索基準の終わりもしくは検索基準の一部は、アクティブ化ルーティングマトリクス36もしくは検出セル68によって識別されてもよい。これらのコンポーネント36もしくは68は、そのフィーチャセル63、64もしくは66が検索基準の最終検索タームか検索基準のコンポーネントかを識別するかを示すメモリを含んでもよい。例えば、検索基準は、“cattle”という単語が二度現れる全ての文を特定し、認識モジュールは、“cattle”の出現回数を数える集約モジュールへと、文内の各々の“cattle”の出現を示す信号を出力し、検索基準が充足されたかどうかを判定する。
【0051】
フィーチャセル63、64もしくは66は幾つかの条件下でアクティブ化されてもよい。フィーチャセル63、64もしくは66は、“常にアクティブ”であってもよく、それは、全検索の間、もしくは実質的に全ての検索の間アクティブ状態のままであることを意味する。常にアクティブなフィーチャセル63、64もしくは66の一実施例は、検索基準の第一のフィーチャセル、例えば、フィーチャセル63である。
【0052】
フィーチャセル63、63もしくは66は、“要求されたときアクティブ”であってもよく、それは、幾つかの先行する条件が一致したとき、例えば、検索基準における先行する検索タームが一致したときに、フィーチャセル63、64もしくは66がアクティブであることを意味する。一実施例は、
図6−
図8におけるフィーチャセル63によって要求されたときにアクティブであるフィーチャセル64と、フィーチャセル64によって要求されたときにアクティブであるフィーチャセル66である。
【0053】
フィーチャセル63、64もしくは66は、“自己アクティブ化”されてもよく、それは、一度アクティブ化されればその検索タームが一致している限り、それ自身をアクティブ化することを意味する。例えば、いかなる数のディジットにでも一致した検索タームを有する自己アクティブ化されたフィーチャセルは、文字“x”に到達するまで、文章“123456xy”をアクティブ化したままであってもよい。自己アクティブ化されたフィーチャセルの検索タームが一致するたび、自己アクティブ化されたフィーチャセルは検索基準における次のフィーチャセルをアクティブ化してもよい。したがって、常にアクティブなフィーチャセルは、自己アクティブ化するフィーチャセルおよび要求されたときにアクティブなフィーチャセルから形成されてもよい。自己アクティブ化フィーチャセルは、1を格納するメモリセル58の全てにプログラムされてもよく、各ターム後に要求されたときアクティブなフィーチャセルを繰り返しアクティブ化してもよい。幾つかの実施形態においては、各フィーチャセル63、64および66は、フィーチャセルが常にアクティブかどうかを識別する検出セル68もしくはアクティブ化ルーティングマトリクス36におけるメモリセルを含んでもよく、それによって、単一のフィーチャセルから常にアクティブなフィーチャセルを形成する。
【0054】
図9は、第一の検索基準75および第二の検索基準76に従ってパラレルに検索するように構成された認識モジュール22の一実施例を示す。本実施例においては、第一の検索基準75は、単語“big”を識別し、第二の検索基準76は、単語“cab”を識別する。データストリーム12からの現在のタームを示す信号は、ほぼ同時に各検索基準75および76におけるフィーチャセルへと通信されてもよい。各入力導体37は、検索基準75および76の双方へと及ぶ。結果として、幾つかの実施形態においては、検索基準75および76の双方は、ほぼ同時に現在のタームを評価してもよい。このことによって、検索基準の評価が加速すると考えられる。他の実施形態は、より多くの検索基準をパラレルに評価するように構成されたより多くのフィーチャセルを含んでもよい。例えば、幾つかの実施形態は、パラレルに動作する100、500、1000、5000もしくは10000以上のフィーチャセルを含んでもよい。これらのフィーチャセルは、ほぼ同時に何百、もしくは何千もの検索基準を評価してもよい。
【0055】
異なる数の検索タームを有する検索基準は、より多くのもしくはより少ないフィーチャセルを検索基準へと割り当てることによって形成されてもよい。単純な検索基準は、フィーチャセルの形式で、複雑な検索基準よりも、より少ないリソースを消費してもよい。このことによって、ほぼ同一の多数のコアを有し、複雑な検索基準を評価するように全て構成されたプロセッサと比較して、パターン認識プロセッサ14(
図2)のコストを低減すると考えられる。
【0056】
図10−
図12は、アクティブ化ルーティングマトリクス36のより複雑な検索基準とフィーチャの一実施例の双方を示す。アクティブ化ルーティングマトリクス36は、複数のアクティブ化ルーティングセル78を含んでもよく、アクティブ化ルーティングセル78のグループは、各フィーチャセル63、64、66、80、82、84および86に関連付けられてもよい。例えば、各フィーチャセルは、5、10、20、50もしくはそれ以上のアクティブ化ルーティングセル78を含んでもよい。アクティブ化ルーティングセル78は、先行する検索タームが一致するとき、検索基準における次の検索タームへとアクティブ化信号を送信するように構成されてもよい。アクティブ化ルーティングセル78は、同一のフィーチャセル内の隣接するフィーチャセルもしくは他のアクティブ化ルーティングセル78へとアクティブ化信号を送信するように構成されてもよい。アクティブ化ルーティングセル78は、どのフィーチャセルが検索基準における次の検索タームに対応するかを示すメモリを含んでもよい。
【0057】
図10−
図12に示されるように、認識モジュール22は、単一の単語を特定する基準よりも複雑な検索基準に従って検索するように構成されてもよい。例えば、認識モジュール22は、接頭辞88で開始し、2つの接尾辞90もしくは92のうちの一つで終了する単語を検索するように構成されてもよい。示された検索基準は、文字“c”および“l”のシーケンスで開始し、文字シーケンス“ap”もしくは文字シーケンス“oud”のいずれかで終了する単語を特定する。これは、複数の対象表現、例えば、単語“clap”もしくは単語“cloud”を特定する検索基準の一実施例である。
【0058】
図10においては、データストリーム12は、認識モジュール22に対して文字“c”を示し、フィーチャセル63は両方アクティブであり、一致を検出する。それに応じて、アクティブ化ルーティングマトリクス36は、次のフィーチャセル64をアクティブ化してもよい。アクティブ化ルーティングマトリクス36は、フィーチャセル63が検索基準における第一の検索タームであるとき、フィーチャセル63のアクティブ状態を維持してもよい。
【0059】
図11においては、データストリーム12は、文字“l”を示し、フィーチャセル64は、一致を認識してアクティブである。それに応じて、アクティブ化ルーティングマトリクス36は、第一の接尾辞90の第一のフィーチャセル66および第二の接尾辞92の第一のフィーチャセル82の双方へとアクティブ化信号を伝送してもよい。他の実施例においては、より多くの接尾辞がアクティブ化されてもよく、または、複数の接頭辞は一つ以上の接尾辞をアクティブ化してもよい。
【0060】
続いて、
図12においては、データストリーム12は、認識モジュール22に対して文字“o”を示し、第二の接尾辞92のフィーチャセル82は、一致を認識してアクティブである。それに応じて、アクティブ化ルーティングマトリクス36は、第二の接尾辞92の次のフィーチャセル84をアクティブ化してもよい。フィーチャセル66が非アクティブになると認められると、第一の接尾辞90の検索は終了してもよい。
図10−
図12に示されたステップは、文字“u”および“d”へと継続してもよいし、または、接頭辞88が一致する次の機会まで、検索は停止してもよい。
【0061】
上述したように、パターン認識プロセッサ14は、データストリーム12を処理することが可能である。データストリーム12は、システム10により受信されパターン認識プロセッサ14に供給される複数のデータストリームからのデータを含んでもよい。
図13は、本発明の実施形態に従って複数のデータストリーム92を受信するシステム10を示している。
図13に示されるように、データストリーム92は、一つ以上のデータソース94から受信されてもよい。例えば、データソース1はデータストリーム1およびデータストリーム2を与え、データソース2はデータストリーム3を与え、データソース4はデータストリーム4を与えてもよい。データソース94は、ネットワーク96を介してシステム10と通信してもよい。パターン認識プロセッサを含むシステム10は、ネットワークインタフェースカード(NIC)98またはネットワーク96と通信可能な他の構成部品を含んでもよい。
【0062】
データソース94は、システム10のユーザによりアクセス可能な単一のリソースを、集約して形成する。例えば、データソース94は、ウェブページに対するリクエストに応答してアクセスされてもよい。このとき、各データソース94は、例えばウェブページに対するコンテンツや広告などの、そのリクエスト対する異なるサーバ供給データである。あるいは、各データソース94は、多数のウェブページ、メールサーバ等のサーバ、ファイルサーバ、または任意のアプリケーションサーバ、またはピアツーピアアプリケーションを介して情報にアクセスするワークステーションなどの異なるリソースに独立に対応してもよい。データソース94がどのリソースに対応するかにかかわらず、データストリーム1,2,3,または4などの任意のデータストリームは、パターン認識プロセッサ14によって受信され処理されてもよい。上述のように、ストリームは、ウィルス、マルウェア、著作権情報、または関心のある任意の他のデータのために検索されてもよい。
【0063】
幾つかの実施形態において、ネットワーク96は、インターネットにおいて一般的な伝送制御プロトコル/インターネットプロトコル(TCP/IP)を使用したネットワークであってもよい。そのような実施形態において、データストリーム92は、ネットワーク96を介してパターン認識プロセッサ14に、データパケットとして伝送される。そのような実施形態において、各データストリーム92からのパケットは、他のデータソースからの他のパケットと混合(すなわち多重化)されてもよい。すなわち、多数のストリーム92が図示されているが、各データストリームからのパケットは、全てのデータストリーム92からの連続するパケットの混合されたストリームにおいて装置10によって受信されるので、どの2つの連続するパケットも1つのデータストリーム92に属するという保証がない。各データストリーム92に対するパケットは、順番が特定されずにシステム10のNICに到達する。各データストリーム92のパケットのシーケンスは、データフロー(あるいはまた“セッション”)と称される。データフローは、パターン認識プロセッサ14によって処理される関連するパケットを参照する。このように、装置10によって受信される各データストリーム92に対して1つのデータフローが存在してもよい。あるいは、1つのデータストリームから処理される多数のデータフローが存在してもよい。
【0064】
各ストリーム、およびパケットのフローは、パターン認識プロセッサ14によって受信され任意の順番で処理される。ストリーム92およびデータフローの処理は、1つのデータストリームの処理が一時的に停止されて他のデータストリームにスイッチすることができるというように、インターリーブ(交互処理)される。
【0065】
各データフローを識別するために、パターン認識プロセッサ14は、“FlowID(フローID)”レジスタ100を含んでもよい。幾つかの実施形態において、FlowIDレジスタは、装置10の他の構成部分というように、パターン認識プロセッサ14から分離されしかしアクセス可能なようにされてもよい。FlowIDレジスタ100は、特定のデータフローを識別する任意の数の一意なフロー識別子をストア(蓄積)してもよい。例えば、新しいデータフローを受信したときに、プロセッサ14は、そのデータフローに一意なフロー識別子を割り当て、そのフロー識別子をレジスタ100に書き込む。FlowIDレジスタ100は、任意の適切なサイズを有し、そのレジスタ100のサイズは処理されるべきデータフローの数に基づいて選択されてもよい。例えば、幾つかの実施形態において、そのレジスタ100は、8ビット(例えば256個のフローIDを収容可能)、16ビット(例えば65,536個のフローIDを収容可能)、または32ビット(例えば4,294,967,296個のフローIDを収容可能)としてもよい。他の実施形態において、多数のレジスタが、FlowIDをストアするために使用されてもよい。
【0066】
図14は、本発明の出力に基づくデータストリーム92の処理と出力を示す。上述のように、パターン認識プロセッサ14は、データストリーム1、データストリーム2、データストリーム3、およびデータストリーム4のようなデータストリーム92を受信してもよい。各データストリーム92からのパケットは、パターン認識プロセッサ14の異なるデータフロー(すなわち、セッション)として処理される。データストリーム92からのパケットの受信において、FlowIDレジスタ100は、各データストリーム92に対する各フローに一意なFlowID(フロー識別子)を割り当てる。例えば、
図14に示されるように、FlowIDレジスタ100は、各データストリーム1,2,3,および4の各データフローに対してそれぞれ、FlowID1,FlowID2,FlowID3,およびFlowID4の値をストアする。
【0067】
各データフローに対するデータの処理の後、上述のように、パターン認識プロセッサ14は、対応するリザルトストリーム104を出力する。このように、各データストリーム1,2,3,または4に対して、対応するリザルトストリーム1,2,3,および4が、パターン認識プロセッサ14から出力されてもよい。上述のように、リザルトストリーム104は、各データストリーム92のデータ上で実行される検索および/または任意の他の機能の結果を含んでよい。
【0068】
パターン認識プロセッサ14からの出力は、出力バッファ51(
図2)に与えてもよい。上述のように、出力バッファ51は、
図14に示されるリザルトバッファ25を含んでよい。リザルトバッファ25は、ファーストインファーストアウト(FIFO)バッファ108、バッファ書込み制御モジュール110、バッファ読出し制御モジュール112、およびバッファ設定モジュール114を含んでよい。リザルトバッファ25は、パターン認識プロセッサ14の一部として(例えば、シリコンの同じ本体上に)一体に形成されてもよい。あるいは、それを分離された構成部分としてもよい。リザルトバッファ25は、リザルトストリーム1,2,3,および4を伝送する上りリザルトバス116を介して、パターン認識プロセッサ14からリザルトデータを受信してもよい。そして、リザルトバッファ25は、下りリザルトバス118を介してCPU20(
図1)にリザルトデータを出力してよい。
【0069】
FIFOバッファ108は、複数のレコード120をストアするように構成することができる。各レコード120は、リザルトデータ、例えば、基準の充足に関連するデータをストアしてよい。各レコード120は、1つの基準の充足の1つのインスタンスに対応する。あるいは、基準の充足に関連するデータが、幾つかのレコード120、例えば幾つかの隣接するさもなければ連続するレコード120にストアされてもよい。リザルトデータは、どの基準が充足されたか、基準を充足するそれぞれのデータストリームからのタームの連なり、基準を充足するそれぞれのデータストリームの位置を指し示すタームカウント(例えばビットカウント)、または基準を満たすデータストリームの部分が受信されている間の期間のようなデータを含んでよい。FIFOバッファ94の各レコードはまた、ステータス情報、管理情報等の任意の他の情報を含んでよい。
【0070】
バッファ25にストアされたリザルトデータが特定のデータストリーム92に関連することを保証するために、リザルトバッファ25の各レコード120は、リザルトデータとそのリザルトに関連するデータストリーム92に対する関連するフロー識別子をストアしてよい。例えば、FIFOバッファ108中の第1番目のレコードは、FlowID4とデータストリーム4に関連するリザルトデータを含んでよい。同様に、バッファ108中の第2番目のレコード124は、FlowID3とデータストリーム923に関連するリザルトデータ3を含んでよい。この方法において、FIFOバッファ108の各レコード120は、バッファ25の任意の下り構成要素がバッファ25から受信されるリザルトデータをデータストリーム92のそれぞれの1つであると識別できるように、対応するフロー識別子を含んでよい。
【0071】
バッファ書込み制御モジュール110は、上りリザルトバス116からのどのデータがFIFOバッファ108中の1つのレコード120に書き込まれるかを制御するように構成してよい。バッファ書込み制御モジュール110は、1つの基準が充足される毎にまたはリザルトデータが新しいレコードに書き込まれる毎にインクリメントまたはデクリメントするカウンタを含んでよい。バッファ書込み制御モジュールはまた、どのレコード120が最も最近にCPU20に出力されたかを指し示すメモリを含んでよい。そして、バッファ書込み制御モジュール110は、上りリザルトバス116からのデータを、既にCPU20に伝達されたデータを含むレコード120に書き込むように構成してもよい。
【0072】
同様に、バッファ読出し制御モジュール112は、どのレコード120がFIFOバッファ108から読み出されていない最も古いレコードであるかを指し示すように構成してよい。例えば、バッファ読出し制御モジュール112は、FIFOバッファ108からレコードが読み出される毎にインクリメントまたはデクリメントするカウンタを含んでよい。そして、そのカウンタのカウント値は、まだ読まれていない最も古いレコード120を識別してよい。バッファ読出し制御モジュール112は、CPU20からリードコマンド信号126を受信し、FIFOバッファ108に最も古く読まれていないレコード120によりストアされたデータを出力させることにより、そのリードコマンドに応答するように構成してよい。
【0073】
図15は、パターン認識プロセッサ14の実施形態における多数のデータフローを処理するプロセス200を示すフローチャートである。上述のように、装置10のパターン認識プロセッサ14は、装置10のNIC98により受信されたようなときに、データストリーム1に対応できる第1番目のデータフローのデータパケットを受信してよい(ブロック202)。パターン認識プロセッサ14は、その第1番目のデータフローにフローIDを割り当て、そのフローIDをFlowIDレジスタ100に書き込む(ブロック204)。パターン認識プロセッサ14はそれで、例えばその第1番目のフローIDによって識別されるデータフローであるフロー1に、アクティブフローとしてスイッチし(ブロック206)、そしてそのアクティブフローを、1つの基準を充足するためにそのフローを検索するようにして、処理する(ブロック208)。
【0074】
装置10およびパターン認識プロセッサ14によって受信される次のパケットが、データストリーム2に対応できる第2番目のデータフローに属する。パターン認識プロセッサ14は、その第2番目のデータフローのパケットを受信して(ブロック210)、そしてその第2番目のデータフローに対して第2番目のフローIDを割り当て(ブロック212)、そのフローIDをFlowIDレジスタ100に書き込んでよい。その到来したパケットは他のデータフローに属するため、パターン認識プロセッサ14は、その第2番目のデータフローのパケットを検索するようにスイッチする。パターン認識プロセッサ14は、アクティブフロー、例えば第1番目のフローIDを有する第1番目のデータフローの処理を一時中止し、そのアクティブフローの中間結果をストアする(ブロック214)。プロセッサ14はそれで、アクティブフローとして第2番目のデータフローにスイッチし(ブロック216)、そして新しいアクティブフロー、例えば第2番名のフローIDを有する第2番目のデータフローを処理する。
【0075】
データフローのスイッチングは、他の1つのデータフローに対する他のパケットが受信されたときはいつでも実行されてよい。例えば、プロセル200において、第1番目のデータフロー、Flow1の他のデータバッファ557が受信される(ブロック222)。プロセッサ14は、現在のアクティブフロー、すなわち、Flow2の処理を一時中止し、Flow1の処理にスイッチする。プロセッサ14は、他の1つのデータフローの追加のパケットが受信されるまで、Flow1の処理を継続する。
【0076】
上述したように、Flow1、Flow2、または両方の処理が完了した後、各データフローに対するリザルトデータは、リザルトバッファ25に出力される(ブロック224)。Flow1に対するリザルトデータは、Flow1に対するFlowIDと同様に、バッファ25に出力され、FIFOバッファ108にストアされてよい。同様に、Flow2に対するリザルトデータと対応するFlowIDは、バッファ25に出力され、FIFOバッファ108にストアされてよい。上述のプロセス200は、任意の数のデータフロー、例えば装置10によって受信されパターン認識プロセッサ14によって処理されるデータストリームに対して実行されてよい。1つのデータフローからそれぞれ到来するパケットは、1つの新たなフローIDが割り当てられ、プロセッサ14はそのデータフローを処理するためにスイッチする。
【0077】
本発明は、種々の改変および代替形式を受け入れる余地があるが、本明細書では、例示の目的のために、具体的な実施形態が図面において示され、詳細に説明されてきた。しかしながら、本発明は、開示された特定の形式に限定されることを意図されるものではないことを理解されたい。それよりもむしろ、本発明は、以下に添付された請求項によって定義されるような、本発明の趣旨および範囲内にある全ての改変、均等物および代替物を包含するものである。