(57)【要約】【課題】パイプライン処理の効率を改善することで、処理効率を一層向上させることができるマルチコアプロセッサを提供する。【解決手段】複数のタスクを、複数の前段コア２が複数のパイプラインを用いて並列処理するマルチコアプロセッサ１において、パイプラインを、前段コア２により命令デコードステージまでを実行させ、命令実行ステージ以降は後段コア７により実行させる。そして、動的負荷分散ブロック５は、命令デコードステージにおけるデコード結果を参照して、後段コア７における処理の実行が必要となる前段コア２のデコード結果を、後段コア７に割り当てるように制御する。【選択図】図１
2014211743.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクを、複数のプロセッサコアが複数のパイプラインを用いて並列処理するマルチコアプロセッサ（１，２１）において、
前記パイプラインを、命令デコードステージまでの前段部（２，２２）と、命令実行ステージ以降の後段部（７）とに分け、
前記命令デコードステージにおけるデコード結果を参照して、前記後段部における処理の実行が必要となる前段部のデコード結果を、前記後段部に割り当てるように制御する負荷分散処理部（５，２４）を備えることを特徴とするマルチコアプロセッサ。
【請求項２】
前記負荷分散処理部は、前記前段部においてデコードされた複数の命令が並列実行可能であれば、それら複数の命令を複数の後段部パイプラインに割り当てて並列実行させることを特徴とする請求項１記載のマルチコアプロセッサ。
【請求項３】
前記複数の前段部パイプラインに対応して設けられ、各前段部パイプラインに順次タスクを実行させるための待ち行列（３）と、
複数のタスクに関する静的処理時間情報を保持すると共に、前記複数のタスクに関する動的実行状況が反映されるタスク情報テーブル（１１）とを備え、
前記負荷分散処理部は、前記タスク情報テーブルを参照することで、前記各待ち行列に対する新規タスクの振り分け処理を行うことを特徴とする請求項１又は２記載のマルチコアプロセッサ。
【請求項４】
前記負荷分散処理部は、前記各待ち行列について、現在待ち状態にある各タスクの占有率を、当該タスクに関する残り実行時間と処理限界時間との比で計算すると、前記各タスクの占有率を加算した合計占有率を求め、前記合計占有率が最低を示す待ち行列に、次の新規タスクを割り当てることを特徴とする請求項３記載のマルチコアプロセッサ。
【請求項５】
前記負荷分散処理部は、前記合計占有率が高い待ち行列に対応する前段部を優先して、デコード結果を後段部に割り当てるように制御することを特徴とする請求項４記載のマルチコアプロセッサ。
【請求項６】
前記負荷分散処理部（２４）は、前記合計占有率が高い待ち行列に対応する前段部（２２）のデコード結果を、複数の後段部に割り当てるように制御することを特徴とする請求項４又は５記載のマルチコアプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコア構成を採用するマイクロプロセッサであるマルチコアプロセッサに関する。
【背景技術】
【０００２】
マルチコア構成を採用するマイクロプロセッサによって複数のタスクを並列処理する際に処理効率を向上させるには、各タスクについて設定される処理時間の制約（所謂デッドライン）を満たすように、処理順序をスケジューリングする必要がある。このスケジューリングを如何に最適化するかによって、処理効率が決まる。
【０００３】
例えば特許文献１には、複数グループに属するタスクをマルチコアプロセッサで処理する際に、ハッシュ値を用いることで効率的なタスク割り当てを実現する方法が開示されている。また、特許文献２には、予めスレッドの実行順序を定義しておき、排他実行可能な粒度に分類することで効率的な並列処理を実現するコンピュータが開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００５−５０７２１２号公報
【特許文献２】特開２００５−２８４７４９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
特許文献１，２の技術は、何れも各プロセッサコアへのタスク（スレッド）割り当ての効率化を実現するものである。各プロセッサコアに割り当てられたタスクは、各コアに対応した処理ステージにおいて逐次処理される（パイプライン処理）。しかしながら、全ての命令が各処理ステージの全てにつき実行されるわけではなく、命令の種類よっては、一部の処理ステージが実行されないものがある。例えば、レジスタ間演算命令では、メモリアクセス（ＭＡ）ステージは実行されない。したがって、この点を考慮すると、パイプライン処理の実行段階についても、処理効率を向上させる余地があると考えられる。
【０００６】
本発明は上記事情に鑑みてなされたものであり、その目的は、パイプライン処理の効率を改善することで、処理効率を一層向上させることができるマルチコアプロセッサを提供することにある。
【課題を解決するための手段】
【０００７】
請求項１記載のマルチコアプロセッサによれば、複数のタスクを、複数のプロセッサコアが複数のパイプラインを用いて並列処理する構成において、パイプラインを、命令デコードステージまでの前段部と、命令実行ステージ以降の後段部とに分ける。そして、負荷分散処理部は、命令デコードステージにおけるデコード結果を参照して、後段部における処理の実行が必要となる前段部のデコード結果を後段部に割り当てるように制御する。
すなわち、パイプラインの前段部においてデコードされる命令によっては、後段部の処理を実行する必要が無いものがある。したがって、そのような命令を含む場合は、対応する後段部に、異なる命令を実行させることができるようになり、より効率的に処理を行うことが可能になる。
【０００８】
請求項２記載のマルチコアプロセッサによれば、負荷分散処理部は、前段部においてデコードされた複数の命令が並列実行可能であれば、それら複数の命令を複数の後段部パイプラインに割り当てて並列実行させる。したがって、複数の命令の処理をより速く実行できるようになり、処理効率が向上する。
【図面の簡単な説明】
【０００９】
【図１】第１実施形態であり、マルチコアプロセッサの構成を示す機能ブロック図
【図２】動的負荷分散ブロックの処理をより具体的に説明する図
【図３】動的負荷分散ブロックの機能ブロック図
【図４】タスク情報テーブルの一例を示す図
【図５】２つの前段コアによりデコードされた命令を実行する後段部のパイプラインを、１つに統合した例を示す図
【図６】第２実施形態を示す図１相当図
【図７】図３相当図
【発明を実施するための形態】
【００１０】
（第１実施形態）
図１に示すように、本実施形態のマルチコアプロセッサ１は、並列処理を実行するためのパイプラインの前段部分を構成する４つの前段コア２（１）〜２（４）を備えている。これらの前段コア２（１）〜２（４）については、対応するタスクキュー（待ち行列）３（１）〜３（４）が設けられている。タスクキュー３（１）〜３（４）には、タスク振り分けブロック４により振り分けられたタスクが順次配置され、各前段コア２（１）〜２（４）により処理されるのを「待ち」の状態となる。各前段コア２（１）〜２（４）は、パイプラインの前段部分として命令フェッチ（ＩＦ）ステージと、命令デコード（ＩＤ）ステージとを実行する。
【００１１】
タスク振り分けブロック４（新規タスク振り分けキュー）における振り分け制御は、動的負荷分散ブロック５（負荷分散処理部）によって行われる。動的負荷分散ブロック５は、ＩＤステージにおけるデコード結果に応じて各タスクキュー３（１）〜３（４）に新規のタスクを振り分ける（詳細については後述）。すなわちパイプラインは、（前段コア数）＞（後段コア数）となる関係で構成されている。
【００１２】
前段コア２（１）〜２（４）のＩＤステージにてデコードされた命令は、後段処理振り分け部６を介して、パイプラインの後段部分を構成する後段コア７（１）〜７（３）に振り分けられて実行される。また、ＩＤステージと後段処理振り分け部６との間には、各前段コア２によってアクセスされるレジスタファイル８が配置されている。
【００１３】
動的負荷分散ブロック５は、後段処理振り分け部６の振り分け制御も行う。後段コア７は、命令実行（ＥＸ）ステージ，メモリアクセス（ＭＡ）ステージ，ライトバック（ＷＢ）ステージとを実行する。ＭＡステージとＷＢステージとの間には、メモリ９が配置されている。また、ＷＢステージでは、レジスタファイル８に対する書き込みが行われ、ＥＸステージにおいても同様に書き込みが行われることがあるが、これらのパスについては図示を省略している。
【００１４】
図２に示すように、動的負荷分散ブロック５は、各タスクキュー３に待ち状態で存在する複数のタスクについての占有率を合計する。ここで「占有率」とは、キュー３内にある各タスクについて求められるもので、タスクの残り実行時間とデッドライン時間（処理限界時間）との比である。デッドライン時間とは、アプリケーションに応じて決まるもので、アプリケーションレベルの処理を実行するため支障を来たさない範囲で、タスクの実行完了が要求される時間である。そして、その時点の合計占有率が最低であるタスクキュー３に新規タスクを振り分けるように、デマルチプレクサのシンボルで示すタスク振り分けブロック４を制御する。
【００１５】
また動的負荷分散ブロック５は、合計占有率が最高を示すタスクキュー３に対応する前段コア２の処理を優先して、後段コア（ＥＸ〜ＷＢステージ）に割り当てるように、後段処理振り分け部６を制御する。尚、図２では、前段コア数をＮ，後段コア数をＭ（＜Ｎ）として一般化して示している。
【００１６】
図３に示すように、動的負荷分散ブロック５は、図４に示すタスク情報テーブル１１に基づいて各タスクキュー３の合計占有率を計算すると、各合計占有率の高低に順位を付してソートする。図３に示す例では、キュー番号４が９０％で１位，キュー番号３が８７％で２位，キュー番号２が３０％で３位，…となっている。そして、順位が最低のＮとなるキュー番号ｘのタスクキュー３に次の新規タスクを割り当てる。また、順位が最上位から第Ｍ位までを、後段コアに割り当てる。
【００１７】
図４に示すように、タスク情報テーブル１１は、各タスクの状態を、実行が停止された状態にある「停止」，タスクキュー３に既に振り分けた「割当済み」，実行が中断された状態にある「中断」に判別する（動的実行状況）。また、各タスクついての前述したデッドライン時間及び残り実行時間と、最悪実行時間が保持されている（静的処理時間情報）。ここで「最悪実行時間」とは、そのタスクの処理だけを実行した場合に、全ての処理を完了させるために必要な時間である。加えて、タスクが割当済みであれば、割当先のキュー番号が保持されている。尚「Don't care」は、タスクキュー３への割り当てが不要な状態である（動的実行状況）。
【００１８】
また、動的負荷分散ブロック５が行う後段コア７に対する振り分け制御は、図２に示す制御に限らず、ＩＤステージにおけるデコード結果によっては、後段コア７を使用しない命令があるので、その状態も考慮して振り分けを行う。更に、複数の前段コア７により実行される命令には並列して実行可能なものがあるので、それも考慮して振り分ける。以下、その作用について説明する。
【００１９】
図５（ａ），（ｂ）は、２つの独立したコアが、それぞれ完全に独立したパイプラインにより各命令を実行した場合であり、図５（ｃ）は、それらを本実施形態のマルチコアプロセッサ１により実行した場合を示す。例えば、図５（ａ）に示すコア（１）では、第３，第４サイクルにおいてそれぞれ加算命令ＡＤＤが実行されるが、この実行についてＭＡステージ以降は不要である。
【００２０】
また、第３サイクルで分岐命令Ｂをフェッチすると、その分岐が実行された後に次のロード命令ＬＤＲがフェッチされる。そして、
ＬＤＲ    Ｒ３［Ｒ０］
により、レジスタファイル８内のレジスタＲ３に、レジスタＲ０の内容が示すアドレスよりデータがロードされると、次の命令
ＬＤＲＢ  Ｒ４［Ｒ３］
で、レジスタＲ３の内容が示すアドレスからレジスタＲ４にデータがロードされる。したがって、ロード命令ＬＤＲＢは第７サイクルでデコードされているが、その実行は、ロード命令ＬＤＲについてＷＢステージ（レジスタ転送）が実行される第９サイクルからになっている。結果として、第８サイクルから実行が開始されるパイプラインには空きが発生している。
【００２１】
また、図５（ｂ）に示すコア（２）では、第５サイクルから命令ＬＤＲ，第６サイクルから命令ＬＤＲＢ，第８サイクルから命令ＬＤＲＨの実行がそれぞれ開始されている。すなわち、
ＬＤＲＢ  Ｒ４［Ｒ０，＃４］
の実行を開始するには、その前の命令
ＬＤＲ    Ｒ３［Ｒ０］
の実行完了を待つ必要が無い。
【００２２】
そして、図５（ａ）に示すコア（１）では、第７サイクルから命令ＬＤＲ，第９サイクルから命令ＬＤＲＢ，第１０サイクルから命令ＬＤＲＨの実行がそれぞれ開始されている。したがって、これら２つのコア（１），（２）による後段部の処理は、１つのパイプラインに投入しても処理が可能である。その結果、図５（ｃ）に示すように、前段の２つのコア（１），（２）による処理が、後段では１つのパイプライン（後段コア）に統合して処理するように動的負荷分散ブロック５が振り分けを行う。
【００２３】
以上のように本実施形態によれば、複数のタスクを、複数の前段コア２が複数のパイプラインを用いて並列処理するマルチコアプロセッサ１において、パイプラインを、前段コア２により命令デコードステージまでを実行させ、命令実行ステージ以降は後段コア７により実行させる。そして、動的負荷分散ブロック５は、命令デコードステージにおけるデコード結果を参照して、後段コア７における処理の実行が必要となる前段コア２のデコード結果を、後段コア７に割り当てるように制御する。これにより、パイプラインの前段部でデコードされる命令が後段部の処理を実行する必要が無いものであれば、対応する後段コア７に、異なる命令を実行させることができるようになり、より効率的に処理を行うことが可能になる。
【００２４】
そして、動的負荷分散ブロック５は、前段コア２においてデコードされた複数の命令が並列実行可能であれば、それら複数の命令を、複数の後段コア７に割り当てて並列実行させる。したがって、複数の命令の処理をより速く実行できるようになり、処理効率が向上する。
【００２５】
また、複数の前段コア２に対応して設けられ、各前段コア２に順次タスクを実行させるためのタスクキュー３と、複数のタスクに関する静的処理時間情報を保持すると共に、前記複数のタスクに関する動的実行状況が反映されるタスク情報テーブル１１とを備え、動的負荷分散ブロック５は、タスク情報テーブル１１を参照することで各タスクキュー３に対する新規タスクの振り分け処理を行う。
すなわち、静的処理時間情報は、各タスクの実行を完了させるために必要な時間の情報であり、動的実行状況は、それぞれの時点における各タスクの実行状況を示すものである。したがって、動的負荷分散ブロック５は、それらの情報に基づいて新規タスクの振り分けを効率的に行うことができる。
【００２６】
具体的には、動的負荷分散ブロック５は、各タスクキュー３について、現在待ち状態にある各タスクの占有率を、当該タスクに関する残り実行時間と処理限界時間との比で計算すると各タスクの占有率を加算した合計占有率を求め、合計占有率が最低を示すタスクキュー３に次の新規タスクを割り当てる。したがって、各タスクキュー３の合計占有率が平準化されるように割り当てを行うことができる。
【００２７】
また、動的負荷分散ブロック５は、合計占有率が高いタスクキュー３に対応する前段コア２を優先して、そのデコード結果を後段コア７に割り当てるように制御する。したがって、合計占有率が高いタスクキュー３の処理を促進することで、各タスクキュー３の合計占有率を平準化させることができる。
【００２８】
（第２実施形態）
以下、第１実施形態と同一部分には同一符号を付して説明を省略し、異なる部分について説明する。図６に示すように、第２実施形態のマルチコアプロセッサ２１は、前段コア２２の数（４）よりも、後段コア７の数（５）を多くした構成例を示している。尚、レジスタファイル８及びメモリ９については、図示を省略している。
【００２９】
第２実施形態の前段コア２２は、それぞれに対応するタスクキュー３内のタスクについて、命令を２並列でフェッチ，デコードすることが可能となっている。したがって、ＩＤステージより後段処理振り分け部２３に入力されているinst1,inst2は、並列にフェッチ，デコードされた２つの命令を示している。
【００３０】
次に、第２実施形態の作用について説明する。図７に示すように、動的負荷分散処理ブロック２４は、タスクキュー３の合計占有率が例えば閾値８０％を超えたもの（この例では、キュー番号「４」）については、２つの後段コア７を割り当てるようにする。この様に構成すれば、合計占有率が高いタスクキュー３の処理を促進して占有率を低下させることができるので、各タスクキュー３の合計占有率を平準化させて処理効率を向上させることができる。
【００３１】
本発明は上記した、又は図面に記載した実施形態にのみ限定されるものではなく、以下のような変形又は拡張が可能である。
前段コア，後段コアの数は、個別の設計に応じて適宜設定すれば良い。
第２実施形態における閾値についても、適宜変更して良い。
第２実施形態において、前段コアにより命令を３並列以上でフェッチ，デコードして、１つのタスクキューの処理を３つ以上の後段コアで並列処理するように構成しても良い。
【符号の説明】
【００３２】
図面中、１はマルチコアプロセッサ、２は前段コア（前段部）、３はタスクキュー（待ち行列）、４はタスク振り分けブロック、５は動的負荷分散ブロック（負荷分散処理部）、７は後段コア（後段部）、１１はタスク情報テーブルを示す。
【図１】
2014211743.tif 000003
【図２】
2014211743.tif 000004
【図３】
2014211743.tif 000005
【図４】
2014211743.tif 000006
【図５】
2014211743.tif 000007
【図６】
2014211743.tif 000008
【図７】
2014211743.tif 000009