(57)【要約】【課題】処理のリアルタイム性を維持しつつ効率的な処理を行うと共に、データの不整合が生じるのを防止すること。【解決手段】複数のスレッドに対応した複数のレジスタ領域と、実行スレッドを切り替えるスレッド制御手段と、スレッド切り替えタイミングの直前に実行される命令を含み、当該命令以前に実行される所定数の命令の中に、特定の記憶媒体からデータを読み込んで実行スレッドに対応したレジスタ領域に格納する特定の命令が含まれるか否かを判定する特定命令判定手段と、を備え、所定数の命令の中に特定の命令が含まれると判定された場合には、特定の命令と切り替え先のスレッドの命令とを並行して実行させると共に、特定の命令を実行したスレッドに対応したレジスタ領域に特定の記憶媒体から読み込んだデータを格納するように制御するマルチスレッド・プロセッサ。【選択図】図１
2012168725.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドによりハードウエア・マルチスレッディング処理が行われるマルチスレッド・プロセッサであって、
前記複数のスレッドに対応した複数のレジスタ領域と、
前記複数のスレッドのうち処理を実行する実行スレッドを切り替えるスレッド制御手段と、
前記スレッド制御手段により前記実行スレッドが切り替えられるスレッド切り替えタイミングの直前に実行される命令を含み、当該命令以前に実行される所定数の命令の中に、特定の記憶媒体からデータを読み込んで前記実行スレッドに対応したレジスタ領域に格納する特定の命令が含まれるか否かを判定する特定命令判定手段と、
を備え、
前記スレッド制御手段は、前記特定命令判定手段により前記所定数の命令の中に前記特定の命令が含まれると判定された場合には、前記特定の命令と、前記スレッド切り替えタイミングにおいて切り替えられる切り替え先のスレッドの命令とを並行して実行させると共に、前記特定の命令を実行したスレッドに対応したレジスタ領域に前記特定の記憶媒体から読み込んだデータを格納するように制御することを特徴とする、
マルチスレッド・プロセッサ。
【請求項２】
請求項１に記載のマルチスレッド・プロセッサであって、
前記特定の命令は、該マルチスレッド・プロセッサが実行する命令のうちレイテンシが最小の命令のレイテンシに前記所定数を乗じた値よりも、レイテンシが大きい命令である、
マルチスレッド・プロセッサ。
【請求項３】
請求項１又は２に記載のマルチスレッド・プロセッサであって、
前記複数のスレッドにより実行される命令が格納される命令バッファを備え、
前記特定命令判定手段は、前記スレッド切り替えタイミングに先立って前記スレッド制御手段から通知される信号により前記スレッド切り替えタイミングを把握すると共に、該把握されたスレッド切り替えタイミングと前記命令バッファに格納された命令との関係に基づき、前記所定数の命令の中に前記特定の命令が含まれるか否かを判定する手段である、
マルチスレッド・プロセッサ。
【請求項４】
請求項１又は２に記載のマルチスレッド・プロセッサであって、
前記複数のスレッドにより実行される命令が格納される命令バッファを備え、
前記特定命令判定手段は、固定周期で到来する前記スレッド切り替えタイミングを予知すると共に、該予知したスレッド切り替えタイミングと前記命令バッファに格納された命令との関係に基づき、前記所定数の命令の中に前記特定の命令が含まれるか否かを判定する手段である、
マルチスレッド・プロセッサ。
【請求項５】
複数のスレッドによりハードウエア・マルチスレッディング処理が行われるマルチスレッド・プロセッサであって、
前記複数のスレッドに対応した複数のレジスタ領域と、
前記複数のスレッドのうち処理を実行する実行スレッドを切り替えるスレッド制御手段と、
前記スレッド制御手段により前記実行スレッドが切り替えられるスレッド切り替えタイミングの直前に実行される命令が、特定の記憶媒体からデータを読み込んで前記実行スレッドに対応したレジスタ領域に格納する特定の命令であるか否かを判定する特定命令判定手段と、
を備え、
前記スレッド制御手段は、前記特定命令判定手段により前記スレッド切り替えタイミングの直前に実行される命令が前記特定の命令であると判定された場合には、前記特定の命令と、前記スレッド切り替えタイミングにおいて切り替えられる切り替え先のスレッドの命令とを並行して実行させると共に、前記特定の命令を実行したスレッドに対応したレジスタ領域に前記特定の記憶媒体から読み込んだデータを格納するように制御することを特徴とする、
マルチスレッド・プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドが各自に処理を行うマルチスレッド・プロセッサに関し、特に、複数のスレッドによりハードウエア・マルチスレッディング処理が行われるマルチスレッド・プロセッサに関する。
【背景技術】
【０００２】
近年、プロセッサの性能向上に伴い、複数の機能を一つのプロセッサにより実現させるための技術が研究・実用化されている。例えば、車両に搭載される車載制御装置の分野では、ある車載機器を制御する制御装置と他の車載機器を制御する制御装置（例えば変速機の制御装置とエンジンの制御装置等）を統合して、コンピュータ・ハードウエアを縮小し、コストや重量の低減を図る動きが見られる。
【０００３】
こうしたハードウエア統合の一手法として、ハードウエア・マルチスレッディング処理と称されるものが知られている。ハードウエア・マルチスレッディング処理は、命令バッファや演算結果の格納場所（レジスタ）等を異にする複数のスレッドが、命令デコーダや演算回路等、ハードウエアの一部を共有して行なう処理である。
【０００４】
特許文献１には、マルチスレッド式プロセッサにおけるコンピュータ処理方法について記載されている。この方法によれば、アクティブ・スレッドの実行がプログラム可能な時間期間を超える時に、スレッド切替えが強制される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２００１−５２１２１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、ハードウエア・マルチスレッディング処理を行うマルチスレッド・プロセッサでは、スレッドの切り替えが、例えば所定サイクル毎のように、所定の規則に従って規則的に行われるため、外部メモリからデータを読み込む等、レイテンシの長い命令を実行すると、実行中にスレッド切り替えのタイミングが到来する可能性があり、その場合に切り替えられるスレッドの処理をどう扱うかという課題が存在する。
【０００７】
上記特許文献１に記載の方法では、スレッド切り替えを強制する方法を採用している。この場合、それ以前に行っていた処理が中断されて無駄となったり、或いは実行開始時点で中止されて後回しとなったりする。この結果、処理のリアルタイム性が損なわれたり、処理効率が低下したりする場合がある。
【０００８】
一方、レイテンシの長い命令の実行が終了するまでスレッドの切り替えを行わず、それまでの間、切り替え先のスレッドを待たせるという方法も考えられる。しかしながら、この方法でも同様に、切り替え先のスレッドの処理のリアルタイム性が損なわれるという問題が生じ得る。
【０００９】
本発明はこのような課題を解決するためのものであり、処理のリアルタイム性を維持しつつ効率的な処理を行うと共に、データの不整合が生じるのを防止することが可能なマルチスレッド・プロセッサを提供することを、主たる目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するための本発明の第１の態様は、
複数のスレッドによりハードウエア・マルチスレッディング処理が行われるマルチスレッド・プロセッサであって、
前記複数のスレッドに対応した複数のレジスタ領域と、
前記複数のスレッドのうち処理を実行する実行スレッドを切り替えるスレッド制御手段と、
前記スレッド制御手段により前記実行スレッドが切り替えられるスレッド切り替えタイミングの直前に実行される命令を含み、当該命令以前に実行される所定数の命令の中に、特定の記憶媒体からデータを読み込んで前記実行スレッドに対応したレジスタ領域に格納する特定の命令が含まれるか否かを判定する特定命令判定手段と、
を備え、
前記スレッド制御手段は、前記特定命令判定手段により前記所定数の命令の中に前記特定の命令が含まれると判定された場合には、前記特定の命令と、前記スレッド切り替えタイミングにおいて切り替えられる切り替え先のスレッドの命令とを並行して実行させると共に、前記特定の命令を実行したスレッドに対応したレジスタ領域に前記特定の記憶媒体から読み込んだデータを格納するように制御することを特徴とする、
マルチスレッド・プロセッサである。
【００１１】
この本発明の第１の態様によれば、スレッド切り替えタイミングの直前に実行される命令を含み、当該命令以前に実行される所定数の命令の中に、特定の記憶媒体からデータを読み込んで実行スレッドに対応したレジスタ領域に格納する特定の命令が含まれると判定された場合には、特定の命令と切り替え先のスレッドの命令とを並行して実行させると共に、特定の命令を実行したスレッドに対応したレジスタ領域に特定の記憶媒体から読み込んだデータを格納するように制御するため、処理のリアルタイム性を維持しつつ効率的な処理を行うと共に、データの不整合が生じるのを防止することができる。
【００１２】
本発明の第１の態様において、
前記特定の命令は、該マルチスレッド・プロセッサが実行する命令のうちレイテンシが最小の命令のレイテンシに前記所定数を乗じた値よりも、レイテンシが大きい命令であるものとすると、好適である。
【００１３】
また、本発明の第１の態様において、
前記複数のスレッドにより実行される命令が格納される命令バッファを備え、
前記特定命令判定手段は、前記スレッド切り替えタイミングに先立って前記スレッド制御手段から通知される信号により前記スレッド切り替えタイミングを把握すると共に、該把握されたスレッド切り替えタイミングと前記命令バッファに格納された命令との関係に基づき、前記所定数の命令の中に前記特定の命令が含まれるか否かを判定する手段であるものとしてもよい。
【００１４】
また、本発明の第１の態様において、
前記複数のスレッドにより実行される命令が格納される命令バッファを備え、
前記特定命令判定手段は、固定周期で到来する前記スレッド切り替えタイミングを予知すると共に、該予知したスレッド切り替えタイミングと前記命令バッファに格納された命令との関係に基づき、前記所定数の命令の中に前記特定の命令が含まれるか否かを判定する手段であるものとしてもよい。
【００１５】
本発明の第２の態様は、
複数のスレッドによりハードウエア・マルチスレッディング処理が行われるマルチスレッド・プロセッサであって、
前記複数のスレッドに対応した複数のレジスタ領域と、
前記複数のスレッドのうち処理を実行する実行スレッドを切り替えるスレッド制御手段と、
前記スレッド制御手段により前記実行スレッドが切り替えられるスレッド切り替えタイミングの直前に実行される命令が、特定の記憶媒体からデータを読み込んで前記実行スレッドに対応したレジスタ領域に格納する特定の命令であるか否かを判定する特定命令判定手段と、
を備え、
前記スレッド制御手段は、前記特定命令判定手段により前記スレッド切り替えタイミングの直前に実行される命令が前記特定の命令であると判定された場合には、前記特定の命令と、前記スレッド切り替えタイミングにおいて切り替えられる切り替え先のスレッドの命令とを並行して実行させると共に、前記特定の命令を実行したスレッドに対応したレジスタ領域に前記特定の記憶媒体から読み込んだデータを格納するように制御することを特徴とする、
マルチスレッド・プロセッサである。
【００１６】
本発明の第２の態様によれば、スレッド切り替えタイミングの直前に実行される命令が、特定の記憶媒体からデータを読み込んで実行スレッドに対応したレジスタ領域に格納する特定の命令であると判定された場合には、特定の命令と切り替え先のスレッドの命令とを並行して実行させると共に、特定の命令を実行したスレッドに対応したレジスタ領域に特定の記憶媒体から読み込んだデータを格納するように制御するため、処理のリアルタイム性を維持しつつ効率的な処理を行うと共に、データの不整合が生じるのを防止することができる。
【発明の効果】
【００１７】
本発明によれば、処理のリアルタイム性を維持しつつ効率的な処理を行うと共に、データの不整合が生じるのを防止することが可能なマルチスレッド・プロセッサを提供することができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の第１実施例に係るマルチスレッド・プロセッサ１のシステム構成例である。
【図２】本実施例のマルチスレッド・プロセッサ１により実行される特徴的な処理の流れを示すフローチャートである。
【図３】本実施例のマルチスレッド・プロセッサ１のような特徴的な処理を行わない従来構成のマルチスレッド・プロセッサにより実行される処理の推移を模式的に示す図である。
【図４】本実施例のマルチスレッド・プロセッサ１により実行される処理の推移を模式的に示す図である。
【図５】本発明の第２実施例に係るマルチスレッド・プロセッサ２のシステム構成例である。
【発明を実施するための形態】
【００１９】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【００２０】
＜第１実施例＞
以下、図面を参照し、本発明の第１実施例に係るマルチスレッド・プロセッサ１について説明する。
【００２１】
［構成・基本機能］
図１は、本発明の第１実施例に係るマルチスレッド・プロセッサ１のシステム構成例である。マルチスレッド・プロセッサ１は、主要な構成として、プログラムメモリ１０と、命令バッファ２０＃０、２０＃１、２０＃２と、命令デコーダ２５と、レジスタファイル３０＃０、３０＃１、３０＃２と、実行ユニット４０と、スレッドスケジュール部５０と、パイプライン制御部６０と、スケジューリング情報保存部７０と、命令判定部８０と、を備える。
【００２２】
なお、本実施例では、二以上の任意の数であるスレッド数（後述するアクセス専用スレッドを含む）が３であるとし、「＃」の後の数字（０、１、２）がスレッドナンバーを示すものとする。また、図１に示す構成は、ハードウエア・マルチスレッディング処理を行うための一般的な構成を例示したものであり、ハードウエア・マルチスレッディング処理を行うことが可能な構成であれば、任意の構成要素を置換、削除、追加等してよい。
【００２３】
ハードウエア・マルチスレッディング処理とは、複数のスレッドが、命令デコーダや演算回路等のハードウエアの一部を共有して処理を行なうものである。スレッドとは、ハードウエアを部分的に共有して処理を行なう仮想的な処理主体をいう。本実施例では、命令バッファやレジスタファイルはスレッド毎に用意されているが、その他の構成要素はスレッド間で共用されるものとする。
【００２４】
スレッド＃０、＃１、＃２は、例えば数サイクル毎に、実行スレッドとして順に選択される。以下、実行スレッドとは、処理を実行中のスレッドをいうものとする。スレッドの選択順の決定手法には種々の手法があり、最も簡易な例では、スレッド＃０→スレッド＃１→スレッド＃２→スレッド＃０…のように、循環的に選択される。なお、スレッドの切り替えは、スレッドスケジュール部６０によって指示され、スレッドの切り替えを行うための具体的な処理は、パイプライン制御部７０によって行われる。
【００２５】
プログラムメモリ１０は、例えばフラッシュＲＯＭ（Read  Only  Memory）であり、各スレッドが実行するプログラム（命令列）を格納する。プログラムメモリ１０は、図示しない命令フェッチユニットから命令の格納場所を示すアドレスが入力されると、当該アドレスに格納された命令を命令側メモリ・バス１２に出力する。この命令フェッチユニットは、スレッド毎のプログラムカウンタを備えており、プログラムカウンタの指し示すアドレスをプログラムメモリ１０に出力する。
【００２６】
命令バッファ２０＃０、２０＃１、２０＃２は、スレッド毎に設けられている。前述の命令フェッチユニットは、プログラムメモリ１０が出力した命令を、スレッドに対応した命令バッファに格納する。すなわち、スレッド＃０が実行する命令をフェッチした場合は命令バッファ２０＃０に命令を格納し、スレッド＃１が実行する命令をフェッチした場合は命令バッファ２０＃１に命令を格納し、スレッド＃２が実行する命令をフェッチした場合は命令バッファ２０＃２に命令を格納する。命令バッファ２０＃０、２０＃１、２０＃２は、例えばＦＩＦＯ（First  In,  First  Out）に従って命令を入出力するように制御される。
【００２７】
命令デコーダ２４は、命令バッファのうち実行スレッドに対応するものから供給される命令を解読（デコード）し、図示しない命令発行部に出力する。命令デコーダ２４による解読結果は、例えば、演算の種別、ソースオペランド、結果の格納場所等である。命令発行部は、命令デコーダ２４から入力された命令に従ってレジスタファイルレジスタ３０＃０、３０＃１、３０＃２等から演算対象値等を取得し、実行ユニット４０に出力する。
【００２８】
レジスタファイル３０＃０、３０＃１、３０＃２は、それぞれ、スレッド毎に設定されたレジスタ領域である。これらのレジスタ領域は、それぞれが物理的に単独のレジスタであってもよいし、共有レジスタが領域分割されたものであっても構わない。
【００２９】
実行ユニット４０は、例えば、スレッドの要求に応じて四則演算その他の演算処理を行うためのＡＬＵ（Arithmetic  Logic  Unit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の演算回路４２、ＷＲＩＴＥ命令やＲＥＡＤ命令を実行するＬＳＵ（Load  Store  Unit）４４等を含み、更に、これらによって用いられる高速アクセス可能な汎用レジスタ４６を有する。
【００３０】
ＬＳＵ４４は、上記ＲＥＡＤ命令を実行する際には、データ側メモリ・バス４８を介して、ＲＡＭ（Random  Access  Memory）やＥＥＰＲＯＭ（Electrically  Erasable  and  Programmable  Read  Only  Memory）、外部装置等からデータを読み込んで汎用レジスタ４６に格納する。汎用レジスタ４６に格納されたデータは、パイプライン制御部６０によって、原則として実行スレッドに対応する命令バッファに格納される。
【００３１】
スレッドスケジュール部５０は、所定のアルゴリズムに基づきスレッドの切り替えを指示する。スレッドスケジュール部５０は、原則として、前述の如くスレッド＃０→スレッド＃１→スレッド＃２→スレッド＃０…のように循環的にスレッドを切り替えるように指示する。各スレッドに割り当てる処理クロック数（サイクル数）は、均等としてもよいし、スレッドの負荷に応じて強弱が付けられてもよい。
【００３２】
更に、スレッドスケジュール部５０は、後述するように命令判定部８０から情報供給された際に判定されるスレッドの優先度に基づいてスレッドの切り替え先を動的に決定する。なお、スレッドの優先度は、命令判定部８０から供給される情報とは無関係に所望のタイミングで決定されてもよい。詳しくは、後述する。
【００３３】
パイプライン制御部６０は、スレッドスケジュール部５０から実行スレッドを特定するためのコンテキスト情報等が与えられ、内部クロックの立ち上がり等に応じて、上記命令フェッチユニット、命令デコーダ２４、命令発行部、実行ユニット４０等の各動作を制御する。また、命令バッファやレジスタファイルのうち、実行スレッドに対応するものを選択するためのセレクタの制御等も行っている。
【００３４】
スケジューリング情報保存部７０は、スレッドスケジュール部５０によって使用される記憶手段であり、レジスタやキャッシュメモリ、フラッシュメモリ等が用いられる。
【００３５】
［特徴的な処理］
（ＲＥＡＤ命令に関する処理）
命令判定部８０には、スレッドスケジュール部５０により実行スレッドが切り替えられるスレッド切り替えタイミングに先だって（例えば数クロック前に）、当該スレッド切り替えタイミングが到来することを予告するスレッド切り替え予告信号が、スレッドスケジュール部５０から入力される。
【００３６】
なお、スレッド切り替えタイミングが固定周期で到来するような場合は、命令判定部８０が内部タイマー等によってスレッド切り替えタイミングを予知してもよい。
【００３７】
命令判定部８０は、スレッド切り替え予告信号が入力されると、スレッド切り替えタイミングの直前に実行される命令を含み、当該命令以前に実行される所定数の命令の中に、データ側メモリ・バス４８に接続されたＲＡＭやＥＥＰＲＯＭ等の特定の記憶媒体からデータを読み込んで、実行スレッドに対応したレジスタファイルに格納するＲＥＡＤ命令が含まれるか否かを判定する。
【００３８】
ここで、「スレッド切り替えタイミングの直前に実行される命令以前に実行される所定数の命令」とは、例えば数個の命令を意味するものであってもよいし、所定数＝１、従ってスレッド切り替えタイミングの直前に実行される命令のみを指すものであってもよい。現実的には、ＲＥＡＤ命令の完了に４クロックを要する場合、「所定数」は３程度の値とすることが望ましい。すなわち、ＲＥＡＤ命令のレイテンシに相当する命令数と同じか、それ以下とする。
【００３９】
これによって、通常、レイテンシが最小の命令は１クロックで完了することを考慮すると、ＲＥＡＤ命令が所定数の命令に含まれている場合、「次に実行されるＲＥＡＤ命令の完了までに、スレッド切り替えタイミングが到来する」という状態であるか否かを判別することができる。
【００４０】
命令判定部８０は、所定数の命令の中にＲＥＡＤ命令が含まれると判定すると、その旨を示す信号Ｓｒをスレッドスケジュール部５０に出力する。スレッドスケジュール部５０は、信号Ｓｒが入力されると、当該ＲＥＡＤ命令と、スレッド切り替えタイミングにおいて切り替えられる切り替え先のスレッドの命令とを並行して実行させると共に、ＲＥＡＤ命令を実行したスレッド（すなわち切り替え元のスレッド）に対応したレジスタファイルに特定の記憶媒体から読み込んだデータを格納するように、パイプライン制御部６０に例外的な指示を出力する。
【００４１】
前述のように、ＬＳＵ４４によってＲＥＡＤ命令が実行されると、データ側メモリ・バス４８を介して読み込まれたデータは汎用レジスタ４６に格納される。そして、汎用レジスタ４６に格納されたデータは、パイプライン制御部６０によって、原則として「実行スレッドに対応する命令バッファ」に格納される。従って、上記のような例外的な指示がなされないと、汎用レジスタ４６に格納されたデータは、スレッド切り替えタイミングにおいて切り替えられた切り替え先のスレッドに対応するレジスタファイルに格納されてしまうのである。この結果、スレッド間でデータの不整合が生じることとなる。
【００４２】
この点、本実施例に係るマルチスレッド・プロセッサ１では、汎用レジスタ４６に格納されたデータを、切り替え元のスレッドに対応したレジスタファイルに格納するようにパイプライン制御部６０に指示するため、上記のようなデータの不整合が生じるのを防止することができる。
【００４３】
また、スレッドスケジュール部５０は、スレッド切り替えタイミングの直前期に実行されるＲＥＡＤ命令と、切り替え先のスレッドの命令を並行して実行させるため、マルチスレッド・プロセッサ１は、処理のリアルタイム性を維持しつつ（切り替え先のスレッドが予定通りに実行開始されることを意味する）、効率的な処理を行うことができる。
【００４４】
係る並行処理を行う際には、以下のようなアルゴリズムで切り替え先のスレッドを選択すると、好適である。
（１）命令バッファに格納された先頭の命令がバスアクセスを要しない命令（ＲＥＡＤ命令やＷＲＩＴＥ命令、その他外部機器へのアクセス命令でないもの）であるスレッドを選択する。
（２）上記（１）に該当するスレッドが複数存在する場合、以下のような手法によりスレッドを選択する。
（２＿１）スレッド番号の小さい順に選択する。
（２＿２）事前にスケジューリング情報保存部により設定が保存されている優先度が高いスレッドを選択する。
（２＿３）上記（２＿１）、（２＿２）により、スレッド切り替え先から外されたスレッドを優先的に選択する。
【００４５】
上記「優先度」の設定は、例えば以下のように行うことができる。
（２＿２＿１）ＲＥＡＤ命令の実行中にバスアクセスが競合しないスレッド、すなわち、バスアクセス命令の実行が最も後であるスレッドを選択する。
（２＿２＿２）処理内容の重要度に基づいて決定する。例えば本実施例のマルチスレッド・プロセッサが車載制御装置に適用された場合、走行に関する処理（加速、減速、操舵等に関する処理）を行っているスレッドの優先度を高くする。
【００４６】
また、上記に拘わらず、優先度が極めて高い処理が割り込み等によって発生した場合は、当該処理が終了するまでの間、シングルスレッド処理を行ってもよい。
【００４７】
（ＷＲＩＴＥ命令に関する処理）
なお。スレッド切り替えタイミングの直前に実行される命令以前に実行される所定数の命令の中に、データ側メモリ・バス４８を介してＲＡＭやＥＥＰＲＯＭ等にデータを書き込むＷＲＩＴＥ命令が存在する場合にも、並行処理を行わせるものとしてよい。この場合、命令判定部８０は、所定数の命令の中にＷＲＩＴＥ命令が含まれると判定すると、その旨を示す信号Ｓｗをスレッドスケジュール部５０に出力する。
【００４８】
スレッドスケジュール部５０は、信号Ｓｗが入力されると、当該ＷＲＩＴＥ命令と、スレッド切り替えタイミングにおいて切り替えられる切り替え先のスレッドの命令とを並行して実行させるように、パイプライン制御部６０に例外的な指示を出力する。この場合、スレッドの切り替えタイミングにおいては、ＬＳＵ４４が既にレジスタファイルからデータを取得しているため、ＲＥＡＤ命令の場合のようなレジスタファイルの指定は不要である。切り替え先のスレッドの選択手法に関しては、ＲＥＡＤ命令に関する処理と同様の手法を援用することができる。
【００４９】
［処理フロー］
図２は、本実施例のマルチスレッド・プロセッサ１により実行される特徴的な処理の流れを示すフローチャートである。本フローは、例えば所定周期で繰り返し実行される。
【００５０】
まず、命令判定部８０は、スレッドスケジュール部５０からスレッド切り替え予告信号が入力されたか否かを判定する（Ｓ１００）。スレッド切り替え予告信号が入力されていない場合は、命令判定部８０は、何も処理を行わない。
【００５１】
命令判定部８０は、スレッド切り替え予告信号が入力されると、スレッド切り替えタイミングの直前に実行される命令を含み、当該命令以前に実行される所定数の命令の中に、ＲＥＡＤ命令が含まれるか否かを判定する（Ｓ１０２）。所定数の命令の中に、ＲＥＡＤ命令が含まれない場合は、命令判定部８０は、スレッドスケジュール部５０に対して信号を返さない。この結果、スレッドスケジュール部５０は、原則として定められた順序でスレッドの切り替えを行う（Ｓ１０４）。
【００５２】
一方、所定数の命令の中に、ＲＥＡＤ命令が含まれる場合は、命令判定部８０は、スレッドスケジュール部５０に対して信号Ｓｒを出力する（Ｓ１０６）。この結果、スレッドスケジュール部５０は、ＲＥＡＤ命令と、スレッド切り替えタイミングにおいて切り替えられる切り替え先のスレッドの命令とを並行して実行させると共に、ＲＥＡＤ命令を実行した切り替え元のスレッドに対応したレジスタファイルに特定の記憶媒体から読み込んだデータを格納するように、パイプライン制御部６０に例外的な指示を出力する（Ｓ１０８）。
【００５３】
［従来構成との比較］
図３は、本実施例のマルチスレッド・プロセッサ１のような特徴的な処理を行わない従来構成のマルチスレッド・プロセッサにより実行される処理の推移を模式的に示す図である。図示するように、従来構成のマルチスレッド・プロセッサでは、スレッド切り替えタイミングの直前期にＲＥＡＤ命令が実行される場合、当該ＲＥＡＤ命令を中断するか、他のスレッドの処理を待たせた上でＲＥＡＤ命令を継続実行していた。このため、切り替え先のスレッドの処理のリアルタイム性が損なわれたり、処理効率が低下したりするという不都合が生じていた。
【００５４】
これに対し、図４は、本実施例のマルチスレッド・プロセッサ１により実行される処理の推移を模式的に示す図である。図示するように、本実施例のマルチスレッド・プロセッサ１では、スレッド切り替えタイミングの直前期にＲＥＡＤ命令が実行される場合、当該ＲＥＡＤ命令と切り替え先のスレッドの命令を並行して実行させると共に、ＲＥＡＤ命令の結果の格納先が、当該ＲＥＡＤ命令の発行元のスレッドとなるように制御している。このため、処理のリアルタイム性を維持しつつ効率的な処理を行うと共に、データの不整合が生じるのを防止することができる。
【００５５】
［まとめ］
以上説明した本実施例のマルチスレッド・プロセッサ１によれば、処理のリアルタイム性を維持しつつ効率的な処理を行うと共に、データの不整合が生じるのを防止することができる。
【００５６】
＜第２実施例＞
以下、図面を参照し、本発明の第２実施例に係るマルチスレッド・プロセッサ２について説明する。
【００５７】
図５は、本発明の第２実施例に係るマルチスレッド・プロセッサ２のシステム構成例である。図示するように、マルチスレッド・プロセッサ２は、第１実施例に係るマルチスレッド・プロセッサ１が有する構成に加えて、パイプライン制御部６０により使用される一次保存領域６２を備える。
【００５８】
一次保存領域６２は、スケジューリング情報保存部７０と同様、レジスタやキャッシュメモリ、フラッシュメモリ等が用いられる。
【００５９】
本実施例に係るパイプライン制御部６０は、ＲＥＡＤ命令を実行した切り替え元のスレッドに対応したレジスタファイルに特定の記憶媒体から読み込んだデータを格納する際には、ＬＳＵ４４によって汎用レジスタ４６に書き込まれたデータを、一旦、一次保存領域６２に格納する。そして、実行スレッドによるレジスタファイルの使用状況を見ながら、一次保存領域６２に格納したデータを切り替え元のスレッドに対応したレジスタファイルにコピーする。
【００６０】
レジスタファイルは、スレッド毎に設けられているものの、同一のレジスタを領域分割したものである場合もあるし、複数のレジスタに対してセレクタ等が設けられている場合もある。従って、実行スレッドが自己に対応したレジスタファイルにアクセスしている間は、切り替え元のスレッドに対応したレジスタファイルにアクセスできない可能性があるのである。第２実施例に係るパイプライン制御部６０では、汎用レジスタ４６に書き込まれたデータを、一旦、一次保存領域６２に格納するため、レジスタファイルへのアクセス状況が混雑しているような場面においても、汎用レジスタ４６からのコピーを確実に行うことができる。この結果、データの不整合が生じるのをより強力に防止することができる。
【００６１】
以上説明した本実施例のマルチスレッド・プロセッサ２によれば、処理のリアルタイム性を維持しつつ効率的な処理を行うと共に、データの不整合が生じるのをより強力に防止することができる。
【００６２】
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【００６３】
例えば、スレッド切り替え先の決定主体は、スレッドスケジュール部５０であるものとしたが、スケジューリング情報保存部７０がスレッド切り替え先の決定処理を行うものとしてもよい。
【符号の説明】
【００６４】
１、２  マルチスレッド・プロセッサ
１０    プログラムメモリ
１２    命令側メモリ・バス
２０＃０、２０＃１、２０＃２  命令バッファ
２５    命令デコーダ
３０＃０、３０＃１、３０＃２  レジスタファイル
４０    実行ユニット
４２    演算回路
４４    ＬＳＵ
４６    汎用レジスタ
４８    データ側メモリ・バス
５０    スレッドスケジュール部
６０    パイプライン制御部
６２  一次保存領域
７０    スケジューリング情報保存部
８０    命令判定部
【図１】
2012168725.tif 000003
【図２】
2012168725.tif 000004
【図３】
2012168725.tif 000005
【図４】
2012168725.tif 000006
【図５】
2012168725.tif 000007