(57)【要約】【課題】  スレッド間の同期操作を高速化可能なマルチスレッドプロセッサを提供する。【解決手段】  スレッドデータベース１はシステム内で一意にスレッドを特定するスレッドＩＤを保持する。チェック手段３はターゲットとするスレッドが同一プロセッサ上に存在しない場合、トラップ１０を発生する。イッシュー手段２はターゲットとするスレッドが同一プロセッサ上に存在する場合、次の命令発行の時点で、次に実行するスレッド９を当該ターゲットとするスレッドとして連続的にパイプラインに投入する。ゲート手段１１はあるスレッドの実行したデータを、次に続くターゲットとするスレッドの演算の入力とする。スイッチ手段１３はターゲットのスレッドをあるスレッドが実行中に実行不可とし、あるスレッドのコンテキスト内のデータをターゲットのスレッドのコンテキストに転送する。【選択図】      図１
2008269114.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドをパイプラインにて並行実行するマルチスレッドプロセッサであって、
前記複数のスレッドの情報各々と当該情報内の各々にシステム内で一意にスレッドを特定するスレッドＩＤ（ｉｄｅｎｔｉｆｉｅｒ）とを保持する保持手段と、同期対象であるターゲットスレッドが同一プロセッサ上に存在しない場合にトラップを発生する手段と、前記ターゲットスレッドが前記同一プロセッサ上に存在する場合に次の命令発行の時点で次に実行するスレッドを前記ターゲットスレッドとして連続的に前記パイプラインに投入する手段とを有することを特徴とするマルチスレッドプロセッサ。
【請求項２】
前記保持手段内に前記ターゲットスレッドがあるか否かをチェックして前記ターゲットスレッドが前記同一プロセッサ上に存在するか否かを判定することを特徴とする請求項１記載のマルチスレッドプロセッサ。
【請求項３】
あるスレッドの実行したデータを次に続く前記ターゲットスレッドの演算の入力とする手段を含むことを特徴とする請求項１または請求項２記載のマルチスレッドプロセッサ。
【請求項４】
あるスレッドが実行中において前記ターゲットスレッドを実行不可として前記パイプラインに投入せず、前記あるスレッドのコンテキスト内にあるデータを前記ターゲットスレッドのコンテキストに転送する手段を含むことを特徴とする請求項１から請求項３のいずれか記載のマルチスレッドプロセッサ。
【請求項５】
複数のスレッドをパイプラインにて並行実行するマルチスレッドプロセッサに用いるスレッド間同期操作方法であって、
前記マルチスレッドプロセッサにおいて、前記複数のスレッドの情報各々と当該情報内の各々にシステム内で一意にスレッドを特定するスレッドＩＤ（ｉｄｅｎｔｉｆｉｅｒ）とを保持手段に保持しておき、
前記マルチスレッドプロセッサが、同期対象であるターゲットスレッドが同一プロセッサ上に存在しない場合にトラップを発生する処理と、前記ターゲットスレッドが前記同一プロセッサ上に存在する場合に次の命令発行の時点で次に実行するスレッドを前記ターゲットスレッドとして連続的に前記パイプラインに投入する処理とを実行することを特徴とするスレッド間同期操作方法。
【請求項６】
前記マルチスレッドプロセッサが、前記保持手段内に前記ターゲットスレッドがあるか否かをチェックして前記ターゲットスレッドが前記同一プロセッサ上に存在するか否かを判定することを特徴とする請求項５記載のスレッド間同期操作方法。
【請求項７】
前記マルチスレッドプロセッサが、あるスレッドの実行したデータを次に続く前記ターゲットスレッドの演算の入力とする処理を実行することを特徴とする請求項５または請求項６記載のスレッド間同期操作方法。
【請求項８】
前記マルチスレッドプロセッサが、あるスレッドが実行中において前記ターゲットスレッドを実行不可として前記パイプラインに投入せず、前記あるスレッドのコンテキスト内にあるデータを前記ターゲットスレッドのコンテキストに転送する処理を実行することを特徴とする請求項５から請求項７のいずれか記載のスレッド間同期操作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマルチスレッドプロセッサ及びそれに用いるスレッド間同期操作方法に関し、特にマルチスレッドプロセッサにおけるスレッド間の同期操作に関する。
【背景技術】
【０００２】
マルチスレッドプロセッサでは、プログラムを単一プロセス内でスレッドと呼ぶ実行単位に分割して並行実行している。この場合、複数のスレッドはメモリ空間を共有している。したがって、複数のスレッドが共有のデータを扱う際には、データの競合が発生することがあり、このデータの競合が起こらないようにするためにスレッド間の同期操作（あるスレッドが共有のデータを扱っている時に、他のスレッドが共有のデータを扱えないようにする排他的な操作）が行われる。従来のスレッド間の同期操作を図２〜図４に示す。
【０００３】
図２において、ＣＰＵ１０１はスレッド（Ｔｈｒｅａｄ）１０２から指定された命令領域１０５にあるプログラムを実行中である。スレッド１０２はターゲット（Ｔａｒｇｅｔ）１０３と同期をとるために、同期ワード１０６を設定し、その初期値を１（０以外）と設定する。
【０００４】
スレッド１０２の実行が命令領域１０５のＣＨＫ（ｃｈｅｃｋ）命令まで到達すると、同期ワード１０６が参照され、その値が０以外であると、スレッド１０２の状態はＲ（Ｒｕｎｎａｂｌｅ）からＳ（Ｓｕｓｐｅｎｄ）になり、システムで実行されている全てのスレッドがつながれているスレッドキュー（Ｔｈｒｅａｄ  Ｑｕｅｕｅ）１０８につながれる。
【０００５】
ＣＰＵ１０１の実行が進むと、図３に示すように、スレッドキュー１０８中のターゲット１０３がＣＰＵ１０１にロードされて実行される。ターゲット１０３の命令領域１０７には、スレッド１０２との同期の完了を知らせるために、ＬＡＣ（ｌｏａｄ  ａｎｄ  Ｃｌｅａｒ）命令があり、この命令が実行されると、同期ワード１０６の値は、１から０に変更される。
【０００６】
さらに、ＣＰＵ１０１の実行が進むと、図４に示すように、再度、スレッド１０２がロードされて実行され、再度、ＣＨＫ命令から実行され、今度は同期ワード１０６が０のため、その後の命令が継続できる。このようにして、スレッド間の同期を実現することができる。データの受け渡しは、別途取り決めた方法で行われる。
【０００７】
一般的なマルチスレッドプロセッサの方式については、以下の非特許文献に記載されている。
【非特許文献１】“Ｓｕｎ  Ｎｉａｇａｒａ  ａｎｄ  ａｎ  Ｅｖａｌｕａｔｉｏｎ  ｏｆ  ＳＭＴ  ｉｎ  ＩＢＭ’ｓ  Ｐｏｗｅｒ５”（Ｊｏｈｎ  Ｍｅｌｌｏｒ−Ｃｒｕｍｍｅｙ，Ｄｅｐａｒｔｍｅｎｔ  ｏｆ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  Ｒｉｃｅ  Ｕｎｉｖｅｒｓｉｔｙ，ＣＯＭＰ  ５２２  Ｌｅｃｔｕｒｅ４  ７  Ｓｅｐｔｅｍｂｅｒ  ２００６）
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した従来のスレッド間の同期操作では、スレッド間の同期のために、同期ワードの参照というメモリアクセスが必要なため、同期のためのコストが大きいという問題がある。
【０００９】
また、従来のスレッド間の同期操作では、スレッド間の同期のためのデータの授受が、別のメモリ領域を介して行うため、余計なコストが生ずるという問題がある。
【００１０】
Ｊａｖａ（登録商標）、Ｃ＃、Ｃ等のプログラミング言語で記述されたスレッドを多用するソフトウェアでは、スレッド間の依存関係を保証するために、スレッド間の同期操作が必要になる。スレッド間の同期操作は、通常、メモリを介して同期操作を行い、データの受け渡しを行うため、処理的にコストがかかる操作となり、スレッドを多用するソフトウェアの性能に大きく影響する処理である。
【００１１】
マルチスレッドプロセッサは、その性質から、同期を必要とするスレッドが同一プロセッサ内に存在する可能性が高く、プロセッサ内での同期とデータ受け渡しとが実現できれば、プログラムの性能向上に寄与することが大いに期待できる。
【００１２】
そこで、本発明の目的は上記の問題点を解消し、スレッド間の同期操作を高速化することができるマルチスレッドプロセッサ及びそれに用いるスレッド間同期操作方法を提供することにある。
【課題を解決するための手段】
【００１３】
本発明によるマルチスレッドプロセッサは、複数のスレッドをパイプラインにて並行実行するマルチスレッドプロセッサであって、
前記複数のスレッドの情報各々と当該情報内の各々にシステム内で一意にスレッドを特定するスレッドＩＤ（ｉｄｅｎｔｉｆｉｅｒ）とを保持する保持手段と、同期対象であるターゲットスレッドが同一プロセッサ上に存在しない場合にトラップを発生する手段と、前記ターゲットスレッドが前記同一プロセッサ上に存在する場合に次の命令発行の時点で次に実行するスレッドを前記ターゲットスレッドとして連続的に前記パイプラインに投入する手段とを備えている。
【００１４】
本発明によるスレッド間同期操作方法は、複数のスレッドをパイプラインにて並行実行するマルチスレッドプロセッサに用いるスレッド間同期操作方法であって、
前記マルチスレッドプロセッサにおいて、前記複数のスレッドの情報各々と当該情報内の各々にシステム内で一意にスレッドを特定するスレッドＩＤ（ｉｄｅｎｔｉｆｉｅｒ）とを保持手段に保持しておき、
前記マルチスレッドプロセッサが、同期対象であるターゲットスレッドが同一プロセッサ上に存在しない場合にトラップを発生する処理と、前記ターゲットスレッドが前記同一プロセッサ上に存在する場合に次の命令発行の時点で次に実行するスレッドを前記ターゲットスレッドとして連続的に前記パイプラインに投入する処理とを実行している。
【００１５】
すなわち、本発明のマルチスレッドプロセッサは、その保持する複数のスレッド情報内の各々に、システム内で一意のスレッドＩＤ（ｉｄｅｎｔｉｆｉｅｒ）を保持する手段と、ターゲットとするスレッドが同一プロセッサ上に存在しない場合に、トラップを発生する手段と、ターゲットとするスレッドが同一プロセッサ上に存在する場合に、次の命令発行の時点で、次に実行するスレッドを当該ターゲットとするスレッドとして連続的にパイプラインに投入する手段と、あるスレッドの実行したデータを次に続くターゲットとするスレッドの演算の入力とする手段と、ターゲットとするスレッドを、あるスレッドが実行中において実行不可としてパイプラインに投入せず、当該あるスレッドのコンテキスト内にあるデータ（レジスタ）を当該ターゲットとするスレッドのコンテキストに転送する手段とを有することによって、上記の課題を解決することを特徴とする。
【００１６】
より具体的に説明すると、本発明のマルチスレッドプロセッサでは、スレッドデータベース（Ｔｈｒｅａｄ  ＤＢ）に、その保持する複数のスレッド情報内の各々に、システム内で一意にスレッドを特定するスレッドＩＤを保持する。
【００１７】
チェック（Ｃｈｅｃｋ）手段は、ターゲットとするスレッドが同一プロセッサ上に存在しない場合に、トラップを発生する。イッシュー（Ｉｓｓｕｅ）手段は、ターゲットとするスレッドが同一プロセッサ上に存在する場合に、次の命令発行の時点で、次に実行するスレッドを当該ターゲットとするスレッドとして、連続的にパイプラインに投入する。
【００１８】
ゲート（Ｇ）手段は、あるスレッドの実行したデータを、次に続くターゲットとするスレッドの演算の入力とする。スイッチ（Ｓｗｉｔｃｈ）手段はターゲットとするスレッドを、あるスレッドが実行中において実行不可として、パイプラインに投入せず、当該あるスレッドのコンテキスト内にあるデータ（レジスタ）を、当該ターゲットとするスレッドのコンテキストに転送する。
【００１９】
このようにして、本発明のマルチスレッドプロセッサでは、同期するスレッドの存在の有無を検出する検出手段［チェック（Ｃｈｅｃｋ）手段及びイッシュー（Ｉｓｓｕｅ）手段］と、スレッド同期のための高速化手段［ゲート（Ｇ）手段及びスイッチ（Ｓｗｉｔｃｈ）手段］とを有することで、多数のスレッドによって構成されるプログラムの同期操作の高速化を図り、よって処理全体の高速化を図ることを可能としている。
【００２０】
つまり、本発明のマルチスレッドプロセッサでは、同期対象のスレッドの存在の有無を検出しているので、スレッド間の同期操作の高速化を達成することが可能となる。
【００２１】
また、本発明のマルチスレッドプロセッサでは、メモリを介することなく、同期操作をプロセッサ内で行うので、スレッド間の同期操作の高速化を達成することが可能となる。
【００２２】
さらに、本発明のマルチスレッドプロセッサでは、スレッド間の同期操作に関わるデータ交換を、パイプラインステージ間で行っているので、スレッド間のデータの交換を高速化することが可能となる。
【発明の効果】
【００２３】
本発明は、上記のような構成及び動作とすることで、スレッド間の同期操作を高速化することができるという効果が得られる。
【発明を実施するための最良の形態】
【００２４】
次に、本発明の実施例について図面を参照して説明する。図１は本発明の一実施例によるマルチスレッドプロセッサの動作を示すブロック図である。図１において、スレッドデータベース（Ｔｈｒｅａｄ  ＤＢ）１にはその保持する複数のスレッド（Ｔｈｒｅａｄ）＃０〜＃ｎの情報内の各々に、システム内で一意にスレッド＃０〜＃ｎ各々を特定するスレッドＩＤ（ｉｄｎｔｉｆｉｅｒ）が保持されている。
【００２５】
チェック（Ｃｈｅｃｋ）手段３はターゲットとするスレッドが同一プロセッサ上に存在しない場合に、トラップ（ＴＲＡＰ）１０を発生する。イッシュー（Ｉｓｓｕｅ）手段２はターゲットとするスレッドが同一プロセッサ上に存在する場合に、次の命令発行の時点で、次に実行するスレッドをそのターゲットとするスレッドとして、連続的にパイプラインに投入する。
【００２６】
ゲート（Ｇ）手段１１はあるスレッドの実行したデータを、次に続くターゲットとするスレッドの演算の入力とする。スイッチ（Ｓｗｉｔｃｈ）手段１３はターゲットとするスレッドを、あるスレッドが実行中において実行不可として、パイプラインに投入せず、当該あるスレッドのコンテキスト内にあるデータ（レジスタ）を当該ターゲットとするスレッドのコンテキストに転送する。
【００２７】
このように、本発明の一実施例によるマルチスレッドプロセッサには、同期するスレッドの存在の有無を検出する検出手段（チェック手段３及びイッシュー手段２）と、スレッド同期のための高速化手段（ゲート手段１１及びスイッチ手段１３）とを有しているので、多数のスレッド＃１〜＃ｎによって構成されるプログラムの同期操作の高速化を図ることができ、処理全体の高速化を図ることができる。
【００２８】
以上、本発明の一実施例によるマルチスレッドプロセッサについて述べたが、上記のマルチスレッドプロセッサの一般的な動作については、当業者にとってよく知られており、また本発明とは直接関係しないので、その説明については省略する。
【００２９】
次に、図１に示す本発明の一実施例によるマルチスレッドプロセッサの動作について説明する。本発明の一実施例によるマルチスレッドプロセッサでは、ステージ（Ｓｔａｇｅ）Ｉ，Ｄ，Ｅ，Ｍ，Ｃからなるパイプライン処理が実行される。
【００３０】
つまり、ステージＩでは、イッシュー手段２またはチェック手段３による処理が実行され、ステージＤでは、命令デコード（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｅｃｏｄｉｎｇ）手段４による処理が実行され、ステージＥでは、実行（Ｅｘｅｃｕｔｅ）手段５による処理が実行される。
【００３１】
また、ステージＭでは、メモリアクセス（Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）手段６によるメモリ系（Ｃａｃｈｅ  ｍｅｍｏｒｙ，Ｍｅｍｏｒｙ）８へのアクセス処理が実行され、ステージＣでは、命令終了（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｃｏｍｐｌｅｔｉｏｎ）処理７が行われる。
【００３２】
図１において、スレッドデータベース１内の、次に実行されるスレッド＃０の命令が、同期命令であると、チェック手段３はスレッドデータベース１内に同期対象であるスレッドがあるかをチェックし、同期対象であるスレッドがない時にその命令をトラップし、オペレーティング・システム（ＯＳ）（図示せず）の介入によって対象とするスレッド（この例の場合はスレッド＃３）をこのプロセッサ内にロードする（図１の１２の処理）。
【００３３】
同期対象であるスレッドがある場合、イッシュー手段２はスレッド＃０の命令投入の次のサイクルにて、スレッド＃３を投入すべく、スレッド＃３の情報を次スレッド（ＮＥＸＴ  ｔｈｒｅａｄ）（レジスタ）９に格納する。これによって、スレッド＃０の実行後、続けてスレッド＃３が投入される（図１のステージＩの処理）。
【００３４】
スレッド＃０が実行手段５によって実行されると、その実行結果は、ゲート手段１１を通じて、後続のスレッド＃３の入力となり、スレッド＃３が実行手段５によって実行される時に、データの受け渡しが完了する（図１のステージＥの処理）。
【００３５】
尚、このステージＥでのデータの受け渡しの代替手段として、スレッド＃３を実行せず、その実行スロットを空のままで、スイッチ手段１３を通じてデータの受け渡しをするような構成も可能である。
【００３６】
このように、本実施例では、イッシュー手段２またはチェック手段３による処理の前に、同期対象のスレッドの存在の有無を検出しているので、スレッド間の同期操作の高速化を達成することができる。
【００３７】
また、本実施例では、スレッド間の同期操作をメモリを介さず、同一のプロセッサ内で行うので、スレッド間の同期操作の高速化を達成することができる。
【００３８】
さらに、本実施例では、スレッド間の同期操作に関わるデータ交換を、パイプラインステージ間でデータの受け渡しを行っているので、データの交換を高速化することができる。
【図面の簡単な説明】
【００３９】
【図１】本発明の一実施例によるマルチスレッドプロセッサの動作を示すブロック図である。
【図２】従来のスレッド間の同期操作を示す図である。
【図３】従来のスレッド間の同期操作を示す図である。
【図４】従来のスレッド間の同期操作を示す図である。
【符号の説明】
【００４０】
１  スレッドデータベース
２  イッシュー手段
３  チェック手段
４  命令デコード手段
５  実行手段
６  メモリアクセス手段
７  命令終了処理
８  メモリ系
９  次スレッド
１０  トラップ
１１  ゲート手段
１３  スイッチ手段
【図１】
2008269114.tif 000003
【図２】
2008269114.tif 000004
【図３】
2008269114.tif 000005
【図４】
2008269114.tif 000006