(57)【特許請求の範囲】
【請求項１】
マルチコアプロセッサと、前記マルチコアプロセッサの各々のコアのレジスタ間の同期を制御する同期制御装置群とを有するマルチコアプロセッサシステムであって、
前記マルチコアプロセッサの中の特定のコアは、
前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出し、
スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、移行することを検出したスレッドに対応する特定のレジスタを特定し、
特定した前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成し、
前記同期制御装置群のうちの前記同期元コアの同期制御装置に、生成した前記同期制御情報を出力し、
前記同期元コアの同期制御装置は、
出力した前記同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込み、
前記同期制御情報から特定される前記同期先コアの同期制御装置に前記特定のレジスタの値を送信し、
前記同期先コアの同期制御装置が、
受信した前記特定のレジスタの値を前記同期先コアの前記特定のレジスタに書き込む、
ことを特徴とするマルチコアプロセッサシステム。
【請求項２】
前記同期先コアの同期制御装置が、
受信した前記値を前記同期先コアの前記特定のレジスタに書き込んだ場合に、前記同期先コアに前記検出したスレッドが実行可能となった情報を通知し、
前記同期先コアは、
前記同期先コアの同期制御装置から前記検出したスレッドが実行可能となった情報を受け取った場合、前記検出したスレッドを前記同期先コアにて実行可能な状態に設定することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記テーブルにおける前記スレッドに対応付けされた前記レジスタは、前記マルチコアプロセッサのいずれのコアも特定しないことを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項４】
前記テーブルは、前記レジスタ以外の他の記憶領域を指定していないことを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項５】
マルチコアプロセッサと、前記マルチコアプロセッサの各々のコアのレジスタ間の同期を制御する同期制御装置群とを有するマルチコアプロセッサシステムの同期制御方法であって、前記マルチコアプロセッサの中の特定のコアが、
前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出し、
スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、移行することを検出したスレッドに対応する特定のレジスタを特定し、
特定した前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成工程と、
前記マルチコアプロセッサの各々のコアのレジスタ間の同期を制御する同期制御装置群のうち、前記同期元コアの同期制御装置に、生成した前記同期制御情報を出力し、
前記同期元コアの同期制御装置が、
出力した前記同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込み、
前記同期制御情報から特定される前記同期先コアの同期制御装置に前記特定のレジスタの値を送信し、
前記同期先コアの同期制御装置が、
受信した前記特定のレジスタの値を前記同期先コアの前記特定のレジスタに書き込む、
処理を実行することを特徴とする同期制御方法。
【請求項６】
マルチコアプロセッサと、前記マルチコアプロセッサの各々のコアのレジスタ間の同期を制御する同期制御装置群であって、前記同期制御装置群のうちの同期元コアの同期制御装置がレジスタおよび当該レジスタの値の書き込み先となる同期先コアを特定する同期制御情報を取得した場合、前記同期元コアの当該レジスタの値を読み込み当該同期先コアの同期制御装置に当該レジスタの値を送信し、当該同期先コアの同期制御装置が受信した値を同期先コアの特定のレジスタに書き込む同期制御装置群と、を有するマルチコアプロセッサシステムの同期制御プログラムであって、前記マルチコアプロセッサの中の特定のコアに、
前記マルチコアプロセッサ内において前記同期元コアで実行中のスレッドを前記同期先コアに移行することを検出し、
スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、移行することを検出したスレッドに対応する特定のレジスタを特定し、
特定した前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成工程と、
前記マルチコアプロセッサの各々のコアのレジスタ間の同期を制御する同期制御装置群のうち、前記同期元コアの同期制御装置に、生成した前記同期制御情報を出力する、
処理を実行させることを特徴とする同期制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、レジスタ間の同期を制御するマルチコアプロセッサシステム、情報生成方法、および情報生成プログラムに関する。
【背景技術】
【０００２】
近年、プロセッサコアが１つ搭載されたコンピュータであるシングルコアプロセッサに代わって、プロセッサが複数搭載されたコンピュータであるマルチコアプロセッサの形態を取る装置が増えている。従来のシングルコア向けのソフトウェア資産を、マルチコアプロセッサに適用する場合、１つのプログラムを複数のコアで実行するため、レジスタの値の継承性を考慮することが要求される。
【０００３】
たとえば、実行オブジェクトの生成に関する技術として、アセンブラプログラム上では仮のレジスタで実装し、アセンブルの段階で仮のレジスタをフロー解析によって生存区間を判断し、実レジスタに置換するという技術が開示されている（たとえば、下記特許文献１を参照。）。特許文献１にかかる技術では、レジスタの生存区間を明確にすることができる。したがって、シングルコアに書かれたアセンブラコードを、マルチコアプロセッサシステムによって並列処理するように変更する場合、不用な同期処理の挿入、または同期処理の挿入漏れを回避することができる。
【０００４】
また、マルチコアプロセッサシステムでの負荷分散に関する技術として、たとえば、処理モジュールにプロファイル情報を持ち、プロファイル情報に基づいて各コアが実行する処理モジュールを決定するという技術が開示されている（たとえば、下記特許文献２を参照。）。また、マルチコアプロセッサシステムにおける並列処理のためのハードウェアの技術として、複数のコアからアクセス可能となる２ポートのレジスタを有することで、データ転送を容易に行える技術が開示されている（たとえば、下記特許文献３を参照。）。
【０００５】
また、マルチコアプロセッサシステムのレジスタの同期方法として、キャッシュコヒーレンシ機構を利用した技術が存在する（以下、「従来技術１」と称する。）。たとえば、特定のコアのレジスタと、他のコアのレジスタの同期を取る場合、特定のコアは、はじめに、レジスタの値をキャッシュメモリに書き込む。キャッシュメモリにレジスタの値が書き込まれたことを検出したキャッシュコヒーレンシ機構は、他のコアのキャッシュメモリにレジスタの値を通知する。最後に、他のコアが、他のコアのキャッシュメモリからレジスタの値を読み込み、他のコアのレジスタに書き込む。前述の一連の動作により、レジスタの同期を行うことができる。
【０００６】
また、マルチコアプロセッサシステムのレジスタの同期方法として、たとえば、同期を行う専用命令を用意する技術が開示されている（たとえば、下記特許文献４を参照。）。特許文献４にかかる技術では、特定のコアが専用命令を実行した際に、特定のコアは他のコアへレジスタの値を送信し、特定のコアは、他のコアがレジスタ転送命令を実行するまで一時停止状態にする。これにより、従来技術１と等しい処理内容を、ソフトウェア的には１ステップで実行することができる。
【０００７】
図１３は、従来例におけるマルチコアプロセッサシステムにて、ＣプログラムまたはＣ＋＋プログラムの実行時の、レジスタの同期方法を示す説明図である。設計時、コンパイラが、Ｃソース、またはＣ＋＋ソースとなるＣ／Ｃ＋＋ソース１３０１を読み込み、同期制御コードが追加された実行オブジェクトの一部として、ブロック１３０２とブロック１３０３を生成する。また、同期制御コードに対応する箇所は、ブロック１３０４、ブロック１３０５となる。具体的に、Ｃ／Ｃ＋＋ソース１３０１は、“Ａ＝Ａ＋１；ｆｕｎｃ（Ａ）；”という２ステートメントを含んでおり、ブロック１３０２とブロック１３０３は、前述の２ステートメントに対応する実行オブジェクトである。
【０００８】
図１３の例では、ブロック１３０２とブロック１３０３を実行するＣＰＵが異なっても、ブロック１３０４、ブロック１３０５によって、レジスタＧｒ１の同期を取ることができ、正常に動作することができる。具体的に、ブロック１３０４では、レジスタＧｒ１をキャッシュメモリ等の領域である０ｘ００００ＦＦ００に格納する。続けて、ブロック１３０５では、０ｘ００００ＦＦ００に格納した値を読み込んでレジスタＧｒ１に設定する。このように、コンパイル時に、同期制御コードを追加することにより、シングルコア向けのプログラムからマルチコアプロセッサ向けの実行オブジェクトを生成する技術が存在する（以下、「従来技術２」と称する。）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平８−２３４９９７号公報
【特許文献２】特開２００６−９９１５６号公報
【特許文献３】特開平０１−０４８１６３号公報
【特許文献４】特開平０４−１９５６６４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上述した従来技術において、従来技術１、従来技術２、また特許文献４にかかる技術では、新たに同期制御コードを追加している。したがって、従来技術１、従来技術２、また特許文献４にかかる技術をアセンブラソースに適用すると、生成される実行オブジェクトに実行コードが改変するという問題があった。アセンブラソースは、たとえば、１ステップでも命令数を減らしたい場合に、設計者によって生成される。したがって、アセンブラソースは、機械語に１対１変換されることが期待されており、不用意に実行コードが追加されることによって、設計者の意図しないコード量となってしまうという問題があった。
【００１１】
本発明は、上述した従来技術による問題点を解消するため、アセンブラソースを改変せずにマルチコアで並列実行できるマルチコアプロセッサシステム、情報生成方法、および情報生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するため、開示のマルチコアプロセッサシステムは、マルチコアプロセッサの中の特定のコアにより、マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出し、特定のコアにより、スレッド群の各々のスレッドとスレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、移行することが検出されたスレッドに対応する特定のレジスタを特定し、特定のコアにより、特定された特定のレジスタおよび同期先コアを特定する同期制御情報を生成し、マルチコアプロセッサと通信可能に接続され、生成された同期制御情報を特定のコアから取得し、同期制御情報から得られる特定のレジスタの値を同期元コアの特定のレジスタから読み込み、同期先コアの特定のレジスタに、同期元コアの特定のレジスタから読み込んだ値を書き込む。
【発明の効果】
【００１３】
本マルチコアプロセッサシステム、情報生成方法、および情報生成プログラムによれば、シングルコア向けのアセンブラソースを改変することなく、マルチコアで正常に並列実行できるという効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】図１は、実施の形態にかかるマルチコアプロセッサシステム１００のハードウェアを示すブロック図である。
【図２】図２は、ＣＰＵｓ１０１に専用同期回線を用いたレジスタ同期制御装置を適用した状態を示すブロック図である。
【図３】図３は、ＣＰＵｓ１０１にスヌープ機構２０１を用いたレジスタ同期制御装置を適用した状態を示すブロック図である。
【図４】図４は、同期イベントが発生する状態を示す説明図である。
【図５】図５は、マルチコアプロセッサシステム１００の機能を示すブロック図である。
【図６】図６は、同期イベント未発生時におけるレジスタ同期制御装置２０５の概要を示す説明図である。
【図７】図７は、同期制御レジスタ６０３の記憶内容の一例を示す説明図である。
【図８】図８は、同期イベント発生時における同期元ＣＰＵのレジスタ同期制御装置２０５の概要を示す説明図である。
【図９】図９は、同期イベント発生時における同期先ＣＰＵのレジスタ同期制御装置２０５の概要を示す説明図である。
【図１０】図１０は、マルチコアプロセッサシステム１００の設計時における概要を示す説明図である。
【図１１】図１１は、スケジュール処理を示すフローチャートである。
【図１２】図１２は、レジスタ同期制御処理を示すフローチャートである。
【図１３】図１３は、従来例におけるマルチコアプロセッサシステムにて、ＣプログラムまたはＣ＋＋プログラムの実行時の、レジスタの同期方法を示す説明図である。
【発明を実施するための形態】
【００１５】
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、情報生成方法、および情報生成プログラムの好適な実施の形態を詳細に説明する。
【００１６】
（マルチコアプロセッサシステムのハードウェア）
図１は、実施の形態にかかるマルチコアプロセッサシステム１００のハードウェアを示すブロック図である。図１において、マルチコアプロセッサシステム１００は、ＣＰＵを複数搭載するＣＰＵｓ１０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、を含む。また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ１０４と、フラッシュＲＯＭコントローラ１０５と、フラッシュＲＯＭ１０６と、を含む。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ１０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０８と、キーボード１０９と、を含む。また、各部はバス１１０によってそれぞれ接続されている。
【００１７】
ここで、ＣＰＵｓ１０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ１０１は、シングルコアのプロセッサを並列して接続した全てのＣＰＵを指している。ＣＰＵｓ１０１は、ＣＰＵ＃０、ＣＰＵ＃１を含む。さらに、ＣＰＵｓ１０１は、３つ以上のＣＰＵを含んでいてもよい。ＣＰＵ＃０、ＣＰＵ＃１は、それぞれ専用のキャッシュメモリを有する。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるＣＰＵが並列されている形態を例にあげて説明する。
【００１８】
また、ＣＰＵ＃０、ＣＰＵ＃１は、それぞれ専用のレジスタを持ち、さらに本実施の形態の特徴となる、それぞれ専用のレジスタ同期制御装置を有している。レジスタ同期制御装置の詳細については、図２にて後述する。
【００１９】
ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵｓ１０１のワークエリアとして使用される。フラッシュＲＯＭ１０４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ１０８によって新しいＯＳを受信し、フラッシュＲＯＭ１０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２０】
フラッシュＲＯＭコントローラ１０５は、ＣＰＵｓ１０１の制御に従ってフラッシュＲＯＭ１０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ１０６は、フラッシュＲＯＭコントローラ１０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ１０８を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ１０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２１】
ディスプレイ１０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２２】
Ｉ／Ｆ１０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１１１に接続され、ネットワーク１１１を介して他の装置に接続される。そして、Ｉ／Ｆ１０８は、ネットワーク１１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２３】
キーボード１０９は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード１０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２４】
図２は、ＣＰＵｓ１０１に専用同期回線を用いたレジスタ同期制御装置を適用した状態を示すブロック図である。図２において示されるハードウェアは、ＣＰＵｓ１０１に含まれるＣＰＵ＃０、ＣＰＵ＃１、ＲＡＭ１０３、キャッシュコヒーレンシ機構の一種であるスヌープ機構２０１である。また、ＣＰＵ＃０、ＣＰＵ＃１の内部には、ＣＰＵ内演算ユニット２０２、ＣＰＵ内レジスタ群２０３、キャッシュメモリ２０４が存在する。以下、ＣＰＵ＃０、ＣＰＵ＃１の各々に対応する意味で、接尾記号である“＃０”、“＃１”を、各ハードウェア、ソフトウェアに付与した場合は、それぞれのＣＰＵの内部に存在するハードウェア、それぞれのＣＰＵで実行中のソフトウェアであることを示す。
【００２５】
さらにＣＰＵ＃０、ＣＰＵ＃１の内部には、本実施の形態での特徴である、レジスタ同期制御装置２０５と通信部２０６が存在する。また、ＣＰＵ内演算ユニット２０２は、ＣＰＵ内レジスタ群２０３にアクセス可能である。また、ＣＰＵ内演算ユニット２０２とレジスタ同期制御装置２０５は、アドレスバス２０７で接続され、通信部２０６＃０、通信部２０６＃１は、専用回線２０８で接続されている。
【００２６】
スヌープ機構２０１は、ＣＰＵ＃０、ＣＰＵ＃１がアクセスするキャッシュメモリ２０４＃０、キャッシュメモリ２０４＃１の整合性を取る装置である。スヌープ機構２０１は、キャッシュメモリが自身のキャッシュメモリや他ＣＰＵのキャッシュメモリの更新状態を管理し、他のキャッシュメモリと更新状態の情報を交換する。更新状態の情報を交換することで、スヌープ機構２０１は、どのキャッシュメモリに最新のデータが存在するかを判断する。また、各キャッシュメモリが最新のデータを取得できるように、スヌープ機構２０１は、自身のキャッシュメモリの状態を変更したりキャッシュメモリの無効化を行ったりする。
【００２７】
ＣＰＵ内演算ユニット２０２は、整数演算操作、論理演算、ビットシフト操作等を行う演算ユニットである。ＣＰＵ内演算ユニット２０２は、ＣＰＵ内レジスタ群２０３をＲＡＭ１０３等から読み込んだ命令コードに従って演算を行う。
【００２８】
ＣＰＵ内レジスタ群２０３は、ＣＰＵ内演算ユニット２０２が演算を行うために用いられる記憶装置である。ＣＰＵ内レジスタ群２０３は、用途に応じていくつかの種類が存在する。たとえば、アキュムレータ、アドレスレジスタ、汎用レジスタ、プログラムカウンタ、ステータスレジスタ等が存在する。
【００２９】
アキュムレータは、演算結果を記憶するといった、データを一時的に記憶するレジスタである。アドレスレジスタは、メモリをアクセスする場合のアドレスを指定するときに用いるレジスタである。汎用レジスタは、特定の目的を持たず、命令により各種機能を果たすレジスタであり、特に、アキュムレータとアドレスレジスタの機能を有している。
【００３０】
プログラムカウンタは、次に実行するべき命令が格納されているメインメモリ上のアドレスを指し示すレジスタである。ステータスレジスタは、演算結果によって生じた桁あふれやアキュムレータが０であることの状態、あるいは各種のプロセッサの状態を保持するレジスタである。なお、アキュムレータ、アドレスレジスタ、汎用レジスタ、プログラムカウンタ、ステータスレジスタ以外に、ＣＰＵの仕様によっては、専用レジスタも存在する。たとえば、浮動小数点を扱う浮動小数点レジスタが存在する。
【００３１】
たとえば、ＣＰＵ内演算ユニット２０２は、ＲＡＭ１０３から、機械語で書かれた命令データをフェッチする。ここで、命令データがニーモニックで表現すると“Ｓｔｏｒｅ  Ｇｒ１  Ａｃｃ＃”と書かれていたと想定する。“Ｇｒ１”は、汎用レジスタを指しており、“Ａｃｃ＃”はアキュムレータを指している。フェッチ後、ＣＰＵ内演算ユニット２０２は、命令データを実行する。前述の例では、ＣＰＵ内演算ユニット２０２は、アキュムレータの値を汎用レジスタ“Ｇｒ１”に格納する。キャッシュメモリ２０４は、ＣＰＵ＃０、ＣＰＵ＃１がＲＡＭ１０３のデータに高速にアクセス可能とするため、ＲＡＭ１０３のデータの一部をコピーした記憶領域である。
【００３２】
レジスタ同期制御装置２０５は、ＣＰＵ内レジスタ群２０３＃０とＣＰＵ内レジスタ群２０３＃１の同期を制御する装置である。たとえば、レジスタ同期制御装置２０５＃０、レジスタ同期制御装置２０５＃１は、汎用レジスタの一つであるＧｒ１レジスタをＣＰＵ＃０とＣＰＵ＃１で同期を取る。
【００３３】
通信部２０６は、レジスタ同期制御装置２０５に接続されており、他のレジスタ同期制御装置２０５との通信を行う。具体的には、通信部２０６＃０は、レジスタ同期制御装置２０５＃０が取得したＣＰＵ＃０のレジスタの値を、専用回線２０８を通じてレジスタ同期制御装置２０５＃１に転送する。レジスタの値を受信した通信部２０６＃１は、レジスタの値をレジスタ同期制御装置２０５＃１に通知する。
【００３４】
図３は、ＣＰＵｓ１０１にスヌープ機構２０１を用いたレジスタ同期制御装置を適用した状態を示すブロック図である。図２では、通信部２０６＃０と通信部２０６＃１が専用回線２０８によって通信を行っていたが、図３では、キャッシュメモリ２０４とスヌープ機構２０１を用いてレジスタの値等を転送する。
【００３５】
具体的には、マルチコアプロセッサシステム１００の設計時、設計者が、キャッシュメモリ２０４の中に、レジスタ同期のための保護領域３０１を確保する。保護領域３０１は、キャッシュメモリ２０４の領域のうち、ＣＰＵに割り当てられるスレッドなどによって使用され、データが入れ替わる領域とは別の領域であり、データが消去されないように保護されている領域である。初めに、通信部２０６＃０は、保護領域３０１＃０にレジスタの値を書き込む。保護領域３０１＃０に書き込まれたことを検出したスヌープ機構２０１は、保護領域３０１＃０の内容を保護領域３０１＃１にコピーする。コピー後、通信部２０６＃１は、保護領域３０１＃１に書き込まれたレジスタの値をレジスタ同期制御装置２０５＃１に通知する。
【００３６】
図４は、同期イベントが発生する状態を示す説明図である。図４では、アセンブラソース４０１からの実行オブジェクト４０２が実行されることによって、同期イベントが発生する状態を示している。また、符号４０３に示す説明図は、実行オブジェクトがシングルコアで動作する場合を示しており、符号４０４に示す説明図は、実行オブジェクトがマルチコアで動作する場合を示している。
【００３７】
設計時、アセンブラがアセンブラソース４０１を読み込み、１対１変換された実行オブジェクト４０２を生成する。図４の例では、アセンブラは、実行オブジェクト４０２として、ブロック４０５とブロック４０６を生成する。なお、アセンブラソース４０１は、Ｃ／Ｃ＋＋ソース１３０１と同様の内容となる“Ａ＝Ａ＋１；ｆｕｎｃ（Ａ）；”という２ステートメントが記載されている。また、アセンブラソース４０１は、前述の２ステートメントを最小の命令数で実行するため、意図的な同期制御コードは挿入されていない。
【００３８】
各ブロックの処理内容として、ブロック４０５は、アキュムレータの値をレジスタＧｒ１に格納し、ｆｕｎｃ（）が存在する０ｘ０２ＦＦ００００番地にジャンプするといった命令が記載されている。ブロック４０６は、レジスタＧｒ１の内容をアキュムレータに読み直すといった命令が記載されている。
【００３９】
ＣＰＵがブロック４０５、ブロック４０６を実行する際には、ＣＰＵはスレッドを生成し、スレッド上で各ブロックを実行する。符号４０３に示す説明図では、ブロック４０５によるスレッドとブロック４０６によるスレッドをシングルコアが実行する場合を想定している。このとき、ブロック４０５のレジスタＧｒ１とブロック４０６のレジスタＧｒ１は同一であるため、正常に動作する。
【００４０】
符号４０４に示す説明図では、ブロック４０５によるスレッドをＣＰＵｓ１０１のうちのＣＰＵ＃Ｍが実行し、ブロック４０６をＣＰＵ＃Ｍとは異なるＣＰＵであるＣＰＵ＃Ｎが実行するといった、マルチコアで動作する場合を想定している。なお、ＭとＮは、０以上の整数である。このとき、ブロック４０５のレジスタＧｒ１は、ＣＰＵ＃ＭのレジスタＧｒ１であり、ブロック４０６のレジスタＧｒ１はＣＰＵ＃ＮのレジスタＧｒ１となるため、正常に動作しない。
【００４１】
値が等しくなれば正常に動作するため、たとえば、ＣＰＵ＃ＭのレジスタＧｒ１とＣＰＵ＃ＮのレジスタＧｒ１が同期を取ることで、マルチコアでブロック４０５、ブロック４０６を正常に動作させることができる。具体的には、ＣＰＵ＃ＭのレジスタＧｒ１の値を、ＣＰＵ＃ＮのレジスタＧｒ１に上書きすることで、同期を取ることができる。
【００４２】
以下、正常動作するために、２つのＣＰＵ間のレジスタの同期を取る契機が発生した場合、同期イベントが発生したとする。また、レジスタの同期元となるＣＰＵ＃Ｍを、同期元ＣＰＵとし、レジスタの同期先となるＣＰＵ＃Ｎを、同期先ＣＰＵとする。さらに、図４の例では、同期元となるスレッドを同期元スレッド、同期先となるスレッドを同期先スレッドとする。図４の例では、ブロック４０５によるスレッドが同期元スレッド、ブロック４０６によるスレッドが同期先スレッドとなる。なお、同期元ＣＰＵから、同期先ＣＰＵにスレッドが移行した場合、同期元スレッドと同期先スレッドは同一のスレッドである。また、同期先スレッドが同期元スレッドから分岐されたスレッドである場合、同期元スレッドと同期先スレッドは異なるスレッドとなる。
【００４３】
（マルチコアプロセッサシステム１００の機能）
次に、マルチコアプロセッサシステム１００の機能について説明する。図５は、マルチコアプロセッサシステム１００の機能を示すブロック図である。マルチコアプロセッサシステム１００は、検出部５０２と、特定部５０３と、生成部５０４と、同期制御部５０５と、設定部５０６と、取得部５０７と、読込部５０８と、書込部５０９と、送信部５１０と、受信部５１１と、を含む。
【００４４】
この制御部となる機能のうち、検出部５０２〜生成部５０４、設定部５０６は、記憶装置に記憶されたプログラムをＣＰＵｓ１０１が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４、フラッシュＲＯＭ１０６などである。
【００４５】
また、同期制御部５０５と、取得部５０７と、読込部５０８と、書込部５０９と、送信部５１０と、受信部５１１は、図２に示したレジスタ同期制御装置２０５によってその機能を実現する。
【００４６】
また、図５では、ＣＰＵ＃０がマルチコアプロセッサシステム１００を制御するマスタＣＰＵとして、またＣＰＵ＃ＭとＣＰＵ＃Ｎがレジスタ間の同期制御対象のＣＰＵであることを想定している。また、ＣＰＵ＃０がマスタＣＰＵであり、かつレジスタ間の同期制御対象のＣＰＵとなってもよい。たとえば、ＣＰＵ＃０がマスタＣＰＵであり、レジスタ間の同期制御対象の同期先ＣＰＵとなる場合、ＣＰＵ＃０の機能として設定部５０６を含んでもよい。
【００４７】
また、マルチコアプロセッサシステム１００は、スレッド群の各々のスレッドとスレッドに対応付けされたレジスタとの組み合わせを特定するレジスタ依存テーブル５０１にアクセス可能である。レジスタ依存テーブル５０１は、スレッドの実行対象となる実行オブジェクトについて、実行オブジェクトを並列で実行可能なブロックに分割した際に、ブロック間の情報とブロック間で値を引き継ぐレジスタを記憶している。レジスタ依存テーブル５０１の詳細は、図１０にて後述する。
【００４８】
また、レジスタ依存テーブル５０１におけるスレッドに対応付けされたレジスタは、マルチコアプロセッサのいずれのコアも特定しなくてもよい。具体的には、レジスタ依存テーブル５０１には、スレッドに対応する実行オブジェクトの一部である２つのブロックの情報と、レジスタ名が格納されている。レジスタ名に関しては、ＣＰＵｓ１０１の全てのＣＰＵが有するレジスタ名であり、レジスタ名でＣＰＵｓ１０１のうちいずれかのＣＰＵを特定しない。
【００４９】
また、レジスタ依存テーブル５０１は、レジスタ以外の他の記憶領域を指定しなくてもよい。具体的には、レジスタ依存テーブル５０１は、レジスタ名が格納されており、他の記憶領域となるキャッシュメモリ２０４、ＲＡＭ１０３、フラッシュＲＯＭ１０４等を指定しない。
【００５０】
検出部５０２は、マルチコアプロセッサの中の特定のコアにより、マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する機能を有する。たとえば、検出部５０２は、ＣＰＵｓ１０１の中のＣＰＵ＃０により、ＣＰＵ＃Ｍで実行中のスレッドをＣＰＵ＃Ｎに移行することを検出する。
【００５１】
また、検出部５０２は、同期元コアで実行中の第１のスレッドから分岐された第２のスレッドを同期先コアに生成することを検出してもよい。たとえば、検出部５０２は、ＣＰＵ＃Ｍで実行中の第１のスレッドから分岐される第２のスレッドをＣＰＵ＃Ｎに生成することを検出する。なお、検出されたという情報は、ＣＰＵ内レジスタ群２０３＃０、キャッシュメモリ２０４＃０、ＲＡＭ１０３などの記憶領域に記憶される。
【００５２】
特定部５０３は、特定のコアにより、レジスタ依存テーブル５０１を参照して、検出部５０２によって移行することが検出されたスレッドに対応する特定のレジスタを特定する機能を有する。また、特定部５０３は、ＣＰＵ＃Ｍで実行中の第１のスレッドおよび第１のスレッドから分岐され、ＣＰＵ＃Ｎで実行される第２のスレッドに対応する特定のレジスタを特定してもよい。
【００５３】
具体的には、特定部５０３は、ＣＰＵ＃０により、レジスタ依存テーブル５０１のレコードのうち、ＣＰＵ＃Ｍが実行する実行オブジェクトのブロックとＣＰＵ＃Ｎが実行する実行オブジェクトのブロックに基づいて、該当するレコードを特定する。該当するレコードが特定できた場合に、特定部５０３は、該当するレコードに記憶されているレジスタ名を、特定のレジスタとして特定する。なお、特定されたレジスタの情報は、ＣＰＵ内レジスタ群２０３＃０、キャッシュメモリ２０４＃０、ＲＡＭ１０３などの記憶領域に記憶される。
【００５４】
生成部５０４は、特定のコアにより、特定部５０３によって特定された特定のレジスタおよび同期先コアを特定する同期制御情報を生成する機能を有する。たとえば、特定部５０３によってＧｒ１レジスタが特定されたと想定する。このとき、生成部５０４は、ＣＰＵ＃０により、Ｇｒ１レジスタおよびＣＰＵ＃Ｎを特定する同期制御情報を生成する。
【００５５】
特定のレジスタおよび同期先コアを特定する方法としては、たとえば、同期制御情報は、特定のレジスタの名称、または、ＩＤ（ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）が格納され、同期先コアのＣＰＵ番号が格納される。なお、生成された同期制御情報は、ＲＡＭ１０３などの記憶領域に記憶され、同期元ＣＰＵ上で動作するレジスタ同期制御装置２０５のドライバによって、レジスタ同期制御装置２０５の記憶領域である同期制御レジスタに記憶される。同期制御レジスタについては、図６にて詳細に後述する。
【００５６】
同期制御部５０５は、マルチコアプロセッサと通信可能に接続され、生成部５０４によって生成された同期制御情報を特定のコアから取得し、同期制御情報から得られる特定のレジスタの値を同期元コアの特定のレジスタから読み込む。続けて、同期制御部５０５は、同期先コアの特定のレジスタに、同期元コアの特定のレジスタから読み込んだ値を書き込む機能を有する。たとえば、同期制御部５０５は、同期制御情報をＣＰＵ＃０から取得し、レジスタＧｒ１の値をＣＰＵ＃ＭのＣＰＵ内レジスタ群２０３＃ＭのうちレジスタＧｒ１から読み込む。続けて、同期制御部５０５は、ＣＰＵ＃ＮのＣＰＵ内レジスタ群２０３＃ＮのレジスタＧｒ１に、ＣＰＵ＃ＭのレジスタＧｒ１から読み込んだ値を書き込む。
【００５７】
また、同期制御部５０５は、同期元コアの特定のレジスタから読み込んだ値を書き込んだ場合に、同期先コアに、検出されたスレッドが実行可能となった情報を通知してもよい。同期先コアに検出されたスレッドが実行可能となった情報とは、たとえば、割込信号であり、同期制御部５０５は、割込信号を同期先コアに通知する。具体的には、同期制御部５０５は、ＣＰＵ＃ＮのＣＰＵ内レジスタ群２０３＃ＮのうちレジスタＧｒ１に、ＣＰＵ＃ＭのレジスタＧｒ１から読み込んだ値を書き込んだ場合、ＣＰＵ＃Ｎに割込信号を通知する。
【００５８】
設定部５０６は、同期先のコアにより、検出されたスレッドを同期先コアにて実行可能な状態に設定する機能を有する。また、設定部５０６は、同期制御部５０５から検出されたスレッドが実行可能となった情報を受け取った場合、検出されたスレッドを同期先コアにて実行可能な状態に設定してもよい。たとえば、設定部５０６は、ＣＰＵ＃Ｎにより、検出されたスレッドを移行し、実行可能な状態に設定する。また、同期元コアで実行中の第１のスレッドから分岐した第２のスレッドが同期先コアに生成される場合、ＣＰＵ＃Ｎは、第２のスレッドがアクセスする領域、たとえば、スレッドコンテキストをＲＡＭ１０３に確保し、第２のスレッドが実行可能な状態に設定する。
【００５９】
取得部５０７は、生成部５０４によって特定のレジスタおよび同期先コアを特定する同期制御情報が生成された場合、特定のコアから同期制御情報を取得する機能を有する。具体的には、取得部５０７は、Ｇｒ１レジスタおよびＣＰＵ＃ＮのＣＰＵ番号の同期制御情報を取得する。なお、取得された情報は、レジスタ同期制御装置２０５＃Ｍの記憶領域に格納される。
【００６０】
読込部５０８は、取得部５０７によって取得された同期制御情報から得られる特定のレジスタの値を同期元コアの特定のレジスタから読み込む機能を有する。具体的には、読込部５０８は、レジスタＧｒ１の値を、ＣＰＵ＃ＭのＣＰＵ内レジスタ群２０３＃ＭのうちレジスタＧｒ１から読み込む。なお、読み込まれた値は、レジスタ同期制御装置２０５＃Ｍの記憶領域に格納される。
【００６１】
書込部５０９は、同期先コアの特定のレジスタに、読込部５０８によって同期元コアの特定のレジスタから読み込まれた値を書き込む。具体的には、書込部５０９は、ＣＰＵ＃ＮのＣＰＵ内レジスタ群２０３＃ＮのうちレジスタＧｒ１に、ＣＰＵ＃ＭのレジスタＧｒ１から読み込まれた値を書き込む。
【００６２】
送信部５１０は、特定のレジスタおよび読込部５０８によって読み込まれた特定のレジスタの値を、同期先コアに送信する機能を有する。具体的には、送信部５１０は、レジスタＧｒ１およびレジスタＧｒ１の値を、レジスタ同期制御装置２０５＃Ｎに送信する。
【００６３】
受信部５１１は、他の同期制御装置により特定のレジスタおよび特定のレジスタの値を受信する機能を有する。具体的には、受信部５１１は、レジスタ同期制御装置２０５＃ＭによりレジスタＧｒ１およびレジスタＧｒ１の値を受信する。なお、受信したレジスタとレジスタの値は、レジスタ同期制御装置２０５＃Ｎの記憶領域に格納される。
【００６４】
図６は、同期イベント未発生時におけるレジスタ同期制御装置２０５の概要を示す説明図である。図６ではＣＰＵ＃０の内部を用いて説明を行う。ＣＰＵ＃０以外のＣＰＵの内部も、図６で示すＣＰＵ＃０の内部と等しい。図６で示すハードウェアは、ＣＰＵ内演算ユニット２０２＃０、ＣＰＵ内外部Ｉ／Ｏ６０１＃０、割込コントローラ６０２＃０、ＣＰＵ内レジスタ群２０３＃０、レジスタ同期制御装置２０５＃０である。ＣＰＵ内外部Ｉ／Ｏ６０１＃０とレジスタ同期制御装置２０５＃０は、アドレスバス２０７＃０によって接続されている。また、アドレスバス２０７＃０は、キャッシュメモリ２０４＃０、バス１１０に接続しており、バス１１０を通して、ＲＡＭ１０３、ディスプレイ１０７等のペリフェラルのレジスタに接続している。
【００６５】
また、レジスタ同期制御装置２０５＃０には、同期制御レジスタ６０３＃０、レジスタリーダ６０４＃０、レジスタライタ６０５＃０、受信ＦＩＦＯ６０６＃０、送信ＦＩＦＯ６０７＃０、割込コントローラ６０８＃０が含まれる。同期制御レジスタ６０３＃０は、アドレスバス２０７＃０に接続されており、受信ＦＩＦＯ６０６＃０と送信ＦＩＦＯ６０７＃０は、通信部２０６＃０に接続されている。割込コントローラ６０８＃０は、割込コントローラ６０２＃０に接続している。
【００６６】
ここで、マルチコアプロセッサシステム１００は、ＲＡＭ１０３のアドレス空間に入出力機器のアドレス空間が共存するメモリマップドＩ／Ｏの形態を取っている。ここで、キャッシュメモリ２０４のアドレス領域が３２［キロバイト］であり、０ｘ００００８０００〜０ｘ００００ＦＦＦＦであり、ＲＡＭ１０３のアドレス領域が３２［メガバイト］であり、０ｘ０２００００００〜０ｘ０３ＦＦＦＦＦＦである状態を想定する。また、０ｘ０００１００００〜０ｘ０１ＦＦＦＦＦＦは未割当領域とする。
【００６７】
たとえば、設計者は、同期制御レジスタ６０３＃０のアドレス領域を、未割当領域のうち０ｘ０００２００００〜０ｘ０００２０００３に設定する。これにより、ＣＰＵ内演算ユニット２０２は、アドレス指定によって同期制御レジスタ６０３＃０にアクセスすることができる。なお、マルチコアプロセッサシステム１００がＲＡＭ１０３のアドレス空間に入出力機器のアドレス空間が共存しないポートマップドＩ／Ｏであっても、各ＣＰＵが、入出力機器のアドレス空間に対してアクセスすることで、同期制御レジスタ６０３＃０にアクセスすることができる。
【００６８】
ＣＰＵ内外部Ｉ／Ｏ６０１＃０は、ＣＰＵ内演算ユニット２０２＃０がアドレスバス２０７＃０に入出力するためのポートである。たとえば、ＣＰＵ内演算ユニット２０２＃０は、ＲＡＭ１０３や、同期制御レジスタ６０３＃０にアクセスする際に、ＣＰＵ内外部Ｉ／Ｏ６０１＃０を経由してアクセスする。
【００６９】
割込コントローラ６０２＃０は、割込信号を受け付け、ＣＰＵ内演算ユニット２０２＃０に割込番号を通知する。図６の例では、割込コントローラ６０２＃０は、割込コントローラ６０８＃０からの割込信号の入力を受け付けているが、他の割込信号、たとえば、キーボード１０９からの割込信号を受け付け、ＣＰＵ内演算ユニット２０２＃０に割込番号を通知する。割込コントローラ６０２＃０は、複数の割込み入力端子を有し、端子ごとに割込番号を設定している。
【００７０】
たとえば、割込コントローラ６０２＃０のある１端子が、割込コントローラ６０８＃０からの割込信号を受け付け、また別の端子が、キーボード１０９からの割込み信号を受け付けている。また、割込コントローラ６０２＃０は、複数の割込信号を受け付けた場合に、割込信号に設定された優先順位に従って割込み番号を通知する機能を有する。
【００７１】
同期制御レジスタ６０３＃０は、同期対象となるレジスタの情報と同期先のＣＰＵの情報が含まれる同期制御情報を設定するレジスタである。同期制御レジスタ６０３＃０は、各ＣＰＵの汎用レジスタ、浮動小数点レジスタといったアキュムレータとは異なり、アドレスバス経由で一種のペリフェラルとして見えているレジスタである。同期制御レジスタ６０３＃０は、ユーザプログラムから使用されるレジスタ群、たとえば、アキュムレータ、汎用レジスタ、浮動小数点レジスタ、のコヒーレンスを実現する。具体的には、同期制御レジスタ６０３は、同期対象レジスタ名に、コヒーレンスを実行するレジスタの名称を記憶する。同期制御レジスタ６０３に設定される同期制御情報の詳細は、図７にて後述する。
【００７２】
レジスタリーダ６０４＃０は、同期制御レジスタ６０３＃０の同期対象レジスタ名に書き込まれたレジスタ名から、ＣＰＵ内レジスタ群２０３＃０のうち同期対象レジスタ名に対応するレジスタの値を読み込む。たとえば、同期対象レジスタ名に“Ｇｒ１”が記憶された場合、レジスタリーダ６０４＃０は、ＣＰＵ内レジスタ群２０３＃０のＧｒ１レジスタの値を読み込む。
【００７３】
レジスタライタ６０５＃０は、受信ＦＩＦＯ６０６＃０からレジスタ名と値を受け取って、ＣＰＵ内レジスタ群２０３＃０から受け取ったレジスタ名に対応するレジスタに受け取った値を書き込む。たとえば、受信ＦＩＦＯ６０６＃０から、“Ｇｒ１  １”というデータを受け取った場合、レジスタライタ６０５＃０は、ＣＰＵ内レジスタ群２０３＃０のＧｒ１レジスタに“１”を書き込む。
【００７４】
受信ＦＩＦＯ６０６＃０は、通信部２０６＃０から送られてきたレジスタ名と値を格納する。また、受信ＦＩＦＯ６０６＃０は、バリア同期を実現するため、レジスタライタ６０５＃０がレジスタの書き込み完了後に、ＣＰＵ制御として割込信号を割込コントローラ６０８に通知する。
【００７５】
送信ＦＩＦＯ６０７＃０は、レジスタリーダ６０４＃０から送られてきた同期先ＣＰＵの情報とレジスタ名とレジスタの値を格納する。また、送信ＦＩＦＯ６０７＃０は、通信部２０６＃０に同期先ＣＰＵの情報とレジスタ名とレジスタの値を送信する。また、送信ＦＩＦＯ６０７＃０は、レジスタ名とレジスタの値を送信する際に、同期信号となる割込信号を送信する。
【００７６】
割込コントローラ６０８＃０は、送信ＦＩＦＯ６０７＃０以外となる他の送信ＦＩＦＯ６０７からの割込信号を受け付け、割込コントローラ６０２＃０に割込番号を通知する。送信ＦＩＦＯ６０７＃０以外となる他の送信ＦＩＦＯ６０７とは、たとえば、送信ＦＩＦＯ６０７＃１である。また、割込コントローラ６０８＃０は受信ＦＩＦＯ６０６＃０からも割込信号を受け付け、割込コントローラ６０２＃０に割込番号を通知する。なお、割込コントローラ６０８＃０と他の割込コントローラ６０８とは、通信部２０６を経由せず、直接結線されている。
【００７７】
なお、図５に示したレジスタ同期制御装置２０５の機能部と、図６で示した各部の対応としては、取得部５０７は同期制御レジスタ６０３が対応し、読込部５０８はレジスタリーダ６０４が対応し、書込部５０９はレジスタライタ６０５が対応する。また、送信部５１０は送信ＦＩＦＯ６０７が対応し、受信部５１１は、受信ＦＩＦＯ６０６が対応する。
【００７８】
図６の例では、同期イベントが発生していない状態であり、ＣＰＵ内演算ユニット２０２は、ＲＡＭ１０３からフェッチした命令によって、ＣＰＵ内レジスタ群２０３＃０のリード、ライトを行う。
【００７９】
図７は、同期制御レジスタ６０３の記憶内容の一例を示す説明図である。同期制御レジスタ６０３は３２［ビット］の領域で、同期フラグ、同期対象レジスタ名、同期先ＣＰＵ番号という３つのフィールドを有する。同期制御情報は、同期対象レジスタ名、同期先ＣＰＵ番号となるが、同期フラグを含めてもよい。同期フラグフィールドは１［ビット］の領域で、レジスタの同期処理が実行中か否かを示すフラグを格納する。以下、同期フラグが１の場合に、同期処理を実行中であるとして説明を行う。同期対象レジスタ名フィールドは８［ビット］の領域で、同期を行うレジスタ番号を格納する。同期先ＣＰＵ番号フィールドは８［ビット］の領域で、同期を行うＣＰＵ番号を格納する。
【００８０】
なお、同期対象レジスタ名フィールドと同期先ＣＰＵ番号フィールドの領域は８［ビット］であり、２５６種類のレジスタやＣＰＵ番号を取り扱うことができる。また、ＣＰＵ数が２５６より多い場合でも、予備の１５［ビット］を使用することで、対応可能である。
【００８１】
また、同期先ＣＰＵ番号フィールドについて、通常はユニキャストとして同期を行うＣＰＵ番号が格納されるが、複数のＣＰＵに同じレジスタの値を送信する可能性がある場合、複数のＣＰＵに送るモードを設定してもよい。たとえば、同期先ＣＰＵ番号フィールドに０ｘＦＦが格納された場合は、送信ＦＩＦＯ６０７は、レジスタの値を自身のＣＰＵを除く全てのＣＰＵにブロードキャストする、というように同期先ＣＰＵ番号フィールドを設定してもよい。具体的には、同期フラグに１が格納され、同期対象レジスタ名フィールドに、Ｇｒ１レジスタのレジスタ番号、同期先ＣＰＵ番号フィールドにＣＰＵ＃１のＣＰＵ番号が格納される。
【００８２】
図８は、同期イベント発生時における同期元ＣＰＵのレジスタ同期制御装置２０５の概要を示す説明図である。同期イベントが発生すると、同期元ＣＰＵであるＣＰＵ＃Ｍが、ＣＰＵ＃Ｍ上で実行しているドライバ８０１＃Ｍによって、同期制御レジスタ６０３＃Ｍに同期制御情報を設定する。なお、同期制御情報は、マスタＣＰＵ、たとえば、ＣＰＵ＃０が出力する。
【００８３】
設定後、レジスタリーダ６０４＃Ｍは、同期制御情報によって、ＣＰＵ内レジスタ群２０３＃Ｍから、レジスタの値を読み込み、送信ＦＩＦＯ６０７＃Ｍのバッファに同期先ＣＰＵの番号とレジスタ名とレジスタの値を書き込む。書き込み後、送信ＦＩＦＯ６０７＃Ｍは、同期信号となる割込信号を同期先ＣＰＵのレジスタ同期制御装置２０５の割込コントローラ６０８に送信する。割込信号とあわせて、送信ＦＩＦＯ６０７＃Ｍは、レジスタ名とレジスタの値を同期先ＣＰＵのレジスタ同期制御装置２０５の受信ＦＩＦＯ６０６に送信する。送信後、送信ＦＩＦＯ６０７＃Ｍは、同期フラグを０に上書きする。
【００８４】
なお、ＣＰＵ＃Ｍが同期制御情報を同期制御レジスタ６０３＃Ｍに設定する場合、同期イベントの発生時に同期制御情報の全ての内容を設定せず、一部の情報を事前に設定してあってもよい。たとえば、アセンブラ等によって予め同期先ＣＰＵがアサインされているスタティックスケジューリングの場合であれば、ＣＰＵ＃Ｍは、同期対象レジスタ名、同期先ＣＰＵ番号を同期イベントの発生前に設定してもよい。そして、ＣＰＵ＃Ｍは、同期イベントの発生時に同期フラグを設定してもよい。なお、スケジューラにより同期先ＣＰＵが決定されるダイナミックスケジューリングであれば、ＣＰＵ＃Ｍは、同期イベントの発生時に、同期対象レジスタ名、同期先ＣＰＵ番号、同期フラグを設定する。
【００８５】
図９は、同期イベント発生時における同期先ＣＰＵのレジスタ同期制御装置２０５の概要を示す説明図である。同期先ＣＰＵとなるＣＰＵ＃Ｎの割込コントローラ６０８＃Ｎは、割込信号を受けると、割込コントローラ６０２＃Ｎに割込番号を通知する。また、割込コントローラ６０２＃Ｎ経由で割込番号を通知されたＣＰＵ内演算ユニット２０２＃Ｎは、同期先スレッドを生成し、ＣＰＵ内レジスタ群２０３＃ＮへのＩ／Ｏを抑止する。
【００８６】
割込コントローラ６０８＃Ｎが割込信号を受けた後、受信ＦＩＦＯ６０６＃Ｎは、レジスタ名とレジスタの値を取得する。取得後、レジスタライタ６０５＃Ｎは、取得されたレジスタの値を、ＣＰＵ内レジスタ群２０３＃Ｎに書き込む。書き込み完了後、受信ＦＩＦＯ６０６＃Ｎは、書き込み完了通知として、割込信号を割込コントローラ６０８＃Ｎに通知する。割込コントローラ６０８＃Ｎは、割込信号を受けると、割込コントローラ６０２＃Ｎに割込番号を通知する。
【００８７】
このとき、好ましくは、レジスタ同期制御装置２０５＃Ｍからの割込信号による割込番号と、受信ＦＩＦＯ６０６＃Ｎからの割込信号による割込番号は異なっていた方がよい。割込番号が異なることで、割込コントローラ６０２＃Ｎから割込番号を受けたＣＰＵ内演算ユニット２０２＃Ｎや、ＣＰＵ＃Ｎで実行中のＯＳは、どの要因による割込番号であるかを判断することができる。
【００８８】
図１０は、マルチコアプロセッサシステム１００の設計時における概要を示す説明図である。アセンブラは、アセンブラソース４０１を読み込み、１対１変換された実行オブジェクト４０２を生成する。さらに、アセンブラは、アセンブラソース４０１の構造解析を行い、レジスタ依存テーブル５０１を生成する。なお、Ｃ／Ｃ＋＋ソースの中に、一部アセンブラソースが混入していることもある。その場合も、マルチコアプロセッサシステム１００は、アセンブラソースであるとして扱う。
【００８９】
具体的な構造解析としては、構造解析プログラムがアセンブラソースを読み込み、ジャンプや条件分岐を節としたブロック構造を抽出する。さらに、構造解析プログラムは、各ブロックの入出力データとして、最終的に読み書きしたレジスタ、メモリ上のアドレス空間を抽出する。続けて、構造解析プログラムは、入出力データを用いて、ブロック間の入出力値としてアドレス空間ではなくレジスタが用いられるケースをレジスタ依存関係のあるブロックとして定義する。構造解析プログラムは、レジスタ依存関係にある２つのブロックと、依存関係があるとされたレジスタとを、１レコードとしてレジスタ依存テーブル５０１に出力する。
【００９０】
レジスタ依存テーブル５０１は、ブロック間で、依存関係のあるレジスタ名を記載した情報である。具体的に、レジスタ依存テーブル５０１は、同期元ブロック名、同期先ブロック名、依存レジスタ名、という３つのフィールドを有している。
【００９１】
同期元ブロック名フィールドは、同期元スレッドとなるブロックの情報が、同期先ブロック名フィールドは、同期先スレッドとなるブロックの情報が格納されている。図４の例を用いると、同期元ブロック名フィールドと同期先ブロック名フィールドは、たとえば、ブロック４０５、ブロック４０６の名称が格納されている。なお、ブロックの名称の代わりに、ブロックの先頭アドレスと末尾アドレスが格納されてもよい。依存レジスタ名フィールドは、同期元ブロック名フィールドと同期先ブロック名フィールドで格納されたブロック間で依存関係のあるレジスタ名が格納されている。図４の例を用いると、依存レジスタ名フィールドは、“Ｇｒ１”という文字列が格納されている。
【００９２】
図１１は、スケジュール処理を示すフローチャートである。図１１、図１２に示すフローチャートは、マルチコアプロセッサシステム１００全体のスレッドのスケジュールをマスタＣＰＵであるＣＰＵ＃０で行い、同期元スレッドをＣＰＵ＃Ｍが実行する場合を想定している。また、ＣＰＵ＃ＭとＣＰＵ＃０が同一のＣＰＵであってもよい。
【００９３】
ＣＰＵ＃０は、イベントの種類を判断する（ステップＳ１１０１）。イベントの種類が再スケジューリングである場合（ステップＳ１１０１：再スケジューリング）、ＣＰＵ＃０は、再スケジューリング対象の実行オブジェクトがアセンブラソースで記述されていたか否かを判断する（ステップＳ１１０２）。なお、判断基準としては、ＣＰＵ＃０が、レジスタ依存テーブル５０１を参照することで判断できる。具体的に、ＣＰＵ＃０は、同期元スレッドの実行オブジェクトが同期元ブロック名フィールドに存在し、かつ再スケジューリング対象の実行オブジェクトが同期先ブロック名フィールドに存在する場合、アセンブラソースで記述されていたとして判断する。
【００９４】
また、再スケジューリングが発生する要因としては、たとえば、ＣＰＵｓ１０１の負荷がアンバランスになった場合である。負荷がアンバランスとなり、特定のＣＰＵに負荷がかかる場合に、負荷の高いＣＰＵで実行中のスレッドを、負荷の低いＣＰＵにマイグレーションすることで、負荷を均等にすることができる。アセンブラソースで記述されていた場合（ステップＳ１１０２：Ｙｅｓ）、ＣＰＵ＃０は、再スケジューリング後に割り当てるＣＰＵ＃Ｎを同期先ＣＰＵに設定する（ステップＳ１１０３）。なお、ステップＳ１１０２：Ｙｅｓのルートを通った際に、２つのＣＰＵ間のレジスタの同期を取る同期イベントが発生したことになる。
【００９５】
イベントの種類がスレッド起動である場合（ステップＳ１１０１：スレッド起動）、ＣＰＵ＃０は、新規スレッドの実行オブジェクトがアセンブラソースで記述されていたか否かを判断する（ステップＳ１１０４）。具体的に、ＣＰＵ＃０は、同期元スレッドの実行オブジェクトが同期元ブロック名フィールドに存在し、かつ新規スレッドの実行オブジェクトが同期先ブロック名フィールドに存在する場合、アセンブラソースで記述されていたとして判断する。
【００９６】
なお、スレッド起動が発生する要因のうち、特に並列実行に特化した要因として、たとえば、実行オブジェクトのブロックが繰り返し処理であった場合である。具体的には、特定のブロックが１００回処理を行うブロックであった場合、同期元スレッドが５０回分実行し、さらに新規スレッドとして同期先スレッドが残りの５０回分実行する。
【００９７】
アセンブラで記述された場合（ステップＳ１１０４：Ｙｅｓ）、ＣＰＵ＃０は、新規スレッドを割り当てるＣＰＵ＃Ｎを同期先ＣＰＵに設定する（ステップＳ１１０５）。なお、ステップＳ１１０４：Ｙｅｓのルートを通った際に、２つのＣＰＵ間のレジスタの同期を取る同期イベントが発生したことになる。ステップＳ１１０３、またはステップＳ１１０５の処理後、ＣＰＵ＃０は、同期対象レジスタ名と同期先ＣＰＵ番号と同期フラグとから同期制御情報を生成する（ステップＳ１１０６）。
【００９８】
なお、ＣＰＵ＃０は、同期対象レジスタ名を、レジスタ依存テーブル５０１の、同期元ブロック名フィールドおよび同期先ブロック名フィールドが存在したレコードの依存レジスタ名フィールドに格納された値から取得する。生成後、ＣＰＵ＃０は、同期元ＣＰＵとなるレジスタ同期制御装置２０５＃Ｍの同期制御レジスタ６０３＃Ｍに生成された同期制御情報を出力する（ステップＳ１１０７）。
【００９９】
具体的には、ＣＰＵ＃０は、ＣＰＵ＃Ｍ上で動作するドライバ８０１＃Ｍに対して同期制御情報を通知し、ドライバ８０１＃Ｍが実行されることにより、同期制御レジスタ６０３に同期制御情報が設定される。同期制御レジスタ６０３＃Ｍに同期制御情報を設定後、ＣＰＵ＃０は、ステップＳ１１０１の処理に移行する。
【０１００】
イベントが再スケジューリング、スレッド起動以外である場合（ステップＳ１１０１：その他）、ＣＰＵ＃０は、イベントに沿った通常のスケジューリング処理を実行する（ステップＳ１１０８）。また、アセンブラで記述されていない場合も（ステップＳ１１０２：Ｎｏ、ステップＳ１１０４：Ｎｏ）、ＣＰＵ＃０は、ステップＳ１１０８の処理を実行する。なお、再スケジューリング、スレッド起動以外のイベントとしては、スレッドのタイムスライス時間が満了した場合、または、スレッドが終了した場合、等がある。
【０１０１】
同期元ＣＰＵであるＣＰＵ＃Ｍのレジスタ同期制御装置２０５＃Ｍは、ステップＳ１１０７の処理にて出力された同期制御情報を基に、レジスタ同期制御処理を実行する（ステップＳ１１０９）。また、同期先ＣＰＵとなるＣＰＵ＃Ｎのレジスタ同期制御装置２０５＃Ｎも、レジスタ同期制御装置２０５＃Ｍと連動してレジスタ同期制御処理を実行する。レジスタ同期制御処理の詳細は、図１２にて後述する。
【０１０２】
図１２は、レジスタ同期制御処理を示すフローチャートである。レジスタ同期制御装置２０５＃Ｍは、同期制御レジスタ６０３＃Ｍから、同期対象レジスタ名、同期先ＣＰＵ名を取得する（ステップＳ１２０１）。取得後、レジスタ同期制御装置２０５＃Ｍは、レジスタリーダ６０４＃Ｍにより、ＣＰＵ内レジスタ群２０３＃Ｍから、同期対象レジスタ名に対応するレジスタの値を読み込む（ステップＳ１２０２）。レジスタ同期制御装置２０５＃Ｍは、送信ＦＩＦＯ６０７＃Ｍにより、同期先ＣＰＵ名に対応するレジスタ同期制御装置２０５＃Ｎに、割込信号と同期対象レジスタ名と値を送信する（ステップＳ１２０３）。送信後、レジスタ同期制御装置２０５＃Ｍは、同期フラグを０に設定し、レジスタの同期元としてのレジスタ同期制御処理を終了する。
【０１０３】
レジスタ同期制御装置２０５＃Ｎは、割込コントローラ６０８＃Ｎにより、割込信号を受け付ける（ステップＳ１２０４）。割込信号を受け付けたレジスタ同期制御装置２０５＃Ｎは、割込コントローラ６０８＃Ｎにより、レジスタの値の受信を示す割込番号を割込コントローラ６０２＃Ｎに通知する（ステップＳ１２０５）。通知後、レジスタ同期制御装置２０５＃Ｎは、受信ＦＩＦＯ６０６＃Ｎにより、同期対象レジスタ名と値を受信する（ステップＳ１２０６）。
【０１０４】
受信後、レジスタ同期制御装置２０５＃Ｎは、レジスタライタ６０５＃Ｎにより、受信したレジスタの値をＣＰＵ内レジスタ群２０３＃Ｎから同期対象レジスタ名に対応するレジスタに書き込む（ステップＳ１２０７）。書き込み後、レジスタ同期制御装置２０５＃Ｎは、割込コントローラ６０８＃Ｎにより、書き込み完了を示す割込番号を割込コントローラ６０２＃Ｎに通知する（ステップＳ１２０８）。通知後、レジスタ同期制御装置２０５＃Ｎは、レジスタの同期先としてのレジスタ同期制御処理を終了する。ステップＳ１２０５の処理により、割込番号を受け付けたＣＰＵ＃Ｎは、新規スレッドを生成し起動、または再スケジューリングされたスレッドを起動する（ステップＳ１２０９）。
【０１０５】
なお、ステップＳ１２０７の処理にて、レジスタ同期制御装置２０５＃ＮがＣＰＵ内レジスタ群２０３＃Ｎにアクセスしているため、ＣＰＵ＃ＮによるＣＰＵ内レジスタ群２０３＃Ｎへのアクセスが抑止されている。したがって、ステップＳ１２０９の処理終了の段階では、新規スレッド、または再スケジューリングされたスレッドはＣＰＵ内レジスタ群２０３＃Ｎへのアクセスが行えず、前述のスレッドは実行可能な状態とはなっていない。
【０１０６】
ステップＳ１２０８の処理により、割込番号を受け取ったＣＰＵ＃Ｎは、ＣＰＵ内レジスタ群２０３＃Ｎへのアクセスを開始する（ステップＳ１２１０）。ＣＰＵ＃ＮがＣＰＵ内レジスタ群２０３＃Ｎへのアクセスが可能になったことで、新規スレッド、または再スケジューリングされたスレッドが実行可能な状態に設定されたことになる。
【０１０７】
以上説明したように、マルチコアプロセッサシステム、情報生成方法、および情報生成プログラムによれば、同期元コアのスレッドを同期先コアに移行する場合、スレッドに対応付けられたレジスタを特定する。続けて、マルチコアプロセッサシステムは、特定されたレジスタの値を同期元コアから同期先コアに継承する。これにより、マルチコアプロセッサシステムは、シングルコア向けに生成されたアセンブラソースを改変することなく、マルチコアで並列実行することができ、アセンブラソースの継承性を確保することができる。
【０１０８】
また、マルチコアプロセッサシステムは、同期元コアの前記特定のレジスタから読み込んだ値を書き込んだ場合に、同期先コアに検出されたスレッドが実行可能となった情報を通知した後に、検出されたスレッドを実行可能な状態に設定してもよい。これにより、マルチコアプロセッサシステムは、同期先コアのレジスタが同期元コアのレジスタの値を継承し、同期先コアのスレッドが正常動作できる状態になってから、スレッドを実行することができる。
【０１０９】
また、マルチコアプロセッサシステムは、スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルにおけるレジスタが、マルチコアプロセッサのいずれのコアも特定しなくてよい。シングルコア向けに生成されたソースでは、コアが１つしか存在しないため、どのＣＰＵのどのレジスタであるかという情報は存在しない。したがって、マルチコアプロセッサシステムは、テーブルにおけるレジスタがマルチコアプロセッサのいずれのコアも特定していないことで、シングルコア向けのソースから生成された実行オブジェクトであるということを判断することができる。
【０１１０】
また、マルチコアプロセッサシステムは、スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルが、レジスタ以外の他の記憶領域を指定しなくてよい。Ｃ＋＋ソースによる実行オブジェクトは、依存関係のあるブロック間において、前方のブロックにてキャッシュメモリ、またはＲＡＭに退避し、後方のブロックにて退避したデータを読み込むという同期制御コードが追加されている。しかしながら、アセンブラソースによる実行オブジェクトは、同期制御コードが追加されず、依存関係のあるブロック間において、レジスタ以外の他の記憶領域にアクセスしない。したがって、マルチコアプロセッサシステムは、テーブルがレジスタ以外の他の記憶領域を指定していないということで、アセンブラソースから生成された実行オブジェクトであることを判断することができる。
【０１１１】
また、マルチコアプロセッサシステムは、同期元コアの第１のスレッドから分岐される第２のスレッドが同期先コアに生成することが検出された場合に、レジスタの値を同期元コアから同期先コアにコピーしてもよい。これにより、マルチコアプロセッサシステムは、新規スレッドが生成される場合でも、シングルコア向けに生成されたアセンブラソースを改変することなく、マルチコアで並列実行することができる。
【０１１２】
また、従来技術２による同期制御の処理クロック数は、１００〜１０００クロック程であった。本実施の形態による同期制御の処理クロック数は、同期制御レジスタの操作を合わせても１０クロック程度であり、１回の同期制御あたり、９０〜９９％の効率化を図ることができる。より具体的な例として、クロック周波数が５００［ＭＨｚ］で動作するＣＰＵがあった場合を想定する。従来技術２による同期制御の処理時間は、１回あたり０．２〜２［マイクロ秒］程度であるが、本実施の形態による同期制御の処理時間は、２０［ナノ秒］程度で完了することになる。同期制御の出現頻度が、１［マイクロ秒］に１回程度である場合、マルチコアプロセッサシステムとして、１０％程の性能改善となる。
【０１１３】
なお、本実施の形態で説明した情報生成方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報生成プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本情報生成プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１１４】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１１５】
（付記１）マルチコアプロセッサの中の特定のコアにより、前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する検出手段と、
前記特定のコアにより、スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記検出手段によって移行することが検出されたスレッドに対応する特定のレジスタを特定する特定手段と、
前記特定のコアにより、前記特定手段によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成手段と、
前記マルチコアプロセッサと通信可能に接続され、前記生成手段によって生成された同期制御情報を前記特定のコアから取得し、前記同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込み、前記同期先コアの前記特定のレジスタに、前記同期元コアの前記特定のレジスタから読み込んだ値を書き込む同期制御手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【０１１６】
（付記２）マルチコアプロセッサの中の特定のコアにより、前記マルチコアプロセッサ内において同期元コアで実行中の第１のスレッドから分岐される第２のスレッドを同期先コアに生成することを検出する検出手段と、
前記特定のコアにより、スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記第１および第２のスレッドに対応する特定のレジスタを特定する特定手段と、
前記特定のコアにより、前記特定手段によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成手段と、
前記マルチコアプロセッサと通信可能に接続され、前記生成手段によって生成された同期制御情報を前記特定のコアから取得し、前記同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込み、前記同期先コアの前記特定のレジスタに、前記同期元コアの前記特定のレジスタから読み込んだ値を書き込む同期制御手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【０１１７】
（付記３）前記同期先コアにより、前記検出されたスレッドを前記同期先コアにて実行可能な状態に設定する設定手段をさらに備え、
前記同期制御手段は、
前記同期元コアの前記特定のレジスタから読み込んだ値を書き込んだ場合に、前記同期先コアに前記検出されたスレッドが実行可能となった情報を通知し、
前記設定手段は、
前記同期制御手段から前記検出されたスレッドが実行可能となった情報を受け取った場合、前記検出されたスレッドを前記同期先コアにて実行可能な状態に設定することを特徴とする付記１または２に記載のマルチコアプロセッサシステム。
【０１１８】
（付記４）前記テーブルにおける前記スレッドに対応付けされた前記レジスタは、前記マルチコアプロセッサのいずれのコアも特定しないことを特徴とする付記１または２に記載のマルチコアプロセッサシステム。
【０１１９】
（付記５）前記テーブルは、前記レジスタ以外の他の記憶領域を指定していないことを特徴とする付記１または２に記載のマルチコアプロセッサシステム。
【０１２０】
（付記６）マルチコアプロセッサに通信可能に接続された同期制御システムであって、
前記マルチコアプロセッサの中の特定のコアにより、前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出し、前記実行中のスレッドに対応する特定のレジスタおよび前記同期先コアを特定する同期制御情報を取得する取得手段と、
前記取得手段によって取得された同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込む読込手段と、
前記同期先コアの前記特定のレジスタに、前記読込手段によって同期元コアの前記特定のレジスタから読み込まれた値を書き込む書込手段と、
を備えることを特徴とする同期制御システム。
【０１２１】
（付記７）マルチコアプロセッサの各々のコアに通信可能に接続された同期制御装置群の中の任意の同期制御装置であって、
前記同期制御装置と通信可能な接続先コアが、当該接続先コアで実行中のスレッドを同期先コアに移行させる同期元コアである場合、前記マルチコアプロセッサのうち前記移行を実行する特定のコアから、前記実行中のスレッドに対応する特定のレジスタおよび前記同期先コアを特定する同期制御情報を取得する取得手段と、
前記接続先コアが前記同期元コアである場合、前記取得手段によって取得された同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込む読込手段と、
前記接続先コアが前記同期元コアである場合、前記特定のレジスタの識別情報および前記特定のレジスタの値を、前記同期制御装置群のうち前記同期先コアの同期制御装置に送信する送信手段と、
前記接続先コアが前記同期先コアである場合、前記同期制御装置群のうち前記同期元コアに接続されている同期制御装置から、前記特定のレジスタの識別情報および前記特定のレジスタの値を受信する受信手段と、
前記接続先コアが前記同期先コアである場合、前記同期先コアの前記特定のレジスタに、前記受信手段によって受信された前記特定のレジスタの値を書き込む書込手段と、
を備えることを特徴とする同期制御装置。
【０１２２】
（付記８）マルチコアプロセッサの中の特定のコアが、
前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する検出工程と、
スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記検出工程によって移行することが検出されたスレッドに対応する特定のレジスタを特定する特定工程と、
前記特定工程によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成工程と、
前記マルチコアプロセッサの各々のコアのレジスタ間の同期を制御する同期制御装置群のうち、前記同期元コアの同期制御装置に前記生成工程によって生成された同期制御情報を出力する出力工程と、
を実行することを特徴とする情報生成方法。
【０１２３】
（付記９）マルチコアプロセッサの中の特定のコアに、
前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する検出工程と、
スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記検出工程によって移行することが検出されたスレッドに対応する特定のレジスタを特定する特定工程と、
前記特定工程によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成工程と、
前記マルチコアプロセッサの各々のコアのレジスタ間の同期を制御する同期制御装置群のうち、前記同期元コアの同期制御装置に前記生成工程によって生成された同期制御情報を出力する出力工程と、
を実行させることを特徴とする情報生成プログラム。
【符号の説明】
【０１２４】
＃０、＃Ｍ、＃Ｎ  ＣＰＵ
１１０  バス
２０３  ＣＰＵ内レジスタ群
２０５  レジスタ同期制御装置
５０１  レジスタ依存テーブル
５０２  検出部
５０３  特定部
５０４  生成部
５０５  同期制御部
５０６  設定部
５０７  取得部
５０８  読込部
５０９  書込部
５１０  送信部
５１１  受信部
【図１】
0005488697.tif 000002
【図２】
0005488697.tif 000003
【図３】
0005488697.tif 000004
【図４】
0005488697.tif 000005
【図５】
0005488697.tif 000006
【図６】
0005488697.tif 000007
【図７】
0005488697.tif 000008
【図８】
0005488697.tif 000009
【図９】
0005488697.tif 000010
【図１０】
0005488697.tif 000011
【図１１】
0005488697.tif 000012
【図１２】
0005488697.tif 000013
【図１３】
0005488697.tif 000014