JP3702813B2 - マルチスレッド実行方法及び並列プロセッサシステム - Google Patents
マルチスレッド実行方法及び並列プロセッサシステム Download PDFInfo
- Publication number
- JP3702813B2 JP3702813B2 JP2001212246A JP2001212246A JP3702813B2 JP 3702813 B2 JP3702813 B2 JP 3702813B2 JP 2001212246 A JP2001212246 A JP 2001212246A JP 2001212246 A JP2001212246 A JP 2001212246A JP 3702813 B2 JP3702813 B2 JP 3702813B2
- Authority
- JP
- Japan
- Prior art keywords
- thread
- fork
- processor
- instruction
- child
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 78
- 238000012545 processing Methods 0.000 claims description 72
- 230000000977 initiatory effect Effects 0.000 claims 1
- 230000003068 static effect Effects 0.000 claims 1
- 238000007726 management method Methods 0.000 description 59
- 238000012546 transfer Methods 0.000 description 22
- 238000010586 diagram Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 15
- 230000004044 response Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 4
- 238000005206 flow analysis Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction 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)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Description
【発明の属する技術分野】
本発明は並列プロセッサシステムにおけるプログラム並列実行方法に関し、より具体的には単一のプログラムを複数のスレッドに分割して複数のプロセッサにより並列に実行するマルチスレッド実行方法及び並列プロセッサシステムに関する。
【0002】
【従来の技術】
単一のプログラムを並列プロセッサシステムで並列に処理する手法として、プログラムをスレッドと呼ぶ命令流に分割して複数のプロセッサで並列に実行するマルチスレッド実行方法があり、この方法を記載した文献として、特開平10−27108号公報(以下、文献1と称す)、「On Chip Multiprocessor指向 制御並列アーキテクチャMUSCATの提案」(並列処理シンポジュウムJSPP97論文集、情報処理学会、pp.229−236、May 1997)(以下、文献2と称す)、特開平10−78880号公報(以下、文献3と称す)等がある。以下、これらの従来文献に記載されたマルチスレッド実行方法について説明する。
【0003】
一般にマルチスレッド実行方法において、他のプロセッサ上に新たなスレッドを生成することを、スレッドをフォーク(fork)すると言い、フォーク動作を行った側のスレッドを親スレッド、生成された新しいスレッドを子スレッド、スレッドをフォークする箇所をフォーク点、子スレッドの先頭箇所をフォーク先アドレスまたは子スレッドの開始点と呼ぶ。文献1〜3では、スレッドのフォークを指示するためにフォーク点にフォーク命令が挿入される。フォーク命令にはフォーク先アドレスが指定され、フォーク命令の実行によりそのフォーク先アドレスから始まる子スレッドが他プロセッサ上に生成され、子スレッドの実行が開始される。また、スレッドの処理を終了させるターム(term)命令と呼ばれる命令が用意されており、各プロセッサはターム命令を実行することによりスレッドの処理を終了する。
【0004】
図22に従来のマルチスレッド実行方法の処理の概要を示す。同図(a)は3つのスレッドA、B、Cに分割された単一のプログラムを示す。このプログラムを単一のプロセッサで処理する場合、同図(b)に示すように1つのプロセッサPEがスレッドA、B、Cを順番に処理していく。これに対して文献1〜3のマルチスレッド実行方法では、同図(c)に示すように、1つのプロセッサPE1にスレッドAを実行させ、プロセッサPE1でスレッドAを実行している最中に、スレッドAに埋め込まれたフォーク命令によってスレッドBを他のプロセッサPE2に生成し、プロセッサPE2においてスレッドBを実行させる。また、プロセッサPE2はスレッドBに埋め込まれたフォーク命令によってスレッドCをプロセッサPE3に生成する。プロセッサPE1、PE2はそれぞれスレッドB、Cの開始点の直前に埋め込まれたターム命令によってスレッドの処理を終了し、プロセッサPE3はスレッドCの最後の命令を実行すると、その次の命令(一般にはシステムコール命令)を実行する。このように複数のプロセッサでスレッドを同時に並行して実行することにより、逐次処理に比べて性能の向上が図られる。
【0005】
従来の他のマルチスレッド実行方法として、図22(d)に示すように、スレッドAを実行しているプロセッサPE1からフォークを複数回行うことにより、プロセッサPE2にスレッドBを、またプロセッサPE3にスレッドCをそれぞれ生成するマルチスレッド実行方法も存在する。この図22(d)のモデルに対して、図22(c)に示したようにスレッドはその生存中に高々1回に限って有効な子スレッドを生成することができるという制約を課したマルチスレッド実行方法をフォーク1回モデルと呼ぶ。フォーク1回モデルでは、スレッド管理の大幅な簡略化が可能となり、現実的なハードウェア規模でスレッド管理部のハードウェア化が実現できる。本発明はこのようなフォーク1回モデルを前提とする。
【0006】
ここで、フォーク命令時、子スレッドを生成できる空きのプロセッサが存在しない場合、従来は次の2通りの方法の何れかを採用している。
(1)親スレッドを実行しているプロセッサは、子スレッドを生成できる空きのプロセッサが生じるまで、フォーク命令の実行をウエイトする。
(2)親スレッドを実行しているプロセッサは、フォーク点におけるレジスタファイルの内容(フォーク先アドレス及びレジスタ内容)を裏面の物理レジスタに保存して親スレッドの後続処理を続行する。裏面の物理レジスタに保存されたレジスタファイルの内容は、子スレッドを生成できる空きのプロセッサが生じた時点で参照され、子スレッドが生成される。
【0007】
親スレッドが子スレッドを生成し、子スレッドに所定の処理を行わせるには、親スレッドのフォーク点におけるレジスタファイル中のレジスタのうち少なくとも子スレッドで必要なレジスタの値を親スレッドから子スレッドに引き渡す必要がある。このスレッド間のデータ引き渡しコストを削減するために、文献2及び3では、スレッド生成時のレジスタ値継承機構をハードウェア的に備えている。これは、スレッド生成時に親スレッドのレジスタファイルの内容を子スレッドに全てコピーするものである。子スレッド生成後は、親スレッドと子スレッドのレジスタ値の変更は独立となり、レジスタを用いたスレッド間のデータの引き渡しは行われない。スレッド間のデータ引き渡しに関する他の従来技術としては、レジスタの値を命令によりレジスタ単位で個別に転送する機構を備えた並列プロセッサシステムも提案されている。
【0008】
その他、文献2に記載のMUSCATでは、スレッド間の同期命令など、スレッドの並列動作を柔軟に制御するための専用命令が数多く用意されている。
【0009】
【発明が解決しようとする課題】
上述したように従来のマルチスレッド実行方法においては、子スレッドを生成できる空きのプロセッサが存在しない場合、空きのプロセッサが生じるまで親スレッドのフォーク命令の実行をウエイトしているため、場合によっては長時間待たされ、処理効率が極端に低下するという課題がある。
【0010】
この処理停止による処理効率の低下を改善するため、フォーク点におけるレジスタファイルの内容を裏面の物理レジスタに保存して親スレッドの処理の続行を可能にする方法では、各プロセッサ毎に表裏の少なくとも2面のレジスタファイルが必要になる。1つのレジスタファイルに例えば32ビットのレジスタが32個収納されているとすると、1プロセッサ当たり32×32ビットのメモリが必要になり、1チップにn個のプロセッサを集積化したオンチップ並列プロセッサでは無視できないハードウェア量の増加となる。また、単にハードウェア量の増加だけでなく、オペレーティングシステム(OS)によるプロセス切り替え時には裏面の物理レジスタも表の物理レジスタと一緒に退避、復元する必要があるため、プロセス切り替え時の処理量が増大し、プロセス切り替え時のオーバヘッドの増大による性能の低下を招く。
【0011】
また上述した従来のマルチスレッド実行方法においては、スレッドを終了させるためには必ずターム命令を子スレッドの開始点の直前に記述しておく必要がある。ターム命令は1スレッド当たり1個必要になるため、1つのスレッドに含まれる命令数が少ない細粒度スレッドほど、全命令数に占めるターム命令の割合が多くなる。ターム命令も他の命令と同様に命令メモリに格納されてフェッチの対象となるため、命令メモリのハードウェア量の増加、命令フェッチ数の増加による処理性能の低下が問題となる。
【0012】
本発明はこのような従来の問題点を解決したものであり、その目的は、多数のレジスタファイルを持つことによるハードウェア量の増加、OSのプロセス切り替え時におけるオーバヘッドの増大を防止しつつ、親スレッドのフォーク命令時点で子スレッドを生成できる空きのプロセッサが存在しない場合でも処理の中断無しにプログラムの処理を支障なく遂行できる新規なマルチスレッド実行方法及び並列プロセッサシステムを提供することにある。
【0013】
また本発明の別の目的は、スレッドを終了させるためのターム命令を削減することにより命令メモリに必要な容量を削減し、また命令フェッチ数の削減による処理性能の向上を図ることにある。
【0014】
【課題を解決するための手段】
本発明は、単一のプログラムを複数のスレッドに分割し複数のプロセッサで並列に実行する際、親スレッド中のフォーク命令による他プロセッサへの子スレッドのフォーク可能性を判定し、フォーク可能ならば子スレッドをフォークし、フォーク不可能ならば親スレッドを実行しているプロセッサでフォーク命令以降の後続命令を引き続き実行した後に子スレッドの命令群を実行することを基本とする。
【0016】
より具体的には、第1の発明は、フォーク可能性の判定を子スレッドの実行を開始できる他のプロセッサが存在するか否かによってフォーク命令の時点で判定し、可能ならばフォークし、その時点でフォーク不可能であってもフォークを即断念せずに保留し、フォーク命令以降の後続命令の処理と並行して、親スレッドのレジスタファイルが更新される前に子スレッドの実行を開始できる他のプロセッサが生じたか否かによってフォーク可能性の判定を続け、フォーク可能となった時点でフォークし、最終的にフォーク不可能ならば当該子スレッドのフォークは断念して、子スレッドの命令群は親スレッドを実行しているプロセッサで実行する。
【0017】
また、第2の発明は、フォーク可能性の判定を子スレッドの実行を開始できる他のプロセッサが存在するか否かによってフォーク命令の時点で判定し、可能ならばフォークし、その時点でフォーク不可能であってもフォークは即断念せずに保留し、フォーク命令以降の後続命令の処理と並行して、親スレッドのレジスタファイル中のレジスタのうち子スレッドに継承すべきレジスタが更新される前に子スレッドの実行を開始できる他のプロセッサが生じたか否かによってフォーク可能性の判定を続け、フォーク可能となった時点でフォークし、最終的にフォーク不可能ならば当該子スレッドのフォークは断念して、子スレッドの命令群は親スレッドを実行しているプロセッサで実行する。
【0018】
また、第3の発明は、子スレッドのフォークが行われたときに親スレッドを実行するプロセッサに設けたフォークドビットをセットし、フォークドビットがセットされたプロセッサで実行中のスレッドのターム命令は有効化し、フォークドビットがセットされないプロセッサで実行中のスレッドのターム命令は無効化する。
【0019】
また、第4の発明は、親スレッドのフォーク命令の時点でフォーク先アドレスを親スレッドを実行するプロセッサに設けたレジスタに保存し、子スレッドのフォークが行われたときに親スレッドを実行するプロセッサに設けたフォークドビットをセットし、フォークドビットがセットされており且つプログラムカウンタの値がレジスタに保存されたフォーク先アドレスと一致したプロセッサはスレッドの処理を終了する。
【0020】
【作用】
本発明にあっては、親スレッド中のフォーク命令による他プロセッサへの子スレッドのフォーク可能性を判定し、フォーク不可能ならば、親スレッドを実行しているプロセッサで後続命令を引き続き実行するため、処理が中断することがなく、また、親スレッドの後続命令を実行した後に子スレッドの命令群を実行するため、プログラムの処理を支障なく遂行でき、更に、子スレッドの処理を親スレッドと同じプロセッサで行うため、裏面のレジスタファイルにフォーク点のレジスタファイルの内容を退避しておく必要がなくなり、多数のレジスタファイルを持つことによるハードウェア量の増加、OSのプロセス切り替え時におけるオーバヘッドの増大を防止できる。
【0021】
以下、図22(a)に示した3つのスレッドA、B、Cに分割された単一のプログラムを例に本発明の作用を説明する。
【0022】
(1)前提技術
まず、親スレッド中のフォーク命令による子スレッドのフォーク可能性の判定を、子スレッドの実行を開始できる他のプロセッサが存在するか否かによって、フォーク命令の時点でのみ実施し、可能ならばフォークし、その時点でフォーク不可能であれば当該子スレッドのフォークは断念して、子スレッドの命令群は親スレッドを実行しているプロセッサで実行する方法を前提技術として説明する。図1(a)に示すように、1つのプロセッサPE1にスレッドAを実行させ、プロセッサPE1でスレッドAを実行しているときにフォーク命令に実行が差しかかると、子スレッドBの実行を開始することができる他プロセッサが存在するか否かが判定される。図1(a)では、そのようなプロセッサが存在しないため、当該フォーク命令は無効化され、後続命令の処理が引き続き実行され、且つ、スレッドAの処理後に引き続きスレッドBの処理が開始される。同様に、図1(a)ではスレッドBのフォーク命令の実行が不可能であるため、そのフォーク命令は無効化されて後続命令の処理が引き続き実行され、その後にスレッドCの処理が実行されている。この場合のスレッドの実行シーケンスは、A→B→Cであり、図22(b)で説明した単一のプロセッサによる逐次実行順序と同じであり、プログラムの処理は支障なく遂行できる。
【0023】
図1(b)は、スレッドAからスレッドBはフォークできたが、スレッドBからスレッドCはフォークできなかった場合の実行シーケンスを示す。この場合、スレッドAを実行していたプロセッサPE1はスレッドBをフォークしたので、スレッドAだけを実行し、プロセッサPE2はスレッドCをフォークできなかったので、スレッドBに引き続きスレッドCを実行する。
【0024】
この前提技術では、フォーク命令の時点で子スレッドの実行を開始できる他プロセッサが存在していないと最早フォークは行えないが、第1及び第2の発明のようなレジスタファイルの更新を考慮したフォーク可能性の判定が不要になるため、制御の簡素化およびハードウェア量の削減が可能である。
【0025】
(2)第1の発明
図1(c)に示すように、1つのプロセッサPE1にスレッドAを実行させ、プロセッサPE1でスレッドAを実行しているときにフォーク命令に実行が差しかかると、子スレッドBの実行を開始することができる他プロセッサが存在するか否かが判定される。図1(c)では、そのようなプロセッサが存在しないため、当該フォーク命令は保留され、プロセッサPE1は後続命令の処理を続行する。そして、スレッドAのレジスタファイルが更新される前に子スレッドBの実行を開始することができる他プロセッサPE2が生じたため、フォーク可能と判定され、プロセッサPE2にスレッドBが生成されて実行が開始される。プロセッサPE2ではスレッドB中のフォーク命令に実行が差しかかると、子スレッドCの実行を開始することができる他プロセッサが存在するか否かが判定される。図1(c)では、そのようなプロセッサが存在しないため、当該フォーク命令は保留され、プロセッサPE2は後続命令の処理を続行する。また、図1(c)では、スレッドBのレジスタファイルが更新される前に子スレッドCの実行を開始することができる他プロセッサが生じなかったため、フォークを断念し、プロセッサPE2はスレッドBの処理を終了すると、引き続きスレッドCの処理を実行している。
【0026】
また、プロセッサPE1において、スレッドAのレジスタファイルが更新される前に子スレッドBの実行を開始することができる他プロセッサが存在しなかった場合はスレッドAに引き続きスレッドBを実行し、またスレッドBの実行中に、スレッドBのレジスタファイルが更新される前に子スレッドCの実行を開始することできる他プロセッサが存在しなかった場合はスレッドBに引き続きスレッドCも実行する。この際のスレッドの実行シーケンスは図1(a)と同じになる。
【0027】
この第1の発明では、フォーク命令の時点でフォークできなくても、レジスタファイルが更新される前に子スレッドの実行を開始できる他プロセッサが生じるとフォークを行うため、前提技術に比べてフォークされる可能性が高まり、スレッド実行の並列度が向上する。
【0028】
(3)第2の発明
図1(d)に示すように、1つのプロセッサPE1にスレッドAを実行させ、プロセッサPE1でスレッドAを実行しているときにフォーク命令に実行が差しかかると、子スレッドBの実行を開始することができる他プロセッサが存在するか否かが判定される。図1(d)では、そのようなプロセッサが存在しないため、当該フォーク命令は保留され、プロセッサPE1は後続命令の処理を続行する。そして、図1(d)では、スレッドAのレジスタファイルのうち子スレッドBに継承すべきレジスタの値が更新される前に子スレッドBの実行を開始することができる他プロセッサPE2が生じたため、フォーク可能と判定され、プロセッサPE2にスレッドBが生成されて実行が開始される。プロセッサPE2ではスレッドB中のフォーク命令に実行が差しかかると、子スレッドCの実行を開始することができる他プロセッサが存在するか否かが判定される。図1(d)では、そのようなプロセッサが存在しないため、当該フォーク命令は保留され、プロセッサPE2は後続命令の処理を続行する。また、図1(d)では、スレッドBのレジスタファイル中の子スレッドCに継承すべきレジスタの値が更新される前に子スレッドCの実行を開始することができる他プロセッサが生じなかったため、フォークを断念し、プロセッサPE2はスレッドBの処理を終了すると、引き続きスレッドCの処理を実行している。
【0029】
また、プロセッサPE1において、スレッドAのレジスタファイル中の子スレッドBに継承すべきレジスタの値が更新される前に子スレッドBの実行を開始することができる他プロセッサが存在しなかった場合はスレッドAに引き続きスレッドBを実行し、またスレッドBの実行中に、スレッドBのレジスタファイル中の子スレッドCに継承すべきレジスタの値が更新される前に子スレッドCの実行を開始することできる他プロセッサが存在しなかった場合はスレッドBに引き続きスレッドCも実行する。この際のスレッドの実行シーケンスは図1(a)と同じになる。
【0030】
この第2の発明では、親スレッドのレジスタファイルの更新があっても、その更新が子スレッドに継承すべきレジスタでなければフォークを行うため、第1の発明に比べてフォークされる可能性をより高めることができ、従ってスレッド実行の並列度をより向上することができる。
【0031】
(4)第3の発明
この第3の発明では、従来と同様に子スレッドの開始点の直前にターム命令が置かれる。図1(b)、(c)、(d)において、プロセッサPE1では親スレッドAから子スレッドBをフォークしたのでフォークドビットがセットされる。他方、プロセッサPE2では親スレッドBから子スレッドCをフォークしなかったのでフォークドビットはセットされない。このため、プロセッサPE1では、子スレッドBの開始点の直前のターム命令は有効になり、親スレッドAの実行によりスレッドの処理を終了する。他方、プロセッサPE2では、子スレッドCの開始点の直前のターム命令は無効化され、これによりスレッドの処理を停止することなく親スレッドBの実行後に子スレッドCの命令群の実行が開始される。
【0032】
(5)第4の発明
この第4の発明では、従来と異なり子スレッドの開始点の直前にはターム命令は存在しない。図1(b)、(c)、(d)において、プロセッサPE1はスレッドAのフォーク命令の時点でフォーク先アドレス(スレッドBの開始アドレス)をレジスタに保存し、親スレッドAから子スレッドBをフォークしたのでフォークドビットがセットされる。他方、プロセッサPE2はスレッドBのフォーク命令の時点でフォーク先アドレス(スレッドCの開始アドレス)をレジスタに保存するが、親スレッドBから子スレッドCをフォークしなかったのでフォークドビットはセットされない。このため、プロセッサPE1では、プログラムカウンタの値がレジスタに保存されたフォーク先アドレス(スレッドBの開始アドレス)と一致した時点でスレッドの処理を終了する。他方、プロセッサPE2では、プログラムカウンタの値がレジスタに保存されたフォーク先アドレス(スレッドBの開始アドレス)と一致してもスレッドの処理は終了せず、子スレッドCの命令群の処理へと進む。
【0033】
なお、本発明においては、親スレッドから子スレッドへのフォーク時におけるレジスタの値の継承は、フォーク命令時点の親スレッドのレジスタファイルのうち少なくとも子スレッドで必要なレジスタだけを対象とすれば足りる。このための具体的なレジスタ継承機構としては、文献2及び文献3に記載されるようにスレッド生成時に親スレッドのレジスタファイルの内容すべてを子スレッドのレジスタファイルにコピーするものであっても良いし、レジスタ転送量の削減を図るために必要なレジスタの値だけを命令によりレジスタ単位で個別に転送するものであっても良い。
【0034】
【発明の実施の形態】
次に本発明の実施の形態の例について図面を参照して詳細に説明する。
【0035】
【第1の実施の形態】
図2を参照すると、本発明の並列プロセッサシステムの一例は、4スレッド並列実行型プロセッサであり、4個のプロセッサ1−i(i=0〜3)が信号線2−iによってスレッド管理部3に接続されると共に、信号線4−iによって共有のメモリ5に接続されている。また、プロセッサ1−i相互間は通信バス6で接続されている。この例では、4スレッド並列実行型プロセッサを取り上げたが、8スレッドや16スレッドの並列実行型プロセッサ等、一般にn(≧2)スレッド並列実行型プロセッサに対して本発明は適用可能である。全てのプロセッサ1−i、メモリ5及びスレッド管理部3はクロックに同期して動作する。また、好ましくは、全てのプロセッサ1−iはメモリ5及びスレッド管理部3と共に1つの半導体チップ上に集積化される。
【0036】
各プロセッサ1−iは、プログラムカウンタ(以下、PCと称す)及びレジスタファイルを独立に有し、PCに従って、メモリ5中のスレッドの命令を同時にフェッチ、解釈、実行する機能を有している。各プロセッサ1−iにおけるスレッドの実行は、スレッド管理部3から信号線2−iを通じてターゲットPC値を伴うスレッド開始要求7cが送信された時点で開始される。スレッドの実行を終了したプロセッサ1−iは、スレッド管理部3に対して信号線2−iを通じてスレッド終了通知7dを送信する。このスレッド終了通知7dがスレッド管理部3で受理された時点で、当該プロセッサ1−iはフリー状態として管理され、新たなスレッドの実行を当該プロセッサ1−iに開始させることができる。
【0037】
各プロセッサ1−iは、実行中の親スレッドに存在するフォーク命令によって他のプロセッサ1−j(i≠j)に子スレッドをフォークすることができる。その際、プロセッサ1−iは、信号線2−iを通じてスレッド管理部3に対し、子スレッドのフォーク先アドレス(開始PC値)を伴うフォーク要求7aを送信する。スレッド管理部3は、フォーク要求7aを受信すると、子スレッドの実行を開始できる他のプロセッサ1−jが存在するか否かを調べ、存在すれば当該他のプロセッサ1−jに対してフォーク先アドレスを伴うスレッド開始要求7cを送信する一方、フォーク要求元のプロセッサ1−iに対しては、当該他のプロセッサ1−jの番号を指定したフォーク応答7bを返却する。この時点で初めてフォークが行われたことになり、フォーク応答7bを受信したプロセッサ1−iは、フォーク先のプロセッサ1−jのレジスタファイルに対して、親スレッドのレジスタファイルの全内容を通信バス6を通じてコピーするか、当該子スレッドで必要なレジスタの値だけをコピーすることにより、レジスタ継承を行う。
【0038】
他方、子スレッドの実行を開始できる他のプロセッサが存在しなかった場合、スレッド管理部3は、今回のフォーク要求7aを廃棄する。これにより前記フォーク命令は無効化される。
【0039】
図3を参照すると、スレッド管理部3の一例は、スレッド管理シーケンサ11とプロセッサ状態テーブル12とから構成される。プロセッサ状態テーブル12は、プロセッサ1−iと1対1に対応するエントリ13−iを有する。個々のエントリ13−iは、対応するプロセッサ1−iがビジー状態か、フリー状態かを記録するために使用される。スレッド管理シーケンサ11は、このプロセッサ状態テーブル12を用いて各プロセッサ1−iにおけるスレッド生成、スレッド終了を管理する。プロセッサ1−iからフォーク要求7a、スレッド終了通知7dを受信した際のスレッド管理シーケンサ11の処理例を図4及び図5に示す。
【0040】
図4を参照すると、スレッド管理シーケンサ11は、或るクロックのタイミングで何れかのプロセッサ1−iからフォーク要求7aを受信すると、子スレッドの実行を開始できるプロセッサが存在するか否かをプロセッサ状態テーブル12を参照して調べる(ステップS1)。文献1〜3に記載されるように、スレッド管理の簡便化のためにプロセッサ1−iから子スレッドをフォークできるプロセッサを、プロセッサ1−iの一方の隣接プロセッサ(プロセッサ1−0はプロセッサ1−1、プロセッサ1−1はプロセッサ1−2、プロセッサ1−2はプロセッサ1−3、プロセッサ1−3はプロセッサ1−0)に限定したモデル(このようなモデルを以下、リング型フォークモデルと称す)では、プロセッサ状態テーブル12におけるプロセッサ1−iに隣接するプロセッサ1−jに対応するエントリ13−jを参照し、フリー状態であれば子スレッドの実行を開始できるプロセッサが存在すると判定でき、ビジー状態であればそのようなプロセッサは存在しないと判定できる。
【0041】
子スレッドの実行を開始できるプロセッサ1−jが存在した場合、スレッド管理シーケンサ11は、プロセッサ状態テーブル12における当該プロセッサ1−jに対応するエントリ13−jをフリー状態からビジー状態に更新し(ステップS2)、フォーク要求7aに付随するフォーク先アドレスを添えたスレッド開始要求7cをフォーク先プロセッサ1−jに送信すると共に、要求元のプロセッサ1−iに対してフォーク先プロセッサ1−jを指定したフォーク応答7bを返却する(ステップS3)。リング型フォークモデルでは、フォーク先プロセッサは事前に特定されるので、フォーク応答7bでフォーク先プロセッサ1−jを指定する必要はない。
【0042】
他方、子スレッドの実行を開始できるプロセッサ1−jが存在しなかった場合、スレッド管理シーケンサ11は、当該フォーク要求7aを破棄する(ステップS4)。
【0043】
図5を参照すると、スレッド管理シーケンサ11は、何れかのプロセッサ1−iからスレッド終了通知7dを受信すると、プロセッサ管理テーブル12における当該プロセッサ1−iに対応するエントリ13−iをビジー状態からフリー状態に更新する(ステップS11)。
【0044】
図6を参照すると、各々のプロセッサ1−iは、スレッド管理部3から送信されたスレッド開始要求7cに付随する開始アドレス値がセットされ、その後に適宜歩進されるPC21と、PC21に従ってメモリ5からスレッドの命令をフェッチする命令フェッチユニット22と、フェッチされた命令をデコードし、実行する実行ユニット23と、汎用レジスタ24−0〜24−mの集合であるレジスタファイル25と、フォーク先プロセッサに対して通信バス6経由でレジスタファイル25の内容を転送するレジスタ転送ユニット26と、フォーク命令実行時に実行ユニット23からスレッド管理部3に送信されたフォーク先アドレスを伴うフォーク要求7aに対するフォーク応答7bによってセットされるフォークドビット27とを含んで構成され、フォークドビット27の値は実行ユニット23に入力されている。
【0045】
実行ユニット23は、スレッド中のターム命令のデコード時、フォークドビット27がセットされているか否かを判別し、セットされているときは当該ターム命令を有効に実行することによりスレッドの処理を終了する。この際、スレッド管理部3に対してスレッド終了通知7dを送信する。他方、フォークドビット27がセットされていないときは当該ターム命令を無効化し、PC21に従って後続命令の処理を続行する。また、レジスタ転送ユニット26は、フォークドビット27がセットされるタイミングでフォーク先プロセッサへのレジスタ転送を開始する。レジスタ転送ユニット26は、例えば、通信バス6のバス幅によって一度に転送できる数のレジスタ毎に、レジスタファイル25のレジスタの値とレジスタ番号(レジスタアドレス)とをフォーク先プロセッサのレジスタファイルへ送信し、受信側のレジスタファイル25では該当するレジスタを書き換える。
【0046】
次に本実施の形態にかかるマルチスレッド実行方法の動作を、スレッドの開始から終了までのプロセッサ1−i及びスレッド管理部3の処理の一例を示す図7のフローチャートを参照して説明する。
【0047】
スレッド管理部3からのスレッド開始要求7cに基づき、プロセッサ1−iで1つのスレッドの実行が開始される際、当該プロセッサ1−iのフォークドビット27がリセットされ(ステップS21)、スレッドの命令のフェッチ、デコード、実行が以後継続して実行される(ステップS22)。図7では、スレッド中の命令のうち、ターム命令とフォーク命令について特に注目して処理の概要を例示してある。
【0048】
実行ユニット23でデコードされた命令がフォーク命令の場合(ステップS24でYES)、実行ユニット23はフォーク先アドレスを指定したフォーク要求7aをスレッド管理部3に送信し、スレッド管理部3は前述したようにして子スレッドの実行を開始できるフリー状態の他プロセッサ1−jが存在するか否かを調べる(ステップS25)。フリー状態の他プロセッサ1−jが存在した場合、スレッド管理部3は前述したようにプロセッサ1−iのフォークドビット27をセットすると同時に他プロセッサ1−jに対してスレッド開始要求7cを送出することで子スレッドをフォークする(ステップS26)。この際、プロセッサ1−iのレジスタ転送ユニット26は、レジスタファイル25の内容を通信バス6経由でプロセッサ1−jへ送信し、プロセッサ1−jのレジスタファイル25に書き込む。他方、子スレッドの実行を開始できる他プロセッサが存在しなかった場合、スレッド管理部3はプロセッサ1−iから送信されたフォーク要求7aを廃棄することでフォーク命令を無効化する。プロセッサ1−iではフォーク命令の実行後、PC21に従って次の命令の実行を継続する(ステップS22)。
【0049】
実行ユニット23でデコードされた命令がターム命令の場合(ステップS23でYES)、実行ユニット23はフォークドビット27がセットされていれば(ステップS27でYES)、当該ターム命令を実行することによりスレッドの処理を終了する(ステップS28)。しかし、フォークドビット27がセットされていなければ、当該ターム命令を無効化し、PC21に従って次の命令の実行を継続する(ステップS22)。
【0050】
リング型フォークモデルに適用した本実施の形態にかかるマルチスレッド実行方法の実行シーケンスの一例を図8に示す。図8では、プロセッサ#0からその隣接プロセッサ#1に、プロセッサ#1からその隣接プロセッサ#2に、プロセッサ#2からその隣接プロセッサ#3にそれぞれ子スレッドをフォークしている。また、プロセッサ#3のフォーク点でプロセッサ#0がフリー状態となっているため、プロセッサ#3からプロセッサ#0への子スレッドのフォークも成功している。しかし、このプロセッサ#0に新たに生成されたスレッドのフォーク点では、隣接プロセッサ#1がビジー状態であるためフォークは不可能であり、フォークはスキップ(無効化)されている。このため、プロセッサ#0は当該スレッドのターム命令をスキップ(無効化)し、本来は隣接プロセッサ#1で行うべき子スレッドを自身で実行している。
【0051】
次に、本実施の形態にかかるマルチスレッド実行方法で実行される並列化プログラムの生成方法について説明する。
【0052】
図9を参照すると、コンパイラ41は、逐次処理プログラム42を入力し、制御及びデータフロー解析部44によって逐次処理プログラム42の制御フロー及びデータフローを解析して、基本ブロック或いは複数の基本ブロックを並列化の単位、すなわちスレッドに分割し、次いで並列化コード挿入部45によって並列化のためのコードを挿入して、複数のスレッドに分割された並列化プログラム43を生成して出力する。本発明では、並列化プログラム43中の各スレッドはその生存中に高々1回に限って有効な子スレッドを生成するというフォーク1回制限を並列化プログラム43において静的に保証している。
【0053】
並列化コードとしては、フォーク命令、ターム命令などがある。本実施の形態では並列化プログラムの生成時に、フォーク点にフォーク命令が挿入され、且つ子スレッドの開始点の直前にターム命令が挿入される。また、前述したように本実施の形態では、フォーク不可能ならばフォーク命令が無効化され、フォーク命令が無効化されたときには対応するターム命令も無効化されるため、コンパイラ41は、フォーク命令、ターム命令がたとえ無効化されても逐次処理プログラム42と等価な処理が行える並列化プログラム43を生成する。一般に、並列化プログラム43中のフォーク命令及びターム命令を全て取り除いた状態の制御フローが逐次処理プログラム42の制御フローと等価であれば、逐次処理プログラム42の動作を保証できる並列化プログラム43となる。
【0054】
図10(a)に逐次処理プログラム42の一例を示す。この例の逐次処理プログラム42は、米国MIPS Technology INC.社のRISCプロセッサの命令セットを用いて記述されており、レジスタr14に5を加算し(addu)、レジスタr16の指し示すアドレスにレジスタr14の内容をストアし(sw)、レジスタr16の指し示すアドレス+4の内容をレジスタr1にロードし(lw)、ループを実行するよう記述されている。このループでは、_funcを開始アドレスとする関数呼び出しを行い(jal)、レジスタr1の値を−1し(sub)、レジスタr1とレジスタr0(常に0)を比較し等しくなければ_loopへ分岐する(bne)、処理を記述してある。
【0055】
図10(b)に図10(a)の逐次処理プログラム42をコンパイラ41がコンパイルして生成した並列化プログラム43の一例を示す。この例では、addu命令の直前に、_th1をフォーク先アドレスとする1つのフォーク命令(fork)が挿入され、このフォーク先アドレス_th1の直前にターム命令(term)が挿入されている。また、この子スレッド中に_th2をフォーク先アドレスとする1つのフォーク命令が挿入され、このフォーク先アドレス_th2の直前にターム命令が挿入されている。
【0056】
図10(b)の並列化プログラム43からフォーク命令及びターム命令を全て除去すると、図10(a)の逐次処理プログラム42と同じ制御フローのプログラムとなり、フォーク命令、ターム命令が無効化されても逐次処理プログラム42で遂行される処理が保証される並列化プログラムとなっているのが分かる。
【0057】
なお、図10(b)の並列化プログラム43には、親スレッドのレジスタファイル中のレジスタのうち、子スレッドに継承すべきレジスタの情報が含まれていない為、子スレッドのフォーク時には親スレッドのレジスタファイルの内容を全て転送することになる。勿論、後述する第3の実施の形態と同様に子スレッドに継承すべきレジスタをコンパイル時に解析して並列化プログラム43に継承レジスタの情報を記述しておき、子スレッドのフォーク時に親スレッドのレジスタファイルの内容のうち子スレッドで必要なレジスタだけを転送するように構成することも可能である。
【0058】
【第2の実施の形態】
本実施の形態は、並列化プログラム中のターム命令を不要にした点で第1の実施の形態と相違する。以下、第1の実施の形態との相違点を中心に本実施の形態を説明する。
【0059】
図11を参照すると、本実施の形態における並列プロセッサシステムの各々のプロセッサ1−iは、図6に示した構成に加えて、実行ユニット23からスレッド管理部3に送信されるスレッド要求7aに付随するフォーク先アドレスを保存するレジスタ28と、PC21の値がレジスタ28に保存されたフォーク先アドレスと一致するか否かを判定する一致回路29と、フォークドビット27及び一致回路29の出力の論理積出力を実行ユニット23に出力するアンドゲート30とを含んで構成されている。
【0060】
実行ユニット23は、フォークドビット27がセットされている状態においてPC21の値がレジスタ28に保存されたフォーク先アドレスと一致することによりアンドゲート30の出力が論理“1”になると、スレッドの処理を終了し、スレッド管理部3に対してスレッド終了通知7dを送信する。PC21の値がレジスタ28に保存されたフォーク先アドレスと一致しても、フォークドビット27がセットされていなければ、アンドゲート30の出力は論理“1”にならないため、実行ユニット23はPC21に従って命令の実行を継続する。
【0061】
本実施の形態におけるスレッドの開始から終了までのプロセッサ1−i及びスレッド管理部3の処理の一例を図12に示す。図7との相違点はステップS31、S32である。
【0062】
実行ユニット23でデコードされた命令がフォーク命令の場合(ステップS24でYES)、実行ユニット23はフォーク命令で指定されたフォーク先アドレスをレジスタ28に保存し(ステップS32)、このレジスタ28の出力を伴ってフォーク要求7aがスレッド管理部3に送信される。スレッド管理部3は第1の実施の形態と同様に子スレッドの実行を開始できるフリー状態の他プロセッサ1−jが存在すれば(ステップS25でYES)、プロセッサ1−iのフォークドビット27をセットすると同時に他プロセッサ1−jに対してスレッド開始要求7cを送出することで子スレッドをフォークする(ステップS26)。他方、子スレッドの実行を開始できる他プロセッサが存在しなかった場合、スレッド管理部3はプロセッサ1−iから送信されたフォーク要求7aを廃棄することでフォーク命令を無効化する。
【0063】
プロセッサ1−iで命令の実行が進み、PC21の値がレジスタ28に保存されたフォーク先アドレスに一致すると(ステップS31でYES)、フォークドビット27がセットされていれば(ステップS27でYES)、アンドゲート30の出力が論理“1”となり、実行ユニット23に割り込みがかかり、当該プロセッサ1−iはスレッドの処理を終了する(ステップS28)。しかし、フォークドビット27がセットされていなければ、PC21に従って命令の実行、つまり子スレッド命令群を継続して実行することになる(ステップS22)。
【0064】
上述したように本実施の形態にかかるマルチスレッド実行方法では、並列化プログラム中のターム命令が不要になるため、図9のコンパイラ41における並列化コード挿入部45は、子スレッドの開始点の直前にターム命令は挿入しない。図13に、図10(a)の逐次処理プログラム42を本実施の形態にかかるマルチスレッド実行方法向けに生成した並列化プログラム43の一例を示す。図10(b)の並列化プログラムの子スレッドの開始点(−th1、−th2)の直前に挿入されていたターム命令は、図13の並列化プログラムでは省略されている。
【0065】
【第3の実施の形態】
第1及び第2の実施の形態では、親スレッドのフォーク点でフォーク可能でなければフォークを即断念したが、本実施の形態では、親スレッドのレジスタファイルが更新される前に子スレッドの実行を開始できる他プロセッサが生じるとフォークを行う。以下、第2の実施の形態との相違点を中心に本実施の形態を説明する。
【0066】
図14を参照すると、本実施の形態における並列プロセッサシステムの各々のプロセッサ1−iは、図11に示した構成に加えて、フォーク有効ビット31を含んで構成されている。フォーク有効ビット31は、実行ユニット23がフォーク命令を実行したときに出力するフォーク信号37でセットされ、スレッド管理部3から受信されるフォーク応答7b及び実行ユニット23が親スレッドのレジスタファイル25中の何れかのレジスタを更新したときに出力するレジスタ更新信号33によってリセットされる。フォーク有効ビット31の出力がスレッド管理部3に対するフォーク要求7aとなり、フォーク有効ビット31がセットされている間、フォーク要求7aが送出し続けられる。
【0067】
前述の図4を参照すると、スレッド管理部3のスレッド管理シーケンサ11は、或るクロックのタイミングでプロセッサ1−iからフォーク要求7aを受信した際、子スレッドの実行を開始できるプロセッサが存在しないとき(ステップS1でNO)、当該フォーク要求7aは破棄したが、前述したように、プロセッサ1−iはフォーク有効ビット31がセットされている間、フォーク要求7aを送出し続けているので、次回のクロックのタイミングでスレッド管理部3がプロセッサ1−iからフォーク要求7aを再び受信することになり、図4の処理が繰り返される。即ち、フォーク点でフォーク不可能な場合、フォーク命令は保留にされ、フォーク可能となった時点で実行されることになる。
【0068】
次に本実施の形態にかかるマルチスレッド実行方法の動作を、スレッドの開始から終了までのプロセッサ1−i及びスレッド管理部3の処理の概要を示す図15のフローチャートを参照して説明する。
【0069】
スレッド管理部3からのスレッド開始要求7cに基づき、プロセッサ1−iで1つのスレッドの実行が開始される際、当該プロセッサ1−iのフォーク有効ビット31及びフォークドビット27がリセットされ(ステップS41)、スレッドの命令のフェッチ、デコード、実行が以後継続して実行される(ステップS42)。図15では、スレッドの終了に関する処理とフォーク命令の処理について特にその概要を例示してある。
【0070】
実行ユニット23でデコードされた命令がフォーク命令の場合(ステップS44でYES)、実行ユニット23はフォーク先アドレスをレジスタ28に保存すると共にフォーク信号37を出力してフォーク有効ビット31をセットする(ステップS45)。また、実行ユニット23はレジスタファイル25中の何れかのレジスタを更新すると(ステップS46でYES)、レジスタ更新信号33を出力してフォーク有効ビット31をリセットする(ステップS47)。従って、プロセッサ1−iからは、フォーク命令実行時点からレジスタファイル25が最初に更新される迄の期間中、フォーク要求7aがスレッド管理部3に送出し続けられる。
【0071】
スレッド管理部3は、或るクロックのタイミングでプロセッサ1−iからフォーク要求7aを受信すると、図4に示したように、子スレッドの実行を開始できるフリー状態の他プロセッサ1−jが存在するか否かを調べ(ステップS1)、フリー状態の他プロセッサ1−jが存在した場合にはプロセッサ状態テーブル12を前述したように更新し(ステップS2)、プロセッサ1−iにフォーク応答7bを送信すると同時に他プロセッサ1−jに対してスレッド開始要求7cを送出することで子スレッドをフォークする(ステップS3)。プロセッサ1−iに出されたフォーク応答7bによって、フォークドビット27がセットされ、フォーク有効ビット31はリセットされる。他方、子スレッドの実行を開始できる他プロセッサが存在しなかった場合(ステップS1でNO)、スレッド管理部3は今回のプロセッサ1−iから送信されたフォーク要求7aを破棄して図4の処理を終了するが、前述したようにプロセッサ1−iからはフォーク要求7aが送出し続けられている。図15のステップS51〜S53は以上のような処理を別の観点でフローチャート化したものであり、プロセッサ1−iのフォーク有効ビット31がセットされ且つフリー状態のプロセッサ1−jが存在していれば、子スレッドのフォークを行い、フォーク要求元プロセッサ1−iのフォークドビット27をセットし且つフォーク有効ビット31をリセットすることを示している。なお、プロセッサ1−iでは、レジスタ転送ユニット26によるレジスタファイル25の転送中、実行ユニット23からレジスタファイル25への書き込みは待たされる。
【0072】
なお、第2の実施の形態と同様に、プロセッサ1−iで命令の実行が進み、PC21の値がレジスタ28に保存されたフォーク先アドレスに一致すると(ステップS43でYES)、フォークドビット27がセットされていれば(ステップS48でYES)、アンドゲート30の出力が論理“1”となり、実行ユニット23に割り込みがかかって当該プロセッサ1−iはスレッドの処理を終了する(ステップS49)。
【0073】
リング型フォークモデルに適用した本実施の形態にかかるマルチスレッド実行方法の実行シーケンスの一例を図16に示す。図8とほぼ同じ状況を想定しており、プロセッサ#3からプロセッサ#0にフォークされたスレッドのフォーク点Aでは、隣接プロセッサ#1はビジー状態である。このような状況の場合、第1及び第2の実施の形態ではフォークを即断念したが、本実施の形態ではフォーク点Aでフォーク先アドレスをレジスタ28に保存し、フォークを保留状態とする。フォーク点Aから下に延びる矢印は、プロセッサ#0においてレジスタファイル25が全く更新されていない期間を示す。図16では、この期間内にプロセッサ#1がフリー状態になったため、保留されたフォークが実行され、プロセッサ#1に子スレッドが生成されている。また、プロセッサ#0は子スレッドを生成したため、フォーク先アドレスに到達するとスレッドの処理を終了している。
【0074】
なお、図14に示される各プロセッサ1−iの実行ユニット23が、ターム命令のデコード時、アンドゲート30の出力が論理“1”か否かを判別し、論理“1”ならば当該ターム命令を実行することによりスレッドの処理を終了し、論理“1”でなければ当該ターム命令を無効化し、PC21に従って後続命令の処理を続行するように構成すれば、第1の実施の形態と同様に、子スレッドの開始点の直前にターム命令が挿入された並列化プログラムを支障なく実施する別の実施の形態が得られる。
【0075】
【第4の実施の形態】
第3の実施の形態では、親スレッドのフォーク点でフォーク可能でなければフォークを一旦保留にし、親スレッドのレジスタファイルが更新される前に子スレッドの実行を開始できる他プロセッサが生じなかった場合に当該フォークを断念したが、本実施の形態では、親スレッドのレジスタファイルが更新されても、その更新が子スレッドに継承すべきレジスタでなければフォークを行う。以下、第3の実施の形態との相違点を中心に本実施の形態を説明する。
【0076】
図17を参照すると、本実施の形態における並列プロセッサシステムの各々のプロセッサ1−iは、図14に示した構成に加えて、レジスタファイル25の各レジスタ24−k(k=0〜m)に1対1に対応し、対応するレジスタ24−kが子スレッドへ継承すべきレジスタであるときに限りセットされるクリエイトビット32−kと、各レジスタ24−kに1対1に対応し、対応するレジスタ24−kのクリエイトビット32−kの出力と実行ユニット23がレジスタ24−kを更新したときに出力するレジスタ更新信号33−kとを入力とするアンドゲート34−kと、アンドゲート33−kの出力の論理和信号であるフォーク無効信号35を出力するオアゲート36とを含んで構成されている。そして、図14のレジスタ更新信号33に代えて、フォーク無効信号35がフォーク有効ビット31にリセット信号として出力されている。また、各クリエイトビット32−kの値がレジスタ転送ユニット26に出力されており、レジスタ転送ユニット26はレジスタファイル25のレジスタ24−kのうち、対応するクリエイトビット32−kがセットされているレジスタのみをフォーク先プロセッサのレジスタファイルに転送するように構成されている。
【0077】
本実施の形態におけるスレッドの開始から終了までのプロセッサ1−i及びスレッド管理部3の処理の概要を図18に示す。図15との相違点はステップS61、S62である。
【0078】
実行ユニット23でデコードされた命令がフォーク命令の場合(ステップS44でYES)、実行ユニット23はフォーク先アドレスをレジスタ28に保存すると共にフォーク信号37を出力してフォーク有効ビット31をセットし、且つ全てのクリエイトビット32−kのセットアップを行う(ステップS61)。即ち、レジスタファイル25のレジスタ24−kのうち、子スレッドに継承すべきレジスタに対応するクリエイトビット32−kはセットし、継承する必要のないレジスタに対応するクリエイトビット32−kはリセットされたままにする。また、実行ユニット23はレジスタファイル25中の何れかのレジスタ24−kを更新すると、その更新したレジスタ24−kに対応するレジスタ更新信号33−kを論理“1”とする。これにより、若し更新されたレジスタ24−kが子スレッドへ継承すべきレジスタであった場合、そのレジスタ24−kに対応するクリエイトビット32−kはセットされているため、そのレジスタ24−kに対応するアンドゲート34−kの出力が論理“1”となり、オアゲート36からフォーク無効信号35が出力されてフォーク有効ビット31がリセットされる(ステップS62、S47)。つまり、プロセッサ1−iからは、フォーク命令実行時点からレジスタファイル25中の子スレッドへの継承レジスタの何れかが最初に更新される迄の期間中、フォーク要求7aがスレッド管理部3に送出し続けられる。
【0079】
スレッド管理部3は、第3の実施の形態と同様の処理を行う。これによって、プロセッサ1−iのレジスタファイル24のレジスタ24−kのうち、子スレッドへ継承すべきレジスタが更新される前に子スレッドの実行を開始できる他プロセッサが生じると、プロセッサ1−iにフォーク応答7bを送信すると同時に他プロセッサ1−jに対してスレッド開始要求7cを送出することで子スレッドをフォークする(ステップS51〜53)。フォーク応答7bを受信したプロセッサ1−iのレジスタ転送ユニット26は、レジスタファイル25のレジスタ24−kのうち、対応するクリエイトビット32−kがセットされているレジスタのみをフォーク先プロセッサのレジスタファイルへ転送する。
【0080】
なお、第3の実施の形態と同様に、プロセッサ1−iで命令の実行が進み、PC21の値がレジスタ28に保存されたフォーク先アドレスに一致すると(ステップS43でYES)、フォークドビット27がセットされていれば(ステップS48でYES)、アンドゲート30の出力が論理“1”となり、実行ユニット23に割り込みがかかって当該プロセッサ1−iはスレッドの処理を終了する(ステップS49)。
【0081】
リング型フォークモデルに適用した本実施の形態にかかるマルチスレッド実行方法の実行シーケンス例は図16と同じようになる。但し、フォーク点Aから下に延びる矢印は、本実施の形態ではプロセッサ#0においてレジスタファイル25のうち子スレッドに継承すべきレジスタが全く更新されていない期間となり、その分だけフォーク可能期間が延長される。
【0082】
本実施の形態では、親スレッドのフォーク点で子スレッドへ継承すべきレジスタが判明している必要がある。このため、図9に示したコンパイラ41における制御及びデータフロー解析部44では、フォークする子スレッド毎に、親スレッドから子スレッドへ継承すべきレジスタを調査し、並列化コード挿入部45ではその調査結果に基づいて、子スレッドへ継承すべきレジスタを指定する記述を並列化プログラム43に挿入する。
【0083】
図19に、図10(a)の逐次処理プログラム42を本実施の形態にかかるマルチスレッド実行方法向けに生成した並列化プログラム43の一例を示す。1行目のフォーク命令中の「r1,r16,sp」、5行目のフォーク命令中の「r1,sp」がそれぞれ子スレッドへ継承すべきレジスタの指定記述である。各プログラム1−iの実行ユニット23はフォーク命令のデコード時、このような継承レジスタの指定を解釈し、指定されたレジスタ24−kに対応するクリエイトビット32−kのみをセットする。
【0084】
図20に、図10(a)の逐次処理プログラム42を本実施の形態にかかるマルチスレッド実行方法向けに生成した並列化プログラム43の別の例を示す。図19のようにフォーク命令で継承レジスタを指定する方法では、フォーク命令の命令幅が大きくなるが、本例では、クリエイト(create)命令という特殊命令を定義し、このクリエイト命令で子スレッドへ継承すべきレジスタを指定するため、フォーク命令の命令幅の増大が抑えられる。但し、クリエイト命令という特殊命令が追加されるため命令数は増加する。このため、クリエイト命令が存在しない場合には全レジスタ継承(或いはシステムで事前に設定された所定のレジスタ群の継承)としておき、クリエイト命令が存在すればそれで指定されたレジスタだけを継承するものとして扱う。従って、図20の1行目のフォーク命令にはその直前にクリエイト命令が存在しないので、全レジスタ継承と認識され、6行目のフォーク命令にはその直前にレジスタr1、spを指定するクリエイト命令が存在するので、レジスタr1、spだけが継承対象となる。
【0085】
図21に、図10(a)の逐次処理プログラム42を本実施の形態にかかるマルチスレッド実行方法向けに生成した並列化プログラム43の更に別の例を示す。図20ではフォーク命令の直前にクリエイト命令を挿入したが、本例ではフォーク命令の直後にクリエイト命令を挿入している。フォーク命令の直前にクリエイト命令を挿入すると、逐次動作で実行すべき命令が1命令増えるが、フォーク命令の直後にクリエイト命令を挿入するとフォーク命令をなるべく早く実行することができることによって並列に動作する部分を増やすことができる。
【0086】
本実施の形態におけるレジスタ転送ユニット26は、クリエイトビット32−kを参照することにより、親スレッドのレジスタファイル25のうち子スレッドに継承すべきレジスタだけをフォーク先プロセッサのレジスタファイルに転送するようにしたが、別の実施例として、レジスタファイル25の先頭のレジスタから順に所定の順番でレジスタの転送を行うシーケンスを開始し、クリエイトビット32−kがセットされているレジスタの全ての転送が完了した時点で転送シーケンスを停止するようにしても良い。この方法では、子スレッドに継承する必要のないレジスタも転送される場合があるが、転送シーケンスが簡素化される利点がある。勿論、別の実施例として、クリエイトビット32−kを一切参照せずに常に全レジスタを転送するようにレジスタ転送ユニット26が構成されていても良い。更に、子スレッドに継承すべきレジスタでも、フォーク先プロセッサの当該レジスタの値がフォーク時点で既に親スレッド側と同じ値になっている場合にはあえて転送する必要がない点に着目して、子スレッドに継承すべきレジスタのうち、親スレッド側と異なる値になっているレジスタを検出し、この検出したレジスタだけをレジスタ転送ユニット26からフォーク先プロセッサに転送するようにしても良い。
【0087】
なお、図17に示される各プロセッサ1−iの実行ユニット23が、ターム命令のデコード時、アンドゲート30の出力が論理“1”か否かを判別し、論理“1”ならば当該ターム命令を実行することによりスレッドの処理を終了し、論理“1”でなければ当該ターム命令を無効化し、PC21に従って後続命令の処理を続行するように構成すれば、第1の実施の形態と同様に、子スレッドの開始点の直前にターム命令が挿入された並列化プログラムを支障なく実施する別の実施の形態が得られる。
【0088】
以上、本発明を幾つかの実施の形態を挙げて説明したが、本発明は以上の実施の形態にのみ限定されず、その他各種の付加変更が可能である。例えば、前記各実施の形態では、複数のプロセッサに共通にスレッド管理部3を設ける集中スレッド管理型の並列プロセッサシステムに本発明を適用したが、文献1等に記載されるように各プロセッサ毎にスレッド管理部を設ける分散スレッド管理型の並列プロセッサシステムにも本発明は適用可能である。また、プロセッサ相互間を通信バス6によって接続したが、リング型フォークモデルにあっては隣接するプロセッサ間どうしをリング上に通信線で接続する形態の並列プロセッサシステムに対しても本発明は適用可能である。
【0089】
【発明の効果】
以上説明したように本発明によれば、多数のレジスタファイルを持つことによるハードウェア量の増加、OSのプロセス切り替え時におけるオーバヘッドの増大を防止しつつ、親スレッドのフォーク命令時点で子スレッドを生成できる空きのプロセッサが存在しない場合でも処理の中断無しにプログラムの処理を支障なく遂行することができる効果がある。
【0090】
また第1の発明によれば、フォーク命令の時点でフォークできなくても、レジスタファイルが更新される前に子スレッドの実行を開始できる他プロセッサが生じるとフォークが可能になるため、第1の発明に比べてフォークできる確率が高まり、スレッド実行の並列度を向上することができる。
【0091】
また第2の発明によれば、親スレッドのレジスタファイルの更新があっても、その更新が子スレッドに継承すべきレジスタでなければフォークを行うため、第2の発明に比べてフォークできる確率を高めることができ、スレッド実行の並列度をより一層向上することができる。
【0092】
また第3の発明によれば、従来と同様に子スレッドの開始点の直前にターム命令が置かれたプログラムを支障なく実行することが可能となる。
【0093】
また第4の発明によれば、子スレッドの開始点の直前にターム命令を置く必要がなくなり、ターム命令の削減によってプログラムサイズをコンパクト化でき、命令メモリに必要な容量の削減、命令フェッチ数の削減による処理性能の向上が可能となる。
【図面の簡単な説明】
【図1】本発明の作用の説明図である。
【図2】本発明の並列プロセッサシステムの一例を示すブロック図である。
【図3】本発明の並列プロセッサシステムにおけるスレッド管理部の構成例を示すブロック図である。
【図4】本発明の並列プロセッサシステムにおけるスレッド管理部のスレッド管理シーケンサがプロセッサからフォーク要求を受信した際の処理例を示すフローチャートである。
【図5】本発明の並列プロセッサシステムにおけるスレッド管理部のスレッド管理シーケンサがプロセッサからスレッド終了通知を受信した際の処理例を示すフローチャートである。
【図6】本発明の並列プロセッサシステムにおけるプロセッサの構成例を示すブロック図である。
【図7】本発明の並列プロセッサシステムにおけるスレッドの開始から終了までのプロセッサ及びスレッド管理部の処理の一例を示すフローチャートである。
【図8】リング型フォークモデルに適用した本発明のマルチスレッド実行方法の実行シーケンスの一例を示す図である。
【図9】本発明のマルチスレッド実行方法向けの並列化プログラムを生成するコンパイラの構成例を示すブロック図である。
【図10】逐次処理プログラムとそれから生成された並列化プログラムの一例を示す図である。
【図11】本発明の並列プロセッサシステムにおけるプロセッサの別の構成例を示すブロック図である。
【図12】本発明の並列プロセッサシステムにおけるスレッドの開始から終了までのプロセッサ及びスレッド管理部の処理の他の例を示すフローチャートである。
【図13】逐次処理プログラムから生成された並列化プログラムの他の例を示す図である。
【図14】本発明の並列プロセッサシステムにおけるプロセッサの更に別の構成例を示すブロック図である。
【図15】本発明の並列プロセッサシステムにおけるスレッドの開始から終了までのプロセッサ及びスレッド管理部の処理の更に別の例を示すフローチャートである。
【図16】リング型フォークモデルに適用した本発明のマルチスレッド実行方法の実行シーケンスの別の例を示す図である。
【図17】本発明の並列プロセッサシステムにおけるプロセッサのまた更に別の構成例を示すブロック図である。
【図18】本発明の並列プロセッサシステムにおけるスレッドの開始から終了までのプロセッサ及びスレッド管理部の処理のまた更に別の例を示すフローチャートである。
【図19】逐次処理プログラムから生成された並列化プログラムの更に別の例を示す図である。
【図20】逐次処理プログラムから生成された並列化プログラムのまた更に別の例を示す図である。
【図21】逐次処理プログラムから生成された並列化プログラムの他の例を示す図である。
【図22】従来のマルチスレッド実行方法の処理の概要を示す図である。
【符号の説明】
1−0〜1−3…プロセッサ
2−0〜2−3…信号線
3…スレッド管理部
4−0〜4−3…信号線
5…メモリ
6…通信バス
Claims (20)
- 単一のプログラムを複数のスレッドに分割し複数のプロセッサで並列に実行するマルチスレッド実行方法において、
親スレッド中のフォーク命令による他プロセッサへの子スレッドのフォーク可能性を判定し、フォーク可能ならば前記子スレッドをフォークし、フォーク不可能ならば前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行した後に前記子スレッドの命令群を実行するマルチスレッド実行方法であって、前記子スレッドのフォークが行われたときに前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットし、前記フォークドビットがセットされた前記プロセッサで実行中のスレッドのターム命令は有効化し、前記フォークドビットがセットされない前記プロセッサで実行中のスレッドのターム命令は無効化することを特徴とするマルチスレッド実行方法。 - 単一のプログラムを複数のスレッドに分割し複数のプロセッサで並列に実行するマルチスレッド実行方法において、
親スレッド中のフォーク命令による他プロセッサへの子スレッドのフォーク可能性を判定し、フォーク可能ならば前記子スレッドをフォークし、フォーク不可能ならば前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行した後に前記子スレッドの命令群を実行するマルチスレッド実行方法であって、前記親スレッドのフォーク命令の時点でフォーク先アドレスを前記親スレッドを実行する前記プロセッサに設けたレジスタに保存し、前記子スレッドのフォークが行われたときに前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットし、前記フォークドビットがセットされており且つプログラムカウンタの値が前記レジスタに保存された前記フォーク先アドレスと一致した前記プロセッサはスレッドの処理を終了することを特徴とするマルチスレッド実行方法。 - 前記フォーク可能性の判定を前記フォーク命令の時点でのみ実施する請求項1または2記載のマルチスレッド実行方法。
- 前記フォーク可能性の判定は、前記フォーク命令の時点で前記子スレッドの実行を開始できる他のプロセッサが存在するか否かによって行う請求項3記載のマルチスレッド実行方法。
- 前記フォーク可能性の判定を前記フォーク命令の時点及びその時点でフォーク不可能と判定した場合には前記フォーク命令以降の時点でも実施する請求項1または2記載のマルチスレッド実行方法。
- 単一のプログラムを複数のスレッドに分割し複数のプロセッサで並列に実行するマルチスレッド実行方法において、
親スレッド中のフォーク命令による他プロセッサへの子スレッドのフォーク可能性を判定し、フォーク可能ならば前記子スレッドをフォークし、フォーク不可能ならば前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行した後に前記子スレッドの命令群を実行するマルチスレッド実行方法であって、前記フォーク可能性の判定を前記フォーク命令の時点及びその時点でフォーク不可能と判定した場合には前記フォーク命令以降の時点でも実施し、前記フォーク命令の時点での前記フォーク可能性の判定は、前記子スレッドの実行を開始できる他のプロセッサが存在するか否かによって行い、前記フォーク命令以降の時点での前記フォーク可能性の判定は、前記親スレッドのレジスタファイルが更新される前に前記子スレッドの実行を開始できる他のプロセッサが生じたか否かによって行うことを特徴とするマルチスレッド実行方法。 - 単一のプログラムを複数のスレッドに分割し複数のプロセッサで並列に実行するマルチスレッド実行方法において、
親スレッド中のフォーク命令による他プロセッサへの子スレッドのフォーク可能性を判定し、フォーク可能ならば前記子スレッドをフォークし、フォーク不可能ならば前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行した後に前記子スレッドの命令群を実行するマルチスレッド実行方法であって、前記フォーク可能性の判定を前記フォーク命令の時点及びその時点でフォーク不可能と判定した場合には前記フォーク命令以降の時点でも実施し、前記フォーク命令の時点での前記フォーク可能性の判定は、前記子スレッドの実行を開始できる他のプロセッサが存在するか否かによって行い、前記フォーク命令以降の時点での前記フォーク可能性の判定は、前記親スレッドのレジスタファイル中のレジスタのうち前記子スレッドに継承すべきレジスタが更新される前に前記子スレッドの実行を開始できる他のプロセッサが生じたか否かによって行うことを特徴とするマルチスレッド実行方法。 - 各々プログラムカウンタ及びレジスタファイルを独立に有し前記プログラムカウンタに従ってスレッドの命令を同時にフェッチ、解釈、実行する複数のプロセッサを備え、何れかの前記プロセッサで実行されている親スレッド中のフォーク命令によって指定されたフォーク先アドレスから始まる子スレッドの実行を、前記フォーク命令時点の前記親スレッドのレジスタファイルのうち少なくとも前記子スレッドで必要なレジスタの値を前記子スレッドに継承させて、他の前記プロセッサに開始させる機能を備えた並列プロセッサシステムにおけるマルチスレッド実行方法において、
(a)親スレッド中のフォーク命令の時点で前記フォーク命令による他プロセッサへの子スレッドのフォーク可能性を、前記子スレッドの実行を開始できる他のプロセッサが存在するか否かによって判定するステップ、
(b)フォーク可能ならば前記子スレッドをフォークして前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットし、フォーク不可能ならば前記フォーク命令を無効化し、前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行するステップ、
(c)前記フォークドビットがセットされた前記プロセッサで実行中のスレッドのターム命令は有効化し、前記フォークドビットがセットされない前記プロセッサで実行中のスレッドのターム命令は無効化するステップ、
を含むことを特徴とするマルチスレッド実行方法。 - 各々プログラムカウンタ及びレジスタファイルを独立に有し前記プログラムカウンタに従ってスレッドの命令を同時にフェッチ、解釈、実行する複数のプロセッサを備え、何れかの前記プロセッサで実行されている親スレッド中のフォーク命令によって指定されたフォーク先アドレスから始まる子スレッドの実行を、前記フォーク命令時点の前記親スレッドのレジスタファイルのうち少なくとも前記子スレッドで必要なレジスタの値を前記子スレッドに継承させて、他の前記プロセッサに開始させる機能を備えた並列プロセッサシステムにおけるマルチスレッド実行方法において、
(a)親スレッド中のフォーク命令の時点で、フォーク先アドレスを前記親スレッドを実行する前記プロセッサに設けたレジスタに保存すると共に、前記フォーク命令による他プロセッサへの子スレッドのフォーク可能性を、前記子スレッドの実行を開始できる他のプロセッサが存在するか否かによって判定するステップ、
(b)フォーク可能ならば前記子スレッドをフォークして前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットし、フォーク不可能ならば前記フォーク命令を無効化し、前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行するステップ、
(c)前記フォークドビットがセットされており且つプログラムカウンタの値が前記レジスタに保存された前記フォーク先アドレスと一致した前記プロセッサはスレッドの処理を終了するステップ、
を含むことを特徴とするマルチスレッド実行方法。 - 各々プログラムカウンタ及びレジスタファイルを独立に有し前記プログラムカウンタに従ってスレッドの命令を同時にフェッチ、解釈、実行する複数のプロセッサを備え、何れかの前記プロセッサで実行されている親スレッド中のフォーク命令によって指定されたフォーク先アドレスから始まる子スレッドの実行を、前記フォーク命令時点の前記親スレッドのレジスタファイルのうち少なくとも前記子スレッドで必要なレジスタの値を前記子スレッドに継承させて、他の前記プロセッサに開始させる機能を備えた並列プロセッサシステムにおけるマルチスレッド実行方法において、
(a)親スレッド中のフォーク命令の時点で、フォーク先アドレスを前記親スレッドを実行する前記プロセッサに設けたレジスタに保存すると共に、前記フォーク命令による他プロセッサへの子スレッドのフォーク可能性を、前記子スレッドの実行を開始できる他のプロセッサが存在するか否かによって判定するステップ、
(b)ステップaの判定がフォーク可能ならば前記子スレッドをフォークして前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットし、フォーク不可能ならば前記フォーク命令によるフォークを保留し、前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行するステップ、
(c)ステップbでフォークを保留した場合、前記フォーク命令以降の後続命令の実行と並行して、前記フォーク命令による他プロセッサへの子スレッドのフォーク可能性を、前記親スレッドのレジスタファイルの更新前に前記子スレッドの実行を開始できる他のプロセッサが生じたか否かによって判定し、フォーク可能と判定された時点で、前記レジスタに保存されたフォーク先アドレスに従って子スレッドをフォークして前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットするステップ、
(d)前記フォークドビットがセットされた前記プロセッサで実行中のスレッドのターム命令は有効化し、前記フォークドビットがセットされない前記プロセッサで実行中のスレッドのターム命令は無効化するステップ、
を含むことを特徴とするマルチスレッド実行方法。 - 各々プログラムカウンタ及びレジスタファイルを独立に有し前記プログラムカウンタに従ってスレッドの命令を同時にフェッチ、解釈、実行する複数のプロセッサを備え、何れかの前記プロセッサで実行されている親スレッド中のフォーク命令によって指定されたフォーク先アドレスから始まる子スレッドの実行を、前記フォーク命令時点の前記親スレッドのレジスタファイルのうち少なくとも前記子スレッドで必要なレジスタの値を前記子スレッドに継承させて、他の前記プロセッサに開始させる機能を備えた並列プロセッサシステムにおけるマルチスレッド実行方法において、
(a)親スレッド中のフォーク命令の時点で、フォーク先アドレスを前記親スレッドを実行する前記プロセッサに設けたレジスタに保存すると共に、前記フォーク命令による他プロセッサへの子スレッドのフォーク可能性を、前記子スレッドの実行を開始できる他のプロセッサが存在するか否かによって判定するステップ、
(b)ステップaの判定がフォーク可能ならば前記子スレッドをフォークして前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットし、フォーク不可能ならば前記フォーク命令によるフォークを保留し、前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行するステップ、
(c)ステップaでフォーク不可能と判定された場合、前記フォーク命令以降の後続命令の実行と並行して、前記フォーク命令による他プロセッサへの子スレッドのフォーク可能性を、前記親スレッドのレジスタファイルの更新前に前記子スレッドの実行を開始できる他のプロセッサが生じたか否かによって判定し、フォーク可能となった時点で、前記レジスタに保存されたフォーク先アドレスに従って子スレッドをフォークして前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットするステップ、
(d)前記フォークドビットがセットされており且つプログラムカウンタの値が前記レジスタに保存された前記フォーク先アドレスと一致した前記プロセッサはスレッドの処理を終了するステップ、
を含むことを特徴とするマルチスレッド実行方法。 - 各々プログラムカウンタ及びレジスタファイルを独立に有し前記プログラムカウンタに従ってスレッドの命令を同時にフェッチ、解釈、実行する複数のプロセッサを備え、何れかの前記プロセッサで実行されている親スレッド中のフォーク命令によって指定されたフォーク先アドレスから始まる子スレッドの実行を、前記フォーク命令時点の前記親スレッドのレジスタファイルのうち少なくとも前記子スレッドで必要なレジスタの値を前記子スレッドに継承させて、他の前記プロセッサに開始させる機能を備えた並列プロセッサシステムにおけるマルチスレッド実行方法において、
(a)親スレッド中のフォーク命令の時点で、フォーク先アドレスを前記親スレッドを実行する前記プロセッサに設けたレジスタに保存すると共に、前記フォーク命令による他プロセッサへの子スレッドのフォーク可能性を、前記子スレッドの実行を開始できる他のプロセッサが存在するか否かによって判定するステップ、
(b)ステップaの判定がフォーク可能ならば前記子スレッドをフォークして前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットし、フォーク不可能ならば前記フォーク命令によるフォークを保留し、前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行するステップ、
(c)ステップaでフォーク不可能と判定された場合、前記フォーク命令以降の後続命令の実行と並行して、前記フォーク命令による他プロセッサへの子スレッドのフォーク可能性を、前記親スレッドのレジスタファイル中のレジスタのうち前記子スレッドに継承すべきレジスタが更新される前に前記子スレッドの実行を開始できる他のプロセッサが生じたか否かによって判定し、フォーク可能と判定された時点で、前記レジスタに保存されたフォーク先アドレスに従って子スレッドをフォークして前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットするステップ、
(d)前記フォークドビットがセットされた前記プロセッサで実行中のスレッドのターム命令は有効化し、前記フォークドビットがセットされない前記プロセッサで実行中のスレッドのターム命令は無効化するステップ、
を含むことを特徴とするマルチスレッド実行方法。 - 各々プログラムカウンタ及びレジスタファイルを独立に有し前記プログラムカウンタに従ってスレッドの命令を同時にフェッチ、解釈、実行する複数のプロセッサを備え、何れかの前記プロセッサで実行されている親スレッド中のフォーク命令によって指定されたフォーク先アドレスから始まる子スレッドの実行を、前記フォーク命令時点の前記親スレッドのレジスタファイルのうち少なくとも前記子スレッドで必要なレジスタの値を前記子スレッドに継承させて、他の前記プロセッサに開始させる機能を備えた並列プロセッサシステムにおけるマルチスレッド実行方法において、
(a)親スレッド中のフォーク命令の時点で、フォーク先アドレスを前記親スレッドを実行する前記プロセッサに設けたレジスタに保存すると共に、前記フォーク命令による他プロセッサへの子スレッドのフォーク可能性を、前記子スレッドの実行を開始できる他のプロセッサが存在するか否かによって判定するステップ、
(b)ステップaの判定がフォーク可能ならば前記子スレッドをフォークして前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットし、フォーク不可能ならば前記フォーク命令によるフォークを保留し、前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行するステップ、
(c)ステップaでフォーク不可能と判定された場合、前記フォーク命令以降の後続命令の実行と並行して、前記フォーク命令による他プロセッサへの子スレッドのフォーク可能性を、前記親スレッドのレジスタファイル中のレジスタのうち前記子スレッドに継承すべきレジスタが更新される前に前記子スレッドの実行を開始できる他のプロセッサが生じたか否かによって判定し、フォーク可能と判定された時点で、前記レジスタに保存されたフォーク先アドレスに従って子スレッドをフォークして前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットするステップ、
(d)前記フォークドビットがセットされており且つプログラムカウンタの値が前記レジスタに保存された前記フォーク先アドレスと一致した前記プロセッサはスレッドの処理を終了するステップ、
を含むことを特徴とするマルチスレッド実行方法。 - 単一のプログラムを複数のスレッドに分割し複数のプロセッサで並列に実行する並列プロセッサシステムにおいて、
親スレッド中のフォーク命令による他プロセッサへの子スレッドのフォーク可能性を判定する手段と、フォーク可能ならば前記子スレッドをフォークし、フォーク不可能ならば前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行した後に前記子スレッドの命令群を実行する手段と、前記子スレッドのフォークが行われたときに前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットする手段と、前記フォークドビットがセットされた前記プロセッサで実行中のスレッドのターム命令は有効化し、前記フォークドビットがセットされない前記プロセッサで実行中のスレッドのターム命令は無効化する手段とを備えたことを特徴とする並列プロセッサシステム。 - 単一のプログラムを複数のスレッドに分割し複数のプロセッサで並列に実行する並列プロセッサシステムにおいて、
親スレッド中のフォーク命令による他プロセッサへの子スレッドのフォーク可能性を判定する手段と、フォーク可能ならば前記子スレッドをフォークし、フォーク不可能ならば前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行した後に前記子スレッドの命令群を実行する手段、前記親スレッドのフォーク命令の時点でフォーク先アドレスを前記親スレッドを実行する前記プロセッサに設けたレジスタに保存する手段と、前記子スレッドのフォークが行われたときに前記親スレッドを実行する前記プロセッサに設けたフォークドビットをセットする手段とを備え、前記フォークドビットがセットされており且つプログラムカウンタの値が前記レジスタに保存された前記フォーク先アドレスと一致した前記プロセッサはスレッドの処理を終了する構成を有することを特徴とする並列プロセッサシステム。 - 前記フォーク可能性の判定を前記フォーク命令の時点でのみ実施する構成を有する請求項14または15記載の並列プロセッサシステム。
- 前記フォーク可能性の判定は、前記フォーク命令の時点で前記子スレッドの実行を開始できる他のプロセッサが存在するか否かによって行う請求項16記載の並列プロセッサシステム。
- 前記フォーク可能性の判定を前記フォーク命令の時点及びその時点でフォーク不可能と判定した場合には前記フォーク命令以降の時点でも実施する構成を有する請求項14または15記載の並列プロセッサシステム。
- 単一のプログラムを複数のスレッドに分割し複数のプロセッサで並列に実行する並列プロセッサシステムにおいて、
親スレッド中のフォーク命令による他プロセッサへの子スレッドのフォーク可能性を判定する手段と、フォーク可能ならば前記子スレッドをフォークし、フォーク不可能ならば前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行した後に前記子スレッドの命令群を実行する手段とを備え、前記フォーク可能性の判定を前記フォーク命令の時点及びその時点でフォーク不可能と判定した場合には前記フォーク命令以降の時点でも実施する構成を有し、前記フォーク命令の時点での前記フォーク可能性の判定は、前記子スレッドの実行を開始できる他のプロセッサが存在するか否かによって行い、前記フォーク命令以降の時点での前記フォーク可能性の判定は、前記親スレッドのレジスタファイルが更新される前に前記子スレッドの実行を開始できる他のプロセッサが生じたか否かによって行うものであることを特徴とする並列プロセッサシステム。 - 単一のプログラムを複数のスレッドに分割し複数のプロセッサで並列に実行する並列プロセッサシステムにおいて、
親スレッド中のフォーク命令による他プロセッサへの子スレッドのフォーク可能性を判定する手段と、フォーク可能ならば前記子スレッドをフォークし、フォーク不可能ならば前記親スレッドを実行しているプロセッサで前記フォーク命令以降の後続命令を引き続き実行した後に前記子スレッドの命令群を実行する手段とを備え、前記フォーク可能性の判定を前記フォーク命令の時点及びその時点でフォーク不可能と判定した場合には前記フォーク命令以降の時点でも実施する構成を有し、前記フォーク命令の時点での前記フォーク可能性の判定は、前記子スレッドの実行を開始できる他のプロセッサが存在するか否かによって行い、前記フォーク命令以降の時点での前記フォーク可能性の判定は、前記親スレッドのレジスタファイル中のレジスタのうち前記子スレッドに継承すべきレジスタが更新される前に前記子スレッドの実行を開始できる他のプロセッサが生じたか否かによって行うものであることを特徴とする並列プロセッサシステム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001212246A JP3702813B2 (ja) | 2001-07-12 | 2001-07-12 | マルチスレッド実行方法及び並列プロセッサシステム |
US10/133,409 US7281250B2 (en) | 2001-07-12 | 2002-04-29 | Multi-thread execution method and parallel processor system |
GB0216272A GB2381610B (en) | 2001-07-12 | 2002-07-12 | Multi-thread execution method and parallel processor system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001212246A JP3702813B2 (ja) | 2001-07-12 | 2001-07-12 | マルチスレッド実行方法及び並列プロセッサシステム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003029984A JP2003029984A (ja) | 2003-01-31 |
JP3702813B2 true JP3702813B2 (ja) | 2005-10-05 |
Family
ID=19047438
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001212246A Expired - Fee Related JP3702813B2 (ja) | 2001-07-12 | 2001-07-12 | マルチスレッド実行方法及び並列プロセッサシステム |
Country Status (3)
Country | Link |
---|---|
US (1) | US7281250B2 (ja) |
JP (1) | JP3702813B2 (ja) |
GB (1) | GB2381610B (ja) |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4042604B2 (ja) | 2003-03-31 | 2008-02-06 | 日本電気株式会社 | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム |
US7849297B2 (en) * | 2003-08-28 | 2010-12-07 | Mips Technologies, Inc. | Software emulation of directed exceptions in a multithreading processor |
US7418585B2 (en) * | 2003-08-28 | 2008-08-26 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
US7594089B2 (en) * | 2003-08-28 | 2009-09-22 | Mips Technologies, Inc. | Smart memory based synchronization controller for a multi-threaded multiprocessor SoC |
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 |
US9032404B2 (en) | 2003-08-28 | 2015-05-12 | Mips Technologies, Inc. | Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor |
US7711931B2 (en) * | 2003-08-28 | 2010-05-04 | Mips Technologies, Inc. | Synchronized storage providing multiple synchronization semantics |
US7376954B2 (en) * | 2003-08-28 | 2008-05-20 | Mips Technologies, Inc. | Mechanisms for assuring quality of service for programs executing on a multithreaded processor |
US7870553B2 (en) | 2003-08-28 | 2011-01-11 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
WO2005022381A2 (en) * | 2003-08-28 | 2005-03-10 | Mips Technologies, Inc. | Integrated mechanism for suspension and deallocation of computational threads of execution in a processor |
US7836450B2 (en) * | 2003-08-28 | 2010-11-16 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
US7000048B2 (en) * | 2003-12-18 | 2006-02-14 | Intel Corporation | Apparatus and method for parallel processing of network data on a single processing thread |
JP3901181B2 (ja) | 2004-06-30 | 2007-04-04 | 日本電気株式会社 | プログラム並列化装置及びその方法並びにプログラム |
JP3901182B2 (ja) * | 2004-06-30 | 2007-04-04 | 日本電気株式会社 | プログラム並列化装置及びその方法並びにプログラム |
JP3901180B2 (ja) * | 2004-06-30 | 2007-04-04 | 日本電気株式会社 | プログラム並列化装置及びその方法並びにプログラム |
US7676655B2 (en) * | 2004-06-30 | 2010-03-09 | Sun Microsystems, Inc. | Single bit control of threads in a multithreaded multicore processor |
US7913206B1 (en) * | 2004-09-16 | 2011-03-22 | Cadence Design Systems, Inc. | Method and mechanism for performing partitioning of DRC operations |
US20060212450A1 (en) * | 2005-03-18 | 2006-09-21 | Microsoft Corporation | Temporary master thread |
US7904852B1 (en) | 2005-09-12 | 2011-03-08 | Cadence Design Systems, Inc. | Method and system for implementing parallel processing of electronic design automation tools |
US8028295B2 (en) | 2005-09-30 | 2011-09-27 | Intel Corporation | Apparatus, system, and method for persistent user-level thread |
US7577826B2 (en) * | 2006-01-30 | 2009-08-18 | Sony Computer Entertainment Inc. | Stall prediction thread management |
US8448096B1 (en) | 2006-06-30 | 2013-05-21 | Cadence Design Systems, Inc. | Method and system for parallel processing of IC design layouts |
US20080134189A1 (en) * | 2006-10-05 | 2008-06-05 | Holt John M | Job scheduling amongst multiple computers |
US7797514B2 (en) * | 2006-11-16 | 2010-09-14 | Texas Instruments Incorporated | Scalable multi-threaded sequencing/synchronizing processor architecture |
JP4957729B2 (ja) * | 2007-01-25 | 2012-06-20 | 日本電気株式会社 | プログラム並列化方法、プログラム並列化装置及びプログラム |
US8495342B2 (en) * | 2008-12-16 | 2013-07-23 | International Business Machines Corporation | Configuring plural cores to perform an instruction having a multi-core characteristic |
KR101572879B1 (ko) | 2009-04-29 | 2015-12-01 | 삼성전자주식회사 | 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법 |
US9940670B2 (en) | 2009-12-10 | 2018-04-10 | Royal Bank Of Canada | Synchronized processing of data by networked computing resources |
US10057333B2 (en) | 2009-12-10 | 2018-08-21 | Royal Bank Of Canada | Coordinated processing of data by networked computing resources |
US9959572B2 (en) | 2009-12-10 | 2018-05-01 | Royal Bank Of Canada | Coordinated processing of data by networked computing resources |
SG10201704581VA (en) | 2009-12-10 | 2017-07-28 | Royal Bank Of Canada | Synchronized processing of data by networked computing resources |
US9979589B2 (en) | 2009-12-10 | 2018-05-22 | Royal Bank Of Canada | Coordinated processing of data by networked computing resources |
WO2012029111A1 (ja) | 2010-08-30 | 2012-03-08 | 富士通株式会社 | マルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラム |
CN102012841B (zh) * | 2010-09-21 | 2013-01-09 | 上海大学 | 一种前瞻失效线程重启调度方法 |
WO2012093488A1 (ja) | 2011-01-07 | 2012-07-12 | 富士通株式会社 | スケジューリング方法、およびマルチコアプロセッサシステム |
US8881159B2 (en) * | 2011-03-24 | 2014-11-04 | International Business Machine Corporation | Constant time worker thread allocation via configuration caching |
US9529596B2 (en) | 2011-07-01 | 2016-12-27 | Intel Corporation | Method and apparatus for scheduling instructions in a multi-strand out of order processor with instruction synchronization bits and scoreboard bits |
JP6443125B2 (ja) * | 2015-02-25 | 2018-12-26 | 富士通株式会社 | コンパイラプログラム、コンピュータプログラム及びコンパイラ装置 |
CN105302527B (zh) * | 2015-10-29 | 2018-01-19 | 华北电力大学 | 线程组织方法 |
DE102019113290A1 (de) | 2019-05-20 | 2020-11-26 | Thyssenkrupp Steel Europe Ag | Verfahren zum Herstellen einer elektromagnetischen Komponente, insbesondere eines Blechpakets, beispielsweise eines Statorpakets oder eines Rotorpakets, für eine elektrische Maschine |
JP7188472B2 (ja) * | 2021-02-03 | 2022-12-13 | 日本電気株式会社 | コンピュータ、スケジューリング方法、及び、プログラム |
US20230289211A1 (en) * | 2022-03-10 | 2023-09-14 | Nvidia Corporation | Techniques for Scalable Load Balancing of Thread Groups in a Processor |
Family Cites Families (15)
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 |
DE69131228T2 (de) | 1990-08-23 | 1999-09-23 | Cray Research Inc | Doppelebenenablauffolgeplanung von prozessen |
JP3169779B2 (ja) * | 1994-12-19 | 2001-05-28 | 日本電気株式会社 | マルチスレッドプロセッサ |
US5812811A (en) | 1995-02-03 | 1998-09-22 | International Business Machines Corporation | Executing speculative parallel instructions threads with forking and inter-thread communication |
US5724565A (en) * | 1995-02-03 | 1998-03-03 | International Business Machines Corporation | Method and system for processing first and second sets of instructions by first and second types of processing systems |
US5867704A (en) * | 1995-02-24 | 1999-02-02 | Matsushita Electric Industrial Co., Ltd. | Multiprocessor system shaving processor based idle state detection and method of executing tasks in such a multiprocessor system |
JP2882475B2 (ja) | 1996-07-12 | 1999-04-12 | 日本電気株式会社 | スレッド実行方法 |
JP2970553B2 (ja) | 1996-08-30 | 1999-11-02 | 日本電気株式会社 | マルチスレッド実行方法 |
JP3209205B2 (ja) | 1998-04-28 | 2001-09-17 | 日本電気株式会社 | プロセッサにおけるレジスタ内容の継承装置 |
JP2000047887A (ja) | 1998-07-30 | 2000-02-18 | Toshiba Corp | 投機的マルチスレッド処理方法および投機的マルチスレッド処理装置 |
US6286027B1 (en) * | 1998-11-30 | 2001-09-04 | Lucent Technologies Inc. | Two step thread creation with register renaming |
JP2000305795A (ja) * | 1999-04-20 | 2000-11-02 | Nec Corp | 並列処理装置 |
US6574725B1 (en) | 1999-11-01 | 2003-06-03 | Advanced Micro Devices, Inc. | Method and mechanism for speculatively executing threads of instructions |
JP3702814B2 (ja) * | 2001-07-12 | 2005-10-05 | 日本電気株式会社 | マルチスレッド実行方法及び並列プロセッサシステム |
JP3632635B2 (ja) * | 2001-07-18 | 2005-03-23 | 日本電気株式会社 | マルチスレッド実行方法及び並列プロセッサシステム |
-
2001
- 2001-07-12 JP JP2001212246A patent/JP3702813B2/ja not_active Expired - Fee Related
-
2002
- 2002-04-29 US US10/133,409 patent/US7281250B2/en not_active Expired - Fee Related
- 2002-07-12 GB GB0216272A patent/GB2381610B/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
GB0216272D0 (en) | 2002-08-21 |
US7281250B2 (en) | 2007-10-09 |
GB2381610A (en) | 2003-05-07 |
GB2381610B (en) | 2006-02-22 |
JP2003029984A (ja) | 2003-01-31 |
US20030014471A1 (en) | 2003-01-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3702813B2 (ja) | マルチスレッド実行方法及び並列プロセッサシステム | |
JP3702814B2 (ja) | マルチスレッド実行方法及び並列プロセッサシステム | |
JP3630118B2 (ja) | スレッド終了方法及び装置並びに並列プロセッサシステム | |
JP2898820B2 (ja) | 自己並列化式のコンピュータ・システムおよび方法 | |
US6961935B2 (en) | Multi-processor system executing a plurality of threads simultaneously and an execution method therefor | |
JP5889986B2 (ja) | 実行された命令の結果を選択的にコミットするためのシステムおよび方法 | |
JP3120152B2 (ja) | コンピューターシステム | |
US5408658A (en) | Self-scheduling parallel computer system and method | |
JP3209205B2 (ja) | プロセッサにおけるレジスタ内容の継承装置 | |
JP2003030050A (ja) | マルチスレッド実行方法及び並列プロセッサシステム | |
JP2003029986A (ja) | プロセッサ間レジスタ継承方法及びその装置 | |
JP2002351657A (ja) | マルチプロセッサシステム、データ依存投機実行制御装置およびその方法 | |
JP2010079622A (ja) | マルチコアプロセッサシステム、および、そのタスク制御方法 | |
JPH0622035B2 (ja) | ベクトル処理装置 | |
JPH05282266A (ja) | 自己編成式並列コンピュータ・システムおよびその方法 | |
JP2009151645A (ja) | 並列処理装置及びプログラム並列化装置 | |
JP2023539468A (ja) | データ処理装置及び方法におけるコア内並列化 | |
WO2021027253A1 (zh) | 用于多线程处理的方法、装置及系统 | |
JP3518510B2 (ja) | リオーダバッファの管理方法及びプロセッサ | |
JP3604029B2 (ja) | マルチスレッドプロセッサ | |
JPH1196005A (ja) | 並列処理装置 | |
CN114968364B (zh) | 一种条件语句的处理方法、装置及存储介质 | |
JP2853458B2 (ja) | 命令列切り替え方法及びそれを用いた演算プロセッサ | |
JPH06131194A (ja) | 計算機システムおよび計算機ネットワークシステム | |
JPH07152583A (ja) | 実行形式ファイル生成装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A871 | Explanation of circumstances concerning accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20040903 |
|
A975 | Report on accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A971005 Effective date: 20041008 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041124 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050121 |
|
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: 20050628 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050711 |
|
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: 20090729 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100729 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110729 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110729 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120729 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120729 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130729 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |