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

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

Info

Publication number
JP3661614B2
JP3661614B2 JP2001212250A JP2001212250A JP3661614B2 JP 3661614 B2 JP3661614 B2 JP 3661614B2 JP 2001212250 A JP2001212250 A JP 2001212250A JP 2001212250 A JP2001212250 A JP 2001212250A JP 3661614 B2 JP3661614 B2 JP 3661614B2
Authority
JP
Japan
Prior art keywords
cache
processor
cache line
flag
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.)
Expired - Fee Related
Application number
JP2001212250A
Other languages
English (en)
Other versions
JP2003030049A (ja
Inventor
充文 柴山
智 松下
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

Images

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)

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)、共有バス(符号103)、及びメインメモリ(符号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 Proceedings of the 4th InternationalSymposium 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と、それぞれ接続され、それぞれ並列にスレッドを実行する。さらに、各SVC#0〜3は、バス・アービタ/バージョン制御論理113の制御下で、スヌープ・バス112を通じ、他のSVC及びメインメモリとメモリ操作命令が対象とするメモリデータの受渡しを行う。このとき、メモリに関する逆依存関係、及び出力依存関係を考慮して、メモリデータ間の整合性の維持が図られる。また、SVCはメモリに関する正依存関係を検出する機能、及び投機的なスレッド実行の結果を取り消す機能を有し、正依存関係が検出された場合には、スレッドを再実行することにより、データ依存投機実行を実現する。
【0021】
SVCを構成するキャッシュラインは、他のSVCを指し示すポインタを記憶するエントリを含み、各SVCが同アドレスのデータを保持する場合、それらデータ間のプログラム順序における前後関係を線形リストの構造で記憶することを特徴とする。バス・アービタ/バージョン制御論理113はこの線形リスト構造を参照して、メモリに関する依存関係の制御を行う。
【0022】
上記文献2による、SVCを含むマルチプロセッサシステムの動作の特徴をより詳細に説明する。まず、あるプロセッサが正依存関係に関して投機的なロード命令を実行した際には、該プロセッサに固有のSVCに存在する、該ロード命令のデータを含むキャッシュラインに、投機的なロード命令を実行したことを示すフラグをセットする。
【0023】
また、あるプロセッサP0がストア命令を実行した際には、プロセッサP0に固有のSVCに該ストア命令のストア・データを格納する。同時に、プロセッサP0が実行するスレッドS0よりもプログラム順序で後に位置するスレッドS1を実行するプロセッサP1に固有のSVCに該ストア命令と同アドレスのデータが存在し、かつスレッドS0よりもプログラム順序で後に位置するスレッドにより更新されていないならば、プロセッサP1のSVCにある前記該ストア命令と同アドレスのデータを含むキャッシュラインを無効化する。さらに、そのキャッシュラインに前記投機的なロード命令を実行したことを示すフラグがセットされていたならば、ロード命令の投機実行は失敗したと判定し、プロセッサP1へスレッド実行の取り消し及び再実行を要求する機能を有する。
【0024】
また、あるプロセッサが実行するスレッドよりもプログラム順序で前に位置するスレッドが、他のいずれかのプロセッサで実行されている場合には、該プロセッサに固有のSVCに格納したストア命令のストア・データの、メインメモリへの書き戻しを禁止する。
【0025】
また、あるプロセッサが実行するスレッドが、他のいずれのプロセッサで実行されているスレッドよりも、プログラム順序で前に位置し、かつ該スレッドの実行が終了したならば、該プロセッサに固有のSVCに格納されているすべてのキャッシュラインに、データが確定されたことを示すフラグをセットする。一方、あるメモリ操作命令がSVCをアクセスした際に、アクセス対象のキャッシュラインの前記データが確定されたことを示すフラグがセットされていたならば、バス・アービタ/バージョン制御論理113により、すべてのSVCを参照して、有効なキャッシュラインを得ることを特徴とする。
【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)、応答バス(符号14)、データバス(符号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)、複数の投機ロード・フラグ(符号28)、から構成される。
【0040】
有効フラグ20は、そのキャッシュラインが有効であることを示す。有効フラグ20は、キャッシュミスが発生した時など、データをキャッシュメモリに転送し、キャッシュラインを生成する(リフィルする)際にセットし、キャッシュラインを入れ換える時など、キャッシュラインを無効化する際にリセットする。
【0041】
変更フラグ21は、そのキャッシュラインのデータをストア命令等で変更しており、メインメモリにあるデータと異なっていることを示す。変更フラグ21は、ストア命令等のデータの書き込みを実行した際にセットし、キャッシュラインのメインメモリへの書き戻し(ライトバック)を行った際にリセットする。
【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がリセットされているか、更新対象フラグ24bの全てがリセットされていれば、当該キャッシュラインは次に実行されるスレッドでも有効であることが示される。各更新対象フラグ24bは、それぞれが他のプロセッサに対応し、対応するプロセッサにより該キャッシュラインが更新されたことを示す。
【0045】
データエントリ26は、そのキャッシュラインのメモリデータを保持する。通常、一つのキャッシュラインは、アドレスタグ25が指定するアドレス範囲を構成する複数のデータエントリを備え、それぞれのデータエントリは、ストア命令等による書き込みの最小のデータ単位である。図2においては、複数のデータエントリ26のそれぞれをデータエントリ26a、データエントリ26b、データエントリ26c、データエントリ26d、…、と表記して区別している。
【0046】
ストア・フラグ27は、対応するデータエントリに、自プロセッサがストア命令などで書き込みを行ったことを示す。図2においては、ストア・フラグ27aはデータエントリ26aに、ストア・フラグ27bはデータエントリ26bに、ストア・フラグ27cはデータエントリ26cに、ストア・フラグ27dはデータエントリ26dに、それぞれ対応する。ストア・フラグは自プロセッサが書き込みを行った際にセットし、スレッドの実行が終了した際にリセットされる。
【0047】
投機ロード・フラグ28は、対応するデータエントリに、自プロセッサが投機的な読み出しを行ったことを示す。図2においては、投機ロード・フラグ28aはデータエントリ26aに、投機ロード・フラグ28bはデータエントリ26bに、投機ロード・フラグ28cはデータエントリ26cに、投機ロード・フラグ28dはデータエントリ26dに、それぞれ対応する。投機ロード・フラグは投機的な読み出しを行い、かつ読み出し対象のデータに対して先に書き込みを行っていない、すなわち対応するストア・フラグ27がセットされていないならばセットされる。一方、スレッドの投機実行が確定した際にはリセットされる。
【0048】
図2に示したキャッシュラインの実施例では、書き込みの最小データ単位に対応するデータエントリ26a、26b、…、のそれぞれに固有のストア・フラグ27a、27b、…、及び投機ロード・フラグ28a、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、共有フラグ22、投機フラグ23、更新フラグ24、ストア・フラグ27、を含み、キャッシュミスした場合は、そのミスによるリフィル処理対象のキャッシュラインの状態、キャッシュヒットした場合は、そのヒットしたキャッシュラインの状態を示す。
【0051】
バス要求出力バッファ32は、バス要求制御部30によって生成されたバス要求を格納し、順次バスを通じて他のプロセッサやメインメモリに出力する。より詳細には、バス要求はコマンド、アドレス、キャッシュライン状態、データ等から構成され、コマンド、アドレスは要求バス13、キャッシュライン状態は応答バス14、データはデータバス15に出力する。バス要求出力バッファ32は同時に、要求バス13に出力したコマンド、アドレス、及び応答バス14に出力したキャッシュライン状態を、バス要求入力バッファ33にも転送する。本実施形態は、バス要求を出力する際には、キャッシュライン状態に含まれる共有フラグ22を参照して、データを共有しているプロセッサにのみ宛てて、バス要求を出力することを特徴とする。すなわち、データを共有していないプロセッサでは、該バス要求によるキャッシュメモリへのアクセスが発生せず、キャッシュメモリのアクセス競合による性能低下が小さく、またキャッシュメモリにおいて消費される電力を削減することができるという効果がある。
【0052】
バス要求入力バッファ33は、他プロセッサやメインメモリから要求バス13を通じて伝達されるバス要求のコマンド、アドレスや、応答バス14を通じて伝達されるキャッシュライン状態や、データバス15を通じて伝達されるデータなどを格納する。バス要求入力バッファ33はまた、バス要求出力バッファ32から要求バス13に出力されたバス要求のコマンド、アドレス、及び応答バス14に出力されたキャッシュライン状態を格納し、さらに、バス要求に応じて他プロセッサが応答バス14に出力するキャッシュライン状態を、その到着を待って格納する。同時にバス要求入力バッファ33は、格納しているバスから入力したバス要求、より詳細には、コマンド、アドレス、キャッシュライン状態、及びデータ、をキャッシュ要求制御部31に順次出力していく。
【0053】
キャッシュ要求制御部31は、バス要求入力バッファ33が保持し、順次入力されるバス要求を順次解釈する。まず、バスから入力された他プロセッサからのバス要求に対しては、キャッシュメモリ11にアクセスして、バス要求の対象のキャッシュラインを保持しているか否かを判定し、保持していなければその旨が、保持していればそのキャッシュラインの状態が、バス要求制御部30及びバス要求出力バッファ32を通じて、応答バス14に出力される。同時に、その自身のキャッシュメモリのキャッシュライン状態は、バス要求入力バッファ33の該当エントリに格納される。バス要求入力バッファ33において、自身のキャッシュライン状態も含めて、他プロセッサからのキャッシュライン状態の応答もすべて到着したら、再び、キャッシュ要求制御部31において、バス要求のコマンドと、自身のキャッシュライン状態、及び他プロセッサのキャッシュライン状態をすべて参照して、キャッシュラインの次の状態を決定し、対象のキャッシュラインの更新を行う。
【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のステップ207)、ロード命令の実行は終了する。発行されたロード命令が投機的であるか、確定的であるかはプロセッサ10からキャッシュメモリ11に通知される。
【0056】
一方、更新フラグ24の参照(図5のステップ202)で、更新フラグ24がセットされていた、すなわち、更新有効フラグ24aがセットされていて、かつ、更新対象フラグ24bのいずれかがセットされている場合、そのキャッシュラインは子スレッドにより更新されていて、そのキャッシュラインは既に無効である可能性があると判断される。ここで確定的に無効であると判定できないのは、子スレッドによる更新が投機的であって、かつ取り消されている場合があり、実際には有効である可能性もあるからである。確定的な判断は、子スレッドを実行したプロセッサのキャッシュメモリのキャッシュライン状態を参照する必要がある。そこで、バス要求制御部30は他のプロセッサのキャッシュメモリを参照するリード要求を生成し、バス要求出力バッファ32を通じて、要求バス13にリード要求を発行する(図5のステップ203)。同時にそのリード要求、リード要求の対象アドレス、及び自身のキャッシュライン状態は、バス要求入力バッファ33に格納され、他のプロセッサのキャッシュ制御部から、リード要求に対する応答である、キャッシュライン状態が応答バス14を通じて到着するのを待機する(図5のステップ204)。
【0057】
リード要求に対して、すべてのプロセッサからの応答が到着すると、前記した自身のキャッシュラインが実際に無効であるか、それとも有効であるかを判定する(図5のステップ205)。より詳細には、セットされている更新対象フラグ24bに対応するプロセッサのキャッシュライン状態を参照し、ヒットしていた場合は、実際にそのプロセッサに更新されていたと判断する。一方、セットされているすべての更新対象フラグ24bに対して、いずれのプロセッサでもミスしていた場合、その更新は投機実行の失敗により取り消されていて、実際には更新されていないと判断する。
【0058】
実際には更新されていなかった場合、該キャッシュラインは有効であるので、ただちに、読み出し処理を実行することができる。この場合、リフィル処理は必要なく、先に発行したリード要求を受信したプロセッサでは、そのリード要求に対する処理は行われない。読み出し処理では、キャッシュメモリ11からプロセッサ10にロード対象のデータを転送する(図5のステップ206)。次に、キャッシュライン状態を更新して、ロード命令の実行を終了する(図5のステップ207)。具体的には、まず、更新フラグ24をリセットし、次に、該ロード命令が投機的な実行である場合、ロード対象のデータを格納したデータエントリ26に対応する投機ロード・フラグ28をセットする。
【0059】
一方、実際に更新されていた場合、該キャッシュラインは無効であるので、他のプロセッサのキャッシュメモリ、またはメインメモリから、有効なデータをリフィルする必要がある。まず、リフィル処理の前に、該キャッシュラインのデータをライトバックする必要性を判断する(図5のステップ211)。該キャッシュラインは、自プロセッサが現在実行しているスレッドに対しては無効であるが、親スレッドに対しては有効である場合がある。より詳細には、該キャッシュラインを更新したプロセッサのキャッシュメモリに、確定したキャッシュライン、すわなち投機フラグ23がセットされていないキャッシュラインが存在しなければ、該キャッシュラインは唯一の確定したデータを保持しているため、ライトバックが必要であると判断する。一方、該キャッシュラインの更新元のプロセッサのキャッシュラインに、確定したキャッシュラインが存在すれば、ライトバックは必要ないと判断する。
【0060】
ライトバックが必要であると判断した場合、バス要求制御部30はライトバック要求を生成し、それをバス要求出力バッファ32を通じて、要求バス13に出力し(図5のステップ216)、次にデータバス15にライトバック対象のデータを出力する(図5のステップ217)。次に、先に発行しているリード要求に対して、他のキャッシュメモリまたはメインメモリからデータバス15を通じて伝達されるリフィル・データの到着を待つ(図5のステップ212)。次に、キャッシュ要求制御部31は到着したリフィル・データをキャッシュメモリ11へリフィルを行い(図5のステップ213)、次に、キャッシュメモリ11からプロセッサ10にロード対象のデータを転送し(図5のステップ206)、キャッシュライン状態を更新して、ロード命令の実行を終了する(図5のステップ207)。
【0061】
一方、図5のステップ211でライトバックが必要でないと判断した場合、そのままリフィル・データの到着を待ち(図5のステップ212)、キャッシュメモリ11へのリフィルを行う(図5のステップ213)。次に、キャッシュメモリ11からプロセッサ10にロード対象のデータを転送し(図5のステップ206)、キャッシュライン状態を更新して、ロード命令の実行を終了する(図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のステップ212)、キャッシュメモリ11へのリフィルを行う(図5のステップ213)。次に、キャッシュメモリ11からプロセッサ10にロード対象のデータを転送し(図5のステップ206)、キャッシュライン状態を更新して、ロード命令の実行を終了する(図5のステップ207)。
【0066】
ライトバックが必要でない場合は、そのままリフィル・データの到着を待ち(図5のステップ212)、キャッシュメモリ11へのリフィルを行う(図5のステップ213)。次に、キャッシュメモリ11からプロセッサ10にロード対象のデータを転送し(図5のステップ206)、キャッシュライン状態を更新して、ロード命令の実行を終了する(図5のステップ207)。
【0067】
以上、ロード命令が発行された場合のキャッシュメモリ11及びキャッシュ制御部12の動作を説明した。次に、図6を参照して、ストア命令が発行された場合のキャッシュメモリ11及びキャッシュ制御部12の動作を説明する。
【0068】
まず、プロセッサ10でストア命令が発行されると(図6のステップ220)、キャッシュメモリ11がアクセスされ、キャッシュメモリにヒットするか、ミスするかが判定される(図6のステップ221)。キャッシュメモリにヒットした場合、ヒットしたキャッシュラインが読み出され、キャッシュライン内の更新フラグ24が参照される(図6のステップ222)。更新フラグ24がセットされていない、すなわち、更新有効フラグ24aがセットされていないか、更新対象フラグ24bのいずれもがセットされていない場合、そのキャッシュラインは子スレッドにより更新されておらず、そのキャッシュラインは有効であると判断される。その場合、バス要求制御部30は、ライト要求を生成し、バス要求出力バッファ32を通じて、要求バス13にライト要求を出力する(図6のステップ226)。ライト要求は、ストア命令を実行したこと、及びそのストア・データを他のプロセッサやキャッシュメモリに通知し、それに対する処理を要求するバス要求である。
【0069】
次に、該ストア命令による書き込みの前に、以前のデータのメインメモリへのライトバックが必要か否かを判定する(図6のステップ227)。該ストア命令がヒットしたキャッシュラインが確定的である、すなわち投機フラグ23がセットされてなく、かつ該ストア命令が投機的な実行である場合、投機的なデータを書き込む前に、確定的なデータをメインメモリへライトバックを行う。具体的には、要求バス13にライトバック要求を出力し(図6のステップ230)、続いてデータバス15を通じてライトバックするデータを転送する(図6のステップ231)。その後、該ストア命令が書き込みの対象とするキャッシュラインのデータエントリ26に、ストア・データの書き込みを行う(図6のステップ228)。次に、キャッシュライン状態を更新して、ストア命令の実行を終了する(図6のステップ229)。具体的には、まず、変更フラグ21、及びストア対象のデータを格納したデータエントリに対応するストア・フラグ27をセットする。さらに、該ストア命令が投機的な実行である場合、投機フラグ23の自プロセッサに対応するフラグ部分をセットする。
【0070】
一方、ライトバックが必要なかった場合(図6のステップ227、No)、そのまま該ストア命令が書き込みの対象とするキャッシュラインのデータエントリに、ストア・データの書き込みを行う(図6のステップ228)。次に、キャッシュライン状態を更新して、ストア命令の実行を終了する(図6のステップ229)。
【0071】
一方、更新フラグの参照(図6のステップ222)で、更新フラグ24がセットされていた、すなわち、更新有効フラグ24aがセットされていて、かつ、更新対象フラグ24bのいずれかがセットされている場合、そのキャッシュラインは子スレッドにより更新されていて、そのキャッシュラインは既に無効である可能性があると判断される。その場合、バス要求制御部30はリード・ライト要求を生成し、要求バス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のステップ241)を行う。次に、先に発行しているリード・ライト要求に対して、他のキャッシュメモリまたはメインメモリからデータバス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のステップ237)。次に、該ストア命令が書き込みの対象とするキャッシュラインのデータエントリに、ストア・データの書き込みを行う(図6のステップ228)。次に、キャッシュライン状態を更新して、ストア命令の実行を終了する(図6のステップ229)。
【0080】
以上、ストア命令が発行された場合のキャッシュメモリ11及びキャッシュ制御部12の動作を説明した。次に、図7を参照して、他のプロセッサからバスを通じてリード要求を受信した場合、及びリード・ライト要求を受信した場合のリード要求部分に対する、キャッシュメモリ11及びキャッシュ制御部12の動作を説明する。リード・ライト要求を受信した場合は、リード要求に対する処理を行った後、後述するライト要求に対する処理を行う。以下の説明ではリード要求またはリード・ライト要求のリード要求部分を、単にリード要求と表記する。
【0081】
まず、他プロセッサのキャッシュ制御部12からのリード要求を、要求バス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のステップ251)。より詳細には、セットされている更新対象フラグ24bに対応するプロセッサのキャッシュライン状態を参照し、ヒットしていた場合は、実際にそのプロセッサに更新されていたと判断する。一方、セットされているすべての更新対象フラグ24bに対して、いずれのプロセッサでもミスしていた場合、その更新は投機実行の失敗に取り消されていて、実際には更新されていないと判断する。
【0086】
子スレッドにより、実際には更新されていなかった場合、自身のキャッシュラインのデータをリフィル・データとして供給するか否かの判定を行う(図7のステップ256)。判定は、まず、リード要求を発行したプロセッサが、実際にリフィル処理を必要としているか否かを判断する。これは、リード要求を発行したが(図5の203、または図6の223)、実際にはキャッシュラインが有効でリフィル処理が必要ない場合(図5の205、No、または図6の225、No)があるからである。リード要求を受信したプロセッサでも、すべてのキャッシュメモリのキャッシュライン状態が参照できるので、リード要求を発行したプロセッサと同様の判断が可能である。
【0087】
リード要求を発行したプロセッサで、実際にリフィル処理を必要としていない場合は、リフィル・データの供給は行わない。一方、リード要求を発行したプロセッサで、実際にリフィル処理を必要としている場合、次に、プログラム順序の上で、自プロセッサが実行するスレッドと、リード要求を発行したプロセッサが実行するスレッドの間に位置するスレッドを実行するプロセッサのキャッシュライン状態を参照する。リフィル・データを供給するか否かは、それらの間のスレッドのキャッシュライン状態と自身のキャッシュライン状態により決定される。なお、スレッドの順序関係は、自身のプロセッサ10から各キャッシュ制御部12へ通知される。
【0088】
まず、前記間のスレッドのキャッシュラインの中に、投機的な(投機フラグ23がセットされた)キャッシュラインが存在する場合、自身のキャッシュラインのデータはリフィル・データとして無効であり、自プロセッサはリフィル・データの供給は行わない。
【0089】
次に、前記間のスレッドのキャッシュラインの中に、投機的なキャッシュラインは存在しないが、確定的なキャッシュラインは存在し、かつ自身のキャッシュラインも確定的である場合、自プロセッサはリフィル・データの供給は行わない。
【0090】
次に、間のスレッドのキャッシュラインの中に、投機的なキャッシュラインは存在しないが、確定的なキャッシュラインは存在し、かつ自身のキャッシュラインは投機的である場合、自プロセッサは自身のキャッシュラインからリフィル・データの供給を行う。
【0091】
次に、間のスレッドを実行するプロセッサではすべてキャッシュメモリにミスし、有効なキャッシュラインが存在しない場合、自プロセッサは自身のキャッシュラインからリフィル・データの供給を行う。
【0092】
リフィル・データの供給を行わない場合、キャッシュライン状態の更新、具体的には更新フラグ24のリセットを行い、リード要求に対する処理を終了する(図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】
まず、他プロセッサのキャッシュ制御部12からのライト要求を、要求バス13を通じて受信すると、バス要求入力バッファ33は、該ライト要求のコマンド、アドレス、ライト要求を発行したプロセッサのキャッシュライン状態、ライト・データなどを格納し、キャッシュ要求制御部31に通知する(図8のステップ260)。キャッシュ要求制御部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のステップ266)。より詳細には、セットされている更新対象フラグ24bに対応するプロセッサのキャッシュライン状態を参照し、ヒットしていた場合は、実際にそのプロセッサに更新されていたと判断する。一方、セットされているすべての更新対象フラグ24bに対して、いずれのプロセッサでもミスしていた場合、その更新は投機実行の失敗に取り消されていて、実際には更新されていないと判断する。
【0101】
子スレッドにより、実際には更新されていなかった場合、自身のキャッシュラインへのライト処理を開始する(図8のステップ266、No)。ライト処理はまず、ライト要求が親スレッドからの要求か否かを判断する(図8のステップ271)。スレッドの順序関係は、自身のプロセッサ10から各キャッシュ制御部12へ通知される。子スレッドからのライト要求であった場合、それはプログラム順序の上で後に位置する書き込みなので、実際にデータの更新は行わず、子スレッドによって更新されたことを示す、キャッシュラインの更新フラグ24のうち、ライト要求を発行したプロセッサに対応する更新対象フラグ24bをセットして、ライト要求に対する処理を終了する(図8のステップ273)。
【0102】
一方、親スレッドからのライト要求であった場合、次に有効なライト・データ部分が存在するか否かを判定する(図8のステップ272)。判定には、まず、プログラム順序の上で、ライト要求を発行したプロセッサが実行するスレッドと自プロセッサが実行するスレッドの間に位置するスレッドを実行するプロセッサのキャッシュライン状態を参照する。有効なライト・データ部分が存在するか否かは、それらの間のスレッドのキャッシュライン状態と自身のキャッシュライン状態により決定される。具体的には、ライト・データに対し、間のスレッドのキャッシュラインの中で、ストア・フラグ27がセットされているライト・データ部分が存在する場合、そのライト・データ部分は自スレッドに対して無効である。逆に、間のスレッドのキャッシュラインのいずれにも、ストア・フラグ27がセットされていないライト・データ部分が存在する場合、そのライトデータ部分は自スレッドに対して有効である。
【0103】
有効なライト・データ部分が存在しない場合、キャッシュライン状態を更新して、ライト要求に対する処理を終了する(図8のステップ273)。一方、有効なライト・データ部分が存在する場合、そのライト・データ部分の書き込み処理を行う。まず、実際に書き込みを行う前に、以前のデータのメインメモリへのライトバックが必要か否かを判定する(図8のステップ274)。該ライト要求がヒットしたキャッシュラインが確定的である、すなわち投機フラグ23がセットされてなく、かつ該ライト要求が投機的な要求である場合、投機的なデータを書き込む前に、確定的なデータをメインメモリへライトバックを行う。具体的には、要求バス13にライトバック要求を出力し(図8のステップ275)、続いてデータバス15を通じてライトバックするデータを転送する(図8のステップ276)。その後、実際の書き込み処理を開始する。一方、ライトバックが必要なかった場合(図8のステップ274、No)、そのまま実際の書き込み処理を開始する。ライト要求が投機的であるか、確定的であるかは、ライト要求の要因のストア命令が投機的であるか、確定的であるかにより、ライト要求と同時に要求を発行したプロセッサから与えられる。
【0104】
実際の書き込み処理では(図8のステップ277)、前記した有効なライト・データ部分を自身のキャッシュラインの対応するデータエントリ26へ書き込みを行う。ただし、自プロセッサが先に書き込みを行い、ストア・フラグ27がセットされている、データエントリに対しては書き込みを行わない。
【0105】
次に、受信したライト要求のストア命令から、自プロセッサが先に実行した正依存関係に対して投機的なロード命令への、正依存関係の検出を行う(図8のステップ278)。上記した有効なライト・データ部分に対応するデータエントリの投機ロード・フラグ28のいずれかがセットされていた場合、正依存関係が存在し、投機的なロード命令の実行は失敗であったと判断できる。その場合、キャッシュメモリ11はプロセッサ10に投機実行失敗を通知し、プロセッサ10はスレッド実行の取消しを行う(図8のステップ280)。
【0106】
一方、上記した有効なライト・データ部分に対応するデータエントリの投機ロード・フラグ28のいずれもセットされていない場合、正依存関係は存在せず、投機的なロード命令の実行は成功したと判断できる。その場合、キャッシュライン状態を更新して、ライト要求に対する処理を終了する(図8のステップ279)。
【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、ストア・フラグ27、及び投機ロード・フラグ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のステップ226)、自身のキャッシュメモリ#0に“0”を書き込む(図6のステップ228)。どのプロセッサとデータを共有しているかは、キャッシュラインの共有フラグ22を参照して判断する。
【0117】
一方、ライト要求を受信したプロセッサ#1、#2、#3では、ライト要求に対する処理が行われる。具体的には、いずれのプロセッサにとっても親スレッドからのライト要求で、かつ有効なライト・データなので、“0”の書き込みを行う(図8のステップ277)。
【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のステップ277)。また、投機的なデータの書き込みを行ったので、投機フラグ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のステップ203)。他プロセッサからの応答を参照すると、キャッシュメモリ#1及びキャッシュメモリ#3により、実際に更新されていることが判明するので、キャッシュメモリ#0へのリフィルが行われる(図5のステップ213)。この場合、キャッシュメモリ#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のステップ228)。
【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は少なくとも、バス要求制御部(符号30)、キャッシュ要求制御部(符号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 メインメモリ

Claims (11)

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

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011158320A1 (ja) * 2010-06-14 2011-12-22 富士通株式会社 マルチコアプロセッサシステム、キャッシュコヒーレンシ制御方法、およびキャッシュコヒーレンシ制御プログラム

Families Citing this family (44)

* 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
WO2003107176A2 (en) * 2002-06-13 2003-12-24 Koninklijke Philips Electronics N.V. Load speculation method
WO2004068361A1 (ja) * 2003-01-27 2004-08-12 Fujitsu Limited 記憶制御装置、データキャッシュ制御装置、中央処理装置、記憶装置制御方法、データキャッシュ制御方法およびキャッシュ制御方法
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
US20070028055A1 (en) * 2003-09-19 2007-02-01 Matsushita Electric Industrial Co., Ltd Cache memory and cache memory control method
US7484045B2 (en) 2004-03-30 2009-01-27 Intel Corporation Store performance in strongly-ordered microprocessor architecture
JP4803983B2 (ja) * 2004-09-14 2011-10-26 パナソニック株式会社 演算処理装置
US7552302B1 (en) 2004-09-14 2009-06-23 Azul Systems, Inc. Ordering operation
US7376800B1 (en) * 2004-09-14 2008-05-20 Azul Systems, Inc. Speculative multiaddress atomicity
US7529888B2 (en) * 2004-11-19 2009-05-05 Intel Corporation Software caching with bounded-error delayed update
US7937709B2 (en) 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
US7984248B2 (en) * 2004-12-29 2011-07-19 Intel Corporation Transaction based shared data operations in a multiprocessor environment
JP4806959B2 (ja) * 2005-05-17 2011-11-02 株式会社日立製作所 主記憶共有型マルチプロセッサシステムの高性能化技術
CN101213527A (zh) * 2005-06-29 2008-07-02 英特尔公司 用于缓存操作的方法、装置和系统
US8019947B2 (en) 2005-10-19 2011-09-13 Intel Corporation Technique for thread communication and synchronization
CN101366004A (zh) * 2005-12-06 2009-02-11 波士顿电路公司 用于带有专用线程管理的多核处理的方法和设备
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
WO2007138124A1 (es) * 2006-05-30 2007-12-06 Intel Corporation Método aparato y sistema aplicado en un protocolo de coherencia de una memoria cache
US20080046684A1 (en) * 2006-08-17 2008-02-21 International Business Machines Corporation Multithreaded multicore uniprocessor and a heterogeneous multiprocessor incorporating the same
US7610448B2 (en) 2006-12-27 2009-10-27 Intel Corporation Obscuring memory access patterns
US8806138B1 (en) * 2007-02-20 2014-08-12 Pixar Dynamic dependencies and parameterizations for execution and caching
WO2008155829A1 (ja) 2007-06-20 2008-12-24 Fujitsu Limited 情報処理装置,キャッシュメモリ制御装置およびメモリアクセス順序保証方法
US8024525B2 (en) * 2007-07-25 2011-09-20 Digi-Data Corporation Storage control unit with memory cache protection via recorded log
US7945739B2 (en) * 2007-08-28 2011-05-17 International Business Machines Corporation Structure for reducing coherence enforcement by selective directory update on replacement of unmodified cache blocks in a directory-based coherent multiprocessor
US9292069B1 (en) * 2007-11-12 2016-03-22 Nvidia Corporation System and method for controlling mode switches in hardware
JP2009157608A (ja) 2007-12-26 2009-07-16 Nec Corp キャッシュメモリシステムおよびキャッシュメモリ制御方法
US9928072B1 (en) 2008-05-02 2018-03-27 Azul Systems, Inc. Detecting and recording atomic execution
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
US8364844B2 (en) * 2009-11-13 2013-01-29 International Business Machines Corporation Deadlock-free class routes for collective communications embedded in a multi-dimensional torus network
US8739164B2 (en) * 2010-02-24 2014-05-27 Advanced Micro Devices, Inc. Automatic suspend atomic hardware transactional memory in response to detecting an implicit suspend condition and resume thereof
US8825982B2 (en) * 2010-06-10 2014-09-02 Global Supercomputing Corporation Storage unsharing
JP5429396B2 (ja) 2010-10-05 2014-02-26 富士通株式会社 情報処理装置、情報処理プログラム、および情報処理方法
US9417855B2 (en) 2011-09-30 2016-08-16 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 (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011158320A1 (ja) * 2010-06-14 2011-12-22 富士通株式会社 マルチコアプロセッサシステム、キャッシュコヒーレンシ制御方法、およびキャッシュコヒーレンシ制御プログラム
JP5360299B2 (ja) * 2010-06-14 2013-12-04 富士通株式会社 マルチコアプロセッサシステム、キャッシュコヒーレンシ制御方法、およびキャッシュコヒーレンシ制御プログラム
US9390012B2 (en) 2010-06-14 2016-07-12 Fujitsu Limited Multi-core processor system, cache coherency control method, and computer product

Also Published As

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

Similar Documents

Publication Publication Date Title
JP3661614B2 (ja) キャッシュメモリ制御方法及びマルチプロセッサシステム
JP3632635B2 (ja) マルチスレッド実行方法及び並列プロセッサシステム
US9513904B2 (en) Computer processor employing cache memory with per-byte valid bits
JP5118652B2 (ja) アウトオブオーダープロセッサにおけるトランザクショナルメモリ
US9430166B2 (en) Interaction of transactional storage accesses with other atomic semantics
US8185700B2 (en) Enabling speculative state information in a cache coherency protocol
TWI391857B (zh) 處理非同步管線之資料快取失誤亂序之裝置及方法
US9798577B2 (en) Transactional storage accesses supporting differing priority levels
US20110208921A1 (en) Inverted default semantics for in-speculative-region memory accesses
US6272602B1 (en) Multiprocessing system employing pending tags to maintain cache coherence
US20080005504A1 (en) Global overflow method for virtualized transactional memory
PL178832B1 (pl) Sposób utrzymywania spójności pamięci w systemie komputerowym
US10108464B2 (en) Managing speculative memory access requests in the presence of transactional storage accesses
US11231931B1 (en) Mechanism for mitigating information leak via cache side channels during speculative execution
CN111201518B (zh) 用于管理能力元数据的设备和方法
US20130268735A1 (en) Support for speculative ownership without data
US20210011729A1 (en) Managing Commit Order for an External Instruction Relative to Queued Instructions
US7519775B2 (en) Enforcing memory-reference ordering requirements at the L2 cache level
JP3550092B2 (ja) キャッシュ装置及び制御方法
JPH0340047A (ja) キヤツシユ・ライン・ストア方法
US9311241B2 (en) Method and apparatus to write modified cache data to a backing store while retaining write permissions
US6976130B2 (en) Cache controller unit architecture and applied method
US20080104335A1 (en) Facilitating load reordering through cacheline marking
CN117478089B (zh) 存数指令执行方法、装置及电子设备
JPH08137748A (ja) コピーバックキャッシュを有するコンピュータ及びコピーバックキャッシュ制御方法

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