(57)【要約】複数のスレッドを同時に実行する命令処理装置と一次データキャッシュ装置の組を複数有し、該複数の組の一次データキャッシュ装置で共有される二次キャッシュ装置を有する中央処理装置であって、物理アドレスが一致するキャッシュラインがキャッシュメモリに登録されている場合にもスレッド識別子が異なる場合には二次キャッシュユニットに対してＭＩ要求をおこない、二次キャッシュユニットからの要求に基づきＭＯ／ＢＩを実行してフェッチ・ポートのＲＩＭフラグを設定する一次データキャッシュユニットと、ＭＩ要求を受けたキャッシュラインが別スレッドで一次データキャッシュユニットに登録されている場合にはＭＯ／ＢＩの実行を一次キャッシュユニットに要求する二次キャッシュユニットとを備える。
2004068361.tif 000002
【特許請求の範囲】
【請求項１】
同時に実行される複数のスレッドで共有され、該スレッドから発行されるメモリアクセス要求の処理をおこなう記憶制御装置であって、
複数の命令処理装置間で共有されるデータに対する該複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証手段と、
前記メモリアクセス要求で指定されたアドレスのデータを記憶している場合に該記憶しているデータを登録したスレッドと該メモリアクセス要求を発行したスレッドが同一であるか否かを判定するスレッド判定手段と、
前記スレッド判定手段の判定結果に基づいて前記一貫性保証手段を動作させる一貫性保証動作起動手段と、
を備えたことを特徴とする記憶制御装置。
【請求項２】
前記一貫性保証動作起動手段は、前記スレッド判定手段が同一でないと判定した場合に、下位の記憶制御装置に対して前記データの取り込み要求をおこない、該取り込み要求に応答して下位の記憶制御装置がおこなう指示に基づいて前記一貫性保証手段を動作させることを特徴とする請求の範囲第１項に記載の記憶制御装置。
【請求項３】
前記一貫性保証動作起動手段は、前記スレッド判定手段が同一でないと判定した場合に、下位の記憶制御装置に対するデータの吐き出し動作を実行して前記一貫性保証手段を動作させることを特徴とする請求の範囲第１項に記載の記憶制御装置。
【請求項４】
前記一貫性保証動作起動手段は、前記スレッド判定手段の判定結果および前記データの複数の命令処理装置間での共有状態に基づいてキャッシュライン置き換え動作を実行して前記一貫性保証手段を動作させることを特徴とする請求の範囲第１項に記載の記憶制御装置。
【請求項５】
同時に実行される複数のスレッドで共有され、該スレッドから発行されるメモリアクセス要求の処理をおこなうデータキャッシュ制御装置であって、
複数の命令処理装置間で共有されるデータに対する該複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証手段と、
前記メモリアクセス要求で指定されたアドレスのデータを含むキャッシュラインを記憶している場合に該記憶しているキャッシュラインを登録したスレッドと該メモリアクセス要求を発行したスレッドが同一であるか否かを判定するスレッド判定手段と、
前記スレッド判定手段が同一でないと判定した場合に、前記一貫性保証手段を動作させる一貫性保証動作起動手段と、
を備えたことを特徴とするデータキャッシュ制御装置。
【請求項６】
前記スレッド判定手段は、キャッシュタグに設けたスレッド識別子に基づいて、キャッシュラインを登録したスレッドと前記メモリアクセス要求を発行したスレッドが同一であるか否かを判定することを特徴とする請求の範囲第５項に記載のデータキャッシュ制御装置。
【請求項７】
前記一貫性保証手段は、前記アドレスのデータの無効化または他の記憶制御装置へのデータの吐き出しと該他の記憶制御装置からのデータの取り込みとを監視して前記保証をおこなうことを特徴とする請求の範囲第１項〜第４項のいずれか一つに記載の記憶制御装置。
【請求項８】
前記一貫性保証手段は、フェッチ・ポートに設けたＰＳＴＶフラグ、ＲＩＭフラグおよびＲＩＦフラグを用いて前記アドレスのデータの無効化または他の記憶制御装置へのデータの吐き出しと該他の記憶制御装置からのデータの取り込みとを監視することを特徴とする請求の範囲第７項に記載の記憶制御装置。
【請求項９】
複数のスレッドを同時に実行する命令処理装置と一次データキャッシュ装置との組を複数有し、該複数の組の一次データキャッシュ装置で共有される二次キャッシュ装置を有する中央処理装置であって、
前記複数の組のそれぞれの一次データキャッシュ装置は、
他の組の一次データキャッシュ装置と共有するキャッシュラインに対する複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証手段と、
前記命令処理装置からのメモリアクセス要求と物理アドレスが一致するキャッシュラインが異なるスレッドによって登録されている場合に前記二次キャッシュ装置に対して該キャッシュラインの取り込み要求をおこなう取り込み要求手段と、
前記二次キャッシュ装置からの要求に基づく前記キャッシュラインの無効化または吐き出しを実行して前記一貫性保証手段を動作させる吐き出し実行手段と、
を備え、
前記二次キャッシュ装置は、
前記キャッシュラインの取り込み要求を受けたキャッシュラインが他のスレッドにより前記一次データキャッシュ装置に登録されている場合には前記キャッシュラインの無効化または吐き出しの実行を該一次データキャッシュ装置に要求する吐き出し要求手段
を備えたことを特徴とする中央処理装置。
【請求項１０】
同時に実行される複数のスレッドで共有され、該スレッドから発行されるメモリアクセス要求の処理をおこなう記憶制御装置であって、
命令処理装置で実行されるスレッドの切り替えが行われる際に、実行が中断されるスレッドが発行したストア命令およびフェッチ命令のうちコミットされていない全てのストア命令およびフェッチ命令を無効とするアクセス無効化手段と、
前記実行が中断されたスレッドの実行が再開された際に、コミットされたストア命令の実行結果に影響を受けるフェッチ命令を検出し、検出したフェッチ命令を該ストア命令の実行後に実行するように制御するインターロック手段と、
を備えたことを特徴とする記憶制御装置。
【請求項１１】
同時に実行される複数のスレッドから発行されるメモリアクセス要求の処理をおこなう記憶装置制御方法であって、
前記メモリアクセス要求で指定されたアドレスのデータを記憶している場合に該記憶しているデータを登録したスレッドと該メモリアクセス要求を発行したスレッドが同一であるか否かを判定するスレッド判定工程と、
前記スレッド判定工程の判定結果に基づいて、複数の命令処理装置間で共有されるデータに対する該複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証機構を動作させる一貫性保証動作起動工程と、
を含んだことを特徴とする記憶装置制御方法。
【請求項１２】
前記一貫性保証動作起動工程は、前記スレッド判定工程が同一でないと判定した場合に、下位の記憶制御装置に対して前記データの取り込み要求をおこない、該取り込み要求に応答して下位の記憶制御装置がおこなう指示に基づいて前記一貫性保証機構を動作させることを特徴とする請求の範囲第１１項に記載の記憶装置制御方法。
【請求項１３】
前記一貫性保証動作起動工程は、前記スレッド判定工程が同一でないと判定した場合に、下位の記憶制御装置に対するデータの吐き出し動作を実行して前記一貫性保証機構を動作させることを特徴とする請求の範囲第１１項に記載の記憶装置制御方法。
【請求項１４】
前記一貫性保証動作起動工程は、前記スレッド判定工程の判定結果および前記データの複数の命令処理装置間での共有状態に基づいてキャッシュライン置き換え動作を実行することによって前記一貫性保証機構を動作させることを特徴とする請求の範囲第１１項に記載の記憶装置制御方法。
【請求項１５】
同時に実行される複数のスレッドから発行されるメモリアクセス要求の処理をおこなうデータキャッシュ制御方法であって、
前記メモリアクセス要求で指定されたアドレスのデータを含むキャッシュラインを記憶している場合に該記憶しているキャッシュラインを登録したスレッドと該メモリアクセス要求を発行したスレッドが同一であるか否かを判定するスレッド判定工程と、
前記スレッド判定工程が同一でないと判定した場合に、複数の命令処理装置間で共有されるデータに対する該複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証機構を動作させる一貫性保証動作起動工程と、
を含んだことを特徴とするデータキャッシュ制御方法。
【請求項１６】
前記スレッド判定工程は、キャッシュタグに設けたスレッド識別子に基づいて、キャッシュラインを登録したスレッドと前記メモリアクセス要求を発行したスレッドが同一であるか否かを判定することを特徴とする請求の範囲第１５項に記載のデータキャッシュ制御方法。
【請求項１７】
前記一貫性保証工程は、前記アドレスのデータの無効化または他の記憶制御装置へのデータの吐き出しと該他の記憶制御装置からのデータの取り込みとを監視して前記保証をおこなうことを特徴とする請求の範囲第１１項〜第１４項のいずれか一つに記載の記憶装置制御方法。
【請求項１８】
前記一貫性保証工程は、フェッチ・ポートに設けたＰＳＴＶフラグ、ＲＩＭフラグおよびＲＩＦフラグを用いて前記アドレスのデータの無効化または他の記憶制御装置へのデータの吐き出しと該他の記憶制御装置からのデータの取り込みとを監視することを特徴とする請求の範囲第１７項に記載の記憶装置制御方法。
【請求項１９】
複数のスレッドを同時に実行する命令処理装置と一次データキャッシュ装置の組を複数有し、該複数の組の一次データキャッシュ装置で共有される二次キャッシュ装置を有する中央処理装置で用いられるキャッシュ制御方法あって、
前記一次データキャッシュ装置が、前記命令処理装置からのメモリアクセス要求と物理アドレスが一致するキャッシュラインが異なるスレッドによって登録されている場合に前記二次キャッシュ装置に対して該キャッシュラインの取り込み要求をおこなう取り込み要求工程と、
前記二次キャッシュ装置が、前記キャッシュラインの取り込み要求を受けたキャッシュラインが他のスレッドにより前記一次データキャッシュ装置に登録されている場合には前記キャッシュラインの無効化または吐き出しの実行を該一次データキャッシュ装置に要求する吐き出し要求工程と、
前記一次データキャッシュ装置が、前記二次キャッシュ装置からの要求に基づき前記キャッシュラインの無効化または吐き出しを実行することによって、他の組の一次データキャッシュ装置と共有するキャッシュラインに対する複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証機構を動作させる吐き出し実行工程と、
を含んだことを特徴とするキャッシュ制御方法。
【請求項２０】
同時に実行される複数のスレッドから発行されるメモリアクセス要求の処理をおこなう記憶装置制御方法であって、
命令処理装置で実行されるスレッドの切り替えが行われる際に、実行が中断されるスレッドが発行したストア命令およびフェッチ命令のうちコミットされていない全てのストア命令およびフェッチ命令を無効とするアクセス無効化工程と、
前記実行が中断されたスレッドの実行が再開された際に、コミットされたストア命令の実行結果に影響を受けるフェッチ命令を検出し、検出したフェッチ命令を該ストア命令の実行後に実行するように制御するインターロック工程と、
を含んだことを特徴とする記憶装置制御方法。
【発明の詳細な説明】
【技術分野】  この発明は、同時に実行される複数のスレッドから発行されるメモリアクセス要求の処理をおこなう記憶制御装置、データキャッシュ制御装置、中央処理装置、記憶装置制御方法、データキャッシュ制御方法およびキャッシュ制御方法に関し、特に、スレッド間での共有データの読み出しおよび書き込みの実行順序の一貫性を保証することができる記憶制御装置、データキャッシュ制御装置、中央処理装置、記憶装置制御方法、データキャッシュ制御方法およびキャッシュ制御方法に関するものである。
【背景技術】  現在主流となっている高性能プロセッサでは、高い並列度を維持して命令を実行するためにアウト・オブ・オーダ処理を採用している。アウト・オブ・オーダ処理とは、キャッシュ・ミスなどの理由で、ある命令のデータの読み出しが滞っている間に後続の命令のデータの読み出しを先に実行し、その後で滞っていた命令のデータの読み出しを実行する処理である。
しかし、このような処理をおこなうと、後から実行された先行するデータの読み出しが最新のデータを取り出し、先に実行された後続するデータの読み出しが古いデータを読み出す場合が発生し、ＴＳＯ（Ｔｏｔａｌ  Ｓｔｏｒｅ  Ｏｒｄｅｒ）に違反する場合が出てくる。ここで、ＴＳＯとは、データの読み出し結果がデータの書き込み順序を正しく反映することであり、実行順序の一貫性と呼ばれる。
第９図は、マルチプロセッサにおけるＴＳＯ違反およびその監視原理を説明するための説明図である。同図（ａ）は、ＴＳＯ違反が発生する可能性のある応用例を示し、同図（ｂ）は、ＴＳＯ違反の例を示し、同図（ｃ）は、ＴＳＯ違反の監視原理を示している。
同図（ａ）は、計測器が測定したデータをＣＰＵ−βが共有記憶域に書き込み、ＣＰＵ−αが共有記憶域に書き込まれたデータを読み出して解析し、解析結果を出力する例を示している。この例では、ＣＰＵ−βは、計測データを共有記憶域Ｂに書き込み（ＳＴ−Ｂ：Ｂのデータはｂからｂ’に変わる）、計測データを書き終わったことを共有記憶域Ａに書き込む（ＳＴ−Ａ：Ａのデータはａからａ’に変わる）。一方、ＣＰＵ−αは、ＣＰＵ−βが計測データを書き終わったことをＡを読み出して確認し（ＦＣ−Ａ：Ａ＝ａ’）、Ｂに書き込まれた計測データを読み出し（ＦＣ−Ｂ：Ｂ＝ｂ’）、解析する。
ここで、同図（ｂ）に示すように、ＣＰＵ−αのキャッシュにはＡは無くＢがあり、ＣＰＵ−βのキャッシュにはＢは無くＡがあるとする。そして、ＣＰＵ−αがＦＣ−Ａを実行すると、キャッシュミスが発生し、ＦＣ−ＡはＡを含むキャッシュラインがＣＰＵ−αに届くまで実行が待たされ、キャッシュヒットしているＦＣ−Ｂが実行される。この時、ＦＣ−Ｂは、ＣＰＵ−βがＢを更新する前のデータを読み出す（ＣＰＵ−α：Ｂ＝ｂ）。
そして、この間に、ＣＰＵ−βがＳＴ−ＢおよびＳＴ−Ａを実行するために、ＢおよびＡを含むキャッシュラインを排他型として獲得し、ＣＰＵ−αのＢを含むキャッシュラインの無効化またはデータの吐き出しをおこなう（ＭＯ／ＢＩ：Ｍｏｖｅ  Ｏｕｔ／Ｂｌｏｃｋ  Ｉｎｖａｌｉｄａｔｅ）。そして、Ｂを含むキャッシュラインがＣＰＵ−βに届くと、ＣＰＵ−βは、ＢおよびＡへのデータ書き込みを完了し（ＣＰＵ−β：Ｂ＝ｂ’、Ａ＝ａ’）、その後、ＣＰＵ−αがＡを含むキャッシュラインを受け取り（ＭＩ：Ｍｏｖｅ  Ｉｎ）、ＦＣ−Ａを完了する（ＣＰＵ−α：Ａ＝ａ’）。こうして、ＣＰＵ−αは、Ａ＝ａ’であるため、計測データが書き込まれたと判断し、古いデータ（Ｂ＝ｂ）を使用して誤動作することとなる。
そこで、従来は、先に実行された後続のフェッチデータＢを含むキャッシュラインの無効化または吐き出しと、遅れて実行されたフェッチデータＡを含むキャッシュラインの到着を監視することによってＴＳＯ違反の可能性を検出し、ＴＳＯ違反の可能性を検出した場合には、順序性が保証されているフェッチ命令の次の命令から再実行することによって、ＴＳＯ違反を防いでいた。
具体的には、命令処理装置からのフェッチ要求を記憶制御装置のフェッチ・ポートで受け取り、第９図（ｃ）に示すように、各フェッチ・ポートは、フェッチ要求の対象となったアドレスとともに、ＰＳＴＶ（Ｐｏｓｔ  ＳＴａｔｕｓ  Ｖａｌｉｄ）フラグ、ＲＩＭ（Ｒｅ−Ｉｆｅｔｃｈ  ｂｙ  Ｍｏｖｅ  ｏｕｔ）フラグおよびＲＩＦ（Ｒｅ−Ｉｆｅｔｃｈ  ｂｙ  ｍｏｖｅ  ｉｎ  Ｆｅｔｃｈ）フラグを保持する。また、命令処理装置からのフェッチ要求に対してフェッチデータをまだ返していないフェッチ・ポートの中で最も古く割り当てられたフェッチ・ポートを指すＦＰ−ＴＯＱ（Ｆｅｔｃｈ  Ｐｏｒｔ  Ｔｏｐ  ｏｆ  Ｑｕｅｕｅ）を設ける。
そして、ＣＰＵ−αのＦＣ−Ｂがフェッチをおこなった時点で、ＦＣ−Ｂの要求を受け取っていたフェッチ・ポートのＰＳＴＶフラグをセットする。なお、第９図（ｃ）において、斜線部は、フラグがセットされた状態を示している。その後、ＣＰＵ−βのＳＴ−ＢによってＦＣ−Ｂが使用したキャッシュラインの無効化または吐き出しが発生する。この時、ＦＣ−Ｂの要求が入ったフェッチ・ポートのＰＳＴＶがセットされており、かつそのフェッチ・ポートが保持するアドレスの物理アドレス部分とキャッシュラインの無効化または吐き出し要求を受けたアドレスの物理アドレスが一致するため、フェッチデータを送出したフェッチ・ポートのキャッシュラインが持ち出されたことを検出することができる。
そして、フェッチデータを送出したフェッチ・ポートのキャッシュラインが持ち出されたことを検出すると、ＦＣ−Ｂの要求を保持するフェッチ・ポートからＦＰ−ＴＯＱが指すフェッチ・ポートまでの全てのフェッチ・ポートに対してＲＩＭフラグをセットする。
その後、ＣＰＵ−βがＳＴ−Ｂ、ＳＴ−Ａを実行し、ＣＰＵ−αがＦＣ−Ａを実行するためにＡを含むキャッシュラインをＣＰＵ−βから受け取ると、ＣＰＵ−αでは、データを外部から受け取ったことを検出し、全ての有効なフェッチ・ポートに対してＲＩＦフラグをセットする。そして、ＦＣ−Ａの成功を命令処理装置に通知する場合に、ＦＣ−Ａの要求を保持するフェッチ・ポートのＲＩＭフラグおよびＲＩＦフラグを調べると、両方のフラグがセットされているため、ＦＣ−Ａの次の命令からの再実行を要求する。
すなわち、ＲＩＭフラグおよびＲＩＦフラグの両方がセットされていることは、後続のフェッチ要求Ｂに対して送出してしまったデータｂを他の命令処理装置がｂ’に書き換え、先行するフェッチ要求Ａが書き換え後のデータａ’を受け取った可能性を示している。
このように、マルチプロセッサ環境では、各フェッチ・ポートにＰＳＴＶフラグ、ＲＩＭフラグおよびＲＩＦフラグを設け、プロセッサ間でのキャッシュラインの受け渡しを監視することによって、プロセッサ間におけるＴＳＯ違反を防ぐことができる。このような、マルチプロセッサにおけるＴＳＯ保証技術は、たとえば、米国特許第５，６９９，５３８号明細書に開示されている。また、キャッシュメモリに関する技術としては、特開平１０−１１６１９２号公報、特開平１０−２３２８３９号公報、特開２０００−２５９４９８号公報、特開２００１−１９５３０１号公報などに開示されている。
しかしながら、マルチスレッド方式を採用するコンピュータシステムでは、プロセッサ間でのＴＳＯ保証だけでは不十分であるという問題点がある。ここで、マルチスレッド方式とは、一つのプロセッサが複数のスレッド（命令列）を同時に実行する方式である。すなわち、マルチスレッド方式を採用するコンピュータシステムでは、一次キャッシュを異なるスレッド間で共有することになり、プロセッサ間でのキャッシュラインの受け渡しだけではなく、同一キャッシュのスレッド間での受け渡しを監視する必要がある。
この発明は、上述した従来技術による問題点を解消するためになされたものであり、スレッド間での共有データの読み出しおよび書き込みの実行順序の一貫性を保証することができる記憶制御装置、データキャッシュ制御装置、中央処理装置、記憶装置制御方法、データキャッシュ制御方法およびキャッシュ制御方法を提供することを目的としている。
【発明の開示】
上述した課題を解決し、目的を達成するため、本発明は、同時に実行される複数のスレッドで共有され、該スレッドから発行されるメモリアクセス要求の処理をおこなう記憶制御装置であって、複数の命令処理装置間で共有されるデータに対する該複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証手段と、前記メモリアクセス要求で指定されたアドレスのデータを記憶している場合に該記憶しているデータを登録したスレッドと該メモリアクセス要求を発行したスレッドが同一であるか否かを判定するスレッド判定手段と、前記スレッド判定手段の判定結果に基づいて前記一貫性保証手段を動作させる一貫性保証動作起動手段と、を備えたことを特徴とする。
また、本発明は、同時に実行される複数のスレッドから発行されるメモリアクセス要求の処理をおこなう記憶装置制御方法であって、前記メモリアクセス要求で指定されたアドレスのデータを記憶している場合に該記憶しているデータを登録したスレッドと該メモリアクセス要求を発行したスレッドが同一であるか否かを判定するスレッド判定工程と、前記スレッド判定工程の判定結果に基づいて、複数の命令処理装置間で共有されるデータに対する該複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証機構を動作させる一貫性保証動作起動工程と、を含んだことを特徴とする。
かかる発明によれば、メモリアクセス要求で指定されたアドレスのデータを記憶している場合に記憶しているデータを登録したスレッドとメモリアクセス要求を発行したスレッドが同一であるか否かを判定し、判定結果に基づいて、複数の命令処理装置間で共有されるデータに対する複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証機構を動作させることとしたので、スレッド間での共有データの読み出しおよび書き込みの実行順序の一貫性を保証することができる。
また、本発明は、同時に実行される複数のスレッドで共有され、該スレッドから発行されるメモリアクセス要求の処理をおこなうデータキャッシュ制御装置であって、複数の命令処理装置間で共有されるデータに対する該複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証手段と、前記メモリアクセス要求で指定されたアドレスのデータを含むキャッシュラインを記憶している場合に該記憶しているキャッシュラインを登録したスレッドと該メモリアクセス要求を発行したスレッドが同一であるか否かを判定するスレッド判定手段と、前記スレッド判定手段が同一でないと判定した場合に、前記一貫性保証手段を動作させる一貫性保証動作起動手段と、を備えたことを特徴とする。
また、本発明は、同時に実行される複数のスレッドから発行されるメモリアクセス要求の処理をおこなうデータキャッシュ制御方法であって、前記メモリアクセス要求で指定されたアドレスのデータを含むキャッシュラインを記憶している場合に該記憶しているキャッシュラインを登録したスレッドと該メモリアクセス要求を発行したスレッドが同一であるか否かを判定するスレッド判定工程と、前記スレッド判定工程が同一でないと判定した場合に、複数の命令処理装置間で共有されるデータに対する該複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証機構を動作させる一貫性保証動作起動工程と、を含んだことを特徴とする。
かかる発明によれば、メモリアクセス要求で指定されたアドレスのデータを含むキャッシュラインを記憶している場合に記憶しているキャッシュラインを登録したスレッドとメモリアクセス要求を発行したスレッドが同一であるか否かを判定し、同一でないと判定した場合に、複数の命令処理装置間で共有されるデータに対する複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証機構を動作させることとしたので、スレッド間での共有データの読み出しおよび書き込みの実行順序の一貫性を保証することができる。
また、本発明は、複数のスレッドを同時に実行する命令処理装置と一次データキャッシュ装置との組を複数有し、該複数の組の一次データキャッシュ装置で共有される二次キャッシュ装置を有する中央処理装置であって、前記複数の組のそれぞれの一次データキャッシュ装置は、他の組の一次データキャッシュ装置と共有するキャッシュラインに対する複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証手段と、前記命令処理装置からのメモリアクセス要求と物理アドレスが一致するキャッシュラインが異なるスレッドによって登録されている場合に前記二次キャッシュ装置に対して該キャッシュラインの取り込み要求をおこなう取り込み要求手段と、前記二次キャッシュ装置からの要求に基づく前記キャッシュラインの無効化または吐き出しを実行して前記一貫性保証手段を動作させる吐き出し実行手段と、を備え、前記二次キャッシュ装置は、前記キャッシュラインの取り込み要求を受けたキャッシュラインが他のスレッドにより前記一次データキャッシュ装置に登録されている場合には前記キャッシュラインの無効化または吐き出しの実行を該一次データキャッシュ装置に要求する吐き出し要求手段を備えたことを特徴とする。
また、本発明は、複数のスレッドを同時に実行する命令処理装置と一次データキャッシュ装置の組を複数有し、該複数の組の一次データキャッシュ装置で共有される二次キャッシュ装置を有する中央処理装置で用いられるキャッシュ制御方法あって、前記一次データキャッシュ装置が、前記命令処理装置からのメモリアクセス要求と物理アドレスが一致するキャッシュラインが異なるスレッドによって登録されている場合に前記二次キャッシュ装置に対して該キャッシュラインの取り込み要求をおこなう取り込み要求工程と、前記二次キャッシュ装置が、前記キャッシュラインの取り込み要求を受けたキャッシュラインが他のスレッドにより前記一次データキャッシュ装置に登録されている場合には前記キャッシュラインの無効化または吐き出しの実行を該一次データキャッシュ装置に要求する吐き出し要求工程と、前記一次データキャッシュ装置が、前記二次キャッシュ装置からの要求に基づき前記キャッシュラインの無効化または吐き出しを実行することによって、他の組の一次データキャッシュ装置と共有するキャッシュラインに対する複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証機構を動作させる吐き出し実行工程と、を含んだことを特徴とする。
かかる発明によれば、一次データキャッシュ装置が、命令処理装置からのメモリアクセス要求と物理アドレスが一致するキャッシュラインが異なるスレッドによって登録されている場合に二次キャッシュ装置に対してキャッシュラインの取り込み要求をおこない、二次キャッシュ装置が、キャッシュラインの取り込み要求を受けたキャッシュラインが他のスレッドにより一次データキャッシュ装置に登録されている場合にはキャッシュラインの無効化または吐き出しの実行を一次データキャッシュ装置に要求し、一次データキャッシュ装置が、二次キャッシュ装置からの要求に基づきキャッシュラインの無効化または吐き出しを実行することによって、他の組の一次データキャッシュ装置と共有するキャッシュラインに対する複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証機構を動作させることとしたので、スレッド間での共有データの読み出しおよび書き込みの実行順序の一貫性を保証することができる。
また、本発明は、同時に実行される複数のスレッドで共有され、該スレッドから発行されるメモリアクセス要求の処理をおこなう記憶制御装置であって、命令処理装置で実行されるスレッドの切り替えが行われる際に、実行が中断されるスレッドが発行したストア命令およびフェッチ命令のうちコミットされていない全てのストア命令およびフェッチ命令を無効とするアクセス無効化手段と、前記実行が中断されたスレッドの実行が再開された際に、コミットされたストア命令の実行結果に影響を受けるフェッチ命令を検出し、検出したフェッチ命令を該ストア命令の実行後に実行するように制御するインターロック手段と、を備えたことを特徴とする。
また、本発明は、同時に実行される複数のスレッドから発行されるメモリアクセス要求の処理をおこなう記憶装置制御方法であって、命令処理装置で実行されるスレッドの切り替えが行われる際に、実行が中断されるスレッドが発行したストア命令およびフェッチ命令のうちコミットされていない全てのストア命令およびフェッチ命令を無効とするアクセス無効化工程と、前記実行が中断されたスレッドの実行が再開された際に、コミットされたストア命令の実行結果に影響を受けるフェッチ命令を検出し、検出したフェッチ命令を該ストア命令の実行後に実行するように制御するインターロック工程と、を含んだことを特徴とする。
かかる発明によれば、命令処理装置で実行されるスレッドの切り替えが行われる際に、実行が中断されるスレッドが発行したストア命令およびフェッチ命令のうちコミットされていない全てのストア命令およびフェッチ命令を無効とし、実行が中断されたスレッドの実行が再開された際に、コミットされたストア命令の実行結果に影響を受けるフェッチ命令を検出し、検出したフェッチ命令をストア命令の実行後に実行するように制御することとしたので、スレッド間での共有データの読み出しおよび書き込みの実行順序の一貫性を保証することができる。
【図面の簡単な説明】  第１図は、本実施の形態１に係るＣＰＵの構成を示す機能ブロック図であり、第２図は、キャッシュタグの一例を示す図であり、第３図は、第１図に示したキャッシュ制御部の処理手順を示すフローチャートであり、第４図は、キャッシュ制御部と二次キャッシュユニットの間のＭＩ処理の処理手順を示すフローチャートであり、第５図は、本実施の形態２に係るＣＰＵの構成を示す機能ブロック図であり、第６図は、本実施の形態２に係るキャッシュ制御部の動作を説明するための説明図であり、第７図は、本実施の形態２に係るキャッシュ制御部の処理手順を示すフローチャートであり、第８図は、ＭＯＲ処理の処理手順を示すフローチャートであり、第９図は、マルチプロセッサにおけるＴＳＯ違反およびその監視原理を説明するための説明図である。
【発明を実施するための最良の形態】  以下、添付図面を参照して、この発明に係る記憶制御装置、データキャッシュ制御装置、中央処理装置、記憶装置制御方法、データキャッシュ制御方法およびキャッシュ制御方法の好適な実施の形態を詳細に説明する。なお、異なるプロセッサで実行されるスレッド間のＴＳＯ保証は、従来どおりキャッシュラインの無効化・吐き出しによるＲＩＭフラグのセットとデータの到着によるＲＩＦフラグのセットによりおこなう。したがって、ここでは、同一プロセッサで同時に実行されるスレッド間のＴＳＯ保証について説明する。
実施の形態１．
まず、本実施の形態１に係るＣＰＵの構成について説明する。第１図は、本実施の形態１に係るＣＰＵの構成を示す機能ブロック図である。同図に示すように、このＣＰＵ１０は、プロセッサコア１００および２００と、二次キャッシュユニット３００とを有し、二次キャッシュユニット３００は、プロセッサコア１００および２００によって共有される。
なお、ここでは説明の便宜上、ＣＰＵ１０が２個のプロセッサコアを有する場合を示したが、ＣＰＵ１０は、プロセッサコアを１個だけ有する場合、あるいは、より多くのプロセッサコアを有する場合もある。また、プロセッサコア１００および２００はいずれも同様の構成を有するので、ここではプロセッサコア１００を例にとって説明する。
プロセッサコア１００は、命令ユニット１１０と、演算ユニット１２０と、一次命令キャッシュユニット１３０と、一次データキャッシュユニット１４０とを有する。
命令ユニット１１０は、命令を解読して実行する処理部であり、ＭＴ（Ｍｕｌｔｉ  Ｔｈｒｅａｄ）制御部が二つのスレッド「スレッド０」および「スレッド１」を制御して、同時に実行する。
演算ユニット１２０は、汎用レジスタ、浮動小数点レジスタ、固定小数点演算器、浮動小数点演算器などを有し、固定小数点演算および浮動小数点演算を実行する処理部である。
一次命令キャッシュユニット１３０および一次データキャッシュユニット１４０は、主記憶装置に記憶された命令およびデータをそれぞれ高速にアクセスするために主記憶装置の一部を記憶した記憶部である。
二次キャッシュユニット３００は、一次命令キャッシュユニット１３０および一次データキャッシュユニット１４０の容量不足を補うために、より多くの主記憶装置の命令およびデータを記憶した記憶部であり、システムコントローラを介して主記憶装置に接続される。
次に、一次データキャッシュユニット１４０の詳細について説明する。この一次データキャッシュユニット１４０は、キャッシュメモリ１４１とキャッシュ制御部１４２とを有し、キャッシュメモリ１４１は、データを記憶する記憶部である。
キャッシュ制御部１４２は、キャッシュメモリ１４１に記憶するデータを管理する処理部であり、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋ−ａｓｉｄｅ  Ｂｕｆｆｅｒ）１４３と、ＴＡＧ部１４４と、ＴＡＧ−ＭＡＴＣＨ検出部１４５と、ＭＩＢ（Ｍｏｖｅ  Ｉｎ  Ｂｕｆｆｅｒ）１４６と、ＭＯ／ＢＩ処理部１４７と、フェッチ・ポート１４８とを有する。
ＴＬＢ１４３は、仮想アドレス（ＶＡ：Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓ）から物理アドレス（ＰＡ：Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ）へのアドレス変換を高速におこなう処理部であり、命令ユニット１１０から受け取った仮想アドレスを物理アドレスに変換してＴＡＧ−ＭＡＴＣＨ検出部１４５に出力する。
ＴＡＧ部１４４は、キャッシュメモリ１４１上に登録されているキャッシュラインを管理する処理部であり、命令ユニット１１０から受け取った仮想アドレスに対応するキャッシュメモリ１４１の場所に登録されているキャッシュラインの物理アドレス、スレッド識別子（ＩＤ）などをＴＡＧ−ＭＡＴＣＨ検出部１４５に出力する。ここで、スレッド識別子は、キャッシュラインが「スレッド０」と「スレッド１」のいずれのスレッドで使用されているかを識別するための識別子である。
第２図は、ＴＡＧ部１４４が、キャッシュメモリ１４１に登録されているキャッシュラインを管理するための情報であるキャッシュタグの一例を示す図である。同図に示すように、キャッシュタグには、キャッシュラインが有効（Ｖａｌｉｄ）か否かを示すＶビット、キャッシュラインの共有型および排他型をそれぞれ示すＳビットおよびＥビット、キャッシュラインを使用しているスレッドを示すＩＤ、キャッシュラインの物理アドレスを示すＰＡが含まれる。なお、キャッシュラインが共有型である場合には、そのキャッシュラインは同時期に他のプロセッサで保持されている可能性があり、キャッシュラインが排他型である場合には、そのキャッシュラインは同時期に他のプロセッサで保持されていることはない。
ＴＡＧ−ＭＡＴＣＨ検出部１４５は、ＴＬＢ１４３から受け取った物理アドレスおよび命令ユニット１１０から受け取ったスレッド識別子と、ＴＡＧ部１４４から受け取った物理アドレスおよびスレッド識別子とを比較する処理部である。このＴＡＧ−ＭＡＴＣＨ検出部１４５は、物理アドレスおよびスレッド識別子が一致してＶビットがセットされている場合には、キャッシュメモリ１４１に登録されているキャッシュラインを使用し、他の場合には、ＭＩＢ１４６に対して物理アドレスおよびスレッド識別子を指定して、命令ユニット１１０が要求するキャッシュラインを二次キャッシュユニット３００から取ってくるように指示する。
このＴＡＧ−ＭＡＴＣＨ検出部１４５が、ＴＬＢ１４３から受け取った物理アドレスとＴＡＧ部１４４から受け取った物理アドレスとを比較するだけでなく、命令ユニット１１０から受け取ったスレッド識別子とＴＡＧ部１４４から受け取ったスレッド識別子とを比較することによって、命令ユニット１１０が要求するキャッシュラインがキャッシュメモリ１４１にあるか否かだけでなく、キャッシュラインを要求したスレッドとキャッシュメモリ１４１にあるキャッシュラインを登録したスレッドとが同一のスレッドであるか否かを判定し、判定結果に基づいて異なる処理をおこなうことができる。
ＭＩＢ１４６は、二次キャッシュユニット３００に対して物理アドレスを指定してキャッシュラインの取り込み要求（ＭＩ要求）をおこなう処理部である。また、このＭＩＢ１４６によって取り込まれたキャッシュラインに対応して、ＴＡＧ部１４４のキャッシュタグおよびがキャッシュメモリ１４１の内容が更新される。
ＭＯ／ＢＩ処理部１４７は、二次キャッシュユニット３００からの要求に基づいてキャッシュメモリ１４１の特定のキャッシュラインの無効化または吐き出しをおこなう処理部である。このＭＯ／ＢＩ処理部１４７が特定のキャッシュラインを無効化または吐き出すことによってフェッチ・ポート１４８のＲＩＭフラグをセットすることができ、プロセッサ間でのＴＳＯ保証機構をスレッド間のＴＳＯ保証機構として利用することができる。
フェッチ・ポート１４８は、命令ユニット１１０からの各アクセス要求に対して、アクセス先のアドレス、ＰＳＴＶフラグ、ＲＩＭフラグ、ＲＩＦフラグなどを記憶する記憶部である。
次に、第１図に示したキャッシュ制御部１４２の処理手順について説明する。第３図は、第１図に示したキャッシュ制御部１４２の処理手順を示すフローチャートである。同図に示すように、このキャッシュ制御部１４２は、ＴＬＢ１４３が仮想アドレスを物理アドレスに変換し、ＴＡＧ部１４４がキャッシュタグを用いて仮想アドレスから物理アドレス、スレッド識別子およびＶビットを取得する（ステップＳ３０１）。
そして、ＴＡＧ−ＭＡＴＣＨ検出部１４５がＴＬＢ１４３から入力した物理アドレスとＴＡＧ部１４４から入力した物理アドレスとを比較し、命令ユニット１１０が要求するキャッシュラインがキャッシュメモリ１４１にあるか否かを調べる（ステップＳ３０２）。その結果、両方の物理アドレスが一致した場合には、命令ユニット１１０から入力したスレッド識別子とＴＡＧ部１４４から入力したスレッド識別子とを比較し、キャッシュメモリ１４１上のキャッシュラインを同一のスレッドが使用しているか否かを調べる（ステップＳ３０３）。
そして、スレッド識別子が両方とも一致した場合には、さらに、Ｖビットがセットされているか否かを調べる（ステップＳ３０４）。その結果、Ｖビットがセットされている場合には、命令ユニット１１０が要求するキャッシュラインがキャッシュメモリ１４１にあり、スレッドが同一でキャッシュラインが有効であるので、キャッシュ制御部１４２は、データ部のデータを使用する（ステップＳ３０５）。
一方、物理アドレスが一致しない場合、スレッド識別子が一致しない場合またはＶビットがセットされていない場合には、命令ユニット１１０で実行されているスレッドが要求したキャッシュラインと物理アドレスが一致するキャッシュラインがないか、物理アドレスが一致しても異なるスレッドが使用しているか、キャッシュラインが無効である場合であるので、キャッシュメモリ１４１のデータを使用することができず、ＭＩＢ１４６が二次キャッシュユニット３００からキャッシュラインを取り込む（ステップＳ３０６）。そして、キャッシュ制御部１４２は、取り込んだキャッシュラインのデータを使用する（ステップＳ３０７）。
このように、ＴＡＧ−ＭＡＴＣＨ検出部１４５が物理アドレスだけでなくスレッド識別子が一致するか否かを調べることによって、キャッシュ制御部１４２は、スレッド間でのキャッシュラインの制御をおこなうことができる。
次に、キャッシュ制御部１４２と二次キャッシュユニット３００の間のキャッシュラインの取り込み処理（ＭＩ処理）の処理手順について説明する。第４図は、キャッシュ制御部１４２と二次キャッシュユニット３００の間のＭＩ処理の処理手順を示すフローチャートである。なお、このＭＩ処理は、第３図に示したキャッシュ制御部１４２のステップＳ３０６の処理とこれに対応して二次キャッシュユニット３００がおこなう処理である。
同図に示すように、このＭＩ処理では、一次データキャッシュユニット１４０のキャッシュ制御部１４２が二次キャッシュユニット３００に対してＭＩ要求をおこなう（ステップＳ４０１）。すると、二次キャッシュユニット３００は、ＭＩ要求を受けたキャッシュラインが一次データキャッシュユニット１４０に別スレッドで登録されているか否かを調べ（ステップＳ４０２）、別スレッドで登録されている場合には、ＲＩＭフラグをセットするためにキャッシュ制御部１４２に対してＭＯ／ＢＩ要求をおこなう（ステップＳ４０３）。
なお、ＭＩ要求を受けたキャッシュラインが一次データキャッシュユニット１４０に別スレッドで登録されているか否かの判定は、シノニム制御を利用しておこなう。ここで、シノニム制御とは、二次キャッシュユニット側で一次キャッシュユニットに登録されているアドレスを管理し、同一物理アドレスのキャッシュラインが一次キャッシュユニットに複数登録されないようにする制御である。
そして、キャッシュ制御部１４２のＭＯ／ＢＩ処理部１４７がＭＯ／ＢＩ処理を実行してＲＩＭフラグをセットした後（ステップＳ４０４）、二次キャッシュユニット３００は、キャッシュラインを送出し（ステップＳ４０５）、キャッシュラインを受け取ったキャッシュ制御部１４２は、スレッド識別子とともにキャッシュラインを登録する（ステップＳ４０６）。また、キャッシュラインの到着により、ＲＩＦフラグがセットされる。
一方、ＭＩ要求を受けたキャッシュラインが一次データキャッシュユニット１４０に別スレッドで登録されていない場合には、二次キャッシュユニット３００は、ＭＯ／ＢＩ要求をおこなうことなくキャッシュラインを送出する（ステップＳ４０５）。
このように、このＭＩ処理では、二次キャッシュユニット３００がシノニム制御を用いて、ＭＩ要求を受けたキャッシュラインが一次データキャッシュユニット１４０に別スレッドで登録されているか否かを調べ、別スレッドで登録されている場合には、キャッシュ制御部１４２のＭＯ／ＢＩ処理部１４７がＭＯ／ＢＩ処理を実行してＲＩＭフラグをセットすることによって、プロセッサ間でのＴＳＯ保証機構をスレッド間でのＴＳＯ保証機構として用いることができる。
上述したように、本実施の形態１では、一次データキャッシュユニット１４０のＴＡＧ−ＭＡＴＣＨ検出部１４５が、物理アドレスが一致するキャッシュラインがキャッシュメモリ１４１に登録されている場合にもスレッドスレッド識別子が異なる場合には二次キャッシュユニット３００に対してＭＩ要求をおこない、二次キャッシュユニット３００がＭＩ要求を受けたキャッシュラインが別スレッドで一次データキャッシュユニット１４０に登録されている場合にはＭＯ／ＢＩ処理の実行をキャッシュ制御部１４２に要求し、キャッシュ制御部１４２がＭＯ／ＢＩ処理を実行してフェッチ・ポート１４８のＲＩＭフラグを設定することとしたので、プロセッサ間のＴＳＯ保証機構を用いてスレッド間でのＴＳＯを保証することができる。
なお、本実施の形態１では、二次キャッシュユニット３００がシノニム制御を用いて一次データキャッシュユニット１４０にＭＯ／ＢＩ要求をおこなう場合について説明したが、シノニム制御は二次キャッシュユニットの負担を大きくすることから、二次キャッシュユニットがシノニム制御を有しない場合もある。このような場合には、一次データキャッシュユニット側で、物理アドレスが一致するキャッシュラインが異なるスレッド識別子でキャッシュメモリに登録されている場合に自らＭＯ／ＢＩ処理をおこなうことによって、スレッド間でのＴＳＯを保証することができる。
この場合、プロセッサから外部記憶装置へのデータ転送を高速化するために従来から備えられている、一次キャッシュユニットから二次キャッシュユニットへのキャッシュラインの吐き出し要求をおこなうプロトコルを用いることができる。このプロトコルでは、一次キャッシュユニットから二次キャッシュユニットへ指定したキャッシュラインの吐き出し要求を送り、要求を受け取った二次キャッシュユニットは、その要求を主記憶制御装置へ転送し、主記憶制御装置の指示にしたがってキャッシュラインを主記憶装置に吐き出す。したがって、このキャッシュラインの吐き出し動作を用いて、一次データキャッシュユニットから二次キャッシュユニットへキャッシュラインを吐き出すことができる。
実施の形態２．
ところで、上記実施の形態１では、二次キャッシュユニットのシノニム制御または一次データキャッシュユニットのキャッシュライン吐き出し要求を用いてフェッチ・ポートのＲＩＭフラグを設定する場合について説明した。しかしながら、二次キャッシュユニットにはシノニム制御をおこなう機構がなく、一次データキャッシュユニットにはキャッシュライン吐き出し要求をおこなう機構がない場合もある。
そこで、本実施の形態２では、キャッシュラインのリプレース時に発生するリプレースブロックの吐き出し・無効化処理とキャシュメモリまたは主記憶装置へのアクセス要求の監視とを用いてＴＳＯを保証する場合について説明する。なお、本実施の形態２では、一次データキャッシュユニットのキャッシュ制御部の動作が主として本実施の形態１と異なるので、キャッシュ制御部の動作について説明する。
まず、本実施の形態２に係るＣＰＵの構成について説明する。第５図は、本実施の形態２に係るＣＰＵの構成を示す機能ブロック図である。同図に示すように、このＣＰＵ５００は４つのプロセッサコア５１０〜５４０と４つのプロセッサコアで共有される二次キャッシュユニット５５０とを有する。なお、４つのプロセッサコア５１０〜５４０はいずれも同様の構成を有するので、ここではプロセッサコア５１０を例にとって説明する。
プロセッサコア５１０は、命令ユニット５１１と、演算ユニット５１２と、一次命令キャッシュユニット５１３と、一次データキャッシュユニット５１４とを有する。
命令ユニット５１１は、命令ユニット１１０と同様に命令を解読して実行する処理部であり、ＭＴ（Ｍｕｌｔｉ  Ｔｈｒｅａｄ）制御部が「スレッド０」および「スレッド１」を制御して、二つのスレッドを同時に実行する。
演算ユニット５１１は、演算ユニット１２０と同様に固定小数点演算および浮動小数点演算を実行する処理部であり、一次命令キャッシュユニット５１３は、一次命令キャッシュユニット１３０と同様に主記憶装置に記憶された命令を高速にアクセスするために主記憶装置の一部を記憶した記憶部である。
一次データキャッシュユニット５１４は、一次データキャッシュユニット１４０と同様に主記憶装置に記憶されたデータを高速にアクセスするために主記憶装置の一部を記憶した記憶部であるが、この一次データキャッシュユニット５１４のキャッシュ制御部５１５は、物理アドレスが一致してスレッド識別子が異なるキャッシュラインがキャッシュメモリに登録されている場合には、ＭＩＢから二次キャッシュユニットに対してＭＩ要求をおこなわない。そのかわりに、このキャッシュ制御部５１５は、物理アドレスが一致したキャッシュラインに対してリプレースムーブアウト（ＭＯＲ）処理をおこなってキャッシュタグに登録されたスレッド識別子を変更する。
そして、この処理中にフェッチ・ポートを監視し、一致するアドレスがあればＲＩＭフラグおよびＲＩＦフラグをセットする。ただし、ＲＩＦフラグは、異なるスレッドからキャッシュメモリまたは主記憶装置への書き込みが発生した場合にセットすることもできる。そして、ＲＩＭフラグとＲＩＦフラグがともにセットされているフェッチ・ポートがＳＴＶを返すときに命令の再実行を要求することによってＴＳＯを保証する。
第５図は、このキャッシュ制御部５１５の動作について説明するための説明図である。同図は、キャッシュラインを使用しようとした命令とキャッシュラインの状態によるキャッシュアクセス動作の分類を示している。同図に示すように、このキャッシュ制御部５１５のキャシュアクセス動作には、「１０通り」のアクセスパターンと「３通り」の動作がある。
「３通り」の動作の一つ目は、キャッシュミスの場合の動作（▲１▼および▲６▼）であり、二次キャッシュユニットに対してキャッシュラインのＭＩ要求をおこないキャッシュラインを取り込む。そして、データのロード（ｌｏａｄ）のためにキャッシュラインを必要とした場合（▲１▼）には、取り込んだキャッシュラインを共有型で登録し、データのストア（ｓｔｏｒｅ）のためにキャッシュラインを必要とした場合（▲６▼）には、取り込んだキャッシュラインを排他型で登録する。
「３通り」の動作の二つ目は、マルチスレッド動作をしない時の通常のキャッシュヒット動作（▲２▼、▲３▼、▲４▼および▲８▼）であり、特別な処理をおこなうことなく通常のキャッシュヒットと同様の動作をおこない、キャッシュラインの状態も変化しない。
「３通り」の動作の三つ目は、マルチスレッド動作中にスレッド間のＴＳＯを保証するために発生する動作を含む場合（▲５▼、▲７▼、▲９▼および＠）であり、ＭＯＲ処理をおこなってＲＩＭフラグおよびＲＩＦフラグをセットする。また、他のプロセッサコアと共有しているキャッシュラインにストアを実行する場合（▲７▼）には、他のプロセッサコアと共有しているキャッシュラインにストアを実行すると、ストア完了後どのプロセッサコアが保持しているキャッシュラインが最新のキャッシュラインであるかがわからなくなるため、ストアの実行に先立って、まず、キャッシュラインの状態を共有型から排他型へ変更する（ＢＴＣ）。その後、他のプロセッサコアがその領域を使用してフェッチを完了していた場合に備えて、ＭＯＲ動作をおこなう。その後にストアが実行される。
次に、キャッシュ制御部５１５の処理手順について説明する。第７図は、キャッシュ制御部５１５の処理手順を示すフローチャートである。同図に示すように、このキャッシュ制御部５１５は、命令ユニット５１１が要求したアクセスがロードであるか否かを調べる（ステップＳ７０１）。
その結果、アクセスがロードである場合（ステップＳ７０１肯定）には、キャッシュミスか否かを調べ（ステップＳ７０２）、キャッシュミスの場合には、ＭＩＢを確保し（ステップＳ７０３）、二次キャッシュユニット５５０に対してキャッシュラインを要求する（ステップＳ７０４）。そして、キャッシュラインが届くと、キャッシュラインを共有型で登録し（ステップＳ７０５）、データ部のデータを使用する（ステップＳ７０６）。
これに対して、キャッシュヒットの場合には、ヒットしたキャッシュラインが同一スレッドで登録されているか否かを調べ（ステップＳ７０７）、同一スレッドで登録されている場合には、データ部のデータを使用する（ステップＳ７０６）。また、ヒットしたキャッシュラインが同一スレッドで登録されていない場合には、キャッシュラインが共有型であるか否かを調べ（ステップＳ７０８）、共有型である場合には、データ部のデータを使用し（ステップＳ７０６）、排他型である場合には、ＭＯＲ処理を実行してＲＩＭフラグおよびＲＩＦフラグをセットし（ステップＳ７０９）、データ部のデータを使用する（ステップＳ７０６）。
一方、アクセスがストアである場合（ステップＳ７０１否定）には、キャッシュミスか否かを調べ（ステップＳ７１０）、キャッシュミスの場合には、ＭＩＢを確保し（ステップＳ７１１）、二次キャッシュユニット５５０に対してキャッシュラインを要求する（ステップＳ７１２）。そして、キャッシュラインが届くと、キャッシュラインを排他型で登録し（ステップＳ７１３）、データ部へデータを格納する（ステップＳ７１４）。
これに対して、キャッシュヒットの場合には、ヒットしたキャッシュラインが同一スレッドで登録されているか否かを調べ（ステップＳ７１５）、同一スレッドで登録されている場合には、キャッシュラインが共有型であるか排他型であるかを調べる（ステップＳ７１６）。そして、排他型である場合には、データ部にデータを格納する（ステップＳ７１４）。一方、共有型である場合には、ＭＯＲ処理を実行してＲＩＭフラグおよびＲＩＦフラグをセットし（ステップＳ７１７）、他のプロセッサコアのキャッシュラインを無効化し（ステップＳ７１８）、キャッシュラインを排他型へ変更し（ステップＳ７１９）、データ部へデータを格納する（ステップＳ７１４）。
また、ヒットしたキャッシュラインが同一スレッドで登録されていない場合には、ＭＯＲ処理を実行してＲＩＭフラグおよびＲＩＦフラグをセットし（ステップＳ７２０）、キャッシュラインが共有型であるか排他型であるかを調べる（ステップＳ７１６）。そして、排他型である場合には、データ部にデータを格納する（ステップＳ７１４）。一方、共有型である場合には、他のプロセッサコアのキャッシュラインを無効化し（ステップＳ７１８）、キャッシュラインを排他型へ変更し（ステップＳ７１９）、データ部へデータを格納する（ステップＳ７１４）。
このように、キャッシュ制御部５１５がキャッシュメモリまたは主記憶装置へのアクセスを監視し、ＴＳＯ違反が発生する可能性がある場合にはＭＯＲ処理を実行してＲＩＭフラグおよびＲＩＦフラグをセットすることによって、プロセッサコア間でのＴＳＯ保証機構をスレッド間のＴＳＯ保証に用いることができる。
次に、ＭＯＲ処理について説明する。第８図は、ＭＯＲ処理の処理手順を示すフローチャートである。同図に示すように、このＭＯＲ処理は、ＭＩＢを確保し（ステップＳ８０１）、リプレースムーブアウト動作を開始する。そして、キャッシュラインの半分をリプレースムーブアウトバッファへ読み出すとともに（ステップＳ８０２）、リプレースムーブアウトが禁止されているか否かを調べる（ステップＳ８０３）。ここで、リプレースムーブアウトが禁止されている場合としては、キャッシュラインをコンペアアンドスワップのような特殊な命令が使用しようとしている場合などがある。また、リプレースムーブアウトバッファのデータが使われることはない。
そして、リプレースムーブアウトが禁止されている場合には、ステップＳ８０２に戻って、再度リプレースムーブアウトバッファの読み出しをおこなう。一方、リプレースムーブアウトが禁止されていない場合には、キャッシュラインの残りの半分をリプレースムーブアウトバッファへ読み出すとともに、スレッド識別子を書き換える（ステップＳ８０４）。
このように、このＭＯＲ処理がリプレースムーブアウト動作を実行することによって、プロセッサコア間でのＴＳＯ保証機構が働き、リプレースムーブアウト対象と同じキャッシュラインを使用してＰＳＴＶフラグがセットされているフェッチ・ポートのＲＩＭフラグをセットすることができる。また、ここでは、ＲＩＭフラグのセットと同時にＲＩＦフラグをセットすることにより、プロセッサコア間のＴＳＯ保証機構をスレッド間のＴＳＯ保証機構として働かせることができる。
また、同一プロセッサコア上で異なるスレッドが同一のキャッシュラインの取り合いをする場合もあるが、その時は、マルチプロセッサ環境で異なるプロセッサが同一のキャッシュラインの取り合いをするときの動作が働く。
具体的には、マルチプロセッサ環境でキャッシュラインの取り合いが発生したときは、それぞれのプロセッサがキャッシュラインの吐き出し禁止制御とそれを強制的に無効化する制御をもつ。すなわち、キャッシュラインを保持しているプロセッサ側はストアが完了するまでキャッシュラインの吐き出しを待たせようとする。これがキャッシュラインの吐き出し禁止制御である。ところが、一方のプロセッサが永遠に同一キャッシュラインへのストアを継続していたりすると、他のプロセッサにそのキャッシュラインを受け渡すことができなくなってしまう。そこで、他のプロセッサから受け取ったキャッシュラインの吐き出し要求を処理するためのキャッシュラインの吐き出し処理がキャッシュパイプラインでの実行がある程度の回数失敗した場合に、そのキャッシュラインへのストアを強制的に停止させ、一旦キャッシュラインの吐き出しを成功させる。この結果、他のプロセッサへとキャッシュラインが受け渡される。その後も、そのキャッシュラインへのストアを継続するのであれば、今度は他のプロセッサへとキャッシュラインの吐き出し要求が送られる。その結果、いずれキャッシュラインが届き、ストアを継続することが可能となる。
このような、マルチプロセッサ環境で異なるプロセッサが同一のキャッシュラインの取り合いをするときに動作する機構は、スレッド間のキャッシュラインの受け渡しにおいて使用されるリプレースムーブアウト動作においても動作することから、いかなる場合にもスレッド間でのキャッシュラインの受け渡しに成功し、ハング動作の防止も可能となっている。
上述したように、本実施の形態２では、一次データキャッシュユニット５１４のキャッシュ制御部５１５がキャッシュメモリまたは主記憶装置へのアクセスを監視し、ＴＳＯ違反が発生する可能性がある場合にはＭＯＲ処理を実行してＲＩＭフラグおよびＲＩＦフラグをセットすることとしたので、プロセッサコア間のＴＳＯ保証機構をスレッド間のＴＳＯ保証機構として働かせることができる。
なお、本実施の形態２では、共有型のキャッシュラインを異なるスレッド間で共有する場合について説明したが、本発明はこれに限定されるものではなく、共有型のキャッシュラインも排他型のキャッシュラインのようにスレッド間で排他制御する場合にも同様に適用することができる。具体的には、他のスレッドが登録したキャッシュラインのロードがヒットした場合にＭＯＲ処理を実行することによって、プロセッサコア間のＴＳＯ保証機構をスレッド間のＴＳＯ保証機構として働かせることができる。
また、本実施の形態１および２では、二つのスレッドを一時期に命令ユニットが処理する場合について説明したが、本発明はこれに限定されるものではなく、三つ以上のスレッドを一時期に命令ユニットが処理する場合にも同様に適用することができる。
また、本実施の形態１および２では、同時型マルチスレッド方式を用いた場合について説明をおこなった。ここで、同時型マルチスレッド方式とは、一時期に複数のスレッドの処理をおこなう方式である。一方、マルチスレッド方式には、一時期には一つのスレッドのみ処理をおこない、一定時間ごとあるいはキャッシュミスなどによって命令実行が滞ることがわかった場合にスレッドを切り替える時分割マルチスレッド方式もある。そこで、時分割マルチスレッド方式の場合のＴＳＯ保証について説明する。
時分割マルチスレッド方式では、実行中のスレッドを休眠させて、別のスレッドの動作を立ち上げることによってスレッドの切り替えをおこなう。そこで、スレッドの切り替えをおこなうときに、休眠させるスレッドから発行されていてコミットされていないフェッチ命令とストア命令をすべてキャンセルする。こうすることで、フェッチ命令のアウト・オブ・オーダ完了によって他スレッドのストアから発生する恐れのあるＴＳＯ違反を回避することができる。
また、コミットされたストア命令は、キャッシュメモリまたは主記憶装置への書き込みが可能となるまでの間、ストア要求とストアデータを保持するストアポートまたはライトバッファで実行を待たされ、実行可能となると順次ストアを実行する。ここで、先行するストアの結果を後続のフェッチが反映しなければならない場合、すなわち先行するストアが操作対象とするメモリ領域を後続のフェッチが使用する場合は、ストア要求のアドレスとオペランド長をフェッチ要求のアドレスとオペランド長を比較することで検出する。そして、この場合には、ＳＦＩ（Ｓｔｏｒｅ  Ｆｅｔｃｈ  Ｉｎｔｅｒｌｏｃｋ）によって、ストアの実行が完了するまでフェッチの実行を待たせる。
このように、ストア命令がコミットされてからスレッドの切り替えが発生し、ストアポートに異なるスレッドのストアが滞っている場合にも、ＳＦＩ動作を有効にして異なるスレッドからのストアの影響を反映させることによって、スレッド休眠中に発生した異なるスレッドのストアに起因するＴＳＯ違反を回避することができる。
さらに、キャッシュラインの無効化・吐き出しによるＲＩＭフラグのセット、データの到着によるＲＩＦフラグのセットを利用することにより、プロセッサ間のＴＳＯを保証することができ、異なるスレッド間でのＴＳＯ保証と合わせて、コンピュータシステム全体のＴＳＯを保証することができる。
以上説明したように、本発明によれば、メモリアクセス要求で指定されたアドレスのデータを記憶している場合に記憶しているデータを登録したスレッドとメモリアクセス要求を発行したスレッドが同一であるか否かを判定し、判定結果に基づいて、複数の命令処理装置間で共有されるデータに対する該複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証機構を動作させるよう構成したので、スレッド間での共有データの読み出しおよび書き込みの実行順序の一貫性を保証することができるという効果を奏する。
また、本発明によれば、メモリアクセス要求で指定されたアドレスのデータを含むキャッシュラインを記憶している場合に記憶しているキャッシュラインを登録したスレッドとメモリアクセス要求を発行したスレッドが同一であるか否かを判定し、同一でないと判定した場合に、複数の命令処理装置間で共有されるデータに対する複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証機構を動作させるよう構成したので、スレッド間での共有データの読み出しおよび書き込みの実行順序の一貫性を保証することができるという効果を奏する。
また、本発明によれば、一次データキャッシュ装置が、命令処理装置からのメモリアクセス要求と物理アドレスが一致するキャッシュラインが異なるスレッドによって登録されている場合に二次キャッシュ装置に対してキャッシュラインの取り込み要求をおこない、二次キャッシュ装置が、キャッシュラインの取り込み要求を受けたキャッシュラインが他のスレッドにより一次データキャッシュ装置に登録されている場合にはキャッシュラインの無効化または吐き出しの実行を一次データキャッシュ装置に要求し、一次データキャッシュ装置が、二次キャッシュ装置からの要求に基づきキャッシュラインの無効化または吐き出しを実行することによって、他の組の一次データキャッシュ装置と共有するキャッシュラインに対する複数の命令処理装置間の読み出しおよび書き込みの実行順序の一貫性の保証をおこなう一貫性保証機構を動作させるよう構成したので、スレッド間での共有データの読み出しおよび書き込みの実行順序の一貫性を保証することができるという効果を奏する。
また、本発明によれば、命令処理装置で実行されるスレッドの切り替えが行われる際に、実行が中断されるスレッドが発行したストア命令およびフェッチ命令のうちコミットされていない全てのストア命令およびフェッチ命令を無効とし、実行が中断されたスレッドの実行が再開された際に、コミットされたストア命令の実行結果に影響を受けるフェッチ命令を検出し、検出したフェッチ命令をストア命令の実行後に実行するように制御するよう構成したので、スレッド間での共有データの読み出しおよび書き込みの実行順序の一貫性を保証することができるという効果を奏する。
【産業上の利用可能性】  以上のように、本発明に係る記憶制御装置、データキャッシュ制御装置、中央処理装置、記憶装置制御方法、データキャッシュ制御方法およびキャッシュ制御方法は、複数のスレッドを同時に実行するマルチスレッド方式のコンピュータシステムに適している。
【図１】
2004068361.tif 000003
【図２】
2004068361.tif 000004
【図３】
2004068361.tif 000005
【図４】
2004068361.tif 000006
【図５】
2004068361.tif 000007
【図６】
2004068361.tif 000008
【図７】
2004068361.tif 000009
【図８】
2004068361.tif 000010
【図９】
2004068361.tif 000011
【国際調査報告】
2004068361.tif 000012
2004068361.tif 000013
2004068361.tif 000014
2004068361.tif 000015
2004068361.tif 000016
2004068361.tif 000017
2004068361.tif 000018