JP4600700B2 - プログラムのメモリ空間への配置方法、装置、およびプログラム - Google Patents

プログラムのメモリ空間への配置方法、装置、およびプログラム Download PDF

Info

Publication number
JP4600700B2
JP4600700B2 JP2009064301A JP2009064301A JP4600700B2 JP 4600700 B2 JP4600700 B2 JP 4600700B2 JP 2009064301 A JP2009064301 A JP 2009064301A JP 2009064301 A JP2009064301 A JP 2009064301A JP 4600700 B2 JP4600700 B2 JP 4600700B2
Authority
JP
Japan
Prior art keywords
function
instruction code
cache
program
belonging
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.)
Expired - Fee Related
Application number
JP2009064301A
Other languages
English (en)
Other versions
JP2010218218A (ja
Inventor
昭倫 京
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2009064301A priority Critical patent/JP4600700B2/ja
Priority to EP10753409.1A priority patent/EP2410432A4/en
Priority to PCT/JP2010/053431 priority patent/WO2010106914A1/ja
Priority to US13/256,788 priority patent/US8732687B2/en
Publication of JP2010218218A publication Critical patent/JP2010218218A/ja
Application granted granted Critical
Publication of JP4600700B2 publication Critical patent/JP4600700B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • 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

Landscapes

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

Description

本発明は、複数の関数で構成されるプログラムの関数を、命令キャッシュを搭載したコンピュータシステムのメモリ空間に配置する方法に関する。
コンピュータシステムにおいては一般に、外部メモリ(=主記憶メモリ)とは別に小容量で高速な内蔵メモリ(キャッシュ)が設けられる。外部メモリに記憶される情報の一部をキャッシュにコピーしておき、この情報をアクセスする場合には外部メモリからではなくキャッシュから読み出すことで、高速な情報の読み出しが可能となる。キャッシュは外部メモリに比較して高速でコスト高であるために、通常その記憶容量は外部メモリと比べ非常に小さい。キャッシュは複数のキャッシュラインを含み、外部メモリからキャッシュへの情報のコピーはキャッシュライン単位で実行される。このために、外部メモリのメモリ空間をキャッシュライン単位で分割し、分割されたメモリ領域を順番にキャッシュラインに割当てておく。キャッシュの容量は外部メモリの容量よりも小さいので、外部メモリのメモリ領域を同一のキャッシュラインに繰り返して割当てることになる。一方、あるアドレスに最初のアクセスが実行されると、そのアドレスの情報(データやプログラム)をキャッシュ内の対応するキャッシュラインにコピーし、同一アドレスに対して次のアクセスを実行する場合にはキャッシュから直接に情報を読み出す。そこで、プログラム実行において、外部メモリの異なるアドレスに配置されたプログラム(=命令コード列)が同一のキャッシュラインに割当てられている場合、これらの命令コード列が交互に読み出されるたびに、命令コード列をキャッシュにコピーする必要が生じる。これを命令キャッシュ競合という。命令キャシュ競合が頻繁に起こるとプログラムの実行速度が遅くなるという問題がある。この問題を解決するために、同時期に動作する可能性の高い命令コード列同士は同一のキャッシュラインに載らないよう配置する方法が研究されている。なお、キャッシュには命令キャッシュとデータキャッシュとがあるが、上記のような命令コード列読み出しの問題は命令キャッシュにおいて生じるものである。また、キャッシュメモリのマッピング方式には一般に、ダイレクト方式、セットアソシエイティブ方式、およびフルアメシエイティブ方式の3つがあるが、何れの方式においても上記のキャッシュ競合の問題を考える上では基本的に同一であるので、以降においてはダイレクトマップを例にとり説明する。
これまで、命令キャッシュ競合の問題を解決するために、プログラムが関数単位で構成されていることに着目し、関数間の呼出し回数や特定の関数呼出しパターンの呼出し回数を示す関数強度を定義し、関数強度が高い(即ち互いに読み出す可能性が高い)関数同士が同一の命令キャッシュラインに割当てられないようにする方法が従来からある。例えば特許文献1は、関数の中で複数の関数が連続して呼ばれる場合やループの中で呼ばれている等の特定パターンでの実行回数の多いものを仮配置により求める手法を開示している。また、特許文献2は、複数の関数からなるプログラムの実行時における関数の呼出し順を時系列として表現した動的関数フローに基づいて、関数のうちの任意の関数と他の全ての関数との実行時の呼出し関係についての情報を含むように関数強度の情報を生成し、該関数強度の情報に基づいて命令キャッシュ競合が少なくなるように関数をメモリ空間に配置する手法を開示している。
特開2001−282547号公報 特開2005−266941号公報
このように従来の方法では、ある関数内の命令系列における他の関数の読み出し回数に基づいて求められた単なる呼出し回数、あるいは呼出し順を考慮した特定の関数呼出しパターンの呼出し回数に基づき、または実行時における関数相互の時系列的な相関関係を考慮の上、関数強度を定め、関数強度が高い関数同士が同一の命令キャッシュラインに割当てられないように関数をメモリ空間に配置していた。しかし、組込みシステム等のように、命令キャッシュ容量が小さい、すなわちキャッシュライン当たりのサイズが小さく、かつキャッシュライン数も少ないため、一つの関数といっても多くの場合、複数のキャッシュラインを跨るように関数を配置せざるを得ないケースがある。このケースでは、関数間でキャッシュラインの利用を排他的にすることは、そもそも多くの場合、困難である。例えばある関数が全キャッシュラインを占有してしまうと、もとより、それと排他に別の関数をメモリ空間に配置しようにも不可能である。そのため命令キャッシュ容量が小さい場合、従来の方法のように関数単位で求められた関数強度の情報を元に配置を行っただけでは、キャッシュ競合回数を効果的に削減できないケースが多発することが予想される。なぜなら、キャッシュ競合は通常、関数よりももっと細かな(キャッシュライン)単位でその発生位置が存在するのに対し、従来の方法ではそうしたキャッシュライン単位での相互呼出し関係という粒度での情報が、関数強度を求める際に利用されてないからである。
本発明の目的は、キャッシュラインのサイズの単位での競合情報を元に、関数のメモリへの配置を決定することで、命令キャッシュ容量が小さいシステムにおいても、命令キャッシュ競合回数を効果的に削減できる、プログラムのメモリ空間配置方法、装置、およびプログラムを提供することにある。
ターゲットプロセッサの命令キャッシュラインサイズをCSする。各関数をサイズが命令キャッシュラインサイズCSの命令コードブロック(ICB)に分割し、各関数Fの先頭から数えてX番目の命令コードブロックを(F,X)と表現する。プログラムの実行時に命令コードブロックの呼出し関係をトレースすることにより、プログラムの実行時の命令コードブロック間の呼出し関係を時系列に表現した、(F,X)を識別名とするノードのフロー情報を作成する。次に、ノードのフロー情報に基づいて、識別名毎にフロー情報におけるその出現ノード毎の近傍内に、自分と異なる関数に属する各識別名の出現頻度を考慮した情報を、自分からみた他の各識別名の近傍重みとして求める。最後に、近傍重み情報に基づいて、命令キャッシュの競合回数が少なくなるように、複数の関数をメモリ空間に配置する。
本発明によれば、プログラムを、命令キャッシュを搭載したコンピュータシステムのメモリ空間に、命令キャッシュ競合回数が少なくなるように配置することができ、プログラムの実行サイクル数を削減することができる。
図1は本発明の一実施形態のプログラムメモリ空間配置装置のブロック図である。 図2は図1のプログラムメモリ空間配置の処理の流れを示すフローチャートである。 図3は、図1のプログラムメモリ空間配置装置で利用するプログラムの一例の構造を示す図である。 図4は、図3のプログラムを実行することにより得られるフロー情報を示す図である。 図5Aは、近傍重みWa7b0を計算するのに利用する、フロー情報のa7b0区間を示す図である。 図5Bは、近傍重みWa7b1を計算するのに利用する、フロー情報のa7b1区間を示す図である。 図5Cは、近傍重みWa7c0を計算するのに利用する、フロー情報のa7c0区間を示す図である。 図5Dは、近傍重みWa7c1を計算するのに利用する、フロー情報のa7c1区間を示す図である。 図6Aは、関数AのICBa0〜a5の、関数B、C、Dに属する他の全ICBに対する近傍重みを求めた結果である近傍重み表情報を示す図である。 図6Bは、関数AのICBa6の、関数B、C、Dに属する他の全ICBに対する近傍重みを求めた結果である近傍重み表情報を示す図である。 図6Cは、関数AのICBa7の、関数B、C、Dに属する他の全ICBに対する近傍重みを求めた結果である近傍重み表情報を示す図である。 図6Dは、関数AのICBa8の、関数B、C、Dに属する他の全ICBに対する近傍重みを求めた結果である近傍重み表情報を示す図である。 図6Eは、関数AのICBb0、b1の、関数A、C、Dに属する他の全ICBに対する近傍重みを求めた結果である近傍重み表情報を示す図である。 図6Fは、関数AのICBc0の、関数A、B、Dに属する他の全ICBに対する近傍重みを求めた結果である近傍重み表情報を示す図である。 図6Gは、関数AのICBc1、c2の、関数A、B、Dに属する他の全ICBに対する近傍重みを求めた結果である近傍重み表情報を示す図である。 図6Hは、関数AのICBd0の、関数A、B、Cに属する他の全ICBに対する近傍重みを求めた結果である近傍重み表情報を示す図である。 図7は、各ICBの、図6Aから図6Hの近傍重み表情報から求まるノード重みおよび関数重みを示す図である。 図8Aは、関数Cを配置した後、関数Aをキャッシュライン0番から配置した場合のキャッシュ競合スコアの計算の様子を示す図である。 図8Bは、関数Cを配置した後、関数Aをキャッシュライン1番から配置した場合のキャッシュ競合スコアの計算の様子を示す図である。 図8Cは、関数Cを配置した後、関数Aをキャッシュライン2番から配置した場合のキャッシュ競合スコアの計算の様子を示す図である。 図8Dは、関数Cを配置した後、関数Aをキャッシュライン3番から配置した場合のキャッシュ競合スコアの計算の様子を示す図である。 図8Eは、関数Cを配置した後、関数Aをキャッシュライン4番から配置した場合のキャッシュ競合スコアの計算の様子を示す図である。 図8Fは、関数Cを配置した後、関数Aをキャッシュライン5番から配置した場合のキャッシュ競合スコアの計算の様子を示す図である。 図8Gは、関数Cを配置した後、関数Aをキャッシュライン6番から配置した場合のキャッシュ競合スコアの計算の様子を示す図である。 図8Hは、関数Cを配置した後、関数Aをキャッシュライン7番から配置した場合のキャッシュ競合スコアの計算の様子を示す図である。 図9は、図8Aから図8Hで算出された、関数Aの、キャッシュライン毎への配置に伴って発生するキャッシュ競合スコアを示す図である。 図3のプログラムに対する、本発明の実施の形態により生成された関数配置指定情報を示す図である。 図10の関数配置指定情報に従って各関数のメモリ配置を行った場合の、プログラム実行終了時点に、各キャッシュラインに格納されているICBの識別名を示す図である。 従来の方法で図3のプログラムの関数へのメモリ配置を決定するのに用いられる動的関数フロー情報を示す図である。 従来の方法で図3のプログラムの関数へのメモリ配置を決定するのに用いられる関数強度情報のマトリクスを示す図である。 従来の方法を利用した場合の、図3のプログラムの関数のメモリ配置を示す図である。
次に、本発明を実施するための形態について図面を参照して詳細に説明する。
図1は本発明の一実施の形態によるプログラムメモリ空間配置装置のブロック図、図2はその処理の流れを示すフローチャートである。
本実施の形態のプログラムメモリ空間配置装置はプログラム実行部11とフロー情報作成部12とフロー情報記憶部13と近傍重み情報作成部14と近傍重み表情報記憶部15と関数配置決定部16と関数配置指定情報記憶部17とを有する。
プログラム実行部11は、命令キャッシュ競合回数削減の対象となるプログラムをシミュレータ等により実行する(ステップ101)。
フロー情報作成部12はステップ102に、ICBの入口/出口をトレースすることにより、ICBのフロー情報21を生成し、フロー情報記憶部13に格納する。ここでいうフロー情報21とは、プログラム実行時に利用されたICBの順番(実行された順番)を時系列に並べたものであり、実行時のICB間の呼出し関係をそのまま反映した情報である。なお、フロー情報21の生成については、後程詳細に説明する。
近傍重み情報作成部14はステップ103に、フロー情報21に基づいて近傍重み表情報22を作成し、近傍重み表情報記憶部15に格納する。この近傍重み表情報22は、従来の関数呼出し回数、呼出し順、そして全関数に対する時系列的な情報から求められる関数強度情報とは異なり、関数を単位とするのではなくICBを単位としICB間の呼出し回数および時系列的な呼出し関係から求められる情報である。なお、近傍重み表情報22の作成については、後程詳細に説明する。
関数配置決定部16はステップ104に、近傍重み表情報22を参照することで、命令キャッシュ競合回数を最小にするような関数毎のメモリ配置を決定し、命令キャッシュへの関数配置指定情報23を関数配置指定情報記憶部17に記憶する。配置対象関数Fに属する各ICBであるUと、既に配置済みの全関数に属するICBであるVとの間でキャッシュライン配置競合が発生する可能性Pを示す値とする。配置対象関数Fに対し、計命令キャッシュライン数だけ存在する、個々のメモリ配置をとった場合について、Uとキャッシュラインを共有するVが存在すれば、近傍重み表情報22に記載されているUに対するVの近傍重み、あるいはVに対するUの近傍重み、あるいは両方の平均値、のいずれかを累算していくことで、Fが当該メモリ配置を取った場合のキャッシュ競合スコアとしてのSを算出する。そして、命令キャッシュライン数だけ存在するSの値のうち、最小のS値を与えるメモリ配置を関数Fに割り当てることで、全関数に対する関数配置指定情報23を生成する。その後、命令キャッシュへのこの関数配置指定情報23に基づき、リンカが実際に各関数を記憶空間に割当ててリンクすることにより、実行形式モジュールを生成すればよい。なお、関数配置指定情報23の作成については、後程より詳細に説明する。
このように、本実施の形態においては、プログラムの実行時にICBの呼出し関係をトレースすることにより、実行時のICB間の呼出し関係を時系列として表現したフロー情報21を生成し、このフロー情報21に基づいて、全てのICB間の実行時の呼出し回数や呼出し関係についての情報を含む近傍重み表情報22を生成する。この近傍重み表情報22は、従来では考慮されていなかったICB間の相互情報(任意のICBとその他の全ICBとの関係)を表現するものであり、これを用いることで命令キャシュ競合回数を最小限にするような最適な関数配置を実現することができる。なお、以降の説明では、ダイレクト方式はキャッシュのウェイ数が1のセットアソシエイティブ方式とみなすことができるので、ダイレクト方式を含んだセットアソシエイティブ方式を例として用いる。
なお、フロー情報記憶部13、近傍重み表情報記憶部15、関数配置指定情報記憶部17は1つにまとめてもよい。
まず、フロー情報21の抽出について説明する。対象となるプログラムが図3に示す関数A、B、C、およびDからなるとして、このプログラムをシミュレータで実行する。図3においては、関数A、B、C、Dが、サイズがターゲットプロセッサのキャッシュラインサイズCSのコードブロック(=ICB)に分割され、それぞれキャッシュラインを9ライン分、2ライン分、3ライン分、1ライン分占有している。そして、関数Aの6番目のICB内から関数Bを呼び出し、次に関数Aの6番目のICBから関数Cを呼び出し、次に関数Aの7番目のICB内から関数Bを呼び出し、次に関数Aの7番目のICBから関数Cを呼び出す。これを4回反復する。さらに、関数Cの先頭のICBから関数Dを呼び出すことを3回反復する。各関数F(=A〜D)の先頭から数えてX番目のICBにFXという識別子を与える。そしてシミュレーション実行中に発生した、相異なる関数に属するICB間の全ての遷移を順番に記録することでフロー情報21を生成する。図4は、関数A、B、C、Dからなる、図3のプログラムを実行した場合のフロー情報21を示している。図4において、a、b、c、dはそれぞれ関数A、B、C、Dを意味し、続く数字は各関数内のICB番号を意味する。また、「[・・・]#」は、[・・・]内を#回反復することを意味する。最初に関数Aが実行され、関数Aの6番目のICBすなわちa6内で関数Bを呼び出すことで関数Bが実行され、その後関数Bから関数Aに戻った後に、同じa6内で今度は関数Cを呼び出すことで関数Cが実行され、関数C内では先頭のICBすなわちc0内で関数Dを呼び出すことで関数Dが実行される。こうした呼出がc0内で3反復発生している。その後、関数Cから関数Aに戻った後に、今度は関数Aの7番目のICBすなわちa7内で、前述の関数Bを呼出し次に関数Cを呼び出すシーケンスが再度繰り返されている。また、こうした関数Aの6番目と7番目のICBが計4反復実行されている。
次にフロー情報21に基づく近傍重み表情報22の生成について説明する。
まず、近傍重み表情報22の例について説明する。ある関数iに属するICBで識別名がixのICBの参照から、その後、同じixのICBが出現するまでの間に最初に参照された関数j(ただしj≠i)に属するICBで識別名がjyのICBの参照までの区間をixjy、フロー情報21全体に渡るその集合をRixjyとする。ixjy区間毎について、区間内で関数i以外の関数に属するICBで相異なる識別名を持つものがjy自身を入れ計N種類存在した場合のスコアを1/Nとする。Rixiyに含まれる全てのixjy区間のスコアの合計値を、ICBixからみたICBjyの「近傍重みWixjy」とする。このようにして、全ての関数(=i)に属する各ICB(=x)について、自分と異なる関数(=j)に属する全てのICB(=y)についての近傍重みWixjyを求めたものを、近傍重み表情報22と定義する。
近傍重みWixjyは、フロー情報21おいて、関数iのICBであるixと関数j(≠i)のICBであるjyが、同じキャシュラインに配置された場合にキャシュ競合が起きる可能性の大きさを表現するため、個々のICBixから始まって次のICBixに出会うまでの間に存在するICBjyまでの区間ixjyにおいて、ICBixからICBjyまでの間に他の関数に属するノードが多く存在すればするほどスコアが小さくなるようにしている。すなわち、他の関数に属する命令コードへの参照がICBixとICBjy間で発生する頻度が高ければ高いほど、ICBixとICBjyが直接キャッシュライン競合を引き起こす可能性も低下する状況をスコアの値で表現している。その結果、フロー情報21内に存在する全てのixjy区間に渡る前記スコアの合計としての近傍重みWixjyは、プログラム実行全体でみた場合の、ICBixとICBjyを同じキャシュラインに配置した場合にキャシュ競合が起きる可能性の大きさを表現するものとなる。そのため、近傍重みWixjyが大きいICBixとICBjyを同じキャシュラインに配置せず、近傍重みWixjyが小さいICBixとICBjy同士をできるだけ同じキャシュラインに配置するようにすれば、キャッシュ競合回数を少なくすることができるようになる。
図5は例として、図4のフロー情報21から求められる近傍重みWixjyのうち、関数Aの7番目のICB(=a7)の、他の関数のICBに対する近傍重みの求め方を説明した図である。なお、説明をしやすくするため、図5に示したフロー情報21は展開して記述している。まず、図5Aは、関数Bの先頭のICBb0に対する近傍重みWa7b0を計算するために考慮される全てのa7b0区間を下線で示している。この場合、a7の直ぐ後にb0が現れる区間の個数の合計が4、a7の後a6を挟んでb0が現れる区間の個数の合計が3である。いずれの区間もa7からb0の出現までに、関数A以外の関数に属するICBが出現しないため、各区間のスコアは共に1となり、したがって、近傍重みWa7b0は7として求められる。次に、図5Bは、関数Bの次のICBb1の近傍重みWa7b1を計算するために考慮される全てのa7b1区間を下線で示している。この場合、a7b1区間は計7区間存在し、また各区間共に、a7の直ぐ後からb1が現れるまでの間、関数A以外の関数に属するICBとしてb0が1回出現していることから、各区間のスコアは共に1/2となる。その結果、近傍重みWa7b1は7×1/2、すなわち7/2として求められる。図5Cは、関数Cの先頭のICBc0に対する近傍重みWa7c0を計算するために考慮される全てのa7c0区間を下線で示している。この場合、a7の直ぐ後にc0が現れる区間の合計が4、a7の後c0を挟んでb0、b1が現れる区間の合計が3である。したがって、近傍重みWa7c0は4+3×1/3、すなわち5として求められる。図5Dは、関数Cの次のICBc1に対する近傍重みWa7c1を計算するために考慮される全てのa7c1区間を下線で示している。この場合、最初の区間のスコアは、a7の後c1を挟んで他の関数のICBであるc0とd0が現れるため、1/3である。以下、同様にして、各区間のスコアは1/5、1/3、1/5、1/3、1/5、1/3となる。したがって、近傍重みWa7c1は1/3+1/5+1/3+1/5+1/3+1/5+1/3、すなわち29/15として求められる。このようにして求めた、フロー情報10に出現する全ICBの、相異なる関数に属する他の全ICBに対する近傍重みを求めた結果である近傍重み表情報22を図6Aから図6Hに示す。
次に、近傍重み表情報22への参照による関数配置指定情報23の生成例について説明する。対象となるプログラムが図3に示す関数A、B、C、およびDからなり、またそのフロー情報21が図4および図5からなり、かつ各近傍重み表情報22が図6Aから図6Hのように求められているとして、関数配置指定情報23の生成例について説明する。まず、どの関数から配置を始めるかを決めるために、個々のICBの(他の関数に属するICBに対する)近傍重みの合計値であるノード重みを、各関数内の全ICBに渡って合計した関数重みを求め、関数重みの大きい関数から順に配置を行う。これは、関数重みの値が大きいことは、当該関数に含まれているICBがプログラム実行全体からみた場合に、他関数との相関度が高いことを示すため、そうした関数の配置をより早い段階で確定させておくことは、後続する関数の配置決定に当該関数の配置が考慮される確率を高められるためである。図7に、図6の近傍重み表情報22から求まるノード重みおよび関数重みを示す。
次に、前記のノード重みおよび関数重みの情報を元に、キャッシュライン数が8であるプロセッサをターゲットとした場合を例に、関数配置指定情報12を生成する例を示す。まず、関数重みが最大である関数Cを適当に(この場合はキャッシュライン0番に対応するメモリアドレスに)配置した後、関数重みが次点の関数Aを配置対象関数として、既配置関数Cに対する関数Aの、各キャッシュライン番号への配置に対するキャッシュ競合スコアの計算の様子を図8に示す。図8A、8B、8C、8D、8E、8F、8G、8Hはそれぞれ関数Aをキャッシュライン0番から、1番から、2番から、3番から、4番から、5番から、6番から、7番から配置した場合を示している。ここで、「キャッシュライン#番から配置する」とは、「キャッシュライン#番に対応するメモリアドレスへ関数の先頭を配置する」ことを意味する。また、max(X,Y)はXとYの大きい方の値を利用する意味の表記とする。図8に示すように、本例では、あるキャッシュライン配置に対するキャッシュ競合スコアとして、配置対象関数に属するICBであるixと、配置済み関数に属するICBであるjyが同じキャッシュラインにロードされる場合に、近傍重みWixjyとWjyixの大きい方の値をキャッシュ競合スコアとして加算するようにしている。このように大きい方の値のみを計上するのは、近傍重みWixjyはixが既にキャッシュライン上にある状況下でjyへの参照が発生する可能性、逆に近傍重みWjyixはjyが既にキャッシュライン上にある状況下でixへの参照が発生する可能性を意味しており、両者の可能性は通常排他的にしか発生しないことから、キャッシュ競合スコアとしてはいずれか大きい方を計上するのが妥当なためである。
図9は、図8で求めた、関数Aを各キャッシュライン番号から配置した場合のキャッシュ競合スコアをまとめた表である。本表より、関数Aをキャッシュライン0番、あるいはキャッシュライン5番、あるいはキャッシュライン7番の先頭から配置した場合にキャッシュ競合スコアが最も低くなることがわかる。この場合、いずれのキャッシュラインに関数Aを割り当てるかは任意であるが、ここではキャッシュライン0番へ関数Aを配置するように決定するものとする。同様に、既配置関数AとCに対し関数B、最後に既配置関数AとCとBに対し関数D、を次々と配置していくことで、図10に示す最終配置結果が得られる。すなわち関数Cをキャッシュライン0番、関数Aも同様にキャッシュライン0番、一方関数Bをキャッシュライン3番、最後に関数Dをキャッシュライン5番、に配置するという関数配置指定情報23が得られる。
図10に示す関数配置指定情報23に基づき、リンカが実際に各関数をメモリ空間に割当ててリンクすることにより生成した実行形式モジュールを、キャッシュライン数が8であるターゲットプロセッサ上で実行させた場合、各ICBは一度だけ対応するキャッシュラインに読み込まれるだけになる。したがって、命令キャッシュ競合回数(一度命令キャッシュに読み込まれたICBが、他のICBの読み込みによって上書きされたために、当該ICBを再度参照するのに、もう一度当該ICBを命令キャッシュに読み込んだ回数)は0回である。
図11はこの場合い、プログラム実行終了時点に命令キャッシュの各ラインにどのICBが格納されているかを示す。
このように、本発明の方法を用いることで命令キャッシュ競合回数を大きく削減することができる。これに対し、例えば図3の実行フローを持つプログラムを、関数単位で求められた関数強度の情報を元にメモリ配置を行う従来の方法、例えば特許文献2に示されている手法の基本的な実施形態を用いて、キャッシュライン数が8であるターゲットプロセッサを対象に、図3の実行フローを持つプログラムのメモリ配置を決定した場合の結果を以下に示す。まず、図12、図13に、特許文献2に述べられている動的関数フロー情報および関数強度情報のマトリクスを求めた結果を示す。ここで、動的関数フロー情報とは、対象プログラムをシミュレータで実行し、各関数A、B、C、およびDの入口/出口をトレースすることにより、プログラムの実行開始から終了まで、呼び出された全ての関数を順番に記録することにより得られる関数の時系列情報を指す。また、基本形としての関数強度情報とは、ある関数iの参照から、その後、最初に参照された関数jまでの区間(iを含みjを含まず)の集合をRijとした場合、動的関数フローから、Riiである全ての区間のうちで、関数jを少なくとも1回参照するような区間の数としてn(i,j)を求め(i=jの場合、n(i,j)は関数iの総参照回数となる)、関数強度情報と定義する。
次に、図12、図13での動的関数フローおよび関数強度情報に基づいて、メモリ配置を行った結果例として、関数強度の大きい順から配置を実施した場合、あるいは関数強度ペア値の大きい順から配置を実施した場合の結果を図14に示す。なお、いずれの場合も結果的には関数C、D、A、Bの順番で配置を実施することになるため、同一のメモリ配置が得られる。図14で得られたメモリ配置の下、図3の実行フローを持つプログラムをキャッシュライン数が8であるターゲットプロセッサ上で実行した場合の命令キャッシュ競合回数は13となる。これに対し、本発明の方法を用いた場合では命令キャッシュ競合回数が0回であることから、本発明を用いることで、従来の方法と比べはるかに効果的に、命令キャッシュ競合回数を削減できることがわかる。
なお、従来の方法、例えば特許文献2においても、例えばキャッシュライン毎の実行頻度分布を考慮した上で、関数間で実行頻度の高いキャッシュライン同士が重ならないように配置する実施例が開示されている。しかし、そもそもキャッシュライン毎の実行頻度情報そのものは、例えば関数内にその関数内だけで閉じたループ部分があれば、対応の命令コードを含むキャッシュラインの実行頻度が高くなってしまうように、キャッシュ競合の発生の有無とは直接関係のない情報である。そのため、もしそうした情報を考慮に入れたとしても、関数同士の呼び出し関係を中心とする手法は本質的には、命令キャッシュ容量が小さいためにキャッシュライン数が少ないケース、すなわち一つの関数が複数のキャッシュラインを跨る頻度が高いケースに対しては、キャッシュ競合回数の削減に貢献できないことは明らかである。
なお、本プログラムメモリ空間配置装置の機能は、その機能を実現するためのプログラムを、コンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータに読み込ませ、実行するものであってもよい。コンピュータ読み取り可能な記録媒体とは、フレキシブルディスク、光磁気ディスク、CD−ROM等の記録媒体、コンピュータシステムに内蔵されるハードディスク装置等の記憶装置を指す。さらに、コンピュータ読み取り可能な記録媒体は、インターネットを介してプログラムを送信する場合のように、短時間、動的にプログラムを保持するもの(伝送媒体もしくは伝送波)、その場合のサーバとなるコンピュータ内の揮発性メモリのように、一定時間プログラムを保持しているものを含む。
11 プログラム実行部
12 フロー情報作成部
13 フロー情報作成記憶部
14 近傍重み情報生成部
15 近傍重み表情報記憶部
16 関数配置決定部
17 関数配置指定情報記憶部
21 フロー情報
22 近傍重み表情報
23 関数配置指定情報
101〜104 ステップ

Claims (12)

  1. フロー情報作成手段と、近傍重み情報作成手段と、関数配置位置決定手段と、を有するプログラムメモリ空間配置装置において、複数の関数で構成されるプログラムの前記関数を、命令キャッシュを搭載したプロセッサシステムのメモリ空間に配置する方法であって、
    前記フロー情報作成手段が、ターゲットプロセッサの命令キャッシュラインサイズをCSとして、各関数をサイズがCSの命令コードブロックに分割し、各関数Fの先頭から数えてX番目の命令コードブロックを(F,X)と表現した場合に、前記プログラムの実行時に前記命令コードブロックの呼出し関係をトレースすることにより、前記プログラムの実行時の命令コードブロック間の呼出し関係を時系列に表現した、(F,X)を識別名とするノードのフロー情報を作成することと、
    前記近傍重み情報作成手段が、前記ノードのフロー情報に基づいて、識別名毎に前記フロー情報におけるその出現ノード毎の近傍内に、自分と異なる関数に属する各識別名の出現頻度を考慮した情報を、自分からみた他の各識別名の近傍重みとして求めることと、
    前記関数配置位置決定手段が、前記近傍重み情報に基づいて、前記命令キャッシュの競合回数が少なくなるように、前記複数の関数をメモリ空間に配置することと、
    を有する、プログラムメモリ空間配置方法。
  2. 前記近傍重み情報作成手段は、関数iに属する命令コードブロックで識別名がixの参照から、その後、同じixが出現するまでの間に最初に参照された関数j(ただしj≠i)に属する命令コードブロックで識別名がjyの参照までの区間をixjy、前記フロー情報全体に渡るその集合をRixjyとすると、ixjy区間毎について、区間内でi以外の関数に属する命令コードブロックで相異なる識別名を持つものが、jy自身を入れ計N種類存在した場合にスコアを1÷Nとし、Rixiyに含まれる全てのixjy区間のスコアの合計値を、前記近傍重みWixjyとして求める、請求項1に記載のプログラムメモリ空間配置方法。
  3. 前記関数配置位置決定手段は、個々の命令コードブロックの、他関数に属する全命令コードブロックに対する近傍重みの合計値を当該命令コードブロックのノード重みとし、さらに、各関数内の全命令コードブロックの前記ノード重みの合計として関数重みを求め、該関数重みの大きい関数から順にメモリへ空間の配置を行う、請求項1または2に記載のプログラムメモリ空間配置方法。
  4. 前記関数配置位置決定手段は、既に配置済みの関数に対し、現在配置の対象となる配置対象関数を、各キャッシュライン番号の先頭から配置した場合に、配置対象関数に属する各命令コードブロックixと、配置済み関数に属する命令コードブロックjyが同じキャッシュラインにロードされる場合に、前記近傍重みWixjyと前記近傍重みWjyixのうち、値の大きい方をキャッシュ競合スコアとして計上していくことで計算される、配置対象関数のキャッシュライン配置毎でのキャッシュ競合スコアのうち、最小のキャッシュ競合スコアを与えるキャッシュライン配置を、当該配置対象関数のキャッシュライン配置とする、請求項1から3のいずれか1項に記載のプログラムメモリ空間配置方法。
  5. 複数の関数で構成されるプログラムの前記関数を、命令キャッシュを搭載したプロセッサシステムのメモリ空間に配置する装置であって、
    ターゲットプロセッサの命令キャッシュラインサイズをCSとして、各関数をサイズがCSの命令コードブロックに分割し、各関数Fの先頭から数えてX番目の命令コードブロックを(F,X)と表現した場合に、前記プログラムの実行時に前記命令コードブロックの呼出し関係をトレースすることにより、前記プログラムの実行時の命令コードブロック間の呼出し関係を時系列に表現した、(F,X)を識別名とするノードのフロー情報を作成するフロー情報作成手段と、
    前記ノードのフロー情報に基づいて、識別名毎に前記フロー情報におけるその出現ノード毎の近傍内に、自分と異なる関数に属する各識別名の出現頻度を考慮した情報を、自分からみた他の各識別名の近傍重みとして求める近傍重み情報作成手段と、
    前記近傍重み情報に基づいて、前記命令キャッシュの競合回数が少なくなるように、前記複数の関数をメモリ空間に配置する関数配置位置決定手段と、
    を有する、プログラムメモリ空間配置装置。
  6. 前記近傍重み情報作成手段は、前記関数iに属する命令コードブロックで識別名がixの参照から、その後、同じixが出現するまでの間に最初に参照された関数j(ただしj≠i)に属する命令コードブロックで識別名がjyの参照までの区間をixjy、前記フロー情報全体に渡るその集合をRixjyとすると、ixjy区間毎について、区間内でi以外の関数に属する命令コードブロックで相異なる識別名を持つものが、jy自身を入れ計N種類存在した場合にスコアを1÷Nとし、Rixiyに含まれる全てのixjy区間のスコアの合計値を、前記近傍重みWixjyとして求める、請求項5に記載のプログラムメモリ空間配置装置。
  7. 前記関数配置位置決定手段は、個々の命令コードブロックの、他関数に属する全命令コードブロックに対する近傍重みの合計値を当該命令コードブロックのノード重みとし、さらに、各関数内の全命令コードブロックの前記ノード重みの合計として関数重みを求め、該関数重みの大きい関数から順にメモリ空間への配置を行う、請求項5または6に記載のプログラムメモリ空間配置装置。
  8. 前記関数配置位置決定手段は、既に配置済みの関数に対し、現在配置の対象となる配置対象関数を、各キャッシュライン番号の先頭から配置した場合に、配置対象関数に属する各命令コードブロックixと、配置済み関数に属する命令コードブロックjyが同じキャッシュラインにロードされる場合に、前記近傍重みWixjyと前記近傍重みWjyixのうち、値の大きい方をキャッシュ競合スコアとして計上していくことで計算される、配置対象関数のキャッシュライン配置毎でのキャッシュ競合スコアのうち、最小のキャッシュ競合スコアを与えるキャッシュライン配置を、当該配置対象関数のキャッシュライン配置とする、請求項5から7のいずれか1項に記載のプログラムメモリ空間配置装置。
  9. 複数の関数で構成されるプログラムの前記関数を、命令キャッシュを搭載したプロセッサシステムのメモリ空間に配置することをコンピュータに実行させるためのプログラムであって、
    ターゲットプロセッサの命令キャッシュラインサイズをCSとして、各関数をサイズがCSの命令コードブロックに分割し、各関数Fの先頭から数えてX番目の命令コードブロックを(F,X)と表現した場合に、前記プログラムの実行時に前記命令コードブロックの呼出し関係をトレースすることにより、前記プログラムの実行時の命令コードブロック間の呼出し関係を時系列に表現した、(F,X)を識別名とするノードのフロー情報を作成する手順と、
    前記ノードのフロー情報に基づいて、識別名毎に前記フロー情報におけるその出現ノード毎の近傍内に、自分と異なる関数に属する各識別名の出現頻度を考慮した情報を、自分からみた他の各識別名の近傍重みとして求める手順と、
    前記近傍重み情報に基づいて、前記命令キャッシュの競合回数が少なくなるように、前記複数の関数をメモリ空間に配置する手順と、
    をコンピュータに実行させるためのプログラム。
  10. 前記のフロー情報を作成する手順は、関数iに属する命令コードブロックで識別名がixの参照から、その後、同じixが出現するまでの間に最初に参照された関数j(ただしj≠i)に属する命令コードブロックで識別名がjyの参照までの区間をixjy、前記フロー情報全体に渡るその集合をRixjyとすると、ixjy区間毎について、区間内でi以外の関数に属する命令コードブロックで相異なる識別名を持つものが、jy自身を入れ計N種類存在した場合にスコアを1÷Nとし、Rixiyに含まれる全てのixjy区間のスコアの合計値を、前記近傍重みWixjyとして求める、請求項9に記載のプログラム。
  11. 前記のメモリ空間に配置する手順は、個々の命令コードブロックの、他関数に属する全命令コードブロックに対する近傍重みの合計値を当該命令コードブロックのノード重みとし、さらに、各関数内の全命令コードブロックの前記ノード重みの合計として関数重みを求め、該関数重みの大きい関数から順にメモリ空間への配置を行う、請求項9または10に記載のプログラム。
  12. 前記のメモリ空間に配置する手順は、既に配置済みの関数に対し、現在配置の対象となる配置対象関数を、各キャッシュライン番号の先頭から配置した場合に、配置対象関数に属する各命令コードブロックixと、配置済み関数に属する命令コードブロックjyが同じキャッシュラインにロードされる場合に、前記近傍重みWixjyと前記近傍重みWjyixのうち、値の大きい方をキャッシュ競合スコアとして計上していくことで計算される、配置対象関数のキャッシュライン配置毎でのキャッシュ競合スコアのうち、最小のキャッシュ競合スコアを与えるキャッシュライン配置を、当該配置対象関数のキャッシュライン配置とする、請求項9から11のいずれか1項に記載のプログラム。
JP2009064301A 2009-03-17 2009-03-17 プログラムのメモリ空間への配置方法、装置、およびプログラム Expired - Fee Related JP4600700B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2009064301A JP4600700B2 (ja) 2009-03-17 2009-03-17 プログラムのメモリ空間への配置方法、装置、およびプログラム
EP10753409.1A EP2410432A4 (en) 2009-03-17 2010-03-03 METHOD OF ARRANGING A PROGRAM WITH RESPECT TO MEMORY SPACE, DEVICE AND RECORDING MEDIUM
PCT/JP2010/053431 WO2010106914A1 (ja) 2009-03-17 2010-03-03 プログラムのメモリ空間への配置方法、装置、および記録媒体
US13/256,788 US8732687B2 (en) 2009-03-17 2010-03-03 Arrangement method of programs to memory space, apparatus, and recording medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009064301A JP4600700B2 (ja) 2009-03-17 2009-03-17 プログラムのメモリ空間への配置方法、装置、およびプログラム

Publications (2)

Publication Number Publication Date
JP2010218218A JP2010218218A (ja) 2010-09-30
JP4600700B2 true JP4600700B2 (ja) 2010-12-15

Family

ID=42739577

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009064301A Expired - Fee Related JP4600700B2 (ja) 2009-03-17 2009-03-17 プログラムのメモリ空間への配置方法、装置、およびプログラム

Country Status (4)

Country Link
US (1) US8732687B2 (ja)
EP (1) EP2410432A4 (ja)
JP (1) JP4600700B2 (ja)
WO (1) WO2010106914A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5808450B1 (ja) 2014-04-04 2015-11-10 ファナック株式会社 マルチコアプロセッサを使用して逐次プログラムを実行する制御装置
WO2016113869A1 (ja) * 2015-01-14 2016-07-21 三菱電機株式会社 キャッシュメモリにおける関数の配置装置
CN113608886B (zh) * 2021-06-30 2024-04-26 北京新氧科技有限公司 一种函数接入缓存方法、装置、电子设备及存储介质

Citations (4)

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

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1061449A4 (en) 1998-02-04 2005-12-21 Hitachi Ltd METHOD OF MANAGING ANEMATORY DISK, DISC STRUCTURE AND MEMORY
JP3178403B2 (ja) * 1998-02-16 2001-06-18 日本電気株式会社 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US6675374B2 (en) * 1999-10-12 2004-01-06 Hewlett-Packard Development Company, L.P. Insertion of prefetch instructions into computer program code
JP3698949B2 (ja) 2000-03-28 2005-09-21 Necマイクロシステム株式会社 命令キャッシュへの関数割付最適化装置、関数割付最適化方法及び関数割付最適化手順を記録した記録媒体
NO313399B1 (no) 2000-09-14 2002-09-23 Fast Search & Transfer Asa Fremgangsmate til soking og analyse av informasjon i datanettverk
US7917646B2 (en) * 2002-12-19 2011-03-29 Intel Corporation Speculative distributed conflict resolution for a cache coherency protocol
US20050149916A1 (en) * 2003-12-29 2005-07-07 Tatiana Shpeisman Data layout mechanism to reduce hardware resource conflicts
JP4701611B2 (ja) * 2004-01-15 2011-06-15 株式会社日立製作所 動的変換方式のエミュレータ向けメモリ管理方法
JP2009064301A (ja) 2007-09-07 2009-03-26 Oyo Denshi:Kk リムーバブルメモリユニット
US9459851B2 (en) * 2010-06-25 2016-10-04 International Business Machines Corporation Arranging binary code based on call graph partitioning

Patent Citations (4)

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

Also Published As

Publication number Publication date
JP2010218218A (ja) 2010-09-30
EP2410432A1 (en) 2012-01-25
EP2410432A4 (en) 2014-12-03
US8732687B2 (en) 2014-05-20
WO2010106914A1 (ja) 2010-09-23
US20120042129A1 (en) 2012-02-16

Similar Documents

Publication Publication Date Title
Blelloch et al. Effectively sharing a cache among threads
TWI442235B (zh) 記憶體交易群組
US20050246700A1 (en) Compiler with cache utilization optimizations
JP2011527788A5 (ja)
JP6432450B2 (ja) 並列計算装置、コンパイル装置、並列処理方法、コンパイル方法、並列処理プログラムおよびコンパイルプログラム
JP2016207161A (ja) 情報処理装置、コンパイル方法およびコンパイルプログラム
JP2011022993A (ja) マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム
CN103092742A (zh) 程序日志记录优化方法和系统
JP4600700B2 (ja) プログラムのメモリ空間への配置方法、装置、およびプログラム
Chen et al. Flow-guided file layout for out-of-core pathline computation
CN102789377B (zh) 处理指令分组信息的方法和装置
US7689976B2 (en) Compiler apparatus and linker apparatus
JP6098294B2 (ja) 情報秘匿化装置、情報秘匿化方法
CN107977577A (zh) 访存指令访问检测方法及装置
US20140157248A1 (en) Conversion apparatus, method of converting, and non-transient computer-readable recording medium having conversion program stored thereon
US6625806B1 (en) Language processing method and language processing system improving use efficiency of cache memory
JP2009032198A (ja) キャッシュカラーリング方法
JP4554241B2 (ja) キャッシュカラーリング方法
JP2003271394A (ja) 関数と基本ブロックの配置割付装置および割付最適化プログラム
JP2022140995A (ja) 情報処理装置、コンパイルプログラムおよびコンパイル方法
JP3698949B2 (ja) 命令キャッシュへの関数割付最適化装置、関数割付最適化方法及び関数割付最適化手順を記録した記録媒体
JP2016162008A (ja) データ配置決定装置、データ配置決定プログラム及びデータ配置決定方法
CN106250492B (zh) 索引的处理方法及装置
CN109753389A (zh) 保证数据一致性的方法、装置、存储介质及服务器
JP5849744B2 (ja) 関数配置装置、関数配置プログラム、関数配置方法

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100802

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: 20100901

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: 20100914

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

Free format text: PAYMENT UNTIL: 20131008

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees