JP2005266941A - キャッシュカラーリング方法 - Google Patents

キャッシュカラーリング方法 Download PDF

Info

Publication number
JP2005266941A
JP2005266941A JP2004074916A JP2004074916A JP2005266941A JP 2005266941 A JP2005266941 A JP 2005266941A JP 2004074916 A JP2004074916 A JP 2004074916A JP 2004074916 A JP2004074916 A JP 2004074916A JP 2005266941 A JP2005266941 A JP 2005266941A
Authority
JP
Japan
Prior art keywords
function
cache
functions
strength information
information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2004074916A
Other languages
English (en)
Other versions
JP4554241B2 (ja
Inventor
Shigeru Kimura
茂 木村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2004074916A priority Critical patent/JP4554241B2/ja
Priority to US10/921,986 priority patent/US7478199B2/en
Publication of JP2005266941A publication Critical patent/JP2005266941A/ja
Application granted granted Critical
Publication of JP4554241B2 publication Critical patent/JP4554241B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/885Monitoring specific for caches

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】本発明は、実行時における関数相互の関係を考慮したキャッシュカラーリング方式を提供することを目的とする。
【解決手段】キャッシュカラーリング方法は、複数の関数からなるプログラムの実行時における複数の関数の呼出し順を時系列として表現した動的関数フローに基づいて、複数の関数のうちの任意の関数と他の全ての関数との実行時の呼出し関係についての情報を含む関数強度情報を生成し、関数強度情報に基づいて命令キャッシュ競合が少なくなるように複数の関数をメモリ空間に配置する各段階を含む。
【選択図】図1

Description

本発明は、一般に関数のメモリ空間への配置方法に関し、詳しくはキャッシュ競合を少なくするように関数をメモリ空間に配置するキャシュカラーリング方法に関する。
コンピュータシステムにおいては一般に、主記憶メモリとは別に小容量で高速なキャッシュメモリが設けられる。主記憶メモリに記憶される情報の一部をキャッシュにコピーしておくことで、この情報をアクセスする場合には主記憶メモリからではなくキャッシュから読み出すことで、高速な情報の読み出しが可能となる。
キャシュは主記憶メモリに比較して高速でコスト高であるために、その記憶容量は非常に小さい。キャシュは複数のキャッシュラインを含み、外部メモリ(主記憶メモリ)からキャシュへの情報のコピーはキャシュライン単位で実行される。このために、外部メモリのメモリ空間をキャッシュライン単位で分割し、分割されたメモリ領域を順番にキャッシュラインに割当てておく。キャッシュの容量は外部メモリの容量よりも小さいので、外部メモリのメモリ領域を繰り返して同一のキャッシュラインに割当てることになる。
あるアドレスに最初のアクセスが実行されると、そのアドレスの情報(データやプログラム)をキャシュ内の対応するキャッシュラインにコピーし、同一アドレスに対して次のアクセスを実行する場合にはキャシュから直接に情報を読み出す。
関数プログラムの実行において、外部メモリの異なるアドレスに配置された異なる関数プログラムが同一のキャッシュラインに割当てられている場合、これらの関数が交互に読み出されるたびに、関数プログラムをキャシュにコピーする必要が生じる。これをキャシュ競合という。キャシュ競合が頻繁に起こるとプログラムの実行速度が遅くなるという問題がある。この問題を解決するために、同時期に動作する可能性の高い関数同士は同一のキャシュラインに載らないよう配置する方法が研究されている。
キャシュには命令キャシュとデータキャシュとがあるが、上記のような関数読み出しの問題は命令キャシュにおいて生じるものである。キャシュメモリのマッピング方式には一般に、ダイレクト方式、セットアソシエイティブ方式、及びフルアメシエイティブ方式の3つがある。何れの方式においても上記のキャッシュ競合の問題を考える上では基本的に同一であるので、以降においてはダイレクトマップを例にとり説明する。
キャッシュ競合の問題を解決するために、関数間の呼出し回数や特定の関数呼出しパターンの呼出し回数を示す関数強度を定義し、関数強度が高い(即ち互いに読み出す可能性が高い)関数同士が同一のキャッシュラインに割当てられないように設定する方法が従来からある。キャッシュ競合を少なくし命令キャシュミスを少なくすることを目的として、関数単位にリンク順番を設定・変更することをキャシュカラーリングと呼ぶ。
例えば特許文献1乃至3は、呼出し回数の大きい順にコードを配置する手法を開示している。また特許文献4には、関数の時系列情報を抽出し、時系列情報から連続した関数呼出し等直接の関数呼出し以外にキャシュコンフリクトを発生する可能性のある関数の組合せ実行パターンを検出し、ある関数の中で複数の関数が連続して呼ばれる場合やループの中で呼ばれている場合に、そのパターンの実行回数を使用してキャシュコンフリクトを減らす手法が開示されている。また特許文献5には、関数の中で複数の関数が連続して呼ばれる場合やループの中で呼ばれている等の特定パターンでの実行回数の多いものを仮配置により求める手法が開示されている。また特許文献6には、構造グラフの作成及び参照による実行頻度の高いループで呼ばれる関数を連続に配置する方式が開示されている。
特開平5−324281号公報 特開平7−84799号公報 特開平8−328870号公報 特開2001−216140号公報 特開2001−282547号公報 特許第3309810号公報 橋本 敬介、安藤 秀樹、島田 俊夫、「命令キャッシュミス削減のための基本ブロック単位でのコード再配置手法」、1999年並列処理シンポジウムJSPP’99、1999年6月、pp.31−38
従来用いられる関数強度は、ある関数内の命令系列における他の関数の読み出し回数に基づいて求められた単なる呼出し回数や、呼出し順を考慮した特定の関数呼出しパターンの呼出し回数に基づくものに過ぎず、実行時における関数相互の時系列的な相関関係を全く考慮していなかった。従って、従来の関数強度でキャッシュカラーリングを行った場合、実際のプログラム実行状態においては適切な関数配置となっていない場合があり、期待する程度にはキャッシュ競合を抑制することができない。
以上を鑑みて本発明は、実行時における関数相互の関係を考慮したキャッシュカラーリング方式を提供することを目的とする。
本発明によるキャッシュカラーリング方法は、複数の関数からなるプログラムの実行時における該複数の関数の呼出し順を時系列として表現した動的関数フローに基づいて、該複数の関数のうちの任意の関数と他の全ての関数との実行時の呼出し関係についての情報を含む関数強度情報を生成し、該関数強度情報に基づいて命令キャッシュ競合が少なくなるように該複数の関数をメモリ空間に配置する各段階を含むことを特徴とする。
本発明においては、プログラム実行時の関数の呼出し関係のトレース等により生成された実行時の関数間の呼出し関係を時系列として表現した動的関数フローに基づいて、全ての関数間の実行時の呼出し関係についての情報を含む関数強度情報を生成する。この関数強度情報は、従来では不可能であった関数間の相互情報(任意関数とその他全関数との関係)を表現するものであり、これを用いることで命令キャシュミス数を最小限にするような最適な関数配置を実現することができる。
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
図1は、本発明によるキャッシュカラーリング方法の実施例を示すフローチャートである。
図1のステップS1において、キャッシュカラーリングの対象となるプログラムをシミュレータ等により実行する。ステップS2で、関数の入口/出口をトレースすることにより、関数の動的フロー10を生成する。ここでいう動的関数フロー10とは、プログラム実行時に呼び出された関数を呼び出された順番(実行された順番)に時系列として並べたものであり、実行時の関数の呼出し関係をそのまま反映した情報である。動的関数フロー10の生成については、後程詳細に説明する。
ステップS3において、動的関数フロー10に基づいて関数強度情報11を作成する。この関数強度情報11は、従来の関数強度に含まれる呼出し回数や呼出し順の情報に加え、全ての関数に対する時系列的な情報を含むものである。関数強度情報11の作成については、後程詳細に説明する。
ステップS4において、関数強度情報11を参照したカラーリングに基づいて、命令キャッシュミスを最小にするようなリンク文字列を生成する。リンク文字列の生成については、後程詳細に説明する。ステップS5では、リンカが、生成されたリンク文字列に基づいて各関数を記憶空間に割当ててリンクすることにより、実行形式モジュールを生成する。ステップS6において、生成された実行モジュールを実行してカラーリング後のプログラムを実行する。
このように本発明においては、プログラムの実行時に関数の呼出し関係をトレースすることにより、実行時の関数間の呼出し関係を時系列として表現した動的関数フロー10を生成し、この動的関数フロー10に基づいて、全ての関数間の実行時の呼出し関係についての情報を含む関数強度情報11を生成する。この関数強度情報11は、従来では不可能であった関数間の相互情報(任意関数とその他全関数との関係)を表現するものであり、これを用いることで命令キャシュミス数を最小限にするような最適な関数配置を実現することができる。
なお以降の説明においては、ダイレクト方式はキャシュwayが1のセットアソシエイティブ方式とみなすことができるので、ダイレクト方式を含んだセットアソシエイティブ方式を例として用いる。
まず動的関数フロー10の抽出について説明する。
対象となるプログラムが関数A、B、C、D、E、及びFからなるとして、このプログラムをシミュレータで実行する。各関数A、B、C、D、E、及びFの入口/出口をトレースすることにより、プログラムの実行開始から終了まで、呼び出された全ての関数を順番に記録することで関数の時系列を生成する。図2は、関数A、B、C、D、E、及びFからなるプログラムを実行した場合の動的関数フロー10の一例を示す図である。最初に関数Aが実行され、関数Aが関数Bを呼び出すことで関数Bが実行され、以降順番に関数C、D、C、D、C、B、・・・と呼び出し・実行されている。
次に動的関数フロー10に基づく関数強度情報11の生成について説明する。
まず関数強度情報11の第1の実施例(基本形)について説明する。
ある関数iの参照から、その後、最初に参照された関数jまでの区間(iを含みjを含まず)の集合をRijとする。動的関数フローから、Riiである全ての区間のうちで、関数jを少なくとも1回参照するような区間の数としてn(i,j)を求める。ここでi=jの場合には、n(i,j)を関数iの総参照回数とする。このようにして求めたn(i,j)を関数強度と定義する。
n(i,j)は、関数iと関数j(≠i)が同じキャシュラインに配置された場合にキャシュミスを発生させる回数(キャシュミス数)に等しい。つまりn(i,j)は、キャシュ競合の大小により関数強度を定義したものである。関数強度n(i,j)が大きいほどキャッシュへの影響が大きいので、関数強度n(i,j)の大きい関数同士を同じキャシュラインに配置せず、n(i,j)の小さい関数同士を同じキャシュラインに配置するようにすれば、キャッシュ競合を少なくすることができる。
図3は、図2の動的関数フロー10について関数強度n(B,D)について説明するための図である。図3においてそれぞれ異なる下線で示すように、5つの関数Bの区間RBB(次の関数Bまでの区間)が存在する。この5つの区間RBBのうちで、少なくともDを1回参照する区間の数は3つである。したがってn(B,D)は3となる。同様に全ての関数の組み合せについて強度関数を求めると、図4に示すようなマトリクスが得られる。図4に示すマトリクスが関数強度情報11である。
以下に関数強度情報11の第2の実施例について説明する。
第2の実施例は、第1の実施例の強度関数n(i,j)を改善したものである。第1の実施例のn(i,j)は、関数jを少なくとも1回参照する区間数を意味し、関数iと関数j(≠i)が同じキャシュラインに配置された場合のキャシュミス回数に相当する。この際、第1の実施例の関数強度n(i,j)では、区間内に呼ばれる関数の参照回数は考慮していない。
それに対して第2の実施例では、キャシュ再利用率を評価次元に加える。図5は、キャシュ再利用率を説明するための図である。図5のケースλは、ケースτより関数αの呼び出し回数が多く、関数αについてのプログラム局所性が強くてキャシュ再利用率が高いと考えられる。キャシュの再利用率は、区間内に呼ばれる関数の参照回数に比例する。第1の実施例の関数強度n(i,j)にキャシュ再利用率の要素を加え、新たな関数強度情報n(i,j)を定義する。
即ち、Riiに属する区間の関数j(≠i)について、キャシュ再利用率を考慮した関数強度情報n(i,j)として、
(i,j)=Σ(1×Ref(k)/R(k))
R(k):区間k∈Riiの全関数の参照回数
Ref(k):区間k∈Rii≠jの関数jの参照回数
を定義する。
図6は、図2の動的関数フロー10について関数強度n(B,D)について説明するための図である。図6においてそれぞれ異なる下線で示すように、5つの関数Bの区間RBB(次の関数Bまでの区間)が存在する。この5つの区間RBBのうちで、最初の区間の関数Dの出現頻度は2/5であり、2番目の区間の関数Dの出現頻度は2/5であり、3番目の区間の関数Dの出現頻度は2/5であり、4番目の区間の関数Dの出現頻度は0/3であり、5番目の区間の関数Dの出現頻度は0/1である。従って、関数強度n(B,D)は以下のようになる。
(B,D)=1×2/5+1×2/5+1×2/5+1×0/3+1×0/1
=1.2
同様に全ての関数の組み合せについて強度関数を求めると、図7に示すようなマトリクスが得られる。図7に示すマトリクスが第2の実施例による関数強度情報11である。
関数強度n(i,j)が大きいほどキャッシュへの影響が大きくキャッシュ再利用率が高いので、関数強度n(i,j)の大きい関数同士を異なるキャシュラインに配置するようにすれば、キャッシュ競合を少なくすることができる。
以下に関数強度情報11の第3の実施例について説明する。
第3の実施例は、第2の実施例の強度関数n(i,j)を改善したものである。上記の第2の実施例では、プログラムの局所性即ちキャシュ再利用率を、全ての関数の呼び出し回数に対する所定の関数の呼び出し回数の割合から求めている。しかしキャシュミス回数に着目した場合には、全ての関数の呼び出し回数に対する割合は余り重要ではなく、所定の関数が何回呼び出されて何回のキャッシュ競合を起こしたかが重要になると考えられる。
そこで第3の実施例の関数強度情報n++(i,j)として、
++(i,j)=Σ(1×Ref(k))
Ref(k):区間k∈Rii≠jの関数jの参照回数
を定義する。
図8は、図2の動的関数フロー10について関数強度n++(B,D)について説明するための図である。図8においてそれぞれ異なる下線で示すように、5つの関数Bの区間RBB(次の関数Bまでの区間)が存在する。この5つの区間RBBのうちで、最初の区間の関数Dの出現回数は2であり、2番目の区間の関数Dの出現回数は2であり、3番目の区間の関数Dの出現回数は2であり、4番目の区間の関数Dの出現回数は0であり、5番目の区間の関数Dの出現回数は0である。従って、関数強度n++(B,D)は以下のようになる。
++(B,D)=1×2+1×2+1×2+1×0+1×0
=6
同様に全ての関数の組み合せについて強度関数を求めると、図9に示すようなマトリクスが得られる。図9に示すマトリクスが第3の実施例による関数強度情報11である。
関数強度n++(i,j)が大きいほどキャッシュへの影響が大きくキャッシュミス回数が多いので、関数強度n++(i,j)の大きい関数同士を異なるキャシュラインに配置するようにすれば、キャッシュ競合を少なくすることができる。
以下に関数強度情報11の第4の実施例について説明する。
第4の実施例は、第1の実施例の強度関数n(i,j)を改善したものである。前述の第1の実施例の関数強度n(i,j)では、区間内において呼び出される関数の位置情報は考慮していない。即ちある区間において所定の関数に着目した場合、その所定の関数の参照位置が異なっていても、キャシュミス回数としては同一とみなしている。
それに対して第4の実施例では、プログラムの局所性を評価次元として加える。プログラムの局所性を示す尺度として、ある区間において所定の関数が最初に参照されるまでの時間的距離を用いる。この時間的距離は、複数の関数が同一のキャシュラインに配置された場合にキャシュミスが発生するまでの時間を示すことになる。図10は、プログラムの局所性を説明するための図である。図10において、ケースμの時間的距離s(μ)はケースεの時間的距離s(ε)よりも短く、プログラムの局所性が高いと考えられる。プログラムの局所性は、プログラムの時間的距離、即ち同一キャシュラインに配置された場合に発生するキャシュミスまでの時間に反比例する。
第4の実施例では、Riiに属する区間の関数j(≠i)について、関数iから関数jのプログラム局所性を考慮した関数強度情報n#(i,j)として、
n#(i,j)=Σ(1/Len(k))
Len(k):区間k∈Rii≠jの関数jの最初の参照までの距離(≠0)
を定義する。
図11は、図2の動的関数フロー10について関数強度n#(B,D)について説明するための図である。図11においてそれぞれ異なる下線で示すように、5つの関数Bの区間RBB(次の関数Bまでの区間)が存在する。この5つの区間RBBのうちで、最初の区間の関数Dの最初の参照までの時間距離は2であり、2番目の区間の関数Dの最初の参照までの時間距離は2であり、3番目の区間の関数Dの最初の参照までの時間距離は2である。従って、関数強度n#(B,D)は以下のようになる。
n#(B,D)=1/2+1/2+1/2
=1.5
同様に全ての関数の組み合せについて強度関数を求めると、図12に示すようなマトリクスが得られる。図12に示すマトリクスが第4の実施例による関数強度情報11である。
関数強度n#(i,j)が大きいほどキャッシュへの影響が大きく、またプログラムの局所性が高くキャッシュミスまでの時間が短いので、関数強度n#(i,j)の大きい関数同士を異なるキャシュラインに配置するようにすれば、キャッシュ競合を少なくすることができる。
以下に、関数強度情報11を生成する手順について説明する。以下においては、上記第1の実施例の場合を例にとって説明する。
図13は、動作フローと関数リストテーブルとを示す図である。説明の便宜上、図13(a)に示される単純な動作フローに対して関数強度情報11を生成する手順について説明する。図13(b)は、(a)の動作フローに現れる3つの関数a、b、及びcについての関数リストテーブルである。
まず関数リストテーブルに基づいて抽出区間内関数強度領域(出現済記録領域)を、関数リストテーブルのデータ数からなる1次元配列として生成する。即ちこの場合、3つの要素からなる1次元配列として抽出区間内関数強度領域を生成する。また関数強度マトリクス領域として、関数リストテーブルのデータ数×関数リストテーブルのデータ数のマトリクス状の2次元配列を生成する。この場合は、3×3のマトリクス領域となる。図14(a)に抽出区間内関数強度領域を示し、図14(b)に関数強度マトリクス領域を示す。
図15は、関数リストテーブルの最初の関数aを抽出開始点とした場合の最初の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。(a)において、関数aを抽出開始点とした最初の抽出区間Raaが網掛けで示される。(b)は、(a)の抽出区間に対する抽出区間内関数強度領域のデータを示す。抽出区間内関数強度領域においては、対象となる抽出区間において一回以上出現する関数についてデータ“1”を設定する。但し抽出区間開始点の関数aについては出現回数“2”をデータとして設定する。この抽出区間内関数強度領域のデータを(c)の関数強度マトリクスの対応領域にそのまま設定する。
図16は、関数リストテーブルの最初の関数aを抽出開始点とした場合の2番目の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。(a)において、関数aを抽出開始点とした2番目の抽出区間Raaが網掛けで示される。(b)は、(a)の抽出区間に対する抽出区間内関数強度領域のデータを示す。抽出区間内関数強度領域においては、対象となる抽出区間において一回以上出現する関数についてデータ“1”を設定する。ここで抽出区間開始点の関数aの出現回数は2であるが、2番目以降の抽出区間においては抽出区間開始点の関数aは前区間でカウント済みであるので、抽出開始点の関数についてはカウントしない。この抽出区間内関数強度領域のデータを(c)の関数強度マトリクスの対応領域に加算する。
図17は、関数リストテーブルの最初の関数aを抽出開始点とした場合の3番目の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。(a)において、関数aを抽出開始点とした3番目の抽出区間Raaが網掛けで示される。この場合、抽出開始点以降に関数aは出現しないので、抽出区間が成立しないと判断する。従って、抽出区間内関数強度領域のデータを(c)の関数強度マトリクスの対応領域に反映させることはしない。
図18は、関数リストテーブルの2番目の関数bを抽出開始点とした場合の最初の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。(a)において、関数bを抽出開始点とした最初の抽出区間Rbbが網掛けで示される。(b)は、(a)の抽出区間に対する抽出区間内関数強度領域のデータを示す。抽出区間内関数強度領域においては、対象となる抽出区間において一回以上出現する関数についてデータ“1”を設定する。但し抽出区間開始点の関数bについては出現回数“2”をデータとして設定する。この抽出区間内関数強度領域のデータを(c)の関数強度マトリクスの対応領域にそのまま設定する。
図19は、関数リストテーブルの2番目の関数bを抽出開始点とした場合の2番目の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。(a)において、関数bを抽出開始点とした2番目の抽出区間Rbbが網掛けで示される。(b)は、(a)の抽出区間に対する抽出区間内関数強度領域のデータを示す。抽出区間内関数強度領域においては、対象となる抽出区間において一回以上出現する関数についてデータ“1”を設定する。ここで抽出区間開始点の関数bの出現回数は2であるが、2番目以降の抽出区間においては抽出区間開始点の関数bは前区間でカウント済みであるので、抽出開始点の関数についてはカウントしない。この抽出区間内関数強度領域のデータを(c)の関数強度マトリクスの対応領域に加算する。
図20は、関数リストテーブルの2番目の関数bを抽出開始点とした場合の3番目の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。(a)において、関数bを抽出開始点とした3番目の抽出区間Rbbが網掛けで示される。この場合、抽出開始点以降に関数bは出現しないので、抽出区間が成立しないと判断する。従って、抽出区間内関数強度領域のデータを(c)の関数強度マトリクスの対応領域に反映させることはしない。
図21は、関数リストテーブルの3番目の関数cを抽出開始点とした場合の最初の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。(a)において、関数cを抽出開始点とした最初の抽出区間Rccが網掛けで示される。この場合、抽出開始点以降に関数cは出現しないので、抽出区間が成立しないと判断する。但し、関数cを抽出開始点とする抽出区間が1つも成立しないことになるので、この場合は抽出開始点である関数cのみをカウントし、抽出区間内関数強度領域のデータを生成する。この抽出区間内関数強度領域のデータを(c)の関数強度マトリクスの対応領域にそのまま設定する。
以上のようにして、関数リストテーブルの先頭から順番に関数を選択し、選択された各関数について抽出区間を順次設定して、抽出区間内での関数の出現の有無をデータとして抽出区間内関数強度領域を生成する。こうして生成された抽出区間内関数強度領域のデータを順次関数強度マトリクスに反映させていくことで、第1の実施例による関数強度情報11が生成される。
以上説明した第1の実施例の関数強度情報11を求める手順においては、抽出区間内関数強度領域として、関数の出現の有無をデータとする出現済記録領域を用いた。第2乃至第4の実施例については、区間内で要素ごとに出現した回数を記録する出現回数記録領域、区間内の総データ数を記録する抽出区間内総データ数記録領域、最初の要素が出現するまでの順番を記録する初回出現順記録領域等を用意することで、同様にして関数強度情報11を求めることができる。
以下に、関数強度情報11に基づいて関数をメモリ空間に配置する方法について説明する。
図22は、関数配置方法の第1の実施例を示すフローチャートである。この第1の実施例では、関数強度情報が大きい順番に関数を配置する。
ステップS1において、関数iと関数jの関数強度情報を示す行列n(i,j)から関数iに対する行を選択する。初回の関数iは行の先頭関数とする。
ステップS2において、関数iの総和(関数M(i))に初期値0を入れる。
ステップS3において、関数強度情報n(i,j)を示す行列から関数i行の列要素関数jを選択(初回は先頭列:但しi≠j)し、関数iの総和(関数M(i))に加算する。
ステップS4において、選択した関数jが最終列を超えたか否かを判断する。超えればステップS6に進み、超えない場合にはステップS5に進む。
ステップS5において、次の列要素の関数jを求める。その後ステップS3に戻り、以降の処理を繰り返す。
ステップS6において、関数iの総和(関数M(i))が求まる。
ステップS7において、選択した関数iは最終行を超えたか否かを判断する。超えればステップS8に進む。超えない場合にはステップS1に戻り、次行の関数iに対して同様の処理を実行する。
以上の処理が終了した段階で、図23に示すように、図4の関数強度情報11に対応した関数M(i)(各関数iに対する関数強度情報11の総和)が求められる。この関数M(i)は、関数iについて他の関数が同一のキャッシュラインに配置された場合のキャッシュミス数の総和に相当する。
次にステップS8において、行要素(関数i:i=1、2、・・・)の総和M(i)の大きい値の順に対応する関数を抽出して、リンク文字列を作成する。即ち、M(i)の大きい順に関数を配置する。図24は、図4の関数強度情報11の場合に関数配置方法の第1の実施例に従い配置された関数の列を示す図である。
この関数配置方法の第1の実施例では、関数強度情報11の強い関数同士が同一キャシュライン(異なる論理アドレスを占める同一のキャシュライン)に配置されることを防ぐことができる。即ち、同一のキャシュラインはメモリ空間の連続するアドレス上でキャシュサイズ分だけ離れて周期的に割当てられているので、関数強度情報11の大きな関数を優先して先に配置していくことで、関数強度情報11の大きな関数を次の同一キャシュラインが現れるより前に割当てることができる。これにより、キャシュ競合が発生しないようにすることが可能である。
なお上記説明では関数強度情報11の第1の実施例(n(i,j))を用いて説明したが、第2乃至第4の関数強度情報11(n(i,j)、n++(i,j)、n#(i,j))を用いても同様にして関数を配置することができる。
以下に、関数強度情報11に基づいて関数をメモリ空間に配置する方法の第2の実施例について説明する。
図25は、関数配置方法の第2の実施例を示すフローチャートである。この第2の実施例では、総和ではなく関数個々の関数強度情報n(i,j)に着目して、最も頻繁にキャシュミスが発生する関数同士を、互いに隣接して配置することでキャシュミスの競合をなくすようにしている。
図25のステップS1において、関数強度情報n(i,j)が最も大きい関数の組(関数i、関数j)を選択する。選択された関数の組の左側の関数iを起点関数として、リンク文字列に関数i、関数jの順番に関数を配置する。
ステップS2において、起点関数を関数jとし関数強度情報n(j,k)が最も大きくなる関数kを求める。この際、既にリンク文字列として選択済の関数を除いた残りの関数中から関数kを選択する。リンク文字列の終端に求めた関数kを追加する。
ステップS3において、起点関数を関数kとして、同様に繰り返す。
ステップS4において、起点関数が存在しない(リンク文字列にすべての関数を抽出済)であるか否かを判断する。起点関数がまだ存在する場合には、ステップS2に戻り以降の処理を繰り返す。
ステップS5において、リンク文字列が求まる。
図4の関数強度情報11の例では、強度情報の最大はn(C,D)であるので、まず起点関数をCとして、最も強度情報の大きい関数Dを選択する。次に起点関数をDとして、最も強度情報の大きい関数Bを選択する(関数Cは既抽出のために除く)。同様に起点関数をBとして、最も強度情報の大きい関数Eを選択する。次に起点関数をEとして、最も強度情報の大きい関数Fを選択する。最後に関数Fを起点関数として、残りの関数Aを選択する。図26は、図4の関数強度情報11の場合に関数配置方法の第2の実施例に従い配置された関数の列を示す図である。
なお上記説明では関数強度情報11の第1の実施例(n(i,j))を用いて説明したが、第2乃至第4の関数強度情報11(n(i,j)、n++(i,j)、n#(i,j))を用いても同様にして関数を配置することができる。
なお関数強度情報が同じ関数が複数存在する場合、何れの関数を選択するかにより以降の関数配置が大きく変わる可能性がある。そこで関数強度情報が同じ場合について、関数を選択する基準を規定しておいてもよい。例えば、ユーザによる関数配置の指定、関数サイズが小さい関数優先、呼出し数が大きい関数優先等である。
上記関数配置方法の第2の実施例では、強度情報の大きさだけでなく、更に関数サイズを考慮するようにしてもよい。即ち、関数サイズが小さいものほど近くに配置すべきであるという考えに基づいて、(強度情報/サイズ)の値を定義して、この値が大きい関数を配置関数として順次選択して配置するようにしてもよい。
以上説明した関数配置方法においては、メモリ空間上のキャッシュラインについては特に意識することなく、関数を所定の順番で配置している。これに対して、以下に説明する関数配置方法の第3の実施例では、関数強度情報11を利用してキャッシュライン毎に関数を配置する。
図27は、関数配置方法の第3の実施例を示すフローチャートである。第3の実施例では、関数強度情報11に基づいて選択したキャシュミス数の少ないラインから順次関数を配置していく。
図27のステップS1において、配置関数の順番を一意に決定する。配置順番としては、例えば、関数配置方法の第1の実施例と同様に、キャシュミス数の総和に相当するM(i)の大きい順としてよい。この順番は一意であればよく、特に限定されるものではない。例えば、自関数の呼出し回数n(i,i)の大きい順としてもよい。ステップS2において、上記の順番に従って、関数(まだ選択されていない)を一つ選択する。
ステップS3において、メモリ空間に割当てられたキャッシュラインを走査し、既に配置されている関数と選択した関数との間で発生するキャッシュミス数(n(i,j))を、関数強度情報11に基づいてキャッシュライン毎に算出する。ステップS4において、ステップS3で算出したキャシュミス数が最も少ないキャシュラインに、ステップS2で選択した関数を配置する。このステップS3及びステップS4の処理については後程詳細に説明する。
ステップS5において、全ての関数が配置されたか否かを判定する。全ての関数が配置された場合には、処理はステップS6に進む。まだ配置されていない関数が存在する場合には、ステップS2に戻り、以降の処理を繰り返す。
ステップS5において、キャシュライン毎に関数を配置するリンク文字列を作成する。これにより、キャッシュラインを考慮しながら全ての関数をメモリ空間に配置する処理が終了する。
図28は、図27のステップS3及びS4において、キャッシュミス数をキャッシュライン毎に算出し関数を配置する処理を示すフローチャートである。なおキャッシュラインは、L1乃至Lzのz個が割当てられているとする。
ステップS1において、選択した関数xが占めることになるキャシュラインの数mを関数サイズに基づいて求める。
ステップS2において、各キャシュラインLn(n=1〜z)に配置されている関数を全て抽出する。具体的には、関数配置時に使用キャシュラインの情報が内部テーブルに格納されるので、各キャシュラインLnについて既に配置済みの関数の情報が記録されている。この情報に基づいて、各キャシュラインLn(n=1〜z)に配置されている関数を全て抽出することができる。キャシュラインLnに配置されている関数を(Ln−f1,Ln−f2,Ln−f3,・・・Ln−f)と表記する。
ステップS3において、関数xを配置するときに、各キャシュラインLn(n=1〜z)に配置されている関数とキャシュミスを起こす回数を関数強度情報から算出する。ここでキャシュラインLnでのキャシュミス数M(Ln)は、
M(Ln)= n(x,Ln_f1)+n(Ln_f1,x)
+n(x,Ln_f2)+n(Ln_f2,x)
+・・・+n(x,Ln_f)+n(Ln_f,x)
として求められる。
ステップS4において、連続するキャシュラインをキャシュラインL0からm個選択してキャシュミスの総和(M(L0)+M(L1)+…+M(Lm))を求め、キャシュラインL1からm個選択してキャシュミスの総和(M(L1)+M(L2)+…+M(Lm+1))を求め、以下同様に各m個のキャッシュラインについてキャッシュミスの総和を求め、最後にキャシュラインLz(最終キャシュライン)からm個選択してキャシュミスの総和(M(Lz)+M(L0 )+…+M(Lm−1))を求める。なお最終キャシュラインLzの後は先頭キャシュラインL0に戻ることになる。
ステップS5において、ステップS4で求めたキャッシュミスの総和が最小となるm個のキャッシュラインのセットを選択する。ステップS6において、選択されたm個の連続するキャッシュラインに関数xを配置する。
以下に、上記のキャッシュライン毎の配置方法を具体例に基づいて説明する。
図24に示される順番で、関数B、C、D、A、E、Fを配置する場合について考える。ここでキャッシュラインはL0〜L7の8つであり、各キャッシュラインのサイズは4バイトであるとする。また関数Bはサイズが6バイト、関数Cは10バイト、関数Dは22バイト、関数Aは3バイト、関数Eは5バイト、関数Fは10バイトであるとする。
図29は、関数B、C、D、Aを順に配置した状態を示す図である。この状態において、次に選択した関数Eを配置する位置を決定する。ここで使用する関数強度情報11は、図4に示す関数強度情報である。
まず図28のステップS3で説明したように、各キャッシュラインについて、選択した関数Eと既に配置されている関数とのキャッシュミス数を図4の関数強度情報11から算出する。例えばキャッシュラインL0には、図29に示すように既に関数Bと関数Dとが配置されているので、選択した関数Eとこれらの関数とのキャッシュミス数を求めることになる。図4の関数強度情報11において、n(B,E)は2、n(E,B)は1、n(D,E)は0、n(E,D)は0であるので、これらの総和としてキャッシュミス数3が求められる。図30は、各キャッシュラインについて求められたキャッシュミス数を示す図である。
選択した関数Eは、そのサイズが5バイトであるから2つのキャッシュラインを占めることになる。従って、2つのキャッシュラインの組として(L0,L1)、(L1,L2)、(L2,L3)、(L3,L4)、(L4,L5)、(L5,L6)、(L6,L7)、(L7,L0)のうちで、キャシュミスの総和が最も少ない組を選択する。この場合は(L4,L5)、(L5,L6)、(L6,L7)の3組が何れもキャッシュミスの総和がゼロであり、この3組の中から例えばキャシュライン(L4,L5)を選択する。
なお上記説明では関数強度情報11の第1の実施例(n(i,j))を用いて説明したが、第2乃至第4の関数強度情報11(n(i,j)、n++(i,j)、n#(i,j))を用いても同様にして関数を配置することができる。
上記のキャッシュライン毎の配置方法により、関数B、C、D、A、E、及びFの全てについて、キャシュラインへの配置が決定される。このキャシュラインへの配置においては、キャシュライン単位に関数を配置しているだけであるので、リンク時において論理アドレスを指定する必要がある。
以下に、キャッシュラインへの関数配置情報に基づいて論理アドレスを求める方法について説明する。
図31は、キャッシュラインへの関数配置から各関数の論理アドレスを求める方法を示すフローチャートである。
ステップS1において、連続するキャシュライン番号を、関数強度情報を使用したキャシュラインごとの配置方法により求める。即ち各関数に対して、関数を配置するキャッシュラインを求める。
ステップS2において、キャシュライン番号に対応する最初の論理アドレスとして、論理アドレスのタグ領域にキャシュライン番号を格納しそれ以外はゼロに設定することで論理アドレスを算出する。
図32は、論理アドレスの構成及びキャッシュライン番号から論理アドレスへの変換テーブルを示す図である。図32(a)に示されるように、例えば8つのキャッシュラインが論理アドレスの第4ビット〜第6ビット(タグ領域)で指定される。図32(b)に示されるように、例えばキャッシュラインL0は、この第4ビット〜第6ビットが0である論理アドレスに割当てられる。また例えばキャッシュラインL1は、この第4ビット〜第6ビットが1である論理アドレスに割当てられる。上記図31のステップS2においては、タグ領域である第4ビット〜第6ビットにキャッシュライン番号を格納し、それ以外のビットにはゼロを設定することで、各キャッシュラインL0〜L7に対するベースとなる論理アドレス(最初の論理アドレス)を設定する。
図31のステップS3において、同じキャシュライン番号となる2回目以降の論理アドレスとして、前回求めた論理アドレスにキャッシュサイズを加算する。例えば同一キャッシュライン番号に対応する2回目の論理アドレスは、上記のベースとなる論理アドレスからキャシュサイズだけ離れたアドレスとなる。従って、ベースとなる論理アドレスにキャシュサイズを加算することで2回目の論理アドレスを求めることができる。3回目以降の論理アドレスについても同様に、前回求めた論理アドレスにキャシュサイズを加算することで対応するアドレスを求める。
ステップS4において、指定したキャシュラインに対応する論理アドレスを求める。即ち、各関数に対して、その関数の配置先として指定されるキャッシュラインに対応する論理アドレスを求める。
以上の処理により、各関数を配置する論理アドレスを決定することができる。
以下に、キャッシュライン毎に関数を配置する関数配置方法の第3の実施例の変形例について説明する。
前述のキャッシュライン毎に関数を配置する関数配置方法は、関数が占有するキャシュラインの実行頻度については特に考慮していない。しかし関数のサイズが大きく局所性が強い場合、占有する複数のキャシュラインのうちで、特定のキャッシュラインについては頻繁に実行されるがそれ以外のキャッシュラインについては実行頻度が少ない場合がある。このような場合には、キャッシュライン毎に重付けすることが好ましい。
そこで関数強度情報から求めるキャシュミス数を、キャシュライン毎の実行時間分布に基づいて細分化する。図33は、キャシュライン毎の実行時間分布を示す図である。例えば関数Cは3つのキャッシュラインを占有するが、第2のキャッシュラインの実行頻度が0.8と高く、第1及び第3のキャッシュラインの実行頻度は0.1と低い。
関数iが占有するキャッシュラインと同一のキャシュラインに関数jを配置した場合のキャッシュミス数は、n(i,j)で表される。関数配置方法の第3の実施例では、このn(i,j)をそのまま使用することになる。それに対してキャッシュライン毎に重付けを考慮した場合、キャッシュラインlについてのキャッシュミス数は、
キャッシュミス数=X(i,l)×X(j,l)×n(i,j)
となる。ここでX(i,l)は、図33における関数i及びキャッシュラインlに対する実行頻度である。例えば関数iと関数jとが3つの同一のキャッシュラインを占有する場合には、l=0〜2について上式のキャッシュミス数の総和をとればよい。
このようにキャッシュライン毎に重み付けをすることにより、より細かな関数強度情報に基づいたキャッシュカラーリングが可能になる。
なお上記説明では関数強度情報11の第1の実施例(n(i,j))を用いて説明したが、第2乃至第4の関数強度情報11(n(i,j)、n++(i,j)、n#(i,j))を用いた場合でも同様に重み付けをすることができる。
また上記説明では、重み付けとして実行比率を用いている。しかしキャシュライン毎の重み付けは、実行比率に限るものではなく、同一キャシュラインに配置されている関数の数等のキャシュラインに関する種々の指標を使用することができる。
以下に、関数強度情報のマージ処理について説明する。
プログラムを実行する場合、処理内容がデータ内容に依存して変化することがある。この場合、複数の異なるデータに対して複数の異なるプログラム実行ルートが存在することとなり、それぞれのルート毎に異なった関数強度情報が得られる。そこでこれらの異なった関数強度情報をマージする必要がある。
関数強度情報のマージには様々な方式が考えられるが、例えば実行ルート毎に重み係数を定め、関数強度情報を重み付けしてマージすることができる。即ち、関数強度情報として、
関数強度情報=Σ(wi×Di)
を用いることができる。ここでDiは実行ルートiについての関数強度情報であり、wiは実行ルートiに対する重み係数である。
図34は、マージ処理を示すフローチャートである。
ステップS1において、動的関数フロー10Aに基づいて関数強度情報11Aを生成する。ステップS2において、動的関数フロー10Bに基づいて関数強度情報11Bを生成する。ステップS3において、関数強度情報11A、関数強度情報11B、及び重み付け情報20に基づいて、関数強度情報のマージを実行して関数強度情報11Cを生成する。
なお上記重み付けは、実行比率、ルートの実行回数、ルート内の関数実行回数の総和等、実行ルートに関する種々の指標を使用して設定することができる。
図35は、本発明によるキャッシュカラーリングを実行する装置の構成を示す図である。
図35に示されるように、本発明によるキャッシュカラーリング方法を実行する装置は、例えばパーソナルコンピュータやエンジニアリングワークステーション等のコンピュータにより実現される。図35の装置は、コンピュータ510と、コンピュータ510に接続されるディスプレイ装置520、通信装置523、及び入力装置よりなる。入力装置は、例えばキーボード521及びマウス522を含む。コンピュータ510は、CPU511、RAM512、ROM513、ハードディスク等の二次記憶装置514、可換媒体記憶装置515、及びインターフェース516を含む。
キーボード521及びマウス522は、ユーザとのインターフェースを提供するものであり、コンピュータ510を操作するための各種コマンドや要求されたデータに対するユーザ応答等が入力される。ディスプレイ装置520は、コンピュータ510で処理された結果等を表示すると共に、コンピュータ510を操作する際にユーザとの対話を可能にするために様々なデータ表示を行う。通信装置523は、遠隔地との通信を行なうためのものであり、例えばモデムやネットワークインターフェース等よりなる。
本発明によるキャッシュカラーリング方法は、コンピュータ510が実行可能なコンピュータプログラムとして提供される。このコンピュータプログラムは、可換媒体記憶装置515に装着可能な記憶媒体Mに記憶されており、記憶媒体Mから可換媒体記憶装置515を介して、RAM512或いは二次記憶装置514にロードされる。或いは、このコンピュータプログラムは、遠隔地にある記憶媒体(図示せず)に記憶されており、この記憶媒体から通信装置523及びインターフェース516を介して、RAM512或いは二次記憶装置514にロードされる。
キーボード521及び/又はマウス522を介してユーザからプログラム実行指示があると、CPU511は、記憶媒体M、遠隔地記憶媒体、或いは二次記憶装置514からプログラムをRAM512にロードする。CPU511は、RAM512の空き記憶空間をワークエリアとして使用して、RAM512にロードされたプログラムを実行し、適宜ユーザと対話しながら処理を進める。なおROM513は、コンピュータ510の基本動作を制御するための制御プログラムが格納されている。
上記コンピュータプログラムを実行することで、上記各実施例で説明されたようにキャッシュカラーリング方法を実行する。またこのキャッシュカラーリング方法実行環境が、キャッシュカラーリング装置である。
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
本発明によるキャッシュカラーリング方法の実施例を示すフローチャートである。 動的関数フローの一例を示す図である。 動的関数フローに基づく関数強度について説明するための図である。 関数強度情報のマトリクスを示す図である。 キャシュ再利用率を説明するための図である。 図2の動的関数フローに基づく関数強度について説明するための図である。 第2の実施例による関数強度情報のマトリクスを示す図である。 図2の動的関数フローに基づく関数強度について説明するための図である。 第3の実施例による関数強度情報のマトリクスを示す図である。 プログラムの局所性を説明するための図である。 図2の動的関数フローに基づく関数強度について説明するための図である。 第4の実施例による関数強度情報のマトリクスを示す図である。 動作フローと関数リストテーブルとを示す図である。 (a)は抽出区間内関数強度領域を示し、(b)は関数強度マトリクス領域を示す図である。 関数リストテーブルの最初の関数aを抽出開始点とした場合の最初の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。 関数リストテーブルの最初の関数aを抽出開始点とした場合の2番目の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。 関数リストテーブルの最初の関数aを抽出開始点とした場合の3番目の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。 関数リストテーブルの2番目の関数bを抽出開始点とした場合の最初の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。 関数リストテーブルの2番目の関数bを抽出開始点とした場合の2番目の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。 関数リストテーブルの2番目の関数bを抽出開始点とした場合の3番目の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。 関数リストテーブルの3番目の関数cを抽出開始点とした場合の最初の抽出区間、抽出区間内関数強度領域、及び関数マトリクス領域を示す図である。 関数配置方法の第1の実施例を示すフローチャートである。 図4の関数強度情報に対応した関数M(i)を示す図である。 図4の関数強度情報の場合に関数配置方法の第1の実施例に従い配置された関数の列を示す図である。 関数配置方法の第2の実施例を示すフローチャートである。 図4の関数強度情報の場合に関数配置方法の第2の実施例に従い配置された関数の列を示す図である。 関数配置方法の第3の実施例を示すフローチャートである。 キャッシュミス数をキャッシュライン毎に算出し関数を配置する処理を示すフローチャートである。 関数B、C、D、Aを順に配置した状態を示す図である。 各キャッシュラインについて求められたキャッシュミス数を示す図である。 キャッシュラインへの関数配置から各関数の論理アドレスを求める方法を示すフローチャートである。 論理アドレスの構成及びキャッシュライン番号から論理アドレスへの変換テーブルを示す図である。 キャシュライン毎の実行時間分布を示す図である。 マージ処理を示すフローチャートである。 本発明によるキャッシュカラーリングを実行する装置の構成を示す図である。
符号の説明
10 動的関数フロー
11 関数強度情報
20 重み付け情報
510 コンピュータ
511 CPU
512 RAM
513 ROM
514 二次記憶装置
515 可換媒体記憶装置
516 インターフェース
520 ディスプレイ装置
523 通信装置

Claims (10)

  1. 複数の関数からなるプログラムの実行時における該複数の関数の呼出し順を時系列として表現した動的関数フローに基づいて、該複数の関数のうちの任意の関数と他の全ての関数との実行時の呼出し関係についての情報を含む関数強度情報を生成し、
    該関数強度情報に基づいて命令キャッシュ競合が少なくなるように該複数の関数をメモリ空間に配置する
    各段階を含むことを特徴とするキャッシュカラーリング方法。
  2. 該関数強度情報はマトリクス情報n(i,j)として表現され、n(i,j)は該動的関数フローにおける関数iの参照からその後最初に参照された関数iまでの区間である全ての区間のうちで関数jを少なくとも1回参照する区間の数であり、且つi=jの場合には関数iの総参照回数であることを特徴とする請求項1記載のキャッシュカラーリング方法。
  3. 該関数強度情報はマトリクス情報n(i,j)として表現され、n(i,j)は、該動的関数フローにおける関数iの参照からその後最初に参照された関数iまでの区間である全ての区間について、各区間における関数の総参照回数に対する関数jの参照回数の比率を総和したものであることを特徴とする請求項1記載のキャッシュカラーリング方法。
  4. 該関数強度情報はマトリクス情報n(i,j)として表現され、n(i,j)は、該動的関数フローにおける関数iの参照からその後最初に参照された関数iまでの区間である全ての区間について、各区間における関数jの参照回数を総和したものであることを特徴とする請求項1記載のキャッシュカラーリング方法。
  5. 該関数強度情報はマトリクス情報n(i,j)として表現され、n(i,j)は、該動的関数フローにおける関数iの参照からその後最初に参照された関数iまでの区間である全ての区間について、各区間における先頭の関数iから最初に参照された関数jまでの距離の逆数を総和したものであることを特徴とする請求項1記載のキャッシュカラーリング方法。
  6. 該関数強度情報はマトリクス情報n(i,j)として表現され、n(i,j)はプログラム実行時における関数iと関数jとの間の命令キャッシュ競合の度合いが高いと大きくなる数値であり、該複数の関数をメモリ空間に配置する段階は、全ての関数jについてのn(i,j)の総和が大きい順に複数の関数iをメモリ空間に順次連続に配置することを特徴とする該請求項1記載のキャッシュカラーリング方法。
  7. 該関数強度情報はマトリクス情報n(i,j)として表現され、n(i,j)はプログラム実行時における関数iと関数jとの間の命令キャッシュ競合の度合いが高いと大きくなる数値であり、該複数の関数をメモリ空間に配置する段階は、n(i,j)が大きい順に関数i及び関数jの組を該メモリ空間に順次連続に配置することを特徴とする該請求項1記載のキャッシュカラーリング方法。
  8. 該関数強度情報はマトリクス情報n(i,j)として表現され、n(i,j)はプログラム実行時における関数iと関数jとの間の命令キャッシュ競合の度合いが高いと大きくなる数値であり、該複数の関数をメモリ空間に配置する段階は、該メモリ空間の複数のキャッシュラインの各々についてn(i,j)を参照してキャッシュ競合が少なくなるように該複数の関数を該複数のキャッシュラインに配置することを特徴とする該請求項1記載のキャッシュカラーリング方法。
  9. 該複数の関数をメモリ空間に配置する段階は、該複数の関数のうちの一の関数が複数のキャッシュラインを占有する大きさを有している場合に該占有される複数のキャッシュラインのそれぞれに対して異なった重みを与えて該一の関数と他の関数とのキャッシュ競合について評価することを特徴とする該請求項8記載のキャッシュカラーリング方法。
  10. 該プログラムの複数の異なる実行に対応して複数の異なる動的関数フローが存在し、該複数の異なる動的関数フローを重み付けして加算することで1つの動的関数フローを生成する段階を更に含み、該関数強度情報を生成する段階は該1つの動的関数フローに基づいて該関数強度情報を生成することを特徴とする請求項1記載のキャッシュカラーリング方法。
JP2004074916A 2004-03-16 2004-03-16 キャッシュカラーリング方法 Expired - Fee Related JP4554241B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2004074916A JP4554241B2 (ja) 2004-03-16 2004-03-16 キャッシュカラーリング方法
US10/921,986 US7478199B2 (en) 2004-03-16 2004-08-20 Cache coloring based on dynamic function flow

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004074916A JP4554241B2 (ja) 2004-03-16 2004-03-16 キャッシュカラーリング方法

Publications (2)

Publication Number Publication Date
JP2005266941A true JP2005266941A (ja) 2005-09-29
JP4554241B2 JP4554241B2 (ja) 2010-09-29

Family

ID=34987857

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004074916A Expired - Fee Related JP4554241B2 (ja) 2004-03-16 2004-03-16 キャッシュカラーリング方法

Country Status (2)

Country Link
US (1) US7478199B2 (ja)
JP (1) JP4554241B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009032198A (ja) * 2007-07-30 2009-02-12 Fujitsu Microelectronics Ltd キャッシュカラーリング方法
WO2010106914A1 (ja) * 2009-03-17 2010-09-23 日本電気株式会社 プログラムのメモリ空間への配置方法、装置、および記録媒体

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8856452B2 (en) * 2011-05-31 2014-10-07 Illinois Institute Of Technology Timing-aware data prefetching for microprocessors

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11232117A (ja) * 1998-02-16 1999-08-27 Nec Corp プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
JP2001166948A (ja) * 1999-12-07 2001-06-22 Nec Corp プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
JP2001216140A (ja) * 2000-01-31 2001-08-10 Nec Microsystems Ltd 命令キャッシュ関数割付装置、割付最適化方法および割付最適化手順を記録した記録媒体
JP2001282547A (ja) * 2000-03-28 2001-10-12 Nec Microsystems Ltd 命令キャッシュへの関数割付最適化装置、関数割付最適化方法及び関数割付最適化手順を記録した記録媒体
JP2003271394A (ja) * 2002-03-19 2003-09-26 Nec Electronics Corp 関数と基本ブロックの配置割付装置および割付最適化プログラム

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05324281A (ja) 1992-05-25 1993-12-07 Nec Corp アドレス割当変更方法
JP3417984B2 (ja) 1993-09-10 2003-06-16 株式会社日立製作所 キャッシュ競合削減コンパイル方法
JPH08328870A (ja) 1995-05-30 1996-12-13 Fujitsu Ltd コンパイル処理装置
JP3309810B2 (ja) 1998-08-13 2002-07-29 日本電気株式会社 プログラムリンクシステム、方法及び記録媒体
US6947052B2 (en) * 2001-07-13 2005-09-20 Texas Instruments Incorporated Visual program memory hierarchy optimization
CA2363182C (en) * 2001-11-19 2006-06-06 Ibm Canada Limited-Ibm Canada Limitee Automatic program restructuring to reduce average cache miss penalty

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11232117A (ja) * 1998-02-16 1999-08-27 Nec Corp プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
JP2001166948A (ja) * 1999-12-07 2001-06-22 Nec Corp プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
JP2001216140A (ja) * 2000-01-31 2001-08-10 Nec Microsystems Ltd 命令キャッシュ関数割付装置、割付最適化方法および割付最適化手順を記録した記録媒体
JP2001282547A (ja) * 2000-03-28 2001-10-12 Nec Microsystems Ltd 命令キャッシュへの関数割付最適化装置、関数割付最適化方法及び関数割付最適化手順を記録した記録媒体
JP2003271394A (ja) * 2002-03-19 2003-09-26 Nec Electronics Corp 関数と基本ブロックの配置割付装置および割付最適化プログラム

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009032198A (ja) * 2007-07-30 2009-02-12 Fujitsu Microelectronics Ltd キャッシュカラーリング方法
US8341354B2 (en) 2007-07-30 2012-12-25 Fujitsu Semiconductor Limited Cache coloring method and apparatus based on function strength information
WO2010106914A1 (ja) * 2009-03-17 2010-09-23 日本電気株式会社 プログラムのメモリ空間への配置方法、装置、および記録媒体
JP2010218218A (ja) * 2009-03-17 2010-09-30 Nec Corp プログラムのメモリ空間への配置方法、装置、およびプログラム
JP4600700B2 (ja) * 2009-03-17 2010-12-15 日本電気株式会社 プログラムのメモリ空間への配置方法、装置、およびプログラム
US8732687B2 (en) 2009-03-17 2014-05-20 Nec Corporation Arrangement method of programs to memory space, apparatus, and recording medium

Also Published As

Publication number Publication date
US7478199B2 (en) 2009-01-13
JP4554241B2 (ja) 2010-09-29
US20050210453A1 (en) 2005-09-22

Similar Documents

Publication Publication Date Title
JP3544422B2 (ja) 記事配置装置
CN102859500B (zh) 存储器使用扫描
EP0838755A2 (en) Binary program conversion apparatus and method
JPH11272460A (ja) 特性依存の情報処理システムに関する修正情報を視覚的に表すためのシステム
JP6020448B2 (ja) データベース性能予測装置及びデータベース予測方法
JP2003256855A (ja) グラフィックス・イメージ生成方法、これを用いたプログラム及び統計データ描画装置
JP5244421B2 (ja) 情報処理装置およびプログラム分割方法
JP2009163497A (ja) 事務フロー生成装置およびその方法
JP2006309763A (ja) メモリマップドページプライオリティ
JP4554241B2 (ja) キャッシュカラーリング方法
CN104380286A (zh) 索引生成程序以及检索程序
JP2596690B2 (ja) カーソル位置と表示形像との相関付け方法及び相関付け手段を備えたコンピュータ・システム
JP5272346B2 (ja) キャッシュカラーリング方法
CN105487911B (zh) 一种基于编译指导的众核数据分片方法
JP4600700B2 (ja) プログラムのメモリ空間への配置方法、装置、およびプログラム
KR100938903B1 (ko) 불규칙한 배열 접근 패턴을 갖는 애플리케이션을 대한소프트웨어에 의해 제어되는 캐시 메모리의 동적 데이터할당 방법
JP2007072883A (ja) キャッシュメモリ解析方法、プロセッサおよび模擬情報処理装置
JP6519228B2 (ja) データ配置決定装置、データ配置決定プログラム及びデータ配置決定方法
CA2906324C (en) Optimizing the placement of clustered textural annotations
Li et al. Optimizing Data Layout for Training Deep Neural Networks
JP6442967B2 (ja) 情報処理プログラム、情報処理装置、情報処理方法
JP2005050196A (ja) 暗号化プログラム実行方法およびその装置
KR20160143600A (ko) 중첩 오버래핑 기반의 서브 그래프 리스팅 방법
JP6138384B2 (ja) プログラム配置装置、プログラム配置方法及びプログラム配置プログラム
JPH08212081A (ja) メモリ割り付け方法、並びにコンパイル方法およびコンパイラ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051026

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20080728

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081202

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090202

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100112

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100407

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20100419

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100713

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100714

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130723

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees