以下に添付図面を参照して、本発明にかかる制御装置の実施の形態を詳細に説明する。ここでは、制御装置は、マルチコアプロセッサシステムの各CPUが有するキャッシュメモリを制御するメモリコントローラである。実施の形態1では、マルチコアプロセッサシステムにおいて、CPUから参照要求と更新要求とを受け付けた制御装置の動作について説明する。実施の形態2では、解析装置は、プログラムをシミュレータによって実行中に、参照要求または更新要求によって指定された共有メモリ内の領域ごとに参照要求と更新要求の有無を解析する。
(実施の形態1)
プログラムを実行中に、「if(i_packet[32]==1)」のような条件判断が発生し、かつキャッシュミスヒットが発生した場合、i_packet[32]のデータが最新かどうか、いずれかのCPUがデータの書き換えを行っていないかどうかのスヌープ処理が発生する。i_packet[32]の値はプログラムにおいて固定値であり、参照しかされない場合、スヌープ処理は不要である。そこで、実施の形態1では、制御装置は、更新要求による指定の無い共有メモリ内の領域への参照要求の場合、スヌープ処理により該領域のデータは変化しないため、スヌープ処理を行わずに共有メモリから該領域のデータを取得する。これにより制御装置は、不要なスヌープ処理の回数を減少させることができ、処理性能の向上を図ることができる。
また、プログラムを実行中に、「packet=4」のような代入処理が発生した場合、いずれかのCPUが同じキャッシュラインを保持していないかのスヌープ処理が発生する。packetの値は、いずれのCPUからも参照されない場合、スヌープ処理は不要である。そこで、実施の形態1では、制御装置は、参照要求による指定の無い共有メモリ内の領域への更新要求の場合、スヌープ処理を行わずに共有メモリから該領域のデータを取得し、取得したデータに更新要求に含まれる更新データを上書きする。これにより、不要なスヌープ処理の回数を減少させることができ、処理性能の向上を図ることができる。
図1は、キャッシュコントローラの動作例1を示す説明図である。図1の上側では、更新要求がある共有メモリ103の領域を指定する参照要求をキャッシュコントローラ121が受け付けた場合の動作例を示す。図1の下側では、更新要求がある共有メモリ103の領域を指定する参照要求をキャッシュコントローラ121が受け付けた場合の動作例を示す。更新要求がない共有メモリ103の領域を指定する参照要求は以下「ノンスヌープ参照要求」と称する。更新要求がある共有メモリ103の領域を指定する参照要求は、以下「スヌープ参照要求」と称する。
たとえば、実行コード内では、ノンスヌープ参照要求を示す情報が「Load_nc」と記述されていることとする。たとえば、実行コード内では、スヌープ参照要求を示す情報が「Load」と記述されていることとする。実行コードとは、アセンブリ言語などのCPU101が識別可能な情報であり、実行コード内には、複数の命令情報が含まれている。命令情報とは、更新要求を示す情報、参照要求を示す情報、演算命令を示す情報が挙げられる。実行コードは、設計者によってC言語などのコンピュータ処理言語によって記述されたソースコードがビルドされることにより得られる情報である。ビルドとは、ソースコードのコンパイルとライブラリリンクが行われることにより、実行コードを生成する作業である。
マルチコアプロセッサシステム100では、複数のCPU101と、共有メモリ103と、CPU101ごとにキャッシュ102と、を有している。キャッシュ102は、キャッシュメモリ122と、キャッシュメモリ122へのアクセスを制御するキャッシュコントローラ121と、を有している。マルチコアプロセッサシステム100の詳細なハードウェア構成は図面を用いて後述する。
キャッシュメモリ122は、共有メモリ103に記憶されたデータまたは共有メモリ103に格納するデータを一時的に記憶する。キャッシュメモリ122は、キャッシュラインclごとに「Tag部」と「Data部」とがあり、「Tag部」は「Status」と、「Address」と、を有している。
具体的には、「Address」には、格納対象となる共有メモリ103内の領域の先頭アドレスが登録される。「Data部」には、「Address」に格納された先頭アドレスが示す共有メモリ103内の領域から1キャッシュラインclのサイズ分の共有メモリ103内の領域のデータが格納される。
「Status」には、キャッシュラインclの状態が登録される。キャッシュラインclの状態としては、「M」「E」「S」「I」の4つの状態がある。ここでは、「Modified」は以降単に「M」と記載し、「Exclusive」は以降単に「E」と記載し、「Shared」は以降単に「S」と記載し、「Invalid」は以降単に「I」と記載する。
キャッシュラインclの「Status」に「M」が記憶されている場合、該キャッシュラインclを有するキャッシュメモリ122だけに存在し、共有メモリ103上の値から変更されていることを示している。キャッシュラインclの「Status」に「E」が記憶されている場合、該キャッシュラインclを有するキャッシュメモリ122だけに存在するが、共有メモリ103上の値と一致していることを示している。
キャッシュラインclの「Status」に「S」が記憶されている場合、該キャッシュラインclを有するキャッシュメモリ122以外のキャッシュメモリ122にも存在し、共有メモリ103上の値と一致していることを示している。キャッシュラインclの「Status」に「I」が記憶されている場合、該キャッシュラインclは無効であることを示している。
図1の例では、理解の容易化のために、各キャッシュラインclには、「Status」、「Address」の代わりに「領域情報」、「Data」、の順で記憶されることとする。
まず、図1の上側について、キャッシュコントローラ121−2が、ノンスヌープ参照要求を受け付けた場合の動作例について説明する。キャッシュラインcl1−1とキャッシュラインcl1−2に「I」が登録されているのは、キャッシュメモリ122に定数aの値が登録されていないことを示している。
キャッシュコントローラ121−2は、CPU101−2からの参照要求を受け付ける。たとえば、CPU101−2とキャッシュコントローラ121−2とを接続する信号線は、ノンスヌープ参照要求と、スヌープ参照要求と、に応じてそれぞれ分けられている。たとえば、CPU101−2は、参照要求が「Load_nc」であれば、「Load_nc」に応じた信号線にイネーブル信号を出力し、参照要求が「Load」であれば、「Load」に応じた信号線にイネーブル信号を出力する。したがって、キャッシュコントローラ121−2は、いずれの信号線にイネーブル信号が入力されたかによって、いずれの参照要求を受け付けたかを判別できる。
そして、キャッシュコントローラ121−2は、ノンスヌープ参照要求を受け付けた場合、スヌープ処理を実行せずに、共有メモリ103から参照要求によって指定された指定領域に記憶されたデータを取得する。キャッシュの1キャッシュラインは、CPU101が処理するデータサイズより大きなデータサイズで管理されることがある。ここでは、指定領域を含む1キャッシュラインcl分の共有メモリ103内の領域は、領域A1である。そのため、領域A1に記憶された変数aの値と変数bの値が取得される。領域A1に記憶された変数aと変数bのいずれか一方が参照される参照要求が発生しても、1キャッシュラインcl分のデータとして、変数aと変数bの両方の値が取得される。
そして、キャッシュコントローラ121−2は、キャッシュメモリ122―2に共有メモリ103から取得したデータを格納する。スヌープ処理とは、キャッシュメモリ122内の記憶状態に応じて、他のキャッシュメモリ122との記憶内容を一致させるために行う処理である。
具体的には、たとえば、キャッシュコントローラ121−2は、「Load_nc」を受け付けた場合、共有メモリ103を制御するメモリコントローラに対して、領域A1に記憶されたデータを取得する参照要求を送る。具体的には、該参照要求では、参照対象のデータが記憶された領域の先頭アドレスが指定される。
そして、共有メモリ103を制御するメモリコントローラは、領域A1にアクセスし、記憶されたデータを読み出す。共有メモリ103を制御するメモリコントローラは、要求元のキャッシュコントローラ121−2に読み出したデータを通知する。ここでは、キャッシュコントローラ121−2は、定数aの値と定数bの値を取得する。定数aと定数bのいずれに参照要求が発生しても、1キャッシュラインcl分のデータとして、定数aと定数bの両方の値が取得される。
つぎに、たとえば、キャッシュコントローラ121−2は、取得した定数aの値および定数bの値と、領域A1の先頭アドレスと、を関連付けて、キャッシュメモリ122―2に格納する。図1では、領域A1の先頭アドレスの代わりに、領域情報として「A1」がキャッシュラインcl1−2に登録されている。そして、キャッシュコントローラ121−2は、取得したデータが格納されたキャッシュラインcl1−2の「Status」を「E」に設定する。そして、キャッシュコントローラ121−2は、CPU101−2に応答する。参照要求の場合、キャッシュコントローラ121−2は、参照要求に応じたデータを通知する。
つぎに、図1の下側について、キャッシュコントローラ121−2が、スヌープ参照要求を受け付けた場合の動作例について説明する。キャッシュラインcl2−1とキャッシュラインcl2−2に「I」が登録されているのは、キャッシュメモリ122に変数cの値が登録されていないことを示している。
上述したように、キャッシュコントローラ121−2は、参照要求を受け付ける。キャッシュコントローラ121−2は、スヌープ参照要求を受け付けた場合、キャッシュメモリ122内の記憶内容に応じてスヌープ処理を実行する。
具体的には、キャッシュコントローラ121−2は、キャッシュメモリ122に変数cが記憶されているか否かを判断する。たとえば、キャッシュコントローラ121−2は、キャッシュメモリ122−2に変数cが記憶されていないと判断された場合、他のキャッシュ102−1に変数cについてスヌープ処理を実行する。
たとえば、キャッシュメモリ122−1には、変数cが登録されていない。ここでは、スヌープ処理によって、変数cの値が得られなかったため、キャッシュコントローラ121−2は、共有メモリ103から指定領域に記憶されたデータを取得する。指定領域を含む1キャッシュラインcl分の共有メモリ内の領域は、領域A2である。そのため、領域A2に記憶された変数cの値と変数dの値が取得される。領域A2に記憶された変数cと変数dのいずれか一方が参照される参照要求が発生しても、1キャッシュラインcl分のデータとして、変数cと変数dの両方の値が取得される。
そして、キャッシュコントローラ121−2は、取得したデータと、領域A2の先頭アドレスと、をキャッシュメモリ122に格納する。図1では、領域A2の先頭アドレスの代わりに、領域情報として「A2」がキャッシュラインcl2−2に登録されている。そして、キャッシュコントローラ121−2は、取得したデータが格納されたキャッシュラインcl2−2の「Status」に「E」を設定する。そして、キャッシュコントローラ121−2は、CPU101−2に応答する。参照要求の場合、キャッシュコントローラ121−2は、参照要求に応じた参照データを通知する。
図1の上側と図1の下側との比較によれば、キャッシュコントローラ121は、更新要求がない共有メモリ103内の領域を指定する参照要求の場合に、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができる。したがって、処理能力を向上させることができる。
図2は、キャッシュコントローラ121の動作例2を示す説明図である。図2では、キャッシュコントローラ121−2が、ノンスヌープ参照要求を受け付けた場合において、すでにキャッシュメモリ122に参照要求によって指定された共有メモリ103内の指定領域に記憶されたデータがある場合の動作例である。
キャッシュコントローラ121−2は、ノンスヌープ参照要求を受け付けた場合、キャッシュメモリ122に参照要求によって指定された共有メモリ103内の指定領域に格納されたデータがあるか否かを判断する。上述したように、ノンスヌープ参照要求を受け付けた場合、キャッシュコントローラ121−2は、スヌープ処理を行わない。
具体的には、たとえば、キャッシュコントローラ121−2は、キャッシュメモリ122から「Status」に「M」、「E」、「S」のいずれかが設定されたキャッシュラインclを探索する。たとえば、キャッシュコントローラ121−2は、探索したキャッシュラインclに格納されたアドレスから、該アドレスに1キャッシュラインclのデータサイズを加算したアドレスまでの間に参照要求が指定するアドレスが含まれるか否かを判断する。含まれている場合、キャッシュコントローラ121−2は、参照要求によって指定された共有メモリ103の指定領域に記憶されたデータがキャッシュメモリ122−2に記憶されていると判断する。一方、含まれていない場合、キャッシュコントローラ121−2は、参照要求によって指定された共有メモリ103の指定領域に記憶されたデータがキャッシュメモリ122に記憶されていないと判断する。
つぎに、参照要求によって指定された共有メモリ103の指定領域に記憶されたデータがキャッシュメモリ122−2に記憶されている場合、キャッシュコントローラ121−2は、キャッシュメモリ122−2から該データを読み出す。そして、キャッシュコントローラ121−2は、CPU101−2へ応答する。
また、参照要求によって指定された指定領域に記憶されたデータがキャッシュメモリ122に記憶されていない場合、キャッシュコントローラ121−2は、図1に示したように共有メモリ103から指定領域のデータを読み出す。
これにより、更新要求のない共有メモリ103内の領域への参照要求について、キャッシュメモリ122に参照対象となるデータが記憶されていれば、キャッシュコントローラ121−2は、直ちにCPU101−2へ応答することができる。したがって、キャッシュコントローラ121−2は、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができ、処理能力を向上させることができる。
図3は、キャッシュコントローラ121の動作例3を示す説明図である。図3の上側では、ノンスヌープ更新要求をキャッシュコントローラ121−2が受け付けた場合の動作例を示す。図3の下側では、参照要求がある共有メモリ103の領域を指定する更新要求をキャッシュコントローラ121−2が受け付けた場合の動作例を示す。参照要求がない共有メモリ103の領域を指定する更新要求は以下「ノンスヌープ更新要求」と称する。参照要求がある共有メモリ103の領域を指定する更新要求は、以下「スヌープ更新要求」と称する。
たとえば、プログラム内では、ノンスヌープ更新要求を示すコードが「Store_nc」と記述され、スヌープ更新要求を示すコードが「Store」と記述されていることとする。
まず、図3の上側について、キャッシュコントローラ121−2が、ノンスヌープ更新要求を受け付けた場合の動作例について説明する。キャッシュラインcl3−1とキャッシュラインcl3−2に「I」が登録されているのは、キャッシュメモリ122に変数eの値が登録されていないことを示している。
キャッシュコントローラ121−2は、CPU101−2からの更新要求を受け付ける。たとえば、CPU101−2とキャッシュコントローラ121−2とを接続する信号線は、ノンスヌープ更新要求と、スヌープ更新要求と、に応じてそれぞれ分けられている。たとえば、CPU101−2は、更新要求が「Store_nc」であれば、「Store_nc」に応じた信号線にイネーブル信号を出力し、更新要求が「Store」であれば、「Store」に応じた信号線にイネーブル信号を出力する。したがって、キャッシュコントローラ121−2は、いずれの信号線にイネーブル信号が入力されたかによって、いずれの更新要求を受け付けたかを判別できる。
そして、キャッシュコントローラ121−2は、ノンスヌープ更新要求を受け付けた場合、スヌープ処理を実行せずに、共有メモリ103から更新要求によって指定された指定領域に記憶されたデータを取得する。そして、キャッシュコントローラ121−2は、キャッシュメモリ122−2に共有メモリ103から取得したデータを格納する。
たとえば、キャッシュコントローラ121−2は、受け付けた更新要求が「Store_nc」の場合、共有メモリ103を制御するメモリコントローラに、該更新要求によって指定された共有メモリ103内の指定領域に記憶されたデータを取得する更新要求を送る。たとえば、更新要求では、参照対象のデータが記憶された領域の先頭アドレスが指定されている。
そして、共有メモリ103を制御するメモリコントローラは、共有メモリ103の指定領域にアクセスし、記憶されたデータを読み出す。共有メモリ103を制御するメモリコントローラは、要求元のキャッシュコントローラ121−2に読み出したデータを通知する。ここでは、キャッシュコントローラ121−2は、変数eの値と変数fの値を取得する。変数eと変数fのいずれに更新要求が発生しても、1キャッシュラインcl分のデータとして、変数eと変数fの両方の値が取得される。
つぎに、たとえば、キャッシュコントローラ121−2は、取得した変数eと変数fの値と、受け付けた更新要求に指定された指定領域の先頭アドレスとを関連付けて、キャッシュメモリ122に格納する。そして、たとえば、キャッシュコントローラ121−2は、取得したデータが格納されたキャッシュラインcl3−2に、更新要求に含まれる更新データを上書きする。そして、キャッシュコントローラ121−2は、上書きが行われたキャッシュラインcl3−2の「Status」を「M」に設定する。そして、キャッシュコントローラ121−2は、CPU101−2に応答する。具体的には、たとえば、更新要求の場合、キャッシュコントローラ121−2は、更新要求の終了をCPU101−2に通知する。
つぎに、図3の下側について、キャッシュコントローラ121−2が、スヌープ更新要求を受け付けた場合の動作例について説明する。キャッシュラインcl4−1とキャッシュラインcl4−2に「I」が登録されているのは、キャッシュメモリ122に変数gの値が登録されていないことを示している。
上述したように、キャッシュコントローラ121−2は、CPU101−2から更新要求を受け付ける。キャッシュコントローラ121−2は、スヌープ更新要求を受け付けた場合、キャッシュメモリ122内の記憶内容に応じてスヌープ処理を実行する。
具体的には、キャッシュコントローラ121−2は、キャッシュメモリ122−2に変数gが記憶されているか否かを判断する。たとえば、キャッシュメモリ122−2に変数gが記憶されていないと判断された場合、キャッシュコントローラ121−2は、他のキャッシュ102−1に変数gについてスヌープ処理を実行する。ここでは、スヌープ処理によって、変数gの値が得られなかったため、キャッシュコントローラ121−2は、共有メモリ103から指定領域に記憶されたデータを取得する。ここでは、変数gの値と変数hの値が取得される。変数gと変数hのいずれに更新要求が発生しても、1キャッシュラインcl分のデータとして、変数gと変数hの両方の値が取得される。
そして、キャッシュコントローラ121−2は、取得したデータをキャッシュメモリ122−2に格納する。そして、たとえば、キャッシュコントローラ121−2は、取得したデータが格納されたキャッシュラインcl4−2に、更新要求に含まれる更新データを上書きする。そして、キャッシュコントローラ121−2は、上書きが行われたキャッシュラインcl4−2の「Status」を「M」に設定する。そして、キャッシュコントローラ121−2は、CPU101−2に応答する。具体的には、たとえば、更新要求の場合、キャッシュコントローラ121−2は、更新要求の終了をCPU101−2に通知する。
図3の上側と図3の下側との比較によれば、キャッシュコントローラ121−2は、参照要求がない共有メモリ103内の領域を指定する更新要求の場合に、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができる。したがって、処理能力を向上させることができる。
図4は、キャッシュコントローラ121の動作例4を示す説明図である。図4では、キャッシュコントローラ121が、ノンスヌープ更新要求を受け付けた場合において、すでにキャッシュメモリ122に更新要求によって指定された共有メモリ103内の指定領域に記憶されたデータがある場合の動作例である。
キャッシュコントローラ121−2は、ノンスヌープ更新要求を受け付けた場合、キャッシュメモリ122に更新要求によって指定された共有メモリ103内の指定領域に格納されたデータがあるか否かを判断する。上述したように、ノンスヌープ更新要求を受け付けた場合、キャッシュコントローラ121−2は、スヌープ処理を行わない。
具体的には、たとえば、キャッシュコントローラ121−2は、キャッシュメモリ122から「Status」に「M」、「E」、「S」のいずれかが設定されたキャッシュラインclを探索する。そして、たとえば、キャッシュコントローラ121−2は、探索したキャッシュラインclに格納されたアドレスから、該アドレスに1キャッシュラインclのデータサイズを加算したアドレスまでの間に更新要求が指定するアドレスが含まれているかを判断する。含まれている場合、キャッシュコントローラ121−2は、更新要求によって指定された共有メモリ103の指定領域に記憶されたデータがキャッシュメモリ122−2に記憶されていると判断する。一方、含まれていない場合、キャッシュコントローラ121−2は、更新要求によって指定された共有メモリ103の指定領域に記憶されたデータがキャッシュメモリ122−2に記憶されていると判断する。
つぎに、更新要求が指定する指定領域に記憶されたデータがキャッシュメモリ122に記憶されている場合、キャッシュコントローラ121−2は、該指定領域に記憶されたデータを記憶するキャッシュラインcl3−2に更新要求の更新データを上書きする。図4の例では、変数eの値が4から3に上書きされた。そして、キャッシュコントローラ121−2は、CPU101−2へ応答する。
また、更新要求によって指定された指定領域に記憶されたデータがキャッシュメモリ122に記憶されていない場合、キャッシュコントローラ121−2は、図3に示したような動作を行う。
これにより、参照要求のない共有メモリ103内の領域への更新要求について、キャッシュメモリ122−2に参照対象となるデータが記憶されていれば、キャッシュコントローラ121−2は、直ちにCPU101−2へ応答することができる。したがって、キャッシュコントローラ121−2は、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができ、処理能力を向上させることができる。
これにより、ノンスヌープ更新要求で指定された指定領域のデータがキャッシュメモリ122−2に記憶されていれば、キャッシュコントローラ121−2は、直ちにキャッシュメモリ122−2に更新要求の更新データを上書きする。したがって、キャッシュコントローラ121−2は、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができ、処理能力を向上させることができる。
(マルチコアプロセッサシステム100のハードウェア構成例)
図5は、マルチコアプロセッサシステム100のハードウェア構成例を示す説明図である。本実施の形態のマルチコアプロセッサシステム100において、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
マルチコアプロセッサシステム100は、複数のCPU101と、各々のCPU101に対応したキャッシュ102と、共有メモリ103と、メモリコントローラ104と、ストレージ105と、を有している。さらに、マルチコアプロセッサシステム100は、I/F(InterFace)106と、ディスプレイ107と、マウス108と、キーボード109と、を有している。キャッシュ102と、共有メモリ103と、メモリコントローラ104と、ストレージ105と、I/F106と、ディスプレイ107と、マウス108と、キーボード109とは、バス110を介して接続されている。複数のCPU101は、キャッシュ102を介してバス110と接続されている。
ここで、たとえば、CPU101−1は、マルチコアプロセッサシステム100の全体の制御を司る。たとえば、CPU101−1は、利用者によって起動されたアプリケーションのスレッドをいずれのCPU101に割り当てるかをスケジューリングする。アプリケーションは、ジョブであり、スレッドとは、CPU101の処理単位である。たとえば、CPU101−1〜CPU101−nは、割り当てられたスレッドを実行する。キャッシュ102は、キャッシュコントローラ121と、キャッシュメモリ122と、を有している。
共有メモリ103は、複数のCPU101で共有され、CPU101のワークエリアとして使用される。共有メモリ103としては、たとえば、RAMが挙げられる。メモリコントローラ104は、複数のCPU101から共有メモリ103へのアクセスを制御する。ストレージ105は、ブートプログラムやアプリケーションのプログラムを記憶している。ストレージ105としては、たとえば、磁気ディスクが挙げられる。
I/F106は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークNWに接続され、このネットワークNWを介して他の装置に接続される。そして、I/F106は、ネットワークNWと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F106には、たとえばモデムやLANアダプタなどを採用することができる。
ディスプレイ107は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ107は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
キーボード109は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス108は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
(キャッシュコントローラ121の機能例)
図6は、キャッシュコントローラ121の機能例を示すブロック図である。図6では、CPU101とキャッシュ102との接続関係と、キャッシュコントローラ121の具体的な機能例を示す。上述したように、キャッシュメモリ122は、キャッシュラインclの集合である。各キャッシュラインclは、「Tag部」と「Data部」とのフィールドを有している。「Tag部」は、「Status」と「Address」とのフィールドを有している。
CPU101とキャッシュコントローラ121とは、「Address」と各種要求をCPU101からキャッシュコントローラ121へ入力する信号線と、Dataを互いに入出力する信号線と、によって接続されている。ここでは、各種要求には、「Load」と「Load_nc」と、「Store」と「Store_nc」と、がある。キャッシュコントローラ121とキャッシュメモリ122とは、「Status」と、「Address」と、「Data」と、を互いに入出力する信号線によって接続されている。さらに、キャッシュコントローラ121とキャッシュメモリ122とは、書き込みと読み出しのいずれの信号であるかを示す「Read/Write」の信号線によって接続されている。
キャッシュコントローラ121は、受付部601と、取得部602と、格納部603と、応答部604と、を有している。キャッシュコントローラ121の各部は、NAND回路、NOR回路やFF(Flip Flop)などの回路素子によって実現される。または、キャッシュコントローラ121は演算装置を有し、各機能および各動作を実現するプログラムを該演算装置が実行することにより実現されてもよい。つぎに、本実施の形態にかかる各部の詳細な説明をする。
受付部601は、ノンスヌープ参照要求を示す情報と、スヌープ参照要求を示す情報と、が区別されたプログラムを実行中のCPU101から参照要求を受け付ける。ここで、プログラムとは、上述した実行コードである。具体的には、たとえば、受付部601は、CPU101によって「Load」の信号線または「Load_nc」の信号線にイネーブル信号が入力されることにより、参照要求を受け付ける。CPU101は、「Load」の信号線または「Load_nc」の信号線にイネーブル信号を出力すると同時に「Address」の信号線にアドレス情報を出力する。
つぎに、取得部602は、受付部601によりノンスヌープ参照要求が受け付けられた場合、スヌープ処理を行わずに、共有メモリ103から指定領域に記憶された情報を取得する。具体的には、たとえば、取得部602は、受付部601により「Load_nc」を受け付けた場合、「Address」の信号線に入力されたアドレス情報が示す共有メモリ103内の領域に記憶されたデータを、バスとメモリコントローラ104を介して取得する。
そして、格納部603は、取得部602によって得られた情報を実行中のCPU101が有するキャッシュメモリ122に格納する。具体的には、たとえば、格納部603は、「Read/Write」の信号線に「Write」を示す信号、「Status」の信号線に「M」、を出力する。同時に、たとえば、格納部603は、「Address」の信号線に受け付けたアドレス情報を含む共有メモリ103内の領域の先頭アドレス情報、「Data」の信号線に取得部602によって取得されたデータを出力する。これにより、キャッシュメモリ122は、いずれかのキャッシュラインclに取得されたデータを格納する。
また、取得部602は、スヌープ参照要求が受け付けられた場合において、受け付けた参照要求に指定された指定領域に記憶されたデータがキャッシュメモリ122に格納されている場合、共有メモリ103から指定領域に記憶された情報を取得しない。
また、受付部601は、ノンスヌープ更新要求を示す情報と、スヌープ更新要求を示す情報と、が区別されたプログラムを実行中のCPU101から更新要求を受け付ける。具体的には、たとえば、受付部601は、CPU101によって「Store」の信号線または「Stoer_nc」の信号線にイネーブル信号が入力されることにより、更新要求を受け付ける。CPU101は、「Store」の信号線または「Store_nc」の信号線にイネーブル信号を出力すると同時に「Address」の信号線にアドレス情報を出力する。
つぎに、取得部602は、受付部601によりノンスヌープ更新要求が受け付けられた場合、スヌープ処理を行わずに、共有メモリ103から指定領域に記憶された情報を取得する。具体的には、たとえば、取得部602は、受付部601により「Store_nc」を受け付けた場合、「Address」の信号線に入力されたアドレス情報が示す共有メモリ103内の領域に記憶されたデータを、バスとメモリコントローラ104を介して取得する。
そして、格納部603は、取得部602によって得られた情報を実行中のCPU101が有するキャッシュメモリ122に格納する。具体的には、たとえば、格納部603は、「Read/Write」の信号線に「Write」を示す信号と、「Status」の信号線に「M」と、をキャッシュメモリ122に出力する。同時に、たとえば、格納部603は、「Address」の信号線に受け付けたアドレス情報を含む共有メモリ103内の領域の先頭アドレス情報と、「Data」の信号線に取得部602によって取得されたデータと、を出力する。これにより、キャッシュメモリ122は、いずれかのキャッシュラインclに取得されたデータを格納する。
また、取得部602は、スヌープ更新要求が受け付けられた場合において、受け付けた更新要求に指定された指定領域に記憶されたデータがキャッシュメモリ122に格納されている場合、共有メモリ103から指定領域に記憶された情報を取得しない。
(状態遷移例)
つぎに、通常の参照要求または更新要求における「Status」に設定される状態の遷移と、実施の形態1にかかる参照要求または更新要求における「Status」に設定される状態の遷移と、について説明する。
図7は、スヌープ参照要求またはスヌープ更新要求における状態遷移の一例を示す説明図である。図7では、キャッシュコントローラ121がスヌープ参照要求またはスヌープ更新要求を受け付けた場合において、該要求によって更新または参照されるキャッシュラインclに設定される「Status」の状態遷移図を示している。図7において、実線によって示す遷移は、キャッシュラインclを有するキャッシュメモリ122を制御するキャッシュコントローラ121が受け付けた要求に沿った遷移である。破線によって示す遷移は、キャッシュ102からのスヌープ処理による遷移である。遷移に付された情報が遷移条件である。各状態において、遷移条件が満たされると、状態が遷移する。各遷移条件について説明する。
「Read Hit」とは、スヌープ参照要求を受け付けたキャッシュコントローラ121が制御するキャッシュメモリ122に、スヌープ参照要求が示す共有メモリ103内の領域に記憶されたデータが格納されていることを示している。
「Read Miss(Snoop hit)」とは、スヌープ参照要求を受け付けたキャッシュコントローラ121が制御するキャッシュメモリ122に、スヌープ参照要求が示す共有メモリ103内の領域に記憶されたデータが格納されていない。そして、キャッシュコントローラ121がスヌープ処理によって他のキャッシュメモリ122から該データが得られたことを示している。
「Read Miss(Snoop miss)」とは、スヌープ参照要求を受け付けたキャッシュコントローラ121が制御するキャッシュメモリ122に、スヌープ参照要求が示す共有メモリ103内の領域に記憶されたデータが格納されていない。そして、キャッシュコントローラ121が、スヌープ処理によって他のキャッシュメモリ122から該データが得られないために、共有メモリ103から該データを取得することを示している。
「Write Hit」とは、スヌープ更新要求を受け付けたキャッシュコントローラ121が制御するキャッシュメモリ122に、スヌープ更新要求が示す共有メモリ103内の領域に記憶されたデータが含まれている。そして、キャッシュコントローラ121が該データにスヌープ更新要求が含むデータを上書きすることを示している。
「Write Miss」とは、スヌープ更新要求を受け付けたキャッシュコントローラ121が制御するキャッシュメモリ122にスヌープ更新要求が示す共有メモリ103内の領域に記憶されたデータが含まれていない。そして、キャッシュコントローラ121がスヌープ処理によって他のキャッシュメモリ122からデータを取得する。そして、キャッシュコントローラ121が該データにスヌープ更新要求が含むデータを上書きすることを示している。
「Write Back」とは、スヌープ更新要求を受け付けたキャッシュコントローラ121が他のキャッシュコントローラ121からのスヌープ処理によって共有メモリ103内の領域にデータを書き戻すことを示している。
「Invalidate」とは、他のキャッシュコントローラ121からのスヌープ処理によって無効化処理をキャッシュコントローラ121が受け付けると、該当するキャッシュラインclを無効化することを示している。
「Snoop hit」とは、スヌープ更新要求またはスヌープ参照要求を受け付けた他のキャッシュコントローラ121がスヌープ処理によって所望のデータを得られたことを示している。
図8は、ノンスヌープ参照要求またはノンスヌープ更新要求における状態遷移の一例を示す説明図である。図8では、キャッシュコントローラ121が実施の形態1にかかる参照要求または更新要求を受け付けた場合において、該要求によって更新または参照されるキャッシュラインclに設定される「Status」の状態遷移図を示している。
図8において、実線によって示す遷移は、キャッシュラインclを有するキャッシュメモリ122を制御するキャッシュコントローラ121が受け付けた要求に沿った遷移である。遷移に付された情報が遷移条件である。各状態において、遷移条件が満たされると、状態が遷移する。
実行コード内の更新要求および参照要求について、スヌープ更新要求とノンスヌープ更新要求、スヌープ参照要求とノンスヌープ参照要求が正確に区別されている場合、「S」の状態に遷移することはない。つぎに、各遷移条件について説明する。
「Read(nc)hit」とは、ノンスヌープ参照要求を受け付けたキャッシュコントローラ121が有するキャッシュメモリ122に、ノンスヌープ参照要求が示す共有メモリ103内の領域に記憶されたデータが記憶されていることを示している。
「Read(nc)miss」とは、ノンスヌープ参照要求を受け付けたキャッシュコントローラ121が共有メモリ103からノンスヌープ参照要求が示す共有メモリ103内の領域に記憶されたデータを取得する。そして、該キャッシュコントローラ121が取得したデータをキャッシュメモリ122に格納することを示している。
「Write(nc)hit」とは、ノンスヌープ更新要求を受け付けたキャッシュコントローラ121が有するキャッシュメモリ122に、ノンスヌープ更新要求が示す共有メモリ103内の領域に記憶されたデータが記憶されている。そして、キャッシュコントローラ121が該データにノンスヌープ更新要求に含まれるデータを上書きする。
「Write(nc)miss」とは、ノンスヌープ更新要求を受け付けたキャッシュコントローラ121が有するキャッシュメモリ122に、ノンスヌープ更新要求が示す共有メモリ103内の領域に記憶されたデータが記憶されていない。そのため、キャッシュコントローラ121が共有メモリ103からノンスヌープ更新要求が示す共有メモリ103内の領域に記憶されたデータを取得する。そして、キャッシュコントローラ121が該データにノンスヌープ更新要求に含まれるデータを上書きする。
実施の形態1で説明したように、制御装置は、共有メモリ内の参照だけの領域への参照要求であると、他のCPUにより該領域は更新されないため、スヌープ処理を行わずに共有メモリから該領域に記憶されたデータを取得する。これにより、処理時間の短縮化を図ることができ、処理性能の向上を図ることができる。
また、実施の形態1で説明したように、制御装置は、共有メモリ内の更新だけの領域への更新要求であると、他のCPUにより該領域は参照されないため、スヌープ処理を行わずに共有メモリから該領域に記憶されたデータを取得する。そして、制御装置は取得したデータをキャッシュに格納後、格納した該データに参照要求が示すデータを上書きする。これにより、処理時間の短縮化を図ることができ、処理性能の向上を図ることができる。
(実施の形態2)
実施の形態2では、解析装置は、プログラムをシミュレータによって実行中に、参照要求または更新要求によって指定された共有メモリ内の領域ごとに参照要求と更新要求の有無を解析する。そして、実施の形態2では、解析装置は、プログラム内の参照要求を示す情報について参照要求が示すメモリ内の領域に更新が行われるか否かを判断する。これにより、プログラムの設計者が、判断結果を参照することにより、プログラムに含まれるいずれの参照要求についてノンスヌープ参照要求を示す情報に変換を行うかを判別することができる。したがって、解析装置はプログラムの設計者の手間を省くことができる。
また、実施の形態2では、解析装置は、プログラム内の更新要求を示す情報について更新要求が示すメモリ内の領域に参照が行われるか否かを判断する。これにより、プログラムの設計者が、判断結果を参照することにより、プログラムに含まれるいずれの更新要求についてノンスヌープ更新要求を示す情報に変換を行うかを判別することができる。したがって、解析装置はプログラムの設計者の手間を省くことができる。
解析装置のハードウェア構成については、図5のマルチコアプロセッサシステムのハードウェア構成と同一であってもよいし、マルチコアプロセッサでなくてもよい。
図9は、解析装置による動作例を示す説明図である。図9に示すメモリアクセス情報910は、メモリモデル内の領域ごとに参照要求によって指定された回数と更新要求によって指定された回数を示している。メモリアクセス情報910は、アドレス、CPUID、参照要求数、更新要求数のフィールドを有する。アドレスのフィールドには、メモリモデルがキャッシュラインのサイズで分けられた複数の領域の各領域の先頭アドレスが登録される。アドレスのフィールドにはメモリモデルのアドレス順に情報が設定されており、たとえば、アドレスaddr0からアドレスaddr1の直前のアドレスまでによって1つの領域が示されている。CPUIDのフィールドには、アドレスのフィールドに登録されたアドレスにアクセスを行ったCPUモデルの識別情報が登録される。参照要求数のフィールドには、アドレスのフィールドに登録されたアドレスに参照要求が行われた回数が登録される。更新要求数のフィールドには、アドレスのフィールドに登録されたアドレスに更新要求が行われた回数が登録される。各フィールドに情報が設定されることにより、解析情報911−1〜911−mがレコードとして記憶される。
まず、解析装置900は、プログラムを実行中に、参照要求または更新要求によって指定されたメモリ内の領域ごとに参照要求と更新要求の有無を解析する。ここで、プログラムとは、実行コード920である。具体的には、たとえば、解析装置900は、マルチコアプロセッサシステムがモデル化されたシステムモデルと、検証パターンと、実行コード920と、をシミュレータに与えることにより、実行コード920のシミュレーションを行う。
ここで、システムモデルとは、たとえば、ESL(Electronic System Level)モデルであってもよい。ここで、ESLモデルとは、ハードウェアデバイスのビヘイビア(ふるまい)をもとに記述される。ESLシミュレータにESLモデルが与えられると、ESLシミュレータには、ESLモデルに記述されたハードウェア環境をシミュレーションする。検証パターンとは、実行コード920に与えるシミュレーションの条件である。たとえば、実行コード920が画像処理に関するプログラムであれば、検証用の画像データであったり、画像処理によって画像データが加工される場合の条件であったりする。
そして、たとえば、解析装置900は、実行コード920をCPUモデル901が実行中に、CPUモデル901からメモリモデル902への参照要求または更新要求を検出する。たとえば、解析装置900は、「Store x=3」を検出すると、「x」が格納される領域を示すアドレスが示す領域を含む領域の先頭アドレスを有する解析情報911をメモリアクセス情報910から特定する。そして、たとえば、解析装置900は、特定された解析情報911のCPUIDのフィールドにCPUモデル901の識別情報を登録する。さらに、たとえば、解析装置900は、特定された解析情報911の更新要求回数のフィールドに設定された値をカウントアップする。このようにして、解析装置900によってメモリアクセス情報910は更新される。
つぎに、解析装置900は、シミュレータによるシミュレーションが終了すると、プログラム内の参照要求を示す情報によって指定されたメモリ内の領域が、更新要求によって指定されない領域であるか否かを解析結果に基づいて判断する。具体的には、たとえば、解析装置900は、実行コード920内の「Load」の記載を検出する。そして、たとえば、解析装置900は、「Load y」の「y」の値が格納された領域を含む領域の先頭アドレスを有する解析情報911をメモリアクセス情報910から特定する。そして、たとえば、解析装置900は、特定された解析情報911が有する更新要求数の値が「0」であるかを判断する。たとえば、特定された解析情報911が有する更新要求数の値が「0」の場合、解析装置900は、「Load y」は更新要求によって指定されない領域を指定する参照要求であると判断する。そして、解析装置900は、判断結果を出力する。たとえば、解析装置900は、判断結果をストレージ105に記憶させてもよいし、ディスプレイ107に表示してもよい。
これにより、プログラムの設計者は、判断結果を参照することにより、実行コード920内にある参照要求を示す情報を、更新要求がないメモリの領域を指定する参照要求を示す情報に変換することができる。したがって、プログラムの設計にかかる手間を省くことができる。
さらに、解析装置900は、更新要求によって指定されない領域であると判断された場合、参照要求を示す情報を、更新要求がないメモリの領域を指定する参照要求を示す情報に変換する。具体的には、たとえば、解析装置900は、「Load y」を「Load_nc y」に変換する。変換結果はストレージなどの記憶装置に記憶される。変換後の実行コードが実行コード930である。
これにより、キャッシュコントローラは、変換後のプログラムを実行中のCPUから参照要求を受け付けると、スヌープ参照要求であるかノンスヌープ参照要求であるかを判別することができる。
また、解析装置900は、シミュレータによるシミュレーションが終了すると、プログラム内の更新要求を示す情報によって指定されたメモリ内の領域が、参照要求によって指定されない領域であるか否かを解析結果に基づいて判断する。具体的には、たとえば、解析装置900は、実行コード920内の「Store」の記述情報を検出する。そして、たとえば、解析装置900は、「Store x」の記述情報のうち「x」の値が格納される領域を含む領域の先頭アドレスを有する解析情報911をメモリアクセス情報910から特定する。そして、たとえば、解析装置900は、特定された解析情報911が有する参照要求数の値が「0」であるかを判断する。たとえば、特定された解析情報911が有する参照要求数の値が「0」の場合、解析装置900は、「Store x」がノンスヌープ更新要求であると判断する。そして、解析装置900は、判断結果を出力する。たとえば、解析装置900は、判断結果をストレージ105に記憶させてもよいし、ディスプレイ107に表示してもよい。
プログラムの設計者は、判断結果を参照することにより、実行コード920内にある更新要求を示す情報を、参照要求がないメモリの領域を指定する更新要求を示す情報に変換することができる。したがって、プログラムの設計にかかる手間を省くことができる。
さらに、解析装置900は、参照要求によって指定されない領域であると判断された場合、更新要求を示す情報を、参照要求がないメモリの領域を指定する更新要求を示す情報に変換する。具体的には、たとえば、解析装置900は、「Store x」を「Store_nc x」に変換する。変換結果はストレージなどの記憶装置に記憶される。変換後の実行コードが実行コード930である。
これにより、キャッシュコントローラは、変換後のプログラムを実行中のCPUから更新要求を受け付けると、スヌープ更新要求であるかノンスヌープ参照要求であるかを判別することができる。解析装置900は、プログラム内のスヌープ更新要求を示す情報とノンスヌープ更新要求を示す情報とを精度よく区別させることができる。
(解析装置900の機能例)
図10は、解析装置900の機能例を示すブロック図である。解析装置900は、解析部1001と、判断部1002と、出力部1003と、変換部1004と、を有している。解析部1001から変換部1004の処理は、たとえば、解析装置900が有するストレージなどの記憶装置に記憶された解析プログラムにコーディングされている。複数のCPUのうちのいずれかのCPUが該検出プログラムを記憶装置からロードし、解析プログラムにコーディングされた処理を実行することにより、部から部の機能が実現される。
また、各機能部の処理結果は、たとえば、解析装置900が有する共有メモリなどの記憶装置に記憶される。
まず、解析部1001は、プログラムを実行中に、メモリ内の領域ごとに参照要求による指定の有無と更新要求による指定の有無を解析する。上述したように、たとえば、解析部1001は、シミュレータによって、システムモデルのCPUモデルに実行コード920を割り当てる。そして、たとえば、解析部1001は、CPUモデルからメモリモデルへの要求を解析し、メモリアクセス情報910を作成する。
つぎに、判断部1002は、プログラム内の参照要求を示す情報によって指定される前記メモリ内の領域が、更新要求による指定の無い領域であるか否かを解析結果に基づいて判断する。出力部1003は、判断結果を出力する。たとえば、出力部1003は、判断結果をストレージ105に記憶させてもよいし、ディスプレイ107に表示してもよい。
さらに、変換部1004は、更新要求によって指定されない領域であると判断された場合、参照要求を示す情報を、更新要求がないメモリの領域を指定する参照要求を示す情報に変換する。具体的には、たとえば、図9で示したように、変換部1004は、「Load y」を「Load_nc y」に変換する。出力部1003は、変換結果を出力する。
また、判断部1002は、プログラム内の更新要求を示す情報によって指定される前記メモリ内の領域が、前記参照要求による指定の無い領域であるか否かを解析結果に基づいて判断する。出力部1003は、判断結果を出力する。たとえば、出力部1003は、判断結果をストレージ105に記憶させてもよいし、ディスプレイ107に表示してもよい。
そして、変換部1004は、参照要求によって指定されない領域であると判断された場合、更新要求を示す情報を、参照要求がないメモリの領域を指定する更新要求を示す情報に変換する。具体的には、たとえば、図9で示したように、変換部1004は、「Store x」を「Store_nc x」に変換する。
(解析装置900が行う解析処理手順)
図11は、解析装置900が行う解析処理手順例を示すフローチャートである。まず、解析装置900は、ソースコード940をビルドすることにより、実行コード920を生成する(ステップS1101)。
たとえば、変数aが更新要求のみの変数の場合、ソースコード940の設計者が、代入式「a=c+20;」を「a:=b+20;」と記述してもよい。そして、たとえば、ソースコード940のビルド時にコンパイラが、実行コード920に「a:=b+20;」を「Load」に代わって「Load_nc」を出力してもよい。
つぎに、解析装置900は、実行コード920と、検証パターン950と、システムモデルをシミュレータに与えることにより、解析処理を実行する(ステップS1102)。ステップS1102により、メモリアクセス情報910が生成される。解析装置900は、再ビルド処理を実行することにより、実行コード930を生成する(ステップS1103)。
図12は、図11で示した解析処理(ステップS1102)例の詳細な説明を示すフローチャートである。解析装置900は、シミュレーションの実行を開始し(ステップS1201)、参照要求または更新要求を検出したか否かを判断する(ステップS1202)。参照要求および更新要求が検出されなかった場合(ステップS1202:No)、ステップS1207へ移行する。更新要求が検出された場合(ステップS1202:更新要求)、解析装置900は、メモリアクセス情報910から、検出された更新要求が指定する領域に対応する解析情報911を特定する(ステップS1203)。解析装置900は、特定された解析情報911の更新要求数をカウントアップし(ステップS1204)、ステップS1207へ移行する。
参照要求が検出された場合(ステップS1202:参照要求)、解析装置900は、メモリアクセス情報910から、検出された参照要求が指定する領域に対応する解析情報911を特定する(ステップS1205)。解析装置900は、特定した解析情報911の参照要求数をカウントアップし(ステップS1206)、ステップS1207へ移行する。
ステップS1202のNoの場合、ステップS1206、またはステップS1204のつぎに、解析装置900は、シミュレーションが終了したか否かを判断する(ステップS1207)。シミュレーションが終了していない場合(ステップS1207:No)、ステップS1202へ戻る。シミュレーションが終了した場合(ステップS1207:Yes)、一連の処理を終了する。
図13は、図11で示した再ビルド処理(ステップS1103)の第1の例の詳細な説明を示すフローチャートである。まず、解析装置900は、実行コード920に含まれる命令情報の中で、未選択な命令情報があるか否かを判断する(ステップS1301)。未選択な命令情報がある場合(ステップS1301:Yes)、解析装置900は、未選択な命令情報から1つの命令情報を選択する(ステップS1302)。
解析装置900は、選択された命令情報が参照要求を示す情報か否かを判断する(ステップS1303)。選択された命令情報が参照要求を示す情報である場合(ステップS1303:Yes)、解析装置900は、メモリアクセス情報910から、選択された参照要求を示す情報が指定する領域に対応する解析情報911を特定する(ステップS1304)。
解析装置900は、選択された参照要求を示す情報が指定する領域に更新要求があるか否かを判断する(ステップS1305)。選択された参照要求を示す情報が指定する領域に更新要求がない場合(ステップS1305:No)、解析装置900は、判断結果を出力する(ステップS1306)。
そして、解析装置900は、選択された参照要求を示す情報を、更新要求がない領域を指定する参照要求を示す情報に変換し(ステップS1307)、ステップS1301へ戻る。たとえば、図9の例では、「Load y」が「Load_nc y」に変換される。選択された命令情報が参照要求を示す情報でない場合(ステップS1303:No)、解析装置900は、選択された命令情報が更新要求を示す情報か否かを判断する(ステップS1308)。
選択された命令情報が更新要求を示す情報である場合(ステップS1308:Yes)、解析装置900は、メモリアクセス情報910から、選択された更新要求を示す情報が指定する領域に対応する解析情報911を特定する(ステップS1309)。解析装置900は、選択された更新要求を示す情報が指定する領域に参照要求があるか否かを判断する(ステップS1310)。選択された更新要求を示す情報が指定する領域に参照要求がある場合(ステップS1310:Yes)、ステップS1301へ戻る。
選択された更新要求を示す情報が指定する領域に参照要求がない場合(ステップS1310:No)、解析装置900は、判断結果を出力する(ステップS1311)。そして、解析装置900は、選択された更新要求を示す情報を、参照要求がない領域を指定する更新要求を示す情報に変換し(ステップS1312)、ステップS1301へ戻る。たとえば、図9の例では、「Store x」が「Store_nc x」に変換される。
ステップS1305において、選択された参照要求を示す情報が指定する領域に更新要求がある場合(ステップS1305:Yes)、ステップS1301へ戻る。
ステップS1308において、選択された命令情報が更新要求を示す情報でない場合(ステップS1308:No)、ステップS1301へ戻る。
一方、ステップS1301において、未選択な命令情報がない場合(ステップS1301:No)、一連の処理を終了する。
図14は、図11で示した再ビルド処理(ステップS1103)の第2の例の詳細な説明を示すフローチャートである。図14では、プログラムの設計者が、ノンスヌープ参照要求であると判断し、「Load_nc」を割りつけても、解析装置900は、解析結果によって該参照要求が指定する領域に更新要求があると判断した場合、エラーを出力する。また、図14では、プログラムの設計者が、ノンスヌープ更新要求であると判断し、「Store_nc」を割りつけても、解析装置900は、解析結果によって該更新要求が指定する領域に参照要求があると判断した場合、エラーを出力する。
具体的には、まず、解析装置900は、実行コード920に含まれる命令情報の中で、未選択な命令情報があるか否かを判断する(ステップS1401)。未選択な命令情報がある場合(ステップS1401:Yes)、解析装置900は、未選択な命令情報から1つの命令情報を選択する(ステップS1402)。
解析装置900は、選択された命令情報が、更新要求がない領域を指定する参照要求を示す情報か否かを判断する(ステップS1403)。具体的には、たとえば、「Load_nc」であるか否かが判断される。選択された命令情報が参照要求を示す情報である場合(ステップS1403:Yes)、解析装置900は、メモリアクセス情報910から、選択された参照要求を示す情報が指定する領域に対応する解析情報911を特定する(ステップS1404)。
解析装置900は、選択された参照要求を示す情報が指定する領域に更新要求があるか否かを判断する(ステップS1405)。選択された参照要求を示す情報が指定する領域に更新要求がある場合(ステップS1405:Yes)、解析装置900は、エラーを出力し(ステップS1406)、ステップS1401へ戻る。一方、選択された参照要求を示す情報が指定する領域に更新要求がない場合(ステップS1405:No)、ステップS1401へ戻る。
ステップS1403において、選択された命令情報が参照要求を示す情報でない場合(ステップS1403:No)、解析装置900は、選択された命令情報が参照要求がない領域を指定する更新要求を示す情報か否かを判断する(ステップS1407)。具体的には、たとえば、「Store_nc」であるか否かが判断される。
選択された命令情報が更新要求を示す情報である場合(ステップS1407:Yes)、解析装置900は、メモリアクセス情報910から、選択された更新要求を示す情報が指定する領域に対応する解析情報911を特定する(ステップS1408)。
つぎに、解析装置900は、選択された更新要求を示す情報が指定する領域に参照要求があるか否かを判断する(ステップS1409)。選択された更新要求を示す情報が指定する領域に参照要求がない場合(ステップS1409:No)、ステップS1401へ戻る。
一方、選択された更新要求を示す情報が指定する領域に参照要求がある場合(ステップS1409:Yes)、解析装置900は、エラーを出力し(ステップS1410)、ステップS1401へ戻る。
また、ステップS1407において、選択された命令情報が更新要求を示す情報でない場合(ステップS1407:No)、ステップS1401へ戻る。
ステップS1401において、未選択な命令情報がない場合(ステップS1401:No)、一連の処理を終了する。
実施の形態1で説明したように、制御装置は、共有メモリ内の参照だけの領域への参照要求であると、他のCPUにより該領域は更新されないため、スヌープ処理を行わずに共有メモリから該領域に記憶されたデータを取得する。これにより、制御装置は、不要なスヌープ処理の回数を減少させることができ、処理性能の向上を図ることができる。
また、更新要求のない共有メモリ内の領域への参照要求について、キャッシュメモリに参照対象となるデータが記憶されていれば、制御装置は、直ちにCPUへ応答することができる。したがって、制御装置は、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができ、処理能力を向上させることができる。
また、実施の形態1で説明したように、制御装置は、共有メモリ内の更新だけの領域への更新要求であると、他のCPUにより該領域は参照されないため、スヌープ処理を行わずに共有メモリから該領域に記憶されたデータを取得する。そして、制御装置は取得したデータをキャッシュに格納後、格納した該データに更新要求に含まれる更新データを上書きする。これにより、制御装置は、不要なスヌープ処理の回数を減少させることができ、処理性能の向上を図ることができる。
また、参照要求のない共有メモリ内の領域への更新要求について、キャッシュメモリに更新対象となるデータが記憶されていれば、制御装置は、直ちにCPUへ応答することができる。したがって、制御装置は、スヌープ処理を実行しないことにより、スヌープ処理にかかる処理時間を短縮化させることができ、処理能力を向上させることができる。
実施の形態2で説明したように、解析装置は、プログラムをシミュレータによって実行中に、参照要求または更新要求によって指定された共有メモリ内の領域ごとに参照要求と更新要求の有無を解析する。そして、解析装置は、プログラム内の参照要求を示す情報について参照要求が示すメモリ内の領域に更新が行われるか否かを判断する。判断結果が出力されるため、解析装置は、プログラムの設計者はプログラムに含まれるいずれの更新要求についてノンスヌープ更新要求を示す情報に変換を行うかを考える手間を省くことができる。
また、解析装置は、判断結果に基づいて、プログラム内の参照要求が、更新要求によって指定されない領域であると判断された場合、該参照要求を示す情報を、ノンスヌープ参照要求を示す情報に変換する。解析装置は、プログラムの設計者は各参照要求がノンスヌープ参照要求であるか否かについて考える手間を省くことができる。さらに、変換後のプログラムを実行中のCPUからキャッシュコントローラが参照要求を受け付けると、スヌープ参照要求であるかノンスヌープ参照要求であるかを判別することができる。
また、実施の形態2で説明したように、解析装置は、プログラムをシミュレータによって実行中に、参照要求または更新要求によって指定された共有メモリ内の領域ごとに参照要求と更新要求の有無を解析する。そして、解析装置は、プログラム内の更新要求を示す情報について更新要求が示すメモリ内の領域に参照が行われるか否かを判断する。判断結果が出力されるため、解析装置は、プログラムの設計者がプログラムに含まれるいずれの更新要求についてノンスヌープ更新要求を示す情報に変換を行うかを考える手間を省くことができる。
また、解析装置は、判断結果に基づいて、プログラム内の更新要求が、参照要求によって指定されない領域であると判断された場合、該更新要求を示す情報、ノンスヌープ更新要求を示す情報に変換する。さらに、変換後のプログラムを実行中のCPUからキャッシュコントローラが更新要求を受け付けると、スヌープ更新要求であるかノンスヌープ更新要求であるかを判別することができる。
なお、本実施の形態2で説明した解析方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本解析プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本解析プログラムは、インターネット等のネットワークを介して配布してもよい。