(57)【要約】【課題】各プロセッサコアで実行されるプログラムのサイズを増大させずに、簡易な構成でプロセッサコア間の同期をとることができるマルチコアプロセッサを提供する。【解決手段】プロセッサコア１０，２０，３０，４０と、自己に対応するプロセッサコアで実行されるプログラムのアドレス値を保持するプログラムカウンタ１１と、自己に対応するプロセッサコアから指定された同期相手のプロセッサコアに対応するプログラムカウンタ１１の値と同期先のプログラムの実行に先行して同期相手のプロセッサコアで実行される同期元のプログラムの最終プログラムアドレス値との比較結果に応じて、自己に対応するプロセッサコアによる同期先のプログラムの実行可否を制御するプログラムカウンタ監視部１３，２３，３３，４３とを備える。【選択図】図１
2009075948.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサコアと、
前記複数のプロセッサコアのそれぞれに対応して設けられ、自己に対応するプロセッサコアで実行されるプログラムのアドレス値を保持するプログラムカウンタと、
前記複数のプロセッサコアのそれぞれに対応して設けられ、自己に対応するプロセッサコアから指定された同期相手のプロセッサコアに対応するプログラムカウンタの値と同期先のプログラムの実行に先行して前記同期相手のプロセッサコアで実行される同期元のプログラムのアドレス値との比較結果に応じて、前記自己に対応するプロセッサコアによる前記同期先のプログラムの実行可否を制御するプログラムカウンタ監視部とを備えたマルチコアプロセッサ。
【請求項２】
プログラムカウンタ監視部は、自己に対応するプロセッサコアから指定されたプロセッサコアの識別番号及びこのプロセッサコアで実行される同期元のプログラムのアドレス値を保持するレジスタと、前記レジスタから前記識別番号及び前記同期元のプログラムのアドレス値を取得し、前記識別番号のプロセッサコアに対応するプログラムカウンタの値と前記同期元のプログラムのアドレス値との比較結果に応じて、前記自己に対応するプロセッサコアによる同期先のプログラムの実行可否を制御する監視実行部とを備えたことを特徴とする請求項１記載のマルチコアプロセッサ。
【請求項３】
プロセッサコアは、プロセッサコアの識別番号及びこのプロセッサコアで実行される同期元のプログラムのアドレス値が設定された専用命令を実行することにより、前記識別番号及び前記同期元のプログラムのアドレス値を、監視情報として自己に対応するプログラムカウンタ監視部に出力し、
前記プログラムカウンタ監視部は、前記プロセッサコアから入力した監視情報で指定された前記識別番号のプロセッサコアに対応するプログラムカウンタの値と前記同期元のプログラムのアドレス値との比較結果に応じて、前記自己に対応するプロセッサコアによる同期先のプログラムの実行可否を制御する監視実行部を備えたことを特徴とする請求項１記載のマルチコアプロセッサ。
【請求項４】
プロセッサコアは、ベース値が設定されるベースアドレスレジスタと、自己に対応するプログラムカウンタの値から前記ベースアドレスレジスタのベース値を減算したオフセット値を、前記自己に対応するプログラムカウンタの値として自己以外に対応するプログラムカウンタ監視部へ出力するオフセット計算部とを備え、
前記プログラムカウンタ監視部は、自己に対応するプロセッサコアによる同期先のプログラムの実行可否を制御するにあたり、前記ベース値で規定されるオフセット値で表されたプログラムカウンタの値と同期元のプログラムのアドレス値とを比較することを特徴とする請求項１から請求項３のうちのいずれか１項記載のマルチコアプロセッサ。
【請求項５】
複数のプロセッサコアのそれぞれに対応して設けられ、自己に対応するプロセッサコアで分岐命令を実行するにあたり、分岐前のプログラムカウンタの値を分岐から復帰するまで保持するカウンタ値保持部を備えたことを特徴とする請求項１から請求項４のうちのいずれか１項記載のマルチコアプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数のプロセッサコアで情報処理を行うマルチコアプロセッサに関するものである。
【背景技術】
【０００２】
マルチコアプロセッサでは、各プロセッサコアが個別に処理を行いながら１つのプログラムを実行することができる。この場合、上記プログラムを複数に分割して各プロセッサコアに割り当てておく必要がある。プログラムの分割方法としては、１つのプログラムを自動並列化コンパイラで自動的に分割する方法の他、プログラム作者が各プロセッサコアで実行する処理間の連携を考慮して複数のプログラムに分割する方法等がある。しかしながら、いずれの方法で作成したプログラムにおいても、プログラム作者が意図した動きを実現するには、プロセッサコア間でのデータの授受や処理タイミングの同期をとる必要がある。
【０００３】
プロセッサコア間の同期をとる技術としては、例えば特許文献１や特許文献２に開示される、バリア同期と呼ばれる同期方式がある。この同期方式では、全てのプロセッサコアが一定の処理段階（バリア）に達したことが保証された時点で、各プロセッサコアが次の処理段階へ進むように制御される。
【０００４】
また、特許文献３には、同期元プロセッサコアと同期先プロセッサコアという対応関係が予め設定されたプロセッサコア間での同期方式が記載されている。この同期方式は、バリア同期のようにプロセッサコア間の実行状況を保証するものではない。具体的には、同期元プロセッサコアが、共有レジスタ等の共有領域の値をインクリメント若しくはデクリメントし、同期先プロセッサコアが、ローカル領域に格納している値と上記共有領域の値とを比較した結果に応じて同期元プロセッサコアの動作と同期をとっている。
【０００５】
近年では、情報処理の高速化の観点からマルチコアプロセッサのプロセッサコア数を増加させる傾向がある。このように多くのプロセッサコアを搭載して効率よく処理を実行するには、各プロセッサコアの処理量を平均化する必要があり、各プロセッサコアで実行されるプログラムのサイズをさらに小さくする傾向が強まっている。このため、プロセッサコア間で連携すべき処理が多くなり、同期処理を必要とする箇所が増加している。
【０００６】
【特許文献１】特開平７−２３４８４１号公報
【特許文献２】特開２０００−２１５１８２号公報
【特許文献３】特開平９−３０５５４６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来のマルチコアプロセッサは、同期に関わる全てのプロセッサコアで実行されるプログラムに同期のための処理を追加しなければならない。つまり、同期元プロセッサコアで実行するプログラムと同期先プロセッサコアで実行するプログラムの双方に同期のための処理を記述する必要がある。このため、各プロセッサコアで実行されるプログラムのサイズが増大し、実行時間が増加するという課題があった。
【０００８】
この発明は、上記のような課題を解決するためになされたもので、各プロセッサコアで実行されるプログラムのサイズを増大させずに、簡易な構成でプロセッサコア間の同期をとることができるマルチコアプロセッサを得ることを目的とする。
【課題を解決するための手段】
【０００９】
この発明に係るマルチコアプロセッサは、複数のプロセッサコアと、複数のプロセッサコアのそれぞれに対応して設けられ、自己に対応するプロセッサコアで実行されるプログラムのアドレス値を保持するプログラムカウンタと、複数のプロセッサコアのそれぞれに対応して設けられ、自己に対応するプロセッサコアから指定された同期相手のプロセッサコアに対応するプログラムカウンタの値と同期先のプログラムの実行に先行して同期相手のプロセッサコアで実行される同期元のプログラムのアドレス値との比較結果に応じて、自己に対応するプロセッサコアによる同期先のプログラムの実行可否を制御するプログラムカウンタ監視部とを備えるものである。
【発明の効果】
【００１０】
この発明によれば、複数のプロセッサコアと、複数のプロセッサコアのそれぞれに対応して設けられ、自己に対応するプロセッサコアで実行されるプログラムのアドレス値を保持するプログラムカウンタと、複数のプロセッサコアのそれぞれに対応して設けられ、自己に対応するプロセッサコアから指定された同期相手のプロセッサコアに対応するプログラムカウンタの値と同期先のプログラムの実行に先行して同期相手のプロセッサコアで実行される同期元のプログラムのアドレス値との比較結果に応じて、自己に対応するプロセッサコアによる同期先のプログラムの実行可否を制御するプログラムカウンタ監視部とを備えたので、同期元のプログラムを実行するプロセッサコアに同期のための特別な処理を追加することなく、同期元のプログラムの実行状況に応じてプロセッサコア間で同期をとることができるという効果がある。
【発明を実施するための最良の形態】
【００１１】
実施の形態１．
図１は、この発明の実施の形態１によるマルチコアプロセッサの構成を示すブロック図である。図１において、実施の形態１のマルチコアプロセッサ１は、プロセッサコア１０，２０，３０，４０及びプログラムカウンタ監視部１３，２３，３３，４３を備える。また、プロセッサコア１０，２０，３０，４０は、それぞれプログラムカウンタ１１及び実行部１２を備える。プログラムカウンタ１１には、実行部１２で実行されるプログラムのアドレスが保持される。なお、この実施の形態１では、原則として実行部１２がアドレスを昇順にプログラムを実行するものとする。
【００１２】
実行部１２は、自己を備えるプロセッサコアに割り当てられたプログラムを実行する構成要素であり、プログラムカウンタ監視部から通知される停止要求及びその解除要求に従ってプログラムの実行停止及び実行開始が制御される。また、実行部１２は、自己を備えるプロセッサコアと同期して動作する他のプロセッサコアの実行部１２において、自己が実行するプログラムを同期先として先行処理される同期元のプログラムの最終プログラムアドレス値を保持しており、上記同期先のプログラムを実行する直前に上記他のプロセッサコアの識別番号及び上記同期元のプログラムの最終プログラムアドレス値をプログラムカウンタ監視部に通知する。
【００１３】
プログラムカウンタ監視部１３，２３，３３，４３は、プロセッサコア１０，２０，３０，４０のそれぞれに対応して設けられ、自己に対応するプロセッサコアに搭載された実行部１２とデータ送受可能に接続される。また、プログラムカウンタ監視部１３，２３，３３，４３は、実行部１２が自己と接続していないプロセッサコアのプログラムカウンタ１１と接続しており、その値を読み込むことが可能である。
【００１４】
このように、プログラムカウンタ監視部１３，２３，３３，４３は、各プロセッサコア１０，２０，３０，４０の周辺回路としてそれぞれ設けられており、自己に対応するプロセッサコア以外のプロセッサコアに搭載されたプログラムカウンタ１１の値を監視する。また、プログラムカウンタ監視部１３，２３，３３，４３は、プログラムカウンタ１１の監視結果に応じて、プログラム実行の停止要求及びその解除要求を対応するプロセッサコアの実行部１２に通知する。
【００１５】
例えば、プログラムカウンタ監視部１３は、上述したアドレス情報等の監視に必要な情報をプロセッサコア１０の実行部１２から取得してプロセッサコア２０，３０，４０のプログラムカウンタ１１の値を監視し、その監視結果に応じてプログラム実行の停止要求及びその解除要求をプロセッサコア１０の実行部１２に通知する。
【００１６】
図２は、図１中のプロセッサコアで実行されるプログラム及びプログラム間の依存関係を説明するための図である。図２において、プログラム２１０，２２０，２３０，２４０は、マルチコアプロセッサ１で実行する１つのプログラムを分割したプログラムであり、プロセッサコア１０，２０，３０，４０でそれぞれ実行される。プロセッサコア１０の実行部１２で実行されるプログラム２１０は、部分プログラム２１１を含んで構成される。また、プロセッサコア２０の実行部１２で実行されるプログラム２２０は、部分プログラム２２１，２２２，２２３を含んで構成される。
【００１７】
図２において、部分プログラム２２１，２２２，２２３は、部分プログラム２２３、部分プログラム２２１、部分プログラム２２２の順でアドレスが昇順となるようにメモリに格納されている。プロセッサコア２０の実行部１２は、上記メモリからアドレスを昇順に部分プログラムを読み込んで実行することにより、図２中で矢印で示すように、部分プログラム２２３、部分プログラム２２１、部分プログラム２２２の順で、プログラム２２０を実行する。
【００１８】
また、プロセッサコア１０の実行部１２で実行される部分プログラム２１１は、プロセッサコア２０の実行部１２で実行される部分プログラム２２１との間で依存関係２５０が設定されている。この依存関係２５０は、部分プログラム２２１の実行終了後に部分プログラム２１１を実行すること、つまり同期相手のプロセッサコア２０による部分プログラム２２１の先行処理が終了した後に、プロセッサコア１０で部分プログラム２１１を実行する実行順の依存関係があることを示している。なお、依存関係２５０に関する情報としては、同期元の部分プログラム２２１を実行するプロセッサコア２０の識別番号及び部分プログラム２２１の最終プログラムアドレス値があり、同期先の部分プログラム２１１を実行するプロセッサコア１０の実行部１２に保持される。
【００１９】
図３は、図１中のプロセッサコアで実行されるプログラム、プログラム間の依存関係及び分岐処理を説明するための図である。図３において、プログラム３１０，３２０は、マルチコアプロセッサ１で実行する１つのプログラムを分割したプログラムであり、プロセッサコア１０，２０でそれぞれ実行される。プロセッサコア１０の実行部１２で実行されるプログラム３１０は、部分プログラム３１１，３１２，３１３，３１４を含んで構成される。また、プロセッサコア２０の実行部１２で実行されるプログラム３２０は、部分プログラム３２１，３２２，３２３を含んで構成される。
【００２０】
図２の場合と同様に、部分プログラム３１１，３１２，３１３，３１４は、部分プログラム３１１、部分プログラム３１２、部分プログラム３１３、部分プログラム３１４の順でアドレスが昇順となるようにメモリに格納される。プロセッサコア１０の実行部１２は、上記メモリからアドレスを昇順に部分プログラムを読み込んで実行することにより、図３中で矢印で示すように、部分プログラム３１１、部分プログラム３１２、部分プログラム３１３、部分プログラム３１４の順で、プログラム３１０を実行する。
【００２１】
なお、部分プログラム３１４は最終プログラムアドレスに分岐命令を含んで構成されており、部分プログラム３１４の実行が終了した時点で部分プログラム３１１の実行に分岐する。これにより、プロセッサコア１０のプログラムカウンタ１１の値は、最も大きい部分プログラム３１４の最終プログラムアドレス値から、最も小さい部分プログラム３１１の開始プログラムアドレス値になる。
【００２２】
また、部分プログラム３２１，３２２，３２３についても、部分プログラム３２１、部分プログラム３２２、部分プログラム３２３の順でアドレスが昇順となるようにメモリに格納される。プロセッサコア２０の実行部１２は、上記メモリからアドレスを昇順に部分プログラムを読み込んで実行することにより、図３中で矢印で示すように、部分プログラム３２１、部分プログラム３２２、部分プログラム３２３の順で、プログラム３２０を実行する。
【００２３】
部分プログラム３１４と同様に、部分プログラム３２３も最終プログラムアドレスに分岐命令を含んで構成されており、部分プログラム３２３の実行が終了した時点で部分プログラム３２１の実行に分岐する。この場合、プロセッサコア２０のプログラムカウンタ１１の値は、最も大きい部分プログラム３２３の最終プログラムアドレス値から最も小さい部分プログラム３２１の開始プログラムアドレス値になる。
【００２４】
プロセッサコア１０の実行部１２で実行される部分プログラム３１２，３１４は、プロセッサコア２０の実行部１２で実行される部分プログラム３２１，３２２との間で依存関係３００，３０２がそれぞれ設定されている。また、プロセッサコア２０の実行部１２で実行される部分プログラム３２３は、プロセッサコア１０の実行部１２で実行される部分プログラム３１２との間で依存関係３０１が設定されている。
【００２５】
依存関係３００，３０２は、部分プログラム３２１，３２２の実行終了後に部分プログラム３１２，３１４を実行することを示している。依存関係３００，３０２に関する情報としては、同期元の部分プログラム３２１，３２２を実行するプロセッサコア２０の識別番号及び部分プログラム３２１，３２２の最終プログラムアドレス値があり、同期先の部分プログラム３１２，３１４を実行するプロセッサコア１０の実行部１２に保持される。
【００２６】
また、依存関係３０１は、部分プログラム３１２の実行終了後に部分プログラム３２３を実行すること、つまりプロセッサコア１０による部分プログラム３１２の先行処理が終了した後にプロセッサコア２０で部分プログラム３２３を実行する実行順の依存関係があることを示している。なお、依存関係３０１に関する情報としては、同期元の部分プログラム３１２を実行するプロセッサコア１０の識別番号及び部分プログラム３１２の最終プログラムアドレス値があり、同期先の部分プログラム３２３を実行するプロセッサコア２０の実行部１２に保持される。
【００２７】
次に動作について説明する。
図１及び図２を用いてアドレスを昇順にプログラムを実行する場合の動作を説明する。
プロセッサコア１０，２０，３０，４０の実行部１２は、それぞれに割り当てられたプログラム２１０，２２０，２３０，２４０を実行する。ここで、各プロセッサコア１０，２０，３０，４０の実行部１２は、上記メモリからアドレスを昇順に各プログラムを読み込んで実行する。
【００２８】
図２に示すように、部分プログラム２２１には、プロセッサコア１０で実行される部分プログラム２１１との間で依存関係２５０が設定されている。プロセッサコア１０の実行部１２は、この依存関係２５０において同期先となる部分プログラム２１１の実行直前にプロセッサコア２０の識別番号及び同期元の部分プログラム２２１の最終プログラムアドレス値を依存関係２５０に関する情報としてプログラムカウンタ監視部１３に通知する。
【００２９】
プログラムカウンタ監視部１３は、依存関係２５０に関する情報に含まれる識別番号で特定したプロセッサコア２０のプログラムカウンタ１１の値を参照し、この値と依存関係２５０に関する情報に含まれる部分プログラム２２１の最終プログラムアドレス値とを比較する。ここで、プロセッサコア２０のプログラムカウンタ１１の値が依存関係２５０に関する情報で特定された部分プログラム２２１の最終プログラムアドレス値よりも小さいと、プログラムカウンタ監視部１３は、プロセッサコア２０の実行部１２が部分プログラム２２１の実行を終了していないと判断して、プロセッサコア１０の実行部１２に停止要求を通知する。
【００３０】
プロセッサコア１０の実行部１２は、上記停止要求を受けると、プログラム２１０の実行を一時停止する。この後、プログラムカウンタ監視部１３は、プロセッサコア２０のプログラムカウンタ１１の値を逐次参照して上述の比較処理を継続する。この比較結果で部分プログラム２２１の実行が終了したと判定されるまで、プログラムカウンタ監視部１３は、プロセッサコア１０の実行部１２へ停止要求を出力し続ける。これにより、プロセッサコア１０の実行部１２は、部分プログラム２２１の実行が終了するまで部分プログラム２１１の実行待機状態となる。
【００３１】
上記比較処理において、プロセッサコア２０のプログラムカウンタ１１の値が依存関係２５０に関する情報で特定された部分プログラム２２１の最終プログラムアドレス値よりも大きくなると、プログラムカウンタ監視部１３は、プロセッサコア２０の実行部１２が部分プログラム２２１の実行を終了したものと判断して、プロセッサコア１０の実行部１２に上記停止要求の解除要求を通知する。プロセッサコア１０の実行部１２では、上記解除要求を受けると、プログラム２１０の実行を再開し、部分プログラム２１１の実行を開始する。このようにして、プロセッサコア２０の実行部１２が実行する部分プログラム２２１とプロセッサコア１０の実行部１２が実行する部分プログラム２１１との間の処理順序に関する依存関係２５０を満足することができる。
【００３２】
次に、図３に示す例を用いて動作を説明する。
図３において、依存関係３００で同期先となるプロセッサコア１０の実行部１２は、図２の場合と同様にして、部分プログラム３１２の実行直前に、プロセッサコア２０の識別番号及び同期元の部分プログラム３２１の最終プログラムアドレス値を、依存関係３００に関する情報としてプログラムカウンタ監視部１３に通知する。
【００３３】
プログラムカウンタ監視部１３は、依存関係３００に関する情報に含まれる識別番号を用いて特定したプロセッサコア２０のプログラムカウンタ１１の値を参照し、この値と依存関係３００に関する情報に含まれる部分プログラム３２１の最終プログラムアドレス値とを比較する。ここで、プロセッサコア２０のプログラムカウンタ１１の値が、依存関係３００に関する情報で特定された部分プログラム３２１の最終プログラムアドレス値より小さいと、プログラムカウンタ監視部１３は、プロセッサコア２０の実行部１２が部分プログラム３２１の実行を終了していないと判断し、プロセッサコア１０の実行部１２に停止要求を通知する。
【００３４】
プロセッサコア１０の実行部１２は、上記停止要求を受けると、プログラム３１０の実行を一時停止する。これにより、プロセッサコア１０の実行部１２は、部分プログラム３２１の実行が終了するまで、部分プログラム３１２の実行待機状態となる。この後、プログラムカウンタ監視部１３は、プロセッサコア２０のプログラムカウンタ１１の値を逐次参照して、上述の比較処理を継続する。
【００３５】
上記比較処理において、プロセッサコア２０のプログラムカウンタ１１の値が依存関係３００に関する情報で特定された部分プログラム３２１の最終プログラムアドレス値よりも大きくなると、プログラムカウンタ監視部１３は、プロセッサコア２０の実行部１２が部分プログラム３２１の実行を終了したものと判断して、プロセッサコア１０の実行部１２に上記停止要求の解除要求を通知する。プロセッサコア１０の実行部１２は、上記解除要求を受けると、プログラム３１０の実行を再開し、部分プログラム３１２の実行を開始する。
【００３６】
なお、プロセッサコア２０の実行部１２は、同期元となる部分プログラム３２１の終了時や部分プログラム３２２の開始時に、プロセッサコア１０の実行部１２と同期をとるための処理は行わない。
【００３７】
また、プロセッサコア２０の実行部１２は、図２の場合と同様にして、部分プログラム３２３の実行直前に、プロセッサコア１０の識別番号及び同期元の部分プログラム３１２の最終プログラムアドレス値を、依存関係３０１に関する情報としてプログラムカウンタ監視部２３に通知する。
【００３８】
プログラムカウンタ監視部２３では、依存関係３０１に関する情報に含まれる識別番号で特定したプロセッサコア１０のプログラムカウンタ１１の値を参照し、この値と依存関係３０１に関する情報に含まれる部分プログラム３１２の最終プログラムアドレス値とを比較する。ここで、プロセッサコア１０のプログラムカウンタ１１の値が依存関係３０１に関する情報で特定された部分プログラム３１２の最終プログラムアドレス値よりも小さいと、プログラムカウンタ監視部２３は、プロセッサコア１０の実行部１２が部分プログラム３１２の実行を終了していないと判断し、プロセッサコア２０の実行部１２に停止要求を通知する。
【００３９】
プロセッサコア２０の実行部１２は、上記停止要求を受けると、プログラム３２０の実行を一時停止する。これにより、プロセッサコア２０の実行部１２は、部分プログラム３１２の実行が終了するまで、部分プログラム３２３の実行待機状態となる。この後、プログラムカウンタ監視部２３は、プロセッサコア１０のプログラムカウンタ１１の値を逐次参照して、上述の比較処理を継続する。
【００４０】
上記比較処理において、プロセッサコア１０のプログラムカウンタ１１の値が依存関係３０１に関する情報で特定された部分プログラム３１２の最終プログラムアドレス値よりも大きくなると、プログラムカウンタ監視部２３は、プロセッサコア１０の実行部１２が部分プログラム３１２の実行を終了したものと判断して、プロセッサコア２０の実行部１２に上記停止要求の解除要求を通知する。プロセッサコア２０の実行部１２では、上記解除要求を受けると、プログラム３２０の実行を再開し、部分プログラム３２３の実行を開始する。
【００４１】
なお、プロセッサコア１０の実行部１２は、同期元となる部分プログラム３１２の終了時や部分プログラム３１３の開始時に、プロセッサコア２０の実行部１２と同期をとるための処理は行わない。
【００４２】
続いて、分岐命令によるループ処理における動作について説明する。
プログラムカウンタ監視部１３は、プロセッサコア１０の実行部１２から通知された部分プログラム３２３の最終プログラムアドレス値（分岐命令のアドレス値）とプロセッサコア２０のプログラムカウンタ１１の値とを比較して分岐処理に達したか否かを参照する。一方、プログラムカウンタ監視部２３は、プロセッサコア２０の実行部１２から通知された部分プログラム３１４の最終プログラムアドレス値（分岐命令のアドレス値）とプロセッサコア１０のプログラムカウンタ１１の値とを比較して分岐処理に達したか否かを参照する。
【００４３】
ここで、依存関係を有するプログラムを実行するプロセッサコア１０，２０の実行部１２は、例えば以下のように動作する。これにより、互いが分岐処理に達したこと（部分プログラム３１４，３２３の最終プログラムアドレスを実行する段階）を確認してから分岐処理を実行する。
プロセッサコア１０の実行部１２は、部分プログラム３１４の最終プログラムアドレスの直前値まで処理が進み、分岐処理を実行する段階に達すると、部分プログラム３１４における分岐命令の実行を一時停止する。また、プロセッサコア２０の実行部１２は、部分プログラム３２３の最終プログラムアドレスの直前値まで処理が進み、分岐処理を実行する段階に達すると、部分プログラム３２３における分岐命令の実行を一時停止する。
【００４４】
このとき、プログラムカウンタ監視部１３は、プロセッサコア２０のプログラムカウンタ１１の値が部分プログラム３２３の最終プログラムアドレスの直前値になると、実行停止の解除要求をプロセッサコア１０の実行部１２へ通知する。プロセッサコア１０の実行部１２は、上記解除要求を受けると、部分プログラム３１１へ分岐して処理を再開する。このように、プロセッサコア１０の実行部１２は、依存関係にあるプログラムを実行するプロセッサコア２０の実行部１２が分岐処理に達したことを確認した後に部分プログラム３１１の処理を開始する。
【００４５】
一方、プログラムカウンタ監視部２３は、プロセッサコア１０のプログラムカウンタ１１の値が部分プログラム３１４の最終プログラムアドレスの直前値になると、実行停止の解除要求をプロセッサコア２０の実行部１２へ通知する。プロセッサコア２０の実行部１２は、上記解除要求を受けると、部分プログラム３２３へ分岐して処理を再開する。このように、プロセッサコア２０の実行部１２も、依存関係にあるプログラムを実行するプロセッサコア１０の実行部１２が分岐処理に達したことを確認した後に部分プログラム３２１の処理を再開する。
【００４６】
以上のように、この実施の形態１によれば、プロセッサコア１０，２０，３０，４０と、プロセッサコア１０，２０，３０，４０のそれぞれに対応して設けられ、自己に対応するプロセッサコアで実行されるプログラムのアドレス値を保持するプログラムカウンタ１１と、プロセッサコア１０，２０，３０，４０のそれぞれに対応して設けられ、自己に対応するプロセッサコアから指定された同期相手のプロセッサコアに対応するプログラムカウンタ１１の値と同期先のプログラムの実行に先行して同期相手のプロセッサコアで実行される同期元のプログラムの最終プログラムアドレス値との比較結果に応じて、自己に対応するプロセッサコアによる同期先のプログラムの実行可否を制御するプログラムカウンタ監視部１３，２３，３３，４３とを備えたので、プログラムカウンタ監視部１３，２３，３３，４３が、同期元のプログラムの実行状況に応じて同期先のプログラムの実行を待機させることができ、同期元のプログラムを実行するプロセッサコアに同期のための特別な処理を追加することなく、プロセッサコア間の同期をとることができる。
【００４７】
なお、上記実施の形態１では、回路構成としてプロセッサコアの数が４つである場合を示し、２つのプロセッサコア間での処理について説明したが、４つ以外のコア数で構成してもよく、また３つ以上のプロセッサコア間で処理を行う場合であっても有効である。
【００４８】
実施の形態２．
図４は、この発明の実施の形態２によるマルチコアプロセッサの構成を示すブロック図であり、特にプログラムカウンタ監視部の詳細な構成を示している。なお、図１で示した構成要素に相当するものには同一符号を付している。図４において、実施の形態２によるプログラムカウンタ監視部１３は、プログラムレジスタ４００及び監視実行部４０４を備える。また、プログラムレジスタ４００は、プロセッサコア１０との間で同期してプログラムを実行するプロセッサコアのプログラムカウンタ１１の監視用情報が設定されるレジスタであり、プロセッサコア番号レジスタ４０１、プログラムアドレスレジスタ４０２及び有効フラグレジスタ４０３を備える。
【００４９】
プロセッサコア番号レジスタ４０１には、同期元となる部分プログラムを実行するプロセッサコアの識別番号を設定し、プログラムアドレスレジスタ４０２には、上記同期元の部分プログラムの最終プログラムアドレス値を設定する。また、有効フラグレジスタ４０３には、プログラムカウンタ監視部１３の監視機能が有効か否かを示すフラグ値を設定する。監視実行部４０４は、プロセッサコア番号レジスタ４０１に設定された識別番号で特定したプロセッサコアのプログラムカウンタ１１の値とプログラムアドレスレジスタ４０２の値とを比較し、この比較結果に応じてプログラム実行の停止要求及びその解除要求をプロセッサコア１０の実行部１２に通知する。
【００５０】
なお、図４では、プロセッサコア１０及びこれに対応するプログラムカウンタ監視部１３の構成を示したが、図１に示すプロセッサコア２０，３０，４０及びこれに対応するプログラムカウンタ監視部２３，３３，４３も同様の構成であってもよい。また、プロセッサコア及びこれに対応するプログラムカウンタ監視部の数は、４つ以外であってもよい。
【００５１】
次に動作について説明する。
プロセッサコア１０の実行部１２は、同期先のプログラムを実行するにあたり、プログラムカウンタ監視部１３の有効フラグレジスタ４０３に監視機能の有効を示す値を設定する。例えば、図２に示す部分プログラム２１１では、この部分プログラム２１１を同期先とする依存関係２５０が設定されているため、プロセッサコア１０の実行部１２は、プログラムカウンタ監視部１３の有効フラグレジスタ４０３に対して監視機能の有効を示す値を設定する。
【００５２】
さらに、プロセッサコア１０の実行部１２は、依存関係２５０で同期元となる部分プログラム２２１を実行するプロセッサコア２０の識別番号を、プログラムカウンタ監視部１３のプロセッサコア番号レジスタ４０１に設定し、同期元となる部分プログラム２２１の最終プログラムアドレス値を、プログラムカウンタ監視部１３のプログラムアドレスレジスタ４０２に設定する。
【００５３】
有効フラグレジスタ４０３に監視機能の有効を示す値が設定されると、監視実行部４０４が、プロセッサコア番号レジスタ４０１で特定されるプロセッサコア２０のプログラムカウンタ１１の値を読み込み、この値とプログラムアドレスレジスタ４０２の値とを比較する。ここで、プロセッサコア２０のプログラムカウンタ１１の値が、プログラムアドレスレジスタ４０２の値よりも小さいと、監視実行部４０４は、プロセッサコア２０の実行部１２が部分プログラム２２１の実行を終了していないと判断して、プロセッサコア１０の実行部１２に停止要求を通知する。
【００５４】
プロセッサコア１０の実行部１２は、上記停止要求を受けると、プログラム２１０の実行を一時停止する。この後、監視実行部４０４は、プロセッサコア２０のプログラムカウンタ１１の値を逐次参照して上述の比較処理を継続する。この比較結果で部分プログラム２２１の実行が終了したと判定されるまで、監視実行部４０４は、プロセッサコア１０の実行部１２へ停止要求を出力し続ける。これにより、プロセッサコア１０の実行部１２は、部分プログラム２２１の実行が終了するまで部分プログラム２１１の実行待機状態となる。
【００５５】
上記比較処理において、プロセッサコア２０のプログラムカウンタ１１の値がプログラムアドレスレジスタ４０２の値よりも大きくなると、監視実行部４０４は、プロセッサコア２０の実行部１２が部分プログラム２２１の実行を終了したものと判断して、プロセッサコア１０の実行部１２に上記停止要求の解除要求を通知する。プロセッサコア１０の実行部１２では、上記解除要求を受けると、プログラム２１０の実行を再開し、部分プログラム２１１の実行を開始する。プロセッサコア１０とプロセッサコア２０との同期処理が終了すると、監視実行部４０４は、すみやかに有効フラグレジスタ４０３のフラグ値をクリアし、監視機能を無効にする。
【００５６】
以上のように、この実施の形態２によれば、プログラムカウンタ監視部１３，２３，３３，４３が、自己に対応するプロセッサコアから指定されたプロセッサコアの識別番号及びこのプロセッサコアで実行される同期元のプログラムのアドレス値を保持するプログラムレジスタ４００と、プログラムレジスタ４００から識別番号及び同期元のプログラムのアドレス値を取得し、この識別番号のプロセッサコアに対応するプログラムカウンタの値と同期元のプログラムのアドレス値との比較結果に応じて、自己に対応するプロセッサコアによる同期先のプログラムの実行可否を制御する監視実行部４０４とを備えたので、プロセッサコアがプログラムを実行するにあたり、専用のレジスタ４００に監視用情報を書き込むだけで、プログラムカウンタの監視処理を行うことができる。
【００５７】
なお、上記実施の形態２では、図４に示すようにプロセッサコア番号レジスタ４０１、プログラムアドレスレジスタ４０２及び有効フラグレジスタ４０３として、プログラムレジスタ４００を構成する複数のレジスタをそれぞれ割り当てた場合を示したが、本発明はこれに限定されるものではない。
【００５８】
例えば、図５に示すように、１つのレジスタをプログラムカウンタ監視レジスタ４１０とし、そのビットフィールドを、有効フラグを設定する領域、プロセッサコア番号を設定する領域、プログラムアドレス（同期元のプログラムの最終プログラムアドレス値）を設定する領域として割り当ててもよい。
【００５９】
また、上記実施の形態２において、プログラムレジスタ４００やプログラムカウンタ監視レジスタ４１０を１つのプログラムカウンタ監視部内に複数備えてもよい。この場合、複数のプロセッサコア間で実行されるプログラムの依存関係に応じてプログラムレジスタ４００やプログラムカウンタ監視レジスタ４１０に値をそれぞれ設定することで、複数の依存関係に対するプログラムカウンタ１１の監視を同時に実行することができる。
【００６０】
さらに、プロセッサコア番号レジスタを除く、プログラムレジスタ４００のプロセッサコア番号レジスタ及び有効フラグレジスタをプロセッサコア内に設けてもよい。
【００６１】
実施の形態３．
この実施の形態３は、プログラムカウンタ監視部による監視処理を専用命令で実行するようにしたものである。
図６は、この発明の実施の形態３によるマルチコアプロセッサの構成を示すブロック図であり、特にプログラムカウンタ監視部の詳細な構成を示している。なお、図４で示した構成要素に相当するものには同一符号を付している。また、図７は、図６中のプロセッサコアの実行部で実行される専用命令の命令コードの一例を示す図である。
【００６２】
実施の形態３によるプログラムカウンタ監視部１３では、図６中で実行部１２から監視実行部４０４へ向けて矢印で示すように、監視実行部４０４が、プロセッサコア１０の実行部１２で実行されるプログラム中の専用命令の命令コードで特定されたデータを受けて監視処理を実行する。また、専用命令の命令コード５００は、図７に示すように専用命令識別子５０１、プロセッサコア番号５０２及びプログラムアドレス５０３を含んで構成される。
【００６３】
ここで、専用命令識別子５０１は、命令コード５００が専用命令であることを示す識別子である。プロセッサコア番号５０２は、依存関係で同期元となるプロセッサコアを識別するための識別番号である。また、プログラムアドレス５０３は、依存関係で同期元となる部分プログラムの最終プログラムアドレス値である。
【００６４】
なお、図６では、プロセッサコア１０及びこれに対応するプログラムカウンタ監視部１３についての構成を示したが、図１に示すプロセッサコア２０，３０，４０及びこれに対応するプログラムカウンタ監視部２３，３３，４３も同様に構成してもよい。また、プロセッサコア及びこれに対応するプログラムカウンタ監視部の数は、４つ以外であってもよい。
【００６５】
次に動作について説明する。
プロセッサコア１０の実行部１２は、自己に割り当てられたプログラムを格納するメモリから、当該プログラムを構成する命令コードを読み込んで実行する。ここで、プロセッサコア１０の実行部１２は、図７に示す命令コード５００中の専用命令識別子５０１の値から命令コード５００が専用命令であることを特定し、命令コード５００からプロセッサコア番号５０２及びプログラムアドレス５０３を抽出する。続いて、プロセッサコア１０の実行部１２は、命令コード５００から抽出したプロセッサコア番号５０２及びプログラムアドレス５０３を、依存関係に関する情報としてプログラムカウンタ監視部１３へ出力する。
【００６６】
ここでは、図２に示す依存関係２５０についての同期処理を例に挙げる。つまり、専用命令が部分プログラム２１１の直前のアドレスに設定されており、プロセッサコア番号５０２でプロセッサコア２０が特定され、プログラムアドレス５０３は、部分プログラム２２１の最終プログラムアドレス値であるものとする。
【００６７】
プログラムカウンタ監視部１３の監視実行部４０４では、依存関係２５０に関する情報から取得したプロセッサコア番号５０２でプロセッサコア２０を特定し、プロセッサコア２０のプログラムカウンタ１１の値と依存関係２５０で同期元となる部分プログラム２２１のプログラムアドレス５０３の値とを比較する。ここで、プロセッサコア番号５０２で特定されたプロセッサコア２０のプログラムカウンタ１１の値がプログラムアドレス５０３の値よりも小さいと、監視実行部４０４は、プロセッサコア２０の実行部１２が部分プログラム２２１の実行を終了していないと判断して、プロセッサコア１０の実行部１２に停止要求を通知する。
【００６８】
プロセッサコア１０の実行部１２は、上記停止要求を受けると、プログラム２１０の実行を一時停止する。この後、監視実行部４０４は、プロセッサコア２０のプログラムカウンタ１１の値を逐次参照して上述の比較処理を継続する。この比較結果で部分プログラム２２１の実行が終了したと判定されるまで、監視実行部４０４は、プロセッサコア１０の実行部１２へ停止要求を出力し続ける。これにより、プロセッサコア１０の実行部１２は、部分プログラム２２１の実行が終了するまで部分プログラム２１１の実行待機状態となる。
【００６９】
また、上記比較処理において、プロセッサコア２０のプログラムカウンタ１１の値がプログラムアドレスレジスタ４０２の値よりも大きくなると、監視実行部４０４は、プロセッサコア２０の実行部１２が部分プログラム２２１の実行を終了したものと判断して、プロセッサコア１０の実行部１２に上記停止要求の解除要求を通知する。プロセッサコア１０の実行部１２では、上記解除要求を受けると、プログラム２１０の実行を再開し、部分プログラム２１１の実行を開始する。
【００７０】
以上のように、この実施の形態３によれば、プロセッサコアが、プロセッサコアの識別番号及びこのプロセッサコアで実行される同期元のプログラムのアドレス値が設定された専用命令を実行することにより、識別番号及び同期元のプログラムのアドレス値を監視情報として自己に対応するプログラムカウンタ監視部に出力し、このプログラムカウンタ監視部が、監視情報で指定された識別番号のプロセッサコアに対応するプログラムカウンタの値と同期元のプログラムのアドレス値との比較結果に応じて、自己に対応するプロセッサコアによる同期先のプログラムの実行可否を制御する監視実行部４０４を備えたので、プログラムカウンタ監視部にレジスタ機能を持たすことなく、同期処理を実現することができる。
【００７１】
なお、上記実施の形態３において、実行部１２によって専用命令が実行されることで、プログラムカウンタ監視部の監視機能が有効になる。このため、図４に示した有効フラグレジスタ４０３に該当する情報は命令コード５００には含まれない。
【００７２】
実施の形態４．
上記実施の形態１〜３では、同期元のプログラムの最終プログラムアドレス値を直接指定する場合を示した。これに対し、この実施の形態４は、プログラムカウンタ監視部で取り扱われるプログラムアドレスやプログラムカウンタ１１の値として、各プロセッサコア１０，２０，３０，４０が実行するプログラムの先頭番地を基準とするオフセットアドレスを用いることにより、プログラムの配置変更（アドレス変更）に柔軟に対応できるようにしている。
【００７３】
図８は、この発明の実施の形態４によるマルチコアプロセッサにおけるプロセッサコアの構成を示すブロック図であり、図１で示した構成要素に相当するものには同一符号を付している。図８において、実施の形態４によるプロセッサコア１０は、プログラムカウンタ１１及び実行部１２に加え、オフセット計算部１４及びベースアドレスレジスタ１５を備える。
【００７４】
オフセット計算部１４は、プロセッサコア１０のプログラムカウンタ１１の値からベースアドレスレジスタ１５の値を減算したオフセット値を、プログラムカウンタ１１の値としてプログラムカウンタ監視部２３，３３，４３へ出力する。ベースアドレスレジスタ１５は、プロセッサコア１０の実行部１２が実行するプログラムの配置領域（アドレス）の変更に応じてオフセット値が同じ値になるように一定のベースアドレス値が設定される。
【００７５】
なお、図８では、プロセッサコア１０についての構成を示したが、図１に示すプロセッサコア２０，３０，４０も同様に構成してもよい。また、プロセッサコアの数は、４つ以外であってもよい。
【００７６】
次に動作について説明する。
プロセッサコア１０の実行部１２は、メモリからプログラムを読み込み、これを実行する。このとき、オフセット計算部１４は、プログラムカウンタ１１に設定された上記プログラムのアドレス値とベースアドレスレジスタ１５の値とを読み込み、これらの値を減算してオフセット値を求める。このオフセット値は、プロセッサコア１０のプログラムカウンタ１１の値として、オフセット計算部１４から他のプロセッサコア２０，３０，４０に対応するプログラムカウンタ監視部２３，３３，４３へそれぞれ出力される。
【００７７】
また、プログラムカウンタ監視部２３，３３，４３には、プロセッサコア２０，３０，４０の実行部１２から、プロセッサコア１０で実行される同期元のプログラム（プロセッサコア２０，３０，４０の実行部１２が実行するプログラムを同期先とした依存関係を有するプログラム）の最終プログラムアドレス値が、プロセッサコア１０で実行されるプログラムの先頭番地からのオフセットとして与えられる。
【００７８】
ここで、プロセッサコア１０で実行するプログラムの配置領域が変更された場合、プログラム配置が変更される前のオフセット値と同じ値となるようにベースアドレスレジスタ１５の値を設定する。このようにすることで、プロセッサコア２０，３０，４０の実行部１２が同期先としてプログラムを処理するにあたり、同期元のプログラムのプログラムアドレスを変更する必要がない。
【００７９】
以上のように、この実施の形態４によれば、プロセッサコアが、ベース値が設定されるベースアドレスレジスタ１５と、自己に対応するプログラムカウンタの値からベースアドレスレジスタ１５のベース値を減算したオフセット値を、自己に対応するプログラムカウンタ１１の値として自己以外に対応するプログラムカウンタ監視部へ出力するオフセット計算部１４とを備え、プログラムカウンタ監視部が、自己に対応するプロセッサコアによる同期先のプログラムの実行可否を制御するにあたり、ベース値で規定されるオフセット値で表されたプログラムカウンタ１１の値と同期元のプログラムのアドレス値とを比較するので、プログラムの配置変更（アドレス変更）に柔軟に対応することができる。
【００８０】
なお、上述した説明では、上記実施の形態１に対して上記実施の形態４を適用する場合を示したが、上記実施の形態２、３に適用しても構わない。
【００８１】
実施の形態５．
上記実施の形態１では、アドレスを昇順にプログラムが実行され、プログラムの実行に伴ってプログラムカウンタ１１の値が大きくなる場合を前提としている。例えば、図２に示した部分プログラム２２２の最終プログラムアドレスに部分プログラム２２３へ分岐する分岐命令があり、部分プログラム２２１が部分プログラム２１１の開始タイミングよりも早く終わった場合を考える。この場合、プログラムカウンタ監視部１３が部分プログラム２２１の実行終了の判定を開始する前であっても、プロセッサコア２０の実行部１２が上記分岐命令を実行すれば、部分プログラム２２３の実行へ分岐する。
【００８２】
このとき、プロセッサコア２０のプログラムカウンタ１１は、部分プログラム２２１の実行が終了しているにも関わらず、部分プログラム２２１の最終プログラムアドレス値よりも小さい値に戻る。この場合、プロセッサコア２０のプログラムカウンタ１１の値と依存関係２５０に関する情報に含まれる部分プログラム２２１の最終プログラムアドレス値とを比較した結果だけでは、部分プログラム２２１の実行が終了しているか否かを正確に判定することができない。
【００８３】
この実施の形態５は、分岐命令のように部分プログラムの外に分岐することでプログラムカウンタ１１の値が昇順でなくなる命令が部分プログラムに含まれていても、分岐元のプログラムアドレスを保持するカウンタ値保持部を設けることにより、プログラムカウンタ監視部が正確に判定できるようにしたものである。
【００８４】
図９は、この発明の実施の形態５によるマルチコアプロセッサにおけるプロセッサコアの構成を示すブロック図であ、図１で示した構成要素に相当するものには同一符号を付している。図９において、実施の形態５によるプロセッサコア１０は、プログラムカウンタ１１及び実行部１２に加え、カウンタ値保持部１６を備える。カウンタ値保持部１６は、実行部１２が実行する命令に応じてプログラムカウンタ１１の値を保持し、保持した値を他のプロセッサコアに対応するプログラムカウンタ監視部２３，３３，４３へ出力する。
【００８５】
上記実施の形態１〜４では、プロセッサコアの動作状況を示すプログラムカウンタ１１の値をそのままプログラムカウンタ監視部へ出力していた。これに対して、この実施の形態５では、プロセッサコアの動作状況に応じてカウンタ値保持部１６で保持したプログラムカウンタ１１の値を出力する。
【００８６】
例えば、ＣＡＬＬ命令とＲＥＴ命令の組み合わせによるサブルーチン処理や割り込み処理などのように、分岐した後で戻ってくることが予測される処理であっても、分岐処理している間のプログラムカウンタ１１の値を分岐直前に保持した値とする。これによって、分岐先のプログラムカウンタ１１を用いた依存関係の判定を防ぐことができ、分岐先のプログラムを実行する際に不正な通過判定がなされることがない。
【００８７】
なお、図９では、プロセッサコア１０についての構成を示したが、図１に示すプロセッサコア２０，３０，４０も同様に構成してもよい。また、プロセッサコアの数は、４つ以外であってもよい。
【００８８】
次に動作について説明する。
プロセッサコア１０の実行部１２は、自己が実行するプログラム中に含まれるＣＡＬＬ命令の実行や割り込み処理の開始とともに、カウンタ値保持部１６に対してカウンタ値保持指令を出力する。カウンタ値保持部１６は、カウンタ値保持指令を受けると、ＣＡＬＬ命令や割り込み処理による分岐直前のプログラムカウンタ１１の値を保持する。この後、プロセッサコア１０の実行部１２が分岐先のプログラムを実行することにより、プログラムカウンタ１１の値は、分岐先のプログラムのアドレス値で更新される。
【００８９】
一方、カウンタ値保持部１６は、プロセッサコア１０の実行部１２が分岐先のプログラムを実行している間、自己が保持する分岐直前のアドレス値をプロセッサコア１０のプログラムカウンタ１１の値として他のプロセッサコア２０，３０，４０に対応するプログラムカウンタ監視部２３，３３，４３へそれぞれ出力する。これにより、プログラムカウンタ監視部２３，３３，４３では、プロセッサコア１０における分岐直前のアドレス値を基準として依存関係の判定が実行される。
【００９０】
この後、プロセッサコア１０の実行部１２は、ＣＡＬＬ命令による分岐処理から復帰するためのＲＥＴ命令や、割込み処理から復帰するためのＩＲＥＴ命令を実行すると、これに伴ってカウンタ値保持部１６に対して解除指令を出力する。カウンタ値保持部１６は、解除指令を受けると、自己が保持する値ではなく、そのときプログラムカウンタ１１に設定されている値を他のプロセッサコア２０，３０，４０に対応するプログラムカウンタ監視部２３，３３，４３へそれぞれ出力する。
【００９１】
ここで、ＣＡＬＬ命令による割り込み処理の実行中にＣＡＬＬ命令が再度実行された場合を考える。この場合、カウンタ値保持部１６は、ＣＡＬＬ命令が発行された回数をカウントする。例えば、ＣＡＬＬ命令の実行でカウンタを＋１とし、ＲＥＴ命令の実行でカウンタを−１とする。また、このカウンタの値が０でないとき、自己を搭載するプロセッサコアのプログラムカウンタ１１の値を保持し、カウンタの値が０のときには、上記プログラムカウンタ１１の値をそのまま他のプロセッサコアに対応するプログラムカウンタ監視部へ出力する。
【００９２】
図１０は、図９中のプロセッサコアで実行されるプログラム、プログラム間の依存関係及び分岐処理を説明するための図であり、この図１０を用いて分岐処理における動作を詳細に説明する。図１０において、プログラム５１０は、プロセッサコア１０の実行部１２で実行されるプログラムであり、部分プログラム５１１，５１２を含んで構成される。部分プログラム５１１，５１２は、部分プログラム５１１、部分プログラム５１２の順でアドレスが昇順となるようにメモリに格納される。プロセッサコア１０の実行部１２は、上記メモリからアドレスを昇順に部分プログラムを読み込んで実行することにより、図１０中で矢印で示すように、部分プログラム５１１、部分プログラム５１２の順で、プログラム５１０を実行する。
【００９３】
また、プログラム５２０は、プロセッサコア２０の実行部１２で実行されるプログラムであり、部分プログラム５２１及びサブルーチンプログラム５２２を含んで構成される。部分プログラム５２１及びサブルーチンプログラム５２２は、部分プログラム５２１、サブルーチンプログラム５２２の順でアドレスが昇順となるようにメモリに格納される。
【００９４】
部分プログラム５１２と部分プログラム５２１との間には依存関係５３０が設定されている。この依存関係５３０は、プロセッサコア２０の実行部１２によって部分プログラム５２１の実行が終了した後、プロセッサコア１０の実行部１２によって部分プログラム５１２を実行すること、つまりプロセッサコア１０での同期先となる部分プログラム５１２の実行が、プロセッサコア２０での同期元となる部分プログラム５２１の実行に依存する関係にあることを示している。
【００９５】
また、部分プログラム５２１にはＣＡＬＬ命令が含まれており、このＣＡＬＬ命令が実行されると、図１０中に矢印で示すようにサブルーチンプログラム５２２へ処理が分岐する。一方、サブルーチンプログラム５２２中のＲＥＴ命令が実行されると、図１０中に矢印で示すように部分プログラム５２１の実行へ処理が戻る。
【００９６】
ＣＡＬＬ命令を実行してサブルーチンプログラム５２２へ処理が分岐する場合、部分プログラム５２１の実行が終了していない場合であっても、プロセッサコア２０のプログラムカウンタ１１の値は、部分プログラム５２１の最終プログラムアドレス値よりも大きくなる。このため、上記実施の形態１のようにアドレスを昇順にプログラムが実行されることを前提した処理では、プログラムカウンタ監視部が同期元のプログラムの実行終了を誤判定する可能性がある。
【００９７】
そこで、プロセッサコア２０の実行部１２は、部分プログラム５２１中のＣＡＬＬ命令を実行してサブルーチンプログラム５２２の処理へ分岐する際、カウンタ値保持部１６へカウンタ値保持指令を出力する。この指令を受けると、カウンタ値保持部１６は、プログラムカウンタ監視部１３，３３，４３を介して他のプロセッサコア１０，３０，４０へ公開している自己のプログラムカウンタ１１の値を分岐前の値のまま保持する。このようにすることで、プロセッサコア１０に対応するプログラムカウンタ監視部１３は、プロセッサコア２０の実行部１２が部分プログラム５２１を実行中であることを認識できる。
【００９８】
プロセッサコア２０の実行部１２は、サブルーチンプログラム５２２中のＲＥＴ命令を実行することにより、部分プログラム５２１の処理に戻る。このとき、プロセッサコア２０の実行部１２は、カウンタ値保持部１６に対して解除命令を出力する。この指令を受けると、カウンタ値保持部１６は、ＲＥＴ命令で戻った部分プログラム５２１中のアドレス値が設定されたプログラムカウンタ１１の値を、他のプロセッサコア１０，３０，４０に対応するプログラムカウンタ監視部１３，３３，４３へ出力する。この後、プロセッサコア２０の実行部１２で部分プログラム５２１の実行が終了した時点で、プロセッサコア１０の周辺回路であるプログラムカウンタ監視部１３は、部分プログラム５２１の実行終了を正確に判定することができる。
【００９９】
以上のように、この実施の形態５によれば、複数のプロセッサコア１０，２０，３０，４０のそれぞれに対応して設けられ、自己に対応するプロセッサコアで分岐命令を実行するにあたり、分岐前のプログラムカウンタ１１の値を分岐から復帰するまで保持するカウンタ値保持部１６を備えたので、分岐命令のように部分プログラムの外に分岐する命令が含まれていても、プログラムカウンタ監視部による依存関係の判定を正確に行うことができる。
【０１００】
なお、上記実施の形態５は、上記実施の形態１のみならず、上記実施の形態２〜４にも適用することができる。例えば、上記実施の形態２の構成に適用することにより、プログラムアドレスレジスタ４０２やプログラムカウンタ監視レジスタ４１０のプログラムアドレス領域の値をカウンタ値保持部１６で保持するようにしてもよい。また、上記実施の形態３の構成に適用することにより、専用命令で指定されるプログラムアドレス値をカウンタ値保持部１６で保持するようにしてもよい。さらに、上記実施の形態４の構成に適用することにより、オフセット計算部１４により算出された値をカウンタ値保持部１６で保持するようにしてもよい。
【図面の簡単な説明】
【０１０１】
【図１】この発明の実施の形態１によるマルチコアプロセッサの構成を示すブロック図である。
【図２】図１中のプロセッサコアで実行されるプログラム及びプログラム間の依存関係を説明するための図である。
【図３】図１中のプロセッサコアで実行されるプログラム、プログラム間の依存関係及び分岐処理を説明するための図である。
【図４】この発明の実施の形態２によるマルチコアプロセッサの構成を示すブロック図である。
【図５】プログラムカウンタ監視レジスタの構成を示す図である。
【図６】この発明の実施の形態３によるマルチコアプロセッサの構成を示すブロック図である。
【図７】図６中のプロセッサコアの実行部で実行される専用命令の命令コードの一例を示す図である。
【図８】この発明の実施の形態４によるマルチコアプロセッサにおけるプロセッサコアの構成を示すブロック図である。
【図９】この発明の実施の形態５によるマルチコアプロセッサにおけるプロセッサコアの構成を示すブロック図である。
【図１０】図９中のプロセッサコアで実行されるプログラム、プログラム間の依存関係及び分岐処理を説明するための図である。
【符号の説明】
【０１０２】
１  マルチコアプロセッサ、１０，２０，３０，４０  プロセッサコア、１１  プログラムカウンタ、１２  実行部、１３，２３，３３，４４  プログラムカウンタ監視部、１４  オフセット計算部、１５  ベースアドレスレジスタ、１６  カウンタ値保持部、２１０，２２０，２３０，２４０，３１０，３２０，５１０，５２０  プログラム、２１１，２２１〜２２３，３１１〜３１４，３２１〜３２３，５１１，５１２，５２１  部分プログラム、２５０，３００〜３０２，５３０  依存関係、４００  プログラムレジスタ、４０１  プロセッサコア番号レジスタ、４０２  プログラムアドレスレジスタ、４０３  有効フラグレジスタ、４０４  監視実行部、５００  命令コード、５０１  専用命令識別子、５０２  プロセッサコア番号、５０３  プログラムアドレス。
【図１】
2009075948.tif 000003
【図２】
2009075948.tif 000004
【図３】
2009075948.tif 000005
【図４】
2009075948.tif 000006
【図５】
2009075948.tif 000007
【図６】
2009075948.tif 000008
【図７】
2009075948.tif 000009
【図８】
2009075948.tif 000010
【図９】
2009075948.tif 000011
【図１０】
2009075948.tif 000012