(57)【特許請求の範囲】
【請求項１】
複数のコアと、
前記複数のコアで共有する共有キャッシュメモリと、
前記共有キャッシュメモリへのアクセスを制御する制御回路と、
前記共有キャッシュメモリよりもアクセス速度が遅い前記複数のコアで共有する共有メモリと、
を有するマルチコアプロセッサシステムであって、
前記制御回路が、
一つのスレッドのみで参照される非共有データであるか、複数のスレッドで参照される共有データであるかを示す識別情報を含む対象データに関する、前記共有キャッシュメモリへの書き込み要求を受け付け、
前記書き込み要求を受け付けると、前記共有キャッシュメモリに前記対象データを格納可能な空き領域があるか否かを判断し、
前記空き領域がないと判断された場合に、前記対象データが前記共有データであるか、前記非共有データであるかを前記対象データが有する前記識別情報に基づいて判断し、
前記対象データが前記共有データであると判断した場合、前記共有キャッシュメモリに記憶されているデータから、当該各データが有する前記識別情報に基づいて前記非共有データを特定し、特定した非共有データの領域に前記対象データを格納し、
前記対象データが前記非共有データであると判断した場合、前記対象データを前記共有キャッシュメモリに格納せず、前記対象データを前記共有メモリに格納する、
処理を行うことを特徴とするマルチコアプロセッサシステム。
【請求項２】
マルチコアプロセッサの各コアで共有する共有キャッシュメモリへのアクセスを制御する制御回路に、
一つのスレッドのみで参照される非共有データであるか、複数のスレッドで参照される共有データであるかを示す識別情報を含む対象データに関する、前記共有キャッシュメモリへの書き込み要求を受け付け、
前記書き込み要求が受け付けられると、前記共有キャッシュメモリに前記対象データを格納可能な空き領域があるか否かを判断し、
前記空き領域が前記共有キャッシュメモリにないと判断された場合、前記対象データが前記共有データであるか、前記非共有データであるかを前記対象データが有する前記識別情報に基づいて判断し、
前記対象データが前記共有データであると判断した場合、前記共有キャッシュメモリに記憶されているデータから、当該各データが有する前記識別情報に基づいて前記非共有データを特定し、特定した非共有データの領域に前記対象データを格納し、
前記対象データが前記非共有データであると判断した場合、前記対象データを前記共有キャッシュメモリに格納せず、前記対象データを、前記共有キャッシュメモリよりもアクセス速度が遅い前記マルチコアプロセッサの各コアで共有する共有メモリに格納する、
処理を実行させることを特徴とする制御プログラム。
【請求項３】
マルチコアプロセッサの各コアで共有する共有キャッシュメモリへのアクセスを制御する制御回路が、
一つのスレッドのみで参照される非共有データであるか、複数のスレッドで参照される共有データであるかを示す識別情報を含む対象データに関する、前記共有キャッシュメモリへの書き込み要求を受け付け、
前記書き込み要求が受け付けられると、前記共有キャッシュメモリに前記対象データを格納可能な空き領域があるか否かを判断し、
前記空き領域が前記共有キャッシュメモリにないと判断された場合、前記対象データが前記共有データであるか、前記非共有データであるかを前記対象データが有する前記識別情報に基づいて判断し、
前記対象データが前記共有データであると判断した場合、前記共有キャッシュメモリに記憶されているデータから、当該各データが有する前記識別情報に基づいて前記非共有データを特定し、特定した非共有データの領域に前記対象データを格納し、
前記対象データが前記非共有データであると判断した場合、前記対象データを前記共有キャッシュメモリに格納せず、前記対象データを、前記共有キャッシュメモリよりもアクセス速度が遅い前記マルチコアプロセッサの各コアで共有する共有メモリに格納する、
処理を実行させることを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリへのアクセスを制御するマルチコアプロセッサシステム、制御プログラム、および制御方法に関する。
【背景技術】
【０００２】
従来、共有メモリ型のマルチコアプロセッサシステムでは、マルチコアプロセッサのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）ごとに高速小容量の分散キャッシュメモリを有している。さらに、分散キャッシュと共有メモリとの間に１階層以上の中速中容量の共有キャッシュが配置された階層型のキャッシュが知られている。なお、分散キャッシュが最もＣＰＵに近いとし、階層型のキャッシュのうちＣＰＵに近いほど上位階層のキャッシュとする。【０００３】
階層型のキャッシュでは、中間階層のキャッシュは上位階層のキャッシュよりアクセス速度は遅いが容量は大きく、下位階層のキャッシュよりアクセス速度は速いが容量は小さくなるように設計されている。【０００４】
また、階層型のキャッシュでは、読み出し対象データが上位階層のキャッシュに格納されていない場合、下位階層のキャッシュからデータを読み出し、同時に上位階層のキャッシュにそのデータを格納する。下位階層のキャッシュにも読み出し対象データが格納されていない場合は、さらに下位の階層のキャッシュからデータの読み出しを試みる。最下位階層のキャッシュにも読み出し対象データが格納されていない場合は、共有メモリからデータを読み出す動作をおこなうことが知られている。【０００５】
さらに、キャッシュに新たにデータを格納する際に、既にキャッシュメモリが一杯の場合はＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）方式などを利用してキャッシュコントローラにより追い出すデータが決定される。追い出すことが決定されたデータは、単一階層のキャッシュの場合はデータの内容が共有メモリに書き戻されるが、多階層のキャッシュでは一つ下の階層のキャッシュに追い出されたデータの内容が格納される。追い出し動作により空いた領域に新たなデータが格納される。これにより、多階層のキャッシュでは、上位階層のキャッシュの容量が溢れても、追い出したデータが下位階層のキャッシュに残っている間は、共有メモリよりも高速にそのデータにアクセスすることが出来る。【０００６】
また、対象データの読み出しを高速化するために、キャッシュメモリへのアクセスが混雑している場合、ＣＰＵが直接共有メモリへアクセスする技術が知られている（たとえば、下記特許文献１。）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−１１７３８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
分散キャッシュの下位階層に共有キャッシュがある場合、それぞれの分散キャッシュから溢れたデータを格納できるように、共有キャッシュは上位階層の分散キャッシュの総容量よりも容量が大きくなるように設計される。マルチコアプロセッサシステムでは、複数のＣＰＵが同時に処理をおこなうため、それぞれの分散キャッシュから溢れて追い出されたデータが共有キャッシュに入り込み、共有キャッシュの奪い合いが発生する。たとえば、一のＣＰＵで大量のデータを利用する処理をおこなっている場合、該ＣＰＵの分散キャッシュメモリから溢れたデータで下位の共有キャッシュメモリが埋まってしまう。よって、他のＣＰＵが下位の共有キャッシュメモリをほとんど利用できないことになる。【０００９】
大型機や汎用機において大きな共有キャッシュメモリを搭載していれば、大量のデータであっても共有キャッシュメモリに格納することができる。しかしながら、携帯機器に搭載される組み込み向けのマルチコアプロセッサシステムでは大型機や汎用機に比べて数分の１から数十分の１程度の共有キャッシュメモリが搭載される。よって、組み込み向けのマルチコアプロセッサでは、少量のデータを利用するごく通常の処理であっても、複数のＣＰＵでスレッドが同時に実行されることで共有キャッシュメモリの領域の奪い合いが発生するという問題点があった。【００１０】
本発明は、上述した従来技術による問題点を解消するため、共有キャッシュメモリの領域を有効に活用することができるマルチコアプロセッサシステム、制御プログラム、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の一の観点によれば、マルチコアプロセッサの各コアで共有する共有メモリと、前記コアごとの第１のキャッシュメモリと、前記第１のキャッシュメモリと前記共有メモリとの間で、前記マルチコアプロセッサの各コアで共有し、少なくとも前記マルチコアプロセッサで実行される複数のスレッド間で参照される共有データを記憶する第２のキャッシュメモリと、前記共有メモリから対象変数の値を読み出す読み出し手段と、前記対象変数が前記共有データであるか、一つのスレッドのみで参照される非共有データであるかを前記対象変数の読み出し要求に基づいて判断する判断手段と、前記判断手段により前記対象変数が前記非共有データであると判断された場合、前記読み出し手段により読み出された対象変数の値を前記読み出し要求の要求元であるコアの第１のキャッシュメモリに前記第２のキャッシュメモリを経由せずに転送する転送手段と、を備えるマルチコアプロセッサシステムを提供する。【００１２】
また、本発明の他の観点によれば、一つのスレッドのみで参照される非共有データであるか、複数のスレッドで参照される共有データであるかを示す識別情報を含む対象データに関する、マルチコアプロセッサの各コアで共有するメモリへの書き込み要求を受け付ける受付手段と、前記受付手段により前記書き込み要求が受け付けられると、前記メモリに前記対象データを格納可能な空き領域があるか否かを判断する領域判断手段と、前記領域判断手段により前記空き領域が前記メモリにないと判断された場合、前記メモリに記憶されているデータから、当該各データが有する前記識別情報に基づいて前記非共有データを特定する特定手段と、前記特定手段により特定された非共有データの領域に前記対象データを格納する格納手段と、を備えるマルチコアプロセッサシステムを提供する。
【発明の効果】
【００１３】
本マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、複数のＣＰＵで利用されないデータを共有キャッシュメモリに格納させないことで、共有キャッシュメモリの領域を有効に活用することができるという効果を奏する。また、複数のＣＰＵで利用されるデータを共有キャッシュメモリに優先的に保持させることで、共有キャッシュメモリの領域を有効に活用することができるという効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】設計時における全体の処理フローの一例を示すフローチャートである。
【図２】対象プログラムの一例を示す説明図である。
【図３】変数リストの一例を示す説明図である。
【図４】実施の形態にかかる設計支援装置のハードウェアを示すブロック図である。
【図５】設計支援装置による大域変数に関する設計支援処理手順を示すフローチャートである。
【図６】図５で示した大域変数の共有判定処理（ステップＳ５０３）の詳細な説明を示すフローチャートである。
【図７】設計支援装置による動的変数に関する設計支援処理手順を示すフローチャートである。
【図８】図７で示した代入先変数の共有判定処理（ステップＳ７０３）の詳細な説明を示すフローチャートである。
【図９】大域変数の判定例１を示す説明図である。
【図１０】大域変数の判定例２を示す説明図である。
【図１１】大域変数の判定例３を示す説明図である。
【図１２】動的変数の判定例１を示す説明図である。
【図１３】動的変数の判定例２を示す説明図である。
【図１４】判定結果の一例を示す説明図である。
【図１５】設計支援装置によるロードモジュールの生成処理手順を示すフローチャートである。
【図１６】仮想メモリ空間における各情報の配置例を示す説明図である。
【図１７】生成されたロードモジュールの一例を示す説明図である。
【図１８】各キャッシュメモリの利用例を示す説明図である。
【図１９】マルチコアプロセッサシステム１８００のハードウェアを示すブロック図である。
【図２０】分散キャッシュメモリ１８４１の一例を示す説明図である。
【図２１】ＯＳによるロードモジュール１７００の展開処理手順を示すフローチャートである。
【図２２】ロードモジュール１７００から共有メモリ１８０６へデータがマッピングされる例を示す説明図である。
【図２３】変換テーブルの一例を示す説明図である。
【図２４】実施の形態２にかかる共有キャッシュコントローラ１８３４の機能ブロック図である。
【図２５】共有データが共有メモリ１８０６から読み出される例を示す説明図である。
【図２６】非共有データが共有メモリ１８０６から読み出される一例を示す説明図である。
【図２７】実施の形態２にかかる共有キャッシュコントローラ１８３４による制御処理手順を示すフローチャートである。
【図２８】実施の形態３にかかる共有キャッシュコントローラ１８３４の機能ブロック図である。
【図２９】非共有データが上書きされる例を示す説明図である。
【図３０】対象データが非共有データである例を示す説明図である。
【図３１】実施の形態３にかかる共有キャッシュコントローラ１８３４による制御処理手順例１を示すフローチャートである。
【図３２】実施の形態３にかかる共有キャッシュコントローラ１８３４による制御処理手順例２を示すフローチャートである。
【発明を実施するための形態】
【００１５】
まず、ここで、共有データと非共有データについて説明する。共有データは、スレッド間で共有されるデータである。すなわち、共有データは複数のスレッドで参照されるデータである。非共有データは、スレッド間で共有されないデータである。すなわち、共有データは一つのスレッドのみで参照されるデータである。スレッドは、ＯＳで規定されたスレッド記述で指定された関数もしくはプログラムコード片と該関数から呼ばれる関数群である。
【００１６】
非共有データは、一のスレッド実行中に他のＣＰＵから利用されることはなく、該一のスレッドの実行が終了すると２度と利用されることは無い。共有データは、一のスレッド実行中に別のＣＰＵから利用される可能性があるだけでなく、該一のスレッドの実行終了後に、同一のＣＰＵで実行される他のスレッド、もしくは別のＣＰＵで実行される他のスレッドからも参照される可能性がある。よって、共有データは一のスレッド終了後も長時間キャッシュで保持し続けた方がよいデータである。
【００１７】
まず、実施の形態１では、設計時において対象プログラム内の各変数が共有データであるか非共有データであるかを自動で判別し、判別結果に基づいてロードモジュールを生成する例を説明する。
【００１８】
つぎに、実施の形態２および実施の形態３では、マルチコアプロセッサシステムにおいて実施の形態１で生成されたロードモジュールに基づいて各変数が共有データであるか非共有データであるかの情報を各ＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）で管理する。そして、実施の形態２では、非共有データを共有キャッシュメモリへ格納せずに該非共有データを利用するＣＰＵの分散キャッシュメモリに格納する例を説明する。
【００１９】
そして、実施の形態３では、マルチコアプロセッサシステムにおいて共有キャッシュメモリでデータの追い出しが発生した場合、非共有データと共有データとが該共有キャッシュメモリに格納されている場合、非共有データを先に追い出す。すなわち、共有キャッシュメモリでは、共有データを優先的に共有キャッシュメモリに保持し続けさせる例を説明する。
【００２０】
（実施の形態１）
実施の形態１では、設計時において対象プログラム内の各変数が共有データであるか非共有データであるかを自動で判別し、判別結果に基づいてロードモジュールを生成する例を説明する。
【００２１】
図１は、設計時における全体の処理フローの一例を示すフローチャートである。まず、設計支援装置が、対象プログラム内の各変数を大域変数と動的変数と自動変数とに分類する（ステップＳ１０１）。分類結果が、大域変数リスト３０１と動的変数リスト３０２と自動変数リスト３０３である。つぎに、設計支援装置が、各大域変数が共有データか非共有データかを判定し（ステップＳ１０２）、各動的変数が共有データか非共有データかを判定する（ステップＳ１０３）。判定結果が共有大域変数リスト１４０１と非共有大域変数リスト１４０３と共有動的変数リスト１４０２と非共有動的変数リスト１４０４とである。オブジェクトコードは対象プログラムのコードである。
【００２２】
そして、設計支援装置が、判定結果を用いて仮想メモリ空間の領域配置を決定する（ステップＳ１０４）。また、設計支援装置による処理はコンパイラを用いて実現しても良い。
【００２３】
まず、対象プログラム内の各変数は大別して大域変数と自動変数と動的変数との３つの変数に分類することができる。Ｃ言語を例に挙げると、大域変数と自動変数と動的変数とはそれぞれ下記である。
・大域変数：関数定義部外で宣言された変数
・自動変数：関数定義部中で宣言された変数
・動的変数：ｍａｌｌｏｃ関数等の領域確保関数で確保される変数
【００２４】
大域変数と動的変数とは複数のスレッドで用いることができる。よって、大域変数と動的変数とに分類される変数は共有データと非共有データとが混在している。また、大域変数と動的変数とはスレッド間での共有の仕方が異なるため、本実施の形態１では、大域変数と動的変数とでそれぞれ異なるフローで各変数がスレッド間で共有するか否かを判定する。
【００２５】
動的変数はプログラムコード上では実態がなく、ｍａｌｌｏｃ等の決められた関数で動的変数用の領域が確保される。動的変数はｍａｌｌｏｃ等の結果として返される確保した領域の先頭アドレスを一旦別の変数に格納し、この変数を経由して利用する。このため、ここではｍａｌｌｏｃ等の決められた関数で確保されて最初に代入される変数を動的変数として記録し、動的変数がスレッド間で共有するか否かを判定するフローの起点とする。なお、ｍａｌｌｏｃ関数については周知であるため詳細な説明を省略する。
【００２６】
自動変数は、関数定義部中で宣言された変数のうち、動的変数として特定された変数を除く変数である。自動変数についてはＣ言語ベースのマルチスレッドプログラムにおいてスレッド間で共有するのが禁止されているため、他のスレッドで用いることができない。よって、自動変数はすべて非共有データである。
【００２７】
対象プログラムの設計者がコンパイラにより対象プログラムの各変数を大域変数と動的変数と自動変数とに分類することができるため、ここでは、分類方法の詳細については省略する。
【００２８】
（対象プログラム）
図２は、対象プログラムの一例を示す説明図である。対象プログラム２００ではスレッドｍａｉｎとスレッドｔｈ１とスレッドｔｈ２との３つのスレッドが記述されている。スレッドｔｈ１とスレッドｔｈ２とはスレッドｍａｉｎで呼び出されているため、スレッドｍａｉｎはスレッドｔｈ１およびスレッドｔｈ２の親スレッドであり、スレッドｔｈ１およびスレッドｔｈ２はスレッドｍａｉｎの子スレッドである。
【００２９】
変数ｇ１と変数ｇ２と変数ｇ３とはスレッドの外で宣言されているため、変数ｇ１と変数ｇ２と変数ｇ３とは大域変数である。ｍａｉｎのスレッドの中では変数ｓ１と変数ｓ２と変数ｌ１と変数ｌ２と変数ａｒｇｓとが宣言されている。なお、明細書中の記述では各ポインタ型変数であっても省略して変数と称する。ｍａｉｎのスレッドの中ではｍａｌｌｏｃ関数により動的変数が確保されている。変数ｓ１と変数ｌ１と変数ａｒｇｓとにｍａｌｌｏｃ関数により確保した動的変数が格納される。よって、スレッドｍａｉｎの中で宣言されている変数のうち、変数ｓ１と変数ｌ１と変数ａｒｇｓとが動的変数であり、変数ｓ２と変数ｌ２とが自動変数である。
【００３０】
スレッドｔｈ２の中では変数ｌと変数ｍと変数ｓとが宣言されている。スレッドｔｈ２の中ではｍａｌｌｏｃ関数が用いられていないため、変数ｌと変数ｍと変数ｓとは自動変数である。
【００３１】
（変数リスト）
図３は、変数リストの一例を示す説明図である。大域変数リスト３０１には対象プログラム２００内の大域変数が記述されている。大域変数リスト３０１は変数ｇ１と変数ｇ２と変数ｇ３である。
【００３２】
動的変数リスト３０２は対象プログラム２００内の動的変数が記述されている。動的変数リスト３０２は変数の項目３０４とスレッドの項目３０５とを有している。変数の項目３０４には変数名が保持され、スレッドの項目３０５にはスレッド名が保持されている。たとえば、変数の項目３０４が示す変数名が変数ｓ１の場合において、スレッドの項目３０５が示すスレッド名がスレッドｍａｉｎである。すなわち、実施の形態１では、動的変数リスト３０２により変数ｓ１がスレッドｍａｉｎで宣言されていることがわかる。
【００３３】
自動変数リスト３０３は対象プログラム２００内の自動変数が記述されている。自動変数リスト３０３は変数の項目３０６とスレッドの項目３０７とを有している。変数の項目３０６には変数名が保持され、スレッドの項目３０７にはスレッド名が保持されている。たとえば、変数の項目３０６が示す変数名が変数ｓ２の場合において、スレッドの項目３０７が示すスレッド名がスレッドｍａｉｎである。すなわち、実施の形態１では、自動変数リスト３０３により変数ｓ２がスレッドｍａｉｎで宣言されていることがわかる。また、自動変数リスト３０３に含まれる変数はすべて非共有データである。
【００３４】
（設計支援装置のハードウェア）
図４は、実施の形態にかかる設計支援装置のハードウェアを示すブロック図である。図４において、設計支援装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）４０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０３と、磁気ディスクドライブ４０４と、磁気ディスク４０５と、光ディスクドライブ４０６と、光ディスク４０７と、ディスプレイ４０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）４０９と、キーボード４１０と、マウス４１１と、スキャナ４１２と、プリンタ４１３と、を有している。また、各構成部はバス４００によってそれぞれ接続されている。
【００３５】
ここで、ＣＰＵ４０１は、設計支援装置の全体の制御を司る。ＲＯＭ４０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ４０３は、ＣＰＵ４０１のワークエリアとして使用される。磁気ディスクドライブ４０４は、ＣＰＵ４０１の制御にしたがって磁気ディスク４０５に対するデータのリード／ライトを制御する。磁気ディスク４０５は、磁気ディスクドライブ４０４の制御で書き込まれたデータを記憶する。
【００３６】
光ディスクドライブ４０６は、ＣＰＵ４０１の制御にしたがって光ディスク４０７に対するデータのリード／ライトを制御する。光ディスク４０７は、光ディスクドライブ４０６の制御で書き込まれたデータを記憶したり、光ディスク４０７に記憶されたデータをコンピュータに読み取らせたりする。
【００３７】
ディスプレイ４０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。該ディスプレイ４０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３８】
Ｉ／Ｆ４０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク４１４に接続され、このネットワーク４１４を介して他の装置に接続される。そして、Ｉ／Ｆ４０９は、ネットワーク４１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ４０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３９】
キーボード４１０は、文字、数字、各種指示などの入力のためのキーを有し、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス４１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を有するものであれば、トラックボールやジョイスティックなどであってもよい。
【００４０】
スキャナ４１２は、画像を光学的に読み取り、設計支援装置内に画像データを取り込む。なお、スキャナ４１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ４１３は、画像データや文書データを印刷する。プリンタ４１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００４１】
（設計支援装置による設計支援処理手順）
図５は、設計支援装置による大域変数に関する設計支援処理手順を示すフローチャートである。まず、設計支援装置が、未判定の大域変数があるか否かを判断する（ステップＳ５０１）。設計支援装置が、未判定の大域変数があると判断した場合（ステップＳ５０１：Ｙｅｓ）、未判定の大域変数から１つの大域変数を選択する（ステップＳ５０２）。
【００４２】
そして、設計支援装置が、選択した大域変数を引数として大域変数の共有判定処理を実行し（ステップＳ５０３）、ステップＳ５０１へ戻る。一方、設計支援装置が、未判定の大域変数がないと判断した場合（ステップＳ５０１：Ｎｏ）、一連の処理を終了する。
【００４３】
図６は、図５で示した大域変数の共有判定処理（ステップＳ５０３）の詳細な説明を示すフローチャートである。大域変数の共有判定処理（ステップＳ５０３）では対象大域変数を引数としている。まず、設計支援装置が、対象大域変数を参照するスレッドが１つのみであるか否かを判断する（ステップＳ６０１）。設計支援装置が、対象大域変数を参照するスレッドが１つのみであると判断した場合（ステップＳ６０１：Ｙｅｓ）、対象大域変数のポインタを別の変数に代入しているか否かを判断する（ステップＳ６０２）。
【００４４】
そして、設計支援装置が、対象大域変数のポインタを別の変数に代入していると判断した場合（ステップＳ６０２：Ｙｅｓ）、対象大域変数の代入先変数を特定する（ステップＳ６０３）。設計支援装置が、特定した代入先変数の中で未選択の代入先変数から１つの代入先変数を選択する（ステップＳ６０４）。
【００４５】
そして、設計支援装置が、選択した代入先変数を引数として代入先変数の共有判定処理を実行し（ステップＳ６０５）、選択した代入先変数が非共有データであるか否かを判断する（ステップＳ６０６）。代入先変数の共有判定処理（ステップＳ６０５）は後述の代入先変数の共有判定処理（ステップＳ７０３）と同一処理であるため、ここでは詳細な説明を省略する。そして、設計支援装置が、選択した代入先変数が非共有データであると判断した場合（ステップＳ６０６：Ｙｅｓ）、未選択の代入先変数があるか否かを判断する（ステップＳ６０７）。
【００４６】
設計支援装置が、未選択の代入先変数があると判断した場合（ステップＳ６０７：Ｙｅｓ）、ステップＳ６０４へ戻る。設計支援装置が、未選択の代入先変数がないと判断した場合（ステップＳ６０７：Ｎｏ）、対象大域変数を非共有データと判定する（ステップＳ６０８）。
【００４７】
また、ステップＳ６０２において、設計支援装置が、対象大域変数のポインタを別の変数に代入していないと判断した場合（ステップＳ６０２：Ｎｏ）、ステップＳ６０８へ移行する。
【００４８】
また、ステップＳ６０１において、設計支援装置が、対象大域変数を参照するスレッドが１つのみでないと判断した場合（ステップＳ６０１：Ｎｏ）、対象大域変数を共有データと判定する（ステップＳ６０９）。ステップＳ６０６において、設計支援装置が、選択した代入先変数が非共有データでないと判断した場合（ステップＳ６０６：Ｎｏ）、ステップＳ６０９へ移行する。ステップＳ６０８またはステップＳ６０９のつぎに、設計支援装置が、判定結果を出力し（ステップＳ６１０）、リターンする。リターンするとは、元の処理のつづきに戻ることである。
【００４９】
また、判定結果の出力形式としては、たとえば、ディスプレイ４０８への表示、プリンタ４１３への印刷出力、Ｉ／Ｆ４０９による外部装置への送信がある。また、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶装置に記憶することとしてもよい。
【００５０】
図７は、設計支援装置による動的変数に関する設計支援処理手順を示すフローチャートである。まず、設計支援装置が、未判定の動的変数があるか否かを判断する（ステップＳ７０１）。そして、設計支援装置が、未判定の動的変数があると判断した場合（ステップＳ７０１：Ｙｅｓ）、未判定の動的変数から１つの動的変数を選択する（ステップＳ７０２）。
【００５１】
つぎに、設計支援装置が、選択した動的変数を引数として代入先変数の共有判定処理を実行し（ステップＳ７０３）、ステップＳ７０１へ戻る。また、設計支援装置が、未判定の動的変数がないと判断した場合（ステップＳ７０１：Ｎｏ）、一連の処理を終了する。
【００５２】
図８は、図７で示した代入先変数の共有判定処理（ステップＳ７０３）の詳細な説明を示すフローチャートである。代入先変数の共有判定処理（ステップＳ７０３）では対象大域変数を引数としている。まず、設計支援装置が、対象代入先変数が親スレッドから渡された変数であるか否かを判断する（ステップＳ８０１）。
【００５３】
設計支援装置が、対象代入先変数が親スレッドから渡された変数でないと判断した場合（ステップＳ８０１：Ｎｏ）、対象代入先変数が子スレッドへ渡す変数であるか否かを判断する（ステップＳ８０２）。設計支援装置が、対象代入先変数が子スレッドへ渡す変数でないと判断した場合（ステップＳ８０２：Ｎｏ）、対象代入先変数が大域変数であるか否かを判断する（ステップＳ８０３）。
【００５４】
設計支援装置が、対象代入先変数が大域変数であると判断した場合（ステップＳ８０３：Ｙｅｓ）、対象代入先変数を引数として大域変数の共有判定処理を実行する（ステップＳ８０４）。大域変数の共有判定処理（ステップＳ８０４）は上述の大域変数の共有判定処理（ステップＳ５０３）と同一処理であるため、詳細な説明を省略する。そして、設計支援装置が、対象代入先変数を非共有データと判定したか否かを判断する（ステップＳ８０５）。
【００５５】
設計支援装置が、対象代入先変数を非共有データと判定したと判断した場合（ステップＳ８０５：Ｙｅｓ）、対象代入先変数の値もしくはポインタを別の変数へ代入したか否かを判断する（ステップＳ８０６）。また、設計支援装置が、対象代入先変数が大域変数でないと判断した場合（ステップＳ８０３：Ｎｏ）、ステップＳ８０６へ移行する。
【００５６】
そして、設計支援装置が、対象代入先変数の値もしくはポインタを別の変数へ代入したと判断した場合（ステップＳ８０６：Ｙｅｓ）、代入先変数を特定する（ステップＳ８０７）。設計支援装置が、未選択の代入先変数から１つの代入先変数を選択し（ステップＳ８０８）、選択した代入先変数を引数として代入先変数の共有判定処理を実行する（ステップＳ８０９）。代入先変数の共有判定処理（ステップＳ８０９）と代入先変数の共有判定処理（ステップＳ７０３）とは同一処理である。
【００５７】
設計支援装置が、選択した代入先変数が非共有データであるか否かを判断する（ステップＳ８１０）。設計支援装置が、選択した代入先変数が非共有データであると判断した場合（ステップＳ８１０：Ｙｅｓ）、未選択の代入先変数があるか否かを判断する（ステップＳ８１１）。設計支援装置が、未選択の代入先変数があると判断した場合（ステップＳ８１１：Ｙｅｓ）、ステップＳ８０８へ戻る。
【００５８】
一方、設計支援装置が、未選択の代入先変数がないと判断した場合（ステップＳ８１１：Ｎｏ）、対象代入先変数を非共有データと判定する（ステップＳ８１２）。また、ステップＳ８０６において、対象代入先変数の値もしくはポインタを別の変数へ代入していないと判断した場合（ステップＳ８０６：Ｎｏ）、ステップＳ８１２へ移行する。
【００５９】
また、ステップＳ８０１において、設計支援装置が、対象代入先変数が親スレッドから渡された変数であると判断した場合（ステップＳ８０１：Ｙｅｓ）、対象大域変数を共有データと判定する（ステップＳ８１３）。さらに、ステップＳ８０２において、設計支援装置が、対象代入先変数が子スレッドへ渡す変数であると判断した場合（ステップＳ８０２：Ｙｅｓ）、ステップＳ８１３へ移行する。
【００６０】
ステップＳ８０５において、設計支援装置が、対象代入先変数を非共有データと判定していないと判断した場合（ステップＳ８０５：Ｎｏ）、ステップＳ８１３へ移行する。ステップＳ８１０において、設計支援装置が、選択した代入先変数が非共有データであると判断した場合（ステップＳ８１０：Ｎｏ）、ステップＳ８１３へ移行する。
【００６１】
ステップＳ８１２またはステップＳ８１３のつぎに、設計支援装置が、判定結果を出力し（ステップＳ８１４）、リターンする。また、判定結果の出力形式としては、たとえば、ディスプレイ４０８への表示、プリンタ４１３への印刷出力、Ｉ／Ｆ４０９による外部装置への送信がある。また、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶装置に記憶することとしてもよい。
【００６２】
以上を踏まえて具体例を示す。まず、大域変数の判定例を示し、動的変数の判定例を示す。図９〜図１３で示す（１−１）〜（１−３）と（２−１）〜（２−３）とは図５〜図８で示したフローチャートの（１−１）〜（１−３）と（２−１）〜（２−３）とに対応している。
【００６３】
図９は、大域変数の判定例１を示す説明図である。設計支援装置が（１−１）大域変数から変数ｇ３を選択する。そして、（１−２）変数ｇ３がスレッドｔｈ１とスレッドｔｈ２で参照されているので、設計支援装置は変数ｇ３が共有データであると判定する。
【００６４】
図１０は、大域変数の判定例２を示す説明図である。設計支援装置が、（１−１）大域変数から変数ｇ２を選択する。（１−３）変数ｇ２が別の変数である変数ｌ２に代入されている。変数ｌ２は自動変数であるため、非共有データである。よって、設計支援装置は変数ｇ２が非共有データであると判定する。
【００６５】
図１１は、大域変数の判定例３を示す説明図である。設計支援装置が、（１−１）大域変数から変数ｇ１を選択する。（１−３）変数ｇ１が別の変数である変数ｓ２に代入されている。さらに、（２−３）変数ｓ２は別の変数である変数ａｒｇｓに代入されている。そして、（２−２）変数ａｒｇｓはスレッドｍａｉｎの子スレッドであるスレッドｔｈ２へ渡す変数であるため、設計支援装置は変数ｇ１が共有データであると判定する。
【００６６】
図１２は、動的変数の判定例１を示す説明図である。設計支援装置が、（２−１）動的変数から変数ｌ１を選択する。変数ｌ１は他の変数に代入されていないため、設計支援装置は変数ｌ１を非共有データであると判定する。
【００６７】
図１３は、動的変数の判定例２を示す説明図である。設計支援装置が（２−１）動的変数から変数ｓ１を選択する。（２−２）変数ｓ１はスレッドｍａｉｎの子スレッドであるスレッドｔｈ１へ渡す変数であるため、設計支援装置が変数ｓ１を共有データであると判定する。
【００６８】
図１４は、判定結果の一例を示す説明図である。共有大域変数リスト１４０１には共有データであると判断された大域変数が記述されている。共有大域変数リスト１４０１には変数ｇ１と変数ｇ３とが記述されている。
【００６９】
共有動的変数リスト１４０２には共有データであると判断された動的変数が記述されている。共有動的変数リスト１４０２は変数の項目１４０５とスレッドの項目１４０６とを有している。変数の項目１４０５には変数名が保持され、スレッドの項目１４０６にはスレッド名が保持されている。共有動的変数リスト１４０２にはスレッドｔｈ１内の変数ａｒｇｓと変数ｓ１とが記述されている。
【００７０】
非共有大域変数リスト１４０３には非共有データであると判断された大域変数が記述されている。非共有大域変数リスト１４０３には変数ｇ２が記述されている。
【００７１】
非共有動的変数リスト１４０４には非共有データであると判断された自動変数が記述されている。非共有動的変数リスト１４０４は変数の項目１４０７とスレッドの項目１４０８とを有している。変数の項目１４０７には変数名が保持され、スレッドの項目１４０８にはスレッド名が保持されている。非共有動的変数リスト１４０４にはスレッドｔｈ１内の変数ｌ１が記述されている。
【００７２】
（ロードモジュールの生成処理手順）
図１５は、設計支援装置によるロードモジュールの生成処理手順を示すフローチャートである。まず、設計支援装置が、非共有動的変数（非共有データである動的変数）を確保する部分をＬＯＣＡＬ＿ＨＥＡＰ領域から確保するようにコード変更する（ステップＳ１５０１）。そして、設計支援装置が、オブジェクトコードのサイズと共有大域変数のサイズ（共有データである大域変数）と非共有大域変数（共有データである大域変数）のサイズとを計算する（ステップＳ１５０２）。
【００７３】
設計支援装置が、オブジェクトコードの領域と共有大域変数の領域と非共有大域変数の領域との仮想メモリ空間内での配置を決定する（ステップＳ１５０３）。そして、設計支援装置が、オブジェクトコード中の共有大域変数のアドレスを決定した共有大域変数のアドレスに変更する（ステップＳ１５０４）。
【００７４】
設計支援装置が、オブジェクトコード中の非共有大域変数のアドレスを決定した非共有大域変数のアドレスに変更する（ステップＳ１５０５）。設計支援装置が、ロードモジュールを生成し（ステップＳ１５０６）、一連の処理を終了する。
【００７５】
図１６は、仮想メモリ空間における各情報の配置例を示す説明図である。たとえば、仮想メモリ空間は、仮想アドレスである論理アドレス０ｘ００００００００から論理アドレス０ｘｆｆｆｆｆｆｆｆまである。オブジェクトコードであるＣＯＤＥは仮想メモリ空間において論理アドレス０ｘ００００００００から論理アドレス０ｘ０ｆｆｆｆｆｆｆまでに配置される。
【００７６】
非共有大域変数であるＬＯＣＡＬ＿ＤＡＴＡは仮想メモリ空間において論理アドレス０ｘ１０００００００から論理アドレス０ｘ１ｆｆｆｆｆｆｆまでに配置される。共有大域変数であるＳＨＡＲＥＤ＿ＤＡＴＡは仮想メモリ空間において論理アドレス０ｘ２０００００００から論理アドレス０ｘ２ｆｆｆｆｆｆｆまでに配置される。
【００７７】
図１７は、生成されたロードモジュールの一例を示す説明図である。ロードモジュール１７００は、配置情報１７０１とバイナリコード１７０２と初期値付き変数情報１７０３とを有している。バイナリコード１７０２にはオブジェクトコードがコンパイルされることによりバイナリデータとなったコードが記述されている。初期値付き変数情報１７０３にはオブジェクトコード内で初期値が宣言されている変数の変数名と論理アドレスと初期値とが記述されている。配置情報１７０１には仮想メモリ空間上での領域名と開始アドレスとサイズとが記述され、たとえば、ＣＯＤＥは論理アドレス０ｘ００００００００から配置され、ＣＯＤＥのサイズが０ｘ１０００００００である。
【００７８】
（実施の形態２）
実施の形態２では、非共有データを共有キャッシュメモリへ格納せずに該非共有データを利用するＣＰＵの分散キャッシュメモリに格納する例を説明する。
【００７９】
図１８は、各キャッシュメモリの利用例を示す説明図である。たとえば、各分散キャッシュには、非共有大域変数と共有大域変数と非共有動的変数と共有動的変数と非共有データである自動変数とが格納される。すなわち、各分散キャッシュには、共有データであるか非共有データであるかに関わらず変数が格納される。
【００８０】
一方、たとえば、共有キャッシュ１８２４には、共有大域変数と共有動的変数とが格納される。すなわち、共有キャッシュ１８２４に共有データである共有大域変数と共有動的変数が格納される。実施の形態２では、複数のＣＰＵで利用される可能性がある変数のみを共有キャッシュ１８２４に格納することにより、共有キャッシュ１８２４の領域を効率よく利用することができる。
【００８１】
また、実施の形態２（および後述の実施の形態３）で示すマルチコアプロセッサシステム１８００において、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００８２】
（マルチコアプロセッサシステム１８００のハードウェア）
図１９は、マルチコアプロセッサシステム１８００のハードウェアを示すブロック図である。図１９において、マルチコアプロセッサシステム１８００は、ＣＰＵ１８０１〜ＣＰＵ１８０３と、ＭＭＵ１８１１（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）〜ＭＭＵ１８１３と、分散キャッシュ１８２１〜分散キャッシュ１８２３と、共有キャッシュ１８２４と、共有メモリ１８０６と、を有している。
【００８３】
ＣＰＵ１８０１とＭＭＵ１８１１とが接続され、ＭＭＵ１８１１と分散キャッシュ１８２１（具体的には、分散キャッシュコントローラ１８３１）とが接続されている。ＣＰＵ１８０２とＭＭＵ１８１２とが接続され、ＭＭＵ１８１２と分散キャッシュ１８２２（具体的には、分散キャッシュコントローラ１８３２）とが接続されている。ＣＰＵ１８０３とＭＭＵ１８１３とが接続され、ＭＭＵ１８１３と分散キャッシュ１８２３（具体的には、分散キャッシュコントローラ１８３３）とが接続されている。各分散キャッシュの分散キャッシュコントローラと共有キャッシュ１８２４の共有キャッシュコントローラ１８３４とが結合網１８０４を介して接続されている。共有キャッシュ１８２４と共有メモリ１８０６とはバス１８０５を介して接続されている。
【００８４】
ＣＰＵ１８０１〜ＣＰＵ１８０３は、それぞれコアとレジスタとを有している。ＣＰＵ１８０１はＯＳ１８５１を実行し、マルチコアプロセッサシステム１８００の全体の制御を司る。ＯＳ１８５１は、ソフトウェアの各プロセスをどのＣＰＵに割り当てるかを制御する機能を有し、ＣＰＵ１８０１に割り当てられたタスクの切り替えを制御する機能を有している。
【００８５】
ＣＰＵ１８０２とＣＰＵ１８０３はスレーブＣＰＵであり、それぞれＯＳ１８５２とＯＳ１８５３とを実行する。ＯＳ１８５２とＯＳ１８５３とは各ＣＰＵに割り当てられたタスクの切り替えを制御する機能を有している。
【００８６】
ＭＭＵ１８１１〜ＭＭＵ１８１３は、アクセス要求をＣＰＵから受け付けると、該アクセス要求に付随する論理アドレスから物理アドレスに変換テーブルを用いて変換する機能を有している。変換テーブルについては後述する。
【００８７】
分散キャッシュ１８２１は、分散キャッシュコントローラ１８３１と分散キャッシュメモリ１８４１とを有している。分散キャッシュコントローラ１８３１が分散キャッシュメモリ１８４１への書き込みや読み出しを制御する。分散キャッシュ１８２２は、分散キャッシュコントローラ１８３２と分散キャッシュメモリ１８４２とを有している。分散キャッシュコントローラ１８３２が分散キャッシュメモリ１８４２への書き込みや読み出しを制御する。分散キャッシュ１８２３は、分散キャッシュコントローラ１８３３と分散キャッシュメモリ１８４３とを有している。分散キャッシュコントローラ１８３３が分散キャッシュメモリ１８４３への書き込みや読み出しを制御する。
【００８８】
つぎに、共有キャッシュ１８２４は、共有キャッシュコントローラ１８３４と共有キャッシュメモリ１８４４とを有している。共有キャッシュコントローラ１８３４は、共有キャッシュメモリへの書き込みや読み出しを制御する。
【００８９】
図２０は、分散キャッシュメモリ１８４１の一例を示す説明図である。分散キャッシュメモリ１８４１はタグ情報とデータとを有している。タグ情報はアドレス情報と領域情報とを有している。分散キャッシュコントローラ１８３１が、読み出し要求に含まれるアドレス情報に基づいて分散キャッシュメモリ１８４１のタグ情報のアドレス情報から該当データを検索する。また、データとタグ情報のペアをキャッシュラインと称する。
【００９０】
分散キャッシュメモリ１８４１には、共有メモリ１８０６の様々なアドレスのデータが格納されている。そのため、分散キャッシュメモリ１８４１では、各データが共有メモリ１８０６内のどこのアドレスのデータであるかのアドレス情報をデータとペアで有する。該アドレス情報がないと、ＣＰＵからのアクセス要求（読み出し要求や書き込み要求）に対して、各変数がキャッシュに格納されているかどうかの判定ができない。
【００９１】
また、領域情報は、キャッシュラインに有効なデータが入っているか否かを示すＩｎｖａｌｉｄビットやキャッシュメモリのデータが共有メモリ１８０６から読まれたままであるか書き換えられたかを示すＭｏｄｉｆｉｅｄビットを有している。
【００９２】
実施の形態２および実施の形態３では、さらに、領域情報は共有データであるか非共有データであるかを示す共有ビットを有している。共有データであるか否かについてはＭＭＵ１８１１からのアクセス要求に付加されている領域属性に基づいて分散キャッシュコントローラ１８３１が共有ビットの値を操作する。たとえば、共有ビットが１であれば共有データであることを示し、共有ビットが０であれば非共有データであることを示す。
【００９３】
また、分散キャッシュメモリ１８４２と分散キャッシュメモリ１８４３と共有キャッシュメモリ１８４４とは、分散キャッシュメモリ１８４１と同様に領域情報とデータとを有しているとし、具体的な例を省略する。
【００９４】
図１９に戻って、共有メモリ１８０６は、ＣＰＵ１８０１〜ＣＰＵ１８０３に共有されるメモリである。共有メモリ１８０６は、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭなどを有している。共有メモリ１８０６は、たとえば、プロセス管理テーブルと、ＯＳ１８５１〜ＯＳ１８５２のブートプログラムや後述する制御プログラムなどのプログラムと、ロードモジュール１７００と、を記憶している。
【００９５】
たとえば、ＲＯＭまたはフラッシュＲＯＭは該プログラムなどを記憶し、ＲＡＭはＣＰＵ１８０１〜ＣＰＵ１８０３とのワークエリアとして使用される。共有メモリ１８０６に記憶されているＯＳ１８５１〜ＯＳ１８５３は、各ＣＰＵにロードされることで、コーディングされている処理を各ＣＰＵに実行させることとなる。
【００９６】
プロセス管理テーブルとは、たとえば、各スレッドがどのＣＰＵに割り当てられているか、割り当てられているＣＰＵが該スレッドを実行中であるか否かを示す情報である。各ＣＰＵは、プロセス管理テーブルを読み出して各ＣＰＵのキャッシュに記憶しておく。ＯＳ１８５１はＣＰＵ１８０１〜ＣＰＵ１８０３のうちのいずれかのＣＰＵにスレッドを割り当てると、プロセス管理テーブルに該スレッドがどのＣＰＵに割り当てられたかを登録する。
【００９７】
ここで、実施の形態１で生成されたロードモジュール１７００に基づいて仮想メモリ空間から共有メモリ１８０６へデータがマッピングされる例について説明する。
【００９８】
（ＯＳによる展開処理手順）
図２１は、ＯＳによるロードモジュール１７００の展開処理手順を示すフローチャートである。まず、ＯＳ１８５１が、プログラムの実行指示を受け付けたか否かを判断し（ステップＳ２１０１）、プログラムの実行指示を受け付けていないと判断した場合（ステップＳ２１０１：Ｎｏ）、ステップＳ２１０１へ戻る。一方、ＯＳ１８５１が、プログラムの実行指示を受け付けたと判断した場合（ステップＳ２１０１：Ｙｅｓ）、実行指示を受け付けたプログラムの変換テーブルの構築指示を各ＯＳへ通知する（ステップＳ２１０２）。
【００９９】
つぎに、ＯＳ１８５１が、実行指示を受け付けたプログラムのロードモジュールを取得する（ステップＳ２１０３）。なお、ロードモジュールは共有メモリ１８０６に記憶されている。ＯＳ１８５１が、ロードモジュールの情報を取得すると、ロードモジュール１７００の配置情報１７０１に基づき仮想メモリ空間から共有メモリ１８０６へ各情報をマッピングする（ステップＳ２１０４）。ＯＳ１８５１が、配置情報１７０１とマッピング結果に基づき変換テーブルを生成し（ステップＳ２１０５）、変換テーブルの領域属性に共有・非共有を設定する（ステップＳ２１０６）。
【０１００】
ＯＳ１８５１を除く各ＯＳが、実行指示が受け付けられたプログラムの変換テーブルの構築指示を受け付けたか否かを判断する（ステップＳ２１０７）。ここでは、ＯＳ１８５１を除く各ＯＳを省略して各ＯＳと称する。各ＯＳが、実行指示が受け付けられたプログラムの変換テーブルの構築指示を受け付けていないと判断した場合（ステップＳ２１０７：Ｎｏ）、ステップＳ２１０７へ戻る。各ＯＳが、実行指示が受け付けられたプログラムの変換テーブルの構築指示を受け付けたと判断した場合（ステップＳ２１０７：Ｙｅｓ）、実行指示を受け付けたプログラムのロードモジュールを取得する（ステップＳ２１０８）。
【０１０１】
各ＯＳが、ロードモジュールの情報を取得すると、ロードモジュール１７００の配置情報１７０１に基づき仮想メモリ空間から共有メモリ１８０６へ各情報をマッピングする（ステップＳ２１０９）。各ＯＳが、配置情報１７０１とマッピング結果に基づき変換テーブルを生成し（ステップＳ２１１０）、変換テーブルの領域属性に共有・非共有を設定する（ステップＳ２１１１）。各ＯＳが、変換テーブルの構築完了をＯＳ１８５１へ通知し（ステップＳ２１１２）、ステップＳ２１０７へ戻る。
【０１０２】
ＯＳ１８５１が、ＯＳ１８５１を除く全ＯＳから変換テーブルの構築完了を受け付けたか否かを判断する（ステップＳ２１１３）。ＯＳ１８５１が、変換テーブルの構築完了を受け付けていないと判断した場合（ステップＳ２１１３：Ｎｏ）、ステップＳ２１１３に戻る。ＯＳ１８５１が、変換テーブルの構築完了を受け付けたと判断した場合（ステップＳ２１１３：Ｙｅｓ）、実行指示を受け付けたプログラムの割り当てをおこない（ステップＳ２１１４）、ステップＳ２１０１へ戻る。
【０１０３】
図２２は、ロードモジュール１７００から共有メモリ１８０６へデータがマッピングされる例を示す説明図である。図２２のようにＯＳ１８５１が（１）配置情報１７０１に基づいて仮想メモリ空間と実メモリである共有メモリ１８０６の対応付けを設定する。そして、ＯＳ１８５１が（２）バイナリコード１７０２と初期値付きのデータをメモリに展開する。
【０１０４】
図２３は、変換テーブルの一例を示す説明図である。変換テーブル２３００は、ＯＳ１８５１に生成されて各ＭＭＵ内のレジスタに記憶されているテーブルであり、論理アドレスの項目２３０１と物理アドレスの項目２３０２と領域属性の項目２３０３とを有している。論理アドレスの項目２３０１には論理アドレスが保持され、該論理アドレスに対応する物理アドレスが物理アドレスの項目２３０２に保持されている。
【０１０５】
領域属性の項目２３０３には、各アドレスに対応する変数の領域属性が保持されている。領域属性は、周知のキャッシュモードおよびアクセス属性と、各アドレスに対応する変数が共有データであるか非共有データであるかを示す情報とである。本実施の形態では、領域属性においてキャッシュモードとアクセス属性とに関する情報を省略し、領域属性を単に共有データであるか非共有データであるかを示す情報とする。共有データであるか非共有データであるかを示す情報を共有ビットと称し、共有ビットが１であれば物理アドレスのデータが共有データであることを示し、共有ビットが０であれば該物理アドレスのデータが非共有データであることを示す。
【０１０６】
（実施の形態２にかかる共有キャッシュコントローラ１８３４の機能ブロック）
図２４は、実施の形態２にかかる共有キャッシュコントローラ１８３４の機能ブロック図である。共有キャッシュコントローラ１８３４は、たとえば、読み出し部２４０１と、判断部２４０２と、転送部２４０３と、を有している。
【０１０７】
たとえば、各部をＨＤＬ記述によって機能定義し、該ＨＤＬ記述を論理合成して論理回路等の素子を組み合わせることで、該共有キャッシュコントローラ１８３４内に各部を実現することができる。また、たとえば、各部は共有メモリ１８０６内に制御プログラムとして記憶され、各ＣＰＵのようにプログラムを実行可能な機能を有する共有キャッシュコントローラ１８３４が該制御プログラムをロードして該制御プログラムにコーディングされている処理を実行してもよい。
【０１０８】
読み出し部２４０１は、共有メモリ１８０６から対象変数の値を読み出す。
【０１０９】
判断部２４０２は、対象変数が複数のスレッドで参照される共有データであるか、一つのスレッドのみで参照される非共有データであるかを対象変数の読み出し要求に基づいて判断する。
【０１１０】
転送部２４０３は、判断部２４０２により対象変数が非共有データであると判断された場合、読み出し部２４０１により読み出された対象変数の値を読み出し要求の要求元であるＣＰＵの第１のキャッシュメモリに第２のキャッシュメモリを経由せずに転送する。ここでは、第１のキャッシュメモリが分散キャッシュメモリであり、第２のキャッシュメモリが共有キャッシュメモリ１８４４である。
【０１１１】
以上を踏まえて具体例を示す。
【０１１２】
図２５は、共有データが共有メモリ１８０６から読み出される例を示す説明図である。対象プログラム２００が実行中であり、スレッドｍａｉｎがＣＰＵ１８０１に割り当てられ、スレッドｔｈ２がＣＰＵ１８０２に割り当てられ、スレッドｔｈ１がＣＰＵ１８０３に割り当てられている。まず、スレッドｔｈ１内の「＊ｓ＝ｇ３」の実行時に、ＯＳ１８５３が、（１）変数ｇ３の論理アドレスが関連付けられた変数ｇ３の読み出し要求をＭＭＵ１８１３に通知する。
【０１１３】
そして、ＭＭＵ１８１３が（２）受け付けた変数ｇ３の論理アドレスを変換テーブル２３００に基づいて物理アドレスに変換する。さらに、ＭＭＵ１８１３が該変数ｇ３の論理アドレスに対応する領域属性を変換テーブル２３００から抽出する。ＭＭＵ１８１３が変数ｇ３の変換後のアドレスと抽出した領域属性とを変数ｇ３の読み出し要求に関連付けて、関連付けた変数ｇ３の読み出し要求を分散キャッシュ１８２３に通知する。
【０１１４】
分散キャッシュコントローラ１８３３は、読み出し要求を受け付けると、受け付けた変換後のアドレスに基づいて変数ｇ３が分散キャッシュメモリ１８４３に格納されているか否かを判断し、ここでは、（４）ミスヒットであると判断する。そして、分散キャッシュコントローラ１８３３は、（５）変換後のアドレスと領域属性とを変数ｇ３の読み出し要求に関連付けて、関連付けた変数ｇ３の読み出し要求を共有キャッシュ１８２４に通知する。
【０１１５】
共有キャッシュコントローラ１８３４は変数ｇ３の読み出し要求を受け付けると、共有キャッシュコントローラ１８３４は、（６）受け付けた領域属性に基づいて変数ｇ３が共有データであるか否かを判断する。上述のように領域属性は共有データであるか非共有データであるかを示す共有ビットを有している。ここでは、変数ｇ３が共有データであると判断される。
【０１１６】
そして、共有キャッシュコントローラ１８３４は、変数ｇ３が共有キャッシュメモリ１８４４に格納されているか否かを受け付けた変換後のアドレスと該共有キャッシュメモリ１８４４の各タグ情報に基づいて判断する。ここでは、変数ｇ３がミスヒットであると判断される。そして、共有キャッシュコントローラ１８３４は、（７）変換後のアドレスを変数ｇ３の読み出し要求に関連付けて、関連付けた変数ｇ３の読み出し要求を共有メモリ１８０６へ通知することにより、共有メモリ１８０６から変数ｇ３の値を読み出す。
【０１１７】
変数ｇ３が共有データであるため、共有キャッシュコントローラ１８３４は、（８）共有キャッシュメモリ１８４４に読み出した変数ｇ３を格納する。そして、共有キャッシュコントローラ１８３４は、（９）読み出した変数ｇ３を分散キャッシュ１８２３に受け渡し、分散キャッシュコントローラ１８３３は（１０）変数ｇ３を分散キャッシュメモリ１８４３に格納する。
【０１１８】
そして、分散キャッシュコントローラ１８３３は、（１１）読み出した変数ｇ３を実行中のスレッドｔｈ１に受け渡す。そして、「＊ｓ＝ｇ３」が実行される。また、スレッドｔｈ１の実行後に、スレッドｔｈ２では「ｌ＝ｇ３」を実行するために変数ｇ３を参照するため、ＣＰＵ１８０２が変数ｇ３を読み出す。なお、対象データが共有データであると判断された場合、共有キャッシュコントローラ１８３４による処理は通常のキャッシュ動作処理と同一である。
【０１１９】
図２６は、非共有データが共有メモリ１８０６から読み出される一例を示す説明図である。図２６では、対象プログラム２００が実行中であり、スレッドｍａｉｎがＣＰＵ１８０１に割り当てられ、スレッドｔｈ２がＣＰＵ１８０２に割り当てられ、スレッドｔｈ１がＣＰＵ１８０３に割り当てられている。ＯＳ１８５２は、スレッドｔｈ２の「ｍ＝ｌ；」を実行中であり、変数ｍへ変数ｌの値の代入を実行するため、変数ｌの値の読み出しを実行する。ＯＳ１８５２は、（１）変数ｌの論理アドレスが関連付けられた変数ｌの読み出し要求をＭＭＵ１８１２に通知する。
【０１２０】
ＭＭＵ１８１２は、変数ｌの読み出し要求を受け付けると、（２）受け付けた変数ｌの論理アドレスを変換テーブル２３００に基づいて物理アドレスに変換する。さらに、ＭＭＵ１８１２は該変数ｌの論理アドレスに基づいて変換テーブル２３００から領域属性を抽出する。ＭＭＵ１８１２が、変数ｌの変換後のアドレスと抽出した領域属性とを変数ｌの読み出し要求に関連付けて、関連付けた変数ｌの読み出し要求を分散キャッシュ１８２２に通知する。
【０１２１】
分散キャッシュコントローラ１８３２は、変数ｌの読み出し要求を受け付けると、（４）受け付けた変換後のアドレスに基づいて変数ｌが分散キャッシュメモリ１８４２に格納されているか否かを判断する。ここでは、（４）ミスヒットであると判断される。そして、分散キャッシュコントローラ１８３２は、（５）変換後のアドレスと領域属性とを変数ｌの読み出し要求に関連付けて、関連付けた変数ｌの読み出し要求を共有キャッシュ１８２４に通知する。
【０１２２】
共有キャッシュコントローラ１８３４は変数ｌの読み出し要求を受け付けると、共有キャッシュコントローラ１８３４は、（６）受け付けた領域属性に基づいて変数ｌが共有データであるか否かを判断する。ここでは、変数ｌが非共有データであると判断される。実施の形態２では共有キャッシュメモリ１８４２に非共有データを格納しないこととしているため、共有キャッシュコントローラ１８３４はミスヒットであると判断する。
【０１２３】
そして、共有キャッシュコントローラ１８３４は、（７）変換後のアドレスが関連付けられた変数ｌの読み出し要求を共有メモリ１８０６へ通知することにより、共有メモリ１８０６から変数ｌを読み出す。
【０１２４】
変数ｌが非共有データであるため、共有キャッシュコントローラ１８３４は、（８）共有キャッシュメモリ１８４４に読み出した変数ｌを格納せずに分散キャッシュ１８２２に読み出した変数ｌを転送する。そして、分散キャッシュコントローラ１８３２は（９）変数ｌを分散キャッシュメモリ１８４２に格納する。
【０１２５】
そして、分散キャッシュコントローラ１８３２は、（１０）読み出した変数ｌを実行中のスレッドｔｈ２に受け渡す。そして、「ｍ＝ｌ」が実行される。
【０１２６】
（実施の形態２にかかる共有キャッシュコントローラ１８３４による制御処理手順）
図２７は、実施の形態２にかかる共有キャッシュコントローラ１８３４による制御処理手順を示すフローチャートである。まず、共有キャッシュコントローラ１８３４が、対象変数の書き込み要求または対象変数の読み出し要求を受け付けたか否かを判断する（ステップＳ２７０１）。そして、共有キャッシュコントローラ１８３４が、対象変数の書き込み要求または対象変数の読み出し要求を受け付けていないと判断した場合（ステップＳ２７０１：Ｎｏ）、ステップＳ２７０１へ戻る。
【０１２７】
一方、共有キャッシュコントローラ１８３４が、対象変数の書き込み要求または対象変数の読み出し要求を受け付けたと判断した場合（ステップＳ２７０１：Ｙｅｓ）、対象変数が非共有データであるか否かを判断する（ステップＳ２７０２）。ここで、読み出し要求および書き込み要求には領域情報が関連付けられていることとする。
【０１２８】
つぎに、共有キャッシュコントローラ１８３４が、対象変数が非共有データでないと判断した場合（ステップＳ２７０２：Ｎｏ）、通常のキャッシュ動作を実行し（ステップＳ２７０３）、ステップＳ２７０１へ戻る。
【０１２９】
一方、共有キャッシュコントローラ１８３４が、対象変数が非共有データであると判断した場合（ステップＳ２７０２：Ｙｅｓ）、書き込み要求であるか否かを判断する（ステップＳ２７０４）。共有キャッシュコントローラ１８３４が、書き込み要求であると判断した場合（ステップＳ２７０４：Ｙｅｓ）、共有キャッシュメモリ１８４４に書き込まずに共有メモリ１８０６へ対象変数の書き込み要求を通知し（ステップＳ２７０５）、ステップＳ２７０１へ戻る。
【０１３０】
一方、共有キャッシュコントローラ１８３４が、書き込み要求でないと判断した場合（ステップＳ２７０４：Ｎｏ）、共有メモリ１８０６へ対象変数の読み出し要求を通知し（ステップＳ２７０６）、読み出し結果を受け付けたか否かを判断する（ステップＳ２７０７）。共有キャッシュコントローラ１８３４が、読み出し結果を受け付けていないと判断した場合（ステップＳ２７０７：Ｎｏ）、ステップＳ２７０７へ戻る。
【０１３１】
一方、共有キャッシュコントローラ１８３４が、読み出し結果を受け付けたと判断した場合（ステップＳ２７０７：Ｙｅｓ）、読み出し結果を読み出し要求の要求元の分散キャッシュコントローラへ転送し（ステップＳ２７０８）、ステップＳ２７０１へ戻る。
【０１３２】
（実施の形態３）
実施の形態３では、共有キャッシュメモリ１８４４に空き領域がないが、書き込み要求を受け付けた場合に、該共有キャッシュメモリ１８４４に非共有データと共有データとが格納されている場合、非共有データに上書きする例を説明する。
【０１３３】
また、実施の形態３では、共有キャッシュメモリ１８４４に格納されている各データと対象データとが同一サイズであるとする。また、実施の形態３では、実施の形態２で示したマルチコアプロセッサシステム１８００のハードウェアと同一ハードウェアであるため、同一符号として各説明を省略する。
【０１３４】
（実施の形態３にかかる共有キャッシュコントローラ１８３４の機能ブロック）
図２８は、実施の形態３にかかる共有キャッシュコントローラ１８３４の機能ブロック図である。共有キャッシュコントローラ１８３４は、たとえば、受付部２８０１と、領域判断部２８０２と、特定部２８０３と、共有判断部２８０４と、格納部２８０５と、を有している。
【０１３５】
たとえば、各部をＨＤＬ記述によって機能定義し、該ＨＤＬ記述を論理合成して論理回路等の素子を組み合わせることで、該共有キャッシュコントローラ１８３４内に各部を実現することができる。また、たとえば、各部は共有メモリ１８０６内に制御プログラムとして記憶され、各ＣＰＵのようにプログラムを実行可能な機能を有する共有キャッシュコントローラ１８３４が該制御プログラムをロードして該制御プログラムにコーディングされている処理を実行してもよい。
【０１３６】
受付部２８０１は、一つのスレッドのみで参照される非共有データであるか、複数のスレッドで参照される共有データであるかを示す識別情報を含む対象データに関する、共有キャッシュメモリ１８４４への書き込み要求を受け付ける。
【０１３７】
領域判断部２８０２は、受付部２８０１により書き込み要求が受け付けられると、共有キャッシュメモリ１８４４に対象データを格納可能な空き領域があるか否かを判断する。
【０１３８】
特定部２８０３は、領域判断部２８０２により空き領域が共有キャッシュメモリ１８４４にないと判断された場合、メモリに記憶されているデータから、当該各データが有する識別情報に基づいて非共有データを特定する。
【０１３９】
格納部２８０５は、特定部２８０３により特定された非共有データの領域に対象データを格納する。
【０１４０】
また、共有判断部２８０４は、受付部２８０１により書き込み要求が受け付けられると、対象データが共有データであるか、非共有データであるかを対象データが有する識別情報に基づいて判断する。
【０１４１】
格納部２８０５は、共有判断部２８０４により対象データが非共有データであると判断された場合、対象データを格納せず、共有キャッシュメモリ１８４４よりもアクセス速度が遅いメモリ（実施の形態３では共有メモリ１８０６）に格納する。
【０１４２】
以上を踏まえて具体例を説明する。
【０１４３】
図２９は、非共有データが上書きされる例を示す説明図である。まず、分散キャッシュコントローラ１８３２が、（１）変数ｘの物理アドレスと共有ビットとが関連付けられた変数ｘの書き込み要求を共有キャッシュ１８２４へ通知する。なお、図２９では、領域情報を省略して共有ビットのみを記載している。そして、共有キャッシュコントローラ１８３４が、変数ｘの書き込み要求を受け付けると、共有キャッシュメモリ１８４４に変数ｘを格納可能な空き領域があるか否かを判断する。ここでは、空き領域がないと判断されるとする。
【０１４４】
そして、共有キャッシュコントローラ１８３４が、（２）共有キャッシュメモリ１８４４に格納されているデータの共有ビットに基づいて非共有データを特定し、ここでは、変数ｌが特定される。共有キャッシュコントローラ１８３４が、（３）特定した変数ｌの領域に変数ｘを上書きする。変数ｌのアドレス情報と変数ｌの共有ビットに変数ｘのアドレス情報と変数ｘの共有ビットが上書きされる。ここでは、データの更新方式としてライトスルー方式を例に挙げているため、変数ｌが変数ｘに上書きされているが、データの更新方式がライトバック方式の場合、変数ｘの上書き前に変数ｌを共有メモリ１８０６に追い出しても良い。
【０１４５】
図３０は、対象データが非共有データである例を示す説明図である。まず、分散キャッシュコントローラ１８３２が、（１）変数ｙの物理アドレスと共有ビットとが関連付けられた変数ｙの書き込み要求を共有キャッシュ１８２４へ通知する。なお、図３０では、領域情報を省略して共有ビットのみを記載している。そして、共有キャッシュコントローラ１８３４が、変数ｙの書き込み要求を受け付けると、共有キャッシュメモリ１８４４に変数ｙを格納可能な空き領域があるか否かを判断する。ここでは、空き領域がないと判断される。
【０１４６】
そして、共有キャッシュコントローラ１８３４が、（２）変数ｙが共有データであるか非共有データであるかを受け付けた共有ビットに基づいて判断する。共有ビットが０であるため、変数ｙは非共有データであると判断される。共有キャッシュコントローラ１８３４は（３）変数ｙを共有キャッシュメモリ１８４４に格納せず、（４）アドレスが関連付けられた変数ｙの書き込み要求を共有メモリ１８０６へ通知することにより、共有メモリ１８０６へ変数ｙを書き込む。
【０１４７】
また、空き領域がないと判断された場合に対象データが非共有データであるか否かを判断しているが、空き領域の有無に関わらず、対象データが非共有データであれば、共有キャッシュメモリ１８４４へ格納せずに共有メモリ１８０６に格納してもよい。
【０１４８】
（実施の形態３にかかる共有キャッシュコントローラ１８３４による制御処理手順例１）
図３１は、実施の形態３にかかる共有キャッシュコントローラ１８３４による制御処理手順例１を示すフローチャートである。まず、共有キャッシュコントローラ１８３４は、対象データの書き込み要求を受け付けたか否かを判断する（ステップＳ３１０１）。そして、共有キャッシュコントローラ１８３４は、対象データの書き込み要求を受け付けていないと判断した場合（ステップＳ３１０１：Ｎｏ）、ステップＳ３１０１へ戻る。
【０１４９】
一方、共有キャッシュコントローラ１８３４は、対象データの書き込み要求を受け付けたと判断した場合（ステップＳ３１０１：Ｙｅｓ）、共有キャッシュメモリ１８４４に対象データを格納可能な空き領域があるか否かを判断する（ステップＳ３１０２）。共有キャッシュコントローラ１８３４は、共有キャッシュ１８２４に対象データを格納可能な空き領域があると判断した場合（ステップＳ３１０２：Ｙｅｓ）、共有キャッシュメモリ１８４４内の空き領域に対象データを格納する（ステップＳ３１０３）。
【０１５０】
共有キャッシュコントローラ１８３４は、共有キャッシュ１８２４に対象データを格納可能な空き領域がないと判断した場合（ステップＳ３１０２：Ｎｏ）、共有キャッシュメモリ１８４４に格納されているデータから、当該データに対応するタグ情報の領域情報（共有ビット）に基づいて非共有データを特定する（ステップＳ３１０４）。そして、共有キャッシュコントローラ１８３４は、非共有データを特定したと判断したか否かを判断する（ステップＳ３１０５）。共有キャッシュコントローラ１８３４は、非共有データを特定しなかったと判断した場合（ステップＳ３１０５：Ｎｏ）、共有キャッシュメモリ１８４４に格納されているデータから任意のデータを選択する（ステップＳ３１０６）。
【０１５１】
一方、共有キャッシュコントローラ１８３４は、非共有データを特定したと判断した場合（ステップＳ３１０５：Ｙｅｓ）、特定されたデータから１つのデータを選択する（ステップＳ３１０７）。なお、ここでは、共有キャッシュメモリ１８４４に格納されているデータと対象データとが同一サイズであるとしている。そして、ステップＳ３１０６またはステップＳ３１０７のつぎに、該選択したデータの領域に対象データを格納し（ステップＳ３１０８）、ステップＳ３１０２へ戻る。
【０１５２】
（実施の形態３にかかる共有キャッシュコントローラ１８３４による制御処理手順例２）
図３２は、実施の形態３にかかる共有キャッシュコントローラ１８３４による制御処理手順例２を示すフローチャートである。まず、共有キャッシュコントローラ１８３４は、対象データの書き込み要求を受け付けたか否かを判断する（ステップＳ３２０１）。そして、共有キャッシュコントローラ１８３４は、対象データの書き込み要求を受け付けていないと判断した場合（ステップＳ３２０１：Ｎｏ）、ステップＳ３２０１へ戻る。
【０１５３】
一方、共有キャッシュコントローラ１８３４は、対象データの書き込み要求を受け付けたと判断した場合（ステップＳ３２０１：Ｙｅｓ）、共有キャッシュ１８２４に対象データを格納可能な空き領域があるか否かを判断する（ステップＳ３２０２）。共有キャッシュコントローラ１８３４は、共有キャッシュ１８２４に対象データを格納可能な空き領域があると判断した場合（ステップＳ３２０２：Ｙｅｓ）、共有キャッシュメモリ１８４４内の空き領域に対象データを格納する（ステップＳ３２０３）。
【０１５４】
一方、共有キャッシュコントローラ１８３４は、共有キャッシュ１８２４に対象データを格納可能な空き領域がないと判断した場合（ステップＳ３２０２：Ｎｏ）、対象データが共有データであるか否かを判断する（ステップＳ３２０４）。共有キャッシュコントローラ１８３４は、対象データが共有データでないと判断した場合（ステップＳ３２０４：Ｎｏ）、対象データを共有キャッシュメモリ１８４４に格納せず、共有メモリ１８０６へ書き込み（ステップＳ３２０５）、ステップＳ３２０２へ戻る。
【０１５５】
一方、共有キャッシュコントローラ１８３４は、対象データが共有データであると判断した場合（ステップＳ３２０４：Ｙｅｓ）、共有キャッシュメモリ１８４４に格納されているデータから、当該データに対応するタグ情報の領域情報（共有ビット）に基づいて非共有データを特定する（ステップＳ３２０６）。
【０１５６】
そして、共有キャッシュコントローラ１８３４は、非共有データを特定したと判断したか否かを判断する（ステップＳ３２０７）。共有キャッシュコントローラ１８３４は、非共有データを特定しなかったと判断した場合（ステップＳ３２０７：Ｎｏ）、共有キャッシュメモリ１８４４から任意のデータを選択する（ステップＳ３２０８）。
【０１５７】
一方、共有キャッシュコントローラ１８３４は、非共有データを特定したと判断した場合（ステップＳ３２０７：Ｙｅｓ）、特定されたデータから１つのデータを選択する（ステップＳ３２０９）。そして、ステップＳ３２０８またはステップＳ３２０９のつぎに、共有キャッシュコントローラ１８３４は、該選択したデータの領域に対象データを格納し（ステップＳ３２１０）、ステップＳ３２０２へ戻る。
【０１５８】
以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、共有メモリから対象データを読み出す。そして、対象データが非共有データであれば、読み出した対象データを共有キャッシュメモリに格納させずに該要求元の分散キャッシュメモリに転送する。１スレッドのみに参照される非共有データであれば、該スレッドが割り当てられたＣＰＵのみが該非共有データにアクセスし、他のＣＰＵは該非共有データをアクセスしない。よって、複数のＣＰＵで利用されない非共有データを共有キャッシュメモリに格納せず、複数のＣＰＵで利用される共有データを共有キャッシュメモリに格納できるため、共有キャッシュメモリの領域を有効活用することができる。
【０１５９】
また、以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、対象データの書き込み要求時に、共有キャッシュメモリに空き領域が無い場合、共有キャッシュメモリに格納されているデータから非共有データを特定する。そして、特定した非共有データの領域に対象データを格納する。したがって、複数のＣＰＵで利用される共有データを優先的に共有キャッシュメモリに保持させることができ、共有キャッシュメモリの領域を有効活用することができる。
【０１６０】
また、対象データの書き込み要求時に、対象データが非共有データであれば、対象データを共有キャッシュメモリに格納せずに共有メモリへ格納することにより、共有キャッシュメモリに優先的に共有データを格納することができる。これにより、共有キャッシュメモリに格納させるデータを減らすことにより、共有キャッシュメモリの領域の奪い合いを抑制することができる。
【符号の説明】
【０１６１】
１８０６  共有メモリ
１８０１，１８０２，１８０３  ＣＰＵ
１８３４  共有キャッシュコントローラ
１８４１，１８４２，１８４３  分散キャッシュメモリ
１８４４  共有キャッシュメモリ
２４０１  読み出し部
２４０２  判断部
２４０３  転送部
２８０１  受付部
２８０２  領域判断部
２８０３  特定部
２８０４  共有判断部
２８０５  格納部
【図１】
0005440702.tif 000002
【図２】
0005440702.tif 000003
【図３】
0005440702.tif 000004
【図４】
0005440702.tif 000005
【図５】
0005440702.tif 000006
【図６】
0005440702.tif 000007
【図７】
0005440702.tif 000008
【図８】
0005440702.tif 000009
【図９】
0005440702.tif 000010
【図１０】
0005440702.tif 000011
【図１１】
0005440702.tif 000012
【図１２】
0005440702.tif 000013
【図１３】
0005440702.tif 000014
【図１４】
0005440702.tif 000015
【図１５】
0005440702.tif 000016
【図１６】
0005440702.tif 000017
【図１７】
0005440702.tif 000018
【図１８】
0005440702.tif 000019
【図１９】
0005440702.tif 000020
【図２０】
0005440702.tif 000021
【図２１】
0005440702.tif 000022
【図２２】
0005440702.tif 000023
【図２３】
0005440702.tif 000024
【図２４】
0005440702.tif 000025
【図２５】
0005440702.tif 000026
【図２６】
0005440702.tif 000027
【図２７】
0005440702.tif 000028
【図２８】
0005440702.tif 000029
【図２９】
0005440702.tif 000030
【図３０】
0005440702.tif 000031
【図３１】
0005440702.tif 000032
【図３２】
0005440702.tif 000033