JP2003030049A - キャッシュメモリ制御方法及びマルチプロセッサシステム - Google Patents

キャッシュメモリ制御方法及びマルチプロセッサシステム

Info

Publication number
JP2003030049A
JP2003030049A JP2001212250A JP2001212250A JP2003030049A JP 2003030049 A JP2003030049 A JP 2003030049A JP 2001212250 A JP2001212250 A JP 2001212250A JP 2001212250 A JP2001212250 A JP 2001212250A JP 2003030049 A JP2003030049 A JP 2003030049A
Authority
JP
Japan
Prior art keywords
cache
processor
flag
cache line
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2001212250A
Other languages
English (en)
Other versions
JP3661614B2 (ja
Inventor
Mitsufumi Shibayama
充文 柴山
Satoshi Matsushita
智 松下
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2001212250A priority Critical patent/JP3661614B2/ja
Priority to US10/191,401 priority patent/US6950908B2/en
Priority to GB0216270A priority patent/GB2380292B/en
Publication of JP2003030049A publication Critical patent/JP2003030049A/ja
Application granted granted Critical
Publication of JP3661614B2 publication Critical patent/JP3661614B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】 【課題】 複数のプロセッサから構成されるマルチプロ
セッサシステムにおけるスレッド並列処理において、デ
ータ整合性を効率良く維持する。 【解決手段】 プロセッサ#0〜#3は実行順序関係が
規定された複数のスレッドを並列に実行する。或るスレ
ッドを実行するプロセッサ#1が自キャッシュメモリ#
1を更新すると、同アドレスのデータが、子スレッドを
実行するプロセッサ#2のキャッシュメモリ#2にあれ
ば同時に更新するが、親スレッドを実行するプロセッサ
#0のキャッシュメモリ#0にあっても書き換えず、書
き換えがあった旨を記録する。プロセッサ#0でスレッ
ドが終了した際、子スレッドから書き込みのあった旨が
記録されたキャッシュラインは無効の可能性があり、記
録の無いキャッシュラインは有効と判断される。無効の
可能性があるキャッシュラインは、次のスレッドの実行
中に実際に無効か否かが調べられる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、マイクロプロセッ
サ等のデータ処理装置に関し、特にマイクロプロセッサ
の性能向上に関する。より詳細には、複数のスレッドを
同時に実行するマイクロプロセッサのキャッシュメモリ
制御方法に関する。
【0002】
【従来の技術】従来より、マイクロプロセッサの性能向
上技術として、マイクロプロセッサが実行するプログラ
ム中の命令の順序とは異なる順序で命令の実行を行う非
プログラム順序実行(アウトオブオーダ実行)技術が広
く使われている。プロセッサが非プログラム順序実行を
行う場合、実行可能になった命令から実行を行うため、
プログラム中の命令の順序で実行を行うプログラム順序
実行(インオーダ実行)を行うのに比べて、プロセッサ
の性能を向上させることが可能となる。
【0003】しかしながら、非プログラム順序実行は無
条件に行えるわけではない。特にメモリに対して操作を
行う命令(メモリ操作命令)に対しては、非プログラム
順序実行に際して、メモリに関する依存関係に対して考
慮が必要となる。通常、メモリ操作命令にはメモリから
データを読み出すロード命令と、メモリへデータを書き
込むストア命令が含まれる。プログラム中に出現するあ
る2つのロード命令またはストア命令が対象とするアド
レスが互いに異なれば、メモリの異なる位置が読み出し
または書き込みの対象となるため、それら2つのロード
命令またはストア命令の間にはメモリに関して依存関係
は存在しない。すなわち、それら2つの命令は非プログ
ラム順序で実行することが可能である。
【0004】一方、プログラム中に出現するある2つの
ロード命令またはストア命令が対象とするアドレスが同
じ場合、メモリの同じ位置が読み出しまたは書き込みの
対象となるため、それら2つのロード命令またはストア
命令間には、メモリに関して依存関係が存在する。例え
ば、プログラム順序で前にあるストア命令が書き込みを
行うアドレスに対して、プログラム順序でそれより後に
あるロード命令が読み出しを行う場合、前にあるストア
命令から後にあるロード命令へメモリに関する正依存関
係があるという。この場合、それら2つのロード命令、
ストア命令をプログラム順序とは逆の順序で実行を行う
と、プログラムの意味が変わってしまい、正しいプログ
ラムの実行結果を得ることができない。すなわち、メモ
リに関して正依存関係がある場合、非プログラム順序で
実行を行うことができない。同様にして、プログラム順
序で前にあるロード命令が読み出しを行うアドレスに対
して、プログラム順序でそれより後にあるストア命令が
書き込みを行う場合、前にあるロード命令から後にある
ストア命令へメモリに関する逆依存関係があるという。
また、プログラム順序で前にあるストア命令が書き込み
を行うアドレスに対して、プログラム順序でそれより後
にあるストア命令も書き込みを行う場合、前にあるスト
ア命令から後にあるストア命令へメモリに関する出力依
存関係があるという。いずれの場合も、それら2つのロ
ード・ストア命令をプログラム順序とは逆の順序で、そ
のまま実行してしまうと、プログラムの意味が変わって
しまい、正しいプログラムの実行結果を得ることができ
ない。
【0005】メモリに関する逆依存関係及び出力依存関
係に対しては、ストア命令が書き込みを行うデータを一
時的なバッファ(通常ストアバッファと呼ばれる)に一
時的に格納するなどの対応で、逆依存関係あるいは出力
依存関係を解消し、非プログラム順序実行を可能とする
技術が従来より知られている。一方、正依存関係が存在
する場合は、本質的に非プログラム順序で実行を行うこ
とができず、プログラム順序で実行を行うことになる。
しかしながら、ロード・ストア命令が対象とするアドレ
スは実行時まで不明である場合が多いため、非プログラ
ム順序で実行を行えないことによる性能への影響が大き
いという問題がある。
【0006】この問題に対して、正依存関係の有無が判
明するよりも以前に、正依存関係が存在しないと仮定し
て、投機的に非プログラム順序で実行する、データ依存
投機実行が従来より知られている。データ依存投機実行
においては、実際に正依存関係が存在せず投機実行が成
功する場合と、実際に正依存関係が存在して投機実行が
失敗する場合があり、正依存関係の有無が判明した時点
で、そのいずれであるかを判定する必要がある。実際に
正依存関係が存在せず投機実行が成功した場合、そのま
ま後続の命令実行を継続することが可能であり、データ
依存投機実行による非プログラム順序実行を行った分だ
け、実行性能の向上が期待できる。一方、実際に正依存
関係が存在して投機実行が失敗した場合、プログラムの
意味が変わってしまうため、プログラムの正しい実行結
果が保証できなくなる。そのため、データ依存投機実行
による非プログラム順序実行を行った命令の結果を取り
消して、再びプログラム順序で再実行するなどのデータ
依存投機実行の失敗に対する回復処理が必要となる。投
機実行が失敗した場合、失敗した命令の取り消しや回復
処理のために、プログラム順序実行するよりも性能が低
下することが多い。しかし、投機実行に失敗する場合よ
りも成功する場合の確率が十分に高ければ、プログラム
全体としての実行性能の向上が期待できることになる。
なお、非プログラム順序実行については、マイク・ジョ
ンソンによる文献、“スーパースカラ・プロセッサ”、
日経BP出版センター、1994年、に詳しい。また、
投機実行の失敗による回復処理方法については、例え
ば、特開平5−224927号公報に開示されている方
法がある。
【0007】さらに近年、単一のプログラムあるいは複
数のプログラムをスレッドと呼ぶ複数のプログラムの部
分単位に分割し、それぞれのスレッドを複数のプロセッ
サなどで並列に処理することでプログラム実行を高速化
するスレッド並列処理が注目されている。スレッドはプ
ログラムの一部分単位であり、複数の命令からなる命令
列なので、複数のスレッド間で順序関係が定義される場
合がある。例えば、同一のプログラムに属する2つのス
レッドをそれぞれT0、T1としたとき、T0とT1の
間にはそのプログラム中の位置関係により、明確に順序
関係が存在する。仮に、プログラムにおいてT0がT1
よりも前に位置しているならば、プログラムの意味上、
T0がT1よりも前に実行されることを期待されている
ことになる。逆に、プログラムにおいてT1がT0より
も前に位置しているならば、プログラムの意味上、T1
がT0よりも前に実行されることを期待されていること
になる。スレッド並列処理では、スレッド間の順序関係
に起因するメモリ依存関係に考慮し、プログラムの正し
い実行結果を保証しつつ、スレッド間の順序関係によら
ずにスレッドの実行を並列に行うことで、プログラム実
行を高速化する。命令単位の非プログラム順序実行と対
比して、スレッド単位の非プログラム順序実行と位置づ
けられる。
【0008】スレッド単位の非プログラム順序実行にお
いても、正しいプログラムの実行結果を得るためには、
スレッドが含む命令間の依存関係の解消や保証が必要で
ある。しかしながら、命令単位の非プログラム順序実行
と同様に、特にメモリに関する正依存関係に対しては、
本質的にプログラム順序で実行する必要があり、かつ、
確定的にプログラム順序実行を行うと、非プログラム順
序実行の実行性能向上の効果が十分得られないという問
題がある。特に、スレッド単位の非プログラム順序実行
では、複数の命令からなるスレッド単位で、非プログラ
ム順序実行が妨げられるので、より問題は深刻である。
この問題への対応としては、命令単位の非プログラム順
序実行と同様に、データ依存投機実行が有効である。す
わなち、スレッドが含む命令間の正依存関係の有無が判
明するよりも以前に、正依存関係が存在しないと仮定し
て、投機的にスレッドの非プログラム順序実行を行う、
スレッド単位のデータ依存投機実行である。
【0009】一方、メモリに関する逆依存関係及び出力
依存関係に対しては、命令単位の非プログラム順序実行
と同様に、ストア命令が書き込みを行うデータを、プロ
セッサに固有のバッファやメモリに一時的に格納するな
どの対応で、逆依存関係あるいは出力依存関係を解消し
て、非プログラム順序実行することが可能となる。
【0010】例えば、それぞれが固有のキャッシュメモ
リを備える複数のプロセッサから構成されるマルチプロ
セッサシステムにおけるスレッド並列処理に関して、例
えば特許第3139392号公報(以下、文献1と称
す)に、メモリに関する逆依存関係及び出力依存関係を
解消するキャッシュメモリの制御方式が開示されてい
る。
【0011】図11は、上記文献1によるマルチプロセ
ッサシステムの構成例を示す図である。図11を参照す
ると、文献1によるマルチプロセッサシステムは、4つ
のスレッド実行部#0〜#3(符号100)、4つのキ
ャッシュメモリ#0〜#3(符号101)、4つの整合
性維持部#0〜#3(符号102)、共有バス(符号1
03)、及びメインメモリ(符号104)、から構成さ
れる。
【0012】スレッド実行部#0は、キャッシュメモリ
#0、及び整合性維持部#0と、スレッド実行部#1
は、キャッシュメモリ#1、及び整合性維持部#1と、
スレッド実行部#2は、キャッシュメモリ#2、及び整
合性維持部#2と、スレッド実行部#3は、キャッシュ
メモリ#3、及び整合性維持部#3とそれぞれ接続さ
れ、それぞれ並列にスレッドを実行する。さらに、整合
性維持部#0〜#3は共有バス103を通じて、互い
に、及びメインメモリ104と接続され、他の整合性維
持部及びメインメモリとメモリ操作命令が対象とするメ
モリデータの受渡しをなどを制御する。このとき、メモ
リに関する逆依存関係、及び出力依存関係を考慮して、
メモリデータ間の整合性の維持が図られる。
【0013】メモリデータ間の整合性の維持方法をより
詳細に説明する。まず、あるスレッド実行部がストア命
令を実行した際には、該スレッド実行部に固有のキャッ
シュメモリに、該ストア命令のストア・データを格納す
るとともに、該スレッド実行部が実行するスレッドより
も、プログラム順序で後に位置するスレッドを実行する
スレッド実行部に固有のキャッシュメモリに、該ストア
命令のストア・データを格納する。
【0014】また、あるスレッド実行部が実行するスレ
ッドよりもプログラム順序で前に位置するスレッドが、
他のいずれかのスレッド実行部で実行されている場合に
は、該スレッド実行部に固有のキャッシュメモリに格納
したストア命令のストア・データの、メインメモリへの
書き戻しを禁止する。
【0015】また、あるスレッド実行部が実行するスレ
ッド(自スレッド)が、他のいずれのスレッド実行部で
実行されているスレッドよりもプログラム順序で前に位
置し、かつ自スレッドの実行が終了したならば、該スレ
ッド実行部に固有のキャッシュメモリに格納したすべて
のストア命令のストア・データをメインメモリへ書き戻
した後、キャッシュメモリ上のすべてのデータを無効化
する。
【0016】また、あるスレッド実行部に固有のキャッ
シュメモリでキャッシュミスが発生した場合、該スレッ
ド実行部が実行するスレッドよりもプログラム順序で前
に位置するスレッドを実行するスレッド実行部に固有の
キャッシュメモリに、発生したキャッシュミスと同じア
ドレスのデータが存在すれば、そのデータを前記キャッ
シュミスが発生したキャッシュメモリに転送し、発生し
たキャッシュミスと同じアドレスのデータが存在しなけ
れば、データをメインメモリから前記キャッシュミスが
発生したキャッシュメモリに転送する。
【0017】整合性維持部#0〜3は、上記した操作を
行うよう制御を行うことで、メモリに関する逆依存関
係、及び出力依存関係を解消し、スレッド単位の非プロ
グラム順序実行を実現する。一方、上記文献1によるマ
ルチプロセッサシステムは、正依存関係には対応してお
らず、正依存関係が存在する可能性のある場合、非プロ
グラム順序でスレッド実行を行うことはできない。
【0018】また、それぞれが固有のキャッシュメモリ
を備える複数のプロセッサから構成されるマルチプロセ
ッサシステムにおけるスレッド並列処理に関して、メモ
リに関する逆依存関係及び出力依存関係に加えて、正依
存関係にも対応するキャッシュメモリの制御方式の例と
して、S.Gopal,T.N.Vijaykumar, J.E.Smith, G.S.Sohi
らによる論文 "Speculative Versioning Cache", In Pr
oceedings of the 4thInternationalSymposium on High
-Performance Computer Architecture, February 1998.
(以下、文献2と称す)があげられる。
【0019】図12は、上記文献2によるマルチプロセ
ッサシステムの構成例を示す図である。図12を参照す
ると、文献2によるマルチプロセッサシステムは、4つ
のプロセッサ#0〜#3(符号110)、4つのキャッ
シュメモリであるSVC#0〜#3(符号111)、ス
ヌープ・バス(符号112)、バス・アービタ/バージ
ョン制御論理(符号113)、及びメインメモリ(符号
114)、から構成される。
【0020】プロセッサ#0はSVC#0と、プロセッ
サ#1はSVC#1と、プロセッサ#2はSVC#2
と、プロセッサ#3はSVC#3と、それぞれ接続さ
れ、それぞれ並列にスレッドを実行する。さらに、各S
VC#0〜3は、バス・アービタ/バージョン制御論理
113の制御下で、スヌープ・バス112を通じ、他の
SVC及びメインメモリとメモリ操作命令が対象とする
メモリデータの受渡しを行う。このとき、メモリに関す
る逆依存関係、及び出力依存関係を考慮して、メモリデ
ータ間の整合性の維持が図られる。また、SVCはメモ
リに関する正依存関係を検出する機能、及び投機的なス
レッド実行の結果を取り消す機能を有し、正依存関係が
検出された場合には、スレッドを再実行することによ
り、データ依存投機実行を実現する。
【0021】SVCを構成するキャッシュラインは、他
のSVCを指し示すポインタを記憶するエントリを含
み、各SVCが同アドレスのデータを保持する場合、そ
れらデータ間のプログラム順序における前後関係を線形
リストの構造で記憶することを特徴とする。バス・アー
ビタ/バージョン制御論理113はこの線形リスト構造
を参照して、メモリに関する依存関係の制御を行う。
【0022】上記文献2による、SVCを含むマルチプ
ロセッサシステムの動作の特徴をより詳細に説明する。
まず、あるプロセッサが正依存関係に関して投機的なロ
ード命令を実行した際には、該プロセッサに固有のSV
Cに存在する、該ロード命令のデータを含むキャッシュ
ラインに、投機的なロード命令を実行したことを示すフ
ラグをセットする。
【0023】また、あるプロセッサP0がストア命令を
実行した際には、プロセッサP0に固有のSVCに該ス
トア命令のストア・データを格納する。同時に、プロセ
ッサP0が実行するスレッドS0よりもプログラム順序
で後に位置するスレッドS1を実行するプロセッサP1
に固有のSVCに該ストア命令と同アドレスのデータが
存在し、かつスレッドS0よりもプログラム順序で後に
位置するスレッドにより更新されていないならば、プロ
セッサP1のSVCにある前記該ストア命令と同アドレ
スのデータを含むキャッシュラインを無効化する。さら
に、そのキャッシュラインに前記投機的なロード命令を
実行したことを示すフラグがセットされていたならば、
ロード命令の投機実行は失敗したと判定し、プロセッサ
P1へスレッド実行の取り消し及び再実行を要求する機
能を有する。
【0024】また、あるプロセッサが実行するスレッド
よりもプログラム順序で前に位置するスレッドが、他の
いずれかのプロセッサで実行されている場合には、該プ
ロセッサに固有のSVCに格納したストア命令のストア
・データの、メインメモリへの書き戻しを禁止する。
【0025】また、あるプロセッサが実行するスレッド
が、他のいずれのプロセッサで実行されているスレッド
よりも、プログラム順序で前に位置し、かつ該スレッド
の実行が終了したならば、該プロセッサに固有のSVC
に格納されているすべてのキャッシュラインに、データ
が確定されたことを示すフラグをセットする。一方、あ
るメモリ操作命令がSVCをアクセスした際に、アクセ
ス対象のキャッシュラインの前記データが確定されたこ
とを示すフラグがセットされていたならば、バス・アー
ビタ/バージョン制御論理113により、すべてのSV
Cを参照して、有効なキャッシュラインを得ることを特
徴とする。
【0026】また、あるプロセッサに固有のSVCでキ
ャッシュミスが発生した場合、該プロセッサが実行する
スレッドよりもプログラム順序で前に位置するスレッド
を実行するプロセッサに固有のSVCに、発生したキャ
ッシュミスと同じアドレスのデータが存在すれば、その
データを前記キャッシュミスが発生したSVCに転送
し、発生したキャッシュミスと同じアドレスのデータが
存在しなければ、データをメインメモリから前記キャッ
シュミスが発生したSVCに転送する。
【0027】すなわち、上記文献2によるSVCは、各
SVCが保持するデータのプログラム順序上の前後関係
を線形リスト構造の形で、明示的に、キャッシュライン
単位で記憶及び管理を行い、バス・アービタ/バージョ
ン制御論理113がそれに基づいて、メモリ依存関係に
関する制御を行うことを特徴としている。
【0028】
【発明が解決しようとする課題】しかしながら、上記し
た文献1に開示されたキャッシュメモリ制御方式は、ス
レッドの実行が終了してデータが確定した際に、該スレ
ッドが更新したすべてのデータのメインメモリへの書き
戻しが集中して発生する為、特にスレッドの大きさが小
さい場合にプログラムの実行性能が低下するという問題
がある。また、キャッシュメモリ上のすべてのデータが
無効化されるため、次に実行されるスレッドでキャッシ
ュミスが多発し、プログラムの実行性能が低下するとい
う問題がある。さらに、メモリに正依存関係が存在する
場合、スレッドを非プログラム順序で並列に実行するこ
とができないため、プログラムの実行性能が低下すると
いう問題がある。
【0029】また、上記した文献2に記載されているキ
ャッシュメモリ制御方式は、文献1の上記問題は回避さ
れているものの、ストア命令等の書き込みを実行した際
には、プログラム順序で後に位置するスレッドを実行す
るプロセッサのSVCが保持しているデータが無効化さ
れる為、スレッド間で通信が多い場合、キャッシュミス
が多発し、プログラムの実行性能が低下するという問題
がある。さらに、前記無効化を実行するためには、スト
ア命令による書き込みのデータ単位で、データの状態を
示すフラグや、データ間の順序関係を示す線形リスト構
造の保持や管理をする必要がある為、必要なハードウェ
ア量が大きいという問題がある。また、データのプログ
ラム順序上の前後関係を線形リスト構造で保持する為、
特にスレッド実行の取り消しなどでリストが切断された
時などに、依存関係の処理が複雑であり、高速化が困難
であるという問題がある。
【0030】
【発明の目的】本発明は上述の問題に鑑みてなされたも
のであり、その目的は、それぞれが固有のキャッシュメ
モリを備える複数のプロセッサから構成されるマルチプ
ロセッサシステムにおけるスレッド並列処理に関して、
メモリに関する依存関係を解消するキャッシュメモリ制
御方法であって、スレッドの大きさが小さく、スレッド
間の通信が多い場合であっても、高速にスレッド並列処
理が可能なキャッシュメモリ制御方法を提供することに
ある。
【0031】また、本発明の別の目的は、必要なハード
ウェア量が小さくなるキャッシュメモリ制御方法を提供
することにある。
【0032】また、本発明の更に別の目的は、消費電力
が小さく、制御が単純で高速化が容易なキャッシュメモ
リ制御方法を提供することにある。
【0033】
【課題を解決するための手段】上記の目的を達成する為
に、本発明は、それぞれが固有のキャッシュメモリを備
える複数のプロセッサから構成されるマルチプロセッサ
システムにおいて、スレッド間のメモリに関する依存関
係を効率的に解消するキャッシュメモリ制御方法及びマ
ルチプロセッサシステムを提供する。
【0034】具体的には、キャッシュメモリを構成する
キャッシュライン毎に、そのキャッシュラインを更新し
たプロセッサを特定する更新フラグを具備し、キャッシ
ュメモリのあるキャッシュラインをアクセスした際に
は、前記更新フラグ及び必要であれば他のキャッシュメ
モリが保持するキャッシュラインの状態を参照して、前
記アクセスしたキャッシュラインが有効か否かを判定す
る。また、あるプロセッサがストア命令を実行した際に
は、該プロセッサに固有のキャッシュメモリに該ストア
命令のストア・データを格納するのに加えて、該プロセ
ッサが実行するスレッドよりもプログラム順序で後に位
置するスレッドを実行するプロセッサに固有のキャッシ
ュメモリに、該ストア命令と同アドレスのキャッシュラ
インが存在した場合、ストア・データのなかの有効なデ
ータ部分の更新を行う。一方、該プロセッサが実行する
スレッドよりもプログラム順序で前に位置するスレッド
を実行するプロセッサに固有のキャッシュメモリに、該
ストア命令と同アドレスのキャッシュラインが存在した
場合、前記更新フラグに該ストア命令を実行したプロセ
ッサにより更新された旨を記憶する。
【0035】
【作用】本発明にあっては、キャッシュメモリを構成す
るキャッシュラインに、どのプロセッサが更新したかを
示す更新フラグを具備し、キャッシュメモリをアクセス
する際には、前記更新フラグ及び必要であれば他のキャ
ッシュメモリが保持するキャッシュラインの状態を参照
して、そのキャッシュラインが有効か否かを判定する。
また、あるプロセッサがストア命令を実行した際には、
該プロセッサに固有のキャッシュメモリに、該ストア命
令のストア・データを格納するのに加えて、該プロセッ
サが実行するスレッドよりも、プログラム順序で後に位
置するスレッドを実行するプロセッサに固有のキャッシ
ュメモリに、該ストア命令と同アドレスのキャッシュラ
インが存在した場合、同アドレスのデータを保持するす
べてのキャッシュラインを参照して、有効なデータ部分
を算出し、有効なデータ部分のみ更新を行う。一方、該
プロセッサが実行するスレッドよりも、プログラム順序
で前に位置するスレッドを実行するプロセッサに固有の
キャッシュメモリに、該ストア命令と同アドレスのキャ
ッシュラインが存在した場合、該ストア命令を実行した
プロセッサに対応する前記更新フラグをセットする。さ
らに、スレッドの実行が終了し、該スレッドにより生成
されたデータが確定した際には、前記更新フラグの効果
を有効にする。
【0036】
【発明の実施の形態】図面を参照しながら、本発明の実
施の形態について詳細に説明する。
【0037】図1は、本実施形態によるキャッシュメモ
リ装置を含むマルチプロセッサシステムの構成を示すブ
ロック図である。図1を参照すると、本実施形態による
マルチプロセッサシステムは、4つのプロセッサ#0〜
#3(符号10)、4つのキャッシュメモリ#0〜#3
(符号11)、4つのキャッシュ制御部#0〜#3(符
号12)、要求バス(符号13)、応答バス(符号1
4)、データバス(符号15)、スレッド制御バス(符
号16)、バス制御部(符号17)、及びメインメモリ
(符号18)から構成される。
【0038】プロセッサ#0は、キャッシュメモリ#
0、及びキャッシュ制御部#0と、プロセッサ#1は、
キャッシュメモリ#1、及びキャッシュ制御部#1と、
プロセッサ#2は、キャッシュメモリ#2、及びキャッ
シュ制御部#2と、プロセッサ#3は、キャッシュメモ
リ#3、及びキャッシュ制御部#3と、それぞれ接続さ
れ、それぞれ並列にスレッドを実行する。さらに、各プ
ロセッサ#0〜#3は、互いにスレッド制御バス16に
より接続され、スレッドの生成、スレッド実行の終了や
取り消し、スレッド間の順序関係、等のスレッド実行に
関する制御情報が伝達される。各プロセッサ#0〜#3
は、前記スレッド制御バス16により伝達されるスレッ
ド制御情報を参照して、自身が実行しているスレッドと
他のプロセッサが実行しているスレッドとの順序関係を
知ることができる。また、各キャッシュ制御部#0〜#
3は、要求バス13、応答バス14、データバス15を
通じて、他のプロセッサ及びメインメモリとメモリ操作
命令が対象とするメモリデータの受渡しを制御する。こ
のとき、プロセッサより通知されるスレッドの順序関係
を参照し、メモリに関する正依存関係、逆依存関係、及
び出力依存関係を考慮して、メモリデータ間の整合性の
維持を図る。要求バス13、応答バス14、データバス
15はそれぞれ一本のバスを各プロセッサで共有しても
よいし、プロセッサ数分だけ固有のバスを備えてもよ
い。以下では、要求バス13、応答バス14、及びデー
タバス15を総称して単にバスとも表記する。
【0039】図2は、キャッシュメモリ11を構成する
キャッシュラインの詳細を示す説明図である。一つのキ
ャッシュラインは、アドレスタグ25によって示される
アドレス範囲にあるデータを保持する。図2を参照する
と、キャッシュメモリを構成するキャッシュラインは、
有効フラグ(符号20)、変更フラグ(符号21)、共
有フラグ(符号22)、投機フラグ(符号23)、更新
フラグ(符号24)、アドレスタグ(符号25)、複数
のデータエントリ(符号26)、複数のストア・フラグ
(符号27)、複数の投機ロード・フラグ(符号2
8)、から構成される。
【0040】有効フラグ20は、そのキャッシュライン
が有効であることを示す。有効フラグ20は、キャッシ
ュミスが発生した時など、データをキャッシュメモリに
転送し、キャッシュラインを生成する(リフィルする)
際にセットし、キャッシュラインを入れ換える時など、
キャッシュラインを無効化する際にリセットする。
【0041】変更フラグ21は、そのキャッシュライン
のデータをストア命令等で変更しており、メインメモリ
にあるデータと異なっていることを示す。変更フラグ2
1は、ストア命令等のデータの書き込みを実行した際に
セットし、キャッシュラインのメインメモリへの書き戻
し(ライトバック)を行った際にリセットする。
【0042】共有フラグ22は、そのキャッシュライン
と同アドレスのキャッシュラインを、他のプロセッサに
固有のキャッシュメモリも保持し、データを共有してい
ることを示す。本実施形態による共有フラグは、マルチ
プロセッサシステムが備えるプロセッサ数分のフラグを
備えることを特徴とする。すなわち、それぞれのフラグ
部分が各プロセッサに対応しており、フラグがセットさ
れている場合、該フラグに対応するプロセッサとデータ
を共有していることを示し、フラグがリセットされてい
る場合、該フラグに対応するプロセッサとデータを共有
していないことを示す。したがって、共有フラグ22を
参照すると、共有対象のプロセッサを特定することが可
能である。共有フラグ22はバスアクセスが行われた際
にセットまたはリセットされる。詳細には、あるプロセ
ッサがキャッシュ制御部12を通じてバスアクセスを行
った際には、全てのプロセッサのキャッシュ制御部12
には、応答バス14を通じてすべてのキャッシュメモリ
11のキャッシュライン状態が通知される。このとき、
どのプロセッサと共有しているかが判明するので、共有
フラグ22を構成するフラグのうち、共有しているプロ
セッサに対応するフラグをセットし、共有していないプ
ロセッサに対応するフラグをリセットする。
【0043】投機フラグ23は、そのキャッシュライン
のデータが投機的なデータを含んでいることを示す。本
実施形態による投機フラグは、マルチプロセッサシステ
ムが備えるプロセッサ数分のフラグを備えることを特徴
とする。すなわち、それぞれのフラグ部分が各プロセッ
サに対応しており、フラグがセットされている場合、該
フラグに対応するプロセッサが、データが投機的である
原因であることを示す。したがって、投機フラグ23を
参照すると、該キャッシュラインのデータを投機的にな
らしめた原因のプロセッサを特定することが可能であ
る。投機フラグ23は、キャッシュラインをリフィルす
る際、他のプロセッサのキャッシュメモリが保持してい
る投機的なキャッシュラインからリフィル・データを得
た場合、投機フラグ23の前記他のプロセッサに対応す
るフラグをセットする。また、自プロセッサが実行する
スレッド(以下では、自スレッドと表記する)が含む投
機的なストア命令により、投機的なデータでキャッシュ
ラインを更新した場合、投機フラグ23の自プロセッサ
に対応するフラグをセットする。また、プログラム順序
で先行するスレッド(以下では、親スレッドと表記す
る)が含む投機的なストア命令により、投機的なデータ
でキャッシュラインを更新した場合、投機フラグ23の
前記親スレッドを実行するプロセッサに対応するフラグ
部分をセットする。一方、投機フラグ23は、自スレッ
ドの投機的な実行が確定して、そのキャッシュラインの
データが確定した際にリセットされる。
【0044】更新フラグ24は、プログラム順序で後に
位置するスレッド(以下、子スレッドと表記する)によ
り、そのキャッシュラインのデータが更新されたことを
示す。すなわち、そのキャッシュラインのデータは、該
プロセッサが実行する現スレッドには有効であるが、該
プロセッサに次に割り当てられるスレッドには有効でな
い可能性があることを意味する。更新フラグ24は、1
ビットの更新有効フラグ24aと、マルチプロセッサシ
ステムが備える、自プロセッサを除くプロセッサ数ビッ
ト分の更新対象フラグ24bとから構成される。更新有
効フラグ24aは更新フラグ24全体が有効であること
を示す。スレッドが終了した際には、すべての更新有効
フラグ24aがセットされるが、別の実施形態として、
更新対象フラグ24bのいずれかがセットされている更
新フラグ24の更新有効フラグ24aのみをセットして
もよい。更新有効フラグ24aがセットされていて、か
つ、更新対象フラグ24bのいずれかがセットされてい
る場合、当該キャッシュラインは次に実行されるスレッ
ドでは有効でない可能性があることが示される。実際に
当該キャッシュラインが有効か否かは、キャッシュミス
時などに伴うバス要求の入出力時にキャッシュ制御部ど
うしで交換されるキャッシュライン状態によって調べら
れ、若し有効であれば更新対象フラグ24bと共に更新
有効フラグ24aがリセットされる。他方、更新有効フ
ラグ24aがリセットされているか、更新対象フラグ2
4bの全てがリセットされていれば、当該キャッシュラ
インは次に実行されるスレッドでも有効であることが示
される。各更新対象フラグ24bは、それぞれが他のプ
ロセッサに対応し、対応するプロセッサにより該キャッ
シュラインが更新されたことを示す。
【0045】データエントリ26は、そのキャッシュラ
インのメモリデータを保持する。通常、一つのキャッシ
ュラインは、アドレスタグ25が指定するアドレス範囲
を構成する複数のデータエントリを備え、それぞれのデ
ータエントリは、ストア命令等による書き込みの最小の
データ単位である。図2においては、複数のデータエン
トリ26のそれぞれをデータエントリ26a、データエ
ントリ26b、データエントリ26c、データエントリ
26d、…、と表記して区別している。
【0046】ストア・フラグ27は、対応するデータエ
ントリに、自プロセッサがストア命令などで書き込みを
行ったことを示す。図2においては、ストア・フラグ2
7aはデータエントリ26aに、ストア・フラグ27b
はデータエントリ26bに、ストア・フラグ27cはデ
ータエントリ26cに、ストア・フラグ27dはデータ
エントリ26dに、それぞれ対応する。ストア・フラグ
は自プロセッサが書き込みを行った際にセットし、スレ
ッドの実行が終了した際にリセットされる。
【0047】投機ロード・フラグ28は、対応するデー
タエントリに、自プロセッサが投機的な読み出しを行っ
たことを示す。図2においては、投機ロード・フラグ2
8aはデータエントリ26aに、投機ロード・フラグ2
8bはデータエントリ26bに、投機ロード・フラグ2
8cはデータエントリ26cに、投機ロード・フラグ2
8dはデータエントリ26dに、それぞれ対応する。投
機ロード・フラグは投機的な読み出しを行い、かつ読み
出し対象のデータに対して先に書き込みを行っていな
い、すなわち対応するストア・フラグ27がセットされ
ていないならばセットされる。一方、スレッドの投機実
行が確定した際にはリセットされる。
【0048】図2に示したキャッシュラインの実施例で
は、書き込みの最小データ単位に対応するデータエント
リ26a、26b、…、のそれぞれに固有のストア・フ
ラグ27a、27b、…、及び投機ロード・フラグ28
a、28b、…、を備えたが、複数のデータエントリに
対して単一のストア・フラグまたは投機ロード・フラグ
を代表させてもよい。例えば、図3は4つのデータエン
トリ26a、26b、26c、26d、に対して、一つ
の投機ロード・フラグ28aを備えたキャッシュライン
の第2の実施形態である。データエントリ26、ストア
・フラグ27、投機ロード・フラグ28以外の構成要素
は省略している。投機ロード・フラグ28aは、4つの
データエントリ26a、26b、26c、26d、のい
ずれかに投機的な読み出しを行ったことを示す。この場
合、データエントリそれぞれに固有の投機ロード・フラ
グを備えるのに比べて、キャッシュメモリの実装に必要
なハードウェア量が小さくなるという効果がある。
【0049】図4は、キャッシュ制御部12の第1の実
施例の詳細を示すブロック図である。図4を参照する
と、キャッシュ制御部12は少なくとも、バス要求制御
部(符号30)、キャッシュ要求制御部(符号31)、
バス要求出力バッファ(符号32)、バス要求入力バッ
ファ(符号33)、から構成される。
【0050】バス要求制御部30は、キャッシュメモリ
11からのキャッシュミス通知、ストア通知やその対象
アドレス、ストア・データ、キャッシュライン状態等を
受け取り、それらを参照してバス要求を生成し、バス要
求出力バッファ32に登録する。ここで、キャッシュラ
イン状態は、図2に示したキャッシュラインを構成す
る、有効フラグ20、変更フラグ21、共有フラグ2
2、投機フラグ23、更新フラグ24、ストア・フラグ
27、を含み、キャッシュミスした場合は、そのミスに
よるリフィル処理対象のキャッシュラインの状態、キャ
ッシュヒットした場合は、そのヒットしたキャッシュラ
インの状態を示す。
【0051】バス要求出力バッファ32は、バス要求制
御部30によって生成されたバス要求を格納し、順次バ
スを通じて他のプロセッサやメインメモリに出力する。
より詳細には、バス要求はコマンド、アドレス、キャッ
シュライン状態、データ等から構成され、コマンド、ア
ドレスは要求バス13、キャッシュライン状態は応答バ
ス14、データはデータバス15に出力する。バス要求
出力バッファ32は同時に、要求バス13に出力したコ
マンド、アドレス、及び応答バス14に出力したキャッ
シュライン状態を、バス要求入力バッファ33にも転送
する。本実施形態は、バス要求を出力する際には、キャ
ッシュライン状態に含まれる共有フラグ22を参照し
て、データを共有しているプロセッサにのみ宛てて、バ
ス要求を出力することを特徴とする。すなわち、データ
を共有していないプロセッサでは、該バス要求によるキ
ャッシュメモリへのアクセスが発生せず、キャッシュメ
モリのアクセス競合による性能低下が小さく、またキャ
ッシュメモリにおいて消費される電力を削減することが
できるという効果がある。
【0052】バス要求入力バッファ33は、他プロセッ
サやメインメモリから要求バス13を通じて伝達される
バス要求のコマンド、アドレスや、応答バス14を通じ
て伝達されるキャッシュライン状態や、データバス15
を通じて伝達されるデータなどを格納する。バス要求入
力バッファ33はまた、バス要求出力バッファ32から
要求バス13に出力されたバス要求のコマンド、アドレ
ス、及び応答バス14に出力されたキャッシュライン状
態を格納し、さらに、バス要求に応じて他プロセッサが
応答バス14に出力するキャッシュライン状態を、その
到着を待って格納する。同時にバス要求入力バッファ3
3は、格納しているバスから入力したバス要求、より詳
細には、コマンド、アドレス、キャッシュライン状態、
及びデータ、をキャッシュ要求制御部31に順次出力し
ていく。
【0053】キャッシュ要求制御部31は、バス要求入
力バッファ33が保持し、順次入力されるバス要求を順
次解釈する。まず、バスから入力された他プロセッサか
らのバス要求に対しては、キャッシュメモリ11にアク
セスして、バス要求の対象のキャッシュラインを保持し
ているか否かを判定し、保持していなければその旨が、
保持していればそのキャッシュラインの状態が、バス要
求制御部30及びバス要求出力バッファ32を通じて、
応答バス14に出力される。同時に、その自身のキャッ
シュメモリのキャッシュライン状態は、バス要求入力バ
ッファ33の該当エントリに格納される。バス要求入力
バッファ33において、自身のキャッシュライン状態も
含めて、他プロセッサからのキャッシュライン状態の応
答もすべて到着したら、再び、キャッシュ要求制御部3
1において、バス要求のコマンドと、自身のキャッシュ
ライン状態、及び他プロセッサのキャッシュライン状態
をすべて参照して、キャッシュラインの次の状態を決定
し、対象のキャッシュラインの更新を行う。
【0054】一方、自身が出力したバス要求に対して
は、そのコマンド、アドレス、及びキャッシュライン状
態が、バス要求入力バッファ33に格納されるので、バ
ス要求入力バッファ33において、他プロセッサからの
キャッシュライン状態の応答もすべて到着したら、キャ
ッシュ要求制御部31において、バス要求のコマンド
と、自身のキャッシュライン状態、及び他プロセッサの
キャッシュライン状態をすべて参照して、キャッシュラ
インの次の状態を決定し、対象のキャッシュラインの更
新を行う。
【0055】次にフローチャートを参照しつつ、キャッ
シュメモリ11及びキャッシュ制御部12の動作の詳細
を説明する。図5は、ロード命令が発行された場合のキ
ャッシュメモリ11及びキャッシュ制御部12の動作を
示すフローチャートである。まず、プロセッサ10でロ
ード命令が発行されると(図5のステップ200)、キ
ャッシュメモリ11がアクセスされ、キャッシュメモリ
にヒットするか、ミスするかが判定される(図5のステ
ップ201)。キャッシュメモリにヒットした場合、ヒ
ットしたキャッシュラインが読み出され、キャッシュラ
イン内の更新フラグ24が参照される(図5のステップ
202)。更新フラグ24がセットされていない、すな
わち、更新有効フラグ24aがセットされていないか、
更新対象フラグ24bのいずれもがセットされていない
場合、そのキャッシュラインは子スレッドにより更新さ
れておらず、そのキャッシュラインは有効であると判断
される。その場合、キャッシュメモリ11からプロセッ
サ10にロード対象のデータが転送される(図5のステ
ップ206)。次に、該ロード命令がスレッド間の正依
存関係に関して投機的な実行である場合、ロード対象の
データを格納したデータエントリ26に対応する投機ロ
ード・フラグ28をセットして(図5のステップ20
7)、ロード命令の実行は終了する。発行されたロード
命令が投機的であるか、確定的であるかはプロセッサ1
0からキャッシュメモリ11に通知される。
【0056】一方、更新フラグ24の参照(図5のステ
ップ202)で、更新フラグ24がセットされていた、
すなわち、更新有効フラグ24aがセットされていて、
かつ、更新対象フラグ24bのいずれかがセットされて
いる場合、そのキャッシュラインは子スレッドにより更
新されていて、そのキャッシュラインは既に無効である
可能性があると判断される。ここで確定的に無効である
と判定できないのは、子スレッドによる更新が投機的で
あって、かつ取り消されている場合があり、実際には有
効である可能性もあるからである。確定的な判断は、子
スレッドを実行したプロセッサのキャッシュメモリのキ
ャッシュライン状態を参照する必要がある。そこで、バ
ス要求制御部30は他のプロセッサのキャッシュメモリ
を参照するリード要求を生成し、バス要求出力バッファ
32を通じて、要求バス13にリード要求を発行する
(図5のステップ203)。同時にそのリード要求、リ
ード要求の対象アドレス、及び自身のキャッシュライン
状態は、バス要求入力バッファ33に格納され、他のプ
ロセッサのキャッシュ制御部から、リード要求に対する
応答である、キャッシュライン状態が応答バス14を通
じて到着するのを待機する(図5のステップ204)。
【0057】リード要求に対して、すべてのプロセッサ
からの応答が到着すると、前記した自身のキャッシュラ
インが実際に無効であるか、それとも有効であるかを判
定する(図5のステップ205)。より詳細には、セッ
トされている更新対象フラグ24bに対応するプロセッ
サのキャッシュライン状態を参照し、ヒットしていた場
合は、実際にそのプロセッサに更新されていたと判断す
る。一方、セットされているすべての更新対象フラグ2
4bに対して、いずれのプロセッサでもミスしていた場
合、その更新は投機実行の失敗により取り消されてい
て、実際には更新されていないと判断する。
【0058】実際には更新されていなかった場合、該キ
ャッシュラインは有効であるので、ただちに、読み出し
処理を実行することができる。この場合、リフィル処理
は必要なく、先に発行したリード要求を受信したプロセ
ッサでは、そのリード要求に対する処理は行われない。
読み出し処理では、キャッシュメモリ11からプロセッ
サ10にロード対象のデータを転送する(図5のステッ
プ206)。次に、キャッシュライン状態を更新して、
ロード命令の実行を終了する(図5のステップ20
7)。具体的には、まず、更新フラグ24をリセット
し、次に、該ロード命令が投機的な実行である場合、ロ
ード対象のデータを格納したデータエントリ26に対応
する投機ロード・フラグ28をセットする。
【0059】一方、実際に更新されていた場合、該キャ
ッシュラインは無効であるので、他のプロセッサのキャ
ッシュメモリ、またはメインメモリから、有効なデータ
をリフィルする必要がある。まず、リフィル処理の前
に、該キャッシュラインのデータをライトバックする必
要性を判断する(図5のステップ211)。該キャッシ
ュラインは、自プロセッサが現在実行しているスレッド
に対しては無効であるが、親スレッドに対しては有効で
ある場合がある。より詳細には、該キャッシュラインを
更新したプロセッサのキャッシュメモリに、確定したキ
ャッシュライン、すわなち投機フラグ23がセットされ
ていないキャッシュラインが存在しなければ、該キャッ
シュラインは唯一の確定したデータを保持しているた
め、ライトバックが必要であると判断する。一方、該キ
ャッシュラインの更新元のプロセッサのキャッシュライ
ンに、確定したキャッシュラインが存在すれば、ライト
バックは必要ないと判断する。
【0060】ライトバックが必要であると判断した場
合、バス要求制御部30はライトバック要求を生成し、
それをバス要求出力バッファ32を通じて、要求バス1
3に出力し(図5のステップ216)、次にデータバス
15にライトバック対象のデータを出力する(図5のス
テップ217)。次に、先に発行しているリード要求に
対して、他のキャッシュメモリまたはメインメモリから
データバス15を通じて伝達されるリフィル・データの
到着を待つ(図5のステップ212)。次に、キャッシ
ュ要求制御部31は到着したリフィル・データをキャッ
シュメモリ11へリフィルを行い(図5のステップ21
3)、次に、キャッシュメモリ11からプロセッサ10
にロード対象のデータを転送し(図5のステップ20
6)、キャッシュライン状態を更新して、ロード命令の
実行を終了する(図5のステップ207)。
【0061】一方、図5のステップ211でライトバッ
クが必要でないと判断した場合、そのままリフィル・デ
ータの到着を待ち(図5のステップ212)、キャッシ
ュメモリ11へのリフィルを行う(図5のステップ21
3)。次に、キャッシュメモリ11からプロセッサ10
にロード対象のデータを転送し(図5のステップ20
6)、キャッシュライン状態を更新して、ロード命令の
実行を終了する(図5のステップ207)。
【0062】以上、図5のステップ201において、ロ
ード命令がキャッシュメモリにヒットした場合の動作に
ついて説明した。一方、ロード命令がキャッシュメモリ
にミスした場合は、スレッド実行が確定的か投機的かで
動作が異なる(図5のステップ208)。スレッド実行
が投機的で、すなわち発行されたロード命令は投機的で
ある場合、キャッシュメモリ11にリフィル可能か否か
を判断する(図5のステップ214)。キャッシュメモ
リ11のリフィル先の候補のエントリに空きがなく、か
つ、それらエントリに格納されているすべてのキャッシ
ュラインの投機フラグ23及びストア・フラグ27のい
ずれかがセットされているか、あるいは投機ロード・フ
ラグ28のいずれかがセットされている場合、リフィル
することができない。この場合、スレッドが確定するま
で待機した後に(図5のステップ215)、図5のステ
ップ209よりリフィル処理を開始する。
【0063】一方、キャッシュメモリ11のリフィル先
の候補のエントリに少なくとも1つの空きがあれば、リ
フィルは可能である。また、空きが無い場合でも、それ
らリフィル先候補のエントリに格納されているいずれか
のキャッシュラインの投機フラグ23かストア・フラグ
27のいずれかがセットされてなく、かつ投機ロード・
フラグ28のいずれもセットされていない場合、そのエ
ントリにリフィルすることが可能である。この場合、図
5のステップ209よりリフィル処理を開始する。
【0064】一方、スレッド実行が確定的で、すなわち
発行されたロード命令は確定的である場合(図5のステ
ップ208、Yes)、常にリフィルは可能であるの
で、図5のステップ209よりリフィル処理を開始す
る。具体的には、まず、要求バス13にリード要求を出
力し(図5のステップ209)、それに対する他プロセ
ッサからの応答を待つ(図5のステップ210)。
【0065】次に、ライトバックが必要か否かを判定す
る(図5のステップ211)。リフィル先のエントリに
ストア命令により変更されたキャッシュライン、すわな
ち変更フラグ21がセットされているキャッシュライン
が存在すれば、ライトバックが必要である。その場合、
ライトバック要求を要求バス13に出力し(図5のステ
ップ216)、次にデータバス15にライトバック対象
のデータを出力する(図5のステップ217)。次に、
リフィル・データの到着を待ち(図5のステップ21
2)、キャッシュメモリ11へのリフィルを行う(図5
のステップ213)。次に、キャッシュメモリ11から
プロセッサ10にロード対象のデータを転送し(図5の
ステップ206)、キャッシュライン状態を更新して、
ロード命令の実行を終了する(図5のステップ20
7)。
【0066】ライトバックが必要でない場合は、そのま
まリフィル・データの到着を待ち(図5のステップ21
2)、キャッシュメモリ11へのリフィルを行う(図5
のステップ213)。次に、キャッシュメモリ11から
プロセッサ10にロード対象のデータを転送し(図5の
ステップ206)、キャッシュライン状態を更新して、
ロード命令の実行を終了する(図5のステップ20
7)。
【0067】以上、ロード命令が発行された場合のキャ
ッシュメモリ11及びキャッシュ制御部12の動作を説
明した。次に、図6を参照して、ストア命令が発行され
た場合のキャッシュメモリ11及びキャッシュ制御部1
2の動作を説明する。
【0068】まず、プロセッサ10でストア命令が発行
されると(図6のステップ220)、キャッシュメモリ
11がアクセスされ、キャッシュメモリにヒットする
か、ミスするかが判定される(図6のステップ22
1)。キャッシュメモリにヒットした場合、ヒットした
キャッシュラインが読み出され、キャッシュライン内の
更新フラグ24が参照される(図6のステップ22
2)。更新フラグ24がセットされていない、すなわ
ち、更新有効フラグ24aがセットされていないか、更
新対象フラグ24bのいずれもがセットされていない場
合、そのキャッシュラインは子スレッドにより更新され
ておらず、そのキャッシュラインは有効であると判断さ
れる。その場合、バス要求制御部30は、ライト要求を
生成し、バス要求出力バッファ32を通じて、要求バス
13にライト要求を出力する(図6のステップ22
6)。ライト要求は、ストア命令を実行したこと、及び
そのストア・データを他のプロセッサやキャッシュメモ
リに通知し、それに対する処理を要求するバス要求であ
る。
【0069】次に、該ストア命令による書き込みの前
に、以前のデータのメインメモリへのライトバックが必
要か否かを判定する(図6のステップ227)。該スト
ア命令がヒットしたキャッシュラインが確定的である、
すなわち投機フラグ23がセットされてなく、かつ該ス
トア命令が投機的な実行である場合、投機的なデータを
書き込む前に、確定的なデータをメインメモリへライト
バックを行う。具体的には、要求バス13にライトバッ
ク要求を出力し(図6のステップ230)、続いてデー
タバス15を通じてライトバックするデータを転送する
(図6のステップ231)。その後、該ストア命令が書
き込みの対象とするキャッシュラインのデータエントリ
26に、ストア・データの書き込みを行う(図6のステ
ップ228)。次に、キャッシュライン状態を更新し
て、ストア命令の実行を終了する(図6のステップ22
9)。具体的には、まず、変更フラグ21、及びストア
対象のデータを格納したデータエントリに対応するスト
ア・フラグ27をセットする。さらに、該ストア命令が
投機的な実行である場合、投機フラグ23の自プロセッ
サに対応するフラグ部分をセットする。
【0070】一方、ライトバックが必要なかった場合
(図6のステップ227、No)、そのまま該ストア命
令が書き込みの対象とするキャッシュラインのデータエ
ントリに、ストア・データの書き込みを行う(図6のス
テップ228)。次に、キャッシュライン状態を更新し
て、ストア命令の実行を終了する(図6のステップ22
9)。
【0071】一方、更新フラグの参照(図6のステップ
222)で、更新フラグ24がセットされていた、すな
わち、更新有効フラグ24aがセットされていて、か
つ、更新対象フラグ24bのいずれかがセットされてい
る場合、そのキャッシュラインは子スレッドにより更新
されていて、そのキャッシュラインは既に無効である可
能性があると判断される。その場合、バス要求制御部3
0はリード・ライト要求を生成し、要求バス13にリー
ド・ライト要求を発行する(図6のステップ223)。
リード・ライト要求は、同時に要求バスに出力する対象
のアドレスに対して、リード要求に対する処理の後、ラ
イト要求に対する処理を要求するバス要求である。
【0072】次に、他のキャッシュ制御部からリード・
ライト要求に対する応答の到着を待機し(図6のステッ
プ224)、その応答を参照して、該キャッシュライン
が子スレッドにより実際に更新されているか否かを判定
する(図6のステップ225)。実際には更新されてい
なかった場合、該キャッシュラインは有効であるので、
ただちにライト処理を開始することができる。この場
合、リフィル処理は必要なく、先に発行したリード・ラ
イト要求を受信したプロセッサでは、そのリード要求部
分に対する処理は行われない。ライト処理では、まず、
ライトバックが必要か否かの判断を行う(図6のステッ
プ227)。ライトバックが必要な場合、ライトバック
要求の発行(図6のステップ230)及び、ライトバッ
ク・データの転送(図6のステップ231)を行う。次
に、該ストア命令が書き込みの対象とするキャッシュラ
インのデータエントリに、ストア・データの書き込みを
行う(図6のステップ228)。次に、キャッシュライ
ン状態を更新して、ストア命令の実行を終了する(図6
のステップ229)。
【0073】一方、図6のステップ225における子ス
レッドによる更新の有無の判断で、実際に更新されてい
た場合、該キャッシュラインは無効であるので、ロード
命令の場合と同様に、他のプロセッサのキャッシュメモ
リ、またはメインメモリから、有効なデータをリフィル
する必要がある。まず、リフィル処理の前に、該キャッ
シュラインのデータをライトバックする必要性を判断す
る(図6のステップ235)。該キャッシュラインは、
自プロセッサが現在実行するスレッドに対しては無効で
あるが、親スレッドに対しては有効である場合がある。
より詳細には、該キャッシュラインを更新したプロセッ
サのキャッシュラインに、確定したキャッシュライン、
すわなち投機フラグ23がセットされていないキャッシ
ュラインが存在しなければ、該キャッシュラインは唯一
の確定したデータを保持しているため、ライトバックが
必要であると判断する。一方、該キャッシュラインの更
新元のプロセッサのキャッシュラインに、確定したキャ
ッシュラインが存在すれば、ライトバックは必要ないと
判断する。
【0074】ライトバックが必要であると判断した場合
は、ライトバック要求の発行(図6のステップ240)
及び、ライトバック・データの転送(図6のステップ2
41)を行う。次に、先に発行しているリード・ライト
要求に対して、他のキャッシュメモリまたはメインメモ
リからデータバス15を通じて伝達されるリフィル・デ
ータの到着を待つ(図6のステップ236)。次に、キ
ャッシュ要求制御部31は到着したリフィル・データを
キャッシュメモリ11へリフィルを行う(図6のステッ
プ237)。次に、該ストア命令が書き込みの対象とす
るキャッシュラインのデータエントリに、ストア・デー
タの書き込みを行う(図6のステップ228)。次に、
キャッシュライン状態を更新して、ストア命令の実行を
終了する(図6のステップ229)。
【0075】一方、ライトバックが必要でないと判断し
た場合は、そのまま、リフィル・データの到着を待ち
(図6のステップ236)、キャッシュメモリ11へリ
フィルを行う(図6のステップ237)。次に、該スト
ア命令のストア・データの書き込みを行い(図6のステ
ップ228)、キャッシュライン状態を更新して、スト
ア命令の実行を終了する(図6のステップ229)。
【0076】以上、図6のステップ221において、ス
トア命令がキャッシュメモリにヒットした場合の動作に
ついて説明した。一方、ストア命令がキャッシュメモリ
にミスした場合は、ロード命令の場合と同様に、スレッ
ド実行が確定的か投機的かで動作が異なる(図6のステ
ップ232)。スレッド実行が投機的で、すなわち発行
されたストア命令は投機的である場合、キャッシュメモ
リ11にリフィル可能か否かを判断する(図6のステッ
プ238)。キャッシュメモリ11のリフィル先の候補
のエントリに空きがなく、かつ、それらエントリに格納
されているすべてのキャッシュラインの投機フラグ23
及びストア・フラグ27のいずれかがセットされている
か、あるいは投機ロード・フラグ28のいずれかがセッ
トされている場合、リフィルすることができない。この
場合、スレッドが確定するまで待機した後に(図6のス
テップ239)、リフィル処理を開始する。
【0077】一方、キャッシュメモリ11のリフィル先
の候補のエントリに少なくとも1つの空きがあれば、リ
フィルは可能である。また、空きが無い場合でも、それ
らリフィル先候補のエントリに格納されているいずれか
のキャッシュラインの投機フラグ23かストア・フラグ
27のいずれかがセットされてなく、かつ投機ロード・
フラグ28のいずれもセットされていない場合、そのエ
ントリにリフィルすることが可能である。この場合、そ
のままリフィル処理を開始する。
【0078】一方、スレッド実行が確定的で、すなわち
発行されたストア命令は確定的である場合(図6のステ
ップ232、Yes)、常にリフィルは可能であるの
で、そのままリフィル処理を開始する。具体的には、ま
ず、要求バス13にリード・ライト要求を出力し(図6
のステップ233)、それに対する他プロセッサからの
応答を待つ(図6のステップ234)。
【0079】次に、ライトバックが必要か否かを判定す
る(図6のステップ235)。リフィル先のエントリに
変更されたキャッシュライン、すわなち変更フラグ21
がセットされているキャッシュラインが存在すれば、ラ
イトバックが必要であると判断する。ライトバックが必
要であると判断した場合は、ライトバック要求の発行
(図6のステップ240)及び、ライトバック・データ
の転送(図6のステップ241)を行った後、リフィル
処理を続行する。一方、ライトバックが必要でないと判
断した場合は、そのままリフィル処理を続行する。リフ
ィル処理は、先に発行しているリード・ライト要求に対
して、他のキャッシュメモリまたはメインメモリからデ
ータバス15を通じて伝達されるリフィル・データの到
着を待つ(図6のステップ236)。次に、キャッシュ
要求制御部31は到着したリフィル・データのキャッシ
ュメモリ11へのリフィルを行う(図6のステップ23
7)。次に、該ストア命令が書き込みの対象とするキャ
ッシュラインのデータエントリに、ストア・データの書
き込みを行う(図6のステップ228)。次に、キャッ
シュライン状態を更新して、ストア命令の実行を終了す
る(図6のステップ229)。
【0080】以上、ストア命令が発行された場合のキャ
ッシュメモリ11及びキャッシュ制御部12の動作を説
明した。次に、図7を参照して、他のプロセッサからバ
スを通じてリード要求を受信した場合、及びリード・ラ
イト要求を受信した場合のリード要求部分に対する、キ
ャッシュメモリ11及びキャッシュ制御部12の動作を
説明する。リード・ライト要求を受信した場合は、リー
ド要求に対する処理を行った後、後述するライト要求に
対する処理を行う。以下の説明ではリード要求またはリ
ード・ライト要求のリード要求部分を、単にリード要求
と表記する。
【0081】まず、他プロセッサのキャッシュ制御部1
2からのリード要求を、要求バス13を通じて受信する
と、バス要求入力バッファ33は、該リード要求のコマ
ンド、アドレス、リード要求を発行したプロセッサのキ
ャッシュライン状態などを格納し、キャッシュ要求制御
部31に通知する(図7のステップ245)。キャッシ
ュ要求制御部31はリード要求を解釈すると、キャッシ
ュメモリ11にアクセスし、リード要求の対象アドレス
がキャッシュメモリにヒットするかミスするかを判定す
る(図7のステップ246)。
【0082】リード要求がキャッシュメモリ11にミス
した場合、その旨を、バス要求制御部30、バス要求出
力バッファ32、及び応答バス14を通じて、他プロセ
ッサに通知し、リード要求に対する処理を終了する(図
7のステップ247)。
【0083】一方、リード要求がキャッシュメモリ11
にヒットした場合、ヒットしたキャッシュラインの状態
を、バス要求制御部30、バス要求出力バッファ32、
及び応答バス14を通じて、その旨を他プロセッサに通
知し(図7のステップ248)、他プロセッサからの応
答である他のキャッシュメモリのキャッシュライン状態
が到着するのを待機する(図7のステップ249)。次
に、ヒットした自身のキャッシュライン状態の更新フラ
グ24を参照して、更新フラグ24がセットされている
か否かを判定する(図7のステップ250)。
【0084】更新フラグ24がセットされていない、す
なわち、更新有効フラグ24aがセットされていない
か、更新対象フラグ24bのいずれもがセットされてい
ない場合、そのキャッシュラインは子スレッドにより更
新されておらず、そのキャッシュラインは有効であると
判断される。その場合、自身のキャッシュラインのデー
タをリフィル・データとして供給するか否かの判定を行
う(図7のステップ256)。
【0085】一方、更新フラグ24がセットされてい
た、すなわち、更新有効フラグ24aがセットされてい
て、かつ、更新対象フラグ24bのいずれかがセットさ
れている場合、そのキャッシュラインは子スレッドによ
り更新されていて、そのキャッシュラインは既に無効で
ある可能性があると判断される。その場合、他プロセッ
サからのキャッシュライン状態の応答を参照して、前記
した自身のキャッシュラインが実際に無効であるか、そ
れとも有効であるかを判定する(図7のステップ25
1)。より詳細には、セットされている更新対象フラグ
24bに対応するプロセッサのキャッシュライン状態を
参照し、ヒットしていた場合は、実際にそのプロセッサ
に更新されていたと判断する。一方、セットされている
すべての更新対象フラグ24bに対して、いずれのプロ
セッサでもミスしていた場合、その更新は投機実行の失
敗に取り消されていて、実際には更新されていないと判
断する。
【0086】子スレッドにより、実際には更新されてい
なかった場合、自身のキャッシュラインのデータをリフ
ィル・データとして供給するか否かの判定を行う(図7
のステップ256)。判定は、まず、リード要求を発行
したプロセッサが、実際にリフィル処理を必要としてい
るか否かを判断する。これは、リード要求を発行したが
(図5の203、または図6の223)、実際にはキャ
ッシュラインが有効でリフィル処理が必要ない場合(図
5の205、No、または図6の225、No)がある
からである。リード要求を受信したプロセッサでも、す
べてのキャッシュメモリのキャッシュライン状態が参照
できるので、リード要求を発行したプロセッサと同様の
判断が可能である。
【0087】リード要求を発行したプロセッサで、実際
にリフィル処理を必要としていない場合は、リフィル・
データの供給は行わない。一方、リード要求を発行した
プロセッサで、実際にリフィル処理を必要としている場
合、次に、プログラム順序の上で、自プロセッサが実行
するスレッドと、リード要求を発行したプロセッサが実
行するスレッドの間に位置するスレッドを実行するプロ
セッサのキャッシュライン状態を参照する。リフィル・
データを供給するか否かは、それらの間のスレッドのキ
ャッシュライン状態と自身のキャッシュライン状態によ
り決定される。なお、スレッドの順序関係は、自身のプ
ロセッサ10から各キャッシュ制御部12へ通知され
る。
【0088】まず、前記間のスレッドのキャッシュライ
ンの中に、投機的な(投機フラグ23がセットされた)
キャッシュラインが存在する場合、自身のキャッシュラ
インのデータはリフィル・データとして無効であり、自
プロセッサはリフィル・データの供給は行わない。
【0089】次に、前記間のスレッドのキャッシュライ
ンの中に、投機的なキャッシュラインは存在しないが、
確定的なキャッシュラインは存在し、かつ自身のキャッ
シュラインも確定的である場合、自プロセッサはリフィ
ル・データの供給は行わない。
【0090】次に、間のスレッドのキャッシュラインの
中に、投機的なキャッシュラインは存在しないが、確定
的なキャッシュラインは存在し、かつ自身のキャッシュ
ラインは投機的である場合、自プロセッサは自身のキャ
ッシュラインからリフィル・データの供給を行う。
【0091】次に、間のスレッドを実行するプロセッサ
ではすべてキャッシュメモリにミスし、有効なキャッシ
ュラインが存在しない場合、自プロセッサは自身のキャ
ッシュラインからリフィル・データの供給を行う。
【0092】リフィル・データの供給を行わない場合、
キャッシュライン状態の更新、具体的には更新フラグ2
4のリセットを行い、リード要求に対する処理を終了す
る(図7のステップ257)。一方、リフィル・データ
の供給を行う場合、データバス15を通じて、自身のキ
ャッシュラインが保持しているデータを転送し(図7の
ステップ258)、次に、キャッシュライン状態の更新
を行い、リード要求に対する処理を終了する(図7のス
テップ257)。
【0093】一方、子スレッドによる更新の有無判定で
(図7のステップ251)、実際に更新されていた場
合、該キャッシュラインは既に無効であるので、キャッ
シュラインの無効化を行う。まず、無効化処理の前に、
該キャッシュラインのデータをライトバックする必要性
を判断する(図7のステップ252)。該キャッシュラ
インは、自プロセッサが現在実行するスレッドに対して
は無効であるが、親スレッドに対しては有効である場合
がある。より詳細には、該キャッシュラインの更新元の
プロセッサのキャッシュラインに、確定したキャッシュ
ライン、すわなち投機フラグ23がセットされていない
キャッシュラインが存在しなければ、該キャッシュライ
ンは唯一の確定したデータを保持しているため、ライト
バックが必要であると判断する。一方、該キャッシュラ
インの更新元のプロセッサのキャッシュラインに、確定
したキャッシュラインが存在すれば、ライトバックは必
要ないと判断する。
【0094】ライトバックが必要であると判断した場
合、要求バス13にライトバック要求を出力し(図7の
ステップ254)、次にデータバス15にライトバック
対象のデータを出力する(図7のステップ255)。そ
の後、キャッシュラインの有効フラグ20をリセットし
てキャッシュラインの無効化を行い、リード要求に対す
る処理を終了する(図7のステップ253)。一方、ラ
イトバックが必要でないと判断した場合は、そのままキ
ャッシュラインの有効フラグ20をリセットしてキャッ
シュラインの無効化を行い、リード要求に対する処理を
終了する(図7のステップ253)。
【0095】以上、他のプロセッサからバスを通じてリ
ード要求を受信した場合、及びリード・ライト要求を受
信した場合のリード要求部分に対する、キャッシュメモ
リ11及びキャッシュ制御部12の動作を説明した。次
に、図8を参照して、他のプロセッサからバスを通じて
ライト要求を受信した場合、及びリード・ライト要求を
受信した場合のライト要求部分に対する、キャッシュメ
モリ11及びキャッシュ制御部12の動作を説明する。
リード・ライト要求を受信した場合は、上述したリード
要求に対する処理を行った後、ライト要求に対する処理
を行う。以下の説明では、ライト要求、及びリード・ラ
イト要求におけるライト要求部分を、単にライト要求と
表記する。
【0096】まず、他プロセッサのキャッシュ制御部1
2からのライト要求を、要求バス13を通じて受信する
と、バス要求入力バッファ33は、該ライト要求のコマ
ンド、アドレス、ライト要求を発行したプロセッサのキ
ャッシュライン状態、ライト・データなどを格納し、キ
ャッシュ要求制御部31に通知する(図8のステップ2
60)。キャッシュ要求制御部31はライト要求を解釈
すると、キャッシュメモリ11にアクセスし、ライト要
求の対象アドレスがキャッシュメモリにヒットするかミ
スするかを判定する(図8のステップ261)。
【0097】ライト要求がキャッシュメモリ11にミス
した場合、その旨を、バス要求制御部30、バス要求出
力バッファ32、及び応答バス14を通じて、他プロセ
ッサに通知し、ライト要求に対する処理を終了する(図
8のステップ262)。
【0098】一方、ライト要求がキャッシュメモリ11
にヒットした場合、ヒットしたキャッシュラインの状態
を、バス要求制御部30、バス要求出力バッファ32、
及び応答バス14を通じて、その旨を他プロセッサに通
知し(図8のステップ263)、他プロセッサからの応
答である他のキャッシュメモリのキャッシュライン状態
が到着するのを待機する(図8のステップ264)。次
に、ヒットした自身のキャッシュライン状態の更新フラ
グ24を参照して、更新フラグ24がセットされている
か否かを判定する(図8のステップ265)。
【0099】更新フラグ24がセットされていない、す
なわち、更新有効フラグ24aがセットされていない
か、更新対象フラグ24bのいずれもがセットされてい
ない場合、そのキャッシュラインは子スレッドにより更
新されておらず、そのキャッシュラインは有効であると
判断される。その場合、自身のキャッシュラインへのラ
イト処理を開始する(図8のステップ265、No)。
【0100】一方、更新フラグ24がセットされてい
た、すなわち、更新有効フラグ24aがセットされてい
て、かつ、更新対象フラグ24bのいずれかがセットさ
れている場合、そのキャッシュラインは子スレッドによ
り更新されていて、そのキャッシュラインは既に無効で
ある可能性があると判断される。その場合、他プロセッ
サからのキャッシュライン状態の応答を参照して、前記
した自身のキャッシュラインが実際に無効であるか、そ
れとも有効であるかを判定する(図8のステップ26
6)。より詳細には、セットされている更新対象フラグ
24bに対応するプロセッサのキャッシュライン状態を
参照し、ヒットしていた場合は、実際にそのプロセッサ
に更新されていたと判断する。一方、セットされている
すべての更新対象フラグ24bに対して、いずれのプロ
セッサでもミスしていた場合、その更新は投機実行の失
敗に取り消されていて、実際には更新されていないと判
断する。
【0101】子スレッドにより、実際には更新されてい
なかった場合、自身のキャッシュラインへのライト処理
を開始する(図8のステップ266、No)。ライト処
理はまず、ライト要求が親スレッドからの要求か否かを
判断する(図8のステップ271)。スレッドの順序関
係は、自身のプロセッサ10から各キャッシュ制御部1
2へ通知される。子スレッドからのライト要求であった
場合、それはプログラム順序の上で後に位置する書き込
みなので、実際にデータの更新は行わず、子スレッドに
よって更新されたことを示す、キャッシュラインの更新
フラグ24のうち、ライト要求を発行したプロセッサに
対応する更新対象フラグ24bをセットして、ライト要
求に対する処理を終了する(図8のステップ273)。
【0102】一方、親スレッドからのライト要求であっ
た場合、次に有効なライト・データ部分が存在するか否
かを判定する(図8のステップ272)。判定には、ま
ず、プログラム順序の上で、ライト要求を発行したプロ
セッサが実行するスレッドと自プロセッサが実行するス
レッドの間に位置するスレッドを実行するプロセッサの
キャッシュライン状態を参照する。有効なライト・デー
タ部分が存在するか否かは、それらの間のスレッドのキ
ャッシュライン状態と自身のキャッシュライン状態によ
り決定される。具体的には、ライト・データに対し、間
のスレッドのキャッシュラインの中で、ストア・フラグ
27がセットされているライト・データ部分が存在する
場合、そのライト・データ部分は自スレッドに対して無
効である。逆に、間のスレッドのキャッシュラインのい
ずれにも、ストア・フラグ27がセットされていないラ
イト・データ部分が存在する場合、そのライトデータ部
分は自スレッドに対して有効である。
【0103】有効なライト・データ部分が存在しない場
合、キャッシュライン状態を更新して、ライト要求に対
する処理を終了する(図8のステップ273)。一方、
有効なライト・データ部分が存在する場合、そのライト
・データ部分の書き込み処理を行う。まず、実際に書き
込みを行う前に、以前のデータのメインメモリへのライ
トバックが必要か否かを判定する(図8のステップ27
4)。該ライト要求がヒットしたキャッシュラインが確
定的である、すなわち投機フラグ23がセットされてな
く、かつ該ライト要求が投機的な要求である場合、投機
的なデータを書き込む前に、確定的なデータをメインメ
モリへライトバックを行う。具体的には、要求バス13
にライトバック要求を出力し(図8のステップ27
5)、続いてデータバス15を通じてライトバックする
データを転送する(図8のステップ276)。その後、
実際の書き込み処理を開始する。一方、ライトバックが
必要なかった場合(図8のステップ274、No)、そ
のまま実際の書き込み処理を開始する。ライト要求が投
機的であるか、確定的であるかは、ライト要求の要因の
ストア命令が投機的であるか、確定的であるかにより、
ライト要求と同時に要求を発行したプロセッサから与え
られる。
【0104】実際の書き込み処理では(図8のステップ
277)、前記した有効なライト・データ部分を自身の
キャッシュラインの対応するデータエントリ26へ書き
込みを行う。ただし、自プロセッサが先に書き込みを行
い、ストア・フラグ27がセットされている、データエ
ントリに対しては書き込みを行わない。
【0105】次に、受信したライト要求のストア命令か
ら、自プロセッサが先に実行した正依存関係に対して投
機的なロード命令への、正依存関係の検出を行う(図8
のステップ278)。上記した有効なライト・データ部
分に対応するデータエントリの投機ロード・フラグ28
のいずれかがセットされていた場合、正依存関係が存在
し、投機的なロード命令の実行は失敗であったと判断で
きる。その場合、キャッシュメモリ11はプロセッサ1
0に投機実行失敗を通知し、プロセッサ10はスレッド
実行の取消しを行う(図8のステップ280)。
【0106】一方、上記した有効なライト・データ部分
に対応するデータエントリの投機ロード・フラグ28の
いずれもセットされていない場合、正依存関係は存在せ
ず、投機的なロード命令の実行は成功したと判断でき
る。その場合、キャッシュライン状態を更新して、ライ
ト要求に対する処理を終了する(図8のステップ27
9)。
【0107】一方、子スレッドによる更新の有無判定で
(図8のステップ266)、実際に更新されていた場
合、該キャッシュラインは既に無効であるので、キャッ
シュラインの無効化を行う。まず、無効化処理の前に、
該キャッシュラインのデータをライトバックする必要性
を判断する(図8のステップ267)。該キャッシュラ
インは、自プロセッサが現在実行するスレッドに対して
は無効であるが、親スレッドに対しては有効である場合
がある。より詳細には、該キャッシュラインを更新した
プロセッサのキャッシュラインに、確定したキャッシュ
ライン、すわなち投機フラグ23がセットされていない
キャッシュラインが存在しなければ、該キャッシュライ
ンは唯一の確定したデータを保持しているため、ライト
バックが必要であると判断する。一方、該キャッシュラ
インの更新元のプロセッサのキャッシュラインに、確定
したキャッシュラインが存在すれば、ライトバックは必
要ないと判断する。
【0108】ライトバックが必要であると判断した場
合、要求バス13にライトバック要求を出力し(図8の
ステップ269)、次にデータバス15にライトバック
対象のデータを出力する(図8のステップ270)。そ
の後、キャッシュラインの有効フラグ20をリセットし
てキャッシュラインの無効化を行い、ライト要求に対す
る処理を終了する(図8のステップ268)。一方、ラ
イトバックが必要でないと判断した場合は、そのままキ
ャッシュラインの有効フラグ20をリセットしてキャッ
シュラインの無効化を行い、ライト要求に対する処理を
終了する(図8のステップ268)。
【0109】以上、他のプロセッサからバスを通じてラ
イト要求を受信した場合、及びリード・ライト要求を受
信した場合のライト要求部分に対する、キャッシュメモ
リ11及びキャッシュ制御部12の動作を説明した。上
記したように、本実施形態の特徴の一つに、同じアドレ
スに対するバス要求を結合して同時に発行することがあ
る。さらに更新されて無効である可能性のあるキャッシ
ュラインへの処理を、前記バス要求により暗黙的に実行
することがある。これにより、発行されるバス要求を少
なくすることができ、バスの競合による性能低下が小さ
く、バスで消費される電力が小さいという効果がある。
上記説明では、同じアドレスに対するリード要求及びラ
イト要求を統合してリード・ライト要求としたが、さら
に同じアドレスに対するライトバック要求を統合しても
良い。
【0110】投機的なロード命令の実行に失敗した場合
など、スレッドの実行が取り消された場合には、まず、
キャッシュメモリ11を構成するすべてのキャッシュラ
インのすべての投機ロード・フラグ27をリセットする
ことで、投機実行したロード命令の記録を破棄する。次
に、キャッシュメモリ11を構成するキャッシュライン
のうち、投機的なキャッシュラインの無効化を行うこと
で、投機実行に失敗して無効であるデータの破棄を行
う。具体的には、投機的なキャッシュラインのうち、該
キャッシュラインが投機的である原因のプロセッサで
も、スレッドの実行の取り消しが行われた場合、該キャ
ッシュラインの有効フラグ20をリセットして無効化す
る。本実施形態によれば、キャッシュラインが投機的な
ことを示す投機フラグ23を、複数のビットから構成し
ており、該キャッシュラインを投機的にならしめた原因
のプロセッサを特定することが可能である。このため、
投機フラグを1ビットで構成する従来の方法では、厳密
には無効化が不必要なキャッシュラインも無効化されて
しまうのに対して、本実施形態によれば、厳密に無効化
が必要なキャッシュラインのみが無効化されるため、キ
ャッシュミスが発生する確率が小さく、高速なスレッド
並列処理が可能であるという効果がある。
【0111】一方、投機的なスレッドの実行が確定した
場合には、キャッシュメモリ11を構成するキャッシュ
ラインのうち、投機的なキャッシュラインの確定を行う
ことで、投機実行に成功して確定したデータの有効化を
行う。この処理は、投機フラグ23、ストア・フラグ2
7、及び投機ロード・フラグ28をリセットすることで
実現できる。各プロセッサで実行されているスレッドの
うち、少なくともプログラム順序で最も先に位置するス
レッドは、実行が確定している。それ以外のスレッドの
実行は確定している場合と、投機的である場合がある
が、いずれにしても、先行するすべてのスレッドの実行
が終了し、自スレッドが実行中の最も先行するスレッド
になった時点で、実行が確定する。
【0112】次に、上記した本実施形態による動作の具
体例を図5〜図8、及び図9を参照して説明する。図9
は、4つのプロセッサ#0〜#3を備えるマルチプロセ
ッサシステム上で、ある実行サイクル(サイクル0〜サ
イクル19)における、スレッド実行の状態と、あるキ
ャッシュラインの状態を示した説明図であり、左からサ
イクル番号、スレッド実行状態、キャッシュライン状態
を示している。
【0113】スレッド実行状態(図9(a))を参照す
ると、8つのスレッド、スレッド0〜スレッド7(th
#0〜th#7)が実行されるとする。まず、0サイク
ル目においてプロセッサ#0で実行されているスレッド
0からスレッド1が生成され、プロセッサ#1において
実行が開始される。次に、1サイクル目においてスレッ
ド1からスレッド2が生成され、プロセッサ#2におい
て実行が開始される。次に、2サイクル目においてスレ
ッド2からスレッド3が生成され、プロセッサ#3にお
いて実行が開始される。また、10サイクル目において
スレッド3からスレッド4が生成され、スレッド0の実
行が終了して空いているプロセッサ#0において実行が
開始される。次に、11サイクル目においてスレッド4
からスレッド5が生成され、プロセッサ#1において実
行が開始される。次に、12サイクル目においてスレッ
ド5からスレッド6が生成され、プロセッサ#2におい
て実行が開始される。次に、13サイクル目においてス
レッド6からスレッド7が生成され、プロセッサ#3に
おいて実行が開始される。すなわち、プログラム上の順
序は、スレッド0が最も先であり、その後にスレッド
1、スレッド2、スレッド3、スレッド4、スレッド
5、スレッド6、の順序であり、最も後がスレッド7で
ある。
【0114】これらのスレッド上で、ある同じアドレス
を対象とする5つのストア命令、ストア0〜ストア4
(ST#0〜ST#4)、及び6つのロード命令、ロー
ド0〜ロード5(LD#0〜LD#5)が実行されると
する。これらストア命令及びロード命令が対象とするア
ドレスに対するキャッシュラインの状態をキャッシュラ
イン状態(図9(b))に示す。左からプロセッサ#0
に固有のキャッシュメモリ#0の該キャッシュライン状
態、次に、プロセッサ#1に固有のキャッシュメモリ#
1の該キャッシュライン状態、次に、プロセッサ#2に
固有のキャッシュメモリ#2の該キャッシュライン状
態、次に、プロセッサ#3に固有のキャッシュメモリ#
3の該キャッシュライン状態である。各キャッシュライ
ン状態は、左から投機フラグ23、更新フラグ24、ス
トア・フラグ27、投機ロード・フラグ28、データエ
ントリ26のみを表記し、他のフラグやエントリは省略
している。また、図のキャッシュライン状態において、
実線で表記しているキャッシュラインは有効である(有
効フラグ20がセットされている)ことを示し、破線で
表記しているキャッシュラインは無効である(有効フラ
グ20がセットされていない)ことを示す。
【0115】0サイクル目においては、いずれのキャッ
シュメモリでも、投機フラグ23、更新フラグ24、ス
トア・フラグ27、及び投機ロード・フラグ28はリセ
ットされていて、同一の確定的なデータ“X”を保持し
ているとする。
【0116】再び、スレッド実行状態(図9(a))を
参照すると、まず、3サイクル目においてプロセッサ#
0でストア0が実行される。ストア0の書き込み値が
“0”であるとすると、まず、該アドレスのデータを共
有している他のプロセッサ、プロセッサ#1、#2、#
3に対してライト要求を発行し(図6のステップ22
6)、自身のキャッシュメモリ#0に“0”を書き込む
(図6のステップ228)。どのプロセッサとデータを
共有しているかは、キャッシュラインの共有フラグ22
を参照して判断する。
【0117】一方、ライト要求を受信したプロセッサ#
1、#2、#3では、ライト要求に対する処理が行われ
る。具体的には、いずれのプロセッサにとっても親スレ
ッドからのライト要求で、かつ有効なライト・データな
ので、“0”の書き込みを行う(図8のステップ27
7)。
【0118】次に、4サイクル目において、プロセッサ
#3でストア3が実行される。ここでスレッド3は投機
的なスレッドであり、従って、ストア3は投機的な実行
であるとする。ストア3の書き込み値が“3”であると
すると、まず、データを共有している他のプロセッサ、
プロセッサ#0、#1、#2に対してライト要求を発行
し(図6のステップ226)、自身のキャッシュメモリ
#3に“3”を書き込む(図6のステップ228)。ま
た、投機フラグ23の自プロセッサに対応するフラグ部
分、及びストア・フラグ28をセットする。
【0119】一方、ライト要求を受信したプロセッサ#
0、#1、#2では、ライト要求に対する処理が行われ
る。具体的には、いずれのプロセッサにとっても子スレ
ッドからのライト要求でなので、更新フラグ24の更新
対象フラグ24bのうち、更新の原因のプロセッサであ
るプロセッサ#3に対応するフラグ部分をセットする
(図8のステップ273)。
【0120】次に、5サイクル目において、プロセッサ
#1でストア1が実行される。ここでスレッド1は投機
的なスレッドであり、従って、ストア1は投機的な実行
であるとする。ストア1の書き込み値が“1”であると
すると、まず、データを共有している他のプロセッサ、
プロセッサ#0、#2、#3に対してライト要求を発行
し(図6のステップ226)、自身のキャッシュメモリ
#1に“1”を書き込む(図6のステップ228)。ま
た、投機フラグ23の自プロセッサに対応するフラグ部
分、及びストア・フラグ28をセットする。
【0121】一方、ライト要求を受信したプロセッサ#
0、#2、#3では、ライト要求に対する処理が行われ
る。まず、プロセッサ#0にとっては、子スレッドから
のライト要求なので、更新フラグ24の更新対象フラグ
24bのうち、更新の原因のプロセッサであるプロセッ
サ#1に対応するフラグ部分をセットする(図8のステ
ップ273)。プロセッサ#2にとっては、親スレッド
からのライト要求で、かつ有効なライト・データなの
で、“1”の書き込みを行う(図8のステップ27
7)。また、投機的なデータの書き込みを行ったので、
投機フラグ23のうち、書き込みの原因のプロセッサで
あるプロセッサ#1に対応するフラグ部分をセットする
(図8のステップ280)。一方、プロセッサ#3にと
っては、親スレッドからのライト要求で、かつ有効なラ
イト・データなのであるが、自スレッドが先に投機的な
書き込みを行っている(ストア・フラグ28がセットさ
れている)ので、“1”の書き込みは行わない(図8の
ステップ277)。
【0122】次に、6サイクル目において、プロセッサ
#0でロード0が実行される。ロード0はキャッシュメ
モリ#0にヒットし、データ“0”が読み出される(図
5のステップ206)。ロード0からストア1及びスト
ア3には逆依存関係が存在している。すなわち、ロード
0は、時間上で先に実行されたがプログラム順序上は後
に位置するストア1やストア3のデータではなく、スト
ア0の値を参照する必要がある。上記したように、本実
施形態により、逆依存関係の解消が達成され、正しくス
トア0の値である“0”が参照された。
【0123】同様に、7サイクル目においては、プロセ
ッサ#1でロード1が実行される。ロード1はキャッシ
ュメモリ#1にヒットし、データ“1”が読み出される
(図5のステップ206)。また、ロード1は投機的な
実行であるので、投機ロード・フラグ27がセットされ
る。
【0124】同様に、8サイクル目においては、プロセ
ッサ#2でロード2が実行される。ロード2はキャッシ
ュメモリ#2にヒットし、プロセッサ#1が実行したス
トア1のデータ“1”が正しく読み出される(図5のス
テップ206)。また、ロード2は投機的な実行である
ので、投機ロード・フラグ27がセットされる。このよ
うに本実施形態によれば、ストア命令を実行した際、子
スレッド側のキャッシュメモリにも同時に書き込みを行
うので、子スレッド側ではキャッシュメモリにミスする
ことなく、そのデータを参照することができる。すなわ
ち、ストア命令を実行した際に、子スレッド側のキャッ
シュメモリを無効化する従来の方法にくらべて、スレッ
ド間の通信コストが小さいため、スレッド間の通信が多
い場合でも性能の低下が小さいという効果がある。
【0125】次に、9サイクル目において、プロセッサ
#3でロード3が実行される。ロード3はキャッシュメ
モリ#3にヒットし、データ“3”が正しく読み出され
る(図5のステップ206)。ストア1とストア3には
出力依存関係が存在している。すなわち、ストア1は時
間上で後に実行されたにもかかわらず、プログラム順序
上は先に位置するストア1のデータではなくストア3の
値が、後続のロード命令であるロード3等に参照される
必要がある。上記したように、本実施形態により、出力
依存関係の解消が達成され、正しくストア3の値である
“3”が参照された。
【0126】また、7サイクル目でスレッド0の実行が
終了したため、キャッシュメモリ#0においては、更新
フラグ24の何れかの更新対象フラグ24bがセットさ
れているので、更新有効フラグ24aがセットされる。
これにより、該キャッシュラインは、キャッシュメモリ
#1やキャッシュメモリ#3が保持するデータにより更
新されている為に、無効である可能性があることが示さ
れる。一方、スレッド0の実行の完了により、投機的な
実行を行っていたスレッド1の実行が確定する。キャッ
シュメモリ#1では、投機フラグ23、投機ロード・フ
ラグ27、及びストア・フラグ28がリセットされ、デ
ータ“1”が確定する。
【0127】同様に、8サイクル目でスレッド1の実行
が終了したため、キャッシュメモリ#1においては、更
新フラグ24の何れかの更新対象フラグ24bがセット
されているので、更新有効フラグ24aがセットされ
る。これにより、該キャッシュラインは、キャッシュメ
モリ#3が保持するデータにより更新されている為に、
無効である可能性があることが示される。一方、スレッ
ド1の実行の完了により、投機的な実行を行っていたス
レッド2の実行が確定する。キャッシュメモリ#2で
は、投機フラグ23、及び投機ロード・フラグ27がリ
セットされ、データ“1”が確定する。
【0128】同様に、9サイクル目でスレッド2の実行
が終了したため、キャッシュメモリ#2においては、更
新フラグ24の何れかの更新対象フラグ24bがセット
されているので、更新有効フラグ24aがセットされ
る。これにより、該キャッシュラインは、キャッシュメ
モリ#3が保持するデータにより更新されている為に、
無効である可能性があることが示される。一方、スレッ
ド2の実行の完了により、投機的な実行を行っていたス
レッド3の実行が確定する。キャッシュメモリ#3で
は、投機フラグ23、及び投機ロード・フラグ27がリ
セットされ、データ“3”が確定する。
【0129】次に、11サイクル目にスレッド3の実行
が終了するが、キャッシュメモリ#3は子スレッドによ
り更新されていない為(更新対象フラグ24bがセット
されていない)、更新有効フラグ24aはセットしなく
てもよい。すなわち、キャッシュメモリ#3のデータ
“3”は該アドレスのデータとして確定する。このよう
に、本実施形態によれば、スレッドが終了した際には、
更新対象フラグ24bのセット、リセット状態に応じて
更新フラグ24aをセットするのみであり、ライトバッ
クの集中やキャッシュラインの無効化が発生する従来の
方法に比べて、スレッドの終了のコストが著しく小さ
く、スレッド並列処理の実行性能が高いという効果があ
る。
【0130】次に、10サイクル目からプロセッサ#0
において、スレッド4の実行が開始される。まず、13
サイクル目において、ロード4が実行される。この時点
において、スレッド4は実行中のスレッドのなかで、プ
ログラム順序で最も先に位置しているスレッドなので、
スレッド実行は確定しており、従って、ロード4も確定
的に実行される。ロード4はキャッシュメモリ#0にヒ
ットするが、更新フラグ24がセットされている為、デ
ータを共有している他のプロセッサ、プロセッサ#1、
#2、#3にリード要求を発行する(図5のステップ2
03)。他プロセッサからの応答を参照すると、キャッ
シュメモリ#1及びキャッシュメモリ#3により、実際
に更新されていることが判明するので、キャッシュメモ
リ#0へのリフィルが行われる(図5のステップ21
3)。この場合、キャッシュメモリ#3より、データ
“3”を含むキャッシュラインのデータが提供され、デ
ータ“3”が読み出される(図5のステップ206)。
【0131】一方、リード要求を受信したプロセッサ#
1、#2、#3のうち、プロセッサ#1、及びプロセッ
サ#2では、更新フラグ24がセットされていて、かつ
キャッシュメモリ#3により実際に更新されていること
が判明するので、キャッシュラインが無効化される(図
7のステップ253)。一方、プロセッサ#3では、キ
ャッシュメモリ#3が有効なリフィル・データを保持し
ており、データ“3”を含むリフィル・データをプロセ
ッサ#0に供給する(図7のステップ258)。
【0132】次に、14サイクル目において、プロセッ
サ#1でスレッド5に含まれるロード5が実行される。
ここで、スレッド5は投機的なスレッドであるとする。
ロード5はキャッシュメモリ#1にミスするので、他の
すべてのプロセッサ、プロセッサ#0、#2、#3に対
してリード要求を発行し(図5のステップ209)、リ
フィル・データの到着を待って、キャッシュメモリ#1
へのリフィルを行う。この場合、キャッシュメモリ#0
より、データ“3”を含むキャッシュラインのデータが
提供され、データ“3”が読み出される(図5のステッ
プ206)。また、ロード5は投機的な実行であるの
で、投機ロード・フラグ27がセットされる(図5のス
テップ207)。
【0133】一方、リード要求を受信したプロセッサ#
0、#2、#3のうち、プロセッサ#0は、キャッシュ
メモリ#0が有効なリフィル・データを保持しており、
データ“3”を含むリフィル・データをプロセッサ#1
に供給する(図7のステップ258)。一方、プロセッ
サ#2は、リード要求がキャッシュメモリ#2にミスす
るので、その旨を応答する(図7のステップ247)。
また、プロセッサ#3は、キャッシュメモリ#3が有効
なリフィル・データを保持しているが、プログラム順序
で間のスレッドを実行しているプロセッサ#0のキャッ
シュメモリ#0も有効なデータを保持していることが判
明するので、リフィル・データの供給は行わない。
【0134】次に、15サイクル目において、プロセッ
サ#0でストア4が実行される。ストア4の書き込み値
が“4”であるとすると、まず、データを共有している
他のプロセッサ、プロセッサ#1、#3に対してライト
要求を発行し(図6のステップ226)、自身のキャッ
シュメモリ#0に“4”を書き込む(図6のステップ2
28)。
【0135】ライト要求を受信したプロセッサ#1、#
3では、ライト要求に対する処理が行われる。まず、プ
ロセッサ#1にとっては、親スレッドからのライト要求
で、かつ有効なライト・データなので、“4”の書き込
みを行う(図8のステップ277)。次に、正依存関係
の検出処理において(図8のステップ278)、キャッ
シュメモリ#1のキャッシュラインは、ライト要求に対
して、投機ロード・フラグ28がセットされているの
で、正依存関係の存在が検出される。すなわち、先にプ
ロセッサ#1が実行した投機的なロード5は、ライト要
求の要因であるプロセッサ#0が実行したストア4か
ら、正依存関係が存在し、かつそれに違反している為、
ロード5の投機実行は失敗したことが判明する。具体的
には、ロード5はプログラム順序でストア4の後に位置
する為、ストア4の書き込みデータ“4”を読み出すべ
きが、誤った値であるストア3の書き込みデータ“3”
を読み出している。正依存関係の存在が検出された旨
は、プロセッサ#1に通知され、投機実行失敗の回復処
理が開始される。
【0136】一方、ライト要求を受信したプロセッサ#
3では、親スレッドからのライト要求で、かつ有効なラ
イト・データなので、“4”の書き込みを行う(図8の
ステップ277)。
【0137】プロセッサ#1がロード5の投機実行を失
敗したことによる回復処理は、まず、その失敗したスレ
ッド、及びそのスレッドのすべての子スレッドの実行を
取り消して、スレッドの再実行を行うなどで、スレッド
の正常な実行を回復する。具体的には、投機実行の失敗
が判明した15サイクル目で、失敗したスレッド5、及
びその子スレッドであるスレッド6とスレッド7の実行
が取り消され、16サイクル目から再びスレッド5が、
続いてスレッド6及びスレッド7が再実行される。スレ
ッドの取り消し処理の際には、キャッシュメモリを構成
するすべてのキャッシュラインのすべての投機ロード・
フラグ27をリセットと、無効化が必要な投機的なキャ
ッシュラインの無効化を行う。例えば、キャッシュメモ
リ#1では、投機ロード・フラグ28をリセットする。
キャッシュラインは確定的なので、無効化は行われな
い。キャッシュメモリ#3でも、キャッシュラインは確
定的なので、無効化は行われない。スレッド5、及びス
レッド6、7の再実行が行われた結果、19サイクル目
でプロセッサ#1はロード5を再び実行し、正しいデー
タ“4”の読み出しが行われる。
【0138】以上、本実施形態による動作の具体例を説
明した。本実施形態によれば、あるスレッドを実行する
プロセッサがストア命令を実行した際には、該プロセッ
サに固有のキャッシュメモリに、該ストア命令のストア
・データを格納するのに加えて、該スレッドの子スレッ
ドを実行するプロセッサに固有のキャッシュメモリに、
該ストア命令と同アドレスのキャッシュラインが存在し
た場合、同アドレスのデータを保持するすべてのキャッ
シュラインのストア・フラグ27を参照して、有効なデ
ータ部分を算出し、有効なデータ部分のみ更新を行うこ
とを特徴とする。このため、子スレッド側ではキャッシ
ュメモリにミスすることなく、親スレッドが生成したデ
ータを参照することができる。すなわち、ストア命令を
実行した際に、子スレッド側のキャッシュメモリを無効
化する従来の方法に比べて、スレッド間の通信コストが
小さいため、スレッド間の通信が多い場合でも性能の低
下が小さいという効果がある。
【0139】さらに、親スレッドの書き込み処理による
キャッシュラインの無効化が発生しないことは、複数の
データエントリ26を一つのキャッシュライン内に備え
ることを可能にする。すなわち、ストア命令等の最小の
書き込み単位であるデータエントリ毎に、アドレスタグ
や各フラグが必要な従来のキャッシュラインに比べ、本
実施形態は、複数のデータエントリに対して、一組のア
ドレスタグや各フラグを設置すれば充分なので、実装に
必要なハードウエア量が小さいという効果がある。
【0140】一方、ストア命令を実行したスレッドに対
して、プログラム順序で前に位置する親スレッドを実行
するプロセッサに固有のキャッシュメモリに、該ストア
命令と同アドレスのキャッシュラインが存在した場合、
データの更新は行えず、更新フラグ24をセットするこ
とで、次に実行されるスレッドではデータは無効である
可能性があることを記憶するのみである。そのため、実
行されるスレッドにおいて、該アドレスをアクセスした
場合、リフィル処理が発生する可能性が大きいため、ス
レッドの大きさが特に小さく、スレッド間の通信量が特
に多い状況では、スレッドの実行性能が低下する場合が
ある。
【0141】この問題に対して、本発明によるキャッシ
ュメモリにおいては、差分バッファと呼ぶバッファを設
置してもよい。差分バッファを具備する本発明の第2の
実施形態を図10に示す。図10を参照すると、キャッ
シュ制御部19は少なくとも、バス要求制御部(符号3
0)、キャッシュ要求制御部(符号31)、バス要求出
力バッファ(符号32)、バス要求入力バッファ(符号
33)、に加えて差分バッファ34から構成される。
【0142】差分バッファ34はキャッシュ制御部19
において、キャッシュ要求制御部31に接続される。差
分バッファ34はアドレス及びそのデータを保持可能な
バッファであり、自スレッドに対してプログラム順序で
後に位置する子スレッドがストア命令を実行した際に、
自身のキャッシュメモリに該ストア命令と同アドレスの
キャッシュラインが存在した場合、該キャッシュライン
の更新フラグ24をセットするとともに、差分バッファ
34に該ストア命令のアドレス及びそのストア・データ
を格納するものである。
【0143】次に、スレッドの実行が終了した際に、差
分バッファ34に格納されているアドレスに対するキャ
ッシュラインがキャッシュメモリ11に存在する場合、
差分バッファ34に格納されている該アドレスのデータ
を該キャッシュラインへ書き込み、さらに該キャッシュ
ラインの更新フラグ24のリセットを行う。この処理に
より、自プロセッサに次に割り当てられるスレッドの該
アドレスへのアクセスは、キャッシュメモリにヒットす
ることになる。すなわち、差分バッファ34を設置する
ことにより、スレッドの大きさが特に小さく、スレッド
間の通信量が特に多い状況においても、スレッドの実行
性能が低下しないという顕著な効果がある。
【0144】以上、本発明の実施形態について説明し
た。上記説明では、プロセッサ数が4つの場合について
説明したが、本発明はプロセッサ数が4つに限るもので
はなく、2つ以上の任意の数のプロセッサを備えるマル
チプロセッサシステムに同様に適用することができる。
なお、本発明が対象とするスレッドは、プログラムのコ
ンパイル時等に静的に生成してもよいし、プログラムの
実行時に動的に生成してもよく、スレッドの大きさは1
命令以上の任意の大きさである。
【0145】
【発明の効果】以上説明したように、本発明によれば、
親スレッドが書き換えたデータと同じアドレスのキャッ
シュラインが子スレッド側のキャッシュメモリに存在す
ればそれも書き換えるようにしたので、子スレッド側で
はキャッシュメモリにミスすることなく、親スレッドが
生成したデータを参照することが可能となった。従っ
て、ストア命令を実行した際に、子スレッド側のキャッ
シュメモリを無効化する文献2の従来の方法にくらべ
て、スレッド間の通信コストが小さいため、スレッド間
の通信が多い場合でも性能の低下が小さく、高速なスレ
ッド並列処理が可能であるという効果がある。
【0146】また、スレッドの終了時には更新フラグを
セットする操作を行えば良く、文献1の従来の方法のよ
うにスレッドの終了時にキャッシュメモリにおいて、デ
ータの書き戻し処理の集中や、キャッシュラインの無効
化が発生しない為、高速なスレッド並列処理が可能であ
るという効果がある。さらに、キャッシュミスにともな
うリフィル処理の回数が少なく、スレッド終了時に書き
戻し処理が発生しないので、キャッシュメモリにおいて
消費される電力が小さいという効果がある。
【0147】さらに、文献2のように親スレッドの書き
込み処理によるキャッシュラインの無効化が発生しない
ので、ストア命令等の最小の書き込み単位であるデータ
エントリを複数、一つのキャッシュライン内に備えるこ
とができる。すなわち、データエントリ毎に、アドレス
タグや各フラグが必要な従来のキャッシュラインに比
べ、本発明は、複数のデータエントリに対して、一組の
アドレスタグや各フラグを設置すれば充分なので、実装
に必要なハードウエア量が小さいという効果がある。
【0148】また、本発明の差分バッファ34によれ
ば、スレッドの大きさが特に小さく、スレッド間の通信
量が特に多いという状況においても、スレッドの実行性
能が低下せず、高速なスレッド並列処理が可能であると
いう効果がある。
【0149】また、本発明によるキャッシュラインにお
いて、プロセッサ間でデータが共有されていることを示
す共有フラグ22は、複数ビットから構成され、データ
を共有しているプロセッサを個別に保持可能であり、バ
ス要求を出力するときには、共有しているプロセッサの
みにバス要求を出力するので、共有していないプロセッ
サでは、キャッシュメモリへのアクセスが発生せず、キ
ャッシュメモリのアクセス競合による性能低下が小さ
く、またキャッシュメモリにおいて消費される電力が小
さいという効果がある。
【0150】また、本発明によるキャッシュラインにお
いて、該キャッシュラインのデータは投機的であること
を示す投機フラグ23は、複数ビットから構成され、該
キャッシュラインを投機的にならしめた原因のプロセッ
サを特定することが可能である。このため、投機フラグ
を1ビットで構成する従来の方法では、厳密には無効化
が不必要なキャッシュラインも無効化されてしまうのに
対して、本発明によれば、厳密に無効化が必要なキャッ
シュラインのみが無効化されるため、キャッシュミスが
発生する確立が小さく、高速なスレッド並列処理が可能
であるという効果がある。
【0151】また、本発明によれば、同じアドレスに対
するバス要求を結合して同時に発行し、さらに更新され
て無効である可能性のあるキャッシュラインへの処理
を、前記バス要求により暗黙的に実行するので、発行さ
れるバス要求を少なくすることができ、バスの競合によ
る性能低下が小さく、バスで消費される電力が小さいと
いう効果がある。
【0152】また、本発明によれば、データのプログラ
ム順序上の前後関係を直接記憶や管理を行うのではな
く、更新フラグによる子スレッドにより更新されたか否
かの情報で管理する為、制御が単純で高速化が容易であ
り、必要なハードウエア量も小さいという効果がある。
【図面の簡単な説明】
【図1】本発明によるキャッシュメモリ装置を含むマル
チプロセッサシステムの構成を示すブロック図である。
【図2】キャッシュメモリを構成するキャッシュライン
の第1の実施形態の詳細を示す説明図である。
【図3】キャッシュメモリを構成するキャッシュライン
の第2の実施形態の詳細を示す説明図である。
【図4】キャッシュ制御部の第1の実施形態の詳細を示
すブロック図である。
【図5】ロード命令が発行された場合のキャッシュメモ
リ及びキャッシュ制御部の動作を示すフローチャートで
ある。
【図6】ストア命令が発行された場合のキャッシュメモ
リ及びキャッシュ制御部の動作を示すフローチャートで
ある。
【図7】リード要求を受信した場合のキャッシュメモリ
及びキャッシュ制御部の動作を示すフローチャートであ
る。
【図8】ライト要求を受信した場合のキャッシュメモリ
及びキャッシュ制御部の動作を示すフローチャートであ
る。
【図9】4つのプロセッサを備えるマルチプロセッサシ
ステムにおける、スレッド実行とキャッシュラインの状
態を示した説明図である。
【図10】キャッシュ制御部の第2の実施形態の詳細を
示すブロック図である。
【図11】従来のキャッシュメモリ装置を含むマルチプ
ロセッサシステムの構成を示すブロック図である。
【図12】従来のキャッシュメモリ装置を含むマルチプ
ロセッサシステムの構成を示すブロック図である。
【符号の説明】
10 プロセッサ 11 キャッシュメモリ 12 キャッシュ制御部 13 要求バス 14 応答バス 15 データバス 16 スレッド制御バス 17 バス制御部 18 メインメモリ 19 キャッシュ制御部 20 有効フラグ 21 変更フラグ 22 共有フラグ 23 投機フラグ 24 更新フラグ 24a 更新有効フラグ 24b 更新対象フラグ 25 アドレスタグ 26、26a、26b、26c、26d データエント
リ 27、27a、27b、27c、27d ストア・フラ
グ 28、28a、28b、28c、28d 投機ロード・
フラグ 30 バス要求制御部 31 キャッシュ要求制御部 32 バス要求出力バッファ 33 バス要求入力バッファ 34 差分バッファ 100 スレッド実行部 101 キャッシュメモリ 102 整合性維持部 103 共有バス 104 メインメモリ 110 プロセッサ 111 SVC 112 スヌープ・バス 113 バス・アービタ/バージョン制御論理 114 メインメモリ
───────────────────────────────────────────────────── フロントページの続き (51)Int.Cl.7 識別記号 FI テーマコート゛(参考) G06F 15/16 645 G06F 15/16 645 15/177 681 15/177 681Z Fターム(参考) 5B005 JJ01 KK14 MM01 NN45 PP11 PP21 5B045 DD12 GG11 5B098 AA02 AA03 AA10 GA05 GD03 GD14

Claims (15)

    【特許請求の範囲】
  1. 【請求項1】 それぞれが固有のキャッシュメモリを持
    つ複数のプロセッサで構成され、逐次的な実行順序関係
    が規定された複数のスレッドを並列に実行するマルチプ
    ロセッサシステムにおけるキャッシュメモリ制御方法に
    おいて、或るスレッドを実行するプロセッサがデータの
    書き込みを行った際に、前記或るスレッドを実行するプ
    ロセッサに固有のキャッシュメモリに前記データを書き
    込むのに加えて、前記或るスレッドより実行順序が後の
    スレッドを実行するプロセッサに固有のキャッシュメモ
    リに前記データの書き込み対象アドレスのキャッシュラ
    インが存在した場合にはそのキャッシュメモリに対する
    更新処理を行うと共に、前記或るスレッドより実行順序
    が先のスレッドを実行するプロセッサに固有のキャッシ
    ュメモリに前記データの書き込み対象アドレスのキャッ
    シュラインが存在した場合には、当該キャッシュライン
    に前記或るスレッドを実行するプロセッサが書き込みを
    行った旨を記憶することを特徴とするキャッシュメモリ
    制御方法。
  2. 【請求項2】 前記キャッシュメモリを構成するキャッ
    シュライン毎に、該キャッシュメモリに固有のプロセッ
    サが書き込みを実行した旨を書き込みのデータ幅単位で
    管理するフラグであって書き込み時にセットされ且つ当
    該プロセッサにおけるスレッド終了時にリセットされる
    ストア・フラグを備え、前記更新処理においては、更新
    処理の対象となるキャッシュメモリにおけるキャッシュ
    ラインの前記ストア・フラグの内容と、実行順序が前記
    或るスレッドから更新処理の対象となるキャッシュメモ
    リを持つプロセッサで実行しているスレッドまでの間に
    位置するスレッドを実行するプロセッサに固有のキャッ
    シュメモリに存在するキャッシュラインの前記ストア・
    フラグの内容とを参照して、更新処理の対象とするキャ
    ッシュラインの更新可否及び更新対象データ部分を決定
    する請求項1記載のキャッシュメモリ制御方法。
  3. 【請求項3】 前記キャッシュメモリを構成するキャッ
    シュライン毎に、プログラム順序で後に位置するスレッ
    ドを実行するプロセッサ毎にそのプロセッサによりデー
    タの書き込みが実行された旨を記憶する更新対象フラグ
    と、該更新対象フラグが有効であるか否かを示す更新有
    効フラグとを備え、或るスレッドを実行するプロセッサ
    が自プロセッサ固有のキャッシュメモリの或るキャッシ
    ュラインをアクセスした際に前記更新対象フラグ及び前
    記更新有効フラグが共に有効であった場合、前記更新対
    象フラグによって判明する前記データの書き込みを実行
    したプロセッサに固有のキャッシュメモリに該書き込み
    の対象アドレスのキャッシュラインが存在するか否かを
    参照することによって該キャッシュラインが有効である
    か無効であるかを判断し、無効である場合には、有効な
    データをメインメモリまたは他のプロセッサに固有のキ
    ャッシュメモリから転送し、該キャッシュラインへ格納
    する請求項1記載のキャッシュメモリ制御方法。
  4. 【請求項4】 前記キャッシュメモリを構成するキャッ
    シュライン毎に、プログラム順序で後に位置するスレッ
    ドを実行するプロセッサ毎にそのプロセッサによりデー
    タの書き込みが実行された旨を記憶する更新対象フラグ
    と、該更新対象フラグが有効であるか否かを示す更新有
    効フラグとを備え、或るスレッドを実行するプロセッサ
    に固有のキャッシュメモリの或るキャッシュラインを他
    プロセッサがアクセスした際に前記更新対象フラグ及び
    前記更新有効フラグが共に有効であった場合、前記更新
    対象フラグによって判明する前記データの書き込みを実
    行したプロセッサに固有のキャッシュメモリに該書き込
    みの対象アドレスのキャッシュラインが存在するか否か
    を参照することによって該キャッシュラインが有効であ
    るか無効であるかを判断し、無効である場合には、該キ
    ャッシュラインを無効化する請求項1記載のキャッシュ
    メモリ制御方法。
  5. 【請求項5】 プログラム順序で後に位置するスレッド
    を実行するプロセッサによりデータの書き込みが実行さ
    れた際に、該書き込みの対象アドレスと該書き込みデー
    タを格納するバッファ装置を備え、スレッドの実行が終
    了した際には、前記バッファ装置に格納されているアド
    レスに対応するキャッシュラインが存在する場合、前記
    バッファ装置に格納されている該アドレスのデータを該
    キャッシュラインに書き込みを行う請求項1記載のキャ
    ッシュメモリ制御方法。
  6. 【請求項6】 前記キャッシュメモリを構成するキャッ
    シュライン毎に、どのプロセッサとデータを共有してい
    るかを記憶する共有フラグを備え、或るプロセッサがバ
    ス要求を出力する際に、前記共有フラグを参照して、デ
    ータを共有しているプロセッサを特定し、前記データを
    共有しているプロセッサのみに前記バス要求を出力する
    ことを特徴とする請求項1記載のキャッシュメモリ制御
    方法。
  7. 【請求項7】 前記キャッシュメモリを構成するキャッ
    シュライン毎に、該キャッシュラインのデータが投機的
    なデータである場合に、投機的である旨及び投機的にな
    らしめた原因のプロセッサを特定する投機フラグを備
    え、或るプロセッサでスレッドの実行の取り消しが発生
    した場合に、該プロセッサに固有のキャッシュメモリに
    存在する投機的なキャッシュラインのうち、該キャッシ
    ュラインを投機的にならしめた原因のプロセッサでもス
    レッドの実行の取り消しが行われた場合、該キャッシュ
    ラインを無効化する請求項1記載のキャッシュメモリ制
    御方法。
  8. 【請求項8】 前記キャッシュメモリ毎にキャッシュ制
    御部を備え、前記キャッシュ制御部どうし及び前記キャ
    ッシュ制御部と前記プロセッサで共有されるメインメモ
    リ間をバスによって相互に接続し、且つ、 前記キャッシュメモリの各キャッシュライン毎に、当該
    キャッシュラインが有効か否かを示す有効フラグと、当
    該キャッシュラインがメインメモリと相違しているか否
    かを示す変更フラグと、当該キャッシュラインが他のど
    のプロセッサと共有しているか否かを示す共有フラグ
    と、当該キャッシュラインが投機的なデータを含むか否
    か及び含む場合には投機的にならしめた原因のプロセッ
    サを示す投機フラグと、当該キャッシュラインが実行順
    序で後に位置するスレッドを実行するプロセッサ毎にそ
    のプロセッサによりデータの書き込みが実行された旨を
    記憶する更新対象フラグと、何れかの前記更新対象フラ
    グがセットされている場合には、セットされている更新
    対象フラグに対応するプロセッサによって当該キャッシ
    ュラインが更新されて無効になっている可能性があるこ
    とを示す更新有効フラグと、当該キャッシュラインへの
    自プロセッサによる書き込みの有無を、あらかじめ定め
    たデータ幅の単位毎に示すストア・フラグと、当該キャ
    ッシュラインへの自プロセッサによる投機的なデータの
    読み出しの有無をあらかじめ定めたデータ幅の単位毎に
    示す投機ロード・フラグとを備え、 前記キャッシュ制御部は、リード及びライトにかかるバ
    ス要求の入出力時に、前記有効フラグ、前記変更フラ
    グ、前記共有フラグ、前記投機フラグ、前記更新対象フ
    ラグ、前記更新有効フラグ及び前記ストア・フラグを含
    むキャッシュライン状態を互いに交換することによって
    得た他キャッシュメモリのキャッシュライン状態と、自
    キャッシュメモリのキャッシュライン状態と、自プロセ
    ッサで実行されているスレッドと他プロセッサで実行さ
    れているスレッドとの実行順序関係とに基づいて、前記
    キャッシュメモリのデータの整合性を維持する処理を行
    うものである請求項1乃至7の何れか1項に記載のキャ
    ッシュメモリ制御方法。
  9. 【請求項9】 それぞれが固有のキャッシュメモリ及び
    キャッシュ制御部を持ち且つメインメモリを共有する複
    数のプロセッサで構成され、前記キャッシュ制御部どう
    し及び前記キャッシュ制御部と前記メインメモリ間がバ
    スで相互に接続され、逐次的な実行順序関係が規定され
    た複数のスレッドを並列に実行するマルチプロセッサシ
    ステムにおいて、 前記キャッシュメモリの各キャッシュライン毎に、当該
    キャッシュラインが有効か否かを示す有効フラグと、当
    該キャッシュラインがメインメモリと相違しているか否
    かを示す変更フラグと、当該キャッシュラインが他のど
    のプロセッサと共有しているか否かを示す共有フラグ
    と、当該キャッシュラインが投機的なデータを含むか否
    か及び含む場合には投機的にならしめた原因のプロセッ
    サを示す投機フラグと、当該キャッシュラインが実行順
    序で後に位置するスレッドを実行するプロセッサ毎にそ
    のプロセッサによりデータの書き込みが実行された旨を
    記憶する更新対象フラグと、何れかの前記更新対象フラ
    グがセットされている場合には、セットされている更新
    対象フラグに対応するプロセッサによって当該キャッシ
    ュラインが更新されて無効になっている可能性があるこ
    とを示す更新有効フラグと、当該キャッシュラインへの
    自プロセッサによる書き込みの有無をあらかじめ定めた
    データ幅の単位毎に示すストア・フラグと、当該キャッ
    シュラインへの自プロセッサによる投機的なデータの読
    み出しの有無をあらかじめ定めたデータ幅の単位毎に示
    す投機ロード・フラグとを備え、 前記キャッシュ制御部は、リード及びライトにかかるバ
    ス要求の入出力時に、前記有効フラグ、前記変更フラ
    グ、前記共有フラグ、前記投機フラグ、前記更新対象フ
    ラグ、前記更新有効フラグ及び前記ストア・フラグを含
    むキャッシュライン状態を互いに交換することによって
    得た他キャッシュメモリのキャッシュライン状態と、自
    キャッシュメモリのキャッシュライン状態と、自プロセ
    ッサで実行されているスレッドと他プロセッサで実行さ
    れているスレッドとの実行順序関係とに基づいて、自キ
    ャッシュメモリのキャッシュライン状態を適宜変更する
    ものであり、 前記キャッシュ制御部は、或るスレッドを実行するプロ
    セッサがそのプロセッサに固有のキャッシュメモリを更
    新した場合、同アドレスのデータが、実行順序で後のス
    レッドを実行するプロセッサに固有のキャッシュメモリ
    にあれば同時に更新処理を行うが、実行順序で先行する
    スレッドを実行するプロセッサに固有のキャッシュメモ
    リにあっても書き換えず、書き換えがあった旨を前記更
    新対象フラグに記録する構成を有し、且つ、或るプロセ
    ッサでスレッドが終了した際、すべてのキャッシュライ
    ンあるいは前記更新対象フラグの何れかがセットされて
    いるキャッシュラインは前記更新有効フラグをセット
    し、前記更新有効フラグがセットされていてかつ前記更
    新対象フラグの何れかがセットされているキャッシュラ
    インは無効である可能性があることを示し、前記更新有
    効フラグがリセットされているか前記更新対象フラグの
    全てがリセットされているキャッシュラインは有効であ
    ることを示し、前記無効の可能性があることが示されて
    いるキャッシュラインは、次のスレッドの実行中に実際
    に無効か否かを調べる構成を有するマルチプロセッサシ
    ステム。
  10. 【請求項10】 前記キャッシュ制御部は、前記更新処
    理においては、更新処理の対象となるキャッシュメモリ
    におけるキャッシュラインの前記ストア・フラグの内容
    と、実行順序が前記或るスレッドから更新処理の対象と
    なるキャッシュメモリを持つプロセッサで実行している
    スレッドまでの間に位置するスレッドを実行するプロセ
    ッサに固有のキャッシュメモリに存在するキャッシュラ
    インの前記ストア・フラグの内容とを参照して、更新処
    理の対象とするキャッシュラインの更新可否及び更新対
    象データ部分を決定する請求項9記載のマルチプロセッ
    サシステム。
  11. 【請求項11】 前記キャッシュ制御部は、或るスレッ
    ドを実行するプロセッサが自プロセッサ固有のキャッシ
    ュメモリの或るキャッシュラインをアクセスした際に前
    記更新対象フラグ及び前記更新有効フラグが共に有効で
    あった場合、前記更新対象フラグによって判明する前記
    データの書き込みを実行したプロセッサに固有のキャッ
    シュメモリに該書き込みの対象アドレスのキャッシュラ
    インが存在するか否かを参照することによって該キャッ
    シュラインが有効であるか無効であるかを判断し、無効
    である場合には、有効なデータをメインメモリまたは他
    のプロセッサに固有のキャッシュメモリから転送し、該
    キャッシュラインへ格納する請求項9記載のマルチプロ
    セッサシステム。
  12. 【請求項12】 前記キャッシュ制御部は、或るスレッ
    ドを実行するプロセッサに固有のキャッシュメモリの或
    るキャッシュラインを他プロセッサがアクセスした際に
    前記更新対象フラグ及び前記更新有効フラグが共に有効
    であった場合、前記更新対象フラグによって判明する前
    記データの書き込みを実行したプロセッサに固有のキャ
    ッシュメモリに該書き込みの対象アドレスのキャッシュ
    ラインが存在するか否かを参照することによって該キャ
    ッシュラインが有効であるか無効であるかを判断し、無
    効である場合には、該キャッシュラインを無効化する請
    求項9記載のマルチプロセッサシステム。
  13. 【請求項13】 プログラム順序で後に位置するスレッ
    ドを実行するプロセッサによりデータの書き込みが実行
    された際に、該書き込みの対象アドレスと該書き込みデ
    ータを格納するバッファ装置を備え、スレッドの実行が
    終了した際には、前記バッファ装置に格納されているア
    ドレスに対応するキャッシュラインが存在する場合、前
    記バッファ装置に格納されている該アドレスのデータを
    該キャッシュラインに書き込みを行う請求項9記載のマ
    ルチプロセッサシステム。
  14. 【請求項14】 前記キャッシュ制御部は、バス要求を
    出力する際に、前記共有フラグを参照して、データを共
    有しているプロセッサを特定し、前記データを共有して
    いるプロセッサのみに前記バス要求を出力することを特
    徴とする請求項9記載のマルチプロセッサシステム。
  15. 【請求項15】 前記キャッシュ制御部は、或るプロセ
    ッサでスレッドの実行の取り消しが発生した場合に、該
    プロセッサに固有のキャッシュメモリに存在する投機的
    なキャッシュラインのうち、該キャッシュラインを投機
    的にならしめた原因のプロセッサでもスレッドの実行の
    取り消しが行われた場合、該キャッシュラインを無効化
    する請求項9記載のマルチプロセッサシステム。
JP2001212250A 2001-07-12 2001-07-12 キャッシュメモリ制御方法及びマルチプロセッサシステム Expired - Fee Related JP3661614B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2001212250A JP3661614B2 (ja) 2001-07-12 2001-07-12 キャッシュメモリ制御方法及びマルチプロセッサシステム
US10/191,401 US6950908B2 (en) 2001-07-12 2002-07-10 Speculative cache memory control method and multi-processor system
GB0216270A GB2380292B (en) 2001-07-12 2002-07-12 Cache memory control and multi-processor system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001212250A JP3661614B2 (ja) 2001-07-12 2001-07-12 キャッシュメモリ制御方法及びマルチプロセッサシステム

Publications (2)

Publication Number Publication Date
JP2003030049A true JP2003030049A (ja) 2003-01-31
JP3661614B2 JP3661614B2 (ja) 2005-06-15

Family

ID=19047442

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001212250A Expired - Fee Related JP3661614B2 (ja) 2001-07-12 2001-07-12 キャッシュメモリ制御方法及びマルチプロセッサシステム

Country Status (3)

Country Link
US (1) US6950908B2 (ja)
JP (1) JP3661614B2 (ja)
GB (1) GB2380292B (ja)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006085292A (ja) * 2004-09-14 2006-03-30 Matsushita Electric Ind Co Ltd 演算処理装置
JP2006323432A (ja) * 2005-05-17 2006-11-30 Hitachi Ltd 主記憶共有型マルチプロセッサシステムの高性能化技術
JP2008521146A (ja) * 2004-11-19 2008-06-19 インテル コーポレイション 限定された誤りによる遅延した更新によるソフトウェアキャッシュ処理
JP2008544417A (ja) * 2005-06-29 2008-12-04 インテル コーポレイション キャッシュする方法、装置及びシステム
JP2009054158A (ja) * 2007-08-28 2009-03-12 Internatl Business Mach Corp <Ibm> ディレクトリ・ベースのキャッシュ・システムにおけるメモリ・ディレクトリ更新を少なくするシステムおよび方法ならびに設計構造情報記憶媒体
JP2009512078A (ja) * 2005-10-19 2009-03-19 インテル・コーポレーション スレッド間同期通信技術
EP2075704A1 (en) 2007-12-26 2009-07-01 NEC Corporation Cache memory system and cache memory control method
KR101084228B1 (ko) 2007-06-20 2011-11-17 후지쯔 가부시끼가이샤 정보 처리 장치, 캐시 메모리 제어 장치 및 메모리 액세스 순서 보증 방법
US8078801B2 (en) 2006-12-27 2011-12-13 Intel Corporation Obscuring memory access patterns
US8244985B2 (en) 2004-03-30 2012-08-14 Intel Corporation Store performance in strongly ordered microprocessor architecture
JP2013520753A (ja) * 2010-02-24 2013-06-06 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ハードウエアトランザクショナルメモリにおける自動サスペンド及び再開
US8996820B2 (en) 2010-06-14 2015-03-31 Fujitsu Limited Multi-core processor system, cache coherency control method, and computer product
US9384046B2 (en) 2010-10-05 2016-07-05 Fujitsu Limited Information processing apparatus, computer product, and information processing method for multi-thread process

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7120762B2 (en) * 2001-10-19 2006-10-10 Wisconsin Alumni Research Foundation Concurrent execution of critical sections by eliding ownership of locks
AU2003241090A1 (en) * 2002-06-13 2003-12-31 Koninklijke Philips Electronics N.V. Load speculation method
JP4180569B2 (ja) * 2003-01-27 2008-11-12 富士通株式会社 記憶制御装置、データキャッシュ制御装置、中央処理装置、記憶装置制御方法、データキャッシュ制御方法およびキャッシュ制御方法
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
US7225299B1 (en) 2003-07-16 2007-05-29 Transmeta Corporation Supporting speculative modification in a data cache
US7149851B1 (en) 2003-08-21 2006-12-12 Transmeta Corporation Method and system for conservatively managing store capacity available to a processor issuing stores
CN100429632C (zh) * 2003-09-19 2008-10-29 松下电器产业株式会社 高速缓冲存储器和高速缓冲存储器控制方法
US7376800B1 (en) * 2004-09-14 2008-05-20 Azul Systems, Inc. Speculative multiaddress atomicity
US7401202B1 (en) * 2004-09-14 2008-07-15 Azul Systems, Inc. Memory addressing
US7984248B2 (en) * 2004-12-29 2011-07-19 Intel Corporation Transaction based shared data operations in a multiprocessor environment
US7937709B2 (en) 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
JP2009519513A (ja) * 2005-12-06 2009-05-14 ボストンサーキッツ インコーポレイテッド 専用スレッド管理を用いたマルチコアの演算処理方法及び装置
US7350027B2 (en) * 2006-02-10 2008-03-25 International Business Machines Corporation Architectural support for thread level speculative execution
US20070239940A1 (en) * 2006-03-31 2007-10-11 Doshi Kshitij A Adaptive prefetching
CN101449250B (zh) * 2006-05-30 2011-11-16 英特尔公司 用于高速缓存一致性协议的方法、装置及系统
US20080046684A1 (en) * 2006-08-17 2008-02-21 International Business Machines Corporation Multithreaded multicore uniprocessor and a heterogeneous multiprocessor incorporating the same
US8806138B1 (en) * 2007-02-20 2014-08-12 Pixar Dynamic dependencies and parameterizations for execution and caching
US8024525B2 (en) * 2007-07-25 2011-09-20 Digi-Data Corporation Storage control unit with memory cache protection via recorded log
US8234488B1 (en) * 2007-11-12 2012-07-31 Nvidia Corporation System and method for controlling mode switches in hardware
US9928071B1 (en) 2008-05-02 2018-03-27 Azul Systems, Inc. Enhanced managed runtime environments that support deterministic record and replay
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US10621092B2 (en) * 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US8713294B2 (en) * 2009-11-13 2014-04-29 International Business Machines Corporation Heap/stack guard pages using a wakeup unit
US8825982B2 (en) * 2010-06-10 2014-09-02 Global Supercomputing Corporation Storage unsharing
WO2013048468A1 (en) 2011-09-30 2013-04-04 Intel Corporation Instruction and logic to perform dynamic binary translation
GB2500707B (en) * 2012-03-30 2014-09-17 Cognovo Ltd Multiprocessor system, apparatus and methods
US9235527B2 (en) * 2012-07-20 2016-01-12 The Johns Hopkins University Multiple-cache parallel reduction and applications
US9311241B2 (en) * 2012-12-29 2016-04-12 Intel Corporation Method and apparatus to write modified cache data to a backing store while retaining write permissions
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
US11204995B2 (en) * 2019-09-04 2021-12-21 International Business Machines Corporation Cache line cleanup for prevention of side channel attack
US20210173784A1 (en) * 2019-12-06 2021-06-10 Alibaba Group Holding Limited Memory control method and system
US20230195517A1 (en) * 2021-12-22 2023-06-22 Advanced Micro Devices, Inc. Multi-Cycle Scheduler with Speculative Picking of Micro-Operations

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3146077B2 (ja) 1991-11-15 2001-03-12 松下電器産業株式会社 プロセッサ
US5584009A (en) * 1993-10-18 1996-12-10 Cyrix Corporation System and method of retiring store data from a write buffer
JPH086805A (ja) 1994-06-15 1996-01-12 Toshiba Corp マルチプロセッサシステム
JP2882475B2 (ja) * 1996-07-12 1999-04-12 日本電気株式会社 スレッド実行方法
JP3139392B2 (ja) 1996-10-11 2001-02-26 日本電気株式会社 並列処理システム
US6341336B1 (en) 1998-02-17 2002-01-22 International Business Machines Corporation Cache coherency protocol having tagged state used with cross-bars
JP2000047887A (ja) 1998-07-30 2000-02-18 Toshiba Corp 投機的マルチスレッド処理方法および投機的マルチスレッド処理装置
JP3604029B2 (ja) 1999-01-12 2004-12-22 日本電気株式会社 マルチスレッドプロセッサ
US6314491B1 (en) 1999-03-01 2001-11-06 International Business Machines Corporation Peer-to-peer cache moves in a multiprocessor data processing system
US6725341B1 (en) 2000-06-28 2004-04-20 Intel Corporation Cache line pre-load and pre-own based on cache coherence speculation
JP3729064B2 (ja) * 2000-11-29 2005-12-21 日本電気株式会社 データ依存関係検出装置

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8244985B2 (en) 2004-03-30 2012-08-14 Intel Corporation Store performance in strongly ordered microprocessor architecture
JP2006085292A (ja) * 2004-09-14 2006-03-30 Matsushita Electric Ind Co Ltd 演算処理装置
JP2008521146A (ja) * 2004-11-19 2008-06-19 インテル コーポレイション 限定された誤りによる遅延した更新によるソフトウェアキャッシュ処理
JP2006323432A (ja) * 2005-05-17 2006-11-30 Hitachi Ltd 主記憶共有型マルチプロセッサシステムの高性能化技術
JP2008544417A (ja) * 2005-06-29 2008-12-04 インテル コーポレイション キャッシュする方法、装置及びシステム
JP2009512078A (ja) * 2005-10-19 2009-03-19 インテル・コーポレーション スレッド間同期通信技術
JP2012234561A (ja) * 2005-10-19 2012-11-29 Intel Corp スレッド間同期通信のための装置、システム、および、その方法
US8019947B2 (en) 2005-10-19 2011-09-13 Intel Corporation Technique for thread communication and synchronization
US8078801B2 (en) 2006-12-27 2011-12-13 Intel Corporation Obscuring memory access patterns
KR101084228B1 (ko) 2007-06-20 2011-11-17 후지쯔 가부시끼가이샤 정보 처리 장치, 캐시 메모리 제어 장치 및 메모리 액세스 순서 보증 방법
JP2009054158A (ja) * 2007-08-28 2009-03-12 Internatl Business Mach Corp <Ibm> ディレクトリ・ベースのキャッシュ・システムにおけるメモリ・ディレクトリ更新を少なくするシステムおよび方法ならびに設計構造情報記憶媒体
EP2075704A1 (en) 2007-12-26 2009-07-01 NEC Corporation Cache memory system and cache memory control method
JP2013520753A (ja) * 2010-02-24 2013-06-06 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ハードウエアトランザクショナルメモリにおける自動サスペンド及び再開
US8996820B2 (en) 2010-06-14 2015-03-31 Fujitsu Limited Multi-core processor system, cache coherency control method, and computer product
US9390012B2 (en) 2010-06-14 2016-07-12 Fujitsu Limited Multi-core processor system, cache coherency control method, and computer product
US9384046B2 (en) 2010-10-05 2016-07-05 Fujitsu Limited Information processing apparatus, computer product, and information processing method for multi-thread process

