以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムの好適な実施の形態を詳細に説明する。
(マルチコアプロセッサシステムのハードウェア)
図1は、実施の形態にかかるマルチコアプロセッサシステム100のハードウェアを示すブロック図である。図1において、マルチコアプロセッサシステム100は、CPUを複数搭載するCPUs101と、ROM(Read‐Only Memory)102と、RAM(Random Access Memory)103と、を含む。また、マルチコアプロセッサシステム100は、フラッシュROM104と、フラッシュROMコントローラ105と、フラッシュROM106と、を含む。また、マルチコアプロセッサシステム100は、ユーザやその他の機器との入出力装置として、ディスプレイ107と、I/F(Interface)108と、キーボード109と、を含む。また、各部はバス110によってそれぞれ接続されている。
ここで、CPUs101は、マルチコアプロセッサシステム100の全体の制御を司る。CPUs101は、シングルコアのプロセッサを並列して接続した全てのCPUを指している。CPUs101は、CPU#0、CPU#1を含む。さらに、CPUs101は、3つ以上のCPUを含んでいてもよい。CPU#0、CPU#1は、それぞれ専用のキャッシュメモリを有する。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるCPUが並列されている形態を例にあげて説明する。
また、CPU#0、CPU#1は、それぞれ専用のレジスタを持ち、さらに本実施の形態の特徴となる、それぞれ専用のレジスタ同期制御装置を有している。レジスタ同期制御装置の詳細については、図2にて後述する。
ROM102は、ブートプログラムなどのプログラムを記憶している。RAM103は、CPUs101のワークエリアとして使用される。フラッシュROM104は、OS(Operating System)などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、OSを更新する場合、マルチコアプロセッサシステム100は、I/F108によって新しいOSを受信し、フラッシュROM104に格納されている古いOSを、受信した新しいOSに更新する。
フラッシュROMコントローラ105は、CPUs101の制御に従ってフラッシュROM106に対するデータのリード/ライトを制御する。フラッシュROM106は、フラッシュROMコントローラ105の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム100を使用するユーザがI/F108を通して取得した画像データ、映像データなどである。フラッシュROM106は、たとえば、メモリカード、SDカードなどを採用することができる。
ディスプレイ107は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ107は、たとえば、TFT液晶ディスプレイなどを採用することができる。
I/F108は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク111に接続され、ネットワーク111を介して他の装置に接続される。そして、I/F108は、ネットワーク111と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F108には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード109は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード109は、タッチパネル式の入力パッドやテンキーなどであってもよい。
図2は、CPUs101に専用同期回線を用いたレジスタ同期制御装置を適用した状態を示すブロック図である。図2において示されるハードウェアは、CPUs101に含まれるCPU#0、CPU#1、RAM103、キャッシュコヒーレンシ機構の一種であるスヌープ機構201である。また、CPU#0、CPU#1の内部には、CPU内演算ユニット202、CPU内レジスタ群203、キャッシュメモリ204が存在する。以下、CPU#0、CPU#1の各々に対応する意味で、接尾記号である“#0”、“#1”を、各ハードウェア、ソフトウェアに付与した場合は、それぞれのCPUの内部に存在するハードウェア、それぞれのCPUで実行中のソフトウェアであることを示す。
さらにCPU#0、CPU#1の内部には、本実施の形態での特徴である、レジスタ同期制御装置205と通信部206が存在する。また、CPU内演算ユニット202は、CPU内レジスタ群203にアクセス可能である。また、CPU内演算ユニット202とレジスタ同期制御装置205は、アドレスバス207で接続され、通信部206#0、通信部206#1は、専用回線208で接続されている。
スヌープ機構201は、CPU#0、CPU#1がアクセスするキャッシュメモリ204#0、キャッシュメモリ204#1の整合性を取る装置である。スヌープ機構201は、キャッシュメモリが自身のキャッシュメモリや他CPUのキャッシュメモリの更新状態を管理し、他のキャッシュメモリと更新状態の情報を交換する。更新状態の情報を交換することで、スヌープ機構201は、どのキャッシュメモリに最新のデータが存在するかを判断する。また、各キャッシュメモリが最新のデータを取得できるように、スヌープ機構201は、自身のキャッシュメモリの状態を変更したりキャッシュメモリの無効化を行ったりする。
CPU内演算ユニット202は、整数演算操作、論理演算、ビットシフト操作等を行う演算ユニットである。CPU内演算ユニット202は、CPU内レジスタ群203をRAM103等から読み込んだ命令コードに従って演算を行う。
CPU内レジスタ群203は、CPU内演算ユニット202が演算を行うために用いられる記憶装置である。CPU内レジスタ群203は、用途に応じていくつかの種類が存在する。たとえば、アキュムレータ、アドレスレジスタ、汎用レジスタ、プログラムカウンタ、ステータスレジスタ等が存在する。
アキュムレータは、演算結果を記憶するといった、データを一時的に記憶するレジスタである。アドレスレジスタは、メモリをアクセスする場合のアドレスを指定するときに用いるレジスタである。汎用レジスタは、特定の目的を持たず、命令により各種機能を果たすレジスタであり、特に、アキュムレータとアドレスレジスタの機能を有している。
プログラムカウンタは、次に実行するべき命令が格納されているメインメモリ上のアドレスを指し示すレジスタである。ステータスレジスタは、演算結果によって生じた桁あふれやアキュムレータが0であることの状態、あるいは各種のプロセッサの状態を保持するレジスタである。なお、アキュムレータ、アドレスレジスタ、汎用レジスタ、プログラムカウンタ、ステータスレジスタ以外に、CPUの仕様によっては、専用レジスタも存在する。たとえば、浮動小数点を扱う浮動小数点レジスタが存在する。
たとえば、CPU内演算ユニット202は、RAM103から、機械語で書かれた命令データをフェッチする。ここで、命令データがニーモニックで表現すると“Store Gr1 Acc#”と書かれていたと想定する。“Gr1”は、汎用レジスタを指しており、“Acc#”はアキュムレータを指している。フェッチ後、CPU内演算ユニット202は、命令データを実行する。前述の例では、CPU内演算ユニット202は、アキュムレータの値を汎用レジスタ“Gr1”に格納する。キャッシュメモリ204は、CPU#0、CPU#1がRAM103のデータに高速にアクセス可能とするため、RAM103のデータの一部をコピーした記憶領域である。
レジスタ同期制御装置205は、CPU内レジスタ群203#0とCPU内レジスタ群203#1の同期を制御する装置である。たとえば、レジスタ同期制御装置205#0、レジスタ同期制御装置205#1は、汎用レジスタの一つであるGr1レジスタをCPU#0とCPU#1で同期を取る。
通信部206は、レジスタ同期制御装置205に接続されており、他のレジスタ同期制御装置205との通信を行う。具体的には、通信部206#0は、レジスタ同期制御装置205#0が取得したCPU#0のレジスタの値を、専用回線208を通じてレジスタ同期制御装置205#1に転送する。レジスタの値を受信した通信部206#1は、レジスタの値をレジスタ同期制御装置205#1に通知する。
図3は、CPUs101にスヌープ機構201を用いたレジスタ同期制御装置を適用した状態を示すブロック図である。図2では、通信部206#0と通信部206#1が専用回線208によって通信を行っていたが、図3では、キャッシュメモリ204とスヌープ機構201を用いてレジスタの値等を転送する。
具体的には、マルチコアプロセッサシステム100の設計時、設計者が、キャッシュメモリ204の中に、レジスタ同期のための保護領域301を確保する。保護領域301は、キャッシュメモリ204の領域のうち、CPUに割り当てられるスレッドなどによって使用され、データが入れ替わる領域とは別の領域であり、データが消去されないように保護されている領域である。初めに、通信部206#0は、保護領域301#0にレジスタの値を書き込む。保護領域301#0に書き込まれたことを検出したスヌープ機構201は、保護領域301#0の内容を保護領域301#1にコピーする。コピー後、通信部206#1は、保護領域301#1に書き込まれたレジスタの値をレジスタ同期制御装置205#1に通知する。
図4は、同期イベントが発生する状態を示す説明図である。図4では、アセンブラソース401からの実行オブジェクト402が実行されることによって、同期イベントが発生する状態を示している。また、符号403に示す説明図は、実行オブジェクトがシングルコアで動作する場合を示しており、符号404に示す説明図は、実行オブジェクトがマルチコアで動作する場合を示している。
設計時、アセンブラがアセンブラソース401を読み込み、1対1変換された実行オブジェクト402を生成する。図4の例では、アセンブラは、実行オブジェクト402として、ブロック405とブロック406を生成する。なお、アセンブラソース401は、C/C++ソース1301と同様の内容となる“A=A+1;func(A);”という2ステートメントが記載されている。また、アセンブラソース401は、前述の2ステートメントを最小の命令数で実行するため、意図的な同期制御コードは挿入されていない。
各ブロックの処理内容として、ブロック405は、アキュムレータの値をレジスタGr1に格納し、func()が存在する0x02FF0000番地にジャンプするといった命令が記載されている。ブロック406は、レジスタGr1の内容をアキュムレータに読み直すといった命令が記載されている。
CPUがブロック405、ブロック406を実行する際には、CPUはスレッドを生成し、スレッド上で各ブロックを実行する。符号403に示す説明図では、ブロック405によるスレッドとブロック406によるスレッドをシングルコアが実行する場合を想定している。このとき、ブロック405のレジスタGr1とブロック406のレジスタGr1は同一であるため、正常に動作する。
符号404に示す説明図では、ブロック405によるスレッドをCPUs101のうちのCPU#Mが実行し、ブロック406をCPU#Mとは異なるCPUであるCPU#Nが実行するといった、マルチコアで動作する場合を想定している。なお、MとNは、0以上の整数である。このとき、ブロック405のレジスタGr1は、CPU#MのレジスタGr1であり、ブロック406のレジスタGr1はCPU#NのレジスタGr1となるため、正常に動作しない。
値が等しくなれば正常に動作するため、たとえば、CPU#MのレジスタGr1とCPU#NのレジスタGr1が同期を取ることで、マルチコアでブロック405、ブロック406を正常に動作させることができる。具体的には、CPU#MのレジスタGr1の値を、CPU#NのレジスタGr1に上書きすることで、同期を取ることができる。
以下、正常動作するために、2つのCPU間のレジスタの同期を取る契機が発生した場合、同期イベントが発生したとする。また、レジスタの同期元となるCPU#Mを、同期元CPUとし、レジスタの同期先となるCPU#Nを、同期先CPUとする。さらに、図4の例では、同期元となるスレッドを同期元スレッド、同期先となるスレッドを同期先スレッドとする。図4の例では、ブロック405によるスレッドが同期元スレッド、ブロック406によるスレッドが同期先スレッドとなる。なお、同期元CPUから、同期先CPUにスレッドが移行した場合、同期元スレッドと同期先スレッドは同一のスレッドである。また、同期先スレッドが同期元スレッドから分岐されたスレッドである場合、同期元スレッドと同期先スレッドは異なるスレッドとなる。
(マルチコアプロセッサシステム100の機能)
次に、マルチコアプロセッサシステム100の機能について説明する。図5は、マルチコアプロセッサシステム100の機能を示すブロック図である。マルチコアプロセッサシステム100は、検出部502と、特定部503と、生成部504と、同期制御部505と、設定部506と、取得部507と、読込部508と、書込部509と、送信部510と、受信部511と、を含む。
この制御部となる機能のうち、検出部502〜生成部504、設定部506は、記憶装置に記憶されたプログラムをCPUs101が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図1に示したROM102、RAM103、フラッシュROM104、フラッシュROM106などである。
また、同期制御部505と、取得部507と、読込部508と、書込部509と、送信部510と、受信部511は、図2に示したレジスタ同期制御装置205によってその機能を実現する。
また、図5では、CPU#0がマルチコアプロセッサシステム100を制御するマスタCPUとして、またCPU#MとCPU#Nがレジスタ間の同期制御対象のCPUであることを想定している。また、CPU#0がマスタCPUであり、かつレジスタ間の同期制御対象のCPUとなってもよい。たとえば、CPU#0がマスタCPUであり、レジスタ間の同期制御対象の同期先CPUとなる場合、CPU#0の機能として設定部506を含んでもよい。
また、マルチコアプロセッサシステム100は、スレッド群の各々のスレッドとスレッドに対応付けされたレジスタとの組み合わせを特定するレジスタ依存テーブル501にアクセス可能である。レジスタ依存テーブル501は、スレッドの実行対象となる実行オブジェクトについて、実行オブジェクトを並列で実行可能なブロックに分割した際に、ブロック間の情報とブロック間で値を引き継ぐレジスタを記憶している。レジスタ依存テーブル501の詳細は、図10にて後述する。
また、レジスタ依存テーブル501におけるスレッドに対応付けされたレジスタは、マルチコアプロセッサのいずれのコアも特定しなくてもよい。具体的には、レジスタ依存テーブル501には、スレッドに対応する実行オブジェクトの一部である2つのブロックの情報と、レジスタ名が格納されている。レジスタ名に関しては、CPUs101の全てのCPUが有するレジスタ名であり、レジスタ名でCPUs101のうちいずれかのCPUを特定しない。
また、レジスタ依存テーブル501は、レジスタ以外の他の記憶領域を指定しなくてもよい。具体的には、レジスタ依存テーブル501は、レジスタ名が格納されており、他の記憶領域となるキャッシュメモリ204、RAM103、フラッシュROM104等を指定しない。
検出部502は、マルチコアプロセッサの中の特定のコアにより、マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する機能を有する。たとえば、検出部502は、CPUs101の中のCPU#0により、CPU#Mで実行中のスレッドをCPU#Nに移行することを検出する。
また、検出部502は、同期元コアで実行中の第1のスレッドから分岐された第2のスレッドを同期先コアに生成することを検出してもよい。たとえば、検出部502は、CPU#Mで実行中の第1のスレッドから分岐される第2のスレッドをCPU#Nに生成することを検出する。なお、検出されたという情報は、CPU内レジスタ群203#0、キャッシュメモリ204#0、RAM103などの記憶領域に記憶される。
特定部503は、特定のコアにより、レジスタ依存テーブル501を参照して、検出部502によって移行することが検出されたスレッドに対応する特定のレジスタを特定する機能を有する。また、特定部503は、CPU#Mで実行中の第1のスレッドおよび第1のスレッドから分岐され、CPU#Nで実行される第2のスレッドに対応する特定のレジスタを特定してもよい。
具体的には、特定部503は、CPU#0により、レジスタ依存テーブル501のレコードのうち、CPU#Mが実行する実行オブジェクトのブロックとCPU#Nが実行する実行オブジェクトのブロックに基づいて、該当するレコードを特定する。該当するレコードが特定できた場合に、特定部503は、該当するレコードに記憶されているレジスタ名を、特定のレジスタとして特定する。なお、特定されたレジスタの情報は、CPU内レジスタ群203#0、キャッシュメモリ204#0、RAM103などの記憶領域に記憶される。
生成部504は、特定のコアにより、特定部503によって特定された特定のレジスタおよび同期先コアを特定する同期制御情報を生成する機能を有する。たとえば、特定部503によってGr1レジスタが特定されたと想定する。このとき、生成部504は、CPU#0により、Gr1レジスタおよびCPU#Nを特定する同期制御情報を生成する。
特定のレジスタおよび同期先コアを特定する方法としては、たとえば、同期制御情報は、特定のレジスタの名称、または、ID(IDentification)が格納され、同期先コアのCPU番号が格納される。なお、生成された同期制御情報は、RAM103などの記憶領域に記憶され、同期元CPU上で動作するレジスタ同期制御装置205のドライバによって、レジスタ同期制御装置205の記憶領域である同期制御レジスタに記憶される。同期制御レジスタについては、図6にて詳細に後述する。
同期制御部505は、マルチコアプロセッサと通信可能に接続され、生成部504によって生成された同期制御情報を特定のコアから取得し、同期制御情報から得られる特定のレジスタの値を同期元コアの特定のレジスタから読み込む。続けて、同期制御部505は、同期先コアの特定のレジスタに、同期元コアの特定のレジスタから読み込んだ値を書き込む機能を有する。たとえば、同期制御部505は、同期制御情報をCPU#0から取得し、レジスタGr1の値をCPU#MのCPU内レジスタ群203#MのうちレジスタGr1から読み込む。続けて、同期制御部505は、CPU#NのCPU内レジスタ群203#NのレジスタGr1に、CPU#MのレジスタGr1から読み込んだ値を書き込む。
また、同期制御部505は、同期元コアの特定のレジスタから読み込んだ値を書き込んだ場合に、同期先コアに、検出されたスレッドが実行可能となった情報を通知してもよい。同期先コアに検出されたスレッドが実行可能となった情報とは、たとえば、割込信号であり、同期制御部505は、割込信号を同期先コアに通知する。具体的には、同期制御部505は、CPU#NのCPU内レジスタ群203#NのうちレジスタGr1に、CPU#MのレジスタGr1から読み込んだ値を書き込んだ場合、CPU#Nに割込信号を通知する。
設定部506は、同期先のコアにより、検出されたスレッドを同期先コアにて実行可能な状態に設定する機能を有する。また、設定部506は、同期制御部505から検出されたスレッドが実行可能となった情報を受け取った場合、検出されたスレッドを同期先コアにて実行可能な状態に設定してもよい。たとえば、設定部506は、CPU#Nにより、検出されたスレッドを移行し、実行可能な状態に設定する。また、同期元コアで実行中の第1のスレッドから分岐した第2のスレッドが同期先コアに生成される場合、CPU#Nは、第2のスレッドがアクセスする領域、たとえば、スレッドコンテキストをRAM103に確保し、第2のスレッドが実行可能な状態に設定する。
取得部507は、生成部504によって特定のレジスタおよび同期先コアを特定する同期制御情報が生成された場合、特定のコアから同期制御情報を取得する機能を有する。具体的には、取得部507は、Gr1レジスタおよびCPU#NのCPU番号の同期制御情報を取得する。なお、取得された情報は、レジスタ同期制御装置205#Mの記憶領域に格納される。
読込部508は、取得部507によって取得された同期制御情報から得られる特定のレジスタの値を同期元コアの特定のレジスタから読み込む機能を有する。具体的には、読込部508は、レジスタGr1の値を、CPU#MのCPU内レジスタ群203#MのうちレジスタGr1から読み込む。なお、読み込まれた値は、レジスタ同期制御装置205#Mの記憶領域に格納される。
書込部509は、同期先コアの特定のレジスタに、読込部508によって同期元コアの特定のレジスタから読み込まれた値を書き込む。具体的には、書込部509は、CPU#NのCPU内レジスタ群203#NのうちレジスタGr1に、CPU#MのレジスタGr1から読み込まれた値を書き込む。
送信部510は、特定のレジスタおよび読込部508によって読み込まれた特定のレジスタの値を、同期先コアに送信する機能を有する。具体的には、送信部510は、レジスタGr1およびレジスタGr1の値を、レジスタ同期制御装置205#Nに送信する。
受信部511は、他の同期制御装置により特定のレジスタおよび特定のレジスタの値を受信する機能を有する。具体的には、受信部511は、レジスタ同期制御装置205#MによりレジスタGr1およびレジスタGr1の値を受信する。なお、受信したレジスタとレジスタの値は、レジスタ同期制御装置205#Nの記憶領域に格納される。
図6は、同期イベント未発生時におけるレジスタ同期制御装置205の概要を示す説明図である。図6ではCPU#0の内部を用いて説明を行う。CPU#0以外のCPUの内部も、図6で示すCPU#0の内部と等しい。図6で示すハードウェアは、CPU内演算ユニット202#0、CPU内外部I/O601#0、割込コントローラ602#0、CPU内レジスタ群203#0、レジスタ同期制御装置205#0である。CPU内外部I/O601#0とレジスタ同期制御装置205#0は、アドレスバス207#0によって接続されている。また、アドレスバス207#0は、キャッシュメモリ204#0、バス110に接続しており、バス110を通して、RAM103、ディスプレイ107等のペリフェラルのレジスタに接続している。
また、レジスタ同期制御装置205#0には、同期制御レジスタ603#0、レジスタリーダ604#0、レジスタライタ605#0、受信FIFO606#0、送信FIFO607#0、割込コントローラ608#0が含まれる。同期制御レジスタ603#0は、アドレスバス207#0に接続されており、受信FIFO606#0と送信FIFO607#0は、通信部206#0に接続されている。割込コントローラ608#0は、割込コントローラ602#0に接続している。
ここで、マルチコアプロセッサシステム100は、RAM103のアドレス空間に入出力機器のアドレス空間が共存するメモリマップドI/Oの形態を取っている。ここで、キャッシュメモリ204のアドレス領域が32[キロバイト]であり、0x00008000〜0x0000FFFFであり、RAM103のアドレス領域が32[メガバイト]であり、0x02000000〜0x03FFFFFFである状態を想定する。また、0x00010000〜0x01FFFFFFは未割当領域とする。
たとえば、設計者は、同期制御レジスタ603#0のアドレス領域を、未割当領域のうち0x00020000〜0x00020003に設定する。これにより、CPU内演算ユニット202は、アドレス指定によって同期制御レジスタ603#0にアクセスすることができる。なお、マルチコアプロセッサシステム100がRAM103のアドレス空間に入出力機器のアドレス空間が共存しないポートマップドI/Oであっても、各CPUが、入出力機器のアドレス空間に対してアクセスすることで、同期制御レジスタ603#0にアクセスすることができる。
CPU内外部I/O601#0は、CPU内演算ユニット202#0がアドレスバス207#0に入出力するためのポートである。たとえば、CPU内演算ユニット202#0は、RAM103や、同期制御レジスタ603#0にアクセスする際に、CPU内外部I/O601#0を経由してアクセスする。
割込コントローラ602#0は、割込信号を受け付け、CPU内演算ユニット202#0に割込番号を通知する。図6の例では、割込コントローラ602#0は、割込コントローラ608#0からの割込信号の入力を受け付けているが、他の割込信号、たとえば、キーボード109からの割込信号を受け付け、CPU内演算ユニット202#0に割込番号を通知する。割込コントローラ602#0は、複数の割込み入力端子を有し、端子ごとに割込番号を設定している。
たとえば、割込コントローラ602#0のある1端子が、割込コントローラ608#0からの割込信号を受け付け、また別の端子が、キーボード109からの割込み信号を受け付けている。また、割込コントローラ602#0は、複数の割込信号を受け付けた場合に、割込信号に設定された優先順位に従って割込み番号を通知する機能を有する。
同期制御レジスタ603#0は、同期対象となるレジスタの情報と同期先のCPUの情報が含まれる同期制御情報を設定するレジスタである。同期制御レジスタ603#0は、各CPUの汎用レジスタ、浮動小数点レジスタといったアキュムレータとは異なり、アドレスバス経由で一種のペリフェラルとして見えているレジスタである。同期制御レジスタ603#0は、ユーザプログラムから使用されるレジスタ群、たとえば、アキュムレータ、汎用レジスタ、浮動小数点レジスタ、のコヒーレンスを実現する。具体的には、同期制御レジスタ603は、同期対象レジスタ名に、コヒーレンスを実行するレジスタの名称を記憶する。同期制御レジスタ603に設定される同期制御情報の詳細は、図7にて後述する。
レジスタリーダ604#0は、同期制御レジスタ603#0の同期対象レジスタ名に書き込まれたレジスタ名から、CPU内レジスタ群203#0のうち同期対象レジスタ名に対応するレジスタの値を読み込む。たとえば、同期対象レジスタ名に“Gr1”が記憶された場合、レジスタリーダ604#0は、CPU内レジスタ群203#0のGr1レジスタの値を読み込む。
レジスタライタ605#0は、受信FIFO606#0からレジスタ名と値を受け取って、CPU内レジスタ群203#0から受け取ったレジスタ名に対応するレジスタに受け取った値を書き込む。たとえば、受信FIFO606#0から、“Gr1 1”というデータを受け取った場合、レジスタライタ605#0は、CPU内レジスタ群203#0のGr1レジスタに“1”を書き込む。
受信FIFO606#0は、通信部206#0から送られてきたレジスタ名と値を格納する。また、受信FIFO606#0は、バリア同期を実現するため、レジスタライタ605#0がレジスタの書き込み完了後に、CPU制御として割込信号を割込コントローラ608に通知する。
送信FIFO607#0は、レジスタリーダ604#0から送られてきた同期先CPUの情報とレジスタ名とレジスタの値を格納する。また、送信FIFO607#0は、通信部206#0に同期先CPUの情報とレジスタ名とレジスタの値を送信する。また、送信FIFO607#0は、レジスタ名とレジスタの値を送信する際に、同期信号となる割込信号を送信する。
割込コントローラ608#0は、送信FIFO607#0以外となる他の送信FIFO607からの割込信号を受け付け、割込コントローラ602#0に割込番号を通知する。送信FIFO607#0以外となる他の送信FIFO607とは、たとえば、送信FIFO607#1である。また、割込コントローラ608#0は受信FIFO606#0からも割込信号を受け付け、割込コントローラ602#0に割込番号を通知する。なお、割込コントローラ608#0と他の割込コントローラ608とは、通信部206を経由せず、直接結線されている。
なお、図5に示したレジスタ同期制御装置205の機能部と、図6で示した各部の対応としては、取得部507は同期制御レジスタ603が対応し、読込部508はレジスタリーダ604が対応し、書込部509はレジスタライタ605が対応する。また、送信部510は送信FIFO607が対応し、受信部511は、受信FIFO606が対応する。
図6の例では、同期イベントが発生していない状態であり、CPU内演算ユニット202は、RAM103からフェッチした命令によって、CPU内レジスタ群203#0のリード、ライトを行う。
図7は、同期制御レジスタ603の記憶内容の一例を示す説明図である。同期制御レジスタ603は32[ビット]の領域で、同期フラグ、同期対象レジスタ名、同期先CPU番号という3つのフィールドを有する。同期制御情報は、同期対象レジスタ名、同期先CPU番号となるが、同期フラグを含めてもよい。同期フラグフィールドは1[ビット]の領域で、レジスタの同期処理が実行中か否かを示すフラグを格納する。以下、同期フラグが1の場合に、同期処理を実行中であるとして説明を行う。同期対象レジスタ名フィールドは8[ビット]の領域で、同期を行うレジスタ番号を格納する。同期先CPU番号フィールドは8[ビット]の領域で、同期を行うCPU番号を格納する。
なお、同期対象レジスタ名フィールドと同期先CPU番号フィールドの領域は8[ビット]であり、256種類のレジスタやCPU番号を取り扱うことができる。また、CPU数が256より多い場合でも、予備の15[ビット]を使用することで、対応可能である。
また、同期先CPU番号フィールドについて、通常はユニキャストとして同期を行うCPU番号が格納されるが、複数のCPUに同じレジスタの値を送信する可能性がある場合、複数のCPUに送るモードを設定してもよい。たとえば、同期先CPU番号フィールドに0xFFが格納された場合は、送信FIFO607は、レジスタの値を自身のCPUを除く全てのCPUにブロードキャストする、というように同期先CPU番号フィールドを設定してもよい。具体的には、同期フラグに1が格納され、同期対象レジスタ名フィールドに、Gr1レジスタのレジスタ番号、同期先CPU番号フィールドにCPU#1のCPU番号が格納される。
図8は、同期イベント発生時における同期元CPUのレジスタ同期制御装置205の概要を示す説明図である。同期イベントが発生すると、同期元CPUであるCPU#Mが、CPU#M上で実行しているドライバ801#Mによって、同期制御レジスタ603#Mに同期制御情報を設定する。なお、同期制御情報は、マスタCPU、たとえば、CPU#0が出力する。
設定後、レジスタリーダ604#Mは、同期制御情報によって、CPU内レジスタ群203#Mから、レジスタの値を読み込み、送信FIFO607#Mのバッファに同期先CPUの番号とレジスタ名とレジスタの値を書き込む。書き込み後、送信FIFO607#Mは、同期信号となる割込信号を同期先CPUのレジスタ同期制御装置205の割込コントローラ608に送信する。割込信号とあわせて、送信FIFO607#Mは、レジスタ名とレジスタの値を同期先CPUのレジスタ同期制御装置205の受信FIFO606に送信する。送信後、送信FIFO607#Mは、同期フラグを0に上書きする。
なお、CPU#Mが同期制御情報を同期制御レジスタ603#Mに設定する場合、同期イベントの発生時に同期制御情報の全ての内容を設定せず、一部の情報を事前に設定してあってもよい。たとえば、アセンブラ等によって予め同期先CPUがアサインされているスタティックスケジューリングの場合であれば、CPU#Mは、同期対象レジスタ名、同期先CPU番号を同期イベントの発生前に設定してもよい。そして、CPU#Mは、同期イベントの発生時に同期フラグを設定してもよい。なお、スケジューラにより同期先CPUが決定されるダイナミックスケジューリングであれば、CPU#Mは、同期イベントの発生時に、同期対象レジスタ名、同期先CPU番号、同期フラグを設定する。
図9は、同期イベント発生時における同期先CPUのレジスタ同期制御装置205の概要を示す説明図である。同期先CPUとなるCPU#Nの割込コントローラ608#Nは、割込信号を受けると、割込コントローラ602#Nに割込番号を通知する。また、割込コントローラ602#N経由で割込番号を通知されたCPU内演算ユニット202#Nは、同期先スレッドを生成し、CPU内レジスタ群203#NへのI/Oを抑止する。
割込コントローラ608#Nが割込信号を受けた後、受信FIFO606#Nは、レジスタ名とレジスタの値を取得する。取得後、レジスタライタ605#Nは、取得されたレジスタの値を、CPU内レジスタ群203#Nに書き込む。書き込み完了後、受信FIFO606#Nは、書き込み完了通知として、割込信号を割込コントローラ608#Nに通知する。割込コントローラ608#Nは、割込信号を受けると、割込コントローラ602#Nに割込番号を通知する。
このとき、好ましくは、レジスタ同期制御装置205#Mからの割込信号による割込番号と、受信FIFO606#Nからの割込信号による割込番号は異なっていた方がよい。割込番号が異なることで、割込コントローラ602#Nから割込番号を受けたCPU内演算ユニット202#Nや、CPU#Nで実行中のOSは、どの要因による割込番号であるかを判断することができる。
図10は、マルチコアプロセッサシステム100の設計時における概要を示す説明図である。アセンブラは、アセンブラソース401を読み込み、1対1変換された実行オブジェクト402を生成する。さらに、アセンブラは、アセンブラソース401の構造解析を行い、レジスタ依存テーブル501を生成する。なお、C/C++ソースの中に、一部アセンブラソースが混入していることもある。その場合も、マルチコアプロセッサシステム100は、アセンブラソースであるとして扱う。
具体的な構造解析としては、構造解析プログラムがアセンブラソースを読み込み、ジャンプや条件分岐を節としたブロック構造を抽出する。さらに、構造解析プログラムは、各ブロックの入出力データとして、最終的に読み書きしたレジスタ、メモリ上のアドレス空間を抽出する。続けて、構造解析プログラムは、入出力データを用いて、ブロック間の入出力値としてアドレス空間ではなくレジスタが用いられるケースをレジスタ依存関係のあるブロックとして定義する。構造解析プログラムは、レジスタ依存関係にある2つのブロックと、依存関係があるとされたレジスタとを、1レコードとしてレジスタ依存テーブル501に出力する。
レジスタ依存テーブル501は、ブロック間で、依存関係のあるレジスタ名を記載した情報である。具体的に、レジスタ依存テーブル501は、同期元ブロック名、同期先ブロック名、依存レジスタ名、という3つのフィールドを有している。
同期元ブロック名フィールドは、同期元スレッドとなるブロックの情報が、同期先ブロック名フィールドは、同期先スレッドとなるブロックの情報が格納されている。図4の例を用いると、同期元ブロック名フィールドと同期先ブロック名フィールドは、たとえば、ブロック405、ブロック406の名称が格納されている。なお、ブロックの名称の代わりに、ブロックの先頭アドレスと末尾アドレスが格納されてもよい。依存レジスタ名フィールドは、同期元ブロック名フィールドと同期先ブロック名フィールドで格納されたブロック間で依存関係のあるレジスタ名が格納されている。図4の例を用いると、依存レジスタ名フィールドは、“Gr1”という文字列が格納されている。
図11は、スケジュール処理を示すフローチャートである。図11、図12に示すフローチャートは、マルチコアプロセッサシステム100全体のスレッドのスケジュールをマスタCPUであるCPU#0で行い、同期元スレッドをCPU#Mが実行する場合を想定している。また、CPU#MとCPU#0が同一のCPUであってもよい。
CPU#0は、イベントの種類を判断する(ステップS1101)。イベントの種類が再スケジューリングである場合(ステップS1101:再スケジューリング)、CPU#0は、再スケジューリング対象の実行オブジェクトがアセンブラソースで記述されていたか否かを判断する(ステップS1102)。なお、判断基準としては、CPU#0が、レジスタ依存テーブル501を参照することで判断できる。具体的に、CPU#0は、同期元スレッドの実行オブジェクトが同期元ブロック名フィールドに存在し、かつ再スケジューリング対象の実行オブジェクトが同期先ブロック名フィールドに存在する場合、アセンブラソースで記述されていたとして判断する。
また、再スケジューリングが発生する要因としては、たとえば、CPUs101の負荷がアンバランスになった場合である。負荷がアンバランスとなり、特定のCPUに負荷がかかる場合に、負荷の高いCPUで実行中のスレッドを、負荷の低いCPUにマイグレーションすることで、負荷を均等にすることができる。アセンブラソースで記述されていた場合(ステップS1102:Yes)、CPU#0は、再スケジューリング後に割り当てるCPU#Nを同期先CPUに設定する(ステップS1103)。なお、ステップS1102:Yesのルートを通った際に、2つのCPU間のレジスタの同期を取る同期イベントが発生したことになる。
イベントの種類がスレッド起動である場合(ステップS1101:スレッド起動)、CPU#0は、新規スレッドの実行オブジェクトがアセンブラソースで記述されていたか否かを判断する(ステップS1104)。具体的に、CPU#0は、同期元スレッドの実行オブジェクトが同期元ブロック名フィールドに存在し、かつ新規スレッドの実行オブジェクトが同期先ブロック名フィールドに存在する場合、アセンブラソースで記述されていたとして判断する。
なお、スレッド起動が発生する要因のうち、特に並列実行に特化した要因として、たとえば、実行オブジェクトのブロックが繰り返し処理であった場合である。具体的には、特定のブロックが100回処理を行うブロックであった場合、同期元スレッドが50回分実行し、さらに新規スレッドとして同期先スレッドが残りの50回分実行する。
アセンブラで記述された場合(ステップS1104:Yes)、CPU#0は、新規スレッドを割り当てるCPU#Nを同期先CPUに設定する(ステップS1105)。なお、ステップS1104:Yesのルートを通った際に、2つのCPU間のレジスタの同期を取る同期イベントが発生したことになる。ステップS1103、またはステップS1105の処理後、CPU#0は、同期対象レジスタ名と同期先CPU番号と同期フラグとから同期制御情報を生成する(ステップS1106)。
なお、CPU#0は、同期対象レジスタ名を、レジスタ依存テーブル501の、同期元ブロック名フィールドおよび同期先ブロック名フィールドが存在したレコードの依存レジスタ名フィールドに格納された値から取得する。生成後、CPU#0は、同期元CPUとなるレジスタ同期制御装置205#Mの同期制御レジスタ603#Mに生成された同期制御情報を出力する(ステップS1107)。
具体的には、CPU#0は、CPU#M上で動作するドライバ801#Mに対して同期制御情報を通知し、ドライバ801#Mが実行されることにより、同期制御レジスタ603に同期制御情報が設定される。同期制御レジスタ603#Mに同期制御情報を設定後、CPU#0は、ステップS1101の処理に移行する。
イベントが再スケジューリング、スレッド起動以外である場合(ステップS1101:その他)、CPU#0は、イベントに沿った通常のスケジューリング処理を実行する(ステップS1108)。また、アセンブラで記述されていない場合も(ステップS1102:No、ステップS1104:No)、CPU#0は、ステップS1108の処理を実行する。なお、再スケジューリング、スレッド起動以外のイベントとしては、スレッドのタイムスライス時間が満了した場合、または、スレッドが終了した場合、等がある。
同期元CPUであるCPU#Mのレジスタ同期制御装置205#Mは、ステップS1107の処理にて出力された同期制御情報を基に、レジスタ同期制御処理を実行する(ステップS1109)。また、同期先CPUとなるCPU#Nのレジスタ同期制御装置205#Nも、レジスタ同期制御装置205#Mと連動してレジスタ同期制御処理を実行する。レジスタ同期制御処理の詳細は、図12にて後述する。
図12は、レジスタ同期制御処理を示すフローチャートである。レジスタ同期制御装置205#Mは、同期制御レジスタ603#Mから、同期対象レジスタ名、同期先CPU名を取得する(ステップS1201)。取得後、レジスタ同期制御装置205#Mは、レジスタリーダ604#Mにより、CPU内レジスタ群203#Mから、同期対象レジスタ名に対応するレジスタの値を読み込む(ステップS1202)。レジスタ同期制御装置205#Mは、送信FIFO607#Mにより、同期先CPU名に対応するレジスタ同期制御装置205#Nに、割込信号と同期対象レジスタ名と値を送信する(ステップS1203)。送信後、レジスタ同期制御装置205#Mは、同期フラグを0に設定し、レジスタの同期元としてのレジスタ同期制御処理を終了する。
レジスタ同期制御装置205#Nは、割込コントローラ608#Nにより、割込信号を受け付ける(ステップS1204)。割込信号を受け付けたレジスタ同期制御装置205#Nは、割込コントローラ608#Nにより、レジスタの値の受信を示す割込番号を割込コントローラ602#Nに通知する(ステップS1205)。通知後、レジスタ同期制御装置205#Nは、受信FIFO606#Nにより、同期対象レジスタ名と値を受信する(ステップS1206)。
受信後、レジスタ同期制御装置205#Nは、レジスタライタ605#Nにより、受信したレジスタの値をCPU内レジスタ群203#Nから同期対象レジスタ名に対応するレジスタに書き込む(ステップS1207)。書き込み後、レジスタ同期制御装置205#Nは、割込コントローラ608#Nにより、書き込み完了を示す割込番号を割込コントローラ602#Nに通知する(ステップS1208)。通知後、レジスタ同期制御装置205#Nは、レジスタの同期先としてのレジスタ同期制御処理を終了する。ステップS1205の処理により、割込番号を受け付けたCPU#Nは、新規スレッドを生成し起動、または再スケジューリングされたスレッドを起動する(ステップS1209)。
なお、ステップS1207の処理にて、レジスタ同期制御装置205#NがCPU内レジスタ群203#Nにアクセスしているため、CPU#NによるCPU内レジスタ群203#Nへのアクセスが抑止されている。したがって、ステップS1209の処理終了の段階では、新規スレッド、または再スケジューリングされたスレッドはCPU内レジスタ群203#Nへのアクセスが行えず、前述のスレッドは実行可能な状態とはなっていない。
ステップS1208の処理により、割込番号を受け取ったCPU#Nは、CPU内レジスタ群203#Nへのアクセスを開始する(ステップS1210)。CPU#NがCPU内レジスタ群203#Nへのアクセスが可能になったことで、新規スレッド、または再スケジューリングされたスレッドが実行可能な状態に設定されたことになる。
以上説明したように、マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムによれば、同期元コアのスレッドを同期先コアに移行する場合、スレッドに対応付けられたレジスタを特定する。続けて、マルチコアプロセッサシステムは、特定されたレジスタの値を同期元コアから同期先コアに継承する。これにより、マルチコアプロセッサシステムは、シングルコア向けに生成されたアセンブラソースを改変することなく、マルチコアで並列実行することができ、アセンブラソースの継承性を確保することができる。
また、マルチコアプロセッサシステムは、同期元コアの前記特定のレジスタから読み込んだ値を書き込んだ場合に、同期先コアに検出されたスレッドが実行可能となった情報を通知した後に、検出されたスレッドを実行可能な状態に設定してもよい。これにより、マルチコアプロセッサシステムは、同期先コアのレジスタが同期元コアのレジスタの値を継承し、同期先コアのスレッドが正常動作できる状態になってから、スレッドを実行することができる。
また、マルチコアプロセッサシステムは、スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルにおけるレジスタが、マルチコアプロセッサのいずれのコアも特定しなくてよい。シングルコア向けに生成されたソースでは、コアが1つしか存在しないため、どのCPUのどのレジスタであるかという情報は存在しない。したがって、マルチコアプロセッサシステムは、テーブルにおけるレジスタがマルチコアプロセッサのいずれのコアも特定していないことで、シングルコア向けのソースから生成された実行オブジェクトであるということを判断することができる。
また、マルチコアプロセッサシステムは、スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルが、レジスタ以外の他の記憶領域を指定しなくてよい。C++ソースによる実行オブジェクトは、依存関係のあるブロック間において、前方のブロックにてキャッシュメモリ、またはRAMに退避し、後方のブロックにて退避したデータを読み込むという同期制御コードが追加されている。しかしながら、アセンブラソースによる実行オブジェクトは、同期制御コードが追加されず、依存関係のあるブロック間において、レジスタ以外の他の記憶領域にアクセスしない。したがって、マルチコアプロセッサシステムは、テーブルがレジスタ以外の他の記憶領域を指定していないということで、アセンブラソースから生成された実行オブジェクトであることを判断することができる。
また、マルチコアプロセッサシステムは、同期元コアの第1のスレッドから分岐される第2のスレッドが同期先コアに生成することが検出された場合に、レジスタの値を同期元コアから同期先コアにコピーしてもよい。これにより、マルチコアプロセッサシステムは、新規スレッドが生成される場合でも、シングルコア向けに生成されたアセンブラソースを改変することなく、マルチコアで並列実行することができる。
また、従来技術2による同期制御の処理クロック数は、100〜1000クロック程であった。本実施の形態による同期制御の処理クロック数は、同期制御レジスタの操作を合わせても10クロック程度であり、1回の同期制御あたり、90〜99%の効率化を図ることができる。より具体的な例として、クロック周波数が500[MHz]で動作するCPUがあった場合を想定する。従来技術2による同期制御の処理時間は、1回あたり0.2〜2[マイクロ秒]程度であるが、本実施の形態による同期制御の処理時間は、20[ナノ秒]程度で完了することになる。同期制御の出現頻度が、1[マイクロ秒]に1回程度である場合、マルチコアプロセッサシステムとして、10%程の性能改善となる。
なお、本実施の形態で説明したマルチコアプロセッサシステムの制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本マルチコアプロセッサシステムの制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本マルチコアプロセッサシステムの制御プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)マルチコアプロセッサの中の特定のコアにより、前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する検出手段と、
前記特定のコアにより、スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記検出手段によって移行することが検出されたスレッドに対応する特定のレジスタを特定する特定手段と、
前記特定のコアにより、前記特定手段によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成手段と、
前記マルチコアプロセッサと通信可能に接続され、前記生成手段によって生成された同期制御情報を前記特定のコアから取得し、前記同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込み、前記同期先コアの前記特定のレジスタに、前記同期元コアの前記特定のレジスタから読み込んだ値を書き込む同期制御手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
(付記2)マルチコアプロセッサの中の特定のコアにより、前記マルチコアプロセッサ内において同期元コアで実行中の第1のスレッドから分岐される第2のスレッドを同期先コアに生成することを検出する検出手段と、
前記特定のコアにより、スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記第1および第2のスレッドに対応する特定のレジスタを特定する特定手段と、
前記特定のコアにより、前記特定手段によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成手段と、
前記マルチコアプロセッサと通信可能に接続され、前記生成手段によって生成された同期制御情報を前記特定のコアから取得し、前記同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込み、前記同期先コアの前記特定のレジスタに、前記同期元コアの前記特定のレジスタから読み込んだ値を書き込む同期制御手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
(付記3)前記同期先コアにより、前記検出されたスレッドを前記同期先コアにて実行可能な状態に設定する設定手段をさらに備え、
前記同期制御手段は、
前記同期元コアの前記特定のレジスタから読み込んだ値を書き込んだ場合に、前記同期先コアに前記検出されたスレッドが実行可能となった情報を通知し、
前記設定手段は、
前記同期制御手段から前記検出されたスレッドが実行可能となった情報を受け取った場合、前記検出されたスレッドを前記同期先コアにて実行可能な状態に設定することを特徴とする付記1または2に記載のマルチコアプロセッサシステム。
(付記4)前記テーブルにおける前記スレッドに対応付けされた前記レジスタは、前記マルチコアプロセッサのいずれのコアも特定しないことを特徴とする付記1または2に記載のマルチコアプロセッサシステム。
(付記5)前記テーブルは、前記レジスタ以外の他の記憶領域を指定していないことを特徴とする付記1または2に記載のマルチコアプロセッサシステム。
(付記6)マルチコアプロセッサに通信可能に接続された同期制御システムであって、
前記マルチコアプロセッサの中の特定のコアにより、前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出し、前記実行中のスレッドに対応する特定のレジスタおよび前記同期先コアを特定する同期制御情報を取得する取得手段と、
前記取得手段によって取得された同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込む読込手段と、
前記同期先コアの前記特定のレジスタに、前記読込手段によって同期元コアの前記特定のレジスタから読み込まれた値を書き込む書込手段と、
を備えることを特徴とする同期制御システム。
(付記7)マルチコアプロセッサの各々のコアに通信可能に接続された同期制御装置群の中の任意の同期制御装置であって、
前記同期制御装置と通信可能な接続先コアが、当該接続先コアで実行中のスレッドを同期先コアに移行させる同期元コアである場合、前記マルチコアプロセッサのうち前記移行を実行する特定のコアから、前記実行中のスレッドに対応する特定のレジスタおよび前記同期先コアを特定する同期制御情報を取得する取得手段と、
前記接続先コアが前記同期元コアである場合、前記取得手段によって取得された同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込む読込手段と、
前記接続先コアが前記同期元コアである場合、前記特定のレジスタの識別情報および前記特定のレジスタの値を、前記同期制御装置群のうち前記同期先コアの同期制御装置に送信する送信手段と、
前記接続先コアが前記同期先コアである場合、前記同期制御装置群のうち前記同期元コアに接続されている同期制御装置から、前記特定のレジスタの識別情報および前記特定のレジスタの値を受信する受信手段と、
前記接続先コアが前記同期先コアである場合、前記同期先コアの前記特定のレジスタに、前記受信手段によって受信された前記特定のレジスタの値を書き込む書込手段と、
を備えることを特徴とする同期制御装置。
(付記8)マルチコアプロセッサの中の特定のコアが、
前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する検出工程と、
スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記検出工程によって移行することが検出されたスレッドに対応する特定のレジスタを特定する特定工程と、
前記特定工程によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成工程と、
前記マルチコアプロセッサの各々のコアのレジスタ間の同期を制御する同期制御装置群のうち、前記同期元コアの同期制御装置に前記生成工程によって生成された同期制御情報を出力する出力工程と、
を実行することを特徴とする情報生成方法。
(付記9)マルチコアプロセッサの中の特定のコアに、
前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する検出工程と、
スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記検出工程によって移行することが検出されたスレッドに対応する特定のレジスタを特定する特定工程と、
前記特定工程によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成工程と、
前記マルチコアプロセッサの各々のコアのレジスタ間の同期を制御する同期制御装置群のうち、前記同期元コアの同期制御装置に前記生成工程によって生成された同期制御情報を出力する出力工程と、
を実行させることを特徴とする情報生成プログラム。