マルチコアプロセッサ
【課題】逐次処理用プログラムでも、ループ部分の繰り返し処理を並列に実行するマルチコアプロセッサの実現。
【解決手段】メインプロセッサ10を含む複数個のプロセッサエレメントPE20-1,20-N-1を含み、逐次処理プログラムを実行するマルチコアプロセッサであって、メインプロセッサは、ループ部分を検出するループ部分検出部11を含み、マルチコアプロセッサは、ループ部分を検出した時に、複数個のPEがループ部分を命令バッファにコピーし、ループカウンタの初期値を各PEごとにずらして格納し、更新量をPEの個数に応じて設定する展開制御部12と、を含み、いずれか1個のPEが終了通知を出力した際に,終了通知を出力したPEより前のループカウンタ値の処理を行っているすべてのPEの現在の処理の終了を待ち,終了通知を出力したPEより後ろのループカウンタ値の処理を行っているPEの処理を終了させた後,逐次処理のプログラムの処理を続行する。
【解決手段】メインプロセッサ10を含む複数個のプロセッサエレメントPE20-1,20-N-1を含み、逐次処理プログラムを実行するマルチコアプロセッサであって、メインプロセッサは、ループ部分を検出するループ部分検出部11を含み、マルチコアプロセッサは、ループ部分を検出した時に、複数個のPEがループ部分を命令バッファにコピーし、ループカウンタの初期値を各PEごとにずらして格納し、更新量をPEの個数に応じて設定する展開制御部12と、を含み、いずれか1個のPEが終了通知を出力した際に,終了通知を出力したPEより前のループカウンタ値の処理を行っているすべてのPEの現在の処理の終了を待ち,終了通知を出力したPEより後ろのループカウンタ値の処理を行っているPEの処理を終了させた後,逐次処理のプログラムの処理を続行する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、マルチコアプロセッサに関する。
【背景技術】
【0002】
処理の高速化を図るため、従来から複数のプロセッサを使用して処理を並列に実行する並列処理方法、および並列処理を実行するための複数のプロセッサを含む並列処理システムが各種提案されている。また、近年の半導体技術の集積度の向上により、複数個のプロセッサエレメントを含むマルチコアプロセッサが実現されている。
【0003】
メディア処理,画像処理等においては,多数のデータに対して依存関係の無い処理を行うことが多い。具体的には、図1に示すような隣接する3×3の画素データを使用する画像のフィルタ処理の場合、各画素の演算処理は、他の画素の処理結果に対して依存関係が無いため、並列計算や計算順序の入れ替えは自由である。
【0004】
図2は、上記のような処理を、通常のプロセッサ向けに記述した逐次処理用プログラムの例を示す。この演算は、各画素およびその隣接画素の画素データを変数とする演算で、画素位置を変化させながら同じ演算を繰り返すループ部分が含まれる。
【0005】
このような複数のデータに1種類の処理を適用する場合に、繰り返し処理(イタレーション)方向に処理を並列に実行する並列処理方法として、SIMD(Single Instruction stream Multiple Data stream)法が知られている。SIMD法では内部に複数のプロセッサエレメントを含み、複数個のプロセッサエレメントが並列に1種類の処理を実行することにより、繰り返し処理(イタレーション)を並列に実行する。より具体的には1命令で多数のデータに対するロード・ストア・演算処理を記述することができ、命令を実行する装置は内部のパイプラインなどのリソースの許す限り、複数のデータを同時に処理する、または複数のデータをオーバーラップして処理することにより、並列処理を行う。
【0006】
図3は、加算演算を繰り返すループ部分の処理をSIMD法で実行する場合のプログラム例を示す。
【0007】
SIMD法で処理を実行する場合、すなわちマルチコアプロセッサを動作させる場合には、図3に示すように、プログラムにおいて新たに定義されたSIMD命令を使用しなければ、並列処理が行われないため高速化できない。そのため、プログラムを作成する容易性(プログラマビリティ)に関する問題がある。
【0008】
また各入力データを各処理でどのようなパターンで参照するかについては、SIMD法の命令セットの形式に依存しており、処理したい演算パターンに合致する命令が無い場合、データを並び替える等の別の対策が必要になる。そのため、同様にプログラマビリティの問題が生じる。
【0009】
図4および図5は、SIMD法で処理を行う場合の処理方法を説明する図である。
【0010】
図4の(A)は、図3の加算演算を実行する場合を示し、横軸が実行時間を、縦軸が回路規模(各演算ユニットのパイプライン段数)を示し、太線が1繰り返し処理における1データの処理の流れを示す。第1のVLDは、i番地のデータを各プロセッサエレメントの第1レジスタにロードする処理を示す。第2のVLDは、j番地のデータを各プロセッサエレメントの第2レジスタにロードする処理を示す。VADDは、第1レジスタのデータと第2レジスタのデータを加算して第3レジスタに格納する処理を示す。VSTは、第3レジスタのデータ(処理結果)をメモリのo番地に書き込む(格納する)処理を示す。
【0011】
それぞれの処理はパイプライン的に処理される。パイプラインであるため前の段の処理が終わったデータに対して次の段の処理を適用することができる。
【0012】
図4の(B)は図4の(A)の各命令を実行するパイプラインの本数を4倍に増やしたものである。パイプラインの本数を増加すれば、所定時間内に処理できるデータ数は飛躍的に向上する。
図5は図4の(B)をデータ数方向を縦軸にとって示したものである。SIMD方式での実効的な並列度はパイプライン本数×パイプライン段数である。
【0013】
また、複数のデータに1種類の処理を適用する場合に、繰り返し処理をオーバーラップして実行する並列処理方法として、アレイ方式が知られている.
【0014】
図6は、加算演算、インクリメント(所定値増加)処理および比較処理からなる一連の処理を繰り返す処理をパイプライン方式で実行する場合のプログラム例を示す。
【0015】
アレイ方式で実行する場合、すなわちアレイプロセッサを動作させる場合には、図5に示すように、逐次処理と同じ命令を用いることができるため、SIMD法の場合のような専用の命令を使わずに高速化を図ることができる。また、入力データの参照は逐次処理と同等に記述できるため、SIMD法より演算の自由度が高い。しかし、アレイ方式では、ループを構成する命令数以上の並列度を得ることができない。すなわち、プログラムを書き換えてループを構成する命令を増やさなければ、並列度を高くできないというスケーラビリティの問題がある。
【0016】
図7は、パイプライン方式のプロセッサを使用する処理方法を説明する図である。
【0017】
図7の(A)は、図5の加算、インクリメントおよび比較の処理を実行する場合を示し、横軸が実行時間を、縦軸が回路規模(パイプライン段数)を示し、太線が繰り返し処理における1データの処理の流れを示す。1番目のLDは、i番地のデータをプロセッサの第5レジスタにロードする処理を示す。2番目のLDは、j番地のデータをプロセッサの第6レジスタにロードする処理を示す。ADDは、第5レジスタのデータと第6レジスタのデータを加算して第7レジスタに格納する処理を示す。STは、第7レジスタのデータ(処理結果)をメモリのo番地に書き込む(格納する)処理を示す。INCは、k番地のデータを1増加する処理を示す。CMPは、1増加したk番地のデータを所定値と比較する処理を示す。
【0018】
図7の(A)に示すように、1個のデータに対する一連の処理が終了する前に、次のデータに対する処理が開始される。
【0019】
図7の(B)は図7(A)を縦軸をデータ数(ループのイタレーション回数)として示したものである。並列度はデータの待ち合わせのためのNOPを含めたループを構成する命令数によって定まる。
【0020】
このように、アレイ方式のプロセッサは、十分な並列度を得るのが難しいという問題があった。また、SIMD法を実行するマルチプロセッサは、プログラムにおいてSIMD命令、すなわちマルチプロセッサ命令を使用しなければ、高速化できないという問題があった。
【0021】
そのため、広く使用される逐次処理用プログラムで動作可能でかつループ部分の繰り返し処理を並列化して高速化が図れるマルチコアプロセッサが要望されている。
【先行技術文献】
【特許文献】
【0022】
【特許文献1】特開2000−353237号公報
【特許文献2】特開2003−091422号公報
【特許文献3】特開2006−330813号公報
【発明の概要】
【発明が解決しようとする課題】
【0023】
実施形態は、逐次処理用プログラムを実行する場合でも、ループ部分の繰り返し処理を並列に実行するマルチコアプロセッサを記載する。
【課題を解決するための手段】
【0024】
実施形態の第1の態様は、メインプロセッサを含む複数個のプロセッサエレメントを含み、逐次処理プログラムを実行するマルチコアプロセッサであって、メインプロセッサは、逐次処理プログラムに含まれる並列化可能なループ部分を検出するループ部分検出部を含み、マルチコアプロセッサは、ループ部分検出部がループ部分を検出した時に、複数個のプロセッサエレメントがループ部分を命令バッファにコピーするように制御すると共に、複数個のプロセッサエレメントのループカウンタの初期値を各プロセッサエレメントごとにずらして格納し、さらに複数個のプロセッサエレメントのループカウンタの更新量を複数個のプロセッサエレメントの個数に応じて設定する展開制御部と、を含み、メインプロセッサは、逐次処理プログラムに含まれるループ部分の処理を、複数個のプロセッサエレメントに実行させ、複数個のプロセッサエレメントは、ループ外処理への変更が発生したら終了通知を出力し、メインプロセッサは、前記複数個のプロセッサエレメントのうちのいずれか1個が前記終了通知を出力した際に、終了通知を出力したプロセッサエレメントより前のループカウンタ値に対して処理を行っているすべてのプロセッサエレメントの現在処理中のループ部分の終了を待ち、終了通知を出力したプロセッサエレメントより後ろのループカウンタ値に対して処理を行っているプロセッサエレメントのループ部分の処理を終了させた後、逐次処理のプログラムの処理を続行する。
【発明の効果】
【0025】
実施形態によれば、逐次処理用プログラムでも、ループ部分の繰り返し処理を並列に実行するマルチコアプロセッサが実現される。
【図面の簡単な説明】
【0026】
【図1】図1は、メディア処理,画像処理等における多数のデータに対して依存関係の無い処理を説明する図である。
【図2】図2は、通常のプロセッサ向けに記述した逐次処理用プログラムの例を示す。
【図3】図3は、加算演算を繰り返すループ部分の処理をSIMD法で実行する場合のプログラム例を示す。
【図4】図4は、SIMD法で処理を行う場合の処理方法を説明する図である。
【図5】図5は、SIMD法で処理を行う場合の処理方法を説明する図である。
【図6】図6は、加算演算、インクリメント(所定値増加)処理および比較処理からなる一連の処理を繰り返す処理をアレイ方式で実行する場合のプログラム例を示す。
【図7】図7は、アレイ方式のプロセッサを使用する処理方法を説明する図である。
【図8】図8は、第1実施形態のマルチコアプロセッサの構成を示す図である。
【図9】図9は、プロセッサエレメント(PE)の1個の構成を示す図である。
【図10】図10は、展開制御部の動作を説明する図である。
【図11】図11は、第1実施形態における命令および内部状態のコピー例を示す図である。
【図12】図12は、終了制御部の動作を説明する図である。
【図13】図13は、第1実施形態のマルチコアプロセッサが、ループ部分の繰り返し処理を並列に行う動作を説明する図である。
【図14】図14は、第2実施形態のマルチコアプロセッサの構成を示す図である。
【図15】図15は、ストリームバッファの構成を示す図である。
【図16】図16は、ストリームバッファの動作を示すフローチャートである。
【図17】図17は、ストアバッファの構成を示す図である。
【図18】図18は、ストアバッファの動作を示すフローチャートである。
【図19】図19は、第2実施形態のマルチコアプロセッサが、ループ部分の繰り返し処理を並列に行う動作を説明する図である。
【図20】図20は、第3実施形態のマルチコアプロセッサの構成を示す図である。
【発明を実施するための形態】
【0027】
図8は、第1実施形態のマルチコアプロセッサの構成を示す図である。
【0028】
図8に示すように、第1実施形態のマルチコアプロセッサは、メインプロセッサ10と、N個のプロセッサエレメント(PE)20−0〜20−N−1と、展開制御部12と、終了制御部13と、主記憶30と、バス31と、を含む。
【0029】
メインプロセッサ10は、逐次処理プログラムAを実行するための従来例と同様の構成を含むが、図示は省略している。メインプロセッサ10は、逐次処理プログラムA中のループ部分を検出するループ部分検出部11と、レジスタファイル14と、を、含む。ループ部分検出部11は、ハードウェアまたはソフトウェアで形成することができる。また、レジスタファイル14は、逐次処理プログラムAを実行するためのレジスタで、従来例と同様の構成を含む。
【0030】
展開制御部12および終了制御部13も、ハードウェアまたはソフトウェアで形成することができる。なお、ハードウェアまたはソフトウェアの中間的な形式でファームウェアと呼ばれる形で、これらを形成することも可能である。
【0031】
図8において破線で示すように、展開制御部12および終了制御部13の少なくとも一方がメインプロセッサ10’に含まれるようにしてもよい。
【0032】
プロセッサエレメント(PE)20−0〜20−N−1は、同じ構成を含み、メインプロセッサ10と同じ構成を含むようにしてもよい。
【0033】
図9は、プロセッサエレメント(PE)20−0〜20−N−1の1個のPE20の構成を示す図である。
【0034】
図9に示すように、PE20は、命令を解釈実行する命令解釈部22と、複数の演算器23と、レジスタファイル24と、ロードストアユニット26と、を含むこれまでの構成に加えて、命令バッファ21と、終了条件判定部25と、を含む。複数の演算器23は、命令をパイプライン方式で処理する。
【0035】
命令バッファ21は、展開制御部12を介してメインプロセッサ10から供給されるループ長分の命令を格納する。
【0036】
レジスタファイル24は、展開制御部12を介してメインプロセッサ10から供給されるレジスタ初期値を格納し、繰り返し処理終了時には、最終値を出力する。
【0037】
終了条件判定部25は、命令バッファ21に未格納の命令実行を検出することにより,ループ終了を判定する。
【0038】
図10は、展開制御部12の動作を説明する図である。
【0039】
メインプロセッサ10が逐次処理プログラムBを行っている時に、ループ部分検出部11が並列処理可能なループ部分を検出すると、ループ部分を構成する命令C1を、各プロセッサエレメント(PE)の命令バッファ21に、メインプロセッサ10の内部状態を各PEにコピーする。
【0040】
ここで、ループ部分の処理をN個のPEで並列に実行する場合、各PEで実行する処理をNずつずらす必要がある。そのため、命令をコピーする時に、ループ部分を構成する命令のうち、ループカウンタ等を更新する命令について、図10に示すように、1回あたりの更新量を、命令をコピーするPE数に従って変更する。
【0041】
具体的には、ループ部分の各繰り返し命令で、ループカウンタkをk=k+2という形の更新命令である時、N個のPEを使用する場合、この更新命令はk=k+2Nに変更される。
【0042】
また、メインプロセッサ10の内部状態をレジスタファイル24にコピーする時に、上ループカウンタ等の初期値を各PEにずらしながら格納する。
【0043】
具体的には、ループカウンタk=0が初期値であり、各繰り返し処理においてk=k+2という形の更新命令がある場合、PE20−0にはk=0、PE20−1にはk=2、PE20−2にはk=4の順にループカウンタkの初期値を分配する。
【0044】
より具体的には、ループカウンタはプロセッサのレジスタであり、内部状態のコピーとは、メインプロセッサ10の全レジスタ値を各PEに分配することである。
【0045】
図11は、第1実施形態における命令および内部状態のコピー例を示す図である。ループカウンタの初期値および更新量が、上記のようにコピーされる。
【0046】
上記のように、各PEにループ部分の命令およびメインプロセッサ10の内部状態をコピーするループ展開制御完了後に、各プロセッサエレメントを動作させることにより、ループ部分の処理が複数のPEで並列に実行される。これにより、ループ部分の繰り返し処理は、PE数の並列度で実行される。
【0047】
図12は、終了制御部13の動作を説明する図である。
【0048】
複数のPEは、終了条件判定部25がループ外処理への変更が発生したら終了通知を出力する。ループ部分Dの繰り返し処理(イタレーション)の並列実行中に、いずれかのPE20−Pの終了条件判定部25が、命令バッファ21に未格納の命令実行を検出すると、言い換えれば、次の実行命令がループ範囲外であることを検出すると、ループ部分の処理終了と判定して、終了制御を開始する。ここでは、上記のループの外側への分岐を行ったループの繰り返し処理を最終繰り返し処理と定義する。
【0049】
最終繰り返し処理よりループカウンタ値が先行を示している繰り返し処理は、そのループの最後まで実行を完了する必要がある。また、最終繰り返し処理よりループカウンタ値が後の繰り返し処理は、逐次処理では実行してはならない処理であるため、即時に停止させる。最終繰り返し処理を実行していたPE20−Pのレジスタファイル24に保持されている内部状態を、メインプロセッサ10に反映させる。そして、メインプロセッサ10は、すべてのPEが終了通知を出力した後、実行したループ部分に続く逐次処理を再開する。
【0050】
上記の処理は、ループ部分の繰り返し処理がすべて終了した場合の動作である。第1実施形態のマルチコアプロセッサは、ループ部分の繰り返し処理を並列実行中に、割り込み等の外部からの中断要求を受け付けられるようになっている。中断が要求された場合、メインプロセッサ10が、中断要求があったことを終了制御部13に通知する。通知を受けた終了制御部13は、各PEに割り当てられた現在実行中の繰り返し処理が完了するまで待つ。このとき繰り返し処理を完了したプロセッサエレメントが新たな繰り返し処理を開始しないように抑止する。繰り返し処理を完了したPEのうち、ループカウンタ値が最も先に進んでいるPEの内部状態をレジスタファイル24から読み出し、ループ処理位置レジスタ14に格納する。
【0051】
上記の動作完了後、メインプロセッサ10が割り込みハンドラ等に制御を移すなどして、外部から要求された処理を行う。上記のループの中断制御はループの終了制御と同じ仕組みで実現することができる。
【0052】
中断したループの再開は、ループ処理位置レジスタ14に格納された中断時点でのループカウンタ値を初期値として、再度ループの展開制御を行うことで実現できる。
ここで、メインプロセッサ10は、内部状態を示すレジスタファイル14に書き込みを行うとオンとなるフラグを含む。複数のPE20−0〜20−N−1も、内部状態を示すレジスタファイル24に書き込みを行うとオンとなるフラグを含む。これらのフラグは、展開制御部12が複数のPEに設定動作を行うとすべてオフとなり、例えばプログラムカウンタを更新するなどして内部状態を変化させるとオンとなる。終了制御部13は、終了制御動作時に、最終の繰り返し処理を実行したPEから順に繰り返し処理を分配した方向とは逆方向にPEのフラグを調べてメインプロセッサのフラグと比較する。メインプロセッサ10のフラグがオフであるのに、対応するPEのレジスタがオンである場合には、メインプロセッサ10のフラグをオンすることにより、先頭のステップ位置をメインプロセッサ10のレジスタファイル14に設定する。
【0053】
図13は、第1実施形態のマルチコアプロセッサが、図10に示したループ部分の繰り返し処理(イタレーション)を並列に行う動作を説明する図である。ここでは、PEが4個の例を示している。
【0054】
図13の(A)に示すように、4個のPEが、ロード、ロード、加算、ストア(格納)、インクリメント、比較およびループ継続判定の一連の繰り返し処理(イタレーション)を、並列に実行する。PE数を増加すると、単位時間に実行可能な繰り返し処理数が増加する。
【0055】
図13の(B)は、処理時間と、繰り返し処理数(イタレーション数)、すなわち処理データ数の関係を示す図である。PE数を増加すると、すなわち並列度を高くすると、その分処理データ数が増加する。具体的には、PE数がN個であれば、同一のループを逐次実行した場合と比較してN倍高速化できる。
【0056】
図14は、第2実施形態のマルチコアプロセッサの構成を示す図である。第2実施形態のマルチコアプロセッサは、第1実施形態のマルチコアプロセッサと類似の構成を含み、プリフェッチ41と、ストリームバッファ42と、ストアバッファ43と、を更に含むことが異なる。したがって、メインプロセッサ10は、ループ部分検出部11およびレジスタファイル14を含むが図示は省略している。また、展開制御部12および終了制御部13は、メインプロセッサ10に含ませることも可能である。以下、第1実施例と異なる部分についてのみ説明する。
【0057】
図15は、ストリームバッファ42の構成を示す図である。
【0058】
主記憶30からプロセッサエレメント(PE)方向への主記憶アクセス、すなわちPE20−0〜20−N−1が主記憶30のデータを読み取る時のアクセスの効率化を実現するために、リードオンリのストリームバッファ42を設ける。ストリームバッファ42は、各PE間の共有メモリ形式のキャッシュメモリであり、各PEは共有のキャッシュメモリにアクセスするという方法をとる。
【0059】
図15に示すように、ストリームバッファ42は、調停回路51と、書き込み制御回路52と、内部キャッシュメモリ53と、を含む。図15では、2個のプロセッサエレメント(PE)20−0および20−1が調停回路51に接続されているように示しているが、実際にはすべてのプロセッサエレメント(PE)20−0〜20−N−1が接続されている。プリフェッチ41は、メインプロセッサ10からのプリフェッチ指令40に応じて、処理対象のループ部分が使用するデータを主記憶30からストリームバッファ42に書き込む処理を行う。共有形式のキャッシュメモリについては広く知られているので、詳しい説明は省略する。
【0060】
図15に示したストリームバッファ42を使用して、対象とするループ処理が扱うデータを、アクセスする順番にストリームバッファ42に格納することにより、主記憶30へのアクセスと演算処理を同時に行くことが可能である。
【0061】
図16は、ストリームバッファ42の動作を示すフローチャートであり、左側のS11からS18は各PEの動作を、右側のS21からS26はストリームバッファ42における動作を示す。
【0062】
ループ部分の展開および並列実行に先立って、メインプロセッサ10は、対象とするループ処理が扱うデータのアクセスパターンを、プリフェッチ41に指示する。これに応じて、プリフェッチ41は、主記憶30から指定されたデータをストリームバッファ42に転送する。
【0063】
ステップS11で、各PE20は、ループ部分の繰り返し処理を実行する。
【0064】
ステップS12で、処理を実行するのにデータをPE内にロードする必要があるか否かを判定し、なければステップS16に進み、あればステップS13に進む。
【0065】
ステップ13では、ストリームバッファ42に、データの格納アドレスを通信することにより必要なデータをロードするように要求(リクエスト)する。
【0066】
ステップS14では、データのロード(送信)が完了したかを判定し、完了すればステップS16に進み、完了していなければステップS15に進み、データのロード完了まで待機し、完了したらステップS16に進む。したがって、キャッシュミスが発生した場合には、PE20は、処理を停止して待機した状態になり、キャッシュミスが解消された時に動作を再開する。
【0067】
ステップS16では、終了条件判定部25が、終了条件を満たすかを判定し、満たしていなければステップS18に進み、満たしていればステップS17に進む。
【0068】
ステップS17では、終了通知を終了制御部13に出力して処理を終了する。
【0069】
ステップS18では、終了制御部13から終了通知が出されているかを判定し、終了通知が出されていれば処理を終了し、出されていなければステップS11に戻る。
【0070】
したがって、キャッシュミスが発生しない状態では、各PEはループ部分の繰り返し処理を続ける。
【0071】
ステップS13でロードするように要求されたデータがストリームバッファ42に存在する場合には、短時間のうちにデータが送信されるが、要求されたデータがストリームバッファ42に存在しない場合には、キャッシュミスが発生する。キャッシュミスの場合には、データを受信するまでの時間が長くなる。したがって、キャッシュミスが発生した場合には、PE20は、ステップS15で待機する時間が長くなり、処理を停止してキャッシュミスが解消された時に動作を再開することになる。
【0072】
ストリームバッファ42に必要なデータが存在しない場合はキャッシュミスの状態であり、プリフェッチ41は、必要なデータを主記憶30からにストリームバッファ42に転送する。この動作をプリフェッチ処理と称する。また、ストリームバッファ42は、各PEからのロード要求に応じて、ストリームバッファ42内のデータを各PEに送信するこれをロード処理と称する。もし、各PEからロード要求されたデータがストリームバッファ42に存在しない場合はキャッシュミスの状態であり、プリフェッチ処理を実行する必要がある。
【0073】
ステップS21で、ストリームバッファ42は、要求がプリフェッチ処理かロード処理かを判定し、プリフェッチ処理の場合にはステップS22に進み、ロード処理の場合にはステップS23に進む。
【0074】
ステップS22では、プリフェッチ41が主記憶30のデータをストリームバッファ42の内部キャッシュメモリ53に転送する。
【0075】
ステップS23では、ロード処理で要求されたデータがストリームバッファ42の内部キャッシュメモリ53にあるか否かを判定し、あればステップS25に進み、無ければステップS24に進む。
【0076】
ステップS24では、キャッシュミスの状態なので、プリフェッチ41が主記憶30のデータをストリームバッファ42の内部キャッシュメモリ53に転送するように要求し、データが供給されるまで待機し、データが供給されたら、ステップS25に進む。
【0077】
ステップS25では、ストリームバッファ42の内部キャッシュメモリ53からロード要求されたデータを読み出す。
【0078】
ステップS26では、ストリームバッファ42の内部キャッシュメモリ53から読み出したデータを要求したPEに送信し、ステップS21に戻る。
【0079】
以上説明したように、プリフェッチしたデータは、各PE間で共有のストリームバッファ42に格納するため、各PE間で共有されるデータについても1回の主記憶アクセスで取得可能であり、主記憶アクセスが効率化される。
【0080】
図17は、ストアバッファ43の構成を示す図である。
【0081】
第2実施形態では、プロセッサエレメント(PE)から主記憶30方向への主記憶アクセスの効率化を実現するために、各PE20−0〜20−N−1は書込動作(ストア)発生時に直接主記憶30に書き込むのではなく、ストアバッファ43を介してデータを書き込む方法をとる。
【0082】
図17に示すように、ストリームバッファ42は、調停回路61と、書き込み制御回路62と、書き込み分配回路63と、複数個のエントリ64−0〜64−N−1と、書き込み合成回路65と、を含む。図17では、2個のプロセッサエレメント(PE)20−0および20−1が調停回路61に接続されているように示しているが、実際にはすべてのプロセッサエレメント(PE)20−0〜20−N−1が接続されている。
【0083】
書き込み制御回路62は、各PEから出力される書き込みアドレスに基づいて、書き込み分配回路63がN個のエントリ64−0〜64−N−1のいずれかを選択し、PEから出力されたアドレスとデータの組を、選択したエントリ内に格納するように制御する。
【0084】
書き込み制御回路62は、1エントリが満たされたタイミングで、1エントリ単位で主記憶30への書き込みアクセスを行い、書き込みアクセスを行ったエントリを解放する。
【0085】
1エントリ内に格納されるデータが、主記憶30上で連続したアドレスとなるように、アドレスに基づいたエントリ選択を行うことにより、エントリの内容を主記憶30に書き込む際に、バースト転送等の効率的なアクセスが可能となる。
【0086】
また、ループの終了時には、最終繰り返し処理を実行したPEからの指示に基づき,ストアバッファ43内のストアデータ格納済みエントリ内のデータをすべて主記憶に書き込むというフラッシュ動作を行ことにより、PEがストアした全データが主記憶30に書き込まれることを保証する。
【0087】
図18は、ストアバッファ43の動作を示すフローチャートであり、左側のS31からS38は各PEの動作を、右側のS41からS47およびS51からS53はストアバッファ43における動作を示す。
【0088】
ステップS31で、各PE20は、ループ部分の繰り返し処理を実行する。
【0089】
ステップS32で、実行した処理の結果、ストアする(書き込む)データが発生したか否かを判定し、発生しなければステップS36に進み、発生していればステップS33に進む。
【0090】
ステップ33では、ストアバッファ43の所望のエントリが満杯(フル)であるか否かを判定し、フルであればステップS34に進み、空きがあればステップS35に進む。
【0091】
ステップS34では、ストアバッファ43の所望のエントリが空くまで待機し、ストアバッファ43から空いたことが通信されたらステップS35に進む。
【0092】
ステップS35では、ストアバッファ43に対して、データのストア処理を要求(リクエスト)し、データおよびアドレスをストアバッファ43に送信する。
【0093】
ステップS36では、終了条件判定部25が、終了条件を満たすかを判定し、満たしていなければステップS38に進み、満たしていればステップS37に進む。
【0094】
ステップS37では、終了通知を終了制御部13に出力すると共に、ストアバッファ43にフラッシュ処理を要求して処理を終了する。
【0095】
ステップS38では、終了制御部13から終了通知が出されているかを判定し、終了通知が出されていれば処理を終了し、出されていなければステップS31に戻る。
【0096】
次に、ストアバッファ43における動作を説明する。
【0097】
ステップS41で、ストリームバッファ42は、要求がストア処理かフラッシュ処理かを判定し、ストア処理の場合にはステップS42に進み、フラッシュ処理の場合にはステップS51に進む。
【0098】
ステップS42では、所望のエントリが確保されているかを判定し、確保されていなければステップS43に進み、確保されていればステップS44に進む。
【0099】
ステップS43では、エントリを確保する。
【0100】
ステップS44では、確保済みのエントリに、PEから送信されたデータおよびアドレスを格納する。
【0101】
ステップS45では、格納先のエントリが満杯であるか否かを判定し、満杯であればステップS46に進み、満杯でなければステップS41に戻る。
【0102】
ステップS46では、満杯のエントリのアドレスで主記憶30にアクセスして、データを書き込む。
【0103】
ステップS47では、出力(読み出し)が行われた上記のエントリが解放され、エントリの解放をPEに通知し、ステップS41に戻る。
【0104】
一方、ステップS41で、フラッシュ処理と判定された時には、ステップS51で、格納隅のエントリがあるか否かを判定し、あればステップS52に進み、無ければ終了する。
【0105】
ステップS52では、未格納のエントリのアドレスで主記憶30にアクセスして、データを書き込む。
【0106】
ステップS53では、出力(読み出し)が行われた上記のエントリが解放され、ステップS51に戻る。以下、未格納のエントリのすべてのデータが主記憶30に書き込まれるまでこの処理を繰り返す。
【0107】
以上説明したように、第2実施形態では、ループカウンタ値をずらしたものを並列実行しているため、ループ自体が元々メモリアクセスの局所性を有しており、並列実行している各PEがメモリ中の近い領域にアクセスする。このため、各PEが主記憶から読んだ値が周辺のプロセッサエレメントでも再利用できるため、主記憶アクセスが効率化される。
【0108】
さらに、ループの各繰り返し処理が、同一のデータを主記憶から読み出す特性を持ったループ処理の場合、プログラム中に記述したプリフェッチ指令または予測機構に基づいて、プリフェッチが各繰り返し処理に必要なデータを主記憶から、複数のPE間に共有のストリームバッファに読み出しておくことにより、さらに読み出しアクセスの効率化を図ることができる。
【0109】
また、ループの各繰り返し処理から主記憶への書き込みアドレスに局所性がある場合、PE間で共有のストアバッファに、書き込みアドレスとデータを格納し、ほかのPEの書き込みデータとまとめることにより、書き込みアクセスの効率化を図ることができる。
【0110】
図19は、第2実施形態のマルチコアプロセッサが、図11に示したループ部分の繰り返し処理を並列に行う動作を説明する図である。ここでは、PEが4個の例を示している。
【0111】
図19に示すように、ロード、演算およびストアを含む一連の繰り返し処理を、複数のデータについて行う場合を考える。1回の繰り返し処理の命令実行時間をT、データ数をPとすると、逐次処理では1つの繰り返し処理をP回繰り返すので、処理時間はT×Pになる。
【0112】
これに対して、PEを4個使用して繰り返し処理を並列に行う場合を考える。ただし、繰り返し処理を並列に行うには、並列に行う4つの処理に必要な4組のデータも並列に供給可能で、処理結果の4組のデータも並列に出力可能であることが必要である。もし、データの供給および出力が、同じ速度で並列に行えないと、4倍の速度で処理することはできない。
【0113】
第2実施形態では、上記のように、ストリームバッファ42およびストアバッファ43を使用して、PEへのデータ供給およびPEからのデータ出力を並列に行えるようにしている。
【0114】
図19に示すように、入力データが画像データの場合、4個のPEは、1画素ずつずれた隣接画素群のデータを処理に使用する。このような隣接画素群のデータは、スキャンなどにより、主記憶に連続してアクセスして読み出すことが可能である。そこで、プリフェッチ処理で、このような隣接画素群のデータを連続して読み出して、ストリームバッファ42に格納する。この場合、1画素ずつずらすので、図19に示すように、タイムラグが発生する。4個のPE用のデータが揃ったら、4個のPEは同時に並列で4つの画素についてそれぞれ処理を行う。4個のPEが処理を行っている間に、次の4つずれた画素の隣接画素群のデータを供給して準備しておく。
【0115】
一方、4個のPEで処理した結果である出力データは、並列にストアバッファに出力され、次のデータが出力されるまでに主記憶に書き込まれる。この場合も、1画素ずつずれてデータが書き込まれるので、画像をスキャンするように書き込むことになる。
【0116】
いずれにしろ、以上のようにして、ループ部分の処理を、PEの個数、すなわち4倍に近い高速で行えるようになる。
【0117】
図20は、第3実施形態のマルチコアプロセッサの構成を示す図である。第3実施形態のマルチコアプロセッサは、対称な構成の複数のプロセッサエレメント(PE)20−0〜20−N−1を含み、いずれかのPEがメインプロセッサとして動作することが、第2実施形態のマルチコアプロセッサと異なり、他の部分は同じである。
【0118】
各PEは、展開制御部12、終了制御部13、命令バッファ21および終了条件検出回路25を含み、いずれもメインプロセッサとして動作可能である。
【0119】
いずれかのPEがメインプロセッサとして動作し、並列処理可能なループを検出した時に、メインプロセッサとして動作するPEの展開制御部12が動作し、汎用のバス31を介して他のPEに命令および内部状態を分配する。各PEは、それぞれ繰り返し処理の1つの処理を並列に実行し、いずれかのPEがループの終了条件を検出した際に、メインプロセッサの終了制御への終了通知を行う。終了通知を受けたメインプロセッサの終了制御は、最終繰り返し処理より後の処理返し処理を実行しているPEを停止させ、また最終繰り返し処理を実行していたPEより内部状態のデータを得て、自分のPEの内部状態に反映させた後、逐次実行に復帰する。
【0120】
以上第1から第3実施形態を説明したが、各実施形態で説明した事項は、他の実施形態に適用することが可能であり、説明した以外にも各種の変形例が可能である。
【0121】
例えば、第3実施形態では、N個のPEが設けられている場合、N個のPEをすべてループ部分の繰り返し処理に使用したが、一部のPEを使用し、残りのPEは他の処理に使用することも可能である。メインプロセッサを含む複数のPEが、独立したスレッドを実行している時に、あるPEが並列実行可能なループ部分を検出し、他のPEにループ部分の繰り返し処理を分担して並列に実行するように要求する。展開要求を受けたPEが、展開要求元のスレッドより高い優先度のスレッドを実行している場合には、展開要求を拒否し、独立してスレッド実行を続行し、より低い優先度のスレッドを実行している場合のみ展開要求を受け付ける。そして、展開要求を出したPEおよび展開要求を受け付けたPEにのみループ部分を展開して、各繰り返し処理(イタレーション)の並列実行を行う。
【0122】
以上説明したように、実施形態によれば、SIMD法を実行するマルチプロセッサ(マルチコアプロセッサ)と比較して、ループを構成する命令は逐次実行の命令のままでよく、入力データの参照、入力データ間の演算の自由度が高いためプログラマビリティが高い。
【0123】
また、パイプライン方式のプロセッサでは最大の並列度がループの長さに依存していたのに対して、実施形態のマルチコアプロセッサではプロセッサエレメント(PE)数を増加させることで、並列度を向上させることができ、スケーラビリティを高くすることが可能である。
【0124】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではなく、明細書のそのような例の構成は発明の利点および欠点を示すものではない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【0125】
以下、実施形態に関し、更に以下の付記を開示する。
(付記1)
メインプロセッサを含む複数個のプロセッサエレメントを備え、逐次処理プログラムを実行するマルチコアプロセッサであって、
前記メインプロセッサは、前記逐次処理プログラムに含まれる並列化可能なループ部分を検出するループ部分検出部を備え、
前記マルチコアプロセッサは、前記ループ部分検出部が前記ループ部分を検出した時に、前記複数個のプロセッサエレメントが前記ループ部分を命令バッファにコピーするように制御すると共に、前記複数個のプロセッサエレメントのループカウンタの初期値を各プロセッサエレメントごとにずらして格納し、さらに前記複数個のプロセッサエレメントのループカウンタの更新量を前記複数個のプロセッサエレメントの個数に応じて設定する展開制御部と、を備え、
前記メインプロセッサは、前記逐次処理プログラムに含まれる前記ループ部分の処理を、前記複数個のプロセッサエレメントに実行させ、
前記複数個のプロセッサエレメントは、ループ外処理への変更が発生したら終了通知を出力し、
前記メインプロセッサは、前記複数個のプロセッサエレメントのうちのいずれか1個が前記終了通知を出力した際に、終了通知を出力したプロセッサエレメントより前のループカウンタ値に対して処理を行っているすべてのプロセッサエレメントの現在処理中のループ部分の終了を待ち、終了通知を出力したプロセッサエレメントより後ろのループカウンタ値に対して処理を行っているプロセッサエレメントのループ部分の処理を終了させ、前記逐次処理プログラムの処理を続行することを特徴とするマルチコアプロセッサ。
(付記2)
前記メインプロセッサが、実行中の前記ループ部分の処理の中断を指示すると、前記ループ部分の処理を実行中の前記複数個のプロセッサエレメントは、実行中の前記ループ部分の1ステップを完了すると前記終了通知を出力すると共に処理を停止し、
前記マルチコアプロセッサは、すべての前記複数個のプロセッサエレメントからの前記終了通知を受信した後、前記複数個のプロセッサエレメントの内部状態の情報を取得して、前記ループ部分の処理のうち完了している先頭のステップ位置を検出する終了制御部を備え、
前記メインプロセッサは、前記終了制御部の検出した前記先頭のステップ位置を記憶する内部状態を示すレジスタを備え、中断した前記ループ部分の処理を再開する時には、前記ループ処理位置レジスタに記憶された前記先頭のステップ位置の次から前記ループ部分の処理を実行するように、前記展開制御部に情報を提供する付記1に記載のマルチコアプロセッサ。
(付記3)
前記メインプロセッサおよび前記複数個のプロセッサエレメントは、内部状態を示すレジスタに書き込みを行うとオンとなるフラグを含み、
前記フラグは、前記展開制御部が前記複数個のプロセッサエレメントに設定動作を行うとすべてオフとなり、
前記終了制御部は、終了制御動作時に、最終の繰り返し処理を実行したプロセッサエレメントから順に繰り返し処理を分配した方向とは逆方向に、前記メインプロセッサの前記フラグがオフである前記レジスタのフラグを調べ、オンであるレジスタに対応する前記メインプロセッサのレジスタのフラグをオンすることにより、前記先頭のステップ位置を前記メインプロセッサの前記レジスタに設定する付記2に記載のマルチコアプロセッサ。
(付記4)
前記複数個のプロセッサエレメントが処理に使用するデータを格納する共有メモリ形式のストリームバッファと、
前記ループ部分の処理で使用するデータから順に主記憶からのプリフェッチを行い、プリフェッチしたデータを、前記ループ部分の処理順を保持しながら前記ストリームバッファに格納するプリフェッチと、を備える付記2または3に記載のマルチコアプロセッサ。
(付記5)
前記プリフェッチは、前記複数個のプロセッサエレメントにおける前記ループ部分の処理の実行に合わせて、各プロセッサエレメントと同期しながら、各プロセッサエレメントが使用するデータを前記主記憶からプリフェッチして前記ストリームバッファに格納する付記4に記載のマルチコアプロセッサ。
(付記6)
前記複数個のプロセッサエレメントが処理した処理済みデータを格納する共有メモリ形式のストアバッファを備え、
前記ストアバッファは、格納された前記処理済みデータを、主記憶に書き込むのに適した量に達したら前記主記憶に書き込む付記2から5のいずれかに記載のマルチコアプロセッサ。
(付記7)
前記ストアバッファは、前記複数個のプロセッサエレメントが前記処理済みデータを書き込む各書き込み領域に対応して設けられたフラグを備え、各プロセッサエレメントからの書き込み時点では前記フラグをオフに、前記主記憶に書き込むのに適した量に達した時に前記フラグをオンに変化させ、
前記フラグがオンの前記書き込み領域のデータを前記主記憶に格納し、
前記終了制御部が、すべての前記複数個のプロセッサエレメントからの前記終了通知を受信した時に、前記フラグがオフの前記書き込み領域のデータを消去する付記6に記載のマルチコアプロセッサ。
(付記8)
前記展開制御部および前記終了制御部の少なくとも1つは、前記メインプロセッサに設けられる付記2から7のいずれかに記載のマルチコアプロセッサ。
(付記9)
前記メインプロセッサおよび前記複数個のプロセッサエレメントは、同等の複数個のベースプロセッサであり、前記複数個のベースプロセッサのうちの任意の1個が前記メインプロセッサとして動作する付記2から8のいずれかに記載のマルチコアプロセッサ。
(付記10)
前記複数個のプロセッサエレメントは、独立したスレッドを並列に実行可能であり、
前記複数個のプロセッサエレメントから選択された2個以上のプロセッサエレメントが、1つの前記ループ部分の処理を実行する付記2から9のいずれかに記載のマルチコアプロセッサ。
【符号の説明】
【0126】
10、10’ メインプロセッサ
11 ループ部分検出部
12 展開制御部
13 終了制御部
14 レジスタファイル
20−0〜20−N−1 プロセッサエレメント(PE)
30 主記憶
31 バス
【技術分野】
【0001】
本発明は、マルチコアプロセッサに関する。
【背景技術】
【0002】
処理の高速化を図るため、従来から複数のプロセッサを使用して処理を並列に実行する並列処理方法、および並列処理を実行するための複数のプロセッサを含む並列処理システムが各種提案されている。また、近年の半導体技術の集積度の向上により、複数個のプロセッサエレメントを含むマルチコアプロセッサが実現されている。
【0003】
メディア処理,画像処理等においては,多数のデータに対して依存関係の無い処理を行うことが多い。具体的には、図1に示すような隣接する3×3の画素データを使用する画像のフィルタ処理の場合、各画素の演算処理は、他の画素の処理結果に対して依存関係が無いため、並列計算や計算順序の入れ替えは自由である。
【0004】
図2は、上記のような処理を、通常のプロセッサ向けに記述した逐次処理用プログラムの例を示す。この演算は、各画素およびその隣接画素の画素データを変数とする演算で、画素位置を変化させながら同じ演算を繰り返すループ部分が含まれる。
【0005】
このような複数のデータに1種類の処理を適用する場合に、繰り返し処理(イタレーション)方向に処理を並列に実行する並列処理方法として、SIMD(Single Instruction stream Multiple Data stream)法が知られている。SIMD法では内部に複数のプロセッサエレメントを含み、複数個のプロセッサエレメントが並列に1種類の処理を実行することにより、繰り返し処理(イタレーション)を並列に実行する。より具体的には1命令で多数のデータに対するロード・ストア・演算処理を記述することができ、命令を実行する装置は内部のパイプラインなどのリソースの許す限り、複数のデータを同時に処理する、または複数のデータをオーバーラップして処理することにより、並列処理を行う。
【0006】
図3は、加算演算を繰り返すループ部分の処理をSIMD法で実行する場合のプログラム例を示す。
【0007】
SIMD法で処理を実行する場合、すなわちマルチコアプロセッサを動作させる場合には、図3に示すように、プログラムにおいて新たに定義されたSIMD命令を使用しなければ、並列処理が行われないため高速化できない。そのため、プログラムを作成する容易性(プログラマビリティ)に関する問題がある。
【0008】
また各入力データを各処理でどのようなパターンで参照するかについては、SIMD法の命令セットの形式に依存しており、処理したい演算パターンに合致する命令が無い場合、データを並び替える等の別の対策が必要になる。そのため、同様にプログラマビリティの問題が生じる。
【0009】
図4および図5は、SIMD法で処理を行う場合の処理方法を説明する図である。
【0010】
図4の(A)は、図3の加算演算を実行する場合を示し、横軸が実行時間を、縦軸が回路規模(各演算ユニットのパイプライン段数)を示し、太線が1繰り返し処理における1データの処理の流れを示す。第1のVLDは、i番地のデータを各プロセッサエレメントの第1レジスタにロードする処理を示す。第2のVLDは、j番地のデータを各プロセッサエレメントの第2レジスタにロードする処理を示す。VADDは、第1レジスタのデータと第2レジスタのデータを加算して第3レジスタに格納する処理を示す。VSTは、第3レジスタのデータ(処理結果)をメモリのo番地に書き込む(格納する)処理を示す。
【0011】
それぞれの処理はパイプライン的に処理される。パイプラインであるため前の段の処理が終わったデータに対して次の段の処理を適用することができる。
【0012】
図4の(B)は図4の(A)の各命令を実行するパイプラインの本数を4倍に増やしたものである。パイプラインの本数を増加すれば、所定時間内に処理できるデータ数は飛躍的に向上する。
図5は図4の(B)をデータ数方向を縦軸にとって示したものである。SIMD方式での実効的な並列度はパイプライン本数×パイプライン段数である。
【0013】
また、複数のデータに1種類の処理を適用する場合に、繰り返し処理をオーバーラップして実行する並列処理方法として、アレイ方式が知られている.
【0014】
図6は、加算演算、インクリメント(所定値増加)処理および比較処理からなる一連の処理を繰り返す処理をパイプライン方式で実行する場合のプログラム例を示す。
【0015】
アレイ方式で実行する場合、すなわちアレイプロセッサを動作させる場合には、図5に示すように、逐次処理と同じ命令を用いることができるため、SIMD法の場合のような専用の命令を使わずに高速化を図ることができる。また、入力データの参照は逐次処理と同等に記述できるため、SIMD法より演算の自由度が高い。しかし、アレイ方式では、ループを構成する命令数以上の並列度を得ることができない。すなわち、プログラムを書き換えてループを構成する命令を増やさなければ、並列度を高くできないというスケーラビリティの問題がある。
【0016】
図7は、パイプライン方式のプロセッサを使用する処理方法を説明する図である。
【0017】
図7の(A)は、図5の加算、インクリメントおよび比較の処理を実行する場合を示し、横軸が実行時間を、縦軸が回路規模(パイプライン段数)を示し、太線が繰り返し処理における1データの処理の流れを示す。1番目のLDは、i番地のデータをプロセッサの第5レジスタにロードする処理を示す。2番目のLDは、j番地のデータをプロセッサの第6レジスタにロードする処理を示す。ADDは、第5レジスタのデータと第6レジスタのデータを加算して第7レジスタに格納する処理を示す。STは、第7レジスタのデータ(処理結果)をメモリのo番地に書き込む(格納する)処理を示す。INCは、k番地のデータを1増加する処理を示す。CMPは、1増加したk番地のデータを所定値と比較する処理を示す。
【0018】
図7の(A)に示すように、1個のデータに対する一連の処理が終了する前に、次のデータに対する処理が開始される。
【0019】
図7の(B)は図7(A)を縦軸をデータ数(ループのイタレーション回数)として示したものである。並列度はデータの待ち合わせのためのNOPを含めたループを構成する命令数によって定まる。
【0020】
このように、アレイ方式のプロセッサは、十分な並列度を得るのが難しいという問題があった。また、SIMD法を実行するマルチプロセッサは、プログラムにおいてSIMD命令、すなわちマルチプロセッサ命令を使用しなければ、高速化できないという問題があった。
【0021】
そのため、広く使用される逐次処理用プログラムで動作可能でかつループ部分の繰り返し処理を並列化して高速化が図れるマルチコアプロセッサが要望されている。
【先行技術文献】
【特許文献】
【0022】
【特許文献1】特開2000−353237号公報
【特許文献2】特開2003−091422号公報
【特許文献3】特開2006−330813号公報
【発明の概要】
【発明が解決しようとする課題】
【0023】
実施形態は、逐次処理用プログラムを実行する場合でも、ループ部分の繰り返し処理を並列に実行するマルチコアプロセッサを記載する。
【課題を解決するための手段】
【0024】
実施形態の第1の態様は、メインプロセッサを含む複数個のプロセッサエレメントを含み、逐次処理プログラムを実行するマルチコアプロセッサであって、メインプロセッサは、逐次処理プログラムに含まれる並列化可能なループ部分を検出するループ部分検出部を含み、マルチコアプロセッサは、ループ部分検出部がループ部分を検出した時に、複数個のプロセッサエレメントがループ部分を命令バッファにコピーするように制御すると共に、複数個のプロセッサエレメントのループカウンタの初期値を各プロセッサエレメントごとにずらして格納し、さらに複数個のプロセッサエレメントのループカウンタの更新量を複数個のプロセッサエレメントの個数に応じて設定する展開制御部と、を含み、メインプロセッサは、逐次処理プログラムに含まれるループ部分の処理を、複数個のプロセッサエレメントに実行させ、複数個のプロセッサエレメントは、ループ外処理への変更が発生したら終了通知を出力し、メインプロセッサは、前記複数個のプロセッサエレメントのうちのいずれか1個が前記終了通知を出力した際に、終了通知を出力したプロセッサエレメントより前のループカウンタ値に対して処理を行っているすべてのプロセッサエレメントの現在処理中のループ部分の終了を待ち、終了通知を出力したプロセッサエレメントより後ろのループカウンタ値に対して処理を行っているプロセッサエレメントのループ部分の処理を終了させた後、逐次処理のプログラムの処理を続行する。
【発明の効果】
【0025】
実施形態によれば、逐次処理用プログラムでも、ループ部分の繰り返し処理を並列に実行するマルチコアプロセッサが実現される。
【図面の簡単な説明】
【0026】
【図1】図1は、メディア処理,画像処理等における多数のデータに対して依存関係の無い処理を説明する図である。
【図2】図2は、通常のプロセッサ向けに記述した逐次処理用プログラムの例を示す。
【図3】図3は、加算演算を繰り返すループ部分の処理をSIMD法で実行する場合のプログラム例を示す。
【図4】図4は、SIMD法で処理を行う場合の処理方法を説明する図である。
【図5】図5は、SIMD法で処理を行う場合の処理方法を説明する図である。
【図6】図6は、加算演算、インクリメント(所定値増加)処理および比較処理からなる一連の処理を繰り返す処理をアレイ方式で実行する場合のプログラム例を示す。
【図7】図7は、アレイ方式のプロセッサを使用する処理方法を説明する図である。
【図8】図8は、第1実施形態のマルチコアプロセッサの構成を示す図である。
【図9】図9は、プロセッサエレメント(PE)の1個の構成を示す図である。
【図10】図10は、展開制御部の動作を説明する図である。
【図11】図11は、第1実施形態における命令および内部状態のコピー例を示す図である。
【図12】図12は、終了制御部の動作を説明する図である。
【図13】図13は、第1実施形態のマルチコアプロセッサが、ループ部分の繰り返し処理を並列に行う動作を説明する図である。
【図14】図14は、第2実施形態のマルチコアプロセッサの構成を示す図である。
【図15】図15は、ストリームバッファの構成を示す図である。
【図16】図16は、ストリームバッファの動作を示すフローチャートである。
【図17】図17は、ストアバッファの構成を示す図である。
【図18】図18は、ストアバッファの動作を示すフローチャートである。
【図19】図19は、第2実施形態のマルチコアプロセッサが、ループ部分の繰り返し処理を並列に行う動作を説明する図である。
【図20】図20は、第3実施形態のマルチコアプロセッサの構成を示す図である。
【発明を実施するための形態】
【0027】
図8は、第1実施形態のマルチコアプロセッサの構成を示す図である。
【0028】
図8に示すように、第1実施形態のマルチコアプロセッサは、メインプロセッサ10と、N個のプロセッサエレメント(PE)20−0〜20−N−1と、展開制御部12と、終了制御部13と、主記憶30と、バス31と、を含む。
【0029】
メインプロセッサ10は、逐次処理プログラムAを実行するための従来例と同様の構成を含むが、図示は省略している。メインプロセッサ10は、逐次処理プログラムA中のループ部分を検出するループ部分検出部11と、レジスタファイル14と、を、含む。ループ部分検出部11は、ハードウェアまたはソフトウェアで形成することができる。また、レジスタファイル14は、逐次処理プログラムAを実行するためのレジスタで、従来例と同様の構成を含む。
【0030】
展開制御部12および終了制御部13も、ハードウェアまたはソフトウェアで形成することができる。なお、ハードウェアまたはソフトウェアの中間的な形式でファームウェアと呼ばれる形で、これらを形成することも可能である。
【0031】
図8において破線で示すように、展開制御部12および終了制御部13の少なくとも一方がメインプロセッサ10’に含まれるようにしてもよい。
【0032】
プロセッサエレメント(PE)20−0〜20−N−1は、同じ構成を含み、メインプロセッサ10と同じ構成を含むようにしてもよい。
【0033】
図9は、プロセッサエレメント(PE)20−0〜20−N−1の1個のPE20の構成を示す図である。
【0034】
図9に示すように、PE20は、命令を解釈実行する命令解釈部22と、複数の演算器23と、レジスタファイル24と、ロードストアユニット26と、を含むこれまでの構成に加えて、命令バッファ21と、終了条件判定部25と、を含む。複数の演算器23は、命令をパイプライン方式で処理する。
【0035】
命令バッファ21は、展開制御部12を介してメインプロセッサ10から供給されるループ長分の命令を格納する。
【0036】
レジスタファイル24は、展開制御部12を介してメインプロセッサ10から供給されるレジスタ初期値を格納し、繰り返し処理終了時には、最終値を出力する。
【0037】
終了条件判定部25は、命令バッファ21に未格納の命令実行を検出することにより,ループ終了を判定する。
【0038】
図10は、展開制御部12の動作を説明する図である。
【0039】
メインプロセッサ10が逐次処理プログラムBを行っている時に、ループ部分検出部11が並列処理可能なループ部分を検出すると、ループ部分を構成する命令C1を、各プロセッサエレメント(PE)の命令バッファ21に、メインプロセッサ10の内部状態を各PEにコピーする。
【0040】
ここで、ループ部分の処理をN個のPEで並列に実行する場合、各PEで実行する処理をNずつずらす必要がある。そのため、命令をコピーする時に、ループ部分を構成する命令のうち、ループカウンタ等を更新する命令について、図10に示すように、1回あたりの更新量を、命令をコピーするPE数に従って変更する。
【0041】
具体的には、ループ部分の各繰り返し命令で、ループカウンタkをk=k+2という形の更新命令である時、N個のPEを使用する場合、この更新命令はk=k+2Nに変更される。
【0042】
また、メインプロセッサ10の内部状態をレジスタファイル24にコピーする時に、上ループカウンタ等の初期値を各PEにずらしながら格納する。
【0043】
具体的には、ループカウンタk=0が初期値であり、各繰り返し処理においてk=k+2という形の更新命令がある場合、PE20−0にはk=0、PE20−1にはk=2、PE20−2にはk=4の順にループカウンタkの初期値を分配する。
【0044】
より具体的には、ループカウンタはプロセッサのレジスタであり、内部状態のコピーとは、メインプロセッサ10の全レジスタ値を各PEに分配することである。
【0045】
図11は、第1実施形態における命令および内部状態のコピー例を示す図である。ループカウンタの初期値および更新量が、上記のようにコピーされる。
【0046】
上記のように、各PEにループ部分の命令およびメインプロセッサ10の内部状態をコピーするループ展開制御完了後に、各プロセッサエレメントを動作させることにより、ループ部分の処理が複数のPEで並列に実行される。これにより、ループ部分の繰り返し処理は、PE数の並列度で実行される。
【0047】
図12は、終了制御部13の動作を説明する図である。
【0048】
複数のPEは、終了条件判定部25がループ外処理への変更が発生したら終了通知を出力する。ループ部分Dの繰り返し処理(イタレーション)の並列実行中に、いずれかのPE20−Pの終了条件判定部25が、命令バッファ21に未格納の命令実行を検出すると、言い換えれば、次の実行命令がループ範囲外であることを検出すると、ループ部分の処理終了と判定して、終了制御を開始する。ここでは、上記のループの外側への分岐を行ったループの繰り返し処理を最終繰り返し処理と定義する。
【0049】
最終繰り返し処理よりループカウンタ値が先行を示している繰り返し処理は、そのループの最後まで実行を完了する必要がある。また、最終繰り返し処理よりループカウンタ値が後の繰り返し処理は、逐次処理では実行してはならない処理であるため、即時に停止させる。最終繰り返し処理を実行していたPE20−Pのレジスタファイル24に保持されている内部状態を、メインプロセッサ10に反映させる。そして、メインプロセッサ10は、すべてのPEが終了通知を出力した後、実行したループ部分に続く逐次処理を再開する。
【0050】
上記の処理は、ループ部分の繰り返し処理がすべて終了した場合の動作である。第1実施形態のマルチコアプロセッサは、ループ部分の繰り返し処理を並列実行中に、割り込み等の外部からの中断要求を受け付けられるようになっている。中断が要求された場合、メインプロセッサ10が、中断要求があったことを終了制御部13に通知する。通知を受けた終了制御部13は、各PEに割り当てられた現在実行中の繰り返し処理が完了するまで待つ。このとき繰り返し処理を完了したプロセッサエレメントが新たな繰り返し処理を開始しないように抑止する。繰り返し処理を完了したPEのうち、ループカウンタ値が最も先に進んでいるPEの内部状態をレジスタファイル24から読み出し、ループ処理位置レジスタ14に格納する。
【0051】
上記の動作完了後、メインプロセッサ10が割り込みハンドラ等に制御を移すなどして、外部から要求された処理を行う。上記のループの中断制御はループの終了制御と同じ仕組みで実現することができる。
【0052】
中断したループの再開は、ループ処理位置レジスタ14に格納された中断時点でのループカウンタ値を初期値として、再度ループの展開制御を行うことで実現できる。
ここで、メインプロセッサ10は、内部状態を示すレジスタファイル14に書き込みを行うとオンとなるフラグを含む。複数のPE20−0〜20−N−1も、内部状態を示すレジスタファイル24に書き込みを行うとオンとなるフラグを含む。これらのフラグは、展開制御部12が複数のPEに設定動作を行うとすべてオフとなり、例えばプログラムカウンタを更新するなどして内部状態を変化させるとオンとなる。終了制御部13は、終了制御動作時に、最終の繰り返し処理を実行したPEから順に繰り返し処理を分配した方向とは逆方向にPEのフラグを調べてメインプロセッサのフラグと比較する。メインプロセッサ10のフラグがオフであるのに、対応するPEのレジスタがオンである場合には、メインプロセッサ10のフラグをオンすることにより、先頭のステップ位置をメインプロセッサ10のレジスタファイル14に設定する。
【0053】
図13は、第1実施形態のマルチコアプロセッサが、図10に示したループ部分の繰り返し処理(イタレーション)を並列に行う動作を説明する図である。ここでは、PEが4個の例を示している。
【0054】
図13の(A)に示すように、4個のPEが、ロード、ロード、加算、ストア(格納)、インクリメント、比較およびループ継続判定の一連の繰り返し処理(イタレーション)を、並列に実行する。PE数を増加すると、単位時間に実行可能な繰り返し処理数が増加する。
【0055】
図13の(B)は、処理時間と、繰り返し処理数(イタレーション数)、すなわち処理データ数の関係を示す図である。PE数を増加すると、すなわち並列度を高くすると、その分処理データ数が増加する。具体的には、PE数がN個であれば、同一のループを逐次実行した場合と比較してN倍高速化できる。
【0056】
図14は、第2実施形態のマルチコアプロセッサの構成を示す図である。第2実施形態のマルチコアプロセッサは、第1実施形態のマルチコアプロセッサと類似の構成を含み、プリフェッチ41と、ストリームバッファ42と、ストアバッファ43と、を更に含むことが異なる。したがって、メインプロセッサ10は、ループ部分検出部11およびレジスタファイル14を含むが図示は省略している。また、展開制御部12および終了制御部13は、メインプロセッサ10に含ませることも可能である。以下、第1実施例と異なる部分についてのみ説明する。
【0057】
図15は、ストリームバッファ42の構成を示す図である。
【0058】
主記憶30からプロセッサエレメント(PE)方向への主記憶アクセス、すなわちPE20−0〜20−N−1が主記憶30のデータを読み取る時のアクセスの効率化を実現するために、リードオンリのストリームバッファ42を設ける。ストリームバッファ42は、各PE間の共有メモリ形式のキャッシュメモリであり、各PEは共有のキャッシュメモリにアクセスするという方法をとる。
【0059】
図15に示すように、ストリームバッファ42は、調停回路51と、書き込み制御回路52と、内部キャッシュメモリ53と、を含む。図15では、2個のプロセッサエレメント(PE)20−0および20−1が調停回路51に接続されているように示しているが、実際にはすべてのプロセッサエレメント(PE)20−0〜20−N−1が接続されている。プリフェッチ41は、メインプロセッサ10からのプリフェッチ指令40に応じて、処理対象のループ部分が使用するデータを主記憶30からストリームバッファ42に書き込む処理を行う。共有形式のキャッシュメモリについては広く知られているので、詳しい説明は省略する。
【0060】
図15に示したストリームバッファ42を使用して、対象とするループ処理が扱うデータを、アクセスする順番にストリームバッファ42に格納することにより、主記憶30へのアクセスと演算処理を同時に行くことが可能である。
【0061】
図16は、ストリームバッファ42の動作を示すフローチャートであり、左側のS11からS18は各PEの動作を、右側のS21からS26はストリームバッファ42における動作を示す。
【0062】
ループ部分の展開および並列実行に先立って、メインプロセッサ10は、対象とするループ処理が扱うデータのアクセスパターンを、プリフェッチ41に指示する。これに応じて、プリフェッチ41は、主記憶30から指定されたデータをストリームバッファ42に転送する。
【0063】
ステップS11で、各PE20は、ループ部分の繰り返し処理を実行する。
【0064】
ステップS12で、処理を実行するのにデータをPE内にロードする必要があるか否かを判定し、なければステップS16に進み、あればステップS13に進む。
【0065】
ステップ13では、ストリームバッファ42に、データの格納アドレスを通信することにより必要なデータをロードするように要求(リクエスト)する。
【0066】
ステップS14では、データのロード(送信)が完了したかを判定し、完了すればステップS16に進み、完了していなければステップS15に進み、データのロード完了まで待機し、完了したらステップS16に進む。したがって、キャッシュミスが発生した場合には、PE20は、処理を停止して待機した状態になり、キャッシュミスが解消された時に動作を再開する。
【0067】
ステップS16では、終了条件判定部25が、終了条件を満たすかを判定し、満たしていなければステップS18に進み、満たしていればステップS17に進む。
【0068】
ステップS17では、終了通知を終了制御部13に出力して処理を終了する。
【0069】
ステップS18では、終了制御部13から終了通知が出されているかを判定し、終了通知が出されていれば処理を終了し、出されていなければステップS11に戻る。
【0070】
したがって、キャッシュミスが発生しない状態では、各PEはループ部分の繰り返し処理を続ける。
【0071】
ステップS13でロードするように要求されたデータがストリームバッファ42に存在する場合には、短時間のうちにデータが送信されるが、要求されたデータがストリームバッファ42に存在しない場合には、キャッシュミスが発生する。キャッシュミスの場合には、データを受信するまでの時間が長くなる。したがって、キャッシュミスが発生した場合には、PE20は、ステップS15で待機する時間が長くなり、処理を停止してキャッシュミスが解消された時に動作を再開することになる。
【0072】
ストリームバッファ42に必要なデータが存在しない場合はキャッシュミスの状態であり、プリフェッチ41は、必要なデータを主記憶30からにストリームバッファ42に転送する。この動作をプリフェッチ処理と称する。また、ストリームバッファ42は、各PEからのロード要求に応じて、ストリームバッファ42内のデータを各PEに送信するこれをロード処理と称する。もし、各PEからロード要求されたデータがストリームバッファ42に存在しない場合はキャッシュミスの状態であり、プリフェッチ処理を実行する必要がある。
【0073】
ステップS21で、ストリームバッファ42は、要求がプリフェッチ処理かロード処理かを判定し、プリフェッチ処理の場合にはステップS22に進み、ロード処理の場合にはステップS23に進む。
【0074】
ステップS22では、プリフェッチ41が主記憶30のデータをストリームバッファ42の内部キャッシュメモリ53に転送する。
【0075】
ステップS23では、ロード処理で要求されたデータがストリームバッファ42の内部キャッシュメモリ53にあるか否かを判定し、あればステップS25に進み、無ければステップS24に進む。
【0076】
ステップS24では、キャッシュミスの状態なので、プリフェッチ41が主記憶30のデータをストリームバッファ42の内部キャッシュメモリ53に転送するように要求し、データが供給されるまで待機し、データが供給されたら、ステップS25に進む。
【0077】
ステップS25では、ストリームバッファ42の内部キャッシュメモリ53からロード要求されたデータを読み出す。
【0078】
ステップS26では、ストリームバッファ42の内部キャッシュメモリ53から読み出したデータを要求したPEに送信し、ステップS21に戻る。
【0079】
以上説明したように、プリフェッチしたデータは、各PE間で共有のストリームバッファ42に格納するため、各PE間で共有されるデータについても1回の主記憶アクセスで取得可能であり、主記憶アクセスが効率化される。
【0080】
図17は、ストアバッファ43の構成を示す図である。
【0081】
第2実施形態では、プロセッサエレメント(PE)から主記憶30方向への主記憶アクセスの効率化を実現するために、各PE20−0〜20−N−1は書込動作(ストア)発生時に直接主記憶30に書き込むのではなく、ストアバッファ43を介してデータを書き込む方法をとる。
【0082】
図17に示すように、ストリームバッファ42は、調停回路61と、書き込み制御回路62と、書き込み分配回路63と、複数個のエントリ64−0〜64−N−1と、書き込み合成回路65と、を含む。図17では、2個のプロセッサエレメント(PE)20−0および20−1が調停回路61に接続されているように示しているが、実際にはすべてのプロセッサエレメント(PE)20−0〜20−N−1が接続されている。
【0083】
書き込み制御回路62は、各PEから出力される書き込みアドレスに基づいて、書き込み分配回路63がN個のエントリ64−0〜64−N−1のいずれかを選択し、PEから出力されたアドレスとデータの組を、選択したエントリ内に格納するように制御する。
【0084】
書き込み制御回路62は、1エントリが満たされたタイミングで、1エントリ単位で主記憶30への書き込みアクセスを行い、書き込みアクセスを行ったエントリを解放する。
【0085】
1エントリ内に格納されるデータが、主記憶30上で連続したアドレスとなるように、アドレスに基づいたエントリ選択を行うことにより、エントリの内容を主記憶30に書き込む際に、バースト転送等の効率的なアクセスが可能となる。
【0086】
また、ループの終了時には、最終繰り返し処理を実行したPEからの指示に基づき,ストアバッファ43内のストアデータ格納済みエントリ内のデータをすべて主記憶に書き込むというフラッシュ動作を行ことにより、PEがストアした全データが主記憶30に書き込まれることを保証する。
【0087】
図18は、ストアバッファ43の動作を示すフローチャートであり、左側のS31からS38は各PEの動作を、右側のS41からS47およびS51からS53はストアバッファ43における動作を示す。
【0088】
ステップS31で、各PE20は、ループ部分の繰り返し処理を実行する。
【0089】
ステップS32で、実行した処理の結果、ストアする(書き込む)データが発生したか否かを判定し、発生しなければステップS36に進み、発生していればステップS33に進む。
【0090】
ステップ33では、ストアバッファ43の所望のエントリが満杯(フル)であるか否かを判定し、フルであればステップS34に進み、空きがあればステップS35に進む。
【0091】
ステップS34では、ストアバッファ43の所望のエントリが空くまで待機し、ストアバッファ43から空いたことが通信されたらステップS35に進む。
【0092】
ステップS35では、ストアバッファ43に対して、データのストア処理を要求(リクエスト)し、データおよびアドレスをストアバッファ43に送信する。
【0093】
ステップS36では、終了条件判定部25が、終了条件を満たすかを判定し、満たしていなければステップS38に進み、満たしていればステップS37に進む。
【0094】
ステップS37では、終了通知を終了制御部13に出力すると共に、ストアバッファ43にフラッシュ処理を要求して処理を終了する。
【0095】
ステップS38では、終了制御部13から終了通知が出されているかを判定し、終了通知が出されていれば処理を終了し、出されていなければステップS31に戻る。
【0096】
次に、ストアバッファ43における動作を説明する。
【0097】
ステップS41で、ストリームバッファ42は、要求がストア処理かフラッシュ処理かを判定し、ストア処理の場合にはステップS42に進み、フラッシュ処理の場合にはステップS51に進む。
【0098】
ステップS42では、所望のエントリが確保されているかを判定し、確保されていなければステップS43に進み、確保されていればステップS44に進む。
【0099】
ステップS43では、エントリを確保する。
【0100】
ステップS44では、確保済みのエントリに、PEから送信されたデータおよびアドレスを格納する。
【0101】
ステップS45では、格納先のエントリが満杯であるか否かを判定し、満杯であればステップS46に進み、満杯でなければステップS41に戻る。
【0102】
ステップS46では、満杯のエントリのアドレスで主記憶30にアクセスして、データを書き込む。
【0103】
ステップS47では、出力(読み出し)が行われた上記のエントリが解放され、エントリの解放をPEに通知し、ステップS41に戻る。
【0104】
一方、ステップS41で、フラッシュ処理と判定された時には、ステップS51で、格納隅のエントリがあるか否かを判定し、あればステップS52に進み、無ければ終了する。
【0105】
ステップS52では、未格納のエントリのアドレスで主記憶30にアクセスして、データを書き込む。
【0106】
ステップS53では、出力(読み出し)が行われた上記のエントリが解放され、ステップS51に戻る。以下、未格納のエントリのすべてのデータが主記憶30に書き込まれるまでこの処理を繰り返す。
【0107】
以上説明したように、第2実施形態では、ループカウンタ値をずらしたものを並列実行しているため、ループ自体が元々メモリアクセスの局所性を有しており、並列実行している各PEがメモリ中の近い領域にアクセスする。このため、各PEが主記憶から読んだ値が周辺のプロセッサエレメントでも再利用できるため、主記憶アクセスが効率化される。
【0108】
さらに、ループの各繰り返し処理が、同一のデータを主記憶から読み出す特性を持ったループ処理の場合、プログラム中に記述したプリフェッチ指令または予測機構に基づいて、プリフェッチが各繰り返し処理に必要なデータを主記憶から、複数のPE間に共有のストリームバッファに読み出しておくことにより、さらに読み出しアクセスの効率化を図ることができる。
【0109】
また、ループの各繰り返し処理から主記憶への書き込みアドレスに局所性がある場合、PE間で共有のストアバッファに、書き込みアドレスとデータを格納し、ほかのPEの書き込みデータとまとめることにより、書き込みアクセスの効率化を図ることができる。
【0110】
図19は、第2実施形態のマルチコアプロセッサが、図11に示したループ部分の繰り返し処理を並列に行う動作を説明する図である。ここでは、PEが4個の例を示している。
【0111】
図19に示すように、ロード、演算およびストアを含む一連の繰り返し処理を、複数のデータについて行う場合を考える。1回の繰り返し処理の命令実行時間をT、データ数をPとすると、逐次処理では1つの繰り返し処理をP回繰り返すので、処理時間はT×Pになる。
【0112】
これに対して、PEを4個使用して繰り返し処理を並列に行う場合を考える。ただし、繰り返し処理を並列に行うには、並列に行う4つの処理に必要な4組のデータも並列に供給可能で、処理結果の4組のデータも並列に出力可能であることが必要である。もし、データの供給および出力が、同じ速度で並列に行えないと、4倍の速度で処理することはできない。
【0113】
第2実施形態では、上記のように、ストリームバッファ42およびストアバッファ43を使用して、PEへのデータ供給およびPEからのデータ出力を並列に行えるようにしている。
【0114】
図19に示すように、入力データが画像データの場合、4個のPEは、1画素ずつずれた隣接画素群のデータを処理に使用する。このような隣接画素群のデータは、スキャンなどにより、主記憶に連続してアクセスして読み出すことが可能である。そこで、プリフェッチ処理で、このような隣接画素群のデータを連続して読み出して、ストリームバッファ42に格納する。この場合、1画素ずつずらすので、図19に示すように、タイムラグが発生する。4個のPE用のデータが揃ったら、4個のPEは同時に並列で4つの画素についてそれぞれ処理を行う。4個のPEが処理を行っている間に、次の4つずれた画素の隣接画素群のデータを供給して準備しておく。
【0115】
一方、4個のPEで処理した結果である出力データは、並列にストアバッファに出力され、次のデータが出力されるまでに主記憶に書き込まれる。この場合も、1画素ずつずれてデータが書き込まれるので、画像をスキャンするように書き込むことになる。
【0116】
いずれにしろ、以上のようにして、ループ部分の処理を、PEの個数、すなわち4倍に近い高速で行えるようになる。
【0117】
図20は、第3実施形態のマルチコアプロセッサの構成を示す図である。第3実施形態のマルチコアプロセッサは、対称な構成の複数のプロセッサエレメント(PE)20−0〜20−N−1を含み、いずれかのPEがメインプロセッサとして動作することが、第2実施形態のマルチコアプロセッサと異なり、他の部分は同じである。
【0118】
各PEは、展開制御部12、終了制御部13、命令バッファ21および終了条件検出回路25を含み、いずれもメインプロセッサとして動作可能である。
【0119】
いずれかのPEがメインプロセッサとして動作し、並列処理可能なループを検出した時に、メインプロセッサとして動作するPEの展開制御部12が動作し、汎用のバス31を介して他のPEに命令および内部状態を分配する。各PEは、それぞれ繰り返し処理の1つの処理を並列に実行し、いずれかのPEがループの終了条件を検出した際に、メインプロセッサの終了制御への終了通知を行う。終了通知を受けたメインプロセッサの終了制御は、最終繰り返し処理より後の処理返し処理を実行しているPEを停止させ、また最終繰り返し処理を実行していたPEより内部状態のデータを得て、自分のPEの内部状態に反映させた後、逐次実行に復帰する。
【0120】
以上第1から第3実施形態を説明したが、各実施形態で説明した事項は、他の実施形態に適用することが可能であり、説明した以外にも各種の変形例が可能である。
【0121】
例えば、第3実施形態では、N個のPEが設けられている場合、N個のPEをすべてループ部分の繰り返し処理に使用したが、一部のPEを使用し、残りのPEは他の処理に使用することも可能である。メインプロセッサを含む複数のPEが、独立したスレッドを実行している時に、あるPEが並列実行可能なループ部分を検出し、他のPEにループ部分の繰り返し処理を分担して並列に実行するように要求する。展開要求を受けたPEが、展開要求元のスレッドより高い優先度のスレッドを実行している場合には、展開要求を拒否し、独立してスレッド実行を続行し、より低い優先度のスレッドを実行している場合のみ展開要求を受け付ける。そして、展開要求を出したPEおよび展開要求を受け付けたPEにのみループ部分を展開して、各繰り返し処理(イタレーション)の並列実行を行う。
【0122】
以上説明したように、実施形態によれば、SIMD法を実行するマルチプロセッサ(マルチコアプロセッサ)と比較して、ループを構成する命令は逐次実行の命令のままでよく、入力データの参照、入力データ間の演算の自由度が高いためプログラマビリティが高い。
【0123】
また、パイプライン方式のプロセッサでは最大の並列度がループの長さに依存していたのに対して、実施形態のマルチコアプロセッサではプロセッサエレメント(PE)数を増加させることで、並列度を向上させることができ、スケーラビリティを高くすることが可能である。
【0124】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではなく、明細書のそのような例の構成は発明の利点および欠点を示すものではない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【0125】
以下、実施形態に関し、更に以下の付記を開示する。
(付記1)
メインプロセッサを含む複数個のプロセッサエレメントを備え、逐次処理プログラムを実行するマルチコアプロセッサであって、
前記メインプロセッサは、前記逐次処理プログラムに含まれる並列化可能なループ部分を検出するループ部分検出部を備え、
前記マルチコアプロセッサは、前記ループ部分検出部が前記ループ部分を検出した時に、前記複数個のプロセッサエレメントが前記ループ部分を命令バッファにコピーするように制御すると共に、前記複数個のプロセッサエレメントのループカウンタの初期値を各プロセッサエレメントごとにずらして格納し、さらに前記複数個のプロセッサエレメントのループカウンタの更新量を前記複数個のプロセッサエレメントの個数に応じて設定する展開制御部と、を備え、
前記メインプロセッサは、前記逐次処理プログラムに含まれる前記ループ部分の処理を、前記複数個のプロセッサエレメントに実行させ、
前記複数個のプロセッサエレメントは、ループ外処理への変更が発生したら終了通知を出力し、
前記メインプロセッサは、前記複数個のプロセッサエレメントのうちのいずれか1個が前記終了通知を出力した際に、終了通知を出力したプロセッサエレメントより前のループカウンタ値に対して処理を行っているすべてのプロセッサエレメントの現在処理中のループ部分の終了を待ち、終了通知を出力したプロセッサエレメントより後ろのループカウンタ値に対して処理を行っているプロセッサエレメントのループ部分の処理を終了させ、前記逐次処理プログラムの処理を続行することを特徴とするマルチコアプロセッサ。
(付記2)
前記メインプロセッサが、実行中の前記ループ部分の処理の中断を指示すると、前記ループ部分の処理を実行中の前記複数個のプロセッサエレメントは、実行中の前記ループ部分の1ステップを完了すると前記終了通知を出力すると共に処理を停止し、
前記マルチコアプロセッサは、すべての前記複数個のプロセッサエレメントからの前記終了通知を受信した後、前記複数個のプロセッサエレメントの内部状態の情報を取得して、前記ループ部分の処理のうち完了している先頭のステップ位置を検出する終了制御部を備え、
前記メインプロセッサは、前記終了制御部の検出した前記先頭のステップ位置を記憶する内部状態を示すレジスタを備え、中断した前記ループ部分の処理を再開する時には、前記ループ処理位置レジスタに記憶された前記先頭のステップ位置の次から前記ループ部分の処理を実行するように、前記展開制御部に情報を提供する付記1に記載のマルチコアプロセッサ。
(付記3)
前記メインプロセッサおよび前記複数個のプロセッサエレメントは、内部状態を示すレジスタに書き込みを行うとオンとなるフラグを含み、
前記フラグは、前記展開制御部が前記複数個のプロセッサエレメントに設定動作を行うとすべてオフとなり、
前記終了制御部は、終了制御動作時に、最終の繰り返し処理を実行したプロセッサエレメントから順に繰り返し処理を分配した方向とは逆方向に、前記メインプロセッサの前記フラグがオフである前記レジスタのフラグを調べ、オンであるレジスタに対応する前記メインプロセッサのレジスタのフラグをオンすることにより、前記先頭のステップ位置を前記メインプロセッサの前記レジスタに設定する付記2に記載のマルチコアプロセッサ。
(付記4)
前記複数個のプロセッサエレメントが処理に使用するデータを格納する共有メモリ形式のストリームバッファと、
前記ループ部分の処理で使用するデータから順に主記憶からのプリフェッチを行い、プリフェッチしたデータを、前記ループ部分の処理順を保持しながら前記ストリームバッファに格納するプリフェッチと、を備える付記2または3に記載のマルチコアプロセッサ。
(付記5)
前記プリフェッチは、前記複数個のプロセッサエレメントにおける前記ループ部分の処理の実行に合わせて、各プロセッサエレメントと同期しながら、各プロセッサエレメントが使用するデータを前記主記憶からプリフェッチして前記ストリームバッファに格納する付記4に記載のマルチコアプロセッサ。
(付記6)
前記複数個のプロセッサエレメントが処理した処理済みデータを格納する共有メモリ形式のストアバッファを備え、
前記ストアバッファは、格納された前記処理済みデータを、主記憶に書き込むのに適した量に達したら前記主記憶に書き込む付記2から5のいずれかに記載のマルチコアプロセッサ。
(付記7)
前記ストアバッファは、前記複数個のプロセッサエレメントが前記処理済みデータを書き込む各書き込み領域に対応して設けられたフラグを備え、各プロセッサエレメントからの書き込み時点では前記フラグをオフに、前記主記憶に書き込むのに適した量に達した時に前記フラグをオンに変化させ、
前記フラグがオンの前記書き込み領域のデータを前記主記憶に格納し、
前記終了制御部が、すべての前記複数個のプロセッサエレメントからの前記終了通知を受信した時に、前記フラグがオフの前記書き込み領域のデータを消去する付記6に記載のマルチコアプロセッサ。
(付記8)
前記展開制御部および前記終了制御部の少なくとも1つは、前記メインプロセッサに設けられる付記2から7のいずれかに記載のマルチコアプロセッサ。
(付記9)
前記メインプロセッサおよび前記複数個のプロセッサエレメントは、同等の複数個のベースプロセッサであり、前記複数個のベースプロセッサのうちの任意の1個が前記メインプロセッサとして動作する付記2から8のいずれかに記載のマルチコアプロセッサ。
(付記10)
前記複数個のプロセッサエレメントは、独立したスレッドを並列に実行可能であり、
前記複数個のプロセッサエレメントから選択された2個以上のプロセッサエレメントが、1つの前記ループ部分の処理を実行する付記2から9のいずれかに記載のマルチコアプロセッサ。
【符号の説明】
【0126】
10、10’ メインプロセッサ
11 ループ部分検出部
12 展開制御部
13 終了制御部
14 レジスタファイル
20−0〜20−N−1 プロセッサエレメント(PE)
30 主記憶
31 バス
【特許請求の範囲】
【請求項1】
メインプロセッサを含む複数個のプロセッサエレメントを備え、逐次処理プログラムを実行するマルチコアプロセッサであって、
前記メインプロセッサは、前記逐次処理プログラムに含まれる並列化可能なループ部分を検出するループ部分検出部を備え、
前記マルチコアプロセッサは、前記ループ部分検出部が前記ループ部分を検出した時に、前記複数個のプロセッサエレメントが前記ループ部分を命令バッファにコピーするように制御すると共に、前記複数個のプロセッサエレメントのループカウンタの初期値を各プロセッサエレメントごとにずらして格納し、さらに前記複数個のプロセッサエレメントのループカウンタの更新量を前記複数個のプロセッサエレメントの個数に応じて設定する展開制御部と、を備え、
前記メインプロセッサは、前記逐次処理プログラムに含まれる前記ループ部分の処理を、前記複数個のプロセッサエレメントに実行させ、
前記複数個のプロセッサエレメントは、ループ外処理への変更が発生したら終了通知を出力し、
前記メインプロセッサは、前記複数個のプロセッサエレメントのうちのいずれか1個が前記終了通知を出力した際に、終了通知を出力したプロセッサエレメントより前のループカウンタ値に対して処理を行っているすべてのプロセッサエレメントの現在処理中のループ部分の終了を待ち、終了通知を出力したプロセッサエレメントより後ろのループカウンタ値に対して処理を行っているプロセッサエレメントのループ部分の処理を終了させ、前記逐次処理プログラムの処理を続行することを特徴とするマルチコアプロセッサ。
【請求項2】
前記メインプロセッサが、実行中の前記ループ部分の処理の中断を指示すると、前記ループ部分の処理を実行中の前記複数個のプロセッサエレメントは、実行中の前記ループ部分の1ステップを完了すると前記終了通知を出力すると共に処理を停止し、
前記マルチコアプロセッサは、すべての前記複数個のプロセッサエレメントからの前記終了通知を受信した後、前記複数個のプロセッサエレメントの内部状態の情報を取得して、前記ループ部分の処理のうち完了している先頭のステップ位置を検出する終了制御部を備え、
前記メインプロセッサは、前記終了制御部の検出した前記先頭のステップ位置を記憶する内部状態を示すレジスタを備え、中断した前記ループ部分の処理を再開する時には、前記ループ処理位置レジスタに記憶された前記先頭のステップ位置の次から前記ループ部分の処理を実行するように、前記展開制御部に情報を提供する請求項1に記載のマルチコアプロセッサ。
【請求項3】
前記複数個のプロセッサエレメントが処理に使用するデータを格納する共有メモリ形式のストリームバッファと、
前記ループ部分の処理で使用するデータから順に主記憶からのプリフェッチを行い、プリフェッチしたデータを、前記ループ部分の処理順を保持しながら前記ストリームバッファに格納するプリフェッチと、を備える請求項2に記載のマルチコアプロセッサ。
【請求項4】
前記複数個のプロセッサエレメントが処理した処理済みデータを格納する共有メモリ形式のストアバッファを備え、
前記ストアバッファは、格納された前記処理済みデータを、主記憶に書き込むのに適した量に達したら前記主記憶に書き込む請求項2または3に記載のマルチコアプロセッサ。
【請求項5】
前記展開制御部および前記終了制御部の少なくとも1つは、前記メインプロセッサに設けられる請求項2から4のいずれか1項に記載のマルチコアプロセッサ。
【請求項1】
メインプロセッサを含む複数個のプロセッサエレメントを備え、逐次処理プログラムを実行するマルチコアプロセッサであって、
前記メインプロセッサは、前記逐次処理プログラムに含まれる並列化可能なループ部分を検出するループ部分検出部を備え、
前記マルチコアプロセッサは、前記ループ部分検出部が前記ループ部分を検出した時に、前記複数個のプロセッサエレメントが前記ループ部分を命令バッファにコピーするように制御すると共に、前記複数個のプロセッサエレメントのループカウンタの初期値を各プロセッサエレメントごとにずらして格納し、さらに前記複数個のプロセッサエレメントのループカウンタの更新量を前記複数個のプロセッサエレメントの個数に応じて設定する展開制御部と、を備え、
前記メインプロセッサは、前記逐次処理プログラムに含まれる前記ループ部分の処理を、前記複数個のプロセッサエレメントに実行させ、
前記複数個のプロセッサエレメントは、ループ外処理への変更が発生したら終了通知を出力し、
前記メインプロセッサは、前記複数個のプロセッサエレメントのうちのいずれか1個が前記終了通知を出力した際に、終了通知を出力したプロセッサエレメントより前のループカウンタ値に対して処理を行っているすべてのプロセッサエレメントの現在処理中のループ部分の終了を待ち、終了通知を出力したプロセッサエレメントより後ろのループカウンタ値に対して処理を行っているプロセッサエレメントのループ部分の処理を終了させ、前記逐次処理プログラムの処理を続行することを特徴とするマルチコアプロセッサ。
【請求項2】
前記メインプロセッサが、実行中の前記ループ部分の処理の中断を指示すると、前記ループ部分の処理を実行中の前記複数個のプロセッサエレメントは、実行中の前記ループ部分の1ステップを完了すると前記終了通知を出力すると共に処理を停止し、
前記マルチコアプロセッサは、すべての前記複数個のプロセッサエレメントからの前記終了通知を受信した後、前記複数個のプロセッサエレメントの内部状態の情報を取得して、前記ループ部分の処理のうち完了している先頭のステップ位置を検出する終了制御部を備え、
前記メインプロセッサは、前記終了制御部の検出した前記先頭のステップ位置を記憶する内部状態を示すレジスタを備え、中断した前記ループ部分の処理を再開する時には、前記ループ処理位置レジスタに記憶された前記先頭のステップ位置の次から前記ループ部分の処理を実行するように、前記展開制御部に情報を提供する請求項1に記載のマルチコアプロセッサ。
【請求項3】
前記複数個のプロセッサエレメントが処理に使用するデータを格納する共有メモリ形式のストリームバッファと、
前記ループ部分の処理で使用するデータから順に主記憶からのプリフェッチを行い、プリフェッチしたデータを、前記ループ部分の処理順を保持しながら前記ストリームバッファに格納するプリフェッチと、を備える請求項2に記載のマルチコアプロセッサ。
【請求項4】
前記複数個のプロセッサエレメントが処理した処理済みデータを格納する共有メモリ形式のストアバッファを備え、
前記ストアバッファは、格納された前記処理済みデータを、主記憶に書き込むのに適した量に達したら前記主記憶に書き込む請求項2または3に記載のマルチコアプロセッサ。
【請求項5】
前記展開制御部および前記終了制御部の少なくとも1つは、前記メインプロセッサに設けられる請求項2から4のいずれか1項に記載のマルチコアプロセッサ。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【公開番号】特開2011−204208(P2011−204208A)
【公開日】平成23年10月13日(2011.10.13)
【国際特許分類】
【出願番号】特願2010−73676(P2010−73676)
【出願日】平成22年3月26日(2010.3.26)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成23年10月13日(2011.10.13)
【国際特許分類】
【出願日】平成22年3月26日(2010.3.26)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]