Also Published As

Publication number Publication date
GB0216270D0 (en) 2002-08-21
GB2380292A (en) 2003-04-02
US6950908B2 (en) 2005-09-27
JP3661614B2 (ja) 2005-06-15
GB2380292B (en) 2005-11-30
US20030014602A1 (en) 2003-01-16

Similar Documents

Publication Publication Date Title
JP3661614B2 (ja) キャッシュメモリ制御方法及びマルチプロセッサシステム
KR101496063B1 (ko) 원자 영역에서 조건부 커미트를 위한 결정 메카니즘 제공 장치, 방법, 및 시스템
US8024522B1 (en) Memory ordering queue/versioning cache circuit
US8370609B1 (en) Data cache rollbacks for failed speculative traces with memory operations
TWI571799B (zh) 以硬體限制為基礎而利用可調整之交易尺寸來動態地最佳化程式碼的裝置、方法與機器可讀媒體
US7877630B1 (en) Trace based rollback of a speculatively updated cache
US7350027B2 (en) Architectural support for thread level speculative execution
US6272602B1 (en) Multiprocessing system employing pending tags to maintain cache coherence
US20080005504A1 (en) Global overflow method for virtualized transactional memory
US9798577B2 (en) Transactional storage accesses supporting differing priority levels
US8051247B1 (en) Trace based deallocation of entries in a versioning cache circuit
JP2007536626A (ja) ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法
US8019944B1 (en) Checking for a memory ordering violation after a speculative cache write
US20100106916A1 (en) Data Cache Block Zero Implementation
US10108464B2 (en) Managing speculative memory access requests in the presence of transactional storage accesses
US7779307B1 (en) Memory ordering queue tightly coupled with a versioning cache circuit
US11194574B2 (en) Merging memory ordering tracking information for issued load instructions
US20210011729A1 (en) Managing Commit Order for an External Instruction Relative to Queued Instructions
US8010745B1 (en) Rolling back a speculative update of a non-modifiable cache line
US9311241B2 (en) Method and apparatus to write modified cache data to a backing store while retaining write permissions
US7519775B2 (en) Enforcing memory-reference ordering requirements at the L2 cache level
US8370576B1 (en) Cache rollback acceleration via a bank based versioning cache ciruit
CN118056192A (zh) 将特定数据模式的指示存储在备用目录条目中

Legal Events

Date Code Title Description
A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20040823

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20041029

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20041029

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041130

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050131

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050301

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050314

R150 Certificate of patent or registration of utility model

Ref document number: 3661614

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080401

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090401

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100401

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110401

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120401

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120401

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130401

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130401

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140401

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees