JP2003030050A - マルチスレッド実行方法及び並列プロセッサシステム - Google Patents

マルチスレッド実行方法及び並列プロセッサシステム

Info

Publication number
JP2003030050A
JP2003030050A JP2001218158A JP2001218158A JP2003030050A JP 2003030050 A JP2003030050 A JP 2003030050A JP 2001218158 A JP2001218158 A JP 2001218158A JP 2001218158 A JP2001218158 A JP 2001218158A JP 2003030050 A JP2003030050 A JP 2003030050A
Authority
JP
Japan
Prior art keywords
thread
execution
processor
cache line
execution unit
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
JP2001218158A
Other languages
English (en)
Other versions
JP3632635B2 (ja
Inventor
Hiroshi Osawa
拓 大澤
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 JP2001218158A priority Critical patent/JP3632635B2/ja
Priority to US10/196,613 priority patent/US7082601B2/en
Priority to GB0216756A priority patent/GB2382181B/en
Publication of JP2003030050A publication Critical patent/JP2003030050A/ja
Application granted granted Critical
Publication of JP3632635B2 publication Critical patent/JP3632635B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)

Abstract

(57)【要約】 【課題】 プロセッサ資源の有効活用が可能でスレッド
並列度を高めることができるマルチスレッド実行方法及
び並列プロセッサシステムを提供する。 【解決手段】 単一のプログラムを複数のスレッドに分
割し複数のスレッド実行部1-0 〜1-3 で並列に実行する
並列プロセッサシステムにおいて、各スレッド実行部1-
0 〜1-3 をバス4で相互に接続し、個々のスレッド実行
部から任意の他のスレッド実行部への子スレッドのフォ
ークを可能にする。個々のスレッド実行部1-0 〜1-3
を、フォーク可能なフリー状態、スレッドを実行してい
るビジー状態、ターム後で確定前のスレッドを持つター
ム状態の3つの状態で管理する。新たなスレッドをフォ
ークする際、フリー状態のスレッド実行部が存在しない
場合、ターム状態のスレッド実行部が持つスレッドをそ
の直後の子スレッドへマージして当該スレッド実行部を
フリー状態にし、新たなスレッドをフォークする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は単一のプログラムを
複数のスレッドに分割して複数のプロセッサにより並列
に実行する並列プロセッサシステムに関し、特にターム
後で確定前のスレッドをもつプロセッサへのフォークを
可能にした並列プロセッサシステムに関する。
【0002】
【従来の技術】単一のプログラムを並列プロセッサシス
テムで並列に処理する手法として、プログラムをスレッ
ドと呼ぶ命令流に分割して複数のプロセッサで並列に実
行するマルチスレッド実行方法があり、この方法を記載
した文献として、特開平10−27108号公報(以
下、文献1と称す)、「On−Chip Multip
rocessor指向 制御並列アーキテクチャMUS
CATの提案」(並列処理シンポジウムJSPP97論
文集、情報処理学会、pp.229−236、May
1997)(以下、文献2と称す)、特開平10−78
880号公報(以下、文献3と称す)、「非数値計算プ
ログラムのスレッド間命令レベル並列を利用するプロセ
ッサ・アーキテクチャSKY」(並列処理シンポジウム
JSPP98論文集、情報処理学会、pp.87−9
4、平成10年6月)(以下、文献4と称す)、「Mu
ltiscalar Processor」(G.S.
Sohi,S.E.Breach and T.N.V
ijaykumar,The 22nd Intern
ational Symposium on Comp
uter Architecture,IEEE Co
mputer SocietyPress,1995,
ページ414−425)(以下、文献5と称す)等があ
る。以下、これらの文献に記載された従来の技術につい
て説明する。
【0003】一般にマルチスレッド実行方法において、
他のプロセッサ上に新たなスレッドを生成することを、
スレッドをフォーク(fork)すると言い、フォーク
動作を行った側のスレッドを親スレッド、生成された新
しいスレッドを子スレッド、スレッドをフォークする箇
所をフォーク点、子スレッドの先頭箇所をフォーク先ア
ドレスまたは子スレッドの開始点と呼ぶ。文献1〜4で
は、スレッドのフォークを指示するためにフォーク点に
フォーク命令が挿入される。フォーク命令にはフォーク
先アドレスが指定され、フォーク命令の実行によりその
フォーク先アドレスから始まる子スレッドが他プロセッ
サ上に生成され、子スレッドの実行が開始される。ま
た、スレッドの処理を終了させるターム(term)命
令と呼ばれる命令が用意されており、各プロセッサはタ
ーム命令を実行することによりスレッドの処理を終了す
る。
【0004】図15にマルチスレッド実行方法の処理の
概要を示す。同図(a)は3つのスレッドA、B、Cに
分割された単一のプログラムを示す。このプログラムを
単一のプロセッサで処理する場合、同図(b)に示すよ
うに1つのプロセッサPEがスレッドA、B、Cを順番
に処理していく。これに対して文献1〜5のマルチスレ
ッド実行方法では、同図(c)に示すように、1つのプ
ロセッサPE1にスレッドAを実行させ、プロセッサP
E1でスレッドAを実行している最中に、スレッドAに
埋め込まれたフォーク命令によってスレッドBを他のプ
ロセッサPE2に生成し、プロセッサPE2においてス
レッドBを実行させる。また、プロセッサPE2はスレ
ッドBに埋め込まれたフォーク命令によってスレッドC
をプロセッサPE3に生成する。プロセッサPE1、P
E2はそれぞれスレッドB、Cの開始点の直前に埋め込
まれたターム命令によってスレッドの処理を終了し、プ
ロセッサPE3はスレッドCの最後の命令を実行する
と、その次の命令(一般にはシステムコール命令)を実
行する。このように複数のプロセッサでスレッドを同時
に並行して実行することにより、逐次処理に比べて性能
の向上が図られる。
【0005】従来の他のマルチスレッド実行方法とし
て、図15(d)に示すように、スレッドAを実行して
いるプロセッサPE1からフォークを複数回行うことに
より、プロセッサPE2にスレッドBを、またプロセッ
サPE3にスレッドCをそれぞれ生成するマルチスレッ
ド実行方法も存在する。この図15(d)のモデルに対
して、同図(c)に示したようにスレッドはその生存中
に高々1回に限って有効な子スレッドを生成することが
できるという制約を課したマルチスレッド実行方法をフ
ォーク1回モデルと呼ぶ。本発明はこのようなフォーク
1回モデルを前提とする。フォーク1回モデルでは、ス
レッド管理の大幅な簡略化が可能となり、現実的なハー
ドウェア規模でスレッド管理部のハードウェア化が実現
できる。また、個々のプロセッサは子スレッドを生成す
る他プロセッサが1プロセッサに限定される。このため
文献1〜4では、隣接するプロセッサを単方向にリング
状に接続した並列プロセッサシステムを使ってマルチス
レッド実行を行っている。
【0006】従来の並列プロセッサシステムでは、個々
のプロセッサはフリー状態、ビジー状態の2種類の状態
で管理される。フリー状態は、プロセッサ資源が解放さ
れており、何時でも新たなスレッドの実行を開始できる
状態である。プロセッサを単方向にリング状に接続した
並列プロセッサシステムでは、或るプロセッサからフォ
ーク要求があった場合、その隣接プロセッサがフリー状
態である場合に限って子スレッドのフォークが行われ
る。フリー状態のプロセッサがスレッドの実行を開始す
るとビジー状態に遷移し、そのスレッドの実行が終了し
スレッド管理部で終了許可が得られるとフリー状態に戻
る。スレッド管理部で終了許可が得られることを条件と
しているのは、逐次的な実行順序関係を持つ複数のスレ
ッドを並列に実行する際、子スレッドは親スレッドが終
了しなければ終了できないという制約があり、この制約
をスレッドの生成、終了を管理するスレッド管理部で保
証するためである。
【0007】子スレッドをフォークした場合、親スレッ
ドから子スレッドへのレジスタ継承が必要になる。この
レジスタ継承に関しては、一般に2通りの方式がある。
1つは、文献1〜3の並列プロセッサシステムで採用さ
れているように、親スレッドのフォーク時点のレジスタ
ファイルの内容だけを継承対象とし、フォーク後に更新
されたレジスタは継承しない方式である。もう1つは、
文献4、5の並列プロセッサシステムで採用されている
ように、フォーク後に更新されたレジスタも継承対象と
する方式である。前者をフォーク時レジスタ転送方式、
後者をフォーク後レジスタ転送方式と呼ぶ。
【0008】マルチスレッド実行方法では、実行の確定
した先行スレッドを並列に実行することを基本とする
が、実際のプログラムでは実行の確定するスレッドが充
分に得られない場合も多い。また、動的に決定される依
存やコンパイラ解析能力の限界等により並列化率が低く
抑えられ所望の性能が得られない可能性が生じる。この
ためスレッド並列処理では、スレッド間の順序関係に起
因するメモリ依存関係に考慮し、プログラムの正しい実
行結果を保証しつつ、スレッド間の順序関係によらずに
スレッドの実行を並列に行うことで、プログラム実行を
高速化するというスレッド単位の非プログラム順序実行
が採用されている。
【0009】スレッド単位の非プログラム順序実行にお
いても、正しいプログラムの実行結果を得るためには、
スレッドが含む命令間の依存関係の解消や保証が必要で
ある。しかしながら、命令単位の非プログラム順序実行
と同様に、特にメモリに関する正依存関係に対しては、
本質的にプログラム順序で実行する必要があり、かつ、
確定的にプログラム順序実行を行うと、非プログラム順
序実行の実行性能向上の効果が十分得られないという問
題がある。特に、スレッド単位の非プログラム順序実行
では、複数の命令からなるスレッド単位で、非プログラ
ム順序実行が妨げられるので、より問題は深刻である。
この問題への対応としては、命令単位の非プログラム順
序実行と同様に、データ依存投機実行が有効である。す
わなち、スレッドが含む命令間の正依存関係の有無が判
明するよりも以前に、正依存関係が存在しないと仮定し
て、投機的にスレッドの非プログラム順序実行を行う、
スレッド単位のデータ依存投機実行である。
【0010】一方、メモリに関する逆依存関係及び出力
依存関係に対しては、命令単位の非プログラム順序実行
と同様に、ストア命令が書き込みを行うデータを、プロ
セッサに固有のバッファやメモリに一時的に格納するな
どの対応で、逆依存関係あるいは出力依存関係を解消し
て、非プログラム順序実行することが可能となる。
【0011】例えば、それぞれが固有のキャッシュメモ
リを備える複数のプロセッサから構成される並列プロセ
ッサシステムにおけるスレッド並列処理に関して、例え
ば特許第3139392号公報(以下、文献6と称す)
に、メモリに関する逆依存関係及び出力依存関係を解消
するキャッシュメモリの制御方式が開示されている。ま
た、メモリに関する逆依存関係及び出力依存関係に加え
て、正依存関係にも対応するキャッシュメモリの制御方
式の例として、S.Gopal,T.N.Vijaykumar, J.E.Smith,
G.S.Sohi らによる論文 "Speculative Versioning Cach
e", In Proceedings of the 4th International Sympos
ium on High-Performance Computer Architecture,Febr
uary 1998. (以下、文献7と称す)がある。
【0012】その他、文献2に記載のMUSCATで
は、スレッド間の同期命令など、スレッドの並列動作を
柔軟に制御するための専用命令が数多く用意されてい
る。
【0013】
【発明が解決しようとする課題】隣接するプロセッサを
単方向にリング状に接続した並列プロセッサシステムは
ハードウェアを簡素化できる利点を有するが、スレッド
の粒度が異なる場合などにプロセッサ資源を有効に利用
できず、スレッドの並列度が低下するという課題があ
る。図16にその例を示す。同図(a)に示すように、
スレッドの粒度が比較的小さく略均一であると、スレッ
ドth0→スレッドth1→スレッドth2→スレッド
th3と順次に子スレッドのフォークが行われ、最後の
プロセッサPE3が子スレッドをフォークする時点で隣
接プロセッサPE0がフリー状態になっている確率が高
い。このため、スレッドth3から子スレッドth4を
フォークできる。同様に、このスレッドth4から隣接
プロセッサPE1に子スレッドth5をフォークでき、
高い並列度が確保できる。しかし、例えばスレッドth
0の粒度が他のスレッドに比べて大きいと、図16
(b)に示すように、プロセッサPE3が子スレッドを
フォークする時点で隣接プロセッサPE0はスレッドt
h0を実行中で未だビジー状態にあるためフォークが行
えず、スレッドの並列度が低下する。
【0014】他方、文献1の図3に示される並列化プロ
セッサシステムでは、複数のプロセッサを共通バスで相
互に接続することにより、個々のプロセッサから子スレ
ッドをフォークする他プロセッサを隣接プロセッサに限
定しない構成を採用している。しかし、個々のプロセッ
サの状態をフリー状態とビジー状態で管理し、フリー状
態のプロセッサの中から子スレッドをフォークするプロ
セッサを選択するようにしており、然も図16(b)の
プロセッサPE1のように親スレッドth0が未だ終了
していないスレッドth1を実行しているプロセッサは
ビジー状態と管理している。従って、プロセッサPE3
のスレッドth3からプロセッサPE1に子スレッドを
フォークすることはできない。
【0015】また、スレッドth1が投機スレッドの場
合、プロセッサPE1の資源を解放する際にスレッドt
h1の処理結果の取り扱いが問題となる。何故なら、ス
レッドth1は親スレッドth0から取り消される可能
性があり、スレッドth1の処理結果をメインメモリに
書き戻すことはできず、また、スレッドth2等のスレ
ッドth1の子スレッドはスレッドth1の処理結果を
引き継ぐ必要があるためスレッドth1の処理結果をキ
ャンセルすることはできないからである。
【0016】本発明はこのような事情に鑑みて提案され
たものであり、その目的は、プロセッサ資源の有効活用
が可能でスレッド並列度を高めることができる新規なマ
ルチスレッド実行方法及び並列プロセッサシステムを提
供することにある。
【0017】
【課題を解決するための手段】本発明は、単一のプログ
ラムを複数のスレッドに分割し複数のスレッド実行部で
並列に実行するマルチスレッド実行方法及び並列プロセ
ッサシステムにおいて、ターム後で確定前のスレッドを
持つスレッド実行部の前記スレッドをその直後の子スレ
ッドへマージし、前記スレッド実行部へ新たなスレッド
をフォークすることを基本とする。より具体的には、個
々のスレッド実行部を、フォーク可能なフリー状態、ス
レッドを実行しているビジー状態、ターム後で確定前の
スレッドを持つターム状態の3つの状態で管理し、新た
なスレッドをフォークする際、フリー状態のスレッド実
行部が存在しない場合、ターム状態のスレッド実行部が
持つスレッドをその直後の子スレッドへマージして当該
スレッド実行部をフリー状態にし、新たなスレッドをフ
ォークする。これにより、プロセッサ資源の有効活用が
可能になり、スレッド並列度を高めることができる。
【0018】ターム後で確定前のスレッドの仮実行結果
の取り扱いに関しては、例えば、ターム状態のスレッド
実行部が持つスレッドをその直後の子スレッドへマージ
する際、ターム状態のスレッド実行部の仮実行用バッフ
ァに保存されている仮実行結果を前記子スレッドを実行
するスレッド実行部の仮実行用バッファへ転送すること
で対処する。また、より効率を高めるために、個々のス
レッド実行部毎に仮実行用バッファを兼ねるキャッシュ
メモリを備え、前記キャッシュメモリの各キャッシュラ
イン毎に、ターム後で確定前のスレッドが生成したデー
タと前記マージ後に新たに生成されたスレッドが生成し
たデータとを区別するバージョン情報を保持し、各スレ
ッド実行部のキャッシュメモリは、他のスレッド実行部
からのアクセスに対して、前記バージョン情報とスレッ
ドの逐次実行順序とを考慮した選択的な応答を行うこと
で対処する。また、各スレッド実行部で実行されるスレ
ッドが自身のキャッシュメモリに書き込みを行う際、書
き込み対象となるキャッシュラインのバージョン情報が
自スレッドのバージョンより古い場合、当該キャッシュ
ラインのバージョンが親スレッドの終了に応じて適宜変
更されて自スレッドのバージョンに一致するまで待ち合
わせを行うことで対処する。
【0019】
【作用】ターム後で確定前のスレッドを持つスレッド実
行部は、従来の並列プロセッサシステムではビジー状態
として管理されていたが、本発明ではターム状態として
管理し、ビジー状態と区別する。そして、フリー状態の
スレッド実行部が1つも存在しない場合には、ターム状
態のスレッド実行部のスレッドをその直後の子スレッド
へマージすることにより、当該スレッド実行部をフリー
状態にし、新たなスレッドをフォークする。例えば図1
6(b)と同様な状況を想定した図1の実行シーケンス
において、プロセッサPE3が子スレッドをフォークす
る時点で他の全てのプロセッサPE0、PE1、PE2
がビジー状態にあるため、従来の並列プロセッサシステ
ムではフォークは行えないが、本発明では、プロセッサ
PE1のターム後で確定前のスレッドth1をその直後
の子スレッドth2にマージすることにより、フリー状
態となったプロセッサPE1にスレッドth3からスレ
ッドth4をフォークすることが可能になる。
【0020】
【発明の実施の形態】次に本発明の実施の形態の例につ
いて図面を参照して詳細に説明する。
【0021】図2を参照すると、本発明の並列プロセッ
サシステムの一例は、4スレッド並列実行型プロセッサ
であり、4個のスレッド実行部1−i(i=0〜3)が
第1のバス2及び第2のバス4に接続され、第1のバス
2にはスレッドの生成、終了を管理するスレッド管理部
3が接続され、第2のバス4には全てのスレッド実行部
1−iで共有のメモリ(メインメモリ)5が接続されて
いる。この例では、4スレッド並列実行型プロセッサを
取り上げたが、8スレッドや16スレッドの並列実行型
プロセッサ等、一般にn(≧2)スレッド並列実行型プ
ロセッサに対して本発明は適用可能である。また、スレ
ッド実行部どうしを相互に接続する通信路(バス4)
は、本実施の形態では共通バス形式としたが、クロスバ
スイッチ等の他の種類の通信路を採用することも可能で
ある。なお、好ましくは、全てのスレッド実行部1−i
はメモリ5及びスレッド管理部3と共に1つの半導体チ
ップ上に集積化される。
【0022】各スレッド実行部1−iは、プロセッサを
含んでいる。各プロセッサは、プログラムカウンタ(以
下、PCと称す)及びレジスタファイルを独立に有し、
PCに従って、メモリ5中のスレッドの命令を同時にフ
ェッチ、解釈、実行する機能を有している。また、各ス
レッド実行部1−iは、スレッド実行の取り消し(キャ
ンセル)が可能なようにスレッドを仮実行状態で実行す
る機能を有している。仮実行状態でスレッドを実行した
際のそのスレッドの処理結果は、仮実行用バッファ(t
emporary buffer)に保存される。仮実
行用バッファとしては、それ専用のバッファを使用する
構成や、個々のプロセッサが独自に有するキャッシュメ
モリを仮実行用バッファとして兼ねる構成などが採用さ
れる。
【0023】各スレッド実行部1−iは、スレッド管理
部3からバス2を通じてターゲットPC値を伴うスレッ
ド開始要求が送信された時点で、スレッドの実行を仮実
行状態で開始する。この時点で当該スレッド実行部1−
iはビジー状態として管理される。スレッドの実行を終
了するスレッド実行部1−iは、スレッド管理部3に対
してバス2を通じてスレッド終了通知を送信する。この
スレッド終了通知は、当該スレッド実行部1−iが最古
親スレッドを実行していた場合にスレッド管理部3で受
理されて当該スレッド実行部1−iはフリー状態として
管理され、プロセッサ1−iにスレッド終了許可が返却
される。プロセッサ1−iはスレッド終了許可を受信し
た時点で仮実行状態を解き、スレッドの実行を終えてプ
ロセッサ資源を解放する。他方、スレッド終了通知を送
信したスレッド実行部1−iで実行されていたスレッド
が最古親スレッドでない場合、スレッド管理部3は当該
スレッド実行部1−iにスレッド終了許可を出さず、当
該スレッド実行部1−iをターム状態として管理する。
ターム状態のスレッド実行部1−iは、その親スレッド
が全て終了するか、または当該スレッド実行部1−iの
スレッドがその直後のスレッドにマージされた時点でフ
リー状態として管理される。
【0024】各スレッド実行部1−iは、スレッド管理
部3を通じて、実行中の親スレッドに存在するフォーク
命令によって他のスレッド実行部1−j(i≠j)に子
スレッドをフォークすることができる。本実施の形態で
は、各スレッド実行部1−iのフォーク先はその隣接す
るスレッド実行部にのみ限定されない。各スレッド実行
部1−iは、子スレッドのフォークを行う際、バス2を
通じてスレッド管理部3に対し、子スレッドのフォーク
先アドレス(開始PC値)を伴うフォーク要求を送信す
る。スレッド管理部3は、フォーク要求を受信すると、
他のスレッド実行部の状態に基づいて、他スレッド実行
部1−jに対するフォークが可能か否かを判定する。そ
の時点でフリー状態のスレッド実行部が存在していれば
直ちにフォーク可能である。また、その時点でフリー状
態のスレッド実行部が存在していなくてもターム状態の
スレッド実行部が存在していれば、ターム状態のスレッ
ド実行部のスレッドをその直後の子スレッドへマージす
ることによって、ターム状態のスレッド実行部をフリー
状態にすることでフォークが可能である。
【0025】フォーク可能ならばフォーク先のスレッド
実行部1−jに対してフォーク先アドレスを伴うスレッ
ド開始要求を送信する一方、フォーク要求元のスレッド
実行部1−iに対しては、フォーク応答を返却する。フ
ォーク応答を受信したスレッド実行部1−iは、フォー
ク先のスレッド実行部1−jのレジスタファイルに対し
て、親スレッドのレジスタファイルの全内容をバス4を
通じてコピーするか、当該子スレッドで必要なレジスタ
の値だけをコピーすることにより、レジスタ継承を行
う。他方、スレッド実行部1−iからのフォーク要求
時、他スレッド実行部1−jに対するフォークが不可能
ならば、スレッド管理部3はその旨を要求元のスレッド
実行部1−iに通知する。スレッド実行部1−iは、例
えばフォークが可能になるまで処理を待ち合わせる。
【0026】図3を参照すると、スレッド管理部3の一
例は、スレッド管理シーケンサ301とスレッド状態テ
ーブル302とから構成される。スレッド状態テーブル
302は、スレッド実行部1−iと1対1に対応する状
態エントリ303−i、親スレッド実行部番号エントリ
304−i及び子スレッド実行部番号エントリ305−
iを有する。個々の状態エントリ303−iは、対応す
るスレッド実行部1−iがビジー状態か、ターム状態
か、フリー状態かを記録するために使用される。個々の
親スレッド実行部番号エントリ304−iは、対応する
スレッド実行部1−iで実行中のスレッドの親スレッド
が実行されている他スレッド実行部の番号を示す。個々
の子スレッド実行部番号エントリ305−iは、対応す
るスレッド実行部1−iで実行中のスレッドの直後の子
スレッドが実行されている他スレッド実行部の番号を示
す。スレッド管理シーケンサ301は、このようなスレ
ッド状態テーブル302を用いて各スレッド実行部1−
iにおけるスレッド生成、スレッド終了を管理する。ス
レッド実行部1−iからフォーク要求、スレッド終了通
知を受信した際のスレッド管理シーケンサ301の処理
例を図4及び図5に示す。
【0027】図4を参照すると、スレッド管理シーケン
サ301は、スレッド実行部1−iからフォーク要求を
受信すると、スレッド状態テーブル302を参照して、
フリー状態のスレッド実行部が存在するか否かを調べる
(ステップS1)。フリー状態のスレッド実行部が存在
した場合、その内から1つのスレッド実行部1−jを選
択し(ステップS2)、スレッド管理テーブル302を
更新する(ステップS3)。具体的には、ステップS2
で選択したスレッド実行部1−jに対応する状態エント
リ303−jをフリー状態からビジー状態に変更し、親
スレッド実行部番号エントリ304−jにフォーク要求
を行ったスレッド実行部1−iの番号を設定する。ま
た、フォーク要求を行ったスレッド実行部1−iに対応
する子スレッド実行部番号エントリ305−iに、ステ
ップS2で選択したスレッド実行部1−jの番号を設定
する。そして、フォーク要求に付随するフォーク先アド
レスを添えたスレッド開始要求をフォーク先のスレッド
実行部1−jに送信すると共に、要求元のスレッド実行
部1−iに対してフォーク応答を送信する(ステップS
4)。
【0028】他方、フリー状態のスレッド実行部が1つ
も存在しなかった場合(ステップS1でNO)、スレッ
ド管理部3は、スレッド状態テーブル302を参照し
て、ターム状態のスレッド実行部が存在するか否かを調
べる(ステップS5)。ターム状態のスレッド実行部が
1つも存在しない場合、子スレッドのフォークは物理的
に不可能なので、その旨をフォーク要求元のスレッド実
行部1−iへ送信する(ステップS8)。一方、ターム
状態のスレッド実行部が存在した場合、その内から1つ
のスレッド実行部1−jを選択し(ステップS6)、こ
の選択したスレッド実行部1−jのスレッドを当該スレ
ッドが生成した子スレッドへマージし、当該スレッド実
行部1−jをフリー状態とする(ステップS7)。そし
て、ステップS2〜S4を実行することにより、今回フ
リー状態にしたスレッド実行部に対する子スレッドのフ
ォークを可能にする。
【0029】ステップS7の処理をより具体的に説明す
る。先ず、ステップS6で選択したスレッド実行部1−
jに対応する状態エントリ303−jをターム状態から
フリー状態に変更する。次に、子スレッド実行部番号エ
ントリ305−jに設定されている番号で特定されるス
レッド実行部1−kに対応する親スレッド実行部番号エ
ントリ304−kに、スレッド実行部1−jに対応する
親スレッド実行部番号エントリ303−jの内容を設定
する。次に、親スレッド実行部番号エントリ305−j
に設定されている番号で特定されるスレッド実行部1−
mに対応する子スレッド実行部番号エントリ305−m
に、スレッド実行部1−jに対応する子スレッド実行部
番号エントリ305−jの内容を設定する。最後に、ス
レッド実行部1−jに対応する子スレッド実行部番号エ
ントリ304−jをNULLにする。これにより、スレ
ッドの管理上、スレッド実行部1−jのスレッドがその
直後の子スレッド実行部へマージされたことになる。
【0030】図3でターム状態になっているスレッド実
行部1−1を例に説明すると、状態エントリ303−1
をターム状態からフリー状態に変更し、子スレッドを実
行しているスレッド実行部1−2の親スレッド実行部番
号エントリ304−2に親スレッド実行部番号エントリ
304−1の内容「0」を設定し、親スレッドを実行し
ているスレッド実行部1−0の子スレッド実行部番号エ
ントリ305−0に子スレッド実行部番号エントリ30
5−1の内容「2」を設定し、子スレッド実行部番号エ
ントリ305−1の内容をNULLにする。
【0031】以上のような処理によって、スレッドの管
理上はスレッド実行部1−jのスレッドがその直後の子
スレッドへマージされたことになるわけであるが、スレ
ッド実行部1−jに残っている仮実行結果の取り扱いが
問題となる。この問題を解決する一つの方法は、スレッ
ド実行部1−jの仮実行バッファの内容を、バス4を通
じて、マージした子スレッドを実行しているスレッド実
行部の仮実行バッファに転送して格納し、スレッド実行
部1−jの仮実行バッファを解放することである。但
し、この方法はデータ転送に伴うオーバヘッドが大きい
ため、性能低下が懸念される。他の方法は、スレッド実
行部1−jの仮実行バッファにおいて、マージしたスレ
ッドの仮実行結果と、当該スレッド実行部1−jで新た
に実行される新スレッドの仮実行結果とを区別して管理
し、マージしたスレッドの仮実行結果はその子スレッド
に有効なデータとして扱うが、当該スレッド実行部1−
jで新たに実行された新スレッドの仮実行結果はマージ
したスレッドから当該新スレッドまでの間のスレッドで
は無効なデータとして扱う方法である。この後者の方法
については後に詳細な実施例を挙げて説明する。
【0032】図5を参照すると、スレッド管理シーケン
サ301は、何れかのスレッド実行部1−iからスレッ
ド終了通知を受信すると、スレッド状態テーブル302
における当該スレッド実行部1−iに対応する親スレッ
ド実行部番号エントリ304−iがNULLにクリアさ
れているか否かによって、当該スレッド実行部1−iで
実行中のスレッドの親スレッドが存在しているか否かを
判定する(ステップS11)。親スレッドが存在してい
る場合、当該スレッド実行部1−iに対応する状態エン
トリ303−iをビジー状態からターム状態に更新する
(ステップS12)。
【0033】他方、親スレッドが存在していない場合、
ステップS13でスレッド状態テーブル302を更新す
る。ここでは、当該スレッド実行部1−iに対応する状
態エントリ303−iをビジー状態からフリー状態に変
更し、その子スレッド実行部番号エントリ305−iが
NULLでなければその値で特定される子スレッドを実
行しているスレッド実行部1−jに対応する親スレッド
実行部番号エントリ304−jをNULLにクリアし、
子スレッド実行部番号エントリ305−iもNULLに
クリアする。また、親スレッド実行部番号エントリ30
4−jをNULLにしたスレッド実行部1−jの状態エ
ントリ303−jがターム状態なら、このスレッド実行
部1−jもフリー状態にする。具体的には、状態エント
リ303−jをフリー状態に設定し、その子スレッド実
行部番号エントリ305−jがNULLでなければその
値で特定される子スレッドを実行しているスレッド実行
部1−kに対応する親スレッド実行部番号エントリ30
4−kをNULLにクリアし、子スレッド実行部番号エ
ントリ305−kもNULLにクリアする。以下、同様
に親スレッドの終了によりフリー状態にできる全てのス
レッド実行部をフリー状態に変更する。そして、次のス
テップS14では、フリー状態に変更した全てのスレッ
ド実行部に対してスレッド終了許可を送信する。
【0034】例えば図3で、スレッド実行部1−0から
スレッド終了通知が出された場合、状態エントリ303
−0がフリー状態に変更され、子スレッドを実行してい
たスレッド実行部1−1の親スレッド実行部番号エント
リ304−1がNULLに設定される。また、状態エン
トリ303−1がターム状態なので、状態エントリ30
3−1がフリー状態に変更され、子スレッドを実行して
いるスレッド実行部1−2の親スレッド実行部番号エン
トリ304−1がNULLに設定される。この場合、ス
レッド終了通知は、スレッド実行部1−0とスレッド実
行部1−1に送信される。
【0035】以上のように本実施の形態によれば、個々
のスレッド実行部をフリー状態、ビジー状態、ターム状
態の3つの状態の何れかで管理し、何れかのスレッド実
行部から子スレッドのフォークが要求されたとき、フリ
ー状態のスレッド実行部が存在しなければ、ターム状態
のスレッド実行部で実行終了しているが未確定のスレッ
ドをその直後の子スレッドにマージすることによりフリ
ー状態のスレッド実行部を動的に生成し、そのスレッド
実行部に対するフォークを可能にしたことにより、プロ
セッサ資源の有効活用が可能になり、スレッド並列度を
高めることができる。
【0036】次に、直後の子スレッドへマージされたス
レッドの仮実行結果を効率良く扱うことができる実施例
について詳細に説明する。なお、以下では、実行は終了
しているが親スレッドが未だ終了していない等により処
理が確定していないスレッドのことを、term後で確
定前のスレッドと呼ぶ。また、term後で確定前のス
レッドをもつプロセッサへのフォークを、空きフォーク
と呼ぶ。空きフォークは、term後で確定前のスレッ
ドを直後の子スレッドへマージし、該フォークによる新
スレッドを実行することである。
【0037】〔キャッシュメモリにおける問題点〕先
ず、個々のプロセッサが固有に備えるキャッシュメモリ
を仮実行用バッファとして兼用する場合の問題点を、ス
レッド実行シーケンス例を示す図6を参照して説明す
る。図6は以下のような実行シーケンスを示している。
【0038】(1)プロセッサP0上のスレッドからプ
ロセッサPiにスレッドth0がフォークされ、このス
レッドth0からスレッドc00、c01、…、c0n
が順次に複数の他プロセッサ上にフォークされる。スレ
ッドc00〜c0nは、スレッドth0から見て子スレ
ッドである。 (2)スレッドc0nのフォーク時、プロセッサPiで
はスレッドth0はタームしているが、親スレッドがタ
ームしていないので、スレッドth0はterm後で確
定前のスレッドである。このため、スレッドth0が直
後の子スレッドc00にマージされ、このマージにより
フリー状態となったプロセッサPiにスレッドc0nか
ら新スレッドth1がフォークされている。以後、この
新スレッドth1からスレッドc10、c11、…、c
1nが順次にフォークされる。スレッドc10〜c1n
は、新スレッドth1から見て子スレッドである。 (3)スレッドc1nのフォーク時、プロセッサPiで
はスレッドth1はタームしているが、親スレッドがタ
ームしていないので、スレッドth1はterm後で確
定前のスレッドである。このため、スレッドth1が直
後の子スレッドc10にマージされ、このマージにより
フリー状態となったプロセッサPiにスレッドc1nか
ら新スレッドth2がフォークされている。以後、この
新スレッドth2からスレッドc20、c21、…、c
2nが順次にフォークされる。スレッドc20〜c2n
は、新スレッドth2から見て子スレッドである。 (4)スレッドc2nのフォーク時、プロセッサPiで
はスレッドth2はタームしているが、親スレッドがタ
ームしていないので、スレッドth2はterm後で確
定前のスレッドである。このため、スレッドth2が直
後の子スレッドc20にマージされ、このマージにより
フリー状態となったプロセッサPiにスレッドc2nか
ら新スレッドth3がフォークされている。
【0039】このようなシーケンスが実行されている場
合、term後で確定前のスレッドth0が生成しプロ
セッサPiのキャッシュメモリ上に格納されているデー
タは、スレッドth0の子スレッドc00〜c0nにと
って有効である。しかし、空きフォークにより生成され
たスレッドth1が生成しプロセッサPiのキャッシュ
メモリ上に格納されているデータは、スレッドth0か
らスレッドth1までのスレッドth0の子スレッドc
00〜c0nに対しては、プログラム順序で後であるた
め、有効ではない。従って、スレッドth0が生成した
データとスレッドth1が生成したデータは、スレッド
c00〜c0nがすべてタームするまで区別する必要が
ある。同様にスレッドth2、th3が生成したデータ
の区別も必要である。
【0040】しかし、例えばスレッドth0は確定前な
ので、スレッドth0が生成したデータをメインメモリ
へ書き戻すことはできない。また、スレッドth0が生
成したデータを直後の子スレッドc00を実行するプロ
セッサのキャッシュメモリへ転送し格納する方法では、
そのオーバヘッドは大きく、性能低下等が発生するとい
う問題がある。
【0041】〔解決する手段〕そこで、本実施例ではこ
の問題を以下のようにして解決する。 1.同一キャッシュ上でデータの複数のバージョンを区
別し保持する。そのために、キャッシュライン毎にバー
ジョンを示す記憶手段(vid)を備え、キャッシュラ
イン毎にバージョンを管理する。新しいバージョンは、
空きフォークにより生成されて現在実行しているスレッ
ドがストア命令等で書き込みを行った場合に発生する。
それ以外では発生しない。例えば、プロセッサPiのキ
ャッシュ上に、スレッドth0が生成したバージョン、
スレッドth1が生成したバージョン、…、を区別して
保持する。
【0042】2.他プロセッサ(他スレッド) からのア
クセスに対して、バージョンを参照して、スレッド順序
を考慮した選択的な応答を行う。例えば、スレッドth
0からスレッドth1までのスレッドth0の子スレッ
ドc00〜c0nからのアクセスには、スレッドth0
のバージョンのキャッシュラインは応答するが、スレッ
ドth1以降のバージョンのキャッシュラインは応答し
ない。スレッドth1からスレッドth2までのスレッ
ドth1の子スレッドc10〜c1nからのアクセスに
は、スレッドth0,th1のバージョンのキャッシュ
ラインは応答するが、スレッドth2以降のバージョン
のラインは応答しない。
【0043】3.バージョンの区別が不要になった際に
バージョンの縮退を行う。例えば、スレッドth0から
スレッドth1までのスレッドth0の子スレッドc0
0〜c0nがすべてタームしたら、スレッドth0のバ
ージョンとスレッドth1のバージョンの区別は不要な
ので、その時点でスレッドth0とスレッドth1のバ
ージョンを縮退する。
【0044】4.バージョンを参照した選択的なスレッ
ド(データ) の確定を行う。例えば、スレッドth0が
確定した場合、スレッドth0のバージョンのキャッシ
ュラインのみを確定する。スレッドth1,th2のバ
ージョンのラインは未確定(投機) のままである。
【0045】5.同アドレスで異なるバージョンのキャ
ッシュラインの生成については、以下の3通りの方式の
何れかで対処することができる。 a);同アドレスで異なるバージョンのキャッシュライ
ンの生成を許可する。この場合、バージョンの縮退時に
複数の(同バージョンで) 同アドレスのラインが発生し
てしまう場合がある。そのため縮退時に、縮退の対象の
バージョンのうち、古いバージョンのラインを無効化す
る処理を行う。 b);同アドレスで異なるバージョンのキャッシュライ
ンを生成しない。空きフォークにより生成されたスレッ
ドが書き込みを行う際に、その対象のラインが古いバー
ジョンをもち、かつ自プロセッサが前に書き込みを行っ
たライン(dirty なライン)の場合、前記古いバージョ
ンが現在のバージョンに縮退されるまで書き込みの実行
を遅らせて、複数のバージョンの発生を回避する。 c);bと同様に同アドレスで異なるバージョンのキャ
ッシュラインを生成しないが、空きフォークにより生成
されたスレッドが書き込みを行う際に、その対象のライ
ンが古いバージョンをもつdirty なラインの場合、該ラ
インを直後の子スレッドを実行するプロセッサのキャッ
シュメモリに転送後、該ラインを無効化し、その後書き
込みを実行することで、複数のバージョンの発生を回避
する。 d);bと同様に同アドレスで異なるバージョンのキャ
ッシュラインを生成しないが、空きフォークにより生成
されたスレッドが書き込みを行う際に、その対象のライ
ンが古いバージョンをもつdirty なラインの場合、その
まま書き込みを実行するとともに、前記古いバージョン
のデータを破棄したこと記憶しておくことで、複数のバ
ージョンの発生を回避する。前記破棄した古いバージョ
ンのデータに対して、他のプロセッサからアクセスがあ
った場合には、前記破棄した古いバージョンのデータを
生成したスレッド及びそのスレッドのすべての子スレッ
ドの実行を取り消し、その後取り消したスレッドの再実
行を行うことで、データの依存関係を保証する。本方式
は、例えばキャッシュライン毎に古いバージョンのデー
タを破棄した旨を示す記憶手段を備えることで実現でき
る。
【0046】〔実施例〕以上のような方針に添った実施
例の概略を示せば以下のようになる。
【0047】先ず、キャッシュラインは、有効フラグ、
変更フラグ、アドレスタグ、データエントリ等に加え
て、少なくともデータのバージョンを示すバージョン識
別子vidを備える。バージョン識別子vidは自プロ
セッサを除くマルチプロセッサシステムが備えるプロセ
ッサ数分のビット数をもち、それぞれが自プロセッサを
除く他プロセッサに対応する。
【0048】ストア命令等の書き込みを行った場合、そ
の対象ラインのバージョン識別子vidがセットされ
る。セットされるビットは、マージされたスレッドを除
く該スレッドのすべての親スレッドを実行するプロセッ
サに対応するビットであり、それ以外のビットはリセッ
トされる。
【0049】あるスレッドがタームした場合、該スレッ
ドを実行していたプロセッサを除くすべてのプロセッサ
のキャッシュメモリのすべてのキャッシュラインのバー
ジョン識別子vidにおいて、該スレッドを実行してい
たプロセッサに対応するビットをリセットする。この処
理は、例えばバージョン識別子vidを一括リセット機
能付きメモリセルで構成することで容易に実現できる。
【0050】すわなち、バージョン識別子vidはその
時点での、自キャッシュラインを生成したスレッドのす
べての親スレッドのうち、いまだタームしていない親ス
レッドを実行するプロセッサを示している。あるプロセ
ッサPi上で実行された2つのスレッドにより生成され
た異なるバージョンのキャッシュラインは、その2つの
スレッドのプログラム順序上で間のスレッドがすべてタ
ームした時点で、バージョン識別子vidは同じバージ
ョンを示し、すなわち、縮退が行われたことになる。
【0051】他プロセッサから自キャッシュメモリにア
クセスがあった場合にキャッシュヒットしたとき、バー
ジョン識別子vidが参照される。バージョン識別子v
idの前記他プロセッサに対応するビットがセットされ
ている場合、自キャッシュラインにとっての親スレッド
からのアクセスと判断できる。その場合、自キャッシュ
ラインのデータはプログラム順序で後に位置し有効では
ないので、前記アクセスに対して自キャッシュメモリか
らは応答しない。
【0052】一方、バージョン識別子vidの前記他プ
ロセッサに対応するビットがリセットされている場合、
自キャッシュラインにとっての子スレッドからのアクセ
スと判断できる。その場合、自キャッシュラインのデー
タはプログラム順序で前に位置し有効であるので、前記
アクセスに対して自キャッシュメモリから適切な応答処
理を行う。
【0053】前記タームによるバージョン識別子vid
のリセットで、バージョン識別子vidのすべてのビッ
トがリセットされた場合、自キャッシュラインのデータ
は少なくとも確定することになる。すなわち、バージョ
ン識別子vidのすべてのビットがリセットされている
キャッシュラインのデータは、メインメモリ等に書き戻
すことができる。
【0054】〔具体例〕次に図7を参照して、4つのプ
ロセッサP0〜P3からなるマルチプロセッサシステム
において、プロセッサP1に注目して本実施例の具体例
を示す。
【0055】図7の(1)において、プロセッサP1上
で実行されているスレッドth0において、アドレスA
に対するストア命令(stA)が実行され、アドレスA
のキャッシュラインのバージョンは100となる。図
中" A、100" はアドレスがAでバージョン識別子v
idの値が100であることを示す。バージョン識別子
vidのそれぞれのビットは左からそれぞれプロセッサ
P0、P2、P3に対応する。すなわち、この時点でス
レッドth0に対してプロセッサP0のみで親スレッド
が実行されているのでバージョン識別子vidには10
0が設定される。
【0056】図7の(2)において、プロセッサP1で
スレッドth0のターム後、スレッドc01から空きフ
ォークによりスレッドth1が生成される。スレッドt
h0はスレッドc00にマージされる。このマージによ
ってデータの転送等の処理は発生しないので、従って、
空きフォークのオーバヘッドは小さい。
【0057】図7の(3)において、スレッドth1で
アドレスBに対するストア命令が実行される。スレッド
th1の親スレッドはプロセッサP0、P2、P3で実
行されているので、アドレスBのキャッシュラインのバ
ージョンは111(図中”B,111”)となる。
【0058】図7の(4)において、プロセッサP3で
実行されているスレッドc01で、アドレスAに対する
ロード命令(ldA)、続いてアドレスBに対するロー
ド命令(ldB)が実行される。ここで上記2つのロー
ド命令ともプロセッサP3のキャッシュメモリにミスす
るとすると、プロセッサP1のキャッシュメモリもアク
セスされる。プロセッサP1のキャッシュメモリに対す
るアクセスにおいてヒットすると、まずアドレスAに対
してはバージョン識別子vidが100であるため、ス
レッドc01はアドレスAのキャッシュラインのバージ
ョンを生成したスレッドth0にとっての子スレッドで
あることが判明し、当該アクセスに対してデータの転送
等のヒット時の応答処理が行われる。一方、アドレスB
に対するアクセスにおいては、アドレスBのキャッシュ
ラインのバージョン識別子vidは111であるため、
スレッドc01はアドレスBのキャッシュラインを生成
したスレッドth1の親スレッドであることが判明し、
当該アクセスに対しては応答しない。このように、他プ
ロセッサからのアクセスに対して、バージョン識別子vi
d を参照するのみで、バージョンを考慮した選択的な応
答を容易に行うことができる。
【0059】図7の(5)において、プロセッサP3で
実行されていたスレッドc01がタームし、その旨がプ
ロセッサP1にも通知される。これにより、プロセッサ
P1のキャッシュメモリの全キャッシュラインのバージ
ョン識別子vidにおいて、プロセッサP3に対応する
ビットがリセットされる。アドレスA及びアドレスBの
キャッシュラインも該当ビットがリセットされ、それぞ
れ100及び110になる。
【0060】図7の(6)において、スレッドth1か
らプロセッサP3に空きフォークが実行され、プロセッ
サP3において、スレッドc10が生成される。これに
よりタームしたスレッドc01はスレッドth1にマー
ジされる。
【0061】図7の(7)において、プロセッサP3で
実行されているスレッドc10で、アドレスAに対する
ロード命令(ldA)、続いてアドレスBに対するロー
ド命令(ldB)が実行される。ここで上記2つのロー
ド命令ともプロセッサP3のキャッシュメモリにミスす
るとすると、プロセッサP1のキャッシュメモリもアク
セスされる。この場合、プロセッサP1のキャッシュメ
モリにおいてヒットすると、アドレスAのラインのバー
ジョン識別子vidは100、アドレスBのラインのバ
ージョン識別子vidは110であるので、共にスレッ
ドc10は子スレッドであることが判明し、今度は共に
当該アクセスに対して応答することになる。このよう
に、他プロセッサからのアクセスに対して、バージョン
識別子vidを参照するのみで、バージョンを考慮した
選択的な応答が行われた。
【0062】図7の(8)において、プロセッサP1に
おいて、スレッドth1のターム後、スレッドc10か
ら空きフォークが実行され、スレッドth2が生成され
る。スレッドth1はスレッドc10にマージされる。
【0063】図7の(9)において、プロセッサP2で
実行されていたスレッドc00がタームし、その旨がプ
ロセッサP1にも通知される。これにより、プロセッサ
P1のキャッシュメモリの全キャッシュラインのバージ
ョン識別子vidにおいて、プロセッサP2に対応する
ビットがリセットされる。アドレスA及びアドレスBの
キャッシュラインも該当ビットがリセットされ、それぞ
れ100及び100になる。すなわち、上記2つのライ
ンは同じバージョンを持つことになる。これは、アドレ
スAのバージョンを生成したスレッドth0からアドレ
スBのバージョンを生成したスレッドth1までの間の
スレッドc00及びc01がこの時点ですべてターム
し、前記2つのバージョンを区別する必要が無くなった
為、スレッドth0のバージョンがスレッドth1のバ
ージョンに縮退されたことに対応する。このように、バ
ージョンの区別が不要になった際のバージョンの縮退が
容易であることも本実施例の特徴である。
【0064】図7の(10)において、スレッドth2
でアドレスCに対するストア命令(stC)が実行され
る。スレッドth2の親スレッドはプロセッサP0、P
3で実行されているので、アドレスCのキャッシュライ
ンのバージョン識別子vidは101にセットされる。
【0065】図7の(11)において、プロセッサP0
において実行されていたスレッドがタームし、それによ
り、プロセッサP1のキャッシュメモリの全キャッシュ
ラインのバージョン識別子vidにおいて、プロセッサ
P0に対応するビットがリセットされる。アドレスA,
B,Cのキャッシュラインも該当ビットがリセットさ
れ、それぞれ000、000及び001になる。すなわ
ち、アドレスA及びBのラインは、バージョン識別子v
idがすべてリセットされ、データが確定したことが判
明する。これは、それぞれのバージョンを生成したスレ
ッドth0及びth1が、その時点で最も古い親のスレ
ッドになったことに対応する。一方、アドレスCのライ
ンのバージョン識別子vidは001であり、アドレス
Cのバージョンを生成したスレッドth2にとっての親
スレッドc10がプロセッサP3に存在していて、デー
タが確定していないことがわかる。このように、本実施
例によれば、バージョン識別子vidを参照するのみ
で、バージョンを考慮した選択的なキャッシュラインの
確定判定を容易に行うことができる。
【0066】〔本実施例の効果〕このように本実施例に
よれば、1つのキャッシュメモリ上に複数のデータのバ
ージョンを管理することにより、スレッドのマージ、空
きフォーク時にデータの転送等のオーバヘッドが生じ
ず、高速なスレッド並列処理が実現できる。
【0067】また、バージョンをその時点での親スレッ
ドを実行するプロセッサで表現することにより、アクセ
スに対するバージョンを考慮した選択的な応答、バージ
ョンの縮退、バージョンを考慮した選択的な確定処理、
等のデータ依存解消処理を容易、低オーバヘッドかつ高
速に実現できる。
【0068】また、他スレッドのタームに応じて、バー
ジョン識別子vidが適切に変更され、バージョンの縮
退が行われるので、空きフォークの回数に制限が存在し
ない。
【0069】また、上記した選択的なアクセス応答や確
定処理に必要な情報はすべてバージョン識別子vidに
記憶されている為、以前にタームし未確定のスレッドや
そのマージ、スレッド順序関係などの情報を別に記憶・
管理する必要がない。
【0070】〔適用例〕次に、上述したキャッシュメモ
リの制御方法を図2の並列プロセッサシステムに適用し
た例について図面を参照しながら詳細に説明する。
【0071】図8はスレッド実行部1−iの構成を示す
ブロック図である。図8を参照すると、スレッド実行部
1−iは、プロセッサ10とキャッシュメモリ11とキ
ャッシュ制御部12とを含み、プロセッサ10はバス2
に接続され、キャッシュ制御部12はバス4に接続され
ている。バス4は、キャッシュ制御に関連するバスとし
て、要求バス13、応答バス14、データバス15を含
んでいる。
【0072】プロセッサ10は、キャッシュメモリ11
及びキャッシュ制御部12と接続され、他のスレッド実
行部のプロセッサと並列にスレッドを実行する。プロセ
ッサ10とスレッド管理部3及び他のスレッド実行部の
プロセッサとはバス2により接続され、スレッドの生
成、スレッド実行の終了や取り消し、スレッド間の順序
関係、等のスレッド実行に関する制御情報が伝達され
る。プロセッサ10は、バス2により伝達されるスレッ
ド制御情報を参照して、自身が実行しているスレッドと
他のプロセッサが実行しているスレッドとの順序関係を
知ることができる。
【0073】キャッシュ制御部12は、要求バス13、
応答バス14及びデータバス15を通じて、他のプロセ
ッサ及びメインメモリ5とメモリ操作命令が対象とする
メモリデータの受渡しを制御する。このとき、プロセッ
サより通知されるスレッドの順序関係を参照し、メモリ
に関する正依存関係、逆依存関係、及び出力依存関係を
考慮して、メモリデータ間の整合性の維持を図る。要求
バス13、応答バス14、データバス15はそれぞれ一
本のバスを各プロセッサで共有してもよいし、プロセッ
サ数分だけ固有のバスを備えてもよい。以下では、要求
バス13、応答バス14、及びデータバス15を総称し
て単にバスとも表記する。
【0074】図9は、キャッシュメモリ11を構成する
キャッシュラインの詳細を示す説明図である。一つのキ
ャッシュラインは、アドレスタグ25によって示される
アドレス範囲にあるデータを保持する。図9を参照する
と、キャッシュメモリを構成するキャッシュラインは、
有効フラグ20、変更フラグ21、共有フラグ22、投
機フラグ23、更新フラグ24、アドレスタグ25、複
数のデータエントリ26、複数のストア・フラグ27、
複数の投機ロード・フラグ28、バージョン識別子(v
id)29、から構成される。
【0075】有効フラグ20は、そのキャッシュライン
が有効であることを示す。有効フラグ20は、キャッシ
ュミスが発生した時など、データをキャッシュメモリに
転送し、キャッシュラインを生成する(リフィルする)
際にセットし、キャッシュラインを入れ換える時など、
キャッシュラインを無効化する際にリセットする。
【0076】変更フラグ21は、そのキャッシュライン
のデータをストア命令等で変更しており、メインメモリ
にあるデータと異なっている(dirty)ことを示
す。変更フラグ21は、ストア命令等のデータの書き込
みを実行した際にセットし、キャッシュラインのメイン
メモリへの書き戻し(ライトバック)を行った際にリセ
ットする。
【0077】共有フラグ22は、そのキャッシュライン
と同アドレスのキャッシュラインを、他のプロセッサに
固有のキャッシュメモリも保持し、データを共有してい
ることを示す。本実施例による共有フラグは、並列プロ
セッサシステムが備えるプロセッサ数分のフラグを備え
ている。すなわち、それぞれのフラグ部分が各プロセッ
サに対応しており、フラグがセットされている場合、該
フラグに対応するプロセッサとデータを共有しているこ
とを示し、フラグがリセットされている場合、該フラグ
に対応するプロセッサとデータを共有していないことを
示す。したがって、共有フラグ22を参照すると、共有
対象のプロセッサを特定することが可能である。共有フ
ラグ22はバスアクセスが行われた際にセットまたはリ
セットされる。詳細には、あるプロセッサがキャッシュ
制御部12を通じてバスアクセスを行った際には、全て
のプロセッサのキャッシュ制御部12には、応答バス1
4を通じてすべてのキャッシュメモリ11のキャッシュ
ライン状態が通知される。このとき、どのプロセッサと
共有しているかが判明するので、共有フラグ22を構成
するフラグのうち、共有しているプロセッサに対応する
フラグをセットし、共有していないプロセッサに対応す
るフラグをリセットする。
【0078】投機フラグ23は、そのキャッシュライン
のデータが投機的なデータを含んでいることを示す。本
実施例による投機フラグは、並列プロセッサシステムが
備えるプロセッサ数分のフラグを備えている。すなわ
ち、それぞれのフラグ部分が各プロセッサに対応してお
り、フラグがセットされている場合、該フラグに対応す
るプロセッサが、データが投機的である原因であること
を示す。したがって、投機フラグ23を参照すると、該
キャッシュラインのデータを投機的にならしめた原因の
プロセッサを特定することが可能である。投機フラグ2
3は、キャッシュラインをリフィルする際、他のプロセ
ッサのキャッシュメモリが保持している投機的なキャッ
シュラインからリフィル・データを得た場合、投機フラ
グ23の前記他のプロセッサに対応するフラグをセット
する。また、自プロセッサが実行するスレッド(以下で
は、自スレッドと表記する)が含む投機的なストア命令
により、投機的なデータでキャッシュラインを更新した
場合、投機フラグ23の自プロセッサに対応するフラグ
をセットする。また、プログラム順序で先行するスレッ
ド(親スレッド)が含む投機的なストア命令により、投
機的なデータでキャッシュラインを更新した場合、投機
フラグ23の前記親スレッドを実行するプロセッサに対
応するフラグ部分をセットする。一方、投機フラグ23
は、自スレッドの投機的な実行が確定して、そのキャッ
シュラインのデータが確定した際にリセットされる。
【0079】更新フラグ24は、プログラム順序で後に
位置するスレッド(子スレッド)により、そのキャッシ
ュラインのデータが更新されたことを示す。すなわち、
そのキャッシュラインのデータは、該プロセッサが実行
する現スレッドには有効であるが、該プロセッサに次に
割り当てられるスレッドには有効でない可能性があるこ
とを意味する。更新フラグ24は、1ビットの更新有効
フラグ24aと、並列プロセッサシステムが備える、自
プロセッサを除くプロセッサ数ビット分の更新対象フラ
グ24bとから構成される。更新有効フラグ24aは更
新フラグ24全体が有効であることを示す。スレッドが
終了した際には、すべての更新有効フラグ24aがセッ
トされるが、別の実施例として、更新対象フラグ24b
のいずれかがセットされている更新フラグ24の更新有
効フラグ24aのみをセットしてもよい。更新有効フラ
グ24aがセットされていて、かつ、更新対象フラグ2
4bのいずれかがセットされている場合、当該キャッシ
ュラインは次に実行されるスレッドでは有効でない可能
性があることが示される。実際に当該キャッシュライン
が有効か否かは、キャッシュミス時などに伴うバス要求
の入出力時にキャッシュ制御部どうしで交換されるキャ
ッシュライン状態によって調べられ、若し有効であれば
更新対象フラグ24bと共に更新有効フラグ24aがリ
セットされる。他方、更新有効フラグ24aがリセット
されているか、更新対象フラグ24bの全てがリセット
されていれば、当該キャッシュラインは次に実行される
スレッドでも有効であることが示される。各更新対象フ
ラグ24bは、それぞれが他のプロセッサに対応し、対
応するプロセッサにより該キャッシュラインが更新され
たことを示す。
【0080】データエントリ26は、そのキャッシュラ
インのメモリデータを保持する。通常、一つのキャッシ
ュラインは、アドレスタグ25が指定するアドレス範囲
を構成する複数のデータエントリを備え、それぞれのデ
ータエントリは、ストア命令等による書き込みの最小の
データ単位である。図9においては、複数のデータエン
トリ26のそれぞれをデータエントリ26a、データエ
ントリ26b、データエントリ26c、データエントリ
26d、…、と表記して区別している。
【0081】ストア・フラグ27は、対応するデータエ
ントリに、自プロセッサがストア命令などで書き込みを
行ったことを示す。図9においては、ストア・フラグ2
7aはデータエントリ26aに、ストア・フラグ27b
はデータエントリ26bに、ストア・フラグ27cはデ
ータエントリ26cに、ストア・フラグ27dはデータ
エントリ26dに、それぞれ対応する。ストア・フラグ
は自プロセッサが書き込みを行った際にセットし、スレ
ッドの実行が終了した際にリセットされる。
【0082】投機ロード・フラグ28は、対応するデー
タエントリに、自プロセッサが投機的な読み出しを行っ
たことを示す。図9においては、投機ロード・フラグ2
8aはデータエントリ26aに、投機ロード・フラグ2
8bはデータエントリ26bに、投機ロード・フラグ2
8cはデータエントリ26cに、投機ロード・フラグ2
8dはデータエントリ26dに、それぞれ対応する。投
機ロード・フラグは投機的な読み出しを行い、かつ読み
出し対象のデータに対して先に書き込みを行っていな
い、すなわち対応するストア・フラグ27がセットされ
ていないならばセットされる。一方、スレッドの投機実
行が確定した際にはリセットされる。
【0083】図9に示したキャッシュラインの実施例で
は、書き込みの最小データ単位に対応するデータエント
リ26a、26b、…、のそれぞれに固有のストア・フ
ラグ27a、27b、…、及び投機ロード・フラグ28
a、28b、…、を備えたが、複数のデータエントリに
対して単一のストア・フラグまたは投機ロード・フラグ
を代表させてもよい。例えば、図10は4つのデータエ
ントリ26a、26b、26c、26d、に対して、一
つの投機ロード・フラグ28aを備えたキャッシュライ
ンの第2の実施例である。データエントリ26、ストア
・フラグ27、投機ロード・フラグ28以外の構成要素
は省略している。投機ロード・フラグ28aは、4つの
データエントリ26a、26b、26c、26d、のい
ずれかに投機的な読み出しを行ったことを示す。この場
合、データエントリそれぞれに固有の投機ロード・フラ
グを備えるのに比べて、キャッシュメモリの実装に必要
なハードウェア量が小さくなるという効果がある。
【0084】バージョン識別子(vid)29は、自プ
ロセッサを除く並列プロセッサシステムが備えるプロセ
ッサ数分のビット数をもち、それぞれが自プロセッサを
除く他プロセッサに対応する。ストア命令等の書き込み
を行った場合、その対象ラインのバージョン識別子29
がセットされる。セットされるビットは、マージされた
スレッドを除く該スレッドのすべての親スレッドを実行
するプロセッサに対応するビットであり、それ以外のビ
ットはリセットされる。あるスレッドがタームした場
合、該スレッドを実行していたプロセッサを除くすべて
のプロセッサのキャッシュメモリのすべてのキャッシュ
ラインのバージョン識別子29において、該スレッドを
実行していたプロセッサに対応するビットがリセットさ
れる。すわなち、バージョン識別子29はその時点で
の、自キャッシュラインを生成したスレッドのすべての
親スレッドのうち、いまだタームしていない親スレッド
を実行するプロセッサを示している。あるプロセッサP
i上で実行された2つのスレッドにより生成された異な
るバージョンのキャッシュラインは、その2つのスレッ
ドのプログラム順序上で間のスレッドがすべてタームし
た時点で、バージョン識別子vidは同じバージョンを
示し、すなわち、縮退が行われたことになる。他プロセ
ッサから自キャッシュメモリにアクセスがあった場合、
バージョン識別子29が参照される。バージョン識別子
29の前記他プロセッサに対応するビットがセットされ
ている場合、自キャッシュラインにとっての親スレッド
からのアクセスと判断できる。その場合、自キャッシュ
ラインのデータはプログラム順序で後に位置し有効では
ないので、前記アクセスに対して自キャッシュメモリか
らは応答しない。一方、バージョン識別子29の前記他
プロセッサに対応するビットがリセットされている場
合、自キャッシュラインにとっての子スレッドからのア
クセスと判断できる。その場合、自キャッシュラインの
データはプログラム順序で前に位置し有効であるので、
前記アクセスに対して自キャッシュメモリから適切な応
答処理を行う。前記タームによるバージョン識別子29
のリセットで、バージョン識別子29のすべてのビット
がリセットされた場合、自キャッシュラインのデータは
少なくとも確定することになる。すなわち、バージョン
識別子29のすべてのビットがリセットされているキャ
ッシュラインのデータは、メインメモリ等に書き戻すこ
とができる。なお、本実施例では、同アドレスで異なる
バージョンのキャッシュラインは生成せず、空きフォー
クにより生成されたスレッドが書き込みを行う際に、そ
の対象のラインが古いバージョンをもつdirty なライン
の場合、すべての古いバージョンが確定して縮退される
まで書き込みの実行を遅らせて、複数のバージョンの発
生を回避する。
【0085】再び図8を参照すると、キャッシュ制御部
12は少なくとも、バス要求制御部30、キャッシュ要
求制御部31、バス要求出力バッファ32、バス要求入
力バッファ33を含んでいる。
【0086】バス要求制御部30は、キャッシュメモリ
11からのキャッシュミス通知、ストア通知やその対象
アドレス、ストア・データ、キャッシュライン状態等を
受け取り、それらを参照してバス要求を生成し、バス要
求出力バッファ32に登録する。ここで、キャッシュラ
イン状態は、図9に示したキャッシュラインを構成す
る、有効フラグ20、変更フラグ21、共有フラグ2
2、投機フラグ23、更新フラグ24、ストア・フラグ
27、バージョン識別子29を含み、キャッシュミスし
た場合は、そのミスによるリフィル処理対象のキャッシ
ュラインの状態、キャッシュヒットした場合は、そのヒ
ットしたキャッシュラインの状態を示す。
【0087】バス要求出力バッファ32は、バス要求制
御部30によって生成されたバス要求を格納し、順次バ
スを通じて他のプロセッサやメインメモリに出力する。
より詳細には、バス要求はコマンド、アドレス、キャッ
シュライン状態、データ等から構成され、コマンド、ア
ドレスは要求バス13、キャッシュライン状態は応答バ
ス14、データはデータバス15に出力する。バス要求
出力バッファ32は同時に、要求バス13に出力したコ
マンド、アドレス、及び応答バス14に出力したキャッ
シュライン状態を、バス要求入力バッファ33にも転送
する。本実施例は、バス要求を出力する際には、キャッ
シュライン状態に含まれる共有フラグ22を参照して、
データを共有しているプロセッサにのみ宛てて、バス要
求を出力する。すなわち、データを共有していないプロ
セッサでは、該バス要求によるキャッシュメモリへのア
クセスが発生せず、キャッシュメモリのアクセス競合に
よる性能低下が小さく、またキャッシュメモリにおいて
消費される電力を削減することができるという効果があ
る。
【0088】バス要求入力バッファ33は、他プロセッ
サやメインメモリから要求バス13を通じて伝達される
バス要求のコマンド、アドレスや、応答バス14を通じ
て伝達されるキャッシュライン状態や、データバス15
を通じて伝達されるデータなどを格納する。バス要求入
力バッファ33はまた、バス要求出力バッファ32から
要求バス13に出力されたバス要求のコマンド、アドレ
ス、及び応答バス14に出力されたキャッシュライン状
態を格納し、さらに、バス要求に応じて他プロセッサが
応答バス14に出力するキャッシュライン状態を、その
到着を待って格納する。同時にバス要求入力バッファ3
3は、格納しているバスから入力したバス要求、より詳
細には、コマンド、アドレス、キャッシュライン状態、
及びデータ、をキャッシュ要求制御部31に順次出力し
ていく。
【0089】キャッシュ要求制御部31は、バス要求入
力バッファ33が保持し、順次入力されるバス要求を順
次解釈する。まず、バスから入力された他プロセッサか
らのバス要求に対しては、キャッシュメモリ11にアク
セスして、バス要求の対象のキャッシュラインを保持し
ているか否かを判定し、保持していなければその旨が、
保持していればそのキャッシュラインの状態が、バス要
求制御部30及びバス要求出力バッファ32を通じて、
応答バス14に出力される。同時に、その自身のキャッ
シュメモリのキャッシュライン状態は、バス要求入力バ
ッファ33の該当エントリに格納される。バス要求入力
バッファ33において、自身のキャッシュライン状態も
含めて、他プロセッサからのキャッシュライン状態の応
答もすべて到着したら、再び、キャッシュ要求制御部3
1において、バス要求のコマンドと、自身のキャッシュ
ライン状態、及び他プロセッサのキャッシュライン状態
をすべて参照して、キャッシュラインの次の状態を決定
し、対象のキャッシュラインの更新を行う。
【0090】一方、自身が出力したバス要求に対して
は、そのコマンド、アドレス、及びキャッシュライン状
態が、バス要求入力バッファ33に格納されるので、バ
ス要求入力バッファ33において、他プロセッサからの
キャッシュライン状態の応答もすべて到着したら、キャ
ッシュ要求制御部31において、バス要求のコマンド
と、自身のキャッシュライン状態、及び他プロセッサの
キャッシュライン状態をすべて参照して、キャッシュラ
インの次の状態を決定し、対象のキャッシュラインの更
新を行う。
【0091】次にフローチャートを参照しつつ、キャッ
シュメモリ11及びキャッシュ制御部12の動作の詳細
を説明する。図11は、ロード命令が発行された場合の
キャッシュメモリ11及びキャッシュ制御部12の動作
を示すフローチャートである。まず、プロセッサ10で
ロード命令が発行されると(図11のステップ20
0)、キャッシュメモリ11がアクセスされ、キャッシ
ュメモリにヒットするか、ミスするかが判定される(図
11のステップ201)。ここで、キャッシュメモリに
ヒットするとは、有効フラグ20がセットされていて、
かつアドレスタグ25で示されるアドレス範囲に該ロー
ド命令の対象アドレスが入っているキャッシュラインが
存在する場合である。前記条件を満たすキャッシュライ
ンが存在しない場合、キャッシュメモリにミスするとい
う。
【0092】キャッシュメモリにヒットした場合、ヒッ
トしたキャッシュラインが読み出され、キャッシュライ
ン内の更新フラグ24が参照される(図11のステップ
202)。更新フラグ24がセットされていない、すな
わち、更新有効フラグ24aがセットされていないか、
更新対象フラグ24bのいずれもがセットされていない
場合、そのキャッシュラインは子スレッドにより更新さ
れておらず、そのキャッシュラインは有効であると判断
される。その場合、キャッシュメモリ11からプロセッ
サ10にロード対象のデータが転送される(図11のス
テップ206)。次に、該ロード命令がスレッド間の正
依存関係に関して投機的な実行である場合、ロード対象
のデータを格納したデータエントリ26に対応する投機
ロード・フラグ28をセットして(図11のステップ2
07)、ロード命令の実行は終了する。発行されたロー
ド命令が投機的であるか、確定的であるかはプロセッサ
10からキャッシュメモリ11に通知される。
【0093】一方、更新フラグ24の参照(図11のス
テップ202)で、更新フラグ24がセットされてい
た、すなわち、更新有効フラグ24aがセットされてい
て、かつ、更新対象フラグ24bのいずれかがセットさ
れている場合、そのキャッシュラインは子スレッドによ
り更新されていて、そのキャッシュラインは既に無効で
ある可能性があると判断される。ここで確定的に無効で
あると判定できないのは、子スレッドによる更新が投機
的であって、かつ取り消されている場合があり、実際に
は有効である可能性もあるからである。確定的な判断
は、子スレッドを実行したプロセッサのキャッシュメモ
リのキャッシュライン状態を参照する必要がある。そこ
で、バス要求制御部30は他のプロセッサのキャッシュ
メモリを参照するリード要求を生成し、バス要求出力バ
ッファ32を通じて、要求バス13にリード要求を発行
する(図11のステップ203)。同時にそのリード要
求、リード要求の対象アドレス、及び自身のキャッシュ
ライン状態は、バス要求入力バッファ33に格納され、
他のプロセッサのキャッシュ制御部から、リード要求に
対する応答である、キャッシュライン状態が応答バス1
4を通じて到着するのを待機する(図11のステップ2
04)。
【0094】リード要求に対して、すべてのプロセッサ
からの応答が到着すると、前記した自身のキャッシュラ
インが実際に無効であるか、それとも有効であるかを判
定する(図11のステップ205)。より詳細には、セ
ットされている更新対象フラグ24bに対応するプロセ
ッサのキャッシュライン状態を参照し、ヒットしていた
場合は、実際にそのプロセッサに更新されていたと判断
する。一方、セットされているすべての更新対象フラグ
24bに対して、いずれのプロセッサでもミスしていた
場合、その更新は投機実行の失敗により取り消されてい
て、実際には更新されていないと判断する。
【0095】実際には更新されていなかった場合、該キ
ャッシュラインは有効であるので、ただちに、読み出し
処理を実行することができる。この場合、リフィル処理
は必要なく、先に発行したリード要求を受信したプロセ
ッサでは、そのリード要求に対する処理は行われない。
読み出し処理では、キャッシュメモリ11からプロセッ
サ10にロード対象のデータを転送する(図11のステ
ップ206)。次に、キャッシュライン状態を更新し
て、ロード命令の実行を終了する(図11のステップ2
07)。具体的には、まず、更新フラグ24をリセット
し、次に、該ロード命令が投機的な実行である場合、ロ
ード対象のデータを格納したデータエントリ26に対応
する投機ロード・フラグ28をセットする。
【0096】一方、実際に更新されていた場合、該キャ
ッシュラインは無効であるので、他のプロセッサのキャ
ッシュメモリ、またはメインメモリから、有効なデータ
をリフィルする必要がある。まず、リフィル処理の前
に、該キャッシュラインのデータをライトバックする必
要性を判断する(図11のステップ211)。該キャッ
シュラインは、自プロセッサが現在実行しているスレッ
ドに対しては無効であるが、親スレッドに対しては有効
である場合がある。より詳細には、該キャッシュライン
を更新したプロセッサのキャッシュメモリに、確定した
キャッシュライン、すわなち投機フラグ23がセットさ
れていないキャッシュラインが存在しなければ、該キャ
ッシュラインは唯一の確定したデータを保持しているた
め、ライトバックが必要であると判断する。一方、該キ
ャッシュラインの更新元のプロセッサのキャッシュライ
ンに、確定したキャッシュラインが存在すれば、ライト
バックは必要ないと判断する。
【0097】ライトバックが必要であると判断した場
合、バス要求制御部30はライトバック要求を生成し、
それをバス要求出力バッファ32を通じて、要求バス1
3に出力し(図11のステップ216)、次にデータバ
ス15にライトバック対象のデータを出力する(図11
のステップ217)。次に、先に発行しているリード要
求に対して、他のキャッシュメモリまたはメインメモリ
からデータバス15を通じて伝達されるリフィル・デー
タの到着を待つ(図11のステップ212)。次に、キ
ャッシュ要求制御部31は到着したリフィル・データを
キャッシュメモリ11へリフィルする処理を行い(図1
1のステップ213)、次に、キャッシュメモリ11か
らプロセッサ10にロード対象のデータを転送し(図1
1のステップ206)、キャッシュライン状態を更新し
て、ロード命令の実行を終了する(図11のステップ2
07)。
【0098】一方、図11のステップ211でライトバ
ックが必要でないと判断した場合、そのままリフィル・
データの到着を待ち(図11のステップ212)、キャ
ッシュメモリ11へのリフィルを行う(図11のステッ
プ213)。次に、キャッシュメモリ11からプロセッ
サ10にロード対象のデータを転送し(図11のステッ
プ206)、キャッシュライン状態を更新して、ロード
命令の実行を終了する(図11のステップ207)。
【0099】以上、図11のステップ201において、
ロード命令がキャッシュメモリにヒットした場合の動作
について説明した。一方、ロード命令がキャッシュメモ
リにミスした場合は、スレッド実行が確定的か投機的か
で動作が異なる(図11のステップ208)。スレッド
実行が投機的で、すなわち発行されたロード命令は投機
的である場合、キャッシュメモリ11にリフィル可能か
否かを判断する(図11のステップ214)。キャッシ
ュメモリ11のリフィル先の候補のエントリに空きがな
く、かつ、それらエントリに格納されているすべてのキ
ャッシュラインの投機フラグ23及びストア・フラグ2
7のいずれかがセットされているか、あるいは投機ロー
ド・フラグ28のいずれかがセットされている場合、リ
フィルすることができない。この場合、スレッドが確定
するまで待機した後に(図11のステップ215)、図
11のステップ209よりリフィル処理を開始する。
【0100】一方、キャッシュメモリ11のリフィル先
の候補のエントリに少なくとも1つの空きがあれば、リ
フィルは可能である。また、空きが無い場合でも、それ
らリフィル先候補のエントリに格納されているいずれか
のキャッシュラインの投機フラグ23かストア・フラグ
27のいずれかがセットされてなく、かつ投機ロード・
フラグ28のいずれもセットされていない場合、そのエ
ントリにリフィルすることが可能である。この場合、図
11のステップ209よりリフィル処理を開始する。
【0101】一方、スレッド実行が確定的で、すなわち
発行されたロード命令は確定的である場合(図11のス
テップ208、Yes)、常にリフィルは可能であるの
で、図11のステップ209よりリフィル処理を開始す
る。具体的には、まず、要求バス13にリード要求を出
力し(図11のステップ209)、それに対する他プロ
セッサからの応答を待つ(図11のステップ210)。
【0102】次に、ライトバックが必要か否かを判定す
る(図11のステップ211)。リフィル先のエントリ
にストア命令により変更されたキャッシュライン、すわ
なち変更フラグ21がセットされているキャッシュライ
ンが存在すれば、ライトバックが必要である。その場
合、ライトバック要求を要求バス13に出力し(図11
のステップ216)、次にデータバス15にライトバッ
ク対象のデータを出力する(図11のステップ21
7)。次に、リフィル・データの到着を待ち(図11の
ステップ212)、キャッシュメモリ11へのリフィル
を行う(図11のステップ213)。次に、キャッシュ
メモリ11からプロセッサ10にロード対象のデータを
転送し(図11のステップ206)、キャッシュライン
状態を更新して、ロード命令の実行を終了する(図11
のステップ207)。
【0103】ライトバックが必要でない場合は、そのま
まリフィル・データの到着を待ち(図11のステップ2
12)、キャッシュメモリ11へのリフィルを行う(図
11のステップ213)。次に、キャッシュメモリ11
からプロセッサ10にロード対象のデータを転送し(図
11のステップ206)、キャッシュライン状態を更新
して、ロード命令の実行を終了する(図11のステップ
207)。
【0104】以上、ロード命令が発行された場合のキャ
ッシュメモリ11及びキャッシュ制御部12の動作を説
明した。次に、図12を参照して、ストア命令が発行さ
れた場合のキャッシュメモリ11及びキャッシュ制御部
12の動作を説明する。
【0105】まず、プロセッサ10でストア命令が発行
されると(図12のステップ220)、キャッシュメモ
リ11がアクセスされ、キャッシュメモリにヒットする
か、ミスするかが判定される(図12のステップ22
1)。ここで、キャッシュメモリにヒットするとは、有
効フラグ20がセットされていて、かつアドレスタグ2
5で示されるアドレス範囲にストア命令の対象アドレス
が入っているキャッシュラインが存在する場合である。
前記条件を満たすキャッシュラインが存在しない場合、
キャッシュメモリにミスするという。
【0106】キャッシュメモリにヒットした場合、ヒッ
トしたキャッシュラインが読み出され、まずキャッシュ
ライン内のバージョン識別子が参照される(図12のス
テップ242)。ここで、バージョン識別子で示される
ヒットしたキャッシュラインのバージョンと現在実行し
ているスレッドのバージョンが一致せず、かつdirtyな
(変更フラグ21がセットされている)キャッシュライ
ンの場合、一致するまで待機する。バージョン識別子に
記憶されるバージョンは、親スレッドの終了に応じて適
宜変更され、いずれ現在実行しているスレッドのバージ
ョンに一致する。バージョンが一致したか、あるいはdi
rty なキャッシュラインでない場合、次に図12のステ
ップ222において、キャッシュライン内の更新フラグ
24が参照される。
【0107】更新フラグ24がセットされていない、す
なわち、更新有効フラグ24aがセットされていない
か、更新対象フラグ24bのいずれもがセットされてい
ない場合、そのキャッシュラインは子スレッドにより更
新されておらず、そのキャッシュラインは有効であると
判断される。その場合、バス要求制御部30は、ライト
要求を生成し、バス要求出力バッファ32を通じて、要
求バス13にライト要求を出力する(図12のステップ
226)。ライト要求は、ストア命令を実行したこと、
及びそのストア・データを他のプロセッサやキャッシュ
メモリに通知し、それに対する処理を要求するバス要求
である。
【0108】次に、該ストア命令による書き込みの前
に、以前のデータのメインメモリへのライトバックが必
要か否かを判定する(図12のステップ227)。該ス
トア命令がヒットしたキャッシュラインが確定的であ
る、すなわち投機フラグ23がセットされてなく、かつ
該ストア命令が投機的な実行である場合、投機的なデー
タを書き込む前に、確定的なデータをメインメモリへラ
イトバックする処理を行う。具体的には、要求バス13
にライトバック要求を出力し(図12のステップ23
0)、続いてデータバス15を通じてライトバックする
データを転送する(図12のステップ231)。その
後、該ストア命令が書き込みの対象とするキャッシュラ
インのデータエントリ26に、ストア・データの書き込
みを行う(図12のステップ228)。次に、キャッシ
ュライン状態を更新して、ストア命令の実行を終了する
(図12のステップ229)。具体的には、まず、変更
フラグ21、及びストア対象のデータを格納したデータ
エントリに対応するストア・フラグ27をセットする。
さらに、該ストア命令が投機的な実行である場合、投機
フラグ23の自プロセッサに対応するフラグ部分をセッ
トする。さらに、バージョン識別子29に現在実行して
いるスレッドのバージョンの書き込みを行う。
【0109】一方、ライトバックが必要なかった場合
(図12のステップ227、No)、そのまま該ストア
命令が書き込みの対象とするキャッシュラインのデータ
エントリに、ストア・データの書き込みを行う(図12
のステップ228)。次に、キャッシュライン状態を更
新して、ストア命令の実行を終了する(図12のステッ
プ229)。
【0110】一方、更新フラグの参照(図12のステッ
プ222)で、更新フラグ24がセットされていた、す
なわち、更新有効フラグ24aがセットされていて、か
つ、更新対象フラグ24bのいずれかがセットされてい
る場合、そのキャッシュラインは子スレッドにより更新
されていて、そのキャッシュラインは既に無効である可
能性があると判断される。その場合、バス要求制御部3
0はリード・ライト要求を生成し、要求バス13にリー
ド・ライト要求を発行する(図12のステップ22
3)。リード・ライト要求は、同時に要求バスに出力す
る対象のアドレスに対して、リード要求に対する処理の
後、ライト要求に対する処理を要求するバス要求であ
る。
【0111】次に、他のキャッシュ制御部からリード・
ライト要求に対する応答の到着を待機し(図12のステ
ップ224)、その応答を参照して、該キャッシュライ
ンが子スレッドにより実際に更新されているか否かを判
定する(図12のステップ225)。実際には更新され
ていなかった場合、該キャッシュラインは有効であるの
で、ただちにライト処理を開始することができる。この
場合、リフィル処理は必要なく、先に発行したリード・
ライト要求を受信したプロセッサでは、そのリード要求
部分に対する処理は行われない。ライト処理では、ま
ず、ライトバックが必要か否かの判断を行う(図12の
ステップ227)。ライトバックが必要な場合、ライト
バック要求の発行(図12のステップ230)及び、ラ
イトバック・データの転送(図12のステップ231)
を行う。次に、該ストア命令が書き込みの対象とするキ
ャッシュラインのデータエントリに、ストア・データの
書き込みを行う(図12のステップ228)。次に、キ
ャッシュライン状態を更新して、ストア命令の実行を終
了する(図12のステップ229)。
【0112】一方、図12のステップ225における子
スレッドによる更新の有無の判断で、実際に更新されて
いた場合、該キャッシュラインは無効であるので、ロー
ド命令の場合と同様に、他のプロセッサのキャッシュメ
モリ、またはメインメモリから、有効なデータをリフィ
ルする必要がある。まず、リフィル処理の前に、該キャ
ッシュラインのデータをライトバックする必要性を判断
する(図12のステップ235)。該キャッシュライン
は、自プロセッサが現在実行するスレッドに対しては無
効であるが、親スレッドに対しては有効である場合があ
る。より詳細には、該キャッシュラインを更新したプロ
セッサのキャッシュラインに、確定したキャッシュライ
ン、すわなち投機フラグ23がセットされていないキャ
ッシュラインが存在しなければ、該キャッシュラインは
唯一の確定したデータを保持しているため、ライトバッ
クが必要であると判断する。一方、該キャッシュライン
の更新元のプロセッサのキャッシュラインに、確定した
キャッシュラインが存在すれば、ライトバックは必要な
いと判断する。
【0113】ライトバックが必要であると判断した場合
は、ライトバック要求の発行(図12のステップ24
0)及び、ライトバック・データの転送(図12のステ
ップ241)を行う。次に、先に発行しているリード・
ライト要求に対して、他のキャッシュメモリまたはメイ
ンメモリからデータバス15を通じて伝達されるリフィ
ル・データの到着を待つ(図12のステップ236)。
次に、キャッシュ要求制御部31は到着したリフィル・
データをキャッシュメモリ11へリフィルする処理を行
う(図12のステップ237)。次に、該ストア命令が
書き込みの対象とするキャッシュラインのデータエント
リに、ストア・データの書き込みを行う(図12のステ
ップ228)。次に、キャッシュライン状態を更新し
て、ストア命令の実行を終了する(図12のステップ2
29)。
【0114】一方、ライトバックが必要でないと判断し
た場合は、そのまま、リフィル・データの到着を待ち
(図12のステップ236)、キャッシュメモリ11へ
リフィルを行う(図12のステップ237)。次に、該
ストア命令のストア・データの書き込みを行い(図12
のステップ228)、キャッシュライン状態を更新し
て、ストア命令の実行を終了する(図12のステップ2
29)。
【0115】以上、図12のステップ221において、
ストア命令がキャッシュメモリにヒットした場合の動作
について説明した。一方、ストア命令がキャッシュメモ
リにミスした場合は、ロード命令の場合と同様に、スレ
ッド実行が確定的か投機的かで動作が異なる(図12の
ステップ232)。スレッド実行が投機的で、すなわち
発行されたストア命令は投機的である場合、キャッシュ
メモリ11にリフィル可能か否かを判断する(図12の
ステップ238)。キャッシュメモリ11のリフィル先
の候補のエントリに空きがなく、かつ、それらエントリ
に格納されているすべてのキャッシュラインの投機フラ
グ23及びストア・フラグ27のいずれかがセットされ
ているか、あるいは投機ロード・フラグ28のいずれか
がセットされている場合、リフィルすることができな
い。この場合、スレッドが確定するまで待機した後に
(図12のステップ239)、リフィル処理を開始す
る。
【0116】一方、キャッシュメモリ11のリフィル先
の候補のエントリに少なくとも1つの空きがあれば、リ
フィルは可能である。また、空きが無い場合でも、それ
らリフィル先候補のエントリに格納されているいずれか
のキャッシュラインの投機フラグ23かストア・フラグ
27のいずれかがセットされてなく、かつ投機ロード・
フラグ28のいずれもセットされていない場合、そのエ
ントリにリフィルすることが可能である。この場合、そ
のままリフィル処理を開始する。
【0117】一方、スレッド実行が確定的で、すなわち
発行されたストア命令は確定的である場合(図12のス
テップ232、Yes)、常にリフィルは可能であるの
で、そのままリフィル処理を開始する。具体的には、ま
ず、要求バス13にリード・ライト要求を出力し(図1
2のステップ233)、それに対する他プロセッサから
の応答を待つ(図12のステップ234)。
【0118】次に、ライトバックが必要か否かを判定す
る(図12のステップ235)。リフィル先のエントリ
に変更されたキャッシュライン、すわなち変更フラグ2
1がセットされているキャッシュラインが存在すれば、
ライトバックが必要であると判断する。ライトバックが
必要であると判断した場合は、ライトバック要求の発行
(図12のステップ240)及び、ライトバック・デー
タの転送(図12のステップ241)を行った後、リフ
ィル処理を続行する。一方、ライトバックが必要でない
と判断した場合は、そのままリフィル処理を続行する。
リフィル処理は、先に発行しているリード・ライト要求
に対して、他のキャッシュメモリまたはメインメモリか
らデータバス15を通じて伝達されるリフィル・データ
の到着を待つ(図12のステップ236)。次に、キャ
ッシュ要求制御部31は到着したリフィル・データのキ
ャッシュメモリ11へのリフィルを行う(図12のステ
ップ237)。次に、該ストア命令が書き込みの対象と
するキャッシュラインのデータエントリに、ストア・デ
ータの書き込みを行う(図12のステップ228)。次
に、キャッシュライン状態を更新して、ストア命令の実
行を終了する(図12のステップ229)。
【0119】以上、ストア命令が発行された場合のキャ
ッシュメモリ11及びキャッシュ制御部12の動作を説
明した。次に、図13を参照して、他のプロセッサから
バスを通じてリード要求を受信した場合、及びリード・
ライト要求を受信した場合のリード要求部分に対する、
キャッシュメモリ11及びキャッシュ制御部12の動作
を説明する。リード・ライト要求を受信した場合は、リ
ード要求に対する処理を行った後、後述するライト要求
に対する処理を行う。以下の説明ではリード要求または
リード・ライト要求のリード要求部分を、単にリード要
求と表記する。
【0120】まず、他プロセッサのキャッシュ制御部1
2からのリード要求を、要求バス13を通じて受信する
と、バス要求入力バッファ33は、該リード要求のコマ
ンド、アドレス、リード要求を発行したプロセッサのキ
ャッシュライン状態などを格納し、キャッシュ要求制御
部31に通知する(図13のステップ245)。キャッ
シュ要求制御部31はリード要求を解釈すると、キャッ
シュメモリ11にアクセスし、リード要求の対象アドレ
スがキャッシュメモリにヒットするかミスするかを判定
する(図13のステップ246)。ここで、キャッシュ
メモリにヒットするとは、有効フラグ20がセットされ
ていて、かつアドレスタグ25で示されるアドレス範囲
に当該リード要求の対象アドレスが入っているキャッシ
ュラインが存在する場合である。前記条件を満たすキャ
ッシュラインが存在しない場合、キャッシュメモリにミ
スするという。
【0121】リード要求がキャッシュメモリ11にミス
した場合、その旨を、バス要求制御部30、バス要求出
力バッファ32、及び応答バス14を通じて、他プロセ
ッサに通知し、リード要求に対する処理を終了する(図
13のステップ247)。
【0122】一方、リード要求がキャッシュメモリ11
にヒットした場合、ヒットしたキャッシュラインの状態
を、バス要求制御部30、バス要求出力バッファ32、
及び応答バス14を通じて、その旨を他プロセッサに通
知し(図13のステップ248)、他プロセッサからの
応答である他のキャッシュメモリのキャッシュライン状
態が到着するのを待機する(図13のステップ24
9)。次に、ヒットした自身のキャッシュライン状態の
更新フラグ24を参照して、更新フラグ24がセットさ
れているか否かを判定する(図13のステップ25
0)。
【0123】更新フラグ24がセットされていない、す
なわち、更新有効フラグ24aがセットされていない
か、更新対象フラグ24bのいずれもがセットされてい
ない場合、そのキャッシュラインは子スレッドにより更
新されておらず、そのキャッシュラインは有効であると
判断される。その場合、自身のキャッシュラインのデー
タをリフィル・データとして供給するか否かの判定を行
う(図13のステップ256)。
【0124】一方、更新フラグ24がセットされてい
た、すなわち、更新有効フラグ24aがセットされてい
て、かつ、更新対象フラグ24bのいずれかがセットさ
れている場合、そのキャッシュラインは子スレッドによ
り更新されていて、そのキャッシュラインは既に無効で
ある可能性があると判断される。その場合、他プロセッ
サからのキャッシュライン状態の応答を参照して、前記
した自身のキャッシュラインが実際に無効であるか、そ
れとも有効であるかを判定する(図13のステップ25
1)。より詳細には、セットされている更新対象フラグ
24bに対応するプロセッサのキャッシュライン状態を
参照し、ヒットしていた場合は、実際にそのプロセッサ
に更新されていたと判断する。一方、セットされている
すべての更新対象フラグ24bに対して、いずれのプロ
セッサでもミスしていた場合、その更新は投機実行の失
敗に取り消されていて、実際には更新されていないと判
断する。
【0125】子スレッドにより、実際には更新されてい
なかった場合、自身のキャッシュラインのデータをリフ
ィル・データとして供給するか否かの判定を行う(図1
3のステップ256)。判定は、まず、リード要求を発
行したプロセッサが、実際にリフィル処理を必要として
いるか否かを判断する。これは、リード要求を発行した
が(図11の203、または図12の223)、実際に
はキャッシュラインが有効でリフィル処理が必要ない場
合(図11の205、No、または図12の225、N
o)があるからである。リード要求を受信したプロセッ
サでも、すべてのキャッシュメモリのキャッシュライン
状態が参照できるので、リード要求を発行したプロセッ
サと同様の判断が可能である。
【0126】リード要求を発行したプロセッサで、実際
にリフィル処理を必要としていない場合は、リフィル・
データの供給は行わない。一方、リード要求を発行した
プロセッサで、実際にリフィル処理を必要としている場
合、次に、プログラム順序の上で、ヒットした自身のキ
ャッシュラインのデータを生成したスレッドと、リード
要求を発行したプロセッサが実行するスレッドの間に位
置するスレッドを実行するプロセッサのキャッシュライ
ン状態を参照する。これら間に位置するスレッドを実行
するプロセッサは、自身のキャッシュラインのバージョ
ン識別子、及び他プロセッサから通知される他のキャッ
シュメモリでヒットしたキャッシュラインのバージョン
識別子を参照して特定することができる。これは、バー
ジョン識別子のうち、セットされているビットを参照す
ると、そのキャッシュラインのデータを生成したスレッ
ドの親スレッドを実行しているプロセッサを特定できる
ためである。リフィル・データを供給するか否かは、そ
れらの間のスレッドのキャッシュライン状態と自身のキ
ャッシュライン状態により決定される。なお、スレッド
の順序関係は、自身のプロセッサ10から各キャッシュ
制御部12へ通知される。
【0127】まず、前記間のスレッドのキャッシュライ
ンの中に、投機的な(投機フラグ23がセットされた)
キャッシュラインが存在する場合、自身のキャッシュラ
インのデータはリフィル・データとして無効であり、自
プロセッサはリフィル・データの供給は行わない。
【0128】次に、前記間のスレッドのキャッシュライ
ンの中に、投機的なキャッシュラインは存在しないが、
確定的なキャッシュラインは存在し、かつ自身のキャッ
シュラインも確定的である場合、自プロセッサはリフィ
ル・データの供給は行わない。
【0129】次に、間のスレッドのキャッシュラインの
中に、投機的なキャッシュラインは存在しないが、確定
的なキャッシュラインは存在し、かつ自身のキャッシュ
ラインは投機的である場合、自プロセッサは自身のキャ
ッシュラインからリフィル・データの供給を行う。
【0130】次に、間のスレッドを実行するプロセッサ
ではすべてキャッシュメモリにミスし、有効なキャッシ
ュラインが存在しない場合、自プロセッサは自身のキャ
ッシュラインからリフィル・データの供給を行う。
【0131】リフィル・データの供給を行わない場合、
キャッシュライン状態の更新、具体的には更新フラグ2
4のリセットを行い、リード要求に対する処理を終了す
る(図13のステップ257)。一方、リフィル・デー
タの供給を行う場合、データバス15を通じて、自身の
キャッシュラインが保持しているデータを転送し(図1
3のステップ258)、次に、キャッシュライン状態の
更新を行い、リード要求に対する処理を終了する(図1
3のステップ257)。
【0132】一方、子スレッドによる更新の有無判定で
(図13のステップ251)、実際に更新されていた場
合、該キャッシュラインは既に無効であるので、キャッ
シュラインの無効化を行う。まず、無効化処理の前に、
該キャッシュラインのデータをライトバックする必要性
を判断する(図13のステップ252)。該キャッシュ
ラインは、自プロセッサが現在実行するスレッドに対し
ては無効であるが、親スレッドに対しては有効である場
合がある。より詳細には、該キャッシュラインの更新元
のプロセッサのキャッシュラインに、確定したキャッシ
ュライン、すわなち投機フラグ23がセットされていな
いキャッシュラインが存在しなければ、該キャッシュラ
インは唯一の確定したデータを保持しているため、ライ
トバックが必要であると判断する。一方、該キャッシュ
ラインの更新元のプロセッサのキャッシュラインに、確
定したキャッシュラインが存在すれば、ライトバックは
必要ないと判断する。
【0133】ライトバックが必要であると判断した場
合、要求バス13にライトバック要求を出力し(図13
のステップ254)、次にデータバス15にライトバッ
ク対象のデータを出力する(図13のステップ25
5)。その後、キャッシュラインの有効フラグ20をリ
セットしてキャッシュラインの無効化を行い、リード要
求に対する処理を終了する(図13のステップ25
3)。一方、ライトバックが必要でないと判断した場合
は、そのままキャッシュラインの有効フラグ20をリセ
ットしてキャッシュラインの無効化を行い、リード要求
に対する処理を終了する(図13のステップ253)。
【0134】以上、他のプロセッサからバスを通じてリ
ード要求を受信した場合、及びリード・ライト要求を受
信した場合のリード要求部分に対する、キャッシュメモ
リ11及びキャッシュ制御部12の動作を説明した。次
に、図14を参照して、他のプロセッサからバスを通じ
てライト要求を受信した場合、及びリード・ライト要求
を受信した場合のライト要求部分に対する、キャッシュ
メモリ11及びキャッシュ制御部12の動作を説明す
る。リード・ライト要求を受信した場合は、上述したリ
ード要求に対する処理を行った後、ライト要求に対する
処理を行う。以下の説明では、ライト要求、及びリード
・ライト要求におけるライト要求部分を、単にライト要
求と表記する。
【0135】まず、他プロセッサのキャッシュ制御部1
2からのライト要求を、要求バス13を通じて受信する
と、バス要求入力バッファ33は、該ライト要求のコマ
ンド、アドレス、ライト要求を発行したプロセッサのキ
ャッシュライン状態、ライト・データなどを格納し、キ
ャッシュ要求制御部31に通知する(図14のステップ
260)。キャッシュ要求制御部31はライト要求を解
釈すると、キャッシュメモリ11にアクセスし、ライト
要求の対象アドレスがキャッシュメモリにヒットするか
ミスするかを判定する(図14のステップ261)。こ
こで、キャッシュメモリにヒットするとは、有効フラグ
20がセットされていて、かつアドレスタグ25で示さ
れるアドレス範囲に当該ライト要求の対象アドレスが入
っているキャッシュラインが存在する場合である。前記
条件を満たすキャッシュラインが存在しない場合、キャ
ッシュメモリにミスするという。
【0136】ライト要求がキャッシュメモリ11にミス
した場合、その旨を、バス要求制御部30、バス要求出
力バッファ32、及び応答バス14を通じて、他プロセ
ッサに通知し、ライト要求に対する処理を終了する(図
14のステップ262)。
【0137】一方、ライト要求がキャッシュメモリ11
にヒットした場合、ヒットしたキャッシュラインの状態
を、バス要求制御部30、バス要求出力バッファ32、
及び応答バス14を通じて、その旨を他プロセッサに通
知し(図14のステップ263)、他プロセッサからの
応答である他のキャッシュメモリのキャッシュライン状
態が到着するのを待機する(図14のステップ26
4)。次に、ヒットした自身のキャッシュライン状態の
更新フラグ24を参照して、更新フラグ24がセットさ
れているか否かを判定する(図14のステップ26
5)。
【0138】更新フラグ24がセットされていない、す
なわち、更新有効フラグ24aがセットされていない
か、更新対象フラグ24bのいずれもがセットされてい
ない場合、そのキャッシュラインは子スレッドにより更
新されておらず、そのキャッシュラインは有効であると
判断される。その場合、自身のキャッシュラインへのラ
イト処理を開始する(図14のステップ265、N
o)。
【0139】一方、更新フラグ24がセットされてい
た、すなわち、更新有効フラグ24aがセットされてい
て、かつ、更新対象フラグ24bのいずれかがセットさ
れている場合、そのキャッシュラインは子スレッドによ
り更新されていて、そのキャッシュラインは既に無効で
ある可能性があると判断される。その場合、他プロセッ
サからのキャッシュライン状態の応答を参照して、前記
した自身のキャッシュラインが実際に無効であるか、そ
れとも有効であるかを判定する(図14のステップ26
6)。より詳細には、セットされている更新対象フラグ
24bに対応するプロセッサのキャッシュライン状態を
参照し、ヒットしていた場合は、実際にそのプロセッサ
に更新されていたと判断する。一方、セットされている
すべての更新対象フラグ24bに対して、いずれのプロ
セッサでもミスしていた場合、その更新は投機実行の失
敗に取り消されていて、実際には更新されていないと判
断する。
【0140】子スレッドにより、実際には更新されてい
なかった場合、自身のキャッシュラインへのライト処理
を開始する(図14のステップ266、No)。ライト
処理はまず、ヒットした自身のキャッシュラインのデー
タを生成したスレッドにとって、親スレッドからのライ
ト要求か否かを判断する(図14のステップ271)。
この判断は、自身のキャッシュラインのバージョン識別
子のうち、セットされているビットを参照して、該キャ
ッシュラインのデータを生成したスレッドの親スレッド
を実行するプロセッサを特定することで実現できる。子
スレッドからのライト要求であった場合、それはプログ
ラム順序の上で後に位置する書き込みなので、実際にデ
ータの更新は行わず、子スレッドによって更新されたこ
とを示す、キャッシュラインの更新フラグ24のうち、
ライト要求を発行したプロセッサに対応する更新対象フ
ラグ24bをセットして、ライト要求に対する処理を終
了する(図14のステップ273)。
【0141】一方、親スレッドからのライト要求であっ
た場合、次に有効なライト・データ部分が存在するか否
かを判定する(図14のステップ272)。判定には、
まず、プログラム順序の上で、ライト要求を発行したプ
ロセッサが実行するスレッドとヒットした自身のキャッ
シュラインのデータを生成したスレッドの間に位置する
スレッドを実行するプロセッサのキャッシュライン状態
を参照する。これら間に位置するスレッドを実行するプ
ロセッサは、自身のキャッシュラインのバージョン識別
子、及び他プロセッサから通知される他のキャッシュメ
モリでヒットしたキャッシュラインのバージョン識別子
を参照して特定することができる。これは、バージョン
識別子のうち、セットされているビットを参照すると、
そのキャッシュラインのデータを生成したスレッドの親
スレッドを実行しているプロセッサを特定できるためで
ある。有効なライト・データ部分が存在するか否かは、
それらの間のスレッドのキャッシュライン状態と自身の
キャッシュライン状態により決定される。具体的には、
ライト・データに対し、間のスレッドのキャッシュライ
ンの中で、ストア・フラグ27がセットされているライ
ト・データ部分が存在する場合、そのライト・データ部
分は自スレッドに対して無効である。逆に、間のスレッ
ドのキャッシュラインのいずれにも、ストア・フラグ2
7がセットされていないライト・データ部分が存在する
場合、そのライト・データ部分は自スレッドに対して有
効である。
【0142】有効なライト・データ部分が存在しない場
合、キャッシュライン状態を更新して、ライト要求に対
する処理を終了する(図14のステップ273)。一
方、有効なライト・データ部分が存在する場合、そのラ
イト・データ部分の書き込み処理を行う。まず、実際に
書き込みを行う前に、以前のデータのメインメモリへの
ライトバックが必要か否かを判定する(図14のステッ
プ274)。該ライト要求がヒットしたキャッシュライ
ンが確定的である、すなわち投機フラグ23がセットさ
れてなく、かつ該ライト要求が投機的な要求である場
合、投機的なデータを書き込む前に、確定的なデータを
メインメモリへライトバックする。具体的には、要求バ
ス13にライトバック要求を出力し(図14のステップ
275)、続いてデータバス15を通じてライトバック
するデータを転送する(図14のステップ276)。そ
の後、実際の書き込み処理を開始する。一方、ライトバ
ックが必要なかった場合(図14のステップ274、N
o)、そのまま実際の書き込み処理を開始する。ライト
要求が投機的であるか、確定的であるかは、ライト要求
の要因のストア命令が投機的であるか、確定的であるか
により、ライト要求と同時に要求を発行したプロセッサ
から与えられる。
【0143】実際の書き込み処理では(図14のステッ
プ277)、前記した有効なライト・データ部分を自身
のキャッシュラインの対応するデータエントリ26へ書
き込みを行う。ただし、自プロセッサが先に書き込みを
行い、ストア・フラグ27がセットされている、データ
エントリに対しては書き込みを行わない。
【0144】次に、受信したライト要求のストア命令か
ら、自プロセッサが先に実行した正依存関係に対して投
機的なロード命令への、正依存関係の検出を行う(図1
4のステップ278)。上記した有効なライト・データ
部分に対応するデータエントリの投機ロード・フラグ2
8のいずれかがセットされていた場合、正依存関係が存
在し、投機的なロード命令の実行は失敗であったと判断
できる。その場合、キャッシュメモリ11はプロセッサ
10に投機実行失敗を通知し、プロセッサ10はスレッ
ド実行の取消しを行う(図14のステップ280)。
【0145】一方、上記した有効なライト・データ部分
に対応するデータエントリの投機ロード・フラグ28の
いずれもセットされていない場合、正依存関係は存在せ
ず、投機的なロード命令の実行は成功したと判断でき
る。その場合、キャッシュライン状態を更新して、ライ
ト要求に対する処理を終了する(図14のステップ27
9)。
【0146】一方、子スレッドによる更新の有無判定で
(図14のステップ266)、実際に更新されていた場
合、該キャッシュラインは既に無効であるので、キャッ
シュラインの無効化を行う。まず、無効化処理の前に、
該キャッシュラインのデータをライトバックする必要性
を判断する(図14のステップ267)。該キャッシュ
ラインは、自プロセッサが現在実行するスレッドに対し
ては無効であるが、親スレッドに対しては有効である場
合がある。より詳細には、該キャッシュラインを更新し
たプロセッサのキャッシュラインに、確定したキャッシ
ュライン、すわなち投機フラグ23がセットされていな
いキャッシュラインが存在しなければ、該キャッシュラ
インは唯一の確定したデータを保持しているため、ライ
トバックが必要であると判断する。一方、該キャッシュ
ラインの更新元のプロセッサのキャッシュラインに、確
定したキャッシュラインが存在すれば、ライトバックは
必要ないと判断する。
【0147】ライトバックが必要であると判断した場
合、要求バス13にライトバック要求を出力し(図14
のステップ269)、次にデータバス15にライトバッ
ク対象のデータを出力する(図14のステップ27
0)。その後、キャッシュラインの有効フラグ20をリ
セットしてキャッシュラインの無効化を行い、ライト要
求に対する処理を終了する(図14のステップ26
8)。一方、ライトバックが必要でないと判断した場合
は、そのままキャッシュラインの有効フラグ20をリセ
ットしてキャッシュラインの無効化を行い、ライト要求
に対する処理を終了する(図14のステップ268)。
【0148】以上、他のプロセッサからバスを通じてラ
イト要求を受信した場合、及びリード・ライト要求を受
信した場合のライト要求部分に対する、キャッシュメモ
リ11及びキャッシュ制御部12の動作を説明した。上
記したように、本実施形態の特徴の一つに、同じアドレ
スに対するバス要求を結合して同時に発行することがあ
る。さらに更新されて無効である可能性のあるキャッシ
ュラインへの処理を、前記バス要求により暗黙的に実行
することがある。これにより、発行されるバス要求を少
なくすることができ、バスの競合による性能低下が小さ
く、バスで消費される電力が小さいという効果がある。
上記説明では、同じアドレスに対するリード要求及びラ
イト要求を統合してリード・ライト要求としたが、さら
に同じアドレスに対するライトバック要求を統合しても
良い。
【0149】投機的なロード命令の実行に失敗した場合
など、スレッドの実行が取り消された場合には、まず、
キャッシュメモリ11を構成するすべてのキャッシュラ
インのすべての投機ロード・フラグ27をリセットする
ことで、投機実行したロード命令の記録を破棄する。次
に、キャッシュメモリ11を構成するキャッシュライン
のうち、投機的なキャッシュラインの無効化を行うこと
で、投機実行に失敗して無効であるデータの破棄を行
う。具体的には、投機的なキャッシュラインのうち、該
キャッシュラインが投機的である原因のプロセッサで
も、スレッドの実行の取り消しが行われた場合、該キャ
ッシュラインの有効フラグ20をリセットして無効化す
る。本実施例によれば、キャッシュラインが投機的なこ
とを示す投機フラグ23を、複数のビットから構成して
おり、該キャッシュラインを投機的にならしめた原因の
プロセッサを特定することが可能である。このため、投
機フラグを1ビットで構成する従来の方法では、厳密に
は無効化が不必要なキャッシュラインも無効化されてし
まうのに対して、本実施例によれば、厳密に無効化が必
要なキャッシュラインのみが無効化されるため、キャッ
シュミスが発生する確率が小さく、高速なスレッド並列
処理が可能であるという効果がある。
【0150】一方、投機的なスレッドの実行が確定した
場合には、キャッシュメモリ11を構成するキャッシュ
ラインのうち、投機的なキャッシュラインの確定を行う
ことで、投機実行に成功して確定したデータの有効化を
行う。この処理は、投機フラグ23、ストア・フラグ2
7、及び投機ロード・フラグ28をリセットすることで
実現できる。各プロセッサで実行されているスレッドの
うち、少なくともプログラム順序で最も先に位置するス
レッドは、実行が確定している。それ以外のスレッドの
実行は確定している場合と、投機的である場合がある
が、いずれにしても、先行するすべてのスレッドの実行
が終了し、自スレッドが実行中の最も先行するスレッド
になった時点で、実行が確定する。
【0151】以上、本発明を実施例を挙げて説明した
が、本発明は以上の実施例にのみ限定されず、その他各
種の付加変更が可能である。例えば、前記の実施例では
複数のスレッド実行部に共通にスレッド管理部を設ける
集中スレッド管理型の並列プロセッサシステムに本発明
を適用したが、スレッド実行部毎にスレッド管理部を設
ける分散スレッド管理型の並列プロセッサシステムにも
本発明は適用可能である。
【0152】
【発明の効果】以上説明したように本発明によれば、タ
ーム後で確定前のスレッドをその直後の子スレッドにマ
ージすることによってプロセッサ資源を有効に活用で
き、スレッドの並列度を高めることが可能となる。
【図面の簡単な説明】
【図1】本発明の作用の説明図である。
【図2】本発明の並列プロセッサシステムの一例を示す
ブロック図である。
【図3】本発明の並列プロセッサシステムにおけるスレ
ッド管理部の構成例を示すブロック図である。
【図4】本発明の並列プロセッサシステムにおけるスレ
ッド管理部のスレッド管理シーケンサがスレッド実行部
からフォーク要求を受信した際の処理例を示すフローチ
ャートである。
【図5】本発明の並列プロセッサシステムにおけるスレ
ッド管理部のスレッド管理シーケンサがスレッド実行部
からスレッド終了通知を受信した際の処理例を示すフロ
ーチャートである。
【図6】個々のプロセッサが固有に備えるキャッシュメ
モリを仮実行用バッファとして兼用する場合の問題点を
説明するためのスレッド実行シーケンス図である。
【図7】本発明の一実施例におけるキャッシュメモリの
制御方法の説明図である。
【図8】本発明の並列プロセッサシステムのスレッド実
行部の構成例を示すブロック図である。
【図9】キャッシュメモリを構成するキャッシュライン
の第1の実施例の詳細を示す説明図である。
【図10】キャッシュメモリを構成するキャッシュライ
ンの第2の実施例の詳細を示す説明図である。
【図11】ロード命令が発行された場合のキャッシュメ
モリ及びキャッシュ制御部の動作を示すフローチャート
である。
【図12】ストア命令が発行された場合のキャッシュメ
モリ及びキャッシュ制御部の動作を示すフローチャート
である。
【図13】リード要求を受信した場合のキャッシュメモ
リ及びキャッシュ制御部の動作を示すフローチャートで
ある。
【図14】ライト要求を受信した場合のキャッシュメモ
リ及びキャッシュ制御部の動作を示すフローチャートで
ある。
【図15】従来のマルチスレッド実行方法の処理の概要
を示す図である。
【図16】従来の問題点の説明図である。
【符号の説明】
1−0〜1−3…スレッド実行部 2…第1のバス 3…スレッド管理部 4…第2のバス 5…メインメモリ
フロントページの続き (51)Int.Cl.7 識別記号 FI テーマコート゛(参考) G06F 9/46 360 G06F 9/46 360B 360C 15/16 610 15/16 610Z 15/177 674 15/177 674A (72)発明者 松下 智 東京都港区芝五丁目7番1号 日本電気株 式会社内 Fターム(参考) 5B005 JJ11 KK22 MM05 NN22 NN71 5B045 BB12 GG02 GG11 5B098 AA03 AA10 GA05 GC15 GD02 GD03 GD14 GD22

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】 単一のプログラムを複数のスレッドに分
    割し複数のスレッド実行部で並列に実行するマルチスレ
    ッド実行方法において、ターム後で確定前のスレッドを
    持つスレッド実行部の前記スレッドをその直後の子スレ
    ッドへマージし、前記スレッド実行部へ新たなスレッド
    をフォークすることを特徴とするマルチスレッド実行方
    法。
  2. 【請求項2】 単一のプログラムを複数のスレッドに分
    割し複数のスレッド実行部で並列に実行するマルチスレ
    ッド実行方法において、個々のスレッド実行部を、フォ
    ーク可能なフリー状態、スレッドを実行しているビジー
    状態、ターム後で確定前のスレッドを持つターム状態の
    3つの状態で管理し、新たなスレッドをフォークする
    際、フリー状態のスレッド実行部が存在しない場合、タ
    ーム状態のスレッド実行部が持つスレッドをその直後の
    子スレッドへマージして当該スレッド実行部をフリー状
    態にし、新たなスレッドをフォークすることを特徴とす
    るマルチスレッド実行方法。
  3. 【請求項3】 個々のスレッド実行部毎に仮実行用バッ
    ファを備え、ターム状態のスレッド実行部が持つスレッ
    ドをその直後の子スレッドへマージする際、ターム状態
    のスレッド実行部の仮実行用バッファに保存されている
    仮実行結果を前記子スレッドを実行するスレッド実行部
    の仮実行用バッファへ転送する請求項1または2記載の
    マルチスレッド実行方法。
  4. 【請求項4】 個々のスレッド実行部毎に仮実行用バッ
    ファを兼ねるキャッシュメモリを備え、前記キャッシュ
    メモリの各キャッシュライン毎に、ターム後で確定前の
    スレッドが生成したデータと前記マージ後に新たに生成
    されたスレッドが生成したデータとを区別するバージョ
    ン情報を保持し、各スレッド実行部のキャッシュメモリ
    は、他のスレッド実行部からのアクセスに対して、前記
    バージョン情報とスレッドの逐次実行順序とを考慮した
    選択的な応答を行う請求項1または2記載のマルチスレ
    ッド実行方法。
  5. 【請求項5】 各スレッド実行部で実行されるスレッド
    が自身のキャッシュメモリに書き込みを行う際、書き込
    み対象となるキャッシュラインのバージョン情報が自ス
    レッドのバージョンより古い場合、当該キャッシュライ
    ンのバージョンが親スレッドの終了に応じて適宜変更さ
    れて自スレッドのバージョンに一致するまで待ち合わせ
    を行う請求項4記載のマルチスレッド実行方法。
  6. 【請求項6】 単一のプログラムを複数のスレッドに分
    割し複数のスレッド実行部で並列に実行する並列プロセ
    ッサシステムにおいて、各スレッド実行部を相互に接続
    する通信路と、ターム後で確定前のスレッドを持つスレ
    ッド実行部の前記スレッドをその直後の子スレッドへマ
    ージし、前記スレッド実行部へ新たなスレッドをフォー
    クする手段とを含むことを特徴とする並列プロセッサシ
    ステム。
  7. 【請求項7】 単一のプログラムを複数のスレッドに分
    割し複数のスレッド実行部で並列に実行する並列プロセ
    ッサシステムにおいて、各スレッド実行部を相互に接続
    する通信路と、個々のスレッド実行部を、フォーク可能
    なフリー状態、スレッドを実行しているビジー状態、タ
    ーム後で確定前のスレッドを持つターム状態の3つの状
    態で管理する手段と、新たなスレッドをフォークする
    際、フリー状態のスレッド実行部が存在しない場合、タ
    ーム状態のスレッド実行部が持つスレッドをその直後の
    子スレッドへマージして当該スレッド実行部をフリー状
    態にし、新たなスレッドをフォークする手段とを含むこ
    とを特徴とする並列プロセッサシステム。
  8. 【請求項8】 個々のスレッド実行部毎に仮実行用バッ
    ファを備え、ターム状態のスレッド実行部が持つスレッ
    ドをその直後の子スレッドへマージする際、ターム状態
    のスレッド実行部の仮実行用バッファに保存されている
    仮実行結果を前記子スレッドを実行するスレッド実行部
    の仮実行用バッファへ転送する構成を有する請求項6ま
    たは7記載の並列プロセッサシステム。
  9. 【請求項9】 個々のスレッド実行部毎に仮実行用バッ
    ファを兼ねるキャッシュメモリを備え、前記キャッシュ
    メモリの各キャッシュライン毎に、ターム後で確定前の
    スレッドが生成したデータと前記マージ後に新たに生成
    されたスレッドが生成したデータとを区別するバージョ
    ン情報を保持し、各スレッド実行部のキャッシュメモリ
    は、他のスレッド実行部からのアクセスに対して、前記
    バージョン情報とスレッドの逐次実行順序とを考慮した
    選択的な応答を行う構成を有する請求項6または7記載
    の並列プロセッサシステム。
  10. 【請求項10】 各スレッド実行部のキャッシュメモリ
    は、自スレッド実行部で実行されるスレッドからの書き
    込み時、書き込み対象となるキャッシュラインのバージ
    ョン情報が前記スレッドのバージョンより古い場合、当
    該キャッシュラインのバージョンが親スレッドの終了に
    応じて適宜変更されて前記スレッドのバージョンに一致
    するまで待ち合わせを行う構成を有する請求項9記載の
    並列プロセッサシステム。
JP2001218158A 2001-07-18 2001-07-18 マルチスレッド実行方法及び並列プロセッサシステム Expired - Fee Related JP3632635B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2001218158A JP3632635B2 (ja) 2001-07-18 2001-07-18 マルチスレッド実行方法及び並列プロセッサシステム
US10/196,613 US7082601B2 (en) 2001-07-18 2002-07-17 Multi-thread execution method and parallel processor system
GB0216756A GB2382181B (en) 2001-07-18 2002-07-18 Multi-thread execution method and parallel processor system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001218158A JP3632635B2 (ja) 2001-07-18 2001-07-18 マルチスレッド実行方法及び並列プロセッサシステム

Publications (2)

Publication Number Publication Date
JP2003030050A true JP2003030050A (ja) 2003-01-31
JP3632635B2 JP3632635B2 (ja) 2005-03-23

Family

ID=19052381

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001218158A Expired - Fee Related JP3632635B2 (ja) 2001-07-18 2001-07-18 マルチスレッド実行方法及び並列プロセッサシステム

Country Status (3)

Country Link
US (1) US7082601B2 (ja)
JP (1) JP3632635B2 (ja)
GB (1) GB2382181B (ja)

Cited By (17)

* 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 演算処理装置
JP2006518077A (ja) * 2003-02-13 2006-08-03 サン・マイクロシステムズ・インコーポレイテッド 臨界領域を投機的に実行することによりロックを回避するための方法および装置
JP2007504535A (ja) * 2003-08-28 2007-03-01 ミップス テクノロジーズ インコーポレイテッド マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令
JP2008521146A (ja) * 2004-11-19 2008-06-19 インテル コーポレイション 限定された誤りによる遅延した更新によるソフトウェアキャッシュ処理
JP2008544417A (ja) * 2005-06-29 2008-12-04 インテル コーポレイション キャッシュする方法、装置及びシステム
WO2009076324A2 (en) * 2007-12-10 2009-06-18 Strandera Corporation Strand-based computing hardware and dynamically optimizing strandware for a high performance microprocessor system
WO2009101976A1 (ja) * 2008-02-15 2009-08-20 Nec Corporation プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム
JP2010009628A (ja) * 2004-12-09 2010-01-14 Hitachi Ltd サーバ装置
US7870553B2 (en) 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
JP2012064215A (ja) * 2010-09-20 2012-03-29 Internatl Business Mach Corp <Ibm> アシスト・ハードウエア・スレッドの拡張可能な状態追跡のための方法、情報処理システム、およびプロセッサ
JP2012508939A (ja) * 2008-11-24 2012-04-12 インテル コーポレイション シーケンシャル・プログラムを複数スレッドに分解し、スレッドを実行し、シーケンシャルな実行を再構成するシステム、方法および装置
US8266620B2 (en) 2003-08-28 2012-09-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
JP2013502649A (ja) * 2009-08-20 2013-01-24 インターナショナル・ビジネス・マシーンズ・コーポレーション 投機的バージョニング・キャッシュにおけるチェックポインティングのための方法、コンピュータ・プログラム、およびデータ処理システム(投機的バージョニング・キャッシュにおけるチェックポインティング)
JP2013520753A (ja) * 2010-02-24 2013-06-06 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ハードウエアトランザクショナルメモリにおける自動サスペンド及び再開
US8700779B2 (en) 2004-12-09 2014-04-15 Hitachi, Ltd. Multi node server system with plane interconnects the individual nodes equidistantly
JP2014089733A (ja) * 2008-12-30 2014-05-15 Intel Corp ローカルにバッファリングされたデータをサポートするためのキャッシュコヒーレンスプロトコルの拡張
US9032404B2 (en) 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3702813B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
GB0311006D0 (en) * 2003-05-13 2003-06-18 Nokia Corp Registrations in a communication system
JP3889726B2 (ja) * 2003-06-27 2007-03-07 株式会社東芝 スケジューリング方法および情報処理システム
US20050050305A1 (en) * 2003-08-28 2005-03-03 Kissell Kevin D. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US7496921B2 (en) * 2003-08-29 2009-02-24 Intel Corporation Processing block with integrated light weight multi-threading support
GB0320386D0 (en) * 2003-08-30 2003-10-01 Ibm A method, apparatus and computer program for executing a program
CA2442803A1 (en) * 2003-09-26 2005-03-26 Ibm Canada Limited - Ibm Canada Limitee Structure and method for managing workshares in a parallel region
US7913206B1 (en) * 2004-09-16 2011-03-22 Cadence Design Systems, Inc. Method and mechanism for performing partitioning of DRC operations
US9753754B2 (en) * 2004-12-22 2017-09-05 Microsoft Technology Licensing, Llc Enforcing deterministic execution of threads of guest operating systems running in a virtual machine hosted on a multiprocessor machine
US7627864B2 (en) * 2005-06-27 2009-12-01 Intel Corporation Mechanism to optimize speculative parallel threading
US7904852B1 (en) 2005-09-12 2011-03-08 Cadence Design Systems, Inc. Method and system for implementing parallel processing of electronic design automation tools
US7593971B1 (en) * 2005-12-07 2009-09-22 Nvidia Corporation Configurable state table for managing multiple versions of state information
US7350027B2 (en) * 2006-02-10 2008-03-25 International Business Machines Corporation Architectural support for thread level speculative execution
US8201157B2 (en) * 2006-05-24 2012-06-12 Oracle International Corporation Dependency checking and management of source code, generated source code files, and library files
US8549499B1 (en) * 2006-06-16 2013-10-01 University Of Rochester Parallel programming using possible parallel regions and its language profiling compiler, run-time system and debugging support
US8448096B1 (en) 2006-06-30 2013-05-21 Cadence Design Systems, Inc. Method and system for parallel processing of IC design layouts
GB0625330D0 (en) 2006-12-20 2007-01-24 Ibm System,method and computer program product for managing data using a write-back cache unit
WO2008132761A2 (en) * 2007-04-26 2008-11-06 Hewlett-Packard Development Company L.P. Method and system for managing heap across process replication
JP4908363B2 (ja) * 2007-09-25 2012-04-04 株式会社東芝 情報処理装置、並列処理最適化方法およびプログラム
JP5195913B2 (ja) * 2008-07-22 2013-05-15 トヨタ自動車株式会社 マルチコアシステム、車両用電子制御ユニット、タスク切り替え方法
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
KR101572879B1 (ko) * 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US8397052B2 (en) * 2009-08-19 2013-03-12 International Business Machines Corporation Version pressure feedback mechanisms for speculative versioning caches
US8468539B2 (en) * 2009-09-03 2013-06-18 International Business Machines Corporation Tracking and detecting thread dependencies using speculative versioning cache
US8832663B2 (en) * 2009-11-23 2014-09-09 International Business Machines Corporation Thread serialization and disablement tool
US8549523B2 (en) 2009-11-23 2013-10-01 International Business Machines Corporation Performing runtime analysis and control of folding identified threads by assuming context of another thread and executing in lieu of another thread folding tool
US20120198458A1 (en) * 2010-12-16 2012-08-02 Advanced Micro Devices, Inc. Methods and Systems for Synchronous Operation of a Processing Device
US8818970B2 (en) * 2011-04-08 2014-08-26 Symantec Corporation Partitioning a directory while accessing the directory
US9417855B2 (en) 2011-09-30 2016-08-16 Intel Corporation Instruction and logic to perform dynamic binary translation
US9747107B2 (en) 2012-11-05 2017-08-29 Nvidia Corporation System and method for compiling or runtime executing a fork-join data parallel program with function calls on a single-instruction-multiple-thread processor
WO2014093696A2 (en) 2012-12-12 2014-06-19 Massachusetts Institute Of Technology Insulin derivatives for diabetes treatment
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
CN105988704B (zh) * 2015-03-03 2020-10-02 上海触乐信息科技有限公司 高效的触摸屏文本输入系统及方法
EP3079064B1 (en) * 2015-04-07 2017-11-29 Huawei Technologies Co., Ltd. Method and apparatus for tracking objects in a first memory
JP6799258B2 (ja) * 2016-12-28 2020-12-16 富士通株式会社 ノード間通信プログラム、並列処理装置およびノード間通信方法
KR20200071282A (ko) * 2018-12-11 2020-06-19 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5050070A (en) 1988-02-29 1991-09-17 Convex Computer Corporation Multi-processor computer system having self-allocating processors
US5546593A (en) * 1992-05-18 1996-08-13 Matsushita Electric Industrial Co., Ltd. Multistream instruction processor able to reduce interlocks by having a wait state for an instruction stream
US5970250A (en) * 1994-03-24 1999-10-19 International Business Machines Corporation System, method, and computer program product for scoping operating system semanticis in a computing environment supporting multi-enclave processes
JP2882475B2 (ja) 1996-07-12 1999-04-12 日本電気株式会社 スレッド実行方法
JP2970553B2 (ja) * 1996-08-30 1999-11-02 日本電気株式会社 マルチスレッド実行方法
AU6586898A (en) * 1997-03-21 1998-10-20 University Of Maryland Spawn-join instruction set architecture for providing explicit multithreading
US6035374A (en) * 1997-06-25 2000-03-07 Sun Microsystems, Inc. Method of executing coded instructions in a multiprocessor having shared execution resources including active, nap, and sleep states in accordance with cache miss latency
US5890008A (en) * 1997-06-25 1999-03-30 Sun Microsystems, Inc. Method for dynamically reconfiguring a processor
US6003066A (en) * 1997-08-14 1999-12-14 International Business Machines Corporation System for distributing a plurality of threads associated with a process initiating by one data processing station among data processing stations
US6697935B1 (en) * 1997-10-23 2004-02-24 International Business Machines Corporation Method and apparatus for selecting thread switch events in a multithreaded processor
US6694425B1 (en) * 2000-05-04 2004-02-17 International Business Machines Corporation Selective flush of shared and other pipeline stages in a multithread processor

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006518077A (ja) * 2003-02-13 2006-08-03 サン・マイクロシステムズ・インコーポレイテッド 臨界領域を投機的に実行することによりロックを回避するための方法および装置
US8266620B2 (en) 2003-08-28 2012-09-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
JP2007504535A (ja) * 2003-08-28 2007-03-01 ミップス テクノロジーズ インコーポレイテッド マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令
US9032404B2 (en) 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US7870553B2 (en) 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
JP4818918B2 (ja) * 2003-08-28 2011-11-16 ミップス テクノロジーズ インコーポレイテッド マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令
US8145884B2 (en) 2003-08-28 2012-03-27 Mips Technologies, Inc. Apparatus, method and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
JP2006085292A (ja) * 2004-09-14 2006-03-30 Matsushita Electric Ind Co Ltd 演算処理装置
JP2008521146A (ja) * 2004-11-19 2008-06-19 インテル コーポレイション 限定された誤りによる遅延した更新によるソフトウェアキャッシュ処理
US8700779B2 (en) 2004-12-09 2014-04-15 Hitachi, Ltd. Multi node server system with plane interconnects the individual nodes equidistantly
JP2010009628A (ja) * 2004-12-09 2010-01-14 Hitachi Ltd サーバ装置
JP2008544417A (ja) * 2005-06-29 2008-12-04 インテル コーポレイション キャッシュする方法、装置及びシステム
WO2009076324A2 (en) * 2007-12-10 2009-06-18 Strandera Corporation Strand-based computing hardware and dynamically optimizing strandware for a high performance microprocessor system
WO2009076324A3 (en) * 2007-12-10 2009-08-13 Strandera Corp Strand-based computing hardware and dynamically optimizing strandware for a high performance microprocessor system
JP5278336B2 (ja) * 2008-02-15 2013-09-04 日本電気株式会社 プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム
WO2009101976A1 (ja) * 2008-02-15 2009-08-20 Nec Corporation プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム
JP2012508939A (ja) * 2008-11-24 2012-04-12 インテル コーポレイション シーケンシャル・プログラムを複数スレッドに分解し、スレッドを実行し、シーケンシャルな実行を再構成するシステム、方法および装置
JP2014089733A (ja) * 2008-12-30 2014-05-15 Intel Corp ローカルにバッファリングされたデータをサポートするためのキャッシュコヒーレンスプロトコルの拡張
JP2013502649A (ja) * 2009-08-20 2013-01-24 インターナショナル・ビジネス・マシーンズ・コーポレーション 投機的バージョニング・キャッシュにおけるチェックポインティングのための方法、コンピュータ・プログラム、およびデータ処理システム(投機的バージョニング・キャッシュにおけるチェックポインティング)
JP2013520753A (ja) * 2010-02-24 2013-06-06 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ハードウエアトランザクショナルメモリにおける自動サスペンド及び再開
JP2012064215A (ja) * 2010-09-20 2012-03-29 Internatl Business Mach Corp <Ibm> アシスト・ハードウエア・スレッドの拡張可能な状態追跡のための方法、情報処理システム、およびプロセッサ

