(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-07
(45)【発行日】2024-10-16
(54)【発明の名称】サブフィールド最小及び最大クランピングによる連想メモリ
(51)【国際特許分類】
G06F 9/318 20180101AFI20241008BHJP
G11C 15/04 20060101ALI20241008BHJP
G06F 9/34 20180101ALI20241008BHJP
【FI】
G06F9/318 A
G11C15/04 631Z
G06F9/34 330
(21)【出願番号】P 2022534361
(86)(22)【出願日】2020-12-11
(86)【国際出願番号】 US2020064478
(87)【国際公開番号】W WO2021119409
(87)【国際公開日】2021-06-17
【審査請求日】2023-12-11
(32)【優先日】2019-12-11
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】アレクサンダー フアド アシュカー
(72)【発明者】
【氏名】ジェームズ アール. クロブカー
(72)【発明者】
【氏名】ハリー ジェイ. ワイズ
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許第10340007(US,B2)
【文献】米国特許第07782645(US,B1)
【文献】米国特許出願公開第2014/0139071(US,A1)
【文献】米国特許第05438535(US,A)
【文献】米国特許第05167029(US,A)
【文献】米国特許第09055114(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/318
G11C 15/04
G06F 9/34
(57)【特許請求の範囲】
【請求項1】
方法であって、
複数のプロセシングパイプラインを含むプロセシングシステムにおいて、前記プロセシングシステムの第1のレジスタに書き込まれる第1のアドレスに関連する第1のデータを受信することと、
前記プロセシングシステムの連想メモリ(CAM)において、前記第1のアドレスを前記CAMの各エントリのアドレスフィールドと比較することと、
前記第1のアドレスが前記CAMのエントリの前記アドレスフィールドと一致すると判定したことに応じて、前記CAMのエントリに関連する関数選択
フィールドに基づいて、前記第1のデータの値をパイプライン毎に選択的に変更することと、
変更された値を前記第1のレジスタに書き込むことと、を含み、
前記第1のデータの値を選択的に変更することは、
第1のパイプラインが有効であるというインジケーションに基づいて、前記第1のパイプラインについての前記第1のデータの値を選択的に変更することと、
第2のパイプラインが有効であるというインジケーションに基づいて、前記第2のパイプラインについての前記第1のデータの値を選択的に変更することと、を含む、
方法。
【請求項2】
前記CAMのエントリに関連するデータマスクを適用することを含み、
前記データマスクは、前記第1のレジスタの1つ以上のサブフィールドを定義し、各サブフィールドは、1つ以上のビットを含むサブフィールドデータを含む、
請求項1の方法。
【請求項3】
前記第1のデータの値を選択的に変更することは、前記関数選択
フィールドが置換関数を含むことに応じて、前記データマスクの第1のサブフィールドに対応する前記第1のデータのビットの値を、前記CAMのエントリに記憶された前記サブフィールドデータのビットの値と置き換えることを含む、
請求項2の方法。
【請求項4】
前記第1のデータの値を選択的に変更することは、前記関数選択
フィールドが最小クランプを含むと判定したことと、前記第1のデータの第1のサブフィールドの値が、前記CAMのエントリの第1のサブフィールドに記憶された第1の値未満であると判定したことと、に応じて、前記CAMのエントリの第1のサブフィールドに対応する前記第1のデータの第1のサブフィールドの値を、前記CAMのエントリの第1のサブフィールドに記憶された前記第1の値に設定することを含む、
請求項2の方法。
【請求項5】
前記第1のデータの値を選択的に変更することは、第1のサブフィールドの第1のサブフィールド関数が最大クランプを含むと判定したことと、前記第1のデータの第1のサブフィールドの値が、前記CAMのエントリの第1のサブフィールドに記憶された第1の値よりも大きいと判定したことと、に応じて、前記CAMのエントリの第1のサブフィールドに対応する前記第1のデータの第1のサブフィールドの値を、前記CAMのエントリの第1のサブフィールドに記憶された前記第1の値に設定することを含む、
請求項2の方法。
【請求項6】
前記第1のデータの値を選択的に変更することは、追加の演算が実行されるというインジケーションに応じて、前記第1のデータの第1のサブフィールドに対して第1の演算を実行し、前記第1のデータの第2のサブフィールドに対して第2の演算を実行することを含む、
請求項2の方法。
【請求項7】
前記第1のデータの値を選択的に変更することは、
前記第1のデータが出力されるアドレスを、前記プロセシングシステムによって破棄されるレジスタ書き込みのためのレジスタアドレスに変更することを含む、
請求項1の方法。
【請求項8】
方法であって、
複数のプロセシングパイプラインを含むプロセシングシステムの連想メモリ(CAM)において、前記プロセシングシステムのレジスタに書き込まれる第1のデータを受信することと、
前記第1のデータが前記CAMのエントリと一致したことに応じて、前記エントリに記憶されたデータマスクを適用することであって、前記データマスクは、前記第1のデータの1つ以上のサブフィールドを定義し、各サブフィールドは、1つ以上のビットを含むサブフィールドデータを含む、ことと、
前記CAMの前記一致するエントリに記憶された第1の関数選択
フィールドに基づいて、パイプライン毎に前記第1のデータの第1のサブフィールドに対して第1の演算を実行することと、を含み、
前記第1の演算は、第1のパイプラインが有効であるというインジケーションに基づいて、前記第1のパイプラインについての前記第1のデータの値を選択的に変更することと、第2のパイプラインが有効であるというインジケーションに基づいて、前記第2のパイプラインについての前記第1のデータの値を選択的に変更することと、を含む、
方法。
【請求項9】
追加の演算が実行されるというインジケーションに応じて、前記第1のデータの第2のサブフィールドに対して第2の演算を実行することを含む、
請求項8の方法。
【請求項10】
前記第1の演算を実行することは、前記第1の関数選択
フィールドが置換関数を含むことに応じて、前記データマスクの前記第1のサブフィールドに対応する前記第1のデータのビットの値を、前記CAMのエントリに記憶されたビットの値と置き換えることを含む、
請求項8の方法。
【請求項11】
前記第1の演算を実行することは、前記第1の関数選択
フィールドが最小クランプを含むと判定したことと、前記第1のデータの前記第1のサブフィールドの値が、前記CAMのエントリの第1のサブフィールドに記憶された第1の値未満であると判定したことと、に応じて、前記CAMのエントリの第1のサブフィールドに対応する前記第1のデータの前記第1のサブフィールドの値を、前記CAMのエントリの第1のサブフィールドに記憶された前記第1の値に設定することを含む、
請求項8の方法。
【請求項12】
前記第1の演算を実行することは、前記第1の関数選択
フィールドが最大クランプを含むと判定したことと、前記第1のデータの前記第1のサブフィールドの値が、前記CAMのエントリの第1のサブフィールドに記憶された第1の値よりも大きいと判定したことと、に応じて、前記CAMのエントリの第1のサブフィールドに対応する前記第1のデータの前記第1のサブフィールドの値を、前記CAMのエントリの第1のサブフィールドに記憶された前記第1の値に設定することを含む、
請求項8の方法。
【請求項13】
複数のプロセシングパイプラインを含むプロセシングシステムであって、
レジスタと、
前記レジスタに書き込まれる第1のアドレスに関連する第1のデータを受信するように構成されたインタフェースと、
連想メモリ(CAM)と、を備え、
前記CAMは、
前記第1のアドレスを前記CAMの各エントリのアドレスフィールドと比較することと、
前記第1のアドレスが前記CAMのエントリの前記アドレスフィールドと一致すると判定したことに応じて、前記CAMの前記エントリに関連する関数選択
フィールドに基づいて、前記第1のデータの値をパイプライン毎に選択的に変更することと、
変更された値を前
記レジスタに書き込むことと、
を行うように構成されており、
前記第1のデータの値を選択的に変更することは、
第1のパイプラインが有効であるというインジケーションに基づいて、前記第1のパイプラインについての前記第1のデータの値を選択的に変更することと、
第2のパイプラインが有効であるというインジケーションに基づいて、前記第2のパイプラインについての前記第1のデータの値を選択的に変更することと、を含む、
プロセシングシステム。
【請求項14】
前記CAMは、前記CAMの前記エントリに関連するデータマスクを適用するように構成されており、
前記データマスクは、前記レジスタの1つ以上のサブフィールドを定義し、各サブフィールドは、1つ以上のビットを含むサブフィールドデータを含む、
請求項13のプロセシングシステム。
【請求項15】
前記CAMは、前記関数選択
フィールドが置換関数を含むことに応じて、前記データマスクの第1のサブフィールドに対応する前記第1のデータのビットの値を、前記CAMの前記エントリに記憶されたビットの値と置き換えることによって、前記第1のデータの値を選択的に変更するように構成されている、
請求項14のプロセシングシステム。
【請求項16】
前記CAMは、前記関数選択
フィールドが最小クランプを含むと判定したことと、前記第1のデータの第1のサブフィールドの値が、前記CAMの前記エントリの前記第1のサブフィールドに記憶された第1の値未満であると判定したことと、に応じて、前記CAMの前記エントリの第1のサブフィールドに対応する前記第1のデータの第1のサブフィールドの値を、前記CAMの前記エントリの前記第1のサブフィールドに記憶された前記第1の値に設定することによって、前記第1のデータの値を選択的に変更するように構成されている、
請求項14のプロセシングシステム。
【請求項17】
前記CAMは、前記関数選択
フィールドが最大クランプを含むと判定したことと、前記第1のデータの第1のサブフィールドの値が、前記CAMの前記エントリの前記第1のサブフィールドに記憶された第1の値よりも大きいと判定したことと、に応じて、前記CAMの前記エントリの第1のサブフィールドに対応する前記第1のデータの第1のサブフィールドの値を、前記CAMの前記エントリの前記第1のサブフィールドに記憶された前記第1の値に設定することによって、前記第1のデータの値を選択的に変更するように構成されている、
請求項14のプロセシングシステム。
【請求項18】
前記CAMは、追加の演算が実行されるというインジケーションに応じて、前記第1のデータの第1のサブフィールドに対して第1の演算を実行し、前記第1のデータの第2のサブフィールドに対して第2の演算を実行することによって、前記第1のデータの値を選択的に変更するように構成されている、
請求項14のプロセシングシステム。
【発明の詳細な説明】
【背景技術】
【0001】
プロセシングシステムは、レジスタ及び他の記憶モジュールにおいてアプリケーション及び入力/出力(I/O)デバイスからデータ及びコマンドを受信する。次世代プロセシングシステムが開発されるにつれて、重要な設計考慮事項は、古い方のアプリケーション及びI/Oデバイスとの互換系を提供している。例えば、アプリケーションによって生成されたデータ及びコマンドは、新たな機能と矛盾することがあり、それによって、ユーザエクスペリエンスに悪影響を与える。加えて、バグフィックスワークアラウンドは、レジスタビットを設定又は消去する必要がある。データは、後方互換性を保証するために、ファームウェア又はフラッシュマイクロコードを使用してランタイムにおいて操作されることがある。しかしながら、データがファームウェアを使用して操作される場合、レジスタ書き込みごとに、ファームウェアは、データの潜在的な変更が必要であるかどうかを判定し、必要である場合に変更を実行するためにアドレス試験を適用する。これは、複数のクロックサイクルを必要とし、必要なクロックサイクルの数は、検査される必要があるアドレスの数と共に増大する。よって、ファームウェア又はフラッシュマイクロコードにおいてレジスタビットをリセット又は消去するためにプログラムが稼働している間にデータを分析することは、時間がかかり、ユーザエクスペリエンスに悪影響を与える可能性のある性能ペナルティが要求される。
【0002】
添付図面を参照することによって本開示を良好に理解することができ、その多数の特徴及び利点が当業者に明らかになる。異なる図における同一の符号の使用は、類似又は同一の要素を示す。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、1つ以上のパイプラインレジスタへのレジスタ書き込みを変更するための連想メモリ(CAM)を含むプロセシングシステムのブロック図である。
【
図2】いくつかの実施形態による、レジスタ書き込みのサブフィールド並びに各々のサブフィールドに対応するサブフィールド関数及びサブフィールドデータを定義したデータマスクを含む
図1のCAMのブロック図である。
【
図3】いくつかの実施形態による、レジスタ書き込みの特定のビットを置き換える
図2のCAMの置換サブフィールド関数を示す図である。
【
図4】いくつかの実施形態による、レジスタ書き込みのサブフィールド値を最小値にクランプする
図2のCAMの最小クランプサブフィールド関数を示す図である。
【
図5】いくつかの実施形態による、レジスタ書き込みのサブフィールド値を最大値にクランプする
図2のCAMの最小クランプサブフィールド関数を示す図である。
【
図6】いくつかの実施形態による、
図1~
図5のCAMを使用してパイプ単位でレジスタ書き込みを変更する方法を示すフローチャートである。
【発明を実施するための形態】
【0004】
図1~
図6は、次世代ハードウェアに一致するように既存のソフトウェアから受信されたレジスタ書き込みを選択的に変更するための例示的なハードウェアシステム及び技術を示す。複数のプロセシングパイプラインを含むプロセシングシステムは、パイプライン単位(per-pipeline basis)でレジスタ書き込みを選択的に変更するためのI/OパスにおけるCAMを有する。CAMは、レジスタ書き込みのアドレスをCAMの各々のエントリのアドレスフィールドと比較する。レジスタ書き込みのアドレスがCAMのエントリのアドレスフィールドと一致すると判定したことに応じて、CAMは、CAMの一致したエントリについての関数によって定義されるようにレジスタ書き込みを選択的に変更する。例えば、いくつかの実施形態では、一致したエントリについての関数は置換関数であり、この場合、CAMは、レジスタ書き込みのデータの値を、一致したエントリのためにCAMに記憶されたデータ(すなわち、変更された値)と置き換える。いくつかの実施形態では、一致したエントリについての関数は最小クランプ(minimum clamp)であり、この場合、レジスタ書き込みのデータを、一致したエントリのためにCAMに記憶された最小値と比較し、レジスタ書き込みデータの値が最小値未満である場合に、最小値と置き換える。逆に、いくつかの実施形態では、一致したエントリについての関数は最大クランプ(maximum clamp)であり、この場合、レジスタ書き込みのデータを、一致したエントリのためにCAMに記憶された最大値と比較し、レジスタ書き込みデータの値が最大値を上回る場合に、最大値と置き換える。
【0005】
CAMは、パイプライン単位でレジスタ書き込みを選択的に変更又は破棄し、その結果、有効なCAMエントリついて、CAMは、第1のパイプラインに対してレジスタ書き込みを変更又は破棄するが、第2の(又は第3の等)のパイプラインに対してはレジスタ書き込みを変更しないままにする。いくつかの実施形態では、所定のアドレスについて、各々のパイプラインは、パイプラインについてのレジスタ書き込みが独立して変更されるように異なるCAMエントリを有する。
【0006】
さらに、CAMは、いくつかの実施形態では、エントリごとのデータマスクを含み、このデータマスクは、レジスタ書き込みのサブフィールドを定義する。例えば、いくつかの実施形態では、レジスタ書き込みデータは32ビットを含み、データマスクは、各々のサブフィールドに属するビット位置を定義する。各々のエントリのデータマスクによって定義された各々のサブフィールドは、単一のビット又は複数のビットを含んでもよい。さらに、CAMは、サブフィールドごとのサブフィールド関数、及び、サブフィールドごとのサブフィールドデータ又はサブフィールド値を含む。よって、第1のサブフィールドについてのサブフィールド関数が置換関数である場合、CAMは、データマスクによって定義されたビット位置についてのデータのビット値を、一致したCAMエントリについてのサブフィールドデータと置き換える(例えば、各々の0を1にフリップし、各々の1を0にフリップする)。同様に、第1のサブフィールドについてのサブフィールド関数が最小クランプである場合、CAMは、データマスクによって定義されたデータのサブフィールドのビット位置の値を、一致したCAMエントリについてのサブフィールドと比較し、データサブフィールドの値が一致したCAMエントリについてのサブフィールド値未満である場合、データサブフィールドの値を、一致したCAMエントリについてのサブフィールド値にクランプする。第1のサブフィールドについてのサブフィールド関数が最大クランプである場合、CAMは、データマスクによって定義されデータのサブフィールドのビット位置の値を、一致したCAMエントリについてのサブフィールド値と比較し、データサブフィールドの値が一致したCAMエントリについてのサブフィールド値よりも大きい場合、データサブフィールドの値を、一致したCAMエントリについてのサブフィールド値にクランプする。
【0007】
さらに、いくつかの実施形態では、各々のCAMエントリは、第2の(又は、第3の)サブフィールド関数がデータ書き込みの第2の(又は、第3の)サブフィールドに対して実行されることになるというインジケーションを含む。例えば、複数のサブフィールドを有するCAMエントリの第1のスロットに対して継続ビットが設定され、レジスタ書き込みのアドレスがCAMエントリのアドレスフィールドに一致する場合、レジスタ書き込みのデータの第1のサブフィールドに対して第1のサブフィールド関数が実行され、データの第1のサブフィールド又は第2のサブフィールドに対して第2のサブフィールド関数を実行するためにCAMエントリの次の(第2の)スロットが使用される。CAMエントリの第2のスロットに対して継続ビットが設定される場合、データの第1のサブフィールド、第2のサブフィールド、又は、第3のサブフィールドのうち1つに対して第3のサブフィールド関数が実行される。例示するために、第1のサブフィールド関数が第1のサブフィールドについての置換関数であり、第2のサブフィールド関数が第2のサブフィールドについての最小クランプであり、第3のサブフィールド関数が第3のサブフィールドについての最大クランプである場合、CAMは、全てについて単一のCAMルックアップ及び比較を使用して、データの第1のサブフィールドのビットを置換、第2のサブフィールドの値を最小にクランプし、第3のサブフィールドの値を最大にクランプする。最小クランプ及び最大クランプが同一のサブフィールドに適用される場合、CAMは、対応するサブフィールドの値を制限する。よって、継続ビット(複数可)は、単一のレジスタ書き込みの異なる範囲のビットに対して複数の演算が実行されるように演算を共に連鎖させる。レジスタ書き込みを選択的に変更するためにCAMを使用することによって、既存のソフトウェアによって生成されたデータは、顕著な性能ペナルティ無しに次世代ハードウェアに一致するように変更されてもよい。
【0008】
図1は、いくつかの実施形態による、外部記憶媒体106から1つ以上のパイプラインレジスタへのレジスタ書き込みを変更するように構成された連想メモリ(CAM)110を含むプロセシングシステム100のブロック図である。プロセシングシステムは、入力/出力(I/O)エンジン104等のインタフェースと、2つのパイプライン(パイプライン120及びパイプライン130)と、を含む。パイプライン120は、レジスタ122及びプロセシングユニット124を含む。同様に、パイプライン130は、レジスタ132及びプロセシングユニット134を含む。プロセシングシステム100は、電子デバイスに対して特定のタスクを実行するように1つ以上の命令セット(例えば、コンピュータプログラム)を実行する。そのようなタスクの例は、電子デバイスの演算の態様を制御すること、特定のユーザエクスペリエンスを提供するためにユーザに情報を表示すること、及び、他の電子デバイスと通信すること等を含む。したがって、異なる実施形態では、デスクトップコンピュータ、ラップトップコンピュータ、サーバ、ゲームコンソール、タブレット、スマートフォン等のいくつかのタイプの電子デバイスのうち何れかにおいてプロセシングシステム100が採用される。
【0009】
1つ以上の命令セットの実行をサポートするために、プロセシングシステム100は、複数のプロセッサコア(説明を容易にするために1つのみのプロセッサコア140が
図1に示されている)を含む。いくつかの実施形態では、各々のプロセッサコアは、命令をフェッチし、命令を対応する演算に復号し、演算を1つ以上の実行ユニット(例えば、プロセシングユニット124,134)にディスパッチし、演算を実行し、演算を退避するための1つ以上の命令パイプライン(例えば、パイプライン120及びパイプライン130)を含む。
図1が2つのパイプライン120,130を示しているが、他の実施形態では、1つのパイプライン又は2つ以上のパイプラインを含む。命令を実行する過程で、プロセッサコアは、情報の視覚的表示に関連するグラフィック演算及び他の演算を生成する。それらの演算に基づいて、プロセッサコアは、グラフィックプロセシングユニット(GPU)(図示省略)にコマンド及びデータを提供する。
【0010】
I/Oエンジン104は、ディスプレイ(図示省略)に関連する入力演算又は出力演算と共に、キーボード、マウス、プリンタ、外部ディスク等のプロセシングシステム100の他の要素を処理する。図示した実施形態では、I/Oエンジン104は、コンパクトディスク(CD)及びデジタルビデオディスク(DVD)等の外部記憶媒体106に記憶された情報を読み込む。外部記憶媒体106は、ビデオゲーム等のアプリケーションを実装するために使用されるプログラムコードを表す情報を記憶する。外部記憶媒体106上のプログラムコードは、プロセシングユニット124によって実行される命令又はプログラムコードの複製を形成するように、パイプライン120のレジスタ122に書き込まれる。同様に、外部記憶媒体106上のプログラムコードは、プロセシングユニット134によって実行される命令又はプログラムコードの複製を形成するように、パイプライン130のレジスタ132に書き込まれる。
【0011】
外部記憶媒体からレジスタ122,132へのレジスタ書き込みの選択的変更を容易にするために、プロセシングシステムは、CAM110を含む。CAM110は、第1のパイプラインに対してレジスタ書き込みが変更され、第2のパイプラインに対してレジスタ書き込みが変更されず、又は、第1のパイプラインに対する変更とは異なって変更されるように、パイプライン単位でレジスタ書き込みのデータを選択的に変更するように構成されている。いくつかの実施形態では、CAM110は、CAM110のエントリのアドレスに一致したアドレスへのレジスタ書き込みにデータマスクを適用するように構成されている。データマスクは、レジスタ書き込みのサブフィールドを定義し、データマスクに対応するレジスタ書き込みのビット(すなわち、サブフィールド)に対して実行されるサブフィールド関数又はオペコードを規定する。いくつかの実施形態では、CAM110は、レジスタ書き込みの同一のサブフィールド又は異なるサブフィールドの何れかに、第2のサブフィールド関数(すなわち、追加の演算)がレジスタ書き込みに対して実行されるというインジケーション(例えば、継続ビット)を記憶するように構成されている。CAM110の各々のエントリは、1つよりも多い関数が単一のレジスタ書き込みに対して実行される場合、アドレスフィールド、データマスク、オペコードを識別する関数選択フィールド、データ値サブフィールド、パイプラインごとのパイプラインイネーブルビット、及び、継続ビットを含む。いくつかの実施形態では、CAM110の各々のエントリは、サブフィールドごとの関数選択フィールドを含む。いくつかの実施形態では、CAM110の各々のエントリは、レジスタ書き込みデータを破棄するためのインジケーションを含む。スキップ書き込み等のインジケーションが設定される場合、CAM110は、アドレス出力を、ハードウェアによって破棄されるレジスタ書き込みについての予約されたレジスタアドレスに変更する。
【0012】
関数選択フィールドは、置換関数、最小クランプ関数、及び、最大クランプ関数を含む。データマスクによって定義されたビットのサブフィールドに対して置換関数が規定されることに応じて、CAM110は、対応するデータマスクビットセットを有するレジスタ書き込みデータ102のビットを、一致したCAM110エントリの対応するデータ値サブフィールドと置き換える。よって、例えば、データマスクが0xffff0000である場合、一致したCAM110エントリのデータ値サブフィールドは0xccddeeffであり、レジスタ書き込みデータ102は0x12345678であり、変更された値は0ccdd5678である。データマスクによって定義されたビットのサブフィールドに対して最小クランプ関数が規定されることに応じて、CAM110は、レジスタ書き込みデータ102のサブフィールドの値を、一致したCAM110エントリの対応するデータ値サブフィールドと比較する。レジスタ書き込みデータ102のサブフィールドの値が一致したCAM110エントリの対応するデータ値サブフィールド未満である場合、CAM110は、レジスタ書き込みデータ102のサブフィールドの値を、一致したエントリのデータ値サブフィールドにクランプする。データマスクによって定義されたビットのサブフィールドに対して最大クランプ関数が規定されることに応じて、CAM110は、レジスタ書き込みデータ102のサブフィールドの値を、一致したCAM110エントリの対応するデータ値サブフィールドと比較する。レジスタ書き込みデータ102のサブフィールドの値が一致したCAM110エントリの対応するデータ値サブフィールドよりも大きい場合、CAM110は、レジスタ書き込みデータ102のサブフィールドの値を、一致したエントリのデータ値サブフィールドにクランプする。よって、CAM110は、レジスタ書き込みデータ102のサブフィールドを選択的に変更する。
【0013】
説明するために、動作中、I/Oエンジン104は、外部記憶媒体106からレジスタ書き込みデータ102を受信する。I/Oエンジン104は、レジスタ書き込みデータ102をCAM110に提供する。CAM110は、レジスタ書き込みデータ102のアドレスを、CAM110の各々のエントリのアドレスフィールドと比較するルックアップを実行する。いくつかの実施形態では、一致のためにCAM110を探索する場合、エントリ0により開始して発見された第1の一致が使用され、より上位のエントリにおける一致が無視される。一致が発見され、例えば、パイプラインイネーブルビットを設定することによって少なくとも1つのパイプラインが有効である場合、CAM110は、データマスク、並びに、一致したCAM110エントリについてのサブフィールド関数及びデータフィールドによって定義されるように、レジスタ書き込みデータ102を変更する。パイプラインが有効ではない場合、CAM110は、データ102を変更することを控える。よって、説明する例では、CAM110は、データ102のアドレスについての一致を含み。パイプライン120についてのパイプラインイネーブルビットが一致したエントリに対して設定される。したがって、CAM110は、パイプライン120についてのデータ102を変更し、変更(修正)されたデータ112をレジスタ122に提供する。しかしながら、説明する例では、パイプライン130についてのパイプラインイネーブルビットが設定されず、よって、CAM110は、パイプライン130についてのデータ102を変更せず、データ102をレジスタ132に提供する。
【0014】
図2は、いくつかの実施形態による、レジスタ書き込みデータのサブフィールドを定義したデータマスク206及び各々のサブフィールドに対応するサブフィールドデータを含む
図1のCAM110のブロック図である。説明する例では、CAM110の各々のエントリは、アドレスフィールド202と、スキップ書き込みフィールド204と、データマスク206と、関数選択208と、パイプラインイネーブル210と、パイプラインイネーブル212と、継続ビット216と、を含む。設定される場合、スキップ書き込みフィールド204は、レジスタ書き込みデータに対するCAM110からハードウェアによって破棄されたアドレスへのレジスタアドレス出力を変更する。データマスク206は、CAM110のエントリのアドレスフィールド202に一致したレジスタ書き込みデータの3つのサブフィールド(サブフィールド-1 220、サブフィールド-2 230及びサブフィールド-3 240)を定義する。各々のサブフィールドは、1つ以上のビットを含み、独立したサイズにされる。よって、説明する例では、サブフィールド-1 220は、サブフィールド-2 230よりも少ないビットを含み、サブフィールド-3 240は、サブフィールド-1 220よりも多いビットを含み、サブフィールド-2 230よりも少ないビットを含む。いくつかの実施形態では、設定されたビット位置は、サブフィールドの最後のビットを定義する。例えば、新たなサブフィールドは、次の上位数ビットについてのマスクビットが設定される場合に始まる。32ビットデータについて、ビット31は、サブフィールドを開始し、ビット0は、サブフィールドを終了する。最上位ビット31から開始して、データマスク206のビットが0である場合、新たなサブフィールドが開始しているか、サブフィールドの中間であるかの何れかである。データマスク206のビットが1である場合、それは、サブフィールドの最後のビットである。
【0015】
CAM110の一致したエントリは、関数選択208を含み、関数選択208は、データマスク206によって識別されたビットに対応するレジスタ書き込みデータ(図示省略)のビットに対して実行される関数又はオペコードを識別する。いくつかの実施形態では、関数選択208は、置換関数、最小クランプ関数又は最大クランプ関数のうち何れかである。サブフィールド-1 220に対応するレジスタ書き込みデータのビットの値を置き換え(関数選択208が置換関数であるケース)、又は、サブフィールド-1 220に対応するレジスタ書き込みデータのビットの値をクランプする(関数選択208が最小クランプ関数若しくは最大クランプ関数であり、「サブフィールド-1」レジスタ書き込みデータの値がサブフィールド-1のデータ値222の値未満であるか若しくは上回るかの何れかのケース)の何れかのために、サブフィールド-1のデータ値222が使用される。設定される継続ビット216は、アドレスフィールド202に一致したレジスタ書き込みデータに対してCAM110が第2の関数を実行することになることを示す。したがって、第2の関数を実行するために、第2のCAMスロット、サブフィールド-2 230が使用される。
【0016】
サブフィールド-1 220と同様に、関数選択208は、サブフィールド-2 230としてデータマスク206によって識別されたビットに対応するレジスタ書き込みデータのビットに対して実行される関数又はオペコードを識別する。サブフィールド-2 230に対応するレジスタ書き込みデータのビットの値を置き換え(関数選択208が置換関数であるケース)、又は、サブフィールド-2 230に対応するレジスタ書き込みデータのビットの値をクランプする(関数選択208が最小クランプ関数若しくは最大クランプ関数であり、「サブフィールド-2」レジスタ書き込みデータの値がサブフィールド-2のデータ232の最小値未満であるか若しくはサブフィールド-2のデータ232の最大値を上回るかの何れかのケース)の何れかのために、サブフィールド-2のデータ値232が使用される。設定される継続ビット216は、アドレスフィールド202に一致したレジスタ書き込みデータに対してCAM110が第3の関数を実行することを示す。したがって、第3の関数を実行するために、第3のCAMスロット、サブフィールド-3 240が使用される。
【0017】
サブフィールド-1 220及びサブフィールド-2 230のように、関数選択208は、サブフィールド-3 240としてデータマスク206によって識別されたビットに対応するレジスタ書き込みデータのビットに対して実行される関数又はオペコードを識別する。サブフィールド-3 240に対応するレジスタ書き込みデータのビットの値を置き換え(関数選択208が置換関数であるケース)、又は、サブフィールド-3 240に対応するレジスタ書き込みデータのビットの値をクランプする(関数選択208が最小クランプ関数若しくは最大クランプ関数であり、「サブフィールド-3」レジスタ書き込みデータの値がサブフィールド-3のデータ値242の最小値未満であるか若しくはサブフィールド-3のデータ値242の最大値を上回るかの何れかのケース)の何れかのために、サブフィールド-3のデータ値242が使用される。
【0018】
いくつかの実施形態では、サブフィールド-1 220、サブフィールド-2 230及びサブフィールド-3 240の各々は、サブフィールドに特有のサブフィールド関数選択(図示省略)を含む。よって、サブフィールドごとのサブフィールド関数選択は、他のサブフィールドについてのサブフィールド関数選択と独立している。例えば、いくつかの実施形態では、サブフィールド-1 220についてのサブフィールド選択が置換関数であると共に、サブフィールド-2 230についてのサブフィールド選択が最小クランプ関数であり、サブフィールド-3 240についてのサブフィールド選択が最大クランプ関数である。
【0019】
図3は、いくつかの実施形態に従った、レジスタ書き込みデータ300の特定のビットを置き換える
図1のCAM110の置換サブフィールド関数を示す図である。説明する例では、データマスク310は、変更されるビットが「f」により示され、変更されないままのビットが「0」により示される、レジスタ書き込みデータ300のビット31(301)からビットN(308)までの範囲にわたるサブフィールドを定義する。説明する例では、レジスタ書き込みデータ300は、以下の値(ビット31(301)が0であり、ビット30(302)が0であり、ビット29(303)が1であり、ビット28(304)が0であり、ビット27(305)が1であり、ビット26(306)が1であり、ビット25(307)が0であり、ビットN(308)が1である)を有するビットを含む。データマスク310は、以下のビット(ビット31(301)、ビット30(302)、ビット28(304)、ビット27(305)及びビット25(307))が変更されることを示す。サブフィールド310に関連する関数選択は、置換関数322であり、変更されるデータマスク310が示すビット301~308の値を置き換えるデータ値は、置換データ324として提供される。CAM110は、変更されたデータ330を生成するように、レジスタ書き込みデータ300を置換データ324と置き換える。説明する例では、置換データ324は、レジスタ書き込みデータ300のそれらからフリップされたビット値を有する。よって、変更されたデータ330について、ビット31(301)が1にフリップされ、ビット30(302)が1にフリップされ、ビット29(303)が1として変更されないままであり、ビット28(304)が1にフリップされ、ビット27(305)が0にフリップされ、ビット26(306)が1として変更されないままであり、ビット25(307)が1にフリップされ、ビットN(308)が1として変更されないままである。
【0020】
図4は、いくつかの実施形態による、レジスタ書き込みデータ400のサブフィールド値402を最小値414にクランプする
図1のCAM110の最小クランプサブフィールド関数を示す図である。説明する例では、レジスタ書き込みデータ400に一致したCAM110のエントリについてのデータマスクによって定義されたサブフィールド410は、最小クランプ関数412及び最小値414を規定した関数選択を有する。CAM110は、レジスタ書き込みデータ400のサブフィールド値402を最小値414と比較する。サブフィールド値402が最小値414以上である場合、CAM110は、何れのパイプラインが有効であるかに応じて、レジスタ122,132の何れか又は両方にレジスタ書き込みデータ400を提供する場合にサブフィールド値402を変更しない。しかしながら、サブフィールド値402が最小値414未満である場合、CAM110は、サブフィールド値402を最小値414にクランプ(設定)し、レジスタ122,132の何れか又は両方に変更されたデータ420を提供する。
【0021】
図5は、いくつかの実施形態による、レジスタ書き込みデータ500のサブフィールド値502を最大値514にクランプするCAM110の最大クランプサブフィールド関数を示す図である。説明する例では、レジスタ書き込みデータ500に一致したCAM110のエントリについてのデータマスクによって定義されたサブフィールド510は、最小クランプ関数512及び最大値514を規定した関数選択を有する。CAM110は、レジスタ書き込みデータ500のサブフィールド値502を最大値514と比較する。サブフィールド値502が最大値514以下である場合、CAM110は、何れのパイプラインが有効であるかに応じて、レジスタ122,132の何れか又は両方にレジスタ書き込みデータ500を提供する場合にサブフィールド値502を変更しない。しかしながら、サブフィールド値502が最大値514よりも大きい場合、CAM110は、サブフィールド値502を最大値514にクランプ(設定)し、レジスタ122,132の何れか又は両方に変更されたデータ520を提供する。
【0022】
図6は、いくつかの実施形態による、
図1のCAM110を使用してパイプ単位でレジスタ書き込みデータを変更する方法600を示す図である。ブロック602において、CAM110は、レジスタ書き込みデータ102を受信する。ブロック604において、CAM110は、レジスタ書き込みデータ102のアドレスに一致したアドレスフィールドを有するエントリについてそのエントリを探索する。ブロック606において、CAM110は、それが一致したエントリを含むかどうかを判定する。ブロック606において、CAM110が一致したエントリを含まない場合、方法フローは、ブロック608に続く。ブロック608において、CAM110は、レジスタ書き込みデータ102を変更することを控え、レジスタ122,132に変更されていないレジスタ書き込みデータ102を提供し、方法フローは、次のレジスタ書き込みデータを受信するためにブロック602に再度続く。
【0023】
ブロック606において、それが一致したエントリを含むとCAM110が判定する場合、方法フローはブロック610に続く。ブロック610において、CAM110は、一致したエントリが何れかのパイプラインに対して設定されたパイプラインイネーブルを有するかどうかを判定する。パイプラインイネーブルが何れかのパイプラインに対して設定されていない場合、方法フローはブロック608に再度続き、ブロック608において、CAM110は、レジスタ書き込みデータ102を変更することを控え、方法フローは、次のレジスタ書き込みデータを受信するためにブロック602に再度続く。ブロック610において、パイプラインイネーブルが少なくとも1つのパイプラインに対して設定される場合、方法フローはブロック612に続く。ブロック612CAM110は、レジスタ書き込みデータ102の1つ以上のサブフィールドを定義するために、CAM110の一致したエントリに関連するデータマスクを適用する。ブロック614において、CAM110は、データマスクによって定義された各々のサブフィールドに対応するレジスタ書き込みデータ102のビットに対して、関数選択によって規定された関数を実行する。ブロック616において、CAM110は、継続ビットが一致したエントリに対して設定されるかどうかを判定する。ブロック616において、継続ビットが設定されていない場合、方法フローはブロック618に続き、ブロック618において、CAM110は、何れのパイプラインが有効であるかに応じて、レジスタ122,132の何れか又は両方に変更されたデータ112を提供する。次に、方法フローは、次のレジスタ書き込みデータを受信するためにブロック602に再度続く。
【0024】
ブロック616において、継続ビットが設定されたとCAM110が判定する場合、方法フローはブロック620に続く。ブロック620において、CAM110は、次のCAM110エントリについてのデータマスクを適用するために方法フローがブロック612に再度続いた後、次のCAM110エントリを取得する。CAM110がレジスタ書き込みデータ102についての全ての関数を実行すると、ブロック618において、CAM110は、レジスタ122,132の何れか又は両方に変更されたデータ112を提供する。いくつかの実施形態では、CAM110は、パイプライン120についてのレジスタ書き込みデータ102のサブフィールドに対して1つ以上の関数の第1のセットを実行し、パイプライン130についてのレジスタ書き込みデータ102のサブフィールドに対して1つ以上の関数の第2のセットを実行する。
【0025】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。このような記憶媒体には、限定されないが、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体(例えば、システムRAM又はROM)はコンピューティングシステムに内蔵されてもよいし、コンピュータ可読記憶媒体(例えば、磁気ハードドライブ)はコンピューティングシステムに固定的に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)はコンピューティングシステムに着脱可能に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、ネットワークアクセス可能ストレージ(NAS))は有線又は無線ネットワークを介してコンピュータシステムに結合されてもよい。
【0026】
いくつかの実施形態では、上記の技術の特定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実施されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等のソリッドステート記憶デバイス、又は、他の1つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0027】
1つの態様によれば、方法は、プロセシングシステムにおいて、プロセシングシステムの第1のレジスタに書き込まれる第1のアドレスに関連する第1のデータを受信することを含む。さらに、方法は、プロセシングシステムの連想メモリ(CAM)において第1のアドレスをCAMの各々のエントリのアドレスフィールドと比較することと、第1のアドレスがCAMのエントリのアドレスフィールドと一致すると判定したことに応じて、CAMのエントリに関連する関数選択に基づいて、第1のデータの値を選択的に変更することと、を含む。また、方法は、第1のレジスタに変更された値を書き込むことを含む。いくつかの実施形態では、方法は、CAMのエントリに関連するデータマスクを適用することを含み、データマスクは、第1のレジスタの1つ以上のサブフィールドを定義し、各々のサブフィールドは、1つ以上のビットを有するサブフィールドデータを含む。
【0028】
いくつかの実施形態では、方法は、置換関数を規定した関数選択に応じて、データマスクの第1のサブフィールドに対応する第1のデータのビットの値を、CAMのエントリに記憶されたビットの値と置き換えることによって、第1のデータの値を変更することを含む。いくつかの実施形態では、方法は、関数選択が最小クランプを規定したと判定したことと、第1のデータの第1のサブフィールドの値が、CAMのエントリの第1のサブフィールドに記憶された第1の値未満であると判定したことと、に応じて、CAMのエントリの第1のサブフィールドに対応する第1のデータの第1のサブフィールドの値を、CAMのエントリの第1のサブフィールドに記憶された第1の値に設定することによって、第1のデータの値を選択的に変更することを含む。さらに、いくつかの実施形態では、CAMは、追加の演算が実行されるというインジケーションに応じて、第1のデータの第1のサブフィールドに対して第1の演算を実行し、第1のデータの第2のサブフィールドに対して第2の演算を実行する。いくつかの実施形態では、CAMは、第1のデータが出力されるアドレスを、プロセシングシステムによって破棄されるレジスタ書き込みのためのレジスタアドレスに変更することによって、第1のデータの値を選択的に変更する。
【0029】
別の態様によれば、方法は、プロセシングシステムのCAMにおいて、プロセシングシステムのレジスタに書き込まれる第1のデータを受信することと、第1のデータがCAMのエントリと一致したことに応じて、エントリに記憶されたデータマスクを適用することと、を含み、データマスクは、第1のデータの1つ以上のサブフィールドを定義し、各々のサブフィールドは、1つ以上のビットを含むサブフィールドデータを含む。さらに、方法は、CAMの一致したエントリに記憶された関数選択に基づいて、第1のデータの第1のサブフィールドに対して第1の演算を実行することを含む。いくつかの実施形態では、方法は、追加の演算が実行されるというインジケーションに応じて、第1のデータの第2のサブフィールドに対して第2の演算を実行することを含む。さらに、いくつかの実施形態では、方法は、第1のパイプラインが有効であるというインジケーションに基づいて、第1のパイプラインについての第1のデータの値を選択的に変更することと、第2のパイプラインが有効であるというインジケーションに基づいて、第2のパイプラインについての第1のデータの値を選択的に変更することと、を含む。
【0030】
別の態様によれば、プロセシングシステムは、レジスタと、レジスタに書き込まれる第1のアドレスに関連する第1のデータを受信するように構成されたインタフェースと、第1のアドレスをCAMの各々のエントリのアドレスフィールドと比較するように構成されたCAMと、を備える。第1のアドレスがCAMのエントリのアドレスフィールドと一致すると判定したことに応じて、CAMは、CAMのエントリに関連する関数選択に基づいて第1のデータの値を選択的に変更し、レジスタに変更された値を書き込む。
【0031】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0032】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。