(57)【要約】【課題】ハードウェアを直接参照することなくプログラムの指定範囲の処理を精度よく再現することができる演算処理装置を実現する。【解決手段】演算処理装置を、オリジナルプログラムの所定範囲を取得する取得部と、所定範囲のプログラムにおいて使用されるデータの所定範囲のプログラムの実行直前における値と、オリジナルプログラムの実行に使用されるキャッシュメモリが１ウェイで動作するときの各データについての所定範囲のプログラムでのインデックスの重なりに関する情報とを生成する生成部と、生成された所定範囲のプログラム実行直前の値とインデックスの重なりに関する情報とを用いて所定範囲のプログラムを実行する実行部とを有する構成とする。【選択図】図４
2015179427.tif 000002
【特許請求の範囲】
【請求項１】
オリジナルプログラムの所定範囲を取得する取得部と、
前記所定範囲のプログラムにおいて使用されるデータの前記所定範囲のプログラムの実行直前における値と、前記オリジナルプログラムの実行に使用されるキャッシュメモリが１ウェイで動作するときの前記データについての前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報とを生成する生成部と、
前記生成された前記所定範囲のプログラム実行直前の値と前記キャッシュインデックスの重なりに関する情報とを用いて前記所定範囲のプログラムを実行する実行部と
を有する演算処理装置。
【請求項２】
前記実行部は、前記所定範囲のプログラムにおいて使用される各データのキャッシュインデックスの重なりと、前記生成部が生成した前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報が示すキャッシュインデックスの重なりとが一致するメモリアドレスの配置を特定し、前記所定範囲のプログラムにおいて使用されるデータの前記所定範囲のプログラムの実行直前における値と前記特定したメモリアドレスの配置とを用いて前記所定範囲のプログラムを実行する、請求項１に記載の演算処理装置。
【請求項３】
前記所定範囲のプログラムにおいて使用されるデータのうちの２つのデータについて、前記２つのデータの各データ取得を前記オリジナルプログラムの実行に使用されるキャッシュメモリに対して交互に実行するデータ処理部と、
前記データ処理部による前記データ取得の所要時間が所定の閾値を超えるか否かを判定するデータ取得時間判定部と
をさらに有し、
前記生成部は、前記データ取得の所要時間が所定の閾値を超えると判定される場合に、前記所定範囲のプログラムにおける前記２つのデータのキャッシュインデックスは重なることを示す情報を、前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報として生成する
請求項１又は請求項２に記載の演算処理装置。
【請求項４】
前記データ処理部は、前記データ取得の所要時間が所定の閾値を超えると判定された前記２つのデータについて、前記オリジナルプログラムの実行に使用されるメインメモリで、前記２つのデータの一方のデータを他方のデータから所定のバイト数ずつ離して配置しながら前記データ取得を実行し、
前記生成部は、前記データ取得時間判定部により前記データ取得の所要時間が所定の閾値を超えないと判定されたときの前記一方のデータと前記他方のデータとの前記メインメモリにおける配置に関する情報を、前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報として生成する
請求項３に記載の演算処理装置。
【請求項５】
前記オリジナルプログラムの実行に使用されるキャッシュメモリのウェイ数が２以上であり、前記キャッシュメモリが複数のセクタに分割されている場合に、前記ウェイ数を１に指定し、前記所定範囲のプログラムにおいて使用されるデータの格納先となるセクタを第１のセクタに指定し、前記所定範囲のプログラムにおいて使用されないデータの格納先となるセクタを第２のセクタに指定するキャッシュ設定部、をさらに有する請求項１から請求項４のいずれか１項に記載の演算処理装置。
【請求項６】
オリジナルプログラムの所定範囲を取得する取得ステップと、
前記所定範囲のプログラムにおいて使用されるデータの前記所定範囲のプログラムの実行直前における値と、前記オリジナルプログラムの実行に使用されるキャッシュメモリが
１ウェイで動作するときの前記所定範囲のプログラムでの前記データについてのキャッシュインデックスの重なりに関する情報とを生成する生成ステップと、
前記生成された前記所定範囲のプログラム実行直前の値と前記キャッシュインデックスの重なりに関する情報とを用いて前記所定範囲のプログラムを実行する実行ステップと
を有する演算処理方法。
【請求項７】
コンピュータに、
オリジナルプログラムの所定範囲を取得する取得ステップと、
前記所定範囲のプログラムにおいて使用されるデータの前記所定範囲のプログラムの実行直前における値と、前記オリジナルプログラムの実行に使用されるキャッシュメモリが１ウェイで動作するときの前記所定範囲のプログラムでの前記データについてのキャッシュインデックスの重なりに関する情報とを生成する生成ステップと、
前記生成された前記所定範囲のプログラム実行直前の値と前記キャッシュインデックスの重なりに関する情報とを用いて前記所定範囲のプログラムを実行する実行ステップと
を実行させる演算処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本件開示の発明は、プログラム性能の調整に使用される演算処理装置、演算処理方法および演算処理プログラムに関する。
【背景技術】
【０００２】
プログラムのチューニングや最適化を行う際、オリジナルプログラムの特定範囲を対象としてベンチマークの測定やチューニングを実施することがある。オリジナルプログラムの特定範囲の部分を切り出していわゆるショートプログラムを作成する際には、性能評価ができるようにオリジナルプログラムの実行性能をできるだけ精度よく再現するショートプログラムを作成するのが好ましい。
【０００３】
従来においては、ソースプログラムにおける実行頻度の高い部分を特定して、性能を意識することなく特定範囲を切り出す方法が採用されていた。また、プログラムを論理シミュレータ上で実行して性能評価をすることを目的として設計されたＣＰＵを使用して、ベンチマークプログラムと同レベルの性能評価が可能な縮小プログラムを自動的に作成する方法が採用されていた。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平４−１７５９７４号公報
【特許文献２】特開２００１−４３０７８号公報
【特許文献３】特開２００３−３１６６１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、上記の技術では、ハードウェアを直接参照できない構成のコンピュータ上において、オリジナルプログラムのメモリアクセス処理を精度よく再現することはできない。また、上記の技術では、論理シミュレータ上でメモリアクセス処理を再現しようとしても、ショートプログラムのメモリアクセス命令におけるキャッシュ動作状況を、オリジナルプログラムにおける切り出した部分の動作状況に精度よく合わせることはできない。
【０００６】
そのため、例えば、ＣＰＵによるページングの割当次第で偶発的にキャッシュメモリからデータの追い出し、いわゆるキャッシュスラッシングが発生するオリジナルプログラムにおいて、ショートプログラムで同じ現象を発生させることができる保証はない。また、上記の技術により切り出したショートプログラムに対してチューニングを行っても、個々のメモリアクセス命令の動作状況を考慮していないため、ショートプログラムに実施したチューニングのオリジナルプログラムに対する効果は保証されなかった。
【０００７】
また、オリジナルプログラムにおいてキャッシュスラッシング等の偶発的な現象が発生する場合、その現象に対してチューニングの効果があるか否かは、確率的な性能評価によってしか判断できない。なぜならば、チューニングの効果を確認する際に、偶発的な現象自体が発生せずに、チューニングの効果が確かめられないという可能性があるためである。
【０００８】
本件開示の技術は、上記に鑑みてなされたものであり、その目的とするところは、ハードウェアを直接参照することなくプログラムの指定範囲の処理を精度よく再現することができる演算処理装置を実現することである。
【課題を解決するための手段】
【０００９】
本件開示の演算処理装置は、１つの側面では、オリジナルプログラムの所定範囲を取得する取得部と、所定範囲のプログラムにおいて使用されるデータの所定範囲のプログラムの実行直前における値と、オリジナルプログラムの実行に使用されるキャッシュメモリが１ウェイで動作するときのデータについての所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報とを生成する生成部と、生成された所定範囲のプログラム実行直前の値とキャッシュインデックスの重なりに関する情報とを用いて所定範囲のプログラムを実行する実行部とを有する。
【００１０】
これにより、演算処理装置では、取得した所定範囲におけるプログラムを実行することで、取得対象となるオリジナルプログラムにおけるメモリアクセス命令のキャッシュ動作を精度よく再現することができる。
【発明の効果】
【００１１】
本件開示の技術によれば、ハードウェアを直接参照することなくプログラムの指定範囲の処理を精度よく再現することができる演算処理装置を実現することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、一実施形態における演算処理装置の構成を概略的に示す図である。
【図２】図２は、一実施形態における演算処理装置の機能ブロック図である。
【図３】図３は、一実施形態における演算処理装置により実行される処理のフローチャートである。
【図４】図４は、一実施形態における演算処理装置により実行される処理のフローチャートである。
【図５Ａ】図５Ａは、一実施形態における演算処理装置のキャッシュメモリ上のデータアクセスを模式的に示す図である。
【図５Ｂ】図５Ｂは、一実施形態における演算処理装置のキャッシュメモリ上のデータアクセスを模式的に示す図である。
【図６】図６は、一実施形態における演算処理装置において実行されるオリジナルプログラムの実行時におけるアドレス割り当て状況を模式的に示す図である。
【図７】図７は、一実施形態における演算処理装置において実行されるショートプログラムの実行時における仮想アドレスのアドレス割り当ての一例を模式的に示す図である。
【図８Ａ】図８Ａは、一実施形態における演算処理装置のキャッシュメモリ上のデータアクセスを模式的に示す図である。
【図８Ｂ】図８Ｂは、一実施形態における演算処理装置のキャッシュメモリ上のデータアクセスを模式的に示す図である。
【図９】図９は、一実施形態における演算処理装置により実行される処理のフローチャートである。
【図１０】図１０は、一実施形態における演算処理装置により実行される処理のフローチャートである。
【図１１】図１１は、一実施形態における演算処理装置により実行される処理のフローチャートである。
【図１２】図１２は、一実施形態における演算処理装置により実行される処理のフローチャートである。
【図１３】図１３は、変形例における演算処理装置により実行される処理のフローチャートである。
【図１４】図１４は、変形例における演算処理装置により実行される処理のフローチャートである。
【発明を実施するための形態】
【００１３】
まず、一実施形態における演算処理装置について図面を参照しながら説明する。
【００１４】
図１に示すように、本実施形態に係る演算処理装置１は、ＣＰＵ１０、メインメモリ１１、ＨＤＤ（Hard Disk Drive）１２を備える。また、ＣＰＵ１０は、コア１０ａ、１次
キャッシュ１０ｂ、２次キャッシュ１０ｃを備える。ＣＰＵ１０は、以下に説明する各種処理を実行する。コア１０ａは、ＣＰＵ１０において実行される種々の演算を実行する。１次キャッシュ１０ｂ及び２次キャッシュ１０ｃは、データの読み込みおよび書き込みの動作やキャッシュの機構が既知であるキャッシュメモリである。ＨＤＤ１２には、以下の説明で実行される各種プログラムが格納される。ＣＰＵ１０は、ＨＤＤ１２にアクセスして以下に説明する処理に使用するプログラムを読み出す。
【００１５】
図２に、本実施形態における演算処理装置１の機能ブロック図を示す。本実施形態では、ＣＰＵ１０がＨＤＤ１２から読み出したプログラムをメインメモリ１１に展開して実行することにより、演算処理装置１は、取得部２０ａ、生成部２０ｂ、実行部２０ｃ、データ処理部２０ｄ、データ取得時間判定部２０ｅ、キャッシュ設定部２０ｆとして機能する。
【００１６】
取得部２０ａは、ショートプログラムを実行するために所定範囲のプログラムを取得する。生成部２０ｂは、取得部２０ａにより取得されたプログラムにおいて使用されるデータに関する、後述の中間データ２を生成する。実行部２０ｃは、中間データ２を用いてショートプログラムを実行する。データ処理部２０ｄは、所定範囲のプログラムにおいて使用されるデータのうちの２つのデータに対するアクセスを交互に実行する。
【００１７】
データ取得時間判定部２０ｅは、データ処理部２０ｄによるアクセス処理の所要時間が所定の閾値を超えるか否かを判定する。キャッシュ設定部２０ｆは、いわゆるセクタ機能付きのマルチウェイのキャッシュメモリを用いてプログラムを実行する場合に、当該キャッシュメモリを実質的に１ウェイのキャッシュメモリとして機能するように設定する。なお、上記の各部の処理の詳細については、後述する。
【００１８】
次に、図３を参照しながら、本実施形態において、オリジナルプログラムにおける指定範囲のメモリアクセス命令におけるキャッシュ動作を精度よく再現するためのショートプログラムの作成処理について説明する。以下の説明において、ステップをＳと略記する。まず、Ｓ１０１において、ＣＰＵ１０は、ＨＤＤ１２にアクセスしてオリジナルプログラムを読み込む。次いで処理は、Ｓ２００に進められる。Ｓ２００では、ＣＰＵ１０は、オリジナルプログラムのどの範囲をショートプログラムの実行対象とするかについて指定し、指定範囲のプログラムを取得してプログラムの解析を行う。
【００１９】
図４を参照しながら、Ｓ２００のオリジナルプログラムの指定範囲の特定および解析処理について説明する。Ｓ２０１では、ＣＰＵ１０は、オリジナルプログラムから取得する範囲がユーザ等によりあらかじめ指定されているか否かを判定する。取得範囲があらかじめ指定されている例としては、コンパイラに対して最適化のための指示や情報を与える、プラグマの指示子等のいわゆる最適化指示子を用いて取得範囲が指定されている場合が挙げられる。取得範囲がユーザ等によりあらかじめ指定されていると判定された場合は（Ｓ２０１：Ｙｅｓ）、ＣＰＵ１０は処理をＳ２０３に進める。また、取得範囲があらかじめ指定されていないと判定された場合は（Ｓ２０１：Ｎｏ）、ＣＰＵ１０は処理をＳ２０２に進める。
【００２０】
Ｓ２０２において、ＣＰＵ１０は、オリジナルプログラムを実行して取得したプロファ
イル結果からキャッシュミス率の高いループプログラムを特定し、当該ループプログラムを取得範囲として指定する。ここでは、一例としてキャッシュミス率の高いプログラムを取得範囲とするが、実行頻度が高い範囲など、いわゆるコストの高い範囲のプログラムを取得範囲として自動的に指定される構成としてもよい。Ｓ２０２の処理が完了すると、ＣＰＵ１０は処理をＳ２０３に進める。
【００２１】
Ｓ２０３では、ＣＰＵ１０は、コンパイラから、Ｓ２０１またはＳ２０２において指定された範囲のプログラムのコンパイル情報を取得する。次に、ＣＰＵ１０は、処理をＳ２０４に進める。Ｓ２０４では、ＣＰＵ１０は、取得したコンパイル情報を用いて指定範囲のプログラムを実行したときにメモリアクセス命令におけるキャッシュ動作が再現可能か否かを判定する。具体的には、ＣＰＵ１０は、指定範囲のプログラム内で、乱数が用いられていたりインライン展開されない関数呼び出しやライブラリコールがあったりする場合は、メモリアクセス命令におけるキャッシュ動作が再現できないと判定する。メモリアクセス命令におけるキャッシュ動作が再現できると判定された場合は（Ｓ２０４：Ｙｅｓ）、処理はＳ２０５に進められる。また、メモリアクセス命令におけるキャッシュ動作が再現できないと判定された場合は（Ｓ２０４：Ｎｏ）、ＣＰＵ１０は本実施形態におけるフローチャートの処理を終了する。
【００２２】
Ｓ２０５では、ＣＰＵ１０は、指定範囲のプログラムを実行するために使用する種々のデータを採取する。本実施形態では、Ｓ２０５において採取されるデータを中間データ１と称する。中間データ１には、当該指定範囲のプログラム内で使用される変数、関数、命令の一覧、当該指定範囲のプログラムにおける基本ブロックの関係および変数データの変化を追跡するための情報が含まれる。また、中間データ１には、ソースコードおよびコード翻訳時の最適化適用に関する情報が含まれる。ＣＰＵ１０は、中間データ１の採取を完了すると、図３に示す処理を終了して処理をＳ１０２に進める。
【００２３】
Ｓ１０２では、ＣＰＵ１０は、採取した中間データ１を用いて、指定範囲のプログラムにおけるキャッシュ動作を再現するためのデータを採取するサンプリングプログラムを作成する。このサンプリングプログラムは、キャッシュメモリに対する動作状況を再現するために用いられるキャッシュインデックスの重なり状況と、指定範囲のプログラムで使用される各データについて、指定範囲のプログラムを実行する直前の値を取得する。なお、本実施形態では、Ｓ１０２で作成したサンプリングプログラムにより採取されるデータを中間データ２と称する。また、サンプリングプログラムでは、指定範囲のプログラムで使用される各データに対して、以下に説明するＳ５００のインデックスの重なりの判定処理が実行される。そして、サンプリングプログラムでは、当該判定処理の結果得られる各データのインデックスの重なり状況の情報を中間データ２に含まれる情報として出力する。
【００２４】
ここで、キャッシュインデックスの重なり状況を取得する方法について説明する。本実施形態では、１ウェイのキャッシュメモリまたはセクタ機能付きのキャッシュシステムを備えるマルチウェイのキャッシュメモリを用いる。ここで、セクタ機能とは、ユーザがアプリケーションからキャッシュメモリを制御できる機能である。例えば、キャッシュメモリを２つの領域（セクタ）に分割し、データごとにキャッシュする領域をユーザが選択できる。例えば、セクタ０には使用頻度の低いデータがキャッシュされ、セクタ１には使用頻度が高いデータがキャッシュされるように指定される。このため、使用頻度の低いデータがセクタ１の領域を占有することがなくなるため、繰り返し使うデータはキャッシュから追い出されにくくなる。このセクタ機能を用いるキャッシュ機構では、コンパイラが自動的にセクタを指定することもできるし、ユーザがソースコード内にセクタを指定する指示行を記述しておくこともできる。
【００２５】
１ウェイのキャッシュメモリの場合、２つのデータのキャッシュインデックスが重なっ
ているときは、２つのデータのキャッシュラインが同じインデックスを使用する。このため、２つのデータに対して交互にアクセスする処理を実行するとキャッシュミスが発生する。一方、セクタ機能付きのキャッシュシステムを備えるマルチウェイのキャッシュメモリの場合、２つのデータをセクタ１に指定し、セクタ１を１ウェイに指定する。これにより、当該２つのデータのキャッシュインデックスが重なる場合には、キャッシュラインが同じインデックスの同じウェイが使用されるためにキャッシュミスが発生する。
【００２６】
そこで、本実施形態では、作成したショートプログラムを実行し、プログラムにおいてキャッシュミスが発生している場合をキャッシュインデックスが重なっているとみなす。なお、具体的なキャッシュインデックスの重なり状況の再現例については後述する。
【００２７】
次に、キャッシュインデックスの重なり状況を再現する理由について説明する。通常のキャッシュ機構において、同一のインデックス内のキャッシュラインに対してキャッシュラインの比較を行うため、この比較処理においては異なるキャッシュインデックスのデータとの干渉は発生しない。この点を踏まえると、キャッシュミスが発生したことでキャッシュメモリからデータを追い出す処理を再現するためには、任意の２つのデータのキャッシュインデックスの重なりを再現すればよい。そのため、オリジナルプログラム実行時のデータのキャッシュインデックスと、ショートプログラム実行時の当該データのキャッシュインデックスを一致させなくともよい。
【００２８】
また、上記のマルチウェイキャッシュメモリを使用する場合も、キャッシュインデックスの重なりが再現できれば、キャッシュミスが発生したことでキャッシュメモリからデータを追い出す処理を実質的に再現できる。これは、複数のウェイを同一インデックスに割り当てる方法を実現するための機構であるタグ（物理アドレスの一部）があるか否かは、キャッシュヒットとキャッシュミスの動作には関係がないためである。
【００２９】
なお、タグ探索の動作や、キャッシュラインがキャッシュメモリ上のどのキャッシュインデックスに対応するかは物理アドレスに依存するため、ショートプログラムでは再現できない。しかし、ショートプログラムでは再現できないこれらの処理の実行時間は、せいぜいＣＰＵサイクルが上限であり、多数のメモリアクセスによって平均化される。このため、本実施形態においてショートプログラムを実行してオリジナルプログラムの性能を測定する上では、これらの処理にかかる時間は無視できるほど短いとみなせる。
【００３０】
ここで、メインメモリ１１における、メモリアクセス命令とデータのキャッシュライン上における配置との関係について説明する。一例として８バイト型の配列Ａがあり、１キャッシュラインが１２８バイトである物理メモリを挙げる。図５Ａ及び図５Ｂに示すように、（ａ）Ａ［０］〜Ａ［１５］が１キャッシュラインに格納される場合と、（ｂ）Ａ［１］〜Ａ［１６］が１キャッシュラインに格納される場合を考える。このとき、Ａ［０］とＡ［１５］に対するメモリアクセスを行うと、（ａ）の場合は同じキャッシュラインに対するアクセスであるが、（ｂ）の場合はＡ［０］とＡ［１５］とで異なるキャッシュラインに対するアクセスとなる。したがって、これら２つの場合におけるデータのアクセス状況は異なるといえる。本実施形態では、以下に説明するように、オリジナルプログラムとショートプログラムとで、データのアクセス状況を合わせる。これにより、ショートプログラム実行時に使用される各データのメモリアクセス命令におけるキャッシュヒット、キャッシュミス、レイテンシが精度よく再現される。
【００３１】
次に、本実施形態のサンプリングプログラムでは、１次キャッシュ１０ｂと２次キャッシュ１０ｃを対象に、各データが格納されるキャッシュラインについて、キャッシュ機構に用いられるハッシュ関数から得られるキャッシュインデックスが重なるかどうかを記録する。そして、サンプリングプログラムでは、記録された相対的なインデックスの重なり
を再現する。
【００３２】
一般に、１次キャッシュでは、仮想アドレスからキャッシュインデックスが計算される。そこで、本実施形態では、１次キャッシュ１０ｂに対しては、キャッシュインデックスを算出するハッシュ関数を用いて、仮想アドレスからキャッシュインデックスの重なりを直接計算する。このため、後述する２次キャッシュ１０ｃにおけるキャッシュインデックスを算出する場合のように、キャッシュライン内の２つのデータに対して交互にアクセスを行った場合のキャッシュメモリのデータ格納状況を把握する必要はない。
【００３３】
一方、２次キャッシュでは、物理アドレスからキャッシュインデックスが計算される。通常は、仮想アドレスと物理アドレスの下位ビットが等しくなること、ページング方式のアルゴリズムを採用することが考慮されて計算される。なお、ページング方式とは、コンピュータのオペレーティングシステムにおいて、物理メモリ空間および論理メモリ空間の割り当てを、一定サイズのページと呼ばれる単位に分割して行うアルゴリズムである。また、当該計算においては、いわゆるページカラーリングによる仮想アドレスと物理アドレスの対応関係、キャッシュインデックスを算出するハッシュ関数の特性等も考慮される。そして、キャッシュインデックスの重なり状況を調べるために必要なデータが特定される。
【００３４】
しかしながら、本実施形態では、指定範囲内のプログラムにおいて使用されるデータに対して、以下に説明する方法で２つのデータ（Ａ、Ｂ）が格納されているキャッシュラインに対する重なりを調べて記録する。これにより、上記の点を考慮しなくてもキャッシュインデックスの重なり状況を把握することができる。図６に例示するように、プログラム中のデータは仮想アドレスから物理アドレスに変換されるため、プログラム中のデータの配置を変更することで、仮想アドレスの変更を通じて物理アドレスを変更できるからである。
【００３５】
具体的な説明のために、次のような単純なメモリ構成を想定する。すなわち、キャッシュラインが１２８バイト、キャッシュメモリは２５６バイトで２ラインまで保持でき、仮想アドレスは１２８バイトごとに物理アドレスに割り当てられているとする。なお、ここではページング方式については考慮されない。このメモリ構成では、８バイトデータ型、配列長４８の配列Ａ［４８］が設けられ、オリジナルプログラム実行時に図６のようにアドレスが割り当てられるとする。なお、図６、７では、参照先のキャッシュインデックスが「Ｉｎｄｅｘ：１」であるアドレスを一重の長方形で囲み、参照先のキャッシュインデックスが「Ｉｎｄｅｘ：２」であるアドレスを二重の長方形で囲んで示す。この時、オリジナルプログラムのデータのキャッシュインデックスの重なり状況は、以下の表１のようになる。なお、表１において網掛け部分の情報は重複した情報であるため、本実施形態では使用しなくてもよい。
【表１】
2015179427.tif 000003
【００３６】
図６に示すように、この例では仮想アドレス「０ｘ００００（＆Ａ［０］）」及び「０ｘ００８０（＆Ａ［１６］）」がそれぞれ物理アドレス「０ｘ００８０」および「０ｘ０１８０」に変換される。さらに、物理アドレス「０ｘ００８０」および「０ｘ０１８０」によるキャッシュの参照先は同じキャッシュインデックス「Ｉｎｄｅｘ：２」である。したがって、仮想アドレス「０ｘ００００（＆Ａ［０］）」及び「０ｘ００８０（＆Ａ［１６］）」はキャッシュインデックスが重なるとみなす。一方、仮想アドレス「０ｘ０１００（＆Ａ［３２］）」は物理アドレス「０ｘ００００」に変換され、参照先のキャッシュインデックスは「Ｉｎｄｅｘ：１」である。したがって、仮想アドレス「０ｘ０１００（＆Ａ［３２］）」は、仮想アドレス「０ｘ００００（＆Ａ［０］）」及び「０ｘ００８０（＆Ａ［１６］）」とはキャッシュインデックスが重ならないとみなす。
【００３７】
本実施形態では、ショートプログラム実行時に、キャッシュインデックスの重なり状況が一例として表１と同じ状況になるように、メインメモリ１１の仮想アドレスを探索し、仮想アドレスの配列を調整する。例えば図７に示すように仮想アドレスを調整する。そして、本実施形態では、仮想アドレスに対応する物理アドレスおよび対応するキャッシュインデックスを再現する代わりに、各データのキャッシュインデックス上の重なりを再現する。ただし、物理アドレスに対してキャッシュインデックスの重なりを判定する構成としてもよい。
【００３８】
次に、本実施形態において、キャッシュラインサイズで区切られた異なる２つのメモリ領域上の２つのデータのキャッシュインデックスの重なりを判別する方法について説明する。本実施形態では、キャッシュメモリ内の任意の２つのデータについて、当該キャッシュラインのキャッシュインデックスが重なるかどうかは、当該２つのデータを交互にアクセスするときに、キャッシュミスが発生するか否かに基づいて判別する。
【００３９】
まず、１ウェイのキャッシュメモリを使用する場合、キャッシュインデックスが同じであるということは、キャッシュラインも同じである。したがって、図８Ａに示すようにデータＡ、Ｂのキャッシュインデックスが重なる場合、これら２つのデータに対して交互にアクセスを実行すると、キャッシュミスが繰り返し発生する。すなわち、キャッシュメモリ内の任意の２つのプロファイルを取得したときに、キャッシュミスの発生率が高ければ、キャッシュインデックスが重なっているとみなすことができる。一方、図８Ｂに示すように、データＡ、Ｂのキャッシュインデックスが重ならない場合、これら２つのデータに対して交互にアクセスを実行すると、各データについて１度キャッシュヒットが生じれば、以降はキャッシュヒットが繰り返し発生する。すなわち、データＡ、Ｂを取得するための所要時間は、図８Ｂの場合よりも図８Ａの場合の方が短い。本実施形態では、２つのデータに交互にアクセスを行ったときの処理時間に基づいてキャッシュインデックスの重なりを判別することができる。
【００４０】
また、本実施形態では、ＣＰＵ１０は、キャッシュメモリのウェイ数を判定し、ウェイ数が２以上である場合は、例えばセクタ１のウェイ数を１とする。さらに、ＣＰＵ１０は、ショートプログラムで使用される任意の２つのデータの格納先となるセクタキャッシュをセクタ１として指定する。また、ＣＰＵ１０は、ショートプログラムで使用されないデータの格納先となるセクタキャッシュをセクタ０として指定する。これにより、セクタ１のウェイ数は１となるため実質的に上記の１ウェイのキャッシュメモリと同等となる。また、セクタ１においては、ショートプログラムに使用されないデータによってショートプログラムに使用されるデータが追い出される現象を回避することができる。
【００４１】
なお、ショートプログラムで使用される任意の２つのデータの格納先となるセクタキャッシュをセクタ１として指定する処理が、所定範囲のプログラムにおいて使用されるデー
タの格納先となるセクタを第１のセクタに指定し、所定範囲のプログラムにおいて使用されないデータの格納先となるセクタを第２のセクタに指定する処理の一例に相当する。このように、本実施形態では、キャッシュメモリのウェイ数が１ウェイとなる状態にされた上で、データＡ、Ｂのキャッシュインデックスの重なりを判定する。
【００４２】
さらに、キャッシュメモリを、比較対象の２つのデータに無関係なセクタ０のデータで埋める。これにより、キャッシュメモリでは、当該２つのデータについてキャッシュミスが発生する状態になる。そして、２つのデータに交互にアクセスしたときの処理時間に関するプロファイルを取得したときに、処理時間が長い、すなわちキャッシュミスの発生率が高ければ、キャッシュインデックスが重なっているとみなすことができる。以上より、本実施形態では、キャッシュメモリのウェイ数に関わらず、ターゲットコンピュータにおいてキャッシュインデックスの重なりを判別することができる。
【００４３】
以下、図３に戻り、本実施形態における制御部１０によって実行される具体的な処理について説明する。Ｓ１０２においてＣＰＵ１０により実行されるサンプリングプログラムには、指定範囲のプログラムが記述されており、さらに当該指定範囲のプログラムの直前に中間データ２を出力するための関数が記述されている。なお、サンプリングプログラムは、当該関数が記述されている点以外は、オリジナルプログラムの記述内容と同じである。したがって、サンプリングプログラムを実行することで得られる中間データ２が示すキャッシュラインの重なり等の情報は、オリジナルプログラムを実行した場合に出力される中間データ２が示す内容と同じであるとみなすことができる。Ｓ１０３では、ＣＰＵ１０は、Ｓ１０２において作成したサンプリングプログラムを実行して中間データ２を採取する。そして、ＣＰＵ１０は、処理をＳ１０４に進める。
【００４４】
Ｓ１０４において、ＣＰＵ１０は、オリジナルプログラムのメモリアクセス命令におけるキャッシュ動作を再現する処理を実行するショートプログラムを作成する。ショートプログラムは、その実行時に中間データ２を読み込み、キャッシュインデックスの重なり状況を再現する機能および指定範囲のプログラムを実行する直前のメモリのデータを読み込む機能を有する。本実施形態では、キャッシュインデックスの重なりをショートプログラムで再現することにより、キャッシュ動作におけるキャッシュヒット、キャッシュミス、レイテンシを再現することができる。ＣＰＵ１０は、ショートプログラムを作成すると、処理をＳ３００に進める。
【００４５】
Ｓ３００では、ＣＰＵ１０は、作成したショートプログラムを実行する。図９に、Ｓ３００における処理のフローチャートを示す。図９に示すように、ＣＰＵ１０は、ショートプログラムの実行処理を開始すると、まずＳ４００において、指定範囲のプログラムにおいて使用されるデータに関するインデックスの重なり状況を再現する処理を実行する。図１０に、Ｓ４００における処理のフローチャートを示す。図１０に示すように、ＣＰＵ１０は、インデックスの重なり状況の再現処理を開始すると、Ｓ４０１において、ＣＰＵ１０は、ショートプログラムにおいて使用するデータのデータ領域をメインメモリ１１に確保する。データ領域をメインメモリ１１に確保するとは、具体的には、プログラムにおけるアドレスの配列を用意すること、例えば、ＯＳ（Operating System）にメモリの確保を要求することをいう。また、ＣＰＵ１０は、当該データのなかから、以下に説明するインデックスの重なりの判定対象としての２つのデータを選択する。以下の説明では、当該２つのデータをＡ、Ｂとする。次いで、処理はＳ５００に進められる。
【００４６】
Ｓ５００では、インデックスの重なりの判定処理を行う。図１１にＳ５００における処理のフローチャートを示す。図１１に示すように、インデックスの重なりの判定処理では、まずＳ５０１においてＣＰＵ１０は、ショートプログラムの実行に使用するキャッシュメモリが１ウェイであるか否かを判定する。ショートプログラムの実行に使用するキャッ
シュメモリが１ウェイであると判定された場合は（Ｓ５０１：Ｙｅｓ）、ＣＰＵ１０は処理をＳ６００に進める。また、ショートプログラムの実行に使用するキャッシュメモリが１ウェイではない、すなわちウェイ数が２以上であると判定された場合は（Ｓ５０１：Ｎｏ）、ＣＰＵ１０は処理をＳ５０２に進める。
【００４７】
Ｓ５０２では、ＣＰＵ１０は、ショートプログラムの実行に使用するキャッシュメモリのセクタ１のウェイ数を１に指定し、データＡ、Ｂのセクタキャッシュを１に指定する。次いで、処理はＳ５０３に進められ、ＣＰＵ１０は、キャッシュメモリをセクタ０のデータで埋める。Ｓ５０３の処理により、キャッシュメモリは、データＡ、Ｂについてキャッシュミスが発生する状態となる。Ｓ５０３の処理が終了すると、ＣＰＵ１０は処理をＳ６００に進める。
【００４８】
Ｓ６００では、ＣＰＵ１０は、ウェイ数が１であるキャッシュメモリにおけるインデックスの重なり判定処理を実行する。図１２にＳ６００における処理のフローチャートを示す。まず、ＣＰＵ１０は、Ｓ６０１において、Ｓ６０２、Ｓ６０３のループ処理の処理時間を計測するための時間計測を開始する。ＣＰＵ１０は、ＣＰＵクロック、システムクロック、リアルタイムクロック等の周知の技術を用いて当該時間計測処理を実行することができる。次いで、処理はＳ６０２、Ｓ６０３を含むループ処理に進められる。
【００４９】
Ｓ６０２、Ｓ６０３のループ処理では、ＣＰＵ１０は、キャッシュメモリに対してデータＡ、Ｂへのアクセスを交互に実行する。図８Ａに示したように、上記の通りキャッシュメモリにはセクタ０のデータが格納されているため、データＡのアクセスを行うとキャッシュミスが発生する。そして、ＣＰＵ１０は、メインメモリ１１からデータＡを取得してキャッシュメモリに格納する。次に、ＣＰＵ１０がデータＢのアクセスを行うと、データＡとＢのキャッシュインデックスが重なっているため、今度はデータＢについてキャッシュミスが発生する。そして、ＣＰＵ１０は、メインメモリ１１からデータＢを取得してキャッシュメモリに格納する。さらに、ＣＰＵ１０が、データＡのアクセスを行うと再びキャッシュミスが発生する。そして、以降もキャッシュミスが発生する。
【００５０】
また、図８Ｂに示したように、データＡ、Ｂのキャッシュインデックスが重ならない場合は、最初は、図８Ａと同様データＡのアクセスを行うとキャッシュミスが発生する。次に、データＢのアクセスを行うとキャッシュミスが発生する。ただし、データＡ、Ｂはそれぞれ異なるキャッシュインデックスが示すキャッシュラインに格納されるため、以降はデータＡ、Ｂについてはキャッシュヒットが繰り返し発生する。
【００５１】
キャッシュミスが発生するとＣＰＵ１０はメインメモリ１１からアクセス対象のデータを取得するため、キャッシュヒットが発生する場合に比べて処理時間が長い。本実施形態では、Ｓ６０２、Ｓ６０３の処理をＮ回繰り返した後に処理がＳ６０４に進められる。Ｓ６０４において、ＣＰＵ１０はＳ６０１において開始した時間計測処理を終了する。そして、ＣＰＵ１０は、処理をＳ６０５に進め、Ｓ６０４において得られる計測結果の時間を用いて、Ｓ６０２、Ｓ６０３のループ処理におけるデータＡ、Ｂをロードする際の、ＣＰＵ１０の平均クロックサイクル数を判定する。具体的には、ＣＰＵ１０は、ＣＰＵ１０の平均クロックサイクル数がデータＡ、Ｂのロードをオンキャッシュ処理できる場合の所要時間の値であるか否かを判定する。
【００５２】
データＡ、Ｂがオンキャッシュ処理できるとは、データＡ、Ｂがキャッシュラインに格納され続けることを意味する。なお、Ｓ６０５の判定処理を、ＣＰＵ１０の平均クロックサイクル数が、データＡ、Ｂのロードをオンキャッシュ処理できる場合の所要時間を含む所定の時間範囲内であるか否かに基づく判定処理としてもよい。このオンキャッシュ処理できる場合の所要時間や当該所要時間を含む所定の時間範囲が、所定の閾値の一例に相当
する。
【００５３】
したがって、Ｓ６０５における判定処理において、ＣＰＵ１０の平均クロックサイクル数がオンキャッシュ処理時の所要時間の値であると判定された場合は（Ｓ６０５：Ｙｅｓ）、データＡ、Ｂのキャッシュインデックスは重ならないと判定される。また、ＣＰＵ１０の平均クロックサイクル数がオンキャッシュ処理時の所要時間の値でないと判定された場合は（Ｓ６０５：Ｎｏ）、データＡ、Ｂのキャッシュインデックスが重なると判定される。ＣＰＵ１０は、データＡ、Ｂのキャッシュインデックスの重なりに関する判定結果を、メインメモリ１１等に記憶しておく。なお、データＡ、Ｂのキャッシュインデックスの重なりに関する判定結果が、所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報の一例に相当する。図１２に示すフローチャートの処理が完了すると、処理は図１１のＳ５０４に進められる。
【００５４】
Ｓ５０４では、ＣＰＵ１０は、指定範囲のプログラムで使用されるデータについて、上記のキャッシュインデックスの重なり判定処理が実行されていないデータがあるか否かを判定する。キャッシュインデックスの重なり判定処理が実行されていないデータがある場合は（Ｓ５０４：Ｙｅｓ）、ＣＰＵ１０は当該データを判定対象のデータとして選択し（Ｓ５０５）、処理をＳ６００に戻す。キャッシュインデックスの重なり判定処理が実行されていないデータがない場合は（Ｓ５０４：Ｎｏ）、ＣＰＵ１０は処理を図１０のＳ４０２に進める。
【００５５】
Ｓ４０２において、ＣＰＵ１０は、Ｓ５００の判定処理の結果を、Ｓ１０３において取得した中間データ２が示すキャッシュインデックスの重なり状況と一致するか否かを判定する。キャッシュインデックスの重なり状況が、Ｓ５００の判定処理の結果と中間データ２とで一致する場合は（Ｓ４０２：Ｙｅｓ）、ショートプログラムを実行することでオリジナルプログラムにおけるキャッシュインデックスの重なりを再現できるとみなすことができる。また、ＣＰＵ１０は、Ｓ４０２の判定処理を行ったときの仮想アドレスの配置をメインメモリ１１等に記憶しておく。そして、ＣＰＵ１０は、処理をＳ４０２からＳ３０１に進める。一方、キャッシュインデックスの重なり状況が、Ｓ５００の判定処理の結果と中間データ２とで一致しない場合は（Ｓ４０２：Ｎｏ）、ＣＰＵ１０は、処理をＳ４０２からＳ４０３に進める。なお、Ｓ４０２の処理が、所定範囲のプログラムにおいて使用される各データのキャッシュインデックスの重なりと、所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報が示すキャッシュインデックスの重なりとが一致するメモリアドレスの配置を特定する処理の一例に相当する。なお、本実施形態では、メモリアドレスの一例として仮想アドレスを用いているが、仮想アドレスの代わりに物理アドレスを用いることもできる。
【００５６】
Ｓ４０３では、ＣＰＵ１０は、図７に例示するように調整した仮想アドレスの相互の間隔を維持し、Ｓ４０１で確保したメモリ領域のアドレスを１キャッシュライン分移動する。なお、データのキャッシュインデックスを異なるインデックスにするため、Ｓ４０３における最小の移動量は１キャッシュラインとする。次いで、処理はＳ４０４に進められる。Ｓ４０４では、ＣＰＵ１０は、Ｓ４０３で移動したメモリ領域のアドレスが、ショートプログラムを実行する際に使用可能なメモリ領域の範囲内であるか否かを判定する。Ｓ４０３で移動したメモリ領域のアドレスが使用可能なメモリ領域の範囲内であると判定された場合は（Ｓ４０４：Ｙｅｓ）、ＣＰＵ１０は、処理をＳ４０１に戻す。そして、ＣＰＵ１０は、移動後のメモリ領域のアドレスを用いてＳ５００以降の処理を再度実行する。一方、Ｓ４０３で移動したメモリ領域のアドレスが使用可能なメモリ領域の範囲内でないと判定された場合は（Ｓ４０４：Ｎｏ）、ＣＰＵ１０は、ショートプログラムを実行してもオリジナルプログラムにおけるキャッシュインデックスの重なりを再現できないとみなす。そして、ＣＰＵ１０は、本実施形態のフローチャートを終了する。
【００５７】
Ｓ３０１では、ＣＰＵ１０は、Ｓ４０１において確保したデータ領域に、Ｓ１０３において採取した中間データ２を復元する。これにより、Ｓ１０４において作成されたショートプログラムの実行準備が完了する。次いで、処理はＳ３０２に進められる。Ｓ３０２において、ＣＰＵ１０は、中間データ２含まれる指定範囲のプログラムを実行する直前の値と、Ｓ４０２においてキャッシュインデックスの重なりを再現できるとみなされたときの仮想アドレスの配置とを用いて、Ｓ１０４において作成されたショートプログラムを実行する。これにより、ＣＰＵ１０は、インデックスの重なりを再現できる中間データ２を使用してショートプログラムを実行することで、オリジナルプログラムを実行した場合におけるメモリアクセス命令のキャッシュ動作を精度よく再現することができる。また、ＣＰＵ１０は、ショートプログラムにおいて中間データ２を使用してキャッシュインデックスの重なりを再現できるため、ハードウェアを直接参照しなくても、オリジナルプログラム実行時のキャッシュ情報を把握することができる。そして、ＣＰＵ１０によるショートプログラムの実行結果を、オリジナルプログラムのチューニングや最適化に利用することができる。
【００５８】
以上が本実施形態に関する説明であるが、上記の情報処理装置の構成や処理は、上記の実施形態に限定されるものではなく、本発明の技術的思想と同一性を失わない範囲内において種々の変更が可能である。そこで、上記の実施例の変形例について以下説明する。なお、以下の説明において、上記の実施形態と同じ構成要素については、同一の符号を付して詳細な説明は省略する。
【００５９】
（変形例）
本変形例では、上記の実施形態におけるＳ５００のデータのキャッシュラインの重なり判定処理を実行し、データのキャッシュライン上における格納位置を把握することができる。図１３、１４に、本変形例でＣＰＵ１０が実行する処理のフローチャートを示す。本変形例では、データＣについてキャッシュライン上における格納位置を特定する。
【００６０】
Ｓ７０１では、物理メモリ上でデータＣから１バイト離れたデータをデータＤとする。例えば図５Ａに示す場合では、仮にＡ［０］をデータＣとすると、Ａ［０］の右に１バイト離れたデータをデータＤとする。本変形例では、Ｓ７０２の処理の後に処理がＳ７０１に戻された場合は、データＤをデータＣからさらに右に１バイト離したデータを新たなデータＤとする。Ｓ７０１の処理が終了すると、ＣＰＵ１０は、処理をＳ８００に進める。
【００６１】
図１４に示すように、Ｓ８００の処理では、２つのデータＣ、Ｄが、同じキャッシュインデックスを持つか否かを判定する。まず、ＣＰＵ１０は、上記の実施形態で実行するＳ５００の処理をデータＣ、Ｄを対象に実行する。Ｓ５００における処理は上記の実施形態と同様であるため説明を省略する。Ｓ５００の処理が完了すると、ＣＰＵ１０は、Ｓ８０１において、Ｓ５００の判定処理の結果に基づき、データＣと同じキャッシュインデックスを持ち、データＣ、Ｄのどちらのキャッシュラインにも属さない任意のデータＥを設定する。次いで処理はＳ５００に進められる。このＳ５００では、上記の実施形態で実行するＳ５００の処理をデータＤ、Ｅを対象に実行する。次いで処理はＳ８０２に進められる。
【００６２】
Ｓ８０２では、ＣＰＵ１０は、データＤ、Ｅのキャッシュインデックスが重なるか否かを判定する。データＤ、Ｅが同じキャッシュインデックスを有すると判定された場合は（Ｓ８０２：Ｙｅｓ）、ＣＰＵ１０は、データＣ、Ｄはキャッシュインデックスが重なるとみなす。また、データＤ、Ｅが同じキャッシュインデックスを有しないと判定された場合は（Ｓ８０２：Ｎｏ）、ＣＰＵ１０は、データＣ、Ｄはキャッシュインデックスが重ならないとみなす。次いで、処理はＳ７０２に進められる。ここで、通常のキャッシュ機構に
おいて、隣り合うキャッシュラインのキャッシュインデックスは互いに異なる。このことから、本変形例では、データＣ、Ｄのキャッシュインデックスが重なる場合は、データＣ、Ｄが同じキャッシュラインに格納されるとみなすことができる。
【００６３】
Ｓ７０２では、Ｓ８００の処理の結果、ＣＰＵ１０は、データＣ、Ｄが同じキャッシュラインに格納されるとみなしされたか否かを判定する。ＣＰＵ１０は、データＣ、Ｄが同じキャッシュラインに格納されるとみなした場合は（Ｓ７０２：Ｙｅｓ）、処理をＳ７０１に戻す。また、ＣＰＵ１０は、データＣ、Ｄが同じキャッシュラインに格納されるとみなさない場合は（Ｓ７０２：Ｎｏ）、処理をＳ７０３に進める。
【００６４】
本変形例において、上記の処理が実行されることで、データＣ、Ｄが同じキャッシュラインに格納されているとみなされる間は、処理がＳ７０２からＳ７０１に繰り返し進むことで、データＤは、データＣから１バイトずつ離されて設定される。そして、Ｓ７０２において、データＣ、Ｄが同じキャッシュラインに格納されないと判定されることで、データＤは、データＣが格納されているキャッシュラインに属さないことがわかる。なお、Ｓ７０１、Ｓ８００の処理が、２つのデータの一方のデータを他方のデータから所定のバイト数ずつ離して配置しながらデータ取得を実行し、データ取得時間判定部によりデータ取得の所要時間が所定の閾値を超えないと判定されたときの一方のデータと他方のデータとのキャッシュメモリ上における配置に関する情報を、所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報として生成する処理の一例に相当する。このようにデータＤを１バイトずつ離して指定していくことで、データＤに対するデータＣの相対位置がわかる。この結果、データＣのキャッシュライン上における格納位置を判別することができる。
【００６５】
本変形例では、上記の処理により得られるデータＣのキャッシュライン上における格納位置の情報が上記の実施形態の中間データ２に含まれる情報として出力されるようにサンプリングプログラムが調整される。そして、ＣＰＵ１０は、当該中間データ２を用いてショートプログラムを実行することでも、オリジナルプログラムにおける指定範囲のメモリアクセス命令におけるキャッシュ動作を精度よく再現することができる。
【００６６】
＜コンピュータが読み取り可能な記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記情報処理装置の設定を行うための管理ツール、ＯＳその他を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。ここで、コンピュータは、例えば、演算処理装置等である。
【００６７】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリ等のメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ等がある。
【００６８】
以上の実施形態に関し、さらに以下の付記を開示する。
【００６９】
（付記１）
オリジナルプログラムの所定範囲を取得する取得部と、
前記所定範囲のプログラムにおいて使用されるデータの前記所定範囲のプログラムの実
行直前における値と、前記オリジナルプログラムの実行に使用されるキャッシュメモリが１ウェイで動作するときの前記データについての前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報とを生成する生成部と、
前記生成された前記所定範囲のプログラム実行直前の値と前記キャッシュインデックスの重なりに関する情報とを用いて前記所定範囲のプログラムを実行する実行部と
を有する演算処理装置。
【００７０】
（付記２）
前記実行部は、前記所定範囲のプログラムにおいて使用される各データのキャッシュインデックスの重なりと、前記生成部が生成した前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報が示すキャッシュインデックスの重なりとが一致するメモリアドレスの配置を特定し、前記所定範囲のプログラムにおいて使用されるデータの前記所定範囲のプログラムの実行直前における値と前記特定したメモリアドレスの配置とを用いて前記所定範囲のプログラムを実行する、付記１に記載の演算処理装置。
【００７１】
（付記３）
前記所定範囲のプログラムにおいて使用されるデータのうちの２つのデータについて、前記２つのデータの各データ取得を前記オリジナルプログラムの実行に使用されるキャッシュメモリに対して交互に実行するデータ処理部と、
前記データ処理部による前記データ取得の所要時間が所定の閾値を超えるか否かを判定するデータ取得時間判定部と
をさらに有し、
前記生成部は、前記データ取得の所要時間が所定の閾値を超えると判定される場合に、前記所定範囲のプログラムにおける前記２つのデータのキャッシュインデックスは重なることを示す情報を、前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報として生成する
付記１又は付記２に記載の演算処理装置。
【００７２】
（付記４）
前記データ処理部は、前記データ取得の所要時間が所定の閾値を超えると判定された前記２つのデータについて、前記オリジナルプログラムの実行に使用されるメインメモリで、前記２つのデータの一方のデータを他方のデータから所定のバイト数ずつ離して配置しながら前記データ取得を実行し、
前記生成部は、前記データ取得時間判定部により前記データ取得の所要時間が所定の閾値を超えないと判定されたときの前記一方のデータと前記他方のデータとの前記メインメモリにおける配置に関する情報を、前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報として生成する
付記３に記載の演算処理装置。
【００７３】
（付記５）
前記オリジナルプログラムの実行に使用されるキャッシュメモリのウェイ数が２以上であり、前記キャッシュメモリが複数のセクタに分割されている場合に、前記ウェイ数を１に指定し、前記所定範囲のプログラムにおいて使用されるデータの格納先となるセクタを第１のセクタに指定し、前記所定範囲のプログラムにおいて使用されないデータの格納先となるセクタを第２のセクタに指定するキャッシュ設定部、をさらに有する付記１から付記４のいずれか１つの付記に記載の演算処理装置。
【００７４】
（付記６）
オリジナルプログラムの所定範囲を取得する取得ステップと、
前記所定範囲のプログラムにおいて使用されるデータの前記所定範囲のプログラムの実
行直前における値と、前記プログラムの実行に使用されるキャッシュメモリが１ウェイで動作するときの前記データについての前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報とを生成する生成ステップと、
前記生成された前記所定範囲のプログラム実行直前の値と前記キャッシュインデックスの重なりに関する情報とを用いて前記所定範囲のプログラムを実行する実行ステップと
を有する演算処理方法。
【００７５】
（付記７）
前記実行ステップは、前記所定範囲のプログラムにおいて使用される各データのキャッシュインデックスの重なりと、前記生成部が生成した前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報が示すキャッシュインデックスの重なりとが一致するメモリアドレスの配置を特定し、前記所定範囲のプログラムにおいて使用されるデータの前記所定範囲のプログラムの実行直前における値と前記特定したメモリアドレスの配置とを用いて前記所定範囲のプログラムを実行するステップを含む、付記６に記載の演算処理方法。
【００７６】
（付記８）
前記所定範囲のプログラムにおいて使用されるデータのうちの２つのデータについて、前記２つのデータの各データ取得を前記オリジナルプログラムの実行に使用されるキャッシュメモリに対して交互に実行するデータ処理ステップと、
前記データ処理ステップによる前記データ取得の所要時間が所定の閾値を超えるか否かを判定するデータ取得時間判定ステップと
をさらに有し、
前記生成ステップは、前記データ取得の所要時間が所定の閾値を超えると判定される場合に、前記所定範囲のプログラムにおける前記２つのデータのキャッシュインデックスは重なることを示す情報を、前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報として生成するステップを含む
付記６又は付記７に記載の演算処理方法。
【００７７】
（付記９）
前記データ処理ステップは、前記データ取得の所要時間が所定の閾値を超えると判定された前記２つのデータについて、前記オリジナルプログラムの実行に使用されるメインメモリで、前記２つのデータの一方のデータを他方のデータから所定のバイト数ずつ離して配置しながら前記データ取得を実行するステップを含み、
前記生成ステップは、前記データ取得時間判定ステップにより前記データ取得の所要時間が所定の閾値を超えないと判定されたときの前記一方のデータと前記他方のデータとの前記メインメモリにおける配置に関する情報を、前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報として生成するステップを含む
付記８に記載の演算処理方法。
【００７８】
（付記１０）
前記オリジナルプログラムの実行に使用されるキャッシュメモリのウェイ数が２以上であり、前記キャッシュメモリが複数のセクタに分割されている場合に、前記ウェイ数を１に指定し、前記所定範囲のプログラムにおいて使用されるデータの格納先となるセクタを第１のセクタに指定し、前記所定範囲のプログラムにおいて使用されないデータの格納先となるセクタを第２のセクタに指定するキャッシュ設定ステップ
をさらに有する付記６から付記９のいずれか１つの付記に記載の演算処理方法。
【００７９】
（付記１１）
コンピュータに、
オリジナルプログラムの所定範囲を取得する取得ステップと、
前記所定範囲のプログラムにおいて使用されるデータの前記所定範囲のプログラムの実行直前における値と、前記オリジナルプログラムの実行に使用されるキャッシュメモリが１ウェイで動作するときの前記データについての前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報とを生成する生成ステップと、
前記生成された前記所定範囲のプログラム実行直前の値と前記キャッシュインデックスの重なりに関する情報とを用いて前記所定範囲のプログラムを実行する実行ステップと
を実行させる演算処理プログラム。
【００８０】
（付記１２）
前記実行ステップは、前記所定範囲のプログラムにおいて使用される各データのキャッシュインデックスの重なりと、前記生成部が生成した前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報が示すキャッシュインデックスの重なりとが一致するメモリアドレスの配置を特定し、前記所定範囲のプログラムにおいて使用されるデータの前記所定範囲のプログラムの実行直前における値と前記特定したメモリアドレスの配置とを用いて前記所定範囲のプログラムを実行するステップを含む、付記１１に記載の演算処理プログラム。
【００８１】
（付記１３）
コンピュータに、
前記所定範囲のプログラムにおいて使用されるデータのうちの２つのデータについて、前記２つのデータの各データ取得を前記オリジナルプログラムの実行に使用されるキャッシュメモリに対して交互に実行するデータ処理ステップと、
前記データ処理ステップによる前記データ取得の所要時間が所定の閾値を超えるか否かを判定するデータ取得時間判定ステップと
をさらに実行させ、
前記生成ステップは、前記データ取得の所要時間が所定の閾値を超えると判定される場合に、前記所定範囲のプログラムにおける前記２つのデータのキャッシュインデックスは重なることを示す情報を、前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報として生成するステップを含む
付記１１又は付記１２に記載の演算処理プログラム。
【００８２】
（付記１４）
前記データ処理ステップは、前記データ取得の所要時間が所定の閾値を超えると判定された前記２つのデータについて、前記オリジナルプログラムの実行に使用されるメインメモリで、前記２つのデータの一方のデータを他方のデータから所定のバイト数ずつ離して配置しながら前記データ取得を実行するステップを含み、
前記生成ステップは、前記データ取得時間判定ステップにより前記データ取得の所要時間が所定の閾値を超えないと判定されたときの前記一方のデータと前記他方のデータとの前記メインメモリにおける配置に関する情報を、前記所定範囲のプログラムでのキャッシュインデックスの重なりに関する情報として生成するステップを含む
付記１３に記載の演算処理プログラム。
【００８３】
（付記１５）
コンピュータに、
前記オリジナルプログラムの実行に使用されるキャッシュメモリのウェイ数が２以上であり、前記キャッシュメモリが複数のセクタに分割されている場合に、前記ウェイ数を１に指定し、前記所定範囲のプログラムにおいて使用されるデータの格納先となるセクタを第１のセクタに指定し、前記所定範囲のプログラムにおいて使用されないデータの格納先となるセクタを第２のセクタに指定するキャッシュ設定ステップ
をさらに実行させる付記１１から付記１４のいずれか１つの付記に記載の演算処理プログラム。
【符号の説明】
【００８４】
１    演算処理装置
１０    ＣＰＵ
１０ａ    コア
１０ｂ    １次キャッシュ
１０ｃ    ２次キャッシュ
１１    メインメモリ
１２    ＨＤＤ
２０ａ    取得部
２０ｂ    生成部
２０ｃ    実行部
２０ｄ    データ処理部
２０ｅ    データ取得時間判定部
２０ｆ    キャッシュ設定部
【図１】
2015179427.tif 000004
【図２】
2015179427.tif 000005
【図３】
2015179427.tif 000006
【図４】
2015179427.tif 000007
【図５Ａ】
2015179427.tif 000008
【図５Ｂ】
2015179427.tif 000009
【図６】
2015179427.tif 000010
【図７】
2015179427.tif 000011
【図８Ａ】
2015179427.tif 000012
【図８Ｂ】
2015179427.tif 000013
【図９】
2015179427.tif 000014
【図１０】
2015179427.tif 000015
【図１１】
2015179427.tif 000016
【図１２】
2015179427.tif 000017
【図１３】
2015179427.tif 000018
【図１４】
2015179427.tif 000019