Also Published As

Publication number Publication date
GB0216756D0 (en) 2002-08-28
GB2382181B (en) 2005-01-19
JP3632635B2 (ja) 2005-03-23
US20030018684A1 (en) 2003-01-23
US7082601B2 (en) 2006-07-25
GB2382181A (en) 2003-05-21

Similar Documents

Publication Publication Date Title
JP3632635B2 (ja) マルチスレッド実行方法及び並列プロセッサシステム
JP3139392B2 (ja) 並列処理システム
JP3661614B2 (ja) キャッシュメモリ制御方法及びマルチプロセッサシステム
US7533227B2 (en) Method for priority scheduling and priority dispatching of store conditional operations in a store queue
US8225120B2 (en) Wake-and-go mechanism with data exclusivity
US10423446B2 (en) Data processing
US8015379B2 (en) Wake-and-go mechanism with exclusive system bus response
US8127080B2 (en) Wake-and-go mechanism with system address bus transaction master
US8145849B2 (en) Wake-and-go mechanism with system bus response
US20100125717A1 (en) Synchronization Controller For Multiple Multi-Threaded Processors
US8255591B2 (en) Method and system for managing cache injection in a multiprocessor system
US11237966B2 (en) System and method for event monitoring in cache coherence protocols without explicit invalidations
JP2001236221A (ja) マルチスレッドを利用するパイプライン並列プロセッサ
JP4568292B2 (ja) キャッシュライン・ポーリングを実行する方法、装置、プログラム及び情報処理システム
JP2012104140A (ja) 待機状態にあるプロセッサ実行リソースの共有
US8850167B2 (en) Loading/discarding acquired data for vector load instruction upon determination of prediction success of multiple preceding branch instructions
CN101401071B (zh) 利用存储和预留指令执行高速缓存线轮询操作的方法、系统、设备和产品
KR20200014378A (ko) 직무 관리
JP2000047887A (ja) 投機的マルチスレッド処理方法および投機的マルチスレッド処理装置
JP4608099B2 (ja) ジョブ信号を処理する多数の処理ユニットを有する処理システムにおけるジョブ信号処理方法および処理システム
JP2002530735A5 (ja)
US20080134187A1 (en) Hardware scheduled smp architectures
US20050283783A1 (en) Method for optimizing pipeline use in a multiprocessing system
JP7346649B2 (ja) 同期制御システムおよび同期制御方法
JP4631442B2 (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

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: 20041130

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20041213

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20080107

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20090107

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20100107

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20110107

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20110107

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20120107

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20130107

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20130107

Year of fee payment: 8

LAPS Cancellation because of no payment of annual fees