JP2008512786A - データ構造の選択的複製方法および装置 - Google Patents
データ構造の選択的複製方法および装置 Download PDFInfo
- Publication number
- JP2008512786A JP2008512786A JP2007531290A JP2007531290A JP2008512786A JP 2008512786 A JP2008512786 A JP 2008512786A JP 2007531290 A JP2007531290 A JP 2007531290A JP 2007531290 A JP2007531290 A JP 2007531290A JP 2008512786 A JP2008512786 A JP 2008512786A
- Authority
- JP
- Japan
- Prior art keywords
- memory
- low
- dfa
- latency
- latency memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 title claims abstract description 24
- 230000010076 replication Effects 0.000 title claims description 32
- 230000015654 memory Effects 0.000 claims abstract description 377
- 238000007726 management method Methods 0.000 claims description 22
- 230000004044 response Effects 0.000 claims description 11
- 230000001360 synchronised effect Effects 0.000 claims description 4
- 230000003362 replicative effect Effects 0.000 abstract description 4
- 238000012545 processing Methods 0.000 description 33
- 239000000872 buffer Substances 0.000 description 27
- 230000014509 gene expression Effects 0.000 description 17
- 230000008569 process Effects 0.000 description 13
- 230000007704 transition Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 12
- 238000012546 transfer Methods 0.000 description 12
- 230000001427 coherent effect Effects 0.000 description 9
- 238000001514 detection method Methods 0.000 description 8
- 238000012937 correction Methods 0.000 description 6
- 230000002155 anti-virotic effect Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000012805 post-processing Methods 0.000 description 4
- 230000001133 acceleration Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 3
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 230000006837 decompression Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000006855 networking Effects 0.000 description 3
- 238000007781 pre-processing Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000013478 data encryption standard Methods 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 238000010845 search algorithm Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
- G06F12/0653—Configuration or reconfiguration with centralised address assignment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/17—Embedded application
- G06F2212/174—Telecommunications system
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
低遅延メモリ118におけるデータ構造体を選択的に複製する方法および装置を提供する。このメモリ118は、同一データ構造体の複製コピーを格納するように構成される複数の個別のメモリバンク432を有する。格納されたデータ構造体へのアクセス要求を受信すると、低遅延メモリ118のアクセスコントローラ160はメモリバンクのうちの1つを選択し、次に、選択されたメモリバンクから格納データにアクセスする。メモリバンクの選択は、それぞれのメモリバンクの相対的有効性を比較するサーモメータ技術を用いて達成できる。最終的な効率を得られる例示的なデータ構造体には、決定性有限オートマトン(DFA)グラフ、および格納されるよりも高頻度でロードされる他のデータ構造体が含まれる。
【選択図】図4
【選択図】図4
Description
本出願は、2004年9月10日に出願された米国仮特許出願第60/609,211号、および2005年4月8日に出願された米国仮特許出願第60/669,655号の利益を主張するものであり、上記各出願の全内容は参照により本明細書に引用したものとする。
開放型システム間相互接続(OSI)参照モデルは、伝送媒体を介する通信に使用される7つのネットワークプロトコル層(L1−L7)を規定している。上位層(L4−L7)はエンド・ツー・エンド通信を表し、下位層(L1−L3)は局所的な通信を表す。
ネットワーキングアプリケーションアウェア型(アプリケーションが自動的にネットワークを制御する)システムは、L3からL7までの範囲のネットワークプロトコル層、例えば、ハイパーテキスト転送プロトコル(HTTP)およびシンプルメール転送プロトコル(SMTP)などのL7ネットワークプロトコル層、および伝送制御プロトコル(TCP)などのL4ネットワークプロトコル層を処理し、フィルタリングし、かつ切り換える必要がある。ネットワークプロトコル層の処理に加えて、ネットワーキングアプリケーションアウェア型システムは、ファイアウォール、仮想プライベートネットワーク(VPN)、セキュアソケットレイヤ(SSL)、侵入検知システム、インターネットプロトコルセキュリティ、アンチウィルス/アンチスパム機能を含む、L4からL7までのネットワークプロトコル層を介するアクセスベースおよびコンテンツベースのセキュリティによって、これらのプロトコルの安全性を同時にワイヤスピードで保護する必要もある。
ネットワークプロセッサが、高スループットのL2およびL3ネットワークプロトコル処理に利用される。このL2およびL3ネットワークプロトコル処理は、パケットをワイヤスピードで転送するパケット処理の実行である。一般に、より高度の処理を必要とするL4からL7までのネットワークプロトコルの処理には、汎用プロセッサが使用される。例えば、L4ネットワークプロトコルである伝送制御プロトコル(TCP)は、パケット内の全ペイロードにわたるチェックサムの計算、TCPセグメントバッファの管理および複数のタイマの接続毎の常時保持を含む複数の計算集約型タスクを必要とする。汎用プロセッサは、計算集約型タスクを実行できるが、データを処理してワイヤスピードで転送できるだけの十分な性能は備えていない。
さらに、パケットのコンテンツを調べるコンテンツアウェア型アプリケーション(コンテンツを自動的に認識するアプリケーション)は、データストリーム内の固定文字列および可変回数で反復される文字クラスの双方を含む表現を探索する必要がある。ソフトウェアでこのタスクを実行するために、複数の探索アルゴリズムが使用される。このようなアルゴリズムの1つが、決定性有限オートマトン(DFA)である。ただし、DFA探索アルゴリズムを使用する場合、反復パターンによるグラフサイズの指数関数的拡大およびデータストリーム内の偽一致などの制限が生じる可能性がある。
これらの制限があるため、コンテンツ処理アプリケーションは、パターン探索によって生じる結果に対してかなりの量の後処理を必要とする。後処理は、接続種別などの他の接続状態情報およびパケットに包含されるプロトコルヘッダ内の特定の値によって、一致パターンを識別する必要がある。またこれは、特定の他のタイプの計算集約型識別を必要とし、例えば、パターン一致が有効であるのは、それがデータストリーム内の特定の位置範囲内にあるか、あるいは、別のパターンが後に続いてかつ先行するパターンから特定の範囲内にあるか、または、先行するパターンから特定のオフセット位置もしくはそのオフセット位置の後にある場合のみである。例えば、正規表現一致は、種々の演算子と単一文字を組み合わせて、複雑な表現の構成を可能にする。
電気通信およびネットワーキングに使用されるアプリケーションのようなコンテンツ処理アプリケーションの性能は、一般に、比較的高速の処理速度を提供するプロセッサ上で動作することで達成できる。例えば、侵入検知/防止およびアンチウィルスなどのアプリケーションは、到着データを到着と同時に高速で処理してデータの遅延および/または損失を回避する。メモリへの高速アクセスはまた、パターン探索によって生じる結果に依存する処理を含む大量の後処理を必要とするアプリケーションにとっても重要である。低遅延メモリデバイスは、比較的高速のアクセス時間を可能にする1つの解決策を提供する。低遅延デバイスの中には、100ナノ秒よりもかなり短いアクセス時間を提供するものもある。しかし、1つのメモリに格納されている同一データ構造に対して複数のアクセス要求がなされると、それが低遅延メモリであっても、同一データ構造に対する後続の要求は、一般に、先行の要求が完了するまで遅延されることになる。
重複するアクセス要求に起因する遅延を低減する手法の1つは、複数のメモリバンクを包含するように構成された低遅延メモリを使用することである。これにより、複数のメモリバンクのうち2つ以上のメモリ上に同一データが格納または複製される。低遅延メモリ内に格納される全データを複製すれば、データの冗長コピーが重複するアクセス要求に個別に対処するために確実に利用可能になり、これにより遅延が短縮される。不都合な点は、低遅延メモリは高価であり、結果的に他の従来メモリよりも容量が小さいことである。このように、全格納データを複製することは、アプリケーションによっては、実際的でなく、不可能である場合もある。さらに、複数の独立したプロセッサのそれぞれが低遅延メモリに格納されている同一データにアクセス要求を行うマルチプロセッサシステムでは、アクセス要求が重複する可能性は、一般により高くなる。
本発明は、複製の範囲が選択可能となるように、低遅延メモリに格納されたデータを選択的に複製することによって、これらの制限を克服する。例えば、複製の範囲は、特定データ構造体の重要度(例えば、利用頻度)に依存してもよい。したがって、比較的アクセス頻度の低いデータ構造体は、重複するアクセス要求の確率が相対的に低くなることから、複製されなくてもよいか、小範囲の複製でよい。逆に、相対的にアクセス頻度の高いデータ構造体は、重複するアクセス要求の確率が一般に利用頻度に応じて高まることから、2つまたはそれ以上複製されてもよい。
低遅延メモリのアクセスコントローラは、データ構造体を低遅延メモリに格納する要求を受信する。データ構造体は、例えば、決定性有限オートマトン(DFA)グラフであってもよい。この要求は、システムの初期設定時にソフトウェアによって生成されることができ、格納されるデータ構造体の複製係数を含む。データ構造体は、複製係数に従って複製される。好ましくは、低遅延メモリは複数のメモリバンクを有するように構成され、各複製は異なるバンクに格納される。すでに格納されている複製されたデータ構造体へのアクセス要求を受信すると、低遅延メモリのアクセスコントローラは、要求されたデータ構造体の複製を格納している2つ以上のメモリバンクのうちの1つを選択する。選択すると、低遅延メモリのアクセスコントローラは、その選択されたメモリバンクにアクセスする。したがって、同一データ構造体の複製された他のバージョンは、この第1の要求が処理されている間であっても、同一データ構造体に対する後続の要求の処理に利用可能である。
複製係数は選択可能であり、選択された複製数を表す。例えば、複製係数は、データ構造体の1、2、4または8個のコピーの格納を指示する1、2、4または8であってもよい。低遅延メモリの種類は、ダイナミックランダムアクセスメモリ(DRAM)、低遅延ダイナミックランダムアクセスメモリ(RLDRAM)、同期ランダムアクセスメモリ(SRAM)、高速サイクルランダムアクセスメモリ(FCRAM)およびこれらの組合せから成るグループから選択されることができる。特定の実施形態においては、複製係数はソフトウェアによって決定される。例えば、ソフトウェアは、それぞれのデータ構造体に対するアクセス要求を追跡し、各データ構造体に対するアクセス回数および/またはアクセス頻度に基づいて複製係数を決定することができる。複製係数を格納し、そのデータ構造体が低遅延メモリに次にロードされる際に使用することができる。特定の実施形態においては、複製係数を不揮発性メモリに格納し、システムを次にリブートする際に使用できる。
2つ以上のメモリバンクのうちのいずれを使用するかの選択において、低遅延メモリのアクセスコントローラは、各メモリバンクのその時点での使用(使用量および/または使用頻度)を求める。特定の実施形態においては、低遅延メモリのアクセスコントローラは、複数のメモリバンクのそれぞれに対する各待ち行列を有する。低遅延メモリのアクセスコントローラは、次に、サーモメータ技術を用いてそれぞれの待ち行列のサイズを比較して、いずれのメモリバンクが利用可能であるか、または使用頻度が少ないメモリバンクはいずれであるかを判断する。例えば、各メモリバンクには、各待ち行列が設けられている。次に、要求されたデータ構造体の複製を格納している複数のメモリバンク間で待機中の命令の数を比較して、待機命令の数が最も少ないメモリバンクを選択することができる。このように、待機命令の数をサーモメータ値と見なすことにより、最低値を有するサーモメータを選択して、低遅延メモリへのアクセス要求が最小遅延で達成される可能性を増大させることができる。
特定の実施形態においては、低遅延メモリのアクセスコントローラは、2つ以上の低遅延メモリ(LLM)アクセスバスを介して低遅延メモリに結合される。例えば、個別の16のメモリバンクを有する低遅延メモリは、2つのLLMアクセスバスを用いて低遅延メモリのアクセスコントローラに結合されてもよい。メモリバンクを複数のバス間に分散させれば、性能はさらに向上する。異なるメモリバンクに格納されている同一データ構造体の複製に対する重複するアクセスは、異なるメモリバンクが同一バスを用いて結合されている場合、衝突を生じることがある。冗長バスによって、バスの衝突および遅延の可能性が減じられる。一構成においては、第1の8個のメモリバンクが第1のLLMアクセスバスを使用して結合され、第2の8個のメモリバンクが第2のLLMアクセスバスを用いて結合される。低遅延メモリに格納されているデータ構造体を複製する場合、その複製の少なくともいくつかは、低遅延メモリコントローラに異なるアクセスバスで接続されているメモリバンクに格納される。
本発明の上述および他の目的、特徴および利点は、添付図面に示す本発明の好ましい実施形態に関する以下のより詳細な説明から明らかとなるであろう。添付図面では、同一参照符号は異なる図面においても同一部分を指す。図面は、必ずしも縮尺通りではなく、本発明の原理を示すことに重点を置いている。
以下、本発明の好ましい実施形態について説明する。
本発明は、メモリ内のデータ構造を選択的に複製することによって、低遅延メモリに効率的にアクセスする方法および装置を提供する。上記メモリは、同一データ構造の複製されたコピーを格納するように構成される複数の個別のメモリバンクを有する。格納されたデータ構造へのアクセス要求を受信すると、低遅延メモリのアクセスコントローラはメモリバンクのうちの1つを選択し、選択されたメモリバンク内の格納データにアクセスする。メモリバンクの選択は、異なるメモリバンクの相対的な利用度を比較するサーモメータ技術を用いて達成できる。取得される効率が反映された例示的なデータ構造体には、決定性有限オートマトン、および格納される(すなわち、書き込まれる)よりも高頻度でロードされる(すなわち、読み取られる)他のデータ構造が含まれる。
図1は、本発明の原理によるネットワークサービスプロセッサ110を含むセキュリティアプライアンスシステム100を示すブロック図である。セキュリティアプライアンスシステム100は、1つのイーサネット(登録商標)ポート(Gig E)で受信したパケットを別のイーサネット(登録商標)ポート(Gig E)に切り換えて、受信したパケットに複数のセキュリティ機能を実行した後にそのパケットを転送する、スタンドアロン型システムである。例えば、セキュリティシステム100を用いて、広域ネットワーク(WAN)上で受信するパケットに対してセキュリティ処理を実行した後に、そのパケットをローカルエリアネットワーク(LAN)に転送することができる。
ネットワークサービスプロセッサ110は、ハードウェアパケット処理、バッファリング、ワークスケジューリング、順序づけ、同期化、およびキャッシュコヒーレンスサポートを提供することにより、全てのパケット処理タスクの速度を高める。ネットワークサービスプロセッサ110は、受信されたパケットにカプセル化されている開放型システム間相互接続ネットワークのL2からL7層までのプロトコルを処理する。
ネットワークサービスプロセッサ110は、イーサネット(登録商標)ポート(Gig E)から物理(PHY)インタフェース104a、104bを介してパケットを受信し、受信されたパケットに対してL7〜L2ネットワークプロトコル処理を実行し、処理されたパケットを物理インタフェース104a、104bから、またはPCI(周辺装置相互接続(Peripheral Component Interconnect))バス106を介して転送する。ネットワークプロトコル処理には、ファイアウォール、アプリケーションファイアウォール、IPセキュリティ(IPSEC)および/またはセキュアソケットレイヤ(SSL)を含む仮想プライベートネットワーク(VPN)、侵入検知システムおよびアンチウィルスなどのネットワークセキュリティプロトコルの処理が含まれてもよい。
ネットワークサービスプロセッサ110内のダイナミックランダムアクセスメモリ(DRAM)コントローラは、ネットワークサービスプロセッサ110に結合されるDRAM108へのアクセスを制御する。特定の実施形態においては、DRAM108はネットワークサービスプロセッサ110の外部に存在する。DRAM108は、PHYインタフェース104a、104bまたはPCIインタフェース106から受信されるデータパケットを、ネットワークサービスプロセッサ110によって処理するために格納する。PCIインタフェース106は、PCI拡張(PCI−X)インタフェース106であってもよい。
ネットワークサービスプロセッサ110内の低遅延メモリコントローラは、低遅延メモリ(LLM)118を制御する。LLM118は、侵入検知システムまたはアンチウィルスアプリケーションに必要とされる正規表現一致を含む、高速検索を可能にするインターネットサービス/セキュリティアプリケーションに使用されることができる。
正規表現は、文字列一致パターンを表現する一般的な方法である。正規表現の極小要素は、一致されるべき単一文字である。これらは、ユーザが連結、選択、クリーネ・スターなどを表現できるようにするメタ文字演算子と組み合わせることもできる。連結は、単一文字(またはサブ文字列)から複数の文字一致パターンを生成するために使用され、選択(|)は、2つ以上のサブ文字列のいずれにも一致できるパターンを生成するために使用される。クリーネ・スター(*)を使用することによって、パターンが文字列内でそのパターンのゼロ(0)またはそれ以上の出現に一致することが可能になる。それぞれの演算子と単一文字との組合せにより、複雑な表現の構築が可能になる。例えば、表現(th(is|at)*)は、th、this、that、thisis、thisat、thatis、thatat、などに一致する。
図2は、図1に示すネットワークサービスプロセッサ110のブロック図である。ネットワークサービスプロセッサ110は、図1に関連して説明したとおり、少なくとも1つのプロセッサコア120を使用して高いアプリケーション性能を提供する。
パケットはSPI−4.2またはRGMIIインタフェースを介して受信され、例えばGMX/SPXユニット122a、122bの任意の1つなどのようなインタフェースユニットによって処理される。パケットは、PCIインタフェース124によって受信されることもできる。GMX/SPXユニット(122a、122b)は、受信されたパケットに含まれるL2ネットワークプロトコルヘッダ内の様々なフィールドをチェックすることによって受信されたパケットの前処理を実行し、次にこのパケットをパケット入力ユニット126に転送する。
パケット入力ユニット126は、受信されたパケットに含まれるネットワークプロトコルヘッダ(例えば、L3およびL4ヘッダ)のさらなる前処理を実行する。前処理には、TCP/ユーザデータグラムプロトコル(UDP)(L3ネットワークプロトコル)に関するチェックサムのチェックが含まれる。
フリープールのアロケータ128が、レベル2キャッシュメモリ130および外部DRAM108における空きメモリへのポインタのプールを保持する。パケット入力ユニット126は、ポインタのプールの1つを使用して、受信されたパケットデータをレベル2キャッシュメモリ130に格納し、ポインタの別のプールを使用してプロセッサコア120に対してワーク待ち行列エントリを割り当てる。
パケット入力ユニット126は次に、レベル2キャッシュ130または外部DRAM108内のバッファにパケットデータを書き込む。好ましくは、上記パケットデータは、プロセッサコア120のうちの少なくとも1つで実行される上位層ソフトウェアに好都合のフォーマットでバッファに書き込まれる。したがって、上位層のネットワークプロトコルによるその後の処理が容易になる。
ネットワークサービスプロセッサ110は、1つまたは複数の特定用途向けコプロセッサを有することもできる。コプロセッサを有する場合、これらコプロセッサはプロセッサコア120から処理の一部をオフロード(負荷軽減)し、これにより、ネットワークサービスプロセッサ110が高スループットのパケット処理を達成可能にする。例えば、受信パケットの圧縮および解凍を専用に実行する圧縮/解凍コプロセッサ132が設けられる。図2を参照して、一実施形態においては、アンチウィルス、侵入検知システムおよび他のコンテンツ処理アプリケーションに必要なパターンおよび/または署名一致の処理を速くするように適合化された専用のDFAスレッドエンジンを有するDFAユニット400が設けられる。DFAユニット400の使用により、パターンおよび/または署名一致の処理が速くなり、例えば、最大4ギガビット/秒の速度で実行される。
I/Oインタフェース136は、全体のプロトコルおよびアービトレーション(調停)を管理し、コヒーレントなI/O区分化(partitioning)を提供する。I/Oインタフェース136は、I/Oブリッジ138およびフェッチ・アンド・アッドユニット140を有する。フェッチ・アンド・アッドユニット140内のレジスタを用いて、パケット出力ユニット146を介して処理されたパケットを転送するのに使用される出力待ち行列の長さを保持する。I/Oブリッジ138は、コヒーレントメモリバス144、I/Oバス142、パケット入力ユニット126、およびパケット出力ユニット146間で転送される情報を格納するためのバッファ待ち行列を含む。
パケット順序/ワークモジュール148は、プロセッサコア120に対するワークをキューイングして(待ち行列に入れて)スケジューリングする。ワーク待ち行列エントリを待ち行列に追加することによって、ワークがキューイングされる(待ち行列に入れられる)。例えば、ワーク待ち行列エントリは、パケットの到着毎にパケット入力ユニット126によって追加される。プロセッサコア120のワークのスケジューリングには、タイマユニット150が使用される。
プロセッサコア120は、パケット順序/ワークモジュール148にワークを要求する。パケット順序/ワークモジュール148は、プロセッサコア120のうちの1つに対してワークを選択(すなわち、スケジューリング)し、そのワークを記述するワーク待ち行列エントリを指すポインタをプロセッサコア120に返す。
次に、プロセッサコア120は、命令キャッシュ152、レベル1データキャッシュ154、および暗号アクセラレータ156を有する。一実施形態においては、ネットワークサービスプロセッサ110(図1)は、16個のスーパースカラー縮小命令セットコンピュータ(RISC)型プロセッサコア120を有する。特定の実施形態においては、スーパースカラーRISC型プロセッサコア120はMIPS64バージョン2プロセッサコアの拡張機能を含む。
レベル2キャッシュメモリ130および外部DRAM108は、プロセッサコア120およびI/Oコプロセッサデバイス(例えば、圧縮/解凍コプロセッサ132)の全てによって共有される。各プロセッサコア120は、コヒーレントメモリバス144によってレベル2キャッシュメモリ130に結合される。コヒーレントメモリバス144は、プロセッサコア120、I/Oインタフェース136、レベル2キャッシュメモリ130およびレベル2キャッシュメモリコントローラ131間の全てのメモリおよびI/Oトランザクションのための通信チャネルである。一実施形態においては、コヒーレントメモリバス144は16個のプロセッサコア120に対して適応でき、ライトスルーによって完全にコヒーレントなレベル1データキャッシュ154をサポートする。好ましくは、コヒーレントメモリバス144はI/Oを優先順位付けする能力により高度なバッファ機能を果たす。
レベル2キャッシュメモリコントローラ131は、メモリ参照コヒーレンスを保持する。レベル2キャッシュメモリコントローラ131は、ブロックがレベル2キャッシュメモリ130もしくは外部DRAM108に格納されていても、または「処理中(in-flight)」であっても、あらゆるFILL(フィル)要求に対して、ブロックの最新コピーを返す。レベル2キャッシュメモリコントローラ131はまた、各プロセッサコア120内にデータキャッシュ154に対するタグを2部格納する。レベル2キャッシュメモリコントローラ131は、キャッシュブロック格納の要求のアドレスをデータキャッシュタグと比較し、格納命令が別のプロセッサコアからであるか、またはI/Oインタフェース136を介するI/Oコンポーネントからであるときは、常にプロセッサコア120のデータ−キャッシュタグを(2部とも)無効にする。
特定の実施形態においては、DRAMコントローラ133は、最大16メガバイトのDRAM108をサポートする。好ましくは、DRAMコントローラ133は、DRAM108との64ビットまたは128ビットインタフェースのいずれかをサポートする。さらに、DRAMコントローラ133は、DDR−I(ダブルデータレート)およびDDR−IIプロトコルなどの好適なプロトコルをサポートすることができる。
プロセッサコア120によってパケットが処理されると、パケット出力ユニット146は、メモリ130、108からパケットデータを読み出し、L4ネットワークプロトコル後処理を実行し(例えば、TCP/UDPチェックサムを生成し)、上記パケットをGMX/SPXユニット122a、122bを介して転送し、パケットによって使用されたL2キャッシュ130/DRAM108を解放する。
低遅延メモリコントローラ160は、低遅延メモリ118との間の処理中(in-flight)のトランザクション(ロード/格納)を管理する。好ましくは、低遅延メモリ118は全てのプロセッサコア120によって共有される。メモリ遅延とは、プロセッサコア120によって開始されたメモリ要求が満たされるまでに要する時間を指す。低遅延メモリ118は、マイクロ秒以下の遅延を実現できる。低遅延メモリの例示的な種類としては、DRAM、低遅延ダイナミックランダムアクセスメモリ(RLDRAM)、同期ランダムアクセスメモリ(SRAM)、高速サイクルランダムアクセスメモリ(FCRAM)または技術的に公知の他の任意の種類の低遅延メモリが含まれる。例えば、RLDRAMは、約30ナノ秒またはそれ以下の遅延を提供する。各プロセッサコア120は、低遅延メモリ(LLM)バス158によってDFAユニット400の低遅延メモリコントローラ160に直接結合される。LLMバス158は、プロセッサコア120と低遅延メモリコントローラ160との間のコンテンツアウェア型アプリケーション処理のための通信チャネルである。DFAユニット400は、低遅延メモリ118へのアクセスを制御するためにプロセッサコア120と低遅延メモリ118との間に結合される。
図3は、本発明の原理によるRISCプロセッサ120のうちの1つを示す、より詳細なブロック図である。プロセッサコア120は、整数演算ユニット302、命令ディスパッチユニット304、命令フェッチユニット306、メモリ管理ユニット308、システムインタフェース310、低遅延インタフェース350、ロード/格納ユニット314、書込みバッファ316、および1つまたは複数のセキュリティアクセラレータ156を有する。特定の実施形態においては、プロセッサコア120はデバッグ操作を実行できるデバッガインタフェース330(例えば、EJTAGインタフェース)も有する。システムインタフェース310は、外部メモリへのプロセッサアクセスを制御する。外部メモリは、個々のプロセッサ120の外部にある。例えば、外部メモリは、プロセッサコア120と同一半導体基板上などの同一デバイス上に配置することもできる。これに加えて、もしくは代替として、外部メモリはプロセッサデバイスの外部に、例えばマザーボード上、または異なるモジュール全体の上にあってもよい。外部メモリには、レベル2キャッシュメモリ130、主/メインメモリ(すなわち、外部DRAM108)およびレベル2キャッシュメモリ130とメインメモリ108との組合せが含まれてもよい。
整数演算ユニット302は一般に、乗算ユニット326、少なくとも1つのレジスタファイル(主レジスタファイル)328、および2つの保持レジスタ330a、330bを有する。保持レジスタ330a、330bは、低遅延メモリ118に書き込まれるデータと、低遅延メモリ118から読み出されたデータとを一時的に格納するために使用される。上記データは、本発明の原理に従って、低遅延メモリのロード/格納命令を用いてプロセッサコア120と低遅延メモリ118との間で転送される。さらに、保持レジスタ330a、330bは、命令パイプラインの効率を、このパイプラインを機能停止する前に2つの未処理ロードを許容することによって向上させる。2つの保持レジスタを示したが、1つ、または3つ以上の保持レジスタを使用してもよい。
特定の実施形態においては、乗算ユニット326は64ビットのレジスタの直接乗算を実行できる。好ましくは、命令フェッチユニット306は、所望の命令をローカルに格納するための命令キャッシュ(ICache)152を有する。さらに、ロード/格納ユニット314はデータキャッシュ154を有する。一実施形態においては、命令キャッシュ152は32キロバイトの記憶容量を備え、データキャッシュ154は8キロバイトの記憶容量を備え、書込みバッファ316は2キロバイトの記憶容量を備える。特定の実施形態においては、メモリ管理ユニット308は、計算速度をさらに上げるために変換ルックアサイドバッファ340を有する。
特定の実施形態においては、プロセッサコア120は、暗号アクセラレータを含む暗号アクセラレーションモジュール(セキュリティアクセラレータ)156を有する。暗号アクセラレーションは、一般に、1つまたは複数の暗号化アルゴリズムによって提供される。例示的なアルゴリズムとしては、トリプルデータ暗号化規格(3DES)、高度暗号化規格(AES)、セキュアハッシュアルゴリズム(SHA−1)、メッセージダイジェストアルゴリズム5番(MD5)が含まれる。暗号アクセラレーションモジュール156は、転送を通して、演算ユニット302内の主レジスタファイル328と通信する。乗算/除算ユニット326では、RSAおよびディフィ−ヘルマン(DH)アルゴリズムなどのいくつかのアルゴリズムが実行される。これらのようなアルゴリズムはメモリ集約的であって、例えば、格納されているルックアップテーブルへの多大なアクセスを必要とする。これらのようなメモリ集約的アルゴリズムの性能は、低遅延メモリ118を使用してアルゴリズムで用いられるデータを格納/検索することにより、向上する。低遅延メモリ118とプロセッサ120とを専用のLLMバス158を使用して結合すれば、システムの全体性能をさらに高めることができる。
DFAユニット400は、低遅延メモリ118とのインタフェースのための低遅延メモリコントローラ160を有する。コントローラのタイプは、使用される低遅延メモリの種類に依存する。例えば、外部の低遅延メモリ118は、アイダホ州ボイジー所在のMicron Technology社から市販されている低遅延DRAM(RLDRAM)などのDRAMパーツを含んでもよい。
図4は、例示的なDFAユニット400のブロック図である。DFAユニット400は3つの主コンポーネント、すなわち、低遅延メモリ118との相互アクセスを制御する低遅延メモリ(LLM)コントローラ160と、低遅延メモリ118に格納されるDFAグラフを走査する1つまたは複数のDFAスレッドエンジン405と、DFAグラフへのアクセスがそれを介して達成される命令入力ユニット410とを有する。好ましくは、DFAユニット400は、格納されているDFAグラフへのほぼ同時のアクセスをサポートすることによってシステムの性能をさらに高めるために、2つ以上のDFAスレッドエンジン405を有する。一般に、DFAスレッドエンジン405はほぼ同一であり、互換性がある。例示的な一実施形態では、DFAユニット400は、低遅延メモリ118内に独立して格納される16個のグラフまで走査できる16個のDFAスレッドエンジン405を有し、格納されたグラフのそれぞれにつき1つのDFAスレッドエンジン405が使用される。冗長性によるが、上記独立して格納されるグラフのうちの少なくともいくつかは他のグラフの複製コピーであってもよい。すなわち全く同一のグラフを格納していてもよい。
DFAユニット400は、LLMインタフェース425と称される適切なインタフェースを介して外部低遅延メモリ118に結合される。特定の実施形態においては、複数のLLMインタフェースが設けられる。各インタフェース425は、個々のLLMアクセスバスを介して低遅延メモリ118に結合される。好ましくは、DFAユニット400は、低遅延メモリ118への同時アクセスをサポートするために、個々のLLMアクセスバスを使用して低遅延メモリ118に結合される2つ以上のLLMインタフェース425を有する。したがって、2つ以上のインタフェース425のうちの1つが第1のメモリアクセス要求に対処するために使用中である間、他のインタフェース425のうちの1つは別の要求に対処するのに利用できる状態にある。この例示的な実施形態では、DFAユニット400は、それぞれが18データビットを含む2つの低遅延DRAMインタフェース425a、425b(全体で425)を有する。当業者には周知のとおり、メモリへのインタフェースは、メモリとの間で読出し/書込みされるデータビットと、データが格納されているメモリ内の位置を示すアドレスビットと、チップ選択ビット、クロック、読出し/書込みイネーブルビットおよびバンク選択ビットなどの制御ビットとを含む。
DFAユニット400は、I/Oブリッジ138およびI/Oバス142を介してメインメモリ130、108にも結合される。さらに、DFAユニット400は、別のインタフェースを用いて1つまたは複数のプロセッサコア120に結合される。例えば、DFAユニット400は、DFAユニット400とプロセッサコア120との間の専用の直接アクセスのための、低遅延メモリバス158へのインタフェースを有する。LLMバス158は、メインI/Oバス142から分離されているため、通常はシステムの他の構成要素に対するアクセス要求のために先に占有されてしまうことがなく、したがって、低遅延メモリ118との間のアクセス速度はさらに上がる。さらに、専用のLLMバス158の使用によってオペレーティングプロトコルの簡略化が可能であり、やはり全体的な実行速度が上がる。これは、一般に競合ベースのアクセスプロトコルを使用するI/Oバス142などの共有システムバス(すなわち、バス142がバストランザクションに対処していて使用中であれば、新規要求は拒絶されるか、少なくともバス142が利用可能になるまで遅延される)とは対照的である。
好ましくは、外部LLMインタフェース425のデータレートは、データの高速転送を高めるために比較的高速である。例えば、外部LLMインタフェース425のデータレートは、プロセッサコア120のクロックレートと同一であってもよい。このような高速インタフェース425を使用することにより、LLMコントローラ160は、外部低遅延メモリ118内の利用可能な1つまたは複数のメモリバンクに対する多くの処理中(in-flight)のトランザクションを管理できる。以下に詳述するように、DFAユニット400は自動バンク複製も実行してバンク衝突を最小限に抑える。
この例示的な実施形態では、LLMコントローラ160は、LLMインタフェース425の任意の組合せにより、結合された1ギガバイトまでの低遅延メモリ118をアーキテクチャ的にサポートすることができる。LLMバス158はプロセッサコア120に直接接続され、これにより、プロセッサコア120には低遅延メモリ118への超高速アクセス経路が可能になる。この例示的な実施形態では、プロセッサコアの個々の動作は、36ビットまたは64ビットのロード/格納のいずれであってもよい。
暗号化処理などのコンテンツアウェア型アプリケーションの処理は、パターンおよび/または表現(データ)を利用する。パターンおよび/または表現は繰返し参照されてもよく、好ましくは低遅延メモリ118に格納される。パターンおよび/または表現は、DFAと称される特殊状態マシンの形式などの好適なデータ構造に従って配列される。DFAへの入力は、1つまたは複数のバイト(1バイト=8ビット)で形成される文字列表現である。このようなDFAでは、アルファベットが1バイトである。各入力バイトが、DFAの状態マシンを1つの状態から次の状態に遷移させる。状態および遷移関数は、グラフで表示することができる。
一般に、DFAは、図5Aおよび図5Bに示すような弧によって相互に接続される複数のノードを含むグラフ、またはモデルとして表現できる。各グラフノードは状態マシンの個々の状態を表し、異なるグラフ弧は相互に接続されるノード間の状態遷移を表す。状態マシンの現在の状態は、グラフの特定のノードを選択するノード識別子である。特定の弧の選択は、状態マシン(例えば、DFA)への入力バイト数によって決定される。したがって、第1のノードおよび入力バイト数を指定する状態を仮定すると、状態は、第1のノードから上記入力バイト数に対応する弧に沿って第2のノードに遷移する。場合によっては、第1のノードと第2のノードは同一である。ノード数は、小型サイズのグラフで数ノードから約128,000ノードまでの範囲内であってもよい。大型サイズのグラフは1,000,000ノードまでを有してもよく、それ以上であってもよい。
DFAスレッドエンジン405は、パターン探索の実行にも利用できる。図5Aおよび図5Bに示す例では、DFAグラフ500は、ターゲットの文字列表現「abc」を探索するように設計されている。したがって、DFAグラフは、文字「abc」の文字列に正確に一致する入力データを探索するために使用される。この表現は固定長表現であり、これより、ノード数、したがってグラフの深さは既知である(すなわち、一定である)。
DFAグラフ500を生成するために、上記表現が解析され、コンパイラがルートノード(すなわち、ノード「0」)を生成し、意図する表現に即してグラフにノード1から3を追加する(すなわち、ターゲットの文字列の各文字につき1つの追加ノード)。本例を引き続き参照すると、例示的な文字の入力ストリームが文字列「…12abc3…」であるとする。DFAグラフを使用して入力文字列が探索され、ターゲットの文字列「abc」が識別される。
DFAの初期状態は、ノード「0」である。各文字またはバイトは逐次読み取られ、DFAは、ターゲットの文字列表現の最初の文字が読み取られるまでノード0に留まる。例えば、入力ストリームにおけるターゲットの文字列表現の最初の文字「a」が検出されると、「a」で表記された弧が辿られ、状態はノード0からノード1に遷移する。次に、入力ストリームの次の文字が読み取られ、これがターゲットの文字列表現の次の文字(すなわち、「b」)以外のいずれかの文字であることが検出されれば、「not b」で表記された、ノード1からノード0に戻る弧が辿られる。しかし、入力ストリーム内の次の文字として文字「b」が検出されると、「b」で表記されたノード1からノード2への弧が辿られる。次いで、入力ストリームの次の文字が読み取られ、これがターゲットの文字列表現の次の文字(すなわち、「c」)以外のいずれかの文字であれば、「not c」で表記されたノード2からノード0に戻る弧が辿られる。しかし、ノード2において、入力ストリーム内の文字「c」が検出されると、「c」で表記されたノード2からノード3への弧が辿られる。ターゲットの文字列表現「abc」は固定長表現であることから、ノード3は終端ノードであり、探索の結果が報告される。
図5Bに示す別の例では、2つの文字列「abcd」OR「abce」の1つまたは複数の出現を見出すために、先の例のグラフが拡張されている。したがって、2つの追加ノード、すなわち、ノード4および5が追加されており(例えば、「d」に対するノード4および「e」に対するノード5)、1つのノードが各文字列の第4文字に対するものである。いずれの文字列も最初の3文字が同一であるため、ノード4および5は、図のようにノード3に接続されている。好ましくは、いずれの文字列の場合もその出現は全て、入力文字列を通る単一の「パス」上で識別される。
文字列「xwabcd454abceabcdsfk」などの例示的な入力文字列は、DFAを通過し、結果として3つの「マーク付けされた」遷移が生成される。マーク付けされた遷移は、入力文字列内に配置される文字列セグメントの終わりで発生する(例えば、「d」または「e」が存在している各位置で1つ)。したがって、3つのマーク付けされた遷移は、3つの文字列が発見されたことを表す。最初と最後のマークはノード3からノード4への遷移を示し、入力文字列内の文字列「abcd」の存在および位置を表す(すなわち、DTEバイト=5、先行=3、次=4およびDTEバイト=17、先行=3、次=4)。中央のマーク付けされたノードは、ノード3からノード5への遷移を示し、入力文字列内の文字列「abce」の存在を表す(すなわち、DTEバイト=13、先行=3、次=5)。
さらに、コンパイラで1つまたは複数の意図する表現を解析し、意図する表現が要求する通りにグラフの適切なノードを生成することによって、さらに複雑なDFAグラフを同様に生成することができる。したがって、単一のグラフを使用して、固定長、可変長および固定/可変長の組合せである複数の表現を探索することができる。
DFAスレッドエンジン405のそれぞれは、低遅延メモリ118に格納されている個々のDFAグラフのノードを走査する能力を有する。一般に、DFAスレッドエンジン405は、ハードウェア、ソフトウェアまたはハードウェア/ソフトウェアの組合せを使用して実現できる状態マシンである。特定の実施形態においては、DFAスレッドエンジン405は、組合せ論理を用いてハードウェアで実現される。他の実施形態では、DFAスレッドエンジン405のそれぞれは異なるプロセッサ上で個々に実現される。さらに他の実施形態では、DFAスレッドエンジン405は共通プロセッサを使用して実現される。例えば、DFAスレッドエンジン405のそれぞれは、共有のマルチタスク環境を提供するように適合化された共通プロセッサ上で実行される個別のタスク(すなわち、命令シーケンス)であってもよい。マルチタスキングは、オペレーティングシステムにおいて複数の独立したジョブ(すなわち、DFAスレッドエンジン405)間で単一のプロセッサを共有する技術である。さらに、もしくは代替として、DFAスレッドエンジン405のそれぞれは、マルチスレッディング能力を提供するように適合化された共通プロセッサ上で実行される個別のプロセススレッドであってもよい。マルチスレッディングとマルチタスキングとの差は、スレッドが一般に、マルチタスキング下でタスクを実行するのに比べてその環境を互いに多く共用する点である。例えば、複数スレッドが単一アドレス空間および全体変数セットを共有する一方で、スレッドのプログラムカウンタおよびスタックポインタの値によって各スレッドを区別することもできる。
動作中、プロセッサコア120は、DFA命令待ち行列415(図4)にDFA命令を送出する。例えば、DFA命令待ち行列415はメインメモリ130、108内に維持される。DFA命令は、いずれのパケットデータを使用し、いずれのDFAグラフを走査するかを定義する。パケットデータは、一般にメインメモリ130、108に格納されるが、DFAグラフは低遅延メモリ118に格納される。動作中、DFAユニット400は命令待ち行列415からの命令を逐次フェッチし、フェッチされた命令のそれぞれを利用可能なDFAスレッドエンジン405の1つにスケジューリングする。DFA命令を受信すると、DFAスレッドエンジン405は、必要であればメインメモリ130、108内のデータにアクセスし、メインメモリ130、108から検索されたデータを使用してアクセス要求を低遅延メモリ118に送る。低遅延メモリ要求は1つの待ち行列に格納され、低遅延メモリ内ではメモリバンク毎に1つの待ち行列が関連付けされている。LLMコントローラ160は、待機している低遅延メモリアクセス要求を実行する。同一で互換性のある複数のDFAスレッドエンジン405を設けることにより、いずれの命令も複数のDFAスレッドエンジン405のうちのいずれにもスケジューリングできる。利用可能なDFAスレッドエンジン405のいずれもが、命令待ち行列から次の待機命令を受信することができる。
待機命令の1つを受信すると、DFAスレッドエンジン405は、同時に、
a.I/Oバス142を介してメインメモリ130、108から入力パケットデータ(すなわち、入力バイト)をフェッチし、フェッチしたバイトを使用してDFAグラフの状態間遷移が実行され、
b.パケットデータのバイト毎に、上記バイトについて次のDFAグラフ状態に走査するための低遅延メモリロード命令を発行し、
c.I/Oバス142を介して元のメインメモリ130、108に中間および最終結果を戻して書き込む。
a.I/Oバス142を介してメインメモリ130、108から入力パケットデータ(すなわち、入力バイト)をフェッチし、フェッチしたバイトを使用してDFAグラフの状態間遷移が実行され、
b.パケットデータのバイト毎に、上記バイトについて次のDFAグラフ状態に走査するための低遅延メモリロード命令を発行し、
c.I/Oバス142を介して元のメインメモリ130、108に中間および最終結果を戻して書き込む。
さらに、もしくは代替として、コアプロセッサ120は、LLMバス158を使用して低遅延メモリ118に直接にアクセスすることができる。例えば、コアプロセッサ120は低遅延メモリ118にアクセスして、最初にグラフをメモリ118に格納しておくことができる。
特定の実施形態においては、低遅延メモリ118はコアプロセッサ120の外部に設けられる。例えば、低遅延メモリ118は、コアプロセッサ120に相互接続される1つまたは複数の物理デバイス(例えば、モジュールまたはチップ)内に設けられてもよい。その物理的構造に関わらず、個々のメモリデバイス118は、好ましくはコアプロセッサの近くに配置される(例えば、同一マザーボード上に共に配置される)。
低遅延メモリ118の例示的な実施形態を、図6に示す。メモリ118は、2つの物理メモリデバイス430a、430b(総称して430)から成る。メモリデバイス430のそれぞれは、複数のメモリバンクを有する。図に示すとおり、デバイス430はそれぞれ、8個のメモリバンク432を有する。メモリバンク432は区別可能であり、例えば、LLMコントローラ160は複数のバンク432のそれぞれとの間で選択的にデータの書込み/読出しを行うことができる。メモリデバイス430のそれぞれは、DFAユニット400のLLMインタフェース425のそれぞれ1つに相互接続される個々のインタフェース530a、530bを有する。他の実施形態では、1つまたは3つ以上のメモリデバイス430を含むことができる。さらに、もしくは代替として、メモリデバイス430のそれぞれは、この例示的な実施形態の8個よりも多い、または少ないメモリバンク432を有するように構成されてもよい。さらに、もしくは代替として、メモリデバイス430のそれぞれは、2つ以上のLLMインタフェース530を使用してDFAユニット400に結合されてもよい。
DFAユニット400の各LLMインタフェース425は、低遅延メモリ118の個々のインタフェース530に結合される。インタフェース425、530は、一般に異なるグループ内に配置される複数の相互接続リードを含む。例えば、リードのいくつかは特定のメモリバンク432を選択するために使用される(例えば、リードが3つあれば、8個までのメモリバンクのいずれかを選択するのに十分である:23=8)。他の相互接続リードは、特定のメモリアドレスの選択または参照に使用することができる(例えば、20本のリードは約512Kのメモリアドレスを選択でき、21本のリードは約1024Kのメモリアドレスを選択できる)。また、さらに他の相互接続リードを用いて、低遅延メモリとDFAユニット400との間でデータを転送することもできる(例えば、32本のリードは、一度に32ビットまでのデータを転送できる)。さらに他の相互接続リードを用いて、情報(例えば、クロック信号を供給する)および/またはコマンドの識別(例えば、読出しコマンド対書込みコマンドなど、複数のコマンドから1つを選択する)のタイミングを調整することができる。
LLMコントローラ160(図4)は複数の低遅延メモリ(LLM)待ち行列を有し、1つの待ち行列が低遅延メモリバンクのそれぞれに関連づけられている。各LLM待ち行列は、個々の待ち行列に格納されている低レベルのメモリアクセス要求数を表示する個々の待ち行列ステータスインジケータを有する。DFAユニット400は、サーモメータユニットおよび1つまたは複数のコンフィグレーションレジスタも有する。したがって、各LLM待ち行列を、メモリバンクの1つに格納されているDFAグラフにアクセスするために使用できる。例示した実施形態では、LLMコントローラ160は、16個のメモリバンク432のそれぞれに1つ、したがって16個のLLM待ち行列を有する。
命令ユニット410は、メインメモリ130、108のDFA命令先入れ先出し(FIFO)バッファに、ソフトウェアが先に書き込んでいる未処理のDFA命令の累積数を表示する値を格納するドアベルレジスタ420を有することができる。別のコンフィグレーションレジスタを設けて、低遅延メモリ118へのアクセスおよび使用に関連する他の態様を識別することもできる。
DFAユニット400は、I/Oバス142を使用して、メインメモリ130、108内のDFA命令FIFOから待機命令をフェッチする。DFAユニット400は次に、いずれのDFAスレッドエンジン405がそのフェッチされた命令を取り込むかを決定する。DFAスレッドエンジン405はDFA命令を処理し、低遅延メモリのアクセス要求を生成する。DFAユニット400は、メモリアクセス要求を最小遅延で提供する可能性が最も高い低遅延メモリバンクはいずれであるかを決定する回路を有する。これを実行するために、DFAユニット400は、メモリアクセス要求を、最小の待機エントリ数を有するLLM待ち行列に加える。各LLM待ち行列内の待機エントリは、次に、DFAロード/格納コマンドを用いて、LLMコントローラ160によって処理される。
サーモメータユニットを用いて、複数の利用可能なLLM待ち行列のうちのいずれが最少の待機エントリを有するかを識別できる。これを達成するために、サーモメータユニットはまず、いずれのメモリバンクが要求されるDFAグラフの複製を格納しているかに応じて、いずれのLLM待ち行列を検査するかを判断する。次に、サーモメータユニットは、複数のLLM待ち行列のそれぞれ内の待機エントリ数を比較する。サーモメータユニットは次に、利用可能な各LLM待ち行列間で待機エントリ数を比較し、いずれのLLM待ち行列が最少の待機エントリ数を有するかを判断する。サーモメータユニットは次に、最少の待機エントリ数を有するLLM待ち行列の表示をLLMコントローラ160に提供する。次に、LLMコントローラ160は、サーモメータユニットによって識別された最少の待機エントリ数を有するLLM待ち行列を使用して、メモリアクセス要求などの待機エントリを処理する。
待ち行列に格納されている命令の数は、待ち行列ステータスインジケータを使用して判断できる。例えば、待ち行列ステータスインジケータは、個々の待ち行列内の次に利用可能な命令の位置を指す単なるポインタであってもよい。待ち行列の終点が認識されると、行列に入っている命令の数は単純なポインタ演算を用いて計算される。
さらに、または代替として、待ち行列ステータスインジケータは、待機命令の数を表示するカウンタ値を格納することができる。したがって、待ち行列に命令が書き込まれると、待ち行列ステータスインジケータのカウンタ値はインクリメントされる。同様に、待ち行列から命令が読み出されると、待ち行列ステータスインジケータのカウンタ値はデクリメントされる。特定の実施形態においては、2つ以上の待ち行列が同一の最少数の待機命令を有する場合、いずれの待ち行列を使用するかを確定するアルゴリズムを用いてもよい。例えば、選択される待ち行列は、最高または最低のいずれかの参照指定を有するものである。あるいは、待ち行列は、上記複数の利用可能な待ち行列からランダムに選択されてもよい。
例示的な実施形態においては、DFAユニット400のLLMコントローラ160は、2つのLLMインタフェース425a、425bのそれぞれで最大8個のメモリバンク432を制御できる。表1は、8バンクのメモリデバイス430を使用する個々の36ビットLLM参照の主要性能特性を示す。本表はまた、いずれのインタフェースが使用され、メモリデバイス430内のいずれのバンク432が使用されるかも示す。インタフェース欄は、使用される18ビットインタフェースの数を示す。
複製なしが選択されている2つのLLMインタフェース425を有する例示的な構成においては、使用される特定のインタフェースは最初の値で決定される。例えば、最初の値は、命令内に設けられたオフセットフィールドにおける1つまたは複数のビットであってもよい。オフセット<2>の値および参照されるメモリバンクは、同一オフセットフィールド(例えば、オフセット<5:3>)内の他のビット値などの第2の値によって決定される。これより、オフセット<2>の値が=1の場合、使用されるインタフェースはLLMインタフェース_1 425bである。第1のLLMインタフェース425bを介して相互接続される特定のメモリバンク432は、オフセット<5:3>の値によって決定される(すなわち、オフセット<5:3>=”011”はメモリバンク3を指す)。
続いて、2つのLLMインタフェース425を有し、複製係数が2(すなわち、2x)である場合に、両方のインタフェースが使用される、例示的な構成について説明する。個々のインタフェースのそれぞれで参照される特定のメモリバンクは、オフセット<4:2>の値によって決定される。したがって、個々のLLMインタフェース425を介して相互接続される8個の利用可能なメモリバンク432のうちの特定の1つは、オフセット<4:2>の値によって決定される(すなわち、オフセット<4:2>=”111”は2つのメモリデバイス430のそれぞれにおけるメモリバンク8を指す)。
複製係数が4(すなわち、4x)である場合は、両方のインタフェースが使用され、1対の選択可能なメモリバンク432の場合は、2つのメモリデバイス430のそれぞれ上で使用される。したがって、表1で識別されているとおり、オフセット<3:2>の値が、いずれのバンク432が使用されるかを決定する。同様に、複製係数が8(すなわち、8x)である場合は、表1で示すとおり、やはり両方のインタフェースが使用され、2つのメモリデバイス430のそれぞれで使用される4つのメモリバンク432の選択可能なグループが用いられる。
図7は、低遅延メモリ118に格納される例示的なDFAデータ構造体500(すなわち、グラフ)を示す。先に述べたように、DFAグラフ500は、その第1ノード(すなわち、ノード0)を指すポインタによって参照されてもよく、DFAスレッドエンジン405によって走査される。一般に、グラフ500はN個の異なるノード505から成る。グラフ500内の各ノード505は次のノードポインタ510のアレイを含み、次のノードポインタ510は各固有の入力バイト値毎に1つ設けられている。したがって、8ビットのアルファベットを有するDFAグラフ500では、28=256個の次のノードポインタ510が存在する。各次のノードポインタ510は、入力バイトの次のノード/状態を直接指定する次のノード識別子(ID)を含む。
特定の実施形態においては、DFAユニット400は、18ビットの次のノードポインタフォーマット515または36ビットの次のノードポインタフォーマット530のいずれかをサポートする。18ビットポインタ515では、各ノード505は、低遅延メモリ118内に18*256ビットすなわち約512バイトの格納を必要とする。36ビットポインタ530では、各ノード505は、低遅延メモリ118内に36*256ビットすなわち約1キロバイトの格納を必要とする。したがって、格納データの任意の複製によって、全体的な容量要件が大きくなる。
18ビットポインタ515の場合、次のノードポインタ510のぞれぞれは、17ビットの次のノードID0などの次のノード識別フィールド520を含む。また、対応するパリティビット525も用意される。偶数パリティを使用する例示的実施形態では、パリティビットは、次のノードID520の全17ビットの排他的OR(XOR)として判断される。したがって、36ビットワードは、それぞれが個々のパリティビット525、527を有する2つの18ビットポインタ520、522を個々に格納されることができる。
36ビットポインタ530の場合、次のノードポインタ510のぞれぞれは、20ビットの次のノードIDフィールド535と、2ビットのタイプ値フィールド545と、7ビットのエラー訂正符号(ECC)フィールド550と、未使用の7ビットフィールド540とを含む。好ましくは、未使用ビットはゼロに設定される。DFAスレッドエンジン405は、36ビットポインタ530内のECCコード550を使用してシングルビットエラーを自動的に修正し、ダブルビットエラーを検出する。タイプ値545は次のノードタイプを表示し、例えば、以下の値を保持できる。
0=ノーマル
1=マーク付け
2=終端
0=ノーマル
1=マーク付け
2=終端
DFAスレッドエンジン405を使用するためには、システムのソフトウェアはまず、例えば図7に示すようなDFAグラフ500を有する低遅延メモリ118を事前ロードする。システムソフトウェアはまた、DFAユニット400にグラフ開始を指すポインタ、開始ノードIDおよび特定の入力バイト数も提供する。各バイトの処理中に例示的なDFAスレッドエンジン405によって実行される機能を記述する擬似コードリストを表2に示す。
特定の実施形態においては、DFAスレッドエンジン405は特殊なノードポインタ条件をサポートすることができる。例えば、DFAスレッドエンジン405は、表3に示す3つまでの特別なノードポインタ条件をサポートすることができる。
18ビットモードでは、DFAスレッドエンジン405は、次のノードIDフィールド520、522の値を比較することによって、特殊なTERMおよびMARKED条件を判断する。この場合、マーク付けされたノード505に入る全ての遷移がマーク付けされる。36ビットモードでは、DFAスレッドエンジン405は、特殊なTERMおよびMARKED条件を次のノードポインタ530内のタイプフィールド545から直接判断する。実際に、36ビットモードでは、個々のノードそのものではなく、個々の遷移にマーク付けすることができる。
図5Bの例に戻って、18ビットポインタを使用して、ノード4および5がマーク付けされる。したがって、入力文字列内の個々の探索文字列の出現を、いずれのノードの走査であるか表示し、後の分析においていずれのノードかを識別できる。代わりに、36ビットポインタを使用して、ノード3からノード4および5までの弧がマーク付けされる。したがって、DFAマーク付け技術をDFAスレッドエンジンと組み合せて使用することにより、同一入力文字列内の複数の異なる文字列の存在および位置を、入力文字列を通る単一パスで見出すことができる。
図11は、可能な17ビットノードID690を図示し、およびこれらが18ビットモードにおいていかに分類されるかを明らかにしている。後に詳述するDFA命令は、終端ノードおよびマーク付きノードの数を明示するパラメータを含む(例えば、表2のIWORD3[TSize]パラメータは終端ノードの数を明示し、同じく表2のIWORD3[MSize]パラメータはマーク付きノードの数を明示する)。終端ノードIDの数(IWORD3[TSize])は最大数であり、低遅延メモリ118に実際に格納してバックアップされる必要はない。ノーマルノードおよびマーク付きノードのみが、実際の低遅延メモリ格納装置によってバックアップされる。
DFAスレッドエンジン405は、低遅延メモリ118に格納されているグラフ500を走査する間、例外的条件が発生すると結果ワードを生成する。MARKED、TERMまたはPERRなどの次のノードポインタは、このような例外的条件を表す。2つの追加の例外的条件には、入力データの完了(DATA_GONE)および結果スペースの消耗(FULL)が含まれる。入力バイトに関するグラフ500の走査は複数の例外的条件をもたらすこともあるが、単一の入力バイトから生成できる結果ワード(RWORD1+)は多くても1つである。例えば、最後の入力バイトがDATA_GONE条件に遭遇すると、結果ワード「RWORD1+」を生成する。最後の入力バイトもマーク付けされた次のノードに遭遇することがあるが、第2のRWORD1+結果は生成されない。グラフ500の走査は、(優先順に)PERR、TERM、DATA_GONEまたはFULLの例外的条件が発生した時点で停止し、DFAスレッドエンジン405はその最も高い優先順位の条件を報告する。
各DFA命令は、DFAスレッドエンジン405によって、処理されるデータの構築にダイレクトモードまたはギャザーモードを使用すべきか否かを指定することができる。いずれの場合も、DFAユニット400はメインメモリ130、108からバイトを読み出す。
図8は、メインメモリ130、108に格納されるDFA命令待ち行列600の例示的な構造を示している。DFA命令待ち行列600は、1つまたは複数のDFA命令610a〜610eまで(総称して610)を含む。DFA命令待ち行列600は、DFA命令を格納するためのチャンクまたはバッファ605を割り当てるソフトウェアによって構築される。ブート時において、待ち行列は開始テールポインタを書き込むことによって確立される。割当ては、パケットの受信に伴って進行していく。DFAユニット400は、DFAスレッドエンジン405によって命令が処理された後にチャンク605を解放する。DFAユニット400は、テール(DFA命令待ち行列600に格納されている最後のDFA命令)のアドレスを含むテールポインタ620を有する。
命令待ち行列600は、「チャンク」またはバッファ605a、605b、605c(総称して605)のリンクされたリストである。2つ以上のチャンク605を有するDFA命令待ち行列600の場合、異なるチャンク605は次のチャンクバッファポインタ615a、615b(総称して615)によってリンクされる。図示したDFA命令待ち行列600の場合、第1チャンク605aは、第2チャンク605bに格納される第1のDFA命令610bを指す次のチャンクバッファポインタ615aを含む。次に、第2チャンク605bは、複数のDFA命令610を含み、第3チャンク605cの第1のDFA命令610eを指す次のチャンクバッファポインタ615bがこれらの命令610の後に続く。第3チャンク605cは最後であり、したがって次のチャンクバッファポインタ615は不要である。図が示すように、ソフトウェアのヘッドポインタ625は、格納されている最後の命令610eの直後の次の空のバッファ位置を指す。
動作中、DFAユニット400は、DFA命令待ち行列600からワードを読み出し(テールから開始)、チャンク605aの最後の命令610aに到達すると、次のチャンク605bを指す次のチャンクバッファポインタ615aを走査する。このようにしてチャンク605を「ジャンプ」すると、DFAユニット400は、前のチャンク/バッファ605aをハードウェアが管理するプールに解放する。
コンフィグレーションレジスタ450に格納されるコンフィグレーション値は、DFA命令のバッファリングに使用されるチャンク605のサイズを指示するために使用されてもよい。図8は、最小規定値である3つのDFA命令610のチャンクサイズの一例を示している。一般に、DFA命令610は固定サイズ(例えば、32バイト)である。チャンク605において、DFA命令610の直後に存在する64ビットワードは次のチャンクバッファポインタ615である。本例は、命令待ち行列600内に5つのDFA命令610があることを示している。命令610すなわちコマンドはゼロから4までの連続番号を付され、より小さい番号はより古い(すなわち、早期に格納された)DFA命令610を表し、最も小さい番号はこの待ち行列のテールに格納されている。FIFO構成により、DFAスレッドエンジン405ではより古い命令から先に開始される。好ましくは、各DFA命令610はチャンク境界にまたがることなく、全体で1つのチャンク内に存在している。
DFAユニット400は、待ち行列600のテールに、DFA命令610aのアドレスを指すテールポインタ620を維持する。ソフトウェア(例えば、システムソフトウェア)は、待ち行列のヘッドに、最新に格納されたDFA命令610eを指すヘッドポインタ630を保持する。待ち行列600にパケットを挿入するためには、ソフトウェアはまずDFA命令610を待ち行列600に書き込み、必要であればチャンク605を割り当てなければならない。ドアベルレジスタ420(図4)は、待ち行列に格納されているDFA命令数のカウント数を格納する。
ヘッドポインタ630とテールポインタ806の距離は、DFA命令待ち行列600のサイズ、および未処理のドアベルカウント数の両方しい。DFA命令待ち行列600のサイズは、利用可能なメモリおよびDFA命令待ち行列600についてのドアベルカウンタ420内のビット数によってのみ制限される。例えば、ドアベルカウンタが20ビットである実施形態では、待ち行列は220ワードに制限される。
ドアベルカウンタが、チャンク605内の最後のDFA命令610が有効なDFA命令610を含むことを示し次第、DFAユニット400は次のチャンクバッファポインタ615を読み取ってもよいことに留意されたい。これは、ソフトウェアが、チャンク605aに最後のDFA命令610aを書き込み次第、次のチャンクバッファ605を割り当て、先行するチャンク605内にこれを指す次のチャンクバッファポインタ615を設定しなければならないことを意味する。
ドアベル書込みはDFA命令を細分してなされ、ソフトウェアは、任意数のDFA命令610で「ドアベルを鳴らす」ことができる。ソフトウェアは、個々のDFA命令610に対してドアベル書込みを発行することができ、または、複数のDFA命令610をドアベルの単一の書込みにまとめてすることができる。唯一の要件は、待ち行列600内の有効なDFA命令610の数は少なくともドアベルのカウント数と同一でなければならず、DFA命令610間に散在する次のチャンクバッファポインタ615も適切に設定されなければならないことである。システムの始動時、すなわちブート時に、システムソフトウェアは、この値を格納するためにコンフィグレーションレジスタ450への書込みが確立された状態で、オリジナルの次のチャンクバッファポインタ615(すなわち、開始テールポインタ620)を有するDFA命令待ち行列600を構成する。
図9は、例示的な次のチャンクバッファポインタのフォーマット630を示す。主コンポーネントは、メインメモリ130、108における有効バイトの位置を表示する値を格納するアドレス(Addr)フィールド635である。Addrフィールド635はバイトアドレスを指すが、好ましくは、これは、128バイトキャッシュブロックの境界に当然に揃えられる。したがって、その最小位の7ビットはゼロになる。
各DFA命令610は、DFAユニット400がDFAスレッドエンジン405を開始させ、入力データを読み出し、低遅延メモリ118内のグラフ500を走査しかつ結果を書き込むために必要とする情報を有する。図10の例示的なDFA命令フォーマットに示すとおり、各DFA命令610は、メインメモリ130、108内に4つの独立したワード(すなわち、32バイトを表す4つの64ビットワード)655、660、665、670を含む。DFA命令610は、命令を処理するようにスケジューリングされたDFAスレッドエンジン405に対して入力バイトの位置および結果の位置を特定する。DFAユニット400は、DFA命令待ち行列600が有効なDFA命令610を有していればメインメモリ130、108からDFA命令610および入力データを読み出し、結果をその生成に伴って書き込む。また、DFAユニット400はワーク待ち行列エントリを終了後に随意に送出でき、したがって、DFA命令610はワーク待ち行列ポインタのためのフィールドを含むこともできる。
例えば、第1のDFA命令ワード655は、その第1ノードのメモリ位置によってDFAグラフを特定するベースアドレスを含む。第1のワード655は、予め選択された複製を格納する複製フィールド、および使用されるアドレス指定のタイプを示すタイプ値、ならびにグラフ処理のいずれのノードで開始するかを特定する開始ノードID656などの追加情報も提供する。第2のDFA命令ワード660は、DFA405によって処理されるべきバイト数を指定する長さフィールド661と、処理されるバイトのアドレス参照を格納するアドレスフィールド662とを含む。第3のDFA命令ワード665は、任意の結果が書き込まれるアドレス(例えば、メインメモリ130、108内のアドレス)を特定する結果アドレスフィールド666と、許容される最大結果数を示す値を格納する最大結果フィールド667とを含む。さらに、第4のDFA命令ワード670は、ワーク待ち行列処理に関連する1つまたは複数のフィールドを含んでもよい。
図12は、DFAスレッドエンジン405によって処理されるデータを構築するための、ダイレクトモードと称される利用法の一例を示す。DFA命令610は、DFA命令610のアドレスフィールド662内に提供されるメモリアドレスを使用して開始位置を、かつ長さフィールド661を使用して処理されるバイト数を直接指定する。対応するDFA命令610を処理するDFAスレッドエンジン405は、指定されたアドレスから開始して、メインメモリ130、108から指定された数の連続するバイト705を読み出し、各バイトを順に処理する。
図13は、ギャザーモードと称される代替モードの利用法の例を示す。ギャザーモードの使用により、DFAスレッドエンジン405によって処理されるデータ(すなわち、入力バイト)は、メインメモリ130、108内に連続して格納される必要がない。むしろ、入力バイトは、メインメモリ130、108の2つ以上の別個の位置に連続して格納されてもよい。ギャザーモードでは、DFA命令610はまず、ギャザーモード識別フィールド663(図10)を使用して、それがギャザーモードの命令であることを識別する。ギャザーモードでは、DFA命令610のアドレスフィールド662が、同一のメインメモリ130、108に格納されている第1のギャザーポインタの開始位置およびDFAギャザーポインタリスト755のサイズを指定する。DFAギャザーポインタリスト755の各エントリは、DFAスレッドエンジン405が処理する2つ以上の別個のメモリ位置の個々の開始位置およびサイズ(すなわち、バイト数)を指定する。DFAスレッドエンジン405が処理する入力されるバイトストリームの合計は、ギャザーリスト755で特定された各エントリによって指示される格納バイトを連結することによって取得される。したがって図13の例では、入力バイトストリームは、第1の隣接する格納セグメント(すなわち、DTEバイト_0)760aと、第2の隣接する格納セグメント(すなわち、DTEバイト_1)760bと、第3の隣接する格納セグメント(すなわち、DTEバイト_2)760cとの連結であり、セグメント760のそれぞれは他のセグメント760とは不連続である。対応するDFA命令610を処理するDFAスレッドエンジン405は、ギャザーリスト755の第1のエントリを読み出す。これが完了すると、DFAスレッドエンジン405はDFAギャザーリスト755の第2のエントリを読み出し、入力バイトが全て読み込まれるまでこれを続行する。なお、ギャザーリスト755の第1のエントリは第1のセグメント760aを指し、第2のエントリは第2のセグメント760cを指す。
図14は、DFAギャザーポインタリスト755の各エントリを表す、例示的な64ビットDFAギャザーポインタフォーマット800を示す。64ビットギャザーポインタ800は、隣接する個々のセグメント760内に格納される入力バイト数を示す値を格納する長さフィールド810を含む。また、隣接する個々のセグメント760の第1のバイトのアドレスを格納するアドレスフィールド805も設けられている。隣接する個々のメモリセグメント760の最後のバイトが処理されると、リストから次のDFAギャザーポインタが読み出される。
DFAギャザーポインタ755自体は、64ビットの境界上に当然に揃えられるべきである。メインメモリ130、108内のDFAギャザーポインタ755が指すバイトは、必ずしも当然に揃えられなくてもよく、任意のバイト配置を有することができる。ギャザーモードでは、入力バイトの合計数は、DFAギャザーポインタ755のそれぞれにおける個々の長さフィールド810の総和である。
図15は、DFA命令610に応答してDFAスレッドエンジン405により生成される結果を格納する、例示的なDFA結果フォーマット850を示す。DFA結果フォーマット850は、可変サイズの結果を収容する。例えば、DFA結果850は、第1の結果ワード(すなわち、「RWORD_0」860)と、1つまたは複数の後続結果ワード(すなわち、「RWORD_1+」865)とを含み、後続ワード865は必要に応じて結果を収容するために設けられる。構造体の長さは、可変数のマーク付けされたノード505を走査するDFA命令610を収容するために可変であるが、最終的な長さは、DFA命令フィールドに設けられる上限によって制限されることがある(例えば、この例示的な実施形態では、IWORD2[最大結果]に上限が設けられる)。DFAユニット400はこれらの結果ワード860、865を、DFA命令610の処理中および処理後にメインメモリ130、108に書き込む。DFA結果850は、DFA命令610内に含まれる結果アドレス666を始点としてメインメモリ130、108に書き込まれる。各結果ワード860、865は、メインメモリ130、108内で当然に配置されるべきである。
なお、DFA結果850の第1の結果ワード860は、DFAユニット400によって2回以上書き込まれてもよい。第1の結果ワード860への最後の書込みのみが、有効な結果を含む。DFAユニット400は、第1の結果ワード860を複数回書き込むことができるが、結果ワード書込みビット861を設定できるのは最後の書込みのみである。すなわち、結果ワード書込みビット861は、DFAユニット400が他の全ての結果ワードを書き込むまで設定されない。DFAユニット400にDFA命令610を渡す前にまず結果ワード書込みビット861にゼロを書き込んでおくことによって、システムソフトウェアは、結果ワード書込みビット861をポーリングして、DFAユニット400がDFA命令610を完了した時点を判断することができる。結果ワード書込みビット861が設定されているときは、全体結果が存在する。
図16は、低遅延メモリのロード/格納命令870の例示的なフォーマットを示す。これらの命令870は、コア要求またはDFAスレッドエンジン要求に応答して発行されてもよい。ロード/格納命令870は、LLMコントローラ160により、プロセッサコア120によって生成されるDFA命令に応答して低遅延メモリ118を参照するために発行される。これらの低遅延メモリのロード/格納命令870は、ロード/格納を直接プロセッサコア120と低遅延メモリ118との間で開始することにおいて(図3)、典型的な汎用命令セットで与えられる一般的なロード/格納命令とは異なる。このタイプのアクセスの直接性は、場合によっては、プロセッサコア120の主レジスタファイル328(図3)と、レベル1データキャッシュ154、レベル2キャッシュメモリ130およびDRAM108(図4)を含むキャッシュコヒーレントメモリシステムとの間における、データをロードまたは格納するロード/格納命令とは異なる。例示的なこの実施形態では、これらのロード/格納命令870は、64ビットまたは36ビット命令のいずれであってもよい。プロセッサコア120が低遅延メモリバス158を使用して低遅延メモリ118に直接アクセスできるため、性能が向上する。これらの低遅延メモリ命令は、低遅延メモリ118におけるデータの検索/格納が、キャッシュコヒーレントメモリシステム154、130、108による他の方法で可能になる速度よりも高速で実行されることを可能にする。このようにして低遅延メモリ118にアクセスすれば、キャッシングを必要としない正規表現一致などのアプリケーションの性能を大幅に向上させることができる。例示的な低遅延メモリのロード/格納命令には、「DMTC2」命令(コプロセッサ2への倍移動(double move)を引き起こす)および「DMFC2」命令(コプロセッサ2からの倍移動を引き起こす)が含まれる。
図16に示すように、低遅延メモリのロード/格納命令870の例示的なフォーマットは、命令タイプフィールド875と、命令識別フィールド880と、主レジスタ識別フィールド885と、「impl」フィールド890とを含む。命令タイプフィールド875は、命令のタイプを示す値を格納する。例えば、命令タイプフィールド875に格納される値は、その命令が汎用命令ではなくコプロセッサ命令であることを示してもよい。命令識別フィールド880は、特定の命令タイプ(例えば、「へ移動(move to)」または「から移動(move from)」)を示す値を格納する。例えば、「へ移動」命令は、データが低遅延メモリ118からコアプロセッサの保持レジスタ330a、330b(図3)の一方に移動されることを示す。これに対して、「から移動」命令は、データが保持レジスタ330a、330bの一方から主レジスタファイル328内の1つのレジスタ(図3)へ移動されることを示す。したがって、この実施形態では、「へ移動」/「から移動」命令はそれぞれ、データが一度に1ワード移動することを可能にする(例えば、36ビットワードサイズを使用するメモリであれば、一度に36ビット)。主レジスタ識別フィールド885は、プロセッサコアの主レジスタファイル328内のアクセスされるべき特定のレジスタを表示する値を格納する。「impl」フィールド890は、操作コードと共に、コプロセッサの移動命令のタイプおよび特定の保持レジスタ330a、330bを表示する値を格納する。
保持レジスタ330の内容を主レジスタファイル328内のレジスタにロード(すなわち、DMF)するために、主レジスタ識別フィールド885の内容は、レジスタファイル328内の、保持レジスタ330に格納されているデータの格納先となるレジスタを特定する。以下は、その一例である。
GPR[rt]=LLM_DATA0<63:0> (1)
この例では、LLM_DATA0は特定の保持レジスタ330aを表し、GPRは主レジスタファイル328の汎用レジスタを指す。
この例では、LLM_DATA0は特定の保持レジスタ330aを表し、GPRは主レジスタファイル328の汎用レジスタを指す。
書込み(すなわち、「へ移動」)命令の場合、主レジスタ識別フィールド885は、低遅延メモリ118内の位置アドレスを格納する、レジスタファイル328内のレジスタを特定する。以下は、その一例である。
LLM_DATA0<63:0>=llmemory[rt] (2)
この例では、LLM_DATA0は保持レジスタ330aであり、llmemoryは低遅延メモリ118を指す。
この例では、LLM_DATA0は保持レジスタ330aであり、llmemoryは低遅延メモリ118を指す。
さらに例を挙げれば、保持レジスタ330aに低遅延メモリの位置命令の内容をロードする際には、以下のような低遅延メモリのロード命令(DMTC2)を使用することができる。
DMTC2,$5,0x0400 (3)
DMTC2,$5,0x0400 (3)
この例では、(i)命令タイプフィールド875は、命令が、保持レジスタ330に低遅延メモリ118からのデータをロードする「へ移動」命令であることを表す値「DMT」を含み、(ii)命令識別フィールド880は、それがコプロセッサ命令であることを示す値「C2」を含み、(iii)主レジスタ識別フィールド885は、主レジスタファイル328内の5番レジスタが低遅延メモリ118内の位置アドレスを保持することを示す値「$5」を含み、(iv)impl値フィールド890は、特定の保持レジスタ330を特定する値「0x0400」を含む(この値は定数であり、別の実施形態では異なる値であってもよい)。
同様に、データを保持レジスタ330から主レジスタファイル328に移動させる場合には、低遅延メモリの格納命令を使用することができる。例えば、以下のような低遅延メモリ格納命令を使用することもできる。
DMFC2,$6,0x0402 (4)
DMFC2,$6,0x0402 (4)
この例では、(i)命令タイプフィールド875は、コントローラ160が保持レジスタ330の内容を主レジスタファイル328内で指定されたレジスタに格納することを示す「から移動」型の命令を表す値「DMF」を含み、(ii)命令識別フィールド880は、それがやはりコプロセッサ命令であることを示す値「C2」を含み、(iii)主レジスタ識別フィールド885は、主レジスタファイル328内の6番レジスタが宛先レジスタであることを示す値「$6」を含み、impl値890の「0x0402」は、特定の保持レジスタ330を特定する(この場合もやはり、この値は定数であり、別の実施形態では異なる値であってもよい)。
上述の命令フォーマットは例示的なものであり、当業者であれば、命令フォーマットが一般的でないロード/格納命令を許容するいかなるフォーマットであってもよいことは理解されるはずである。
図17は、低遅延メモリDRAMワードを参照するために使用される例示的な低遅延メモリアドレスフォーマット900を示す。例えば、低遅延メモリアドレスフォーマット900は、表2で示されている「graph_ptr」に関連付けて使用されてもよい。低遅延メモリアドレスフォーマット900は、少なくともオフセットフィールド905と、複製フィールド910とを含む。オフセットフィールド905は、低遅延メモリにおけるアドレスを示す値を格納する。複製フィールド910は、複製係数を示す複製値を定義する。例示的な一実施形態では、低遅延メモリアドレスフォーマット900は64ビット(ビット0〜63まで)を含む。オフセットフィールド905は0〜29のビットで定義されてもよく、複製フィールド910は32〜34のビットで定義されてもよい。アドレスフォーマット900の残りのフィールドは、他の目的のために予約されてもよい。
例示として、複製値ゼロ(すなわち、複製フィールド=00)は、複製が存在しないことを示す。複製なしは、低遅延メモリ118内に各ワードの出現が1回のみ格納されていることを意味する。これは、複製係数「1」にも反映される(すなわち、そのワードは低遅延メモリ118内に1回出現する)。この例の説明を続けると、複製値1(すなわち、複製フィールド=「01」)は、複製が存在することと、低遅延メモリ118内の各ワードにはそのワードのコピーが1つ伴うこととを示す。これは、複製係数「2」にも反映される(すなわち、そのワードは低遅延メモリ118内に2回出現する)。同様に、複製値2および6(すなわち、複製フィールド=それぞれ「10」および「110」)は、複製が存在することと、低遅延メモリ118内の各ワードにはそのワードのコピーがそれぞれ3つおよび7つ伴うこととを示す。これらの値は、複製係数「4」および「8」にも反映される(すなわち、そのワードは低遅延メモリ118内にそれぞれ4回および8回出現する)。
オフセットフィールド905に格納される値は、典型的には、メモリワードを示す「バイト」アドレスである。例えば、オフセット<29:2>は、36ビットのメモリワードを特定するバイトアドレスである。オフセット<29:2>という表記法は、メモリアドレス900のオフセットフィールド905のビット2から29までに含まれるビット値を意味する。特定の実施形態においては、低遅延メモリコントローラ160の最小細分性は36ビットワードである。したがって、順次的な36ビットワードの差は4バイトになる。これは、オフセットフィールド905内の4の差分と解釈される(すなわち、バイトアドレスにおける差分4は、メモリに格納されるバイト数で4バイトの差を示す)。好ましくは、メモリアドレス参照は「当然に揃えられる」。この当然に揃えることは、オフセットフィールド905の2つの最下位ビットをゼロに設定する(すなわち、オフセット<1:0>=00)ことによって達成することができる。
複製値910がゼロに設定される場合には、オフセットの解釈は簡単であり、連続するオフセット値が連続する低遅延メモリ位置を参照する。しかし、複製値が非ゼロであるときは、オフセットの解釈は異なる。例示的なメモリアドレスフォーマット900を使用して異なる複製値の単一のワードを格納するために使われる低遅延メモリの位置を、表4に示す。
アドレス構造体は、ワードの複製コピーが隣接するメモリ位置に格納されることを保証する。例えば、DFAユニット400が、
(i)関連の複製値2(複製係数4)、および、
(ii)オフセット<29:0>値=12、
を有する格納(例えば、36ビットワードの格納)を処理する場合、コントローラ160は、この36ビットデータワードの1つのコピーを低遅延メモリ118へオフセット48、52、56および60のそれぞれで格納する。例示的な複製値2による表4の第3行目を参照すると、まず、オフセット値(すなわち、12)に前出の係数4を乗じることによって(すなわち、オフセット<27:0>*4)暫定値が決定され、暫定値48が得られる。次に、低遅延メモリのオフセットが、暫定値48に前出の値0、4、8および12を加えることによって決定され、結果、オフセット48、52、56および60が得られる。最終的なオフセットアドレスは値4だけ相違し、これらが隣接する4バイトのメモリワードであることを意味する。
(i)関連の複製値2(複製係数4)、および、
(ii)オフセット<29:0>値=12、
を有する格納(例えば、36ビットワードの格納)を処理する場合、コントローラ160は、この36ビットデータワードの1つのコピーを低遅延メモリ118へオフセット48、52、56および60のそれぞれで格納する。例示的な複製値2による表4の第3行目を参照すると、まず、オフセット値(すなわち、12)に前出の係数4を乗じることによって(すなわち、オフセット<27:0>*4)暫定値が決定され、暫定値48が得られる。次に、低遅延メモリのオフセットが、暫定値48に前出の値0、4、8および12を加えることによって決定され、結果、オフセット48、52、56および60が得られる。最終的なオフセットアドレスは値4だけ相違し、これらが隣接する4バイトのメモリワードであることを意味する。
4バイトを例にして説明を続けると、次のオフセット<29:0>値は、12+4=16になる。同じく、複製値が2であれば、最終的なオフセットは、表4に従って、64、68、72、76になる。この場合も、複製は隣接しており、先行するオフセット値(すなわち、12)の複製とも隣接する。
これより、このアドレス構造体を使用すれば、順次的な36ビットワードは、ワードが複製される場合でも、オフセットフィールド905において常に差分が4になる。これにより、ソフトウェア面で低遅延メモリDRAMのアドレス指定は、複製係数に関わりなく極めて類似的なものになり得る。これは、異なる複製値を有するワードは同時に使用されないことを仮定する。
特定の実施形態においては、各プロセッサコア120は、図16を参照して先に説明したDMTC2およびDMFC2命令などの特別な命令を使用して低遅延メモリ118を参照する。これらの命令は、64ビットまたは36ビットのいずれかのロード/格納を開始する。この場合もやはり、正しい演算を保証するために、アドレスは当然に揃えられるべきである。したがって、36ビットのロード/格納では、オフセットフィールド905の最初の2つの最下位ビット(すなわち、オフセット<1:0>)はゼロとなるはずである。同様に、64ビットのロード/格納の場合も、オフセットフィールド905の最初の3つの最下位ビット(すなわち、オフセット<2:0>)はゼロであるべきである。異なるワードサイズに関しても、当然に揃えることを保証するために同一概念を適用することができる(例えば、128ビットのロード/格納では、最初の4ビット=0になる、他)。
図18Aおよび18Bはそれぞれ、36ビットおよび64ビットのロード/格納に関する例示的な低遅延メモリ118およびコアプロセッサレジスタフォーマットを示す。図は、格納されたワードが複製されていない場合の転送を表し、単一の低遅延メモリワード960がコアレジスタ950に対応する。格納されたワードが複製さている場合の転送では、低遅延メモリ118内に各ワードの対応する数のコピー(すなわち、2つ、4つまたは8つのコピー)が存在することになる。コピーは追加の低遅延メモリワード960によって表され、複製コピー毎に1つのメモリワード960が存在する。
図18Aに示すように、36ビットのロード/格納は、単一の36ビット格納ワード960を参照する。格納の場合、DFAユニット400のハードウェアは、データフィールド655を表すソースレジスタの下位の36データビット(すなわち、データ<35:0>)を上記36ビット格納メモリワード960に直接書き込む。コアレジスタ950は、「XO」ビットと称するシングルビットとして示されるパリティフィールド955も含む。一般に、XOビット955は、全36格納ビットの排他的OR値を格納するように構成される。格納の場合、XOビットはゼロでなければならない。ロードの場合、DFAハードウェアは、格納される36ビットワードを宛先レジスタの下位の36ビット(すなわち、データ<35:0>)に置き、またXOビットを全36格納ビットの排他的ORに設定する。特定の実施形態においては、36ビットのロード/格納の場合、DFAユニット400はパリティ、または他の任意のエラーチェックまたは訂正コードを直接サポートしない。したがって、エラーの検出および/または訂正はソフトウェアに依存せざるを得ない。例えば、ソフトウェアは、必要に応じて、何らかの利用可能な未加工の36ビットを使用してパリティまたはエラー訂正符号(ECC)を実行してもよい。XOビット955は、また、任意のソフトウェアエラー検出および/または訂正に関連して使用されてもよい。XOビット955が使用される場合、これは、ソフトウェアが36ビットのうちの1つに他の35ビットの偶数パリティを書き込むとパリティエラーが存在することを示すため、読み出し動作におけるソフトウェアベースのパリティチェックを速くすることができる。
次に、図18Bを参照すると、64ビットの低遅延メモリDRAMロード/格納オペレーションは連続する2つの36ビット格納ワード965、970を参照する。格納ワード965、970はそれぞれ、個々のデータフィールドを含む。例えば、第1の36ビット格納ワード965は単一のデータフィールド975(すなわち、データ<35:0>)を含み、第2の36ビット格納ワード970も単一のデータフィールド980(すなわち、データ<36:36>を含む。しかし、特定の実施形態においては、第2の格納ワード970の最上位ビットはエラー検出および/または訂正に使用されてもよい。
例えば、上記最上位ビットは、8ビットのSECDED ECCコードを格納するためのECCフィールド985と称することができる。36ビットのロード/格納動作とは異なり、DFAユニット400は、64ビット格納に応答してECCコードを自動的に生成し、64ビットロードにおけるデータを自動的にチェックして訂正する。特定の実施形態においては、64ビットワードの各36ビットワード965、970は別々に複製される。したがって、複製値が非ゼロであるとき、2つの格納ワード965、970は連続する(複製されない)低遅延メモリ位置に存在しなくてもよい。
特定の実施形態においては、複製は、格納データ構造体ごとに判断される。したがって、第1のデータ構造体は複製係数2を有してもよく、第2のデータ構造体が異なる複製係数4を有してもよい。複製は、システムソフトウェアによりシステムの初期設定時に判断されてもよい。したがって、システムソフトウェアは、最初の段階で、低遅延メモリ118に1つまたは複数のデータ構造体(例えば、DFAグラフ)を格納する。上記複数のデータ構造体の各データ構造体は、必要に応じて複製される。特定のデータ構造体が複製されるか否か、および関連の複製が何であるかは、性能パラメータに従って判断することができる。例えば、ある特定のデータ構造体が他よりも頻繁にアクセスされれば、そのデータ構造体は低遅延メモリ118においてより高い度合いで複製されてもよい。同様に、ある特定のデータ構造体のアクセス頻度が比較的低ければ、そのデータ構造は低遅延メモリ118においてより低い度合いで複製されてもよく、またおそらくは、全く複製されない。さらに、各格納データ構造体の複製はユーザによって事前に決定されてもよい。
データ構造体が複製される場合、そのデータ構造体への全ての書込みは、複製される全てのデータ構造体に書き込まれる。さらに、もしくは代替として、格納されて複製されたデータ構造体からの読出しは、複製されたデータ構造体の、独立して格納された任意の構成に向けられてもよい。したがって、要求されたデータ構造体を格納しているメモリバンクが、あるアクセス要求に対応して使用中であれば、DFAスレッドエンジン405は、本発明の原理に従って、アクセス要求を、要求されたデータ構造体の格納された複製値を含む他のメモリバンクの1つに向けてもよい。
コア120は、格納されたデータ構造体の記録を後の使用のために保持する。例えば、システムソフトウェアは、DFA命令を生成する際に、格納されたデータ構造体の記録にアクセスする。したがって、記録は、少なくとも格納されたデータ構造体のメモリ位置と、そのデータ構造体が当初から格納されている対応する複製物とを含む。特定の実施形態においては、システムソフトウェアは、メインメモリに、先に格納されている各データ構造体および関連の複製係数の開始メモリ位置を含むリストを格納するためのルックアップテーブルを保持する。このリストは、データ構造体(例えば、DFAグラフ)が初めて生成された時点で生成されても、低遅延メモリ118内でコンパイルされて格納されてもよい。先に述べたように、DFA命令は、特定のDFAグラフおよび任意の利用可能な複製を特定する。
例示的な一実施形態では、コア120上で実行されるシステムソフトウェアは、1つまたは複数のDFA命令をメインメモリ130、108内に置かれるDFA命令待ち行列に書き込む。ドアベルレジスタ420は更新され、DFA命令待ち行列内に残っているDFA命令の正確なカウント数を保持する。DFAユニット400はドアベルレジスタ420をチェックし、1以上のドアベルカウント数を観測すると、DFA命令待ち行列における次の命令をフェッチする。DFAユニット400は、フェッチされた命令をDFAユニットのローカル命令待ち行列またはバッファ415に一時的に格納する。同一のDFAスレッドエンジン405のうちの利用可能な1つは、ローカル命令バッファ415に格納されている次の命令を読み出し、その命令の処理を開始する。
図10に関連して述べたとおり、DFA命令は、先に格納されているDFAグラフのうちの選択可能な1つの開始アドレスに対するメモリ参照を特定する。命令は、関連の複製も特定し、選択されたDFAグラフの複製が低遅延メモリ118内で幾つ利用可能であるかを示す。DFAスレッドエンジン405は、DFA命令によって処理されるパケットデータの第1のバイトをフェッチする。このバイトは、同じくDFA命令によって特定されるアドレスでメインメモリ130、108からフェッチされる。(DFAスレッドエンジン405は、入力パケットデータのバイト毎に低遅延メモリ参照を生成する。)DFAスレッドエンジン405は、入力されるバイトに応答してLLMコントローラ160から低遅延メモリアクセスを要求し、この要求もまた複製の数を指定する。
LLMコントローラ160は、まず要求されたDFAグラフを格納している利用可能なメモリバンク432を全て識別することによって、利用可能な複製のうちのいずれを使用するかを決定する。例えば、LLMコントローラ160は、DFAコンフィグレーションレジスタにおける既に格納された値からインタフェースの数を決定する。インタフェースの数およびDFA命令からの複製値およびオフセット値を有するLLMコントローラ160は、表1に示したたようにバンクを判断する。
メモリアクセス命令が格納命令であれば、関連データは、識別されたバンクの全てに格納(すなわち、複製)される。しかし、メモリアクセス要求がロード命令であれば、LLMコントローラ160はいずれのメモリバンク432を使用するかを決定する。LLMコントローラ160は、次にサーモメータ論理440を使用して、特定されたメモリバンク432に関連づけられる待ち行列435の深さを読み取る。メモリバンク432は待機命令の数が最も少ないものが選択され、LLMコントローラ160は、図18Aおよび18Bに関連して述べたとおり、対応する低レベルのメモリアクセス要求を生成する。
本出願は、2004年9月10日に出願された米国仮特許出願第60/609,211号、2004年12月28日に出願された「Direct Access to Low-Latency Memory」と題する米国特許出願第11/024,002号、2005年4月8日に出願された「Deterministic Finite Automata (DFA) Processing」と題する米国仮特許出願第60/669,672号および同じく2005年4月8日に出願された「Deterministic Finite Automata (DFA) Instruction」と題する米国仮特許出願第60/669,603号に関連するものである。上述の出願の全内容は参照により本明細書に引用したものとする。
以上、本発明をその好ましい実施形態に関連して詳細には示しかつ説明してきたが、当業者には、添付の請求の範囲に包含される本発明の範囲を逸脱することなく形態および細部に様々な変更を実行できることが理解されるであろう。
118 低遅延メモリ
160 アクセスコントローラ
432 メモリバンク
160 アクセスコントローラ
432 メモリバンク
Claims (21)
- 複数のメモリバンクを有する低遅延メモリを管理する方法であって、
この複数のメモリバンクへのデータ構造体の既定数の複製の格納要求を受信する工程と、
前記格納要求に応答して、前記既定数の複製のそれぞれを、前記複数のメモリバンクのうちのそれぞれ1つに格納する工程とを備えた低遅延メモリ管理方法。 - 請求項1において、前記格納要求が、前記既定数を示す複製係数を含む低遅延メモリ管理方法。
- 請求項2において、前記複製係数が2の累乗である低遅延メモリ管理方法。
- 請求項1において、前記データ構造体が決定性有限オートマトンである低遅延メモリ管理方法。
- 請求項1において、前記複数のメモリバンクのそれぞれは複数の低遅延メモリインタフェースのうちの1つを使用してアクセス可能であり、前記データ構造体の複製のうちの少なくともいくつかは異なる低遅延インタフェースを用いてアクセス可能である低遅延メモリ管理方法。
- 請求項1において、さらに、
前記格納されたデータ構造体へのアクセス要求を受信する工程と、
前記アクセス要求に応答して、前記複数のメモリバンクのうち、前記要求されたデータ構造体の複製を格納しているメモリバンクを1つ選択する工程と、
前記選択されたメモリバンクにアクセスする工程とを備えた低遅延メモリ管理方法。 - 請求項6において、前記メモリバンクを選択する工程が、
前記データ構造体の複製を格納する前記複数のメモリバンクうちの各メモリバンクの使用を判断する工程と、
前記判断された使用に対応して、前記複数のメモリバンクのうちの1つを選択する工程とを備えた低遅延メモリ管理方法。 - 請求項7において、前記使用を判断する工程が、複数の待ち行列を比較する工程を備え、各待ち行列は前記複数のメモリバンクのうちのそれぞれ1つに関連づけられている低遅延メモリ管理方法。
- 請求項1において、前記低遅延メモリが、ダイナミックランダムアクセスメモリ(DRAM)、低遅延ダイナミックランダムアクセスメモリ(RLDRAM)、同期ランダムアクセスメモリ(SRAM)、高速サイクルランダムアクセスメモリ(FCRAM)およびこれらの組合せより成るグループから選択される低遅延メモリ管理方法。
- 低遅延メモリにアクセスするように構成された第1のメモリインタフェースであって、低遅延メモリは複数のメモリバンクを有する第1のメモリインタフェースと、
メインメモリにアクセスするように構成されたメインメモリインタフェースと、
前記メインメモリインタフェースに結合された命令ユニットであって、データ構造体の選択可能な数の複製を前記複数のメモリバンクのうちの2つ以上のメモリバンクに格納する要求を受信する命令ユニットと、
前記命令ユニットに結合された複数のスレッドエンジンであって、各スレッドエンジンは、前記複数のメモリバンクの選択可能な1つに関連づけられ、
前記命令ユニットに結合され、前記第1のメモリインタフェースと前記複数のスレッドエンジンの間に結合された低遅延メモリコントローラであって、前記低遅延メモリコントローラは、データ構造体の前記選択可能な数の複製のそれぞれを、前記複数のメモリバンクのうちのそれぞれ1つに格納する低遅延メモリコントローラとを備えた低遅延メモリ管理コントローラ。 - 請求項10において、前記プロセッサがマルチコアプロセッサを備えている低遅延メモリ管理コントローラ。
- 請求項10において、前記選択可能な数の複製を格納する要求が、この選択可能な数を示す複製係数を含む低遅延メモリ管理コントローラ。
- 請求項12において、前記複製係数が2の累乗である低遅延メモリ管理コントローラ。
- 請求項10において、前記低遅延メモリコントローラが複数の入力待ち行列を備え、入力待ち行列の1つが前記複数のメモリバンクのうちのそれぞれ1つに対するものであり、前記低遅延メモリコントローラは、決定値に応じて前記複数のメモリバンクのうちの1つを選択する低遅延メモリ管理コントローラ。
- 請求項14において、前記決定値が、前記格納されるデータ構造体の使用に関するものである低遅延メモリ管理コントローラ。
- 請求項14において、前記低遅延メモリコントローラが、前記複数の入力待ち行列の異なる待ち行列間の相対的な利用度を求めるサーモメータユニットを有し、各入力待ち行列は前記複数のメモリバンクのうちのそれぞれ1つに関連づけられている低遅延メモリ管理コントローラ。
- 請求項10において、前記データ構造体が決定性有限オートマトンを備えた低遅延メモリ管理コントローラ。
- 請求項10において、前記低遅延メモリが、ダイナミックランダムアクセスメモリ(DRAM)、低遅延ダイナミックランダムアクセスメモリ(RLDRAM)、同期ランダムアクセスメモリ(SRAM)、高速サイクルランダムアクセスメモリ(FCRAM)およびこれらの組合せより成るグループから選択される低遅延メモリ管理コントローラ。
- 請求項10において、前記複数のメモリバンクのうちのいくつかが第1の低遅延メモリインタフェースを使用してアクセス可能であり、前記複数のメモリバンクのうちのその他は第2の低遅延メモリインタフェースを使用してアクセス可能であり、前記データ構造体の複製のうちの少なくともいくつかは前記第1および第2の低遅延メモリインタフェースのいずれかを使用してアクセス可能である低遅延メモリ管理コントローラ。
- 請求項10において、さらに、プロセッサインタフェースを備え、このインタフェースを介してプロセッサと通信する低遅延メモリ管理コントローラ。
- 複数のメモリバンクへのデータ構造体の既定数の複製の格納要求を受信する手段と、
前記格納要求に応答して、前記既定数の複製のそれぞれを、前記複数のメモリバンクのうちのそれぞれ1つに格納する手段とを備えた低遅延メモリのアクセスコントローラ。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US60921104P | 2004-09-10 | 2004-09-10 | |
US66965505P | 2005-04-08 | 2005-04-08 | |
PCT/US2005/031803 WO2006031551A2 (en) | 2004-09-10 | 2005-09-09 | Selective replication of data structure |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008512786A true JP2008512786A (ja) | 2008-04-24 |
Family
ID=36060537
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007531290A Withdrawn JP2008512786A (ja) | 2004-09-10 | 2005-09-09 | データ構造の選択的複製方法および装置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7558925B2 (ja) |
EP (1) | EP1794979B1 (ja) |
JP (1) | JP2008512786A (ja) |
DK (1) | DK1794979T3 (ja) |
WO (1) | WO2006031551A2 (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011118900A (ja) * | 2009-11-30 | 2011-06-16 | Internatl Business Mach Corp <Ibm> | システムの立ち上げ時間を早めるための方法、装置およびコンピュータ・プログラム |
JP2019511156A (ja) * | 2016-02-08 | 2019-04-18 | クリプトゾーン ノース アメリカ, インコーポレイテッド | ファイアウォールによる保護ネットワーク装置 |
US10474631B2 (en) | 2009-06-26 | 2019-11-12 | Hewlett Packard Enterprise Company | Method and apparatus for content derived data placement in memory |
US10541971B2 (en) | 2016-04-12 | 2020-01-21 | Cryptzone North America, Inc. | Systems and methods for protecting network devices by a firewall |
US10938785B2 (en) | 2014-10-06 | 2021-03-02 | Cryptzone North America, Inc. | Multi-tunneling virtual network adapter |
US11876781B2 (en) | 2016-02-08 | 2024-01-16 | Cryptzone North America, Inc. | Protecting network devices by a firewall |
Families Citing this family (104)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8095508B2 (en) | 2000-04-07 | 2012-01-10 | Washington University | Intelligent data storage and processing using FPGA devices |
US7596139B2 (en) | 2000-11-17 | 2009-09-29 | Foundry Networks, Inc. | Backplane interface adapter with error control and redundant fabric |
US7236490B2 (en) * | 2000-11-17 | 2007-06-26 | Foundry Networks, Inc. | Backplane interface adapter |
US20090006659A1 (en) * | 2001-10-19 | 2009-01-01 | Collins Jack M | Advanced mezzanine card for digital network data inspection |
US7716330B2 (en) * | 2001-10-19 | 2010-05-11 | Global Velocity, Inc. | System and method for controlling transmission of data packets over an information network |
US7187687B1 (en) * | 2002-05-06 | 2007-03-06 | Foundry Networks, Inc. | Pipeline method and system for switching packets |
US7649885B1 (en) | 2002-05-06 | 2010-01-19 | Foundry Networks, Inc. | Network routing system for enhanced efficiency and monitoring capability |
US7266117B1 (en) | 2002-05-06 | 2007-09-04 | Foundry Networks, Inc. | System architecture for very fast ethernet blade |
US7468975B1 (en) * | 2002-05-06 | 2008-12-23 | Foundry Networks, Inc. | Flexible method for processing data packets in a network routing system for enhanced efficiency and monitoring capability |
US20120155466A1 (en) * | 2002-05-06 | 2012-06-21 | Ian Edward Davis | Method and apparatus for efficiently processing data packets in a computer network |
US20090279558A1 (en) * | 2002-05-06 | 2009-11-12 | Ian Edward Davis | Network routing apparatus for enhanced efficiency and monitoring capability |
US6901072B1 (en) | 2003-05-15 | 2005-05-31 | Foundry Networks, Inc. | System and method for high speed packet transmission implementing dual transmit and receive pipelines |
CA2836758C (en) | 2003-05-23 | 2017-06-27 | Roger D. Chamberlain | Intelligent data processing system and method using fpga devices |
US10572824B2 (en) | 2003-05-23 | 2020-02-25 | Ip Reservoir, Llc | System and method for low latency multi-functional pipeline with correlation logic and selectively activated/deactivated pipelined data processing engines |
US7602785B2 (en) * | 2004-02-09 | 2009-10-13 | Washington University | Method and system for performing longest prefix matching for network address lookup using bloom filters |
US7817659B2 (en) * | 2004-03-26 | 2010-10-19 | Foundry Networks, Llc | Method and apparatus for aggregating input data streams |
US8730961B1 (en) | 2004-04-26 | 2014-05-20 | Foundry Networks, Llc | System and method for optimizing router lookup |
US7941585B2 (en) | 2004-09-10 | 2011-05-10 | Cavium Networks, Inc. | Local scratchpad and data caching system |
US8560475B2 (en) | 2004-09-10 | 2013-10-15 | Cavium, Inc. | Content search mechanism that uses a deterministic finite automata (DFA) graph, a DFA state machine, and a walker process |
US8392590B2 (en) * | 2004-09-10 | 2013-03-05 | Cavium, Inc. | Deterministic finite automata (DFA) processing |
US8301788B2 (en) * | 2004-09-10 | 2012-10-30 | Cavium, Inc. | Deterministic finite automata (DFA) instruction |
US7594081B2 (en) * | 2004-09-10 | 2009-09-22 | Cavium Networks, Inc. | Direct access to low-latency memory |
US7657703B1 (en) | 2004-10-29 | 2010-02-02 | Foundry Networks, Inc. | Double density content addressable memory (CAM) lookup scheme |
US7702629B2 (en) | 2005-12-02 | 2010-04-20 | Exegy Incorporated | Method and device for high performance regular expression pattern matching |
US8448162B2 (en) | 2005-12-28 | 2013-05-21 | Foundry Networks, Llc | Hitless software upgrades |
US7954114B2 (en) | 2006-01-26 | 2011-05-31 | Exegy Incorporated | Firmware socket module for FPGA-based pipeline processing |
US8379841B2 (en) | 2006-03-23 | 2013-02-19 | Exegy Incorporated | Method and system for high throughput blockwise independent encryption/decryption |
US20070288690A1 (en) * | 2006-06-13 | 2007-12-13 | Foundry Networks, Inc. | High bandwidth, high capacity look-up table implementation in dynamic random access memory |
US7921046B2 (en) | 2006-06-19 | 2011-04-05 | Exegy Incorporated | High speed processing of financial information using FPGA devices |
US7903654B2 (en) * | 2006-08-22 | 2011-03-08 | Foundry Networks, Llc | System and method for ECMP load sharing |
US8326819B2 (en) | 2006-11-13 | 2012-12-04 | Exegy Incorporated | Method and system for high performance data metatagging and data indexing using coprocessors |
US8005806B2 (en) * | 2006-11-15 | 2011-08-23 | Yahoo! Inc. | System and method for information retrieval using context information |
US8056007B2 (en) * | 2006-11-15 | 2011-11-08 | Yahoo! Inc. | System and method for recognizing and storing information and associated context |
US8522257B2 (en) * | 2006-11-15 | 2013-08-27 | Yahoo! Inc. | System and method for context information retrieval |
US8238255B2 (en) | 2006-11-22 | 2012-08-07 | Foundry Networks, Llc | Recovering from failures without impact on data traffic in a shared bus architecture |
US7890692B2 (en) * | 2007-08-17 | 2011-02-15 | Pandya Ashish A | FSA context switch architecture for programmable intelligent search memory |
US7996348B2 (en) * | 2006-12-08 | 2011-08-09 | Pandya Ashish A | 100GBPS security and search architecture using programmable intelligent search memory (PRISM) that comprises one or more bit interval counters |
WO2008073824A1 (en) * | 2006-12-08 | 2008-06-19 | Pandya Ashish A | Dynamic programmable intelligent search memory |
US9141557B2 (en) | 2006-12-08 | 2015-09-22 | Ashish A. Pandya | Dynamic random access memory (DRAM) that comprises a programmable intelligent search memory (PRISM) and a cryptography processing engine |
US7899978B2 (en) * | 2006-12-08 | 2011-03-01 | Pandya Ashish A | Dynamic programmable intelligent search memory |
US20110029549A1 (en) * | 2006-12-08 | 2011-02-03 | Pandya Ashish A | Signature search architecture for programmable intelligent search memory |
US8185524B2 (en) * | 2006-12-22 | 2012-05-22 | Yahoo! Inc. | Method and system for locating events in-context |
US7978614B2 (en) * | 2007-01-11 | 2011-07-12 | Foundry Network, LLC | Techniques for detecting non-receipt of fault detection protocol packets |
US7962434B2 (en) * | 2007-02-15 | 2011-06-14 | Wisconsin Alumni Research Foundation | Extended finite state automata and systems and methods for recognizing patterns in a data stream using extended finite state automata |
US8327057B1 (en) * | 2007-04-16 | 2012-12-04 | Juniper Networks, Inc. | Ordering write bursts to memory |
US7904961B2 (en) * | 2007-04-20 | 2011-03-08 | Juniper Networks, Inc. | Network attack detection using partial deterministic finite automaton pattern matching |
US9021582B2 (en) * | 2007-04-24 | 2015-04-28 | Juniper Networks, Inc. | Parallelized pattern matching using non-deterministic finite automata |
US8037399B2 (en) * | 2007-07-18 | 2011-10-11 | Foundry Networks, Llc | Techniques for segmented CRC design in high speed networks |
US8271859B2 (en) * | 2007-07-18 | 2012-09-18 | Foundry Networks Llc | Segmented CRC design in high speed networks |
WO2009029842A1 (en) | 2007-08-31 | 2009-03-05 | Exegy Incorporated | Method and apparatus for hardware-accelerated encryption/decryption |
US8509236B2 (en) | 2007-09-26 | 2013-08-13 | Foundry Networks, Llc | Techniques for selecting paths and/or trunk ports for forwarding traffic flows |
US8819217B2 (en) * | 2007-11-01 | 2014-08-26 | Cavium, Inc. | Intelligent graph walking |
US8086609B2 (en) * | 2007-11-01 | 2011-12-27 | Cavium, Inc. | Graph caching |
US8180803B2 (en) * | 2007-11-27 | 2012-05-15 | Cavium, Inc. | Deterministic finite automata (DFA) graph compression |
US7949683B2 (en) * | 2007-11-27 | 2011-05-24 | Cavium Networks, Inc. | Method and apparatus for traversing a compressed deterministic finite automata (DFA) graph |
US8374986B2 (en) | 2008-05-15 | 2013-02-12 | Exegy Incorporated | Method and system for accelerated stream processing |
US8176300B2 (en) * | 2008-08-25 | 2012-05-08 | Cavium, Inc. | Method and apparatus for content based searching |
JP5294761B2 (ja) * | 2008-08-29 | 2013-09-18 | パナソニック株式会社 | セキュア通信装置、セキュア通信方法及びプログラム |
US8612381B2 (en) * | 2008-09-12 | 2013-12-17 | International Business Machines Corporation | Enhanced synchronization framework providing improved sync granularity |
US8473523B2 (en) | 2008-10-31 | 2013-06-25 | Cavium, Inc. | Deterministic finite automata graph traversal with nodal bit mapping |
EP2370946A4 (en) | 2008-12-15 | 2012-05-30 | Exegy Inc | METHOD AND DEVICE FOR HIGH-SPEED PROCESSING OF FINANCIAL MARKET DEFINITIONS |
US20100192225A1 (en) * | 2009-01-28 | 2010-07-29 | Juniper Networks, Inc. | Efficient application identification with network devices |
US9461930B2 (en) | 2009-04-27 | 2016-10-04 | Intel Corporation | Modifying data streams without reordering in a multi-thread, multi-flow network processor |
US9444757B2 (en) | 2009-04-27 | 2016-09-13 | Intel Corporation | Dynamic configuration of processing modules in a network communications processor architecture |
US8505013B2 (en) * | 2010-03-12 | 2013-08-06 | Lsi Corporation | Reducing data read latency in a network communications processor architecture |
US8090901B2 (en) | 2009-05-14 | 2012-01-03 | Brocade Communications Systems, Inc. | TCAM management approach that minimize movements |
US20110016154A1 (en) * | 2009-07-17 | 2011-01-20 | Rajan Goyal | Profile-based and dictionary based graph caching |
US8599850B2 (en) | 2009-09-21 | 2013-12-03 | Brocade Communications Systems, Inc. | Provisioning single or multistage networks using ethernet service instances (ESIs) |
US9083740B1 (en) | 2009-09-28 | 2015-07-14 | Juniper Networks, Inc. | Network traffic pattern matching using adaptive deterministic finite automata |
US10037568B2 (en) | 2010-12-09 | 2018-07-31 | Ip Reservoir, Llc | Method and apparatus for managing orders in financial markets |
US8948032B1 (en) | 2011-03-07 | 2015-02-03 | Juniper Networks, Inc. | Pseudowire packet loss measurement |
US8665739B2 (en) * | 2011-03-16 | 2014-03-04 | Juniper Networks, Inc. | Packet loss measurement at service endpoints of a virtual private LAN service |
US8850125B2 (en) | 2011-10-25 | 2014-09-30 | Cavium, Inc. | System and method to provide non-coherent access to a coherent memory system |
US8560757B2 (en) | 2011-10-25 | 2013-10-15 | Cavium, Inc. | System and method to reduce memory access latencies using selective replication across multiple memory ports |
GB2495959A (en) | 2011-10-26 | 2013-05-01 | Imagination Tech Ltd | Multi-threaded memory access processor |
US9336000B2 (en) * | 2011-12-23 | 2016-05-10 | Intel Corporation | Instruction execution unit that broadcasts data values at different levels of granularity |
CN110471699B (zh) | 2011-12-23 | 2023-07-28 | 英特尔公司 | 用于指令处理的处理器核、方法和系统 |
US9280600B2 (en) * | 2012-03-20 | 2016-03-08 | Yissum Research Development Company Of The Hebrew University Of Jerusalem Ltd. | Method and system for decompression-free inspection of shared dictionary compressed traffic over HTTP |
US9990393B2 (en) | 2012-03-27 | 2018-06-05 | Ip Reservoir, Llc | Intelligent feed switch |
US10650452B2 (en) | 2012-03-27 | 2020-05-12 | Ip Reservoir, Llc | Offload processing of data packets |
US10121196B2 (en) | 2012-03-27 | 2018-11-06 | Ip Reservoir, Llc | Offload processing of data packets containing financial market data |
US11436672B2 (en) | 2012-03-27 | 2022-09-06 | Exegy Incorporated | Intelligent switch for processing financial market data |
US9411693B2 (en) | 2012-07-31 | 2016-08-09 | Empire Technology Development Llc | Directory error correction in multi-core processor architectures |
WO2014066416A2 (en) | 2012-10-23 | 2014-05-01 | Ip Reservoir, Llc | Method and apparatus for accelerated format translation of data in a delimited data format |
US9633097B2 (en) | 2012-10-23 | 2017-04-25 | Ip Reservoir, Llc | Method and apparatus for record pivoting to accelerate processing of data fields |
US9633093B2 (en) | 2012-10-23 | 2017-04-25 | Ip Reservoir, Llc | Method and apparatus for accelerated format translation of data in a delimited data format |
US9130819B2 (en) | 2013-03-15 | 2015-09-08 | Cavium, Inc. | Method and apparatus for scheduling rule matching in a processor |
US9112767B2 (en) * | 2013-03-15 | 2015-08-18 | Cavium, Inc. | Method and an accumulator scoreboard for out-of-order rule response handling |
US9729353B2 (en) * | 2014-01-09 | 2017-08-08 | Netronome Systems, Inc. | Command-driven NFA hardware engine that encodes multiple automatons |
US10362093B2 (en) * | 2014-01-09 | 2019-07-23 | Netronome Systems, Inc. | NFA completion notification |
US9397913B1 (en) | 2014-03-28 | 2016-07-19 | Juniper Networks, Inc. | Packet loss measurement in a distributed data plane |
GB2541577A (en) | 2014-04-23 | 2017-02-22 | Ip Reservoir Llc | Method and apparatus for accelerated data translation |
JP5917678B1 (ja) | 2014-12-26 | 2016-05-18 | 株式会社Pfu | 情報処理装置、方法およびプログラム |
US9916347B2 (en) | 2014-12-29 | 2018-03-13 | International Business Machines Corporation | Rapid searching and matching of data to a dynamic set of signatures facilitating parallel processing and hardware acceleration |
US10942943B2 (en) | 2015-10-29 | 2021-03-09 | Ip Reservoir, Llc | Dynamic field data translation to support high performance stream data processing |
EP3560135A4 (en) | 2016-12-22 | 2020-08-05 | IP Reservoir, LLC | PIPELINES INTENDED FOR AUTOMATIC ACCELERATED LEARNING BY EQUIPMENT |
US11093218B2 (en) * | 2017-07-14 | 2021-08-17 | Microsoft Technology Licensing, Llc | Dynamic pattern matching code generation |
US11095626B2 (en) | 2018-09-26 | 2021-08-17 | Marvell Asia Pte, Ltd. | Secure in-line received network packet processing |
US11038856B2 (en) * | 2018-09-26 | 2021-06-15 | Marvell Asia Pte, Ltd. | Secure in-line network packet transmittal |
KR20210042192A (ko) | 2019-10-08 | 2021-04-19 | 삼성전자주식회사 | 반도체 메모리 장치, 전자 장치, 및 그것의 설정 방법 |
CN111753065B (zh) * | 2020-03-27 | 2024-09-24 | 北京沃东天骏信息技术有限公司 | 请求响应方法、系统、计算机系统和可读存储介质 |
US11176043B2 (en) * | 2020-04-02 | 2021-11-16 | International Business Machines Corporation | Distributed memory-augmented neural network architecture |
KR20220018351A (ko) * | 2020-08-06 | 2022-02-15 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러 및 이의 동작 방법 |
US20230281121A1 (en) * | 2022-03-01 | 2023-09-07 | International Business Machines Corporation | Increased garbage collection granularity for non-volatile memory |
Family Cites Families (76)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4415970A (en) | 1980-11-14 | 1983-11-15 | Sperry Corporation | Cache/disk subsystem with load equalization |
JPS5969826A (ja) | 1982-10-15 | 1984-04-20 | Hitachi Ltd | バツフア制御方式 |
US4755930A (en) | 1985-06-27 | 1988-07-05 | Encore Computer Corporation | Hierarchical cache memory system and method |
US5091846A (en) | 1986-10-03 | 1992-02-25 | Intergraph Corporation | Cache providing caching/non-caching write-through and copyback modes for virtual addresses and including bus snooping to maintain coherency |
US5155831A (en) | 1989-04-24 | 1992-10-13 | International Business Machines Corporation | Data processing system with fast queue store interposed between store-through caches and a main memory |
US5119485A (en) | 1989-05-15 | 1992-06-02 | Motorola, Inc. | Method for data bus snooping in a data processing system by selective concurrent read and invalidate cache operation |
US5404483A (en) | 1990-06-29 | 1995-04-04 | Digital Equipment Corporation | Processor and method for delaying the processing of cache coherency transactions during outstanding cache fills |
US5276852A (en) | 1990-10-01 | 1994-01-04 | Digital Equipment Corporation | Method and apparatus for controlling a processor bus used by multiple processor components during writeback cache transactions |
US6446164B1 (en) | 1991-06-27 | 2002-09-03 | Integrated Device Technology, Inc. | Test mode accessing of an internal cache memory |
US5408644A (en) | 1992-06-05 | 1995-04-18 | Compaq Computer Corporation | Method and apparatus for improving the performance of partial stripe operations in a disk array subsystem |
US5590368A (en) | 1993-03-31 | 1996-12-31 | Intel Corporation | Method and apparatus for dynamically expanding the pipeline of a microprocessor |
US5551006A (en) | 1993-09-30 | 1996-08-27 | Intel Corporation | Low cost writethrough cache coherency apparatus and method for computer systems without a cache supporting bus |
US5509129A (en) | 1993-11-30 | 1996-04-16 | Guttag; Karl M. | Long instruction word controlling plural independent processor operations |
US5623627A (en) | 1993-12-09 | 1997-04-22 | Advanced Micro Devices, Inc. | Computer memory architecture including a replacement cache |
US5754819A (en) | 1994-07-28 | 1998-05-19 | Sun Microsystems, Inc. | Low-latency memory indexing method and structure |
GB2292822A (en) | 1994-08-31 | 1996-03-06 | Hewlett Packard Co | Partitioned cache memory |
US5619680A (en) | 1994-11-25 | 1997-04-08 | Berkovich; Semyon | Methods and apparatus for concurrent execution of serial computing instructions using combinatorial architecture for program partitioning |
JPH08278916A (ja) | 1994-11-30 | 1996-10-22 | Hitachi Ltd | マルチチャネルメモリシステム、転送情報同期化方法及び信号転送回路 |
JP3872118B2 (ja) | 1995-03-20 | 2007-01-24 | 富士通株式会社 | キャッシュコヒーレンス装置 |
US5737547A (en) | 1995-06-07 | 1998-04-07 | Microunity Systems Engineering, Inc. | System for placing entries of an outstanding processor request into a free pool after the request is accepted by a corresponding peripheral device |
US5742840A (en) | 1995-08-16 | 1998-04-21 | Microunity Systems Engineering, Inc. | General purpose, multiple precision parallel operation, programmable media processor |
US6598136B1 (en) | 1995-10-06 | 2003-07-22 | National Semiconductor Corporation | Data transfer with highly granular cacheability control between memory and a scratchpad area |
JP3634379B2 (ja) | 1996-01-24 | 2005-03-30 | サン・マイクロシステムズ・インコーポレイテッド | スタックキャッシングのための方法及び装置 |
US6021473A (en) | 1996-08-27 | 2000-02-01 | Vlsi Technology, Inc. | Method and apparatus for maintaining coherency for data transaction of CPU and bus device utilizing selective flushing mechanism |
US5897656A (en) | 1996-09-16 | 1999-04-27 | Corollary, Inc. | System and method for maintaining memory coherency in a computer system having multiple system buses |
US5860158A (en) | 1996-11-15 | 1999-01-12 | Samsung Electronics Company, Ltd. | Cache control unit with a cache request transaction-oriented protocol |
US6134634A (en) | 1996-12-20 | 2000-10-17 | Texas Instruments Incorporated | Method and apparatus for preemptive cache write-back |
JP3849951B2 (ja) | 1997-02-27 | 2006-11-22 | 株式会社日立製作所 | 主記憶共有型マルチプロセッサ |
US5991855A (en) | 1997-07-02 | 1999-11-23 | Micron Electronics, Inc. | Low latency memory read with concurrent pipe lined snoops |
US6018792A (en) | 1997-07-02 | 2000-01-25 | Micron Electronics, Inc. | Apparatus for performing a low latency memory read with concurrent snoop |
US6760833B1 (en) * | 1997-08-01 | 2004-07-06 | Micron Technology, Inc. | Split embedded DRAM processor |
US7076568B2 (en) | 1997-10-14 | 2006-07-11 | Alacritech, Inc. | Data communication apparatus for computer intelligent network interface card which transfers data between a network and a storage device according designated uniform datagram protocol socket |
US6070227A (en) | 1997-10-31 | 2000-05-30 | Hewlett-Packard Company | Main memory bank indexing scheme that optimizes consecutive page hits by linking main memory bank address organization to cache memory address organization |
US6026475A (en) | 1997-11-26 | 2000-02-15 | Digital Equipment Corporation | Method for dynamically remapping a virtual address to a physical address to maintain an even distribution of cache page addresses in a virtual address space |
US6560680B2 (en) | 1998-01-21 | 2003-05-06 | Micron Technology, Inc. | System controller with Integrated low latency memory using non-cacheable memory physically distinct from main memory |
JP3751741B2 (ja) | 1998-02-02 | 2006-03-01 | 日本電気株式会社 | マルチプロセッサシステム |
US6643745B1 (en) | 1998-03-31 | 2003-11-04 | Intel Corporation | Method and apparatus for prefetching data into cache |
EP1076856B9 (de) | 1998-05-07 | 2004-01-07 | Infineon Technologies AG | Cache-speicher für zweidimensionale datenfelder |
TW501011B (en) | 1998-05-08 | 2002-09-01 | Koninkl Philips Electronics Nv | Data processing circuit with cache memory |
US20010054137A1 (en) | 1998-06-10 | 2001-12-20 | Richard James Eickemeyer | Circuit arrangement and method with improved branch prefetching for short branch instructions |
US6483516B1 (en) | 1998-10-09 | 2002-11-19 | National Semiconductor Corporation | Hierarchical texture cache |
US6718457B2 (en) | 1998-12-03 | 2004-04-06 | Sun Microsystems, Inc. | Multiple-thread processor for threaded software applications |
US6526481B1 (en) | 1998-12-17 | 2003-02-25 | Massachusetts Institute Of Technology | Adaptive cache coherence protocols |
US6563818B1 (en) | 1999-05-20 | 2003-05-13 | Advanced Micro Devices, Inc. | Weighted round robin cell architecture |
US6279080B1 (en) | 1999-06-09 | 2001-08-21 | Ati International Srl | Method and apparatus for association of memory locations with a cache location having a flush buffer |
US6188624B1 (en) | 1999-07-12 | 2001-02-13 | Winbond Electronics Corporation | Low latency memory sensing circuits |
US6606704B1 (en) | 1999-08-31 | 2003-08-12 | Intel Corporation | Parallel multithreaded processor with plural microengines executing multiple threads each microengine having loadable microcode |
US6401175B1 (en) | 1999-10-01 | 2002-06-04 | Sun Microsystems, Inc. | Shared write buffer for use by multiple processor units |
US6438658B1 (en) | 2000-06-30 | 2002-08-20 | Intel Corporation | Fast invalidation scheme for caches |
US6654858B1 (en) | 2000-08-31 | 2003-11-25 | Hewlett-Packard Development Company, L.P. | Method for reducing directory writes and latency in a high performance, directory-based, coherency protocol |
US6665768B1 (en) * | 2000-10-12 | 2003-12-16 | Chipwrights Design, Inc. | Table look-up operation for SIMD processors with interleaved memory systems |
US6587920B2 (en) | 2000-11-30 | 2003-07-01 | Mosaid Technologies Incorporated | Method and apparatus for reducing latency in a memory system |
US6662275B2 (en) | 2001-02-12 | 2003-12-09 | International Business Machines Corporation | Efficient instruction cache coherency maintenance mechanism for scalable multiprocessor computer system with store-through data cache |
US6647456B1 (en) | 2001-02-23 | 2003-11-11 | Nvidia Corporation | High bandwidth-low latency memory controller |
US6725336B2 (en) | 2001-04-20 | 2004-04-20 | Sun Microsystems, Inc. | Dynamically allocated cache memory for a multi-processor unit |
US6785677B1 (en) | 2001-05-02 | 2004-08-31 | Unisys Corporation | Method for execution of query to search strings of characters that match pattern with a target string utilizing bit vector |
US7133971B2 (en) | 2003-11-21 | 2006-11-07 | International Business Machines Corporation | Cache with selective least frequently used or most frequently used cache line replacement |
GB2378779B (en) * | 2001-08-14 | 2005-02-02 | Advanced Risc Mach Ltd | Accessing memory units in a data processing apparatus |
US6877071B2 (en) | 2001-08-20 | 2005-04-05 | Technology Ip Holdings, Inc. | Multi-ported memory |
US20030110208A1 (en) | 2001-09-12 | 2003-06-12 | Raqia Networks, Inc. | Processing data across packet boundaries |
US6757784B2 (en) | 2001-09-28 | 2004-06-29 | Intel Corporation | Hiding refresh of memory and refresh-hidden memory |
US7072970B2 (en) | 2001-10-05 | 2006-07-04 | International Business Machines Corporation | Programmable network protocol handler architecture |
US7248585B2 (en) * | 2001-10-22 | 2007-07-24 | Sun Microsystems, Inc. | Method and apparatus for a packet classifier |
US6944731B2 (en) * | 2001-12-19 | 2005-09-13 | Agere Systems Inc. | Dynamic random access memory system with bank conflict avoidance feature |
US6789167B2 (en) * | 2002-03-06 | 2004-09-07 | Hewlett-Packard Development Company, L.P. | Method and apparatus for multi-core processor integrated circuit having functional elements configurable as core elements and as system device elements |
GB2388447B (en) | 2002-05-09 | 2005-07-27 | Sun Microsystems Inc | A computer system method and program product for performing a data access from low-level code |
US6970985B2 (en) | 2002-07-09 | 2005-11-29 | Bluerisc Inc. | Statically speculative memory accessing |
US20040059880A1 (en) | 2002-09-23 | 2004-03-25 | Bennett Brian R. | Low latency memory access method using unified queue mechanism |
US7093153B1 (en) | 2002-10-30 | 2006-08-15 | Advanced Micro Devices, Inc. | Method and apparatus for lowering bus clock frequency in a complex integrated data processing system |
US7055003B2 (en) | 2003-04-25 | 2006-05-30 | International Business Machines Corporation | Data cache scrub mechanism for large L2/L3 data cache structures |
US20050138276A1 (en) * | 2003-12-17 | 2005-06-23 | Intel Corporation | Methods and apparatus for high bandwidth random access using dynamic random access memory |
US20050138297A1 (en) | 2003-12-23 | 2005-06-23 | Intel Corporation | Register file cache |
US7380276B2 (en) | 2004-05-20 | 2008-05-27 | Intel Corporation | Processor extensions and software verification to support type-safe language environments running with untrusted code |
US7594081B2 (en) | 2004-09-10 | 2009-09-22 | Cavium Networks, Inc. | Direct access to low-latency memory |
US7941585B2 (en) | 2004-09-10 | 2011-05-10 | Cavium Networks, Inc. | Local scratchpad and data caching system |
US20060143396A1 (en) | 2004-12-29 | 2006-06-29 | Mason Cabot | Method for programmer-controlled cache line eviction policy |
-
2005
- 2005-09-09 WO PCT/US2005/031803 patent/WO2006031551A2/en active Application Filing
- 2005-09-09 DK DK05795143.6T patent/DK1794979T3/en active
- 2005-09-09 EP EP05795143.6A patent/EP1794979B1/en not_active Not-in-force
- 2005-09-09 JP JP2007531290A patent/JP2008512786A/ja not_active Withdrawn
-
2006
- 2006-01-18 US US11/335,189 patent/US7558925B2/en active Active
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10474631B2 (en) | 2009-06-26 | 2019-11-12 | Hewlett Packard Enterprise Company | Method and apparatus for content derived data placement in memory |
JP2011118900A (ja) * | 2009-11-30 | 2011-06-16 | Internatl Business Mach Corp <Ibm> | システムの立ち上げ時間を早めるための方法、装置およびコンピュータ・プログラム |
US10938785B2 (en) | 2014-10-06 | 2021-03-02 | Cryptzone North America, Inc. | Multi-tunneling virtual network adapter |
JP2019511156A (ja) * | 2016-02-08 | 2019-04-18 | クリプトゾーン ノース アメリカ, インコーポレイテッド | ファイアウォールによる保護ネットワーク装置 |
US11876781B2 (en) | 2016-02-08 | 2024-01-16 | Cryptzone North America, Inc. | Protecting network devices by a firewall |
US10541971B2 (en) | 2016-04-12 | 2020-01-21 | Cryptzone North America, Inc. | Systems and methods for protecting network devices by a firewall |
US11388143B2 (en) | 2016-04-12 | 2022-07-12 | Cyxtera Cybersecurity, Inc. | Systems and methods for protecting network devices by a firewall |
Also Published As
Publication number | Publication date |
---|---|
WO2006031551A2 (en) | 2006-03-23 |
US7558925B2 (en) | 2009-07-07 |
US20070038798A1 (en) | 2007-02-15 |
DK1794979T3 (en) | 2017-07-24 |
EP1794979A2 (en) | 2007-06-13 |
EP1794979B1 (en) | 2017-04-12 |
WO2006031551A3 (en) | 2007-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2008512786A (ja) | データ構造の選択的複製方法および装置 | |
JP2008512797A (ja) | 決定性有限オートマトン(dfa)処理 | |
US8301788B2 (en) | Deterministic finite automata (DFA) instruction | |
CN100383751C (zh) | 用于动态镜像库寻址的系统和方法 | |
US6360220B1 (en) | Lock-free methods and systems for accessing and storing information in an indexed computer data structure having modifiable entries | |
US6754799B2 (en) | System and method for indexing and retrieving cached objects | |
US6681300B2 (en) | Read lock miss control and queue management | |
US20180375782A1 (en) | Data buffering | |
JP3640978B2 (ja) | ページテーブル中のハッシュアドレスタグを用いたメモリアドレス制御装置 | |
US8024496B2 (en) | Enhanced memory migration descriptor format and method | |
US7194517B2 (en) | System and method for low overhead message passing between domains in a partitioned server | |
JP2008512780A (ja) | 低遅延メモリへの直接アクセス方法 | |
US7441268B2 (en) | Method and apparatus to manage exceptions in network processors | |
JP2018045700A (ja) | ネットワークプロセッサにおけるマルチコア相互接続 | |
US7467256B2 (en) | Processor having content addressable memory for block-based queue structures | |
US20060036817A1 (en) | Method and system for supporting memory unaligned writes in a memory controller | |
JPH05274252A (ja) | コンピュータシステムにおけるトランザクション実行方法 | |
JP3733604B2 (ja) | キャッシュメモリ | |
US7089387B2 (en) | Methods and apparatus for maintaining coherency in a multi-processor system | |
GB2037466A (en) | Computer with cache memory | |
JP2004303239A (ja) | 複数の未処理データ要求を処理する方法 | |
JPH02126340A (ja) | データ処理システム | |
JPH05158793A (ja) | 並列キャッシュメモリ | |
JPH06301600A (ja) | 記憶装置 | |
JPH07210433A (ja) | ファイルサーバ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20081202 |