マルチプロセッサシステム及びそれに用いるプリフェッチリクエスト制御方法並びにそのプログラム
【課題】 主記憶アクセス頻度の低減とリクエストエージェントのDAアクセス頻度の低減とシステムインタフェースのデータ転送頻度の低減とを図ることが可能なマルチプロセッサシステムを提供する。
【解決手段】 カード(#0)1,(#1)2からなるマルチプロセッサシステムでは、キャッシュステータスMESIに、データは無効であるが、キャッシュラインサイズライトはいつでも実施できるという状態を示すキャッシュステータスPE(Pseudo−Exclusive)を新たに加え、この状態に遷移させるためのシステムインタフェース上のプロトコルを取り決めている。このマルチプロセッサシステムでは、キャッシュラインサイズライト用プリフェッチ動作時に、主記憶4の読出し、別カード上のキャッシュメモリからのデータを取り込みを行うことなく、即座に自キャッシュメモリ上で実施可能としている。
【解決手段】 カード(#0)1,(#1)2からなるマルチプロセッサシステムでは、キャッシュステータスMESIに、データは無効であるが、キャッシュラインサイズライトはいつでも実施できるという状態を示すキャッシュステータスPE(Pseudo−Exclusive)を新たに加え、この状態に遷移させるためのシステムインタフェース上のプロトコルを取り決めている。このマルチプロセッサシステムでは、キャッシュラインサイズライト用プリフェッチ動作時に、主記憶4の読出し、別カード上のキャッシュメモリからのデータを取り込みを行うことなく、即座に自キャッシュメモリ上で実施可能としている。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はマルチプロセッサシステム及びそれに用いるプリフェッチリクエスト制御方法並びにそのプログラムに関し、特にマルチプロセッサシステムにおけるキャッシュラインサイズライト用プリフェッチ動作のリクエスト制御方法に関する。
【背景技術】
【0002】
マルチプロセッサシステムにおいては、CPU(中央処理装置)やIO(入出力)プロセッサ等のプロセッサを各々に1個あるいは複数個を接続するカードを備えている。また、マルチプロセッサシステムでは、上記のプロセッサが使用する主記憶データを一時的に格納するために、一般的なMESI(Modify/Exclusive/Share/Invalidate)プロトコル等を採用するストアイン方式のキャッシュメモリ及びその制御回路を搭載している(例えば、特許文献1参照)。
【0003】
さらに、マルチプロセッサシステムでは、上記のカードに、これらプロセッサが発行するリクエストの振る舞いより、それ以降にプロセッサがキャッシュメモリの最小管理単位、すなわちキャッシュラインサイズのライト動作を行うことを予見して実際にプロセッサがキャッシュラインサイズライトリクエストを発生させる以前に主記憶の先読み動作を行うキャッシュラインサイズライト用プリフェッチリクエスト発行回路を搭載している。これらのカードはシステムインタフェースにて複数個接続することが可能となっている。
【0004】
従来、キャッシュラインサイズライト用プリフェッチ動作を行う場合、後に実際に行われるであろうキャッシュラインサイズライト動作が、別のカード上に搭載されるキャッシュメモリの状態によらず、即座に自キャッシュメモリ上で実施できるよう、自キャッシュメモリの状態を他キャッシュメモリとの排他性を保証できる状態に更新しておく必要がある。これはMESIプロトコルでいうところのM(Modify)またはE(Exclusive)状態にキャッシュメモリを遷移させておく、ということになる。
【0005】
ところで、キャッシュラインサイズライト用プリフェッチ動作の完了後、実際にプロセッサによるキャッシュラインサイズライト動作が実施された場合、当然キャッシュ上のそのキャッシュラインアドレスのデータは全てプロセッサによるキャッシュラインサイズライトデータに書き換えられる。すなわち、この場合には、自キャッシュメモリの状態をMまたはEとするために、キャッシュラインサイズライト用プリフェッチ動作によって主記憶ないし別のカード上に搭載されるキャッシュメモリからデータが読出されて転送され、自キャッシュに格納されたデータは一切参照されないことになる。
【0006】
【特許文献1】特開平08−194615号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
上述した従来のマルチプロセッサシステムでは、キャッシュラインサイズライト用プリフェッチ動作時に、実際にキャッシュラインサイズライトが実施される際に参照されることがないにも関わらず、自キャッシュをMまたはEにするために、主記憶またはスヌープエージェントのキャッシュからのデータ読出し、カード間インタフェースでのデータの転送、リクエストエージェントのキャッシュへのデータの格納という、無用なキャッシュアクセス、無用な主記憶アクセス、無用なシステムインタフェースのデータ転送が必要になる。
【0008】
そこで、本発明の目的は上記の問題点を解消し、主記憶アクセス頻度の低減とリクエストエージェントのDAアクセス頻度の低減とシステムインタフェースのデータ転送頻度の低減とを図ることができるマルチプロセッサシステム及びそれに用いるプリフェッチリクエスト制御方法並びにそのプログラムを提供することにある。
【課題を解決するための手段】
【0009】
本発明によるマルチプロセッサシステムは、プロセッサを1個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにMESI(Modify/Exclusive/Share/Invalidate)プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムであって、
前記MESIプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスPE(Pseudo−Exclusive)を加えている。
【0010】
本発明によるプリフェッチリクエスト制御方法は、プロセッサを1個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにMESI(Modify/Exclusive/Share/Invalidate)プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムに用いるプリフェッチリクエスト制御方法であって、
前記MESIプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスPE(Pseudo−Exclusive)を加えている。
【0011】
本発明によるプリフェッチリクエスト制御方法のプログラムは、プロセッサを1個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにMESI(Modify/Exclusive/Share/Invalidate)プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムに用いるプリフェッチリクエスト制御方法のプログラムであって、
前記MESIプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスPE(Pseudo−Exclusive)を加え、
前記制御回路に、前記プリフェッチリクエストが発行された時に自カードのキャッシュメモリのデータが無効である場合に前記キャッシュメモリを排他的としかつ前記データが無効であることを許す前記キャッシュステータスPEに遷移させる処理を実行させている。
【0012】
すなわち、本発明のマルチプロセッサシステムは、従来のキャッシュステータスMESI(Modify/Exclusive/Share/Invalidate)に、新たなキャッシュステータスPE(Pseudo−Exclusive)を加え、データは無効であるが、キャッシュラインサイズライトはいつでも実施できるという状態を取り決め、この状態に遷移させるためのシステムインタフェース上のプロトコルを取り決めている。
【0013】
つまり、本発明のマルチプロセッサシステムでは、キャッシュラインサイズライト用プリフェッチ動作時に、主記憶を読出したり、別カード上のキャッシュメモリからデータを取り込んだりすることなく、それでいてプロセッサによるキャッシュラインサイズライトを他キャッシュメモリの状態によらず、即座に自キャッシュメモリ上で実施可能としている。
【0014】
本発明のマルチプロセッサシステムでは、このキャッシュステータスを定義することによって、キャッシュラインサイズライト用プリフェッチ動作時にリクエスタカード上のキャッシュメモリに対するデータ転送の必要性がなくなり、従来のキャッシュステータスMESIだけを使用した場合に比べ、自キャッシュアクセス頻度、主記憶アクセス頻度、システムインタフェースのデータ転送頻度の低減を期待することが可能となる。
【0015】
従来のストアイン方式キャッシュ管理に使用されるMESIプロトコルでは、キャッシュラインサイズ用プリフェッチ動作時にリクエストエージェントのキャッシュステータスをM(Modify)またはE(Exclusive)にする必要があるため、データを一度、自キャッシュに格納する必要がある。
【0016】
しかしながら、本発明のマルチプロセッサシステムでは、MESIプロトコルにPEステータスを追加定義することによって、キャッシュラインサイズライト用プリフェッチ動作時にリクエストエージェントのキャッシュメモリに対するデータ転送の必要性がなくなる。また、本発明のマルチプロセッサシステムでは、従来のキャッシュステータスMESIだけを使用した場合に比べ、主記憶アクセス頻度の低減、リクエストエージェントのDA(Data Array)アクセス頻度の低減、システムインタフェースのデータ転送頻度の低減が期待される。
【発明の効果】
【0017】
本発明は、以下に述べるような構成及び動作とすることで、主記憶アクセス頻度の低減とリクエストエージェントのDAアクセス頻度の低減とシステムインタフェースのデータ転送頻度の低減とを図ることができるという効果が得られる。
【発明を実施するための最良の形態】
【0018】
次に、本発明の一実施例について図面を参照して説明する。図1は本発明の一実施例によるマルチプロセッサシステムの構成を示すブロック図である。図1において、本発明の一実施例によるマルチプロセッサシステムは二つのカード(#0)1,(#1)2にプロセッサ11,21を搭載し、それらのプロセッサ11,21用にストアインキャッシュメモリ(以下、キャッシュメモリとする)13a,23aを搭載し、これらのカード(#0)1,(#1)2間をアドレスバス101、スヌープバス102、データバス103によって接続している。
【0019】
尚、図1中のプロセッサ数、カード数は、本実施例を説明するにあたって必要な最小構成を示したものであり、この個数に限定されるものではない。また、カード間をバス接続したことも、本実施例を説明するにあたって最も簡単なカード間接続方法を示したものであり、各カードのキャッシュと主記憶とのメモリコヒーレンシが保てるのであれば、ここで示したバス接続に限定されるものではない。
【0020】
プロセッサ11,21はCPU(中央処理装置)やI/O(入出力)プロセッサ等、主記憶へのアクセスリクエストのリクエスタになるものであり、ごく一般的なものでよく、ここではその詳細については言及しない。
【0021】
キャッシュメモリ13a,23aにはキャッシュラインサイズと呼ばれるキャッシュで管理する最小データ単位毎の主記憶データのコピーと、キャッシュラインサイズデータ毎のキャッシュステータス情報とが保持されている。特に、主記憶データのコピーを格納するキャッシュメモリはDA(Data Array)、キャッシュステータス情報を格納するキャッシュメモリはAA(Address Array)とそれぞれ呼ばれ、DAとAAとは必ず対で使用される。ここで使用するキャッシュステータスはMESI(Modify/Exclusive/Share/Invalidate)プロトコル等の一般的なストアイン方式のキャッシュプロトコルのものとする。
【0022】
キャッシュコヒーレンシ及びバス制御部(以下、バス制御部とする)13,23はそれぞれカード(#0)1,(#1)2に搭載されるキャッシュメモリ13a,23aとメモリコントローラ3とのキャッシュメモリコヒーレンシ保証を行い、さらにそれを実現するためにカード(#0)1,(#1)2とメモリコントローラ3とを接続するカード間インタフェース、すなわちその用途によってアドレスバス101、スヌープバス102、データバス103と呼ばれるバスインタフェースを制御する。
【0023】
キャッシュラインサイズライト用プリフェッチリクエスト発行回路(以下、プリフェッチリクエスト発行回路とする)12,22はそれぞれのカード(#0)1,(#1)2に搭載されるプロセッサ11,21からキャッシュラインサイズライトリクエストが発行されることを予見し、プロセッサ11,21が実際にキャッシュラインサイズライトリクエストを発行した際に即座にプロセッサ11,21が搭載されるのと同じカード(#0)1,(#1)2上のキャッシュメモリ13a,23a上でそのライト動作が実施可能となるような状態にキャッシュラインステータスを変更しておくことを目的としたリクエスト(以下、プリフェッチリクエストとする)を発行する。
【0024】
プロセッサ11,21によるキャッシュラインサイズライトリクエストの予見は、例えば、プロセッサ11,21が連続した主記憶アドレスのキャッシュラインサイズライトを複数、連続発行させた等の一般的に考えられる予見アルゴリズムでよく、ここではその詳細については言及しない。
【0025】
メモリコントローラ3はカード間インタフェースすなわちアドレスバス101、スヌープバス102、データバス103各々の制御と、DRAM(Dynamic Random Access Memory)等で構成される主記憶4との入出力の制御を行う。
【0026】
アドレスバス101、スヌープバス102、データバス103各々はカード(#0)1,(#1)2とメモリコントローラ3とを接続するインタフェースである。アドレスバス101はメモリアクセスリクエストを発行するためのバス、スヌープバス102はアドレスバス101に発行されたバスリクエストに対する自カード(#0)1,(#1)2上に搭載のキャッシュメモリ13a,23aのキャッシュステータスを通知するためのバス、データバス103はキャッシュメモリ13a,23aからの読出しデータまたは主記憶4からの読出しデータをリクエスタに転送するためのバスである。ここで、アドレスバス101を使用してメモリアクセスリクエストを発行するカードをリクエストエージェント、メモリコントローラ3を除くそれ以外のカードをスヌープエージェントと称する。
【0027】
本実施例でプロセッサ11,21またはプリフェッチリクエスト発行回路12,22が発行するリクエスト種類を図12に示し、そのリクエストの形式の一例を図13に示す。図12において、キャッシュラインサイズリード(F1)はプロセッサ11,21からのキャッシュラインサイズと同じデータ量の主記憶4の読出し要求である。パーシャルラインサイズリード(F2)はプロセッサ11,21からのキャッシュラインサイズよりも小さいデータ量の主記憶4の読出し要求である。尚、本実施例においては、キャッシュラインサイズリード(F1)とパーシャルサイズリード(F2)との動作になんら差がないため、以後、単にリードリクエストまたはリードと称する。
【0028】
キャッシュラインサイズライト(F3)はプロセッサ11,21からのキャッシュラインサイズと同じデータ量の書込み要求である。パーシャルラインサイズライト(F4)はプロセッサ11,21からのキャッシュラインサイズよりも小さいデータ量の書込み要求である。
【0029】
キャッシュラインサイズライト用プリフェッチリクエスト(プリフェッチリクエスト)は、プリフェッチリクエスト発生回路12,22からのリクエストで、後に実施が予見されるプロセッサ11,21からのキャッシュラインサイズライト(F3)に備えて予め自キャッシュステータスを排他的な状態としておくことを目的として実行されるリクエストである。ここで、排他的なキャッシュステータスとは、従来のMESIプロトコルで言えば、「M(Modify)」または「E(Exclusive)」を指す。本実施例ではこれに「PE(Pseudo−Exclusive)」ステータスを加える。
【0030】
図13において、(G1)はこれらリクエストのコードを示す。(G2)はこのリクエストがアクセスすべき主記憶アドレスを示す。(G3)はリクエストがパーシャルサイズリード(F2)またはパーシャルサイズライト(F4)の時にリードまたはライトを実施すべきキャッシュラインサイズ内の位置を指定する。
【0031】
図2は図1に示すアドレスバス101、スヌープバス102、データバス103におけるバスフェーズを示すタイムチャートである。図2において、バスリクエストはバスフェーズ#1〜#3にしたがって処理される。リクエストエージェントはバスフェーズ#1においてアドレスバス101にバスリクエストを発行する。バスリクエストについては図3に示し、その内容については後述する。
【0032】
バスリクエストを受け取ったスヌープエージェントは、自カード搭載のキャッシュメモリにバスリクエストアドレスA2で指定されるデータが格納されているか、格納されているのであればどのようなステータスであるかの索引を行い、バスフェーズ#2においてスヌープバス102に自カード搭載のキャッシュメモリのキャッシュステータス情報を転送する。
【0033】
バスフェーズ#3ではスヌープエージェント、またはバスフェーズ#2におけるスヌープ通知によってはメモリコントローラ3が、データバス103にリクエストエージェントに対するリプライデータ転送を行う。尚、ここではカード間インタフェースプロトコルとして3つの固定時間間隔のバスフェーズ#1〜#3を用いているが、これは本実施例における説明の簡単化のためであり、各カード間とメモリコントローラ3とを接続し、キャッシュメモリコヒーレンシを実現できるカード間インタフェースプロトコルであればどのようなものでもよい。
【0034】
図3は本発明の一実施例によるバスフェーズ#1で使用するバスリクエストのコマンドコードの一例を示す図であり、図4は本発明の一実施例によるバスフェーズ#2で使用するスヌープ結果コードの一例を示す図である。図8及び図9は図1のバス制御部12,22の動作(リクエストエージェント)を示す図であり、図10は図1のバス制御部12,22の動作(スヌープエージェント)を示す図であり、図11は図1のメモリコントローラ3の動作に示す図である。これら図1〜図4及び図8〜図11を参照してバスにこれらリクエストが発行される条件とその際の動作、またスヌープ結果コードが発行される条件とその際の動作については説明する。尚、図8〜図11についての説明は後述する。
【0035】
(A1)はバスリクエストのコマンドコードであり、Mem_Read(A4)は自キャッシュステータスが「I(Invalidate)」または「PE」の時に「S(Share)」または「E」への遷移を目的としてアドレスバス101へ発行される。
【0036】
Invalidate(A5)は自キャッシュが「S」または「I」の時に他のキャッシュを全て「I」とし、自キャッシュのみに有効データが存在する「M」ステータスへの遷移を目的として発行される。
【0037】
Invalidate(PE)(A6)は本実施例において追加となるリクエストであり、他のキャッシュを全て「I」とすることで、自キャッシュ上のデータ有無によらず、即時プロセッサリクエストのキャッシュラインサイズライトを実施することができる「PE」ステータスに遷移することを目的として発行する。
【0038】
Mem_Read&Invalidate(A7)は自キャッシュが「I」の時に他のキャッシュを全て無効とし(Invalidate)、自キャッシュを「M」に遷移させることを目的とする。
【0039】
(B1)はバスフェーズ#2で使用するスヌープ結果コードである。Miss(B2)はスヌープエージェントのキャッシュメモリにバスリクエストで指定されるアドレスのデータが格納されていないか、「S」または「E」であり、バスリクエストを契機として「I」に遷移することを意味する。
【0040】
「S Hit」(B3)はスヌープエージェントのキャッシュメモリにバスリクエストで指定されるアドレスのデータが「E」または「S」で格納されており、「E」ならばバスリクエストを契機として「S」ステータスに遷移し、「S」ならばその後も「S」のままデータを格納し続けることを意味する。
【0041】
「M Hit」(B4)はスヌープエージェントのキャッシュメモリにバスリクエストで指定されるアドレスのデータが格納されており、バスリクエストを契機として「I」に遷移することを意味する。
【0042】
図5は図1のバス制御部13,23の動作(リクエストエージェントにおける動作)を示すフローチャートである。図5においては、プロセッサリクエストまたはプリフェッチリクエストを受付けたリクエストエージェントのバス制御部13,23の動作を示している。ここでは、便宜的に図1のカード(#0)1をリクエストエージェント、カード(#1)2をスヌープエージェントとして説明する。尚、図5に示す処理はバス制御部13,23が主記憶4のプログラムを読出して実行することで実現される。
【0043】
リクエストエージェントのバス制御部13はプロセッサ11またはプリフェッチリクエスト発行回路12からメモリアクセスリクエスト、プリフェッチリクエストを受付けると、自カード(#0)1のキャッシュメモリ13a(AA)を参照し(図5ステップS1)、図8に示すバス制御部13の動作(リクエストエージェント)に応じてバスリクエストを発行するか否かを判定する(図5ステップS2)。
【0044】
バス制御部13はバスリクエスト発行の必要がない場合、キャッシュメモリ13aに必要なデータが必要なステータスで登録されていることになるので、キャッシュメモリ13a(DA)に必要なアクセスを行い、また自カード(#0)1のキャッシュメモリ13a(AA)にアクセスしてキャッシュステータスを必要に応じて更新する(図5ステップS3)。
【0045】
これに対し、バス制御部13はバスリクエスト発行が必要と判定した場合、キャッシュメモリ13aに必要なデータがないか、期待するキャッシュステータスでないことを意味し、キャッシュメモリ13a内のデータをプロセッサリクエスト、プリフェッチリクエストを処理するのに必要なキャッシュデータ、キャッシュステータスに更新するためにバスリクエスト発行が必要であることを意味する。
【0046】
バス制御部13はバスフェーズ#1において、図8及び図9に示すバス制御部13の動作(リクエストエージェント)にしたがってプロセッサリクエスト、プリフェッチリクエスト及びキャッシュメモリ13aの状態に応じたバスリクエストを発行し(図5ステップS4)、バスフェーズ#2でスヌープエージェントのキャッシュの状態の報告を受取り(図5ステップS5)、バスフェーズ#3で必要ならばデータバス103のデータを受取る(図5ステップS6)。
【0047】
その後に、バス制御部13は図8及び図9に示すバス制御部13の動作(リクエストエージェント)にしたがってキャッシュメモリ13a(AA)のステータス更新、キャッシュメモリ13a(DA)のデータの更新、プロセッサ11へのデータ転送等を行う(図5ステップS7)。尚、図8及び図9に示すバス制御部13の動作(リクエストエージェント)の詳細については、本実施例の動作説明の中で説明する。
【0048】
図6は図1のバス制御部13,23の動作(スヌープエージェントにおける動作)を示すフローチャートである。図6においては、バスフェーズ#1でリクエストエージェントが発行したバスリクエストを受付けた以降のスヌープエージェントのバス制御部23における動作を示している。尚、図6に示す処理はバス制御部13,23が主記憶4のプログラムを読出して実行することで実現される。
【0049】
スヌープエージェントのバス制御部23はバスリクエストを受付けると、キャッシュメモリ23a(AA)を索引し(図6ステップS11)、バスリクエストが指定するアドレスに対する自キャッシュステータスを確認する。バス制御部23は図10に示すバス制御部23の動作(スヌープエージェント)に応じてスヌープ結果をスヌープバス102に出力する必要があるか否かを判定し(図6ステップS12)、出力する必要がある場合、バスフェーズ#2でスヌープバス102にスヌープ結果を出力する(図6ステップS13)。
【0050】
続いて、バス制御部23は自カード(#1)2のキャッシュメモリ23a(AA)のステータスを更新する必要の有無を判定し(図6ステップS14)、必要があれば、キャッシュメモリ23a(AA)のステータスを更新する(図6ステップS15)。
【0051】
さらに、バス制御部23は自カード(#1)2のキャッシュメモリ23a(DA)のデータをデータバス103に出力する必要の有無を判定し(図6ステップS16)、データをデータバス103に出力する必要があれば、自カード(#1)2のキャッシュメモリ23a(DA)のデータを読出し(図6ステップS17)、バスフェーズ#3でデータバス103にデータを転送する(図6ステップS18)。尚、図10に示すバス制御部23の動作(スヌープエージェント)の詳細については本実施例の動作説明の中で説明する。
【0052】
図7は図1のメモリコントローラ3における動作(メモリエージェントにおける動作)を示すフローチャートである。図7においては、バスフェーズ#1でリクエストエージェントが発行したバスリクエストを受付けた以降のメモリコントローラ3における動作を示している。尚、図7に示す処理はメモリコントローラ3が主記憶4のプログラムを読出して実行することで実現される。
【0053】
メモリコントローラ3はバスリクエストを受付けると、バスフェーズ#2でスヌープエージェントが出力するスヌープ結果を受付け(図7ステップS21)、図11に示すメモリコントローラ3の動作にしたがってバスフェーズ#3でのデータ出力の必要有無を判定する(図7ステップS22)。
【0054】
メモリコントローラ3はデータ出力が必要ありと判定した場合、主記憶4からバスリクエストで指定されたアドレスのデータを読出し(図7ステップS23)、バスフェーズ#3でデータバス103へ主記憶4の読出しデータを出力する(図7ステップS24)。
【0055】
これに対し、メモリコントローラ3はデータ出力が不要と判定した場合、さらにスヌープエージェントがバスフェーズ#3で出力するデータの主記憶4への書込みの必要性の有無を図11に示すメモリコントローラ3の動作にしたがって判定する(図7ステップS25)。
【0056】
メモリコントローラ3は主記憶4への書込みを必要と判定した場合、バスフェーズ#3でデータを受付け(図7ステップS26)、そのデータを主記憶4に書込む(図7ステップS27)。図11に示すメモリコントローラ3の動作の詳細については本実施例の動作説明の中で説明する。
【0057】
図14は本発明の一実施例で用いるMESIプロトコルの各ステータス及びPEステータスを説明するための図である。図14において、「M」(H1)は、他キャッシュと排他的、すなわち自キャッシュのみが有効データを有している状態を示している。この状態では、プロセッサ11からのリードリクエスト、キャッシュラインサイズライトリクエスト、パーシャルサイズライトリクエスト、プリフェッチリクエスト発行回路12からのプリフェッチリクエストの全てがバスリクエストを発行することなく、自キャッシュメモリアクセスだけでその処理を完了する。
【0058】
「E」(H2)は他キャッシュとは排他的だが、自キャッシュと同時に主記憶4にも有効データが存在する状態を示している。この状態でも、プロセッサ11からのリードリクエスト、キャッシュラインサイズライトリクエスト、パーシャルサイズライトリクエスト、プリフェッチリクエスト発行回路12からのプリフェッチリクエストの全てがバスリクエストを発行することなく、自キャッシュメモリアクセスだけでその処理を完了する。
【0059】
「S」(H3)は自キャッシュに他キャッシュと共有可能な状態で、主記憶4と同じデータを有していることを示している。この状態ではプロセッサ11からのリードリクエストのみが自キャッシュメモリアクセスのみで処理を完了する。他のリクエストは図8及び図9に示すバス制御部13(リクエストエージェント)の動作にしたがってバスリクエストを発行し、バスリクエストの処理が完了した後でないと、その処理を完了しない。
【0060】
「I」(H4)は自キャッシュ上に有効なデータが存在しないことを示している。この状態では全てのリクエストが図8及び図9に示すバス制御部13(リクエストエージェント)の動作にしたがってバスリクエストを発行し、バスリクエストの処理が完了した後でないと、その処理を完了しない。
【0061】
「PE」(H5)は本実施例で追加するキャッシュステータスである。自キャッシュにデータは存在しないものの、データ更新の権利は有していることを示している。この状態では、プロセッサ11からのキャッシュラインサイズライトとプリフェッチリクエスト発生回路12からのプリフェッチリクエストのみが自キャッシュメモリアクセスのみで処理を完了する。他のリクエストは図8及び図9に示すバス制御部13(リクエストエージェント)の動作にしたがってバスリクエストを発行し、バスリクエストが完了した後でないと、その処理を完了しない。
【0062】
図8及び図9は図1のバス制御部13(リクエストエージェント)の動作を示す図であり、図5に示すリクエストエージェントの動作フローに対応する。尚、説明中、便宜的にカード(#0)1をリクエストエージェント、カード(#1)2をスヌープエージェントとする。
【0063】
(C1)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「M」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0064】
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13aに登録されているので、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「M」登録されているデータを読出してプロセッサ11へと転送し(図5ステップS3)、処理を終了する。
【0065】
(C2)はプロセッサ11がキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「M」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)またはパーシャルサイズライトリクエスト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0066】
この場合、プロセッサ11が書込みを要求するデータは即時自キャッシュメモリ13aで実施可能状態であるから、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「M」登録されているデータに対してプロセッサ11からのライトデータを書込み(図5ステップS3)、処理を終了する。
【0067】
(C3)はプリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「M」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発行回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0068】
この場合、自キャッシュメモリ13aは既にプリフェッチリクエストが目的としている排他的な状態「M」となっているため、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であり、また既に自キャッシュメモリ13a(AA)の更新も必要ないことから、何も行わず(図5ステップS3)、処理を終了する。
【0069】
(C4)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「E」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0070】
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13aに登録されているため、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「E」登録されているデータを読出してプロセッサ11へと転送し(図5ステップS3)、処理を終了する。
【0071】
(C5)はプロセッサ11がキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「E」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)またはパーシャルサイズライトリクエスト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0072】
この場合、プロセッサ11が書込みを要求するデータは即時自キャッシュメモリ13aで実施可能状態であるから、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「E」登録されているデータに対してプロセッサ11からのライトデータを書込み(図5ステップS3)、処理を終了する。
【0073】
(C6)はプリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5を)発行し、自キャッシュメモリ13a(AA)のステータスが「E」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発行回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0074】
この場合、自キャッシュメモリ13aは既にプリフェッチリクエストが目的としている排他的な状態「E」となっているため、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であり、また既に自キャッシュメモリ13a(AA)の更新も必要ないことから、何も行わず(図5ステップS3)、処理を終了する。
【0075】
(C7)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「S」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0076】
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13aに登録されているので、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「S」登録されているデータを読出してプロセッサ11へと転送し(図5ステップS3)、処理を終了する。
【0077】
(C8)はプロセッサ11がキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「S」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0078】
この場合、自キャッシュメモリ13a(AA)のステータスはプロセッサ11からのキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を即時実行可能な排他的な状態とはなっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストのInvalidate(A5)を発行する(図5ステップS4)。
【0079】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102からスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはInvalidate(A5)であるから、バスフェーズ#3におけるデータ転送はない。
【0080】
ここで、Invalidate(A5)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13は自キャッシュメモリ13a(DA)のデータに対してプロセッサ11からのライトデータを書込み、自キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
【0081】
(C9)はプリフェッチリクエスト発生回路12がプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「S」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発生回路12からプリフェッチリクエストF5を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0082】
この場合、自キャッシュメモリ13a(AA)のステータスは、プリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)が目的としている排他的な状態となっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストのInvalidate(A5)を発行する(図5ステップS4)。
【0083】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102からスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはInvalidate(A5)であるからバスフェーズ#3におけるデータ転送はない。ここで、Invalidate(A5)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関して無効化され、自キャッシュメモリ13aの排他性が保証されるため、キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
【0084】
(C10)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0085】
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13a(AA)に存在しないため、リクエストエージェントのバス制御部13はバスリクエストの発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストMem_Read(A4)を発行する(図5ステップS4)。
【0086】
そして、リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102からスヌープ結果を受付けて保持する(図5ステップS5)。この結果は後にステップS7で使用する。リクエストエージェントのバス制御部13はバスフェーズ#3でスヌープエージェント[カード(#1)2]またはメモリコントローラ3がデータバス103に転送するデータを受付ける(図5ステップS6)。
【0087】
リクエストエージェントのバス制御部13はこのデータをプロセッサ11に転送し、自キャッシュメモリ13a(DA)に格納し、キャッシュメモリ13a(AA)のステータスを更新し、処理を終了する。この際、リクエストエージェントのバス制御部13はバスフェーズ#2で受付けたスヌープ結果が「M Hit」ならば「E」に更新し、「S Hit」ならば「S」に更新し、「Miss」ならば「E」に更新する。
【0088】
(C11)はプロセッサ11がキャッシュラインサイズライト(F3)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0089】
この場合、自キャッシュメモリ13a(AA)のステータスはプロセッサ11からのキャッシュラインサイズライト(F3)を即時実行可能な排他的な状態とはなっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストのInvalidate(A5)を発行する(図5ステップS4)。
【0090】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはInvalidate(A5)であるから、バスフェーズ#3におけるデータ転送はない。
【0091】
ここで、Invalidate(A5)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13は自キャッシュメモリ13a(DA)のデータに対してプロセッサ11からのライトデータを書込み、自キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
【0092】
(C12)はプロセッサ11がパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からパーシャルサイズライト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0093】
この場合、自キャッシュメモリ13a(AA)のステータスはプロセッサ11からのパーシャルサイズライト(F4)を即時実行可能な排他的な状態とはなっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストMem_Read&Invalidate(A7)を発行する(図5ステップS4)。
【0094】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはMem_Read&Invalidate(A7)であるから、リクエストエージェントのバス制御部13はバスフェーズ#3でスヌープエージェント[カード(#1)2]またはメモリコントローラ3がデータバス103に転送するデータを受付ける(図5ステップS6)。
【0095】
ここで、Mem_Read&Invalidate(A7)によって、スヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13はバスフェーズ#3で受付けたデータにプロセッサ11からのライトデータを書込み、さらにこれを自キャッシュメモリ13a(DA)のデータに格納し、キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
【0096】
(C13)はプリフェッチリクエスト発生回路12がプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合のMESIプロトコルのみを採用している従来の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発生回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0097】
この場合、自キャッシュメモリ13a(AA)のステータスは、プリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)が目的としている排他的な状態となっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定する。そして、従来のMESIプロトコルのみで自キャッシュメモリ13a(AA)を排他的な状態とするためには、「M」または「E」に遷移する必要があり、これには主記憶4のデータをキャッシュメモリ13a(DA)に格納する必要があるため、リクエストエージェントのバス制御部13はバスフェーズ#1でアドレスバス101にMem_Read&Invalidate(A7)を発行する必要がある(図5ステップS4)。
【0098】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはMem_Read&Invalidate(A7)であるから、リクエストエージェントのバス制御部13はバスフェーズ#3でメモリコントローラ3がスヌープエージェント[カード(#1)2]またはデータバス103に転送するデータを受付ける(図5ステップS6)。
【0099】
ここで、Mem_Read&Invalidate(A7)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13はバスフェーズ#3でスヌープエージェント[カード(#1)2]またはメモリコントローラ3から受付けたデータを自キャッシュメモリ13a(DA)のデータに格納し、キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
【0100】
(C14)はプリフェッチリクエスト発生回路12がプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合、従来のMESIプロトコルに加え、「PE」ステータスを採用する本実施例での動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発生回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0101】
この場合、自キャッシュメモリ13a(AA)のステータスは、プリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)が目的としている排他的な状態となっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定する。そして、本実施例では、従来の動作[上記の(C13)]とは異なり、自キャッシュメモリ13aを排他的であるが、データが無効であることを許される「PE」に遷移させるため、リクエストエージェントのバス制御部13はバスフェーズ#1でアドレスバス101にInvalidate(PE)(A6)を発行する(図5ステップS4)。
【0102】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはInvalidate(PE)(A6)であるから、リクエストエージェントのバス制御部13はバスフェーズ#3でメモリコントローラ3がデータバス103に転送するデータを受付けない(図5ステップS6)。リクエストエージェントのバス制御部13はキャッシュメモリ13a(AA)のステータスを本実施例で追加した「PE」に更新し(図5ステップS7)、処理を終了する。
【0103】
このように、本実施例では、上述した従来のようなバスフェーズ#3におけるデータ転送の自キャッシュメモリ13aへのデータ格納を必要としない。以下、(C15)から(C19)は、本実施例で追加する「PE」ステータスに関する動作である。
【0104】
(C15)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「PE」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0105】
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13a(AA)に存在しないため、リクエストエージェントのバス制御部13はバスリクエストの発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストMem_Read(A4)を発行する(図5ステップS4)。そして、リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102からスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。
【0106】
リクエストエージェントのバス制御部13はバスフェーズ#3でメモリコントローラ3がデータバス103に転送するデータを受付け(図5ステップS6)、このデータをプロセッサ11に転送し、自キャッシュメモリ13a(DA)に格納し、キャッシュメモリ13a(AA)のステータスを「E」に更新し(図5ステップS7)、処理を終了する。
【0107】
(C16)はプロセッサ11がキャッシュラインサイズライト(F3)を発行し、自キャッシュメモリ13a(AA)のステータスが「PE」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0108】
この場合、プロセッサ11が書込みを要求するデータは即時自キャッシュメモリ13aで実施可能状態であるから、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「E」登録されているデータに対してプロセッサ11からのライトデータを書込み、自キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS3)、処理を終了する。
【0109】
(C17)はプロセッサ11がパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「PE」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からパーシャルサイズライト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0110】
この場合、自キャッシュメモリ13a(AA)のステータスは排他的ではあるが、プロセッサ11からのパーシャルサイズライト(F4)を即時実行可能なデータ有効状態とはなっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストMem_Read&Invalidate(A7)を発行する(図5ステップS4)。
【0111】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはMem_Read&Invalidate(A7)であるから、リクエストエージェントのバス制御部13はバスフェーズ#3でメモリコントローラ3がデータバス103に転送するデータを受付ける(図5ステップS6)。
【0112】
ここで、Mem_Read&Invalidate(A7)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13はバスフェーズ#3で受付けたデータにプロセッサ11からのライトデータを書込み、さらにこれを自キャッシュメモリ13a(DA)のデータに格納し、キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
【0113】
(C18)であるが、従来は「PE」が存在しないので、プリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)に関する従来の動作というものも存在しない。
【0114】
(C19)はプリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「PE」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発行回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0115】
この場合、自キャッシュメモリ13aは既にプリフェッチリクエストが目的としている排他的な状態「PE」となっているため、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、また既に自キャッシュメモリ13a(AA)の更新も必要ないことから、何も行わず(図5ステップS3)、処理を終了する。
【0116】
図10はバス制御部13(スヌープエージェント)の動作を示す図であり、図6に示すスヌープエージェントの動作フローに対応する。
【0117】
(D1)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「M」の時にバスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read(A4)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0118】
今、自キャッシュメモリ23a(AA)のステータスは「M」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102へ「M Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。
【0119】
さらに、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(DA)内に存在するシステム内唯一の有効データを読出し(図6ステップS16,S17)、バスフェーズ#3でこれをデータバス103に出力し(図6ステップS18)、処理を完了する。
【0120】
(D2)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「M」の時にバスフェーズ#1でアドレスバス101からバスリクエストInvalidate(A5)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストInvalidate(A5)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0121】
今、自キャッシュメモリ23a(AA)は「M」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102に「M Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。
【0122】
ところで、図8及び図9を参照すると、リクエストエージェントがInvalidate(A5)を発行するのは、リクエストエージェントのキャッシュメモリ13aが「S」の時のキャッシュラインサイズライト(F3)、パーシャルサイズライト(F4)、プリフェッチリクエスト(F5)の発行時または「I」の時のキャッシュラインサイズライト(F3)の発行時であり、いずれの場合も有効データを必要としていない。そのため、スヌープエージェントのバス制御部23はデータバス103へのデータ出力は不要と判定し(図6ステップS16)、処理を終了する。
【0123】
(D3)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「M」の時にバスフェーズ#1でアドレスバス101から本実施例で追加のバスリクエストInvalidate(PE)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0124】
今、自キャッシュメモリ23a(AA)のステータスは「M」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102に「M Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。
【0125】
ところで、図8及び図9を参照すると、リクエストエージェントがInvalidate(PE)(A6)を発行するのはリクエストエージェントのキャッシュメモリ13aが「I」の時のプリフェッチリクエスト(F5)の発行時であるから、リクエストエージェントは有効データを必要としていない。しかしながら、リクエストエージェントのキャッシュは「PE」へ遷移するため、有効データの保存が必要であるので、スヌープエージェントのバス制御部23は主記憶4への書き戻しのために、キャッシュメモリ23a(DA)のデータを読出し(図6ステップS16,S17)、バスフェーズ#3でデータバス103へ転送し(図6ステップS18)、処理を終了する。この処理は後に説明する図11に示すメモリコントローラ3の動作の(E7)へと続く。
【0126】
(D4)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「M」の時にバスフェーズ#1でアドレスバス101からバスリクエストMem_Read&Invalidate(A7)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read&Invalidate(A7)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0127】
今、自キャッシュメモリ23a(AA)のステータスは「M」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102に「M Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。
【0128】
さらに、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(DA)内に存在するシステム内唯一の有効データを読出し(図6ステップS16,S17)、バスフェーズ#3でこれをデータバス103に出力し(図6ステップS18)、処理を終了する。
【0129】
(D5)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「E」の時にバスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read(A4)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0130】
今、自キャッシュメモリ23a(AA)のステータスは「E」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102へ「S Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「S」に更新する(図6ステップS14,S15)。リクエストエージェントが必要とするデータは後述する図11に示すメモリコントローラ3の動作の(E2)でメモリコントローラ3より転送されるため、スヌープエージェントはデータバス103へのデータ出力不要と判断し(図6ステップS16)、処理を終了する。
【0131】
(D6)、(D7)、(D8)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「E」の時にそれぞれバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0132】
今、自キャッシュメモリ23a(AA)のステータスは「E」であるが、このバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を契機にステータスを「I」に遷移させるので、スヌープエージェントのバス制御部23はスヌープ結果出力を不要と判断する。その後、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。データは後述する図11に示すメモリコントローラ3の動作の(E6)、(E9)、(E12)でメモリコントローラ3より転送されるため、スヌープエージェントのバス制御部23はデータバス103へのデータ出力不要と判断し(図6ステップS16)、処理を終了する。
【0133】
(D9)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「S」の時に、バスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read(A4)を受け付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0134】
今、自キャッシュメモリ23a(AA)のステータスは「S」であるので、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェース#2でスヌープバス102に「S Hit」を出力する(図6ステップS13)。「S」ステータスに変更はないので、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)のステータスの更新を不要と判断する(図6ステップS14)。データは後述する図11に示すメモリコントローラ3の動作の(E2)でメモリコントローラ3より転送されるため、スヌープエージェントのバス制御部23はデータバス103へのデータ出力不要と判断し(図6ステップS16)、処理を終了する。
【0135】
(D10)、(D11)、(D12)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「S」の時に、バスフェーズ#1でアドレスバス101からそれぞれバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0136】
今、自キャッシュメモリ23a(AA)のステータスは「S」であるが、このバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を契機にステータスを「I」に遷移させるので、スヌープエージェントのバス制御部23はスヌープ結果の出力を不要と判断する。
【0137】
その後、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。データは後述する図11に示すメモリコントローラ3の動作の(E6)、(E9)、(E12)でメモリコントローラ3より転送されるため、スヌープエージェントのバス制御部23はデータバス103へのデータ出力を不要と判断し(図6ステップS16)、処理を終了する。
【0138】
(D13)、(D14)、(D15)、(D16)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「I」の時に、バスフェーズ#1でアドレスバス101からそれぞれバスリクエストMem_Read(A4)、Invalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read(A4)、Invalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0139】
今、自キャッシュメモリ23a(AA)のステータスは「I」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力を不要と判断する。また、スヌープエージェントのバス制御部23はキャッシュメモリ23a(AA)のステータスの更新も行わず(図6ステップS14)、データの出力も行わず(図6ステップS16)、処理を終了する。
【0140】
(D17)、(D18)、(D19)、(D20)は、スヌープエージェントのキャッシュメモリ23a(AA)のステータスが「PE」の時にバスフェーズ#1でアドレスバス101からそれぞれバスリクエストMem_Read(A4)、Invalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0141】
今、自キャッシュメモリ23a(AA)のステータスは「PE」であるが、このバスリクエストMem_Read(A4)、Invalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を契機に、自キャッシュメモリ23a(AA)のステータスを「I」に遷移させるので、スヌープエージェントのバス制御部23はスヌープ結果の出力を不要と判断する。その後、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。出力すべきデータは自キャッシュメモリ23a(DA)に存在しないので、これで処理を終了する。
【0142】
図11はメモリコントローラ3の動作を示したものであり、図7に示すメモリコントローラ3の動作フローに対応する。
【0143】
(E1)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受付け、バスフェーズ#2でスヌープバス102から「M Hit」を受付けた時(図7ステップS21)の動作を示すものである。
【0144】
この場合、有効データはスヌープエージェントのキャッシュメモリ23a内にあるので、メモリコントローラ3は主記憶4の読出しを不要と判断する(図7ステップS22)。ところで、Mem_Readが行われると、リクエストエージェントのキャッシュメモリ13aは図9に示すバス制御部13(リクエストエージェント)の動作(C10)、(C15)のように、「E」か「S」に遷移する。
【0145】
そして、「E」または「S」の場合、主記憶4にも有効データが存在しなければならないので、メモリコントローラ3はスヌープエージェントのバス制御部23がバスフェーズ#3でデータバス103に転送するデータの主記憶4への書込みが必要であると判断し(図7ステップS25)、バスフェーズ#3でデータバス103からデータを受付け(図7ステップS26)、そのデータを主記憶4に書込み(図7ステップS27)、処理を終了する。
【0146】
(E2)、(E3)は、メモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受付け、バスフェーズ#2でスヌープバス102から「S Hit」を受付けた場合または「Miss」であった場合(図7ステップS21)の動作を示すものである。
【0147】
この場合、スヌープエージェントのバス制御部23のバスフェーズ#3でのデータバス103へのデータ転送が行われないので、メモリコントローラ3は主記憶4の読出しが必要と判断し(図7ステップS22)、主記憶4のデータを読出し(図7ステップS23)、バスフェーズ#3でこのデータをデータバス103へ出力し(図7ステップS24)、処理を終了する。
【0148】
(E4)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストInvalidate(A5)を受付け、バスフェーズ#2でスヌープバス102から「M Hit」を受付けた時(図7ステップS21)の動作を示すものである。
【0149】
バスリクエストInvalidate(A5)が行われると、リクエストエージェントのキャッシュメモリ13aは図8及び図9に示すバス制御部13(リクエストエージェント)の動作(C8)、(C9)、(C11)のように、データを受付けることなく、「M」に遷移する。したがって、メモリコントローラ3は主記憶4の読出しを不要と判断し(図7ステップS22)、リクエストエージェントのキャッシュメモリ13a(AA)のステータスが「M」に遷移する場合、主記憶4に有効データが存在する必要はないので、主記憶4へのデータの書込みを不要と判断し(図7ステップS25)、処理を終了する。
【0150】
(E5)に示すバスフェーズ#1でアドレスバス101からバスリクエストInvalidate(A5)を受付け、バスフェーズ#2で「S Hit」を受付けるケース(図7ステップS21)は、図10に示すバス制御部23(スヌープエージェント)の動作によるとありえないことになる。
【0151】
(E6)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストInvalidate(A5)を受付け、バスフェーズ#2でスヌープバス102が「Miss」であった場合(図7ステップS21)の動作を示すものである。
【0152】
バスリクエストInvalidate(A5)が行われると、リクエストエージェントのキャッシュメモリ13aは図8及び図9に示すバス制御部13(リクエストエージェント)の動作(C8)、(C9)、(C11)のように、データを受付けることなく、「M」に遷移する。したがって、メモリコントローラ3は主記憶4の読出しを不要と判断し(図7ステップS22)、リクエストエージェントのキャッシュメモリ13a(AA)のステータスが「M」に遷移する場合、主記憶4に有効データが存在する必要はないので、主記憶4へのデータの書込みを不要と判断し(図7ステップS25)、処理を終了する。
【0153】
(E7)はメモリコントローラ3がバスフェーズ#1でアドレスバス101から本実施例で追加となるInvalidate(PE)(A6)を受付け、バスフェーズ#2でスヌープバス102から「M Hit」を受付けた時(図7ステップS21)の動作を示すものである。
【0154】
バスリクエストInvalidate(PE)(A6)が行われると、リクエストエージェントのキャッシュメモリ13aは図9に示すバス制御部13(リクエストエージェント)の動作(C14)のように、データを受付けることなく、「PE」に遷移する。「PE」はスヌープエージェントがキャッシュラインサイズライト(F1)によるデータ更新権を保持しているものの、実際に更新が行われるまでは有効データを主記憶4に保持しておく必要がある。したがって、メモリコントローラ3は主記憶4の読出しを不要と判断するが(図7ステップS22)、主記憶4へのデータの書込みは必要と判断し(図7ステップS25)、バスフェーズ#3でスヌープエージェントのバス制御部23がデータバス103に転送するデータを受付け(図7ステップS26)、そのデータを主記憶4に書込み(図7ステップS27)、処理を終了する。
【0155】
(E8)、(E9)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からInvalidate(PE)(A6)を受付け、バスフェーズ#2でスヌープバス102からそれぞれ「S Hit」を受付けた場合または「Miss」であった場合(図7ステップS21)の動作を示すものである。
【0156】
バスリクエストInvalidate(PE)(A6)が行われると、リクエストエージェントのキャッシュメモリ13aは図9に示すバス制御部13(リクエストエージェント)の動作(C14)のように、データを受付けることなく、「PE」に遷移する。「PE」はスヌープエージェントがキャッシュラインサイズライト(F1)によるデータ更新権を保持しているものの、実際に更新が行われるまでは有効データを主記憶4に保持しておく必要がある。しかしながら、バスフェース#2におけるスヌープ結果が「S Hit」または「Miss」であったということは、既に主記憶4に有効データが存在するということであるから、メモリコントローラ3は主記憶4への書込みを不要と判断し(図7ステップS25)、処理を終了する。
【0157】
(E10)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストMem_Read&Invaidate(A7)を受付け、バスフェーズ#2でスヌープバス102から「M Hit」を受付けた時(図7ステップS21)の動作を示すものである。
【0158】
バスリクエストMem_Read&Invalidate(A7)が行われると、リクエストエージェントのキャッシュメモリ13aは図9に示すバス制御部13(リクエストエージェント)の動作(C14)のように、「M」に遷移する。そして、その時のデータは図10に示すバス制御部23(スヌープエージェント)の動作(D4)のように、スヌープエージェントのバス制御部23がデータ転送を行う。したがって、メモリコントローラ3は主記憶4の読出しを不要と判断し(図7ステップS22)、さらに主記憶4へのデータの書込みを不要と判断し(図7ステップS25)、処理を終了する。
【0159】
(E11)、(E12)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストMem_Read&Invalidate(A7)を受付け、バスフェーズ#2でスヌープバス102からそれぞれ「S Hit」を受付けた場合または「Miss」であった場合(図7ステップS21)の動作を示すものである。
【0160】
この時、図10に示すバス制御部23(スヌープエージェント)の動作(D8)、(D12)、(D16)、(D20)のように、スヌープエージェントのバス制御部23からのデータ転送が行われなので、メモリコントローラ3は主記憶4の読出しが必要と判断し(図7ステップS22)、主記憶4の読出しを行い(図7ステップS23)、バスフェーズ#3でこのデータをデータバス103へ出力し(図7ステップS24)、処理を終了する。
【0161】
従来のストアイン方式キャッシュ管理に使用されるMESIプロトコルでは、キャッシュラインサイズ用プリフェッチ動作時にリクエストエージェントのキャッシュステータスを「M」または「E」にする必要があるため、データを一度自キャッシュメモリに格納する必要がある。
【0162】
しかしながら、本実施例では、MESIプロトコルに「PE」ステータスを追加定義することによって、キャッシュラインサイズライト用プリフェッチ動作時にリクエストエージェントのキャッシュメモリに対するデータ転送の必要性がなくなり、従来のキャッシュステータスMESIだけを使用した場合に比べ、主記憶4のアクセス頻度の低減とリクエストエージェントのDAアクセス頻度の低減とシステムインタフェースのデータ転送頻度の低減とを図ることができる。
【図面の簡単な説明】
【0163】
【図1】本発明の一実施例によるマルチプロセッサシステムの構成を示すブロック図である。
【図2】図1に示すアドレスバス、スヌープバス、データバスにおけるバスフェーズを示すタイムチャートである。
【図3】本発明の一実施例によるバスフェーズ#1で使用するバスリクエストのコマンドコードの一例を示す図である。
【図4】本発明の一実施例によるバスフェーズ#2で使用するスヌープ結果コードの一例を示す図である。
【図5】図1のキャッシュコヒーレンシ及びバス制御部の動作(リクエストエージェントにおける動作)を示すフローチャートである。
【図6】図1のキャッシュコヒーレンシ及びバス制御部の動作(スヌープエージェントにおける動作)を示すフローチャートである。
【図7】図1のメモリコントローラにおける動作(メモリエージェントにおける動作)を示すフローチャートである。
【図8】図1のキャッシュコヒーレンシ及びバス制御部の動作(リクエストエージェント)を示す図である。
【図9】図1のキャッシュコヒーレンシ及びバス制御部の動作(リクエストエージェント)を示す図である。
【図10】図1のキャッシュコヒーレンシ及びバス制御部の動作(スヌープエージェント)を示す図である。
【図11】図1のメモリコントローラの動作に示す図である。
【図12】図1のプロセッサまたはキャッシュラインサイズライト用プリフェッチリクエスト発行回路が発行するリクエスト種類を示す図である。
【図13】図12に示すリクエストの形式の一例を示す図である。
【図14】本発明の一実施例で用いるMESIプロトコルの各ステータス及びPEステータスを説明するための図である。
【符号の説明】
【0164】
1 カード(#0)
2 カード(#1)
3 メモリコントローラ
4 主記憶
11,21 プロセッサ
12,22 キャッシュラインサイズライト用
プリフェッチリクエスト発行回路
13,23 キャッシュコヒーレンシ及びバス制御部
13a,23a ストアインキャッシュメモリ
101 アドレスバス
102 スヌープバス
103 データバス
【技術分野】
【0001】
本発明はマルチプロセッサシステム及びそれに用いるプリフェッチリクエスト制御方法並びにそのプログラムに関し、特にマルチプロセッサシステムにおけるキャッシュラインサイズライト用プリフェッチ動作のリクエスト制御方法に関する。
【背景技術】
【0002】
マルチプロセッサシステムにおいては、CPU(中央処理装置)やIO(入出力)プロセッサ等のプロセッサを各々に1個あるいは複数個を接続するカードを備えている。また、マルチプロセッサシステムでは、上記のプロセッサが使用する主記憶データを一時的に格納するために、一般的なMESI(Modify/Exclusive/Share/Invalidate)プロトコル等を採用するストアイン方式のキャッシュメモリ及びその制御回路を搭載している(例えば、特許文献1参照)。
【0003】
さらに、マルチプロセッサシステムでは、上記のカードに、これらプロセッサが発行するリクエストの振る舞いより、それ以降にプロセッサがキャッシュメモリの最小管理単位、すなわちキャッシュラインサイズのライト動作を行うことを予見して実際にプロセッサがキャッシュラインサイズライトリクエストを発生させる以前に主記憶の先読み動作を行うキャッシュラインサイズライト用プリフェッチリクエスト発行回路を搭載している。これらのカードはシステムインタフェースにて複数個接続することが可能となっている。
【0004】
従来、キャッシュラインサイズライト用プリフェッチ動作を行う場合、後に実際に行われるであろうキャッシュラインサイズライト動作が、別のカード上に搭載されるキャッシュメモリの状態によらず、即座に自キャッシュメモリ上で実施できるよう、自キャッシュメモリの状態を他キャッシュメモリとの排他性を保証できる状態に更新しておく必要がある。これはMESIプロトコルでいうところのM(Modify)またはE(Exclusive)状態にキャッシュメモリを遷移させておく、ということになる。
【0005】
ところで、キャッシュラインサイズライト用プリフェッチ動作の完了後、実際にプロセッサによるキャッシュラインサイズライト動作が実施された場合、当然キャッシュ上のそのキャッシュラインアドレスのデータは全てプロセッサによるキャッシュラインサイズライトデータに書き換えられる。すなわち、この場合には、自キャッシュメモリの状態をMまたはEとするために、キャッシュラインサイズライト用プリフェッチ動作によって主記憶ないし別のカード上に搭載されるキャッシュメモリからデータが読出されて転送され、自キャッシュに格納されたデータは一切参照されないことになる。
【0006】
【特許文献1】特開平08−194615号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
上述した従来のマルチプロセッサシステムでは、キャッシュラインサイズライト用プリフェッチ動作時に、実際にキャッシュラインサイズライトが実施される際に参照されることがないにも関わらず、自キャッシュをMまたはEにするために、主記憶またはスヌープエージェントのキャッシュからのデータ読出し、カード間インタフェースでのデータの転送、リクエストエージェントのキャッシュへのデータの格納という、無用なキャッシュアクセス、無用な主記憶アクセス、無用なシステムインタフェースのデータ転送が必要になる。
【0008】
そこで、本発明の目的は上記の問題点を解消し、主記憶アクセス頻度の低減とリクエストエージェントのDAアクセス頻度の低減とシステムインタフェースのデータ転送頻度の低減とを図ることができるマルチプロセッサシステム及びそれに用いるプリフェッチリクエスト制御方法並びにそのプログラムを提供することにある。
【課題を解決するための手段】
【0009】
本発明によるマルチプロセッサシステムは、プロセッサを1個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにMESI(Modify/Exclusive/Share/Invalidate)プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムであって、
前記MESIプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスPE(Pseudo−Exclusive)を加えている。
【0010】
本発明によるプリフェッチリクエスト制御方法は、プロセッサを1個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにMESI(Modify/Exclusive/Share/Invalidate)プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムに用いるプリフェッチリクエスト制御方法であって、
前記MESIプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスPE(Pseudo−Exclusive)を加えている。
【0011】
本発明によるプリフェッチリクエスト制御方法のプログラムは、プロセッサを1個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにMESI(Modify/Exclusive/Share/Invalidate)プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムに用いるプリフェッチリクエスト制御方法のプログラムであって、
前記MESIプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスPE(Pseudo−Exclusive)を加え、
前記制御回路に、前記プリフェッチリクエストが発行された時に自カードのキャッシュメモリのデータが無効である場合に前記キャッシュメモリを排他的としかつ前記データが無効であることを許す前記キャッシュステータスPEに遷移させる処理を実行させている。
【0012】
すなわち、本発明のマルチプロセッサシステムは、従来のキャッシュステータスMESI(Modify/Exclusive/Share/Invalidate)に、新たなキャッシュステータスPE(Pseudo−Exclusive)を加え、データは無効であるが、キャッシュラインサイズライトはいつでも実施できるという状態を取り決め、この状態に遷移させるためのシステムインタフェース上のプロトコルを取り決めている。
【0013】
つまり、本発明のマルチプロセッサシステムでは、キャッシュラインサイズライト用プリフェッチ動作時に、主記憶を読出したり、別カード上のキャッシュメモリからデータを取り込んだりすることなく、それでいてプロセッサによるキャッシュラインサイズライトを他キャッシュメモリの状態によらず、即座に自キャッシュメモリ上で実施可能としている。
【0014】
本発明のマルチプロセッサシステムでは、このキャッシュステータスを定義することによって、キャッシュラインサイズライト用プリフェッチ動作時にリクエスタカード上のキャッシュメモリに対するデータ転送の必要性がなくなり、従来のキャッシュステータスMESIだけを使用した場合に比べ、自キャッシュアクセス頻度、主記憶アクセス頻度、システムインタフェースのデータ転送頻度の低減を期待することが可能となる。
【0015】
従来のストアイン方式キャッシュ管理に使用されるMESIプロトコルでは、キャッシュラインサイズ用プリフェッチ動作時にリクエストエージェントのキャッシュステータスをM(Modify)またはE(Exclusive)にする必要があるため、データを一度、自キャッシュに格納する必要がある。
【0016】
しかしながら、本発明のマルチプロセッサシステムでは、MESIプロトコルにPEステータスを追加定義することによって、キャッシュラインサイズライト用プリフェッチ動作時にリクエストエージェントのキャッシュメモリに対するデータ転送の必要性がなくなる。また、本発明のマルチプロセッサシステムでは、従来のキャッシュステータスMESIだけを使用した場合に比べ、主記憶アクセス頻度の低減、リクエストエージェントのDA(Data Array)アクセス頻度の低減、システムインタフェースのデータ転送頻度の低減が期待される。
【発明の効果】
【0017】
本発明は、以下に述べるような構成及び動作とすることで、主記憶アクセス頻度の低減とリクエストエージェントのDAアクセス頻度の低減とシステムインタフェースのデータ転送頻度の低減とを図ることができるという効果が得られる。
【発明を実施するための最良の形態】
【0018】
次に、本発明の一実施例について図面を参照して説明する。図1は本発明の一実施例によるマルチプロセッサシステムの構成を示すブロック図である。図1において、本発明の一実施例によるマルチプロセッサシステムは二つのカード(#0)1,(#1)2にプロセッサ11,21を搭載し、それらのプロセッサ11,21用にストアインキャッシュメモリ(以下、キャッシュメモリとする)13a,23aを搭載し、これらのカード(#0)1,(#1)2間をアドレスバス101、スヌープバス102、データバス103によって接続している。
【0019】
尚、図1中のプロセッサ数、カード数は、本実施例を説明するにあたって必要な最小構成を示したものであり、この個数に限定されるものではない。また、カード間をバス接続したことも、本実施例を説明するにあたって最も簡単なカード間接続方法を示したものであり、各カードのキャッシュと主記憶とのメモリコヒーレンシが保てるのであれば、ここで示したバス接続に限定されるものではない。
【0020】
プロセッサ11,21はCPU(中央処理装置)やI/O(入出力)プロセッサ等、主記憶へのアクセスリクエストのリクエスタになるものであり、ごく一般的なものでよく、ここではその詳細については言及しない。
【0021】
キャッシュメモリ13a,23aにはキャッシュラインサイズと呼ばれるキャッシュで管理する最小データ単位毎の主記憶データのコピーと、キャッシュラインサイズデータ毎のキャッシュステータス情報とが保持されている。特に、主記憶データのコピーを格納するキャッシュメモリはDA(Data Array)、キャッシュステータス情報を格納するキャッシュメモリはAA(Address Array)とそれぞれ呼ばれ、DAとAAとは必ず対で使用される。ここで使用するキャッシュステータスはMESI(Modify/Exclusive/Share/Invalidate)プロトコル等の一般的なストアイン方式のキャッシュプロトコルのものとする。
【0022】
キャッシュコヒーレンシ及びバス制御部(以下、バス制御部とする)13,23はそれぞれカード(#0)1,(#1)2に搭載されるキャッシュメモリ13a,23aとメモリコントローラ3とのキャッシュメモリコヒーレンシ保証を行い、さらにそれを実現するためにカード(#0)1,(#1)2とメモリコントローラ3とを接続するカード間インタフェース、すなわちその用途によってアドレスバス101、スヌープバス102、データバス103と呼ばれるバスインタフェースを制御する。
【0023】
キャッシュラインサイズライト用プリフェッチリクエスト発行回路(以下、プリフェッチリクエスト発行回路とする)12,22はそれぞれのカード(#0)1,(#1)2に搭載されるプロセッサ11,21からキャッシュラインサイズライトリクエストが発行されることを予見し、プロセッサ11,21が実際にキャッシュラインサイズライトリクエストを発行した際に即座にプロセッサ11,21が搭載されるのと同じカード(#0)1,(#1)2上のキャッシュメモリ13a,23a上でそのライト動作が実施可能となるような状態にキャッシュラインステータスを変更しておくことを目的としたリクエスト(以下、プリフェッチリクエストとする)を発行する。
【0024】
プロセッサ11,21によるキャッシュラインサイズライトリクエストの予見は、例えば、プロセッサ11,21が連続した主記憶アドレスのキャッシュラインサイズライトを複数、連続発行させた等の一般的に考えられる予見アルゴリズムでよく、ここではその詳細については言及しない。
【0025】
メモリコントローラ3はカード間インタフェースすなわちアドレスバス101、スヌープバス102、データバス103各々の制御と、DRAM(Dynamic Random Access Memory)等で構成される主記憶4との入出力の制御を行う。
【0026】
アドレスバス101、スヌープバス102、データバス103各々はカード(#0)1,(#1)2とメモリコントローラ3とを接続するインタフェースである。アドレスバス101はメモリアクセスリクエストを発行するためのバス、スヌープバス102はアドレスバス101に発行されたバスリクエストに対する自カード(#0)1,(#1)2上に搭載のキャッシュメモリ13a,23aのキャッシュステータスを通知するためのバス、データバス103はキャッシュメモリ13a,23aからの読出しデータまたは主記憶4からの読出しデータをリクエスタに転送するためのバスである。ここで、アドレスバス101を使用してメモリアクセスリクエストを発行するカードをリクエストエージェント、メモリコントローラ3を除くそれ以外のカードをスヌープエージェントと称する。
【0027】
本実施例でプロセッサ11,21またはプリフェッチリクエスト発行回路12,22が発行するリクエスト種類を図12に示し、そのリクエストの形式の一例を図13に示す。図12において、キャッシュラインサイズリード(F1)はプロセッサ11,21からのキャッシュラインサイズと同じデータ量の主記憶4の読出し要求である。パーシャルラインサイズリード(F2)はプロセッサ11,21からのキャッシュラインサイズよりも小さいデータ量の主記憶4の読出し要求である。尚、本実施例においては、キャッシュラインサイズリード(F1)とパーシャルサイズリード(F2)との動作になんら差がないため、以後、単にリードリクエストまたはリードと称する。
【0028】
キャッシュラインサイズライト(F3)はプロセッサ11,21からのキャッシュラインサイズと同じデータ量の書込み要求である。パーシャルラインサイズライト(F4)はプロセッサ11,21からのキャッシュラインサイズよりも小さいデータ量の書込み要求である。
【0029】
キャッシュラインサイズライト用プリフェッチリクエスト(プリフェッチリクエスト)は、プリフェッチリクエスト発生回路12,22からのリクエストで、後に実施が予見されるプロセッサ11,21からのキャッシュラインサイズライト(F3)に備えて予め自キャッシュステータスを排他的な状態としておくことを目的として実行されるリクエストである。ここで、排他的なキャッシュステータスとは、従来のMESIプロトコルで言えば、「M(Modify)」または「E(Exclusive)」を指す。本実施例ではこれに「PE(Pseudo−Exclusive)」ステータスを加える。
【0030】
図13において、(G1)はこれらリクエストのコードを示す。(G2)はこのリクエストがアクセスすべき主記憶アドレスを示す。(G3)はリクエストがパーシャルサイズリード(F2)またはパーシャルサイズライト(F4)の時にリードまたはライトを実施すべきキャッシュラインサイズ内の位置を指定する。
【0031】
図2は図1に示すアドレスバス101、スヌープバス102、データバス103におけるバスフェーズを示すタイムチャートである。図2において、バスリクエストはバスフェーズ#1〜#3にしたがって処理される。リクエストエージェントはバスフェーズ#1においてアドレスバス101にバスリクエストを発行する。バスリクエストについては図3に示し、その内容については後述する。
【0032】
バスリクエストを受け取ったスヌープエージェントは、自カード搭載のキャッシュメモリにバスリクエストアドレスA2で指定されるデータが格納されているか、格納されているのであればどのようなステータスであるかの索引を行い、バスフェーズ#2においてスヌープバス102に自カード搭載のキャッシュメモリのキャッシュステータス情報を転送する。
【0033】
バスフェーズ#3ではスヌープエージェント、またはバスフェーズ#2におけるスヌープ通知によってはメモリコントローラ3が、データバス103にリクエストエージェントに対するリプライデータ転送を行う。尚、ここではカード間インタフェースプロトコルとして3つの固定時間間隔のバスフェーズ#1〜#3を用いているが、これは本実施例における説明の簡単化のためであり、各カード間とメモリコントローラ3とを接続し、キャッシュメモリコヒーレンシを実現できるカード間インタフェースプロトコルであればどのようなものでもよい。
【0034】
図3は本発明の一実施例によるバスフェーズ#1で使用するバスリクエストのコマンドコードの一例を示す図であり、図4は本発明の一実施例によるバスフェーズ#2で使用するスヌープ結果コードの一例を示す図である。図8及び図9は図1のバス制御部12,22の動作(リクエストエージェント)を示す図であり、図10は図1のバス制御部12,22の動作(スヌープエージェント)を示す図であり、図11は図1のメモリコントローラ3の動作に示す図である。これら図1〜図4及び図8〜図11を参照してバスにこれらリクエストが発行される条件とその際の動作、またスヌープ結果コードが発行される条件とその際の動作については説明する。尚、図8〜図11についての説明は後述する。
【0035】
(A1)はバスリクエストのコマンドコードであり、Mem_Read(A4)は自キャッシュステータスが「I(Invalidate)」または「PE」の時に「S(Share)」または「E」への遷移を目的としてアドレスバス101へ発行される。
【0036】
Invalidate(A5)は自キャッシュが「S」または「I」の時に他のキャッシュを全て「I」とし、自キャッシュのみに有効データが存在する「M」ステータスへの遷移を目的として発行される。
【0037】
Invalidate(PE)(A6)は本実施例において追加となるリクエストであり、他のキャッシュを全て「I」とすることで、自キャッシュ上のデータ有無によらず、即時プロセッサリクエストのキャッシュラインサイズライトを実施することができる「PE」ステータスに遷移することを目的として発行する。
【0038】
Mem_Read&Invalidate(A7)は自キャッシュが「I」の時に他のキャッシュを全て無効とし(Invalidate)、自キャッシュを「M」に遷移させることを目的とする。
【0039】
(B1)はバスフェーズ#2で使用するスヌープ結果コードである。Miss(B2)はスヌープエージェントのキャッシュメモリにバスリクエストで指定されるアドレスのデータが格納されていないか、「S」または「E」であり、バスリクエストを契機として「I」に遷移することを意味する。
【0040】
「S Hit」(B3)はスヌープエージェントのキャッシュメモリにバスリクエストで指定されるアドレスのデータが「E」または「S」で格納されており、「E」ならばバスリクエストを契機として「S」ステータスに遷移し、「S」ならばその後も「S」のままデータを格納し続けることを意味する。
【0041】
「M Hit」(B4)はスヌープエージェントのキャッシュメモリにバスリクエストで指定されるアドレスのデータが格納されており、バスリクエストを契機として「I」に遷移することを意味する。
【0042】
図5は図1のバス制御部13,23の動作(リクエストエージェントにおける動作)を示すフローチャートである。図5においては、プロセッサリクエストまたはプリフェッチリクエストを受付けたリクエストエージェントのバス制御部13,23の動作を示している。ここでは、便宜的に図1のカード(#0)1をリクエストエージェント、カード(#1)2をスヌープエージェントとして説明する。尚、図5に示す処理はバス制御部13,23が主記憶4のプログラムを読出して実行することで実現される。
【0043】
リクエストエージェントのバス制御部13はプロセッサ11またはプリフェッチリクエスト発行回路12からメモリアクセスリクエスト、プリフェッチリクエストを受付けると、自カード(#0)1のキャッシュメモリ13a(AA)を参照し(図5ステップS1)、図8に示すバス制御部13の動作(リクエストエージェント)に応じてバスリクエストを発行するか否かを判定する(図5ステップS2)。
【0044】
バス制御部13はバスリクエスト発行の必要がない場合、キャッシュメモリ13aに必要なデータが必要なステータスで登録されていることになるので、キャッシュメモリ13a(DA)に必要なアクセスを行い、また自カード(#0)1のキャッシュメモリ13a(AA)にアクセスしてキャッシュステータスを必要に応じて更新する(図5ステップS3)。
【0045】
これに対し、バス制御部13はバスリクエスト発行が必要と判定した場合、キャッシュメモリ13aに必要なデータがないか、期待するキャッシュステータスでないことを意味し、キャッシュメモリ13a内のデータをプロセッサリクエスト、プリフェッチリクエストを処理するのに必要なキャッシュデータ、キャッシュステータスに更新するためにバスリクエスト発行が必要であることを意味する。
【0046】
バス制御部13はバスフェーズ#1において、図8及び図9に示すバス制御部13の動作(リクエストエージェント)にしたがってプロセッサリクエスト、プリフェッチリクエスト及びキャッシュメモリ13aの状態に応じたバスリクエストを発行し(図5ステップS4)、バスフェーズ#2でスヌープエージェントのキャッシュの状態の報告を受取り(図5ステップS5)、バスフェーズ#3で必要ならばデータバス103のデータを受取る(図5ステップS6)。
【0047】
その後に、バス制御部13は図8及び図9に示すバス制御部13の動作(リクエストエージェント)にしたがってキャッシュメモリ13a(AA)のステータス更新、キャッシュメモリ13a(DA)のデータの更新、プロセッサ11へのデータ転送等を行う(図5ステップS7)。尚、図8及び図9に示すバス制御部13の動作(リクエストエージェント)の詳細については、本実施例の動作説明の中で説明する。
【0048】
図6は図1のバス制御部13,23の動作(スヌープエージェントにおける動作)を示すフローチャートである。図6においては、バスフェーズ#1でリクエストエージェントが発行したバスリクエストを受付けた以降のスヌープエージェントのバス制御部23における動作を示している。尚、図6に示す処理はバス制御部13,23が主記憶4のプログラムを読出して実行することで実現される。
【0049】
スヌープエージェントのバス制御部23はバスリクエストを受付けると、キャッシュメモリ23a(AA)を索引し(図6ステップS11)、バスリクエストが指定するアドレスに対する自キャッシュステータスを確認する。バス制御部23は図10に示すバス制御部23の動作(スヌープエージェント)に応じてスヌープ結果をスヌープバス102に出力する必要があるか否かを判定し(図6ステップS12)、出力する必要がある場合、バスフェーズ#2でスヌープバス102にスヌープ結果を出力する(図6ステップS13)。
【0050】
続いて、バス制御部23は自カード(#1)2のキャッシュメモリ23a(AA)のステータスを更新する必要の有無を判定し(図6ステップS14)、必要があれば、キャッシュメモリ23a(AA)のステータスを更新する(図6ステップS15)。
【0051】
さらに、バス制御部23は自カード(#1)2のキャッシュメモリ23a(DA)のデータをデータバス103に出力する必要の有無を判定し(図6ステップS16)、データをデータバス103に出力する必要があれば、自カード(#1)2のキャッシュメモリ23a(DA)のデータを読出し(図6ステップS17)、バスフェーズ#3でデータバス103にデータを転送する(図6ステップS18)。尚、図10に示すバス制御部23の動作(スヌープエージェント)の詳細については本実施例の動作説明の中で説明する。
【0052】
図7は図1のメモリコントローラ3における動作(メモリエージェントにおける動作)を示すフローチャートである。図7においては、バスフェーズ#1でリクエストエージェントが発行したバスリクエストを受付けた以降のメモリコントローラ3における動作を示している。尚、図7に示す処理はメモリコントローラ3が主記憶4のプログラムを読出して実行することで実現される。
【0053】
メモリコントローラ3はバスリクエストを受付けると、バスフェーズ#2でスヌープエージェントが出力するスヌープ結果を受付け(図7ステップS21)、図11に示すメモリコントローラ3の動作にしたがってバスフェーズ#3でのデータ出力の必要有無を判定する(図7ステップS22)。
【0054】
メモリコントローラ3はデータ出力が必要ありと判定した場合、主記憶4からバスリクエストで指定されたアドレスのデータを読出し(図7ステップS23)、バスフェーズ#3でデータバス103へ主記憶4の読出しデータを出力する(図7ステップS24)。
【0055】
これに対し、メモリコントローラ3はデータ出力が不要と判定した場合、さらにスヌープエージェントがバスフェーズ#3で出力するデータの主記憶4への書込みの必要性の有無を図11に示すメモリコントローラ3の動作にしたがって判定する(図7ステップS25)。
【0056】
メモリコントローラ3は主記憶4への書込みを必要と判定した場合、バスフェーズ#3でデータを受付け(図7ステップS26)、そのデータを主記憶4に書込む(図7ステップS27)。図11に示すメモリコントローラ3の動作の詳細については本実施例の動作説明の中で説明する。
【0057】
図14は本発明の一実施例で用いるMESIプロトコルの各ステータス及びPEステータスを説明するための図である。図14において、「M」(H1)は、他キャッシュと排他的、すなわち自キャッシュのみが有効データを有している状態を示している。この状態では、プロセッサ11からのリードリクエスト、キャッシュラインサイズライトリクエスト、パーシャルサイズライトリクエスト、プリフェッチリクエスト発行回路12からのプリフェッチリクエストの全てがバスリクエストを発行することなく、自キャッシュメモリアクセスだけでその処理を完了する。
【0058】
「E」(H2)は他キャッシュとは排他的だが、自キャッシュと同時に主記憶4にも有効データが存在する状態を示している。この状態でも、プロセッサ11からのリードリクエスト、キャッシュラインサイズライトリクエスト、パーシャルサイズライトリクエスト、プリフェッチリクエスト発行回路12からのプリフェッチリクエストの全てがバスリクエストを発行することなく、自キャッシュメモリアクセスだけでその処理を完了する。
【0059】
「S」(H3)は自キャッシュに他キャッシュと共有可能な状態で、主記憶4と同じデータを有していることを示している。この状態ではプロセッサ11からのリードリクエストのみが自キャッシュメモリアクセスのみで処理を完了する。他のリクエストは図8及び図9に示すバス制御部13(リクエストエージェント)の動作にしたがってバスリクエストを発行し、バスリクエストの処理が完了した後でないと、その処理を完了しない。
【0060】
「I」(H4)は自キャッシュ上に有効なデータが存在しないことを示している。この状態では全てのリクエストが図8及び図9に示すバス制御部13(リクエストエージェント)の動作にしたがってバスリクエストを発行し、バスリクエストの処理が完了した後でないと、その処理を完了しない。
【0061】
「PE」(H5)は本実施例で追加するキャッシュステータスである。自キャッシュにデータは存在しないものの、データ更新の権利は有していることを示している。この状態では、プロセッサ11からのキャッシュラインサイズライトとプリフェッチリクエスト発生回路12からのプリフェッチリクエストのみが自キャッシュメモリアクセスのみで処理を完了する。他のリクエストは図8及び図9に示すバス制御部13(リクエストエージェント)の動作にしたがってバスリクエストを発行し、バスリクエストが完了した後でないと、その処理を完了しない。
【0062】
図8及び図9は図1のバス制御部13(リクエストエージェント)の動作を示す図であり、図5に示すリクエストエージェントの動作フローに対応する。尚、説明中、便宜的にカード(#0)1をリクエストエージェント、カード(#1)2をスヌープエージェントとする。
【0063】
(C1)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「M」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0064】
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13aに登録されているので、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「M」登録されているデータを読出してプロセッサ11へと転送し(図5ステップS3)、処理を終了する。
【0065】
(C2)はプロセッサ11がキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「M」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)またはパーシャルサイズライトリクエスト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0066】
この場合、プロセッサ11が書込みを要求するデータは即時自キャッシュメモリ13aで実施可能状態であるから、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「M」登録されているデータに対してプロセッサ11からのライトデータを書込み(図5ステップS3)、処理を終了する。
【0067】
(C3)はプリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「M」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発行回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0068】
この場合、自キャッシュメモリ13aは既にプリフェッチリクエストが目的としている排他的な状態「M」となっているため、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であり、また既に自キャッシュメモリ13a(AA)の更新も必要ないことから、何も行わず(図5ステップS3)、処理を終了する。
【0069】
(C4)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「E」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0070】
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13aに登録されているため、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「E」登録されているデータを読出してプロセッサ11へと転送し(図5ステップS3)、処理を終了する。
【0071】
(C5)はプロセッサ11がキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「E」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)またはパーシャルサイズライトリクエスト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0072】
この場合、プロセッサ11が書込みを要求するデータは即時自キャッシュメモリ13aで実施可能状態であるから、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「E」登録されているデータに対してプロセッサ11からのライトデータを書込み(図5ステップS3)、処理を終了する。
【0073】
(C6)はプリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5を)発行し、自キャッシュメモリ13a(AA)のステータスが「E」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発行回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0074】
この場合、自キャッシュメモリ13aは既にプリフェッチリクエストが目的としている排他的な状態「E」となっているため、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であり、また既に自キャッシュメモリ13a(AA)の更新も必要ないことから、何も行わず(図5ステップS3)、処理を終了する。
【0075】
(C7)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「S」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0076】
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13aに登録されているので、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「S」登録されているデータを読出してプロセッサ11へと転送し(図5ステップS3)、処理を終了する。
【0077】
(C8)はプロセッサ11がキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「S」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0078】
この場合、自キャッシュメモリ13a(AA)のステータスはプロセッサ11からのキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を即時実行可能な排他的な状態とはなっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストのInvalidate(A5)を発行する(図5ステップS4)。
【0079】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102からスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはInvalidate(A5)であるから、バスフェーズ#3におけるデータ転送はない。
【0080】
ここで、Invalidate(A5)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13は自キャッシュメモリ13a(DA)のデータに対してプロセッサ11からのライトデータを書込み、自キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
【0081】
(C9)はプリフェッチリクエスト発生回路12がプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「S」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発生回路12からプリフェッチリクエストF5を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0082】
この場合、自キャッシュメモリ13a(AA)のステータスは、プリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)が目的としている排他的な状態となっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストのInvalidate(A5)を発行する(図5ステップS4)。
【0083】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102からスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはInvalidate(A5)であるからバスフェーズ#3におけるデータ転送はない。ここで、Invalidate(A5)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関して無効化され、自キャッシュメモリ13aの排他性が保証されるため、キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
【0084】
(C10)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0085】
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13a(AA)に存在しないため、リクエストエージェントのバス制御部13はバスリクエストの発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストMem_Read(A4)を発行する(図5ステップS4)。
【0086】
そして、リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102からスヌープ結果を受付けて保持する(図5ステップS5)。この結果は後にステップS7で使用する。リクエストエージェントのバス制御部13はバスフェーズ#3でスヌープエージェント[カード(#1)2]またはメモリコントローラ3がデータバス103に転送するデータを受付ける(図5ステップS6)。
【0087】
リクエストエージェントのバス制御部13はこのデータをプロセッサ11に転送し、自キャッシュメモリ13a(DA)に格納し、キャッシュメモリ13a(AA)のステータスを更新し、処理を終了する。この際、リクエストエージェントのバス制御部13はバスフェーズ#2で受付けたスヌープ結果が「M Hit」ならば「E」に更新し、「S Hit」ならば「S」に更新し、「Miss」ならば「E」に更新する。
【0088】
(C11)はプロセッサ11がキャッシュラインサイズライト(F3)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0089】
この場合、自キャッシュメモリ13a(AA)のステータスはプロセッサ11からのキャッシュラインサイズライト(F3)を即時実行可能な排他的な状態とはなっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストのInvalidate(A5)を発行する(図5ステップS4)。
【0090】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはInvalidate(A5)であるから、バスフェーズ#3におけるデータ転送はない。
【0091】
ここで、Invalidate(A5)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13は自キャッシュメモリ13a(DA)のデータに対してプロセッサ11からのライトデータを書込み、自キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
【0092】
(C12)はプロセッサ11がパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からパーシャルサイズライト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0093】
この場合、自キャッシュメモリ13a(AA)のステータスはプロセッサ11からのパーシャルサイズライト(F4)を即時実行可能な排他的な状態とはなっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストMem_Read&Invalidate(A7)を発行する(図5ステップS4)。
【0094】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはMem_Read&Invalidate(A7)であるから、リクエストエージェントのバス制御部13はバスフェーズ#3でスヌープエージェント[カード(#1)2]またはメモリコントローラ3がデータバス103に転送するデータを受付ける(図5ステップS6)。
【0095】
ここで、Mem_Read&Invalidate(A7)によって、スヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13はバスフェーズ#3で受付けたデータにプロセッサ11からのライトデータを書込み、さらにこれを自キャッシュメモリ13a(DA)のデータに格納し、キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
【0096】
(C13)はプリフェッチリクエスト発生回路12がプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合のMESIプロトコルのみを採用している従来の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発生回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0097】
この場合、自キャッシュメモリ13a(AA)のステータスは、プリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)が目的としている排他的な状態となっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定する。そして、従来のMESIプロトコルのみで自キャッシュメモリ13a(AA)を排他的な状態とするためには、「M」または「E」に遷移する必要があり、これには主記憶4のデータをキャッシュメモリ13a(DA)に格納する必要があるため、リクエストエージェントのバス制御部13はバスフェーズ#1でアドレスバス101にMem_Read&Invalidate(A7)を発行する必要がある(図5ステップS4)。
【0098】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはMem_Read&Invalidate(A7)であるから、リクエストエージェントのバス制御部13はバスフェーズ#3でメモリコントローラ3がスヌープエージェント[カード(#1)2]またはデータバス103に転送するデータを受付ける(図5ステップS6)。
【0099】
ここで、Mem_Read&Invalidate(A7)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13はバスフェーズ#3でスヌープエージェント[カード(#1)2]またはメモリコントローラ3から受付けたデータを自キャッシュメモリ13a(DA)のデータに格納し、キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
【0100】
(C14)はプリフェッチリクエスト発生回路12がプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合、従来のMESIプロトコルに加え、「PE」ステータスを採用する本実施例での動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発生回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0101】
この場合、自キャッシュメモリ13a(AA)のステータスは、プリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)が目的としている排他的な状態となっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定する。そして、本実施例では、従来の動作[上記の(C13)]とは異なり、自キャッシュメモリ13aを排他的であるが、データが無効であることを許される「PE」に遷移させるため、リクエストエージェントのバス制御部13はバスフェーズ#1でアドレスバス101にInvalidate(PE)(A6)を発行する(図5ステップS4)。
【0102】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはInvalidate(PE)(A6)であるから、リクエストエージェントのバス制御部13はバスフェーズ#3でメモリコントローラ3がデータバス103に転送するデータを受付けない(図5ステップS6)。リクエストエージェントのバス制御部13はキャッシュメモリ13a(AA)のステータスを本実施例で追加した「PE」に更新し(図5ステップS7)、処理を終了する。
【0103】
このように、本実施例では、上述した従来のようなバスフェーズ#3におけるデータ転送の自キャッシュメモリ13aへのデータ格納を必要としない。以下、(C15)から(C19)は、本実施例で追加する「PE」ステータスに関する動作である。
【0104】
(C15)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「PE」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0105】
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13a(AA)に存在しないため、リクエストエージェントのバス制御部13はバスリクエストの発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストMem_Read(A4)を発行する(図5ステップS4)。そして、リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102からスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。
【0106】
リクエストエージェントのバス制御部13はバスフェーズ#3でメモリコントローラ3がデータバス103に転送するデータを受付け(図5ステップS6)、このデータをプロセッサ11に転送し、自キャッシュメモリ13a(DA)に格納し、キャッシュメモリ13a(AA)のステータスを「E」に更新し(図5ステップS7)、処理を終了する。
【0107】
(C16)はプロセッサ11がキャッシュラインサイズライト(F3)を発行し、自キャッシュメモリ13a(AA)のステータスが「PE」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0108】
この場合、プロセッサ11が書込みを要求するデータは即時自キャッシュメモリ13aで実施可能状態であるから、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「E」登録されているデータに対してプロセッサ11からのライトデータを書込み、自キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS3)、処理を終了する。
【0109】
(C17)はプロセッサ11がパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「PE」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からパーシャルサイズライト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0110】
この場合、自キャッシュメモリ13a(AA)のステータスは排他的ではあるが、プロセッサ11からのパーシャルサイズライト(F4)を即時実行可能なデータ有効状態とはなっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストMem_Read&Invalidate(A7)を発行する(図5ステップS4)。
【0111】
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはMem_Read&Invalidate(A7)であるから、リクエストエージェントのバス制御部13はバスフェーズ#3でメモリコントローラ3がデータバス103に転送するデータを受付ける(図5ステップS6)。
【0112】
ここで、Mem_Read&Invalidate(A7)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13はバスフェーズ#3で受付けたデータにプロセッサ11からのライトデータを書込み、さらにこれを自キャッシュメモリ13a(DA)のデータに格納し、キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
【0113】
(C18)であるが、従来は「PE」が存在しないので、プリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)に関する従来の動作というものも存在しない。
【0114】
(C19)はプリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「PE」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発行回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
【0115】
この場合、自キャッシュメモリ13aは既にプリフェッチリクエストが目的としている排他的な状態「PE」となっているため、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、また既に自キャッシュメモリ13a(AA)の更新も必要ないことから、何も行わず(図5ステップS3)、処理を終了する。
【0116】
図10はバス制御部13(スヌープエージェント)の動作を示す図であり、図6に示すスヌープエージェントの動作フローに対応する。
【0117】
(D1)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「M」の時にバスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read(A4)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0118】
今、自キャッシュメモリ23a(AA)のステータスは「M」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102へ「M Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。
【0119】
さらに、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(DA)内に存在するシステム内唯一の有効データを読出し(図6ステップS16,S17)、バスフェーズ#3でこれをデータバス103に出力し(図6ステップS18)、処理を完了する。
【0120】
(D2)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「M」の時にバスフェーズ#1でアドレスバス101からバスリクエストInvalidate(A5)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストInvalidate(A5)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0121】
今、自キャッシュメモリ23a(AA)は「M」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102に「M Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。
【0122】
ところで、図8及び図9を参照すると、リクエストエージェントがInvalidate(A5)を発行するのは、リクエストエージェントのキャッシュメモリ13aが「S」の時のキャッシュラインサイズライト(F3)、パーシャルサイズライト(F4)、プリフェッチリクエスト(F5)の発行時または「I」の時のキャッシュラインサイズライト(F3)の発行時であり、いずれの場合も有効データを必要としていない。そのため、スヌープエージェントのバス制御部23はデータバス103へのデータ出力は不要と判定し(図6ステップS16)、処理を終了する。
【0123】
(D3)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「M」の時にバスフェーズ#1でアドレスバス101から本実施例で追加のバスリクエストInvalidate(PE)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0124】
今、自キャッシュメモリ23a(AA)のステータスは「M」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102に「M Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。
【0125】
ところで、図8及び図9を参照すると、リクエストエージェントがInvalidate(PE)(A6)を発行するのはリクエストエージェントのキャッシュメモリ13aが「I」の時のプリフェッチリクエスト(F5)の発行時であるから、リクエストエージェントは有効データを必要としていない。しかしながら、リクエストエージェントのキャッシュは「PE」へ遷移するため、有効データの保存が必要であるので、スヌープエージェントのバス制御部23は主記憶4への書き戻しのために、キャッシュメモリ23a(DA)のデータを読出し(図6ステップS16,S17)、バスフェーズ#3でデータバス103へ転送し(図6ステップS18)、処理を終了する。この処理は後に説明する図11に示すメモリコントローラ3の動作の(E7)へと続く。
【0126】
(D4)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「M」の時にバスフェーズ#1でアドレスバス101からバスリクエストMem_Read&Invalidate(A7)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read&Invalidate(A7)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0127】
今、自キャッシュメモリ23a(AA)のステータスは「M」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102に「M Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。
【0128】
さらに、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(DA)内に存在するシステム内唯一の有効データを読出し(図6ステップS16,S17)、バスフェーズ#3でこれをデータバス103に出力し(図6ステップS18)、処理を終了する。
【0129】
(D5)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「E」の時にバスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read(A4)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0130】
今、自キャッシュメモリ23a(AA)のステータスは「E」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102へ「S Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「S」に更新する(図6ステップS14,S15)。リクエストエージェントが必要とするデータは後述する図11に示すメモリコントローラ3の動作の(E2)でメモリコントローラ3より転送されるため、スヌープエージェントはデータバス103へのデータ出力不要と判断し(図6ステップS16)、処理を終了する。
【0131】
(D6)、(D7)、(D8)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「E」の時にそれぞれバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0132】
今、自キャッシュメモリ23a(AA)のステータスは「E」であるが、このバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を契機にステータスを「I」に遷移させるので、スヌープエージェントのバス制御部23はスヌープ結果出力を不要と判断する。その後、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。データは後述する図11に示すメモリコントローラ3の動作の(E6)、(E9)、(E12)でメモリコントローラ3より転送されるため、スヌープエージェントのバス制御部23はデータバス103へのデータ出力不要と判断し(図6ステップS16)、処理を終了する。
【0133】
(D9)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「S」の時に、バスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read(A4)を受け付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0134】
今、自キャッシュメモリ23a(AA)のステータスは「S」であるので、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェース#2でスヌープバス102に「S Hit」を出力する(図6ステップS13)。「S」ステータスに変更はないので、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)のステータスの更新を不要と判断する(図6ステップS14)。データは後述する図11に示すメモリコントローラ3の動作の(E2)でメモリコントローラ3より転送されるため、スヌープエージェントのバス制御部23はデータバス103へのデータ出力不要と判断し(図6ステップS16)、処理を終了する。
【0135】
(D10)、(D11)、(D12)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「S」の時に、バスフェーズ#1でアドレスバス101からそれぞれバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0136】
今、自キャッシュメモリ23a(AA)のステータスは「S」であるが、このバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を契機にステータスを「I」に遷移させるので、スヌープエージェントのバス制御部23はスヌープ結果の出力を不要と判断する。
【0137】
その後、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。データは後述する図11に示すメモリコントローラ3の動作の(E6)、(E9)、(E12)でメモリコントローラ3より転送されるため、スヌープエージェントのバス制御部23はデータバス103へのデータ出力を不要と判断し(図6ステップS16)、処理を終了する。
【0138】
(D13)、(D14)、(D15)、(D16)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「I」の時に、バスフェーズ#1でアドレスバス101からそれぞれバスリクエストMem_Read(A4)、Invalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read(A4)、Invalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0139】
今、自キャッシュメモリ23a(AA)のステータスは「I」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力を不要と判断する。また、スヌープエージェントのバス制御部23はキャッシュメモリ23a(AA)のステータスの更新も行わず(図6ステップS14)、データの出力も行わず(図6ステップS16)、処理を終了する。
【0140】
(D17)、(D18)、(D19)、(D20)は、スヌープエージェントのキャッシュメモリ23a(AA)のステータスが「PE」の時にバスフェーズ#1でアドレスバス101からそれぞれバスリクエストMem_Read(A4)、Invalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
【0141】
今、自キャッシュメモリ23a(AA)のステータスは「PE」であるが、このバスリクエストMem_Read(A4)、Invalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を契機に、自キャッシュメモリ23a(AA)のステータスを「I」に遷移させるので、スヌープエージェントのバス制御部23はスヌープ結果の出力を不要と判断する。その後、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。出力すべきデータは自キャッシュメモリ23a(DA)に存在しないので、これで処理を終了する。
【0142】
図11はメモリコントローラ3の動作を示したものであり、図7に示すメモリコントローラ3の動作フローに対応する。
【0143】
(E1)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受付け、バスフェーズ#2でスヌープバス102から「M Hit」を受付けた時(図7ステップS21)の動作を示すものである。
【0144】
この場合、有効データはスヌープエージェントのキャッシュメモリ23a内にあるので、メモリコントローラ3は主記憶4の読出しを不要と判断する(図7ステップS22)。ところで、Mem_Readが行われると、リクエストエージェントのキャッシュメモリ13aは図9に示すバス制御部13(リクエストエージェント)の動作(C10)、(C15)のように、「E」か「S」に遷移する。
【0145】
そして、「E」または「S」の場合、主記憶4にも有効データが存在しなければならないので、メモリコントローラ3はスヌープエージェントのバス制御部23がバスフェーズ#3でデータバス103に転送するデータの主記憶4への書込みが必要であると判断し(図7ステップS25)、バスフェーズ#3でデータバス103からデータを受付け(図7ステップS26)、そのデータを主記憶4に書込み(図7ステップS27)、処理を終了する。
【0146】
(E2)、(E3)は、メモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受付け、バスフェーズ#2でスヌープバス102から「S Hit」を受付けた場合または「Miss」であった場合(図7ステップS21)の動作を示すものである。
【0147】
この場合、スヌープエージェントのバス制御部23のバスフェーズ#3でのデータバス103へのデータ転送が行われないので、メモリコントローラ3は主記憶4の読出しが必要と判断し(図7ステップS22)、主記憶4のデータを読出し(図7ステップS23)、バスフェーズ#3でこのデータをデータバス103へ出力し(図7ステップS24)、処理を終了する。
【0148】
(E4)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストInvalidate(A5)を受付け、バスフェーズ#2でスヌープバス102から「M Hit」を受付けた時(図7ステップS21)の動作を示すものである。
【0149】
バスリクエストInvalidate(A5)が行われると、リクエストエージェントのキャッシュメモリ13aは図8及び図9に示すバス制御部13(リクエストエージェント)の動作(C8)、(C9)、(C11)のように、データを受付けることなく、「M」に遷移する。したがって、メモリコントローラ3は主記憶4の読出しを不要と判断し(図7ステップS22)、リクエストエージェントのキャッシュメモリ13a(AA)のステータスが「M」に遷移する場合、主記憶4に有効データが存在する必要はないので、主記憶4へのデータの書込みを不要と判断し(図7ステップS25)、処理を終了する。
【0150】
(E5)に示すバスフェーズ#1でアドレスバス101からバスリクエストInvalidate(A5)を受付け、バスフェーズ#2で「S Hit」を受付けるケース(図7ステップS21)は、図10に示すバス制御部23(スヌープエージェント)の動作によるとありえないことになる。
【0151】
(E6)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストInvalidate(A5)を受付け、バスフェーズ#2でスヌープバス102が「Miss」であった場合(図7ステップS21)の動作を示すものである。
【0152】
バスリクエストInvalidate(A5)が行われると、リクエストエージェントのキャッシュメモリ13aは図8及び図9に示すバス制御部13(リクエストエージェント)の動作(C8)、(C9)、(C11)のように、データを受付けることなく、「M」に遷移する。したがって、メモリコントローラ3は主記憶4の読出しを不要と判断し(図7ステップS22)、リクエストエージェントのキャッシュメモリ13a(AA)のステータスが「M」に遷移する場合、主記憶4に有効データが存在する必要はないので、主記憶4へのデータの書込みを不要と判断し(図7ステップS25)、処理を終了する。
【0153】
(E7)はメモリコントローラ3がバスフェーズ#1でアドレスバス101から本実施例で追加となるInvalidate(PE)(A6)を受付け、バスフェーズ#2でスヌープバス102から「M Hit」を受付けた時(図7ステップS21)の動作を示すものである。
【0154】
バスリクエストInvalidate(PE)(A6)が行われると、リクエストエージェントのキャッシュメモリ13aは図9に示すバス制御部13(リクエストエージェント)の動作(C14)のように、データを受付けることなく、「PE」に遷移する。「PE」はスヌープエージェントがキャッシュラインサイズライト(F1)によるデータ更新権を保持しているものの、実際に更新が行われるまでは有効データを主記憶4に保持しておく必要がある。したがって、メモリコントローラ3は主記憶4の読出しを不要と判断するが(図7ステップS22)、主記憶4へのデータの書込みは必要と判断し(図7ステップS25)、バスフェーズ#3でスヌープエージェントのバス制御部23がデータバス103に転送するデータを受付け(図7ステップS26)、そのデータを主記憶4に書込み(図7ステップS27)、処理を終了する。
【0155】
(E8)、(E9)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からInvalidate(PE)(A6)を受付け、バスフェーズ#2でスヌープバス102からそれぞれ「S Hit」を受付けた場合または「Miss」であった場合(図7ステップS21)の動作を示すものである。
【0156】
バスリクエストInvalidate(PE)(A6)が行われると、リクエストエージェントのキャッシュメモリ13aは図9に示すバス制御部13(リクエストエージェント)の動作(C14)のように、データを受付けることなく、「PE」に遷移する。「PE」はスヌープエージェントがキャッシュラインサイズライト(F1)によるデータ更新権を保持しているものの、実際に更新が行われるまでは有効データを主記憶4に保持しておく必要がある。しかしながら、バスフェース#2におけるスヌープ結果が「S Hit」または「Miss」であったということは、既に主記憶4に有効データが存在するということであるから、メモリコントローラ3は主記憶4への書込みを不要と判断し(図7ステップS25)、処理を終了する。
【0157】
(E10)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストMem_Read&Invaidate(A7)を受付け、バスフェーズ#2でスヌープバス102から「M Hit」を受付けた時(図7ステップS21)の動作を示すものである。
【0158】
バスリクエストMem_Read&Invalidate(A7)が行われると、リクエストエージェントのキャッシュメモリ13aは図9に示すバス制御部13(リクエストエージェント)の動作(C14)のように、「M」に遷移する。そして、その時のデータは図10に示すバス制御部23(スヌープエージェント)の動作(D4)のように、スヌープエージェントのバス制御部23がデータ転送を行う。したがって、メモリコントローラ3は主記憶4の読出しを不要と判断し(図7ステップS22)、さらに主記憶4へのデータの書込みを不要と判断し(図7ステップS25)、処理を終了する。
【0159】
(E11)、(E12)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストMem_Read&Invalidate(A7)を受付け、バスフェーズ#2でスヌープバス102からそれぞれ「S Hit」を受付けた場合または「Miss」であった場合(図7ステップS21)の動作を示すものである。
【0160】
この時、図10に示すバス制御部23(スヌープエージェント)の動作(D8)、(D12)、(D16)、(D20)のように、スヌープエージェントのバス制御部23からのデータ転送が行われなので、メモリコントローラ3は主記憶4の読出しが必要と判断し(図7ステップS22)、主記憶4の読出しを行い(図7ステップS23)、バスフェーズ#3でこのデータをデータバス103へ出力し(図7ステップS24)、処理を終了する。
【0161】
従来のストアイン方式キャッシュ管理に使用されるMESIプロトコルでは、キャッシュラインサイズ用プリフェッチ動作時にリクエストエージェントのキャッシュステータスを「M」または「E」にする必要があるため、データを一度自キャッシュメモリに格納する必要がある。
【0162】
しかしながら、本実施例では、MESIプロトコルに「PE」ステータスを追加定義することによって、キャッシュラインサイズライト用プリフェッチ動作時にリクエストエージェントのキャッシュメモリに対するデータ転送の必要性がなくなり、従来のキャッシュステータスMESIだけを使用した場合に比べ、主記憶4のアクセス頻度の低減とリクエストエージェントのDAアクセス頻度の低減とシステムインタフェースのデータ転送頻度の低減とを図ることができる。
【図面の簡単な説明】
【0163】
【図1】本発明の一実施例によるマルチプロセッサシステムの構成を示すブロック図である。
【図2】図1に示すアドレスバス、スヌープバス、データバスにおけるバスフェーズを示すタイムチャートである。
【図3】本発明の一実施例によるバスフェーズ#1で使用するバスリクエストのコマンドコードの一例を示す図である。
【図4】本発明の一実施例によるバスフェーズ#2で使用するスヌープ結果コードの一例を示す図である。
【図5】図1のキャッシュコヒーレンシ及びバス制御部の動作(リクエストエージェントにおける動作)を示すフローチャートである。
【図6】図1のキャッシュコヒーレンシ及びバス制御部の動作(スヌープエージェントにおける動作)を示すフローチャートである。
【図7】図1のメモリコントローラにおける動作(メモリエージェントにおける動作)を示すフローチャートである。
【図8】図1のキャッシュコヒーレンシ及びバス制御部の動作(リクエストエージェント)を示す図である。
【図9】図1のキャッシュコヒーレンシ及びバス制御部の動作(リクエストエージェント)を示す図である。
【図10】図1のキャッシュコヒーレンシ及びバス制御部の動作(スヌープエージェント)を示す図である。
【図11】図1のメモリコントローラの動作に示す図である。
【図12】図1のプロセッサまたはキャッシュラインサイズライト用プリフェッチリクエスト発行回路が発行するリクエスト種類を示す図である。
【図13】図12に示すリクエストの形式の一例を示す図である。
【図14】本発明の一実施例で用いるMESIプロトコルの各ステータス及びPEステータスを説明するための図である。
【符号の説明】
【0164】
1 カード(#0)
2 カード(#1)
3 メモリコントローラ
4 主記憶
11,21 プロセッサ
12,22 キャッシュラインサイズライト用
プリフェッチリクエスト発行回路
13,23 キャッシュコヒーレンシ及びバス制御部
13a,23a ストアインキャッシュメモリ
101 アドレスバス
102 スヌープバス
103 データバス
【特許請求の範囲】
【請求項1】
プロセッサを1個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにMESI(Modify/Exclusive/Share/Invalidate)プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムであって、
前記MESIプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスPE(Pseudo−Exclusive)を加えたことを特徴とするマルチプロセッサシステム。
【請求項2】
前記制御回路は、前記プリフェッチリクエストが発行された時に自カードのキャッシュメモリのデータが無効である場合に前記キャッシュメモリを排他的としかつ前記データが無効であることを許す前記キャッシュステータスPEに遷移させることを特徴とする請求項1記載のマルチプロセッサシステム。
【請求項3】
前記プリフェッチリクエスト発行回路は、前記プロセッサが前記ライト動作のリクエストを発行した際に前記プロセッサが搭載されるのと同じカード上のキャッシュメモリでそのライト動作が実施可能となるような状態にステータスを変更しておくことを目的としたプリフェッチリクエストを発行することを特徴とする請求項1または請求項2記載のマルチプロセッサシステム。
【請求項4】
プロセッサを1個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにMESI(Modify/Exclusive/Share/Invalidate)プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムに用いるプリフェッチリクエスト制御方法であって、
前記MESIプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスPE(Pseudo−Exclusive)を加えたことを特徴とするプリフェッチリクエスト制御方法。
【請求項5】
前記制御回路が、前記プリフェッチリクエストが発行された時に自カードのキャッシュメモリのデータが無効である場合に前記キャッシュメモリを排他的としかつ前記データが無効であることを許す前記キャッシュステータスPEに遷移させることを特徴とする請求項4記載のプリフェッチリクエスト制御方法。
【請求項6】
前記プリフェッチリクエスト発行回路が、前記プロセッサが前記ライト動作のリクエストを発行した際に前記プロセッサが搭載されるのと同じカード上のキャッシュメモリでそのライト動作が実施可能となるような状態にステータスを変更しておくことを目的としたプリフェッチリクエストを発行することを特徴とする請求項4または請求項5記載のプリフェッチリクエスト制御方法。
【請求項7】
プロセッサを1個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにMESI(Modify/Exclusive/Share/Invalidate)プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムに用いるプリフェッチリクエスト制御方法のプログラムであって、
前記MESIプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスPE(Pseudo−Exclusive)を加え、
前記制御回路に、前記プリフェッチリクエストが発行された時に自カードのキャッシュメモリのデータが無効である場合に前記キャッシュメモリを排他的としかつ前記データが無効であることを許す前記キャッシュステータスPEに遷移させる処理を実行させるためのプログラム。
【請求項1】
プロセッサを1個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにMESI(Modify/Exclusive/Share/Invalidate)プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムであって、
前記MESIプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスPE(Pseudo−Exclusive)を加えたことを特徴とするマルチプロセッサシステム。
【請求項2】
前記制御回路は、前記プリフェッチリクエストが発行された時に自カードのキャッシュメモリのデータが無効である場合に前記キャッシュメモリを排他的としかつ前記データが無効であることを許す前記キャッシュステータスPEに遷移させることを特徴とする請求項1記載のマルチプロセッサシステム。
【請求項3】
前記プリフェッチリクエスト発行回路は、前記プロセッサが前記ライト動作のリクエストを発行した際に前記プロセッサが搭載されるのと同じカード上のキャッシュメモリでそのライト動作が実施可能となるような状態にステータスを変更しておくことを目的としたプリフェッチリクエストを発行することを特徴とする請求項1または請求項2記載のマルチプロセッサシステム。
【請求項4】
プロセッサを1個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにMESI(Modify/Exclusive/Share/Invalidate)プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムに用いるプリフェッチリクエスト制御方法であって、
前記MESIプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスPE(Pseudo−Exclusive)を加えたことを特徴とするプリフェッチリクエスト制御方法。
【請求項5】
前記制御回路が、前記プリフェッチリクエストが発行された時に自カードのキャッシュメモリのデータが無効である場合に前記キャッシュメモリを排他的としかつ前記データが無効であることを許す前記キャッシュステータスPEに遷移させることを特徴とする請求項4記載のプリフェッチリクエスト制御方法。
【請求項6】
前記プリフェッチリクエスト発行回路が、前記プロセッサが前記ライト動作のリクエストを発行した際に前記プロセッサが搭載されるのと同じカード上のキャッシュメモリでそのライト動作が実施可能となるような状態にステータスを変更しておくことを目的としたプリフェッチリクエストを発行することを特徴とする請求項4または請求項5記載のプリフェッチリクエスト制御方法。
【請求項7】
プロセッサを1個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにMESI(Modify/Exclusive/Share/Invalidate)プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムに用いるプリフェッチリクエスト制御方法のプログラムであって、
前記MESIプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスPE(Pseudo−Exclusive)を加え、
前記制御回路に、前記プリフェッチリクエストが発行された時に自カードのキャッシュメモリのデータが無効である場合に前記キャッシュメモリを排他的としかつ前記データが無効であることを許す前記キャッシュステータスPEに遷移させる処理を実行させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【公開番号】特開2006−330947(P2006−330947A)
【公開日】平成18年12月7日(2006.12.7)
【国際特許分類】
【出願番号】特願2005−151727(P2005−151727)
【出願日】平成17年5月25日(2005.5.25)
【出願人】(000168285)エヌイーシーコンピュータテクノ株式会社 (572)
【Fターム(参考)】
【公開日】平成18年12月7日(2006.12.7)
【国際特許分類】
【出願日】平成17年5月25日(2005.5.25)
【出願人】(000168285)エヌイーシーコンピュータテクノ株式会社 (572)
【Fターム(参考)】
[ Back to top ]