(57)【特許請求の範囲】
【請求項１】
単一のプログラムを複数のスレッドに分割し複数のプロセッサで並列に実行する並列プロセッサシステムにおけるスレッド終了方法において、各プロセッサはフォークした子スレッドの開始アドレスに自身のプログラムカウンタの値が一致したことを検出したときに親スレッドの実行を終了することを特徴とするスレッド終了方法。
【請求項２】
各々プログラムカウンタ及びレジスタファイルを独立に有し前記プログラムカウンタに従ってスレッドの命令を同時にフェッチ、解釈、実行する複数のプロセッサと、スレッドの生成及び終了を管理するスレッド管理部とを備え、何れかの前記プロセッサで実行されている親スレッド中のフォーク命令によって指定されたフォーク先アドレスから始まる子スレッドの実行を、他の前記プロセッサに開始させる機能を備えた並列プロセッサシステムにおけるスレッド終了方法において、各プロセッサはフォークした子スレッドの開始アドレスに自身のプログラムカウンタの値が一致したことを検出したときに前記スレッド管理部の許可を得て親スレッドの実行を終了することを特徴とするスレッド終了方法。
【請求項３】
単一のプログラムを複数のスレッドに分割し複数のプロセッサで並列に実行する並列プロセッサシステムにおけるスレッド終了装置において、各プロセッサは、フォークした子スレッドの開始アドレスを保存するレジスタと、該レジスタに保存した前記開始アドレスに自身のプログラムカウンタの値が一致したことを検出する検出手段とを備え、各プロセッサはフォークした子スレッドの開始アドレスに自身のプログラムカウンタの値が一致したことを検出したときに親スレッドの実行を終了する構成を有するスレッド終了装置。
【請求項４】
各々プログラムカウンタ及びレジスタファイルを独立に有し前記プログラムカウンタに従ってスレッドの命令を同時にフェッチ、解釈、実行する複数のプロセッサと、スレッドの生成及び終了を管理するスレッド管理部とを備え、何れかの前記プロセッサで実行されている親スレッド中のフォーク命令によって指定されたフォーク先アドレスから始まる子スレッドの実行を、他の前記プロセッサに開始させる機能を備えた並列プロセッサシステムにおけるスレッド終了装置において、各プロセッサは、フォークした子スレッドの開始アドレスを保存するレジスタと、該レジスタに保存した前記開始アドレスに自身のプログラムカウンタの値が一致したことを検出する検出手段とを備え、各プロセッサはフォークした子スレッドの開始アドレスに自身のプログラムカウンタの値が一致したことを検出したときに前記スレッド管理部の許可を得て親スレッドの実行を終了する構成を有するスレッド終了装置。
【請求項５】
各々プログラムカウンタ及びレジスタファイルを独立に有し前記プログラムカウンタに従ってスレッドの命令を同時にフェッチ、解釈、実行する複数のプロセッサと、スレッドの生成及び終了を管理するスレッド管理部とを備え、何れかの前記プロセッサで実行されている親スレッド中のフォーク命令によって指定されたフォーク先アドレスから始まる子スレッドの実行を、他の前記プロセッサに開始させる機能を備えた並列プロセッサシステムにおいて、各プロセッサは、フォークした子スレッドの開始アドレスを保存するレジスタと、該レジスタに保存した前記開始アドレスに自身のプログラムカウンタの値が一致したことを検出する検出手段とを備え、各プロセッサはフォークした子スレッドの開始アドレスに自身のプログラムカウンタの値が一致したことを検出したときに親スレッドの実行を終了する構成を有する並列プロセッサシステム。
【請求項６】
各々プログラムカウンタ及びレジスタファイルを独立に有し前記プログラムカウンタに従ってスレッドの命令を同時にフェッチ、解釈、実行する複数のプロセッサと、スレッドの生成及び終了を管理するスレッド管理部とを備え、何れかの前記プロセッサで実行されている親スレッド中のフォーク命令によって指定されたフォーク先アドレスから始まる子スレッドの実行を、他の前記プロセッサに開始させる機能を備えた並列プロセッサシステムにおいて、各プロセッサは、フォークした子スレッドの開始アドレスを保存するレジスタと、該レジスタに保存した前記開始アドレスに自身のプログラムカウンタの値が一致したことを検出する検出手段とを備え、各プロセッサはフォークした子スレッドの開始アドレスに自身のプログラムカウンタの値が一致したことを検出したときに前記スレッド管理部の許可を得て親スレッドの実行を終了する構成を有する並列プロセッサシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は単一のプログラムを複数のスレッドに分割して複数のプロセッサにより並列に実行する並列プロセッサシステムに関し、特に個々のプロセッサにおけるスレッドの終了方法に関する。
【０００２】
【従来の技術】
単一のプログラムを並列プロセッサシステムで並列に処理する手法として、プログラムをスレッドと呼ぶ命令流に分割して複数のプロセッサで並列に実行するマルチスレッド実行方法があり、この方法を記載した文献として、特開平１０−２７１０８号公報（以下、文献１と称す）、「Ｏｎ−Ｃｈｉｐ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ指向  制御並列アーキテクチャＭＵＳＣＡＴの提案」（並列処理シンポジウムＪＳＰＰ９７論文集、情報処理学会、ｐｐ．２２９−２３６、Ｍａｙ  １９９７）（以下、文献２と称す）、特開平１０−７８８８０号公報（以下、文献３と称す）、「非数値計算プログラムのスレッド間命令レベル並列を利用するプロセッサ・アーキテクチャＳＫＹ」（並列処理シンポジウムＪＳＰＰ９８論文集、情報処理学会、ｐｐ．８７−９４、平成１０年６月）（以下、文献４と称す）、「Ｍｕｌｔｉｓｃａｌａｒ  Ｐｒｏｃｅｓｓｏｒ」（Ｇ．Ｓ．Ｓｏｈｉ，Ｓ．Ｅ．Ｂｒｅａｃｈ  ａｎｄ  Ｔ．Ｎ．Ｖｉｊａｙｋｕｍａｒ，  Ｔｈｅ２２ｎｄ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ，ＩＥＥＥ  Ｃｏｍｐｕｔｅｒ  ＳｏｃｉｅｔｙＰｒｅｓｓ，１９９５，ページ４１４−４２５）（以下、文献５と称す）等がある。以下、これらの文献に記載された従来の技術について説明する。
【０００３】
一般にマルチスレッド実行方法において、他のプロセッサ上に新たなスレッドを生成することを、スレッドをフォーク（ｆｏｒｋ）すると言い、フォーク動作を行った側のスレッドを親スレッド、生成された新しいスレッドを子スレッド、スレッドをフォークする箇所をフォーク点、子スレッドの先頭箇所をフォーク先アドレスまたは子スレッドの開始点と呼ぶ。文献１〜４では、スレッドのフォークを指示するためにフォーク点にフォーク命令が挿入される。フォーク命令にはフォーク先アドレスが指定され、フォーク命令の実行によりそのフォーク先アドレスから始まる子スレッドが他プロセッサ上に生成され、子スレッドの実行が開始される。また、スレッドの処理を終了させるターム（ｔｅｒｍ）命令と呼ばれる命令が用意されており、各プロセッサはターム命令を実行することによりスレッドの処理を終了する。文献４では、このターム命令をＦＩＮＩＳＨ命令と呼んでいる。
【０００４】
図７にマルチスレッド実行方法の処理の概要を示す。同図（ａ）は３つのスレッドＡ、Ｂ、Ｃに分割された単一のプログラムを示す。このプログラムを単一のプロセッサで処理する場合、同図（ｂ）に示すように１つのプロセッサＰＥがスレッドＡ、Ｂ、Ｃを順番に処理していく。これに対して文献１〜５のマルチスレッド実行方法では、同図（ｃ）に示すように、１つのプロセッサＰＥ１にスレッドＡを実行させ、プロセッサＰＥ１でスレッドＡを実行している最中に、スレッドＡに埋め込まれたフォーク命令によってスレッドＢを他のプロセッサＰＥ２に生成し、プロセッサＰＥ２においてスレッドＢを実行させる。また、プロセッサＰＥ２はスレッドＢに埋め込まれたフォーク命令によってスレッドＣをプロセッサＰＥ３に生成する。プロセッサＰＥ１、ＰＥ２はそれぞれスレッドＢ、Ｃの開始点の直前に埋め込まれたターム命令によってスレッドの処理を終了し、プロセッサＰＥ３はスレッドＣの最後の命令を実行すると、その次の命令（一般にはシステムコール命令）を実行する。このように複数のプロセッサでスレッドを同時に並行して実行することにより、逐次処理に比べて性能の向上が図られる。
【０００５】
従来の他のマルチスレッド実行方法として、図７（ｄ）に示すように、スレッドＡを実行しているプロセッサＰＥ１からフォークを複数回行うことにより、プロセッサＰＥ２にスレッドＢを、またプロセッサＰＥ３にスレッドＣをそれぞれ生成するマルチスレッド実行方法も存在する。この図７（ｄ）のモデルに対して、同図（ｃ）に示したようにスレッドはその生存中に高々１回に限って有効な子スレッドを生成することができるという制約を課したマルチスレッド実行方法をフォーク１回モデルと呼ぶ。フォーク１回モデルでは、スレッド管理の大幅な簡略化が可能となり、現実的なハードウェア規模でスレッド管理部のハードウェア化が実現できる。また、個々のプロセッサは子スレッドを生成する他プロセッサが１プロセッサに限定されるため、隣接するプロセッサを単方向にリング状に接続した並列プロセッサシステムでマルチスレッド実行が可能となる。本発明はこのようなフォーク１回モデルを前提とする。
【０００６】
子スレッドをフォークした場合、親スレッドから子スレッドへのレジスタ継承が必要になる。このレジスタ継承に関しては、一般に２通りの方式がある。１つは、文献１〜３の並列プロセッサシステムで採用されているように、親スレッドのフォーク時点のレジスタファイルの内容だけを継承対象とし、フォーク後に更新されたレジスタは継承しない方式である。もう１つは、文献４、５の並列プロセッサシステムで採用されているように、フォーク後に更新されたレジスタも継承対象とする方式である。前者をフォーク時レジスタ転送方式、後者をフォーク後レジスタ転送方式と呼ぶ。
【０００７】
その他、文献２に記載のＭＵＳＣＡＴでは、スレッド間の同期命令など、スレッドの並列動作を柔軟に制御するための専用命令が数多く用意されている。
【０００８】
【発明が解決しようとする課題】
上述した従来の並列プロセッサシステムにおいては、個々のプロセッサでスレッドを終了させるためには、必ずターム命令を子スレッドの開始点の直前に記述しておく必要がある。ターム命令は１スレッド当たり１個必要になるため、１つのスレッドに含まれる命令数が少ない細粒度スレッドほど、全命令数に占めるターム命令の割合が多くなる。ターム命令も他の命令と同様に命令メモリに格納されてフェッチの対象となるため、命令メモリのハードウェア量の増加、命令フェッチ数の増加による処理性能の低下が問題となる。
【０００９】
本発明はこのような従来の問題点を解決したものであり、その目的は、スレッドを終了させる為のターム命令を削減することにより命令メモリに必要な容量を削減し、また命令フェッチ数の削減による処理性能の向上を図ることにある。
【００１０】
【課題を解決するための手段】
本発明は、単一のプログラムを複数のスレッドに分割し複数のプロセッサで並列に実行する並列プロセッサシステムにおいて、各プロセッサは、フォークした子スレッドの開始アドレスに自身のプログラムカウンタの値が一致したことを検出したときに親スレッドの実行を終了することを基本とする。
【００１１】
また文献１等に示されるように、逐次的な実行順序関係を持つ複数のスレッドを並列に実行する際、子スレッドは親スレッドが終了しなければ終了できないという制約が課される場合があり、一般にこのような制約はスレッドの生成、終了を管理するスレッド管理部で保証している。従って、このような制約のあるマルチスレッド実行においては、各プロセッサはフォークした子スレッドの開始アドレスに自身のプログラムカウンタの値が一致したことを検出したときにスレッド管理部の許可を得て親スレッドの実行を終了する。
【００１２】
【作用】
本発明にあっては、子スレッドをフォークした親スレッドを実行しているプロセッサは、プログラムカウンタの値が子スレッドの開始アドレスに一致すると親スレッドの実行を終えるように動作するため、並列化プログラム中にターム命令を記述しておく必要がない。以下、図１を参照して本発明の作用を説明する。
【００１３】
図１（ａ）は３つのスレッドＡ、Ｂ、Ｃに分割された単一のプログラムを示す。ここで、スレッドＢの開始アドレスをｂ、スレッドＣの開始アドレスをｃとする。同図（ｂ）に示すように、１つのプロセッサＰＥ１にスレッドＡを実行させ、プロセッサＰＥ１でスレッドＡを実行している最中に、スレッドＡに埋め込まれたフォーク命令によってスレッドＢを他のプロセッサＰＥ２に生成し、プロセッサＰＥ２において開始アドレスｂから始まるスレッドＢを実行させる。また、プロセッサＰＥ２はスレッドＢに埋め込まれたフォーク命令によってスレッドＣをプロセッサＰＥ３に生成し、プロセッサＰＥ３において開始アドレスｃから始まるスレッドＣを実行させる。そして、スレッドＡを実行しているプロセッサＰＥ１は、自身のプログラムカウンタ（ＰＣ）の値がスレッドＢの開始アドレスｂに一致したとき、またスレッドＢを実行しているプロセッサＰＥ２は、自身のプログラムカウンタ（ＰＣ）の値がスレッドＣの開始アドレスｃに一致したとき、それぞれスレッドＡ、Ｂの実行を終了する。
【００１４】
【発明の実施の形態】
次に本発明の実施の形態の例について図面を参照して詳細に説明する。
【００１５】
【第１の実施の形態】
図２を参照すると、本発明を適用した並列プロセッサシステムの一例は、４スレッド並列実行型プロセッサであり、４個のプロセッサ１−ｉ（ｉ＝０〜３）が信号線２−ｉによってスレッドの生成、終了を管理するスレッド管理部３に接続されると共に、信号線４−ｉによって共有のメモリ５に接続されている。また、隣接するプロセッサ同士が通信バス６−ｉによって単方向にリング状に接続されている。この例では、４スレッド並列実行型プロセッサを取り上げたが、８スレッドや１６スレッドの並列実行型プロセッサ等、一般にｎ（≧２）スレッド並列実行型プロセッサに対して本発明は適用可能である。
【００１６】
各プロセッサ１−ｉは、プログラムカウンタ（以下、ＰＣと称す）及びレジスタファイルを独立に有し、ＰＣに従って、メモリ５中のスレッドの命令を同時にフェッチ、解釈、実行する機能を有している。各プロセッサ１−ｉは、スレッド管理部３から信号線２−ｉを通じてターゲットＰＣ値を伴うスレッド開始要求７ｃが送信された時点で、スレッドの実行を開始する。この時点でスレッド管理部３において当該プロセッサ１−ｉはビジー状態として管理される。スレッドの実行を終了するプロセッサ１−ｉは、スレッド管理部３に対して信号線２−ｉを通じてスレッド終了通知７ｄを送信する。このスレッド終了通知７ｄは、通知元のプロセッサ１−ｉが最古親スレッドを実行していることを条件にスレッド管理部３で受理され、当該プロセッサ１−ｉはフリー状態として管理され、プロセッサ１−ｉにスレッド終了許可７ｅが返却される。プロセッサ１−ｉはスレッド終了許可７ｅを受信した時点でスレッドの実行を終える。
【００１７】
各プロセッサ１−ｉは、実行中の親スレッドに存在するフォーク命令によって隣接する一方のプロセッサ１−ｊ（ｉ≠ｊ）（プロセッサ１−０はプロセッサ１−１、プロセッサ１−１はプロセッサ１−２、プロセッサ１−２はプロセッサ１−３、プロセッサ１−３はプロセッサ１−０）に子スレッドをフォークすることができる。各プロセッサ１−ｉは、子スレッドのフォークを行う際、信号線２−ｉを通じてスレッド管理部３に対し、子スレッドのフォーク先アドレス（開始ＰＣ値）を伴うフォーク要求７ａを送信する。スレッド管理部３は、フォーク要求７ａを受信すると、隣接プロセッサの状態に基づいて、隣接する他プロセッサ１−ｊに対するフォークが可能か否かを判定し、可能ならば当該プロセッサ１−ｊに対してフォーク先アドレスを伴うスレッド開始要求７ｃを送信する一方、フォーク要求元のプロセッサ１−ｉに対しては、フォーク応答７ｂを返却する。フォーク応答７ｂを受信したプロセッサ１−ｉは、通信バス６−ｉを通じてフォーク先プロセッサ１−ｊに親スレッドのレジスタの値を転送するレジスタ継承を行い、スレッド開始要求７ｃを受信したプロセッサ１−ｊは、フォーク先アドレスから子スレッドの実行を開始する。
【００１８】
図３を参照すると、各々のプロセッサ１−ｉは、スレッド管理部３から送信されたスレッド開始要求７ｃに付随する開始アドレス値がセットされ、その後に適宜歩進されるＰＣ２１と、ＰＣ２１に従ってメモリ５からスレッドの命令をフェッチする命令フェッチユニット２２と、フェッチされた命令をデコードし、実行する実行ユニット２３と、汎用レジスタ２４−０〜２４−ｍの集合であるレジスタファイル２５と、フォーク先プロセッサに対して通信バス６−ｉ経由でレジスタファイル２５の内容を転送するレジスタ転送ユニット２６と、実行ユニット２３がフォーク命令を実行したときに出力するフォーク信号２７でセットされ、スレッド管理部３から受信されるフォーク応答７ｂによってリセットされ、その出力がフォーク要求７ａとなるフォーク有効ビット２８と、フォーク要求７ａに付随するフォーク先アドレスを保存するレジスタ２９と、ＰＣ２１の値がレジスタ２９に保存されたフォーク先アドレスと一致するか否かを検出し、一致を検出したときに一致信号３１を実行ユニット２３に出力する比較回路３０とを含んで構成されている。
【００１９】
各々のプロセッサ１−ｉは、スレッド開始要求７ｃによって、それに付随する開始アドレスからスレッドの実行を開始する。また、実行ユニット２３は、フォーク命令の実行時、フォーク信号２７によってフォーク有効ビット２８をセットすると共にフォーク先アドレスをレジスタ２９に保存し、スレッド管理部３に対してフォーク先アドレスを添えてフォーク要求７ａを送信する。さらに実行ユニット２３は、ＰＣ２１の値がレジスタ２９に保存されたフォーク先アドレスと一致して比較回路３０から一致信号３１が出力されると、スレッドの処理を終了すべく、スレッド管理部３に対してスレッド終了通知７ｄを送信し、その応答としてスレッド管理部３からスレッド終了許可７ｅを受信するとスレッドの処理を終了する。
【００２０】
レジスタ転送ユニット２６は、フォークした子スレッドへ親スレッドから継承すべきレジスタを転送するユニットであり、例えば、通信バス６−ｉのバス幅によって一度に転送できる数のレジスタ毎に、レジスタファイル２５のレジスタの値とレジスタ番号（レジスタアドレス）とをフォーク先プロセッサのレジスタファイルへ送信する処理を行う。
【００２１】
スレッドの開始から終了までのプロセッサ１−ｉの処理の概要を図４に示す。スレッド管理部３からのスレッド開始要求７ｃに基づき、プロセッサ１−ｉで１つのスレッドの実行が開始される際、当該プロセッサ１−ｉのフォーク有効ビット２８がリセットされ、またレジスタ２９の内容がクリアされる（ステップＳ１）。以後、スレッドの命令のフェッチ、デコード、実行が継続して実行される（ステップＳ２）。
【００２２】
実行ユニット２３でデコードされた命令がフォーク命令の場合（ステップＳ４でＹＥＳ）、実行ユニット２３は、当該フォーク命令で指定されたフォーク先アドレスをレジスタ２９に保存し（ステップＳ５）、フォーク信号２７によってフォーク有効ビット２８をセットすることにより、レジスタ２７に保存したフォーク先アドレスを伴ったフォーク要求７ａをスレッド管理部３に送信する（ステップＳ６）。そして、スレッド管理部３からフォーク応答７ｂが返却されるのを待つ（ステップＳ７）。
【００２３】
スレッド管理部３は、プロセッサ１−ｉからフォーク要求７ａが送出されている期間内で、隣接プロセッサ１−ｊに対するフォークが可能になると、要求元のプロセッサ１−ｉに対してフォーク応答７ｂを返却すると同時に、隣接プロセッサ１−ｊに対してスレッド開始要求７ｃを送信する。プロセッサ１−ｉは、スレッド管理部３からフォーク応答７ｂを受信すると、フォーク有効ビット２８をリセットし、レジスタ転送ユニット２６によって親スレッドのレジスタファイル２５の内容を通信バス６−ｉ経由でフォーク先プロセッサ１−ｊのレジスタファイルに転送するレジスタ継承操作を行う（ステップＳ８）。他方、フォーク先プロセッサ１−ｊでは図４のステップＳ１以降の処理を実行する。
【００２４】
プロセッサ１−ｉで命令の実行が進み、ＰＣ２１の値がレジスタ２９に保存されたフォーク先アドレスに一致すると（ステップＳ３でＹＥＳ）、比較回路３０から一致信号３１が実行ユニット２３に出力され、実行ユニット２３はスレッドの終了処理を開始する。具体的には、スレッド終了通知７ｄをスレッド管理部３に送信し（ステップＳ９）、スレッド管理部３からスレッド終了許可７ｅを受信した時点でスレッドの処理を終了する（ステップＳ１０）。
【００２５】
このように本実施の形態によれば、子スレッドの開始点まで命令の実行が進んだことをハードウェア的に検出してスレッドの終了を行うので、従来のようなターム命令が必要なくなる。従って、逐次処理プログラムから本実施の形態用の並列化プログラムを生成するコンパイラでは、逐次処理プログラムの制御フロー及びデータフローを解析して、基本ブロック或いは複数の基本ブロックを並列化の単位、すなわちスレッドに分割し、並列化のためのコードを挿入して並列化プログラムを生成して出力する際、フォーク点にはフォーク命令を挿入するが、子スレッドの開始点の直前に従来挿入されていたターム命令は挿入しない。
【００２６】
【第２の実施の形態】
前述した第１の実施の形態では、フォーク命令の時点で実際にフォーク可能になるまで親スレッドの実行をウエイトしたが（図４のステップＳ７）、本実施の形態ではフォーク命令の時点でフォーク不可能な場合にレジスタファイルの内容を退避させ、フォーク可能となった時点で前記退避した情報に基づいて子スレッドのフォークを行うようにしたものである。以下、第１の実施の形態との相違点を中心に本実施の形態を説明する。
【００２７】
図５を参照すると、本実施の形態における並列プロセッサシステムの各々のプロセッサ１−ｉは、図３に示した構成に加えて、退避バッファ４１と、退避バッファ有効ビット４２と、実行ユニット２３から出力される退避信号４３によって起動されるとレジスタファイル２５の内容を退避バッファ４１に退避する退避ユニット４４とを備え、レジスタ転送ユニット２６はレジスタファイル２５及び退避バッファ４１に接続されている。退避バッファ有効ビット４２は、スレッド開始時にリセットされ、退避信号４３によってセットされ、また退避バッファ４１に基づくフォークが行われた場合にリセットされる。
【００２８】
スレッドの開始から終了までのプロセッサ１−ｉの処理の概要を図６に示す。スレッド管理部３からのスレッド開始要求７ｃに基づき、プロセッサ１−ｉで１つのスレッドの実行が開始される際、当該プロセッサ１−ｉのフォーク有効ビット２８及び退避バッファ有効ビット４２がリセットされ、またレジスタ２９の内容がクリアされる（ステップＳ１１）。以後、スレッドの命令のフェッチ、デコード、実行が継続して実行される（ステップＳ１２）。
【００２９】
実行ユニット２３でデコードされた命令がフォーク命令の場合（ステップＳ１４でＹＥＳ）、実行ユニット２３はフォーク先アドレスをレジスタ２９に保存し（ステップＳ１５）、フォーク信号２７によってフォーク有効ビット２８をセットすることによりフォーク先アドレスを伴ったフォーク要求７ａをスレッド管理部３に送信する（ステップＳ１６）。そして、スレッド管理部３から所定の時間内にフォーク応答７ｂが返却された場合（ステップＳ１７でＹＥＳ）、フォーク有効ビット２８をリセットし、レジスタ転送ユニット２６によってレジスタファイル２５の内容をフォーク先プロセッサ１−ｊに転送する（ステップＳ１８）。
【００３０】
他方、スレッド管理部３から所定の時間内にフォーク応答７ｂが返却されなかった場合（ステップＳ１７でＮＯ）、退避信号４３によって退避ユニット４４を起動することによりレジスタファイル２５の内容を退避バッファ４１へ退避させ、退避バッファ有効ビット４２をセットする（ステップＳ１９）。この退避バッファ有効ビット４２がセットされている間に、スレッド管理部３からフォーク応答７ｂを受信すると（ステップＳ３１、Ｓ３２でＹＥＳ）、レジスタ転送ユニット２６により退避バッファ４１に退避されているレジスタファイル２５の内容をフォーク先プロセッサ１−ｊに転送する（ステップＳ３３）。このとき、フォーク有効ビット２８及び退避バッファ有効ビット４２がリセットされる。
【００３１】
プロセッサ１−ｉで命令の実行が進み、ＰＣ２１の値がレジスタ２９に保存されたフォーク先アドレスに一致すると（ステップＳ１３でＹＥＳ）、比較回路３０から一致信号３１が実行ユニット２３に出力され、実行ユニット２３はスレッド終了通知７ｄをスレッド管理部３に送信する（ステップＳ２０）。そして、スレッド管理部３からスレッド終了許可７ｅを受信した時点でスレッドの処理を終了する（ステップＳ２１）。
【００３２】
以上、本発明を幾つかの実施の形態を挙げて説明したが、本発明は以上の実施の形態にのみ限定されず、その他各種の付加変更が可能である。例えば、前記各実施の形態では、フォーク時レジスタ転送方式を前提としたが、フォーク後レジスタ転送方式のマルチスレッド実行方法においても同様に適用可能である。また、複数のプロセッサに共通にスレッド管理部３を設ける集中スレッド管理型の並列プロセッサシステムに本発明を適用したが、文献１等に記載されるように各プロセッサ毎にスレッド管理部を設ける分散スレッド管理型の並列プロセッサシステムにも本発明は適用可能である。また、隣接するプロセッサ間同士を単方向にリング状に接続する通信バスを使ってレジスタ転送を行ったが、全てのプロセッサが共通の通信バスに接続された並列プロセッサシステムでは当該共通の通信バスを使ってレジスタ転送が行われる。
【００３３】
【発明の効果】
以上説明したように本発明によれば、子スレッドの開始点の直前にターム命令を記述する必要がなくなり、ターム命令の削減によってプログラムサイズをコンパクトにでき、命令メモリに必要な容量の削減、命令フェッチ数の削減による処理性能の向上が可能となる。
【図面の簡単な説明】
【図１】本発明の作用の説明図である。
【図２】本発明を適用した並列プロセッサシステムの一例を示すブロック図である。
【図３】本発明の第１の実施の形態にかかる並列プロセッサシステムにおけるプロセッサの構成例を示すブロック図である。
【図４】本発明の第１の実施の形態にかかる並列プロセッサシステムにおけるスレッドの開始から終了までのプロセッサの処理の一例を示すフローチャートである。
【図５】本発明の第２の実施の形態にかかる並列プロセッサシステムにおけるプロセッサの構成例を示すブロック図である。
【図６】本発明の第２の実施の形態にかかる並列プロセッサシステムにおけるスレッドの開始から終了までのプロセッサの処理の一例を示すフローチャートである。
【図７】従来のマルチスレッド実行方法の処理の概要を示す図である。
【符号の説明】
１−０〜１−３…プロセッサ
２−０〜２−３…信号線
３…スレッド管理部
４−０〜４−３…信号線
５…メモリ
６−０〜６−３…通信バス
【図１】
0003630118.tif 000002
【図２】
0003630118.tif 000003
【図３】
0003630118.tif 000004
【図４】
0003630118.tif 000005
【図５】
0003630118.tif 000006
【図６】
0003630118.tif 000007
【図７】
0003630118.tif 000008