JP6138384B2 - プログラム配置装置、プログラム配置方法及びプログラム配置プログラム - Google Patents
プログラム配置装置、プログラム配置方法及びプログラム配置プログラム Download PDFInfo
- Publication number
- JP6138384B2 JP6138384B2 JP2016569166A JP2016569166A JP6138384B2 JP 6138384 B2 JP6138384 B2 JP 6138384B2 JP 2016569166 A JP2016569166 A JP 2016569166A JP 2016569166 A JP2016569166 A JP 2016569166A JP 6138384 B2 JP6138384 B2 JP 6138384B2
- Authority
- JP
- Japan
- Prior art keywords
- function
- program
- cache memory
- instruction code
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims description 111
- 230000006870 function Effects 0.000 claims description 324
- 230000015654 memory Effects 0.000 claims description 184
- 230000008569 process Effects 0.000 claims description 78
- 238000004088 simulation Methods 0.000 claims description 20
- 230000008707 rearrangement Effects 0.000 claims description 7
- 230000007704 transition Effects 0.000 description 20
- 238000010586 diagram Methods 0.000 description 15
- 238000004364 calculation method Methods 0.000 description 13
- 239000000284 extract Substances 0.000 description 12
- 230000000875 corresponding effect Effects 0.000 description 6
- 230000002860 competitive effect Effects 0.000 description 4
- 230000002596 correlated effect Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
プログラムが関数単位で構成されることに着目し、関数間の呼び出し関係を表す関数強度を定義し、関数強度が高い関数同士が同一のキャッシュラインに割り当てられないようにする手法が提案されている。
特許文献2では、関数をキャッシュラインサイズの命令コードブロック、すなわちICBに分割してシミュレーションし、ICB単位でフロー情報を抽出する。特許文献2では、各ICBの近傍内に、自分と異なる関数に属するICBの出現頻度を考慮した情報を、自ICBから見た他のICBの近傍重み情報として求める。この近傍重み情報に基づいて、関数配置を決定することによって、競合キャッシュミスを削減する手法が開示されている。
しかし、キャッシュメモリの構成によっては、相関性の高い関数同士でも、競合キャッシュミスが発生しない場合が存在する。例えば、キャッシュメモリとして4ウェイ構成を採用した場合、相関性の高い4つの関数が、連続的かつ繰り返し呼び出されたとしても、競合キャッシュミスは発生しない。
このように、キャッシュメモリの構成と関数の呼び出しパターンによっては、競合キャッシュミスが発生しない可能性があるにも関わらず、従来技術では関数の相関性を求める際に、このような事象を考慮していない。そのため、キャッシュメモリの構成と関数の呼び出しパターンによっては、最適な配置が求まらないという課題があった。
前記プログラムを実行することにより、前記複数の関数の各関数の呼び出し順を取得する取得部と、
前記キャッシュメモリの前記ウェイの数分の格納エリアを有する仮想キャッシュメモリを生成する仮想キャッシュメモリ生成部と、
前記仮想キャッシュメモリに対して前記複数の関数の各関数を前記呼び出し順に呼出命令コードとして呼び出すシミュレーションを実行し、既に呼び出した前記呼出命令コードを再度呼び出した際に前記格納エリアに前記呼出命令コード以外の関数が格納されている競合が発生した場合、発生した前記競合の情報を競合情報として取得するシミュレータ部と、
前記競合情報に基づいて、前記キャッシュメモリにおける前記複数の関数の各関数の配置位置を決定する配置位置決定部と
を備える。
***構成の説明***
図1は、実施の形態1に係るプログラム配置装置500を示すブロック構成図である。
プログラム配置装置500は、プログラム10、取得部21、呼び出し順31、キャッシュ構成情報40、プログラム情報50、仮想キャッシュシミュレータ部60、競合情報70、配置位置決定部80、関数配置情報90、関数配置部100、最適化済プログラム110、優先順位テーブル130を備える。
キャッシュ構成情報40は、プログラム10を、最終的に動作させるターゲットプロセッサに搭載される、キャッシュメモリ401の情報であり、キャッシュラインサイズ、ウェイ数、セット数及び置換アルゴリズムの種類の情報を含む。
プログラム情報50は、プログラム10に含まれる全関数について、関数のラベル、配置アドレス、関数のサイズの組の情報を保持する。
競合情報70は、各関数に含まれるキャッシュラインサイズのICB単位での競合の情報を保持する競合ミスデータベースである。
関数配置部100は、プログラム10と関数配置情報90とを入力として、関数の再配置を実行し、最適化済プログラム110を出力する。
最適化済プログラム110は、プログラム10と動作は同じであるが、プログラム内の関数配置が異なり、競合キャッシュミスが最小化されたプログラムである。
仮想キャッシュシミュレータ部60は、仮想キャッシュメモリ生成部601とシミュレータ部605とを備える。シミュレータ部605は、仮想キャッシュデータ保持部602、命令トレース読出し部603、競合情報生成部604を備える。
以上のように、仮想キャッシュメモリ生成部601は、キャッシュ構成情報40に基づいて、仮想キャッシュデータ保持部602のデータ構造である仮想キャッシュメモリ403を構築する。
競合情報生成部604は、仮想キャッシュデータ保持部602でキャッシュミスが発生した際に、キャッシュミスを引き起こすICBの組み合わせに関する情報を競合情報70に登録する。
命令トレース30より、図3のICBの実行系列303が得られているものとする。競合情報生成部604は、図3のICBの実行系列303に基づいて、図4に示す競合情報70を生成する。
競合ミスエントリ75は、ミスID76、競合ICB数77及び競合ICBごとのミス数78から構成される。自ICBとは、着目しているICB自身のことを表しており、図4のA0の競合ミスデータレコード71においては、A0が自ICBとなる。他ICBとは、着目しているICBが競合している他のICBの集合を表しており、図4のA0の競合ミスデータレコード71においては、B0、C0が他ICBとなる。競合ICBとは、あるキャッシュミスが発生した際に、競合する全ICBの集合を表す。
自ICBとしての合計ミス数73は、自分自身を参照する時に発生した競合キャッシュミス回数を表す。
他ICBとしての合計ミス数74は、自分自身と競合する、他のICBを参照する時に発生した、競合キャッシュミス回数を表す。
競合ミスエントリ75は、あるICBの組み合わせにおける、キャッシュミスの発生状況を示すデータであり、競合ミスデータレコード71ごとに1個以上存在する。
競合ICB数77は、競合キャッシュミス発生時に関連するICBの数を表す。競合ICB数77には、自ICBも含まれる。同じICB内において、同じ競合ICB数であるにも関わらず、別のキャッシュミスとして記録されているのは、競合キャッシュミスの発生回数を、競合ICBの組み合わせごとに保持しているからである。
プログラム配置装置500はコンピュータである。
プログラム配置装置500は、プロセッサ901、補助記憶装置902、メモリ903、通信装置904、入力インタフェース905、ディスプレイインタフェース906といったハードウェアを備える。
プロセッサ901は、信号線910を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
入力インタフェース905は、入力装置907に接続されている。
ディスプレイインタフェース906は、ディスプレイ908に接続されている。
プロセッサ901は、例えば、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、GPU(Graphics Processing Unit)である。
補助記憶装置902は、例えば、ROM(Read Only Memory)、フラッシュメモリ、HDD(Hard Disk Drive)である。
メモリ903は、例えば、RAM(Random Access Memory)である。
通信装置904は、データを受信するレシーバー9401及びデータを送信するトランスミッター9402を含む。
通信装置904は、例えば、通信チップ又はNIC(Network Interface Card)である。
入力インタフェース905は、入力装置907のケーブル911が接続されるポートである。
入力インタフェース905は、例えば、USB(Universal Serial Bus)端子である。
ディスプレイインタフェース906は、ディスプレイ908のケーブル912が接続されるポートである。
ディスプレイインタフェース906は、例えば、USB端子又はHDMI(登録商標)(High Definition Multimedia Interface)端子である。
入力装置907は、例えば、マウス、キーボード又はタッチパネルである。
ディスプレイ908は、例えば、LCD(Liquid Crystal Display)である。
このプログラム配置プログラムは、メモリ903にロードされ、プロセッサ901に読み込まれ、プロセッサ901によって実行される。
更に、補助記憶装置902には、OS(Operating System)も記憶されている。
そして、OSの少なくとも一部がメモリ903にロードされ、プロセッサ901はOSを実行しながら、「部」の機能を実現するプログラムを実行する。
図5では、1つのプロセッサ901が図示されているが、プログラム配置装置500が複数のプロセッサ901を備えていてもよい。
そして、複数のプロセッサ901が「部」の機能を実現するプログラムを連携して実行してもよい。
また、「部」の処理の結果を示す情報やデータや信号値や変数値が、メモリ903、補助記憶装置902、又は、プロセッサ901内のレジスタ又はキャッシュメモリにファイルとして記憶される。
また、「部」を「回路」又は「工程」又は「手順」又は「処理」に読み替えてもよい。
「回路」及び「サーキットリー」は、プロセッサ901だけでなく、ロジックIC又はGA(Gate Array)又はASIC(Application Specific Integrated Circuit)又はFPGA(Field−Programmable Gate Array)といった他の種類の処理回路をも包含する概念である。
図6を用いて、本実施の形態に係るプログラム配置装置500のプログラム配置方法、プログラム配置処理S10について説明する。
上述したように、プログラム配置プログラムは、少なくとも1つのウェイを使用するキャッシュメモリ401に複数の関数を含むプログラム10を配置するコンピュータであるプログラム配置装置500に実行させるプログラムである。
仮想キャッシュシミュレーション処理は、仮想キャッシュメモリ生成処理S1a及びシミュレーション処理S2を備える。仮想キャッシュシミュレータ部60は、命令トレース30、キャッシュ構成情報40及びプログラム情報50の情報に基づいて、競合情報70を生成する仮想キャッシュシミュレーション処理S200を実行する。
ステップS200において、仮想キャッシュメモリ生成部601が、キャッシュ構成情報40に基づいて、仮想キャッシュメモリ403を生成する仮想キャッシュメモリ生成処理S1aを実行する。仮想キャッシュメモリ生成処理S1aの詳細については後述する。仮想キャッシュデータ保持部602は、仮想キャッシュメモリ生成部601が構成する仮想キャッシュメモリ403にデータを保持する。
ステップS201において、命令トレース読出し部603は、命令トレース30を最後まで読み出したか判断し、読み出していなければステップS202に遷移し、読み出していれば処理を終了する。
ステップS203において、命令トレース読出し部603が、取り出した命令アドレスが含まれるICBを求めるICB取得処理S203を実行する。命令トレース読出し部603は、ICB取得処理S203を実行した後、ステップS204に遷移する。
ステップS205では、競合情報生成部604は、キャッシュミス発生時のICBの組み合わせ情報を競合ICB702として、競合情報70に登録し、ステップS206に遷移する。ステップS205の詳細は後述する。
ステップS206では、読み出したブロックに応じて、キャッシュの内容を更新し、ステップS201に戻る。仮想キャッシュシミュレータ部60は、上記の処理をステップS201が真になるまで、すなわちステップS201においてYESになるまで続ける。
図8及び図9を用いて、仮想キャッシュメモリ生成処理S1aについて説明する。
仮想キャッシュメモリ生成部601は、キャッシュ構成情報40に基づいて、仮想キャッシュメモリ403の構成を変化させる。仮想キャッシュメモリ生成部601は、アドレスが連続する複数のエリア4039を生成する。複数のエリア4039は、ウェイの数分の実ウェイである格納エリア4031と、格納エリア4031の後ろに連続する複数の仮想ウェイである仮格納エリア4032とから構成される。
図9は、キャッシュメモリ401が、2ウェイセットアソシアティブ方式、ウェイの数は2、セット数4、64Bキャッシュライン、LRU方式である場合の、仮想キャッシュメモリ403の生成方法を示している。
仮想キャッシュメモリ403は、キャッシュメモリ401のウェイ数及びセット数に関わらず、セット数1のNウェイセットアソシアティブキャッシュとして構成される。ここでNは、使用者が任意に設定できるパラメータであり、大きい値を設定するほど、多数のICB間の相関性を観測することができる。
ステップS203における命令アドレスが含まれるICBを求めるICB取得処理S203について補足する。
命令アドレスが含まれるICBを求めるためには、関数をどのようにICBへ分割するかを選択する必要がある。手法としては、図10に示す関数の先頭からICBのサイズで分割する方法と、図11に示す関数が含まれるキャッシュラインの先頭から分割する方法とがある。
また、関数Bのセット3は、キャッシュラインの先頭ではなく、真ん中から始まっている。このような場合であっても、関数Bの先頭からではなく、セット3のキャッシュラインの先頭からICBへの分割を実行する。つまり、B0の前半分は何も入っておらず、残りの半分に関数Bの命令コードが入っているものとする。
上記の通り、メモリ配置を考慮したICBの分割を実行することにより、実際のプログラム動作通りの、正確な競合キャッシュミス発生状況を記録することができる。そのため、本実施の形態では、図11に示す手法を採用する。
ICBの組み合わせ情報を競合情報70に登録する競合情報登録処理S205について図12から図14を用いて説明する。
ここでは、命令トレース30より、図3のようなICBの実行系列303が得られている場合を考える。
図12は、1回目の呼出命令コード4033であるC0を参照したタイミングでの、実ウェイ数1の仮想キャッシュメモリ403の内容を示している。1回目のC0を参照したタイミングでは、実ウェイにC0は無いため、キャッシュミスが発生する。仮想ウェイにもC0は存在しないため、1回目のC0への参照は初期参照ミスであることが分かる。初期参照ミスの場合、競合情報70への情報の記録は行わない。
図15を用いて、競合情報登録処理S205の全体処理フローについて説明する。
ステップS2050において、競合情報生成部604は、自ICBを競合情報70に登録する。
ステップS2051において、競合情報生成部604は、競合ICBの内、自ICB以外の他ICBを競合情報70に登録する。
図16を用いて、図15のステップS2050の詳細処理フローについて説明する。
ステップS205000において、競合情報生成部604は、自ICBが競合情報70に存在するか判断する。競合情報生成部604は、存在する場合は、ステップS205001に遷移し、存在しない場合はステップS205002に遷移する。
ステップS205001において、競合情報生成部604は、自ICBの競合ミスデータレコード71を取り出し、ステップS205005に遷移する。
ステップS205003において、ICB名72に自ICB名を設定し、ステップS205004に遷移する。
ステップS205004で、自ICBとしての合計ミス数73を1に、他ICBとしての合計ミス数74を0に初期化し、ステップS205007に遷移する。
ステップS205006で、競合情報生成部604は、自ICBとしての合計ミス数73の値を1増加させ、ステップS205011に遷移する。
ステップS205008において、競合情報生成部604は、処理対象のキャッシュミスに対して、新しいミスID76を割り振り、ステップS205009に遷移する。
ステップS205009において、競合情報生成部604は、処理対象のキャッシュミスの競合ICB数を、競合ICB数77に設定し、ステップS205010に遷移する。
ステップS205010で、競合情報生成部604は、競合ICBごとのミス数78において、競合ICBの値を0に初期化し、ステップS205011に遷移する。
図17を用いて、図15のステップS2051の詳細処理フローについて説明する。
ステップS205100において、競合情報生成部604は、未処理の競合ICBが存在するか判断する。競合情報生成部604は、存在する場合は、ステップS205101に遷移し、存在しない場合は終了する。
ステップS205102において、競合情報生成部604は、処理対象の競合ICBが競合情報70に存在するか判断する。競合情報生成部604は、存在すれば、ステップS205103に遷移し、存在しなければ、ステップS205104に遷移する。
ステップS205105において、競合情報生成部604は、ICB名72に処理対象の競合ICB名を設定し、ステップS205106に遷移する。
ステップS205106において、競合情報生成部604は、自ICBとしての合計ミス数73を0に、他ICBとしての合計ミス数74を1に初期化し、ステップS205109に遷移する。
ステップS205108において、競合情報生成部604は、他ICBとしての合計ミス数74の値を1増加させ、ステップS205112に遷移する。
ステップS205110において、競合情報生成部604は、処理対象のキャッシュミスに対して、新しいミスID76を割り振り、ステップS205111に遷移する。
ステップS205111において、競合情報生成部604は、処理対象のキャッシュミスの競合ICB数を、競合ICB数77に設定し、ステップS205112に遷移する。
ステップS205112において、競合情報生成部604は、競合ICBごとのミス数78において、競合ICBの値を0に初期化し、ステップS205113に遷移する。
競合情報生成部604は、上記の処理をステップS205100が偽、すなわちステップS205100においてNOになるまで続ける。
次に、図7のステップS206における、キャッシュ内容の更新処理について図18及び図19を用いて説明する。
ステップS206では、仮想キャッシュシミュレータ部60は、キャッシュ構成情報40に設定された置換アルゴリズムに基づいて、仮想キャッシュメモリ403におけるICBの置換を実行する。仮想キャッシュメモリ403では、置換対象となるICBは最も右側に配置される。LRU方式では、数字の小さいウェイに存在するICBほど、最近にアクセスされたことを示す。
図18では、C0の参照時にC0が仮想キャッシュメモリ403上に存在しないため、仮想キャッシュシミュレータ部60は、仮想キャッシュメモリ403上に存在する全てのICBを右に1ウェイ分ずらし、ウェイ0、すなわち実ウェイ0にC0を保存する。言い換えると、仮想キャッシュシミュレータ部60は、仮想キャッシュメモリ403上に存在する全てのICBを後ろに1エリア分ずらし、仮想キャッシュメモリ403の先頭の実ウェイにC0を保存する。
図20は、本実施の形態に係る配置位置決定処理S3の動作を示すフロー図である。
配置位置決定部80が、競合情報70に基づいて、関数配置情報90を出力する。
まず、ステップS300において、配置位置決定部80は、関数を配置する優先順位を決定する。配置位置決定部80は、ルール131に基づいて、関数を配置する順番を決定する。
ルール131には、ルール1からルール4まで設定されている。配置位置決定部80は、数字の小さいルールから適用し、複数の関数で同じ値となる場合は、次のルールを適用する。
次に、配置位置決定部80は、ルール1で同じ値となった関数同士では、ルール2を適用し、関数に属する、各ICBの競合ICBの種類数で優先順位をつける。ルール2は、他ICBで発生する競合ミス数が同じであっても、より多くの他ICBに対して影響を及ぼす関数を、優先的に配置するために適用される。
配置位置決定部80は、ルール2でも優劣がつかない場合、ルール3を適用し、関数に属する、各ICBの自ICBとしての合計ミス数73の総和で判断する。最後に、配置位置決定部80は、ルール4の関数のサイズで優劣をつける。ルール4でも優先順位が決まらない場合は、配置位置決定部80は、任意で配置する関数を選択する。
ステップS302において、配置位置決定部80は、未配置の関数の内、優先順位の高い関数を1つ取り出す。
ステップS303において、取り出した処理対象の関数をセット0から最後のセットまで動かし、全ての配置方法において、既配置の関数と引き起こす競合キャッシュミス発生回数を計算し、最小のミス数となる場所を求める。ステップS303の詳細は後述する。
ステップS304において、配置位置決定部80は、最小の競合キャッシュミス発生回数を示す場所に配置を決定し、ステップS301に遷移する。上記の処理をステップS301が真になるまで、すなわちステップS301でYESとなるまで続ける。
ステップS305において、配置位置決定部80は、上記の配置結果をまとめ、関数配置情報90を出力する。
図22を用いて、ステップS303の既配置関数とのミス数の計算処理について説明する。
ステップS30300において、配置位置決定部80は、配置対象の関数である配置対象関数をまだ配置していない場所にセットし、ステップS30301に遷移する。
ステップS30301において、配置位置決定部80は、ミス数を格納する一時変数を0に初期化し、ステップS30302に遷移する。
ステップS30302において、配置位置決定部80は、配置対象関数に含まれるICBの内、まだキャッシュミス数を計算していないICBを取り出し、ステップS30303に遷移する。
ステップS30304で、配置位置決定部80は、取り出した処理対象のICBの競合ミスデータレコード71を取り出し、ステップS30305に遷移する。
ステップS30305で、配置位置決定部80は、未調査の競合ミスエントリ75を1つ取り出し、ステップS30306に遷移する。
ステップS30306で、配置位置決定部80は、競合ミスエントリ75に含まれる競合ICBの内、既配置の競合ICB数を調べ、ステップS30307に遷移する。
ステップS30309で、配置位置決定部80は、処理対象のICBに含まれる全ての競合ミスエントリ75を調べたか判断する。配置位置決定部80は、全て調べている場合、ステップS30310に遷移し、調べていない競合ミスエントリ75がある場合はステップS30305に戻る。
ステップS30311で、配置位置決定部80は、ミス数の一時変数の値が、現在の最小ミス数より小さい場合、ステップS30312に遷移し、そうでない場合、ステップS30313に遷移する。
ステップS30312で、配置位置決定部80は、最小ミス数と最小配置を更新し、ステップS30313に遷移する。
ステップS30313で、配置位置決定部80は、配置対象関数において、全ての配置を試したか判断し、試した場合は終了し、そうでない場合はステップS30300に戻る。
命令トレース30より、図3のようなICBの実行系列303が得られている場合に、セット数2のダイレクトマップキャッシュへの配置を考える。関数はA、B、Cの三種類であり、全ての関数は1つのICB以内のサイズであるとする。図3の実行系列から競合情報70を生成すると、図4のような結果となる。
ステップS300で、ルール131と競合情報70とから、関数の優先順位が計算され、関数C、関数B、関数Aの順番で配置していくことが決定される。
ステップS303において、関数Bをセット0から最後のセットまで配置をためし、既配置関数との間で起こる競合ミス数の内、最小のミス数となる場所を求める。
図23に、関数Bをセット0に配置した場合の、キャッシュミス発生回数の計算結果を示す。関数Bがセット0に配置される場合の、C0との間で起こすキャッシュミスが計算される。計算の結果、CM(B0,C0)が4と求まる。ここでCM(X,Y)は、カッコ内で指定されたICBが、同じセットに配置された場合のキャッシュミス数を表すものとする。よって、CM(B0,C0)は、B0,C0が同じセットに配置された場合のキャッシュミス数である。
図24に、関数Bをセット1に配置した場合の、キャッシュミス発生回数の計算結果を示す。関数Bがセット1に配置される場合、CM(B0)=0と求まる。
以上の結果、ステップS304において、関数Bはセット1に配置される。
ステップS303において、関数Aをセット0から最後のセットまで配置をためし、既配置関数との間で起こる競合ミス数の内、最小のミス数となる場所を求める。
図25に、関数Aをセット0に配置した場合の、キャッシュミス発生回数の計算結果を示す。関数Aがセット0に配置される場合の、C0との間で起こすキャッシュミスが計算される。計算の結果、CM(A0,C0)=3+2=5と求まる。CM(A0,C0)は、A0,C0が同じセットに配置された場合のキャッシュミス数である。
図26に、関数Aをセット1に配置した場合の、キャッシュミス発生回数の計算結果を示す。関数Aがセット1に配置される場合、CM(A0,B0)=2+1=3と求まる。
以上の結果、ステップS304において、関数Aはセット1に配置される。
ステップS305において、関数Cをセット0に格納されるアドレス、関数Bと関数Aをセット1に格納されるアドレスにそれぞれ配置されるものとして、関数配置情報90が出力される。
本実施の形態に係るプログラム配置装置500は、命令トレースを入力とし、関数間の競合情報を抽出する仮想キャッシュシミュレータ部を備える。また、各ICBの競合情報を保持する競合ミスデータベースを備え、競合ミスデータベースに基づいて、競合ミスを抑制する関数配置を算出する配置位置決定部を備える。プログラム配置装置500は、関数をキャッシュラインサイズのICBに分割し、競合ミス発生時のICBの組み合わせ情報の抽出を行い、その情報に基づいて関数を配置する。よって、プログラム配置装置500によれば、競合ミスを抑制する配置を決定することができる。
本実施の形態では、主に、実施の形態1と異なる点について説明する。
実施の形態1で説明した構成と同様の構成については同一の符号を付し、その説明を省略する場合がある。
図27では、最初の関数の先頭から、最後の関数の最後尾までの領域の内、有効な関数の命令で埋まっている割合は約69%となる。メモリ容量の増大は、コストの増加につながるため、メモリ効率を向上させることが重要である。
そこで、本実施の形態では、メモリ使用効率を向上させる方式について説明する。
図28は、本実施の形態2に係るプログラム配置装置500aを示すブロック構成図である。
本実施の形態のプログラム配置装置500aは、図1の構成に加え、関数配置調整部120を有する。
関数配置調整部120は、配置位置決定部80により決定された複数の関数の各関数の配置位置801に基づいて、複数の関数の各関数を配置位置801とは異なる再配置位置802に並び替える。複数の関数の各関数が再配置位置802に配置された場合のキャッシュメモリ401の空き領域4015は、複数の関数の各関数が配置位置801に配置された場合のキャッシュメモリ401の空き領域4016よりも少ない。
図29を用いて、本実施の形態に係るプログラム配置装置500aのプログラム配置方法、プログラム配置処理S10aについて説明する。
ステップS5において、関数配置調整部120は、プログラム情報50、関数配置情報90に基づいて、メモリ使用効率を向上させた関数配置情報90aを生成する。
まず、ステップS500において、関数配置調整部120は、メモリアドレスを関数が配置されるメモリ空間の先頭に初期化し、ステップS501に遷移する。
ステップS501において、関数配置調整部120は、全関数を配置したかどうか確認する。配置していなければ、ステップS502に遷移し、配置していればステップS506に遷移する。
ステップS502において、関数配置調整部120は、未配置の関数の内、現在のメモリアドレスが示す、ブロックアドレスとブロックオフセットで始まる関数が存在するか確認する。存在すればステップS503に遷移し、存在しなければステップS505に遷移する。
ステップS503において、関数配置調整部120は、未配置の関数の内、現在のメモリアドレスが示す、ブロックアドレスとブロックオフセットを満たす関数を、関数配置情報90から一つ取り出し、現在のメモリアドレスに配置する。配置後、ステップS504に遷移する。
ステップS504において、関数配置調整部120は、処理対象の関数のサイズ分、メモリアドレスを進める。
ステップS505において、関数配置調整部120は、ブロックオフセット1つ分、メモリアドレスを進める。
ステップS506において、関数配置調整部120は、現在の配置情報を関数配置情報90として出力し、処理を終了する。
図27に示す関数配置情報90に対して、関数配置調整処理S5を実行した場合について説明する。関数配置情報90に対して、関数配置調整処理S5を実行した結果を図31の関数配置情報90aとする。
この具体例では、メモリ空間の先頭を0、ブロック内の命令数は2とする。
まず、関数配置調整部120は、メモリアドレス、ブロックアドレス、ブロックオフセットを関数が配置されるメモリ空間の先頭に初期化する。このとき、メモリアドレス0、ブロックアドレス0、ブロックオフセット0となる。
以上のように、関数配置調整処理S5の結果として、最初の関数の先頭から、最後の関数の最後尾までの領域の内、有効な関数の命令で埋まっている割合は98%となる。
本実施の形態に係るプログラム配置装置500aは、配置位置決定部が出力した関数配置情報90に基づいて、関数配置の並び替えを行う関数配置調整部を備える。そして、プログラム配置装置500aはでは、関数配置情報90に従って配置した場合のメモリの空き領域よりもメモリの空き領域が少なくなるように、関数の並び替えを実行する。
以上のように、本実施の形態に係るプログラム配置装置500aによれば、配置位置決定部が出力する関数配置情報90に基づいて、関数配置調整部120が、関数の並び替えを実行することで、メモリの使用効率を向上することができる。
なお、上記の実施の形態は、本質的に好ましい例示であって、本発明、その適用物や用途の範囲を制限することを意図するものではなく、必要に応じて種々の変更が可能である。
ディスプレイ、910 信号線、911,912 ケーブル、9401 レシーバー、9402 トランスミッター、4015,4016 空き領域、4031 格納エリア、4032 仮格納エリア、4033 呼出命令コード、4039 複数のエリア、S1 取得処理、S1a 仮想キャッシュメモリ生成処理、S2 シミュレーション処理、S3
配置位置決定処理、S4 関数配置処理、S5 関数配置調整処理、S10,S10a
プログラム配置処理。
Claims (8)
- 少なくとも1つのウェイを使用するキャッシュメモリに複数の関数を含むプログラムを配置するプログラム配置装置において、
前記プログラムを実行することにより、前記複数の関数の各関数に含まれる命令コードの呼び出し順を取得する取得部と、
前記キャッシュメモリの前記ウェイの数分の格納エリアと仮想ウェイの数分の仮格納エリアとを有する仮想キャッシュメモリを生成する仮想キャッシュメモリ生成部と、
前記仮想キャッシュメモリに対して前記命令コードを前記呼び出し順に呼出命令コードとして呼び出すシミュレーションを実行し、既に呼び出した前記呼出命令コードを再度呼び出した際に前記格納エリアおよび前記仮格納エリアに前記呼出命令コード以外の命令コードが格納されている競合が発生した場合、発生した前記競合の情報を競合情報として取得するシミュレータ部と、
前記競合情報に基づいて、前記キャッシュメモリにおける前記複数の関数の各関数の配置位置を決定する配置位置決定部と
を備えるプログラム配置装置。 - 前記シミュレータ部は、
前記複数の関数の各関数に含まれる命令コードのうち前記競合を発生させた命令コードの組み合わせを競合命令コード組として取得し、前記競合命令コード組により発生した前記競合の回数を競合回数として計数し、計数した前記競合回数を前記競合情報として取得し、
前記配置位置決定部は、
前記競合回数に基づいて、前記複数の関数の各関数の前記配置位置を決定する請求項1に記載のプログラム配置装置。 - 前記仮想キャッシュメモリ生成部は、
前記仮想キャッシュメモリとして、アドレスが連続する複数のエリアであって前記ウェイの数分の格納エリアと前記ウェイの数分の格納エリアの後ろに連続する前記仮想ウェイの数分の仮格納エリアとからなる複数のエリアを生成する請求項2に記載のプログラム配置装置。 - 前記シミュレータ部は、
前記呼出命令コードを呼び出した際に前記格納エリアに対して前記競合が発生し、かつ、前記呼出命令コードが前記仮格納エリアにある場合、既に前記仮想キャッシュメモリに格納されている前記呼出命令コードより前のエリアに格納されている全ての命令コードと前記呼出命令コードとの組を前記競合命令コード組として取得する請求項3に記載のプログラム配置装置。 - 前記シミュレータ部は、
前記競合命令コード組を取得した後に、既に前記仮想キャッシュメモリに格納されている前記呼出命令コードより前のエリアに格納されている全ての命令コードをそれぞれ1つ後ろのエリアに移動し、既に前記仮想キャッシュメモリに格納されている前記呼出命令コードを前記仮想キャッシュメモリの先頭の前記格納エリアに格納し、前記呼び出し順における前記呼出命令コードの次の命令コードを前記呼出命令コードとして呼び出す請求項4に記載のプログラム配置装置。 - 前記プログラム配置装置は、
前記配置位置決定部により決定された前記複数の関数の各関数の前記配置位置に基づいて、前記複数の関数の各関数を前記配置位置とは異なる再配置位置に並び替える関数配置調整部を備え、
前記複数の関数の各関数が前記再配置位置に配置された場合の前記キャッシュメモリの空き領域は、前記複数の関数の各関数が前記配置位置に配置された場合の前記キャッシュメモリの空き領域よりも少ない請求項1から5のいずれか1項に記載のプログラム配置装置。 - 少なくとも1つのウェイを使用するキャッシュメモリに複数の関数を含むプログラムを配置するプログラム配置装置のプログラム配置方法において、
取得部が、前記プログラムを実行することにより、前記複数の関数の各関数に含まれる命令コードの呼び出し順を取得し、
仮想キャッシュメモリ生成部が、前記キャッシュメモリの前記ウェイの数分の格納エリアと仮想ウェイの数分の仮格納エリアとを有する仮想キャッシュメモリを生成し、
シミュレータ部が、前記仮想キャッシュメモリに対して前記命令コードを前記呼び出し順に呼出命令コードとして呼び出すシミュレーションを実行し、既に呼び出した前記呼出命令コードを再度呼び出した際に前記格納エリアおよび前記仮格納エリアに前記呼出命令コード以外の命令コードが格納されている競合が発生した場合、発生した前記競合の情報を競合情報として取得し、
配置位置決定部が、前記競合情報に基づいて、前記キャッシュメモリにおける前記複数の関数の各関数の配置位置を決定するプログラム配置方法。 - 少なくとも1つのウェイを使用するキャッシュメモリに複数の関数を含むプログラムを配置するプログラム配置装置のプログラム配置プログラムにおいて、
前記プログラムを実行することにより、前記複数の関数の各関数に含まれる命令コードの呼び出し順を取得する取得処理と、
前記キャッシュメモリの前記ウェイの数分の格納エリアと仮想ウェイの数分の仮格納エリアとを有する仮想キャッシュメモリを生成する仮想キャッシュメモリ生成処理と、
前記仮想キャッシュメモリに対して前記命令コードを前記呼び出し順に呼出命令コードとして呼び出すシミュレーションを実行し、既に呼び出した前記呼出命令コードを再度呼び出した際に前記格納エリアおよび前記仮格納エリアに前記呼出命令コード以外の命令コードが格納されている競合が発生した場合、発生した前記競合の情報を競合情報として取得するシミュレーション処理と、
前記競合情報に基づいて、前記キャッシュメモリにおける前記複数の関数の各関数の配置位置を決定する配置位置決定処理とをコンピュータに実行させるプログラム配置プログラム。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2015/050845 WO2016113869A1 (ja) | 2015-01-14 | 2015-01-14 | キャッシュメモリにおける関数の配置装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2016113869A1 JPWO2016113869A1 (ja) | 2017-04-27 |
JP6138384B2 true JP6138384B2 (ja) | 2017-05-31 |
Family
ID=56405431
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016569166A Active JP6138384B2 (ja) | 2015-01-14 | 2015-01-14 | プログラム配置装置、プログラム配置方法及びプログラム配置プログラム |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP6138384B2 (ja) |
WO (1) | WO2016113869A1 (ja) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE69811159T2 (de) * | 1997-02-27 | 2003-10-23 | Koninklijke Philips Electronics N.V., Eindhoven | Verfahren zur verminderung der frequenz von zwischenspeicher-fehlgriffen in einem rechner |
JP5272346B2 (ja) * | 2007-07-30 | 2013-08-28 | 富士通セミコンダクター株式会社 | キャッシュカラーリング方法 |
JP4600700B2 (ja) * | 2009-03-17 | 2010-12-15 | 日本電気株式会社 | プログラムのメモリ空間への配置方法、装置、およびプログラム |
JP2011008607A (ja) * | 2009-06-26 | 2011-01-13 | Adcore-Tech Co Ltd | メモリ割当装置及びメモリ割当方法 |
-
2015
- 2015-01-14 WO PCT/JP2015/050845 patent/WO2016113869A1/ja active Application Filing
- 2015-01-14 JP JP2016569166A patent/JP6138384B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
WO2016113869A1 (ja) | 2016-07-21 |
JPWO2016113869A1 (ja) | 2017-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Calder et al. | Predictive sequential associative cache | |
US8938603B2 (en) | Cache system optimized for cache miss detection | |
JP5460486B2 (ja) | データをソートする装置及び方法 | |
CN103218309B (zh) | 多级指令高速缓存预取的方法、系统与设备 | |
US20150052139A1 (en) | Image search device, image search method, program, and computer-readable storage medium | |
JP7554795B2 (ja) | 複数の計算コア上のデータドリブンスケジューラ | |
JPH04241072A (ja) | 配線経路探索装置及び配線経路探索方法 | |
CN105359142B (zh) | 哈希连接方法和装置 | |
US10037278B2 (en) | Operation processing device having hierarchical cache memory and method for controlling operation processing device having hierarchical cache memory | |
TW202004494A (zh) | 直接記憶體存取方法、裝置、專用計算晶片及異構計算系統 | |
US10275230B2 (en) | Cache aware self-referential structure peeling | |
CN111930668B (zh) | 运算装置、方法、多核智能处理器及多核异构智能处理器 | |
JP6138384B2 (ja) | プログラム配置装置、プログラム配置方法及びプログラム配置プログラム | |
JP5979966B2 (ja) | 回路設計支援装置及び回路設計支援方法及びプログラム | |
JP2021192187A (ja) | 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法 | |
US8688918B2 (en) | Program converting apparatus, program converting method, and medium | |
JP6567215B2 (ja) | アーキテクチャ選定装置、アーキテクチャ選定方法およびアーキテクチャ選定プログラム | |
US8732687B2 (en) | Arrangement method of programs to memory space, apparatus, and recording medium | |
US20140173225A1 (en) | Reducing memory access time in parallel processors | |
CN115033500A (zh) | 缓存系统模拟方法、装置、设备和存储介质 | |
CN114048847A (zh) | 一种图神经网络数据缓存方法、装置、设备及存储介质 | |
US12020029B2 (en) | Program conversion device, program conversion method, and program conversion program | |
US20150234656A1 (en) | Vector processor, information processing apparatus, and overtaking control method | |
CN113448958B (zh) | 数据处理方法和装置、电子设备、存储介质 | |
WO2024054232A1 (en) | Low-latency cache |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20161003 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20161003 |
|
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: 20170328 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170425 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6138384 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |