(57)【要約】【課題】スループットの低下を抑制するとともに、スレッドの応答時間を保証できなくなる事態の発生を抑制【解決手段】マルチスレッドプロセッサ１では、実行状態フラグ群３が、スレッドＴ１〜３が実行中であるか否かを示すスレッド実行情報を記憶し、優先フラグ群４が、スレッドＴ１〜３が優先であるか否かを示すスレッド優先情報を記憶する。実行方式選択部５は、スレッド実行情報とスレッド優先情報に基づき、クロックサイクル単位でスレッドＴ１〜３の中から１つのスレッドを順次選択して切り替えるラウンドロビン方式、および、優先スレッドでストールが発生するまでは優先スレッドを優先して実行し、優先スレッドでストールが発生したときに、非優先スレッドに切り替える優先方式の何れかを選択する。スレッド選択部６は、実行方式選択部５が選択した方式を用いて、クロックサイクル単位で、実行させるスレッドを選択する。【選択図】図１
2015064861.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドをパイプラインで並列に実行するマルチスレッドプロセッサ（１）であって、
複数の前記スレッド毎に前記スレッドが実行中であるか否かを示すスレッド実行情報を記憶する実行情報記憶手段（３）と、
複数の前記スレッド毎に前記スレッドが優先であるか否かを示すスレッド優先情報を記憶する優先情報記憶手段（４）と、
前記スレッド実行情報と前記スレッド優先情報に基づいて、クロックサイクル単位で複数の前記スレッドの中から１つの前記スレッドを順次選択して切り替えるラウンドロビン方式、および、優先に設定された前記スレッドである優先スレッドでストールが発生するまでは前記優先スレッドを優先して実行し、前記優先スレッドでストールが発生したときに、優先に設定されていない前記スレッドである非優先スレッドに切り替える優先方式の何れかを選択する第１方式選択手段（５）と、
前記ラウンドロビン方式および前記優先方式のうち、前記第１方式選択手段が選択した方式を用いて、前記クロックサイクル単位で、実行させる前記スレッドを選択する第１スレッド選択手段（６）とを備える
ことを特徴とするマルチスレッドプロセッサ。
【請求項２】
実行中の前記スレッドの数が１以下であること、または、前記優先スレッドの数が１であることを優先方式選択条件として、
前記第１方式選択手段は、
前記スレッド実行情報と前記スレッド優先情報に基づいて、前記優先方式選択条件が成立したと判断した場合に前記優先方式を選択し、前記優先方式選択条件が成立していないと判断した場合に前記ラウンドロビン方式を選択する
ことを特徴とする請求項１に記載のマルチスレッドプロセッサ。
【請求項３】
複数のスレッドをパイプラインで並列に実行するマルチスレッドプロセッサ（１０１）であって、
複数の前記スレッド毎に前記スレッドが実行中であるか否かを示すスレッド実行情報を記憶する実行情報記憶手段（１０３）と、
複数の前記スレッド毎に前記スレッドの優先度を示すスレッド優先度情報を記憶する優先度情報記憶手段（１０４）と、
クロックサイクル単位で複数の前記スレッドの中から１つの前記スレッドを順次選択して切り替える方式をラウンドロビン方式とし、第１優先度に設定された前記スレッドである第１優先スレッドでストールが発生するまでは前記第１優先スレッドを優先して実行し、前記第１優先スレッドでストールが発生したときに、第１優先度に設定されていない前記スレッドである非第１優先スレッドに切り替える方式を第１優先方式とし、少なくとも予め設定された第１優先実行期間と予め設定され第２優先実行期間とを切り替えることが可能であり、前記第１優先実行期間内において前記第１優先スレッドを実行し、前記第２優先実行期間内において、前記第１優先度より優先度が低い第２優先度に設定された前記スレッドである第２優先スレッドを実行する方式を第２優先方式として、前記スレッド実行情報と前記スレッド優先度情報に基づいて、前記ラウンドロビン方式、前記第１優先方式および前記第２優先方式の何れかを選択する第２方式選択手段（１０５）と、
前記ラウンドロビン方式、前記第１優先方式および前記第２優先方式のうち、前記第２方式選択手段が選択した方式を用いて、前記クロックサイクル単位で、実行させる前記スレッドを選択する第２スレッド選択手段（１０６，１０９）とを備える
ことを特徴とするマルチスレッドプロセッサ。
【請求項４】
実行中の前記第１優先スレッドの数が１以上であり、且つ、実行中の前記第２優先スレッドの数が１以上であることを第２優先方式選択条件として、
前記第２方式選択手段は、
前記スレッド実行情報と前記スレッド優先度情報に基づいて、前記第２優先方式選択条件が成立したと判断した場合に前記第２優先方式を選択する
ことを特徴とする請求項３に記載のマルチスレッドプロセッサ。
【請求項５】
実行中の前記第１優先スレッドの数が１であり、且つ、実行中の前記第２優先スレッドの数が０であることを第１優先方式選択条件として、
前記第２方式選択手段は、
前記スレッド実行情報と前記スレッド優先度情報に基づいて、前記第１優先方式選択条件が成立したと判断した場合に前記第１優先方式を選択する
ことを特徴とする請求項３または請求項４に記載のマルチスレッドプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドを並列に実行可能なマルチスレッドプロセッサに関する。
【背景技術】
【０００２】
従来、複数のスレッドをパイプラインで並列に実行可能なマルチスレッドプロセッサにおいて、クロックサイクル毎に、予め設定された切替順序に基づいて順番に複数のスレッドを切り替えることで、複数のスレッドの実行サイクルを均等に割り当てるラウンドロビン方式が知られている（例えば、特許文献１を参照）。
【０００３】
またマルチスレッドプロセッサにおいて、優先スレッドでストールが発生するまでは優先スレッドの命令を優先して実行し、優先スレッドでストールが発生したときに非優先スレッドに切り替える優先方式が知られている（例えば、特許文献２を参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２０１０−５２８３８４号公報
【特許文献２】特開２０１１−２８４４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、上記のラウンドロビン方式では、複数のスレッドに対して実行サイクルを均等に割り当てているため、実行中のスレッドが少ない場合には、マルチスレッドプロセッサのスループットが低下するおそれがある。
【０００６】
また、上記の優先方式では、優先スレッドが複数になると、全ての優先スレッドの応答時間を保証できなくなる事態の発生が懸念される。
本発明は、こうした問題に鑑みてなされたものであり、スループットの低下を抑制するとともに、スレッドの応答時間を保証できなくなる事態の発生を抑制することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するためになされた第１発明は、複数のスレッドをパイプラインで並列に実行するマルチスレッドプロセッサであって、実行情報記憶手段と優先情報記憶手段と第１方式選択手段と第１スレッド選択手段とを備える。
【０００８】
そして第１発明のマルチスレッドプロセッサでは、実行情報記憶手段が、複数のスレッド毎にスレッドが実行中であるか否かを示すスレッド実行情報を記憶する。また優先情報記憶手段が、複数のスレッド毎にスレッドが優先であるか否かを示すスレッド優先情報を記憶する。
【０００９】
そして第１方式選択手段が、スレッド実行情報とスレッド優先情報に基づいて、クロックサイクル単位で複数のスレッドの中から１つのスレッドを順次選択して切り替えるラウンドロビン方式、および、優先に設定されたスレッドである優先スレッドでストールが発生するまでは優先スレッドを優先して実行し、優先スレッドでストールが発生したときに、優先に設定されていないスレッドである非優先スレッドに切り替える優先方式の何れかを選択する。
【００１０】
さらに第１スレッド選択手段が、ラウンドロビン方式および優先方式のうち、第１方式選択手段が選択した方式を用いて、クロックサイクル単位で、実行させるスレッドを選択する。
【００１１】
このように構成された第１発明のマルチスレッドプロセッサは、上記スレッド実行情報と上記スレッド優先情報とを用いてラウンドロビン方式および優先方式の何れかを選択して、複数のスレッドをパイプラインで並列に実行することができる。
【００１２】
このため、第１発明のマルチスレッドプロセッサによれば、ラウンドロビン方式を選択中において実行中のスレッドが少なくなった場合に優先方式に切り替えることが可能となる。そして、優先方式に切り替えることにより、実行中のスレッドのうち、優先に設定されているスレッド（優先スレッド）が優先して実行される。このため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。
【００１３】
また、第１発明のマルチスレッドプロセッサによれば、優先方式を選択中に優先スレッドが複数になった場合にラウンドロビン方式に切り替えることが可能となる。そして、ラウンドロビン方式に切り替えることにより、優先に設定されているか否かに関係なく複数のスレッドが均等に実行される。このため、優先スレッドが複数になることに起因して全ての優先スレッドの応答時間を保証できなくなる事態の発生を抑制することができる。
【００１４】
また、上記目的を達成するためになされた第２発明は、複数のスレッドをパイプラインで並列に実行するマルチスレッドプロセッサであって、実行情報記憶手段と優先度情報記憶手段と第２方式選択手段と第２スレッド選択手段とを備える。
【００１５】
そして第２発明のマルチスレッドプロセッサでは、実行情報記憶手段が、複数のスレッド毎にスレッドが実行中であるか否かを示すスレッド実行情報を記憶する。また優先度情報記憶手段が、複数のスレッド毎にスレッドの優先度を示すスレッド優先度情報を記憶する。
【００１６】
そして第２方式選択手段が、スレッド実行情報とスレッド優先度情報に基づいて、ラウンドロビン方式、第１優先方式および第２優先方式の何れかを選択する。ラウンドロビン方式は、クロックサイクル単位で複数のスレッドの中から１つのスレッドを順次選択して切り替える方式である。第１優先方式は、第１優先度に設定されたスレッドである第１優先スレッドでストールが発生するまでは第１優先スレッドを優先して実行し、第１優先スレッドでストールが発生したときに、第１優先度に設定されていないスレッドである非第１優先スレッドに切り替える方式である。第２優先方式は、少なくとも予め設定された第１優先実行期間と予め設定され第２優先実行期間とを切り替えることが可能であり、第１優先実行期間内において第１優先スレッドを実行し、第２優先実行期間内において、第１優先度より優先度が低い第２優先度に設定されたスレッドである第２優先スレッドを実行する方式である。
【００１７】
さらに第２スレッド選択手段が、ラウンドロビン方式、第１優先方式および第２優先方式のうち、第２方式選択手段が選択した方式を用いて、クロックサイクル単位で、実行させるスレッドを選択する。
【００１８】
このように構成された第２発明のマルチスレッドプロセッサは、上記スレッド実行情報と上記スレッド優先度情報とを用いて、ラウンドロビン方式、第１優先方式および第２優先方式の何れかを選択して、複数のスレッドをパイプラインで並列に実行することができる。
【００１９】
このため、第２発明のマルチスレッドプロセッサによれば、ラウンドロビン方式を選択中において実行中のスレッドが少なくなった場合に第１優先方式または第２優先方式に切り替えることが可能となる。そして、第１優先方式に切り替えることにより、実行中のスレッドのうち、第１優先スレッドが優先して実行される。このため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。また、第２優先方式に切り替えることにより、第１優先スレッドまたは第２優先スレッドが優先して実行される。このため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。さらに第２優先方式では、第１優先スレッドを実行するための第１優先実行期間と第２優先スレッドを実行するための第２優先実行期間とが設けられている。このため、第１優先方式と異なり、第１優先スレッドでストールが発生しないことに起因して、第２優先スレッドを実行するための時間を確保できないという事態の発生を回避することができる。
【００２０】
また、第２発明のマルチスレッドプロセッサによれば、ラウンドロビン方式に切り替えることにより、優先度の高低に関係なく複数のスレッドが均等に実行される。このため、優先度が高いスレッドの実行に起因して優先度が低いスレッドの応答時間を保証できなくなる事態の発生を抑制することができる。
【図面の簡単な説明】
【００２１】
【図１】マルチスレッドプロセッサ１の構成を示すブロック図である。
【図２】ラウンドロビン方式と優先方式を用いたパイプラインの構成を説明する図である。
【図３】スレッド状態の遷移を示す図である。
【図４】実行方式選択部５の構成を示す回路図である。
【図５】第１実施形態の実行方式選択処理の手順を示すフローチャートである。
【図６】別の実施形態におけるスレッド状態の遷移を示す図である。
【図７】マルチスレッドプロセッサ１０１の構成を示すブロック図である。
【図８】中優先方式を用いたパイプラインの構成を説明する図である。
【図９】周期管理部１０９の構成を示すブロック図である。
【図１０】第２実施形態の実行方式選択処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００２２】
（第１実施形態）
以下に本発明の第１実施形態を図面とともに説明する。
本実施形態のマルチスレッドプロセッサ１は、３つのスレッドＴ１，Ｔ２，Ｔ３を並列に実行することが可能に構成されており、図１に示すように、プログラムカウンタ群２、実行状態フラグ群３、優先フラグ群４、実行方式選択部５、スレッド選択部６、命令フェッチ部７および命令実行部８を備える。
【００２３】
プログラムカウンタ群２は、プログラムカウンタ２１，２２，２３により構成されている。プログラムカウンタは、スレッドの命令を記憶するメモリ（不図示）上において、次に実行すべきスレッドの命令が格納されているアドレスを記憶するためのものである。そしてプログラムカウンタ２１，２２，２３はそれぞれ、スレッドＴ１，Ｔ２，Ｔ３に対応している。
【００２４】
実行状態フラグ群３は、実行状態フラグ３１，３２，３３により構成されている。実行状態フラグは、スレッドが実行中であるか否かを示すためのものである。実行状態フラグが１に設定されているときは、スレッドが実行中であることを示している。また実行状態フラグが０に設定されているときは、スレッドが停止中であることを示している。そして実行状態フラグ３１，３２，３３はそれぞれ、スレッドＴ１，Ｔ２，Ｔ３に対応している。
【００２５】
なお実行状態フラグの設定は、ソフトウエアにより行われる。そして実行状態フラグは、スレッドを生成したとき又はスレッドを再開したときに１に設定される。また実行状態フラグは、スレッドを完了したときに０に設定される。また実行状態フラグは、ハードウエアのイベント待ち又はＯＳによる優先順位切り替えによりスレッドを待機させたときに０に設定される。
【００２６】
優先フラグ群４は、優先フラグ４１，４２，４３により構成されている。優先フラグは、スレッドが優先であるか非優先であるかを示すためのものである。優先フラグは、スレッドが優先である場合には１に設定され、スレッドが非優先である場合には０に設定される。そして優先フラグ４１，４２，４３はそれぞれ、スレッドＴ１，Ｔ２，Ｔ３に対応している。
【００２７】
なお、スレッドの命令を記憶するメモリ（不図示）上には、スレッド毎に優先と非優先が予め設定された優先設定表が設けられている。スレッドが生成されると、対応する生成スレッドが優先であるか非優先であるかを示す情報が優先設定表に書き込まれる。その後、ソフトウエアによって、優先設定表が参照され、生成されたスレッドに対応する優先フラグの設定が行われる。
【００２８】
実行方式選択部５は、実行状態フラグ群３と優先フラグ群４に基づいて、スレッドの実行方式として、ラウンドロビン方式（詳細は後述）および優先方式（詳細は後述）の何れかを選択する。
【００２９】
スレッド選択部６は、実行方式選択部５で選択された実行方式を用いて、スレッドＴ１，Ｔ２，Ｔ３の中から、実行するスレッドを選択し、選択したスレッドに対応するプログラムカウンタの値を命令フェッチ部７へ出力する。
【００３０】
命令フェッチ部７は、スレッドの命令を記憶する上記メモリ（不図示）から、スレッド選択部６から入力した値が示すアドレスに記憶されている命令を読み込み、読み込んだ命令を命令実行部８へ出力する。
【００３１】
なお、マルチスレッドプロセッサ１で用いられる命令は、オペコードとオペランドとスレッド切替フラグを含んでいる。そして命令フェッチ部７は、読み込んだ命令のスレッド切替フラグが１に設定されている場合に、スレッド切替要求をスレッド選択部６へ出力する。スレッド切替フラグは、このスレッド切替フラグを含んでいる命令の実行後にスレッドがストールする場合において１になるように予め設定されている。
【００３２】
命令実行部８は、命令フェッチ部７から入力した命令を実行する。
次に、ラウンドロビン方式と優先方式を用いたパイプラインの構成を説明する。
図２（ａ），（ｂ）に示すように、スレッドは、命令フェッチ（図のＩＦを参照）、命令デコード（図のＤＥを参照）、命令実行（図のＥＸを参照）、メモリアクセス（図のＭＡを参照）およびライトバック（図のＷＢを参照）を順次実行するように設定されている。
【００３３】
まずラウンドロビン方式では、図２（ａ）に示すように、スレッド選択部６は、クロックサイクル（図中のＣＣ１，ＣＣ２，ＣＣ３，ＣＣ４，ＣＣ５を参照）が経過する毎に、スレッドＴ１、スレッドＴ２、スレッドＴ３の順にスレッドを選択して実行させる。
【００３４】
図２（ａ）に示す具体例では、まず、第１クロックサイクルＣＣ１で、スレッドＴ１が選択されることにより、スレッドＴ１の命令フェッチが実行される。次の第２クロックサイクルＣＣ２で、スレッドＴ２が選択されることにより、スレッドＴ１の命令デコードと、スレッドＴ２の命令フェッチが実行される。次の第３クロックサイクルＣＣ３で、スレッドＴ３が選択されることにより、スレッドＴ１の命令実行と、スレッドＴ２の命令デコードと、スレッドＴ３の命令フェッチが実行される。次の第４クロックサイクルＣＣ４で、スレッドＴ１が選択されることにより、スレッドＴ１のメモリアクセスと、スレッドＴ２の命令実行と、スレッドＴ３の命令デコードと、スレッドＴ１の命令フェッチが実行される。
【００３５】
次に優先方式では、図２（ｂ）に示すように、スレッド選択部６は、優先に設定されているスレッドを、非優先に設定されているスレッドよりも優先して実行させる。但しスレッド選択部６は、優先に設定されているスレッド（以下、優先スレッドともいう）における命令のスレッド切替フラグが１に設定されている場合（すなわち、優先スレッドを選択中に、命令フェッチ部７からスレッド切替要求を入力した場合）に、非優先に設定されているスレッド（以下、非優先スレッドともいう）を、予め設定された非優先選択条件に基づいて選択して実行させる。またスレッド選択部６は、非優先スレッドにおける命令のスレッド切替フラグが１に設定されている場合（すなわち、非優先スレッドを選択中に、命令フェッチ部７からスレッド切替要求を入力した場合）に、優先スレッドを選択して実行させる。
【００３６】
図２（ｂ）に示す具体例では、スレッドＴ１が優先に設定され、スレッドＴ２，Ｔ３が非優先に設定されている。また上記の非優先選択条件は、スレッドＴ２、スレッドＴ３の順で順次選択することである。
【００３７】
このため、図２（ｂ）に示す具体例では、まず、第１クロックサイクルＣＣ１で、優先に設定されているスレッドＴ１が選択されることにより、スレッドＴ１の命令フェッチが実行される。このときに、スレッドＴ１について読み込んだ命令のスレッド切替フラグが１に設定されているとすると、次の第２クロックサイクルＣＣ２で、非優先に設定されているスレッドＴ２が選択される。
【００３８】
これにより、スレッドＴ１の命令デコードと、スレッドＴ２の命令フェッチが実行される。このときに、スレッドＴ２について読み込んだ命令のスレッド切替フラグが１に設定されているとすると、次の第３クロックサイクルＣＣ３で、優先に設定されているスレッドＴ１が選択される。これにより、スレッドＴ１の命令実行と、スレッドＴ２の命令デコードと、スレッドＴ１の命令フェッチが実行される。
【００３９】
このときに、スレッドＴ１について読み込んだ命令のスレッド切替フラグが１に設定されているとすると、次の第４クロックサイクルＣＣ４で、非優先に設定されているスレッドＴ３が選択される。これにより、スレッドＴ１のメモリアクセスと、スレッドＴ２の命令実行と、スレッドＴ１の命令デコードと、スレッドＴ３の命令フェッチが実行される。
【００４０】
このときに、スレッドＴ３について読み込んだ命令のスレッド切替フラグが１に設定されているとすると、次の第５クロックサイクルＣＣ５で、優先に設定されているスレッドＴ１が選択されることにより、スレッドＴ１の命令フェッチが実行される。これにより、スレッドＴ１のライトバックと、スレッドＴ２のメモリアクセスと、スレッドＴ１の命令実行と、スレッドＴ３の命令デコードと、スレッドＴ１の命令フェッチが実行される。
【００４１】
スレッドＴ１、スレッドＴ２およびスレッドＴ３は、図３に示すように、実行状態と停止状態との間で、スレッド状態が遷移する（図３の矢印ＡＬ１，ＡＬ２を参照）。そして実行方式選択部５は、スレッドＴ１、スレッドＴ２およびスレッドＴ３のそれぞれについて、実行状態から停止状態へ遷移する場合（すなわち、スレッドを終了する場合）、および停止状態から実行状態へ遷移する場合（すなわち、スレッドを開始する場合）に、実行方式の選択を行う。
【００４２】
実行方式選択部５は、図４に示すように、実行状態フラグ判断部５１と優先フラグ判断部５２と論理積回路５３を備える。
実行状態フラグ判断部５１は、入力端子６１，６２，６３と論理積回路６４，６５，６６と論理和回路６７を備える。
【００４３】
入力端子６１，６２，６３はそれぞれ、実行状態フラグ３１，３２，３３の値を入力する。論理積回路６４は、入力端子６１から入力した値と、入力端子６３から入力した値との論理積演算を行う。論理積回路６５は、入力端子６１から入力した値と、入力端子６２から入力した値との論理積演算を行う。論理積回路６６は、入力端子６２から入力した値と、入力端子６３から入力した値との論理積演算を行う。論理和回路６７は、論理積回路６４，６５，６６のそれぞれから出力される値を入力し、入力した値の論理和演算を行う。
【００４４】
このように構成された実行状態フラグ判断部５１は、実行状態フラグ３１，３２，３３のうち少なくとも２つの値が１である場合に１を出力する。
優先フラグ判断部５２は、入力端子７１，７２，７３と論理積回路７４，７５，７６，７７と論理和回路７８を備える。入力端子７１，７２，７３はそれぞれ、優先フラグ４１，４２，４３の値を入力する。論理積回路７４は、入力端子７１から入力した値と、入力端子７３から入力した値との論理積演算を行う。論理積回路７５は、入力端子７１から入力した値と、入力端子７２から入力した値との論理積演算を行う。論理積回路７６は、入力端子７２から入力した値と、入力端子７３から入力した値との論理積演算を行う。論理積回路７７は、入力端子７１，７２，７３からの値を反転した値を入力し、入力した値の論理積演算を行う。論理和回路７８は、論理積回路７４，７５，７６，７７のそれぞれから出力される値を入力し、入力した値の論理和演算を行う。
【００４５】
このように構成された優先フラグ判断部５２は、優先フラグ４１，４２，４３のうち少なくとも２つの値が１である場合、または、優先フラグ４１，４２，４３の全ての値が０である場合に１を出力する。
【００４６】
論理積回路５３は、論理和回路６７，７８のそれぞれから出力される値を入力し、入力した値の論理積演算を行う。
そして実行方式選択部５は、論理積回路５３から出力される値が１である場合にラウンドロビン方式を選択し、値が０である場合に優先方式を選択する。
【００４７】
したがって実行方式選択部５は、図５に示す手順で、実行方式を選択する処理（以下、実行方式選択処理ともいう）を実行する。
まず、実行状態と停止状態との間でスレッド状態が遷移すると実行方式選択処理が開始され、まずＳ１０にて、実行状態であるスレッドの数が１より大きいか否かを判断する。ここで、実行状態であるスレッドの数が１より大きい場合には（Ｓ１０：ＹＥＳ）、Ｓ２０にて、優先に設定されているスレッドの数が０であるか否か、または、優先に設定されているスレッドの数が１より大きいか否かを判断する。ここで、優先に設定されているスレッドの数が０であるか１より大きい場合には（Ｓ２０：ＹＥＳ）、Ｓ３０にて、ラウンドロビン方式を選択し、実行方式選択処理を終了する。
【００４８】
一方、Ｓ２０にて、優先に設定されているスレッドの数が１である場合には（Ｓ２０：ＮＯ）、Ｓ４０にて、優先方式を選択し、実行方式選択処理を終了する。またＳ１０にて、実行状態であるスレッドの数が１以下である場合には（Ｓ１０：ＮＯ）、Ｓ４０にて、優先方式を選択し、実行方式選択処理を終了する。
【００４９】
このように構成されたマルチスレッドプロセッサ１では、実行状態フラグ群３（実行状態フラグ３１，３２，３３）が、スレッドＴ１，Ｔ２，Ｔ３毎にスレッドが実行中であるか否かを示す情報（以下、スレッド実行情報という）を記憶する。また優先フラグ群４（優先フラグ４１，４２，４３）が、スレッドＴ１，Ｔ２，Ｔ３毎にスレッドが優先であるか否かを示す情報（以下、スレッド優先情報という）を記憶する。
【００５０】
そして実行方式選択部５が、スレッド実行情報とスレッド優先情報に基づいて、クロックサイクル単位でスレッドＴ１，Ｔ２，Ｔ３の中から１つのスレッドを順次選択して切り替えるラウンドロビン方式、および、優先に設定されたスレッドである優先スレッドでストールが発生するまでは優先スレッドを優先して実行し、優先スレッドでストールが発生したときに、優先に設定されていないスレッドである非優先スレッドに切り替える優先方式の何れかを選択する。
【００５１】
さらにスレッド選択部６は、ラウンドロビン方式および優先方式のうち、実行方式選択部５が選択した実行方式を用いて、クロックサイクル単位で、実行させるスレッドを選択する。
【００５２】
このようにマルチスレッドプロセッサ１は、上記スレッド実行情報と上記スレッド優先情報とを用いてラウンドロビン方式および優先方式の何れかを選択して、複数のスレッドをパイプラインで並列に実行することができる。
【００５３】
このため、マルチスレッドプロセッサ１によれば、ラウンドロビン方式を選択中において実行中のスレッドが少なくなった場合に優先方式に切り替えることが可能となる。そして、優先方式に切り替えることにより、実行中のスレッドのうち、優先に設定されているスレッド（優先スレッド）が優先して実行される。このため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。
【００５４】
また、マルチスレッドプロセッサ１によれば、優先方式を選択中に優先スレッドが複数になった場合にラウンドロビン方式に切り替えることが可能となる。そして、ラウンドロビン方式に切り替えることにより、優先に設定されているか否かに関係なくスレッドＴ１，Ｔ２，Ｔ３が均等に実行される。このため、優先スレッドが複数になることに起因して全ての優先スレッドの応答時間を保証できなくなる事態の発生を抑制することができる。
【００５５】
具体的に実行方式選択部５は、実行中のスレッドの数が１以下であること、または、優先スレッドの数が１であることを優先方式選択条件として、スレッド実行情報とスレッド優先情報に基づいて、優先方式選択条件が成立したと判断した場合に優先方式を選択し、優先方式選択条件が成立していないと判断した場合にラウンドロビン方式を選択する。
【００５６】
このため、マルチスレッドプロセッサ１は、ラウンドロビン方式を選択中において、実行中のスレッドの数が１以下である場合に優先方式に切り替える。これにより、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。またマルチスレッドプロセッサ１は、優先方式を選択中に優先スレッドの数が２以上になった場合にラウンドロビン方式に切り替える。これにより、優先スレッドが複数になることに起因して全ての優先スレッドの応答時間を保証できなくなる事態の発生を抑制することができる。
【００５７】
以上説明した実施形態において、実行状態フラグ群３は本発明における実行情報記憶手段、優先フラグ群４は本発明における優先情報記憶手段、実行方式選択部５は本発明における第１方式選択手段、スレッド選択部６は本発明における第１スレッド選択手段である。
【００５８】
（第２実施形態）
以下に本発明の第２実施形態を図面とともに説明する。
本実施形態のマルチスレッドプロセッサ１０１は、３つのスレッドＴ１，Ｔ２，Ｔ３を並列に実行することが可能に構成されており、図７に示すように、プログラムカウンタ群１０２、実行状態フラグ群１０３、優先フラグ群１０４、実行方式選択部１０５、スレッド選択部１０６、命令フェッチ部１０７、命令実行部１０８および周期管理部１０９を備える。
【００５９】
プログラムカウンタ群１０２は、プログラムカウンタ１２１，１２２，１２３により構成されている。プログラムカウンタは、スレッドの命令を記憶するメモリ（不図示）上において、次に実行すべきスレッドの命令が格納されているアドレスを記憶するためのものである。そしてプログラムカウンタ１２１，１２２，１２３はそれぞれ、スレッドＴ１，Ｔ２，Ｔ３に対応している。
【００６０】
実行状態フラグ群１０３は、実行状態フラグ１３１，１３２，１３３により構成されている。実行状態フラグは、スレッドが実行中であるか否かを示すためのものである。実行状態フラグが１に設定されているときは、スレッドが実行中であることを示している。また実行状態フラグが０に設定されているときは、スレッドが停止中であることを示している。そして実行状態フラグ１３１，１３２，１３３はそれぞれ、スレッドＴ１，Ｔ２，Ｔ３に対応している。
【００６１】
なお実行状態フラグの設定は、ソフトウエアにより行われる。そして実行状態フラグは、スレッドを生成したとき又はスレッドを再開したときに１に設定される。また実行状態フラグは、スレッドを完了したときに０に設定される。また実行状態フラグは、ハードウエアのイベント待ち又はＯＳによる優先順位切り替えによりスレッドを待機させたときに０に設定される。
【００６２】
優先フラグ群１０４は、優先フラグ１４１，１４２，１４３により構成されている。優先フラグは、スレッドが高優先、中優先および非優先の何れであるかを示すためのものである。優先フラグは、２ビットで構成されており、スレッドが高優先である場合には１１に設定され、スレッドが中優先である場合には０１に設定され、スレッドが非優先である場合には００に設定される。そして優先フラグ１４１，１４２，１４３はそれぞれ、スレッドＴ１，Ｔ２，Ｔ３に対応している。
【００６３】
なお、スレッドの命令を記憶するメモリ（不図示）上には、スレッド毎に高優先、中優先および非優先が予め設定された優先設定表が設けられている。スレッドが生成されると、対応する生成スレッドが高優先、中優先および非優先の何れであるかを示す情報が優先設定表に書き込まれる。その後、ソフトウエアによって、優先設定表が参照され、生成されたスレッドに対応する優先フラグの設定が行われる。
【００６４】
実行方式選択部１０５は、実行状態フラグ群１０３と優先フラグ群１０４に基づいて、スレッドの実行方式として、ラウンドロビン方式、高優先方式（詳細は後述）および中優先方式（詳細は後述）の何れかを選択する。
【００６５】
スレッド選択部１０６は、実行方式選択部１０５で選択された実行方式を用いて、スレッドＴ１，Ｔ２，Ｔ３の中から、実行するスレッドを選択し、選択したスレッドに対応するプログラムカウンタの値を命令フェッチ部１０７へ出力する。
【００６６】
命令フェッチ部１０７は、スレッドの命令を記憶する上記メモリ（不図示）から、スレッド選択部１０６から入力した値が示すアドレスに記憶されている命令を読み込み、読み込んだ命令を命令実行部１０８へ出力する。
【００６７】
なお、マルチスレッドプロセッサ１０１で用いられる命令は、オペコードとオペランドとスレッド切替フラグを含んでいる。そして命令フェッチ部１０７は、読み込んだ命令のスレッド切替フラグが１に設定されている場合に、スレッド切替要求をスレッド選択部１０６へ出力する。スレッド切替フラグは、このスレッド切替フラグを含んでいる命令の実行後にスレッドがストールする場合において１になるように予め設定されている。
【００６８】
命令実行部１０８は、命令フェッチ部１０７から入力した命令を実行する。
周期管理部１０９は、中優先方式が選択されている場合に、高優先に設定されているスレッド（以下、高優先スレッドともいう）と、中優先に設定されているスレッド（以下、中優先スレッドともいう）の実行周期を管理する。
【００６９】
次に、ラウンドロビン方式、高優先方式および中優先方式を用いたパイプラインの構成を説明する。
まずラウンドロビン方式では、第１実施形態と同様に、スレッド選択部１０６は、クロックサイクルが経過する毎に、スレッドＴ１、スレッドＴ２、スレッドＴ３の順にスレッドを選択して実行させる。
【００７０】
また高優先方式では、スレッド選択部１０６は、高優先スレッドを、中優先スレッドよりも優先して実行させる。但しスレッド選択部１０６は、高優先スレッドにおける命令のスレッド切替フラグが１に設定されている場合（すなわち、高優先スレッドを選択中に、命令フェッチ部１０７からスレッド切替要求を入力した場合）に、中優先スレッドを、予め設定された中優先選択条件に基づいて選択して実行させる。またスレッド選択部１０６は、中優先スレッドにおける命令のスレッド切替フラグが１に設定されている場合（すなわち、中優先スレッドを選択中に、命令フェッチ部１０７からスレッド切替要求を入力した場合）に、高優先スレッドを選択して実行させる。
【００７１】
すなわち高優先方式は、第１実施形態の優先方式において優先スレッドを高優先スレッドに置き換えるとともに非優先スレッドを中優先スレッドに置き換えたものに相当する。
また中優先方式では、スレッド選択部１０６は、図８に示すように、予め設定された高優先連続実行回数分の高優先スレッドの選択と、予め設定された中優先連続実行回数分の中優先スレッドの選択とを交互に実行する。
【００７２】
具体的には、まず、上記の高優先連続実行回数分（図８では２回）のクロックサイクルが経過するまでの期間（以下、高優先実行期間という）は、クロックサイクルが経過する毎に高優先スレッドを選択する。但し、高優先スレッドが複数の場合には、高優先実行期間内においてクロックサイクルが経過する毎に異なる高優先スレッドを順次選択して実行させる。また、高優先スレッドが１つであり且つ非優先スレッドがある場合において高優先スレッドでストールが発生したときには、非優先スレッドを選択して実行させる。
【００７３】
そして、高優先実行期間が終了すると、次に、上記の中優先連続実行回数分（図８では１回）のクロックサイクルが経過するまでの期間（以下、中優先実行期間という）は、クロックサイクルが経過する毎に同じスレッドの中優先スレッドを選択する。すなわち、中優先スレッドが複数の場合には、中優先実行期間が到来する毎に、選択する中優先スレッドを順次切り替える。また、中優先スレッドでストールが発生したときにおいて非優先スレッドがある場合には、非優先スレッドを選択して実行させる。
【００７４】
図８に示す具体例では、まず、第１クロックサイクルＣＣ１で、高優先に設定されているスレッドＴ１が選択されることにより、スレッドＴ１の命令フェッチが実行される。
次の第２クロックサイクルＣＣ２で、高優先に設定されているスレッドＴ１が選択される。これにより、スレッドＴ１の命令デコードと、スレッドＴ１の命令フェッチが実行される。
【００７５】
そして、第２クロックサイクルＣＣ２で高優先実行期間が終了し、中優先実行期間が開始することで、次の第３クロックサイクルＣＣ３で、中優先に設定されているスレッドＴ２が選択される。これにより、スレッドＴ１の命令実行と、スレッドＴ１の命令デコードと、スレッドＴ２の命令フェッチが実行される。
【００７６】
そして、第３クロックサイクルＣＣ３で中優先実行期間が終了し、高優先実行期間が開始することで、次の第４クロックサイクルＣＣ４で、高優先に設定されているスレッドＴ１が選択される。これにより、スレッドＴ１のメモリアクセスと、スレッドＴ１の命令実行と、スレッドＴ２の命令デコードと、スレッドＴ１の命令フェッチが実行される。
【００７７】
さらに、次の第５クロックサイクルＣＣ５で、高優先に設定されているスレッドＴ１が選択される。これにより、スレッドＴ１のライトバックと、スレッドＴ１のメモリアクセスと、スレッドＴ２の命令実行と、スレッドＴ１の命令デコードと、スレッドＴ１の命令フェッチが実行される。
【００７８】
そして、第５クロックサイクルＣＣ５で高優先実行期間が終了し、中優先実行期間が開始することで、次の第６クロックサイクルＣＣ６で、中優先に設定されているスレッドＴ３が選択される。これにより、スレッドＴ１のライトバックと、スレッドＴ２のメモリアクセスと、スレッドＴ１の命令実行と、スレッドＴ１の命令デコードと、スレッドＴ３の命令フェッチが実行される。
【００７９】
また図９に示すように、周期管理部１０９は、実行周期レジスタ１５１，１５２とカウンタ１５３と比較回路１５４，１５５を備える。
実行周期レジスタ１５１は、上記の高優先連続実行回数を示す値が設定されるレジスタである。実行周期レジスタ１５２は、上記の中優先連続実行回数を示す値が設定されるレジスタである。なお実行周期レジスタ１５１，１５２の設定は、ソフトウエアにより行われる。
【００８０】
カウンタ１５３は、クロックサイクルが経過する毎にその値をインクリメント（１加算）する。またカウンタ１５３は、スレッド選択部１０６からリセット信号（後述）を入力すると、カウンタの値を０に設定する。
【００８１】
比較回路１５４は、実行周期レジスタ１５１の値とカウンタ１５３の値とを比較して、カウンタ１５３の値が実行周期レジスタ１５１の値に達すると、一致信号を出力する。比較回路１５５は、実行周期レジスタ１５２の値とカウンタ１５３の値とを比較して、カウンタ１５３の値が実行周期レジスタ１５２の値に達すると、一致信号を出力する。
【００８２】
スレッド選択部１０６は、高優先実行期間内に比較回路１５４から一致信号を入力すると、その直近のクロックサイクルの開始時に、中優先実行期間を開始させるとともにリセット信号を出力する。またスレッド選択部１０６は、中優先実行期間内に比較回路１５５から一致信号を入力すると、その直近のクロックサイクルの開始時に、高優先実行期間を開始させるとともにリセット信号を出力する。
【００８３】
また実行方式選択部１０５は、図１０に示す手順で、実行方式選択処理を実行する。
まず、実行状態と停止状態との間でスレッド状態が遷移すると実行方式選択処理が開始され、Ｓ１１０にて、実行状態であるスレッドの数が１より大きいか否かを判断する。ここで、実行状態であるスレッドの数が１より大きい場合には（Ｓ１１０：ＹＥＳ）、Ｓ１２０にて、高優先に設定されているスレッドの数（以下、高優先数という）が０であるか否かを判断する。ここで、高優先数が０である場合には（Ｓ１２０：ＹＥＳ）、Ｓ１５０に移行する。
【００８４】
一方、高優先数が０でない場合には（Ｓ１２０：ＮＯ）、Ｓ１３０にて、中優先に設定されているスレッドの数（以下、中優先数という）が０であるか否かを判断する。ここで、中優先数が０でない場合には（Ｓ１３０：ＮＯ）、Ｓ１６０に移行する。一方、中優先数が０である場合には（Ｓ１３０：ＹＥＳ）、Ｓ１４０にて、高優先数が１より大きいか否かを判断する。
【００８５】
ここで、高優先数が１より大きい場合には（Ｓ１４０：ＹＥＳ）、Ｓ１５０に移行する。一方、高優先数が１以下である場合には（Ｓ１４０：ＮＯ）、Ｓ１７０に移行する。
またＳ１１０にて、実行状態であるスレッドの数が１以下である場合には（Ｓ１１０：ＮＯ）、Ｓ１７０に移行する。
【００８６】
そしてＳ１５０に移行した場合には、ラウンドロビン方式を選択し、実行方式選択処理を終了する。またＳ１６０に移行した場合には、中優先方式を選択し、実行方式選択処理を終了する。またＳ１７０に移行した場合には、高優先方式を選択し、実行方式選択処理を終了する。
【００８７】
このように構成されたマルチスレッドプロセッサ１０１では、実行状態フラグ群１０３（実行状態フラグ１３１，１３２，１３３）が、スレッドＴ１，Ｔ２，Ｔ３毎にスレッドが実行中であるか否かを示すスレッド実行情報を記憶する。また優先フラグ群１０４（優先フラグ１４１，１４２，１４３）が、スレッドＴ１，Ｔ２，Ｔ３毎にスレッドの優先度を示す情報（以下、スレッド優先度情報という）を記憶する。
【００８８】
そして実行方式選択部１０５が、スレッド実行情報とスレッド優先度情報に基づいて、ラウンドロビン方式、高優先方式および中優先方式の何れかを選択する。ラウンドロビン方式は、クロックサイクル単位でスレッドＴ１，Ｔ２，Ｔ３の中から１つのスレッドを順次選択して切り替える方式である。高優先方式は、高優先スレッドでストールが発生するまでは高優先スレッドを優先して実行し、高優先スレッドでストールが発生したときに、中優先スレッドに切り替える方式である。中優先方式は、高優先実行期間と中優先実行期間とを切り替えることが可能であり、高優先実行期間内において高優先スレッドを実行し、中優先実行期間内において、高優先より優先度が低い中優先に設定された中優先スレッドを実行する方式である。
【００８９】
さらに、スレッド選択部１０６および周期管理部１０９は、ラウンドロビン方式、高優先方式および中優先方式のうち、実行方式選択部１０５が選択した実行方式を用いて、クロックサイクル単位で、実行させるスレッドを選択する。
【００９０】
このようにマルチスレッドプロセッサ１０１は、上記スレッド実行情報と上記スレッド優先度情報とを用いて、ラウンドロビン方式、高優先方式および中優先方式の何れかを選択して、複数のスレッドをパイプラインで並列に実行することができる。
【００９１】
このため、マルチスレッドプロセッサ１０１によれば、ラウンドロビン方式を選択中において実行中のスレッドが少なくなった場合に高優先方式または中優先方式に切り替えることが可能となる。そして、高優先方式に切り替えることにより、実行中のスレッドのうち、高優先スレッドが優先して実行される。このため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。また、中優先方式に切り替えることにより、高優先スレッドまたは中優先スレッドが優先して実行される。このため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。さらに中優先方式では、高優先スレッドを実行するための高優先実行期間と中優先スレッドを実行するための中優先実行期間とが設けられている。このため、高優先方式と異なり、高優先スレッドでストールが発生しないことに起因して、中優先スレッドを実行するための時間を確保できないという事態の発生を回避することができる。
【００９２】
また、マルチスレッドプロセッサ１０１によれば、ラウンドロビン方式に切り替えることにより、優先度の高低に関係なくスレッドＴ１，Ｔ２，Ｔ３が均等に実行される。このため、優先度が高いスレッドの実行に起因して優先度が低いスレッドの応答時間を保証できなくなる事態の発生を抑制することができる。
【００９３】
具体的に実行方式選択部１０５は、実行中の高優先スレッドの数が１以上であり（Ｓ１２０：ＮＯ）、且つ、実行中の中優先スレッドの数が１以上である（Ｓ１３０：ＹＥＳ）ことを中優先方式選択条件として、スレッド実行情報とスレッド優先度情報に基づいて、中優先方式選択条件が成立したと判断した場合に、中優先方式を選択する。これにより、実行中の高優先スレッドと実行中の中優先スレッドとの両方が存在する場合において、高優先スレッドでストールが発生しないことに起因して、中優先スレッドを実行するための時間を確保できないという事態の発生を回避することができる。
【００９４】
また実行方式選択部１０５は、実行中の高優先スレッドの数が１であり（Ｓ１２０：ＮＯ，Ｓ１４０：ＮＯ）、且つ、実行中の中優先スレッドの数が０である（Ｓ１４０：ＹＥＳ）ことを高優先方式選択条件として、スレッド実行情報とスレッド優先度情報に基づいて、高優先方式選択条件が成立したと判断した場合に、高優先方式を選択する。これにより、実行中の高優先スレッドが優先して実行されるため、実行中のスレッドが少なくなることに起因したスループットの低下を抑制することができる。なお、この場合には、実行中の中優先スレッドの数が０であるため、中優先スレッドを実行するための時間を確保できないという問題は発生しない。
【００９５】
以上説明した実施形態において、実行状態フラグ群１０３は本発明における実行情報記憶手段、優先フラグ群１０４は本発明における優先度情報記憶手段、実行方式選択部１０５は本発明における第２方式選択手段、スレッド選択部１０６および周期管理部１０９は本発明における第２スレッド選択手段である。
【００９６】
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採ることができる。
例えば上記実施形態では、マルチスレッドプロセッサ１，１０１が３つのスレッドを並列に実行するものを示した。しかし、スレッドの数はこれに限定されるものではなく、マルチスレッドプロセッサ１，１０１が２つのスレッドまたは４つ以上のスレッドを並列に実行するようにしてもよい。
【００９７】
また上記実施形態では、実行状態と停止状態との間でスレッド状態が遷移するときに実行方式選択部５が実行方式を選択するものを示した。しかし、図６に示すように、スレッド状態として実行状態、停止状態および待機状態が設定されている場合には、実行状態と停止状態との間でスレッド状態が遷移するときだけではなく、実行状態と待機状態との間でスレッド状態が遷移するときにも、実行方式選択部５が実行方式を選択するようにしてもよい。
【００９８】
また上記第２実施形態では、高優先方式において、高優先スレッドでストールが発生したときに中優先スレッドに切り替えるものを示したが、中優先スレッドの代わりに非優先スレッドに切り替えるようにしてもよい。
【符号の説明】
【００９９】
１，１０１…マルチスレッドプロセッサ、３，１０３…実行状態フラグ群、４，１０４…優先フラグ群、５，１０５…実行方式選択部、６，１０６…スレッド選択部、１０９…周期管理部
【図１】
2015064861.tif 000003
【図２】
2015064861.tif 000004
【図３】
2015064861.tif 000005
【図４】
2015064861.tif 000006
【図５】
2015064861.tif 000007
【図６】
2015064861.tif 000008
【図７】
2015064861.tif 000009
【図８】
2015064861.tif 000010
【図９】
2015064861.tif 000011
【図１０】
2015064861.tif 000012