JP2002163121A - 仮想マルチスレッドプロセッサ及びスレッド実行方法 - Google Patents

仮想マルチスレッドプロセッサ及びスレッド実行方法

Info

Publication number
JP2002163121A
JP2002163121A JP2000356238A JP2000356238A JP2002163121A JP 2002163121 A JP2002163121 A JP 2002163121A JP 2000356238 A JP2000356238 A JP 2000356238A JP 2000356238 A JP2000356238 A JP 2000356238A JP 2002163121 A JP2002163121 A JP 2002163121A
Authority
JP
Japan
Prior art keywords
thread
virtual
register
instruction
processor
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.)
Pending
Application number
JP2000356238A
Other languages
English (en)
Inventor
Shigehiro Asano
滋博 浅野
Mitsuo Saito
光男 斎藤
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2000356238A priority Critical patent/JP2002163121A/ja
Publication of JP2002163121A publication Critical patent/JP2002163121A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】 【課題】 ハードウェアによる制限を受けずに多数のス
レッドを扱うことのできる仮想マルチスレッドプロセッ
サを提供すること。 【解決手段】 ハードウェア・スレッド(3、13等)
上で新規に起動されたスレッドに、仮想スレッド番号を
割り当てる。レジスタ・ファイル・キャッシュ5は、仮
想スレッド識別番号およびレジスタ番号をキーとして各
スレッドの各レジスタの内容をキャッシュする。発行制
御を行うイシュー部4は、発行対象となる命令について
該当するスレッド識別番号およびレジスタ識別番号をキ
ーとしてレジスタ・ファイル・キャッシュ5をアクセス
し、ヒットした場合に、少なくともレジスタに関しては
該命令の発行は可能であると判断する。キャッシュ・ミ
スの場合には、レジスタ・ファイル・キャッシュ5とコ
ンテキスト・セーブ用メモリ11との間で該当するデー
タの転送が行われる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、複数のスレッドを
実行可能な仮想マルチスレッドプロセッサ及びスレッド
実行方法に関する。
【0002】
【従来の技術】一つのプロセッサ上で複数のスレッドを
実行するマルチスレッドプロセッサは、CPU内部の演
算器やメモリのレーテンシを隠蔽するための技術として
広く知られている。
【0003】しかしながら、従来のマルチスレッドプロ
セッサは、レジスタファイルなどのハードウェア資源を
スレッドごとに用意することで複数のスレッドを実装す
るものであるので、実装できる(すなわちユーザが使用
できる)スレッドの数は、レジスタファイルなどのハー
ドウェアの資源の限界から限定されたものであった。
【0004】したがって、一度に可能になるスレッドの
数を例えば4程度に制限し、ハードウェア量が膨大にな
るのを防いでいた。これをプログラマの立場からみる
と、限定されたスレッドの数はプログラミングの自由度
に対して大きな制約を課していることになり、問題があ
った。
【0005】
【発明が解決しようとする課題】以上のように、従来の
マルチスレッドプロセッサでは、スレッドの数がハード
ウェアの資源の限界から限定され、プログラミングの自
由度に対して大きな制約を課していた。
【0006】本発明は、上記事情を考慮してなされたも
ので、ハードウェアによる制限を受けずに多数のスレッ
ドを扱うことのできる仮想マルチスレッドプロセッサを
提供することを目的とする。
【0007】また、マルチスレッドで記述されているプ
ログラムでは、スレッド間の同期をとることが重要であ
る。
【0008】本発明は、効率的な同期手段を持つ仮想マ
ルチスレッドプロセッサを提供することを目的とする。
【0009】
【課題を解決するための手段】本発明は、複数のスレッ
ドを同時に実行できる仮想マルチスレッドプロセッサで
あって、前記プロセッサ上で新規に起動されたスレッド
に、該スレッドを特定する仮想スレッド識別番号を割り
当てるための手段と、各スレッドを特定する仮想スレッ
ド識別番号および各レジスタを特定するレジスタ識別番
号をキーとして各スレッドの各レジスタの内容をキャッ
シュするためのキャッシュ手段と、前記プロセッサ上に
ある各スレッドの命令の発行制御を行う発行制御手段と
を備え、前記発行制御手段は、発行対象となる命令につ
いて該当する仮想スレッド識別番号およびレジスタ識別
番号をキーとして前記キャッシュ手段をアクセスし、ヒ
ットし且つ先行する命令の依存性が解決している場合
に、少なくともレジスタに関しては該命令の発行は可能
であると判断することを特徴とする。
【0010】好ましくは、前記発行制御手段は、発行可
能な命令が複数あり且つ空いている演算ユニット数の制
限のためにそれらのすべてを発行することができない場
合には、所定の基準で選択された一部の命令のみ発行す
るようにしてもよい。好ましくは、前記発行制御手段に
より前記発行対象となる命令について前記仮想スレッド
識別番号および前記レジスタ識別番号をキーとして前記
キャッシュ手段がアクセスされ、キャッシュ・ミスが発
生した場合に、該キャッシュ手段と所定のメモリとの間
で該当するデータの転送を行うようにしてもよい。好ま
しくは、前記プロセッサ上で実行中のスレッドがレーテ
ンシの長いハードウェア資源に対して要求を出した場合
に明示的に該スレッドを待避させる第1の処理と、待避
中の前記スレッドが出した前記要求に対する前記所定の
ハードウェア資源からの応答があった後に該応答に対応
する要求を出したスレッドを復帰すべきと判断される場
合に該スレッドを復帰させる第2の処理とを行うための
処理手段を更に備えるようにしてもよい。
【0011】また、本発明は、複数のスレッドを同時に
実行できる仮想マルチスレッドプロセッサであって、前
記プロセッサ上で新規に起動されたスレッドに、該スレ
ッドを特定する仮想スレッド識別番号を割り当てるため
の手段と、少なくとも一つの同期用カウンタと、前記同
期用カウンタの値を、同期をとるべきスレッドの数に設
定するための手段とを備え、同期をとるべき各々のスレ
ッドにおいて同期をとるための同期命令に達した際に
は、前記同期用カウンタをデクリメントし、デクリメン
トされた後の前記同期用カウンタの値が0にならなけれ
ば、当該同期命令を発行したスレッドを復帰可能でない
状態として待避させ、デクリメントされた後の前記同期
用カウンタの値が0になれば、当該同期命令を発行した
スレッドは、先に同期命令に達し復帰可能でない状態と
して待避されたスレッドの状態を、復帰可能な状態に変
更することを特徴とする。
【0012】好ましくは、復帰可能な状態として待避さ
れたスレッドを、所定の復帰条件が成立した場合に復帰
させる処理を行うための手段を更に備えるようにしても
よい。
【0013】なお、装置に係る本発明は方法に係る発明
としても成立し、方法に係る本発明は装置に係る発明と
しても成立する。
【0014】本発明では、レジスタファイルを、仮想ス
レッド識別番号(VTID)およびレジスタ識別番号
(RID)をキーとして引かれるキャッシュとして構成
する。プロセッサ上の資源に割り当てる仮想スレッド識
別番号(VTID)を適宜切り替えることによって、実
際にハードウェア上に存在するスレッドより、仮想的に
多くのスレッドが走行しているようにみせることができ
る。
【0015】また、一般にプログラムによって使用され
るレジスタの数は、用意されているレジスタの数より少
ないことから、スレッドを切り替えるとき、レジスタフ
ァイルをすべてセーブ(Save)およびリストア(R
estore)するかわりに、必要なものだけセーブお
よびリストアすることができる。
【0016】また、本発明では、複数のスレッドを同時
に実行できるSMT(Simultaneous Mu
lti Tread)プロセッサにおいて、キャッシュ
されたレジスタファイルにミスしたときは、ミスしたレ
ジスタを使用する命令の発行が行われないだけなので、
プロセッサ全体がストールすることを回避できる。つま
り、SMTプロセッサのイシュー・ロジックによって、
レジスタファイルにミスしたスレッドは、レジスタが利
用可能でない、すなわち発行可能でないと判定され、他
のスレッドから発行可能な命令が発行されることにな
る。
【0017】本発明によれば、スレッドの待避・復帰を
可能とすることによって、プログラマにハードウェアで
用意されたより多くのスレッドを見せることが可能にな
り、プログラミングの自由度が増す。また、その際に、
マルチスレッドプロセッサ上のレジスタの内容などをメ
モリ上にセーブおよびリストアする回数を少なくし、実
行時間を短縮することができる。
【0018】また、本発明では、仮想スレッド番号(V
TID)ごとに同期機構を実現するためのカウンタを設
ける。このカウンタは、同期にかかわる複数のスレッド
が同期命令によってこのカウンタをデクリメントするよ
うに作用する。なお、カウンタの初期値は、同期にかか
わるスレッドの数が設定されている。デクリメントの結
果、カウンタの値が0でなかったスレッドは、Slee
p状態に入る。デクリメントの結果、カウンタが0であ
ったスレッドは、同期処理ルーチンを実行する。同期処
理ルーチンでは、同期命令の結果、Sleep状態にな
っていたスレッドをReady状態にすることで、最後
に同期命令を実行したスレッドと他のスレッドの同期が
取れることになる。
【0019】このように、本発明によれば、効率的にス
レッド間の同期をとることができる。
【0020】
【発明の実施の形態】以下、図面を参照しながら発明の
実施の形態を説明する。
【0021】(第1の実施形態)まず、本発明の第1の
実施形態について説明する。
【0022】図1に、本実施形態に係る仮想マルチスレ
ッドプロセッサの構成例を示す。
【0023】なお、図1では、本発明をSMT(Sim
ultaneous MultiTread)プロセッ
サに適用した例として、In−Orderスーパースカ
ラープロセッサの構成例を示している。
【0024】まず、ハードウェア・スレッドの概念につ
いて説明しておく。ハードウェア・スレッドは、インス
トラクション・キュー(図1では3)に接続されている
各プログラムカウンタ(図1では13)に対応した概念
で、図1の構成例の場合は4つのプログラムカウンタに
対応して4つのハードウェア・スレッドがあることにな
る。ハードウェア・スレッドは、存在する複数のスレッ
ドの中で、現にフェッチされているストリームを指して
いる。本プロセッサで用意するハードウェア・スレッド
の数nは、基本的には、任意に設定(設計)可能であ
る。ハードウェア・スレッドは、物理スレッド番号(P
TID(Physical ThreadID))で管
理される。
【0025】本実施形態では、詳しくは後述するよう
に、本プロセッサにおいて各スレッドに固有の仮想スレ
ッド番号(VTID(Virtual Thread
ID))を割り当てて管理し、必要に応じてスレッドを
ハードウェア・スレッドからメモリへ待避させあるいは
メモリからハードウェア・スレッドへ復帰させることに
よって、見かけ上、ハードウェア・スレッドの数nを上
回る数のスレッドを扱うことができるようになってい
る。この意味におけるスレッドを、ハードウェア・スレ
ッドに対して、仮想スレッドと呼ぶこととする。同時に
扱うことのできる仮想スレッドの個数すなわち仮想スレ
ッドに割り当てることのできる仮想スレッド番号(VT
ID)の個数mも、基本的には、任意に設定(設計)可
能である。例えば、仮想スレッド番号を8ビットで表現
することにした場合には、最大256個の仮想スレッド
番号が使用可能となる。
【0026】さて、図1に示されるように、本プロセッ
サは、インストラクション・キャッシュ(Icach
e)1、フェッチ部(Fetch)2、n組(本例で
は、n=4)のインストラクション・キュー(IQ)
3、n組のプログラムカウンタ(PC)13、スレッド
の開始アドレスを保持するn組のSPCレジスタ19、
仮想スレッド番号(VTID)を保持するn組のSVT
レジスタ21、イシュー部(Issue)4、レジスタ
・ファイル・キャッシュ(Register File
s Cache)5、コンテキスト・セーブ用メモリ1
1、複数の演算ユニット(本例では、2つの演算器7
1,72とロード・ストア・ユニット73)、データ・
キャッシュ(Dcache)9、メモリ・インタフェー
ス(MemoryI/F)15、I/Oインタフェース
(I/O Interface)17を持つ。
【0027】コンテキスト・セーブ用メモリ11は、仮
想スレッドに対応するデータ(例えば、対応するプログ
ラムカウンタの内容、対応するステータスレジスタの内
容、対応するレジスタファイルの内容など;以下、コン
テキストと呼ぶ)を格納する。
【0028】レジスタ・ファイル・キャッシュ5は、コ
ンテキスト・セーブ用メモリ11に格納されている仮想
スレッドのコンテキストをキャッシュする。
【0029】なお、レジスタ・ファイルをキャッシュす
る技術としては、例えば、文献1(Peter R.Nuth, Willi
am J.Dally,“The Named-State Register File:Impleme
ntation and Performance”, First Ann. Internationa
l Symposium High-Performance Computer Architectur
e,pp.4-13,Jan.1995)に開示されている技術を用いるこ
とができる。
【0030】また、メモリ・インタフェース15に、メ
モリ(Memory)23が接続される。
【0031】また、I/0インタフェース17に、例え
ばコプロセッサ(Coprocessor)27などが
接続される。
【0032】図1に示されるように、本仮想マルチスレ
ッドプロセッサでは、個々のハードウェア・スレッド専
用に、プログラムカウンタ(PC)およびインストラク
ション・キュー(IQ)などの資源が設けられる。4つ
のハードウェア・スレッドをサポートする場合、4組の
プログラムカウンタ(PC)およびインストラクション
・キュー(IQ)などが必要になる。そして、ハードウ
ェア・スレッドへの仮想スレッドの対応をスレッドの実
行に応じて適宜切り替えるようにしている。なお、本プ
ロセッサでは、複数のスレッドで演算ユニットやキャッ
シュなどは共有する構成にしている。
【0033】なお、図1においては接続線の一部を省略
してある。
【0034】ここで、本プロセッサの一般的な動作につ
いて説明する。
【0035】インストラクション・キャッシュ1は、メ
モリ23から命令をキャッシュする。インストラクショ
ン・キャッシュ1がミスしたときは、メモリ23からイ
ンストラクション・キャッシュ1へ命令がリフィル(R
efill)される。
【0036】データ・キャッシュ9は、メモリ23から
データをキャッシュする。データ・キャッシュ9がミス
したときは、メモリ23からデータ・キャッシュ9へデ
ータがリフィルされる。
【0037】フェッチ部2は、命令のフェッチ(インス
トラクションキャッシュ1へのアクセス)を行う。
【0038】インストラクション・キュー3は、各スレ
ッドに対応する命令を保持する。
【0039】イシュー部4は、命令の発行制御と、命令
のデコードやレジスタファイルへのアクセスを行う。
【0040】演算器71,72やロード・ストア・ユニ
ット73は、発行された命令を実行する。その際、必要
に応じて所定のタイミングで、データ・キャッシュ9や
レジスタファイル5に対するアクセス(リード、あるい
はライト)などを行う。
【0041】なお、このプロセッサは、パイプライン・
プロセッサであってもよい。例えば、5段のパイプライ
ンの場合、次のようなステージ構成になる。 フェッチ・ステージ…命令のフェッチ ↓ デコード・ステージ…命令のデコード、レジスタファイ
ルへのアクセス ↓ 実行ステージ…命令の実行 ↓ メモリ・ステージ…メモリへのアクセス ↓ ライトバック(Writeback)ステージ…レジスタファイル
への書き込み 次に、仮想スレッドの起動に関して説明する。
【0042】まず、本実施形態では、スレッドの起動に
は、次の2つがある。一つは、スレッドが新規に起動さ
れる場合で、これを新規起動と呼ぶものとする。もう一
つは、新規起動された後に一旦メモリに待避されたスレ
ッド(後述するSleep状態からReady状態にな
ったスレッド)が復帰されて起動する場合で、これを復
帰起動と呼ぶものとする。
【0043】スレッドの新規起動は、ハードウェア上で
各スレッドが専有する必要のある資源(プログラムカウ
ンタおよびインストラクション・キュー等)のうち空い
ているものが少なくとも1スレッド分存在する場合に、
行うことができる(ここでは、この場合に対象スレッド
があればそれを優先的に新規起動させるものとする)。
例えば、図1において、ハードウェア上で3つのスレッ
ドが走行中の場合、4組のプログラムカウンタおよびイ
ンストラクション・キューなどのうち3組が使用されて
おり、1スレッド分は使用されていないので、1つのス
レッドを新規起動することができる。
【0044】スレッドの新規起動は、使用するハードウ
ェア・スレッド(例えば、ハードウェア・スレッド番号
PTID=0、1、2または3)に専用に設けられるS
PCレジスタ19(例えば、SPC0、SPC1、SP
C2またはSPC3)に、当該スレッドの開始アドレス
を設定しておき(なお、該開始アドレスはユーザが記述
した命令の実行によって設定される)、起動命令によ
り、該SPCレジスタ19から対応するプログラムカウ
ンタ13(例えば、PC0、PC1、PC2またはPC
3)に値を転送することによって、開始される。このと
き、該ハードウェア・スレッドに専用に設けられるSV
Tレジスタ21(例えば、SVT0、SVT1、SVT
2またはSVT3)には、仮想スレッド番号を設定して
おき、新規起動されたスレッドは、それが起動されたハ
ードウェア・スレッドに対応するSVTレジスタ21に
設定された仮想スレッド番号を持つようになる。
【0045】なお、ここでは、上記の仮想スレッド番号
の割り当ておよび設定は、ソフトウェアによって(ユー
ザが記述した命令の実行によって)行うことにしている
が、ハードウェアによって実現することも可能である。
ハードウェアによって仮想スレッド番号の割り当てを自
動的に行う場合には、例えば、各仮想スレッド番号につ
いて使用中か未使用であるかを知るための情報(例え
ば、仮想スレッド番号と使用/未使用フラグとのテーブ
ル、使用していない仮想スレッド番号のプール)を管理
し、スレッドが新規起動する際には未使用の仮想スレッ
ド番号から所定の基準(例えば、ランダム、番号の小さ
い順等)で選択したものを割り当ててその仮想スレッド
番号を使用中として管理し、スレッドが終了する際には
そのスレッドが使用していた仮想スレッド番号を未使用
として管理するようにすればよい。
【0046】次に、イシュー部4の処理について説明す
る。
【0047】図1において、各スレッドの各命令は、メ
モリ23から、メモリ・インタフェース15/インスト
ラクション・キャッシュ1/フェッチ部2を経由して、
スレッド対応のインストラクション・キュー3に入る。
図1の例では、インストラクション・キュー3は、ハー
ドウェア上に存在する4つのスレッドに対応して4つ
(IQ0、IQ1、IQ2、IQ3)ある。
【0048】イシュー部4は、所定のイシュー・ロジッ
クに従って、各スレッドに対応する各インストラクショ
ン・キュー3の先頭の命令の各々について、それが実行
可能か否か判断し、実行可能な命令があれば、該命令
(図1の例では、最大3つ)を、該当する実行ユニット
(図1の例では、71,72,73のいずれか)に送
る。例えば、インストラクション・キューIQ0の命令
を、ロード・ストア・ユニット73に送り、インストラ
クション・キューIQ1の命令を、演算器71に送り、
インストラクション・キューIQ3の命令を、演算器7
2に送る。
【0049】所定のイシュー・ロジックすなわち実行可
能な命令を判定するロジックとしては、例えば、その時
点で、当該命令に対応する実行ユニットが空いていて、
かつ、レジスタ・ファイル・キャッシュ5に対応するレ
ジスタが存在しており、かつ、対応するレジスタが先行
する命令で書き込みに指定されている場合は、その書き
込みが終了した場合に、実行可能と判断するものであ
る。また、その際に、1以上の実行ユニットが空いてお
り、空いている実行ユニットを使うことができれば実行
可能となる命令が複数ある場合に、それら命令のすべて
を実行するには、空いている実行ユニットの数が不足す
るときは、それら命令を先頭に持つ複数のインストラク
ション・キュー3のうちから所定の選択基準に従って一
部のものが選択され、選択されたインストラクション・
キュー3の先頭の命令が、空いている実行ユニットに割
り当てられる。
【0050】所定の選択基準としては、ランダムに選択
する方法の他に、インストラクション・キューに着目す
る方法として、その時点でのキュー長が短いインストラ
クション・キュー3を優先的に選択する方法、予め各イ
ンストラクション・キュー3に付与された固定の優先順
位に基づいて選択する方法など、様々な方法が考えられ
る。あるいは、スレッドに着目する方法として、仮想ス
レッド番号が小さいスレッド(に対応するインストラク
ション・キュー)から選択する方法、各スレッドについ
て(例えばユーザが命令を記述することにより)優先度
を設定し、より優先度の高いもの(に対応するインスト
ラクション・キュー)から選択する方法など、種々の方
法がある。また、それらを適宜組み合わせた方法も可能
である。
【0051】例えば、演算器71とロード・ストア・ユ
ニット73が空いており、インストラクション・キュー
IQ0の命令は、ロード・ストア・ユニット73で実行
可能であり且つレジスタ・ファイル・キャッシュ5に対
応するレジスタが存在しており、インストラクション・
キューIQ1〜IQ4の命令は、演算器71で実行可能
であり且つレジスタ・ファイル・キャッシュ5に対応す
るレジスタが存在しているものとする。ロード・ストア
・ユニット73で実行可能な命令はインストラクション
・キューIQ0の命令だけであるので、インストラクシ
ョン・キューIQ1の命令を、演算器71に送ればよ
い。一方、演算器71で実行可能な命令はインストラク
ション・キューIQ1〜IQ4の3つの命令であるの
で、発行すべき命令(のインストラクション・キュー)
の選択が必要となり、例えばインストラクション・キュ
ーIQ1が選択されたとすると、その命令を、演算器7
2に送ることになる。
【0052】次に、レジスタ・ファイル・キャッシュ5
の働きについて説明する。
【0053】レジスタ・ファイル・キャッシュ5は、ス
レッドに付けられた仮想スレッド番号(VTID)とレ
ジスタ番号(RID)とをキーとして引かれるキャッシ
ュになっている。レジスタ・ファイル・キャッシュ5に
ついて、キャッシュにミスした場合は、コンテキスト・
セーブ用メモリ11から必要なデータがフェッチされ
る。また、キャッシュの容量には、ハードウェア上の制
約があるので、LRUなどのアルゴリズムなどによりデ
アロケートされるエントリが決定され、コンテキスト・
セーブ用メモリ11に書き込まれる。
【0054】なお、レジスタファイルキャッシュ5につ
いて、キャッシュ・ミスは、イシュー部4が、各スレッ
ドに対応する各インストラクション・キュー3の先頭の
命令の各々について、それが実行可能か否か判断する際
に、レジスタ・ファイル・キャッシュ5に対応するレジ
スタが存在しているか否かを調べた際に発生する。この
場合は、コンテキスト・セーブ用メモリ11から必要な
データがフェッチされるので、イシュー部4が当該命令
について次に判断を行う際には、レジスタ・ファイル・
キャッシュ5には対応するレジスタが存在している状態
になっている。
【0055】一方、実行ユニット(例えば71等)の演
算結果やメモリ23からデータ・キャッシュ9経由で読
み出されたデータは、レジスタ・ファイル・キャッシュ
5に書き戻される。
【0056】なお、デアロケート時にコンテキスト・セ
ーブ用メモリ11に書き込まなくてもよい場合を検出す
るため、ソフトウェアからdeadなレジスタを示す手
法を用いてもよい。この手法によれば、deadなレジ
スタは、コンテキスト・セーブ用メモリ11に書き込む
必要がなく、新たなレジスタが必要になった場合のアロ
ケーションの速度を早くすることができる。この手法と
しては、例えば、文献2(Jack L.Lo et.al,“Software-Dir
ected Register Deallocation for Simultaneous Multi
threaded Processors”,IEEE Trans. on Parallel and
Distributed Systems, Vol.10,No.9,Sep,1999)に開示さ
れた技術を用いることができる。次に、仮想スレッドの
状態およびその遷移について説明する。
【0057】図2に、仮想スレッドの4つの状態と、状
態間の遷移関係を示す。
【0058】仮想スレッドの状態には、パイプライン上
を流れている状態(Active状態)、インストラク
ション・キュー3にはあるが実行できない状態(Wai
t状態)、同期など応答を待っている状態(Sleep
状態)、Sleep状態から応答が返って実行可能な状
態(Ready状態)の4つがある。
【0059】状態間の遷移としては、Active状と
Wait状態との間の遷移関係と、Active状態か
らSleep状態へ/Sleep状態からReady状
態へ/Ready状態からActive状態への遷移関
係との2系統がある。
【0060】Active状からWait状態への遷移
は、キャッシュ・ミスやレーテンシなどによって起こ
り、それが解消することによって、Active状から
Wait状態へ戻る。
【0061】Active状態からSleep状態への
遷移は、例えば命令のレーテンシが長い場合、例えばコ
プロセッサ命令の場合(あるいは他の理由でスリープす
べき場合)などに、明示的に行われる。
【0062】Sleep状態からReady状態への遷
移は、Sleep状態に遷移するときに出した命令ある
いは要求(例えばあるコプロセッサにある処理の実行を
要求する命令)に対応する応答が、(例えば要求を受け
たコプロセッサから)返されたことを契機として行われ
る。なお、この他に、あるスレッドがSleep状態の
他のスレッドをReady状態にすることを指示する命
令を用意することも可能である。
【0063】Active状態のスレッドがSleep
状態に遷移すると、いままでインストラクション・キュ
ー3に命令を詰めていた当該スレッドに対応するプログ
ラムカウンタ13は無効化される(インストラクション
・キュー3内の命令も無効化される)。なお、この時点
で、レジスタ・ファイル・キャッシュ5の該当するデー
タを維持しておく方法と、コンテキスト・セーブ用メモ
リ11に追い出す方法とがある。
【0064】次に、Ready状態からActive状
態への遷移について説明する。
【0065】上記のように、Active状態のスレッ
ドがSleep状態に遷移して、対応するプログラムカ
ウンタ13は無効化されると、新規起動または復帰起動
が可能になる。ここでは、新規起動できるスレッドがあ
れば新規起動を行い、新規起動できるスレッドがなく且
つ復帰起動できるスレッドがあれば復帰起動するものと
する。なお、新規起動できるスレッドも復帰起動できる
スレッドもなければ、新規起動できるスレッドまたは復
帰起動できるスレッドが出現するまで、当該ハード・ウ
ェアスレッド資源は未使用(空き状態)になる。
【0066】さて、Ready状態のスレッドを復帰起
動できることとなった場合に、本実施形態では、システ
ムタスクと呼ばれる特殊なスレッドによって、Read
y状態のスレッドが複数ある場合におけるスレッドの選
択と、スレッドの復帰起動のための処理を行うものとす
る。このメカニズムにより、実行中のスレッドの邪魔を
しないことを可能にしている。
【0067】この場合、前述のようにして無効化された
プログラムカウンタ13には、新たにシステムタスクの
番地がセットされる。
【0068】起動されたシステムタスクは、Ready
状態になっているスレッドのうちから1つを選択し、そ
のスレッドのプログラムカウンタの値を、対応するプロ
グラムカウンタ13にセットするなどの処理を行う。す
ると、該プログラムカウンタの値に基づいて、命令が新
たにフェッチされ始め、対応するインストラクション・
キュー3に、命令が入れられる。
【0069】なお、Ready状態になっているスレッ
ドが複数ある場合に、システムタスクが、それらから1
つを選択するアルゴリズムには、様々なものが考えられ
る。例えば、ランダムに選択する方法、FIFOでもっ
とも古くReady状態になったものを選択する方法、
仮想スレッド番号が小さいものから選択する方法、各ス
レッドについて(例えばユーザが命令を記述することに
より)優先度を設定し、より優先度の高いものを選択す
る方法など、種々の方法がある。
【0070】なお、あるスレッドがReady状態の他
のスレッドをActive状態にすることを指示する命
令を用意することも可能である。
【0071】ここで、Ready状態のスレッドを高速
に検索するためには、例えば、仮想スレッド番号に対応
して、Ready状態の場合にReadyビットに1が
立つ(それ以外の場合にはReadyビットは0とす
る)ようにしたReadyレジスタを設ける方法がある
(なお、Sleep状態(例えば、01)か、Read
y状態(例えば、10)か、またはそれ以外の状態(例
えば、00)かを示すようにする方法もある)。システ
ムタスクでは、Readyレジスタを参照し、Read
yビットに1(あるいは、10)が立っているスレッド
を探索し、それが1つあればそのスレッドを、複数あれ
ばそれらから選択した1つのスレッドを、ハードウェア
・スレッドにする。
【0072】なお、本実施形態では、要求(例えばコプ
ロセッサ命令)およびその応答には、仮想スレッド番号
を付加するものとする。すなわち、要求を出す際には、
その要求元のスレッドの仮想スレッド番号を該要求に付
加するものとする。応答については、例えば、要求を受
けた資源が応答を出す際に、該要求に付加されていた仮
想スレッド番号を該応答に付加する。また、例えば、要
求/応答と仮想スレッド番号との対応を管理する管理部
を設け、要求を出す際には、その要求元のスレッドの仮
想スレッド番号を該要求に付加して一旦管理部に渡し、
管理部が仮想スレッド番号の付加されていない要求を資
源に渡し、該資源は仮想スレッド番号の付加されていな
い応答を返し、管理部は、この応答を受け、対応する仮
想スレッド番号を特定する、という構成をとることも可
能である。このようにすれば、応答が返ってきた場合
(例えば、コプロセッサ命令の実行などでSleep状
態になっているスレッドへコプロセッサ命令などから応
答が返ってきた場合)は、応答が仮想スレッド番号(V
TID)とともに返ってくるので、この仮想スレッド番
号によってReadyレジスタの対応するビットを立て
るだけでよい。
【0073】なお、上記では、仮想スレッド番号に対応
してReadyビットを持つReadyレジスタを設け
る方法を示したが、Sleep状態またはReady状
態のスレッドの仮想スレッド番号とその状態を示す情報
(例えば、Sleep状態のとき0、Ready状態の
とき1)とを1つのエントリとして含むReadyテー
ブルを設けることも可能である。
【0074】ここで、ReadyレジスタのReady
ビットが、Sleep状態か、Ready状態か、また
はそれ以外の状態(null状態と呼ぶ)(例えば、起
動されたが待避中でない状態、あるいは、まだ新規に起
動されていない状態(スレッドが終了して該仮想スレッ
ド番号が解放された状態を含む))をとる場合(あるい
はReadyレジスタ(あるいは、Readyテーブル
のReadyビットが、Sleep状態か、またはRe
ady状態をとる場合)の処理手順について説明する。
【0075】図3に、Sleep状態に遷移する場合と
して、コプロセッサ命令などのレーテンシの長い命令が
実行される際の処理手順の一例を示す。
【0076】ある仮想スレッド番号のスレッドについて
コプロセッサ命令などのレーテンシの長い命令が実行さ
れたときは、Readyレジスタ(あるいは、Read
yテーブル)の当該仮想スレッド番号に対応するRea
dyビットを、Sleep状態を示す値に設定し(ステ
ップS11)、該当するハードウェア・スレッドを無効
化する(ステップS12)。なお、ステップS11とス
テップS12は、上記とは逆の順番で行ってもよいし、
並列的に行ってもよい。
【0077】図4に、応答を受けた場合の処理手順の一
例を示す。
【0078】応答があった場合、応答に伴って返される
仮想スレッド番号から、Readyレジスタ(あるい
は、Readyテーブル)を検索する(ステップS2
1)。Readyレジスタ(あるいは、Readyテー
ブル)において、応答に伴って返された仮想スレッド番
号と同じ仮想スレッド番号を持つスレッドであってその
ReadyビットがSleep状態を示すものがあれば
(ステップS22)、該ReadyビットをReady
状態を示す値に変更する(ステップS23)。
【0079】なお、応答に伴って返された仮想スレッド
番号がいずれのテーブルにも登録されていない場合に
は、何もしないこととするか、または所定のエラー処理
をすることとする(ステップS24)。
【0080】なお、応答があってから、対応するスレッ
ドが復帰するまでの間、応答(に関するデータ;例え
ば、戻り値などを含む)は、仮想スレッド番号に対応付
けて保持される。
【0081】図5に、システムタスクに関する処理手順
の一例を示す。
【0082】Readyレジスタ(あるいは、Read
yテーブル)にReadyビットがReady状態を示
すスレッドがある場合に、ハードウェア・スレッドに空
きがあり、かつ、新規起動すべきスレッドがなければ、
当該空きハードウェア・スレッドでシステムタスクが起
動される(ステップS31)。起動されたシステムタス
クは、Ready状態のスレッドが1つならばそのスレ
ッドを復帰させるものとし、Ready状態のスレッド
が複数あるならば復帰させるものとして1つのスレッド
を選択し、その復帰させるスレッドの仮想スレッド番号
(VTID)に基づいて、プログラムカウンタの値の復
帰などの処理を行い、復帰起動させる(ステップS3
2)。なお、Readyレジスタでは、復帰されたスレ
ッドに対応するReadyビットがnull状態にさ
れ、Readyテーブルでは復帰されたスレッドに対応
するエントリが無効にされる。
【0083】これら仮想スレッドに関する処理は、イシ
ュー部4が行うようにしてもよいし、イシュー部4以外
の制御部を設けてもよい。
【0084】以上説明したように、本発明によれば、ス
レッドの待避・復帰を可能とすることによって、プログ
ラマにハードウェアで用意されたより多くのスレッドを
見せることが可能になり、プログラミングの自由度が増
す。また、その際のスレッドの切り替えも、効率且つ高
速に行うことができる。
【0085】また、上記では、システムタスクをスレッ
ドで実現したが、システムタスクを専用のハードウェア
で構成することも可能である。
【0086】また、これまでの説明では、Ready状
態のスレッドは、ハードウェア・スレッドに空きが存在
し、かつ、新規起動すべきスレッドがない場合に、復帰
起動することができるものとしたが、新規起動すべきス
レッドがあっても、Ready状態のスレッドを復帰起
動することを可能としてもよい。例えば、ハードウェア
・スレッドに空きが存在するときに、1または複数の新
規起動すべきスレッドと、1または複数のReady状
態のスレッドがあった場合に、予め定められた選択基準
に基づいて選択した1つの新規起動すべきスレッドまた
はReady状態のスレッドを新規起動または復帰起動
させるようにしてもよい。例えば、各スレッドについて
(例えばユーザが命令を記述することにより)優先度を
設定し、より優先度の高いものを選択する方法、新規起
動すべきスレッドの数とReady状態のスレッドの数
とに基づいて選択する方法、Ready状態のスレッド
の数が所定数を超えた場合にのみReady状態のスレ
ッドを優先して選択する方法など、種々の方法がある。
【0087】また、これまでの説明は、SMT(Sim
ultaneous MultiTread)プロセッ
サの例として、In−Orderスーパースカラープロ
セッサを中心として行ったが、本発明はOut−of−
Orderプロセッサにも適用可能である。
【0088】(第2の実施形態)次に、本発明の第2の
実施形態に係るスレッド間の同期方法について説明す
る。
【0089】以下で説明するスレッド間の同期方法は、
実行時に資源の割り当てをダイナミックに行う第1の実
施形態の仮想マルチプロセッサ(または、第1の実施形
態の仮想マルチプロセッサの構成のうち本実施形態にと
って必要な部分のみ備える仮想マルチプロセッサ)に適
用した場合を例にとって説明するが、本発明は、その
他、第1の実施形態をOut−of−Orderにした
場合の仮想マルチプロセッサ、シングルイシュー(Is
sue)の仮想マルチプロセッサ、コンパイル時にスタ
ティックに資源を割り当て使用するVLIW(Very
Long Instruction Word)の仮
想マルチプロセッサ、それらにおいてレジスタ・ファイ
ルをハードウェア・スレッド毎に持つようにしたものな
ど、種々の仮想マルチプロセッサに対しても適用可能で
ある。
【0090】さて、マルチスレッドのプログラムにおい
ては、複数のプログラムが終了したことを互いに知るこ
とが必要となる。例えば、並列に走行しているスレッド
AとスレッドBとスレッドCの結果をスレッドDが使う
場合に、スレッドAとスレッドBとスレッドCは同期を
取らなければならない。本実施形態では、このような場
合に、SYNC命令(同期命令)を使うものとする。S
YNC命令には、カウンタを操作する機能と、同期をと
るための機能とが含まれる。
【0091】本実施形態では、仮想スレッド番号(VT
ID)ごとに同期機構を実現するためのカウンタを設け
るものとする。
【0092】今、スレッドAの仮想スレッド番号(VT
ID)を0、スレッドBの仮想スレッド番号(VTI
D)を1、スレッドCの仮想スレッド番号(VTID)
を2とし、同期のためのカウンタとして、スレッドAの
VTID=0に対応するカウンタを使用するものとする
(いずれのスレッドに対応するカウンタを使用するか
は、ユーザが任意に決めて構わない)。このカウンタを
SYNCカウンタ(同期カウンタ)と呼ぶ。SYNCカ
ウンタの初期値としては、スレッドAが、SYNCを行
うスレッドの数3に対応して、3を設定しておく(例え
ば、ユーザが、同期をとるスレッドの数を設定する命令
を記述する)。
【0093】まず、最初の例では、スレッドAが最後に
SYNC命令に到達した場合を示す。
【0094】図6で示すように、最初にSYNC命令に
到達したスレッドCは、SYNCカウンタをデクリメン
トし、その値を2とする。SYNCカウンタの値が0で
ないので、このスレッドは、Sleep状態に遷移す
る。
【0095】次にSYNC命令に到達したスレッドB
は、SYNCカウンタをデクリメントして、その値を1
とする。まだ、SYNCカウンタは0でないので、スレ
ッドCもSleep状態に遷移する。
【0096】最後にSYNC命令に到達したスレッドA
では、SYNCカウンタをデクリメントし、その結果が
0であるので、他のスレッドを起こすためのルーチンを
実行する。このルーチンでは、スレッドBおよびスレッ
ドCのReadyレジスタ(あるいは、Readyテー
ブル)のReadyビットを1に立てることで、Sle
ep状態からReady状態へ遷移させる。
【0097】Ready状態に遷移した後は、例えば、
(条件が整えば)システムスレッドによってハードウェ
ア・スレッドに復帰することができる。
【0098】SYNC命令は、次の2つの情報のフィー
ルドを持つものとする。
【0099】一つの情報は、SYNCカウンタを識別す
る識別子で、これには仮想スレッド番号(VTID)を
使えばよい。なお、複数のスレッドが走行し、複数の同
期ポイントを同時に設定する可能性があることを想定す
る場合には、SYNCカウンタを複数設ける。
【0100】もう一つの情報は、SYNC命令を実行し
た後、SYNCカウンタが0になった場合に実行するル
ーチンの先頭番地である。上記の例では、例えば、スレ
ッドAとスレッドBとスレッドCのうちSleep状態
のものをReady状態にするルーチンの先頭番地であ
る。
【0101】SYNCカウンタは、必ずしもハードウェ
ア上に常に存在する必要はなく、先に説明したレジスタ
・ファイル・キャッシュ5に入れられてもよい。すなわ
ち、SYNCカウンタは、仮想スレッド番号ごとに存在
しているので、仮想スレッド番号とSYNCカウンタを
示すレジスタ番号とをキーとすれば、通常のレジスタと
全く同じ仕組みでアクセスが可能となり、コンテキスト
・セーブ用メモリ11に必要に応じてセーブもしくはリ
ストアされる。
【0102】図7に、スレッドがSYNC命令に到達し
た場合の処理手順の一例を示す。
【0103】SYNC命令に到達したならば、まず、S
YNCカウンタをデクリメントする(ステップS4
1)。
【0104】ここで、デクリメントした後のSYNCカ
ウンタの値が0でなければ(ステップS42)、当該ス
レッドを、Sleep状態に遷移させる(ステップS4
4)。
【0105】一方、デクリメントした後のSYNCカウ
ンタの値が0であれば(ステップS42)、同期をとる
関係にある全スレッドのうちSleep状態にあるもの
をReady状態にするためのルーチンを実行する(ス
テップS43)。Ready状態に遷移した後は、例え
ばシステムスレッドによって復帰される。
【0106】なお、これらスレッド間の同期に関する処
理は、例えば図1の構成の場合には、イシュー部4が行
うようにしてもよいし、イシュー部4以外の制御部を設
けてもよい。
【0107】本発明を用いないビジーウェイトでは、C
PUが無駄に浪費されるのみならず、ビジーウェイトの
箇所がハードウェアスレッドの数に等しいか多ければデ
ッドロックが起こる。また、割り込みを用いる方法で
は、オーバーヘッドが大きい。これに対して、本発明の
マルチスレッド間の同期方法を用いれば、それら問題を
回避して、効果的な同期を行うことができる。
【0108】なお、本実施形態で例示した構成は一例で
あって、それ以外の構成を排除する趣旨のものではな
く、例示した構成の一部を他のもので置き換えたり、例
示した構成の一部を省いたり、例示した構成に別の機能
を付加したり、それらを組み合わせたりすることなどに
よって得られる別の構成も可能である。また、例示した
構成と論理的に等価な別の構成、例示した構成と論理的
に等価な部分を含む別の構成、例示した構成の要部と論
理的に等価な別の構成なども可能である。また、例示し
た構成と同一もしくは類似の目的を達成する別の構成、
例示した構成と同一もしくは類似の効果を奏する別の構
成なども可能である。また、各種構成部分についての各
種バリエーションは、適宜組み合わせて実施することが
可能である。また、本実施形態は、装置としての発明、
装置内部の構成部分についての発明、またはそれらに対
応する方法の発明等、種々の観点、段階、概念またはカ
テゴリに係る発明を包含・内在するものである。従っ
て、この発明の実施の形態に開示した内容からは、例示
した構成に限定されることなく発明を抽出することがで
きるものである。
【0109】本発明は、上述した実施の形態に限定され
るものではなく、その技術的範囲において種々変形して
実施することができる。
【0110】
【発明の効果】本発明によれば、レジスタ・ファイル
を、仮想スレッド識別番号およびレジスタ識別番号をキ
ーとするキャッシュとして構成することで、プロセッサ
上の資源に割り当てる仮想スレッド識別番号を適宜切り
替えることによって、実際にハードウェア上に存在する
スレッドより、仮想的に多くのスレッドが走行している
ようにみせることができる。これによって、プログラマ
にハードウェアで用意されたより多くのスレッドを見せ
ることが可能になり、プログラミングの自由度が増す。
【0111】また、本発明によれば、同期機構を実現す
るためのカウンタを設け、同期にかかわる複数のスレッ
ドが同期命令によってこのカウンタをデクリメントする
ことによって、効率的にスレッド間の同期をとることが
できる。
【図面の簡単な説明】
【図1】本発明の一実施形態に係る仮想マルチスレッド
プロセッサの構成例を示す図
【図2】同実施形態における仮想スレッドの状態および
その状態間の遷移関係について示す図
【図3】同実施形態におけるレーテンシの長い命令が実
行される際の処理手順の一例を示すフローチャート
【図4】同実施形態におけるレーテンシの長いハードウ
ェア資源への要求に対する応答を受けた場合の処理手順
の一例を示すフローチャート
【図5】同実施形態におけるシステムタスクに関する処
理手順の一例を示すフローチャート
【図6】同実施形態におけるスレッド間の同期方法につ
いて説明するための図
【図7】同実施形態におけるスレッドがSYNC命令に
到達した場合の処理手順の一例を示すフローチャート
【符号の説明】
1…インストラクション・キャッシュ 2…フェッチ部 3…インストラクション・キュー 4…イシュー部 5…レジスタ・ファイル・キャッシュ 9…データ・キャッシュ 11…コンテキスト・セーブ用メモリ 13…プログラムカウンタ 15…メモリ・インタフェース 17…I/Oインタフェース 19…SPCレジスタ 21…SVTレジスタ 23…メモリ 27…コプロセッサ 71,72…演算器 73…ロード・ストア・ユニット
フロントページの続き Fターム(参考) 5B005 LL11 MM01 5B098 FF01 GA05 GC01 GD02 GD05 GD14

Claims (16)

    【特許請求の範囲】
  1. 【請求項1】複数のスレッドを同時に実行できる仮想マ
    ルチスレッドプロセッサであって、 前記プロセッサ上で新規に起動されたスレッドに、該ス
    レッドを特定する仮想スレッド識別番号を割り当てるた
    めの手段と、 各スレッドを特定する仮想スレッド識別番号および各レ
    ジスタを特定するレジスタ識別番号をキーとして各スレ
    ッドの各レジスタの内容をキャッシュするためのキャッ
    シュ手段と、 前記プロセッサ上にある各スレッドの命令の発行制御を
    行う発行制御手段とを備え、 前記発行制御手段は、発行対象となる命令について該当
    する仮想スレッド識別番号およびレジスタ識別番号をキ
    ーとして前記キャッシュ手段をアクセスし、ヒットし且
    つ先行する命令の依存性が解決している場合に、少なく
    ともレジスタに関しては該命令の発行は可能であると判
    断することを特徴とする仮想マルチスレッドプロセッ
    サ。
  2. 【請求項2】前記発行制御手段は、発行可能な命令が複
    数あり且つ空いている演算ユニット数の制限のためにそ
    れらのすべてを発行することができない場合には、所定
    の基準で選択された一部の命令のみ発行することを特徴
    とする請求項1に記載の仮想マルチスレッドプロセッ
    サ。
  3. 【請求項3】前記発行制御手段により前記発行対象とな
    る命令について前記仮想スレッド識別番号および前記レ
    ジスタ識別番号をキーとして前記キャッシュ手段がアク
    セスされ、キャッシュ・ミスが発生した場合に、該キャ
    ッシュ手段と所定のメモリとの間で該当するデータの転
    送を行うことを特徴とする請求項1に記載の仮想マルチ
    スレッドプロセッサ。
  4. 【請求項4】前記プロセッサ上で実行中のスレッドがレ
    ーテンシの長いハードウェア資源に対して要求を出した
    場合に明示的に該スレッドを待避させる第1の処理と、
    待避中の前記スレッドが出した前記要求に対する前記所
    定のハードウェア資源からの応答があった後に該応答に
    対応する要求を出したスレッドを復帰すべきと判断され
    る場合に該スレッドを復帰させる第2の処理とを行うた
    めの処理手段を更に備えたことを特徴とする請求項1に
    記載の仮想マルチスレッドプロセッサ。
  5. 【請求項5】前記処理手段は、前記第2の処理におい
    て、少なくとも一つのスレッドを起動するのに必要な資
    源の空きがあり、かつ、新規に起動すべき他のスレッド
    がない場合に、前記応答があったスレッドのいずれかを
    復帰すべきであると判断することを特徴とする請求項4
    に記載の仮想マルチスレッドプロセッサ。
  6. 【請求項6】前記仮想スレッド識別番号に対応して該仮
    想スレッド識別番号のスレッドが前記応答を返されて復
    帰可能な状態にあるかそれ以外の状態にあるかを少なく
    とも示す情報を保持する所定のレジスタを更に備え、 前記処理手段は、前記第2の処理において、前記所定の
    レジスタを参照することによって、復帰可能なスレッド
    を特定することを特徴とする請求項2に記載の仮想マル
    チスレッドプロセッサ。
  7. 【請求項7】前記処理手段における前記第2の処理の少
    なくとも一部を、特別なスレッドによって実行すること
    を特徴とする請求項4に記載の仮想マルチスレッドプロ
    セッサ。
  8. 【請求項8】前記スレッドからの前記所定のハードウェ
    ア資源への要求に、該スレッドの仮想スレッド識別番号
    を伴わせるとともに、該要求に対する該所定のハードウ
    ェア資源からの応答に、該要求を出した該スレッドの仮
    想スレッド識別番号を伴わせることによって、該所定の
    ハードウェア資源からの応答と、該応答のもととなる要
    求を出したスレッドとを対応付けることを特徴とする請
    求項4に記載の仮想マルチスレッドプロセッサ。
  9. 【請求項9】前記所定のメモリは、前記プロセッサが命
    令によりアクセスするメモリとは別に専用のメモリとし
    て構成されることを特徴とする請求項1に記載のマルチ
    スレッドプロセッサ。
  10. 【請求項10】複数のスレッドを同時に実行できる仮想
    マルチスレッドプロセッサにおけるスレッド実行方法で
    あって、 前記プロセッサ上で新規に起動されたスレッドに、該ス
    レッドを特定する仮想スレッド識別番号を割り当て、 各スレッドを特定する仮想スレッド識別番号および各レ
    ジスタを特定するレジスタ識別番号をキーとして各スレ
    ッドの各レジスタの内容をキャッシュ手段にキャッシュ
    し、 前記プロセッサ上にある各スレッドの命令の発行制御を
    行う際に、発行対象となる命令について該当する仮想ス
    レッド識別番号およびレジスタ識別番号をキーとして前
    記キャッシュ手段をアクセスし、ヒットし且つ先行する
    命令の依存性が解決している場合に、少なくともレジス
    タに関しては該命令の発行は可能であると判断すること
    を特徴とするスレッド実行方法。
  11. 【請求項11】複数のスレッドを同時に実行できる仮想
    マルチスレッドプロセッサであって、 前記プロセッサ上で新規に起動されたスレッドに、該ス
    レッドを特定する仮想スレッド識別番号を割り当てるた
    めの手段と、 少なくとも一つの同期用カウンタと、 前記同期用カウンタの値を、同期をとるべきスレッドの
    数に設定するための手段とを備え、 同期をとるべき各々のスレッドにおいて同期をとるため
    の同期命令に達した際には、前記同期用カウンタをデク
    リメントし、デクリメントされた後の前記同期用カウン
    タの値が0にならなければ、当該同期命令を発行したス
    レッドを復帰可能でない状態として待避させ、デクリメ
    ントされた後の前記同期用カウンタの値が0になれば、
    当該同期命令を発行したスレッドは、先に同期命令に達
    し復帰可能でない状態として待避されたスレッドの状態
    を、復帰可能な状態に変更することを特徴とする仮想マ
    ルチスレッドプロセッサ。
  12. 【請求項12】復帰可能な状態として待避されたスレッ
    ドを、所定の復帰条件が成立した場合に復帰させる処理
    を行うための手段を更に備えたことを特徴とする請求項
    11に記載の仮想マルチスレッドプロセッサ。
  13. 【請求項13】前記同期命令は前記同期用カウンタを識
    別する情報のフィールドを持つものであることを特徴と
    する請求項11に記載のマルチスレッドプロセッサ。
  14. 【請求項14】前記同期用カウンタを識別する情報とし
    て前記スレッドを識別する仮想スレッド識別番号を用い
    ることを特徴とする請求項13に記載のマルチスレッド
    プロセッサ。
  15. 【請求項15】各スレッドを特定する仮想スレッド識別
    番号および各レジスタを特定するレジスタ識別番号をキ
    ーとして各スレッドの各レジスタの内容をキャッシュす
    るためのキャッシュ手段を更に備え、 前記同期用カウンタも前記キャッシュ手段を通してアク
    セスできるようにしたことを特徴とする請求項11に記
    載のマルチスレッドプロセッサ。
  16. 【請求項16】複数のスレッドを同時に実行できる仮想
    マルチスレッドプロセッサにおけるスレッド実行方法で
    あって、 前記プロセッサ上で新規に起動されたスレッドに、該ス
    レッドを特定する仮想スレッド識別番号を割り当て、 同期用カウンタの値を、同期をとるべきスレッドの数に
    設定し、 同期をとるべき各々のスレッドにおいて同期をとるため
    の同期命令に達した際には、前記同期用カウンタをデク
    リメントし、デクリメントされた後の前記同期用カウン
    タの値が0にならなければ、当該同期命令を発行したス
    レッドを復帰可能でない状態として待避させ、デクリメ
    ントされた後の前記同期用カウンタの値が0になれば、
    当該同期命令を発行したスレッドは、先に同期命令に達
    し復帰可能でない状態として待避されたスレッドの状態
    を、復帰可能な状態に変更することを特徴とすることを
    特徴とするスレッド実行方法。
JP2000356238A 2000-11-22 2000-11-22 仮想マルチスレッドプロセッサ及びスレッド実行方法 Pending JP2002163121A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2000356238A JP2002163121A (ja) 2000-11-22 2000-11-22 仮想マルチスレッドプロセッサ及びスレッド実行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000356238A JP2002163121A (ja) 2000-11-22 2000-11-22 仮想マルチスレッドプロセッサ及びスレッド実行方法

Publications (1)

Publication Number Publication Date
JP2002163121A true JP2002163121A (ja) 2002-06-07

Family

ID=18828522

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000356238A Pending JP2002163121A (ja) 2000-11-22 2000-11-22 仮想マルチスレッドプロセッサ及びスレッド実行方法

Country Status (1)

Country Link
JP (1) JP2002163121A (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005116837A1 (en) * 2004-05-26 2005-12-08 Intel Corporation Automatic caching generation in network applications
JP2006039815A (ja) * 2004-07-26 2006-02-09 Fujitsu Ltd マルチスレッドプロセッサおよびレジスタ制御方法
JP2006040141A (ja) * 2004-07-29 2006-02-09 Fujitsu Ltd マルチスレッドプロセッサ
EP1662389A2 (en) 2004-11-29 2006-05-31 Fujitsu Limited Multithread controller and control method
US7165254B2 (en) 2004-07-29 2007-01-16 Fujitsu Limited Thread switch upon spin loop detection by threshold count of spin lock reading load instruction
JP2009518754A (ja) * 2005-12-22 2009-05-07 インテル コーポレイション マルチスレッド・プロセッサにおける性能の優先順位付け
JP2012048515A (ja) * 2010-08-27 2012-03-08 Internatl Business Mach Corp <Ibm> マルチノードにわたるデータの送受信をバリア同期無しで行う並列計算処理
JP5379122B2 (ja) * 2008-06-19 2013-12-25 パナソニック株式会社 マルチプロセッサ

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005116837A1 (en) * 2004-05-26 2005-12-08 Intel Corporation Automatic caching generation in network applications
CN100440170C (zh) * 2004-05-26 2008-12-03 英特尔公司 网络应用内的自动高速缓存生成
US7606974B2 (en) 2004-05-26 2009-10-20 Intel Corporation Automatic caching generation in network applications
JP2006039815A (ja) * 2004-07-26 2006-02-09 Fujitsu Ltd マルチスレッドプロセッサおよびレジスタ制御方法
US8447959B2 (en) 2004-07-26 2013-05-21 Fujitsu Limited Multithread processor and method of controlling multithread processor
US7805594B2 (en) 2004-07-26 2010-09-28 Fujitsu Limited Multithread processor and register control method
JP4520788B2 (ja) * 2004-07-29 2010-08-11 富士通株式会社 マルチスレッドプロセッサ
JP2006040141A (ja) * 2004-07-29 2006-02-09 Fujitsu Ltd マルチスレッドプロセッサ
US7165254B2 (en) 2004-07-29 2007-01-16 Fujitsu Limited Thread switch upon spin loop detection by threshold count of spin lock reading load instruction
US7310705B2 (en) 2004-07-29 2007-12-18 Fujitsu Limited Multithread processor and thread switching control method
EP1662389A2 (en) 2004-11-29 2006-05-31 Fujitsu Limited Multithread controller and control method
US7437519B2 (en) 2004-11-29 2008-10-14 Fujitsu Limited Multithread controller and control method
JP2009518754A (ja) * 2005-12-22 2009-05-07 インテル コーポレイション マルチスレッド・プロセッサにおける性能の優先順位付け
JP5379122B2 (ja) * 2008-06-19 2013-12-25 パナソニック株式会社 マルチプロセッサ
JP2012048515A (ja) * 2010-08-27 2012-03-08 Internatl Business Mach Corp <Ibm> マルチノードにわたるデータの送受信をバリア同期無しで行う並列計算処理

Similar Documents

Publication Publication Date Title
US10261835B2 (en) Hardware thread scheduling
US7290261B2 (en) Method and logical apparatus for rename register reallocation in a simultaneous multi-threaded (SMT) processor
US9069605B2 (en) Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention
US8756605B2 (en) Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline
JP5054665B2 (ja) スリープ‐起動機構を用いた比較および交換動作
JP3569014B2 (ja) マルチコンテキストをサポートするプロセッサおよび処理方法
US6687809B2 (en) Maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses
JP4818918B2 (ja) マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令
US10761846B2 (en) Method for managing software threads dependent on condition variables
US7676808B2 (en) System and method for CPI load balancing in SMT processors
Kim et al. Warped-preexecution: A GPU pre-execution approach for improving latency hiding
US20140047219A1 (en) Managing A Register Cache Based on an Architected Computer Instruction Set having Operand Last-User Information
US20060136919A1 (en) System and method for controlling thread suspension in a multithreaded processor
US20100125717A1 (en) Synchronization Controller For Multiple Multi-Threaded Processors
US20050188177A1 (en) Method and apparatus for real-time multithreading
KR20100111700A (ko) 로킹된 오퍼레이션을 수행하기 위한 방법 및 시스템
US20190243654A1 (en) Cooperating multithreaded processor and mode-selectable processor
JP2004326748A (ja) 例外条件を解消するために同時マルチスレッド・プロセッサでディスパッチ・フラッシュを使用する方法
Loikkanen et al. A fine-grain multithreading superscalar architecture
Govindarajan et al. Design and performance evaluation of a multithreaded architecture
JP2000047887A (ja) 投機的マルチスレッド処理方法および投機的マルチスレッド処理装置
JP2002163121A (ja) 仮想マルチスレッドプロセッサ及びスレッド実行方法
Duţu et al. Independent forward progress of work-groups
JP4608100B2 (ja) 多重処理システムにおける改良結果処理方法
JP2002530736A5 (ja)