本発明の様々な実施形態の説明が例示の目的で提示されることになるが、網羅的であるとは、または開示される実施形態に限定されるとは意図されない。記載される実施形態の範囲および思想から逸脱することなく、多くの変更および変形が当業者にとって明らかであろう。本明細書で使用される技術用語は、実施形態の原理、実際的応用もしくは市場で見つかる技術に対する技術的改良を最もよく説明するように、または当業者が理解することを可能にするように選ばれた。
キャッシュ・メモリはセット・アソシアティブ・キャッシュである。
本方法は、全ての変換関連情報をL1キャッシュに記憶する論理インデックス付き、論理タグ付きディレクトリを使用する。できる限り多くの電力を節約するために、本方法は、セット・ディレクトリを使用して、その他のL1キャッシュ構造に対する潜在的なヒット・セットを選択している。セット・ディレクトリはキャッシュ・アレイ遅延選択として使用され、それ故に従前の設計と比較して電力および領域予算を増すことはない。セット・ディレクトリを使用して、更なる電力を節約するために、従前のセット・アソシアティブ・ディレクトリ構造の代わりに「垂直スタック」ディレクトリ(すなわち有効化ディレクトリ)が使用される。結果として、常に一度に1つのセットだけが読み出されることができる一方で、先行技術では所与のインデックスに属する全てのセットが並列に読み取られ得る。例えば、キャッシュ・ディレクトリがシノニム問題を解決するために使用されることができるので、有効化ディレクトリ・セットは並列にアクセスされる必要はなくてもよい。
本方法は、L1キャッシュ・ヒットがより高レベルのキャッシュからの有効化を必要とする先行技術の方法と比較して高速アクセス時間および更に低い電力消費の改善されたセット・アソシアティブ・キャッシュ・メモリを提供する利点を有することができる。
その比較的大きなサイズのため、TLBは通常、メモリ・アレイに近接して配置されることができない。結果として、セット・アソシアティブ・キャッシュ・メモリの総キャッシュ・アクセス時間は、そのTLBおよびメモリ・アレイのサイズと共に増加する。本方法は、論理タグ付きかつ論理インデックス付き有効化ディレクトリを使用し、したがってL1キャッシュ・ヒット信号発生のためにTLBに給電する必要を回避することができる。
一実施形態によれば、第2の検索がセットにおけるキャッシュ・ラインの存在を確認しない場合、ミス信号を発生する。ミス信号は、要求された実効アドレス(論理または仮想アドレスとも称される)に対するキャッシュ・ミスを示すキャッシュ・ミス信号である。キャッシュ・ミス信号は、第1の検索がセット・ディレクトリに要求された論理アドレスを見つけることに失敗した場合にも発生されてもよい。発生されたミス信号に応答して、要求されたキャッシュ・ラインは、より高いキャッシュ・レベルにおいてまたはメインメモリ(例えばRAM)において検索されてもよい。
一実施形態によれば、キャッシュ・メモリは変換ルックアサイド・バッファTLBを更に備えており、1次キャッシュ・ディレクトリにおける所与のエントリが有効ビット、実効アドレスの一部分およびセット・インデックスを記憶しており、第2の検索がセットにおけるキャッシュ・ラインの存在を確認しない場合、本方法は、1次キャッシュ・ディレクトリにおいてライン・インデックス・ビットを検索して、1次キャッシュ・ディレクトリにおける各セットに対する論理ポインタに帰着することであって、論理ポインタがセット・インデックスおよび実効アドレスの一部分を備える、ことと、論理ポインタのうちセット・インデックスがセット識別子に一致する論理ポインタを選択することと、実効アドレスと関連する絶対アドレスを特定するためにTLBにおいて実効アドレスを検索することと、キャッシュ・メモリのより高レベルの2次キャッシュ・ディレクトリにおける各セットにおける実効アドレスに対応するエントリであって、他の絶対アドレスを備える、エントリを得るために2次キャッシュ・ディレクトリにおいて実効アドレスを検索することと、2次キャッシュ・ディレクトリの各得られた絶対アドレスをTLBの絶対アドレスと比較して、2次キャッシュ・ディレクトリのセットの他のセット識別子に帰着することと、他のセット識別子を有する2次キャッシュ・ディレクトリのセットのエントリの論理アドレスを選択された論理ポインタと比較し、そして比較結果に基づいてミス信号を確認するまたはセットおよび有効化ディレクトリを更新することとを更に含む。
TLBおよびより高レベルのキャッシュは例えば、より低レベルのキャッシュにおけるキャッシュ・ミスの場合に使用される。これは、より低いキャッシュ・レベルでのキャッシュ・ミスの信頼できる有効化または確認を提供してもよい。
一実施形態によれば、1次キャッシュ・ディレクトリの検索は第1の検索と並列に行われる。この実施形態は、データへのアクセスを更に高速化することができる。
一実施形態によれば、本方法は、論理ポインタの有効ビットが有効状態に設定されている場合にヒット信号の発生が行われることを更に含む。有効ビットは、キャッシュ・ラインにおけるデータが有効であるか否かを示す情報のビットである。これは、さもなければ無効化されたデータにアクセスして、引き起こされる訂正を処理するために必要とされるであろう処理時間を更に節約することができる。
一実施形態によれば、TLBにおける検索および2次キャッシュ・ディレクトリにおける検索は並列に行われる。この実施形態は、データへのアクセスを更に高速化することができる。
一実施形態によれば、第1の群のビットはタグ・フィールドからの最下位ビットであり、そして第2の群のビットはタグ・フィールドからの最上位ビットである。第2の群のビットは、セット・ディレクトリの検索結果を確認するために第1の群のビットに相補的であってもよい。例えば、実効アドレスが0:49ビットのタグ・フィールドを有する場合、第1の群のビットは37:49であってもよく、そして第2の群のビットは0:36であってもよい。しかしながら、タグ・フィールド0:49のいかなる部分集合でも第1または第2の群のビットとして使用されることができる。第1の群のビットの幅(すなわちビット数)は、誤った予測(あまり小さくない)とタイミング(あまり広い比較でない)制約との間のトレード・オフに基づいてもよい。第1の群のために実効アドレスのライン・インデックス(50:55)の隣のビットを使用することは、それが小さなメモリ・フットプリントのプログラムのためにも働くので、有益であり得る。例えば、ビット0:12が第1の群のために使用される場合、巨大なプログラムだけが0:12で異なる実効アドレスを有することができ、通常サイズのプログラムは1つのセットを使用し得るだけであるので、大抵のプログラムはn-way(例えばn=8)連想を使用することができない可能性がある。言い換えれば、第1の群のビット(例えば37:49)は、それらが大抵のメモリ・アクセスに対して異なるがライン・インデックスと重複しないように選ばれる。
一実施形態によれば、有効化ディレクトリは、キャッシュ・メモリの全てのセットの各キャッシュ・ラインごとに1つのディレクトリ・エントリを保持する1つの物理アレイ構造から構築される。この実施形態は、一度に1つのセットだけが読み出されることができることを可能にしてもよい一方で、先行技術では所与のインデックスに属する全てのセットが並列に読み取られ得る。この実施形態は、したがってデータへのアクセスを更に高速化することができる。例えば、セット・ディレクトリの結果(例えばセット識別子)は、有効化ディレクトリを検索するためのライン・インデックス(例えばビット50:55)への拡張として使用されてもよい。
一実施形態によれば、1次キャッシュ・ディレクトリにおける所与のエントリが有効ビット、実効アドレスの一部分およびセット・インデックスを記憶しており、本方法は、第1の検索と並列に、1次キャッシュ・ディレクトリにおいてライン・インデックス・ビットを検索して、1次キャッシュ・ディレクトリにおける各セットに対する有効ビット値に帰着することと、有効ビット値のうち関連するセット・インデックスがセット識別子に一致する有効ビット値を選択することであって、有効ビット値が有効状態を示す場合にヒット信号の発生が行われる、こととを更に含む。これは、さもなければ無効化されたデータにアクセスして、引き起こされる訂正を処理するために必要とされるであろう処理時間を更に節約することができる。
一実施形態によれば、1次キャッシュ・ディレクトリはL1レベル・キャッシュ・ディレクトリである。一実施形態によれば、2次キャッシュ・ディレクトリはL2レベル・キャッシュ・ディレクトリである。これらの実施形態は、従来のシステムにシームレスに統合されてもよい。
一実施形態によれば、キャッシュ・メモリは、2次キャッシュ・ディレクトリを更に備えるマルチ・レベル・キャッシュ・ディレクトリである。キャッシュ・メモリはセット選択メモリである。
一実施形態によれば、1次キャッシュ・ディレクトリにおける所与のエントリが有効ビット、実効アドレスの一部分およびセット・インデックスを記憶する。本方法は、実効アドレスの第2の実効アドレス・シノニムを受けることと、第2の実効アドレスを使用して第1および第2の検索を繰り返すことと、第2の検索が第2の実効アドレスによって参照されるキャッシュ・ラインの存在を確認しない場合、第2の実効アドレスに対応するセット・ディレクトリのエントリを無効化することと、ミスを検出するために第2の実効アドレスを使用して第1の検索を行うことと、1次キャッシュ・ディレクトリにおいて第2の実効アドレスを検索して、1次キャッシュ・ディレクトリにおける各セットに対する論理ポインタに帰着することであって、論理ポインタがセット・インデックスおよび第2の実効アドレスの一部分を備える、ことと、キャッシュ・メモリのより高レベルの2次キャッシュ・ディレクトリにおける各セットにおける第2の実効アドレスに対応するエントリを得るために2次キャッシュ・ディレクトリにおいて第2の実効アドレスを検索することと、2次キャッシュ・ディレクトリのセットのエントリの論理アドレスを論理ポインタの各々と比較し、そして比較結果に基づいて1次キャッシュ・ディレクトリにおけるキャッシュ・ラインの存在を確認することと、実効アドレスに関連したエントリを第2の実効アドレスで上書きすることによってセットおよび有効化ディレクトリを更新することと、第1の検索、第2の検索および条件付きヒット信号の発生を繰り返すこととを更に含む。この実施形態は、キャッシュ・メモリでのシノニム問題を効率的に解決する利点を有することができる。それは、次のレベルのキャッシュに依存することによってシノニム問題を解決する。それは、L1キャッシュ・ディレクトリを使用してL1キャッシュおよびL2キャッシュを結びつける。
図1は、本開示の一例に従ってコンピュータ・システム100を例示する。コンピュータ・システム100は、International Business Machines(IBM(R))によって提供されるz/Architecture(R)に基づいてもよい。コンピュータ・システム100はセット・アソシアティブ・キャッシュ・メモリ構造を使用してもよい。コンピュータ・システム100は、少なくとも1つの処理ユニット101を備える。処理ユニット101は、入出力(I/O)デバイス114(表示モニタ、キーボードおよび永久記憶デバイスなど)、プログラム命令を実行するために処理ユニットによって使用されるメモリ・デバイス116(ランダム・アクセス・メモリまたはRAMなど)、ならびに主要目的が、コンピュータが最初にオンにされるたびに周辺機器の1つを捜してそれからオペレーティング・システムをロードすることであるファームウェア118を含め、様々な周辺デバイスに接続されてもよい。処理ユニット101は、汎用インターコネクトまたはバス120を含め、様々な手段によって周辺デバイス(例えばファームウェア118、入出力デバイス114およびメモリ116)と通信する。
処理ユニット101は、コンピュータを動作させるためにプログラム命令を実行する複数のレジスタおよび実行ユニットを有するプロセッサ・コア122を含む。例証的な処理ユニットには、International Business Machines Corporationによって市販されるPowerPC(TM)プロセッサを含む。処理ユニット101は、1つまたは複数のキャッシュも有することができる。例えば、処理ユニット101は、2つのキャッシュ126および130を備えるとして図示される。キャッシュは、メモリ116から値をロードするより長いステップを回避することによって処理を高速化するために、プロセッサによって繰り返しアクセスされる可能性がある値を一時的に記憶するために使用される。
キャッシュ126および130は、プロセッサがメモリ116から前もって転送されたデータまたは命令の部分集合への比較的高速アクセス時間を達成することを可能にするセット・アソシアティブ・キャッシュである。
キャッシュ126はプロセッサ・コア122と一体的にパッケージされてもよい。キャッシュ126は、高速メモリ・デバイスを使用して実装される命令アレイ(図示せず)およびデータ・アレイ141を備えてもよい。命令およびデータは、オペランドが命令対データである演算をプロセッサ・コアが要求しているかどうかを示す信号を調べることによって、それぞれのキャッシュに向けられてもよい。キャッシュ126は、データ・アレイ141と関連するキャッシュ・ディレクトリ142を更に備えてもよい。例えば、データ・アレイ141における各キャッシュ・ラインは、キャッシュ・ディレクトリ142に対応するエントリを有する。キャッシュ・ディレクトリ142は、実効アドレスによって特定されるデータがデータ・アレイ141に記憶されているかどうかを示してもよい。例えば、実効アドレスを参照するプロセッサ命令がキャッシュ126に提供されることができる。実効アドレスがキャッシュ・ディレクトリ142にある場合、プロセッサは、アクセス基準が満たされていることを条件として、それがデータ・アレイ141から参照されたデータを得ることができると知っており、アクセス基準は有効ビットが設定されていること等を要求してもよい。例えば、実効アドレスは、タグ・フィールド、ライン・インデックス・フィールドおよびバイト・フィールドを含む。実効アドレスのタグ・フィールドは、本明細書に記載されるようにキャッシュ「ヒット」情報を提供するために活用される。実効アドレスのライン・インデックス・フィールドは、ライン・インデックス・フィールドによってインデックス付けされる、例えばデータ・キャッシュ・アレイ141内のN個のキャッシュ・ラインを得るために活用され、NはN-アソシアティブ・キャッシュ・メモリにおけるセット数である。N個のキャッシュ・ラインの1つがセット識別子を使用して選択されてもよく(遅延選択の一部として)、そして実効アドレスのバイト・フィールドは、選択されたキャッシュ・ライン内の特定のバイトにインデックス付けするために活用される。
データ・アレイ141およびキャッシュ・ディレクトリ142は、例えば、4Mまたは8M個のチップ・アレイの構成で容易に入手可能であるように、従来のメモリ・アレイから構築されてもよい。キャッシュ126は、例えばプロセッサ・コア122とキャッシュとの間のデータの転送を管理するキャッシュ・コントローラ(図示せず)と関連付けられる。
データ・キャッシュ・アレイ141は、様々なデータ値を個々に記憶する多くのキャッシュ・ラインを有する。キャッシュ・ラインは、「セット」と呼ばれるキャッシュ・ラインの群へ分けられる。例証的なキャッシュ・ラインは、状態ビット・フィールド、排他性ビット・フィールド、および実行命令またはデータを記憶するための値フィールドを含む。状態ビット・フィールドおよび包括性ビット・フィールドは、マルチプロセッサ・コンピュータ・システムにおけるキャッシュ・コヒーレンシを維持するために使用される。アドレス・タグは、対応するメモリ・ブロックの完全アドレスの部分集合である。アドレス・タグ・フィールド内のタグの1つとの到来する実効アドレスの比較一致がキャッシュ「ヒット」を示す。キャッシュにおけるアドレス・タグ(ならびに時に状態ビットおよび包括性ビット・フィールド)の全ての集合がディレクトリと称され、そして値フィールドの全ての集合がキャッシュ・エントリ・アレイである。
キャッシュ126はレベル1(L1)キャッシュと称されてもよく、そしてキャッシュ130は、それが(L1)キャッシュ126をサポートするので、レベル2(L2)キャッシュと称されてもよい。例えば、キャッシュ130は、メモリ116とL1キャッシュとの間の媒介として作用してもよく、そしてより長いアクセス・ペナルティではあるが、L1キャッシュができるより大量の情報(命令およびデータ)を記憶することができる。例えば、キャッシュ130は256または512キロバイトの記憶容量を有してもよい一方で、L1キャッシュは64キロバイトの総記憶を有してもよい。キャッシュ130はバス120に接続され、そしてメモリ116からプロセッサ・コア122への情報の全てのロードがキャッシュ130を通して起こってもよい。図1が2レベル・キャッシュ階層だけを描くとはいえ、多レベルの直列に接続されるキャッシュがあるマルチ・レベル・キャッシュ階層が提供されることができる。例えば、処理ユニット101の部品は単一の集積チップにパッケージされてもよい。
図1には、実効アドレスを対応する絶対アドレスに変換するための変換ルックアサイド・バッファ(TLB)143も図示される。詳細には、TLB143は、実効アドレスのページ番号部分を対応する実ページ番号に変換してもよい。例えば、実効アドレスのタグ・フィールドがTLB143に送られて、対応する実ページ番号に変換されてもよい。
他の例では、コンピュータ・システム100は、第1のもの(TLB1)が第1のレベルのバッファであり、そして第2のもの(TLB2)が、上記第1のものに見つからないアドレスの場合に第1のものにアドレス情報を供給するように配置される第2のレベルの変換ルックアサイド・バッファである、少なくとも2つの変換ルックアサイド・バッファを備えてもよい。例えば、メモリにおけるアドレス変換テーブルは多段構造であってもよい。例えば、2段テーブルの場合、第1レベルのテーブルは、セグメント・テーブルと呼ばれており、エントリを含み、各々ポイントによってMBのメモリを第2レベルのテーブルにマッピングし、これはページ・テーブルと呼ばれており、4KBのメモリをマッピングする256個のエントリを含む。TLB2は2種類のエントリ:1MBセグメントおよび個々の4KBページを有してもよい。第1レベルTLB(TLB1)で変換が入手可能でない場合、必要とされる変換を提供する4KBページ・エントリを求めてTLB2が検索される。そうでなければ、TLB2は、変換されることになるアドレスを含むセグメントのためのセグメント・エントリを求めて検索される。そのようなエントリが見つけられれば、メモリにおけるセグメント・テーブルにアクセスしなくても適切なページ・テーブルが直接アクセスされることができるので、メモリにおける両テーブルを使用する変換は省かれる。そして、TLB1はエントリの2次元アレイ、例えば、32エントリ長かつ4エントリ幅を備えてもよい。各エントリは、変換された仮想アドレスおよびそれが変換した実アドレスを含む。この例では、TLB143はTLB1であってもよい。
一例では、コンピュータ・システム100は、IBM(R)のz/VM(R)などの仮想化環境におけるハードウェア資源として使用されてもよい。例えば、処理ユニット101は、仮想マシンまたは論理区画においてハイパーバイザ下で実行するゲストから要求を受けてもよい。
図2は、本開示の一例に従って実効アドレス(または論理アドレスもしくは仮想アドレス)201を介して2レベル・キャッシュを持つキャッシュ・メモリのキャッシュ構造200にアクセスするための図を例示するブロック図である。キャッシュ・メモリは、例えばL1キャッシュにmセットおよびL2キャッシュにnセットを備えるセット・アソシアティブ・キャッシュである。mはnに等しくても等しくなくてもよい。キャッシュ構造200は、L1キャッシュ226およびL2キャッシュ230を備える。L1キャッシュ226は、図1を参照しつつ記載されるように、データ・キャッシュ・アレイ141およびキャッシュ・ディレクトリ142を備える。図2では、L1キャッシュ226はセット・ディレクトリ203および有効化ディレクトリ205を更に備える。L2キャッシュ230はキャッシュ・ディレクトリ242およびキャッシュ・アレイ(図示せず)を備える。
セット・ディレクトリ203は、実効アドレス201のライン・インデックス・フィールド210のライン・インデックス・ビットを使用して論理的にインデックス付けされ、かつ実効アドレス201のタグ・フィールド212の第1の群のビット212aを使用して論理的にタグ付けされる。有効化ディレクトリ205は、実効アドレス201のライン・インデックス・フィールド210のライン・インデックス・ビットおよびセット・ビットを使用して論理的にインデックス付けされる。有効化ディレクトリ205は、実効アドレス201のタグ・フィールド212の第2の群のビット212bを使用して論理的にタグ付けされる。第1および第2の群のビット212aおよび212bは例証目的で非重複に図示される。しかしながら、第1の群および第2のビットは重複してもよい。例えば、第2の群のビットは、緩和された、例えばセット・ディレクトリおよび有効化ディレクトリが常に厳密に同期している必要がないことを許容する、セット・ディレクトリ更新規則を有することを可能にすることができるビット0:49から成ってもよい。
セット・ディレクトリ203の各エントリは少なくとも第1の群のビット212aおよび有効ビットを備える。例えばプロセッサ・コアがスレッド(例えばスレッドth1およびth2)をサポートする場合、エントリは各スレッドと関連する有効ビットを備えてもよい(例えば、エントリは次の通りであってもよい:LA.37:49,th0 vld,th1 vld)。有効化ディレクトリ205の各エントリは少なくとも第2の群のビットを備える。一例では、有効化ディレクトリ205のエントリは有効ビット、排他性ビットおよびキーを更に備える。有効ビットは、エントリが有効であると示す。排他性ビットは、キャッシュ・ラインが排他的に所有されていると示す。それが排他性ビットと呼ばれるのは、1つのコアがラインを排他的に有する場合、他のいかなるコアも関連ラインのコピーを有することができないからである。キャッシュ・ラインは、データが変更されると排他的に要求される。そして多くのコアがラインをリード・オンリ状態で有することができる。キーは保護のための記憶キーであり、そして任意の他の種々の情報の集合を含んでもよい。一例では、有効化ディレクトリ205のエントリはASCE要素およびREAL要素を更に備えており、ASCEはアドレス空間制御要素(動的アドレス変換テーブルへのポインタ)を指し、そしてREAL要素は、エントリが実のエントリであることを示す。
L1およびL2キャッシュ・アレイ141はメモリ116からのデータ・コピーを保持し、そしてL1およびL2ディレクトリ142および242における各エントリは第2の群のビット212b、アドレス空間識別子等を保持する。L1ディレクトリ142は例えば以下のフィールドを含む:有効ビット、論理アドレス、例えば45:49、およびL2セットID。有効ビットは、L1ディレクトリ・エントリが有効であるまたは有効でないと示す。論理アドレス45:49は、L2ディレクトリのアクセスを許容するL1論理アドレス50:55の拡張である。L2セットIDは、どのL2ディレクトリ・セットがL1キャッシュ・エントリを含むかを特定する。例えば、L1ディレクトリ142のエントリは次の通りであってもよい:set0-L2CC(45:49),th0 logdir vld,th1 logdir vld,ptrdir vld、ここでL2CC(45:49)は実効アドレス(論理アドレスとも称される)のビット45:49である。データのためのL2がサイズ4Mである一方で、命令のためのL2はサイズ2Mであるので、ビット45はデータ・キャッシュのためだけに記憶される。「logdir vld」は、L1キャッシュに記憶されている変換が有効であることを示す。「ptrdir vld」は、L1キャッシュにおけるデータが有効であることを示す有効ビットである。ビット「45:49」ビットは例えばキャッシュ・サイズ(例えば行数)から導出されてもよい。例えば、L1キャッシュがセットごとに64行を有する場合、ライン・インデックスは50:55であり、そしてL2がセットごとに1024行を有する場合、インデックス付けはより広くなり、インデックス45:55に帰着してもよい。しかしながら、L1ディレクトリが既に50:55でインデックス付けされているので、L2座標を指すことは、L1ディレクトリのエントリにLA.46:49だけおよびL2セットIDを維持することによって行われてもよい。
図2の説明を簡易化するために、L1キャッシュの簡易例が考えられてもよい。この例では、L1キャッシュは64行で8セット(すなわちm=8)を有し、そしてキャッシュ・ラインは64ビット(0:63)を有する論理アドレス(略してLA(0:63))を使用してアドレスされる。したがって、この例のライン・サイズは256バイトである。この例では、セット・ディレクトリ203はタグ(第1の群のビット)としてLA(37:49)を使用してもよい。有効化ディレクトリ205のタグは、LA(0:49)またはLA(0:36)に加えて、異なるアドレス空間の間を区別するために必要とされる追加情報であってもよい。
有効化ディレクトリが行ごとに1つのディレクトリ・エントリを保持する1つの物理アレイ構造から構築されるので、有効化ディレクトリ205は「スタック」論理ディレクトリと称されてもよい。上記例に従って、有効化ディレクトリは、各々64行を有する8つのアレイ構造の代わりに、8×64行=512行から成る。そのような構造の利点は、アレイ行が限定数のビットだけを有することができる(物理的理由で)ことであってもよい。より多くの行を追加することは、行の幅を延長することまたはより多くのアレイ構造を追加することに対して、比較的低オーバーヘッドで済む。「スタック」手法は、それが使用する領域および電力が少なくなるので、有利であり得る。L1キャッシュ・ディレクトリ142は、しかしながら、各々64行を有する8つのアレイ構造を有する。
図2は、L1キャッシュ・ディレクトリ142およびL2キャッシュ・ディレクトリ242の構造の詳細を更に例示する。L1キャッシュ・ディレクトリ142は、複数のL1セット、例えばm個のL1セットおよびそれぞれのコンパレータL1CP1-L1CPmを持つセット・アソシアティブ・ディレクトリ構造から成る。L2キャッシュ・ディレクトリ242は、複数のL2セット、例えばn個のL2セットおよびそれぞれのコンパレータL2CP1-L2CPnを持つセット・アソシアティブ・ディレクトリ構造から成る。L2キャッシュ・ディレクトリ242は、インデックスとして実効アドレス201の一部を、およびタグとして絶対アドレスを使用している。
例えば、L2ディレクトリのエントリは以下を備えてもよい:「set0-AA.17:51」、ここでset0はエントリを備えるセットのセット・インデックスであり、AAはL2ディレクトリにインデックス付けするために使用される実効アドレスと関連する絶対アドレスである。他の例では、L2ディレクトリのエントリは2つの追加要素「キー(0:3),FP」を更に備えてもよく、ここで「キー」は、コンピュータ・システム100の動作のアーキテクチャ原理(例えばz/Architecture(R))に記載される規則に従って合致する必要がある4ビット・タグであり、そしてFP(取出し保護)はキー比較を可能にする。
キャッシュ構造200は、TLB143を更に備える。
キャッシュ・ルックアップでは、セット・ディレクトリ203はインデックスLA(50:55)および第1の群のビットLA(37:49)を入力として受け、そしてセット・ディレクトリ203は、要求されたキャッシュ・ラインを保持する、Set(0:7)と称されるセットIDを有するセットを生成または予測する。例えば、セット・ディレクトリ203は、セットIDを見つけるために検索されてもよい。インデックスLA(50:55)に加えてセットID(Set(0:7))を使用して、有効化ディレクトリ205は、タグ比較220を使用してキャッシュ・ヒットを確認するためにルックアップされて、有効化ディレクトリ205における対応するディレクトリ・エントリを特定することに帰着してもよい。例えば、そのために、セット・ディレクトリ203によって決定されたセットIDは8つの64行セクションのうちの1つを選択するために使用され、そしてLA(50:55)はセクション内の行を選択するために使用される。
セット・ディレクトリ203を検索することと並列に、L1キャッシュ・ディレクトリ142は、このディレクトリ・エントリに対する有効ビットを取り出すためにルックアップされる。複数のエントリがすぐに無効化されなければならない可能性があるので、有効部分はL1キャッシュ・ディレクトリ142の一部である。タグ比較220がヒット244となり、かつ有効ビットが設定されていれば、有効比較240がキャッシュ・ヒットと判明されたことを示す。そうでなければ、キャッシュ・ミス245と判明されてもよい。データ・アレイ141は、セット・ディレクトリ203からセット識別子を受けてもよく、そして実効アドレス201のライン・インデックス210およびバイト・オフセット213ならびにセット識別子を使用して要求されたキャッシュ・ラインのデータを提供してもよい。キャッシュ・ミスの場合、提供されるデータがキャッシュ・ミスに対応することを示すために警告が提供されてもよい。
キャッシュ・ミス245と判明された場合にまたはセット・ディレクトリ203における検索が失敗した(キャッシュ・ミスに帰着した)場合にだけ、図2の下部におけるデータ構造が関与されることになる。すなわち、TLB143は実効アドレス201を使用して、およびヒット比較251を使用して(論理アドレス201の一部およびアドレス空間識別子などの変換関連情報を含む)ルックアップされ、要求に対する絶対アドレスが判定される。ヒット比較251はTLB自体の比較論理によって行われてもよい。TLB143を検索することと並列に、L2キャッシュ・ディレクトリ242は、例えば実効アドレス201のビット46:55を使用してルックアップされる。そして、ヒット比較261が、TLBによって出力された絶対アドレスを論理アドレス201を使用して特定されたL2キャッシュ・ディレクトリの絶対アドレスと比較することによって、L2キャッシュ・ディレクトリ242においてヒットを求めて検索する。ヒット比較261の結果は、どのL2セットがヒットとなったか(図面はL2キャッシュにおける8セット(すなわちn=8)を前提とする)の指標である。このヒット情報は次いで、L2キャッシュでヒットしたラインがL1キャッシュにも既に記憶されているかどうかを確かめるためにL1 dir比較270で使用される。そのために、L1 dir比較270は、L2キャッシュへの受け入れた入力論理ポインタ(out1からoutmと称される)も使用する。各論理ポインタ(例えばout1)は、それぞれのL1セットと関連付けられ、かつインデックスLA(50:55)に対応するL1ディレクトリのエントリのL2インデックスおよびL2セットIDおよび有効ビットを備える。
図3は、図2のキャッシュ・メモリを動作させるための方法のフローチャートである。所与のキャッシュ・ラインにアクセスする、例えば実効または論理アドレスを介するアクセス要求を受けた上で、セット・ディレクトリ203(setpと称される)およびL1キャッシュ・ディレクトリ142(ptrdirと称される)がステップ310でアクセスされる。このアクセスは例えば並列であってもよい。セット・ディレクトリ203およびL1キャッシュ・ディレクトリ142へのアクセスは、実効アドレスのライン・インデックス・ビット(例えばLA(50:55))を使用して行われる。セット・ディレクトリ203へのアクセスは、キャッシュ・ラインが存在するセットを示すセット識別子に帰着してもしなくてもよい。L1キャッシュ・ディレクトリ142へのアクセスは、L1キャッシュ・ディレクトリが入力として実効アドレスのライン・インデックス・ビットだけを使用するので、それぞれのL1セットの複数のエントリに帰着してもしなくてもよい。
セット・ディレクトリ203を検索することから生じるキャッシュ・ミスの場合(照会220)、ステップ380~387が行われてもよい。キャッシュ・ヒットの場合(照会220)、ステップ330~370が行われてもよく、そしてセット・ディレクトリ203は、要求されたキャッシュ・ラインが存在するセットを示すセット識別子を提供してもよい。
ステップ330では、有効化ディレクトリ205(logdirと称される)は、セット・ディレクトリ203から受けられるセット識別子および実効アドレスのライン・インデックス・ビット(例えばLA(50:55))を使用して検索されてもよい。
アドレスされたキャッシュ・ラインと関連する有効ビットがステップ340で判定されてもよい。これは、複数のエントリのうちセット識別子を使用するエントリを選択し、そして選択されたエントリの有効ビット値を読むことによって判定されてもよい。
有効化ディレクトリ205が検索330の結果としてキャッシュ・ミスを提供する、または有効ビットが無効状態を示している値を有する場合(350)、ステップ310の検索によってヒットされたセット・ディレクトリのエントリは無効化されてもよい370。そうでなければ、例えばヒット信号を提供することによって、ステップ360でキャッシュ・ヒットが解決されてもよい。
ステップ380で、要求の論理アドレスを使用して、TLBルックアップが行われる。このルックアップの結果は一致する絶対アドレスである。次に、ステップ381で、L2キャッシュ・ディレクトリ242がルックアップされ、そしてTLBから供給される絶対アドレスに対して比較される。L2ミスの場合、ステップ382が383に分岐してL1ミスかつL2ミスと解決する。L1ミスかつL2ミスと解決した後に、次の要求に応じてセット・ディレクトリ203にキャッシュ・ラインが見つけられることができるように、全てのデータ構造が更新される。
ステップ382がL2ヒットとなると、ステップ384が、ステップ310における検索によって特定されたL1キャッシュ・ディレクトリ内容をL2ディレクトリ内容に対して比較して、キャッシュ・ラインが実際にL1にあるかどうかを確かめる。比較結果がL1ヒットを示す場合、ステップ385がステップ386に分岐することを決定する。これは、要求がセット・ディレクトリ203でヒットしなかったが、キャッシュ・ラインは実際にL1キャッシュにある場合である。これは例えば、セット・ディレクトリが正しくないための場合である可能性がある、または現在の要求がこれまでにL1に記憶されたシノニムとは異なるシノニムに対するため(現在の要求にとっては「セット・ディレクトリは正しくなかった」と言うことと同じである)であり得る。いずれでも、ステップ386はセット・ディレクトリ203および有効化ディレクトリ205を更新して現在の要求に一致させる。実際のデータ転送が起こる必要はない。ステップ385がL1ヒットとならない場合、これは、キャッシュ・ラインがL1キャッシュにない-どのシノニムにしても-が、L2キャッシュにはあることを示す。したがって、ステップ387で、L1ミスと解決され、これには、要求が繰り返された際にL1ヒットと判明されるように、L2からL1にデータを転送し、そしてセット・ディレクトリおよび有効化ディレクトリを更新することを含む。
ステップ370、383、386および387の各々に続いては、明らかにL1ヒットに帰着するであろう要求を繰り返すためのステップ399である。
図4は、本開示に従って図2のキャッシュ・メモリにおいてシノニムを解決するための方法のフローチャートである。
ステップ401で、第2の実効アドレス(シノニムBと称される)が受けられる。第2の実効アドレスは、シノニムAと称される前に処理された実効アドレスのシノニムである。言い換えれば、シノニムBがキャッシュ・ラインに対して使用される一方で、他のシノニムAが既にL1キャッシュにある。
例証目的で、図4は、アドレス・シノニムAおよびBを16進法で図示する。簡潔にするために、20ビット・アドレス(5つの16進数字)が示される。この例では、キャッシュ・ラインへのバイト・インデックスまたはオフセットは示されない。ビットは左から右に番号付けされる(ビット0が最上位ビットである)ので、各アドレスはビット0:19を有する。シノニムA=12345およびシノニムB=67895。この例では、セット・ディレクトリ203は、ビット16:19(すなわちアドレスの最後の16進数字)を使用してインデックス付けされてもよく、かつビット8:15を使用してタグ付けされてもよい。図4に図示されるように、3つのユースケース例A)~C)430が描かれる。
ユースケースA)では、シノニムAおよびBはセット・ディレクトリ203に同じインデックス(setpインデックス=5)を有し、かつ異なるタグを有する。シノニムAおよびBは同じ絶対アドレスにマッピングする。
ユースケースBでは、シノニムAおよびBはセット・ディレクトリ203に同じインデックス(setpインデックス=5)および同じタグを有する。シノニムAおよびBは同じ絶対アドレスにマッピングする。
ユースケースCでは、ラインAおよびBは、セット・ディレクトリ203に同じインデックス(setpインデックス=5)および同じタグを有する。しかしながら、それらは異なる絶対アドレスにマッピングする。
ステップ403で、セット・ディレクトリ203は、要求されたシノニムBに対してキャッシュ・ヒットを特定するために検索される。これは、セット・ディレクトリ203が最終的に実際にヒットとならなかったセットを提供したので、「セット・ディレクトリ誤り」ケースと考えられる。
しかしながら、ステップ405で、有効化ディレクトリ205におけるシノニムBの検索がキャッシュ・ミスに帰着する。ルックアップがシノニムAに対してであれば、有効化ディレクトリ205における検索はヒットとなるであろう(そしてステップ360が実行されてもよい)。しかしながら、アクセスがシノニムBに対してであったので、有効化ディレクトリ205から読まれるアドレスは要求されたアドレスに一致しないことになる。
ステップ407で、セット・ディレクトリ203におけるシノニムBに対応するエントリが無効化される。そして、シノニムBを使用する繰返しアクセスがステップ409でトリガされる。
ステップ403~420はユースケースB)およびC)に対して実行される。
ステップ411で、セット・ディレクトリ203は、要求されたシノニムBに対してキャッシュ・ミスを特定するために検索される。
ステップ411のキャッシュ・ミスを特定した上で、ステップ413が実行される。ステップ413(ステップ384を行う)で、シノニムBと関連するL1キャッシュ・ディレクトリ内容がシノニムBと関連するL2ディレクトリ内容に対して比較されて、キャッシュ・ラインが実際にL1にあることを見つける。
ステップ413でキャッシュ・ヒットを特定したまたは見つけた上で、セット・ディレクトリ203および有効化ディレクトリ205はステップ415で更新されてもよい。更新は、例えばシノニムA情報をシノニムBで上書きすることによって行われてもよい。
ステップ415の更新を行った上で、シノニムBを使用するアクセスの繰返しがステップ417でトリガされてもよい。繰返しアクセスは、ステップ418でのセット・ディレクトリ・ヒットに続いてステップ419で有効化ディレクトリ・ヒットに帰着し、ステップ420でキャッシュ・アクセスが解決されることに帰着する。
ステップ411~420はユースケースA)に対して実行されてもよい。例えば、ユースケースA)のシノニムBが受けられると、ステップ411でミスと判明されてもよい。言い換えれば、ユースケースA)の受け入れたシノニムBに対してステップ411~420だけが実行されてもよい。
図5は、タグ・フィールド212およびキャッシュ・ライン・インデックス・フィールド210を備える実効アドレス、例えば201を介するキャッシュ・メモリ、例えば200へのアクセスを制御するための方法のフローチャートである。
ステップ501で、タグ・フィールド212の第1の群のビット212aおよび第2の群のビット212bが判定されてもよい。
ステップ503で、実効アドレスのライン・インデックス・ビットおよび第1の群のビット212aがセット・ディレクトリ203において検索されてもよく、それによって実効アドレス201のキャッシュ・ラインを含むセットを示すためにセット識別子が生成される。
ステップ505で、ステップ503で提供されたセット識別子を有するセットにおけるキャッシュ・ラインの存在を検証するために、セット識別子ならびに実効アドレス201のライン・インデックス・ビット210および第2の群のビット212bが有効化ディレクトリ205において検索されてもよい。このステップ505は、キャッシュ・ラインが有効化ディレクトリ205に存在するかどうかを示すことによって、セットにおけるキャッシュ・ラインの存在または非存在を示しても、または確認してもよい。
ステップ505の第2の検索に基づいてセットにおけるキャッシュ・ラインの存在を判定することに応答して、ステップ507でヒット信号が発生されてもよい。ヒット信号は、データ・アレイ141からキャッシュ・ラインのデータを提供するために使用されてもよい。
一例では、ステップ503もしくはステップ505またはその両方は、検索されたアドレスがそれぞれセット・ディレクトリ203および有効化ディレクトリに見つけられない点でキャッシュ・ミスに帰着してもよい。この場合、キャッシュ・ミスは、ステップ380から399に関しては記載されるように、TLB143および2次キャッシュ・ディレクトリ242にアクセスすることによって確認されてもよい。
TLB無効化
一実施形態によれば、本方法は、有効化ディレクトリの有効化ディレクトリ・エントリを無効化するための要求を受けることに応答して、1次キャッシュ・ディレクトリにおける対応する1次キャッシュ・ディレクトリ・エントリの有効ビットをそれに応じて設定することを更に含む。
一実施形態によれば、本方法は、1次キャッシュ・ディレクトリと関連付けて第1の補助データ構造を設けることであって、第1の補助データ構造の各エントリがマルチプロセッサ・システムのTLBパージ要求に示される情報を反映する実効アドレスのビットを備える、ことと、受けた要求に対応する第1の補助データ構造におけるエントリを特定することであって、特定されるエントリが1次キャッシュ・ディレクトリ・エントリを示す、こととを更に含む。
例えば、ゲスト・オペレーティング・システムのためのアドレス空間が対応するハイパーバイザによって削除される場合、キャッシュ・ラインはまだL1キャッシュにある。しかし、それらに対する有効な変換はもはやない。これは、L1キャッシュにおけるデータが、削除された変換を使用する要求によってアクセス可能であるべきでないことを意味する。これらのエントリをアクセス不可能にするために、それらは、L1キャッシュ・ディレクトリが論理的にタグ付けされているため、L1キャッシュにおいて無効化されるべきである。無効化の前に、影響されるエントリが見つけられるべきである。例えば、特定のエントリがゲスト・オペレーティング・システムに属することを示すために、有効化ディレクトリにおけるエントリ情報の一部としてビットが使用されてもよい。TLB無効化がそのゲスト・オペレーティング・システムに関連した全ての変換情報を削除する場合、ゲスト・ビットが設定された有効化ディレクトリ205における全てのディレクトリ・エントリが無効化されるべきである。
有効化ディレクトリ205では、エントリが無効化(またはパージ)されるべきか否かを見抜くために注目されることができるエントリは常に1つだけである。この問題を軽減するために、L1ディレクトリ142は、有効化ディレクトリ205における各エントリに対する変換関連情報を保持する副構造「ptrdirext」(すなわち第1の補助データ構造)が拡張される。L1ディレクトリと同様に、第1の補助データ構造において全てのセットが並列にアクセスされることができる。例えば、第1の補助データ構造のエントリが「set0-th ASCE(44:49),PGSZ(0:1),SX(37:43)」を備えてもよく、ここでPGSZはページ・サイズを指し(例えば、動的アドレス変換結果は4k、1Mまたは2Gページ・サイズであることができる)、SX(37:43)は実効アドレスのビット37:43を指し、そしてASCE(44:49)はそれぞれのスレッドthによってアドレス空間識別子として使用される実効アドレスのビット44:49である。
例えば、アドレス空間制御要素(ASCE)によって示される仮想記憶と関連する一連の仮想アドレスがアドレス空間と呼ばれてもよい。アドレス空間はユーザ間の隔離の程度を提供するために使用されてもよい。第1の補助データ構造の構造は、ASCEビットを使用してより効率的な方式で所与のアドレス空間と関連するエントリをパージすることを可能にすることができる。
この副構造により、或る変換だけに影響するべきであるTLB無効化が、有効化ディレクトリにおける全てのエントリを1つずつスクラブすることによってよりもより著しく速く行われることができる。
副構造ptrdirextは有効化ディレクトリ205の任意の更新と共に書き込まれる。ptrdirextのサイズとTLB無効化の精度との間でトレード・オフがなされることができる。ゲスト対ハイパーバイザ所有のケースに対処するため、区別を行うために単一のビットが必要とされる。TLBパージが、z/Architecture(R)におけるASCE、すなわち51ビット値に加えて或る制御情報などのアドレス空間識別子に基づいて行われる場合、どのエントリがパージされなければならず、どれがその必要がないかをフィルタリングするために数ビットだけまたは数ビットのハッシュを記憶するのに十分であろう。ptrdirextの実装例は、ASCEビットの一部、ゲスト・レベル識別子ビット、ページ・サイズ指標(複数のページ・サイズをサポートするTLBアーキテクチャのため)、セグメント・インデックスまたはセグメント・インデックスの一部(より高レベルが「セグメント・テーブル」と呼ばれ、そしてセグメント・テーブルに基づく無効化が可能である、マルチ・レベル・ページ・テーブルをサポートするTLBアーキテクチャのため)を保持し得る。例えば、有効ビットがL1ディレクトリ・エントリの一部である場合、エントリの実際の無効化は、所与のL1ディレクトリにおけるセットの全てのエントリに並列に行われることもできる。
以下の図を説明する目的で、以下の技術用語が使用される。
実際のメモリ・アクセスは「実」アドレスを使用して行われる。これは、例えば、主メモリ位置をアドレスする64ビット値であり得る。しかしながら、アドレス指定方式に対する任意の値または手法が使用されることができる。
プロセッサ・コア上で実行する命令は「論理」アドレスを使用する。動的アドレス変換(DAT)が使用されない場合、プロセッサは「実」アドレス指定モードで動作しており、プログラムによって使用される論理アドレスは実アドレスとしても使用される。
DATが使用される場合、プロセッサは「仮想」アドレス指定モードで動作している。仮想アドレス指定情報は、命令によって指定される論理アドレスに加えて、例えば、International Business Machines(IBM(R))によって提供されるz/Architecture(R)に見られるアドレス空間制御要素(ASCE)など、特定のアドレス空間を識別する追加情報を含む。しかしながら、他の仮想対実変換手法が使用されることができる。この仮想アドレス指定モードは、異なる論理対実アドレス・マッピングを使用してあらゆるプログラムにそれ自体のアドレス空間を与えるために使用されることができる。
仮想キャッシュ
仮想キャッシュのディレクトリ142(「logdir」)タグ600(本明細書で「logdir」と称される)は、従前の変換ルックアサイド・バッファ(TLB)143が典型的に保持するであろう変換に関連した全ての情報を保持する。図6は、実施形態に係る例証的なlogdirタグ600の略図である。タグ600は、ビット0:49として例示される論理アドレス・ビット601、アドレス空間識別子(ここでは「ASCE」として例示される)602、「実」ビット指標R603(アドレスを仮想対実として標記する)、仮想対実アドレス・インジケータ604、および潜在的に他の内容605を含む。
図1~5に関して上記した手法において、および参照により内容全体が本明細書に組み込まれる、2017年6月16日出願の「Cache structure using a logical directory」という名称の同時係属米国特許出願第15/625,223号において、複数の変換が同時にディレクトリに共存することができない。
実および仮想変換
オペレーティング・システムは、しばしば実アドレスを直接使用する。すなわち、プロセッサによって保持される実際の情報、命令またはデータを見つけるために、アドレス変換は必要とされない。仮想キャッシュのlogdirにおいて、これは、アドレス変換が必要とされないことを示すように「R」ビット603を設定することによって、エントリが「実」アドレスとして標記されることを意味する。
しかしながら、関連オペレーティング・システムの上で実行する各プログラムが通常、例えばDATを使用して、それ自身のアドレス空間で、仮想メモリを提供することを維持する。そのようにアクセスされるキャッシュ・ラインは、「R」ビット603がクリアされることによって識別されることができる。すなわち、「R」ビット603は、アドレスが実アドレスでないこと、およびそのキャッシュ・ラインと関連する実際の情報、データまたは命令を見つけるためにアドレス変換が必要とされることを示すように設定される。
オペレーティング・システムとユーザ・コード(例えばオペレーション・システムの上で動作するプログラム)との間で共有される或るアドレス範囲に関して、オペレーティング・システムは、論理アドレスを同じ実アドレスへ変換するユーザ・コードに対する仮想アドレス・マッピングを作成してもよい。例えば、オペレーティング・システムとユーザ・コードとの間で情報を交換するためにアドレス0x1000が使用されると仮定する。オペレーティング・システムは、実アドレスを使用して全てのメモリにアクセスする。ユーザ・コードは、仮想アドレスを使用して全てのメモリにアクセスする。ユーザ・コードに対して、論理アドレス0x1000は実アドレス0x1000にマッピングされる。
図7は、仮想対実ビット604がlogdirタグ600に存在しない(例えば含まれない)が、仮想および実アドレスが同じアドレスである場合の、共有メモリ位置を通じたデータ転送のためのプロセスを例示する。この手法では、共有メモリ位置を通じたデータ転送のために以下の一連のイベントが発生する。
ユーザ・コードが仮想アドレスにコードを記憶するとプロセスが開始する。これはステップ710に例示される。例えば、ユーザ・コードは、仮想アドレスに機能コードを記憶することができる。この説明の目的で、仮想アドレスは0x1000である。しかしながら、いかなるアドレスも使用されることができる。これを実装するために、logdir600は、0x1000の論理アドレス(例えば仮想アドレスを示す)に、DATがオンでRビットがオフの、この特定のキャッシュ・ラインに対する仮想ディレクトリ・エントリを作成する。キャッシュ・ラインに対するこのエントリの値は、アドレス空間がキャッシュ・ラインにコードを記憶したユーザ・コードのためであることを示す。
次に、ユーザ・コードは下位のオペレーティング・システムを呼び出す。これはステップ720に例示される。ユーザ・コードは、オペレーティング・システムと関連するプロトコルを使用して下位のオペレーティング・システムを呼び出すが、その詳細は本明細書で更に詳細には論じられない。一部の実施形態において、下位のオペレーティング・システムは、仮想マシンが下位のオペレーティング・システムの上で実行することを可能にするハイパーバイザを通じてユーザ・コードによってアクセスされる。
ユーザ・コードからの呼出しに応答して、オペレーティング・システムは実アドレスからコードを読み取る。これはステップ730に例示される。このステップで、オペレーティング・システムは0x1000の実アドレス(仮想アドレスと同じ)からコードを読み取る。これはlogdirミスに帰着する。実アドレスとして、アクセスが、実ビット603がオン(例えばR=1)にされたlogdirにおけるエントリを探しているからである。そのため、R=0シノニムは、図1~5に関して上記したトランスロード・プロセスを使用してクリーンアップされるべきである。このクリーンアップはステップ740に例示される。クリーンアップの結果として、キャッシュ・ラインに対するlogdirエントリは、キャッシュ・ラインに対する現実のエントリに更新されることになる。これは、論理アドレス0x1000に対して、DATがオフに設定されてRビット603がオンに設定されることに帰着する。
ユーザ・コードが仮想アドレス0x1000に他の機能コードを記憶する各以降の反復に応じて、実ビットがオンに設定されるためlogdirミスが発生することになる。これは、シノニムが再びクリーンアップされなければならず、そしてlogdirがそれに応じて更新されることに帰着する。これは、共有アドレスの使用ごとに繰り返し得る。論理アドレス対実マッピングが異なる異なるlogdirエントリを有することが可能であるので、本明細書で論じられるRビット603の比較が必要であることが留意されるべきである。すなわち、仮想アドレスおよび実アドレスは同じ論理アドレスでない。
図7に関して以上例示したこれらの仮想/実アドレス・シノニム・クリーンアップ動作に対処するために、論理ディレクトリに新たなビットが追加されることができる。これが仮想対実インジケータ604である。このビット604は「V=R」(「仮想アドレスが実アドレスに等しい」)と呼ばれてもよい。V=Rビット604は、DATオン・アドレス変換の結果である実アドレスが、それの起点であった論理アドレスと同じである(すなわち論理アドレスが実アドレスである)場合に設定される。図7に関して上記した例では、V=Rビットは、ユーザ・コードのための仮想アドレス0x1000を実アドレス0x1000へ変換した結果として設定されるものである。
仮想アドレスが実アドレスと同じであるV=Rビットの値を設定するために、アドレス変換のプロセスが拡張される。図8は、拡張プロセスを例示する。ステップ810は、以前の従来のアドレス変換プロセスを例示する。いかなるアドレス変換プロセスもこのステップで実装されることができる。変換プロセスに入力するために、論理アドレスの要求801または実対DATオン要求802が受けられる。要求に応答して、プロセスは、実アドレスの要求があるかどうかを判定する。これはステップ820に例示される。要求が実アドレスに対する場合、結果的な実アドレスおよび入力論理アドレスが同一であれば、新たなコンパレータがV=R指標を出力する。これはステップ830に例示される。
追加的に、実施形態において、TLB143は、TLBヒットがV=R情報も返すことができるように、あらゆるTLBエントリにおいてV=Rビットによって拡張される。代替的に、V=R指標は、あらゆるTLBルックアップ後に再計算されることもできる。この手法では、TLBルックアップ・パスにV=R比較プロセスを有することを犠牲にして、TLBにおける追加ビットを節約することが可能である。
仮想としても実アドレスとしてもエントリへのアクセスを許容するために、ディレクトリ・ヒット比較論理も強化される。実施形態において、V=Rアドレスに対するルックアップが仮想キャッシュ・ルックアップの一部として行われる場合、通常のディレクトリ比較論理が適用される。しかしながら、ルックアップが実アドレスに対して行われ、かつディレクトリ・エントリにおけるV=Rビットが設定されている場合、ASCEなどの全てのDATオン情報が無視される。このようにして、ディレクトリ・エントリは仮想としても実エントリとしても使用されることができる。図9は、本開示のV=R論理を含むディレクトリ比較の実装例を例示する。図9の下の3方向AND910がキャッシュ・ラインに対する「ヒット」情報を計算する。AND910の左入力920はlogdirにおけるDATオン状態に関連する情報の比較を扱う。DATがオンであり、かつ入力がV=Rケースのための入力を受ける場合、およびそれが実アドレス要求であり、かつV=Rビットが設定されている場合、DATオン情報は無視される。AND910の中入力930は論理アドレス比較の結果を受ける。AND910の右入力940は要求されたアドレス・モードで比較を制限する。要求が仮想であり、かつディレクトリ・エントリも仮想であるか、両方とも実であるか、強化V=Rにより、要求が実であり、かつエントリがV=Rである。図8および9に関して論じたこの強化は、ステップ750として図7に例示されるプロセスへ挿入される。このステップでは、ステップ740でのシノニムのクリーンアップに続いて、V=Rビットは、V=Rがオンまたは真であると示す値に設定される。一部の実施形態において、ユーザ・コードまたはオペレーティング・システムが仮想アドレスであると考えるものにアクセスする際にそれらによって使用される論理に応じて、DATはこの時点でオンにリセットされることができる。
ここで図10~17に転じて、異なるスレッドにわたって変換を管理するためのプロセスが論じられる。
異なるスレッドにおける変換
仮想キャッシュのディレクトリ142(「logdir」)タグは、TLB143などのTLBが通常保持する変換に関連した全ての情報を保持する。図10は、例示的な実施形態に係るタグ例1000を例示する。タグ1000は、論理アドレス・ビット0:49(1001)、アドレス空間識別子1002(「ASCE」)、「実」ビット指標1003(通常オペレーティング・システム使用のために、アドレスを、アドレス変換を必要としないとして標記する)、およびキャッシュ・ヒット対ミスを判定するために必要とされるまたは有用な他の内容、集合的に1004を含む。一部の実施形態において、タグは、図6~9に関して上記したV=Rビットを含むことができる。
International Business Machines(IBM(R))によって提供されるz/Architecture(R)などの、一部のマイクロプロセッサ・アーキテクチャでは、アドレス変換有効性はスレッドごとに規定される。したがって、1つのスレッドによって作成されるlogdirにおけるキャッシュ・ディレクトリ・エントリは必ずしも他のスレッドに対して有効であるわけではない。ディレクトリ・ルックアップ・プロセスは、実アドレス変換を行うことを含まない。したがって、ディレクトリ・ルックアップ・プロセスは、アドレス変換が現在有効であるかどうかを確かめることを含まない。代わりに、アドレス変換は、エントリの作成か更新かに応じて行われる(そしてその有効性が確かめられる)。
図1~5に関して上記した手法において、および参照により内容全体が再び本明細書に組み込まれる、2017年6月16日出願の「Cache structure using a logical directory」という名称の同時係属米国特許出願第15/625,223号において、キャッシュ・ディレクトリ・エントリを作成したスレッドを識別する追加フィールドでディレクトリ・タグを拡張することによって、複数のスレッドがサポートされることができる。上記した規則に従って、スレッド所有は、キャッシュ・ディレクトリ・エントリの現在の所有者と異なるスレッドが共有キャッシュ・ラインにアクセスしたいときに(「トランスロード」を実行することによって)スレッド間で切り替わる。共有キャッシュ・ラインの所有の変化が頻繁に起こる場合、キャッシュ・ラインの所有のこの絶えず続く切替えは性能問題を生じさせる。
本開示は、キャッシュ・ディレクトリにスレッドごと有効ビット1005を追加することによってこの性能問題に対処する。上記した設計では、これは、ptrdirにおいてスレッドごと有効ビットを追加することによって達成される。TLB無効化は、TLB無効化を行うスレッドに対するエントリだけに注目し、そしてそのスレッドの有効ビットだけをオフにすることによって作用することもできる。このようにして、キャッシュ・ラインは、1つのスレッドがそのラインにその変換を「失った」後でさえ、他のスレッドにとってアクセス可能なままである。
本実施形態において、スレッドがキャッシュ・ラインに対していかなる有効な変換も有することなくL1キャッシュにキャッシュ・ラインを所有することが可能である。変換にアクセスするスレッドの両方とも独立して無効化されるそれらの変換を有し得たため、有効な変換のないキャッシュ・ラインに対するエントリに帰着する。一部の実施形態において他のマイクロアーキテクチャ理由で、「まだL1にキャッシュ・ライン」ビットが所望され、キャッシュ・ディレクトリに、完全なキャッシュ・ライン無効化に応じてのみオフにされることができる他の有効ビット(「ライン有効」ビット)1006が追加されることができる。完全なキャッシュ・ライン無効化は、例えば、他のプロセッサ・コアからの相互無効として起こることができる。この手法を利用する実施形態において、キャッシュ・ラインは、ルックアップ・スレッドの有効ビットが設定されていれば、所与のルックアップに対して有効とみなされ、キャッシュ・ラインへの変換を有効と識別し、そして「ライン有効」ビットが設定される。
キャッシュ・ディレクトリへのスレッドごと有効ビットの追加により、2つのスレッドが同じ変換を使用して同じキャッシュ・ラインを共有するようにするプロセスが図11および図12に関して下記される。下記されるプロセスは、2つの異なるスレッドが同じキャッシュ・ラインにアクセスする、およびプロセスの初めにキャッシュ・ラインがL1キャッシュにないが、既にL2キャッシュにあったと仮定する。図13は、図11および図12の詳細な決定プロセスを説明および例示する。
図11は、実施形態に係る、特定のキャッシュ・ラインにアクセスしようとする第1のスレッドのプロセスを例示する。第1のスレッドがL1キャッシュにlogdirミスがあると判定するとプロセスが開始する。これはステップ1110に例示される。スレッドがキャッシュ・ディレクトリにおいて特定のエントリを見つけようとするとlogdirミスが発生する。スレッドが特定のキャッシュ・ラインを求めてL1キャッシュを検索するが、L1キャッシュにキャッシュ・ラインを見つけられないとキャッシュ・ミスが発生する。
logdirミスに続いて、プロセスはptrdir比較を行い続ける。これはステップ1120に例示される。このステップで、プロセスは、キャッシュ・ラインがL1キャッシュに全く見つけられないと判定する。ptrdir比較は、ptrdir対L2ディレクトリ/TLBルックアップのために使用される任意の公知のプロセスを通じて行われる。
次に、プロセスはL2ディレクトリ比較を行って、所望のキャッシュ・ラインを見つける。これはステップ1130に例示される。このステップで、プロセスは、キャッシュ・ラインがL2キャッシュに存在すると判定する。キャッシュ・ラインがL2キャッシュに見つけられなければ、プロセスは、それが所望のキャッシュ・ラインを見つける時まで、L3キャッシュまたはプロセッサ構造に存在する任意のより低レベルのキャッシュに対してこのステップを繰り返すであろう。キャッシュ・ラインがL2キャッシュに見つけられるので、プロセスは、L1キャッシュへリロードするためにこのキャッシュ・ラインを特定する。
一旦キャッシュ・ラインがL2またはより低いキャッシュに特定されると、プロセスは続いて、L1キャッシュにキャッシュ・ラインのための新しいディレクトリ・エントリを作成する。これはステップ1140に例示される。このステップで、プロセスは、キャッシュ・ディレクトリにおける既に従来のエントリを上書きするように選ぶことができる。一部の実施形態において、上書きするエントリは最も古いエントリである。一部の実施形態において、上書きされるエントリは、一定期間の間アクセスされなかったエントリである。他の実施形態において、エントリは、最少のアクセスを有するエントリである。しかしながら、ディレクトリ・エントリを上書きするように選択するためのいかなる手法も使用されることができる。一旦ディレクトリ・エントリが上書きのために選択されると、プロセスは続いて、キャッシュ・ラインに対するL1キャッシュ・データ構造を更新し、そして第1のスレッドがキャッシュ・ラインの所有者であることを示すためにスレッドに対して有効性ビットを設定する。同時に、第2の所有スレッドに対する有効性ビットはキャッシュ・ラインに関して無効化される。その他のスレッドが上書きされているディレクトリ・エントリに設定された有効ビットを有し得たので、その他のスレッドに対する有効性ビットの無効化が行われる。新たな変換(キャッシュ・ライン・エントリ)は必ずしもその他の(第2の)スレッドに対しても有効であるわけではない。
キャッシュ・ラインがL1キャッシュへロードされた後、第1のスレッドは必要に応じてこのエントリでヒットすることができる。これはステップ1150に例示される。すなわち、第1のスレッドは、L1キャッシュにおける関連logdirにアクセスして見つけることができる。
図12は、実施形態に係る、図11のプロセスに続いて、第2のスレッドがキャッシュ・エントリをルックアップするプロセスを例示するプロセス図である。図12のプロセスは、図11に関して上記したプロセスと同様であり、そして図12の説明の目的で、同様のステップの詳細はここで更に詳細には論じられない。第2のスレッドがlogdirルックアップを行って、L1キャッシュでlogdirに対するヒットを見つけるとプロセスが開始する。これはステップ1210に例示される。
キャッシュ・ラインがL1キャッシュにあったという判定に続いて、プロセスは、キャッシュ・ラインが第2のスレッドに対して有効でないと判定する。これはステップ1220に例示される。エントリに対する変換の有効性が第1のスレッドに対してだけ決定されたので、第2のスレッドに対する有効性は有効でない。キャッシュ・ラインが第2のスレッドに対して有効であるかどうかを判定するためのプロセスは、キャッシュ・ラインが有効であると判定する任意の公知の方法を使用して実行されることができる。
キャッシュ・ラインが第2のスレッドに対して有効でないので、ptrdirおよびL2ディレクトリ/TLBルックアップが行われる。これはステップ1230に例示される。このステップで、第2のスレッドは、キャッシュ・ラインがL1キャッシュに存在すると判定する。(図11のプロセスによってL1に移動された)。キャッシュ・ライン・ヒットの位置は、ステップ1210でlogdirヒットが見つけられたのと同じキャッシュ・ラインであると判定される。同じキャッシュ・ラインでのこのヒットは、変換が既にL1キャッシュにあり、そして変換が第1のスレッドに対する変換に一致することを確認する。
第2のスレッドに対するL1キャッシュの有効ビットがオンにされる。これはステップ1240に例示される。更に、第1のスレッド対する有効ビットもオンのままにされる。これは、第1のスレッドも第2のスレッドも並列にキャッシュ・ラインを使用することができることに帰着する。
図13は、実施形態に係る決定木として表現される図11および図12の複合プロセスを例示する略図である。
ステップ1310でlogdirヒットとならず、そしてステップ1320でptrdirヒットとならない場合、キャッシュ・ラインは現在L1キャッシュにない。そこで、ステップ1330は、L2ディレクトリ・ルックアップ結果に基づいて、L2キャッシュからキャッシュ・ラインをリロードする(パス(A))かL3キャッシュ・パス(B)か(図14に関して更に詳細に論じられる)を判定する。
しかしながら、ステップ1320でのptrdir比較がヒットとなれば、ラインは既にL1キャッシュにある。例では、L1ディレクトリは、現在の要求スレッド情報に一致するように更新される(ステップ1321)。現在のスレッドに対する有効ビットが設定され、全ての他に対する有効ビットは無効化される(ステップ1322)。再び、このステップが行われるのは、現在の要求の情報へのディレクトリ更新の結果として、ディレクトリにおける変換情報がもはや他のスレッドに対して正しくない場合があるからである。
logdir比較がヒットを示すが、ステップ1340で要求スレッドに対する有効ビットが設定されていない場合、決定木は次にステップ1350に移動してptrdir比較結果を確かめる。ヒットとならなければ、キャッシュ・ラインはL1になく、ステップ1360に続き、ステップ1330と同様に、キャッシュ・ラインをL1へ持ってくる。ptrdir比較1350がヒットを示す場合、ステップ1370がptrdirヒットsetidをステップ1310からのlogdirヒットsetidに対して比較する。それらが一致すれば、現在の要求のキャッシュ・ラインは既にL1にあり、logdirタグ情報は正しい。第2のスレッドに対して有効ビットが見つからないだけである。したがって、現在の要求スレッドに対する有効ビットがオンにされ、そして他の有効ビットが既にアクティブであれば、キャッシュ・ラインは今や複数のスレッド間で共有される。setid比較1370が異なるsetidでL1ヒットがあったことを示す場合、そのエントリは、現在の要求スレッド情報に更新され、現在の要求スレッドの有効ビットが設定され、そして全ての他のスレッドの有効ビットは再びクリアされる。これはステップ1371に例示される
図14は、実施形態に係るL1キャッシュ・ミスの解決を例示するフローチャートである。プロセス1400への入力は図13のパスAかパスBかから達成される。パスAはL1キャッシュ・ミスおよびL2キャッシュ・ヒットを表す一方で、パスBはL1キャッシュ・ミスおよびL2キャッシュ・ミスを表す。パスAからプロセス1400に入ると、ステップ1401でL2キャッシュからのキャッシュ・ラインがフェッチされる。パスBからプロセス1400に入ると、ステップ1402でL3キャッシュからキャッシュ・ラインがフェッチされる。一旦ラインがフェッチされると、プロセスはステップ1403で、各繰返しルックアップでL3キャッシュ・ラインでヒットするように全てのL2データ構造を書き込む。ステップ1401か1403か(入力パスに応じて)に続いてプロセスは合併する。ステップ1410で、各後続のルックアップに応じてこのキャッシュ・ラインでヒットするようにL1データ構造が書き込まれる。ステップ1420で、キャッシュ・ライン・エントリにおける有効ビットは、特定のキャッシュ・ラインを要求した対応するスレッドに対して設定される。ルックアップはステップ1430で繰り返されることができる。
異なるスレッドにおける異なる変換
同時マルチスレッディング・コア(SMT)では、各スレッドは潜在的に、スレッド間で共有される絶対アドレスに対するそれ自身の変換を必要とする。上記したスレッド共有手法では、これは、スレッド1がL1ディレクトリ・ルックアップ中に正しい情報(例えば論理アドレス、ASCE、…)を見つけられないことに帰着する。したがって、たとえptrdir対L2ディレクトリ/TLB比較プロセスが、正しいキャッシュ・ラインが既にL1キャッシュにあることを示しても、このスレッドに対する有効ビットを設定することは誤りであろう。異なる変換(すなわち第1のスレッドからのもの)は、結局そのラインのために使用されるであろう。この手法では、あたかもキャッシュ・ラインにスレッドごとディレクトリ有効ビットが存在しない、すなわちトランスロードを行うかのように、状況は扱われることができる。従来の(第1の)スレッドのlogdirエントリが第2のスレッドの情報で上書きされ、そしてその他の第1のスレッドの有効ビットはオフにされる。
図15は、実施形態に係る異なる変換を使用するlogdirにおけるキャッシュ・ラインを共有するための解決策を例示する。2つのスレッドを前提として、完全なディレクトリ・タグ情報が複製される。タグ比較結果は、要求が第1のスレッド・ディレクトリに対する第1のスレッドに対してであること、および要求が第2のスレッド・ディレクトリに対する第2のスレッドに対してであることで、更に制限される。ヒット信号の1つがアクティブであればディレクトリ・ヒットが発生する。
一部の実施形態において、実際に両方のディレクトリに給電する必要はない。要求のスレッドIDはプロセスの初期に知られているであろう。対応するスレッドIDの知識は、その「他の」スレッドに対するある構造をオフにするために使用されることができる。そこで、logdir領域が複製される、一部の実施形態において、特に、領域制約されるより電力制約されるデュアル・スレッドコアに対して。この手法は、キャッシュ・ラインを共有したいスレッドのL1キャッシュ・ルックアップにおいてタグ比較結果を考慮する必要を排除する。スレッドはその独自のディレクトリ・エントリを有しており、その他のスレッドの従来のディレクトリ・エントリに一致する必要はない。
図16は、ディレクトリ内容の一部がスレッド間で共有される手法を例示する。この手法は、部分的に異なるタグ情報だけを許容する。したがって、スレッドごとディレクトリに関与するオーバーヘッドの一部が節約されることができる。要点は、スレッド間の実アドレス共有シナリオに応じて、タグ情報の全てが異なるわけではないということである。例えば、異なるスレッドで実行する異なるプログラム間で共有されるメモリは、同じ論理アドレスにマッピングされて、異なるアドレス空間識別子を使用することができるだけである。その場合、ASCEだけはスレッドごとに異ならなければならない。これは、共有ライブラリを使用するときにしばしば発生する。
一部の実施形態において、タグは次いで、スレッドごとに(第1のスレッド/第2のスレッド専用logdirに)複製されるASCE部分およびスレッド共有logdirに記憶される残りのビットへ分割される。再び、スレッド専用構造は現在のスレッドの要求に対してだけ給電されさえすればよい。最終的なヒットは、スレッドごとおよびスレッド共有タグ・ヒットの結果として計算される。
図17は、実施形態に係るlogdirにおけるスレッドごと情報の部分共有を処理するように変更された図13に係る決定木の略図である。図17におけるパスAおよびBへの参照は図14のパスを指す。ディレクトリにおける別々のスレッド専用およびスレッド共有部分により、キャッシュ・ルックアップで行われることになる決定は、図13から僅かに変更される。ステップ1310は、logdirのスレッド共有部分に基づいて決定するように変更される。これはステップ1710に例示される。ステップ1340は、要求スレッドに対する有効ビットおよびlogdir専用ヒットの結果に基づいて決定するように変更される。これはステップ1740に例示される。ステップ1371は、有効ビットを更新するだけでなく、logdirのスレッド専用部分を書き込むようにも変更される。これはステップ1771に例示される。しかし、ステップ1770におけるptrdir比較が「間違った」setid(例えばスレッド共有ヒットしたものでない)でヒットとなれば、L1ディレクトリ内容は更新されるべきである。これは、logdirのスレッド共有およびスレッド専用部分を共に含む。これは、他のスレッドに対する有効変換を知ることなくスレッド共有部分を更新することが、その他のスレッドの有効ビットがオフにされるべきであることを必要とするためである。
本発明の態様が、本発明の実施形態に係る方法、装置(システム)およびコンピュータ・プログラム製品のフローチャート例もしくはブロック図またはその両方を参照しつつ本明細書に記載される。フローチャート例もしくはブロック図またはその両方の各ブロック、およびフローチャート例もしくはブロック図またはその両方におけるブロックの組合せがコンピュータ可読プログラム命令によって実装されることができることが理解されるであろう。
本発明は、システム、方法もしくはコンピュータ・プログラム製品またはその組合せであってもよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実施させるためにコンピュータ可読プログラム命令を有する1つまたは複数のコンピュータ可読記憶媒体を含んでもよい。
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持および記憶することができる有形デバイスであることができる。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または上記の任意の適切な組合せであってもよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的な列挙には以下を含む:ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能プログラマブル・リード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー・ディスク、パンチ・カードまたは命令が記録された溝に隆起された構造などの機械的に符合化されたデバイス、および上記の任意の適切な組合せ。コンピュータ可読記憶媒体は、本明細書で使用される場合、電波もしくは他の自由に伝搬する電磁波、導波管もしくは他の伝送媒体を通って伝搬する電磁波(例えば、光ファイバ・ケーブルを通る光パルス)、または電線を通って伝送される電気信号など、それ自体が一過性信号であると解釈されないものとする。
本明細書に記載されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークもしくは無線ネットワークまたはその組合せを介して外部コンピュータまたは外部記憶デバイスにダウンロードされることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータもしくはエッジ・サーバまたはその組合せを備えてもよい。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カードまたはネットワーク・インタフェースが、ネットワークからコンピュータ可読プログラム命令を受信し、そしてコンピュータ可読プログラム命令をそれぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体への記憶のために転送する。
本発明の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはSmalltalk(R)、C++等などのオブジェクト指向プログラミング言語および「C」プログラミング言語もしくは同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つもしくは複数のプログラミング言語の任意の組合せで書かれたソース・コードかオブジェクト・コードかであってもよい。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンド・アロン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上でかつ部分的にリモート・コンピュータ上で、または完全にリモート・コンピュータもしくはサーバ上で実行されてもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む、任意の種類のネットワークを通じてユーザのコンピュータに接続されてもよく、または外部コンピュータに接続がなされてもよい(例えば、インターネット・サービス・プロバイダを使用してインターネットを通じて)。一部の実施形態において、例えば、プログラマブル論理回路網、フィールド・プログラマブル・ゲート・アレイ(FPGA)またはプログラマブル論理アレイ(PLA)を含む電子回路網は、本発明の態様を行うために、コンピュータ可読プログラム命令の状態情報を活用して電子回路網を特性化することによってコンピュータ可読プログラム命令を実行してもよい。
本発明の態様が、本発明の実施形態に係る方法、装置(システム)およびコンピュータ・プログラム製品のフローチャート例もしくはブロック図またはその両方を参照しつつ本明細書に記載される。フローチャート例もしくはブロック図またはその両方の各ブロック、およびフローチャート例もしくはブロック図またはその両方におけるブロックの組合せがコンピュータ可読プログラム命令によって実装されることができることが理解されるであろう。
これらのコンピュータ可読プログラム命令は、命令が、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行し、フローチャートもしくはブロック図のまたはその両方の1つまたは複数のブロックに指定される機能/行為を実装するための手段を生じさせるように、汎用コンピュータ、専用コンピュータまたは他のプログラマブル・データ処理装置のプロセッサに提供されてマシンを生成してもよい。これらのコンピュータ可読プログラム命令はまた、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートもしくはブロック図またはその両方の1つまたは複数のブロックに指定される機能/行為の態様を実装する命令を含む製品を構成するように、コンピュータ、プログラマブル・データ処理装置もしくは他のデバイスまたはその組合せに特定の方式で機能するよう指令することができるコンピュータ可読記憶媒体に記憶されてもよい。
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラマブル装置または他のデバイス上で実行される命令が、フローチャートもしくはブロック図またはその両方の1つまたは複数のブロックに指定される機能/行為を実装するように、コンピュータ、他のプログラマブル・データ処理装置または他のデバイスへロードされて、コンピュータ、他のプログラマブル装置または他のデバイス上で一連の動作ステップが行われてコンピュータ実装プロセスを生成させてもよい。
図におけるフローチャートおよびブロック図は、本発明の様々な実施形態に係るシステム、方法およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能性および動作を例示する。この点で、フローチャートまたはブロック図における各ブロックは、モジュール、セグメントまたは命令の一部分を表現してもよく、それは指定された論理機能を実装するための1つまたは複数の実行可能命令を備える。一部の代替実装では、ブロックに示される機能は、図に示される順序と異なって起こってもよい。例えば、連続して図示される2つのブロックが、実際には、実質的に並行して実行されてもよく、またはブロックは、時に逆順に実行されてもよく、関与する機能性次第である。ブロック図もしくはフローチャート例またはその両方の各ブロック、およびブロック図もしくはフローチャート例またはその両方におけるブロックの組合せが、指定された機能もしくは行為を行うまたは専用ハードウェアおよびコンピュータ命令の組合せを実施する専用ハードウェア・ベースのシステムによって実装されることができることも留意されるであろう。