IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

<>
  • 特許-情報処理装置及び情報処理方法 図1
  • 特許-情報処理装置及び情報処理方法 図2
  • 特許-情報処理装置及び情報処理方法 図3
  • 特許-情報処理装置及び情報処理方法 図4
  • 特許-情報処理装置及び情報処理方法 図5
  • 特許-情報処理装置及び情報処理方法 図6
  • 特許-情報処理装置及び情報処理方法 図7
  • 特許-情報処理装置及び情報処理方法 図8
  • 特許-情報処理装置及び情報処理方法 図9
  • 特許-情報処理装置及び情報処理方法 図10
  • 特許-情報処理装置及び情報処理方法 図11
  • 特許-情報処理装置及び情報処理方法 図12
  • 特許-情報処理装置及び情報処理方法 図13
  • 特許-情報処理装置及び情報処理方法 図14
  • 特許-情報処理装置及び情報処理方法 図15
  • 特許-情報処理装置及び情報処理方法 図16
  • 特許-情報処理装置及び情報処理方法 図17
  • 特許-情報処理装置及び情報処理方法 図18
  • 特許-情報処理装置及び情報処理方法 図19
  • 特許-情報処理装置及び情報処理方法 図20
  • 特許-情報処理装置及び情報処理方法 図21
  • 特許-情報処理装置及び情報処理方法 図22
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-20
(45)【発行日】2023-03-01
(54)【発明の名称】情報処理装置及び情報処理方法
(51)【国際特許分類】
   G06F 8/41 20180101AFI20230221BHJP
   G06F 9/32 20180101ALI20230221BHJP
   G06F 12/0864 20160101ALI20230221BHJP
【FI】
G06F8/41 130
G06F9/32 330C
G06F12/0864
【請求項の数】 5
(21)【出願番号】P 2019133669
(22)【出願日】2019-07-19
(65)【公開番号】P2021018585
(43)【公開日】2021-02-15
【審査請求日】2022-04-07
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100087480
【弁理士】
【氏名又は名称】片山 修平
(72)【発明者】
【氏名】新井 正樹
【審査官】小林 秀和
(56)【参考文献】
【文献】特開2015-141543(JP,A)
【文献】特開平02-110669(JP,A)
【文献】特開2008-040734(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/41
G06F 9/32
G06F 12/0864
(57)【特許請求の範囲】
【請求項1】
ループ内に複数の文が記述された入力プログラムの入力を受け付ける受付部と、
前記入力プログラムを書き換えることにより、複数の前記文の対ごとに前記ループを実行したときに想定されるキャッシュミス回数とキャッシュヒット回数とを計数する処理を計算機に実行させるための計数プログラムを生成するプログラム生成部と、
前記処理において計数した前記キャッシュミス回数と前記キャッシュヒット回数とに基づいて前記ループを複数個に分割する分割部と、
を有することを特徴とする情報処理装置。
【請求項2】
前記プログラム生成部は、複数の前記対ごとに前記キャッシュミス回数と前記キャッシュヒット回数とを計数する計数処理を前記ループ内に記述することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記プログラム生成部は、複数の前記対のうち、前記ループ内で実行したときの実行結果が前記入力プログラムにおけるのと異なる対に対する前記処理を前記計数プログラムに記述しないことを特徴とする請求項1に記載の情報処理装置。
【請求項4】
前記キャッシュミス回数と前記キャッシュヒット回数とを計数する対象であるキャッシュメモリの複数のセット番号に対応して前記計算機が複数設けられ、
前記計算機の各々が、自身に対応した前記セット番号における前記キャッシュミス回数と前記キャッシュヒット回数とを並列して計数することを特徴とする請求項1に記載の情報処理装置。
【請求項5】
ループ内に複数の文が記述された入力プログラムの入力を受け付ける処理と、
前記入力プログラムを書き換えることにより、複数の前記文の対ごとに前記ループを実行したときに想定されるキャッシュミス回数とキャッシュヒット回数とを計数する処理を計算機に実行させるための計数プログラムを生成する処理と、
前記計数する処理において計数した前記キャッシュミス回数と前記キャッシュヒット回数とに基づいて前記ループを複数個に分割する処理と、
をコンピュータが実行することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置及び情報処理方法に関する。
【背景技術】
【0002】
計算機のハードウェアリソースを効率的に利用しながらアプリケーションプログラムを実行する技術の一つにループ分割がある。ループ分割は、アプリケーションプログラムのループを複数個に分割することにより一つのループに含まれる文の個数を少なくし、キャッシュミスを抑制する技術である。このようにキャッシュミスを抑制することにより、キャッシュメモリにおけるデータの置き換えが抑制されるため、キャッシュメモリというハードウェアを有効利用することができる。
【0003】
但し、アプリケーションプログラムに対するループ分割の方法は多数あり、その中からキャッシュミスを抑制できる分割方法を見つけるのは容易ではない。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2014-232369号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
一側面によれば、ハードウェアリソースを有効利用することを目的とする。
【課題を解決するための手段】
【0006】
一側面によれば、ループ内に複数の文が記述された入力プログラムの入力を受け付ける受付部と、前記入力プログラムを書き換えることにより、複数の前記文の対ごとに前記ループを実行したときに想定されるキャッシュミス回数とキャッシュヒット回数とを計数する処理を計算機に実行させるための計数プログラムを生成するプログラム生成部と、前記処理において計数した前記キャッシュミス回数と前記キャッシュヒット回数とに基づいて前記ループを複数個に分割する分割部とを有する情報処理装置が提供される。
【発明の効果】
【0007】
一側面によれば、ハードウェアリソースを有効利用することができる。
【図面の簡単な説明】
【0008】
図1図1は、ターゲットマシンのハードウェア構成図である。
図2図2(a)は、セットアソシアティブ方式について説明するための模式図であり、図2(b)は、タグについて説明するための模式図である。
図3図3は、本実施形態におけるループ分割の方法の概略について説明するための模式図である。
図4図4は、本実施形態に係る情報処理装置のハードウェア構成図である。
図5図5は、計算機のハードウェア構成図である。
図6図6は、本実施形態に係る情報処理プログラムの構成図である。
図7図7は、本実施形態に係るプログラム情報の一例を示す図である。
図8図8は、本実施形態に係る対情報の一例を示す図である。
図9図9は、本実施形態に係る変数・配列情報を示す図である。
図10図10は、本実施形態に係るキャッシュ構成情報の一例を示す図である。
図11図11は、本実施形態に係る情報処理方法を示すフローチャートである。
図12図12は、本実施形態に係る情報処理装置の機能を示す機能構成図である。
図13図13は、本実施形態に係るプロファイル情報生成プログラムの生成方法について示すフローチャートである。
図14図14は、本実施形態における構成要素E1~E5を示す模式図である。
図15図15は、図13のステップP18において、構成要素E2である文S1を処理したときに生成される関数ACCESS_QUEUEを示す模式図である。
図16図16は、図13のステップP18において、構成要素E3である文S2を処理したときに生成される関数ACCESS_QUEUEを示す模式図である。
図17図17は、図13のステップP18において、構成要素E4である文S3を処理したときに生成される関数ACCESS_QUEUEを示す模式図である。
図18図18は、図13のステップP19で出力されるコードの一例を示す模式図である。
図19図19は、本実施形態に係るプロファイル情報生成プログラムの一例を示す模式図である。
図20図20は、本実施形態に係る等価プログラムの一例を示す図である。
図21図21は、本実施形態に係る関数ACCESSの処理内容について示すフローチャートである。
図22図22(a)は、本実施形態においてループ分割の他の例について説明するためのプロファイル情報を示す図であり、図22(b)は、分割部がループ分割を行うことで得られた出力プログラムの一例を示す図である。
【発明を実施するための形態】
【0009】
本実施形態では、ターゲットマシンで実行するアプリケーションプログラムに対して以下のようにループ分割を行うことにより、そのターゲットマシンで発生するキャッシュミスを抑制する。
【0010】
[ターゲットマシン]
図1は、ターゲットマシン10のハードウェア構成図である。
ターゲットマシン10は、HPC(High Performance Computing)用の並列計算機やPC(Personal Computer)であって、プロセッサ11とメインメモリ12とを有する。
【0011】
プロセッサ11は、各種の計算を行うハードウェアであって、計算コア13とキャッシュメモリ14とを有する。
【0012】
このうち、計算コア13は、算術演算や論理演算を行うALU(Arithmetic Logic Unit)と各種のレジスタとを備えた回路素子である。また、キャッシュメモリ14は、計算コア13で使用するデータを保持するSRAM(Static Random Access Memory)等のメモリである。
【0013】
一方、メインメモリ12は、計算コア13で実行するアプリケーションプログラム15を記憶したDRAM(Dynamic Random Access Memory)等のハードウェアである。アプリケーションプログラム15は、入力プログラムの一例であって、ループ分割の対象となるプログラムである。
【0014】
このようなターゲットマシン10においては、アプリケーションプログラム15に含まれる各命令が実行時に参照したデータをキャッシュメモリ14に格納しておく。各命令が参照するデータがキャッシュメモリ14に存在する場合、キャッシュヒットが発生したという。
【0015】
キャッシュヒットが発生すると、各命令がキャッシュメモリ14にアクセスすることによりデータを参照することができるため、各命令がメインメモリ12にアクセスする必要がなくなり、メモリアクセスに要する時間を低減できる。
【0016】
アプリケーションプログラム15の実行から終了までの間にキャッシュヒットが発生した回数はキャッシュヒット回数と呼ばれる。そのキャッシュヒット回数が多いほど、アプリケーションプログラム15の実行時にキャッシュメモリ14等のハードウェア資源を有効に活用できていることになる。
【0017】
一方、命令が参照するデータがキャッシュメモリ14に存在しない場合は、キャッシュミスが発生したという。キャッシュミスには、初期参照ミスと置き換えミスの二つがある。このうち、初期参照ミスは、アプリケーションプログラム15の実行前にキャッシュメモリ14にデータが存在しない場合に発生するキャッシュミスである。そして、置き換えミスは、キャッシュメモリ14に一度はデータを格納したものの、後続命令によってキャッシュメモリ14からそのデータが追い出された場合に発生するキャッシュミスである。いずれのキャッシュミスが発生しても、データを参照するためにメインメモリ12へのアクセスが発生し、アプリケーションプログラム15の実行時間が遅延してしまう。
【0018】
アプリケーションプログラム15の実行から終了までの間に、初期参照ミスと置き換えミス等のキャッシュミスが発生した回数はキャッシュミス回数と呼ばれる。
【0019】
キャッシュミス回数は、アプリケーションプログラム15に記述されたループを分割し、一つのループに含まれるメモリ参照命令の個数を減らすことで低減できる。
【0020】
そのアプリケーションプログラム15は特に限定されない。但し、ループ分割によってキャッシュミスを効率的に抑制するために、一つのループを実行することで多数のメモリ参照命令が実行されるHPC用のプログラムをアプリケーションプログラム15として採用するのが好ましい。特に、一つのループ内に数百~数千もの文が記述されたアプリケーションプログラム15は、実行時間の大部分がループの処理で占められる。このようなループはカーネルループとも呼ばれる。そのカーネルループが記述されたアプリケーションプログラム15に対してループ分割を行うことにより、キャッシュミスを大幅に低減できると期待される。
【0021】
なお、キャッシュメモリ14にデータを格納する方式は特に限定されないが、この例ではセットアソシアティブ方式でキャッシュメモリ14にデータを格納する。
【0022】
図2(a)は、セットアソシアティブ方式について説明するための模式図である。
【0023】
図2(a)に示すように、セットアソシアティブ方式では、キャッシュメモリ14を複数のセット14aに分ける。これらのセット14aにはセット番号sが割り当てられており、セット番号sを指定することにより各セット14aを一意に特定できる。
【0024】
また、各々のセット14aには複数のブロック14bが設けられる。ブロック14bは、データを格納するための記憶領域である。その記憶領域の大きさを以下ではブロックサイズBと呼ぶ。
【0025】
一つのセット14aにおけるブロック14bの個数は連想度Aと呼ばれる。図2(a)の例では連想度は4である。その連想度Aを用いると、セット14aの総個数であるセット数Sを次の式(1)で表すことができる。
【0026】
【数1】
【0027】
但し、式(1)において、Cはキャッシュメモリ14のトータルのサイズ(バイト)である。
【0028】
また、データDのアドレスをmとすると、そのデータDが格納されるセット14aのセット番号sは次の式(2)のように表すことができる。
【0029】
【数2】
【0030】
これによれば、データDのアドレスmが分かれば、そのデータDを格納すべきセット14aを特定できる。また、特定したセット14aに含まれる複数のブロック14bのどこにデータDを格納するかは、アドレスmから定まるタグによって決定される。
【0031】
図2(b)は、タグについて説明するための模式図である。
ここでは、データD0~D18のアドレスm0~m18を例にしてタグの決め方について説明する。
【0032】
連想度Aが2nの場合、タグは、アドレスm0~m18の上位nビットで定義される。例えば、連想度Aが2の場合は、「01000」で表されるアドレスm8のタグは「01」となる。この場合のタグは「00」、「01」、「10」、及び「11」の四つのいずれかとなる。一つのセット14aにおける四つのブロック14bにこれらのタグを対応付けることで、アドレスmのデータを格納すべきブロック14bを決定できる。
【0033】
次に、アプリケーションプログラム15に含まれるループを分割する方法について説明する。
【0034】
図3は、本実施形態におけるループ分割の方法の概略について説明するための模式図である。
【0035】
この例では、アプリケーションプログラム15がC言語のソースプログラムであり、そのプログラムにfor文を用いたループ15aが記述されている場合を想定する。なお、while文によりループ15aを記述してもよい。更に、C++やFortranによりアプリケーションプログラム15を記述してもよい。
【0036】
そして、ループ15aには三つの文S1、S2、S3が記述されているものとする。
【0037】
この場合、本実施形態では、アプリケーションプログラム15に基づいてプロファイル情報17を生成する。プロファイル情報17は、複数の文S1、S2、S3のうちの二つのみをループ15a内に記述したプログラムをターゲットマシン10で実行したときに想定されるキャッシュヒット回数とキャッシュミス回数を含む情報である。
【0038】
この例では、複数の文S1、S2、S3から選択した二つを順序対で表し、その順序対をキャッシュヒット回数とキャッシュミス回数の各々に対応付ける。順序対は、ループ分割後の出力プログラム18を実行したときに先に実行する文を第1成分、後に実行する文を第2成分とした対である。そのような対は複数あるが、ここではループ内で実行したときの実行結果がアプリケーションプログラム15におけるのと同じになる対を順序対とする。
【0039】
例えば、図3の例では、文S1、S2、S3の依存関係を無視して得られる組み合わせは(S1、S2)、(S2、S1)、(S1、S3)、(S3、S1)、(S2、S3)、及び(S3、S2)の6個である。このうち、ループ内で実行したときの実行結果がアプリケーションプログラム15におけるのと同じ組み合わせは、(S1、S2)、(S1、S3)、(S2、S3)、及び(S3、S2)の四つである。よって、これら四つの組み合わせが順序対としてプロファイル情報17に含まれることになる。
【0040】
また、各々の順序対を一意に識別するための番号もそのプロファイル情報17に含まれる。
【0041】
図3のプロファイル情報17によれば、順序対(S1、S2)のキャッシュヒット回数が最も多いため、一つのループに文S1、S2のみを記述することでキャッシュヒット率を高めることができる。
【0042】
そこで、本実施形態では、アプリケーションプログラム15のループ15aを二つのループ15b、15cに分割し、そのうちのループ15bに文S1、S2のみが記述された出力プログラム18を生成する。そして、残りの文S3は、別のループ15c内に単独で記述する。
【0043】
これにより、文S1、S2とは異なる文の組み合わせをループ15bに記述した場合と比較して、ターゲットマシン10で出力プログラム18を実行した場合のキャッシュヒット率を高めることが可能となる。
【0044】
また、本実施形態では、プロセッサ11の動作を模擬するCPUシミュレータ上でアプリケーションプログラム15を実行せずに、アプリケーションプログラム15から後述のようにプロファイル情報17を生成する。そのため、ターゲットマシン10と比べて動作が遅いCPUシミュレータを利用する場合と比較して高速にプロファイル情報17を取得できる。
【0045】
なお、キャッシュヒット回数やキャッシュミス回数は、ターゲットマシン10のプロセッサ11に内蔵されたレジスタを利用して計数することもできる。しかし、この場合には、アプリケーションプログラム15の全体を実行した場合のキャッシュヒット回数やキャッシュミス回数を計数できるものの、プロファイル情報17のように文の順序対ごとの回数を取得することはできない。
【0046】
次に、プロファイル情報17を生成したりループ分割を行ったりするための本実施形態に係る情報処理装置について説明する。
【0047】
[ハードウェア構成]
図4は、本実施形態に係る情報処理装置のハードウェア構成図である。
【0048】
この情報処理装置20は、各々が独立して計算を行う複数の計算機21と、各計算機21を相互に接続するネットワーク22と、そのネットワーク22に接続された記憶装置23とを備える。
【0049】
このうち、記憶装置23は、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)等の二次記憶装置であり、アプリケーションプログラム15と情報処理プログラム24を記憶する。情報処理プログラム24は、アプリケーションプログラム15に基づいてプロファイル情報17を生成し、そのプロファイル情報17に基づいてアプリケーションプログラム15のループ分割を行うプログラムである。
【0050】
また、計算機21は、プロファイル情報17を取得するためのマシンである。この例では、キャッシュメモリ14のセット番号sに対応するように複数の計算機21を用意する。そして、各々の計算機21が、自身に対応したセット番号sにおけるキャッシュヒット回数とキャッシュミス回数とを含むプロファイル情報17を生成する。このように複数の計算機21の各々が並列して計算を実行することによりプロファイル情報17を高速に生成することができる。
【0051】
なお、プロファイル情報17を生成する時間が問題にならない場合には、全てのセット番号sのプロファイル情報17を一台の計算機21が生成するようにしてもよい。
【0052】
図5は、各計算機21のハードウェア構成図である。
計算機21は、例えばサーバやPC等であって、メインメモリ25、プロセッサ26、入力装置27、表示装置28、及びネットワークインターフェース29を備える。これらの各部はバス30によって相互に接続される。
【0053】
このうち、メインメモリ25は、DRAM等のようにデータを一時的に記憶するハードウェアであって、その上に前述の情報処理プログラム24が展開される。
【0054】
プロセッサ26は、計算機21の各部を制御したり、メインメモリ25と協働して情報処理プログラム24を実行したりするCPU(Central Processing Unit)やGPU(Graphics Processing Unit)等のハードウェアである。
【0055】
なお、情報処理プログラム24をコンピュータが読み取り可能な記録媒体31に記録させておき、プロセッサ26に記録媒体31の情報処理プログラム24を読み取らせるようにしてもよい。
【0056】
そのような記録媒体31としては、例えばCD-ROM(Compact Disc - Read Only Memory)、DVD(Digital Versatile Disc)、及びUSB(Universal Serial Bus)メモリ等の物理的な可搬型記録媒体がある。また、フラッシュメモリ等の半導体メモリやハードディスクドライブを記録媒体31として使用してもよい。これらの記録媒体31は、物理的な形態を持たない搬送波のような一時的な媒体ではない。
【0057】
更に、公衆回線、インターネット、及びLAN(Local Area Network)等に接続された装置に情報処理プログラム24を記憶させておき、プロセッサ26が情報処理プログラム24を読み出して実行するようにしてもよい。
【0058】
一方、入力装置27は、キーボードやマウス等の入力デバイスである。ユーザがこれらの入力デバイスを操作することにより、情報処理プログラム24の実行時に各種の指示を計算機21に与えることができる。
【0059】
また、表示装置28は、情報処理プログラム24の実行時にユーザが使用する様々なコマンドを表示する液晶ディスプレイ等の表示デバイスである。
【0060】
なお、以下では複数の計算機21が情報処理プログラム24を実行する場合を例にして説明するが、ターゲットマシン10(図1参照)が情報処理プログラム24を実行することにより以下の各処理や機能を実現してもよい。
【0061】
[プログラム構成]
図6は、本実施形態に係る情報処理プログラム24の構成図である。
図6に示すように、情報処理プログラム24は、コンパイラ41、プログラムトランスレータ42、プロファイル情報生成プログラム43、及び分割実行プログラム44を有する。
【0062】
このうち、コンパイラ41は、アプリケーションプログラム15が有する様々な情報をプログラム情報45として出力する。
【0063】
図7は、図3のアプリケーションプログラム15を基にしてコンパイラ41が出力したプログラム情報45の一例を示す図である。
【0064】
図7に示すように、プログラム情報45には、アプリケーションプログラム15に含まれる各配列A、B、Cの開始アドレスが含まれる。また、各配列A、B、Cの次元情報や、配列要素あたりのバイト数等もそのプログラム情報45に含まれる。
【0065】
再び図6を参照する。
プログラムトランスレータ42は、アプリケーションプログラム15を書き換えることによりプロファイル情報生成プログラム43を生成するプログラムである。そのプロファイル情報生成プログラム43を生成するとき、プログラムトランスレータ42は対情報46を利用する。
【0066】
図8は、対情報46の一例を示す図である。
対情報46は、プロファイル情報17(図3参照)の順序対を含む情報である。前述のように、その順序対は、複数の文の対のうちで、ループ内で実行したときの実行結果がアプリケーションプログラム15におけるのと同じになる対である。
【0067】
例えば、図3のアプリケーションプログラム15の例では、(S1、S2)、(S1、S3)、(S2、S3)、及び(S3、S2)の四つが順序対として対情報46に格納される。また、この例では、各順序対を一意に識別する番号を対情報46に格納する。
【0068】
そのプロファイル情報17は、コンパイラ41が各文の依存関係を解析することにより生成してもよいし、ユーザが生成してもよい。
【0069】
再び図6を参照する。
プロファイル情報生成プログラム43は、計数プログラムの一例であって、前述のプロファイル情報17を生成するプログラムである。
【0070】
そのプロファイル情報17を生成する際、プロファイル情報生成プログラム43は、プログラム情報45、変数・配列情報47、及びキャッシュ構成情報48とを参照する。
【0071】
図9は、図3のアプリケーションプログラム15を利用したときの変数・配列情報47の一例を示す図である。
【0072】
図9に示すように、変数・配列情報47には変数Nが格納される。図3のアプリケーションプログラム15に示されるように、変数Nは、ループ15aの回転数を表す変数である。また、このアプリケーションプログラム15では各配列A、B、CにN個の要素が格納されるため、変数Nはこれらの配列A、B、Cの次元数を表す変数でもある。
【0073】
図10は、キャッシュ構成情報48の一例を示す図である。
図10に示すように、キャッシュ構成情報48には、ターゲットマシン10(図1参照)のキャッシュメモリ14の連想度A、ブロックサイズB、及びセット数Sの各々の値が格納される。
【0074】
再び図6を参照する。
分割実行プログラム44は、プロファイル情報17を利用してアプリケーションプログラム15のループ15a(図3参照)を複数個に分割し、分割後のプログラムを出力プログラム18として出力する。
【0075】
[情報処理方法]
次に、情報処理装置20でこの情報処理プログラム24を実行することにより実現される本実施形態に係る情報処理方法の処理の概略について説明する。
【0076】
図11は、本実施形態に係る情報処理方法を示すフローチャートである。
【0077】
まず、ステップP1において、情報処理装置20がアプリケーションプログラム15の入力を受け付ける。
【0078】
次いで、ステップP2において、アプリケーションプログラム15に基づいてコンパイラ41が対情報46を生成する。
【0079】
次に、ステップP3に移り、対情報46を利用してプログラムトランスレータ42がプロファイル情報生成プログラム43を生成する。
【0080】
そして、ステップP4に移り、プロファイル情報生成プログラム43がプロファイル情報17を生成する。
【0081】
続いて、ステップP5に移り、プロファイル情報17を利用することにより、分割実行プログラム44が、アプリケーションプログラム15のループを分割する。
【0082】
[機能構成]
次に、本実施形態に係る情報処理装置20の機能構成について説明する。
【0083】
図12は、本実施形態に係る情報処理装置20の機能を示す機能構成図である。
【0084】
図12に示すように、情報処理装置20は、受付部51、プログラム生成部52、計数部53、及び分割部54を有する。
【0085】
このうち、受付部51とプログラム生成部52は、図5のプロセッサ26とメインメモリ25が協働して前述のプログラムトランスレータ42を実行することにより実現される。
【0086】
受付部51は、アプリケーションプログラム15の入力を受け付ける機能ブロックである。そして、プログラム生成部52は、入力されたアプリケーションプログラム15に基づいてプロファイル情報生成プログラム43を生成する機能ブロックである。
【0087】
一方、計数部53は、図5のプロセッサ26とメインメモリ25が協働して前述のプロファイル情報生成プログラム43を実行することにより実現される。その計数部53は、アプリケーションプログラム15に含まれる複数の文の順序対ごとにループを実行したときに想定されるキャッシュミス回数とキャッシュヒット回数とを計数し、その結果をプロファイル情報17(図3参照)に書き込む。
【0088】
なお、図4のようにセット番号sに対応した複数の計算機21を用いる場合には、これらの計算機21の各々において上記の計数部53が実現される。そして、各々の計数部53は、並列して自装置のセット番号sにおけるキャッシュミス回数とキャッシュヒット回数とを計数することになる。
【0089】
分割部54は、図5のプロセッサ26とメインメモリ25が協働して分割実行プログラム44を実行することにより実現される機能ブロックである。その分割部54は、プロファイル情報17のキャッシュミス回数とキャッシュヒット回数とに基づいて、図3のようにループ15aを複数個のループ15b、15cに分割する。
【0090】
[プログラム生成部52の処理]
次に、前述のプログラム生成部52の処理について説明する。
プログラム生成部52は、アプリケーションプログラム15を書き換えることによりプロファイル情報生成プログラム43を生成する。ここでは、そのプロファイル情報生成プログラム43としてC言語のソースプログラムを生成する。その生成方法について以下に説明する。
【0091】
図13は、本実施形態に係るプロファイル情報生成プログラム43の生成方法について示すフローチャートである。
【0092】
なお、以下では、図3のアプリケーションプログラム15を利用してプロファイル情報生成プログラム43を生成する場合について説明する。
【0093】
まず、ステップP10において、プログラム生成部52が、アプリケーションプログラム15を複数の構成要素E1~E5に分解する。
【0094】
図14は、構成要素E1~E5を示す模式図である。
構成要素E1~E5は、アプリケーションプログラム15のソースコードを意味のあるまとまりに分解して得られた要素である。例えば、セミコロン「;」で終端する文S1~S3の各々は構成要素E2~E4となる。また、構成要素E1のようなループの宣言も構成要素となる。なお、ループの宣言は、for文とその初期化式「i=0」、継続条件式「i<N」、及び変化式「i++」、始まりの括弧「{」を指す。また、ループの終わりの括弧「}」は構成要素E5となる。
【0095】
次いで、ステップP11に移り、複数の構成要素E1~E5のうちで次に処理する構成要素を選択する。ここでは、E1、E2、E3、E4、E5の順に選択していくものとする。
【0096】
次に、ステップP12に移り、プログラム生成部52が、次に処理すべき構成要素がないかどうかを判定する。
ここで、NOと判定された場合にはステップP13に移る。
【0097】
そのステップP13においては、プログラム生成部52が、処理すべき構成要素がループの宣言かどうかを判定する。例えば、構成要素E1はループの宣言である(YES)と判定される。
【0098】
そして、このようにYESと判定された場合にはステップP14に移り、プログラム生成部52が、プロファイル情報生成プログラム43に、ステップP11で選択した構成要素を記述する。例えば、構成要素E1がプロファイル情報生成プログラム43に記述される。
【0099】
一方、ステップP13においてNOと判断された場合にはステップP15に移る。
【0100】
ステップP15においては、プログラム生成部52が、構成要素がループを閉じる括弧かどうかを判断する。例えば、構成要素E5は、ループを閉じる括弧である(YES)と判断される。
【0101】
そして、このようにYESと判定された場合にはステップP14に移り、プログラム生成部52が、プロファイル情報生成プログラム43に構成要素を記述する。例えば、構成要素E5がプロファイル情報生成プログラム43に記述される。
【0102】
一方、ステップP15においてNOと判断された場合にはステップP16に移る。
【0103】
ステップP16では、プログラム生成部52が、ステップP11で選択した構成要素がループの回転数に影響する代入文であるかどうかを判断する。例えば、図3のアプリケーションプログラム15では、変数「N」がループの回転数である。その変数「N」を変えるような代入文が存在する場合にはYESと判断され、ステップP14においてその代入文がプロファイル情報生成プログラム43に記述される。
【0104】
図3の例では変数「N」を変えるような代入文が存在しないためNOと判断される。
このようにNOと判断された場合にはステップP17に移る。
【0105】
ステップP17においては、処理すべき構成要素をアプリケーションプログラム15から削除する。例えば、図14の構成要素E2~E4がアプリケーションプログラム15から削除される。
【0106】
次に、ステップP18に移り、プログラム生成部52が、ステップP11で選択した構成要素を利用して関数ACCESS_QUEUE(c, order, s, a)を生成する。そして、プログラム生成部52は、その関数ACCESS_QUEUE(c, order, s, a)をプロファイル情報生成プログラム43に記述する。
【0107】
なお、関数ACCESS_QUEUE(c, order, s, a)は、各構成要素に含まれる配列等の項ごとに生成される。例えば、構成要素E2においては項として二つの配列A、Xが含まれているため、これらの配列A、Xごとに関数ACCESS_QUEUE(c, order, s, a)が生成される。
【0108】
関数ACCESS_QUEUE(c, order, s, a)は、引数の「order」の値に応じて後述の関数ACCESS(c, s, a)を呼び出したり、その呼び出しを待ち行列に保存したりするためのライブラリ関数である。
【0109】
例えば、「order」が「0」の場合には、関数ACCESS_QUEUE(c, order, s, a)は、その内部で関数ACCESS(c, s, a)を直ちに呼び出す。
【0110】
一方、「order」が「1」の場合には、関数ACCESS_QUEUE(c, order, s, a)は、その呼び出しを待ち行列に保存する。そして、「order」が「0」の後続の関数ACCESS_QUEUEの実行を終えた後に、関数ACCESS_QUEUE(c, order, s, a)は、待ち行列にある関数ACCESS(c, s, a)を呼び出す。
【0111】
なお、関数ACCESS_QUEUE(c, order, s, a)の第1引数「c」は、シミュレーションの対象となるキャッシュメモリ14を識別する識別子である。本実施形態では、順序対(図8参照)ごとに異なるキャッシュメモリ14を利用することを想定する。よって、順序対の番号(図8参照)と第1引数「c」とは一対一に対応する。
【0112】
また、第2引数の「s」は、キャッシュメモリ14のセット番号である。そして、第3引数の「a」は、ステップP11で選択した構成要素に含まれる配列の先頭アドレスである。
【0113】
ステップP18の処理について、前述の構成要素E2~E4を例にして詳細に説明する。
まず、構成要素E2が処理対象の場合を考える。
【0114】
図15は、ステップP18において、構成要素E2である文S1を処理したときに生成される関数ACCESS_QUEUE(c, order, s, a)を示す模式図である。
【0115】
関数ACCESS_QUEUE(c, order, s, a)は、文S1にある二つの配列要素A[i]、X[i]と、文S1を含む二つの順序対(S1,S2)、(S1,S3)との組み合わせの総数だけ生成される。よって、この例では4個(=2×2個)の関数ACCESS_QUEUE(c, order, s, a)が生成される。
【0116】
これらの関数ACCESS_QUEUE(c, order, s, a)の引数は次のように決定される。
【0117】
まず、第1引数の「c」には、シミュレーションの対象となるキャッシュメモリ14を識別する「cache1」や「cache2」等の識別子がセットされる。ここでは、ターゲットマシン10(図1参照)に4個のキャッシュメモリ14が設けられた場合を想定し、これらのキャッシュメモリ14の各々をcache1~chace4の識別子で識別する。
【0118】
第2引数の「order」は、文S1が順序対の第1成分と第2成分のどちらにあるかに応じて決まる。以下では、文が第1成分にあるときに「order」を「0」とし、文が第2成分にあるときに「order」を「1」にする。
【0119】
順序対(S1,S2)、(S1,S3)のいずれにおいても文S1は第1成分にある。よって、図15の例では「order」は「0」となる。
【0120】
第3引数の「s」は、キャッシュミス回数やキャッシュヒット回数の計測の対象となるセット番号である。そのセット番号は、プロファイル情報生成プログラム43の実行時に関数ACCESS_QUEUE(c, order, s, a)に渡すため、この段階ではセットしない。
【0121】
そして、第4引数の「a」には、文S1に含まれる二つの配列要素A[i]、X[i]の各々のアドレスaddress(X[i])、address(A[i])がセットされる。例えば、この例のようにC言語でプロファイル情報生成プログラムを記述する場合には、&演算子で第4引数にアドレスをセットすればよい。
【0122】
次に、ステップP18において構成要素E3を処理する場合について説明する。
【0123】
図16は、ステップP18において、構成要素E3である文S2を処理したときに生成される関数ACCESS_QUEUE(c, order, s, a)を示す模式図である。
【0124】
この場合、関数ACCESS_QUEUE(c, order, s, a)は、文S2にある3個の配列要素B[i]、A[i]、X[i+4]と、文S2を含む3個の順序対(S1,S2)、(S2,S3)、(S3,S2)との組み合わせの総数だけ生成される。よって、9個(=3×3個)の関数ACCESS_QUEUE(c, order, s, a)が生成される。
【0125】
また、これら9個の関数ACCESS_QUEUE(c, order, s, a)の引数も図15の例と同様にして決定される。
【0126】
例えば、最初の関数ACCESS_QUEUE(cache1, 1, s, address(A[i]))の第1引数は、順序対(S1,S2)の番号である1に対応して「cache1」となる。また、その順序対(S1,S2)の第2成分に文S2があるため、第2引数は「1」となる。そして、第4引数は、文S2に含まれる配列要素A[i]のアドレスであるaddress(A[i])となる。
【0127】
次に、ステップP18において構成要素E4を処理する場合について説明する。
【0128】
図17は、ステップP18において、構成要素E4である文S3を処理したときに生成される関数ACCESS_QUEUE(c, order, s, a)を示す模式図である。
【0129】
この場合、関数ACCESS_QUEUE(c, order, s, a)は、文S3にある3個の配列要素C[i]、A[i]、X[i+8]と、文S3を含む3個の順序対(S1,S3)、(S2,S3)、(S3,S2)との組み合わせの総数だけ生成される。よって、9個(=3×3個)の関数ACCESS_QUEUEが生成される。
【0130】
再び図13を参照する。
上記のようにしてステップP18を終えた後はステップP11に再び戻る。そして、ステップP12において、処理すべき構成要素がない(YES)と判断された場合はステップP19に移る。
【0131】
ステップP19においては、キャッシュヒット回数やキャッシュミス回数等の結果を出力するコードをプロファイル情報生成プログラム43に記述する。
【0132】
図18は、ステップP19で出力されるコードの一例を示す模式図である。
【0133】
この例では、そのコードとして、cache1~cache4の各々に対応した4個の関数DUMP(c, s)を出力する。
【0134】
関数DUMP(c, s)は、第1引数として関数ACCESS_QUEUE(c, order, s, a)の第1引数「c」を受け取ると共に、第2引数としてキャッシュメモリのセット番号「s」を受け取る。この例では、第1引数「c」としてcache1~cache4のいずれかがセットされる。また、第2引数のセット番号「s」は、プロファイル情報生成プログラム43の実行時に関数DUMP(c, s)に渡すため、この段階ではセットしない。
【0135】
この関数DUMP(c, s)を実行すると、図3のプロファイル情報17が出力される。例えば、関数DUMP(cache1, s)を実行すると、番号1の順序対(S1,S2)を一つのループで実行したときのキャッシュヒット回数とキャッシュミス回数が出力される。
【0136】
また、関数DUMP(cache2, s)を実行すると、番号2の順序対(S1,S3)を一つのループで実行したときのキャッシュヒット回数とキャッシュミス回数が出力される。同様に、関数DUMP(cache3, s)、関数DUMP(cache4, s)を実行することにより、番号3と番号4のそれぞれの順序対(S2,S3)、(S3,S2)を一つのループで実行したときの結果が出力される。
以上により、図13のフローチャートの処理を終える。
【0137】
図19は、このようにアプリケーションプログラム15を書き換えることにより最終的に得られるプロファイル情報生成プログラム43の一例を示す模式図である。
【0138】
図19に示すように、このプロファイル情報生成プログラム43では、構成要素E1と構成要素E5でfor文によるループが記述される。なお、プロファイル情報生成プログラム43を実行する際にはループの回転数を表す変数「N」の値を定める必要があるが、その値は図9の変数・配列情報47から定めることができる。
【0139】
そして、そのループの内側にステップP18で生成した関数ACCESS_QUEUE(c, order, s, a)が記述される。更に、そのループの処理の後に関数DUMP(c, s)が記述される。
【0140】
前述のように、関数ACCESS_QUEUE(c, order, s, a)は、その内側で関数ACCESS(c, s, a)を呼び出す。そして、その呼び出しを直ちに実行するか待ち行列に保存するかは、関数ACCESS_QUEUE(c, order, s, a)の第3引数「order」の値に応じて定まる。
【0141】
図20は、関数ACCESS(c, s, a)を呼び出すタイミングが図19のプロファイル情報生成プログラム43におけるのと同じになるように複数の関数ACCESS(c, s, a)を並べた等価プログラム60の一例を示す図である。
【0142】
等価プログラム60は、プロファイル情報生成プログラム43と同じ実行結果が得られるC言語のソースプログラムである。
【0143】
その等価プログラム60においては、for文のループ60xの内側に複数の関数ACCESS(c, s, a)が記述される。各関数ACCESS(c, s, a)の各々は、プロファイル情報生成プログラム43における複数の関数ACCESS_QUEUE(c, order, s, a)の各々の内部に記述されており、対応する関数ACCESS_QUEUE(c, order, s, a)から引数「c」、「s」、「a」を受けとる。
【0144】
また、各関数ACCESS (c, s, a)の出現順序は、プロファイル情報生成プログラム43における各関数ACCESS_QUEUE(c, order, s, a)を第1引数「c」と第2引数「order」でソートした順序と同じである。
【0145】
これにより、複数の関数ACCESS(c, s, a)は、順序対(S1,S2)、(S1,S3)、(S2,S3)、(S3,S2)ごとに複数の計数処理60a~60dに分けられる。
【0146】
このうち、計数処理60aは、対情報46(図8参照)の番号1の順序対(S1,S2)のみを一つのループ15aで実行したときに想定されるキャッシュヒット回数とキャッシュミス回数とを計数する処理である。
【0147】
また、計数処理60bは、番号2の順序対(S1,S3)のみを一つのループ15aで実行したときに想定されるキャッシュヒット回数とキャッシュミス回数とを計数する処理である。
【0148】
同様に、計数処理60c、60dは、それぞれ番号3、4の順序対(S2,S3)、(S3,S2)のみを一つのループ15aで実行したときに想定されるキャッシュヒット回数とキャッシュミス回数とを計数する処理である。
【0149】
前述のように、文S1、S2、S3の依存関係を無視して得られる組み合わせは(S1、S2)、(S2、S1)、(S1、S3)、(S3、S1)、(S2、S3)、及び(S3、S2)の6個である。このうち、ループ15a内で実行したときの実行結果がアプリケーションプログラム15におけるのと同じになる順序対は(S1、S2)、(S1、S3)、(S2、S3)、及び(S3、S2)の四つである。
【0150】
本実施形態では、プログラム生成部52が、これら四つの順序対に対応した計数処理60a~60dのみをプロファイル情報生成プログラム43に記述する。そして、プログラム生成部52は、これ以外の文の対に対してキャッシュヒット回数とキャッシュミス回数を計数する処理をプロファイル情報生成プログラム43に記述しない。
【0151】
これにより、アプリケーションプログラム15におけるのと実行結果が異なる文の対に対して無駄にキャッシュヒット回数等を計数しなくて済み、プロファイル情報生成プログラム43の実行時間を高速化することができる。
【0152】
しかも、計数処理60a~60dを一つのループ60x内に記述することにより、このループ60xの実行が終了したときに各計数処理60a~60dの実行結果を一括して取得できる。その結果、ループ60xの実行が終了したときに(S1、S2)、(S1、S3)、(S2、S3)、及び(S3、S2)の各順序対についてのキャッシュヒット回数やキャッシュミス回数を一括して取得でき、これらの回数を効率的に取得することができる。
【0153】
次に、図12の計数部53の機能について説明する。
計数部53の機能は、関数ACCESS(c, s, a)を含むプロファイル情報生成プログラム43(図19参照)をメインメモリ25とプロセッサ26が協同して実行することにより実現される。
【0154】
関数ACCESS(c, s, a)は、キャッシュヒット回数やキャッシュミス回数を計数したり、キャッシュメモリ14におけるデータの置き換えをシミュレーションしたりする関数である。シミュレーションの対象となるキャッシュメモリ14は第1引数「c」で指定される。また、第2引数「s」は、キャッシュメモリ14においてシミュレーションの対象となるセット番号である。そして、第3引数「a」はデータのアドレスである。
【0155】
次に、関数ACCESS(c, s, a)の処理内容について説明する。
【0156】
図21は、関数ACCESS(c, s, a)の処理内容について示すフローチャートである。
【0157】
関数ACCESS(c, s, a)は、実行時に前述のプログラム情報45、変数・配列情報47、及びキャッシュ構成情報48を含む設定ファイルを読み込み、以下の各処理を行う。
【0158】
例えば、関数ACCESS(c, s, a)は、図10のキャッシュ構成情報48から連想度A、セット数S、及びブロックサイズBを取得する。なお、以下では連想度Aが4の場合を例にして説明するが、これ以外の連想度のキャッシュメモリ14に対してシミュレーションを行ってもよい。
【0159】
まず、ステップP20において、計数部53が、第3引数のアドレスaからタグTを求める。例えば、計数部53は、図2(b)に示したように、アドレスaの上位2ビットをタグTとして求める。
【0160】
これと共に、計数部53は、アドレスaに対応するセット番号s_0を求める。セット番号s_0は、アドレスa、セット数S、及びブロックサイズBを用いて前述の式(2)から求めることができる。
【0161】
次に、ステップP21に移り、計数部53が、第2引数のsがセット番号s_0に等しいかどうかを判断する。ここでNOと判断された場合には処理を終える。
【0162】
一方、YESと判断された場合にはステップP22に移る。
ステップP22においては、計数部53が変数HIT_Pを-1に初期化する。
【0163】
変数HIT_Pは、アドレスaのデータが四つのブロック14bのどれに格納されているのかを識別する整数値の変数である。この例では、アドレスaのデータが四つのブロック14bのいずれかに存在することが後のステップで判明した場合には、これらのブロック14bの各々に対応した0~3のいずれかの値が変数HIT_Pにセットされる。
【0164】
なお、HIT_P=-1の場合には、アドレスaのデータが四つのブロック14bのいずれにも存在しない。
【0165】
次に、ステップP23に移り、計数部53が、タグTが変数A_0に等しいかどうかを判断する。変数A_0~A_3は、変数HIT_Pの値が0~4のそれぞれのブロック14bのタグを表す。
【0166】
また、LRU(Least Recently Used)法によるキャッシュメモリ14のデータの置き換えを模擬するために、ここでは変数A_0~A_3に対応したブロック14bの各々にアクセス時刻が古い順にデータを格納するものとする。これにより、変数A_0に対応したブロック14bには、アクセス時刻が最も古いデータが格納されることになる。そして、変数A_3に対応したブロック14bには、アクセス時刻が最も新しいデータが格納されることになる。
【0167】
なお、このフローチャートの実行前に、変数A_0~A_3は全て-1に初期化されている。
【0168】
ステップP23においてYESと判断された場合には、変数A_0に対応したブロック14bに、アドレスaのデータが存在するということになる。
【0169】
そこで、この場合には、ステップP24に移り、計数部53が変数HIT_Pに0をセットする。これと共に、計数部53が、変数HIT_Cの値を1だけインクリメントする。変数HIT_Cは、キャッシュヒット回数を格納するための整数値の変数である。なお、このフローチャートの実行前に、変数HIT_Cは0に初期化されているものとする。
【0170】
一方、ステップP23においてNOと判断された場合には、ステップP25に移る。ステップP25においては、計数部53が、タグTが変数A_1に等しいかどうかを判断する。
【0171】
ここで、YESと判断された場合には、変数A_1に対応したブロック14bに、アドレスaのデータが存在するということになる。
【0172】
そこで、この場合には、ステップP26に移り、計数部53が変数HIT_Pに1をセットする。これと共に、計数部53が、変数HIT_Cの値を1だけインクリメントする。
【0173】
一方、ステップP25においてNOと判断された場合には、ステップP27に移る。
【0174】
ステップP27においては、タグTが変数A_2に等しいかどうかを計数部53が判断する。ここでYESと判断された場合には、ステップP28において計数部53が変数HIT_Pに2をセットすると共に、変数HIT_Cの値を1だけインクリメントする。
【0175】
一方、ステップP27においてNOと判断された場合には、ステップP29に移る。
【0176】
ステップP29においては、計数部53が、タグTが変数A_3に等しいかどうかを判断する。ここでYESと判断された場合には、ステップP30において計数部53が変数HIT_Pに3をセットすると共に、変数HIT_Cの値を1だけインクリメントする。
【0177】
一方、ステップP29においてNOと判断された場合にはステップP31に移る。
【0178】
このようにステップP29でNOと判断されるのは、タグTが変数A_0~A_3のいずれにも等しくなく、アドレスaのデータが四つのキャッシュブロックのいずれにも存在しない場合である。
【0179】
よって、ステップP31では、計数部53が、キャッシュミス回数を格納する整数値の変数MISS_Cを1だけインクリメントする。なお、このフローチャートの実行前に、変数MISS_Cは0に初期化されているものとする。
【0180】
また、ステップP22で変数HIT_Pに-1をセットしてからステップP31を実行するまでの間に変数HIT_Pの値を変更するような処理は行わないため、ステップP31を終えた段階では変数HIT_Pの値は-1となっている。
【0181】
上記のようにしてステップP24、P26、P28、P30、P31を終えた後はステップP32に移る。
【0182】
そのステップP32以降では、キャッシュメモリ14のデータの置き換えをLRU法で行う場合をシミュレーションする。
【0183】
まず、ステップP32において、計数部53が、変数HIT_Pが-1に等しいかどうかを判断する。
【0184】
ここでYESと判断された場合には、前述のようにアドレスaのデータが四つのキャッシュブロックのいずれにも存在しないということになる。
【0185】
この場合は、ステップS33に移り、計数部53が、A_0←A_1、A_1←A_2、A_2←A_3、A_3←Tの順に変数を代入していく。この順に代入を行うことで、代入後の変数A_0~A_3のいずれも代入前のA_0の値を保持しなくなるため、A_0に対応したデータのキャッシュメモリからの追い出しを模擬できる。また、最後にTの値を変数A_3に代入することにより、キャッシュメモリにおける最も新しいデータが、変数A_3に対応するブロック14bに格納されたことを模擬できる。
【0186】
そして、このように変数A_0~A_3の値を変更した後に処理を終える。
【0187】
一方、ステップP32においてNOと判断された場合にはステップP34に移る。
【0188】
ステップP34においては、計数部53が、変数HIT_Pが0に等しいかどうかを判断する。
【0189】
ここで、YESと判断された場合には、アドレスaのデータが、変数A_0に対応したブロック14bに存在することになる。
【0190】
この場合は、ステップP35に移り、計数部53が、tmp←A_0、A_0←A_1、A_1←A_2、A_2←A_3、A_3←tmpの順に変数を代入していく。なお、tmpは、代入を行うための一時的な変数である。
【0191】
これにより、代入前の変数A_0の値が変数A_3に代入されるため、最も新しくアクセスしたデータが変数A_3に対応したブロック14bに存在することを模擬できる。
【0192】
そして、このように変数A_0~A_3の値を変更した後に処理を終える。
【0193】
また、ステップP34においてNOと判断された場合にはステップP36に移る。
【0194】
ステップP36においては、計数部53が、変数HIT_Pが1に等しいかどうかを判断する。
【0195】
ここで、YESと判断された場合には、アドレスaのデータが、変数A_1に対応したブロック14bに存在することになる。
【0196】
この場合は、ステップP37に移り、計数部53が、tmp←A_1、A_1←A_2、A_2←A_3、A_3←tmpの順に変数を代入していく。
【0197】
これにより、代入前の変数A_1の値が変数A_3に代入されるため、最も新しくアクセスしたデータが変数A_3に対応したブロック14bに存在することを模擬できる。
【0198】
そして、このように変数A_1~A_3の値を変更した後に処理を終える。
【0199】
また、ステップP36においてNOと判断された場合にはステップP38に移る。
【0200】
ステップP38においては、計数部53が、変数HIT_Pが2に等しいかどうかを判断する。
【0201】
ここで、YESと判断された場合には、アドレスaのデータが、変数A_2に対応したブロック14bに存在することになる。
【0202】
この場合は、ステップP39に移り、計数部53が、tmp←A_2、A_2←A_3、A_3←tmpの順に変数を代入していく。
【0203】
これにより、代入前の変数A_2の値が変数A_3に代入されるため、最も新しくアクセスしたデータが変数A_3に対応したブロック14bに存在することを模擬できる。
【0204】
そして、このように変数A_2、A_3の値を変更した後に処理を終える。
【0205】
一方、ステップS38でNOと判断された場合には、変数HIT_Pが3に等しく、アドレスaのデータが変数A_3に対応したブロック14bに存在することになる。前述のように、変数A_3は、アクセス時刻が最も新しいブロック14bに対応する。よって、この場合は、変数A_3の値を変更する必要はなく、処理を終える。
【0206】
以上により、関数ACCESS(c, s, a)の処理が終了する。
【0207】
このような関数ACCESS(c, s, a)が記述された等価プログラム60(図20参照)を実行すると、セット番号sにおけるキャッシュヒット回数が変数HIT_Pに格納され、キャッシュミス回数が変数MISS_Cに格納される。
【0208】
これらの変数HIT_P、MISS_Cの値は、関数DUMP(c, s)によってキャッシュヒット回数とキャッシュミス回数として出力される。これにより、図3に示したようなプロファイル情報17を得ることができる。
【0209】
以上説明した本実施形態によれば、図6に示したように、アプリケーションプログラム15を書き換えることによりプロファイル情報生成プログラム43を生成する。そして、そのプロファイル情報生成プログラム43を実行することにより計数部53がキャッシュヒット回数とキャッシュミス回数とを計数し、これらの値がプロファイル情報17に書き出される。
【0210】
そのキャッシュヒット回数とキャッシュミス回数は、文S1~S3から選択した二つの文の順序対ごとにループ15aを実行した場合に想定される値となる。そのため、順序対のうちでキャッシュヒット回数が最も多い順序対のみが一つのループに含まれるように分割部54がループ15aを分割することにより、キャッシュメモリ14におけるデータの置き換えが抑制される。その結果、キャッシュメモリ14というハードウェアリソースを有効利用できると共に、ターゲットマシン10(図1参照)におけるアプリケーションプログラム15の実行速度を向上させることができる。
【0211】
しかも、本実施形態では、文の順序対ごとのキャッシュミス回数等を取得するのが困難なCPUシミュレータやターゲットマシン10を使用せず、アプリケーションプログラム15からプロファイル情報生成プログラム43を生成する。
【0212】
これにより、前述のようにアプリケーションプログラム15に含まれる文S1~S3の順序対ごとのキャッシュヒット回数やキャッシュミス回数を簡単に計数できる。
【0213】
なお、分割部54によるループ分割の方法は上記に限定されない。
図22(a)は、ループ分割の他の例について説明するためのプロファイル情報17を示す図である。
【0214】
この例では、順序対(S1,S2)と(S1,S3)のそれぞれのキャッシュヒット回数が500回で同じ値となっている。但し、キャッシュミス回数は、順序対(S1,S2)では20回であるのに対し、順序対(S1,S3)では10回となっている。
【0215】
図22(b)は、この場合に分割部54がループ分割を行うことで得られた出力プログラム18の一例を示す図である。
【0216】
この場合は、分割部54は、キャッシュヒット回数が同じ順序対(S1,S2)と(S1,S3)のうちでキャッシュミス回数が最も少ない順序対(S1,S3)のみが一つのループ15bに含まれるようにループ分割を行う。
【0217】
これにより、順序対(S1,S3)とは別の順序対をループ15bに含めた場合と比較して、ループ15bを実行したときのキャッシュミス回数を低減することができる。
【0218】
以上説明した各実施形態に関し、更に以下の付記を開示する。
(付記1) ループ内に複数の文が記述された入力プログラムの入力を受け付ける受付部と、
前記入力プログラムを書き換えることにより、複数の前記文の対ごとに前記ループを実行したときに想定されるキャッシュミス回数とキャッシュヒット回数とを計数する処理を計算機に実行させるための計数プログラムを生成するプログラム生成部と、
前記処理において計数した前記キャッシュミス回数と前記キャッシュヒット回数とに基づいて前記ループを複数個に分割する分割部と、
を有することを特徴とする情報処理装置。
(付記2) 前記プログラム生成部は、複数の前記対ごとに前記キャッシュミス回数と前記キャッシュヒット回数とを計数する計数処理を前記ループ内に記述することを特徴とする付記1に記載の情報処理装置。
(付記3) 前記プログラム生成部は、複数の前記対のうち、前記ループ内で実行したときの実行結果が前記入力プログラムにおけるのと異なる対に対する前記処理を前記計数プログラムに記述しないことを特徴とする付記1に記載の情報処理装置。
(付記4) 前記キャッシュミス回数と前記キャッシュヒット回数とを計数する対象であるキャッシュメモリの複数のセット番号に対応して前記計算機が複数設けられ、
前記計算機の各々が、自身に対応した前記セット番号における前記キャッシュミス回数と前記キャッシュヒット回数とを並列して計数することを特徴とする付記1に記載の情報処理装置。
(付記5) 前記分割部は、前記対のうちで前記キャッシュヒット回数が最も多い対が一つのループに含まれるように前記分割を行うことを特徴とする付記1に記載の情報処理装置。
(付記6) 前記分割部は、前記キャッシュヒット回数が同じ前記対のうちで前記キャッシュミス回数が最も少ない対が一つのループに含まれるように前記分割を行うことを特徴とする付記1に記載の情報処理装置。
(付記7) ループ内に複数の文が記述された入力プログラムの入力を受け付ける処理と、
前記入力プログラムを書き換えることにより、複数の前記文の対ごとに前記ループを実行したときに想定されるキャッシュミス回数とキャッシュヒット回数とを計数する処理を計算機に実行させるための計数プログラムを生成する処理と、
前記計数する処理において計数した前記キャッシュミス回数と前記キャッシュヒット回数とに基づいて前記ループを複数個に分割する処理と、
をコンピュータが実行することを特徴とする情報処理方法。
【符号の説明】
【0219】
10…ターゲットマシン、11…プロセッサ、12…メインメモリ、13…計算コア、14…キャッシュメモリ、14a…セット、14b…ブロック、15…アプリケーションプログラム、15a~15c…ループ、17プロファイル情報生成プログラムプロファイル情報、18…出力プログラム、20…情報処理装置、21…計算機、22…ネットワーク、23…記憶装置、24…情報処理プログラム、25…メインメモリ、26…プロセッサ、27…入力装置、28…表示装置、29…ネットワークインターフェース、30…バス、31…記録媒体、41…コンパイラ、42…プログラムトランスレータ、43…プロファイル情報生成プログラム、44…分割実行プログラム、45…プログラム情報、46…対情報、47…変数・配列情報、48…キャッシュ構成情報、51…受付部、52…プログラム生成部、53…計数部、54…分割部、60…等価プログラム、60x…ループ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22