(57)【要約】  キャッシュコントローラ（１２１−２）は、更新要求がない共有メモリ（１０３）の領域を指定する参照要求を示す情報と、スヌープ参照要求を示す情報と、が区別されたプログラムを実行中のＣＰＵ（１０１−２）から参照要求を受け付ける。キャッシュコントローラ（１２１−２）は、更新要求がない共有メモリ（１０３）の領域を指定する参照要求が受け付けられた場合、スヌープ処理を行わずに、共有メモリ（１０３）から指定領域に記憶された情報を取得する。キャッシュコントローラ（１２１−２）は、共有メモリ（１０３）から取得された情報を実行中のＣＰＵ（１０１−２）が有するキャッシュメモリ（１２２−２）に格納する。
2013114540.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵによって共有される共有メモリに記憶された情報または前記共有メモリに格納される情報を一時的に記憶するメモリを前記複数のＣＰＵの各々が有する場合に、前記メモリごとに前記複数のＣＰＵの各々から前記メモリへのアクセスを制御する制御装置であって、
更新要求がない前記共有メモリの領域を指定する参照要求を示す情報と、前記更新要求がある前記共有メモリの領域を指定する参照要求を示す情報と、が区別されたプログラムを実行中のＣＰＵから参照要求を受け付ける受付部と、
前記受付部により前記更新要求がない前記共有メモリの領域を指定する参照要求が受け付けられた場合、前記参照要求により指定された前記共有メモリの指定領域に記憶された情報または格納される情報についての前記実行中のＣＰＵが有するメモリの記憶状態に応じたスヌープ処理を行わずに、前記共有メモリから前記指定領域に記憶された情報を取得する取得部と、
前記取得部によって得られた情報を前記実行中のＣＰＵが有するメモリに格納する格納部と、
を有することを特徴とする制御装置。
【請求項２】
前記取得部は、
前記更新要求がある前記共有メモリの領域を指定する参照要求が受け付けられた場合において、前記指定領域に記憶されたデータが前記実行中のＣＰＵが有するメモリに格納されていると、前記共有メモリから前記指定領域に記憶された情報を取得しないことを特徴とする請求項１に記載の制御装置。
【請求項３】
複数のＣＰＵによって共有される共有メモリに記憶された情報または前記共有メモリに格納される情報を一時的に記憶するメモリを前記複数のＣＰＵの各々が有する場合に、前記メモリごとに前記複数のＣＰＵの各々から前記メモリへのアクセスを制御する制御装置であって、
参照要求がない前記共有メモリの領域を指定する更新要求を示す情報と、前記参照要求がある前記共有メモリの領域を指定する更新要求を示す情報と、が区別されたプログラムを実行中のＣＰＵから更新要求を受け付ける受付部と、
前記受付部により前記参照要求がない前記共有メモリの領域を指定する更新要求が受け付けられた場合、前記更新要求により指定された前記共有メモリの指定領域に記憶された情報または格納される情報についての前記実行中のＣＰＵが有するメモリの記憶状態に応じたスヌープ処理を行わずに、前記共有メモリから前記指定領域に記憶された情報を取得する取得部と、
前記取得部によって得られた情報を前記実行中のＣＰＵが有するメモリに格納する格納部と、
を有することを特徴とする制御装置。
【請求項４】
前記取得部は、
前記参照要求がある前記共有メモリの領域を指定する更新要求が受け付けられた場合において、前記指定領域に記憶されたデータが前記実行中のＣＰＵが有するメモリに格納されていると、前記共有メモリから前記指定領域に記憶された情報を取得しないことを特徴とする請求項３に記載の制御装置。
【請求項５】
プログラムを実行中に、メモリ内の領域ごとに参照要求による指定の有無と更新要求による指定の有無を解析する解析部と、
前記プログラム内の参照要求を示す情報によって指定される前記メモリ内の領域が、前記更新要求による指定の無い領域であるか否かを前記解析部による解析結果に基づいて判断する判断部と、
前記判断部による判断結果を出力する出力部と、
を有することを特徴とする解析装置。
【請求項６】
プログラムを実行中に、メモリ内の領域ごとに参照要求による指定の有無と更新要求による指定の有無を解析する解析部と、
前記プログラム内の更新要求を示す情報によって指定される前記メモリ内の領域が、前記参照要求による指定の無い領域であるか否かを前記解析部による解析結果に基づいて判断する判断部と、
前記判断部による判断結果を出力する出力部と、
を有することを特徴とする解析装置。
【請求項７】
コンピュータが、
プログラムを実行中に、メモリ内の領域ごとに参照要求による指定の有無と更新要求による指定の有無を解析し、
前記プログラム内の参照要求を示す情報によって指定される前記メモリ内の領域が、前記更新要求による指定の無い領域であるか否かを解析結果に基づいて判断し、
判断結果を出力する、
処理を実行することを特徴とする解析方法。
【請求項８】
前記コンピュータが、
前記更新要求による指定の無い領域であると判断された場合、前記参照要求を示す情報を、前記更新要求がない前記メモリ内の領域を指定する参照要求を示す情報に変換する、
処理を実行することを特徴とする請求項７に記載の解析方法。
【請求項９】
コンピュータが、
プログラムを実行中に、メモリ内の領域ごとに参照要求による指定の有無と更新要求による指定の有無を解析し、
前記プログラム内の更新要求を示す情報によって指定される前記メモリ内の領域が、前記参照要求による指定の無い領域であるか否かを解析結果に基づいて判断し、
判断結果を出力する、
処理を実行することを特徴とする解析方法。
【請求項１０】
前記コンピュータが、
前記参照要求による指定の無い領域であると判断された場合、前記プログラム内の更新要求を示す情報を、前記参照要求がない前記メモリの領域を指定する更新要求を示す情報に変換する、
処理を実行することを特徴とする請求項９に記載の解析方法。
【請求項１１】
コンピュータに、
プログラムを実行中に、メモリ内の領域ごとに参照要求による指定の有無と更新要求による指定の有無を解析し、
前記プログラム内の参照要求を示す情報によって指定される前記メモリ内の領域が、前記更新要求による指定の無い領域であるか否かを解析結果に基づいて判断し、
判断結果を出力する、
処理を実行させることを特徴とする解析方法。
【請求項１２】
コンピュータに、
プログラムを実行中に、メモリ内の領域ごとに参照要求による指定の有無と更新要求による指定の有無を解析し、
前記プログラム内の更新要求を示す情報によって指定される前記メモリ内の領域が、前記参照要求による指定の無い領域であるか否かを解析結果に基づいて判断し、
判断結果を出力する、
処理を実行させることを特徴とする解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置に関する。また、本発明は、解析装置、解析方法、および解析プログラムに関する。
【背景技術】
【０００２】
近年、処理性能を向上させるために、複数のコアを１チップに搭載したマルチコアプロセッサシステムが知られている。さらに、処理性能を向上させるために、複数のコアの各々はキャッシュメモリを有している。各キャッシュメモリは１つのジョブを複数のコアで同時に実行できるようにするため、ジョブに関する記憶内容を一致させなければならない。記憶内容を一致させることをキャッシュコヒーレンスと称する。キャッシュコヒーレンスを行うために、キャッシュメモリを制御するキャッシュコントローラは、スヌープ処理を行う。【０００３】
関連する技術としては、たとえば、異なる変数が同一キャッシュラインにアサインされないようにプログラムコードにダミーの変数を挿入する技術が知られている（たとえば、下記特許文献１を参照。）。【０００４】
また、たとえば、キャッシュメモリを制御するキャッシュコントローラはキャッシュラインごとにコヒーレンスの制御を無効化方式にするか、更新方式にするかを切り替える（たとえば、下記特許文献２を参照。）。【０００５】
また、たとえば、キャッシュメモリを制御するキャッシュコントローラは無効化要求をバッファしておき、ある一定回数以上の要求が来たら無効化する技術が知られている（たとえば、下記特許文献３を参照。）。【０００６】
また、たとえば、キャッシュラインが細分化され、キャッシュコントローラは、他のコアが更新を行った場合、更新が行われたブロックのみを無効とし、他のブロックは有効としてキャッシュメモリに保存する技術が知られている（たとえば、下記特許文献４，５を参照。）。【０００７】
また、たとえば、キャッシュラインが細分化され、キャッシュコントローラは、細分化されたキャッシュライン内のブロックごとに排他アクセス権ビットを付与する技術が知られている（たとえば、下記特許文献６を参照。）。【０００８】
また、たとえば、ＣＰＵが２つのキャッシュを有し、ＣＰＵが同時に参照する２つのデータが異なるキャッシュに格納されるようにコードが生成されることにより、２つのデータの参照を競合させない技術が知られている（たとえば、下記特許文献７を参照。）。【０００９】
また、たとえば、アクセス要求で指定されたアドレスが第１のアドレスの場合、キャッシュメモリがアクセスされず、アクセス要求で指定されたアドレスが第２のアドレスの場合、キャッシュメモリがアクセスされる技術が知られている（たとえば、下記特許文献８を参照。）。【００１０】
また、１命令に含まれる複数の変数に関するデータが同一のキャッシュラインに格納されるようにコードが生成される技術が知られている（たとえば、下記特許文献９を参照。）。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００１−１６００３５号公報
【特許文献２】特開２００１−３４５９７号公報
【特許文献３】特開２００２−７３７１号公報
【特許文献４】特開２０００−２６７９３５号公報
【特許文献５】特開２００９−１５１４５７号公報
【特許文献６】国際公開第２００８／１５５８４４号
【特許文献７】特開２００２−７２１３号公報
【特許文献８】特開２００９−２７１６０６号公報
【特許文献９】特許第３７５８９８４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、各コアがキャッシュメモリを有しているため、コアの数が増加すると、１回のスヌープ処理にかかる時間が増加してしまい、処理性能が低下する問題点がある。【００１３】
１つの側面では、本発明は、処理性能の向上を図ることができる制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明の一の側面によれば、複数のＣＰＵによって共有される共有メモリに記憶された情報または前記共有メモリに格納される情報を一時的に記憶するメモリを前記複数のＣＰＵの各々が有する場合に、前記メモリごとに前記複数のＣＰＵの各々から前記メモリへのアクセスを制御する制御装置であって、更新要求がない前記共有メモリの領域を指定する参照要求を示す情報と、前記更新要求がある前記共有メモリの領域を指定する参照要求を示す情報と、が区別されたプログラムを実行中のＣＰＵから参照要求を受け付ける受付部と、前記受付部により前記更新要求がない前記共有メモリの領域を指定する参照要求が受け付けられた場合、前記参照要求により指定された前記共有メモリの指定領域に記憶された情報または格納される情報についての前記実行中のＣＰＵが有するメモリの記憶状態に応じたスヌープ処理を行わずに、前記共有メモリから前記指定領域に記憶された情報を取得する取得部と、前記取得部によって得られた情報を前記実行中のＣＰＵが有するメモリに格納する格納部と、を有する制御装置が提案される。【００１５】
本発明の他の側面によれば、複数のＣＰＵによって共有される共有メモリに記憶された情報または前記共有メモリに格納される情報を一時的に記憶するメモリを前記複数のＣＰＵの各々が有する場合に、前記メモリごとに前記複数のＣＰＵの各々から前記メモリへのアクセスを制御する制御装置であって、参照要求がない前記共有メモリの領域を指定する更新要求を示す情報と、前記参照要求がある前記共有メモリの領域を指定する更新要求を示す情報と、が区別されたプログラムを実行中のＣＰＵから更新要求を受け付ける受付部と、前記受付部により前記参照要求がない前記共有メモリの領域を指定する更新要求が受け付けられた場合、前記更新要求により指定された前記共有メモリの指定領域に記憶された情報または格納される情報についての前記実行中のＣＰＵが有するメモリの記憶状態に応じたスヌープ処理を行わずに、前記共有メモリから前記指定領域に記憶された情報を取得する取得部と、前記取得部によって得られた情報を前記実行中のＣＰＵが有するメモリに格納する格納部と、を有する制御装置が提案される。
【発明の効果】
【００１６】
本発明の一態様によれば、処理性能の向上を図ることができる。
【図面の簡単な説明】
【００１７】
【図１】図１は、キャッシュコントローラの動作例１を示す説明図である。
【図２】図２は、キャッシュコントローラ１２１の動作例２を示す説明図である。
【図３】図３は、キャッシュコントローラ１２１の動作例３を示す説明図である。
【図４】図４は、キャッシュコントローラ１２１の動作例４を示す説明図である。
【図５】図５は、マルチコアプロセッサシステム１００のハードウェア構成例を示す説明図である。
【図６】図６は、キャッシュコントローラ１２１の機能例を示すブロック図である。
【図７】図７は、スヌープ参照要求またはスヌープ更新要求における状態遷移の一例を示す説明図である。
【図８】図８は、ノンスヌープ参照要求またはノンスヌープ更新要求における状態遷移の一例を示す説明図である。
【図９】図９は、解析装置による動作例を示す説明図である。
【図１０】図１０は、解析装置９００の機能例を示すブロック図である。
【図１１】図１１は、解析装置９００が行う解析処理手順例を示すフローチャートである。
【図１２】図１２は、図１１で示した解析処理（ステップＳ１１０２）例の詳細な説明を示すフローチャートである。
【図１３】図１３は、図１１で示した再ビルド処理（ステップＳ１１０３）の第１の例の詳細な説明を示すフローチャートである。
【図１４】図１４は、図１１で示した再ビルド処理（ステップＳ１１０３）の第２の例の詳細な説明を示すフローチャートである。
【発明を実施するための形態】
【００１８】
以下に添付図面を参照して、本発明にかかる制御装置の実施の形態を詳細に説明する。ここでは、制御装置は、マルチコアプロセッサシステムの各ＣＰＵが有するキャッシュメモリを制御するメモリコントローラである。実施の形態１では、マルチコアプロセッサシステムにおいて、ＣＰＵから参照要求と更新要求とを受け付けた制御装置の動作について説明する。実施の形態２では、解析装置は、プログラムをシミュレータによって実行中に、参照要求または更新要求によって指定された共有メモリ内の領域ごとに参照要求と更新要求の有無を解析する。
【００１９】
（実施の形態１）
プログラムを実行中に、「ｉｆ（ｉ＿ｐａｃｋｅｔ［３２］＝＝１）」のような条件判断が発生し、かつキャッシュミスヒットが発生した場合、ｉ＿ｐａｃｋｅｔ［３２］のデータが最新かどうか、いずれかのＣＰＵがデータの書き換えを行っていないかどうかのスヌープ処理が発生する。ｉ＿ｐａｃｋｅｔ［３２］の値はプログラムにおいて固定値であり、参照しかされない場合、スヌープ処理は不要である。そこで、実施の形態１では、制御装置は、更新要求による指定の無い共有メモリ内の領域への参照要求の場合、スヌープ処理により該領域のデータは変化しないため、スヌープ処理を行わずに共有メモリから該領域のデータを取得する。これにより制御装置は、不要なスヌープ処理の回数を減少させることができ、処理性能の向上を図ることができる。
【００２０】
また、プログラムを実行中に、「ｐａｃｋｅｔ＝４」のような代入処理が発生した場合、いずれかのＣＰＵが同じキャッシュラインを保持していないかのスヌープ処理が発生する。ｐａｃｋｅｔの値は、いずれのＣＰＵからも参照されない場合、スヌープ処理は不要である。そこで、実施の形態１では、制御装置は、参照要求による指定の無い共有メモリ内の領域への更新要求の場合、スヌープ処理を行わずに共有メモリから該領域のデータを取得し、取得したデータに更新要求に含まれる更新データを上書きする。これにより、不要なスヌープ処理の回数を減少させることができ、処理性能の向上を図ることができる。
【００２１】
図１は、キャッシュコントローラの動作例１を示す説明図である。図１の上側では、更新要求がある共有メモリ１０３の領域を指定する参照要求をキャッシュコントローラ１２１が受け付けた場合の動作例を示す。図１の下側では、更新要求がある共有メモリ１０３の領域を指定する参照要求をキャッシュコントローラ１２１が受け付けた場合の動作例を示す。更新要求がない共有メモリ１０３の領域を指定する参照要求は以下「ノンスヌープ参照要求」と称する。更新要求がある共有メモリ１０３の領域を指定する参照要求は、以下「スヌープ参照要求」と称する。
【００２２】
たとえば、実行コード内では、ノンスヌープ参照要求を示す情報が「Ｌｏａｄ＿ｎｃ」と記述されていることとする。たとえば、実行コード内では、スヌープ参照要求を示す情報が「Ｌｏａｄ」と記述されていることとする。実行コードとは、アセンブリ言語などのＣＰＵ１０１が識別可能な情報であり、実行コード内には、複数の命令情報が含まれている。命令情報とは、更新要求を示す情報、参照要求を示す情報、演算命令を示す情報が挙げられる。実行コードは、設計者によってＣ言語などのコンピュータ処理言語によって記述されたソースコードがビルドされることにより得られる情報である。ビルドとは、ソースコードのコンパイルとライブラリリンクが行われることにより、実行コードを生成する作業である。
【００２３】
マルチコアプロセッサシステム１００では、複数のＣＰＵ１０１と、共有メモリ１０３と、ＣＰＵ１０１ごとにキャッシュ１０２と、を有している。キャッシュ１０２は、キャッシュメモリ１２２と、キャッシュメモリ１２２へのアクセスを制御するキャッシュコントローラ１２１と、を有している。マルチコアプロセッサシステム１００の詳細なハードウェア構成は図面を用いて後述する。
【００２４】
キャッシュメモリ１２２は、共有メモリ１０３に記憶されたデータまたは共有メモリ１０３に格納するデータを一時的に記憶する。キャッシュメモリ１２２は、キャッシュラインｃｌごとに「Ｔａｇ部」と「Ｄａｔａ部」とがあり、「Ｔａｇ部」は「Ｓｔａｔｕｓ」と、「Ａｄｄｒｅｓｓ」と、を有している。
【００２５】
具体的には、「Ａｄｄｒｅｓｓ」には、格納対象となる共有メモリ１０３内の領域の先頭アドレスが登録される。「Ｄａｔａ部」には、「Ａｄｄｒｅｓｓ」に格納された先頭アドレスが示す共有メモリ１０３内の領域から１キャッシュラインｃｌのサイズ分の共有メモリ１０３内の領域のデータが格納される。
【００２６】
「Ｓｔａｔｕｓ」には、キャッシュラインｃｌの状態が登録される。キャッシュラインｃｌの状態としては、「Ｍ」「Ｅ」「Ｓ」「Ｉ」の４つの状態がある。ここでは、「Ｍｏｄｉｆｉｅｄ」は以降単に「Ｍ」と記載し、「Ｅｘｃｌｕｓｉｖｅ」は以降単に「Ｅ」と記載し、「Ｓｈａｒｅｄ」は以降単に「Ｓ」と記載し、「Ｉｎｖａｌｉｄ」は以降単に「Ｉ」と記載する。
【００２７】
キャッシュラインｃｌの「Ｓｔａｔｕｓ」に「Ｍ」が記憶されている場合、該キャッシュラインｃｌを有するキャッシュメモリ１２２だけに存在し、共有メモリ１０３上の値から変更されていることを示している。キャッシュラインｃｌの「Ｓｔａｔｕｓ」に「Ｍ」が記憶されている場合、該キャッシュラインｃｌを有するキャッシュメモリ１２２だけに存在するが、共有メモリ１０３上の値と一致していることを示している。
【００２８】
キャッシュラインｃｌの「Ｓｔａｔｕｓ」に「Ｓ」が記憶されている場合、該キャッシュラインｃｌを有するキャッシュメモリ１２２以外のキャッシュメモリ１２２にも存在し、共有メモリ１０３上の値と一致していることを示している。キャッシュラインｃｌの「Ｓｔａｔｕｓ」に「Ｉ」が記憶されている場合、該キャッシュラインｃｌは無効であることを示している。
【００２９】
図１の例では、理解の容易化のために、各キャッシュラインｃｌには、「Ｓｔａｔｕｓ」、「Ａｄｄｒｅｓｓ」の代わりに「領域情報」、「Ｄａｔａ」、の順で記憶されることとする。
【００３０】
まず、図１の上側について、キャッシュコントローラ１２１−２が、ノンスヌープ参照要求を受け付けた場合の動作例について説明する。キャッシュラインｃｌ１−１とキャッシュラインｃｌ１−２に「Ｉ」が登録されているのは、キャッシュメモリ１２２に定数ａの値が登録されていないことを示している。
【００３１】
キャッシュコントローラ１２１−２は、ＣＰＵ１０１−２からの参照要求を受け付ける。たとえば、ＣＰＵ１０１−２とキャッシュコントローラ１２１−２とを接続する信号線は、ノンスヌープ参照要求と、スヌープ参照要求と、に応じてそれぞれ分けられている。たとえば、ＣＰＵ１０１−２は、参照要求が「Ｌｏａｄ＿ｎｃ」であれば、「Ｌｏａｄ＿ｎｃ」に応じた信号線にイネーブル信号を出力し、参照要求が「Ｌｏａｄ」であれば、「Ｌｏａｄ」に応じた信号線にイネーブル信号を出力する。したがって、キャッシュコントローラ１２１−２は、いずれの信号線にイネーブル信号が入力されたかによって、いずれの参照要求を受け付けたかを判別できる。
【００３２】
そして、キャッシュコントローラ１２１−２は、ノンスヌープ参照要求を受け付けた場合、スヌープ処理を実行せずに、共有メモリ１０３から参照要求によって指定された指定領域に記憶されたデータを取得する。キャッシュの１キャッシュラインは、ＣＰＵ１０１が処理するデータサイズより大きなデータサイズで管理されることがある。ここでは、指定領域を含む１キャッシュラインｃｌ分の共有メモリ１０３内の領域は、領域Ａ１である。そのため、領域Ａ１に記憶された変数ａの値と変数ｂの値が取得される。領域Ａ１に記憶された変数ａと変数ｂのいずれか一方が参照される参照要求が発生しても、１キャッシュラインｃｌ分のデータとして、変数ａと変数ｂの両方の値が取得される。
【００３３】
そして、キャッシュコントローラ１２１−２は、キャッシュメモリ１２２―２に共有メモリ１０３から取得したデータを格納する。スヌープ処理とは、キャッシュメモリ１２２内の記憶状態に応じて、他のキャッシュメモリ１２２との記憶内容を一致させるために行う処理である。
【００３４】
具体的には、たとえば、キャッシュコントローラ１２１−２は、「Ｌｏａｄ＿ｎｃ」を受け付けた場合、共有メモリ１０３を制御するメモリコントローラに対して、領域Ａ１に記憶されたデータを取得する参照要求を送る。具体的には、該参照要求では、参照対象のデータが記憶された領域の先頭アドレスが指定される。
【００３５】
そして、共有メモリ１０３を制御するメモリコントローラは、領域Ａ１にアクセスし、記憶されたデータを読み出す。共有メモリ１０３を制御するメモリコントローラは、要求元のキャッシュコントローラ１２１−２に読み出したデータを通知する。ここでは、キャッシュコントローラ１２１−２は、定数ａの値と定数ｂの値を取得する。定数ａと定数ｂのいずれに参照要求が発生しても、１キャッシュラインｃｌ分のデータとして、定数ａと定数ｂの両方の値が取得される。
【００３６】
つぎに、たとえば、キャッシュコントローラ１２１−２は、取得した定数ａの値および定数ｂの値と、領域Ａ１の先頭アドレスと、を関連付けて、キャッシュメモリ１２２―２に格納する。図１では、領域Ａ１の先頭アドレスの代わりに、領域情報として「Ａ１」がキャッシュラインｃｌ１−２に登録されている。そして、キャッシュコントローラ１２１−２は、取得したデータが格納されたキャッシュラインｃｌ１−２の「Ｓｔａｔｕｓ」を「Ｅ」に設定する。そして、キャッシュコントローラ１２１−２は、ＣＰＵ１０１−２に応答する。参照要求の場合、キャッシュコントローラ１２１−２は、参照要求に応じたデータを通知する。
【００３７】
つぎに、図１の下側について、キャッシュコントローラ１２１−２が、ノンスヌープ参照要求を受け付けた場合の動作例について説明する。キャッシュラインｃｌ２−１とキャッシュラインｃｌ２−２に「Ｉ」が登録されているのは、キャッシュメモリ１２２に変数ｃの値が登録されていないことを示している。
【００３８】
上述したように、キャッシュコントローラ１２１−２は、参照要求を受け付ける。キャッシュコントローラ１２１−２は、スヌープ参照要求を受け付けた場合、キャッシュメモリ１２２内の記憶内容に応じてスヌープ処理を実行する。
【００３９】
具体的には、キャッシュコントローラ１２１−２は、キャッシュメモリ１２２に変数ｃが記憶されているか否かを判断する。たとえば、キャッシュコントローラ１２１−２は、キャッシュメモリ１２２−２に変数ｃが記憶されていないと判断された場合、他のキャッシュ１０２−１に変数ｃについてスヌープ処理を実行する。
【００４０】
たとえば、キャッシュメモリ１２２−１には、変数ｃが登録されていない。ここでは、スヌープ処理によって、変数ｃの値が得られなかったため、キャッシュコントローラ１２１−２は、共有メモリ１０３から指定領域に記憶されたデータを取得する。指定領域を含む１キャッシュラインｃｌ分の共有メモリ内の領域は、領域Ａ２である。そのため、領域Ａ２に記憶された変数ｃの値と変数ｄの値が取得される。領域Ａ２に記憶された変数ｃと変数ｄのいずれか一方が参照される参照要求が発生しても、１キャッシュラインｃｌ分のデータとして、変数ｃと変数ｄの両方の値が取得される。
【００４１】
そして、キャッシュコントローラ１２１−２は、取得したデータと、領域Ａ２の先頭アドレスと、をキャッシュメモリ１２２に格納する。図１では、領域Ａ２の先頭アドレスの代わりに、領域情報として「Ａ２」がキャッシュラインｃｌ２−２に登録されている。そして、キャッシュコントローラ１２１−２は、取得したデータが格納されたキャッシュラインｃｌ２−２の「Ｓｔａｔｕｓ」に「Ｅ」を設定する。そして、キャッシュコントローラ１２１−２は、ＣＰＵ１０１−２に応答する。参照要求の場合、キャッシュコントローラ１２１−２は、参照要求に応じた参照データを通知する。
【００４２】
図１の上側と図１の下側との比較によれば、キャッシュコントローラ１２１は、更新要求がない共有メモリ１０３内の領域を指定する参照要求の場合に、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができる。したがって、処理能力を向上させることができる。
【００４３】
図２は、キャッシュコントローラ１２１の動作例２を示す説明図である。図２では、キャッシュコントローラ１２１−２が、ノンスヌープ参照要求を受け付けた場合において、すでにキャッシュメモリ１２２に参照要求によって指定された共有メモリ１０３内の指定領域に記憶されたデータがある場合の動作例である。
【００４４】
キャッシュコントローラ１２１−２は、ノンスヌープ参照要求を受け付けた場合、キャッシュメモリ１２２に参照要求によって指定された共有メモリ１０３内の指定領域に格納されたデータがあるか否かを判断する。上述したように、ノンスヌープ参照要求を受け付けた場合、キャッシュコントローラ１２１−２は、スヌープ処理を行わない。
【００４５】
具体的には、たとえば、キャッシュコントローラ１２１−２は、キャッシュメモリ１２２から「Ｓｔａｔｕｓ」に「Ｍ」、「Ｅ」、「Ｓ」のいずれかが設定されたキャッシュラインｃｌを探索する。たとえば、キャッシュコントローラ１２１−２は、探索したキャッシュラインｃｌに格納されたアドレスから、該アドレスに１キャッシュラインｃｌのデータサイズを加算したアドレスまでの間に参照要求が指定するアドレスが含まれるか否かを判断する。含まれている場合、キャッシュコントローラ１２１−２は、参照要求によって指定された共有メモリ１０３の指定領域に記憶されたデータがキャッシュメモリ１２２−２に記憶されていると判断する。一方、含まれていない場合、キャッシュコントローラ１２１−２は、参照要求によって指定された共有メモリ１０３の指定領域に記憶されたデータがキャッシュメモリ１２２に記憶されていないと判断する。
【００４６】
つぎに、参照要求によって指定された共有メモリ１０３の指定領域に記憶されたデータがキャッシュメモリ１２２−２に記憶されている場合、キャッシュコントローラ１２１−２は、キャッシュメモリ１２２−２から該データを読み出す。そして、キャッシュコントローラ１２１−２は、ＣＰＵ１０１−２へ応答する。
【００４７】
また、参照要求によって指定された指定領域に記憶されたデータがキャッシュメモリ１２２に記憶されていない場合、キャッシュコントローラ１２１−２は、図１に示したように共有メモリ１０３から指定領域のデータを読み出す。
【００４８】
これにより、更新要求のない共有メモリ１０３内の領域への参照要求について、キャッシュメモリ１２２に参照対象となるデータが記憶されていれば、キャッシュコントローラ１２１−２は、直ちにＣＰＵ１０１−２へ応答することができる。したがって、キャッシュコントローラ１２１−２は、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができ、処理能力を向上させることができる。
【００４９】
図３は、キャッシュコントローラ１２１の動作例３を示す説明図である。図３の上側では、ノンスヌープ更新要求をキャッシュコントローラ１２１−２が受け付けた場合の動作例を示す。図３の下側では、参照要求がある共有メモリ１０３の領域を指定する更新要求をキャッシュコントローラ１２１−２が受け付けた場合の動作例を示す。参照要求がない共有メモリ１０３の領域を指定する更新要求は以下「ノンスヌープ更新要求」と称する。参照要求がある共有メモリ１０３の領域を指定する更新要求は、以下「スヌープ更新要求」と称する。  
【００５０】
たとえば、プログラム内では、ノンスヌープ更新要求を示すコードが「Ｓｔｏｒｅ＿ｎｃ」と記述され、スヌープ更新要求を示すコードが「Ｓｔｏｒｅ」と記述されていることとする。
【００５１】
まず、図３の上側について、キャッシュコントローラ１２１−２が、ノンスヌープ更新要求を受け付けた場合の動作例について説明する。キャッシュラインｃｌ３−１とキャッシュラインｃｌ３−２に「Ｉ」が登録されているのは、キャッシュメモリ１２２に変数ｅの値が登録されていないことを示している。
【００５２】
キャッシュコントローラ１２１−２は、ＣＰＵ１０１−２からの更新要求を受け付ける。たとえば、ＣＰＵ１０１−２とキャッシュコントローラ１２１−２とを接続する信号線は、ノンスヌープ更新要求と、スヌープ更新要求と、に応じてそれぞれ分けられている。たとえば、ＣＰＵ１０１−２は、更新要求が「Ｓｔｏｒｅ＿ｎｃ」であれば、「Ｓｔｏｒｅ＿ｎｃ」に応じた信号線にイネーブル信号を出力し、更新要求が「Ｓｔｏｒｅ」であれば、「Ｓｔｏｒｅ」に応じた信号線にイネーブル信号を出力する。したがって、キャッシュコントローラ１２１−２は、いずれの信号線にイネーブル信号が入力されたかによって、いずれの更新要求を受け付けたかを判別できる。
【００５３】
そして、キャッシュコントローラ１２１−２は、ノンスヌープ更新要求を受け付けた場合、スヌープ処理を実行せずに、共有メモリ１０３から更新要求によって指定された指定領域に記憶されたデータを取得する。そして、キャッシュコントローラ１２１−２は、キャッシュメモリ１２２−２に共有メモリ１０３から取得したデータを格納する。
【００５４】
たとえば、キャッシュコントローラ１２１−２は、受け付けた更新要求が「Ｓｔｏｒｅ＿ｎｃ」の場合、共有メモリ１０３を制御するメモリコントローラに、該更新要求によって指定された共有メモリ１０３内の指定領域に記憶されたデータを取得する更新要求を送る。たとえば、更新要求では、参照対象のデータが記憶された領域の先頭アドレスが指定されている。
【００５５】
そして、共有メモリ１０３を制御するメモリコントローラは、共有メモリ１０３の指定領域にアクセスし、記憶されたデータを読み出す。共有メモリ１０３を制御するメモリコントローラは、要求元のキャッシュコントローラ１２１−２に読み出したデータを通知する。ここでは、キャッシュコントローラ１２１−２は、変数ｅの値と変数ｆの値を取得する。変数ｅと変数ｆのいずれに更新要求が発生しても、１キャッシュラインｃｌ分のデータとして、変数ｅと変数ｆの両方の値が取得される。
【００５６】
つぎに、たとえば、キャッシュコントローラ１２１−２は、取得した変数ｅと変数ｆの値と、受け付けた更新要求に指定された指定領域の先頭アドレスとを関連付けて、キャッシュメモリ１２２に格納する。そして、たとえば、キャッシュコントローラ１２１−２は、取得したデータが格納されたキャッシュラインｃｌ３−２に、更新要求に含まれる更新データを上書きする。そして、キャッシュコントローラ１２１−２は、上書きが行われたキャッシュラインｃｌ３−２の「Ｓｔａｔｕｓ」を「Ｍ」に設定する。そして、キャッシュコントローラ１２１−２は、ＣＰＵ１０１−２に応答する。具体的には、たとえば、更新要求の場合、キャッシュコントローラ１２１−２は、更新要求の終了をＣＰＵ１０１−２に通知する。
【００５７】
つぎに、図３の下側について、キャッシュコントローラ１２１−２が、スヌープ更新要求を受け付けた場合の動作例について説明する。キャッシュラインｃｌ４−１とキャッシュラインｃｌ４−２に「Ｉ」が登録されているのは、キャッシュメモリ１２２に変数ｇの値が登録されていないことを示している。
【００５８】
上述したように、キャッシュコントローラ１２１−２は、ＣＰＵ１０１−２から更新要求を受け付ける。キャッシュコントローラ１２１−２は、スヌープ更新要求を受け付けた場合、キャッシュメモリ１２２内の記憶内容に応じてスヌープ処理を実行する。
【００５９】
具体的には、キャッシュコントローラ１２１−２は、キャッシュメモリ１２２−２に変数ｇが記憶されているか否かを判断する。たとえば、キャッシュメモリ１２２−２に変数ｇが記憶されていないと判断された場合、キャッシュコントローラ１２１−２は、他のキャッシュ１０２−１に変数ｇについてスヌープ処理を実行する。ここでは、スヌープ処理によって、変数ｇの値が得られなかったため、キャッシュコントローラ１２１−２は、共有メモリ１０３から指定領域に記憶されたデータを取得する。ここでは、変数ｇの値と変数ｈの値が取得される。変数ｇと変数ｈのいずれに更新要求が発生しても、１キャッシュラインｃｌ分のデータとして、変数ｇと変数ｈの両方の値が取得される。
【００６０】
そして、キャッシュコントローラ１２１−２は、取得したデータをキャッシュメモリ１２２−２に格納する。そして、たとえば、キャッシュコントローラ１２１−２は、取得したデータが格納されたキャッシュラインｃｌ４−２に、更新要求に含まれる更新データを上書きする。そして、キャッシュコントローラ１２１−２は、上書きが行われたキャッシュラインｃｌ４−２の「Ｓｔａｔｕｓ」を「Ｍ」に設定する。そして、キャッシュコントローラ１２１−２は、ＣＰＵ１０１−２に応答する。具体的には、たとえば、更新要求の場合、キャッシュコントローラ１２１−２は、更新要求の終了をＣＰＵ１０１−２に通知する。
【００６１】
図３の上側と図３の下側との比較によれば、キャッシュコントローラ１２１−２は、参照要求がない共有メモリ１０３内の領域を指定する更新要求の場合に、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができる。したがって、処理能力を向上させることができる。
【００６２】
図４は、キャッシュコントローラ１２１の動作例４を示す説明図である。図４では、キャッシュコントローラ１２１が、ノンスヌープ更新要求を受け付けた場合において、すでにキャッシュメモリ１２２に更新要求によって指定された共有メモリ１０３内の指定領域に記憶されたデータがある場合の動作例である。
【００６３】
キャッシュコントローラ１２１−２は、ノンスヌープ更新要求を受け付けた場合、キャッシュメモリ１２２に更新要求によって指定された共有メモリ１０３内の指定領域に格納されたデータがあるか否かを判断する。上述したように、ノンスヌープ更新要求を受け付けた場合、キャッシュコントローラ１２１−２は、スヌープ処理を行わない。
【００６４】
具体的には、たとえば、キャッシュコントローラ１２１−２は、キャッシュメモリ１２２から「Ｓｔａｔｕｓ」に「Ｍ」、「Ｅ」、「Ｓ」のいずれかが設定されたキャッシュラインｃｌを探索する。そして、たとえば、キャッシュコントローラ１２１−２は、探索したキャッシュラインｃｌに格納されたアドレスから、該アドレスに１キャッシュラインｃｌのデータサイズを加算したアドレスまでの間に更新要求が指定するアドレスが含まれているかを判断する。含まれている場合、キャッシュコントローラ１２１−２は、更新要求によって指定された共有メモリ１０３の指定領域に記憶されたデータがキャッシュメモリ１２２−２に記憶されていると判断する。一方、含まれていない場合、キャッシュコントローラ１２１−２は、更新要求によって指定された共有メモリ１０３の指定領域に記憶されたデータがキャッシュメモリ１２２−２に記憶されていると判断する。
【００６５】
つぎに、更新要求が指定する指定領域に記憶されたデータがキャッシュメモリ１２２に記憶されている場合、キャッシュコントローラ１２１−２は、該指定領域に記憶されたデータを記憶するキャッシュラインｃｌ３−２に更新要求の更新データを上書きする。図４の例では、変数ｅの値が４から３に上書きされた。そして、キャッシュコントローラ１２１−２は、ＣＰＵ１０１−２へ応答する。
【００６６】
また、更新要求によって指定された指定領域に記憶されたデータがキャッシュメモリ１２２に記憶されていない場合、キャッシュコントローラ１２１−２は、図３に示したような動作を行う。
【００６７】
これにより、参照要求のない共有メモリ１０３内の領域への更新要求について、キャッシュメモリ１２２−２に参照対象となるデータが記憶されていれば、キャッシュコントローラ１２１−２は、直ちにＣＰＵ１０１−２へ応答することができる。したがって、キャッシュコントローラ１２１−２は、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができ、処理能力を向上させることができる。
【００６８】
これにより、ノンスヌープ更新要求で指定された指定領域のデータがキャッシュメモリ１２２−２に記憶されていれば、キャッシュコントローラ１２１−２は、直ちにキャッシュメモリ１２２−２に更新要求の更新データを上書きする。したがって、キャッシュコントローラ１２１−２は、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができ、処理能力を向上させることができる。
【００６９】
（マルチコアプロセッサシステム１００のハードウェア構成例）
図５は、マルチコアプロセッサシステム１００のハードウェア構成例を示す説明図である。本実施の形態のマルチコアプロセッサシステム１００において、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００７０】
マルチコアプロセッサシステム１００は、複数のＣＰＵ１０１と、各々のＣＰＵ１０１に対応したキャッシュ１０２と、共有メモリ１０３と、メモリコントローラ１０４と、ストレージ１０５と、を有している。さらに、マルチコアプロセッサシステム１００は、Ｉ／Ｆ（ＩｎｔｅｒＦａｃｅ）１０６と、ディスプレイ１０７と、マウス１０８と、キーボード１０９と、を有している。キャッシュ１０２と、共有メモリ１０３と、メモリコントローラ１０４と、ストレージ１０５と、Ｉ／Ｆ１０６と、ディスプレイ１０７と、マウス１０８と、キーボード１０９とは、バス１１０を介して接続されている。複数のＣＰＵ１０１は、キャッシュ１０２を介してバス１１０と接続されている。
【００７１】
ここで、たとえば、ＣＰＵ１０１−１は、マルチコアプロセッサシステム１００の全体の制御を司る。たとえば、ＣＰＵ１０１−１は、利用者によって起動されたアプリケーションのスレッドをいずれのＣＰＵ１０１に割り当てるかをスケジューリングする。アプリケーションは、ジョブであり、スレッドとは、ＣＰＵ１０１の処理単位である。たとえば、ＣＰＵ１０１−１〜ＣＰＵ１０１−ｎは、割り当てられたスレッドを実行する。キャッシュ１０２は、キャッシュコントローラ１２１と、キャッシュメモリ１２２と、を有している。
【００７２】
共有メモリ１０３は、複数のＣＰＵ１０１で共有され、ＣＰＵ１０１のワークエリアとして使用される。共有メモリ１０３としては、たとえば、ＲＡＭが挙げられる。メモリコントローラ１０４は、複数のＣＰＵ１０１から共有メモリ１０３へのアクセスを制御する。ストレージ１０５は、ブートプログラムやアプリケーションのプログラムを記憶している。ストレージ１０５としては、たとえば、磁気ディスクが挙げられる。
【００７３】
Ｉ／Ｆ１０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークＮＷに接続され、このネットワークＮＷを介して他の装置に接続される。そして、Ｉ／Ｆ１０６は、ネットワークＮＷと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０６には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００７４】
ディスプレイ１０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ１０７は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００７５】
キーボード１０９は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス１０８は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００７６】
（キャッシュコントローラ１２１の機能例）
図６は、キャッシュコントローラ１２１の機能例を示すブロック図である。図６では、ＣＰＵ１０１とキャッシュ１０２との接続関係と、キャッシュコントローラ１２１の具体的な機能例を示す。上述したように、キャッシュメモリ１２２は、キャッシュラインｃｌの集合である。各キャッシュラインｃｌは、「Ｔａｇ部」と「Ｄａｔａ部」とのフィールドを有している。「Ｔａｇ部」は、「Ｓｔａｔｕｓ」と「Ａｄｄｒｅｓｓ」とのフィールドを有している。
【００７７】
ＣＰＵ１０１とキャッシュコントローラ１２１とは、「Ａｄｄｒｅｓｓ」と各種要求をＣＰＵ１０１からキャッシュコントローラ１２１へ入力する信号線と、Ｄａｔａを互いに入出力する信号線と、によって接続されている。ここでは、各種要求には、「Ｌｏａｄ」と「Ｌｏａｄ＿ｎｃ」と、「Ｓｔｏｒｅ」と「Ｓｔｏｒｅ＿ｎｃ」と、がある。キャッシュコントローラ１２１とキャッシュメモリ１２２とは、「Ｓｔａｔｕｓ」と、「Ａｄｄｒｅｓｓ」と、「Ｄａｔａ」と、を互いに入出力する信号線によって接続されている。さらに、キャッシュコントローラ１２１とキャッシュメモリ１２２とは、書き込みと読み出しのいずれの信号であるかを示す「Ｒｅａｄ／Ｗｒｉｔｅ」の信号線によって接続されている。
【００７８】
キャッシュコントローラ１２１は、受付部６０１と、取得部６０２と、格納部６０３と、応答部６０４と、を有している。キャッシュコントローラ１２１の各部は、ＮＡＮＤ回路、ＮＯＲ回路やＦＦ（Ｆｌｉｐ  Ｆｌｏｐ）などの回路素子によって実現される。または、キャッシュコントローラ１２１は演算装置を有し、各機能および各動作を実現するプログラムを該演算装置が実行することにより実現されてもよい。つぎに、本実施の形態にかかる各部の詳細な説明をする。
【００７９】
受付部６０１は、ノンスヌープ参照要求を示す情報と、スヌープ参照要求を示す情報と、が区別されたプログラムを実行中のＣＰＵ１０１から参照要求を受け付ける。ここで、プログラムとは、上述した実行コードである。具体的には、たとえば、受付部６０１は、ＣＰＵ１０１によって「Ｌｏａｄ」の信号線または「Ｌｏａｄ＿ｎｃ」の信号線にイネーブル信号が入力されることにより、参照要求を受け付ける。ＣＰＵ１０１は、「Ｌｏａｄ」の信号線または「Ｌｏａｄ＿ｎｃ」の信号線にイネーブル信号を出力すると同時に「Ａｄｄｒｅｓｓ」の信号線にアドレス情報を出力する。
【００８０】
つぎに、取得部６０２は、受付部６０１によりノンスヌープ参照要求が受け付けられた場合、スヌープ処理を行わずに、共有メモリ１０３から指定領域に記憶された情報を取得する。具体的には、たとえば、取得部６０２は、受付部６０１により「Ｌｏａｄ＿ｎｃ」を受け付けた場合、「Ａｄｄｒｅｓｓ」の信号線に入力されたアドレス情報が示す共有メモリ１０３内の領域に記憶されたデータを、バスとメモリコントローラ１０４を介して取得する。
【００８１】
そして、格納部６０３は、取得部６０２によって得られた情報を実行中のＣＰＵ１０１が有するキャッシュメモリ１２２に格納する。具体的には、たとえば、格納部６０３は、「Ｒｅａｄ／Ｗｒｉｔｅ」の信号線に「Ｗｒｉｔｅ」を示す信号、「Ｓｔａｔｕｓ」の信号線に「Ｍ」、を出力する。同時に、たとえば、格納部６０３は、「Ａｄｄｒｅｓｓ」の信号線に受け付けたアドレス情報を含む共有メモリ１０３内の領域の先頭アドレス情報、「Ｄａｔａ」の信号線に取得部６０２によって取得されたデータを出力する。これにより、キャッシュメモリ１２２は、いずれかのキャッシュラインｃｌに取得されたデータを格納する。
【００８２】
また、取得部６０２は、スヌープ参照要求が受け付けられた場合において、受け付けた参照要求に指定された指定領域に記憶されたデータがキャッシュメモリ１２２に格納されている場合、共有メモリ１０３から指定領域に記憶された情報を取得しない。
【００８３】
また、受付部６０１は、ノンスヌープ更新要求を示す情報と、スヌープ更新要求を示す情報と、が区別されたプログラムを実行中のＣＰＵ１０１から更新要求を受け付ける。具体的には、たとえば、受付部６０１は、ＣＰＵ１０１によって「Ｓｔｏｒｅ」の信号線または「Ｓｔｏｅｒ＿ｎｃ」の信号線にイネーブル信号が入力されることにより、更新要求を受け付ける。ＣＰＵ１０１は、「Ｓｔｏｒｅ」の信号線または「Ｓｔｏｒｅ＿ｎｃ」の信号線にイネーブル信号を出力すると同時に「Ａｄｄｒｅｓｓ」の信号線にアドレス情報を出力する。
【００８４】
つぎに、取得部６０２は、受付部６０１によりノンスヌープ更新要求が受け付けられた場合、スヌープ処理を行わずに、共有メモリ１０３から指定領域に記憶された情報を取得する。具体的には、たとえば、取得部６０２は、受付部６０１により「Ｓｔｏｒｅ＿ｎｃ」を受け付けた場合、「Ａｄｄｒｅｓｓ」の信号線に入力されたアドレス情報が示す共有メモリ１０３内の領域に記憶されたデータを、バスとメモリコントローラ１０４を介して取得する。
【００８５】
そして、格納部６０３は、取得部６０２によって得られた情報を実行中のＣＰＵ１０１が有するキャッシュメモリ１２２に格納する。具体的には、たとえば、格納部６０３は、「Ｒｅａｄ／Ｗｒｉｔｅ」の信号線に「Ｗｒｉｔｅ」を示す信号と、「Ｓｔａｔｕｓ」の信号線に「Ｍ」と、をキャッシュメモリ１２２に出力する。同時に、たとえば、格納部６０３は、「Ａｄｄｒｅｓｓ」の信号線に受け付けたアドレス情報を含む共有メモリ１０３内の領域の先頭アドレス情報と、「Ｄａｔａ」の信号線に取得部６０２によって取得されたデータと、を出力する。これにより、キャッシュメモリ１２２は、いずれかのキャッシュラインｃｌに取得されたデータを格納する。
【００８６】
また、取得部６０２は、スヌープ更新要求が受け付けられた場合において、受け付けた更新要求に指定された指定領域に記憶されたデータがキャッシュメモリ１２２に格納されている場合、共有メモリ１０３から指定領域に記憶された情報を取得しない。
【００８７】
（状態遷移例）
つぎに、通常の参照要求または更新要求における「Ｓｔａｔｕｓ」に設定される状態の遷移と、実施の形態１にかかる参照要求または更新要求における「Ｓｔａｔｕｓ」に設定される状態の遷移と、について説明する。
【００８８】
図７は、スヌープ参照要求またはスヌープ更新要求における状態遷移の一例を示す説明図である。図７では、キャッシュコントローラ１２１がスヌープ参照要求またはスヌープ更新要求を受け付けた場合において、該要求によって更新または参照されるキャッシュラインｃｌに設定される「Ｓｔａｔｕｓ」の状態遷移図を示している。図７において、実線によって示す遷移は、キャッシュラインｃｌを有するキャッシュメモリ１２２を制御するキャッシュコントローラ１２１が受け付けた要求に沿った遷移である。破線によって示す遷移は、キャッシュ１０２からのスヌープ処理による遷移である。遷移に付された情報が遷移条件である。各状態において、遷移条件が満たされると、状態が遷移する。各遷移条件について説明する。
【００８９】
「Ｒｅａｄ  Ｈｉｔ」とは、スヌープ参照要求を受け付けたキャッシュコントローラ１２１が制御するキャッシュメモリ１２２に、スヌープ参照要求が示す共有メモリ１０３内の領域に記憶されたデータが格納されていることを示している。
【００９０】
「Ｒｅａｄ  Ｍｉｓｓ（Ｓｎｏｏｐ  ｈｉｔ）」とは、スヌープ参照要求を受け付けたキャッシュコントローラ１２１が制御するキャッシュメモリ１２２に、スヌープ参照要求が示す共有メモリ１０３内の領域に記憶されたデータが格納されていない。そして、キャッシュコントローラ１２１がスヌープ処理によって他のキャッシュメモリ１２２から該データが得られたことを示している。
【００９１】
「Ｒｅａｄ  Ｍｉｓｓ（Ｓｎｏｏｐ  ｍｉｓｓ）」とは、スヌープ参照要求を受け付けたキャッシュコントローラ１２１が制御するキャッシュメモリ１２２に、スヌープ参照要求が示す共有メモリ１０３内の領域に記憶されたデータが格納されていない。そして、キャッシュコントローラ１２１が、スヌープ処理によって他のキャッシュメモリ１２２から該データが得られないために、共有メモリ１０３から該データを取得することを示している。
【００９２】
「Ｗｒｉｔｅ  Ｈｉｔ」とは、スヌープ更新要求を受け付けたキャッシュコントローラ１２１が制御するキャッシュメモリ１２２に、スヌープ更新要求が示す共有メモリ１０３内の領域に記憶されたデータが含まれている。そして、キャッシュコントローラ１２１が該データにスヌープ更新要求が含むデータを上書きすることを示している。
【００９３】
「Ｗｒｉｔｅ  Ｍｉｓｓ」とは、スヌープ更新要求を受け付けたキャッシュコントローラ１２１が制御するキャッシュメモリ１２２にスヌープ更新要求が示す共有メモリ１０３内の領域に記憶されたデータが含まれていない。そして、キャッシュコントローラ１２１がスヌープ処理によって他のキャッシュメモリ１２２からデータを取得する。そして、キャッシュコントローラ１２１が該データにスヌープ更新要求が含むデータを上書きすることを示している。
【００９４】
「Ｗｒｉｔｅ  Ｂａｃｋ」とは、スヌープ更新要求を受け付けたキャッシュコントローラ１２１が他のキャッシュコントローラ１２１からのスヌープ処理によって共有メモリ１０３内の領域にデータを書き戻すことを示している。
【００９５】
「Ｉｎｖａｌｉｄａｔｅ」とは、他のキャッシュコントローラ１２１からのスヌープ処理によって無効化処理をキャッシュコントローラ１２１が受け付けると、該当するキャッシュラインｃｌを無効化することを示している。
【００９６】
「Ｓｎｏｏｐ  ｈｉｔ」とは、スヌープ更新要求またはスヌープ参照要求を受け付けた他のキャッシュコントローラ１２１がスヌープ処理によって所望のデータを得られたことを示している。
【００９７】
図８は、ノンスヌープ参照要求またはノンスヌープ更新要求における状態遷移の一例を示す説明図である。図８では、キャッシュコントローラ１２１が実施の形態１にかかる参照要求または更新要求を受け付けた場合において、該要求によって更新または参照されるキャッシュラインｃｌに設定される「Ｓｔａｔｕｓ」の状態遷移図を示している。
【００９８】
図８において、実線によって示す遷移は、キャッシュラインｃｌを有するキャッシュメモリ１２２を制御するキャッシュコントローラ１２１が受け付けた要求に沿った遷移である。遷移に付された情報が遷移条件である。各状態において、遷移条件が満たされると、状態が遷移する。
【００９９】
実行コード内の更新要求および参照要求について、スヌープ更新要求とノンスヌープ更新要求、スヌープ参照要求とノンスヌープ参照要求が正確に区別されている場合、「Ｓ」の状態に遷移することはない。つぎに、各遷移条件について説明する。
【０１００】
「Ｒｅａｄ（ｎｃ）ｈｉｔ」とは、ノンスヌープ参照要求を受け付けたキャッシュコントローラ１２１が有するキャッシュメモリ１２２に、ノンスヌープ参照要求が示す共有メモリ１０３内の領域に記憶されたデータが記憶されていることを示している。
【０１０１】
「Ｒｅａｄ（ｎｃ）ｍｉｓｓ」とは、ノンスヌープ参照要求を受け付けたキャッシュコントローラ１２１が共有メモリ１０３からノンスヌープ参照要求が示す共有メモリ１０３内の領域に記憶されたデータを取得する。そして、該キャッシュコントローラ１２１が取得したデータをキャッシュメモリ１２２に格納することを示している。
【０１０２】
「Ｗｒｉｔｅ（ｎｃ）ｈｉｔ」とは、ノンスヌープ更新要求を受け付けたキャッシュコントローラ１２１が有するキャッシュメモリ１２２に、ノンスヌープ更新要求が示す共有メモリ１０３内の領域に記憶されたデータが記憶されている。そして、キャッシュコントローラ１２１が該データにノンスヌープ更新要求に含まれるデータを上書きする。
【０１０３】
「Ｗｒｉｔｅ（ｎｃ）ｍｉｓｓ」とは、ノンスヌープ更新要求を受け付けたキャッシュコントローラ１２１が有するキャッシュメモリ１２２に、ノンスヌープ更新要求が示す共有メモリ１０３内の領域に記憶されたデータが記憶されていない。そのため、キャッシュコントローラ１２１が共有メモリ１０３からノンスヌープ更新要求が示す共有メモリ１０３内の領域に記憶されたデータを取得する。そして、キャッシュコントローラ１２１が該データにノンスヌープ更新要求に含まれるデータを上書きする。
【０１０４】
実施の形態１で説明したように、制御装置は、共有メモリ内の参照だけの領域への参照要求であると、他のＣＰＵにより該領域は更新されないため、スヌープ処理を行わずに共有メモリから該領域に記憶されたデータを取得する。これにより、処理時間の短縮化を図ることができ、処理性能の向上を図ることができる。
【０１０５】
また、実施の形態１で説明したように、制御装置は、共有メモリ内の更新だけの領域への更新要求であると、他のＣＰＵにより該領域は参照されないため、スヌープ処理を行わずに共有メモリから該領域に記憶されたデータを取得する。そして、制御装置は取得したデータをキャッシュに格納後、格納した該データに参照要求が示すデータを上書きする。これにより、処理時間の短縮化を図ることができ、処理性能の向上を図ることができる。
【０１０６】
（実施の形態２）
実施の形態２では、解析装置は、プログラムをシミュレータによって実行中に、参照要求または更新要求によって指定された共有メモリ内の領域ごとに参照要求と更新要求の有無を解析する。そして、実施の形態２では、解析装置は、プログラム内の参照要求を示す情報について参照要求が示すメモリ内の領域に更新が行われるか否かを判断する。これにより、プログラムの設計者が、判断結果を参照することにより、プログラムに含まれるいずれの参照要求についてノンスヌープ参照要求を示す情報に変換を行うかを判別することができる。したがって、解析装置はプログラムの設計者の手間を省くことができる。
【０１０７】
また、実施の形態２では、解析装置は、プログラム内の更新要求を示す情報について更新要求が示すメモリ内の領域に参照が行われるか否かを判断する。これにより、プログラムの設計者が、判断結果を参照することにより、プログラムに含まれるいずれの更新要求についてノンスヌープ更新要求を示す情報に変換を行うかを判別することができる。したがって、解析装置はプログラムの設計者の手間を省くことができる。
【０１０８】
解析装置のハードウェア構成については、図５のマルチコアプロセッサシステムのハードウェア構成と同一であってもよいし、マルチコアプロセッサでなくてもよい。
【０１０９】
図９は、解析装置による動作例を示す説明図である。図９に示すメモリアクセス情報９１０は、メモリモデル内の領域ごとに参照要求によって指定された回数と更新要求によって指定された回数を示している。メモリアクセス情報９１０は、アドレス、ＣＰＵＩＤ、参照要求数、更新要求数のフィールドを有する。アドレスのフィールドには、メモリモデルがキャッシュラインのサイズで分けられた複数の領域の各領域の先頭アドレスが登録される。アドレスのフィールドにはメモリモデルのアドレス順に情報が設定されており、たとえば、アドレスａｄｄｒ０からアドレスａｄｄｒ１の直前のアドレスまでによって１つの領域が示されている。ＣＰＵＩＤのフィールドには、アドレスのフィールドに登録されたアドレスにアクセスを行ったＣＰＵモデルの識別情報が登録される。参照要求数のフィールドには、アドレスのフィールドに登録されたアドレスに参照要求が行われた回数が登録される。更新要求数のフィールドには、アドレスのフィールドに登録されたアドレスに更新要求が行われた回数が登録される。各フィールドに情報が設定されることにより、解析情報９１１−１〜９１１−ｍがレコードとして記憶される。
【０１１０】
まず、解析装置９００は、プログラムを実行中に、参照要求または更新要求によって指定されたメモリ内の領域ごとに参照要求と更新要求の有無を解析する。ここで、プログラムとは、実行コード９２０である。具体的には、たとえば、解析装置９００は、マルチコアプロセッサシステムがモデル化されたシステムモデルと、検証パターンと、実行コード９２０と、をシミュレータに与えることにより、実行コード９２０のシミュレーションを行う。
【０１１１】
ここで、システムモデルとは、たとえば、ＥＳＬ（Ｅｌｅｃｔｒｏｎｉｃ  Ｓｙｓｔｅｍ  Ｌｅｖｅｌ）モデルであってもよい。ここで、ＥＳＬモデルとは、ハードウェアデバイスのビヘイビア（ふるまい）をもとに記述される。ＥＳＬシミュレータにＥＳＬモデルが与えられると、ＥＳＬシミュレータには、ＥＳＬモデルに記述されたハードウェア環境をシミュレーションする。検証パターンとは、実行コード９２０に与えるシミュレーションの条件である。たとえば、実行コード９２０が画像処理に関するプログラムであれば、検証用の画像データであったり、画像処理によって画像データが加工される場合の条件であったりする。
【０１１２】
そして、たとえば、解析装置９００は、実行コード９２０をＣＰＵモデル９０１が実行中に、ＣＰＵモデル９０１からメモリモデル９０２への参照要求または更新要求を検出する。たとえば、解析装置９００は、「Ｓｔｏｒｅ  ｘ＝３」を検出すると、「ｘ」が格納される領域を示すアドレスが示す領域を含む領域の先頭アドレスを有する解析情報９１１をメモリアクセス情報９１０から特定する。そして、たとえば、解析装置９００は、特定された解析情報９１１のＣＰＵＩＤのフィールドにＣＰＵモデル９０１の識別情報を登録する。さらに、たとえば、解析装置９００は、特定された解析情報９１１の更新要求回数のフィールドに設定された値をカウントアップする。このようにして、解析装置９００によってメモリアクセス情報９１０は更新される。
【０１１３】
つぎに、解析装置９００は、シミュレータによるシミュレーションが終了すると、プログラム内の参照要求を示す情報によって指定されたメモリ内の領域が、更新要求によって指定されない領域であるか否かを解析結果に基づいて判断する。具体的には、たとえば、解析装置９００は、実行コード９２０内の「Ｌｏａｄ」の記載を検出する。そして、たとえば、解析装置９００は、「Ｌｏａｄ  ｙ」の「ｙ」の値が格納された領域を含む領域の先頭アドレスを有する解析情報９１１をメモリアクセス情報９１０から特定する。そして、たとえば、解析装置９００は、特定された解析情報９１１が有する更新要求数の値が「０」であるかを判断する。たとえば、特定された解析情報９１１が有する更新要求数の値が「０」の場合、解析装置９００は、「Ｌｏａｄ  ｙ」は更新要求によって指定されない領域を指定する参照要求であると判断する。そして、解析装置９００は、判断結果を出力する。たとえば、解析装置９００は、判断結果をストレージ１０５に記憶させてもよいし、ディスプレイ１０７に表示してもよい。
【０１１４】
これにより、プログラムの設計者は、判断結果を参照することにより、実行コード９２０内にある参照要求を示す情報を、更新要求がないメモリの領域を指定する参照要求を示す情報に変換することができる。したがって、プログラムの設計にかかる手間を省くことができる。
【０１１５】
さらに、解析装置９００は、更新要求によって指定されない領域であると判断された場合、参照要求を示す情報を、更新要求がないメモリの領域を指定する参照要求を示す情報に変換する。具体的には、たとえば、解析装置９００は、「Ｌｏａｄ  ｙ」を「Ｌｏａｄ＿ｎｃ  ｙ」に変換する。変換結果はストレージなどの記憶装置に記憶される。変換後の実行コードが実行コード９３０である。
【０１１６】
これにより、キャッシュコントローラは、変換後のプログラムを実行中のＣＰＵから参照要求を受け付けると、スヌープ参照要求であるかノンスヌープ参照要求であるかを判別することができる。
【０１１７】
また、解析装置９００は、シミュレータによるシミュレーションが終了すると、プログラム内の更新要求を示す情報によって指定されたメモリ内の領域が、参照要求によって指定されない領域であるか否かを解析結果に基づいて判断する。具体的には、たとえば、解析装置９００は、実行コード９２０内の「Ｓｔｏｒｅ」の記述情報を検出する。そして、たとえば、解析装置９００は、「Ｓｔｏｒｅ  ｘ」の記述情報のうち「ｘ」の値が格納される領域を含む領域の先頭アドレスを有する解析情報９１１をメモリアクセス情報９１０から特定する。そして、たとえば、解析装置９００は、特定された解析情報９１１が有する参照要求数の値が「０」であるかを判断する。たとえば、特定された解析情報９１１が有する参照要求数の値が「０」の場合、解析装置９００は、「Ｓｔｏｒｅ  ｘ」がノンスヌープ更新要求であると判断する。そして、解析装置９００は、判断結果を出力する。たとえば、解析装置９００は、判断結果をストレージ１０５に記憶させてもよいし、ディスプレイ１０７に表示してもよい。
【０１１８】
プログラムの設計者は、判断結果を参照することにより、実行コード９２０内にある更新要求を示す情報を、参照要求がないメモリの領域を指定する更新要求を示す情報に変換することができる。したがって、プログラムの設計にかかる手間を省くことができる。
【０１１９】
さらに、解析装置９００は、参照要求によって指定されない領域であると判断された場合、更新要求を示す情報を、参照要求がないメモリの領域を指定する更新要求を示す情報に変換する。具体的には、たとえば、解析装置９００は、「Ｓｔｏｒｅ  ｘ」を「Ｓｔｏｒｅ＿ｎｃ  ｘ」に変換する。変換結果はストレージなどの記憶装置に記憶される。変換後の実行コードが実行コード９３０である。
【０１２０】
これにより、キャッシュコントローラは、変換後のプログラムを実行中のＣＰＵから更新要求を受け付けると、スヌープ更新要求であるかノンスヌープ参照要求であるかを判別することができる。解析装置９００は、プログラム内のスヌープ更新要求を示す情報とノンスヌープ更新要求を示す情報とを精度よく区別させることができる。
【０１２１】
（解析装置９００の機能例）
図１０は、解析装置９００の機能例を示すブロック図である。解析装置９００は、解析部１００１と、判断部１００２と、出力部１００３と、変換部１００４と、を有している。解析部１００１から変換部１００４の処理は、たとえば、解析装置９００が有するストレージなどの記憶装置に記憶された解析プログラムにコーディングされている。複数のＣＰＵのうちのいずれかのＣＰＵが該検出プログラムを記憶装置からロードし、解析プログラムにコーディングされた処理を実行することにより、部から部の機能が実現される。
【０１２２】
また、各機能部の処理結果は、たとえば、解析装置９００が有する共有メモリなどの記憶装置に記憶される。
【０１２３】
まず、解析部１００１は、プログラムを実行中に、メモリ内の領域ごとに参照要求による指定の有無と更新要求による指定の有無を解析する。上述したように、たとえば、解析部１００１は、シミュレータによって、システムモデルのＣＰＵモデルに実行コード９２０を割り当てる。そして、たとえば、解析部１００１は、ＣＰＵモデルからメモリモデルへの要求を解析し、メモリアクセス情報９１０を作成する。
【０１２４】
つぎに、判断部１００２は、プログラム内の参照要求を示す情報によって指定される前記メモリ内の領域が、更新要求による指定の無い領域であるか否かを解析結果に基づいて判断する。出力部１００３は、判断結果を出力する。たとえば、出力部１００３は、判断結果をストレージ１０５に記憶させてもよいし、ディスプレイ１０７に表示してもよい。
【０１２５】
さらに、変換部１００４は、更新要求によって指定されない領域であると判断された場合、参照要求を示す情報を、更新要求がないメモリの領域を指定する参照要求を示す情報に変換する。具体的には、たとえば、図９で示したように、変換部１００４は、「Ｌｏａｄ  ｙ」を「Ｌｏａｄ＿ｎｃ  ｙ」に変換する。出力部１００３は、変換結果を出力する。
【０１２６】
また、判断部１００２は、プログラム内の更新要求を示す情報によって指定される前記メモリ内の領域が、前記参照要求による指定の無い領域であるか否かを解析結果に基づいて判断する。出力部１００３は、判断結果を出力する。たとえば、出力部１００３は、判断結果をストレージ１０５に記憶させてもよいし、ディスプレイ１０７に表示してもよい。
【０１２７】
そして、変換部１００４は、参照要求によって指定されない領域であると判断された場合、更新要求を示す情報を、参照要求がないメモリの領域を指定する更新要求を示す情報に変換する。具体的には、たとえば、図９で示したように、変換部１００４は、「Ｓｔｏｒｅ  ｘ」を「Ｓｔｏｒｅ＿ｎｃ  ｘ」に変換する。
【０１２８】
（解析装置９００が行う解析処理手順）
図１１は、解析装置９００が行う解析処理手順例を示すフローチャートである。まず、解析装置９００は、ソースコード９４０をビルドすることにより、実行コード９２０を生成する（ステップＳ１１０１）。
【０１２９】
たとえば、変数ａが更新要求のみの変数の場合、ソースコード９４０の設計者が、代入式「ａ＝ｃ＋２０；」を「ａ：＝ｂ＋２０；」と記述してもよい。そして、たとえば、ソースコード９４０のビルド時にコンパイラが、実行コード９２０に「ａ：＝ｂ＋２０；」を「Ｌｏａｄ」に代わって「Ｌｏａｄ＿ｎｃ」を出力してもよい。
【０１３０】
つぎに、解析装置９００は、実行コード９２０と、検証パターン９５０と、システムモデルをシミュレータに与えることにより、解析処理を実行する（ステップＳ１１０２）。ステップＳ１１０２により、メモリアクセス情報９１０が生成される。解析装置９００は、再ビルド処理を実行することにより、実行コード９３０を生成する（ステップＳ１１０３）。
【０１３１】
図１２は、図１１で示した解析処理（ステップＳ１１０２）例の詳細な説明を示すフローチャートである。解析装置９００は、シミュレーションの実行を開始し（ステップＳ１２０１）、参照要求または更新要求を検出したか否かを判断する（ステップＳ１２０２）。参照要求および更新要求が検出されなかった場合（ステップＳ１２０２：Ｎｏ）、ステップＳ１２０７へ移行する。更新要求が検出された場合（ステップＳ１２０２：更新要求）、解析装置９００は、メモリアクセス情報９１０から、検出された更新要求が指定する領域に対応する解析情報９１１を特定する（ステップＳ１２０３）。解析装置９００は、特定された解析情報９１１の更新要求数をカウントアップし（ステップＳ１２０４）、ステップＳ１２０７へ移行する。
【０１３２】
参照要求が検出された場合（ステップＳ１２０２：参照要求）、解析装置９００は、メモリアクセス情報９１０から、検出された参照要求が指定する領域に対応する解析情報９１１を特定する（ステップＳ１２０５）。解析装置９００は、特定した解析情報９１１の参照要求数をカウントアップし（ステップＳ１２０６）、ステップＳ１２０７へ移行する。
【０１３３】
ステップＳ１２０２のＮｏの場合、ステップＳ１２０６、またはステップＳ１２０４のつぎに、解析装置９００は、シミュレーションが終了したか否かを判断する（ステップＳ１２０７）。シミュレーションが終了していない場合（ステップＳ１２０７：Ｎｏ）、ステップＳ１２０２へ戻る。シミュレーションが終了した場合（ステップＳ１２０７：Ｙｅｓ）、一連の処理を終了する。
【０１３４】
図１３は、図１１で示した再ビルド処理（ステップＳ１１０３）の第１の例の詳細な説明を示すフローチャートである。まず、解析装置９００は、実行コード９２０に含まれる命令情報の中で、未選択な命令情報があるか否かを判断する（ステップＳ１３０１）。未選択な命令情報がある場合（ステップＳ１３０１：Ｙｅｓ）、解析装置９００は、未選択な命令情報から１つの命令情報を選択する（ステップＳ１３０２）。
【０１３５】
解析装置９００は、選択された命令情報が参照要求を示す情報か否かを判断する（ステップＳ１３０３）。選択された命令情報が参照要求を示す情報である場合（ステップＳ１３０３：Ｙｅｓ）、解析装置９００は、メモリアクセス情報９１０から、選択された参照要求を示す情報が指定する領域に対応する解析情報９１１を特定する（ステップＳ１３０４）。
【０１３６】
解析装置９００は、選択された参照要求を示す情報が指定する領域に更新要求があるか否かを判断する（ステップＳ１３０５）。選択された参照要求を示す情報が指定する領域に更新要求がない場合（ステップＳ１３０５：Ｎｏ）、解析装置９００は、判断結果を出力する（ステップＳ１３０６）。
【０１３７】
そして、解析装置９００は、選択された参照要求を示す情報を、更新要求がない領域を指定する参照要求を示す情報に変換し（ステップＳ１３０７）、ステップＳ１３０１へ戻る。たとえば、図９の例では、「Ｌｏａｄ  ｙ」が「Ｌｏａｄ＿ｎｃ  ｙ」に変換される。選択された命令情報が参照要求を示す情報でない場合（ステップＳ１３０３：Ｎｏ）、解析装置９００は、選択された命令情報が更新要求を示す情報か否かを判断する（ステップＳ１３０８）。
【０１３８】
選択された命令情報が更新要求を示す情報である場合（ステップＳ１３０８：Ｙｅｓ）、解析装置９００は、メモリアクセス情報９１０から、選択された更新要求を示す情報が指定する領域に対応する解析情報９１１を特定する（ステップＳ１３０９）。解析装置９００は、選択された更新要求を示す情報が指定する領域に参照要求があるか否かを判断する（ステップＳ１３１０）。選択された更新要求を示す情報が指定する領域に参照要求がある場合（ステップＳ１３１０：Ｙｅｓ）、ステップＳ１３０１へ戻る。
【０１３９】
選択された更新要求を示す情報が指定する領域に参照要求がない場合（ステップＳ１３１０：Ｎｏ）、解析装置９００は、判断結果を出力する（ステップＳ１３１１）。そして、解析装置９００は、選択された更新要求を示す情報を、参照要求がない領域を指定する更新要求を示す情報に変換し（ステップＳ１３１２）、ステップＳ１３０１へ戻る。たとえば、図９の例では、「Ｓｔｏｒｅ  ｘ」が「Ｓｔｏｒｅ＿ｎｃ  ｘ」に変換される。
【０１４０】
ステップＳ１３０５において、選択された参照要求を示す情報が指定する領域に更新要求がある場合（ステップＳ１３０５：Ｙｅｓ）、ステップＳ１３０１へ戻る。
【０１４１】
ステップＳ１３０８において、選択された命令情報が更新要求を示す情報でない場合（ステップＳ１３０８：Ｎｏ）、ステップＳ１３０１へ戻る。
【０１４２】
一方、ステップＳ１３０１において、未選択な命令情報がない場合（ステップＳ１３０１：Ｎｏ）、一連の処理を終了する。
【０１４３】
図１４は、図１１で示した再ビルド処理（ステップＳ１１０３）の第２の例の詳細な説明を示すフローチャートである。図１４では、プログラムの設計者が、ノンスヌープ参照要求であると判断し、「Ｌｏａｄ＿ｎｃ」を割りつけても、解析装置９００は、解析結果によって該参照要求が指定する領域に更新要求があると判断した場合、エラーを出力する。また、図１４では、プログラムの設計者が、ノンスヌープ更新要求であると判断し、「Ｓｔｏｒｅ＿ｎｃ」を割りつけても、解析装置９００は、解析結果によって該更新要求が指定する領域に参照要求があると判断した場合、エラーを出力する。
【０１４４】
具体的には、まず、解析装置９００は、実行コード９２０に含まれる命令情報の中で、未選択な命令情報があるか否かを判断する（ステップＳ１４０１）。未選択な命令情報がある場合（ステップＳ１４０１：Ｙｅｓ）、解析装置９００は、未選択な命令情報から１つの命令情報を選択する（ステップＳ１４０２）。
【０１４５】
解析装置９００は、選択された命令情報が、更新要求がない領域を指定する参照要求を示す情報か否かを判断する（ステップＳ１４０３）。具体的には、たとえば、「Ｌｏａｄ＿ｎｃ」であるか否かが判断される。選択された命令情報が参照要求を示す情報である場合（ステップＳ１４０３：Ｙｅｓ）、解析装置９００は、メモリアクセス情報９１０から、選択された参照要求を示す情報が指定する領域に対応する解析情報９１１を特定する（ステップＳ１４０４）。
【０１４６】
解析装置９００は、選択された参照要求を示す情報が指定する領域に更新要求があるか否かを判断する（ステップＳ１４０５）。選択された参照要求を示す情報が指定する領域に更新要求がある場合（ステップＳ１４０５：Ｙｅｓ）、解析装置９００は、エラーを出力し（ステップＳ１４０６）、ステップＳ１４０１へ戻る。一方、選択された参照要求を示す情報が指定する領域に更新要求がない場合（ステップＳ１４０５：Ｎｏ）、ステップＳ１４０１へ戻る。
【０１４７】
ステップＳ１４０３において、選択された命令情報が参照要求を示す情報でない場合（ステップＳ１４０３：Ｎｏ）、解析装置９００は、選択された命令情報が参照要求がない領域を指定する更新要求を示す情報か否かを判断する（ステップＳ１４０７）。具体的には、たとえば、「Ｓｔｏｒｅ＿ｎｃ」であるか否かが判断される。
【０１４８】
選択された命令情報が更新要求を示す情報である場合（ステップＳ１４０７：Ｙｅｓ）、解析装置９００は、メモリアクセス情報９１０から、選択された更新要求を示す情報が指定する領域に対応する解析情報９１１を特定する（ステップＳ１４０８）。
【０１４９】
つぎに、解析装置９００は、選択された更新要求を示す情報が指定する領域に参照要求があるか否かを判断する（ステップＳ１４０９）。選択された更新要求を示す情報が指定する領域に参照要求がない場合（ステップＳ１４０９：Ｎｏ）、ステップＳ１４０１へ戻る。
【０１５０】
一方、選択された更新要求を示す情報が指定する領域に参照要求がある場合（ステップＳ１４０９：Ｙｅｓ）、解析装置９００は、エラーを出力し（ステップＳ１４１０）、ステップＳ１４０１へ戻る。
【０１５１】
また、ステップＳ１４０７において、選択された命令情報が更新要求を示す情報でない場合（ステップＳ１４０７：Ｎｏ）、ステップＳ１４０１へ戻る。
【０１５２】
ステップＳ１４０１において、未選択な命令情報がない場合（ステップＳ１４０１：Ｎｏ）、一連の処理を終了する。
【０１５３】
実施の形態１で説明したように、制御装置は、共有メモリ内の参照だけの領域への参照要求であると、他のＣＰＵにより該領域は更新されないため、スヌープ処理を行わずに共有メモリから該領域に記憶されたデータを取得する。これにより、制御装置は、不要なスヌープ処理の回数を減少させることができ、処理性能の向上を図ることができる。
【０１５４】
また、更新要求のない共有メモリ内の領域への参照要求について、キャッシュメモリに参照対象となるデータが記憶されていれば、制御装置は、直ちにＣＰＵへ応答することができる。したがって、制御装置は、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができ、処理能力を向上させることができる。
【０１５５】
また、実施の形態１で説明したように、制御装置は、共有メモリ内の更新だけの領域への更新要求であると、他のＣＰＵにより該領域は参照されないため、スヌープ処理を行わずに共有メモリから該領域に記憶されたデータを取得する。そして、制御装置は取得したデータをキャッシュに格納後、格納した該データに更新要求に含まれる更新データを上書きする。これにより、制御装置は、不要なスヌープ処理の回数を減少させることができ、処理性能の向上を図ることができる。
【０１５６】
また、参照要求のない共有メモリ内の領域への更新要求について、キャッシュメモリに更新対象となるデータが記憶されていれば、制御装置は、直ちにＣＰＵへ応答することができる。したがって、制御装置は、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができ、処理能力を向上させることができる。
【０１５７】
実施の形態２で説明したように、解析装置は、プログラムをシミュレータによって実行中に、参照要求または更新要求によって指定された共有メモリ内の領域ごとに参照要求と更新要求の有無を解析する。そして、解析装置は、プログラム内の参照要求を示す情報について参照要求が示すメモリ内の領域に更新が行われるか否かを判断する。判断結果が出力されるため、解析装置は、プログラムの設計者はプログラムに含まれるいずれの更新要求についてノンスヌープ更新要求を示す情報に変換を行うかを考える手間を省くことができる。
【０１５８】
また、解析装置は、判断結果に基づいて、プログラム内の参照要求が、更新要求によって指定されない領域であると判断された場合、該参照要求を示す情報を、ノンスヌープ参照要求を示す情報に変換する。解析装置は、プログラムの設計者は各参照要求がノンスヌープ参照要求であるか否かについて考える手間を省くことができる。さらに、変換後のプログラムを実行中のＣＰＵからキャッシュコントローラが参照要求を受け付けると、スヌープ参照要求であるかノンスヌープ参照要求であるかを判別することができる。
【０１５９】
また、実施の形態２で説明したように、解析装置は、プログラムをシミュレータによって実行中に、参照要求または更新要求によって指定された共有メモリ内の領域ごとに参照要求と更新要求の有無を解析する。そして、解析装置は、プログラム内の更新要求を示す情報について更新要求が示すメモリ内の領域に参照が行われるか否かを判断する。判断結果が出力されるため、解析装置は、プログラムの設計者がプログラムに含まれるいずれの更新要求についてノンスヌープ更新要求を示す情報に変換を行うかを考える手間を省くことができる。
【０１６０】
また、解析装置は、判断結果に基づいて、プログラム内の更新要求が、参照要求によって指定されない領域であると判断された場合、該更新要求を示す情報、ノンスヌープ更新要求を示す情報に変換する。さらに、変換後のプログラムを実行中のＣＰＵからキャッシュコントローラが更新要求を受け付けると、スヌープ更新要求であるかノンスヌープ更新要求であるかを判別することができる。
【０１６１】
なお、本実施の形態２で説明した解析方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本解析プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本解析プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１６２】
１０１―１〜１０１−ｎ  ＣＰＵ
１２１−１〜１２１−ｎ  キャッシュコントローラ
１２２−１〜１２２−ｎ  キャッシュメモリ
１０３  共有メモリ
６０１  受付部
６０２  取得部
６０３  格納部
９１０  メモリアクセス情報
１００１  解析部
１００２  判断部
１００３  出力部
１００４  変換部
【図１】
2013114540.tif 000003
【図２】
2013114540.tif 000004
【図３】
2013114540.tif 000005
【図４】
2013114540.tif 000006
【図５】
2013114540.tif 000007
【図６】
2013114540.tif 000008
【図７】
2013114540.tif 000009
【図８】
2013114540.tif 000010
【図９】
2013114540.tif 000011
【図１０】
2013114540.tif 000012
【図１１】
2013114540.tif 000013
【図１２】
2013114540.tif 000014
【図１３】
2013114540.tif 000015
【図１４】
2013114540.tif 000016
【国際調査報告】
2013114540.tif 000017
2013114540.tif 000018
2013114540.tif 000019
2013114540.tif 000020
2013114540.tif 000021
2013114540.tif 000022
2013114540.tif 000023