(57)【特許請求の範囲】
【請求項１】
プロセッサとキャッシュメモリおよびメインメモリを備えるコンピュータシステムにおけるプリフェッチシステムであって、
前記キャッシュメモリと前記メインメモリとの間にあり、前記プロセッサから発行されたデータ・ロード命令の要求するデータが前記キャッシュメモリになく、前記メインメモリからのデータ転送要求となった場合に、その転送要求先アドレスを少なくとも１つ以上記録し、１つもしくは複数のデータと該データのアドレスを格納するタグとを対にして格納するバッファと、
前記プロセッサから発行されたデータ転送要求によって前記バッファにのみデータ転送行うリクエストを生成するリクエスト生成手段と、
前記バッファに記録されたアドレスおよびバッファに記録されたアドレスに定数を加減算したものと転送要求先アドレスとをそれぞれ比較する比較手段と、
前記比較手段の比較結果が真であった場合に、転送要求先アドレスにソフトウェアが設定した変数を加減算した値を転送要求先アドレスとしてもつデータ転送要求を生成してメインメモリに通知する転送要求手段と、
前記メインメモリには前記リクエストを区別して要求アドレスのデータを転送する機構を備えるとともに、前記メインメモリから転送されたデータの中から前記リクエスト生成手段により生成されたリクエストにより転送されたデータを区別して前記バッファに登録する手段と、
を有することを特徴とするプリフェッチシステム。
【請求項２】
前記転送要求手段から前記メインメモリに通知するデータ転送要求は転送要求するデータのサイズを含むことを特徴とする請求項１記載のプリフェッチシステム。
【請求項３】
転送要求先アドレスに加減算する変数をソフトウェアで設定する手段をもつことを特徴とする請求項１記載のプリフェッチシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、高性能コンピュータ・システム用のメモリ・システムに関し、特にキャッシュミスを起こしたデータフェッチにおいて、そのメモリアクセスアドレスのパターンに応じてハードウェアでプリフェッチを行い、メモリアクセス性能を向上させる機構をもった高性能計算機用メモリシステムに関する。
【０００２】
【従来の技術】
コンピュータシステムにおいて、プロセッサ処理性能に比較して、メモリ処理性能の向上率が低いため、年々その処理性能差の乖離が激しくなっている。そのため、プロセッサ内にキャッシュメモリを実装し、メモリ処理性能の遅さを隠蔽するのが普通となっている。しかし、キャッシュメモリはデータの時間的・空間的局所性を利用するため、局所性の無いメモリアクセスパターンでは、キャッシュメモリが有効に働かないことがあり、処理性能が極端に悪化する。このような現象は、特に大規模科学技術計算に多く見られる配列データを連続的にアクセスし再利用性が低い場合に見られ、これに対してソフトウェアがメモリからキャッシュメモリへと事前にデータを転送させるプリフェッチ命令を挿入することで性能低下を防いできた。しかしながら、データ配列をリストアクセスする場合や、オブジェクト指向言語で書かれたプログラムでは、メモリアクセスパターンが連続アクセスであったとしてもソフトウェアがプリフェッチ命令を挿入できない場合が多い。一方、従来のハードウェアでプリフェッチを行う方式では、（１）過去にプリフェッチをかけたデータストリームについて後続のプリフェッチをハードウェアが生成する方式や、（２）過去にメモリアクセスをしたアドレスとの差分がある一定範囲の場合にハードウェアでプリフェッチを生成する方式が発明されている。上記（１）に関して、例えば特開平６−２８１８０号公報に記載される。また（２）に関しては、特開平１１−１６７５２０号公報に記載される。
しかし、（１）に関しては過去にプリフェッチがかかったデータストリームのみがハードウェアでプリフェッチを行う対象となり、ハードウェアでプリフェッチを出すことを特に期待される過去にプリフェッチが全く出ていなかったデータストリームに対して有効に働かない。（２）に関しては、プリフェッチをするアドレス生成において、現在のアクセスアドレスにそのデータストリームのアクセスアドレスのインターバル分を加算して生成しているが、このプリフェッチによってメインメモリからキャッシュメモリへの転送レイテンシを十分に隠せないことがある。
【０００３】
【発明が解決しようとする課題】
キャッシュメモリを設けたプロセッサでは、キャッシュメモリの短いアクセスレイテンシを想定して、命令スケジューリングを行うため、キャッシュミスを起こすと処理性能が大幅に低下する。このようなキャッシュミスを起こしたデータフェッチについては、そのメモリアクセスパターンが主に連続アドレスに対するアクセスであることが多い。
そこで、本発明の一つの目的は、キャッシュミスを起こしたロード命令に対し、そのデータ転送列が連続するアドレスである場合にもメモリアクセスレイテンシを短縮して、キャッシュミスによる性能低下を軽減することにある。
本発明のより具体的な目的は、実施例の説明にて明らかにされる。
【０００４】
【課題を解決するための手段】
本発明の代表的特徴にしたがうコンピュータシステムの特徴は、ハードウェアでキャッシュミスをしたデータフェッチのメモリアクセスアドレスの履歴を保持し、そのメモリアクセスアドレス履歴に登録されたアドレスに連続するアドレスに対するキャッシュミス・データフェッチが起こった場合に、ソフトウェアが指定するアドレス差分先アドレスに対するデータフェッチ要求をハードウェアで作成し、後続のキャッシュミス・データフェッチの発生に先だってメインメモリからデータフェッチを行うリクエスト生成機構と、リクエスト生成機構による発行されたデータフェッチによってメインメモリから転送されたデータを格納するバッファを有する点にある。これにより、後続のキャッシュミス・データフェッチに対するデータ転送遅延を短縮することができる。
【０００５】
【発明の実施の形態】
本発明の実施例のシステム構成図は、図１の通りである。
図１において、プロセッサ内でロード命令やストア命令を処理するロード／ストア・ユニット２５から、キャッシュメモリにヒットしなかったロード命令のリクエスト１（キャッシュミスロードリクエストが発行されると、このリクエストに含まれる転送アドレス２はロード履歴表（ＬＤＨ表）３に登録される。ただし、同じアドレスがすでにロード履歴表３に登録されている場合にはアドレス登録をする必要はない。ロード履歴表３は、ｍ個（ｍは１以上の整数）のアドレスを保持するｍエントリの表であり、登録されているアドレスは最近のｍ個のキャッシュミスロードリクエストのアドレスである。ロード履歴表３に登録するアドレスに、プリフェッチ命令によるリクエストのアドレスを含めてもよい。また、ロード履歴表３のエントリを新しいアドレス値で上書きする場合に、そのエントリの選択においては、最もアドレス登録が古いエントリもしくは、最もアドレスヒットが最近起こっていないエントリを選択する。
キャッシュミスロードリクエスト１の転送アドレス６は比較器群７にて、ロード履歴表３に登録されているｍエントリのアドレス値および、そのアドレス値に＋Ｌバイト（Ｌは正の実数）加算したアドレス値、−Ｌバイト加算したアドレス値の３つのアドレス値とそれぞれ比較される。この比較結果において、キャッシュミスロードリクエスト１の転送アドレス６がロード履歴表３に登録されているｍエントリのアドレス値の１つと一致した場合には、信号線９によりそのキャッシュミスロードリクエスト１の転送アドレス６をロード履歴表３に登録するのを抑止する。つまり、ロード履歴表３にすでにキャッシュミスロードリクエスト１の転送アドレス６が登録されている場合を検出して同じアドレスをロード履歴表３に登録しないようにする。ただし、この登録抑止は必須事項ではなく、アドレス更新抑止信号線９は無くてもよい。
キャッシュミスロードリクエスト１の転送アドレス８は、プリフェッチ・バッファ（ＰＦＢ）２３に登録されているｎエントリ（ｎは１以上の整数）のアドレス値１０と比較器１１にて比較される。この比較において、１つ以上のエントリに登録されたアドレス値１０がキャッシュミスロードリクエスト１の転送アドレス８と一致した場合には、ヒット信号線１２によってプリフェッチ・バッファ（２３にヒットしたエントリの番号が伝達される。プリフェッチ・バッファ２３はヒットしたエントリのデータをヒット戻りデータ線２４を使ってロード／ストア・ユニット２５に転送する。キャッシュミスロードリクエスト１はメモリ系２０へのリクエスト発行器２６においてヒット信号線１２がヒットを示している場合には、リクエストの発行が無効化され、ヒット信号線１２がヒットしていないことを示している場合にのみリクエストの発行を行うことで、プリフェッチ・バッファ２３にヒットした場合に、キャッシュミスロードリクエスト１はメモリ系２０まで行かずに、プリフェッチ・バッファ２３からデータがロード／ストア・ユニット２５に転送され、データ転送遅延時間が短縮される。プリフェッチバッファ２３は、アドレス値とＬバイトのデータ値を組にして１エントリを構成し、これをｎエントリもったものである。プリフェッチ・バッファ２３のエントリを新しいアドレス値で上書きする場合に、そのエントリの選択においては、最もアドレス登録が古いエントリもしくは、最もアドレスヒットが最近起こっていないエントリを選択する。
キャッシュミスロードリクエスト１の転送アドレス１４から、プリフェッチ・バッファ２３に登録を行うＬバイトのデータを転送するフェッチリクエスト（ハードウェア・プリフェッチ・リクエスト）１９が作成される。このリクエストが要求をする転送アドレスは、キャッシュミスロードリクエスト１の転送アドレス１４と同じアドレス、キャッシュミスロードリクエスト１の転送アドレス１４にＮ（Ｎは１以上の整数）×Ｌバイトを加算１５したアドレス、およびキャッシュミスロードリクエスト１の転送アドレス１４にＮ×Ｌバイトを減算したアドレスの３つを用意し、選択器１８で３つの中から最大１つを選択する。先読み幅レジスタ１４にはこのＮ×Ｌバイトの値が設定されている。加算および減算は加算器１５、減算器１６で実行される。また、選択は、比較器群７における比較結果信号線束１３によって行われる。比較器群７において、ロード履歴表３に登録されたｍエントリのうちの１つのアドレスとの一致を検出した場合、選択器１８では、キャッシュミスロードリクエスト１の転送アドレス１４と同じアドレスのハードウェア・プリフェッチ・リクエスト１９が選択される。
比較器群７において、ロード履歴表３に登録されたｍエントリのアドレスに＋Ｌバイトを加算したアドレスのうちの１つとの一致を検出した場合、選択器１８では、キャッシュミスロードリクエスト１の転送アドレス１４にＮ×Ｌバイトを加算したアドレスのハードウェア・プリフェッチ・リクエスト１９が選択される。比較器群７において、ロード履歴表（３）に登録されたｍエントリのアドレスに−Ｌバイトを加算したアドレスのうちの１つとの一致を検出した場合、選択器１８では、キャッシュミスロードリクエスト１の転送アドレス１４にＮ×Ｌバイトを減算したアドレスのハードウェア・プリフェッチ・リクエスト１９が選択される。また、ハードウェア・プリフェッチ・リクエスト１９が発行された場合、そのリクエストによるメモリ系２０からの戻りデータを格納するエントリをプリフェッチ・バッファ２３に確保するため、ハードウェア・プリフェッチ・リクエスト発行信号２８によりプリフェッチ・バッファ２３に伝達する。
キャッシュミスロードリクエスト２７およびハードウェア・プリフェッチ・リクエスト１９によりメモリ系２０はロード／ストア・ユニット２５もしくはプリフェッチ・バッファ２３にデータを転送する。キャッシュミスロードリクエスト２７に対しては、プリフェッチ・バッファ２３を経由せずに直接ロード／ストア・ユニット２５へのデータ転送線２１を使ってデータを転送する。一方、ハードウェア・プリフェッチ・リクエスト１９に対しては、プリフェッチ・バッファ２３へのデータ転送線２２を使ってデータを転送し、プリフェッチ・バッファ２３の格納エントリにデータを登録する。
ハードウェア・プリフェッチを発行するアドレスの先読み幅は、
加減算１５，減算器１６の入力である先読み幅レジスタ１７で決定される。先読み幅レジスタ１７は、プリフェッチ・バッファ２３のデータサイズであるＬバイトのＮ倍に設定されている。ここで、Ｎはソフトウェアで設定する１以上の整数である。
図２はソフトウェアによるＮの設定方法の例を示したものである。図２で上から下方向に命令が処理されているとし、［１］、［３］，［５］，［７］，［９］のロード命令はレジスタｒ１に設定された定数値にそれぞれ０、Ｌ、２Ｌ、３Ｌ、４Ｌバイトだけ加算したアドレスに対するデータフェッチを行う。この４つのロード命令はキャッシュミスを起こし、図２の太矢印で示しただけメモリからのデータ転送遅延時間がかかるとする。ここで、ソフトウェアが先読み幅レジスタ１７にＮ＝２を設定していたとすると、［３］のキャッシュミスロード命令で、［７］のロード命令のロードアドレスに対するハードウェア・プリフェッチ・リクエストが発行される。すると、実際の［７］のロード命令実行時までにメモリからのデータ転送が終わっているため、［７］のロード命令はプリフェッチ・バッファ（２３）からデータ転送され、［８］の加算命令がすぐに実行される。ソフトウェアが先読み幅レジスタ（１７）にＮ＝１を設定していたとすると、［３］のキャッシュミスロード命令で、［５］のロード命令のロードアドレスに対するハードウェア・プリフェッチ・リクエストが発行されることになり、実際の［５］のロード命令実行時までにメモリからのデータ転送が終わっていないため、［５］のロード命令のデータ転送遅延時間はＮ＝２のときの［７］のロード命令の遅延時間の短縮ほどは縮まらない。一方、先読み幅レジスタ１７にＮ＝３が設定されていたとすると、［３］のキャッシュミスロード命令で［９］のロード命令のロードアドレスに対するハードウェア・プリフェッチ・リクエストが発行されることになり、実際の［９］のロード命令実行時までにメモリからのデータ転送が終わっているが、Ｎ＝２の場合に比べてプリフェッチ・バッファ（２３）の占有時間が長くなる。よってソフトウェアではＮ＝２を設定するの。このように、ソフトウェアでは、命令スケジューリングによるロード命令の実行間隔および転送アドレス間隔、そしてメモリからのデータ転送に要する遅延時間の関係をもとにしてハードウェア・プリフェッチによるデータ転送が実際のロード命令実行までに完了するように先読み幅レジスタ１７中のＮの値を設定する。
図３は、図２で示したプログラムコードに対して、ロード履歴表３とプリフェッチ・バッファ２３の状態をＮ＝２として時間軸にそって模式的に示したものである。［１］のロード命令でアドレスｒ１＋０がロード履歴表３に登録される。次に、［３］のロード命令でアドレスｒ１＋Ｌがロード履歴表３に登録されると共に、［１］のロード命令で登録されたアドレスｒ１＋０に＋Ｌを加算したアドレスとのアドレス比較結果が一致となるので、ｒ１＋Ｌに２×Ｌを加えたｒ１＋３Ｌに対するハードウェア・プリフェッチを発行する。ｒ１＋３Ｌに対するハードウェア・プリフェッチにより、プリフェッチ・バッファ（２３）にアドレスｒ１＋３Ｌが登録されると共に、メモリからのデータ転送を待つ。
図３では、メモリ遅延時間の後、命令［５］と［７］の処理の間でデータが到着し、プリフェッチ・バッファ２３中に確保されたエントリにデータが格納される。同様にして、［５］のロード命令でアドレスｒ１＋２Ｌがロード履歴表３に登録されると共に、［３］のロード命令で登録されたアドレスｒ１＋Ｌに＋Ｌを加算したアドレスとのアドレス比較結果が一致となるので，ｒ１＋２Ｌに２×Ｌを加えたｒ１＋４Ｌに対するハードウェア・プリフェッチを発行する。［７］のロード命令の処理も同様にして、ｒ１＋３Ｌのアドレスをアドレス履歴表３に格納し、ｒ１＋５Ｌに対するハードウェア・プリフェッチが発行されるが、さらにアドレスｒ１＋３Ｌのデータがプリフェッチ・バッファ２３中に存在するため、ｒ１＋３Ｌのデータがプリフェッチ・バッファ２３からヒットリプライされる。［９］のロード命令の処理も［７］のロード命令と同様に行われ、以下これを繰り返す。
本発明の別の実施例を図４に示す。図４では図１に比べて主に３点の相違がある。まず１点目は、ロード履歴表３に登録されているアドレスとキャッシュミスロードリクエスト１の転送アドレス６との比較において、ロード履歴表３に登録されているアドレスそのものの他に、＋２Ｌバイト加算したアドレスおよび−２Ｌバイト加算したアドレスとキャッシュミスロードリクエスト１の転送アドレス６とを比較する点である。２点目は、先読み幅レジスタ１７とともに、もう一つの先読み幅レジスタ２９が用意される点である。このもう一つの先読み幅レジスタ２９には、（Ｎ＋１）×Ｌバイトの値が設定される。プリフェッチ・バッファ２３へのＬバイト・フェッチリクエストを２つの先読み幅レジスタ１７，２９の値の分だけ加減算したアドレスに設定する。ロード履歴表３に登録されているアドレスに＋２Ｌバイト加算したアドレスとキャッシュミスロードリクエスト１の転送アドレス６との比較結果が一致した場合には，加算器１５，３０により、キャッシュミスロードリクエスト１の転送アドレス１４にＮ×Ｌバイトと（Ｎ＋１）×Ｌバイト加算したアドレスへのハードウェア・プリフェッチ・リクエスト１９，３４が発行され、２本のハードウェア・プリフェッチ・リクエスト発行信号２８，３２によりプリフェッチ・バッファ２３に２つのデータが登録されるエントリが確保される。ただし、キャッシュミスロードリクエスト１の転送アドレス８がプリフェッチ・バッファ２３にヒットした場合ヒット信号線３５により選択器１８における選択が先読み幅レジスタ１７のアドレス値を加減算したアドレスへのリクエストを無効化する。３点目は、メモリ系２０からハードウェア・プリフェッチに対するデータ転送を行う際に、データ転送線２２で送信されるデータがロード／ストア・ユニット２５へ延長されたデータ転送線３３によってプロセッサに転送され、プロセッサ内のキャッシュメモリにも登録される点である。
この実施例の上記の３点は、その内の任意の１点もしくは２点もしくは３点すべてを含んだ実施例も可能であり、さらに、上記で１点目として説明した＋２Ｌバイトの加算および−２Ｌバイトの加算については、＋ＭＬバイト（ただしＭは１以上の整数）の加算および−ＭＬバイトの加算とした実施例も含まれる。また、同様にして２点目として説明した先読み幅レジスタの本数は二本以上とする実施例も含まれ、Ｍ本の先読み幅レジスタをもつ場合には、ｉ番目（ただしｉは１以上Ｍ以下の整数）の先読み幅レジスタに設定されるアドレス値は、（Ｎ−１＋ｉ）×Ｌバイトである。これにあわせて、加算器１５，３０と減算器１６，３１の個数もＭ個となり、ハードウェア・プリフェッチ・リクエスト１９，３４もＭ個発行され、ハードウェア・プリフェッチ・リクエスト発行信号線２８，３２もＭ本となる。ただし、ヒット信号線（３５）がヒットを示した場合には，Ｍ個のリクエストの内Ｍ番目の先読み幅レジスタの値を加減算したリクエスト以外が無効化される。
図４に示した実施例で図２で示したプログラムコードに対して、ロード履歴表（３）とプリフェッチ・バッファ（２３）の状態をＮ＝２として時間軸にそって模式的に示したものが図５である。
【０００６】
【発明の効果】
以上に述べた発明によれば、キャッシュミスを起こしたロード命令に対し、そのデータ転送列が連続するアドレスの場合に、そのデータ転送を高速化することができる。すなわち本発明では、キャッシュミスを起こしたロード命令の転送要求アドレス履歴をとることで、連続するアドレスに対するキャッシュミスロードを検出し、後続のアドレスのデータに対するプリフェッチを発行することができる。また、プリフェッチを発行するアドレスの先読み幅をソフトウェアで設定できるため、プリフェッチデータの転送タイミングをデータの利用タイミングに合わせることが可能である。本発明では、ハードウェアが発行したプリフェッチによりメモリ系から転送されたデータは、専用のプリフェッチバッファに格納することが可能であり、これによってプロセッサがもつキャッシュメモリのデータを追い出すことがなく、キャッシュミスロード命令のデータ転送遅延時間を短縮することが可能である。
【図面の簡単な説明】
【図１】本発明の実施例のシステム構成図を示すブロック図である。
【図２】上記実施例のソフトウェアによるデータ先読み幅の設定例を示す概念図である。
【図３】上記実施例のハードウェア・プリフェッチの動作を示す概念図である。
【図４】本発明の別の実施例のシステム構成を示すブロック図である。
【図５】上記実施例のハードウェア・プリフェッチの動作を示す概念図である。
【符号の説明】
１，２７：キャッシュミスロードリクエスト信号線
２，６，８，１４：キャッシュミスロードリクエストの転送アドレス信号線
３：ロード履歴表
４，５，１５，３０：加算器
７，１１：比較器
９：アドレス更新抑止信号線
１０：プリフェッチ・バッファ・アドレス信号線
１２，３５：プリフェッチ・バッファ・ヒット信号線
１３：ロード履歴表ヒット信号線
１６，３１：減算器
１７，２９：先読み幅レジスタ
１８：選択器
１９，３４：ハードウェア・プリフェッチ・リクエスト発行線
２０：メモリ系
２１：キャッシュミスロード・データ転送線
２２，３３：ハードウェア・プリフェッチ・データ転送線
２３：プリフェッチ・バッファ
２４：プリフェッチ・バッファ・データ転送線
２５：ロード／ストア・ユニット
２６：キャッシュミスロードリクエスト発行器
２８，３２：ハードウェア・プリフェッチ・リクエスト発行信号線。
【図１】
0003969009.tif 000002
【図２】
0003969009.tif 000003
【図３】
0003969009.tif 000004
【図４】
0003969009.tif 000005
【図５】
0003969009.tif 000006