(57)【要約】【課題】不連続に保管されるが同一の順序で繰り返してアクセスされる非常に長いデータ構造など、不連続なデータ構造の事前取出しの単純な機構を提供する。【解決手段】不連続なデータ構造をポイントし、そのアクセス順序を示すポインタを各データ構造に組み込むステップと、ポインタによって示されるアクセス順序に基づいてターゲット・データ構造を事前取出しするステップとを含む不連続なデータ構造を事前取出しする方法を提供する。【選択図】        図１
2006107528.tif 000002
【特許請求の範囲】
【請求項１】
不連続なデータ構造を事前取出しする方法であって、
前記不連続なデータ構造をポイントし、そのアクセス順序を示すポインタを各データ構造に組み込むステップと、
前記ポインタによって示される前記アクセス順序に基づいてターゲット・データ構造を事前取出しするステップと
を含む不連続なデータ構造を事前取出しする方法。
【請求項２】
不連続に保管されるが同一の順序で繰り返してアクセスされる大きいデータ構造を事前取出しするステップをさらに含む、請求項１に記載の不連続なデータ構造を事前取出しする方法。
【請求項３】
前記事前取出しが、メモリ・ラインに基づき、メモリ・ラインが、メモリがラインに分割されるように、連続する物理メモリ位置の位置合せされたセクションであり、前記ラインのある部分を、所与の時に少なくとも１つのキャッシュに保管することができ、通常の物理メモリ・データの他に、各メモリ・ラインが前記メモリ内の他のメモリ・ラインをポイントするのに十分に大きいポインタを含むように、各メモリ・ラインが、再定義される、請求項１に記載の不連続なデータ構造を事前取出しする方法。
【請求項４】
各メモリ・ラインが、前記データおよび前記ポインタのほかに、前記ポインタを自動的にセットし、使用するアルゴリズムを実施する追加ビットを含む、請求項３に記載の不連続なデータ構造を事前取出しする方法。
【請求項５】
各メモリ・ラインが、前記ポインタの状況を示す２つのビットを含む、請求項４に記載の不連続なデータ構造を事前取出しする方法。
【請求項６】
メモリ・ラインがアクセスされ、前記メモリ・ラインが有効なポインタを有しない時に、前記メモリ・ラインが親状況に昇格され、次に取出しを要求されるメモリ・ラインが、その子とみなされ、子メモリ・ラインが既知になった後に、前記親メモリ・ラインの前記ポインタが、前記子メモリ・ラインをポイントし、さらに、保護観察ビットが、前記ポインタが有用でない可能性があることを示すようにセットされるようにする機構によって、前記ポインタがセットされ、前記機構が、子メモリ・ラインが別の後続のメモリ・ラインの親メモリ・ラインでもあるという点で再帰的である、請求項３に記載の不連続なデータ構造を事前取出しする方法。
【請求項７】
保護観察ポインタがセットされたメモリ・ラインが参照される時に、前記メモリ・ラインが親メモリ・ラインとみなされるが、子メモリ・ラインが取り出されず、次のメモリ・ラインが要求された後に、そのアドレスが前記保護観察子メモリ・ラインの前記ポインタと比較され、これらが一致する場合に、前記親のポインタが既知状況に昇格され、これらが一致しない場合に、前記親のポインタが無効とマークされ、既知ポインタを有するメモリ・ラインが参照される時に、ポイントされる子メモリ・ラインが、即座に事前取出しされ、次に参照されるメモリ・ラインが、その子メモリ・ラインでない場合に、前記親のポインタ状況が、保護観察状況に降格される、請求項６に記載の不連続なデータ構造を事前取出しする方法。
【請求項８】
前記メモリが、複数の異なるレベルのキャッシュを含み、メモリ・ラインが、異なるレベルのキャッシュの間でメモリ階層の上に移動される際に、前記メモリ・ラインおよびそれに関連するポインタが、一緒のままになり、したがって、事前取出しを実施するキャッシュ・レベルより下のキャッシュ・レベル内のすべての他のキャッシュが、単純に、メモリ・ライン・データと共に前記ポインタをキャッシングする、請求項３に記載の不連続なデータ構造を事前取出しする方法。
【請求項９】
親子関係を記憶する内容アドレス事前取出しテーブルをさらに含み、前記テーブルが、３つのフィールドすなわち親、子、および状況を有する、請求項６に記載の不連続なデータ構造を事前取出しする方法。
【請求項１０】
メモリ・ラインが、取り出され、無効なポインタを有する時に、次に取り出されるメモリ・ラインが、その子とみなされ、親のポインタに、前記子メモリ・ラインがセットされ、前記ポインタ状況に、保護観察がセットされ、既知ポインタを有するラインが、取り出されるか事前取出しされる時に、ポイントされる前記子メモリ・ラインが、即座に事前取出しされ、
保護観察ポインタまたは既知ポインタを有するメモリ・ラインが、取り出され、前記事前取出しテーブル内で親メモリ・ラインでないことがわかる時に、前記メモリ・ラインが、その子ポインタおよびポインタ状況と共に前記テーブルに入力され、
メモリ・ラインが参照される時に、前記メモリのアドレスが、前記事前取出しテーブル内のすべての前記子ポインタと比較され、一致が見つかる場合に、関連する親の状況が更新され、保護観察ポインタが既知状況に昇格され、さらに、前記事前取出しテーブル内の一致する項目が除去され、複数の子項目が一致する場合に、各子項目が、同一の形で扱われる請求項９に記載の不連続なデータ構造を事前取出しする方法。
【請求項１１】
項目が、容量の欠如に起因して前記事前取出しテーブルから追い出される時に、前記親のポインタ状況が更新され、有効ポインタが保護観察にされ、保護観察ポインタが無効化され、メモリ・ラインが、キャッシュから追い出され、そのメモリ・ラインが、前記事前取出しテーブル内で親であることがわかる時に、前記テーブル項目も、無効化され、事前取出しテーブル追出しとして扱われる、請求項９に記載の不連続なデータ構造を事前取出しする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不連続なデータ構造の事前取出しの効率的で単純な方法を提供する。
【０００２】
本発明は、全般的に、たとえば生命科学の分野の計算に適用される、分散メモリ・メッセージ受渡並列コンピュータ設計の分野に関する。
【背景技術】
【０００３】
重要な計算の大きいクラスを、大量並列コンピュータ・システムによって実行することができる。そのようなシステムは、多数の同一の計算ノードからなり、各計算ノードは、通常は、１つまたは複数のＣＰＵ、メモリ、およびそのノードを他のノードに接続する１つまたは複数のネットワーク・インターフェースからなる。
【０００４】
大量並列スーパーコンピュータに関する、２００１年２月２４日出願の米国仮出願番号６０／２７１，１２４に記載のコンピュータでは、システムオンアチップ（ＳＯＣ）技術を活用して、高いスループットを有する、スケーラブルでコスト効率のよいコンピューティング・システムが作成される。ＳＯＣ技術によって、集積された第１レベル・キャッシュを伴うＣＰＵコアを含む組込み構成要素のライブラリを使用して、単一のチップ上でマルチプロセッサ・ノード全体を作ることが可能になった。そのようなパッケージ化によって、ノードの構成要素カウントが大きく減り、信頼性がある大スケール計算機の作成が可能になる。第１レベル・キャッシュは、一般にプロセッサに非常に近いキャッシュであり、一般に、第２レベル・キャッシュと比較した時により小さく、高速であり、第２レベル・キャッシュは、プロセッサから遠く、一般に、より大きく、低速であり、さらに上のレベルのキャッシュについても同様である。
【０００５】
マルチプロセッサが直面する一般的な問題が、リソースの秩序だった共用である。これは、しばしば、ロックの使用を介して達成され、この場合に、プロセッサは、リソースに割り当てられたロックを獲得することによって、そのリソースを使用する使用許可を得る。プロセッサは、ロックを保持（所有）する限り、そのリソースに関する許可を保持し、ロックを解放することによってその許可を放棄する。非常に一般的なタイプのロックが、テストアンドセット・ロックであり、これは、実施が単純で、一般に、十分広範囲に応用できる。
【０００６】
テストアンドセット・ロックは、一般に、実装に関してハードウェアＲＭＷ（read-modify-write）動作に頼る。この動作を用いると、ある値をメモリ位置に書き込み、前にその位置にあった（書込の前）値を返せるようになる。すなわち、この動作は、読取と、その直後の割込みなしの書込からなる。
【０００７】
テストアンドセット・ロックのセマンティクスは、次の通りである。アンロック状態が０、ロック状態が１であるものとする。プロセッサは、ロックに対してＲＭＷ動作を実行することによってロックの獲得を試み、このＲＭＷ動作で書き込まれる値は、１である。返された値が０である場合には、そのロックは、ＲＭＷの前にロック解除されており、１の書込に起因してロックされている。返された値が１である場合には、そのロックは既にロックされており、書込は効果がなかった。ロックを解放するには、単純に０を書き込む。
【０００８】
本発明のもう１つの態様は、事前取出しを含むが、事前取出しは、特にアプリケーションが予測可能なアクセス・パターンを示す時に、キャッシュを含むメモリ・システムの性能を強化する周知の技法である。一般に、事前取出しは、ソフトウェア・ディレクティブの使用を介する、または特殊なハードウェアを介するいずれかで達成される。順次事前取出しなど、一部のハードウェア方式は、単純であるが、ストライデッド・ストリーム・バッファ（strided  stream  buffer）などの方式は、より洗練されている。しかし、ハードウェア技法のすべてが、アドレス・シーケンスの予測可能性に頼る。従来の事前取出し技法の完全な調査については、ファンダビール（Vanderwiel）およびリリア（Lilja）を参照されたい。
【０００９】
現代の仮想メモリ・システムは、ハードウェア事前取出しの有効性に影響する可能性がある。というのは、仮想メモリで連続する大きいデータ構造が、物理メモリで連続している必要がなく、ハードウェア事前取出しが、通常は物理メモリ・アドレスを扱うからである。大きいデータ構造が、連続的にトラバースされる場合であっても、しばしばそうであるように、実際のメモリ参照は、連続しておらず、したがって、予測が困難である。しかし、多くのアプリケーションが、非常に反復的に振る舞い、したがって、繰り返されるアクセス・パターンを学習できる機構によって、事前取出しが有効になる可能性がある。
【００１０】
そのような機構の１つが、ポマリン（Pomerene）他の米国特許第４８０７１１０号、PrefetchingSystem  for  a  Cache  Having  a  Second  Directory  for  Sequentially  Accessed  Blocksに記載されている。この発想は、連続してアクセスされるキャッシュ・ライン間の関係を保管する大きい２レベル・テーブルを設け、これらの関係をキャッシュへの事前取出しに活用できるようにすることである。この関係を確立し、維持するさまざまな方法が記述されている。この手法の重要な短所は、テーブルのサイズが固定され、最終的に満杯になることである。その時点で、既知の関係を追い出して、新しい関係のための余地を作らなければならない。これは、テーブルが、実効ページ・セットを取り込むのに十分に大きい限り、問題ではないが、２００１年２月２４日出願の関連する米国仮出願番号６０／２７１，１２４、MassivelyParallel  Supercomputerに記載のスケーラブル・コンピュータで動作するものなどの多数の科学アプリケーションの実効ページ・セットは、主記憶ほどに大きくなる可能性がある。この場合に、キャッシュ・ライン間の後続の関係が、事前取出しに使用できるようになるよりかなり前に、制限された容量に起因して追い出されるので、テーブルは、ほとんど利益をもたらさない。
【特許文献１】米国仮出願番号６０／２７１，１２４
【特許文献２】米国特許第４８０７１１０号
【発明の開示】
【発明が解決しようとする課題】
【００１１】
したがって、本発明の目的は、不連続に保管されるが同一の順序で繰り返してアクセスされる非常に長いデータ構造など、不連続なデータ構造の事前取出しの単純な機構を提供することである。基本的な発想は、データ構造にポインタを組み込んで、アクセスの順序を示し、ポインタのターゲットを事前取出しすることである。
【課題を解決するための手段】
【００１２】
事前取出しは、一般に、キャッシュ・ラインに基づき、ラインは、連続する物理メモリ位置の位置合せされたチャンクである。システムのメモリ全体を、ラインに分割されるものとみなすことができ、これらのラインの一部が、任意の所与の時にキャッシュに保管される（おそらくは修正される）。本発明では、メモリ・ラインを再定義し、その結果、通常の物理メモリ・データのほかに、すべてのラインに、メモリ内の他のラインをポイントするのに十分に大きいポインタを含める。データおよびポインタのほかに、ポインタをセットし、使用するアルゴリズムを実施するための追加ビットを設けることができる。たとえば、本明細書で説明する好ましい実施形態には、ポインタの状況を示す２つのビットが含まれる。基本的な発想は、他の予測アルゴリズムではなく、ポインタを使用して、事前取出しされるメモリ・ラインを判定することである。これによって、ハードウェアが、不連続だが反復的なメモリ・アクセス・パターンを効率的に事前取出しできるようになる。本発明の好ましい実施形態には、自動的にアクセス・パターンを検出し、メモリ・ライン・ポインタをセットする機構が含まれる。さらに、ある機構によって、ソフトウェアからポインタを静的にセットできるようになる。
【発明を実施するための最良の形態】
【００１３】
本発明は、不連続に保管されるが同一の順序で繰り返してアクセスされる非常に大きいデータ構造の効率的な事前取出しの機構にも関し、これを提供する。基本的な発想は、アクセス順序を示すポインタをデータ構造に組み込み、ポインタのターゲットを事前取出しすることである。
【００１４】
事前取出しは、一般に、キャッシュ・ラインに基づき、ラインは、連続する物理メモリ位置の位置合せされたチャンクである。システムのメモリ全体を、ラインに分割されるものとみなすことができ、これらのラインの一部が、任意の所与の時にキャッシュに保管される（おそらくは修正される）。
【００１５】
図１に、メモリ・ラインが再定義され、その結果、通常の物理メモリ・データ３１のほかに、すべてのラインに、メモリ内の他のラインをポイントするのに十分に大きいポインタ３２が含まれるようになる、本発明の１つの概念を示す。図１のラインには、Ｍビットのデータが含まれ、このラインは、メモリ全体を構成する２＾Ｎ（２のＮ乗）個のメモリ・ラインの１つである。データおよびポインタのほかに、ポインタをセットし、使用するアルゴリズムを実施するためのビットを設けることができる。たとえば、本明細書に記載の好ましい実施形態には、ポインタの状況を示す２つのビット３３および３４が含まれる。
【００１６】
基本的な発想は、他の予測アルゴリズムではなく、ポインタを使用して、事前取出しされるメモリ・ラインを判定することである。これによって、ハードウェアが、不連続だが反復的なメモリ・アクセス・パターンを効率的に事前取出しできるようになる。本発明の好ましい実施形態には、自動的にアクセス・パターンを検出し、メモリ・ライン・ポインタをセットする機構が含まれる。さらに、ある機構によって、ソフトウェアからポインタを静的にセットできるようになる。
【００１７】
メモリ・ラインおよびそれに関連するポインタは、ラインがメモリ階層の上に移動される際に、一緒のままになる。たとえば、事前取出しを使用して、ＣＰＵの近くの第２レベル・キャッシュのヒット率を改善することができ、したがって、第３レベルなど、その下の他のキャッシュは、単に、メモリ・ライン・データと共にポインタをキャッシングする。第２レベル・キャッシュも、下で説明するように、状況変更を実施するためにポインタを保管する。ポインタをセットする単純な機構は、すべてのポインタが「無効」とみなされる状態から自動的に開始する。無効なポインタは、事前取出しに絶対に使用されない。これは、追加のビットを用いて、または特定のポインタ値をこの状態の専用にすることによって、示すことができる。ラインがアクセスされ、ラインが有効なポインタを有しない時に、そのラインが、「親」状況に昇格される。次に取出しが要求されるラインが、その「子」とみなされる。子がわかったならば、親のポインタを、その子をポイントするように修正し、有効にする。さらに、「保護観察」ビットをセットして、そのポインタが推測であり、有用でない可能性があることを示す。子が別の後続ラインの親でもあるという点で、このアルゴリズムが再帰的であることに留意されたい。
【００１８】
保護観察ポインタがセットされたラインが参照され、おそらくは取り出される時に、そのラインが、もう一度親とみなされるが、子は取り出されない。次のラインが要求されたならば、そのアドレスが、保護観察の子ポインタと比較される。それらが一致する場合に、親のポインタが、「既知」状況に昇格される。一致しない場合には、親のポインタが無効とマークされる。というのは、事前取出しが有用でないと仮定されるからである。
【００１９】
既知ポインタを有するラインが参照され、おそらくは取り出される時に、ポイントされる子が、即座に事前取出しされる。次に参照されるラインが、その子でない場合には、親のポインタ状況が、また保護観察状況に降格される。
【００２０】
この単純な方式では、アクセス・パターンの変動の余地が許容されず、１を超える事前取出し深さ（すなわち、保留中の事前取出しの数、通常は３または４）がサポートされない。この単純な方式を機能強化して、ある期間にわたって親子関係を記憶する、小さい内容アドレス事前取出しテーブルを含めることができる。このテーブルは、３つのフィールドすなわち、親、子、および状況を有する。
【００２１】
ラインが取り出され、無効ポインタを有する時には、そのラインは、単純な方式と同一の形で扱われる。すなわち、次に取り出されるラインが子と見なされ、親のポインタに子がセットされ、ポインタ状況に保護観察がセットされる。既知ポインタを有するラインが、取り出されるか事前取出しされる時には、事前取出し深さを超えない限り、ポイントされる子が即座に事前取出しされる。
【００２２】
保護観察ポインタまたは既知ポインタを有するラインが取り出され、事前取出しテーブルでそのラインが親でないことがわかる時には、そのラインが、子ポインタおよびポインタ状況と共にテーブルに入力される。
【００２３】
ラインが参照され、おそらくは取り出される時に、必ず、そのラインのアドレスが、事前取出しテーブル内のすべての子ポインタと比較される。一致が見つかる場合には、関連する親の状況が、単純な方式と同様に更新される。すなわち、保護観察ポインタが、既知の状況に昇格される。さらに、事前取出しテーブル内の一致する項目が、除去される。複数の子項目が一致する場合には、そのそれぞれが同一の形で扱われる。
【００２４】
ある項目が、容量に起因して事前取出しテーブルから追い出される時に、親のポインタ状況が、単純な方式で次の参照が期待される子と一致しない時と同様に更新される。すなわち、有効ポインタは、保護観察ポインタにされ、保護観察ポインタは、無効化される。ラインがキャッシュから追い出され、そのラインが、事前取出しテーブルで親であることがわかる時には、そのテーブル項目も、無効化され、事前取出しテーブル追出しとして扱われる。
【００２５】
事前取出しハードウェアに、事前取出しポインタを事前設定し、事前設定された事前取出しポインタを尊重するが、その状況を変更しない動作モードが含まれる。すなわち、自動ポインタ設定機構が使用不可にされるが、ポインタに基づく事前取出し機構は使用不可にされない。これは、データ構造の仮想対物理マッピングが固定され、データ構造のトラバース順序が既知である時に有用である。この場合に、物理メモリ内のポインタを、アクセス順序に対応するようにセットすることができ、これによって、データ構造を効率的に事前取出しできるようになる。
【００２６】
不連続データ構造の単純な事前取出しに関する本発明の複数の実施形態および変形形態を、本明細書で詳細に説明したが、本発明の開示および教示によって、当業者に多数の代替設計が提案されることは明白である。
【図面の簡単な説明】
【００２７】
【図１】本実施形態の概念を示す図である。この図では、メモリ・ラインが再定義され、その結果、通常の物理メモリ・データのほかに、すべてのラインに、メモリ内の他のラインをポイントするのに十分に大きいポインタが含まれるようになる。
【符号の説明】
【００２８】
３１・・・Ｍビットのデータ値、３２・・・Ｎビットのポインタ、３３、３４・・・ポインタの状況を示すビット
【図１】
2006107528.tif 000003