JP2014099215A - マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム - Google Patents

マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム Download PDF

Info

Publication number
JP2014099215A
JP2014099215A JP2014037360A JP2014037360A JP2014099215A JP 2014099215 A JP2014099215 A JP 2014099215A JP 2014037360 A JP2014037360 A JP 2014037360A JP 2014037360 A JP2014037360 A JP 2014037360A JP 2014099215 A JP2014099215 A JP 2014099215A
Authority
JP
Japan
Prior art keywords
register
synchronization
cpu
core
thread
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014037360A
Other languages
English (en)
Other versions
JP5811211B2 (ja
Inventor
Koichiro Yamashita
浩一郎 山下
Hiromasa Yamauchi
宏真 山内
Takahisa Suzuki
貴久 鈴木
Yasushi Kurihara
康志 栗原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014037360A priority Critical patent/JP5811211B2/ja
Publication of JP2014099215A publication Critical patent/JP2014099215A/ja
Application granted granted Critical
Publication of JP5811211B2 publication Critical patent/JP5811211B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Multi Processors (AREA)

Abstract

【課題】アセンブラソースを改変せずにマルチコアで並列実行することを図ること。
【解決手段】マルチコアプロセッサの中のCPU#0は、マルチコアプロセッサ内において同期元コアとなるCPU#Mで実行中のスレッドを同期先コアとなるCPU#Nに移行することを検出する。次に、CPU#0は、レジスタ依存テーブル501を参照して、移行することが検出されたスレッドに対応する特定のレジスタを特定する。そして、CPU#0は、特定された特定のレジスタおよび同期先コアを特定する同期制御情報を生成する。マルチコアプロセッサと通信可能に接続される同期制御部505は、生成された同期制御情報をCPU#0から取得する。続けて、同期制御部505は、同期制御情報から得られる特定のレジスタの値をCPU#Mの特定のレジスタから読み込み、CPU#Nの特定のレジスタに、読み込んだ値を書き込む。
【選択図】図5

Description

本発明は、レジスタ間の同期を制御するマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムに関する。
近年、プロセッサコアが1つ搭載されたコンピュータであるシングルコアプロセッサに代わって、プロセッサが複数搭載されたコンピュータであるマルチコアプロセッサの形態を取る装置が増えている。従来のシングルコア向けのソフトウェア資産を、マルチコアプロセッサに適用する場合、1つのプログラムを複数のコアで実行するため、レジスタの値の継承性を考慮することが要求される。
たとえば、実行オブジェクトの生成に関する技術として、アセンブラプログラム上では仮のレジスタで実装し、アセンブルの段階で仮のレジスタをフロー解析によって生存区間を判断し、実レジスタに置換するという技術が開示されている(たとえば、下記特許文献1を参照。)。特許文献1にかかる技術では、レジスタの生存区間を明確にすることができる。したがって、シングルコアに書かれたアセンブラコードを、マルチコアプロセッサシステムによって並列処理するように変更する場合、不用な同期処理の挿入、または同期処理の挿入漏れを回避することができる。
また、マルチコアプロセッサシステムでの負荷分散に関する技術として、たとえば、処理モジュールにプロファイル情報を持ち、プロファイル情報に基づいて各コアが実行する処理モジュールを決定するという技術が開示されている(たとえば、下記特許文献2を参照。)。また、マルチコアプロセッサシステムにおける並列処理のためのハードウェアの技術として、複数のコアからアクセス可能となる2ポートのレジスタを有することで、データ転送を容易に行える技術が開示されている(たとえば、下記特許文献3を参照。)。
また、マルチコアプロセッサシステムのレジスタの同期方法として、キャッシュコヒーレンシ機構を利用した技術が存在する(以下、「従来技術1」と称する。)。たとえば、特定のコアのレジスタと、他のコアのレジスタの同期を取る場合、特定のコアは、はじめに、レジスタの値をキャッシュメモリに書き込む。キャッシュメモリにレジスタの値が書き込まれたことを検出したキャッシュコヒーレンシ機構は、他のコアのキャッシュメモリにレジスタの値を通知する。最後に、他のコアが、他のコアのキャッシュメモリからレジスタの値を読み込み、他のコアのレジスタに書き込む。前述の一連の動作により、レジスタの同期を行うことができる。
また、マルチコアプロセッサシステムのレジスタの同期方法として、たとえば、同期を行う専用命令を用意する技術が開示されている(たとえば、下記特許文献4を参照。)。特許文献4にかかる技術では、特定のコアが専用命令を実行した際に、特定のコアは他のコアへレジスタの値を送信し、特定のコアは、他のコアがレジスタ転送命令を実行するまで一時停止状態にする。これにより、従来技術1と等しい処理内容を、ソフトウェア的には1ステップで実行することができる。
図13は、従来例におけるマルチコアプロセッサシステムにて、CプログラムまたはC++プログラムの実行時の、レジスタの同期方法を示す説明図である。設計時、コンパイラが、Cソース、またはC++ソースとなるC/C++ソース1301を読み込み、同期制御コードが追加された実行オブジェクトの一部として、ブロック1302とブロック1303を生成する。また、同期制御コードに対応する箇所は、ブロック1304、ブロック1305となる。具体的に、C/C++ソース1301は、“A=A+1;func(A);”という2ステートメントを含んでおり、ブロック1302とブロック1303は、前述の2ステートメントに対応する実行オブジェクトである。
図13の例では、ブロック1302とブロック1303を実行するCPUが異なっても、ブロック1304、ブロック1305によって、レジスタGr1の同期を取ることができ、正常に動作することができる。具体的に、ブロック1304では、レジスタGr1をキャッシュメモリ等の領域である0x0000FF00に格納する。続けて、ブロック1305では、0x0000FF00に格納した値を読み込んでレジスタGr1に設定する。このように、コンパイル時に、同期制御コードを追加することにより、シングルコア向けのプログラムからマルチコアプロセッサ向けの実行オブジェクトを生成する技術が存在する(以下、「従来技術2」と称する。)。
特開平8−234997号公報 特開2006−99156号公報 特開平01−048163号公報 特開平04−195664号公報
しかしながら、上述した従来技術において、従来技術1、従来技術2、また特許文献4にかかる技術では、新たに同期制御コードを追加している。したがって、従来技術1、従来技術2、また特許文献4にかかる技術をアセンブラソースに適用すると、生成される実行オブジェクトに実行コードが改変するという問題があった。アセンブラソースは、たとえば、1ステップでも命令数を減らしたい場合に、設計者によって生成される。したがって、アセンブラソースは、機械語に1対1変換されることが期待されており、不用意に実行コードが追加されることによって、設計者の意図しないコード量となってしまうという問題があった。
本発明は、上述した従来技術による問題点を解消するため、アセンブラソースを改変せずにマルチコアで並列実行できるマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムを提供することを目的とする。
上述した課題を解決し、目的を達成するため、開示のマルチコアプロセッサシステムは、スレッド群を実行する複数のコアと、複数のコアにそれぞれ接続されたレジスタと、スレッド群の各々のスレッドと各々のスレッドに対応付けされた同期レジスタとの組み合わせ情報を記憶する記憶部とを有するマルチコアプロセッサシステムであって、複数のコアのうちの1つであるマスタコアは、複数のコアのうちの第1のコアで実行中のスレッドを複数のコアのうちの第2のコアに移行させる場合に、記憶部に記憶された組み合わせ情報に基づき第1のコアで実行中のスレッドに対応する同期レジスタの値を第1のコアに対応する第1レジスタから読み込み、第2のコアに対応する第2レジスタに同期レジスタの値を書き込む。
本マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムによれば、シングルコア向けのアセンブラソースを改変することなく、マルチコアで正常に並列実行できるという効果を奏する。
図1は、実施の形態にかかるマルチコアプロセッサシステム100のハードウェアを示すブロック図である。 図2は、CPUs101に専用同期回線を用いたレジスタ同期制御装置を適用した状態を示すブロック図である。 図3は、CPUs101にスヌープ機構201を用いたレジスタ同期制御装置を適用した状態を示すブロック図である。 図4は、同期イベントが発生する状態を示す説明図である。 図5は、マルチコアプロセッサシステム100の機能を示すブロック図である。 図6は、同期イベント未発生時におけるレジスタ同期制御装置205の概要を示す説明図である。 図7は、同期制御レジスタ603の記憶内容の一例を示す説明図である。 図8は、同期イベント発生時における同期元CPUのレジスタ同期制御装置205の概要を示す説明図である。 図9は、同期イベント発生時における同期先CPUのレジスタ同期制御装置205の概要を示す説明図である。 図10は、マルチコアプロセッサシステム100の設計時における概要を示す説明図である。 図11は、スケジュール処理を示すフローチャートである。 図12は、レジスタ同期制御処理を示すフローチャートである。 図13は、従来例におけるマルチコアプロセッサシステムにて、CプログラムまたはC++プログラムの実行時の、レジスタの同期方法を示す説明図である。
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムの好適な実施の形態を詳細に説明する。
(マルチコアプロセッサシステムのハードウェア)
図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)マルチコアプロセッサの中の特定のコアに、
前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する検出工程と、
スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記検出工程によって移行することが検出されたスレッドに対応する特定のレジスタを特定する特定工程と、
前記特定工程によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成工程と、
前記マルチコアプロセッサの各々のコアのレジスタ間の同期を制御する同期制御装置群のうち、前記同期元コアの同期制御装置に前記生成工程によって生成された同期制御情報を出力する出力工程と、
を実行させることを特徴とする情報生成プログラム。
#0、#M、#N CPU
110 バス
203 CPU内レジスタ群
205 レジスタ同期制御装置
501 レジスタ依存テーブル
502 検出部
503 特定部
504 生成部
505 同期制御部
506 設定部
507 取得部
508 読込部
509 書込部
510 送信部
511 受信部

Claims (3)

  1. スレッド群を実行する複数のコアと、
    前記複数のコアにそれぞれ接続されたレジスタと、
    前記スレッド群の各々のスレッドと前記各々のスレッドに対応付けされた同期レジスタとの組み合わせ情報を記憶する記憶部と
    を有するマルチコアプロセッサシステムであって、前記複数のコアのうちの1つであるマスタコアは、
    前記複数のコアのうちの第1のコアで実行中のスレッドを前記複数のコアのうちの第2のコアに移行させる場合に、前記記憶部に記憶された前記組み合わせ情報に基づき前記第1のコアで実行中のスレッドに対応する同期レジスタの値を前記第1のコアに対応する第1レジスタから読み込み、前記第2のコアに対応する第2レジスタに前記同期レジスタの値を書き込む
    マルチコアプロセッサシステム。
  2. スレッド群を実行する複数のコアと、前記複数のコアにそれぞれ接続されたレジスタと、前記スレッド群の各々のスレッドと前記各々のスレッドに対応付けされた同期レジスタとの組み合わせ情報を記憶する記憶部とを有するマルチコアプロセッサシステムの制御方法であって、前記マルチコアプロセッサシステムが、
    前記複数のコアのうちの第1のコアで実行中のスレッドの前記複数のコアのうちの第2のコアへの移行を検出し、
    前記記憶部に記憶された前記組み合わせ情報に基づき、移行を検出した前記スレッドに対応する同期レジスタの値を前記第1のコアに対応する第1レジスタから読み込み、
    前記第2のコアに対応する第2レジスタに前記同期レジスタの値を書き込む
    処理を実行するマルチコアプロセッサシステムの制御方法。
  3. スレッド群を実行する複数のコアと、前記複数のコアにそれぞれ接続されたレジスタと、前記スレッド群の各々のスレッドと前記各々のスレッドに対応付けされた同期レジスタとの組み合わせ情報を記憶する記憶部とを有するマルチコアプロセッサシステムの制御プログラムであって、前記マルチコアプロセッサシステムに、
    前記複数のコアのうちの第1のコアで実行中のスレッドの前記複数のコアのうちの第2のコアへの移行を検出し、
    前記記憶部に記憶された前記組み合わせ情報に基づき、移行を検出した前記スレッドに対応する同期レジスタの値を前記第1のコアに対応する第1レジスタから読み込み、
    前記第2のコアに対応する第2レジスタに前記同期レジスタの値を書き込む
    処理を実行させるマルチコアプロセッサシステムの制御プログラム。
JP2014037360A 2014-02-27 2014-02-27 マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム Expired - Fee Related JP5811211B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014037360A JP5811211B2 (ja) 2014-02-27 2014-02-27 マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014037360A JP5811211B2 (ja) 2014-02-27 2014-02-27 マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2012531592A Division JP5488697B2 (ja) 2010-08-30 2010-08-30 マルチコアプロセッサシステム、同期制御方法、および同期制御プログラム

Publications (2)

Publication Number Publication Date
JP2014099215A true JP2014099215A (ja) 2014-05-29
JP5811211B2 JP5811211B2 (ja) 2015-11-11

Family

ID=50941105

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014037360A Expired - Fee Related JP5811211B2 (ja) 2014-02-27 2014-02-27 マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム

Country Status (1)

Country Link
JP (1) JP5811211B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114866499A (zh) * 2022-04-27 2022-08-05 曙光信息产业(北京)有限公司 片上多核***的同步广播通信方法、装置和存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04195664A (ja) * 1990-11-28 1992-07-15 Hitachi Ltd マルチプロセッサシステム
JP2001236221A (ja) * 2000-02-21 2001-08-31 Keisuke Shindo マルチスレッドを利用するパイプライン並列プロセッサ
JP2003029986A (ja) * 2001-07-12 2003-01-31 Nec Corp プロセッサ間レジスタ継承方法及びその装置
WO2007088582A1 (ja) * 2006-01-31 2007-08-09 Fujitsu Limited 共有メモリ型マルチプロセッサにおける非同期遠隔手続き呼び出し方法、非同期遠隔手続き呼び出しプログラムおよび記録媒体
JP2010092101A (ja) * 2008-10-03 2010-04-22 Renesas Technology Corp 情報処理装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04195664A (ja) * 1990-11-28 1992-07-15 Hitachi Ltd マルチプロセッサシステム
JP2001236221A (ja) * 2000-02-21 2001-08-31 Keisuke Shindo マルチスレッドを利用するパイプライン並列プロセッサ
JP2003029986A (ja) * 2001-07-12 2003-01-31 Nec Corp プロセッサ間レジスタ継承方法及びその装置
WO2007088582A1 (ja) * 2006-01-31 2007-08-09 Fujitsu Limited 共有メモリ型マルチプロセッサにおける非同期遠隔手続き呼び出し方法、非同期遠隔手続き呼び出しプログラムおよび記録媒体
JP2010092101A (ja) * 2008-10-03 2010-04-22 Renesas Technology Corp 情報処理装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114866499A (zh) * 2022-04-27 2022-08-05 曙光信息产业(北京)有限公司 片上多核***的同步广播通信方法、装置和存储介质
CN114866499B (zh) * 2022-04-27 2024-02-23 曙光信息产业(北京)有限公司 片上多核***的同步广播通信方法、装置和存储介质

Also Published As

Publication number Publication date
JP5811211B2 (ja) 2015-11-11

Similar Documents

Publication Publication Date Title
JP5488697B2 (ja) マルチコアプロセッサシステム、同期制御方法、および同期制御プログラム
CN103309786B (zh) 用于在非可抢占式图形处理单元上交互调试的方法和装置
JP4896376B2 (ja) コプロセッサの性能を強化するシステムおよび方法
US7533246B2 (en) Application program execution enhancing instruction set generation for coprocessor and code conversion with marking for function call translation
KR101240092B1 (ko) 컴퓨터 플랫폼에서의 방법 및 컴퓨터 플랫폼
US9996394B2 (en) Scheduling accelerator tasks on accelerators using graphs
JP5780243B2 (ja) スケジューリング方法、およびマルチコアプロセッサシステム
JP4667206B2 (ja) マルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法
JP5733385B2 (ja) エンディアン変換方法、およびシステム
WO2011158320A1 (ja) マルチコアプロセッサシステム、キャッシュコヒーレンシ制御方法、およびキャッシュコヒーレンシ制御プログラム
JP2010287254A (ja) タスクのスケジューリングを支援する装置
KR20080041211A (ko) 명령을 내리는 방법 및 컴퓨터 판독가능 매체
US20140019738A1 (en) Multicore processor system and branch predicting method
JPWO2012086041A1 (ja) 同期処理方法
US10198784B2 (en) Capturing commands in a multi-engine graphics processing unit
JP5811211B2 (ja) マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム
JP2007094986A (ja) シミュレーション装置およびシミュレーション方法
JP5687603B2 (ja) プログラム変換装置、プログラム変換方法、および変換プログラム
JP5293609B2 (ja) マルチプロセッサ並びにそのキャッシュ同期制御方法及びプログラム
US20180225208A1 (en) Information processing device
CN109983435B (zh) 图形处理方法及相关装置和设备
US20130239113A1 (en) Information processing apparatus, computer product, and information processing method
JP5614483B2 (ja) マルチコアプロセッサシステム、キャッシュコヒーレンシ制御方法、およびキャッシュコヒーレンシ制御プログラム
KR101881039B1 (ko) 비휘발성 메모리에 저장된 메모리 매핑 파일의 비동기식 원자적 업데이트 방법 및 제어 장치
JP2018120297A (ja) 情報処理装置、情報処理装置の制御方法及び情報処理装置の制御プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140331

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141003

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141014

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141215

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150602

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150803

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150818

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150831

R150 Certificate of patent or registration of utility model

Ref document number: 5811211

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees