(57)【特許請求の範囲】
【請求項１】
単一の動作においてメモリへまたはメモリから転送されるビット量であるライン幅に基づいてメモリ動作が行われるキャッシュ・メモリを管理するための方法であって、
前記ライン幅を選択的に変更するステップと、
前記キャッシュ・メモリにメイン・メモリ・アドレスを供給するステップと、
前記メイン・メモリ・アドレスおよび前記ライン幅に基づいてルックアップを生成するステップと、
前記メイン・メモリ・アドレスおよび前記ルックアップを用いて、前記ライン幅を、前記キャッシュ・メモリ内に配置され当該メモリを構成する複数のデータ・ブロックの少なくとも１つの前記データ・ブロックに関連付けるステップと、
前記ライン幅に関連付けられた前記データ・ブロックからデータを転送するステップと、
を有し、
前記ライン幅をタスクに関連付けるステップと、
前記タスクをロードする場合に前記ライン幅を選択するステップと、
前記タスクをアンロードする場合に前記ライン幅をセーブするステップと、
を更に有する方法。
【請求項２】
前記キャッシュ・メモリが、第１のライン幅に関連した第１グループの前記データ・ブロックと、前記第１のライン幅とは異なる第２のライン幅に関連する第２グループの前記データ・ブロックとを含む、請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、メモリライン幅である。
【背景技術】
【０００２】
キャッシュは、メイン・メモリと処理ユニットとの間のデータ転送を高速化するために用いられる一種のメモリである。一般に、キャッシュは、メイン・メモリよりも小さいデータ量を含む。通常、メイン・メモリから、キャッシュにおける１つ以上のデータ・ブロック内に、処理ユニットがアクセスしたかまたはアクセスする可能性があるデータ（例えば、最近アクセスしたデータ、隣接データ、先読み（ルックアヘッド）アルゴリズムによって決定するデータ等）をロードする。処理ユニットによってメイン・メモリ・アドレスがキャッシュに供給されると、そのメイン・メモリ・アドレスの一部または全部を用いて、要求されたデータがキャッシュ内に存在するか否かを判定する。
【０００３】
図１は、構造的に格子状のデータ・ブロック６（セル）に構成された例示的なキャッシュ２を示す。列は、ウエイ（way）８と示され、行は、各々インデクスによって示されている。例示的なキャッシュ２では、４つのウエイ８すなわちウエイ０からウエイ３、および、０〜７とインデクスを付した８個の行が設けられている。従って、３２のデータ・ブロック６が図示されている。各データ・ブロック６は、１つ以上のデータ・ワードを含む。「ワード」は、処理システムにおける独立してアドレス可能な最小データ量である。１ワードは、通常、１バイト以上である（例えば２バイト、４バイト等）。メモリにおけるオーバーヘッドの負担を軽減するため、各データ・ブロック６には、通常、多数のワードが保存されている。各データ・ブロック６に保存されたデータ量の倍数単位で、単一のタスクのためのメモリが確保される。
【０００４】
メイン・メモリ・アドレスが与えられると、キャッシュ２は、インデクスを用いて、各ウエイ８において対応するデータ・ブロック６の位置を見つける。次いで、キャッシュ２は、見つけたデータ・ブロック６のいずれかが、供給されたメイン・メモリ・アドレスのデータを含むか否かを判定する。見つけたデータ・ブロック６の１つにデータが存在する場合、そのデータに対して所望の動作を実行する（すなわち、読み取り、書き込み、削除等）。データが存在しない場合、要求されたデータを、メイン・メモリから検索し、見つけたデータ・ブロック６の１つにロードし、動作を実行することができる。
【０００５】
図２は、キャッシュ２についての従来技術のアドレスルックアップ動作を示す。キャッシュ２は、Ｎ個のウエイ８、すなわちウエイ０からウエイＮ−１を含むものとして示す。各ウエイ８は、０から２I−１とインデクスを付した２Ｉのデータ・ブロック６を含む。通常、プロセッサは、キャッシュ２へのデータにメイン・メモリ・アドレス４を供給する。要求されたデータの位置を見つけるため、キャッシュ２は、メイン・メモリ・アドレス４が、タグ部４Ａ、インデクス部４Ｂ、もしくはブロック・オフセット部４Ｃまたはそれら全てを有するものと見なす。メイン・メモリおよび各データ・ブロック６内のデータ６Ｄの量に比較したキャッシュ２の相対的な大きさが、各アドレス部４Ａ〜Ｃの大きさを決定する。例えば、ある特定のメイン・メモリは、４メガ・ワード（２22ワード）を含み、２２ビット長のアドレスを必要とする場合がある。しかしながら、キャッシュ２内の各ウエイ８は、各々が４ワードの２５６データ・ブロックに保存された１キロ・ワード（２10ワード）のみを含むことがある。この場合、ブロック・オフセット部４Ｃが２ビットを含み（４（２2）ワードのうちの１つの位置を見つけるため）、インデクス部４Ｂが８ビットを含み（２５６（２8）データ・ブロックのうちの１つの位置を見つけるため）、タグ部４Ａが残りの１２ビットを含むであろう。インデクス部４Ｂは、メイン・メモリ・アドレス４において、ブロック・オフセット部４Ｃに隣接するビットから開始するように配置することができる。タグ部４Ａは、ブロック・オフセット部４Ｃにおいてもインデクス部４Ｂにおいても用いられないメイン・メモリ・アドレス４の残りのビット（Ｔ）を含む。通常、タグ部４Ａは、最も高い位置の値（「最上位ビット」）を割り当てられるメイン・メモリ・アドレス４のビットを含む。
【０００６】
データを検索するために、キャッシュ２は、インデクス部４Ｂを用いてデータ・ブロック６の行の位置を見つける。すなわち、インデクス部４Ｂを、インデクス０〜７と照合するインデクスルックアップ５として用いる。次いで、キャッシュ２は、タグ部４Ａを各データ・ブロック６に保存されたタグ６Ａと比較することによって、位置を見つけた行内のデータ・ブロック６のうちの１つが、与えられたメイン・メモリ・アドレス４のデータ６Ｄを含むか否かを判定する。正しいデータが存在する場合、所望の動作を実行する。ブロック・オフセット部４Ｃは、データ６Ｄ内のデータの位置を決定するために必要であるメイン・メモリ・アドレス４の多数のビット（Ｂ）を含む。通常、ブロック・オフセット部４Ｃは、最も低い位置の値（「最下位ビット」）を割り当てられるメイン・メモリ・アドレス４のビットを含む。各データ・ブロック６と共に、データ・ブロック６のデータ６Ｄがメイン・メモリ内のデータと一致するか否かを示すダーティ・ビット６Ｂ、データ・ブロック６が有効データを有するか否かを示す有効ビット６Ｃ等の他の情報を含ませることができる。
【０００７】
メイン・メモリ・アドレス４に位置するデータをキャッシュ２内にロードするために、インデクス部４Ｂを、データ・ブロック６の行に対するインデクスルックアップ５として用いる。ウエイ８のうちの１つにおいてデータ・ブロック（複数のデータ・ブロック）６を選択し、そのデータ・ブロック（複数のデータ・ブロック）６にデータをロードする。データ・ブロック６にデータをロードする場合、各データ・ブロック６のタグ６Ａにタグ部４Ａを書き込む。続いて検索のためにメイン・メモリ・アドレス４が与えられると、インデクス部４Ｂを再びインデクスルックアップ５として用いて、データを含む可能性があるデータ・ブロック６の行の位置を見つける。見つけた各データ・ブロック６のタグ部６Ａとタグ部４Ａを比較して、データ・ブロック６が要求されたデータを含むか否かを判定する。
【０００８】
「ライン幅」は、単一の動作においてメモリへまたはメモリから転送されるビット量である。通常、キャッシュ２へまたはキャッシュ２からデータを伝達するライン幅は、データ・ブロック６のデータ６Ｄの量に対応し、固定している。上述の例では、各データ・ブロック６は４ワードを含む。従ってライン幅は４ワードとなる。この結果、メモリ動作の間、各ウエイ８は個別にアクセスされる。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
所与のメモリ・サイズでは、大きなライン幅が有利である。なぜなら、データ動作を実行するために必要なメモリ動作が少ないからである。例えば、１ワードのライン幅を用いて１６ワードを読み取るためには、１６回の読み取り動作が必要である。同じ動作を４ワードのライン幅を用いて行うと、必要な読み取り動作は４回のみである。しかしながら、キャッシュを用い、ライン幅がデータ・ブロックの大きさに対応する場合、データ・ブロックが大きくなると、キャッシュ内にデータが保存されない可能性が高くなる恐れがある（すなわちキャッシュ・ミス）。キャッシュ・ミス率が高くなると、メイン・メモリとキャッシュとの間の転送が頻繁になり、性能が低下する。一般に、大きいライン幅を用いる場合は、多くのデータ動作を実行し局所性の低いコードを維持するタスクが有利であり、これによってキャッシュ動作の数を少なくする。逆に、コードの局所性がもっと広範である場合、もしくは多くのタスクが１つのキャッシュを共有する場合、またはその双方である場合、もっと小さいライン幅が望ましい。なぜなら、無関係の物理的アドレスからの追加のデータ・ブロックを保存することができるからである。しかしながら、現在の技術は、単一のメモリ（キャッシュ）に対して異なるライン幅に対応する。この問題は、異なるライン幅から利益を得るタスク、および異なる機能を実行する場合に異なるライン幅を用いることから利益を得るタスクにとって存在する。更に、単一のキャッシュについて異なるライン幅が利用できないことは、適正に機能するために特定のライン幅を必要とする／期待する場合がある特定のプロセッサ・アーキテクチャまたはレガシー・プログラム・コードに関して問題である。プロセッサもしくはタスクまたはその双方が１つのメモリを共有し、異なるライン幅を必要とする／期待する場合、この問題は深刻になる。
【００１０】
前述のことに鑑み、１つのメモリについてライン幅を選択的に変更する方法が要望されている。
【課題を解決するための手段】
【００１１】
本発明は、メモリに選択的なライン幅変更を提供する。ライン幅は、１つ以上のプロセッサとの通信を行う際に用いられる。これによって、メモリと通信を行うための柔軟性および効率が増す。特に、レジスタが、選択したライン幅を表す値を保存することができ、これをメモリ内のデータを管理する場合に用いる。プロセッサが、レジスタに書き込みを行って、ライン幅を選択することができる。メモリと通信を行う場合に用いられるライン幅を、レジスタ値に従って調節する。選択したライン幅を、メモリにおいて各データ・ブロックと関連付けて、多数のライン幅を同時に使用可能とすることができる。キャッシュにおいて実施される場合、キャッシュの多数のウエイ内のデータ・ブロックを１つのグループとして処理して、単一のメモリ動作の間にもっと広いライン幅を用いてデータを供給することができる。ライン幅は、処理システム、タスク、プロセッサ、もしくは性能評価またはそれら全てに基づいて、変更することができる。
【００１２】
本発明の例示的な態様を示し、本明細書中において記載する問題および当業者によって認められる開示していない他の問題を解決する。
【００１３】
本発明のこれらおよび他の特徴は、添付図面に関連付けて取り上げる本発明の様々な態様の以下の詳細な記載から、いっそう容易に理解されよう。
【００１４】
本発明の図面は、一定の縮尺率で描かれたものではないことに留意すべきである。図面は、本発明の典型的な態様を図示することのみを意図し、従って、本発明の範囲を限定するものとして見なすべきではない。図面において、同様の番号は複数の図面を通して同様の要素を表す。
【発明を実施するための最良の形態】
【００１５】
本発明は、メモリに対し、ライン幅の選択的な変更を提供する。すなわち、メモリと通信を行うために、複数のライン幅のうち１つを選択する。例えば、メモリがインストールされている処理システム、メモリにアクセスするプロセッサ、メモリを用いるタスク、もしくはメモリを用いている有効性の性能評価、またはそれら全てを含む多数のパラメータに基づいて、ライン幅を選択することができる。処理システムについては、本発明のメモリが処理システムにインストールされている場合、１つのライン幅を選択することができる。これによって、異なるライン幅を用いる様々な処理システムの１つに、同一のメモリを製造およびインストールすることができる。タスクまたはプロセッサについては、タスクのロード／アンロードの際、または、共有メモリにアクセスするいくつかのプロセッサの１つの開始／終了の際に、１つのライン幅を選択することができる。タスクが異なるライン幅を用いることができる選択的に変更可能なライン幅メモリを実施する場合、選択されたライン幅は、各タスクに関連付けられていなければならない。当技術分野において既知のように、ライン幅は、タスクをロードしている場合に選択することができ、他のタスク情報（例えばプログラム・カウンタ、レジスタ情報等）と共にタスクをアンロードしている場合にセーブすることができる。プロセッサ／タスクが特定のライン幅を選択しなかった場合、処理システムのためのデフォルトのライン幅を用いることができる。また、アクティブなタスクについて、ライン幅を変更することができる。例えば、１つ以上のコンパイラ指示文を組み込んで、プログラムのある部分のライン幅をソフトウエア開発者が再構成できるようにすることができる。例えば、SetCacheWidth#X命令は、所望のライン幅（Ｘ）を指定することができ、EndCacheWidth命令は、選択したライン幅をその前のサイズまたはデフォルトのサイズに戻すことができる。これによって、ソフトウエア開発者は、例えば、タスクの一部が入力された場合にもっと大きいライン幅を指定し、これが大量のデータを転送するので、より大きいライン幅が有利である。性能評価については、プロセッサ上で１つ以上のタスクを実行しているオペレーティング・システムが、メモリの非効率的な性能を検出することができ、アクティブなタスクもしくは他のタスクまたはその双方のライン幅を変更することができる。例えば、オペレーティング・システムは、キャッシュ・ヒット／ミス比を監視し、それが高すぎることを決定することができる。これに応答して、オペレーティング・システムは、キャッシュを用いたタスクの全部または一部について異なるライン幅を選択するようにコマンドを発することができる。
【００１６】
図面に移ると、図３は、本発明の様々な機構を実施する例示的な処理システム１０を示す。処理システム１０は、プロセッサ１２およびメモリ１４を含む。一般に、プロセッサ１２は、メモリ１４に保存されたデータに対して、読み取り、書き込み、削除等のメモリ動作を実行する。所望の動作を実行するため、プロセッサ１２は、アドレス線（複数の線）１６を用いてメモリ１４にアドレスを供給する。データは、データ線１８を用いて、プロセッサ１２とメモリ１４との間で伝達される。プロセッサ１２は、データ線１８の一部または全部を用いて、または図示しない１つ以上の動作線を用いて、所望の動作を伝達することができる。
【００１７】
キャッシュとして実施する場合、メモリ１４は、メイン・メモリ２０に保存されたデータの一部を保存する。動作において、メイン・メモリ２０は、プロセッサ１２によって実行されている１つ以上のタスクのために確保された１つ以上のメモリ・ブロック１３を含む。プロセッサ１２は、メイン・メモリ２０に保存されたデータのアドレスを供給する。メモリ１４は、最初に、メイン・メモリ２０のアドレスに基づいたデータのコピーを含むか否かを判定する。それを含む場合、メモリ１４内のデータに対して所望の動作を実行する。要求されたデータがメモリ１４に存在しない場合、メモリ１４は、動作を実行する前に、メイン・メモリ２０からデータを取得する。メモリ１４は、変更されたデータをメイン・メモリ２０に書き込んだ後に、そのデータを削除もしくは他のデータとスワップアウト（swapping out）するかまたはその双方を行う。
【００１８】
メモリ１４は、選択的に変更可能なデータ線１８のライン幅を用いて、プロセッサ１２と通信を行うことができる。選択的に変更可能なライン幅を実施するため、メモリ１４は、幅ユニット２２およびアドレス・ユニット２４を含むものとして図示する。幅ユニット２２は、例えばプロセッサ１２によって選択可能なデータ線１８のためのライン幅を保存する。アドレス・ユニット２４は、以下で説明するように、供給されたメイン・メモリ２０のアドレスおよび選択されたライン幅に基づいて、ルックアップを生成する。幅ユニット２２およびアドレス・ユニット２４はメモリ１４に含まれるが、ユニット２２、２４の機能性は、ソフトウエア（例えばプロセッサ１２において実行される）、ハードウエア、またはソフトウエアおよびハードウエアの組み合わせを用いて、メモリ１４内で、もしくはメモリ１４とは別に、またはその双方で、実施可能であることは理解されよう。更に、１つ以上の追加プロセッサすなわちプロセッサ２６が、１つ以上のメモリ・ブロック２８を確保して、１つ以上のタスクを実行すると共に、メモリ１４もしくはメイン・メモリ２０またはその双方と通信を行い、動作を実行可能であることは理解されよう。
【００１９】
図４は、ライン幅を選択的に変更することができる、本発明の１つの実施形態による、キャッシュ３０のためのアドレスルックアップの動作を示す。選択されたライン幅が、データ・ブロック３８のデータ３８Ｄの倍数である場合、多数のウエイ４０に配置されたデータ・ブロック３８は、１つのグループとして管理される。更に、ブロック・オフセット部３６Ｃ、インデクス部３６Ｂ、もしくはタグ部３６、またはそれら全てのサイズもしくは位置またはその双方は、選択されたライン幅に基づいて可変となる。
【００２０】
ライン幅の選択を実施するため、キャッシュ３０は、幅ユニット３２を含むものとして図示する。幅ユニット３２は、幅レジスタ４２を含む。これは、プロセッサ／タスクによって所望のライン幅を選択するように設定される。キャッシュ３０は、幅ユニット３２を用いてライン幅を決定する。選択したライン幅に基づいて、キャッシュ３０は、１つ以上のウエイ４０におけるデータ・ブロック３８を、可変サイズの単一のデータ・ブロックとして管理する。例えば、幅レジスタ４２が２2B+1ワードのライン幅（２データ・ブロック）を示す場合、ウエイ０およびウエイ１（図１）においてインデクス０に位置するデータ・ブロックが、２倍のサイズの単一データ・ブロックとして管理される。
【００２１】
対処しなければならない１つの問題は、幅を変更する場合、キャッシュ３０内のデータの一部または全部が、アクセス不可能もしくは無効またはその双方になる恐れがあることである。なぜなら、１つ以上のデータ・ブロックが正しいデータを含まない、もしくはデータが異なるデータ・ブロックに位置する、またはその双方の場合があるからである。例えば、ライン幅を１から２データ・ブロックに変更する場合、以前に単一データ・ブロックとして書き込んだデータは、二重データ・ブロックとして検索することができない。なぜなら、第２のウエイのデータ・ブロックは書き込まれていないからである。同様に、ライン幅を２データ・ブロックから１データ・ブロックに変更する場合、データを有する第２のデータ・ブロックは異なるインデクスに配置される。この結果、新たなライン幅を選択する場合、キャッシュ３０のデータの一部または全部が無効になる必要があり得る。
【００２２】
全てのデータを無効化するのを防ぐため、選択したライン幅を各データ・ブロック３８に関連付けて、どのライン幅によってデータ・ブロック３８を書き込んだかを後に判定することができるようにする。これによって、キャッシュ３０のデータがあらゆるライン幅変更によって無効になることなく、多数のプロセッサ／タスクが同時にキャッシュ３０を用いることができる。１つの実施形態では、選択したライン幅（例えば幅レジスタ４２の値）を、データ・ブロック３８にサイズ３８Ｅとして保存することによって、データ・ブロック３８に関連付ける。あるいは、幅レジスタ４２の値を、可能な各ライン幅に対応した異なる値にマッピングし、これをサイズ３８Ｅに保存して、選択したライン幅をデータ・ブロック３８に関連付けることができる。サイズ３８Ｅの値に基づいて、データ・ブロック３８が現在のライン幅によって書き込まれたか否か、および、タグ部分３６Ａがデータ・ブロック３８に保存されたタグ３８Ａと一致する場合に、現在のライン幅を使用可能であるか否かを判定することができる。多数のデータ・ブロック３８を１グループとして管理する場合、各データ・ブロックのオーバーヘッド（例えばタグ３８Ａ、ダーティ・ビット３８Ｂ、有効ビット３８Ｃ）は、第１のデータ・ブロック３８に書き込めば良いだけである。なぜなら、追加のデータ・ブロック３８のオーバーヘッドは、単に第１のデータ・ブロック３８のオーバーヘッドのコピーだからである。しかしながら、サイズ３８Ｅは、グループ内の全データ・ブロック３８に書き込まれるので、異なるライン幅サイズを用いた以降のアクセスは、データ・ブロックを使用済みもしくは無効またはその双方として認識する。あるいは、情報の一部または全部を、各データ・ブロック３８に書き込み続けることができる。例えば、データ・ブロック３８の全てよりも少ないものでデータ３８Ｄが変更されている場合、ダーティ・ビット３８Ｂを、各データ・ブロック３８ごとに別個に更新して、メイン・メモリにコピーするデータ３８Ｄの量を限定することができる。
【００２３】
また、キャッシュ３０は、インデクス部３６Ｂに基づいてルックアップ３７を生成してデータ・ブロック３８の位置を見つけるアドレス・ユニット３４を含む。アドレス・ユニット３４は、タスク／プロセッサのライン幅が変更される場合に、選択されたライン幅に基づいてインデクス部３６Ｂを変更して、データ・ブロック３８の一部または全部のデータが有効のままであることを可能とする。ライン幅を選択するため、幅レジスタ４２に適切なマスクを書き込む。幅レジスタ４２は、最大ライン幅（すなわちデータ・ブロックの最大数）が選択された場合にマスクされる（ゼロにセットされる）インデクス部３６Ｂの最大ビット数に対応したビット数（Ｅ）を含む。換言すると、Ｎ個のウエイを有するキャッシュでは、幅レジスタ４２は、log2(N)までのビット（Ｅ）を含む。アドレス・ユニット３４は、論理ＡＮＤゲート４４を含む。ＡＮＤゲート４４を用いて、インデクス部３６Ｂの最下位Ｅビットを、幅レジスタ４２の内容と論理的に組み合わせる。次いで、その結果をインデクス部３６Ｂの残りと組み合わせて、ルックアップ３７を生成する。次いで、ルックアップ３７を用いて、メイン・メモリ・アドレス３６のデータを含む可能性があるウエイ４０において、データ・ブロック３８の位置を見つける。
【００２４】
最大の８データ・ブロックを選択可能である場合、以下の例示的なテーブルによって幅レジスタ４２の値を供給する。行１に見られるように、１データ・ブロックのライン幅を選択する場合、インデクス部３６Ｂの全てのＩビットを用いるので、各データ・ブロックは別個にアクセスすることができる。最下位インデクス・ビットで開始して、ライン幅を２倍にするたびに、追加のインデクス・ビットをマスク（ゼロにセット）する。この結果、得られるルックアップ３７は、行２では偶数インデクスを付したデータ・ブロック、および行３では４データ・ブロックごとにアクセスする。８データ・ブロックのライン幅を選択する場合（最後の行）、インデクス部３６Ｂの最下位３ビットをマスクして、この結果、８データ・ブロックごとにアクセスする。グループのどのデータ・ブロック３８がデータ３８Ｄに所望のデータを含むかを判定するため、マスクしたインデクス・ビット（複数のビット）（２から４の行）が必要である。この結果、インデクス部３６Ｂのマスクしたビットは、ブロック・オフセット部３６Ｃの一部として見なすことができる（すなわちブロック・オフセット部３６Ｃのサイズがマスクしたビット数だけ増大する）。
【表１】
0004741844.tif 000002
【００２５】
図４と共に図５をルックアップすると、４つのタスクＡ〜Ｄの各々を実行した後のキャッシュ３０の例示的な部分が示されている。この例示的な部分は、４つのウエイ４０（ウエイ０からウエイ３）を含み、各々が、０〜７とインデクスを付した８のデータ・ブロック３８（図５のセルとして示す）を有する。キャッシュ３０の最初の図示は、タスクＡを実行した後のものである。タスクＡは１データ・ブロック３８のライン幅を用いるので（すなわち各ウエイが独立して管理される）、幅レジスタ４２は全て１にセットされ、このため、データ・ブロック３８を検索するためにルックアップ３７を生成する際、インデクス部３６Ｂの全てのＩビットが用いられる。この結果、タスクＡは、いずれかのウエイ４０に位置するいずれかのデータ・ブロック３８にデータを書き込むことができる。
【００２６】
タスクＢは、４つのデータ・ブロック（４ウエイ）のライン幅を用いる。この結果、タスクＢがキャッシュ３０からデータを読み出すたびに、所与のインデクスにおける全てのデータ・ブロックにおけるデータ３８Ｄを伝達する（すなわちウエイ０からウエイ３）。更に、タスクＢは、４データ・ブロック３８のライン幅を用いてキャッシュ３０と通信を行うので、幅レジスタ４２の最下位２ビットは、上述のようにゼロにセットされる。この結果、タスクＢのためのルックアップを生成する場合、アドレス・ユニット３４は、インデクス部３８Ｂの最下位２ビットをゼロにセットして、タスクのためキャッシュ３０の全てのデータを無効化することなく、ライン幅をタスクのため変更可能とする。従って、タスクＢは、図示するキャッシュ３０の一部において、インデクス０および４のデータ・ブロック３８にデータを書き込むことに限定される。
【００２７】
タスクＣは、２データ・ブロック３８（２ウエイ）のライン幅を用いる。この結果、幅レジスタ４２の最下位ビットはゼロにセットされるので、タスクＣのためのルックアップ３８を生成する場合、アドレス・ユニット３４はインデクス部３８Ｂの最下位ビットをゼロにセットする。タスクＣが実行した後、タスクＢのエントリの１つの一部をスワップアウトする（すなわちウエイ０およびウエイ１のデータ・ブロック０）。この結果、タスクＢのデータの残りは無効であり、もはやタスクＢによってアクセスすることはできない。
【００２８】
タスクＣが実行した後、タスクＡ、Ｂ、およびＣのデータ・ブロック３８は有効のままであり、各タスクごとに一意のライン幅を用いて各タスクによってアクセスすることができる。なぜなら、それらは他のタスクにスワップアウトしていないからである。同様に、タスクＤが１データ・ブロック３８のライン幅で実行した後、タスクＡおよびＣによって用いられる多数のデータ・ブロック３８は有効のままである。しかしながら、タスクＢが用いる１つのみのデータ・ブロックは有効のままである。なぜなら、タスクＢのためのインデクス０のデータがスワップアウトされているからである。また、いったんタスクＤがウエイ０のインデクス３のタスクＡのためのデータを上書きすると、全てのウエイにおけるインデクス３のデータ・ブロック３８のタスクＡのデータは無効化する。キャッシュ３０は、小さいライン幅（ヒットの可能性が高い）対大きいライン幅（動作数が少ない）で得られるトレード・オフを示す。更に、図示のように、キャッシュ３０は、様々なライン幅を組み込む多数のタスクのためのデータを同時に保存することができ、これによってキャッシュ３０を利用する効率が高くなる。
【００２９】
アクティブなタスクのためのライン幅を変更可能である場合、上述のように、このアクティブなタスクのためのデータを含むデータ・ブロック３８が無効になる場合がある。ライン幅間の効率的な遷移を保証するために、キャッシュ３０は、「ストアスルー」モードで動作することができる。ストアスルー・モードでは、キャッシュ３０は、タスク・スワップを待つことなく、またデータをスワップアウトすることもなく、メイン・メモリにいずれかの変更したデータを書き込む。これによって、それが生じる前にメイン・メモリに対する多数の書き込みを潜在的に必要とせずに、データ・ブロック３８を無効と示すことができる。更に、インデクス部３６Ｂがライン幅に基づいてマスクされる場合、ウエイ４０におけるデータの一部は、タスクのライン幅が変動する場合に有効のままでいることができる。タスクのためのデータの一部は、異なるライン幅について同一位置に保存される。例えば、タスクＢが図５において実行した後、タスクＢを２データ・ブロック（２ウエイ）のライン幅に変更した場合、ウエイ０およびウエイ１のインデクス０および４のデータ・ブロック３８のタスクＢデータは、有効で未使用のままである。この結果、このデータは、無効とマークする必要はなく、メイン・メモリからのロード動作を必要とする。
【００３０】
図４に戻ると、インデクス部３６Ｂにおけるビットをマスクする代わりに、アドレス・ユニット３４は、データ・ブロック３８の位置を見つけるためのルックアップ３７としてインデクス部３６Ｂを供給することができる。これは、異なるアドレス可能ワード・サイズを用いたプロセッサに基づいて幅レジスタ４２を変動させる場合に望ましいことがある。例えば、１バイト・ワードを有するプロセッサは、１データ・ブロック３８（１ウエイ４０）のライン幅を用いることができ、キャッシュ３０を、２データ・ブロック３８のライン幅を用いた２バイト・ワードを有するプロセッサと共用する。この構成では、１バイト・アドレス可能プロセッサは、データ・ヒットの可能性Ｎを有し（各ウエイ４０ごとに１の可能性）、一方、２バイト・アドレス可能プロセッサは、データ・ヒットの可能性Ｎ／２を有する（１対のウエイ４０ごとに１の可能性）。
【００３１】
タグ３８Ａが、タグ部３６Ａのコピー、または、指定されたメイン・メモリ・アドレス３６を１つ以上のデータ・ブロック３８に保存されたデータと照合することができるいずれかのデータを含むことは理解されよう。更に、メイン・メモリ・アドレス３６が、図示する部分３６Ａ〜Ｃの一部または全部を含む場合があることは理解されよう。例えば、各データ・ブロック３８が１ワードのサイズである場合、ブロック・オフセット部３６Ｃはゼロ・ビットである（すなわち含まれない）。更に、メイン・メモリ・アドレス３６におけるインデクス部３６Ｂおよびブロック・オフセット部３６Ｃの位置は、どのようにデータをキャッシュ３０に保存／アドレスするかに応じて逆にすることができる。
【００３２】
図６は、本発明の別の実施形態による代替的なキャッシュ１３０を示す。キャッシュ１３０は、選択したライン幅サイズには無関係に、全てのデータ・ブロック３８に対するアクセスを可能とする。この結果、より大きなライン幅を用いたタスク／プロセッサは、図４をルックアップして上述したように、限られた数のデータ・ブロック３８ではなく、キャッシュ１３０内の全てのデータ・ブロック３８にアクセスすることができる。キャッシュ１３０において、インデクス部３６Ｂは、選択したライン幅に基づいてメイン・メモリ・アドレス３６に配置される。幅ユニット３２は、図４をルックアップして上述したものと同じように動作する幅レジスタ４２を含む。アドレス・ユニット１３４は、タグ１３９を生成する論理ＡＮＤゲート４４を含む。タグ１３９は、データ・ブロック３８におけるタグ３８Ａと比較され、タグ３８Ａとして保存される。アドレス・ユニット１３４は、更にシフト回路１４６を含み、データ・ブロック３８の位置を見つけるためのルックアップ１３７を生成する。
【００３３】
インデクス部３６Ｂの全てのＩビットおよびタグ部３６Ａの最下位Ｅビットは、幅レジスタ４２の値と共にシフト回路１４６に供給される。幅レジスタ４２の値に基づいて、供給される値はゼロまたはそれ以上のビットだけ右にシフトする。例えば、組み合わせたインデクス部３６Ｂのビットおよびタグ部３６Ａの最下位Ｅビットを、ゼロの値を有する（マスクアウトされた）幅レジスタ４２において、各ビットごとに１ビットずつ右にシフトすることができる。いったんシフトされると、残っている最下位Ｉビットをルックアップ１３７として用いて、データ・ブロック３８の位置を見つける。この結果、ルックアップ１３７は常に、マスクアウトされていないＩビットを含み、従って、データ・ブロック３８のためのインデクスは全てアクセス可能である。この後、右にシフトしたいずれかのビットは、上述のように、ブロック・オフセット部３６Ｃの一部として使用可能である。
【００３４】
また、タグ部３６Ａの最下位Ｅビットを、ＡＮＤゲート４４に供給し、幅レジスタ４２を用いてマスクする。次いで、マスクしたビットをタグ部３６Ａの残りのビットと組み合わせて、タグ１３９を生成する。タグ１３９をタグ３８Ａと比較するか、もしくはタグ３８Ａにコピーするか、またはその双方を行う。これによって、右にシフトされルックアップ１３７で用いられたタグ部３６Ａの最下位ビットを、タグの一部として用いられる前にゼロにする。この結果、メイン・メモリ・アドレス３６が供給された場合、ビットは２度用いられない。すなわち、１回はルックアップ１３７の一部として、次いでタグ１３９の一部としては用いられない。
【００３５】
２つの実施形態に対して、様々な代替が可能であることは理解されよう。例えば、図６に示すアドレス・ユニット１３４もしくは幅ユニット３２またはその双方は、論じた様々な実施形態間で動作を切り替える回路もしくはソフトウエアまたはその双方を含むことができる。例えば、幅ユニット３２は、ワード・サイズを選択するためのレジスタを含むことができる。この選択および幅レジスタ４２の値に基づいて、アドレス・ユニット１３４の動作を変更することができる。また、選択したワード・サイズは、サイズ３８Ｅ（すなわち各データ・ブロック３８によって保存される）と同様に各データ・ブロック３８に関連付けることができる。この機能性を組み込むことによって、異なるアドレス可能ワード・サイズを用いてプロセッサ上で実行するタスクは、様々なライン幅サイズを選択することができる。更に、メイン・メモリ・アドレス３６ビットのマスキングは必要ないことは理解されよう。例えば、アドレスルックアップ動作は、不必要なビットを無視することができる。
【００３６】
この文脈において、コンピュータ・プログラム、ソフトウエア・プログラム、プログラム、またはソフトウエアが意味するのは、いずれかの言語、コード、または表記での、１組の命令のいずれかの表現であり、情報処理機能を有するシステムに、直接、または以下のいずれかもしくは双方の後に特定の機能を実行させるように意図されている。すなわち、（ａ）別の言語、コード、または表記への変換、もしくは（ｂ）異なる材料形態での再生、またはその双方である。本発明の様々な態様の前述の記載は、例示および説明の目的のために提示した。網羅的であることや、本発明を開示した形態に限定することは意図しておらず、明らかに、多くの変形および変更が可能である。当業者に明らかであり得るかかる変形および変更は、添付図面によって規定される本発明の範囲内に含まれることが意図される。
【産業上の利用可能性】
【００３７】
本発明は、処理システムにおいてキャッシュ等のメモリにアクセスするために有用である。
【図面の簡単な説明】
【００３８】
【図１】従来技術のキャッシュを示す。
【図２】従来技術のキャッシュのためのアドレスルックアップ動作を示す。
【図３】本発明の１実施形態に従った例示的なシステムを示す。
【図４】本発明の実施形態に従ったキャッシュのアドレスルックアップ動作を示す。
【図５】様々なタスクを実行した後のキャッシュの例示的な部分を示す。
【図６】本発明の別の実施形態に従ったキャッシュのアドレスルックアップ動作を示す。
【図１】
0004741844.tif 000003
【図２】
0004741844.tif 000004
【図３】
0004741844.tif 000005
【図４】
0004741844.tif 000006
【図５】
0004741844.tif 000007
【図６】
0004741844.tif 000008