(57)【特許請求の範囲】
【請求項１】
共有メモリと、
前記共有メモリへの排他的なアクセスを要求する第１のコア群と前記共有メモリへの排他的でないアクセスを要求する第２のコア群を有するマルチコアと、
前記マルチコアのアクセス要求に基づいて前記マルチコアから前記共有メモリへのアクセスを制御するアクセス制御部を有し、前記アクセス制御部は、
前記マルチコアのうちのいずれかから発行された、前記共有メモリへのアクセスの待機解除を示す待機解除信号を検出し、検出した前記待機解除信号を発行したコアの属する前記第１のコア群または前記第２のコア群のいずれかに前記待機解除信号を通知する
マルチコアプロセッサシステム。
【請求項２】
前記アクセス制御部は、
前記マルチコアを、前記共有メモリのうち特定の領域に対し排他的なアクセスを要求する第１のコア群と前記共有メモリへの排他的でないアクセスを要求する第２のコア群とに分類する請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記アクセス制御部は、
前記第１のコア群のうちのいずれかから前記待機解除信号を検出した場合、前記第１のコア群のうち、前記待機解除信号を発行したコアを除いた残余のコアに対し前記待機解除信号を通知する請求項２に記載のマルチコアプロセッサシステム。
【請求項４】
前記アクセス制御部は、
前記第１のコア群のうち前記待機解除信号を発行したコアを、前記排他的なアクセスが完了したコアとして検出する請求項３に記載のマルチコアプロセッサシステム。
【請求項５】
共有メモリと、前記共有メモリへの排他的なアクセスを要求する第１のコア群と前記共有メモリへの排他的でないアクセスを要求する第２のコア群を有するマルチコアを有するマルチコアプロセッサシステムの制御方法であって、前記マルチコアプロセッサシステムが、
前記マルチコアのうちのいずれかから発行された、前記共有メモリへのアクセスの待機解除を示す待機解除信号を検出する処理と、
検出した前記待機解除信号を発行したコアの属する前記第１のコア群または前記第２のコア群のいずれかに前記待機解除信号を通知する処理と
を実行する制御方法。
【請求項６】
共有メモリと、前記共有メモリへの排他的なアクセスを要求する第１のコア群と前記共有メモリへの排他的でないアクセスを要求する第２のコア群を有するマルチコアを有するマルチコアプロセッサシステムの制御プログラムであって、前記マルチコアプロセッサシステムに、
前記マルチコアのうちのいずれかから発行された、前記共有メモリへのアクセスの待機解除を示す待機解除信号を検出する処理と、
検出した前記待機解除信号を発行したコアの属する前記第１のコア群または前記第２のコア群のいずれかに前記待機解除信号を通知する処理と
を実行させる制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリへのアクセスを制御するメモリアクセス制御装置、メモリアクセス制御方法、およびメモリアクセス制御プログラムに関する。
【背景技術】
【０００２】
従来、共有メモリ型のマルチコアプロセッサでは、コア間の共有データの排他制御が重要であった。排他制御を行わないで複数のコアでデータを共有して処理を行うと、複数のコアが同じ処理を同じ回数分行っても処理を行うタイミングにより結果が異なる場合が発生する。排他制御を行う技術としては、メモリへの排他アクセスという技術が開示されている。
【０００３】
メモリへの排他アクセスの一例としては、排他ロード命令、排他ストア命令と、排他アクセス機構とを利用した方法がある。この方法は、コアの命令セットとバスプロトコルを拡張し、排他ロードと排他ストアという特殊なロード、ストア命令を発行できるようにする。さらに、複数のコアと共有メモリを結ぶ共有バス上に排他アクセス機構を配置する。排他アクセス機構は排他ロード発行元のＣＰＵ識別情報と、その時のロード先のアドレスとタグ情報を記録するフィールドを持ち、排他ロード／ストア命令を監視する。
【０００４】
また、排他アクセスは、排他ロードを行った後に排他ストアを行った状態とする。排他アクセスの要求が行われたという場合とは、排他ロードが行われたことと同義であり、排他アクセスが完了した場合とは、排他ストアが終了したことと同義である。
【０００５】
排他ロードが発行された場合、排他アクセス機構は、通常のロードを行って要求元のＣＰＵに返却する。また、排他アクセス機構は、ロード先のアドレスを記録し、排他アクセス機構に記録されている情報を検索してロード先のアドレスが同じでかつタグが記録されているＣＰＵが無ければ、排他ロード要求元のＣＰＵに対してタグを記録する。
【０００６】
排他ストアが発行された場合、排他アクセス機構は、要求元のＣＰＵに関して記録されているアドレスがストア先のアドレスと一致し、かつタグが記録されていれば、ストアを発行すると共に、要求元のＣＰＵにストア成功の情報を返してタグ情報を削除する。そうでない場合、排他アクセス機構は、ストアを発行せずに要求元のＣＰＵにストア失敗の情報を返却する動作を行う。
【０００７】
排他ロード・排他ストアを利用することで、処理のタイミングによらず結果を一致させることができる。具体的には、あるＣＰＵがある変数に対して排他ロードを行い、排他ストアを行うまでの間に、別のＣＰＵが同じ変数に対して排他ロードを行った場合、後から排他ロードを行ったＣＰＵはその後の排他ストアに失敗して結果が反映されないことになる。このため、排他ストアに失敗したＣＰＵは同じことを排他ロードからやり直すことで、先にロードを行ったＣＰＵが処理をした後の正しく結果が反映された値を利用することができ、処理のタイミングによらず結果を一致させることができる。
【０００８】
たとえば、排他アクセス要求を行った場合には、レジスタに要求中であることを記憶し、排他アクセスの解放時には、レジスタの値をクリアすることで、排他アクセス機構を実現する技術が開示されている（たとえば、下記特許文献１を参照。）。
【０００９】
また、排他アクセス機構の実現方法の１つとして、排他アクセス要求を行った際に、ＣＰＵＩＤ、排他アクセス要求を行ったアドレス先のデバイスであるメモリ、Ｉ／Ｏなどの情報を用いて排他アクセスを行うという技術が開示されている（たとえば、下記特許文献２を参照。）。
【００１０】
また、排他アクセスの解放があった場合には、解放通知を全ＣＰＵに送信することで、排他アクセス機構を実現し、また、一度排他アクセス要求を行い失敗したＣＰＵを解放通知まで待機させ、メモリトラフィックの低下を図れるという技術が開示されている（たとえば、下記特許文献３を参照。）。
【００１１】
このように、排他アクセス機構を利用することで、プロセッサ間で共有するデータに対して正しく処理を行えるようになるが、排他アクセス機構で制御できるのはせいぜい一度のロードストア命令でアクセス可能な３２ｂｉｔか６４ｂｉｔの領域が限度となる。ＯＳやアプリケーションプログラムのレベルではより大きな範囲でデータを共有することがあるため、多くのＯＳは、排他アクセス機構を利用して、スピンロックという機能を実現し、大きな領域での排他制御を実現している。スピンロックの概要としてはたとえば下記非特許文献１、２に、実装例としては、たとえば、下記非特許文献３にて記載されている。
【００１２】
また、スピンロックを行う場合、領域を確保できなかったＣＰＵを待機させ、領域が確保できるようになった場合に待機を解除できるように、同期命令と同期待ち命令が追加されたＣＰＵも存在する。（たとえば、下記非特許文献４、非特許文献５を参照。）。同期命令とは、同期信号を他のＣＰＵに通知する命令である。同期待ち命令とは、同期信号が通知されるまで待機する命令である。前述の命令群を適用すると、領域を確保できなかったＣＰＵは、同期待ち命令を発行し待機する。領域を確保できたＣＰＵは、排他ストア終了後、同期信号を他のＣＰＵに通知する。これにより、領域を確保できなかったＣＰＵは同期信号待ち中となり、メモリアクセスが減少し、消費電力を削減することができる。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開平１−３０５４５７号公報
【特許文献２】国際公開第２００７／０９９６１６号パンフレット
【特許文献３】特開平８−３２０８２８号公報
【非特許文献】
【００１４】
【非特許文献１】「Ｓｐｉｎｌｏｃｋ  −  Ｗｉｋｉｐｅｄｉａ，  ｔｈｅ  ｆｒｅｅ  ｅｎｃｙｃｌｏｐｅｄｉａ」［ｏｎｌｉｎｅ］、２０１０年４月９日検索、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｅｎ．ｗｉｋｉｐｅｄｉａ．ｏｒｇ／ｗｉｋｉ／Ｓｐｉｎｌｏｃｋ＞
【非特許文献２】「ｐｔｈｒｅａｄ＿ｓｐｉｎ＿ｌｏｃｋ」［ｏｎｌｉｎｅ］、２０１０年４月９日検索、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｇｒｏｕｐ．ｏｒｇ／ｏｎｌｉｎｅｐｕｂｓ／００９６９５３９９／ｆｕｎｃｔｉｏｎｓ／ｐｔｈｒｅａｄ＿ｓｐｉｎ＿ｌｏｃｋ．ｈｔｍ＞
【非特許文献３】「Ｕｓｅｒ−Ｌｅｖｅｌ  Ｓｐｉｎ  Ｌｏｃｋｓ  −  ＣｏｄｅＰｒｏｊｅｃｔ」［ｏｎｌｉｎｅ］、２０１０年４月９日検索、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｃｏｄｅｐｒｏｊｅｃｔ．ｃｏｍ／ｋｂ／ｔｈｒｅａｄｓ／ｓｐｉｎｌｏｃｋｓ．ａｓｐｘ＞
【非特許文献４】「ＲｅａｌＶｉｅｗ  Ｃｏｍｐｉｌａｔｉｏｎ  Ｔｏｏｌｓ  Ｖｅｒｓｉｏｎ  ３．１  Ａｓｓｅｍｂｌｅｒ  Ｇｕｉｄｅ」［ｏｎｌｉｎｅ］、２０１０年４月９日検索、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｉｎｆｏｃｅｎｔｅｒ．ａｒｍ．ｃｏｍ／ｈｅｌｐ／ｔｏｐｉｃ／ｃｏｍ．ａｒｍ．ｄｏｃ．ｄｕｉ０２０４ｈ／ＤＵＩ０２０４Ｈ＿ｒｖｃｔ＿ａｓｓｅｍｂｌｅｒ＿ｇｕｉｄｅ．ｐｄｆ＞ｐ．４−１３９、ｐ．４−１４０
【非特許文献５】「ＡＲＭ１１  ＭＰＣｏｒｅ  Ｐｒｏｃｅｓｓｏｒ  Ｒｅｖｉｓｉｏｎ：  ｒ２ｐ０  Ｔｅｃｈｎｉｃａｌ  Ｒｅｆｅｒｅｎｃｅ  Ｍａｎｕａｌ」［ｏｎｌｉｎｅ］、２０１０年４月１２日検索、インターネット＜ｈｔｔｐ：／／ｉｎｆｏｃｅｎｔｅｒ．ａｒｍ．ｃｏｍ／ｈｅｌｐ／ｔｏｐｉｃ／ｃｏｍ．ａｒｍ．ｄｏｃ．ｄｄｉ０３６０ｆ／ＤＤＩ０３６０Ｆ＿ａｒｍ１１＿ｍｐｃｏｒｅ＿ｒ２ｐ０＿ｔｒｍ．ｐｄｆ＞ｐ．１１−８
【発明の概要】
【発明が解決しようとする課題】
【００１５】
しかしながら、上述した従来技術において、特許文献１、特許文献２にかかる排他アクセス機構の技術では、排他アクセスの完了にあわせて同期信号を通知しないため、同期命令／同期待ち命令を適用することが困難であるという問題があった。
【００１６】
また、特許文献３にかかる排他アクセス機構の技術では、排他アクセスの完了にあわせて同期信号を通知するため、同期命令／同期待ち命令を適用することができるが、同期信号の通知先を特定せず、全ＣＰＵに同期信号を通知している。したがって、排他アクセスとは別の目的で同期待ち命令で待機中になっているＣＰＵや、異なる領域に対して排他アクセス要求を行い待機中のＣＰＵが一旦待機解除され、再び待機状態となるといった処理が発生し、ＣＰＵの消費電力が増大する問題があった。
【００１７】
本発明は、上述した従来技術による問題点を解消するため、排他アクセス要求を行い待機中のコアを待機解除できるメモリアクセス制御装置、メモリアクセス制御方法、およびメモリアクセス制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１８】
上述した課題を解決し、目的を達成するため、開示のメモリアクセス制御装置は、共有メモリにアクセス可能なマルチコアを、共有メモリに対し排他アクセスを要求した第１のグループと共有メモリに対し排他アクセスを要求していない第２のグループとに分類し、分類された第１のグループの中から排他アクセスが完了したコアを検出し、検出された場合、第１のグループのうち排他アクセスが待機中であるコアに対し待機解除を通知する。
【発明の効果】
【００１９】
本メモリアクセス制御装置、メモリアクセス制御方法、およびメモリアクセス制御プログラムによれば、排他アクセス要求を行い待機中のコアを待機解除し、他のコアを起動せずに済み、消費電力が低下するという効果を奏する。
【図面の簡単な説明】
【００２０】
【図１】実施の形態にかかるマルチコアプロセッサシステムのハードウェアを示すブロック図である。
【図２】実施の形態１にかかるマルチコアプロセッサシステム１００におけるＣＰＵとメモリアクセス制御装置２０２との関係を示すブロック図である。
【図３】実施の形態１にかかるメモリアクセス制御装置２０２の機能を示したブロック図である。
【図４】メモリアクセス制御装置２０２に排他アクセス要求中のＣＰＵが存在する場合の動作概略を示す説明図である。
【図５】メモリアクセス制御装置２０２に排他アクセス要求中のＣＰＵが存在しない場合の動作概略を示す説明図である。
【図６】メモリアクセス制御装置２０２にＶａｌｉｄ情報が設定されていない場合の動作概略を示す説明図である。
【図７】実施の形態１にかかるメモリアクセス制御装置２０２の配線の様子を示した説明図である。
【図８】実施の形態１にかかる排他アクセス部２０５による排他ロード処理を示すフローチャートである。
【図９】実施の形態１にかかる排他アクセス部２０５による排他ストア処理を示すフローチャートである。
【図１０】実施の形態１にかかる同期信号制御処理を示すフローチャートである。
【図１１】実施の形態２にかかるマルチコアプロセッサシステム１００におけるＣＰＵとメモリアクセス制御装置の関係を示す説明図である。
【図１２】実施の形態２にかかるマルチコアプロセッサシステム１００の機能を示したブロック図である。
【図１３Ａ】実施の形態２にかかる排他アクセスによって発生する同期信号制御処理を示すフローチャート（その１）である。
【図１３Ｂ】実施の形態２にかかる排他アクセスによって発生する同期信号制御処理を示すフローチャート（その２）である。
【図１４】実施の形態２にかかる排他アクセス以外によって発生する同期信号制御処理を示すフローチャートである。
【発明を実施するための形態】
【００２１】
以下に添付図面を参照して、本発明にかかるメモリアクセス制御装置、メモリアクセス制御方法、およびメモリアクセス制御プログラムの好適な実施の形態を詳細に説明する。
【００２２】
（マルチコアプロセッサシステムのハードウェア）
図１は、実施の形態１と実施の形態２にかかるマルチコアプロセッサシステムのハードウェアを示すブロック図である。図１において、マルチコアプロセッサシステム１００は、ＣＰＵを複数搭載するＣＰＵｓ１０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、を備えている。また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ１０４と、フラッシュＲＯＭコントローラ１０５と、フラッシュＲＯＭ１０６と、を備えている。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ１０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０８と、キーボード１０９と、を備えている。また、各部はバス１１０によってそれぞれ接続されている。
【００２３】
ここで、ＣＰＵｓ１０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ１０１は、シングルコアのプロセッサを並列して接続したすべてのＣＰＵを指している。ＣＰＵｓ１０１の詳細は、実施の形態１では図２にて、実施の形態２では図１１にて後述する。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。
【００２４】
ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵｓ１０１のワークエリアとして使用される。フラッシュＲＯＭ１０４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ１０８によって新しいＯＳを受信し、フラッシュＲＯＭ１０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２５】
フラッシュＲＯＭコントローラ１０５は、ＣＰＵｓ１０１の制御に従ってフラッシュＲＯＭ１０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ１０６は、フラッシュＲＯＭコントローラ１０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ１０８を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ１０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２６】
ディスプレイ１０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２７】
Ｉ／Ｆ１０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１１１に接続され、ネットワーク１１１を介して他の装置に接続される。そして、Ｉ／Ｆ１０８は、ネットワーク１１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２８】
キーボード１０９は、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、キーボード１０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２９】
（実施の形態１の概要説明）
図２は、実施の形態１にかかるマルチコアプロセッサシステム１００におけるＣＰＵとメモリアクセス制御装置２０２との関係を示すブロック図である。図２で示されるハードウェアは、共有メモリ２０１と、メモリアクセス制御装置２０２と、ＣＰＵｓ１０１に含まれるＣＰＵ＃０〜ＣＰＵ＃３とである。メモリアクセス制御装置２０２と、ＣＰＵ＃０〜ＣＰＵ＃３はバス１１０によって接続されている。
【００３０】
ＣＰＵ＃０〜ＣＰＵ＃３は、バス１１０以外にも、同期信号線２０６、同期信号線２０７にてメモリアクセス制御装置２０２に接続している。具体的には、ＣＰＵ＃０は、同期信号線２０６＃０によってメモリアクセス制御装置２０２に対し同期信号を通知する。メモリアクセス制御装置２０２は、同期信号線２０７＃０によってＣＰＵ＃０に対し同期信号を通知する。
【００３１】
同様に、ＣＰＵ＃１〜ＣＰＵ＃３は、それぞれ、同期信号線２０６＃１〜同期信号線２０６＃３によってメモリアクセス制御装置２０２に対し同期信号を通知する。そしてメモリアクセス制御装置２０２は、同期信号線２０７＃１〜同期信号線２０７＃３によってＣＰＵ＃１〜ＣＰＵ＃３に対し同期信号を通知する。
【００３２】
共有メモリ２０１は、メモリアクセス制御装置２０２を通してアクセス可能な記憶領域である。記憶領域とは、具体的には、ＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４である。また、たとえば、ＣＰＵ＃０が、ディスプレイ１０７に画像データの表示を要求する場合、ＲＡＭ１０３に含まれるＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）にアクセスし、画像データをＶＲＡＭに書き込むことになる。したがって、ＶＲＡＭも共有メモリ２０１にアクセスすることに含めてもよい。また、Ｉ／Ｆ１０８に接続されるリソースのメモリも共有メモリ２０１に含めてもよい。このように、マルチコアプロセッサシステム１００内の、ＣＰＵ＃０〜ＣＰＵ＃３からアクセスされるデバイスのメモリを、共有メモリ２０１として含めてもよい。
【００３３】
メモリアクセス制御装置２０２は、従来例による排他アクセス機構を有しており、ＣＰＵ＃０〜ＣＰＵ＃３に対して共有メモリ２０１への排他アクセスの機能を提供する装置である。排他アクセスの機能は、排他ロード命令と排他ストア命令とを有する。また、メモリアクセス制御装置２０２における排他ロード命令には、排他アクセス要求が行われたことを記録する処理が追加される。
【００３４】
また、メモリアクセス制御装置２０２は、同期信号制御部２０３と、フラグ付きロード先アドレス管理レジスタ２０４と、排他アクセス部２０５と、を有している。同期信号制御部２０３は、同期信号線２０６＃０〜同期信号線２０６＃３からの同期信号の入力とフラグ付きロード先アドレス管理レジスタ２０４とに基づいて、同期信号線２０７＃０〜同期信号線２０７＃３から出力される同期信号の通知先を制御する。
【００３５】
フラグ付きロード先アドレス管理レジスタ２０４は、同期信号制御部２０３と排他アクセス部２０５によってアクセスされるレジスタ群である。フラグ付きロード先アドレス管理レジスタ２０４は、ＣＰＵ＃０〜ＣＰＵ＃３それぞれに存在し、フラグ付きロード先アドレス管理レジスタ２０４＃０〜フラグ付きロード先アドレス管理レジスタ２０４＃３が、ＣＰＵ＃０〜ＣＰＵ＃３に対応するレジスタとなる。また、フラグ付きロード先アドレス管理レジスタ２０４は、Ｖａｌｉｄフィールド、タグフィールド、アドレスフィールドを有する。Ｖａｌｉｄフィールドは、ＣＰＵ＃０〜ＣＰＵ＃３のいずれかが排他ロードを行うと、排他の成否に関わらず排他ロードを行ったことを示す値であるＴＲＵＥが格納される。排他ロードを行っていない場合は、ＦＡＬＳＥが格納される。以下、図２、図４〜図６、図１１ではＴＲＵＥを「Ｔ」と表記し、ＦＡＬＳＥを「Ｆ」と表記する。
【００３６】
タグフィールドは、ＣＰＵ＃０〜ＣＰＵ＃３のいずれかが排他ロードを行い、排他ストアを実行できる権利の取得に成功した場合に、排他ストアの実行権の取得に成功したことを示す値であるＴＲＵＥが格納される。排他ストアの実行権の取得に失敗した場合、または、排他ストアの実行権の取得を行っていない場合は、ＦＡＬＳＥが格納される。排他ストアの実行権の取得に成功したＣＰＵによって排他ストアが実行された後に、タグフィールドの値は初期値に戻される。
【００３７】
アドレスフィールドは、排他アクセスを行ったアドレスに関連づけられたフラグの値が格納される。たとえば、共有メモリ２０１内に、共有領域１と共有領域２がある場合に、ＯＳは、共有領域１に対応するフラグ１と共有領域２に対応するフラグ２を用意する。フラグ１を獲得できたＣＰＵは共有領域１を利用でき、フラグ２を獲得できたＣＰＵは共有領域２を利用できるといった形で排他制御を行う。また、各フィールドのサイズは、たとえば、Ｖａｌｉｄフィールドが１ビット、タグフィールドが１ビット、アドレスフィールドは３２ビットである。また、Ｖａｌｉｄフィールド、タグフィールドに１が格納されている場合、ＴＲＵＥが格納されたとし、０が格納されている場合、ＦＡＬＳＥが格納されたとする。
【００３８】
たとえば、図２におけるフラグ付きロード先アドレス管理レジスタ２０４＃０は、ＶａｌｉｄフィールドとタグフィールドにＴＲＵＥが格納されており、アドレスフィールドにフラグ１が格納されている。これにより、ＣＰＵ＃０は、フラグ１に対応する共有領域の排他ストア権を取得した状態を示している。同様に、フラグ付きロード先アドレス管理レジスタ２０４＃１は、ＶａｌｉｄフィールドにはＴＲＵＥが、タグフィールドにはＦＡＬＳＥが格納されており、アドレスフィールドにはフラグ１が格納されている。これにより、ＣＰＵ＃１は、フラグ１に対応する共有領域の排他ストア権の取得に失敗した状態を示している。
【００３９】
また、フラグ付きロード先アドレス管理レジスタ２０４＃２は、ＶａｌｉｄフィールドとタグフィールドにはＴＲＵＥが格納されており、アドレスフィールドにフラグ２が格納されている。これにより、ＣＰＵ＃２は、フラグ２に対応する共有領域の排他ストア権を取得した状態を示している。最後に、フラグ付きロード先アドレス管理レジスタ２０４＃３は、ＶａｌｉｄフィールドとタグフィールドにはＦＡＬＳＥが格納されており、アドレスフィールドにフラグ１が格納されている。これにより、ＣＰＵ＃３は、フラグ１に対応する共有領域の排他ストアが完了した後の状態を示している。
【００４０】
排他アクセス部２０５は、排他ロード命令と排他ストア命令がＣＰＵ＃０〜ＣＰＵ＃３から発行された場合に、フラグ付きロード先アドレス管理レジスタ２０４に基づいて排他ロード処理と排他ストア処理を実行する機能を有する。また、排他アクセス部２０５は、排他ロード処理と排他ストア処理内部で、フラグ付きロード先アドレス管理レジスタ２０４を更新する。具体的な処理については、図８、図９にて後述する。
【００４１】
（メモリアクセス制御装置２０２の機能）
次に、メモリアクセス制御装置２０２の機能について説明する。図３は、実施の形態１にかかるメモリアクセス制御装置２０２の機能を示したブロック図である。メモリアクセス制御装置２０２は、設定部３０１と、分類部３０２と、検出部３０３と、通知部３０４と、を有する。この制御部となる機能（設定部３０１〜通知部３０４）は、メモリアクセス制御装置２０２に搭載された半導体回路により、その機能を実現する。
【００４２】
設定部３０１は、フラグ付きロード先アドレス管理レジスタ２０４の値を更新する機能を有する。たとえば、設定部３０１は、フラグ付きロード先アドレス管理レジスタ２０４のＶａｌｉｄフィールドに関して、排他ロード処理が実行された際に、値をＦＡＬＳＥからＴＲＵＥに設定する。
【００４３】
分類部３０２は、共有メモリ２０１にアクセス可能なマルチコアを、共有メモリ２０１に対し排他アクセスを要求した第１のグループと共有メモリ２０１に対し排他アクセスを要求していない第２のグループとに分類する機能を有する。マルチコアとは、複数のＣＰＵを指している。また、分類部３０２は、マルチコアを、共有メモリ２０１のうち特定の領域に対し排他アクセスを要求した第１のグループと特定の領域に対し排他アクセスを要求していない第２のグループとに分類してもよい。特定の領域とは、共有メモリ２０１の共有領域である。共有メモリ２０１の全アドレス空間を共有領域としてもよいし、共有メモリ２０１の一部のアドレス空間を共有領域とし、複数の共有領域が共有メモリ２０１内に存在してもよい。
【００４４】
たとえば、分類部３０２は、フラグ付きロード先アドレス管理レジスタ２０４のＶａｌｉｄフィールドの値がＴＲＵＥであれば排他アクセスを要求した第１のグループに、値がＦＡＬＳＥであれば排他アクセスを要求していない第２のグループに分類する。なお、分類された結果は、メモリアクセス制御装置２０２のレジスタ、ＲＡＭ等に記憶される。
【００４５】
検出部３０３は、分類部３０２によって分類された第１のグループの中から排他アクセスが完了したコアを検出する機能を有する。また、検出部３０３は、第１のグループのうち待機解除を通知したコアを、排他アクセスが完了したコアとして検出してもよい。待機解除を通知したコアとは、同期命令によって同期信号を通知したＣＰＵである。たとえば、検出部３０３は、同期信号線２０６＃０から同期信号が通知され、フラグ付きロード先アドレス管理レジスタ２０４＃０のＶａｌｉｄフィールドにＴＲＵＥが設定されている場合に、ＣＰＵ＃０を排他アクセスが完了したＣＰＵとして検出する。なお、検出された結果は、メモリアクセス制御装置２０２のレジスタ、ＲＡＭ等に記憶される。
【００４６】
また、検出部３０３は、分類部３０２によって分類された排他アクセスを要求していない第２のグループのコアの中から待機解除を通知したコアを検出してもよい。たとえば、検出部３０３は、同期信号線２０６＃０から同期信号が通知され、フラグ付きロード先アドレス管理レジスタ２０４＃０のＶａｌｉｄフィールドにＦＡＬＳＥが設定されている場合に、ＣＰＵ＃０を待機解除を通知したＣＰＵとして検出する。ＶａｌｉｄフィールドにＦＡＬＳＥが設定されている場合に同期信号を通知する例としては、排他アクセス以外の目的によって同期信号が通知されるケースなどである。排他アクセス以外の目的で同期信号を通知する例としては、バリア同期処理を実行する場合などが存在する。バリア同期処理の詳細については、図６にて後述する。
【００４７】
通知部３０４は、検出部３０３によって排他アクセスが完了したコアが検出された場合、第１のグループのうち排他アクセスが待機中であるコアに対し待機解除を通知する機能を有する。また、通知部３０４は、検出部３０３によって排他アクセスが完了したコアが検出された場合、第１のグループのうち、排他アクセスが完了したコアを除いた残余のコアに対し待機解除を通知してもよい。また、通知部３０４は、検出部３０３によって排他アクセスが完了したコアが検出された場合、第１のグループのうち、排他アクセスが完了したコアを除いた残余のコアに対し待機解除を通知してもよい。
【００４８】
たとえば、通知部３０４は、排他アクセスが完了したＣＰＵとしてＣＰＵ＃０が検出された場合に、Ｖａｌｉｄフィールドの値がＴＲＵＥである第１のグループに同期信号を通知する。
【００４９】
また、通知部３０４は、検出部３０３によって排他アクセスを要求していない第２のグループのうち待機解除を通知したコアが検出された場合、第２のグループのうち待機解除を通知したコアを除いた残余のコアに対し待機解除を通知してもよい。たとえば、検出部３０３が、待機解除を通知したＣＰＵがＣＰＵ＃１であり、第２のグループとして、ＶａｌｉｄフィールドがＦＡＬＳＥであるＣＰＵ＃１とＣＰＵ＃３を検出した状態を想定する。前述の状態で、通知部３０４は、第２のグループのうち、ＣＰＵ＃１を除いたＣＰＵ＃３に対し待機解除を通知する。なお、通知されたという情報は、メモリアクセス制御装置２０２のレジスタ、ＲＡＭ等に記憶されてもよい。
【００５０】
図４は、メモリアクセス制御装置２０２に排他アクセス要求中のＣＰＵが存在する場合の動作概略を示す説明図である。図４でのＣＰＵ＃０〜ＣＰＵ＃３におけるフラグ付きロード先アドレス管理レジスタ２０４の状態に基づくと、ＣＰＵ＃０は、フラグ１に対応する共有領域の排他ストア権を取得し、排他ストアを行った状態である。ＣＰＵ＃１は、フラグ１に対する共有領域の排他ストア権の取得に失敗し、同期信号待ちを行っている状態である。ＣＰＵ＃２は、フラグ２に対応する共有領域の排他ストア権を取得した状態である。ＣＰＵ＃３は、共有領域へのアクセスとは無関係な状態である。
【００５１】
このとき、ＣＰＵ＃０が同期信号線２０６＃０によって同期信号を同期信号制御部２０３に通知した場合を想定する。同期信号を取得した同期信号制御部２０３は、フラグ付きロード先アドレス管理レジスタ２０４＃０とアドレスフィールドの値が一致し、Ｖａｌｉｄフィールドに排他ロードを行ったことを示すＴＲＵＥが格納されたレジスタを検出する。図４の場合では、フラグ付きロード先アドレス管理レジスタ２０４＃１が条件に当てはまるため、同期信号制御部２０３は、同期信号線２０７＃１によって、ＣＰＵ＃１に対して同期信号を通知する。
【００５２】
同期信号の通知後、同期信号制御部２０３は、フラグ付きロード先アドレス管理レジスタ２０４＃０とフラグ付きロード先アドレス管理レジスタ２０４＃１のＶａｌｉｄフィールドの値をＴＲＵＥからＦＡＬＳＥに変更する。また、ＣＰＵ＃１は、同期信号を取得したことにより同期信号待ちを解除し、フラグ１に対応する共有領域に対して排他ロードを行う。
【００５３】
図５は、メモリアクセス制御装置２０２に排他アクセス要求中のＣＰＵが存在しない場合の動作概略を示す説明図である。図５におけるフラグ付きロード先アドレス管理レジスタ２０４と、図４におけるフラグ付きロード先アドレス管理レジスタ２０４とが等しい状態であるところから、図５でのＣＰＵ＃０〜ＣＰＵ＃３の状態は、図４と同じ状態であるので説明を省略する。
【００５４】
このとき、ＣＰＵ＃２が同期信号線２０６＃２によって同期信号を同期信号制御部２０３に通知した場合を想定する。同期信号を取得した同期信号制御部２０３は、フラグ付きロード先アドレス管理レジスタ２０４＃２とアドレスフィールドの値が一致し、Ｖａｌｉｄフィールドに排他ロードを行ったことを示すＴＲＵＥが格納されたレジスタを検出する。図５の状態では、条件に当てはまるフラグ付きロード先アドレス管理レジスタ２０４が存在しないため、同期信号制御部２０３は、ＣＰＵ＃０〜ＣＰＵ＃３のいずれのＣＰＵにも同期信号を通知しない。
【００５５】
また、同期信号制御部２０３は、フラグ付きロード先アドレス管理レジスタ２０４＃２のＶａｌｉｄフィールドの値をＴＲＵＥからＦＡＬＳＥに変更する。前述のように、図４、図５におけるメモリアクセス制御装置２０２の動作は、排他アクセスによって発生しており、同期信号制御部２０３は、排他アクセスによって発生する同期信号制御処理を実行する。
【００５６】
図６は、メモリアクセス制御装置２０２にＶａｌｉｄ情報が設定されていない場合の動作概略を示す説明図である。図６のフラグ付きロード先アドレス管理レジスタ２０４と、図４のフラグ付きロード先アドレス管理レジスタ２０４とが等しい状態であるところから、図６でのＣＰＵ＃０〜ＣＰＵ＃３の状態は、図４と同じ状態であるので説明を省略する。
【００５７】
このとき、ＣＰＵ＃３が同期信号線２０６＃３によって同期信号を同期信号制御部２０３に出力した場合を想定する。同期信号を取得した同期信号制御部２０３は、フラグ付きロード先アドレス管理レジスタ２０４＃３のＶａｌｉｄフィールドに、ＴＲＵＥが格納されてないため、排他アクセス以外の目的での同期信号であると判断する。同期信号制御部２０３は、ＶａｌｉｄフィールドにＴＲＵＥが格納されていないレジスタを検索し、レジスタが見つかった場合には、対応するＣＰＵに同期信号を通知する。図６の状態では、条件に当てはまるフラグ付きロード先アドレス管理レジスタ２０４が存在しないため、同期信号制御部２０３は、ＣＰＵ＃０〜ＣＰＵ＃３のいずれのＣＰＵにも同期信号を通知しない。
【００５８】
また、排他アクセス以外の目的で同期信号が通知されるケースとして、たとえば、複数のＣＰＵで分散実行されている処理について、複数のＣＰＵの処理がすべて終わったのを確認できた後に、次の処理に移行する場合が存在する。各ＣＰＵは、複数のＣＰＵでの処理が終わるまで待ち合わせ処理となるバリア同期処理を実行する。
【００５９】
たとえば、ＣＰＵ＃１とＣＰＵ＃３にて分散処理を行っており、両ＣＰＵの処理が終了した場合に、次の処理に移行する場合を想定する。もしＣＰＵ＃１が先に処理を終了した場合、メモリの内容などからＣＰＵ＃３がまだ実行中であることを判断し、同期信号待ち命令を発行する。このとき、フラグ付きロード先アドレス管理レジスタ２０４＃１は、排他ロードを行っていないため、Ｖａｌｉｄフィールドには値が格納されていない。続けて、ＣＰＵ＃３が処理を終了した場合は、メモリの内容などからＣＰＵ＃１が既に完了済みであることを判断し、同期信号をメモリアクセス制御装置２０２に通知する。
【００６０】
同期信号を受けたメモリアクセス制御装置２０２は、フラグ付きロード先アドレス管理レジスタ２０４＃３のＶａｌｉｄフィールドにＴＲＵＥが格納されてないため、排他アクセス以外の目的での同期信号であると判断し、ＣＰＵ＃１に同期信号を通知する。これにより、ＣＰＵ＃１は同期信号待ちから復帰し、ＣＰＵ＃１、ＣＰＵ＃３共に、次の処理に進むことができる。
【００６１】
前述のように、図６のメモリアクセス制御装置２０２の動作は、排他アクセス以外によって発生しており、この際の同期信号制御部２０３は、排他アクセス以外によって発生する同期信号制御処理を実行する。
【００６２】
図７は、実施の形態１にかかるメモリアクセス制御装置２０２の配線の様子を示した説明図である。図７で示すメモリアクセス制御装置２０２は、図４と図５で示した動作を行う。排他アクセス部２０５は、バスＩ／Ｆ７０１を通して、排他ロード命令、排他ストア命令を受け付け、また、共有メモリ２０１へのアクセスを行う。排他アクセス部２０５からフラグ付きロード先アドレス管理レジスタ２０４への値の更新が設定部３０１の機能に相当する。セレクタ７０２は、同期信号線２０６＃０〜同期信号線２０６＃３のいずれかから同期信号が通知されると、対応したアドレスフィールドの値を出力する。たとえば、同期信号線２０６＃０から同期信号が通知されると、セレクタ７０２は、フラグ付きロード先アドレス管理レジスタ２０４＃０のアドレスフィールドの値を出力する。
【００６３】
アドレスマッチブロック７０３は、セレクタ７０２から出力された値とフラグ付きロード先アドレス管理レジスタ２０４のアドレスフィールドを比較し、ＴＲＵＥかＦＡＬＳＥを出力する。セレクタ７０２とアドレスマッチブロック７０３とが分類部３０２の機能に相当する。具体的には、アドレスマッチブロック７０３は、出力された値とフラグ付きロード先アドレス管理レジスタ２０４のアドレスフィールドが一致すれば、ＴＲＵＥを出力する。ＴＲＵＥが出力された場合、該当のＣＰＵは第１のグループに属することになる。また、アドレスマッチブロック７０３は、出力された値とフラグ付きロード先アドレス管理レジスタ２０４のアドレスフィールドが異なれば、ＦＡＬＳＥを出力する。ＦＡＬＳＥが出力された場合、該当のＣＰＵは第２のグループに属することになる。
【００６４】
たとえば、アドレスマッチブロック７０３＃０は、セレクタ７０２から出力された値とフラグ付きロード先アドレス管理レジスタ２０４＃０のアドレスフィールドを比較し、ＴＲＵＥかＦＡＬＳＥを出力する。
【００６５】
ＡＮＤ回路７０４は、アドレスマッチブロック７０３から出力された値とＶａｌｉｄフィールドの値が共にＴＲＵＥであるときに、ＴＲＵＥを出力する。たとえば、ＡＮＤ回路７０４＃０は、アドレスマッチブロック７０３＃０から出力された値とフラグ付きロード先アドレス管理レジスタ２０４＃０のＶａｌｉｄフィールドの値が共にＴＲＵＥであるときに、ＴＲＵＥを出力する。Ｖａｌｉｄ消去ブロック７０５は、ＴＲＵＥの信号を受けると、ＶａｌｉｄフィールドをＦＡＬＳＥに設定する。
【００６６】
セレクタ７０６は、同期信号線２０６＃０〜同期信号線２０６＃３のいずれかから通知を受けた同期信号線２０６に応じて、対応したＶａｌｉｄフィールドの値を出力する。ＡＮＤ回路７０４とセレクタ７０６が検出部３０３の機能に相当する。たとえば、同期信号線２０６＃０から同期信号が通知されると、セレクタ７０６は、フラグ付きロード先アドレス管理レジスタ２０４＃０のＶａｌｉｄフィールドの値を出力する。同期信号が通知され、Ｖａｌｉｄフィールドの値がＴＲＵＥであるときに、該当のＣＰＵが、排他アクセスが完了したＣＰＵとして検出されたことになる。
【００６７】
ＡＮＤ回路７０７は、ＡＮＤ回路７０４とセレクタ７０６から出力された値が共にＴＲＵＥであり、同期信号線２０６＃０〜同期信号線２０６＃３の、対応する同期信号線２０６から同期信号の通知が無いときに、ＴＲＵＥを出力する。ＡＮＤ回路７０７が通知部３０４の機能に相当する。ＡＮＤ回路７０７の出力値がＴＲＵＥの場合に、該当のＣＰＵは排他アクセスの待機中であったことになり、ＡＮＤ回路７０７は、同期信号線２０７＃０〜同期信号線２０７＃３の該当のＣＰＵに対応する同期信号線２０７から同期信号を通知する。たとえば、ＡＮＤ回路７０７＃０は、ＡＮＤ回路７０４＃０とセレクタ７０６から出力された値が共にＴＲＵＥであり、同期信号線２０６＃０から同期信号の通知が無いときに、同期信号線２０７＃０に同期信号を通知する。
【００６８】
図８は、実施の形態１にかかる排他アクセス部２０５による排他ロード処理を示すフローチャートである。また、図８〜図１０、図１３Ａ、図１３Ｂ、図１４では、各フィールドに１が設定されているときをＴＲＵＥと表現し、０が設定されている場合、ＦＡＬＳＥと表現する。また、図８〜図１０におけるＶａｌｉｄ［ｘ］、タグ［ｘ］、アドレス［ｘ］という表記は、フラグ付きロード先アドレス管理レジスタ２０４＃ｘのＶａｌｉｄフィールド、タグフィールド、アドレスフィールドを示す。
【００６９】
メモリアクセス制御装置２０２は、ＣＰＵ＃０〜ＣＰＵ＃３のいずれかから、＃ａｄｒに対する排他ロード要求を受け付ける（ステップＳ８０１）。なお、＃ａｄｒは、共有メモリ２０１内の共有領域に対応するフラグである。
【００７０】
受け付けた後、メモリアクセス制御装置２０２は、変数ｘに排他ロード要求元のＣＰＵＩＤを設定する（ステップＳ８０２）。たとえば、メモリアクセス制御装置２０２は、ＣＰＵ＃０から排他ロード要求を受け付けた場合は変数ｘに０を設定し、ＣＰＵ＃３から排他ロード要求を受け付けた場合は変数ｘに３を設定する。変数ｘに値を設定後、メモリアクセス制御装置２０２は、アドレス［ｘ］に＃ａｄｒを格納し（ステップＳ８０３）、Ｖａｌｉｄ［ｘ］にＴＲＵＥを格納し（ステップＳ８０４）、タグ［ｘ］にＦＡＬＳＥを格納する（ステップＳ８０５）。
【００７１】
メモリアクセス制御装置２０２は、変数ｙに０を設定する（ステップＳ８０６）。設定後、メモリアクセス制御装置２０２は、アドレス［ｙ］の値が＃ａｄｒであり、かつタグ［ｙ］の値がＴＲＵＥであるかを判断する（ステップＳ８０７）。アドレス［ｙ］の値が＃ａｄｒでない、またはタグ［ｙ］の値がＦＡＬＳＥである場合（ステップＳ８０７：Ｎｏ）、メモリアクセス制御装置２０２は、変数ｙをインクリメントする（ステップＳ８０８）。続けて、メモリアクセス制御装置２０２は、変数ｙがＣＰＵ数より小さいかを判断する（ステップＳ８０９）。変数ｙがＣＰＵ数より小さい場合（ステップＳ８０９：Ｙｅｓ）、メモリアクセス制御装置２０２は、ステップＳ８０７の処理に移行する。
【００７２】
変数ｙがＣＰＵ数以上である場合（ステップＳ８０９：Ｎｏ）、メモリアクセス制御装置２０２は、タグ［ｘ］にＴＲＵＥを設定する（ステップＳ８１０）。設定後、メモリアクセス制御装置２０２は、＃ａｄｒに対応する共有領域をロードし（ステップＳ８１１）、排他ロード処理を終了する。また、アドレス［ｙ］の値が＃ａｄｒであり、かつタグ［ｙ］の値がＴＲＵＥである場合（ステップＳ８０７：Ｙｅｓ）、メモリアクセス制御装置２０２は、ステップＳ８１１の処理に移行する。なお、ステップＳ８１０の処理を行った状態が、排他ストア権を取得できた状態で、ステップＳ８０７：Ｙｅｓの処理を行った状態が、排他ストア権の取得に失敗した状態である。
【００７３】
図９は、実施の形態１にかかる排他アクセス部２０５による排他ストア処理を示すフローチャートである。メモリアクセス制御装置２０２は、ＣＰＵ＃０〜ＣＰＵ＃３のいずれかから、＃ａｄｒに対する排他ストア要求を受け付ける（ステップＳ９０１）。受け付けた後、メモリアクセス制御装置２０２は、変数ｘに排他ストア要求元のＣＰＵＩＤを設定する（ステップＳ９０２）。
【００７４】
設定後、メモリアクセス制御装置２０２は、アドレス［ｘ］の値が＃ａｄｒであり、かつタグ［ｘ］の値がＴＲＵＥであるかを判断する（ステップＳ９０３）。アドレス［ｘ］の値が＃ａｄｒであり、かつタグ［ｘ］の値がＴＲＵＥである場合（ステップＳ９０３：Ｙｅｓ）、メモリアクセス制御装置２０２は、タグ［ｘ］にＦＡＬＳＥを設定する（ステップＳ９０４）。設定後、メモリアクセス制御装置２０２は、＃ａｄｒに対応する共有領域をストアし、ストア成功の情報をＣＰＵ＃ｘに送信し（ステップＳ９０５）、排他ストア処理を終了する。アドレス［ｘ］の値が＃ａｄｒでないか、またはタグ［ｘ］の値がＦＡＬＳＥである場合（ステップＳ９０３：Ｎｏ）、メモリアクセス制御装置２０２は、排他ストアに失敗したと判断し、排他ストア処理を終了する。
【００７５】
図１０は、実施の形態１にかかる同期信号制御処理を示すフローチャートである。メモリアクセス制御装置２０２は、同期信号線２０６＃０〜同期信号線２０６＃３のいずれかから、同期信号を受け付ける（ステップＳ１００１）。同期信号を受け付けた後、メモリアクセス制御装置２０２は、変数ｘに同期信号の通知元のＣＰＵＩＤを設定する（ステップＳ１００２）。具体的には、メモリアクセス制御装置２０２は、同期信号線２０６＃０から同期信号を受け付けた場合に変数ｘに０を設定し、同期信号線２０６＃０から同期信号を受け付けた場合には変数ｘに３を設定する。
【００７６】
設定後、メモリアクセス制御装置２０２は、Ｖａｌｉｄ［ｘ］の値がＴＲＵＥか否かを判断する（ステップＳ１００３）。Ｖａｌｉｄ［ｘ］の値がＴＲＵＥである場合（ステップＳ１００３：Ｙｅｓ）、メモリアクセス制御装置２０２は、Ｖａｌｉｄ［ｘ］にＦＡＬＳＥを設定する（ステップＳ１００４）。なお、ステップＳ１００３：Ｙｅｓのルートが、図４、図５にて前述した排他アクセスによって発生する同期信号制御処理となる。続けて、メモリアクセス制御装置２０２は、変数ｙに０を設定し（ステップＳ１００５）、アドレス［ｙ］の値がアドレス［ｘ］の値と等しく、かつ、Ｖａｌｉｄ［ｙ］の値がＴＲＵＥか否かを判断する（ステップＳ１００６）。
【００７７】
アドレス［ｙ］の値がアドレス［ｘ］の値と等しく、かつＶａｌｉｄ［ｙ］の値がＴＲＵＥである場合（ステップＳ１００６：Ｙｅｓ）、メモリアクセス制御装置２０２は、ＣＰＵ＃ｙへ同期信号を通知する（ステップＳ１００７）。ＣＰＵ＃ｙに同期信号を通知する際には、ＣＰＵ＃ｙに対応した同期信号線２０７に対して同期信号を通知する。たとえば、メモリアクセス制御装置２０２は、ｙが０であれば同期信号線２０７＃０に対して同期信号を通知し、ｙが３であれば同期信号線２０７＃３に対して同期信号を通知する。なお、メモリアクセス制御装置２０２がステップＳ１００６：Ｙｅｓのルートを処理する場合、ＣＰＵ＃ｙは、排他アクセスを要求した第１のグループに属し、排他アクセスが待機中であるＣＰＵとなる。
【００７８】
同期信号を通知後、メモリアクセス制御装置２０２は、Ｖａｌｉｄ［ｙ］をＦＡＬＳＥに設定する（ステップＳ１００８）。設定後、メモリアクセス制御装置２０２は、変数ｙをインクリメントし（ステップＳ１００９）、変数ｙがＣＰＵ数以上かを判断する（ステップＳ１０１０）。変数ｙがＣＰＵ数未満の場合（ステップＳ１０１０：Ｎｏ）、メモリアクセス制御装置２０２は、ステップＳ１００６の処理に移行する。
【００７９】
アドレス［ｙ］の値がアドレス［ｘ］の値と等しくなく、または、Ｖａｌｉｄ［ｙ］の値がＦＡＬＳＥである場合（ステップＳ１００６：Ｎｏ）、メモリアクセス制御装置２０２は、ステップＳ１００９の処理に移行する。なお、メモリアクセス制御装置２０２がステップＳ１００６：Ｎｏのルートを処理する場合、ＣＰＵ＃ｘ以外のＣＰＵ＃ｙは、排他アクセスを要求していない第２のグループに属することになる。
【００８０】
Ｖａｌｉｄ［ｘ］の値がＦＡＬＳＥである場合（ステップＳ１００３：Ｎｏ）、メモリアクセス制御装置２０２は、変数ｙに０を設定し（ステップＳ１０１１）、Ｖａｌｉｄ［ｙ］の値がＦＡＬＳＥかを判断する（ステップＳ１０１２）。なお、ステップＳ１００３：Ｎｏのルートが、図６にて前述した排他アクセスによって発生する同期信号制御処理となる。Ｖａｌｉｄ［ｙ］の値がＦＡＬＳＥである場合（ステップＳ１０１２：Ｙｅｓ）、メモリアクセス制御装置２０２は、ＣＰＵ＃ｙへ同期信号を通知する（ステップＳ１０１３）。
【００８１】
同期信号通知後、または、Ｖａｌｉｄ［ｙ］の値がＴＲＵＥである場合（ステップＳ１０１２：Ｎｏ）、メモリアクセス制御装置２０２は、変数ｙをインクリメントし（ステップＳ１０１４）、変数ｙがＣＰＵ数以上かを判断する（ステップＳ１０１５）。変数ｙがＣＰＵ数未満である場合（ステップＳ１０１５：Ｎｏ）、メモリアクセス制御装置２０２は、ステップＳ１０１２の処理に移行する。
【００８２】
変数ｙがＣＰＵ数以上である場合（ステップＳ１０１０：Ｙｅｓ、ステップＳ１０１５：Ｙｅｓ）、メモリアクセス制御装置２０２は、同期信号制御処理を終了する。
【００８３】
以上説明したように、メモリアクセス制御装置、メモリアクセス制御方法、およびメモリアクセス制御プログラムによれば、マルチコアを排他アクセス要求を行った第１のグループと、行っていない第２のグループとに分ける。続けて、メモリアクセス制御装置は、排他アクセス完了のコアを検出時に、排他アクセス要求を行って待機中のコアを待機解除する。これにより、メモリアクセス制御装置は、待機中ではあるが排他アクセス要求の無いコアを待機解除によって起動させずに済み、不要なメモリアクセスを抑えることができ、消費電力を低下させることができる。
【００８４】
また、メモリアクセス制御装置は、マルチコアを特定の領域に対する排他アクセス要求を行った第１のグループと、行っていない第２のグループに分けてもよい。これにより、メモリアクセス制御装置は、他の領域に対してアクセス要求を行い待機中のコアを待機解除によって起動させずに済み、消費電力を低下させることができる。
【００８５】
また、メモリアクセス制御装置は、第１のグループのうち、排他アクセスが完了したコアを除いた残余のコアに対し待機解除を通知してもよい。排他アクセスが完了したコアは、待機解除中でないため、同期信号が通知されても問題とならないが、同期信号が入力されたという情報はコア内に保持される。したがって、排他アクセスが完了したコアが、今後新たにスピンロックを行い、同期待ち命令を発行した際に一旦同期待ちが解除されてしまう。実施の形態１にかかるメモリアクセス制御装置では、排他アクセスが完了したコアを除いた残余のコアに対し待機解除を通知することで、排他アクセスが完了したコアの同期待ちが解除されてしまうのを防ぐことができ、消費電力を低下させることができる。
【００８６】
また、メモリアクセス制御装置は、第１のグループのコアのうち待機解除を通知したコアを、排他アクセスが完了したコアとして検出してもよい。これにより、メモリアクセス制御装置は、ＣＰＵからの同期信号の通知と連動して、排他アクセス要求を行って待機中のコアを待機解除できる。
【００８７】
また、メモリアクセス制御装置は、第２のグループのコアのうち、待機解除を通知したコアを検出し、第２のグループのうち待機解除を通知したコアを除いた残余のコアに対し待機解除を通知してもよい。これにより、メモリアクセス制御装置は、排他アクセス以外によって待機中のコアに対し待機解除でき、排他アクセス要求を行って待機中のコアを待機解除によって起動させずに済み、消費電力を低下させることができる。
【００８８】
（実施の形態２の概要説明）
図１１は、実施の形態２にかかるマルチコアプロセッサシステム１００におけるＣＰＵとメモリアクセス制御装置の関係を示す説明図である。実施の形態１では、メモリアクセス制御装置２０２にて、同期信号制御処理を行っていたが、実施の形態２では、ＣＰＵ＃０〜ＣＰＵ＃３によって同期信号制御処理を行う。図１１で示されるハードウェアは、共有メモリ２０１と、メモリアクセス制御装置１１０１と、同期信号通知装置１１０２と、ＣＰＵｓ１０１に含まれるＣＰＵ＃０〜ＣＰＵ＃３とである。メモリアクセス制御装置１１０１と、ＣＰＵ＃０〜ＣＰＵ＃３はバス１１０によって接続されている。
【００８９】
ＣＰＵ＃０〜ＣＰＵ＃３は、バス１１０以外にも、同期信号線１１０４にて同期信号通知装置１１０２に接続している。具体的には、同期信号通知装置１１０２は、同期信号線１１０４＃０によってＣＰＵ＃０に対し同期信号を通知する。同様に、同期信号通知装置１１０２は、同期信号線１１０４＃１〜同期信号線１１０４＃３によってＣＰＵ＃１〜ＣＰＵ＃３に対し同期信号を通知する。
【００９０】
メモリアクセス制御装置１１０１は、従来例による排他アクセス機構を有しており、ＣＰＵ＃０〜ＣＰＵ＃３に対して共有メモリ２０１への排他アクセスの機能を提供する装置である。排他アクセスの機能は、排他ロード命令と排他ストア命令とを有する。
【００９１】
同期信号通知装置１１０２は、ＣＰＵ＃０〜ＣＰＵ＃３のいずれかの同期信号通知依頼によって、同期信号を通知する機能を有する。たとえば、同期信号通知装置１１０２は、ＣＰＵ＃０から、ＣＰＵ＃３への同期信号通知依頼を受け取ると、同期信号線１１０４＃３によってＣＰＵ＃３へ同期信号を通知する。
【００９２】
また、共有メモリ２０１内には、フラグ付きロード先アドレステーブル１１０３が格納されている。テーブルは、ＣＰＵ、Ｖａｌｉｄ、アドレスという３つのフィールドを有する。ＣＰＵフィールドは、フラグ付きロード先アドレステーブル１１０３のレコードに対応するＣＰＵＩＤを格納する。フラグ付きロード先アドレステーブル１１０３のＶａｌｉｄフィールドとアドレスフィールド詳細は、フラグ付きロード先アドレス管理レジスタ２０４のＶａｌｉｄフィールドとアドレスフィールドと等しいため、説明を省略する。
【００９３】
具体的に、フラグ付きロード先アドレステーブル１１０３では、ＣＰＵ＃０とＣＰＵ＃１は、フラグ１に対応する共有領域に排他ロード要求を行った状態を示している。ＣＰＵ＃２は、フラグ１に対応する共有領域に排他ロード要求を行った状態を示している。ＣＰＵ＃３は、フラグ１に対応する共有領域の排他ストアが完了した後の状態を示している。
【００９４】
（マルチコアプロセッサシステム１００の機能）
図１２は、実施の形態２にかかるマルチコアプロセッサシステム１００の機能を示したブロック図である。マルチコアプロセッサシステム１００は、排他アクセス部１２０１と、同期信号制御部１２０３と、を有する。同期信号制御部１２０３は、記憶装置に記憶されたプログラムをＣＰＵ＃０〜ＣＰＵ＃３が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４、フラッシュＲＯＭ１０６などである。
【００９５】
また、同期信号制御部１２０３は、設定部１２０４と、判断部１２０５と、検出部１２０６と、通知依頼部１２０７と、を有する。また、図１２の表示では、同期信号制御部１２０３は、ＣＰＵ＃０の機能に含まれているが、すべてのＣＰＵであるＣＰＵ＃０〜ＣＰＵ＃３の機能に含まれていてもよい。
【００９６】
排他アクセス部１２０１は、排他ロード命令と排他ストア命令がＣＰＵ＃０〜ＣＰＵ＃３から発行された場合に、ロード先アドレス管理レジスタ１２０２に基づいて排他ロード処理と排他ストア処理を実行する機能を有する。
【００９７】
ロード先アドレス管理レジスタ１２０２は、排他アクセス部１２０１によってアクセスされるレジスタ群である。ロード先アドレス管理レジスタ１２０２は、ＣＰＵごとに、タグフィールド、アドレスフィールドを有する。タグフィールド、アドレスフィールドの詳細については、フラグ付きロード先アドレス管理レジスタ２０４の同名のフィールドと等しいため、説明は省略する。
【００９８】
同期信号制御部１２０３は、それぞれのＣＰＵにて実行中のソフトウェアによる待機解除の要求とフラグ付きロード先アドレステーブル１１０３とに基づいて、同期信号の通知先を制御する、同期信号制御処理を実行する。同期信号制御処理の実行後、同期信号が同期信号通知装置１１０２の同期信号線１１０４＃０〜同期信号線１１０４＃３から通知される。
【００９９】
設定部１２０４は、フラグ付きロード先アドレステーブル１１０３の値を更新する機能を有する。たとえば、設定部１２０４は、ＣＰＵ＃０にて実行中のソフトウェアによって排他ロード処理が実行された際に、フラグ付きロード先アドレステーブル１１０３のＣＰＵ＃０に対応するレコードのＶａｌｉｄフィールドの値をＦＡＬＳＥからＴＲＵＥに設定する。
【０１００】
判断部１２０５は、複数のコアのおのおのが、共有メモリ２０１に対し排他アクセスを要求した第１のグループか、共有メモリ２０１に対し排他アクセスを要求していない第２のグループか、のいずれかのグループに属するかを判断する機能を有する。また、判断部１２０５は、共有メモリ２０１のうち特定の領域に対し排他アクセスを要求したか否かによって、排他アクセスを要求した第１のグループか、排他アクセスを要求していない第２のグループか、のいずれかのグループに属するかを判断してもよい。
【０１０１】
たとえば、ＣＰＵ＃０で実行中の判断部１２０５は、フラグ付きロード先アドレステーブル１１０３のＶａｌｉｄフィールドの値がＴＲＵＥであればＣＰＵ＃０が排他アクセスを要求した第１のグループに属していると判断する。また、判断部１２０５は、値がＦＡＬＳＥであればＣＰＵ＃０が排他アクセスを要求していない第２のグループに属していると判断する。なお、判断結果は、実行中のＣＰＵのレジスタ、キャッシュメモリや、または、ＲＡＭ１０３等に記憶される。
【０１０２】
検出部１２０６は、コアが判断部１２０５によって第１のグループに属すると判断された場合、コアにて排他アクセスが完了したことを検出する機能を有する。また、検出部１２０６は、コアが判断部１２０５によって第１のグループに属すると判断され、コアが実行中のソフトウェアによって待機解除を要求した場合に、コアにて排他アクセスが完了したこととして検出してもよい。
【０１０３】
たとえば、ＣＰＵ＃０で実行中の検出部１２０６は、ＣＰＵ＃０で実行中のソフトウェアによって待機解除要求の発行を検出し、さらに、判断部１２０５によって第１のグループに属する場合、ＣＰＵ＃０にて排他アクセスが完了したことを検出する。なお、検出された結果は、実行中のＣＰＵのレジスタ、キャッシュメモリや、または、ＲＡＭ１０３等に記憶される。
【０１０４】
また、検出部１２０６は、コアが判断部１２０５によって第２のグループに属すると判断された場合、コアが実行中のソフトウェアによって待機解除を要求したことを検出してもよい。たとえば、検出部１２０６は、ＣＰＵ＃０が実行中のソフトウェアによって待機解除要求の発行を検出し、さらに判断部１２０５によって第２のグループに属する場合に、ＣＰＵ＃０を待機解除を通知したＣＰＵとして検出する。
【０１０５】
通知依頼部１２０７は、検出部１２０６によって排他アクセスが完了したコアが検出された場合、第１のグループのうち排他アクセスが待機中であるコアに対し待機解除の通知を依頼する機能を有する。また、通知依頼部１２０７は、検出部１２０６によって排他アクセスが完了したコアが検出された場合、第１のグループのうち、排他アクセスが完了したコアを除いた残余のコアに対し待機解除の通知を依頼してもよい。
【０１０６】
たとえば、通知依頼部１２０７は、排他アクセスが完了したＣＰＵとしてＣＰＵ＃０が検出された場合に、Ｖａｌｉｄフィールドの値がＴＲＵＥであるＣＰＵのグループに対して同期信号を通知するように同期信号通知装置１１０２に依頼する。
【０１０７】
また、通知依頼部１２０７は、検出部１２０６によって第２のグループのうち待機解除を要求したコアが検出された場合、第２のグループのうち待機解除を要求したコアを除いた残余のコアに対し待機解除の通知を依頼してもよい。
【０１０８】
たとえば、検出部１２０６が、待機解除を通知したＣＰＵがＣＰＵ＃１であり、第２のグループとして、ＶａｌｉｄフィールドがＦＡＬＳＥであるＣＰＵ＃１とＣＰＵ＃３を検出した状態を想定する。前述の状態で、通知依頼部１２０７は、第２のグループのうち、ＣＰＵ＃１を除いたＣＰＵ＃３に対し同期信号を通知するように同期信号通知装置１１０２に依頼する。なお、依頼した結果は実行中のＣＰＵのレジスタ、キャッシュメモリや、または、ＲＡＭ１０３等に記憶されてもよい。
【０１０９】
図１３Ａ、図１３Ｂは、実施の形態２にかかる排他アクセスによって発生する同期信号制御処理を示すフローチャートである。同期信号制御処理は、ＣＰＵ＃０〜ＣＰＵ＃３のどのＣＰＵでも実行される。図１３Ａ、図１３Ｂ、図１４の説明では、ＣＰＵ＃０〜ＣＰＵ＃３のうち、任意のＣＰＵ＃ｘが同期信号制御処理を実行した場合を想定して説明を行う。また、Ｖａｌｉｄ［ｘ］、アドレス［ｘ］という表記は、フラグ付きロード先アドレステーブル１１０３から、ＣＰＵフィールドがＣＰＵ＃ｘであるレコードのＶａｌｉｄフィールド、アドレスフィールドを示す。
【０１１０】
ＣＰＵ＃ｘは、＃ａｄｒに対する排他ロード要求を行う（ステップＳ１３０１）。たとえば、ＣＰＵ＃ｘにて実行中のソフトウェアによって、排他アクセス要求を行うと、ライブラリとして埋め込まれた同期信号制御処理が実行される。
【０１１１】
排他ロード要求後、ＣＰＵ＃ｘは、フラグ付きロード先アドレステーブル１１０３のＣＰＵ＃ｘレコードに、＃ａｄｒとＶａｌｉｄを設定する（ステップＳ１３０２）。具体的には、変数ｘが２であれば、ＣＰＵ＃ｘは、ＣＰＵフィールドがＣＰＵ＃２のレコードを選択し、ＶａｌｉｄフィールドにＴＲＵＥを設定し、アドレスフィールドに＃ａｄｒを設定する。設定後、ＣＰＵ＃ｘは、メモリアクセス制御装置１１０１に排他ロード要求を行う（ステップＳ１３０３）。
【０１１２】
排他ロード要求後、ＣＰＵ＃ｘは、排他ロードに成功したかを判断する（ステップＳ１３０４）。失敗した場合（ステップＳ１３０４：Ｎｏ）、ＣＰＵ＃ｘは、同期信号待ち命令を発行する（ステップＳ１３０７）。同期信号待ち命令を発行すると、ＣＰＵ＃ｘは同期信号が通知されるまで待機する。同期信号が通知されると、ＣＰＵ＃ｘは、ステップＳ１３０１の処理に移行する。排他ロードに成功した場合（ステップＳ１３０４：Ｙｅｓ）、ＣＰＵ＃ｘは、メモリアクセス制御装置１１０１に排他ストア要求を行う（ステップＳ１３０５）。
【０１１３】
排他ストア要求後、ＣＰＵ＃ｘは、排他ストアに成功したかを判断する（ステップＳ１３０６）。排他ストアに失敗した場合（ステップＳ１３０６：Ｎｏ）、ＣＰＵ＃ｘは、ステップＳ１３０７の処理に移行する。排他ストアに成功した場合（ステップＳ１３０６：Ｙｅｓ）、ＣＰＵ＃ｘは、＃ａｄｒにアクセスする（ステップＳ１３０８）。
【０１１４】
アクセス後、ＣＰＵ＃ｘは、Ｖａｌｉｄ［ｘ］にＦＡＬＳＥを設定する（ステップＳ１３０９）。設定後、ＣＰＵ＃ｘは、変数ｙに０を設定し（ステップＳ１３１０）、フラグ付きロード先アドレステーブル１１０３のＣＰＵ＃ｙレコードから、Ｖａｌｉｄ［ｙ］の値とアドレス［ｙ］の値を取得する（ステップＳ１３１１）。
【０１１５】
取得後、ＣＰＵ＃ｘは、アドレス［ｙ］の値とアドレス［ｘ］の値が等しく、かつ、Ｖａｌｉｄ［ｙ］の値がＴＲＵＥであるかを判断する（ステップＳ１３１２）。アドレス［ｙ］の値とアドレス［ｘ］の値が等しく、かつ、Ｖａｌｉｄ［ｙ］の値がＴＲＵＥである場合（ステップＳ１３１２：Ｙｅｓ）、ＣＰＵ＃ｘは、ＣＰＵ＃ｙを同期信号通知先として選択する（ステップＳ１３１３）。なお、ＣＰＵ＃ｘがステップＳ１３１２：Ｙｅｓのルートを処理する場合、ＣＰＵ＃ｙは、排他アクセスを要求した第１のグループに属し、排他アクセスが待機中であるＣＰＵとなる。
【０１１６】
選択後、ＣＰＵ＃ｘは、変数ｙをインクリメントし（ステップＳ１３１４）、変数ｙがＣＰＵ数以上かを判断する（ステップＳ１３１５）。変数ｙがＣＰＵ数未満である場合（ステップＳ１３１５：Ｎｏ）、ＣＰＵ＃ｘは、ステップＳ１３１１の処理に移行する。アドレス［ｙ］の値とアドレス［ｘ］の値が等しく無い、または、Ｖａｌｉｄ［ｙ］の値がＦＡＬＳＥである場合（ステップＳ１３１２：Ｎｏ）、ＣＰＵ＃ｘは、ステップＳ１３１４の処理に移行する。なお、ＣＰＵ＃ｘがステップＳ１３１２：Ｎｏのルートを処理する場合、ＣＰＵ＃ｘ以外のＣＰＵ＃ｙは、排他アクセスを要求していない第２のグループに属することになる。
【０１１７】
変数ｙがＣＰＵ数以上である場合（ステップＳ１３１５：Ｙｅｓ）、ＣＰＵ＃ｘは、フラグ付きロード先アドレステーブル１１０３の選択したＣＰＵのＶａｌｉｄフィールドをＦＡＬＳＥに設定する（ステップＳ１３１６）。設定後、ＣＰＵ＃ｘは、同期信号通知装置１１０２に通知先情報を書き込み（ステップＳ１３１７）、同期信号制御処理を終了する。
【０１１８】
図１４は、実施の形態２にかかる排他アクセス以外によって発生する同期信号制御処理を示すフローチャートである。ＣＰＵ＃ｘは、待機解除の要求を検出する（ステップＳ１４０１）。たとえば、ＣＰＵ＃ｘにて実行中のソフトウェアによって待機解除の要求を行うと、ライブラリとして埋め込まれた同期信号制御処理が実行される。検出後、ＣＰＵ＃ｘは、変数ｘに検出元ＣＰＵＩＤを設定する（ステップＳ１４０２）。検出元ＣＰＵは、同期信号制御処理を実行しているＣＰＵと一致する。設定後、ＣＰＵ＃ｘは、Ｖａｌｉｄ［ｘ］の値がＦＡＬＳＥか否かを判断する（ステップＳ１４０３）。
【０１１９】
Ｖａｌｉｄ［ｘ］の値がＦＡＬＳＥである場合（ステップＳ１４０３：Ｙｅｓ）、ＣＰＵ＃ｘは、変数ｙに０を設定し（ステップＳ１４０４）、Ｖａｌｉｄ［ｙ］の値がＦＡＬＳＥか否かを判断する（ステップＳ１４０５）。Ｖａｌｉｄ［ｙ］の値がＦＡＬＳＥである場合（ステップＳ１４０５：Ｙｅｓ）、ＣＰＵ＃ｘは、ＣＰＵ＃ｙを同期信号通知先として選択する（ステップＳ１４０６）。
【０１２０】
ステップＳ１４０６の処理の終了後、または、Ｖａｌｉｄ［ｙ］の値がＦＡＬＳＥである場合（ステップＳ１４０５：Ｎｏ）、ＣＰＵ＃ｘは、変数ｙをインクリメントし（ステップＳ１４０７）、変数ｙがＣＰＵ数以上かを判断する（ステップＳ１４０８）。変数ｙがＣＰＵ数未満の場合（ステップＳ１４０８：Ｎｏ）、ＣＰＵ＃ｘは、ステップＳ１４０５の処理に移行する。変数ｙがＣＰＵ数以上である場合（ステップＳ１４０８：Ｙｅｓ）、ＣＰＵ＃ｘは、同期信号通知装置１１０２に通知先情報を書き込みし（ステップＳ１４０９）、排他アクセス以外によって発生する同期信号制御処理を終了する。
【０１２１】
Ｖａｌｉｄ［ｘ］の値がＴＲＵＥである場合（ステップＳ１４０３：Ｎｏ）、ＣＰＵ＃ｘは、排他アクセス以外によって発生する同期信号制御処理を終了する。なお、ステップＳ１４０３：Ｎｏである場合、排他アクセスによって同期信号制御処理が発生したことになるため、ＣＰＵ＃ｘは、ステップＳ１４０３：Ｎｏの後、ステップＳ１３０９の処理に移行し、処理を続行してもよい。
【０１２２】
以上説明したように、マルチコアプロセッサシステム、メモリアクセス制御方法、およびメモリアクセス制御プログラムによれば、マルチコアのおのおのが共有メモリに対し排他アクセスを要求した第１のグループと、そうでない第２のグループの、どちらに属するかを判断する。続けて、マルチコアプロセッサシステムは、第１のグループに属すると判断されたコアが、排他アクセスが完了したことを検出した場合、排他アクセスが待機中のコアに対し待機解除を通知する。これにより、マルチコアプロセッサシステムは、待機中ではあるが排他アクセス要求の無いコアを待機解除によって起動させずに済み、不要なメモリアクセスを抑えることができ、消費電力を低下させることができる。
【０１２３】
また、マルチコアプロセッサシステムは、共有メモリのうち特定の領域に対し排他アクセスを要求した第１のグループか、共有メモリのうち特定の領域に対し排他アクセスを要求していない第２のグループか、のいずれかのグループに属するかを判断してもよい。これにより、マルチコアプロセッサシステムは、他の領域に対してアクセス要求を行い待機中のコアを待機解除によって起動させずに済み、消費電力を低下させることができる。
【０１２４】
また、マルチコアプロセッサシステムは、第１のグループのうち、排他アクセスが完了したコアを除いた残余のコアに対し待機解除を通知してもよい。これにより、マルチコアプロセッサシステムは、排他アクセスが完了したコアの同期待ちが解除されてしまうのを防ぐことができ、消費電力を低下させることができる。
【０１２５】
また、マルチコアプロセッサシステムは、第１のグループに属すると判断されたコアが実行中のソフトウェアによって待機解除を要求した場合に、第１のグループに属すると判断されたコアにて排他アクセスが完了したこととして検出してもよい。これにより、マルチコアプロセッサシステムは、待機解除の要求と連動して、排他アクセス要求を行って待機中のコアを待機解除できる。
【０１２６】
また、マルチコアプロセッサシステムは、第２のグループに属すると判断されたコアが実行中のソフトウェアによって待機解除を要求したことを検出し、第２のグループのうち待機解除を要求したコアを除いた残余のコアに対し待機解除を通知してもよい。これにより、マルチコアプロセッサシステムは、排他アクセス以外によって待機中のコアに対し待機解除でき、排他アクセス要求を行って待機中のコアを待機解除によって起動させずに済み、消費電力を低下させることができる。
【０１２７】
なお、本実施の形態で説明したメモリアクセス制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本メモリアクセス制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本メモリアクセス制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１２８】
上述した実施の形態１、２に関し、さらに以下の付記を開示する。
【０１２９】
（付記１）共有メモリにアクセス可能なマルチコアを、前記共有メモリに対し排他アクセスを要求した第１のグループと前記共有メモリに対し前記排他アクセスを要求していない第２のグループとに分類する分類手段と、
前記分類手段によって分類された第１のグループの中から前記排他アクセスが完了したコアを検出する検出手段と、
前記検出手段によって前記排他アクセスが完了したコアが検出された場合、前記第１のグループのうち前記排他アクセスが待機中であるコアに対し待機解除を通知する通知手段と、
を備えることを特徴とするメモリアクセス制御装置。
【０１３０】
（付記２）前記分類手段は、
前記マルチコアを、前記共有メモリのうち特定の領域に対し排他アクセスを要求した第１のグループと前記特定の領域に対し前記排他アクセスを要求していない第２のグループとに分類することを特徴とする付記１に記載のメモリアクセス制御装置。
【０１３１】
（付記３）前記通知手段は、
前記検出手段によって前記排他アクセスが完了したコアが検出された場合、前記第１のグループのうち、前記排他アクセスが完了したコアを除いた残余のコアに対し前記待機解除を通知することを特徴とする付記２に記載のメモリアクセス制御装置。
【０１３２】
（付記４）前記検出手段は、
前記第１のグループのうち前記待機解除を通知したコアを、前記排他アクセスが完了したコアとして検出することを特徴とする付記３に記載のメモリアクセス制御装置。
【０１３３】
（付記５）前記検出手段は、
前記分類手段によって分類された第２のグループのコアのうち前記待機解除を通知したコアを検出し、
前記通知手段は、
前記検出手段によって前記第２のグループのうち前記待機解除を通知したコアが検出された場合、前記第２のグループのうち前記待機解除を通知したコアを除いた残余のコアに対し前記待機解除を通知することを特徴とする付記１に記載のメモリアクセス制御装置。
【０１３４】
（付記６）マルチコアのおのおのが、共有メモリに対し排他アクセスを要求した第１のグループか、前記共有メモリに対し前記排他アクセスを要求していない第２のグループか、のいずれかのグループに属するかを判断する判断手段と、
前記コアが前記判断手段によって第１のグループに属すると判断された場合、前記コアにて前記排他アクセスが完了したことを検出する検出手段と、
前記検出手段によって前記排他アクセスが完了したコアが検出された場合、前記第１のグループのうち前記排他アクセスが待機中であるコアに対し待機解除を通知する通知手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【０１３５】
（付記７）前記判断手段は、
前記マルチコアのおのおのが、前記共有メモリのうち特定の領域に対し排他アクセスを要求した第１のグループか、前記共有メモリのうち特定の領域に対し前記排他アクセスを要求していない第２のグループか、のいずれかのグループに属するかを判断することを特徴とする付記６に記載のマルチコアプロセッサシステム。
【０１３６】
（付記８）前記通知手段は、
前記検出手段によって前記排他アクセスが完了したコアが検出された場合、前記第１のグループのうち、前記排他アクセスが完了したコアを除いた残余のコアに対し前記待機解除を通知することを特徴とする付記７に記載のマルチコアプロセッサシステム。
【０１３７】
（付記９）前記検出手段は、
前記コアが前記判断手段によって第１のグループに属すると判断され、前記コアが実行中のソフトウェアによって前記待機解除を要求した場合に、前記コアにて排他アクセスが完了したこととして検出することを特徴とする付記８に記載のマルチコアプロセッサシステム。
【０１３８】
（付記１０）前記検出手段は、
前記コアが前記判断手段によって第２のグループに属すると判断された場合、前記コアが実行中のソフトウェアによって前記待機解除を要求したことを検出し、
前記通知手段は、
前記検出手段によって、前記第２のグループのうち前記待機解除を要求したコアが検出された場合、前記第２のグループのうち前記待機解除を要求したコアを除いた残余のコアに対し前記待機解除を通知することを特徴とする付記６に記載のマルチコアプロセッサシステム。
【０１３９】
（付記１１）共有メモリとマルチコアとにアクセス可能なコンピュータが、
前記マルチコアを、前記共有メモリに対し排他アクセスを要求した第１のグループと前記共有メモリに対し前記排他アクセスを要求していない第２のグループとに分類する分類工程と、
前記分類工程によって分類された第１のグループの中から前記排他アクセスが完了したコアを検出する検出工程と、
前記検出工程によって前記排他アクセスが完了したコアが検出された場合、前記第１のグループのうち前記排他アクセスが待機中であるコアに対し待機解除を通知する通知工程と、
を実行することを特徴とするメモリアクセス制御方法。
【０１４０】
（付記１２）マルチコアのおのおのが、共有メモリに対し排他アクセスを要求した第１のグループか、前記共有メモリに対し前記排他アクセスを要求していない第２のグループか、のいずれかのグループに属するかを判断する判断工程と、
前記コアが前記判断工程によって第１のグループに属すると判断された場合、前記コアにて前記排他アクセスが完了したことを検出する検出工程と、
前記検出工程によって前記排他アクセスが完了したコアが検出された場合、前記第１のグループのうち前記排他アクセスが待機中であるコアに対し待機解除の通知を依頼する通知依頼工程と、
を前記コアが実行することを特徴とするメモリアクセス制御方法。
【０１４１】
（付記１３）共有メモリとマルチコアとにアクセス可能なコンピュータに、
前記マルチコアを、前記共有メモリに対し排他アクセスを要求した第１のグループと前記共有メモリに対し前記排他アクセスを要求していない第２のグループとに分類する分類工程と、
前記分類工程によって分類された第１のグループの中から前記排他アクセスが完了したコアを検出する検出工程と、
前記検出工程によって前記排他アクセスが完了したコアが検出された場合、前記第１のグループのうち前記排他アクセスが待機中であるコアに対し待機解除を通知する通知工程と、
を実行させることを特徴とするメモリアクセス制御プログラム。
【０１４２】
（付記１４）マルチコアのおのおのが、共有メモリに対し排他アクセスを要求した第１のグループか、前記共有メモリに対し前記排他アクセスを要求していない第２のグループか、のいずれかのグループに属するかを判断する判断工程と、
前記コアが前記判断工程によって第１のグループに属すると判断された場合、前記コアにて前記排他アクセスが完了したことを検出する検出工程と、
前記検出工程によって前記排他アクセスが完了したコアが検出された場合、前記第１のグループのうち前記排他アクセスが待機中であるコアに対し待機解除の通知を依頼する通知依頼工程と、
を前記コアに実行させることを特徴とするメモリアクセス制御プログラム。
【符号の説明】
【０１４３】
＃０〜＃３  ＣＰＵ
１１０  バス
２０１  共有メモリ
２０２  メモリアクセス制御装置
２０３  同期信号制御部
２０４  フラグ付きロード先アドレス管理レジスタ
２０５  排他アクセス部
２０６  同期信号線
２０７  同期信号線
３０１  設定部
３０２  分類部
３０３  検出部
３０４  通知部
１１０１  メモリアクセス制御装置
１１０２  同期信号通知装置
１１０３  フラグ付きロード先アドレステーブル
１１０４  同期信号線
１２０１  排他アクセス部
１２０２  ロード先アドレス管理レジスタ
１２０３  同期信号制御部
１２０４  設定部
１２０５  判断部
１２０６  検出部
１２０７  通知依頼部
【図１】
0005429372.tif 000002
【図２】
0005429372.tif 000003
【図３】
0005429372.tif 000004
【図４】
0005429372.tif 000005
【図５】
0005429372.tif 000006
【図６】
0005429372.tif 000007
【図７】
0005429372.tif 000008
【図８】
0005429372.tif 000009
【図９】
0005429372.tif 000010
【図１０】
0005429372.tif 000011
【図１１】
0005429372.tif 000012
【図１２】
0005429372.tif 000013
【図１３Ａ】
0005429372.tif 000014
【図１３Ｂ】
0005429372.tif 000015
【図１４】
0005429372.tif 000016